ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1wb3dlciBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1wb3dlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTIzYzUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXBvd2VyCkBAIC0wLDAgKzEsNzkgQEAKK1doYXQ6CQkvc3lzL2RldmljZXMvLi4uL3Bvd2VyLworRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL2RldmljZXMvLi4uL3Bvd2VyIGRpcmVjdG9yeSBjb250YWlucyBhdHRyaWJ1dGVzCisJCWFsbG93aW5nIHRoZSB1c2VyIHNwYWNlIHRvIGNoZWNrIGFuZCBtb2RpZnkgc29tZSBwb3dlcgorCQltYW5hZ2VtZW50IHJlbGF0ZWQgcHJvcGVydGllcyBvZiBnaXZlbiBkZXZpY2UuCisKK1doYXQ6CQkvc3lzL2RldmljZXMvLi4uL3Bvd2VyL3dha2V1cAorRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL2RldmljZXMvLi4uL3Bvd2VyL3dha2V1cCBhdHRyaWJ1dGUgYWxsb3dzIHRoZSB1c2VyCisJCXNwYWNlIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgZW5hYmxlZCB0byB3YWtlIHVwIHRoZSBzeXN0ZW0KKwkJZnJvbSBzbGVlcCBzdGF0ZXMsIHN1Y2ggYXMgdGhlIG1lbW9yeSBzbGVlcCBzdGF0ZSAoc3VzcGVuZCB0bworCQlSQU0pIGFuZCBoaWJlcm5hdGlvbiAoc3VzcGVuZCB0byBkaXNrKSwgYW5kIHRvIGVuYWJsZSBvciBkaXNhYmxlCisJCWl0IHRvIGRvIHRoYXQgYXMgZGVzaXJlZC4KKworCQlTb21lIGRldmljZXMgc3VwcG9ydCAid2FrZXVwIiBldmVudHMsIHdoaWNoIGFyZSBoYXJkd2FyZSBzaWduYWxzCisJCXVzZWQgdG8gYWN0aXZhdGUgdGhlIHN5c3RlbSBmcm9tIGEgc2xlZXAgc3RhdGUuICBTdWNoIGRldmljZXMKKwkJaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzIGZvciB0aGUgc3lzZnMgcG93ZXIvd2FrZXVwCisJCWZpbGU6CisKKwkJKyAiZW5hYmxlZFxuIiB0byBpc3N1ZSB0aGUgZXZlbnRzOworCQkrICJkaXNhYmxlZFxuIiBub3QgdG8gZG8gc287CisKKwkJSW4gdGhhdCBjYXNlcyB0aGUgdXNlciBzcGFjZSBjYW4gY2hhbmdlIHRoZSBzZXR0aW5nIHJlcHJlc2VudGVkCisJCWJ5IHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYnkgd3JpdGluZyBlaXRoZXIgImVuYWJsZWQiLCBvcgorCQkiZGlzYWJsZWQiIHRvIGl0LgorCisJCUZvciB0aGUgZGV2aWNlcyB0aGF0IGFyZSBub3QgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIHN5c3RlbSB3YWtldXAKKwkJZXZlbnRzIHRoaXMgZmlsZSBjb250YWlucyAiXG4iLiAgSW4gdGhhdCBjYXNlcyB0aGUgdXNlciBzcGFjZQorCQljYW5ub3QgbW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYW5kIHRoZSBkZXZpY2UgY2Fubm90IGJlCisJCWVuYWJsZWQgdG8gd2FrZSB1cCB0aGUgc3lzdGVtLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzLy4uLi9wb3dlci9jb250cm9sCitEYXRlOgkJSmFudWFyeSAyMDA5CitDb250YWN0OglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvY29udHJvbCBhdHRyaWJ1dGUgYWxsb3dzIHRoZSB1c2VyCisJCXNwYWNlIHRvIGNvbnRyb2wgdGhlIHJ1bi10aW1lIHBvd2VyIG1hbmFnZW1lbnQgb2YgdGhlIGRldmljZS4KKworCQlBbGwgZGV2aWNlcyBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byB2YWx1ZXMgZm9yIHRoZQorCQlwb3dlci9jb250cm9sIGZpbGU6CisKKwkJKyAiYXV0b1xuIiB0byBhbGxvdyB0aGUgZGV2aWNlIHRvIGJlIHBvd2VyIG1hbmFnZWQgYXQgcnVuIHRpbWU7CisJCSsgIm9uXG4iIHRvIHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nIHBvd2VyIG1hbmFnZWQ7CisKKwkJVGhlIGRlZmF1bHQgZm9yIGFsbCBkZXZpY2VzIGlzICJhdXRvIiwgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IG1heQorCQliZSBzdWJqZWN0IHRvIGF1dG9tYXRpYyBwb3dlciBtYW5hZ2VtZW50LCBkZXBlbmRpbmcgb24gdGhlaXIKKwkJZHJpdmVycy4gIENoYW5naW5nIHRoaXMgYXR0cmlidXRlIHRvICJvbiIgcHJldmVudHMgdGhlIGRyaXZlcgorCQlmcm9tIHBvd2VyIG1hbmFnaW5nIHRoZSBkZXZpY2UgYXQgcnVuIHRpbWUuICBEb2luZyB0aGF0IHdoaWxlCisJCXRoZSBkZXZpY2UgaXMgc3VzcGVuZGVkIGNhdXNlcyBpdCB0byBiZSB3b2tlbiB1cC4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvYXN5bmMKK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9kZXZpY2VzLy4uLi9hc3luYyBhdHRyaWJ1dGUgYWxsb3dzIHRoZSB1c2VyIHNwYWNlIHRvCisJCWVuYWJsZSBvciBkaWFzYmxlIHRoZSBkZXZpY2UncyBzdXNwZW5kIGFuZCByZXN1bWUgY2FsbGJhY2tzIHRvCisJCWJlIGV4ZWN1dGVkIGFzeW5jaHJvbm91c2x5IChpZS4gaW4gc2VwYXJhdGUgdGhyZWFkcywgaW4gcGFyYWxsZWwKKwkJd2l0aCB0aGUgbWFpbiBzdXNwZW5kL3Jlc3VtZSB0aHJlYWQpIGR1cmluZyBzeXN0ZW0td2lkZSBwb3dlcgorCQl0cmFuc2l0aW9ucyAoZWcuIHN1c3BlbmQgdG8gUkFNLCBoaWJlcm5hdGlvbikuCisKKwkJQWxsIGRldmljZXMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzIGZvciB0aGUKKwkJcG93ZXIvYXN5bmMgZmlsZToKKworCQkrICJlbmFibGVkXG4iIHRvIHBlcm1pdCB0aGUgYXN5bmNocm9ub3VzIHN1c3BlbmQvcmVzdW1lOworCQkrICJkaXNhYmxlZFxuIiB0byBmb3JiaWQgaXQ7CisKKwkJVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIG1heSBiZSBjaGFuZ2VkIGJ5IHdyaXRpbmcgZWl0aGVyCisJCSJlbmFibGVkIiwgb3IgImRpc2FibGVkIiB0byBpdC4KKworCQlJdCBnZW5lcmFsbHkgaXMgdW5zYWZlIHRvIHBlcm1pdCB0aGUgYXN5bmNocm9ub3VzIHN1c3BlbmQvcmVzdW1lCisJCW9mIGEgZGV2aWNlIHVubGVzcyBpdCBpcyBjZXJ0YWluIHRoYXQgYWxsIG9mIHRoZSBQTSBkZXBlbmRlbmNpZXMKKwkJb2YgdGhlIGRldmljZSBhcmUga25vd24gdG8gdGhlIFBNIGNvcmUuICBIb3dldmVyLCBmb3Igc29tZQorCQlkZXZpY2VzIHRoaXMgYXR0cmlidXRlIGlzIHNldCB0byAiZW5hYmxlZCIgYnkgYnVzIHR5cGUgY29kZSBvcgorCQlkZXZpY2UgZHJpdmVycyBhbmQgaW4gdGhhdCBjYXNlcyBpdCBzaG91bGQgYmUgc2FmZSB0byBsZWF2ZSB0aGUKKwkJZGVmYXVsdCB2YWx1ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyCmluZGV4IGRjZmY0ZDAuLmQ2YTgwMWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgpAQCAtMTAxLDMgKzEwMSwxNiBAQAogCiAJCUNBVVRJT046IFVzaW5nIGl0IHdpbGwgY2F1c2UgeW91ciBtYWNoaW5lJ3MgcmVhbC10aW1lIChDTU9TKQogCQljbG9jayB0byBiZSBzZXQgdG8gYSByYW5kb20gaW52YWxpZCB0aW1lIGFmdGVyIGEgcmVzdW1lLgorCitXaGF0OgkJL3N5cy9wb3dlci9wbV9hc3luYworRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL3Bvd2VyL3BtX2FzeW5jIGZpbGUgY29udHJvbHMgdGhlIHN3aXRjaCBhbGxvd2luZyB0aGUKKwkJdXNlciBzcGFjZSB0byBlbmFibGUgb3IgZGlzYWJsZSBhc3luY2hyb25vdXMgc3VzcGVuZCBhbmQgcmVzdW1lCisJCW9mIGRldmljZXMuICBJZiBlbmFibGVkLCB0aGlzIGZlYXR1cmUgd2lsbCBjYXVzZSBzb21lIGRldmljZQorCQlkcml2ZXJzJyBzdXNwZW5kIGFuZCByZXN1bWUgY2FsbGJhY2tzIHRvIGJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsCisJCXdpdGggZWFjaCBvdGhlciBhbmQgd2l0aCB0aGUgbWFpbiBzdXNwZW5kIHRocmVhZC4gIEl0IGlzIGVuYWJsZWQKKwkJaWYgdGhpcyBmaWxlIGNvbnRhaW5zICIxIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuICBJdCBtYXkgYmUKKwkJZGlzYWJsZWQgYnkgd3JpdGluZyAiMCIgdG8gdGhpcyBmaWxlLCBpbiB3aGljaCBjYXNlIGFsbCBkZXZpY2VzCisJCXdpbGwgYmUgc3VzcGVuZGVkIGFuZCByZXN1bWVkIHN5bmNocm9ub3VzbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvaW8ueG1sCmluZGV4IGY5MmYyNDMuLmU4NzAzMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvaW8ueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvaW8ueG1sCkBAIC01ODksNyArNTg5LDggQEAKIAkgICAgPGVudHJ5PjwvZW50cnk+CiAJICAgIDxlbnRyeT5BIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIGN1c3RvbQogKGRyaXZlciBkZWZpbmVkKSBidWZmZXIgdHlwZXMKLTxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PiBhbmQgaGlnaGVyLjwvZW50cnk+Cis8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4gYW5kIGhpZ2hlci4gQXBwbGljYXRpb25zCitzaG91bGQgc2V0IHRoaXMgdG8gMC48L2VudHJ5PgogCSAgPC9yb3c+CiAJPC90Ym9keT4KICAgICAgIDwvdGdyb3VwPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xYnVmLnhtbAppbmRleCAxODcwODE3Li5iODQzYmQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xYnVmLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xYnVmLnhtbApAQCAtNTQsMTIgKzU0LDEwIEBACiBkcml2ZXIncyBpbmNvbWluZyBxdWV1ZS4gVGhlIHNlbWFudGljcyBkZXBlbmQgb24gdGhlIHNlbGVjdGVkIEkvTwogbWV0aG9kLjwvcGFyYT4KIAotICAgIDxwYXJhPlRvIGVucXVldWUgYSA8bGluayBsaW5rZW5kPSJtbWFwIj5tZW1vcnkgbWFwcGVkPC9saW5rPgotYnVmZmVyIGFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgb2YgYQotJnY0bDItYnVmZmVyOyB0byB0aGUgc2FtZSBidWZmZXIgdHlwZSBhcyBwcmV2aW91c2x5ICZ2NGwyLWZvcm1hdDsKLTxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kICZ2NGwyLXJlcXVlc3RidWZmZXJzOwotPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiwgdGhlIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgotZmllbGQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50PiBhbmQgdGhlCisgICAgPHBhcmE+VG8gZW5xdWV1ZSBhIGJ1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+CitmaWVsZCBvZiBhICZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgd2FzIHByZXZpb3VzbHkgdXNlZAord2l0aCAmdjRsMi1mb3JtYXQ7IDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kICZ2NGwyLXJlcXVlc3RidWZmZXJzOworPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPi4gQXBwbGljYXRpb25zIG11c3QgYWxzbyBzZXQgdGhlCiA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZC4gVmFsaWQgaW5kZXggbnVtYmVycyByYW5nZSBmcm9tCiB6ZXJvIHRvIHRoZSBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgd2l0aCAmVklESU9DLVJFUUJVRlM7CiAoJnY0bDItcmVxdWVzdGJ1ZmZlcnM7IDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+KSBtaW51cyBvbmUuIFRoZQpAQCAtNzAsOCArNjgsMTkgQEAKIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVQ8L2NvbnN0YW50PikgYXBwbGljYXRpb25zIG11c3QgYWxzbwogaW5pdGlhbGl6ZSB0aGUgPHN0cnVjdGZpZWxkPmJ5dGVzdXNlZDwvc3RydWN0ZmllbGQ+LAogPHN0cnVjdGZpZWxkPmZpZWxkPC9zdHJ1Y3RmaWVsZD4gYW5kCi08c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLiBTZWUgPHhyZWYKLQlsaW5rZW5kPSJidWZmZXIiIC8+IGZvciBkZXRhaWxzLiBXaGVuCis8c3RydWN0ZmllbGQ+dGltZXN0YW1wPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLCBzZWUgPHhyZWYKK2xpbmtlbmQ9ImJ1ZmZlciIgLz4gZm9yIGRldGFpbHMuCitBcHBsaWNhdGlvbnMgbXVzdCBhbHNvIHNldCA8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiB0byAwLiBJZiBhIGRyaXZlcgorc3VwcG9ydHMgY2FwdHVyaW5nIGZyb20gc3BlY2lmaWMgdmlkZW8gaW5wdXRzIGFuZCB5b3Ugd2FudCB0byBzcGVjaWZ5IGEgdmlkZW8KK2lucHV0LCB0aGVuIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IHNob3VsZCBiZSBzZXQgdG8KKzxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0lOUFVUPC9jb25zdGFudD4gYW5kIHRoZSBmaWVsZAorPHN0cnVjdGZpZWxkPmlucHV0PC9zdHJ1Y3RmaWVsZD4gbXVzdCBiZSBpbml0aWFsaXplZCB0byB0aGUgZGVzaXJlZCBpbnB1dC4KK1RoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBtdXN0IGJlIHNldCB0byAwLgorPC9wYXJhPgorCisgICAgPHBhcmE+VG8gZW5xdWV1ZSBhIDxsaW5rIGxpbmtlbmQ9Im1tYXAiPm1lbW9yeSBtYXBwZWQ8L2xpbms+CitidWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+CitmaWVsZCB0byA8Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+LiBXaGVuCiA8Y29uc3RhbnQ+VklESU9DX1FCVUY8L2NvbnN0YW50PiBpcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcwogc3RydWN0dXJlIHRoZSBkcml2ZXIgc2V0cyB0aGUKIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX01BUFBFRDwvY29uc3RhbnQ+IGFuZApAQCAtODEsMTQgKzkwLDEwIEBACiAmRUlOVkFMOy48L3BhcmE+CiAKICAgICA8cGFyYT5UbyBlbnF1ZXVlIGEgPGxpbmsgbGlua2VuZD0idXNlcnAiPnVzZXIgcG9pbnRlcjwvbGluaz4KLWJ1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKLSZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseSAmdjRsMi1mb3JtYXQ7Ci08c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKLTxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIHRoZSA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KLWZpZWxkIHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9VU0VSUFRSPC9jb25zdGFudD4gYW5kIHRoZQorYnVmZmVyIGFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorZmllbGQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50PiwgdGhlCiA8c3RydWN0ZmllbGQ+bS51c2VycHRyPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlCi1idWZmZXIgYW5kIDxzdHJ1Y3RmaWVsZD5sZW5ndGg8L3N0cnVjdGZpZWxkPiB0byBpdHMgc2l6ZS4gV2hlbiB0aGUKLWJ1ZmZlciBpcyBpbnRlbmRlZCBmb3Igb3V0cHV0IGFkZGl0aW9uYWwgZmllbGRzIG11c3QgYmUgc2V0IGFzIGFib3ZlLgorYnVmZmVyIGFuZCA8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4gdG8gaXRzIHNpemUuCiBXaGVuIDxjb25zdGFudD5WSURJT0NfUUJVRjwvY29uc3RhbnQ+IGlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzCiBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBzZXRzIHRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PgogZmxhZyBhbmQgY2xlYXJzIHRoZSA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19NQVBQRUQ8L2NvbnN0YW50PiBhbmQKQEAgLTk2LDEzICsxMDEsMTQgQEAKIDxzdHJ1Y3RmaWVsZD5mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkLCBvciBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUuCiBUaGlzIGlvY3RsIGxvY2tzIHRoZSBtZW1vcnkgcGFnZXMgb2YgdGhlIGJ1ZmZlciBpbiBwaHlzaWNhbCBtZW1vcnksCiB0aGV5IGNhbm5vdCBiZSBzd2FwcGVkIG91dCB0byBkaXNrLiBCdWZmZXJzIHJlbWFpbiBsb2NrZWQgdW50aWwKLWRlcXVldWVkLCB1bnRpbCB0aGUgJlZJRElPQy1TVFJFQU1PRkY7IG9yICZWSURJT0MtUkVRQlVGUzsgaW9jdGwgYXJlCitkZXF1ZXVlZCwgdW50aWwgdGhlICZWSURJT0MtU1RSRUFNT0ZGOyBvciAmVklESU9DLVJFUUJVRlM7IGlvY3RsIGlzCiBjYWxsZWQsIG9yIHVudGlsIHRoZSBkZXZpY2UgaXMgY2xvc2VkLjwvcGFyYT4KIAogICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYWxsIHRoZSA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KIGlvY3RsIHRvIGRlcXVldWUgYSBmaWxsZWQgKGNhcHR1cmluZykgb3IgZGlzcGxheWVkIChvdXRwdXQpIGJ1ZmZlcgogZnJvbSB0aGUgZHJpdmVyJ3Mgb3V0Z29pbmcgcXVldWUuIFRoZXkganVzdCBzZXQgdGhlCi08c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorYW5kIDxzdHJ1Y3RmaWVsZD5yZXNlcnZlZDwvc3RydWN0ZmllbGQ+CiBmaWVsZHMgb2YgYSAmdjRsMi1idWZmZXI7IGFzIGFib3ZlLCB3aGVuIDxjb25zdGFudD5WSURJT0NfRFFCVUY8L2NvbnN0YW50PgogaXMgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIHRoZSBkcml2ZXIgZmlsbHMgdGhlCiByZW1haW5pbmcgZmllbGRzIG9yIHJldHVybnMgYW4gZXJyb3IgY29kZS48L3BhcmE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwKaW5kZXggZDgzNDk5My4uZTY0OTgwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlidWYueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5YnVmLnhtbApAQCAtNTQsMTIgKzU0LDEzIEBACiAmVklESU9DLVJFUUJVRlM7IGlvY3RsLjwvcGFyYT4KIAogICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQKLSAgICBvZiBhICZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseQorICAgIG9mIGEgJnY0bDItYnVmZmVyOyB0byB0aGUgc2FtZSBidWZmZXIgdHlwZSBhcyB3YXMgcHJldmlvdXNseSB1c2VkIHdpdGgKICZ2NGwyLWZvcm1hdDsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7CiA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCBhbmQgdGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+CiAgICAgZmllbGQuIFZhbGlkIGluZGV4IG51bWJlcnMgcmFuZ2UgZnJvbSB6ZXJvCiB0byB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggJlZJRElPQy1SRVFCVUZTOwogICAgICgmdjRsMi1yZXF1ZXN0YnVmZmVyczsgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4pIG1pbnVzIG9uZS4KK1RoZSA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBzaG91bGQgdG8gc2V0IHRvIDAuCiBBZnRlciBjYWxsaW5nIDxjb25zdGFudD5WSURJT0NfUVVFUllCVUY8L2NvbnN0YW50PiB3aXRoIGEgcG9pbnRlciB0bwogICAgIHRoaXMgc3RydWN0dXJlIGRyaXZlcnMgcmV0dXJuIGFuIGVycm9yIGNvZGUgb3IgZmlsbCB0aGUgcmVzdCBvZgogdGhlIHN0cnVjdHVyZS48L3BhcmE+CkBAIC02OCw4ICs2OSw4IEBACiA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19NQVBQRUQ8L2NvbnN0YW50PiwKIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX1FVRVVFRDwvY29uc3RhbnQ+IGFuZAogPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfRE9ORTwvY29uc3RhbnQ+IGZsYWdzIHdpbGwgYmUgdmFsaWQuIFRoZQotPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IGZpZWxkIHdpbGwgYmUgc2V0IHRvCi08Y29uc3RhbnQ+VjRMMl9NRU1PUllfTU1BUDwvY29uc3RhbnQ+LCB0aGUgPHN0cnVjdGZpZWxkPm0ub2Zmc2V0PC9zdHJ1Y3RmaWVsZD4KKzxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBmaWVsZCB3aWxsIGJlIHNldCB0byB0aGUgY3VycmVudAorSS9PIG1ldGhvZCwgdGhlIDxzdHJ1Y3RmaWVsZD5tLm9mZnNldDwvc3RydWN0ZmllbGQ+CiBjb250YWlucyB0aGUgb2Zmc2V0IG9mIHRoZSBidWZmZXIgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSBtZW1vcnksCiB0aGUgPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IGZpZWxkIGl0cyBzaXplLiBUaGUgZHJpdmVyIG1heQogb3IgbWF5IG5vdCBzZXQgdGhlIHJlbWFpbmluZyBmaWVsZHMgYW5kIGZsYWdzLCB0aGV5IGFyZSBtZWFuaW5nbGVzcyBpbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbAppbmRleCBiYWIzODA4Li4xYzA4MTYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbApAQCAtNTQsMjMgKzU0LDIzIEBACiBhbGxvY2F0ZWQgd2l0aCB0aGlzIGlvY3RsIGJlZm9yZSB0aGV5IGNhbiBiZSBtYXBwZWQgaW50byB0aGUKIGFwcGxpY2F0aW9uJ3MgYWRkcmVzcyBzcGFjZS4gVXNlciBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgYnkKIGFwcGxpY2F0aW9ucyB0aGVtc2VsdmVzLCBhbmQgdGhpcyBpb2N0bCBpcyBtZXJlbHkgdXNlZCB0byBzd2l0Y2ggdGhlCi1kcml2ZXIgaW50byB1c2VyIHBvaW50ZXIgSS9PIG1vZGUuPC9wYXJhPgorZHJpdmVyIGludG8gdXNlciBwb2ludGVyIEkvTyBtb2RlIGFuZCB0byBzZXR1cCBzb21lIGludGVybmFsIHN0cnVjdHVyZXMuPC9wYXJhPgogCi0gICAgPHBhcmE+VG8gYWxsb2NhdGUgZGV2aWNlIGJ1ZmZlcnMgYXBwbGljYXRpb25zIGluaXRpYWxpemUgdGhyZWUKLWZpZWxkcyBvZiBhIDxzdHJ1Y3RuYW1lPnY0bDJfcmVxdWVzdGJ1ZmZlcnM8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS4KKyAgICA8cGFyYT5UbyBhbGxvY2F0ZSBkZXZpY2UgYnVmZmVycyBhcHBsaWNhdGlvbnMgaW5pdGlhbGl6ZSBhbGwKK2ZpZWxkcyBvZiB0aGUgPHN0cnVjdG5hbWU+djRsMl9yZXF1ZXN0YnVmZmVyczwvc3RydWN0bmFtZT4gc3RydWN0dXJlLgogVGhleSBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gdGhlIHJlc3BlY3RpdmUKIHN0cmVhbSBvciBidWZmZXIgdHlwZSwgdGhlIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvCi10aGUgZGVzaXJlZCBudW1iZXIgb2YgYnVmZmVycywgYW5kIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgotbXVzdCBiZSBzZXQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50Pi4gV2hlbiB0aGUgaW9jdGwKLWlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIGF0dGVtcHRzIHRvCi1hbGxvY2F0ZSB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBidWZmZXJzIGFuZCBzdG9yZXMgdGhlIGFjdHVhbCBudW1iZXIKK3RoZSBkZXNpcmVkIG51bWJlciBvZiBidWZmZXJzLCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK211c3QgYmUgc2V0IHRvIHRoZSByZXF1ZXN0ZWQgSS9PIG1ldGhvZCBhbmQgdGhlIHJlc2VydmVkIGFycmF5CittdXN0IGJlIHplcm9lZC4gV2hlbiB0aGUgaW9jdGwKK2lzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIHdpbGwgYXR0ZW1wdCB0byBhbGxvY2F0ZQordGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnVmZmVycyBhbmQgaXQgc3RvcmVzIHRoZSBhY3R1YWwgbnVtYmVyCiBhbGxvY2F0ZWQgaW4gdGhlIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+IGZpZWxkLiBJdCBjYW4gYmUKIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZCwgZXZlbiB6ZXJvLCB3aGVuIHRoZSBkcml2ZXIgcnVucyBvdXQKLW9mIGZyZWUgbWVtb3J5LiBBIGxhcmdlciBudW1iZXIgaXMgcG9zc2libGUgd2hlbiB0aGUgZHJpdmVyIHJlcXVpcmVzCi1tb3JlIGJ1ZmZlcnMgdG8gZnVuY3Rpb24gY29ycmVjdGx5Ljxmb290bm90ZT4KLQk8cGFyYT5Gb3IgZXhhbXBsZSB2aWRlbyBvdXRwdXQgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGJ1ZmZlcnMsCitvZiBmcmVlIG1lbW9yeS4gQSBsYXJnZXIgbnVtYmVyIGlzIGFsc28gcG9zc2libGUgd2hlbiB0aGUgZHJpdmVyIHJlcXVpcmVzCittb3JlIGJ1ZmZlcnMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBGb3IgZXhhbXBsZSB2aWRlbyBvdXRwdXQgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGJ1ZmZlcnMsCiBvbmUgZGlzcGxheWVkIGFuZCBvbmUgZmlsbGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi48L3BhcmE+Ci0JPC9mb290bm90ZT4gV2hlbiBtZW1vcnkgbWFwcGluZyBJL08gaXMgbm90IHN1cHBvcnRlZCB0aGUgaW9jdGwKKyAgICA8cGFyYT5XaGVuIHRoZSBJL08gbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgdGhlIGlvY3RsCiByZXR1cm5zIGFuICZFSU5WQUw7LjwvcGFyYT4KIAogICAgIDxwYXJhPkFwcGxpY2F0aW9ucyBjYW4gY2FsbCA8Y29uc3RhbnQ+VklESU9DX1JFUUJVRlM8L2NvbnN0YW50PgpAQCAtODEsMTQgKzgxLDYgQEAKIHJlYXNvbiB3aHkgbXVubWFwKClwaW5nIG9uZSBvciBldmVuIGFsbCBidWZmZXJzIG11c3QgaW1wbHkKIHN0cmVhbW9mZi4tLT48L3BhcmE+CiAKLSAgICA8cGFyYT5UbyBuZWdvdGlhdGUgdXNlciBwb2ludGVyIEkvTywgYXBwbGljYXRpb25zIGluaXRpYWxpemUgb25seQotdGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgYW5kIHNldAotPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IHRvCi08Y29uc3RhbnQ+VjRMMl9NRU1PUllfVVNFUlBUUjwvY29uc3RhbnQ+LiBXaGVuIHRoZSBpb2N0bCBpcyBjYWxsZWQKLXdpdGggYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlIHRoZSBkcml2ZXIgcHJlcGFyZXMgZm9yIHVzZXIgcG9pbnRlcgotSS9PLCB3aGVuIHRoaXMgSS9PIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIHRoZSBpb2N0bCByZXR1cm5zIGFuCi0mRUlOVkFMOy48L3BhcmE+Ci0KICAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItcmVxdWVzdGJ1ZmZlcnMiPgogICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX3JlcXVlc3RidWZmZXJzPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CiAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgpAQCAtOTcsOSArODksNyBAQAogCSAgPHJvdz4KIAkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KIAkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KLQkgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgYnVmZmVycyByZXF1ZXN0ZWQgb3IgZ3JhbnRlZC4gVGhpcwotZmllbGQgaXMgb25seSB1c2VkIHdoZW4gPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+IGlzIHNldCB0bwotPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50Pi48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIG51bWJlciBvZiBidWZmZXJzIHJlcXVlc3RlZCBvciBncmFudGVkLjwvZW50cnk+CiAJICA8L3Jvdz4KIAkgIDxyb3c+CiAJICAgIDxlbnRyeT4mdjRsMi1idWYtdHlwZTs8L2VudHJ5PgpAQCAtMTIwLDcgKzExMCw3IEBACiAJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPlsyXTwvZW50cnk+CiAJICAgIDxlbnRyeT5BIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIGN1c3RvbQogKGRyaXZlciBkZWZpbmVkKSBidWZmZXIgdHlwZXMgPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+IGFuZAotaGlnaGVyLjwvZW50cnk+CitoaWdoZXIuIFRoaXMgYXJyYXkgc2hvdWxkIGJlIHplcm9lZCBieSBhcHBsaWNhdGlvbnMuPC9lbnRyeT4KIAkgIDwvcm93PgogCTwvdGJvZHk+CiAgICAgICA8L3Rncm91cD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVgKaW5kZXggOWJiNjJmNy4uNzFiNmY1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVgKQEAgLTYsMTYgKzYsMjIgQEAKIAktIFJldmlldyBDaGVja2xpc3QgZm9yIFJDVSBQYXRjaGVzCiBsaXN0UkNVLnR4dAogCS0gVXNpbmcgUkNVIHRvIFByb3RlY3QgUmVhZC1Nb3N0bHkgTGlua2VkIExpc3RzCitsb2NrZGVwLnR4dAorCS0gUkNVIGFuZCBsb2NrZGVwIGNoZWNraW5nCiBOTUktUkNVLnR4dAogCS0gVXNpbmcgUkNVIHRvIFByb3RlY3QgRHluYW1pYyBOTUkgSGFuZGxlcnMKK3JjdWJhcnJpZXIudHh0CisJLSBSQ1UgYW5kIFVubG9hZGFibGUgTW9kdWxlcworcmN1bGlzdF9udWxscy50eHQKKwktIFJDVSBsaXN0IHByaW1pdGl2ZXMgZm9yIHVzZSB3aXRoIFNMQUJfREVTVFJPWV9CWV9SQ1UKIHJjdXJlZi50eHQKIAktIFJlZmVyZW5jZS1jb3VudCBkZXNpZ24gZm9yIGVsZW1lbnRzIG9mIGxpc3RzL2FycmF5cyBwcm90ZWN0ZWQgYnkgUkNVCiByY3UudHh0CiAJLSBSQ1UgQ29uY2VwdHMKLXJjdWJhcnJpZXIudHh0Ci0JLSBVbmxvYWRpbmcgbW9kdWxlcyB0aGF0IHVzZSBSQ1UgY2FsbGJhY2tzCiBSVEZQLnR4dAogCS0gTGlzdCBvZiBSQ1UgcGFwZXJzIChiaWJsaW9ncmFwaHkpIGdvaW5nIGJhY2sgdG8gMTk4MC4KK3N0YWxsd2Fybi50eHQKKwktIFJDVSBDUFUgc3RhbGwgd2FybmluZ3MgKENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SKQogdG9ydHVyZS50eHQKIAktIFJDVSBUb3J0dXJlIFRlc3QgT3BlcmF0aW9uIChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkKIHRyYWNlLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dAppbmRleCBkMmI4NTIzLi41YWVhNDU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dApAQCAtMjUsMTAgKzI1LDEwIEBACiBvcHRpbWl6ZWQgZm9yIG1vZGVybiBjb21wdXRlciBzeXN0ZW1zLCB3aGljaCBpcyBub3Qgc3VycHJpc2luZyBnaXZlbgogdGhhdCB0aGVzZSBvdmVyaGVhZHMgd2VyZSBub3Qgc28gZXhwZW5zaXZlIGluIHRoZSBtaWQtODBzLiAgTm9uZXRoZWxlc3MsCiBwYXNzaXZlIHNlcmlhbGl6YXRpb24gYXBwZWFycyB0byBiZSB0aGUgZmlyc3QgZGVmZXJyZWQtZGVzdHJ1Y3Rpb24KLW1lY2hhbmlzbSB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24uICBGdXJ0aGVybW9yZSwgdGhlIHJlbGV2YW50IHBhdGVudCBoYXMKLWxhcHNlZCwgc28gdGhpcyBhcHByb2FjaCBtYXkgYmUgdXNlZCBpbiBub24tR1BMIHNvZnR3YXJlLCBpZiBkZXNpcmVkLgotKEluIGNvbnRyYXN0LCB1c2Ugb2YgUkNVIGlzIHBlcm1pdHRlZCBvbmx5IGluIHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyCi1HUEwuICBTb3JyeSEhISkKK21lY2hhbmlzbSB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24uICBGdXJ0aGVybW9yZSwgdGhlIHJlbGV2YW50IHBhdGVudAoraGFzIGxhcHNlZCwgc28gdGhpcyBhcHByb2FjaCBtYXkgYmUgdXNlZCBpbiBub24tR1BMIHNvZnR3YXJlLCBpZiBkZXNpcmVkLgorKEluIGNvbnRyYXN0LCBpbXBsZW1lbnRhdGlvbiBvZiBSQ1UgaXMgcGVybWl0dGVkIG9ubHkgaW4gc29mdHdhcmUgbGljZW5zZWQKK3VuZGVyIGVpdGhlciBHUEwgb3IgTEdQTC4gIFNvcnJ5ISEhKQogCiBJbiAxOTkwLCBQdWdoIFtQdWdoOTBdIG5vdGVkIHRoYXQgZXhwbGljaXRseSB0cmFja2luZyB3aGljaCB0aHJlYWRzCiB3ZXJlIHJlYWRpbmcgYSBnaXZlbiBkYXRhIHN0cnVjdHVyZSBwZXJtaXR0ZWQgZGVmZXJyZWQgZnJlZSB0byBvcGVyYXRlCkBAIC0xNTAsNiArMTUwLDE4IEBACiBMV04gIldoYXQgaXMgUkNVPyIgc2VyaWVzIFtQYXVsRU1jS2VubmV5MjAwN1doYXRJc1JDVUZ1bmRhbWVudGFsbHksCiBQYXVsRU1jS2VubmV5MjAwOFdoYXRJc1JDVVVzYWdlLCBhbmQgUGF1bEVNY0tlbm5leTIwMDhXaGF0SXNSQ1VBUEldLgogCisyMDA4IHNhdyBhIGpvdXJuYWwgcGFwZXIgb24gcmVhbC10aW1lIFJDVSBbRGluYWthckd1bmlndW50YWxhMjAwOElCTVN5c0pdLAorYSBoaXN0b3J5IG9mIGhvdyBMaW51eCBjaGFuZ2VkIFJDVSBtb3JlIHRoYW4gUkNVIGNoYW5nZWQgTGludXgKK1tQYXVsRU1jS2VubmV5MjAwOFJDVU9TUl0sIGFuZCBhIGRlc2lnbiBvdmVydmlldyBvZiBoaWVyYXJjaGljYWwgUkNVCitbUGF1bEVNY0tlbm5leTIwMDhIaWVyYXJjaGljYWxSQ1VdLgorCisyMDA5IGludHJvZHVjZWQgdXNlci1sZXZlbCBSQ1UgYWxnb3JpdGhtcyBbUGF1bEVNY0tlbm5leTIwMDlNYWxpY2lvdXNVUkNVXSwKK3doaWNoIE1hdGhpZXUgRGVzbm95ZXJzIGlzIG5vdyBtYWludGFpbmluZyBbTWF0aGlldURlc25veWVyczIwMDlVUkNVXQorW01hdGhpZXVEZXNub3llcnNQaERdLiAgVElOWV9SQ1UgW1BhdWxFTWNLZW5uZXkyMDA5QmxvYXRXYXRjaFJDVV0gbWFkZQoraXRzIGFwcGVhcmFuY2UsIGFzIGRpZCBleHBlZGl0ZWQgUkNVIFtQYXVsRU1jS2VubmV5MjAwOWV4cGVkaXRlZFJDVV0uCitUaGUgcHJvYmxlbSBvZiByZXNpemVhYmxlIFJDVS1wcm90ZWN0ZWQgaGFzaCB0YWJsZXMgbWF5IG5vdyBiZSBvbiBhIHBhdGgKK3RvIGEgc29sdXRpb24gW0pvc2hUcmlwbGV0dDIwMDlSUEhhc2hdLgorCiBCaWJ0ZXggRW50cmllcwogCiBAYXJ0aWNsZXtLdW5nODAKQEAgLTczMCw2ICs3NDIsMTEgQEAKICIKIH0KIAorIworIwkiV2hhdCBpcyBSQ1U/IiBMV04gc2VyaWVzLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKIEBhcnRpY2xle0RpbmFrYXJHdW5pZ3VudGFsYTIwMDhJQk1TeXNKCiAsYXV0aG9yPSJELiBHdW5pZ3VudGFsYSBhbmQgUC4gRS4gTWNLZW5uZXkgYW5kIEouIFRyaXBsZXR0IGFuZCBKLiBXYWxwb2xlIgogLHRpdGxlPSJUaGUgcmVhZC1jb3B5LXVwZGF0ZSBtZWNoYW5pc20gZm9yIHN1cHBvcnRpbmcgcmVhbC10aW1lIGFwcGxpY2F0aW9ucyBvbiBzaGFyZWQtbWVtb3J5IG11bHRpcHJvY2Vzc29yIHN5c3RlbXMgd2l0aCB7TGludXh9IgpAQCAtODIwLDMgKzgzNywzOSBAQAogCVVuaXByb2Nlc3NvciBhc3N1bXB0aW9ucyBhbGxvdyBzaW1wbGlmaWVkIFJDVSBpbXBsZW1lbnRhdGlvbi4KICIKIH0KKworQHVucHVibGlzaGVke1BhdWxFTWNLZW5uZXkyMDA5ZXhwZWRpdGVkUkNVCissQXV0aG9yPSJQYXVsIEUuIE1jS2VubmV5IgorLFRpdGxlPSJbe1BBVENIfSAtdGlwIDAvM10gZXhwZWRpdGVkICdiaWcgaGFtbWVyJyB7UkNVfSBncmFjZSBwZXJpb2RzIgorLG1vbnRoPSJKdW5lIgorLGRheT0iMjUiCisseWVhcj0iMjAwOSIKKyxub3RlPSJBdmFpbGFibGU6CitcdXJse2h0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDkvNi8yNS8zMDZ9CitbVmlld2VkIEF1Z3VzdCAxNiwgMjAwOV0iCissYW5ub3RhdGlvbj0iCisJRmlyc3QgcG9zdGluZyBvZiBleHBlZGl0ZWQgUkNVIHRvIGJlIGFjY2VwdGVkIGludG8gLXRpcC4KKyIKK30KKworQHVucHVibGlzaGVke0pvc2hUcmlwbGV0dDIwMDlSUEhhc2gKKyxBdXRob3I9Ikpvc2ggVHJpcGxldHQiCissVGl0bGU9IlNjYWxhYmxlIGNvbmN1cnJlbnQgaGFzaCB0YWJsZXMgdmlhIHJlbGF0aXZpc3RpYyBwcm9ncmFtbWluZyIKKyxtb250aD0iU2VwdGVtYmVyIgorLHllYXI9IjIwMDkiCissbm90ZT0iTGludXggUGx1bWJlcnMgQ29uZmVyZW5jZSBwcmVzZW50YXRpb24iCissYW5ub3RhdGlvbj0iCisJUlAgZnVuIHdpdGggaGFzaCB0YWJsZXMuCisiCit9CisKK0BwaGR0aGVzaXN7TWF0aGlldURlc25veWVyc1BoRAorLCB0aXRsZSAgPSAiTG93LUltcGFjdCBPcGVyYXRpbmcgU3lzdGVtIFRyYWNpbmciCissIGF1dGhvciA9ICJNYXRoaWV1IERlc25veWVycyIKKywgc2Nob29sID0gIkVjb2xlIFBvbHl0ZWNobmlxdWUgZGUgTW9udHJcJ3tlfWFsIgorLCBtb250aCAgPSAiRGVjZW1iZXIiCissIHllYXIgICA9IDIwMDkKKyxub3RlPSJBdmFpbGFibGU6CitcdXJse2h0dHA6Ly93d3cubHR0bmcub3JnL3B1Yi90aGVzaXMvZGVzbm95ZXJzLWRpc3NlcnRhdGlvbi0yMDA5LTEyLnBkZn0KK1tWaWV3ZWQgRGVjZW1iZXIgOSwgMjAwOV0iCit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dAppbmRleCA1MTUyNWEzLi5jYmMxODBmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKQEAgLTgsMTMgKzgsMTIgQEAKIG92ZXIgYSByYXRoZXIgbG9uZyBwZXJpb2Qgb2YgdGltZSwgYnV0IGltcHJvdmVtZW50cyBhcmUgYWx3YXlzIHdlbGNvbWUhCiAKIDAuCUlzIFJDVSBiZWluZyBhcHBsaWVkIHRvIGEgcmVhZC1tb3N0bHkgc2l0dWF0aW9uPyAgSWYgdGhlIGRhdGEKLQlzdHJ1Y3R1cmUgaXMgdXBkYXRlZCBtb3JlIHRoYW4gYWJvdXQgMTAlIG9mIHRoZSB0aW1lLCB0aGVuCi0JeW91IHNob3VsZCBzdHJvbmdseSBjb25zaWRlciBzb21lIG90aGVyIGFwcHJvYWNoLCB1bmxlc3MKLQlkZXRhaWxlZCBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgc2hvdyB0aGF0IFJDVSBpcyBub25ldGhlbGVzcwotCXRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLiAgWWVzLCB5b3UgbWlnaHQgdGhpbmsgb2YgUkNVCi0JYXMgc2ltcGx5IGN1dHRpbmcgb3ZlcmhlYWQgb2ZmIG9mIHRoZSByZWFkZXJzIGFuZCBpbXBvc2luZyBpdAotCW9uIHRoZSB3cml0ZXJzLiAgVGhhdCBpcyBleGFjdGx5IHdoeSBub3JtYWwgdXNlcyBvZiBSQ1Ugd2lsbAotCWRvIG11Y2ggbW9yZSByZWFkaW5nIHRoYW4gdXBkYXRpbmcuCisJc3RydWN0dXJlIGlzIHVwZGF0ZWQgbW9yZSB0aGFuIGFib3V0IDEwJSBvZiB0aGUgdGltZSwgdGhlbiB5b3UKKwlzaG91bGQgc3Ryb25nbHkgY29uc2lkZXIgc29tZSBvdGhlciBhcHByb2FjaCwgdW5sZXNzIGRldGFpbGVkCisJcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzIHNob3cgdGhhdCBSQ1UgaXMgbm9uZXRoZWxlc3MgdGhlIHJpZ2h0CisJdG9vbCBmb3IgdGhlIGpvYi4gIFllcywgUkNVIGRvZXMgcmVkdWNlIHJlYWQtc2lkZSBvdmVyaGVhZCBieQorCWluY3JlYXNpbmcgd3JpdGUtc2lkZSBvdmVyaGVhZCwgd2hpY2ggaXMgZXhhY3RseSB3aHkgbm9ybWFsIHVzZXMKKwlvZiBSQ1Ugd2lsbCBkbyBtdWNoIG1vcmUgcmVhZGluZyB0aGFuIHVwZGF0aW5nLgogCiAJQW5vdGhlciBleGNlcHRpb24gaXMgd2hlcmUgcGVyZm9ybWFuY2UgaXMgbm90IGFuIGlzc3VlLCBhbmQgUkNVCiAJcHJvdmlkZXMgYSBzaW1wbGVyIGltcGxlbWVudGF0aW9uLiAgQW4gZXhhbXBsZSBvZiB0aGlzIHNpdHVhdGlvbgpAQCAtMzUsMTMgKzM0LDEzIEBACiAKIAlJZiB5b3UgY2hvb3NlICNiLCBiZSBwcmVwYXJlZCB0byBkZXNjcmliZSBob3cgeW91IGhhdmUgaGFuZGxlZAogCW1lbW9yeSBiYXJyaWVycyBvbiB3ZWFrbHkgb3JkZXJlZCBtYWNoaW5lcyAocHJldHR5IG11Y2ggYWxsIG9mCi0JdGhlbSAtLSBldmVuIHg4NiBhbGxvd3MgcmVhZHMgdG8gYmUgcmVvcmRlcmVkKSwgYW5kIGJlIHByZXBhcmVkCi0JdG8gZXhwbGFpbiB3aHkgdGhpcyBhZGRlZCBjb21wbGV4aXR5IGlzIHdvcnRod2hpbGUuICBJZiB5b3UKLQljaG9vc2UgI2MsIGJlIHByZXBhcmVkIHRvIGV4cGxhaW4gaG93IHRoaXMgc2luZ2xlIHRhc2sgZG9lcyBub3QKLQliZWNvbWUgYSBtYWpvciBib3R0bGVuZWNrIG9uIGJpZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcyAoZm9yCi0JZXhhbXBsZSwgaWYgdGhlIHRhc2sgaXMgdXBkYXRpbmcgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaXRzZWxmCi0JdGhhdCBvdGhlciB0YXNrcyBjYW4gcmVhZCwgdGhlcmUgYnkgZGVmaW5pdGlvbiBjYW4gYmUgbm8KLQlib3R0bGVuZWNrKS4KKwl0aGVtIC0tIGV2ZW4geDg2IGFsbG93cyBsYXRlciBsb2FkcyB0byBiZSByZW9yZGVyZWQgdG8gcHJlY2VkZQorCWVhcmxpZXIgc3RvcmVzKSwgYW5kIGJlIHByZXBhcmVkIHRvIGV4cGxhaW4gd2h5IHRoaXMgYWRkZWQKKwljb21wbGV4aXR5IGlzIHdvcnRod2hpbGUuICBJZiB5b3UgY2hvb3NlICNjLCBiZSBwcmVwYXJlZCB0bworCWV4cGxhaW4gaG93IHRoaXMgc2luZ2xlIHRhc2sgZG9lcyBub3QgYmVjb21lIGEgbWFqb3IgYm90dGxlbmVjayBvbgorCWJpZyBtdWx0aXByb2Nlc3NvciBtYWNoaW5lcyAoZm9yIGV4YW1wbGUsIGlmIHRoZSB0YXNrIGlzIHVwZGF0aW5nCisJaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaXRzZWxmIHRoYXQgb3RoZXIgdGFza3MgY2FuIHJlYWQsIHRoZXJlCisJYnkgZGVmaW5pdGlvbiBjYW4gYmUgbm8gYm90dGxlbmVjaykuCiAKIDIuCURvIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG1ha2UgcHJvcGVyIHVzZSBvZgogCXJjdV9yZWFkX2xvY2soKSBhbmQgZnJpZW5kcz8gIFRoZXNlIHByaW1pdGl2ZXMgYXJlIG5lZWRlZApAQCAtNTEsOCArNTAsMTAgQEAKIAlhY3R1YXJpYWwgcmlzayBvZiB5b3VyIGtlcm5lbC4KIAogCUFzIGEgcm91Z2ggcnVsZSBvZiB0aHVtYiwgYW55IGRlcmVmZXJlbmNlIG9mIGFuIFJDVS1wcm90ZWN0ZWQKLQlwb2ludGVyIG11c3QgYmUgY292ZXJlZCBieSByY3VfcmVhZF9sb2NrKCkgb3IgcmN1X3JlYWRfbG9ja19iaCgpCi0Jb3IgYnkgdGhlIGFwcHJvcHJpYXRlIHVwZGF0ZS1zaWRlIGxvY2suCisJcG9pbnRlciBtdXN0IGJlIGNvdmVyZWQgYnkgcmN1X3JlYWRfbG9jaygpLCByY3VfcmVhZF9sb2NrX2JoKCksCisJcmN1X3JlYWRfbG9ja19zY2hlZCgpLCBvciBieSB0aGUgYXBwcm9wcmlhdGUgdXBkYXRlLXNpZGUgbG9jay4KKwlEaXNhYmxpbmcgb2YgcHJlZW1wdGlvbiBjYW4gc2VydmUgYXMgcmN1X3JlYWRfbG9ja19zY2hlZCgpLCBidXQKKwlpcyBsZXNzIHJlYWRhYmxlLgogCiAzLglEb2VzIHRoZSB1cGRhdGUgY29kZSB0b2xlcmF0ZSBjb25jdXJyZW50IGFjY2Vzc2VzPwogCkBAIC02MiwyNSArNjMsMjcgQEAKIAlvZiB3YXlzIHRvIGhhbmRsZSB0aGlzIGNvbmN1cnJlbmN5LCBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbjoKIAogCWEuCVVzZSB0aGUgUkNVIHZhcmlhbnRzIG9mIHRoZSBsaXN0IGFuZCBobGlzdCB1cGRhdGUKLQkJcHJpbWl0aXZlcyB0byBhZGQsIHJlbW92ZSwgYW5kIHJlcGxhY2UgZWxlbWVudHMgb24gYW4KLQkJUkNVLXByb3RlY3RlZCBsaXN0LiAgQWx0ZXJuYXRpdmVseSwgdXNlIHRoZSBSQ1UtcHJvdGVjdGVkCi0JCXRyZWVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBMaW51eCBrZXJuZWwuCisJCXByaW1pdGl2ZXMgdG8gYWRkLCByZW1vdmUsIGFuZCByZXBsYWNlIGVsZW1lbnRzIG9uCisJCWFuIFJDVS1wcm90ZWN0ZWQgbGlzdC4JQWx0ZXJuYXRpdmVseSwgdXNlIHRoZSBvdGhlcgorCQlSQ1UtcHJvdGVjdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0bworCQl0aGUgTGludXgga2VybmVsLgogCiAJCVRoaXMgaXMgYWxtb3N0IGFsd2F5cyB0aGUgYmVzdCBhcHByb2FjaC4KIAogCWIuCVByb2NlZWQgYXMgaW4gKGEpIGFib3ZlLCBidXQgYWxzbyBtYWludGFpbiBwZXItZWxlbWVudAogCQlsb2NrcyAodGhhdCBhcmUgYWNxdWlyZWQgYnkgYm90aCByZWFkZXJzIGFuZCB3cml0ZXJzKQogCQl0aGF0IGd1YXJkIHBlci1lbGVtZW50IHN0YXRlLiAgT2YgY291cnNlLCBmaWVsZHMgdGhhdAotCQl0aGUgcmVhZGVycyByZWZyYWluIGZyb20gYWNjZXNzaW5nIGNhbiBiZSBndWFyZGVkIGJ5IHRoZQotCQl1cGRhdGUtc2lkZSBsb2NrLgorCQl0aGUgcmVhZGVycyByZWZyYWluIGZyb20gYWNjZXNzaW5nIGNhbiBiZSBndWFyZGVkIGJ5CisJCXNvbWUgb3RoZXIgbG9jayBhY3F1aXJlZCBvbmx5IGJ5IHVwZGF0ZXJzLCBpZiBkZXNpcmVkLgogCiAJCVRoaXMgd29ya3MgcXVpdGUgd2VsbCwgYWxzby4KIAogCWMuCU1ha2UgdXBkYXRlcyBhcHBlYXIgYXRvbWljIHRvIHJlYWRlcnMuICBGb3IgZXhhbXBsZSwKLQkJcG9pbnRlciB1cGRhdGVzIHRvIHByb3Blcmx5IGFsaWduZWQgZmllbGRzIHdpbGwgYXBwZWFyCi0JCWF0b21pYywgYXMgd2lsbCBpbmRpdmlkdWFsIGF0b21pYyBwcmltaXRpdmVzLiAgT3BlcmF0aW9ucwotCQlwZXJmb3JtZWQgdW5kZXIgYSBsb2NrIGFuZCBzZXF1ZW5jZXMgb2YgbXVsdGlwbGUgYXRvbWljCi0JCXByaW1pdGl2ZXMgd2lsbCAtbm90LSBhcHBlYXIgdG8gYmUgYXRvbWljLgorCQlwb2ludGVyIHVwZGF0ZXMgdG8gcHJvcGVybHkgYWxpZ25lZCBmaWVsZHMgd2lsbAorCQlhcHBlYXIgYXRvbWljLCBhcyB3aWxsIGluZGl2aWR1YWwgYXRvbWljIHByaW1pdGl2ZXMuCisJCVNlcXVlbmNlcyBvZiBwZXJhdGlvbnMgcGVyZm9ybWVkIHVuZGVyIGEgbG9jayB3aWxsIC1ub3QtCisJCWFwcGVhciB0byBiZSBhdG9taWMgdG8gUkNVIHJlYWRlcnMsIG5vciB3aWxsIHNlcXVlbmNlcworCQlvZiBtdWx0aXBsZSBhdG9taWMgcHJpbWl0aXZlcy4KIAogCQlUaGlzIGNhbiB3b3JrLCBidXQgaXMgc3RhcnRpbmcgdG8gZ2V0IGEgYml0IHRyaWNreS4KIApAQCAtOTgsOSArMTAxLDkgQEAKIAkJYSBuZXcgc3RydWN0dXJlIGNvbnRhaW5pbmcgdXBkYXRlZCB2YWx1ZXMuCiAKIDQuCVdlYWtseSBvcmRlcmVkIENQVXMgcG9zZSBzcGVjaWFsIGNoYWxsZW5nZXMuICBBbG1vc3QgYWxsIENQVXMKLQlhcmUgd2Vha2x5IG9yZGVyZWQgLS0gZXZlbiBpMzg2IENQVXMgYWxsb3cgcmVhZHMgdG8gYmUgcmVvcmRlcmVkLgotCVJDVSBjb2RlIG11c3QgdGFrZSBhbGwgb2YgdGhlIGZvbGxvd2luZyBtZWFzdXJlcyB0byBwcmV2ZW50Ci0JbWVtb3J5LWNvcnJ1cHRpb24gcHJvYmxlbXM6CisJYXJlIHdlYWtseSBvcmRlcmVkIC0tIGV2ZW4geDg2IENQVXMgYWxsb3cgbGF0ZXIgbG9hZHMgdG8gYmUKKwlyZW9yZGVyZWQgdG8gcHJlY2VkZSBlYXJsaWVyIHN0b3Jlcy4gIFJDVSBjb2RlIG11c3QgdGFrZSBhbGwgb2YKKwl0aGUgZm9sbG93aW5nIG1lYXN1cmVzIHRvIHByZXZlbnQgbWVtb3J5LWNvcnJ1cHRpb24gcHJvYmxlbXM6CiAKIAlhLglSZWFkZXJzIG11c3QgbWFpbnRhaW4gcHJvcGVyIG9yZGVyaW5nIG9mIHRoZWlyIG1lbW9yeQogCQlhY2Nlc3Nlcy4gIFRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgZW5zdXJlcyB0aGF0CkBAIC0xMTMsMTQgKzExNiwyNSBAQAogCQlUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIGlzIGFsc28gYW4gZXhjZWxsZW50CiAJCWRvY3VtZW50YXRpb24gYWlkLCBsZXR0aW5nIHRoZSBwZXJzb24gcmVhZGluZyB0aGUgY29kZQogCQlrbm93IGV4YWN0bHkgd2hpY2ggcG9pbnRlcnMgYXJlIHByb3RlY3RlZCBieSBSQ1UuCisJCVBsZWFzZSBub3RlIHRoYXQgY29tcGlsZXJzIGNhbiBhbHNvIHJlb3JkZXIgY29kZSwgYW5kCisJCXRoZXkgYXJlIGJlY29taW5nIGluY3JlYXNpbmdseSBhZ2dyZXNzaXZlIGFib3V0IGRvaW5nCisJCWp1c3QgdGhhdC4gIFRoZSByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmUgdGhlcmVmb3JlCisJCWFsc28gcHJldmVudHMgZGVzdHJ1Y3RpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4KIAotCQlUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIGlzIHVzZWQgYnkgdGhlIHZhcmlvdXMKLQkJIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgc3VjaCBhcyB0aGUKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKS4gIE5vdGUgdGhhdCBpdCBpcyBwZXJmZWN0bHkKLQkJbGVnYWwgKGlmIHJlZHVuZGFudCkgZm9yIHVwZGF0ZS1zaWRlIGNvZGUgdG8gdXNlCi0JCXJjdV9kZXJlZmVyZW5jZSgpIGFuZCB0aGUgIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwKLQkJcHJpbWl0aXZlcy4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBjb2RlCi0JCXRoYXQgaXMgY29tbW9uIHRvIHJlYWRlcnMgYW5kIHVwZGF0ZXJzLgorCQlUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIGlzIHVzZWQgYnkgdGhlCisJCXZhcmlvdXMgIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgc3VjaAorCQlhcyB0aGUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKS4gIE5vdGUgdGhhdCBpdCBpcworCQlwZXJmZWN0bHkgbGVnYWwgKGlmIHJlZHVuZGFudCkgZm9yIHVwZGF0ZS1zaWRlIGNvZGUgdG8KKwkJdXNlIHJjdV9kZXJlZmVyZW5jZSgpIGFuZCB0aGUgIl9yY3UoKSIgbGlzdC10cmF2ZXJzYWwKKwkJcHJpbWl0aXZlcy4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBjb2RlIHRoYXQKKwkJaXMgY29tbW9uIHRvIHJlYWRlcnMgYW5kIHVwZGF0ZXJzLiAgSG93ZXZlciwgbG9ja2RlcAorCQl3aWxsIGNvbXBsYWluIGlmIHlvdSBhY2Nlc3MgcmN1X2RlcmVmZXJlbmNlKCkgb3V0c2lkZQorCQlvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBTZWUgbG9ja2RlcC50eHQKKwkJdG8gbGVhcm4gd2hhdCB0byBkbyBhYm91dCB0aGlzLgorCisJCU9mIGNvdXJzZSwgbmVpdGhlciByY3VfZGVyZWZlcmVuY2UoKSBub3IgdGhlICJfcmN1KCkiCisJCWxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMgY2FuIHN1YnN0aXR1dGUgZm9yIGEgZ29vZAorCQljb25jdXJyZW5jeSBkZXNpZ24gY29vcmRpbmF0aW5nIGFtb25nIG11bHRpcGxlIHVwZGF0ZXJzLgogCiAJYi4JSWYgdGhlIGxpc3QgbWFjcm9zIGFyZSBiZWluZyB1c2VkLCB0aGUgbGlzdF9hZGRfdGFpbF9yY3UoKQogCQlhbmQgbGlzdF9hZGRfcmN1KCkgcHJpbWl0aXZlcyBtdXN0IGJlIHVzZWQgaW4gb3JkZXIKQEAgLTEzNSwxMSArMTQ5LDE0IEBACiAJCXJlYWRlcnMuICBTaW1pbGFybHksIGlmIHRoZSBobGlzdCBtYWNyb3MgYXJlIGJlaW5nIHVzZWQsCiAJCXRoZSBobGlzdF9kZWxfcmN1KCkgcHJpbWl0aXZlIGlzIHJlcXVpcmVkLgogCi0JCVRoZSBsaXN0X3JlcGxhY2VfcmN1KCkgcHJpbWl0aXZlIG1heSBiZSB1c2VkIHRvCi0JCXJlcGxhY2UgYW4gb2xkIHN0cnVjdHVyZSB3aXRoIGEgbmV3IG9uZSBpbiBhbgotCQlSQ1UtcHJvdGVjdGVkIGxpc3QuCisJCVRoZSBsaXN0X3JlcGxhY2VfcmN1KCkgYW5kIGhsaXN0X3JlcGxhY2VfcmN1KCkgcHJpbWl0aXZlcworCQltYXkgYmUgdXNlZCB0byByZXBsYWNlIGFuIG9sZCBzdHJ1Y3R1cmUgd2l0aCBhIG5ldyBvbmUKKwkJaW4gdGhlaXIgcmVzcGVjdGl2ZSB0eXBlcyBvZiBSQ1UtcHJvdGVjdGVkIGxpc3RzLgogCi0JZC4JVXBkYXRlcyBtdXN0IGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uIG9mIGEgZ2l2ZW4KKwlkLglSdWxlcyBzaW1pbGFyIHRvICg0YikgYW5kICg0YykgYXBwbHkgdG8gdGhlICJobGlzdF9udWxscyIKKwkJdHlwZSBvZiBSQ1UtcHJvdGVjdGVkIGxpbmtlZCBsaXN0cy4KKworCWUuCVVwZGF0ZXMgbXVzdCBlbnN1cmUgdGhhdCBpbml0aWFsaXphdGlvbiBvZiBhIGdpdmVuCiAJCXN0cnVjdHVyZSBoYXBwZW5zIGJlZm9yZSBwb2ludGVycyB0byB0aGF0IHN0cnVjdHVyZSBhcmUKIAkJcHVibGljaXplZC4gIFVzZSB0aGUgcmN1X2Fzc2lnbl9wb2ludGVyKCkgcHJpbWl0aXZlCiAJCXdoZW4gcHVibGljaXppbmcgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIHRoYXQgY2FuCkBAIC0xNTEsMTYgKzE2OCwzMSBAQAogCWl0IGNhbm5vdCBibG9jay4KIAogNi4JU2luY2Ugc3luY2hyb25pemVfcmN1KCkgY2FuIGJsb2NrLCBpdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20KLQlhbnkgc29ydCBvZiBpcnEgY29udGV4dC4gIERpdHRvIGZvciBzeW5jaHJvbml6ZV9zY2hlZCgpIGFuZAotCXN5bmNocm9uaXplX3NyY3UoKS4KKwlhbnkgc29ydCBvZiBpcnEgY29udGV4dC4gIFRoZSBzYW1lIHJ1bGUgYXBwbGllcyBmb3IKKwlzeW5jaHJvbml6ZV9yY3VfYmgoKSwgc3luY2hyb25pemVfc2NoZWQoKSwgc3luY2hyb25pemVfc3JjdSgpLAorCXN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQoKSwgc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZCgpLAorCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlKCksIGFuZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLgogCi03LglJZiB0aGUgdXBkYXRlciB1c2VzIGNhbGxfcmN1KCksIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycwotCW11c3QgdXNlIHJjdV9yZWFkX2xvY2soKSBhbmQgcmN1X3JlYWRfdW5sb2NrKCkuICBJZiB0aGUgdXBkYXRlcgotCXVzZXMgY2FsbF9yY3VfYmgoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QgdXNlCi0JcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKS4gIElmIHRoZSB1cGRhdGVyCi0JdXNlcyBjYWxsX3JjdV9zY2hlZCgpLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlYWRlcnMgbXVzdAotCWRpc2FibGUgcHJlZW1wdGlvbi4gIE1peGluZyB0aGluZ3MgdXAgd2lsbCByZXN1bHQgaW4gY29uZnVzaW9uCi0JYW5kIGJyb2tlbiBrZXJuZWxzLgorCVRoZSBleHBlZGl0ZWQgZm9ybXMgb2YgdGhlc2UgcHJpbWl0aXZlcyBoYXZlIHRoZSBzYW1lIHNlbWFudGljcworCWFzIHRoZSBub24tZXhwZWRpdGVkIGZvcm1zLCBidXQgZXhwZWRpdGluZyBpcyBib3RoIGV4cGVuc2l2ZQorCWFuZCB1bmZyaWVuZGx5IHRvIHJlYWwtdGltZSB3b3JrbG9hZHMuCVVzZSBvZiB0aGUgZXhwZWRpdGVkCisJcHJpbWl0aXZlcyBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byByYXJlIGNvbmZpZ3VyYXRpb24tY2hhbmdlCisJb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG5vdCBub3JtYWxseSBiZSB1bmRlcnRha2VuIHdoaWxlIGEgcmVhbC10aW1lCisJd29ya2xvYWQgaXMgcnVubmluZy4KKworNy4JSWYgdGhlIHVwZGF0ZXIgdXNlcyBjYWxsX3JjdSgpIG9yIHN5bmNocm9uaXplX3JjdSgpLCB0aGVuIHRoZQorCWNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0IHVzZSByY3VfcmVhZF9sb2NrKCkgYW5kCisJcmN1X3JlYWRfdW5sb2NrKCkuICBJZiB0aGUgdXBkYXRlciB1c2VzIGNhbGxfcmN1X2JoKCkgb3IKKwlzeW5jaHJvbml6ZV9yY3VfYmgoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QKKwl1c2UgcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKS4gIElmIHRoZQorCXVwZGF0ZXIgdXNlcyBjYWxsX3JjdV9zY2hlZCgpIG9yIHN5bmNocm9uaXplX3NjaGVkKCksIHRoZW4KKwl0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QgZGlzYWJsZSBwcmVlbXB0aW9uLCBwb3NzaWJseQorCWJ5IGNhbGxpbmcgcmN1X3JlYWRfbG9ja19zY2hlZCgpIGFuZCByY3VfcmVhZF91bmxvY2tfc2NoZWQoKS4KKwlJZiB0aGUgdXBkYXRlciB1c2VzIHN5bmNocm9uaXplX3NyY3UoKSwgdGhlIHRoZSBjb3JyZXNwb25kaW5nCisJcmVhZGVycyBtdXN0IHVzZSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCksCisJYW5kIHdpdGggdGhlIHNhbWUgc3JjdV9zdHJ1Y3QuCVRoZSBydWxlcyBmb3IgdGhlIGV4cGVkaXRlZAorCXByaW1pdGl2ZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGVpciBub24tZXhwZWRpdGVkIGNvdW50ZXJwYXJ0cy4KKwlNaXhpbmcgdGhpbmdzIHVwIHdpbGwgcmVzdWx0IGluIGNvbmZ1c2lvbiBhbmQgYnJva2VuIGtlcm5lbHMuCiAKIAlPbmUgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogcmN1X3JlYWRfbG9jaygpIGFuZCByY3VfcmVhZF91bmxvY2soKQogCW1heSBiZSBzdWJzdGl0dXRlZCBmb3IgcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKQpAQCAtMjEyLDYgKzI0NCw4IEBACiAJZS4JUGVyaW9kaWNhbGx5IGludm9rZSBzeW5jaHJvbml6ZV9yY3UoKSwgcGVybWl0dGluZyBhIGxpbWl0ZWQKIAkJbnVtYmVyIG9mIHVwZGF0ZXMgcGVyIGdyYWNlIHBlcmlvZC4KIAorCVRoZSBzYW1lIGNhdXRpb25zIGFwcGx5IHRvIGNhbGxfcmN1X2JoKCkgYW5kIGNhbGxfcmN1X3NjaGVkKCkuCisKIDkuCUFsbCBSQ1UgbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlcywgd2hpY2ggaW5jbHVkZQogCXJjdV9kZXJlZmVyZW5jZSgpLCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSgpLAogCWxpc3RfZm9yX2VhY2hfY29udGludWVfcmN1KCksIGFuZCBsaXN0X2Zvcl9lYWNoX3NhZmVfcmN1KCksCkBAIC0yMTksNyArMjUzLDkgQEAKIAltdXN0IGJlIHByb3RlY3RlZCBieSBhcHByb3ByaWF0ZSB1cGRhdGUtc2lkZSBsb2Nrcy4gIFJDVQogCXJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBhcmUgZGVsaW1pdGVkIGJ5IHJjdV9yZWFkX2xvY2soKQogCWFuZCByY3VfcmVhZF91bmxvY2soKSwgb3IgYnkgc2ltaWxhciBwcmltaXRpdmVzIHN1Y2ggYXMKLQlyY3VfcmVhZF9sb2NrX2JoKCkgYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpLgorCXJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCksIGluIHdoaWNoIGNhc2UKKwl0aGUgbWF0Y2hpbmcgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIG11c3QgYmUgdXNlZCBpbiBvcmRlcgorCXRvIGtlZXAgbG9ja2RlcCBoYXBweSwgaW4gdGhpcyBjYXNlLCByY3VfZGVyZWZlcmVuY2VfYmgoKS4KIAogCVRoZSByZWFzb24gdGhhdCBpdCBpcyBwZXJtaXNzaWJsZSB0byB1c2UgUkNVIGxpc3QtdHJhdmVyc2FsCiAJcHJpbWl0aXZlcyB3aGVuIHRoZSB1cGRhdGUtc2lkZSBsb2NrIGlzIGhlbGQgaXMgdGhhdCBkb2luZyBzbwpAQCAtMjI5LDcgKzI2NSw4IEBACiAxMC4JQ29udmVyc2VseSwgaWYgeW91IGFyZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sCiAJYW5kIHlvdSBkb24ndCBob2xkIHRoZSBhcHByb3ByaWF0ZSB1cGRhdGUtc2lkZSBsb2NrLCB5b3UgLW11c3QtCiAJdXNlIHRoZSAiX3JjdSgpIiB2YXJpYW50cyBvZiB0aGUgbGlzdCBtYWNyb3MuICBGYWlsaW5nIHRvIGRvIHNvCi0Jd2lsbCBicmVhayBBbHBoYSBhbmQgY29uZnVzZSBwZW9wbGUgcmVhZGluZyB5b3VyIGNvZGUuCisJd2lsbCBicmVhayBBbHBoYSwgY2F1c2UgYWdncmVzc2l2ZSBjb21waWxlcnMgdG8gZ2VuZXJhdGUgYmFkIGNvZGUsCisJYW5kIGNvbmZ1c2UgcGVvcGxlIHRyeWluZyB0byByZWFkIHlvdXIgY29kZS4KIAogMTEuCU5vdGUgdGhhdCBzeW5jaHJvbml6ZV9yY3UoKSAtb25seS0gZ3VhcmFudGVlcyB0byB3YWl0IHVudGlsCiAJYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgcmN1X3JlYWRfbG9jaygpLXByb3RlY3RlZCBSQ1UgcmVhZC1zaWRlCkBAIC0yMzksMTUgKzI3NiwyMSBAQAogCXJjdV9yZWFkX2xvY2soKS1wcm90ZWN0ZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCBkbyAtbm90LQogCXVzZSBzeW5jaHJvbml6ZV9yY3UoKS4KIAotCUlmIHlvdSB3YW50IHRvIHdhaXQgZm9yIHNvbWUgb2YgdGhlc2Ugb3RoZXIgdGhpbmdzLCB5b3UgbWlnaHQKLQlpbnN0ZWFkIG5lZWQgdG8gdXNlIHN5bmNocm9uaXplX2lycSgpIG9yIHN5bmNocm9uaXplX3NjaGVkKCkuCisJU2ltaWxhcmx5LCBkaXNhYmxpbmcgcHJlZW1wdGlvbiBpcyBub3QgYW4gYWNjZXB0YWJsZSBzdWJzdGl0dXRlCisJZm9yIHJjdV9yZWFkX2xvY2soKS4gIENvZGUgdGhhdCBhdHRlbXB0cyB0byB1c2UgcHJlZW1wdGlvbgorCWRpc2FibGluZyB3aGVyZSBpdCBzaG91bGQgYmUgdXNpbmcgcmN1X3JlYWRfbG9jaygpIHdpbGwgYnJlYWsKKwlpbiByZWFsLXRpbWUga2VybmVsIGJ1aWxkcy4KKworCUlmIHlvdSB3YW50IHRvIHdhaXQgZm9yIGludGVycnVwdCBoYW5kbGVycywgTk1JIGhhbmRsZXJzLCBhbmQKKwljb2RlIHVuZGVyIHRoZSBpbmZsdWVuY2Ugb2YgcHJlZW1wdF9kaXNhYmxlKCksIHlvdSBpbnN0ZWFkCisJbmVlZCB0byB1c2Ugc3luY2hyb25pemVfaXJxKCkgb3Igc3luY2hyb25pemVfc2NoZWQoKS4KIAogMTIuCUFueSBsb2NrIGFjcXVpcmVkIGJ5IGFuIFJDVSBjYWxsYmFjayBtdXN0IGJlIGFjcXVpcmVkIGVsc2V3aGVyZQogCXdpdGggc29mdGlycSBkaXNhYmxlZCwgZS5nLiwgdmlhIHNwaW5fbG9ja19pcnFzYXZlKCksCiAJc3Bpbl9sb2NrX2JoKCksIGV0Yy4gIEZhaWxpbmcgdG8gZGlzYWJsZSBpcnEgb24gYSBnaXZlbgotCWFjcXVpc2l0aW9uIG9mIHRoYXQgbG9jayB3aWxsIHJlc3VsdCBpbiBkZWFkbG9jayBhcyBzb29uIGFzIHRoZQotCVJDVSBjYWxsYmFjayBoYXBwZW5zIHRvIGludGVycnVwdCB0aGF0IGFjcXVpc2l0aW9uJ3MgY3JpdGljYWwKLQlzZWN0aW9uLgorCWFjcXVpc2l0aW9uIG9mIHRoYXQgbG9jayB3aWxsIHJlc3VsdCBpbiBkZWFkbG9jayBhcyBzb29uIGFzCisJdGhlIFJDVSBzb2Z0aXJxIGhhbmRsZXIgaGFwcGVucyB0byBydW4geW91ciBSQ1UgY2FsbGJhY2sgd2hpbGUKKwlpbnRlcnJ1cHRpbmcgdGhhdCBhY3F1aXNpdGlvbidzIGNyaXRpY2FsIHNlY3Rpb24uCiAKIDEzLglSQ1UgY2FsbGJhY2tzIGNhbiBiZSBhbmQgYXJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsLiAgSW4gbWFueSBjYXNlcywKIAl0aGUgY2FsbGJhY2sgY29kZSBzaW1wbHkgd3JhcHBlcnMgYXJvdW5kIGtmcmVlKCksIHNvIHRoYXQgdGhpcwpAQCAtMjY1LDI5ICszMDgsMzAgQEAKIAlub3QgdGhlIGNhc2UsIGEgc2VsZi1zcGF3bmluZyBSQ1UgY2FsbGJhY2sgd291bGQgcHJldmVudCB0aGUKIAl2aWN0aW0gQ1BVIGZyb20gZXZlciBnb2luZyBvZmZsaW5lLikKIAotMTQuCVNSQ1UgKHNyY3VfcmVhZF9sb2NrKCksIHNyY3VfcmVhZF91bmxvY2soKSwgYW5kIHN5bmNocm9uaXplX3NyY3UoKSkKLQltYXkgb25seSBiZSBpbnZva2VkIGZyb20gcHJvY2VzcyBjb250ZXh0LiAgVW5saWtlIG90aGVyIGZvcm1zIG9mCi0JUkNVLCBpdCAtaXMtIHBlcm1pc3NpYmxlIHRvIGJsb2NrIGluIGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCi0Jc2VjdGlvbiAoZGVtYXJrZWQgYnkgc3JjdV9yZWFkX2xvY2soKSBhbmQgc3JjdV9yZWFkX3VubG9jaygpKSwKLQloZW5jZSB0aGUgIlNSQ1UiOiAic2xlZXBhYmxlIFJDVSIuICBQbGVhc2Ugbm90ZSB0aGF0IGlmIHlvdQotCWRvbid0IG5lZWQgdG8gc2xlZXAgaW4gcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCB5b3Ugc2hvdWxkCi0JYmUgdXNpbmcgUkNVIHJhdGhlciB0aGFuIFNSQ1UsIGJlY2F1c2UgUkNVIGlzIGFsbW9zdCBhbHdheXMKLQlmYXN0ZXIgYW5kIGVhc2llciB0byB1c2UgdGhhbiBpcyBTUkNVLgorMTQuCVNSQ1UgKHNyY3VfcmVhZF9sb2NrKCksIHNyY3VfcmVhZF91bmxvY2soKSwgc3JjdV9kZXJlZmVyZW5jZSgpLAorCXN5bmNocm9uaXplX3NyY3UoKSwgYW5kIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCkpIG1heSBvbmx5CisJYmUgaW52b2tlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4gIFVubGlrZSBvdGhlciBmb3JtcyBvZiBSQ1UsIGl0CisJLWlzLSBwZXJtaXNzaWJsZSB0byBibG9jayBpbiBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uCisJKGRlbWFya2VkIGJ5IHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF91bmxvY2soKSksIGhlbmNlIHRoZQorCSJTUkNVIjogInNsZWVwYWJsZSBSQ1UiLiAgUGxlYXNlIG5vdGUgdGhhdCBpZiB5b3UgZG9uJ3QgbmVlZAorCXRvIHNsZWVwIGluIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgeW91IHNob3VsZCBiZSB1c2luZworCVJDVSByYXRoZXIgdGhhbiBTUkNVLCBiZWNhdXNlIFJDVSBpcyBhbG1vc3QgYWx3YXlzIGZhc3RlciBhbmQKKwllYXNpZXIgdG8gdXNlIHRoYW4gaXMgU1JDVS4KIAogCUFsc28gdW5saWtlIG90aGVyIGZvcm1zIG9mIFJDVSwgZXhwbGljaXQgaW5pdGlhbGl6YXRpb24KIAlhbmQgY2xlYW51cCBpcyByZXF1aXJlZCB2aWEgaW5pdF9zcmN1X3N0cnVjdCgpIGFuZAogCWNsZWFudXBfc3JjdV9zdHJ1Y3QoKS4JVGhlc2UgYXJlIHBhc3NlZCBhICJzdHJ1Y3Qgc3JjdV9zdHJ1Y3QiCiAJdGhhdCBkZWZpbmVzIHRoZSBzY29wZSBvZiBhIGdpdmVuIFNSQ1UgZG9tYWluLglPbmNlIGluaXRpYWxpemVkLAogCXRoZSBzcmN1X3N0cnVjdCBpcyBwYXNzZWQgdG8gc3JjdV9yZWFkX2xvY2soKSwgc3JjdV9yZWFkX3VubG9jaygpCi0JYW5kIHN5bmNocm9uaXplX3NyY3UoKS4gIEEgZ2l2ZW4gc3luY2hyb25pemVfc3JjdSgpIHdhaXRzIG9ubHkKLQlmb3IgU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgZ292ZXJuZWQgYnkgc3JjdV9yZWFkX2xvY2soKQotCWFuZCBzcmN1X3JlYWRfdW5sb2NrKCkgY2FsbHMgdGhhdCBoYXZlIGJlZW4gcGFzc2QgdGhlIHNhbWUKLQlzcmN1X3N0cnVjdC4gIFRoaXMgcHJvcGVydHkgaXMgd2hhdCBtYWtlcyBzbGVlcGluZyByZWFkLXNpZGUKLQljcml0aWNhbCBzZWN0aW9ucyB0b2xlcmFibGUgLS0gYSBnaXZlbiBzdWJzeXN0ZW0gZGVsYXlzIG9ubHkKLQlpdHMgb3duIHVwZGF0ZXMsIG5vdCB0aG9zZSBvZiBvdGhlciBzdWJzeXN0ZW1zIHVzaW5nIFNSQ1UuCi0JVGhlcmVmb3JlLCBTUkNVIGlzIGxlc3MgcHJvbmUgdG8gT09NIHRoZSBzeXN0ZW0gdGhhbiBSQ1Ugd291bGQKLQliZSBpZiBSQ1UncyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgd2VyZSBwZXJtaXR0ZWQgdG8KLQlzbGVlcC4KKwlzeW5jaHJvbml6ZV9zcmN1KCksIGFuZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLiAgQSBnaXZlbgorCXN5bmNocm9uaXplX3NyY3UoKSB3YWl0cyBvbmx5IGZvciBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorCXNlY3Rpb25zIGdvdmVybmVkIGJ5IHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF91bmxvY2soKQorCWNhbGxzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCB0aGUgc2FtZSBzcmN1X3N0cnVjdC4gIFRoaXMgcHJvcGVydHkKKwlpcyB3aGF0IG1ha2VzIHNsZWVwaW5nIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyB0b2xlcmFibGUgLS0KKwlhIGdpdmVuIHN1YnN5c3RlbSBkZWxheXMgb25seSBpdHMgb3duIHVwZGF0ZXMsIG5vdCB0aG9zZSBvZiBvdGhlcgorCXN1YnN5c3RlbXMgdXNpbmcgU1JDVS4JVGhlcmVmb3JlLCBTUkNVIGlzIGxlc3MgcHJvbmUgdG8gT09NIHRoZQorCXN5c3RlbSB0aGFuIFJDVSB3b3VsZCBiZSBpZiBSQ1UncyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMKKwl3ZXJlIHBlcm1pdHRlZCB0byBzbGVlcC4KIAogCVRoZSBhYmlsaXR5IHRvIHNsZWVwIGluIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBkb2VzIG5vdAogCWNvbWUgZm9yIGZyZWUuCUZpcnN0LCBjb3JyZXNwb25kaW5nIHNyY3VfcmVhZF9sb2NrKCkgYW5kCkBAIC0zMTEsMTIgKzM1NSwxMiBAQAogCWRlc3RydWN0aXZlIG9wZXJhdGlvbiwgYW5kIC1vbmx5LSAtdGhlbi0gaW52b2tlIGNhbGxfcmN1KCksCiAJc3luY2hyb25pemVfcmN1KCksIG9yIGZyaWVuZHMuCiAKLQlCZWNhdXNlIHRoZXNlIHByaW1pdGl2ZXMgb25seSB3YWl0IGZvciBwcmUtZXhpc3RpbmcgcmVhZGVycywKLQlpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHNhZmV0eSB0bwotCWFueSBzdWJzZXF1ZW50IHJlYWRlcnMuCisJQmVjYXVzZSB0aGVzZSBwcmltaXRpdmVzIG9ubHkgd2FpdCBmb3IgcHJlLWV4aXN0aW5nIHJlYWRlcnMsIGl0CisJaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IGFueSBzdWJzZXF1ZW50CisJcmVhZGVycyB3aWxsIGV4ZWN1dGUgc2FmZWx5LgogCi0xNi4JVGhlIHZhcmlvdXMgUkNVIHJlYWQtc2lkZSBwcmltaXRpdmVzIGRvIC1ub3QtIGNvbnRhaW4gbWVtb3J5Ci0JYmFycmllcnMuICBUaGUgQ1BVIChhbmQgaW4gc29tZSBjYXNlcywgdGhlIGNvbXBpbGVyKSBpcyBmcmVlCi0JdG8gcmVvcmRlciBjb2RlIGludG8gYW5kIG91dCBvZiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgotCUl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgUkNVIHVwZGF0ZS1zaWRlIHByaW1pdGl2ZXMgdG8KLQlkZWFsIHdpdGggdGhpcy4KKzE2LglUaGUgdmFyaW91cyBSQ1UgcmVhZC1zaWRlIHByaW1pdGl2ZXMgZG8gLW5vdC0gbmVjZXNzYXJpbHkgY29udGFpbgorCW1lbW9yeSBiYXJyaWVycy4gIFlvdSBzaG91bGQgdGhlcmVmb3JlIHBsYW4gZm9yIHRoZSBDUFUKKwlhbmQgdGhlIGNvbXBpbGVyIHRvIGZyZWVseSByZW9yZGVyIGNvZGUgaW50byBhbmQgb3V0IG9mIFJDVQorCXJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4gIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUKKwlSQ1UgdXBkYXRlLXNpZGUgcHJpbWl0aXZlcyB0byBkZWFsIHdpdGggdGhpcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyNGI1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAudHh0CkBAIC0wLDAgKzEsNjcgQEAKK1JDVSBhbmQgbG9ja2RlcCBjaGVja2luZworCitBbGwgZmxhdm9ycyBvZiBSQ1UgaGF2ZSBsb2NrZGVwIGNoZWNraW5nIGF2YWlsYWJsZSwgc28gdGhhdCBsb2NrZGVwIGlzCithd2FyZSBvZiB3aGVuIGVhY2ggdGFzayBlbnRlcnMgYW5kIGxlYXZlcyBhbnkgZmxhdm9yIG9mIFJDVSByZWFkLXNpZGUKK2NyaXRpY2FsIHNlY3Rpb24uICBFYWNoIGZsYXZvciBvZiBSQ1UgaXMgdHJhY2tlZCBzZXBhcmF0ZWx5IChidXQgbm90ZQordGhhdCB0aGlzIGlzIG5vdCB0aGUgY2FzZSBpbiAyLjYuMzIgYW5kIGVhcmxpZXIpLiAgVGhpcyBhbGxvd3MgbG9ja2RlcCdzCit0cmFja2luZyB0byBpbmNsdWRlIFJDVSBzdGF0ZSwgd2hpY2ggY2FuIHNvbWV0aW1lcyBoZWxwIHdoZW4gZGVidWdnaW5nCitkZWFkbG9ja3MgYW5kIHRoZSBsaWtlLgorCitJbiBhZGRpdGlvbiwgUkNVIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgcHJpbWl0aXZlcyB0aGF0IGNoZWNrIGxvY2tkZXAncworc3RhdGU6CisKKwlyY3VfcmVhZF9sb2NrX2hlbGQoKSBmb3Igbm9ybWFsIFJDVS4KKwlyY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSBmb3IgUkNVLWJoLgorCXJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCgpIGZvciBSQ1Utc2NoZWQuCisJc3JjdV9yZWFkX2xvY2tfaGVsZCgpIGZvciBTUkNVLgorCitUaGVzZSBmdW5jdGlvbnMgYXJlIGNvbnNlcnZhdGl2ZSwgYW5kIHdpbGwgdGhlcmVmb3JlIHJldHVybiAxIGlmIHRoZXkKK2FyZW4ndCBjZXJ0YWluIChmb3IgZXhhbXBsZSwgaWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldCkuCitUaGlzIHByZXZlbnRzIHRoaW5ncyBsaWtlIFdBUk5fT04oIXJjdV9yZWFkX2xvY2tfaGVsZCgpKSBmcm9tIGdpdmluZyBmYWxzZQorcG9zaXRpdmVzIHdoZW4gbG9ja2RlcCBpcyBkaXNhYmxlZC4KKworSW4gYWRkaXRpb24sIGEgc2VwYXJhdGUga2VybmVsIGNvbmZpZyBwYXJhbWV0ZXIgQ09ORklHX1BST1ZFX1JDVSBlbmFibGVzCitjaGVja2luZyBvZiByY3VfZGVyZWZlcmVuY2UoKSBwcmltaXRpdmVzOgorCisJcmN1X2RlcmVmZXJlbmNlKHApOgorCQlDaGVjayBmb3IgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCXJjdV9kZXJlZmVyZW5jZV9iaChwKToKKwkJQ2hlY2sgZm9yIFJDVS1iaCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKwlyY3VfZGVyZWZlcmVuY2Vfc2NoZWQocCk6CisJCUNoZWNrIGZvciBSQ1Utc2NoZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisJc3JjdV9kZXJlZmVyZW5jZShwLCBzcCk6CisJCUNoZWNrIGZvciBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCXJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCBjKToKKwkJVXNlIGV4cGxpY2l0IGNoZWNrIGV4cHJlc3Npb24gImMiLgorCXJjdV9kZXJlZmVyZW5jZV9yYXcocCkKKwkJRG9uJ3QgY2hlY2suICAoVXNlIHNwYXJpbmdseSwgaWYgYXQgYWxsLikKKworVGhlIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGNoZWNrIGV4cHJlc3Npb24gY2FuIGJlIGFueSBib29sZWFuCitleHByZXNzaW9uLCBidXQgd291bGQgbm9ybWFsbHkgaW5jbHVkZSBvbmUgb2YgdGhlIHJjdV9yZWFkX2xvY2tfaGVsZCgpCitmYW1pbHkgb2YgZnVuY3Rpb25zIGFuZCBhIGxvY2tkZXAgZXhwcmVzc2lvbi4gIEhvd2V2ZXIsIGFueSBib29sZWFuCitleHByZXNzaW9uIGNhbiBiZSB1c2VkLiAgRm9yIGEgbW9kZXJhdGVseSBvcm5hdGUgZXhhbXBsZSwgY29uc2lkZXIKK3RoZSBmb2xsb3dpbmc6CisKKwlmaWxlID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGZkdC0+ZmRbZmRdLAorCQkJCSAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgICAgIGxvY2tkZXBfaXNfaGVsZCgmZmlsZXMtPmZpbGVfbG9jaykgfHwKKwkJCQkgICAgIGF0b21pY19yZWFkKCZmaWxlcy0+Y291bnQpID09IDEpOworCitUaGlzIGV4cHJlc3Npb24gcGlja3MgdXAgdGhlIHBvaW50ZXIgImZkdC0+ZmRbZmRdIiBpbiBhbiBSQ1Utc2FmZSBtYW5uZXIsCithbmQsIGlmIENPTkZJR19QUk9WRV9SQ1UgaXMgY29uZmlndXJlZCwgdmVyaWZpZXMgdGhhdCB0aGlzIGV4cHJlc3Npb24KK2lzIHVzZWQgaW46CisKKzEuCUFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwgb3IKKzIuCXdpdGggZmlsZXMtPmZpbGVfbG9jayBoZWxkLCBvcgorMy4Jb24gYW4gdW5zaGFyZWQgZmlsZXNfc3RydWN0LgorCitJbiBjYXNlICgxKSwgdGhlIHBvaW50ZXIgaXMgcGlja2VkIHVwIGluIGFuIFJDVS1zYWZlIG1hbm5lciBmb3IgdmFuaWxsYQorUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgaW4gY2FzZSAoMikgdGhlIC0+ZmlsZV9sb2NrIHByZXZlbnRzCithbnkgY2hhbmdlIGZyb20gdGFraW5nIHBsYWNlLCBhbmQgZmluYWxseSwgaW4gY2FzZSAoMykgdGhlIGN1cnJlbnQgdGFzaworaXMgdGhlIG9ubHkgdGFzayBhY2Nlc3NpbmcgdGhlIGZpbGVfc3RydWN0LCBhZ2FpbiBwcmV2ZW50aW5nIGFueSBjaGFuZ2UKK2Zyb20gdGFraW5nIHBsYWNlLgorCitUaGVyZSBhcmUgY3VycmVudGx5IG9ubHkgInVuaXZlcnNhbCIgdmVyc2lvbnMgb2YgdGhlIHJjdV9hc3NpZ25fcG9pbnRlcigpCithbmQgUkNVIGxpc3QtL3RyZWUtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHdoaWNoIGRvIG5vdCAoeWV0KSBjaGVjayBmb3IKK2JlaW5nIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIEluIHRoZSBmdXR1cmUsIHNlcGFyYXRlCit2ZXJzaW9ucyBvZiB0aGVzZSBwcmltaXRpdmVzIG1pZ2h0IGJlIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAppbmRleCAyYTIzNTIzLi4zMTg1MjcwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKQEAgLTc1LDYgKzc1LDggQEAKIAlzZWFyY2ggZm9yIHRoZSBzdHJpbmcgIlBhdGVudCIgaW4gUlRGUC50eHQgdG8gZmluZCB0aGVtLgogCU9mIHRoZXNlLCBvbmUgd2FzIGFsbG93ZWQgdG8gbGFwc2UgYnkgdGhlIGFzc2lnbmVlLCBhbmQgdGhlCiAJb3RoZXJzIGhhdmUgYmVlbiBjb250cmlidXRlZCB0byB0aGUgTGludXgga2VybmVsIHVuZGVyIEdQTC4KKwlUaGVyZSBhcmUgbm93IGFsc28gTEdQTCBpbXBsZW1lbnRhdGlvbnMgb2YgdXNlci1sZXZlbCBSQ1UKKwlhdmFpbGFibGUgKGh0dHA6Ly9sdHRuZy5vcmcvP3E9bm9kZS8xOCkuCiAKIG8JSSBoZWFyIHRoYXQgUkNVIG5lZWRzIHdvcmsgaW4gb3JkZXIgdG8gc3VwcG9ydCByZWFsdGltZSBrZXJuZWxzPwogCkBAIC05MSw0OCArOTMsNCBAQAogCiBvCVdoYXQgYXJlIGFsbCB0aGVzZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeT8KIAotCi0JTk1JLVJDVS50eHQKLQotCQlEZXNjcmliZXMgaG93IHRvIHVzZSBSQ1UgdG8gaW1wbGVtZW50IGR5bmFtaWMKLQkJTk1JIGhhbmRsZXJzLCB3aGljaCBjYW4gYmUgcmV2ZWN0b3JlZCBvbiB0aGUgZmx5LAotCQl3aXRob3V0IHJlYm9vdGluZy4KLQotCVJURlAudHh0Ci0KLQkJTGlzdCBvZiBSQ1UtcmVsYXRlZCBwdWJsaWNhdGlvbnMgYW5kIHdlYiBzaXRlcy4KLQotCVVQLnR4dAotCi0JCURpc2N1c3Npb24gb2YgUkNVIHVzYWdlIGluIFVQIGtlcm5lbHMuCi0KLQlhcnJheVJDVS50eHQKLQotCQlEZXNjcmliZXMgaG93IHRvIHVzZSBSQ1UgdG8gcHJvdGVjdCBhcnJheXMsIHdpdGgKLQkJcmVzaXplYWJsZSBhcnJheXMgd2hvc2UgZWxlbWVudHMgcmVmZXJlbmNlIG90aGVyCi0JCWRhdGEgc3RydWN0dXJlcyBiZWluZyBvZiB0aGUgbW9zdCBpbnRlcmVzdC4KLQotCWNoZWNrbGlzdC50eHQKLQotCQlMaXN0cyB0aGluZ3MgdG8gY2hlY2sgZm9yIHdoZW4gaW5zcGVjdGluZyBjb2RlIHRoYXQKLQkJdXNlcyBSQ1UuCi0KLQlsaXN0UkNVLnR4dAotCi0JCURlc2NyaWJlcyBob3cgdG8gdXNlIFJDVSB0byBwcm90ZWN0IGxpbmtlZCBsaXN0cy4KLQkJVGhpcyBpcyB0aGUgc2ltcGxlc3QgYW5kIG1vc3QgY29tbW9uIHVzZSBvZiBSQ1UKLQkJaW4gdGhlIExpbnV4IGtlcm5lbC4KLQotCXJjdS50eHQKLQotCQlZb3UgYXJlIHJlYWRpbmcgaXQhCi0KLQlyY3VyZWYudHh0Ci0KLQkJRGVzY3JpYmVzIGhvdyB0byBjb21iaW5lIHVzZSBvZiByZWZlcmVuY2UgY291bnRzCi0JCXdpdGggUkNVLgotCi0Jd2hhdGlzUkNVLnR4dAotCi0JCU92ZXJ2aWV3IG9mIGhvdyB0aGUgUkNVIGltcGxlbWVudGF0aW9uIHdvcmtzLiAgQWxvbmcKLQkJdGhlIHdheSwgcHJlc2VudHMgYSBjb25jZXB0dWFsIHZpZXcgb2YgUkNVLgorCVNlZSAwMC1JTkRFWCBmb3IgdGhlIGxpc3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDIzZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dApAQCAtMCwwICsxLDU4IEBACitVc2luZyBSQ1UncyBDUFUgU3RhbGwgRGV0ZWN0b3IKKworVGhlIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGtlcm5lbCBjb25maWcgcGFyYW1ldGVyIGVuYWJsZXMKK1JDVSdzIENQVSBzdGFsbCBkZXRlY3Rvciwgd2hpY2ggZGV0ZWN0cyBjb25kaXRpb25zIHRoYXQgdW5kdWx5IGRlbGF5CitSQ1UgZ3JhY2UgcGVyaW9kcy4gIFRoZSBzdGFsbCBkZXRlY3RvcidzIGlkZWEgb2Ygd2hhdCBjb25zdGl0dXRlcworInVuZHVseSBkZWxheWVkIiBpcyBjb250cm9sbGVkIGJ5IGEgcGFpciBvZiBDIHByZXByb2Nlc3NvciBtYWNyb3M6CisKK1JDVV9TRUNPTkRTX1RJTExfU1RBTExfQ0hFQ0sKKworCVRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhhdCBSQ1Ugd2lsbCB3YWl0IGZyb20KKwl0aGUgYmVnaW5uaW5nIG9mIGEgZ3JhY2UgcGVyaW9kIHVudGlsIGl0IGlzc3VlcyBhbiBSQ1UgQ1BVCisJc3RhbGwgd2FybmluZy4JSXQgaXMgbm9ybWFsbHkgdGVuIHNlY29uZHMuCisKK1JDVV9TRUNPTkRTX1RJTExfU1RBTExfUkVDSEVDSworCisJVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBwZXJpb2Qgb2YgdGltZSB0aGF0IFJDVSB3aWxsIHdhaXQgYWZ0ZXIKKwlpc3N1aW5nIGEgc3RhbGwgd2FybmluZyB1bnRpbCBpdCBpc3N1ZXMgYW5vdGhlciBzdGFsbCB3YXJuaW5nLgorCUl0IGlzIG5vcm1hbGx5IHNldCB0byB0aGlydHkgc2Vjb25kcy4KKworUkNVX1NUQUxMX1JBVF9ERUxBWQorCisJVGhlIENQVSBzdGFsbCBkZXRlY3RvciB0cmllcyB0byBtYWtlIHRoZSBvZmZlbmRpbmcgQ1BVIHJhdCBvbiBpdHNlbGYsCisJYXMgdGhpcyBvZnRlbiBnaXZlcyBiZXR0ZXItcXVhbGl0eSBzdGFjayB0cmFjZXMuICBIb3dldmVyLCBpZgorCXRoZSBvZmZlbmRpbmcgQ1BVIGRvZXMgbm90IGRldGVjdCBpdHMgb3duIHN0YWxsIGluIHRoZSBudW1iZXIKKwlvZiBqaWZmaWVzIHNwZWNpZmllZCBieSBSQ1VfU1RBTExfUkFUX0RFTEFZLCB0aGVuIG90aGVyIENQVXMgd2lsbAorCWNvbXBsYWluLiAgVGhpcyBpcyBub3JtYWxseSBzZXQgdG8gdHdvIGppZmZpZXMuCisKK1RoZSBmb2xsb3dpbmcgcHJvYmxlbXMgY2FuIHJlc3VsdCBpbiBhbiBSQ1UgQ1BVIHN0YWxsIHdhcm5pbmc6CisKK28JQSBDUFUgbG9vcGluZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisJCitvCUEgQ1BVIGxvb3Bpbmcgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCitvCUEgQ1BVIGxvb3Bpbmcgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLgorCitvCUZvciAhQ09ORklHX1BSRUVNUFQga2VybmVscywgYSBDUFUgbG9vcGluZyBhbnl3aGVyZSBpbiB0aGUga2VybmVsCisJd2l0aG91dCBpbnZva2luZyBzY2hlZHVsZSgpLgorCitvCUEgYnVnIGluIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24uCisKK28JQSBoYXJkd2FyZSBmYWlsdXJlLiAgVGhpcyBpcyBxdWl0ZSB1bmxpa2VseSwgYnV0IGhhcyBvY2N1cnJlZAorCWF0IGxlYXN0IG9uY2UgaW4gYSBmb3JtZXIgbGlmZS4gIEEgQ1BVIGZhaWxlZCBpbiBhIHJ1bm5pbmcgc3lzdGVtLAorCWJlY29taW5nIHVucmVzcG9uc2l2ZSwgYnV0IG5vdCBjYXVzaW5nIGFuIGltbWVkaWF0ZSBjcmFzaC4KKwlUaGlzIHJlc3VsdGVkIGluIGEgc2VyaWVzIG9mIFJDVSBDUFUgc3RhbGwgd2FybmluZ3MsIGV2ZW50dWFsbHkKKwlsZWFkaW5nIHRoZSByZWFsaXphdGlvbiB0aGF0IHRoZSBDUFUgaGFkIGZhaWxlZC4KKworVGhlIFJDVSwgUkNVLXNjaGVkLCBhbmQgUkNVLWJoIGltcGxlbWVudGF0aW9ucyBoYXZlIENQVSBzdGFsbCB3YXJuaW5nLgorU1JDVSBkb2VzIG5vdCBkbyBzbyBkaXJlY3RseSwgYnV0IGl0cyBjYWxscyB0byBzeW5jaHJvbml6ZV9zY2hlZCgpIHdpbGwKK3Jlc3VsdCBpbiBSQ1Utc2NoZWQgZGV0ZWN0aW5nIGFueSBDUFUgc3RhbGxzIHRoYXQgbWlnaHQgYmUgb2NjdXJyaW5nLgorCitUbyBkaWFnbm9zZSB0aGUgY2F1c2Ugb2YgdGhlIHN0YWxsLCBpbnNwZWN0IHRoZSBzdGFjayB0cmFjZXMuICBUaGUgb2ZmZW5kaW5nCitmdW5jdGlvbiB3aWxsIHVzdWFsbHkgYmUgbmVhciB0aGUgdG9wIG9mIHRoZSBzdGFjay4gIElmIHlvdSBoYXZlIGEgc2VyaWVzCitvZiBzdGFsbCB3YXJuaW5ncyBmcm9tIGEgc2luZ2xlIGV4dGVuZGVkIHN0YWxsLCBjb21wYXJpbmcgdGhlIHN0YWNrIHRyYWNlcworY2FuIG9mdGVuIGhlbHAgZGV0ZXJtaW5lIHdoZXJlIHRoZSBzdGFsbCBpcyBvY2N1cnJpbmcsIHdoaWNoIHdpbGwgdXN1YWxseQorYmUgaW4gdGhlIGZ1bmN0aW9uIG5lYXJlc3QgdGhlIHRvcCBvZiB0aGUgc3RhY2sgdGhhdCBzdGF5cyB0aGUgc2FtZSBmcm9tCit0cmFjZSB0byB0cmFjZS4KKworUkNVIGJ1Z3MgY2FuIG9mdGVuIGJlIGRlYnVnZ2VkIHdpdGggdGhlIGhlbHAgb2YgQ09ORklHX1JDVV9UUkFDRS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvdG9ydHVyZS50eHQKaW5kZXggOWRiYTNiYi4uMGU1MGJjMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvdG9ydHVyZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvdG9ydHVyZS50eHQKQEAgLTMwLDYgKzMwLDE4IEBACiAKIFRoaXMgbW9kdWxlIGhhcyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CiAKK2Zxc19kdXJhdGlvbglEdXJhdGlvbiAoaW4gbWljcm9zZWNvbmRzKSBvZiBhcnRpZmljaWFsbHkgaW5kdWNlZCBidXJzdHMKKwkJb2YgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgaW52b2NhdGlvbnMuICBJbiBSQ1UKKwkJaW1wbGVtZW50YXRpb25zIGhhdmluZyBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSwgdGhlc2UKKwkJYnVyc3RzIGhlbHAgZm9yY2UgcmFjZXMgYmV0d2VlbiBmb3JjaW5nIGEgZ2l2ZW4gZ3JhY2UKKwkJcGVyaW9kIGFuZCB0aGF0IGdyYWNlIHBlcmlvZCBlbmRpbmcgb24gaXRzIG93bi4KKworZnFzX2hvbGRvZmYJSG9sZG9mZiB0aW1lIChpbiBtaWNyb3NlY29uZHMpIGJldHdlZW4gY29uc2VjdXRpdmUgY2FsbHMKKwkJdG8gZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgd2l0aGluIGEgYnVyc3QuCisKK2Zxc19zdHV0dGVyCVdhaXQgdGltZSAoaW4gc2Vjb25kcykgYmV0d2VlbiBjb25zZWN1dGl2ZSBidXJzdHMKKwkJb2YgY2FsbHMgdG8gZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkuCisKIGlycXJlYWRlcnMJU2F5cyB0byBpbnZva2UgUkNVIHJlYWRlcnMgZnJvbSBpcnEgbGV2ZWwuICBUaGlzIGlzIGN1cnJlbnRseQogCQlkb25lIHZpYSB0aW1lcnMuICBEZWZhdWx0cyB0byAiMSIgZm9yIHZhcmlhbnRzIG9mIFJDVSB0aGF0CiAJCXBlcm1pdCB0aGlzLiAgKE9yLCBtb3JlIGFjY3VyYXRlbHksIHZhcmlhbnRzIG9mIFJDVSB0aGF0IGRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAppbmRleCBkNTQyY2EyLi4xZGMwMGVlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKQEAgLTMyMywxNCArMzIzLDE3IEBACiAJRGVmZXIJCQlQcm90ZWN0CiAKIGEuCXN5bmNocm9uaXplX3JjdSgpCXJjdV9yZWFkX2xvY2soKSAvIHJjdV9yZWFkX3VubG9jaygpCi0JY2FsbF9yY3UoKQorCWNhbGxfcmN1KCkJCXJjdV9kZXJlZmVyZW5jZSgpCiAKIGIuCWNhbGxfcmN1X2JoKCkJCXJjdV9yZWFkX2xvY2tfYmgoKSAvIHJjdV9yZWFkX3VubG9ja19iaCgpCisJCQkJcmN1X2RlcmVmZXJlbmNlX2JoKCkKIAotYy4Jc3luY2hyb25pemVfc2NoZWQoKQlwcmVlbXB0X2Rpc2FibGUoKSAvIHByZWVtcHRfZW5hYmxlKCkKK2MuCXN5bmNocm9uaXplX3NjaGVkKCkJcmN1X3JlYWRfbG9ja19zY2hlZCgpIC8gcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCkKKwkJCQlwcmVlbXB0X2Rpc2FibGUoKSAvIHByZWVtcHRfZW5hYmxlKCkKIAkJCQlsb2NhbF9pcnFfc2F2ZSgpIC8gbG9jYWxfaXJxX3Jlc3RvcmUoKQogCQkJCWhhcmRpcnEgZW50ZXIgLyBoYXJkaXJxIGV4aXQKIAkJCQlOTUkgZW50ZXIgLyBOTUkgZXhpdAorCQkJCXJjdV9kZXJlZmVyZW5jZV9zY2hlZCgpCiAKIFRoZXNlIHRocmVlIG1lY2hhbmlzbXMgYXJlIHVzZWQgYXMgZm9sbG93czoKIApAQCAtNzgwLDkgKzc4Myw4IEBACiBBUElzLCBzaW5jZSB0aGVyZSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gY2F0ZWdvcml6ZSB0aGVtCiBpbiBkb2Nib29rLiAgSGVyZSBpcyB0aGUgbGlzdCwgYnkgY2F0ZWdvcnkuCiAKLVJDVSBwb2ludGVyL2xpc3QgdHJhdmVyc2FsOgorUkNVIGxpc3QgdHJhdmVyc2FsOgogCi0JcmN1X2RlcmVmZXJlbmNlCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UKIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UKQEAgLTgwOCw3ICs4MTAsNyBAQAogCiAJcmN1X3JlYWRfbG9jawkJc3luY2hyb25pemVfbmV0CQlyY3VfYmFycmllcgogCXJjdV9yZWFkX3VubG9jawkJc3luY2hyb25pemVfcmN1Ci0JCQkJc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZAorCXJjdV9kZXJlZmVyZW5jZQkJc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZAogCQkJCWNhbGxfcmN1CiAKIApAQCAtODE2LDcgKzgxOCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrX2JoCWNhbGxfcmN1X2JoCQlyY3VfYmFycmllcl9iaAogCXJjdV9yZWFkX3VubG9ja19iaAlzeW5jaHJvbml6ZV9yY3VfYmgKLQkJCQlzeW5jaHJvbml6ZV9yY3VfYmhfZXhwZWRpdGVkCisJcmN1X2RlcmVmZXJlbmNlX2JoCXN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQKIAogCiBzY2hlZDoJQ3JpdGljYWwgc2VjdGlvbnMJR3JhY2UgcGVyaW9kCQlCYXJyaWVyCkBAIC04MjUsMTIgKzgyNywxNCBAQAogCXJjdV9yZWFkX3VubG9ja19zY2hlZAljYWxsX3JjdV9zY2hlZAogCVtwcmVlbXB0X2Rpc2FibGVdCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZAogCVthbmQgZnJpZW5kc10KKwlyY3VfZGVyZWZlcmVuY2Vfc2NoZWQKIAogCiBTUkNVOglDcml0aWNhbCBzZWN0aW9ucwlHcmFjZSBwZXJpb2QJCUJhcnJpZXIKIAogCXNyY3VfcmVhZF9sb2NrCQlzeW5jaHJvbml6ZV9zcmN1CU4vQQogCXNyY3VfcmVhZF91bmxvY2sJc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQKKwlzcmN1X2RlcmVmZXJlbmNlCiAKIFNSQ1U6CUluaXRpYWxpemF0aW9uL2NsZWFudXAKIAlpbml0X3NyY3Vfc3RydWN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dCBiL0RvY3VtZW50YXRpb24vY2FjaGV0bGIudHh0CmluZGV4IGRhNDJhYjQuLmIyMzE0MTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2FjaGV0bGIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2FjaGV0bGIudHh0CkBAIC0zNzcsMyArMzc3LDI3IEBACiAJQWxsIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGZsdXNoX2ljYWNoZV9wYWdlIGNhbiBiZSBpbXBsZW1lbnRlZCBpbgogCWZsdXNoX2RjYWNoZV9wYWdlIGFuZCB1cGRhdGVfbW11X2NhY2hlLiBJbiAyLjcgdGhlIGhvcGUgaXMgdG8KIAlyZW1vdmUgdGhpcyBpbnRlcmZhY2UgY29tcGxldGVseS4KKworVGhlIGZpbmFsIGNhdGVnb3J5IG9mIEFQSXMgaXMgZm9yIEkvTyB0byBkZWxpYmVyYXRlbHkgYWxpYXNlZCBhZGRyZXNzCityYW5nZXMgaW5zaWRlIHRoZSBrZXJuZWwuICBTdWNoIGFsaWFzZXMgYXJlIHNldCB1cCBieSB1c2Ugb2YgdGhlCit2bWFwL3ZtYWxsb2MgQVBJLiAgU2luY2Uga2VybmVsIEkvTyBnb2VzIHZpYSBwaHlzaWNhbCBwYWdlcywgdGhlIEkvTworc3Vic3lzdGVtIGFzc3VtZXMgdGhhdCB0aGUgdXNlciBtYXBwaW5nIGFuZCBrZXJuZWwgb2Zmc2V0IG1hcHBpbmcgYXJlCit0aGUgb25seSBhbGlhc2VzLiAgVGhpcyBpc24ndCB0cnVlIGZvciB2bWFwIGFsaWFzZXMsIHNvIGFueXRoaW5nIGluCit0aGUga2VybmVsIHRyeWluZyB0byBkbyBJL08gdG8gdm1hcCBhcmVhcyBtdXN0IG1hbnVhbGx5IG1hbmFnZQorY29oZXJlbmN5LiAgSXQgbXVzdCBkbyB0aGlzIGJ5IGZsdXNoaW5nIHRoZSB2bWFwIHJhbmdlIGJlZm9yZSBkb2luZworSS9PIGFuZCBpbnZhbGlkYXRpbmcgaXQgYWZ0ZXIgdGhlIEkvTyByZXR1cm5zLgorCisgIHZvaWQgZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQorICAgICAgIGZsdXNoZXMgdGhlIGtlcm5lbCBjYWNoZSBmb3IgYSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgaW4KKyAgICAgICB0aGUgdm1hcCBhcmVhLiAgVGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCBhbnkgZGF0YSB0aGUga2VybmVsCisgICAgICAgbW9kaWZpZWQgaW4gdGhlIHZtYXAgcmFuZ2UgaXMgbWFkZSB2aXNpYmxlIHRvIHRoZSBwaHlzaWNhbAorICAgICAgIHBhZ2UuICBUaGUgZGVzaWduIGlzIHRvIG1ha2UgdGhpcyBhcmVhIHNhZmUgdG8gcGVyZm9ybSBJL08gb24uCisgICAgICAgTm90ZSB0aGF0IHRoaXMgQVBJIGRvZXMgKm5vdCogYWxzbyBmbHVzaCB0aGUgb2Zmc2V0IG1hcCBhbGlhcworICAgICAgIG9mIHRoZSBhcmVhLgorCisgIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICp2YWRkciwgaW50IHNpemUpIGludmFsaWRhdGVzCisgICAgICAgdGhlIGNhY2hlIGZvciBhIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBpbiB0aGUgdm1hcCBhcmVhCisgICAgICAgd2hpY2ggcHJldmVudHMgdGhlIHByb2Nlc3NvciBmcm9tIG1ha2luZyB0aGUgY2FjaGUgc3RhbGUgYnkKKyAgICAgICBzcGVjdWxhdGl2ZWx5IHJlYWRpbmcgZGF0YSB3aGlsZSB0aGUgSS9PIHdhcyBvY2N1cnJpbmcgdG8gdGhlCisgICAgICAgcGh5c2ljYWwgcGFnZXMuICBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBkYXRhIHJlYWRzIGludG8gdGhlCisgICAgICAgdm1hcCBhcmVhLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKaW5kZXggM2FkNmFjZS4uZDliY2ZmZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgorKysgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCkBAIC02OSw3ICs2OSw2IEBACiBiYm9vdHNlY3QKIGJpbjJjCiBiaW5rZXJuZWwuc3BlYwotYmlub2Zmc2V0CiBib290c2VjdAogYm91bmRzLmgKIGJzZXR1cApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKaW5kZXggMTRiN2I1YS4uMjM5Y2JkYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCkBAIC0yNiw3ICsyNiw3IEBACiAJCSJkZWMzMDAwcyIsICJ2cDcwNDEiLCAiZGlidXNiIiwgIm54dDIwMDIiLCAibnh0MjAwNCIsCiAJCSJvcjUxMjExIiwgIm9yNTExMzJfcWFtIiwgIm9yNTExMzJfdnNiIiwgImJsdWViaXJkIiwKIAkJIm9wZXJhMSIsICJjeDIzMXh4IiwgImN4MTgiLCAiY3gyMzg4NSIsICJwdnJ1c2IyIiwgIm1wYzcxOCIsCi0JCSJhZjkwMTUiKTsKKwkJImFmOTAxNSIsICJuZ2VuZSIpOwogCiAjIENoZWNrIGFyZ3MKIHN5bnRheCgpIGlmIChzY2FsYXIoQEFSR1YpICE9IDEpOwpAQCAtMzksNyArMzksNyBAQAogCWRpZSAkQCBpZiAkQDsKIAlwcmludCBTVERFUlIgPDxFT0Y7CiBGaXJtd2FyZShzKSAkb3V0ZmlsZSBleHRyYWN0ZWQgc3VjY2Vzc2Z1bGx5LgotTm93IGNvcHkgaXQodGhleSkgdG8gZWl0aGVyIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZQorTm93IGNvcHkgaXQodGhlbSkgdG8gZWl0aGVyIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZQogKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgogRU9GCiAJZXhpdCgwKTsKQEAgLTU0OSw2ICs1NDksMjQgQEAKIAljbG9zZSBJTkZJTEU7CiB9CiAKK3N1YiBuZ2VuZSB7CisgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LmRpZ2l0YWxkZXZpY2VzLmRlL2Rvd25sb2FkLyI7CisgICAgbXkgJGZpbGUxID0gIm5nZW5lXzE1LmZ3IjsKKyAgICBteSAkaGFzaDEgPSAiZDc5OGQ1YTc1NzEyMTE3NGYwZGJjNWYyODMzYzBjODUiOworICAgIG15ICRmaWxlMiA9ICJuZ2VuZV8xNy5mdyI7CisgICAgbXkgJGhhc2gyID0gIjI2YjY4NzEzNmUxMjdiOGFjMjRiODFlMGVlYWZjMjBiIjsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRmaWxlMSwgJHVybCAuICRmaWxlMSk7CisgICAgdmVyaWZ5KCRmaWxlMSwgJGhhc2gxKTsKKworICAgIHdnZXRmaWxlKCRmaWxlMiwgJHVybCAuICRmaWxlMik7CisgICAgdmVyaWZ5KCRmaWxlMiwgJGhhc2gyKTsKKworICAgICIkZmlsZTEsICRmaWxlMiI7Cit9CisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFV0aWxpdGllcwogCkBAIC02NjcsNiArNjg1LDcgQEAKIHN1YiBzeW50YXgoKSB7CiAgICAgcHJpbnQgU1RERVJSICJzeW50YXg6IGdldF9kdmJfZmlybXdhcmUgPGNvbXBvbmVudD5cbiI7CiAgICAgcHJpbnQgU1RERVJSICJTdXBwb3J0ZWQgY29tcG9uZW50czpcbiI7CisgICAgQGNvbXBvbmVudHMgPSBzb3J0IEBjb21wb25lbnRzOwogICAgIGZvcigkaT0wOyAkaSA8IHNjYWxhcihAY29tcG9uZW50cyk7ICRpKyspIHsKIAlwcmludCBTVERFUlIgIlx0IiAuICRjb21wb25lbnRzWyRpXSAuICJcbiI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDBhNDY4MzMuLmVhNDAxNDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTYsMjEgKzYsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJVVNFUl9TQ0hFRAotV2hlbjoJMi42LjM0Ci0KLVdoeToJVVNFUl9TQ0hFRCB3YXMgaW1wbGVtZW50ZWQgYXMgYSBwcm9vZiBvZiBjb25jZXB0IGZvciBncm91cCBzY2hlZHVsaW5nLgotCVRoZSBlZmZlY3Qgb2YgVVNFUl9TQ0hFRCBjYW4gYWxyZWFkeSBiZSBhY2hpZXZlZCBmcm9tIHVzZXJzcGFjZSB3aXRoCi0JdGhlIGhlbHAgb2YgbGliY2dyb3VwLiBUaGUgcmVtb3ZhbCBvZiBVU0VSX1NDSEVEIHdpbGwgYWxzbyBzaW1wbGlmeQotCXRoZSBzY2hlZHVsZXIgY29kZSB3aXRoIHRoZSByZW1vdmFsIG9mIG9uZSBtYWpvciBpZmRlZi4gVGhlcmUgYXJlIGFsc28KLQlpc3N1ZXMgVVNFUl9TQ0hFRCBoYXMgd2l0aCBVU0VSX05TLiBBIGRlY2lzaW9uIHdhcyB0YWtlbiBub3QgdG8gZml4Ci0JdGhvc2UgYW5kIGluc3RlYWQgcmVtb3ZlIFVTRVJfU0NIRUQuIEFsc28gbmV3IGdyb3VwIHNjaGVkdWxpbmcKLQlmZWF0dXJlcyB3aWxsIG5vdCBiZSBpbXBsZW1lbnRlZCBmb3IgVVNFUl9TQ0hFRC4KLQotV2hvOglEaGF2YWwgR2lhbmkgPGRoYXZhbEBsaW51eC52bmV0LmlibS5jb20+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglQUklTTTU0CiBXaGVuOgkyLjYuMzQKIApAQCAtNjQsNiArNDksMTcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6CURlcHJlY2F0ZWQgc25hcHNob3QgaW9jdGxzCitXaGVuOgkyLjYuMzYKKworV2h5OglUaGUgaW9jdGxzIGluIGtlcm5lbC9wb3dlci91c2VyLmMgd2VyZSBtYXJrZWQgYXMgZGVwcmVjYXRlZCBsb25nIHRpbWUKKwlhZ28uIE5vdyB0aGV5IG5vdGlmeSB1c2VycyBhYm91dCB0aGF0IHNvIHRoYXQgdGhleSBuZWVkIHRvIHJlcGxhY2UKKwl0aGVpciB1c2Vyc3BhY2UuIEFmdGVyIHNvbWUgbW9yZSB0aW1lLCByZW1vdmUgdGhlbSBjb21wbGV0ZWx5LgorCitXaG86CUppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OglUaGUgaWVlZTgwMjExX3JlZ2RvbSBtb2R1bGUgcGFyYW1ldGVyCiBXaGVuOglNYXJjaCAyMDEwIC8gZGVza3RvcCBjYXRjaHVwCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGVudHJ5LWxvY2tpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQKaW5kZXggNGMwYzU3NS4uNzkzMzRlZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kZW50cnktbG9ja2luZy50eHQKQEAgLTYyLDcgKzYyLDggQEAKIDIuIEluc2VydGlvbiBvZiBhIGRlbnRyeSBpbnRvIHRoZSBoYXNoIHRhYmxlIGlzIGRvbmUgdXNpbmcKICAgIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHdoaWNoIHRha2UgY2FyZSBvZiBvcmRlcmluZyB0aGUgd3JpdGVzIC0gdGhlCiAgICB3cml0ZXMgdG8gdGhlIGRlbnRyeSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHRoZSBkZW50cnkgaXMKLSAgIGluc2VydGVkLiBUaGlzIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggaGxpc3RfZm9yX2VhY2hfcmN1KCkgd2hpbGUKKyAgIGluc2VydGVkLiBUaGlzIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggaGxpc3RfZm9yX2VhY2hfcmN1KCksCisgICB3aGljaCBoYXMgc2luY2UgYmVlbiByZXBsYWNlZCBieSBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKSwgd2hpbGUKICAgIHdhbGtpbmcgdGhlIGhhc2ggY2hhaW4uIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgYWxsCiAgICBpbml0aWFsaXphdGlvbiB0byB0aGUgZGVudHJ5IG11c3QgYmUgZG9uZSBiZWZvcmUKICAgIGhsaXN0X2FkZF9oZWFkX3JjdSgpIHNpbmNlIHdlIGRvbid0IGhhdmUgZGNhY2hlX2xvY2sgcHJvdGVjdGlvbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBlNzg0OGEwLi44YzY2NmQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTczOCw2ICsxNzM4LDkgQEAKIAlub21mZ3B0CQlbWDg2LTMyXSBEaXNhYmxlIE11bHRpLUZ1bmN0aW9uIEdlbmVyYWwgUHVycG9zZQogCQkJVGltZXIgdXNhZ2UgKGZvciBBTUQgR2VvZGUgbWFjaGluZXMpLgogCisJbm9wYXQJCVtYODZdIERpc2FibGUgUEFUIChwYWdlIGF0dHJpYnV0ZSB0YWJsZSBleHRlbnNpb24gb2YKKwkJCXBhZ2V0YWJsZXMpIHN1cHBvcnQuCisKIAlub3JhbmRtYXBzCURvbid0IHVzZSBhZGRyZXNzIHNwYWNlIHJhbmRvbWl6YXRpb24uICBFcXVpdmFsZW50IHRvCiAJCQllY2hvIDAgPiAvcHJvYy9zeXMva2VybmVsL3JhbmRvbWl6ZV92YV9zcGFjZQogCkBAIC0xOTQ4LDggKzE5NTEsMTIgQEAKIAkJCQlJUlEgcm91dGluZyBpcyBlbmFibGVkLgogCQlub2FjcGkJCVtYODZdIERvIG5vdCB1c2UgQUNQSSBmb3IgSVJRIHJvdXRpbmcKIAkJCQlvciBmb3IgUENJIHNjYW5uaW5nLgotCQl1c2VfY3JzCQlbWDg2XSBVc2UgX0NSUyBmb3IgUENJIHJlc291cmNlCi0JCQkJYWxsb2NhdGlvbi4KKwkJdXNlX2NycwkJW1g4Nl0gVXNlIFBDSSBob3N0IGJyaWRnZSB3aW5kb3cgaW5mb3JtYXRpb24KKwkJCQlmcm9tIEFDUEkuICBPbiBCSU9TZXMgZnJvbSAyMDA4IG9yIGxhdGVyLCB0aGlzCisJCQkJaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAgSWYgeW91IG5lZWQgdG8gdXNlIHRoaXMsCisJCQkJcGxlYXNlIHJlcG9ydCBhIGJ1Zy4KKwkJbm9jcnMJCVtYODZdIElnbm9yZSBQQ0kgaG9zdCBicmlkZ2Ugd2luZG93cyBmcm9tIEFDUEkuCisJCQkgICAgICAgIElmIHlvdSBuZWVkIHRvIHVzZSB0aGlzLCBwbGVhc2UgcmVwb3J0IGEgYnVnLgogCQlyb3V0ZWlycQlEbyBJUlEgcm91dGluZyBmb3IgYWxsIFBDSSBkZXZpY2VzLgogCQkJCVRoaXMgaXMgbm9ybWFsbHkgZG9uZSBpbiBwY2lfZW5hYmxlX2RldmljZSgpLAogCQkJCXNvIHRoaXMgb3B0aW9uIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQKQEAgLTE5OTgsNiArMjAwNSwxNCBAQAogCQlmb3JjZQlFbmFibGUgQVNQTSBldmVuIG9uIGRldmljZXMgdGhhdCBjbGFpbSBub3QgdG8gc3VwcG9ydCBpdC4KIAkJCVdBUk5JTkc6IEZvcmNpbmcgQVNQTSBvbiBtYXkgY2F1c2Ugc3lzdGVtIGxvY2t1cHMuCiAKKwlwY2llX3BtZT0JW1BDSUUsUE1dIE5hdGl2ZSBQQ0llIFBNRSBzaWduYWxpbmcgb3B0aW9uczoKKwkJb2ZmCURvIG5vdCB1c2UgbmF0aXZlIFBDSWUgUE1FIHNpZ25hbGluZy4KKwkJZm9yY2UJVXNlIG5hdGl2ZSBQQ0llIFBNRSBzaWduYWxpbmcgZXZlbiBpZiB0aGUgQklPUyByZWZ1c2VzCisJCQl0byBhbGxvdyB0aGUga2VybmVsIHRvIGNvbnRyb2wgdGhlIHJlbGV2YW50IFBDSWUgY29uZmlnCisJCQlyZWdpc3RlcnMuCisJCW5vbXNpCURvIG5vdCB1c2UgTVNJIGZvciBuYXRpdmUgUENJZSBQTUUgc2lnbmFsaW5nICh0aGlzIG1ha2VzCisJCQlhbGwgUENJZSByb290IHBvcnRzIHVzZSBJTlR4IGZvciBldmVyeXRoaW5nKS4KKwogCXBjbXY9CQlbSFcsUENNQ0lBXSBCYWRnZVBBRCA0CiAKIAlwZC4JCVtQQVJJREVdCkBAIC0yNzAzLDYgKzI3MTgsMTMgQEAKIAkJCQkJbWVkaXVtIGlzIHdyaXRlLXByb3RlY3RlZCkuCiAJCQlFeGFtcGxlOiBxdWlya3M9MDQxOTphYWY1OnJsLDA0MjE6MDQzMzpyYwogCisJdXNlcnB0ZT0KKwkJCVtYODZdIEZsYWdzIGNvbnRyb2xsaW5nIHVzZXIgUFRFIGFsbG9jYXRpb25zLgorCisJCQkJbm9oaWdoID0gZG8gbm90IGFsbG9jYXRlIFBURSBwYWdlcyBpbgorCQkJCQlISUdITUVNIHJlZ2FyZGxlc3Mgb2Ygc2V0dGluZworCQkJCQlvZiBDT05GSUdfSElHSFBURS4KKwogCXZkc289CQlbWDg2LFNIXQogCQkJdmRzbz0yOiBlbmFibGUgY29tcGF0IFZEU08gKGRlZmF1bHQgd2l0aCBDT01QQVRfVkRTTykKIAkJCXZkc289MTogZW5hYmxlIFZEU08gKGRlZmF1bHQpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IDQyMjA4NTEuLjMxMTlmNWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8c3lzL3Vpby5oPgogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNpbmNsdWRlIDxnZXRvcHQuaD4KLSNpbmNsdWRlIDx6bGliLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8c2NoZWQuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNtY2lhL2xvY2tpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvbG9ja2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmNjIyYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2xvY2tpbmcudHh0CkBAIC0wLDAgKzEsMTE4IEBACitUaGlzIGZpbGUgZXhwbGFpbnMgdGhlIGxvY2tpbmcgYW5kIGV4Y2x1c2lvbiBzY2hlbWUgdXNlZCBpbiB0aGUgUENDQVJECithbmQgUENNQ0lBIHN1YnN5c3RlbXMuCisKKworQSkgT3ZlcnZpZXcsIExvY2tpbmcgSGllcmFyY2h5OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwY21jaWFfc29ja2V0X2xpc3RfcndzZW0JLSBwcm90ZWN0cyBvbmx5IHRoZSBsaXN0IG9mIHNvY2tldHMKKy0gc2t0X211dGV4CQkJLSBzZXJpYWxpemVzIGNhcmQgaW5zZXJ0IC8gZWplY3Rpb24KKyAgLSBvcHNfbXV0ZXgJCQktIHNlcmlhbGl6ZXMgc29ja2V0IG9wZXJhdGlvbgorCisKK0IpIEV4Y2x1c2lvbgorPT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBjYWxsYmFja3MgdG8gc3RydWN0IHBjbWNpYV9zb2NrZXQgbXVzdAorYmUgY2FsbGVkIHdpdGggInNrdF9tdXRleCIgaGVsZDoKKworCXNvY2tldF9kZXRlY3RfY2hhbmdlKCkKKwlzZW5kX2V2ZW50KCkKKwlzb2NrZXRfcmVzZXQoKQorCXNvY2tldF9zaHV0ZG93bigpCisJc29ja2V0X3NldHVwKCkKKwlzb2NrZXRfcmVtb3ZlKCkKKwlzb2NrZXRfaW5zZXJ0KCkKKwlzb2NrZXRfZWFybHlfcmVzdW1lKCkKKwlzb2NrZXRfbGF0ZV9yZXN1bWUoKQorCXNvY2tldF9yZXN1bWUoKQorCXNvY2tldF9zdXNwZW5kKCkKKworCXN0cnVjdCBwY21jaWFfY2FsbGJhY2sJKmNhbGxiYWNrCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBjYWxsYmFja3MgdG8gc3RydWN0IHBjbWNpYV9zb2NrZXQgbXVzdAorYmUgY2FsbGVkIHdpdGggIm9wc19tdXRleCIgaGVsZDoKKworCXNvY2tldF9yZXNldCgpCisJc29ja2V0X3NldHVwKCkKKworCXN0cnVjdCBwY2NhcmRfb3BlcmF0aW9ucwkqb3BzCisJc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMJKnJlc291cmNlX29wczsKKworTm90ZSB0aGF0IHNlbmRfZXZlbnQoKSBhbmQgc3RydWN0IHBjbWNpYV9jYWxsYmFjayAqY2FsbGJhY2sgbXVzdCBub3QgYmUKK2NhbGxlZCB3aXRoICJvcHNfbXV0ZXgiIGhlbGQuCisKKworQykgUHJvdGVjdGlvbgorPT09PT09PT09PT09PQorCisxLiBHbG9iYWwgRGF0YToKKy0tLS0tLS0tLS0tLS0tLQorc3RydWN0IGxpc3RfaGVhZAlwY21jaWFfc29ja2V0X2xpc3Q7CisKK3Byb3RlY3RlZCBieSBwY21jaWFfc29ja2V0X2xpc3RfcndzZW07CisKKworMi4gUGVyLVNvY2tldCBEYXRhOgorLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIHJlc291cmNlX29wcyBhbmQgdGhlaXIgZGF0YSBhcmUgcHJvdGVjdGVkIGJ5IG9wc19tdXRleC4KKworVGhlICJtYWluIiBzdHJ1Y3QgcGNtY2lhX3NvY2tldCBpcyBwcm90ZWN0ZWQgYXMgZm9sbG93cyAocmVhZC1vbmx5IGZpZWxkcworb3Igc2luZ2xlLXVzZSBmaWVsZHMgbm90IG1lbnRpb25lZCk6CisKKy0gYnkgcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtOgorCXN0cnVjdCBsaXN0X2hlYWQJc29ja2V0X2xpc3Q7CisKKy0gYnkgdGhyZWFkX2xvY2s6CisJdW5zaWduZWQgaW50CQl0aHJlYWRfZXZlbnRzOworCistIGJ5IHNrdF9tdXRleDoKKwl1X2ludAkJCXN1c3BlbmRlZF9zdGF0ZTsKKwl2b2lkCQkJKCp0dW5lX2JyaWRnZSk7CisJc3RydWN0IHBjbWNpYV9jYWxsYmFjawkqY2FsbGJhY2s7CisJaW50CQkJcmVzdW1lX3N0YXR1czsKKworLSBieSBvcHNfbXV0ZXg6CisJc29ja2V0X3N0YXRlX3QJCXNvY2tldDsKKwl1X2ludAkJCXN0YXRlOworCXVfc2hvcnQJCQlsb2NrX2NvdW50OworCXBjY2FyZF9tZW1fbWFwCQljaXNfbWVtOworCXZvaWQgX19pb21lbSAJCSpjaXNfdmlydDsKKwlzdHJ1Y3QgeyB9CQlpcnE7CisJaW9fd2luZG93X3QJCWlvW107CisJcGNjYXJkX21lbV9tYXAJCXdpbltdOworCXN0cnVjdCBsaXN0X2hlYWQJY2lzX2NhY2hlOworCXNpemVfdAkJCWZha2VfY2lzX2xlbjsKKwl1OAkJCSpmYWtlX2NpczsKKwl1X2ludAkJCWlycV9tYXNrOworCXZvaWQgCQkJKCp6b29tX3ZpZGVvKTsKKwlpbnQgCQkJKCpwb3dlcl9ob29rKTsKKwl1OAkJCXJlc291cmNlLi4uOworCXN0cnVjdCBsaXN0X2hlYWQJZGV2aWNlc19saXN0OworCXU4CQkJZGV2aWNlX2NvdW50OworCXN0cnVjdCAJCQlwY21jaWFfc3RhdGU7CisKKworMy4gUGVyIFBDTUNJQS1kZXZpY2UgRGF0YToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAibWFpbiIgc3RydWN0IHBjbWNpYV9kZXZpZSBpcyBwcm90ZWN0ZWQgYXMgZm9sbG93cyAocmVhZC1vbmx5IGZpZWxkcworb3Igc2luZ2xlLXVzZSBmaWVsZHMgbm90IG1lbnRpb25lZCk6CisKKworLSBieSBwY21jaWFfc29ja2V0LT5vcHNfbXV0ZXg6CisJc3RydWN0IGxpc3RfaGVhZAlzb2NrZXRfZGV2aWNlX2xpc3Q7CisJc3RydWN0IGNvbmZpZ190CQkqZnVuY3Rpb25fY29uZmlnOworCXUxNgkJCV9pcnE6MTsKKwl1MTYJCQlfaW86MTsKKwl1MTYJCQlfd2luOjQ7CisJdTE2CQkJX2xvY2tlZDoxOworCXUxNgkJCWFsbG93X2Z1bmNfaWRfbWF0Y2g6MTsKKwl1MTYJCQlzdXNwZW5kZWQ6MTsKKwl1MTYJCQlfcmVtb3ZlZDoxOworCistIGJ5IHRoZSBQQ01DSUEgZHJpdmVyOgorCWlvX3JlcV90CQlpbzsKKwlpcnFfcmVxX3QJCWlycTsKKwljb25maWdfcmVxX3QJCWNvbmY7CisJd2luZG93X2hhbmRsZV90CQl3aW47CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MTIxLXBzYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MTIxLXBzYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzMmU4NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUxMjEtcHNjLnR4dApAQCAtMCwwICsxLDcwIEBACitNUEM1MTIxIFBTQyBEZXZpY2UgVHJlZSBCaW5kaW5ncworCitQU0MgaW4gVUFSVCBtb2RlCistLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBQU0MgaW4gVUFSVCBtb2RlIHRoZSBuZWVkZWQgUFNDIHNlcmlhbCBkZXZpY2VzCithcmUgc3BlY2lmaWVkIGJ5IGZzbCxtcGM1MTIxLXBzYy11YXJ0IG5vZGVzIGluIHRoZQorZnNsLG1wYzUxMjEtaW1tciBTb0Mgbm9kZS4gQWRkaXRpb25hbGx5IHRoZSBQU0MgRklGTworQ29udHJvbGxlciBub2RlIGZzbCxtcGM1MTIxLXBzYy1maWZvIGlzIHJlcXVlcmVkIHRoZXJlOgorCitmc2wsbXBjNTEyMS1wc2MtdWFydCBub2RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVxdWlyZWQgcHJvcGVydGllcyA6CisgLSBjb21wYXRpYmxlIDogU2hvdWxkIGNvbnRhaW4gImZzbCxtcGM1MTIxLXBzYy11YXJ0IiBhbmQgImZzbCxtcGM1MTIxLXBzYyIKKyAtIGNlbGwtaW5kZXggOiBJbmRleCBvZiB0aGUgUFNDIGluIGhhcmR3YXJlCisgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgUFNDIGRldmljZQorIC0gaW50ZXJydXB0cyA6IDxhIGI+IHdoZXJlIGEgaXMgdGhlIGludGVycnVwdCBudW1iZXIgb2YgdGhlCisgICBQU0MgRklGTyBDb250cm9sbGVyIGFuZCBiIGlzIGEgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuCisgICBlbmNvZGluZyBvZiB0aGUgc2Vuc2UgYW5kIGxldmVsIGluZm9ybWF0aW9uIGZvciB0aGUgaW50ZXJydXB0LgorIC0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAorICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCisKK1JlY29tbWVuZGVkIHByb3BlcnRpZXMgOgorIC0gZnNsLHJ4LWZpZm8tc2l6ZSA6IHRoZSBzaXplIG9mIHRoZSBSWCBmaWZvIHNsaWNlIChhIG11bHRpcGxlIG9mIDQpCisgLSBmc2wsdHgtZmlmby1zaXplIDogdGhlIHNpemUgb2YgdGhlIFRYIGZpZm8gc2xpY2UgKGEgbXVsdGlwbGUgb2YgNCkKKworCitmc2wsbXBjNTEyMS1wc2MtZmlmbyBub2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlcXVpcmVkIHByb3BlcnRpZXMgOgorIC0gY29tcGF0aWJsZSA6IFNob3VsZCBiZSAiZnNsLG1wYzUxMjEtcHNjLWZpZm8iCisgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgUFNDCisgICAgICAgICBGSUZPIENvbnRyb2xsZXIKKyAtIGludGVycnVwdHMgOiA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIG9mIHRoZQorICAgUFNDIEZJRk8gQ29udHJvbGxlciBhbmQgYiBpcyBhIGZpZWxkIHRoYXQgcmVwcmVzZW50cyBhbgorICAgZW5jb2Rpbmcgb2YgdGhlIHNlbnNlIGFuZCBsZXZlbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGludGVycnVwdC4KKyAtIGludGVycnVwdC1wYXJlbnQgOiB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQKKyAgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgorCisKK0V4YW1wbGUgZm9yIGEgYm9hcmQgdXNpbmcgUFNDMCBhbmQgUFNDMSBkZXZpY2VzIGluIHNlcmlhbCBtb2RlOgorCitzZXJpYWxAMTEwMDAgeworCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiLCAiZnNsLG1wYzUxMjEtcHNjIjsKKwljZWxsLWluZGV4ID0gPDA+OworCXJlZyA9IDwweDExMDAwIDB4MTAwPjsKKwlpbnRlcnJ1cHRzID0gPDQwIDB4OD47CisJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwlmc2wscngtZmlmby1zaXplID0gPDE2PjsKKwlmc2wsdHgtZmlmby1zaXplID0gPDE2PjsKK307CisKK3NlcmlhbEAxMTEwMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1wc2MtdWFydCIsICJmc2wsbXBjNTEyMS1wc2MiOworCWNlbGwtaW5kZXggPSA8MT47CisJcmVnID0gPDB4MTExMDAgMHgxMDA+OworCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCWZzbCxyeC1maWZvLXNpemUgPSA8MTY+OworCWZzbCx0eC1maWZvLXNpemUgPSA8MTY+OworfTsKKworcHNjZmlmb0AxMWYwMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1wc2MtZmlmbyI7CisJcmVnID0gPDB4MTFmMDAgMHgxMDA+OworCWludGVycnVwdHMgPSA8NDAgMHg4PjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zcGkudHh0CmluZGV4IGU3ZDlhMzQuLjgwNTEwYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3BpLnR4dApAQCAtMTMsNiArMTMsMTEgQEAKIC0gaW50ZXJydXB0LXBhcmVudCA6IHRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAogICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KIAorT3B0aW9uYWwgcHJvcGVydGllczoKKy0gZ3Bpb3MgOiBzcGVjaWZpZXMgdGhlIGdwaW8gcGlucyB0byBiZSB1c2VkIGZvciBjaGlwc2VsZWN0cy4KKyAgVGhlIGdwaW9zIHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgcmVnID0gPGluZGV4PiBpbiB0aGUgU1BJIGNoaWxkIG5vZGVzLgorICBJZiB1bnNwZWNpZmllZCwgYSBzaW5nbGUgU1BJIGRldmljZSB3aXRob3V0IGEgY2hpcCBzZWxlY3QgY2FuIGJlIHVzZWQuCisKIEV4YW1wbGU6CiAJc3BpQDRjMCB7CiAJCWNlbGwtaW5kZXggPSA8MD47CkBAIC0yMSw0ICsyNiw2IEBACiAJCWludGVycnVwdHMgPSA8ODIgMD47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKIAkJbW9kZSA9ICJjcHUiOworCQlncGlvcyA9IDwmZ3BpbyAxOCAxCS8vIGRldmljZSByZWc9PDA+CisJCQkgJmdwaW8gMTkgMT47CS8vIGRldmljZSByZWc9PDE+CiAJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3B0cmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRhNTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wdHJhY2UudHh0CkBAIC0wLDAgKzEsMTM0IEBACitHREIgaW50ZW5kcyB0byBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgZGVidWcgZmVhdHVyZXMgb2YgQm9va0UKK3Byb2Nlc3NvcnM6CisKKzQgaGFyZHdhcmUgYnJlYWtwb2ludHMgKElBQykKKzIgaGFyZHdhcmUgd2F0Y2hwb2ludHMgKHJlYWQsIHdyaXRlIGFuZCByZWFkLXdyaXRlKSAoREFDKQorMiB2YWx1ZSBjb25kaXRpb25zIGZvciB0aGUgaGFyZHdhcmUgd2F0Y2hwb2ludHMgKERWQykKKworRm9yIHRoYXQsIHdlIG5lZWQgdG8gZXh0ZW5kIHB0cmFjZSBzbyB0aGF0IEdEQiBjYW4gcXVlcnkgYW5kIHNldCB0aGVzZQorcmVzb3VyY2VzLiBTaW5jZSB3ZSdyZSBleHRlbmRpbmcsIHdlJ3JlIHRyeWluZyB0byBjcmVhdGUgYW4gaW50ZXJmYWNlCit0aGF0J3MgZXh0ZW5kYWJsZSBhbmQgdGhhdCBjb3ZlcnMgYm90aCBCb29rRSBhbmQgc2VydmVyIHByb2Nlc3NvcnMsIHNvCit0aGF0IEdEQiBkb2Vzbid0IG5lZWQgdG8gc3BlY2lhbC1jYXNlIGVhY2ggb2YgdGhlbS4gV2UgYWRkZWQgdGhlCitmb2xsb3dpbmcgMyBuZXcgcHRyYWNlIHJlcXVlc3RzLgorCisxLiBQVFJBQ0VfUFBDX0dFVEhXREVCVUdJTkZPCisKK1F1ZXJ5IGZvciBHREIgdG8gZGlzY292ZXIgdGhlIGhhcmR3YXJlIGRlYnVnIGZlYXR1cmVzLiBUaGUgbWFpbiBpbmZvIHRvCitiZSByZXR1cm5lZCBoZXJlIGlzIHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgdGhlIGhhcmR3YXJlIHdhdGNocG9pbnRzLgorQm9va0UgcHJvY2Vzc29ycyBkb24ndCBoYXZlIHJlc3RyaWN0aW9ucyBoZXJlLCBidXQgc2VydmVyIHByb2Nlc3NvcnMgaGF2ZQorYW4gOC1ieXRlIGFsaWdubWVudCByZXN0cmljdGlvbiBmb3IgaGFyZHdhcmUgd2F0Y2hwb2ludHMuIFdlJ2QgbGlrZSB0byBhdm9pZAorYWRkaW5nIHNwZWNpYWwgY2FzZXMgdG8gR0RCIGJhc2VkIG9uIHdoYXQgaXQgc2VlcyBpbiBBVVhWLgorCitTaW5jZSB3ZSdyZSBhdCBpdCwgd2UgYWRkZWQgb3RoZXIgdXNlZnVsIGluZm8gdGhhdCB0aGUga2VybmVsIGNhbiByZXR1cm4gdG8KK0dEQjogdGhpcyBxdWVyeSB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGhhcmR3YXJlIGJyZWFrcG9pbnRzLCBoYXJkd2FyZQord2F0Y2hwb2ludHMgYW5kIHdoZXRoZXIgaXQgc3VwcG9ydHMgYSByYW5nZSBvZiBhZGRyZXNzZXMgYW5kIGEgY29uZGl0aW9uLgorVGhlIHF1ZXJ5IHdpbGwgZmlsbCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGUgcmVxdWVzdGluZyBwcm9jZXNzOgorCitzdHJ1Y3QgcHBjX2RlYnVnX2luZm8geworICAgICAgIHVuaXQzMl90IHZlcnNpb247CisgICAgICAgdW5pdDMyX3QgbnVtX2luc3RydWN0aW9uX2JwczsKKyAgICAgICB1bml0MzJfdCBudW1fZGF0YV9icHM7CisgICAgICAgdW5pdDMyX3QgbnVtX2NvbmRpdGlvbl9yZWdzOworICAgICAgIHVuaXQzMl90IGRhdGFfYnBfYWxpZ25tZW50OworICAgICAgIHVuaXQzMl90IHNpemVvZl9jb25kaXRpb247IC8qIHNpemUgb2YgdGhlIERWQyByZWdpc3RlciAqLworICAgICAgIHVpbnQ2NF90IGZlYXR1cmVzOyAvKiBiaXRtYXNrIG9mIHRoZSBpbmRpdmlkdWFsIGZsYWdzICovCit9OworCitmZWF0dXJlcyB3aWxsIGhhdmUgYml0cyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlcmUgaXMgc3VwcG9ydCBmb3I6CisKKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9SQU5HRQkJMHgxCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfTUFTSwkJMHgyCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfUkFOR0UJCTB4NAorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX01BU0sJCTB4OAorCisyLiBQVFJBQ0VfU0VUSFdERUJVRworCitTZXRzIGEgaGFyZHdhcmUgYnJlYWtwb2ludCBvciB3YXRjaHBvaW50LCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIHN0cnVjdHVyZToKKworc3RydWN0IHBwY19od19icmVha3BvaW50IHsKKyAgICAgICAgdWludDMyX3QgdmVyc2lvbjsKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFICAweDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEICAgICAweDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSAgICAweDQKKyAgICAgICAgdWludDMyX3QgdHJpZ2dlcl90eXBlOyAgICAgICAvKiBvbmx5IHNvbWUgY29tYmluYXRpb25zIGFsbG93ZWQgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVCAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRSAgICAgMHgxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFICAgICAweDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MworICAgICAgICB1aW50MzJfdCBhZGRyX21vZGU7ICAgICAgICAgIC8qIGFkZHJlc3MgbWF0Y2ggbW9kZSAqLworCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFICAgMHgzCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FICAgMHgwCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQgICAgMHgxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9FWEFDVCAgMHgxCS8qIGRpZmZlcmVudCBuYW1lIGZvciB0aGUgc2FtZSB0aGluZyBhcyBhYm92ZSAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fT1IgICAgIDB4MgorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5EX09SIDB4MworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfQUxMIDB4MDBmZjAwMDAJLyogYnl0ZSBlbmFibGUgYml0cyAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkUobikgICgxPDwoKG4pKzE2KSkKKyAgICAgICAgdWludDMyX3QgY29uZGl0aW9uX21vZGU7ICAgICAvKiBicmVhay93YXRjaHBvaW50IGNvbmRpdGlvbiBmbGFncyAqLworCisgICAgICAgIHVpbnQ2NF90IGFkZHI7CisgICAgICAgIHVpbnQ2NF90IGFkZHIyOworICAgICAgICB1aW50NjRfdCBjb25kaXRpb25fdmFsdWU7Cit9OworCitBIHJlcXVlc3Qgc3BlY2lmaWVzIG9uZSBldmVudCwgbm90IG5lY2Vzc2FyaWx5IGp1c3Qgb25lIHJlZ2lzdGVyIHRvIGJlIHNldC4KK0ZvciBpbnN0YW5jZSwgaWYgdGhlIHJlcXVlc3QgaXMgZm9yIGEgd2F0Y2hwb2ludCB3aXRoIGEgY29uZGl0aW9uLCBib3RoIHRoZQorREFDIGFuZCBEVkMgcmVnaXN0ZXJzIHdpbGwgYmUgc2V0IGluIHRoZSBzYW1lIHJlcXVlc3QuCisKK1dpdGggdGhpcyBHREIgY2FuIGFzayBmb3IgYWxsIGtpbmRzIG9mIGhhcmR3YXJlIGJyZWFrcG9pbnRzIGFuZCB3YXRjaHBvaW50cwordGhhdCB0aGUgQm9va0Ugc3VwcG9ydHMuIENPTUVGUk9NIGJyZWFrcG9pbnRzIGF2YWlsYWJsZSBpbiBzZXJ2ZXIgcHJvY2Vzc29ycworYXJlIG5vdCBjb250ZW1wbGF0ZWQsIGJ1dCB0aGF0IGlzIG91dCBvZiB0aGUgc2NvcGUgb2YgdGhpcyB3b3JrLgorCitwdHJhY2Ugd2lsbCByZXR1cm4gYW4gaW50ZWdlciAoaGFuZGxlKSB1bmlxdWVseSBpZGVudGlmeWluZyB0aGUgYnJlYWtwb2ludCBvcgord2F0Y2hwb2ludCBqdXN0IGNyZWF0ZWQuIFRoaXMgaW50ZWdlciB3aWxsIGJlIHVzZWQgaW4gdGhlIFBUUkFDRV9ERUxIV0RFQlVHCityZXF1ZXN0IHRvIGFzayBmb3IgaXRzIHJlbW92YWwuIFJldHVybiAtRU5PU1BDIGlmIHRoZSByZXF1ZXN0ZWQgYnJlYWtwb2ludAorY2FuJ3QgYmUgYWxsb2NhdGVkIG9uIHRoZSByZWdpc3RlcnMuCisKK1NvbWUgZXhhbXBsZXMgb2YgdXNpbmcgdGhlIHN0cnVjdHVyZSB0bzoKKworLSBzZXQgYSBicmVha3BvaW50IGluIHRoZSBmaXJzdCBicmVha3BvaW50IHJlZ2lzdGVyCisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURTsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUOworICBwLmNvbmRpdGlvbl9tb2RlICA9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FOworICBwLmFkZHIgICAgICAgICAgICA9ICh1aW50NjRfdCkgYWRkcmVzczsKKyAgcC5hZGRyMiAgICAgICAgICAgPSAwOworICBwLmNvbmRpdGlvbl92YWx1ZSA9IDA7CisKKy0gc2V0IGEgd2F0Y2hwb2ludCB3aGljaCB0cmlnZ2VycyBvbiByZWFkcyBpbiB0aGUgc2Vjb25kIHdhdGNocG9pbnQgcmVnaXN0ZXIKKworICBwLnZlcnNpb24gICAgICAgICA9IFBQQ19ERUJVR19DVVJSRU5UX1ZFUlNJT047CisgIHAudHJpZ2dlcl90eXBlICAgID0gUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEOworICBwLmFkZHJfbW9kZSAgICAgICA9IFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1Q7CisgIHAuY29uZGl0aW9uX21vZGUgID0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkU7CisgIHAuYWRkciAgICAgICAgICAgID0gKHVpbnQ2NF90KSBhZGRyZXNzOworICBwLmFkZHIyICAgICAgICAgICA9IDA7CisgIHAuY29uZGl0aW9uX3ZhbHVlID0gMDsKKworLSBzZXQgYSB3YXRjaHBvaW50IHdoaWNoIHRyaWdnZXJzIG9ubHkgd2l0aCBhIHNwZWNpZmljIHZhbHVlCisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRDsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUOworICBwLmNvbmRpdGlvbl9tb2RlICA9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQgfCBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfQUxMOworICBwLmFkZHIgICAgICAgICAgICA9ICh1aW50NjRfdCkgYWRkcmVzczsKKyAgcC5hZGRyMiAgICAgICAgICAgPSAwOworICBwLmNvbmRpdGlvbl92YWx1ZSA9ICh1aW50NjRfdCkgY29uZGl0aW9uOworCistIHNldCBhIHJhbmdlZCBoYXJkd2FyZSBicmVha3BvaW50CisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURTsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRTsKKyAgcC5jb25kaXRpb25fbW9kZSAgPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORTsKKyAgcC5hZGRyICAgICAgICAgICAgPSAodWludDY0X3QpIGJlZ2luX3JhbmdlOworICBwLmFkZHIyICAgICAgICAgICA9ICh1aW50NjRfdCkgZW5kX3JhbmdlOworICBwLmNvbmRpdGlvbl92YWx1ZSA9IDA7CisKKzMuIFBUUkFDRV9ERUxIV0RFQlVHCisKK1Rha2VzIGFuIGludGVnZXIgd2hpY2ggaWRlbnRpZmllcyBhbiBleGlzdGluZyBicmVha3BvaW50IG9yIHdhdGNocG9pbnQKKyhpLmUuLCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBQVFJBQ0VfU0VUSFdERUJVRyksIGFuZCBkZWxldGVzIHRoZQorY29ycmVzcG9uZGluZyBicmVha3BvaW50IG9yIHdhdGNocG9pbnQuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPCmluZGV4IDMzOTIwN2QuLmQzNzhjYmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTworKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8KQEAgLTg3LDYgKzg3LDEyIEBACiAgIGNvbXBhdGliaWxpdHksIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGluIGhleGFkZWNpbWFsICgweGFiY2Qgb3IgYWJjZCkuIERldmljZQogICBudW1iZXJzIGdpdmVuIGFzIDB4YWJjZCB3aWxsIGJlIGludGVycHJldGVkIGFzIDAuMC5hYmNkLgogCisqIC9wcm9jL2Npb19zZXR0bGUKKworICBBIHdyaXRlIHJlcXVlc3QgdG8gdGhpcyBmaWxlIGlzIGJsb2NrZWQgdW50aWwgYWxsIHF1ZXVlZCBjaW8gYWN0aW9ucyBhcmUKKyAgaGFuZGxlZC4gVGhpcyB3aWxsIGFsbG93IHVzZXJzcGFjZSB0byB3YWl0IGZvciBwZW5kaW5nIHdvcmsgYWZmZWN0aW5nCisgIGRldmljZSBhdmFpbGFiaWxpdHkgYWZ0ZXIgY2hhbmdpbmcgY2lvX2lnbm9yZSBvciB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKwogKiBGb3Igc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gcHJlc2VudCBpbiB0aGUgL3Byb2MgZmlsZXN5c3RlbSBpbiAyLjQgKG5hbWVseSwKICAgL3Byb2Mvc3ViY2hhbm5lbHMgYW5kIC9wcm9jL2NocGlkcyksIHNlZSBkcml2ZXItbW9kZWwudHh0LgogICBJbmZvcm1hdGlvbiBmb3JtZXJseSBpbiAvcHJvYy9pcnFfY291bnQgaXMgbm93IGluIC9wcm9jL2ludGVycnVwdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CmluZGV4IGJkZTQ3M2QuLmVkMjY1Y2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CkBAIC0yMjMsOCArMjIzLDggQEAKIHByaXZhdGUgZGF0YS4KIAogVG8gaW1wbGVtZW50IGEgY2N3Z3JvdXAgZHJpdmVyLCBwbGVhc2UgcmVmZXIgdG8gaW5jbHVkZS9hc20vY2N3Z3JvdXAuaC4gS2VlcCBpbgotbWluZCB0aGF0IG1vc3QgZHJpdmVycyB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IGJvdGggYSBjY3dncm91cCBhbmQgYSBjY3cgZHJpdmVyCi0odW5sZXNzIHlvdSBoYXZlIGEgbWV0YSBjY3cgZHJpdmVyLCBsaWtlIGN1MzA4OCBmb3IgbGNzIGFuZCBjdGMpLgorbWluZCB0aGF0IG1vc3QgZHJpdmVycyB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IGJvdGggYSBjY3dncm91cCBhbmQgYSBjY3cKK2RyaXZlci4KIAogCiAyLiBDaGFubmVsIHBhdGhzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzCmluZGV4IDE3ZmZhMDYuLjMwMDIzNTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzCkBAIC0xLDMgKzEsMTkgQEAKKzEgUmVsZWFzZSBEYXRlICAgIDogVGh1ci4gIE9jdCAyOSwgMjAwOSAwOToxMjo0NSBQU1QgMjAwOSAtCisJCQkoZW1haWxkLWlkOm1lZ2FyYWlkbGludXhAbHNpLmNvbSkKKwkJCUJvIFlhbmcKKworMiBDdXJyZW50IFZlcnNpb24gOiAwMC4wMC4wNC4xNy4xLXJjMQorMyBPbGRlciBWZXJzaW9uICAgOiAwMC4wMC4wNC4xMgorCisxLglBZGQgdGhlIHBhZF8wIGluIG1maSBmcmFtZSBzdHJ1Y3R1cmUgdG8gMCB0byBmaXggdGhlCisJY29udGV4dCB2YWx1ZSBsYXJnZXIgdGhhbiAzMmJpdCB2YWx1ZSBpc3N1ZS4KKworMi4JQWRkIHRoZSBsb2dpYyBkcml2ZSBsaXN0IHRvIHRoZSBkcml2ZXIuICBEcml2ZXIgd2lsbAorCWtlZXAgdGhlIGxvZ2ljIGRyaXZlIGxpc3QgaW50ZXJuYWwgYWZ0ZXIgZHJpdmVyIGxvYWQuCisKKzMuCWRyaXZlciBmaXhlZCB0aGUgZGV2aWNlIHVwZGF0ZSBpc3N1ZSBhZnRlciBnZXQgdGhlIEFFTgorCVBEIGRlbGV0ZS9BREQsIExEIGFkZC9kZWxldGUgZnJvbSBGVy4KKwogMSBSZWxlYXNlIERhdGUgICAgOiBUdWVzLiAgSnVseSAyOCwgMjAwOSAxMDoxMjo0NSBQU1QgMjAwOSAtCiAJCQkoZW1haWxkLWlkOm1lZ2FyYWlkbGludXhAbHNpLmNvbSkKIAkJCUJvIFlhbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKaW5kZXggODkyMzU5Ny4uMzNkZjgyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQKQEAgLTQ4Miw2ICs0ODIsOSBAQAogCiAgICAgcmVmZXJlbmNlX3JhdGUJLSByZWZlcmVuY2Ugc2FtcGxlIHJhdGUsIDQ0MTAwIG9yIDQ4MDAwIChkZWZhdWx0KQogICAgIG11bHRpcGxlCQktIG11bHRpcGxlIHRvIHJlZi4gc2FtcGxlIHJhdGUsIDEgb3IgMiAoZGVmYXVsdCkKKyAgICBzdWJzeXN0ZW0JCS0gb3ZlcnJpZGUgdGhlIFBDSSBTU0lEIGZvciBwcm9iaW5nOyB0aGUgdmFsdWUKKwkJCSAgY29uc2lzdHMgb2YgU1NWSUQgPDwgMTYgfCBTU0RJRC4gIFRoZSBkZWZhdWx0IGlzCisJCQkgIHplcm8sIHdoaWNoIG1lYW5zIG5vIG92ZXJyaWRlLgogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCiAKQEAgLTExMjMsNiArMTEyNiwyMSBAQAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMsIGF1dG9wcm9iZSBhbmQgSVNBIFBuUC4KIAorICBNb2R1bGUgc25kLWphenoxNgorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIE1lZGlhIFZpc2lvbiBKYXp6MTYgY2hpcHNldC4gVGhlIGNoaXBzZXQgY29uc2lzdHMgb2YgMyBjaGlwczoKKyAgICBNVkQxMjE2ICsgTVZBNDE2ICsgTVZBNTE0LgorCisgICAgcG9ydAktIHBvcnQgIyBmb3IgU0IgRFNQIGNoaXAgKDB4MjEwLDB4MjIwLDB4MjMwLDB4MjQwLDB4MjUwLDB4MjYwKQorICAgIGlycQkJLSBJUlEgIyBmb3IgU0IgRFNQIGNoaXAgKDMsNSw3LDksMTAsMTUpCisgICAgZG1hOAktIERNQSAjIGZvciBTQiBEU1AgY2hpcCAoMSwzKQorICAgIGRtYTE2CS0gRE1BICMgZm9yIFNCIERTUCBjaGlwICg1LDcpCisgICAgbXB1X3BvcnQJLSBNUFUtNDAxIHBvcnQgIyAoMHgzMDAsMHgzMTAsMHgzMjAsMHgzMzApCisgICAgbXB1X2lycQktIE1QVS00MDEgaXJxICMgKDIsMyw1LDcpCisKKyAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4KKwogICBNb2R1bGUgc25kLWtvcmcxMjEyCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTc5MSw2ICsxODA5LDEzIEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgTW9kdWxlIHNuZC11YTEwMQorICAtLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIHRoZSBFZGlyb2wgVUEtMTAxIGF1ZGlvL01JREkgaW50ZXJmYWNlLgorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcywgYXV0b3Byb2JlIGFuZCBob3RwbHVnZ2luZy4KKwogICBNb2R1bGUgc25kLXVzYi1hdWRpbwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xOTIzLDcgKzE5NDgsNyBAQAogICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIHRoZSBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLAotICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgSERBVjEuMyAoRGVsdXhlKSwgRXNzZW5jZSBTVAorICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgRFMsIEhEQVYxLjMgKERlbHV4ZSksIEVzc2VuY2UgU1QKICAgICAoRGVsdXhlKSBhbmQgRXNzZW5jZSBTVFguCiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBhdXRvcHJvYmUgYW5kIG11bHRpcGxlIGNhcmRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAppbmRleCBlNzJjZWU5Li4xZDM4YjBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dApAQCAtMTI0LDYgKzEyNCw4IEBACiAgIGFzdXMtYTdtCUFTVVMgQTdNCiAgIG1hY3BybwlNYWNQcm8gc3VwcG9ydAogICBtYjUJCU1hY2Jvb2sgNSwxCisgIG1hY21pbmkzCU1hY21pbmkgMywxCisgIG1iYTIxCQlNYWNib29rIEFpciAyLDEKICAgbWJwMwkJTWFjYm9vayBQcm8gcmV2MwogICBpbWFjMjQJaU1hYyAyNCcnIHdpdGggamFjayBkZXRlY3Rpb24KICAgaW1hYzkxCWlNYWMgOSwxCkBAIC0yNzksMTMgKzI4MSwxNiBAQAogICBsYXB0b3AJQmFzaWMgTGFwdG9wIGNvbmZpZyAoZGVmYXVsdCkKICAgaHAJCUhQIFNwYXJ0YW4gbGFwdG9wCiAgIGhwLWR2NjczNglIUCBkdjY3MzYKKyAgaHAtZjcwMAlIUCBDb21wYXEgUHJlc2FyaW8gRjcwMAogICBsZW5vdm8teDIwMAlMZW5vdm8gWDIwMCBsYXB0b3AKKyAgdG9zaGliYQlUb3NoaWJhIFNhdGVsbGl0ZSBNMzAwCiAKIENvbmV4YW50IDUwNjYKID09PT09PT09PT09PT0KICAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCiAgIGRlbGwtbGFwdG9wCURlbGwgbGFwdG9wcwogICBvbHBjLXhvLTFfNQlPTFBDIFhPIDEuNQorICBpZGVhcGFkICAgICAgIExlbm92byBJZGVhUGFkIFUxNTAKIAogU1RBQzkyMDAKID09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAppbmRleCA2MzI1YmVjLi5mNGRkM2JmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKQEAgLTQ1Miw2ICs0NTIsMzMgQEAKIHN5c2ZzIGVudHJpZXMsIGFuZCB0aGUgbGluZXMgYWZ0ZXIgYFtoaW50XWAgYXJlIHBhcnNlZCBhcyBgaGludHNgCiBzeXNmcyBlbnRyaWVzLCByZXNwZWN0aXZlbHkuCiAKK0Fub3RoZXIgZXhhbXBsZSB0byBvdmVycmlkZSB0aGUgY29kZWMgdmVuZG9yIGlkIGZyb20gMHgxMjM0NTY3OCB0bworMHhkZWFkYmVlZiBpcyBsaWtlIGJlbG93OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFtjb2RlY10KKyAgMHgxMjM0NTY3OCAweGFiY2QxMjM0IDIKKworICBbdmVuZG9yX2lkXQorICAweGRlYWRiZWVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhlIHNpbWlsYXIgd2F5LCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBjb2RlYyBzdWJzeXN0ZW1faWQgdmlhCitgW3N1YnN5c3RlbV9pZF1gLCB0aGUgcmV2aXNpb24gaWQgdmlhIGBbcmV2aXNpb25faWRdYCBsaW5lLgorQWxzbywgdGhlIGNvZGVjIGNoaXAgbmFtZSBjYW4gYmUgcmV3cml0dGVuIHZpYSBgW2NoaXBfbmFtZV1gIGxpbmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgW2NvZGVjXQorICAweDEyMzQ1Njc4IDB4YWJjZDEyMzQgMgorCisgIFtzdWJzeXN0ZW1faWRdCisgIDB4ZmZmZjExMTEKKworICBbcmV2aXNpb25faWRdCisgIDB4MTAKKworICBbY2hpcF9uYW1lXQorICBNeS1vd24gTkVXUy0wMDAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogVGhlIGhkLWF1ZGlvIGRyaXZlciByZWFkcyB0aGUgZmlsZSB2aWEgcmVxdWVzdF9maXJtd2FyZSgpLiAgVGh1cywKIGEgcGF0Y2ggZmlsZSBoYXMgdG8gYmUgbG9jYXRlZCBvbiB0aGUgYXBwcm9wcmlhdGUgZmlybXdhcmUgcGF0aCwKIHR5cGljYWxseSwgL2xpYi9maXJtd2FyZS4gIEZvciBleGFtcGxlLCB3aGVuIHlvdSBwYXNzIHRoZSBvcHRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CmluZGV4IDZhNWE1NzkuLmYxZjgxYWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dApAQCAtMjM4LDExICsyMzgsMTAgQEAKIAogWW91IG5lZWQgdmVyeSBmZXcgdGhpbmdzIHRvIGdldCB0aGUgc3lzY2FsbHMgdHJhY2luZyBpbiBhbiBhcmNoLgogCistIFN1cHBvcnQgSEFWRV9BUkNIX1RSQUNFSE9PSyAoc2VlIGFyY2gvS2NvbmZpZykuCiAtIEhhdmUgYSBOUl9zeXNjYWxscyB2YXJpYWJsZSBpbiA8YXNtL3VuaXN0ZC5oPiB0aGF0IHByb3ZpZGVzIHRoZSBudW1iZXIKICAgb2Ygc3lzY2FsbHMgc3VwcG9ydGVkIGJ5IHRoZSBhcmNoLgotLSBJbXBsZW1lbnQgYXJjaF9zeXNjYWxsX2FkZHIoKSB0aGF0IHJlc29sdmVzIGEgc3lzY2FsbCBhZGRyZXNzIGZyb20gYQotICBzeXNjYWxsIG51bWJlci4KLS0gU3VwcG9ydCB0aGUgVElGX1NZU0NBTExfVFJBQ0VQT0lOVCB0aHJlYWQgZmxhZ3MKKy0gU3VwcG9ydCB0aGUgVElGX1NZU0NBTExfVFJBQ0VQT0lOVCB0aHJlYWQgZmxhZ3MuCiAtIFB1dCB0aGUgdHJhY2Vfc3lzX2VudGVyKCkgYW5kIHRyYWNlX3N5c19leGl0KCkgdHJhY2Vwb2ludHMgY2FsbHMgZnJvbSBwdHJhY2UKICAgaW4gdGhlIHB0cmFjZSBzeXNjYWxscyB0cmFjaW5nIHBhdGguCiAtIFRhZyB0aGlzIGFyY2ggYXMgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dAppbmRleCA0N2FhYmVlLi5hOTEwMGIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dApAQCAtMjQsNiArMjQsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBwWzpbR1JQL11FVkVOVF0gU1lNQk9MWytvZmZzXXxNRU1BRERSIFtGRVRDSEFSR1NdCTogU2V0IGEgcHJvYmUKICAgcls6W0dSUC9dRVZFTlRdIFNZTUJPTFsrMF0gW0ZFVENIQVJHU10JCTogU2V0IGEgcmV0dXJuIHByb2JlCisgIC06W0dSUC9dRVZFTlQJCQkJCQk6IENsZWFyIGEgcHJvYmUKIAogIEdSUAkJOiBHcm91cCBuYW1lLiBJZiBvbWl0dGVkLCB1c2UgImtwcm9iZXMiIGZvciBpdC4KICBFVkVOVAkJOiBFdmVudCBuYW1lLiBJZiBvbWl0dGVkLCB0aGUgZXZlbnQgbmFtZSBpcyBnZW5lcmF0ZWQKQEAgLTM3LDE1ICszOCwxMiBAQAogICBAU1lNWyt8LW9mZnNdCTogRmV0Y2ggbWVtb3J5IGF0IFNZTSArfC0gb2ZmcyAoU1lNIHNob3VsZCBiZSBhIGRhdGEgc3ltYm9sKQogICAkc3RhY2tOCTogRmV0Y2ggTnRoIGVudHJ5IG9mIHN0YWNrIChOID49IDApCiAgICRzdGFjawk6IEZldGNoIHN0YWNrIGFkZHJlc3MuCi0gICRhcmdOCQk6IEZldGNoIGZ1bmN0aW9uIGFyZ3VtZW50LiAoTiA+PSAwKSgqKQotICAkcmV0dmFsCTogRmV0Y2ggcmV0dXJuIHZhbHVlLigqKikKLSAgK3wtb2ZmcyhGRVRDSEFSRykgOiBGZXRjaCBtZW1vcnkgYXQgRkVUQ0hBUkcgK3wtIG9mZnMgYWRkcmVzcy4oKioqKQorICAkcmV0dmFsCTogRmV0Y2ggcmV0dXJuIHZhbHVlLigqKQorICArfC1vZmZzKEZFVENIQVJHKSA6IEZldGNoIG1lbW9yeSBhdCBGRVRDSEFSRyArfC0gb2ZmcyBhZGRyZXNzLigqKikKICAgTkFNRT1GRVRDSEFSRzogU2V0IE5BTUUgYXMgdGhlIGFyZ3VtZW50IG5hbWUgb2YgRkVUQ0hBUkcuCiAKLSAgKCopIGFOIG1heSBub3QgY29ycmVjdCBvbiBhc21saW5rYWdlZCBmdW5jdGlvbnMgYW5kIGF0IHRoZSBtaWRkbGUgb2YKLSAgICAgIGZ1bmN0aW9uIGJvZHkuCi0gICgqKikgb25seSBmb3IgcmV0dXJuIHByb2JlLgotICAoKioqKSB0aGlzIGlzIHVzZWZ1bCBmb3IgZmV0Y2hpbmcgYSBmaWVsZCBvZiBkYXRhIHN0cnVjdHVyZXMuCisgICgqKSBvbmx5IGZvciByZXR1cm4gcHJvYmUuCisgICgqKikgdGhpcyBpcyB1c2VmdWwgZm9yIGZldGNoaW5nIGEgZmllbGQgb2YgZGF0YSBzdHJ1Y3R1cmVzLgogCiAKIFBlci1Qcm9iZSBFdmVudCBGaWx0ZXJpbmcKQEAgLTgyLDEzICs4MCwxNiBAQAogVG8gYWRkIGEgcHJvYmUgYXMgYSBuZXcgZXZlbnQsIHdyaXRlIGEgbmV3IGRlZmluaXRpb24gdG8ga3Byb2JlX2V2ZW50cwogYXMgYmVsb3cuCiAKLSAgZWNobyBwOm15cHJvYmUgZG9fc3lzX29wZW4gZGZkPSRhcmcwIGZpbGVuYW1lPSRhcmcxIGZsYWdzPSRhcmcyIG1vZGU9JGFyZzMgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2twcm9iZV9ldmVudHMKKyAgZWNobyAncDpteXByb2JlIGRvX3N5c19vcGVuIGRmZD0lYXggZmlsZW5hbWU9JWR4IGZsYWdzPSVjeCBtb2RlPSs0KCRzdGFjayknID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfZXZlbnRzCiAKICBUaGlzIHNldHMgYSBrcHJvYmUgb24gdGhlIHRvcCBvZiBkb19zeXNfb3BlbigpIGZ1bmN0aW9uIHdpdGggcmVjb3JkaW5nCi0xc3QgdG8gNHRoIGFyZ3VtZW50cyBhcyAibXlwcm9iZSIgZXZlbnQuIEFzIHRoaXMgZXhhbXBsZSBzaG93cywgdXNlcnMgY2FuCi1jaG9vc2UgbW9yZSBmYW1pbGlhciBuYW1lcyBmb3IgZWFjaCBhcmd1bWVudHMuCisxc3QgdG8gNHRoIGFyZ3VtZW50cyBhcyAibXlwcm9iZSIgZXZlbnQuIE5vdGUsIHdoaWNoIHJlZ2lzdGVyL3N0YWNrIGVudHJ5IGlzCithc3NpZ25lZCB0byBlYWNoIGZ1bmN0aW9uIGFyZ3VtZW50IGRlcGVuZHMgb24gYXJjaC1zcGVjaWZpYyBBQkkuIElmIHlvdSB1bnN1cmUKK3RoZSBBQkksIHBsZWFzZSB0cnkgdG8gdXNlIHByb2JlIHN1YmNvbW1hbmQgb2YgcGVyZi10b29scyAoeW91IGNhbiBmaW5kIGl0Cit1bmRlciB0b29scy9wZXJmLykuCitBcyB0aGlzIGV4YW1wbGUgc2hvd3MsIHVzZXJzIGNhbiBjaG9vc2UgbW9yZSBmYW1pbGlhciBuYW1lcyBmb3IgZWFjaCBhcmd1bWVudHMuCiAKLSAgZWNobyByOm15cmV0cHJvYmUgZG9fc3lzX29wZW4gJHJldHZhbCA+PiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2twcm9iZV9ldmVudHMKKyAgZWNobyAncjpteXJldHByb2JlIGRvX3N5c19vcGVuICRyZXR2YWwnID4+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cwogCiAgVGhpcyBzZXRzIGEga3JldHByb2JlIG9uIHRoZSByZXR1cm4gcG9pbnQgb2YgZG9fc3lzX29wZW4oKSBmdW5jdGlvbiB3aXRoCiByZWNvcmRpbmcgcmV0dXJuIHZhbHVlIGFzICJteXJldHByb2JlIiBldmVudC4KQEAgLTk3LDIzICs5OCwyNCBAQAogCiAgIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9rcHJvYmVzL215cHJvYmUvZm9ybWF0CiBuYW1lOiBteXByb2JlCi1JRDogNzUKK0lEOiA3ODAKIGZvcm1hdDoKLQlmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsJb2Zmc2V0OjA7CXNpemU6MjsKLQlmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsJb2Zmc2V0OjI7CXNpemU6MTsKLQlmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OwlvZmZzZXQ6MzsJc2l6ZToxOwotCWZpZWxkOmludCBjb21tb25fcGlkOwlvZmZzZXQ6NDsJc2l6ZTo0OwotCWZpZWxkOmludCBjb21tb25fdGdpZDsJb2Zmc2V0Ojg7CXNpemU6NDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7ICAgICAgIG9mZnNldDowOyAgICAgICBzaXplOjI7IHNpZ25lZDowOworICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsgICAgICAgb2Zmc2V0OjI7ICAgICAgIHNpemU6MTsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7ICAgICAgIG9mZnNldDozOyBzaXplOjE7c2lnbmVkOjA7CisgICAgICAgIGZpZWxkOmludCBjb21tb25fcGlkOyAgIG9mZnNldDo0OyAgICAgICBzaXplOjQ7IHNpZ25lZDoxOworICAgICAgICBmaWVsZDppbnQgY29tbW9uX2xvY2tfZGVwdGg7ICAgIG9mZnNldDo4OyAgICAgICBzaXplOjQ7IHNpZ25lZDoxOwogCi0JZmllbGQ6IHVuc2lnbmVkIGxvbmcgaXA7CW9mZnNldDoxNjt0c2l6ZTo4OwotCWZpZWxkOiBpbnQgbmFyZ3M7CW9mZnNldDoyNDt0c2l6ZTo0OwotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGRmZDsJb2Zmc2V0OjMyO3RzaXplOjg7Ci0JZmllbGQ6IHVuc2lnbmVkIGxvbmcgZmlsZW5hbWU7CW9mZnNldDo0MDt0c2l6ZTo4OwotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGZsYWdzOwlvZmZzZXQ6NDg7dHNpemU6ODsKLQlmaWVsZDogdW5zaWduZWQgbG9uZyBtb2RlOwlvZmZzZXQ6NTY7dHNpemU6ODsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBfX3Byb2JlX2lwOyBvZmZzZXQ6MTI7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6aW50IF9fcHJvYmVfbmFyZ3M7ICAgICAgICBvZmZzZXQ6MTY7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MTsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBkZmQ7ICAgICAgICBvZmZzZXQ6MjA7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBmaWxlbmFtZTsgICBvZmZzZXQ6MjQ7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBmbGFnczsgICAgICBvZmZzZXQ6Mjg7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBtb2RlOyAgICAgICBvZmZzZXQ6MzI7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKIAotcHJpbnQgZm10OiAiKCVseCkgZGZkPSVseCBmaWxlbmFtZT0lbHggZmxhZ3M9JWx4IG1vZGU9JWx4IiwgUkVDLT5pcCwgUkVDLT5kZmQsIFJFQy0+ZmlsZW5hbWUsIFJFQy0+ZmxhZ3MsIFJFQy0+bW9kZQogCitwcmludCBmbXQ6ICIoJWx4KSBkZmQ9JWx4IGZpbGVuYW1lPSVseCBmbGFncz0lbHggbW9kZT0lbHgiLCBSRUMtPl9fcHJvYmVfaXAsCitSRUMtPmRmZCwgUkVDLT5maWxlbmFtZSwgUkVDLT5mbGFncywgUkVDLT5tb2RlCiAKICBZb3UgY2FuIHNlZSB0aGF0IHRoZSBldmVudCBoYXMgNCBhcmd1bWVudHMgYXMgaW4gdGhlIGV4cHJlc3Npb25zIHlvdSBzcGVjaWZpZWQuCiAKQEAgLTEyMSw2ICsxMjMsMTIgQEAKIAogIFRoaXMgY2xlYXJzIGFsbCBwcm9iZSBwb2ludHMuCiAKKyBPciwKKworICBlY2hvIC06bXlwcm9iZSA+PiBrcHJvYmVfZXZlbnRzCisKKyBUaGlzIGNsZWFycyBwcm9iZSBwb2ludHMgc2VsZWN0aXZlbHkuCisKICBSaWdodCBhZnRlciBkZWZpbml0aW9uLCBlYWNoIGV2ZW50IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIEZvciB0cmFjaW5nIHRoZXNlCiBldmVudHMsIHlvdSBuZWVkIHRvIGVuYWJsZSBpdC4KIApAQCAtMTQ2LDQgKzE1NCwzIEBACiByZXR1cm5zIGZyb20gU1lNQk9MKGUuZy4gInN5c19vcGVuKzB4MWIvMHgxZCA8LSBkb19zeXNfb3BlbiIgbWVhbnMga2VybmVsCiByZXR1cm5zIGZyb20gZG9fc3lzX29wZW4gdG8gc3lzX29wZW4rMHgxYikuCiAKLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CmluZGV4IDc1MzllOGYuLjE2Y2EwMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKQEAgLTI2LDMgKzI2LDQgQEAKICAyNSAtPiBDb21wcm8gVmlkZW9NYXRlIEU4MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4NTg6ZTgwMF0KICAyNiAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTI5MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODU1MV0KICAyNyAtPiBNeWdpY2EgWDg1NTggUFJPIERNQi1USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0ZjE6ODU3OF0KKyAyOCAtPiBMRUFEVEVLIFdpbkZhc3QgUHhUVjEyMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NmYyMl0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCBmY2UxZTdlLi5iNGE3NjcwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC0xNzQsMyArMTc0LDQgQEAKIDE3MyAtPiBab2xpZCBIeWJyaWQgVFYgVHVuZXIgUENJICAgICAgICAgICAgICAgIFsxMTMxOjIwMDRdCiAxNzQgLT4gQXN1cyBFdXJvcGEgSHlicmlkIE9FTSAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODQ3XQogMTc1IC0+IExlYWR0ZWsgV2luZmFzdCBEVFYxMDAwUyAgICAgICAgICAgICAgICAgWzEwN2Q6NjY1NV0KKzE3NiAtPiBCZWhvbGRlciBCZWhvbGRUViA1MDUgUkRTICAgICAgICAgICAgICAgIFswMDAwOjUwNTFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgppbmRleCBlMGQyOThmLi45YjJlMGRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTgxLDMgKzgxLDQgQEAKIHR1bmVyPTgxIC0gUGFydHNuaWMgKERhZXdvbykgUFRJLTVORjA1CiB0dW5lcj04MiAtIFBoaWxpcHMgQ1UxMjE2TAogdHVuZXI9ODMgLSBOWFAgVERBMTgyNzEKK3R1bmVyPTg0IC0gU29ueSBCVEYtUHhuMDFaCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS50bGcyMzAwIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUudGxnMjMwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTZjY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUudGxnMjMwMApAQCAtMCwwICsxLDQ3IEBACit0bGcyMzAwIHJlbGVhc2Ugbm90ZXMKKz09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSB2NGwyL2R2YiBkZXZpY2UgZHJpdmVyIGZvciB0aGUgdGxnMjMwMCBjaGlwLgorCisKK2N1cnJlbnQgc3RhdHVzCis9PT09PT09PT09PT09PQorCit2aWRlbworCS0gc3VwcG9ydCBtbWFwIGFuZCByZWFkKCkuKG5vIG92ZXJsYXkpCisKK2F1ZGlvCisJLSBUaGUgZHJpdmVyIHdpbGwgcmVnaXN0ZXIgYSBBTFNBIGNhcmQgZm9yIHRoZSBhdWRpbyBpbnB1dC4KKwordmJpCisJLSBXb3JrcyBmb3IgYWxtb3N0IFRWIG5vcm1zLgorCitkdmItdAorCS0gd29ya3MgZm9yIERWQi1UCisKK0ZNCisJLSBXb3JrcyBmb3IgcmFkaW8uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVEVTVEVEIEFQUExJQ0FUSU9OUzoKKworLVZMQzEuMC40IHRlc3QgdGhlIHZpZGVvIGFuZCBkdmIuIFRoZSBHVUkgaXMgZnJpZW5kbHkgdG8gdXNlLgorCistTXBsYXllciB0ZXN0IHRoZSB2aWRlby4KKworLU1wbGF5ZXIgdGVzdCB0aGUgRk0uIFRoZSBtcGxheWVyIHNob3VsZCBiZSBjb21waWxlZCB3aXRoIC0tZW5hYmxlLXJhZGlvIGFuZAorCSAtLWVuYWJsZS1yYWRpby1jYXB0dXJlLgorCVRoZSBjb21tYW5kIHJ1bnMgYXMgdGhpcyhUaGUgYWxzYSBhdWRpbyByZWdpc3RlcnMgdG8gY2FyZCAxKToKKwkjbXBsYXllciByYWRpbzovLzEwMy43L2NhcHR1cmUvIC1yYWRpbyBhZGV2aWNlPWh3PTEsMDphcmF0ZT00ODAwMCBcCisJCS1yYXdhdWRpbyByYXRlPTQ4MDAwOmNoYW5uZWxzPTIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitLTk9XTiBQUk9CTEVNUzoKK2Fib3V0IHByZWVtcGhhc2lzOgorCVlvdSBjYW4gc2V0IHRoZSBwcmVlbXBoYXNpcyBmb3IgcmFkaW8gYnkgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCSN2NGwyLWN0bCAtZCAvZGV2L3JhZGlvMCAtLXNldC1jdHJsPXByZV9lbXBoYXNpc19zZXR0aW5ncz0xCisKKwkicHJlX2VtcGhhc2lzX3NldHRpbmdzPTEiIG1lYW5zIHRoYXQgeW91IHNlbGVjdCB0aGUgNTB1cy4gSWYgeW91IHdhbnQKKwl0byBzZWxlY3QgdGhlIDc1dXMsIHBsZWFzZSB1c2UgInByZV9lbXBoYXNpc19zZXR0aW5ncz0yIgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKaW5kZXggMTgwMGE2Mi4uMTgxYjllNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKQEAgLTQyLDYgKzQyLDcgQEAKIG92NTE5CQkwNDFlOjQwNjcJQ3JlYXRpdmUgTGl2ZSEgQ2FtIFZpZGVvIElNIChWRjAzNTApCiBvdjUxOQkJMDQxZTo0MDY4CUNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDQ3MAogc3BjYTU2MQkJMDQ1ODo3MDA0CUdlbml1cyBWaWRlb0NBTSBFeHByZXNzIFYyCitzbjljMjAyOAkwNDU4OjcwMDUJR2VuaXVzIFNtYXJ0IDMwMCwgdmVyc2lvbiAyCiBzdW5wbHVzCQkwNDU4OjcwMDYJR2VuaXVzIERzYyAxLjMgU21hcnQKIHpjM3h4CQkwNDU4OjcwMDcJR2VuaXVzIFZpZGVvQ2FtIFYyCiB6YzN4eAkJMDQ1ODo3MDBjCUdlbml1cyBWaWRlb0NhbSBWMwpAQCAtMTA5LDYgKzExMCw3IEBACiBzdW5wbHVzCQkwNGE1OjMwMDgJQmVucSBEQyAxNTAwCiBzdW5wbHVzCQkwNGE1OjMwMGEJQmVucSBEQyAzNDEwCiBzcGNhNTAwCQkwNGE1OjMwMGMJQmVucSBEQyAxMDE2CitiZW5xCQkwNGE1OjMwMzUJQmVucSBEQyBFMzAwCiBmaW5lcGl4CQkwNGNiOjAxMDQJRnVqaWZpbG0gRmluZVBpeCA0ODAwCiBmaW5lcGl4CQkwNGNiOjAxMDkJRnVqaWZpbG0gRmluZVBpeCBBMjAyCiBmaW5lcGl4CQkwNGNiOjAxMGIJRnVqaWZpbG0gRmluZVBpeCBBMjAzCkBAIC0xNDIsNiArMTQ0LDcgQEAKIHNwY2E1MDAJCTA0ZmM6NzMzMwlQYWxtUGl4REM4NQogc3VucGx1cwkJMDRmYzpmZmZmCVB1cmUgRGlnaXRhbERha290YQogc3BjYTUwMQkJMDUwNjowMGRmCTNDb20gSG9tZUNvbm5lY3QgTGl0ZQorc3VucGx1cwkJMDUyYjoxNTA3CU1lZ2FwaXhlbCA1IFByZXRlYyBEQy0xMDA3CiBzdW5wbHVzCQkwNTJiOjE1MTMJTWVnYXBpeCBWNAogc3VucGx1cwkJMDUyYjoxODAzCU1lZ2FJbWFnZSBWSQogdHY4NTMyCQkwNTQ1OjgwOGIJVmVvIFN0aW5ncmF5CkBAIC0xNTEsNiArMTU0LDcgQEAKIHN1bnBsdXMJCTA1NDY6MzI3MwlQb2xhcm9pZCBQREMyMDMwCiBvdjUxOQkJMDU0YzowMTU0CVNvbm55IHRveTQKIG92NTE5CQkwNTRjOjAxNTUJU29ubnkgdG95NQorY3BpYTEJCTA1NTM6MDAwMglDUElBIENQaUEgKHZlcnNpb24xKSBiYXNlZCBjYW1lcmFzCiB6YzN4eAkJMDU1ZjpjMDA1CU11c3RlayBXY2FtMzAwQQogc3BjYTUwMAkJMDU1ZjpjMjAwCU11c3RlayBHc21hcnQgMzAwCiBzdW5wbHVzCQkwNTVmOmMyMTEJS293YSBCczg4OGUgTWljcm9jYW1lcmEKQEAgLTE4OCw4ICsxOTIsNyBAQAogc3BjYTUwMAkJMDZiZTowODAwCU9wdGltZWRpYQogc3VucGx1cwkJMDZkNjowMDMxCVRydXN0IDYxMCBMQ0QgUG93ZXJDQG0gWm9vbQogc3BjYTUwNgkJMDZlMTphMTkwCUFEUyBJbnN0YW50IFZDRAotb3Y1MzQJCTA2Zjg6MzAwMglIZXJjdWxlcyBCbG9nIFdlYmNhbQotb3Y1MzQJCTA2Zjg6MzAwMwlIZXJjdWxlcyBEdWFscGl4IEhEIFdlYmxvZworb3Y1MzRfOQkJMDZmODozMDAzCUhlcmN1bGVzIER1YWxwaXggSEQgV2VibG9nCiBzb25peGoJCTA2Zjg6MzAwNAlIZXJjdWxlcyBDbGFzc2ljIFNpbHZlcgogc29uaXhqCQkwNmY4OjMwMDgJSGVyY3VsZXMgRGVsdXhlIE9wdGljYWwgR2xhc3MKIHBhYzczMDIJCTA2Zjg6MzAwOQlIZXJjdWxlcyBDbGFzc2ljIExpbmsKQEAgLTIwNCw2ICsyMDcsNyBAQAogc3VucGx1cwkJMDczMzozMjYxCUNvbmNvcmQgMzA0NSBzcGNhNTM2YQogc3VucGx1cwkJMDczMzozMjgxCUN5YmVycGl4IFM1NTBWCiBzcGNhNTA2CQkwNzM0OjA0M2IJM0RlTW9uIFVTQiBDYXB0dXJlIGFrYQorY3BpYTEJCTA4MTM6MDAwMQlRWDMgY2FtZXJhCiBvdjUxOQkJMDgxMzowMDAyCUR1YWwgTW9kZSBVU0IgQ2FtZXJhIFBsdXMKIHNwY2E1MDAJCTA4NGQ6MDAwMwlELUxpbmsgRFNDLTM1MAogc3BjYTUwMAkJMDhjYTowMTAzCUFpcHRlayBQb2NrZXREVgpAQCAtMjI1LDcgKzIyOSw4IEBACiBzdW5wbHVzCQkwOGNhOjIwNjAJQWlwdGVrIFBvY2tldERWNTMwMAogdHY4NTMyCQkwOTIzOjAxMGYJSUNNNTMyIGNhbXMKIG1hcnMJCTA5M2E6MDUwZglNYXJzLVNlbWkgUGMtQ2FtZXJhCi1tcjk3MzEwYQkwOTNhOjAxMGYJU2FrYXIgRGlnaXRhbCBuby4gNzczNzkKK21yOTczMTBhCTA5M2E6MDEwZQlBbGwga25vd24gQ0lGIGNhbXMgd2l0aCB0aGlzIElECittcjk3MzEwYQkwOTNhOjAxMGYJQWxsIGtub3duIFZHQSBjYW1zIHdpdGggdGhpcyBJRAogcGFjMjA3CQkwOTNhOjI0NjAJUXRlYyBXZWJjYW0gMTAwCiBwYWMyMDcJCTA5M2E6MjQ2MQlIUCBXZWJjYW0KIHBhYzIwNwkJMDkzYToyNDYzCVBoaWxpcHMgU1BDIDIyMCBOQwpAQCAtMzAyLDYgKzMwNyw3IEBACiBzb25peGoJCTBjNDU6NjEzYwlTb25peCBQY2NhbTE2OAogc29uaXhqCQkwYzQ1OjYxNDMJU29uaXggUGNjYW0xNjgKIHNvbml4agkJMGM0NTo2MTQ4CURpZ2l0dXMgREEtNzA4MTEvWlNNQyBVU0IgUEMgQ2FtZXJhIFpTMjExL01pY3JvZGlhCitzb25peGoJCTBjNDU6NjE0YQlGcm9udGVjaCBFLUNjYW0gKEpJTC0yMjI1KQogc245YzIweAkJMGM0NTo2MjQwCVBDIENhbWVyYSAoU045QzIwMSArIE1UOU0wMDEpCiBzbjljMjB4CQkwYzQ1OjYyNDIJUEMgQ2FtZXJhIChTTjlDMjAxICsgTVQ5TTExMSkKIHNuOWMyMHgJCTBjNDU6NjI0OAlQQyBDYW1lcmEgKFNOOUMyMDEgKyBPVjk2NTUpCkBAIC0zMjQsNiArMzMwLDEwIEBACiBzbjljMjB4CQkwYzQ1OjYyYjMJUEMgQ2FtZXJhIChTTjlDMjAyICsgT1Y5NjU1KQogc245YzIweAkJMGM0NTo2MmJiCVBDIENhbWVyYSAoU045QzIwMiArIE9WNzY2MCkKIHNuOWMyMHgJCTBjNDU6NjJiYwlQQyBDYW1lcmEgKFNOOUMyMDIgKyBIVjcxMzFSKQorc245YzIwMjgJMGM0NTo4MDAxCVdpbGQgUGxhbmV0IERpZ2l0YWwgU3B5IENhbWVyYQorc245YzIwMjgJMGM0NTo4MDAzCVNha2FyICMxMTE5OSwgIzY2Mzd4LCAjNjc0ODAga2V5Y2hhaW4gY2Ftcworc245YzIwMjgJMGM0NTo4MDA4CU1pbmktU2hvdHogbXMtMzUwCitzbjljMjAyOAkwYzQ1OjgwMGEJVml2aXRhciBWaXZpY2FtIDMzNTBCCiBzdW5wbHVzCQkwZDY0OjAzMDMJU3VucGx1cyBGYXNoaW9uQ2FtIERYRwogb3Y1MTkJCTBlOTY6YzAwMQlUUlVTVCAzODAgVVNCMiBTUEFDRUNATQogZXRvbXMJCTEwMmM6NjE1MQlRY2FtIFNhbmdoYSBDSUYKQEAgLTM0MSwxMCArMzUxLDExIEBACiB0NjEzCQkxN2ExOjAxMjgJVEFTQ09SUCBKUEVHIFdlYmNhbSwgTkdTIEN5Y2xvcHMKIHZjMDMyeAkJMTdlZjo0ODAyCUxlbm92byBWYzAzMjMrTUkxMzEwX1NPQwogcGFjMjA3CQkyMDAxOmYxMTUJRC1MaW5rIERTQi1DMTIwCi1zcTkwNWMJCTI3NzA6OTA1MAlzcTkwNWMKLXNxOTA1YwkJMjc3MDo5MDVjCUR1YWxDYW1lcmEKLXNxOTA1CQkyNzcwOjkxMjAJQXJndXMgRGlnaXRhbCBDYW1lcmEgREMxNTEyCi1zcTkwNWMJCTI3NzA6OTEzZAlzcTkwNWMKK3NxOTA1YwkJMjc3MDo5MDUwCURpc25leSBwaXggbWljcm8gKENJRikKK3NxOTA1YwkJMjc3MDo5MDUyCURpc25leSBwaXggbWljcm8gMiAoVkdBKQorc3E5MDVjCQkyNzcwOjkwNWMJQWxsIDExIGtub3duIGNhbWVyYXMgd2l0aCB0aGlzIElECitzcTkwNQkJMjc3MDo5MTIwCUFsbCAyNCBrbm93biBjYW1lcmFzIHdpdGggdGhpcyBJRAorc3E5MDVjCQkyNzcwOjkxM2QJQWxsIDQga25vd24gY2FtZXJhcyB3aXRoIHRoaXMgSUQKIHNwY2E1MDAJCTI4OTk6MDEyYwlUb3B0cm8gSW5kdXN0cmlhbAogb3Y1MTkJCTgwMjA6ZWYwNAlvdjUxOQogc3BjYTUwOAkJODA4NjowMTEwCUludGVsIEVhc3kgUEMgQ2FtZXJhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CmluZGV4IDc0ZDY3N2MuLjUxNTU3MDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0CkBAIC01OTksOTkgKzU5OSwxMyBAQAogdmlkZW8gYnVmZmVyIGhlbHBlciBmdW5jdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSB2NGwyIGNvcmUgQVBJIHByb3ZpZGVzIGEgc3RhbmRhcmQgbWV0aG9kIGZvciBkZWFsaW5nIHdpdGggdmlkZW8KLWJ1ZmZlcnMuIFRob3NlIG1ldGhvZHMgYWxsb3cgYSBkcml2ZXIgdG8gaW1wbGVtZW50IHJlYWQoKSwgbW1hcCgpIGFuZAotb3ZlcmxheSgpIG9uIGEgY29uc2lzdGVudCB3YXkuCitUaGUgdjRsMiBjb3JlIEFQSSBwcm92aWRlcyBhIHNldCBvZiBzdGFuZGFyZCBtZXRob2RzIChjYWxsZWQgInZpZGVvYnVmIikKK2ZvciBkZWFsaW5nIHdpdGggdmlkZW8gYnVmZmVycy4gVGhvc2UgbWV0aG9kcyBhbGxvdyBhIGRyaXZlciB0byBpbXBsZW1lbnQKK3JlYWQoKSwgbW1hcCgpIGFuZCBvdmVybGF5KCkgaW4gYSBjb25zaXN0ZW50IHdheS4gIFRoZXJlIGFyZSBjdXJyZW50bHkKK21ldGhvZHMgZm9yIHVzaW5nIHZpZGVvIGJ1ZmZlcnMgb24gZGV2aWNlcyB0aGF0IHN1cHBvcnRzIERNQSB3aXRoCitzY2F0dGVyL2dhdGhlciBtZXRob2QgKHZpZGVvYnVmLWRtYS1zZyksIERNQSB3aXRoIGxpbmVhciBhY2Nlc3MKKyh2aWRlb2J1Zi1kbWEtY29udGlnKSwgYW5kIHZtYWxsb2NlZCBidWZmZXJzLCBtb3N0bHkgdXNlZCBvbiBVU0IgZHJpdmVycworKHZpZGVvYnVmLXZtYWxsb2MpLgogCi1UaGVyZSBhcmUgY3VycmVudGx5IG1ldGhvZHMgZm9yIHVzaW5nIHZpZGVvIGJ1ZmZlcnMgb24gZGV2aWNlcyB0aGF0Ci1zdXBwb3J0cyBETUEgd2l0aCBzY2F0dGVyL2dhdGhlciBtZXRob2QgKHZpZGVvYnVmLWRtYS1zZyksIERNQSB3aXRoCi1saW5lYXIgYWNjZXNzICh2aWRlb2J1Zi1kbWEtY29udGlnKSwgYW5kIHZtYWxsb2NlZCBidWZmZXJzLCBtb3N0bHkKLXVzZWQgb24gVVNCIGRyaXZlcnMgKHZpZGVvYnVmLXZtYWxsb2MpLgotCi1BbnkgZHJpdmVyIHVzaW5nIHZpZGVvYnVmIHNob3VsZCBwcm92aWRlIG9wZXJhdGlvbnMgKGNhbGxiYWNrcykgZm9yCi1mb3VyIGhhbmRsZXJzOgotCi1vcHMtPmJ1Zl9zZXR1cCAgIC0gY2FsY3VsYXRlcyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gYnVmZmVycyBhbmQgYXZvaWQgdGhleQotCQkgICB0byB3YXN0ZSBtb3JlIHRoYW4gc29tZSBtYXhpbXVtIGxpbWl0IG9mIFJBTTsKLW9wcy0+YnVmX3ByZXBhcmUgLSBmaWxscyB0aGUgdmlkZW8gYnVmZmVyIHN0cnVjdHMgYW5kIGNhbGxzCi0JCSAgIHZpZGVvYnVmX2lvbG9jaygpIHRvIGFsbG9jIGFuZCBwcmVwYXJlIG1tYXBlZCBtZW1vcnk7Ci1vcHMtPmJ1Zl9xdWV1ZSAgIC0gYWR2aWNlcyB0aGUgZHJpdmVyIHRoYXQgYW5vdGhlciBidWZmZXIgd2VyZQotCQkgICByZXF1ZXN0ZWQgKGJ5IHJlYWQoKSBvciBieSBRQlVGKTsKLW9wcy0+YnVmX3JlbGVhc2UgLSBmcmVlcyBhbnkgYnVmZmVyIHRoYXQgd2VyZSBhbGxvY2F0ZWQuCi0KLUluIG9yZGVyIHRvIHVzZSBpdCwgdGhlIGRyaXZlciBuZWVkIHRvIGhhdmUgYSBjb2RlIChnZW5lcmFsbHkgY2FsbGVkIGF0Ci1pbnRlcnJ1cHQgY29udGV4dCkgdGhhdCB3aWxsIHByb3Blcmx5IGhhbmRsZSB0aGUgYnVmZmVyIHJlcXVlc3QgbGlzdHMsCi1hbm5vdW5jaW5nIHRoYXQgYSBuZXcgYnVmZmVyIHdlcmUgZmlsbGVkLgotCi1UaGUgaXJxIGhhbmRsaW5nIGNvZGUgc2hvdWxkIGhhbmRsZSB0aGUgdmlkZW9idWYgdGFzayBsaXN0cywgaW4gb3JkZXIKLXRvIGFkdmljZSB2aWRlb2J1ZiB0aGF0IGEgbmV3IGZyYW1lIHdlcmUgZmlsbGVkLCBpbiBvcmRlciB0byBob25vciB0byBhCi1yZXF1ZXN0LiBUaGUgY29kZSBpcyBnZW5lcmFsbHkgbGlrZSB0aGlzIG9uZToKLQlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPmFjdGl2ZSkpCi0JCXJldHVybjsKLQotCWJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgdmJ1ZmZlciwgdmIucXVldWUpOwotCi0JaWYgKCF3YWl0cXVldWVfYWN0aXZlKCZidWYtPnZiLmRvbmUpKQotCQlyZXR1cm47Ci0KLQkvKiBTb21lIGxvZ2ljIHRvIGhhbmRsZSB0aGUgYnVmIG1heSBiZSBuZWVkZWQgaGVyZSAqLwotCi0JbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwotCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7Ci0Jd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKLQotVGhvc2UgYXJlIHRoZSB2aWRlb2J1ZmZlciBmdW5jdGlvbnMgdXNlZCBvbiBkcml2ZXJzLCBpbXBsZW1lbnRlZCBvbgotdmlkZW9idWYtY29yZToKLQotLSBWaWRlb2J1ZiBpbml0IGZ1bmN0aW9ucwotICB2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCkKLSAgICAgIEluaXRpYWxpemVzIHRoZSB2aWRlb2J1ZiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKLSAgICAgIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZpZGVvYnVmIGZ1bmN0aW9uIG9uIGRyaXZlcnMgdGhhdCB1c2VzIERNQQotICAgICAgU2NhdHRlci9HYXRoZXIgYnVmZmVycy4KLQotICB2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQKLSAgICAgIEluaXRpYWxpemVzIHRoZSB2aWRlb2J1ZiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKLSAgICAgIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZpZGVvYnVmIGZ1bmN0aW9uIG9uIGRyaXZlcnMgdGhhdCBuZWVkIERNQQotICAgICAgY29udGlndW91cyBidWZmZXJzLgotCi0gIHZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgpCi0gICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBVU0IgKGFuZCBvdGhlciBkcml2ZXJzKQotICAgICAgdGhhdCBuZWVkIGEgdm1hbGxvY2VkIHR5cGUgb2YgdmlkZW9idWYuCi0KLS0gdmlkZW9idWZfaW9sb2NrKCkKLSAgUHJlcGFyZXMgdGhlIHZpZGVvYnVmIG1lbW9yeSBmb3IgdGhlIHByb3BlciBtZXRob2QgKHJlYWQsIG1tYXAsIG92ZXJsYXkpLgotCi0tIHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koKQotICBDaGVja3MgaWYgYSB2aWRlb2J1ZiBpcyBzdHJlYW1pbmcuCi0KLS0gdmlkZW9idWZfcXVldWVfY2FuY2VsKCkKLSAgU3RvcHMgdmlkZW8gaGFuZGxpbmcuCi0KLS0gdmlkZW9idWZfbW1hcF9mcmVlKCkKLSAgZnJlZXMgbW1hcCBidWZmZXJzLgotCi0tIHZpZGVvYnVmX3N0b3AoKQotICBTdG9wcyB2aWRlbyBoYW5kbGluZywgZW5kcyBtbWFwIGFuZCBmcmVlcyBtbWFwIGFuZCBvdGhlciBidWZmZXJzLgotCi0tIFY0TDIgYXBpIGZ1bmN0aW9ucy4gVGhvc2UgZnVuY3Rpb25zIGNvcnJlc3BvbmQgdG8gVklESU9DX2ZvbyBpb2N0bHM6Ci0gICB2aWRlb2J1Zl9yZXFidWZzKCksIHZpZGVvYnVmX3F1ZXJ5YnVmKCksIHZpZGVvYnVmX3FidWYoKSwKLSAgIHZpZGVvYnVmX2RxYnVmKCksIHZpZGVvYnVmX3N0cmVhbW9uKCksIHZpZGVvYnVmX3N0cmVhbW9mZigpLgotCi0tIFY0TDEgYXBpIGZ1bmN0aW9uIChjb3JyZXNwb25kcyB0byBWSURJT0NNQlVGIGlvY3RsKToKLSAgIHZpZGVvYnVmX2NnbWJ1ZigpCi0gICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggVjRMMQotICAgICAgQVBJLgotCi0tIFNvbWUgaGVscCBmdW5jdGlvbnMgZm9yIHJlYWQoKS9wb2xsKCkgb3BlcmF0aW9uczoKLSAgIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCkKLSAgICAgIEZvciBjb250aW51b3VzIHN0cmVhbSByZWFkKCkKLSAgIHZpZGVvYnVmX3JlYWRfb25lKCkKLSAgICAgIEZvciBzbmFwc2hvdCByZWFkKCkKLSAgIHZpZGVvYnVmX3BvbGxfc3RyZWFtKCkKLSAgICAgIHBvbGxpbmcgaGVscCBmdW5jdGlvbgotCi1UaGUgYmV0dGVyIHdheSB0byB1bmRlcnN0YW5kIGl0IGlzIHRvIHRha2UgYSBsb29rIGF0IHZpdmkgZHJpdmVyLiBPbmUKLW9mIHRoZSBtYWluIHJlYXNvbnMgZm9yIHZpdmkgaXMgdG8gYmUgYSB2aWRlb2J1ZiB1c2FnZSBleGFtcGxlLiB0aGUKLXZpdmlfdGhyZWFkX3RpY2soKSBkb2VzIHRoZSB0YXNrIHRoYXQgdGhlIElSUSBjYWxsYmFjayB3b3VsZCBkbyBvbiBQQ0kKLWRyaXZlcnMgKG9yIHRoZSBpcnEgY2FsbGJhY2sgb24gVVNCKS4KK1BsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cKK3RvIHVzZSB0aGUgdmlkZW9idWYgbGF5ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3ZpZGVvYnVmIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ExZjlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZgpAQCAtMCwwICsxLDM2MCBAQAorQW4gaW50cm9kdWN0aW9uIHRvIHRoZSB2aWRlb2J1ZiBsYXllcgorSm9uYXRoYW4gQ29yYmV0IDxjb3JiZXRAbHduLm5ldD4KK0N1cnJlbnQgYXMgb2YgMi42LjMzCisKK1RoZSB2aWRlb2J1ZiBsYXllciBmdW5jdGlvbnMgYXMgYSBzb3J0IG9mIGdsdWUgbGF5ZXIgYmV0d2VlbiBhIFY0TDIgZHJpdmVyCithbmQgdXNlciBzcGFjZS4gIEl0IGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgYnVmZmVycyBmb3IKK3RoZSBzdG9yYWdlIG9mIHZpZGVvIGZyYW1lcy4gIFRoZXJlIGlzIGEgc2V0IG9mIGZ1bmN0aW9ucyB3aGljaCBjYW4gYmUgdXNlZAordG8gaW1wbGVtZW50IG1hbnkgb2YgdGhlIHN0YW5kYXJkIFBPU0lYIEkvTyBzeXN0ZW0gY2FsbHMsIGluY2x1ZGluZyByZWFkKCksCitwb2xsKCksIGFuZCwgaGFwcGlseSwgbW1hcCgpLiAgQW5vdGhlciBzZXQgb2YgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvCitpbXBsZW1lbnQgdGhlIGJ1bGsgb2YgdGhlIFY0TDIgaW9jdGwoKSBjYWxscyByZWxhdGVkIHRvIHN0cmVhbWluZyBJL08sCitpbmNsdWRpbmcgYnVmZmVyIGFsbG9jYXRpb24sIHF1ZXVlaW5nIGFuZCBkZXF1ZXVlaW5nLCBhbmQgc3RyZWFtaW5nCitjb250cm9sLiAgVXNpbmcgdmlkZW9idWYgaW1wb3NlcyBhIGZldyBkZXNpZ24gZGVjaXNpb25zIG9uIHRoZSBkcml2ZXIKK2F1dGhvciwgYnV0IHRoZSBwYXliYWNrIGNvbWVzIGluIHRoZSBmb3JtIG9mIHJlZHVjZWQgY29kZSBpbiB0aGUgZHJpdmVyIGFuZAorYSBjb25zaXN0ZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBWNEwyIHVzZXItc3BhY2UgQVBJLgorCitCdWZmZXIgdHlwZXMKKworTm90IGFsbCB2aWRlbyBkZXZpY2VzIHVzZSB0aGUgc2FtZSBraW5kIG9mIGJ1ZmZlcnMuICBJbiBmYWN0LCB0aGVyZSBhcmUgKGF0CitsZWFzdCkgdGhyZWUgY29tbW9uIHZhcmlhdGlvbnM6CisKKyAtIEJ1ZmZlcnMgd2hpY2ggYXJlIHNjYXR0ZXJlZCBpbiBib3RoIHRoZSBwaHlzaWNhbCBhbmQgKGtlcm5lbCkgdmlydHVhbAorICAgYWRkcmVzcyBzcGFjZXMuICAoQWxtb3N0KSBhbGwgdXNlci1zcGFjZSBidWZmZXJzIGFyZSBsaWtlIHRoaXMsIGJ1dCBpdAorICAgbWFrZXMgZ3JlYXQgc2Vuc2UgdG8gYWxsb2NhdGUga2VybmVsLXNwYWNlIGJ1ZmZlcnMgdGhpcyB3YXkgYXMgd2VsbCB3aGVuCisgICBpdCBpcyBwb3NzaWJsZS4gIFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGU7IHdvcmtpbmcgd2l0aAorICAgdGhpcyBraW5kIG9mIGJ1ZmZlciBub3JtYWxseSByZXF1aXJlcyBoYXJkd2FyZSB3aGljaCBjYW4gZG8KKyAgIHNjYXR0ZXIvZ2F0aGVyIERNQSBvcGVyYXRpb25zLgorCisgLSBCdWZmZXJzIHdoaWNoIGFyZSBwaHlzaWNhbGx5IHNjYXR0ZXJlZCwgYnV0IHdoaWNoIGFyZSB2aXJ0dWFsbHkKKyAgIGNvbnRpZ3VvdXM7IGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggdm1hbGxvYygpLCBpbiBvdGhlciB3b3Jkcy4gIFRoZXNlCisgICBidWZmZXJzIGFyZSBqdXN0IGFzIGhhcmQgdG8gdXNlIGZvciBETUEgb3BlcmF0aW9ucywgYnV0IHRoZXkgY2FuIGJlCisgICB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSBETUEgaXMgbm90IGF2YWlsYWJsZSBidXQgdmlydHVhbGx5LWNvbnRpZ3VvdXMKKyAgIGJ1ZmZlcnMgYXJlIGNvbnZlbmllbnQuCisKKyAtIEJ1ZmZlcnMgd2hpY2ggYXJlIHBoeXNpY2FsbHkgY29udGlndW91cy4gIEFsbG9jYXRpb24gb2YgdGhpcyBraW5kIG9mCisgICBidWZmZXIgY2FuIGJlIHVucmVsaWFibGUgb24gZnJhZ21lbnRlZCBzeXN0ZW1zLCBidXQgc2ltcGxlciBETUEKKyAgIGNvbnRyb2xsZXJzIGNhbm5vdCBkZWFsIHdpdGggYW55dGhpbmcgZWxzZS4KKworVmlkZW9idWYgY2FuIHdvcmsgd2l0aCBhbGwgdGhyZWUgdHlwZXMgb2YgYnVmZmVycywgYnV0IHRoZSBkcml2ZXIgYXV0aG9yCittdXN0IHBpY2sgb25lIGF0IHRoZSBvdXRzZXQgYW5kIGRlc2lnbiB0aGUgZHJpdmVyIGFyb3VuZCB0aGF0IGRlY2lzaW9uLgorCitbSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGVyZSdzIGEgZm91cnRoIGtpbmQgb2YgYnVmZmVyOiAib3ZlcmxheSIgYnVmZmVycword2hpY2ggYXJlIGxvY2F0ZWQgd2l0aGluIHRoZSBzeXN0ZW0ncyB2aWRlbyBtZW1vcnkuICBUaGUgb3ZlcmxheQorZnVuY3Rpb25hbGl0eSBpcyBjb25zaWRlcmVkIHRvIGJlIGRlcHJlY2F0ZWQgZm9yIG1vc3QgdXNlLCBidXQgaXQgc3RpbGwKK3Nob3dzIHVwIG9jY2FzaW9uYWxseSBpbiBzeXN0ZW0tb24tY2hpcCBkcml2ZXJzIHdoZXJlIHRoZSBwZXJmb3JtYW5jZQorYmVuZWZpdHMgbWVyaXQgdGhlIHVzZSBvZiB0aGlzIHRlY2huaXF1ZS4gIE92ZXJsYXkgYnVmZmVycyBjYW4gYmUgaGFuZGxlZAorYXMgYSBmb3JtIG9mIHNjYXR0ZXJlZCBidWZmZXIsIGJ1dCB0aGVyZSBhcmUgdmVyeSBmZXcgaW1wbGVtZW50YXRpb25zIGluCit0aGUga2VybmVsIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoaXMgdGVjaG5pcXVlIGlzIGN1cnJlbnRseSBiZXlvbmQgdGhlCitzY29wZSBvZiB0aGlzIGRvY3VtZW50Ll0KKworRGF0YSBzdHJ1Y3R1cmVzLCBjYWxsYmFja3MsIGFuZCBpbml0aWFsaXphdGlvbgorCitEZXBlbmRpbmcgb24gd2hpY2ggdHlwZSBvZiBidWZmZXJzIGFyZSBiZWluZyB1c2VkLCB0aGUgZHJpdmVyIHNob3VsZAoraW5jbHVkZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWxlczoKKworICAgIDxtZWRpYS92aWRlb2J1Zi1kbWEtc2cuaD4JCS8qIFBoeXNpY2FsbHkgc2NhdHRlcmVkICovCisgICAgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4JCS8qIHZtYWxsb2MoKSBidWZmZXJzCSovCisgICAgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4JLyogUGh5c2ljYWxseSBjb250aWd1b3VzICovCisKK1RoZSBkcml2ZXIncyBkYXRhIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgVjRMMiBkZXZpY2Ugc2hvdWxkIGluY2x1ZGUgYQorc3RydWN0IHZpZGVvYnVmX3F1ZXVlIGluc3RhbmNlIGZvciB0aGUgbWFuYWdlbWVudCBvZiB0aGUgYnVmZmVyIHF1ZXVlLAorYWxvbmcgd2l0aCBhIGxpc3RfaGVhZCBmb3IgdGhlIHF1ZXVlIG9mIGF2YWlsYWJsZSBidWZmZXJzLiAgVGhlcmUgd2lsbCBhbHNvCituZWVkIHRvIGJlIGFuIGludGVycnVwdC1zYWZlIHNwaW5sb2NrIHdoaWNoIGlzIHVzZWQgdG8gcHJvdGVjdCAoYXQgbGVhc3QpCit0aGUgcXVldWUuCisKK1RoZSBuZXh0IHN0ZXAgaXMgdG8gd3JpdGUgZm91ciBzaW1wbGUgY2FsbGJhY2tzIHRvIGhlbHAgdmlkZW9idWYgZGVhbCB3aXRoCit0aGUgbWFuYWdlbWVudCBvZiBidWZmZXJzOgorCisgICAgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB7CisJaW50ICgqYnVmX3NldHVwKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgdW5zaWduZWQgaW50ICpjb3VudCwgdW5zaWduZWQgaW50ICpzaXplKTsKKwlpbnQgKCpidWZfcHJlcGFyZSkoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpOworCXZvaWQgKCpidWZfcXVldWUpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpOworCXZvaWQgKCpidWZfcmVsZWFzZSkoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKTsKKyAgICB9OworCitidWZfc2V0dXAoKSBpcyBjYWxsZWQgZWFybHkgaW4gdGhlIEkvTyBwcm9jZXNzLCB3aGVuIHN0cmVhbWluZyBpcyBiZWluZworaW5pdGlhdGVkOyBpdHMgcHVycG9zZSBpcyB0byB0ZWxsIHZpZGVvYnVmIGFib3V0IHRoZSBJL08gc3RyZWFtLiAgVGhlIGNvdW50CitwYXJhbWV0ZXIgd2lsbCBiZSBhIHN1Z2dlc3RlZCBudW1iZXIgb2YgYnVmZmVycyB0byB1c2U7IHRoZSBkcml2ZXIgc2hvdWxkCitjaGVjayBpdCBmb3IgcmF0aW9uYWxpdHkgYW5kIGFkanVzdCBpdCBpZiBuZWVkIGJlLiAgQXMgYSBwcmFjdGljYWwgcnVsZSwgYQorbWluaW11bSBvZiB0d28gYnVmZmVycyBhcmUgbmVlZGVkIGZvciBwcm9wZXIgc3RyZWFtaW5nLCBhbmQgdGhlcmUgaXMKK3VzdWFsbHkgYSBtYXhpbXVtICh3aGljaCBjYW5ub3QgZXhjZWVkIDMyKSB3aGljaCBtYWtlcyBzZW5zZSBmb3IgZWFjaAorZGV2aWNlLiAgVGhlIHNpemUgcGFyYW1ldGVyIHNob3VsZCBiZSBzZXQgdG8gdGhlIGV4cGVjdGVkIChtYXhpbXVtKSBzaXplCitmb3IgZWFjaCBmcmFtZSBvZiBkYXRhLgorCitFYWNoIGJ1ZmZlciAoaW4gdGhlIGZvcm0gb2YgYSBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyIHBvaW50ZXIpIHdpbGwgYmUKK3Bhc3NlZCB0byBidWZfcHJlcGFyZSgpLCB3aGljaCBzaG91bGQgc2V0IHRoZSBidWZmZXIncyBzaXplLCB3aWR0aCwgaGVpZ2h0LAorYW5kIGZpZWxkIGZpZWxkcyBwcm9wZXJseS4gIElmIHRoZSBidWZmZXIncyBzdGF0ZSBmaWVsZCBpcworVklERU9CVUZfTkVFRFNfSU5JVCwgdGhlIGRyaXZlciBzaG91bGQgcGFzcyBpdCB0bzoKKworICAgIGludCB2aWRlb2J1Zl9pb2xvY2soc3RydWN0IHZpZGVvYnVmX3F1ZXVlKiBxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYnVmKTsKKworQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNhbGwgd2lsbCB1c3VhbGx5IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlci4KK0ZpbmFsbHksIHRoZSBidWZfcHJlcGFyZSgpIGZ1bmN0aW9uIHNob3VsZCBzZXQgdGhlIGJ1ZmZlcidzIHN0YXRlIHRvCitWSURFT0JVRl9QUkVQQVJFRC4KKworV2hlbiBhIGJ1ZmZlciBpcyBxdWV1ZWQgZm9yIEkvTywgaXQgaXMgcGFzc2VkIHRvIGJ1Zl9xdWV1ZSgpLCB3aGljaCBzaG91bGQKK3B1dCBpdCBvbnRvIHRoZSBkcml2ZXIncyBsaXN0IG9mIGF2YWlsYWJsZSBidWZmZXJzIGFuZCBzZXQgaXRzIHN0YXRlIHRvCitWSURFT0JVRl9RVUVVRUQuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcXVldWUgc3BpbmxvY2sKK2hlbGQ7IGlmIGl0IHRyaWVzIHRvIGFjcXVpcmUgaXQgYXMgd2VsbCB0aGluZ3Mgd2lsbCBjb21lIHRvIGEgc2NyZWVjaGluZworaGFsdC4gIFllcywgdGhpcyBpcyB0aGUgdm9pY2Ugb2YgZXhwZXJpZW5jZS4gIE5vdGUgYWxzbyB0aGF0IHZpZGVvYnVmIG1heQord2FpdCBvbiB0aGUgZmlyc3QgYnVmZmVyIGluIHRoZSBxdWV1ZTsgcGxhY2luZyBvdGhlciBidWZmZXJzIGluIGZyb250IG9mIGl0Citjb3VsZCBhZ2FpbiBndW0gdXAgdGhlIHdvcmtzLiAgU28gdXNlIGxpc3RfYWRkX3RhaWwoKSB0byBlbnF1ZXVlIGJ1ZmZlcnMuCisKK0ZpbmFsbHksIGJ1Zl9yZWxlYXNlKCkgaXMgY2FsbGVkIHdoZW4gYSBidWZmZXIgaXMgbm8gbG9uZ2VyIGludGVuZGVkIHRvIGJlCit1c2VkLiAgVGhlIGRyaXZlciBzaG91bGQgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gSS9PIGFjdGl2ZSBvbiB0aGUgYnVmZmVyLAordGhlbiBwYXNzIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlIHJvdXRpbmUocyk6CisKKyAgICAvKiBTY2F0dGVyL2dhdGhlciBkcml2ZXJzICovCisgICAgaW50IHZpZGVvYnVmX2RtYV91bm1hcChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworICAgIGludCB2aWRlb2J1Zl9kbWFfZnJlZShzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworCisgICAgLyogdm1hbGxvYyBkcml2ZXJzICovCisgICAgdm9pZCB2aWRlb2J1Zl92bWFsbG9jX2ZyZWUgKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKKyAgICAvKiBDb250aWd1b3VzIGRyaXZlcnMgKi8KKyAgICB2b2lkIHZpZGVvYnVmX2RtYV9jb250aWdfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOworCitPbmUgd2F5IHRvIGVuc3VyZSB0aGF0IGEgYnVmZmVyIGlzIG5vIGxvbmdlciB1bmRlciBJL08gaXMgdG8gcGFzcyBpdCB0bzoKKworICAgIGludCB2aWRlb2J1Zl93YWl0b24oc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGludCBub25fYmxvY2tpbmcsIGludCBpbnRyKTsKKworSGVyZSwgdmIgaXMgdGhlIGJ1ZmZlciwgbm9uX2Jsb2NraW5nIGluZGljYXRlcyB3aGV0aGVyIG5vbi1ibG9ja2luZyBJL08KK3Nob3VsZCBiZSB1c2VkIChpdCBzaG91bGQgYmUgemVybyBpbiB0aGUgYnVmX3JlbGVhc2UoKSBjYXNlKSwgYW5kIGludHIKK2NvbnRyb2xzIHdoZXRoZXIgYW4gaW50ZXJydXB0aWJsZSB3YWl0IGlzIHVzZWQuCisKK0ZpbGUgb3BlcmF0aW9ucworCitBdCB0aGlzIHBvaW50LCBtdWNoIG9mIHRoZSB3b3JrIGlzIGRvbmU7IG11Y2ggb2YgdGhlIHJlc3QgaXMgc2xpcHBpbmcKK3ZpZGVvYnVmIGNhbGxzIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvdGhlciBkcml2ZXIgY2FsbGJhY2tzLiAgVGhlCitmaXJzdCBzdGVwIGlzIGluIHRoZSBvcGVuKCkgZnVuY3Rpb24sIHdoaWNoIG11c3QgaW5pdGlhbGl6ZSB0aGUKK3ZpZGVvYnVmIHF1ZXVlLiAgVGhlIGZ1bmN0aW9uIHRvIHVzZSBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIGJ1ZmZlciB1c2VkOgorCisgICAgdm9pZCB2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzICpvcHMsCisJCQkJc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXNwaW5sb2NrX3QgKmlycWxvY2ssCisJCQkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCisJCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkLAorCQkJCXVuc2lnbmVkIGludCBtc2l6ZSwKKwkJCQl2b2lkICpwcml2KTsKKworICAgIHZvaWQgdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzICpvcHMsCisJCQkJc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXNwaW5sb2NrX3QgKmlycWxvY2ssCisJCQkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCisJCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkLAorCQkJCXVuc2lnbmVkIGludCBtc2l6ZSwKKwkJCQl2b2lkICpwcml2KTsKKworICAgIHZvaWQgdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyAqb3BzLAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHNwaW5sb2NrX3QgKmlycWxvY2ssCisJCQkJICAgICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkJCSAgICAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBtc2l6ZSwKKwkJCQkgICAgICAgdm9pZCAqcHJpdik7CisKK0luIGVhY2ggY2FzZSwgdGhlIHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lOiBxIGlzIHRoZSBxdWV1ZSBzdHJ1Y3R1cmUgZm9yIHRoZQorZGV2aWNlLCBvcHMgaXMgdGhlIHNldCBvZiBjYWxsYmFja3MgYXMgZGVzY3JpYmVkIGFib3ZlLCBkZXYgaXMgdGhlIGRldmljZQorc3RydWN0dXJlIGZvciB0aGlzIHZpZGVvIGRldmljZSwgaXJxbG9jayBpcyBhbiBpbnRlcnJ1cHQtc2FmZSBzcGlubG9jayB0bworcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIGRhdGEgc3RydWN0dXJlcywgdHlwZSBpcyB0aGUgYnVmZmVyIHR5cGUgdXNlZCBieSB0aGUKK2RldmljZSAoY2FtZXJhcyB3aWxsIHVzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIGZvciBleGFtcGxlKSwgZmllbGQKK2Rlc2NyaWJlcyB3aGljaCBmaWVsZCBpcyBiZWluZyBjYXB0dXJlZCAob2Z0ZW4gVjRMMl9GSUVMRF9OT05FIGZvcgorcHJvZ3Jlc3NpdmUgZGV2aWNlcyksIG1zaXplIGlzIHRoZSBzaXplIG9mIGFueSBjb250YWluaW5nIHN0cnVjdHVyZSB1c2VkCithcm91bmQgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciwgYW5kIHByaXYgaXMgYSBwcml2YXRlIGRhdGEgcG9pbnRlciB3aGljaAorc2hvd3MgdXAgaW4gdGhlIHByaXZfZGF0YSBmaWVsZCBvZiBzdHJ1Y3QgdmlkZW9idWZfcXVldWUuICBOb3RlIHRoYXQgdGhlc2UKK2FyZSB2b2lkIGZ1bmN0aW9ucyB3aGljaCwgZXZpZGVudGx5LCBhcmUgaW1tdW5lIHRvIGZhaWx1cmUuCisKK1Y0TDIgY2FwdHVyZSBkcml2ZXJzIGNhbiBiZSB3cml0dGVuIHRvIHN1cHBvcnQgZWl0aGVyIG9mIHR3byBBUElzOiB0aGUKK3JlYWQoKSBzeXN0ZW0gY2FsbCBhbmQgdGhlIHJhdGhlciBtb3JlIGNvbXBsaWNhdGVkIHN0cmVhbWluZyBtZWNoYW5pc20uICBBcworYSBnZW5lcmFsIHJ1bGUsIGl0IGlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IGJvdGggdG8gZW5zdXJlIHRoYXQgYWxsCithcHBsaWNhdGlvbnMgaGF2ZSBhIGNoYW5jZSBvZiB3b3JraW5nIHdpdGggdGhlIGRldmljZS4gIFZpZGVvYnVmIG1ha2VzIGl0CitlYXN5IHRvIGRvIHRoYXQgd2l0aCB0aGUgc2FtZSBjb2RlLiAgVG8gaW1wbGVtZW50IHJlYWQoKSwgdGhlIGRyaXZlciBuZWVkCitvbmx5IG1ha2UgYSBjYWxsIHRvIG9uZSBvZjoKKworICAgIHNzaXplX3QgdmlkZW9idWZfcmVhZF9vbmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgICAgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwKKwkJCSAgICAgIGxvZmZfdCAqcHBvcywgaW50IG5vbmJsb2NraW5nKTsKKworICAgIHNzaXplX3QgdmlkZW9idWZfcmVhZF9zdHJlYW0oc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LAorCQkJCSBsb2ZmX3QgKnBwb3MsIGludCB2YmloYWNrLCBpbnQgbm9uYmxvY2tpbmcpOworCitFaXRoZXIgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHJlYWQgZnJhbWUgZGF0YSBpbnRvIGRhdGEsIHJldHVybmluZyB0aGUKK2Ftb3VudCBhY3R1YWxseSByZWFkOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IHZpZGVvYnVmX3JlYWRfb25lKCkgd2lsbCBvbmx5CityZWFkIGEgc2luZ2xlIGZyYW1lLCB3aGlsZSB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgpIHdpbGwgcmVhZCBtdWx0aXBsZSBmcmFtZXMKK2lmIHRoZXkgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZSBjb3VudCByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAgQQordHlwaWNhbCBkcml2ZXIgcmVhZCgpIGltcGxlbWVudGF0aW9uIHdpbGwgc3RhcnQgdGhlIGNhcHR1cmUgZW5naW5lLCBjYWxsCitvbmUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucywgdGhlbiBzdG9wIHRoZSBlbmdpbmUgYmVmb3JlIHJldHVybmluZyAodGhvdWdoIGEKK3NtYXJ0ZXIgaW1wbGVtZW50YXRpb24gbWlnaHQgbGVhdmUgdGhlIGVuZ2luZSBydW5uaW5nIGZvciBhIGxpdHRsZSB3aGlsZSBpbgorYW50aWNpcGF0aW9uIG9mIGFub3RoZXIgcmVhZCgpIGNhbGwgaGFwcGVuaW5nIGluIHRoZSBuZWFyIGZ1dHVyZSkuCisKK1RoZSBwb2xsKCkgZnVuY3Rpb24gY2FuIHVzdWFsbHkgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIGRpcmVjdCBjYWxsIHRvOgorCisgICAgdW5zaWduZWQgaW50IHZpZGVvYnVmX3BvbGxfc3RyZWFtKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgICAgICBwb2xsX3RhYmxlICp3YWl0KTsKKworTm90ZSB0aGF0IHRoZSBhY3R1YWwgd2FpdCBxdWV1ZSBldmVudHVhbGx5IHVzZWQgd2lsbCBiZSB0aGUgb25lIGFzc29jaWF0ZWQKK3dpdGggdGhlIGZpcnN0IGF2YWlsYWJsZSBidWZmZXIuCisKK1doZW4gc3RyZWFtaW5nIEkvTyBpcyBkb25lIHRvIGtlcm5lbC1zcGFjZSBidWZmZXJzLCB0aGUgZHJpdmVyIG11c3Qgc3VwcG9ydAordGhlIG1tYXAoKSBzeXN0ZW0gY2FsbCB0byBlbmFibGUgdXNlciBzcGFjZSB0byBhY2Nlc3MgdGhlIGRhdGEuICBJbiBtYW55CitWNEwyIGRyaXZlcnMsIHRoZSBvZnRlbi1jb21wbGV4IG1tYXAoKSBpbXBsZW1lbnRhdGlvbiBzaW1wbGlmaWVzIHRvIGEKK3NpbmdsZSBjYWxsIHRvOgorCisgICAgaW50IHZpZGVvYnVmX21tYXBfbWFwcGVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCitFdmVyeXRoaW5nIGVsc2UgaXMgaGFuZGxlZCBieSB0aGUgdmlkZW9idWYgY29kZS4KKworVGhlIHJlbGVhc2UoKSBmdW5jdGlvbiByZXF1aXJlcyB0d28gc2VwYXJhdGUgdmlkZW9idWYgY2FsbHM6CisKKyAgICB2b2lkIHZpZGVvYnVmX3N0b3Aoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKTsKKyAgICBpbnQgdmlkZW9idWZfbW1hcF9mcmVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CisKK1RoZSBjYWxsIHRvIHZpZGVvYnVmX3N0b3AoKSB0ZXJtaW5hdGVzIGFueSBJL08gaW4gcHJvZ3Jlc3MgLSB0aG91Z2ggaXQgaXMKK3N0aWxsIHVwIHRvIHRoZSBkcml2ZXIgdG8gc3RvcCB0aGUgY2FwdHVyZSBlbmdpbmUuICBUaGUgY2FsbCB0bwordmlkZW9idWZfbW1hcF9mcmVlKCkgd2lsbCBlbnN1cmUgdGhhdCBhbGwgYnVmZmVycyBoYXZlIGJlZW4gdW5tYXBwZWQ7IGlmCitzbywgdGhleSB3aWxsIGFsbCBiZSBwYXNzZWQgdG8gdGhlIGJ1Zl9yZWxlYXNlKCkgY2FsbGJhY2suICBJZiBidWZmZXJzCityZW1haW4gbWFwcGVkLCB2aWRlb2J1Zl9tbWFwX2ZyZWUoKSByZXR1cm5zIGFuIGVycm9yIGNvZGUgaW5zdGVhZC4gIFRoZQorcHVycG9zZSBpcyBjbGVhcmx5IHRvIGNhdXNlIHRoZSBjbG9zaW5nIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gZmFpbCBpZgorYnVmZmVycyBhcmUgc3RpbGwgbWFwcGVkLCBidXQgZXZlcnkgZHJpdmVyIGluIHRoZSAyLjYuMzIga2VybmVsIGNoZWVyZnVsbHkKK2lnbm9yZXMgaXRzIHJldHVybiB2YWx1ZS4KKworaW9jdGwoKSBvcGVyYXRpb25zCisKK1RoZSBWNEwyIEFQSSBpbmNsdWRlcyBhIHZlcnkgbG9uZyBsaXN0IG9mIGRyaXZlciBjYWxsYmFja3MgdG8gcmVzcG9uZCB0bwordGhlIG1hbnkgaW9jdGwoKSBjb21tYW5kcyBtYWRlIGF2YWlsYWJsZSB0byB1c2VyIHNwYWNlLiAgQSBudW1iZXIgb2YgdGhlc2UKKy0gdGhvc2UgYXNzb2NpYXRlZCB3aXRoIHN0cmVhbWluZyBJL08gLSB0dXJuIGFsbW9zdCBkaXJlY3RseSBpbnRvIHZpZGVvYnVmCitjYWxscy4gIFRoZSByZWxldmFudCBoZWxwZXIgZnVuY3Rpb25zIGFyZToKKworICAgIGludCB2aWRlb2J1Zl9yZXFidWZzKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxKTsKKyAgICBpbnQgdmlkZW9idWZfcXVlcnlidWYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpOworICAgIGludCB2aWRlb2J1Zl9xYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfYnVmZmVyICpiKTsKKyAgICBpbnQgdmlkZW9idWZfZHFidWYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIsCisJCSAgICAgICBpbnQgbm9uYmxvY2tpbmcpOworICAgIGludCB2aWRlb2J1Zl9zdHJlYW1vbihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOworICAgIGludCB2aWRlb2J1Zl9zdHJlYW1vZmYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKTsKKyAgICBpbnQgdmlkZW9idWZfY2dtYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvX21idWYgKm1idWYsCisJCQlpbnQgY291bnQpOworCitTbywgZm9yIGV4YW1wbGUsIGEgVklESU9DX1JFUUJVRlMgY2FsbCB0dXJucyBpbnRvIGEgY2FsbCB0byB0aGUgZHJpdmVyJ3MKK3ZpZGlvY19yZXFidWZzKCkgY2FsbGJhY2sgd2hpY2gsIGluIHR1cm4sIHVzdWFsbHkgb25seSBuZWVkcyB0byBsb2NhdGUgdGhlCitwcm9wZXIgc3RydWN0IHZpZGVvYnVmX3F1ZXVlIHBvaW50ZXIgYW5kIHBhc3MgaXQgdG8gdmlkZW9idWZfcmVxYnVmcygpLgorVGhlc2Ugc3VwcG9ydCBmdW5jdGlvbnMgY2FuIHJlcGxhY2UgYSBncmVhdCBkZWFsIG9mIGJ1ZmZlciBtYW5hZ2VtZW50Citib2lsZXJwbGF0ZSBpbiBhIGxvdCBvZiBWNEwyIGRyaXZlcnMuCisKK1RoZSB2aWRpb2Nfc3RyZWFtb24oKSBhbmQgdmlkaW9jX3N0cmVhbW9mZigpIGZ1bmN0aW9ucyB3aWxsIGJlIGEgYml0IG1vcmUKK2NvbXBsZXgsIG9mIGNvdXJzZSwgc2luY2UgdGhleSB3aWxsIGFsc28gbmVlZCB0byBkZWFsIHdpdGggc3RhcnRpbmcgYW5kCitzdG9wcGluZyB0aGUgY2FwdHVyZSBlbmdpbmUuICB2aWRlb2J1Zl9jZ21idWYoKSwgY2FsbGVkIGZyb20gdGhlIGRyaXZlcidzCit2aWRpb2NnbWJ1ZigpIGZ1bmN0aW9uLCBvbmx5IGV4aXN0cyBpZiB0aGUgVjRMMSBjb21wYXRpYmlsaXR5IG1vZHVsZSBoYXMKK2JlZW4gc2VsZWN0ZWQgd2l0aCBDT05GSUdfVklERU9fVjRMMV9DT01QQVQsIHNvIGl0cyB1c2UgbXVzdCBiZSBzdXJyb3VuZGVkCit3aXRoICNpZmRlZiBkaXJlY3RpdmVzLgorCitCdWZmZXIgYWxsb2NhdGlvbgorCitUaHVzIGZhciwgd2UgaGF2ZSB0YWxrZWQgYWJvdXQgYnVmZmVycywgYnV0IGhhdmUgbm90IGxvb2tlZCBhdCBob3cgdGhleSBhcmUKK2FsbG9jYXRlZC4gIFRoZSBzY2F0dGVyL2dhdGhlciBjYXNlIGlzIHRoZSBtb3N0IGNvbXBsZXggb24gdGhpcyBmcm9udC4gIEZvcgorYWxsb2NhdGlvbiwgdGhlIGRyaXZlciBjYW4gbGVhdmUgYnVmZmVyIGFsbG9jYXRpb24gZW50aXJlbHkgdXAgdG8gdGhlCit2aWRlb2J1ZiBsYXllcjsgaW4gdGhpcyBjYXNlLCBidWZmZXJzIHdpbGwgYmUgYWxsb2NhdGVkIGFzIGFub255bW91cwordXNlci1zcGFjZSBwYWdlcyBhbmQgd2lsbCBiZSB2ZXJ5IHNjYXR0ZXJlZCBpbmRlZWQuICBJZiB0aGUgYXBwbGljYXRpb24gaXMKK3VzaW5nIHVzZXItc3BhY2UgYnVmZmVycywgbm8gYWxsb2NhdGlvbiBpcyBuZWVkZWQ7IHRoZSB2aWRlb2J1ZiBsYXllciB3aWxsCit0YWtlIGNhcmUgb2YgY2FsbGluZyBnZXRfdXNlcl9wYWdlcygpIGFuZCBmaWxsaW5nIGluIHRoZSBzY2F0dGVybGlzdCBhcnJheS4KKworSWYgdGhlIGRyaXZlciBuZWVkcyB0byBkbyBpdHMgb3duIG1lbW9yeSBhbGxvY2F0aW9uLCBpdCBzaG91bGQgYmUgZG9uZSBpbgordGhlIHZpZGlvY19yZXFidWZzKCkgZnVuY3Rpb24sICphZnRlciogY2FsbGluZyB2aWRlb2J1Zl9yZXFidWZzKCkuICBUaGUKK2ZpcnN0IHN0ZXAgaXMgYSBjYWxsIHRvOgorCisgICAgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqdmlkZW9idWZfdG9fZG1hKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKK1RoZSByZXR1cm5lZCB2aWRlb2J1Zl9kbWFidWYgc3RydWN0dXJlIChkZWZpbmVkIGluCis8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+KSBpbmNsdWRlcyBhIGNvdXBsZSBvZiByZWxldmFudCBmaWVsZHM6CisKKyAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgICpzZ2xpc3Q7CisgICAgaW50ICAgICAgICAgICAgICAgICBzZ2xlbjsKKworVGhlIGRyaXZlciBtdXN0IGFsbG9jYXRlIGFuIGFwcHJvcHJpYXRlbHktc2l6ZWQgc2NhdHRlcmxpc3QgYXJyYXkgYW5kCitwb3B1bGF0ZSBpdCB3aXRoIHBvaW50ZXJzIHRvIHRoZSBwaWVjZXMgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXI7IHNnbGVuCitzaG91bGQgYmUgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LgorCitEcml2ZXJzIHVzaW5nIHRoZSB2bWFsbG9jKCkgbWV0aG9kIG5lZWQgbm90IChhbmQgY2Fubm90KSBjb25jZXJuIHRoZW1zZWx2ZXMKK3dpdGggYnVmZmVyIGFsbG9jYXRpb24gYXQgYWxsOyB2aWRlb2J1ZiB3aWxsIGhhbmRsZSB0aG9zZSBkZXRhaWxzLiAgVGhlCitzYW1lIGlzIG5vcm1hbGx5IHRydWUgb2YgY29udGlndW91cy1ETUEgZHJpdmVycyBhcyB3ZWxsOyB2aWRlb2J1ZiB3aWxsCithbGxvY2F0ZSB0aGUgYnVmZmVycyAod2l0aCBkbWFfYWxsb2NfY29oZXJlbnQoKSkgd2hlbiBpdCBzZWVzIGZpdC4gIFRoYXQKK21lYW5zIHRoYXQgdGhlc2UgZHJpdmVycyBtYXkgYmUgdHJ5aW5nIHRvIGRvIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYXQgYW55Cit0aW1lLCBhbiBvcGVyYXRpb24gd2hpY2ggaXMgbm90IGFsd2F5cyBndWFyYW50ZWVkIHRvIHdvcmsuICBTb21lIGRyaXZlcnMKK3BsYXkgdHJpY2tzIGJ5IGFsbG9jYXRpbmcgRE1BIHNwYWNlIGF0IHN5c3RlbSBib290IHRpbWU7IHZpZGVvYnVmIGRvZXMgbm90CitjdXJyZW50bHkgcGxheSB3ZWxsIHdpdGggdGhvc2UgZHJpdmVycy4KKworQXMgb2YgMi42LjMxLCBjb250aWd1b3VzLURNQSBkcml2ZXJzIGNhbiB3b3JrIHdpdGggYSB1c2VyLXN1cHBsaWVkIGJ1ZmZlciwKK2FzIGxvbmcgYXMgdGhhdCBidWZmZXIgaXMgcGh5c2ljYWxseSBjb250aWd1b3VzLiAgTm9ybWFsIHVzZXItc3BhY2UKK2FsbG9jYXRpb25zIHdpbGwgbm90IG1lZXQgdGhhdCBjcml0ZXJpb24sIGJ1dCBidWZmZXJzIG9idGFpbmVkIGZyb20gb3RoZXIKK2tlcm5lbCBkcml2ZXJzLCBvciB0aG9zZSBjb250YWluZWQgd2l0aGluIGh1Z2UgcGFnZXMsIHdpbGwgd29yayB3aXRoIHRoZXNlCitkcml2ZXJzLgorCitGaWxsaW5nIHRoZSBidWZmZXJzCisKK1RoZSBmaW5hbCBwYXJ0IG9mIGEgdmlkZW9idWYgaW1wbGVtZW50YXRpb24gaGFzIG5vIGRpcmVjdCBjYWxsYmFjayAtIGl0J3MKK3RoZSBwb3J0aW9uIG9mIHRoZSBjb2RlIHdoaWNoIGFjdHVhbGx5IHB1dHMgZnJhbWUgZGF0YSBpbnRvIHRoZSBidWZmZXJzLAordXN1YWxseSBpbiByZXNwb25zZSB0byBpbnRlcnJ1cHRzIGZyb20gdGhlIGRldmljZS4gIEZvciBhbGwgdHlwZXMgb2YKK2RyaXZlcnMsIHRoaXMgcHJvY2VzcyB3b3JrcyBhcHByb3hpbWF0ZWx5IGFzIGZvbGxvd3M6CisKKyAtIE9idGFpbiB0aGUgbmV4dCBhdmFpbGFibGUgYnVmZmVyIGFuZCBtYWtlIHN1cmUgdGhhdCBzb21lYm9keSBpcyBhY3R1YWxseQorICAgd2FpdGluZyBmb3IgaXQuCisKKyAtIEdldCBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBhbmQgcHV0IHZpZGVvIGRhdGEgdGhlcmUuCisKKyAtIE1hcmsgdGhlIGJ1ZmZlciBhcyBkb25lIGFuZCB3YWtlIHVwIHRoZSBwcm9jZXNzIHdhaXRpbmcgZm9yIGl0LgorCitTdGVwICgxKSBhYm92ZSBpcyBkb25lIGJ5IGxvb2tpbmcgYXQgdGhlIGRyaXZlci1tYW5hZ2VkIGxpc3RfaGVhZCBzdHJ1Y3R1cmUKKy0gdGhlIG9uZSB3aGljaCBpcyBmaWxsZWQgaW4gdGhlIGJ1Zl9xdWV1ZSgpIGNhbGxiYWNrLiAgQmVjYXVzZSBzdGFydGluZwordGhlIGVuZ2luZSBhbmQgZW5xdWV1ZWluZyBidWZmZXJzIGFyZSBkb25lIGluIHNlcGFyYXRlIHN0ZXBzLCBpdCdzIHBvc3NpYmxlCitmb3IgdGhlIGVuZ2luZSB0byBiZSBydW5uaW5nIHdpdGhvdXQgYW55IGJ1ZmZlcnMgYXZhaWxhYmxlIC0gaW4gdGhlCit2bWFsbG9jKCkgY2FzZSBlc3BlY2lhbGx5LiAgU28gdGhlIGRyaXZlciBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoZSBsaXN0Cit0byBiZSBlbXB0eS4gIEl0IGlzIGVxdWFsbHkgcG9zc2libGUgdGhhdCBub2JvZHkgaXMgeWV0IGludGVyZXN0ZWQgaW4gdGhlCitidWZmZXI7IHRoZSBkcml2ZXIgc2hvdWxkIG5vdCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvciBmaWxsIGl0IHVudGlsIGEKK3Byb2Nlc3MgaXMgd2FpdGluZyBvbiBpdC4gIFRoYXQgdGVzdCBjYW4gYmUgZG9uZSBieSBleGFtaW5pbmcgdGhlIGJ1ZmZlcidzCitkb25lIGZpZWxkIChhIHdhaXRfcXVldWVfaGVhZF90IHN0cnVjdHVyZSkgd2l0aCB3YWl0cXVldWVfYWN0aXZlKCkuCisKK0EgYnVmZmVyJ3Mgc3RhdGUgc2hvdWxkIGJlIHNldCB0byBWSURFT0JVRl9BQ1RJVkUgYmVmb3JlIGJlaW5nIG1hcHBlZCBmb3IKK0RNQTsgdGhhdCBlbnN1cmVzIHRoYXQgdGhlIHZpZGVvYnVmIGxheWVyIHdpbGwgbm90IHRyeSB0byBkbyBhbnl0aGluZyB3aXRoCitpdCB3aGlsZSB0aGUgZGV2aWNlIGlzIHRyYW5zZmVycmluZyBkYXRhLgorCitGb3Igc2NhdHRlci9nYXRoZXIgZHJpdmVycywgdGhlIG5lZWRlZCBtZW1vcnkgcG9pbnRlcnMgd2lsbCBiZSBmb3VuZCBpbiB0aGUKK3NjYXR0ZXJsaXN0IHN0cnVjdHVyZSBkZXNjcmliZWQgYWJvdmUuICBEcml2ZXJzIHVzaW5nIHRoZSB2bWFsbG9jKCkgbWV0aG9kCitjYW4gZ2V0IGEgbWVtb3J5IHBvaW50ZXIgd2l0aDoKKworICAgIHZvaWQgKnZpZGVvYnVmX3RvX3ZtYWxsb2Moc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKTsKKworRm9yIGNvbnRpZ3VvdXMgRE1BIGRyaXZlcnMsIHRoZSBmdW5jdGlvbiB0byB1c2UgaXM6CisKKyAgICBkbWFfYWRkcl90IHZpZGVvYnVmX3RvX2RtYV9jb250aWcoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKTsKKworVGhlIGNvbnRpZ3VvdXMgRE1BIEFQSSBnb2VzIG91dCBvZiBpdHMgd2F5IHRvIGhpZGUgdGhlIGtlcm5lbC1zcGFjZSBhZGRyZXNzCitvZiB0aGUgRE1BIGJ1ZmZlciBmcm9tIGRyaXZlcnMuCisKK1RoZSBmaW5hbCBzdGVwIGlzIHRvIHNldCB0aGUgc2l6ZSBmaWVsZCBvZiB0aGUgcmVsZXZhbnQgdmlkZW9idWZfYnVmZmVyCitzdHJ1Y3R1cmUgdG8gdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBjYXB0dXJlZCBpbWFnZSwgc2V0IHN0YXRlIHRvCitWSURFT0JVRl9ET05FLCB0aGVuIGNhbGwgd2FrZV91cCgpIG9uIHRoZSBkb25lIHF1ZXVlLiAgQXQgdGhpcyBwb2ludCwgdGhlCitidWZmZXIgaXMgb3duZWQgYnkgdGhlIHZpZGVvYnVmIGxheWVyIGFuZCB0aGUgZHJpdmVyIHNob3VsZCBub3QgdG91Y2ggaXQKK2FnYWluLgorCitEZXZlbG9wZXJzIHdobyBhcmUgaW50ZXJlc3RlZCBpbiBtb3JlIGluZm9ybWF0aW9uIGNhbiBnbyBpbnRvIHRoZSByZWxldmFudAoraGVhZGVyIGZpbGVzOyB0aGVyZSBhcmUgYSBmZXcgbG93LWxldmVsIGZ1bmN0aW9ucyBkZWNsYXJlZCB0aGVyZSB3aGljaCBoYXZlCitub3QgYmVlbiB0YWxrZWQgYWJvdXQgaGVyZS4gIEFsc28gd29ydGh3aGlsZSBpcyB0aGUgdml2aSBkcml2ZXIKKyhkcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyksIHdoaWNoIGlzIG1haW50YWluZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgVjRMMgorZHJpdmVycyBzaG91bGQgYmUgd3JpdHRlbi4gIFZpdmkgb25seSB1c2VzIHRoZSB2bWFsbG9jKCkgQVBJLCBidXQgaXQncyBnb29kCitlbm91Z2ggdG8gZ2V0IHN0YXJ0ZWQgd2l0aC4gIE5vdGUgYWxzbyB0aGF0IGFsbCBvZiB0aGVzZSBjYWxscyBhcmUgZXhwb3J0ZWQKK0dQTC1vbmx5LCBzbyB0aGV5IHdpbGwgbm90IGJlIGF2YWlsYWJsZSB0byBub24tR1BMIGtlcm5lbCBtb2R1bGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAppbmRleCAyOWE2ZmY4Li43ZmJiYWY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApAQCAtMTY2LDE5ICsxNjYsMTMgQEAKIAogICBudW1hPW5vYWNwaSAgIERvbid0IHBhcnNlIHRoZSBTUkFUIHRhYmxlIGZvciBOVU1BIHNldHVwCiAKLSAgbnVtYT1mYWtlPUNNRExJTkUKLQkJSWYgYSBudW1iZXIsIGZha2VzIENNRExJTkUgbm9kZXMgYW5kIGlnbm9yZXMgTlVNQSBzZXR1cCBvZiB0aGUKLQkJYWN0dWFsIG1hY2hpbmUuICBPdGhlcndpc2UsIHN5c3RlbSBtZW1vcnkgaXMgY29uZmlndXJlZAotCQlkZXBlbmRpbmcgb24gdGhlIHNpemVzIGFuZCBjb2VmZmljaWVudHMgbGlzdGVkLiAgRm9yIGV4YW1wbGU6Ci0JCQludW1hPWZha2U9Mio1MTIsMTAyNCw0KjI1NiwqMTI4Ci0JCWdpdmVzIHR3byA1MTJNIG5vZGVzLCBhIDEwMjRNIG5vZGUsIGZvdXIgMjU2TSBub2RlcywgYW5kIHRoZQotCQlyZXN0IHNwbGl0IGludG8gMTI4TSBjaHVua3MuICBJZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgQ01ETElORQotCQlpcyBhICosIHRoZSByZW1haW5pbmcgbWVtb3J5IGlzIGRpdmlkZWQgdXAgZXF1YWxseSBhbW9uZyBpdHMKLQkJY29lZmZpY2llbnQ6Ci0JCQludW1hPWZha2U9Mio1MTIsMioKLQkJZ2l2ZXMgdHdvIDUxMk0gbm9kZXMgYW5kIHRoZSByZXN0IHNwbGl0IGludG8gdHdvIG5vZGVzLgotCQlPdGhlcndpc2UsIHRoZSByZW1haW5pbmcgc3lzdGVtIFJBTSBpcyBhbGxvY2F0ZWQgdG8gYW4KLQkJYWRkaXRpb25hbCBub2RlLgorICBudW1hPWZha2U9PHNpemU+W01HXQorCQlJZiBnaXZlbiBhcyBhIG1lbW9yeSB1bml0LCBmaWxscyBhbGwgc3lzdGVtIFJBTSB3aXRoIG5vZGVzIG9mCisJCXNpemUgaW50ZXJsZWF2ZWQgb3ZlciBwaHlzaWNhbCBub2Rlcy4KKworICBudW1hPWZha2U9PE4+CisJCUlmIGdpdmVuIGFzIGFuIGludGVnZXIsIGZpbGxzIGFsbCBzeXN0ZW0gUkFNIHdpdGggTiBmYWtlIG5vZGVzCisJCWludGVybGVhdmVkIG92ZXIgcGh5c2ljYWwgbm9kZXMuCiAKIEFDUEkKIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAyNTMzZmM0Li5mNTIwZGQwIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjIxLDYgKzIyMSw3IEBACiAKIEFDRVIgQVNQSVJFIE9ORSBURU1QRVJBVFVSRSBBTkQgRkFOIERSSVZFUgogTToJUGV0ZXIgRmV1ZXJlciA8cGV0ZXJAcGlpZS5uZXQ+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3BpaWUubmV0Lz9zZWN0aW9uPWFjZXJoZGYKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYwpAQCAtMjI4LDYgKzIyOSw3IEBACiBBQ0VSIFdNSSBMQVBUT1AgRVhUUkFTCiBNOglDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgogTDoJYWNlcmFjcGlAZ29vZ2xlZ3JvdXBzLmNvbSAoc3Vic2NyaWJlcnMtb25seSkKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYWNlcmFjcGkKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKQEAgLTI4OCw3ICsyOTAsNyBAQAogCiBBQ1BJIFdNSSBEUklWRVIKIE06CUNhcmxvcyBDb3JiYWNobyA8Y2FybG9zQHN0cmFuZ2V3b3JsZHMuY28udWs+Ci1MOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZworTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvd21pLmMKQEAgLTk2OCw2ICs5NzAsNyBAQAogTToJQ29yZW50aW4gQ2hhcnkgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KIE06CUthcm9sIEtvemltb3IgPHN6aXdhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBMOglhY3BpNGFzdXMtdXNlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKQEAgLTk4MSw2ICs5ODQsNyBAQAogQVNVUyBMQVBUT1AgRVhUUkFTIERSSVZFUgogTToJQ29yZW50aW4gQ2hhcnkgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KIEw6CWFjcGk0YXN1cy11c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9hY3BpNGFzdXMuc2YubmV0CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC0xNDczLDYgKzE0NzcsNyBAQAogQ01QQyBBQ1BJIERSSVZFUgogTToJVGhhZGV1IExpbWEgZGUgU291emEgQ2FzY2FyZG8gPGNhc2NhcmRvQGhvbG9zY29waW8uY29tPgogTToJRGFuaWVsIE9saXZlaXJhIE5hc2NpbWVudG8gPGRvbkBzeXN0LmNvbS5icj4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwogCkBAIC0xNTE2LDYgKzE1MjEsNyBAQAogCiBDT01QQUwgTEFQVE9QIFNVUFBPUlQKIE06CUNlemFyeSBKYWNraWV3aWN6IDxjZXphcnkuamFja2lld2ljekBnbWFpbC5jb20+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCiAKQEAgLTE3NDYsNiArMTc1Miw3IEBACiAKIERFTEwgTEFQVE9QIERSSVZFUgogTToJTWF0dGhldyBHYXJyZXR0IDxtamc1OUBzcmNmLnVjYW0ub3JnPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKIApAQCAtMjAyOCw2ICsyMDM1LDcgQEAKIEVFRVBDIExBUFRPUCBFWFRSQVMgRFJJVkVSCiBNOglDb3JlbnRpbiBDaGFyeSA8Y29yZW50aW5jakBpa3NhaWYubmV0PgogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2FjcGk0YXN1cy5zZi5uZXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC0yMTQxLDYgKzIxNDksMTcgQEAKIEY6CURvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uLwogRjoJbGliL2ZhdWx0LWluamVjdC5jCiAKK0ZDT0UgU1VCU1lTVEVNIChsaWJmYywgbGliZmNvZSwgZmNvZSkKK006CVJvYmVydCBMb3ZlIDxyb2JlcnQudy5sb3ZlQGludGVsLmNvbT4KK0w6CWRldmVsQG9wZW4tZmNvZS5vcmcKK1c6CXd3dy5PcGVuLUZDb0Uub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvc2NzaS9saWJmYy8KK0Y6CWRyaXZlcnMvc2NzaS9mY29lLworRjoJaW5jbHVkZS9zY3NpL2ZjLworRjoJaW5jbHVkZS9zY3NpL2xpYmZjLmgKK0Y6CWluY2x1ZGUvc2NzaS9saWJmY29lLmgKKwogRklMRSBMT0NLSU5HIChmbG9jaygpIGFuZCBmY250bCgpL2xvY2tmKCkpCiBNOglNYXR0aGV3IFdpbGNveCA8bWF0dGhld0B3aWwuY3g+CiBMOglsaW51eC1mc2RldmVsQHZnZXIua2VybmVsLm9yZwpAQCAtMjI5NSw3ICsyMzE0LDcgQEAKIAogRlVKSVRTVSBMQVBUT1AgRVhUUkFTCiBNOglKb25hdGhhbiBXb2l0aGUgPGp3b2l0aGVAcGh5c2ljcy5hZGVsYWlkZS5lZHUuYXU+Ci1MOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZworTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKIApAQCAtMjM5Myw2ICsyNDEyLDE4IEBACiBTOglPZGQgRml4ZXMKIEY6CWRyaXZlcnMvY2hhci9odmNfKgogCitWSVJUSU8gQ09OU09MRSBEUklWRVIKK006CUFtaXQgU2hhaCA8YW1pdC5zaGFoQHJlZGhhdC5jb20+CitMOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKworaVNDU0kgQk9PVCBGSVJNV0FSRSBUQUJMRSAoaUJGVCkgRFJJVkVSCitNOglQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+CitNOglLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZEBrZXJuZWwub3JnPgorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0KgorCiBHU1BDQSBGSU5FUElYIFNVQkRSSVZFUgogTToJRnJhbmsgWmFnbyA8ZnJhbmtAemFnby5uZXQ+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTI1NjEsNiArMjU5Miw3IEBACiAKIEhQIENPTVBBUSBUQzExMDAgVEFCTEVUIFdNSSBFWFRSQVMgRFJJVkVSCiBNOglDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU9kZCBGaXhlcwogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCiAKQEAgLTI3NzEsNyArMjgwMyw3IEBACiAKIElOVEVMIE1FTkxPVyBUSEVSTUFMIERSSVZFUgogTToJU3VqaXRoIFRob21hcyA8c3VqaXRoLnRob21hc0BpbnRlbC5jb20+Ci1MOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZworTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYwpAQCAtMzYzNyw2ICszNjY5LDcgQEAKIAogTVNJIExBUFRPUCBTVVBQT1JUCiBNOglMZW5uYXJ0IFBvZXR0ZXJpbmcgPG16eHJlYXJ5QDBwb2ludGVyLmRlPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHBzOi8vdGFuZ28uMHBvaW50ZXIuZGUvbWFpbG1hbi9saXN0aW5mby9zMjcwLWxpbnV4CiBXOglodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC90Y2hpYm8uaHRtbAogUzoJTWFpbnRhaW5lZApAQCAtMzY0NCw2ICszNjc3LDcgQEAKIAogTVNJIFdNSSBTVVBQT1JUCiBNOglBbmlzc2UgQXN0aWVyIDxhbmlzc2VAYXN0aWVyLmV1PgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCiAKQEAgLTQwOTYsNiArNDEzMCw3IEBACiAKIFBBTkFTT05JQyBMQVBUT1AgQUNQSSBFWFRSQVMgRFJJVkVSCiBNOglIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYwogCkBAIC00NTA5LDcgKzQ1NDQsNyBAQAogUkNVVE9SVFVSRSBNT0RVTEUKIE06CUpvc2ggVHJpcGxldHQgPGpvc2hAZnJlZWRlc2t0b3Aub3JnPgogTToJIlBhdWwgRS4gTWNLZW5uZXkiIDxwYXVsbWNrQGxpbnV4LnZuZXQuaWJtLmNvbT4KLVM6CU1haW50YWluZWQKK1M6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9SQ1UvdG9ydHVyZS50eHQKIEY6CWtlcm5lbC9yY3V0b3J0dXJlLmMKIApAQCAtNDUzNCwxMSArNDU2OSwxMiBAQAogTToJIlBhdWwgRS4gTWNLZW5uZXkiIDxwYXVsbWNrQGxpbnV4LnZuZXQuaWJtLmNvbT4KIFc6CWh0dHA6Ly93d3cucmRyb3AuY29tL3VzZXJzL3BhdWxtY2svcmNsb2NrLwogUzoJU3VwcG9ydGVkCi1GOglEb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0Ci1GOglEb2N1bWVudGF0aW9uL1JDVS9yY3VyZWYudHh0Ci1GOglpbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKLUY6CWluY2x1ZGUvbGludXgvc3JjdS5oCi1GOglrZXJuZWwvcmN1cGRhdGUuYworRjoJRG9jdW1lbnRhdGlvbi9SQ1UvCitGOglpbmNsdWRlL2xpbnV4L3JjdSoKK0Y6CWluY2x1ZGUvbGludXgvc3JjdSoKK0Y6CWtlcm5lbC9yY3UqCitGOglrZXJuZWwvc3JjdSoKK1g6CWtlcm5lbC9yY3V0b3J0dXJlLmMKIAogUkVBTCBUSU1FIENMT0NLIERSSVZFUgogTToJUGF1bCBHb3J0bWFrZXIgPHBfZ29ydG1ha2VyQHlhaG9vLmNvbT4KQEAgLTQ2NzYsNiArNDcxMiwxMyBAQAogRjoJZHJpdmVycy9tZWRpYS92aWRlby8qNzE0NioKIEY6CWluY2x1ZGUvbWVkaWEvKjcxNDYqCiAKK1RMRzIzMDAgVklERU80TElOVVgtMiBEUklWRVIKK006CUh1YW5nIFNoaWppZSA8c2hpamllOEBnbWFpbC5jb20+CitNOglLYW5nIFlvbmcgPGthbmd5b25nQHRlbGVnZW50LmNvbT4KK006CVpoYW5nIFhpYW9iaW5nIDx4YnpoYW5nQHRlbGVnZW50LmNvbT4KK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwCisKIFNDMTIwMCBXRFQgRFJJVkVSCiBNOglad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGFybS5saW51eC5vcmcudWs+CiBTOglNYWludGFpbmVkCkBAIC01MDM0LDcgKzUwNzcsNyBAQAogCiBTT05ZIFZBSU8gQ09OVFJPTCBERVZJQ0UgRFJJVkVSCiBNOglNYXR0aWEgRG9uZ2lsaSA8bWFsYXR0aWFAbGludXguaXQ+Ci1MOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZworTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGludXguaXQvfm1hbGF0dGlhL3dpa2kvaW5kZXgucGhwL1NvbnlfZHJpdmVycwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3NvbnktbGFwdG9wLnR4dApAQCAtNTI0MCw2ICs1MjgzLDcgQEAKIFRISU5LUEFEIEFDUEkgRVhUUkFTIERSSVZFUgogTToJSGVucmlxdWUgZGUgTW9yYWVzIEhvbHNjaHVoIDxpYm0tYWNwaUBobWguZW5nLmJyPgogTDoJaWJtLWFjcGktZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2libS1hY3BpLnNvdXJjZWZvcmdlLm5ldAogVzoJaHR0cDovL3RoaW5rd2lraS5vcmcvd2lraS9JYm0tYWNwaQogVDoJZ2l0IGdpdDovL3JlcG8ub3IuY3ovbGludXgtMi42L2xpbnV4LWFjcGktMi42L2libS1hY3BpLTIuNi5naXQKQEAgLTUyOTMsMTAgKzUzMzcsMTIgQEAKIAogVE9QU1RBUiBMQVBUT1AgRVhUUkFTIERSSVZFUgogTToJSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3BzdGFyLWxhcHRvcC5jCiAKIFRPU0hJQkEgQUNQSSBFWFRSQVMgRFJJVkVSCitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJT3JwaGFuCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwogCkBAIC02MDI0LDYgKzYwNzAsMTIgQEAKIEY6CURvY3VtZW50YXRpb24veDg2LwogRjoJYXJjaC94ODYvCiAKK1g4NiBQTEFURk9STSBEUklWRVJTCitNOglNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvcGxhdGZvcm0veDg2CisKIFhFTiBIWVBFUlZJU09SIElOVEVSRkFDRQogTToJSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QHhlbnNvdXJjZS5jb20+CiBNOglDaHJpcyBXcmlnaHQgPGNocmlzd0Bzb3VzLXNvbC5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggOWQwNTViNC4uMjE1ZTQ2MCAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCisrKyBiL2FyY2gvS2NvbmZpZwpAQCAtMywxMSArMyw5IEBACiAjCiAKIGNvbmZpZyBPUFJPRklMRQotCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgorCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIgogCWRlcGVuZHMgb24gUFJPRklMSU5HCiAJZGVwZW5kcyBvbiBIQVZFX09QUk9GSUxFCi0JZGVwZW5kcyBvbiBUUkFDSU5HX1NVUFBPUlQKLQlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBSSU5HX0JVRkZFUgogCXNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQCiAJaGVscApAQCAtMTcsMjAgKzE1LDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIE9QUk9GSUxFX0lCUwotCWJvb2wgIk9Qcm9maWxlIEFNRCBJQlMgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIE9QUk9GSUxFICYmIFNNUCAmJiBYODYKLQloZWxwCi0gICAgICAgICAgSW5zdHJ1Y3Rpb24tQmFzZWQgU2FtcGxpbmcgKElCUykgaXMgYSBuZXcgcHJvZmlsaW5nCi0gICAgICAgICAgdGVjaG5pcXVlIHRoYXQgcHJvdmlkZXMgcmljaCwgcHJlY2lzZSBwcm9ncmFtIHBlcmZvcm1hbmNlCi0gICAgICAgICAgaW5mb3JtYXRpb24uIElCUyBpcyBpbnRyb2R1Y2VkIGJ5IEFNRCBGYW1pbHkxMGggcHJvY2Vzc29ycwotICAgICAgICAgIChBTUQgT3B0ZXJvbiBRdWFkLUNvcmUgcHJvY2Vzc29yICJCYXJjZWxvbmEiKSB0byBvdmVyY29tZQotICAgICAgICAgIHRoZSBsaW1pdGF0aW9ucyBvZiBjb252ZW50aW9uYWwgcGVyZm9ybWFuY2UgY291bnRlcgotICAgICAgICAgIHNhbXBsaW5nLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgT1BST0ZJTEVfRVZFTlRfTVVMVElQTEVYCiAJYm9vbCAiT1Byb2ZpbGUgbXVsdGlwbGV4aW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVmYXVsdCBuCkBAIC0xMjEsNiArMTA1LDE0IEBACiBjb25maWcgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMKIAlib29sCiAKK2NvbmZpZyBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKKwlib29sCisJaGVscAorCSAgVGhpcyBzeW1ib2wgc2hvdWxkIGJlIHNlbGVjdGVkIGJ5IGFuIGFyY2hpdGVjdXJlIGlmIGl0IHN1cHBvcnRzCisJICB0aGUgQVBJIG5lZWRlZCB0byBhY2Nlc3MgcmVnaXN0ZXJzIGFuZCBzdGFjayBlbnRyaWVzIGZyb20gcHRfcmVncywKKwkgIGRlY2xhcmVkIGluIGFzbS9wdHJhY2UuaAorCSAgRm9yIGV4YW1wbGUgdGhlIGtwcm9iZXMtYmFzZWQgZXZlbnQgdHJhY2VyIG5lZWRzIHRoaXMgQVBJLgorCiBjb25maWcgSEFWRV9DTEsKIAlib29sCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYwppbmRleCBhOTFiYTI4Li5jOWFiOTRlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYwpAQCAtMTI2LDggKzEyNiw4IEBACiAjZGVmaW5lIE1CCQkJKDEwMjQqS0IpCiAjZGVmaW5lIEdCCQkJKDEwMjQqTUIpCiAKLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJCX0KIAl9CiAKLQlyZXMtPnN0YXJ0ID0gc3RhcnQ7CisJcmV0dXJuIHN0YXJ0OwogfQogI3VuZGVmIEtCCiAjdW5kZWYgTUIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA4MTEzYmI1Li41ZmU0YTJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC00NDcsNiArNDQ3LDE2IEBACiAJICAgIDogInIiICgwKSk7CiAjZW5kaWYKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlpZiAoKGNhY2hlX2lzX3ZpdnQoKSB8fCBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpKQorCSAgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGFkZHIsIChzaXplX3Qpc2l6ZSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlpZiAoKGNhY2hlX2lzX3ZpdnQoKSB8fCBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpKQorCSAgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGFkZHIsIChzaXplX3Qpc2l6ZSk7Cit9CiAKICNkZWZpbmUgQVJDSF9IQVNfRkxVU0hfQU5PTl9QQUdFCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCmluZGV4IDgwOTY4MTkuLmJkMzk3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKQEAgLTYxNiwxNSArNjE2LDE3IEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gJiYgc3RhcnQgJiAweDMwMCkKIAkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7CiAKLQlyZXMtPnN0YXJ0ID0gKHN0YXJ0ICsgYWxpZ24gLSAxKSAmIH4oYWxpZ24gLSAxKTsKKwlzdGFydCA9IChzdGFydCArIGFsaWduIC0gMSkgJiB+KGFsaWduIC0gMSk7CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCmluZGV4IGI0NzYzOTUuLjM4ZTkwMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxtYWNoL25hbmQuaD4KICNpbmNsdWRlIDxtYWNoL2tleXNjYW4uaD4KIAorI2luY2x1ZGUgPG1lZGlhL3R2cDUxNHguaD4KKwogc3RhdGljIGlubGluZSBpbnQgaGF2ZV9pbWFnZXIodm9pZCkKIHsKIAkvKiBSRVZJU0lUIHdoZW4gaXQncyBzdXBwb3J0ZWQsIHRyaWdnZXIgdmlhIEtjb25maWcgKi8KQEAgLTMwNiw2ICszMDgsNzMgQEAKIAlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfU0QxX0RBVEEwKTsKIH0KIAorc3RhdGljIHN0cnVjdCB0dnA1MTR4X3BsYXRmb3JtX2RhdGEgdHZwNTE0Nl9wZGF0YSA9IHsKKwkuY2xrX3BvbGFyaXR5ID0gMCwKKwkuaHNfcG9sYXJpdHkgPSAxLAorCS52c19wb2xhcml0eSA9IDEKK307CisKKyNkZWZpbmUgVFZQNTE0WF9TVERfQUxMICAgICAgICAoVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCkKKy8qIElucHV0cyBhdmFpbGFibGUgYXQgdGhlIFRWUDUxNDYgKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pbnB1dCB0dnA1MTQ2X2lucHV0c1tdID0geworCXsKKwkJLmluZGV4ID0gMCwKKwkJLm5hbWUgPSAiQ29tcG9zaXRlIiwKKwkJLnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAorCQkuc3RkID0gVFZQNTE0WF9TVERfQUxMLAorCX0sCisJeworCQkuaW5kZXggPSAxLAorCQkubmFtZSA9ICJTLVZpZGVvIiwKKwkJLnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAorCQkuc3RkID0gVFZQNTE0WF9TVERfQUxMLAorCX0sCit9OworCisvKgorICogdGhpcyBpcyB0aGUgcm91dGUgaW5mbyBmb3IgY29ubmVjdGluZyBlYWNoIGlucHV0IHRvIGRlY29kZXIKKyAqIG91cHV0IHRoYXQgZ29lcyB0byB2cGZlLiBUaGVyZSBpcyBhIG9uZSB0byBvbmUgY29ycmVzcG9uZGVuY2UKKyAqIHdpdGggdHZwNTE0Nl9pbnB1dHMKKyAqLworc3RhdGljIHN0cnVjdCB2cGZlX3JvdXRlIHR2cDUxNDZfcm91dGVzW10gPSB7CisJeworCQkuaW5wdXQgPSBJTlBVVF9DVkJTX1ZJMkIsCisJCS5vdXRwdXQgPSBPVVRQVVRfMTBCSVRfNDIyX0VNQkVEREVEX1NZTkMsCisJfSwKK3sKKwkJLmlucHV0ID0gSU5QVVRfU1ZJREVPX1ZJMkNfVkkxQywKKwkJLm91dHB1dCA9IE9VVFBVVF8xMEJJVF80MjJfRU1CRURERURfU1lOQywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB2cGZlX3N1YmRldl9pbmZvIHZwZmVfc3ViX2RldnNbXSA9IHsKKwl7CisJCS5uYW1lID0gInR2cDUxNDYiLAorCQkuZ3JwX2lkID0gMCwKKwkJLm51bV9pbnB1dHMgPSBBUlJBWV9TSVpFKHR2cDUxNDZfaW5wdXRzKSwKKwkJLmlucHV0cyA9IHR2cDUxNDZfaW5wdXRzLAorCQkucm91dGVzID0gdHZwNTE0Nl9yb3V0ZXMsCisJCS5jYW5fcm91dGUgPSAxLAorCQkuY2NkY19pZl9wYXJhbXMgPSB7CisJCQkuaWZfdHlwZSA9IFZQRkVfQlQ2NTYsCisJCQkuaGRwb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJCS52ZHBvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQl9LAorCQkuYm9hcmRfaW5mbyA9IHsKKwkJCUkyQ19CT0FSRF9JTkZPKCJ0dnA1MTQ2IiwgMHg1ZCksCisJCQkucGxhdGZvcm1fZGF0YSA9ICZ0dnA1MTQ2X3BkYXRhLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHZwZmVfY29uZmlnIHZwZmVfY2ZnID0geworCS5udW1fc3ViZGV2cyA9IEFSUkFZX1NJWkUodnBmZV9zdWJfZGV2cyksCisJLnN1Yl9kZXZzID0gdnBmZV9zdWJfZGV2cywKKwkuaTJjX2FkYXB0ZXJfaWQgPSAxLAorCS5jYXJkX25hbWUgPSAiRE0zNjUgRVZNIiwKKwkuY2NkYyA9ICJJU0lGIiwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBldm1faW5pdF9pMmModm9pZCkKIHsKIAlkYXZpbmNpX2luaXRfaTJjKCZpMmNfcGRhdGEpOwpAQCAtNDk3LDYgKzU2Niw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkbTM2NV9ldm1fbWFwX2lvKHZvaWQpCiB7CisJLyogc2V0dXAgaW5wdXQgY29uZmlndXJhdGlvbiBmb3IgVlBGRSBpbnB1dCBkZXZpY2VzICovCisJZG0zNjVfc2V0X3ZwZmVfY29uZmlnKCZ2cGZlX2NmZyk7CiAJZG0zNjVfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCmluZGV4IGRlZGY0ZDQuLmQ4NGU4NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCkBAIC0xMjUsNyArMTI1LDYgQEAKIAkubHBzYyA9IERBVklOQ0lfTFBTQ19WUFNTU0xWLAogfTsKIAotCiBzdGF0aWMgc3RydWN0IGNsayBjbGtvdXQxX2NsayA9IHsKIAkubmFtZSA9ICJjbGtvdXQxIiwKIAkucGFyZW50ID0gJnBsbDFfYXV4X2NsaywKQEAgLTY2NSw2ICs2NjQsMTcgQEAKIAkucmVzb3VyY2UJPSBkbTM1NV9hc3AxX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyB2b2lkIGRtMzU1X2NjZGNfc2V0dXBfcGlubXV4KHZvaWQpCit7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9QQ0xLKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9XRU4pOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX1ZEKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9IRCk7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9ZSU5fRU4pOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0lOTF9FTik7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DSU5IX0VOKTsKK30KKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTM1NV92cHNzX3Jlc291cmNlc1tdID0gewogCXsKIAkJLyogVlBTUyBCTCBCYXNlIGFkZHJlc3MgKi8KQEAgLTcwMSw2ICs3MTEsMTAgQEAKIAkJLmVuZCAgICAgICAgICAgID0gSVJRX1ZESU5UMSwKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKK307CisKK3N0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG0zNTVfY2NkY19yZXNvdXJjZVtdID0gewogCS8qIENDREMgQmFzZSBhZGRyZXNzICovCiAJewogCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKQEAgLTcwOCw4ICs3MjIsMTggQEAKIAkJLmVuZCAgICAgICAgICAgID0gMHgwMWM3MDYwMCArIDB4MWZmLAogCX0sCiB9Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG0zNTVfY2NkY19kZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gImRtMzU1X2NjZGMiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoZG0zNTVfY2NkY19yZXNvdXJjZSksCisJLnJlc291cmNlICAgICAgID0gZG0zNTVfY2NkY19yZXNvdXJjZSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgICAgICAgICAgICAgICA9ICZ2cGZlX2NhcHR1cmVfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gZG0zNTVfY2NkY19zZXR1cF9waW5tdXgsCisJfSwKK307CiAKLXN0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZwZmVfY2FwdHVyZV9kZXYgPSB7CiAJLm5hbWUJCT0gQ0FQVFVSRV9EUlZfTkFNRSwKIAkuaWQJCT0gLTEsCkBAIC04NTcsMjAgKzg4MSwxMyBAQAogCWlmICghY3B1X2lzX2RhdmluY2lfZG0zNTUoKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBBZGQgY2NkYyBjbG9jayBhbGlhc2VzICovCisJY2xrX2FkZF9hbGlhcygibWFzdGVyIiwgZG0zNTVfY2NkY19kZXYubmFtZSwgInZwc3NfbWFzdGVyIiwgTlVMTCk7CisJY2xrX2FkZF9hbGlhcygic2xhdmUiLCBkbTM1NV9jY2RjX2Rldi5uYW1lLCAidnBzc19tYXN0ZXIiLCBOVUxMKTsKIAlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfSU5UX0VETUFfQ0MpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNTVfZWRtYV9kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNTVfdnBzc19kZXZpY2UpOwotCS8qCi0JICogc2V0dXAgTXV4IGNvbmZpZ3VyYXRpb24gZm9yIHZwZmUgaW5wdXQgYW5kIHJlZ2lzdGVyCi0JICogdnBmZSBjYXB0dXJlIHBsYXRmb3JtIGRldmljZQotCSAqLwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fUENMSyk7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DQU1fV0VOKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9WRCk7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DQU1fSEQpOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fWUlOX0VOKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NJTkxfRU4pOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0lOSF9FTik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM1NV9jY2RjX2Rldik7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2cGZlX2NhcHR1cmVfZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYwppbmRleCBmNTM3MzVjLi5jZTlkYTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYwpAQCAtMTAwOCw2ICsxMDA4LDk3IEBACiAJZGF2aW5jaV9jb21tb25faW5pdCgmZGF2aW5jaV9zb2NfaW5mb19kbTM2NSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG0zNjVfdnBzc19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS8qIFZQU1MgSVNQNSBCYXNlIGFkZHJlc3MgKi8KKwkJLm5hbWUgICAgICAgICAgID0gImlzcDUiLAorCQkuc3RhcnQgICAgICAgICAgPSAweDAxYzcwMDAwLAorCQkuZW5kICAgICAgICAgICAgPSAweDAxYzcwMDAwICsgMHhmZiwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS8qIFZQU1MgQ0xLIEJhc2UgYWRkcmVzcyAqLworCQkubmFtZSAgICAgICAgICAgPSAidnBzcyIsCisJCS5zdGFydCAgICAgICAgICA9IDB4MDFjNzAyMDAsCisJCS5lbmQgICAgICAgICAgICA9IDB4MDFjNzAyMDAgKyAweGZmLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG0zNjVfdnBzc19kZXZpY2UgPSB7CisgICAgICAgLm5hbWUgICAgICAgICAgICAgICAgICAgPSAidnBzcyIsCisgICAgICAgLmlkICAgICAgICAgICAgICAgICAgICAgPSAtMSwKKyAgICAgICAuZGV2LnBsYXRmb3JtX2RhdGEgICAgICA9ICJkbTM2NV92cHNzIiwKKyAgICAgICAubnVtX3Jlc291cmNlcyAgICAgICAgICA9IEFSUkFZX1NJWkUoZG0zNjVfdnBzc19yZXNvdXJjZXMpLAorICAgICAgIC5yZXNvdXJjZSAgICAgICAgICAgICAgID0gZG0zNjVfdnBzc19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHZwZmVfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgICAgICAgICAgPSBJUlFfVkRJTlQwLAorCQkuZW5kICAgICAgICAgICAgPSBJUlFfVkRJTlQwLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0ICAgICAgICAgID0gSVJRX1ZESU5UMSwKKwkJLmVuZCAgICAgICAgICAgID0gSVJRX1ZESU5UMSwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgdnBmZV9jYXB0dXJlX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZwZmVfY2FwdHVyZV9kZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gQ0FQVFVSRV9EUlZfTkFNRSwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHZwZmVfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSB2cGZlX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkuZG1hX21hc2sgICAgICAgICAgICAgICA9ICZ2cGZlX2NhcHR1cmVfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgZG0zNjVfaXNpZl9zZXR1cF9waW5tdXgodm9pZCkKK3sKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfVklOX0NBTV9XRU4pOworCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9WSU5fQ0FNX1ZEKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfVklOX0NBTV9IRCk7CisJZGF2aW5jaV9jZmdfcmVnKERNMzY1X1ZJTl9ZSU40XzdfRU4pOworCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9WSU5fWUlOMF8zX0VOKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpc2lmX3Jlc291cmNlW10gPSB7CisJLyogSVNJRiBCYXNlIGFkZHJlc3MgKi8KKwl7CisJCS5zdGFydCAgICAgICAgICA9IDB4MDFjNzEwMDAsCisJCS5lbmQgICAgICAgICAgICA9IDB4MDFjNzEwMDAgKyAweDFmZiwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKiBJU0lGIExpbmVhcml6YXRpb24gdGFibGUgMCAqLworCXsKKwkJLnN0YXJ0ICAgICAgICAgID0gMHgxQzdDMDAwLAorCQkuZW5kICAgICAgICAgICAgPSAweDFDN0MwMDAgKyAweDJmZiwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKiBJU0lGIExpbmVhcml6YXRpb24gdGFibGUgMSAqLworCXsKKwkJLnN0YXJ0ICAgICAgICAgID0gMHgxQzdDNDAwLAorCQkuZW5kICAgICAgICAgICAgPSAweDFDN0M0MDAgKyAweDJmZiwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTM2NV9pc2lmX2RldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiaXNpZiIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpc2lmX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgICAgICAgPSBpc2lmX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJnZwZmVfY2FwdHVyZV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrICAgICAgPSBETUFfQklUX01BU0soMzIpLAorCQkucGxhdGZvcm1fZGF0YQkJPSBkbTM2NV9pc2lmX3NldHVwX3Bpbm11eCwKKwl9LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZG0zNjVfaW5pdF9kZXZpY2VzKHZvaWQpCiB7CiAJaWYgKCFjcHVfaXNfZGF2aW5jaV9kbTM2NSgpKQpAQCAtMTAxNiw3ICsxMTA3LDE2IEBACiAJZGF2aW5jaV9jZmdfcmVnKERNMzY1X0lOVF9FRE1BX0NDKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtMzY1X2VkbWFfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtMzY1X2VtYWNfZGV2aWNlKTsKLQorCS8qIEFkZCBpc2lmIGNsb2NrIGFsaWFzICovCisJY2xrX2FkZF9hbGlhcygibWFzdGVyIiwgZG0zNjVfaXNpZl9kZXYubmFtZSwgInZwc3NfbWFzdGVyIiwgTlVMTCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM2NV92cHNzX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM2NV9pc2lmX2Rldik7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2cGZlX2NhcHR1cmVfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIHBvc3Rjb3JlX2luaXRjYWxsKGRtMzY1X2luaXRfZGV2aWNlcyk7CisKK3ZvaWQgZG0zNjVfc2V0X3ZwZmVfY29uZmlnKHN0cnVjdCB2cGZlX2NvbmZpZyAqY2ZnKQoreworICAgICAgIHZwZmVfY2FwdHVyZV9kZXYuZGV2LnBsYXRmb3JtX2RhdGEgPSBjZmc7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKaW5kZXggMmNkMDA4MS4uOTJhZWI1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYwpAQCAtNjEyLDYgKzYxMiwxMSBAQAogCQkuZW5kICAgICAgICAgICAgPSBJUlFfVkRJTlQxLAogCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAorfTsKKworc3RhdGljIHU2NCB2cGZlX2NhcHR1cmVfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTY0NHhfY2NkY19yZXNvdXJjZVtdID0geworCS8qIENDREMgQmFzZSBhZGRyZXNzICovCiAJewogCQkuc3RhcnQgICAgICAgICAgPSAweDAxYzcwNDAwLAogCQkuZW5kICAgICAgICAgICAgPSAweDAxYzcwNDAwICsgMHhmZiwKQEAgLTYxOSw3ICs2MjQsMTcgQEAKIAl9LAogfTsKIAotc3RhdGljIHU2NCB2cGZlX2NhcHR1cmVfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG02NDR4X2NjZGNfZGV2ID0geworCS5uYW1lICAgICAgICAgICA9ICJkbTY0NHhfY2NkYyIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShkbTY0NHhfY2NkY19yZXNvdXJjZSksCisJLnJlc291cmNlICAgICAgID0gZG02NDR4X2NjZGNfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrICAgICAgICAgICAgICAgPSAmdnBmZV9jYXB0dXJlX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZwZmVfY2FwdHVyZV9kZXYgPSB7CiAJLm5hbWUJCT0gQ0FQVFVSRV9EUlZfTkFNRSwKIAkuaWQJCT0gLTEsCkBAIC03NjksOSArNzg0LDEzIEBACiAJaWYgKCFjcHVfaXNfZGF2aW5jaV9kbTY0NHgoKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBBZGQgY2NkYyBjbG9jayBhbGlhc2VzICovCisJY2xrX2FkZF9hbGlhcygibWFzdGVyIiwgZG02NDR4X2NjZGNfZGV2Lm5hbWUsICJ2cHNzX21hc3RlciIsIE5VTEwpOworCWNsa19hZGRfYWxpYXMoInNsYXZlIiwgZG02NDR4X2NjZGNfZGV2Lm5hbWUsICJ2cHNzX3NsYXZlIiwgTlVMTCk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTY0NHhfZWRtYV9kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG02NDR4X2VtYWNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtNjQ0eF92cHNzX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTY0NHhfY2NkY19kZXYpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdnBmZV9jYXB0dXJlX2Rldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZG0zNjUuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZG0zNjUuaAppbmRleCBmMTcxMGEzLi45ZmM1YTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtMzY1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTM2NS5oCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bWFjaC9lbWFjLmg+CiAjaW5jbHVkZSA8bWFjaC9hc3AuaD4KICNpbmNsdWRlIDxtYWNoL2tleXNjYW4uaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5oPgogCiAjZGVmaW5lIERNMzY1X0VNQUNfQkFTRQkJCSgweDAxRDA3MDAwKQogI2RlZmluZSBETTM2NV9FTUFDX0NOVFJMX09GRlNFVAkJKDB4MDAwMCkKQEAgLTM2LDQgKzM3LDUgQEAKIHZvaWQgX19pbml0IGRtMzY1X2luaXRfa3Moc3RydWN0IGRhdmluY2lfa3NfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwogdm9pZCBfX2luaXQgZG0zNjVfaW5pdF9ydGModm9pZCk7CiAKK3ZvaWQgZG0zNjVfc2V0X3ZwZmVfY29uZmlnKHN0cnVjdCB2cGZlX2NvbmZpZyAqY2ZnKTsKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNMzY1X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jcHUtODgxNS5jIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKaW5kZXggZjkzYzU5Ni4uOWJmMzNiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKQEAgLTg2LDExICs4NiwxOSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIGNwdTg4MTVfYW1iYV9ybmcgPSB7CisJLmRldiA9IHsKKwkJLmluaXRfbmFtZSA9ICJybmciLAorCX0sCisJX19NRU1fNEtfUkVTT1VSQ0UoTk9NQURJS19STkdfQkFTRSksCit9OworCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCWNwdTg4MTVfYW1iYV9ncGlvICsgMCwKIAljcHU4ODE1X2FtYmFfZ3BpbyArIDEsCiAJY3B1ODgxNV9hbWJhX2dwaW8gKyAyLAogCWNwdTg4MTVfYW1iYV9ncGlvICsgMywKKwkmY3B1ODgxNV9hbWJhX3JuZwogfTsKIAogc3RhdGljIGludCBfX2luaXQgY3B1ODgxNV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmgKaW5kZXggMzFhYmU2ZC4uNjcwOWIxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NhbWVyYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jYW1lcmEuaApAQCAtMzUsOCArMzUsNiBAQAogI2RlZmluZSBQWEFfQ0FNRVJBX1ZTUAkJMHg0MDAKIAogc3RydWN0IHB4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhIHsKLQlpbnQgKCppbml0KShzdHJ1Y3QgZGV2aWNlICopOwotCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1jbGtfMTBraHo7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQppbmRleCA5OTZjYmFjLi42Y2VlMzhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQpAQCAtMTMsMyArMTMsNyBAQAogb2JqLSQoQ09ORklHX01YQ19VTFBJKSArPSB1bHBpLm8KIG9iai0kKENPTkZJR19BUkNIX01YQ19BVURNVVhfVjEpICs9IGF1ZG11eC12MS5vCiBvYmotJChDT05GSUdfQVJDSF9NWENfQVVETVVYX1YyKSArPSBhdWRtdXgtdjIubworaWZkZWYgQ09ORklHX1NORF9JTVhfU09DCitvYmoteSArPSBzc2ktZmlxLm8KK29iai15ICs9IHNzaS1maXEta3N5bS5vCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS1rc3ltLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLWtzeW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZhZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS1rc3ltLmMKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIEV4cG9ydGVkIGtzeW1zIGZvciB0aGUgU1NJIEZJUSBoYW5kbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NzaS5oPgorCitFWFBPUlRfU1lNQk9MKGlteF9zc2lfZmlxX3R4X2J1ZmZlcik7CitFWFBPUlRfU1lNQk9MKGlteF9zc2lfZmlxX3J4X2J1ZmZlcik7CitFWFBPUlRfU1lNQk9MKGlteF9zc2lfZmlxX3N0YXJ0KTsKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfZW5kKTsKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfYmFzZSk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUyBiL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRjZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOSBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworLyoKKyAqIHI4ICA9IGJpdCAwLTE1OiB0eCBvZmZzZXQsIGJpdCAxNi0zMTogdHggYnVmZmVyIHNpemUKKyAqIHI5ICA9IGJpdCAwLTE1OiByeCBvZmZzZXQsIGJpdCAxNi0zMTogcnggYnVmZmVyIHNpemUKKyAqLworCisjZGVmaW5lIFNTSV9TVFgwCTB4MDAKKyNkZWZpbmUgU1NJX1NSWDAJMHgwOAorI2RlZmluZSBTU0lfU0lTUgkweDE0CisjZGVmaW5lIFNTSV9TSUVSCTB4MTgKKyNkZWZpbmUgU1NJX1NBQ05UCTB4MzgKKworI2RlZmluZSBTU0lfU0FDTlRfQUM5N0VOCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NJRVJfVEZFMF9FTgkoMSA8PCAwKQorI2RlZmluZSBTU0lfU0lTUl9URkUwCQkoMSA8PCAwKQorI2RlZmluZSBTU0lfU0lTUl9SRkYwCQkoMSA8PCAyKQorI2RlZmluZSBTU0lfU0lFUl9SRkYwX0VOCSgxIDw8IDIpCisKKwkJLnRleHQKKwkJLmdsb2JhbAlpbXhfc3NpX2ZpcV9zdGFydAorCQkuZ2xvYmFsCWlteF9zc2lfZmlxX2VuZAorCQkuZ2xvYmFsIGlteF9zc2lfZmlxX2Jhc2UKKwkJLmdsb2JhbCBpbXhfc3NpX2ZpcV9yeF9idWZmZXIKKwkJLmdsb2JhbCBpbXhfc3NpX2ZpcV90eF9idWZmZXIKKworaW14X3NzaV9maXFfc3RhcnQ6CisJCWxkciByMTIsIGlteF9zc2lfZmlxX2Jhc2UKKworCQkvKiBUWCAqLworCQlsZHIgcjExLCBpbXhfc3NpX2ZpcV90eF9idWZmZXIKKworCQkvKiBzaGFsbCB3ZSBzZW5kPyAqLworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NJRVJdCisJCXRzdCByMTMsICNTU0lfU0lFUl9URkUwX0VOCisJCWJlcSAxZgorCisJCS8qIFRYIEZJRk8gZW1wdHk/ICovCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0lTUl0KKwkJdHN0IHIxMywgI1NTSV9TSVNSX1RGRTAKKwkJYmVxIDFmCisKKwkJbW92IHIxMCwgIzB4MTAwMDAKKwkJc3ViIHIxMCwgIzEKKwkJYW5kIHIxMCwgcjEwLCByOAkvKiByMTA6IGN1cnJlbnQgYnVmZmVyIG9mZnNldCAqLworCisJCWFkZCByMTEsIHIxMSwgcjEwCisKKwkJbGRyaCByMTMsIFtyMTFdCisJCXN0cmggcjEzLCBbcjEyLCAjU1NJX1NUWDBdCisKKwkJbGRyaCByMTMsIFtyMTEsICMyXQorCQlzdHJoIHIxMywgW3IxMiwgI1NTSV9TVFgwXQorCisJCWxkcmggcjEzLCBbcjExLCAjNF0KKwkJc3RyaCByMTMsIFtyMTIsICNTU0lfU1RYMF0KKworCQlsZHJoIHIxMywgW3IxMSwgIzZdCisJCXN0cmggcjEzLCBbcjEyLCAjU1NJX1NUWDBdCisKKwkJYWRkIHIxMCwgIzgKKwkJbHNyIHIxMywgcjgsICMxNgkvKiByMTM6IGJ1ZmZlciBzaXplICovCisJCWNtcCByMTAsIHIxMworCQlsc2xndCByOCwgcjEzLCAjMTYKKwkJYWRkbGUgcjgsICM4CisxOgorCQkvKiBSWCAqLworCisJCS8qIHNoYWxsIHdlIHJlY2VpdmU/ICovCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0lFUl0KKwkJdHN0IHIxMywgI1NTSV9TSUVSX1JGRjBfRU4KKwkJYmVxIDFmCisKKwkJLyogUlggRklGTyBmdWxsPyAqLworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NJU1JdCisJCXRzdCByMTMsICNTU0lfU0lTUl9SRkYwCisJCWJlcSAxZgorCisJCWxkciByMTEsIGlteF9zc2lfZmlxX3J4X2J1ZmZlcgorCisJCW1vdiByMTAsICMweDEwMDAwCisJCXN1YiByMTAsICMxCisJCWFuZCByMTAsIHIxMCwgcjkJLyogcjEwOiBjdXJyZW50IGJ1ZmZlciBvZmZzZXQgKi8KKworCQlhZGQgcjExLCByMTEsIHIxMAorCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0FDTlRdCisJCXRzdCByMTMsICNTU0lfU0FDTlRfQUM5N0VOCisKKwkJbGRyIHIxMywgW3IxMiwgI1NTSV9TUlgwXQorCQlzdHJoIHIxMywgW3IxMV0KKworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NSWDBdCisJCXN0cmggcjEzLCBbcjExLCAjMl0KKworCQkvKiBkdW1teSByZWFkIHRvIHNraXAgc2xvdCAxMiAqLworCQlsZHJuZSByMTMsIFtyMTIsICNTU0lfU1JYMF0KKworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NSWDBdCisJCXN0cmggcjEzLCBbcjExLCAjNF0KKworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NSWDBdCisJCXN0cmggcjEzLCBbcjExLCAjNl0KKworCQkvKiBkdW1teSByZWFkIHRvIHNraXAgc2xvdCAxMiAqLworCQlsZHJuZSByMTMsIFtyMTIsICNTU0lfU1JYMF0KKworCQlhZGQgcjEwLCAjOAorCQlsc3IgcjEzLCByOSwgIzE2CS8qIHIxMzogYnVmZmVyIHNpemUgKi8KKwkJY21wIHIxMCwgcjEzCisJCWxzbGd0IHI5LCByMTMsICMxNgorCQlhZGRsZSByOSwgIzgKKworMToKKwkJQCByZXR1cm4gZnJvbSBGSVEKKwkJc3VicwlwYywgbHIsICM0CitpbXhfc3NpX2ZpcV9iYXNlOgorCQkud29yZCAweDAKK2lteF9zc2lfZmlxX3J4X2J1ZmZlcjoKKwkJLndvcmQgMHgwCitpbXhfc3NpX2ZpcV90eF9idWZmZXI6CisJCS53b3JkIDB4MAoraW14X3NzaV9maXFfZW5kOgorCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2Jpb3MuYwppbmRleCA3N2VlMzE5Li5kNGI5YzM2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjaS9iaW9zLmMKQEAgLTQxLDE4ICs0MSwxNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKLQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCi0JCWlmIChzdGFydCAmIDB4MzAwKSB7Ci0JCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQotCX0KKwlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSAmJiAoc3RhcnQgJiAweDMwMCkpCisJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOworCisJcmV0dXJuIHN0YXJ0CiB9CiAKIGludCBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYwppbmRleCA1NjZiZGViLi4xZWQxNWQ3IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKQEAgLTMyLDE4ICszMiwxNiBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7Ci0JaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAotCQlpZiAoc3RhcnQgJiAweDMwMCkgewotCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KLQl9CisJaWYgKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgJiYgKHN0YXJ0ICYgMHgzMDApKQorCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKKworCXJldHVybiBzdGFydAogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvbW0vbWVtb3J5LmMgYi9hcmNoL2g4MzAwL21tL21lbW9yeS5jCmluZGV4IGNjZDZhZGUuLjQwZDhhYTggMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvbW0vbWVtb3J5LmMKKysrIGIvYXJjaC9oODMwMC9tbS9tZW1vcnkuYwpAQCAtNDQsOCArNDQsOCBAQAogewogfQogCi0vKiBNYXAgc29tZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLiBUaGUKLSAqIGNvZGUgaXMgY29waWVkIGFuZCBhZGFwdGVkIGZyb20gbWFwX2NodW5rKCkuCisvKgorICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KICAqLwogCiB1bnNpZ25lZCBsb25nIGtlcm5lbF9tYXAodW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKaW5kZXggZTk3YjI1NS4uOTM5OTdiZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCkBAIC05OCw2ICs5OCw3IEBACiAjZW5kaWYKICNkZWZpbmUgYWNwaV9wcm9jZXNzb3JfY3N0YXRlX2NoZWNrKHgpICh4KSAvKiBubyBpZGxlIGxpbWl0cyBvbiBJQTY0IDopICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9hY3BpKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9hY3BpX2Nyc19xdWlya3Modm9pZCkgeyB9CiAKIGNvbnN0IGNoYXIgKmFjcGlfZ2V0X3N5c25hbWUgKHZvaWQpOwogaW50IGFjcGlfcmVxdWVzdF92ZWN0b3IgKHUzMiBpbnRfdHlwZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDlhZGFjNDQuLjcwMjZiMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC04NzAsNyArODcwLDcgQEAKIAkJcmV0dXJuIDE7CiAKIHNzX3Byb2JlOgotI2lmICFkZWZpbmVkKENPTkZJR19QUkVFTVBUKSB8fCBkZWZpbmVkKENPTkZJR19GUkVFWkVSKQorI2lmICFkZWZpbmVkKENPTkZJR19QUkVFTVBUKQogCWlmIChwLT5haW5zbi5pbnN0X2ZsYWcgPT0gSU5TVF9GTEFHX0JPT1NUQUJMRSAmJiAhcC0+cG9zdF9oYW5kbGVyKSB7CiAJCS8qIEJvb3N0IHVwIC0tIHdlIGNhbiBleGVjdXRlIGNvcGllZCBpbnN0cnVjdGlvbnMgZGlyZWN0bHkgKi8KIAkJaWE2NF9wc3IocmVncyktPnJpID0gcC0+YWluc24uc2xvdDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKaW5kZXggYTM1YzY2MS4uNDdhMTkyNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogc3RhdGljIHZvaWQKLXBhcmF2aXJ0X2Nsb2Nrc291cmNlX3Jlc3VtZSh2b2lkKQorcGFyYXZpcnRfY2xvY2tzb3VyY2VfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJaWYgKHB2X3RpbWVfb3BzLmNsb2Nrc291cmNlX3Jlc3VtZSkKIAkJcHZfdGltZV9vcHMuY2xvY2tzb3VyY2VfcmVzdW1lKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCBkZjYzOWRiNy4uNjRhZmY1MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC0zMjAsOSArMzIwLDkgQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdAogcGNpYmlvc19zZXR1cF9yb290X3dpbmRvd3Moc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9jb250cm9sbGVyICpjdHJsKQogewotCWludCBpLCBqOworCWludCBpOwogCi0JaiA9IDA7CisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGJ1cyk7CiAJZm9yIChpID0gMDsgaSA8IGN0cmwtPndpbmRvd3M7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZjdHJsLT53aW5kb3dbaV0ucmVzb3VyY2U7CiAJCS8qIEhQJ3MgZmlybXdhcmUgaGFzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIFdpbmRvd3MgYnVnLgpAQCAtMzMwLDEzICszMzAsNyBAQAogCQlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKIAkJICAgIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQgPCAxNikpCiAJCQljb250aW51ZTsKLQkJaWYgKGogPj0gUENJX0JVU19OVU1fUkVTT1VSQ0VTKSB7Ci0JCQlkZXZfd2FybigmYnVzLT5kZXYsCi0JCQkJICJpZ25vcmluZyBob3N0IGJyaWRnZSB3aW5kb3cgJXBSIChubyBzcGFjZSlcbiIsCi0JCQkJIHJlcyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlidXMtPnJlc291cmNlW2orK10gPSByZXM7CisJCXBjaV9idXNfYWRkX3Jlc291cmNlKGJ1cywgcmVzLCAwKTsKIAl9CiB9CiAKQEAgLTQ1MiwxMyArNDQ2LDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpc192YWxpZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KQogewogCXVuc2lnbmVkIGludCBpLCB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU07Ci0Jc3RydWN0IHJlc291cmNlICpkZXZyID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdLCAqYnVzcjsKIAogCWlmICghZGV2LT5idXMpCiAJCXJldHVybiAwOwotCWZvciAoaT0wOyBpPFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqYnVzciA9IGRldi0+YnVzLT5yZXNvdXJjZVtpXTsKIAorCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoZGV2LT5idXMsIGJ1c3IsIGkpIHsKIAkJaWYgKCFidXNyIHx8ICgoYnVzci0+ZmxhZ3MgXiBkZXZyLT5mbGFncykgJiB0eXBlX21hc2spKQogCQkJY29udGludWU7CiAJCWlmICgoZGV2ci0+c3RhcnQpICYmIChkZXZyLT5zdGFydCA+PSBidXNyLT5zdGFydCkgJiYKQEAgLTU0NywxMCArNTQwLDExIEBACiAJCWFjcGlfcGNpX2lycV9kaXNhYmxlKGRldik7CiB9CiAKLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2UgKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlICh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogeworCXJldHVybiByZXMtPnN0YXJ0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCBlY2RjMTlhLi5iNWRhMjk4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNTM2LDEwICs1MzYsNiBAQAogCSAgU2F5IFkgdG8gZW5hYmxlIGRvaW5nIElQIG92ZXIgdGhlIHBhcmFsbGVsIHBvcnQgb24geW91ciBHVlAKIAkgIElPLUV4dGVuZGVyIGNhcmQsIE4gb3RoZXJ3aXNlLgogCi1jb25maWcgTUFDX1NDQwotCXRyaXN0YXRlICJNYWNpbnRvc2ggc2VyaWFsIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNQUMKLQogY29uZmlnIE1BQ19ISUQKIAlib29sCiAJZGVwZW5kcyBvbiBJTlBVVF9BREJISUQKQEAgLTU5NSw3ICs1OTEsNyBAQAogCiBjb25maWcgU0VSSUFMX0NPTlNPTEUKIAlib29sICJTdXBwb3J0IGZvciBzZXJpYWwgcG9ydCBjb25zb2xlIgotCWRlcGVuZHMgb24gKEFNSUdBIHx8IEFUQVJJIHx8IE1BQyB8fCBTVU4zIHx8IFNVTjNYIHx8IFZNRSB8fCBBUE9MTE8pICYmIChBVEFSSV9NRlBTRVI9eSB8fCBBVEFSSV9NSURJPXkgfHwgTUFDX1NDQz15IHx8IEFNSUdBX0JVSUxUSU5fU0VSSUFMPXkgfHwgR1ZQSU9FWFQ9eSB8fCBNVUxUSUZBQ0VfSUlJX1RUWT15IHx8IFNFUklBTD15IHx8IE1WTUUxNDdfU0NDIHx8IFNFUklBTDE2NyB8fCBNVk1FMTYyX1NDQyB8fCBCVk1FNjAwMF9TQ0MgfHwgRE5fU0VSSUFMKQorCWRlcGVuZHMgb24gKEFNSUdBIHx8IEFUQVJJIHx8IFNVTjMgfHwgU1VOM1ggfHwgVk1FIHx8IEFQT0xMTykgJiYgKEFUQVJJX01GUFNFUj15IHx8IEFUQVJJX01JREk9eSB8fCBBTUlHQV9CVUlMVElOX1NFUklBTD15IHx8IEdWUElPRVhUPXkgfHwgTVVMVElGQUNFX0lJSV9UVFk9eSB8fCBTRVJJQUw9eSB8fCBNVk1FMTQ3X1NDQyB8fCBTRVJJQUwxNjcgfHwgTVZNRTE2Ml9TQ0MgfHwgQlZNRTYwMDBfU0NDIHx8IEROX1NFUklBTCkKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byB1c2UgYSBzZXJpYWwgcG9ydCBhcyB0aGUKIAkgIHN5c3RlbSBjb25zb2xlICh0aGUgc3lzdGVtIGNvbnNvbGUgaXMgdGhlIGRldmljZSB3aGljaCByZWNlaXZlcyBhbGwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYyBiL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYwppbmRleCA2Yzc0NzUxLi5kMmNjMzVkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCkBAIC00ODAsNyArNDgwLDcgQEAKIAlzdGF0aWMgc3RydWN0IHJlc291cmNlIHNjaGVkX3JlcyA9IHsKIAkJLm5hbWUgPSAidGltZXIiLCAuc3RhcnQgPSAweDAwYmZkNDAwLCAuZW5kID0gMHgwMGJmZDVmZiwKIAl9OwotCWppZmZ5X3RpY2tzID0gKGFtaWdhX2VjbG9jaytIWi8yKS9IWjsKKwlqaWZmeV90aWNrcyA9IERJVl9ST1VORF9DTE9TRVNUKGFtaWdhX2VjbG9jaywgSFopOwogCiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJm1iX3Jlc291cmNlcy5fY2lhYiwgJnNjaGVkX3JlcykpCiAJCXByaW50aygiQ2Fubm90IGFsbG9jYXRlIGNpYWIudGF7bG8saGl9XG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnCmluZGV4IDk5OTFiNjQuLmM1ZjMyMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZwpAQCAtNzAxLDYgKzcwMSwxMSBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC04MzQsOSArODM5LDcgQEAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19NQUNfU0NDPXkKIENPTkZJR19NQUNfSElEPXkKLUNPTkZJR19TRVJJQUxfQ09OU09MRT15CiAKICMKICMgRmlsZSBzeXN0ZW1zCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcKaW5kZXggNjljNDNlMi4uYThiZmEzZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZwpAQCAtODIyLDYgKzgyMiwxMSBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC05ODIsNyArOTg3LDYgQEAKIENPTkZJR19BVEFSSV9EU1A1Nks9bQogQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXkKIENPTkZJR19NVUxUSUZBQ0VfSUlJX1RUWT1tCi1DT05GSUdfTUFDX1NDQz15CiBDT05GSUdfTUFDX0hJRD15CiBDT05GSUdfTVZNRTE0N19TQ0M9eQogQ09ORklHX1NFUklBTDE2Nz15CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaHcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCmluZGV4IDJiNGRlMGMuLmEyMjA5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCkBAIC0yMSwyOSArMjEsNCBAQAogI2RlZmluZSBWSURFT01FTVNJWkUJKDQwOTYqMTAyNCkKICNkZWZpbmUgVklERU9NRU1NQVNLCSgtNDA5NioxMDI0KQogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2lmIDAKLS8qCi0qKiBTQ0MgWjg1MzAKLSovCi0KLSNkZWZpbmUgTUFDX1NDQ19CQVMgKDB4NTBGMDQwMDApCi1zdHJ1Y3QgTUFDX1NDQwotIHsKLSAgdV9jaGFyIGNoYV9hX2N0cmw7Ci0gIHVfY2hhciBjaGFyX2R1bW15MTsKLSAgdV9jaGFyIGNoYV9hX2RhdGE7Ci0gIHVfY2hhciBjaGFyX2R1bW15MjsKLSAgdV9jaGFyIGNoYV9iX2N0cmw7Ci0gIHVfY2hhciBjaGFyX2R1bW15MzsKLSAgdV9jaGFyIGNoYV9iX2RhdGE7Ci0gfTsKLSMgZGVmaW5lIG1hY19zY2MgKCgqKHZvbGF0aWxlIHN0cnVjdCBTQ0MqKU1BQ19TQ0NfQkFTKSkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNlbmRpZiAvKiBsaW51eC9tYWNody5oICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50cy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludHMuaAppbmRleCA2NzljNDhhLi5lYmUxYjcwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50cy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRzLmgKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2RlZmluZSBWSUExX1NPVVJDRV9CQVNFCTgKICNkZWZpbmUgVklBMl9TT1VSQ0VfQkFTRQkxNgotI2RlZmluZSBNQUNfU0NDX1NPVVJDRV9CQVNFCTI0CiAjZGVmaW5lIFBTQzNfU09VUkNFX0JBU0UJMjQKICNkZWZpbmUgUFNDNF9TT1VSQ0VfQkFTRQkzMgogI2RlZmluZSBQU0M1X1NPVVJDRV9CQVNFCTQwCkBAIC05NiwyNiArOTUsMTIgQEAKICNkZWZpbmUgSVJRX1BTQzNfMgkgICgyNikKICNkZWZpbmUgSVJRX1BTQzNfMwkgICgyNykKIAotLyogTGV2ZWwgNCAoU0NDKSBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIElSUV9TQ0MJCSAgICAgKDMyKQotI2RlZmluZSBJUlFfU0NDQQkgICAgICgzMykKLSNkZWZpbmUgSVJRX1NDQ0IJICAgICAoMzQpCi0jaWYgMCAvKiBGSVhNRTogYXJlIHRoZXJlIG11bHRpcGxlIGludGVycnVwdCBjb25kaXRpb25zIG9uIHRoZSBTQ0MgPz8gKi8KLS8qIFNDQyBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIElSUV9TQ0NCX1RYCSAgICAgKDMyKQotI2RlZmluZSBJUlFfU0NDQl9TVEFUCSAgICAgKDMzKQotI2RlZmluZSBJUlFfU0NDQl9SWAkgICAgICgzNCkKLSNkZWZpbmUgSVJRX1NDQ0JfU1BDT05ECSAgICAgKDM1KQotI2RlZmluZSBJUlFfU0NDQV9UWAkgICAgICgzNikKLSNkZWZpbmUgSVJRX1NDQ0FfU1RBVAkgICAgICgzNykKLSNkZWZpbmUgSVJRX1NDQ0FfUlgJICAgICAoMzgpCi0jZGVmaW5lIElSUV9TQ0NBX1NQQ09ORAkgICAgICgzOSkKLSNlbmRpZgotCiAvKiBMZXZlbCA0IChQU0MsIEFWIE1hY3Mgb25seSkgaW50ZXJydXB0cyAqLwogI2RlZmluZSBJUlFfUFNDNF8wCSAgKDMyKQogI2RlZmluZSBJUlFfUFNDNF8xCSAgKDMzKQorI2RlZmluZSBJUlFfTUFDX1NDQ19BCSAgSVJRX1BTQzRfMQogI2RlZmluZSBJUlFfUFNDNF8yCSAgKDM0KQorI2RlZmluZSBJUlFfTUFDX1NDQ19CCSAgSVJRX1BTQzRfMgogI2RlZmluZSBJUlFfUFNDNF8zCSAgKDM1KQogI2RlZmluZSBJUlFfTUFDX01BQ0VfRE1BICBJUlFfUFNDNF8zCiAKQEAgLTE0Niw2ICsxMzEsOSBAQAogI2RlZmluZSBJUlFfQkFCT09OXzIJICAoNjYpCiAjZGVmaW5lIElSUV9CQUJPT05fMwkgICg2NykKIAorLyogT24gbm9uLVBTQyBtYWNoaW5lcywgdGhlIHNlcmlhbCBwb3J0cyBzaGFyZSBhbiBJUlEgKi8KKyNkZWZpbmUgSVJRX01BQ19TQ0MJICBJUlFfQVVUT180CisKICNkZWZpbmUgU0xPVDJJUlEoeCkJICAoeCArIDQ3KQogI2RlZmluZSBJUlEyU0xPVCh4KQkgICh4IC0gNDcpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBlZTQwMTFjLi4yMTYwNWM3IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC03MSw2ICs3MSw4IEBACiAjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgICAgICAgICAgMTQKICNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAgICAgICAgICAxNQogCisjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEgICAgMjUKKwogI2RlZmluZSBQVFJBQ0VfU0lOR0xFQkxPQ0sJMzMJLyogcmVzdW1lIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyYW5jaCAqLwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKaW5kZXggNTIzZGIyYS4uMTMyMGVhYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCkBAIC0xNSw5ICsxNSwxNSBAQAogCXVuc2lnbmVkIGxvbmcgIHNjX3BjOwogCXVuc2lnbmVkIHNob3J0IHNjX2Zvcm1hdHZlYzsKICNpZm5kZWYgX191Q2xpbnV4X18KKyMgaWZkZWYgX19tY29sZGZpcmVfXworCXVuc2lnbmVkIGxvbmcgIHNjX2ZwcmVnc1syXVsyXTsJLyogcm9vbSBmb3IgdHdvIGZwIHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGxvbmcgIHNjX2ZwY250bFszXTsKKwl1bnNpZ25lZCBjaGFyICBzY19mcHN0YXRlWzE2KzYqOF07CisjIGVsc2UKIAl1bnNpZ25lZCBsb25nICBzY19mcHJlZ3NbMiozXTsgIC8qIHJvb20gZm9yIHR3byBmcCByZWdpc3RlcnMgKi8KIAl1bnNpZ25lZCBsb25nICBzY19mcGNudGxbM107CiAJdW5zaWduZWQgY2hhciAgc2NfZnBzdGF0ZVsyMTZdOworIyBlbmRpZgogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAppbmRleCBjYTdkZGU4Li44NTFkM2Q3IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKQEAgLTEsOTcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S19TSUdJTkZPX0gKICNkZWZpbmUgX002OEtfU0lHSU5GT19ICiAKLSNpZm5kZWYgX191Q2xpbnV4X18KLSNkZWZpbmUgSEFWRV9BUkNIX1NJR0lORk9fVAotI2RlZmluZSBIQVZFX0FSQ0hfQ09QWV9TSUdJTkZPCi0jZW5kaWYKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KIAotI2lmbmRlZiBfX3VDbGludXhfXwotCi10eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKLQlpbnQgc2lfc2lnbm87Ci0JaW50IHNpX2Vycm5vOwotCWludCBzaV9jb2RlOwotCi0JdW5pb24gewotCQlpbnQgX3BhZFtTSV9QQURfU0laRV07Ci0KLQkJLyoga2lsbCgpICovCi0JCXN0cnVjdCB7Ci0JCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KLQkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0JCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCi0JCX0gX2tpbGw7Ci0KLQkJLyogUE9TSVguMWIgdGltZXJzICovCi0JCXN0cnVjdCB7Ci0JCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLwotCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLwotCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKLQkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KLQkJCWludCBfc3lzX3ByaXZhdGU7ICAgICAgIC8qIG5vdCB0byBiZSBwYXNzZWQgdG8gdXNlciAqLwotCQl9IF90aW1lcjsKLQotCQkvKiBQT1NJWC4xYiBzaWduYWxzICovCi0JCXN0cnVjdCB7Ci0JCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KLQkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0JCQlzaWd2YWxfdCBfc2lndmFsOwotCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9ydDsKLQotCQkvKiBTSUdDSExEICovCi0JCXN0cnVjdCB7Ci0JCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLwotCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLQkJCWludCBfc3RhdHVzOwkJLyogZXhpdCBjb2RlICovCi0JCQljbG9ja190IF91dGltZTsKLQkJCWNsb2NrX3QgX3N0aW1lOwotCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9zaWdjaGxkOwotCi0JCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KLQkJc3RydWN0IHsKLQkJCXZvaWQgKl9hZGRyOyAvKiBmYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICovCi0JCX0gX3NpZ2ZhdWx0OwotCi0JCS8qIFNJR1BPTEwgKi8KLQkJc3RydWN0IHsKLQkJCWludCBfYmFuZDsJLyogUE9MTF9JTiwgUE9MTF9PVVQsIFBPTExfTVNHICovCi0JCQlpbnQgX2ZkOwotCQl9IF9zaWdwb2xsOwotCX0gX3NpZmllbGRzOwotfSBzaWdpbmZvX3Q7Ci0KLSNkZWZpbmUgVUlEMTZfU0lHSU5GT19DT01QQVRfTkVFREVECi0KLS8qCi0gKiBIb3cgdGhlc2UgZmllbGRzIGFyZSB0byBiZSBhY2Nlc3NlZC4KLSAqLwotI3VuZGVmIHNpX3VpZAotI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZDMyCi0jZGVmaW5lIHNpX3VpZDE2CV9zaWZpZWxkcy5fa2lsbC5fdWlkCi0jZWxzZQotI2RlZmluZSBzaV91aWQJCV9zaWZpZWxkcy5fa2lsbC5fdWlkCi0jZW5kaWYKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9zaWdpbmZvKHN0cnVjdCBzaWdpbmZvICp0bywgc3RydWN0IHNpZ2luZm8gKmZyb20pCi17Ci0JaWYgKGZyb20tPnNpX2NvZGUgPCAwKQotCQltZW1jcHkodG8sIGZyb20sIHNpemVvZigqdG8pKTsKLQllbHNlCi0JCS8qIF9zaWdjaGxkIGlzIGN1cnJlbnRseSB0aGUgbGFyZ2VzdCBrbm93IHVuaW9uIG1lbWJlciAqLwotCQltZW1jcHkodG8sIGZyb20sIDMqc2l6ZW9mKGludCkgKyBzaXplb2YoZnJvbS0+X3NpZmllbGRzLl9zaWdjaGxkKSk7Ci19Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogIV9fdUNsaW51eF9fICovCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggNWI3NTRhYS4uYjdiMzdhNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xNCw3ICsxNCw3IEBACiB9CiAKICNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCi0jZWxpZiAhZGVmaW5lZChfX3VDbGludXhfXykKKyNlbGlmICFkZWZpbmVkKF9fbWNvbGRmaXJlX18pCiAKIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX2FyY2hfc3dhYjMyKF9fdTMyIHZhbCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX21tLmgKaW5kZXggMTY3ZTUxOC4uNjcyNjZjNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX21tLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCiAJaW50CQkJcHJlZW1wdF9jb3VudDsJLyogMCA9PiBwcmVlbXB0YWJsZSwgPDAgPT4gQlVHICovCiAJX191MzIgY3B1OyAvKiBzaG91bGQgYWx3YXlzIGJlIDAgb24gbTY4ayAqLworCXVuc2lnbmVkIGxvbmcJCXRwX3ZhbHVlOwkvKiB0aHJlYWQgcG9pbnRlciAqLwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICAgIHJlc3RhcnRfYmxvY2s7CiB9OwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbm8uaAppbmRleCBhNjUxMmJmLi44ODQ3NzZmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbm8uaApAQCAtMzcsNiArMzcsNyBAQAogCXVuc2lnbmVkIGxvbmcJICAgZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KIAlpbnQJCSAgIGNwdTsJCQkvKiBjcHUgd2UncmUgb24gKi8KIAlpbnQJCSAgIHByZWVtcHRfY291bnQ7CS8qIDAgPT4gcHJlZW1wdGFibGUsIDwwID0+IEJVRyAqLworCXVuc2lnbmVkIGxvbmcJICAgdHBfdmFsdWU7CQkvKiB0aHJlYWQgcG9pbnRlciAqLwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrIHJlc3RhcnRfYmxvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oCmluZGV4IGU0ZTIyNjYuLjAwZGNjNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oCkBAIC03LDcgKzcsMTEgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgZnByZWdzZXQgewogCWludCBmX2ZwY250bFszXTsKKyNpZmRlZiBfX21jb2xkZmlyZV9fCisJaW50IGZfZnByZWdzWzhdWzJdOworI2Vsc2UKIAlpbnQgZl9mcHJlZ3NbOCozXTsKKyNlbmRpZgogfSBmcHJlZ3NldF90OwogCiBzdHJ1Y3QgbWNvbnRleHQgewpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDQ4Yjg3ZjUuLmQ3MmE3MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTMzNiwxMCArMzM2LDE0IEBACiAjZGVmaW5lIF9fTlJfcHdyaXRldgkJMzMwCiAjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMzMxCiAjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTMzMgorI2RlZmluZSBfX05SX2dldF90aHJlYWRfYXJlYQkzMzMKKyNkZWZpbmUgX19OUl9zZXRfdGhyZWFkX2FyZWEJMzM0CisjZGVmaW5lIF9fTlJfYXRvbWljX2NtcHhjaGdfMzIJMzM1CisjZGVmaW5lIF9fTlJfYXRvbWljX2JhcnJpZXIJMzM2CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMJCTMzMworI2RlZmluZSBOUl9zeXNjYWxscwkJMzM3CiAKICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmgKaW5kZXggM2Y4MzRiMy4uZjM1MjI5YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmgKQEAgLTMxLDEyICszMSw3IEBACiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSBcCiAJX19wYShQQUdFX09GRlNFVCArICgoKHBhZ2UpIC0gcGdfZGF0YV9tYXBbMF0ubm9kZV9tZW1fbWFwKSA8PCBQQUdFX1NISUZUKSkKICNlbHNlCi0jZGVmaW5lIHBhZ2VfdG9fcGh5cyhfcGFnZSkgKHsJCQkJCQlcCi0Jc3RydWN0IHBhZ2UgKl9fcGFnZSA9IF9wYWdlOwkJCQkJXAotCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CQkJCQlcCi0JcGdkYXQgPSBwZ19kYXRhX3RhYmxlW3BhZ2VfdG9fbmlkKF9fcGFnZSldOwkJCVwKLQlwYWdlX3RvX3BmbihfX3BhZ2UpIDw8IFBBR0VfU0hJRlQ7CQkJCVwKLX0pCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKICNlbmRpZgogI2Vsc2UKICNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCSgoKHBhZ2UpIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUwppbmRleCA3N2ZjN2MxLi5lMTM2YjhjIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCkBAIC03NjEsNCArNzYxLDggQEAKIAkubG9uZyBzeXNfcHdyaXRldgkJLyogMzMwICovCiAJLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCiAJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgorCS5sb25nIHN5c19nZXRfdGhyZWFkX2FyZWEKKwkubG9uZyBzeXNfc2V0X3RocmVhZF9hcmVhCisJLmxvbmcgc3lzX2F0b21pY19jbXB4Y2hnXzMyCS8qIDMzNSAqLworCS5sb25nIHN5c19hdG9taWNfYmFycmllcgogCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDA1Mjk2NTkuLjE3YzNmMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yNTEsNiArMjUxLDEwIEBACiAKIAlwLT50aHJlYWQudXNwID0gdXNwOwogCXAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZyljaGlsZHN0YWNrOworCisJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQorCQl0YXNrX3RocmVhZF9pbmZvKHApLT50cF92YWx1ZSA9IHJlZ3MtPmQ1OworCiAJLyoKIAkgKiBNdXN0IHNhdmUgdGhlIGN1cnJlbnQgU0ZDL0RGQyB2YWx1ZSwgTk9UIHRoZSB2YWx1ZSB3aGVuCiAJICogdGhlIHBhcmVudCB3YXMgbGFzdCBkZXNjaGVkdWxlZCAtIFJHSCAgMTAtMDgtOTYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCmluZGV4IDFmYzIxN2UuLjYxNmU1OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjQ1LDYgKzI0NSwxMSBAQAogCQkJcmV0ID0gLUVGQVVMVDsKIAkJYnJlYWs7CiAKKwljYXNlIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUE6CisJCXJldCA9IHB1dF91c2VyKHRhc2tfdGhyZWFkX2luZm8oY2hpbGQpLT50cF92YWx1ZSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZGUyZDA1ZC4uNGIzODc1MyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jCkBAIC04OTcsMTAgKzg5NywxNyBAQAogCiAJLyogU2V0IHVwIHRvIHJldHVybiBmcm9tIHVzZXJzcGFjZS4gICovCiAJZXJyIHw9IF9fcHV0X3VzZXIoZnJhbWUtPnJldGNvZGUsICZmcmFtZS0+cHJldGNvZGUpOworI2lmZGVmIF9fbWNvbGRmaXJlX18KKwkvKiBtb3ZlbCAjX19OUl9ydF9zaWdyZXR1cm4sZDA7IHRyYXAgIzAgKi8KKwllcnIgfD0gX19wdXRfdXNlcigweDIwM2MwMDAwLCAobG9uZyBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUgKyAwKSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoMHgwMDAwNGU0MCArIChfX05SX3J0X3NpZ3JldHVybiA8PCAxNiksCisJCQkgIChsb25nIF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSArIDQpKTsKKyNlbHNlCiAJLyogbW92ZXEgIyxkMDsgbm90YiBkMDsgdHJhcCAjMCAqLwogCWVyciB8PSBfX3B1dF91c2VyKDB4NzAwMDQ2MDAgKyAoKF9fTlJfcnRfc2lncmV0dXJuIF4gMHhmZikgPDwgMTYpLAogCQkJICAobG9uZyBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUgKyAwKSk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoMHg0ZTQwLCAoc2hvcnQgX191c2VyICopKGZyYW1lLT5yZXRjb2RlICsgNCkpOworI2VuZGlmCiAKIAlpZiAoZXJyKQogCQlnb3RvIGdpdmVfc2lnc2VndjsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzX202OGsuYyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzX202OGsuYwppbmRleCAyMThmNDQxLi5lM2FkMmQ2IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jCkBAIC0yOCw2ICsyOCwxMSBAQAogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKworYXNtbGlua2FnZSBpbnQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpOwogCiBhc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCiAJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLApAQCAtNTk1LDMgKzYwMCw3OSBAQAogCQkJOiAiZCIgKF9fYSksICJkIiAoX19iKSwgImQiIChfX2MpKTsKIAlyZXR1cm4gX19yZXM7CiB9CisKK2FzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfZ2V0X3RocmVhZF9hcmVhKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dHBfdmFsdWU7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19zZXRfdGhyZWFkX2FyZWEodW5zaWduZWQgbG9uZyB0cCkKK3sKKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnRwX3ZhbHVlID0gdHA7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgc3lzY2FsbCBnZXRzIGl0cyBhcmd1bWVudHMgaW4gQTAgKG1lbSksIEQyIChvbGR2YWwpIGFuZAorICAgRDEgKG5ld3ZhbCkuICAqLworYXNtbGlua2FnZSBpbnQKK3N5c19hdG9taWNfY21weGNoZ18zMih1bnNpZ25lZCBsb25nIG5ld3ZhbCwgaW50IG9sZHZhbCwgaW50IGQzLCBpbnQgZDQsIGludCBkNSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgKiBtZW0pCit7CisJLyogVGhpcyB3YXMgYm9ycm93ZWQgZnJvbSBBUk0ncyBpbXBsZW1lbnRhdGlvbi4gICovCisJZm9yICg7OykgeworCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCQlwZ2RfdCAqcGdkOworCQlwbWRfdCAqcG1kOworCQlwdGVfdCAqcHRlOworCQlzcGlubG9ja190ICpwdGw7CisJCXVuc2lnbmVkIGxvbmcgbWVtX3ZhbHVlOworCisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJcGdkID0gcGdkX29mZnNldChtbSwgKHVuc2lnbmVkIGxvbmcpbWVtKTsKKwkJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKKwkJCWdvdG8gYmFkX2FjY2VzczsKKwkJcG1kID0gcG1kX29mZnNldChwZ2QsICh1bnNpZ25lZCBsb25nKW1lbSk7CisJCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCisJCQlnb3RvIGJhZF9hY2Nlc3M7CisJCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgKHVuc2lnbmVkIGxvbmcpbWVtLCAmcHRsKTsKKwkJaWYgKCFwdGVfcHJlc2VudCgqcHRlKSB8fCAhcHRlX2RpcnR5KCpwdGUpCisJCSAgICB8fCAhcHRlX3dyaXRlKCpwdGUpKSB7CisJCQlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKKwkJCWdvdG8gYmFkX2FjY2VzczsKKwkJfQorCisJCW1lbV92YWx1ZSA9ICptZW07CisJCWlmIChtZW1fdmFsdWUgPT0gb2xkdmFsKQorCQkJKm1lbSA9IG5ld3ZhbDsKKworCQlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJcmV0dXJuIG1lbV92YWx1ZTsKKworCSAgICAgIGJhZF9hY2Nlc3M6CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCS8qIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IGEgYmFkIGFjY2Vzcywgd2UgY2FuIGdldCBoZXJlIGlmCisJCSAgIGEgbWVtb3J5IHdlJ3JlIHRyeWluZyB0byB3cml0ZSB0byBzaG91bGQgYmUgY29waWVkLW9uLXdyaXRlLgorCQkgICBNYWtlIHRoZSBrZXJuZWwgZG8gdGhlIG5lY2Vzc2FyeSBwYWdlIHN0dWZmLCB0aGVuIHJlLWl0ZXJhdGUuCisJCSAgIFNpbXVsYXRlIGEgd3JpdGUgYWNjZXNzIGZhdWx0IHRvIGRvIHRoYXQuICAqLworCQl7CisJCQkvKiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGZ1bmN0aW9uIGNvcnJlc3BvbmRzIHRvCisJCQkgICBEMSwgd2hpY2ggaXMgdGhlIGZpcnN0IGZpZWxkIG9mIHN0cnVjdCBwdF9yZWdzLiAgKi8KKwkJCXN0cnVjdCBwdF9yZWdzICpmcCA9IChzdHJ1Y3QgcHRfcmVncyAqKSZuZXd2YWw7CisKKwkJCS8qICczJyBpcyBhbiBSTVcgZmxhZy4gICovCisJCQlpZiAoZG9fcGFnZV9mYXVsdChmcCwgKHVuc2lnbmVkIGxvbmcpbWVtLCAzKSkKKwkJCQkvKiBJZiB0aGUgZG9fcGFnZV9mYXVsdCgpIGZhaWxlZCwgd2UgZG9uJ3QKKwkJCQkgICBoYXZlIGFueXRoaW5nIG1lYW5pbmdmdWwgdG8gcmV0dXJuLgorCQkJCSAgIFRoZXJlIHNob3VsZCBiZSBhIFNJR1NFR1YgcGVuZGluZyBmb3IKKwkJCQkgICB0aGUgcHJvY2Vzcy4gICovCisJCQkJcmV0dXJuIDB4ZGVhZGJlZWY7CisJCX0KKwl9Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19hdG9taWNfYmFycmllcih2b2lkKQoreworCS8qIG5vIGNvZGUgbmVlZGVkIGZvciB1bmlwcm9jcyAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9NYWtlZmlsZSBiL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUKaW5kZXggZGFlYmQ4MC4uYjhkNGM4MyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9NYWtlZmlsZQorKysgYi9hcmNoL202OGsvbWFjL01ha2VmaWxlCkBAIC0zLDQgKzMsNCBAQAogIwogCiBvYmoteQkJOj0gY29uZmlnLm8gbWFjaW50cy5vIGlvcC5vIHZpYS5vIG9zcy5vIHBzYy5vIFwKLQkJCWJhYm9vbi5vIG1hY2JvaW5nLm8gZGVidWcubyBtaXNjLm8KKwkJCWJhYm9vbi5vIG1hY2JvaW5nLm8gbWlzYy5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwppbmRleCBiZTAxNzk4Li4wMzU2ZGE5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FkYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N1ZGEuaD4KIAogI2RlZmluZSBCT09USU5GT19DT01QQVRfMV8wCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC00NCwxMiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNfb3NzLmg+CiAjaW5jbHVkZSA8YXNtL21hY19wc2MuaD4KIAotLyogcGxhdGZvcm0gZGV2aWNlIGluZm8gKi8KLQotI2RlZmluZSBTV0lNX0lPX1NJWkUgMHgyMDAwCS8qIFNXSU0gSU8gcmVzb3VyY2Ugc2l6ZSAqLwotCiAvKiBNYWMgYm9vdGluZm8gc3RydWN0ICovCi0KIHN0cnVjdCBtYWNfYm9vdGVyX2RhdGEgbWFjX2JpX2RhdGE7CiAKIC8qIFRoZSBwaHlzLiB2aWRlbyBhZGRyLiAtIG1pZ2h0IGJlIGJvZ3VzIG9uIHNvbWUgbWFjaGluZXMgKi8KQEAgLTcwLDggKzY3LDYgQEAKIAogZXh0ZXJuIHZvaWQgbWFjX21rc291bmQodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogCi1leHRlcm4gdm9pZCBudWJ1c19zd2VlcF92aWRlbyh2b2lkKTsKLQogc3RhdGljIHZvaWQgbWFjX2dldF9tb2RlbChjaGFyICpzdHIpOwogc3RhdGljIHZvaWQgbWFjX2lkZW50aWZ5KHZvaWQpOwogc3RhdGljIHZvaWQgbWFjX3JlcG9ydF9oYXJkd2FyZSh2b2lkKTsKQEAgLTE2OCwxMiArMTYzLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVApIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUF9NT0RVTEUpCiAJbWFjaF9iZWVwID0gbWFjX21rc291bmQ7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCi0jaWYgMAotCW1hY2hfaGVhcnRiZWF0ID0gbWFjX2hlYXJ0YmVhdDsKLQltYWNoX2hlYXJ0YmVhdF9pcnEgPSBJUlFfTUFDX1RJTUVSOwotI2VuZGlmCi0jZW5kaWYKIAogCS8qCiAJICogRGV0ZXJtaW5lIGhhcmR3YXJlIHByZXNlbnQKQEAgLTE5MSwyNyArMTgwLDE5IEBACiAJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9JSUNJCiAJICAgIHx8IG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9JSUZYKQogCQltYWNoX2wyX2ZsdXNoID0gbWFjX2NhY2hlX2NhcmRfZmx1c2g7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBtYWNoaW5lIHNwZWNpZmljIGZpeHVwcy4KLQkgKi8KLQotI2lmZGVmIE9MRF9OVUJVU19DT0RFCi0JbnVidXNfc3dlZXBfdmlkZW8oKTsKLSNlbmRpZgogfQogCiAKIC8qCi0gKglNYWNpbnRvc2ggVGFibGU6IGhhcmRjb2RlZCBtb2RlbCBjb25maWd1cmF0aW9uIGRhdGEuCisgKiBNYWNpbnRvc2ggVGFibGU6IGhhcmRjb2RlZCBtb2RlbCBjb25maWd1cmF0aW9uIGRhdGEuCiAgKgotICoJTXVjaCBvZiB0aGlzIHdhcyBkZWZpbmVkIGJ5IEFsYW4sIGJhc2VkIG9uIHdobyBrbm93cyB3aGF0IGRvY3MuCi0gKglJJ3ZlIGFkZGVkIGEgbG90IG1vcmUsIGFuZCBzb21lIG9mIHRoYXQgd2FzIHB1cmUgZ3Vlc3N3b3JrIGJhc2VkCi0gKglvbiBoYXJkd2FyZSBwYWdlcyBwcmVzZW50IG9uIHRoZSBNYWMgd2ViIHNpdGUuIFBvc3NpYmx5IHdpbGRseQotICoJaW5hY2N1cmF0ZSwgc28gbG9vayBoZXJlIGlmIGEgbmV3IE1hYyBtb2RlbCB3b24ndCBydW4uIEV4YW1wbGU6IGlmCi0gKglhIE1hYyBjcmFzaGVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBWSUExIHJlZ2lzdGVycyBoYXZlIGJlZW4gZHVtcGVkCi0gKgl0byB0aGUgc2NyZWVuLCBpdCBwcm9iYWJseSBkaWVkIGF0dGVtcHRpbmcgdG8gcmVhZCBEaXJCIG9uIGEgUkJWLgotICoJTWVhbmluZyBpdCBzaG91bGQgaGF2ZSBNQUNfVklBX0lJY2kgaGVyZSA6LSkKKyAqIE11Y2ggb2YgdGhpcyB3YXMgZGVmaW5lZCBieSBBbGFuLCBiYXNlZCBvbiB3aG8ga25vd3Mgd2hhdCBkb2NzLgorICogSSd2ZSBhZGRlZCBhIGxvdCBtb3JlLCBhbmQgc29tZSBvZiB0aGF0IHdhcyBwdXJlIGd1ZXNzd29yayBiYXNlZAorICogb24gaGFyZHdhcmUgcGFnZXMgcHJlc2VudCBvbiB0aGUgTWFjIHdlYiBzaXRlLiBQb3NzaWJseSB3aWxkbHkKKyAqIGluYWNjdXJhdGUsIHNvIGxvb2sgaGVyZSBpZiBhIG5ldyBNYWMgbW9kZWwgd29uJ3QgcnVuLiBFeGFtcGxlOiBpZgorICogYSBNYWMgY3Jhc2hlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgVklBMSByZWdpc3RlcnMgaGF2ZSBiZWVuIGR1bXBlZAorICogdG8gdGhlIHNjcmVlbiwgaXQgcHJvYmFibHkgZGllZCBhdHRlbXB0aW5nIHRvIHJlYWQgRGlyQiBvbiBhIFJCVi4KKyAqIE1lYW5pbmcgaXQgc2hvdWxkIGhhdmUgTUFDX1ZJQV9JSWNpIGhlcmUgOi0pCiAgKi8KIAogc3RydWN0IG1hY19tb2RlbCAqbWFjaW50b3NoX2NvbmZpZzsKQEAgLTIxOSw3ICsyMDAsNyBAQAogCiBzdGF0aWMgc3RydWN0IG1hY19tb2RlbCBtYWNfZGF0YV90YWJsZVtdID0gewogCS8qCi0JICoJV2UnbGwgcHJldGVuZCB0byBiZSBhIE1hY2ludG9zaCBJSSwgdGhhdCdzIHByZXR0eSBzYWZlLgorCSAqIFdlJ2xsIHByZXRlbmQgdG8gYmUgYSBNYWNpbnRvc2ggSUksIHRoYXQncyBwcmV0dHkgc2FmZS4KIAkgKi8KIAogCXsKQEAgLTIzMCwxMiArMjExLDExIEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0lXTQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0lXTSwKIAl9LAogCiAJLyoKLQkgKglPcmlnaW5hbCBNYWNJSSBoYXJkd2FyZQotCSAqCisJICogT3JpZ2luYWwgTWFjIElJIGhhcmR3YXJlCiAJICovCiAKIAl7CkBAIC0yNDYsNyArMjI2LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVgsCiAJCS5uYW1lCQk9ICJJSXgiLApAQCAtMjU1LDcgKzIzNSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUNYLAogCQkubmFtZQkJPSAiSUljeCIsCkBAIC0yNjQsNyArMjQ0LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1NFMzAsCiAJCS5uYW1lCQk9ICJTRS8zMCIsCkBAIC0yNzMsMTMgKzI1MywxMyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglXZWlyZGlmaWVkIE1hY0lJIGhhcmR3YXJlIC0gYWxsIHN1YnRseSBkaWZmZXJlbnQuIEdlZSB0aGFua3MKLQkgKglBcHBsZS4gQWxsIHRoZXNlIGJveGVzIHNlZW0gdG8gaGF2ZSBWSUEyIGluIGEgZGlmZmVyZW50IHBsYWNlIHRvCi0JICoJdGhlIE1hY0lJICgrMUEwMDAgcmF0aGVyIHRoYW4gKzQwMDApCisJICogV2VpcmRpZmllZCBNYWMgSUkgaGFyZHdhcmUgLSBhbGwgc3VidGx5IGRpZmZlcmVudC4gR2VlIHRoYW5rcworCSAqIEFwcGxlLiBBbGwgdGhlc2UgYm94ZXMgc2VlbSB0byBoYXZlIFZJQTIgaW4gYSBkaWZmZXJlbnQgcGxhY2UgdG8KKwkgKiB0aGUgTWFjIElJICgrMUEwMDAgcmF0aGVyIHRoYW4gKzQwMDApCiAJICogQ1NBOiBzZWUgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGVjaG5vdGVzL2h3L2h3XzA5Lmh0bWwKIAkgKi8KIApAQCAtMjkxLDcgKzI3MSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUZYLAogCQkubmFtZQkJPSAiSUlmeCIsCkBAIC0zMDAsNyArMjgwLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9JT1AsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJU0ksCiAJCS5uYW1lCQk9ICJJSXNpIiwKQEAgLTMwOSw3ICsyODksNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlWSSwKIAkJLm5hbWUJCT0gIklJdmkiLApAQCAtMzE4LDcgKzI5OCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZYLAogCQkubmFtZQkJPSAiSUl2eCIsCkBAIC0zMjcsMTEgKzMwNywxMSBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglDbGFzc2ljIG1vZGVscyAoZ3Vlc3Npbmc6IHNpbWlsYXIgdG8gU0UvMzAgPz8gTm9wZSwgc2ltaWxhciB0byBMQyAuLi4pCisJICogQ2xhc3NpYyBtb2RlbHMgKGd1ZXNzaW5nOiBzaW1pbGFyIHRvIFNFLzMwPyBOb3BlLCBzaW1pbGFyIHRvIExDLi4uKQogCSAqLwogCiAJewpAQCAtMzQyLDcgKzMyMiw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DQ0wsCiAJCS5uYW1lCQk9ICJDb2xvciBDbGFzc2ljIiwKQEAgLTM1MSwxMSArMzMxLDExIEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCVNvbWUgTWFjIExDIG1hY2hpbmVzLiBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIElJY2ksIEFEQiBsaWtlIElJc2kKKwkgKiBTb21lIE1hYyBMQyBtYWNoaW5lcy4gQmFzaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBJSWNpLCBBREIgbGlrZSBJSXNpCiAJICovCiAKIAl7CkBAIC0zNjYsNyArMzQ2LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUksCiAJCS5uYW1lCQk9ICJMQyBJSSIsCkBAIC0zNzUsNyArMzU1LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUlJLAogCQkubmFtZQkJPSAiTEMgSUlJIiwKQEAgLTM4NCwxNyArMzY0LDE3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCVF1YWRyYS4gVmlkZW8gaXMgYXQgMHhGOTAwMDAwMCwgdmlhIGlzIGxpa2UgYSBNYWNJSS4gV2UgbGFiZWwgaXQgZGlmZmVyZW50bHkKLQkgKglhcyBzb21lIG9mIHRoZSBzdHVmZiBjb25uZWN0ZWQgdG8gVklBMiBzZWVtcyBkaWZmZXJlbnQuIEJldHRlciBTQ1NJIGNoaXAgYW5kCi0JICoJb25ib2FyZCBldGhlcm5ldCB1c2luZyBhIE5hdFNlbWkgU09OSUMgZXhjZXB0IHRoZSA2NjBBViBhbmQgODQwQVYgd2hpY2ggdXNlIGFuCi0JICoJQU1EIDc5Qzk0MCAoTUFDRSkuCi0JICoJVGhlIDcwMCwgOTAwIGFuZCA5NTAgaGF2ZSBzb21lIEkvTyBjaGlwcyBpbiB0aGUgd3JvbmcgcGxhY2UgdG8KLQkgKgljb25mdXNlIHVzLiBUaGUgODQwQVYgaGFzIGEgU0NTSSBsb2NhdGlvbiBvZiBpdHMgb3duIChzYW1lIGFzCi0JICoJdGhlIDY2MEFWKS4KKwkgKiBRdWFkcmEuIFZpZGVvIGlzIGF0IDB4RjkwMDAwMDAsIHZpYSBpcyBsaWtlIGEgTWFjSUkuIFdlIGxhYmVsIGl0CisJICogZGlmZmVyZW50bHkgYXMgc29tZSBvZiB0aGUgc3R1ZmYgY29ubmVjdGVkIHRvIFZJQTIgc2VlbXMgZGlmZmVyZW50LgorCSAqIEJldHRlciBTQ1NJIGNoaXAgYW5kIG9uYm9hcmQgZXRoZXJuZXQgdXNpbmcgYSBOYXRTZW1pIFNPTklDIGV4Y2VwdAorCSAqIHRoZSA2NjBBViBhbmQgODQwQVYgd2hpY2ggdXNlIGFuIEFNRCA3OUM5NDAgKE1BQ0UpLgorCSAqIFRoZSA3MDAsIDkwMCBhbmQgOTUwIGhhdmUgc29tZSBJL08gY2hpcHMgaW4gdGhlIHdyb25nIHBsYWNlIHRvCisJICogY29uZnVzZSB1cy4gVGhlIDg0MEFWIGhhcyBhIFNDU0kgbG9jYXRpb24gb2YgaXRzIG93biAoc2FtZSBhcworCSAqIHRoZSA2NjBBVikuCiAJICovCiAKIAl7CkBAIC00MDUsNyArMzg1LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjA1X0FDQywKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MDUiLApAQCAtNDE0LDcgKzM5NCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYxMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MTAiLApAQCAtNDI0LDcgKzQwNCw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MzAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjMwIiwKQEAgLTQzNSw3ICs0MTUsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjUwLAogCQkubmFtZQkJPSAiUXVhZHJhIDY1MCIsCkBAIC00NDUsOSArNDI1LDkgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LAotCS8qCVRoZSBRNzAwIGRvZXMgaGF2ZSBhIE5TIFNvbmljICovCisJLyogVGhlIFE3MDAgZG9lcyBoYXZlIGEgTlMgU29uaWMgKi8KIAl7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTcwMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA3MDAiLApAQCAtNDU3LDcgKzQzNyw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E4MDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgODAwIiwKQEAgLTQ2Nyw3ICs0NDcsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RODQwLAogCQkubmFtZQkJPSAiUXVhZHJhIDg0MEFWIiwKQEAgLTQ3Nyw3ICs0NTcsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1BTQywKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfTUFDRSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfQVYKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9BViwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTkwMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA5MDAiLApAQCAtNDg3LDcgKzQ2Nyw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0lPUCwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTk1MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA5NTAiLApAQCAtNDk3LDYwICs0NzcsNjAgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0lPUAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fSU9QLAogCX0sCiAKIAkvKgotCSAqCVBlcmZvcm1hIC0gbW9yZSBMQyB0eXBlIG1hY2hpbmVzCisJICogUGVyZm9ybWEgLSBtb3JlIExDIHR5cGUgbWFjaGluZXMKIAkgKi8KIAogCXsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDYwLAotCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ2MCIsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA0NjAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A0NzUsCi0JCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDc1IiwKKwkJLm5hbWUJCT0gIlBlcmZvcm1hIDQ3NSIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1RiwKLQkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NzUiLAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNDc1IiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1MjAsCi0JCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTIwIiwKKwkJLm5hbWUJCT0gIlBlcmZvcm1hIDUyMCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU1MCwKLQkJLm5hbWUJCT0gICJQZXJmb3JtYSA1NTAiLAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNTUwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCi0JLyogVGhlc2UgaGF2ZSB0aGUgY29tbSBzbG90LCBhbmQgdGhlcmVmb3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBTT05JQyBldGhlcm5ldCAqLworCS8qIFRoZXNlIGhhdmUgdGhlIGNvbW0gc2xvdCwgYW5kIHRoZXJlZm9yZSBwb3NzaWJseSBTT05JQyBldGhlcm5ldCAqLwogCXsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTc1LAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNTc1IiwKQEAgLTU2MCw3ICs1NDAsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1ODgsCiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA1ODgiLApAQCAtNTcxLDcgKzU1MSw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfVFYsCiAJCS5uYW1lCQk9ICJUViIsCkBAIC01ODAsNyArNTYwLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A2MDAsCiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA2MDAiLApAQCAtNTg5LDE0ICs1NjksMTQgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJQ2VudHJpcyAtIGp1c3QgZ3Vlc3NpbmcgYWdhaW47IG1heWJlIGxpa2UgUXVhZHJhCisJICogQ2VudHJpcyAtIGp1c3QgZ3Vlc3NpbmcgYWdhaW47IG1heWJlIGxpa2UgUXVhZHJhLgorCSAqIFRoZSBDNjEwIG1heSBvciBtYXkgbm90IGhhdmUgU09OSUMuIFdlIHByb2JlIHRvIG1ha2Ugc3VyZS4KIAkgKi8KIAotCS8qIFRoZSBDNjEwIG1heSBvciBtYXkgbm90IGhhdmUgU09OSUMuICBXZSBwcm9iZSB0byBtYWtlIHN1cmUgKi8KIAl7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzYxMCwKIAkJLm5hbWUJCT0gIkNlbnRyaXMgNjEwIiwKQEAgLTYwNiw3ICs1ODYsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DNjUwLAogCQkubmFtZQkJPSAiQ2VudHJpcyA2NTAiLApAQCAtNjE2LDcgKzU5Niw3IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NjAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDY2MEFWIiwKQEAgLTYyNiw3ICs2MDYsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1BTQywKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfTUFDRSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfQVYKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9BViwKIAl9LAogCiAJLyoKQEAgLTY0Myw3ICs2MjMsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTQ1LAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE0NSIsCkBAIC02NTIsNyArNjMyLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE1MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNTAiLApAQCAtNjYyLDcgKzY0Miw3IEBACiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfUEIsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTYwIiwKQEAgLTY3MSw3ICs2NTEsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTY1LAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2NSIsCkBAIC02ODAsNyArNjYwLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2NUMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTY1YyIsCkBAIC02ODksNyArNjY5LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE3MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNzAiLApAQCAtNjk4LDcgKzY3OCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxODAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTgwIiwKQEAgLTcwNyw3ICs2ODcsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTgwQywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxODBjIiwKQEAgLTcxNiw3ICs2OTYsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTkwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE5MCIsCkBAIC03MjYsNyArNzA2LDcgQEAKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9CQUJPT04sCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEI1MjAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgNTIwIiwKQEAgLTczNiw3ICs3MTYsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgpAQCAtNzU3LDcgKzczNyw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyMzAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDIzMCIsCkBAIC03NjYsNyArNzQ2LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI1MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjUwIiwKQEAgLTc3NSw3ICs3NTUsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjcwQywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjcwYyIsCkBAIC03ODQsNyArNzY0LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI4MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwIiwKQEAgLTc5Myw3ICs3NzMsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjgwQywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwYyIsCkBAIC04MDIsMTcgKzc4Miw0NCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJT3RoZXIgc3R1ZmYgPz8KKwkgKiBPdGhlciBzdHVmZj8KIAkgKi8KKwogCXsKIAkJLmlkZW50CQk9IC0xCiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzY2NfYV9yc3Jjc1tdID0geworCXsgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfSwKKwl7IC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNjY19iX3JzcmNzW10gPSB7CisJeyAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB9LAorCXsgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NjX2FfcGRldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2NjIiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc2NjX2FfcnNyY3MpLAorCS5yZXNvdXJjZSAgICAgICA9IHNjY19hX3JzcmNzLAorfTsKK0VYUE9SVF9TWU1CT0woc2NjX2FfcGRldik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NjX2JfcGRldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2NjIiwKKwkuaWQgICAgICAgICAgICAgPSAxLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc2NjX2JfcnNyY3MpLAorCS5yZXNvdXJjZSAgICAgICA9IHNjY19iX3JzcmNzLAorfTsKK0VYUE9SVF9TWU1CT0woc2NjX2JfcGRldik7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBtYWNfaWRlbnRpZnkodm9pZCkKIHsKIAlzdHJ1Y3QgbWFjX21vZGVsICptOwpAQCAtODIzLDcgKzgzMCw4IEBACiAJCS8qIG5vIGJvb3RpbmZvIG1vZGVsIGlkIC0+IE5ldEJTRCBib290ZXIgd2FzIHVzZWQhICovCiAJCS8qIFhYWCBGSVhNRTogYnJlYWtzIGZvciBtb2RlbCA+IDMxICovCiAJCW1vZGVsID0gKG1hY19iaV9kYXRhLmNwdWlkID4+IDIpICYgNjM7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIGJvb3RpbmZvIG1vZGVsIElELCB1c2luZyBjcHVpZCBpbnN0ZWFkIChoZXksIHVzZSBQZW5ndWluISlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBib290aW5mbyBtb2RlbCBJRCwgdXNpbmcgY3B1aWQgaW5zdGVhZCAiCisJCSAgICAgICAiKG9ic29sZXRlIGJvb3Rsb2FkZXI/KVxuIik7CiAJfQogCiAJbWFjaW50b3NoX2NvbmZpZyA9IG1hY19kYXRhX3RhYmxlOwpAQCAtODM0LDEwICs4NDIsMjkgQEAKIAkJfQogCX0KIAotCS8qIFdlIG5lZWQgdG8gcHJlLWluaXQgdGhlIElPUHMsIGlmIGFueS4gT3RoZXJ3aXNlICovCi0JLyogdGhlIHNlcmlhbCBjb25zb2xlIHdvbid0IHdvcmsgaWYgdGhlIHVzZXIgaGFkICAgKi8KLQkvKiB0aGUgc2VyaWFsIHBvcnRzIHNldCB0byAiRmFzdGVyIiBtb2RlIGluIE1hY09TLiAqLworCS8qIFNldCB1cCBzZXJpYWwgcG9ydCByZXNvdXJjZXMgZm9yIHRoZSBjb25zb2xlIGluaXRjYWxsLiAqLwogCisJc2NjX2FfcnNyY3NbMF0uc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KSBtYWNfYmlfZGF0YS5zY2NiYXNlICsgMjsKKwlzY2NfYV9yc3Jjc1swXS5lbmQgICA9IHNjY19hX3JzcmNzWzBdLnN0YXJ0OworCXNjY19iX3JzcmNzWzBdLnN0YXJ0ID0gKHJlc291cmNlX3NpemVfdCkgbWFjX2JpX2RhdGEuc2NjYmFzZTsKKwlzY2NfYl9yc3Jjc1swXS5lbmQgICA9IHNjY19iX3JzcmNzWzBdLnN0YXJ0OworCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5zY2NfdHlwZSkgeworCWNhc2UgTUFDX1NDQ19QU0M6CisJCXNjY19hX3JzcmNzWzFdLnN0YXJ0ID0gc2NjX2FfcnNyY3NbMV0uZW5kID0gSVJRX01BQ19TQ0NfQTsKKwkJc2NjX2JfcnNyY3NbMV0uc3RhcnQgPSBzY2NfYl9yc3Jjc1sxXS5lbmQgPSBJUlFfTUFDX1NDQ19COworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzY2NfYV9yc3Jjc1sxXS5zdGFydCA9IHNjY19hX3JzcmNzWzFdLmVuZCA9IElSUV9NQUNfU0NDOworCQlzY2NfYl9yc3Jjc1sxXS5zdGFydCA9IHNjY19iX3JzcmNzWzFdLmVuZCA9IElSUV9NQUNfU0NDOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gcHJlLWluaXQgdGhlIElPUHMsIGlmIGFueS4gT3RoZXJ3aXNlCisJICogdGhlIHNlcmlhbCBjb25zb2xlIHdvbid0IHdvcmsgaWYgdGhlIHVzZXIgaGFkCisJICogdGhlIHNlcmlhbCBwb3J0cyBzZXQgdG8gIkZhc3RlciIgbW9kZSBpbiBNYWNPUy4KKwkgKi8KIAlpb3BfcHJlaW5pdCgpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRGV0ZWN0ZWQgTWFjaW50b3NoIG1vZGVsOiAlZCBcbiIsIG1vZGVsKTsKQEAgLTg0Niw3ICs4NzMsOCBAQAogCSAqIFJlcG9ydCBib290ZXIgZGF0YToKIAkgKi8KIAlwcmludGsoS0VSTl9ERUJVRyAiIFBlbmd1aW4gYm9vdGluZm8gZGF0YTpcbiIpOwotCXByaW50ayhLRVJOX0RFQlVHICIgVmlkZW86IGFkZHIgMHglbHggcm93IDB4JWx4IGRlcHRoICVseCBkaW1lbnNpb25zICVsZCB4ICVsZFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiIFZpZGVvOiBhZGRyIDB4JWx4ICIKKwkJInJvdyAweCVseCBkZXB0aCAlbHggZGltZW5zaW9ucyAlbGQgeCAlbGRcbiIsCiAJCW1hY19iaV9kYXRhLnZpZGVvYWRkciwgbWFjX2JpX2RhdGEudmlkZW9yb3csCiAJCW1hY19iaV9kYXRhLnZpZGVvZGVwdGgsIG1hY19iaV9kYXRhLmRpbWVuc2lvbnMgJiAweEZGRkYsCiAJCW1hY19iaV9kYXRhLmRpbWVuc2lvbnMgPj4gMTYpOwpAQCAtODYzLDYgKzg5MSwxMCBAQAogCW9zc19pbml0KCk7CiAJcHNjX2luaXQoKTsKIAliYWJvb25faW5pdCgpOworCisjaWZkZWYgQ09ORklHX0FEQl9DVURBCisJZmluZF92aWFfY3VkYSgpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtYWNfcmVwb3J0X2hhcmR3YXJlKHZvaWQpCkBAIC04NzYsMjMgKzkwOCw1MCBAQAogCXN0cmNhdChzdHIsIG1hY2ludG9zaF9jb25maWctPm5hbWUpOwogfQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHN3aW1fcmVzb3VyY2VzWzFdOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzd2ltX3JzcmMgPSB7IC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN3aW1fZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3dpbV9wZGV2ID0gewogCS5uYW1lCQk9ICJzd2ltIiwKIAkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHN3aW1fcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBzd2ltX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnN3aW1fcnNyYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYWNfcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnN3aW1fZGV2aWNlCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlc3BfMF9wZGV2ID0geworCS5uYW1lCQk9ICJtYWNfZXNwIiwKKwkuaWQJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVzcF8xX3BkZXYgPSB7CisJLm5hbWUJCT0gIm1hY19lc3AiLAorCS5pZAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc29uaWNfcGRldiA9IHsKKwkubmFtZQkJPSAibWFjc29uaWMiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1hY2VfcGRldiA9IHsKKwkubmFtZQkJPSAibWFjbWFjZSIsCisJLmlkCQk9IC0xLAogfTsKIAogaW50IF9faW5pdCBtYWNfcGxhdGZvcm1faW5pdCh2b2lkKQogewogCXU4ICpzd2ltX2Jhc2U7CiAKKwkvKgorCSAqIFNlcmlhbCBkZXZpY2VzCisJICovCisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjY19hX3BkZXYpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2NjX2JfcGRldik7CisKKwkvKgorCSAqIEZsb3BweSBkZXZpY2UKKwkgKi8KKwogCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+ZmxvcHB5X3R5cGUpIHsKIAljYXNlIE1BQ19GTE9QUFlfU1dJTV9BRERSMToKIAkJc3dpbV9iYXNlID0gKHU4ICopKFZJQTFfQkFTRSArIDB4MUUwMDApOwpAQCAtOTAxLDE2ICs5NjAsNDcgQEAKIAkJc3dpbV9iYXNlID0gKHU4ICopKFZJQTFfQkFTRSArIDB4MTYwMDApOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gMDsKKwkJc3dpbV9iYXNlID0gTlVMTDsKKwkJYnJlYWs7CiAJfQogCi0Jc3dpbV9yZXNvdXJjZXNbMF0ubmFtZSA9ICJzd2ltLXJlZ3MiOwotCXN3aW1fcmVzb3VyY2VzWzBdLnN0YXJ0ID0gKHJlc291cmNlX3NpemVfdClzd2ltX2Jhc2U7Ci0Jc3dpbV9yZXNvdXJjZXNbMF0uZW5kID0gKHJlc291cmNlX3NpemVfdCkoc3dpbV9iYXNlICsgU1dJTV9JT19TSVpFKTsKLQlzd2ltX3Jlc291cmNlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCWlmIChzd2ltX2Jhc2UpIHsKKwkJc3dpbV9yc3JjLnN0YXJ0ID0gKHJlc291cmNlX3NpemVfdCkgc3dpbV9iYXNlLAorCQlzd2ltX3JzcmMuZW5kICAgPSAocmVzb3VyY2Vfc2l6ZV90KSBzd2ltX2Jhc2UgKyAweDIwMDAsCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc3dpbV9wZGV2KTsKKwl9CiAKLQlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMobWFjX3BsYXRmb3JtX2RldmljZXMsCi0JCQkJICAgIEFSUkFZX1NJWkUobWFjX3BsYXRmb3JtX2RldmljZXMpKTsKKwkvKgorCSAqIFNDU0kgZGV2aWNlKHMpCisJICovCisKKwlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPnNjc2lfdHlwZSkgeworCWNhc2UgTUFDX1NDU0lfUVVBRFJBOgorCWNhc2UgTUFDX1NDU0lfUVVBRFJBMzoKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlc3BfMF9wZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBNQUNfU0NTSV9RVUFEUkEyOgorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVzcF8wX3BkZXYpOworCQlpZiAoKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9ROTAwKSB8fAorCQkgICAgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9ROTUwKSkKKwkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXNwXzFfcGRldik7CisJCWJyZWFrOworCX0KKworCS8qCisJICogRXRoZXJuZXQgZGV2aWNlCisJICovCisKKwlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPmV0aGVyX3R5cGUpIHsKKwljYXNlIE1BQ19FVEhFUl9TT05JQzoKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzb25pY19wZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBNQUNfRVRIRVJfTUFDRToKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtYWNlX3BkZXYpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogYXJjaF9pbml0Y2FsbChtYWNfcGxhdGZvcm1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2RlYnVnLmMgYi9hcmNoL202OGsvbWFjL2RlYnVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZTA3NGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL202OGsvbWFjL2RlYnVnLmMKLSAqCi0gKiBTaGFtZWxlc3NseSBzdG9sZW4gKFNDQyBjb2RlIGFuZCBnZW5lcmFsIGZyYW1ld29yaykgZnJvbToKLSAqCi0gKiBsaW51eC9hcmNoL202OGsvYXRhcmkvZGVidWcuYwotICoKLSAqIEF0YXJpIGRlYnVnZ2luZyBhbmQgc2VyaWFsIGNvbnNvbGUgc3R1ZmYKLSAqCi0gKiBBc3NlbWJsZWQgb2YgcGFydHMgb2YgZm9ybWVyIGF0YXJpL2NvbmZpZy5jIDk3LTEyLTE4IGJ5IFJvbWFuIEhvZGVrCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jZGVmaW5lIEJPT1RJTkZPX0NPTVBBVF8xXzAKLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtYWNfdmlkZW9iYXNlOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFjX3Jvd2J5dGVzOwotCi1leHRlcm4gdm9pZCBtYWNfc2VyaWFsX3ByaW50KGNvbnN0IGNoYXIgKik7Ci0KLSNkZWZpbmUgREVCVUdfSEVBRFMKLSN1bmRlZiBERUJVR19TQ1JFRU4KLSNkZWZpbmUgREVCVUdfU0VSSUFMCi0KLS8qCi0gKiBUaGVzZSB0d28gYXV4aWxpYXJ5IGRlYnVnIGZ1bmN0aW9ucyBzaG91bGQgZ28gYXdheSBBU0FQLiBPbmx5IHVzYWdlOgotICogYmVmb3JlIHRoZSBjb25zb2xlIG91dHB1dCBpcyB1cCAoYWZ0ZXIgaGVhZC5TIGNvbWUgc29tZSBvdGhlciBjcnVjaWFsCi0gKiBzZXR1cCByb3V0aW5lcyA6LSkgaXQgcGVybWl0cyB3cml0aW5nICdkYXRhJyB0byB0aGUgc2NyZWVuIGFzIGJpdCBwYXR0ZXJucwotICogKGdvb2QgbHVjayByZWFkaW5nIHRob3NlKS4gSGVscGVkIHRvIGZpZ3VyZSB0aGF0IHRoZSBib290aW5mbyBjb250YWluZWQKLSAqIGdhcmJhZ2UgZGF0YSBvbiB0aGUgYW1vdW50IGFuZCBzaXplIG9mIG1lbW9yeSBjaHVua3MgLi4uCi0gKgotICogVGhlICdwb3MnIGFyZ3VtZW50IG5vdyBzaW1wbHkgbWVhbnMgJ2xpbmVmZWVkIGFmdGVyIHByaW50JyAuLi4KLSAqLwotCi0jaWZkZWYgREVCVUdfU0NSRUVOCi1zdGF0aWMgaW50IHBlbmcsIGxpbmU7Ci0jZW5kaWYKLQotI2lmIDAKLQotdm9pZCBtYWNfZGVidWdnaW5nX3Nob3J0KGludCBwb3MsIHNob3J0IG51bSkKLXsKLSNpZmRlZiBERUJVR19TQ1JFRU4KLQl1bnNpZ25lZCBjaGFyICpwZW5nb2Zmc2V0OwotCXVuc2lnbmVkIGNoYXIgKnBwdHI7Ci0JaW50IGk7Ci0jZW5kaWYKLQotI2lmZGVmIERFQlVHX1NFUklBTAotCXByaW50aygiZGVidWc6ICVkICFcbiIsIG51bSk7Ci0jZW5kaWYKLQotI2lmZGVmIERFQlVHX1NDUkVFTgotCWlmICghTUFDSF9JU19NQUMpIHsKLQkJLyogcHJpbnRrKCJkZWJ1ZzogJWQgIVxuIiwgbnVtKTsgKi8KLQkJcmV0dXJuOwotCX0KLQotCS8qIGNhbGN1bGF0ZSBjdXJyZW50IG9mZnNldCAqLwotCXBlbmdvZmZzZXQgPSAodW5zaWduZWQgY2hhciAqKW1hY192aWRlb2Jhc2UgKwotCQkoMTUwK2xpbmUqMikgKiBtYWNfcm93Ynl0ZXMgKyA4MCAqIHBlbmc7Ci0KLQlwcHRyID0gcGVuZ29mZnNldDsKLQotCWZvciAoaSA9IDA7IGkgPCA4ICogc2l6ZW9mKHNob3J0KTsgaSsrKSB7IC8qICMgb2YgYml0cyAqLwotCQkvKiAgICAgICAgdmFsdWUgICAgICAgIG1hc2sgZm9yIGJpdCBpLCByZXZlcnNlIG9yZGVyICovCi0JCSpwcHRyKysgPSAobnVtICYgKDEgPDwgKDgqc2l6ZW9mKHNob3J0KS1pLTEpKSA/IDB4RkYgOiAweDAwKTsKLQl9Ci0KLQlwZW5nKys7Ci0KLQlpZiAocG9zKSB7Ci0JCWxpbmUrKzsKLQkJcGVuZyA9IDA7Ci0JfQotI2VuZGlmCi19Ci0KLXZvaWQgbWFjX2RlYnVnZ2luZ19sb25nKGludCBwb3MsIGxvbmcgYWRkcikKLXsKLSNpZmRlZiBERUJVR19TQ1JFRU4KLQl1bnNpZ25lZCBjaGFyICpwZW5nb2Zmc2V0OwotCXVuc2lnbmVkIGNoYXIgKnBwdHI7Ci0JaW50IGk7Ci0jZW5kaWYKLQotI2lmZGVmIERFQlVHX1NFUklBTAotCXByaW50aygiZGVidWc6ICMlbGQgIVxuIiwgYWRkcik7Ci0jZW5kaWYKLQotI2lmZGVmIERFQlVHX1NDUkVFTgotCWlmICghTUFDSF9JU19NQUMpIHsKLQkJLyogcHJpbnRrKCJkZWJ1ZzogIyVsZCAhXG4iLCBhZGRyKTsgKi8KLQkJcmV0dXJuOwotCX0KLQotCXBlbmdvZmZzZXQ9KHVuc2lnbmVkIGNoYXIgKikobWFjX3ZpZGVvYmFzZSsoMTUwK2xpbmUqMikqbWFjX3Jvd2J5dGVzKQotCQkgICAgKzgwKnBlbmc7Ci0KLQlwcHRyID0gcGVuZ29mZnNldDsKLQotCWZvciAoaSA9IDA7IGkgPCA4ICogc2l6ZW9mKGxvbmcpOyBpKyspIHsgLyogIyBvZiBiaXRzICovCi0JCSpwcHRyKysgPSAoYWRkciAmICgxIDw8ICg4KnNpemVvZihsb25nKS1pLTEpKSA/IDB4RkYgOiAweDAwKTsKLQl9Ci0KLQlwZW5nKys7Ci0KLQlpZiAocG9zKSB7Ci0JCWxpbmUrKzsKLQkJcGVuZyA9IDA7Ci0JfQotI2VuZGlmCi19Ci0KLSNlbmRpZiAgLyogIDAgICovCi0KLSNpZmRlZiBERUJVR19TRVJJQUwKLS8qCi0gKiBUT0RPOiBzZXJpYWwgZGVidWcgY29kZQotICovCi0KLXN0cnVjdCBtYWNfU0NDIHsKLQl1X2NoYXIgY2hhX2JfY3RybDsKLQl1X2NoYXIgY2hhcl9kdW1teTE7Ci0JdV9jaGFyIGNoYV9hX2N0cmw7Ci0JdV9jaGFyIGNoYXJfZHVtbXkyOwotCXVfY2hhciBjaGFfYl9kYXRhOwotCXVfY2hhciBjaGFyX2R1bW15MzsKLQl1X2NoYXIgY2hhX2FfZGF0YTsKLX07Ci0KLSMgZGVmaW5lIHNjYyAoKigodm9sYXRpbGUgc3RydWN0IG1hY19TQ0MqKW1hY19iaV9kYXRhLnNjY2Jhc2UpKQotCi1zdGF0aWMgaW50IHNjY19wb3J0ID0gLTE7Ci0KLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBtYWNfY29uc29sZV9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiZGVidWciLAotCS5mbGFncwk9IENPTl9QUklOVEJVRkZFUiwKLQkuaW5kZXgJPSAtMSwKLX07Ci0KLS8qCi0gKiBDcnVkZSBoYWNrIHRvIGdldCBjb25zb2xlIG91dHB1dCB0byB0aGUgc2NyZWVuIGJlZm9yZSB0aGUgZnJhbWVidWZmZXIKLSAqIGlzIGluaXRpYWxpemVkIChoYXBwZW5zIGEgbG90IGxhdGVyIGluIDIuMSEpLgotICogV2UganVzdCB1c2UgdGhlIGNvbnNvbGUgcm91dGluZXMgZGVjbGFyZWQgaW4gaGVhZC5TLCB0aGlzIHdpbGwgaW50ZXJmZXJlCi0gKiB3aXRoIHJlZ3VsYXIgZnJhbWVidWZmZXIgY29uc29sZSBvdXRwdXQgYW5kIHNob3VsZCBiZSB1c2VkIGV4Y2x1c2l2ZWx5Ci0gKiB0byBkZWJ1ZyBrZXJuZWwgcHJvYmxlbXMgbWFuaWZlc3RpbmcgYmVmb3JlIGZyYW1lYnVmZmVyIGluaXQgKGFrYSBXU09EKQotICoKLSAqIFRvIGtlZXAgdGhpcyBoYWNrIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgcmVndWxhciBjb25zb2xlIGRyaXZlciwgZWl0aGVyCi0gKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGJlZm9yZS9vbiBmcmFtZWJ1ZmZlciBjb25zb2xlIGluaXQsIG9yIHNpbGVuY2UgdGhpcwotICogZnVuY3Rpb24gYWZ0ZXIgdGhlIGZiY29uIGRyaXZlciBpcyBydW5uaW5nICh3aWxsIGxvc2UgY29uc29sZSBtZXNzYWdlcyE/KS4KLSAqIFRvIGRlYnVnIHJlYWwgZWFybHkgYnVncywgbmVlZCB0byB3cml0ZSBhICdtYWNfcmVnaXN0ZXJfY29uc29sZV9oYWNrKCknCi0gKiB0aGF0IGlzIGNhbGxlZCBmcm9tIHN0YXJ0X2tlcm5lbCgpIGJlZm9yZSBzZXR1cF9hcmNoKCkgYW5kIGp1c3QgcmVnaXN0ZXJzCi0gKiB0aGlzIGRyaXZlciBpZiBNYWMuCi0gKi8KLQotc3RhdGljIHZvaWQgbWFjX2RlYnVnX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCi0JCQkJICAgIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQltYWNfc2VyaWFsX3ByaW50KHN0cik7Ci19Ci0KLQotCi0vKiBNYWM6IGxvb3BzX3Blcl9qaWZmeSBtaW4uIDE5MDAwIF49IC41IHVzOyBNRlBERUxBWSB3YXMgMC42IHVzKi8KLQotI2RlZmluZSB1U0VDIDEKLQotc3RhdGljIGlubGluZSB2b2lkIG1hY19zY2NiX291dChjaGFyIGMpCi17Ci0JaW50IGk7Ci0KLQlkbyB7Ci0JCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCi0JCQliYXJyaWVyKCk7Ci0JfSB3aGlsZSAoIShzY2MuY2hhX2JfY3RybCAmIDB4MDQpKTsgLyogd2FpdCBmb3IgdHggYnVmIGVtcHR5ICovCi0JZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkKLQkJYmFycmllcigpOwotCXNjYy5jaGFfYl9kYXRhID0gYzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1hY19zY2NhX291dChjaGFyIGMpCi17Ci0JaW50IGk7Ci0KLQlkbyB7Ci0JCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCi0JCQliYXJyaWVyKCk7Ci0JfSB3aGlsZSAoIShzY2MuY2hhX2FfY3RybCAmIDB4MDQpKTsgLyogd2FpdCBmb3IgdHggYnVmIGVtcHR5ICovCi0JZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkKLQkJYmFycmllcigpOwotCXNjYy5jaGFfYV9kYXRhID0gYzsKLX0KLQotc3RhdGljIHZvaWQgbWFjX3NjY2JfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJaWYgKCpzdHIgPT0gJ1xuJykKLQkJCW1hY19zY2NiX291dCgnXHInKTsKLQkJbWFjX3NjY2Jfb3V0KCpzdHIrKyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBtYWNfc2NjYV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAotCQkJCSAgIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQl3aGlsZSAoY291bnQtLSkgewotCQlpZiAoKnN0ciA9PSAnXG4nKQotCQkJbWFjX3NjY2Ffb3V0KCdccicpOwotCQltYWNfc2NjYV9vdXQoKnN0cisrKTsKLQl9Ci19Ci0KLQotLyogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGRvIGEgcXVpY2snbidkaXJ0eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgTUZQIG9yCi0gKiBTQ0Mgc2VyaWFsIHBvcnRzLiBUaGV5J3JlIHVzZWQgYnkgdGhlIGRlYnVnZ2luZyBpbnRlcmZhY2UsIGtnZGIsIGFuZCB0aGUKLSAqIHNlcmlhbCBjb25zb2xlIGNvZGUuICovCi0jZGVmaW5lIFNDQ0JfV1JJVEUocmVnLHZhbCkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCWludCBpOwkJCQkJXAotCQlzY2MuY2hhX2JfY3RybCA9IChyZWcpOwkJCVwKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkJCVwKLQkJCWJhcnJpZXIoKTsJCQlcCi0JCXNjYy5jaGFfYl9jdHJsID0gKHZhbCk7CQkJXAotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQkJXAotCQkJYmFycmllcigpOwkJCVwKLQl9IHdoaWxlKDApCi0KLSNkZWZpbmUgU0NDQV9XUklURShyZWcsdmFsKQkJCQlcCi0JZG8gewkJCQkJCVwKLQkJaW50IGk7CQkJCQlcCi0JCXNjYy5jaGFfYV9jdHJsID0gKHJlZyk7CQkJXAotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQkJXAotCQkJYmFycmllcigpOwkJCVwKLQkJc2NjLmNoYV9hX2N0cmwgPSAodmFsKTsJCQlcCi0JCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCQlcCi0JCQliYXJyaWVyKCk7CQkJXAotCX0gd2hpbGUoMCkKLQotLyogbG9vcHNfcGVyX2ppZmZ5IGlzbid0IGluaXRpYWxpemVkIHlldCwgc28gd2UgY2FuJ3QgdXNlIHVkZWxheSgpLiBUaGlzIGRvZXMgYQotICogZGVsYXkgb2YgfiA2MHVzLiAqLwotLyogTWFjOiBsb29wc19wZXJfamlmZnkgbWluLiAxOTAwMCBePSAuNSB1czsgTUZQREVMQVkgd2FzIDAuNiB1cyovCi0jZGVmaW5lIExPTkdfREVMQVkoKQkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCWludCBpOwkJCQkJXAotCQlmb3IgKGkgPSA2MCp1U0VDOyBpID4gMDsgLS1pKQkJXAotCQkgICAgYmFycmllcigpOwkJCQlcCi0JfSB3aGlsZSgwKQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbWFjX2luaXRfc2NjX3BvcnQoaW50IGNmbGFnLCBpbnQgcG9ydCkKLXsKLQkvKgotCSAqIGJhdWQgcmF0ZXM6IDEyMDAsIDE4MDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5LjJrLCAzOC40aywgNTcuNmssIDExNS4yawotCSAqLwotCi0Jc3RhdGljIGludCBjbGtzcmNfdGFibGVbOV0gPQotCQkvKiByZWcgMTE6IDB4NTAgPSBCUkcsIDB4MDAgPSBSVHhDLCAweDI4ID0gVFJ4QyAqLwotCQl7IDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4MDAsIDB4MDAgfTsKLQlzdGF0aWMgaW50IGNsa21vZGVfdGFibGVbOV0gPQotCQkvKiByZWcgNDogMHg0MCA9IHgxNiwgMHg4MCA9IHgzMiwgMHhjMCA9IHg2NCAqLwotCQl7IDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4YzAsIDB4ODAgfTsKLQlzdGF0aWMgaW50IGRpdl90YWJsZVs5XSA9Ci0JCS8qIHJlZzEyIChCUkcgbG93KSAqLwotCQl7IDk0LCA2MiwgNDYsIDIyLCAxMCwgNCwgMSwgMCwgMCB9OwotCi0JaW50IGJhdWQgPSBjZmxhZyAmIENCQVVEOwotCWludCBjbGtzcmMsIGNsa21vZGUsIGRpdiwgcmVnMywgcmVnNTsKLQotCWlmIChjZmxhZyAmIENCQVVERVgpCi0JCWJhdWQgKz0gQjM4NDAwOwotCWlmIChiYXVkIDwgQjEyMDAgfHwgYmF1ZCA+IEIzODQwMCsyKQotCQliYXVkID0gQjk2MDA7IC8qIHVzZSBkZWZhdWx0IDk2MDBicHMgZm9yIG5vbi1pbXBsZW1lbnRlZCByYXRlcyAqLwotCWJhdWQgLT0gQjEyMDA7IC8qIHRhYmxlcyBzdGFydHMgYXQgMTIwMGJwcyAqLwotCi0JY2xrc3JjICA9IGNsa3NyY190YWJsZVtiYXVkXTsKLQljbGttb2RlID0gY2xrbW9kZV90YWJsZVtiYXVkXTsKLQlkaXYgICAgID0gZGl2X3RhYmxlW2JhdWRdOwotCi0JcmVnMyA9ICgoKGNmbGFnICYgQ1NJWkUpID09IENTOCkgPyAweGMwIDogMHg0MCk7Ci0JcmVnNSA9ICgoKGNmbGFnICYgQ1NJWkUpID09IENTOCkgPyAweDYwIDogMHgyMCkgfCAweDgyIC8qIGFzc2VydCBEVFIvUlRTICovOwotCi0JaWYgKHBvcnQgPT0gMSkgewotCQkodm9pZClzY2MuY2hhX2JfY3RybDsJLyogcmVzZXQgcmVnIHBvaW50ZXIgKi8KLQkJU0NDQl9XUklURSg5LCAweGMwKTsJLyogcmVzZXQgKi8KLQkJTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLwotCQlTQ0NCX1dSSVRFKDQsIChjZmxhZyAmIFBBUkVOQikgPyAoKGNmbGFnICYgUEFST0REKSA/IDB4MDEgOiAweDAzKSA6IDAgfAotCQkJICAgMHgwNCAvKiAxIHN0b3BiaXQgKi8gfAotCQkJICAgY2xrbW9kZSk7Ci0JCVNDQ0JfV1JJVEUoMywgcmVnMyk7Ci0JCVNDQ0JfV1JJVEUoNSwgcmVnNSk7Ci0JCVNDQ0JfV1JJVEUoOSwgMCk7CS8qIG5vIGludGVycnVwdHMgKi8KLQkJTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLwotCQlTQ0NCX1dSSVRFKDEwLCAwKTsJLyogTlJaIG1vZGUgKi8KLQkJU0NDQl9XUklURSgxMSwgY2xrc3JjKTsJLyogbWFpbiBjbG9jayBzb3VyY2UgKi8KLQkJU0NDQl9XUklURSgxMiwgZGl2KTsJLyogQlJHIHZhbHVlICovCi0JCVNDQ0JfV1JJVEUoMTMsIDApOwkvKiBCUkcgaGlnaCBieXRlICovCi0JCVNDQ0JfV1JJVEUoMTQsIDEpOwotCQlTQ0NCX1dSSVRFKDMsIHJlZzMgfCAxKTsKLQkJU0NDQl9XUklURSg1LCByZWc1IHwgOCk7Ci0JfSBlbHNlIGlmIChwb3J0ID09IDApIHsKLQkJKHZvaWQpc2NjLmNoYV9hX2N0cmw7CS8qIHJlc2V0IHJlZyBwb2ludGVyICovCi0JCVNDQ0FfV1JJVEUoOSwgMHhjMCk7CS8qIHJlc2V0ICovCi0JCUxPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KLQkJU0NDQV9XUklURSg0LCAoY2ZsYWcgJiBQQVJFTkIpID8gKChjZmxhZyAmIFBBUk9ERCkgPyAweDAxIDogMHgwMykgOiAwIHwKLQkJCSAgMHgwNCAvKiAxIHN0b3BiaXQgKi8gfAotCQkJICBjbGttb2RlKTsKLQkJU0NDQV9XUklURSgzLCByZWczKTsKLQkJU0NDQV9XUklURSg1LCByZWc1KTsKLQkJU0NDQV9XUklURSg5LCAwKTsJLyogbm8gaW50ZXJydXB0cyAqLwotCQlMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCi0JCVNDQ0FfV1JJVEUoMTAsIDApOwkvKiBOUlogbW9kZSAqLwotCQlTQ0NBX1dSSVRFKDExLCBjbGtzcmMpOwkvKiBtYWluIGNsb2NrIHNvdXJjZSAqLwotCQlTQ0NBX1dSSVRFKDEyLCBkaXYpOwkvKiBCUkcgdmFsdWUgKi8KLQkJU0NDQV9XUklURSgxMywgMCk7CS8qIEJSRyBoaWdoIGJ5dGUgKi8KLQkJU0NDQV9XUklURSgxNCwgMSk7Ci0JCVNDQ0FfV1JJVEUoMywgcmVnMyB8IDEpOwotCQlTQ0NBX1dSSVRFKDUsIHJlZzUgfCA4KTsKLQl9Ci19Ci0jZW5kaWYgLyogREVCVUdfU0VSSUFMICovCi0KLXN0YXRpYyBpbnQgX19pbml0IG1hY19kZWJ1Z19zZXR1cChjaGFyICphcmcpCi17Ci0JaWYgKCFNQUNIX0lTX01BQykKLQkJcmV0dXJuIDA7Ci0KLSNpZmRlZiBERUJVR19TRVJJQUwKLQlpZiAoIXN0cmNtcChhcmcsICJzZXIiKSB8fCAhc3RyY21wKGFyZywgInNlcjEiKSkgewotCQkvKiBNYWMgbW9kZW0gcG9ydCAqLwotCQltYWNfaW5pdF9zY2NfcG9ydChCOTYwMHxDUzgsIDApOwotCQltYWNfY29uc29sZV9kcml2ZXIud3JpdGUgPSBtYWNfc2NjYV9jb25zb2xlX3dyaXRlOwotCQlzY2NfcG9ydCA9IDA7Ci0JfSBlbHNlIGlmICghc3RyY21wKGFyZywgInNlcjIiKSkgewotCQkvKiBNYWMgcHJpbnRlciBwb3J0ICovCi0JCW1hY19pbml0X3NjY19wb3J0KEI5NjAwfENTOCwgMSk7Ci0JCW1hY19jb25zb2xlX2RyaXZlci53cml0ZSA9IG1hY19zY2NiX2NvbnNvbGVfd3JpdGU7Ci0JCXNjY19wb3J0ID0gMTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBERUJVR19IRUFEUwotCWlmICghc3RyY21wKGFyZywgInNjbiIpIHx8ICFzdHJjbXAoYXJnLCAiY29uIikpIHsKLQkJLyogZGlzcGxheSwgdXNpbmcgaGVhZC5TIGNvbnNvbGUgcm91dGluZXMgKi8KLQkJbWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gbWFjX2RlYnVnX2NvbnNvbGVfd3JpdGU7Ci0JfQotI2VuZGlmCi0JaWYgKG1hY19jb25zb2xlX2RyaXZlci53cml0ZSkKLQkJcmVnaXN0ZXJfY29uc29sZSgmbWFjX2NvbnNvbGVfZHJpdmVyKTsKLQlyZXR1cm4gMDsKLX0KLQotZWFybHlfcGFyYW0oImRlYnVnIiwgbWFjX2RlYnVnX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jIGIvYXJjaC9tNjhrL21hYy9tYWNpbnRzLmMKaW5kZXggMjM3MTEwNy4uOTAwZDg5OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9tYWNpbnRzLmMKKysrIGIvYXJjaC9tNjhrL21hYy9tYWNpbnRzLmMKQEAgLTM0LDkgKzM0LDcgQEAKICAqCiAgKgkzCS0gdW51c2VkICg/KQogICoKLSAqCTQJLSBTQ0MgKHNsb3QgbnVtYmVyIGRldGVybWluZWQgYnkgcmVhZGluZyBSUjMgb24gdGhlIFNTQyBpdHNlbGYpCi0gKgkJICAtIHNsb3QgMTogU0NDIGNoYW5uZWwgQQotICoJCSAgLSBzbG90IDI6IFNDQyBjaGFubmVsIEIKKyAqCTQJLSBTQ0MKICAqCiAgKgk1CS0gdW51c2VkICg/KQogICoJCSAgW3NlcmlhbCBlcnJvcnMgb3Igc3BlY2lhbCBjb25kaXRpb25zIHNlZW0gdG8gcmFpc2UgbGV2ZWwgNgpAQCAtNTUsOCArNTMsNiBAQAogICoJCSAgLSBzbG90IDU6IFNsb3QgJEUKICAqCiAgKgk0CS0gU0NDIElPUAotICoJCSAgLSBzbG90IDE6IFNDQyBjaGFubmVsIEEKLSAqCQkgIC0gc2xvdCAyOiBTQ0MgY2hhbm5lbCBCCiAgKgogICoJNQktIElTTSBJT1AgKEFEQj8pCiAgKgpAQCAtMTM2LDEzICsxMzIsOCBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGFzbS9tYWNfb3NzLmg+CiAKLSNkZWZpbmUgREVCVUdfU1BVUklPVVMKICNkZWZpbmUgU0hVVFVQX1NPTklDCiAKLS8qIFNDQyBpbnRlcnJ1cHQgbWFzayAqLwotCi1zdGF0aWMgaW50IHNjY19tYXNrOwotCiAvKgogICogVklBL1JCViBob29rcwogICovCkBAIC0xOTEsMTMgKzE4Miw2IEBACiBleHRlcm4gdm9pZCBiYWJvb25faXJxX2NsZWFyKGludCk7CiAKIC8qCi0gKiBTQ0MgaW50ZXJydXB0IHJvdXRpbmVzCi0gKi8KLQotc3RhdGljIHZvaWQgc2NjX2lycV9lbmFibGUodW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIHNjY19pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQpOwotCi0vKgogICogY29uc29sZV9sb2dsZXZlbCBkZXRlcm1pbmVzIE5NSSBoYW5kbGVyIGZ1bmN0aW9uCiAgKi8KIApAQCAtMjIxLDggKzIwNSw2IEBACiAjaWZkZWYgREVCVUdfTUFDSU5UUwogCXByaW50aygibWFjX2luaXRfSVJRKCk6IFNldHRpbmcgdGhpbmdzIHVwLi4uXG4iKTsKICNlbmRpZgotCXNjY19tYXNrID0gMDsKLQogCW02OGtfc2V0dXBfaXJxX2NvbnRyb2xsZXIoJm1hY19pcnFfY29udHJvbGxlciwgSVJRX1VTRVIsCiAJCQkJICBOVU1fTUFDX1NPVVJDRVMgLSBJUlFfVVNFUik7CiAJLyogTWFrZSBzdXJlIHRoZSBTT05JQyBpbnRlcnJ1cHQgaXMgY2xlYXJlZCBvciB0aGluZ3MgZ2V0IHVnbHkgKi8KQEAgLTI4MywxNSArMjY1LDE2IEBACiAJCQl2aWFfaXJxX2VuYWJsZShpcnEpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JY2FzZSA0OgogCWNhc2UgNToKIAljYXNlIDY6CiAJCWlmIChwc2NfcHJlc2VudCkKIAkJCXBzY19pcnFfZW5hYmxlKGlycSk7CiAJCWVsc2UgaWYgKG9zc19wcmVzZW50KQogCQkJb3NzX2lycV9lbmFibGUoaXJxKTsKLQkJZWxzZSBpZiAoaXJxX3NyYyA9PSA0KQotCQkJc2NjX2lycV9lbmFibGUoaXJxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAocHNjX3ByZXNlbnQpCisJCQlwc2NfaXJxX2VuYWJsZShpcnEpOwogCQlicmVhazsKIAljYXNlIDg6CiAJCWlmIChiYWJvb25fcHJlc2VudCkKQEAgLTMxNiwxNSArMjk5LDE2IEBACiAJCQl2aWFfaXJxX2Rpc2FibGUoaXJxKTsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCWNhc2UgNDoKIAljYXNlIDU6CiAJY2FzZSA2OgogCQlpZiAocHNjX3ByZXNlbnQpCiAJCQlwc2NfaXJxX2Rpc2FibGUoaXJxKTsKIAkJZWxzZSBpZiAob3NzX3ByZXNlbnQpCiAJCQlvc3NfaXJxX2Rpc2FibGUoaXJxKTsKLQkJZWxzZSBpZiAoaXJxX3NyYyA9PSA0KQotCQkJc2NjX2lycV9kaXNhYmxlKGlycSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHBzY19wcmVzZW50KQorCQkJcHNjX2lycV9kaXNhYmxlKGlycSk7CiAJCWJyZWFrOwogCWNhc2UgODoKIAkJaWYgKGJhYm9vbl9wcmVzZW50KQpAQCAtMzQ3LDcgKzMzMSw2IEBACiAJCQl2aWFfaXJxX2NsZWFyKGlycSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQljYXNlIDQ6CiAJY2FzZSA1OgogCWNhc2UgNjoKIAkJaWYgKHBzY19wcmVzZW50KQpAQCAtMzU1LDYgKzMzOCwxMCBAQAogCQllbHNlIGlmIChvc3NfcHJlc2VudCkKIAkJCW9zc19pcnFfY2xlYXIoaXJxKTsKIAkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAocHNjX3ByZXNlbnQpCisJCQlwc2NfaXJxX2NsZWFyKGlycSk7CisJCWJyZWFrOwogCWNhc2UgODoKIAkJaWYgKGJhYm9vbl9wcmVzZW50KQogCQkJYmFib29uX2lycV9jbGVhcihpcnEpOwpAQCAtMzc0LDEzICszNjEsMTcgQEAKIAkJZWxzZQogCQkJcmV0dXJuIHZpYV9pcnFfcGVuZGluZyhpcnEpOwogCWNhc2UgMzoKLQljYXNlIDQ6CiAJY2FzZSA1OgogCWNhc2UgNjoKIAkJaWYgKHBzY19wcmVzZW50KQogCQkJcmV0dXJuIHBzY19pcnFfcGVuZGluZyhpcnEpOwogCQllbHNlIGlmIChvc3NfcHJlc2VudCkKIAkJCXJldHVybiBvc3NfaXJxX3BlbmRpbmcoaXJxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAocHNjX3ByZXNlbnQpCisJCQlwc2NfaXJxX3BlbmRpbmcoaXJxKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDQ4LDU5ICs0MzksMyBAQAogCWluX25taS0tOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KLQotLyoKLSAqIFNpbXBsZSByb3V0aW5lcyBmb3IgbWFza2luZyBhbmQgdW5tYXNraW5nCi0gKiBTQ0MgaW50ZXJydXB0cyBpbiBjYXNlcyB3aGVyZSB0aGlzIGNhbid0IGJlCi0gKiBkb25lIGluIGhhcmR3YXJlIChvbmx5IHRoZSBQU0MgY2FuIGRvIHRoYXQuKQotICovCi0KLXN0YXRpYyB2b2lkIHNjY19pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGlycV9pZHggPSBJUlFfSURYKGlycSk7Ci0KLQlzY2NfbWFzayB8PSAoMSA8PCBpcnFfaWR4KTsKLX0KLQotc3RhdGljIHZvaWQgc2NjX2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGlycV9pZHggPSBJUlFfSURYKGlycSk7Ci0KLQlzY2NfbWFzayAmPSB+KDEgPDwgaXJxX2lkeCk7Ci19Ci0KLS8qCi0gKiBTQ0MgbWFzdGVyIGludGVycnVwdCBoYW5kbGVyLiBXZSBoYXZlIHRvIGRvIGEgYml0IG9mIG1hZ2ljIGhlcmUKLSAqIHRvIGZpZ3VyZSBvdXQgd2hhdCBjaGFubmVsIGdhdmUgdXMgdGhlIGludGVycnVwdDsgcHV0dGluZyB0aGlzCi0gKiBoZXJlIGlzIGNsZWFuZXIgdGhhbiBoYWNraW5nIGl0IGludG8gZHJpdmVycy9jaGFyL21hY3NlcmlhbC5jLgotICovCi0KLXZvaWQgbWFjX3NjY19kaXNwYXRjaChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqc2NjID0gKHVuc2lnbmVkIGNoYXIgKikgbWFjX2JpX2RhdGEuc2NjYmFzZSArIDI7Ci0JdW5zaWduZWQgY2hhciByZWc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIFJlYWQgUlIzIGZyb20gdGhlIGNoaXAuIEFsd2F5cyBkbyB0aGlzIG9uIGNoYW5uZWwgQSAqLwotCS8qIFRoaXMgbXVzdCBiZSBhbiBhdG9taWMgb3BlcmF0aW9uIHNvIGRpc2FibGUgaXJxcy4gICAqLwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSpzY2MgPSAzOwotCXJlZyA9ICpzY2M7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyogTm93IGRpc3BhdGNoLiBCaXRzIDAtMiBhcmUgZm9yIGNoYW5uZWwgQiBhbmQgKi8KLQkvKiBiaXRzIDMtNSBhcmUgZm9yIGNoYW5uZWwgQS4gV2UgY2FuIHNhZmVseSAgICAqLwotCS8qIGlnbm9yZSB0aGUgcmVtYWluaW5nIGJpdHMgaGVyZS4gICAgICAgICAgICAgICovCi0JLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkvKiBOb3RlIHRoYXQgd2UncmUgaWdub3Jpbmcgc2NjX21hc2sgZm9yIG5vdy4gICAqLwotCS8qIElmIHdlIGFjdHVhbGx5IG1hc2sgdGhlIGludHMgdGhlbiB3ZSB0ZW5kIHRvICovCi0JLyogZ2V0IGhhbW1lcmVkIGJ5IHZlcnkgcGVyc2lzdGVudCBTQ0MgaXJxcywgICAgKi8KLQkvKiBhbmQgc2luY2UgdGhleSdyZSBhdXRvdmVjdG9yIGludGVycnVwdHMgdGhleSAqLwotCS8qIHByZXR0eSBtdWNoIGtpbGwgdGhlIHN5c3RlbS4gICAgICAgICAgICAgICAgICovCi0KLQlpZiAocmVnICYgMHgzOCkKLQkJbTY4a19oYW5kbGVfaW50KElSUV9TQ0NBKTsKLQlpZiAocmVnICYgMHgwNykKLQkJbTY4a19oYW5kbGVfaW50KElSUV9TQ0NCKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvb3NzLmMgYi9hcmNoL202OGsvbWFjL29zcy5jCmluZGV4IGYzZDIzZDYuLmE5YzBmNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvb3NzLmMKKysrIGIvYXJjaC9tNjhrL21hYy9vc3MuYwpAQCAtMzMsNyArMzMsNiBAQAogc3RhdGljIGlycXJldHVybl90IG9zc19udWJ1c19pcnEoaW50LCB2b2lkICopOwogCiBleHRlcm4gaXJxcmV0dXJuX3QgdmlhMV9pcnEoaW50LCB2b2lkICopOwotZXh0ZXJuIGlycXJldHVybl90IG1hY19zY2NfZGlzcGF0Y2goaW50LCB2b2lkICopOwogCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgT1NTCkBAIC02OSw5ICs2OCw2IEBACiAJaWYgKHJlcXVlc3RfaXJxKE9TU19JUlFMRVZfU0NTSSwgb3NzX2lycSwgSVJRX0ZMR19MT0NLLAogCQkJInNjc2kiLCAodm9pZCAqKSBvc3MpKQogCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgInNjc2kiKTsKLQlpZiAocmVxdWVzdF9pcnEoT1NTX0lSUUxFVl9JT1BTQ0MsIG1hY19zY2NfZGlzcGF0Y2gsIElSUV9GTEdfTE9DSywKLQkJCSJzY2MiLCBtYWNfc2NjX2Rpc3BhdGNoKSkKLQkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJzY2MiKTsKIAlpZiAocmVxdWVzdF9pcnEoT1NTX0lSUUxFVl9OVUJVUywgb3NzX251YnVzX2lycSwgSVJRX0ZMR19MT0NLLAogCQkJIm51YnVzIiwgKHZvaWQgKikgb3NzKSkKIAkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJudWJ1cyIpOwpAQCAtMTcyLDkgKzE2OCw3IEBACiAJcHJpbnRrKCJvc3NfaXJxX2VuYWJsZSglZClcbiIsIGlycSk7CiAjZW5kaWYKIAlzd2l0Y2goaXJxKSB7Ci0JCWNhc2UgSVJRX1NDQzoKLQkJY2FzZSBJUlFfU0NDQToKLQkJY2FzZSBJUlFfU0NDQjoKKwkJY2FzZSBJUlFfTUFDX1NDQzoKIAkJCW9zcy0+aXJxX2xldmVsW09TU19JT1BTQ0NdID0gT1NTX0lSUUxFVl9JT1BTQ0M7CiAJCQlicmVhazsKIAkJY2FzZSBJUlFfTUFDX0FEQjoKQEAgLTIxMiw5ICsyMDYsNyBAQAogCXByaW50aygib3NzX2lycV9kaXNhYmxlKCVkKVxuIiwgaXJxKTsKICNlbmRpZgogCXN3aXRjaChpcnEpIHsKLQkJY2FzZSBJUlFfU0NDOgotCQljYXNlIElSUV9TQ0NBOgotCQljYXNlIElSUV9TQ0NCOgorCQljYXNlIElSUV9NQUNfU0NDOgogCQkJb3NzLT5pcnFfbGV2ZWxbT1NTX0lPUFNDQ10gPSBPU1NfSVJRTEVWX0RJU0FCTEVEOwogCQkJYnJlYWs7CiAJCWNhc2UgSVJRX01BQ19BREI6CkBAIC0yNTAsOSArMjQyLDcgQEAKIHZvaWQgb3NzX2lycV9jbGVhcihpbnQgaXJxKSB7CiAJLyogRklYTUU6IGhvdyB0byBkbyB0aGlzIG9uIE9TUz8gKi8KIAlzd2l0Y2goaXJxKSB7Ci0JCWNhc2UgSVJRX1NDQzoKLQkJY2FzZSBJUlFfU0NDQToKLQkJY2FzZSBJUlFfU0NDQjoKKwkJY2FzZSBJUlFfTUFDX1NDQzoKIAkJCW9zcy0+aXJxX3BlbmRpbmcgJj0gfk9TU19JUF9JT1BTQ0M7CiAJCQlicmVhazsKIAkJY2FzZSBJUlFfTUFDX0FEQjoKQEAgLTI4MCw5ICsyNzAsNyBAQAogaW50IG9zc19pcnFfcGVuZGluZyhpbnQgaXJxKQogewogCXN3aXRjaChpcnEpIHsKLQkJY2FzZSBJUlFfU0NDOgotCQljYXNlIElSUV9TQ0NBOgotCQljYXNlIElSUV9TQ0NCOgorCQljYXNlIElSUV9NQUNfU0NDOgogCQkJcmV0dXJuIG9zcy0+aXJxX3BlbmRpbmcgJiBPU1NfSVBfSU9QU0NDOwogCQkJYnJlYWs7CiAJCWNhc2UgSVJRX01BQ19BREI6CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL3ZpYS5jIGIvYXJjaC9tNjhrL21hYy92aWEuYwppbmRleCAxMWJjZTNjLi5lNzExNjZkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL3ZpYS5jCisrKyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKQEAgLTg0LDggKzg0LDYgQEAKIHZvaWQgdmlhX2lycV9kaXNhYmxlKGludCBpcnEpOwogdm9pZCB2aWFfaXJxX2NsZWFyKGludCBpcnEpOwogCi1leHRlcm4gaXJxcmV0dXJuX3QgbWFjX3NjY19kaXNwYXRjaChpbnQsIHZvaWQgKik7Ci0KIC8qCiAgKiBJbml0aWFsaXplIHRoZSBWSUFzCiAgKgpAQCAtMzExLDExICszMDksNiBAQAogCWlmIChyZXF1ZXN0X2lycShJUlFfQVVUT18yLCB2aWEyX2lycSwgSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwKIAkJCSJ2aWEyIiwgKHZvaWQgKikgdmlhMikpCiAJCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgJXMgaW50ZXJydXB0XG4iLCAidmlhMiIpOwotCWlmICghcHNjX3ByZXNlbnQpIHsKLQkJaWYgKHJlcXVlc3RfaXJxKElSUV9BVVRPXzQsIG1hY19zY2NfZGlzcGF0Y2gsIElSUV9GTEdfTE9DSywKLQkJCQkic2NjIiwgbWFjX3NjY19kaXNwYXRjaCkpCi0JCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgInNjYyIpOwotCX0KIAlpZiAocmVxdWVzdF9pcnEoSVJRX01BQ19OVUJVUywgdmlhX251YnVzX2lycSwKIAkJCUlSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsICJudWJ1cyIsICh2b2lkICopIHZpYTIpKQogCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgIm51YnVzIik7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0va21hcC5jIGIvYXJjaC9tNjhrL21tL2ttYXAuYwppbmRleCBkZjYyMGFjLi42OTM0NTg0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0va21hcC5jCisrKyBiL2FyY2gvbTY4ay9tbS9rbWFwLmMKQEAgLTk5LDggKzk5LDcgQEAKICNlbmRpZgogCiAvKgotICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4gVGhlCi0gKiBjb2RlIGlzIGNvcGllZCBhbmQgYWRhcHRlZCBmcm9tIG1hcF9jaHVuaygpLgorICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KICAqLwogLyogUmV3cml0dGVuIGJ5IEFuZHJlYXMgU2Nod2FiIHRvIHJlbW92ZSBhbGwgcmFjZXMuICovCiAKQEAgLTExNiw3ICsxMTUsNyBAQAogCS8qCiAJICogRG9uJ3QgYWxsb3cgbWFwcGluZ3MgdGhhdCB3cmFwLi4KIAkgKi8KLQlpZiAoIXNpemUgfHwgc2l6ZSA+IHBoeXNhZGRyICsgc2l6ZSkKKwlpZiAoIXNpemUgfHwgcGh5c2FkZHIgPiAodW5zaWduZWQgbG9uZykoLXNpemUpKQogCQlyZXR1cm4gTlVMTDsKIAogI2lmZGVmIENPTkZJR19BTUlHQQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWM5ZWNkNC4uOTU5Y2IyNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMjEsNiArMjIxLDEwIEBACiAKIAlwLT50aHJlYWQudXNwID0gdXNwOwogCXAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZyljaGlsZHN0YWNrOworCisJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQorCQl0YXNrX3RocmVhZF9pbmZvKHApLT50cF92YWx1ZSA9IHJlZ3MtPmQ1OworCiAJLyoKIAkgKiBNdXN0IHNhdmUgdGhlIGN1cnJlbnQgU0ZDL0RGQyB2YWx1ZSwgTk9UIHRoZSB2YWx1ZSB3aGVuCiAJICogdGhlIHBhcmVudCB3YXMgbGFzdCBkZXNjaGVkdWxlZCAtIFJHSCAgMTAtMDgtOTYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYwppbmRleCA0ZDM4Mjg5Li44NWVkMmY5IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCkBAIC0zMTksNiArMzE5LDExIEBACiAJCX0KICNlbmRpZgogCisJY2FzZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBOgorCQlyZXQgPSBwdXRfdXNlcih0YXNrX3RocmVhZF9pbmZvKGNoaWxkKS0+dHBfdmFsdWUsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSAtRUlPOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jCmluZGV4IGI2N2NiYzcuLjkyM2RkNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jCkBAIC0xOTAsMyArMTkwLDM5IEBACiAJCQk6ICJkIiAoX19hKSwgImQiIChfX2IpLCAiZCIgKF9fYykpOwogCXJldHVybiBfX3JlczsKIH0KKworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19nZXRfdGhyZWFkX2FyZWEodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT50cF92YWx1ZTsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX3NldF90aHJlYWRfYXJlYSh1bnNpZ25lZCBsb25nIHRwKQoreworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dHBfdmFsdWUgPSB0cDsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBzeXNjYWxsIGdldHMgaXRzIGFyZ3VtZW50cyBpbiBBMCAobWVtKSwgRDIgKG9sZHZhbCkgYW5kCisgICBEMSAobmV3dmFsKS4gICovCithc21saW5rYWdlIGludAorc3lzX2F0b21pY19jbXB4Y2hnXzMyKHVuc2lnbmVkIGxvbmcgbmV3dmFsLCBpbnQgb2xkdmFsLCBpbnQgZDMsIGludCBkNCwgaW50IGQ1LAorCQkgICAgICB1bnNpZ25lZCBsb25nIF9fdXNlciAqIG1lbSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXVuc2lnbmVkIGxvbmcgbWVtX3ZhbHVlOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJbWVtX3ZhbHVlID0gKm1lbTsKKwlpZiAobWVtX3ZhbHVlID09IG9sZHZhbCkKKwkJKm1lbSA9IG5ld3ZhbDsKKworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIG1lbV92YWx1ZTsKK30KKworYXNtbGlua2FnZSBpbnQgc3lzX2F0b21pY19iYXJyaWVyKHZvaWQpCit7CisJLyogbm8gY29kZSBuZWVkZWQgZm9yIHVuaXByb2NzICovCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKaW5kZXggNDg2ODM3ZS4uNTZkZDAxZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUwpAQCAtMzUxLDYgKzM1MSwxMCBAQAogCS5sb25nIHN5c19wd3JpdGV2CQkvKiAzMzAgKi8KIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KIAkubG9uZyBzeXNfcGVyZl9ldmVudF9vcGVuCisJLmxvbmcgc3lzX2dldF90aHJlYWRfYXJlYQorCS5sb25nIHN5c19zZXRfdGhyZWFkX2FyZWEKKwkubG9uZyBzeXNfYXRvbWljX2NtcHhjaGdfMzIJLyogMzM1ICovCisJLmxvbmcgc3lzX2F0b21pY19iYXJyaWVyCiAKIAkucmVwdCBOUl9zeXNjYWxscy0oLi1zeXNfY2FsbF90YWJsZSkvNAogCQkubG9uZyBzeXNfbmlfc3lzY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMgYi9hcmNoL202OGtub21tdS9tbS9tZW1vcnkuYwppbmRleCBmOTNiODhiLi5kNWI5ZTEzIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9tbS9tZW1vcnkuYworKysgYi9hcmNoL202OGtub21tdS9tbS9tZW1vcnkuYwpAQCAtMjQsNyArMjQsNiBAQAogCiAvKgogICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KLSAqIFRoZSBjb2RlIGlzIGNvcGllZCBhbmQgYWRhcHRlZCBmcm9tIG1hcF9jaHVuaygpLgogICovCiAKIHVuc2lnbmVkIGxvbmcga2VybmVsX21hcCh1bnNpZ25lZCBsb25nIHBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCmluZGV4IGNkNTgzN2UuLmIwMDgxNjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCkBAIC0xMzAsNiArMTMwLDcgQEAKIAogY29uZmlnIE9GCiAJZGVmX2Jvb2wgeQorCXNlbGVjdCBPRl9GTEFUVFJFRQogCiBjb25maWcgUFJPQ19ERVZJQ0VUUkVFCiAJYm9vbCAiU3VwcG9ydCBmb3IgZGV2aWNlIHRyZWUgaW4gL3Byb2MiCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvbS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Byb20uaAppbmRleCBlZjNlYzFkLi4wM2Y0NWE5IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvbS5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9tLmgKQEAgLTI2LDMxICsyNiwxMSBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKLSNkZWZpbmUgT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVAkxCi0jZGVmaW5lIE9GX1JPT1RfTk9ERV9TSVpFX0NFTExTX0RFRkFVTFQJMQotCi0jZGVmaW5lIG9mX2NvbXBhdF9jbXAoczEsIHMyLCBsKQlzdHJuY2FzZWNtcCgoczEpLCAoczIpLCAobCkpCi0jZGVmaW5lIG9mX3Byb3BfY21wKHMxLCBzMikJCXN0cmNtcCgoczEpLCAoczIpKQotI2RlZmluZSBvZl9ub2RlX2NtcChzMSwgczIpCQlzdHJjYXNlY21wKChzMSksIChzMikpCi0KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKLQogI2RlZmluZSBIQVZFX0FSQ0hfREVWVFJFRV9GSVhVUFMKIAotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWxsbm9kZXM7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi1leHRlcm4gcndsb2NrX3QgZGV2dHJlZV9sb2NrOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCi0vKiBGb3IgdXBkYXRpbmcgdGhlIGRldmljZSB0cmVlIGF0IHJ1bnRpbWUgKi8KLWV4dGVybiB2b2lkIG9mX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKLWV4dGVybiB2b2lkIG9mX2RldGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKLQogLyogT3RoZXIgUHJvdG90eXBlcyAqLwogZXh0ZXJuIGludCBlYXJseV91YXJ0bGl0ZV9jb25zb2xlKHZvaWQpOwogCi1leHRlcm4gc3RydWN0IHJlc291cmNlICpyZXF1ZXN0X09GX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCQlpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWVfcG9zdGZpeCk7Ci1leHRlcm4gaW50IHJlbGVhc2VfT0ZfcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBpbnQgaW5kZXgpOwotCiAvKgogICogT0YgYWRkcmVzcyByZXRyZWl2YWwgJiB0cmFuc2xhdGlvbgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX3BsYXRmb3JtLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX3BsYXRmb3JtLmMKaW5kZXggYWNmNDU3NC4uMWM2ZDY4NCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvb2ZfcGxhdGZvcm0uYwpAQCAtMTg1LDcgKzE4NSw3IEBACiBzdGF0aWMgaW50IG9mX2Rldl9waGFuZGxlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlwaGFuZGxlICpwaCA9IGRhdGE7Ci0JcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5ub2RlLT5saW51eF9waGFuZGxlID09ICpwaDsKKwlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldiktPm5vZGUtPnBoYW5kbGUgPT0gKnBoOwogfQogCiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9waGFuZGxlKHBoYW5kbGUgcGgpCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb20uYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jCmluZGV4IGI4MTdkZjEuLmExNWVmNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbS5jCkBAIC00Miw2OTggKzQyLDIxIEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KIAotc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3RfYWRkcl9jZWxsczsKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBkdF9yb290X3NpemVfY2VsbHM7Ci0KLXR5cGVkZWYgdTMyIGNlbGxfdDsKLQotc3RhdGljIHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqaW5pdGlhbF9ib290X3BhcmFtczsKLQotLyogZXhwb3J0IHRoYXQgdG8gb3V0c2lkZSB3b3JsZCAqLwotc3RydWN0IGRldmljZV9ub2RlICpvZl9jaG9zZW47Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqZmluZF9mbGF0X2R0X3N0cmluZyh1MzIgb2Zmc2V0KQordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbl9hcmNoKHVuc2lnbmVkIGxvbmcgbm9kZSkKIHsKLQlyZXR1cm4gKChjaGFyICopaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RyaW5ncyArIG9mZnNldDsKKwkvKiBObyBNaWNyb2JsYXplIHNwZWNpZmljIGNvZGUgaGVyZSAqLwogfQogCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzY2FuIHRoZSBmbGF0dGVuZWQgZGV2aWNlLXRyZWUsIGl0IGlzCi0gKiB1c2VkIHRvIGV4dHJhY3QgdGhlIG1lbW9yeSBpbmZvcm1hdGlvbnMgYXQgYm9vdCBiZWZvcmUgd2UgY2FuCi0gKiB1bmZsYXR0ZW4gdGhlIHRyZWUKLSAqLwotaW50IF9faW5pdCBvZl9zY2FuX2ZsYXRfZHQoaW50ICgqaXQpKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsCi0JCQkJICAgICB2b2lkICpkYXRhKSwKLQkJCSAgIHZvaWQgKmRhdGEpCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2FkZF9tZW1vcnlfYXJjaCh1NjQgYmFzZSwgdTY0IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBwID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQlpbnQgcmMgPSAwOwotCWludCBkZXB0aCA9IC0xOwotCi0JZG8gewotCQl1MzIgdGFnID0gKigodTMyICopcCk7Ci0JCWNoYXIgKnBhdGhwOwotCi0JCXAgKz0gNDsKLQkJaWYgKHRhZyA9PSBPRl9EVF9FTkRfTk9ERSkgewotCQkJZGVwdGgtLTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQotCQkJY29udGludWU7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfRU5EKQotCQkJYnJlYWs7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfUFJPUCkgewotCQkJdTMyIHN6ID0gKigodTMyICopcCk7Ci0JCQlwICs9IDg7Ci0JCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQkJcCA9IF9BTElHTihwLCBzeiA+PSA4ID8gOCA6IDQpOwotCQkJcCArPSBzejsKLQkJCXAgPSBfQUxJR04ocCwgNCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgdGFnICV4IHNjYW5uaW5nIGZsYXR0ZW5lZCIKLQkJCQkiIGRldmljZSB0cmVlICFcbiIsIHRhZyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlkZXB0aCsrOwotCQlwYXRocCA9IChjaGFyICopcDsKLQkJcCA9IF9BTElHTihwICsgc3RybGVuKHBhdGhwKSArIDEsIDQpOwotCQlpZiAoKCpwYXRocCkgPT0gJy8nKSB7Ci0JCQljaGFyICpscCwgKm5wOwotCQkJZm9yIChscCA9IE5VTEwsIG5wID0gcGF0aHA7ICpucDsgbnArKykKLQkJCQlpZiAoKCpucCkgPT0gJy8nKQotCQkJCQlscCA9IG5wKzE7Ci0JCQlpZiAobHAgIT0gTlVMTCkKLQkJCQlwYXRocCA9IGxwOwotCQl9Ci0JCXJjID0gaXQocCwgcGF0aHAsIGRlcHRoLCBkYXRhKTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsKLQl9IHdoaWxlICgxKTsKLQotCXJldHVybiByYzsKKwlsbWJfYWRkKGJhc2UsIHNpemUpOwogfQogCi11bnNpZ25lZCBsb25nIF9faW5pdCBvZl9nZXRfZmxhdF9kdF9yb290KHZvaWQpCit1NjQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfbWVtb3J5X2FyY2godTY0IHNpemUsIHU2NCBhbGlnbikKIHsKLQl1bnNpZ25lZCBsb25nIHAgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCi0Jd2hpbGUgKCooKHUzMiAqKXApID09IE9GX0RUX05PUCkKLQkJcCArPSA0OwotCUJVR19PTigqKCh1MzIgKilwKSAhPSBPRl9EVF9CRUdJTl9OT0RFKTsKLQlwICs9IDQ7Ci0JcmV0dXJuIF9BTElHTihwICsgc3RybGVuKChjaGFyICopcCkgKyAxLCA0KTsKKwlyZXR1cm4gbG1iX2FsbG9jKHNpemUsIGFsaWduKTsKIH0KIAotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdpdGhpbiBzY2FuX2ZsYXR0ZW5lZF9kdCBjYWxsYmFjayB0byBnZXQKLSAqIGFjY2VzcyB0byBwcm9wZXJ0aWVzCi0gKi8KLXZvaWQgKl9faW5pdCBvZl9nZXRfZmxhdF9kdF9wcm9wKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQl1bnNpZ25lZCBsb25nICpzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcCA9IG5vZGU7Ci0KLQlkbyB7Ci0JCXUzMiB0YWcgPSAqKCh1MzIgKilwKTsKLQkJdTMyIHN6LCBub2ZmOwotCQljb25zdCBjaGFyICpuc3RyOwotCi0JCXAgKz0gNDsKLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApCi0JCQljb250aW51ZTsKLQkJaWYgKHRhZyAhPSBPRl9EVF9QUk9QKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJc3ogPSAqKCh1MzIgKilwKTsKLQkJbm9mZiA9ICooKHUzMiAqKShwICsgNCkpOwotCQlwICs9IDg7Ci0JCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCXAgPSBfQUxJR04ocCwgc3ogPj0gOCA/IDggOiA0KTsKLQotCQluc3RyID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKLQkJaWYgKG5zdHIgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZmluZCBwcm9wZXJ0eSBpbmRleCIKLQkJCQkiIG5hbWUgIVxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlpZiAoc3RyY21wKG5hbWUsIG5zdHIpID09IDApIHsKLQkJCWlmIChzaXplKQotCQkJCSpzaXplID0gc3o7Ci0JCQlyZXR1cm4gKHZvaWQgKilwOwotCQl9Ci0JCXAgKz0gc3o7Ci0JCXAgPSBfQUxJR04ocCwgNCk7Ci0JfSB3aGlsZSAoMSk7Ci19Ci0KLWludCBfX2luaXQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqY29tcGF0KQotewotCWNvbnN0IGNoYXIgKmNwOwotCXVuc2lnbmVkIGxvbmcgY3BsZW4sIGw7Ci0KLQljcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOwotCWlmIChjcCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQl3aGlsZSAoY3BsZW4gPiAwKSB7Ci0JCWlmIChzdHJuY2FzZWNtcChjcCwgY29tcGF0LCBzdHJsZW4oY29tcGF0KSkgPT0gMCkKLQkJCXJldHVybiAxOwotCQlsID0gc3RybGVuKGNwKSArIDE7Ci0JCWNwICs9IGw7Ci0JCWNwbGVuIC09IGw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkICpfX2luaXQgdW5mbGF0dGVuX2R0X2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQl1bnNpZ25lZCBsb25nIGFsaWduKQotewotCXZvaWQgKnJlczsKLQotCSptZW0gPSBfQUxJR04oKm1lbSwgYWxpZ24pOwotCXJlcyA9ICh2b2lkICopKm1lbTsKLQkqbWVtICs9IHNpemU7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgdW5mbGF0dGVuX2R0X25vZGUodW5zaWduZWQgbG9uZyBtZW0sCi0JCQkJCXVuc2lnbmVkIGxvbmcgKnAsCi0JCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFkLAotCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKioqYWxsbmV4dHBwLAotCQkJCQl1bnNpZ25lZCBsb25nIGZwc2l6ZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHAsICoqcHJldl9wcCA9IE5VTEw7Ci0JY2hhciAqcGF0aHA7Ci0JdTMyIHRhZzsKLQl1bnNpZ25lZCBpbnQgbCwgYWxsb2NsOwotCWludCBoYXNfbmFtZSA9IDA7Ci0JaW50IG5ld19mb3JtYXQgPSAwOwotCi0JdGFnID0gKigodTMyICopKCpwKSk7Ci0JaWYgKHRhZyAhPSBPRl9EVF9CRUdJTl9OT0RFKSB7Ci0JCXByaW50aygiV2VpcmQgdGFnIGF0IHN0YXJ0IG9mIG5vZGU6ICV4XG4iLCB0YWcpOwotCQlyZXR1cm4gbWVtOwotCX0KLQkqcCArPSA0OwotCXBhdGhwID0gKGNoYXIgKikqcDsKLQlsID0gYWxsb2NsID0gc3RybGVuKHBhdGhwKSArIDE7Ci0JKnAgPSBfQUxJR04oKnAgKyBsLCA0KTsKLQotCS8qIHZlcnNpb24gMHgxMCBoYXMgYSBtb3JlIGNvbXBhY3QgdW5pdCBuYW1lIGhlcmUgaW5zdGVhZCBvZiB0aGUgZnVsbAotCSAqIHBhdGguIHdlIGFjY3VtdWxhdGUgdGhlIGZ1bGwgcGF0aCBzaXplIHVzaW5nICJmcHNpemUiLCB3ZSdsbCByZWJ1aWxkCi0JICogaXQgbGF0ZXIuIFdlIGRldGVjdCB0aGlzIGJlY2F1c2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbmFtZSBpcwotCSAqIG5vdCAnLycuCi0JICovCi0JaWYgKCgqcGF0aHApICE9ICcvJykgewotCQluZXdfZm9ybWF0ID0gMTsKLQkJaWYgKGZwc2l6ZSA9PSAwKSB7Ci0JCQkvKiByb290IG5vZGU6IHNwZWNpYWwgY2FzZS4gZnBzaXplIGFjY291bnRzIGZvciBwYXRoCi0JCQkgKiBwbHVzIHRlcm1pbmF0aW5nIHplcm8uIHJvb3Qgbm9kZSBvbmx5IGhhcyAnLycsIHNvCi0JCQkgKiBmcHNpemUgc2hvdWxkIGJlIDIsIGJ1dCB3ZSB3YW50IHRvIGF2b2lkIHRoZSBmaXJzdAotCQkJICogbGV2ZWwgbm9kZXMgdG8gaGF2ZSB0d28gJy8nIHNvIHdlIHVzZSBmcHNpemUgMSBoZXJlCi0JCQkgKi8KLQkJCWZwc2l6ZSA9IDE7Ci0JCQlhbGxvY2wgPSAyOwotCQl9IGVsc2UgewotCQkJLyogYWNjb3VudCBmb3IgJy8nIGFuZCBwYXRoIHNpemUgbWludXMgdGVybWluYWwgMAotCQkJICogYWxyZWFkeSBpbiAnbCcKLQkJCSAqLwotCQkJZnBzaXplICs9IGw7Ci0JCQlhbGxvY2wgPSBmcHNpemU7Ci0JCX0KLQl9Ci0KLQlucCA9IHVuZmxhdHRlbl9kdF9hbGxvYygmbWVtLCBzaXplb2Yoc3RydWN0IGRldmljZV9ub2RlKSArIGFsbG9jbCwKLQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgZGV2aWNlX25vZGUpKTsKLQlpZiAoYWxsbmV4dHBwKSB7Ci0JCW1lbXNldChucCwgMCwgc2l6ZW9mKCpucCkpOwotCQlucC0+ZnVsbF9uYW1lID0gKChjaGFyICopbnApICsgc2l6ZW9mKHN0cnVjdCBkZXZpY2Vfbm9kZSk7Ci0JCWlmIChuZXdfZm9ybWF0KSB7Ci0JCQljaGFyICpwMiA9IG5wLT5mdWxsX25hbWU7Ci0JCQkvKiByZWJ1aWxkIGZ1bGwgcGF0aCBmb3IgbmV3IGZvcm1hdCAqLwotCQkJaWYgKGRhZCAmJiBkYWQtPnBhcmVudCkgewotCQkJCXN0cmNweShwMiwgZGFkLT5mdWxsX25hbWUpOwotI2lmZGVmIERFQlVHCi0JCQkJaWYgKChzdHJsZW4ocDIpICsgbCArIDEpICE9IGFsbG9jbCkgewotCQkJCQlwcl9kZWJ1ZygiJXM6IHA6ICVkLCBsOiAlZCwgYTogJWRcbiIsCi0JCQkJCQlwYXRocCwgKGludClzdHJsZW4ocDIpLAotCQkJCQkJbCwgYWxsb2NsKTsKLQkJCQl9Ci0jZW5kaWYKLQkJCQlwMiArPSBzdHJsZW4ocDIpOwotCQkJfQotCQkJKihwMisrKSA9ICcvJzsKLQkJCW1lbWNweShwMiwgcGF0aHAsIGwpOwotCQl9IGVsc2UKLQkJCW1lbWNweShucC0+ZnVsbF9uYW1lLCBwYXRocCwgbCk7Ci0JCXByZXZfcHAgPSAmbnAtPnByb3BlcnRpZXM7Ci0JCSoqYWxsbmV4dHBwID0gbnA7Ci0JCSphbGxuZXh0cHAgPSAmbnAtPmFsbG5leHQ7Ci0JCWlmIChkYWQgIT0gTlVMTCkgewotCQkJbnAtPnBhcmVudCA9IGRhZDsKLQkJCS8qIHdlIHRlbXBvcmFyaWx5IHVzZSB0aGUgbmV4dCBmaWVsZCBhcyBgbGFzdF9jaGlsZCcqLwotCQkJaWYgKGRhZC0+bmV4dCA9PSBOVUxMKQotCQkJCWRhZC0+Y2hpbGQgPSBucDsKLQkJCWVsc2UKLQkJCQlkYWQtPm5leHQtPnNpYmxpbmcgPSBucDsKLQkJCWRhZC0+bmV4dCA9IG5wOwotCQl9Ci0JCWtyZWZfaW5pdCgmbnAtPmtyZWYpOwotCX0KLQl3aGlsZSAoMSkgewotCQl1MzIgc3osIG5vZmY7Ci0JCWNoYXIgKnBuYW1lOwotCi0JCXRhZyA9ICooKHUzMiAqKSgqcCkpOwotCQlpZiAodGFnID09IE9GX0RUX05PUCkgewotCQkJKnAgKz0gNDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgIT0gT0ZfRFRfUFJPUCkKLQkJCWJyZWFrOwotCQkqcCArPSA0OwotCQlzeiA9ICooKHUzMiAqKSgqcCkpOwotCQlub2ZmID0gKigodTMyICopKCgqcCkgKyA0KSk7Ci0JCSpwICs9IDg7Ci0JCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCSpwID0gX0FMSUdOKCpwLCBzeiA+PSA4ID8gOCA6IDQpOwotCi0JCXBuYW1lID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKLQkJaWYgKHBuYW1lID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkiQ2FuJ3QgZmluZCBwcm9wZXJ0eSBuYW1lIGluIGxpc3QgIVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RyY21wKHBuYW1lLCAibmFtZSIpID09IDApCi0JCQloYXNfbmFtZSA9IDE7Ci0JCWwgPSBzdHJsZW4ocG5hbWUpICsgMTsKLQkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSksCi0JCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBwcm9wZXJ0eSkpOwotCQlpZiAoYWxsbmV4dHBwKSB7Ci0JCQlpZiAoc3RyY21wKHBuYW1lLCAibGludXgscGhhbmRsZSIpID09IDApIHsKLQkJCQlucC0+bm9kZSA9ICooKHUzMiAqKSpwKTsKLQkJCQlpZiAobnAtPmxpbnV4X3BoYW5kbGUgPT0gMCkKLQkJCQkJbnAtPmxpbnV4X3BoYW5kbGUgPSBucC0+bm9kZTsKLQkJCX0KLQkJCWlmIChzdHJjbXAocG5hbWUsICJpYm0scGhhbmRsZSIpID09IDApCi0JCQkJbnAtPmxpbnV4X3BoYW5kbGUgPSAqKCh1MzIgKikqcCk7Ci0JCQlwcC0+bmFtZSA9IHBuYW1lOwotCQkJcHAtPmxlbmd0aCA9IHN6OwotCQkJcHAtPnZhbHVlID0gKHZvaWQgKikqcDsKLQkJCSpwcmV2X3BwID0gcHA7Ci0JCQlwcmV2X3BwID0gJnBwLT5uZXh0OwotCQl9Ci0JCSpwID0gX0FMSUdOKCgqcCkgKyBzeiwgNCk7Ci0JfQotCS8qIHdpdGggdmVyc2lvbiAweDEwIHdlIG1heSBub3QgaGF2ZSB0aGUgbmFtZSBwcm9wZXJ0eSwgcmVjcmVhdGUKLQkgKiBpdCBoZXJlIGZyb20gdGhlIHVuaXQgbmFtZSBpZiBhYnNlbnQKLQkgKi8KLQlpZiAoIWhhc19uYW1lKSB7Ci0JCWNoYXIgKnAxID0gcGF0aHAsICpwcyA9IHBhdGhwLCAqcGEgPSBOVUxMOwotCQlpbnQgc3o7Ci0KLQkJd2hpbGUgKCpwMSkgewotCQkJaWYgKCgqcDEpID09ICdAJykKLQkJCQlwYSA9IHAxOwotCQkJaWYgKCgqcDEpID09ICcvJykKLQkJCQlwcyA9IHAxICsgMTsKLQkJCXAxKys7Ci0JCX0KLQkJaWYgKHBhIDwgcHMpCi0JCQlwYSA9IHAxOwotCQlzeiA9IChwYSAtIHBzKSArIDE7Ci0JCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpICsgc3osCi0JCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBwcm9wZXJ0eSkpOwotCQlpZiAoYWxsbmV4dHBwKSB7Ci0JCQlwcC0+bmFtZSA9ICJuYW1lIjsKLQkJCXBwLT5sZW5ndGggPSBzejsKLQkJCXBwLT52YWx1ZSA9IHBwICsgMTsKLQkJCSpwcmV2X3BwID0gcHA7Ci0JCQlwcmV2X3BwID0gJnBwLT5uZXh0OwotCQkJbWVtY3B5KHBwLT52YWx1ZSwgcHMsIHN6IC0gMSk7Ci0JCQkoKGNoYXIgKilwcC0+dmFsdWUpW3N6IC0gMV0gPSAwOwotCQkJcHJfZGVidWcoImZpeGVkIHVwIG5hbWUgZm9yICVzIC0+ICVzXG4iLCBwYXRocCwKLQkJCQkoY2hhciAqKXBwLT52YWx1ZSk7Ci0JCX0KLQl9Ci0JaWYgKGFsbG5leHRwcCkgewotCQkqcHJldl9wcCA9IE5VTEw7Ci0JCW5wLT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibmFtZSIsIE5VTEwpOwotCQlucC0+dHlwZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0KLQkJaWYgKCFucC0+bmFtZSkKLQkJCW5wLT5uYW1lID0gIjxOVUxMPiI7Ci0JCWlmICghbnAtPnR5cGUpCi0JCQlucC0+dHlwZSA9ICI8TlVMTD4iOwotCX0KLQl3aGlsZSAodGFnID09IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJbWVtID0gdW5mbGF0dGVuX2R0X25vZGUobWVtLCBwLCBucCwgYWxsbmV4dHBwLCBmcHNpemUpOwotCQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQl9Ci0JaWYgKHRhZyAhPSBPRl9EVF9FTkRfTk9ERSkgewotCQlwcmludGsoS0VSTl9JTkZPICJXZWlyZCB0YWcgYXQgZW5kIG9mIG5vZGU6ICV4XG4iLCB0YWcpOwotCQlyZXR1cm4gbWVtOwotCX0KLQkqcCArPSA0OwotCXJldHVybiBtZW07Ci19Ci0KLS8qKgotICogdW5mbGF0dGVucyB0aGUgZGV2aWNlLXRyZWUgcGFzc2VkIGJ5IHRoZSBmaXJtd2FyZSwgY3JlYXRpbmcgdGhlCi0gKiB0cmVlIG9mIHN0cnVjdCBkZXZpY2Vfbm9kZS4gSXQgYWxzbyBmaWxscyB0aGUgIm5hbWUiIGFuZCAidHlwZSIKLSAqIHBvaW50ZXJzIG9mIHRoZSBub2RlcyBzbyB0aGUgbm9ybWFsIGRldmljZS10cmVlIHdhbGtpbmcgZnVuY3Rpb25zCi0gKiBjYW4gYmUgdXNlZCAodGhpcyB1c2VkIHRvIGJlIGRvbmUgYnkgZmluaXNoX2RldmljZV90cmVlKQotICovCi12b2lkIF9faW5pdCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBtZW0sIHNpemU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICoqYWxsbmV4dHAgPSAmYWxsbm9kZXM7Ci0KLQlwcl9kZWJ1ZygiIC0+IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKLQotCS8qIEZpcnN0IHBhc3MsIHNjYW4gZm9yIHNpemUgKi8KLQlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0Jc2l6ZSA9IHVuZmxhdHRlbl9kdF9ub2RlKDAsICZzdGFydCwgTlVMTCwgTlVMTCwgMCk7Ci0Jc2l6ZSA9IChzaXplIHwgMykgKyAxOwotCi0JcHJfZGVidWcoIiAgc2l6ZSBpcyAlbHgsIGFsbG9jYXRpbmcuLi5cbiIsIHNpemUpOwotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZXhwYW5kZWQgZGV2aWNlIHRyZWUgKi8KLQltZW0gPSBsbWJfYWxsb2Moc2l6ZSArIDQsIF9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOwotCW1lbSA9ICh1bnNpZ25lZCBsb25nKSBfX3ZhKG1lbSk7Ci0KLQkoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdID0gMHhkZWFkYmVlZjsKLQotCXByX2RlYnVnKCIgIHVuZmxhdHRlbmluZyAlbHguLi5cbiIsIG1lbSk7Ci0KLQkvKiBTZWNvbmQgcGFzcywgZG8gYWN0dWFsIHVuZmxhdHRlbmluZyAqLwotCXN0YXJ0ID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQl1bmZsYXR0ZW5fZHRfbm9kZShtZW0sICZzdGFydCwgTlVMTCwgJmFsbG5leHRwLCAwKTsKLQlpZiAoKigodTMyICopc3RhcnQpICE9IE9GX0RUX0VORCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2VpcmQgdGFnIGF0IGVuZCBvZiB0cmVlOiAlMDh4XG4iLAotCQkJKigodTMyICopc3RhcnQpKTsKLQlpZiAoKCh1MzIgKiltZW0pW3NpemUgLyA0XSAhPSAweGRlYWRiZWVmKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFbmQgb2YgdHJlZSBtYXJrZXIgb3ZlcndyaXR0ZW46ICUwOHhcbiIsCi0JCQkoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdKTsKLQkqYWxsbmV4dHAgPSBOVUxMOwotCi0JLyogR2V0IHBvaW50ZXIgdG8gT0YgIi9jaG9zZW4iIG5vZGUgZm9yIHVzZSBldmVyeXdoZXJlICovCi0Jb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW4iKTsKLQlpZiAob2ZfY2hvc2VuID09IE5VTEwpCi0JCW9mX2Nob3NlbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY2hvc2VuQDAiKTsKLQotCXByX2RlYnVnKCIgPC0gdW5mbGF0dGVuX2RldmljZV90cmVlKClcbiIpOwotfQotCi0jZGVmaW5lIGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KG5vZGUpIDAKLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2NwdXModW5zaWduZWQgbG9uZyBub2RlLAotCQkJCQkgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsCi0JCQkJCSAgdm9pZCAqZGF0YSkKLXsKLQlzdGF0aWMgaW50IGxvZ2ljYWxfY3B1aWQ7Ci0JY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0JY29uc3QgdTMyICppbnRzZXJ2OwotCWludCBpLCBudGhyZWFkczsKLQlpbnQgZm91bmQgPSAwOwotCi0JLyogV2UgYXJlIHNjYW5uaW5nICJjcHUiIG5vZGVzIG9ubHkgKi8KLQlpZiAodHlwZSA9PSBOVUxMIHx8IHN0cmNtcCh0eXBlLCAiY3B1IikgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBHZXQgcGh5c2ljYWwgY3B1aWQgKi8KLQlpbnRzZXJ2ID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgTlVMTCk7Ci0JbnRocmVhZHMgPSAxOwotCi0JLyoKLQkgKiBOb3cgc2VlIGlmIGFueSBvZiB0aGVzZSB0aHJlYWRzIG1hdGNoIG91ciBib290IGNwdS4KLQkgKiBOT1RFOiBUaGlzIG11c3QgbWF0Y2ggdGhlIHBhcnNpbmcgZG9uZSBpbiBzbXBfc2V0dXBfY3B1X21hcHMuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG50aHJlYWRzOyBpKyspIHsKLQkJLyoKLQkJICogdmVyc2lvbiAyIG9mIHRoZSBrZXhlYyBwYXJhbSBmb3JtYXQgYWRkcyB0aGUgcGh5cyBjcHVpZCBvZgotCQkgKiBib290ZWQgcHJvYy4KLQkJICovCi0JCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zICYmIGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24gPj0gMikgewotCQkJaWYgKGludHNlcnZbaV0gPT0KLQkJCQkJaW5pdGlhbF9ib290X3BhcmFtcy0+Ym9vdF9jcHVpZF9waHlzKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIENoZWNrIGlmIGl0J3MgdGhlIGJvb3QtY3B1LCBzZXQgaXQncyBodyBpbmRleCBub3csCi0JCQkgKiB1bmZvcnR1bmF0ZWx5IHRoaXMgZm9ybWF0IGRpZCBub3Qgc3VwcG9ydCBib290aW5nCi0JCQkgKiBvZmYgc2Vjb25kYXJ5IHRocmVhZHMuCi0JCQkgKi8KLQkJCWlmIChvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsCi0JCQkJCSJsaW51eCxib290LWNwdSIsIE5VTEwpICE9IE5VTEwpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotI2lmZGVmIENPTkZJR19TTVAKLQkJLyogbG9naWNhbCBjcHUgaWQgaXMgYWx3YXlzIDAgb24gVVAga2VybmVscyAqLwotCQlsb2dpY2FsX2NwdWlkKys7Ci0jZW5kaWYKLQl9Ci0KLQlpZiAoZm91bmQpIHsKLQkJcHJfZGVidWcoImJvb3QgY3B1OiBsb2dpY2FsICVkIHBoeXNpY2FsICVkXG4iLCBsb2dpY2FsX2NwdWlkLAotCQkJaW50c2VydltpXSk7Ci0JCWJvb3RfY3B1aWQgPSBsb2dpY2FsX2NwdWlkOwotCX0KLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGw7Ci0JdTMyICpwcm9wOwotCi0JcHJfZGVidWcoIkxvb2tpbmcgZm9yIGluaXRyZCBwcm9wZXJ0aWVzLi4uICIpOwotCi0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1zdGFydCIsICZsKTsKLQlpZiAocHJvcCkgewotCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZykKLQkJCQkJX192YSgodTMyKW9mX3JlYWRfdWxvbmcocHJvcCwgbC80KSk7Ci0KLQkJcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1lbmQiLCAmbCk7Ci0JCWlmIChwcm9wKSB7Ci0JCQlpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpCi0JCQkJCV9fdmEoKHUzMilvZl9yZWFkX3Vsb25nKHByb3AsIDEvNCkpOwotCQkJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKLQkJfSBlbHNlIHsKLQkJCWluaXRyZF9zdGFydCA9IDA7Ci0JCX0KLQl9Ci0KLQlwcl9kZWJ1ZygiaW5pdHJkX3N0YXJ0PTB4JWx4ICBpbml0cmRfZW5kPTB4JWx4XG4iLAotCQkJCQlpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKQotewotfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lOSVRSRCAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQljb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgbDsKLQljaGFyICpwOwotCi0JcHJfZGVidWcoInNlYXJjaCBcImNob3NlblwiLCBkZXB0aDogJWQsIHVuYW1lOiAlc1xuIiwgZGVwdGgsIHVuYW1lKTsKLQotCWlmIChkZXB0aCAhPSAxIHx8Ci0JCShzdHJjbXAodW5hbWUsICJjaG9zZW4iKSAhPSAwICYmCi0JCQkJc3RyY21wKHVuYW1lLCAiY2hvc2VuQDAiKSAhPSAwKSkKLQkJcmV0dXJuIDA7Ci0KLSNpZmRlZiBDT05GSUdfS0VYRUMKLQlscHJvcCA9ICh1NjQgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsCi0JCQkJImxpbnV4LGNyYXNoa2VybmVsLWJhc2UiLCBOVUxMKTsKLQlpZiAobHByb3ApCi0JCWNyYXNoa19yZXMuc3RhcnQgPSAqbHByb3A7Ci0KLQlscHJvcCA9ICh1NjQgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsCi0JCQkJImxpbnV4LGNyYXNoa2VybmVsLXNpemUiLCBOVUxMKTsKLQlpZiAobHByb3ApCi0JCWNyYXNoa19yZXMuZW5kID0gY3Jhc2hrX3Jlcy5zdGFydCArICpscHJvcCAtIDE7Ci0jZW5kaWYKLQotCWVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZChub2RlKTsKLQotCS8qIFJldHJlaXZlIGNvbW1hbmQgbGluZSAqLwotCXAgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJib290YXJncyIsICZsKTsKLQlpZiAocCAhPSBOVUxMICYmIGwgPiAwKQotCQlzdHJsY3B5KGNtZF9saW5lLCBwLCBtaW4oKGludClsLCBDT01NQU5EX0xJTkVfU0laRSkpOwotCi0jaWZkZWYgQ09ORklHX0NNRExJTkUKLSNpZm5kZWYgQ09ORklHX0NNRExJTkVfRk9SQ0UKLQlpZiAocCA9PSBOVUxMIHx8IGwgPT0gMCB8fCAobCA9PSAxICYmICgqcCkgPT0gMCkpCi0jZW5kaWYKLQkJc3RybGNweShjbWRfbGluZSwgQ09ORklHX0NNRExJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKLSNlbmRpZiAvKiBDT05GSUdfQ01ETElORSAqLwotCi0JcHJfZGVidWcoIkNvbW1hbmQgbGluZSBpczogJXNcbiIsIGNtZF9saW5lKTsKLQotCS8qIGJyZWFrIG5vdyAqLwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKLXsKLQl1MzIgKnByb3A7Ci0KLQlpZiAoZGVwdGggIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiI3NpemUtY2VsbHMiLCBOVUxMKTsKLQlkdF9yb290X3NpemVfY2VsbHMgPSAocHJvcCA9PSBOVUxMKSA/IDEgOiAqcHJvcDsKLQlwcl9kZWJ1ZygiZHRfcm9vdF9zaXplX2NlbGxzID0gJXhcbiIsIGR0X3Jvb3Rfc2l6ZV9jZWxscyk7Ci0KLQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiI2FkZHJlc3MtY2VsbHMiLCBOVUxMKTsKLQlkdF9yb290X2FkZHJfY2VsbHMgPSAocHJvcCA9PSBOVUxMKSA/IDIgOiAqcHJvcDsKLQlwcl9kZWJ1ZygiZHRfcm9vdF9hZGRyX2NlbGxzID0gJXhcbiIsIGR0X3Jvb3RfYWRkcl9jZWxscyk7Ci0KLQkvKiBicmVhayBub3cgKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHU2NCBfX2luaXQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgY2VsbF90ICoqY2VsbHApCi17Ci0JY2VsbF90ICpwID0gKmNlbGxwOwotCi0JKmNlbGxwID0gcCArIHM7Ci0JcmV0dXJuIG9mX3JlYWRfbnVtYmVyKHAsIHMpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQljb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQotewotCWNoYXIgKnR5cGUgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJkZXZpY2VfdHlwZSIsIE5VTEwpOwotCWNlbGxfdCAqcmVnLCAqZW5kcDsKLQl1bnNpZ25lZCBsb25nIGw7Ci0KLQkvKiBMb29rIGZvciB0aGUgaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSBub2RlICovCi0vKglpZiAoZGVwdGggPT0gMSAmJgotCQlzdHJjbXAodW5hbWUsICJpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IikgPT0gMCkKLQkJcmV0dXJuIGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KG5vZGUpOwotKi8KLQkvKiBXZSBhcmUgc2Nhbm5pbmcgIm1lbW9yeSIgbm9kZXMgb25seSAqLwotCWlmICh0eXBlID09IE5VTEwpIHsKLQkJLyoKLQkJICogVGhlIGxvbmd0cmFpbCBkb2Vzbid0IGhhdmUgYSBkZXZpY2VfdHlwZSBvbiB0aGUKLQkJICogL21lbW9yeSBub2RlLCBzbyBsb29rIGZvciB0aGUgbm9kZSBjYWxsZWQgL21lbW9yeUAwLgotCQkgKi8KLQkJaWYgKGRlcHRoICE9IDEgfHwgc3RyY21wKHVuYW1lLCAibWVtb3J5QDAiKSAhPSAwKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgIm1lbW9yeSIpICE9IDApCi0JCXJldHVybiAwOwotCi0JcmVnID0gKGNlbGxfdCAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHVzYWJsZS1tZW1vcnkiLCAmbCk7Ci0JaWYgKHJlZyA9PSBOVUxMKQotCQlyZWcgPSAoY2VsbF90ICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgJmwpOwotCWlmIChyZWcgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQllbmRwID0gcmVnICsgKGwgLyBzaXplb2YoY2VsbF90KSk7Ci0KLQlwcl9kZWJ1ZygibWVtb3J5IHNjYW4gbm9kZSAlcywgcmVnIHNpemUgJWxkLCBkYXRhOiAleCAleCAleCAleCxcbiIsCi0JCXVuYW1lLCBsLCByZWdbMF0sIHJlZ1sxXSwgcmVnWzJdLCByZWdbM10pOwotCi0Jd2hpbGUgKChlbmRwIC0gcmVnKSA+PSAoZHRfcm9vdF9hZGRyX2NlbGxzICsgZHRfcm9vdF9zaXplX2NlbGxzKSkgewotCQl1NjQgYmFzZSwgc2l6ZTsKLQotCQliYXNlID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X2FkZHJfY2VsbHMsICZyZWcpOwotCQlzaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZyZWcpOwotCi0JCWlmIChzaXplID09IDApCi0JCQljb250aW51ZTsKLQkJcHJfZGVidWcoIiAtICVsbHggLCAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKLQotCQlsbWJfYWRkKGJhc2UsIHNpemUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19QSFlQX0RVTVAKLS8qKgotICogcGh5cF9kdW1wX2NhbGN1bGF0ZV9yZXNlcnZlX3NpemUoKSAtIHJlc2VydmUgdmFyaWFibGUgYm9vdCBhcmVhIDUlIG9yIGFyZwotICoKLSAqIEZ1bmN0aW9uIHRvIGZpbmQgdGhlIGxhcmdlc3Qgc2l6ZSB3ZSBuZWVkIHRvIHJlc2VydmUKLSAqIGR1cmluZyBlYXJseSBib290IHByb2Nlc3MuCi0gKgotICogSXQgZWl0aGVyIGxvb2tzIGZvciBib290IHBhcmFtIGFuZCByZXR1cm5zIHRoYXQgT1IKLSAqIHJldHVybnMgbGFyZ2VyIG9mIDI1NiBvciA1JSByb3VuZGVkIGRvd24gdG8gbXVsdGlwbGVzIG9mIDI1Nk1CLgotICoKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBoeXBfZHVtcF9jYWxjdWxhdGVfcmVzZXJ2ZV9zaXplKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlpZiAocGh5cF9kdW1wX2luZm8tPnJlc2VydmVfYm9vdHZhcikKLQkJcmV0dXJuIHBoeXBfZHVtcF9pbmZvLT5yZXNlcnZlX2Jvb3R2YXI7Ci0KLQkvKiBkaXZpZGUgYnkgMjAgdG8gZ2V0IDUlIG9mIHZhbHVlICovCi0JdG1wID0gbG1iX2VuZF9vZl9EUkFNKCk7Ci0JZG9fZGl2KHRtcCwgMjApOwotCi0JLyogcm91bmQgaXQgZG93biBpbiBtdWx0aXBsZXMgb2YgMjU2ICovCi0JdG1wID0gdG1wICYgfjB4MEZGRkZGRkZVTDsKLQotCXJldHVybiAodG1wID4gUEhZUF9EVU1QX1JNUl9FTkQgPyB0bXAgOiBQSFlQX0RVTVBfUk1SX0VORCk7Ci19Ci0KLS8qKgotICogcGh5cF9kdW1wX3Jlc2VydmVfbWVtKCkgLSByZXNlcnZlIGFsbCBub3QteWV0LWR1bXBlZCBtbWVtb3J5Ci0gKgotICogVGhpcyByb3V0aW5lIG1heSByZXNlcnZlIG1lbW9yeSByZWdpb25zIGluIHRoZSBrZXJuZWwgb25seQotICogaWYgdGhlIHN5c3RlbSBpcyBzdXBwb3J0ZWQgYW5kIGEgZHVtcCB3YXMgdGFrZW4gaW4gbGFzdAotICogYm9vdCBpbnN0YW5jZSBvciBpZiB0aGUgaGFyZHdhcmUgaXMgc3VwcG9ydGVkIGFuZCB0aGUKLSAqIHNjcmF0Y2ggYXJlYSBuZWVkcyB0byBiZSBzZXR1cC4gSW4gb3RoZXIgaW5zdGFuY2VzIGl0IHJldHVybnMKLSAqIHdpdGhvdXQgcmVzZXJ2aW5nIGFueXRoaW5nLiBUaGUgbWVtb3J5IGluIGNhc2Ugb2YgZHVtcCBiZWluZwotICogYWN0aXZlIGlzIGZyZWVkIHdoZW4gdGhlIGR1bXAgaXMgY29sbGVjdGVkIChieSB1c2VybGFuZCB0b29scykuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwaHlwX2R1bXBfcmVzZXJ2ZV9tZW0odm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemU7Ci0JdW5zaWduZWQgbG9uZyB2YXJpYWJsZV9yZXNlcnZlX3NpemU7Ci0KLQlpZiAoIXBoeXBfZHVtcF9pbmZvLT5waHlwX2R1bXBfY29uZmlndXJlZCkgewotCQlwcmludGsoS0VSTl9FUlIgIlBoeXAtZHVtcCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgaGFyZHdhcmVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFwaHlwX2R1bXBfaW5mby0+cGh5cF9kdW1wX2F0X2Jvb3QpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUGh5cC1kdW1wIGRpc2FibGVkIGF0IGJvb3QgdGltZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQl2YXJpYWJsZV9yZXNlcnZlX3NpemUgPSBwaHlwX2R1bXBfY2FsY3VsYXRlX3Jlc2VydmVfc2l6ZSgpOwotCi0JaWYgKHBoeXBfZHVtcF9pbmZvLT5waHlwX2R1bXBfaXNfYWN0aXZlKSB7Ci0JCS8qIFJlc2VydmUgKmV2ZXJ5dGhpbmcqIGFib3ZlIFJNUi5BcmVhIGZyZWVkIGJ5IHVzZXJsYW5kIHRvb2xzKi8KLQkJYmFzZSA9IHZhcmlhYmxlX3Jlc2VydmVfc2l6ZTsKLQkJc2l6ZSA9IGxtYl9lbmRfb2ZfRFJBTSgpIC0gYmFzZTsKLQotCQkvKiBYWFggY3Jhc2hlZF9yYW1fZW5kIGlzIHdyb25nLCBzaW5jZSBpdCBtYXkgYmUgYmV5b25kCi0JCSAqIHRoZSBtZW1vcnlfbGltaXQsIGl0IHdpbGwgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KLQkJbG1iX3Jlc2VydmUoYmFzZSwgc2l6ZSk7Ci0KLQkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zdGFydCA9IGJhc2U7Ci0JCXBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc2l6ZSA9IHNpemU7Ci0JfSBlbHNlIHsKLQkJc2l6ZSA9IHBoeXBfZHVtcF9pbmZvLT5jcHVfc3RhdGVfc2l6ZSArCi0JCQlwaHlwX2R1bXBfaW5mby0+aHB0ZV9yZWdpb25fc2l6ZSArCi0JCQl2YXJpYWJsZV9yZXNlcnZlX3NpemU7Ci0JCWJhc2UgPSBsbWJfZW5kX29mX0RSQU0oKSAtIHNpemU7Ci0JCWxtYl9yZXNlcnZlKGJhc2UsIHNpemUpOwotCQlwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3N0YXJ0ID0gYmFzZTsKLQkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zaXplID0gc2l6ZTsKLQl9Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwaHlwX2R1bXBfcmVzZXJ2ZV9tZW0odm9pZCkge30KLSNlbmRpZiAvKiBDT05GSUdfUEhZUF9EVU1QICAmJiBDT05GSUdfUFBDX1JUQVMgKi8KLQogI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKIC8qIE1TIHRoaXMgaXMgTWljcm9ibGF6ZSBzcGVjaWZpZyBmdW5jdGlvbiAqLwogc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX3NlcmlhbCh1bnNpZ25lZCBsb25nIG5vZGUsCkBAIC03NzUsMTEgKzk4LDYgQEAKIAkvKiBTZXR1cCBmbGF0IGRldmljZS10cmVlIHBvaW50ZXIgKi8KIAlpbml0aWFsX2Jvb3RfcGFyYW1zID0gcGFyYW1zOwogCi0jaWZkZWYgQ09ORklHX1BIWVBfRFVNUAotCS8qIHNjYW4gdHJlZSB0byBzZWUgaWYgZHVtcCBvY2N1cmVkIGR1cmluZyBsYXN0IGJvb3QgKi8KLQlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX3BoeXBfZHVtcCwgTlVMTCk7Ci0jZW5kaWYKLQogCS8qIFJldHJpZXZlIHZhcmlvdXMgaW5mb3JtYXRpb25zIGZyb20gdGhlIC9jaG9zZW4gbm9kZSBvZiB0aGUKIAkgKiBkZXZpY2UtdHJlZSwgaW5jbHVkaW5nIHRoZSBwbGF0Zm9ybSB0eXBlLCBpbml0cmQgbG9jYXRpb24gYW5kCiAJICogc2l6ZSwgVENFIHJlc2VydmUsIGFuZCBtb3JlIC4uLgpAQCAtNzk5LDMzICsxMTcsMTggQEAKIAogCXByX2RlYnVnKCJQaHlzLiBtZW06ICVseFxuIiwgKHVuc2lnbmVkIGxvbmcpIGxtYl9waHlzX21lbV9zaXplKCkpOwogCi0JcHJfZGVidWcoIlNjYW5uaW5nIENQVXMgLi4uXG4iKTsKLQotCS8qIFJldHJlaXZlIENQVSByZWxhdGVkIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBmbGF0IHRyZWUKLQkgKiAoYWx0aXZlYyBzdXBwb3J0LCBib290IENQVSBJRCwgLi4uKQotCSAqLwotCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fY3B1cywgTlVMTCk7Ci0KIAlwcl9kZWJ1ZygiIDwtIGVhcmx5X2luaXRfZGV2dHJlZSgpXG4iKTsKIH0KIAotLyoqCi0gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcm9vdCBub2RlIGhhcyBhIGdpdmVuIHZhbHVlIGluIGl0cwotICogY29tcGF0aWJsZSBwcm9wZXJ0eS4KLSAqLwotaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X3NldHVwX2luaXRyZF9hcmNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCXVuc2lnbmVkIGxvbmcgZW5kKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKLQlpbnQgcmMgPSAwOwotCi0Jcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7Ci0JaWYgKHJvb3QpIHsKLQkJcmMgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShyb290LCBjb21wYXQpOwotCQlvZl9ub2RlX3B1dChyb290KTsKLQl9Ci0JcmV0dXJuIHJjOworCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnQpOworCWluaXRyZF9lbmQgPSAodW5zaWduZWQgbG9uZylfX3ZhKGVuZCk7CisJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKIH0KLUVYUE9SVF9TWU1CT0wobWFjaGluZV9pc19jb21wYXRpYmxlKTsKKyNlbmRpZgogCiAvKioqKioqKgogICoKQEAgLTgzOCwyNzMgKzE0MSw2IEBACiAgKgogICoqKioqKiovCiAKLS8qKgotICoJb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUgLSBGaW5kIGEgbm9kZSBnaXZlbiBhIHBoYW5kbGUKLSAqCUBoYW5kbGU6CXBoYW5kbGUgb2YgdGhlIG5vZGUgdG8gZmluZAotICoKLSAqCVJldHVybnMgYSBub2RlIHBvaW50ZXIgd2l0aCByZWZjb3VudCBpbmNyZW1lbnRlZCwgdXNlCi0gKglvZl9ub2RlX3B1dCgpIG9uIGl0IHdoZW4gZG9uZS4KLSAqLwotc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfcGhhbmRsZShwaGFuZGxlIGhhbmRsZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JcmVhZF9sb2NrKCZkZXZ0cmVlX2xvY2spOwotCWZvciAobnAgPSBhbGxub2RlczsgbnAgIT0gTlVMTDsgbnAgPSBucC0+YWxsbmV4dCkKLQkJaWYgKG5wLT5saW51eF9waGFuZGxlID09IGhhbmRsZSkKLQkJCWJyZWFrOwotCW9mX25vZGVfZ2V0KG5wKTsKLQlyZWFkX3VubG9jaygmZGV2dHJlZV9sb2NrKTsKLQlyZXR1cm4gbnA7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKTsKLQotLyoqCi0gKglvZl9ub2RlX2dldCAtIEluY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKLSAqCUBub2RlOglOb2RlIHRvIGluYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KLSAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKLSAqCi0gKglSZXR1cm5zIG5vZGUuCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCWlmIChub2RlKQotCQlrcmVmX2dldCgmbm9kZS0+a3JlZik7Ci0JcmV0dXJuIG5vZGU7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX25vZGVfZ2V0KTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmtyZWZfdG9fZGV2aWNlX25vZGUoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZGV2aWNlX25vZGUsIGtyZWYpOwotfQotCi0vKioKLSAqCW9mX25vZGVfcmVsZWFzZSAtIHJlbGVhc2UgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbm9kZQotICoJQGtyZWY6ICBrcmVmIGVsZW1lbnQgb2YgdGhlIG5vZGUgdG8gYmUgcmVsZWFzZWQKLSAqCi0gKglJbiBvZl9ub2RlX3B1dCgpIHRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIGtyZWZfcHV0KCkKLSAqCWFzIHRoZSBkZXN0cnVjdG9yLgotICovCi1zdGF0aWMgdm9pZCBvZl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlID0ga3JlZl90b19kZXZpY2Vfbm9kZShrcmVmKTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBub2RlLT5wcm9wZXJ0aWVzOwotCi0JLyogV2Ugc2hvdWxkIG5ldmVyIGJlIHJlbGVhc2luZyBub2RlcyB0aGF0IGhhdmVuJ3QgYmVlbiBkZXRhY2hlZC4gKi8KLQlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9ERVRBQ0hFRCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiV0FSTklORzogQmFkIG9mX25vZGVfcHV0KCkgb24gJXNcbiIsCi0JCQlub2RlLT5mdWxsX25hbWUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCWtyZWZfaW5pdCgmbm9kZS0+a3JlZik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9EWU5BTUlDKSkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKHByb3ApIHsKLQkJc3RydWN0IHByb3BlcnR5ICpuZXh0ID0gcHJvcC0+bmV4dDsKLQkJa2ZyZWUocHJvcC0+bmFtZSk7Ci0JCWtmcmVlKHByb3AtPnZhbHVlKTsKLQkJa2ZyZWUocHJvcCk7Ci0JCXByb3AgPSBuZXh0OwotCi0JCWlmICghcHJvcCkgewotCQkJcHJvcCA9IG5vZGUtPmRlYWRwcm9wczsKLQkJCW5vZGUtPmRlYWRwcm9wcyA9IE5VTEw7Ci0JCX0KLQl9Ci0Ja2ZyZWUobm9kZS0+ZnVsbF9uYW1lKTsKLQlrZnJlZShub2RlLT5kYXRhKTsKLQlrZnJlZShub2RlKTsKLX0KLQotLyoqCi0gKglvZl9ub2RlX3B1dCAtIERlY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKLSAqCUBub2RlOglOb2RlIHRvIGRlYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KLSAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKLSAqCi0gKi8KLXZvaWQgb2Zfbm9kZV9wdXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCWlmIChub2RlKQotCQlrcmVmX3B1dCgmbm9kZS0+a3JlZiwgb2Zfbm9kZV9yZWxlYXNlKTsKLX0KLUVYUE9SVF9TWU1CT0wob2Zfbm9kZV9wdXQpOwotCi0vKgotICogUGx1ZyBhIGRldmljZSBub2RlIGludG8gdGhlIHRyZWUgYW5kIGdsb2JhbCBsaXN0LgotICovCi12b2lkIG9mX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbnAtPnNpYmxpbmcgPSBucC0+cGFyZW50LT5jaGlsZDsKLQlucC0+YWxsbmV4dCA9IGFsbG5vZGVzOwotCW5wLT5wYXJlbnQtPmNoaWxkID0gbnA7Ci0JYWxsbm9kZXMgPSBucDsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiAiVW5wbHVnIiBhIG5vZGUgZnJvbSB0aGUgZGV2aWNlIHRyZWUuICBUaGUgY2FsbGVyIG11c3QgaG9sZAotICogYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuICBUaGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQotICogaXMgbm90IGZyZWVkIHVudGlsIGl0cyByZWZjb3VudCBnb2VzIHRvIHplcm8uCi0gKi8KLXZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotCXBhcmVudCA9IG5wLT5wYXJlbnQ7Ci0JaWYgKCFwYXJlbnQpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWlmIChhbGxub2RlcyA9PSBucCkKLQkJYWxsbm9kZXMgPSBucC0+YWxsbmV4dDsKLQllbHNlIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2OwotCQlmb3IgKHByZXYgPSBhbGxub2RlczsKLQkJICAgICBwcmV2LT5hbGxuZXh0ICE9IG5wOwotCQkgICAgIHByZXYgPSBwcmV2LT5hbGxuZXh0KQotCQkJOwotCQlwcmV2LT5hbGxuZXh0ID0gbnAtPmFsbG5leHQ7Ci0JfQotCi0JaWYgKHBhcmVudC0+Y2hpbGQgPT0gbnApCi0JCXBhcmVudC0+Y2hpbGQgPSBucC0+c2libGluZzsKLQllbHNlIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2c2liOwotCQlmb3IgKHByZXZzaWIgPSBucC0+cGFyZW50LT5jaGlsZDsKLQkJICAgICBwcmV2c2liLT5zaWJsaW5nICE9IG5wOwotCQkgICAgIHByZXZzaWIgPSBwcmV2c2liLT5zaWJsaW5nKQotCQkJOwotCQlwcmV2c2liLT5zaWJsaW5nID0gbnAtPnNpYmxpbmc7Ci0JfQotCi0Jb2Zfbm9kZV9zZXRfZmxhZyhucCwgT0ZfREVUQUNIRUQpOwotCi1vdXRfdW5sb2NrOgotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIEFkZCBhIHByb3BlcnR5IHRvIGEgbm9kZQotICovCi1pbnQgcHJvbV9hZGRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXByb3AtPm5leHQgPSBOVUxMOwotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbmV4dCA9ICZucC0+cHJvcGVydGllczsKLQl3aGlsZSAoKm5leHQpIHsKLQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAoKm5leHQpLT5uYW1lKSA9PSAwKSB7Ci0JCQkvKiBkdXBsaWNhdGUgISBkb24ndCBpbnNlcnQgaXQgKi8KLQkJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQluZXh0ID0gJigqbmV4dCktPm5leHQ7Ci0JfQotCSpuZXh0ID0gcHJvcDsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCi0JLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfYWRkX3Byb3AobnAtPnBkZSwgcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgYSBwcm9wZXJ0eSBmcm9tIGEgbm9kZS4gIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseQotICogcmVtb3ZlIGl0LCBzaW5jZSB3ZSBoYXZlIGdpdmVuIG91dCB3aG8ta25vd3MtaG93LW1hbnkgcG9pbnRlcnMKLSAqIHRvIHRoZSBkYXRhIHVzaW5nIGdldC1wcm9wZXJ0eS4gIEluc3RlYWQgd2UganVzdCBtb3ZlIHRoZSBwcm9wZXJ0eQotICogdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiIGxpc3QsIHNvIGl0IHdvbid0IGJlIGZvdW5kIGFueSBtb3JlLgotICovCi1pbnQgcHJvbV9yZW1vdmVfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZm91bmQgPSAwOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwotCXdoaWxlICgqbmV4dCkgewotCQlpZiAoKm5leHQgPT0gcHJvcCkgewotCQkJLyogZm91bmQgdGhlIG5vZGUgKi8KLQkJCSpuZXh0ID0gcHJvcC0+bmV4dDsKLQkJCXByb3AtPm5leHQgPSBucC0+ZGVhZHByb3BzOwotCQkJbnAtPmRlYWRwcm9wcyA9IHByb3A7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQluZXh0ID0gJigqbmV4dCktPm5leHQ7Ci0JfQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotCWlmICghZm91bmQpCi0JCXJldHVybiAtRU5PREVWOwotCi0jaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQotCS8qIHRyeSB0byByZW1vdmUgdGhlIHByb2Mgbm9kZSBhcyB3ZWxsICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfcmVtb3ZlX3Byb3AobnAtPnBkZSwgcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhIG5vZGUuICBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkKLSAqIHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQgd2hvLWtub3dzLWhvdy1tYW55IHBvaW50ZXJzCi0gKiB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuICBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkKLSAqIHRvIHRoZSAiZGVhZCBwcm9wZXJ0aWVzIiBsaXN0LCBhbmQgYWRkIHRoZSBuZXcgcHJvcGVydHkgdG8gdGhlCi0gKiBwcm9wZXJ0eSBsaXN0Ci0gKi8KLWludCBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJIHN0cnVjdCBwcm9wZXJ0eSAqbmV3cHJvcCwKLQkJCSBzdHJ1Y3QgcHJvcGVydHkgKm9sZHByb3ApCi17Ci0Jc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBmb3VuZCA9IDA7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpuZXh0KSB7Ci0JCWlmICgqbmV4dCA9PSBvbGRwcm9wKSB7Ci0JCQkvKiBmb3VuZCB0aGUgbm9kZSAqLwotCQkJbmV3cHJvcC0+bmV4dCA9IG9sZHByb3AtPm5leHQ7Ci0JCQkqbmV4dCA9IG5ld3Byb3A7Ci0JCQlvbGRwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKLQkJCW5wLT5kZWFkcHJvcHMgPSBvbGRwcm9wOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWZvdW5kKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKLQkvKiB0cnkgdG8gYWRkIHRvIHByb2MgYXMgd2VsbCBpZiBpdCB3YXMgaW5pdGlhbGl6ZWQgKi8KLQlpZiAobnAtPnBkZSkKLQkJcHJvY19kZXZpY2VfdHJlZV91cGRhdGVfcHJvcChucC0+cGRlLCBuZXdwcm9wLCBvbGRwcm9wKTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFICovCi0KLQlyZXR1cm4gMDsKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKERFQlVHKQogc3RhdGljIHN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciBmbGF0X2R0X2Jsb2I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggOGI1ZDE3NC4uNTkxY2EwYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTQxLDcgKzQxLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBHQ0QKIAlzZWxlY3QgVkxZTlEKIAloZWxwCkBAIC0xODAsNyArMTgwLDcgQEAKIAogY29uZmlnIE1BQ0hfTE9PTkdTT04KIAlib29sICJMb29uZ3NvbiBmYW1pbHkgb2YgbWFjaGluZXMiCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTAKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IG9mIExvb25nc29uIGZhbWlseSBvZiBtYWNoaW5lcy4KIApAQCAtMTI5NSw3ICsxMjk1LDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAogCXNlbGVjdCBOUl9DUFVTX0RFRkFVTFRfMTYKIAlzZWxlY3QgV0VBS19PUkRFUklORwotCXNlbGVjdCBXRUFLX1JFT1JERVJJTkdfQkVZT05EX0xMU0MKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KIAlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hVR0VQQUdFUwogCWhlbHAKQEAgLTE3MjYsNiArMTcyNSw5IEBACiBjb25maWcgNjRCSVRfUEhZU19BRERSCiAJYm9vbAogCitjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAorICAgICAgIGRlZl9ib29sIDY0QklUX1BIWVNfQUREUgorCiBjb25maWcgQ1BVX0hBU19TTUFSVE1JUFMKIAlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19TTUFSVE1JUFMKIAlib29sICJTdXBwb3J0IGZvciB0aGUgU21hcnRNSVBTIEFTRSIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKaW5kZXggZDJiODhhMC4uNDNkYzI3OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcuZGVidWcKQEAgLTEwMiw0ICsxMDIsMzAgQEAKIAkgIGFyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWJ1Zy5oIGZvciBkZWJ1Z2dpbmcgbWFjcm9zLgogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIERFQlVHX1pCT09UCisJYm9vbCAiRW5hYmxlIGNvbXByZXNzZWQga2VybmVsIHN1cHBvcnQgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFNZU19TVVBQT1JUU19aQk9PVAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSB3YW50IHRvIGFkZCBjb21wcmVzc2VkIGtlcm5lbCBzdXBwb3J0IHRvIGEgbmV3IGJvYXJkLCBhbmQgdGhlCisJICBib2FyZCBzdXBwb3J0cyB1YXJ0MTY1NTAgY29tcGF0aWJsZSBzZXJpYWwgcG9ydCwgcGxlYXNlIHNlbGVjdAorCSAgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MCBmb3IgeW91ciBib2FyZCBhbmQgZW5hYmxlIHRoaXMgb3B0aW9uIHRvCisJICBkZWJ1ZyBpdC4KKworCSAgSWYgeW91ciBib2FyZCBkb2Vzbid0IHN1cHBvcnQgdWFydDE2NTUwIGNvbXBhdGlibGUgc2VyaWFsIHBvcnQsIHlvdQorCSAgY2FuIHRyeSB0byBzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UIGFuZCB1c2UgdGhlIG90aGVyIG1ldGhvZHMgdG8KKwkgIGRlYnVnIGl0LiBmb3IgZXhhbXBsZSwgYWRkIGEgbmV3IHNlcmlhbCBwb3J0IHN1cHBvcnQganVzdCBhcworCSAgYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LTE2NTUwLmMgZG9lcy4KKworCSAgQWZ0ZXIgdGhlIGNvbXByZXNzZWQga2VybmVsIHN1cHBvcnQgd29ya3MsIHBsZWFzZSBkaXNhYmxlIHRoaXMgb3B0aW9uCisJICB0byByZWR1Y2UgdGhlIGtlcm5lbCBpbWFnZSBzaXplIGFuZCBzcGVlZCB1cCB0aGUgYm9vdGluZyBwcm9jZWR1cmUgYQorCSAgbGl0dGxlLgorCitjb25maWcgU1BJTkxPQ0tfVEVTVAorCWJvb2wgIkVuYWJsZSBzcGlubG9jayB0aW1pbmcgdGVzdHMgaW4gZGVidWdmcyIKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgQWRkIHNldmVyYWwgZmlsZXMgdG8gdGhlIGRlYnVnZnMgdG8gdGVzdCBzcGlubG9jayBzcGVlZC4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDE4OTNlZmQuLjJmMmVhYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTE4NSw2ICsxODUsMTUgQEAKIGxpYnMteQkJCQkrPSBhcmNoL21pcHMvZncvbGliLwogCiAjCisjIEtlcm5lbCBjb21wcmVzc2lvbgorIworaWZkZWYgU1lTX1NVUFBPUlRTX1pCT09UCitDT01QUkVTU0lPTl9GTkFNRQkJPSB2bWxpbnV6CitlbHNlCitDT01QUkVTU0lPTl9GTkFNRQkJPSB2bWxpbnV4CitlbmRpZgorCisjCiAjIEJvYXJkLWRlcGVuZGVudCBvcHRpb25zIGFuZCBleHRyYSBmaWxlcwogIwogCkBAIC0zMzIsMTEgKzM0MSwxMSBAQAogIwogIyBMb29uZ3NvbiBmYW1pbHkKICMKLWNvcmUtJChDT05GSUdfTUFDSF9MT09OR1NPTikgKz1hcmNoL21pcHMvbG9vbmdzb24vCitjb3JlLSQoQ09ORklHX01BQ0hfTE9PTkdTT04pICs9IGFyY2gvbWlwcy9sb29uZ3Nvbi8KIGNmbGFncy0kKENPTkZJR19NQUNIX0xPT05HU09OKSArPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24gXAogICAgICAgICAgICAgICAgICAgICAtbW5vLWJyYW5jaC1saWtlbHkKLWxvYWQtJChDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRSkgKz0weGZmZmZmZmZmODAxMDAwMDAKLWxvYWQtJChDT05GSUdfTEVNT1RFX01BQ0gyRikgKz0weGZmZmZmZmZmODAyMDAwMDAKK2xvYWQtJChDT05GSUdfTEVNT1RFX0ZVTE9PTkcyRSkgKz0gMHhmZmZmZmZmZjgwMTAwMDAwCitsb2FkLSQoQ09ORklHX0xFTU9URV9NQUNIMkYpICs9IDB4ZmZmZmZmZmY4MDIwMDAwMAogCiAjCiAjIE1JUFMgTWFsdGEgYm9hcmQKQEAgLTM0NCw3ICszNTMsNyBAQAogY29yZS0kKENPTkZJR19NSVBTX01BTFRBKQkrPSBhcmNoL21pcHMvbXRpLW1hbHRhLwogY2ZsYWdzLSQoQ09ORklHX01JUFNfTUFMVEEpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1tYWx0YQogbG9hZC0kKENPTkZJR19NSVBTX01BTFRBKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKLWFsbC0kKENPTkZJR19NSVBTX01BTFRBKQk6PSB2bWxpbnV6LmJpbgorYWxsLSQoQ09ORklHX01JUFNfTUFMVEEpCTo9ICQoQ09NUFJFU1NJT05fRk5BTUUpLmJpbgogCiAjCiAjIE1JUFMgU0lNCkBAIC01OTQsNyArNjAzLDcgQEAKIGVsc2UKIGxvYWQtJChDT05GSUdfU05JX1JNKQkJKz0gMHhmZmZmZmZmZjgwMDMwMDAwCiBlbmRpZgotYWxsLSQoQ09ORklHX1NOSV9STSkJCTo9IHZtbGludXouZWNvZmYKK2FsbC0kKENPTkZJR19TTklfUk0pCQk6PSAkKENPTVBSRVNTSU9OX0ZOQU1FKS5lY29mZgogCiAjCiAjIENvbW1vbiBUWHg5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnIGIvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZwppbmRleCAwMGI0OThlLi5kZjNiMWE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKQEAgLTEsNSArMSw1IEBACi0jIGF1MTAwMC1zdHlsZSBncGlvCi1jb25maWcgQUxDSEVNWV9HUElPX0FVMTAwMAorIyBhdTEwMDAtc3R5bGUgZ3BpbyBhbmQgaW50ZXJydXB0IGNvbnRyb2xsZXJzCitjb25maWcgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCWJvb2wKIAogIyBzZWxlY3QgdGhpcyBpbiB5b3VyIGJvYXJkIGNvbmZpZyBpZiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGdwaW8KQEAgLTIwLDEyICsyMCwxNCBAQAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNPQ19BVTE1MDAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfQk9TUE9SVVMKIAlib29sICJBbGNoZW15IEJvc3BvcnVzIGJvYXJkIgogCXNlbGVjdCBTT0NfQVUxNTAwCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19EQjEwMDAKIAlib29sICJBbGNoZW15IERCMTAwMCBib2FyZCIKQEAgLTMzLDEyICszNSwxNCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19EQjExMDAKIAlib29sICJBbGNoZW15IERCMTEwMCBib2FyZCIKIAlzZWxlY3QgU09DX0FVMTEwMAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfREIxMjAwCiAJYm9vbCAiQWxjaGVteSBEQjEyMDAgYm9hcmQiCkBAIC00Niw2ICs1MCw3IEBACiAJc2VsZWN0IERNQV9DT0hFUkVOVAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0RCMTUwMAogCWJvb2wgIkFsY2hlbXkgREIxNTAwIGJvYXJkIgpAQCAtNTUsNiArNjAsNyBAQAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0RCMTU1MAogCWJvb2wgIkFsY2hlbXkgREIxNTUwIGJvYXJkIgpAQCAtNjMsMTIgKzY5LDE0IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX01JUkFHRQogCWJvb2wgIkFsY2hlbXkgTWlyYWdlIGJvYXJkIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU09DX0FVMTUwMAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19QQjEwMDAKIAlib29sICJBbGNoZW15IFBCMTAwMCBib2FyZCIKQEAgLTc3LDYgKzg1LDcgQEAKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBTV0FQX0lPX1NQQUNFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1BCMTEwMAogCWJvb2wgIkFsY2hlbXkgUEIxMTAwIGJvYXJkIgpAQCAtODUsNiArOTQsNyBAQAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNXQVBfSU9fU1BBQ0UKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfUEIxMjAwCiAJYm9vbCAiQWxjaGVteSBQQjEyMDAgYm9hcmQiCkBAIC05Miw2ICsxMDIsNyBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19QQjE1MDAKIAlib29sICJBbGNoZW15IFBCMTUwMCBib2FyZCIKQEAgLTk5LDYgKzExMCw3IEBACiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1BCMTU1MAogCWJvb2wgIkFsY2hlbXkgUEIxNTUwIGJvYXJkIgpAQCAtMTA3LDM5ICsxMTksNDEgQEAKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBNSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1hYUzE1MDAKIAlib29sICJNeUNhYmxlIFhYUzE1MDAgYm9hcmQiCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTT0NfQVUxNTAwCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGVuZGNob2ljZQogCiBjb25maWcgU09DX0FVMTAwMAogCWJvb2wKIAlzZWxlY3QgU09DX0FVMVgwMAotCXNlbGVjdCBBTENIRU1ZX0dQSU9fQVUxMDAwCisJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTExMDAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKLQlzZWxlY3QgQUxDSEVNWV9HUElPX0FVMTAwMAorCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxNTAwCiAJYm9vbAogCXNlbGVjdCBTT0NfQVUxWDAwCi0Jc2VsZWN0IEFMQ0hFTVlfR1BJT19BVTEwMDAKKwlzZWxlY3QgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCiBjb25maWcgU09DX0FVMTU1MAogCWJvb2wKIAlzZWxlY3QgU09DX0FVMVgwMAotCXNlbGVjdCBBTENIRU1ZX0dQSU9fQVUxMDAwCisJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTEyMDAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKLQlzZWxlY3QgQUxDSEVNWV9HUElPX0FVMTAwMAorCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxWDAwCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL01ha2VmaWxlCmluZGV4IGI2N2ZiNTEuLjA2YzBlNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vTWFrZWZpbGUKQEAgLTUsMTQgKzUsMTUgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IEF1MXh4MCBDUFVzLCBnZW5lcmljIGZpbGVzLgogIwogCi1vYmoteSArPSBwcm9tLm8gaXJxLm8gcHV0cy5vIHRpbWUubyByZXNldC5vIFwKLQljbG9ja3MubyBwbGF0Zm9ybS5vIHBvd2VyLm8gc2V0dXAubyBcCitvYmoteSArPSBwcm9tLm8gdGltZS5vIGNsb2Nrcy5vIHBsYXRmb3JtLm8gcG93ZXIubyBzZXR1cC5vIFwKIAlzbGVlcGVyLm8gZG1hLm8gZGJkbWEubwogCitvYmotJChDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMCkgKz0gaXJxLm8KKwogIyBvcHRpb25hbCBncGlvbGliIHN1cHBvcnQKIGlmZXEgKCQoQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCksKQogIGlmZXEgKCQoQ09ORklHX0dQSU9MSUIpLHkpCi0gIG9iai0kKENPTkZJR19BTENIRU1ZX0dQSU9fQVUxMDAwKSArPSBncGlvbGliLWF1MTAwMC5vCisgIG9iai0kKENPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwKSArPSBncGlvbGliLWF1MTAwMC5vCiAgZW5kaWYKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYwppbmRleCBkODk5MTg1Li40NjBjNjI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2Nrcy5jCkBAIC00MCw4ICs0MCw2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGF1MXgwMF9jbG9jazsgLyogIEh6ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB1YXJ0X2JhdWRfYmFzZTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyh0aW1lX2xvY2spOwotCiAvKgogICogU2V0IHRoZSBhdTEwMDBfY2xvY2sKICAqLwpAQCAtODQsOSArODIsNiBAQAogdW5zaWduZWQgbG9uZyBhdTF4eHhfY2FsY19jbG9jayh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY3B1X3NwZWVkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZV9sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIE9uIGVhcmx5IEF1MTAwMCwgc3lzX2NwdXBsbCB3YXMgd3JpdGUtb25seS4gU2luY2UgdGhlc2UKQEAgLTEwOCw4ICsxMDMsNiBAQAogCXNldF9hdTF4MDBfdWFydF9iYXVkX2Jhc2UoY3B1X3NwZWVkIC8gKDIgKiAoKGludCkoYXVfcmVhZGwoU1lTX1BPV0VSQ1RSTCkKIAkJCQkJCQkgICYgMHgwMykgKyAyKSAqIDE2KSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lX2xvY2ssIGZsYWdzKTsKLQogCXNldF9hdTF4MDBfc3BlZWQoY3B1X3NwZWVkKTsKIAogCXJldHVybiBjcHVfc3BlZWQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCmluZGV4IGY5MjAxY2EuLjk5YWU4NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC01OCw3ICs1OSw2IEBACiAKIHN0YXRpYyBkYmRtYV9nbG9iYWxfdCAqZGJkbWFfZ3B0ciA9IChkYmRtYV9nbG9iYWxfdCAqKURETUFfR0xPQkFMX0JBU0U7CiBzdGF0aWMgaW50IGRiZG1hX2luaXRpYWxpemVkOwotc3RhdGljIHZvaWQgYXUxeHh4X2RiZG1hX2luaXQodm9pZCk7CiAKIHN0YXRpYyBkYmRldl90YWJfdCBkYmRldl90YWJbXSA9IHsKICNpZmRlZiBDT05GSUdfU09DX0FVMTU1MApAQCAtMjM3LDcgKzIzNyw3IEBACiAgICAgICAgdm9pZCAoKmNhbGxiYWNrKShpbnQsIHZvaWQgKiksIHZvaWQgKmNhbGxwYXJhbSkKIHsKIAl1bnNpZ25lZCBsb25nICAgZmxhZ3M7Ci0JdTMyCQl1c2VkLCBjaGFuLCBydjsKKwl1MzIJCXVzZWQsIGNoYW47CiAJdTMyCQlkY3A7CiAJaW50CQlpOwogCWRiZGV2X3RhYl90CSpzdHAsICpkdHA7CkBAIC0yNTAsOCArMjUwLDcgQEAKIAkgKiB3aGljaCBjYW4ndCBiZSBkb25lIHN1Y2Nlc3NmdWxseSBkdXJpbmcgYm9hcmQgc2V0IHVwLgogCSAqLwogCWlmICghZGJkbWFfaW5pdGlhbGl6ZWQpCi0JCWF1MXh4eF9kYmRtYV9pbml0KCk7Ci0JZGJkbWFfaW5pdGlhbGl6ZWQgPSAxOworCQlyZXR1cm4gMDsKIAogCXN0cCA9IGZpbmRfZGJkZXZfaWQoc3JjaWQpOwogCWlmIChzdHAgPT0gTlVMTCkKQEAgLTI2MSw3ICsyNjAsNiBAQAogCQlyZXR1cm4gMDsKIAogCXVzZWQgPSAwOwotCXJ2ID0gMDsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IGJvdGggY2hhbm5lbHMuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKQEAgLTI4Miw2MyArMjgwLDY1IEBACiAJCXVzZWQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdTF4eHhfZGJkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CiAKLQlpZiAoIXVzZWQpIHsKLQkJLyogTGV0J3Mgc2VlIGlmIHdlIGNhbiBhbGxvY2F0ZSBhIGNoYW5uZWwgZm9yIGl0LiAqLwotCQljdHAgPSBOVUxMOwotCQljaGFuID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKLQkJZm9yIChpID0gMDsgaSA8IE5VTV9EQkRNQV9DSEFOUzsgaSsrKQotCQkJaWYgKGNoYW5fdGFiX3B0cltpXSA9PSBOVUxMKSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiBrbWFsbG9jIGZhaWxzLCBpdCBpcyBjYXVnaHQgYmVsb3cgc2FtZQotCQkJCSAqIGFzIGEgY2hhbm5lbCBub3QgYXZhaWxhYmxlLgotCQkJCSAqLwotCQkJCWN0cCA9IGttYWxsb2Moc2l6ZW9mKGNoYW5fdGFiX3QpLCBHRlBfQVRPTUlDKTsKLQkJCQljaGFuX3RhYl9wdHJbaV0gPSBjdHA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlpZiAodXNlZCkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKGN0cCAhPSBOVUxMKSB7Ci0JCQltZW1zZXQoY3RwLCAwLCBzaXplb2YoY2hhbl90YWJfdCkpOwotCQkJY3RwLT5jaGFuX2luZGV4ID0gY2hhbiA9IGk7Ci0JCQlkY3AgPSBERE1BX0NIQU5ORUxfQkFTRTsKLQkJCWRjcCArPSAoMHgwMTAwICogY2hhbik7Ci0JCQljdHAtPmNoYW5fcHRyID0gKGF1MXhfZG1hX2NoYW5fdCAqKWRjcDsKLQkJCWNwID0gKGF1MXhfZG1hX2NoYW5fdCAqKWRjcDsKLQkJCWN0cC0+Y2hhbl9zcmMgPSBzdHA7Ci0JCQljdHAtPmNoYW5fZGVzdCA9IGR0cDsKLQkJCWN0cC0+Y2hhbl9jYWxsYmFjayA9IGNhbGxiYWNrOwotCQkJY3RwLT5jaGFuX2NhbGxwYXJhbSA9IGNhbGxwYXJhbTsKLQotCQkJLyogSW5pdGlhbGl6ZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24uICovCi0JCQlpID0gMDsKLQkJCWlmIChzdHAtPmRldl9pbnRsZXZlbCkKLQkJCQlpIHw9IERETUFfQ0ZHX1NFRDsKLQkJCWlmIChzdHAtPmRldl9pbnRwb2xhcml0eSkKLQkJCQlpIHw9IERETUFfQ0ZHX1NQOwotCQkJaWYgKGR0cC0+ZGV2X2ludGxldmVsKQotCQkJCWkgfD0gRERNQV9DRkdfREVEOwotCQkJaWYgKGR0cC0+ZGV2X2ludHBvbGFyaXR5KQotCQkJCWkgfD0gRERNQV9DRkdfRFA7Ci0JCQlpZiAoKHN0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpIHx8Ci0JCQkJKGR0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpKQotCQkJCQlpIHw9IERETUFfQ0ZHX1NZTkM7Ci0JCQljcC0+ZGRtYV9jZmcgPSBpOwotCQkJYXVfc3luYygpOwotCi0JCQkvKiBSZXR1cm4gYSBub24temVybyB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvCi0JCQkgKiBmaW5kIHRoZSBjaGFubmVsIGluZm9ybWF0aW9uIGluIHN1YnNlcXVlbnQKLQkJCSAqIG9wZXJhdGlvbnMuCisJLyogTGV0J3Mgc2VlIGlmIHdlIGNhbiBhbGxvY2F0ZSBhIGNoYW5uZWwgZm9yIGl0LiAqLworCWN0cCA9IE5VTEw7CisJY2hhbiA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0RCRE1BX0NIQU5TOyBpKyspCisJCWlmIChjaGFuX3RhYl9wdHJbaV0gPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIElmIGttYWxsb2MgZmFpbHMsIGl0IGlzIGNhdWdodCBiZWxvdyBzYW1lCisJCQkgKiBhcyBhIGNoYW5uZWwgbm90IGF2YWlsYWJsZS4KIAkJCSAqLwotCQkJcnYgPSAodTMyKSgmY2hhbl90YWJfcHRyW2NoYW5dKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFJlbGVhc2UgZGV2aWNlcyAqLwotCQkJc3RwLT5kZXZfZmxhZ3MgJj0gfkRFVl9GTEFHU19JTlVTRTsKLQkJCWR0cC0+ZGV2X2ZsYWdzICY9IH5ERVZfRkxBR1NfSU5VU0U7CisJCQljdHAgPSBrbWFsbG9jKHNpemVvZihjaGFuX3RhYl90KSwgR0ZQX0FUT01JQyk7CisJCQljaGFuX3RhYl9wdHJbaV0gPSBjdHA7CisJCQlicmVhazsKIAkJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1MXh4eF9kYmRtYV9zcGluX2xvY2ssIGZsYWdzKTsKKworCWlmIChjdHAgIT0gTlVMTCkgeworCQltZW1zZXQoY3RwLCAwLCBzaXplb2YoY2hhbl90YWJfdCkpOworCQljdHAtPmNoYW5faW5kZXggPSBjaGFuID0gaTsKKwkJZGNwID0gRERNQV9DSEFOTkVMX0JBU0U7CisJCWRjcCArPSAoMHgwMTAwICogY2hhbik7CisJCWN0cC0+Y2hhbl9wdHIgPSAoYXUxeF9kbWFfY2hhbl90ICopZGNwOworCQljcCA9IChhdTF4X2RtYV9jaGFuX3QgKilkY3A7CisJCWN0cC0+Y2hhbl9zcmMgPSBzdHA7CisJCWN0cC0+Y2hhbl9kZXN0ID0gZHRwOworCQljdHAtPmNoYW5fY2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJY3RwLT5jaGFuX2NhbGxwYXJhbSA9IGNhbGxwYXJhbTsKKworCQkvKiBJbml0aWFsaXplIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gKi8KKwkJaSA9IDA7CisJCWlmIChzdHAtPmRldl9pbnRsZXZlbCkKKwkJCWkgfD0gRERNQV9DRkdfU0VEOworCQlpZiAoc3RwLT5kZXZfaW50cG9sYXJpdHkpCisJCQlpIHw9IERETUFfQ0ZHX1NQOworCQlpZiAoZHRwLT5kZXZfaW50bGV2ZWwpCisJCQlpIHw9IERETUFfQ0ZHX0RFRDsKKwkJaWYgKGR0cC0+ZGV2X2ludHBvbGFyaXR5KQorCQkJaSB8PSBERE1BX0NGR19EUDsKKwkJaWYgKChzdHAtPmRldl9mbGFncyAmIERFVl9GTEFHU19TWU5DKSB8fAorCQkJKGR0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX1NZTkMpKQorCQkJCWkgfD0gRERNQV9DRkdfU1lOQzsKKwkJY3AtPmRkbWFfY2ZnID0gaTsKKwkJYXVfc3luYygpOworCisJCS8qCisJCSAqIFJldHVybiBhIG5vbi16ZXJvIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgY2hhbm5lbAorCQkgKiBpbmZvcm1hdGlvbiBpbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuCisJCSAqLworCQlyZXR1cm4gKHUzMikoJmNoYW5fdGFiX3B0cltjaGFuXSk7CiAJfQotCXJldHVybiBydjsKKworCS8qIFJlbGVhc2UgZGV2aWNlcyAqLworCXN0cC0+ZGV2X2ZsYWdzICY9IH5ERVZfRkxBR1NfSU5VU0U7CisJZHRwLT5kZXZfZmxhZ3MgJj0gfkRFVl9GTEFHU19JTlVTRTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyk7CiAKQEAgLTU3Miw3ICs1NzIsNyBAQAogICogVGhpcyB1cGRhdGVzIHRoZSBzb3VyY2UgcG9pbnRlciBhbmQgYnl0ZSBjb3VudC4gIE5vcm1hbGx5IHVzZWQKICAqIGZvciBtZW1vcnkgdG8gZmlmbyB0cmFuc2ZlcnMuCiAgKi8KLXUzMiBfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCit1MzIgYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgZG1hX2FkZHJfdCBidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncykKIHsKIAljaGFuX3RhYl90CQkqY3RwOwogCWF1MXhfZGRtYV9kZXNjX3QJKmRwOwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJCXJldHVybiAwOwogCiAJLyogTG9hZCB1cCBidWZmZXIgYWRkcmVzcyBhbmQgYnl0ZSBjb3VudC4gKi8KLQlkcC0+ZHNjcl9zb3VyY2UwID0gdmlydF90b19waHlzKGJ1Zik7CisJZHAtPmRzY3Jfc291cmNlMCA9IGJ1ZiAmIH4wVUw7CiAJZHAtPmRzY3JfY21kMSA9IG5ieXRlczsKIAkvKiBDaGVjayBmbGFncyAqLwogCWlmIChmbGFncyAmIERETUFfRkxBR1NfSUUpCkBAIC02MjUsMTQgKzYyNSwxMyBAQAogCS8qIFJldHVybiBzb21ldGhpbmcgbm9uLXplcm8uICovCiAJcmV0dXJuIG5ieXRlczsKIH0KLUVYUE9SVF9TWU1CT0woX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKTsKK0VYUE9SVF9TWU1CT0woYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UpOwogCiAvKiBQdXQgYSBkZXN0aW5hdGlvbiBidWZmZXIgaW50byB0aGUgRE1BIHJpbmcuCiAgKiBUaGlzIHVwZGF0ZXMgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgYW5kIGJ5dGUgY291bnQuICBOb3JtYWxseSB1c2VkCiAgKiB0byBwbGFjZSBhbiBlbXB0eSBidWZmZXIgaW50byB0aGUgcmluZyBmb3IgZmlmbyB0byBtZW1vcnkgdHJhbnNmZXJzLgogICovCi11MzIKLV9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCit1MzIgYXUxeHh4X2RiZG1hX3B1dF9kZXN0KHUzMiBjaGFuaWQsIGRtYV9hZGRyX3QgYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCiB7CiAJY2hhbl90YWJfdAkJKmN0cDsKIAlhdTF4X2RkbWFfZGVzY190CSpkcDsKQEAgLTY2Miw3ICs2NjEsNyBAQAogCWlmIChmbGFncyAmIERETUFfRkxBR1NfTk9JRSkKIAkJZHAtPmRzY3JfY21kMCAmPSB+RFNDUl9DTUQwX0lFOwogCi0JZHAtPmRzY3JfZGVzdDAgPSB2aXJ0X3RvX3BoeXMoYnVmKTsKKwlkcC0+ZHNjcl9kZXN0MCA9IGJ1ZiAmIH4wVUw7CiAJZHAtPmRzY3JfY21kMSA9IG5ieXRlczsKICNpZiAwCiAJcHJpbnRrKEtFUk5fREVCVUcgImNtZDA6JXggY21kMToleCBzb3VyY2UwOiV4IHNvdXJjZTE6JXggZGVzdDA6JXggZGVzdDE6JXhcbiIsCkBAIC02ODgsNyArNjg3LDcgQEAKIAkvKiBSZXR1cm4gc29tZXRoaW5nIG5vbi16ZXJvLiAqLwogCXJldHVybiBuYnl0ZXM7CiB9Ci1FWFBPUlRfU1lNQk9MKF9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QpOworRVhQT1JUX1NZTUJPTChhdTF4eHhfZGJkbWFfcHV0X2Rlc3QpOwogCiAvKgogICogR2V0IGEgZGVzdGluYXRpb24gYnVmZmVyIGludG8gdGhlIERNQSByaW5nLgpAQCAtODcxLDI4ICs4NzAsNiBAQAogCXJldHVybiBJUlFfUkVUVkFMKDEpOwogfQogCi1zdGF0aWMgdm9pZCBhdTF4eHhfZGJkbWFfaW5pdCh2b2lkKQotewotCWludCBpcnFfbnI7Ci0KLQlkYmRtYV9ncHRyLT5kZG1hX2NvbmZpZyA9IDA7Ci0JZGJkbWFfZ3B0ci0+ZGRtYV90aHJvdHRsZSA9IDA7Ci0JZGJkbWFfZ3B0ci0+ZGRtYV9pbnRlbiA9IDB4ZmZmZjsKLQlhdV9zeW5jKCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCWlycV9uciA9IEFVMTU1MF9ERE1BX0lOVDsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JaXJxX25yID0gQVUxMjAwX0RETUFfSU5UOwotI2Vsc2UKLQkjZXJyb3IgVW5rbm93biBBdTF4MDAgU09DCi0jZW5kaWYKLQotCWlmIChyZXF1ZXN0X2lycShpcnFfbnIsIGRiZG1hX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCSJBdTF4eHggZGJkbWEiLCAodm9pZCAqKWRiZG1hX2dwdHIpKQotCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGdldCAxNTUwIGRiZG1hIGlycSIpOwotfQotCiB2b2lkIGF1MXh4eF9kYmRtYV9kdW1wKHUzMiBjaGFuaWQpCiB7CiAJY2hhbl90YWJfdAkgKmN0cDsKQEAgLTkwNiw3ICs4ODMsNyBAQAogCWR0cCA9IGN0cC0+Y2hhbl9kZXN0OwogCWNwID0gY3RwLT5jaGFuX3B0cjsKIAotCXByaW50ayhLRVJOX0RFQlVHICJDaGFuICV4LCBzdHAgJXggKGRldiAlZCkgIGR0cCAleCAoZGV2ICVkKSBcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIkNoYW4gJXgsIHN0cCAleCAoZGV2ICVkKSAgZHRwICV4IChkZXYgJWQpXG4iLAogCQkJICAodTMyKWN0cCwgKHUzMilzdHAsIHN0cCAtIGRiZGV2X3RhYiwgKHUzMilkdHAsCiAJCQkgIGR0cCAtIGRiZGV2X3RhYik7CiAJcHJpbnRrKEtFUk5fREVCVUcgImRlc2MgYmFzZSAleCwgZ2V0ICV4LCBwdXQgJXgsIGN1ciAleFxuIiwKQEAgLTEwNDEsNCArMTAxOCwzOCBAQAogCX0KIH0KICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGludCBfX2luaXQgYXUxeHh4X2RiZG1hX2luaXQodm9pZCkKK3sKKwlpbnQgaXJxX25yLCByZXQ7CisKKwlkYmRtYV9ncHRyLT5kZG1hX2NvbmZpZyA9IDA7CisJZGJkbWFfZ3B0ci0+ZGRtYV90aHJvdHRsZSA9IDA7CisJZGJkbWFfZ3B0ci0+ZGRtYV9pbnRlbiA9IDB4ZmZmZjsKKwlhdV9zeW5jKCk7CisKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlpcnFfbnIgPSBBVTE1NTBfRERNQV9JTlQ7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMjAwOgorCQlpcnFfbnIgPSBBVTEyMDBfRERNQV9JTlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycV9uciwgZGJkbWFfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAorCQkJIkF1MXh4eCBkYmRtYSIsICh2b2lkICopZGJkbWFfZ3B0cik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZ3JhYiBEQkRNQSBpbnRlcnJ1cHQhXG4iKTsKKwllbHNlIHsKKwkJZGJkbWFfaW5pdGlhbGl6ZWQgPSAxOworCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15IERCRE1BIGluaXRpYWxpemVkXG4iKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKGF1MXh4eF9kYmRtYV9pbml0KTsKKwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMKaW5kZXggZDZmYmRhMi4uZDUyNzg4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kbWEuYwpAQCAtMjksNiArMjksOCBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKICAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xODgsMTcgKzE5MCwxNCBAQAogCQlkZXYgPSAmZG1hX2Rldl90YWJsZVtkZXZfaWRdOwogCiAJaWYgKGlycWhhbmRsZXIpIHsKLQkJY2hhbi0+aXJxID0gQVUxMDAwX0RNQV9JTlRfQkFTRSArIGk7CiAJCWNoYW4tPmlycV9kZXYgPSBpcnFfZGV2X2lkOwogCQlyZXQgPSByZXF1ZXN0X2lycShjaGFuLT5pcnEsIGlycWhhbmRsZXIsIGlycWZsYWdzLCBkZXZfc3RyLAogCQkJCSAgY2hhbi0+aXJxX2Rldik7CiAJCWlmIChyZXQpIHsKLQkJCWNoYW4tPmlycSA9IDA7CiAJCQljaGFuLT5pcnFfZGV2ID0gTlVMTDsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9IGVsc2UgewotCQljaGFuLT5pcnEgPSAwOwogCQljaGFuLT5pcnFfZGV2ID0gTlVMTDsKIAl9CiAKQEAgLTIyNiwxMyArMjI1LDQwIEBACiAJfQogCiAJZGlzYWJsZV9kbWEoZG1hbnIpOwotCWlmIChjaGFuLT5pcnEpCisJaWYgKGNoYW4tPmlycV9kZXYpCiAJCWZyZWVfaXJxKGNoYW4tPmlycSwgY2hhbi0+aXJxX2Rldik7CiAKLQljaGFuLT5pcnEgPSAwOwogCWNoYW4tPmlycV9kZXYgPSBOVUxMOwogCWNoYW4tPmRldl9pZCA9IC0xOwogfQogRVhQT1JUX1NZTUJPTChmcmVlX2F1MTAwMF9kbWEpOwogCitzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfZG1hX2luaXQodm9pZCkKK3sKKyAgICAgICAgaW50IGJhc2UsIGk7CisKKyAgICAgICAgc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisgICAgICAgICAgICAgICAgYmFzZSA9IEFVMTAwMF9ETUFfSU5UX0JBU0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorICAgICAgICAgICAgICAgIGJhc2UgPSBBVTE1MDBfRE1BX0lOVF9CQVNFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKyAgICAgICAgICAgICAgICBiYXNlID0gQVUxMTAwX0RNQV9JTlRfQkFTRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fQVUxMDAwX0RNQV9DSEFOTkVMUzsgaSsrKQorICAgICAgICAgICAgICAgIGF1MTAwMF9kbWFfdGFibGVbaV0uaXJxID0gYmFzZSArIGk7CisKKyAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteSBETUEgaW5pdGlhbGl6ZWRcbiIpOworCitvdXQ6CisgICAgICAgIHJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChhdTEwMDBfZG1hX2luaXQpOworCiAjZW5kaWYgLyogQVUxMDAwIEFVMTUwMCBBVTExMDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvbGliLWF1MTAwMC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW9saWItYXUxMDAwLmMKaW5kZXggMWJmYTkxZi4uYzhlMWE5NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW9saWItYXUxMDAwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW9saWItYXUxMDAwLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2dwaW8uaD4KIAotI2lmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQogc3RhdGljIGludCBncGlvMl9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCXJldHVybiBhbGNoZW15X2dwaW8yX2dldF92YWx1ZShvZmZzZXQgKyBBTENIRU1ZX0dQSU8yX0JBU0UpOwpAQCAtNjMsNyArNjIsNyBAQAogewogCXJldHVybiBhbGNoZW15X2dwaW8yX3RvX2lycShvZmZzZXQgKyBBTENIRU1ZX0dQSU8yX0JBU0UpOwogfQotI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKSAqLworCiAKIHN0YXRpYyBpbnQgZ3BpbzFfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKQEAgLTEwNCw3ICsxMDMsNiBAQAogCQkuYmFzZQkJCT0gQUxDSEVNWV9HUElPMV9CQVNFLAogCQkubmdwaW8JCQk9IEFMQ0hFTVlfR1BJTzFfTlVNLAogCX0sCi0jaWYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCiAJWzFdID0gewogCQkubGFiZWwgICAgICAgICAgICAgICAgICA9ICJhbGNoZW15LWdwaW8yIiwKIAkJLmRpcmVjdGlvbl9pbnB1dCAgICAgICAgPSBncGlvMl9kaXJlY3Rpb25faW5wdXQsCkBAIC0xMTUsMTUgKzExMywxMyBAQAogCQkuYmFzZSAgICAgICAgICAgICAgICAgICA9IEFMQ0hFTVlfR1BJTzJfQkFTRSwKIAkJLm5ncGlvICAgICAgICAgICAgICAgICAgPSBBTENIRU1ZX0dQSU8yX05VTSwKIAl9LAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhbGNoZW15X2dwaW9saWJfaW5pdCh2b2lkKQogewogCWdwaW9jaGlwX2FkZCgmYWxjaGVteV9ncGlvX2NoaXBbMF0pOwotI2lmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCWdwaW9jaGlwX2FkZCgmYWxjaGVteV9ncGlvX2NoaXBbMV0pOwotI2VuZGlmCisJaWYgKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSAhPSBBTENIRU1ZX0NQVV9BVTEwMDApCisJCWdwaW9jaGlwX2FkZCgmYWxjaGVteV9ncGlvX2NoaXBbMV0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKaW5kZXggZDY3MDkyOC4uYjI4MjFhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYwpAQCAtMzksMTY4ICszOSwxODAgQEAKIAogc3RhdGljIGludCBhdTF4X2ljX3NldHR5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSk7CiAKKy8qIE5PVEUgb24gaW50ZXJydXB0IHByaW9yaXRpZXM6IFRoZSBvcmlnaW5hbCB3cml0ZXJzIG9mIHRoaXMgY29kZSBzYWlkOgorICoKKyAqIEJlY2F1c2Ugb2YgdGhlIHRpZ2h0IHRpbWluZyBvZiBTRVRVUCB0b2tlbiB0byByZXBseSB0cmFuc2FjdGlvbnMsCisgKiB0aGUgVVNCIGRldmljZXMtc2lkZSBwYWNrZXQgY29tcGxldGUgaW50ZXJydXB0IChVU0JfREVWX1JFUV9JTlQpCisgKiBuZWVkcyB0aGUgaGlnaGVzdCBwcmlvcml0eS4KKyAqLworCiAvKiBwZXItcHJvY2Vzc29yIGZpeGVkIGZ1bmN0aW9uIGlycXMgKi8KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MXh4eF9pYzBfbWFwW10gX19pbml0ZGF0YSA9IHsKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIHsKKwlpbnQgaW1faXJxOworCWludCBpbV90eXBlOworCWludCBpbV9yZXF1ZXN0OwkJLyogc2V0IDEgdG8gZ2V0IGhpZ2hlciBwcmlvcml0eSAqLworfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JeyBBVTEwMDBfVUFSVDBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVUFSVDFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVUFSVDJfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVUFSVDNfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfU1NJMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9TU0kxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsxLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzIsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMywgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs0LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzUsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNiwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs3LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVE9ZX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKLQl7IEFVMTAwMF9SVENfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX0lSREFfVFhfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfSVJEQV9SWF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MTAwMF9pcnFtYXBbXSBfX2luaXRkYXRhID0geworCXsgQVUxMDAwX1VBUlQwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1VBUlQxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1VBUlQyX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1VBUlQzX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1NTSTBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfU1NJMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMSwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzIsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSszLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNCwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzUsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs2LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNywgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfVE9ZX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1RPWV9NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfVE9ZX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1JUQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9SVENfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfUlRDX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1JUQ19NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKKwl7IEFVMTAwMF9JUkRBX1RYX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0lSREFfUlhfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMSB9LAogCXsgQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9VU0JfSE9TVF9JTlQsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxMDAwX0FDU1lOQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfTUFDMF9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfTUFDMV9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfQUM5N0NfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1VTQl9IT1NUX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxMDAwX0FDU1lOQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9NQUMwX0RNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9NQUMxX0RNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9BQzk3Q19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IC0xLCB9LAorfTsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MTUwMF9pcnFtYXBbXSBfX2luaXRkYXRhID0geworCXsgQVUxNTAwX1VBUlQwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX1BDSV9JTlRBLAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1MDBfUENJX0lOVEIsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTUwMF9VQVJUM19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9QQ0lfSU5UQywJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTAwX1BDSV9JTlRELAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFLAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzEsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSsyLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UrMywgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzQsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSs1LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UrNiwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzcsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX1RPWV9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9UT1lfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfVE9ZX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1RPWV9NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9SVENfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfUlRDX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1JUQ19NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9SVENfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCisJeyBBVTE1MDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMSB9LAorCXsgQVUxNTAwX1VTQl9ERVZfU1VTX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9VU0JfSE9TVF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTUwMF9BQ1NZTkNfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfTUFDMF9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfTUFDMV9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfQUM5N0NfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyAtMSwgfSwKK307CiAKLQl7IEFVMTUwMF9VQVJUMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9QQ0lfSU5UQSwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfUENJX0lOVEIsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTAwX1VBUlQzX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1BDSV9JTlRDLCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTAwMF9QQ0lfSU5URCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzEsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMiwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSszLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs2LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzcsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9UT1lfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAotCXsgQVUxMDAwX1JUQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVVNCX0RFVl9TVVNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1VTQl9IT1NUX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfQUNTWU5DX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTUwMF9NQUMwX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTUwMF9NQUMxX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9BQzk3Q19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCitzdHJ1Y3QgYXUxeHh4X2lycW1hcCBhdTExMDBfaXJxbWFwW10gX19pbml0ZGF0YSA9IHsKKwl7IEFVMTEwMF9VQVJUMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9VQVJUMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9TRF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9VQVJUM19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9TU0kwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1NTSTFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFLAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzEsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSsyLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UrMywgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzQsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSs1LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UrNiwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzcsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1RPWV9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9UT1lfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfVE9ZX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1RPWV9NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9SVENfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfUlRDX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1JUQ19NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9SVENfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCisJeyBBVTExMDBfSVJEQV9UWF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9JUkRBX1JYX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX1VTQl9ERVZfUkVRX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDEgfSwKKwl7IEFVMTEwMF9VU0JfREVWX1NVU19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfVVNCX0hPU1RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTExMDBfQUNTWU5DX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX01BQzBfRE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0xDRF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9BQzk3Q19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IC0xLCB9LAorfTsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKLQotCXsgQVUxMTAwX1VBUlQwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMTAwX1VBUlQxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMTAwX1NEX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMTAwX1VBUlQzX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1NTSTBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfU1NJMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsyLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzMsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs1LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzYsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNywgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1RPWV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCi0JeyBBVTEwMDBfUlRDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9JUkRBX1RYX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0lSREFfUlhfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVVNCX0RFVl9TVVNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1VTQl9IT1NUX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfQUNTWU5DX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTEwMF9NQUMwX0RNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTEwMF9MQ0RfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfQUM5N0NfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCi0JeyBBVTE1NTBfVUFSVDBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfUENJX0lOVEEsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTUwX1BDSV9JTlRCLCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTU1MF9ERE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX0NSWVBUT19JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9QQ0lfSU5UQywgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTE1NTBfUENJX0lOVEQsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTUwX1BDSV9SU1RfSU5ULCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTU1MF9VQVJUMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9VQVJUM19JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9QU0MwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX1BTQzFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfUFNDMl9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9QU0MzX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1RPWV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCi0JeyBBVTEwMDBfUlRDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTU1MF9OQU5EX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTU1MF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MTU1MF9pcnFtYXBbXSBfX2luaXRkYXRhID0geworCXsgQVUxNTUwX1VBUlQwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1BDSV9JTlRBLAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1NTBfUENJX0lOVEIsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTU1MF9ERE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX0NSWVBUT19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9QQ0lfSU5UQywJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTUwX1BDSV9JTlRELAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1NTBfUENJX1JTVF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTU1MF9VQVJUMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9VQVJUM19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9QU0MwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1BTQzFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfUFNDMl9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9QU0MzX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1RPWV9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9UT1lfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfVE9ZX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1RPWV9NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9SVENfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfUlRDX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1JUQ19NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9SVENfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCisJeyBBVTE1NTBfTkFORF9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsICAxIH0sCiAJeyBBVTE1NTBfVVNCX0RFVl9TVVNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxNTUwX1VTQl9IT1NUX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTE1NTBfTUFDMF9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfTUFDMV9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCisJeyBBVTE1NTBfVVNCX0hPU1RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1NTBfTUFDMF9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfTUFDMV9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyAtMSwgfSwKK307CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0KLQl7IEFVMTIwMF9VQVJUMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9TV1RfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMjAwX1NEX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX0RETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfTUFFX0JFX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX1VBUlQxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX01BRV9GRV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9QU0MwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX1BTQzFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfQUVTX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX0NBTUVSQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9UT1lfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAotCXsgQVUxMDAwX1JUQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEyMDBfTkFORF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEyMDBfVVNCX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX0xDRF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9NQUVfQk9USF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQotI2Vsc2UKLSNlcnJvciAiRXJyb3I6IFVua25vd24gQWxjaGVteSBTT0MiCi0jZW5kaWYKK3N0cnVjdCBhdTF4eHhfaXJxbWFwIGF1MTIwMF9pcnFtYXBbXSBfX2luaXRkYXRhID0geworCXsgQVUxMjAwX1VBUlQwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX1NXVF9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9TRF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9ERE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX01BRV9CRV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9VQVJUMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9NQUVfRkVfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfUFNDMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9QU0MxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX0FFU19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9DQU1FUkFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfVE9ZX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1RPWV9NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9UT1lfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfVE9ZX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1JUQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9SVENfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfUlRDX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1JUQ19NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKKwl7IEFVMTIwMF9OQU5EX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1VTQl9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9MQ0RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfTUFFX0JPVEhfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyAtMSwgfSwKIH07CiAKIApAQCAtMzA2LDcgKzMxOCw3IEBACiAgKiBub3doZXJlIGluIHRoZSBjdXJyZW50IGtlcm5lbCBzb3VyY2VzIGlzIGl0IGRpc2FibGVkLgktLW1sYXUKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfUEIxMDAwKQotCWlmIChpcnFfbnIgPT0gQVUxMDAwX0dQSU9fMTUpCisJaWYgKGlycV9uciA9PSBBVTEwMDBfR1BJTzE1X0lOVCkKIAkJYXVfd3JpdGVsKDB4NDAwMCwgUEIxMDAwX01EUik7IC8qIGVuYWJsZSBpbnQgKi8KICNlbmRpZgogCWF1X3N5bmMoKTsKQEAgLTM3OCwxMSArMzkwLDEzIEBACiAKIHN0YXRpYyBpbnQgYXUxeF9pYzFfc2V0d2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7Ci0JdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKKwlpbnQgYml0ID0gaXJxIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOwogCXVuc2lnbmVkIGxvbmcgd2FrZW1zaywgZmxhZ3M7CiAKLQkvKiBvbmx5IEdQSU8gMC03IGNhbiBhY3QgYXMgd2FrZXVwIHNvdXJjZTogKi8KLQlpZiAoKGlycSA8IEFVMTAwMF9HUElPXzApIHx8IChpcnEgPiBBVTEwMDBfR1BJT183KSkKKwkvKiBvbmx5IEdQSU8gMC03IGNhbiBhY3QgYXMgd2FrZXVwIHNvdXJjZS4gIEZvcnR1bmF0ZWx5IHRoZXNlCisJICogYXJlIHdpcmVkIHVwIGlkZW50aWNhbGx5IG9uIGFsbCBzdXBwb3J0ZWQgdmFyaWFudHMuCisJICovCisJaWYgKChiaXQgPCAwKSB8fCAoYml0ID4gNykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtNTA0LDExICs1MTgsMTEgQEAKIGFzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQogewogCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKTsKLQl1bnNpZ25lZCBsb25nIHMsIG9mZiwgYml0OworCXVuc2lnbmVkIGxvbmcgcywgb2ZmOwogCiAJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA3KSB7Ci0JCWRvX0lSUShNSVBTX0NQVV9JUlFfQkFTRSArIDcpOwotCQlyZXR1cm47CisJCW9mZiA9IE1JUFNfQ1BVX0lSUV9CQVNFICsgNzsKKwkJZ290byBoYW5kbGU7CiAJfSBlbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikgewogCQlzID0gSUMwX1JFUTBJTlQ7CiAJCW9mZiA9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKQEAgLTUyNCw1OCArNTM4LDIwIEBACiAJfSBlbHNlCiAJCWdvdG8gc3B1cmlvdXM7CiAKLQliaXQgPSAwOwogCXMgPSBhdV9yZWFkbChzKTsKIAlpZiAodW5saWtlbHkoIXMpKSB7CiBzcHVyaW91czoKIAkJc3B1cmlvdXNfaW50ZXJydXB0KCk7CiAJCXJldHVybjsKIAl9Ci0jaWZkZWYgQVUxMDAwX1VTQl9ERVZfUkVRX0lOVAotCS8qCi0JICogQmVjYXVzZSBvZiB0aGUgdGlnaHQgdGltaW5nIG9mIFNFVFVQIHRva2VuIHRvIHJlcGx5Ci0JICogdHJhbnNhY3Rpb25zLCB0aGUgVVNCIGRldmljZXMtc2lkZSBwYWNrZXQgY29tcGxldGUKLQkgKiBpbnRlcnJ1cHQgbmVlZHMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuCi0JICovCi0JYml0ID0gMSA8PCAoQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRSk7Ci0JaWYgKChwZW5kaW5nICYgQ0FVU0VGX0lQMikgJiYgKHMgJiBiaXQpKSB7Ci0JCWRvX0lSUShBVTEwMDBfVVNCX0RFVl9SRVFfSU5UKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCWRvX0lSUShfX2ZmcyhzKSArIG9mZik7CisJb2ZmICs9IF9fZmZzKHMpOworaGFuZGxlOgorCWRvX0lSUShvZmYpOwogfQogCi0vKiBzZXR1cCBlZGdlL2xldmVsIGFuZCBhc3NpZ24gcmVxdWVzdCAwLzEgKi8KLXZvaWQgX19pbml0IGF1MXh4eF9zZXR1cF9pcnFtYXAoc3RydWN0IGF1MXh4eF9pcnFtYXAgKm1hcCwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgX19pbml0IGF1MTAwMF9pbml0X2lycShzdHJ1Y3QgYXUxeHh4X2lycW1hcCAqbWFwKQogewogCXVuc2lnbmVkIGludCBiaXQsIGlycV9ucjsKLQotCXdoaWxlIChjb3VudC0tKSB7Ci0JCWlycV9uciA9IG1hcFtjb3VudF0uaW1faXJxOwotCi0JCWlmICgoKGlycV9uciA8IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSkgfHwKLQkJICAgICAoaXJxX25yID49IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSArIDMyKSkgJiYKLQkJICAgICgoaXJxX25yIDwgQVUxMDAwX0lOVEMxX0lOVF9CQVNFKSB8fAotCQkgICAgIChpcnFfbnIgPj0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFICsgMzIpKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChpcnFfbnIgPj0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFKSB7Ci0JCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7Ci0JCQlpZiAobWFwW2NvdW50XS5pbV9yZXF1ZXN0KQotCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0FTU0lHTkNMUik7Ci0JCX0gZWxzZSB7Ci0JCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7Ci0JCQlpZiAobWFwW2NvdW50XS5pbV9yZXF1ZXN0KQotCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX0FTU0lHTkNMUik7Ci0JCX0KLQotCQlhdTF4X2ljX3NldHR5cGUoaXJxX25yLCBtYXBbY291bnRdLmltX3R5cGUpOwotCX0KLX0KLQotdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQotewogCWludCBpOwogCiAJLyoKQEAgLTU4NSw3ICs1NjEsNyBAQAogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfQ0ZHMUNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9DRkcyQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX01BU0tDTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfQVNTSUdOU0VUKTsKKwlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0FTU0lHTkNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9XQUtFQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX1NSQ1NFVCk7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9GQUxMSU5HQ0xSKTsKQEAgLTU5Niw3ICs1NzIsNyBAQAogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfQ0ZHMUNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9DRkcyQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX01BU0tDTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfQVNTSUdOU0VUKTsKKwlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX0FTU0lHTkNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9XQUtFQ0xSKTsKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX1NSQ1NFVCk7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9GQUxMSU5HQ0xSKTsKQEAgLTYxOSwxMSArNTk1LDQzIEBACiAJLyoKIAkgKiBJbml0aWFsaXplIElDMCwgd2hpY2ggaXMgZml4ZWQgcGVyIHByb2Nlc3Nvci4KIAkgKi8KLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pYzBfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pYzBfbWFwKSk7CisJd2hpbGUgKG1hcC0+aW1faXJxICE9IC0xKSB7CisJCWlycV9uciA9IG1hcC0+aW1faXJxOwogCi0JLyogQm9hcmRzIGNhbiByZWdpc3RlciBhZGRpdGlvbmFsIChHUElPLWJhc2VkKSBJUlFzLgotCSovCi0JYm9hcmRfaW5pdF9pcnEoKTsKKwkJaWYgKGlycV9uciA+PSBBVTEwMDBfSU5UQzFfSU5UX0JBU0UpIHsKKwkJCWJpdCA9IGlycV9uciAtIEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKKwkJCWlmIChtYXAtPmltX3JlcXVlc3QpCisJCQkJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfQVNTSUdOU0VUKTsKKwkJfSBlbHNlIHsKKwkJCWJpdCA9IGlycV9uciAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKKwkJCWlmIChtYXAtPmltX3JlcXVlc3QpCisJCQkJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfQVNTSUdOU0VUKTsKKwkJfQorCisJCWF1MXhfaWNfc2V0dHlwZShpcnFfbnIsIG1hcC0+aW1fdHlwZSk7CisJCSsrbWFwOworCX0KIAogCXNldF9jMF9zdGF0dXMoSUVfSVJRMCB8IElFX0lSUTEgfCBJRV9JUlEyIHwgSUVfSVJRMyk7CiB9CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKK3sKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxMDAwX2lycW1hcCk7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxNTAwX2lycW1hcCk7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxMTAwX2lycW1hcCk7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxNTUwX2lycW1hcCk7CisJCWJyZWFrOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMjAwOgorCQlhdTEwMDBfaW5pdF9pcnEoYXUxMjAwX2lycW1hcCk7CisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKaW5kZXggMTE3Zjk5Zi4uMjU4MGU3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKQEAgLTE5LDM5ICsxOSw0MCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oPgogCi0jZGVmaW5lIFBPUlQoX2Jhc2UsIF9pcnEpCQkJCVwKLQl7CQkJCQkJXAotCQkuaW9iYXNlCQk9IF9iYXNlLAkJXAotCQkubWVtYmFzZQk9ICh2b2lkIF9faW9tZW0gKilfYmFzZSxcCi0JCS5tYXBiYXNlCT0gQ1BIWVNBRERSKF9iYXNlKSwJXAotCQkuaXJxCQk9IF9pcnEsCQkJXAotCQkucmVnc2hpZnQJPSAyLAkJCVwKLQkJLmlvdHlwZQkJPSBVUElPX0FVLAkJXAotCQkuZmxhZ3MJCT0gVVBGX1NLSVBfVEVTVCAJXAorI2RlZmluZSBQT1JUKF9iYXNlLCBfaXJxKQkJCQkJXAorCXsJCQkJCQkJXAorCQkubWFwYmFzZQk9IF9iYXNlLAkJCVwKKwkJLmlycQkJPSBfaXJxLAkJCQlcCisJCS5yZWdzaGlmdAk9IDIsCQkJCVwKKwkJLmlvdHlwZQkJPSBVUElPX0FVLAkJCVwKKwkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCB8CVwKKwkJCQkgIFVQRl9GSVhFRF9UWVBFLAkJXAorCQkudHlwZQkJPSBQT1JUXzE2NTUwQSwJCQlcCiAJfQogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGF1MXgwMF91YXJ0X2RhdGFbXSA9IHsKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDApCiAjaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlQT1JUKFVBUlQwX0FERFIsIEFVMTAwMF9VQVJUMF9JTlQpLAotCVBPUlQoVUFSVDFfQUREUiwgQVUxMDAwX1VBUlQxX0lOVCksCi0JUE9SVChVQVJUMl9BRERSLCBBVTEwMDBfVUFSVDJfSU5UKSwKLQlQT1JUKFVBUlQzX0FERFIsIEFVMTAwMF9VQVJUM19JTlQpLAorCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTEwMDBfVUFSVDBfSU5UKSwKKwlQT1JUKFVBUlQxX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQxX0lOVCksCisJUE9SVChVQVJUMl9QSFlTX0FERFIsIEFVMTAwMF9VQVJUMl9JTlQpLAorCVBPUlQoVUFSVDNfUEhZU19BRERSLCBBVTEwMDBfVUFSVDNfSU5UKSwKICNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCi0JUE9SVChVQVJUMF9BRERSLCBBVTE1MDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQzX0FERFIsIEFVMTUwMF9VQVJUM19JTlQpLAorCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTE1MDBfVUFSVDBfSU5UKSwKKwlQT1JUKFVBUlQzX1BIWVNfQUREUiwgQVUxNTAwX1VBUlQzX0lOVCksCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCVBPUlQoVUFSVDBfQUREUiwgQVUxMTAwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUMV9BRERSLCBBVTExMDBfVUFSVDFfSU5UKSwKLQlQT1JUKFVBUlQzX0FERFIsIEFVMTEwMF9VQVJUM19JTlQpLAorCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTExMDBfVUFSVDBfSU5UKSwKKwlQT1JUKFVBUlQxX1BIWVNfQUREUiwgQVUxMTAwX1VBUlQxX0lOVCksCisJUE9SVChVQVJUM19QSFlTX0FERFIsIEFVMTEwMF9VQVJUM19JTlQpLAogI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlQT1JUKFVBUlQwX0FERFIsIEFVMTU1MF9VQVJUMF9JTlQpLAotCVBPUlQoVUFSVDFfQUREUiwgQVUxNTUwX1VBUlQxX0lOVCksCi0JUE9SVChVQVJUM19BRERSLCBBVTE1NTBfVUFSVDNfSU5UKSwKKwlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQwX0lOVCksCisJUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTU1MF9VQVJUMV9JTlQpLAorCVBPUlQoVUFSVDNfUEhZU19BRERSLCBBVTE1NTBfVUFSVDNfSU5UKSwKICNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JUE9SVChVQVJUMF9BRERSLCBBVTEyMDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQxX0FERFIsIEFVMTIwMF9VQVJUMV9JTlQpLAorCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTEyMDBfVUFSVDBfSU5UKSwKKwlQT1JUKFVBUlQxX1BIWVNfQUREUiwgQVUxMjAwX1VBUlQxX0lOVCksCiAjZW5kaWYKICNlbmRpZgkvKiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwICovCiAJeyB9LApAQCAtNzMsOCArNzQsOCBAQAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAkJPSBBVTEwMDBfVVNCX0hPU1RfSU5ULAotCQkuZW5kCQk9IEFVMTAwMF9VU0JfSE9TVF9JTlQsCisJCS5zdGFydAkJPSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQsCisJCS5lbmQJCT0gRk9SX1BMQVRGT1JNX0NfVVNCX0hPU1RfSU5ULAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xMzIsOCArMTMzLDggQEAKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJCT0gQVUxMDAwX1VTQl9IT1NUX0lOVCwKLQkJLmVuZAkJPSBBVTEwMDBfVVNCX0hPU1RfSU5ULAorCQkuc3RhcnQJCT0gQVUxMjAwX1VTQl9JTlQsCisJCS5lbmQJCT0gQVUxMjAwX1VTQl9JTlQsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTMwOCwxMSArMzA5LDYgQEAKICNlbmRpZiAvKiAjaWZuZGVmIENPTkZJR19NSVBTX0RCMTIwMCAqLwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfU09DX0FVMTIwMCAqLwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdTF4MDBfcGNtY2lhX2RldmljZSA9IHsKLQkubmFtZSAJCT0gImF1MXgwMC1wY21jaWEiLAotCS5pZCAJCT0gMCwKLX07Ci0KIC8qIEFsbCBBbGNoZW15IGRlbW9ib2FyZHMgd2l0aCBJMkMgaGF2ZSB0aGlzICNkZWZpbmUgaW4gdGhlaXIgaGVhZGVycyAqLwogI2lmZGVmIFNNQlVTX1BTQ19CQVNFCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBiZGJfc21idXNfcmVzb3VyY2VzW10gPSB7CkBAIC0zMzEsMTAgKzMyNyw5MiBAQAogfTsKICNlbmRpZgogCisvKiBNYWNybyB0byBoZWxwIGRlZmluaW5nIHRoZSBFdGhlcm5ldCBNQUMgcmVzb3VyY2VzICovCisjZGVmaW5lIE1BQ19SRVMoX2Jhc2UsIF9lbmFibGUsIF9pcnEpCQkJXAorCXsJCQkJCQlcCisJCS5zdGFydAk9IENQSFlTQUREUihfYmFzZSksCQlcCisJCS5lbmQJPSBDUEhZU0FERFIoX2Jhc2UgKyAweGZmZmYpLAlcCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkJXAorCX0sCQkJCQkJXAorCXsJCQkJCQlcCisJCS5zdGFydAk9IENQSFlTQUREUihfZW5hYmxlKSwJCVwKKwkJLmVuZAk9IENQSFlTQUREUihfZW5hYmxlICsgMHgzKSwJXAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJCVwKKwl9LAkJCQkJCVwKKwl7CQkJCQkJXAorCQkuc3RhcnQJPSBfaXJxLAkJCQlcCisJCS5lbmQJPSBfaXJxLAkJCQlcCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCQlcCisJfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXh4eF9ldGgwX3Jlc291cmNlc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCisJTUFDX1JFUyhBVTEwMDBfRVRIMF9CQVNFLCBBVTEwMDBfTUFDMF9FTkFCTEUsIEFVMTAwMF9NQUMwX0RNQV9JTlQpLAorI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKKwlNQUNfUkVTKEFVMTEwMF9FVEgwX0JBU0UsIEFVMTEwMF9NQUMwX0VOQUJMRSwgQVUxMTAwX01BQzBfRE1BX0lOVCksCisjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQorCU1BQ19SRVMoQVUxNTUwX0VUSDBfQkFTRSwgQVUxNTUwX01BQzBfRU5BQkxFLCBBVTE1NTBfTUFDMF9ETUFfSU5UKSwKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCisJTUFDX1JFUyhBVTE1MDBfRVRIMF9CQVNFLCBBVTE1MDBfTUFDMF9FTkFCTEUsIEFVMTUwMF9NQUMwX0RNQV9JTlQpLAorI2VuZGlmCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhIGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEgPSB7CisJLnBoeTFfc2VhcmNoX21hYzAgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXUxeHh4X2V0aDBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdTEwMDAtZXRoIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXUxeHh4X2V0aDBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBhdTF4eHhfZXRoMF9yZXNvdXJjZXMsCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEsCit9OworCisjaWZuZGVmIENPTkZJR19TT0NfQVUxMTAwCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXh4eF9ldGgxX3Jlc291cmNlc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCisJTUFDX1JFUyhBVTEwMDBfRVRIMV9CQVNFLCBBVTEwMDBfTUFDMV9FTkFCTEUsIEFVMTAwMF9NQUMxX0RNQV9JTlQpLAorI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKKwlNQUNfUkVTKEFVMTU1MF9FVEgxX0JBU0UsIEFVMTU1MF9NQUMxX0VOQUJMRSwgQVUxNTUwX01BQzFfRE1BX0lOVCksCisjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQorCU1BQ19SRVMoQVUxNTAwX0VUSDFfQkFTRSwgQVUxNTAwX01BQzFfRU5BQkxFLCBBVTE1MDBfTUFDMV9ETUFfSU5UKSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSA9IHsKKwkucGh5MV9zZWFyY2hfbWFjMCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdTF4eHhfZXRoMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF1MTAwMC1ldGgiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdTF4eHhfZXRoMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGF1MXh4eF9ldGgxX3Jlc291cmNlcywKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSwKK307CisjZW5kaWYKKwordm9pZCBfX2luaXQgYXUxeHh4X292ZXJyaWRlX2V0aF9jZmcodW5zaWduZWQgaW50IHBvcnQsCisJCQlzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSkKK3sKKwlpZiAoIWV0aF9kYXRhIHx8IHBvcnQgPiAxKQorCQlyZXR1cm47CisKKwlpZiAocG9ydCA9PSAwKQorCQltZW1jcHkoJmF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEsIGV0aF9kYXRhLAorCQkJc2l6ZW9mKHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEpKTsKKyNpZm5kZWYgQ09ORklHX1NPQ19BVTExMDAKKwllbHNlCisJCW1lbWNweSgmYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSwgZXRoX2RhdGEsCisJCQlzaXplb2Yoc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSkpOworI2VuZGlmCit9CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdTF4eHhfcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmF1MXh4MF91YXJ0X2RldmljZSwKIAkmYXUxeHh4X3VzYl9vaGNpX2RldmljZSwKLQkmYXUxeDAwX3BjbWNpYV9kZXZpY2UsCiAjaWZkZWYgQ09ORklHX0ZCX0FVMTEwMAogCSZhdTExMDBfbGNkX2RldmljZSwKICNlbmRpZgpAQCAtMzUxLDYgKzQyOSw3IEBACiAjaWZkZWYgU01CVVNfUFNDX0JBU0UKIAkmcGJkYl9zbWJ1c19kZXZpY2UsCiAjZW5kaWYKKwkmYXUxeHh4X2V0aDBfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXUxeHh4X3BsYXRmb3JtX2luaXQodm9pZCkKQEAgLTM2Miw2ICs0NDEsMTIgQEAKIAlmb3IgKGkgPSAwOyBhdTF4MDBfdWFydF9kYXRhW2ldLmZsYWdzOyBpKyspCiAJCWF1MXgwMF91YXJ0X2RhdGFbaV0udWFydGNsayA9IHVhcnRjbGs7CiAKKyNpZm5kZWYgQ09ORklHX1NPQ19BVTExMDAKKwkvKiBSZWdpc3RlciBzZWNvbmQgTUFDIGlmIGVuYWJsZWQgaW4gcGluZnVuYyAqLworCWlmICghKGF1X3JlYWRsKFNZU19QSU5GVU5DKSAmICh1MzIpU1lTX1BGX05JMikpCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXUxeHh4X2V0aDFfZGV2aWNlKTsKKyNlbmRpZgorCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKGF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Byb20uYwppbmRleCAxOGIzMTBiLi5jMjk1MTFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wcm9tLmMKQEAgLTQzLDI5ICs0MywxNSBAQAogY2hhciAqKnByb21fYXJndjsKIGNoYXIgKipwcm9tX2VudnA7CiAKLWNoYXIgKiBfX2luaXRfb3JfbW9kdWxlIHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiAmKGFyY3NfY21kbGluZVswXSk7Ci19Ci0KIHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKLQljaGFyICpjcDsKLQlpbnQgYWN0cjsKKwlpbnQgaTsKIAotCWFjdHIgPSAxOyAvKiBBbHdheXMgaWdub3JlIGFyZ3ZbMF0gKi8KLQotCWNwID0gJihhcmNzX2NtZGxpbmVbMF0pOwotCXdoaWxlIChhY3RyIDwgcHJvbV9hcmdjKSB7Ci0JCXN0cmNweShjcCwgcHJvbV9hcmd2W2FjdHJdKTsKLQkJY3AgKz0gc3RybGVuKHByb21fYXJndlthY3RyXSk7Ci0JCSpjcCsrID0gJyAnOwotCQlhY3RyKys7CisJZm9yIChpID0gMTsgaSA8IHByb21fYXJnYzsgaSsrKSB7CisJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCBwcm9tX2FyZ3ZbaV0sIENPTU1BTkRfTElORV9TSVpFKTsKKwkJaWYgKGkgPCAocHJvbV9hcmdjIC0gMSkpCisJCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgIiAiLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJfQotCWlmIChjcCAhPSAmKGFyY3NfY21kbGluZVswXSkpIC8qIGdldCByaWQgb2YgdHJhaWxpbmcgc3BhY2UgKi8KLQkJLS1jcDsKLQlpZiAocHJvbV9hcmdjID4gMSkKLQkJKmNwID0gJ1wwJzsKIH0KIAogY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqZW52bmFtZSkKQEAgLTEyMSwxNCArMTA3LDEyIEBACiBpbnQgcHJvbV9nZXRfZXRoZXJuZXRfYWRkcihjaGFyICpldGhlcm5ldF9hZGRyKQogewogCWNoYXIgKmV0aGFkZHJfc3RyOwotCWNoYXIgKmFyZ3B0cjsKIAogCS8qIENoZWNrIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlyc3QgKi8KIAlldGhhZGRyX3N0ciA9IHByb21fZ2V0ZW52KCJldGhhZGRyIik7CiAJaWYgKCFldGhhZGRyX3N0cikgewogCQkvKiBDaGVjayBjb21tYW5kIGxpbmUgKi8KLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCWV0aGFkZHJfc3RyID0gc3Ryc3RyKGFyZ3B0ciwgImV0aGFkZHI9Iik7CisJCWV0aGFkZHJfc3RyID0gc3Ryc3RyKGFyY3NfY21kbGluZSwgImV0aGFkZHI9Iik7CiAJCWlmICghZXRoYWRkcl9zdHIpCiAJCQlyZXR1cm4gLTE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wdXRzLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHV0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWJiZTI0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wdXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJTG93IGxldmVsIFVBUlQgcm91dGluZXMgdG8gZGlyZWN0bHkgYWNjZXNzIEFsY2hlbXkgVUFSVC4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMSwgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLSNkZWZpbmUgU0VSSUFMX0JBU0UgICBVQVJUX0JBU0UKLSNkZWZpbmUgU0VSX0NNRCAgICAgICAweDcKLSNkZWZpbmUgU0VSX0RBVEEgICAgICAweDEKLSNkZWZpbmUgVFhfQlVTWSAgICAgICAweDIwCi0KLSNkZWZpbmUgVElNRU9VVCAgICAgICAweGZmZmZmZgotI2RlZmluZSBTTE9XX0RPV04KLQotc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBjb25zdCBjb20xID0gKHVuc2lnbmVkIGxvbmcgKilTRVJJQUxfQkFTRTsKLQotI2lmZGVmIFNMT1dfRE9XTgotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bih2b2lkKQotewotCWludCBrOwotCi0JZm9yIChrID0gMDsgayA8IDEwMDAwOyBrKyspOwotfQotI2Vsc2UKLSNkZWZpbmUgc2xvd19kb3duKCkKLSNlbmRpZgotCi12b2lkCi1wcm9tX3B1dGNoYXIoY29uc3QgdW5zaWduZWQgY2hhciBjKQotewotCXVuc2lnbmVkIGNoYXIgY2g7Ci0JaW50IGkgPSAwOwotCi0JZG8gewotCQljaCA9IGNvbTFbU0VSX0NNRF07Ci0JCXNsb3dfZG93bigpOwotCQlpKys7Ci0JCWlmIChpID4gVElNRU9VVCkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKDAgPT0gKGNoICYgVFhfQlVTWSkpOwotCi0JY29tMVtTRVJfREFUQV0gPSBjOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Jlc2V0LmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcmVzZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc5MTAxMS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcmVzZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0vKgotICoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJQXUxeHgwIHJlc2V0IHJvdXRpbmVzLgotICoKLSAqIENvcHlyaWdodCAyMDAxLCAyMDA2LCAyMDA4IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi12b2lkIGF1MTAwMF9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpCi17Ci0JLyogU2V0IGFsbCBpbnRlZ3JhdGVkIHBlcmlwaGVyYWxzIHRvIGRpc2FibGVkIHN0YXRlcyAqLwotCWV4dGVybiB2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpOwotCXUzMiBwcmlkID0gcmVhZF9jMF9wcmlkKCk7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuKiogUmVzZXR0aW5nIEludGVncmF0ZWQgUGVyaXBoZXJhbHNcbiIpOwotCi0Jc3dpdGNoIChwcmlkICYgMHhGRjAwMDAwMCkgewotCWNhc2UgMHgwMDAwMDAwMDogLyogQXUxMDAwICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIwMDAwMDEwKTsgLyogYWM5N19lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDgsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAtIGVhcmx5IGVycmF0YSAqLwotCQlhc20oInN5bmMiKTsKLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDIwMDA1OCk7IC8qIHVzYmRfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwMzAwMDQwKTsgLyogaXJfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTA0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDExNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMjQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTM0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDUyMDAwMCk7IC8qIG1hY2VuMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDUyMDAwNCk7IC8qIG1hY2VuMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTAwMDAwOCk7IC8qIGkyc19lbmFibGUgICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMTAwMTAwKTsgLyogdWFydDBfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMjAwMTAwKTsgLyogdWFydDFfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMzAwMTAwKTsgLyogdWFydDJfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNDAwMTAwKTsgLyogdWFydDNfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIxNjAwMTAwKTsgLyogc3NpMF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDIsIDB4YjE2ODAxMDApOyAvKiBzc2kxX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyMCk7IC8qIHN5c19mcmVxY3RybDAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjQpOyAvKiBzeXNfZnJlcWN0cmwxICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI4KTsgLyogc3lzX2Nsa3NyYyAqLwotCQlhdV93cml0ZWwoMHgxMCwgMHhiMTkwMDA2MCk7IC8qIHN5c19jcHVwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwNjQpOyAvKiBzeXNfYXV4cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMTAwKTsgLyogc3lzX3BpbmlucHV0ZW4gKi8KLQkJYnJlYWs7Ci0JY2FzZSAweDAxMDAwMDAwOiAvKiBBdTE1MDAgKi8KLQkJYXVfd3JpdGVsKDB4MDIsIDB4YjAwMDAwMTApOyAvKiBhYzk3X2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwOCwgMHhiMDE3ZmZmYyk7IC8qIHVzYmhfZW5hYmxlIC0gZWFybHkgZXJyYXRhICovCi0JCWFzbSgic3luYyIpOwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDE3ZmZmYyk7IC8qIHVzYmhfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwMjAwMDU4KTsgLyogdXNiZF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMDQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTE0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEyNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMzQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNTIwMDAwKTsgLyogbWFjZW4wICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNTIwMDA0KTsgLyogbWFjZW4xICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMTAwMTAwKTsgLyogdWFydDBfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxNDAwMTAwKTsgLyogdWFydDNfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDIwKTsgLyogc3lzX2ZyZXFjdHJsMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyNCk7IC8qIHN5c19mcmVxY3RybDEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjgpOyAvKiBzeXNfY2xrc3JjICovCi0JCWF1X3dyaXRlbCgweDEwLCAweGIxOTAwMDYwKTsgLyogc3lzX2NwdXBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDA2NCk7IC8qIHN5c19hdXhwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAxMDApOyAvKiBzeXNfcGluaW5wdXRlbiAqLwotCQlicmVhazsKLQljYXNlIDB4MDIwMDAwMDA6IC8qIEF1MTEwMCAqLwotCQlhdV93cml0ZWwoMHgwMiwgMHhiMDAwMDAxMCk7IC8qIGFjOTdfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDA4LCAweGIwMTdmZmZjKTsgLyogdXNiaF9lbmFibGUgLSBlYXJseSBlcnJhdGEgKi8KLQkJYXNtKCJzeW5jIik7Ci0JCWF1X3dyaXRlbCgweDAwLCAweGIwMTdmZmZjKTsgLyogdXNiaF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAyMDAwNTgpOyAvKiB1c2JkX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDMwMDA0MCk7IC8qIGlyX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEwNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMTQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTI0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEzNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjA1MjAwMDApOyAvKiBtYWNlbjAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjEwMDAwMDgpOyAvKiBpMnNfZW5hYmxlICAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTEwMDEwMCk7IC8qIHVhcnQwX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTIwMDEwMCk7IC8qIHVhcnQxX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTQwMDEwMCk7IC8qIHVhcnQzX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMiwgMHhiMTYwMDEwMCk7IC8qIHNzaTBfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIxNjgwMTAwKTsgLyogc3NpMV9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjApOyAvKiBzeXNfZnJlcWN0cmwwICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI0KTsgLyogc3lzX2ZyZXFjdHJsMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyOCk7IC8qIHN5c19jbGtzcmMgKi8KLQkJYXVfd3JpdGVsKDB4MTAsIDB4YjE5MDAwNjApOyAvKiBzeXNfY3B1cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDY0KTsgLyogc3lzX2F1eHBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDEwMCk7IC8qIHN5c19waW5pbnB1dGVuICovCi0JCWJyZWFrOwotCWNhc2UgMHgwMzAwMDAwMDogLyogQXUxNTUwICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxYTAwMDA0KTsgLyogcHNjIDAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjFiMDAwMDQpOyAvKiBwc2MgMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMGEwMDAwNCk7IC8qIHBzYyAyICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwYjAwMDA0KTsgLyogcHNjIDMgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDIwMDA1OCk7IC8qIHVzYmRfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTA0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDExNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMjQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTM0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTUyMDAwMCk7IC8qIG1hY2VuMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTUyMDAwNCk7IC8qIG1hY2VuMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTEwMDEwMCk7IC8qIHVhcnQwX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTIwMDEwMCk7IC8qIHVhcnQxX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTQwMDEwMCk7IC8qIHVhcnQzX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyMCk7IC8qIHN5c19mcmVxY3RybDAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjQpOyAvKiBzeXNfZnJlcWN0cmwxICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI4KTsgLyogc3lzX2Nsa3NyYyAqLwotCQlhdV93cml0ZWwoMHgxMCwgMHhiMTkwMDA2MCk7IC8qIHN5c19jcHVwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwNjQpOyAvKiBzeXNfYXV4cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMTAwKTsgLyogc3lzX3BpbmlucHV0ZW4gKi8KLQkJYnJlYWs7Ci0JfQotCi0Jc2V0X2MwX3N0YXR1cyhTVDBfQkVWIHwgU1QwX0VSTCk7Ci0JY2hhbmdlX2MwX2NvbmZpZyhDT05GX0NNX0NNQVNLLCBDT05GX0NNX1VOQ0FDSEVEKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQl3cml0ZV9jMF93aXJlZCgwKTsKLQotCS8qIEdpdmUgYm9hcmQgYSBjaGFuY2UgdG8gZG8gYSBoYXJkd2FyZSByZXNldCAqLwotCWJvYXJkX3Jlc2V0KCk7Ci0KLQkvKiBKdW1wIHRvIHRoZSBiZWdnaW5pbmcgaW4gY2FzZSBib2FyZF9yZXNldCgpIGlzIGVtcHR5ICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImpyXHQlMCI6OiJyIigweGJmYzAwMDAwKSk7Ci19Ci0KLXZvaWQgYXUxMDAwX2hhbHQodm9pZCkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTU1MCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1NTApCi0JLyogUG93ZXIgb2ZmIHN5c3RlbSAqLwotCXByaW50ayhLRVJOX05PVElDRSAiXG4qKiBQb3dlcmluZyBvZmYuLi5cbiIpOwotCWF1X3dyaXRldyhhdV9yZWFkdygweEFGMDAwMDFDKSB8ICgzIDw8IDE0KSwgMHhBRjAwMDAxQyk7Ci0JYXVfc3luYygpOwotCXdoaWxlICgxKTsgLyogc2hvdWxkIG5vdCBnZXQgaGVyZSAqLwotI2Vsc2UKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuKiogWW91IGNhbiBzYWZlbHkgdHVybiBvZmYgdGhlIHBvd2VyXG4iKTsKLSNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjEwLCAxKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAotCWF1X3dyaXRldyhhdV9yZWFkdygweEI5ODAwMDFDKSB8ICgxIDw8IDE0KSwgMHhCOTgwMDAxQyk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUE0KLQlhdV9zbGVlcCgpOwotCi0JLyogU2hvdWxkIG5vdCBnZXQgaGVyZSAqLwotCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHB1dCBDUFUgaW4gc2xlZXAgbW9kZVxuIik7Ci0Jd2hpbGUgKDEpOwotI2Vsc2UKLQl3aGlsZSAoMSkKLQkJX19hc21fXygiLnNldFx0bWlwczNcblx0IgotCSAgICAgICAgICAgICAgICAid2FpdFxuXHQiCi0JCQkiLnNldFx0bWlwczAiKTsKLSNlbmRpZgotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01JUFNfUEIxNTUwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTU1MCkgKi8KLX0KLQotdm9pZCBhdTEwMDBfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JYXUxMDAwX2hhbHQoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3NldHVwLmMKaW5kZXggNjE4NGJhYS4uNTYxZTVkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3NldHVwLmMKQEAgLTI5LDE4ICsyOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgogCiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKICNpbmNsdWRlIDxhdTEwMDAuaD4KIAogZXh0ZXJuIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpOwotZXh0ZXJuIHZvaWQgYXUxMDAwX3Jlc3RhcnQoY2hhciAqKTsKLWV4dGVybiB2b2lkIGF1MTAwMF9oYWx0KHZvaWQpOwotZXh0ZXJuIHZvaWQgYXUxMDAwX3Bvd2VyX29mZih2b2lkKTsKIGV4dGVybiB2b2lkIHNldF9jcHVzcGVjKHZvaWQpOwogCiB2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQpAQCAtNTcsMTAgKzUyLDYgQEAKIAkvKiB0aGlzIGlzIGZhc3RlciB0aGFuIHdhc3RpbmcgY3ljbGVzIHRyeWluZyB0byBhcHByb3hpbWF0ZSBpdCAqLwogCXByZXNldF9scGogPSAoZXN0X2ZyZXEgPj4gMSkgLyBIWjsKIAotCV9tYWNoaW5lX3Jlc3RhcnQgPSBhdTEwMDBfcmVzdGFydDsKLQlfbWFjaGluZV9oYWx0ID0gYXUxMDAwX2hhbHQ7Ci0JcG1fcG93ZXJfb2ZmID0gYXUxMDAwX3Bvd2VyX29mZjsKLQogCWJvYXJkX3NldHVwKCk7ICAvKiBib2FyZCBzcGVjaWZpYyBzZXR1cCAqLwogCiAJaWYgKGF1MXh4eF9jcHVfbmVlZHNfY29uZmlnX29kKCkpCkBAIC03OCwzNyArNjksMjAgQEAKIAlpb21lbV9yZXNvdXJjZS5lbmQgPSBJT01FTV9SRVNPVVJDRV9FTkQ7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19QQ0kpCiAvKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIHZhbGlkIGZvciBhbGwgQXUxeCBiYXNlZCBib2FyZHMgKi8KIHBoeXNfdCBfX2ZpeHVwX2JpZ3BoeXNfYWRkcihwaHlzX3QgcGh5c19hZGRyLCBwaHlzX3Qgc2l6ZSkKIHsKKwl1MzIgc3RhcnQgPSAodTMyKUF1MTUwMF9QQ0lfTUVNX1NUQVJUOworCXUzMiBlbmQgICA9ICh1MzIpQXUxNTAwX1BDSV9NRU1fRU5EOworCiAJLyogRG9uJ3QgZml4dXAgMzYtYml0IGFkZHJlc3NlcyAqLwogCWlmICgocGh5c19hZGRyID4+IDMyKSAhPSAwKQogCQlyZXR1cm4gcGh5c19hZGRyOwogCi0jaWZkZWYgQ09ORklHX1BDSQotCXsKLQkJdTMyIHN0YXJ0ID0gKHUzMilBdTE1MDBfUENJX01FTV9TVEFSVDsKLQkJdTMyIGVuZCAgID0gKHUzMilBdTE1MDBfUENJX01FTV9FTkQ7Ci0KLQkJLyogQ2hlY2sgZm9yIFBDSSBtZW1vcnkgd2luZG93ICovCi0JCWlmIChwaHlzX2FkZHIgPj0gc3RhcnQgJiYgKHBoeXNfYWRkciArIHNpemUgLSAxKSA8PSBlbmQpCi0JCQlyZXR1cm4gKHBoeXNfdCkKLQkJCSAgICAgICAoKHBoeXNfYWRkciAtIHN0YXJ0KSArIEF1MTUwMF9QQ0lfTUVNX1NUQVJUKTsKLQl9Ci0jZW5kaWYKLQotCS8qCi0JICogQWxsIEF1MXh4MCBTT0NzIGhhdmUgYSBQQ01DSUEgY29udHJvbGxlci4KLQkgKiBXZSBzZXR1cCBvdXIgMzItYml0IHBzZXVkbyBhZGRyZXNzZXMgdG8gYmUgZXF1YWwgdG8gdGhlCi0JICogMzYtYml0IGFkZHIgPj4gNCwgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY2hlY2sgdGhlIGFkZHJlc3MKLQkgKiBhbmQgZml4IGl0LgotCSAqIFRoZSBQQ01DSUEgc29ja2V0IDAgcGh5c2ljYWwgYXR0cmlidXRlIGFkZHJlc3MgaXMgMHhGIDQwMDAgMDAwMC4KLQkgKiBUaGUgcHNldWRvIGFkZHJlc3Mgd2UgdXNlIGlzIDB4RjQwMCAwMDAwLiBBbnkgYWRkcmVzcyBvdmVyCi0JICogMHhGNDAwIDAwMDAgaXMgYSBQQ01DSUEgcHNldWRvIGFkZHJlc3MuCi0JICovCi0JaWYgKChwaHlzX2FkZHIgPj0gMHhGNDAwMDAwMCkgJiYgKHBoeXNfYWRkciA8IDB4RkZGRkZGRkYpKQotCQlyZXR1cm4gKHBoeXNfdCkocGh5c19hZGRyIDw8IDQpOworCS8qIENoZWNrIGZvciBQQ0kgbWVtb3J5IHdpbmRvdyAqLworCWlmIChwaHlzX2FkZHIgPj0gc3RhcnQgJiYgKHBoeXNfYWRkciArIHNpemUgLSAxKSA8PSBlbmQpCisJCXJldHVybiAocGh5c190KSgocGh5c19hZGRyIC0gc3RhcnQpICsgQXUxNTAwX1BDSV9NRU1fU1RBUlQpOwogCiAJLyogZGVmYXVsdCBub3AgKi8KIAlyZXR1cm4gcGh5c19hZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMKaW5kZXggMzc5YTY2NC4uMmFlY2IyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vdGltZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBNYW51ZWwgTGF1c3MgPG1hbm9Acm9hcmluZWxrLmhvbWVsaW51eC5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBNYW51ZWwgTGF1c3MgPG1hbnVlbC5sYXVzc0BnbWFpbC5jb20+CiAgKgogICogUHJldmlvdXMgaW5jYXJuYXRpb25zIHdlcmU6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDYsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSwgPHNvdXJjZUBtdmlzdGEuY29tPgpAQCAtODUsNyArODUsNiBAQAogCS5uYW1lCQk9ICJydGNtYXRjaDIiLAogCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCiAJLnJhdGluZwkJPSAxMDAsCi0JLmlycQkJPSBBVTEwMDBfUlRDX01BVENIMl9JTlQsCiAJLnNldF9uZXh0X2V2ZW50CT0gYXUxeF9ydGNtYXRjaDJfc2V0X25leHRfZXZlbnQsCiAJLnNldF9tb2RlCT0gYXUxeF9ydGNtYXRjaDJfc2V0X21vZGUsCiAJLmNwdW1hc2sJPSBjcHVfYWxsX21hc2ssCkBAIC05OCwxMSArOTcsMTMgQEAKIAkuZGV2X2lkCQk9ICZhdTF4X3J0Y21hdGNoMl9jbG9ja2RldiwKIH07CiAKLXZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhbGNoZW15X3RpbWVfaW5pdCh1bnNpZ25lZCBpbnQgbTJpbnQpCiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2QgPSAmYXUxeF9ydGNtYXRjaDJfY2xvY2tkZXY7CiAJdW5zaWduZWQgbG9uZyB0OwogCisJYXUxeF9ydGNtYXRjaDJfY2xvY2tkZXYuaXJxID0gbTJpbnQ7CisKIAkvKiBDaGVjayBpZiBmaXJtd2FyZSAoWUFNT04sIC4uLikgaGFzIGVuYWJsZWQgMzJrSHogYW5kIGNsb2NrCiAJICogaGFzIGJlZW4gZGV0ZWN0ZWQuICBJZiBzbyBpbnN0YWxsIHRoZSBydGNtYXRjaDIgY2xvY2tzb3VyY2UsCiAJICogb3RoZXJ3aXNlIGRvbid0IGJvdGhlci4gIE5vdGUgdGhhdCBib3RoIGJpdHMgYmVpbmcgc2V0IGlzIGJ5CkBAIC0xNDgsMTMgKzE0OSwxOCBAQAogCWNkLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmYsIGNkKTsKIAljZC0+bWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyg4LCBjZCk7CS8qIH4wLjI1bXMgKi8KIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2QpOwotCXNldHVwX2lycShBVTEwMDBfUlRDX01BVENIMl9JTlQsICZhdTF4X3J0Y21hdGNoMl9pcnFhY3Rpb24pOworCXNldHVwX2lycShtMmludCwgJmF1MXhfcnRjbWF0Y2gyX2lycWFjdGlvbik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15IGNsb2Nrc291cmNlIGluc3RhbGxlZFxuIik7CiAKLQlyZXR1cm47CisJcmV0dXJuIDA7CiAKIGNudHJfZXJyOgorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGFsY2hlbXlfc2V0dXBfYzB0aW1lcih2b2lkKQorewogCS8qCiAJICogTUlQUyBrZXJuZWwgYXNzaWducyAnYXUxa193YWl0JyB0byAnY3B1X3dhaXQnIGJlZm9yZSB0aGlzCiAJICogZnVuY3Rpb24gaXMgY2FsbGVkLiAgQmVjYXVzZSB0aGUgQWxjaGVteSBjb3VudGVycyBhcmUgdW51c2FibGUKQEAgLTE2NiwzICsxNzIsMjIgQEAKIAlyNGtfY2xvY2tldmVudF9pbml0KCk7CiAJaW5pdF9yNGtfY2xvY2tzb3VyY2UoKTsKIH0KKworc3RhdGljIGludCBhbGNoZW15X20yaW50dGFiW10gX19pbml0ZGF0YSA9IHsKKwlBVTEwMDBfUlRDX01BVENIMl9JTlQsCisJQVUxNTAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTEwMF9SVENfTUFUQ0gyX0lOVCwKKwlBVTE1NTBfUlRDX01BVENIMl9JTlQsCisJQVUxMjAwX1JUQ19NQVRDSDJfSU5ULAorfTsKKwordm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKK3sKKwlpbnQgdDsKKworCXQgPSBhbGNoZW15X2dldF9jcHV0eXBlKCk7CisJaWYgKHQgPT0gQUxDSEVNWV9DUFVfVU5LTk9XTikKKwkJYWxjaGVteV9zZXR1cF9jMHRpbWVyKCk7CisJZWxzZSBpZiAoYWxjaGVteV90aW1lX2luaXQoYWxjaGVteV9tMmludHRhYlt0XSkpCisJCWFsY2hlbXlfc2V0dXBfYzB0aW1lcigpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL01ha2VmaWxlCmluZGV4IDczMGY5ZjIuLmVjYmQzN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIEFsY2hlbXkgRGV2ZWxib2FyZHMKICMKIAotb2JqLXkgKz0gcHJvbS5vCitvYmoteSArPSBwcm9tLm8gYmNzci5vIHBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KIG9iai0kKENPTkZJR19NSVBTX1BCMTAwMCkJKz0gcGIxMDAwLwogb2JqLSQoQ09ORklHX01JUFNfUEIxMTAwKQkrPSBwYjExMDAvCkBAIC0xMSw4ICsxMSwxMCBAQAogb2JqLSQoQ09ORklHX01JUFNfUEIxNTUwKQkrPSBwYjE1NTAvCiBvYmotJChDT05GSUdfTUlQU19EQjEwMDApCSs9IGRiMXgwMC8KIG9iai0kKENPTkZJR19NSVBTX0RCMTEwMCkJKz0gZGIxeDAwLwotb2JqLSQoQ09ORklHX01JUFNfREIxMjAwKQkrPSBwYjEyMDAvCitvYmotJChDT05GSUdfTUlQU19EQjEyMDApCSs9IGRiMTIwMC8KIG9iai0kKENPTkZJR19NSVBTX0RCMTUwMCkJKz0gZGIxeDAwLwogb2JqLSQoQ09ORklHX01JUFNfREIxNTUwKQkrPSBkYjF4MDAvCiBvYmotJChDT05GSUdfTUlQU19CT1NQT1JVUykJKz0gZGIxeDAwLwogb2JqLSQoQ09ORklHX01JUFNfTUlSQUdFKQkrPSBkYjF4MDAvCisKK0VYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvYmNzci5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2Jjc3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM0ZmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2Jjc3IuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIGJjc3IuaCAtLSBEYjF4eHgvUGIxeHh4IERldmJvYXJkIENQTEQgcmVnaXN0ZXJzICgiQkNTUiIpIGFic3RyYWN0aW9uLgorICoKKyAqIEFsbCBBbGNoZW15IGRldmVsb3BtZW50IGJvYXJkcyAoZXhjZXB0LCBvZiBjb3Vyc2UsIHRoZSB3ZWlyZCBQQjEwMDApCisgKiBoYXZlIGEgZmV3IHJlZ2lzdGVycyBpbiBhIENQTEQgd2l0aCBzdGFuZGFyZGlzZWQgbGF5b3V0OyB0aGV5IG1vc3RseQorICogb25seSBkaWZmZXIgaW4gYmFzZSBhZGRyZXNzLgorICogQWxsIHJlZ2lzdGVycyBhcmUgMTZiaXRzIHdpZGUgd2l0aCAzMmJpdCBzcGFjaW5nLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCitzdGF0aWMgc3RydWN0IGJjc3JfcmVnIHsKKwl2b2lkIF9faW9tZW0gKnJhZGRyOworCXNwaW5sb2NrX3QgbG9jazsKK30gYmNzcl9yZWdzW0JDU1JfQ05UXTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqYmNzcl92aXJ0OwkvKiBLU0VHMSBhZGRyIG9mIEJDU1IgYmFzZSAqLworc3RhdGljIGludCBiY3NyX2NzY19iYXNlOwkvKiBsaW51eC1pcnEgb2YgZmlyc3QgY2FzY2FkZWQgaXJxICovCisKK3ZvaWQgX19pbml0IGJjc3JfaW5pdCh1bnNpZ25lZCBsb25nIGJjc3IxX3BoeXMsIHVuc2lnbmVkIGxvbmcgYmNzcjJfcGh5cykKK3sKKwlpbnQgaTsKKworCWJjc3IxX3BoeXMgPSBLU0VHMUFERFIoQ1BIWVNBRERSKGJjc3IxX3BoeXMpKTsKKwliY3NyMl9waHlzID0gS1NFRzFBRERSKENQSFlTQUREUihiY3NyMl9waHlzKSk7CisKKwliY3NyX3ZpcnQgPSAodm9pZCBfX2lvbWVtICopYmNzcjFfcGh5czsKKworCWZvciAoaSA9IDA7IGkgPCBCQ1NSX0NOVDsgaSsrKSB7CisJCWlmIChpID49IEJDU1JfSEVYTEVEUykKKwkJCWJjc3JfcmVnc1tpXS5yYWRkciA9ICh2b2lkIF9faW9tZW0gKiliY3NyMl9waHlzICsKKwkJCQkJKDB4MDQgKiAoaSAtIEJDU1JfSEVYTEVEUykpOworCQllbHNlCisJCQliY3NyX3JlZ3NbaV0ucmFkZHIgPSAodm9pZCBfX2lvbWVtICopYmNzcjFfcGh5cyArCisJCQkJCSgweDA0ICogaSk7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmJjc3JfcmVnc1tpXS5sb2NrKTsKKwl9Cit9CisKK3Vuc2lnbmVkIHNob3J0IGJjc3JfcmVhZChlbnVtIGJjc3JfaWQgcmVnKQoreworCXVuc2lnbmVkIHNob3J0IHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiY3NyX3JlZ3NbcmVnXS5sb2NrLCBmbGFncyk7CisJciA9IF9fcmF3X3JlYWR3KGJjc3JfcmVnc1tyZWddLnJhZGRyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3NyX3JlZ3NbcmVnXS5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY3NyX3JlYWQpOworCit2b2lkIGJjc3Jfd3JpdGUoZW51bSBiY3NyX2lkIHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzcl9yZWdzW3JlZ10ubG9jaywgZmxhZ3MpOworCV9fcmF3X3dyaXRldyh2YWwsIGJjc3JfcmVnc1tyZWddLnJhZGRyKTsKKwl3bWIoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3NyX3JlZ3NbcmVnXS5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY3NyX3dyaXRlKTsKKwordm9pZCBiY3NyX21vZChlbnVtIGJjc3JfaWQgcmVnLCB1bnNpZ25lZCBzaG9ydCBjbHIsIHVuc2lnbmVkIHNob3J0IHNldCkKK3sKKwl1bnNpZ25lZCBzaG9ydCByOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzcl9yZWdzW3JlZ10ubG9jaywgZmxhZ3MpOworCXIgPSBfX3Jhd19yZWFkdyhiY3NyX3JlZ3NbcmVnXS5yYWRkcik7CisJciAmPSB+Y2xyOworCXIgfD0gc2V0OworCV9fcmF3X3dyaXRldyhyLCBiY3NyX3JlZ3NbcmVnXS5yYWRkcik7CisJd21iKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzcl9yZWdzW3JlZ10ubG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmNzcl9tb2QpOworCisvKgorICogREIxMjAwL1BCMTIwMCBDUExEIElSUSBtdXhlcgorICovCitzdGF0aWMgdm9pZCBiY3NyX2NzY19oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBiaXNyID0gX19yYXdfcmVhZHcoYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UU1RBVCk7CisKKwlmb3IgKCA7IGJpc3I7IGJpc3IgJj0gYmlzciAtIDEpCisJCWdlbmVyaWNfaGFuZGxlX2lycShiY3NyX2NzY19iYXNlICsgX19mZnMoYmlzcikpOworfQorCisvKiBOT1RFOiBib3RoIHRoZSBlbmFibGUgYW5kIG1hc2sgYml0cyBtdXN0IGJlIGNsZWFyZWQsIG90aGVyd2lzZSB0aGUKKyAqIENQTEQgZ2VuZXJhdGVzIHRvbnMgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cyAoYXQgbGVhc3Qgb24gbXkgREIxMjAwKS4KKyAqCS0tIG1sYXUKKyAqLworc3RhdGljIHZvaWQgYmNzcl9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIHNob3J0IHYgPSAxIDw8IChpcnFfbnIgLSBiY3NyX2NzY19iYXNlKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UQ0xSKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfTUFTS0NMUik7CisJd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjc3JfaXJxX21hc2thY2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBzaG9ydCB2ID0gMSA8PCAoaXJxX25yIC0gYmNzcl9jc2NfYmFzZSk7CisJX19yYXdfd3JpdGV3KHYsIGJjc3JfdmlydCArIEJDU1JfUkVHX0lOVENMUik7CisJX19yYXdfd3JpdGV3KHYsIGJjc3JfdmlydCArIEJDU1JfUkVHX01BU0tDTFIpOworCV9fcmF3X3dyaXRldyh2LCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19JTlRTVEFUKTsJLyogYWNrICovCisJd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjc3JfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIHNob3J0IHYgPSAxIDw8IChpcnFfbnIgLSBiY3NyX2NzY19iYXNlKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UU0VUKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfTUFTS1NFVCk7CisJd21iKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmNzcl9pcnFfdHlwZSA9IHsKKwkubmFtZQkJPSAiQ1BMRCIsCisJLm1hc2sJCT0gYmNzcl9pcnFfbWFzaywKKwkubWFza19hY2sJPSBiY3NyX2lycV9tYXNrYWNrLAorCS51bm1hc2sJCT0gYmNzcl9pcnFfdW5tYXNrLAorfTsKKwordm9pZCBfX2luaXQgYmNzcl9pbml0X2lycShpbnQgY3NjX3N0YXJ0LCBpbnQgY3NjX2VuZCwgaW50IGhvb2tfaXJxKQoreworCXVuc2lnbmVkIGludCBpcnE7CisKKwkvKiBtYXNrICYgZGlzYWJsZSAmIGFjayBhbGwgKi8KKwlfX3Jhd193cml0ZXcoMHhmZmZmLCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19JTlRDTFIpOworCV9fcmF3X3dyaXRldygweGZmZmYsIGJjc3JfdmlydCArIEJDU1JfUkVHX01BU0tDTFIpOworCV9fcmF3X3dyaXRldygweGZmZmYsIGJjc3JfdmlydCArIEJDU1JfUkVHX0lOVFNUQVQpOworCXdtYigpOworCisJYmNzcl9jc2NfYmFzZSA9IGNzY19zdGFydDsKKworCWZvciAoaXJxID0gY3NjX3N0YXJ0OyBpcnEgPD0gY3NjX2VuZDsgaXJxKyspCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmJjc3JfaXJxX3R5cGUsCisJCQloYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGhvb2tfaXJxLCBiY3NyX2NzY19oYW5kbGVyKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODQwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15ICs9IHNldHVwLm8gcGxhdGZvcm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYjk1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw1NjEgQEAKKy8qCisgKiBEQkF1MTIwMCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTWFudWVsIExhdXNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTE1NTBfc3BpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxMjAwLmg+CisKKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGIxMjAwX3NwaWZsYXNoX3BhcnRzW10gPSB7CisJeworCQkubmFtZQk9ICJEQjEyMDAgU1BJIGZsYXNoIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGRiMTIwMF9zcGlmbGFzaF9kYXRhID0geworCS5uYW1lCQk9ICJzMjVmbDAwMSIsCisJLnBhcnRzCQk9IGRiMTIwMF9zcGlmbGFzaF9wYXJ0cywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGRiMTIwMF9zcGlmbGFzaF9wYXJ0cyksCisJLnR5cGUJCT0gIm0yNXAxMCIsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGRiMTIwMF9zcGlfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkvKiBUSSBUTVAxMjFBSURCVlIgdGVtcCBzZW5zb3IgKi8KKwkJLm1vZGFsaWFzCT0gInRtcDEyMSIsCisJCS5tYXhfc3BlZWRfaHoJPSAyMDAwMDAwLAorCQkuYnVzX251bQk9IDAsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tb2RlCQk9IDAsCisJfSwKKwl7CisJCS8qIFNwYW5zaW9uIFMyNUZMMDAxRDBGTUEgU1BJIGZsYXNoICovCisJCS5tb2RhbGlhcwk9ICJtMjVwODAiLAorCQkubWF4X3NwZWVkX2h6CT0gNTAwMDAwMDAsCisJCS5idXNfbnVtCT0gMCwKKwkJLmNoaXBfc2VsZWN0CT0gMSwKKwkJLm1vZGUJCT0gMCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZGIxMjAwX3NwaWZsYXNoX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZGIxMjAwX2kyY19kZXZzW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS8qIEFUMjRDMDQtMTAgSTJDIGVlcHJvbSAqLworCQlJMkNfQk9BUkRfSU5GTygiMjRjMDQiLCAweDUyKSwKKwl9LAorCXsKKwkJLyogUGhpbGlwcyBORTE2MTkgdGVtcC92b2x0YWdlIHNlbnNvciAoYWRtMTAyNSBkcnYpICovCisJCUkyQ19CT0FSRF9JTkZPKCJuZTE2MTkiLCAweDJkKSwKKwl9LAorCXsKKwkJLyogSTJTIGF1ZGlvIGNvZGVjIFdNODczMSAqLworCQlJMkNfQk9BUkRfSU5GTygid204NzMxIiwgMHgxYiksCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBhdTEyMDBfbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9ICh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVzsKKworCWlvYWRkciAmPSAweGZmZmZmZjAwOworCisJaWYgKGN0cmwgJiBOQU5EX0NMRSkgeworCQlpb2FkZHIgKz0gTUVNX1NUTkFORF9DTUQ7CisJfSBlbHNlIGlmIChjdHJsICYgTkFORF9BTEUpIHsKKwkJaW9hZGRyICs9IE1FTV9TVE5BTkRfQUREUjsKKwl9IGVsc2UgeworCQkvKiBhc3N1bWUgd2Ugd2FudCB0byByL3cgcmVhbCBkYXRhICBieSBkZWZhdWx0ICovCisJCWlvYWRkciArPSBNRU1fU1ROQU5EX0RBVEE7CisJfQorCXRoaXMtPklPX0FERFJfUiA9IHRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKilpb2FkZHI7CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKSB7CisJCV9fcmF3X3dyaXRlYihjbWQsIHRoaXMtPklPX0FERFJfVyk7CisJCXdtYigpOworCX0KK30KKworc3RhdGljIGludCBhdTEyMDBfbmFuZF9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKilNRU1fU1RTVEFUKSAmIDE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkYjEyMDBfcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGIxMjAwX25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIk5BTkQgRlMgMCIsCisJCS5vZmZzZXQJPSAwLAorCQkuc2l6ZQk9IDggKiAxMDI0ICogMTAyNCwKKwl9LAorCXsKKwkJLm5hbWUJPSAiTkFORCBGUyAxIiwKKwkJLm9mZnNldAk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgZGIxMjAwX25hbmRfcGxhdGRhdGEgPSB7CisJLmNoaXAgPSB7CisJCS5ucl9jaGlwcwk9IDEsCisJCS5jaGlwX29mZnNldAk9IDAsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShkYjEyMDBfbmFuZF9wYXJ0cyksCisJCS5wYXJ0aXRpb25zCT0gZGIxMjAwX25hbmRfcGFydHMsCisJCS5jaGlwX2RlbGF5CT0gMjAsCisJCS5wYXJ0X3Byb2JlX3R5cGVzID0gZGIxMjAwX3BhcnRfcHJvYmVzLAorCX0sCisJLmN0cmwgPSB7CisJCS5kZXZfcmVhZHkJPSBhdTEyMDBfbmFuZF9kZXZpY2VfcmVhZHksCisJCS5jbWRfY3RybAk9IGF1MTIwMF9uYW5kX2NtZF9jdHJsLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiMTIwMF9uYW5kX3Jlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gREIxMjAwX05BTkRfUEhZU19BRERSLAorCQkuZW5kCT0gREIxMjAwX05BTkRfUEhZU19BRERSICsgMHhmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9uYW5kX2RldiA9IHsKKwkubmFtZQkJPSAiZ2VuX25hbmQiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYjEyMDBfbmFuZF9yZXMpLAorCS5yZXNvdXJjZQk9IGRiMTIwMF9uYW5kX3JlcywKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmRiMTIwMF9uYW5kX3BsYXRkYXRhLAorCX0KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBkYjEyMDBfZXRoX2RhdGEgPSB7CisJLmZsYWdzCT0gU01DOTFYX05PV0FJVCB8IFNNQzkxWF9VU0VfMTZCSVQsCisJLmxlZGEJPSBSUENfTEVEXzEwMF8xMCwKKwkubGVkYgk9IFJQQ19MRURfVFhfUlgsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiMTIwMF9ldGhfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBEQjEyMDBfRVRIX1BIWVNfQUREUiwKKwkJLmVuZAk9IERCMTIwMF9FVEhfUEhZU19BRERSICsgMHhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gREIxMjAwX0VUSF9JTlQsCisJCS5lbmQJPSBEQjEyMDBfRVRIX0lOVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9ldGhfZGV2ID0geworCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRiMTIwMF9ldGhfZGF0YSwKKwl9LAorCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGIxMjAwX2V0aF9yZXMpLAorCS5yZXNvdXJjZQk9IGRiMTIwMF9ldGhfcmVzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGIxMjAwX2lkZV9yZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IERCMTIwMF9JREVfUEhZU19BRERSLAorCQkuZW5kIAk9IERCMTIwMF9JREVfUEhZU19BRERSICsgREIxMjAwX0lERV9QSFlTX0xFTiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBEQjEyMDBfSURFX0lOVCwKKwkJLmVuZAk9IERCMTIwMF9JREVfSU5ULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgdTY0IGlkZV9kbWFtYXNrID0gRE1BXzMyQklUX01BU0s7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9pZGVfZGV2ID0geworCS5uYW1lCQk9ICJhdTEyMDAtaWRlIiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgCQk9ICZpZGVfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BXzMyQklUX01BU0ssCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGIxMjAwX2lkZV9yZXMpLAorCS5yZXNvdXJjZQk9IGRiMTIwMF9pZGVfcmVzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9ydGNfZGV2ID0geworCS5uYW1lCT0gInJ0Yy1hdTF4eHgiLAorCS5pZAk9IC0xLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNEIGNhcmRkZXRlY3RzOiAgdGhleSdyZSBzdXBwb3NlZCB0byBiZSBlZGdlLXRyaWdnZXJlZCwgYnV0IGFjaworICogZG9lc24ndCBzZWVtIHRvIHdvcmsgKENQTEQgUmV2IDIpLiAgSW5zdGVhZCwgdGhlIHNjcmVhbWluZyBvbmUKKyAqIGlzIGRpc2FibGVkIGFuZCBpdHMgY291bnRlcnBhcnQgZW5hYmxlZC4gIFRoZSA1MDBtcyB0aW1lb3V0IGlzCisgKiBiZWNhdXNlIHRoZSBjYXJkZGV0ZWN0IGlzbid0IGRlYm91bmNlZCBpbiBoYXJkd2FyZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IGRiMTIwMF9tbWNfY2QoaW50IGlycSwgdm9pZCAqcHRyKQoreworCXZvaWQoKm1tY19jZCkoc3RydWN0IG1tY19ob3N0ICosIHVuc2lnbmVkIGxvbmcpOworCisJaWYgKGlycSA9PSBEQjEyMDBfU0QwX0lOU0VSVF9JTlQpIHsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKERCMTIwMF9TRDBfSU5TRVJUX0lOVCk7CisJCWVuYWJsZV9pcnEoREIxMjAwX1NEMF9FSkVDVF9JTlQpOworCX0gZWxzZSB7CisJCWRpc2FibGVfaXJxX25vc3luYyhEQjEyMDBfU0QwX0VKRUNUX0lOVCk7CisJCWVuYWJsZV9pcnEoREIxMjAwX1NEMF9JTlNFUlRfSU5UKTsKKwl9CisKKwkvKiBsaW5rIGFnYWluc3QgQ09ORklHX01NQz1tICovCisJbW1jX2NkID0gc3ltYm9sX2dldChtbWNfZGV0ZWN0X2NoYW5nZSk7CisJaWYgKG1tY19jZCkgeworCQltbWNfY2QocHRyLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworCQlzeW1ib2xfcHV0KG1tY19kZXRlY3RfY2hhbmdlKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZGIxMjAwX21tY19jZF9zZXR1cCh2b2lkICptbWNfaG9zdCwgaW50IGVuKQoreworCWludCByZXQ7CisKKwlpZiAoZW4pIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoREIxMjAwX1NEMF9JTlNFUlRfSU5ULCBkYjEyMDBfbW1jX2NkLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNkX2luc2VydCIsIG1tY19ob3N0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCXJldCA9IHJlcXVlc3RfaXJxKERCMTIwMF9TRDBfRUpFQ1RfSU5ULCBkYjEyMDBfbW1jX2NkLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNkX2VqZWN0IiwgbW1jX2hvc3QpOworCQlpZiAocmV0KSB7CisJCQlmcmVlX2lycShEQjEyMDBfU0QwX0lOU0VSVF9JTlQsIG1tY19ob3N0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGJjc3JfcmVhZChCQ1NSX1NJR1NUQVQpICYgQkNTUl9JTlRfU0QwSU5TRVJUKQorCQkJZW5hYmxlX2lycShEQjEyMDBfU0QwX0VKRUNUX0lOVCk7CisJCWVsc2UKKwkJCWVuYWJsZV9pcnEoREIxMjAwX1NEMF9JTlNFUlRfSU5UKTsKKworCX0gZWxzZSB7CisJCWZyZWVfaXJxKERCMTIwMF9TRDBfSU5TRVJUX0lOVCwgbW1jX2hvc3QpOworCQlmcmVlX2lycShEQjEyMDBfU0QwX0VKRUNUX0lOVCwgbW1jX2hvc3QpOworCX0KKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRiMTIwMF9tbWNfc2V0X3Bvd2VyKHZvaWQgKm1tY19ob3N0LCBpbnQgc3RhdGUpCit7CisJaWYgKHN0YXRlKSB7CisJCWJjc3JfbW9kKEJDU1JfQk9BUkQsIDAsIEJDU1JfQk9BUkRfU0QwUFdSKTsKKwkJbXNsZWVwKDQwMCk7CS8qIHN0YWJpbGl6YXRpb24gdGltZSAqLworCX0gZWxzZQorCQliY3NyX21vZChCQ1NSX0JPQVJELCBCQ1NSX0JPQVJEX1NEMFBXUiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZGIxMjAwX21tY19jYXJkX3JlYWRvbmx5KHZvaWQgKm1tY19ob3N0KQoreworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX1NEMFdQKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IGRiMTIwMF9tbWNfY2FyZF9pbnNlcnRlZCh2b2lkICptbWNfaG9zdCkKK3sKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NJR1NUQVQpICYgQkNTUl9JTlRfU0QwSU5TRVJUKSA/IDEgOiAwOworfQorCitzdGF0aWMgdm9pZCBkYjEyMDBfbW1jbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQsCisJCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJaWYgKGJyaWdodG5lc3MgIT0gTEVEX09GRikKKwkJYmNzcl9tb2QoQkNTUl9MRURTLCBCQ1NSX0xFRFNfTEVEMCwgMCk7CisJZWxzZQorCQliY3NyX21vZChCQ1NSX0xFRFMsIDAsIEJDU1JfTEVEU19MRUQwKTsKK30KKworc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgZGIxMjAwX21tY19sZWQgPSB7CisJLmJyaWdodG5lc3Nfc2V0CT0gZGIxMjAwX21tY2xlZF9zZXQsCit9OworCisvKiBuZWVkZWQgYnkgYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMgKi8KK3N0cnVjdCBhdTF4bW1jX3BsYXRmb3JtX2RhdGEgYXUxeG1tY19wbGF0ZGF0YVtdID0geworCVswXSA9IHsKKwkJLmNkX3NldHVwCT0gZGIxMjAwX21tY19jZF9zZXR1cCwKKwkJLnNldF9wb3dlcgk9IGRiMTIwMF9tbWNfc2V0X3Bvd2VyLAorCQkuY2FyZF9pbnNlcnRlZAk9IGRiMTIwMF9tbWNfY2FyZF9pbnNlcnRlZCwKKwkJLmNhcmRfcmVhZG9ubHkJPSBkYjEyMDBfbW1jX2NhcmRfcmVhZG9ubHksCisJCS5sZWQJCT0gJmRiMTIwMF9tbWNfbGVkLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTEyMDBfcHNjMF9yZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBTQzBfUEhZU19BRERSLAorCQkuZW5kCT0gUFNDMF9QSFlTX0FERFIgKyAweDAwMGZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVUxMjAwX1BTQzBfSU5ULAorCQkuZW5kCT0gQVUxMjAwX1BTQzBfSU5ULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzBfVFgsCisJCS5lbmQJPSBEU0NSX0NNRDBfUFNDMF9UWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IERTQ1JfQ01EMF9QU0MwX1JYLAorCQkuZW5kCT0gRFNDUl9DTUQwX1BTQzBfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjEyMDBfaTJjX2RldiA9IHsKKwkubmFtZQkJPSAiYXUxeHBzY19zbWJ1cyIsCisJLmlkCQk9IDAsCS8qIGJ1cyBudW1iZXIgKi8KKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXUxMjAwX3BzYzBfcmVzKSwKKwkucmVzb3VyY2UJPSBhdTEyMDBfcHNjMF9yZXMsCit9OworCitzdGF0aWMgdm9pZCBkYjEyMDBfc3BpX2NzX2VuKHN0cnVjdCBhdTE1NTBfc3BpX2luZm8gKnNwaSwgaW50IGNzLCBpbnQgcG9sKQoreworCWlmIChjcykKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIDAsIEJDU1JfUkVTRVRTX1NQSVNFTCk7CisJZWxzZQorCQliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfU1BJU0VMLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBhdTE1NTBfc3BpX2luZm8gZGIxMjAwX3NwaV9wbGF0ZGF0YSA9IHsKKwkubWFpbmNsa19oegk9IDUwMDAwMDAwLAkvKiBQU0MwIGNsb2NrICovCisJLm51bV9jaGlwc2VsZWN0ID0gMiwKKwkuYWN0aXZhdGVfY3MJPSBkYjEyMDBfc3BpX2NzX2VuLAorfTsKKworc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV8zMkJJVF9NQVNLOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjEyMDBfc3BpX2RldiA9IHsKKwkuZGV2CT0geworCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfMzJCSVRfTUFTSywKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmRiMTIwMF9zcGlfcGxhdGRhdGEsCisJfSwKKwkubmFtZQkJPSAiYXUxNTUwLXNwaSIsCisJLmlkCQk9IDAsCS8qIGJ1cyBudW1iZXIgKi8KKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXUxMjAwX3BzYzBfcmVzKSwKKwkucmVzb3VyY2UJPSBhdTEyMDBfcHNjMF9yZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MTIwMF9wc2MxX3Jlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUFNDMV9QSFlTX0FERFIsCisJCS5lbmQJPSBQU0MxX1BIWVNfQUREUiArIDB4MDAwZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVTEyMDBfUFNDMV9JTlQsCisJCS5lbmQJPSBBVTEyMDBfUFNDMV9JTlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBEU0NSX0NNRDBfUFNDMV9UWCwKKwkJLmVuZAk9IERTQ1JfQ01EMF9QU0MxX1RYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzFfUlgsCisJCS5lbmQJPSBEU0NSX0NNRDBfUFNDMV9SWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRiMTIwMF9hdWRpb19kZXYgPSB7CisJLyogbmFtZSBhc3NpZ25lZCBsYXRlciBiYXNlZCBvbiBzd2l0Y2ggc2V0dGluZyAqLworCS5pZAkJPSAxLAkvKiBQU0MgSUQgKi8KKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXUxMjAwX3BzYzFfcmVzKSwKKwkucmVzb3VyY2UJPSBhdTEyMDBfcHNjMV9yZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGIxMjAwX2RldnNbXSBfX2luaXRkYXRhID0geworCU5VTEwsCQkvKiBQU0MwLCBzZWxlY3RlZCBieSBTNi44ICovCisJJmRiMTIwMF9pZGVfZGV2LAorCSZkYjEyMDBfZXRoX2RldiwKKwkmZGIxMjAwX3J0Y19kZXYsCisJJmRiMTIwMF9uYW5kX2RldiwKKwkmZGIxMjAwX2F1ZGlvX2RldiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRiMTIwMF9kZXZfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcGZjOworCXVuc2lnbmVkIHNob3J0IHN3OworCWludCBzd2FwcGVkOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGIxMjAwX2kyY19kZXZzLAorCQkJCUFSUkFZX1NJWkUoZGIxMjAwX2kyY19kZXZzKSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGIxMjAwX3NwaV9kZXZzLAorCQkJCUFSUkFZX1NJWkUoZGIxMjAwX2kyY19kZXZzKSk7CisKKwkvKiBTV0lUQ0hFUzoJUzYuOCBJMkMvU1BJIHNlbGVjdG9yICAoT0ZGPUkyQyAgT049U1BJKQorCSAqCQlTNi43IEFDOTcvSTJTIHNlbGVjdG9yIChPRkY9QUM5NyBPTj1JMlMpCisJICovCisKKwkvKiBOT1RFOiBHUElPMjE1IGNvbnRyb2xzIE9URyBWQlVTIHN1cHBseS4gIEluIFNQSSBtb2RlIGhvd2V2ZXIKKwkgKiB0aGlzIHBpbiBpcyBjbGFpbWVkIGJ5IFBTQzAgKHVudXNlZCB0aG91Z2gsIGJ1dCBwaW5tdXggZG9lc24ndAorCSAqIGFsbG93IHRvIGZyZWUgaXQgd2l0aG91dCBjcmlwcGxpbmcgdGhlIFNQSSBpbnRlcmZhY2UpLgorCSAqIEFzIGEgcmVzdWx0LCBpbiBTUEkgbW9kZSwgT1RHIHNpbXBseSB3b24ndCB3b3JrIChQU0MwIHVzZXMKKwkgKiBpdCBhcyBhbiBpbnB1dCBwaW4gd2hpY2ggaXMgcHVsbGVkIGhpZ2ggb24gdGhlIGJvYXJkcykuCisJICovCisJcGZjID0gX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKVNZU19QSU5GVU5DKSAmIH5TWVNfUElORlVOQ19QMEE7CisKKwkvKiBzd2l0Y2ggb2ZmIE9URyBWQlVTIHN1cHBseSAqLworCWdwaW9fcmVxdWVzdCgyMTUsICJvdGctdmJ1cyIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgyMTUsIDEpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiREIxMjAwIGRldmljZSBjb25maWd1cmF0aW9uOlxuIik7CisKKwlzdyA9IGJjc3JfcmVhZChCQ1NSX1NXSVRDSEVTKTsKKwlpZiAoc3cgJiBCQ1NSX1NXSVRDSEVTX0RJUF84KSB7CisJCWRiMTIwMF9kZXZzWzBdID0gJmRiMTIwMF9pMmNfZGV2OworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfUFNDME1VWCwgMCk7CisKKwkJcGZjIHw9ICgyIDw8IDE3KTsJLyogR1BJTzIgYmxvY2sgb3ducyBHUElPMjE1ICovCisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiIFM2LjggT0ZGOiBQU0MwIG1vZGUgSTJDXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiICAgT1RHIHBvcnQgVkJVUyBzdXBwbHkgYXZhaWxhYmxlIVxuIik7CisJfSBlbHNlIHsKKwkJZGIxMjAwX2RldnNbMF0gPSAmZGIxMjAwX3NwaV9kZXY7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCAwLCBCQ1NSX1JFU0VUU19QU0MwTVVYKTsKKworCQlwZmMgfD0gKDEgPDwgMTcpOwkvKiBQU0MwIG93bnMgR1BJTzIxNSAqLworCisJCXByaW50ayhLRVJOX0lORk8gIiBTNi44IE9OIDogUFNDMCBtb2RlIFNQSVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIiAgIE9URyBwb3J0IFZCVVMgc3VwcGx5IGRpc2FibGVkXG4iKTsKKwl9CisJX19yYXdfd3JpdGVsKHBmYywgKHZvaWQgX19pb21lbSAqKVNZU19QSU5GVU5DKTsKKwl3bWIoKTsKKworCS8qIEF1ZGlvOiBESVA3IHNlbGVjdHMgSTJTKDApL0FDOTcoMSksIGJ1dCBuZWVkIEkyQyBmb3IgSTJTIQorCSAqIHNvOiBESVA3PTEgfHwgRElQOD0wID0+IEFDOTcsIERJUDc9MCAmJiBESVA4PTEgPT4gSTJTCisJICovCisJc3cgJj0gQkNTUl9TV0lUQ0hFU19ESVBfOCB8IEJDU1JfU1dJVENIRVNfRElQXzc7CisJaWYgKHN3ID09IEJDU1JfU1dJVENIRVNfRElQXzgpIHsKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIDAsIEJDU1JfUkVTRVRTX1BTQzFNVVgpOworCQlkYjEyMDBfYXVkaW9fZGV2Lm5hbWUgPSAiYXUxeHBzY19pMnMiOworCQlwcmludGsoS0VSTl9JTkZPICIgUzYuNyBPTiA6IFBTQzEgbW9kZSBJMlNcbiIpOworCX0gZWxzZSB7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19QU0MxTVVYLCAwKTsKKwkJZGIxMjAwX2F1ZGlvX2Rldi5uYW1lID0gImF1MXhwc2NfYWM5NyI7CisJCXByaW50ayhLRVJOX0lORk8gIiBTNi43IE9GRjogUFNDMSBtb2RlIEFDOTdcbiIpOworCX0KKworCS8qIEF1ZGlvIFBTQyBjbG9jayBpcyBzdXBwbGllZCBleHRlcm5hbGx5LiAoRklYTUU6IHBsYXRkYXRhISEpICovCisJX19yYXdfd3JpdGVsKFBTQ19TRUxfQ0xLX1NFUkNMSywKKwkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihQU0MxX1BIWVNfQUREUikgKyBQU0NfU0VMX09GRlNFVCk7CisJd21iKCk7CisKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgREIxMjAwX1BDMF9JTlQsCisJCQkJICAgIERCMTIwMF9QQzBfSU5TRVJUX0lOVCwKKwkJCQkgICAgLypEQjEyMDBfUEMwX1NUU0NIR19JTlQqLzAsCisJCQkJICAgIERCMTIwMF9QQzBfRUpFQ1RfSU5ULAorCQkJCSAgICAwKTsKKworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDQ0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDQ0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDQwMTAwMDAgLSAxLAorCQkJCSAgICBEQjEyMDBfUEMxX0lOVCwKKwkJCQkgICAgREIxMjAwX1BDMV9JTlNFUlRfSU5ULAorCQkJCSAgICAvKkRCMTIwMF9QQzFfU1RTQ0hHX0lOVCovMCwKKwkJCQkgICAgREIxMjAwX1BDMV9FSkVDVF9JTlQsCisJCQkJICAgIDEpOworCisJc3dhcHBlZCA9IGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiBCQ1NSX1NUQVRVU19EQjEyMDBfU1dBUEJPT1Q7CisJZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCg2NCA8PCAyMCwgMiwgc3dhcHBlZCk7CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZGIxMjAwX2RldnMsIEFSUkFZX1NJWkUoZGIxMjAwX2RldnMpKTsKK30KK2RldmljZV9pbml0Y2FsbChkYjEyMDBfZGV2X2luaXQpOworCisvKiBhdTEyMDBmYiBjYWxscyB0aGVzZTogU1RFUkJUIEVJTkVOIFRSQUdJU0NIRU4gVE9EISEhICovCitpbnQgYm9hcmRfYXUxMjAwZmJfcGFuZWwodm9pZCkKK3sKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NXSVRDSEVTKSA+PiA4KSAmIDB4MGY7Cit9CisKK2ludCBib2FyZF9hdTEyMDBmYl9wYW5lbF9pbml0KHZvaWQpCit7CisJLyogQXBwbHkgcG93ZXIgKi8KKwliY3NyX21vZChCQ1NSX0JPQVJELCAwLCBCQ1NSX0JPQVJEX0xDRFZFRSB8IEJDU1JfQk9BUkRfTENEVkREIHwKKwkJCQlCQ1NSX0JPQVJEX0xDREJMKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsX3NodXRkb3duKHZvaWQpCit7CisJLyogUmVtb3ZlIHBvd2VyICovCisJYmNzcl9tb2QoQkNTUl9CT0FSRCwgQkNTUl9CT0FSRF9MQ0RWRUUgfCBCQ1NSX0JPQVJEX0xDRFZERCB8CisJCQkgICAgIEJDU1JfQk9BUkRfTENEQkwsIDApOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTUzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3NldHVwLmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBBbGNoZW15L0FNRC9STUkgREIxMjAwIGJvYXJkIHNldHVwLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvdXRsaW5lZCBpbiB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSByb290IG9mCisgKiB0aGlzIHNvdXJjZSBhcmNoaXZlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxMjAwLmg+CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiQWxjaGVteSBEYjEyMDAiOworfQorCit2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZnJlcTAsIGNsa3NyYywgZGl2LCBwZmM7CisJdW5zaWduZWQgc2hvcnQgd2hvYW1pOworCisJYmNzcl9pbml0KERCMTIwMF9CQ1NSX1BIWVNfQUREUiwKKwkJICBEQjEyMDBfQkNTUl9QSFlTX0FERFIgKyBEQjEyMDBfQkNTUl9IRVhMRURfT0ZTKTsKKworCXdob2FtaSA9IGJjc3JfcmVhZChCQ1NSX1dIT0FNSSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteS9BTUQvUk1JIERCMTIwMCBCb2FyZCwgQ1BMRCBSZXYgJWQiCisJCSIgIEJvYXJkLUlEICVkICBEYXVnaHRlcmNhcmQgSUQgJWRcbiIsCisJCSh3aG9hbWkgPj4gNCkgJiAweGYsICh3aG9hbWkgPj4gOCkgJiAweGYsIHdob2FtaSAmIDB4Zik7CisKKwkvKiBTTUJ1cy9TUEkgb24gUFNDMCwgQXVkaW8gb24gUFNDMSAqLworCXBmYyA9IF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKilTWVNfUElORlVOQyk7CisJcGZjICY9IH4oU1lTX1BJTkZVTkNfUDBBIHwgU1lTX1BJTkZVTkNfUDBCKTsKKwlwZmMgJj0gfihTWVNfUElORlVOQ19QMUEgfCBTWVNfUElORlVOQ19QMUIgfCBTWVNfUElORlVOQ19GUzMpOworCXBmYyB8PSBTWVNfUElORlVOQ19QMUM7CS8qIFNQSSBpcyBjb25maWd1cmVkIGxhdGVyICovCisJX19yYXdfd3JpdGVsKHBmYywgKHZvaWQgX19pb21lbSAqKVNZU19QSU5GVU5DKTsKKwl3bWIoKTsKKworCS8qIENsb2NrIGNvbmZpZ3VyYXRpb25zOiBQU0MwOiB+NTBNSHogdmlhIENsa2dlbjAsIGRlcml2ZWQgZnJvbQorCSAqIENQVSBjbG9jazsgYWxsIG90aGVyIGNsb2NrIGdlbmVyYXRvcnMgb2ZmL3VudXNlZC4KKwkgKi8KKwlkaXYgPSAoZ2V0X2F1MXgwMF9zcGVlZCgpICsgMjUwMDAwMDApIC8gNTAwMDAwMDA7CisJaWYgKGRpdiAmIDEpCisJCWRpdisrOworCWRpdiA9ICgoZGl2ID4+IDEpIC0gMSkgJiAweGZmOworCisJZnJlcTAgPSBkaXYgPDwgU1lTX0ZDX0ZSRElWMF9CSVQ7CisJX19yYXdfd3JpdGVsKGZyZXEwLCAodm9pZCBfX2lvbWVtICopU1lTX0ZSRVFDVFJMMCk7CisJd21iKCk7CisJZnJlcTAgfD0gU1lTX0ZDX0ZFMDsJLyogZW5hYmxlIEYwICovCisJX19yYXdfd3JpdGVsKGZyZXEwLCAodm9pZCBfX2lvbWVtICopU1lTX0ZSRVFDVFJMMCk7CisJd21iKCk7CisKKwkvKiBwc2MwX2ludGNsayBjb21lcyAxOjEgZnJvbSBGMCAqLworCWNsa3NyYyA9IFNZU19DU19NVVhfRlEwIDw8IFNZU19DU19NRTBfQklUOworCV9fcmF3X3dyaXRlbChjbGtzcmMsICh2b2lkIF9faW9tZW0gKilTWVNfQ0xLU1JDKTsKKwl3bWIoKTsKK30KKworLyogdXNlIHRoZSBoZXhsZWRzIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNwdSBoYXMgZW50ZXJlZAorICogd2FpdCwgdGhlIGRvdHMgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgQ1BVIGlzIGN1cnJlbnRseSBpZGxlIG9yCisgKiBhY3RpdmUgKGRvdHMgb2ZmID0gc2xlZXBpbmcsIGRvdHMgb24gPSB3b3JraW5nKSBmb3IgY2FzZXMgd2hlcmUKKyAqIHRoZSBudW1iZXIgZG9lc24ndCBjaGFuZ2UgZm9yIGEgbG9uZyhlcikgcGVyaW9kIG9mIHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkIGRiMTIwMF93YWl0KHZvaWQpCit7CisJX19hc21fXygiCS5zZXQJcHVzaAkJCVxuIgorCQkiCS5zZXQJbWlwczMJCQlcbiIKKwkJIgkuc2V0CW5vcmVvcmRlcgkJXG4iCisJCSIJY2FjaGUJMHgxNCwgMCglMCkJCVxuIgorCQkiCWNhY2hlCTB4MTQsIDMyKCUwKQkJXG4iCisJCSIJY2FjaGUJMHgxNCwgNjQoJTApCQlcbiIKKwkJLyogZG90cyBvZmY6IHdlJ3JlIGFib3V0IHRvIGNhbGwgd2FpdCAqLworCQkiCWx1aQkkMjYsIDB4Yjk4MAkJXG4iCisJCSIJb3JpCSQyNywgJDAsIDMJCVxuIgorCQkiCXNiCSQyNywgMHgxOCgkMjYpCQlcbiIKKwkJIglzeW5jCQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJIgl3YWl0CQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCSIJbm9wCQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCS8qIGRvdHMgb246IHRoZXJlJ3Mgd29yayB0byBkbywgaW5jcmVtZW50IGNudHIgKi8KKwkJIglsdWkJJDI2LCAweGI5ODAJCVxuIgorCQkiCXNiCSQwLCAweDE4KCQyNikJCVxuIgorCQkiCWx1aQkkMjYsIDB4YjljMAkJXG4iCisJCSIJbGIJJDI3LCAwKCQyNikJCVxuIgorCQkiCWFkZGl1CSQyNywgJDI3LCAxCQlcbiIKKwkJIglzYgkkMjcsIDAoJDI2KQkJXG4iCisJCSIJc3luYwkJCQlcbiIKKwkJIgkuc2V0CXBvcAkJCVxuIgorCQk6IDogInIiIChkYjEyMDBfd2FpdCkpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkYjEyMDBfYXJjaF9pbml0KHZvaWQpCit7CisJLyogR1BJTzcgaXMgbG93LWxldmVsIHRyaWdnZXJlZCBDUExEIGNhc2NhZGUgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMjAwX0dQSU83X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJYmNzcl9pbml0X2lycShEQjEyMDBfSU5UX0JFR0lOLCBEQjEyMDBfSU5UX0VORCwgQVUxMjAwX0dQSU83X0lOVCk7CisKKwkvKiBkbyBub3QgYXV0b2VuYWJsZSB0aGVzZTogQ1BMRCBoYXMgYnJva2VuIGVkZ2UgaW50IGhhbmRsaW5nLAorCSAqIGFuZCB0aGUgQ0QgaGFuZGxlciBzZXR1cCByZXF1aXJlcyBtYW51YWwgZW5hYmxpbmcgdG8gd29yaworCSAqIGFyb3VuZCB0aGF0LgorCSAqLworCWlycV90b19kZXNjKERCMTIwMF9TRDBfSU5TRVJUX0lOVCktPnN0YXR1cyB8PSBJUlFfTk9BVVRPRU47CisJaXJxX3RvX2Rlc2MoREIxMjAwX1NEMF9FSkVDVF9JTlQpLT5zdGF0dXMgfD0gSVJRX05PQVVUT0VOOworCisJaWYgKGNwdV93YWl0KQorCQljcHVfd2FpdCA9IGRiMTIwMF93YWl0OworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGRiMTIwMF9hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvTWFrZWZpbGUKaW5kZXggNDMyMjQxYS4uNjEzYzBjMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEFsY2hlbXkgU2VtaWNvbmR1Y3RvciBEQkF1MXh4MCBib2FyZHMuCiAjCiAKLW9iai15IDo9IGJvYXJkX3NldHVwLm8gaXJxbWFwLm8KK29iai15IDo9IGJvYXJkX3NldHVwLm8gcGxhdGZvcm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jCmluZGV4IGRlMzBkOGUuLjUwYzliZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMKQEAgLTI5LDU4ICsyOSwxMzggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9kYjF4MDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIAorI2lmZGVmIENPTkZJR19NSVBTX0RCMTUwMAorY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0geworCVsxMl0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMTIgLSBIUFQzNzEgICAqLworCVsxM10gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQiwgQVUxNTAwX1BDSV9JTlRDLCBBVTE1MDBfUENJX0lOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAqLworfTsKIAotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7CisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCitjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7CisJWzExXSA9IHsgLTEsIEFVMTU1MF9QQ0lfSU5UQywgMHhmZiwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAxMSAtIG9uLWJvYXJkIEhQVDM3MSAqLworCVsxMl0gPSB7IC0xLCBBVTE1NTBfUENJX0lOVEIsIEFVMTU1MF9QQ0lfSU5UQywgQVUxNTUwX1BDSV9JTlRELCBBVTE1NTBfUENJX0lOVEEgfSwgLyogSURTRUwgMTIgLSBQQ0kgc2xvdCAyIChsZWZ0KSAqLworCVsxM10gPSB7IC0xLCBBVTE1NTBfUENJX0lOVEEsIEFVMTU1MF9QQ0lfSU5UQiwgQVUxNTUwX1BDSV9JTlRDLCBBVTE1NTBfUENJX0lOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAxIChyaWdodCkgKi8KK307CisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKK2NoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKKwlbMTFdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMTEgLSBtaW5pUENJICAqLworCVsxMl0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMTIgLSBTTjE3NDEgICAqLworCVsxM10gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQiwgQVUxNTAwX1BDSV9JTlRDLCBBVTE1MDBfUENJX0lOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAqLworfTsKKworLyoKKyAqIE1pY3JlbC9LZW5kaW4gNSBwb3J0IHN3aXRjaCBhdHRhY2hlZCB0byBNQUMwLAorICogTUFDMCBpcyBhc3NvY2lhdGVkIHdpdGggUEhZIGFkZHJlc3MgNSAoPT0gV0FOIHBvcnQpCisgKiBNQUMxIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IFBIWSwgc2luY2UgaXQncyBjb25uZWN0ZWQgZGlyZWN0bHkKKyAqIHRvIHRoZSBzd2l0Y2guCisgKiBubyBpbnRlcnJ1cHRzIGFyZSB1c2VkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhIGV0aDBfcGRhdGEgPSB7CisJLnBoeV9zdGF0aWNfY29uZmlnCT0gMSwKKwkucGh5X2FkZHIJCT0gNSwKK307CisKK3N0YXRpYyB2b2lkIGJvc3BvcnVzX3Bvd2VyX29mZih2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkl0J3Mgbm93IHNhZmUgdG8gdHVybiBvZmYgcG93ZXJcbiIpOworCXdoaWxlICgxKQorCQlhc20gdm9sYXRpbGUgKCIuc2V0IG1pcHMzIDsgd2FpdCA7IC5zZXQgbWlwczAiKTsKK30KIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKIAlyZXR1cm4gIkFsY2hlbXkgQm9zcG9ydXMgR2F0ZXdheSBSZWZlcmVuY2UiOwotI2Vsc2UKLQlyZXR1cm4gIkFsY2hlbXkgRGIxeDAwIjsKK30KICNlbmRpZgorCisKKyNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKK2NoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKKwlbMTFdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRELCAweGZmLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDExIC0gU01JIFZHWCAqLworCVsxMl0gPSB7IC0xLCAweGZmLCAweGZmLCBBVTE1MDBfUENJX0lOVEMsIDB4ZmYgfSwgLyogSURTRUwgMTIgLSBQTlgxMzAwICovCisJWzEzXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgQVUxNTAwX1BDSV9JTlRCLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDEzIC0gbWluaVBDSSAqLworfTsKKworc3RhdGljIHZvaWQgbWlyYWdlX3Bvd2VyX29mZih2b2lkKQoreworCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMCwgMSk7CiB9CiAKLXZvaWQgYm9hcmRfcmVzZXQodm9pZCkKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewotCS8qIEhpdCBCQ1NSLlNXX1JFU0VUW1JFU0VUXSAqLwotCWJjc3ItPnN3cmVzZXQgPSAweDAwMDA7CisJcmV0dXJuICJBbGNoZW15IE1pcmFnZSI7CiB9CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19CT1NQT1JVUykgfHwgZGVmaW5lZChDT05GSUdfTUlQU19NSVJBR0UpCitzdGF0aWMgdm9pZCBtaXBzX3NvZnRyZXNldCh2b2lkKQoreworCWFzbSB2b2xhdGlsZSAoImpyXHQlMCIgOiA6ICJyIigweGJmYzAwMDAwKSk7Cit9CisKKyNlbHNlCisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiQWxjaGVteSBEYjF4MDAiOworfQorI2VuZGlmCisKIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKLQl1MzIgcGluX2Z1bmMgPSAwOwotCWNoYXIgKmFyZ3B0cjsKKwl1bnNpZ25lZCBsb25nIGJjc3IxLCBiY3NyMjsKKwl1MzIgcGluX2Z1bmM7CiAKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KKwliY3NyMSA9IERCMTAwMF9CQ1NSX1BIWVNfQUREUjsKKwliY3NyMiA9IERCMTAwMF9CQ1NSX1BIWVNfQUREUiArIERCMTAwMF9CQ1NSX0hFWExFRF9PRlM7CisKKwlwaW5fZnVuYyA9IDA7CisKKyNpZmRlZiBDT05GSUdfTUlQU19EQjEwMDAKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTEwMDAvRGIxMDAwIEJvYXJkXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NSVBTX0RCMTUwMAorCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTUwMC9EYjE1MDAgQm9hcmRcbiIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfREIxMTAwCisJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxMTAwL0RiMTEwMCBCb2FyZFxuIik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUworCWF1MXh4eF9vdmVycmlkZV9ldGhfY2ZnKDAsICZldGgwX3BkYXRhKTsKKworCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEJvc3BvcnVzIEJvYXJkXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQorCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IE1pcmFnZSBCb2FyZFxuIik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTE1NTAvRGIxNTUwIEJvYXJkXG4iKTsKKworCWJjc3IxID0gREIxNTUwX0JDU1JfUEhZU19BRERSOworCWJjc3IyID0gREIxNTUwX0JDU1JfUEhZU19BRERSICsgREIxNTUwX0JDU1JfSEVYTEVEX09GUzsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0ZCX0FVMTEwMAotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJ2aWRlbz0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCS8qIGRlZmF1bHQgcGFuZWwgKi8KLQkJLypzdHJjYXQoYXJncHRyLCAiIHZpZGVvPWF1MTEwMGZiOnBhbmVsOlNoYXJwXzMyMHgyNDBfMTYiKTsqLwotCX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU09VTkRfQVUxWDAwKSAmJiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkvKiBhdTEwMDAgZG9lcyBub3Qgc3VwcG9ydCB2cmEsIGF1MTUwMCBhbmQgYXUxMTAwIGRvICovCi0Jc3RyY2F0KGFyZ3B0ciwgIiBhdTEwMDBfYXVkaW89dnJhIik7Ci0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jZW5kaWYKKwkvKiBpbml0aWFsaXplIGJvYXJkIHJlZ2lzdGVyIHNwYWNlICovCisJYmNzcl9pbml0KGJjc3IxLCBiY3NyMik7CiAKIAkvKiBOb3QgdmFsaWQgZm9yIEF1MTU1MCAqLwogI2lmIGRlZmluZWQoQ09ORklHX0lSREEpICYmIFwKQEAgLTg5LDExICsxNjksMTAgQEAKIAlwaW5fZnVuYyA9IGF1X3JlYWRsKFNZU19QSU5GVU5DKSB8IFNZU19QRl9JUkY7CiAJYXVfd3JpdGVsKHBpbl9mdW5jLCBTWVNfUElORlVOQyk7CiAJLyogUG93ZXIgb2ZmIHVudGlsIHRoZSBkcml2ZXIgaXMgaW4gdXNlICovCi0JYmNzci0+cmVzZXRzICY9IH5CQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSzsKLQliY3NyLT5yZXNldHMgfD0gIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9PRkY7Ci0JYXVfc3luYygpOworCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSywKKwkJCQlCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGKTsKICNlbmRpZgotCWJjc3ItPnBjbWNpYSA9IDB4MDAwMDsgLyogdHVybiBvZmYgUENNQ0lBIHBvd2VyICovCisJYmNzcl93cml0ZShCQ1NSX1BDTUNJQSwgMCk7CS8qIHR1cm4gb2ZmIFBDTUNJQSBwb3dlciAqLwogCiAJLyogRW5hYmxlIEdQSU9bMzE6MF0gaW5wdXRzICovCiAJYWxjaGVteV9ncGlvMV9pbnB1dF9lbmFibGUoKTsKQEAgLTEyMCwyNiArMTk5LDUzIEBACiAJICogYmUgcGFydCBvZiB0aGUgYXVkaW8gZHJpdmVyLgogCSAqLwogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIwOSwgMSk7CisKKwlwbV9wb3dlcl9vZmYgPSBtaXJhZ2VfcG93ZXJfb2ZmOworCV9tYWNoaW5lX2hhbHQgPSBtaXJhZ2VfcG93ZXJfb2ZmOworCV9tYWNoaW5lX3Jlc3RhcnQgPSAodm9pZCgqKShjaGFyICopKW1pcHNfc29mdHJlc2V0OwogI2VuZGlmCiAKLQlhdV9zeW5jKCk7Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjEwMDAKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTEwMDAvRGIxMDAwIEJvYXJkXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX0RCMTUwMAotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTUwMC9EYjE1MDAgQm9hcmRcbiIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMTAwCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxMTAwL0RiMTEwMCBCb2FyZFxuIik7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEJvc3BvcnVzIEJvYXJkXG4iKTsKKwlwbV9wb3dlcl9vZmYgPSBib3Nwb3J1c19wb3dlcl9vZmY7CisJX21hY2hpbmVfaGFsdCA9IGJvc3BvcnVzX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQoKikoY2hhciAqKSltaXBzX3NvZnRyZXNldDsKICNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IE1pcmFnZSBCb2FyZFxuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTE1NTAvRGIxNTUwIEJvYXJkXG4iKTsKLSNlbmRpZgorCWF1X3N5bmMoKTsKIH0KKworc3RhdGljIGludCBfX2luaXQgZGIxeDAwX2luaXRfaXJxKHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19NSVJBR0UpCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPN19JTlQsIElSUUZfVFJJR0dFUl9SSVNJTkcpOyAvKiBUUyBwZW5kb3duICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTU1MCkKKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8wX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7ICAvKiBDRDAjICovCisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgLyogQ0QxIyAqLworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgIC8qIENBUkQwIyAqLworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgIC8qIENBUkQxIyAqLworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzIxX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzAjICovCisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPMjJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMSMgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxNTAwKQorCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0QwIyAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0QxIyAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0FSRDAjICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDQVJEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8xX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzAjICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPNF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcxIyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDRDAjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDRDEjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDQVJEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU81X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENBUkQxIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU80X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzEjICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkKKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU8wX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU8zX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU8yX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENBUkQwIyAqLworCXNldF9pcnFfdHlwZShBVTEwMDBfR1BJTzVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0FSRDEjICovCisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcwIyAqLworCXNldF9pcnFfdHlwZShBVTEwMDBfR1BJTzRfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMSMgKi8KKyNlbmRpZgorCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChkYjF4MDBfaW5pdF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvaXJxbWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDkwMjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9pcnFtYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUF1MXh4eCBpcnEgbWFwIHRhYmxlCi0gKgotICogQ29weXJpZ2h0IDIwMDMgRW1iZWRkZWQgRWRnZSwgTExDCi0gKgkJZGFuQGVtYmVkZGVkZWRnZS5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZgkgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUJTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQJICBgYEFTCUlTJycgQU5EICAgQU5ZCUVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsCSAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PCUVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFCSBMSUFCTEUgRk9SIEFOWQkgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQJICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMJT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsCU9SIFBST0ZJVFM7IE9SCUJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4JIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTUwMAotY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0gewotCVsxMl0gPSB7IC0xLCBJTlRBLCBJTlRYLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDEyIC0gSFBUMzcxICAgKi8KLQlbMTNdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UQywgSU5URCB9LCAvKiBJRFNFTCAxMyAtIFBDSSBzbG90ICovCi19OwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwotY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0gewotCVsxMV0gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDExIC0gbWluaVBDSSAgKi8KLQlbMTJdID0geyAtMSwgSU5UQSwgSU5UWCwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAxMiAtIFNOMTc0MSAgICovCi0JWzEzXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVEMsIElOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAqLwotfTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCi1jaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzExXSA9IHsgLTEsIElOVEQsIElOVFgsIElOVFgsIElOVFggfSwgLyogSURTRUwgMTEgLSBTTUkgVkdYICovCi0JWzEyXSA9IHsgLTEsIElOVFgsIElOVFgsIElOVEMsIElOVFggfSwgLyogSURTRUwgMTIgLSBQTlgxMzAwICovCi0JWzEzXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVFgsIElOVFggfSwgLyogSURTRUwgMTMgLSBtaW5pUENJICovCi19OwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKLWNoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKLQlbMTFdID0geyAtMSwgSU5UQywgSU5UWCwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAxMSAtIG9uLWJvYXJkIEhQVDM3MSAqLwotCVsxMl0gPSB7IC0xLCBJTlRCLCBJTlRDLCBJTlRELCBJTlRBIH0sIC8qIElEU0VMIDEyIC0gUENJIHNsb3QgMiAobGVmdCkgKi8KLQlbMTNdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UQywgSU5URCB9LCAvKiBJRFNFTCAxMyAtIFBDSSBzbG90IDEgKHJpZ2h0KSAqLwotfTsKLSNlbmRpZgotCi0KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKLQotI2lmbmRlZiBDT05GSUdfTUlQU19NSVJBR0UKLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKLQl7IEFVMTAwMF9HUElPXzMsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgMCBJUlEjICovCi0JeyBBVTEwMDBfR1BJT181LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDEgSVJRIyAqLwotI2Vsc2UKLQl7IEFVMTAwMF9HUElPXzAsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgMCBGdWxseV9JbnRlcnRlZCMgKi8KLQl7IEFVMTAwMF9HUElPXzEsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgMCBTVFNDSEcjICovCi0JeyBBVTEwMDBfR1BJT18yLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDAgSVJRIyAqLwotCi0JeyBBVTEwMDBfR1BJT18zLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDEgRnVsbHlfSW50ZXJ0ZWQjICovCi0JeyBBVTEwMDBfR1BJT180LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDEgU1RTQ0hHIyAqLwotCXsgQVUxMDAwX0dQSU9fNSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAxIElSUSMgKi8KLSNlbmRpZgotI2Vsc2UKLQl7IEFVMTAwMF9HUElPXzcsIElSUUZfVFJJR0dFUl9SSVNJTkcsIDAgfSwgLyogdG91Y2hzY3JlZW4gcGVuIGRvd24gKi8KLSNlbmRpZgotCi19OwotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzhkNWFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogREJBdTF4eHggYm9hcmQgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYW51ZWwgTGF1c3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgorCisvKiBEQjF4eHggUENNQ0lBIGludGVycnVwdCBzb3VyY2VzOgorICogQ0QwLzEgCUdQSU8wLzMKKyAqIFNUU0NIRzAvMQlHUElPMS80CisgKiBDQVJEMC8xCUdQSU8yLzUKKyAqIERiMTU1MDoJMC8xLCAyMS8yMiwgMy81CisgKi8KKworI2RlZmluZSBEQjFYWFhfSEFTX1BDTUNJQQorI2RlZmluZSBGX1NXQVBQRUQgKGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiBCQ1NSX1NUQVRVU19EQjEwMDBfU1dBUEJPT1QpCisKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DRDAJQVUxMDAwX0dQSU8wX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX1NUU0NIRzAJQVUxMDAwX0dQSU8xX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NBUkQwCUFVMTAwMF9HUElPMl9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DRDEJQVUxMDAwX0dQSU8zX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX1NUU0NIRzEJQVUxMDAwX0dQSU80X0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NBUkQxCUFVMTAwMF9HUElPNV9JTlQKKyNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRQkweDAyMDAwMDAwIC8qIDMyTUIgKi8KKyNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEgJNCAvKiAzMi1iaXRzICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DRDAJQVUxMTAwX0dQSU8wX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX1NUU0NIRzAJQVUxMTAwX0dQSU8xX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NBUkQwCUFVMTEwMF9HUElPMl9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DRDEJQVUxMTAwX0dQSU8zX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX1NUU0NIRzEJQVUxMTAwX0dQSU80X0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NBUkQxCUFVMTEwMF9HUElPNV9JTlQKKyNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRQkweDAyMDAwMDAwIC8qIDMyTUIgKi8KKyNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEgJNCAvKiAzMi1iaXRzICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTUwMCkKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DRDAJQVUxNTAwX0dQSU8wX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX1NUU0NIRzAJQVUxNTAwX0dQSU8xX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NBUkQwCUFVMTUwMF9HUElPMl9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DRDEJQVUxNTAwX0dQSU8zX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX1NUU0NIRzEJQVUxNTAwX0dQSU80X0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NBUkQxCUFVMTUwMF9HUElPNV9JTlQKKyNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRQkweDAyMDAwMDAwIC8qIDMyTUIgKi8KKyNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEgJNCAvKiAzMi1iaXRzICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTU1MCkKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DRDAJQVUxNTUwX0dQSU8wX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX1NUU0NIRzAJQVUxNTUwX0dQSU8yMV9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMAlBVTE1NTBfR1BJTzNfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QxCUFVMTU1MF9HUElPMV9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcxCUFVMTU1MF9HUElPMjJfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0FSRDEJQVUxNTUwX0dQSU81X0lOVAorI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFCTB4MDgwMDAwMDAgLyogMTI4TUIgKi8KKyNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEgJNCAvKiAzMi1iaXRzICovCisjZWxzZQorLyogb3RoZXIgYm9hcmQ6IG5vIFBDTUNJQSAqLworI3VuZGVmIERCMVhYWF9IQVNfUENNQ0lBCisjdW5kZWYgRl9TV0FQUEVECisjZGVmaW5lIEZfU1dBUFBFRCAwCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19CT1NQT1JVUykKKyNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRQkweDAxMDAwMDAwIC8qIDE2TUIgKi8KKyNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEgJMiAvKiAxNi1iaXRzICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX01JUkFHRSkKKyNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRQkweDA0MDAwMDAwIC8qIDY0TUIgKi8KKyNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEgJNCAvKiAzMi1iaXRzICovCisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBkYjF4eHhfZGV2X2luaXQodm9pZCkKK3sKKyNpZmRlZiBEQjFYWFhfSEFTX1BDTUNJQQorCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDAwMTAwMDAgLSAxLAorCQkJCSAgICBEQjFYWFhfUENNQ0lBX0NBUkQwLAorCQkJCSAgICBEQjFYWFhfUENNQ0lBX0NEMCwKKwkJCQkgICAgLypEQjFYWFhfUENNQ0lBX1NUU0NIRzAqLzAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA0MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwNDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA0MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwNDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA0MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwNDAxMDAwMCAtIDEsCisJCQkJICAgIERCMVhYWF9QQ01DSUFfQ0FSRDEsCisJCQkJICAgIERCMVhYWF9QQ01DSUFfQ0QxLAorCQkJCSAgICAvKkRCMVhYWF9QQ01DSUFfU1RTQ0hHMSovMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMSk7CisjZW5kaWYKKwlkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKEJPQVJEX0ZMQVNIX1NJWkUsIEJPQVJEX0ZMQVNIX1dJRFRILCBGX1NXQVBQRUQpOworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKGRiMXh4eF9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMDAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMDAwL2JvYXJkX3NldHVwLmMKaW5kZXggY2QyNzM1NC4uYjUzMTFkOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEwMDAvYm9hcmRfc2V0dXAuYwpAQCAtMzEsMTEgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxMDAwLmg+CiAjaW5jbHVkZSA8cHJvbS5oPgogCi0KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKLQl7IEFVMTAwMF9HUElPXzE1LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi19OwotCisjaW5jbHVkZSAiLi4vcGxhdGZvcm0uaCIKIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7CkBAIC00NiwyNSArNDIsMTQgQEAKIHsKIH0KIAotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7Ci19Ci0KIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7CiAJdTMyIHBpbl9mdW5jLCBzdGF0aWNfY2ZnMDsKIAl1MzIgc3lzX2ZyZXFjdHJsLCBzeXNfY2xrc3JjOwogCXUzMiBwcmlkID0gcmVhZF9jMF9wcmlkKCk7CiAKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWNoYXIgKmFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgorCXN5c19mcmVxY3RybCA9IDA7CisJc3lzX2Nsa3NyYyA9IDA7CiAKIAkvKiBTZXQgQVVYIGNsb2NrIHRvIDEyIE1IeiAqIDggPSA5NiBNSHogKi8KIAlhdV93cml0ZWwoOCwgU1lTX0FVWFBMTCk7CkBAIC0xOTMsMyArMTc4LDE2IEBACiAJCWJyZWFrOwogCX0KIH0KKworc3RhdGljIGludCBfX2luaXQgcGIxMDAwX2luaXRfaXJxKHZvaWQpCit7CisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPMTVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwocGIxMDAwX2luaXRfaXJxKTsKKworc3RhdGljIGludCBfX2luaXQgcGIxMDAwX2RldmljZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGRiMXhfcmVnaXN0ZXJfbm9yZmxhc2goOCAqIDEwMjQgKiAxMDI0LCA0LCAwKTsKK30KK2RldmljZV9pbml0Y2FsbChwYjEwMDBfZGV2aWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvTWFrZWZpbGUKaW5kZXggYzU4NmRkNy4uN2UzNzU2YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEFsY2hlbXkgU2VtaWNvbmR1Y3RvciBQYjExMDAgYm9hcmQuCiAjCiAKLW9iai15IDo9IGJvYXJkX3NldHVwLm8KK29iai15IDo9IGJvYXJkX3NldHVwLm8gcGxhdGZvcm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDYxMjYzMDguLmM3YjRjYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL2JvYXJkX3NldHVwLmMKQEAgLTI5LDE5ICsyOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjExMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgogCiAjaW5jbHVkZSA8cHJvbS5oPgogCiAKLXN0cnVjdCBhdTF4eHhfaXJxbWFwIF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKLQl7IEFVMTAwMF9HUElPXzksICBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIEZ1bGx5X0luc2VydGVkIyAqLwotCXsgQVUxMDAwX0dQSU9fMTAsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgU1RTQ0hHIyAqLwotCXsgQVUxMDAwX0dQSU9fMTEsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgSVJRIyAqLwotCXsgQVUxMDAwX0dQSU9fMTMsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogRENfSVJRIyAqLwotfTsKLQotCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKIAlyZXR1cm4gIkFsY2hlbXkgUGIxMTAwIjsKQEAgLTQ5LDQzICs0MSwxNSBAQAogCiB2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCiB7Ci0JLyogSGl0IEJDU1IuUlNUX1ZERElbU09GVF9SRVNFVF0gKi8KLQlhdV93cml0ZWwoMHgwMDAwMDAwMCwgUEIxMTAwX1JTVF9WRERJKTsKLX0KLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7CisJYmNzcl93cml0ZShCQ1NSX1NZU1RFTSwgMCk7CiB9CiAKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7CiAJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKTB4YWMwMDAwMDBVTDsKLQljaGFyICphcmdwdHI7CiAKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0ZCX0FVMTEwMAotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJ2aWRlbz0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCS8qIGRlZmF1bHQgcGFuZWwgKi8KLQkJLypzdHJjYXQoYXJncHRyLCAiIHZpZGVvPWF1MTEwMGZiOnBhbmVsOlNoYXJwXzMyMHgyNDBfMTYiKTsqLwotCX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU09VTkRfQVUxWDAwKSAmJiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkvKiBhdTEwMDAgZG9lcyBub3Qgc3VwcG9ydCB2cmEsIGF1MTUwMCBhbmQgYXUxMTAwIGRvICovCi0Jc3RyY2F0KGFyZ3B0ciwgIiBhdTEwMDBfYXVkaW89dnJhIik7Ci0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jZW5kaWYKKwliY3NyX2luaXQoREIxMDAwX0JDU1JfUEhZU19BRERSLAorCQkgIERCMTAwMF9CQ1NSX1BIWVNfQUREUiArIERCMTAwMF9CQ1NSX0hFWExFRF9PRlMpOwogCiAJLyogU2V0IEFVWCBjbG9jayB0byAxMiBNSHogKiA4ID0gOTYgTUh6ICovCiAJYXVfd3JpdGVsKDgsIFNZU19BVVhQTEwpOwpAQCAtMTU1LDMgKzExOSwxNCBAQAogCQlhdV9zeW5jKCk7CiAJfQogfQorCitzdGF0aWMgaW50IF9faW5pdCBwYjExMDBfaW5pdF9pcnEodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU85X0lOVCwgIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBQQ0NEIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzEwX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFBDU1RTQ0hHIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzExX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFBDQ2FyZCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU8xM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBEQ19JUlEjICovCisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwocGIxMTAwX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzhkYzI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBQYjExMDAgYm9hcmQgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYW51ZWwgTGF1c3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworI2luY2x1ZGUgIi4uL3BsYXRmb3JtLmgiCisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTEwMF9kZXZfaW5pdCh2b2lkKQoreworCWludCBzd2FwcGVkOworCisJLyogUENNQ0lBLiBzaW5nbGUgc29ja2V0LCBpZGVudGljYWwgdG8gUGIxNTAwICovCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwMDAxMDAwMCAtIDEsCisJCQkJICAgIEFVMTEwMF9HUElPMTFfSU5ULAkgLyogY2FyZCAqLworCQkJCSAgICBBVTExMDBfR1BJTzlfSU5ULAkgLyogaW5zZXJ0ICovCisJCQkJICAgIC8qQVUxMTAwX0dQSU8xMF9JTlQqLzAsIC8qIHN0c2NoZyAqLworCQkJCSAgICAwLAkJCSAvKiBlamVjdCAqLworCQkJCSAgICAwKTsJCQkgLyogaWQgKi8KKworCXN3YXBwZWQgPSBiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgIEJDU1JfU1RBVFVTX0RCMTAwMF9TV0FQQk9PVDsKKwlkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKDY0ICogMTAyNCAqIDEwMjQsIDQsIHN3YXBwZWQpOworCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwocGIxMTAwX2Rldl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL01ha2VmaWxlCmluZGV4IGM4YzNhOTkuLjJlYTliMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9NYWtlZmlsZQpAQCAtMiw2ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IFNlbWljb25kdWN0b3IgUGIxMjAwL0RCQXUxMjAwIGJvYXJkcy4KICMKIAotb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBpcnFtYXAubyBwbGF0Zm9ybS5vCitvYmoteSA6PSBib2FyZF9zZXR1cC5vIHBsYXRmb3JtLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvYm9hcmRfc2V0dXAuYwppbmRleCA5NGU2YjdlLi4zMTg0MDYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9ib2FyZF9zZXR1cC5jCkBAIC0yNSwxMSArMjUsMjMgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLSNpbmNsdWRlIDxwcm9tLmg+Ci0jaW5jbHVkZSA8YXUxeHh4Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAKKyNpZmRlZiBDT05GSUdfTUlQU19QQjEyMDAKKyNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxMjAwLmg+CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaD4KKyNkZWZpbmUgUEIxMjAwX0lOVF9CRUdJTiBEQjEyMDBfSU5UX0JFR0lOCisjZGVmaW5lIFBCMTIwMF9JTlRfRU5EIERCMTIwMF9JTlRfRU5ECisjZW5kaWYKKworI2luY2x1ZGUgPHByb20uaD4KIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7CkBAIC0zOCwyNSArNTAsMTUgQEAKIAogdm9pZCBib2FyZF9yZXNldCh2b2lkKQogewotCWJjc3ItPnJlc2V0cyA9IDA7Ci0JYmNzci0+c3lzdGVtID0gMDsKKwliY3NyX3dyaXRlKEJDU1JfUkVTRVRTLCAwKTsKKwliY3NyX3dyaXRlKEJDU1JfU1lTVEVNLCAwKTsKIH0KIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKLQljaGFyICphcmdwdHI7Ci0KLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19GQl9BVTEyMDAKLQlzdHJjYXQoYXJncHRyLCAiIHZpZGVvPWF1MTIwMGZiOnBhbmVsOmJzIik7Ci0jZW5kaWYKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBQYjEyMDAgQm9hcmRcbiIpOworCWJjc3JfaW5pdChQQjEyMDBfQkNTUl9QSFlTX0FERFIsCisJCSAgUEIxMjAwX0JDU1JfUEhZU19BRERSICsgUEIxMjAwX0JDU1JfSEVYTEVEX09GUyk7CiAKICNpZiAwCiAJewpAQCAtODIsNyArODQsNyBAQAogCQl1MzIgcGluX2Z1bmM7CiAKIAkJLyogU2VsZWN0IFNNQnVzIGluIENQTEQgKi8KLQkJYmNzci0+cmVzZXRzICY9IH5CQ1NSX1JFU0VUU19QQ1MwTVVYOworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfUFNDME1VWCwgMCk7CiAKIAkJcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQyk7CiAJCWF1X3N5bmMoKTsKQEAgLTExNiwzOCArMTE4LDU0IEBACiAKIAkvKgogCSAqIFRoZSBQYjEyMDAgZGV2ZWxvcG1lbnQgYm9hcmQgdXNlcyBleHRlcm5hbCBNVVggZm9yIFBTQzAgdG8KLQkgKiBzdXBwb3J0IFNNQi9TUEkuIGJjc3ItPnJlc2V0cyBiaXQgMTI6IDA9U01CIDE9U1BJCisJICogc3VwcG9ydCBTTUIvU1BJLiBiY3NyX3Jlc2V0cyBiaXQgMTI6IDA9U01CIDE9U1BJCiAJICovCiAjaWZkZWYgQ09ORklHX0kyQ19BVTE1NTAKLQliY3NyLT5yZXNldHMgJj0gfkJDU1JfUkVTRVRTX1BDUzBNVVg7CisJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX1BTQzBNVVgsIDApOwogI2VuZGlmCiAJYXVfc3luYygpOwotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMjAwCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgUGIxMjAwIEJvYXJkXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IERiMTIwMCBCb2FyZFxuIik7Ci0jZW5kaWYKIH0KIAorc3RhdGljIGludCBfX2luaXQgcGIxMjAwX2luaXRfaXJxKHZvaWQpCit7CisJLyogV2UgaGF2ZSBhIHByb2JsZW0gd2l0aCBDUExEIHJldiAzLiAqLworCWlmIChCQ1NSX1dIT0FNSV9DUExEKGJjc3JfcmVhZChCQ1NSX1dIT0FNSSkpIDw9IDMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJQYjEyMDAgbXVzdCBiZSBhdCBDUExEIHJldiA0LiBQbGVhc2UgaGF2ZSBQYjEyMDBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInVwZGF0ZWQgdG8gbGF0ZXN0IHJldmlzaW9uLiBUaGlzIHNvZnR3YXJlIHdpbGxcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm5vdCB3b3JrIG9uIGFueXRoaW5nIGxlc3MgdGhhbiBDUExEIHJldiA0LlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXBhbmljKCJHYW1lIG92ZXIuICBZb3VyIHNjb3JlIGlzIDAuIik7CisJfQorCisJc2V0X2lycV90eXBlKEFVMTIwMF9HUElPN19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCWJjc3JfaW5pdF9pcnEoUEIxMjAwX0lOVF9CRUdJTiwgUEIxMjAwX0lOVF9FTkQsIEFVMTIwMF9HUElPN19JTlQpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBiMTIwMF9pbml0X2lycSk7CisKKwogaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsKHZvaWQpCiB7Ci0JQkNTUiAqYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOwotCWludCBwOwotCi0JcCA9IGJjc3ItPnN3aXRjaGVzOwotCXAgPj49IDg7Ci0JcCAmPSAweDBGOwotCXJldHVybiBwOworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU1dJVENIRVMpID4+IDgpICYgMHgwZjsKIH0KIAogaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsX2luaXQodm9pZCkKIHsKIAkvKiBBcHBseSBwb3dlciAqLwotCUJDU1IgKmJjc3IgPSAoQkNTUiAqKUJDU1JfS1NFRzFfQUREUjsKLQotCWJjc3ItPmJvYXJkIHw9IEJDU1JfQk9BUkRfTENEVkVFIHwgQkNTUl9CT0FSRF9MQ0RWREQgfCBCQ1NSX0JPQVJEX0xDREJMOworCWJjc3JfbW9kKEJDU1JfQk9BUkQsIDAsIEJDU1JfQk9BUkRfTENEVkVFIHwgQkNTUl9CT0FSRF9MQ0RWREQgfAorCQkJCUJDU1JfQk9BUkRfTENEQkwpOwogCS8qIHByaW50ayhLRVJOX0RFQlVHICJib2FyZF9hdTEyMDBmYl9wYW5lbF9pbml0KClcbiIpOyAqLwogCXJldHVybiAwOwogfQpAQCAtMTU1LDEwICsxNzMsOCBAQAogaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsX3NodXRkb3duKHZvaWQpCiB7CiAJLyogUmVtb3ZlIHBvd2VyICovCi0JQkNTUiAqYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOwotCi0JYmNzci0+Ym9hcmQgJj0gfihCQ1NSX0JPQVJEX0xDRFZFRSB8IEJDU1JfQk9BUkRfTENEVkREIHwKLQkJCSBCQ1NSX0JPQVJEX0xDREJMKTsKKwliY3NyX21vZChCQ1NSX0JPQVJELCBCQ1NSX0JPQVJEX0xDRFZFRSB8IEJDU1JfQk9BUkRfTENEVkREIHwKKwkJCSAgICAgQkNTUl9CT0FSRF9MQ0RCTCwgMCk7CiAJLyogcHJpbnRrKEtFUk5fREVCVUcgImJvYXJkX2F1MTIwMGZiX3BhbmVsX3NodXRkb3duKClcbiIpOyAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvaXJxbWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNDc0OTguLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9pcnFtYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglBdTF4eHggaXJxIG1hcCB0YWJsZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mCSB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQlMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRAkgIGBgQVMJSVMnJyBBTkQgICBBTlkJRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywJICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8JRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUJIExJQUJMRSBGT1IgQU5ZCSAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRAkgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUwlPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwJT1IgUFJPRklUUzsgT1IJQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgkgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMjAwCi0jaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oPgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjEyMDAKLSNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxMjAwLmg+Ci0jZGVmaW5lIFBCMTIwMF9JTlRfQkVHSU4gREIxMjAwX0lOVF9CRUdJTgotI2RlZmluZSBQQjEyMDBfSU5UX0VORCBEQjEyMDBfSU5UX0VORAotI2VuZGlmCi0KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKLQkvKiBUaGlzIGlzIGV4dGVybmFsIGludGVycnVwdCBjYXNjYWRlICovCi0JeyBBVTEwMDBfR1BJT183LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi19OwotCi0KLS8qCi0gKiBTdXBwb3J0IGZvciBFeHRlcm5hbCBpbnRlcnJ1cHRzIG9uIHRoZSBQYjEyMDAgRGV2ZWxvcG1lbnQgcGxhdGZvcm0uCi0gKi8KLQotc3RhdGljIHZvaWQgcGIxMjAwX2Nhc2NhZGVfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmQpCi17Ci0JdW5zaWduZWQgc2hvcnQgYmlzciA9IGJjc3ItPmludF9zdGF0dXM7Ci0KLQlmb3IgKCA7IGJpc3I7IGJpc3IgJj0gYmlzciAtIDEpCi0JCWdlbmVyaWNfaGFuZGxlX2lycShQQjEyMDBfSU5UX0JFR0lOICsgX19mZnMoYmlzcikpOwotfQotCi0vKiBOT1RFOiBib3RoIHRoZSBlbmFibGUgYW5kIG1hc2sgYml0cyBtdXN0IGJlIGNsZWFyZWQsIG90aGVyd2lzZSB0aGUKLSAqIENQTEQgZ2VuZXJhdGVzIHRvbnMgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cyAoYXQgbGVhc3Qgb24gdGhlIERCMTIwMCkuCi0gKi8KLXN0YXRpYyB2b2lkIHBiMTIwMF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQotewotCWJjc3ItPmludGNscl9tYXNrID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7Ci0JYmNzci0+aW50Y2xyID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBwYjEyMDBfbWFza2Fja19pcnEodW5zaWduZWQgaW50IGlycV9ucikKLXsKLQliY3NyLT5pbnRjbHJfbWFzayA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwotCWJjc3ItPmludGNsciA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwotCWJjc3ItPmludF9zdGF0dXMgPSAxIDw8IChpcnFfbnIgLSBQQjEyMDBfSU5UX0JFR0lOKTsJLyogYWNrICovCi0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgdm9pZCBwYjEyMDBfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQotewotCWJjc3ItPmludHNldCA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwotCWJjc3ItPmludHNldF9tYXNrID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7Ci0JYXVfc3luYygpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHBiMTIwMF9jcGxkX2lycV90eXBlID0gewotI2lmZGVmIENPTkZJR19NSVBTX1BCMTIwMAotCS5uYW1lID0gIlBiMTIwMCBFeHQiLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMjAwCi0JLm5hbWUgPSAiRGIxMjAwIEV4dCIsCi0jZW5kaWYKLQkubWFzawkJPSBwYjEyMDBfbWFza19pcnEsCi0JLm1hc2tfYWNrCT0gcGIxMjAwX21hc2thY2tfaXJxLAotCS51bm1hc2sJCT0gcGIxMjAwX3VubWFza19pcnEsCi19OwotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0KLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjEyMDAKLQkvKiBXZSBoYXZlIGEgcHJvYmxlbSB3aXRoIENQTEQgcmV2IDMuICovCi0JaWYgKCgoYmNzci0+d2hvYW1pICYgQkNTUl9XSE9BTUlfQ1BMRCkgPj4gNCkgPD0gMykgewotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIlBiMTIwMCBtdXN0IGJlIGF0IENQTEQgcmV2IDQuIFBsZWFzZSBoYXZlIFBiMTIwMFxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAidXBkYXRlZCB0byBsYXRlc3QgcmV2aXNpb24uIFRoaXMgc29mdHdhcmUgd2lsbFxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAibm90IHdvcmsgb24gYW55dGhpbmcgbGVzcyB0aGFuIENQTEQgcmV2IDQuXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcGFuaWMoIkdhbWUgb3Zlci4gIFlvdXIgc2NvcmUgaXMgMC4iKTsKLQl9Ci0jZW5kaWYKLQkvKiBtYXNrICYgZGlzYWJsZSAmIGFjayBhbGwgKi8KLQliY3NyLT5pbnRjbHJfbWFzayA9IDB4ZmZmZjsKLQliY3NyLT5pbnRjbHIgPSAweGZmZmY7Ci0JYmNzci0+aW50X3N0YXR1cyA9IDB4ZmZmZjsKLQlhdV9zeW5jKCk7Ci0KLQlmb3IgKGlycSA9IFBCMTIwMF9JTlRfQkVHSU47IGlycSA8PSBQQjEyMDBfSU5UX0VORDsgaXJxKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnBiMTIwMF9jcGxkX2lycV90eXBlLAotCQkJCQkgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7Ci0KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihBVTEwMDBfR1BJT183LCBwYjEyMDBfY2FzY2FkZV9oYW5kbGVyKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYwppbmRleCBiOTNkZmY0Li4zZWYyZGNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jCkBAIC0yNiwyNyArMjYsMzAgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgogCiBzdGF0aWMgaW50IG1tY19hY3Rpdml0eTsKIAogc3RhdGljIHZvaWQgcGIxMjAwbW1jMF9zZXRfcG93ZXIodm9pZCAqbW1jX2hvc3QsIGludCBzdGF0ZSkKIHsKIAlpZiAoc3RhdGUpCi0JCWJjc3ItPmJvYXJkIHw9IEJDU1JfQk9BUkRfU0QwUFdSOworCQliY3NyX21vZChCQ1NSX0JPQVJELCAwLCBCQ1NSX0JPQVJEX1NEMFBXUik7CiAJZWxzZQotCQliY3NyLT5ib2FyZCAmPSB+QkNTUl9CT0FSRF9TRDBQV1I7CisJCWJjc3JfbW9kKEJDU1JfQk9BUkQsIEJDU1JfQk9BUkRfU0QwUFdSLCAwKTsKIAotCWF1X3N5bmNfZGVsYXkoMSk7CisJbXNsZWVwKDEpOwogfQogCiBzdGF0aWMgaW50IHBiMTIwMG1tYzBfY2FyZF9yZWFkb25seSh2b2lkICptbWNfaG9zdCkKIHsKLQlyZXR1cm4gKGJjc3ItPnN0YXR1cyAmIEJDU1JfU1RBVFVTX1NEMFdQKSA/IDEgOiAwOworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX1NEMFdQKSA/IDEgOiAwOwogfQogCiBzdGF0aWMgaW50IHBiMTIwMG1tYzBfY2FyZF9pbnNlcnRlZCh2b2lkICptbWNfaG9zdCkKIHsKLQlyZXR1cm4gKGJjc3ItPnNpZ19zdGF0dXMgJiBCQ1NSX0lOVF9TRDBJTlNFUlQpID8gMSA6IDA7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TSUdTVEFUKSAmIEJDU1JfSU5UX1NEMElOU0VSVCkgPyAxIDogMDsKIH0KIAogc3RhdGljIHZvaWQgcGIxMjAwX21tY2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkLApAQCAtNTQsMTAgKzU3LDEwIEBACiB7CiAJaWYgKGJyaWdodG5lc3MgIT0gTEVEX09GRikgewogCQlpZiAoKyttbWNfYWN0aXZpdHkgPT0gMSkKLQkJCWJjc3ItPmRpc2tfbGVkcyAmPSB+KDEgPDwgOCk7CisJCQliY3NyX21vZChCQ1NSX0xFRFMsIEJDU1JfTEVEU19MRUQwLCAwKTsKIAl9IGVsc2UgewogCQlpZiAoLS1tbWNfYWN0aXZpdHkgPT0gMCkKLQkJCWJjc3ItPmRpc2tfbGVkcyB8PSAoMSA8PCA4KTsKKwkJCWJjc3JfbW9kKEJDU1JfTEVEUywgMCwgQkNTUl9MRURTX0xFRDApOwogCX0KIH0KIApAQCAtNjUsMjcgKzY4LDI1IEBACiAJLmJyaWdodG5lc3Nfc2V0CT0gcGIxMjAwX21tY2xlZF9zZXQsCiB9OwogCi0jaWZuZGVmIENPTkZJR19NSVBTX0RCMTIwMAogc3RhdGljIHZvaWQgcGIxMjAwbW1jMV9zZXRfcG93ZXIodm9pZCAqbW1jX2hvc3QsIGludCBzdGF0ZSkKIHsKIAlpZiAoc3RhdGUpCi0JCWJjc3ItPmJvYXJkIHw9IEJDU1JfQk9BUkRfU0QxUFdSOworCQliY3NyX21vZChCQ1NSX0JPQVJELCAwLCBCQ1NSX0JPQVJEX1NEMVBXUik7CiAJZWxzZQotCQliY3NyLT5ib2FyZCAmPSB+QkNTUl9CT0FSRF9TRDFQV1I7CisJCWJjc3JfbW9kKEJDU1JfQk9BUkQsIEJDU1JfQk9BUkRfU0QxUFdSLCAwKTsKIAotCWF1X3N5bmNfZGVsYXkoMSk7CisJbXNsZWVwKDEpOwogfQogCiBzdGF0aWMgaW50IHBiMTIwMG1tYzFfY2FyZF9yZWFkb25seSh2b2lkICptbWNfaG9zdCkKIHsKLQlyZXR1cm4gKGJjc3ItPnN0YXR1cyAmIEJDU1JfU1RBVFVTX1NEMVdQKSA/IDEgOiAwOworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX1NEMVdQKSA/IDEgOiAwOwogfQogCiBzdGF0aWMgaW50IHBiMTIwMG1tYzFfY2FyZF9pbnNlcnRlZCh2b2lkICptbWNfaG9zdCkKIHsKLQlyZXR1cm4gKGJjc3ItPnNpZ19zdGF0dXMgJiBCQ1NSX0lOVF9TRDFJTlNFUlQpID8gMSA6IDA7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TSUdTVEFUKSAmIEJDU1JfSU5UX1NEMUlOU0VSVCkgPyAxIDogMDsKIH0KLSNlbmRpZgogCiBjb25zdCBzdHJ1Y3QgYXUxeG1tY19wbGF0Zm9ybV9kYXRhIGF1MXhtbWNfcGxhdGRhdGFbMl0gPSB7CiAJWzBdID0gewpAQCAtOTUsNyArOTYsNiBAQAogCQkuY2Rfc2V0dXAJPSBOVUxMLAkJLyogdXNlIHBvbGwtdGltZXIgaW4gZHJpdmVyICovCiAJCS5sZWQJCT0gJnBiMTIwMG1tY19sZWQsCiAJfSwKLSNpZm5kZWYgQ09ORklHX01JUFNfREIxMjAwCiAJWzFdID0gewogCQkuc2V0X3Bvd2VyCT0gcGIxMjAwbW1jMV9zZXRfcG93ZXIsCiAJCS5jYXJkX2luc2VydGVkCT0gcGIxMjAwbW1jMV9jYXJkX2luc2VydGVkLApAQCAtMTAzLDcgKzEwMyw2IEBACiAJCS5jZF9zZXR1cAk9IE5VTEwsCQkvKiB1c2UgcG9sbC10aW1lciBpbiBkcml2ZXIgKi8KIAkJLmxlZAkJPSAmcGIxMjAwbW1jX2xlZCwKIAl9LAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlkZV9yZXNvdXJjZXNbXSA9IHsKQEAgLTE2OSw4ICsxNjgsMzYgQEAKIAogc3RhdGljIGludCBfX2luaXQgYm9hcmRfcmVnaXN0ZXJfZGV2aWNlcyh2b2lkKQogeworCWludCBzd2FwcGVkOworCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwMDAxMDAwMCAtIDEsCisJCQkJICAgIFBCMTIwMF9QQzBfSU5ULAorCQkJCSAgICBQQjEyMDBfUEMwX0lOU0VSVF9JTlQsCisJCQkJICAgIC8qUEIxMjAwX1BDMF9TVFNDSEdfSU5UKi8wLAorCQkJCSAgICBQQjEyMDBfUEMwX0VKRUNUX0lOVCwKKwkJCQkgICAgMCk7CisKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA4NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA4NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA4MDEwMDAwIC0gMSwKKwkJCQkgICAgUEIxMjAwX1BDMV9JTlQsCisJCQkJICAgIFBCMTIwMF9QQzFfSU5TRVJUX0lOVCwKKwkJCQkgICAgLypQQjEyMDBfUEMxX1NUU0NIR19JTlQqLzAsCisJCQkJICAgIFBCMTIwMF9QQzFfRUpFQ1RfSU5ULAorCQkJCSAgICAxKTsKKworCXN3YXBwZWQgPSBiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgIEJDU1JfU1RBVFVTX0RCMTIwMF9TV0FQQk9PVDsKKwlkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKDEyOCAqIDEwMjQgKiAxMDI0LCAyLCBzd2FwcGVkKTsKKwogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhib2FyZF9wbGF0Zm9ybV9kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKGJvYXJkX3BsYXRmb3JtX2RldmljZXMpKTsKIH0KLQotYXJjaF9pbml0Y2FsbChib2FyZF9yZWdpc3Rlcl9kZXZpY2VzKTsKK2RldmljZV9pbml0Y2FsbChib2FyZF9yZWdpc3Rlcl9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL01ha2VmaWxlCmluZGV4IDE3M2I0MTkuLmU4M2IxNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9NYWtlZmlsZQpAQCAtNSw0ICs1LDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IFNlbWljb25kdWN0b3IgUGIxNTAwIGJvYXJkLgogIwogCi1vYmoteSA6PSBib2FyZF9zZXR1cC5vCitvYmoteSA6PSBib2FyZF9zZXR1cC5vIHBsYXRmb3JtLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvYm9hcmRfc2V0dXAuYwppbmRleCBkN2E1NjU2Li5mYTk3NzBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9ib2FyZF9zZXR1cC5jCkBAIC0yOSwyMiArMjksMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxNTAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIAogCiBjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzEyXSA9IHsgLTEsIElOVEEsIElOVFgsIElOVFgsIElOVFggfSwgICAvKiBJRFNFTCAxMiAtIEhQVDM3MAkqLwotCVsxM10gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sICAgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAqLwotfTsKLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCXsgQVUxNTAwX0dQSU9fMjA0LCBJUlFGX1RSSUdHRVJfSElHSCwgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjAxLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDIsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjA1LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCisJWzEyXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgMHhmZiwgMHhmZiwgMHhmZiB9LCAgIC8qIElEU0VMIDEyIC0gSFBUMzcwCSovCisJWzEzXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgQVUxNTAwX1BDSV9JTlRCLCBBVTE1MDBfUENJX0lOVEMsIEFVMTUwMF9QQ0lfSU5URCB9LCAgIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KIH07CiAKIApAQCAtNTUsMzUgKzQ3LDE2IEBACiAKIHZvaWQgYm9hcmRfcmVzZXQodm9pZCkKIHsKLQkvKiBIaXQgQkNTUi5SU1RfVkRESVtTT0ZUX1JFU0VUXSAqLwotCWF1X3dyaXRlbCgweDAwMDAwMDAwLCBQQjE1MDBfUlNUX1ZEREkpOwotfQotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKKwliY3NyX3dyaXRlKEJDU1JfU1lTVEVNLCAwKTsKIH0KIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKIAl1MzIgcGluX2Z1bmM7CiAJdTMyIHN5c19mcmVxY3RybCwgc3lzX2Nsa3NyYzsKLQljaGFyICphcmdwdHI7CiAKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU09VTkRfQVUxWDAwKSAmJiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkvKiBhdTEwMDAgZG9lcyBub3Qgc3VwcG9ydCB2cmEsIGF1MTUwMCBhbmQgYXUxMTAwIGRvICovCi0Jc3RyY2F0KGFyZ3B0ciwgIiBhdTEwMDBfYXVkaW89dnJhIik7Ci0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jZW5kaWYKKwliY3NyX2luaXQoREIxMDAwX0JDU1JfUEhZU19BRERSLAorCQkgIERCMTAwMF9CQ1NSX1BIWVNfQUREUiArIERCMTAwMF9CQ1NSX0hFWExFRF9PRlMpOwogCiAJc3lzX2Nsa3NyYyA9IHN5c19mcmVxY3RybCA9IHBpbl9mdW5jID0gMDsKIAkvKiBTZXQgQVVYIGNsb2NrIHRvIDEyIE1IeiAqIDggPSA5NiBNSHogKi8KQEAgLTE2MywzICsxMzYsMTggQEAKIAkJYXVfc3luYygpOwogCX0KIH0KKworc3RhdGljIGludCBfX2luaXQgcGIxNTAwX2luaXRfaXJxKHZvaWQpCit7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPOV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgIC8qIENEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8xMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgLyogQ0FSRDAgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8xMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgLyogU1RTQ0hHMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDRfSU5ULCBJUlFGX1RSSUdHRVJfSElHSCk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAxX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAyX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAzX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjA1X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwocGIxNTAwX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQzYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBQYjE1MDAgYm9hcmQgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYW51ZWwgTGF1c3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgorCitzdGF0aWMgaW50IF9faW5pdCBwYjE1MDBfZGV2X2luaXQodm9pZCkKK3sKKwlpbnQgc3dhcHBlZDsKKworCS8qIFBDTUNJQS4gc2luZ2xlIHNvY2tldCwgaWRlbnRpY2FsIHRvIFBiMTUwMCAqLworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDAwMTAwMDAgLSAxLAorCQkJCSAgICBBVTE1MDBfR1BJTzExX0lOVCwJIC8qIGNhcmQgKi8KKwkJCQkgICAgQVUxNTAwX0dQSU85X0lOVCwJIC8qIGluc2VydCAqLworCQkJCSAgICAvKkFVMTUwMF9HUElPMTBfSU5UKi8wLCAvKiBzdHNjaGcgKi8KKwkJCQkgICAgMCwJCQkgLyogZWplY3QgKi8KKwkJCQkgICAgMCk7CQkJIC8qIGlkICovCisKKwlzd2FwcGVkID0gYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmICBCQ1NSX1NUQVRVU19EQjEwMDBfU1dBUEJPT1Q7CisJZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCg2NCAqIDEwMjQgKiAxMDI0LCA0LCBzd2FwcGVkKTsKKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKHBiMTUwMF9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9NYWtlZmlsZQppbmRleCBjZmY5NWJjLi45NjYxYjZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvTWFrZWZpbGUKQEAgLTUsNCArNSw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBTZW1pY29uZHVjdG9yIFBiMTU1MCBib2FyZC4KICMKIAotb2JqLXkgOj0gYm9hcmRfc2V0dXAubworb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL2JvYXJkX3NldHVwLmMKaW5kZXggYjZlOWU3ZC4uMWU4ZmIzZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvYm9hcmRfc2V0dXAuYwpAQCAtMzIsMTggKzMyLDE1IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2dwaW8uaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIAogCiBjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzEyXSA9IHsgLTEsIElOVEIsIElOVEMsIElOVEQsIElOVEEgfSwgLyogSURTRUwgMTIgLSBQQ0kgc2xvdCAyIChsZWZ0KSAgKi8KLQlbMTNdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UQywgSU5URCB9LCAvKiBJRFNFTCAxMyAtIFBDSSBzbG90IDEgKHJpZ2h0KSAqLwotfTsKLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotCXsgQVUxMDAwX0dQSU9fMCwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxMDAwX0dQSU9fMSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAorCVsxMl0gPSB7IC0xLCBBVTE1NTBfUENJX0lOVEIsIEFVMTU1MF9QQ0lfSU5UQywgQVUxNTUwX1BDSV9JTlRELCBBVTE1NTBfUENJX0lOVEEgfSwgLyogSURTRUwgMTIgLSBQQ0kgc2xvdCAyIChsZWZ0KSAgKi8KKwlbMTNdID0geyAtMSwgQVUxNTUwX1BDSV9JTlRBLCBBVTE1NTBfUENJX0lOVEIsIEFVMTU1MF9QQ0lfSU5UQywgQVUxNTUwX1BDSV9JTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgMSAocmlnaHQpICovCiB9OwogCiBjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKQEAgLTUzLDI4ICs1MCwxNyBAQAogCiB2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCiB7Ci0JLyogSGl0IEJDU1IuU1lTVEVNW1JFU0VUXSAqLwotCWF1X3dyaXRldyhhdV9yZWFkdygweEFGMDAwMDFDKSAmIH5CQ1NSX1NZU1RFTV9SRVNFVCwgMHhBRjAwMDAxQyk7Ci19Ci0KLXZvaWQgX19pbml0IGJvYXJkX2luaXRfaXJxKHZvaWQpCi17Ci0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaXJxX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCkpOworCWJjc3Jfd3JpdGUoQkNTUl9TWVNURU0sIDApOwogfQogCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewogCXUzMiBwaW5fZnVuYzsKIAotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JY2hhciAqYXJncHRyOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgorCWJjc3JfaW5pdChQQjE1NTBfQkNTUl9QSFlTX0FERFIsCisJCSAgUEIxNTUwX0JDU1JfUEhZU19BRERSICsgUEIxNTUwX0JDU1JfSEVYTEVEX09GUyk7CisKKwlhbGNoZW15X2dwaW8yX2VuYWJsZSgpOwogCiAJLyoKIAkgKiBFbmFibGUgUFNDMSBTWU5DIGZvciBBQyc5Ny4gIE5vcm1hbHkgZG9uZSBpbiBhdWRpbyBkcml2ZXIsCkBAIC04NSw4ICs3MSwyMSBAQAogCXBpbl9mdW5jIHw9IFNZU19QRl9NVVNUX0JFX1NFVCB8IFNZU19QRl9QU0MxX1MxOwogCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwogCi0JYXVfd3JpdGVsKDAsICh1MzIpYmNzciB8IDB4MTApOyAvKiB0dXJuIG9mZiBQQ01DSUEgcG93ZXIgKi8KLQlhdV9zeW5jKCk7CisJYmNzcl93cml0ZShCQ1NSX1BDTUNJQSwgMCk7CS8qIHR1cm4gb2ZmIFBDTUNJQSBwb3dlciAqLwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgUGIxNTUwIEJvYXJkXG4iKTsKIH0KKworc3RhdGljIGludCBfX2luaXQgcGIxNTUwX2luaXRfaXJxKHZvaWQpCit7CisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8yMDFfMjA1X0lOVCwgSVJRRl9UUklHR0VSX0hJR0gpOworCisJLyogZW5hYmxlIGJvdGggUENNQ0lBIGNhcmQgaXJxcyBpbiB0aGUgc2hhcmVkIGxpbmUgKi8KKwlhbGNoZW15X2dwaW8yX2VuYWJsZV9pbnQoMjAxKTsKKwlhbGNoZW15X2dwaW8yX2VuYWJsZV9pbnQoMjAyKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwYjE1NTBfaW5pdF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MTUwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL3BsYXRmb3JtLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIFBiMTU1MCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hbnVlbCBMYXVzcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxNTUwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworI2luY2x1ZGUgIi4uL3BsYXRmb3JtLmgiCisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTU1MF9kZXZfaW5pdCh2b2lkKQoreworCWludCBzd2FwcGVkOworCisJLyogUGIxNTUwLCBsaWtlIGFsbCBvdGhlcnMsIGFsc28gaGFzIHN0YXR1c2NoYW5nZSBpcnFzOyBob3dldmVyIHRoZXkncmUKKwkqIHdpcmVkIHVwIG9uIG9uZSBvZiB0aGUgQXUxNTUwJ3Mgc2hhcmVkIEdQSU8yMDFfMjA1IGxpbmUsIHdoaWNoIGFsc28KKwkqIHNlcnZpY2VzIHRoZSBQQ01DSUEgY2FyZCBpbnRlcnJ1cHRzLiAgU28gd2UgaWdub3JlIHN0YXR1c2NoYW5nZSBhbmQKKwkqIHVzZSB0aGUgR1BJTzIwMV8yMDUgZXhjbHVzaXZlbHkgZm9yIGNhcmQgaW50ZXJydXB0cywgc2luY2UgYSkgcGNtY2lhCisJKiBkcml2ZXJzIGFyZSB1c2VkIHRvIHNoYXJlZCBpcnFzIGFuZCBiKSBzdGF0dXNjaGFuZ2UgaXNuJ3QgcmVhbGx5IHVzZS0KKwkqIGZ1bCBhbnl3YXkuCisJKi8KKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgQVUxNTUwX0dQSU8yMDFfMjA1X0lOVCwKKwkJCQkgICAgQVUxNTUwX0dQSU8wX0lOVCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7CisKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA4NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA4NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDgwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA4MDEwMDAwIC0gMSwKKwkJCQkgICAgQVUxNTUwX0dQSU8yMDFfMjA1X0lOVCwKKwkJCQkgICAgQVUxNTUwX0dQSU8xX0lOVCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMSk7CisKKwlzd2FwcGVkID0gYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmIEJDU1JfU1RBVFVTX1BCMTU1MF9TV0FQQk9PVDsKKwlkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKDEyOCAqIDEwMjQgKiAxMDI0LCA0LCBzd2FwcGVkKTsKKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKHBiMTU1MF9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbGF0Zm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YTRiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIGRldm9hcmQgbWlzYyBzdHVmZi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCitzdGF0aWMgdm9pZCBkYjF4X3Bvd2VyX29mZih2b2lkKQoreworCWJjc3Jfd3JpdGUoQkNTUl9SRVNFVFMsIDApOworCWJjc3Jfd3JpdGUoQkNTUl9TWVNURU0sIEJDU1JfU1lTVEVNX1BXUk9GRiB8IEJDU1JfU1lTVEVNX1JFU0VUKTsKK30KKworc3RhdGljIHZvaWQgZGIxeF9yZXNldChjaGFyICpjKQoreworCWJjc3Jfd3JpdGUoQkNTUl9SRVNFVFMsIDApOworCWJjc3Jfd3JpdGUoQkNTUl9TWVNURU0sIDApOworfQorCitzdGF0aWMgaW50IF9faW5pdCBkYjF4X3Bvd2Vyb2ZmX3NldHVwKHZvaWQpCit7CisJaWYgKCFwbV9wb3dlcl9vZmYpCisJCXBtX3Bvd2VyX29mZiA9IGRiMXhfcG93ZXJfb2ZmOworCWlmICghX21hY2hpbmVfaGFsdCkKKwkJX21hY2hpbmVfaGFsdCA9IGRiMXhfcG93ZXJfb2ZmOworCWlmICghX21hY2hpbmVfcmVzdGFydCkKKwkJX21hY2hpbmVfcmVzdGFydCA9IGRiMXhfcmVzZXQ7CisKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwoZGIxeF9wb3dlcm9mZl9zZXR1cCk7CisKKy8qIHJlZ2lzdGVyIGEgcGNtY2lhIHNvY2tldCAqLworaW50IF9faW5pdCBkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQocGh5c19hZGRyX3QgcGNtY2lhX2F0dHJfc3RhcnQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9hdHRyX2VuZCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX21lbV9zdGFydCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX21lbV9lbmQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9pb19zdGFydCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX2lvX2VuZCwKKwkJCQkgICAgICAgaW50IGNhcmRfaXJxLAorCQkJCSAgICAgICBpbnQgY2RfaXJxLAorCQkJCSAgICAgICBpbnQgc3RzY2hnX2lycSwKKwkJCQkgICAgICAgaW50IGVqZWN0X2lycSwKKwkJCQkgICAgICAgaW50IGlkKQoreworCWludCBjbnQsIGksIHJldDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnNyOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOworCisJY250ID0gNTsKKwlpZiAoZWplY3RfaXJxKQorCQljbnQrKzsKKwlpZiAoc3RzY2hnX2lycSkKKwkJY250Kys7CisKKwlzciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBjbnQsIEdGUF9LRVJORUwpOworCWlmICghc3IpCisJCXJldHVybiAtRU5PTUVNOworCisJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImRiMXh4eF9wY21jaWEiLCBpZCk7CisJaWYgKCFwZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlzclswXS5uYW1lCT0gInBjbWNpYS1hdHRyIjsKKwlzclswXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCXNyWzBdLnN0YXJ0CT0gcGNtY2lhX2F0dHJfc3RhcnQ7CisJc3JbMF0uZW5kCT0gcGNtY2lhX2F0dHJfZW5kOworCisJc3JbMV0ubmFtZQk9ICJwY21jaWEtbWVtIjsKKwlzclsxXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCXNyWzFdLnN0YXJ0CT0gcGNtY2lhX21lbV9zdGFydDsKKwlzclsxXS5lbmQJPSBwY21jaWFfbWVtX2VuZDsKKworCXNyWzJdLm5hbWUJPSAicGNtY2lhLWlvIjsKKwlzclsyXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCXNyWzJdLnN0YXJ0CT0gcGNtY2lhX2lvX3N0YXJ0OworCXNyWzJdLmVuZAk9IHBjbWNpYV9pb19lbmQ7CisKKwlzclszXS5uYW1lCT0gImluc2VydCI7CisJc3JbM10uZmxhZ3MJPSBJT1JFU09VUkNFX0lSUTsKKwlzclszXS5zdGFydCA9IHNyWzNdLmVuZCA9IGNkX2lycTsKKworCXNyWzRdLm5hbWUJPSAiY2FyZCI7CisJc3JbNF0uZmxhZ3MJPSBJT1JFU09VUkNFX0lSUTsKKwlzcls0XS5zdGFydCA9IHNyWzRdLmVuZCA9IGNhcmRfaXJxOworCisJaSA9IDU7CisJaWYgKHN0c2NoZ19pcnEpIHsKKwkJc3JbaV0ubmFtZQk9ICJzdHNjaGciOworCQlzcltpXS5mbGFncwk9IElPUkVTT1VSQ0VfSVJROworCQlzcltpXS5zdGFydCA9IHNyW2ldLmVuZCA9IHN0c2NoZ19pcnE7CisJCWkrKzsKKwl9CisJaWYgKGVqZWN0X2lycSkgeworCQlzcltpXS5uYW1lCT0gImVqZWN0IjsKKwkJc3JbaV0uZmxhZ3MJPSBJT1JFU09VUkNFX0lSUTsKKwkJc3JbaV0uc3RhcnQgPSBzcltpXS5lbmQgPSBlamVjdF9pcnE7CisJfQorCisJcGQtPnJlc291cmNlID0gc3I7CisJcGQtPm51bV9yZXNvdXJjZXMgPSBjbnQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKK291dDoKKwlrZnJlZShzcik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBZQU1PTl9TSVpFCTB4MDAxMDAwMDAKKyNkZWZpbmUgWUFNT05fRU5WX1NJWkUJMHgwMDA0MDAwMAorCitpbnQgX19pbml0IGRiMXhfcmVnaXN0ZXJfbm9yZmxhc2godW5zaWduZWQgbG9uZyBzaXplLCBpbnQgd2lkdGgsCisJCQkJICBpbnQgc3dhcHBlZCkKK3sKKwlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhICpwZmQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQsIGk7CisKKwlpZiAoc2l6ZSA8ICg4ICogMTAyNCAqIDEwMjQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IC1FTk9NRU07CisJcGFydHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX3BhcnRpdGlvbikgKiA1LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRzKQorCQlnb3RvIG91dDsKKworCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOworCWlmICghcmVzKQorCQlnb3RvIG91dDE7CisKKwlwZmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZmQpCisJCWdvdG8gb3V0MjsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwaHlzbWFwLWZsYXNoIiwgMCk7CisJaWYgKCFwZCkKKwkJZ290byBvdXQzOworCisJLyogTk9SIGZsYXNoIGVuZHMgYXQgMHgyMDAwMDAwMCwgcmVnYXJkbGVzcyBvZiBzaXplICovCisJcmVzLT5zdGFydCA9IDB4MjAwMDAwMDAgLSBzaXplOworCXJlcy0+ZW5kID0gMHgyMDAwMDAwMCAtIDE7CisJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCisJLyogcGFydGl0aW9uIHNldHVwLiAgTW9zdCBEZXZlbGJvYXJkcyBoYXZlIGEgc3dpdGNoIHdoaWNoIGFsbG93cworCSAqIHRvIHN3YXAgdGhlIHBoeXNpY2FsIGxvY2F0aW9ucyBvZiB0aGUgMiBOT1IgZmxhc2ggYmFua3MuCisJICovCisJaSA9IDA7CisJaWYgKCFzd2FwcGVkKSB7CisJCS8qIGZpcnN0IE5PUiBjaGlwICovCisJCXBhcnRzW2ldLm9mZnNldCA9IDA7CisJCXBhcnRzW2ldLm5hbWUgPSAiVXNlciBGUyI7CisJCXBhcnRzW2ldLnNpemUgPSBzaXplIC8gMjsKKwkJaSsrOworCX0KKworCXBhcnRzW2ldLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORDsKKwlwYXJ0c1tpXS5uYW1lID0gIlVzZXIgRlMgMiI7CisJcGFydHNbaV0uc2l6ZSA9IChzaXplIC8gMikgLSAoMHgyMDAwMDAwMCAtIDB4MWZjMDAwMDApOworCWkrKzsKKworCXBhcnRzW2ldLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORDsKKwlwYXJ0c1tpXS5uYW1lID0gIllBTU9OIjsKKwlwYXJ0c1tpXS5zaXplID0gWUFNT05fU0laRTsKKwlwYXJ0c1tpXS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRTsKKwlpKys7CisKKwlwYXJ0c1tpXS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQ7CisJcGFydHNbaV0ubmFtZSA9ICJyYXcga2VybmVsIjsKKwlwYXJ0c1tpXS5zaXplID0gMHgwMDQwMDAwMCAtIFlBTU9OX1NJWkUgLSBZQU1PTl9FTlZfU0laRTsKKwlpKys7CisKKwlwYXJ0c1tpXS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQ7CisJcGFydHNbaV0ubmFtZSA9ICJZQU1PTiBFbnYiOworCXBhcnRzW2ldLnNpemUgPSBZQU1PTl9FTlZfU0laRTsKKwlwYXJ0c1tpXS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRTsKKwlpKys7CisKKwlpZiAoc3dhcHBlZCkgeworCQlwYXJ0c1tpXS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQ7CisJCXBhcnRzW2ldLm5hbWUgPSAiVXNlciBGUyI7CisJCXBhcnRzW2ldLnNpemUgPSBzaXplIC8gMjsKKwkJaSsrOworCX0KKworCXBmZC0+d2lkdGggPSB3aWR0aDsKKwlwZmQtPnBhcnRzID0gcGFydHM7CisJcGZkLT5ucl9wYXJ0cyA9IDU7CisKKwlwZC0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZmQ7CisJcGQtPnJlc291cmNlID0gcmVzOworCXBkLT5udW1fcmVzb3VyY2VzID0gMTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZCk7CitvdXQzOgorCWtmcmVlKHBmZCk7CitvdXQyOgorCWtmcmVlKHJlcyk7CitvdXQxOgorCWtmcmVlKHBhcnRzKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BsYXRmb3JtLmggYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWMwNTVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BsYXRmb3JtLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfREVWQk9BUkRfUExBVEZPUk1fSF8KKyNkZWZpbmUgX0RFVkJPQVJEX1BMQVRGT1JNX0hfCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK2ludCBfX2luaXQgZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KHBoeXNfYWRkcl90IHBjbWNpYV9hdHRyX3N0YXJ0LAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfYXR0cl9sZW4sCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9tZW1fc3RhcnQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9tZW1fZW5kLAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfaW9fc3RhcnQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9pb19lbmQsCisJCQkJICAgICAgIGludCBjYXJkX2lycSwKKwkJCQkgICAgICAgaW50IGNkX2lycSwKKwkJCQkgICAgICAgaW50IHN0c2NoZ19pcnEsCisJCQkJICAgICAgIGludCBlamVjdF9pcnEsCisJCQkJICAgICAgIGludCBpZCk7CisKK2ludCBfX2luaXQgZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCh1bnNpZ25lZCBsb25nIHNpemUsIGludCB3aWR0aCwKKwkJCQkgIGludCBzd2FwcGVkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcG0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jCmluZGV4IDYzMmY5ODYuLjRiYmQzMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgogCiAvKgogICogR2VuZXJpYyBzdXNwZW5kIHVzZXJzcGFjZSBpbnRlcmZhY2UgZm9yIEFsY2hlbXkgZGV2ZWxvcG1lbnQgYm9hcmRzLgpAQCAtMjYsNiArMjcsMjAgQEAKIAogc3RhdGljIGludCBkYjF4X3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKKwl1bnNpZ25lZCBzaG9ydCBiY3Nyc1sxNl07CisJaW50IGksIGosIGhhc2ludDsKKworCS8qIHNhdmUgQ1BMRCByZWdzICovCisJaGFzaW50ID0gYmNzcl9yZWFkKEJDU1JfV0hPQU1JKTsKKwloYXNpbnQgPSBCQ1NSX1dIT0FNSV9CT0FSRChoYXNpbnQpID49IEJDU1JfV0hPQU1JX0RCMTIwMDsKKwlqID0gKGhhc2ludCkgPyBCQ1NSX01BU0tTRVQgOiBCQ1NSX1NZU1RFTTsKKworCWZvciAoaSA9IEJDU1JfU1RBVFVTOyBpIDw9IGo7IGkrKykKKwkJYmNzcnNbaV0gPSBiY3NyX3JlYWQoaSk7CisKKwkvKiBzaHV0IG9mZiBoZXhsZWRzICovCisJYmNzcl93cml0ZShCQ1NSX0hFWENMRUFSLCAzKTsKKwogCS8qIGVuYWJsZSBHUElPIGJhc2VkIHdha2V1cCAqLwogCWFsY2hlbXlfZ3BpbzFfaW5wdXRfZW5hYmxlKCk7CiAKQEAgLTUyLDYgKzY3LDIzIEBACiAJLyogLi4uYW5kIG5vdyB0aGUgc2FuZG1hbiBjYW4gY29tZSEgKi8KIAlhdV9zbGVlcCgpOwogCisKKwkvKiByZXN0b3JlIENQTEQgcmVncyAqLworCWZvciAoaSA9IEJDU1JfU1RBVFVTOyBpIDw9IEJDU1JfU1lTVEVNOyBpKyspCisJCWJjc3Jfd3JpdGUoaSwgYmNzcnNbaV0pOworCisJLyogcmVzdG9yZSBDUExEIGludCByZWdpc3RlcnMgKi8KKwlpZiAoaGFzaW50KSB7CisJCWJjc3Jfd3JpdGUoQkNTUl9JTlRDTFIsIDB4ZmZmZik7CisJCWJjc3Jfd3JpdGUoQkNTUl9NQVNLQ0xSLCAweGZmZmYpOworCQliY3NyX3dyaXRlKEJDU1JfSU5UU1RBVCwgMHhmZmZmKTsKKwkJYmNzcl93cml0ZShCQ1NSX0lOVFNFVCwgYmNzcnNbQkNTUl9JTlRTRVRdKTsKKwkJYmNzcl93cml0ZShCQ1NSX01BU0tTRVQsIGJjc3JzW0JDU1JfTUFTS1NFVF0pOworCX0KKworCS8qIGxpZ2h0IHVwIGhleGxlZHMgKi8KKwliY3NyX3dyaXRlKEJDU1JfSEVYQ0xFQVIsIDApOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wcm9tLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcHJvbS5jCmluZGV4IDAwNDJiZDYuLmIzMGRmNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3Byb20uYwpAQCAtNjAsMyArNjAsOCBAQAogCQlzdHJpY3Rfc3RydG91bChtZW1zaXplX3N0ciwgMCwgJm1lbXNpemUpOwogCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1lbXNpemUsIEJPT1RfTUVNX1JBTSk7CiB9CisKK3ZvaWQgcHJvbV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgYykKK3sKKyAgICBhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZQppbmRleCA3YzY3YjNkLi40YTUzODE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKICMgTWFrZWZpbGUgZm9yIDRHIFN5c3RlbXMgTVRYLTEgYm9hcmQuCiAjCiAKLWxpYi15IDo9IGluaXQubyBib2FyZF9zZXR1cC5vIGlycW1hcC5vCitsaWIteSA6PSBpbml0Lm8gYm9hcmRfc2V0dXAubwogb2JqLXkgOj0gcGxhdGZvcm0ubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKaW5kZXggNDViNjFjOS4uYTlmMDMzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCkBAIC0zMCwzMiArMzAsNDMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKK2NoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQSwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwMCAtIEFkYXB0ZXJBLVNsb3QwICh0b3ApICovCisJWzFdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRCLCBBVTE1MDBfUENJX0lOVEEsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDEgLSBBZGFwdGVyQS1TbG90MSAoYm90dG9tKSAqLworCVsyXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQywgQVUxNTAwX1BDSV9JTlRELCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDAyIC0gQWRhcHRlckItU2xvdDAgKHRvcCkgKi8KKwlbM10gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEQsIEFVMTUwMF9QQ0lfSU5UQywgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwMyAtIEFkYXB0ZXJCLVNsb3QxIChib3R0b20pICovCisJWzRdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDQgLSBBZGFwdGVyQy1TbG90MCAodG9wKSAqLworCVs1XSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQiwgQVUxNTAwX1BDSV9JTlRBLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDA1IC0gQWRhcHRlckMtU2xvdDEgKGJvdHRvbSkgKi8KKwlbNl0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEMsIEFVMTUwMF9QQ0lfSU5URCwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwNiAtIEFkYXB0ZXJELVNsb3QwICh0b3ApICovCisJWzddID0geyAtMSwgQVUxNTAwX1BDSV9JTlRELCBBVTE1MDBfUENJX0lOVEMsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDcgLSBBZGFwdGVyRC1TbG90MSAoYm90dG9tKSAqLworfTsKKwogZXh0ZXJuIGludCAoKmJvYXJkX3BjaV9pZHNlbCkodW5zaWduZWQgaW50IGRldnNlbCwgaW50IGFzc2VydCk7CiBpbnQgbXR4MV9wY2lfaWRzZWwodW5zaWduZWQgaW50IGRldnNlbCwgaW50IGFzc2VydCk7CiAKLXZvaWQgYm9hcmRfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIG10eDFfcmVzZXQoY2hhciAqYykKIHsKIAkvKiBIaXQgQkNTUi5TWVNURU1fQ09OVFJPTFtTV19SU1RdICovCiAJYXVfd3JpdGVsKDB4MDAwMDAwMDAsIDB4QUUwMDAwMUMpOwogfQogCitzdGF0aWMgdm9pZCBtdHgxX3Bvd2VyX29mZih2b2lkKQoreworCXByaW50ayhLRVJOX0FMRVJUICJJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSBwb3dlclxuIik7CisJd2hpbGUgKDEpCisJCWFzbSB2b2xhdGlsZSAoIi5zZXQgbWlwczMgOyB3YWl0IDsgLnNldCBtaXBzMSIpOworfQorCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JY2hhciAqYXJncHRyOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgotCiAJYWxjaGVteV9ncGlvMl9lbmFibGUoKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKQEAgLTg2LDYgKzk3LDEwIEBACiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjExLCAxKTsJLyogZ3JlZW4gb24gKi8KIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTIsIDApOwkvKiByZWQgb2ZmICovCiAKKwlwbV9wb3dlcl9vZmYgPSBtdHgxX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9oYWx0ID0gbXR4MV9wb3dlcl9vZmY7CisJX21hY2hpbmVfcmVzdGFydCA9IG10eDFfcmVzZXQ7CisKIAlwcmludGsoS0VSTl9JTkZPICI0RyBTeXN0ZW1zIE1UWC0xIEJvYXJkXG4iKTsKIH0KIApAQCAtMTA5LDMgKzEyNCwxNSBAQAogCWF1X3N5bmNfdWRlbGF5KDEpOwogCXJldHVybiAxOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBtdHgxX2luaXRfaXJxKHZvaWQpCit7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjA0X0lOVCwgSVJRRl9UUklHR0VSX0hJR0gpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG10eDFfaW5pdF9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaW5pdC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaW5pdC5jCmluZGV4IDVlODcxYzguLmY4ZDI1NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2luaXQuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pbml0LmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKQEAgLTU4LDMgKzU5LDggQEAKIAkJc3RyaWN0X3N0cnRvdWwobWVtc2l6ZV9zdHIsIDAsICZtZW1zaXplKTsKIAlhZGRfbWVtb3J5X3JlZ2lvbigwLCBtZW1zaXplLCBCT09UX01FTV9SQU0pOwogfQorCit2b2lkIHByb21fcHV0Y2hhcih1bnNpZ25lZCBjaGFyIGMpCit7CisJYWxjaGVteV91YXJ0X3B1dGNoYXIoVUFSVDBfUEhZU19BRERSLCBjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2lycW1hcC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaXJxbWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYWIxMmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaXJxbWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglBdTF4eHggaXJxIG1hcCB0YWJsZQotICoKLSAqIENvcHlyaWdodCAyMDAzIEVtYmVkZGVkIEVkZ2UsIExMQwotICoJCWRhbkBlbWJlZGRlZGVkZ2UuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi1jaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzBdID0geyAtMSwgSU5UQSwgSU5UQSwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwMCAtIEFkYXB0ZXJBLVNsb3QwICh0b3ApICovCi0JWzFdID0geyAtMSwgSU5UQiwgSU5UQSwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwMSAtIEFkYXB0ZXJBLVNsb3QxIChib3R0b20pICovCi0JWzJdID0geyAtMSwgSU5UQywgSU5URCwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwMiAtIEFkYXB0ZXJCLVNsb3QwICh0b3ApICovCi0JWzNdID0geyAtMSwgSU5URCwgSU5UQywgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwMyAtIEFkYXB0ZXJCLVNsb3QxIChib3R0b20pICovCi0JWzRdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwNCAtIEFkYXB0ZXJDLVNsb3QwICh0b3ApICovCi0JWzVdID0geyAtMSwgSU5UQiwgSU5UQSwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwNSAtIEFkYXB0ZXJDLVNsb3QxIChib3R0b20pICovCi0JWzZdID0geyAtMSwgSU5UQywgSU5URCwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwNiAtIEFkYXB0ZXJELVNsb3QwICh0b3ApICovCi0JWzddID0geyAtMSwgSU5URCwgSU5UQywgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAwNyAtIEFkYXB0ZXJELVNsb3QxIChib3R0b20pICovCi19OwotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0gICAgICAgeyBBVTE1MDBfR1BJT18yMDQsIElSUUZfVFJJR0dFUl9ISUdILCAwIH0sCi0gICAgICAgeyBBVTE1MDBfR1BJT18yMDEsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLSAgICAgICB7IEFVMTUwMF9HUElPXzIwMiwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotICAgICAgIHsgQVUxNTAwX0dQSU9fMjAzLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0gICAgICAgeyBBVTE1MDBfR1BJT18yMDUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLX07Ci0KLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9NYWtlZmlsZQppbmRleCBkYjNjNTI2Li40ZGM4MWQ3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvTWFrZWZpbGUKQEAgLTUsNCArNSw2IEBACiAjIE1ha2VmaWxlIGZvciBNeUNhYmxlIFhYUzE1MDAgYm9hcmQuCiAjCiAKLWxpYi15IDo9IGluaXQubyBib2FyZF9zZXR1cC5vIGlycW1hcC5vCitsaWIteSA6PSBpbml0Lm8gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCisKK0VYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2JvYXJkX3NldHVwLmMKaW5kZXggNGRlMmQ0OC4uNDdiNDI5MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvYm9hcmRfc2V0dXAuYwpAQCAtMjUsMzEgKzI1LDM1IEBACiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KIAorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKLXZvaWQgYm9hcmRfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIHh4czE1MDBfcmVzZXQoY2hhciAqYykKIHsKIAkvKiBIaXQgQkNTUi5TWVNURU1fQ09OVFJPTFtTV19SU1RdICovCiAJYXVfd3JpdGVsKDB4MDAwMDAwMDAsIDB4QUUwMDAwMUMpOwogfQogCitzdGF0aWMgdm9pZCB4eHMxNTAwX3Bvd2VyX29mZih2b2lkKQoreworCXByaW50ayhLRVJOX0FMRVJUICJJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSBwb3dlclxuIik7CisJd2hpbGUgKDEpCisJCWFzbSB2b2xhdGlsZSAoIi5zZXQgbWlwczMgOyB3YWl0IDsgLnNldCBtaXBzMSIpOworfQorCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewogCXUzMiBwaW5fZnVuYzsKIAotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCi0JY2hhciAqYXJncHRyOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWFyZ3B0ciA9IHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpOwotCWlmIChhcmdwdHIgPT0gTlVMTCkgewotCQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDExNTIwMCIpOwotCX0KLSNlbmRpZgorCXBtX3Bvd2VyX29mZiA9IHh4czE1MDBfcG93ZXJfb2ZmOworCV9tYWNoaW5lX2hhbHQgPSB4eHMxNTAwX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9yZXN0YXJ0ID0geHhzMTUwMF9yZXNldDsKIAogCWFsY2hlbXlfZ3BpbzFfaW5wdXRfZW5hYmxlKCk7CiAJYWxjaGVteV9ncGlvMl9lbmFibGUoKTsKQEAgLTY4LDIyICs3Miw2IEBACiAJLyogRW5hYmxlIERUUiA9IFVTQiBwb3dlciB1cCAqLwogCWF1X3dyaXRlbCgweDAxLCBVQVJUM19BRERSICsgVUFSVF9NQ1IpOyAvKiBVQVJUX01DUl9EVFIgaXMgMHgwMT8/PyAqLwogCi0jaWZkZWYgQ09ORklHX1BDTUNJQV9YWFMxNTAwCi0JLyogR1BJTyAwLCAxLCBhbmQgNCBhcmUgaW5wdXRzICovCi0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCgwKTsKLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX2lucHV0KDEpOwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoNCk7Ci0KLQkvKiBHUElPMiAyMDgvOS8xMC8xMSBhcmUgaW5wdXRzICovCi0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCgyMDgpOwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoMjA5KTsKLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX2lucHV0KDIxMCk7Ci0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCgyMTEpOwotCi0JLyogVHVybiBvZmYgcG93ZXIgKi8KLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTQsIDApOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUENJCiAjaWYgZGVmaW5lZChfX01JUFNFQl9fKQogCWF1X3dyaXRlbCgweGYgfCAoMiA8PCA2KSB8ICgxIDw8IDQpLCBBdTE1MDBfUENJX0NGRyk7CkBAIC05MiwzICs4MCwyMyBAQAogI2VuZGlmCiAjZW5kaWYKIH0KKworc3RhdGljIGludCBfX2luaXQgeHhzMTUwMF9pbml0X2lycSh2b2lkKQoreworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwNF9JTlQsIElSUUZfVFJJR0dFUl9ISUdIKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDdfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8xX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU80X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENGIGlycSAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbCh4eHMxNTAwX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaW5pdC5jIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMKaW5kZXggNDU2ZmExNC4uMTUxMjVjMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIApAQCAtNTYsMyArNTcsOCBAQAogCQlzdHJpY3Rfc3RydG91bChtZW1zaXplX3N0ciwgMCwgJm1lbXNpemUpOwogCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1lbXNpemUsIEJPT1RfTUVNX1JBTSk7CiB9CisKK3ZvaWQgcHJvbV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaXJxbWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMGYzMDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pcnFtYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUF1MXh4eCBpcnEgbWFwIHRhYmxlCi0gKgotICogQ29weXJpZ2h0IDIwMDMgRW1iZWRkZWQgRWRnZSwgTExDCi0gKgkJZGFuQGVtYmVkZGVkZWRnZS5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZgkgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUJTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQJICBgYEFTCUlTJycgQU5EICAgQU5ZCUVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsCSAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PCUVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFCSBMSUFCTEUgRk9SIEFOWQkgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQJICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMJT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsCU9SIFBST0ZJVFM7IE9SCUJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4JIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKLQl7IEFVMTUwMF9HUElPXzIwNCwgSVJRRl9UUklHR0VSX0hJR0gsIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwMSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjAyLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDMsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwNSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjA3LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0KLQl7IEFVMTAwMF9HUElPXzAsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTAwMF9HUElPXzEsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTAwMF9HUElPXzIsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTAwMF9HUElPXzMsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTAwMF9HUElPXzQsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogQ0YgaW50ZXJydXB0ICovCi0JeyBBVTEwMDBfR1BJT181LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi19OwotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdjNDVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBYWFMxNTAwIGJvYXJkIHBsYXRmb3JtIGRldmljZSByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFudWVsIExhdXNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHh4czE1MDBfcGNtY2lhX3Jlc1tdID0geworCXsKKwkJLm5hbWUJPSAicGNtY2lhLWlvIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IFBDTUNJQV9JT19QSFlTX0FERFIsCisJCS5lbmQJPSBQQ01DSUFfSU9fUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCX0sCisJeworCQkubmFtZQk9ICJwY21jaWEtYXR0ciIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBQQ01DSUFfQVRUUl9QSFlTX0FERFIsCisJCS5lbmQJPSBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJfSwKKwl7CisJCS5uYW1lCT0gInBjbWNpYS1tZW0iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gUENNQ0lBX01FTV9QSFlTX0FERFIsCisJCS5lbmQJPSBQQ01DSUFfTUVNX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgeHhzMTUwMF9wY21jaWFfZGV2ID0geworCS5uYW1lCQk9ICJ4eHMxNTAwX3BjbWNpYSIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh4eHMxNTAwX3BjbWNpYV9yZXMpLAorCS5yZXNvdXJjZQk9IHh4czE1MDBfcGNtY2lhX3JlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp4eHMxNTAwX2RldnNbXSBfX2luaXRkYXRhID0geworCSZ4eHMxNTAwX3BjbWNpYV9kZXYsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4eHMxNTAwX2Rldl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHh4czE1MDBfZGV2cywKKwkJCQkgICAgQVJSQVlfU0laRSh4eHMxNTAwX2RldnMpKTsKK30KK2RldmljZV9pbml0Y2FsbCh4eHMxNTAwX2Rldl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvY2xvY2suYyBiL2FyY2gvbWlwcy9hcjcvY2xvY2suYwppbmRleCBjYzY1YzhlLi5mYzBlNzE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L2Nsb2NrLmMKKysrIGIvYXJjaC9taXBzL2FyNy9jbG9jay5jCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXVnZW5lIEtvbmV2IDxlamthQG9wZW53cnQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNCw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9nY2QuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9hcjcuaD4KQEAgLTk0LDEyICs5NywxNiBAQAogCXN0cnVjdCB0bmV0ZDcyMDBfY2xvY2sgdXNiOwogfTsKIAotaW50IGFyN19jcHVfY2xvY2sgPSAxNTAwMDAwMDA7Ci1FWFBPUlRfU1lNQk9MKGFyN19jcHVfY2xvY2spOwotaW50IGFyN19idXNfY2xvY2sgPSAxMjUwMDAwMDA7Ci1FWFBPUlRfU1lNQk9MKGFyN19idXNfY2xvY2spOwotaW50IGFyN19kc3BfY2xvY2s7Ci1FWFBPUlRfU1lNQk9MKGFyN19kc3BfY2xvY2spOworc3RhdGljIHN0cnVjdCBjbGsgYnVzX2NsayA9IHsKKwkucmF0ZQk9IDEyNTAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNwdV9jbGsgPSB7CisJLnJhdGUJPSAxNTAwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgdmJ1c19jbGs7CiAKIHN0YXRpYyB2b2lkIGFwcHJveGltYXRlKGludCBiYXNlLCBpbnQgdGFyZ2V0LCBpbnQgKnByZWRpdiwKIAkJCWludCAqcG9zdGRpdiwgaW50ICptdWwpCkBAIC0xODUsNyArMTkyLDcgQEAKIAkJYmFzZV9jbG9jayA9IEFSN19YVEFMX0NMT0NLOwogCQlicmVhazsKIAljYXNlIEJPT1RfUExMX1NPVVJDRV9DUFU6Ci0JCWJhc2VfY2xvY2sgPSBhcjdfY3B1X2Nsb2NrOworCQliYXNlX2Nsb2NrID0gY3B1X2Nsay5yYXRlOwogCQlicmVhazsKIAl9CiAKQEAgLTIxMiwxMSArMjE5LDExIEBACiAJdTMyICpib290Y3IsIHUzMiBmcmVxdWVuY3kpCiB7CiAJaW50IHByZWRpdiwgcG9zdGRpdiwgbXVsOwotCWludCBiYXNlX2Nsb2NrID0gYXI3X2J1c19jbG9jazsKKwlpbnQgYmFzZV9jbG9jayA9IGJ1c19jbGsucmF0ZTsKIAogCXN3aXRjaCAoKCpib290Y3IgJiAoQk9PVF9QTExfU09VUkNFX01BU0sgPDwgc2hpZnQpKSA+PiBzaGlmdCkgewogCWNhc2UgQk9PVF9QTExfU09VUkNFX0JVUzoKLQkJYmFzZV9jbG9jayA9IGFyN19idXNfY2xvY2s7CisJCWJhc2VfY2xvY2sgPSBidXNfY2xrLnJhdGU7CiAJCWJyZWFrOwogCWNhc2UgQk9PVF9QTExfU09VUkNFX1JFRjoKIAkJYmFzZV9jbG9jayA9IEFSN19SRUZfQ0xPQ0s7CkBAIC0yMjUsNyArMjMyLDcgQEAKIAkJYmFzZV9jbG9jayA9IEFSN19YVEFMX0NMT0NLOwogCQlicmVhazsKIAljYXNlIEJPT1RfUExMX1NPVVJDRV9DUFU6Ci0JCWJhc2VfY2xvY2sgPSBhcjdfY3B1X2Nsb2NrOworCQliYXNlX2Nsb2NrID0gY3B1X2Nsay5yYXRlOwogCQlicmVhazsKIAl9CiAKQEAgLTI0NywxOCArMjU0LDE4IEBACiAJCQkJCWlvcmVtYXBfbm9jYWNoZShVUjhfUkVHU19DTE9DS1MsCiAJCQkJCXNpemVvZihzdHJ1Y3QgdG5ldGQ3MzAwX2Nsb2NrcykpOwogCi0JYXI3X2J1c19jbG9jayA9IHRuZXRkNzMwMF9nZXRfY2xvY2soQlVTX1BMTF9TT1VSQ0VfU0hJRlQsCisJYnVzX2Nsay5yYXRlID0gdG5ldGQ3MzAwX2dldF9jbG9jayhCVVNfUExMX1NPVVJDRV9TSElGVCwKIAkJJmNsb2Nrcy0+YnVzLCBib290Y3IsIEFSN19BRkVfQ0xPQ0spOwogCiAJaWYgKCpib290Y3IgJiBCT09UX1BMTF9BU1lOQ19NT0RFKQotCQlhcjdfY3B1X2Nsb2NrID0gdG5ldGQ3MzAwX2dldF9jbG9jayhDUFVfUExMX1NPVVJDRV9TSElGVCwKKwkJY3B1X2Nsay5yYXRlID0gdG5ldGQ3MzAwX2dldF9jbG9jayhDUFVfUExMX1NPVVJDRV9TSElGVCwKIAkJCSZjbG9ja3MtPmNwdSwgYm9vdGNyLCBBUjdfQUZFX0NMT0NLKTsKIAllbHNlCi0JCWFyN19jcHVfY2xvY2sgPSBhcjdfYnVzX2Nsb2NrOworCQljcHVfY2xrLnJhdGUgPSBidXNfY2xrLnJhdGU7CiAKLQlpZiAoYXI3X2RzcF9jbG9jayA9PSAyNTAwMDAwMDApCisJaWYgKGRzcF9jbGsucmF0ZSA9PSAyNTAwMDAwMDApCiAJCXRuZXRkNzMwMF9zZXRfY2xvY2soRFNQX1BMTF9TT1VSQ0VfU0hJRlQsICZjbG9ja3MtPmRzcCwKLQkJCWJvb3RjciwgYXI3X2RzcF9jbG9jayk7CisJCQlib290Y3IsIGRzcF9jbGsucmF0ZSk7CiAKIAlpb3VubWFwKGNsb2Nrcyk7CiAJaW91bm1hcChib290Y3IpOwpAQCAtMzQzLDIwICszNTAsMjAgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tzOiBTZXR0aW5nIERTUCBjbG9ja1xuIik7CiAJCWNhbGN1bGF0ZShkc3BfYmFzZSwgVE5FVEQ3MjAwX0RFRl9EU1BfQ0xLLAogCQkJJmRzcF9wcmVkaXYsICZkc3BfcG9zdGRpdiwgJmRzcF9tdWwpOwotCQlhcjdfYnVzX2Nsb2NrID0KKwkJYnVzX2Nsay5yYXRlID0KIAkJCSgoZHNwX2Jhc2UgLyBkc3BfcHJlZGl2KSAqIGRzcF9tdWwpIC8gZHNwX3Bvc3RkaXY7CiAJCXRuZXRkNzIwMF9zZXRfY2xvY2soZHNwX2Jhc2UsICZjbG9ja3MtPmRzcCwKIAkJCWRzcF9wcmVkaXYsIGRzcF9wb3N0ZGl2ICogMiwgZHNwX3Bvc3RkaXYsIGRzcF9tdWwgKiAyLAotCQkJYXI3X2J1c19jbG9jayk7CisJCQlidXNfY2xrLnJhdGUpOwogCiAJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU2V0dGluZyBDUFUgY2xvY2tcbiIpOwogCQljYWxjdWxhdGUoY3B1X2Jhc2UsIFRORVRENzIwMF9ERUZfQ1BVX0NMSywgJmNwdV9wcmVkaXYsCiAJCQkmY3B1X3Bvc3RkaXYsICZjcHVfbXVsKTsKLQkJYXI3X2NwdV9jbG9jayA9CisJCWNwdV9jbGsucmF0ZSA9CiAJCQkoKGNwdV9iYXNlIC8gY3B1X3ByZWRpdikgKiBjcHVfbXVsKSAvIGNwdV9wb3N0ZGl2OwogCQl0bmV0ZDcyMDBfc2V0X2Nsb2NrKGNwdV9iYXNlLCAmY2xvY2tzLT5jcHUsCiAJCQljcHVfcHJlZGl2LCBjcHVfcG9zdGRpdiwgLTEsIGNwdV9tdWwsCi0JCQlhcjdfY3B1X2Nsb2NrKTsKKwkJCWNwdV9jbGsucmF0ZSk7CiAKIAl9IGVsc2UKIAkJaWYgKCpib290Y3IgJiBCT09UX1BMTF8yVE8xX01PREUpIHsKQEAgLTM2NSw0OCArMzcyLDkwIEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJDbG9ja3M6IFNldHRpbmcgQ1BVIGNsb2NrXG4iKTsKIAkJCWNhbGN1bGF0ZShjcHVfYmFzZSwgVE5FVEQ3MjAwX0RFRl9DUFVfQ0xLLCAmY3B1X3ByZWRpdiwKIAkJCQkmY3B1X3Bvc3RkaXYsICZjcHVfbXVsKTsKLQkJCWFyN19jcHVfY2xvY2sgPSAoKGNwdV9iYXNlIC8gY3B1X3ByZWRpdikgKiBjcHVfbXVsKQorCQkJY3B1X2Nsay5yYXRlID0gKChjcHVfYmFzZSAvIGNwdV9wcmVkaXYpICogY3B1X211bCkKIAkJCQkJCQkJLyBjcHVfcG9zdGRpdjsKIAkJCXRuZXRkNzIwMF9zZXRfY2xvY2soY3B1X2Jhc2UsICZjbG9ja3MtPmNwdSwKIAkJCQljcHVfcHJlZGl2LCBjcHVfcG9zdGRpdiwgLTEsIGNwdV9tdWwsCi0JCQkJYXI3X2NwdV9jbG9jayk7CisJCQkJY3B1X2Nsay5yYXRlKTsKIAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tzOiBTZXR0aW5nIERTUCBjbG9ja1xuIik7CiAJCQljYWxjdWxhdGUoZHNwX2Jhc2UsIFRORVRENzIwMF9ERUZfRFNQX0NMSywgJmRzcF9wcmVkaXYsCiAJCQkJJmRzcF9wb3N0ZGl2LCAmZHNwX211bCk7Ci0JCQlhcjdfYnVzX2Nsb2NrID0gYXI3X2NwdV9jbG9jayAvIDI7CisJCQlidXNfY2xrLnJhdGUgPSBjcHVfY2xrLnJhdGUgLyAyOwogCQkJdG5ldGQ3MjAwX3NldF9jbG9jayhkc3BfYmFzZSwgJmNsb2Nrcy0+ZHNwLAogCQkJCWRzcF9wcmVkaXYsIGRzcF9wb3N0ZGl2ICogMiwgZHNwX3Bvc3RkaXYsCi0JCQkJZHNwX211bCAqIDIsIGFyN19idXNfY2xvY2spOworCQkJCWRzcF9tdWwgKiAyLCBidXNfY2xrLnJhdGUpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tzOiBTeW5jIDE6MSBtb2RlXG4iKTsKIAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tzOiBTZXR0aW5nIERTUCBjbG9ja1xuIik7CiAJCQljYWxjdWxhdGUoZHNwX2Jhc2UsIFRORVRENzIwMF9ERUZfRFNQX0NMSywgJmRzcF9wcmVkaXYsCiAJCQkJJmRzcF9wb3N0ZGl2LCAmZHNwX211bCk7Ci0JCQlhcjdfYnVzX2Nsb2NrID0gKChkc3BfYmFzZSAvIGRzcF9wcmVkaXYpICogZHNwX211bCkKKwkJCWJ1c19jbGsucmF0ZSA9ICgoZHNwX2Jhc2UgLyBkc3BfcHJlZGl2KSAqIGRzcF9tdWwpCiAJCQkJCQkJCS8gZHNwX3Bvc3RkaXY7CiAJCQl0bmV0ZDcyMDBfc2V0X2Nsb2NrKGRzcF9iYXNlLCAmY2xvY2tzLT5kc3AsCiAJCQkJZHNwX3ByZWRpdiwgZHNwX3Bvc3RkaXYgKiAyLCBkc3BfcG9zdGRpdiwKLQkJCQlkc3BfbXVsICogMiwgYXI3X2J1c19jbG9jayk7CisJCQkJZHNwX211bCAqIDIsIGJ1c19jbGsucmF0ZSk7CiAKLQkJCWFyN19jcHVfY2xvY2sgPSBhcjdfYnVzX2Nsb2NrOworCQkJY3B1X2Nsay5yYXRlID0gYnVzX2Nsay5yYXRlOwogCQl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJDbG9ja3M6IFNldHRpbmcgVVNCIGNsb2NrXG4iKTsKLQl1c2JfYmFzZSA9IGFyN19idXNfY2xvY2s7CisJdXNiX2Jhc2UgPSBidXNfY2xrLnJhdGU7CiAJY2FsY3VsYXRlKHVzYl9iYXNlLCBUTkVURDcyMDBfREVGX1VTQl9DTEssICZ1c2JfcHJlZGl2LAogCQkmdXNiX3Bvc3RkaXYsICZ1c2JfbXVsKTsKIAl0bmV0ZDcyMDBfc2V0X2Nsb2NrKHVzYl9iYXNlLCAmY2xvY2tzLT51c2IsCiAJCXVzYl9wcmVkaXYsIHVzYl9wb3N0ZGl2LCAtMSwgdXNiX211bCwKIAkJVE5FVEQ3MjAwX0RFRl9VU0JfQ0xLKTsKIAotCWFyN19kc3BfY2xvY2sgPSBhcjdfY3B1X2Nsb2NrOworCWRzcF9jbGsucmF0ZSA9IGNwdV9jbGsucmF0ZTsKIAogCWlvdW5tYXAoY2xvY2tzKTsKIAlpb3VubWFwKGJvb3Rjcik7CiB9CiAKKy8qCisgKiBMaW51eCBjbG9jayBBUEkKKyAqLworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlpZiAoIXN0cmNtcChpZCwgImJ1cyIpKQorCQlyZXR1cm4gJmJ1c19jbGs7CisJLyogY3BtYWMgYW5kIHZidXMgc2hhcmUgdGhlIHNhbWUgcmF0ZSAqLworCWlmICghc3RyY21wKGlkLCAiY3BtYWMiKSkKKwkJcmV0dXJuICZ2YnVzX2NsazsKKwlpZiAoIXN0cmNtcChpZCwgImNwdSIpKQorCQlyZXR1cm4gJmNwdV9jbGs7CisJaWYgKCFzdHJjbXAoaWQsICJkc3AiKSk7CisJCXJldHVybiAmZHNwX2NsazsKKwlpZiAoIXN0cmNtcChpZCwgInZidXMiKSkKKwkJcmV0dXJuICZ2YnVzX2NsazsKKwlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworCiBpbnQgX19pbml0IGFyN19pbml0X2Nsb2Nrcyh2b2lkKQogewogCXN3aXRjaCAoYXI3X2NoaXBfaWQoKSkgewpAQCAtNDE1LDEyICs0NjQsMTQgQEAKIAkJdG5ldGQ3MjAwX2luaXRfY2xvY2tzKCk7CiAJCWJyZWFrOwogCWNhc2UgQVI3X0NISVBfNzMwMDoKLQkJYXI3X2RzcF9jbG9jayA9IHRuZXRkNzMwMF9kc3BfY2xvY2soKTsKKwkJZHNwX2Nsay5yYXRlID0gdG5ldGQ3MzAwX2RzcF9jbG9jaygpOwogCQl0bmV0ZDczMDBfaW5pdF9jbG9ja3MoKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQorCS8qIGFkanVzdCB2YnVzIGNsb2NrIHJhdGUgKi8KKwl2YnVzX2Nsay5yYXRlID0gYnVzX2Nsay5yYXRlIC8gMjsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9ncGlvLmMgYi9hcmNoL21pcHMvYXI3L2dwaW8uYwppbmRleCA3NGUxNGEzLi5jMzJmYmI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L2dwaW8uYworKysgYi9hcmNoL21pcHMvYXI3L2dwaW8uYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEV1Z2VuZSBLb25ldiA8ZWprYUBvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTgsMzEgKzE5LDExMyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvZ3Bpby5oPgogCi1zdGF0aWMgY29uc3QgY2hhciAqYXI3X2dwaW9fbGlzdFtBUjdfR1BJT19NQVhdOworc3RydWN0IGFyN19ncGlvX2NoaXAgeworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisJc3RydWN0IGdwaW9fY2hpcAljaGlwOworfTsKIAotaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKK3N0YXRpYyBpbnQgYXI3X2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGdwaW8pCiB7Ci0JaWYgKGdwaW8gPj0gQVI3X0dQSU9fTUFYKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgYXI3X2dwaW9fY2hpcCAqZ3BjaCA9CisJCQkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhcjdfZ3Bpb19jaGlwLCBjaGlwKTsKKwl2b2lkIF9faW9tZW0gKmdwaW9faW4gPSBncGNoLT5yZWdzICsgQVI3X0dQSU9fSU5QVVQ7CiAKLQlpZiAoYXI3X2dwaW9fbGlzdFtncGlvXSkKLQkJcmV0dXJuIC1FQlVTWTsKKwlyZXR1cm4gcmVhZGwoZ3Bpb19pbikgJiAoMSA8PCBncGlvKTsKK30KIAotCWlmIChsYWJlbCkKLQkJYXI3X2dwaW9fbGlzdFtncGlvXSA9IGxhYmVsOwotCWVsc2UKLQkJYXI3X2dwaW9fbGlzdFtncGlvXSA9ICJidXN5IjsKK3N0YXRpYyB2b2lkIGFyN19ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYXI3X2dwaW9fY2hpcCAqZ3BjaCA9CisJCQkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhcjdfZ3Bpb19jaGlwLCBjaGlwKTsKKwl2b2lkIF9faW9tZW0gKmdwaW9fb3V0ID0gZ3BjaC0+cmVncyArIEFSN19HUElPX09VVFBVVDsKKwl1bnNpZ25lZCB0bXA7CisKKwl0bXAgPSByZWFkbChncGlvX291dCkgJiB+KDEgPDwgZ3Bpbyk7CisJaWYgKHZhbHVlKQorCQl0bXAgfD0gMSA8PCBncGlvOworCXdyaXRlbCh0bXAsIGdwaW9fb3V0KTsKK30KKworc3RhdGljIGludCBhcjdfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgYXI3X2dwaW9fY2hpcCAqZ3BjaCA9CisJCQkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhcjdfZ3Bpb19jaGlwLCBjaGlwKTsKKwl2b2lkIF9faW9tZW0gKmdwaW9fZGlyID0gZ3BjaC0+cmVncyArIEFSN19HUElPX0RJUjsKKworCXdyaXRlbChyZWFkbChncGlvX2RpcikgfCAoMSA8PCBncGlvKSwgZ3Bpb19kaXIpOwogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fcmVxdWVzdCk7CiAKLXZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IGFyN19ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJdW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCUJVR19PTighYXI3X2dwaW9fbGlzdFtncGlvXSk7Ci0JYXI3X2dwaW9fbGlzdFtncGlvXSA9IE5VTEw7CisJc3RydWN0IGFyN19ncGlvX2NoaXAgKmdwY2ggPQorCQkJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXI3X2dwaW9fY2hpcCwgY2hpcCk7CisJdm9pZCBfX2lvbWVtICpncGlvX2RpciA9IGdwY2gtPnJlZ3MgKyBBUjdfR1BJT19ESVI7CisKKwlhcjdfZ3Bpb19zZXRfdmFsdWUoY2hpcCwgZ3BpbywgdmFsdWUpOworCXdyaXRlbChyZWFkbChncGlvX2RpcikgJiB+KDEgPDwgZ3BpbyksIGdwaW9fZGlyKTsKKworCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChncGlvX2ZyZWUpOworCitzdGF0aWMgc3RydWN0IGFyN19ncGlvX2NoaXAgYXI3X2dwaW9fY2hpcCA9IHsKKwkuY2hpcCA9IHsKKwkJLmxhYmVsCQkJPSAiYXI3LWdwaW8iLAorCQkuZGlyZWN0aW9uX2lucHV0CT0gYXI3X2dwaW9fZGlyZWN0aW9uX2lucHV0LAorCQkuZGlyZWN0aW9uX291dHB1dAk9IGFyN19ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCisJCS5zZXQJCQk9IGFyN19ncGlvX3NldF92YWx1ZSwKKwkJLmdldAkJCT0gYXI3X2dwaW9fZ2V0X3ZhbHVlLAorCQkuYmFzZQkJCT0gMCwKKwkJLm5ncGlvCQkJPSBBUjdfR1BJT19NQVgsCisJfQorfTsKKworaW50IGFyN19ncGlvX2VuYWJsZSh1bnNpZ25lZCBncGlvKQoreworCXZvaWQgX19pb21lbSAqZ3Bpb19lbiA9IGFyN19ncGlvX2NoaXAucmVncyArIEFSN19HUElPX0VOQUJMRTsKKworCXdyaXRlbChyZWFkbChncGlvX2VuKSB8ICgxIDw8IGdwaW8pLCBncGlvX2VuKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChhcjdfZ3Bpb19lbmFibGUpOworCitpbnQgYXI3X2dwaW9fZGlzYWJsZSh1bnNpZ25lZCBncGlvKQoreworCXZvaWQgX19pb21lbSAqZ3Bpb19lbiA9IGFyN19ncGlvX2NoaXAucmVncyArIEFSN19HUElPX0VOQUJMRTsKKworCXdyaXRlbChyZWFkbChncGlvX2VuKSAmIH4oMSA8PCBncGlvKSwgZ3Bpb19lbik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYXI3X2dwaW9fZGlzYWJsZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGFyN19ncGlvX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJYXI3X2dwaW9fY2hpcC5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0dQSU8sCisJCQkJCUFSN19SRUdTX0dQSU8gKyAweDEwKTsKKworCWlmICghYXI3X2dwaW9fY2hpcC5yZWdzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYXI3LWdwaW86IGZhaWxlZCB0byBpb3JlbWFwIHJlZ3NcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBncGlvY2hpcF9hZGQoJmFyN19ncGlvX2NoaXAuY2hpcCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImFyNy1ncGlvOiBmYWlsZWQgdG8gYWRkIGdwaW9jaGlwXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiYXI3LWdwaW86IHJlZ2lzdGVyZWQgJWQgR1BJT3NcbiIsCisJCQkJYXI3X2dwaW9fY2hpcC5jaGlwLm5ncGlvKTsKKwlyZXR1cm4gcmV0OworfQorYXJjaF9pbml0Y2FsbChhcjdfZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvbWVtb3J5LmMgYi9hcmNoL21pcHMvYXI3L21lbW9yeS5jCmluZGV4IDY5NmM3MjMuLjI4YWJmZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL2FyNy9tZW1vcnkuYwpAQCAtNjIsOCArNjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGFnZXM7CiAKIAlwYWdlcyA9IG1lbXNpemUoKSA+PiBQQUdFX1NISUZUOwotCWFkZF9tZW1vcnlfcmVnaW9uKFBIWVNfT0ZGU0VULCBwYWdlcyA8PCBQQUdFX1NISUZULAotCQkJICBCT09UX01FTV9SQU0pOworCWFkZF9tZW1vcnlfcmVnaW9uKFBIWVNfT0ZGU0VULCBwYWdlcyA8PCBQQUdFX1NISUZULCBCT09UX01FTV9SQU0pOwogfQogCiB2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwppbmRleCBmNzBhMTBhLi4yNDZkZjdhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCkBAIC0zNCw0NSArMzQsNTAgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeV9maXhlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvcHJvbS5oPgogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZMWU5RIEJ1cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgcGxhdF92bHlucV9kYXRhIHsKIAlzdHJ1Y3QgcGxhdF92bHlucV9vcHMgb3BzOwogCWludCBncGlvX2JpdDsKIAlpbnQgcmVzZXRfYml0OwogfTsKIAotCiBzdGF0aWMgaW50IHZseW5xX29uKHN0cnVjdCB2bHlucV9kZXZpY2UgKmRldikKIHsKLQlpbnQgcmVzdWx0OworCWludCByZXQ7CiAJc3RydWN0IHBsYXRfdmx5bnFfZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JcmVzdWx0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX2JpdCwgInZseW5xIik7Ci0JaWYgKHJlc3VsdCkKKwlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fYml0LCAidmx5bnEiKTsKKwlpZiAocmV0KQogCQlnb3RvIG91dDsKIAogCWFyN19kZXZpY2VfcmVzZXQocGRhdGEtPnJlc2V0X2JpdCk7CiAKLQlyZXN1bHQgPSBhcjdfZ3Bpb19kaXNhYmxlKHBkYXRhLT5ncGlvX2JpdCk7Ci0JaWYgKHJlc3VsdCkKKwlyZXQgPSBhcjdfZ3Bpb19kaXNhYmxlKHBkYXRhLT5ncGlvX2JpdCk7CisJaWYgKHJldCkKIAkJZ290byBvdXRfZW5hYmxlZDsKIAotCXJlc3VsdCA9IGFyN19ncGlvX2VuYWJsZShwZGF0YS0+Z3Bpb19iaXQpOwotCWlmIChyZXN1bHQpCisJcmV0ID0gYXI3X2dwaW9fZW5hYmxlKHBkYXRhLT5ncGlvX2JpdCk7CisJaWYgKHJldCkKIAkJZ290byBvdXRfZW5hYmxlZDsKIAotCXJlc3VsdCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19iaXQsIDApOwotCWlmIChyZXN1bHQpCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2JpdCwgMCk7CisJaWYgKHJldCkKIAkJZ290byBvdXRfZ3Bpb19lbmFibGVkOwogCiAJbXNsZWVwKDUwKTsKIAogCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5ncGlvX2JpdCwgMSk7CisKIAltc2xlZXAoNTApOwogCiAJcmV0dXJuIDA7CkBAIC04MywzNTIgKzg4LDIwOCBAQAogCWFyN19kZXZpY2VfZGlzYWJsZShwZGF0YS0+cmVzZXRfYml0KTsKIAlncGlvX2ZyZWUocGRhdGEtPmdwaW9fYml0KTsKIG91dDoKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHZseW5xX29mZihzdHJ1Y3Qgdmx5bnFfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRfdmx5bnFfZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCiAJYXI3X2dwaW9fZGlzYWJsZShwZGF0YS0+Z3Bpb19iaXQpOwogCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19iaXQpOwogCWFyN19kZXZpY2VfZGlzYWJsZShwZGF0YS0+cmVzZXRfYml0KTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaHlzbWFwX2ZsYXNoX3Jlc291cmNlID0gewotCS5uYW1lID0gIm1lbSIsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JLnN0YXJ0ID0gMHgxMDAwMDAwMCwKLQkuZW5kID0gMHgxMDdmZmZmZiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3BtYWNfbG93X3Jlc1tdID0gewotCXsKLQkJLm5hbWUgPSAicmVncyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSBBUjdfUkVHU19NQUMwLAotCQkuZW5kID0gQVI3X1JFR1NfTUFDMCArIDB4N2ZmLAotCX0sCi0JewotCQkubmFtZSA9ICJpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gMjcsCi0JCS5lbmQgPSAyNywKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjcG1hY19oaWdoX3Jlc1tdID0gewotCXsKLQkJLm5hbWUgPSAicmVncyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSBBUjdfUkVHU19NQUMxLAotCQkuZW5kID0gQVI3X1JFR1NfTUFDMSArIDB4N2ZmLAotCX0sCi0JewotCQkubmFtZSA9ICJpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gNDEsCi0JCS5lbmQgPSA0MSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2bHlucV9sb3dfcmVzW10gPSB7CiAJewotCQkubmFtZSA9ICJyZWdzIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IEFSN19SRUdTX1ZMWU5RMCwKLQkJLmVuZCA9IEFSN19SRUdTX1ZMWU5RMCArIDB4ZmYsCisJCS5uYW1lCT0gInJlZ3MiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gQVI3X1JFR1NfVkxZTlEwLAorCQkuZW5kCT0gQVI3X1JFR1NfVkxZTlEwICsgMHhmZiwKIAl9LAogCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDI5LAotCQkuZW5kID0gMjksCisJCS5uYW1lCT0gImlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSAyOSwKKwkJLmVuZAk9IDI5LAogCX0sCiAJewotCQkubmFtZSA9ICJtZW0iLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gMHgwNDAwMDAwMCwKLQkJLmVuZCA9IDB4MDRmZmZmZmYsCisJCS5uYW1lCT0gIm1lbSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSAweDA0MDAwMDAwLAorCQkuZW5kCT0gMHgwNGZmZmZmZiwKIAl9LAogCXsKLQkJLm5hbWUgPSAiZGV2aXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDgwLAotCQkuZW5kID0gMTExLAorCQkubmFtZQk9ICJkZXZpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gODAsCisJCS5lbmQJPSAxMTEsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugdmx5bnFfaGlnaF9yZXNbXSA9IHsKIAl7Ci0JCS5uYW1lID0gInJlZ3MiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gQVI3X1JFR1NfVkxZTlExLAotCQkuZW5kID0gQVI3X1JFR1NfVkxZTlExICsgMHhmZiwKKwkJLm5hbWUJPSAicmVncyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBBUjdfUkVHU19WTFlOUTEsCisJCS5lbmQJPSBBUjdfUkVHU19WTFlOUTEgKyAweGZmLAogCX0sCiAJewotCQkubmFtZSA9ICJpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gMzMsCi0JCS5lbmQgPSAzMywKKwkJLm5hbWUJPSAiaXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDMzLAorCQkuZW5kCT0gMzMsCiAJfSwKIAl7Ci0JCS5uYW1lID0gIm1lbSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSAweDBjMDAwMDAwLAotCQkuZW5kID0gMHgwY2ZmZmZmZiwKKwkJLm5hbWUJPSAibWVtIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IDB4MGMwMDAwMDAsCisJCS5lbmQJPSAweDBjZmZmZmZmLAogCX0sCiAJewotCQkubmFtZSA9ICJkZXZpcnEiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJLnN0YXJ0ID0gMTEyLAotCQkuZW5kID0gMTQzLAorCQkubmFtZQk9ICJkZXZpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMTEyLAorCQkuZW5kCT0gMTQzLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYl9yZXNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInJlZ3MiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gQVI3X1JFR1NfVVNCLAotCQkuZW5kID0gQVI3X1JFR1NfVVNCICsgMHhmZiwKLQl9LAotCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDMyLAotCQkuZW5kID0gMzIsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIm1lbSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSAweDAzNDAwMDAwLAotCQkuZW5kID0gMHgwMzQwMWZmZiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGh5c21hcF9mbGFzaF9kYXRhID0gewotCS53aWR0aCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZml4ZWRfcGh5X3N0YXR1cyBfX2luaXRkYXRhID0gewotCS5saW5rID0gMSwKLQkuc3BlZWQgPSAxMDAsCi0JLmR1cGxleCA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19sb3dfZGF0YSA9IHsKLQkucmVzZXRfYml0ID0gMTcsCi0JLnBvd2VyX2JpdCA9IDIwLAotCS5waHlfbWFzayA9IDB4ODAwMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19oaWdoX2RhdGEgPSB7Ci0JLnJlc2V0X2JpdCA9IDIxLAotCS5wb3dlcl9iaXQgPSAyMiwKLQkucGh5X21hc2sgPSAweDdmZmZmZmZmLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0X3ZseW5xX2RhdGEgdmx5bnFfbG93X2RhdGEgPSB7Ci0JLm9wcy5vbiA9IHZseW5xX29uLAotCS5vcHMub2ZmID0gdmx5bnFfb2ZmLAotCS5yZXNldF9iaXQgPSAyMCwKLQkuZ3Bpb19iaXQgPSAxOCwKKwkub3BzID0geworCQkub24JPSB2bHlucV9vbiwKKwkJLm9mZgk9IHZseW5xX29mZiwKKwl9LAorCS5yZXNldF9iaXQJPSAyMCwKKwkuZ3Bpb19iaXQJPSAxOCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF92bHlucV9kYXRhIHZseW5xX2hpZ2hfZGF0YSA9IHsKLQkub3BzLm9uID0gdmx5bnFfb24sCi0JLm9wcy5vZmYgPSB2bHlucV9vZmYsCi0JLnJlc2V0X2JpdCA9IDE2LAotCS5ncGlvX2JpdCA9IDE5LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGh5c21hcF9mbGFzaCA9IHsKLQkuaWQgPSAwLAotCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZwaHlzbWFwX2ZsYXNoX2RhdGEsCi0JLnJlc291cmNlID0gJnBoeXNtYXBfZmxhc2hfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotfTsKLQotc3RhdGljIHU2NCBjcG1hY19kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjcG1hY19sb3cgPSB7Ci0JLmlkID0gMCwKLQkubmFtZSA9ICJjcG1hYyIsCi0JLmRldiA9IHsKLQkJLmRtYV9tYXNrID0gJmNwbWFjX2RtYV9tYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZjcG1hY19sb3dfZGF0YSwKKwkub3BzID0geworCQkub24JPSB2bHlucV9vbiwKKwkJLm9mZgk9IHZseW5xX29mZiwKIAl9LAotCS5yZXNvdXJjZSA9IGNwbWFjX2xvd19yZXMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGNwbWFjX2xvd19yZXMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfaGlnaCA9IHsKLQkuaWQgPSAxLAotCS5uYW1lID0gImNwbWFjIiwKLQkuZGV2ID0gewotCQkuZG1hX21hc2sgPSAmY3BtYWNfZG1hX21hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmNwbWFjX2hpZ2hfZGF0YSwKLQl9LAotCS5yZXNvdXJjZSA9IGNwbWFjX2hpZ2hfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShjcG1hY19oaWdoX3JlcyksCisJLnJlc2V0X2JpdAk9IDI2LAorCS5ncGlvX2JpdAk9IDE5LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugdmx5bnFfbG93ID0gewotCS5pZCA9IDAsCi0JLm5hbWUgPSAidmx5bnEiLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ2bHlucV9sb3dfZGF0YSwKLQkucmVzb3VyY2UgPSB2bHlucV9sb3dfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh2bHlucV9sb3dfcmVzKSwKKwkuaWQJCT0gMCwKKwkubmFtZQkJPSAidmx5bnEiLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnZseW5xX2xvd19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gdmx5bnFfbG93X3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodmx5bnFfbG93X3JlcyksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2bHlucV9oaWdoID0gewotCS5pZCA9IDEsCi0JLm5hbWUgPSAidmx5bnEiLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZ2bHlucV9oaWdoX2RhdGEsCi0JLnJlc291cmNlID0gdmx5bnFfaGlnaF9yZXMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHZseW5xX2hpZ2hfcmVzKSwKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkZWZhdWx0X2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInN0YXR1cyIsCi0JCS5ncGlvID0gOCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRzbDUwMnRfbGVkc1tdID0gewotCXsKLQkJLm5hbWUgPSAic3RhdHVzIiwKLQkJLmdwaW8gPSA5LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gImV0aGVybmV0IiwKLQkJLmdwaW8gPSA3LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gInVzYiIsCi0JCS5ncGlvID0gMTIsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkZzgzNGdfbGVkc1tdID0gewotCXsKLQkJLm5hbWUgPSAicHBwIiwKLQkJLmdwaW8gPSA2LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gInN0YXR1cyIsCi0JCS5ncGlvID0gNywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJhZHNsIiwKLQkJLmdwaW8gPSA4LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIndpZmkiLAotCQkuZ3BpbyA9IDEyLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gInBvd2VyIiwKLQkJLmdwaW8gPSAxNCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCQkuZGVmYXVsdF90cmlnZ2VyID0gImRlZmF1bHQtb24iLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGZiX3NsX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIjEiLAotCQkuZ3BpbyA9IDcsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjIiLAotCQkuZ3BpbyA9IDEzLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjMiLAotCQkuZ3BpbyA9IDEwLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjQiLAotCQkuZ3BpbyA9IDEyLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjUiLAotCQkuZ3BpbyA9IDksCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBmYl9mb25fbGVkc1tdID0gewotCXsKLQkJLm5hbWUgPSAiMSIsCi0JCS5ncGlvID0gOCwKLQl9LAotCXsKLQkJLm5hbWUgPSAiMiIsCi0JCS5ncGlvID0gMywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICIzIiwKLQkJLmdwaW8gPSA1LAotCX0sCi0JewotCQkubmFtZSA9ICI0IiwKLQkJLmdwaW8gPSA0LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjUiLAotCQkuZ3BpbyA9IDExLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBhcjdfbGVkX2RhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN19ncGlvX2xlZHMgPSB7Ci0JLm5hbWUgPSAibGVkcy1ncGlvIiwKLQkuaWQgPSAtMSwKKwkuaWQJCT0gMSwKKwkubmFtZQkJPSAidmx5bnEiLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmFyN19sZWRfZGF0YSwKLQl9CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnZseW5xX2hpZ2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHZseW5xX2hpZ2hfcmVzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh2bHlucV9oaWdoX3JlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfdWRjID0gewotCS5pZCA9IC0xLAotCS5uYW1lID0gImFyN191ZGMiLAotCS5yZXNvdXJjZSA9IHVzYl9yZXMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVzYl9yZXMpLAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGbGFzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBoeXNtYXBfZmxhc2hfcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAibWVtIiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJPSAweDEwMDAwMDAwLAorCS5lbmQJPSAweDEwN2ZmZmZmLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhcjdfd2R0X3JlcyA9IHsKLQkubmFtZSA9ICJyZWdzIiwKLQkuc3RhcnQgPSAtMSwgLyogRmlsbGVkIGF0IHJ1bnRpbWUgKi8KLQkuZW5kID0gLTEsIC8qIEZpbGxlZCBhdCBydW50aW1lICovCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwaHlzbWFwX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCT0gMiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN193ZHQgPSB7Ci0JLmlkID0gLTEsCi0JLm5hbWUgID0gImFyN193ZHQiLAotCS5yZXNvdXJjZSA9ICZhcjdfd2R0X3JlcywKLQkubnVtX3Jlc291cmNlcyA9IDEsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwaHlzbWFwX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwaHlzbWFwX2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSAmcGh5c21hcF9mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV0aGVybmV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3BtYWNfbG93X3Jlc1tdID0geworCXsKKwkJLm5hbWUJPSAicmVncyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBBUjdfUkVHU19NQUMwLAorCQkuZW5kCT0gQVI3X1JFR1NfTUFDMCArIDB4N2ZmLAorCX0sCisJeworCQkubmFtZQk9ICJpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMjcsCisJCS5lbmQgCT0gMjcsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3BtYWNfaGlnaF9yZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInJlZ3MiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gQVI3X1JFR1NfTUFDMSwKKwkJLmVuZAk9IEFSN19SRUdTX01BQzEgKyAweDdmZiwKKwl9LAorCXsKKwkJLm5hbWUJPSAiaXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDQxLAorCQkuZW5kCT0gNDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBmaXhlZF9waHlfc3RhdHVzIF9faW5pdGRhdGEgPSB7CisJLmxpbmsJCT0gMSwKKwkuc3BlZWQJCT0gMTAwLAorCS5kdXBsZXgJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9jcG1hY19kYXRhIGNwbWFjX2xvd19kYXRhID0geworCS5yZXNldF9iaXQJPSAxNywKKwkucG93ZXJfYml0CT0gMjAsCisJLnBoeV9tYXNrCT0gMHg4MDAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9jcG1hY19kYXRhIGNwbWFjX2hpZ2hfZGF0YSA9IHsKKwkucmVzZXRfYml0CT0gMjEsCisJLnBvd2VyX2JpdAk9IDIyLAorCS5waHlfbWFzawk9IDB4N2ZmZmZmZmYsCit9OworCitzdGF0aWMgdTY0IGNwbWFjX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfbG93ID0geworCS5pZAkJPSAwLAorCS5uYW1lCQk9ICJjcG1hYyIsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZjcG1hY19kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmNwbWFjX2xvd19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY3BtYWNfbG93X3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3BtYWNfbG93X3JlcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjcG1hY19oaWdoID0geworCS5pZAkJPSAxLAorCS5uYW1lCQk9ICJjcG1hYyIsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZjcG1hY19kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmNwbWFjX2hpZ2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNwbWFjX2hpZ2hfcmVzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjcG1hY19oaWdoX3JlcyksCiB9OwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgY2hhcjJoZXgoY2hhciBoKQpAQCAtNDY3LDYgKzMyOCwxNTYgQEAKIAkJCWNoYXIyaGV4KG1hY1tpICogMyArIDFdKTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVU0IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JfcmVzW10gPSB7CisJeworCQkubmFtZQk9ICJyZWdzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IEFSN19SRUdTX1VTQiwKKwkJLmVuZAk9IEFSN19SRUdTX1VTQiArIDB4ZmYsCisJfSwKKwl7CisJCS5uYW1lCT0gImlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSAzMiwKKwkJLmVuZAk9IDMyLAorCX0sCisJeworCQkubmFtZQk9ICJtZW0iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gMHgwMzQwMDAwMCwKKwkJLmVuZAk9IDB4MDM0MDFmZmYsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN191ZGMgPSB7CisJLm5hbWUJCT0gImFyN191ZGMiLAorCS5yZXNvdXJjZQk9IHVzYl9yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYl9yZXMpLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMRURzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGVmYXVsdF9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gInN0YXR1cyIsCisJCS5ncGlvCQkJPSA4LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRzbDUwMnRfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJzdGF0dXMiLAorCQkuZ3BpbwkJCT0gOSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJldGhlcm5ldCIsCisJCS5ncGlvCQkJPSA3LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gInVzYiIsCisJCS5ncGlvCQkJPSAxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkZzgzNGdfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJwcHAiLAorCQkuZ3BpbwkJCT0gNiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJzdGF0dXMiLAorCQkuZ3BpbwkJCT0gNywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJhZHNsIiwKKwkJLmdwaW8JCQk9IDgsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAid2lmaSIsCisJCS5ncGlvCQkJPSAxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJwb3dlciIsCisJCS5ncGlvCQkJPSAxNCwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBmYl9zbF9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gIjEiLAorCQkuZ3BpbwkJCT0gNywKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIyIiwKKwkJLmdwaW8JCQk9IDEzLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIjMiLAorCQkuZ3BpbwkJCT0gMTAsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiNCIsCisJCS5ncGlvCQkJPSAxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICI1IiwKKwkJLmdwaW8JCQk9IDksCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmJfZm9uX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiMSIsCisJCS5ncGlvCQkJPSA4LAorCX0sCisJeworCQkubmFtZQkJCT0gIjIiLAorCQkuZ3BpbwkJCT0gMywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIzIiwKKwkJLmdwaW8JCQk9IDUsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiNCIsCisJCS5ncGlvCQkJPSA0LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIjUiLAorCQkuZ3BpbwkJCT0gMTEsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBhcjdfbGVkX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN19ncGlvX2xlZHMgPSB7CisJLm5hbWUgPSAibGVkcy1ncGlvIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZhcjdfbGVkX2RhdGEsCisJfQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGRldGVjdF9sZWRzKHZvaWQpCiB7CiAJY2hhciAqcHJpZCwgKnVzYl9wcm9kOwpAQCAtNDk5LDExMSArNTEwLDE0OSBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgYXI3X3JlZ2lzdGVyX2RldmljZXModm9pZCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV2F0Y2hkb2cKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhcjdfd2R0X3JlcyA9IHsKKwkubmFtZQkJPSAicmVncyIsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAkJPSAtMSwJLyogRmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkuZW5kCQk9IC0xLAkvKiBGaWxsZWQgYXQgcnVudGltZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXI3X3dkdCA9IHsKKwkubmFtZQkJPSAiYXI3X3dkdCIsCisJLnJlc291cmNlCT0gJmFyN193ZHRfcmVzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCBhcjdfcmVnaXN0ZXJfdWFydHModm9pZCkKIHsKLQl1MTYgY2hpcF9pZDsKLQlpbnQgcmVzOwotCXUzMiAqYm9vdGNyLCB2YWw7CiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCi0Jc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgdWFydF9wb3J0WzJdIF9faW5pdGRhdGE7CisJc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgdWFydF9wb3J0IF9faW5pdGRhdGE7CisJc3RydWN0IGNsayAqYnVzX2NsazsKKwlpbnQgcmVzOwogCi0JbWVtc2V0KHVhcnRfcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X3BvcnQpICogMik7CisJbWVtc2V0KCZ1YXJ0X3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSk7CiAKLQl1YXJ0X3BvcnRbMF0udHlwZSA9IFBPUlRfMTY1NTBBOwotCXVhcnRfcG9ydFswXS5saW5lID0gMDsKLQl1YXJ0X3BvcnRbMF0uaXJxID0gQVI3X0lSUV9VQVJUMDsKLQl1YXJ0X3BvcnRbMF0udWFydGNsayA9IGFyN19idXNfZnJlcSgpIC8gMjsKLQl1YXJ0X3BvcnRbMF0uaW90eXBlID0gVVBJT19NRU0zMjsKLQl1YXJ0X3BvcnRbMF0ubWFwYmFzZSA9IEFSN19SRUdTX1VBUlQwOwotCXVhcnRfcG9ydFswXS5tZW1iYXNlID0gaW9yZW1hcCh1YXJ0X3BvcnRbMF0ubWFwYmFzZSwgMjU2KTsKLQl1YXJ0X3BvcnRbMF0ucmVnc2hpZnQgPSAyOwotCXJlcyA9IGVhcmx5X3NlcmlhbF9zZXR1cCgmdWFydF9wb3J0WzBdKTsKKwlidXNfY2xrID0gY2xrX2dldChOVUxMLCAiYnVzIik7CisJaWYgKElTX0VSUihidXNfY2xrKSkKKwkJcGFuaWMoInVuYWJsZSB0byBnZXQgYnVzIGNsa1xuIik7CisKKwl1YXJ0X3BvcnQudHlwZQkJPSBQT1JUXzE2NTUwQTsKKwl1YXJ0X3BvcnQudWFydGNsawk9IGNsa19nZXRfcmF0ZShidXNfY2xrKSAvIDI7CisJdWFydF9wb3J0LmlvdHlwZQk9IFVQSU9fTUVNMzI7CisJdWFydF9wb3J0LnJlZ3NoaWZ0CT0gMjsKKworCXVhcnRfcG9ydC5saW5lCQk9IDA7CisJdWFydF9wb3J0LmlycQkJPSBBUjdfSVJRX1VBUlQwOworCXVhcnRfcG9ydC5tYXBiYXNlCT0gQVI3X1JFR1NfVUFSVDA7CisJdWFydF9wb3J0Lm1lbWJhc2UJPSBpb3JlbWFwKHVhcnRfcG9ydC5tYXBiYXNlLCAyNTYpOworCisJcmVzID0gZWFybHlfc2VyaWFsX3NldHVwKCZ1YXJ0X3BvcnQpOwogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKLQogCS8qIE9ubHkgVE5FVEQ3M3h4IGhhdmUgYSBzZWNvbmQgc2VyaWFsIHBvcnQgKi8KIAlpZiAoYXI3X2hhc19zZWNvbmRfdWFydCgpKSB7Ci0JCXVhcnRfcG9ydFsxXS50eXBlID0gUE9SVF8xNjU1MEE7Ci0JCXVhcnRfcG9ydFsxXS5saW5lID0gMTsKLQkJdWFydF9wb3J0WzFdLmlycSA9IEFSN19JUlFfVUFSVDE7Ci0JCXVhcnRfcG9ydFsxXS51YXJ0Y2xrID0gYXI3X2J1c19mcmVxKCkgLyAyOwotCQl1YXJ0X3BvcnRbMV0uaW90eXBlID0gVVBJT19NRU0zMjsKLQkJdWFydF9wb3J0WzFdLm1hcGJhc2UgPSBVUjhfUkVHU19VQVJUMTsKLQkJdWFydF9wb3J0WzFdLm1lbWJhc2UgPSBpb3JlbWFwKHVhcnRfcG9ydFsxXS5tYXBiYXNlLCAyNTYpOwotCQl1YXJ0X3BvcnRbMV0ucmVnc2hpZnQgPSAyOwotCQlyZXMgPSBlYXJseV9zZXJpYWxfc2V0dXAoJnVhcnRfcG9ydFsxXSk7CisJCXVhcnRfcG9ydC5saW5lCQk9IDE7CisJCXVhcnRfcG9ydC5pcnEJCT0gQVI3X0lSUV9VQVJUMTsKKwkJdWFydF9wb3J0Lm1hcGJhc2UJPSBVUjhfUkVHU19VQVJUMTsKKwkJdWFydF9wb3J0Lm1lbWJhc2UJPSBpb3JlbWFwKHVhcnRfcG9ydC5tYXBiYXNlLCAyNTYpOworCisJCXJlcyA9IGVhcmx5X3NlcmlhbF9zZXR1cCgmdWFydF9wb3J0KTsKIAkJaWYgKHJlcykKIAkJCXJldHVybiByZXM7CiAJfQotI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfODI1MCAqLworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgYXI3X3JlZ2lzdGVyX2RldmljZXModm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmJvb3RjcjsKKwl1MzIgdmFsOworCXUxNiBjaGlwX2lkOworCWludCByZXM7CisKKwlyZXMgPSBhcjdfcmVnaXN0ZXJfdWFydHMoKTsKKwlpZiAocmVzKQorCQlwcl9lcnIoInVuYWJsZSB0byBzZXR1cCB1YXJ0KHMpOiAlZFxuIiwgcmVzKTsKKwogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGh5c21hcF9mbGFzaCk7CiAJaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHBoeXNtYXAtZmxhc2g6ICVkXG4iLCByZXMpOwogCiAJYXI3X2RldmljZV9kaXNhYmxlKHZseW5xX2xvd19kYXRhLnJlc2V0X2JpdCk7CiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2bHlucV9sb3cpOwogCWlmIChyZXMpCi0JCXJldHVybiByZXM7CisJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciB2bHlucS1sb3c6ICVkXG4iLCByZXMpOwogCiAJaWYgKGFyN19oYXNfaGlnaF92bHlucSgpKSB7CiAJCWFyN19kZXZpY2VfZGlzYWJsZSh2bHlucV9oaWdoX2RhdGEucmVzZXRfYml0KTsKIAkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2bHlucV9oaWdoKTsKIAkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7CisJCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdmx5bnEtaGlnaDogJWRcbiIsIHJlcyk7CiAJfQogCiAJaWYgKGFyN19oYXNfaGlnaF9jcG1hYygpKSB7Ci0JCXJlcyA9IGZpeGVkX3BoeV9hZGQoUEhZX1BPTEwsIGNwbWFjX2hpZ2guaWQsICZmaXhlZF9waHlfc3RhdHVzKTsKLQkJaWYgKHJlcyAmJiByZXMgIT0gLUVOT0RFVikKLQkJCXJldHVybiByZXM7Ci0JCWNwbWFjX2dldF9tYWMoMSwgY3BtYWNfaGlnaF9kYXRhLmRldl9hZGRyKTsKLQkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcG1hY19oaWdoKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfSBlbHNlIHsKKwkJaWYgKCFyZXMpIHsKKwkJCWNwbWFjX2dldF9tYWMoMSwgY3BtYWNfaGlnaF9kYXRhLmRldl9hZGRyKTsKKworCQkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcG1hY19oaWdoKTsKKwkJCWlmIChyZXMpCisJCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIGNwbWFjLWhpZ2g6ICVkXG4iLCByZXMpOworCQl9IGVsc2UKKwkJCXByX3dhcm5pbmcoInVuYWJsZSB0byBhZGQgY3BtYWMtaGlnaCBwaHk6ICVkXG4iLCByZXMpOworCX0gZWxzZQogCQljcG1hY19sb3dfZGF0YS5waHlfbWFzayA9IDB4ZmZmZmZmZmY7Ci0JfQogCiAJcmVzID0gZml4ZWRfcGh5X2FkZChQSFlfUE9MTCwgY3BtYWNfbG93LmlkLCAmZml4ZWRfcGh5X3N0YXR1cyk7Ci0JaWYgKHJlcyAmJiByZXMgIT0gLUVOT0RFVikKLQkJcmV0dXJuIHJlczsKLQotCWNwbWFjX2dldF9tYWMoMCwgY3BtYWNfbG93X2RhdGEuZGV2X2FkZHIpOwotCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfbG93KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOworCWlmICghcmVzKSB7CisJCWNwbWFjX2dldF9tYWMoMCwgY3BtYWNfbG93X2RhdGEuZGV2X2FkZHIpOworCQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNwbWFjX2xvdyk7CisJCWlmIChyZXMpCisJCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgY3BtYWMtbG93OiAlZFxuIiwgcmVzKTsKKwl9IGVsc2UKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIGFkZCBjcG1hYy1sb3cgcGh5OiAlZFxuIiwgcmVzKTsKIAogCWRldGVjdF9sZWRzKCk7CiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfZ3Bpb19sZWRzKTsKIAlpZiAocmVzKQotCQlyZXR1cm4gcmVzOworCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgbGVkczogJWRcbiIsIHJlcyk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN191ZGMpOwotCi0JY2hpcF9pZCA9IGFyN19jaGlwX2lkKCk7Ci0Jc3dpdGNoIChjaGlwX2lkKSB7Ci0JY2FzZSBBUjdfQ0hJUF83MTAwOgotCWNhc2UgQVI3X0NISVBfNzIwMDoKLQkJYXI3X3dkdF9yZXMuc3RhcnQgPSBBUjdfUkVHU19XRFQ7Ci0JCWJyZWFrOwotCWNhc2UgQVI3X0NISVBfNzMwMDoKLQkJYXI3X3dkdF9yZXMuc3RhcnQgPSBVUjhfUkVHU19XRFQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCWFyN193ZHRfcmVzLmVuZCA9IGFyN193ZHRfcmVzLnN0YXJ0ICsgMHgyMDsKLQotCWJvb3RjciA9ICh1MzIgKilpb3JlbWFwX25vY2FjaGUoQVI3X1JFR1NfRENMLCA0KTsKLQl2YWwgPSAqYm9vdGNyOwotCWlvdW5tYXAoYm9vdGNyKTsKKwlpZiAocmVzKQorCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdXNiIHNsYXZlOiAlZFxuIiwgcmVzKTsKIAogCS8qIFJlZ2lzdGVyIHdhdGNoZG9nIG9ubHkgaWYgZW5hYmxlZCBpbiBoYXJkd2FyZSAqLwotCWlmICh2YWwgJiBBUjdfV0RUX0hXX0VOQSkKLQkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfd2R0KTsKKwlib290Y3IgPSBpb3JlbWFwX25vY2FjaGUoQVI3X1JFR1NfRENMLCA0KTsKKwl2YWwgPSByZWFkbChib290Y3IpOworCWlvdW5tYXAoYm9vdGNyKTsKKwlpZiAodmFsICYgQVI3X1dEVF9IV19FTkEpIHsKKwkJY2hpcF9pZCA9IGFyN19jaGlwX2lkKCk7CisJCXN3aXRjaCAoY2hpcF9pZCkgeworCQljYXNlIEFSN19DSElQXzcxMDA6CisJCWNhc2UgQVI3X0NISVBfNzIwMDoKKwkJCWFyN193ZHRfcmVzLnN0YXJ0ID0gQVI3X1JFR1NfV0RUOworCQkJYnJlYWs7CisJCWNhc2UgQVI3X0NISVBfNzMwMDoKKwkJCWFyN193ZHRfcmVzLnN0YXJ0ID0gVVI4X1JFR1NfV0RUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQogCi0JcmV0dXJuIHJlczsKKwkJYXI3X3dkdF9yZXMuZW5kID0gYXI3X3dkdF9yZXMuc3RhcnQgKyAweDIwOworCQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN193ZHQpOworCQlpZiAocmVzKQorCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHdhdGNoZG9nOiAlZFxuIiwgcmVzKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIGFyY2hfaW5pdGNhbGwoYXI3X3JlZ2lzdGVyX2RldmljZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9wcm9tLmMgYi9hcmNoL21pcHMvYXI3L3Byb20uYwppbmRleCBjMWZkZDM2Li41MjM4NTc5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L3Byb20uYworKysgYi9hcmNoL21pcHMvYXI3L3Byb20uYwpAQCAtMzIsOCArMzIsOCBAQAogI2RlZmluZSBNQVhfRU5UUlkgODAKIAogc3RydWN0IGVudl92YXIgewotCWNoYXIgKm5hbWU7Ci0JY2hhciAqdmFsdWU7CisJY2hhcgkqbmFtZTsKKwljaGFyCSp2YWx1ZTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZW52X3ZhciBhZGFtMl9lbnZbTUFYX0VOVFJZXTsKQEAgLTQxLDYgKzQxLDcgQEAKIGNoYXIgKnByb21fZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyAoaSA8IE1BWF9FTlRSWSkgJiYgYWRhbTJfZW52W2ldLm5hbWU7IGkrKykKIAkJaWYgKCFzdHJjbXAobmFtZSwgYWRhbTJfZW52W2ldLm5hbWUpKQogCQkJcmV0dXJuIGFkYW0yX2VudltpXS52YWx1ZTsKQEAgLTQ5LDY1ICs1MCw1MCBAQAogfQogRVhQT1JUX1NZTUJPTChwcm9tX2dldGVudik7CiAKLWNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLQogc3RhdGljIHZvaWQgIF9faW5pdCBhcjdfaW5pdF9jbWRsaW5lKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JY2hhciAqY3A7Ci0JaW50IGFjdHI7CisJaW50IGk7CiAKLQlhY3RyID0gMTsgLyogQWx3YXlzIGlnbm9yZSBhcmd2WzBdICovCi0KLQljcCA9ICYoYXJjc19jbWRsaW5lWzBdKTsKLQl3aGlsZSAoYWN0ciA8IGFyZ2MpIHsKLQkJc3RyY3B5KGNwLCBhcmd2W2FjdHJdKTsKLQkJY3AgKz0gc3RybGVuKGFyZ3ZbYWN0cl0pOwotCQkqY3ArKyA9ICcgJzsKLQkJYWN0cisrOwotCX0KLQlpZiAoY3AgIT0gJihhcmNzX2NtZGxpbmVbMF0pKSB7Ci0JCS8qIGdldCByaWQgb2YgdHJhaWxpbmcgc3BhY2UgKi8KLQkJLS1jcDsKLQkJKmNwID0gJ1wwJzsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCBhcmd2W2ldLCBDT01NQU5EX0xJTkVfU0laRSk7CisJCWlmIChpIDwgKGFyZ2MgLSAxKSkKKwkJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCAiICIsIENPTU1BTkRfTElORV9TSVpFKTsKIAl9CiB9CiAKIHN0cnVjdCBwc2JsX3JlYyB7Ci0JdTMyIHBzYmxfc2l6ZTsKLQl1MzIgZW52X2Jhc2U7Ci0JdTMyIGVudl9zaXplOwotCXUzMiBmZnNfYmFzZTsKLQl1MzIgZmZzX3NpemU7CisJdTMyCXBzYmxfc2l6ZTsKKwl1MzIJZW52X2Jhc2U7CisJdTMyCWVudl9zaXplOworCXUzMglmZnNfYmFzZTsKKwl1MzIJZmZzX3NpemU7CiB9OwogCiBzdGF0aWMgX19pbml0ZGF0YSBjaGFyIHBzcF9lbnZfdmVyc2lvbltdID0gIlRJRU5WMC44IjsKIAogc3RydWN0IHBzcF9lbnZfY2h1bmsgewotCXU4IG51bTsKLQl1OCBjdHJsOwotCXUxNiBjc3VtOwotCXU4IGxlbjsKLQljaGFyIGRhdGFbMTFdOworCXU4CW51bTsKKwl1OAljdHJsOworCXUxNgljc3VtOworCXU4CWxlbjsKKwljaGFyCWRhdGFbMTFdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBwc3BfdmFyX21hcF9lbnRyeSB7Ci0JdTggbnVtOwotCWNoYXIgKnZhbHVlOworCXU4CW51bTsKKwljaGFyCSp2YWx1ZTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHNwX3Zhcl9tYXBfZW50cnkgcHNwX3Zhcl9tYXBbXSA9IHsKLQl7IDEsICJjcHVmcmVxdWVuY3kiIH0sCi0JeyAyLCAibWVtc2l6ZSIgfSwKLQl7IDMsICJmbGFzaHNpemUiIH0sCi0JeyA0LCAibW9kZXR0eTAiIH0sCi0JeyA1LCAibW9kZXR0eTEiIH0sCi0JeyA4LCAibWFjYSIgfSwKLQl7IDksICJtYWNiIiB9LAotCXsgMjgsICJzeXNmcmVxdWVuY3kiIH0sCi0JeyAzOCwgIm1pcHNmcmVxdWVuY3kiIH0sCisJeyAgMSwJImNwdWZyZXF1ZW5jeSIgfSwKKwl7ICAyLAkibWVtc2l6ZSIgfSwKKwl7ICAzLAkiZmxhc2hzaXplIiB9LAorCXsgIDQsCSJtb2RldHR5MCIgfSwKKwl7ICA1LAkibW9kZXR0eTEiIH0sCisJeyAgOCwJIm1hY2EiIH0sCisJeyAgOSwJIm1hY2IiIH0sCisJeyAyOCwJInN5c2ZyZXF1ZW5jeSIgfSwKKwl7IDM4LAkibWlwc2ZyZXF1ZW5jeSIgfSwKIH07CiAKIC8qCkBAIC0xNTQsNiArMTQwLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBhZGRfYWRhbTJfdmFyKGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQogewogCWludCBpOworCiAJZm9yIChpID0gMDsgaSA8IE1BWF9FTlRSWTsgaSsrKSB7CiAJCWlmICghYWRhbTJfZW52W2ldLm5hbWUpIHsKIAkJCWFkYW0yX2VudltpXS5uYW1lID0gbmFtZTsKQEAgLTIxNiw3ICsyMDMsNyBAQAogCWNoYXIgcGFyaXR5ID0gJ1wwJywgYml0cyA9ICdcMCcsIGZsb3cgPSAnXDAnOwogCWNoYXIgKnMsICpwOwogCi0JaWYgKHN0cnN0cihwcm9tX2dldGNtZGxpbmUoKSwgImNvbnNvbGU9IikpCisJaWYgKHN0cnN0cihhcmNzX2NtZGxpbmUsICJjb25zb2xlPSIpKQogCQlyZXR1cm47CiAKIAlzID0gcHJvbV9nZXRlbnYoIm1vZGV0dHkwIik7CkBAIC0yNTAsNyArMjM3LDcgQEAKIAllbHNlCiAJCXNwcmludGYoY29uc29sZV9zdHJpbmcsICIgY29uc29sZT10dHlTMCwlZCVjJWMiLCBiYXVkLCBwYXJpdHksCiAJCQliaXRzKTsKLQlzdHJjYXQocHJvbV9nZXRjbWRsaW5lKCksIGNvbnNvbGVfc3RyaW5nKTsKKwlzdHJsY2F0KGFyY3NfY21kbGluZSwgY29uc29sZV9zdHJpbmcsIENPTU1BTkRfTElORV9TSVpFKTsKICNlbmRpZgogfQogCkBAIC0yNzksNCArMjY2LDMgQEAKIAlzZXJpYWxfb3V0KFVBUlRfVFgsIGMpOwogCXJldHVybiAxOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3NldHVwLmMgYi9hcmNoL21pcHMvYXI3L3NldHVwLmMKaW5kZXggMzlmNmI1Yi4uM2E4MDFkMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hcjcvc2V0dXAuYwpAQCAtMjYsOCArMjYsOCBAQAogCiBzdGF0aWMgdm9pZCBhcjdfbWFjaGluZV9yZXN0YXJ0KGNoYXIgKmNvbW1hbmQpCiB7Ci0JdTMyICpzb2Z0cmVzX3JlZyA9IGlvcmVtYXAoQVI3X1JFR1NfUkVTRVQgKwotCQkJCQkgIEFSN19SRVNFVF9TT0ZUV0FSRSwgMSk7CisJdTMyICpzb2Z0cmVzX3JlZyA9IGlvcmVtYXAoQVI3X1JFR1NfUkVTRVQgKyBBUjdfUkVTRVRfU09GVFdBUkUsIDEpOworCiAJd3JpdGVsKDEsIHNvZnRyZXNfcmVnKTsKIH0KIApAQCAtNDEsNiArNDEsNyBAQAogewogCXUzMiAqcG93ZXJfcmVnID0gKHUzMiAqKWlvcmVtYXAoQVI3X1JFR1NfUE9XRVIsIDEpOwogCXUzMiBwb3dlcl9zdGF0ZSA9IHJlYWRsKHBvd2VyX3JlZykgfCAoMyA8PCAzMCk7CisKIAl3cml0ZWwocG93ZXJfc3RhdGUsIHBvd2VyX3JlZyk7CiAJYXI3X21hY2hpbmVfaGFsdCgpOwogfQpAQCAtNDksMTQgKzUwLDE0IEBACiB7CiAJdTE2IGNoaXBfaWQgPSBhcjdfY2hpcF9pZCgpOwogCXN3aXRjaCAoY2hpcF9pZCkgewotCWNhc2UgQVI3X0NISVBfNzMwMDoKLQkJcmV0dXJuICJUSSBBUjcgKFRORVRENzMwMCkiOwogCWNhc2UgQVI3X0NISVBfNzEwMDoKIAkJcmV0dXJuICJUSSBBUjcgKFRORVRENzEwMCkiOwogCWNhc2UgQVI3X0NISVBfNzIwMDoKIAkJcmV0dXJuICJUSSBBUjcgKFRORVRENzIwMCkiOworCWNhc2UgQVI3X0NISVBfNzMwMDoKKwkJcmV0dXJuICJUSSBBUjcgKFRORVRENzMwMCkiOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAiVEkgQVI3IChVbmtub3duKSI7CisJCXJldHVybiAiVEkgQVI3ICh1bmtub3duKSI7CiAJfQogfQogCkBAIC03MCw3ICs3MSw2IEBACiAgKiBJbml0aWFsaXplcyBiYXNpYyByb3V0aW5lcyBhbmQgc3RydWN0dXJlcyBwb2ludGVycywgbWVtb3J5IHNpemUgKGFzCiAgKiBnaXZlbiBieSB0aGUgYmlvcyBhbmQgc2F2ZXMgdGhlIGNvbW1hbmQgbGluZS4KICAqLwotCiB2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaW9fYmFzZTsKQEAgLTg4LDYgKzg4LDUgQEAKIAlwcm9tX21lbWluaXQoKTsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzLCBJRDogMHglMDR4LCBSZXZpc2lvbjogMHglMDJ4XG4iLAotCQkJCQlnZXRfc3lzdGVtX3R5cGUoKSwKLQkJYXI3X2NoaXBfaWQoKSwgYXI3X2NoaXBfcmV2KCkpOworCQkJZ2V0X3N5c3RlbV90eXBlKCksIGFyN19jaGlwX2lkKCksIGFyN19jaGlwX3JldigpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvdGltZS5jIGIvYXJjaC9taXBzL2FyNy90aW1lLmMKaW5kZXggYTFmYmE4OS4uNWZiOGEwMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy90aW1lLmMKKysrIGIvYXJjaC9taXBzL2FyNy90aW1lLmMKQEAgLTIwLDExICsyMCwyMSBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2FyNy5oPgogCiB2b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQogewotCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGFyN19jcHVfZnJlcSgpIC8gMjsKKwlzdHJ1Y3QgY2xrICpjcHVfY2xrOworCisJY3B1X2NsayA9IGNsa19nZXQoTlVMTCwgImNwdSIpOworCWlmIChJU19FUlIoY3B1X2NsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ2V0IGNwdSBjbG9ja1xuIik7CisJCXJldHVybjsKKwl9CisKKwltaXBzX2hwdF9mcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoY3B1X2NsaykgLyAyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jCmluZGV4IDliNzk4ODAuLmU0YTVlZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC9ncGlvLmMKQEAgLTU5LDQgKzU5LDMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncGlvX3RvX2lycSk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwppbmRleCAyOWQzY2JmLi4wZmE2NDZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCkBAIC0xNjMsNCArMTYzLDMgQEAKIHZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQogewogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYwppbmRleCAyZjU4MGZhLi5kNDQyZTExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKQEAgLTEyMSw0ICsxMjEsMyBAQAogCV9tYWNoaW5lX2hhbHQgPSBiY200N3h4X21hY2hpbmVfaGFsdDsKIAlwbV9wb3dlcl9vZmYgPSBiY200N3h4X21hY2hpbmVfaGFsdDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCmluZGV4IGVmMDBlN2YuLjc0ZDA2OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC93Z3Q2MzR1LmMKQEAgLTE2NCw0ICsxNjQsMyBAQAogfQogCiBtb2R1bGVfaW5pdCh3Z3Q2MzR1X2luaXQpOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCmluZGV4IDFmZTQxMmMuLmVhMTc5NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCkBAIC04MzYsNCArODM2LDMgQEAKIAogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC90aW1lci5jIGIvYXJjaC9taXBzL2JjbTYzeHgvdGltZXIuYwppbmRleCBiYTUyMmJkLi41ZjExMzU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC90aW1lci5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L3RpbWVyLmMKQEAgLTE3LDggKzE3LDggQEAKICNpbmNsdWRlIDxiY202M3h4X3RpbWVyLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGltZXJfcmVnX2xvY2spOwotc3RhdGljIERFRklORV9TUElOTE9DSyh0aW1lcl9kYXRhX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sodGltZXJfcmVnX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sodGltZXJfZGF0YV9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xrOwogCiBzdGF0aWMgc3RydWN0IHRpbWVyX2RhdGEgewpAQCAtMzEsMjMgKzMxLDIzIEBACiAJdTMyIHN0YXQ7CiAJaW50IGk7CiAKLQlzcGluX2xvY2soJnRpbWVyX3JlZ19sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZ0aW1lcl9yZWdfbG9jayk7CiAJc3RhdCA9IGJjbV90aW1lcl9yZWFkbChUSU1FUl9JUlFTVEFUX1JFRyk7CiAJYmNtX3RpbWVyX3dyaXRlbChzdGF0LCBUSU1FUl9JUlFTVEFUX1JFRyk7Ci0Jc3Bpbl91bmxvY2soJnRpbWVyX3JlZ19sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnRpbWVyX3JlZ19sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBCQ002M1hYX1RJTUVSX0NPVU5UOyBpKyspIHsKIAkJaWYgKCEoc3RhdCAmIFRJTUVSX0lSUVNUQVRfVElNRVJfQ0FVU0UoaSkpKQogCQkJY29udGludWU7CiAKLQkJc3Bpbl9sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOwogCQlpZiAoIXRpbWVyX2RhdGFbaV0uY2IpIHsKLQkJCXNwaW5fdW5sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOwogCQkJY29udGludWU7CiAJCX0KIAogCQl0aW1lcl9kYXRhW2ldLmNiKHRpbWVyX2RhdGFbaV0uZGF0YSk7Ci0JCXNwaW5fdW5sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnRpbWVyX2RhdGFfbG9jayk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNjEsNyArNjEsNyBAQAogCWlmIChpZCA+PSBCQ002M1hYX1RJTUVSX0NPVU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAogCXJlZyA9IGJjbV90aW1lcl9yZWFkbChUSU1FUl9DVEx4X1JFRyhpZCkpOwogCXJlZyB8PSBUSU1FUl9DVExfRU5BQkxFX01BU0s7CkBAIC03MSw3ICs3MSw3IEBACiAJcmVnIHw9IFRJTUVSX0lSUVNUQVRfVElNRVJfSVJfRU4oaWQpOwogCWJjbV90aW1lcl93cml0ZWwocmVnLCBUSU1FUl9JUlFTVEFUX1JFRyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC04NSw3ICs4NSw3IEBACiAJaWYgKGlkID49IEJDTTYzWFhfVElNRVJfQ09VTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCiAJcmVnID0gYmNtX3RpbWVyX3JlYWRsKFRJTUVSX0NUTHhfUkVHKGlkKSk7CiAJcmVnICY9IH5USU1FUl9DVExfRU5BQkxFX01BU0s7CkBAIC05NSw3ICs5NSw3IEBACiAJcmVnICY9IH5USU1FUl9JUlFTVEFUX1RJTUVSX0lSX0VOKGlkKTsKIAliY21fdGltZXJfd3JpdGVsKHJlZywgVElNRVJfSVJRU1RBVF9SRUcpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEwLDcgKzExMCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gMDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKIAlpZiAodGltZXJfZGF0YVtpZF0uY2IpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXRpbWVyX2RhdGFbaWRdLmRhdGEgPSBkYXRhOwogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzMyw5ICsxMzMsOSBAQAogCWlmIChpZCA+PSBCQ002M1hYX1RJTUVSX0NPVU5UKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKIAl0aW1lcl9kYXRhW2lkXS5jYiA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOwogfQogCiBFWFBPUlRfU1lNQk9MKGJjbTYzeHhfdGltZXJfdW5yZWdpc3Rlcik7CkBAIC0xNTksNyArMTU5LDcgQEAKIAlpZiAoY291bnRkb3duICYgflRJTUVSX0NUTF9DT1VOVERPV05fTUFTSykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAJcmVnID0gYmNtX3RpbWVyX3JlYWRsKFRJTUVSX0NUTHhfUkVHKGlkKSk7CiAKIAlpZiAobW9ub3RvbmljKQpAQCAtMTcxLDcgKzE3MSw3IEBACiAJcmVnIHw9IGNvdW50ZG93bjsKIAliY21fdGltZXJfd3JpdGVsKHJlZywgVElNRVJfQ1RMeF9SRUcoaWQpKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDlkZjkwM2QuLjc5MGRkZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtOSw3ICs5LDcgQEAKICMgbW9kaWZpZWQgYnkgQ29ydCAoY29ydEBjcy5ubXQuZWR1KQogIwogIyBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5Ci0jIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyMgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAjCiAKICMgY29tcHJlc3NlZCBrZXJuZWwgbG9hZCBhZGRyOiBWTUxJTlVaX0xPQURfQUREUkVTUyA+IFZNTElOVVhfTE9BRF9BRERSRVNTICsgVk1MSU5VWF9TSVpFCkBAIC0yNywxNSArMjcsMTggQEAKIEtCVUlMRF9DRkxBR1MgOj0gJChzaGVsbCBlY2hvICQoS0JVSUxEX0NGTEFHUykgfCBzZWQgLWUgInMvLXBnLy8iKQogCiBLQlVJTERfQ0ZMQUdTIDo9ICQoTElOVVhJTkNMVURFKSAkKEtCVUlMRF9DRkxBR1MpIC1EX19LRVJORUxfXyBcCi0JLURCT09UX0hFQVBfU0laRT0kKEJPT1RfSEVBUF9TSVpFKSAtRCJWTUxJTlVYX0xPQURfQUREUkVTU19VTEw9JChWTUxJTlVYX0xPQURfQUREUkVTUyl1bGwiIFwKKwktREJPT1RfSEVBUF9TSVpFPSQoQk9PVF9IRUFQX1NJWkUpIC1EIlZNTElOVVhfTE9BRF9BRERSRVNTX1VMTD0kKFZNTElOVVhfTE9BRF9BRERSRVNTKXVsbCIKIAogS0JVSUxEX0FGTEFHUyA6PSAkKExJTlVYSU5DTFVERSkgJChLQlVJTERfQUZMQUdTKSAtRF9fQVNTRU1CTFlfXyBcCi0JLURLRVJORUxfRU5UUlk9MHgkKHNoZWxsICQoTk0pICQob2JqdHJlZSkvJChLQlVJTERfSU1BR0UpIDI+L2Rldi9udWxsIHwgZ3JlcCAiIGtlcm5lbF9lbnRyeSIgfCBjdXQgLWYxIC1kIFwgKSBcCi0JLURCT09UX0hFQVBfU0laRT0kKEJPT1RfSEVBUF9TSVpFKQorCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkgXAorCS1ES0VSTkVMX0VOVFJZPTB4JChzaGVsbCAkKE5NKSAkKG9ianRyZWUpLyQoS0JVSUxEX0lNQUdFKSAyPi9kZXYvbnVsbCB8IGdyZXAgIiBrZXJuZWxfZW50cnkiIHwgY3V0IC1mMSAtZCBcICkKIAogb2JqLXkgOj0gJChvYmopL2hlYWQubyAkKG9iaikvZGVjb21wcmVzcy5vICQob2JqKS9kYmcubwogCitpZmRlZiBDT05GSUdfREVCVUdfWkJPT1QKIG9iai0kKENPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwKSArPSAkKG9iaikvdWFydC0xNjU1MC5vCitvYmotJChDT05GSUdfTUFDSF9BTENIRU1ZKQkJICAgKz0gJChvYmopL3VhcnQtYWxjaGVteS5vCitlbmRpZgogCiBPQkpDT1BZRkxBR1Nfdm1saW51eC5iaW4gOj0gJChPQkpDT1BZRkxBR1MpIC1PIGJpbmFyeSAtUiAuY29tbWVudCAtUwogJChvYmopL3ZtbGludXguYmluOiAkKEtCVUlMRF9JTUFHRSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGJnLmMgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RiZy5jCmluZGV4IGZmNGRjN2EuLjEzNGE2MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGJnLmMKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kYmcuYwpAQCAtNSwxMSArNSwxMSBAQAogICogcGxlYXNlIHNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwIGZvciB5b3VyIG1hY2hpbmUuIG90aGV3aXNlLCB5b3UKICAqIG5lZWQgdG8gaW1wbGVtZW50IHlvdXIgb3duIHB1dGMoKS4KICAqLwotCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgod2VhaykpIHB1dGMoY2hhciBjKQordm9pZCBfX3dlYWsgcHV0YyhjaGFyIGMpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKaW5kZXggNTVkMDJiMy4uNWRiNDNjNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMKQEAgLTUsOCArNSw4IEBACiAgKiBBdXRob3I6IE1hdHQgUG9ydGVyIDxtcG9ydGVyQG12aXN0YS5jb20+IERlcml2ZWQgZnJvbQogICogYXJjaC9wcGMvYm9vdC9wcmVwL21pc2MuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtYWxjaGVteS5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmZmMjJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisKK3ZvaWQgcHV0YyhjaGFyIGMpCit7CisJLyogYWxsIGN1cnJlbnQgKEphbi4gMjAxMCkgaW4ta2VybmVsIGJvYXJkcyAqLworCWFsY2hlbXlfdWFydF9wdXRjaGFyKFVBUlQwX1BIWVNfQUREUiwgYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9kbWEtb2N0ZW9uLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9kbWEtb2N0ZW9uLmMKaW5kZXggNGI5MmJmYy4uYmU1MzFlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZG1hLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2RtYS1vY3Rlb24uYwpAQCAtNDEsNyArNDEsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmFyMV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGJhcjFfbG9jayk7CiBzdGF0aWMgc3RydWN0IGJhcjFfaW5kZXhfc3RhdGUgYmFyMV9zdGF0ZVszMl07CiAjZW5kaWYKIApAQCAtMTk4LDcgKzE5OCw3IEBACiAJCXN0YXJ0X2luZGV4ID0gMzE7CiAKIAkvKiBPbmx5IG9uZSBwcm9jZXNzb3IgY2FuIGFjY2VzcyB0aGUgQmFyIHJlZ2lzdGVyIGF0IG9uY2UgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmFyMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiYXIxX2xvY2ssIGZsYWdzKTsKIAogCS8qIExvb2sgdGhyb3VnaCBCYXIxIGZvciBleGlzdGluZyBtYXBwaW5nIHRoYXQgd2lsbCB3b3JrICovCiAJZm9yIChpbmRleCA9IHN0YXJ0X2luZGV4OyBpbmRleCA+PSAwOyBpbmRleC0tKSB7CkBAIC0yNTAsNyArMjUwLDcgQEAKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGh5c2ljYWwpOwogCiBkb25lX3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXIxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFyMV9sb2NrLCBmbGFncyk7CiBkb25lOgogCXByX2RlYnVnKCJkbWFfbWFwX3NpbmdsZSAweCVsbHgtPjB4JWxseFxuIiwgcGh5c2ljYWwsIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTMyNCwxNCArMzI0LDE0IEBACiAJCSAgICAgICJBdHRlbXB0IHRvIHVubWFwIGFuIGludmFsaWQgYWRkcmVzcyAoMHglbGx4KVxuIiwKIAkJICAgICAgZG1hX2FkZHIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJhcjFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmFyMV9sb2NrLCBmbGFncyk7CiAJYmFyMV9zdGF0ZVtpbmRleF0ucmVmX2NvdW50LS07CiAJaWYgKGJhcjFfc3RhdGVbaW5kZXhdLnJlZl9jb3VudCA9PSAwKQogCQlvY3Rlb25fbnBpX3dyaXRlMzIoQ1ZNWF9OUElfUENJX0JBUjFfSU5ERVhYKGluZGV4KSwgMCk7CiAJZWxzZSBpZiAodW5saWtlbHkoYmFyMV9zdGF0ZVtpbmRleF0ucmVmX2NvdW50IDwgMCkpCiAJCXBhbmljKCJkbWFfdW5tYXBfc2luZ2xlOiBCYXIxWyV1XSByZWZlcmVuY2UgY291bnQgPCAwXG4iLAogCQkgICAgICAoaW50KSBpbmRleCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFyMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhcjFfbG9jaywgZmxhZ3MpOwogZG9uZToKIAlwcl9kZWJ1ZygiZG1hX3VubWFwX3NpbmdsZSAweCVsbHhcbiIsIGRtYV9hZGRyKTsKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1ib290bWVtLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1ib290bWVtLmMKaW5kZXggMjU2NjZkYS4uZmRmNWYxOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtYm9vdG1lbS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LWJvb3RtZW0uYwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJICogaW1wb3NzaWJsZSByZXF1ZXN0cyB1cCBmcm9udC4gKE5PUCBmb3IgYWRkcmVzc19taW4gPT0gMCkKIAkgKi8KIAlpZiAoYWxpZ25tZW50KQotCQlhZGRyZXNzX21pbiA9IF9fQUxJR05fTUFTSyhhZGRyZXNzX21pbiwgKGFsaWdubWVudCAtIDEpKTsKKwkJYWRkcmVzc19taW4gPSBBTElHTihhZGRyZXNzX21pbiwgYWxpZ25tZW50KTsKIAogCS8qCiAJICogUmVqZWN0IGluY29uc2lzdGVudCBhcmdzLiAgV2UgaGF2ZSBhZGp1c3RlZCB0aGVzZSwgc28gdGhpcwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCSAqIHNhdGlzZnkgcmVxdWVzdC4KIAkJICovCiAJCXVzYWJsZV9iYXNlID0KLQkJICAgIF9fQUxJR05fTUFTSyhtYXgoYWRkcmVzc19taW4sIGVudF9hZGRyKSwgYWxpZ25tZW50IC0gMSk7CisJCSAgICBBTElHTihtYXgoYWRkcmVzc19taW4sIGVudF9hZGRyKSwgYWxpZ25tZW50KTsKIAkJdXNhYmxlX21heCA9IG1pbihhZGRyZXNzX21heCwgZW50X2FkZHIgKyBlbnRfc2l6ZSk7CiAJCS8qCiAJCSAqIFdlIHNob3VsZCBiZSBhYmxlIHRvIGFsbG9jYXRlIGJsb2NrIGF0IGFkZHJlc3MKQEAgLTY3MSw3ICs2NzEsNyBAQAogCSAqIGNvYWxsZXNjZWQgd2hlbiB0aGV5IGFyZSBmcmVlZC4gIFRoZSBhbGxvYyByb3V0aW5lIGRvZXMgdGhlCiAJICogc2FtZSByb3VuZGluZyB1cCBvbiBhbGwgYWxsb2NhdGlvbnMuCiAJICovCi0Jc2l6ZSA9IF9fQUxJR05fTUFTSyhzaXplLCAoQ1ZNWF9CT09UTUVNX0FMSUdOTUVOVF9TSVpFIC0gMSkpOworCXNpemUgPSBBTElHTihzaXplLCBDVk1YX0JPT1RNRU1fQUxJR05NRU5UX1NJWkUpOwogCiAJYWRkcl9hbGxvY2F0ZWQgPSBjdm14X2Jvb3RtZW1fcGh5X2FsbG9jKHNpemUsIG1pbl9hZGRyLCBtYXhfYWRkciwKIAkJCQkJCWFsaWdubWVudCwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LXN5c2luZm8uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LXN5c2luZm8uYwppbmRleCBlNTgzODg5Li44YjE4YTIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1zeXNpbmZvLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtc3lzaW5mby5jCkBAIC0xMTUsNCArMTE1LDMgQEAKIAogCXJldHVybiAxOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKaW5kZXggNmYyYWNmMC4uYzQyNGNkMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwpAQCAtMTMsOSArMTMsOCBAQAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vY3ZteC1wZXhwLWRlZnMuaD4KICNpbmNsdWRlIDxhc20vb2N0ZW9uL2N2bXgtbnBpLWRlZnMuaD4KIAotREVGSU5FX1JXTE9DSyhvY3Rlb25faXJxX2NpdTBfcndsb2NrKTsKLURFRklORV9SV0xPQ0sob2N0ZW9uX2lycV9jaXUxX3J3bG9jayk7Ci1ERUZJTkVfU1BJTkxPQ0sob2N0ZW9uX2lycV9tc2lfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhvY3Rlb25faXJxX2NpdTBfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhvY3Rlb25faXJxX2NpdTFfbG9jayk7CiAKIHN0YXRpYyBpbnQgb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGludCBjcHUpCiB7CkBAIC01MSw5ICs1MCw2IEBACiAJICovCiAJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkKIAkJcmV0dXJuOwotCi0JLyogVGhlcmUgaXMgYSByYWNlIGhlcmUuICBXZSBzaG91bGQgZml4IGl0LiAgKi8KLQogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIElSUXMgdG8gbWFrZSB0aGVzZSBhdG9taWMgc2luY2UKIAkgKiB0aGV5IGFyZSBhbHJlYWR5IGRpc2FibGVkIGVhcmxpZXIgaW4gdGhlIGxvdyBsZXZlbApAQCAtMTQxLDE5ICsxMzcsMTIgQEAKIAl1aW50NjRfdCBlbjA7CiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV09SS1EwOwkvKiBCaXQgMC02MyBvZiBFTjAgKi8KIAotCS8qCi0JICogQSByZWFkIGxvY2sgaXMgdXNlZCBoZXJlIHRvIG1ha2Ugc3VyZSBvbmx5IG9uZSBjb3JlIGlzIGV2ZXIKLQkgKiB1cGRhdGluZyB0aGUgQ0lVIGVuYWJsZSBiaXRzIGF0IGEgdGltZS4gRHVyaW5nIGFuIGVuYWJsZQotCSAqIHRoZSBjb3JlcyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLiBEdXJpbmcgYSBkaXNhYmxlCi0JICogdGhlIHdyaXRlIGxvY2sgc3RvcHMgYW55IGVuYWJsZXMgdGhhdCBtaWdodCBjYXVzZSBhCi0JICogcHJvYmxlbS4KLQkgKi8KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIAllbjAgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKIAllbjAgfD0gMXVsbCA8PCBiaXQ7CiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMiksIGVuMCk7CiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTYyLDcgKzE1MSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjA7CiAJaW50IGNwdTsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQllbjAgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKQEAgLTE3NCw3ICsxNjMsNyBAQAogCSAqIG9mIHRoZW0gYXJlIGRvbmUuCiAJICovCiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjdm14X2dldF9jb3JlX251bSgpICogMikpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0xOTMsNyArMTgyLDcgQEAKICAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CiAgKiByZWdpc3RlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfYWNrX3YyKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CiAJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CkBAIC0yMDIsNiArMTkxLDQzIEBACiB9CiAKIC8qCisgKiBDSVUgdGltZXIgdHlwZSBpbnRlcnJ1cHRzIG11c3QgYmUgYWNrbm9sZWdlZCBieSB3cml0aW5nIGEgJzEnIGJpdAorICogdG8gdGhlaXIgc3VtMCBiaXQuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMjsKKwl1aW50NjRfdCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfU1VNMChpbmRleCksIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrX3YxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2FjayhpcnEpOworCW9jdGVvbl9pcnFfY2l1MF9hY2soaXJxKTsKK30KKworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fja192Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCW9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2soaXJxKTsKKwlvY3Rlb25faXJxX2NpdTBfYWNrX3YyKGlycSk7Cit9CisKKy8qCisgKiBFbmFibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF9lb2lfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMjsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKworCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSA9PSAwKQorCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMF9XMVMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKICAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgYWxsIGNvcmVzIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CiAgKiByZWdpc3RlcnMuCiAgKi8KQEAgLTIyMyw3ICsyNDksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV09SS1EwOwkvKiBCaXQgMC02MyBvZiBFTjAgKi8KIAotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCXVpbnQ2NF90IGVuMCA9CkBAIC0yMzksNyArMjY1LDcgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIpKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzIsOCArMjk4LDggQEAKIAkubmFtZSA9ICJDSVUwIiwKIAkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKIAkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKLQkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfdjIsCi0JLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MF9hY2tfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2lfdjIsCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAogI2VuZGlmCkBAIC0yOTAsNiArMzE2LDI4IEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXJfdjIgPSB7CisJLm5hbWUgPSAiQ0lVMC1UIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fja192MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUwX2VvaV92MiwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHlfdjIsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXIgPSB7CisJLm5hbWUgPSAiQ0lVMC1UIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlLAorCS5hY2sgPSBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrX3YxLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTBfZW9pLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUwX3NldF9hZmZpbml0eSwKKyNlbmRpZgorfTsKKwogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC0zMjIsMTkgKzM3MCwxMiBAQAogCXVpbnQ2NF90IGVuMTsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQkvKgotCSAqIEEgcmVhZCBsb2NrIGlzIHVzZWQgaGVyZSB0byBtYWtlIHN1cmUgb25seSBvbmUgY29yZSBpcyBldmVyCi0JICogdXBkYXRpbmcgdGhlIENJVSBlbmFibGUgYml0cyBhdCBhIHRpbWUuICBEdXJpbmcgYW4gZW5hYmxlCi0JICogdGhlIGNvcmVzIGRvbid0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuICBEdXJpbmcgYSBkaXNhYmxlCi0JICogdGhlIHdyaXRlIGxvY2sgc3RvcHMgYW55IGVuYWJsZXMgdGhhdCBtaWdodCBjYXVzZSBhCi0JICogcHJvYmxlbS4KLQkgKi8KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIAllbjEgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSk7CiAJZW4xIHw9IDF1bGwgPDwgYml0OwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSwgZW4xKTsKIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSk7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMzQzLDcgKzM4NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjE7CiAJaW50IGNwdTsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQllbjEgPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGNvcmVpZCAqIDIgKyAxKSk7CkBAIC0zNTUsNyArMzk2LDcgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTM3NCw3ICs0MTUsNyBAQAogICogRGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KICAqIHJlZ2lzdGVycy4KICAqLwotc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGVfdjIodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9hY2tfdjIodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMiArIDE7CiAJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dET0cwKTsKQEAgLTM4Myw2ICs0MjQsMjAgQEAKIH0KIAogLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2VvaV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpID09IDApCisJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOworfQorCisvKgogICogRGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBhbGwgY29yZXMgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KICAqIHJlZ2lzdGVycy4KICAqLwpAQCAtNDA1LDcgKzQ2MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQl1aW50NjRfdCBlbjEgPQpAQCAtNDIyLDcgKzQ3Nyw3IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMSkpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1NSw4ICs1MTAsOCBAQAogCS5uYW1lID0gIkNJVTAiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyLAogCS5kaXNhYmxlID0gb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGVfYWxsX3YyLAotCS5hY2sgPSBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV92MiwKLQkuZW9pID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUxX2Fja192MiwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUxX2VvaV92MiwKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MV9zZXRfYWZmaW5pdHlfdjIsCiAjZW5kaWYKQEAgLTQ3NSw2ICs1MzAsOCBAQAogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAorc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sob2N0ZW9uX2lycV9tc2lfbG9jayk7CisKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfbXNpX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewogCWlmICghb2N0ZW9uX2hhc19mZWF0dXJlKE9DVEVPTl9GRUFUVVJFX1BDSUUpKSB7CkBAIC01MTUsMTIgKzU3MiwxMiBAQAogCQkgKi8KIAkJdWludDY0X3QgZW47CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwogCQllbiA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjApOwogCQllbiB8PSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX01TSV9CSVQwKTsKIAkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjAsIGVuKTsKIAkJY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTUzNywxMiArNTk0LDEyIEBACiAJCSAqLwogCQl1aW50NjRfdCBlbjsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CiAJCWVuID0gY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7CiAJCWVuICY9IH4oMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9NU0lfQklUMCkpOwogCQljdm14X3dyaXRlX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCwgZW4pOwogCQljdm14X3JlYWRfY3NyKENWTVhfUEVYUF9OUEVJX01TSV9FTkIwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtNTU5LDYgKzYxNiw3IEBACiB7CiAJaW50IGlycTsKIAlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAwOworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDBfdGltZXI7CiAJc3RydWN0IGlycV9jaGlwICpjaGlwMTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTU3NCw5ICs2MzIsMTEgQEAKIAkgICAgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFhfUEFTUzJfWCkgfHwKIAkgICAgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFhfUEFTUzJfWCkpIHsKIAkJY2hpcDAgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfdjI7CisJCWNoaXAwX3RpbWVyID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwX3RpbWVyX3YyOwogCQljaGlwMSA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MV92MjsKIAl9IGVsc2UgewogCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MDsKKwkJY2hpcDBfdGltZXIgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTBfdGltZXI7CiAJCWNoaXAxID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxOwogCX0KIApAQCAtNTkwLDcgKzY1MCwyMSBAQAogCiAJLyogMjQgLSA4NyBDSVVfSU5UX1NVTTAgKi8KIAlmb3IgKGlycSA9IE9DVEVPTl9JUlFfV09SS1EwOyBpcnEgPD0gT0NURU9OX0lSUV9CT09URE1BOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMCwgaGFuZGxlX3BlcmNwdV9pcnEpOworCQlzd2l0Y2ggKGlycSkgeworCQljYXNlIE9DVEVPTl9JUlFfR01YX0RSUDA6CisJCWNhc2UgT0NURU9OX0lSUV9HTVhfRFJQMToKKwkJY2FzZSBPQ1RFT05fSVJRX0lQRF9EUlA6CisJCWNhc2UgT0NURU9OX0lSUV9LRVlfWkVSTzoKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMDoKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMToKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMjoKKwkJY2FzZSBPQ1RFT05fSVJRX1RJTUVSMzoKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwX3RpbWVyLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJCQlicmVhazsKKwkJfQogCX0KIAogCS8qIDg4IC0gMTUxIENJVV9JTlRfU1VNMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYwppbmRleCBjZmRiNGMyLi42MmFjMzBlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIApAQCAtMTU5LDYgKzE2MCw5MCBAQAogfQogZGV2aWNlX2luaXRjYWxsKG9jdGVvbl9ybmdfZGV2aWNlX2luaXQpOwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgb2N0ZW9uX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiZHMxMzM3IiwgMHg2OCksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfZGV2aWNlc19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG9jdGVvbl9pMmNfZGV2aWNlcywKKwkJCQkgICAgICAgQVJSQVlfU0laRShvY3Rlb25faTJjX2RldmljZXMpKTsKK30KK2FyY2hfaW5pdGNhbGwob2N0ZW9uX2kyY19kZXZpY2VzX2luaXQpOworCisjZGVmaW5lIE9DVEVPTl9JMkNfSU9fQkFTRSAweDExODAwMDAwMDEwMDB1bGwKKyNkZWZpbmUgT0NURU9OX0kyQ19JT19VTklUX09GRlNFVCAweDIwMAorCitzdGF0aWMgc3RydWN0IG9jdGVvbl9pMmNfZGF0YSBvY3Rlb25faTJjX2RhdGFbMl07CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcG9ydCwgbnVtX3BvcnRzOworCisJc3RydWN0IHJlc291cmNlIGkyY19yZXNvdXJjZXNbXSA9IHsKKwkJeworCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCX0sIHsKKwkJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQl9CisJfTsKKworCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkgfHwgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFgpKQorCQludW1fcG9ydHMgPSAyOworCWVsc2UKKwkJbnVtX3BvcnRzID0gMTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBudW1fcG9ydHM7IHBvcnQrKykgeworCQlvY3Rlb25faTJjX2RhdGFbcG9ydF0uc3lzX2ZyZXEgPSBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKTsKKwkJLypGSVhNRTogc2hvdWxkIGJlIGV4YW1pbmVkLiBBdCB0aGUgbW9tZW50IGlzIHNldCBmb3IgMTAwS2h6ICovCisJCW9jdGVvbl9pMmNfZGF0YVtwb3J0XS5pMmNfZnJlcSA9IDEwMDAwMDsKKworCQlwZCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiaTJjLW9jdGVvbiIsIHBvcnQpOworCQlpZiAoIXBkKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlwZC0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBvY3Rlb25faTJjX2RhdGEgKyBwb3J0OworCisJCWkyY19yZXNvdXJjZXNbMF0uc3RhcnQgPQorCQkJT0NURU9OX0kyQ19JT19CQVNFICsgKHBvcnQgKiBPQ1RFT05fSTJDX0lPX1VOSVRfT0ZGU0VUKTsKKwkJaTJjX3Jlc291cmNlc1swXS5lbmQgPSBpMmNfcmVzb3VyY2VzWzBdLnN0YXJ0ICsgMHgxZjsKKwkJc3dpdGNoIChwb3J0KSB7CisJCWNhc2UgMDoKKwkJCWkyY19yZXNvdXJjZXNbMV0uc3RhcnQgPSBPQ1RFT05fSVJRX1RXU0k7CisJCQlpMmNfcmVzb3VyY2VzWzFdLmVuZCA9IE9DVEVPTl9JUlFfVFdTSTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpMmNfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gT0NURU9OX0lSUV9UV1NJMjsKKwkJCWkyY19yZXNvdXJjZXNbMV0uZW5kID0gT0NURU9OX0lSUV9UV1NJMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZCwKKwkJCQkJCSAgICBpMmNfcmVzb3VyY2VzLAorCQkJCQkJICAgIEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlcykpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGQpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsOworCX0KKwlyZXR1cm4gcmV0OworZmFpbDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorZGV2aWNlX2luaXRjYWxsKG9jdGVvbl9pMmNfZGV2aWNlX2luaXQpOworCiAvKiBPY3Rlb24gU01JL01ESU8gaW50ZXJmYWNlLiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9tZGlvYnVzX2RldmljZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCmluZGV4IGMxOThlZmQuLjUxZTk4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAkJCQkgICBhdmFpbF9jb3JlbWFzayk7CiAJfQogCi0JcHJfaW5mbygiUmVzZXQgY29yZSAlZC4gQXZhaWxhYmxlIENvcmVtYXNrID0gJXggXG4iLCBjb3JlaWQsCisJcHJfaW5mbygiUmVzZXQgY29yZSAlZC4gQXZhaWxhYmxlIENvcmVtYXNrID0gJXhcbiIsIGNvcmVpZCwKIAkJYXZhaWxfY29yZW1hc2spOwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1BQX1JTVCwgMSA8PCBjb3JlaWQpOwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1BQX1JTVCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L3BjaS5jIGIvYXJjaC9taXBzL2NvYmFsdC9wY2kuYwppbmRleCBjZmNlN2FmLi44NWVjOWNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29iYWx0L3BjaS5jCisrKyBiL2FyY2gvbWlwcy9jb2JhbHQvcGNpLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2JhbHRfaW9fcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CT0gMHgxMDAwLAotCS5lbmQJPSBHVF9ERUZfUENJMF9JT19TSVpFIC0gMSwKKwkuZW5kCT0gMHhmZmZmZmZVTCwKIAkubmFtZQk9ICJQQ0kgSS9PIiwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCmluZGV4IDY4ZTkwY2QuLmY2NmQ0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwpAQCAtMSw3OCArMSwxMDIgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjI0IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDA4OjQ2OjE0IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfREIxMDAwPXkKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0RCMTAwMD15CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTEwMDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxMDAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODUsNiArMTA5LDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkyLDExICsxMTcsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDYsMTg0ICsxMzQsMjQ0IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTAwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCiAjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI5NCwxMTAgKzM4MiwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDA3LDI3ICs0MTAsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDM2LDI1ICs0MzYsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5MiwxNCArNDkzLDEzIEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTE2LDE3NCArNTE2LDExNSBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiBDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfM0M1ODk9bQotQ09ORklHX1BDTUNJQV8zQzU3ND1tCi1DT05GSUdfUENNQ0lBX0ZNVkoxOFg9bQotQ09ORklHX1BDTUNJQV9QQ05FVD1tCi1DT05GSUdfUENNQ0lBX05NQ0xBTj1tCi1DT05GSUdfUENNQ0lBX1NNQzkxQzkyPW0KLUNPTkZJR19QQ01DSUFfWElSQzJQUz1tCi1DT05GSUdfUENNQ0lBX0FYTkVUPW0KLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC02OTEsMTYgKzYzMiwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNzEwLDM1ICs2NDksMzMgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQotQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DUz1tCisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNzUwLDE5OCArNjg3LDI5MSBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBISUQgRGV2aWNlcworIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgU3BlY2lhbCBISUQgZHJpdmVycwogIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRyaXZlcnMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIExFRCBUcmlnZ2VycworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgVEkgVkxZTlEKICMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC05NjAsNzQgKzk5MCw2NSBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0NSQU1GUz15CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldApAQCAtMTA0NSwxMCArMTA2NiwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKICMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKQEAgLTEwNTgsMzggKzEwNzksNzUgQEAKICMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTA5Nyw2NyArMTE1NSwyOSBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwppbmRleCA5MDgxMjgzLi5hYmI5YTU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAwODo1MDoxNSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTEwMD15Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjExMDA9eQorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTEwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE3MyArMTM0LDI0MiBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1kYjExMDAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CiAKICMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIyBQQy1jYXJkIGJyaWRnZXMKICMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI4MywxMTAgKzM4MCwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzk2LDI3ICs0MDgsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDI1LDI1ICs0MzQsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NTYsNiArNDY1LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00ODEsMTQgKzQ5MSwxMyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUwNSwxNjEgKzUxNCwxMjMgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQogCiAjCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwotIyBCbG9jayBkZXZpY2VzCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwogCiAjCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC02NjcsMTYgKzYzOCwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNjg2LDM0ICs2NTUsMzMgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPW0KLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC03MjUsNzggKzY5Myw5MSBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBQUFMgc3VwcG9ydAogIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVUxMTAwPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC04MDQsOSArNzg1LDEwIEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKLUNPTkZJR19GT05UXzh4OD15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDE2PXkKICMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldApAQCAtODE2LDEzMiArNzk4LDE4NiBAQAogIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRyaXZlcnMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIExFRCBUcmlnZ2VycworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgVEkgVkxZTlEKICMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKLQotIwotIyBETUEgQ2xpZW50cwotIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTYwLDY5ICs5OTYsNzYgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CitDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19KRkZTMl9GU19TRUNVUklUWT15CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKQEAgLTEwNjIsMzQgKzExMDUsNzEgQEAKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTA5Nyw2NyArMTE3NywzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwppbmRleCBkYWJmMDMwLi45OTFjMjBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNSAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAxMDoxODowOSAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTIwMD15Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjEyMDA9eQorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMjAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTIwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE4MCArMTM0LDIzNSBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19LU009eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItZGIxMjAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwotQ09ORklHX1BDTUNJQV9BVTFYMDA9bQotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0yOTAsMTA3ICszNzMsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDAwLDIxICs0MDEsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDIzLDI1ICs0MjcsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDU0LDYgKzQ1OCw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDc5LDE5ICs0ODQsMjEgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTUwMywyMjQgKzUxMCwxMzQgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogQ09ORklHX01URF9OQU5EPXkKICMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz15CiAjIENPTkZJR19NVERfTkFORF9BVTE1NTAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9VQj15CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15Ci1DT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKKyMgQ09ORklHX0lERV9QUk9DX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYPXkKIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfUElPX0RCRE1BPXkKICMgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX1NFUVRTX1BFUl9SUT0xMjgKLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9UR1Q9bQorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIFNDU0kgYWRhcHRlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ01DSUFfQUhBMTUyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfRkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfTklOSkFfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfUUxPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9TWU01M0M1MDAgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVTFYMDBfRU5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTcyOCwxNiArNjQ1LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC03NDcsMjggKzY2MiwyNiBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPXkKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTc3NiwzMyArNjg5LDIyIEBACiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwpAQCAtODExLDIyMyArNzEzLDYyNCBAQAogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0NIQVJERVY9eQorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRPIGlzIG5vdCBzZXQKIAogIwotIyBJMkMgc3VwcG9ydAorIyBJMkMgQWxnb3JpdGhtcwogIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKIAogIwotIyBTUEkgc3VwcG9ydAorIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19BVTE1NTA9eQorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FVMTU1MD15CitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CitDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIyBOYXRpdmUgZHJpdmVycwogIwotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0FETTEwMjU9eQorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTcwPXkKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVUxMjAwPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBMb2dvIGNvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgSElEIERldmljZXMKLSMKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVFM9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9BQzk3X0NPREVDPXkKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0M9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQ19JMlM9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQ19BQzk3PXkKK0NPTkZJR19TTkRfU09DX0RCMTIwMD15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15CisjIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0NfQUM5N19DT0RFQz15CitDT05GSUdfU05EX1NPQ19XTTg3MzE9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPXkKK0NPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSElEUkFXPXkKIAogIwotIyBVU0Igc3VwcG9ydAorIyBVU0IgSW5wdXQgRGV2aWNlcwogIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCi1DT05GSUdfVVNCX0dBREdFVD1tCi0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19BVTFYPXkKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZGV2aWNlcworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKICMKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQkxPQ0s9eQorIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19BVTFYPXkKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CiAKICMKICMgTEVEIGRyaXZlcnMKICMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0CiAKICMKICMgTEVEIFRyaWdnZXJzCiAjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKICMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFJUQyBpbnRlcmZhY2VzCiAjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKKyMgSTJDIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIERldmljZXMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAorIyBUSSBWTFlOUQogIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRlNfRlM9eQotIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCi1DT05GSUdfSVNPOTY2MF9GUz1tCitDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQotQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX0ZTPXkKIENPTkZJR19VREZfTkxTPXkKIAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCi1DT05GSUdfRkFUX0ZTPW0KLUNPTkZJR19NU0RPU19GUz1tCi1DT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldApAQCAtMTAzNiwyMSArMTMzOSwxNyBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDU5LDI3ICsxMzU4LDM2IEBACiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKICMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQogQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQpAQCAtMTA4Nyw5MyArMTM5NSwxNDAgQEAKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz15Ci0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIworIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRUZJX1BBUlRJVElPTj15CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfOD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KLUNPTkZJR19OTFNfQVNDSUk9bQotQ09ORklHX05MU19JU084ODU5XzE9bQotQ09ORklHX05MU19JU084ODU5XzI9bQotQ09ORklHX05MU19JU084ODU5XzM9bQotQ09ORklHX05MU19JU084ODU5XzQ9bQotQ09ORklHX05MU19JU084ODU5XzU9bQotQ09ORklHX05MU19JU084ODU5XzY9bQotQ09ORklHX05MU19JU084ODU5Xzc9bQotQ09ORklHX05MU19JU084ODU5Xzk9bQotQ09ORklHX05MU19JU084ODU5XzEzPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTU9bQotQ09ORklHX05MU19LT0k4X1I9bQotQ09ORklHX05MU19LT0k4X1U9bQotQ09ORklHX05MU19VVEY4PW0KLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0ibWVtPTQ4TSIKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCIKICMgQ09ORklHX0NNRExJTkVfT1ZFUlJJREUgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExODEsNjcgKzE1MzYsMzIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19ITUFDPW0KLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwppbmRleCBhMTUxMzEzLi41NDI0YzkxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTEsODAgKzEsMTA0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNiAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAwODo0NjozMyAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTUwMD15Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjE1MDA9eQorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxNTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTE1MDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Nyw2ICsxMTEsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTQsMTEgKzExOSwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwOCwxMzcgKzEzNiwyMDcgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTUwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLUNPTkZJR19DQVJEQlVTPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKQEAgLTI0Niw1MSArMzQ0LDQ5IEBACiAjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAogIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUFfQVUxWDAwPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCisjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMzAxLDExMCArMzk3LDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORl9DVF9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MTQsMjcgKzQyNSwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00NDMsMjUgKzQ1MSwyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDc0LDYgKzQ4Miw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk5LDE0ICs1MDgsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyNCwxNTIgKzUzMywxNTIgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBNaXNjIGRldmljZXMKLSMKLUNPTkZJR19TR0lfSU9DND1tCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQogIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCiAjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKK0NPTkZJR19CTEtfREVWX0lERVBDST15CisjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9IUFQzNjY9eQorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX1BIWUxJQj15CiAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKQEAgLTY3Nyw4OCArNjg2LDUxIEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTc2NiwxNiArNzM4LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC03ODUsMzMgKzc1NSwzNCBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKQEAgLTgyNSwzMDEgKzc5NiwxNDMgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIworQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19TT1VORD15CisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKLUNPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi1DT05GSUdfU05EX1JBV01JREk9bQotQ09ORklHX1NORF9TRVFVRU5DRVI9bQotQ09ORklHX1NORF9TRVFfRFVNTVk9bQotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPW0KLUNPTkZJR19TTkRfUENNX09TUz1tCi1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci1DT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVklSTUlEST1tCi1DT05GSUdfU05EX01UUEFWPW0KLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi0jCi0jIFBDSSBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBNSVBTIGRldmljZXMKLSMKLUNPTkZJR19TTkRfQVUxWDAwPW0KLQotIwotIyBVU0IgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKLQotIwotIyBTb0MgYXVkaW8gc3VwcG9ydAotIwotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKLUNPTkZJR19TT1VORF9QUklNRT15Ci0jIENPTkZJR19PQlNPTEVURV9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQlQ4NzggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfSUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KLQotIwotIyBISUQgRGV2aWNlcwotIwotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1lFQUxJTks9bQotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1RDTyBpcyBub3Qgc2V0Ci0KLSMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwogIwogIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMTI4LDcgKzk0MSw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTExMzYsMTEyICs5NDksMTA3IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotQ09ORklHX1VTQl9MRD1tCisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBSZWFsIFRpbWUgQ2xvY2sKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIG9uLUNQVSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIENsaWVudHMKKyMgVEkgVkxZTlEKICMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKLSMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTEyNjAsNzQgKzEwNjgsODEgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CitDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19KRkZTMl9GU19TRUNVUklUWT15CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CkBAIC0xMzQ1LDEwICsxMTYwLDEwIEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMzU4LDM4ICsxMTczLDc2IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEzOTcsNjcgKzEyNTAsMzIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKaW5kZXggNmI2NDMzOS4uOTQ5YjZkYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCkBAIC0xLDc5ICsxLDEwMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MjcgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMDg6NTg6MjIgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19EQjE1NTA9eQotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfREIxNTUwPXkKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTU1MD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTE1NTA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Niw2ICsxMTAsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTMsMTEgKzExOCwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNywxMzcgKzEzNSwyMDUgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTU1MCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotQ09ORklHX0NBUkRCVVM9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRCVVMgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwpAQCAtMjQ1LDUxICszNDEsNDkgQEAKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9BVTFYMDA9bQotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0zMDAsMTEwICszOTQsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQxMywyNyArNDIyLDI0IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0MiwyNSArNDQ4LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ3Myw2ICs0NzksNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5OCwyMCArNTA1LDIzIEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwogIwogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTIzLDEwNSArNTMzLDk2IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19NVERfTkFORD1tCitDT05GSUdfTVREX05BTkQ9eQogIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz1tCi1DT05GSUdfTVREX05BTkRfQVUxNTUwPW0KKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CitDT05GSUdfTVREX05BTkRfQVUxNTUwPXkKICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9bQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CisjIENPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0hQVDM2Nj15CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lUODIxMz1tCisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNjMxLDgyICs2MzIsNjUgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldApAQCAtNzE0LDk2ICs2OTgsNTMgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX1FMQTNYWFg9bQotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzPW0KLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUWEVOX05JQz1tCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi1DT05GSUdfTkVUX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBXzNDNTg5PW0KLUNPTkZJR19QQ01DSUFfM0M1NzQ9bQotQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KLUNPTkZJR19QQ01DSUFfUENORVQ9bQotQ09ORklHX1BDTUNJQV9OTUNMQU49bQotQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCi1DT05GSUdfUENNQ0lBX1hJUkMyUFM9bQotQ09ORklHX1BDTUNJQV9BWE5FVD1tCi0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTgxMSwxNiArNzUyLDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC04MzAsMjYgKzc2OSwyNyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC04NjYsMTk5ICs4MDYsNDIwIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPXkKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CiAKICMKLSMgSTJDIHN1cHBvcnQKKyMgSTJDIEFsZ29yaXRobXMKICMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwogIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0FVMTU1MD15CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVUxNTUwPXkKK0NPTkZJR19TUElfQklUQkFORz15CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgSElEIERldmljZXMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorQ09ORklHX1NORF9IUlRJTUVSPXkKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlQUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTUNJQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDPXkKKyMgQ09ORklHX1NORF9TT0NfREIxMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcwogIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIEkyQyBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFNQSSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIERNQSBEZXZpY2VzCisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMgVEkgVkxZTlEKICMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMDc3LDc1ICsxMjM4LDgyIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX0NPTkZJR0ZTX0ZTPXkKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD1tCi0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15Ci1DT05GSUdfRVhQT1JURlM9bQorQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz1tCitDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKQEAgLTExNjIsMTAgKzEzMzAsMTAgQEAKICMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKICMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKQEAgLTExNzUsMzggKzEzNDMsNzUgQEAKICMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKICMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIxNCw2NyArMTQxOSwzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKaW5kZXggYjcxYTBhNC4uNGNhYTBlMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKLSMgTW9uIE5vdiAgOSAyMzo0Mjo0MiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCisjIE1vbiBKYW4gIDQgMTM6NDE6MDkgMjAxMAogIwogQ09ORklHX01JUFM9eQogCkBAIC0yNyw2ICsyNyw3IEBACiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKQEAgLTUxLDYgKzUyLDkgQEAKICMgQ09ORklHX0xFTU9URV9GVUxPT05HMkUgaXMgbm90IHNldAogQ09ORklHX0xFTU9URV9NQUNIMkY9eQogQ09ORklHX0NTNTUzNj15CitDT05GSUdfQ1M1NTM2X01GR1BUPXkKK0NPTkZJR19MT09OR1NPTl9TVVNQRU5EPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CkBAIC02MywxMyArNjcsOCBAQAogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQogQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19DRVZUX1I0S19MSUI9eQotQ09ORklHX0NFVlRfUjRLPXkKLUNPTkZJR19DU1JDX1I0S19MSUI9eQotQ09ORklHX0NTUkNfUjRLPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQotQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogQ09ORklHX0k4MjU5PXkKICMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CkBAIC0xMDksMTMgKzEwOCwxNSBAQAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwPXkKIENPTkZJR19DUFVfTE9PTkdTT04yPXkKIENPTkZJR19TWVNfSEFTX0NQVV9MT09OR1NPTjJGPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfQ1BVRlJFUT15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0FERFJXSU5DRkc9eQorQ09ORklHX0NQVV9TVVBQT1JUU19VTkNBQ0hFRF9BQ0NFTEVSQVRFRD15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEzNyw3ICsxMzgsNiBAQAogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0hJR0hNRU09eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTE0NiwxNyArMTQ2LDExIEBACiBDT05GSUdfU1BBUlNFTUVNPXkKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKLQotIwotIyBNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZAotIwogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19USUNLX09ORVNIT1Q9eQpAQCAtMTc1LDcgKzE2OSw3IEBACiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTE5NCw5ICsxODgsOSBAQAogQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQogQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKIENPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKLSMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfR1pJUD15CiAjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAotQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC0yMTEsNiArMjA1LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD02NAogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0yMjQsNyArMjE5LDExIEBACiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTI1NiwxNCArMjU1LDE4IEBACiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9TWVNDQUxMX1dSQVBQRVJTPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKKyMgQ09ORklHX1NMT1dfV09SS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjgzLDE0ICsyODYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT1tCiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKIENPTkZJR19GUkVFWkVSPXkKIAogIwpAQCAtMzE0LDcgKzM0NCw3IEBACiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19NSVBTMzJfQ09NUEFUPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKQEAgLTMzNSw5ICszNjUsMzQgQEAKIENPTkZJR19ISUJFUk5BVElPTl9OVlM9eQogQ09ORklHX0hJQkVSTkFUSU9OPXkKIENPTkZJR19QTV9TVERfUEFSVElUSU9OPSIvZGV2L2hkYTMiCi0jIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKK0NPTkZJR19NSVBTX0VYVEVSTkFMX1RJTUVSPXkKK0NPTkZJR19NSVBTX0NQVUZSRVE9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CitDT05GSUdfQ1BVX0ZSRVFfREVCVUc9eQorQ09ORklHX0NQVV9GUkVRX1NUQVQ9bQorQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUz15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KKworIworIyBDUFVGcmVxIHByb2Nlc3NvciBkcml2ZXJzCisjCitDT05GSUdfTE9PTkdTT04yX0NQVUZSRVE9bQogQ09ORklHX05FVD15Ci1DT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwpAQCAtMzQ2LDExICs0MDEsMTIgQEAKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQpAQCAtMzYxLDEyICs0MTcsMTMgQEAKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQogIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUIGlzIG5vdCBzZXQKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19BUlBEPXkKIENPTkZJR19TWU5fQ09PS0lFUz15CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKQEAgLTM5OSwzMCArNDU2LDM0IEBACiAjIENPTkZJR19ERUZBVUxUX1dFU1RXT09EIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfUkVOTyBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iYmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfVENQX01ENVNJRz15CiBDT05GSUdfSVBWNj1tCiBDT05GSUdfSVBWNl9QUklWQUNZPXkKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQorIyBDT05GSUdfSVBWNl9ST1VURV9JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9bQorIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQVjZfU1VCVFJFRVM9eQogIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKK0NPTkZJR19CUklER0VfTkVURklMVEVSPXkKIAogIwogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC00NDYsMTcgKzUwNywyMiBAQAogIwogIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAorQ09ORklHX1NUUD1tCitDT05GSUdfQlJJREdFPW0KICMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CitDT05GSUdfVkxBTl84MDIxUT1tCisjIENPTkZJR19WTEFOXzgwMjFRX0dWUlAgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAorQ09ORklHX0lQWD1tCisjIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKQEAgLTUxOCwyNiArNTg0LDYxIEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPW0KK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0hJRFA9bQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0JUX0hDSUJUVVNCPW0KKyMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lCRlVTQj1tCitDT05GSUdfQlRfSENJVkhDST1tCisjIENPTkZJR19CVF9NUlZMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKK0NPTkZJR19XRVhUX0NPUkU9eQorQ09ORklHX1dFWFRfUFJPQz15CitDT05GSUdfQ0ZHODAyMTE9bQorIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKKyMgQ09ORklHX0NGRzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfQ0ZHODAyMTFfV0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIworQ09ORklHX0xJQjgwMjExPW0KK0NPTkZJR19MSUI4MDIxMV9ERUJVRz15CitDT05GSUdfTUFDODAyMTE9bQorIyBDT05GSUdfTUFDODAyMTFfUkNfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCisjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9MRURTPXkKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiBDT05GSUdfUkZLSUxMPW0KLSMgQ09ORklHX1JGS0lMTF9JTlBVVCBpcyBub3Qgc2V0CitDT05GSUdfUkZLSUxMX0xFRFM9eQorQ09ORklHX1JGS0lMTF9JTlBVVD15CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCkBAIC01NTUsNyArNjU2LDcgQEAKIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQogQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj1tCiAjIENPTkZJR19NVEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlAgaXMgbm90IHNldApAQCAtNTY2LDcgKzY2NywxMiBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNTc3LDE5ICs2ODMsNyBAQAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKIApAQCAtNjE5LDggKzcxMyw3IEBACiAjCiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQogIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CkBAIC03MDAsNyArNzkzLDI5IEBACiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCitDT05GSUdfTURfUkFJRDEwPW0KK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENl9QUT1tCisjIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorQ09ORklHX01EX0ZBVUxUWT1tCitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fREVCVUc9eQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9MT0dfVVNFUlNQQUNFPW0KK0NPTkZJR19ETV9aRVJPPW0KK0NPTkZJR19ETV9NVUxUSVBBVEg9bQorQ09ORklHX0RNX01VTFRJUEFUSF9RTD1tCitDT05GSUdfRE1fTVVMVElQQVRIX1NUPW0KK0NPTkZJR19ETV9ERUxBWT1tCitDT05GSUdfRE1fVUVWRU5UPXkKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKQEAgLTcxMiwxOSArODI3LDE5IEBACiAjCiAKICMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfSUZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWT1tCiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorQ09ORklHX1ZFVEg9bQogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTczOCw2ICs4NTMsNyBAQAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKQEAgLTc2OSw3ICs4ODUsNyBAQAogIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKIENPTkZJR184MTM5VE9PPXkKICMgQ09ORklHXzgxMzlUT09fUElPIGlzIG5vdCBzZXQKLUNPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUj15CisjIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAogIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAogIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldApAQCAtNzk1LDYgKzkxMSw3IEBACiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiBDT05GSUdfUjgxNjk9eQorQ09ORklHX1I4MTY5X1ZMQU49eQogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CkBAIC04MTAsMTUgKzkyNywzMSBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLUNPTkZJR19XTEFOX1BSRTgwMjExPXkKLSMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVkVMQU4gaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAogIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfQVQ3NkM1MFhfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FETTgyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVdMOEsgaXMgbm90IHNldAorIyBDT05GSUdfQVRIX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDMgaXMgbm90IHNldAorIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSSBpcyBub3Qgc2V0CisjIENPTkZJR19JV00gaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtODMxLDE3ICs5NjQsMzkgQEAKICMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1VTQk5FVD1tCitDT05GSUdfVVNCX05FVF9BWDg4MTdYPW0KK0NPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPW0KK0NPTkZJR19VU0JfTkVUX0NEQ19FRU09bQorIyBDT05GSUdfVVNCX05FVF9ETTk2MDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9TTVNDOTVYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KKyMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9NQ1M3ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUPW0KKyMgQ09ORklHX1VTQl9BTElfTTU2MzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOMjcyMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0JFTEtJTj15CitDT05GSUdfVVNCX0FSTUxJTlVYPXkKKyMgQ09ORklHX1VTQl9FUFNPTjI4ODggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tDMjE5MCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQogIyBDT05GSUdfVVNCX0hTTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0lOVDUxWDEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRDT05TT0xFPW0KK0NPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTg0OSw4ICsxMDA0LDkgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorQ09ORklHX0lOUFVUX1BPTExERVY9bQorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtODg0LDcgKzEwNDAsNyBAQAogIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfQVBQTEVUT1VDSD1tCiAjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0lOUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9MT0dJQk0gaXMgbm90IHNldApAQCAtOTA0LDYgKzEwNjAsNyBAQAogIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05MzQsOCArMTA5MSw3IEBACiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwPW0KICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MTYKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKQEAgLTk1Myw4ICsxMTA5LDcgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT1tCiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKQEAgLTEwMzMsMTQgKzExODgsMTggQEAKICMKICMgTXVsdGltZWRpYSBkcml2ZXJzCiAjCitDT05GSUdfSVJfQ09SRT1tCitDT05GSUdfVklERU9fSVI9bQogIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19WNEwyPW0KIENPTkZJR19WSURFT19WNEwxPW0KK0NPTkZJR19WSURFT0JVRl9HRU49bQorQ09ORklHX1ZJREVPQlVGX1ZNQUxMT0M9bQogQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CiAjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTz15Ci0jIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WSVZJPW0KICMgQ09ORklHX1ZJREVPX1BNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKQEAgLTEwNDksNTIgKzEyMDgsNTUgQEAKIENPTkZJR19VU0JfVklERU9fQ0xBU1M9bQogQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVj15CiBDT05GSUdfVVNCX0dTUENBPW0KLSMgQ09ORklHX1VTQl9NNTYwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RWMDZYWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX001NjAyPW0KK0NPTkZJR19VU0JfU1RWMDZYWD1tCiAjIENPTkZJR19VU0JfR0w4NjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0NPTkVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9FVE9NUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dTUENBX0NPTkVYPW0KK0NPTkZJR19VU0JfR1NQQ0FfRVRPTVM9bQorQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYPW0KICMgQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9NQVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NOOUMyMFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TVEswMTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1Q2MTMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1RWODUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfVkMwMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9aQzNYWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dTUENBX01BUlM9bQorQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQT1tCitDT05GSUdfVVNCX0dTUENBX09WNTE5PW0KK0NPTkZJR19VU0JfR1NQQ0FfT1Y1MzQ9bQorQ09ORklHX1VTQl9HU1BDQV9QQUMyMDc9bQorIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMDIgaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExPW0KK0NPTkZJR19VU0JfR1NQQ0FfU045QzIwWD1tCitDT05GSUdfVVNCX0dTUENBX1NOOUMyMFhfRVZERVY9eQorQ09ORklHX1VTQl9HU1BDQV9TT05JWEI9bQorQ09ORklHX1VTQl9HU1BDQV9TT05JWEo9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwPW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMT1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDU9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2PW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOD1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjE9bQorQ09ORklHX1VTQl9HU1BDQV9TUTkwNT1tCitDT05GSUdfVVNCX0dTUENBX1NROTA1Qz1tCitDT05GSUdfVVNCX0dTUENBX1NUSzAxND1tCisjIENPTkZJR19VU0JfR1NQQ0FfU1RWMDY4MCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dTUENBX1NVTlBMVVM9bQorQ09ORklHX1VTQl9HU1BDQV9UNjEzPW0KK0NPTkZJR19VU0JfR1NQQ0FfVFY4NTMyPW0KK0NPTkZJR19VU0JfR1NQQ0FfVkMwMzJYPW0KK0NPTkZJR19VU0JfR1NQQ0FfWkMzWFg9bQogIyBDT05GSUdfVklERU9fSERQVlIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZJQ0FNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JQk1DQU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tPTklDQVdDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVQ2MVgyNTE9bQogIyBDT05GSUdfVVNCX09WNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NOOUMxMDI9bQogIyBDT05GSUdfVVNCX1NUVjY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkMwMzAxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWkMwMzAxPW0KICMgQ09ORklHX1VTQl9QV0MgaXMgbm90IHNldAogQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfVVNCX1pSMzY0WFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldAorQ09ORklHX1VTQl9aUjM2NFhYPW0KK0NPTkZJR19VU0JfU1RLV0VCQ0FNPW0KK0NPTkZJR19VU0JfUzIyNTU9bQogIyBDT05GSUdfUkFESU9fQURBUFRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIApAQCAtMTEzMiw2ICsxMjk0LDcgQEAKICMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CkBAIC0xMTYxLDcgKzEzMjQsNyBAQAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9bQogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTExOTMsMjggKzEzNTYsNDQgQEAKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAogQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9bQotIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfSFdERVA9bQorQ09ORklHX1NORF9SQVdNSURJPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TTkRfU0VRX0RVTU1ZPW0KK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKK0NPTkZJR19TTkRfSFJUSU1FUj1tCitDT05GSUdfU05EX1NFUV9IUlRJTUVSX0RFRkFVTFQ9eQogIyBDT05GSUdfU05EX1JUQ1RJTUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NORF9WTUFTVEVSPXkKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1JBV01JRElfU0VRPW0KICMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX01QVTQwMV9VQVJUPW0KIENPTkZJR19TTkRfQUM5N19DT0RFQz1tCi0jIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorQ09ORklHX1NORF9EVU1NWT1tCitDT05GSUdfU05EX1ZJUk1JREk9bQorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU0VSSUFMX1UxNjU1MD1tCitDT05GSUdfU05EX01QVTQwMT1tCitDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRT15CitDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRV9ERUZBVUxUPTEwCiBDT05GSUdfU05EX1BDST15CiAjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldApAQCAtMTI4MSw3ICsxNDYwLDEwIEBACiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTUlQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVVNCPXkKK0NPTkZJR19TTkRfVVNCX0FVRElPPW0KK0NPTkZJR19TTkRfVVNCX0NBSUFRPW0KK0NPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKICMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0FDOTdfQlVTPW0KQEAgLTEyOTksMzIgKzE0ODEsNDEgQEAKICMKICMgU3BlY2lhbCBISUQgZHJpdmVycwogIwotIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfQTRURUNIPW0KK0NPTkZJR19ISURfQVBQTEU9bQorQ09ORklHX0hJRF9CRUxLSU49bQorQ09ORklHX0hJRF9DSEVSUlk9bQorQ09ORklHX0hJRF9DSElDT05ZPW0KK0NPTkZJR19ISURfQ1lQUkVTUz1tCitDT05GSUdfSElEX0RSQUdPTlJJU0U9bQorQ09ORklHX0RSQUdPTlJJU0VfRkY9eQorQ09ORklHX0hJRF9FWktFWT1tCitDT05GSUdfSElEX0tZRT1tCitDT05GSUdfSElEX0dZUkFUSU9OPW0KK0NPTkZJR19ISURfVFdJTkhBTj1tCitDT05GSUdfSElEX0tFTlNJTkdUT049bQorQ09ORklHX0hJRF9MT0dJVEVDSD1tCitDT05GSUdfTE9HSVRFQ0hfRkY9eQorQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGPXkKK0NPTkZJR19ISURfTUlDUk9TT0ZUPW0KK0NPTkZJR19ISURfTU9OVEVSRVk9bQorQ09ORklHX0hJRF9OVFJJRz1tCitDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KK0NPTkZJR19QQU5USEVSTE9SRF9GRj15CitDT05GSUdfSElEX1BFVEFMWU5YPW0KK0NPTkZJR19ISURfU0FNU1VORz1tCitDT05GSUdfSElEX1NPTlk9bQorQ09ORklHX0hJRF9TVU5QTFVTPW0KK0NPTkZJR19ISURfR1JFRU5BU0lBPW0KK0NPTkZJR19HUkVFTkFTSUFfRkY9eQorQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9bQorQ09ORklHX1NNQVJUSk9ZUExVU19GRj15CitDT05GSUdfSElEX1RPUFNFRUQ9bQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9bQorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj15CitDT05GSUdfSElEX1dBQ09NPW0KK0NPTkZJR19ISURfWkVST1BMVVM9bQorQ09ORklHX1pFUk9QTFVTX0ZGPXkKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtMTM0NCw3ICsxNTM1LDcgQEAKIENPTkZJR19VU0JfT1RHX1dISVRFTElTVD15CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorQ09ORklHX1VTQl9XVVNCPW0KICMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCiAjCkBAIC0xMzY2LDE0ICsxNTU3LDE1IEBACiBDT05GSUdfVVNCX1VIQ0lfSENEPW0KICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9XSENJX0hDRD1tCitDT05GSUdfVVNCX0hXQV9IQ0Q9bQorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwogQ09ORklHX1VTQl9BQ009bQotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorQ09ORklHX1VTQl9QUklOVEVSPW0KIENPTkZJR19VU0JfV0RNPW0KICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCkBAIC0xMzk3LDcgKzE1ODksNyBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorQ09ORklHX1VTQl9MSUJVU1VBTD15CiAKICMKICMgVVNCIEltYWdpbmcgZGV2aWNlcwpAQCAtMTQ2Nyw3ICsxNjU5LDcgQEAKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9MRUQ9bQogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKQEAgLTE0ODAsMTYgKzE2NzIsOTUgQEAKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9bQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9NNjY1OTI9eQorQ09ORklHX1VTQl9NNjY1OTI9bQorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKICMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0CitDT05GSUdfVVdCPW0KK0NPTkZJR19VV0JfSFdBPW0KK0NPTkZJR19VV0JfV0hDST1tCisjIENPTkZJR19VV0JfV0xQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQl9JMTQ4MFUgaXMgbm90IHNldAorQ09ORklHX01NQz1tCisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz1tCitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVklBX1NETU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz1tCisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKQEAgLTE1MDQsMjIgKzE3NzUsMTggQEAKICMgQ09ORklHX1NUQUdJTkdfRVhDTFVERV9CVUlMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FVDEzMVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lQX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTJfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1czNVVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ0hPIGlzIG5vdCBzZXQKKyMgQ09ORklHX09UVVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NRURJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FTVVNfT0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BTFRFUkFfUENJRV9DSERNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEw4MTg3U0UgaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE5MlNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTg3U0UgaXMgbm90IHNldAogIyBDT05GSUdfUlRMODE5MkUgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlNSU8gaXMgbm90IHNldAogIyBDT05GSUdfVFJBTlpQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBBbmRyb2lkCi0jCi0KLSMKICMgUXVhbGNvbW0gTVNNIENhbWVyYSBBbmQgVmlkZW8KICMKIApAQCAtMTUyNyw3ICsxNzk0LDYgQEAKICMgQ2FtZXJhIFNlbnNvciBTZWxlY3Rpb24KICMKICMgQ09ORklHX0lOUFVUX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfRFNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPSE1FTEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0IzREZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BMQU45QVVUSCBpcyBub3Qgc2V0CkBAIC0xNTQ0LDI4ICsxODEwLDU1IEBACiAjCiAjIENPTkZJR19SQVJfUkVHSVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfSUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBTVpTV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVE1BTl9BRFYgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfV0FWRUxBTiBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU003WFg9eQotQ09ORklHX0ZCX1NNN1hYX0FDQ0VMPXkKKyMgQ09ORklHX0ZCX1NNN1hYX0FDQ0VMIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDJfRlM9bQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfRlM9eQorQ09ORklHX0VYVDRfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQyPXkKKyMgQ09ORklHX0pCRDJfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPPXkKK0NPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CisjIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pGU19GUz1tCitDT05GSUdfSkZTX1BPU0lYX0FDTD15CisjIENPTkZJR19KRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfRlM9bQorQ09ORklHX1hGU19RVU9UQT15CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0JUUkZTX0ZTPW0KKyMgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQpAQCAtMTU3NSwxNyArMTg2OCwyNSBAQAogQ09ORklHX1FVT1RBPXkKICMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKK0NPTkZJR19RVU9UQV9UUkVFPW0KICMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAotIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUUZNVF9WMj1tCiBDT05GSUdfUVVPVEFDVEw9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GU19GUz1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDYWNoZXMKICMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0ZTQ0FDSEU9bQorIyBDT05GSUdfRlNDQUNIRV9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU0NBQ0hFX0hJU1RPR1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0NBQ0hFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTQ0FDSEVfT0JKRUNUX0xJU1QgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFRklMRVM9bQorIyBDT05GSUdfQ0FDSEVGSUxFU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRUZJTEVTX0hJU1RPR1JBTSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtMTU5OSwxMSArMTkwMCwxMyBAQAogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfRkFUX0ZTPW0KLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCiBDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CiBDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX0ZTPW0KKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05URlNfUlc9eQogCiAjCiAjIFBzZXVkbyBmaWxlc3lzdGVtcwpAQCAtMTYxNiwyMyArMTkxOSw2MCBAQAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCitDT05GSUdfU1FVQVNIRlM9bQorQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEPXkKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9bQorQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15CisjIENPTkZJR19ST01GU19CQUNLRURfQllfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19PTl9CTE9DSz15CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0ZTQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU0RfVjQ9eQogQ09ORklHX0xPQ0tEPW0KIENPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19BQ0xfU1VQUE9SVD1tCiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPW0KLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CitDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1VQQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREZTX1VQQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtMTY0Myw0NSArMTk4Myw0NSBAQAogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQogQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9InV0Zi04IgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorQ09ORklHX05MU19ERUZBVUxUPSJ1dGY4IgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD15CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCkBAIC0xNjk1LDEyNSArMjAzNSwxNTUgQEAKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKIENPTkZJR19TVFJJUF9BU01fU1lNUz15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfS0VZUz15CitDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKK0NPTkZJR19YT1JfQkxPQ0tTPW0KK0NPTkZJR19BU1lOQ19DT1JFPW0KK0NPTkZJR19BU1lOQ19NRU1DUFk9bQorQ09ORklHX0FTWU5DX1hPUj1tCitDT05GSUdfQVNZTkNfUFE9bQorQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPW0KIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworQ09ORklHX0NSWVBUT19GSVBTPXkKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQogQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkc9bQogQ09ORklHX0NSWVBUT19STkcyPXkKIENPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQogCiAjCiAjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQogIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NDTT1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX1NFUUlWPW0KIAogIwogIyBCbG9jayBtb2RlcwogIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX0NUUj1tCiAjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fTFJXPW0KK0NPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX1hUUz1tCiAKICMKICMgSGFzaCBtb2RlcwogIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ITUFDPW0KK0NPTkZJR19DUllQVE9fWENCQz1tCiAjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fR0hBU0g9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX1JNRDEyOD1tCitDT05GSUdfQ1JZUFRPX1JNRDE2MD1tCitDT05GSUdfQ1JZUFRPX1JNRDI1Nj1tCitDT05GSUdfQ1JZUFRPX1JNRDMyMD1tCitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCiAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIAogIwogIyBDb21wcmVzc2lvbgogIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorQ09ORklHX0NSWVBUT19aTElCPW0KK0NPTkZJR19DUllQVE9fTFpPPW0KIAogIwogIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KICMKLSMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQU5TSV9DUFJORz1tCiBDT05GSUdfQ1JZUFRPX0hXPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTE4MjEsMTQgKzIxOTEsMjAgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDX1QxMERJRj15CiAjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX0FVRElUX0dFTkVSSUM9eQotQ09ORklHX1pMSUJfSU5GTEFURT1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKaW5kZXggZGRmNjdmNi4uOTczODJiNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCkBAIC0xLDc5ICsxLDEwMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MzcgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMDk6NTM6MjkgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19QQjExMDA9eQotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfUEIxMTAwPXkKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTEwMD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTExMDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX1NXQVBfSU9fU1BBQ0U9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Niw2ICsxMTAsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTMsMTEgKzExOCwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNywxODQgKzEzNSwyNDQgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcGIxMTAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCiAjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMjk1LDExMCArMzgzLDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORl9DVF9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MDgsMjcgKzQxMSwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MzcsMjUgKzQzNywyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NjgsNiArNDY4LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00OTMsMTQgKzQ5NCwxMyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUxNywxNjYgKzUxNywxMzYgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9VQj15CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQogCiAjCi0jIE1pc2MgZGV2aWNlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfVEFTS19JT0NUTD15CisjIENPTkZJR19JREVfUFJPQ19GUyBpcyBub3Qgc2V0CiAKICMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi0jIENPTkZJR19JREUgaXMgbm90IHNldAorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1BIWUxJQj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC02ODQsMTYgKzY1NCwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNzAzLDI4ICs2NzEsMjYgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC03NDMsMTk4ICs3MDksMjg4IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19TWU5DTElOS19DUz1tCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCiAjIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBQUFMgc3VwcG9ydAogIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNdWx0aW1lZGlhIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEUkFXPXkKIAogIwotIyBISUQgRGV2aWNlcworIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIworIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIExFRCBkcml2ZXJzCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBMRUQgVHJpZ2dlcnMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKLSMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC05NTMsNjkgKzEwMDksNzYgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CisjIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CkBAIC0xMDU1LDM0ICsxMTE4LDcxIEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEwOTAsNjcgKzExOTAsMzIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTIwMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhZDc3MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTIwMF9kZWZjb25maWcKQEAgLTAsMCArMSwxNTY4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAxMDoyMzozNCAyMDEwCisjCitDT05GSUdfTUlQUz15CisKKyMKKyMgTWFjaGluZSBzZWxlY3Rpb24KKyMKK0NPTkZJR19NQUNIX0FMQ0hFTVk9eQorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAorIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX1BCMTIwMD15CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTEyMDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKK0NPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19NSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19JUlFfQ1BVPXkKK0NPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKKworIworIyBDUFUgc2VsZWN0aW9uCisjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX01JUFMzMl9SMT15CisjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IxMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKK0NPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQorQ09ORklHX0NQVV9NSVBTMzI9eQorQ09ORklHX0NQVV9NSVBTUjE9eQorQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKKworIworIyBLZXJuZWwgdHlwZQorIworQ09ORklHXzMyQklUPXkKKyMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQorQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQorIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKK0NPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX0NQVV9IQVNfU1lOQz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19LU009eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQorQ09ORklHX0haPTEwMAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1wYjEyMDAiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQorIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlM9eQorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CitDT05GSUdfVFJBRF9TSUdOQUxTPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfQVUxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9VQj15CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9BVEFQST15CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorIyBDT05GSUdfSURFX1BST0NfRlMgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWD15CitDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX1BJT19EQkRNQT15CisjIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQVUxWDAwX0VORVQgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9BVTFYMDA9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAorCisjCisjIEkyQyBBbGdvcml0aG1zCisjCisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0FVMTU1MD15CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVUxNTUwPXkKK0NPTkZJR19TUElfQklUQkFORz15CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKK0NPTkZJR19IV01PTl9WSUQ9eQorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0FETTEwMjU9eQorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTcwPXkKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BVTEyMDA9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVFM9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9WTUFTVEVSPXkKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9BQzk3X0NPREVDPXkKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0M9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQ19JMlM9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQ19BQzk3PXkKK0NPTkZJR19TTkRfU09DX0RCMTIwMD15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15CisjIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0NfQUM5N19DT0RFQz15CitDT05GSUdfU05EX1NPQ19XTTg3MzE9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPXkKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKK0NPTkZJR19ISURSQVc9eQorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0RFQlVHPXkKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKKyMgQ09ORklHX01NQ19CTE9DS19CT1VOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQVUxWD15CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1VERl9GUz15CitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX0VGSV9QQVJUSVRJT049eQorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAiCisjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCitDT05GSUdfS0VZUz15CitDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPXkKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCmluZGV4IDVlYzYwODMuLjc0OTdkMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwpAQCAtMSw3OCArMSwxMDIgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjM3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDEwOjA1OjI3IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfUEIxNTAwPXkKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX1BCMTUwMD15CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTE1MDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxNTAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODUsNiArMTA5LDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkyLDExICsxMTcsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDYsMTkwICsxMzQsMjU1IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1wYjE1MDAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfUVVJUktTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CiBDT05GSUdfUENNQ0lBX0lPQ1RMPXkKLUNPTkZJR19DQVJEQlVTPXkKKyMgQ09ORklHX0NBUkRCVVMgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwogIyBDT05GSUdfWUVOVEEgaXMgbm90IHNldAotQ09ORklHX1BENjcyOT1tCisjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAogIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAotQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9bQotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMzAwLDExMCArMzkzLDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORl9DVF9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MTMsMjcgKzQyMSwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00NDIsMjUgKzQ0NywyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NzMsNiArNDc4LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00OTgsMTQgKzUwNCwxNCBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTIzLDMwICs1MjksMjAgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldApAQCAtNTU0LDY3ICs1NTAsNjYgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBNaXNjIGRldmljZXMKLSMKLUNPTkZJR19TR0lfSU9DND1tCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVDUz1tCi0jIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0hQVDM2Nj15CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lUODIxMz1tCisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNjI0LDgyICs2MTksNjUgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldApAQCAtNzA3LDk2ICs2ODUsNTEgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX1FMQTNYWFg9bQotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzPW0KLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUWEVOX05JQz1tCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CiAKICMKLSMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLUNPTkZJR19ORVRfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfM0M1ODk9bQotQ09ORklHX1BDTUNJQV8zQzU3ND1tCi1DT05GSUdfUENNQ0lBX0ZNVkoxOFg9bQotQ09ORklHX1BDTUNJQV9QQ05FVD1tCi1DT05GSUdfUENNQ0lBX05NQ0xBTj1tCi1DT05GSUdfUENNQ0lBX1NNQzkxQzkyPW0KLUNPTkZJR19QQ01DSUFfWElSQzJQUz1tCi1DT05GSUdfUENNQ0lBX0FYTkVUPW0KLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfQVNZTkM9bQotIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfREVGTEFURT1tCi0jIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtODA0LDE2ICs3MzcsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTgyMywzMyArNzU0LDM0IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fUkFXPW0KKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKQEAgLTg2MywyODIgKzc5NSw0NTAgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIworQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorQ09ORklHX0ZCX1MxRDEzWFhYPXkKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCi0jIEhJRCBEZXZpY2VzCisjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgU3BlY2lhbCBISUQgZHJpdmVycwogIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT1RHX1dISVRFTElTVD15CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQogCiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKK0NPTkZJR19GQVRfRlM9eQogIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CkBAIC0xMTU1LDEwICsxMjU1LDEwIEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMTY4LDM4ICsxMjY4LDc1IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjA3LDY3ICsxMzQ0LDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwppbmRleCA2NjQ3NjQyLi5hYTUyNmY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKQEAgLTEsNzkgKzEsMTAzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAxMDowNjowNyAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX1BCMTU1MD15Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19QQjE1NTA9eQorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxNTUwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CiBDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTU1MD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg2LDYgKzExMCw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MywxMSArMTE4LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA3LDE5MCArMTM1LDI1NSBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcGIxNTUwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQogQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15CisjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKICMKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKLUNPTkZJR19QRDY3Mjk9bQorIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKICMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0NBUkRfTk9OU1RBVElDPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTMwMSwxMTAgKzM5NCwyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDE0LDI3ICs0MjIsMzAgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDQzLDI1ICs0NTQsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDc0LDYgKzQ4NSw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk5LDE0ICs1MTEsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyNCwzMCArNTM2LDMwIEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKK0NPTkZJR19NVERfTkFORF9BVTE1NTA9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKQEAgLTU1NSw2NyArNTY3LDY2IEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9bQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CisjIENPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLSMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfUENJX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSFBUMzY2PXkKICMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSVQ4MjEzPW0KKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CkBAIC02MjUsODIgKzYzNiw2NSBAQAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCi0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLSMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX1BIWUxJQj15CiAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKQEAgLTcwOCw4OCArNzAyLDUxIEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTc5NywxNiArNzU0LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC04MTYsMzMgKzc3MSwzNCBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC04NTYsMjgyICs4MTIsNDkyIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPXkKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CiAKICMKLSMgSTJDIHN1cHBvcnQKKyMgSTJDIEFsZ29yaXRobXMKICMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19BVTE1NTA9eQorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEUkFXPXkKIAogIwotIyBISUQgRGV2aWNlcworIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQogCiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKK0NPTkZJR19GQVRfRlM9eQogIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDEwICsxMzE0LDEwIEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMTYxLDM4ICsxMzI3LDc1IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjAwLDY3ICsxNDAzLDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL2tuMDEtYmVyci5jIGIvYXJjaC9taXBzL2RlYy9rbjAxLWJlcnIuYwppbmRleCBiMGRjNmQ1Li45NGQyM2I0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL2tuMDEtYmVyci5jCisrKyBiL2FyY2gvbWlwcy9kZWMva24wMS1iZXJyLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqIFRoZXJlIGlzIG5vIGRlZmF1bHQgdmFsdWUgLS0gaXQgaGFzIHRvIGJlIGluaXRpYWxpemVkLgogICovCiB1MTYgY2FjaGVkX2tuMDFfY3NyOwotREVGSU5FX1NQSU5MT0NLKGtuMDFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhrbjAxX2xvY2spOwogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfa24wMV9iZV9hY2sodm9pZCkKQEAgLTU0LDEyICs1NCwxMiBAQAogCXZvbGF0aWxlIHUxNiAqY3NyID0gKHZvaWQgKilDS1NFRzFBRERSKEtOMDFfU0xPVF9CQVNFICsgS04wMV9DU1IpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZrbjAxX2xvY2ssIGZsYWdzKTsKIAogCSpjc3IgPSBjYWNoZWRfa24wMV9jc3IgfCBLTjAxX0NTUl9NRU1FUlI7CS8qIENsZWFyIGJ1cyBJUlEuICovCiAJaW9iKCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrbjAxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgZGVjX2tuMDFfYmVfYmFja2VuZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzX2ZpeHVwLCBpbnQgaW52b2tlcikKQEAgLTE4Miw3ICsxODIsNyBAQAogCXZvbGF0aWxlIHUxNiAqY3NyID0gKHZvaWQgKilDS1NFRzFBRERSKEtOMDFfU0xPVF9CQVNFICsgS04wMV9DU1IpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZrbjAxX2xvY2ssIGZsYWdzKTsKIAogCS8qIFByZXNldCB3cml0ZS1vbmx5IGJpdHMgb2YgdGhlIENvbnRyb2wgUmVnaXN0ZXIgY2FjaGUuICovCiAJY2FjaGVkX2tuMDFfY3NyID0gKmNzcjsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCSpjc3IgPSBjYWNoZWRfa24wMV9jc3I7CiAJaW9iKCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrbjAxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CiAKIAkvKiBDbGVhciBhbnkgbGVmdG92ZXIgZXJyb3JzIGZyb20gdGhlIGZpcm13YXJlLiAqLwogCWRlY19rbjAxX2JlX2FjaygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9wcm9tL2xvY29yZS5TIGIvYXJjaC9taXBzL2RlYy9wcm9tL2xvY29yZS5TCmluZGV4IGQ5YWNkY2UuLmY3MmI1NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWMvcHJvbS9sb2NvcmUuUworKysgYi9hcmNoL21pcHMvZGVjL3Byb20vbG9jb3JlLlMKQEAgLTI3LDQgKzI3LDMgQEAKIAlqcglrMAogCSByZmUKIEVORChnZW5leGNlcHRfZWFybHkpCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCBkZDc1ZDY3Li41MTkxOTdlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xMzcsNyArMTM3LDcgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJaW50IHRlbXA7CkBAIC0xODksNyArMTg5LDcgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJaW50IHRlbXA7CkBAIC0yNDksNyArMjQ5LDcgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJaW50IHRlbXA7CkBAIC01MTYsNyArNTE2LDcgQEAKIHsKIAlsb25nIHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWxvbmcgdGVtcDsKQEAgLTU2OCw3ICs1NjgsNyBAQAogewogCWxvbmcgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJbG9uZyB0ZW1wOwpAQCAtNjI4LDcgKzYyOCw3IEBACiB7CiAJbG9uZyByZXN1bHQ7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQlsb25nIHRlbXA7CkBAIC03ODgsOSArNzg4LDkgQEAKICAqIGF0b21pYypfcmV0dXJuIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6aW5nIGJ1dCBub3QgdGhlIG5vbi0qX3JldHVybgogICogdmVyc2lvbnMuCiAgKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9sbHNjX21iKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9tYl9fYmVmb3JlX2xsc2MoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbGxzY19tYigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbGxzY19tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWJfX2JlZm9yZV9sbHNjKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJc21wX2xsc2NfbWIoKQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iYXJyaWVyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oCmluZGV4IDhlOWFjMzEuLmMwODg0ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JhcnJpZXIuaApAQCAtODgsMTIgKzg4LDIwIEBACiAJCTogLyogbm8gb3V0cHV0ICovCQlcCiAJCTogIm0iICgqKGludCAqKUNLU0VHMSkJCVwKIAkJOiAibWVtb3J5IikKKyNpZmRlZiBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04KKyMgZGVmaW5lIE9DVEVPTl9TWU5DV19TVFIJIi5zZXQgcHVzaFxuLnNldCBhcmNoPW9jdGVvblxuc3luY3dcbnN5bmN3XG4uc2V0IHBvcFxuIgorIyBkZWZpbmUgX19zeW5jdygpIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyhPQ1RFT05fU1lOQ1dfU1RSIDogOiA6ICJtZW1vcnkiKQogCi0jZGVmaW5lIGZhc3Rfd21iKCkJX19zeW5jKCkKLSNkZWZpbmUgZmFzdF9ybWIoKQlfX3N5bmMoKQotI2RlZmluZSBmYXN0X21iKCkJX19zeW5jKCkKLSNpZmRlZiBDT05GSUdfU0dJX0lQMjgKLSNkZWZpbmUgZmFzdF9pb2IoKQkJCQlcCisjIGRlZmluZSBmYXN0X3dtYigpCV9fc3luY3coKQorIyBkZWZpbmUgZmFzdF9ybWIoKQliYXJyaWVyKCkKKyMgZGVmaW5lIGZhc3RfbWIoKQlfX3N5bmMoKQorIyBkZWZpbmUgZmFzdF9pb2IoKQlkbyB7IH0gd2hpbGUgKDApCisjZWxzZSAvKiAhIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiAqLworIyBkZWZpbmUgZmFzdF93bWIoKQlfX3N5bmMoKQorIyBkZWZpbmUgZmFzdF9ybWIoKQlfX3N5bmMoKQorIyBkZWZpbmUgZmFzdF9tYigpCV9fc3luYygpCisjIGlmZGVmIENPTkZJR19TR0lfSVAyOAorIyAgZGVmaW5lIGZhc3RfaW9iKCkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCVwKIAkJIi5zZXQJcHVzaFxuXHQiCQlcCiAJCSIuc2V0CW5vcmVvcmRlclxuXHQiCQlcCkBAIC0xMDQsMTMgKzExMiwxNCBAQAogCQk6IC8qIG5vIG91dHB1dCAqLwkJXAogCQk6ICJtIiAoKihpbnQgKilDS1NFRzFBRERSKDB4MWZhMDAwMDQpKSBcCiAJCTogIm1lbW9yeSIpCi0jZWxzZQotI2RlZmluZSBmYXN0X2lvYigpCQkJCVwKKyMgZWxzZQorIyAgZGVmaW5lIGZhc3RfaW9iKCkJCQkJXAogCWRvIHsJCQkJCVwKIAkJX19zeW5jKCk7CQkJXAogCQlfX2Zhc3RfaW9iKCk7CQkJXAogCX0gd2hpbGUgKDApCi0jZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gKi8KIAogI2lmZGVmIENPTkZJR19DUFVfSEFTX1dCCiAKQEAgLTEzMSwyNSArMTQwLDQyIEBACiAjZW5kaWYgLyogIUNPTkZJR19DUFVfSEFTX1dCICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19XRUFLX09SREVSSU5HKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCi0jZGVmaW5lIF9fV0VBS19PUkRFUklOR19NQgkiICAgICAgIHN5bmMJXG4iCisjIGlmZGVmIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTgorIyAgZGVmaW5lIHNtcF9tYigpCV9fc3luYygpCisjICBkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorIyAgZGVmaW5lIHNtcF93bWIoKQlfX3N5bmN3KCkKKyMgZWxzZQorIyAgZGVmaW5lIHNtcF9tYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIiA6IDogOiJtZW1vcnkiKQorIyAgZGVmaW5lIHNtcF9ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIgOiA6IDoibWVtb3J5IikKKyMgIGRlZmluZSBzbXBfd21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiIDogOiA6Im1lbW9yeSIpCisjIGVuZGlmCiAjZWxzZQotI2RlZmluZSBfX1dFQUtfT1JERVJJTkdfTUIJIgkJXG4iCisjZGVmaW5lIHNtcF9tYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcm1iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF93bWIoKQliYXJyaWVyKCkKICNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfV0VBS19SRU9SREVSSU5HX0JFWU9ORF9MTFNDKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCiAjZGVmaW5lIF9fV0VBS19MTFNDX01CCQkiICAgICAgIHN5bmMJXG4iCiAjZWxzZQogI2RlZmluZSBfX1dFQUtfTExTQ19NQgkJIgkJXG4iCiAjZW5kaWYKIAotI2RlZmluZSBzbXBfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfT1JERVJJTkdfTUIgOiA6IDoibWVtb3J5IikKLSNkZWZpbmUgc21wX3JtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKF9fV0VBS19PUkRFUklOR19NQiA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzbXBfd21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oX19XRUFLX09SREVSSU5HX01CIDogOiA6Im1lbW9yeSIpCi0KICNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIFwKIAlkbyB7IHZhciA9IHZhbHVlOyBzbXBfbWIoKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBzbXBfbGxzY19tYigpCV9fYXNtX18gX192b2xhdGlsZV9fKF9fV0VBS19MTFNDX01CIDogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIHNtcF9sbHNjX3JtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKF9fV0VBS19MTFNDX01CIDogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIHNtcF9sbHNjX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKF9fV0VBS19MTFNDX01CIDogOiA6Im1lbW9yeSIpCisKKyNpZmRlZiBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfbGxzYygpIHNtcF93bWIoKQorLyogQ2F1c2UgcHJldmlvdXMgd3JpdGVzIHRvIGJlY29tZSB2aXNpYmxlIG9uIGFsbCBDUFVzIGFzIHNvb24gYXMgcG9zc2libGUgKi8KKyNkZWZpbmUgbnVkZ2Vfd3JpdGVzKCkgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5zZXQgcHVzaFxuXHQiCQlcCisJCQkJCSAgICAiLnNldCBhcmNoPW9jdGVvblxuXHQiCVwKKwkJCQkJICAgICJzeW5jd1xuXHQiCQkJXAorCQkJCQkgICAgIi5zZXQgcG9wIiA6IDogOiAibWVtb3J5IikKKyNlbHNlCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2xsc2MoKSBzbXBfbGxzY19tYigpCisjZGVmaW5lIG51ZGdlX3dyaXRlcygpIG1iKCkKKyNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQkFSUklFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmgKaW5kZXggODRhMzgzOC4uOTI1NWNmYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtNDIsNyArNDIsNyBAQAogLyoKICAqIGNsZWFyX2JpdCgpIGRvZXNuJ3QgcHJvdmlkZSBhbnkgYmFycmllciBmb3IgdGhlIGNvbXBpbGVyLgogICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9sbHNjX21iKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJc21wX21iX19iZWZvcmVfbGxzYygpCiAjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJc21wX2xsc2NfbWIoKQogCiAvKgpAQCAtMjU4LDcgKzI1OCw3IEBACiAJdW5zaWduZWQgc2hvcnQgYml0ID0gbnIgJiBTWkxPTkdfTUFTSzsKIAl1bnNpZ25lZCBsb25nIHJlczsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CkBAIC0zOTUsNyArMzk1LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBiaXQgPSBuciAmIFNaTE9OR19NQVNLOwogCXVuc2lnbmVkIGxvbmcgcmVzOwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJdW5zaWduZWQgbG9uZyAqbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCXVuc2lnbmVkIHNob3J0IGJpdCA9IG5yICYgU1pMT05HX01BU0s7CiAJdW5zaWduZWQgbG9uZyByZXM7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NtcHhjaGcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKaW5kZXggODE1YTQzOC4uZWQ5YWFhYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NtcHhjaGcuaApAQCAtNzIsMTQgKzcyLDE0IEBACiAgKi8KIGV4dGVybiB2b2lkIF9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKIAotI2RlZmluZSBfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgYmFycmllcikJCQkJXAorI2RlZmluZSBfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgcHJlX2JhcnJpZXIsIHBvc3RfYmFycmllcikJCVwKICh7CQkJCQkJCQkJXAogCV9fdHlwZW9mX18ocHRyKSBfX3B0ciA9IChwdHIpOwkJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX29sZCA9IChvbGQpOwkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fbmV3ID0gKG5ldyk7CQkJCVwKIAlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXMgPSAwOwkJCQkJXAogCQkJCQkJCQkJXAotCWJhcnJpZXI7CQkJCQkJCVwKKwlwcmVfYmFycmllcjsJCQkJCQkJXAogCQkJCQkJCQkJXAogCXN3aXRjaCAoc2l6ZW9mKCooX19wdHIpKSkgewkJCQkJXAogCWNhc2UgNDoJCQkJCQkJCVwKQEAgLTk2LDEzICs5NiwxMyBAQAogCQlicmVhazsJCQkJCQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQliYXJyaWVyOwkJCQkJCQlcCisJcG9zdF9iYXJyaWVyOwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJX19yZXM7CQkJCQkJCQlcCiB9KQogCi0jZGVmaW5lIGNtcHhjaGcocHRyLCBvbGQsIG5ldykJCV9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCBzbXBfbGxzY19tYigpKQotI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0ciwgb2xkLCBuZXcpCV9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCApCisjZGVmaW5lIGNtcHhjaGcocHRyLCBvbGQsIG5ldykJCV9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCBzbXBfbWJfX2JlZm9yZV9sbHNjKCksIHNtcF9sbHNjX21iKCkpCisjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvbGQsIG5ldykJX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsICwgKQogCiAjZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJXAogICAoewkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaAppbmRleCAyNzJjNWVmLi5hYzczY2VkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCkBAIC05NSw2ICs5NSw5IEBACiAjaWZuZGVmIGNwdV9oYXNfc21hcnRtaXBzCiAjZGVmaW5lIGNwdV9oYXNfc21hcnRtaXBzICAgICAgKGNwdV9kYXRhWzBdLmFzZXMgJiBNSVBTX0FTRV9TTUFSVE1JUFMpCiAjZW5kaWYKKyNpZm5kZWYga2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkKKyNkZWZpbmUga2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgMAorI2VuZGlmCiAjaWZuZGVmIGNwdV9oYXNfdnRhZ19pY2FjaGUKICNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkoY3B1X2RhdGFbMF0uaWNhY2hlLmZsYWdzICYgTUlQU19DQUNIRV9WVEFHKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggY2YzNzNhOS4uYTVhY2RhNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMjI0LDcgKzIyNCw3IEBACiAJICogTUlQUzY0IGNsYXNzIHByb2Nlc3NvcnMKIAkgKi8KIAlDUFVfNUtDLCBDUFVfMjBLQywgQ1BVXzI1S0YsIENQVV9TQjEsIENQVV9TQjFBLCBDUFVfTE9PTkdTT04yLAotCUNQVV9DQVZJVU1fT0NURU9OLAorCUNQVV9DQVZJVU1fT0NURU9OLCBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTLAogCiAJQ1BVX0xBU1QKIH07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3VycmVudC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2N1cnJlbnQuaAppbmRleCA1NTlkYjY2Li40YzUxNDAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3VycmVudC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jdXJyZW50LmgKQEAgLTEsMjMgKzEgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDIgUmFsZiBCYWVjaGxlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICovCi0jaWZuZGVmIF9BU01fQ1VSUkVOVF9ICi0jZGVmaW5lIF9BU01fQ1VSUkVOVF9ICi0KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgotCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICogZ2V0X2N1cnJlbnQodm9pZCkKLXsKLQlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT50YXNrOwotfQotCi0jZGVmaW5lIGN1cnJlbnQJCWdldF9jdXJyZW50KCkKLQotI2VuZGlmIC8qIF9BU01fQ1VSUkVOVF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3VycmVudC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9rbjAxLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGVjL2tuMDEuaAppbmRleCAyOGZhNzE3Li44OGQ5ZmZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGVjL2tuMDEuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGVjL2tuMDEuaApAQCAtODAsNyArODAsNiBAQAogc3RydWN0IHB0X3JlZ3M7CiAKIGV4dGVybiB1MTYgY2FjaGVkX2tuMDFfY3NyOwotZXh0ZXJuIHNwaW5sb2NrX3Qga24wMV9sb2NrOwogCiBleHRlcm4gdm9pZCBkZWNfa24wMV9iZV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBkZWNfa24wMV9iZV9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXNfZml4dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RldmljZS5oCmluZGV4IGQ4Zjk4NzIuLjA2NzQ2YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTQsNCArNCwzIEBACiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyCiAgKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kZXZpY2UuaD4KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDdhNmEzNWQuLmU1M2Q3YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTMzNCwxNCArMzM0LDE0IEBACiAKICNkZWZpbmUgRUxGX0hXQ0FQICAgICAgICgwKQogCi0vKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KLSAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCi0gICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4KKy8qCisgKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAqIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgKiBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4KKyAqLwogCi0gICBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmx5IG9wdGltaXphdGlvbnMgZm9yIHRoZSBJbnRlbCBnZW5lcmF0aW9ucywKLSAgIGJ1dCB0aGF0IGNvdWxkIGNoYW5nZS4uLiAqLwotCi0jZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCisjZGVmaW5lIEVMRl9QTEFURk9STSAgX19lbGZfcGxhdGZvcm0KK2V4dGVybiBjb25zdCBjaGFyICpfX2VsZl9wbGF0Zm9ybTsKIAogLyoKICAqIFNlZSBjb21tZW50cyBpbiBhc20tYWxwaGEvZWxmLmgsIHRoaXMgaXMgdGhlIHNhbWUgdGhpbmcKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCAzOTg2Y2Q4Li5jZTM1YzlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC00LDcgKzQsNyBAQAogICogbW9yZSBkZXRhaWxzLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5LCBDaGluYQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKi8KIAogI2lmbmRlZiBfQVNNX01JUFNfRlRSQUNFX0gKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1OS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2k4MjU5LmgKaW5kZXggODU3MmEyZC4uYzdlMjc4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2k4MjU5LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2k4MjU5LmgKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgU0xBVkVfSUNXNF9ERUZBVUxUCTB4MDEKICNkZWZpbmUgUElDX0lDVzRfQUVPSQkJMgogCi1leHRlcm4gc3BpbmxvY2tfdCBpODI1OUFfbG9jazsKK2V4dGVybiByYXdfc3BpbmxvY2tfdCBpODI1OUFfbG9jazsKIAogZXh0ZXJuIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gdm9pZCBtYWtlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKQEAgLTUxLDcgKzUxLDcgQEAKIHsKIAlpbnQgaXJxOwogCi0Jc3Bpbl9sb2NrKCZpODI1OUFfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmaTgyNTlBX2xvY2spOwogCiAJLyogUGVyZm9ybSBhbiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgY3ljbGUgb24gY29udHJvbGxlciAxLiAqLwogCW91dGIoMHgwQywgUElDX01BU1RFUl9DTUQpOwkJLyogcHJlcGFyZSBmb3IgcG9sbCAqLwpAQCAtNzgsNyArNzgsNyBAQAogCQkJaXJxID0gLTE7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKIAogCXJldHVybiBsaWtlbHkoaXJxID49IDApID8gaXJxICsgSTgyNTlBX0lSUV9CQVNFIDogaXJxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaAppbmRleCA0MzY4NzhlLi5jOThiZjUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaApAQCAtNDQ3LDYgKzQ0NywyNCBAQAogI2RlZmluZSByZWFkbF9yZWxheGVkCQkJcmVhZGwKICNkZWZpbmUgcmVhZHFfcmVsYXhlZAkJCXJlYWRxCiAKKyNkZWZpbmUgcmVhZGJfYmUoYWRkcikJCQkJCQkJXAorCV9fcmF3X3JlYWRiKChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKQorI2RlZmluZSByZWFkd19iZShhZGRyKQkJCQkJCQlcCisJYmUxNl90b19jcHUoX19yYXdfcmVhZHcoKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpKQorI2RlZmluZSByZWFkbF9iZShhZGRyKQkJCQkJCQlcCisJYmUzMl90b19jcHUoX19yYXdfcmVhZGwoKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpKQorI2RlZmluZSByZWFkcV9iZShhZGRyKQkJCQkJCQlcCisJYmU2NF90b19jcHUoX19yYXdfcmVhZHEoKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpKQorCisjZGVmaW5lIHdyaXRlYl9iZSh2YWwsIGFkZHIpCQkJCQkJXAorCV9fcmF3X3dyaXRlYigodmFsKSwgKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpCisjZGVmaW5lIHdyaXRld19iZSh2YWwsIGFkZHIpCQkJCQkJXAorCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNigodmFsKSksIChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKQorI2RlZmluZSB3cml0ZWxfYmUodmFsLCBhZGRyKQkJCQkJCVwKKwlfX3Jhd193cml0ZWwoY3B1X3RvX2JlMzIoKHZhbCkpLCAoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkKKyNkZWZpbmUgd3JpdGVxX2JlKHZhbCwgYWRkcikJCQkJCQlcCisJX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KCh2YWwpKSwgKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpCisKIC8qCiAgKiBTb21lIGNvZGUgdGVzdHMgZm9yIHRoZXNlIHN5bWJvbHMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCmluZGV4IDIxY2JiYzcuLmYxY2YzODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKQEAgLTEwNSwyNiArMTA1LDkgQEAKIAlyZXR1cm4gKHJlYWRsKCh2b2lkICopS1NFRzFBRERSKEFSN19SRUdTX0dQSU8gKyAweDE0KSkgPj4gMTYpICYgMHhmZjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYXI3X2NwdV9mcmVxKHZvaWQpCi17Ci0JcmV0dXJuIGFyN19jcHVfY2xvY2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFyN19idXNfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfYnVzX2Nsb2NrOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfdmJ1c19mcmVxKHZvaWQpCi17Ci0JcmV0dXJuIGFyN19idXNfY2xvY2sgLyAyOwotfQotI2RlZmluZSBhcjdfY3BtYWNfZnJlcSBhcjdfdmJ1c19mcmVxCi0KLXN0YXRpYyBpbmxpbmUgaW50IGFyN19kc3BfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfZHNwX2Nsb2NrOwotfQorc3RydWN0IGNsayB7CisJdW5zaWduZWQgaW50CXJhdGU7Cit9OwogCiBzdGF0aWMgaW5saW5lIGludCBhcjdfaGFzX2hpZ2hfY3BtYWModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvZ3Bpby5oCmluZGV4IGNiZTljNGYuLjczZjliMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2dwaW8uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiw4OCArMjIsMTggQEAKICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CiAKICNkZWZpbmUgQVI3X0dQSU9fTUFYIDMyCisjZGVmaW5lIE5SX0JVSUxUSU5fR1BJTyBBUjdfR1BJT19NQVgKIAotZXh0ZXJuIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwotZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOworI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlOVUxMCiAKLS8qIENvbW1vbiBHUElPIGxheWVyICovCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19pbiA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX0lOUFVUKTsKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUgX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZSBfX2dwaW9fc2V0X3ZhbHVlCiAKLQlyZXR1cm4gcmVhZGwoZ3Bpb19pbikgJiAoMSA8PCBncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9fb3V0ID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fT1VUUFVUKTsKLQl1bnNpZ25lZCB0bXA7Ci0KLQl0bXAgPSByZWFkbChncGlvX291dCkgJiB+KDEgPDwgZ3Bpbyk7Ci0JaWYgKHZhbHVlKQotCQl0bXAgfD0gMSA8PCBncGlvOwotCXdyaXRlbCh0bXAsIGdwaW9fb3V0KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9fZGlyID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRElSKTsKLQotCWlmIChncGlvID49IEFSN19HUElPX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpIHwgKDEgPDwgZ3BpbyksIGdwaW9fZGlyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19kaXIgPQotCQkodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFSN19SRUdTX0dQSU8gKyBBUjdfR1BJT19ESVIpOwotCi0JaWYgKGdwaW8gPj0gQVI3X0dQSU9fTUFYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKLQl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpICYgfigxIDw8IGdwaW8pLCBncGlvX2Rpcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKQotewotCXJldHVybiAtRUlOVkFMOwotfQorI2RlZmluZSBncGlvX2NhbnNsZWVwIF9fZ3Bpb19jYW5zbGVlcAogCiAvKiBCb2FyZCBzcGVjaWZpYyBHUElPIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSBpbnQgYXI3X2dwaW9fZW5hYmxlKHVuc2lnbmVkIGdwaW8pCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX2VuID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRU5BQkxFKTsKLQotCXdyaXRlbChyZWFkbChncGlvX2VuKSB8ICgxIDw8IGdwaW8pLCBncGlvX2VuKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfZ3Bpb19kaXNhYmxlKHVuc2lnbmVkIGdwaW8pCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX2VuID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRU5BQkxFKTsKLQotCXdyaXRlbChyZWFkbChncGlvX2VuKSAmIH4oMSA8PCBncGlvKSwgZ3Bpb19lbik7Ci0KLQlyZXR1cm4gMDsKLX0KK2ludCBhcjdfZ3Bpb19lbmFibGUodW5zaWduZWQgZ3Bpbyk7CitpbnQgYXI3X2dwaW9fZGlzYWJsZSh1bnNpZ25lZCBncGlvKTsKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oCmluZGV4IDg1NGU5NWYuLmFlMDc0MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwLmgKQEAgLTEzMCw2ICsxMzAsNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBBTENIRU1ZX0NQVV9VTktOT1dOCS0xCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTAwMAkwCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTUwMAkxCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTEwMAkyCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTU1MAkzCisjZGVmaW5lIEFMQ0hFTVlfQ1BVX0FVMTIwMAk0CisKK3N0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ2V0X2NwdXR5cGUodm9pZCkKK3sKKwlzd2l0Y2ggKHJlYWRfYzBfcHJpZCgpICYgMHhmZmZmMDAwMCkgeworCWNhc2UgMHgwMDAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTAwMDsKKwkJYnJlYWs7CisJY2FzZSAweDAxMDMwMDAwOgorCQlyZXR1cm4gQUxDSEVNWV9DUFVfQVUxNTAwOworCQlicmVhazsKKwljYXNlIDB4MDIwMzAwMDA6CisJCXJldHVybiBBTENIRU1ZX0NQVV9BVTExMDA7CisJCWJyZWFrOworCWNhc2UgMHgwMzAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTU1MDsKKwkJYnJlYWs7CisJY2FzZSAweDA0MDMwMDAwOgorCWNhc2UgMHgwNTAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTIwMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIEFMQ0hFTVlfQ1BVX1VOS05PV047Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGNoZW15X3VhcnRfcHV0Y2hhcih1MzIgdWFydF9waHlzLCB1OCBjKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIodWFydF9waHlzKTsKKwlpbnQgdGltZW91dCwgaTsKKworCS8qIGNoZWNrIExTUiBUWF9FTVBUWSBiaXQgKi8KKwl0aW1lb3V0ID0gMHhmZmZmZmY7CisJZG8geworCQlpZiAoX19yYXdfcmVhZGwoYmFzZSArIDB4MWMpICYgMHgyMCkKKwkJCWJyZWFrOworCQkvKiBzbG93IGRvd24gKi8KKwkJZm9yIChpID0gMTAwMDA7IGk7IGktLSkKKwkJCWFzbSB2b2xhdGlsZSAoIm5vcCIpOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlfX3Jhd193cml0ZWwoYywgYmFzZSArIDB4MDQpOwkvKiB0eCAqLworCXdtYigpOworfQorCiAvKiBhcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9jbG9ja3MuYyAqLwogZXh0ZXJuIHZvaWQgc2V0X2F1MXgwMF9zcGVlZCh1bnNpZ25lZCBpbnQgbmV3X2ZyZXEpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfYXUxeDAwX3NwZWVkKHZvaWQpOwpAQCAtMTQzLDIwICsxOTMsMzMyIEBACiB2b2lkIHNhdmVfYXUxeHh4X2ludGN0bCh2b2lkKTsKIHZvaWQgcmVzdG9yZV9hdTF4eHhfaW50Y3RsKHZvaWQpOwogCi0vKgotICogRXZlcnkgYm9hcmQgZGVzY3JpYmVzIGl0cyBJUlEgbWFwcGluZyB3aXRoIHRoaXMgdGFibGUuCi0gKi8KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIHsKLQlpbnQJaW1faXJxOwotCWludAlpbV90eXBlOwotCWludAlpbV9yZXF1ZXN0OworCisvKiBTT0MgSW50ZXJydXB0IG51bWJlcnMgKi8KKworI2RlZmluZSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UJKE1JUFNfQ1BVX0lSUV9CQVNFICsgOCkKKyNkZWZpbmUgQVUxMDAwX0lOVEMwX0lOVF9MQVNUCShBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMSkKKyNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9CQVNFCShBVTEwMDBfSU5UQzBfSU5UX0xBU1QgKyAxKQorI2RlZmluZSBBVTEwMDBfSU5UQzFfSU5UX0xBU1QJKEFVMTAwMF9JTlRDMV9JTlRfQkFTRSArIDMxKQorI2RlZmluZSBBVTEwMDBfTUFYX0lOVFIgCUFVMTAwMF9JTlRDMV9JTlRfTEFTVAorCitlbnVtIHNvY19hdTEwMDBfaW50cyB7CisJQVUxMDAwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTEwMDBfVUFSVDBfSU5UCT0gQVUxMDAwX0ZJUlNUX0lOVCwKKwlBVTEwMDBfVUFSVDFfSU5ULAorCUFVMTAwMF9VQVJUMl9JTlQsCisJQVUxMDAwX1VBUlQzX0lOVCwKKwlBVTEwMDBfU1NJMF9JTlQsCisJQVUxMDAwX1NTSTFfSU5ULAorCUFVMTAwMF9ETUFfSU5UX0JBU0UsCisKKwlBVTEwMDBfVE9ZX0lOVAkJPSBBVTEwMDBfRklSU1RfSU5UICsgMTQsCisJQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCisJQVUxMDAwX1JUQ19JTlQsCisJQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTEwMDBfUlRDX01BVENIMl9JTlQsCisJQVUxMDAwX0lSREFfVFhfSU5ULAorCUFVMTAwMF9JUkRBX1JYX0lOVCwKKwlBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTAwMF9VU0JfREVWX1NVU19JTlQsCisJQVUxMDAwX1VTQl9IT1NUX0lOVCwKKwlBVTEwMDBfQUNTWU5DX0lOVCwKKwlBVTEwMDBfTUFDMF9ETUFfSU5ULAorCUFVMTAwMF9NQUMxX0RNQV9JTlQsCisJQVUxMDAwX0kyU19VT19JTlQsCisJQVUxMDAwX0FDOTdDX0lOVCwKKwlBVTEwMDBfR1BJTzBfSU5ULAorCUFVMTAwMF9HUElPMV9JTlQsCisJQVUxMDAwX0dQSU8yX0lOVCwKKwlBVTEwMDBfR1BJTzNfSU5ULAorCUFVMTAwMF9HUElPNF9JTlQsCisJQVUxMDAwX0dQSU81X0lOVCwKKwlBVTEwMDBfR1BJTzZfSU5ULAorCUFVMTAwMF9HUElPN19JTlQsCisJQVUxMDAwX0dQSU84X0lOVCwKKwlBVTEwMDBfR1BJTzlfSU5ULAorCUFVMTAwMF9HUElPMTBfSU5ULAorCUFVMTAwMF9HUElPMTFfSU5ULAorCUFVMTAwMF9HUElPMTJfSU5ULAorCUFVMTAwMF9HUElPMTNfSU5ULAorCUFVMTAwMF9HUElPMTRfSU5ULAorCUFVMTAwMF9HUElPMTVfSU5ULAorCUFVMTAwMF9HUElPMTZfSU5ULAorCUFVMTAwMF9HUElPMTdfSU5ULAorCUFVMTAwMF9HUElPMThfSU5ULAorCUFVMTAwMF9HUElPMTlfSU5ULAorCUFVMTAwMF9HUElPMjBfSU5ULAorCUFVMTAwMF9HUElPMjFfSU5ULAorCUFVMTAwMF9HUElPMjJfSU5ULAorCUFVMTAwMF9HUElPMjNfSU5ULAorCUFVMTAwMF9HUElPMjRfSU5ULAorCUFVMTAwMF9HUElPMjVfSU5ULAorCUFVMTAwMF9HUElPMjZfSU5ULAorCUFVMTAwMF9HUElPMjdfSU5ULAorCUFVMTAwMF9HUElPMjhfSU5ULAorCUFVMTAwMF9HUElPMjlfSU5ULAorCUFVMTAwMF9HUElPMzBfSU5ULAorCUFVMTAwMF9HUElPMzFfSU5ULAogfTsKIAotLyogY29yZSBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGxldCBib2FyZHMgaW5pdGlhbGl6ZSBvdGhlciBJUlEgc291cmNlcyAqLwotdm9pZCBib2FyZF9pbml0X2lycSh2b2lkKTsKK2VudW0gc29jX2F1MTEwMF9pbnRzIHsKKwlBVTExMDBfRklSU1RfSU5UCT0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFLAorCUFVMTEwMF9VQVJUMF9JTlQJPSBBVTExMDBfRklSU1RfSU5ULAorCUFVMTEwMF9VQVJUMV9JTlQsCisJQVUxMTAwX1NEX0lOVCwKKwlBVTExMDBfVUFSVDNfSU5ULAorCUFVMTEwMF9TU0kwX0lOVCwKKwlBVTExMDBfU1NJMV9JTlQsCisJQVUxMTAwX0RNQV9JTlRfQkFTRSwKIAotLyogYm9hcmRzIGNhbGwgdGhpcyB0byByZWdpc3RlciBhZGRpdGlvbmFsIChHUElPKSBpbnRlcnJ1cHRzICovCi12b2lkIGF1MXh4eF9zZXR1cF9pcnFtYXAoc3RydWN0IGF1MXh4eF9pcnFtYXAgKm1hcCwgaW50IGNvdW50KTsKKwlBVTExMDBfVE9ZX0lOVAkJPSBBVTExMDBfRklSU1RfSU5UICsgMTQsCisJQVUxMTAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTEwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTExMDBfVE9ZX01BVENIMl9JTlQsCisJQVUxMTAwX1JUQ19JTlQsCisJQVUxMTAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTEwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTExMDBfUlRDX01BVENIMl9JTlQsCisJQVUxMTAwX0lSREFfVFhfSU5ULAorCUFVMTEwMF9JUkRBX1JYX0lOVCwKKwlBVTExMDBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTEwMF9VU0JfREVWX1NVU19JTlQsCisJQVUxMTAwX1VTQl9IT1NUX0lOVCwKKwlBVTExMDBfQUNTWU5DX0lOVCwKKwlBVTExMDBfTUFDMF9ETUFfSU5ULAorCUFVMTEwMF9HUElPMjA4XzIxNV9JTlQsCisJQVUxMTAwX0xDRF9JTlQsCisJQVUxMTAwX0FDOTdDX0lOVCwKKwlBVTExMDBfR1BJTzBfSU5ULAorCUFVMTEwMF9HUElPMV9JTlQsCisJQVUxMTAwX0dQSU8yX0lOVCwKKwlBVTExMDBfR1BJTzNfSU5ULAorCUFVMTEwMF9HUElPNF9JTlQsCisJQVUxMTAwX0dQSU81X0lOVCwKKwlBVTExMDBfR1BJTzZfSU5ULAorCUFVMTEwMF9HUElPN19JTlQsCisJQVUxMTAwX0dQSU84X0lOVCwKKwlBVTExMDBfR1BJTzlfSU5ULAorCUFVMTEwMF9HUElPMTBfSU5ULAorCUFVMTEwMF9HUElPMTFfSU5ULAorCUFVMTEwMF9HUElPMTJfSU5ULAorCUFVMTEwMF9HUElPMTNfSU5ULAorCUFVMTEwMF9HUElPMTRfSU5ULAorCUFVMTEwMF9HUElPMTVfSU5ULAorCUFVMTEwMF9HUElPMTZfSU5ULAorCUFVMTEwMF9HUElPMTdfSU5ULAorCUFVMTEwMF9HUElPMThfSU5ULAorCUFVMTEwMF9HUElPMTlfSU5ULAorCUFVMTEwMF9HUElPMjBfSU5ULAorCUFVMTEwMF9HUElPMjFfSU5ULAorCUFVMTEwMF9HUElPMjJfSU5ULAorCUFVMTEwMF9HUElPMjNfSU5ULAorCUFVMTEwMF9HUElPMjRfSU5ULAorCUFVMTEwMF9HUElPMjVfSU5ULAorCUFVMTEwMF9HUElPMjZfSU5ULAorCUFVMTEwMF9HUElPMjdfSU5ULAorCUFVMTEwMF9HUElPMjhfSU5ULAorCUFVMTEwMF9HUElPMjlfSU5ULAorCUFVMTEwMF9HUElPMzBfSU5ULAorCUFVMTEwMF9HUElPMzFfSU5ULAorfTsKKworZW51bSBzb2NfYXUxNTAwX2ludHMgeworCUFVMTUwMF9GSVJTVF9JTlQJPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UsCisJQVUxNTAwX1VBUlQwX0lOVAk9IEFVMTUwMF9GSVJTVF9JTlQsCisJQVUxNTAwX1BDSV9JTlRBLAorCUFVMTUwMF9QQ0lfSU5UQiwKKwlBVTE1MDBfVUFSVDNfSU5ULAorCUFVMTUwMF9QQ0lfSU5UQywKKwlBVTE1MDBfUENJX0lOVEQsCisJQVUxNTAwX0RNQV9JTlRfQkFTRSwKKworCUFVMTUwMF9UT1lfSU5UCQk9IEFVMTUwMF9GSVJTVF9JTlQgKyAxNCwKKwlBVTE1MDBfVE9ZX01BVENIMF9JTlQsCisJQVUxNTAwX1RPWV9NQVRDSDFfSU5ULAorCUFVMTUwMF9UT1lfTUFUQ0gyX0lOVCwKKwlBVTE1MDBfUlRDX0lOVCwKKwlBVTE1MDBfUlRDX01BVENIMF9JTlQsCisJQVUxNTAwX1JUQ19NQVRDSDFfSU5ULAorCUFVMTUwMF9SVENfTUFUQ0gyX0lOVCwKKwlBVTE1MDBfUENJX0VSUl9JTlQsCisJQVUxNTAwX1JFU0VSVkVEX0lOVCwKKwlBVTE1MDBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTUwMF9VU0JfREVWX1NVU19JTlQsCisJQVUxNTAwX1VTQl9IT1NUX0lOVCwKKwlBVTE1MDBfQUNTWU5DX0lOVCwKKwlBVTE1MDBfTUFDMF9ETUFfSU5ULAorCUFVMTUwMF9NQUMxX0RNQV9JTlQsCisJQVUxNTAwX0FDOTdDX0lOVAk9IEFVMTUwMF9GSVJTVF9JTlQgKyAzMSwKKwlBVTE1MDBfR1BJTzBfSU5ULAorCUFVMTUwMF9HUElPMV9JTlQsCisJQVUxNTAwX0dQSU8yX0lOVCwKKwlBVTE1MDBfR1BJTzNfSU5ULAorCUFVMTUwMF9HUElPNF9JTlQsCisJQVUxNTAwX0dQSU81X0lOVCwKKwlBVTE1MDBfR1BJTzZfSU5ULAorCUFVMTUwMF9HUElPN19JTlQsCisJQVUxNTAwX0dQSU84X0lOVCwKKwlBVTE1MDBfR1BJTzlfSU5ULAorCUFVMTUwMF9HUElPMTBfSU5ULAorCUFVMTUwMF9HUElPMTFfSU5ULAorCUFVMTUwMF9HUElPMTJfSU5ULAorCUFVMTUwMF9HUElPMTNfSU5ULAorCUFVMTUwMF9HUElPMTRfSU5ULAorCUFVMTUwMF9HUElPMTVfSU5ULAorCUFVMTUwMF9HUElPMjAwX0lOVCwKKwlBVTE1MDBfR1BJTzIwMV9JTlQsCisJQVUxNTAwX0dQSU8yMDJfSU5ULAorCUFVMTUwMF9HUElPMjAzX0lOVCwKKwlBVTE1MDBfR1BJTzIwX0lOVCwKKwlBVTE1MDBfR1BJTzIwNF9JTlQsCisJQVUxNTAwX0dQSU8yMDVfSU5ULAorCUFVMTUwMF9HUElPMjNfSU5ULAorCUFVMTUwMF9HUElPMjRfSU5ULAorCUFVMTUwMF9HUElPMjVfSU5ULAorCUFVMTUwMF9HUElPMjZfSU5ULAorCUFVMTUwMF9HUElPMjdfSU5ULAorCUFVMTUwMF9HUElPMjhfSU5ULAorCUFVMTUwMF9HUElPMjA2X0lOVCwKKwlBVTE1MDBfR1BJTzIwN19JTlQsCisJQVUxNTAwX0dQSU8yMDhfMjE1X0lOVCwKK307CisKK2VudW0gc29jX2F1MTU1MF9pbnRzIHsKKwlBVTE1NTBfRklSU1RfSU5UCT0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFLAorCUFVMTU1MF9VQVJUMF9JTlQJPSBBVTE1NTBfRklSU1RfSU5ULAorCUFVMTU1MF9QQ0lfSU5UQSwKKwlBVTE1NTBfUENJX0lOVEIsCisJQVUxNTUwX0RETUFfSU5ULAorCUFVMTU1MF9DUllQVE9fSU5ULAorCUFVMTU1MF9QQ0lfSU5UQywKKwlBVTE1NTBfUENJX0lOVEQsCisJQVUxNTUwX1BDSV9SU1RfSU5ULAorCUFVMTU1MF9VQVJUMV9JTlQsCisJQVUxNTUwX1VBUlQzX0lOVCwKKwlBVTE1NTBfUFNDMF9JTlQsCisJQVUxNTUwX1BTQzFfSU5ULAorCUFVMTU1MF9QU0MyX0lOVCwKKwlBVTE1NTBfUFNDM19JTlQsCisJQVUxNTUwX1RPWV9JTlQsCisJQVUxNTUwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTU1MF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTE1NTBfVE9ZX01BVENIMl9JTlQsCisJQVUxNTUwX1JUQ19JTlQsCisJQVUxNTUwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTU1MF9SVENfTUFUQ0gxX0lOVCwKKwlBVTE1NTBfUlRDX01BVENIMl9JTlQsCisKKwlBVTE1NTBfTkFORF9JTlQJCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDIzLAorCUFVMTU1MF9VU0JfREVWX1JFUV9JTlQsCisJQVUxNTUwX1VTQl9ERVZfU1VTX0lOVCwKKwlBVTE1NTBfVVNCX0hPU1RfSU5ULAorCUFVMTU1MF9NQUMwX0RNQV9JTlQsCisJQVUxNTUwX01BQzFfRE1BX0lOVCwKKwlBVTE1NTBfR1BJTzBfSU5UCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDMyLAorCUFVMTU1MF9HUElPMV9JTlQsCisJQVUxNTUwX0dQSU8yX0lOVCwKKwlBVTE1NTBfR1BJTzNfSU5ULAorCUFVMTU1MF9HUElPNF9JTlQsCisJQVUxNTUwX0dQSU81X0lOVCwKKwlBVTE1NTBfR1BJTzZfSU5ULAorCUFVMTU1MF9HUElPN19JTlQsCisJQVUxNTUwX0dQSU84X0lOVCwKKwlBVTE1NTBfR1BJTzlfSU5ULAorCUFVMTU1MF9HUElPMTBfSU5ULAorCUFVMTU1MF9HUElPMTFfSU5ULAorCUFVMTU1MF9HUElPMTJfSU5ULAorCUFVMTU1MF9HUElPMTNfSU5ULAorCUFVMTU1MF9HUElPMTRfSU5ULAorCUFVMTU1MF9HUElPMTVfSU5ULAorCUFVMTU1MF9HUElPMjAwX0lOVCwKKwlBVTE1NTBfR1BJTzIwMV8yMDVfSU5ULAkvKiBMb2dpY2FsIG9yIG9mIEdQSU8yMDE6MjA1ICovCisJQVUxNTUwX0dQSU8xNl9JTlQsCisJQVUxNTUwX0dQSU8xN19JTlQsCisJQVUxNTUwX0dQSU8yMF9JTlQsCisJQVUxNTUwX0dQSU8yMV9JTlQsCisJQVUxNTUwX0dQSU8yMl9JTlQsCisJQVUxNTUwX0dQSU8yM19JTlQsCisJQVUxNTUwX0dQSU8yNF9JTlQsCisJQVUxNTUwX0dQSU8yNV9JTlQsCisJQVUxNTUwX0dQSU8yNl9JTlQsCisJQVUxNTUwX0dQSU8yN19JTlQsCisJQVUxNTUwX0dQSU8yOF9JTlQsCisJQVUxNTUwX0dQSU8yMDZfSU5ULAorCUFVMTU1MF9HUElPMjA3X0lOVCwKKwlBVTE1NTBfR1BJTzIwOF8yMTVfSU5ULAkvKiBMb2dpY2FsIG9yIG9mIEdQSU8yMDg6MjE1ICovCit9OworCitlbnVtIHNvY19hdTEyMDBfaW50cyB7CisJQVUxMjAwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTEyMDBfVUFSVDBfSU5UCT0gQVUxMjAwX0ZJUlNUX0lOVCwKKwlBVTEyMDBfU1dUX0lOVCwKKwlBVTEyMDBfU0RfSU5ULAorCUFVMTIwMF9ERE1BX0lOVCwKKwlBVTEyMDBfTUFFX0JFX0lOVCwKKwlBVTEyMDBfR1BJTzIwMF9JTlQsCisJQVUxMjAwX0dQSU8yMDFfSU5ULAorCUFVMTIwMF9HUElPMjAyX0lOVCwKKwlBVTEyMDBfVUFSVDFfSU5ULAorCUFVMTIwMF9NQUVfRkVfSU5ULAorCUFVMTIwMF9QU0MwX0lOVCwKKwlBVTEyMDBfUFNDMV9JTlQsCisJQVUxMjAwX0FFU19JTlQsCisJQVUxMjAwX0NBTUVSQV9JTlQsCisJQVUxMjAwX1RPWV9JTlQsCisJQVUxMjAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTIwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTEyMDBfVE9ZX01BVENIMl9JTlQsCisJQVUxMjAwX1JUQ19JTlQsCisJQVUxMjAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTIwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTEyMDBfUlRDX01BVENIMl9JTlQsCisJQVUxMjAwX0dQSU8yMDNfSU5ULAorCUFVMTIwMF9OQU5EX0lOVCwKKwlBVTEyMDBfR1BJTzIwNF9JTlQsCisJQVUxMjAwX0dQSU8yMDVfSU5ULAorCUFVMTIwMF9HUElPMjA2X0lOVCwKKwlBVTEyMDBfR1BJTzIwN19JTlQsCisJQVUxMjAwX0dQSU8yMDhfMjE1X0lOVCwJLyogTG9naWNhbCBPUiBvZiAyMDg6MjE1ICovCisJQVUxMjAwX1VTQl9JTlQsCisJQVUxMjAwX0xDRF9JTlQsCisJQVUxMjAwX01BRV9CT1RIX0lOVCwKKwlBVTEyMDBfR1BJTzBfSU5ULAorCUFVMTIwMF9HUElPMV9JTlQsCisJQVUxMjAwX0dQSU8yX0lOVCwKKwlBVTEyMDBfR1BJTzNfSU5ULAorCUFVMTIwMF9HUElPNF9JTlQsCisJQVUxMjAwX0dQSU81X0lOVCwKKwlBVTEyMDBfR1BJTzZfSU5ULAorCUFVMTIwMF9HUElPN19JTlQsCisJQVUxMjAwX0dQSU84X0lOVCwKKwlBVTEyMDBfR1BJTzlfSU5ULAorCUFVMTIwMF9HUElPMTBfSU5ULAorCUFVMTIwMF9HUElPMTFfSU5ULAorCUFVMTIwMF9HUElPMTJfSU5ULAorCUFVMTIwMF9HUElPMTNfSU5ULAorCUFVMTIwMF9HUElPMTRfSU5ULAorCUFVMTIwMF9HUElPMTVfSU5ULAorCUFVMTIwMF9HUElPMTZfSU5ULAorCUFVMTIwMF9HUElPMTdfSU5ULAorCUFVMTIwMF9HUElPMThfSU5ULAorCUFVMTIwMF9HUElPMTlfSU5ULAorCUFVMTIwMF9HUElPMjBfSU5ULAorCUFVMTIwMF9HUElPMjFfSU5ULAorCUFVMTIwMF9HUElPMjJfSU5ULAorCUFVMTIwMF9HUElPMjNfSU5ULAorCUFVMTIwMF9HUElPMjRfSU5ULAorCUFVMTIwMF9HUElPMjVfSU5ULAorCUFVMTIwMF9HUElPMjZfSU5ULAorCUFVMTIwMF9HUElPMjdfSU5ULAorCUFVMTIwMF9HUElPMjhfSU5ULAorCUFVMTIwMF9HUElPMjlfSU5ULAorCUFVMTIwMF9HUElPMzBfSU5ULAorCUFVMTIwMF9HUElPMzFfSU5ULAorfTsKIAogI2VuZGlmIC8qICFkZWZpbmVkIChfTEFOR1VBR0VfQVNTRU1CTFkpICovCiAKQEAgLTU0OSw3OCArOTExLDE2IEBACiAKICNkZWZpbmUgSUMxX1RFU1RCSVQJCTB4QjE4MDAwODAKIAotLyogSW50ZXJydXB0IE51bWJlcnMgKi8KKwogLyogQXUxMDAwICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKLWVudW0gc29jX2F1MTAwMF9pbnRzIHsKLQlBVTEwMDBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTAwMF9VQVJUMF9JTlQJPSBBVTEwMDBfRklSU1RfSU5ULAotCUFVMTAwMF9VQVJUMV9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9VQVJUMl9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9VQVJUM19JTlQsCi0JQVUxMDAwX1NTSTBfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfU1NJMV9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9ETUFfSU5UX0JBU0UsCi0KLQlBVTEwMDBfVE9ZX0lOVAkJPSBBVTEwMDBfRklSU1RfSU5UICsgMTQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0JQVUxMDAwX0lSREFfVFhfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfSVJEQV9SWF9JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9BQ1NZTkNfSU5ULAotCUFVMTAwMF9NQUMwX0RNQV9JTlQsCi0JQVUxMDAwX01BQzFfRE1BX0lOVCwKLQlBVTEwMDBfSTJTX1VPX0lOVCwJCQkJLyogYXUxMDAwICovCi0JQVUxMDAwX0FDOTdDX0lOVCwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTAwMF9HUElPXzE2LAotCUFVMTAwMF9HUElPXzE3LAotCUFVMTAwMF9HUElPXzE4LAotCUFVMTAwMF9HUElPXzE5LAotCUFVMTAwMF9HUElPXzIwLAotCUFVMTAwMF9HUElPXzIxLAotCUFVMTAwMF9HUElPXzIyLAotCUFVMTAwMF9HUElPXzIzLAotCUFVMTAwMF9HUElPXzI0LAotCUFVMTAwMF9HUElPXzI1LAotCUFVMTAwMF9HUElPXzI2LAotCUFVMTAwMF9HUElPXzI3LAotCUFVMTAwMF9HUElPXzI4LAotCUFVMTAwMF9HUElPXzI5LAotCUFVMTAwMF9HUElPXzMwLAotCUFVMTAwMF9HUElPXzMxLAotfTsKIAogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKLSNkZWZpbmUgVUFSVDJfQUREUgkJMHhCMTMwMDAwMAogI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdGRkZDCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTEwMDBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxMDAwX0VUSDBfQkFTRQkweEIwNTAwMDAwCiAjZGVmaW5lIEFVMTAwMF9FVEgxX0JBU0UJMHhCMDUxMDAwMApAQCAtNjMxLDc4ICs5MzEsMTMgQEAKIAogLyogQXUxNTAwICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTE1MDAKLWVudW0gc29jX2F1MTUwMF9pbnRzIHsKLQlBVTE1MDBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTUwMF9VQVJUMF9JTlQJPSBBVTE1MDBfRklSU1RfSU5ULAotCUFVMTAwMF9QQ0lfSU5UQSwJCQkJLyogYXUxNTAwICovCi0JQVUxMDAwX1BDSV9JTlRCLAkJCQkvKiBhdTE1MDAgKi8KLQlBVTE1MDBfVUFSVDNfSU5ULAotCUFVMTAwMF9QQ0lfSU5UQywJCQkJLyogYXUxNTAwICovCi0JQVUxMDAwX1BDSV9JTlRELAkJCQkvKiBhdTE1MDAgKi8KLQlBVTEwMDBfRE1BX0lOVF9CQVNFLAotCi0JQVUxMDAwX1RPWV9JTlQJCT0gQVUxNTAwX0ZJUlNUX0lOVCArIDE0LAotCUFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDJfSU5ULAotCUFVMTAwMF9SVENfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMV9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAotCUFVMTUwMF9QQ0lfRVJSX0lOVCwKLQlBVTE1MDBfUkVTRVJWRURfSU5ULAotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9BQ1NZTkNfSU5ULAotCUFVMTUwMF9NQUMwX0RNQV9JTlQsCi0JQVUxNTAwX01BQzFfRE1BX0lOVCwKLQlBVTEwMDBfQUM5N0NfSU5UCT0gQVUxNTAwX0ZJUlNUX0lOVCArIDMxLAotCUFVMTAwMF9HUElPXzAsCi0JQVUxMDAwX0dQSU9fMSwKLQlBVTEwMDBfR1BJT18yLAotCUFVMTAwMF9HUElPXzMsCi0JQVUxMDAwX0dQSU9fNCwKLQlBVTEwMDBfR1BJT181LAotCUFVMTAwMF9HUElPXzYsCi0JQVUxMDAwX0dQSU9fNywKLQlBVTEwMDBfR1BJT184LAotCUFVMTAwMF9HUElPXzksCi0JQVUxMDAwX0dQSU9fMTAsCi0JQVUxMDAwX0dQSU9fMTEsCi0JQVUxMDAwX0dQSU9fMTIsCi0JQVUxMDAwX0dQSU9fMTMsCi0JQVUxMDAwX0dQSU9fMTQsCi0JQVUxMDAwX0dQSU9fMTUsCi0JQVUxNTAwX0dQSU9fMjAwLAotCUFVMTUwMF9HUElPXzIwMSwKLQlBVTE1MDBfR1BJT18yMDIsCi0JQVUxNTAwX0dQSU9fMjAzLAotCUFVMTUwMF9HUElPXzIwLAotCUFVMTUwMF9HUElPXzIwNCwKLQlBVTE1MDBfR1BJT18yMDUsCi0JQVUxNTAwX0dQSU9fMjMsCi0JQVUxNTAwX0dQSU9fMjQsCi0JQVUxNTAwX0dQSU9fMjUsCi0JQVUxNTAwX0dQSU9fMjYsCi0JQVUxNTAwX0dQSU9fMjcsCi0JQVUxNTAwX0dQSU9fMjgsCi0JQVUxNTAwX0dQSU9fMjA2LAotCUFVMTUwMF9HUElPXzIwNywKLQlBVTE1MDBfR1BJT18yMDhfMjE1LAotfTsKLQotLyogc2hvcnRjdXRzICovCi0jZGVmaW5lIElOVEEgQVUxMDAwX1BDSV9JTlRBCi0jZGVmaW5lIElOVEIgQVUxMDAwX1BDSV9JTlRCCi0jZGVmaW5lIElOVEMgQVUxMDAwX1BDSV9JTlRDCi0jZGVmaW5lIElOVEQgQVUxMDAwX1BDSV9JTlRECiAKICNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAogI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdmZmZjCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTE1MDBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxNTAwX0VUSDBfQkFTRQkweEIxNTAwMDAwCiAjZGVmaW5lIEFVMTUwMF9FVEgxX0JBU0UJMHhCMTUxMDAwMApAQCAtNzEzLDc0ICs5NDgsMTMgQEAKIAogLyogQXUxMTAwICovCiAjaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKLWVudW0gc29jX2F1MTEwMF9pbnRzIHsKLQlBVTExMDBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTEwMF9VQVJUMF9JTlQJPSBBVTExMDBfRklSU1RfSU5ULAotCUFVMTEwMF9VQVJUMV9JTlQsCi0JQVUxMTAwX1NEX0lOVCwKLQlBVTExMDBfVUFSVDNfSU5ULAotCUFVMTAwMF9TU0kwX0lOVCwKLQlBVTEwMDBfU1NJMV9JTlQsCi0JQVUxMDAwX0RNQV9JTlRfQkFTRSwKLQotCUFVMTAwMF9UT1lfSU5UCQk9IEFVMTEwMF9GSVJTVF9JTlQgKyAxNCwKLQlBVTEwMDBfVE9ZX01BVENIMF9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDFfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfUlRDX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMF9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDFfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfSVJEQV9UWF9JTlQsCi0JQVUxMDAwX0lSREFfUlhfSU5ULAotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9BQ1NZTkNfSU5ULAotCUFVMTEwMF9NQUMwX0RNQV9JTlQsCi0JQVUxMTAwX0dQSU9fMjA4XzIxNSwKLQlBVTExMDBfTENEX0lOVCwKLQlBVTEwMDBfQUM5N0NfSU5ULAotCUFVMTAwMF9HUElPXzAsCi0JQVUxMDAwX0dQSU9fMSwKLQlBVTEwMDBfR1BJT18yLAotCUFVMTAwMF9HUElPXzMsCi0JQVUxMDAwX0dQSU9fNCwKLQlBVTEwMDBfR1BJT181LAotCUFVMTAwMF9HUElPXzYsCi0JQVUxMDAwX0dQSU9fNywKLQlBVTEwMDBfR1BJT184LAotCUFVMTAwMF9HUElPXzksCi0JQVUxMDAwX0dQSU9fMTAsCi0JQVUxMDAwX0dQSU9fMTEsCi0JQVUxMDAwX0dQSU9fMTIsCi0JQVUxMDAwX0dQSU9fMTMsCi0JQVUxMDAwX0dQSU9fMTQsCi0JQVUxMDAwX0dQSU9fMTUsCi0JQVUxMDAwX0dQSU9fMTYsCi0JQVUxMDAwX0dQSU9fMTcsCi0JQVUxMDAwX0dQSU9fMTgsCi0JQVUxMDAwX0dQSU9fMTksCi0JQVUxMDAwX0dQSU9fMjAsCi0JQVUxMDAwX0dQSU9fMjEsCi0JQVUxMDAwX0dQSU9fMjIsCi0JQVUxMDAwX0dQSU9fMjMsCi0JQVUxMDAwX0dQSU9fMjQsCi0JQVUxMDAwX0dQSU9fMjUsCi0JQVUxMDAwX0dQSU9fMjYsCi0JQVUxMDAwX0dQSU9fMjcsCi0JQVUxMDAwX0dQSU9fMjgsCi0JQVUxMDAwX0dQSU9fMjksCi0JQVUxMDAwX0dQSU9fMzAsCi0JQVUxMDAwX0dQSU9fMzEsCi19OwogCiAjZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKLSNkZWZpbmUgVUFSVDFfQUREUgkJMHhCMTIwMDAwMAogI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdGRkZDCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTExMDBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxMTAwX0VUSDBfQkFTRQkweEIwNTAwMDAwCiAjZGVmaW5lIEFVMTEwMF9NQUMwX0VOQUJMRQkweEIwNTIwMDAwCkBAIC03ODgsODcgKzk2MiwxMiBAQAogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxMTAwICovCiAKICNpZmRlZiBDT05GSUdfU09DX0FVMTU1MAotZW51bSBzb2NfYXUxNTUwX2ludHMgewotCUFVMTU1MF9GSVJTVF9JTlQJPSBNSVBTX0NQVV9JUlFfQkFTRSArIDgsCi0JQVUxNTUwX1VBUlQwX0lOVAk9IEFVMTU1MF9GSVJTVF9JTlQsCi0JQVUxNTUwX1BDSV9JTlRBLAotCUFVMTU1MF9QQ0lfSU5UQiwKLQlBVTE1NTBfRERNQV9JTlQsCi0JQVUxNTUwX0NSWVBUT19JTlQsCi0JQVUxNTUwX1BDSV9JTlRDLAotCUFVMTU1MF9QQ0lfSU5URCwKLQlBVTE1NTBfUENJX1JTVF9JTlQsCi0JQVUxNTUwX1VBUlQxX0lOVCwKLQlBVTE1NTBfVUFSVDNfSU5ULAotCUFVMTU1MF9QU0MwX0lOVCwKLQlBVTE1NTBfUFNDMV9JTlQsCi0JQVUxNTUwX1BTQzJfSU5ULAotCUFVMTU1MF9QU0MzX0lOVCwKLQlBVTEwMDBfVE9ZX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMF9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDFfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfUlRDX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMF9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDFfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKLQotCUFVMTU1MF9OQU5EX0lOVAkJCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDIzLAotCUFVMTU1MF9VU0JfREVWX1JFUV9JTlQsCi0JQVUxMDAwX1VTQl9ERVZfUkVRX0lOVAkJPSBBVTE1NTBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTU1MF9VU0JfREVWX1NVU19JTlQsCi0JQVUxMDAwX1VTQl9ERVZfU1VTX0lOVAkJPSBBVTE1NTBfVVNCX0RFVl9TVVNfSU5ULAotCUFVMTU1MF9VU0JfSE9TVF9JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVAkJPSBBVTE1NTBfVVNCX0hPU1RfSU5ULAotCUFVMTU1MF9NQUMwX0RNQV9JTlQsCi0JQVUxNTUwX01BQzFfRE1BX0lOVCwKLQlBVTEwMDBfR1BJT18wCQkJPSBBVTE1NTBfRklSU1RfSU5UICsgMzIsCi0JQVUxMDAwX0dQSU9fMSwKLQlBVTEwMDBfR1BJT18yLAotCUFVMTAwMF9HUElPXzMsCi0JQVUxMDAwX0dQSU9fNCwKLQlBVTEwMDBfR1BJT181LAotCUFVMTAwMF9HUElPXzYsCi0JQVUxMDAwX0dQSU9fNywKLQlBVTEwMDBfR1BJT184LAotCUFVMTAwMF9HUElPXzksCi0JQVUxMDAwX0dQSU9fMTAsCi0JQVUxMDAwX0dQSU9fMTEsCi0JQVUxMDAwX0dQSU9fMTIsCi0JQVUxMDAwX0dQSU9fMTMsCi0JQVUxMDAwX0dQSU9fMTQsCi0JQVUxMDAwX0dQSU9fMTUsCi0JQVUxNTUwX0dQSU9fMjAwLAotCUFVMTUwMF9HUElPXzIwMV8yMDUsCQkJLyogTG9naWNhbCBvciBvZiBHUElPMjAxOjIwNSAqLwotCUFVMTUwMF9HUElPXzE2LAotCUFVMTUwMF9HUElPXzE3LAotCUFVMTUwMF9HUElPXzIwLAotCUFVMTUwMF9HUElPXzIxLAotCUFVMTUwMF9HUElPXzIyLAotCUFVMTUwMF9HUElPXzIzLAotCUFVMTUwMF9HUElPXzI0LAotCUFVMTUwMF9HUElPXzI1LAotCUFVMTUwMF9HUElPXzI2LAotCUFVMTUwMF9HUElPXzI3LAotCUFVMTUwMF9HUElPXzI4LAotCUFVMTUwMF9HUElPXzIwNiwKLQlBVTE1MDBfR1BJT18yMDcsCi0JQVUxNTAwX0dQSU9fMjA4XzIxOCwJCQkvKiBMb2dpY2FsIG9yIG9mIEdQSU8yMDg6MjE4ICovCi19OwotCi0vKiBzaG9ydGN1dHMgKi8KLSNkZWZpbmUgSU5UQSBBVTE1NTBfUENJX0lOVEEKLSNkZWZpbmUgSU5UQiBBVTE1NTBfUENJX0lOVEIKLSNkZWZpbmUgSU5UQyBBVTE1NTBfUENJX0lOVEMKLSNkZWZpbmUgSU5URCBBVTE1NTBfUENJX0lOVEQKLQogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKLSNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAogCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTQwMjAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9PSENJX0xFTgkJMHgwMDA2MDAwMAogI2RlZmluZSBVU0JfSE9TVF9DT05GSUcgCTB4QjQwMjdmZmMKKyNkZWZpbmUgRk9SX1BMQVRGT1JNX0NfVVNCX0hPU1RfSU5UIEFVMTU1MF9VU0JfSE9TVF9JTlQKIAogI2RlZmluZSBBVTE1NTBfRVRIMF9CQVNFCTB4QjA1MDAwMDAKICNkZWZpbmUgQVUxNTUwX0VUSDFfQkFTRQkweEIwNTEwMDAwCkBAIC04NzcsNzggKzk3NiwxMCBAQAogI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMgogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxNTUwICovCiAKKwogI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCi1lbnVtIHNvY19hdTEyMDBfaW50cyB7Ci0JQVUxMjAwX0ZJUlNUX0lOVAk9IE1JUFNfQ1BVX0lSUV9CQVNFICsgOCwKLQlBVTEyMDBfVUFSVDBfSU5UCT0gQVUxMjAwX0ZJUlNUX0lOVCwKLQlBVTEyMDBfU1dUX0lOVCwKLQlBVTEyMDBfU0RfSU5ULAotCUFVMTIwMF9ERE1BX0lOVCwKLQlBVTEyMDBfTUFFX0JFX0lOVCwKLQlBVTEyMDBfR1BJT18yMDAsCi0JQVUxMjAwX0dQSU9fMjAxLAotCUFVMTIwMF9HUElPXzIwMiwKLQlBVTEyMDBfVUFSVDFfSU5ULAotCUFVMTIwMF9NQUVfRkVfSU5ULAotCUFVMTIwMF9QU0MwX0lOVCwKLQlBVTEyMDBfUFNDMV9JTlQsCi0JQVUxMjAwX0FFU19JTlQsCi0JQVUxMjAwX0NBTUVSQV9JTlQsCi0JQVUxMDAwX1RPWV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0JQVUxMjAwX0dQSU9fMjAzLAotCUFVMTIwMF9OQU5EX0lOVCwKLQlBVTEyMDBfR1BJT18yMDQsCi0JQVUxMjAwX0dQSU9fMjA1LAotCUFVMTIwMF9HUElPXzIwNiwKLQlBVTEyMDBfR1BJT18yMDcsCi0JQVUxMjAwX0dQSU9fMjA4XzIxNSwJCQkvKiBMb2dpY2FsIE9SIG9mIDIwODoyMTUgKi8KLQlBVTEyMDBfVVNCX0lOVCwKLQlBVTEwMDBfVVNCX0hPU1RfSU5UCT0gQVUxMjAwX1VTQl9JTlQsCi0JQVUxMjAwX0xDRF9JTlQsCi0JQVUxMjAwX01BRV9CT1RIX0lOVCwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTAwMF9HUElPXzE2LAotCUFVMTAwMF9HUElPXzE3LAotCUFVMTAwMF9HUElPXzE4LAotCUFVMTAwMF9HUElPXzE5LAotCUFVMTAwMF9HUElPXzIwLAotCUFVMTAwMF9HUElPXzIxLAotCUFVMTAwMF9HUElPXzIyLAotCUFVMTAwMF9HUElPXzIzLAotCUFVMTAwMF9HUElPXzI0LAotCUFVMTAwMF9HUElPXzI1LAotCUFVMTAwMF9HUElPXzI2LAotCUFVMTAwMF9HUElPXzI3LAotCUFVMTAwMF9HUElPXzI4LAotCUFVMTAwMF9HUElPXzI5LAotCUFVMTAwMF9HUElPXzMwLAotCUFVMTAwMF9HUElPXzMxLAotfTsKIAogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKIAogI2RlZmluZSBVU0JfVU9DX0JBU0UJCTB4MTQwMjAwMjAKICNkZWZpbmUgVVNCX1VPQ19MRU4JCTB4MjAKQEAgLTk3NCwxNiArMTAwNSwxMCBAQAogI2RlZmluZSBVU0JNU1JNQ0ZHX1JEQ09NQgkzMAogI2RlZmluZSBVU0JNU1JNQ0ZHX1BGRU4gCTMxCiAKKyNkZWZpbmUgRk9SX1BMQVRGT1JNX0NfVVNCX0hPU1RfSU5UIEFVMTIwMF9VU0JfSU5UCisKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTIwMCAqLwogCi0jZGVmaW5lIEFVMTAwMF9JTlRDMF9JTlRfQkFTRQkoTUlQU19DUFVfSVJRX0JBU0UgKyA4KQotI2RlZmluZSBBVTEwMDBfSU5UQzBfSU5UX0xBU1QJKEFVMTAwMF9JTlRDMF9JTlRfQkFTRSArIDMxKQotI2RlZmluZSBBVTEwMDBfSU5UQzFfSU5UX0JBU0UJKEFVMTAwMF9JTlRDMF9JTlRfQkFTRSArIDMyKQotI2RlZmluZSBBVTEwMDBfSU5UQzFfSU5UX0xBU1QJKEFVMTAwMF9JTlRDMV9JTlRfQkFTRSArIDMxKQotCi0jZGVmaW5lIEFVMTAwMF9NQVhfSU5UUiAJQVUxMDAwX0lOVEMxX0lOVF9MQVNUCi0jZGVmaW5lIElOVFgJCQkweEZGCQkJLyogbm90IHZhbGlkICovCi0KIC8qIFByb2dyYW1tYWJsZSBDb3VudGVycyAwIGFuZCAxICovCiAjZGVmaW5lIFNZU19CQVNFCQkweEIxOTAwMDAwCiAjZGVmaW5lIFNZU19DT1VOVEVSX0NOVFJMCShTWVNfQkFTRSArIDB4MTQpCkBAIC0xMjMxLDE0ICsxMjU2LDYgQEAKICNkZWZpbmUgTUFDX1JYX0JVRkYzX1NUQVRVUwkweDMwCiAjZGVmaW5lIE1BQ19SWF9CVUZGM19BRERSCTB4MzQKIAotLyogVUFSVFMgMC0zICovCi0jZGVmaW5lIFVBUlRfQkFTRQkJVUFSVDBfQUREUgotI2lmZGVmCUNPTkZJR19TT0NfQVUxMjAwCi0jZGVmaW5lIFVBUlRfREVCVUdfQkFTRSAJVUFSVDFfQUREUgotI2Vsc2UKLSNkZWZpbmUgVUFSVF9ERUJVR19CQVNFIAlVQVJUM19BRERSCi0jZW5kaWYKLQogI2RlZmluZSBVQVJUX1JYCQkwCS8qIFJlY2VpdmUgYnVmZmVyICovCiAjZGVmaW5lIFVBUlRfVFgJCTQJLyogVHJhbnNtaXQgYnVmZmVyICovCiAjZGVmaW5lIFVBUlRfSUVSCTgJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLwpAQCAtMTI1MSw4NCArMTI2OCw2IEBACiAjZGVmaW5lIFVBUlRfQ0xLCTB4MjgJLyogQmF1ZCBSYXRlIENsb2NrIERpdmlkZXIgKi8KICNkZWZpbmUgVUFSVF9NT0RfQ05UUkwJMHgxMDAJLyogTW9kdWxlIENvbnRyb2wgKi8KIAotI2RlZmluZSBVQVJUX0ZDUl9FTkFCTEVfRklGTwkweDAxIC8qIEVuYWJsZSB0aGUgRklGTyAqLwotI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9SQ1ZSCTB4MDIgLyogQ2xlYXIgdGhlIFJDVlIgRklGTyAqLwotI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9YTUlUCTB4MDQgLyogQ2xlYXIgdGhlIFhNSVQgRklGTyAqLwotI2RlZmluZSBVQVJUX0ZDUl9ETUFfU0VMRUNUCTB4MDggLyogRm9yIERNQSBhcHBsaWNhdGlvbnMgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl9NQVNLCTB4RjAgLyogTWFzayBmb3IgdGhlIEZJRk8gdHJpZ2dlciByYW5nZSAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfMQkweDAwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgMSAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfNAkweDQwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgNCAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfOAkweDgwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgOCAqLwotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfMTQgICAweEEwIC8qIE1hc2sgZm9yIHJlY2VpdmUgdHJpZ2dlciBzZXQgYXQgMTQgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzAJMHgwMCAvKiBNYXNrIGZvciB0cmFuc21pdCB0cmlnZ2VyIHNldCBhdCAwICovCi0jZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl80CTB4MTAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgNCAqLwotI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdHRVJfOCAgICAweDIwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDggKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzEyCTB4MzAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgMTIgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMaW5lIENvbnRyb2wgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBVQVJUX0xDUl9TQkMJMHg0MAkvKiBTZXQgYnJlYWsgY29udHJvbCAqLwotI2RlZmluZSBVQVJUX0xDUl9TUEFSCTB4MjAJLyogU3RpY2sgcGFyaXR5ICg/KSAqLwotI2RlZmluZSBVQVJUX0xDUl9FUEFSCTB4MTAJLyogRXZlbiBwYXJpdHkgc2VsZWN0ICovCi0jZGVmaW5lIFVBUlRfTENSX1BBUklUWQkweDA4CS8qIFBhcml0eSBFbmFibGUgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfU1RPUAkweDA0CS8qIFN0b3AgYml0czogMD0xIHN0b3AgYml0LCAxPSAyIHN0b3AgYml0cyAqLwotI2RlZmluZSBVQVJUX0xDUl9XTEVONSAgMHgwMAkvKiBXb3JkbGVuZ3RoOiA1IGJpdHMgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfV0xFTjYgIDB4MDEJLyogV29yZGxlbmd0aDogNiBiaXRzICovCi0jZGVmaW5lIFVBUlRfTENSX1dMRU43ICAweDAyCS8qIFdvcmRsZW5ndGg6IDcgYml0cyAqLwotI2RlZmluZSBVQVJUX0xDUl9XTEVOOCAgMHgwMwkvKiBXb3JkbGVuZ3RoOiA4IGJpdHMgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBMaW5lIFN0YXR1cyBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfTFNSX1RFTVQJMHg0MAkvKiBUcmFuc21pdHRlciBlbXB0eSAqLwotI2RlZmluZSBVQVJUX0xTUl9USFJFCTB4MjAJLyogVHJhbnNtaXQtaG9sZC1yZWdpc3RlciBlbXB0eSAqLwotI2RlZmluZSBVQVJUX0xTUl9CSQkweDEwCS8qIEJyZWFrIGludGVycnVwdCBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9MU1JfRkUJMHgwOAkvKiBGcmFtZSBlcnJvciBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9MU1JfUEUJMHgwNAkvKiBQYXJpdHkgZXJyb3IgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTFNSX09FCTB4MDIJLyogT3ZlcnJ1biBlcnJvciBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9MU1JfRFIJMHgwMQkvKiBSZWNlaXZlciBkYXRhIHJlYWR5ICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgSW50ZXJydXB0IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgVUFSVF9JSVJfTk9fSU5UCTB4MDEJLyogTm8gaW50ZXJydXB0cyBwZW5kaW5nICovCi0jZGVmaW5lIFVBUlRfSUlSX0lECTB4MDYJLyogTWFzayBmb3IgdGhlIGludGVycnVwdCBJRCAqLwotI2RlZmluZSBVQVJUX0lJUl9NU0kJMHgwMAkvKiBNb2RlbSBzdGF0dXMgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUlSX1RIUkkJMHgwMgkvKiBUcmFuc21pdHRlciBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5ICovCi0jZGVmaW5lIFVBUlRfSUlSX1JESQkweDA0CS8qIFJlY2VpdmVyIGRhdGEgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUlSX1JMU0kJMHgwNgkvKiBSZWNlaXZlciBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgVUFSVF9JRVJfTVNJCTB4MDgJLyogRW5hYmxlIE1vZGVtIHN0YXR1cyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVUFSVF9JRVJfUkxTSQkweDA0CS8qIEVuYWJsZSByZWNlaXZlciBsaW5lIHN0YXR1cyBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgVUFSVF9JRVJfVEhSSQkweDAyCS8qIEVuYWJsZSBUcmFuc21pdHRlciBob2xkaW5nIHJlZ2lzdGVyIGludC4gKi8KLSNkZWZpbmUgVUFSVF9JRVJfUkRJCTB4MDEJLyogRW5hYmxlIHJlY2VpdmVyIGRhdGEgaW50ZXJydXB0ICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgTW9kZW0gQ29udHJvbCBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfTUNSX0xPT1AJMHgxMAkvKiBFbmFibGUgbG9vcGJhY2sgdGVzdCBtb2RlICovCi0jZGVmaW5lIFVBUlRfTUNSX09VVDIJMHgwOAkvKiBPdXQyIGNvbXBsZW1lbnQgKi8KLSNkZWZpbmUgVUFSVF9NQ1JfT1VUMQkweDA0CS8qIE91dDEgY29tcGxlbWVudCAqLwotI2RlZmluZSBVQVJUX01DUl9SVFMJMHgwMgkvKiBSVFMgY29tcGxlbWVudCAqLwotI2RlZmluZSBVQVJUX01DUl9EVFIJMHgwMQkvKiBEVFIgY29tcGxlbWVudCAqLwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1vZGVtIFN0YXR1cyBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfTVNSX0RDRAkweDgwCS8qIERhdGEgQ2FycmllciBEZXRlY3QgKi8KLSNkZWZpbmUgVUFSVF9NU1JfUkkJMHg0MAkvKiBSaW5nIEluZGljYXRvciAqLwotI2RlZmluZSBVQVJUX01TUl9EU1IJMHgyMAkvKiBEYXRhIFNldCBSZWFkeSAqLwotI2RlZmluZSBVQVJUX01TUl9DVFMJMHgxMAkvKiBDbGVhciB0byBTZW5kICovCi0jZGVmaW5lIFVBUlRfTVNSX0REQ0QJMHgwOAkvKiBEZWx0YSBEQ0QgKi8KLSNkZWZpbmUgVUFSVF9NU1JfVEVSSQkweDA0CS8qIFRyYWlsaW5nIGVkZ2UgcmluZyBpbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9NU1JfRERTUgkweDAyCS8qIERlbHRhIERTUiAqLwotI2RlZmluZSBVQVJUX01TUl9EQ1RTCTB4MDEJLyogRGVsdGEgQ1RTICovCi0jZGVmaW5lIFVBUlRfTVNSX0FOWV9ERUxUQSAweDBGCS8qIEFueSBvZiB0aGUgZGVsdGEgYml0cyEgKi8KLQogLyogU1NJTyAqLwogI2RlZmluZSBTU0kwX1NUQVRVUwkJMHhCMTYwMDAwMAogIyAgZGVmaW5lIFNTSV9TVEFUVVNfQkYgCSgxIDw8IDQpCkBAIC0xNzIwLDcgKzE2NTksNyBAQAogI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfU1RBUlQJMHgwMDAwMTAwMAkvKiBza2lwIGxlZ2FjeSBwcm9iaW5nICovCiAjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgogI2RlZmluZSBJT01FTV9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmZlVMTAogCiAjZWxzZSAvKiBBdTEwMDAgYW5kIEF1MTEwMCBhbmQgQXUxMjAwICovCiAKQEAgLTE3MjgsNyArMTY2Nyw3IEBACiAjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCiAjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgogI2RlZmluZSBJT01FTV9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmZlVMTAogCiAjZGVmaW5lIFBDSV9JT19TVEFSVAkwCiAjZGVmaW5lIFBDSV9JT19FTkQJMApAQCAtMTczOSw1MyArMTY3OCw0IEBACiAKICNlbmRpZgogCi0jaWZuZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQotdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgewotCS8qIDB4MDAwMCAqLyB1MzIgdG95dHJpbTsKLQkvKiAweDAwMDQgKi8gdTMyIHRveXdyaXRlOwotCS8qIDB4MDAwOCAqLyB1MzIgdG95bWF0Y2gwOwotCS8qIDB4MDAwQyAqLyB1MzIgdG95bWF0Y2gxOwotCS8qIDB4MDAxMCAqLyB1MzIgdG95bWF0Y2gyOwotCS8qIDB4MDAxNCAqLyB1MzIgY250cmN0cmw7Ci0JLyogMHgwMDE4ICovIHUzMiBzY3JhdGNoMDsKLQkvKiAweDAwMUMgKi8gdTMyIHNjcmF0Y2gxOwotCS8qIDB4MDAyMCAqLyB1MzIgZnJlcWN0cmwwOwotCS8qIDB4MDAyNCAqLyB1MzIgZnJlcWN0cmwxOwotCS8qIDB4MDAyOCAqLyB1MzIgY2xrc3JjOwotCS8qIDB4MDAyQyAqLyB1MzIgcGluZnVuYzsKLQkvKiAweDAwMzAgKi8gdTMyIHJlc2VydmVkMDsKLQkvKiAweDAwMzQgKi8gdTMyIHdha2Vtc2s7Ci0JLyogMHgwMDM4ICovIHUzMiBlbmRpYW47Ci0JLyogMHgwMDNDICovIHUzMiBwb3dlcmN0cmw7Ci0JLyogMHgwMDQwICovIHUzMiB0b3lyZWFkOwotCS8qIDB4MDA0NCAqLyB1MzIgcnRjdHJpbTsKLQkvKiAweDAwNDggKi8gdTMyIHJ0Y3dyaXRlOwotCS8qIDB4MDA0QyAqLyB1MzIgcnRjbWF0Y2gwOwotCS8qIDB4MDA1MCAqLyB1MzIgcnRjbWF0Y2gxOwotCS8qIDB4MDA1NCAqLyB1MzIgcnRjbWF0Y2gyOwotCS8qIDB4MDA1OCAqLyB1MzIgcnRjcmVhZDsKLQkvKiAweDAwNUMgKi8gdTMyIHdha2VzcmM7Ci0JLyogMHgwMDYwICovIHUzMiBjcHVwbGw7Ci0JLyogMHgwMDY0ICovIHUzMiBhdXhwbGw7Ci0JLyogMHgwMDY4ICovIHUzMiByZXNlcnZlZDE7Ci0JLyogMHgwMDZDICovIHUzMiByZXNlcnZlZDI7Ci0JLyogMHgwMDcwICovIHUzMiByZXNlcnZlZDM7Ci0JLyogMHgwMDc0ICovIHUzMiByZXNlcnZlZDQ7Ci0JLyogMHgwMDc4ICovIHUzMiBzbHBwd3I7Ci0JLyogMHgwMDdDICovIHUzMiBzbGVlcDsKLQkvKiAweDAwODAgKi8gdTMyIHJlc2VydmVkNVszMl07Ci0JLyogMHgwMTAwICovIHUzMiB0cmlvdXRyZDsKLSNkZWZpbmUgdHJpb3V0Y2xyIHRyaW91dHJkCi0JLyogMHgwMTA0ICovIHUzMiByZXNlcnZlZDY7Ci0JLyogMHgwMTA4ICovIHUzMiBvdXRwdXRyZDsKLSNkZWZpbmUgb3V0cHV0c2V0IG91dHB1dHJkCi0JLyogMHgwMTBDICovIHUzMiBvdXRwdXRjbHI7Ci0JLyogMHgwMTEwICovIHUzMiBwaW5zdGF0ZXJkOwotI2RlZmluZSBwaW5pbnB1dGVuIHBpbnN0YXRlcmQKLX0gQVUxWDAwX1NZUzsKLQotc3RhdGljIEFVMVgwMF9TWVMgKiBjb25zdCBzeXMgPSAoQVUxWDAwX1NZUyAqKVNZU19CQVNFOwotCi0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaAppbmRleCBjMzVlMjA5Li45NDAwMGEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKIAlpbnQoKmNhcmRfcmVhZG9ubHkpKHZvaWQgKm1tY19ob3N0KTsKIAl2b2lkKCpzZXRfcG93ZXIpKHZvaWQgKm1tY19ob3N0LCBpbnQgc3RhdGUpOwogCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZDsKKwl1bnNpZ25lZCBsb25nIG1hc2tfaG9zdF9jYXBzOwogfTsKIAogI2RlZmluZSBTRDBfQkFTRQkweEIwNjAwMDAwCkBAIC0yMDUsNCArMjA2LDMgQEAKIAogCiAjZW5kaWYgLyogX19BU01fQVUxMTAwX01NQ19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaAppbmRleCBkMjA2MDAwLi44YzZiMTEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCkBAIC0zMzksOCArMzM5LDggQEAKIHUzMiBhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyh1MzIgY2hhbmlkLCBpbnQgZW50cmllcyk7CiAKIC8qIFB1dCBidWZmZXJzIG9uIHNvdXJjZS9kZXN0aW5hdGlvbiBkZXNjcmlwdG9ycy4gKi8KLXUzMiBfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpOwotdTMyIF9hdTF4eHhfZGJkbWFfcHV0X2Rlc3QodTMyIGNoYW5pZCwgdm9pZCAqYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpOwordTMyIGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKHUzMiBjaGFuaWQsIGRtYV9hZGRyX3QgYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpOwordTMyIGF1MXh4eF9kYmRtYV9wdXRfZGVzdCh1MzIgY2hhbmlkLCBkbWFfYWRkcl90IGJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKTsKIAogLyogR2V0IGEgYnVmZmVyIGZyb20gdGhlIGRlc3RpbmF0aW9uIGRlc2NyaXB0b3IuICovCiB1MzIgYXUxeHh4X2RiZG1hX2dldF9kZXN0KHUzMiBjaGFuaWQsIHZvaWQgKipidWYsIGludCAqbmJ5dGVzKTsKQEAgLTM2MywyNSArMzYzLDYgQEAKIHZvaWQgYXUxeHh4X2RiZG1hX3Jlc3VtZSh2b2lkKTsKICNlbmRpZgogCi0KLS8qCi0gKiBTb21lIGNvbXBhdGliaWx0eSBtYWNyb3MgLS0gbmVlZGVkIHRvIG1ha2UgY2hhbmdlcyB0byBBUEkKLSAqIHdpdGhvdXQgYnJlYWtpbmcgZXhpc3RpbmcgZHJpdmVycy4KLSAqLwotI2RlZmluZSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShjaGFuaWQsIGJ1ZiwgbmJ5dGVzKQkJCVwKLQlfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoY2hhbmlkLCBidWYsIG5ieXRlcywgRERNQV9GTEFHU19JRSkKLSNkZWZpbmUgYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2VfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCVwKLQlfYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCi0jZGVmaW5lIHB1dF9zb3VyY2VfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCQkJXAotCWF1MXh4eF9kYmRtYV9wdXRfc291cmNlX2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQotCi0jZGVmaW5lIGF1MXh4eF9kYmRtYV9wdXRfZGVzdChjaGFuaWQsIGJ1ZiwgbmJ5dGVzKQkJCVwKLQlfYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGNoYW5pZCwgYnVmLCBuYnl0ZXMsIERETUFfRkxBR1NfSUUpCi0jZGVmaW5lIGF1MXh4eF9kYmRtYV9wdXRfZGVzdF9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykgCVwKLQlfYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQotI2RlZmluZSBwdXRfZGVzdF9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykJCQlcCi0JYXUxeHh4X2RiZG1hX3B1dF9kZXN0X2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQotCiAvKgogICoJRmxhZ3MgZm9yIHRoZSBwdXRfc291cmNlL3B1dF9kZXN0IGZ1bmN0aW9ucy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9ldGguaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlOWI3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfX0FVMVgwMF9FVEhfREFUQV9ICisjZGVmaW5lIF9fQVUxWDAwX0VUSF9EQVRBX0gKKworLyogUGxhdGZvcm0gc3BlY2lmaWMgUEhZIGNvbmZpZ3VyYXRpb24gcGFzc2VkIHRvIHRoZSBNQUMgZHJpdmVyICovCitzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgcGh5X3N0YXRpY19jb25maWc7CisJaW50IHBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyOworCWludCBwaHkxX3NlYXJjaF9tYWMwOworCWludCBwaHlfYWRkcjsKKwlpbnQgcGh5X2J1c2lkOworCWludCBwaHlfaXJxOworfTsKKwordm9pZCBfX2luaXQgYXUxeHh4X292ZXJyaWRlX2V0aF9jZmcodW5zaWduZWQgcG9ydCwKKwkJCXN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKTsKKworI2VuZGlmIC8qIF9fQVUxWDAwX0VUSF9EQVRBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKaW5kZXggOTE1OTVmYS4uNjJkMmYxMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKQEAgLTM1LDE1ICszNSwxMyBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKLSNpZmRlZiBDT05GSUdfU09DX0FVMTAwMAogc3RhdGljIGlubGluZSBpbnQgYXUxMDAwX2lycV90b19ncGlvKGludCBpcnEpCiB7Ci0JaWYgKChpcnEgPj0gQVUxMDAwX0dQSU9fMCkgJiYgKGlycSA8PSBBVTEwMDBfR1BJT18zMSkpCi0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU9fMCkgKyAwOworCWlmICgoaXJxID49IEFVMTAwMF9HUElPMF9JTlQpICYmIChpcnEgPD0gQVUxMDAwX0dQSU8zMV9JTlQpKQorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPMF9JTlQpICsgMDsKIAogCXJldHVybiAtRU5YSU87CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgYXUxNTAwX2dwaW8xX3RvX2lycShpbnQgZ3BpbykKIHsKQEAgLTcxLDI3ICs2OSwyNSBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKLSNpZmRlZiBDT05GSUdfU09DX0FVMTUwMAogc3RhdGljIGlubGluZSBpbnQgYXUxNTAwX2lycV90b19ncGlvKGludCBpcnEpCiB7CiAJc3dpdGNoIChpcnEpIHsKLQljYXNlIEFVMTAwMF9HUElPXzAgLi4uIEFVMTAwMF9HUElPXzE1OgotCWNhc2UgQVUxNTAwX0dQSU9fMjA6Ci0JY2FzZSBBVTE1MDBfR1BJT18yMyAuLi4gQVUxNTAwX0dQSU9fMjg6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU9fMCkgKyAwOwotCWNhc2UgQVUxNTAwX0dQSU9fMjAwIC4uLiBBVTE1MDBfR1BJT18yMDM6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU9fMjAwKSArIDA7Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDQgLi4uIEFVMTUwMF9HUElPXzIwNToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJT18yMDQpICsgNDsKLQljYXNlIEFVMTUwMF9HUElPXzIwNiAuLi4gQVUxNTAwX0dQSU9fMjA3OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPXzIwNikgKyA2OwotCWNhc2UgQVUxNTAwX0dQSU9fMjA4XzIxNToKKwljYXNlIEFVMTUwMF9HUElPMF9JTlQgLi4uIEFVMTUwMF9HUElPMTVfSU5UOgorCWNhc2UgQVUxNTAwX0dQSU8yMF9JTlQ6CisJY2FzZSBBVTE1MDBfR1BJTzIzX0lOVCAuLi4gQVUxNTAwX0dQSU8yOF9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU8wX0lOVCkgKyAwOworCWNhc2UgQVUxNTAwX0dQSU8yMDBfSU5UIC4uLiBBVTE1MDBfR1BJTzIwM19JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU8yMDBfSU5UKSArIDA7CisJY2FzZSBBVTE1MDBfR1BJTzIwNF9JTlQgLi4uIEFVMTUwMF9HUElPMjA1X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJTzIwNF9JTlQpICsgNDsKKwljYXNlIEFVMTUwMF9HUElPMjA2X0lOVCAuLi4gQVUxNTAwX0dQSU8yMDdfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPMjA2X0lOVCkgKyA2OworCWNhc2UgQVUxNTAwX0dQSU8yMDhfMjE1X0lOVDoKIAkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIDg7CiAJfQogCiAJcmV0dXJuIC1FTlhJTzsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBhdTExMDBfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewpAQCAtMTA4LDE5ICsxMDQsMTcgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTEwMF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewogCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBBVTEwMDBfR1BJT18wIC4uLiBBVTEwMDBfR1BJT18zMToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJT18wKSArIDA7Ci0JY2FzZSBBVTExMDBfR1BJT18yMDhfMjE1OgorCWNhc2UgQVUxMTAwX0dQSU8wX0lOVCAuLi4gQVUxMTAwX0dQSU8zMV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMTAwX0dQSU8wX0lOVCkgKyAwOworCWNhc2UgQVUxMTAwX0dQSU8yMDhfMjE1X0lOVDoKIAkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIDg7CiAJfQogCiAJcmV0dXJuIC1FTlhJTzsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBhdTE1NTBfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewpAQCAtMTQ5LDI0ICsxNDMsMjIgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTU1MF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewogCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBBVTEwMDBfR1BJT18wIC4uLiBBVTEwMDBfR1BJT18xNToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJT18wKSArIDA7Ci0JY2FzZSBBVTE1NTBfR1BJT18yMDA6Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDFfMjA1OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTU1MF9HUElPXzIwMCkgKyAwOwotCWNhc2UgQVUxNTAwX0dQSU9fMTYgLi4uIEFVMTUwMF9HUElPXzI4OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPXzE2KSArIDE2OwotCWNhc2UgQVUxNTAwX0dQSU9fMjA2IC4uLiBBVTE1MDBfR1BJT18yMDhfMjE4OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPXzIwNikgKyA2OworCWNhc2UgQVUxNTUwX0dQSU8wX0lOVCAuLi4gQVUxNTUwX0dQSU8xNV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxNTUwX0dQSU8wX0lOVCkgKyAwOworCWNhc2UgQVUxNTUwX0dQSU8yMDBfSU5UOgorCWNhc2UgQVUxNTUwX0dQSU8yMDFfMjA1X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1NTBfR1BJTzIwMF9JTlQpICsgMDsKKwljYXNlIEFVMTU1MF9HUElPMTZfSU5UIC4uLiBBVTE1NTBfR1BJTzI4X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTE1NTBfR1BJTzE2X0lOVCkgKyAxNjsKKwljYXNlIEFVMTU1MF9HUElPMjA2X0lOVCAuLi4gQVUxNTUwX0dQSU8yMDhfMjE1X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1NTBfR1BJTzIwNl9JTlQpICsgNjsKIAl9CiAKIAlyZXR1cm4gLUVOWElPOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTIwMF9ncGlvMV90b19pcnEoaW50IGdwaW8pCiB7CkBAIC0xODcsMjMgKzE3OSwyMSBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKLSNpZmRlZiBDT05GSUdfU09DX0FVMTIwMAogc3RhdGljIGlubGluZSBpbnQgYXUxMjAwX2lycV90b19ncGlvKGludCBpcnEpCiB7CiAJc3dpdGNoIChpcnEpIHsKLQljYXNlIEFVMTAwMF9HUElPXzAgLi4uIEFVMTAwMF9HUElPXzMxOgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPXzApICsgMDsKLQljYXNlIEFVMTIwMF9HUElPXzIwMCAuLi4gQVUxMjAwX0dQSU9fMjAyOgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPXzIwMCkgKyAwOwotCWNhc2UgQVUxMjAwX0dQSU9fMjAzOgorCWNhc2UgQVUxMjAwX0dQSU8wX0lOVCAuLi4gQVUxMjAwX0dQSU8zMV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMjAwX0dQSU8wX0lOVCkgKyAwOworCWNhc2UgQVUxMjAwX0dQSU8yMDBfSU5UIC4uLiBBVTEyMDBfR1BJTzIwMl9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxMjAwX0dQSU8yMDBfSU5UKSArIDA7CisJY2FzZSBBVTEyMDBfR1BJTzIwM19JTlQ6CiAJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAzOwotCWNhc2UgQVUxMjAwX0dQSU9fMjA0IC4uLiBBVTEyMDBfR1BJT18yMDhfMjE1OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPXzIwNCkgKyA0OworCWNhc2UgQVUxMjAwX0dQSU8yMDRfSU5UIC4uLiBBVTEyMDBfR1BJTzIwOF8yMTVfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPMjA0X0lOVCkgKyA0OwogCX0KIAogCXJldHVybiAtRU5YSU87CiB9Ci0jZW5kaWYKIAogLyoKICAqIEdQSU8xIGJsb2NrIG1hY3JvcyBmb3IgY29tbW9uIGxpbnV4IGdwaW8gZnVuY3Rpb25zLgpAQCAtMjQ2LDE5ICsyMzYsMTkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9ncGlvMV90b19pcnEoaW50IGdwaW8pCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlyZXR1cm4gYXUxMDAwX2dwaW8xX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0JcmV0dXJuIGF1MTEwMF9ncGlvMV90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCXJldHVybiBhdTE1MDBfZ3BpbzFfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlyZXR1cm4gYXUxNTUwX2dwaW8xX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JcmV0dXJuIGF1MTIwMF9ncGlvMV90b19pcnEoZ3Bpbyk7Ci0jZWxzZQorCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisJCXJldHVybiBhdTEwMDBfZ3BpbzFfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCQlyZXR1cm4gYXUxMTAwX2dwaW8xX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJcmV0dXJuIGF1MTUwMF9ncGlvMV90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCXJldHVybiBhdTE1NTBfZ3BpbzFfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMjAwOgorCQlyZXR1cm4gYXUxMjAwX2dwaW8xX3RvX2lycShncGlvKTsKKwl9CiAJcmV0dXJuIC1FTlhJTzsKLSNlbmRpZgogfQogCiAvKgpAQCAtMzE2LDE5ICszMDYsMTkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9ncGlvMl90b19pcnEoaW50IGdwaW8pCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlyZXR1cm4gYXUxMDAwX2dwaW8yX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0JcmV0dXJuIGF1MTEwMF9ncGlvMl90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCXJldHVybiBhdTE1MDBfZ3BpbzJfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlyZXR1cm4gYXUxNTUwX2dwaW8yX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JcmV0dXJuIGF1MTIwMF9ncGlvMl90b19pcnEoZ3Bpbyk7Ci0jZWxzZQorCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisJCXJldHVybiBhdTEwMDBfZ3BpbzJfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCQlyZXR1cm4gYXUxMTAwX2dwaW8yX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJcmV0dXJuIGF1MTUwMF9ncGlvMl90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCXJldHVybiBhdTE1NTBfZ3BpbzJfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMjAwOgorCQlyZXR1cm4gYXUxMjAwX2dwaW8yX3RvX2lycShncGlvKTsKKwl9CiAJcmV0dXJuIC1FTlhJTzsKLSNlbmRpZgogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM4NCwxMCArMzc0LDEzIEBACiAKIAlncGlvMiAtPSBBTENIRU1ZX0dQSU8yX0JBU0U7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQogCS8qIEF1MTEwMC9BdTE1MDAgaGF2ZSBHUElPMjA4LTIxNSBlbmFibGUgYml0cyBhdCAwLi43ICovCi0JZ3BpbzIgLT0gODsKLSNlbmRpZgorCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJCWdwaW8yIC09IDg7CisJfQorCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCV9fYWxjaGVteV9ncGlvMl9tb2RfaW50KGdwaW8yLCAxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC00MDUsMTAgKzM5OCwxMyBAQAogCiAJZ3BpbzIgLT0gQUxDSEVNWV9HUElPMl9CQVNFOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKIAkvKiBBdTExMDAvQXUxNTAwIGhhdmUgR1BJTzIwOC0yMTUgZW5hYmxlIGJpdHMgYXQgMC4uNyAqLwotCWdwaW8yIC09IDg7Ci0jZW5kaWYKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlncGlvMiAtPSA4OworCX0KKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlfX2FsY2hlbXlfZ3BpbzJfbW9kX2ludChncGlvMiwgMCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtNDk0LDE5ICs0OTAsMTkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JcmV0dXJuIGF1MTAwMF9pcnFfdG9fZ3BpbyhpcnEpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKLQlyZXR1cm4gYXUxMTAwX2lycV90b19ncGlvKGlycSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCXJldHVybiBhdTE1MDBfaXJxX3RvX2dwaW8oaXJxKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0JcmV0dXJuIGF1MTU1MF9pcnFfdG9fZ3BpbyhpcnEpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkKLQlyZXR1cm4gYXUxMjAwX2lycV90b19ncGlvKGlycSk7Ci0jZWxzZQorCXN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisJCXJldHVybiBhdTEwMDBfaXJxX3RvX2dwaW8oaXJxKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwkJcmV0dXJuIGF1MTEwMF9pcnFfdG9fZ3BpbyhpcnEpOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlyZXR1cm4gYXUxNTAwX2lycV90b19ncGlvKGlycSk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCXJldHVybiBhdTE1NTBfaXJxX3RvX2dwaW8oaXJxKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTIwMDoKKwkJcmV0dXJuIGF1MTIwMF9pcnFfdG9fZ3BpbyhpcnEpOworCX0KIAlyZXR1cm4gLUVOWElPOwotI2VuZGlmCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmgKaW5kZXggZjliN2Q0MS4uYzNmNjBjZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQUxDSEVNWV9HUElPX0hfCiAjZGVmaW5lIF9BTENIRU1ZX0dQSU9fSF8KIAotI2lmIGRlZmluZWQoQ09ORklHX0FMQ0hFTVlfR1BJT19BVTEwMDApCisjaWYgZGVmaW5lZChDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMCkKIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvaW9yZW1hcC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2lvcmVtYXAuaAppbmRleCAzNjRjZWEyLi43NWE5NGFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvaW9yZW1hcC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9pb3JlbWFwLmgKQEAgLTExLDcgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpZmRlZiBDT05GSUdfNjRCSVRfUEhZU19BRERSCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKSAmJiBkZWZpbmVkKENPTkZJR19QQ0kpCiBleHRlcm4gcGh5c190IF9fZml4dXBfYmlncGh5c19hZGRyKHBoeXNfdCwgcGh5c190KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHBoeXNfdCBfX2ZpeHVwX2JpZ3BoeXNfYWRkcihwaHlzX3QgcGh5c19hZGRyLCBwaHlzX3Qgc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9wcm9tLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvcHJvbS5oCmluZGV4IGUzODcxNTUuLjRjMGUwOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9wcm9tLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL3Byb20uaApAQCAtNiw3ICs2LDYgQEAKIGV4dGVybiBjaGFyICoqcHJvbV9lbnZwOwogCiBleHRlcm4gdm9pZCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKLWV4dGVybiBjaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCk7CiBleHRlcm4gY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqZW52bmFtZSk7CiBleHRlcm4gaW50IHByb21fZ2V0X2V0aGVybmV0X2FkZHIoY2hhciAqZXRoZXJuZXRfYWRkcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9yZWdzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfcmVncy5oCmluZGV4IGVkNGNjZWMuLjg1ZmQyNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9yZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X3JlZ3MuaApAQCAtNzcwLDQgKzc3MCwzIEBACiAjZGVmaW5lIERNSVBTUExMQ0ZHX04yX01BU0sJCSgweDcgPDwgRE1JUFNQTExDRkdfTjJfU0hJRlQpCiAKICNlbmRpZiAvKiBCQ002M1hYX1JFR1NfSF8gKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggNDI1ZTcwOC4uYmJmMDU0MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC01OCw2ICs1OCw5IEBACiAjZGVmaW5lIGNwdV9oYXNfdmludAkJMAogI2RlZmluZSBjcHVfaGFzX3ZlaWMJCTAKICNkZWZpbmUgY3B1X2h3cmVuYV9pbXBsX2JpdHMJMHhjMDAwMDAwMAorCisjZGVmaW5lIGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpIChjcHVfZGF0YVswXS5jcHV0eXBlID09IENQVV9DQVZJVU1fT0NURU9OX1BMVVMpCisKICNkZWZpbmUgQVJDSF9IQVNfUkVBRF9DVVJSRU5UX1RJTUVSIDEKICNkZWZpbmUgQVJDSF9IQVNfSVJRX1BFUl9DUFUJMQogI2RlZmluZSBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSCAxCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvYmNzci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2Jjc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MThkMmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2Jjc3IuaApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIGJjc3IuaCAtLSBEYjF4eHgvUGIxeHh4IERldmJvYXJkIENQTEQgcmVnaXN0ZXJzICgiQkNTUiIpIGFic3RyYWN0aW9uLgorICoKKyAqIEFsbCBBbGNoZW15IGRldmVsb3BtZW50IGJvYXJkcyAoZXhjZXB0LCBvZiBjb3Vyc2UsIHRoZSB3ZWlyZCBQQjEwMDApCisgKiBoYXZlIGEgZmV3IHJlZ2lzdGVycyBpbiBhIENQTEQgd2l0aCBzdGFuZGFyZGlzZWQgbGF5b3V0OyB0aGV5IG1vc3RseQorICogb25seSBkaWZmZXIgaW4gYmFzZSBhZGRyZXNzIGFuZCBiaXQgbWVhbmluZ3MgaW4gdGhlIFJFU0VUUyBhbmQgQk9BUkQKKyAqIHJlZ2lzdGVycy4KKyAqCisgKiBBbGwgZGF0YSB0YWtlbiBmcm9tIHRoZSBvZmZpY2lhbCBBTUQgYm9hcmQgZG9jdW1lbnRhdGlvbiBzaGVldHMuCisgKi8KKworI2lmbmRlZiBfREIxWFhYX0JDU1JfSF8KKyNkZWZpbmUgX0RCMVhYWF9CQ1NSX0hfCisKKworLyogQkNTUiBiYXNlIGFkZHJlc3NlcyBvbiB2YXJpb3VzIGJvYXJkcy4gQkNTUiBiYXNlIDIgcmVmZXJzIHRvIHRoZQorICogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgSEVYTEVEUyByZWdpc3Rlciwgd2hpY2ggaXMgdXN1YWxseQorICogYSB2YXJpYWJsZSBvZmZzZXQgZnJvbSB0aGUgV0hPQU1JIHJlZ2lzdGVyLgorICovCisKKy8qIERCMTAwMCwgREIxMTAwLCBEQjE1MDAsIFBCMTEwMCwgUEIxNTAwICovCisjZGVmaW5lIERCMTAwMF9CQ1NSX1BIWVNfQUREUgkweDBFMDAwMDAwCisjZGVmaW5lIERCMTAwMF9CQ1NSX0hFWExFRF9PRlMJMHgwMTAwMDAwMAorCisjZGVmaW5lIERCMTU1MF9CQ1NSX1BIWVNfQUREUgkweDBGMDAwMDAwCisjZGVmaW5lIERCMTU1MF9CQ1NSX0hFWExFRF9PRlMJMHgwMDQwMDAwMAorCisjZGVmaW5lIFBCMTU1MF9CQ1NSX1BIWVNfQUREUgkweDBGMDAwMDAwCisjZGVmaW5lIFBCMTU1MF9CQ1NSX0hFWExFRF9PRlMJMHgwMDgwMDAwMAorCisjZGVmaW5lIERCMTIwMF9CQ1NSX1BIWVNfQUREUgkweDE5ODAwMDAwCisjZGVmaW5lIERCMTIwMF9CQ1NSX0hFWExFRF9PRlMJMHgwMDQwMDAwMAorCisjZGVmaW5lIFBCMTIwMF9CQ1NSX1BIWVNfQUREUgkweDBEODAwMDAwCisjZGVmaW5lIFBCMTIwMF9CQ1NSX0hFWExFRF9PRlMJMHgwMDQwMDAwMAorCisKK2VudW0gYmNzcl9pZCB7CisJLyogQkNTUiBiYXNlIDEgKi8KKwlCQ1NSX1dIT0FNSQk9IDAsCisJQkNTUl9TVEFUVVMsCisJQkNTUl9TV0lUQ0hFUywKKwlCQ1NSX1JFU0VUUywKKwlCQ1NSX1BDTUNJQSwKKwlCQ1NSX0JPQVJELAorCUJDU1JfTEVEUywKKwlCQ1NSX1NZU1RFTSwKKwkvKiBBdTEyMDAvMTMwMCBiYXNlZCBib2FyZHMgKi8KKwlCQ1NSX0lOVENMUiwKKwlCQ1NSX0lOVFNFVCwKKwlCQ1NSX01BU0tDTFIsCisJQkNTUl9NQVNLU0VULAorCUJDU1JfU0lHU1RBVCwKKwlCQ1NSX0lOVFNUQVQsCisKKwkvKiBCQ1NSIGJhc2UgMiAqLworCUJDU1JfSEVYTEVEUywKKwlCQ1NSX1JTVkQxLAorCUJDU1JfSEVYQ0xFQVIsCisKKwlCQ1NSX0NOVCwKK307CisKKy8qIHJlZ2lzdGVyIG9mZnNldHMsIHZhbGlkIGZvciBhbGwgRGIxeHh4L1BiMXh4eCBib2FyZHMgKi8KKyNkZWZpbmUgQkNTUl9SRUdfV0hPQU1JCQkweDAwCisjZGVmaW5lIEJDU1JfUkVHX1NUQVRVUwkJMHgwNAorI2RlZmluZSBCQ1NSX1JFR19TV0lUQ0hFUwkweDA4CisjZGVmaW5lIEJDU1JfUkVHX1JFU0VUUwkJMHgwYworI2RlZmluZSBCQ1NSX1JFR19QQ01DSUEJCTB4MTAKKyNkZWZpbmUgQkNTUl9SRUdfQk9BUkQJCTB4MTQKKyNkZWZpbmUgQkNTUl9SRUdfTEVEUwkJMHgxOAorI2RlZmluZSBCQ1NSX1JFR19TWVNURU0JCTB4MWMKKy8qIEF1MTIwMC9BdTEzMDAgYmFzZWQgYm9hcmRzOiBDUExEIElSUSBtdXhlciAqLworI2RlZmluZSBCQ1NSX1JFR19JTlRDTFIJCTB4MjAKKyNkZWZpbmUgQkNTUl9SRUdfSU5UU0VUCQkweDI0CisjZGVmaW5lIEJDU1JfUkVHX01BU0tDTFIJMHgyOAorI2RlZmluZSBCQ1NSX1JFR19NQVNLU0VUCTB4MmMKKyNkZWZpbmUgQkNTUl9SRUdfU0lHU1RBVAkweDMwCisjZGVmaW5lIEJDU1JfUkVHX0lOVFNUQVQJMHgzNAorCisvKiBoZXhsZWQgY29udHJvbCwgb2Zmc2V0IGZyb20gQkNTUiBiYXNlIDIgKi8KKyNkZWZpbmUgQkNTUl9SRUdfSEVYTEVEUwkweDAwCisjZGVmaW5lIEJDU1JfUkVHX0hFWENMRUFSCTB4MDgKKworLyoKKyAqIFJlZ2lzdGVyIEJpdHMgYW5kIFBpZWNlcy4KKyAqLworI2RlZmluZSBCQ1NSX1dIT0FNSV9EQ0lEKHgpCQkoKHgpICYgMHhmKQorI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExEKHgpCQkoKCh4KSA+PiA0KSAmIDB4ZikKKyNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQoeCkJCSgoKHgpID4+IDgpICYgMHhmKQorCisvKiByZWdpc3RlciAiV0hPQU1JIiBiaXRzIDExOjggaWRlbnRpZnkgdGhlIGJvYXJkICovCitlbnVtIGJjc3Jfd2hvYW1pX2JvYXJkcyB7CisJQkNTUl9XSE9BTUlfUEIxNTAwID0gMSwKKwlCQ1NSX1dIT0FNSV9QQjE1MDBSMiwKKwlCQ1NSX1dIT0FNSV9QQjExMDAsCisJQkNTUl9XSE9BTUlfREIxMDAwLAorCUJDU1JfV0hPQU1JX0RCMTEwMCwKKwlCQ1NSX1dIT0FNSV9EQjE1MDAsCisJQkNTUl9XSE9BTUlfREIxNTUwLAorCUJDU1JfV0hPQU1JX1BCMTU1MF9ERFIsCisJQkNTUl9XSE9BTUlfUEIxNTUwID0gQkNTUl9XSE9BTUlfUEIxNTUwX0REUiwKKwlCQ1NSX1dIT0FNSV9QQjE1NTBfU0RSLAorCUJDU1JfV0hPQU1JX1BCMTIwMF9ERFIxLAorCUJDU1JfV0hPQU1JX1BCMTIwMCA9IEJDU1JfV0hPQU1JX1BCMTIwMF9ERFIxLAorCUJDU1JfV0hPQU1JX1BCMTIwMF9ERFIyLAorCUJDU1JfV0hPQU1JX0RCMTIwMCwKK307CisKKy8qIFNUQVRVUyByZWcuICBVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCB0aGV5J3JlIHZhbGlkIG9uIGFsbCBib2FyZHMuCisgKiBQQjEyMDAgPSBEQjEyMDAuCisgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEMwVlMJCTB4MDAwMworI2RlZmluZSBCQ1NSX1NUQVRVU19QQzFWUwkJMHgwMDBDCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDMEZJCQkweDAwMTAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEMxRkkJCTB4MDAyMAorI2RlZmluZSBCQ1NSX1NUQVRVU19QQjE1NTBfU1dBUEJPT1QJMHgwMDQwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1NSQU1XSURUSAkJMHgwMDgwCisjZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIQlVTWQkJMHgwMTAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1JPTUJVU1kJCTB4MDQwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19TRDBXUAkJMHgwNDAwCS8qIERCMTIwMCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19TRDFXUAkJMHgwODAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1VTQk9UR0lECQkweDA4MDAJLyogUEIvREIxNTUwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTAwMF9TV0FQQk9PVAkweDIwMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxMjAwX1NXQVBCT09UCTB4MDA0MAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfSURFQ0JMSUQJCTB4MDIwMAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxMjAwX1UwUlhECTB4MTAwMAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxMjAwX1UxUlhECTB4MjAwMAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hERU4JCTB4QzAwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19EQjE1NTBfVTBSWEQJMHgxMDAwCS8qIERCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19EQjE1NTBfVTNSWEQJMHgyMDAwCS8qIERCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19QQjE1NTBfVTBSWEQJMHgxMDAwCS8qIFBCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19QQjE1NTBfVTFSWEQJMHgyMDAwCS8qIFBCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19QQjE1NTBfVTNSWEQJMHg4MDAwCS8qIFBCMTU1MCAqLworCisKKy8qIERCL1BCMTAwMCwxMTAwLDE1MDAsMTU1MCAqLworI2RlZmluZSBCQ1NSX1JFU0VUU19QSFkwCQkweDAwMDEKKyNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMQkJMHgwMDAyCisjZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkJMHgwMDA0CisjZGVmaW5lIEJDU1JfUkVTRVRTX0ZJUl9TRUwJCTB4MjAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSwkweEMwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX0ZVTEwJMHgwMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BCMTU1MF9XU0NGU00JMHgyMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9PRkYJMHg0MDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV8yXzMJMHg4MDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV8xXzMJMHhDMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0RNQVJFUQkJMHg4MDAwCS8qIFBCMTU1MCAqLworCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJTTY2RU4JCTB4MDAwMQorI2RlZmluZSBCQ1NSX0JPQVJEX1NEMFBXUgkJMHgwMDQwCisjZGVmaW5lIEJDU1JfQk9BUkRfU0QxUFdSCQkweDAwODAKKyNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lNMzMJCTB4MDEwMAorI2RlZmluZSBCQ1NSX0JPQVJEX1BDSUVYVEFSQgkJMHgwMjAwCisjZGVmaW5lIEJDU1JfQk9BUkRfR1BJTzIwMFJTVAkJMHgwNDAwCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJQ0xLT1VUCQkweDA4MDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lDRkcJCTB4MTAwMAorI2RlZmluZSBCQ1NSX0JPQVJEX1NQSVNFTAkJMHg0MDAwCS8qIFBCL0RCMTU1MCAqLworI2RlZmluZSBCQ1NSX0JPQVJEX1NEMFdQCQkweDQwMDAJLyogREIxMTAwICovCisjZGVmaW5lIEJDU1JfQk9BUkRfU0QxV1AJCTB4ODAwMAkvKiBEQjExMDAgKi8KKworCisvKiBEQi9QQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9SRVNFVFNfRVRICQkJMHgwMDAxCisjZGVmaW5lIEJDU1JfUkVTRVRTX0NBTUVSQQkJMHgwMDAyCisjZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkJMHgwMDA0CisjZGVmaW5lIEJDU1JfUkVTRVRTX0lERQkJCTB4MDAwOAorI2RlZmluZSBCQ1NSX1JFU0VUU19UVgkJCTB4MDAxMAkvKiBEQjEyMDAgKi8KKy8qIE5vdCByZXNldHMgYnV0IGluIHRoZSBzYW1lIHJlZ2lzdGVyICovCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BXTVIxTVVYCQkweDA4MDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BCMTIwMF9XU0NGU00JMHgwODAwCS8qIFBCMTIwMCAqLworI2RlZmluZSBCQ1NSX1JFU0VUU19QU0MwTVVYCQkweDEwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfUFNDMU1VWAkJMHgyMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX1NQSVNFTAkJMHg0MDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX1NEMU1VWAkJMHg4MDAwCS8qIFBCMTIwMCAqLworCisjZGVmaW5lIEJDU1JfQk9BUkRfTENEVkVFCQkweDAwMDEKKyNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWREQJCTB4MDAwMgorI2RlZmluZSBCQ1NSX0JPQVJEX0xDREJMCQkweDAwMDQKKyNkZWZpbmUgQkNTUl9CT0FSRF9DQU1TTkFQCQkweDAwMTAKKyNkZWZpbmUgQkNTUl9CT0FSRF9DQU1QV1IJCTB4MDAyMAorI2RlZmluZSBCQ1NSX0JPQVJEX1NEMFBXUgkJMHgwMDQwCisKKworI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUAkJMHgwMEZGCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzEJCTB4MDA4MAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8yCQkweDAwNDAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkJMHgwMDIwCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzQJCTB4MDAxMAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF81CQkweDAwMDgKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkJMHgwMDA0CisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzcJCTB4MDAwMgorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF84CQkweDAwMDEKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJCTB4MEYwMAorCisKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVlBQCQkweDAwMDMKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVkNDCQkweDAwMEMKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwRFJWRU4JCTB4MDAxMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBSU1QJCTB4MDA4MAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWUFAJCTB4MDMwMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWQ0MJCTB4MEMwMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFEUlZFTgkJMHgxMDAwCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVJTVAkJMHg4MDAwCisKKworI2RlZmluZSBCQ1NSX0xFRFNfREVDSU1BTFMJCTB4MDAwMworI2RlZmluZSBCQ1NSX0xFRFNfTEVEMAkJCTB4MDEwMAorI2RlZmluZSBCQ1NSX0xFRFNfTEVEMQkJCTB4MDIwMAorI2RlZmluZSBCQ1NSX0xFRFNfTEVEMgkJCTB4MDQwMAorI2RlZmluZSBCQ1NSX0xFRFNfTEVEMwkJCTB4MDgwMAorCisKKyNkZWZpbmUgQkNTUl9TWVNURU1fUkVTRVQJCTB4ODAwMAkvKiBjbGVhciB0byByZXNldCAqLworI2RlZmluZSBCQ1NSX1NZU1RFTV9QV1JPRkYJCTB4NDAwMAkvKiBzZXQgdG8gcG93ZXIgb2ZmICovCisjZGVmaW5lIEJDU1JfU1lTVEVNX1ZEREkJCTB4MDAxRgkvKiBQQjF4eHggYm9hcmRzICovCisKKworCisKKy8qIGluaXRpYWxpemUgQkNTUiBmb3IgYSBib2FyZC4gUHJvdmlkZSB0aGUgUEhZU0lDQUwgYWRkcmVzc2VzIG9mIGJvdGgKKyAqIEJDU1Igc3BhY2VzLgorICovCit2b2lkIF9faW5pdCBiY3NyX2luaXQodW5zaWduZWQgbG9uZyBiY3NyMV9waHlzLCB1bnNpZ25lZCBsb25nIGJjc3IyX3BoeXMpOworCisvKiByZWFkIGEgYm9hcmQgcmVnaXN0ZXIgKi8KK3Vuc2lnbmVkIHNob3J0IGJjc3JfcmVhZChlbnVtIGJjc3JfaWQgcmVnKTsKKworLyogd3JpdGUgdG8gYSBib2FyZCByZWdpc3RlciAqLwordm9pZCBiY3NyX3dyaXRlKGVudW0gYmNzcl9pZCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCk7CisKKy8qIG1vZGlmeSBhIHJlZ2lzdGVyLiBjbGVhciBiaXRzIHNldCBpbiAnY2xyJywgc2V0IGJpdHMgc2V0IGluICdzZXQnICovCit2b2lkIGJjc3JfbW9kKGVudW0gYmNzcl9pZCByZWcsIHVuc2lnbmVkIHNob3J0IGNsciwgdW5zaWduZWQgc2hvcnQgc2V0KTsKKworLyogaW5zdGFsbCBDUExEIElSUSBkZW11eGVyIChEQjEyMDAvUEIxMjAwKSAqLwordm9pZCBfX2luaXQgYmNzcl9pbml0X2lycShpbnQgY3NjX3N0YXJ0LCBpbnQgY3NjX2VuZCwgaW50IGhvb2tfaXJxKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxMjAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxMjAwLmgKaW5kZXggMjdmMjYxMC4uMzQwNDI0OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaApAQCAtMjUsMTMzICsyNSw5IEBACiAjZGVmaW5lIF9fQVNNX0RCMTIwMF9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oPgogCi0jZGVmaW5lIERCRE1BX0FDOTdfVFhfQ0hBTglEU0NSX0NNRDBfUFNDMV9UWAotI2RlZmluZSBEQkRNQV9BQzk3X1JYX0NIQU4JRFNDUl9DTUQwX1BTQzFfUlgKLSNkZWZpbmUgREJETUFfSTJTX1RYX0NIQU4JRFNDUl9DTUQwX1BTQzFfVFgKLSNkZWZpbmUgREJETUFfSTJTX1JYX0NIQU4JRFNDUl9DTUQwX1BTQzFfUlgKLQotLyoKLSAqIFNQSSBhbmQgU01CIGFyZSBtdXhlZCBvbiB0aGUgREJBdTEyMDAgYm9hcmQuCi0gKiBSZWZlciB0byBib2FyZCBkb2N1bWVudGF0aW9uLgotICovCi0jZGVmaW5lIFNQSV9QU0NfQkFTRQkJUFNDMF9CQVNFX0FERFIKLSNkZWZpbmUgU01CVVNfUFNDX0JBU0UJCVBTQzBfQkFTRV9BRERSCi0vKgotICogQUMnOTcgYW5kIEkyUyBhcmUgbXV4ZWQgb24gdGhlIERCQXUxMjAwIGJvYXJkLgotICogUmVmZXIgdG8gYm9hcmQgZG9jdW1lbnRhdGlvbi4KLSAqLwotI2RlZmluZSBBQzk3X1BTQ19CQVNFCQlQU0MxX0JBU0VfQUREUgotI2RlZmluZSBJMlNfUFNDX0JBU0UJCVBTQzFfQkFTRV9BRERSCi0KLSNkZWZpbmUgQkNTUl9LU0VHMV9BRERSIAkweEI5ODAwMDAwCi0KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXUxNiB3aG9hbWk7Ci0JCXUxNiByZXNlcnZlZDA7Ci0JLyowNCovCXUxNiBzdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDE7Ci0JLyowOCovCXUxNiBzd2l0Y2hlczsKLQkJdTE2IHJlc2VydmVkMjsKLQkvKjBDKi8JdTE2IHJlc2V0czsKLQkJdTE2IHJlc2VydmVkMzsKLQotCS8qMTAqLwl1MTYgcGNtY2lhOwotCQl1MTYgcmVzZXJ2ZWQ0OwotCS8qMTQqLwl1MTYgYm9hcmQ7Ci0JCXUxNiByZXNlcnZlZDU7Ci0JLyoxOCovCXUxNiBkaXNrX2xlZHM7Ci0JCXUxNiByZXNlcnZlZDY7Ci0JLyoxQyovCXUxNiBzeXN0ZW07Ci0JCXUxNiByZXNlcnZlZDc7Ci0KLQkvKjIwKi8JdTE2IGludGNscjsKLQkJdTE2IHJlc2VydmVkODsKLQkvKjI0Ki8JdTE2IGludHNldDsKLQkJdTE2IHJlc2VydmVkOTsKLQkvKjI4Ki8JdTE2IGludGNscl9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMDsKLQkvKjJDKi8JdTE2IGludHNldF9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMTsKLQotCS8qMzAqLwl1MTYgc2lnX3N0YXR1czsKLQkJdTE2IHJlc2VydmVkMTI7Ci0JLyozNCovCXUxNiBpbnRfc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxMzsKLQkvKjM4Ki8JdTE2IHJlc2VydmVkMTQ7Ci0JCXUxNiByZXNlcnZlZDE1OwotCS8qM0MqLwl1MTYgcmVzZXJ2ZWQxNjsKLQkJdTE2IHJlc2VydmVkMTc7Ci0KLX0gQkNTUjsKLQotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0KLS8qCi0gKiBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBCQ1NScwotICovCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQJMHgwMDBGCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0NQTEQJMHgwMEYwCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJECTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTBWUwkweDAwMDMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMVZTCTB4MDAwQwotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkweDAwNDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCTB4MDEwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19JREVDQkxJRAkweDAyMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU0QwV1AJMHgwNDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UwUlhECTB4MTAwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMVJYRAkweDIwMDAKLQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX09DVEFMCTB4MDBGRgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8xCTB4MDA4MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8yCTB4MDA0MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8zCTB4MDAyMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF80CTB4MDAxMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF81CTB4MDAwOAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF82CTB4MDAwNAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF83CTB4MDAwMgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF84CTB4MDAwMQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX1JPVEFSWQkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1JFU0VUU19FVEgJCTB4MDAwMQotI2RlZmluZSBCQ1NSX1JFU0VUU19DQU1FUkEJMHgwMDAyCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkweDAwMDQKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSURFCQkweDAwMDgKLSNkZWZpbmUgQkNTUl9SRVNFVFNfVFYJCTB4MDAxMAotLyogTm90IHJlc2V0cyBidXQgaW4gdGhlIHNhbWUgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQkNTUl9SRVNFVFNfUFdNUjFNVVgJMHgwODAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzBNVVgJMHgxMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzFNVVgJMHgyMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1NQSVNFTAkweDQwMDAKLQotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWUFAJMHgwMDAzCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkweDAwMEMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwRFJWRU4JMHgwMDEwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFJTVAkweDAwODAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCTB4MDMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWQ0MJMHgwQzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMURSVkVOCTB4MTAwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWRUUJMHgwMDAxCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEVkRECTB4MDAwMgotI2RlZmluZSBCQ1NSX0JPQVJEX0xDREJMCTB4MDAwNAotI2RlZmluZSBCQ1NSX0JPQVJEX0NBTVNOQVAJMHgwMDEwCi0jZGVmaW5lIEJDU1JfQk9BUkRfQ0FNUFdSCTB4MDAyMAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMFBXUgkweDAwNDAKLQotI2RlZmluZSBCQ1NSX0xFRFNfREVDSU1BTFMJMHgwMDAzCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQwCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCTB4MDIwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMgkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQzCQkweDA4MDAKLQotI2RlZmluZSBCQ1NSX1NZU1RFTV9QT1dFUk9GRgkweDQwMDAKLSNkZWZpbmUgQkNTUl9TWVNURU1fUkVTRVQJMHg4MDAwCi0KIC8qIEJpdCBwb3NpdGlvbnMgZm9yIHRoZSBkaWZmZXJlbnQgaW50ZXJydXB0IHNvdXJjZXMgKi8KICNkZWZpbmUgQkNTUl9JTlRfSURFCQkweDAwMDEKICNkZWZpbmUgQkNTUl9JTlRfRVRICQkweDAwMDIKQEAgLTE2OCwxNyArNDQsMTUgQEAKICNkZWZpbmUgQkNTUl9JTlRfU0QwSU5TRVJUCTB4MTAwMAogI2RlZmluZSBCQ1NSX0lOVF9TRDBFSkVDVAkweDIwMDAKIAotI2RlZmluZSBTTUM5MUMxMTFfUEhZU19BRERSCTB4MTkwMDAzMDAKLSNkZWZpbmUgU01DOTFDMTExX0lOVAkJREIxMjAwX0VUSF9JTlQKLQogI2RlZmluZSBJREVfUEhZU19BRERSCQkweDE4ODAwMDAwCiAjZGVmaW5lIElERV9SRUdfU0hJRlQJCTUKLSNkZWZpbmUgSURFX1BIWVNfTEVOCQkoMTYgPDwgSURFX1JFR19TSElGVCkKLSNkZWZpbmUgSURFX0lOVCAJCURCMTIwMF9JREVfSU5UCiAjZGVmaW5lIElERV9ERE1BX1JFUQkJRFNDUl9DTUQwX0RNQV9SRVExCiAjZGVmaW5lIElERV9SUVNJWkUJCTEyOAogCi0jZGVmaW5lIE5BTkRfUEhZU19BRERSCQkweDIwMDAwMDAwCisjZGVmaW5lIERCMTIwMF9JREVfUEhZU19BRERSCUlERV9QSFlTX0FERFIKKyNkZWZpbmUgREIxMjAwX0lERV9QSFlTX0xFTgkoMTYgPDwgSURFX1JFR19TSElGVCkKKyNkZWZpbmUgREIxMjAwX0VUSF9QSFlTX0FERFIJMHgxOTAwMDMwMAorI2RlZmluZSBEQjEyMDBfTkFORF9QSFlTX0FERFIJMHgyMDAwMDAwMAogCiAvKgogICogRXh0ZXJuYWwgSW50ZXJydXB0cyBmb3IgREJBdTEyMDAgYXMgb2YgOC82LzIwMDQuCkBAIC0xODgsNyArNjIsNyBAQAogICogICBFeGFtcGxlOiBJREUgYmlzIHBvcyBpcyAgPSA2NCAtIDY0CiAgKiAgICAgICAgICAgIEVUSCBiaXQgcG9zIGlzICA9IDY1IC0gNjQKICAqLwotZW51bSBleHRlcm5hbF9wYjEyMDBfaW50cyB7CitlbnVtIGV4dGVybmFsX2RiMTIwMF9pbnRzIHsKIAlEQjEyMDBfSU5UX0JFR0lOCT0gQVUxMDAwX01BWF9JTlRSICsgMSwKIAogCURCMTIwMF9JREVfSU5UCQk9IERCMTIwMF9JTlRfQkVHSU4sCkBAIC0yMDksMjIgKzgzLDQgQEAKIAlEQjEyMDBfSU5UX0VORAkJPSBEQjEyMDBfSU5UX0JFR0lOICsgMTUsCiB9OwogCi0KLS8qCi0gKiBEQkF1MTIwMCBzcGVjaWZpYyBQQ01DSUEgZGVmaW5lcyBmb3IgZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jCi0gKi8KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAxCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFAsIFNMT1QpIFwKLQkoKCgoVkNDKSA8PCAyKSB8ICgoVlBQKSA8PCAwKSkgPDwgKChTTE9UKSAqIDgpKQotCi0jZGVmaW5lIEJPQVJEX1BDMF9JTlQJREIxMjAwX1BDMF9JTlQKLSNkZWZpbmUgQk9BUkRfUEMxX0lOVAlEQjEyMDBfUEMxX0lOVAotI2RlZmluZSBCT0FSRF9DQVJEX0lOU0VSVEVEKFNPQ0tFVCkgYmNzci0+c2lnX3N0YXR1cyAmICgxIDw8ICg4ICsgKDIgKiBTT0NLRVQpKSkKLQotLyogTkFORCBjaGlwIHNlbGVjdCAqLwotI2RlZmluZSBOQU5EX0NTIDEKLQogI2VuZGlmIC8qIF9fQVNNX0RCMTIwMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxeDAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxeDAwLmgKaW5kZXggMWE1MTViOC4uYTkxOWRhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMXgwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjF4MDAuaApAQCAtNDEsMTExICs0MSwxMSBAQAogI2RlZmluZSBTTUJVU19QU0NfQkFTRQkJUFNDMl9CQVNFX0FERFIKICNkZWZpbmUgSTJTX1BTQ19CQVNFCQlQU0MzX0JBU0VfQUREUgogCi0jZGVmaW5lIEJDU1JfS1NFRzFfQUREUiAJMHhBRjAwMDAwMAogI2RlZmluZSBOQU5EX1BIWVNfQUREUgkJMHgyMDAwMDAwMAogCi0jZWxzZQotI2RlZmluZSBCQ1NSX0tTRUcxX0FERFIgMHhBRTAwMDAwMAogI2VuZGlmCiAKIC8qCi0gKiBPdmVybGF5IGRhdGEgc3RydWN0dXJlIG9mIHRoZSBEQkF1MXgwMCBib2FyZCByZWdpc3RlcnMuCi0gKiBSZWdpc3RlcnMgYXJlIGxvY2F0ZWQgYXQgcGh5c2ljYWwgMEUwMDAweHgsIEtTRUcxIDB4QUUwMDAweHguCi0gKi8KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXVuc2lnbmVkIHNob3J0IHdob2FtaTsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDA7Ci0JLyowNCovCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDE7Ci0JLyowOCovCXVuc2lnbmVkIHNob3J0IHN3aXRjaGVzOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMjsKLQkvKjBDKi8JdW5zaWduZWQgc2hvcnQgcmVzZXRzOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMzsKLQkvKjEwKi8JdW5zaWduZWQgc2hvcnQgcGNtY2lhOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkNDsKLQkvKjE0Ki8JdW5zaWduZWQgc2hvcnQgc3BlY2lmaWM7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ1OwotCS8qMTgqLwl1bnNpZ25lZCBzaG9ydCBsZWRzOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkNjsKLQkvKjFDKi8JdW5zaWduZWQgc2hvcnQgc3dyZXNldDsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDc7Ci0KLX0gQkNTUjsKLQotCi0vKgotICogUmVnaXN0ZXIvbWFzayBiaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBCQ1NScwotICovCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQJCTB4MDAwRgotI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExECQkweDAwRjAKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQJCTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDMFZTCQkweDAwMDMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUEMxVlMJCTB4MDAwQwotI2RlZmluZSBCQ1NSX1NUQVRVU19QQzBGSQkJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDMUZJCQkweDAwMjAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUk9NQlVTWQkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NXQVBCT09UCQkweDIwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hERU4JCTB4QzAwMAotCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQCQkweDAwRkYKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkJMHgwMDgwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzIJCTB4MDA0MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8zCQkweDAwMjAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzUJCTB4MDAwOAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF82CQkweDAwMDQKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkJMHgwMDAyCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzgJCTB4MDAwMQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX1JPVEFSWQkJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMAkJMHgwMDAxCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTEJCTB4MDAwMgotI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJCTB4MDAwNAotI2RlZmluZSBCQ1NSX1JFU0VUU19GSVJfU0VMCQkweDIwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0sJMHhDMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9GVUxMCTB4MDAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGCTB4NDAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMl8zCTB4ODAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMV8zCTB4QzAwMAotCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkJMHgwMDAzCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkJMHgwMDBDCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCQkweDAwMTAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCQkweDAwODAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCQkweDAzMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCQkweDBDMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JCTB4MTAwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfQk9BUkRfUENJTTY2RU4JCTB4MDAwMQotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMF9QV1IJCTB4MDA0MAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMV9QV1IJCTB4MDA4MAotI2RlZmluZSBCQ1NSX0JPQVJEX1BDSU0zMwkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfQk9BUkRfR1BJTzIwMFJTVAkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfQk9BUkRfUENJQ0ZHCQkweDEwMDAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDBfV1AJCTB4NDAwMAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMV9XUAkJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCQkweDAwMDMKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCQkweDAyMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCQkweDA0MDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCQkweDA4MDAKLQotI2RlZmluZSBCQ1NSX1NXUkVTRVRfUkVTRVQJCTB4MDA4MAotCi0vKiBQQ01DSUEgREJBdTF4MDAgc3BlY2lmaWMgZGVmaW5lcyAqLwotI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgIDEKLSNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLICsgMSkKLQotLyogVlBQL1ZDQyAqLwotI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCwgU0xPVClcCi0JKCgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpIDw8ICgoU0xPVCkgKiA4KSkKLQotLyoKICAqIE5BTkQgZGVmaW5lcwogICoKICAqIFRpbWluZyB2YWx1ZXMgYXMgZGVzY3JpYmVkIGluIGRhdGFib29rLCAqIG5zIHZhbHVlIHN0cmlwcGVkIG9mIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCA5OTQ3ZTU3Li4xNjIxMGNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtMyw3ICszLDcgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IFBoaWxpcHBlIFZhY2hvbiA8cGhpbGlwcGVAY293cGlnLmNhPgogICogQ29weXJpZ2h0IChDKSAyMDA5IFpoYW5nIExlIDxyMGJlcnR6QGdlbnRvby5vcmc+CiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl92c20uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmgKaW5kZXggNjMwNWJlYS4uMjFjNGVjZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl92c20uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X3ZzbS5oCkBAIC0yLDcgKzIsNyBAQAogICogdGhlIHJlYWQvd3JpdGUgaW50ZXJmYWNlcyBmb3IgVmlydHVhbCBTdXBwb3J0IE1vZHVsZShWU00pCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKi8KIAogI2lmbmRlZglfQ1M1NTM2X1ZTTV9ICmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaAppbmRleCBlZThiYzgzLi4xY2Y3YjE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmgKQEAgLTEsMTIgKzEsMTEgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKICAqLwogCiAjaWZuZGVmIF9fQVNNX01BQ0hfTE9PTkdTT05fTE9PTkdTT05fSApAQCAtMjMsNyArMjIsNyBAQAogZXh0ZXJuIHZvaWQgbWFjaF9wcmVwYXJlX3NodXRkb3duKHZvaWQpOwogCiAvKiBlbnZpcm9ubWVudCBhcmd1bWVudHMgZnJvbSBib290bG9hZGVyICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBidXNfY2xvY2ssIGNwdV9jbG9ja19mcmVxOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY3B1X2Nsb2NrX2ZyZXE7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1zaXplLCBoaWdobWVtc2l6ZTsKIAogLyogbG9vbmdzb24tc3BlY2lmaWMgY29tbWFuZCBsaW5lLCBlbnYgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWFjaGluZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWFjaGluZS5oCmluZGV4IGFjZjgzNTkuLjQzMjEzMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tYWNoaW5lLmgKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLiAmIEluc3RpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWVtLmgKaW5kZXggZTk5NjBmMy4uM2IyM2VlOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWVtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWVtLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vcGNpLmgKaW5kZXggYTE5OWE0Zi4uYmM5OWRhYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vcGNpLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vcGNpLmgKQEAgLTEsMjMgKzEsMTIgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDggWmhhbmcgTGUgPHIwYmVydHpAZ2VudG9vLm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwOSBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA5IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKICAqIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi0gKiB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCi0gKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQQotICogMDIxMzksIFVTQS4KICAqLwogCiAjaWZuZGVmIF9fQVNNX01BQ0hfTE9PTkdTT05fUENJX0hfCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMTAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMTAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYTYwZjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIEFsY2hlbXkgU2VtaSBQYjExMDAgUmVmZXJyZW5jZSBCb2FyZAotICoKLSAqIENvcHlyaWdodCAyMDAxLCAyMDA4IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKgotICovCi0jaWZuZGVmIF9fQVNNX1BCMTEwMF9ICi0jZGVmaW5lIF9fQVNNX1BCMTEwMF9ICi0KLSNkZWZpbmUgUEIxMTAwX0lERU5UCQkweEFFMDAwMDAwCi0jZGVmaW5lIEJPQVJEX1NUQVRVU19SRUcJMHhBRTAwMDAwNAotIyAgZGVmaW5lIFBCMTEwMF9ST01fU0VMCSgxIDw8IDE1KQotIyAgZGVmaW5lIFBCMTEwMF9ST01fU0laCSgxIDw8IDE0KQotIyAgZGVmaW5lIFBCMTEwMF9TV0FQX0JPT1QJKDEgPDwgMTMpCi0jICBkZWZpbmUgUEIxMTAwX0ZMQVNIX1dQCSgxIDw8IDEyKQotIyAgZGVmaW5lIFBCMTEwMF9ST01fSF9TVFMJKDEgPDwgMTEpCi0jICBkZWZpbmUgUEIxMTAwX1JPTV9MX1NUUwkoMSA8PCAxMCkKLSMgIGRlZmluZSBQQjExMDBfRkxBU0hfSF9TVFMJKDEgPDwgOSkKLSMgIGRlZmluZSBQQjExMDBfRkxBU0hfTF9TVFMJKDEgPDwgOCkKLSMgIGRlZmluZSBQQjExMDBfU1JBTV9TSVoJKDEgPDwgNykKLSMgIGRlZmluZSBQQjExMDBfVFNDX0JVU1kJKDEgPDwgNikKLSMgIGRlZmluZSBQQjExMDBfUENNQ0lBX1ZTX01BU0sgKDMgPDwgNCkKLSMgIGRlZmluZSBQQjExMDBfUlMyMzJfQ0QJKDEgPDwgMykKLSMgIGRlZmluZSBQQjExMDBfUlMyMzJfQ1RTCSgxIDw8IDIpCi0jICBkZWZpbmUgUEIxMTAwX1JTMjMyX0RTUgkoMSA8PCAxKQotIyAgZGVmaW5lIFBCMTEwMF9SUzIzMl9SSQkoMSA8PCAwKQotCi0jZGVmaW5lIFBCMTEwMF9JUkRBX1JTMjMyCTB4QUUwMDAwMEMKLSMgIGRlZmluZSBQQjExMDBfSVJEQV9GVUxMCSgwIDw8IDE0KQkvKiBmdWxsIHBvd2VyCQkqLwotIyAgZGVmaW5lIFBCMTEwMF9JUkRBX1NIVVRET1dOCSgxIDw8IDE0KQotIyAgZGVmaW5lIFBCMTEwMF9JUkRBX1RUCSgyIDw8IDE0KQkvKiAyLzMgcG93ZXIJCSovCi0jICBkZWZpbmUgUEIxMTAwX0lSREFfT1QJKDMgPDwgMTQpCS8qIDEvMyBwb3dlcgkJKi8KLSMgIGRlZmluZSBQQjExMDBfSVJEQV9GSVIJKDEgPDwgMTMpCi0KLSNkZWZpbmUgUENNQ0lBX0JPQVJEX1JFRwkweEFFMDAwMDEwCi0jICBkZWZpbmUgUEIxMTAwX1NEX1dQMV9STwkoMSA8PCAxNSkJLyogcmVhZCBvbmx5CQkqLwotIyAgZGVmaW5lIFBCMTEwMF9TRF9XUDBfUk8JKDEgPDwgMTQpCS8qIHJlYWQgb25seQkJKi8KLSMgIGRlZmluZSBQQjExMDBfU0RfUFdSMQkoMSA8PCAxMSkJLyogYXBwbGllcyBwb3dlciB0byBTRDEgKi8KLSMgIGRlZmluZSBQQjExMDBfU0RfUFdSMAkoMSA8PCAxMCkJLyogYXBwbGllcyBwb3dlciB0byBTRDAgKi8KLSMgIGRlZmluZSBQQjExMDBfU0VMX1NEX0NPTk4xCSgxIDw8IDkpCi0jICBkZWZpbmUgUEIxMTAwX1NFTF9TRF9DT05OMAkoMSA8PCA4KQotIyAgZGVmaW5lIFBDX0RFQVNTRVJUX1JTVAkoMSA8PCA3KQotIyAgZGVmaW5lIFBDX0RSVl9FTgkJKDEgPDwgNCkKLQotI2RlZmluZSBQQjExMDBfR19DT05UUk9MCTB4QUUwMDAwMTQJLyogZ3JhcGhpY3MgY29udHJvbAkqLwotCi0jZGVmaW5lIFBCMTEwMF9SU1RfVkRESSAJMHhBRTAwMDAxQwotIyAgZGVmaW5lIFBCMTEwMF9TT0ZUX1JFU0VUCSgxIDw8IDE1KQkvKiBjbGVhciB0byByZXNldCB0aGUgYm9hcmQgKi8KLSMgIGRlZmluZSBQQjExMDBfVkRESV9NQVNLCTB4MUYKLQotI2RlZmluZSBQQjExMDBfTEVEUwkJMHhBRTAwMDAxOAotCi0vKgotICogMTE6OCBpcyA0IGRpc2NyZWV0IExFRHMuIENsZWFyaW5nIGEgYml0IGlsbHVtaW5hdGVzIHRoZSBMRUQuCi0gKiA3OjAgIGlzIHRoZSBMRUQgRGlzcGxheSdzIGRlY2ltYWwgcG9pbnRzLgotICovCi0jZGVmaW5lIFBCMTEwMF9IRVhfTEVECQkweEFFMDAwMDE4Ci0KLS8qIFBDTUNJQSBQYjExMDAgc3BlY2lmaWMgZGVmaW5lcyAqLwotI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgIDAKLSNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLICsgMSkKLQotLyogVlBQL1ZDQyAqLwotI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCkgKCgoVkNDKSA8PCAyKSB8ICgoVlBQKSA8PCAwKSkKLQotI2VuZGlmIC8qIF9fQVNNX1BCMTEwMF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMjAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMjAwLmgKaW5kZXggYzg2MThkZi4uOTYyZWI1NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaApAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBfX0FTTV9QQjEyMDBfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KIAogI2RlZmluZSBEQkRNQV9BQzk3X1RYX0NIQU4JRFNDUl9DTUQwX1BTQzFfVFgKQEAgLTQzLDExMyArNDQsOCBAQAogICogUmVmZXIgdG8gYm9hcmQgZG9jdW1lbnRhdGlvbi4KICAqLwogI2RlZmluZSBBQzk3X1BTQ19CQVNFICAgICAgIFBTQzFfQkFTRV9BRERSCi0jZGVmaW5lIEkyU19QU0NfQkFTRQkJUFNDMV9CQVNFX0FERFIKKyNkZWZpbmUgSTJTX1BTQ19CQVNFCVBTQzFfQkFTRV9BRERSCiAKLSNkZWZpbmUgQkNTUl9LU0VHMV9BRERSIDB4QUQ4MDAwMDAKLQotdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QKLXsKLQkvKjAwKi8JdTE2IHdob2FtaTsKLQkJdTE2IHJlc2VydmVkMDsKLQkvKjA0Ki8JdTE2IHN0YXR1czsKLQkJdTE2IHJlc2VydmVkMTsKLQkvKjA4Ki8JdTE2IHN3aXRjaGVzOwotCQl1MTYgcmVzZXJ2ZWQyOwotCS8qMEMqLwl1MTYgcmVzZXRzOwotCQl1MTYgcmVzZXJ2ZWQzOwotCi0JLyoxMCovCXUxNiBwY21jaWE7Ci0JCXUxNiByZXNlcnZlZDQ7Ci0JLyoxNCovCXUxNiBib2FyZDsKLQkJdTE2IHJlc2VydmVkNTsKLQkvKjE4Ki8JdTE2IGRpc2tfbGVkczsKLQkJdTE2IHJlc2VydmVkNjsKLQkvKjFDKi8JdTE2IHN5c3RlbTsKLQkJdTE2IHJlc2VydmVkNzsKLQotCS8qMjAqLwl1MTYgaW50Y2xyOwotCQl1MTYgcmVzZXJ2ZWQ4OwotCS8qMjQqLwl1MTYgaW50c2V0OwotCQl1MTYgcmVzZXJ2ZWQ5OwotCS8qMjgqLwl1MTYgaW50Y2xyX21hc2s7Ci0JCXUxNiByZXNlcnZlZDEwOwotCS8qMkMqLwl1MTYgaW50c2V0X21hc2s7Ci0JCXUxNiByZXNlcnZlZDExOwotCi0JLyozMCovCXUxNiBzaWdfc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxMjsKLQkvKjM0Ki8JdTE2IGludF9zdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDEzOwotCS8qMzgqLwl1MTYgcmVzZXJ2ZWQxNDsKLQkJdTE2IHJlc2VydmVkMTU7Ci0JLyozQyovCXUxNiByZXNlcnZlZDE2OwotCQl1MTYgcmVzZXJ2ZWQxNzsKLQotfSBCQ1NSOwotCi1zdGF0aWMgQkNTUiAqIGNvbnN0IGJjc3IgPSAoQkNTUiAqKUJDU1JfS1NFRzFfQUREUjsKLQotLyoKLSAqIFJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIEJDU1JzCi0gKi8KLSNkZWZpbmUgQkNTUl9XSE9BTUlfRENJRAkweDAwMEYKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQ1BMRAkweDAwRjAKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMFZTCTB4MDAwMwotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUExVlMJMHgwMDBDCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NXQVBCT09UCTB4MDA0MAotI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSEJVU1kJMHgwMTAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0lERUNCTElECTB4MDIwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19TRDBXUAkweDA0MDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU0QxV1AJMHgwODAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UwUlhECTB4MTAwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMVJYRAkweDIwMDAKLQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX09DVEFMCTB4MDBGRgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8xCTB4MDA4MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8yCTB4MDA0MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8zCTB4MDAyMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF80CTB4MDAxMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF81CTB4MDAwOAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF82CTB4MDAwNAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF83CTB4MDAwMgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF84CTB4MDAwMQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX1JPVEFSWQkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1JFU0VUU19FVEgJCTB4MDAwMQotI2RlZmluZSBCQ1NSX1JFU0VUU19DQU1FUkEJMHgwMDAyCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkweDAwMDQKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSURFCQkweDAwMDgKLS8qIG5vdCByZXNldHMgYnV0IGluIHRoZSBzYW1lIHJlZ2lzdGVyICovCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1dTQ0ZTTQkweDA4MDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfUENTME1VWAkweDEwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfUENTMU1VWAkweDIwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfU1BJU0VMCTB4NDAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19TRDFNVVgJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVlBQCTB4MDAwMwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWQ0MJMHgwMDBDCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCTB4MDAxMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBSU1QJMHgwMDgwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZQUAkweDAzMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCTB4MEMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFEUlZFTgkweDEwMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxUlNUCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEVkVFCTB4MDAwMQotI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZERAkweDAwMDIKLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RCTAkweDAwMDQKLSNkZWZpbmUgQkNTUl9CT0FSRF9DQU1TTkFQCTB4MDAxMAotI2RlZmluZSBCQ1NSX0JPQVJEX0NBTVBXUgkweDAwMjAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDBQV1IJMHgwMDQwCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QxUFdSCTB4MDA4MAotCi0jZGVmaW5lIEJDU1JfTEVEU19ERUNJTUFMUwkweDAwRkYKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCTB4MDEwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMQkJMHgwMjAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQyCQkweDA0MDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCTB4MDgwMAogCiAjZGVmaW5lIEJDU1JfU1lTVEVNX1ZEREkJMHgwMDFGCiAjZGVmaW5lIEJDU1JfU1lTVEVNX1BPV0VST0ZGCTB4NDAwMApAQCAtMjM5LDIwICsxMzUsNiBAQAogCVBCMTIwMF9JTlRfRU5ECQk9IFBCMTIwMF9JTlRfQkVHSU4gKyAxNQogfTsKIAotLyoKLSAqIFBiMTIwMCBzcGVjaWZpYyBQQ01DSUEgZGVmaW5lcyBmb3IgZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jCi0gKi8KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAxCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFAsIFNMT1QpIFwKLQkoKCgoVkNDKSA8PCAyKSB8ICgoVlBQKSA8PCAwKSkgPDwgKChTTE9UKSAqIDgpKQotCi0jZGVmaW5lIEJPQVJEX1BDMF9JTlQJUEIxMjAwX1BDMF9JTlQKLSNkZWZpbmUgQk9BUkRfUEMxX0lOVAlQQjEyMDBfUEMxX0lOVAotI2RlZmluZSBCT0FSRF9DQVJEX0lOU0VSVEVEKFNPQ0tFVCkgYmNzci0+c2lnX3N0YXR1cyAmICgxIDw8ICg4ICsgKDIgKiBTT0NLRVQpKSkKLQogLyogTkFORCBjaGlwIHNlbGVjdCAqLwogI2RlZmluZSBOQU5EX0NTIDEKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTUwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTUwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTUxYTJlLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1MDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBBbGNoZW15IFNlbWkgUGIxNTAwIFJlZmVycmVuY2UgQm9hcmQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMSwgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+Ci0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICoKLSAqLwotI2lmbmRlZiBfX0FTTV9QQjE1MDBfSAotI2RlZmluZSBfX0FTTV9QQjE1MDBfSAotCi0jZGVmaW5lIElERU5UX0JPQVJEX1JFRyAJMHhBRTAwMDAwMAotI2RlZmluZSBCT0FSRF9TVEFUVVNfUkVHCTB4QUUwMDAwMDQKLSNkZWZpbmUgUENJX0JPQVJEX1JFRwkJMHhBRTAwMDAxMAotI2RlZmluZSBQQ01DSUFfQk9BUkRfUkVHCTB4QUUwMDAwMTAKLSMgIGRlZmluZSBQQ19ERUFTU0VSVF9SU1QJICAgICAgMHg4MAotIyAgZGVmaW5lIFBDX0RSVl9FTgkJICAgICAgMHgxMAotI2RlZmluZSBQQjE1MDBfR19DT05UUk9MCTB4QUUwMDAwMTQKLSNkZWZpbmUgUEIxNTAwX1JTVF9WRERJIAkweEFFMDAwMDFDCi0jZGVmaW5lIFBCMTUwMF9MRURTCQkweEFFMDAwMDE4Ci0KLSNkZWZpbmUgUEIxNTAwX0hFWF9MRUQJCTB4QUYwMDAwMDQKLSNkZWZpbmUgUEIxNTAwX0hFWF9MRURfQkxBTksJMHhBRjAwMDAwOAotCi0vKiBQQ01DSUEgUGIxNTAwIHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAwCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFApICgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpCi0KLSNlbmRpZiAvKiBfX0FTTV9QQjE1MDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oCmluZGV4IDY3MDRhMTEuLjU4Nzk2NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmgKQEAgLTQwLDEwMiArNDAsNiBAQAogI2RlZmluZSBTTUJVU19QU0NfQkFTRQkJUFNDMl9CQVNFX0FERFIKICNkZWZpbmUgSTJTX1BTQ19CQVNFCQlQU0MzX0JBU0VfQUREUgogCi0jZGVmaW5lIEJDU1JfUEhZU19BRERSIDB4QUYwMDAwMDAKLQotdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QKLXsKLQkvKjAwKi8JdTE2IHdob2FtaTsKLQkJdTE2IHJlc2VydmVkMDsKLQkvKjA0Ki8JdTE2IHN0YXR1czsKLQkJdTE2IHJlc2VydmVkMTsKLQkvKjA4Ki8JdTE2IHN3aXRjaGVzOwotCQl1MTYgcmVzZXJ2ZWQyOwotCS8qMEMqLwl1MTYgcmVzZXRzOwotCQl1MTYgcmVzZXJ2ZWQzOwotCS8qMTAqLwl1MTYgcGNtY2lhOwotCQl1MTYgcmVzZXJ2ZWQ0OwotCS8qMTQqLwl1MTYgcGNpOwotCQl1MTYgcmVzZXJ2ZWQ1OwotCS8qMTgqLwl1MTYgbGVkczsKLQkJdTE2IHJlc2VydmVkNjsKLQkvKjFDKi8JdTE2IHN5c3RlbTsKLQkJdTE2IHJlc2VydmVkNzsKLQotfSBCQ1NSOwotCi1zdGF0aWMgQkNTUiAqIGNvbnN0IGJjc3IgPSAoQkNTUiAqKUJDU1JfUEhZU19BRERSOwotCi0vKgotICogUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zIGZvciB0aGUgQkNTUnMKLSAqLwotI2RlZmluZSBCQ1NSX1dIT0FNSV9EQ0lECTB4MDAwRgotI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExECTB4MDBGMAotI2RlZmluZSBCQ1NSX1dIT0FNSV9CT0FSRAkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUEwVlMJMHgwMDAzCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTFWUwkweDAwMEMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMEZJCTB4MDAxMAotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUExRkkJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NXQVBCT09UCTB4MDA0MAotI2RlZmluZSBCQ1NSX1NUQVRVU19TUkFNV0lEVEgJMHgwMDgwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIQlVTWQkweDAxMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUk9NQlVTWQkweDAyMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVVNCT1RHSUQJMHgwODAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UwUlhECTB4MTAwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMVJYRAkweDIwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTNSWEQJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19PQ1RBTAkweDAwRkYKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkweDAwODAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkweDAwNDAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkweDAwMjAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkweDAwMTAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkweDAwMDgKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkweDAwMDQKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkweDAwMDIKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkweDAwMDEKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMAkweDAwMDEKLSNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMQkweDAwMDIKLSNkZWZpbmUgQkNTUl9SRVNFVFNfREMJCTB4MDAwNAotI2RlZmluZSBCQ1NSX1JFU0VUU19XU0MJCTB4MjAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19TUElTRUwJMHg0MDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0RNQVJFUQkweDgwMDAKLQotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWUFAJMHgwMDAzCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkweDAwMEMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwRFJWRU4JMHgwMDEwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFJTVAkweDAwODAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCTB4MDMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWQ0MJMHgwQzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMURSVkVOCTB4MTAwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9QQ0lfTTY2RU4JCTB4MDAwMQotI2RlZmluZSBCQ1NSX1BDSV9NMzMJCTB4MDEwMAotI2RlZmluZSBCQ1NSX1BDSV9FWFRFUk5BUkIJMHgwMjAwCi0jZGVmaW5lIEJDU1JfUENJX0dQSU8yMDBSU1QJMHgwNDAwCi0jZGVmaW5lIEJDU1JfUENJX0NMS09VVAkJMHgwODAwCi0jZGVmaW5lIEJDU1JfUENJX0NGR0hPU1QJMHgxMDAwCi0KLSNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCTB4MDBGRgotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMAkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQxCQkweDAyMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCTB4MDQwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMwkJMHgwODAwCi0KLSNkZWZpbmUgQkNTUl9TWVNURU1fVkRESQkweDAwMUYKLSNkZWZpbmUgQkNTUl9TWVNURU1fUE9XRVJPRkYJMHg0MDAwCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1JFU0VUCTB4ODAwMAotCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMQotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQLCBTTE9UKSBcCi0JKCgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpIDw8ICgoU0xPVCkgKiA4KSkKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfQk9PVCkgJiYgZGVmaW5lZChDT05GSUdfTVREX1BCMTU1MF9VU0VSKQogI2RlZmluZSBQQjE1NTBfQk9USF9CQU5LUwogI2VsaWYgZGVmaW5lZChDT05GSUdfTVREX1BCMTU1MF9CT09UKSAmJiAhZGVmaW5lZChDT05GSUdfTVREX1BCMTU1MF9VU0VSKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG54ODMzeC9pcnEtbWFwcGluZy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG54ODMzeC9pcnEtbWFwcGluZy5oCmluZGV4IDY1N2YwODkuLjZkNzAyNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDgzM3gvaXJxLW1hcHBpbmcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wbng4MzN4L2lycS1tYXBwaW5nLmgKQEAgLTEyMyw0ICsxMjMsMyBAQAogI2RlZmluZSBQTlg4MzNYX0dQSU9fMTVfSU5UCQkJKFBOWDgzM1hfR1BJT19JUlFfQkFTRSArIDE1KQogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2ludGVycnVwdHMuaAppbmRleCA2MjlhNTc0Li40ZmQ2NTJjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2ludGVycnVwdHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2ludGVycnVwdHMuaApAQCAtMjUxLDQgKzI1MSwzIEBACiAJCQkJCQkgKiBjaGFubmVsIDMuICovCiAjZGVmaW5lIGlycV9tcGVnX2QJCShpYmFzZSswKSAJLyogTVBFRyBEZWNvZGVyIEludGVycnVwdCAqLwogI2VuZGlmCS8qIF9BU01fTUFDSF9QT1dFUlRWX0lOVEVSUlVQVFNfSF8gKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaAppbmRleCBmNGFiMzEzLi40OTM4MmQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaApAQCAtMjUxLDYgKzI1MSwxNCBAQAogI2RlZmluZSBQTF8yNTZNCQkyOAogCiAvKgorICogUGFnZUdyYWluIGJpdHMKKyAqLworI2RlZmluZSBQR19SSUUJCShfVUxDQVNUXygxKSA8PCAgMzEpCisjZGVmaW5lIFBHX1hJRQkJKF9VTENBU1RfKDEpIDw8ICAzMCkKKyNkZWZpbmUgUEdfRUxQQQkJKF9VTENBU1RfKDEpIDw8ICAyOSkKKyNkZWZpbmUgUEdfRVNQCQkoX1VMQ0FTVF8oMSkgPDwgIDI4KQorCisvKgogICogUjR4MDAgaW50ZXJydXB0IGVuYWJsZSAvIGNhdXNlIGJpdHMKICAqLwogI2RlZmluZSBJRV9TVzAgICAgICAgICAgKF9VTENBU1RfKDEpIDw8ICA4KQpAQCAtNTc2LDYgKzU4NCwxMCBAQAogI2RlZmluZSBNSVBTX0NPTkYzX0RTUAkJKF9VTENBU1RfKDEpIDw8IDEwKQogI2RlZmluZSBNSVBTX0NPTkYzX1VMUkkJCShfVUxDQVNUXygxKSA8PCAxMykKIAorI2RlZmluZSBNSVBTX0NPTkY0X01NVVNJWkVFWFQJKF9VTENBU1RfKDI1NSkgPDwgMCkKKyNkZWZpbmUgTUlQU19DT05GNF9NTVVFWFRERUYJKF9VTENBU1RfKDMpIDw8IDE0KQorI2RlZmluZSBNSVBTX0NPTkY0X01NVUVYVERFRl9NTVVTSVpFRVhUIChfVUxDQVNUXygxKSA8PCAxNCkKKwogI2RlZmluZSBNSVBTX0NPTkY3X1dJSQkJKF9VTENBU1RfKDEpIDw8IDMxKQogCiAjZGVmaW5lIE1JUFNfQ09ORjdfUlBTCQkoX1VMQ0FTVF8oMSkgPDwgMikKQEAgLTgyNiw2ICs4MzgsOSBAQAogI2RlZmluZSByZWFkX2MwX3BhZ2VtYXNrKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ1LCAwKQogI2RlZmluZSB3cml0ZV9jMF9wYWdlbWFzayh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDUsIDAsIHZhbCkKIAorI2RlZmluZSByZWFkX2MwX3BhZ2VncmFpbigpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNSwgMSkKKyNkZWZpbmUgd3JpdGVfYzBfcGFnZWdyYWluKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkNSwgMSwgdmFsKQorCiAjZGVmaW5lIHJlYWRfYzBfd2lyZWQoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ2LCAwKQogI2RlZmluZSB3cml0ZV9jMF93aXJlZCh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDYsIDAsIHZhbCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbXNjMDFfaWMuaAppbmRleCA3OTg5YjlmLi5kOTI0MDZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbXNjMDFfaWMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbXNjMDFfaWMuaApAQCAtMTQ1LDQgKzE0NSwzIEBACiBleHRlcm4gdm9pZCBsbF9tc2NfaXJxKHZvaWQpOwogCiAjZW5kaWYgLyogX19BU01fTUlQU19CT0FSRFNfTVNDMDFfSUNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uaWxlNC5oCmluZGV4IGMzY2E5NTkuLmFmMGU1MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uaWxlNC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uaWxlNC5oCkBAIC0zMDcsNCArMzA3LDMgQEAKIGV4dGVybiB2b2lkIG5pbGU0X2R1bXBfaXJxX3N0YXR1cyh2b2lkKTsJLyogRGVidWcgKi8KIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLWZlYXR1cmUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLWZlYXR1cmUuaAppbmRleCBlZjI0YTdiLi5jYmE2ZmJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi1mZWF0dXJlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24tZmVhdHVyZS5oCkBAIC05OSw2ICs5OSw4IEBACiAJCXJldHVybiAhY3ZteF9mdXNlX3JlYWQoOTApOwogCiAJY2FzZSBPQ1RFT05fRkVBVFVSRV9QQ0lFOgorCWNhc2UgT0NURU9OX0ZFQVRVUkVfTUdNVF9QT1JUOgorCWNhc2UgT0NURU9OX0ZFQVRVUkVfUkFJRDoKIAkJcmV0dXJuIE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYKQogCQkJfHwgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjUyWFgpOwogCkBAIC0xMTAsMTIgKzExMiw2IEBACiAJY2FzZSBPQ1RFT05fRkVBVFVSRV9UUkE6CiAJCXJldHVybiAhKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ04zMFhYKQogCQkJIHx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MFhYKSk7Ci0JY2FzZSBPQ1RFT05fRkVBVFVSRV9NR01UX1BPUlQ6Ci0JCXJldHVybiBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkKLQkJCXx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYKTsKLQljYXNlIE9DVEVPTl9GRUFUVVJFX1JBSUQ6Ci0JCXJldHVybiBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkKLQkJCXx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYKTsKIAljYXNlIE9DVEVPTl9GRUFUVVJFX1VTQjoKIAkJcmV0dXJuICEoT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjM4WFgpCiAJCQkgfHwgT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU4WFgpKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oCmluZGV4IDRkMGE4YzYuLmNhNjIxNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaApAQCAtMjEzLDYgKzIxMywxMSBAQAogCWludAkJZG1hX2VuZ2luZTsJLyogLTEgZm9yIG5vIERNQSAqLwogfTsKIAorc3RydWN0IG9jdGVvbl9pMmNfZGF0YSB7CisJdW5zaWduZWQgaW50CXN5c19mcmVxOworCXVuc2lnbmVkIGludAlpMmNfZnJlcTsKK307CisKIGV4dGVybiB2b2lkIG9jdGVvbl93cml0ZV9sY2QoY29uc3QgY2hhciAqcyk7CiBleHRlcm4gdm9pZCBvY3Rlb25fY2hlY2tfY3B1X2Jpc3Qodm9pZCk7CiBleHRlcm4gaW50IG9jdGVvbl9nZXRfYm9vdF9kZWJ1Z19mbGFnKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggZjI2NjI5NS4uYWMzMjU3MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMDcsMTggKzEwNyw2IEBACiB0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7CiAKIC8qCi0gKiBGb3IgMy1sZXZlbCBwYWdldGFibGVzIHdlIGRlZmluZXMgdGhlc2Ugb3Vyc2VsdmVzLCBmb3IgMi1sZXZlbCB0aGUKLSAqIGRlZmluaXRpb25zIGFyZSBzdXBwbGllZCBieSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPi4KLSAqLwotI2lmZGVmIENPTkZJR182NEJJVAotCi10eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90OwotI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQotI2RlZmluZSBfX3BtZCh4KQkoKHBtZF90KSB7ICh4KSB9ICkKLQotI2VuZGlmCi0KLS8qCiAgKiBSaWdodCBub3cgd2UgZG9uJ3Qgc3VwcG9ydCA0LWxldmVsIHBhZ2V0YWJsZXMsIHNvIGFsbCBwdWQtcmVsYXRlZAogICogZGVmaW5pdGlvbnMgY29tZSBmcm9tIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+LgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJhbS5oCmluZGV4IDFkOWJiOGMuLmRhMzkyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJhbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJhbS5oCkBAIC05LDIzICs5LDggQEAKICNpZm5kZWYgX0FTTV9QQVJBTV9ICiAjZGVmaW5lIF9BU01fUEFSQU1fSAogCi0jaWZkZWYgX19LRVJORUxfXwotCi0jIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLSMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLwotIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLwotI2VuZGlmCi0KLSNpZm5kZWYgSFoKLSNkZWZpbmUgSFogMTAwCi0jZW5kaWYKLQogI2RlZmluZSBFWEVDX1BBR0VTSVpFCTY1NTM2CiAKLSNpZm5kZWYgTk9HUk9VUAotI2RlZmluZSBOT0dST1VQCQkoLTEpCi0jZW5kaWYKLQotI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFyYW0uaD4KIAogI2VuZGlmIC8qIF9BU01fUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcnBvcnQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKaW5kZXggZjUyNjU2OC4uY2YyNTJhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcnBvcnQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFycG9ydC5oCkBAIC0xLDE1ICsxIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBUaW0gV2F1Z2ggPHRpbUBjeWJlcmVsay5kZW1vbi5jby51az4KLSAqCi0gKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYy4KLSAqLwotI2lmbmRlZiBfQVNNX1BBUlBPUlRfSAotI2RlZmluZSBfQVNNX1BBUlBPUlRfSAotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfaXNhX3BvcnRzKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSk7Ci1zdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3BjX2ZpbmRfbm9ucGNpX3BvcnRzKGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKLXsKLQlyZXR1cm4gcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyhhdXRvaXJxLCBhdXRvZG1hKTsKLX0KLQotI2VuZGlmIC8qIF9BU01fUEFSUE9SVF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFycG9ydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggMzczOGY0YjQuLjg4MWQxOGI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTMxLDcgKzMxLDcgQEAKICAqLwogZXh0ZXJuIHZvaWQgcG1kX2luaXQodW5zaWduZWQgbG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIHBhZ2V0YWJsZSk7CiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKQogewpAQCAtMTA0LDcgKzEwNCw3IEBACiAJdGxiX3JlbW92ZV9wYWdlKCh0bGIpLCBwdGUpOwkJCVwKIH0gd2hpbGUgKDApCiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCiBzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS0zMi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtMzIuaAppbmRleCA1NTgxM2Q2Li5hZTkwNDEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS0zMi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmgKQEAgLTEyNyw4ICsxMjcsOCBAQAogI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gKFBBR0VfU0hJRlQgKyAyKSkpCiAjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgKFBBR0VfU0hJRlQgKyAyKSkgfCBwZ3Byb3RfdmFsKHByb3QpKQogI2Vsc2UKLSNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoeCkucHRlID4+IFBBR0VfU0hJRlQpKQotI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKCh1bnNpZ25lZCBsb25nIGxvbmcpKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gX1BGTl9TSElGVCkpCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHVuc2lnbmVkIGxvbmcgbG9uZykocGZuKSA8PCBfUEZOX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCiAjZW5kaWYKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS02NC5oCmluZGV4IDhlZGEzMGIuLjI2ZGM2OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaApAQCAtMTYsNyArMTYsMTEgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVjdGwuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKKyNpZmRlZiBDT05GSUdfUEFHRV9TSVpFXzY0S0IKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+CisjZWxzZQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKyNlbmRpZgogCiAvKgogICogRWFjaCBhZGRyZXNzIHNwYWNlIGhhcyAyIDRLIHBhZ2VzIGFzIGl0cyBwYWdlIGRpcmVjdG9yeSwgZ2l2aW5nIDEwMjQKQEAgLTM3LDEzICs0MSwyMCBAQAogICogZmF1bHQgYWRkcmVzcyAtIFZNQUxMT0NfU1RBUlQuCiAgKi8KIAorCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNpZmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisjZGVmaW5lIFBHRElSX1NISUZUCShQQUdFX1NISUZUICsgUEFHRV9TSElGVCArIFBURV9PUkRFUiAtIDMpCisjZWxzZQorCiAvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgYXJlYSBhIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlIGNhbiBtYXAgKi8KICNkZWZpbmUgUE1EX1NISUZUCShQQUdFX1NISUZUICsgKFBBR0VfU0hJRlQgKyBQVEVfT1JERVIgLSAzKSkKICNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCiAjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQogCi0vKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKwogI2RlZmluZSBQR0RJUl9TSElGVAkoUE1EX1NISUZUICsgKFBBR0VfU0hJRlQgKyBQTURfT1JERVIgLSAzKSkKKyNlbmRpZgogI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCiAjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKIApAQCAtOTIsMTIgKzEwMywxNCBAQAogI2lmZGVmIENPTkZJR19QQUdFX1NJWkVfNjRLQgogI2RlZmluZSBQR0RfT1JERVIJCTAKICNkZWZpbmUgUFVEX09SREVSCQlhaWVlZWVfYXR0ZW1wdF90b19hbGxvY2F0ZV9wdWQKLSNkZWZpbmUgUE1EX09SREVSCQkwCisjZGVmaW5lIFBNRF9PUkRFUgkJYWllZWVlX2F0dGVtcHRfdG9fYWxsb2NhdGVfcG1kCiAjZGVmaW5lIFBURV9PUkRFUgkJMAogI2VuZGlmCiAKICNkZWZpbmUgUFRSU19QRVJfUEdECSgoUEFHRV9TSVpFIDw8IFBHRF9PUkRFUikgLyBzaXplb2YocGdkX3QpKQorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAjZGVmaW5lIFBUUlNfUEVSX1BNRAkoKFBBR0VfU0laRSA8PCBQTURfT1JERVIpIC8gc2l6ZW9mKHBtZF90KSkKKyNlbmRpZgogI2RlZmluZSBQVFJTX1BFUl9QVEUJKChQQUdFX1NJWkUgPDwgUFRFX09SREVSKSAvIHNpemVvZihwdGVfdCkpCiAKICNpZiBQR0RJUl9TSVpFID49IFRBU0tfU0laRQpAQCAtMTIyLDE1ICsxMzUsMzAgQEAKIAogI2RlZmluZSBwdGVfRVJST1IoZSkgXAogCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTAxNmx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAjZGVmaW5lIHBtZF9FUlJPUihlKSBcCiAJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBtZF92YWwoZSkpCisjZW5kaWYKICNkZWZpbmUgcGdkX0VSUk9SKGUpIFwKIAlwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcGdkX3ZhbChlKSkKIAogZXh0ZXJuIHB0ZV90IGludmFsaWRfcHRlX3RhYmxlW1BUUlNfUEVSX1BURV07CiBleHRlcm4gcHRlX3QgZW1wdHlfYmFkX3BhZ2VfdGFibGVbUFRSU19QRVJfUFRFXTsKKworCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKy8qCisgKiBGb3IgMy1sZXZlbCBwYWdldGFibGVzIHdlIGRlZmluZXMgdGhlc2Ugb3Vyc2VsdmVzLCBmb3IgMi1sZXZlbCB0aGUKKyAqIGRlZmluaXRpb25zIGFyZSBzdXBwbGllZCBieSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKKyNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnBtZCkKKyNkZWZpbmUgX19wbWQoeCkJKChwbWRfdCkgeyAoeCkgfSApCisKKwogZXh0ZXJuIHBtZF90IGludmFsaWRfcG1kX3RhYmxlW1BUUlNfUEVSX1BNRF07CiBleHRlcm4gcG1kX3QgZW1wdHlfYmFkX3BtZF90YWJsZVtQVFJTX1BFUl9QTURdOworI2VuZGlmCiAKIC8qCiAgKiBFbXB0eSBwZ2QvcG1kIGVudHJpZXMgcG9pbnQgdG8gdGhlIGludmFsaWRfcHRlX3RhYmxlLgpAQCAtMTUxLDYgKzE3OSw3IEBACiB7CiAJcG1kX3ZhbCgqcG1kcCkgPSAoKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlKTsKIH0KKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCiAvKgogICogRW1wdHkgcHVkIGVudHJpZXMgcG9pbnQgdG8gdGhlIGludmFsaWRfcG1kX3RhYmxlLgpAQCAtMTc0LDYgKzIwMyw3IEBACiB7CiAJcHVkX3ZhbCgqcHVkcCkgPSAoKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlKTsKIH0KKyNlbmRpZgogCiAjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQogCkBAIC0xODEsOCArMjExLDggQEAKICNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoeCkucHRlID4+IChQQUdFX1NISUZUICsgMikpKQogI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IChQQUdFX1NISUZUICsgMikpIHwgcGdwcm90X3ZhbChwcm90KSkKICNlbHNlCi0jZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiBQQUdFX1NISUZUKSkKLSNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiBfUEZOX1NISUZUKSkKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCBfUEZOX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCiAjZW5kaWYKIAogI2RlZmluZSBfX3BnZF9vZmZzZXQoYWRkcmVzcykJcGdkX2luZGV4KGFkZHJlc3MpCkBAIC0xOTgsNiArMjI4LDcgQEAKIC8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLwogI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKQkoKG1tKS0+cGdkICsgcGdkX2luZGV4KGFkZHIpKQogCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdWRfcGFnZV92YWRkcihwdWRfdCBwdWQpCiB7CiAJcmV0dXJuIHB1ZF92YWwocHVkKTsKQEAgLTIxMCw2ICsyNDEsNyBAQAogewogCXJldHVybiAocG1kX3QgKikgcHVkX3BhZ2VfdmFkZHIoKnB1ZCkgKyBwbWRfaW5kZXgoYWRkcmVzcyk7CiB9CisjZW5kaWYKIAogLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCiAjZGVmaW5lIF9fcHRlX29mZnNldChhZGRyZXNzKQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaAppbmRleCAxMDczZTZkLi5lOWZlN2U5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCkBAIC01MCw3ICs1MCw3IEBACiAjZGVmaW5lIF9DQUNIRV9TSElGVCAgICAgICAgICAgICAgICAzCiAjZGVmaW5lIF9DQUNIRV9NQVNLICAgICAgICAgICAgICAgICAoNzw8MykKIAotI2Vsc2UKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9SMzAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1RYMzlYWCkKIAogI2RlZmluZSBfUEFHRV9QUkVTRU5UICAgICAgICAgICAgICAgKDE8PDApICAvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLwogI2RlZmluZSBfUEFHRV9SRUFEICAgICAgICAgICAgICAgICAgKDE8PDEpICAvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLwpAQCAtNTksOCArNTksNiBAQAogI2RlZmluZSBfUEFHRV9NT0RJRklFRCAgICAgICAgICAgICAgKDE8PDQpICAvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLwogI2RlZmluZSBfUEFHRV9GSUxFICAgICAgICAgICAgICAgICAgKDE8PDQpICAvKiBzZXQ6cGFnZWNhY2hlIHVuc2V0OnN3YXAgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9SMzAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1RYMzlYWCkKLQogI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgICAgICAgICAgKDE8PDgpCiAjZGVmaW5lIF9QQUdFX1ZBTElEICAgICAgICAgICAgICAgICAoMTw8OSkKICNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICAgICAgICAgICgxPDw5KSAgLyogc3lub255bSAgICAgICAgICAgICAgICAgKi8KQEAgLTY5LDIxICs2NywxMTMgQEAKICNkZWZpbmUgX0NBQ0hFX1VOQ0FDSEVEICAgICAgICAgICAgICgxPDwxMSkKICNkZWZpbmUgX0NBQ0hFX01BU0sgICAgICAgICAgICAgICAgICgxPDwxMSkKIAorI2Vsc2UgLyogJ05vcm1hbCcgcjRLIGNhc2UgKi8KKy8qCisgKiBXaGVuIHVzaW5nIHRoZSBSSS9YSSBiaXQgc3VwcG9ydCwgd2UgaGF2ZSAxMyBiaXRzIG9mIGZsYWdzIGJlbG93CisgKiB0aGUgcGh5c2ljYWwgYWRkcmVzcy4gVGhlIFJJL1hJIGJpdHMgYXJlIHBsYWNlZCBzdWNoIHRoYXQgYSBTUkwgNQorICogY2FuIHN0cmlwIG9mZiB0aGUgc29mdHdhcmUgYml0cywgdGhlbiBhIFJPVFIgMiBjYW4gbW92ZSB0aGUgUkkvWEkKKyAqIGludG8gYml0cyBbNjM6NjJdLiBUaGlzIGFsc28gbGltaXRzIHBoeXNpY2FsIGFkZHJlc3MgdG8gNTYgYml0cywKKyAqIHdoaWNoIGlzIG1vcmUgdGhhbiB3ZSBuZWVkIHJpZ2h0IG5vdy4KKyAqLworCisvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UX1NISUZUCSgwKQorI2RlZmluZSBfUEFHRV9QUkVTRU5UCQkoMSA8PCBfUEFHRV9QUkVTRU5UX1NISUZUKQorLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUsIHNob3VsZCBiZSB1bnVzZWQgaWYga2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkuICovCisjZGVmaW5lIF9QQUdFX1JFQURfU0hJRlQJKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gX1BBR0VfUFJFU0VOVF9TSElGVCA6IF9QQUdFX1BSRVNFTlRfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9SRUFEICh7aWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSBCVUcoKTsgMSA8PCBfUEFHRV9SRUFEX1NISUZUOyB9KQorLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVfU0hJRlQJKF9QQUdFX1JFQURfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9XUklURQkJKDEgPDwgX1BBR0VfV1JJVEVfU0hJRlQpCisvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRF9TSElGVAkoX1BBR0VfV1JJVEVfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkJKDEgPDwgX1BBR0VfQUNDRVNTRURfU0hJRlQpCisvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLworI2RlZmluZSBfUEFHRV9NT0RJRklFRF9TSElGVAkoX1BBR0VfQUNDRVNTRURfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9NT0RJRklFRAkJKDEgPDwgX1BBR0VfTU9ESUZJRURfU0hJRlQpCisvKiBzZXQ6cGFnZWNhY2hlIHVuc2V0OnN3YXAgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkJKF9QQUdFX01PRElGSUVEKQorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorLyogaHVnZSB0bGIgcGFnZSAqLworI2RlZmluZSBfUEFHRV9IVUdFX1NISUZUCShfUEFHRV9NT0RJRklFRF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX0hVR0UJCSgxIDw8IF9QQUdFX0hVR0VfU0hJRlQpCiAjZWxzZQotCi0jZGVmaW5lIF9QQUdFX1I0S0JVRyAgICAgICAgICAgICAgICAoMTw8NSkgIC8qIHdvcmthcm91bmQgZm9yIHI0ayBidWcgICovCi0jZGVmaW5lIF9QQUdFX0hVR0UgICAgICAgICAgICAgICAgICAoMTw8NSkgIC8qIGh1Z2UgdGxiIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfR0xPQkFMICAgICAgICAgICAgICAgICgxPDw2KQotI2RlZmluZSBfUEFHRV9WQUxJRCAgICAgICAgICAgICAgICAgKDE8PDcpCi0jZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFEICAgICAgICAgICAoMTw8NykgIC8qIHN5bm9ueW0gICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZICAgICAgICAgICAgICAgICAoMTw8OCkgIC8qIFRoZSBNSVBTIGRpcnR5IGJpdCAgICAgICovCi0jZGVmaW5lIF9QQUdFX1NJTEVOVF9XUklURSAgICAgICAgICAoMTw8OCkKLSNkZWZpbmUgX0NBQ0hFX1NISUZUCQkgICAgOQotI2RlZmluZSBfQ0FDSEVfTUFTSyAgICAgICAgICAgICAgICAgKDc8PDkpCi0KKyNkZWZpbmUgX1BBR0VfSFVHRV9TSElGVAkoX1BBR0VfTU9ESUZJRURfU0hJRlQpCisjZGVmaW5lIF9QQUdFX0hVR0UJCSh7QlVHKCk7IDE7IH0pICAvKiBEdW1teSB2YWx1ZSAqLwogI2VuZGlmCisKKy8qIFBhZ2UgY2Fubm90IGJlIGV4ZWN1dGVkICovCisjZGVmaW5lIF9QQUdFX05PX0VYRUNfU0hJRlQJKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gX1BBR0VfSFVHRV9TSElGVCArIDEgOiBfUEFHRV9IVUdFX1NISUZUKQorI2RlZmluZSBfUEFHRV9OT19FWEVDCQkoe2lmICgha2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIEJVRygpOyAxIDw8IF9QQUdFX05PX0VYRUNfU0hJRlQ7IH0pCisKKy8qIFBhZ2UgY2Fubm90IGJlIHJlYWQgKi8KKyNkZWZpbmUgX1BBR0VfTk9fUkVBRF9TSElGVAkoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyBfUEFHRV9OT19FWEVDX1NISUZUICsgMSA6IF9QQUdFX05PX0VYRUNfU0hJRlQpCisjZGVmaW5lIF9QQUdFX05PX1JFQUQJCSh7aWYgKCFrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgQlVHKCk7IDEgPDwgX1BBR0VfTk9fUkVBRF9TSElGVDsgfSkKKworI2RlZmluZSBfUEFHRV9HTE9CQUxfU0hJRlQJKF9QQUdFX05PX1JFQURfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9HTE9CQUwJCSgxIDw8IF9QQUdFX0dMT0JBTF9TSElGVCkKKworI2RlZmluZSBfUEFHRV9WQUxJRF9TSElGVAkoX1BBR0VfR0xPQkFMX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfVkFMSUQJCSgxIDw8IF9QQUdFX1ZBTElEX1NISUZUKQorLyogc3lub255bSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQJKF9QQUdFX1ZBTElEKQorCisvKiBUaGUgTUlQUyBkaXJ0eSBiaXQgICAgICAqLworI2RlZmluZSBfUEFHRV9ESVJUWV9TSElGVAkoX1BBR0VfVkFMSURfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9ESVJUWQkJKDEgPDwgX1BBR0VfRElSVFlfU0hJRlQpCisjZGVmaW5lIF9QQUdFX1NJTEVOVF9XUklURQkoX1BBR0VfRElSVFkpCisKKyNkZWZpbmUgX0NBQ0hFX1NISUZUCQkoX1BBR0VfRElSVFlfU0hJRlQgKyAxKQorI2RlZmluZSBfQ0FDSEVfTUFTSwkJKDcgPDwgX0NBQ0hFX1NISUZUKQorCisjZGVmaW5lIF9QRk5fU0hJRlQJCShQQUdFX1NISUZUIC0gMTIgKyBfQ0FDSEVfU0hJRlQgKyAzKQorCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpICovCiAKKyNpZm5kZWYgX1BGTl9TSElGVAorI2RlZmluZSBfUEZOX1NISUZUICAgICAgICAgICAgICAgICAgUEFHRV9TSElGVAorI2VuZGlmCisjZGVmaW5lIF9QRk5fTUFTSwkJKH4oKDEgPDwgKF9QRk5fU0hJRlQpKSAtIDEpKQorCisjaWZuZGVmIF9QQUdFX05PX1JFQUQKKyNkZWZpbmUgX1BBR0VfTk9fUkVBRCAoe0JVRygpOyAwOyB9KQorI2RlZmluZSBfUEFHRV9OT19SRUFEX1NISUZUICh7QlVHKCk7IDA7IH0pCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfTk9fRVhFQworI2RlZmluZSBfUEFHRV9OT19FWEVDICh7QlVHKCk7IDA7IH0pCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfR0xPQkFMX1NISUZUCisjZGVmaW5lIF9QQUdFX0dMT0JBTF9TSElGVCBpbG9nMihfUEFHRV9HTE9CQUwpCisjZW5kaWYKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyoKKyAqIHB0ZV90b19lbnRyeWxvIGNvbnZlcnRzIGEgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBpbnRvIGEgTWlwcworICogZW50cnlsbzAvMSB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSB1aW50NjRfdCBwdGVfdG9fZW50cnlsbyh1bnNpZ25lZCBsb25nIHB0ZV92YWwpCit7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCWludCBzYTsKKyNpZmRlZiBDT05GSUdfMzJCSVQKKwkJc2EgPSAzMSAtIF9QQUdFX05PX1JFQURfU0hJRlQ7CisjZWxzZQorCQlzYSA9IDYzIC0gX1BBR0VfTk9fUkVBRF9TSElGVDsKKyNlbmRpZgorCQkvKgorCQkgKiBDIGhhcyBubyB3YXkgdG8gZXhwcmVzcyB0aGF0IHRoaXMgaXMgYSBEU1JMCisJCSAqIF9QQUdFX05PX0VYRUNfU0hJRlQgZm9sbG93ZWQgYnkgYSBST1RSIDIuICBMdWNraWx5CisJCSAqIGluIHRoZSBmYXN0IHBhdGggdGhpcyBpcyBkb25lIGluIGFzc2VtYmx5CisJCSAqLworCQlyZXR1cm4gKHB0ZV92YWwgPj4gX1BBR0VfR0xPQkFMX1NISUZUKSB8CisJCQkoKHB0ZV92YWwgJiAoX1BBR0VfTk9fRVhFQyB8IF9QQUdFX05PX1JFQUQpKSA8PCBzYSk7CisJfQorCisJcmV0dXJuIHB0ZV92YWwgPj4gX1BBR0VfR0xPQkFMX1NISUZUOworfQorI2VuZGlmCiAKIC8qCiAgKiBDYWNoZSBhdHRyaWJ1dGVzCkBAIC0xMzAsOSArMjIwLDkgQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgX19SRUFEQUJMRQkoX1BBR0VfUkVBRCB8IF9QQUdFX1NJTEVOVF9SRUFEIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIF9fUkVBREFCTEUJKF9QQUdFX1NJTEVOVF9SRUFEIHwgX1BBR0VfQUNDRVNTRUQgfCAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAwIDogX1BBR0VfUkVBRCkpCiAjZGVmaW5lIF9fV1JJVEVBQkxFCShfUEFHRV9XUklURSB8IF9QQUdFX1NJTEVOVF9XUklURSB8IF9QQUdFX01PRElGSUVEKQogCi0jZGVmaW5lIF9QQUdFX0NIR19NQVNLICAoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9NT0RJRklFRCB8IF9DQUNIRV9NQVNLKQorI2RlZmluZSBfUEFHRV9DSEdfTUFTSyAgKF9QRk5fTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTU9ESUZJRUQgfCBfQ0FDSEVfTUFTSykKIAogI2VuZGlmIC8qIF9BU01fUEdUQUJMRV9CSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDE4NTQzMzYuLjkzNTk4YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjIsMjMgKzIyLDI0IEBACiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiAKICNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfQ0FDSEVfQ0FDSEFCTEVfTk9OQ09IRVJFTlQpCi0jZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCBcCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9XUklURSB8IChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IDAgOiBfUEFHRV9SRUFEKSB8IFwKIAkJCQkgX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCkKLSNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgXAotCQkJCSBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQotI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgXAorI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IDAgOiBfUEFHRV9SRUFEKSB8IFwKKwkJCQkgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gIF9QQUdFX05PX0VYRUMgOiAwKSB8IF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IDAgOiBfUEFHRV9SRUFEKSB8IFwKIAkJCQkgX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCkKICNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9fUkVBREFCTEUgfCBfX1dSSVRFQUJMRSB8IFwKIAkJCQkgX1BBR0VfR0xPQkFMIHwgX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCkKLSNkZWZpbmUgUEFHRV9VU0VSSU8JX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSB8IFwKKyNkZWZpbmUgUEFHRV9VU0VSSU8JX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IDAgOiBfUEFHRV9SRUFEKSB8IF9QQUdFX1dSSVRFIHwgXAogCQkJCSBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQogI2RlZmluZSBQQUdFX0tFUk5FTF9VTkNBQ0hFRCBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX19SRUFEQUJMRSB8IFwKIAkJCV9fV1JJVEVBQkxFIHwgX1BBR0VfR0xPQkFMIHwgX0NBQ0hFX1VOQ0FDSEVEKQogCiAvKgotICogTUlQUyBjYW4ndCBkbyBwYWdlIHByb3RlY3Rpb24gZm9yIGV4ZWN1dGUsIGFuZCBjb25zaWRlcnMgdGhhdCB0aGUgc2FtZSBsaWtlCi0gKiByZWFkLiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLiBUaGlzIGlzIHRoZSBjbG9zZXN0Ci0gKiB3ZSBjYW4gZ2V0IGJ5IHJlYXNvbmFibGUgbWVhbnMuLgorICogSWYgX1BBR0VfTk9fRVhFQyBpcyBub3QgZGVmaW5lZCwgd2UgY2FuJ3QgZG8gcGFnZSBwcm90ZWN0aW9uIGZvcgorICogZXhlY3V0ZSwgYW5kIGNvbnNpZGVyIGl0IHRvIGJlIHRoZSBzYW1lIGFzIHJlYWQuIEFsc28sIHdyaXRlCisgKiBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLiBUaGlzIGlzIHRoZSBjbG9zZXN0IHdlIGNhbiBnZXQKKyAqIGJ5IHJlYXNvbmFibGUgbWVhbnMuLgogICovCiAKIC8qCkBAIC0xNzcsNyArMTc4LDcgQEAKICAqLwogI2RlZmluZSBzZXRfcG1kKHBtZHB0ciwgcG1kdmFsKSBkbyB7ICoocG1kcHRyKSA9IChwbWR2YWwpOyB9IHdoaWxlKDApCiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogLyoKICAqIChwdWRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLAogICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLikKQEAgLTI5OCw4ICsyOTksMTMgQEAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQogewogCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9BQ0NFU1NFRDsKLQlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0VfUkVBRCkKLQkJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQlpZiAoIShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9OT19SRUFEKSkKKwkJCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKwl9IGVsc2UgeworCQlpZiAocHRlX3ZhbChwdGUpICYgX1BBR0VfUkVBRCkKKwkJCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TSUxFTlRfUkVBRDsKKwl9CiAJcmV0dXJuIHB0ZTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5oCmluZGV4IDE0Y2E3ZGMuLjU0ZWYxYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmgKQEAgLTExOCw3ICsxMTgsNiBAQAogI2RlZmluZSBaU1BfRFVFVAkJJ0QnCS8qIG9uZSBEVUVUIHpzcCBlbmdpbmUgKi8KICNkZWZpbmUgWlNQX1RSSUFECQknVCcJLyogdHdvIFRSSUFEIHpzcCBlbmdpbmVzICovCiAKLWV4dGVybiBjaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCk7CiBleHRlcm4gY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKIGV4dGVybiB2b2lkIHByb21fbWVtaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXJpYWwuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXJpYWwuaAppbmRleCBjMDdlYmQ4Li5hMGNiMGNhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlcmlhbC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXJpYWwuaApAQCAtMSwyMiArMSBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBieSBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKi8KLSNpZm5kZWYgX0FTTV9TRVJJQUxfSAotI2RlZmluZSBfQVNNX1NFUklBTF9ICi0KLQotLyoKLSAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KLSAqCi0gKiBJdCdkIGJlIG5pY2UgaWYgc29tZW9uZSBidWlsdCBhIHNlcmlhbCBjYXJkIHdpdGggYSAyNC41NzYgTUh6Ci0gKiBjbG9jaywgc2luY2UgdGhlIDE2NTUwQSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIGEgdG9wIHNwZWVkIG9mIDEuNQotICogbWVnYWJpdHMvc2Vjb25kOyBidXQgdGhpcyByZXF1aXJlcyB0aGUgZmFzdGVyIGNsb2NrLgotICovCi0jZGVmaW5lIEJBU0VfQkFVRCAoMTg0MzIwMCAvIDE2KQotCi0jZW5kaWYgLyogX0FTTV9TRVJJQUxfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhbGliLmgKaW5kZXggNjM3NDFjYS4uMmEyZjFiZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oCkBAIC0zMywxNCArMzMsNiBAQAogZXh0ZXJuIHZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgYyk7CiBleHRlcm4gY2hhciBwcm9tX2dldGNoYXIodm9pZCk7CiAKLS8qIE1lbW9yeSBkZXNjcmlwdG9yIG1hbmFnZW1lbnQuICovCi0jZGVmaW5lIFBST01fTUFYX1BNRU1CTE9DS1MgICAgMzIKLXN0cnVjdCBwcm9tX3BtZW1ibG9jayB7Ci0JTE9ORwliYXNlOwkJLyogV2l0aGluIEtTRUcwIG9yIFhLUEhZUy4gKi8KLQlVTE9ORwlzaXplOwkJLyogSW4gYnl0ZXMuICovCi0JVUxPTkcJdHlwZTsJCS8qIGZyZWUgb3IgcHJvbSBtZW1vcnkgKi8KLX07Ci0KIC8qIEdldCBuZXh0IG1lbW9yeSBkZXNjcmlwdG9yIGFmdGVyIENVUlIsIHJldHVybnMgZmlyc3QgZGVzY3JpcHRvcgogICogaW4gY2hhaW4gaXMgQ1VSUiBpcyBOVUxMLgogICovCkBAIC01MSw3ICs0Myw2IEBACiAgKiBhcnJheS4KICAqLwogZXh0ZXJuIHZvaWQgcHJvbV9tZW1pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgcHJvbV9maXh1cF9tZW1fbWFwKHVuc2lnbmVkIGxvbmcgc3RhcnRfbWVtLCB1bnNpZ25lZCBsb25nIGVuZF9tZW0pOwogCiAvKiBQUk9NIGRldmljZSB0cmVlIGxpYnJhcnkgcm91dGluZXMuICovCiAjZGVmaW5lIFBST01fTlVMTF9DT01QT05FTlQgKChwY29tcG9uZW50ICopIDApCkBAIC02MiwyMCArNTMsNiBAQAogLyogR2V0IGNoaWxkIGNvbXBvbmVudCBvZiBUSElTLiAqLwogZXh0ZXJuIHBjb21wb25lbnQgKkFyY0dldENoaWxkKHBjb21wb25lbnQgKnRoaXMpOwogCi0vKiBHZXQgcGFyZW50IGNvbXBvbmVudCBvZiBDSElMRC4gKi8KLWV4dGVybiBwY29tcG9uZW50ICpwcm9tX2dldHBhcmVudChwY29tcG9uZW50ICpjaGlsZCk7Ci0KLS8qIENvcHkgY29tcG9uZW50IG9wYXF1ZSBkYXRhIG9mIGNvbXBvbmVudCBUSElTIGludG8gQlVGRkVSCi0gKiBpZiBjb21wb25lbnQgVEhJUyBoYXMgb3BhcXVlIGRhdGEuICBSZXR1cm5zIHN1Y2Nlc3Mgb3IKLSAqIGZhaWx1cmUgc3RhdHVzLgotICovCi1leHRlcm4gbG9uZyBwcm9tX2dldGNkYXRhKHZvaWQgKmJ1ZmZlciwgcGNvbXBvbmVudCAqdGhpcyk7Ci0KLS8qIE90aGVyIG1pc2MuIGNvbXBvbmVudCByb3V0aW5lcy4gKi8KLWV4dGVybiBwY29tcG9uZW50ICpwcm9tX2NoaWxkYWRkKHBjb21wb25lbnQgKnRoaXMsIHBjb21wb25lbnQgKnRtcCwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gbG9uZyBwcm9tX2RlbGNvbXBvbmVudChwY29tcG9uZW50ICp0aGlzKTsKLWV4dGVybiBwY29tcG9uZW50ICpwcm9tX2NvbXBvbmVudGJ5cGF0aChjaGFyICpwYXRoKTsKLQogLyogVGhpcyBpcyBjYWxsZWQgYXQgcHJvbV9pbml0IHRpbWUgdG8gaWRlbnRpZnkgdGhlCiAgKiBBUkMgYXJjaGl0ZWN0dXJlIHdlIGFyZSBydW5uaW5nIG9uCiAgKi8KQEAgLTg4LDM1ICs2NSwxMyBAQAogLyogQVJDUyBjb21tYW5kIGxpbmUgcGFyc2luZy4gKi8KIGV4dGVybiB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpOwogCi0vKiBBY3F1aXJpbmcgaW5mbyBhYm91dCB0aGUgY3VycmVudCB0aW1lLCBldGMuICovCi1leHRlcm4gc3RydWN0IGxpbnV4X3RpbmZvICpwcm9tX2dldHRpbmZvKHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9nZXRydGltZSh2b2lkKTsKLQogLyogRmlsZSBvcGVyYXRpb25zLiAqLwotZXh0ZXJuIGxvbmcgcHJvbV9nZXR2ZGlyZW50KHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF92ZGlyZW50ICplbnQsIHVuc2lnbmVkIGxvbmcgbnVtLCB1bnNpZ25lZCBsb25nICpjbnQpOwotZXh0ZXJuIGxvbmcgcHJvbV9vcGVuKGNoYXIgKm5hbWUsIGVudW0gbGludXhfb21vZGUgbWQsIHVuc2lnbmVkIGxvbmcgKmZkKTsKLWV4dGVybiBsb25nIHByb21fY2xvc2UodW5zaWduZWQgbG9uZyBmZCk7CiBleHRlcm4gTE9ORyBBcmNSZWFkKFVMT05HIGZkLCBQVk9JRCBidWYsIFVMT05HIG51bSwgUFVMT05HIGNudCk7Ci1leHRlcm4gbG9uZyBwcm9tX2dldHJzdGF0dXModW5zaWduZWQgbG9uZyBmZCk7CiBleHRlcm4gTE9ORyBBcmNXcml0ZShVTE9ORyBmZCwgUFZPSUQgYnVmLCBVTE9ORyBudW0sIFBVTE9ORyBjbnQpOwotZXh0ZXJuIGxvbmcgcHJvbV9zZWVrKHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF9iaWdpbnQgKm9mZiwgZW51bSBsaW51eF9zZWVrbW9kZSBzbSk7Ci1leHRlcm4gbG9uZyBwcm9tX21vdW50KGNoYXIgKm5hbWUsIGVudW0gbGludXhfbW91bnRvcHMgb3ApOwotZXh0ZXJuIGxvbmcgcHJvbV9nZXRmaW5mbyh1bnNpZ25lZCBsb25nIGZkLCBzdHJ1Y3QgbGludXhfZmluZm8gKmJ1Zik7Ci1leHRlcm4gbG9uZyBwcm9tX3NldGZpbmZvKHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbXNrKTsKLQotLyogUnVubmluZyBzdGFuZC1hbG9uZyBwcm9ncmFtcy4gKi8KLWV4dGVybiBsb25nIHByb21fbG9hZChjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqcGMsIHVuc2lnbmVkIGxvbmcgKmVhZGRyKTsKLWV4dGVybiBsb25nIHByb21faW52b2tlKHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgc3AsIGxvbmcgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKTsKLWV4dGVybiBsb25nIHByb21fZXhlYyhjaGFyICpuYW1lLCBsb25nIGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCk7CiAKIC8qIE1pc2MuIHJvdXRpbmVzLiAqLwotZXh0ZXJuIFZPSUQgcHJvbV9oYWx0KFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci1leHRlcm4gVk9JRCBwcm9tX3Bvd2VyZG93bihWT0lEKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwotZXh0ZXJuIFZPSUQgcHJvbV9yZXN0YXJ0KFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiBleHRlcm4gVk9JRCBBcmNSZWJvb3QoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKIGV4dGVybiBWT0lEIEFyY0VudGVySW50ZXJhY3RpdmVNb2RlKFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci1leHRlcm4gbG9uZyBwcm9tX2NmZ3NhdmUoVk9JRCk7Ci1leHRlcm4gc3RydWN0IGxpbnV4X3N5c2lkICpwcm9tX2dldHN5c2lkKFZPSUQpOwogZXh0ZXJuIFZPSUQgQXJjRmx1c2hBbGxDYWNoZXMoVk9JRCk7CiBleHRlcm4gRElTUExBWV9TVEFUVVMgKkFyY0dldERpc3BsYXlTdGF0dXMoVUxPTkcgRmlsZUlEKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9iaWdzdXIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvYmlnc3VyLmgKaW5kZXggZWJlZmU3OS4uMmQxYTI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9iaWdzdXIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL2JpZ3N1ci5oCkBAIC00Niw0ICs0NiwzIEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX1NJQllURV9CSUdTVVJfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL3NiMTI1MF9sZHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oCmluZGV4IDA4MWU4YjEuLjFlNzZjZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oCkBAIC00MjAsNCArNDIwLDMgQEAKICNlbmRpZiAvKiAxMjUwIFBBU1MyIHx8IDExMnggUEFTUzEgKi8KIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGtlcm52YXJzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24va2xrZXJudmFycy5oCmluZGV4IDVkZTRjNWUuLjZhZjI1YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGtlcm52YXJzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL2tsa2VybnZhcnMuaApAQCAtMjYsNCArMjYsMyBAQAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fQVNNX1NOX0tMS0VSTlZBUlNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmgKaW5kZXggNzk1YWM2Yy4uNzE2NTMzMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwYXJzZW1lbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGFyc2VtZW0uaApAQCAtMTEsNCArMTEsMyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTSAqLwogI2VuZGlmIC8qIF9NSVBTX1NQQVJTRU1FTV9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMjFlZjllZi4uMzk2ZTQwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTM2LDkgKzM2LDkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX2lzX2xvY2tlZChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JdW5zaWduZWQgaW50IGNvdW50ZXJzID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CisJdTMyIGNvdW50ZXJzID0gQUNDRVNTX09OQ0UobG9jay0+bG9jayk7CiAKLQlyZXR1cm4gKChjb3VudGVycyA+PiAxNCkgXiBjb3VudGVycykgJiAweDFmZmY7CisJcmV0dXJuICgoY291bnRlcnMgPj4gMTYpIF4gY291bnRlcnMpICYgMHhmZmZmOwogfQogCiAjZGVmaW5lIGFyY2hfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3NwaW5fbG9jayhsb2NrKQpAQCAtNDcsOSArNDcsOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5faXNfY29udGVuZGVkKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKKwl1MzIgY291bnRlcnMgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKIAotCXJldHVybiAoKChjb3VudGVycyA+PiAxNCkgLSBjb3VudGVycykgJiAweDFmZmYpID4gMTsKKwlyZXR1cm4gKCgoY291bnRlcnMgPj4gMTYpIC0gY291bnRlcnMpICYgMHhmZmZmKSA+IDE7CiB9CiAjZGVmaW5lIGFyY2hfc3Bpbl9pc19jb250ZW5kZWQJYXJjaF9zcGluX2lzX2NvbnRlbmRlZAogCkBAIC01Nyw2ICs1Nyw3IEBACiB7CiAJaW50IG15X3RpY2tldDsKIAlpbnQgdG1wOworCWludCBpbmMgPSAweDEwMDAwOwogCiAJaWYgKFIxMDAwMF9MTFNDX1dBUikgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCkBAIC02NCwyNSArNjUsMjQgQEAKIAkJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWFkZGl1CSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAweDQwMDAJCVxuIgorCQkiCWFkZHUJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sICVbaW5jXQkJXG4iCiAJCSIJc2MJJVtteV90aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKIAkJIgliZXF6bAklW215X3RpY2tldF0sIDFiCQkJXG4iCiAJCSIJIG5vcAkJCQkJCVxuIgotCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTQJCVxuIgotCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4MWZmZglcbiIKLQkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgorCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTYJCVxuIgorCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4ZmZmZgkJXG4iCisJCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHhmZmZmCVxuIgogCQkiCWJuZQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgNGYJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCiAJCSIyOgkJCQkJCQlcbiIKIAkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKLQkJIjQ6CWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCisJCSI0OglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweGZmZmYJCVxuIgogCQkiCXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSI2OglibmV6CSVbdGlja2V0XSwgNmIJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAxCQkJCVxuIgogCQkiCQkJCQkJCVxuIgotCQkiCWx3CSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKKwkJIglsaHUJJVt0aWNrZXRdLCAlW3NlcnZpbmdfbm93X3B0cl0JCVxuIgogCQkiCWJlcQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgMmIJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCiAJCSIJYgk0YgkJCQkJXG4iCkBAIC05MCwzNiArOTAsMzMgQEAKIAkJIgkucHJldmlvdXMJCQkJCVxuIgogCQkiCS5zZXQgcG9wCQkJCQlcbiIKIAkJOiBbdGlja2V0X3B0cl0gIittIiAobG9jay0+bG9jayksCisJCSAgW3NlcnZpbmdfbm93X3B0cl0gIittIiAobG9jay0+aC5zZXJ2aW5nX25vdyksCiAJCSAgW3RpY2tldF0gIj0mciIgKHRtcCksCi0JCSAgW215X3RpY2tldF0gIj0mciIgKG15X3RpY2tldCkpOworCQkgIFtteV90aWNrZXRdICI9JnIiIChteV90aWNrZXQpCisJCTogW2luY10gInIiIChpbmMpKTsKIAl9IGVsc2UgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIJLnNldCBwdXNoCQkjIGFyY2hfc3Bpbl9sb2NrCVxuIgogCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKLQkJIglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiMToJYWRkaXUJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDB4NDAwMAkJXG4iCisJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgorCQkiCWFkZHUJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sICVbaW5jXQkJXG4iCiAJCSIJc2MJJVtteV90aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgliZXF6CSVbbXlfdGlja2V0XSwgM2YJCQlcbiIKLQkJIgkgbm9wCQkJCQkJXG4iCi0JCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNAkJXG4iCi0JCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHgxZmZmCVxuIgotCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCisJCSIJYmVxegklW215X3RpY2tldF0sIDFiCQkJXG4iCisJCSIJIHNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTYJCVxuIgorCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4ZmZmZgkJXG4iCisJCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHhmZmZmCVxuIgogCQkiCWJuZQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgNGYJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCiAJCSIyOgkJCQkJCQlcbiIKIAkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKLQkJIjM6CWIJMWIJCQkJCVxuIgotCQkiCSBsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCQkJCQkJCVxuIgogCQkiNDoJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKIAkJIglzbGwJJVt0aWNrZXRdLCA1CQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiNjoJYm5legklW3RpY2tldF0sIDZiCQkJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgMQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKLQkJIglsdwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCisJCSIJbGh1CSVbdGlja2V0XSwgJVtzZXJ2aW5nX25vd19wdHJdCQlcbiIKIAkJIgliZXEJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sIDJiCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgJVt0aWNrZXRdCVxuIgogCQkiCWIJNGIJCQkJCVxuIgpAQCAtMTI3LDggKzEyNCwxMCBAQAogCQkiCS5wcmV2aW91cwkJCQkJXG4iCiAJCSIJLnNldCBwb3AJCQkJCVxuIgogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKKwkJICBbc2VydmluZ19ub3dfcHRyXSAiK20iIChsb2NrLT5oLnNlcnZpbmdfbm93KSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSwKLQkJICBbbXlfdGlja2V0XSAiPSZyIiAobXlfdGlja2V0KSk7CisJCSAgW215X3RpY2tldF0gIj0mciIgKG15X3RpY2tldCkKKwkJOiBbaW5jXSAiciIgKGluYykpOwogCX0KIAogCXNtcF9sbHNjX21iKCk7CkBAIC0xMzYsNDcgKzEzNSwxNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JaW50IHRtcDsKLQotCXNtcF9sbHNjX21iKCk7Ci0KLQlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIgkJCQkjIGFyY2hfc3Bpbl91bmxvY2sJXG4iCi0JCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWFkZGl1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAxCQkJXG4iCi0JCSIJb3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgotCQkiCXhvcmkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MjAwMAkJXG4iCi0JCSIJc2MJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgliZXF6bAklW3RpY2tldF0sIDFiCQkJCVxuIgotCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKLQkJICBbdGlja2V0XSAiPSZyIiAodG1wKSk7Ci0JfSBlbHNlIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiCS5zZXQgcHVzaAkJIyBhcmNoX3NwaW5fdW5sb2NrCVxuIgotCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKLQkJIgkJCQkJCQlcbiIKLQkJIglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiMToJYWRkaXUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDEJCQlcbiIKLQkJIglvcmkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MjAwMAkJXG4iCi0JCSIJeG9yaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgyMDAwCQlcbiIKLQkJIglzYwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWJlcXoJJVt0aWNrZXRdLCAyZgkJCQlcbiIKLQkJIgkgbm9wCQkJCQkJXG4iCi0JCSIJCQkJCQkJXG4iCi0JCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCi0JCSIyOgliCTFiCQkJCQlcbiIKLQkJIgkgbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIgkucHJldmlvdXMJCQkJCVxuIgotCQkiCS5zZXQgcG9wCQkJCQlcbiIKLQkJOiBbdGlja2V0X3B0cl0gIittIiAobG9jay0+bG9jayksCi0JCSAgW3RpY2tldF0gIj0mciIgKHRtcCkpOwotCX0KKwl1bnNpZ25lZCBpbnQgc2VydmluZ19ub3cgPSBsb2NrLT5oLnNlcnZpbmdfbm93ICsgMTsKKwl3bWIoKTsKKwlsb2NrLT5oLnNlcnZpbmdfbm93ID0gKHUxNilzZXJ2aW5nX25vdzsKKwludWRnZV93cml0ZXMoKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXJjaF9zcGluX3RyeWxvY2soYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCWludCB0bXAsIHRtcDIsIHRtcDM7CisJaW50IGluYyA9IDB4MTAwMDA7CiAKIAlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKQEAgLTE4NCwxMSArMTUyLDExIEBACiAJCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiMToJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE0CQlcbiIKLQkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweDFmZmYJXG4iCi0JCSIJYW5kaQklW25vd19zZXJ2aW5nXSwgJVt0aWNrZXRdLCAweDFmZmYJXG4iCisJCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNgkJXG4iCisJCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHhmZmZmCVxuIgorCQkiCWFuZGkJJVtub3dfc2VydmluZ10sICVbdGlja2V0XSwgMHhmZmZmCVxuIgogCQkiCWJuZQklW215X3RpY2tldF0sICVbbm93X3NlcnZpbmddLCAzZglcbiIKLQkJIgkgYWRkaXUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4NDAwMAkJXG4iCisJCSIJIGFkZHUJJVt0aWNrZXRdLCAlW3RpY2tldF0sICVbaW5jXQkJXG4iCiAJCSIJc2MJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKIAkJIgliZXF6bAklW3RpY2tldF0sIDFiCQkJCVxuIgogCQkiCSBsaQklW3RpY2tldF0sIDEJCQkJXG4iCkBAIC0yMDEsMzMgKzE2OSwzMyBAQAogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSwKIAkJICBbbXlfdGlja2V0XSAiPSZyIiAodG1wMiksCi0JCSAgW25vd19zZXJ2aW5nXSAiPSZyIiAodG1wMykpOworCQkgIFtub3dfc2VydmluZ10gIj0mciIgKHRtcDMpCisJCTogW2luY10gInIiIChpbmMpKTsKIAl9IGVsc2UgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIJLnNldCBwdXNoCQkjIGFyY2hfc3Bpbl90cnlsb2NrCVxuIgogCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKLQkJIglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiMToJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNAkJXG4iCi0JCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHgxZmZmCVxuIgotCQkiCWFuZGkJJVtub3dfc2VydmluZ10sICVbdGlja2V0XSwgMHgxZmZmCVxuIgorCQkiMToJbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKKwkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE2CQlcbiIKKwkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweGZmZmYJXG4iCisJCSIJYW5kaQklW25vd19zZXJ2aW5nXSwgJVt0aWNrZXRdLCAweGZmZmYJXG4iCiAJCSIJYm5lCSVbbXlfdGlja2V0XSwgJVtub3dfc2VydmluZ10sIDNmCVxuIgotCQkiCSBhZGRpdQklW3RpY2tldF0sICVbdGlja2V0XSwgMHg0MDAwCQlcbiIKKwkJIgkgYWRkdQklW3RpY2tldF0sICVbdGlja2V0XSwgJVtpbmNdCQlcbiIKIAkJIglzYwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWJlcXoJJVt0aWNrZXRdLCA0ZgkJCQlcbiIKKwkJIgliZXF6CSVbdGlja2V0XSwgMWIJCQkJXG4iCiAJCSIJIGxpCSVbdGlja2V0XSwgMQkJCQlcbiIKIAkJIjI6CQkJCQkJCVxuIgogCQkiCS5zdWJzZWN0aW9uIDIJCQkJCVxuIgogCQkiMzoJYgkyYgkJCQkJXG4iCiAJCSIJIGxpCSVbdGlja2V0XSwgMAkJCQlcbiIKLQkJIjQ6CWIJMWIJCQkJCVxuIgotCQkiCSBsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgogCQkiCS5wcmV2aW91cwkJCQkJXG4iCiAJCSIJLnNldCBwb3AJCQkJCVxuIgogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSwKIAkJICBbbXlfdGlja2V0XSAiPSZyIiAodG1wMiksCi0JCSAgW25vd19zZXJ2aW5nXSAiPSZyIiAodG1wMykpOworCQkgIFtub3dfc2VydmluZ10gIj0mciIgKHRtcDMpCisJCTogW2luY10gInIiIChpbmMpKTsKIAl9CiAKIAlzbXBfbGxzY19tYigpOwpAQCAtMzA1LDcgKzI3Myw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRtcDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKFIxMDAwMF9MTFNDX1dBUikgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKaW5kZXggZWUxOTdjMi4uYzUyZjM2MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTUsMTYgKzUsMjggQEAKICMgZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKICNlbmRpZgogCi10eXBlZGVmIHN0cnVjdCB7CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKwordHlwZWRlZiB1bmlvbiB7CiAJLyoKLQkgKiBiaXRzICAwLi4xMzogc2VydmluZ19ub3cKLQkgKiBiaXRzIDE0ICAgIDoganVuayBkYXRhCi0JICogYml0cyAxNS4uMjg6IHRpY2tldAorCSAqIGJpdHMgIDAuLjE1IDogc2VydmluZ19ub3cKKwkgKiBiaXRzIDE2Li4zMSA6IHRpY2tldAogCSAqLwotCXVuc2lnbmVkIGludCBsb2NrOworCXUzMiBsb2NrOworCXN0cnVjdCB7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCXUxNiB0aWNrZXQ7CisJCXUxNiBzZXJ2aW5nX25vdzsKKyNlbHNlCisJCXUxNiBzZXJ2aW5nX25vdzsKKwkJdTE2IHRpY2tldDsKKyNlbmRpZgorCX0gaDsKIH0gYXJjaF9zcGlubG9ja190OwogCi0jZGVmaW5lIF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQJeyAwIH0KKyNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAl7IC5sb2NrID0gMCB9CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCA4M2I1NTA5Li5iYjkzN2NjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC05NSw2ICs5NSw4IEBACiB7CiAJX191MzIgcmV0dmFsOwogCisJc21wX21iX19iZWZvcmVfbGxzYygpOworCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAKQEAgLTE0Nyw2ICsxNDksOCBAQAogewogCV9fdTY0IHJldHZhbDsKIAorCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKKwogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQl1bnNpZ25lZCBsb25nIGR1bW15OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS9nZW5lcmljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS9nZW5lcmljLmgKaW5kZXggODI3ZGMyMi4uNjQ4ODdkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R4eDkvZ2VuZXJpYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eHg5L2dlbmVyaWMuaApAQCAtNDIsNyArNDIsNiBAQAogfTsKIGV4dGVybiBzdHJ1Y3QgdHh4OV9ib2FyZF92ZWMgKnR4eDlfYm9hcmRfdmVjOwogZXh0ZXJuIGludCAoKnR4eDlfaXJxX2Rpc3BhdGNoKShpbnQgcGVuZGluZyk7Ci1jaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCk7CiBjb25zdCBjaGFyICpwcm9tX2dldGVudihjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgdHh4OV93ZHRfaW5pdCh1bnNpZ25lZCBsb25nIGJhc2UpOwogdm9pZCB0eHg5X3dkdF9ub3codW5zaWduZWQgbG9uZyBiYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS91YXNtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFzbS5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvbWlwcy9tbS91YXNtLmgKcmVuYW1lIHRvIGFyY2gvbWlwcy9pbmNsdWRlL2FzbS91YXNtLmgKaW5kZXggM2QxNTNlZC4uYjk5YmQwNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3Vhc20uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFzbS5oCkBAIC05Miw5ICs5MiwxMSBAQAogSXBfdTJ1MXUzKF9zbGwpOwogSXBfdTJ1MXUzKF9zcmEpOwogSXBfdTJ1MXUzKF9zcmwpOworSXBfdTJ1MXUzKF9yb3RyKTsKIElwX3UzdTF1Mihfc3VidSk7CiBJcF91MnMzdTEoX3N3KTsKIElwXzAoX3RsYnApOworSXBfMChfdGxicik7CiBJcF8wKF90bGJ3aSk7CiBJcF8wKF90bGJ3cik7CiBJcF91M3UxdTIoX3hvcik7CkBAIC0xMjksNiArMTMxLDcgQEAKICMgZGVmaW5lIFVBU01faV9TTEwoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfZHNsbChidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfU1JBKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX2RzcmEoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgVUFTTV9pX1NSTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9kc3JsKGJ1ZiwgcnMsIHJ0LCBzaCkKKyMgZGVmaW5lIFVBU01faV9ST1RSKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX2Ryb3RyKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIFVBU01faV9NRkMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfZG1mYzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBVQVNNX2lfTVRDMChidWYsIHJ0LCByZC4uLikgdWFzbV9pX2RtdGMwKGJ1ZiwgcnQsIHJkKQogIyBkZWZpbmUgVUFTTV9pX0FERElVKGJ1ZiwgcnMsIHJ0LCB2YWwpIHVhc21faV9kYWRkaXUoYnVmLCBycywgcnQsIHZhbCkKQEAgLTE0Miw2ICsxNDUsNyBAQAogIyBkZWZpbmUgVUFTTV9pX1NMTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9zbGwoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgVUFTTV9pX1NSQShidWYsIHJzLCBydCwgc2gpIHVhc21faV9zcmEoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgVUFTTV9pX1NSTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9zcmwoYnVmLCBycywgcnQsIHNoKQorIyBkZWZpbmUgVUFTTV9pX1JPVFIoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfcm90cihidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfTUZDMChidWYsIHJ0LCByZC4uLikgdWFzbV9pX21mYzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBVQVNNX2lfTVRDMChidWYsIHJ0LCByZC4uLikgdWFzbV9pX210YzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBVQVNNX2lfQURESVUoYnVmLCBycywgcnQsIHZhbCkgdWFzbV9pX2FkZGl1KGJ1ZiwgcnMsIHJ0LCB2YWwpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWNvbnRleHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91Y29udGV4dC5oCmluZGV4IDhhNGIyMGUuLjliYzA3YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91Y29udGV4dC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91Y29udGV4dC5oCkBAIC0xLDIxICsxIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogTG93IGxldmVsIGV4Y2VwdGlvbiBoYW5kbGluZwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBieSBSYWxmIEJhZWNobGUKLSAqLwotI2lmbmRlZiBfQVNNX1VDT05URVhUX0gKLSNkZWZpbmUgX0FTTV9VQ09OVEVYVF9ICi0KLXN0cnVjdCB1Y29udGV4dCB7Ci0JdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOwotCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7Ci0Jc3RhY2tfdAkJICB1Y19zdGFjazsKLQlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKLQlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwotfTsKLQotI2VuZGlmIC8qIF9BU01fVUNPTlRFWFRfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Vjb250ZXh0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9pcnEuYyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCmluZGV4IDdiZDMyZDAuLmVlMTgwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L2lycS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCkBAIC0yMCwxNyArMjAsMTcgQEAKICNpbmNsdWRlIDxhc20vamF6ei5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socjQwMzBfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhyNDAzMF9sb2NrKTsKIAogc3RhdGljIHZvaWQgZW5hYmxlX3I0MDMwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAoaXJxIC0gSkFaWl9JUlFfU1RBUlQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcjQwMzBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcjQwMzBfbG9jaywgZmxhZ3MpOwogCW1hc2sgfD0gcjQwMzBfcmVhZF9yZWcxNihKQVpaX0lPX0lSUV9FTkFCTEUpOwogCXI0MDMwX3dyaXRlX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcjQwMzBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyNDAzMF9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgZGlzYWJsZV9yNDAzMF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTM4LDEwICszOCwxMCBAQAogCXVuc2lnbmVkIGludCBtYXNrID0gfigxIDw8IChpcnEgLSBKQVpaX0lSUV9TVEFSVCkpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcjQwMzBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcjQwMzBfbG9jaywgZmxhZ3MpOwogCW1hc2sgJj0gcjQwMzBfcmVhZF9yZWcxNihKQVpaX0lPX0lSUV9FTkFCTEUpOwogCXI0MDMwX3dyaXRlX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcjQwMzBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyNDAzMF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcjQwMzBfaXJxX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQppbmRleCA5MzI2YWY1Li5lZjIwOTU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKQEAgLTkzLDYgKzkzLDcgQEAKIAogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlYy5vIHJlbG9jYXRlX2tlcm5lbC5vCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBlYXJseV9wcmludGsubworb2JqLSQoQ09ORklHX1NQSU5MT0NLX1RFU1QpCSs9IHNwaW5sb2NrX3Rlc3QubwogCiBDRkxBR1NfY3B1LWJ1Z3M2NC5vCT0gJChzaGVsbCBpZiAkKENDKSAkKEtCVUlMRF9DRkxBR1MpIC1XYSwtbWRhZGRpIC1jIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbiBlY2hvICItREhBVkVfQVNfU0VUX0RBRERJIjsgZmkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAyYzFlMWQwLi5jYTZjODMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xODgsMTEgKzE4OCwxNSBAQAogCURFRklORShfUFRFX1RfU0laRSwgc2l6ZW9mKHB0ZV90KSk7CiAJQkxBTksoKTsKIAlERUZJTkUoX1BHRF9UX0xPRzIsIFBHRF9UX0xPRzIpOworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAJREVGSU5FKF9QTURfVF9MT0cyLCBQTURfVF9MT0cyKTsKKyNlbmRpZgogCURFRklORShfUFRFX1RfTE9HMiwgUFRFX1RfTE9HMik7CiAJQkxBTksoKTsKIAlERUZJTkUoX1BHRF9PUkRFUiwgUEdEX09SREVSKTsKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogCURFRklORShfUE1EX09SREVSLCBQTURfT1JERVIpOworI2VuZGlmCiAJREVGSU5FKF9QVEVfT1JERVIsIFBURV9PUkRFUik7CiAJQkxBTksoKTsKIAlERUZJTkUoX1BNRF9TSElGVCwgUE1EX1NISUZUKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCmluZGV4IGY1ZDI2NWUuLjM5MmVmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhndDY0MXh4X3RpbWVyX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soZ3Q2NDF4eF90aW1lcl9sb2NrKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3Q2NDF4eF9iYXNlX2Nsb2NrOwogCiB2b2lkIGd0NjQxeHhfc2V0X2Jhc2VfY2xvY2sodW5zaWduZWQgaW50IGNsb2NrKQpAQCAtNDksNyArNDksNyBAQAogewogCXUzMiBjdHJsOwogCi0Jc3Bpbl9sb2NrKCZndDY0MXh4X3RpbWVyX2xvY2spOworCXJhd19zcGluX2xvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CiAKIAljdHJsID0gR1RfUkVBRChHVF9UQ19DT05UUk9MX09GUyk7CiAJY3RybCAmPSB+KEdUX1RDX0NPTlRST0xfRU5UQzBfTVNLIHwgR1RfVENfQ09OVFJPTF9TRUxUQzBfTVNLKTsKQEAgLTU4LDcgKzU4LDcgQEAKIAlHVF9XUklURShHVF9UQzBfT0ZTLCBkZWx0YSk7CiAJR1RfV1JJVEUoR1RfVENfQ09OVFJPTF9PRlMsIGN0cmwpOwogCi0Jc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZndDY0MXh4X3RpbWVyX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02OCw3ICs2OCw3IEBACiB7CiAJdTMyIGN0cmw7CiAKLQlzcGluX2xvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKIAogCWN0cmwgPSBHVF9SRUFEKEdUX1RDX0NPTlRST0xfT0ZTKTsKIAljdHJsICY9IH4oR1RfVENfQ09OVFJPTF9FTlRDMF9NU0sgfCBHVF9UQ19DT05UUk9MX1NFTFRDMF9NU0spOwpAQCAtODYsNyArODYsNyBAQAogCiAJR1RfV1JJVEUoR1RfVENfQ09OVFJPTF9PRlMsIGN0cmwpOwogCi0Jc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZndDY0MXh4X3RpbWVyX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBndDY0MXh4X3RpbWVyMF9ldmVudF9oYW5kbGVyKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IDc1OGFkNDIuLmJlNWJiMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAJY2FzZSBDUFVfQkNNNjM0ODoKIAljYXNlIENQVV9CQ002MzU4OgogCWNhc2UgQ1BVX0NBVklVTV9PQ1RFT046CisJY2FzZSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTOgogCQljcHVfd2FpdCA9IHI0a193YWl0OwogCQlicmVhazsKIApAQCAtNzAwLDYgKzcwMSwxOSBAQAogCXJldHVybiBjb25maWczICYgTUlQU19DT05GX007CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRlY29kZV9jb25maWc0KHN0cnVjdCBjcHVpbmZvX21pcHMgKmMpCit7CisJdW5zaWduZWQgaW50IGNvbmZpZzQ7CisKKwljb25maWc0ID0gcmVhZF9jMF9jb25maWc0KCk7CisKKwlpZiAoKGNvbmZpZzQgJiBNSVBTX0NPTkY0X01NVUVYVERFRikgPT0gTUlQU19DT05GNF9NTVVFWFRERUZfTU1VU0laRUVYVAorCSAgICAmJiBjcHVfaGFzX3RsYikKKwkJYy0+dGxic2l6ZSArPSAoY29uZmlnNCAmIE1JUFNfQ09ORjRfTU1VU0laRUVYVCkgKiAweDQwOworCisJcmV0dXJuIGNvbmZpZzQgJiBNSVBTX0NPTkZfTTsKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0IGRlY29kZV9jb25maWdzKHN0cnVjdCBjcHVpbmZvX21pcHMgKmMpCiB7CiAJaW50IG9rOwpAQCAtNzE4LDYgKzczMiw4IEBACiAJCW9rID0gZGVjb2RlX2NvbmZpZzIoYyk7CiAJaWYgKG9rKQogCQlvayA9IGRlY29kZV9jb25maWczKGMpOworCWlmIChvaykKKwkJb2sgPSBkZWNvZGVfY29uZmlnNChjKTsKIAogCW1pcHNfcHJvYmVfd2F0Y2hfcmVnaXN0ZXJzKGMpOwogfQpAQCAtNzMxLDkgKzc0Nyw2IEBACiAJCV9fY3B1X25hbWVbY3B1XSA9ICJNSVBTIDRLYyI7CiAJCWJyZWFrOwogCWNhc2UgUFJJRF9JTVBfNEtFQzoKLQkJYy0+Y3B1dHlwZSA9IENQVV80S0VDOwotCQlfX2NwdV9uYW1lW2NwdV0gPSAiTUlQUyA0S0VjIjsKLQkJYnJlYWs7CiAJY2FzZSBQUklEX0lNUF80S0VDUjI6CiAJCWMtPmNwdXR5cGUgPSBDUFVfNEtFQzsKIAkJX19jcHVfbmFtZVtjcHVdID0gIk1JUFMgNEtFYyI7CkBAIC04OTksMTIgKzkxMiwxOCBAQAogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NOMzhYWDoKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjMxWFg6CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ04zMFhYOgorCQljLT5jcHV0eXBlID0gQ1BVX0NBVklVTV9PQ1RFT047CisJCV9fY3B1X25hbWVbY3B1XSA9ICJDYXZpdW0gT2N0ZW9uIjsKKwkJZ290byBwbGF0Zm9ybTsKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjU4WFg6CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ041NlhYOgogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NONTBYWDoKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjUyWFg6Ci0JCWMtPmNwdXR5cGUgPSBDUFVfQ0FWSVVNX09DVEVPTjsKLQkJX19jcHVfbmFtZVtjcHVdID0gIkNhdml1bSBPY3Rlb24iOworCQljLT5jcHV0eXBlID0gQ1BVX0NBVklVTV9PQ1RFT05fUExVUzsKKwkJX19jcHVfbmFtZVtjcHVdID0gIkNhdml1bSBPY3Rlb24rIjsKK3BsYXRmb3JtOgorCQlpZiAoY3B1ID09IDApCisJCQlfX2VsZl9wbGF0Zm9ybSA9ICJvY3Rlb24iOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9JTkZPICJVbmtub3duIE9jdGVvbiBjaGlwIVxuIik7CkBAIC05MTQsNiArOTMzLDcgQEAKIH0KIAogY29uc3QgY2hhciAqX19jcHVfbmFtZVtOUl9DUFVTXTsKK2NvbnN0IGNoYXIgKl9fZWxmX3BsYXRmb3JtOwogCiBfX2NwdWluaXQgdm9pZCBjcHVfcHJvYmUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDY4YjA2NzAuLmU5ZTY0ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5LCBDaGluYQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhhbmtzIGdvZXMgdG8gU3RldmVuIFJvc3RlZHQgZm9yIHdyaXRpbmcgdGhlIG9yaWdpbmFsIHg4NiB2ZXJzaW9uLgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKaW5kZXggMDFjMDg4NS4uMjc3OTkxMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwpAQCAtMjksNyArMjksNyBAQAogICovCiAKIHN0YXRpYyBpbnQgaTgyNTlBX2F1dG9fZW9pID0gLTE7Ci1ERUZJTkVfU1BJTkxPQ0soaTgyNTlBX2xvY2spOworREVGSU5FX1JBV19TUElOTE9DSyhpODI1OUFfbG9jayk7CiBzdGF0aWMgdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIHN0YXRpYyB2b2lkIGVuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfODI1OUEodW5zaWduZWQgaW50IGlycSk7CkBAIC02NSwxMyArNjUsMTMgQEAKIAogCWlycSAtPSBJODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IDEgPDwgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAljYWNoZWRfaXJxX21hc2sgfD0gbWFzazsKIAlpZiAoaXJxICYgOCkKIAkJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CiAJZWxzZQogCQlvdXRiKGNhY2hlZF9tYXN0ZXJfbWFzaywgUElDX01BU1RFUl9JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTgxLDEzICs4MSwxMyBAQAogCiAJaXJxIC09IEk4MjU5QV9JUlFfQkFTRTsKIAltYXNrID0gfigxIDw8IGlycSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCWNhY2hlZF9pcnFfbWFzayAmPSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsKIAllbHNlCiAJCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtOTgsMTIgKzk4LDEyIEBACiAKIAlpcnEgLT0gSTgyNTlBX0lSUV9CQVNFOwogCW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJaWYgKGlycSA8IDgpCiAJCXJldCA9IGluYihQSUNfTUFTVEVSX0NNRCkgJiBtYXNrOwogCWVsc2UKIAkJcmV0ID0gaW5iKFBJQ19TTEFWRV9DTUQpICYgKG1hc2sgPj4gOCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTEsNyArMTUxLDcgQEAKIAogCWlycSAtPSBJODI1OUFfSVJRX0JBU0U7CiAJaXJxbWFzayA9IDEgPDwgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIExpZ2h0d2VpZ2h0IHNwdXJpb3VzIElSUSBkZXRlY3Rpb24uIFdlIGRvIG5vdCB3YW50CiAJICogdG8gb3ZlcmRvIHNwdXJpb3VzIElSUSBoYW5kbGluZyAtIGl0J3MgdXN1YWxseSBhIHNpZ24KQEAgLTE4Myw3ICsxODMsNyBAQAogCQlvdXRiKDB4NjAraXJxLCBQSUNfTUFTVEVSX0NNRCk7CS8qICdTcGVjaWZpYyBFT0kgdG8gbWFzdGVyICovCiAJfQogCXNtdGNfaW1fYWNrX2lycShpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogCiBzcHVyaW91c184MjU5QV9pcnE6CkBAIC0yNjQsNyArMjY0LDcgQEAKIAogCWk4MjU5QV9hdXRvX2VvaSA9IGF1dG9fZW9pOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCiAJb3V0YigweGZmLCBQSUNfTUFTVEVSX0lNUik7CS8qIG1hc2sgYWxsIG9mIDgyNTlBLTEgKi8KIAlvdXRiKDB4ZmYsIFBJQ19TTEFWRV9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0yICovCkBAIC0yOTgsNyArMjk4LDcgQEAKIAlvdXRiKGNhY2hlZF9tYXN0ZXJfbWFzaywgUElDX01BU1RFUl9JTVIpOyAvKiByZXN0b3JlIG1hc3RlciBJUlEgbWFzayAqLwogCW91dGIoY2FjaGVkX3NsYXZlX21hc2ssIFBJQ19TTEFWRV9JTVIpOwkgIC8qIHJlc3RvcmUgc2xhdmUgSVJRIG1hc2sgKi8KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1ndDY0MXh4LmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1ndDY0MXh4LmMKaW5kZXggZWJjYzVmNy4uNDJlZjgxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ3Q2NDF4eC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWd0NjQxeHguYwpAQCAtMjcsMTggKzI3LDE4IEBACiAKICNkZWZpbmUgR1Q2NDFYWF9JUlFfVE9fQklUKGlycSkJKDFVIDw8IChpcnEgLSBHVDY0MVhYX0lSUV9CQVNFKSkKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhndDY0MXh4X2lycV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGd0NjQxeHhfaXJxX2xvY2spOwogCiBzdGF0aWMgdm9pZCBhY2tfZ3Q2NDF4eF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBjYXVzZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiAJY2F1c2UgPSBHVF9SRUFEKEdUX0lOVFJDQVVTRV9PRlMpOwogCWNhdXNlICY9IH5HVDY0MVhYX0lSUV9UT19CSVQoaXJxKTsKIAlHVF9XUklURShHVF9JTlRSQ0FVU0VfT0ZTLCBjYXVzZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hc2tfZ3Q2NDF4eF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTQ2LDExICs0NiwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIG1hc2s7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBHVF9SRUFEKEdUX0lOVFJNQVNLX09GUyk7CiAJbWFzayAmPSB+R1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUk1BU0tfT0ZTLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgbWFza19hY2tfZ3Q2NDF4eF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTU4LDcgKzU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBjYXVzZSwgbWFzazsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiAJbWFzayA9IEdUX1JFQUQoR1RfSU5UUk1BU0tfT0ZTKTsKIAltYXNrICY9IH5HVDY0MVhYX0lSUV9UT19CSVQoaXJxKTsKIAlHVF9XUklURShHVF9JTlRSTUFTS19PRlMsIG1hc2spOwpAQCAtNjYsNyArNjYsNyBAQAogCWNhdXNlID0gR1RfUkVBRChHVF9JTlRSQ0FVU0VfT0ZTKTsKIAljYXVzZSAmPSB+R1Q2NDFYWF9JUlFfVE9fQklUKGlycSk7CiAJR1RfV1JJVEUoR1RfSU5UUkNBVVNFX09GUywgY2F1c2UpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB1bm1hc2tfZ3Q2NDF4eF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTc0LDExICs3NCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIG1hc2s7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBHVF9SRUFEKEdUX0lOVFJNQVNLX09GUyk7CiAJbWFzayB8PSBHVDY0MVhYX0lSUV9UT19CSVQoaXJxKTsKIAlHVF9XUklURShHVF9JTlRSTUFTS19PRlMsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGd0NjQxeHhfaXJxX2NoaXAgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IGYwNDI1NjMuLmJkZTc5ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL21jb3VudC5TIGIvYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUwppbmRleCAwYTljZmRiLi42ODUxZmM5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMKQEAgLTYsNyArNiw3IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eSwgQ2hpbmEKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICovCiAKICNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL29jdGVvbl9zd2l0Y2guUyBiL2FyY2gvbWlwcy9rZXJuZWwvb2N0ZW9uX3N3aXRjaC5TCmluZGV4IDM5NTJiODMuLmRkMThiMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvb2N0ZW9uX3N3aXRjaC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvb2N0ZW9uX3N3aXRjaC5TCkBAIC01MDAsNCArNTAwLDMgQEAKIAkgbm9wCiAJRU5EKG9jdGVvbl9tdWx0X3Jlc3RvcmUpCiAJLnNldCBwb3AKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwppbmRleCAzNjRmMDY2Li5kY2FlZDFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3J0bHguYworKysgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3BpbmxvY2tfdGVzdC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zcGlubG9ja190ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2MTEzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3BpbmxvY2tfdGVzdC5jCkBAIC0wLDAgKzEsMTQxIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworCitzdGF0aWMgaW50IHNzX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlrdGltZV90IHN0YXJ0LCBmaW5pc2g7CisJaW50IGxvb3BzOworCWludCBjb250OworCURFRklORV9SQVdfU1BJTkxPQ0soc3Nfc3Bpbik7CisKKwlsb29wcyA9IDEwMDAwMDA7CisJY29udCA9IDE7CisKKwlzdGFydCA9IGt0aW1lX2dldCgpOworCisJd2hpbGUgKGNvbnQpIHsKKwkJcmF3X3NwaW5fbG9jaygmc3Nfc3Bpbik7CisJCWxvb3BzLS07CisJCWlmIChsb29wcyA9PSAwKQorCQkJY29udCA9IDA7CisJCXJhd19zcGluX3VubG9jaygmc3Nfc3Bpbik7CisJfQorCisJZmluaXNoID0ga3RpbWVfZ2V0KCk7CisKKwkqdmFsID0ga3RpbWVfdXNfZGVsdGEoZmluaXNoLCBzdGFydCk7CisKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoZm9wc19zcywgc3NfZ2V0LCBOVUxMLCAiJWxsdVxuIik7CisKKworCitzdHJ1Y3Qgc3Bpbl9tdWx0aV9zdGF0ZSB7CisJcmF3X3NwaW5sb2NrX3QgbG9jazsKKwlhdG9taWNfdCBzdGFydF93YWl0OworCWF0b21pY190IGVudGVyX3dhaXQ7CisJYXRvbWljX3QgZXhpdF93YWl0OworCWludCBsb29wczsKK307CisKK3N0cnVjdCBzcGluX211bHRpX3Blcl90aHJlYWQgeworCXN0cnVjdCBzcGluX211bHRpX3N0YXRlICpzdGF0ZTsKKwlrdGltZV90IHN0YXJ0OworfTsKKworc3RhdGljIGludCBtdWx0aV9vdGhlcih2b2lkICpkYXRhKQoreworCWludCBsb29wczsKKwlpbnQgY29udDsKKwlzdHJ1Y3Qgc3Bpbl9tdWx0aV9wZXJfdGhyZWFkICpwdCA9IGRhdGE7CisJc3RydWN0IHNwaW5fbXVsdGlfc3RhdGUgKnMgPSBwdC0+c3RhdGU7CisKKwlsb29wcyA9IHMtPmxvb3BzOworCWNvbnQgPSAxOworCisJYXRvbWljX2RlYygmcy0+ZW50ZXJfd2FpdCk7CisKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnMtPmVudGVyX3dhaXQpKQorCQk7IC8qIHNwaW4gKi8KKworCXB0LT5zdGFydCA9IGt0aW1lX2dldCgpOworCisJYXRvbWljX2RlYygmcy0+c3RhcnRfd2FpdCk7CisKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnMtPnN0YXJ0X3dhaXQpKQorCQk7IC8qIHNwaW4gKi8KKworCXdoaWxlIChjb250KSB7CisJCXJhd19zcGluX2xvY2soJnMtPmxvY2spOworCQlsb29wcy0tOworCQlpZiAobG9vcHMgPT0gMCkKKwkJCWNvbnQgPSAwOworCQlyYXdfc3Bpbl91bmxvY2soJnMtPmxvY2spOworCX0KKworCWF0b21pY19kZWMoJnMtPmV4aXRfd2FpdCk7CisJd2hpbGUgKGF0b21pY19yZWFkKCZzLT5leGl0X3dhaXQpKQorCQk7IC8qIHNwaW4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdWx0aV9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJa3RpbWVfdCBmaW5pc2g7CisJc3RydWN0IHNwaW5fbXVsdGlfc3RhdGUgbXM7CisJc3RydWN0IHNwaW5fbXVsdGlfcGVyX3RocmVhZCB0MSwgdDI7CisKKwltcy5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKCJtdWx0aV9nZXQiKTsKKwltcy5sb29wcyA9IDEwMDAwMDA7CisKKwlhdG9taWNfc2V0KCZtcy5zdGFydF93YWl0LCAyKTsKKwlhdG9taWNfc2V0KCZtcy5lbnRlcl93YWl0LCAyKTsKKwlhdG9taWNfc2V0KCZtcy5leGl0X3dhaXQsIDIpOworCXQxLnN0YXRlID0gJm1zOworCXQyLnN0YXRlID0gJm1zOworCisJa3RocmVhZF9ydW4obXVsdGlfb3RoZXIsICZ0MiwgIm11bHRpX2dldCIpOworCisJbXVsdGlfb3RoZXIoJnQxKTsKKworCWZpbmlzaCA9IGt0aW1lX2dldCgpOworCisJKnZhbCA9IGt0aW1lX3VzX2RlbHRhKGZpbmlzaCwgdDEuc3RhcnQpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGZvcHNfbXVsdGksIG11bHRpX2dldCwgTlVMTCwgIiVsbHVcbiIpOworCisKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICptaXBzX2RlYnVnZnNfZGlyOworc3RhdGljIGludCBfX2luaXQgc3BpbmxvY2tfdGVzdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmQ7CisKKwlpZiAoIW1pcHNfZGVidWdmc19kaXIpCisJCXJldHVybiAtRU5PREVWOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInNwaW5fc2luZ2xlIiwgU19JUlVHTywKKwkJCQltaXBzX2RlYnVnZnNfZGlyLCBOVUxMLAorCQkJCSZmb3BzX3NzKTsKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PTUVNOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInNwaW5fbXVsdGkiLCBTX0lSVUdPLAorCQkJCW1pcHNfZGVidWdmc19kaXIsIE5VTEwsCisJCQkJJmZvcHNfbXVsdGkpOworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChzcGlubG9ja190ZXN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCAzMWIyMDRiLi40ZTAwZjliIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KIAogZXh0ZXJuIHZvaWQgY2hlY2tfd2FpdCh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgcjRrX3dhaXQodm9pZCk7CkBAIC0xMjcxLDIxICsxMjcyLDI1IEBACiB1bnNpZ25lZCBsb25nIGV4Y2VwdGlvbl9oYW5kbGVyc1szMl07CiB1bnNpZ25lZCBsb25nIHZpX2hhbmRsZXJzWzY0XTsKIAotLyoKLSAqIEFzIGEgc2lkZSBlZmZlY3Qgb2YgdGhlIHdheSB0aGlzIGlzIGltcGxlbWVudGVkIHdlJ3JlIGxpbWl0ZWQKLSAqIHRvIGludGVycnVwdCBoYW5kbGVycyBpbiB0aGUgYWRkcmVzcyByYW5nZSBmcm9tCi0gKiBLU0VHMCA8PSB4IDwgS1NFRzAgKyAyNTZtYiBvbiB0aGUgTmV2YWRhLiAgT2ggd2VsbCAuLi4KLSAqLwotdm9pZCAqc2V0X2V4Y2VwdF92ZWN0b3IoaW50IG4sIHZvaWQgKmFkZHIpCit2b2lkIF9faW5pdCAqc2V0X2V4Y2VwdF92ZWN0b3IoaW50IG4sIHZvaWQgKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBoYW5kbGVyID0gKHVuc2lnbmVkIGxvbmcpIGFkZHI7CiAJdW5zaWduZWQgbG9uZyBvbGRfaGFuZGxlciA9IGV4Y2VwdGlvbl9oYW5kbGVyc1tuXTsKIAogCWV4Y2VwdGlvbl9oYW5kbGVyc1tuXSA9IGhhbmRsZXI7CiAJaWYgKG4gPT0gMCAmJiBjcHVfaGFzX2RpdmVjKSB7Ci0JCSoodTMyICopKGViYXNlICsgMHgyMDApID0gMHgwODAwMDAwMCB8Ci0JCQkJCSAgKDB4MDNmZmZmZmYgJiAoaGFuZGxlciA+PiAyKSk7Ci0JCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZShlYmFzZSArIDB4MjAwLCBlYmFzZSArIDB4MjA0KTsKKwkJdW5zaWduZWQgbG9uZyBqdW1wX21hc2sgPSB+KCgxIDw8IDI4KSAtIDEpOworCQl1MzIgKmJ1ZiA9ICh1MzIgKikoZWJhc2UgKyAweDIwMCk7CisJCXVuc2lnbmVkIGludCBrMCA9IDI2OworCQlpZiAoKGhhbmRsZXIgJiBqdW1wX21hc2spID09ICgoZWJhc2UgKyAweDIwMCkgJiBqdW1wX21hc2spKSB7CisJCQl1YXNtX2lfaigmYnVmLCBoYW5kbGVyICYgfmp1bXBfbWFzayk7CisJCQl1YXNtX2lfbm9wKCZidWYpOworCQl9IGVsc2UgeworCQkJVUFTTV9pX0xBKCZidWYsIGswLCBoYW5kbGVyKTsKKwkJCXVhc21faV9qcigmYnVmLCBrMCk7CisJCQl1YXNtX2lfbm9wKCZidWYpOworCQl9CisJCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZShlYmFzZSArIDB4MjAwLCAodW5zaWduZWQgbG9uZylidWYpOwogCX0KIAlyZXR1cm4gKHZvaWQgKilvbGRfaGFuZGxlcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCmluZGV4IDYwNDc3NTIuLjJiZDIxNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9waWN2dWUuaCBiL2FyY2gvbWlwcy9sYXNhdC9waWN2dWUuaAppbmRleCA5MWRmNTUzLi4yZjA3NTc3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGFzYXQvcGljdnVlLmgKKysrIGIvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZS5oCkBAIC00Miw0ICs0MiwzIEBACiAKIHZvaWQgcHZjX2NsZWFyKHZvaWQpOwogdm9pZCBwdmNfaG9tZSh2b2lkKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jbWRsaW5lLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NtZGxpbmUuYwppbmRleCA3YWQ0N2YyLi4xYTA2ZGVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NtZGxpbmUuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NtZGxpbmUuYwpAQCAtMTAsNyArMTAsNyBAQAogICogQXV0aG9yOiBGdXhpbiBaaGFuZywgemhhbmdmeEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIxLDEyICsyMSwxMSBAQAogCiAjaW5jbHVkZSA8bG9vbmdzb24uaD4KIAotaW50IHByb21fYXJnYzsKLS8qIHBtb24gcGFzc2VzIGFyZ3VtZW50cyBpbiAzMmJpdCBwb2ludGVycyAqLwotaW50ICpfcHJvbV9hcmd2OwotCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfY21kbGluZSh2b2lkKQogeworCWludCBwcm9tX2FyZ2M7CisJLyogcG1vbiBwYXNzZXMgYXJndW1lbnRzIGluIDMyYml0IHBvaW50ZXJzICovCisJaW50ICpfcHJvbV9hcmd2OwogCWludCBpOwogCWxvbmcgbDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2FjYy5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2FjYy5jCmluZGV4IGI0OTQ4NWYuLmIzZmQ1ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9hY2MuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2VoY2kuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9laGNpLmMKaW5kZXggNzRmOWM1OS4uZWFmOGI4NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2VoY2kuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYwppbmRleCAzZjYxNTk0Li45YTk2YjU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaWRlLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lkZS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pc2EuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pc2EuYwppbmRleCBiNmYxN2Y1Li5mNWMwODE4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lzYS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKaW5kZXggNmNiNDRkYi4uOGM4MDdjOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3I6IFlhbmh1YSwgeWFuaEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IHpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgemhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogUmVmZXJlbmNlOiBBTUQgR2VvZGUoVE0pIENTNTUzNiBDb21wYW5pb24gRGV2aWNlIERhdGEgQm9vawogICoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9vaGNpLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfb2hjaS5jCmluZGV4IDhmZGIwMmIuLmRiNTkwMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9vaGNpLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfcGNpLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfcGNpLmMKaW5kZXggZTIzZjNkNy4uNmRmZWFiMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X3BjaS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYwppbmRleCAyM2U3YThmLi5hNzE3MzZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZWFybHlfcHJpbnRrLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogIENvcHlyaWdodCAoYykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDkgTGVtb3RlIEluYy4KLSAqICBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqICBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCmluZGV4IDE5NmQ5NDcuLmFlNGNmZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYwpAQCAtOSw4ICs5LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKICAqIEF1dGhvcjogRnV4aW4gWmhhbmcsIHpoYW5nZnhAbGVtb3RlLmNvbQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0yMywxMyArMjMsMTAgQEAKIAogI2luY2x1ZGUgPGxvb25nc29uLmg+CiAKLXVuc2lnbmVkIGxvbmcgYnVzX2Nsb2NrLCBjcHVfY2xvY2tfZnJlcTsKK3Vuc2lnbmVkIGxvbmcgY3B1X2Nsb2NrX2ZyZXE7CiBFWFBPUlRfU1lNQk9MKGNwdV9jbG9ja19mcmVxKTsKIHVuc2lnbmVkIGxvbmcgbWVtc2l6ZSwgaGlnaG1lbXNpemU7CiAKLS8qIHBtb24gcGFzc2VzIGFyZ3VtZW50cyBpbiAzMmJpdCBwb2ludGVycyAqLwotaW50ICpfcHJvbV9lbnZwOwotCiAjZGVmaW5lIHBhcnNlX2V2ZW5fZWFybGllcihyZXMsIG9wdGlvbiwgcCkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlpZiAoc3RybmNtcChvcHRpb24sIChjaGFyICopcCwgc3RybGVuKG9wdGlvbikpID09IDApCQlcCkBAIC0zOSw2ICszNiwxMCBAQAogCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfZW52KHZvaWQpCiB7CisJLyogcG1vbiBwYXNzZXMgYXJndW1lbnRzIGluIDMyYml0IHBvaW50ZXJzICovCisJaW50ICpfcHJvbV9lbnZwOworCXVuc2lnbmVkIGxvbmcgYnVzX2Nsb2NrOworCXVuc2lnbmVkIGludCBwcm9jZXNzb3JfaWQ7CiAJbG9uZyBsOwogCiAJLyogZmlybXdhcmUgYXJndW1lbnRzIGFyZSBpbml0aWFsaXplZCBpbiBoZWFkLlMgKi8KQEAgLTU1LDYgKzU2LDIyIEBACiAJfQogCWlmIChtZW1zaXplID09IDApCiAJCW1lbXNpemUgPSAyNTY7CisJaWYgKGJ1c19jbG9jayA9PSAwKQorCQlidXNfY2xvY2sgPSA2NjAwMDAwMDsKKwlpZiAoY3B1X2Nsb2NrX2ZyZXEgPT0gMCkgeworCQlwcm9jZXNzb3JfaWQgPSAoJmN1cnJlbnRfY3B1X2RhdGEpLT5wcm9jZXNzb3JfaWQ7CisJCXN3aXRjaCAocHJvY2Vzc29yX2lkICYgUFJJRF9SRVZfTUFTSykgeworCQljYXNlIFBSSURfUkVWX0xPT05HU09OMkU6CisJCQljcHVfY2xvY2tfZnJlcSA9IDUzMzA4MDAwMDsKKwkJCWJyZWFrOworCQljYXNlIFBSSURfUkVWX0xPT05HU09OMkY6CisJCQljcHVfY2xvY2tfZnJlcSA9IDc5NzAwMDAwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY3B1X2Nsb2NrX2ZyZXEgPSAxMDAwMDAwMDA7CisJCQlicmVhazsKKwkJfQorCX0KIAogCXByX2luZm8oImJ1c2Nsb2NrPSVsZCwgY3B1Y2xvY2s9JWxkLCBtZW1zaXplPSVsZCwgaGlnaG1lbXNpemU9JWxkXG4iLAogCQlidXNfY2xvY2ssIGNwdV9jbG9ja19mcmVxLCBtZW1zaXplLCBoaWdobWVtc2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2luaXQuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaW5pdC5jCmluZGV4IGEyYWJkOTMuLjE5ZDM0MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaW5pdC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21hY2h0eXBlLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21hY2h0eXBlLmMKaW5kZXggMGVkNTJiMy4uODUzZjE4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWFjaHR5cGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWmhhbmcgTGUgPHIwYmVydHpAZ2VudG9vLm9yZz4KICAqCkBAIC0zNSw2ICszNSwxMCBAQAogCXJldHVybiBzeXN0ZW1fdHlwZXNbbWlwc19tYWNodHlwZV07CiB9CiAKK3ZvaWQgX193ZWFrIF9faW5pdCBtYWNoX3Byb21faW5pdF9tYWNodHlwZSh2b2lkKQoreworfQorCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfbWFjaHR5cGUodm9pZCkKIHsKIAljaGFyICpwLCBzdHJbTUFDSFRZUEVfTEVOXTsKQEAgLTQzLDggKzQ3LDEwIEBACiAJbWlwc19tYWNodHlwZSA9IExPT05HU09OX01BQ0hUWVBFOwogCiAJcCA9IHN0cnN0cihhcmNzX2NtZGxpbmUsICJtYWNodHlwZT0iKTsKLQlpZiAoIXApCisJaWYgKCFwKSB7CisJCW1hY2hfcHJvbV9pbml0X21hY2h0eXBlKCk7CiAJCXJldHVybjsKKwl9CiAJcCArPSBzdHJsZW4oIm1hY2h0eXBlPSIpOwogCXN0cm5jcHkoc3RyLCBwLCBNQUNIVFlQRV9MRU4pOwogCXAgPSBzdHJzdHIoc3RyLCAiICIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tZW0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWVtLmMKaW5kZXggY2VhY2QwOS4uZWMyZjc5NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tZW0uYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jCkBAIC0xNiwxMCArMTYsMTEgQEAKIAogdm9pZCBfX2luaXQgcHJvbV9pbml0X21lbW9yeSh2b2lkKQogewotICAgIGFkZF9tZW1vcnlfcmVnaW9uKDB4MCwgKG1lbXNpemUgPDwgMjApLCBCT09UX01FTV9SQU0pOworCWFkZF9tZW1vcnlfcmVnaW9uKDB4MCwgKG1lbXNpemUgPDwgMjApLCBCT09UX01FTV9SQU0pOwogCi0gICAgYWRkX21lbW9yeV9yZWdpb24obWVtc2l6ZSA8PCAyMCwgTE9PTkdTT05fUENJX01FTV9TVEFSVCAtIChtZW1zaXplIDw8Ci0JCQkgICAgMjApLCBCT09UX01FTV9SRVNFUlZFRCk7CisJYWRkX21lbW9yeV9yZWdpb24obWVtc2l6ZSA8PCAyMCwgTE9PTkdTT05fUENJX01FTV9TVEFSVCAtIChtZW1zaXplIDw8CisJCQkJMjApLCBCT09UX01FTV9SRVNFUlZFRCk7CisKICNpZmRlZiBDT05GSUdfQ1BVX1NVUFBPUlRTX0FERFJXSU5DRkcKIAl7CiAJCWludCBiaXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BsYXRmb3JtLmMKaW5kZXggYmU4MTc3Ny4uZWQwMDdhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jCmluZGV4IGI2MjVmZWMuLjZjMWZkOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BtLmMKQEAgLTIsNyArMiw3IEBACiAgKiBsb29uZ3Nvbi1zcGVjaWZpYyBzdXNwZW5kIHN1cHBvcnQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9yZXNldC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9yZXNldC5jCmluZGV4IGQ1N2YxNzEuLjRiZDljMTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcmVzZXQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMKQEAgLTYsOCArNiw4IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSwgSW5jLiAmIEluc3RpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQogICogQXV0aG9yOiBGdXhpbiBaaGFuZywgemhhbmdmeEBsZW1vdGUuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFpoYW5namluIFd1LCB3dXpqQGxlbW90ZS5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogWmhhbmdqaW4gV3UsIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KQEAgLTI1LDE4ICsyNSwyNiBAQAogCSgodm9pZCAoKikodm9pZCkpaW9yZW1hcF9ub2NhY2hlKExPT05HU09OX0JPT1RfQkFTRSwgNCkpICgpOwogfQogCi1zdGF0aWMgdm9pZCBsb29uZ3Nvbl9oYWx0KHZvaWQpCitzdGF0aWMgdm9pZCBsb29uZ3Nvbl9wb3dlcm9mZih2b2lkKQogewogCW1hY2hfcHJlcGFyZV9zaHV0ZG93bigpOwotCXdoaWxlICgxKQotCQk7CisJdW5yZWFjaGFibGUoKTsKK30KKworc3RhdGljIHZvaWQgbG9vbmdzb25faGFsdCh2b2lkKQoreworCXByX25vdGljZSgiXG5cbioqIFlvdSBjYW4gc2FmZWx5IHR1cm4gb2ZmIHRoZSBwb3dlciBub3cgKipcblxuIik7CisJd2hpbGUgKDEpIHsKKwkJaWYgKGNwdV93YWl0KQorCQkJY3B1X3dhaXQoKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG1pcHNfcmVib290X3NldHVwKHZvaWQpCiB7CiAJX21hY2hpbmVfcmVzdGFydCA9IGxvb25nc29uX3Jlc3RhcnQ7CiAJX21hY2hpbmVfaGFsdCA9IGxvb25nc29uX2hhbHQ7Ci0JcG1fcG93ZXJfb2ZmID0gbG9vbmdzb25faGFsdDsKKwlwbV9wb3dlcl9vZmYgPSBsb29uZ3Nvbl9wb3dlcm9mZjsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9zZXJpYWwuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMKaW5kZXggMjNiNjZhNS4uNzU4MDg3MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9zZXJpYWwuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3NlcmlhbC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KICAqIEF1dGhvcjogWWFuIGh1YSAoeWFuaHVhQGxlbW90ZS5jb20pCi0gKiBBdXRob3I6IFd1IFpoYW5namluICh3dXpqQGxlbW90ZS5jb20pCisgKiBBdXRob3I6IFd1IFpoYW5namluICh3dXpoYW5namluQGdtYWlsLmNvbSkKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKaW5kZXggMzVmMGI2Ni4uOWZkZDAxZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMKQEAgLTIsOCArMiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CiAgKiBBdXRob3I6IEZ1eGluIFpoYW5nLCB6aGFuZ2Z4QGxlbW90ZS5jb20KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBJbnNpdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3VhcnRfYmFzZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi91YXJ0X2Jhc2UuYwppbmRleCA3OGZmNjZhLi5kNjllYTU0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3VhcnRfYmFzZS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9yZXNldC5jCmluZGV4IGZjMTZjNjcuLmJjMzllYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvcmVzZXQuYwpAQCAtMSw4ICsxLDggQEAKIC8qIEJvYXJkLXNwZWNpZmljIHJlYm9vdC9zaHV0ZG93biByb3V0aW5lcwogICogQ29weXJpZ2h0IChjKSAyMDA5IFBoaWxpcHBlIFZhY2hvbiA8cGhpbGlwcGVAY293cGlnLmNhPgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL01ha2VmaWxlIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9NYWtlZmlsZQppbmRleCA0ZDg0YjI3Li44Njk5YTUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBsZW1vdGUgbG9vbmdzb24yZiBmYW1pbHkgbWFjaGluZXMKICMKIAotb2JqLXkgKz0gaXJxLm8gcmVzZXQubyBlY19rYjMzMTBiLm8KK29iai15ICs9IG1hY2h0eXBlLm8gaXJxLm8gcmVzZXQubyBlY19rYjMzMTBiLm8KIAogIwogIyBTdXNwZW5kIFN1cHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvZWNfa2IzMzEwYi5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9lY19rYjMzMTBiLmMKaW5kZXggNGQ4NDExMS4uNjQwNTcyNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9lY19rYjMzMTBiLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9lY19rYjMzMTBiLmMKQEAgLTc1LDYgKzc1LDggQEAKIAkJdWRlbGF5KEVDX1JFR19ERUxBWSk7CiAJfQogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydF9hY2Nlc3NfbG9jaywgZmxhZ3MpOworCiAJaWYgKHRpbWVvdXQgPD0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkZWFkYWJsZSBlcnJvciA6IHRpbWVvdXQuLi5cbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTgzLDggKzg1LDYgQEAKIAkJCSAgICIoJXgvJWQpZWMgaXNzdWVkIGNvbW1hbmQgJWQgc3RhdHVzIDogMHgleFxuIiwKIAkJCSAgIHRpbWVvdXQsIEVDX0NNRF9USU1FT1VUIC0gdGltZW91dCwgY21kLCBzdGF0dXMpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydF9hY2Nlc3NfbG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGVjX3F1ZXJ5X3NlcSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYwppbmRleCA3N2QzMmY5Li44ODJkZmNkNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9pcnEuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jCkBAIC0zOCw3ICszOCw3IEBACiAJaXJxID0gLTE7CiAKIAlpZiAoKExPT05HU09OX0lOVElTUiAmIExPT05HU09OX0lOVEVOKSAmIExPT05HU09OX0lOVF9CSVRfSU5UMCkgewotCQlzcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmaTgyNTlBX2xvY2spOwogCQlpc3IgPSBpbmIoUElDX01BU1RFUl9DTUQpICYKIAkJCX5pbmIoUElDX01BU1RFUl9JTVIpICYgfigxIDw8IFBJQ19DQVNDQURFX0lSKTsKIAkJaWYgKCFpc3IpCkBAIC01Niw3ICs1Niw3IEBACiAJCQlpZiAofmluYihQSUNfTUFTVEVSX0lTUikgJiAweDgwKQogCQkJCWlycSA9IC0xOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmaTgyNTlBX2xvY2spOwogCX0KIAogCXJldHVybiBpcnE7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL21hY2h0eXBlLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL21hY2h0eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2MGEyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvbWFjaHR5cGUuYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2luY2x1ZGUgPGxvb25nc29uLmg+CisKK3ZvaWQgX19pbml0IG1hY2hfcHJvbV9pbml0X21hY2h0eXBlKHZvaWQpCit7CisJLyogV2Ugc2hhcmUgdGhlIHNhbWUga2VybmVsIGltYWdlIGZpbGUgYW1vbmcgTGVtb3RlIDJGIGZhbWlseQorCSAqIG9mIG1hY2hpbmVzLCBhbmQgcHJvdmlkZSB0aGUgbWFjaHR5cGU9IGtlcm5lbCBjb21tYW5kIGxpbmUKKwkgKiB0byB1c2VycyB0byBpbmRpY2F0ZSB0aGVpciBtYWNoaW5lLCB0aGlzIGNvbW1hbmQgbGluZSB3aWxsCisJICogYmUgcGFzc2VkIGJ5IHRoZSBsYXRlc3QgUE1PTiBhdXRvbWF0aWNhbGx5LiBhbmQgZm9ydHVuYXRlbHksCisJICogdXAgdG8gbm93LCB3ZSBjYW4gZ2V0IHRoZSBtYWNoaW5lIHR5cGUgZnJvbSB0aGUgUE1PTl9WRVI9CisJICogY29tbWFuZGxpbmUgZGlyZWN0bHkgZXhjZXB0IHRoZSBOQVMgbWFjaGluZSwgSW4gdGhlIG9sZAorCSAqIG1hY2hpbmVzLCB0aGlzIHdpbGwgaGVscCB0aGUgdXNlcnMgYSBsb3QuCisJICoKKwkgKiBJZiBubyAibWFjaHR5cGU9IiBwYXNzZWQsIGdldCBtYWNoaW5lIHR5cGUgZnJvbSAiUE1PTl9WRVI9Ii4KKwkgKiAJUE1PTl9WRVI9TE04MDg5CQlMZW1vdGUgOC45JycgbmV0Ym9vaworCSAqIAkgICAgICAgICBMTTgxMDEJCUxlbW90ZSAxMC4xJycgbmV0Ym9vaworCSAqIAkoVGhlIGFib3ZlIHR3byBuZXRib29rcyBoYXZlIHRoZSBzYW1lIGtlcm5lbCBzdXBwb3J0KQorCSAqCSAgICAgICAgIExNNlhYWAkJTGVtb3RlIEZ1TG9vbmcoMkYpIGJveCBzZXJpZXMKKwkgKgkgICAgICAgICBMTTlYWFgJCUxlbW90ZSBMeW5Mb29uZyBQQyBzZXJpZXMKKwkgKi8KKwlpZiAoc3Ryc3RyKGFyY3NfY21kbGluZSwgIlBNT05fVkVSPUxNIikpIHsKKwkJaWYgKHN0cnN0cihhcmNzX2NtZGxpbmUsICJQTU9OX1ZFUj1MTTgiKSkKKwkJCW1pcHNfbWFjaHR5cGUgPSBNQUNIX0xFTU9URV9ZTDJGODk7CisJCWVsc2UgaWYgKHN0cnN0cihhcmNzX2NtZGxpbmUsICJQTU9OX1ZFUj1MTTYiKSkKKwkJCW1pcHNfbWFjaHR5cGUgPSBNQUNIX0xFTU9URV9GTDJGOworCQllbHNlIGlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiUE1PTl9WRVI9TE05IikpCisJCQltaXBzX21hY2h0eXBlID0gTUFDSF9MRU1PVEVfTEwyRjsKKwkJZWxzZQorCQkJbWlwc19tYWNodHlwZSA9IE1BQ0hfTEVNT1RFX05BUzsKKworCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiIG1hY2h0eXBlPSIpOworCQlzdHJjYXQoYXJjc19jbWRsaW5lLCBnZXRfc3lzdGVtX3R5cGUoKSk7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9wbS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9wbS5jCmluZGV4IGQ3YWYyZTYuLmNhYzRkMzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3BtLmMKQEAgLTIsNyArMiw3IEBACiAgKiAgTGVtb3RlIGxvb25nc29uMmYgZmFtaWx5IG1hY2hpbmVzJyBzcGVjaWZpYyBzdXNwZW5kIHN1cHBvcnQKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9yZXNldC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9yZXNldC5jCmluZGV4IDUxZDFhNjAuLjM2MDIwYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcmVzZXQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMKQEAgLTMsNyArMyw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkgUGhpbGlwcGUgVmFjaG9uIDxwaGlsaXBwZUBjb3dwaWcuY2E+CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkLmMKaW5kZXggN2U5MDBmMy4uYTAzMjUzMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkLmMKQEAgLTEzNSw0ICsxMzUsMyBAQAogCXByaW50aygiXG4iKTsKIAlyZXR1cm4geDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkcC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkcC5jCmluZGV4IDZkMmQ4OWYuLjJmMjJmZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZHAuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGRwLmMKQEAgLTE0OCw3ICsxNDgsNiBAQAogCiAJCQlzd2l0Y2goaWVlZTc1NF9jc3Iucm0pIHsKIAkJCWNhc2UgSUVFRTc1NF9STjoKLQkJCQlyZXR1cm4gaWVlZTc1NGRwX3plcm8oc24pOwogCQkJY2FzZSBJRUVFNzU0X1JaOgogCQkJCXJldHVybiBpZWVlNzU0ZHBfemVybyhzbik7CiAJCQljYXNlIElFRUU3NTRfUlU6ICAgIC8qIHRvd2FyZCArSW5maW5pdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0c3AuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0c3AuYwppbmRleCA0NjM1MzQwLi5hMTliNzIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHNwLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRzcC5jCkBAIC0xNDksNyArMTQ5LDYgQEAKIAogCQkJc3dpdGNoKGllZWU3NTRfY3NyLnJtKSB7CiAJCQljYXNlIElFRUU3NTRfUk46Ci0JCQkJcmV0dXJuIGllZWU3NTRzcF96ZXJvKHNuKTsKIAkJCWNhc2UgSUVFRTc1NF9SWjoKIAkJCQlyZXR1cm4gaWVlZTc1NHNwX3plcm8oc24pOwogCQkJY2FzZSBJRUVFNzU0X1JVOiAgICAgIC8qIHRvd2FyZCArSW5maW5pdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0eGNwdC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTR4Y3B0LmMKaW5kZXggN2Q4ZWY4OS4uZTAyNDIzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTR4Y3B0LmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTR4Y3B0LmMKQEAgLTQ2LDQgKzQ2LDMgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIGluIFwiJXNcIiwgdHlwZT0lc1xuIiwKIAkJeGNwLT5vcCwgcnRuYW1lc1t4Y3AtPnJ0XSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLW9jdGVvbi5jIGIvYXJjaC9taXBzL21tL2Mtb2N0ZW9uLmMKaW5kZXggZTA2ZjFhZi4uMGY5YzQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2Mtb2N0ZW9uLmMKKysrIGIvYXJjaC9taXBzL21tL2Mtb2N0ZW9uLmMKQEAgLTE4Myw2ICsxODMsNyBAQAogCiAJc3dpdGNoIChjLT5jcHV0eXBlKSB7CiAJY2FzZSBDUFVfQ0FWSVVNX09DVEVPTjoKKwljYXNlIENQVV9DQVZJVU1fT0NURU9OX1BMVVM6CiAJCWNvbmZpZzEgPSByZWFkX2MwX2NvbmZpZzEoKTsKIAkJYy0+aWNhY2hlLmxpbmVzeiA9IDIgPDwgKChjb25maWcxID4+IDE5KSAmIDcpOwogCQljLT5pY2FjaGUuc2V0cyA9IDY0IDw8ICgoY29uZmlnMSA+PiAyMikgJiA3KTsKQEAgLTE5MiwxMCArMTkzLDEwIEBACiAJCQljLT5pY2FjaGUuc2V0cyAqIGMtPmljYWNoZS53YXlzICogYy0+aWNhY2hlLmxpbmVzejsKIAkJYy0+aWNhY2hlLndheWJpdCA9IGZmcyhpY2FjaGVfc2l6ZSAvIGMtPmljYWNoZS53YXlzKSAtIDE7CiAJCWMtPmRjYWNoZS5saW5lc3ogPSAxMjg7Ci0JCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NOM1hYWCkpCi0JCQljLT5kY2FjaGUuc2V0cyA9IDE7IC8qIENOM1hYWCBoYXMgb25lIERjYWNoZSBzZXQgKi8KLQkJZWxzZQorCQlpZiAoYy0+Y3B1dHlwZSA9PSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTKQogCQkJYy0+ZGNhY2hlLnNldHMgPSAyOyAvKiBDTjVYWFggaGFzIHR3byBEY2FjaGUgc2V0cyAqLworCQllbHNlCisJCQljLT5kY2FjaGUuc2V0cyA9IDE7IC8qIENOM1hYWCBoYXMgb25lIERjYWNoZSBzZXQgKi8KIAkJYy0+ZGNhY2hlLndheXMgPSA2NDsKIAkJZGNhY2hlX3NpemUgPQogCQkJYy0+ZGNhY2hlLnNldHMgKiBjLT5kY2FjaGUud2F5cyAqIGMtPmRjYWNoZS5saW5lc3o7CkBAIC0zMDUsNCArMzA2LDMgQEAKIHsKIAljYWNoZV9wYXJpdHlfZXJyb3Jfb2N0ZW9uKDEpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vY2FjaGUuYyBiL2FyY2gvbWlwcy9tbS9jYWNoZS5jCmluZGV4IGU3MTZjYWYuLmJlODYyN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jYWNoZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jYWNoZS5jCkBAIC0xMzcsMjIgKzEzNyw0MyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcHJvdGVjdGlvbl9tYXAodm9pZCkKIHsKLQlwcm90ZWN0aW9uX21hcFswXSA9IFBBR0VfTk9ORTsKLQlwcm90ZWN0aW9uX21hcFsxXSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbMl0gPSBQQUdFX0NPUFk7Ci0JcHJvdGVjdGlvbl9tYXBbM10gPSBQQUdFX0NPUFk7Ci0JcHJvdGVjdGlvbl9tYXBbNF0gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzVdID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFs2XSA9IFBBR0VfQ09QWTsKLQlwcm90ZWN0aW9uX21hcFs3XSA9IFBBR0VfQ09QWTsKLQlwcm90ZWN0aW9uX21hcFs4XSA9IFBBR0VfTk9ORTsKLQlwcm90ZWN0aW9uX21hcFs5XSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbMTBdID0gUEFHRV9TSEFSRUQ7Ci0JcHJvdGVjdGlvbl9tYXBbMTFdID0gUEFHRV9TSEFSRUQ7Ci0JcHJvdGVjdGlvbl9tYXBbMTJdID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFsxM10gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzE0XSA9IFBBR0VfU0hBUkVEOwotCXByb3RlY3Rpb25fbWFwWzE1XSA9IFBBR0VfU0hBUkVEOworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQlwcm90ZWN0aW9uX21hcFswXSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbMV0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDKTsKKwkJcHJvdGVjdGlvbl9tYXBbMl0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzNdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyk7CisJCXByb3RlY3Rpb25fbWFwWzRdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzVdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UKTsKKwkJcHJvdGVjdGlvbl9tYXBbNl0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbN10gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQpOworCisJCXByb3RlY3Rpb25fbWFwWzhdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFs5XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMpOworCQlwcm90ZWN0aW9uX21hcFsxMF0gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMgfCBfUEFHRV9XUklURSB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFsxMV0gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMgfCBfUEFHRV9XUklURSk7CisJCXByb3RlY3Rpb25fbWFwWzEyXSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzEzXSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTRdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9XUklURSAgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTVdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9XUklURSk7CisKKwl9IGVsc2UgeworCQlwcm90ZWN0aW9uX21hcFswXSA9IFBBR0VfTk9ORTsKKwkJcHJvdGVjdGlvbl9tYXBbMV0gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFsyXSA9IFBBR0VfQ09QWTsKKwkJcHJvdGVjdGlvbl9tYXBbM10gPSBQQUdFX0NPUFk7CisJCXByb3RlY3Rpb25fbWFwWzRdID0gUEFHRV9SRUFET05MWTsKKwkJcHJvdGVjdGlvbl9tYXBbNV0gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFs2XSA9IFBBR0VfQ09QWTsKKwkJcHJvdGVjdGlvbl9tYXBbN10gPSBQQUdFX0NPUFk7CisJCXByb3RlY3Rpb25fbWFwWzhdID0gUEFHRV9OT05FOworCQlwcm90ZWN0aW9uX21hcFs5XSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzEwXSA9IFBBR0VfU0hBUkVEOworCQlwcm90ZWN0aW9uX21hcFsxMV0gPSBQQUdFX1NIQVJFRDsKKwkJcHJvdGVjdGlvbl9tYXBbMTJdID0gUEFHRV9SRUFET05MWTsKKwkJcHJvdGVjdGlvbl9tYXBbMTNdID0gUEFHRV9SRUFET05MWTsKKwkJcHJvdGVjdGlvbl9tYXBbMTRdID0gUEFHRV9TSEFSRUQ7CisJCXByb3RlY3Rpb25fbWFwWzE1XSA9IFBBR0VfU0hBUkVEOworCX0KIH0KIAogdm9pZCBfX2NwdWluaXQgY3B1X2NhY2hlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9mYXVsdC5jIGIvYXJjaC9taXBzL21tL2ZhdWx0LmMKaW5kZXggZTk3YTdhMi4uYjc4ZjdkOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9taXBzL21tL2ZhdWx0LmMKQEAgLTk5LDggKzk5LDMxIEBACiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCiAJCQlnb3RvIGJhZF9hcmVhOwogCX0gZWxzZSB7Ci0JCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpKQotCQkJZ290byBiYWRfYXJlYTsKKwkJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCQlpZiAoYWRkcmVzcyA9PSByZWdzLT5jcDBfZXBjICYmICEodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpKSB7CisjaWYgMAorCQkJCXByX25vdGljZSgiQ3B1JWRbJXM6JWQ6JTAqbHg6JWxkOiUwKmx4XSBYSSB2aW9sYXRpb25cbiIsCisJCQkJCSAgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwKKwkJCQkJICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCisJCQkJCSAgZmllbGQsIGFkZHJlc3MsIHdyaXRlLAorCQkJCQkgIGZpZWxkLCByZWdzLT5jcDBfZXBjKTsKKyNlbmRpZgorCQkJCWdvdG8gYmFkX2FyZWE7CisJCQl9CisJCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkpIHsKKyNpZiAwCisJCQkJcHJfbm90aWNlKCJDcHUlZFslczolZDolMCpseDolbGQ6JTAqbHhdIFJJIHZpb2xhdGlvblxuIiwKKwkJCQkJICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJCQkgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCQkJICBmaWVsZCwgYWRkcmVzcywgd3JpdGUsCisJCQkJCSAgZmllbGQsIHJlZ3MtPmNwMF9lcGMpOworI2VuZGlmCisJCQkJZ290byBiYWRfYXJlYTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpKQorCQkJCWdvdG8gYmFkX2FyZWE7CisJCX0KIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL21pcHMvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA4YzI4MzRmLi5jZDA2NjBjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL21pcHMvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtOTcsNCArOTcsMyBAQAogCQlwYWdlICs9ICgoYWRkcmVzcyAmIH5IUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUKTsKIAlyZXR1cm4gcGFnZTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2luaXQuYyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKaW5kZXggMTY1MTk0Mi4uMTI1MzlhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2luaXQuYworKysgYi9hcmNoL21pcHMvbW0vaW5pdC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpCiAJZW50cnlsbyA9IHB0ZS5wdGVfaGlnaDsKICNlbHNlCi0JZW50cnlsbyA9IHB0ZV92YWwocHRlKSA+PiA2OworCWVudHJ5bG8gPSBwdGVfdG9fZW50cnlsbyhwdGVfdmFsKHB0ZSkpOwogI2VuZGlmCiAKIAlFTlRFUl9DUklUSUNBTChmbGFncyk7CkBAIC0yOTgsNyArMjk4LDcgQEAKIH0KIAogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotc3RhdGljIGludCBfX2luaXQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCitpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCiB7CiAJaW50IGk7CiAKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogICogd2lsbCBvZmZpY2lhbGx5IGJlIHJldGlyZWQuCiAgKi8KIHBnZF90IHN3YXBwZXJfcGdfZGlyW19QVFJTX1BFUl9QR0RdIF9fcGFnZV9hbGlnbmVkKF9QR0RfT1JERVIpOwotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiBwbWRfdCBpbnZhbGlkX3BtZF90YWJsZVtQVFJTX1BFUl9QTURdIF9fcGFnZV9hbGlnbmVkKFBNRF9PUkRFUik7CiAjZW5kaWYKIHB0ZV90IGludmFsaWRfcHRlX3RhYmxlW1BUUlNfUEVSX1BURV0gX19wYWdlX2FsaWduZWQoUFRFX09SREVSKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wYWdlLmMgYi9hcmNoL21pcHMvbW0vcGFnZS5jCmluZGV4IGY1YzczNzUuLjM2MjcyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9wYWdlLmMKKysrIGIvYXJjaC9taXBzL21tL3BhZ2UuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX2RtYS5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICJ1YXNtLmgiCisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KIAogLyogUmVnaXN0ZXJzIHVzZWQgaW4gdGhlIGFzc2VtYmxlZCByb3V0aW5lcy4gKi8KICNkZWZpbmUgWkVSTyAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vcGd0YWJsZS02NC5jIGIvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYwppbmRleCAxMTIxMDE5Li43OGVhYTRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGd0YWJsZS02NC5jCisrKyBiL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMKQEAgLTE1LDIzICsxNSwzMSBAQAogdm9pZCBwZ2RfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyAqcCwgKmVuZDsKKwl1bnNpZ25lZCBsb25nIGVudHJ5OworCisjaWZkZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAorCWVudHJ5ID0gKHVuc2lnbmVkIGxvbmcpaW52YWxpZF9wdGVfdGFibGU7CisjZWxzZQorCWVudHJ5ID0gKHVuc2lnbmVkIGxvbmcpaW52YWxpZF9wbWRfdGFibGU7CisjZW5kaWYKIAogIAlwID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZTsKIAllbmQgPSBwICsgUFRSU19QRVJfUEdEOwogCiAJd2hpbGUgKHAgPCBlbmQpIHsKLQkJcFswXSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZTsKLQkJcFsxXSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZTsKLQkJcFsyXSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZTsKLQkJcFszXSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZTsKLQkJcFs0XSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZTsKLQkJcFs1XSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZTsKLQkJcFs2XSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZTsKLQkJcFs3XSA9ICh1bnNpZ25lZCBsb25nKSBpbnZhbGlkX3BtZF90YWJsZTsKKwkJcFswXSA9IGVudHJ5OworCQlwWzFdID0gZW50cnk7CisJCXBbMl0gPSBlbnRyeTsKKwkJcFszXSA9IGVudHJ5OworCQlwWzRdID0gZW50cnk7CisJCXBbNV0gPSBlbnRyeTsKKwkJcFs2XSA9IGVudHJ5OworCQlwWzddID0gZW50cnk7CiAJCXAgKz0gODsKIAl9CiB9CiAKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogdm9pZCBwbWRfaW5pdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGFnZXRhYmxlKQogewogCXVuc2lnbmVkIGxvbmcgKnAsICplbmQ7CkBAIC00MCwxNyArNDgsMTggQEAKIAllbmQgPSBwICsgUFRSU19QRVJfUE1EOwogCiAJd2hpbGUgKHAgPCBlbmQpIHsKLQkJcFswXSA9ICh1bnNpZ25lZCBsb25nKXBhZ2V0YWJsZTsKLQkJcFsxXSA9ICh1bnNpZ25lZCBsb25nKXBhZ2V0YWJsZTsKLQkJcFsyXSA9ICh1bnNpZ25lZCBsb25nKXBhZ2V0YWJsZTsKLQkJcFszXSA9ICh1bnNpZ25lZCBsb25nKXBhZ2V0YWJsZTsKLQkJcFs0XSA9ICh1bnNpZ25lZCBsb25nKXBhZ2V0YWJsZTsKLQkJcFs1XSA9ICh1bnNpZ25lZCBsb25nKXBhZ2V0YWJsZTsKLQkJcFs2XSA9ICh1bnNpZ25lZCBsb25nKXBhZ2V0YWJsZTsKLQkJcFs3XSA9ICh1bnNpZ25lZCBsb25nKXBhZ2V0YWJsZTsKKwkJcFswXSA9IHBhZ2V0YWJsZTsKKwkJcFsxXSA9IHBhZ2V0YWJsZTsKKwkJcFsyXSA9IHBhZ2V0YWJsZTsKKwkJcFszXSA9IHBhZ2V0YWJsZTsKKwkJcFs0XSA9IHBhZ2V0YWJsZTsKKwkJcFs1XSA9IHBhZ2V0YWJsZTsKKwkJcFs2XSA9IHBhZ2V0YWJsZTsKKwkJcFs3XSA9IHBhZ2V0YWJsZTsKIAkJcCArPSA4OwogCX0KIH0KKyNlbmRpZgogCiB2b2lkIF9faW5pdCBwYWdldGFibGVfaW5pdCh2b2lkKQogewpAQCAtNTksOCArNjgsOSBAQAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZW50aXJlIHBnZC4gICovCiAJcGdkX2luaXQoKHVuc2lnbmVkIGxvbmcpc3dhcHBlcl9wZ19kaXIpOworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAJcG1kX2luaXQoKHVuc2lnbmVkIGxvbmcpaW52YWxpZF9wbWRfdGFibGUsICh1bnNpZ25lZCBsb25nKWludmFsaWRfcHRlX3RhYmxlKTsKLQorI2VuZGlmCiAJcGdkX2Jhc2UgPSBzd2FwcGVyX3BnX2RpcjsKIAkvKgogCSAqIEZpeGVkIG1hcHBpbmdzOgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggZDczNDI4Yi4uYzYxOGVlZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCkBAIC0zMDMsNyArMzAzLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBsbzsKIAkJd3JpdGVfYzBfcGFnZW1hc2soUE1fSFVHRV9NQVNLKTsKIAkJcHRlcCA9IChwdGVfdCAqKXBtZHA7Ci0JCWxvID0gcHRlX3ZhbCgqcHRlcCkgPj4gNjsKKwkJbG8gPSBwdGVfdG9fZW50cnlsbyhwdGVfdmFsKCpwdGVwKSk7CiAJCXdyaXRlX2MwX2VudHJ5bG8wKGxvKTsKIAkJd3JpdGVfYzBfZW50cnlsbzEobG8gKyAoSFBBR0VfU0laRSA+PiA3KSk7CiAKQEAgLTMyMyw4ICszMjMsOCBAQAogCQlwdGVwKys7CiAJCXdyaXRlX2MwX2VudHJ5bG8xKHB0ZXAtPnB0ZV9oaWdoKTsKICNlbHNlCi0JCXdyaXRlX2MwX2VudHJ5bG8wKHB0ZV92YWwoKnB0ZXArKykgPj4gNik7Ci0JCXdyaXRlX2MwX2VudHJ5bG8xKHB0ZV92YWwoKnB0ZXApID4+IDYpOworCQl3cml0ZV9jMF9lbnRyeWxvMChwdGVfdG9fZW50cnlsbyhwdGVfdmFsKCpwdGVwKyspKSk7CisJCXdyaXRlX2MwX2VudHJ5bG8xKHB0ZV90b19lbnRyeWxvKHB0ZV92YWwoKnB0ZXApKSk7CiAjZW5kaWYKIAkJbXRjMF90bGJ3X2hhemFyZCgpOwogCQlpZiAoaWR4IDwgMCkKQEAgLTMzNyw0MCArMzM3LDYgQEAKIAlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKIH0KIAotI2lmIDAKLXN0YXRpYyB2b2lkIHI0a191cGRhdGVfbW11X2NhY2hlX2h3YnVnKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgYXNpZDsKLQlwZ2RfdCAqcGdkcDsKLQlwbWRfdCAqcG1kcDsKLQlwdGVfdCAqcHRlcDsKLQlpbnQgaWR4OwotCi0JRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwotCWFkZHJlc3MgJj0gKFBBR0VfTUFTSyA8PCAxKTsKLQlhc2lkID0gcmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0s7Ci0Jd3JpdGVfYzBfZW50cnloaShhZGRyZXNzIHwgYXNpZCk7Ci0JcGdkcCA9IHBnZF9vZmZzZXQodm1hLT52bV9tbSwgYWRkcmVzcyk7Ci0JbXRjMF90bGJ3X2hhemFyZCgpOwotCXRsYl9wcm9iZSgpOwotCXRsYl9wcm9iZV9oYXphcmQoKTsKLQlwbWRwID0gcG1kX29mZnNldChwZ2RwLCBhZGRyZXNzKTsKLQlpZHggPSByZWFkX2MwX2luZGV4KCk7Ci0JcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKHBtZHAsIGFkZHJlc3MpOwotCXdyaXRlX2MwX2VudHJ5bG8wKHB0ZV92YWwoKnB0ZXArKykgPj4gNik7Ci0Jd3JpdGVfYzBfZW50cnlsbzEocHRlX3ZhbCgqcHRlcCkgPj4gNik7Ci0JbXRjMF90bGJ3X2hhemFyZCgpOwotCWlmIChpZHggPCAwKQotCQl0bGJfd3JpdGVfcmFuZG9tKCk7Ci0JZWxzZQotCQl0bGJfd3JpdGVfaW5kZXhlZCgpOwotCXRsYndfdXNlX2hhemFyZCgpOwotCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwotfQotI2VuZGlmCi0KIHZvaWQgX19pbml0IGFkZF93aXJlZF9lbnRyeSh1bnNpZ25lZCBsb25nIGVudHJ5bG8wLCB1bnNpZ25lZCBsb25nIGVudHJ5bG8xLAogCXVuc2lnbmVkIGxvbmcgZW50cnloaSwgdW5zaWduZWQgbG9uZyBwYWdlbWFzaykKIHsKQEAgLTQ0NywzNCArNDEzLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcHJvYmVfdGxiKHVuc2lnbmVkIGxvbmcgY29uZmlnKQotewotCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JLyoKLQkgKiBJZiB0aGlzIGlzbid0IGEgTUlQUzMyIC8gTUlQUzY0IGNvbXBsaWFudCBDUFUuICBDb25maWcgMSByZWdpc3RlcgotCSAqIGlzIG5vdCBzdXBwb3J0ZWQsIHdlIGFzc3VtZSBSNGsgc3R5bGUuICBDcHUgcHJvYmluZyBhbHJlYWR5IGZpZ3VyZWQKLQkgKiBvdXQgdGhlIG51bWJlciBvZiB0bGIgZW50cmllcy4KLQkgKi8KLQlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmYwMDAwKSA9PSBQUklEX0NPTVBfTEVHQUNZKQotCQlyZXR1cm47Ci0jaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCS8qCi0JICogSWYgVExCIGlzIHNoYXJlZCBpbiBTTVRDIHN5c3RlbSwgdG90YWwgc2l6ZSBhbHJlYWR5Ci0JICogaGFzIGJlZW4gY2FsY3VsYXRlZCBhbmQgd3JpdHRlbiBpbnRvIGNwdV9kYXRhIHRsYnNpemUKLQkgKi8KLQlpZigoc210Y19zdGF0dXMgJiBTTVRDX1RMQl9TSEFSRUQpID09IFNNVENfVExCX1NIQVJFRCkKLQkJcmV0dXJuOwotI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KLQotCXJlZyA9IHJlYWRfYzBfY29uZmlnMSgpOwotCWlmICghKChjb25maWcgPj4gNykgJiAzKSkKLQkJcGFuaWMoIk5vIFRMQiBwcmVzZW50Iik7Ci0KLQljLT50bGJzaXplID0gKChyZWcgPj4gMjUpICYgMHgzZikgKyAxOwotfQotCiBzdGF0aWMgaW50IF9fY3B1aW5pdGRhdGEgbnRsYjsKIHN0YXRpYyBpbnQgX19pbml0IHNldF9udGxiKGNoYXIgKnN0cikKIHsKQEAgLTQ4Niw4ICs0MjQsNiBAQAogCiB2b2lkIF9fY3B1aW5pdCB0bGJfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGludCBjb25maWcgPSByZWFkX2MwX2NvbmZpZygpOwotCiAJLyoKIAkgKiBZb3Ugc2hvdWxkIG5ldmVyIGNoYW5nZSB0aGlzIHJlZ2lzdGVyOgogCSAqICAgLSBPbiBSNDYwMCAxLjcgdGhlIHRsYnAgbmV2ZXIgaGl0cyBmb3IgcGFnZXMgc21hbGxlciB0aGFuCkBAIC00OTUsMTMgKzQzMSwyNSBAQAogCSAqICAgLSBUaGUgZW50aXJlIG1tIGhhbmRsaW5nIGFzc3VtZXMgdGhlIGMwX3BhZ2VtYXNrIHJlZ2lzdGVyIHRvCiAJICogICAgIGJlIHNldCB0byBmaXhlZC1zaXplIHBhZ2VzLgogCSAqLwotCXByb2JlX3RsYihjb25maWcpOwogCXdyaXRlX2MwX3BhZ2VtYXNrKFBNX0RFRkFVTFRfTUFTSyk7CiAJd3JpdGVfYzBfd2lyZWQoMCk7CiAJaWYgKGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfUjEwMDAwIHx8CiAJICAgIGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfUjEyMDAwIHx8CiAJICAgIGN1cnJlbnRfY3B1X3R5cGUoKSA9PSBDUFVfUjE0MDAwKQogCQl3cml0ZV9jMF9mcmFtZW1hc2soMCk7CisKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJLyoKKwkJICogRW5hYmxlIHRoZSBubyByZWFkLCBubyBleGVjIGJpdHMsIGFuZCBlbmFibGUgbGFyZ2UgdmlydHVhbAorCQkgKiBhZGRyZXNzLgorCQkgKi8KKwkJdTMyIHBnID0gUEdfUklFIHwgUEdfWElFOworI2lmZGVmIENPTkZJR182NEJJVAorCQlwZyB8PSBQR19FTFBBOworI2VuZGlmCisJCXdyaXRlX2MwX3BhZ2VncmFpbihwZyk7CisJfQorCiAJdGVtcF90bGJfZW50cnkgPSBjdXJyZW50X2NwdV9kYXRhLnRsYnNpemUgLSAxOwogCiAgICAgICAgIC8qIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgQVJDIGZpcm13YXJlIGlzIGRlYWQuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYmV4LmMgYi9hcmNoL21pcHMvbW0vdGxiZXguYwppbmRleCBiYWRjZjVlLi4wZGUwZTQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiZXguYworKysgYi9hcmNoL21pcHMvbW0vdGxiZXguYwpAQCAtMjksOCArMjksNyBAQAogCiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3dhci5oPgotCi0jaW5jbHVkZSAidWFzbS5oIgorI2luY2x1ZGUgPGFzbS91YXNtLmg+CiAKIHN0YXRpYyBpbmxpbmUgaW50IHI0NWtfYnZhaHdidWcodm9pZCkKIHsKQEAgLTc3LDYgKzc2LDggQEAKIAlsYWJlbF92bWFsbG9jX2RvbmUsCiAJbGFiZWxfdGxid19oYXphcmQsCiAJbGFiZWxfc3BsaXQsCisJbGFiZWxfdGxibF9nb2Fyb3VuZDEsCisJbGFiZWxfdGxibF9nb2Fyb3VuZDIsCiAJbGFiZWxfbm9wYWdlX3RsYmwsCiAJbGFiZWxfbm9wYWdlX3RsYnMsCiAJbGFiZWxfbm9wYWdlX3RsYm0sCkBAIC05Myw2ICs5NCw4IEBACiBVQVNNX0xfTEEoX3ZtYWxsb2NfZG9uZSkKIFVBU01fTF9MQShfdGxid19oYXphcmQpCiBVQVNNX0xfTEEoX3NwbGl0KQorVUFTTV9MX0xBKF90bGJsX2dvYXJvdW5kMSkKK1VBU01fTF9MQShfdGxibF9nb2Fyb3VuZDIpCiBVQVNNX0xfTEEoX25vcGFnZV90bGJsKQogVUFTTV9MX0xBKF9ub3BhZ2VfdGxicykKIFVBU01fTF9MQShfbm9wYWdlX3RsYm0pCkBAIC0zOTcsNyArNDAwLDQ0IEBACiAJfQogfQogCitzdGF0aWMgX19jcHVpbml0IF9fbWF5YmVfdW51c2VkIHZvaWQgYnVpbGRfY29udmVydF9wdGVfdG9fZW50cnlsbyh1MzIgKipwLAorCQkJCQkJCQkgIHVuc2lnbmVkIGludCByZWcpCit7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCVVBU01faV9TUkwocCwgcmVnLCByZWcsIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJVUFTTV9pX1JPVFIocCwgcmVnLCByZWcsIGlsb2cyKF9QQUdFX0dMT0JBTCkgLSBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfNjRCSVRfUEhZU19BRERSCisJCXVhc21faV9kc3JsKHAsIHJlZywgcmVnLCBpbG9nMihfUEFHRV9HTE9CQUwpKTsKKyNlbHNlCisJCVVBU01faV9TUkwocCwgcmVnLCByZWcsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOworI2VuZGlmCisJfQorfQorCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorCitzdGF0aWMgX19jcHVpbml0IHZvaWQgYnVpbGRfcmVzdG9yZV9wYWdlbWFzayh1MzIgKipwLAorCQkJCQkgICAgIHN0cnVjdCB1YXNtX3JlbG9jICoqciwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgdG1wLAorCQkJCQkgICAgIGVudW0gbGFiZWxfaWQgbGlkKQoreworCS8qIFJlc2V0IGRlZmF1bHQgcGFnZSBzaXplICovCisJaWYgKFBNX0RFRkFVTFRfTUFTSyA+PiAxNikgeworCQl1YXNtX2lfbHVpKHAsIHRtcCwgUE1fREVGQVVMVF9NQVNLID4+IDE2KTsKKwkJdWFzbV9pX29yaShwLCB0bXAsIHRtcCwgUE1fREVGQVVMVF9NQVNLICYgMHhmZmZmKTsKKwkJdWFzbV9pbF9iKHAsIHIsIGxpZCk7CisJCXVhc21faV9tdGMwKHAsIHRtcCwgQzBfUEFHRU1BU0spOworCX0gZWxzZSBpZiAoUE1fREVGQVVMVF9NQVNLKSB7CisJCXVhc21faV9vcmkocCwgdG1wLCAwLCBQTV9ERUZBVUxUX01BU0spOworCQl1YXNtX2lsX2IocCwgciwgbGlkKTsKKwkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9QQUdFTUFTSyk7CisJfSBlbHNlIHsKKwkJdWFzbV9pbF9iKHAsIHIsIGxpZCk7CisJCXVhc21faV9tdGMwKHAsIDAsIEMwX1BBR0VNQVNLKTsKKwl9Cit9CisKIHN0YXRpYyBfX2NwdWluaXQgdm9pZCBidWlsZF9odWdlX3RsYl93cml0ZV9lbnRyeSh1MzIgKipwLAogCQkJCQkJIHN0cnVjdCB1YXNtX2xhYmVsICoqbCwKIAkJCQkJCSBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsCkBAIC00MTEsMjAgKzQ1MSw3IEBACiAKIAlidWlsZF90bGJfd3JpdGVfZW50cnkocCwgbCwgciwgd21vZGUpOwogCi0JLyogUmVzZXQgZGVmYXVsdCBwYWdlIHNpemUgKi8KLQlpZiAoUE1fREVGQVVMVF9NQVNLID4+IDE2KSB7Ci0JCXVhc21faV9sdWkocCwgdG1wLCBQTV9ERUZBVUxUX01BU0sgPj4gMTYpOwotCQl1YXNtX2lfb3JpKHAsIHRtcCwgdG1wLCBQTV9ERUZBVUxUX01BU0sgJiAweGZmZmYpOwotCQl1YXNtX2lsX2IocCwgciwgbGFiZWxfbGVhdmUpOwotCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX1BBR0VNQVNLKTsKLQl9IGVsc2UgaWYgKFBNX0RFRkFVTFRfTUFTSykgewotCQl1YXNtX2lfb3JpKHAsIHRtcCwgMCwgUE1fREVGQVVMVF9NQVNLKTsKLQkJdWFzbV9pbF9iKHAsIHIsIGxhYmVsX2xlYXZlKTsKLQkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9QQUdFTUFTSyk7Ci0JfSBlbHNlIHsKLQkJdWFzbV9pbF9iKHAsIHIsIGxhYmVsX2xlYXZlKTsKLQkJdWFzbV9pX210YzAocCwgMCwgQzBfUEFHRU1BU0spOwotCX0KKwlidWlsZF9yZXN0b3JlX3BhZ2VtYXNrKHAsIHIsIHRtcCwgbGFiZWxfbGVhdmUpOwogfQogCiAvKgpAQCAtNDYwLDE1ICs0ODcsMTUgQEAKIAlpZiAoIXNtYWxsX3NlcXVlbmNlKQogCQl1YXNtX2lfbHVpKHAsIHRtcCwgSFBBR0VfU0laRSA+PiAoNyArIDE2KSk7CiAKLQlVQVNNX2lfU1JMKHAsIHB0ZSwgcHRlLCA2KTsgLyogY29udmVydCB0byBlbnRyeWxvICovCi0JdWFzbV9pX210YzAocCwgcHRlLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwlidWlsZF9jb252ZXJ0X3B0ZV90b19lbnRyeWxvKHAsIHB0ZSk7CisJVUFTTV9pX01UQzAocCwgcHRlLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KIAkvKiBjb252ZXJ0IHRvIGVudHJ5bG8xICovCiAJaWYgKHNtYWxsX3NlcXVlbmNlKQogCQlVQVNNX2lfQURESVUocCwgcHRlLCBwdGUsIEhQQUdFX1NJWkUgPj4gNyk7CiAJZWxzZQogCQlVQVNNX2lfQUREVShwLCBwdGUsIHB0ZSwgdG1wKTsKIAotCXVhc21faV9tdGMwKHAsIHB0ZSwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCisJVUFTTV9pX01UQzAocCwgcHRlLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KIH0KIAogc3RhdGljIF9fY3B1aW5pdCB2b2lkIGJ1aWxkX2h1Z2VfaGFuZGxlcl90YWlsKHUzMiAqKnAsCkBAIC01NDksMTEgKzU3NiwxMyBAQAogCiAJdWFzbV9pX2FuZGkocCwgdG1wLCB0bXAsIChQVFJTX1BFUl9QR0QgLSAxKTw8Myk7CiAJdWFzbV9pX2RhZGR1KHAsIHB0ciwgcHRyLCB0bXApOyAvKiBhZGQgaW4gcGdkIG9mZnNldCAqLworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAJdWFzbV9pX2RtZmMwKHAsIHRtcCwgQzBfQkFEVkFERFIpOyAvKiBnZXQgZmF1bHRpbmcgYWRkcmVzcyAqLwogCXVhc21faV9sZChwLCBwdHIsIDAsIHB0cik7IC8qIGdldCBwbWQgcG9pbnRlciAqLwogCXVhc21faV9kc3JsKHAsIHRtcCwgdG1wLCBQTURfU0hJRlQtMyk7IC8qIGdldCBwbWQgb2Zmc2V0IGluIGJ5dGVzICovCiAJdWFzbV9pX2FuZGkocCwgdG1wLCB0bXAsIChQVFJTX1BFUl9QTUQgLSAxKTw8Myk7CiAJdWFzbV9pX2RhZGR1KHAsIHB0ciwgcHRyLCB0bXApOyAvKiBhZGQgaW4gcG1kIG9mZnNldCAqLworI2VuZGlmCiB9CiAKIC8qCkBAIC02ODQsMzUgKzcxMyw1MyBAQAogCWlmIChjcHVfaGFzXzY0Yml0cykgewogCQl1YXNtX2lfbGQocCwgdG1wLCAwLCBwdGVwKTsgLyogZ2V0IGV2ZW4gcHRlICovCiAJCXVhc21faV9sZChwLCBwdGVwLCBzaXplb2YocHRlX3QpLCBwdGVwKTsgLyogZ2V0IG9kZCBwdGUgKi8KLQkJdWFzbV9pX2RzcmwocCwgdG1wLCB0bXAsIDYpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8wICovCi0JCXVhc21faV9tdGMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCi0JCXVhc21faV9kc3JsKHAsIHB0ZXAsIHB0ZXAsIDYpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8xICovCi0JCXVhc21faV9tdGMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLworCQlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJCVVBU01faV9TUkwocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJCVVBU01faV9TUkwocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQkJVUFTTV9pX1JPVFIocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkgLSBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCQlVQVNNX2lfTVRDMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCQkJVUFTTV9pX1JPVFIocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJfSBlbHNlIHsKKwkJCXVhc21faV9kc3JsKHAsIHRtcCwgdG1wLCBpbG9nMihfUEFHRV9HTE9CQUwpKTsgLyogY29udmVydCB0byBlbnRyeWxvMCAqLworCQkJVUFTTV9pX01UQzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwkJCXVhc21faV9kc3JsKHAsIHB0ZXAsIHB0ZXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8xICovCisJCX0KKwkJVUFTTV9pX01UQzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCiAJfSBlbHNlIHsKIAkJaW50IHB0ZV9vZmZfZXZlbiA9IHNpemVvZihwdGVfdCkgLyAyOwogCQlpbnQgcHRlX29mZl9vZGQgPSBwdGVfb2ZmX2V2ZW4gKyBzaXplb2YocHRlX3QpOwogCiAJCS8qIFRoZSBwdGUgZW50cmllcyBhcmUgcHJlLXNoaWZ0ZWQgKi8KIAkJdWFzbV9pX2x3KHAsIHRtcCwgcHRlX29mZl9ldmVuLCBwdGVwKTsgLyogZ2V0IGV2ZW4gcHRlICovCi0JCXVhc21faV9tdGMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJCVVBU01faV9NVEMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCiAJCXVhc21faV9sdyhwLCBwdGVwLCBwdGVfb2ZmX29kZCwgcHRlcCk7IC8qIGdldCBvZGQgcHRlICovCi0JCXVhc21faV9tdGMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLworCQlVQVNNX2lfTVRDMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KIAl9CiAjZWxzZQogCVVBU01faV9MVyhwLCB0bXAsIDAsIHB0ZXApOyAvKiBnZXQgZXZlbiBwdGUgKi8KIAlVQVNNX2lfTFcocCwgcHRlcCwgc2l6ZW9mKHB0ZV90KSwgcHRlcCk7IC8qIGdldCBvZGQgcHRlICovCiAJaWYgKHI0NWtfYnZhaHdidWcoKSkKIAkJYnVpbGRfdGxiX3Byb2JlX2VudHJ5KHApOwotCVVBU01faV9TUkwocCwgdG1wLCB0bXAsIDYpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8wICovCisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCVVBU01faV9TUkwocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJVUFTTV9pX1NSTChwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCVVBU01faV9ST1RSKHAsIHRtcCwgdG1wLCBpbG9nMihfUEFHRV9HTE9CQUwpIC0gaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCisJCQlVQVNNX2lfTVRDMChwLCAwLCBDMF9FTlRSWUxPMCk7CisJCVVBU01faV9NVEMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJCVVBU01faV9ST1RSKHAsIHB0ZXAsIHB0ZXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkgLSBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJfSBlbHNlIHsKKwkJVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSk7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzAgKi8KKwkJaWYgKHI0a18yNTBNSFpod2J1ZygpKQorCQkJVUFTTV9pX01UQzAocCwgMCwgQzBfRU5UUllMTzApOworCQlVQVNNX2lfTVRDMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCQlVQVNNX2lfU1JMKHAsIHB0ZXAsIHB0ZXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8xICovCisJCWlmIChyNDVrX2J2YWh3YnVnKCkpCisJCQl1YXNtX2lfbWZjMChwLCB0bXAsIEMwX0lOREVYKTsKKwl9CiAJaWYgKHI0a18yNTBNSFpod2J1ZygpKQotCQl1YXNtX2lfbXRjMChwLCAwLCBDMF9FTlRSWUxPMCk7Ci0JdWFzbV9pX210YzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KLQlVQVNNX2lfU1JMKHAsIHB0ZXAsIHB0ZXAsIDYpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8xICovCi0JaWYgKHI0NWtfYnZhaHdidWcoKSkKLQkJdWFzbV9pX21mYzAocCwgdG1wLCBDMF9JTkRFWCk7Ci0JaWYgKHI0a18yNTBNSFpod2J1ZygpKQotCQl1YXNtX2lfbXRjMChwLCAwLCBDMF9FTlRSWUxPMSk7Ci0JdWFzbV9pX210YzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCisJCVVBU01faV9NVEMwKHAsIDAsIEMwX0VOVFJZTE8xKTsKKwlVQVNNX2lfTVRDMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KICNlbmRpZgogfQogCkBAIC05ODUsOSArMTAzMiwxNCBAQAogYnVpbGRfcHRlX3ByZXNlbnQodTMyICoqcCwgc3RydWN0IHVhc21fcmVsb2MgKipyLAogCQkgIHVuc2lnbmVkIGludCBwdGUsIHVuc2lnbmVkIGludCBwdHIsIGVudW0gbGFiZWxfaWQgbGlkKQogewotCXVhc21faV9hbmRpKHAsIHB0ZSwgcHRlLCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCk7Ci0JdWFzbV9pX3hvcmkocCwgcHRlLCBwdGUsIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEKTsKLQl1YXNtX2lsX2JuZXoocCwgciwgcHRlLCBsaWQpOworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQl1YXNtX2lfYW5kaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCk7CisJCXVhc21faWxfYmVxeihwLCByLCBwdGUsIGxpZCk7CisJfSBlbHNlIHsKKwkJdWFzbV9pX2FuZGkocCwgcHRlLCBwdGUsIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEKTsKKwkJdWFzbV9pX3hvcmkocCwgcHRlLCBwdGUsIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEKTsKKwkJdWFzbV9pbF9ibmV6KHAsIHIsIHB0ZSwgbGlkKTsKKwl9CiAJaVBURV9MVyhwLCBwdGUsIHB0cik7CiB9CiAKQEAgLTEyNzIsNiArMTMyNCwzNCBAQAogCWJ1aWxkX3B0ZV9wcmVzZW50KCZwLCAmciwgSzAsIEsxLCBsYWJlbF9ub3BhZ2VfdGxibCk7CiAJaWYgKG00a2NfdGxicF93YXIoKSkKIAkJYnVpbGRfdGxiX3Byb2JlX2VudHJ5KCZwKTsKKworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQkvKgorCQkgKiBJZiB0aGUgcGFnZSBpcyBub3QgX1BBR0VfVkFMSUQsIFJJIG9yIFhJIGNvdWxkIG5vdAorCQkgKiBoYXZlIHRyaWdnZXJlZCBpdC4gIFNraXAgdGhlIGV4cGVuc2l2ZSB0ZXN0Li4KKwkJICovCisJCXVhc21faV9hbmRpKCZwLCBLMCwgSzAsIF9QQUdFX1ZBTElEKTsKKwkJdWFzbV9pbF9iZXF6KCZwLCAmciwgSzAsIGxhYmVsX3RsYmxfZ29hcm91bmQxKTsKKwkJdWFzbV9pX25vcCgmcCk7CisKKwkJdWFzbV9pX3RsYnIoJnApOworCQkvKiBFeGFtaW5lICBlbnRyeWxvIDAgb3IgMSBiYXNlZCBvbiBwdHIuICovCisJCXVhc21faV9hbmRpKCZwLCBLMCwgSzEsIHNpemVvZihwdGVfdCkpOworCQl1YXNtX2lfYmVxeigmcCwgSzAsIDgpOworCisJCVVBU01faV9NRkMwKCZwLCBLMCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0IGluIHRoZSBkZWxheSBzbG90Ki8KKwkJVUFTTV9pX01GQzAoJnAsIEswLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgaWYgcHRyIGlzIG9kZCAqLworCQkvKgorCQkgKiBJZiB0aGUgZW50cnlMbyAobm93IGluIEswKSBpcyB2YWxpZCAoYml0IDEpLCBSSSBvcgorCQkgKiBYSSBtdXN0IGhhdmUgdHJpZ2dlcmVkIGl0LgorCQkgKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMCwgMik7CisJCXVhc21faWxfYm5leigmcCwgJnIsIEswLCBsYWJlbF9ub3BhZ2VfdGxibCk7CisKKwkJdWFzbV9sX3RsYmxfZ29hcm91bmQxKCZsLCBwKTsKKwkJLyogUmVsb2FkIHRoZSBQVEUgdmFsdWUgKi8KKwkJaVBURV9MVygmcCwgSzAsIEsxKTsKKwl9CiAJYnVpbGRfbWFrZV92YWxpZCgmcCwgJnIsIEswLCBLMSk7CiAJYnVpbGRfcjQwMDBfdGxiY2hhbmdlX2hhbmRsZXJfdGFpbCgmcCwgJmwsICZyLCBLMCwgSzEpOwogCkBAIC0xMjg0LDYgKzEzNjQsNDAgQEAKIAlpUFRFX0xXKCZwLCBLMCwgSzEpOwogCWJ1aWxkX3B0ZV9wcmVzZW50KCZwLCAmciwgSzAsIEsxLCBsYWJlbF9ub3BhZ2VfdGxibCk7CiAJYnVpbGRfdGxiX3Byb2JlX2VudHJ5KCZwKTsKKworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQkvKgorCQkgKiBJZiB0aGUgcGFnZSBpcyBub3QgX1BBR0VfVkFMSUQsIFJJIG9yIFhJIGNvdWxkIG5vdAorCQkgKiBoYXZlIHRyaWdnZXJlZCBpdC4gIFNraXAgdGhlIGV4cGVuc2l2ZSB0ZXN0Li4KKwkJICovCisJCXVhc21faV9hbmRpKCZwLCBLMCwgSzAsIF9QQUdFX1ZBTElEKTsKKwkJdWFzbV9pbF9iZXF6KCZwLCAmciwgSzAsIGxhYmVsX3RsYmxfZ29hcm91bmQyKTsKKwkJdWFzbV9pX25vcCgmcCk7CisKKwkJdWFzbV9pX3RsYnIoJnApOworCQkvKiBFeGFtaW5lICBlbnRyeWxvIDAgb3IgMSBiYXNlZCBvbiBwdHIuICovCisJCXVhc21faV9hbmRpKCZwLCBLMCwgSzEsIHNpemVvZihwdGVfdCkpOworCQl1YXNtX2lfYmVxeigmcCwgSzAsIDgpOworCisJCVVBU01faV9NRkMwKCZwLCBLMCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0IGluIHRoZSBkZWxheSBzbG90Ki8KKwkJVUFTTV9pX01GQzAoJnAsIEswLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgaWYgcHRyIGlzIG9kZCAqLworCQkvKgorCQkgKiBJZiB0aGUgZW50cnlMbyAobm93IGluIEswKSBpcyB2YWxpZCAoYml0IDEpLCBSSSBvcgorCQkgKiBYSSBtdXN0IGhhdmUgdHJpZ2dlcmVkIGl0LgorCQkgKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMCwgMik7CisJCXVhc21faWxfYmVxeigmcCwgJnIsIEswLCBsYWJlbF90bGJsX2dvYXJvdW5kMik7CisJCS8qIFJlbG9hZCB0aGUgUFRFIHZhbHVlICovCisJCWlQVEVfTFcoJnAsIEswLCBLMSk7CisKKwkJLyoKKwkJICogV2UgY2xvYmJlcmVkIEMwX1BBR0VNQVNLLCByZXN0b3JlIGl0LiAgT24gdGhlIG90aGVyIGJyYW5jaAorCQkgKiBpdCBpcyByZXN0b3JlZCBpbiBidWlsZF9odWdlX3RsYl93cml0ZV9lbnRyeS4KKwkJICovCisJCWJ1aWxkX3Jlc3RvcmVfcGFnZW1hc2soJnAsICZyLCBLMCwgbGFiZWxfbm9wYWdlX3RsYmwpOworCisJCXVhc21fbF90bGJsX2dvYXJvdW5kMigmbCwgcCk7CisJfQogCXVhc21faV9vcmkoJnAsIEswLCBLMCwgKF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfVkFMSUQpKTsKIAlidWlsZF9odWdlX2hhbmRsZXJfdGFpbCgmcCwgJnIsICZsLCBLMCwgSzEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdWFzbS5jIGIvYXJjaC9taXBzL21tL3Vhc20uYwppbmRleCAwYTE2NWM1Li4xNTgxZTk4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdWFzbS5jCisrKyBiL2FyY2gvbWlwcy9tbS91YXNtLmMKQEAgLTE5LDggKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vaW5zdC5oPgogI2luY2x1ZGUgPGFzbS9lbGYuaD4KICNpbmNsdWRlIDxhc20vYnVncy5oPgotCi0jaW5jbHVkZSAidWFzbS5oIgorI2luY2x1ZGUgPGFzbS91YXNtLmg+CiAKIGVudW0gZmllbGRzIHsKIAlSUyA9IDB4MDAxLApAQCAtNjMsOCArNjIsOSBAQAogCWluc25fZHNybDMyLCBpbnNuX2Ryb3RyLCBpbnNuX2RzdWJ1LCBpbnNuX2VyZXQsIGluc25faiwgaW5zbl9qYWwsCiAJaW5zbl9qciwgaW5zbl9sZCwgaW5zbl9sbCwgaW5zbl9sbGQsIGluc25fbHVpLCBpbnNuX2x3LCBpbnNuX21mYzAsCiAJaW5zbl9tdGMwLCBpbnNuX29yaSwgaW5zbl9wcmVmLCBpbnNuX3JmZSwgaW5zbl9zYywgaW5zbl9zY2QsCi0JaW5zbl9zZCwgaW5zbl9zbGwsIGluc25fc3JhLCBpbnNuX3NybCwgaW5zbl9zdWJ1LCBpbnNuX3N3LAotCWluc25fdGxicCwgaW5zbl90bGJ3aSwgaW5zbl90bGJ3ciwgaW5zbl94b3IsIGluc25feG9yaSwgaW5zbl9kaW5zCisJaW5zbl9zZCwgaW5zbl9zbGwsIGluc25fc3JhLCBpbnNuX3NybCwgaW5zbl9yb3RyLCBpbnNuX3N1YnUsIGluc25fc3csCisJaW5zbl90bGJwLCBpbnNuX3RsYnIsIGluc25fdGxid2ksIGluc25fdGxid3IsIGluc25feG9yLCBpbnNuX3hvcmksCisJaW5zbl9kaW5zCiB9OwogCiBzdHJ1Y3QgaW5zbiB7CkBAIC0xMjYsOSArMTI2LDExIEBACiAJeyBpbnNuX3NsbCwgIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgc2xsX29wKSwgIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9zcmEsICBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHNyYV9vcCksICBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fc3JsLCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBzcmxfb3ApLCAgUlQgfCBSRCB8IFJFIH0sCisJeyBpbnNuX3JvdHIsICBNKHNwZWNfb3AsIDEsIDAsIDAsIDAsIHNybF9vcCksICBSVCB8IFJEIHwgUkUgfSwKIAl7IGluc25fc3VidSwgIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgc3VidV9vcCksICBSUyB8IFJUIHwgUkQgfSwKIAl7IGluc25fc3csICBNKHN3X29wLCAwLCAwLCAwLCAwLCAwKSwgIFJTIHwgUlQgfCBTSU1NIH0sCiAJeyBpbnNuX3RsYnAsICBNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgdGxicF9vcCksICAwIH0sCisJeyBpbnNuX3RsYnIsICBNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgdGxicl9vcCksICAwIH0sCiAJeyBpbnNuX3RsYndpLCAgTShjb3AwX29wLCBjb3Bfb3AsIDAsIDAsIDAsIHRsYndpX29wKSwgIDAgfSwKIAl7IGluc25fdGxid3IsICBNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgdGxid3Jfb3ApLCAgMCB9LAogCXsgaW5zbl94b3IsICBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHhvcl9vcCksICBSUyB8IFJUIHwgUkQgfSwKQEAgLTM3OSw5ICszODEsMTEgQEAKIElfdTJ1MXUzKF9zbGwpCiBJX3UydTF1Myhfc3JhKQogSV91MnUxdTMoX3NybCkKK0lfdTJ1MXUzKF9yb3RyKQogSV91M3UxdTIoX3N1YnUpCiBJX3UyczN1MShfc3cpCiBJXzAoX3RsYnApCitJXzAoX3RsYnIpCiBJXzAoX3RsYndpKQogSV8wKF90bGJ3cikKIElfdTN1MXUyKF94b3IpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYwppbmRleCA0YzNmY2ExLi4yY2I1YWU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9nY21wX2Jhc2U7CiBzdGF0aWMgdW5zaWduZWQgaW50IGlwaV9tYXBbTlJfQ1BVU107CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWlwc19pcnFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhtaXBzX2lycV9sb2NrKTsKIAogc3RhdGljIGlubGluZSBpbnQgbWlwc19wY2liaW9zX2lhY2sodm9pZCkKIHsKQEAgLTEwMyw3ICsxMDMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWlwc19pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbWlwc19pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxID0gbWlwc19wY2liaW9zX2lhY2soKTsKIApAQCAtMTEzLDcgKzExMyw3IEBACiAJICogb24gYW4gU01QIHN5c3RlbSwgIHNvIGxlYXZlIGl0IHVwIHRvIHRoZSBnZW5lcmljIGNvZGUuLi4KIAkgKi8KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1pcHNfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWlwc19pcnFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGlycTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vaW50ZXJydXB0cy5jIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKaW5kZXggM2E0NjdjMC4uOTQxOTE2ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMKQEAgLTE1NiwxOSArMTU2LDE5IEBACiAjZGVmaW5lIElSUUZMQUdfU1RBUlRFRAkJMQogI2RlZmluZSBJUlFGTEFHX0RJU0FCTEVECTIKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhwbng4MzN4X2lycV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBueDgzM3hfaXJxX2xvY2spOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBueDgzM3hfc3RhcnR1cF9waWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcGljX2lycSA9IGlycSAtIFBOWDgzM1hfUElDX0lSUV9CQVNFOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAogCWlycWZsYWdzW3BpY19pcnFdID0gSVJRRkxBR19TVEFSVEVEOwkvKiBzdGFydGVkLCBub3QgZGlzYWJsZWQgKi8KIAlwbng4MzN4X2hhcmRfZW5hYmxlX3BpY19pcnEocGljX2lycSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc3LDEyICsxNzcsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBwaWNfaXJxID0gaXJxIC0gUE5YODMzWF9QSUNfSVJRX0JBU0U7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxZmxhZ3NbcGljX2lycV0gPSAwOwkJCS8qIG5vdCBzdGFydGVkICovCiAJcG54ODMzeF9oYXJkX2Rpc2FibGVfcGljX2lycShwaWNfaXJxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2VuYWJsZV9waWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xOTAsMTMgKzE5MCwxMyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHBpY19pcnEgPSBpcnEgLSBQTlg4MzNYX1BJQ19JUlFfQkFTRTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnFmbGFnc1twaWNfaXJxXSAmPSB+SVJRRkxBR19ESVNBQkxFRDsKIAlpZiAoaXJxZmxhZ3NbcGljX2lycV0gPT0gSVJRRkxBR19TVEFSVEVEKQogCQlwbng4MzN4X2hhcmRfZW5hYmxlX3BpY19pcnEocGljX2lycSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcG54ODMzeF9kaXNhYmxlX3BpY19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTIwNCwxMiArMjA0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcGljX2lycSA9IGlycSAtIFBOWDgzM1hfUElDX0lSUV9CQVNFOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAogCWlycWZsYWdzW3BpY19pcnFdIHw9IElSUUZMQUdfRElTQUJMRUQ7CiAJcG54ODMzeF9oYXJkX2Rpc2FibGVfcGljX2lycShwaWNfaXJxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2Fja19waWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0yMjAsMTUgKzIyMCwxNSBAQAogewogfQogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBwbng4MzN4X3N0YXJ0dXBfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgcGluID0gaXJxIC0gUE5YODMzWF9HUElPX0lSUV9CQVNFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXBueDgzM3hfZ3Bpb19lbmFibGVfaXJxKHBpbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM2LDE4ICsyMzYsMTggQEAKIHsKIAlpbnQgcGluID0gaXJxIC0gUE5YODMzWF9HUElPX0lSUV9CQVNFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXBueDgzM3hfZ3Bpb19lbmFibGVfaXJxKHBpbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcG54ODMzeF9kaXNhYmxlX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IHBpbiA9IGlycSAtIFBOWDgzM1hfR1BJT19JUlFfQkFTRTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlwbng4MzN4X2dwaW9fZGlzYWJsZV9pcnEocGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2Fja19ncGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjU4LDkgKzI1OCw5IEBACiB7CiAJaW50IHBpbiA9IGlycSAtIFBOWDgzM1hfR1BJT19JUlFfQkFTRTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAlwbng4MzN4X2dwaW9fY2xlYXJfaXJxKHBpbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBwbng4MzN4X3NldF90eXBlX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCkBAIC0zNzcsNCArMzc3LDMgQEAKIAogCW1pcHNfaHB0X2ZyZXF1ZW5jeSAqPSA1MDAwMDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODMzeC9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9wcm9tLmMKaW5kZXggMmE0MWU4Zi4uMjk5NjlmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9wcm9tLmMKQEAgLTYyLDkgKzYyLDMgQEAKIHZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQogewogfQotCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiBhcmNzX2NtZGxpbmU7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vcHJvbS5jIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9tLmMKaW5kZXggMmY1Njc0NS4uMzJmNzAwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9tLmMKQEAgLTEyNCw2ICsxMjQsNSBAQAogCX0KIH0KIAotRVhQT1JUX1NZTUJPTChwcm9tX2dldGNtZGxpbmUpOwogRVhQT1JUX1NZTUJPTChnZXRfZXRoZXJuZXRfYWRkcik7CiBFWFBPUlRfU1lNQk9MKHN0cjJlYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMKaW5kZXggNzgzMmFkMi4uZjllYjFhYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYwpAQCAtNiw2ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSYWxmIEJhZWNobGUKICAqIENvcHlyaWdodCAoQykgMjAwNSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgogICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgpAQCAtMTQsOSArMTUsOSBAQAogCiAjaW5jbHVkZSAib3BfaW1wbC5oIgogCi1leHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4X29wcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Ci1leHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfcm05MDAwX29wcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Ci1leHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbG9vbmdzb24yX29wcyBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CitleHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbWlwc3h4X29wcyBfX3dlYWs7CitleHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfcm05MDAwX29wcyBfX3dlYWs7CitleHRlcm4gc3RydWN0IG9wX21pcHNfbW9kZWwgb3BfbW9kZWxfbG9vbmdzb24yX29wcyBfX3dlYWs7CiAKIHN0YXRpYyBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCAqbW9kZWw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwppbmRleCA0NzVmZjQ2Li4yOWUyMzI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgogICogQXV0aG9yOiBZYW5odWEgPHlhbmhAbGVtb3RlLmNvbT4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC00Nyw4ICs0Nyw2IEBACiAJaW50IGNudDFfZW5hYmxlZCwgY250Ml9lbmFibGVkOwogfSByZWc7CiAKLURFRklORV9TUElOTE9DSyhzYW1wbGVfbG9jayk7Ci0KIHN0YXRpYyBjaGFyICpvcHJvZmlkID0gIkxvb25nc29uUGVyZiI7CiBzdGF0aWMgaXJxcmV0dXJuX3QgbG9vbmdzb24yX3BlcmZjb3VudF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAvKiBDb21wdXRlIGFsbCBvZiB0aGUgcmVnaXN0ZXJzIGluIHByZXBhcmF0aW9uIGZvciBlbmFibGluZyBwcm9maWxpbmcuICAqLwpAQCAtMTE1LDcgKzExMyw2IEBACiAJdWludDY0X3QgY291bnRlciwgY291bnRlcjEsIGNvdW50ZXIyOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CiAJaW50IGVuYWJsZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qCiAJICogTE9PTkdTT04yIGRlZmluZXMgdHdvIDMyLWJpdCBwZXJmb3JtYW5jZSBjb3VudGVycy4KQEAgLTEzNiw4ICsxMzMsNiBAQAogCWNvdW50ZXIxID0gY291bnRlciAmIDB4ZmZmZmZmZmY7CiAJY291bnRlcjIgPSBjb3VudGVyID4+IDMyOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNhbXBsZV9sb2NrLCBmbGFncyk7Ci0KIAlpZiAoY291bnRlcjEgJiBMT09OR1NPTjJfUEVSRkNOVF9PVkVSRkxPVykgewogCQlpZiAocmVnLmNudDFfZW5hYmxlZCkKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgMCk7CkBAIC0xNDksOCArMTQ0LDYgQEAKIAkJY291bnRlcjIgPSByZWcucmVzZXRfY291bnRlcjI7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FtcGxlX2xvY2ssIGZsYWdzKTsKLQogCXdyaXRlX2MwX3BlcmZjbnQoKGNvdW50ZXIyIDw8IDMyKSB8IGNvdW50ZXIxKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtY29iYWx0LmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWNvYmFsdC5jCmluZGV4IDk1NTNiMTQuLmFjYWNkMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtY29iYWx0LmMKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC1jb2JhbHQuYwpAQCAtNTEsNiArNTEsNjcgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUNjQxMTEsCiAJIHF1YmVfcmFxX2dhbGlsZW9fZWFybHlfZml4dXApOwogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgY29iYWx0X2xlZ2FjeV9pZGVfcmVzb3VyY2VfZml4dXAoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSAoc3RydWN0IHBjaV9jb250cm9sbGVyICopZGV2LT5zeXNkYXRhOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaG9zZS0+aW9fb2Zmc2V0OworCXN0cnVjdCByZXNvdXJjZSBvcmlnID0gKnJlczsKKworCWlmICghKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB8fAorCSAgICAhKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BDSV9GSVhFRCkpCisJCXJldHVybjsKKworCXJlcy0+c3RhcnQgLT0gb2Zmc2V0OworCXJlcy0+ZW5kIC09IG9mZnNldDsKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImNvbnZlcnRlZCBsZWdhY3kgJXBSIHRvIGJ1cyAlcFJcbiIsCisJCSAgICZvcmlnLCByZXMpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgY29iYWx0X2xlZ2FjeV9pZGVfZml4dXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1MzIgY2xhc3M7CisJdTggcHJvZ2lmOworCisJLyoKKwkgKiBJZiB0aGUgSURFIGNvbnRyb2xsZXIgaXMgaW4gbGVnYWN5IG1vZGUsIHBjaV9zZXR1cF9kZXZpY2UoKSBmaWxscyBpbgorCSAqIHRoZSByZXNvdXJjZXMgd2l0aCB0aGUgbGVnYWN5IGFkZHJlc3NlcyB0aGF0IG5vcm1hbGx5IGFwcGVhciBvbiB0aGUKKwkgKiBQQ0kgYnVzLCBqdXN0IGFzIGlmIHdlIGhhZCByZWFkIHRoZW0gZnJvbSBhIEJBUi4KKwkgKgorCSAqIEhvd2V2ZXIsIHdpdGggdGhlIEdULTY0MTExLCB0aG9zZSBsZWdhY3kgYWRkcmVzc2VzLCBlLmcuLCAweDFmMCwKKwkgKiB3aWxsIG5ldmVyIGFwcGVhciBvbiB0aGUgUENJIGJ1cyBiZWNhdXNlIGl0IGNvbnZlcnRzIG1lbW9yeSBhY2Nlc3NlcworCSAqIGluIHRoZSBQQ0kgSS9PIHJlZ2lvbiAod2hpY2ggaXMgbmV2ZXIgYXQgYWRkcmVzcyB6ZXJvKSBpbnRvIEkvTyBwb3J0CisJICogYWNjZXNzZXMgd2l0aCBubyBhZGRyZXNzIHRyYW5zbGF0aW9uLgorCSAqCisJICogRm9yIGV4YW1wbGUsIGlmIEdUX0RFRl9QQ0kwX0lPX0JBU0UgaXMgMHgxMDAwMDAwMCwgYSBsb2FkIG9yIHN0b3JlCisJICogdG8gcGh5c2ljYWwgYWRkcmVzcyAweDEwMDAwMWYwIHdpbGwgYmVjb21lIGEgUENJIGFjY2VzcyB0byBJL08gcG9ydAorCSAqIDB4MTAwMDAxZjAuICBUaGVyZSdzIG5vIHdheSB0byBnZW5lcmF0ZSBhbiBhY2Nlc3MgdG8gSS9PIHBvcnQgMHgxZjAsCisJICogYnV0IHRoZSBWVDgyQzU4NiBJREUgY29udHJvbGxlciBkb2VzIHJlc3BvbmQgYXQgMHgxMDAwMDFmMCBiZWNhdXNlCisJICogaXQgb25seSBkZWNvZGVzIHRoZSBsb3cgMjQgYml0cyBvZiB0aGUgYWRkcmVzcy4KKwkgKgorCSAqIFdoZW4gdGhpcyBxdWlyayBydW5zLCB0aGUgcGNpX2RldiByZXNvdXJjZXMgc2hvdWxkIGNvbnRhaW4gYnVzCisJICogYWRkcmVzc2VzLCBub3QgTGludXggSS9PIHBvcnQgbnVtYmVycywgc28gY29udmVydCBsZWdhY3kgYWRkcmVzc2VzCisJICogbGlrZSAweDFmMCB0byBidXMgYWRkcmVzc2VzIGxpa2UgMHgxMDAwMDFmMC4gIExhdGVyLCB3ZSdsbCBjb252ZXJ0CisJICogdGhlbSBiYWNrIHdpdGggcGNpYmlvc19maXh1cF9idXMoKSBvciBwY2liaW9zX2J1c190b19yZXNvdXJjZSgpLgorCSAqLworCWNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OworCWlmIChjbGFzcyAhPSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUpCisJCXJldHVybjsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1BST0csICZwcm9naWYpOworCWlmICgocHJvZ2lmICYgMSkgPT0gMCkgeworCQljb2JhbHRfbGVnYWN5X2lkZV9yZXNvdXJjZV9maXh1cChkZXYsICZkZXYtPnJlc291cmNlWzBdKTsKKwkJY29iYWx0X2xlZ2FjeV9pZGVfcmVzb3VyY2VfZml4dXAoZGV2LCAmZGV2LT5yZXNvdXJjZVsxXSk7CisJfQorCWlmICgocHJvZ2lmICYgNCkgPT0gMCkgeworCQljb2JhbHRfbGVnYWN5X2lkZV9yZXNvdXJjZV9maXh1cChkZXYsICZkZXYtPnJlc291cmNlWzJdKTsKKwkJY29iYWx0X2xlZ2FjeV9pZGVfcmVzb3VyY2VfZml4dXAoZGV2LCAmZGV2LT5yZXNvdXJjZVszXSk7CisJfQorfQorCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8xLAorCSAgY29iYWx0X2xlZ2FjeV9pZGVfZml4dXApOworCiBzdGF0aWMgdm9pZCBxdWJlX3JhcV92aWFfYm1JREVfZml4dXAoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBzaG9ydCBjZmd3b3JkOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1sZW1vdGUyZi5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1sZW1vdGUyZi5jCmluZGV4IGNhZjJlZGUuLjRiOTc2OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtbGVtb3RlMmYuYworKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCiAJLyogU2VyaWFsIHNob3J0IGRldGVjdCBlbmFibGUgKi8KIAlfcmRtc3IoVVNCX01TUl9SRUcoVVNCX0NPTkZJRyksICZoaSwgJmxvKTsKLQlfd3Jtc3IoVVNCX01TUl9SRUcoVVNCX0NPTkZJRyksICgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCAzKSwgbG8pOworCV93cm1zcihVU0JfTVNSX1JFRyhVU0JfQ09ORklHKSwgKDEgPDwgMSkgfCAoMSA8PCAzKSwgbG8pOwogCiAJLyogc2V0dGluZyB0aGUgVVNCMi4wIG1pY3JvIGZyYW1lIGxlbmd0aCAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX0VIQ0lfRkxBREpfUkVHLCAweDIwMDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtbG9vbmdzb24yLmMgYi9hcmNoL21pcHMvcGNpL29wcy1sb29uZ3NvbjIuYwppbmRleCBhYTVkM2RhLi4yYmI0MDU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1sb29uZ3NvbjIuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy1sb29uZ3NvbjIuYwpAQCAtMSwxMyArMSwxMSBAQAogLyoKLSAqIGZ1bG9vbmcyZSBzcGVjaWZpYyBQQ0kgc3VwcG9ydC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDQgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCiAgKglBbGwgcmlnaHRzIHJlc2VydmVkLgogICoJQXV0aG9yczogQ2Fyc3RlbiBMYW5nZ2FhcmQgPGNhcnN0ZW5sQG1pcHMuY29tPgogICoJCSBNYWNpZWogVy4gUm96eWNraSA8bWFjcm9AbWlwcy5jb20+CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMgYi9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYwppbmRleCAzMjU0OGI1Li4wNGIzMTQ3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgJiYgUENJX0NPVU5URVJTICovCiAKLURFRklORV9TUElOTE9DSyhicGNpX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhicGNpX2xvY2spOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1iY200N3h4LmMgYi9hcmNoL21pcHMvcGNpL3BjaS1iY200N3h4LmMKaW5kZXggYmVhOWI2Yy4uNDU1ZjhlNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktYmNtNDd4eC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTQ3eHguYwpAQCAtNTcsNCArNTcsMyBAQAogCWRldi0+aXJxID0gcmVzOwogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1vY3Rlb24uYyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCmluZGV4IDljYjBjODAuLmQyNDhiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCkBAIC0yMDksMTYgKzIwOSwxNCBAQAogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX05BTzM4OgogCQkvKiBUaGlzIGlzIHJlYWxseSB0aGUgTkFDMzggKi8KIAkJcmV0dXJuICJBQUFBQURBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSI7Ci0JY2FzZSBDVk1YX0JPQVJEX1RZUEVfVEhVTkRFUjoKLQkJcmV0dXJuICIiOwotCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0VCSDMwMDA6Ci0JCXJldHVybiAiIjsKIAljYXNlIENWTVhfQk9BUkRfVFlQRV9FQkgzMTAwOgogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0NOMzAxMF9FVkJfSFM1OgogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0NOMzAwNV9FVkJfSFM1OgogCQlyZXR1cm4gIkFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIjsKIAljYXNlIENWTVhfQk9BUkRfVFlQRV9CQkdXX1JFRjoKIAkJcmV0dXJuICJBQUJDRCI7CisJY2FzZSBDVk1YX0JPQVJEX1RZUEVfVEhVTkRFUjoKKwljYXNlIENWTVhfQk9BUkRfVFlQRV9FQkgzMDAwOgogCWRlZmF1bHQ6CiAJCXJldHVybiAiIjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS5jIGIvYXJjaC9taXBzL3BjaS9wY2kuYwppbmRleCA5YTExYzIyLi4zOGJjMjgwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKQEAgLTQ5LDggKzQ5LDggQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOwpAQCAtNzMsNyArNzMsNyBAQAogCQkJc3RhcnQgPSBQQ0lCSU9TX01JTl9NRU0gKyBob3NlLT5tZW1fcmVzb3VyY2UtPnN0YXJ0OwogCX0KIAotCXJlcy0+c3RhcnQgPSBzdGFydDsKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2liaW9zX3NjYW5idXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQpAQCAtMjUxLDggKzI1MSw2IEBACiAJZm9yIChpID0gMDsgaSA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspIHsKIAkJaWYgKCFkZXYtPnJlc291cmNlW2ldLnN0YXJ0KQogCQkJY29udGludWU7Ci0JCWlmIChkZXYtPnJlc291cmNlW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9QQ0lfRklYRUQpCi0JCQljb250aW51ZTsKIAkJaWYgKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQogCQkJb2Zmc2V0ID0gaG9zZS0+aW9fb2Zmc2V0OwogCQllbHNlIGlmIChkZXYtPnJlc291cmNlW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfY2ljLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfY2ljLmMKaW5kZXggNTE3NTM1Ny4uOTRjOWMyYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX2NpYy5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9jaWMuYwpAQCAtMTMxLDQgKzEzMSwzIEBACiAJZWxzZQogCQlkb19JUlEoZmZzKHBlbmRpbmcpICsgaW50YmFzZSAtIDEpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmMKaW5kZXggYzMxN2EzNi4uZGI5OGQ4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uYwpAQCAtMzAzLDEyICszMDMsNiBAQAogfQogCiAvKiBQUk9NIGNvbW1hbmRsaW5lIGZ1bmN0aW9ucyAqLwotY2hhciAqcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLUVYUE9SVF9TWU1CT0wocHJvbV9nZXRjbWRsaW5lKTsKLQogdm9pZCAgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7CiAJY2hhciAqY3A7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uYwppbmRleCBmYzk5MGNiLi5kNmY4YmRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAJaWYgKGFjaykgewogCQlkb19pZGxlKCk7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVhZGluZyB0aGUgQXRtZWwgMjRDMzIvMjRDNjQgRUVQUk9NIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVhZGluZyB0aGUgQXRtZWwgMjRDMzIvMjRDNjQgRUVQUk9NXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uaCBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmgKaW5kZXggYTMxMjg4My4uZDZjN2VjNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uaAorKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5oCkBAIC02NSw0ICs2NSwzIEBACiBjb25zdCBjaGFyIHJ0cyA9IFRJT0NNX1JUUzsKIGNvbnN0IGNoYXIgZHRyID0gVElPQ01fRFRSOwogaW50IGZkOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaHQuYwppbmRleCA2NzgzODhmLi5mZDIyNTk3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LmMKQEAgLTM0NSwxNCArMzQ1LDEzIEBACiAgICAgICAgIHJldHVybiBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoZGV2KTsKIH0KIAotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAgICAgICAgIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotICAgICAgICAgICAgICAgIHJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7Ci0KICAgICAgICAgICAgICAgICAvKiBXZSBuZWVkIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBgbWlycm9yZWQnIFZHQSBwb3J0cwogICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciBzdHJhbmdlIElTQSBoYXJkd2FyZSwgc28gd2UgYWx3YXlzIHdhbnQgdGhlCiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc2VzIGtpbG9ieXRlIGFsaWduZWQuICAqLwpAQCAtMzYzLDggKzM2Miw5IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgc3RhcnQgPSAoc3RhcnQgKyAxMDI0IC0gMSkgJiB+KDEwMjQgLSAxKTsKLSAgICAgICAgICAgICAgICByZXMtPnN0YXJ0ID0gc3RhcnQ7CiAgICAgICAgIH0KKworCXJldHVybiBzdGFydDsKIH0KIAogc3RydWN0IHBjaV9vcHMgdGl0YW5fcGNpX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NtcC5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKaW5kZXggMzI2ZmU3YS4uZWZjOWU4OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKQEAgLTgsNyArOCw3IEBACiAKICNkZWZpbmUgTEFVTkNIU1RBQ0tfU0laRSAyNTYKIAotc3RhdGljIF9fY3B1aW5pdGRhdGEgREVGSU5FX1NQSU5MT0NLKGxhdW5jaF9sb2NrKTsKK3N0YXRpYyBfX2NwdWluaXRkYXRhIGFyY2hfc3BpbmxvY2tfdCBsYXVuY2hfbG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNlY29uZGFyeV9zcCBfX2NwdWluaXRkYXRhOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X2dwIF9fY3B1aW5pdGRhdGE7CkBAIC0yMCw3ICsyMCw3IEBACiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCXdoaWxlIChzcGluX2lzX2xvY2tlZCgmbGF1bmNoX2xvY2spKTsKKwl3aGlsZSAoYXJjaF9zcGluX2lzX2xvY2tlZCgmbGF1bmNoX2xvY2spKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSIJbW92ZQkkc3AsICUwCQlcbiIKQEAgLTM3LDcgKzM3LDcgQEAKICAqLwogdm9pZCBfX2luaXQgcHJvbV9ncmFiX3NlY29uZGFyeSh2b2lkKQogewotCXNwaW5fbG9jaygmbGF1bmNoX2xvY2spOworCWFyY2hfc3Bpbl9sb2NrKCZsYXVuY2hfbG9jayk7CiAKIAlwbW9uX2NwdXN0YXJ0KDEsICZwcm9tX3NtcF9ib290c3RyYXAsCiAJICAgICAgICAgICAgICBsYXVuY2hzdGFjayArIExBVU5DSFNUQUNLX1NJWkUsIDApOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJc2Vjb25kYXJ5X3NwID0gc3A7CiAJc2Vjb25kYXJ5X2dwID0gZ3A7CiAKLQlzcGluX3VubG9jaygmbGF1bmNoX2xvY2spOworCWFyY2hfc3Bpbl91bmxvY2soJmxhdW5jaF9sb2NrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlci9jcHUuYyBiL2FyY2gvbWlwcy9wb3dlci9jcHUuYwppbmRleCA3OTk1ZGY0Li4yNmE2ZWYxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXIvY3B1LmMKKysrIGIvYXJjaC9taXBzL3Bvd2VyL2NwdS5jCkBAIC0zLDkgKzMsOSBAQAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgogICogQXV0aG9yOiBIdSBIb25nYmluZyA8aHVoYkBsZW1vdGUuY29tPgotICogICAgICAgICBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogICAgICAgICBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKi8KICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUyBiL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUwppbmRleCAwY2Y4NmZiLi5kYmI1YzdiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMKKysrIGIvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TCkBAIC0zLDkgKzMsOSBAQAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgogICogQXV0aG9yOiBIdSBIb25nYmluZyA8aHVoYkBsZW1vdGUuY29tPgotICogICAgICAgICBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogICAgICAgICBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKi8KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKaW5kZXggNmE4ODIxOS4uMjE3NDI0MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYworKysgYi9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfZGV2aWNlcy5jCkBAIC0zNDAsMTAgKzM0MCw2IEBACiAKIAlzd2l0Y2ggKGFzaWMpIHsKIAljYXNlIEFTSUNfWkVVUzoKLQkJZnNfdXBkYXRlKDB4MDAwMCwgMHgxMSwgMHgwMiwgMCk7Ci0JCWJjbTFfdXNiMl9jdGwgPSAweDgwMzsKLQkJYnJlYWs7Ci0KIAljYXNlIEFTSUNfQ1JPTlVTOgogCWNhc2UgQVNJQ19DUk9OVVNMSVRFOgogCQlmc191cGRhdGUoMHgwMDAwLCAweDExLCAweDAyLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYwppbmRleCA4MGIyZWVkLi4zMjVmYWI5NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19pbnQuYwpAQCAtMzksMjEgKzM5LDIxIEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC1wb3dlcnR2L2FzaWNfcmVncy5oPgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFzaWNfaXJxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYXNpY19pcnFfbG9jayk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9pbnQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpcnE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXNpY19pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYXNpY19pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxID0gKGFzaWNfcmVhZChpbnRfaW50X3NjYW4pID4+IDQpIC0gMTsKIAogCWlmIChpcnEgPT0gMCB8fCBpcnEgPj0gTlJfSVJRUykKIAkJaXJxID0gLTE7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWNfaXJxX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBpcnE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMgYi9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMKaW5kZXggNjk4YjFlYS4uYWYyY2FlMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VydHYvcG93ZXJ0dl9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYwpAQCAtMjUsMTQgKzI1LDE1IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2FzbS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgInJlc2V0LmgiCkBAIC00MSwyNiArNDIsMjEgQEAKIAogLyoKICAqIE1hY3JvcyBmb3IgbG9hZGluZyBhZGRyZXNzZXMgYW5kIHN0b3JpbmcgcmVnaXN0ZXJzOgotICogUFRSX0xBCUxvYWQgdGhlIGFkZHJlc3MgaW50byBhIHJlZ2lzdGVyCi0gKiBMT05HX1MJU3RvcmUgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIGdpdmVuIHJlZ2lzdGVyLgotICogTE9OR19MCUxvYWQgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIGdpdmVuIHJlZ2lzdGVyCi0gKiBQVFJfQURESVUJQWRkIGEgY29uc3RhbnQgdmFsdWUgdG8gYSByZWdpc3RlciB1c2VkIGFzIGEgcG9pbnRlcgorICogTE9OR19MXwlTdHJpbmdpZmllZCB2ZXJzaW9uIG9mIExPTkdfTCBmb3IgdXNlIGluIGFzbSgpIHN0YXRlbWVudAorICogTE9OR19TXwlTdHJpbmdpZmllZCB2ZXJzaW9uIG9mIExPTkdfUyBmb3IgdXNlIGluIGFzbSgpIHN0YXRlbWVudAorICogUFRSX0xBXwlTdHJpbmdpZmllZCB2ZXJzaW9uIG9mIFBUUl9MQSBmb3IgdXNlIGluIGFzbSgpIHN0YXRlbWVudAogICogUkVHX1NJWkUJTnVtYmVyIG9mIDgtYml0IGJ5dGVzIGluIGEgZnVsbCB3aWR0aCByZWdpc3RlcgogICovCisjZGVmaW5lIExPTkdfTF8JCVZBTChMT05HX0wpICIgIgorI2RlZmluZSBMT05HX1NfCQlWQUwoTE9OR19TKSAiICIKKyNkZWZpbmUgUFRSX0xBXwkJVkFMKFBUUl9MQSkgIiAiCisKICNpZmRlZiBDT05GSUdfNjRCSVQKICN3YXJuaW5nIFRPRE86IDY0LWJpdCBjb2RlIG5lZWRzIHRvIGJlIHZlcmlmaWVkCi0jZGVmaW5lIFBUUl9MQQkJImRsYQkiCi0jZGVmaW5lIExPTkdfUwkJInNkCSIKLSNkZWZpbmUgTE9OR19MCQkibGQJIgotI2RlZmluZSBQVFJfQURESVUJImRhZGRpdQkiCiAjZGVmaW5lIFJFR19TSVpFCSI4IgkJLyogSW4gYnl0ZXMgKi8KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHXzMyQklUCi0jZGVmaW5lIFBUUl9MQQkJImxhCSIKLSNkZWZpbmUgTE9OR19TCQkic3cJIgotI2RlZmluZSBMT05HX0wJCSJsdwkiCi0jZGVmaW5lIFBUUl9BRERJVQkiYWRkaXUJIgogI2RlZmluZSBSRUdfU0laRQkiNCIJCS8qIEluIGJ5dGVzICovCiAjZW5kaWYKIApAQCAtMTEzLDkgKzEwOSw5IEBACiAJCSAqIHN0cnVjdHVyZS4gKi8KIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkJIi5zZXQJbm9hdFxuIgotCQkJTE9OR19TCQkiJGF0LCAlW2F0XVxuIgotCQkJTE9OR19TCQkiJDIsICVbdjBdXG4iCi0JCQlMT05HX1MJCSIkMywgJVt2MV1cbiIKKwkJCUxPTkdfU18JCSIkYXQsICVbYXRdXG4iCisJCQlMT05HX1NfCQkiJDIsICVbdjBdXG4iCisJCQlMT05HX1NfCQkiJDMsICVbdjFdXG4iCiAJCToKIAkJCVthdF0gIj1tIiAoYXQpLAogCQkJW3YwXSAiPW0iICh2MCksCkBAIC0xMjksNTQgKzEyNSw1NCBAQAogCQkJIm1vdmUJCSRhdCwgJVtwdF9yZWdzXVxuIgogCiAJCQkvKiBBcmd1bWVudCByZWdpc3RlcnMgKi8KLQkJCUxPTkdfUwkJIiQ0LCAiIFZBTChQVF9SNCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkNSwgIiBWQUwoUFRfUjUpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDYsICIgVkFMKFBUX1I2KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQ3LCAiIFZBTChQVF9SNykgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDQsICIgVkFMKFBUX1I0KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkNSwgIiBWQUwoUFRfUjUpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQ2LCAiIFZBTChQVF9SNikgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDcsICIgVkFMKFBUX1I3KSAiKCRhdClcbiIKIAogCQkJLyogVGVtcG9yYXJ5IHJlZ3MgKi8KLQkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SOCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkOSwgIiBWQUwoUFRfUjkpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDEwLCAiIFZBTChQVF9SMTApICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDExLCAiIFZBTChQVF9SMTEpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDEyLCAiIFZBTChQVF9SMTIpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDEzLCAiIFZBTChQVF9SMTMpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE0LCAiIFZBTChQVF9SMTQpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE1LCAiIFZBTChQVF9SMTUpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQ4LCAiIFZBTChQVF9SOCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDksICIgVkFMKFBUX1I5KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTAsICIgVkFMKFBUX1IxMCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDExLCAiIFZBTChQVF9SMTEpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxMiwgIiBWQUwoUFRfUjEyKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTMsICIgVkFMKFBUX1IxMykgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE0LCAiIFZBTChQVF9SMTQpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxNSwgIiBWQUwoUFRfUjE1KSAiKCRhdClcbiIKIAogCQkJLyogIlNhdmVkIiByZWdpc3RlcnMgKi8KLQkJCUxPTkdfUwkJIiQxNiwgIiBWQUwoUFRfUjE2KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQxNywgIiBWQUwoUFRfUjE3KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQxOCwgIiBWQUwoUFRfUjE4KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQxOSwgIiBWQUwoUFRfUjE5KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyMCwgIiBWQUwoUFRfUjIwKSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyMSwgIiBWQUwoUFRfUjIxKSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyMiwgIiBWQUwoUFRfUjIyKSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyMywgIiBWQUwoUFRfUjIzKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTYsICIgVkFMKFBUX1IxNikgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE3LCAiIFZBTChQVF9SMTcpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxOCwgIiBWQUwoUFRfUjE4KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTksICIgVkFMKFBUX1IxOSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDIwLCAiIFZBTChQVF9SMjApICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyMSwgIiBWQUwoUFRfUjIxKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjIsICIgVkFMKFBUX1IyMikgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDIzLCAiIFZBTChQVF9SMjMpICIoJGF0KVxuIgogCiAJCQkvKiBBZGQnbCB0ZW1wIHJlZ3MgKi8KLQkJCUxPTkdfUwkJIiQyNCwgIiBWQUwoUFRfUjI0KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyNSwgIiBWQUwoUFRfUjI1KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjQsICIgVkFMKFBUX1IyNCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDI1LCAiIFZBTChQVF9SMjUpICIoJGF0KVxuIgogCiAJCQkvKiBLZXJuZWwgdGVtcCByZWdzICovCi0JCQlMT05HX1MJCSIkMjYsICIgVkFMKFBUX1IyNikgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMjcsICIgVkFMKFBUX1IyNykgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDI2LCAiIFZBTChQVF9SMjYpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyNywgIiBWQUwoUFRfUjI3KSAiKCRhdClcbiIKIAogCQkJLyogR2xvYmFsIHBvaW50ZXIsIHN0YWNrIHBvaW50ZXIsIGZyYW1lIHBvaW50ZXIgYW5kCiAJCQkgKiByZXR1cm4gYWRkcmVzcyAqLwotCQkJTE9OR19TCQkiJGdwLCAiIFZBTChQVF9SMjgpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJHNwLCAiIFZBTChQVF9SMjkpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJGZwLCAiIFZBTChQVF9SMzApICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJHJhLCAiIFZBTChQVF9SMzEpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiRncCwgIiBWQUwoUFRfUjI4KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkc3AsICIgVkFMKFBUX1IyOSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJGZwLCAiIFZBTChQVF9SMzApICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiRyYSwgIiBWQUwoUFRfUjMxKSAiKCRhdClcbiIKIAogCQkJLyogTm93IHdlIGNhbiBnZXQgdGhlICRhdCBhbmQgdjAgcmVnaXN0ZXJzIGJhY2sgYW5kCiAJCQkgKiBzdG9yZSB0aGVtICovCi0JCQlMT05HX0wJCSIkOCwgJVthdF1cbiIKLQkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SMSkgIigkYXQpXG4iCi0JCQlMT05HX0wJCSIkOCwgJVt2MF1cbiIKLQkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SMikgIigkYXQpXG4iCi0JCQlMT05HX0wJCSIkOCwgJVt2MV1cbiIKLQkJCUxPTkdfUwkJIiQ4LCAiIFZBTChQVF9SMykgIigkYXQpXG4iCisJCQlMT05HX0xfCQkiJDgsICVbYXRdXG4iCisJCQlMT05HX1NfCQkiJDgsICIgVkFMKFBUX1IxKSAiKCRhdClcbiIKKwkJCUxPTkdfTF8JCSIkOCwgJVt2MF1cbiIKKwkJCUxPTkdfU18JCSIkOCwgIiBWQUwoUFRfUjIpICIoJGF0KVxuIgorCQkJTE9OR19MXwkJIiQ4LCAlW3YxXVxuIgorCQkJTE9OR19TXwkJIiQ4LCAiIFZBTChQVF9SMykgIigkYXQpXG4iCiAJCToKIAkJOgogCQkJW2F0XSAibSIgKGF0KSwKQEAgLTE5MSw4ICsxODcsOCBAQAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCQkiLnNldAlub2F0XG4iCiAJCSIxOlxuIgotCQkJUFRSX0xBCQkiJGF0LCAxYlxuIgotCQkJTE9OR19TCQkiJGF0LCAlW2NwMF9lcGNdXG4iCisJCQlQVFJfTEFfCQkiJGF0LCAxYlxuIgorCQkJTE9OR19TXwkJIiRhdCwgJVtjcDBfZXBjXVxuIgogCQk6CiAJCQlbY3AwX2VwY10gIj1tIiAobXlfcmVncy5jcDBfZXBjKQogCQk6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jCmluZGV4IGQ5Yzc5ZDguLmMzZDMwYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jCkBAIC0xMzMsNCArMTMzLDMgQEAKIAkJcmV0dXJuIChLRE1fVE9fUEhZUyhQQUdFX0FMSUdOKFNZTU1PTl9TVEtfQUREUihuYXNpZCwgMCkpKSA+PgogCQkJCQkJCQlQQUdFX1NISUZUKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbm1pLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYwppbmRleCA2YzVhNjMwLi5iYzRmYThkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYwpAQCAtMTcsMTEgKzE3LDEwIEBACiAjZW5kaWYKIAogI2RlZmluZSBDTk9ERUlEX05PTkUgKGNub2RlaWRfdCktMQotI2RlZmluZSBlbnRlcl9wYW5pY19tb2RlKCkJc3Bpbl9sb2NrKCZubWlfbG9jaykKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1hY2hyZWdfdDsKIAotREVGSU5FX1NQSU5MT0NLKG5taV9sb2NrKTsKK3N0YXRpYyBhcmNoX3NwaW5sb2NrX3Qgbm1pX2xvY2sgPSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VEOwogCiAvKgogICogTGV0cyBzZWUgd2hhdCBlbHNlIHdlIG5lZWQgdG8gZG8gaGVyZS4gU2V0IHVwIHNwLCBncD8KQEAgLTE5Myw5ICsxOTIsOSBAQAogCWF0b21pY19pbmMoJm5taWVkX2NwdXMpOwogI2VuZGlmCiAJLyoKLQkgKiBVc2UgZW50ZXJfcGFuaWNfbW9kZSB0byBhbGxvdyBvbmx5IDEgY3B1IHRvIHByb2NlZWQKKwkgKiBPbmx5IGFsbG93IDEgY3B1IHRvIHByb2NlZWQKIAkgKi8KLQllbnRlcl9wYW5pY19tb2RlKCk7CisJYXJjaF9zcGluX2xvY2soJm5taV9sb2NrKTsKIAogI2lmZGVmIFJFQUxfTk1JX1NJR05BTAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCmluZGV4IDVjMmJmMTEuLmQ4YjY1MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCkBAIC01MTIsMTAgKzUxMiw2IEBACiAJCQkJImxldmVsIik7CiAJCQlicmVhazsKIAotCQljYXNlIENSSU1FX0dCRTBfSVJRIC4uLiBDUklNRV9HQkUzX0lSUToKLQkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKLQkJCQkmY3JpbWVfZWRnZV9pbnRlcnJ1cHQsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQkJCWJyZWFrOwogCQljYXNlIENSSU1FX0NQVUVSUl9JUlE6CiAJCWNhc2UgQ1JJTUVfTUVNRVJSX0lSUToKIAkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKQEAgLTUyMywxMiArNTE5LDkgQEAKIAkJCQkibGV2ZWwiKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgQ1JJTUVfR0JFMF9JUlEgLi4uIENSSU1FX0dCRTNfSVJROgogCQljYXNlIENSSU1FX1JFX0VNUFRZX0VfSVJRIC4uLiBDUklNRV9SRV9JRExFX0VfSVJROgogCQljYXNlIENSSU1FX1NPRlQwX0lSUSAuLi4gQ1JJTUVfU09GVDJfSVJROgotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAotCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBDUklNRV9WSUNFX0lSUToKIAkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKIAkJCQkmY3JpbWVfZWRnZV9pbnRlcnJ1cHQsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwppbmRleCA0MDcwMjY4Li4wNmUyNWQ5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCkBAIC03MywxNCArNzMsMTQgQEAKIC8qIFN0b3JlIHRoZSBDUFUgaWQgKG5vdCB0aGUgbG9naWNhbCBudW1iZXIpICovCiBpbnQgYmNtMTQ4MF9pcnFfb3duZXJbQkNNMTQ4MF9OUl9JUlFTXTsKIAotREVGSU5FX1NQSU5MT0NLKGJjbTE0ODBfaW1yX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYmNtMTQ4MF9pbXJfbG9jayk7CiAKIHZvaWQgYmNtMTQ4MF9tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGhsX3NwYWNpbmc7CiAJdTY0IGN1cl9pbnRzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKIAlobF9zcGFjaW5nID0gMDsKIAlpZiAoKGlycSA+PSBCQ00xNDgwX05SX0lSUVNfSEFMRikgJiYgKGlycSA8PSBCQ00xNDgwX05SX0lSUVMpKSB7CiAJCWhsX3NwYWNpbmcgPSBCQ00xNDgwX0lNUl9ITF9TUEFDSU5HOwpAQCAtODksNyArODksNyBAQAogCWN1cl9pbnRzID0gX19fX3Jhd19yZWFkcShJT0FERFIoQV9CQ00xNDgwX0lNUl9NQVBQRVIoY3B1KSArIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX01BU0tfSCArIGhsX3NwYWNpbmcpKTsKIAljdXJfaW50cyB8PSAoKCh1NjQpIDEpIDw8IGlycSk7CiAJX19fX3Jhd193cml0ZXEoY3VyX2ludHMsIElPQUREUihBX0JDTTE0ODBfSU1SX01BUFBFUihjcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgaGxfc3BhY2luZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIGJjbTE0ODBfdW5tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQpAQCAtOTcsNyArOTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGhsX3NwYWNpbmc7CiAJdTY0IGN1cl9pbnRzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKIAlobF9zcGFjaW5nID0gMDsKIAlpZiAoKGlycSA+PSBCQ00xNDgwX05SX0lSUVNfSEFMRikgJiYgKGlycSA8PSBCQ00xNDgwX05SX0lSUVMpKSB7CiAJCWhsX3NwYWNpbmcgPSBCQ00xNDgwX0lNUl9ITF9TUEFDSU5HOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0JDTTE0ODBfSU1SX01BUFBFUihjcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgaGxfc3BhY2luZykpOwogCWN1cl9pbnRzICY9IH4oKCh1NjQpIDEpIDw8IGlycSk7CiAJX19fX3Jhd193cml0ZXEoY3VyX2ludHMsIElPQUREUihBX0JDTTE0ODBfSU1SX01BUFBFUihjcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgaGxfc3BhY2luZykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTIzLDcgKzEyMyw3IEBACiAJY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKGkpOwogCiAJLyogUHJvdGVjdCBhZ2FpbnN0IG90aGVyIGFmZmluaXR5IGNoYW5nZXJzIGFuZCBJTVIgbWFuaXB1bGF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKIAogCS8qIFN3aXp6bGUgZWFjaCBDUFUncyBJTVIgKGJ1dCBsZWF2ZSB0aGUgSVAgc2VsZWN0aW9uIGFsb25lKSAqLwogCW9sZF9jcHUgPSBiY20xNDgwX2lycV9vd25lcltpcnFdOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCQlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyAoaypCQ00xNDgwX0lNUl9ITF9TUEFDSU5HKSkpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbTE0ODBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCmluZGV4IDE1ZWE3NzguLmVkMjQ1M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCmluZGV4IDVlN2YyMDEuLmFiNDRhMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCkBAIC03MiwyMCArNzIsMjAgQEAKIC8qIFN0b3JlIHRoZSBDUFUgaWQgKG5vdCB0aGUgbG9naWNhbCBudW1iZXIpICovCiBpbnQgc2IxMjUwX2lycV9vd25lcltTQjEyNTBfTlJfSVJRU107CiAKLURFRklORV9TUElOTE9DSyhzYjEyNTBfaW1yX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soc2IxMjUwX2ltcl9sb2NrKTsKIAogdm9pZCBzYjEyNTBfbWFza19pcnEoaW50IGNwdSwgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU2NCBjdXJfaW50czsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOwogCWN1cl9pbnRzID0gX19fX3Jhd19yZWFkcShJT0FERFIoQV9JTVJfTUFQUEVSKGNwdSkgKwogCQkJCQlSX0lNUl9JTlRFUlJVUFRfTUFTSykpOwogCWN1cl9pbnRzIHw9ICgoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgc2IxMjUwX3VubWFza19pcnEoaW50IGNwdSwgaW50IGlycSkKQEAgLTkzLDEzICs5MywxMyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTY0IGN1cl9pbnRzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0lNUl9NQVBQRVIoY3B1KSArCiAJCQkJCVJfSU1SX0lOVEVSUlVQVF9NQVNLKSk7CiAJY3VyX2ludHMgJj0gfigoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMTUsNyArMTE1LDcgQEAKIAljcHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CiAKIAkvKiBQcm90ZWN0IGFnYWluc3Qgb3RoZXIgYWZmaW5pdHkgY2hhbmdlcnMgYW5kIElNUiBtYW5pcHVsYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIAogCS8qIFN3aXp6bGUgZWFjaCBDUFUncyBJTVIgKGJ1dCBsZWF2ZSB0aGUgSVAgc2VsZWN0aW9uIGFsb25lKSAqLwogCW9sZF9jcHUgPSBzYjEyNTBfaXJxX293bmVyW2lycV07CkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJX19fX3Jhd193cml0ZXEoY3VyX2ludHMsIElPQUREUihBX0lNUl9NQVBQRVIoY3B1KSArCiAJCQkJCVJfSU1SX0lOVEVSUlVQVF9NQVNLKSk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jIGIvYXJjaC9taXBzL3NuaS9ybTIwMC5jCmluZGV4IDMxZTI1ODMuLjkwYzU1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvcm0yMDAuYworKysgYi9hcmNoL21pcHMvc25pL3JtMjAwLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogICogcmVhZGIvd3JpdGViIHRvIGFjY2VzcyB0aGVtCiAgKi8KIAotREVGSU5FX1NQSU5MT0NLKHNuaV9ybTIwMF9pODI1OUFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhzbmlfcm0yMDBfaTgyNTlBX2xvY2spOwogI2RlZmluZSBQSUNfQ01EICAgIDB4MDAKICNkZWZpbmUgUElDX0lNUiAgICAweDAxCiAjZGVmaW5lIFBJQ19JU1IgICAgUElDX0NNRApAQCAtMTYxLDEzICsxNjEsMTMgQEAKIAogCWlycSAtPSBSTTIwMF9JODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IDEgPDwgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogCXJtMjAwX2NhY2hlZF9pcnFfbWFzayB8PSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQl3cml0ZWIoY2FjaGVkX3NsYXZlX21hc2ssIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwogCWVsc2UKIAkJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc25pX3JtMjAwX2VuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTE3NywxMyArMTc3LDEzIEBACiAKIAlpcnEgLT0gUk0yMDBfSTgyNTlBX0lSUV9CQVNFOwogCW1hc2sgPSB+KDEgPDwgaXJxKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAlybTIwMF9jYWNoZWRfaXJxX21hc2sgJj0gbWFzazsKIAlpZiAoaXJxICYgOCkKIAkJd3JpdGViKGNhY2hlZF9zbGF2ZV9tYXNrLCBybTIwMF9waWNfc2xhdmUgKyBQSUNfSU1SKTsKIAllbHNlCiAJCXdyaXRlYihjYWNoZWRfbWFzdGVyX21hc2ssIHJtMjAwX3BpY19tYXN0ZXIgKyBQSUNfSU1SKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNuaV9ybTIwMF9pODI1OUFfaXJxX3JlYWwodW5zaWduZWQgaW50IGlycSkKQEAgLTIxNiw3ICsyMTYsNyBAQAogCiAJaXJxIC09IFJNMjAwX0k4MjU5QV9JUlFfQkFTRTsKIAlpcnFtYXNrID0gMSA8PCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBMaWdodHdlaWdodCBzcHVyaW91cyBJUlEgZGV0ZWN0aW9uLiBXZSBkbyBub3Qgd2FudAogCSAqIHRvIG92ZXJkbyBzcHVyaW91cyBJUlEgaGFuZGxpbmcgLSBpdCdzIHVzdWFsbHkgYSBzaWduCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAkJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwogCQl3cml0ZWIoMHg2MCtpcnEsIHJtMjAwX3BpY19tYXN0ZXIgKyBQSUNfQ01EKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogCXJldHVybjsKIAogc3B1cmlvdXNfODI1OUFfaXJxOgpAQCAtMjk4LDcgKzI5OCw3IEBACiB7CiAJaW50IGlycTsKIAotCXNwaW5fbG9jaygmc25pX3JtMjAwX2k4MjU5QV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2spOwogCiAJLyogUGVyZm9ybSBhbiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgY3ljbGUgb24gY29udHJvbGxlciAxLiAqLwogCXdyaXRlYigweDBDLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0NNRCk7CS8qIHByZXBhcmUgZm9yIHBvbGwgKi8KQEAgLTMyNSw3ICszMjUsNyBAQAogCQkJaXJxID0gLTE7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnNuaV9ybTIwMF9pODI1OUFfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2spOwogCiAJcmV0dXJuIGxpa2VseShpcnEgPj0gMCkgPyBpcnEgKyBSTTIwMF9JODI1OUFfSVJRX0JBU0UgOiBpcnE7CiB9CkBAIC0zMzQsNyArMzM0LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAKIAl3cml0ZWIoMHhmZiwgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwogCXdyaXRlYigweGZmLCBybTIwMF9waWNfc2xhdmUgKyBQSUNfSU1SKTsKQEAgLTM1Miw3ICszNTIsNyBAQAogCXdyaXRlYihjYWNoZWRfbWFzdGVyX21hc2ssIHJtMjAwX3BpY19tYXN0ZXIgKyBQSUNfSU1SKTsKIAl3cml0ZWIoY2FjaGVkX3NsYXZlX21hc2ssIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCmluZGV4IGUyNzgwOWIuLjcxNzRkODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKQEAgLTM5OSwxMSArMzk5LDYgQEAKIAlyZXR1cm4gdHh4OV9zeXN0ZW1fdHlwZTsKIH0KIAotY2hhciAqIF9faW5pdCBwcm9tX2dldGNtZGxpbmUodm9pZCkKLXsKLQlyZXR1cm4gJihhcmNzX2NtZGxpbmVbMF0pOwotfQotCiBjb25zdCBjaGFyICpfX2luaXQgcHJvbV9nZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKIHsKIAljb25zdCBzMzIgKnN0cjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L2ptcjM5Mjcvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L2ptcjM5Mjcvc2V0dXAuYwppbmRleCAyNWU1MGE3Li4zMjA2Zjc2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9qbXIzOTI3L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9zZXR1cC5jCkBAIC02Nyw4ICs2Nyw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBqbXIzOTI3X21lbV9zZXR1cCh2b2lkKQogewotCWNoYXIgKmFyZ3B0cjsKLQogCXNldF9pb19wb3J0X2Jhc2UoSk1SMzkyN19QT1JUX0JBU0UgKyBKTVIzOTI3X1BDSUlPKTsKIAogCV9tYWNoaW5lX3Jlc3RhcnQgPSBqbXIzOTI3X21hY2hpbmVfcmVzdGFydDsKQEAgLTk3LDExICs5NSw2IEBACiAJam1yMzkyN19ib2FyZF9pbml0KCk7CiAKIAl0eDM5Mjdfc2lvX2luaXQoMCwgMSA8PCAxKTsgLyogY2gxOiBub0NUUyAqLwotI2lmZGVmIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JaWYgKCFzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKSkKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMxLDExNTIwMCIpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBqbXIzOTI3X3BjaV9zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mjcvc2V0dXAuYyBiL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3NldHVwLmMKaW5kZXggZWU0NjhlYS4uYjE1YWRmYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mjcvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9zZXR1cC5jCkBAIC0xODcsOCArMTg3LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTI3X21lbV9zZXR1cCh2b2lkKQogewotCWNoYXIgKmFyZ3B0cjsKLQogCWlmIChUWDQ5MjdfUkVWX1BDT0RFKCkgPT0gMHg0OTI3KSB7CiAJCXJidHg0OTI3X2Nsb2NrX2luaXQoKTsKIAkJdHg0OTI3X3NldHVwKCk7CkBAIC0yMTMsMTEgKzIxMSw2IEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDE1LCAxKTsKIAogCXR4NDkyN19zaW9faW5pdCgwLCAwKTsKLSNpZmRlZiBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRQotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWlmICghc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9IikpCi0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwzODQwMCIpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCByYnR4NDkyN19jbG9ja19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYwppbmRleCBkNjY1MDliLi5kNmU3MGRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMKQEAgLTE1Myw3ICsxNTMsNiBAQAogc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTM4X21lbV9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBwY2ZnOwotCWNoYXIgKmFyZ3B0cjsKIAogCWlmICh0eHg5X21hc3Rlcl9jbG9jayA9PSAwKQogCQl0eHg5X21hc3Rlcl9jbG9jayA9IDI1MDAwMDAwOyAvKiAyNU1IeiAqLwpAQCAtMTY4LDExICsxNjcsNiBAQAogI2VuZGlmCiAKIAl0eDQ5Mzhfc2lvX2luaXQoNzM3MjgwMCwgMCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEUKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQlpZiAoIXN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpKQotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzAsMzg0MDAiKTsKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzhfTVBMRVhfUElPNThfNjEKIAlwcl9pbmZvKCJQSU9TRUw6IGRpc2FibGluZyBib3RoIEFUQSBhbmQgTkFORCBzZWxlY3Rpb25cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jCmluZGV4IDc4Y2QxMzQuLmQ2MTE5YjggMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYworKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmMKQEAgLTMxLDkgKzMxLDExIEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBoYXZlIGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKKwogI2lmIDAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKIApAQCAtNDcsMTQgKzQ5LDEwIEBACiAJICAgICAgICk7CiAjZW5kaWYKIAotCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcmVzLT5zdGFydDsKKwlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSAmJiAoc3RhcnQgJiAweDMwMCkpCisJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwogCi0JCWlmIChzdGFydCAmIDB4MzAwKSB7Ci0JCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQotCX0KKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKaW5kZXggMmNiN2U3NS4uNmQ4NzIwYSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYworKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCkBAIC0zMzEsMTIgKzMzMSwxMCBAQAogc3RhdGljIGludCBfX2RldmluaXQgaXNfdmFsaWRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkeCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNOwotCXN0cnVjdCByZXNvdXJjZSAqZGV2ciA9ICZkZXYtPnJlc291cmNlW2lkeF07CisJc3RydWN0IHJlc291cmNlICpkZXZyID0gJmRldi0+cmVzb3VyY2VbaWR4XSwgKmJ1c3I7CiAKIAlpZiAoZGV2LT5idXMpIHsKLQkJZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgcmVzb3VyY2UgKmJ1c3IgPSBkZXYtPmJ1cy0+cmVzb3VyY2VbaV07Ci0KKwkJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShkZXYtPmJ1cywgYnVzciwgaSkgewogCQkJaWYgKCFidXNyIHx8IChidXNyLT5mbGFncyBeIGRldnItPmZsYWdzKSAmIHR5cGVfbWFzaykKIAkJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDdhNzNiNjEuLjQ3NzI3NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTM4LDYgKzM4LDE4IEBACiAKICNkZWZpbmUgZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZShzdGFydCxzaXplKSBcCiAJZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZV9hc20oKHN0YXJ0KSwgKHN0YXJ0KSsoc2l6ZSkpOworLyogdm1hcCByYW5nZSBmbHVzaGVzIGFuZCBpbnZhbGlkYXRlcy4gIEFyY2hpdGVjdHVyYWxseSwgd2UgZG9uJ3QgbmVlZAorICogdGhlIGludmFsaWRhdGUsIGJlY2F1c2UgdGhlIENQVSBzaG91bGQgcmVmdXNlIHRvIHNwZWN1bGF0ZSBvbmNlIGFuCisgKiBhcmVhIGhhcyBiZWVuIGZsdXNoZWQsIHNvIGludmFsaWRhdGUgaXMgbGVmdCBlbXB0eSAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdmFkZHI7CisKKwlmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlX2FzbShzdGFydCwgc3RhcnQgKyBzaXplKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkKK3sKK30KIAogI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQogI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMKaW5kZXggOWU3NGJmZS4uMzgzNzJlNyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYwpAQCAtMjU3LDEwICsyNTcsMTAgQEAKICAqIFNpbmNlIHdlIGFyZSBqdXN0IGNoZWNraW5nIGNhbmRpZGF0ZXMsIGRvbid0IHVzZSBhbnkgZmllbGRzIG90aGVyCiAgKiB0aGFuIHJlcy0+c3RhcnQuCiAgKi8KLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ25tZW50KQogewotCXJlc291cmNlX3NpemVfdCBtYXNrLCBhbGlnbjsKKwlyZXNvdXJjZV9zaXplX3QgbWFzaywgYWxpZ24sIHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCURCR19SRVMoInBjaWJpb3NfYWxpZ25fcmVzb3VyY2UoJXMsICglcCkgWyVseCwlbHhdLyV4LCAweCVseCwgMHglbHgpXG4iLAogCQlwY2lfbmFtZSgoKHN0cnVjdCBwY2lfZGV2ICopIGRhdGEpKSwKQEAgLTI3MiwxMCArMjcyLDEwIEBACiAKIAkvKiBBbGlnbiB0byBsYXJnZXN0IG9mIE1JTiBvciBpbnB1dCBzaXplICovCiAJbWFzayA9IG1heChhbGlnbm1lbnQsIGFsaWduKSAtIDE7Ci0JcmVzLT5zdGFydCArPSBtYXNrOwotCXJlcy0+c3RhcnQgJj0gfm1hc2s7CisJc3RhcnQgKz0gbWFzazsKKwlzdGFydCAmPSB+bWFzazsKIAotCS8qIFRoZSBjYWxsZXIgdXBkYXRlcyB0aGUgZW5kIGZpZWxkLCB3ZSBkb24ndC4gICovCisJcmV0dXJuIHN0YXJ0OwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggYmEzOTQ4Yy4uMTU1ZDU3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTU4LDcgKzU4LDcgQEAKIAogY29uZmlnIE5SX0lSUVMKIAlpbnQgIk51bWJlciBvZiB2aXJ0dWFsIGludGVycnVwdCBudW1iZXJzIgotCXJhbmdlIDMyIDUxMgorCXJhbmdlIDMyIDMyNzY4CiAJZGVmYXVsdCAiNTEyIgogCWhlbHAKIAkgIFRoaXMgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgaW50ZXJydXB0IG51bWJlcnMgdGhlIGtlcm5lbApAQCAtMTczLDYgKzE3Myw3IEBACiAKIGNvbmZpZyBPRgogCWRlZl9ib29sIHkKKwlzZWxlY3QgT0ZfRkxBVFRSRUUKIAogY29uZmlnIFBQQ19VREJHXzE2NTUwCiAJYm9vbApAQCAtMjQwLDYgKzI0MSwzMyBAQAogY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCiAJZGVmX2Jvb2wgeQogCitjb25maWcgUFBDX0FEVl9ERUJVR19SRUdTCisJYm9vbAorCWRlcGVuZHMgb24gNDB4IHx8IEJPT0tFCisJZGVmYXVsdCB5CisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0lBQ1MKKwlpbnQKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUworCWRlZmF1bHQgNCBpZiA0NHgKKwlkZWZhdWx0IDIKKworY29uZmlnIFBQQ19BRFZfREVCVUdfREFDUworCWludAorCWRlcGVuZHMgb24gUFBDX0FEVl9ERUJVR19SRUdTCisJZGVmYXVsdCAyCisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0RWQ1MKKwlpbnQKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUworCWRlZmF1bHQgMiBpZiA0NHgKKwlkZWZhdWx0IDAKKworY29uZmlnIFBQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJYm9vbAorCWRlcGVuZHMgb24gUFBDX0FEVl9ERUJVR19SRUdTICYmIDQ0eAorCWRlZmF1bHQgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cwppbmRleCA0MTRlZjhiLi4zMGY0MTIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cwpAQCAtNjAsNiArNjAsNyBAQAogCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsKIAkJCWRjci1jb250cm9sbGVyOwogCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyQzA+OwogCQl9OwogCX07CiAKQEAgLTE0Niw2ICsxNDcsMTMgQEAKIAkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OwogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQDE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDYwZ3QtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8NCAweDAwMTgwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHg0PjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBndCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpAQCAtMjc0LDYgKzI4Miw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAic2dtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHhmZmZmZmZmZj47CiAJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMGE+OwpAQCAtMzAyLDYgKzMxMSw3IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CiAJCQkJcGh5LW1vZGUgPSAic2dtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CiAJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMGI+OwpAQCAtMzMxLDYgKzM0MSw4IEBACiAJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CiAJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OwogCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlyeC1maWZvLXNpemUtZ2lnZSA9IDwxNjM4ND47CisJCQkJdHgtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OyAvKiBlbWFjMiYzIG9ubHkgKi8KIAkJCQlwaHktbW9kZSA9ICJzZ21paSI7CiAJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDAxPjsKIAkJCQlncGNzLWFkZHJlc3MgPSA8MHgwMDAwMDAwQz47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCmluZGV4IGM4NjExNGUuLjk3N2YyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCkBAIC0zNDEsNiArMzQxLDIyIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCX07CiAKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwppbmRleCA4MjBjMmIzLi44ZTRlZmZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCkBAIC0zMiw2ICszMiw3IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKIAl9OwogCiAJY3B1cyB7CkBAIC0zMzgsNiArMzM5LDIyIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCX07CiAKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKQEAgLTM1OCw3ICszNzUsNyBAQAogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJaW50ZXJydXB0cyA9IDwweDE4IDB4Mj47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmZjAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCTB4MDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgyCiAJCQkweDAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCmluZGV4IDMwOTExYWQuLmJiNzA2MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKQEAgLTc1LDE0ICs3NSw0OCBAQAogCQlpbnRlcnJ1cHRzID0gPDE5IDI+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAotCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMCAgICAgLy8gMTZNQiBCb290IGZsYXNoCi0JCQkgIDEgMCAweGU4MDAwMDAwIDB4MDgwMDAwMDAgICAgIC8vIFBhZ2VkIEZsYXNoIDAKLQkJCSAgMiAwIDB4ZTAwMDAwMDAgMHgwODAwMDAwMCAgICAgLy8gUGFnZWQgRmxhc2ggMQotCQkJICAzIDAgMHhmYzEwMDAwMCAweDAwMDIwMDAwICAgICAvLyBOVlJBTQotCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDA4MDAwICAgICAvLyBGUEdBCi0JCQkgIDUgMCAweGZjMDA4MDAwIDB4MDAwMDgwMDAgICAgIC8vIEFGSVggRlBHQQotCQkJICA2IDAgMHhmZDAwMDAwMCAweDAwODAwMDAwICAgICAvLyBJTyBGUEdBICg4LWJpdCkKLQkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47ICAgLy8gSU8gRlBHQSAoMzItYml0KQorCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMAkvLyAxNk1CIEJvb3QgZmxhc2gKKwkJCSAgMSAwIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAkvLyBQYWdlZCBGbGFzaCAwCisJCQkgIDIgMCAweGUwMDAwMDAwIDB4MDgwMDAwMDAJLy8gUGFnZWQgRmxhc2ggMQorCQkJICAzIDAgMHhmYzEwMDAwMCAweDAwMDIwMDAwCS8vIE5WUkFNCisJCQkgIDQgMCAweGZjMDAwMDAwIDB4MDAwMDgwMDAJLy8gRlBHQQorCQkJICA1IDAgMHhmYzAwODAwMCAweDAwMDA4MDAwCS8vIEFGSVggRlBHQQorCQkJICA2IDAgMHhmZDAwMDAwMCAweDAwODAwMDAwCS8vIElPIEZQR0EgKDgtYml0KQorCQkJICA3IDAgMHhmZDgwMDAwMCAweDAwODAwMDAwPjsJLy8gSU8gRlBHQSAoMzItYml0KQorCisJCS8qIGZsYXNoQDAsMCBpcyBhIG1pcnJvciBvZiBwYXJ0IG9mIHRoZSBtZW1vcnkgaW4gZmxhc2hAMSwwCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixzYmM2MTAtZmlybXdhcmUtbWlycm9yIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDEwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDAgMHgxMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCQkqLworCisJCWZsYXNoQDEsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixzYmM2MTAtcGFnZWQtZmxhc2giLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDEgMHgwIDB4ODAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDQ+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwIDB4NzgwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc4MDAwMDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHg3ODAwMDAwIDB4ODAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OwogCiAJCW52cmFtQDMsMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJudnJhbSI7CkBAIC0zMDUsNiArMzM5LDIyIEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCX07CiAKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOwogCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwppbmRleCBmNmY2MTg5Li5kNjJhNGZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgQU1DQyBHbGFjaWVyICg0NjBHVCkKICAqCi0gKiBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dApAQCAtNDIsNiArNDIsNyBAQAogCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsKIAkJCWRjci1jb250cm9sbGVyOwogCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyQzA+OwogCQl9OwogCX07CiAKQEAgLTEwNiw2ICsxMDcsMTYgQEAKIAkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CiAJfTsKIAorCUwyQzA6IGwyYyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGwyLWNhY2hlLTQ2MGd0IiwgImlibSxsMi1jYWNoZSI7CisJCWRjci1yZWcgPSA8MHgwMjAgMHgwMDgJCS8qIEludGVybmFsIFNSQU0gRENSJ3MgKi8KKwkJCSAgIDB4MDMwIDB4MDA4PjsJLyogTDIgY2FjaGUgRENSJ3MgKi8KKwkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJCS8qIDMyIGJ5dGVzICovCisJCWNhY2hlLXNpemUgPSA8MjYyMTQ0PjsJCS8qIEwyLCAyNTZLICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQlpbnRlcnJ1cHRzID0gPDExIDE+OworCX07CisKIAlwbGIgewogCQljb21wYXRpYmxlID0gImlibSxwbGItNDYwZ3QiLCAiaWJtLHBsYjQiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKQEAgLTExOCw2ICsxMjksMTMgQEAKIAkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OwogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQDE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDYwZ3QtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8NCAweDAwMTgwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHg0PjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBndCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpAQCAtMTg2LDYgKzIwNCwyOSBAQAogCQkJCQkJcmVnID0gPDB4MDNmYTAwMDAgMHgwMDA2MDAwMD47CiAJCQkJCX07CiAJCQkJfTsKKworCQkJCW5kZmNAMywwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJpYm0sbmRmYyI7CisJCQkJCXJlZyA9IDwweDAwMDAwMDAzIDB4MDAwMDAwMDAgMHgwMDAwMjAwMD47CisJCQkJCWNjciA9IDwweDAwMDAxMDAwPjsKKwkJCQkJYmFuay1zZXR0aW5ncyA9IDwweDgwMDAyMjIyPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQkJCW5hbmQgeworCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJCQkJcGFydGl0aW9uQDAgeworCQkJCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDEwMDAwMD47CisJCQkJCQl9OworCQkJCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwM2YwMDAwMD47CisJCQkJCQl9OworCQkJCQl9OworCQkJCX07CiAJCQl9OwogCiAJCQlVQVJUMDogc2VyaWFsQGVmNjAwMzAwIHsKQEAgLTIzNyw2ICsyNzgsMjAgQEAKIAkJCQlyZWcgPSA8MHhlZjYwMDcwMCAweDAwMDAwMDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAic3RtLG00MXQ4MCI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisJCQkJCWludGVycnVwdHMgPSA8MHgxOSAweDg+OworCQkJCX07CisJCQkJc3R0bUA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYWQsYWQ3NDE0IjsKKwkJCQkJcmVnID0gPDB4NDg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDE0IDB4OD47CisJCQkJfTsKIAkJCX07CiAKIAkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7CkBAIC0yNzUsNyArMzMwLDcgQEAKIAogCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwZTAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMjgzLDcgKzMzOCw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEwIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTQgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMGUwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGUwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CkBAIC0zMDUsNyArMzYwLDcgQEAKIAogCQkJRU1BQzE6IGV0aGVybmV0QGVmNjAwZjAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMT47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMzEzLDcgKzM2OCw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDExIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTUgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMGYwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGYwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MT47CkBAIC0zMzYsNyArMzkxLDcgQEAKIAogCQkJRU1BQzI6IGV0aGVybmV0QGVmNjAxMTAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMj47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMzQ0LDcgKzM5OSw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEyIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTYgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMTEwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMTEwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8Mj47CkBAIC0zNjYsNyArNDIxLDcgQEAKIAogCQkJRU1BQzM6IGV0aGVybmV0QGVmNjAxMjAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNCI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMz47CiAJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwpAQCAtMzc0LDcgKzQyOSw3IEBACiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDEzIDB4NAogCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTcgMHg0PjsKLQkJCQlyZWcgPSA8MHhlZjYwMTIwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMTIwMCAweDAwMDAwMGM0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8Mz47CkBAIC00MTQsNiArNDY5LDcgQEAKIAkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCiAJCQkgKi8KIAkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMCAweDAwMDAwMDBkIDB4ODAwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBjIDB4MGVlMDAwMDAgMHgwMDAwMDAwMCAweDAwMTAwMDAwCiAJCQkJICAweDAxMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBjIDB4MDgwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDEwMDAwPjsKIAogCQkJLyogSW5ib3VuZCAyR0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLwpAQCAtNDQ0LDYgKzUwMCw3IEBACiAJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZAogCQkJICovCiAJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAgMHgwMDAwMDAwZSAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwZiAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDEwMDAwMAogCQkJCSAgMHgwMTAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwZiAweDgwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAxMDAwMD47CiAKIAkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KQEAgLTQ4NSw2ICs1NDIsNyBAQAogCQkJICogbGF0ZXIgY2Fubm90IGJlIGNoYW5nZWQKIAkJCSAqLwogCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwIDB4MDAwMDAwMGUgMHg4MDAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHgwMDEwMDAwMCAweDAwMDAwMDAwIDB4MDAxMDAwMDAKIAkJCQkgIDB4MDEwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHg4MDAxMDAwMCAweDAwMDAwMDAwIDB4MDAwMTAwMDA+OwogCiAJCQkvKiBJbmJvdW5kIDJHQiByYW5nZSBzdGFydGluZyBhdCAwICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rYXRtYWkuZHRzCmluZGV4IDhmMzQ1ZGU5Li44Y2YyYzBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCQljb21wYXRpYmxlID0gImlibSxvcGItNDQwc3BlIiwgImlibSxvcGItNDQwZ3AiLCAiaWJtLG9wYiI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJcmFuZ2VzID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwNCAweGUwMDAwMDAwIDB4MjAwMDAwMDA+OworCQkJcmFuZ2VzID0gPDB4ZTAwMDAwMDAgMHgwMDAwMDAwNCAweGUwMDAwMDAwIDB4MjAwMDAwMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCiAKIAkJCUVCQzA6IGViYyB7CkBAIC0xNjUsMTQgKzE2NSw0NyBAQAogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCQkJCS8qIHJhbmdlcyBwcm9wZXJ0eSBpcyBzdXBwbGllZCBieSBVLUJvb3QgKi8KIAkJCQlpbnRlcnJ1cHRzID0gPDB4NSAweDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCisJCQkJbm9yX2ZsYXNoQDAsMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAxMDAwMDAwPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDFlMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxZTAwMDAgeworCQkJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDAwMjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInJvb3QiOworCQkJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMDIwMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkA0MDAwMDAgeworCQkJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJCQlyZWcgPSA8MHgwMDQwMDAwMCAweDAwYjYwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQGY2MDAwMCB7CisJCQkJCQlsYWJlbCA9ICJlbnYiOworCQkJCQkJcmVnID0gPDB4MDBmNjAwMDAgMHgwMDA0MDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkBmYTAwMDAgeworCQkJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQkJCXJlZyA9IDwweDAwZmEwMDAwIDB4MDAwNjAwMDA+OworCQkJCQl9OworCQkJCX07CiAJCQl9OwogCi0JCQlVQVJUMDogc2VyaWFsQDEwMDAwMjAwIHsKKwkJCVVBUlQwOiBzZXJpYWxAZjAwMDAyMDAgewogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDIwMCAweDAwMDAwMDA4PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDIwMCAweDAwMDAwMDA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDwweGEwMDAwMjAwPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KIAkJCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CkBAIC0xODAsMTAgKzIxMywxMCBAQAogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4ND47CiAJCQl9OwogCi0JCQlVQVJUMTogc2VyaWFsQDEwMDAwMzAwIHsKKwkJCVVBUlQxOiBzZXJpYWxAZjAwMDAzMDAgewogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDMwMCAweDAwMDAwMDA4PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDMwMCAweDAwMDAwMDA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDwweGEwMDAwMzAwPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsKQEAgLTE5MiwxMCArMjI1LDEwIEBACiAJCQl9OwogCiAKLQkJCVVBUlQyOiBzZXJpYWxAMTAwMDA2MDAgeworCQkJVUFSVDI6IHNlcmlhbEBmMDAwMDYwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOwotCQkJCXJlZyA9IDwweDEwMDAwNjAwIDB4MDAwMDAwMDg+OworCQkJCXJlZyA9IDwweGYwMDAwNjAwIDB4MDAwMDAwMDg+OwogCQkJCXZpcnR1YWwtcmVnID0gPDB4YTAwMDA2MDA+OwogCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCQljdXJyZW50LXNwZWVkID0gPDA+OwpAQCAtMjAzLDI3ICsyMzYsMjcgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDB4NSAweDQ+OwogCQkJfTsKIAotCQkJSUlDMDogaTJjQDEwMDAwNDAwIHsKKwkJCUlJQzA6IGkyY0BmMDAwMDQwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ0MHNwZSIsICJpYm0saWljLTQ0MGdwIiwgImlibSxpaWMiOwotCQkJCXJlZyA9IDwweDEwMDAwNDAwIDB4MDAwMDAwMTQ+OworCQkJCXJlZyA9IDwweGYwMDAwNDAwIDB4MDAwMDAwMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwogCQkJCWludGVycnVwdHMgPSA8MHgyIDB4ND47CiAJCQl9OwogCi0JCQlJSUMxOiBpMmNAMTAwMDA1MDAgeworCQkJSUlDMTogaTJjQGYwMDAwNTAwIHsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwc3BlIiwgImlibSxpaWMtNDQwZ3AiLCAiaWJtLGlpYyI7Ci0JCQkJcmVnID0gPDB4MTAwMDA1MDAgMHgwMDAwMDAxND47CisJCQkJcmVnID0gPDB4ZjAwMDA1MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDMgMHg0PjsKIAkJCX07CiAKLQkJCUVNQUMwOiBldGhlcm5ldEAxMDAwMDgwMCB7CisJCQlFTUFDMDogZXRoZXJuZXRAZjAwMDA4MDAgewogCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MHgwPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ0MHNwZSIsICJpYm0sZW1hYzQiOwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OwogCQkJCWludGVycnVwdHMgPSA8MHgxYyAweDQgMHgxZCAweDQ+OwotCQkJCXJlZyA9IDwweDEwMDAwODAwIDB4MDAwMDAwNzQ+OworCQkJCXJlZyA9IDwweGYwMDAwODAwIDB4MDAwMDAwNzQ+OwogCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07CiAJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CiAJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CkBAIC0yNDgsMTEgKzI4MSwxMSBAQAogCQkJcHJpbWFyeTsKIAkJCWxhcmdlLWluYm91bmQtd2luZG93czsKIAkJCWVuYWJsZS1tc2ktaG9sZTsKLQkJCXJlZyA9IDwweDAwMDAwMDBjIDB4MGVjMDAwMDAgICAweDAwMDAwMDA4CS8qIENvbmZpZyBzcGFjZSBhY2Nlc3MgKi8KLQkJCSAgICAgICAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMAkJLyogbm8gSUFDSyBjeWNsZXMgKi8KLQkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVkMDAwMDAgICAweDAwMDAwMDA0ICAgLyogU3BlY2lhbCBjeWNsZXMgKi8KLQkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAwMDAgMHgwMDAwMDEwMAkvKiBJbnRlcm5hbCByZWdpc3RlcnMgKi8KLQkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAxMDAgIDB4MDAwMDAwZmM+OwkvKiBJbnRlcm5hbCBtZXNzYWdpbmcgcmVnaXN0ZXJzICovCisJCQlyZWcgPSA8MHgwMDAwMDAwYyAweDBlYzAwMDAwIDB4MDAwMDAwMDggICAvKiBDb25maWcgc3BhY2UgYWNjZXNzICovCisJCQkgICAgICAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgICAvKiBubyBJQUNLIGN5Y2xlcyAqLworCQkJICAgICAgIDB4MDAwMDAwMGMgMHgwZWQwMDAwMCAweDAwMDAwMDA0ICAgLyogU3BlY2lhbCBjeWNsZXMgKi8KKwkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAwMDAgMHgwMDAwMDEwMCAgIC8qIEludGVybmFsIHJlZ2lzdGVycyAqLworCQkJICAgICAgIDB4MDAwMDAwMGMgMHgwZWM4MDEwMCAweDAwMDAwMGZjPjsgLyogSW50ZXJuYWwgbWVzc2FnaW5nIHJlZ2lzdGVycyAqLwogCiAJCQkvKiBPdXRib3VuZCByYW5nZXMsIG9uZSBtZW1vcnkgYW5kIG9uZSBJTywKIAkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCkBAIC00NTMsNiArNDg2LDYgQEAKIAl9OwogCiAJY2hvc2VuIHsKLQkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQDEwMDAwMjAwIjsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQGYwMDAwMjAwIjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwppbmRleCBjMzUzZGFjLi5jOWVmNmJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCkBAIC02MiwxNyArNjIsMTIgQEAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwotCQliYW5rLXdpZHRoID0gPDE+OwogCQkvLyBBRFMgaGFzIHR3byBIeW5peCA1MTJNQiBOYW5kIGZsYXNoIGNoaXBzIGluIGEgc2luZ2xlCi0JCS8vIHN0YWNrZWQgcGFja2FnZSAuCisJCS8vIHN0YWNrZWQgcGFja2FnZS4KIAkJY2hpcHMgPSA8Mj47Ci0JCW5hbmQwQDAgewotCQkJbGFiZWwgPSAibmFuZDAiOwotCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMjAwMDAwMD47IAkvLyBmaXJzdCAzMiBNQiBvZiBjaGlwIDAKLQkJfTsKLQkJbmFuZDFAMjAwMDAwMDAgewotCQkJbGFiZWwgPSAibmFuZDEiOwotCQkJcmVnID0gPDB4MjAwMDAwMDAgMHgwMjAwMDAwMD47IAkvLyBmaXJzdCAzMiBNQiBvZiBjaGlwIDEKKwkJbmFuZEAwIHsKKwkJCWxhYmVsID0gIm5hbmQiOworCQkJcmVnID0gPDB4MDAwMDAwMDAgMHg0MDAwMDAwMD47CS8vIDUxMk1CICsgNTEyTUIKIAkJfTsKIAl9OwogCkBAIC0xNjYsNiArMTYxLDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCisJCXJlc2V0QGUwMCB7CS8vIFJlc2V0IG1vZHVsZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1yZXNldCI7CisJCQlyZWcgPSA8MHhlMDAgMHgxMDA+OworCQl9OworCiAJCWNsb2NrQGYwMCB7CS8vIENsb2NrIGNvbnRyb2wKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtY2xvY2siOwogCQkJcmVnID0gPDB4ZjAwIDB4MTAwPjsKQEAgLTE4NSwxNyArMTg1LDE1IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQl9OwogCi0JCW1zY2FuQDEzMDAgeworCQljYW5AMTMwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEyIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwogCQkJcmVnID0gPDB4MTMwMCAweDgwPjsKIAkJfTsKIAotCQltc2NhbkAxMzgwIHsKKwkJY2FuQDEzODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJaW50ZXJydXB0cyA9IDwxMyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCXJlZyA9IDwweDEzODAgMHg4MD47CkBAIC0yMDUsMTcgKzIwMywzMSBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIiwgImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDE3MDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJCQlmc2wscHJlc2VydmUtY2xvY2tpbmc7CisKKwkJCWh3bW9uQDRhIHsKKwkJCQljb21wYXRpYmxlID0gImFkaSxhZDc0MTQiOworCQkJCXJlZyA9IDwweDRhPjsKKwkJCX07CisKKwkJCWVlcHJvbUA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdCwyNGMzMiI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gInN0bSxtNDF0NjIiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCX07CiAJCX07CiAKIAkJaTJjQDE3MjAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIiwgImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDE3MjAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEwIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwpAQCAtMjI1LDcgKzIzNyw2IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pMmMiLCAiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDI+OwogCQkJcmVnID0gPDB4MTc0MCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MTEgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CkBAIC0yNDQsNyArMjU1LDcgQEAKIAkJfTsKIAogCQlkaXNwbGF5QDIxMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1kaXUiLCAiZnNsLWRpdSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRpdSI7CiAJCQlyZWcgPSA8MHgyMTAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8NjQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CkBAIC0yNzcsNyArMjg4LDcgQEAKIAogCQkvLyBVU0IxIHVzaW5nIGV4dGVybmFsIFVMUEkgUEhZCiAJCS8vdXNiQDMwMDAgewotCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiLCAiZnNsLXVzYjItZHIiOworCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiOwogCQkvLwlyZWcgPSA8MHgzMDAwIDB4MTAwMD47CiAJCS8vCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkvLwkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTI4NSwxMiArMjk2LDExIEBACiAJCS8vCWludGVycnVwdHMgPSA8NDMgMHg4PjsKIAkJLy8JZHJfbW9kZSA9ICJvdGciOwogCQkvLwlwaHlfdHlwZSA9ICJ1bHBpIjsKLQkJLy8JcG9ydDE7CiAJCS8vfTsKIAogCQkvLyBVU0IwIHVzaW5nIGludGVybmFsIFVUTUkgUEhZCiAJCXVzYkA0MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtdXNiMi1kciIsICJmc2wtdXNiMi1kciI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiOwogCQkJcmVnID0gPDB4NDAwMCAweDEwMDA+OwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKQEAgLTI5OCw3ICszMDgsOCBAQAogCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OwogCQkJZHJfbW9kZSA9ICJvdGciOwogCQkJcGh5X3R5cGUgPSAidXRtaV93aWRlIjsKLQkJCXBvcnQwOworCQkJZnNsLGludmVydC1kcnZ2YnVzOworCQkJZnNsLGludmVydC1wd3ItZmF1bHQ7CiAJCX07CiAKIAkJLy8gSU8gY29udHJvbApAQCAtMzY1LDcgKzM3Niw3IEBACiAJCX07CiAKIAkJZG1hQDE0MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZG1hMiI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRtYSI7CiAJCQlyZWcgPSA8MHgxNDAwMCAweDE4MDA+OwogCQkJaW50ZXJydXB0cyA9IDw2NSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwppbmRleCA2ZDg5MmJhLi45MmZiMTc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCkBAIC01NCw5ICs1NCw1MiBAQAogCQlyZWcgPSA8MHgwIDB4MTAwMDAwMDA+OwogCX07CiAKLQliY3NyQGY4MDAwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OG1kcy1iY3NyIjsKLQkJcmVnID0gPDB4ZjgwMDAwMDAgMHg4MDAwPjsKKwlsb2NhbGJ1c0BlMDAwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OC1sb2NhbGJ1cyIsICJmc2wscHEzLWxvY2FsYnVzIiwKKwkJCSAgICAgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhlMDAwNTAwMCAweDEwMDA+OworCisJCXJhbmdlcyA9IDwweDAgMHgwIDB4ZmUwMDAwMDAgMHgwMjAwMDAwMAorCQkJICAweDEgMHgwIDB4ZjgwMDAwMDAgMHgwMDAwODAwMAorCQkJICAweDIgMHgwIDB4ZjAwMDAwMDAgMHgwNDAwMDAwMAorCQkJICAweDQgMHgwIDB4ZjgwMDgwMDAgMHgwMDAwODAwMAorCQkJICAweDUgMHgwIDB4ZjgwMTAwMDAgMHgwMDAwODAwMD47CisKKwkJbm9yQDAsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAweDAgMHgwMjAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQl9OworCisJCWJjc3JAMSwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLWJjc3IiOworCQkJcmVnID0gPDEgMCAweDgwMDA+OworCQkJcmFuZ2VzID0gPDAgMSAwIDB4ODAwMD47CisKKwkJCWJjc3I1OiBncGlvLWNvbnRyb2xsZXJAMTEgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtYmNzci1ncGlvIjsKKwkJCQlyZWcgPSA8MHg1IDB4MT47CisJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJfTsKKwkJfTsKKworCQlwaWJANCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtcGliIjsKKwkJCXJlZyA9IDw0IDAgMHg4MDAwPjsKKwkJfTsKKworCQlwaWJANSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtcGliIjsKKwkJCXJlZyA9IDw1IDAgMHg4MDAwPjsKKwkJfTsKIAl9OwogCiAJc29jODU2OEBlMDAwMDAwMCB7CkBAIC02MTAsNCArNjUzLDIwIEBACiAJCXNsZWVwID0gPCZwbWMgMHgwMDA4MDAwMCAgIC8qIGNvbnRyb2xsZXIgKi8KIAkJCSAmcG1jIDB4MDAwNDAwMDA+OyAvKiBtZXNzYWdlIHVuaXQgKi8KIAl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQlncmVlbiB7CisJCQlncGlvcyA9IDwmYmNzcjUgMSAwPjsKKwkJfTsKKworCQlhbWJlciB7CisJCQlncGlvcyA9IDwmYmNzcjUgMiAwPjsKKwkJfTsKKworCQlyZWQgeworCQkJZ3Bpb3MgPSA8JmJjc3I1IDMgMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCmluZGV4IGRlYzkwMWYuLmFmMjQ0ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDE0OjU1OjM0IDIwMTAKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzUKKyMgVHVlIEphbiAyNiAxNDo0MDo1OCAyMDEwCiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTEwNiw2ICsxMDYsNyBAQAogQ09ORklHX1JEX0daSVA9eQogIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtNDQyLDcgKzQ0Myw5MCBAQAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfUFJPQ19FVkVOVFM9eQotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CkBAIC01MDAsNyArNTg0LDcgQEAKICMKIAogIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTc2Myw3ICs4NDcsNiBAQAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC04MjAsNiArOTAzLDcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCmluZGV4IGE4NWY5MjcuLjYyMmQ4NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKQEAgLTE1NTcsNyArMTU1Nyw1MiBAQAogIwogIyBUSSBWTFlOUQogIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CitDT05GSUdfU1RBR0lORz15CisjIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRVQxMzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRUlMSEFVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDSE8gaXMgbm90IHNldAorIyBDT05GSUdfQ09NRURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTVVNfT0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19BTFRFUkFfUENJRV9DSERNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFOWlBPUlQgaXMgbm90IHNldAorCisjCisjIEFuZHJvaWQKKyMKKyMgQ09ORklHX0FORFJPSUQgaXMgbm90IHNldAorIyBDT05GSUdfRFNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPSE1FTEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0IzREZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9QSElTT04gaXMgbm90IHNldAorIyBDT05GSUdfUExBTjlBVVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NQQyBpcyBub3Qgc2V0CisKKyMKKyMgUXVhbGNvbW0gTVNNIENhbWVyYSBBbmQgVmlkZW8KKyMKKworIworIyBDYW1lcmEgU2Vuc29yIFNlbGVjdGlvbgorIworIyBDT05GSUdfSFlQRVJWX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSFlQRVJWX0JMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hZUEVSVl9ORVQgaXMgbm90IHNldAorQ09ORklHX1ZNRV9CVVM9eQorCisjCisjIFZNRSBCcmlkZ2UgRHJpdmVycworIworQ09ORklHX1ZNRV9UU0kxNDg9eQorCisjCisjIFZNRSBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfVk1FX1VTRVIgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKaW5kZXggNDU1NGQ5Yi4uNjJjMmI4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCkBAIC0yNjUsNyArMjY1LDcgQEAKICMKICMgS2VybmVsIG9wdGlvbnMKICMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX0hJR0hNRU09eQogQ09ORklHX1RJQ0tfT05FU0hPVD15CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKQEAgLTY1MSw3ICs2NTEsNyBAQAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09GX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCkBAIC02NzEsMTMgKzY3MSw5IEBACiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCiAjCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQogQ09ORklHX01URF9HRU5fUFJPQkU9eQotQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotIyBDT05GSUdfTVREX0NGSV9OT1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CkBAIC02ODgsNyArNjg0LDYgQEAKIENPTkZJR19NVERfQ0ZJX0kyPXkKICMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldApAQCAtMTY1Miw3ICsxNjQ3LDQ0IEBACiAjCiAjIFRJIFZMWU5RCiAjCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFHSU5HPXkKKyMgQ09ORklHX1NUQUdJTkdfRVhDTFVERV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVDEzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUU0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FSUxIQVVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JUF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01FREkgaXMgbm90IHNldAorIyBDT05GSUdfQVNVU19PTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMVEVSQV9QQ0lFX0NIRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQU5aUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQW5kcm9pZAorIworIyBDT05GSUdfQU5EUk9JRCBpcyBub3Qgc2V0CisjIENPTkZJR19EU1QgaXMgbm90IHNldAorIyBDT05GSUdfUE9ITUVMRlMgaXMgbm90IHNldAorIyBDT05GSUdfQjNERkcgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1BISVNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTEFOOUFVVEggaXMgbm90IHNldAorIyBDT05GSUdfSEVDSSBpcyBub3Qgc2V0CisjIENPTkZJR19WVDY2NTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NQQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRENfMTdGMzEwMVggaXMgbm90IHNldAorQ09ORklHX1ZNRV9CVVM9eQorCisjCisjIFZNRSBCcmlkZ2UgRHJpdmVycworIworIyBDT05GSUdfVk1FX0NBOTFDWDQyIGlzIG5vdCBzZXQKK0NPTkZJR19WTUVfVFNJMTQ4PXkKKworIworIyBWTUUgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1ZNRV9VU0VSIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTE3MjksNyArMTc2MSwxNyBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE4NzQsNiArMTkxNiw3IEBACiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ3MjcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWcKQEAgLTAsMCArMSwxNjk0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM2CisjIEZyaSBGZWIgIDUgMTE6NDg6MjkgMjAxMAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfUFBDX0JPT0szU18zMj15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX05SX0lSUVM9NTEyCitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX1JEX0xaTz15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDNTEyeD15CitDT05GSUdfUFBDX01QQzUxMjE9eQorQ09ORklHX01QQzUxMjFfQURTPXkKKyMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKK0NPTkZJR19JUElDPXkKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CisjIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VfSVJRPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0NBTj15CitDT05GSUdfQ0FOX1JBVz15CitDT05GSUdfQ0FOX0JDTT15CisKKyMKKyMgQ0FOIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfQ0FOX1ZDQU49eQorQ09ORklHX0NBTl9ERVY9eQorIyBDT05GSUdfQ0FOX0NBTENfQklUVElNSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fTVNDQU49eQorIyBDT05GSUdfQ0FOX1NKQTEwMDAgaXMgbm90IHNldAorCisjCisjIENBTiBVU0IgaW50ZXJmYWNlcworIworIyBDT05GSUdfQ0FOX0VNU19VU0IgaXMgbm90IHNldAorQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTPXkKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX1JPTT15CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX01QQzUxMjFfTkZDPXkKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CitDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCisjIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCisjCisjIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTEKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX1hJUD15CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKK0NPTkZJR19FRVBST01fQVQyND15CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKK0NPTkZJR19GSVhFRF9QSFk9eQorQ09ORklHX01ESU9fQklUQkFORz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAorQ09ORklHX0ZTX0VORVQ9eQorQ09ORklHX0ZTX0VORVRfTVBDNTEyMV9GRUM9eQorQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CitDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfTVBDNTJ4eD15CitDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEPTExNTIwMAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorQ09ORklHX01FRElBX1NVUFBPUlQ9eQorCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCitDT05GSUdfVklERU9fREVWPXkKK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj15CisjIENPTkZJR19WSURFT19BTExPV19WNEwxIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fTUVESUE9eQorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0lSX0NPUkU9eQorQ09ORklHX1ZJREVPX0lSPXkKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9eQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9eQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9eQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9eQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9eQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9eQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD15CitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PXkKK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9eQorQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPXkKK0NPTkZJR19WSURFT19WNEwyPXkKK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorQ09ORklHX1ZJREVPX0FEVl9ERUJVRz15CisjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1ZJREVPX0lSX0kyQz15CisKKyMKKyMgRW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBlciBjaGlwcworIworCisjCisjIEF1ZGlvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19UVkFVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTc0MzIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBOTg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE5ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RFQTY0MTVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RFQTY0MjAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTVNQMzQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUzUzNDUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1M0wzMkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTTUyNzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RMVjMyMEFJQzIzQiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19XTTg3NzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004NzM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZQMjdTTVBYIGlzIG5vdCBzZXQKKworIworIyBSRFMgZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1NBQTY1ODggaXMgbm90IHNldAorCisjCisjIFZpZGVvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19BRFY3MTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JUODE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JUODU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JUODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0tTMDEyNyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVjc2NzAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTVQ5VjAxMSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UQ004MjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMTAgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1NBQTcxMVg9eQorIyBDT05GSUdfVklERU9fU0FBNzE3WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDUxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVlBYMzIyMCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDI1ODQwIGlzIG5vdCBzZXQKKworIworIyBNUEVHIHZpZGVvIGVuY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDIzNDFYIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fU0FBNzEyNyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjcxNzAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQURWNzE3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19USFM3MzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjczNDMgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCisjCisjIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVBENjQwODMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkEgaXMgbm90IHNldAorQ09ORklHX1Y0TF9VU0JfRFJJVkVSUz15CisjIENPTkZJR19VU0JfVklERU9fQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVj15CitDT05GSUdfVVNCX0dTUENBPW0KKyMgQ09ORklHX1VTQl9NNTYwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RWMDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0w4NjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0NPTkVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9FVE9NUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfSkVJTElOSiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfTUFSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX09WNTE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9PVjUzNCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NPTklYSiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NROTA1QyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TVFYwNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9UNjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfWkMzWFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fUFZSVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRFBWUiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19FTTI4WFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1gyMzFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19VU0JWSVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTjlDMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAorQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfVVNCX1pSMzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldAorQ09ORklHX1JBRElPX0FEQVBURVJTPXkKKyMgQ09ORklHX0kyQ19TSTQ3MTMgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0k0NzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVBNTc2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19URUY2ODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX0ZTTF9ESVU9eQorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRFJBR09OUklTRT15CisjIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9LWUU9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX1RXSU5IQU49eQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CitDT05GSUdfSElEX0dSRUVOQVNJQT15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQorIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfVE9QU0VFRD15CitDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9aRVJPUExVUz15CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKK0NPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX0RFU0M9eQorIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9GU0w9eQorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTTQxVDgwPXkKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NUEM1MTIxPXkKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworIyBDT05GSUdfRlNMX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfTVBDNTEyWF9ETUE9eQorQ09ORklHX0RNQV9FTkdJTkU9eQorCisjCisjIERNQSBDbGllbnRzCisjCisjIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQyX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19YSVA9eQorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19VQklGU19GUz15CisjIENPTkZJR19VQklGU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUiBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlNfTFpPPXkKK0NPTkZJR19VQklGU19GU19aTElCPXkKKyMgQ09ORklHX1VCSUZTX0ZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorQ09ORklHX0NSQzE2PXkKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTz15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT15CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0xaTz15CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorQ09ORklHX1BQQ19DTE9DSz15CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKaW5kZXggN2IzODA0YS4uYjViMjU5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMTM3LDggKzEzNyw5IEBACiBDT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfS1BST0JFUz15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKQEAgLTE5MSw2ICsxOTIsNyBAQAogQ09ORklHX0xQQVJDRkc9eQogQ09ORklHX1BQQ19TTUxQQVI9eQogQ09ORklHX0NNTT15CitDT05GSUdfRFRMPXkKIENPTkZJR19QUENfSVNFUklFUz15CiAKICMKQEAgLTMyOCw5ICszMzAsMTAgQEAKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19QSFlQX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15Ci0jIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19OVU1BPXkKK0NPTkZJR19OT0RFU19TSElGVD04CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CkBAIC0zMzksNiArMzQyLDcgQEAKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQogQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CkBAIC0zNTQsMTEgKzM1OCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKIENPTkZJR19BUkNIX01FTU9SWV9QUk9CRT15CiBDT05GSUdfUFBDX0hBU19IQVNIXzY0Sz15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCi0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX1NNVD15CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgpAQCAtNzkwLDEyICs3OTUsMTIgQEAKIENPTkZJR19TQ1NJX0lQUl9UUkFDRT15CiBDT05GSUdfU0NTSV9JUFJfRFVNUD15CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1FMQV9GQz1tCiAjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MUEZDPW0KICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CkBAIC04NjcsOSArODcyLDggQEAKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15Ci1DT05GSUdfTURfUkFJRDEwPXkKLUNPTkZJR19NRF9SQUlENDU2PXkKLUNPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQ0NTY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTk4NCw3ICs5ODgsNyBAQAogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMEU9bQogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKQEAgLTEwMDYsMTkgKzEwMTAsMTkgQEAKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UMT1tCitDT05GSUdfQ0hFTFNJT19UMz1tCiBDT05GSUdfRUhFQT1tCiAjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKK0NPTkZJR19JWEdCRT1tCiBDT05GSUdfSVhHQj1tCi0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorQ09ORklHX1MySU89bQorQ09ORklHX01ZUkkxMEdFPW0KK0NPTkZJR19ORVRYRU5fTklDPW0KICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CiBDT05GSUdfUEFTRU1JX01BQz15Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUxYNF9FTj1tCitDT05GSUdfTUxYNF9DT1JFPW0KICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKQEAgLTExNjksNyArMTE3Myw3IEBACiBDT05GSUdfSEFTX1RYWDlfU0VSSUFMPXkKIENPTkZJR19TRVJJQUxfVFhYOV9OUl9VQVJUUz02CiBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfSlNNPW0KICMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKQEAgLTE1ODYsNyArMTU5MCw3IEBACiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPW0KICMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCkBAIC0xNjg2LDIxICsxNjkwLDIyIEBACiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EPW0KLSMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRD1tCitDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUz1tCitDT05GSUdfSU5GSU5JQkFORF9VU0VSX01FTT15CiBDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TPXkKIENPTkZJR19JTkZJTklCQU5EX01USENBPW0KIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKLSMgQ09ORklHX0lORklOSUJBTkRfSVBBVEggaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBBVEg9bQogQ09ORklHX0lORklOSUJBTkRfRUhDQT1tCiAjIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfTUxYNF9JTkZJTklCQU5EPW0KICMgQ09ORklHX0lORklOSUJBTkRfTkVTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KLSMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ00gaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ009eQogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQogIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX1NSUD1tCiBDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KIENPTkZJR19FREFDPXkKIApAQCAtMTc5OCw3ICsxODAzLDcgQEAKIENPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15Ci1DT05GSUdfSkZTX0ZTPXkKK0NPTkZJR19KRlNfRlM9bQogQ09ORklHX0pGU19QT1NJWF9BQ0w9eQogQ09ORklHX0pGU19TRUNVUklUWT15CiAjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldApAQCAtMTgxMSwxNCArMTgxNiwyMiBAQAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19PQ0ZTMl9GUz1tCitDT05GSUdfT0NGUzJfRlNfTzJDQj1tCitDT05GSUdfT0NGUzJfRlNfU1RBVFM9eQorQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0c9eQorIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRCBpcyBub3Qgc2V0CitDT05GSUdfQlRSRlNfRlM9bQorQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfTklMRlMyX0ZTPW0KIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9bQogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTE4NTEsNyArMTg2NCw3IEBACiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMjA3NSw3ICsyMDg4LDcgQEAKIENPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKIENPTkZJR19ERUJVR0dFUj15CiBDT05GSUdfSVJRU1RBQ0tTPXkKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1ZJUlFfREVCVUc9eQogQ09ORklHX0JPT1RYX1RFWFQ9eQogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBjYTlmZjlhLi40MWRlM2RkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMTU5LDcgKzE1OSw3IEBACiBDT05GSUdfS01PRD15CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKIENPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0tfQ09NUEFUPXkKQEAgLTE5MSw2ICsxOTEsNyBAQAogQ09ORklHX0xQQVJDRkc9eQogQ09ORklHX1BQQ19TTUxQQVI9eQogQ09ORklHX0NNTT15CitDT05GSUdfRFRMPXkKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CkBAIC0yNTUsNyArMjU2LDggQEAKICMgQ09ORklHX1BIWVBfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKIENPTkZJR19OVU1BPXkKLUNPTkZJR19OT0RFU19TSElGVD00CitDT05GSUdfTk9ERVNfU0hJRlQ9OAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CkBAIC0yNzAsNyArMjcyLDkgQEAKIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15Ci0jIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKQEAgLTcwNSw3ICs3MDksNyBAQAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPW0KLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ0NTY9bQogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTgwMCw3ICs4MDQsNyBAQAogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMEU9bQogIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKQEAgLTgxOCwxOCArODIyLDE4IEBACiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDE9bQorQ09ORklHX0NIRUxTSU9fVDM9bQogQ09ORklHX0VIRUE9eQogIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CitDT05GSUdfSVhHQkU9bQogQ09ORklHX0lYR0I9bQogQ09ORklHX1MySU89bQotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CitDT05GSUdfTVlSSTEwR0U9bQorQ09ORklHX05FVFhFTl9OSUM9bQogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0VOPW0KK0NPTkZJR19NTFg0X0NPUkU9bQogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldApAQCAtODk0LDcgKzg5OCw3IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNzEsNyArMTI3NSw3IEBACiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15CitDT05GSUdfVVNCX01PTj1tCiAjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIApAQCAtMTMxMSw3ICsxMzE1LDcgQEAKICMKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKK0NPTkZJR19VU0JfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldApAQCAtMTMyMiw3ICsxMzI2LDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKQEAgLTEzNzcsMTcgKzEzODEsMTcgQEAKIENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQotIyBDT05GSUdfSU5GSU5JQkFORF9JUEFUSCBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUEFUSD1tCiBDT05GSUdfSU5GSU5JQkFORF9FSENBPW0KICMgQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NTFg0X0lORklOSUJBTkQ9bQogIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTT15CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CiAjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfU1JQPW0KLSMgQ09ORklHX0lORklOSUJBTkRfSVNFUiBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldApAQCAtMTQ0Myw2ICsxNDQ3LDkgQEAKIENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKICMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQgaXMgbm90IHNldAorQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX05JTEZTMl9GUz1tCiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE0NTUsOCArMTQ2Miw4IEBACiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKIENPTkZJR19JU085NjYwX0ZTPXkKLUNPTkZJR19KT0xJRVQ9eQotQ09ORklHX1pJU09GUz15CisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQogQ09ORklHX1VERl9OTFM9eQogCkBAIC0xNTA4LDE0ICsxNTE1LDE0IEBACiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQotQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjJfQUNMPXkKIENPTkZJR19ORlNEX1YzPXkKIENPTkZJR19ORlNEX1YzX0FDTD15CiBDT05GSUdfTkZTRF9WND15CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15CitDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKQEAgLTE2ODEsMTIgKzE2ODgsMTIgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfSENBTExfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVD15CitDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUPXkKK0NPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hc20tY29tcGF0LmgKaW5kZXggOGYwZmU3OS4uYzFiNDc1YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXNtLWNvbXBhdC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfQVNNX0NPTVBBVF9ICiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgogCiAjaWZkZWYgX19BU1NFTUJMWV9fCiAjICBkZWZpbmUgc3RyaW5naWZ5X2luX2MoLi4uKQlfX1ZBX0FSR1NfXwpAQCAtMjQsNyArMjUsNyBAQAogI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubGxvbmcpCiAjZGVmaW5lIFBQQ19MT05HX0FMSUdOCXN0cmluZ2lmeV9pbl9jKC5iYWxpZ24gOCkKICNkZWZpbmUgUFBDX1RMTkVJCXN0cmluZ2lmeV9pbl9jKHRkbmVpKQotI2RlZmluZSBQUENfTExBUlgJc3RyaW5naWZ5X2luX2MobGRhcngpCisjZGVmaW5lIFBQQ19MTEFSWCh0LCBhLCBiLCBlaCkJUFBDX0xEQVJYKHQsIGEsIGIsIGVoKQogI2RlZmluZSBQUENfU1RMQ1gJc3RyaW5naWZ5X2luX2Moc3RkY3guKQogI2RlZmluZSBQUENfQ05UTFpMCXN0cmluZ2lmeV9pbl9jKGNudGx6ZCkKIApAQCAtNDYsNyArNDcsNyBAQAogI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubG9uZykKICNkZWZpbmUgUFBDX0xPTkdfQUxJR04Jc3RyaW5naWZ5X2luX2MoLmJhbGlnbiA0KQogI2RlZmluZSBQUENfVExORUkJc3RyaW5naWZ5X2luX2ModHduZWkpCi0jZGVmaW5lIFBQQ19MTEFSWAlzdHJpbmdpZnlfaW5fYyhsd2FyeCkKKyNkZWZpbmUgUFBDX0xMQVJYKHQsIGEsIGIsIGVoKQlQUENfTFdBUlgodCwgYSwgYiwgZWgpCiAjZGVmaW5lIFBQQ19TVExDWAlzdHJpbmdpZnlfaW5fYyhzdHdjeC4pCiAjZGVmaW5lIFBQQ19DTlRMWkwJc3RyaW5naWZ5X2luX2MoY250bHp3KQogI2RlZmluZSBQUENfTVRPQ1JGCXN0cmluZ2lmeV9pbl9jKG10Y3JmKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDQwMTI0ODMuLmI4ZjE1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTQ5LDEzICs0OSwxMyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyCQkjIGF0b21pY19hZGRfcmV0dXJuXG5cCiAJYWRkCSUwLCUxLCUwXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklMCwwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtODUsMTMgKzg1LDEzIEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTIJCSMgYXRvbWljX3N1Yl9yZXR1cm5cblwKIAlzdWJmCSUwLCUxLCUwXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklMCwwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtMTE5LDEzICsxMTksMTMgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMQkJIyBhdG9taWNfaW5jX3JldHVyblxuXAogCWFkZGljCSUwLCUwLDFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCSUwLDAsJTEgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAieGVyIiwgIm1lbW9yeSIpOwpAQCAtMTYzLDEzICsxNjMsMTMgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMQkJIyBhdG9taWNfZGVjX3JldHVyblxuXAogCWFkZGljCSUwLCUwLC0xXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgklMCwwLCUxXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAieGVyIiwgIm1lbW9yeSIpOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19hZGRfdW5sZXNzXG5cCiAJY21wdwkwLCUwLCUzIFxuXAogCWJlcS0JMmYgXG5cCkBAIC0yMDIsNyArMjAyLDcgQEAKIAlQUEM0MDVfRVJSNzcoMCwlMikKICIJc3R3Y3guCSUwLDAsJTEgXG5cCiAJYm5lLQkxYiBcbiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAiCXN1YmYJJTAsJTIsJTAgXG5cCiAyOiIKIAk6ICI9JnIiICh0KQpAQCAtMjI3LDcgKzIyNyw3IEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTEJCSMgYXRvbWljX2RlY19pZl9wb3NpdGl2ZVxuXAogCWNtcHdpCSUwLDFcblwKIAlhZGRpCSUwLCUwLC0xXG5cCkBAIC0yMzUsNyArMjM1LDcgQEAKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCSUwLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIJOiAiPSZiIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCkBAIC0yODYsMTIgKzI4NiwxMiBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9hZGRfcmV0dXJuXG5cCiAJYWRkCSUwLCUxLCUwXG5cCiAJc3RkY3guCSUwLDAsJTIgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC0zMjAsMTIgKzMyMCwxMiBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9zdWJfcmV0dXJuXG5cCiAJc3ViZgklMCwlMSwlMFxuXAogCXN0ZGN4LgklMCwwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtMzUyLDEyICszNTIsMTIgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljNjRfaW5jX3JldHVyblxuXAogCWFkZGljCSUwLCUwLDFcblwKIAlzdGRjeC4JJTAsMCwlMSBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJ4ZXIiLCAibWVtb3J5Iik7CkBAIC0zOTQsMTIgKzM5NCwxMiBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWM2NF9kZWNfcmV0dXJuXG5cCiAJYWRkaWMJJTAsJTAsLTFcblwKIAlzdGRjeC4JJTAsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgInhlciIsICJtZW1vcnkiKTsKQEAgLTQxOSwxMyArNDE5LDEzIEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZVxuXAogCWFkZGljLgklMCwlMCwtMVxuXAogCWJsdC0JMmZcblwKIAlzdGRjeC4JJTAsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCSJcblwKIDI6Igk6ICI9JnIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKQEAgLTQ1MSwxNCArNDUxLDE0IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWNfYWRkX3VubGVzc1xuXAogCWNtcGQJMCwlMCwlMyBcblwKIAliZXEtCTJmIFxuXAogCWFkZAklMCwlMiwlMCBcbiIKICIJc3RkY3guCSUwLDAsJTEgXG5cCiAJYm5lLQkxYiBcbiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAiCXN1YmYJJTAsJTIsJTAgXG5cCiAyOiIKIAk6ICI9JnIiICh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDU2ZjJmMmUuLjMwOTY0YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTY1LDcgKzY1LDcgQEAKIAl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKilfcDsJXAogCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQlcCiAJcHJlZml4CQkJCQlcCi0iMToiCVBQQ19MTEFSWCAiJTAsMCwlM1xuIgkJCVwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTMsMCkgIlxuIgkJXAogCXN0cmluZ2lmeV9pbl9jKG9wKSAiJTAsJTAsJTJcbiIJCVwKIAlQUEM0MDVfRVJSNzcoMCwlMykJCQlcCiAJUFBDX1NUTENYICIlMCwwLCUzXG4iCQkJXApAQCAtNzgsNyArNzgsNyBAQAogCiBERUZJTkVfQklUT1Aoc2V0X2JpdHMsIG9yLCAiIiwgIiIpCiBERUZJTkVfQklUT1AoY2xlYXJfYml0cywgYW5kYywgIiIsICIiKQotREVGSU5FX0JJVE9QKGNsZWFyX2JpdHNfdW5sb2NrLCBhbmRjLCBMV1NZTkNfT05fU01QLCAiIikKK0RFRklORV9CSVRPUChjbGVhcl9iaXRzX3VubG9jaywgYW5kYywgUFBDX1JFTEVBU0VfQkFSUklFUiwgIiIpCiBERUZJTkVfQklUT1AoY2hhbmdlX2JpdHMsIHhvciwgIiIsICIiKQogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQpAQCAtMTAzLDMxICsxMDMsMzUgQEAKIAogLyogTGlrZSBERUZJTkVfQklUT1AoKSwgd2l0aCBjaGFuZ2VzIHRvIHRoZSBhcmd1bWVudHMgdG8gJ29wJyBhbmQgdGhlIG91dHB1dAogICogb3BlcmFuZHMuICovCi0jZGVmaW5lIERFRklORV9URVNUT1AoZm4sIG9wLCBwcmVmaXgsIHBvc3RmaXgpCVwKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZm4oCQlcCi0JCXVuc2lnbmVkIGxvbmcgbWFzaywJCVwKLQkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqX3ApCVwKLXsJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBvbGQsIHQ7CQkJXAotCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKV9wOwlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCVwKLQlwcmVmaXgJCQkJCVwKLSIxOiIJUFBDX0xMQVJYICIlMCwwLCUzXG4iCQkJXAotCXN0cmluZ2lmeV9pbl9jKG9wKSAiJTEsJTAsJTJcbiIJCVwKLQlQUEM0MDVfRVJSNzcoMCwlMykJCQlcCi0JUFBDX1NUTENYICIlMSwwLCUzXG4iCQkJXAotCSJibmUtIDFiXG4iCQkJCVwKLQlwb3N0Zml4CQkJCQlcCi0JOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCQlcCi0JOiAiciIgKG1hc2spLCAiciIgKHApCQkJXAotCTogImNjIiwgIm1lbW9yeSIpOwkJCVwKLQlyZXR1cm4gKG9sZCAmIG1hc2spOwkJCVwKKyNkZWZpbmUgREVGSU5FX1RFU1RPUChmbiwgb3AsIHByZWZpeCwgcG9zdGZpeCwgZWgpCVwKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZm4oCQkJXAorCQl1bnNpZ25lZCBsb25nIG1hc2ssCQkJXAorCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpfcCkJCVwKK3sJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgb2xkLCB0OwkJCQlcCisJdW5zaWduZWQgbG9uZyAqcCA9ICh1bnNpZ25lZCBsb25nICopX3A7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQlcCisJcHJlZml4CQkJCQkJXAorIjE6IglQUENfTExBUlgoJTAsMCwlMyxlaCkgIlxuIgkJCVwKKwlzdHJpbmdpZnlfaW5fYyhvcCkgIiUxLCUwLCUyXG4iCQkJXAorCVBQQzQwNV9FUlI3NygwLCUzKQkJCQlcCisJUFBDX1NUTENYICIlMSwwLCUzXG4iCQkJCVwKKwkiYm5lLSAxYlxuIgkJCQkJXAorCXBvc3RmaXgJCQkJCQlcCisJOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCQkJXAorCTogInIiIChtYXNrKSwgInIiIChwKQkJCQlcCisJOiAiY2MiLCAibWVtb3J5Iik7CQkJCVwKKwlyZXR1cm4gKG9sZCAmIG1hc2spOwkJCQlcCiB9CiAKLURFRklORV9URVNUT1AodGVzdF9hbmRfc2V0X2JpdHMsIG9yLCBMV1NZTkNfT05fU01QLCBJU1lOQ19PTl9TTVApCi1ERUZJTkVfVEVTVE9QKHRlc3RfYW5kX3NldF9iaXRzX2xvY2ssIG9yLCAiIiwgSVNZTkNfT05fU01QKQotREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9jbGVhcl9iaXRzLCBhbmRjLCBMV1NZTkNfT05fU01QLCBJU1lOQ19PTl9TTVApCi1ERUZJTkVfVEVTVE9QKHRlc3RfYW5kX2NoYW5nZV9iaXRzLCB4b3IsIExXU1lOQ19PTl9TTVAsIElTWU5DX09OX1NNUCkKK0RFRklORV9URVNUT1AodGVzdF9hbmRfc2V0X2JpdHMsIG9yLCBQUENfUkVMRUFTRV9CQVJSSUVSLAorCSAgICAgIFBQQ19BQ1FVSVJFX0JBUlJJRVIsIDApCitERUZJTkVfVEVTVE9QKHRlc3RfYW5kX3NldF9iaXRzX2xvY2ssIG9yLCAiIiwKKwkgICAgICBQUENfQUNRVUlSRV9CQVJSSUVSLCAxKQorREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9jbGVhcl9iaXRzLCBhbmRjLCBQUENfUkVMRUFTRV9CQVJSSUVSLAorCSAgICAgIFBQQ19BQ1FVSVJFX0JBUlJJRVIsIDApCitERUZJTkVfVEVTVE9QKHRlc3RfYW5kX2NoYW5nZV9iaXRzLCB4b3IsIFBQQ19SRUxFQVNFX0JBUlJJRVIsCisJICAgICAgUFBDX0FDUVVJUkVfQkFSUklFUiwgMCkKIAogc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwKIAkJCQkgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKQEAgLTE1OCw3ICsxNjIsNyBAQAogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fY2xlYXJfYml0X3VubG9jayhpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oTFdTWU5DX09OX1NNUCAiIiA6OjogIm1lbW9yeSIpOworCV9fYXNtX18gX192b2xhdGlsZV9fKFBQQ19SRUxFQVNFX0JBUlJJRVIgIiIgOjo6ICJtZW1vcnkiKTsKIAlfX2NsZWFyX2JpdChuciwgYWRkcik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKaW5kZXggODBmMzE1ZS4uYWJiODMzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKQEAgLTM4MSw5ICszODEsOSBAQAogI2RlZmluZSBDUFVfRlRSU19HRU5FUklDXzMyCShDUFVfRlRSX0NPTU1PTiB8IENQVV9GVFJfTk9EU0lTUkFMSUdOKQogCiAvKiA2NC1iaXQgQ1BVcyAqLwotI2RlZmluZSBDUFVfRlRSU19QT1dFUjMJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCisjZGVmaW5lIENQVV9GVFJTX1BPV0VSMwkoQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfSUFCUiB8IENQVV9GVFJfUFBDX0xFKQotI2RlZmluZSBDUFVfRlRSU19SUzY0CShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAorI2RlZmluZSBDUFVfRlRSU19SUzY0CShDUFVfRlRSX1VTRV9UQiB8IFwKIAkgICAgQ1BVX0ZUUl9JQUJSIHwgXAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9DVFJMKQogI2RlZmluZSBDUFVfRlRSU19QT1dFUjQJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGltZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAppbmRleCBmYTE5ZjNmLi44YmRjNmE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGltZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKQEAgLTczLDEwICs3Myw5IEBACiBzdGF0aWMgaW5saW5lIGNwdXRpbWVfdCBjcHV0aW1lX3RvX3NjYWxlZChjb25zdCBjcHV0aW1lX3QgY3QpCiB7CiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NQVVJSKSAmJgotCSAgICBwZXJfY3B1KGNwdXRpbWVfbGFzdF9kZWx0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSkKLQkJcmV0dXJuIGN0ICoKLQkJCXBlcl9jcHUoY3B1dGltZV9zY2FsZWRfbGFzdF9kZWx0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKS8KLQkJCXBlcl9jcHUoY3B1dGltZV9sYXN0X2RlbHRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCSAgICBfX2dldF9jcHVfdmFyKGNwdXRpbWVfbGFzdF9kZWx0YSkpCisJCXJldHVybiBjdCAqIF9fZ2V0X2NwdV92YXIoY3B1dGltZV9zY2FsZWRfbGFzdF9kZWx0YSkgLworCQkJICAgIF9fZ2V0X2NwdV92YXIoY3B1dGltZV9sYXN0X2RlbHRhKTsKIAlyZXR1cm4gY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mZWF0dXJlLWZpeHVwcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmgKaW5kZXggY2JkNGRmYS4uOTZhN2QwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmgKQEAgLTE2NSw3ICsxNjUsNyBAQAogCS5wdXNoc2VjdGlvbiBzZWN0LCJhIjsJCQkJXAogCS5hbGlnbiAyOwkJCQkJXAogbGFiZWwjIzM6CQkJCQkgICAgICAgCVwKLQkubG9uZyBsYWJlbCMjMWItbGFiZWwjIzNiOwkJCVwKKwlGVFJfRU5UUllfT0ZGU0VUIGxhYmVsIyMxYi1sYWJlbCMjM2I7CQlcCiAJLnBvcHNlY3Rpb247CiAKICNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX0ZFQVRVUkVfRklYVVBTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdXRleC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z1dGV4LmgKaW5kZXggOTY5NmNjMy4uN2M1ODllZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z1dGV4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z1dGV4LmgKQEAgLTExLDcgKzExLDcgQEAKIAogI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcChpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKSBcCiAgIF9fYXNtX18gX192b2xhdGlsZSAoIFwKLQlMV1NZTkNfT05fU01QIFwKKwlQUENfUkVMRUFTRV9CQVJSSUVSIFwKICIxOglsd2FyeAklMCwwLCUyXG4iIFwKIAlpbnNuIFwKIAlQUEM0MDVfRVJSNzcoMCwgJTIpIFwKQEAgLTkwLDE0ICs5MCwxNCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgIExXU1lOQ19PTl9TTVAKKyAgICAgICAgUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6ICAgICBsd2FyeCAgICUwLDAsJTIgICAgICAgICAjIGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljXG5cCiAgICAgICAgIGNtcHcgICAgMCwlMCwlM1xuXAogICAgICAgICBibmUtICAgIDNmXG4iCiAgICAgICAgIFBQQzQwNV9FUlI3NygwLCUyKQogIjI6ICAgICBzdHdjeC4gICU0LDAsJTJcblwKICAgICAgICAgYm5lLSAgICAxYlxuIgotICAgICAgICBJU1lOQ19PTl9TTVAKKyAgICAgICAgUFBDX0FDUVVJUkVfQkFSUklFUgogIjM6CS5zZWN0aW9uIC5maXh1cCxcImF4XCJcblwKIDQ6CWxpCSUwLCU1XG5cCiAJYgkzYlxuXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggZmIzYzA1YS4uMzE0N2EyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xICsxLDI5IEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgorI2lmbmRlZiBfQVNNX1BPV0VSUENfSEFSRElSUV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKKwl1bnNpZ25lZCBpbnQgdGltZXJfaXJxczsKKwl1bnNpZ25lZCBpbnQgcG11X2lycXM7CisJdW5zaWduZWQgaW50IG1jZV9leGNlcHRpb25zOworCXVuc2lnbmVkIGludCBzcHVyaW91c19pcnFzOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworREVDTEFSRV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKGlycV9jcHVzdGF0X3QsIGlycV9zdGF0KTsKKworI2RlZmluZSBfX0FSQ0hfSVJRX1NUQVQKKworI2RlZmluZSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5fX3NvZnRpcnFfcGVuZGluZworCitzdGF0aWMgaW5saW5lIHZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlwcmludGsoS0VSTl9DUklUICJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOworfQorCitleHRlcm4gdTY0IGFyY2hfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpOworI2RlZmluZSBhcmNoX2lycV9zdGF0X2NwdQlhcmNoX2lycV9zdGF0X2NwdQorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaAppbmRleCA4NGI0NTdhLi5jZTU4YzgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaApAQCAtMjQsNyArMjQsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTIJCSMgbG9jYWxfYWRkX3JldHVyblxuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMiwwKSAiCQkJIyBsb2NhbF9hZGRfcmV0dXJuXG5cCiAJYWRkCSUwLCUxLCUwXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAJUFBDX1NUTENYCSIlMCwwLCUyIFxuXApAQCAtNDMsNyArNDMsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTIJCSMgbG9jYWxfc3ViX3JldHVyblxuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMiwwKSAiCQkJIyBsb2NhbF9zdWJfcmV0dXJuXG5cCiAJc3ViZgklMCwlMSwlMFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogCVBQQ19TVExDWAkiJTAsMCwlMiBcblwKQEAgLTYwLDcgKzYwLDcgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUxCQkjIGxvY2FsX2luY19yZXR1cm5cblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTEsMCkgIgkJCSMgbG9jYWxfaW5jX3JldHVyblxuXAogCWFkZGljCSUwLCUwLDFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKIAlQUENfU1RMQ1gJIiUwLDAsJTEgXG5cCkBAIC04Nyw3ICs4Nyw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWAkiJTAsMCwlMQkJIyBsb2NhbF9kZWNfcmV0dXJuXG5cCisiMToiCVBQQ19MTEFSWCglMCwwLCUxLDApICIJCQkjIGxvY2FsX2RlY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwtMVxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQogCVBQQ19TVExDWAkiJTAsMCwlMVxuXApAQCAtMTE3LDcgKzExNyw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTEJCSMgbG9jYWxfYWRkX3VubGVzc1xuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMSwwKSAiCQkJIyBsb2NhbF9hZGRfdW5sZXNzXG5cCiAJY21wdwkwLCUwLCUzIFxuXAogCWJlcS0JMmYgXG5cCiAJYWRkCSUwLCUyLCUwIFxuIgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWAkiJTAsMCwlMQkJIyBsb2NhbF9kZWNfaWZfcG9zaXRpdmVcblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTEsMCkgIgkJCSMgbG9jYWxfZGVjX2lmX3Bvc2l0aXZlXG5cCiAJY21wd2kJJTAsMVxuXAogCWFkZGkJJTAsJTAsLTFcblwKIAlibHQtCTJmXG4iCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTEyMS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUxMjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmEzMGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUxMjEuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogTVBDNTEyMSBQcm90b3R5cGVzIGFuZCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworI2lmbmRlZiBfX0FTTV9QT1dFUlBDX01QQzUxMjFfSF9fCisjZGVmaW5lIF9fQVNNX1BPV0VSUENfTVBDNTEyMV9IX18KKworLyogTVBDNTEyeCBSZXNldCBtb2R1bGUgcmVnaXN0ZXJzICovCitzdHJ1Y3QgbXBjNTEyeF9yZXNldF9tb2R1bGUgeworCXUzMglyY3dscjsJLyogUmVzZXQgQ29uZmlndXJhdGlvbiBXb3JkIExvdyBSZWdpc3RlciAqLworCXUzMglyY3docjsJLyogUmVzZXQgQ29uZmlndXJhdGlvbiBXb3JkIEhpZ2ggUmVnaXN0ZXIgKi8KKwl1MzIJcmVzZXJ2ZWQxOworCXUzMglyZXNlcnZlZDI7CisJdTMyCXJzcjsJLyogUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovCisJdTMyCXJtcjsJLyogUmVzZXQgTW9kZSBSZWdpc3RlciAqLworCXUzMglycHI7CS8qIFJlc2V0IFByb3RlY3Rpb24gUmVnaXN0ZXIgKi8KKwl1MzIJcmNyOwkvKiBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyCXJjZXI7CS8qIFJlc2V0IENvbnRyb2wgRW5hYmxlIFJlZ2lzdGVyICovCit9OworCisjZW5kaWYgLyogX19BU01fUE9XRVJQQ19NUEM1MTIxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHhfcHNjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaAppbmRleCBmYjg0MTIwLi40MjU2MWY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaApAQCAtMjUsNyArMjUsMTEgQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogLyogTWF4IG51bWJlciBvZiBQU0NzICovCisjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CisjZGVmaW5lIE1QQzUyeHhfUFNDX01BWE5VTSAgICAgMTIKKyNlbHNlCiAjZGVmaW5lIE1QQzUyeHhfUFNDX01BWE5VTQk2CisjZW5kaWYKIAogLyogUHJvZ3JhbW1hYmxlIFNlcmlhbCBDb250cm9sbGVyIChQU0MpIHN0YXR1cyByZWdpc3RlciBiaXRzICovCiAjZGVmaW5lIE1QQzUyeHhfUFNDX1NSX1VORVhfUlgJMHgwMDAxCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaAppbmRleCBhMDAyNjgyLi42MTkxM2Q5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKQEAgLTI4OSw3ICsyODksNyBAQAogI2lmZGVmIENPTkZJR19NUElDX1UzX0hUX0lSUVMKIAkvKiBUaGUgZml4dXAgdGFibGUgKi8KIAlzdHJ1Y3QgbXBpY19pcnFfZml4dXAJKmZpeHVwczsKLQlzcGlubG9ja190CQlmaXh1cF9sb2NrOworCXJhd19zcGlubG9ja190CWZpeHVwX2xvY2s7CiAjZW5kaWYKIAogCS8qIFJlZ2lzdGVyIGFjY2VzcyBtZXRob2QgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tdXRleC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL211dGV4LmgKaW5kZXggZGFiYzAxYy4uNTM5OWY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL211dGV4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL211dGV4LmgKQEAgLTE1LDcgKzE1LDcgQEAKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCSUzLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIKIAk6ICI9JnIiICh0KQpAQCAtMzUsNyArMzUsNyBAQAogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JJTAsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtNDgsNyArNDgsNyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUxCQkjIG11dGV4IHVubG9ja1xuXAogCWFkZGljCSUwLCUwLDFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmFtLmgKaW5kZXggMDk0ZjYzZC4uOTY1ZDQ1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmFtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhcmFtLmgKQEAgLTEsMjIgKzEgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX1BBUkFNX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX1BBUkFNX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBpbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jZGVmaW5lIFVTRVJfSFoJCTEwMAkJLyogZm9yIHVzZXIgaW50ZXJmYWNlcyBpbiAidGlja3MiICovCi0jZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBmcmVxdWVuY3kgYXQgd2hpY2ggdGltZXMoKSBjb3VudHMgKi8KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNpZm5kZWYgSFoKLSNkZWZpbmUgSFogMTAwCi0jZW5kaWYKLQotI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKLQotI2lmbmRlZiBOT0dST1VQCi0jZGVmaW5lIE5PR1JPVVAJCSgtMSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KLQotI2VuZGlmCS8qIF9BU01fUE9XRVJQQ19QQVJBTV9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaAppbmRleCA4NzdjMzVhLi4wMGVlZGM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1hY19mZWF0dXJlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oCkBAIC0zNzgsNyArMzc4LDcgQEAKICAqIFRob3NlIGFyZSBleHBvcnRlZCBieSBwbWFjIGZlYXR1cmUgZm9yIGludGVybmFsIHVzZSBieSBhcmNoIGNvZGUKICAqIG9ubHkgbGlrZSB0aGUgcGxhdGZvcm0gZnVuY3Rpb24gY2FsbGJhY2tzLCBkbyBub3QgdXNlIGRpcmVjdGx5IGluIGRyaXZlcnMKICAqLwotZXh0ZXJuIHNwaW5sb2NrX3QgZmVhdHVyZV9sb2NrOworZXh0ZXJuIHJhd19zcGlubG9ja190IGZlYXR1cmVfbG9jazsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKnVuaW5vcnRoX25vZGU7CiBleHRlcm4gdTMyIF9faW9tZW0gKnVuaW5vcnRoX2Jhc2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCmluZGV4IGVmOWFhODQuLmFlYTcxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApAQCAtMjIsOCArMjIsMTAgQEAKICNkZWZpbmUgUFBDX0lOU1RfRENCWkwJCQkweDdjMjAwN2VjCiAjZGVmaW5lIFBQQ19JTlNUX0lTRUwJCQkweDdjMDAwMDFlCiAjZGVmaW5lIFBQQ19JTlNUX0lTRUxfTUFTSwkJMHhmYzAwMDAzZQorI2RlZmluZSBQUENfSU5TVF9MREFSWAkJCTB4N2MwMDAwYTgKICNkZWZpbmUgUFBDX0lOU1RfTFNXSQkJCTB4N2MwMDA0YWEKICNkZWZpbmUgUFBDX0lOU1RfTFNXWAkJCTB4N2MwMDA0MmEKKyNkZWZpbmUgUFBDX0lOU1RfTFdBUlgJCQkweDdjMDAwMDI5CiAjZGVmaW5lIFBQQ19JTlNUX0xXU1lOQwkJCTB4N2MyMDA0YWMKICNkZWZpbmUgUFBDX0lOU1RfTFhWRDJYCQkJMHg3YzAwMDY5OAogI2RlZmluZSBQUENfSU5TVF9NQ1JYUgkJCTB4N2MwMDA0MDAKQEAgLTU1LDE1ICs1NywzMSBAQAogI2RlZmluZSBfX1BQQ19SQShhKQkoKChhKSAmIDB4MWYpIDw8IDE2KQogI2RlZmluZSBfX1BQQ19SQihiKQkoKChiKSAmIDB4MWYpIDw8IDExKQogI2RlZmluZSBfX1BQQ19SUyhzKQkoKChzKSAmIDB4MWYpIDw8IDIxKQorI2RlZmluZSBfX1BQQ19SVChzKQlfX1BQQ19SUyhzKQogI2RlZmluZSBfX1BQQ19YUyhzKQkoKCgocykgJiAweDFmKSA8PCAyMSkgfCAoKChzKSAmIDB4MjApID4+IDUpKQogI2RlZmluZSBfX1BQQ19UX1RMQih0KQkoKCh0KSAmIDB4MykgPDwgMjEpCiAjZGVmaW5lIF9fUFBDX1dDKHcpCSgoKHcpICYgMHgzKSA8PCAyMSkKKy8qCisgKiBPbmx5IHVzZSB0aGUgbGFyeCBoaW50IGJpdCBvbiA2NGJpdCBDUFVzLiBPbmNlIHdlIHZlcmlmeSBpdCBkb2Vzbid0IGhhdmUKKyAqIGFueSBzaWRlIGVmZmVjdHMgb24gYWxsIDMyYml0IHByb2Nlc3NvcnMsIHdlIGNhbiBkbyB0aGlzIGFsbCB0aGUgdGltZS4KKyAqLworI2lmZGVmIENPTkZJR19QUEM2NAorI2RlZmluZSBfX1BQQ19FSChlaCkJKCgoZWgpICYgMHgxKSA8PCAwKQorI2Vsc2UKKyNkZWZpbmUgX19QUENfRUgoZWgpCTAKKyNlbmRpZgogCiAvKiBEZWFsIHdpdGggaW5zdHJ1Y3Rpb25zIHRoYXQgb2xkZXIgYXNzZW1ibGVycyBhcmVuJ3QgYXdhcmUgb2YgKi8KICNkZWZpbmUJUFBDX0RDQkFMKGEsIGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9EQ0JBTCB8IFwKIAkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKICNkZWZpbmUJUFBDX0RDQlpMKGEsIGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9EQ0JaTCB8IFwKIAkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKKyNkZWZpbmUgUFBDX0xEQVJYKHQsIGEsIGIsIGVoKQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9MREFSWCB8IFwKKwkJCQkJX19QUENfUlQodCkgfCBfX1BQQ19SQShhKSB8IFwKKwkJCQkJX19QUENfUkIoYikgfCBfX1BQQ19FSChlaCkpCisjZGVmaW5lIFBQQ19MV0FSWCh0LCBhLCBiLCBlaCkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfTFdBUlggfCBcCisJCQkJCV9fUFBDX1JUKHQpIHwgX19QUENfUkEoYSkgfCBcCisJCQkJCV9fUFBDX1JCKGIpIHwgX19QUENfRUgoZWgpKQogI2RlZmluZSBQUENfTVNHU05EKGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9NU0dTTkQgfCBcCiAJCQkJCV9fUFBDX1JCKGIpKQogI2RlZmluZSBQUENfUkZDSQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZDSSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtcGNpLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLXBjaS5oCmluZGV4IDI4MjhmOWQuLjQyZmRmZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtcGNpLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1wY2kuaApAQCAtMTM3LDYgKzEzNywxMSBAQAogdm9pZCBlZWhfc3lzZnNfYWRkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB2b2lkIGVlaF9zeXNmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIAorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICplZWhfcGNpX25hbWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpIAoreyAKKwlyZXR1cm4gcGRldiA/IHBjaV9uYW1lKHBkZXYpIDogIjxudWxsPiI7Cit9IAorCiAjZW5kaWYgLyogQ09ORklHX0VFSCAqLwogCiAjZWxzZSAvKiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggOWVlZDI5ZS4uMjIxYmE2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTYxLDkgKzE2MSw0MSBAQAogI2lmZGVmIENPTkZJR19QUEMzMgogCXZvaWQJCSpwZ2RpcjsJCS8qIHJvb3Qgb2YgcGFnZS10YWJsZSB0cmVlICovCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQgKENPTkZJR19CT09LRSkKLQl1bnNpZ25lZCBsb25nCWRiY3IwOwkJLyogZGVidWcgY29udHJvbCByZWdpc3RlciB2YWx1ZXMgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGhlbHAgdG8gbWFuYWdlIHRoZSB1c2Ugb2YgRGVidWcgQ29udHJvbCBSZWdpc3RlcnMKKwkgKiBvbSB0aGUgQm9va0UgcGxhdGZvcm1zLgorCSAqLworCXVuc2lnbmVkIGxvbmcJZGJjcjA7CiAJdW5zaWduZWQgbG9uZwlkYmNyMTsKKyNpZmRlZiBDT05GSUdfQk9PS0UKKwl1bnNpZ25lZCBsb25nCWRiY3IyOworI2VuZGlmCisJLyoKKwkgKiBUaGUgc3RvcmVkIHZhbHVlIG9mIHRoZSBEQlNSIHJlZ2lzdGVyIHdpbGwgYmUgdGhlIHZhbHVlIGF0IHRoZQorCSAqIGxhc3QgZGVidWcgaW50ZXJydXB0LiBUaGlzIHJlZ2lzdGVyIGNhbiBvbmx5IGJlIHJlYWQgZnJvbSB0aGUKKwkgKiB1c2VyICh3aWxsIG5ldmVyIGJlIHdyaXR0ZW4gdG8pIGFuZCBoYXMgdmFsdWUgd2hpbGUgaGVscGluZyB0bworCSAqIGRlc2NyaWJlIHRoZSByZWFzb24gZm9yIHRoZSBsYXN0IGRlYnVnIHRyYXAuICBUb3JlegorCSAqLworCXVuc2lnbmVkIGxvbmcJZGJzcjsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgd2lsbCBjb250YWluIGFkZHJlc3NlcyB1c2VkIGJ5IGRlYnVnIGFwcGxpY2F0aW9ucworCSAqIHRvIGhlbHAgdHJhY2UgYW5kIHRyYXAgb24gcGFydGljdWxhciBhZGRyZXNzIGxvY2F0aW9ucy4KKwkgKiBUaGUgYml0cyBpbiB0aGUgRGVidWcgQ29udHJvbCBSZWdpc3RlcnMgYWJvdmUgaGVscCBkZWZpbmUgd2hpY2gKKwkgKiBvZiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyB3aWxsIGNvbnRhaW4gdmFsaWQgZGF0YSBhbmQvb3IgYWRkcmVzc2VzLgorCSAqLworCXVuc2lnbmVkIGxvbmcJaWFjMTsKKwl1bnNpZ25lZCBsb25nCWlhYzI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwl1bnNpZ25lZCBsb25nCWlhYzM7CisJdW5zaWduZWQgbG9uZwlpYWM0OworI2VuZGlmCisJdW5zaWduZWQgbG9uZwlkYWMxOworCXVuc2lnbmVkIGxvbmcJZGFjMjsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCXVuc2lnbmVkIGxvbmcJZHZjMTsKKwl1bnNpZ25lZCBsb25nCWR2YzI7CisjZW5kaWYKICNlbmRpZgogCS8qIEZQIGFuZCBWU1ggMC0zMSByZWdpc3RlciBzZXQgKi8KIAlkb3VibGUJCWZwclszMl1bVFNfRlBSV0lEVEhdOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9tLmgKaW5kZXggMmFiOWNiZC4uZGRkNDA4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvbS5oCkBAIC0yMywyMSArMjMsOCBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKLSNkZWZpbmUgT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVAkxCi0jZGVmaW5lIE9GX1JPT1RfTk9ERV9TSVpFX0NFTExTX0RFRkFVTFQJMQotCi0jZGVmaW5lIG9mX2NvbXBhdF9jbXAoczEsIHMyLCBsKQlzdHJjYXNlY21wKChzMSksIChzMikpCi0jZGVmaW5lIG9mX3Byb3BfY21wKHMxLCBzMikJCXN0cmNtcCgoczEpLCAoczIpKQotI2RlZmluZSBvZl9ub2RlX2NtcChzMSwgczIpCQlzdHJjYXNlY21wKChzMSksIChzMikpCi0KLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKLQogI2RlZmluZSBIQVZFX0FSQ0hfREVWVFJFRV9GSVhVUFMKIAotLyogRm9yIHVwZGF0aW5nIHRoZSBkZXZpY2UgdHJlZSBhdCBydW50aW1lICovCi1leHRlcm4gdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci1leHRlcm4gdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci0KICNpZmRlZiBDT05GSUdfUFBDMzIKIC8qCiAgKiBQQ0kgPC0+IE9GIG1hdGNoaW5nIGZ1bmN0aW9ucwpAQCAtNTIsMTEgKzM5LDYgQEAKIGV4dGVybiB2b2lkIHBjaV9jcmVhdGVfT0ZfYnVzX21hcCh2b2lkKTsKICNlbmRpZgogCi1leHRlcm4gc3RydWN0IHJlc291cmNlICpyZXF1ZXN0X09GX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwKLQkJCQlpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIG5hbWVfcG9zdGZpeCk7Ci1leHRlcm4gaW50IHJlbGVhc2VfT0ZfcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlKiBub2RlLCBpbnQgaW5kZXgpOwotCi0KIC8qCiAgKiBPRiBhZGRyZXNzIHJldHJlaXZhbCAmIHRyYW5zbGF0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBjYmQ3NTllLi5iNDUxMDgxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0yNCw2ICsyNCwxMiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIHN0cnVjdCBwdF9yZWdzIHsKQEAgLTI5NCw0ICszMDAsNzUgQEAKIAogI2RlZmluZSBQVFJBQ0VfU0lOR0xFQkxPQ0sJMHgxMDAJLyogcmVzdW1lIGV4ZWN1dGlvbiB1bnRpbCBuZXh0IGJyYW5jaCAqLwogCisjZGVmaW5lIFBQQ19QVFJBQ0VfR0VUSFdEQkdJTkZPCTB4ODkKKyNkZWZpbmUgUFBDX1BUUkFDRV9TRVRIV0RFQlVHCTB4ODgKKyNkZWZpbmUgUFBDX1BUUkFDRV9ERUxIV0RFQlVHCTB4ODcKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHBwY19kZWJ1Z19pbmZvIHsKKwl1aW50MzJfdCB2ZXJzaW9uOwkJLyogT25seSB2ZXJzaW9uIDEgZXhpc3RzIHRvIGRhdGUgKi8KKwl1aW50MzJfdCBudW1faW5zdHJ1Y3Rpb25fYnBzOworCXVpbnQzMl90IG51bV9kYXRhX2JwczsKKwl1aW50MzJfdCBudW1fY29uZGl0aW9uX3JlZ3M7CisJdWludDMyX3QgZGF0YV9icF9hbGlnbm1lbnQ7CisJdWludDMyX3Qgc2l6ZW9mX2NvbmRpdGlvbjsJLyogc2l6ZSBvZiB0aGUgRFZDIHJlZ2lzdGVyICovCisJdWludDY0X3QgZmVhdHVyZXM7Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBmZWF0dXJlcyB3aWxsIGhhdmUgYml0cyBpbmRpY2F0aW9uIHdoZXRoZXIgdGhlcmUgaXMgc3VwcG9ydCBmb3I6CisgKi8KKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9SQU5HRQkJMHgwMDAwMDAwMDAwMDAwMDAxCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfTUFTSwkJMHgwMDAwMDAwMDAwMDAwMDAyCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfUkFOR0UJCTB4MDAwMDAwMDAwMDAwMDAwNAorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX01BU0sJCTB4MDAwMDAwMDAwMDAwMDAwOAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgeworCXVpbnQzMl90IHZlcnNpb247CQkvKiBjdXJyZW50bHksIHZlcnNpb24gbXVzdCBiZSAxICovCisJdWludDMyX3QgdHJpZ2dlcl90eXBlOwkJLyogb25seSBzb21lIGNvbWJpbmF0aW9ucyBhbGxvd2VkICovCisJdWludDMyX3QgYWRkcl9tb2RlOwkJLyogYWRkcmVzcyBtYXRjaCBtb2RlICovCisJdWludDMyX3QgY29uZGl0aW9uX21vZGU7CS8qIGJyZWFrL3dhdGNocG9pbnQgY29uZGl0aW9uIGZsYWdzICovCisJdWludDY0X3QgYWRkcjsJCQkvKiBicmVhay93YXRjaHBvaW50IGFkZHJlc3MgKi8KKwl1aW50NjRfdCBhZGRyMjsJCQkvKiByYW5nZSBlbmQgb3IgbWFzayAqLworCXVpbnQ2NF90IGNvbmRpdGlvbl92YWx1ZTsJLyogY29udGVudHMgb2YgdGhlIERWQyByZWdpc3RlciAqLworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKgorICogVHJpZ2dlciBUeXBlCisgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFCTB4MDAwMDAwMDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFECTB4MDAwMDAwMDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURQkweDAwMDAwMDA0CisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUlcJXAorCShQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQgfCBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKQorCisvKgorICogQWRkcmVzcyBNb2RlCisgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVAkJMHgwMDAwMDAwMAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0lOQ0xVU0lWRQkweDAwMDAwMDAxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFCTB4MDAwMDAwMDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLCQkweDAwMDAwMDAzCisKKy8qCisgKiBDb25kaXRpb24gTW9kZQorICovCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFCTB4MDAwMDAwMDMKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkUJMHgwMDAwMDAwMAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0VYQUNUCVBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX09SCTB4MDAwMDAwMDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0FORF9PUgkweDAwMDAwMDAzCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRV9BTEwJMHgwMGZmMDAwMAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfU0hJRlQJMTYKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFKG4pCVwKKwkoMTw8KChuKStQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkVfU0hJRlQpKQorCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKaW5kZXggM2JmNzgzNS4uODgwOGQzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaApAQCAtMjQ4LDYgKzI0OCw4IEBACiAjZGVmaW5lIERCU1JfUkVUCTB4MDAwMDgwMDAJLyogUmV0dXJuIERlYnVnIEV2ZW50ICovCiAjZGVmaW5lIERCU1JfQ0lSUFQJMHgwMDAwMDA0MAkvKiBDcml0aWNhbCBJbnRlcnJ1cHQgVGFrZW4gRXZlbnQgKi8KICNkZWZpbmUgREJTUl9DUkVUCTB4MDAwMDAwMjAJLyogQ3JpdGljYWwgUmV0dXJuIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCU1JfSUFDMTJBVFMJMHgwMDAwMDAwMgkvKiBJbnN0ciBBZGRyZXNzIENvbXBhcmUgMS8yIFRvZ2dsZSAqLworI2RlZmluZSBEQlNSX0lBQzM0QVRTCTB4MDAwMDAwMDEJLyogSW5zdHIgQWRkcmVzcyBDb21wYXJlIDMvNCBUb2dnbGUgKi8KICNlbmRpZgogI2lmZGVmIENPTkZJR180MHgKICNkZWZpbmUgREJTUl9JQwkJMHg4MDAwMDAwMAkvKiBJbnN0cnVjdGlvbiBDb21wbGV0aW9uICovCkBAIC0zMTMsNiArMzE1LDM4IEBACiAjZGVmaW5lIERCQ1IwX0lBMTJUCTB4MDAwMDgwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgVG9nZ2xlICovCiAjZGVmaW5lIERCQ1IwX0lBMzRUCTB4MDAwMDQwMDAJLyogSW5zdHIgQWRkciAzLTQgcmFuZ2UgVG9nZ2xlICovCiAjZGVmaW5lIERCQ1IwX0ZUCTB4MDAwMDAwMDEJLyogRnJlZXplIFRpbWVycyBvbiBkZWJ1ZyBldmVudCAqLworCisjZGVmaW5lIGRiY3JfaWFjX3JhbmdlKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMCkKKyNkZWZpbmUgREJDUl9JQUMxMkkJREJDUjBfSUExMgkJCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyWAkoREJDUjBfSUExMiB8IERCQ1IwX0lBMTJYKQkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMxMk1PREUJKERCQ1IwX0lBMTIgfCBEQkNSMF9JQTEyWCkJLyogSUFDIDEtMiBNb2RlIEJpdHMgKi8KKyNkZWZpbmUgREJDUl9JQUMzNEkJREJDUjBfSUEzNAkJCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzM0WAkoREJDUjBfSUEzNCB8IERCQ1IwX0lBMzRYKQkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNE1PREUJKERCQ1IwX0lBMzQgfCBEQkNSMF9JQTM0WCkJLyogSUFDIDMtNCBNb2RlIEJpdHMgKi8KKworLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIERCQ1IxLiAqLworI2RlZmluZSBEQkNSMV9EQUMxUgkweDgwMDAwMDAwCS8qIERBQzEgUmVhZCBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSMV9EQUMyUgkweDQwMDAwMDAwCS8qIERBQzIgUmVhZCBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSMV9EQUMxVwkweDIwMDAwMDAwCS8qIERBQzEgV3JpdGUgRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJDUjFfREFDMlcJMHgxMDAwMDAwMAkvKiBEQUMyIFdyaXRlIERlYnVnIEV2ZW50ICovCisKKyNkZWZpbmUgZGJjcl9kYWModGFzaykJKCh0YXNrKS0+dGhyZWFkLmRiY3IxKQorI2RlZmluZSBEQkNSX0RBQzFSCURCQ1IxX0RBQzFSCisjZGVmaW5lIERCQ1JfREFDMVcJREJDUjFfREFDMVcKKyNkZWZpbmUgREJDUl9EQUMyUglEQkNSMV9EQUMyUgorI2RlZmluZSBEQkNSX0RBQzJXCURCQ1IxX0RBQzJXCisKKy8qCisgKiBBcmUgdGhlcmUgYW55IGFjdGl2ZSBEZWJ1ZyBFdmVudHMgcmVwcmVzZW50ZWQgaW4gdGhlCisgKiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVycz8KKyAqLworI2RlZmluZSBEQkNSMF9BQ1RJVkVfRVZFTlRTCShEQkNSMF9JQ01QIHwgREJDUjBfSUFDMSB8IERCQ1IwX0lBQzIgfCBcCisJCQkJIERCQ1IwX0lBQzMgfCBEQkNSMF9JQUM0KQorI2RlZmluZSBEQkNSMV9BQ1RJVkVfRVZFTlRTCShEQkNSMV9EQUMxUiB8IERCQ1IxX0RBQzJSIHwgXAorCQkJCSBEQkNSMV9EQUMxVyB8IERCQ1IxX0RBQzJXKQorI2RlZmluZSBEQkNSX0FDVElWRV9FVkVOVFMoZGJjcjAsIGRiY3IxKSAgKCgoZGJjcjApICYgREJDUjBfQUNUSVZFX0VWRU5UUykgfHwgXAorCQkJCQkgICAoKGRiY3IxKSAmIERCQ1IxX0FDVElWRV9FVkVOVFMpKQorCiAjZWxpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKICNkZWZpbmUgREJDUjBfRURNCTB4ODAwMDAwMDAJLyogRXh0ZXJuYWwgRGVidWcgTW9kZSAqLwogI2RlZmluZSBEQkNSMF9JRE0JMHg0MDAwMDAwMAkvKiBJbnRlcm5hbCBEZWJ1ZyBNb2RlICovCkBAIC0zNDIsMTkgKzM3Niw3OSBAQAogI2RlZmluZSBEQkNSMF9DUkVUCTB4MDAwMDAwMjAJLyogQ3JpdGljYWwgUmV0dXJuIERlYnVnIEV2ZW50ICovCiAjZGVmaW5lIERCQ1IwX0ZUCTB4MDAwMDAwMDEJLyogRnJlZXplIFRpbWVycyBvbiBkZWJ1ZyBldmVudCAqLwogCisjZGVmaW5lIGRiY3JfZGFjKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMCkKKyNkZWZpbmUgREJDUl9EQUMxUglEQkNSMF9EQUMxUgorI2RlZmluZSBEQkNSX0RBQzFXCURCQ1IwX0RBQzFXCisjZGVmaW5lIERCQ1JfREFDMlIJREJDUjBfREFDMlIKKyNkZWZpbmUgREJDUl9EQUMyVwlEQkNSMF9EQUMyVworCiAvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgREJDUjEuICovCisjZGVmaW5lIERCQ1IxX0lBQzFVUwkweEMwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMV9JQUMxRVIJMHgzMDAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAxIEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUl8wMQkweDEwMDAwMDAwCS8qIHJlc2VydmVkICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUl8xMAkweDIwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgRWZmL1JlYWwgTVNSW0lTXT0wICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUl8xMQkweDMwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgRWZmL1JlYWwgTVNSW0lTXT0xICovCisjZGVmaW5lIERCQ1IxX0lBQzJVUwkweDBDMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMV9JQUMyRVIJMHgwMzAwMDAwMAkvKiBJbnN0ciBBZGRyIENtcCAyIEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUl8wMQkweDAxMDAwMDAwCS8qIHJlc2VydmVkICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUl8xMAkweDAyMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgRWZmL1JlYWwgTVNSW0lTXT0wICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUl8xMQkweDAzMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgRWZmL1JlYWwgTVNSW0lTXT0xICovCiAjZGVmaW5lIERCQ1IxX0lBQzEyTQkweDAwODAwMDAwCS8qIEluc3RyIEFkZHIgMS0yIHJhbmdlIGVuYWJsZSAqLwogI2RlZmluZSBEQkNSMV9JQUMxMk1YCTB4MDBDMDAwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgZVhjbHVzaXZlICovCiAjZGVmaW5lIERCQ1IxX0lBQzEyQVQJMHgwMDAxMDAwMAkvKiBJbnN0ciBBZGRyIDEtMiByYW5nZSBUb2dnbGUgKi8KKyNkZWZpbmUgREJDUjFfSUFDM1VTCTB4MDAwMEMwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IxX0lBQzNFUgkweDAwMDAzMDAwCS8qIEluc3RyIEFkZHIgQ21wIDMgRWZmL1JlYWwgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSXzAxCTB4MDAwMDEwMDAJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSXzEwCTB4MDAwMDIwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSXzExCTB4MDAwMDMwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBFZmYvUmVhbCBNU1JbSVNdPTEgKi8KKyNkZWZpbmUgREJDUjFfSUFDNFVTCTB4MDAwMDBDMDAJLyogSW5zdHIgQWRkciBDbXAgNCBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IxX0lBQzRFUgkweDAwMDAwMzAwCS8qIEluc3RyIEFkZHIgQ21wIDQgRWZmL1JlYWwgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSXzAxCTB4MDAwMDAxMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSXzEwCTB4MDAwMDAyMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSXzExCTB4MDAwMDAzMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCBNU1JbSVNdPTEgKi8KICNkZWZpbmUgREJDUjFfSUFDMzRNCTB4MDAwMDAwODAJLyogSW5zdHIgQWRkciAzLTQgcmFuZ2UgZW5hYmxlICovCiAjZGVmaW5lIERCQ1IxX0lBQzM0TVgJMHgwMDAwMDBDMAkvKiBJbnN0ciBBZGRyIDMtNCByYW5nZSBlWGNsdXNpdmUgKi8KICNkZWZpbmUgREJDUjFfSUFDMzRBVAkweDAwMDAwMDAxCS8qIEluc3RyIEFkZHIgMy00IHJhbmdlIFRvZ2dsZSAqLwogCisjZGVmaW5lIGRiY3JfaWFjX3JhbmdlKHRhc2spCSgodGFzayktPnRocmVhZC5kYmNyMSkKKyNkZWZpbmUgREJDUl9JQUMxMkkJREJDUjFfSUFDMTJNCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyWAlEQkNSMV9JQUMxMk1YCS8qIFJhbmdlIEV4Y2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyTU9ERQlEQkNSMV9JQUMxMk1YCS8qIElBQyAxLTIgTW9kZSBCaXRzICovCisjZGVmaW5lIERCQ1JfSUFDMzRJCURCQ1IxX0lBQzM0TQkvKiBSYW5nZSBJbmNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNFgJREJDUjFfSUFDMzRNWAkvKiBSYW5nZSBFeGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUl9JQUMzNE1PREUJREJDUjFfSUFDMzRNWAkvKiBJQUMgMy00IE1vZGUgQml0cyAqLworCiAvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgREJDUjIuICovCisjZGVmaW5lIERCQ1IyX0RBQzFVUwkweEMwMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMSBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IyX0RBQzFFUgkweDMwMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMSBFZmYvUmVhbCAqLworI2RlZmluZSBEQkNSMl9EQUMyVVMJMHgwMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDIgU3VwL1VzZXIgICAqLworI2RlZmluZSBEQkNSMl9EQUMyRVIJMHgwMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDIgRWZmL1JlYWwgKi8KICNkZWZpbmUgREJDUjJfREFDMTJNCTB4MDA4MDAwMDAJLyogREFDIDEtMiByYW5nZSBlbmFibGUgKi8KKyNkZWZpbmUgREJDUjJfREFDMTJNTQkweDAwNDAwMDAwCS8qIERBQyAxLTIgTWFzayBtb2RlKi8KICNkZWZpbmUgREJDUjJfREFDMTJNWAkweDAwQzAwMDAwCS8qIERBQyAxLTIgcmFuZ2UgZVhjbHVzaXZlICovCisjZGVmaW5lIERCQ1IyX0RBQzEyTU9ERQkweDAwQzAwMDAwCS8qIERBQyAxLTIgTW9kZSBCaXRzICovCiAjZGVmaW5lIERCQ1IyX0RBQzEyQQkweDAwMjAwMDAwCS8qIERBQyAxLTIgQXN5bmNocm9ub3VzICovCi0jZW5kaWYKKyNkZWZpbmUgREJDUjJfRFZDMU0JMHgwMDBDMDAwMAkvKiBEYXRhIFZhbHVlIENvbXAgMSBNb2RlICovCisjZGVmaW5lIERCQ1IyX0RWQzFNX1NISUZUCTE4CS8qICMgb2YgYml0cyB0byBzaGlmdCBEQkNSMl9EVkMxTSAqLworI2RlZmluZSBEQkNSMl9EVkMyTQkweDAwMDMwMDAwCS8qIERhdGEgVmFsdWUgQ29tcCAyIE1vZGUgKi8KKyNkZWZpbmUgREJDUjJfRFZDMk1fU0hJRlQJMTYJLyogIyBvZiBiaXRzIHRvIHNoaWZ0IERCQ1IyX0RWQzJNICovCisjZGVmaW5lIERCQ1IyX0RWQzFCRQkweDAwMDAwRjAwCS8qIERhdGEgVmFsdWUgQ29tcCAxIEJ5dGUgKi8KKyNkZWZpbmUgREJDUjJfRFZDMUJFX1NISUZUCTgJLyogIyBvZiBiaXRzIHRvIHNoaWZ0IERCQ1IyX0RWQzFCRSAqLworI2RlZmluZSBEQkNSMl9EVkMyQkUJMHgwMDAwMDAwRgkvKiBEYXRhIFZhbHVlIENvbXAgMiBCeXRlICovCisjZGVmaW5lIERCQ1IyX0RWQzJCRV9TSElGVAkwCS8qICMgb2YgYml0cyB0byBzaGlmdCBEQkNSMl9EVkMyQkUgKi8KKworLyoKKyAqIEFyZSB0aGVyZSBhbnkgYWN0aXZlIERlYnVnIEV2ZW50cyByZXByZXNlbnRlZCBpbiB0aGUKKyAqIERlYnVnIENvbnRyb2wgUmVnaXN0ZXJzPworICovCisjZGVmaW5lIERCQ1IwX0FDVElWRV9FVkVOVFMgIChEQkNSMF9JQ01QIHwgREJDUjBfSUFDMSB8IERCQ1IwX0lBQzIgfCBcCisJCQkgICAgICBEQkNSMF9JQUMzIHwgREJDUjBfSUFDNCB8IERCQ1IwX0RBQzFSIHwgXAorCQkJICAgICAgREJDUjBfREFDMVcgIHwgREJDUjBfREFDMlIgfCBEQkNSMF9EQUMyVykKKyNkZWZpbmUgREJDUjFfQUNUSVZFX0VWRU5UUwkwCisKKyNkZWZpbmUgREJDUl9BQ1RJVkVfRVZFTlRTKGRiY3IwLCBkYmNyMSkgICgoKGRiY3IwKSAmIERCQ1IwX0FDVElWRV9FVkVOVFMpIHx8IFwKKwkJCQkJICAgKChkYmNyMSkgJiBEQkNSMV9BQ1RJVkVfRVZFTlRTKSkKKyNlbmRpZiAvKiAjZWxpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgKi8KIAogLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIFRDUi4gKi8KICNkZWZpbmUgVENSX1dQKHgpCSgoKHgpJjB4Myk8PDMwKQkvKiBXRFQgUGVyaW9kICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IDc2NDA5NGMuLmY5NjExYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgorI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CiAKICNkZWZpbmUgYXJjaF9zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+c2xvY2sgIT0gMCkKIApAQCAtNjAsMTMgKzYxLDE0IEBACiAKIAl0b2tlbiA9IExPQ0tfVE9LRU47CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToJbHdhcngJCSUwLDAsJTJcblwKKyIxOgkiIFBQQ19MV0FSWCglMCwwLCUyLDEpICJcblwKIAljbXB3aQkJMCwlMCwwXG5cCiAJYm5lLQkJMmZcblwKIAlzdHdjeC4JCSUxLDAsJTJcblwKLQlibmUtCQkxYlxuXAotCWlzeW5jXG5cCi0yOiIJOiAiPSZyIiAodG1wKQorCWJuZS0JCTFiXG4iCisJUFBDX0FDUVVJUkVfQkFSUklFUgorIjI6IgorCTogIj0mciIgKHRtcCkKIAk6ICJyIiAodG9rZW4pLCAiciIgKCZsb2NrLT5zbG9jaykKIAk6ICJjcjAiLCAibWVtb3J5Iik7CiAKQEAgLTE0NCw3ICsxNDYsNyBAQAogewogCVNZTkNfSU87CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIiMgYXJjaF9zcGluX3VubG9ja1xuXHQiCi0JCQkJTFdTWU5DX09OX1NNUDogOiA6Im1lbW9yeSIpOworCQkJCVBQQ19SRUxFQVNFX0JBUlJJRVI6IDogOiJtZW1vcnkiKTsKIAlsb2NrLT5zbG9jayA9IDA7CiB9CiAKQEAgLTE4NiwxNSArMTg4LDE1IEBACiAJbG9uZyB0bXA7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOglsd2FyeAkJJTAsMCwlMVxuIgorIjE6CSIgUFBDX0xXQVJYKCUwLDAsJTEsMSkgIlxuIgogCV9fRE9fU0lHTl9FWFRFTkQKICIJYWRkaWMuCQklMCwlMCwxXG5cCiAJYmxlLQkJMmZcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCQklMCwwLCUxXG5cCi0JYm5lLQkJMWJcblwKLQlpc3luY1xuXAotMjoiCTogIj0mciIgKHRtcCkKKwlibmUtCQkxYlxuIgorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKKyIyOiIJOiAiPSZyIiAodG1wKQogCTogInIiICgmcnctPmxvY2spCiAJOiAiY3IwIiwgInhlciIsICJtZW1vcnkiKTsKIApAQCAtMjExLDE0ICsyMTMsMTQgQEAKIAogCXRva2VuID0gV1JMT0NLX1RPS0VOOwogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6CWx3YXJ4CQklMCwwLCUyXG5cCisiMToJIiBQUENfTFdBUlgoJTAsMCwlMiwxKSAiXG5cCiAJY21wd2kJCTAsJTAsMFxuXAogCWJuZS0JCTJmXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgkJJTEsMCwlMlxuXAotCWJuZS0JCTFiXG5cCi0JaXN5bmNcblwKLTI6Igk6ICI9JnIiICh0bXApCisJYm5lLQkJMWJcbiIKKwlQUENfQUNRVUlSRV9CQVJSSUVSCisiMjoiCTogIj0mciIgKHRtcCkKIAk6ICJyIiAodG9rZW4pLCAiciIgKCZydy0+bG9jaykKIAk6ICJjcjAiLCAibWVtb3J5Iik7CiAKQEAgLTI2OSw3ICsyNzEsNyBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIiMgcmVhZF91bmxvY2tcblx0IgotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJCSUwLDAsJTFcblwKIAlhZGRpYwkJJTAsJTAsLTFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKQEAgLTI4Myw3ICsyODUsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfdW5sb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCIjIHdyaXRlX3VubG9ja1xuXHQiCi0JCQkJTFdTWU5DX09OX1NNUDogOiA6Im1lbW9yeSIpOworCQkJCVBQQ19SRUxFQVNFX0JBUlJJRVI6IDogOiJtZW1vcnkiKTsKIAlydy0+bG9jayA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeW5jaC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmgKaW5kZXggMjhmNmRkYi4uZDdjYWI0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmgKQEAgLTM3LDExICszNywxNSBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElTWU5DX09OX1NNUAkiXG5cdGlzeW5jXG4iCi0jZGVmaW5lIExXU1lOQ19PTl9TTVAJc3RyaW5naWZ5X2luX2MoTFdTWU5DKSAiXG4iCisjZGVmaW5lIF9fUFBDX0FDUVVJUkVfQkFSUklFUgkJCQlcCisJU1RBUlRfTFdTWU5DX1NFQ1RJT04oOTcpOwkJCVwKKwlpc3luYzsJCQkJCQlcCisJTUFLRV9MV1NZTkNfU0VDVElPTl9FTlRSWSg5NywgX19sd3N5bmNfZml4dXApOworI2RlZmluZSBQUENfQUNRVUlSRV9CQVJSSUVSCSJcbiIgc3RyaW5naWZ5X2luX2MoX19QUENfQUNRVUlSRV9CQVJSSUVSKQorI2RlZmluZSBQUENfUkVMRUFTRV9CQVJSSUVSCXN0cmluZ2lmeV9pbl9jKExXU1lOQykgIlxuIgogI2Vsc2UKLSNkZWZpbmUgSVNZTkNfT05fU01QCi0jZGVmaW5lIExXU1lOQ19PTl9TTVAKKyNkZWZpbmUgUFBDX0FDUVVJUkVfQkFSUklFUgorI2RlZmluZSBQUENfUkVMRUFTRV9CQVJSSUVSCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCBiYjhlMDA2Li5hNjI5N2M2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xMTIsOCArMTEyLDEzIEBACiAjZW5kaWYKIAogZXh0ZXJuIGludCBzZXRfZGFicih1bnNpZ25lZCBsb25nIGRhYnIpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKK2V4dGVybiB2b2lkIGRvX3NlbmRfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgaW50IHNpZ25hbF9jb2RlLCBpbnQgYnJrcHQpOworI2Vsc2UKIGV4dGVybiB2b2lkIGRvX2RhYnIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSk7CisjZW5kaWYKIGV4dGVybiB2b2lkIHByaW50X2JhY2t0cmFjZSh1bnNpZ25lZCBsb25nICopOwogZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CiBleHRlcm4gdm9pZCBmbHVzaF9pbnN0cnVjdGlvbl9jYWNoZSh2b2lkKTsKQEAgLTIzMiwxMiArMjM3LDEyIEBACiAJdW5zaWduZWQgbG9uZyBwcmV2OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyIFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdHdjeC4JJTMsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilwKQogCTogInIiIChwKSwgInIiICh2YWwpCiAJOiAiY2MiLCAibWVtb3J5Iik7CkBAIC0yNzUsMTIgKzI4MCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgcHJldjsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMiBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKICIJc3RkY3guCSUzLDAsJTIgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAocHJldiksICIrbSIgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXApCiAJOiAiciIgKHApLCAiciIgKHZhbCkKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTM2NiwxNCArMzcxLDE0IEBACiAJdW5zaWduZWQgaW50IHByZXY7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyCQkjIF9fY21weGNoZ191MzJcblwKIAljbXB3CTAsJTAsJTNcblwKIAlibmUtCTJmXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklNCwwLCUyXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJIlxuXAogMjoiCiAJOiAiPSZyIiAocHJldiksICIrbSIgKCpwKQpAQCAtNDEyLDEzICs0MTcsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHByZXY7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUyCQkjIF9fY21weGNoZ191NjRcblwKIAljbXBkCTAsJTAsJTNcblwKIAlibmUtCTJmXG5cCiAJc3RkY3guCSU0LDAsJTJcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKnApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IGJiZjg5NzAuLjhlYWVjMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0zOCwyNyArMzgsMzMgQEAKIAkJCQkgY3B1bWFza19vZl9ub2RlKHBjaWJ1c190b19ub2RlKGJ1cykpKQogCiAvKiBzY2hlZF9kb21haW5zIFNEX05PREVfSU5JVCBmb3IgUFBDNjQgbWFjaGluZXMgKi8KLSNkZWZpbmUgU0RfTk9ERV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCi0JLnBhcmVudAkJCT0gTlVMTCwJCQlcCi0JLmNoaWxkCQkJPSBOVUxMLAkJCVwKLQkuZ3JvdXBzCQkJPSBOVUxMLAkJCVwKLQkubWluX2ludGVydmFsCQk9IDgsCQkJXAotCS5tYXhfaW50ZXJ2YWwJCT0gMzIsCQkJXAotCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQlcCi0JLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKLQkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJXAotCS5idXN5X2lkeAkJPSAzLAkJCVwKLQkuaWRsZV9pZHgJCT0gMSwJCQlcCi0JLm5ld2lkbGVfaWR4CQk9IDAsCQkJXAotCS53YWtlX2lkeAkJPSAwLAkJCVwKLQkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCi0JCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAotCQkJCXwgU0RfQkFMQU5DRV9GT1JLCVwKLQkJCQl8IFNEX0JBTEFOQ0VfTkVXSURMRQlcCi0JCQkJfCBTRF9TRVJJQUxJWkUsCQlcCi0JLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAotCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQlcCi0JLm5yX2JhbGFuY2VfZmFpbGVkCT0gMCwJCQlcCisjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJCQlcCisJLm1pbl9pbnRlcnZhbAkJPSA4LAkJCQkJXAorCS5tYXhfaW50ZXJ2YWwJCT0gMzIsCQkJCQlcCisJLmJ1c3lfZmFjdG9yCQk9IDMyLAkJCQkJXAorCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQkJCVwKKwkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJCQlcCisJLmJ1c3lfaWR4CQk9IDMsCQkJCQlcCisJLmlkbGVfaWR4CQk9IDEsCQkJCQlcCisJLm5ld2lkbGVfaWR4CQk9IDAsCQkJCQlcCisJLndha2VfaWR4CQk9IDAsCQkJCQlcCisJLmZvcmtleGVjX2lkeAkJPSAwLAkJCQkJXAorCQkJCQkJCQkJXAorCS5mbGFncwkJCT0gMSpTRF9MT0FEX0JBTEFOQ0UJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfTkVXSURMRQkJCVwKKwkJCQl8IDEqU0RfQkFMQU5DRV9FWEVDCQkJXAorCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCisJCQkJfCAwKlNEX0JBTEFOQ0VfV0FLRQkJCVwKKwkJCQl8IDAqU0RfV0FLRV9BRkZJTkUJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKKwkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCisJCQkJfCAwKlNEX1BPV0VSU0FWSU5HU19CQUxBTkNFCQlcCisJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKKwkJCQl8IDEqU0RfU0VSSUFMSVpFCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfU0lCTElORwkJCVwKKwkJCQksCQkJCQlcCisJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCQkJXAogfQogCiBleHRlcm4gdm9pZCBfX2luaXQgZHVtcF9udW1hX2NwdV90b3BvbG9neSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwppbmRleCBiZGNiNTU3Li4wNzEwOWQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCkBAIC03OTEsOSArNzkxLDggQEAKIAkKICAgICAgICAgbGkgICAgICByOSwxCiAgICAgICAgIHJsZGljciAgcjkscjksTVNSX1NGX0xHLCg2My1NU1JfU0ZfTEcpCi0Jb3JpCXI5LHI5LE1TUl9JUnxNU1JfRFJ8TVNSX0ZFMHxNU1JfRkUxfE1TUl9GUAorCW9yaQlyOSxyOSxNU1JfSVJ8TVNSX0RSfE1TUl9GRTB8TVNSX0ZFMXxNU1JfRlB8TVNSX1JJCiAJYW5kYwlyNixyMCxyOQotCW9yaQlyNixyNixNU1JfUkkKIAlzeW5jCQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBzbyBTUlIwLzEgKi8KIAltdG1zcmQJcjAJCQkvKiBkb24ndCBnZXQgdHJhc2hlZCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMKaW5kZXggMTY3OWE3MC4uNmIxZjQyNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYwpAQCAtMTcsNSArMTcsNSBAQAogCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAKLXVuc2lnbmVkIGxvbmcgcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlczsKK3Vuc2lnbmVkIGxvbmcgcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKaW5kZXggN2Y0YmQ3Zi4uMjU3OTNiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwpAQCAtMjE0LDExICsyMTQsMTEgQEAKIAlibAkxZgkJLyogRmluZCBvdXIgYWRkcmVzcyAqLwogMToJbWZscglyOQogCXJsd2ltaQlyNyxyOSwwLDIwLDMxCi0JYWRkaQlyNyxyNywyNAorCWFkZGkJcjcscjcsKDJmIC0gMWIpCiAJbXRzcHIJU1BSTl9TUlIwLHI3CiAJbXRzcHIJU1BSTl9TUlIxLHI2CiAJcmZpCi0KKzI6CiAvKiA0LiBDbGVhciBvdXQgUElEcyAmIFNlYXJjaCBpbmZvICovCiAJbGkJcjYsMAogCW10c3ByICAgU1BSTl9NQVM2LHI2CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCA5MDQwMzMwLi42NGY2ZjIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTczLDggKzczLDEwIEBACiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlIDxhc20vdHJhY2UuaD4KIAorREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoaXJxX2NwdXN0YXRfdCwgaXJxX3N0YXQpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGlycV9zdGF0KTsKKwogaW50IF9faXJxX29mZnNldF92YWx1ZTsKLXN0YXRpYyBpbnQgcHBjX3NwdXJpb3VzX2ludGVycnVwdHM7CiAKICNpZmRlZiBDT05GSUdfUFBDMzIKIEVYUE9SVF9TWU1CT0woX19pcnFfb2Zmc2V0X3ZhbHVlKTsKQEAgLTE4MCwzMCArMTgyLDY0IEBACiBFWFBPUlRfU1lNQk9MKHJhd19sb2NhbF9pcnFfcmVzdG9yZSk7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKK3N0YXRpYyBpbnQgc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgaW50IHByZWMpCit7CisJaW50IGo7CisKKyNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgZGVmaW5lZChDT05GSUdfVEFVX0lOVCkKKwlpZiAodGF1X2luaXRpYWxpemVkKSB7CisJCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlRBVSIpOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHRhdV9pbnRlcnJ1cHRzKGopKTsKKwkJc2VxX3B1dHMocCwgIiAgUG93ZXJQQyAgICAgICAgICAgICBUaGVybWFsIEFzc2lzdCAoY3B1IHRlbXApXG4iKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX1BQQzMyICYmIENPTkZJR19UQVVfSU5UICovCisKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJMT0MiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgcGVyX2NwdShpcnFfc3RhdCwgaikudGltZXJfaXJxcyk7CisgICAgICAgIHNlcV9wcmludGYocCwgIiAgTG9jYWwgdGltZXIgaW50ZXJydXB0c1xuIik7CisKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJTUFUiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgcGVyX2NwdShpcnFfc3RhdCwgaikuc3B1cmlvdXNfaXJxcyk7CisJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKKworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkNOVCIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBwZXJfY3B1KGlycV9zdGF0LCBqKS5wbXVfaXJxcyk7CisJc2VxX3ByaW50ZihwLCAiICBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGludGVycnVwdHNcbiIpOworCisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiTUNFIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHBlcl9jcHUoaXJxX3N0YXQsIGopLm1jZV9leGNlcHRpb25zKTsKKwlzZXFfcHJpbnRmKHAsICIgIE1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uc1xuIik7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCiB7Ci0JaW50IGkgPSAqKGxvZmZfdCAqKXYsIGo7CisJdW5zaWduZWQgbG9uZyBmbGFncywgYW55X2NvdW50ID0gMDsKKwlpbnQgaSA9ICoobG9mZl90ICopIHYsIGosIHByZWM7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGkgPT0gMCkgewotCQlzZXFfcHV0cyhwLCAiICAgICAgICAgICAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIiwgaik7Ci0JCXNlcV9wdXRjKHAsICdcbicpOwotCX0gZWxzZSBpZiAoaSA9PSBucl9pcnFzKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIGRlZmluZWQoQ09ORklHX1RBVV9JTlQpCi0JCWlmICh0YXVfaW5pdGlhbGl6ZWQpewotCQkJc2VxX3B1dHMocCwgIlRBVTogIik7Ci0JCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCB0YXVfaW50ZXJydXB0cyhqKSk7Ci0JCQlzZXFfcHV0cyhwLCAiICBQb3dlclBDICAgICAgICAgICAgIFRoZXJtYWwgQXNzaXN0IChjcHUgdGVtcClcbiIpOwotCQl9Ci0jZW5kaWYgLyogQ09ORklHX1BQQzMyICYmIENPTkZJR19UQVVfSU5UKi8KLQkJc2VxX3ByaW50ZihwLCAiQkFEOiAlMTB1XG4iLCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0cyk7Ci0KKwlpZiAoaSA+IG5yX2lycXMpCiAJCXJldHVybiAwOworCisJZm9yIChwcmVjID0gMywgaiA9IDEwMDA7IHByZWMgPCAxMCAmJiBqIDw9IG5yX2lycXM7ICsrcHJlYykKKwkJaiAqPSAxMDsKKworCWlmIChpID09IG5yX2lycXMpCisJCXJldHVybiBzaG93X290aGVyX2ludGVycnVwdHMocCwgcHJlYyk7CisKKwkvKiBwcmludCBoZWFkZXIgKi8KKwlpZiAoaSA9PSAwKSB7CisJCXNlcV9wcmludGYocCwgIiUqcyIsIHByZWMgKyA4LCAiIik7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIkNQVSUtOGQiLCBqKTsKKwkJc2VxX3B1dGMocCwgJ1xuJyk7CiAJfQogCiAJZGVzYyA9IGlycV90b19kZXNjKGkpOwpAQCAtMjExLDM3ICsyNDcsNDggQEAKIAkJcmV0dXJuIDA7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQorCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJYW55X2NvdW50IHw9IGtzdGF0X2lycXNfY3B1KGksIGopOwogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKLQlpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLT5oYW5kbGVyKQotCQlnb3RvIHNraXA7CisJaWYgKCFhY3Rpb24gJiYgIWFueV9jb3VudCkKKwkJZ290byBvdXQ7CiAKLQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwotI2lmZGVmIENPTkZJR19TTVAKKwlzZXFfcHJpbnRmKHAsICIlKmQ6ICIsIHByZWMsIGkpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7Ci0jZWxzZQotCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAJaWYgKGRlc2MtPmNoaXApCi0JCXNlcV9wcmludGYocCwgIiAlcyAiLCBkZXNjLT5jaGlwLT5uYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICAlLTE2cyIsIGRlc2MtPmNoaXAtPm5hbWUpOwogCWVsc2UKLQkJc2VxX3B1dHMocCwgIiAgTm9uZSAgICAgICIpOworCQlzZXFfcHJpbnRmKHAsICIgICUtMTZzIiwgIk5vbmUiKTsKKwlzZXFfcHJpbnRmKHAsICIgJS04cyIsIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpID8gIkxldmVsIiA6ICJFZGdlIik7CiAKLQlzZXFfcHJpbnRmKHAsICIlcyIsIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpID8gIkxldmVsICIgOiAiRWRnZSAgIik7Ci0Jc2VxX3ByaW50ZihwLCAiICAgICVzIiwgYWN0aW9uLT5uYW1lKTsKKwlpZiAoYWN0aW9uKSB7CisJCXNlcV9wcmludGYocCwgIiAgICAgJXMiLCBhY3Rpb24tPm5hbWUpOworCQl3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgIT0gTlVMTCkKKwkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOworCX0KIAotCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKLQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJc2VxX3B1dGMocCwgJ1xuJyk7Ci0KLXNraXA6CitvdXQ6CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQogCXJldHVybiAwOwogfQogCisvKgorICogL3Byb2Mvc3RhdCBoZWxwZXJzCisgKi8KK3U2NCBhcmNoX2lycV9zdGF0X2NwdSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXU2NCBzdW0gPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLnRpbWVyX2lycXM7CisKKwlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5wbXVfaXJxczsKKwlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5tY2VfZXhjZXB0aW9uczsKKwlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5zcHVyaW91c19pcnFzOworCisJcmV0dXJuIHN1bTsKK30KKwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogdm9pZCBmaXh1cF9pcnFzKGNwdW1hc2tfdCBtYXApCiB7CkBAIC0zNTMsOCArNDAwLDcgQEAKIAlpZiAoaXJxICE9IE5PX0lSUSAmJiBpcnEgIT0gTk9fSVJRX0lHTk9SRSkKIAkJaGFuZGxlX29uZV9pcnEoaXJxKTsKIAllbHNlIGlmIChpcnEgIT0gTk9fSVJRX0lHTk9SRSkKLQkJLyogVGhhdCdzIG5vdCBTTVAgc2FmZSAuLi4gYnV0IHdobyBjYXJlcyA/ICovCi0JCXBwY19zcHVyaW91c19pbnRlcnJ1cHRzKys7CisJCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLnNwdXJpb3VzX2lycXMrKzsKIAogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKQEAgLTQ3NCw3ICs1MjAsNyBAQAogICovCiAKIHN0YXRpYyBMSVNUX0hFQUQoaXJxX2hvc3RzKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJxX2JpZ19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGlycV9iaWdfbG9jayk7CiBzdGF0aWMgdW5zaWduZWQgaW50IHJldm1hcF90cmVlc19hbGxvY2F0ZWQ7CiBzdGF0aWMgREVGSU5FX01VVEVYKHJldm1hcF90cmVlc19tdXRleCk7CiBzdHJ1Y3QgaXJxX21hcF9lbnRyeSBpcnFfbWFwW05SX0lSUVNdOwpAQCAtNTIwLDE0ICs1NjYsMTQgQEAKIAlpZiAoaG9zdC0+b3BzLT5tYXRjaCA9PSBOVUxMKQogCQlob3N0LT5vcHMtPm1hdGNoID0gZGVmYXVsdF9pcnFfaG9zdF9tYXRjaDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCiAJLyogSWYgaXQncyBhIGxlZ2FjeSBjb250cm9sbGVyLCBjaGVjayBmb3IgZHVwbGljYXRlcyBhbmQKIAkgKiBtYXJrIGl0IGFzIGFsbG9jYXRlZCAod2UgdXNlIGlycSAwIGhvc3QgcG9pbnRlciBmb3IgdGhhdAogCSAqLwogCWlmIChyZXZtYXBfdHlwZSA9PSBJUlFfSE9TVF9NQVBfTEVHQUNZKSB7CiAJCWlmIChpcnFfbWFwWzBdLmhvc3QgIT0gTlVMTCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAJCQkvKiBJZiB3ZSBhcmUgZWFybHkgYm9vdCwgd2UgY2FuJ3QgZnJlZSB0aGUgc3RydWN0dXJlLAogCQkJICogdG9vIGJhZC4uLgogCQkJICogdGhpcyB3aWxsIGJlIGZpeGVkIG9uY2Ugc2xhYiBpcyBtYWRlIGF2YWlsYWJsZSBlYXJseQpAQCAtNTQxLDcgKzU4Nyw3IEBACiAJfQogCiAJbGlzdF9hZGQoJmhvc3QtPmxpbmssICZpcnFfaG9zdHMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAogCS8qIEFkZGl0aW9uYWwgc2V0dXBzIHBlciByZXZtYXAgdHlwZSAqLwogCXN3aXRjaChyZXZtYXBfdHlwZSkgewpAQCAtNTkyLDEzICs2MzgsMTMgQEAKIAkgKiB0aGUgYWJzZW5jZSBvZiBhIGRldmljZSBub2RlLiBUaGlzIGlzbid0IGEgcHJvYmxlbSBzbyBmYXIKIAkgKiB5ZXQgdGhvdWdoLi4uCiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShoLCAmaXJxX2hvc3RzLCBsaW5rKQogCQlpZiAoaC0+b3BzLT5tYXRjaChoLCBub2RlKSkgewogCQkJZm91bmQgPSBoOwogCQkJYnJlYWs7CiAJCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGZvdW5kOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2ZpbmRfaG9zdCk7CkBAIC05NjcsNyArMTAxMyw3IEBACiAJaWYgKGNvdW50ID09IDAgfHwgY291bnQgPiAoaXJxX3ZpcnFfY291bnQgLSBOVU1fSVNBX0lOVEVSUlVQVFMpKQogCQlyZXR1cm4gTk9fSVJROwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAKIAkvKiBVc2UgaGludCBmb3IgMSBpbnRlcnJ1cHQgaWYgYW55ICovCiAJaWYgKGNvdW50ID09IDEgJiYgaGludCA+PSBOVU1fSVNBX0lOVEVSUlVQVFMgJiYKQEAgLTk5MSw3ICsxMDM3LDcgQEAKIAkJfQogCX0KIAlpZiAoZm91bmQgPT0gTk9fSVJRKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAJCXJldHVybiBOT19JUlE7CiAJfQogIGhpbnRfZm91bmQ6CkBAIC0xMDAwLDcgKzEwNDYsNyBAQAogCQlzbXBfd21iKCk7CiAJCWlycV9tYXBbaV0uaG9zdCA9IGhvc3Q7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gZm91bmQ7CiB9CiAKQEAgLTEwMTIsNyArMTA1OCw3IEBACiAJV0FSTl9PTiAodmlycSA8IE5VTV9JU0FfSU5URVJSVVBUUyk7CiAJV0FSTl9PTiAoY291bnQgPT0gMCB8fCAodmlycSArIGNvdW50KSA+IGlycV92aXJxX2NvdW50KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IHZpcnE7IGkgPCAodmlycSArIGNvdW50KTsgaSsrKSB7CiAJCXN0cnVjdCBpcnFfaG9zdCAqaG9zdDsKIApAQCAtMTAyNSw3ICsxMDcxLDcgQEAKIAkJc21wX3dtYigpOwogCQlpcnFfbWFwW2ldLmhvc3QgPSBOVUxMOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiB9CiAKIGludCBhcmNoX2Vhcmx5X2lycV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCmluZGV4IGI2YmQxZWEuLjQxYmFkYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJYXRvbWljX3NldCgma2dkYl9jcHVfZG9pbmdfc2luZ2xlX3N0ZXAsIC0xKTsKIAkJLyogc2V0IHRoZSB0cmFjZSBiaXQgaWYgd2UncmUgc3RlcHBpbmcgKi8KIAkJaWYgKHJlbWNvbV9pbl9idWZmZXJbMF0gPT0gJ3MnKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJCQltdHNwcihTUFJOX0RCQ1IwLAogCQkJICAgICAgbWZzcHIoU1BSTl9EQkNSMCkgfCBEQkNSMF9JQyB8IERCQ1IwX0lETSk7CiAJCQlsaW51eF9yZWdzLT5tc3IgfD0gTVNSX0RFOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYwppbmRleCBjOTMyOTc4Li4zZmQxYWY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaWZkZWYgQ09ORklHX0JPT0tFCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogI2RlZmluZSBNU1JfU0lOR0xFU1RFUAkoTVNSX0RFKQogI2Vsc2UKICNkZWZpbmUgTVNSX1NJTkdMRVNURVAJKE1TUl9TRSkKQEAgLTExMCw3ICsxMTAsNyBAQAogCSAqIGxpa2UgRGVjcmVtZW50ZXIgb3IgRXh0ZXJuYWwgSW50ZXJydXB0ICovCiAJcmVncy0+bXNyICY9IH5NU1JfRUU7CiAJcmVncy0+bXNyIHw9IE1TUl9TSU5HTEVTVEVQOwotI2lmZGVmIENPTkZJR19CT09LRQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAlyZWdzLT5tc3IgJj0gfk1TUl9DRTsKIAltdHNwcihTUFJOX0RCQ1IwLCBtZnNwcihTUFJOX0RCQ1IwKSB8IERCQ1IwX0lDIHwgREJDUjBfSURNKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCA3OWEwMGJiLi5kMDlkMWM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAKIAl1bnNpZ25lZCBjaGFyICpsb2NhbF9idWZmZXIgPSBrbWFsbG9jKFNQTFBBUl9NQVhMRU5HVEgsIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWxfYnVmZmVyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWQgXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzICVzIGttYWxsb2MgZmFpbHVyZSBhdCBsaW5lICVkXG4iLAogCQkgICAgICAgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CkBAIC0zODMsMTMgKzM4MywxMyBAQAogCQlpbnQgaWR4LCB3X2lkeDsKIAkJY2hhciAqd29ya2J1ZmZlciA9IGt6YWxsb2MoU1BMUEFSX01BWExFTkdUSCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghd29ya2J1ZmZlcikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZCBcbiIsCisJCQlwcmludGsoS0VSTl9FUlIgIiVzICVzIGttYWxsb2MgZmFpbHVyZSBhdCBsaW5lICVkXG4iLAogCQkJICAgICAgIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJa2ZyZWUobG9jYWxfYnVmZmVyKTsKIAkJCXJldHVybjsKIAkJfQogI2lmZGVmIExQQVJDRkdfREVCVUcKLQkJcHJpbnRrKEtFUk5fSU5GTyAic3VjY2VzcyBjYWxsaW5nIGdldC1zeXN0ZW0tcGFyYW1ldGVyIFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gInN1Y2Nlc3MgY2FsbGluZyBnZXQtc3lzdGVtLXBhcmFtZXRlclxuIik7CiAjZW5kaWYKIAkJc3BscGFyX3N0cmxlbiA9IGxvY2FsX2J1ZmZlclswXSAqIDI1NiArIGxvY2FsX2J1ZmZlclsxXTsKIAkJbG9jYWxfYnVmZmVyICs9IDI7CS8qIHN0ZXAgb3ZlciBzdHJsZW4gdmFsdWUgKi8KQEAgLTQ0MCw3ICs0NDAsNyBAQAogCiAJd2hpbGUgKChjcHVzX2RuID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoY3B1c19kbiwgImNwdSIpKSkgewogI2lmZGVmIExQQVJDRkdfREVCVUcKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVzX2RuICVwIFxuIiwgY3B1c19kbik7CisJCXByaW50ayhLRVJOX0VSUiAiY3B1c19kbiAlcFxuIiwgY3B1c19kbik7CiAjZW5kaWYKIAkJY291bnQrKzsKIAl9CkBAIC03MjUsNyArNzI1LDcgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgKmxwX2luZGV4X3B0cjsKIAl1bnNpZ25lZCBpbnQgbHBfaW5kZXggPSAwOwogCi0Jc2VxX3ByaW50ZihtLCAiJXMgJXMgXG4iLCBNT0RVTEVfTkFNRSwgTU9EVUxFX1ZFUlMpOworCXNlcV9wcmludGYobSwgIiVzICVzXG4iLCBNT0RVTEVfTkFNRSwgTU9EVUxFX1ZFUlMpOwogCiAJcm9vdGRuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKIAlpZiAocm9vdGRuKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMKaW5kZXggYWQ0NjFlNy4uOWNmMTk3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYwpAQCAtMzM4LDggKzMzOCw4IEBACiAKIAlyYyA9IG52cmFtX3dyaXRlX2hlYWRlcihuZXdfcGFydCk7CiAJaWYgKHJjIDw9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBudnJhbV93cml0ZV9oZWFkZXIgXAotCQkJCWZhaWxlZCAoJWQpXG4iLCByYyk7CisJCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjogbnZyYW1fd3JpdGVfaGVhZGVyICIKKwkJCQkiZmFpbGVkICglZClcbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAJcmMgPSBwcGNfbWQubnZyYW1fd3JpdGUoKGNoYXIgKikmc2VxX2luaXQsIHNpemVvZihzZXFfaW5pdCksICZ0bXBfaW5kZXgpOwogCWlmIChyYyA8PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibnZyYW1fY3JlYXRlX29zX3BhcnRpdGlvbjogbnZyYW1fd3JpdGUgIgotCQkJCSJmYWlsZWQgKCVkKVxuIiwgcmMpOworCQkgICAgICAgImZhaWxlZCAoJWQpXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAJCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKaW5kZXggMWE0ZmMwZC4uNjY2ZDA4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYwpAQCAtMjE0LDcgKzIxNCw3IEBACiBzdGF0aWMgaW50IG9mX2Rldl9waGFuZGxlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlwaGFuZGxlICpwaCA9IGRhdGE7Ci0JcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5ub2RlLT5saW51eF9waGFuZGxlID09ICpwaDsKKwlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldiktPm5vZGUtPnBoYW5kbGUgPT0gKnBoOwogfQogCiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9waGFuZGxlKHBoYW5kbGUgcGgpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IGNhZGJlZDYuLjI1OTdmOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC0xMDQ3LDEwICsxMDQ3LDggQEAKIAogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBidXMtPnNlbGY7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyArK2kpIHsKLQkJaWYgKChyZXMgPSBidXMtPnJlc291cmNlW2ldKSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmICghcmVzLT5mbGFncykKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpKSB7CisJCWlmICghcmVzIHx8ICFyZXMtPmZsYWdzKQogCQkJY29udGludWU7CiAJCWlmIChpID49IDMgJiYgYnVzLT5zZWxmLT50cmFuc3BhcmVudCkKIAkJCWNvbnRpbnVlOwpAQCAtMTE4MSwyMSArMTE3OSwyMCBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7Ci0KIAkJaWYgKHNraXBfaXNhX2lvcmVzb3VyY2VfYWxpZ24oZGV2KSkKLQkJCXJldHVybjsKLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKKwkJCXJldHVybiBzdGFydDsKKwkJaWYgKHN0YXJ0ICYgMHgzMDApCiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQogCX0KKworCXJldHVybiBzdGFydDsKIH0KIEVYUE9SVF9TWU1CT0wocGNpYmlvc19hbGlnbl9yZXNvdXJjZSk7CiAKQEAgLTEyNzgsOSArMTI3NSw4IEBACiAJcHJfZGVidWcoIlBDSTogQWxsb2NhdGluZyBidXMgcmVzb3VyY2VzIGZvciAlMDR4OiUwMnguLi5cbiIsCiAJCSBwY2lfZG9tYWluX25yKGJ1cyksIGJ1cy0+bnVtYmVyKTsKIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7ICsraSkgewotCQlpZiAoKHJlcyA9IGJ1cy0+cmVzb3VyY2VbaV0pID09IE5VTEwgfHwgIXJlcy0+ZmxhZ3MKLQkJICAgIHx8IHJlcy0+c3RhcnQgPiByZXMtPmVuZCB8fCByZXMtPnBhcmVudCkKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpKSB7CisJCWlmICghcmVzIHx8ICFyZXMtPmZsYWdzIHx8IHJlcy0+c3RhcnQgPiByZXMtPmVuZCB8fCByZXMtPnBhcmVudCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYnVzLT5wYXJlbnQgPT0gTlVMTCkKIAkJCXByID0gKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSA/CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwppbmRleCBjY2Y1NmFjLi5kNDNmYzY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCSAqIEc1IG1hY2hpbmVzLi4uIFNvIHdoZW4gc29tZXRoaW5nIGFza3MgZm9yIGJ1cyAwIGlvIGJhc2UKIAkgKiAoYnVzIDAgaXMgSFQgcm9vdCksIHdlIHJldHVybiB0aGUgQUdQIG9uZSBpbnN0ZWFkLgogCSAqLwotCWlmIChpbl9idXMgPT0gMCAmJiBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpIHsKKwlpZiAoaW5fYnVzID09IDAgJiYgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqYWdwOwogCiAJCWFncCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJ1My1hZ3AiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX29mX3NjYW4uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX29mX3NjYW4uYwppbmRleCA0YWExNzQwLi5jZDExZDVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfb2Zfc2Nhbi5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAlpbnQgcmVnbGVuLCBkZXZmbjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCi0JcHJfZGVidWcoIm9mX3NjYW5fYnVzKCVzKSBidXMgbm8gJWQuLi4gXG4iLAorCXByX2RlYnVnKCJvZl9zY2FuX2J1cyglcykgYnVzIG5vICVkLi4uXG4iLAogCQkgbm9kZS0+ZnVsbF9uYW1lLCBidXMtPm51bWJlcik7CiAKIAkvKiBTY2FuIGRpcmVjdCBjaGlsZHJlbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCmluZGV4IGEzYzExY2EuLjk1YWQ5ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKQEAgLTQ5NSw5ICs0OTUsNiBAQAogCiAJZW50cnktPm5yID0gMDsKIAotCWlmIChjdXJyZW50LT5waWQgPT0gMCkJCS8qIGlkbGUgdGFzaz8gKi8KLQkJcmV0dXJuIGVudHJ5OwotCiAJaWYgKCF1c2VyX21vZGUocmVncykpIHsKIAkJcGVyZl9jYWxsY2hhaW5fa2VybmVsKHJlZ3MsIGVudHJ5KTsKIAkJaWYgKGN1cnJlbnQtPm1tKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCAxZWI4NWZiLi5iNmNmOGYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtNzE4LDEwICs3MTgsMTAgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIHZvaWQgZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgY3B1KQorc3RhdGljIHZvaWQgZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFOwotCWV2ZW50LT5vbmNwdSA9IGNwdTsKKwlldmVudC0+b25jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJZXZlbnQtPnRzdGFtcF9ydW5uaW5nICs9IGV2ZW50LT5jdHgtPnRpbWUgLSBldmVudC0+dHN0YW1wX3N0b3BwZWQ7CiAJaWYgKGlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKIAkJZXZlbnQtPnBtdS0+ZW5hYmxlKGV2ZW50KTsKQEAgLTczNSw3ICs3MzUsNyBAQAogICovCiBpbnQgaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAogCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAotCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpCisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHc7CiAJbG9uZyBpLCBuLCBuMDsKQEAgLTc2NiwxMCArNzY2LDEwIEBACiAJCWNwdWh3LT5ldmVudFtpXS0+aHcuY29uZmlnID0gY3B1aHctPmV2ZW50c1tpXTsKIAljcHVjdHgtPmFjdGl2ZV9vbmNwdSArPSBuOwogCW4gPSAxOwotCWV2ZW50X3NjaGVkX2luKGdyb3VwX2xlYWRlciwgY3B1KTsKKwlldmVudF9zY2hlZF9pbihncm91cF9sZWFkZXIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViLCAmZ3JvdXBfbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CiAJCWlmIChzdWItPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKSB7Ci0JCQlldmVudF9zY2hlZF9pbihzdWIsIGNwdSk7CisJCQlldmVudF9zY2hlZF9pbihzdWIpOwogCQkJKytuOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wbWMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMKaW5kZXggMDUxNmUyZC4uNDYxNDk5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wbWMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jCkBAIC0zNyw3ICszNyw3IEBACiB9CiAKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhwbWNfb3duZXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhwbWNfb3duZXJfbG9jayk7CiBzdGF0aWMgdm9pZCAqcG1jX293bmVyX2NhbGxlcjsgLyogbW9zdGx5IGZvciBkZWJ1Z2dpbmcgKi8KIHBlcmZfaXJxX3QgcGVyZl9pcnEgPSBkdW1teV9wZXJmOwogCkBAIC00NSw3ICs0NSw3IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQlzcGluX2xvY2soJnBtY19vd25lcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZwbWNfb3duZXJfbG9jayk7CiAKIAlpZiAocG1jX293bmVyX2NhbGxlcikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJyZXNlcnZlX3BtY19oYXJkd2FyZTogIgpAQCAtNTksMjEgKzU5LDIxIEBACiAJcGVyZl9pcnEgPSBuZXdfcGVyZl9pcnEgPyBuZXdfcGVyZl9pcnEgOiBkdW1teV9wZXJmOwogCiAgb3V0OgotCXNwaW5fdW5sb2NrKCZwbWNfb3duZXJfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZwbWNfb3duZXJfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlc2VydmVfcG1jX2hhcmR3YXJlKTsKIAogdm9pZCByZWxlYXNlX3BtY19oYXJkd2FyZSh2b2lkKQogewotCXNwaW5fbG9jaygmcG1jX293bmVyX2xvY2spOworCXJhd19zcGluX2xvY2soJnBtY19vd25lcl9sb2NrKTsKIAogCVdBUk5fT04oISBwbWNfb3duZXJfY2FsbGVyKTsKIAogCXBtY19vd25lcl9jYWxsZXIgPSBOVUxMOwogCXBlcmZfaXJxID0gZHVtbXlfcGVyZjsKIAotCXNwaW5fdW5sb2NrKCZwbWNfb3duZXJfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZwbWNfb3duZXJfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWxlYXNlX3BtY19oYXJkd2FyZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggN2I4MTZkYS4uZTRkNzFjZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI0NSw2ICsyNDUsMjQgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCit2b2lkIGRvX3NlbmRfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgaW50IHNpZ25hbF9jb2RlLCBpbnQgYnJlYWtwdCkKK3sKKwlzaWdpbmZvX3QgaW5mbzsKKworCWlmIChub3RpZnlfZGllKERJRV9EQUJSX01BVENILCAiZGFicl9tYXRjaCIsIHJlZ3MsIGVycm9yX2NvZGUsCisJCQkxMSwgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKworCS8qIERlbGl2ZXIgdGhlIHNpZ25hbCB0byB1c2Vyc3BhY2UgKi8KKwlpbmZvLnNpX3NpZ25vID0gU0lHVFJBUDsKKwlpbmZvLnNpX2Vycm5vID0gYnJlYWtwdDsJLyogYnJlYWtwb2ludCBvciB3YXRjaHBvaW50IGlkICovCisJaW5mby5zaV9jb2RlID0gc2lnbmFsX2NvZGU7CisJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopYWRkcmVzczsKKwlmb3JjZV9zaWdfaW5mbyhTSUdUUkFQLCAmaW5mbywgY3VycmVudCk7Cit9CisjZWxzZQkvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLwogdm9pZCBkb19kYWJyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCSAgICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCiB7CkBAIC0yNTcsMTIgKzI3NSw2IEBACiAJaWYgKGRlYnVnZ2VyX2RhYnJfbWF0Y2gocmVncykpCiAJCXJldHVybjsKIAotCS8qIENsZWFyIHRoZSBEQUMgYW5kIHN0cnVjdCBlbnRyaWVzLiAgT25lIHNob3QgdHJpZ2dlciAqLwotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCW10c3ByKFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApICYgfihEQlNSX0RBQzFSIHwgREJTUl9EQUMxVwotCQkJCQkJCXwgREJDUjBfSURNKSk7Ci0jZW5kaWYKLQogCS8qIENsZWFyIHRoZSBEQUJSICovCiAJc2V0X2RhYnIoMCk7CiAKQEAgLTI3Myw5ICsyODUsODIgQEAKIAlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOwogCWZvcmNlX3NpZ19pbmZvKFNJR1RSQVAsICZpbmZvLCBjdXJyZW50KTsKIH0KKyNlbmRpZgkvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjdXJyZW50X2RhYnIpOwogCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworLyoKKyAqIFNldCB0aGUgZGVidWcgcmVnaXN0ZXJzIGJhY2sgdG8gdGhlaXIgZGVmYXVsdCAic2FmZSIgdmFsdWVzLgorICovCitzdGF0aWMgdm9pZCBzZXRfZGVidWdfcmVnX2RlZmF1bHRzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCit7CisJdGhyZWFkLT5pYWMxID0gdGhyZWFkLT5pYWMyID0gMDsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTID4gMgorCXRocmVhZC0+aWFjMyA9IHRocmVhZC0+aWFjNCA9IDA7CisjZW5kaWYKKwl0aHJlYWQtPmRhYzEgPSB0aHJlYWQtPmRhYzIgPSAwOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJdGhyZWFkLT5kdmMxID0gdGhyZWFkLT5kdmMyID0gMDsKKyNlbmRpZgorCXRocmVhZC0+ZGJjcjAgPSAwOworI2lmZGVmIENPTkZJR19CT09LRQorCS8qCisJICogRm9yY2UgVXNlci9TdXBlcnZpc29yIGJpdHMgdG8gYjExICh1c2VyLW9ubHkgTVNSW1BSXT0xKQorCSAqLworCXRocmVhZC0+ZGJjcjEgPSBEQkNSMV9JQUMxVVMgfCBEQkNSMV9JQUMyVVMgfAlcCisJCQlEQkNSMV9JQUMzVVMgfCBEQkNSMV9JQUM0VVM7CisJLyoKKwkgKiBGb3JjZSBEYXRhIEFkZHJlc3MgQ29tcGFyZSBVc2VyL1N1cGVydmlzb3IgYml0cyB0byBiZSBVc2VyLW9ubHkKKwkgKiAoMGIxMSBNU1JbUFJdPTEpIGFuZCBzZXQgYWxsIG90aGVyIGJpdHMgaW4gREJDUjIgcmVnaXN0ZXIgdG8gYmUgMC4KKwkgKi8KKwl0aHJlYWQtPmRiY3IyID0gREJDUjJfREFDMVVTIHwgREJDUjJfREFDMlVTOworI2Vsc2UKKwl0aHJlYWQtPmRiY3IxID0gMDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBwcmltZV9kZWJ1Z19yZWdzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCit7CisJbXRzcHIoU1BSTl9JQUMxLCB0aHJlYWQtPmlhYzEpOworCW10c3ByKFNQUk5fSUFDMiwgdGhyZWFkLT5pYWMyKTsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTID4gMgorCW10c3ByKFNQUk5fSUFDMywgdGhyZWFkLT5pYWMzKTsKKwltdHNwcihTUFJOX0lBQzQsIHRocmVhZC0+aWFjNCk7CisjZW5kaWYKKwltdHNwcihTUFJOX0RBQzEsIHRocmVhZC0+ZGFjMSk7CisJbXRzcHIoU1BSTl9EQUMyLCB0aHJlYWQtPmRhYzIpOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJbXRzcHIoU1BSTl9EVkMxLCB0aHJlYWQtPmR2YzEpOworCW10c3ByKFNQUk5fRFZDMiwgdGhyZWFkLT5kdmMyKTsKKyNlbmRpZgorCW10c3ByKFNQUk5fREJDUjAsIHRocmVhZC0+ZGJjcjApOworCW10c3ByKFNQUk5fREJDUjEsIHRocmVhZC0+ZGJjcjEpOworI2lmZGVmIENPTkZJR19CT09LRQorCW10c3ByKFNQUk5fREJDUjIsIHRocmVhZC0+ZGJjcjIpOworI2VuZGlmCit9CisvKgorICogVW5sZXNzIG5laXRoZXIgdGhlIG9sZCBvciBuZXcgdGhyZWFkIGFyZSBtYWtpbmcgdXNlIG9mIHRoZQorICogZGVidWcgcmVnaXN0ZXJzLCBzZXQgdGhlIGRlYnVnIHJlZ2lzdGVycyBmcm9tIHRoZSB2YWx1ZXMKKyAqIHN0b3JlZCBpbiB0aGUgbmV3IHRocmVhZC4KKyAqLworc3RhdGljIHZvaWQgc3dpdGNoX2Jvb2tlX2RlYnVnX3JlZ3Moc3RydWN0IHRocmVhZF9zdHJ1Y3QgKm5ld190aHJlYWQpCit7CisJaWYgKChjdXJyZW50LT50aHJlYWQuZGJjcjAgJiBEQkNSMF9JRE0pCisJCXx8IChuZXdfdGhyZWFkLT5kYmNyMCAmIERCQ1IwX0lETSkpCisJCQlwcmltZV9kZWJ1Z19yZWdzKG5ld190aHJlYWQpOworfQorI2Vsc2UJLyogIUNPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KK3N0YXRpYyB2b2lkIHNldF9kZWJ1Z19yZWdfZGVmYXVsdHMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKK3sKKwlpZiAodGhyZWFkLT5kYWJyKSB7CisJCXRocmVhZC0+ZGFiciA9IDA7CisJCXNldF9kYWJyKDApOworCX0KK30KKyNlbmRpZgkvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCisKIGludCBzZXRfZGFicih1bnNpZ25lZCBsb25nIGRhYnIpCiB7CiAJX19nZXRfY3B1X3ZhcihjdXJyZW50X2RhYnIpID0gZGFicjsKQEAgLTI4NCw3ICszNjksNyBAQAogCQlyZXR1cm4gcHBjX21kLnNldF9kYWJyKGRhYnIpOwogCiAJLyogWFhYIHNob3VsZCB3ZSBoYXZlIGEgQ1BVX0ZUUl9IQVNfREFCUiA/ICovCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCW10c3ByKFNQUk5fREFDMSwgZGFicik7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTKQogCW10c3ByKFNQUk5fREFCUiwgZGFicik7CkBAIC0zNzEsMTAgKzQ1Niw4IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKLQkvKiBJZiBuZXcgdGhyZWFkIERBQyAoSFcgYnJlYWtwb2ludCkgaXMgdGhlIHNhbWUgdGhlbiBsZWF2ZSBpdCAqLwotCWlmIChuZXctPnRocmVhZC5kYWJyKQotCQlzZXRfZGFicihuZXctPnRocmVhZC5kYWJyKTsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJc3dpdGNoX2Jvb2tlX2RlYnVnX3JlZ3MoJm5ldy0+dGhyZWFkKTsKICNlbHNlCiAJaWYgKHVubGlrZWx5KF9fZ2V0X2NwdV92YXIoY3VycmVudF9kYWJyKSAhPSBuZXctPnRocmVhZC5kYWJyKSkKIAkJc2V0X2RhYnIobmV3LT50aHJlYWQuZGFicik7CkBAIC01MTQsNyArNTk3LDcgQEAKIAlwcmludGsoIiAgQ1I6ICUwOGx4ICBYRVI6ICUwOGx4XG4iLCByZWdzLT5jY3IsIHJlZ3MtPnhlcik7CiAJdHJhcCA9IFRSQVAocmVncyk7CiAJaWYgKHRyYXAgPT0gMHgzMDAgfHwgdHJhcCA9PSAweDYwMCkKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJcHJpbnRrKCJERUFSOiAiUkVHIiwgRVNSOiAiUkVHIlxuIiwgcmVncy0+ZGFyLCByZWdzLT5kc2lzcik7CiAjZWxzZQogCQlwcmludGsoIkRBUjogIlJFRyIsIERTSVNSOiAiUkVHIlxuIiwgcmVncy0+ZGFyLCByZWdzLT5kc2lzcik7CkBAIC01NTYsMTQgKzYzOSw3IEBACiB7CiAJZGlzY2FyZF9sYXp5X2NwdV9zdGF0ZSgpOwogCi0JaWYgKGN1cnJlbnQtPnRocmVhZC5kYWJyKSB7Ci0JCWN1cnJlbnQtPnRocmVhZC5kYWJyID0gMDsKLQkJc2V0X2RhYnIoMCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKLQkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH4oREJTUl9EQUMxUiB8IERCU1JfREFDMVcpOwotI2VuZGlmCi0JfQorCXNldF9kZWJ1Z19yZWdfZGVmYXVsdHMoJmN1cnJlbnQtPnRocmVhZCk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggNGVjMzAwOC4uNDMyMzhiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTYxLDM2NSArNjEsMTIgQEAKICNkZWZpbmUgREJHKGZtdC4uLikKICNlbmRpZgogCi0KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBkdF9yb290X2FkZHJfY2VsbHM7Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOwotCiAjaWZkZWYgQ09ORklHX1BQQzY0CiBpbnQgX19pbml0ZGF0YSBpb21tdV9pc19vZmY7CiBpbnQgX19pbml0ZGF0YSBpb21tdV9mb3JjZV9vbjsKIHVuc2lnbmVkIGxvbmcgdGNlX2FsbG9jX3N0YXJ0LCB0Y2VfYWxsb2NfZW5kOwogI2VuZGlmCiAKLXR5cGVkZWYgdTMyIGNlbGxfdDsKLQotI2lmIDAKLXN0YXRpYyBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmluaXRpYWxfYm9vdF9wYXJhbXMgX19pbml0ZGF0YTsKLSNlbHNlCi1zdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmluaXRpYWxfYm9vdF9wYXJhbXM7Ci0jZW5kaWYKLQotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWxsbm9kZXM7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi0KLWV4dGVybiByd2xvY2tfdCBkZXZ0cmVlX2xvY2s7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi0KLS8qIGV4cG9ydCB0aGF0IHRvIG91dHNpZGUgd29ybGQgKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwotCi1zdGF0aWMgaW5saW5lIGNoYXIgKmZpbmRfZmxhdF9kdF9zdHJpbmcodTMyIG9mZnNldCkKLXsKLQlyZXR1cm4gKChjaGFyICopaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RyaW5ncyArIG9mZnNldDsKLX0KLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2NhbiB0aGUgZmxhdHRlbmVkIGRldmljZS10cmVlLCBpdCBpcwotICogdXNlZCB0byBleHRyYWN0IHRoZSBtZW1vcnkgaW5mb3JtYXRpb25zIGF0IGJvb3QgYmVmb3JlIHdlIGNhbgotICogdW5mbGF0dGVuIHRoZSB0cmVlCi0gKi8KLWludCBfX2luaXQgb2Zfc2Nhbl9mbGF0X2R0KGludCAoKml0KSh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJICAgICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLAotCQkJCSAgICAgdm9pZCAqZGF0YSksCi0JCQkgICB2b2lkICpkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgcCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0JaW50IHJjID0gMDsKLQlpbnQgZGVwdGggPSAtMTsKLQotCWRvIHsKLQkJdTMyIHRhZyA9ICooKHUzMiAqKXApOwotCQljaGFyICpwYXRocDsKLQkJCi0JCXAgKz0gNDsKLQkJaWYgKHRhZyA9PSBPRl9EVF9FTkRfTk9ERSkgewotCQkJZGVwdGggLS07Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodGFnID09IE9GX0RUX05PUCkKLQkJCWNvbnRpbnVlOwotCQlpZiAodGFnID09IE9GX0RUX0VORCkKLQkJCWJyZWFrOwotCQlpZiAodGFnID09IE9GX0RUX1BST1ApIHsKLQkJCXUzMiBzeiA9ICooKHUzMiAqKXApOwotCQkJcCArPSA4OwotCQkJaWYgKGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24gPCAweDEwKQotCQkJCXAgPSBfQUxJR04ocCwgc3ogPj0gOCA/IDggOiA0KTsKLQkJCXAgKz0gc3o7Ci0JCQlwID0gX0FMSUdOKHAsIDQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRhZyAhPSBPRl9EVF9CRUdJTl9OT0RFKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIHRhZyAleCBzY2FubmluZyBmbGF0dGVuZWQiCi0JCQkgICAgICAgIiBkZXZpY2UgdHJlZSAhXG4iLCB0YWcpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZGVwdGgrKzsKLQkJcGF0aHAgPSAoY2hhciAqKXA7Ci0JCXAgPSBfQUxJR04ocCArIHN0cmxlbihwYXRocCkgKyAxLCA0KTsKLQkJaWYgKCgqcGF0aHApID09ICcvJykgewotCQkJY2hhciAqbHAsICpucDsKLQkJCWZvciAobHAgPSBOVUxMLCBucCA9IHBhdGhwOyAqbnA7IG5wKyspCi0JCQkJaWYgKCgqbnApID09ICcvJykKLQkJCQkJbHAgPSBucCsxOwotCQkJaWYgKGxwICE9IE5VTEwpCi0JCQkJcGF0aHAgPSBscDsKLQkJfQotCQlyYyA9IGl0KHAsIHBhdGhwLCBkZXB0aCwgZGF0YSk7Ci0JCWlmIChyYyAhPSAwKQotCQkJYnJlYWs7CQkKLQl9IHdoaWxlKDEpOwotCi0JcmV0dXJuIHJjOwotfQotCi11bnNpZ25lZCBsb25nIF9faW5pdCBvZl9nZXRfZmxhdF9kdF9yb290KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBwID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQotCXdoaWxlKCooKHUzMiAqKXApID09IE9GX0RUX05PUCkKLQkJcCArPSA0OwotCUJVR19PTiAoKigodTMyICopcCkgIT0gT0ZfRFRfQkVHSU5fTk9ERSk7Ci0JcCArPSA0OwotCXJldHVybiBfQUxJR04ocCArIHN0cmxlbigoY2hhciAqKXApICsgMSwgNCk7Ci19Ci0KLS8qKgotICogVGhpcyAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgd2l0aGluIHNjYW5fZmxhdHRlbmVkX2R0IGNhbGxiYWNrIHRvIGdldAotICogYWNjZXNzIHRvIHByb3BlcnRpZXMKLSAqLwotdm9pZCogX19pbml0IG9mX2dldF9mbGF0X2R0X3Byb3AodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSB1bnNpZ25lZCBsb25nICpzaXplKQotewotCXVuc2lnbmVkIGxvbmcgcCA9IG5vZGU7Ci0KLQlkbyB7Ci0JCXUzMiB0YWcgPSAqKCh1MzIgKilwKTsKLQkJdTMyIHN6LCBub2ZmOwotCQljb25zdCBjaGFyICpuc3RyOwotCi0JCXAgKz0gNDsKLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApCi0JCQljb250aW51ZTsKLQkJaWYgKHRhZyAhPSBPRl9EVF9QUk9QKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJc3ogPSAqKCh1MzIgKilwKTsKLQkJbm9mZiA9ICooKHUzMiAqKShwICsgNCkpOwotCQlwICs9IDg7Ci0JCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCXAgPSBfQUxJR04ocCwgc3ogPj0gOCA/IDggOiA0KTsKLQotCQluc3RyID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKLQkJaWYgKG5zdHIgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZmluZCBwcm9wZXJ0eSBpbmRleCIKLQkJCSAgICAgICAiIG5hbWUgIVxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlpZiAoc3RyY21wKG5hbWUsIG5zdHIpID09IDApIHsKLQkJCWlmIChzaXplKQotCQkJCSpzaXplID0gc3o7Ci0JCQlyZXR1cm4gKHZvaWQgKilwOwotCQl9Ci0JCXAgKz0gc3o7Ci0JCXAgPSBfQUxJR04ocCwgNCk7Ci0JfSB3aGlsZSgxKTsKLX0KLQotaW50IF9faW5pdCBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpjb21wYXQpCi17Ci0JY29uc3QgY2hhciogY3A7Ci0JdW5zaWduZWQgbG9uZyBjcGxlbiwgbDsKLQotCWNwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7Ci0JaWYgKGNwID09IE5VTEwpCi0JCXJldHVybiAwOwotCXdoaWxlIChjcGxlbiA+IDApIHsKLQkJaWYgKHN0cm5jYXNlY21wKGNwLCBjb21wYXQsIHN0cmxlbihjb21wYXQpKSA9PSAwKQotCQkJcmV0dXJuIDE7Ci0JCWwgPSBzdHJsZW4oY3ApICsgMTsKLQkJY3AgKz0gbDsKLQkJY3BsZW4gLT0gbDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgKl9faW5pdCB1bmZsYXR0ZW5fZHRfYWxsb2ModW5zaWduZWQgbG9uZyAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pCi17Ci0Jdm9pZCAqcmVzOwotCi0JKm1lbSA9IF9BTElHTigqbWVtLCBhbGlnbik7Ci0JcmVzID0gKHZvaWQgKikqbWVtOwotCSptZW0gKz0gc2l6ZTsKLQotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB1bmZsYXR0ZW5fZHRfbm9kZSh1bnNpZ25lZCBsb25nIG1lbSwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqcCwKLQkJCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpkYWQsCi0JCQkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKiphbGxuZXh0cHAsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZnBzaXplKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcCwgKipwcmV2X3BwID0gTlVMTDsKLQljaGFyICpwYXRocDsKLQl1MzIgdGFnOwotCXVuc2lnbmVkIGludCBsLCBhbGxvY2w7Ci0JaW50IGhhc19uYW1lID0gMDsKLQlpbnQgbmV3X2Zvcm1hdCA9IDA7Ci0KLQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJcHJpbnRrKCJXZWlyZCB0YWcgYXQgc3RhcnQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7Ci0JCXJldHVybiBtZW07Ci0JfQotCSpwICs9IDQ7Ci0JcGF0aHAgPSAoY2hhciAqKSpwOwotCWwgPSBhbGxvY2wgPSBzdHJsZW4ocGF0aHApICsgMTsKLQkqcCA9IF9BTElHTigqcCArIGwsIDQpOwotCi0JLyogdmVyc2lvbiAweDEwIGhhcyBhIG1vcmUgY29tcGFjdCB1bml0IG5hbWUgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdWxsCi0JICogcGF0aC4gd2UgYWNjdW11bGF0ZSB0aGUgZnVsbCBwYXRoIHNpemUgdXNpbmcgImZwc2l6ZSIsIHdlJ2xsIHJlYnVpbGQKLQkgKiBpdCBsYXRlci4gV2UgZGV0ZWN0IHRoaXMgYmVjYXVzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBuYW1lIGlzCi0JICogbm90ICcvJy4KLQkgKi8KLQlpZiAoKCpwYXRocCkgIT0gJy8nKSB7Ci0JCW5ld19mb3JtYXQgPSAxOwotCQlpZiAoZnBzaXplID09IDApIHsKLQkJCS8qIHJvb3Qgbm9kZTogc3BlY2lhbCBjYXNlLiBmcHNpemUgYWNjb3VudHMgZm9yIHBhdGgKLQkJCSAqIHBsdXMgdGVybWluYXRpbmcgemVyby4gcm9vdCBub2RlIG9ubHkgaGFzICcvJywgc28KLQkJCSAqIGZwc2l6ZSBzaG91bGQgYmUgMiwgYnV0IHdlIHdhbnQgdG8gYXZvaWQgdGhlIGZpcnN0Ci0JCQkgKiBsZXZlbCBub2RlcyB0byBoYXZlIHR3byAnLycgc28gd2UgdXNlIGZwc2l6ZSAxIGhlcmUKLQkJCSAqLwotCQkJZnBzaXplID0gMTsKLQkJCWFsbG9jbCA9IDI7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBhY2NvdW50IGZvciAnLycgYW5kIHBhdGggc2l6ZSBtaW51cyB0ZXJtaW5hbCAwCi0JCQkgKiBhbHJlYWR5IGluICdsJwotCQkJICovCi0JCQlmcHNpemUgKz0gbDsKLQkJCWFsbG9jbCA9IGZwc2l6ZTsKLQkJfQotCX0KLQotCi0JbnAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBkZXZpY2Vfbm9kZSkgKyBhbGxvY2wsCi0JCQkJX19hbGlnbm9mX18oc3RydWN0IGRldmljZV9ub2RlKSk7Ci0JaWYgKGFsbG5leHRwcCkgewotCQltZW1zZXQobnAsIDAsIHNpemVvZigqbnApKTsKLQkJbnAtPmZ1bGxfbmFtZSA9ICgoY2hhciopbnApICsgc2l6ZW9mKHN0cnVjdCBkZXZpY2Vfbm9kZSk7Ci0JCWlmIChuZXdfZm9ybWF0KSB7Ci0JCQljaGFyICpwID0gbnAtPmZ1bGxfbmFtZTsKLQkJCS8qIHJlYnVpbGQgZnVsbCBwYXRoIGZvciBuZXcgZm9ybWF0ICovCi0JCQlpZiAoZGFkICYmIGRhZC0+cGFyZW50KSB7Ci0JCQkJc3RyY3B5KHAsIGRhZC0+ZnVsbF9uYW1lKTsKLSNpZmRlZiBERUJVRwotCQkJCWlmICgoc3RybGVuKHApICsgbCArIDEpICE9IGFsbG9jbCkgewotCQkJCQlEQkcoIiVzOiBwOiAlZCwgbDogJWQsIGE6ICVkXG4iLAotCQkJCQkgICAgcGF0aHAsIChpbnQpc3RybGVuKHApLCBsLCBhbGxvY2wpOwotCQkJCX0KLSNlbmRpZgotCQkJCXAgKz0gc3RybGVuKHApOwotCQkJfQotCQkJKihwKyspID0gJy8nOwotCQkJbWVtY3B5KHAsIHBhdGhwLCBsKTsKLQkJfSBlbHNlCi0JCQltZW1jcHkobnAtPmZ1bGxfbmFtZSwgcGF0aHAsIGwpOwotCQlwcmV2X3BwID0gJm5wLT5wcm9wZXJ0aWVzOwotCQkqKmFsbG5leHRwcCA9IG5wOwotCQkqYWxsbmV4dHBwID0gJm5wLT5hbGxuZXh0OwotCQlpZiAoZGFkICE9IE5VTEwpIHsKLQkJCW5wLT5wYXJlbnQgPSBkYWQ7Ci0JCQkvKiB3ZSB0ZW1wb3JhcmlseSB1c2UgdGhlIG5leHQgZmllbGQgYXMgYGxhc3RfY2hpbGQnKi8KLQkJCWlmIChkYWQtPm5leHQgPT0gMCkKLQkJCQlkYWQtPmNoaWxkID0gbnA7Ci0JCQllbHNlCi0JCQkJZGFkLT5uZXh0LT5zaWJsaW5nID0gbnA7Ci0JCQlkYWQtPm5leHQgPSBucDsKLQkJfQotCQlrcmVmX2luaXQoJm5wLT5rcmVmKTsKLQl9Ci0Jd2hpbGUoMSkgewotCQl1MzIgc3osIG5vZmY7Ci0JCWNoYXIgKnBuYW1lOwotCi0JCXRhZyA9ICooKHUzMiAqKSgqcCkpOwotCQlpZiAodGFnID09IE9GX0RUX05PUCkgewotCQkJKnAgKz0gNDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgIT0gT0ZfRFRfUFJPUCkKLQkJCWJyZWFrOwotCQkqcCArPSA0OwotCQlzeiA9ICooKHUzMiAqKSgqcCkpOwotCQlub2ZmID0gKigodTMyICopKCgqcCkgKyA0KSk7Ci0JCSpwICs9IDg7Ci0JCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uIDwgMHgxMCkKLQkJCSpwID0gX0FMSUdOKCpwLCBzeiA+PSA4ID8gOCA6IDQpOwotCi0JCXBuYW1lID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKLQkJaWYgKHBuYW1lID09IE5VTEwpIHsKLQkJCXByaW50aygiQ2FuJ3QgZmluZCBwcm9wZXJ0eSBuYW1lIGluIGxpc3QgIVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RyY21wKHBuYW1lLCAibmFtZSIpID09IDApCi0JCQloYXNfbmFtZSA9IDE7Ci0JCWwgPSBzdHJsZW4ocG5hbWUpICsgMTsKLQkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSksCi0JCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBwcm9wZXJ0eSkpOwotCQlpZiAoYWxsbmV4dHBwKSB7Ci0JCQlpZiAoc3RyY21wKHBuYW1lLCAibGludXgscGhhbmRsZSIpID09IDApIHsKLQkJCQlucC0+bm9kZSA9ICooKHUzMiAqKSpwKTsKLQkJCQlpZiAobnAtPmxpbnV4X3BoYW5kbGUgPT0gMCkKLQkJCQkJbnAtPmxpbnV4X3BoYW5kbGUgPSBucC0+bm9kZTsKLQkJCX0KLQkJCWlmIChzdHJjbXAocG5hbWUsICJpYm0scGhhbmRsZSIpID09IDApCi0JCQkJbnAtPmxpbnV4X3BoYW5kbGUgPSAqKCh1MzIgKikqcCk7Ci0JCQlwcC0+bmFtZSA9IHBuYW1lOwotCQkJcHAtPmxlbmd0aCA9IHN6OwotCQkJcHAtPnZhbHVlID0gKHZvaWQgKikqcDsKLQkJCSpwcmV2X3BwID0gcHA7Ci0JCQlwcmV2X3BwID0gJnBwLT5uZXh0OwotCQl9Ci0JCSpwID0gX0FMSUdOKCgqcCkgKyBzeiwgNCk7Ci0JfQotCS8qIHdpdGggdmVyc2lvbiAweDEwIHdlIG1heSBub3QgaGF2ZSB0aGUgbmFtZSBwcm9wZXJ0eSwgcmVjcmVhdGUKLQkgKiBpdCBoZXJlIGZyb20gdGhlIHVuaXQgbmFtZSBpZiBhYnNlbnQKLQkgKi8KLQlpZiAoIWhhc19uYW1lKSB7Ci0JCWNoYXIgKnAgPSBwYXRocCwgKnBzID0gcGF0aHAsICpwYSA9IE5VTEw7Ci0JCWludCBzejsKLQotCQl3aGlsZSAoKnApIHsKLQkJCWlmICgoKnApID09ICdAJykKLQkJCQlwYSA9IHA7Ci0JCQlpZiAoKCpwKSA9PSAnLycpCi0JCQkJcHMgPSBwICsgMTsKLQkJCXArKzsKLQkJfQotCQlpZiAocGEgPCBwcykKLQkJCXBhID0gcDsKLQkJc3ogPSAocGEgLSBwcykgKyAxOwotCQlwcCA9IHVuZmxhdHRlbl9kdF9hbGxvYygmbWVtLCBzaXplb2Yoc3RydWN0IHByb3BlcnR5KSArIHN6LAotCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKLQkJaWYgKGFsbG5leHRwcCkgewotCQkJcHAtPm5hbWUgPSAibmFtZSI7Ci0JCQlwcC0+bGVuZ3RoID0gc3o7Ci0JCQlwcC0+dmFsdWUgPSBwcCArIDE7Ci0JCQkqcHJldl9wcCA9IHBwOwotCQkJcHJldl9wcCA9ICZwcC0+bmV4dDsKLQkJCW1lbWNweShwcC0+dmFsdWUsIHBzLCBzeiAtIDEpOwotCQkJKChjaGFyICopcHAtPnZhbHVlKVtzeiAtIDFdID0gMDsKLQkJCURCRygiZml4ZWQgdXAgbmFtZSBmb3IgJXMgLT4gJXNcbiIsIHBhdGhwLAotCQkJCShjaGFyICopcHAtPnZhbHVlKTsKLQkJfQotCX0KLQlpZiAoYWxsbmV4dHBwKSB7Ci0JCSpwcmV2X3BwID0gTlVMTDsKLQkJbnAtPm5hbWUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJuYW1lIiwgTlVMTCk7Ci0JCW5wLT50eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKLQotCQlpZiAoIW5wLT5uYW1lKQotCQkJbnAtPm5hbWUgPSAiPE5VTEw+IjsKLQkJaWYgKCFucC0+dHlwZSkKLQkJCW5wLT50eXBlID0gIjxOVUxMPiI7Ci0JfQotCXdoaWxlICh0YWcgPT0gT0ZfRFRfQkVHSU5fTk9ERSkgewotCQltZW0gPSB1bmZsYXR0ZW5fZHRfbm9kZShtZW0sIHAsIG5wLCBhbGxuZXh0cHAsIGZwc2l6ZSk7Ci0JCXRhZyA9ICooKHUzMiAqKSgqcCkpOwotCX0KLQlpZiAodGFnICE9IE9GX0RUX0VORF9OT0RFKSB7Ci0JCXByaW50aygiV2VpcmQgdGFnIGF0IGVuZCBvZiBub2RlOiAleFxuIiwgdGFnKTsKLQkJcmV0dXJuIG1lbTsKLQl9Ci0JKnAgKz0gNDsKLQlyZXR1cm4gbWVtOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9wYXJzZV9tZW0oY2hhciAqcCkKIHsKIAlpZiAoIXApCkBAIC00NDYsNyArOTMsNyBAQAogCURCRygiLT4gbW92ZV9kZXZpY2VfdHJlZVxuIik7CiAKIAlzdGFydCA9IF9fcGEoaW5pdGlhbF9ib290X3BhcmFtcyk7Ci0Jc2l6ZSA9IGluaXRpYWxfYm9vdF9wYXJhbXMtPnRvdGFsc2l6ZTsKKwlzaXplID0gYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+dG90YWxzaXplKTsKIAogCWlmICgobWVtb3J5X2xpbWl0ICYmIChzdGFydCArIHNpemUpID4gbWVtb3J5X2xpbWl0KSB8fAogCQkJb3ZlcmxhcHNfY3Jhc2hrZXJuZWwoc3RhcnQsIHNpemUpKSB7CkBAIC00NTksNTQgKzEwNiw2IEBACiAJREJHKCI8LSBtb3ZlX2RldmljZV90cmVlXG4iKTsKIH0KIAotLyoqCi0gKiB1bmZsYXR0ZW5zIHRoZSBkZXZpY2UtdHJlZSBwYXNzZWQgYnkgdGhlIGZpcm13YXJlLCBjcmVhdGluZyB0aGUKLSAqIHRyZWUgb2Ygc3RydWN0IGRldmljZV9ub2RlLiBJdCBhbHNvIGZpbGxzIHRoZSAibmFtZSIgYW5kICJ0eXBlIgotICogcG9pbnRlcnMgb2YgdGhlIG5vZGVzIHNvIHRoZSBub3JtYWwgZGV2aWNlLXRyZWUgd2Fsa2luZyBmdW5jdGlvbnMKLSAqIGNhbiBiZSB1c2VkICh0aGlzIHVzZWQgdG8gYmUgZG9uZSBieSBmaW5pc2hfZGV2aWNlX3RyZWUpCi0gKi8KLXZvaWQgX19pbml0IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIG1lbSwgc2l6ZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKiphbGxuZXh0cCA9ICZhbGxub2RlczsKLQotCURCRygiIC0+IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKLQotCS8qIEZpcnN0IHBhc3MsIHNjYW4gZm9yIHNpemUgKi8KLQlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0Jc2l6ZSA9IHVuZmxhdHRlbl9kdF9ub2RlKDAsICZzdGFydCwgTlVMTCwgTlVMTCwgMCk7Ci0Jc2l6ZSA9IChzaXplIHwgMykgKyAxOwotCi0JREJHKCIgIHNpemUgaXMgJWx4LCBhbGxvY2F0aW5nLi4uXG4iLCBzaXplKTsKLQotCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGV4cGFuZGVkIGRldmljZSB0cmVlICovCi0JbWVtID0gbG1iX2FsbG9jKHNpemUgKyA0LCBfX2FsaWdub2ZfXyhzdHJ1Y3QgZGV2aWNlX25vZGUpKTsKLQltZW0gPSAodW5zaWduZWQgbG9uZykgX192YShtZW0pOwotCi0JKCh1MzIgKiltZW0pW3NpemUgLyA0XSA9IDB4ZGVhZGJlZWY7Ci0KLQlEQkcoIiAgdW5mbGF0dGVuaW5nICVseC4uLlxuIiwgbWVtKTsKLQotCS8qIFNlY29uZCBwYXNzLCBkbyBhY3R1YWwgdW5mbGF0dGVuaW5nICovCi0Jc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCXVuZmxhdHRlbl9kdF9ub2RlKG1lbSwgJnN0YXJ0LCBOVUxMLCAmYWxsbmV4dHAsIDApOwotCWlmICgqKCh1MzIgKilzdGFydCkgIT0gT0ZfRFRfRU5EKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXZWlyZCB0YWcgYXQgZW5kIG9mIHRyZWU6ICUwOHhcbiIsICooKHUzMiAqKXN0YXJ0KSk7Ci0JaWYgKCgodTMyICopbWVtKVtzaXplIC8gNF0gIT0gMHhkZWFkYmVlZikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRW5kIG9mIHRyZWUgbWFya2VyIG92ZXJ3cml0dGVuOiAlMDh4XG4iLAotCQkgICAgICAgKCh1MzIgKiltZW0pW3NpemUgLyA0XSApOwotCSphbGxuZXh0cCA9IE5VTEw7Ci0KLQkvKiBHZXQgcG9pbnRlciB0byBPRiAiL2Nob3NlbiIgbm9kZSBmb3IgdXNlIGV2ZXJ5d2hlcmUgKi8KLQlvZl9jaG9zZW4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2Nob3NlbiIpOwotCWlmIChvZl9jaG9zZW4gPT0gTlVMTCkKLQkJb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW5AMCIpOwotCi0JREJHKCIgPC0gdW5mbGF0dGVuX2RldmljZV90cmVlKClcbiIpOwotfQotCiAvKgogICogaWJtLHBhLWZlYXR1cmVzIGlzIGEgcGVyLWNwdSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIGEgc3RyaW5nIG9mCiAgKiBhdHRyaWJ1dGUgZGVzY3JpcHRvcnMsIGVhY2ggb2Ygd2hpY2ggaGFzIGEgMiBieXRlIGhlYWRlciBwbHVzIHVwCkBAIC03NjMsNDggKzM2Miw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKQotewotCXVuc2lnbmVkIGxvbmcgbDsKLQl1MzIgKnByb3A7Ci0KLQlEQkcoIkxvb2tpbmcgZm9yIGluaXRyZCBwcm9wZXJ0aWVzLi4uICIpOwotCi0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1zdGFydCIsICZsKTsKLQlpZiAocHJvcCkgewotCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKG9mX3JlYWRfdWxvbmcocHJvcCwgbC80KSk7Ci0KLQkJcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1lbmQiLCAmbCk7Ci0JCWlmIChwcm9wKSB7Ci0JCQlpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpCi0JCQkJCV9fdmEob2ZfcmVhZF91bG9uZyhwcm9wLCBsLzQpKTsKLQkJCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlpbml0cmRfc3RhcnQgPSAwOwotCQl9Ci0JfQotCi0JREJHKCJpbml0cmRfc3RhcnQ9MHglbHggIGluaXRyZF9lbmQ9MHglbHhcbiIsIGluaXRyZF9zdGFydCwgaW5pdHJkX2VuZCk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5JVFJEICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW4odW5zaWduZWQgbG9uZyBub2RlLAotCQkJCQkgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fYXJjaCh1bnNpZ25lZCBsb25nIG5vZGUpCiB7CiAJdW5zaWduZWQgbG9uZyAqbHByb3A7Ci0JdW5zaWduZWQgbG9uZyBsOwotCWNoYXIgKnA7Ci0KLQlEQkcoInNlYXJjaCBcImNob3NlblwiLCBkZXB0aDogJWQsIHVuYW1lOiAlc1xuIiwgZGVwdGgsIHVuYW1lKTsKLQotCWlmIChkZXB0aCAhPSAxIHx8Ci0JICAgIChzdHJjbXAodW5hbWUsICJjaG9zZW4iKSAhPSAwICYmIHN0cmNtcCh1bmFtZSwgImNob3NlbkAwIikgIT0gMCkpCi0JCXJldHVybiAwOwogCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAJLyogY2hlY2sgaWYgaW9tbXUgaXMgZm9yY2VkIG9uIG9yIG9mZiAqLwpAQCAtODE1LDE3ICszNzUsMTcgQEAKICNlbmRpZgogCiAJLyogbWVtPXggb24gdGhlIGNvbW1hbmQgbGluZSBpcyB0aGUgcHJlZmVycmVkIG1lY2hhbmlzbSAqLwotIAlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LG1lbW9yeS1saW1pdCIsIE5VTEwpOwotIAlpZiAobHByb3ApCi0gCQltZW1vcnlfbGltaXQgPSAqbHByb3A7CisJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxtZW1vcnktbGltaXQiLCBOVUxMKTsKKwlpZiAobHByb3ApCisJCW1lbW9yeV9saW1pdCA9ICpscHJvcDsKIAogI2lmZGVmIENPTkZJR19QUEM2NAotIAlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHRjZS1hbGxvYy1zdGFydCIsIE5VTEwpOwotIAlpZiAobHByb3ApCi0gCQl0Y2VfYWxsb2Nfc3RhcnQgPSAqbHByb3A7Ci0gCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdGNlLWFsbG9jLWVuZCIsIE5VTEwpOwotIAlpZiAobHByb3ApCi0gCQl0Y2VfYWxsb2NfZW5kID0gKmxwcm9wOworCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdGNlLWFsbG9jLXN0YXJ0IiwgTlVMTCk7CisJaWYgKGxwcm9wKQorCQl0Y2VfYWxsb2Nfc3RhcnQgPSAqbHByb3A7CisJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx0Y2UtYWxsb2MtZW5kIiwgTlVMTCk7CisJaWYgKGxwcm9wKQorCQl0Y2VfYWxsb2NfZW5kID0gKmxwcm9wOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS0VYRUMKQEAgLTgzNyw1MSArMzk3LDYgQEAKIAlpZiAobHByb3ApCiAJCWNyYXNoa19yZXMuZW5kID0gY3Jhc2hrX3Jlcy5zdGFydCArICpscHJvcCAtIDE7CiAjZW5kaWYKLQotCWVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZChub2RlKTsKLQotCS8qIFJldHJlaXZlIGNvbW1hbmQgbGluZSAqLwotIAlwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiYm9vdGFyZ3MiLCAmbCk7Ci0JaWYgKHAgIT0gTlVMTCAmJiBsID4gMCkKLQkJc3RybGNweShjbWRfbGluZSwgcCwgbWluKChpbnQpbCwgQ09NTUFORF9MSU5FX1NJWkUpKTsKLQotI2lmZGVmIENPTkZJR19DTURMSU5FCi0JaWYgKHAgPT0gTlVMTCB8fCBsID09IDAgfHwgKGwgPT0gMSAmJiAoKnApID09IDApKQotCQlzdHJsY3B5KGNtZF9saW5lLCBDT05GSUdfQ01ETElORSwgQ09NTUFORF9MSU5FX1NJWkUpOwotI2VuZGlmIC8qIENPTkZJR19DTURMSU5FICovCi0KLQlEQkcoIkNvbW1hbmQgbGluZSBpczogJXNcbiIsIGNtZF9saW5lKTsKLQotCS8qIGJyZWFrIG5vdyAqLwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKLXsKLQl1MzIgKnByb3A7Ci0KLQlpZiAoZGVwdGggIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiI3NpemUtY2VsbHMiLCBOVUxMKTsKLQlkdF9yb290X3NpemVfY2VsbHMgPSAocHJvcCA9PSBOVUxMKSA/IDEgOiAqcHJvcDsKLQlEQkcoImR0X3Jvb3Rfc2l6ZV9jZWxscyA9ICV4XG4iLCBkdF9yb290X3NpemVfY2VsbHMpOwotCi0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7Ci0JZHRfcm9vdF9hZGRyX2NlbGxzID0gKHByb3AgPT0gTlVMTCkgPyAyIDogKnByb3A7Ci0JREJHKCJkdF9yb290X2FkZHJfY2VsbHMgPSAleFxuIiwgZHRfcm9vdF9hZGRyX2NlbGxzKTsKLQkKLQkvKiBicmVhayBub3cgKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHU2NCBfX2luaXQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgY2VsbF90ICoqY2VsbHApCi17Ci0JY2VsbF90ICpwID0gKmNlbGxwOwotCi0JKmNlbGxwID0gcCArIHM7Ci0JcmV0dXJuIG9mX3JlYWRfbnVtYmVyKHAsIHMpOwogfQogCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCkBAIC04OTMsMjIgKzQwOCwyMiBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fZHJjb25mX21lbW9yeSh1bnNpZ25lZCBsb25nIG5vZGUpCiB7Ci0JY2VsbF90ICpkbSwgKmxzLCAqdXNtOworCV9fYmUzMiAqZG0sICpscywgKnVzbTsKIAl1bnNpZ25lZCBsb25nIGwsIG4sIGZsYWdzOwogCXU2NCBiYXNlLCBzaXplLCBsbWJfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgaXNfa2V4ZWNfa2R1bXAgPSAwLCBybmdzOwogCiAJbHMgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0sbG1iLXNpemUiLCAmbCk7Ci0JaWYgKGxzID09IE5VTEwgfHwgbCA8IGR0X3Jvb3Rfc2l6ZV9jZWxscyAqIHNpemVvZihjZWxsX3QpKQorCWlmIChscyA9PSBOVUxMIHx8IGwgPCBkdF9yb290X3NpemVfY2VsbHMgKiBzaXplb2YoX19iZTMyKSkKIAkJcmV0dXJuIDA7CiAJbG1iX3NpemUgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJmxzKTsKIAogCWRtID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLGR5bmFtaWMtbWVtb3J5IiwgJmwpOwotCWlmIChkbSA9PSBOVUxMIHx8IGwgPCBzaXplb2YoY2VsbF90KSkKKwlpZiAoZG0gPT0gTlVMTCB8fCBsIDwgc2l6ZW9mKF9fYmUzMikpCiAJCXJldHVybiAwOwogCiAJbiA9ICpkbSsrOwkvKiBudW1iZXIgb2YgZW50cmllcyAqLwotCWlmIChsIDwgKG4gKiAoZHRfcm9vdF9hZGRyX2NlbGxzICsgNCkgKyAxKSAqIHNpemVvZihjZWxsX3QpKQorCWlmIChsIDwgKG4gKiAoZHRfcm9vdF9hZGRyX2NlbGxzICsgNCkgKyAxKSAqIHNpemVvZihfX2JlMzIpKQogCQlyZXR1cm4gMDsKIAogCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBrZXhlYy9rZHVtcCBrZXJuZWwuICovCkBAIC05NjMsNjYgKzQ3OCw0OCBAQAogI2RlZmluZSBlYXJseV9pbml0X2R0X3NjYW5fZHJjb25mX21lbW9yeShub2RlKQkwCiAjZW5kaWYgLyogQ09ORklHX1BQQ19QU0VSSUVTICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnkodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCQkgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnlfcHBjKHVuc2lnbmVkIGxvbmcgbm9kZSwKKwkJCQkJCWNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCQkJaW50IGRlcHRoLCB2b2lkICpkYXRhKQogewotCWNoYXIgKnR5cGUgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJkZXZpY2VfdHlwZSIsIE5VTEwpOwotCWNlbGxfdCAqcmVnLCAqZW5kcDsKLQl1bnNpZ25lZCBsb25nIGw7Ci0KLQkvKiBMb29rIGZvciB0aGUgaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSBub2RlICovCiAJaWYgKGRlcHRoID09IDEgJiYKIAkgICAgc3RyY21wKHVuYW1lLCAiaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSIpID09IDApCiAJCXJldHVybiBlYXJseV9pbml0X2R0X3NjYW5fZHJjb25mX21lbW9yeShub2RlKTsKLQotCS8qIFdlIGFyZSBzY2FubmluZyAibWVtb3J5IiBub2RlcyBvbmx5ICovCi0JaWYgKHR5cGUgPT0gTlVMTCkgewotCQkvKgotCQkgKiBUaGUgbG9uZ3RyYWlsIGRvZXNuJ3QgaGF2ZSBhIGRldmljZV90eXBlIG9uIHRoZQotCQkgKiAvbWVtb3J5IG5vZGUsIHNvIGxvb2sgZm9yIHRoZSBub2RlIGNhbGxlZCAvbWVtb3J5QDAuCi0JCSAqLwotCQlpZiAoZGVwdGggIT0gMSB8fCBzdHJjbXAodW5hbWUsICJtZW1vcnlAMCIpICE9IDApCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlLCAibWVtb3J5IikgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlyZWcgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx1c2FibGUtbWVtb3J5IiwgJmwpOwotCWlmIChyZWcgPT0gTlVMTCkKLQkJcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgJmwpOwotCWlmIChyZWcgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQllbmRwID0gcmVnICsgKGwgLyBzaXplb2YoY2VsbF90KSk7Ci0KLQlEQkcoIm1lbW9yeSBzY2FuIG5vZGUgJXMsIHJlZyBzaXplICVsZCwgZGF0YTogJXggJXggJXggJXgsXG4iLAotCSAgICB1bmFtZSwgbCwgcmVnWzBdLCByZWdbMV0sIHJlZ1syXSwgcmVnWzNdKTsKLQotCXdoaWxlICgoZW5kcCAtIHJlZykgPj0gKGR0X3Jvb3RfYWRkcl9jZWxscyArIGR0X3Jvb3Rfc2l6ZV9jZWxscykpIHsKLQkJdTY0IGJhc2UsIHNpemU7Ci0KLQkJYmFzZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9hZGRyX2NlbGxzLCAmcmVnKTsKLQkJc2l6ZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9zaXplX2NlbGxzLCAmcmVnKTsKLQotCQlpZiAoc2l6ZSA9PSAwKQotCQkJY29udGludWU7Ci0JCURCRygiIC0gJWxseCAsICAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJhc2UsCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNpemUpOwotI2lmZGVmIENPTkZJR19QUEM2NAotCQlpZiAoaW9tbXVfaXNfb2ZmKSB7Ci0JCQlpZiAoYmFzZSA+PSAweDgwMDAwMDAwdWwpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoKGJhc2UgKyBzaXplKSA+IDB4ODAwMDAwMDB1bCkKLQkJCQlzaXplID0gMHg4MDAwMDAwMHVsIC0gYmFzZTsKLQkJfQotI2VuZGlmCi0JCWxtYl9hZGQoYmFzZSwgc2l6ZSk7Ci0KLQkJbWVtc3RhcnRfYWRkciA9IG1pbigodTY0KW1lbXN0YXJ0X2FkZHIsIGJhc2UpOwotCX0KLQotCXJldHVybiAwOworCQorCXJldHVybiBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KG5vZGUsIHVuYW1lLCBkZXB0aCwgZGF0YSk7CiB9CiAKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfYWRkX21lbW9yeV9hcmNoKHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkKKwlpZiAoaW9tbXVfaXNfb2ZmKSB7CisJCWlmIChiYXNlID49IDB4ODAwMDAwMDB1bCkKKwkJCXJldHVybjsKKwkJaWYgKChiYXNlICsgc2l6ZSkgPiAweDgwMDAwMDAwdWwpCisJCQlzaXplID0gMHg4MDAwMDAwMHVsIC0gYmFzZTsKKwl9CisjZW5kaWYKKworCWxtYl9hZGQoYmFzZSwgc2l6ZSk7CisKKwltZW1zdGFydF9hZGRyID0gbWluKCh1NjQpbWVtc3RhcnRfYWRkciwgYmFzZSk7Cit9CisKK3U2NCBfX2luaXQgZWFybHlfaW5pdF9kdF9hbGxvY19tZW1vcnlfYXJjaCh1NjQgc2l6ZSwgdTY0IGFsaWduKQoreworCXJldHVybiBsbWJfYWxsb2Moc2l6ZSwgYWxpZ24pOworfQorCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X3NldHVwX2luaXRyZF9hcmNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCXVuc2lnbmVkIGxvbmcgZW5kKQoreworCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnQpOworCWluaXRyZF9lbmQgPSAodW5zaWduZWQgbG9uZylfX3ZhKGVuZCk7CisJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfcmVzZXJ2ZV9tZW0odm9pZCkKIHsKIAl1NjQgYmFzZSwgc2l6ZTsKQEAgLTExODYsNyArNjgzLDcgQEAKIAkvKiBTY2FuIG1lbW9yeSBub2RlcyBhbmQgcmVidWlsZCBMTUJzICovCiAJbG1iX2luaXQoKTsKIAlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QsIE5VTEwpOwotCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5LCBOVUxMKTsKKwlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeV9wcGMsIE5VTEwpOwogCiAJLyogU2F2ZSBjb21tYW5kIGxpbmUgZm9yIC9wcm9jL2NtZGxpbmUgYW5kIHRoZW4gcGFyc2UgcGFyYW1ldGVycyAqLwogCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIGNtZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CkBAIC0xMjM0LDI1ICs3MzEsNiBAQAogCURCRygiIDwtIGVhcmx5X2luaXRfZGV2dHJlZSgpXG4iKTsKIH0KIAotCi0vKioKLSAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSByb290IG5vZGUgaGFzIGEgZ2l2ZW4gdmFsdWUgaW4gaXRzCi0gKiBjb21wYXRpYmxlIHByb3BlcnR5LgotICovCi1pbnQgbWFjaGluZV9pc19jb21wYXRpYmxlKGNvbnN0IGNoYXIgKmNvbXBhdCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7Ci0JaW50IHJjID0gMDsKLQotCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwotCWlmIChyb290KSB7Ci0JCXJjID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocm9vdCwgY29tcGF0KTsKLQkJb2Zfbm9kZV9wdXQocm9vdCk7Ci0JfQotCXJldHVybiByYzsKLX0KLUVYUE9SVF9TWU1CT0wobWFjaGluZV9pc19jb21wYXRpYmxlKTsKLQogLyoqKioqKioKICAqCiAgKiBOZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIE9GICJmaW5kIiBBUElzLCByZXR1cm4gYSByZWZjb3VudGVkCkBAIC0xMjY1LDI3ICs3NDMsNiBAQAogICoqKioqKiovCiAKIC8qKgotICoJb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUgLSBGaW5kIGEgbm9kZSBnaXZlbiBhIHBoYW5kbGUKLSAqCUBoYW5kbGU6CXBoYW5kbGUgb2YgdGhlIG5vZGUgdG8gZmluZAotICoKLSAqCVJldHVybnMgYSBub2RlIHBvaW50ZXIgd2l0aCByZWZjb3VudCBpbmNyZW1lbnRlZCwgdXNlCi0gKglvZl9ub2RlX3B1dCgpIG9uIGl0IHdoZW4gZG9uZS4KLSAqLwotc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfcGhhbmRsZShwaGFuZGxlIGhhbmRsZSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JcmVhZF9sb2NrKCZkZXZ0cmVlX2xvY2spOwotCWZvciAobnAgPSBhbGxub2RlczsgbnAgIT0gMDsgbnAgPSBucC0+YWxsbmV4dCkKLQkJaWYgKG5wLT5saW51eF9waGFuZGxlID09IGhhbmRsZSkKLQkJCWJyZWFrOwotCW9mX25vZGVfZ2V0KG5wKTsKLQlyZWFkX3VubG9jaygmZGV2dHJlZV9sb2NrKTsKLQlyZXR1cm4gbnA7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKTsKLQotLyoqCiAgKglvZl9maW5kX25leHRfY2FjaGVfbm9kZSAtIEZpbmQgYSBub2RlJ3Mgc3Vic2lkaWFyeSBjYWNoZQogICoJQG5wOglub2RlIG9mIHR5cGUgImNwdSIgb3IgImNhY2hlIgogICoKQEAgLTEzMTYsMTM4ICs3NzMsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKioKLSAqCW9mX25vZGVfZ2V0IC0gSW5jcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQotICoJQG5vZGU6CU5vZGUgdG8gaW5jIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bwotICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycwotICoKLSAqCVJldHVybnMgbm9kZS4KLSAqLwotc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCi17Ci0JaWYgKG5vZGUpCi0JCWtyZWZfZ2V0KCZub2RlLT5rcmVmKTsKLQlyZXR1cm4gbm9kZTsKLX0KLUVYUE9SVF9TWU1CT0wob2Zfbm9kZV9nZXQpOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIGtyZWZfdG9fZGV2aWNlX25vZGUoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZGV2aWNlX25vZGUsIGtyZWYpOwotfQotCi0vKioKLSAqCW9mX25vZGVfcmVsZWFzZSAtIHJlbGVhc2UgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbm9kZQotICoJQGtyZWY6ICBrcmVmIGVsZW1lbnQgb2YgdGhlIG5vZGUgdG8gYmUgcmVsZWFzZWQKLSAqCi0gKglJbiBvZl9ub2RlX3B1dCgpIHRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIGtyZWZfcHV0KCkKLSAqCWFzIHRoZSBkZXN0cnVjdG9yLgotICovCi1zdGF0aWMgdm9pZCBvZl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlID0ga3JlZl90b19kZXZpY2Vfbm9kZShrcmVmKTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBub2RlLT5wcm9wZXJ0aWVzOwotCi0JLyogV2Ugc2hvdWxkIG5ldmVyIGJlIHJlbGVhc2luZyBub2RlcyB0aGF0IGhhdmVuJ3QgYmVlbiBkZXRhY2hlZC4gKi8KLQlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9ERVRBQ0hFRCkpIHsKLQkJcHJpbnRrKCJXQVJOSU5HOiBCYWQgb2Zfbm9kZV9wdXQoKSBvbiAlc1xuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKLQkJZHVtcF9zdGFjaygpOwotCQlrcmVmX2luaXQoJm5vZGUtPmtyZWYpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfRFlOQU1JQykpCi0JCXJldHVybjsKLQotCXdoaWxlIChwcm9wKSB7Ci0JCXN0cnVjdCBwcm9wZXJ0eSAqbmV4dCA9IHByb3AtPm5leHQ7Ci0JCWtmcmVlKHByb3AtPm5hbWUpOwotCQlrZnJlZShwcm9wLT52YWx1ZSk7Ci0JCWtmcmVlKHByb3ApOwotCQlwcm9wID0gbmV4dDsKLQotCQlpZiAoIXByb3ApIHsKLQkJCXByb3AgPSBub2RlLT5kZWFkcHJvcHM7Ci0JCQlub2RlLT5kZWFkcHJvcHMgPSBOVUxMOwotCQl9Ci0JfQotCWtmcmVlKG5vZGUtPmZ1bGxfbmFtZSk7Ci0Ja2ZyZWUobm9kZS0+ZGF0YSk7Ci0Ja2ZyZWUobm9kZSk7Ci19Ci0KLS8qKgotICoJb2Zfbm9kZV9wdXQgLSBEZWNyZW1lbnQgcmVmY291bnQgb2YgYSBub2RlCi0gKglAbm9kZToJTm9kZSB0byBkZWMgcmVmY291bnQsIE5VTEwgaXMgc3VwcG9ydGVkIHRvCi0gKgkJc2ltcGxpZnkgd3JpdGluZyBvZiBjYWxsZXJzCi0gKgotICovCi12b2lkIG9mX25vZGVfcHV0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKLXsKLQlpZiAobm9kZSkKLQkJa3JlZl9wdXQoJm5vZGUtPmtyZWYsIG9mX25vZGVfcmVsZWFzZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX25vZGVfcHV0KTsKLQotLyoKLSAqIFBsdWcgYSBkZXZpY2Ugbm9kZSBpbnRvIHRoZSB0cmVlIGFuZCBnbG9iYWwgbGlzdC4KLSAqLwotdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5wLT5zaWJsaW5nID0gbnAtPnBhcmVudC0+Y2hpbGQ7Ci0JbnAtPmFsbG5leHQgPSBhbGxub2RlczsKLQlucC0+cGFyZW50LT5jaGlsZCA9IG5wOwotCWFsbG5vZGVzID0gbnA7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogIlVucGx1ZyIgYSBub2RlIGZyb20gdGhlIGRldmljZSB0cmVlLiAgVGhlIGNhbGxlciBtdXN0IGhvbGQKLSAqIGEgcmVmZXJlbmNlIHRvIHRoZSBub2RlLiAgVGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKLSAqIGlzIG5vdCBmcmVlZCB1bnRpbCBpdHMgcmVmY291bnQgZ29lcyB0byB6ZXJvLgotICovCi12b2lkIG9mX2RldGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLQlwYXJlbnQgPSBucC0+cGFyZW50OwotCWlmICghcGFyZW50KQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlpZiAoYWxsbm9kZXMgPT0gbnApCi0JCWFsbG5vZGVzID0gbnAtPmFsbG5leHQ7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcHJldjsKLQkJZm9yIChwcmV2ID0gYWxsbm9kZXM7Ci0JCSAgICAgcHJldi0+YWxsbmV4dCAhPSBucDsKLQkJICAgICBwcmV2ID0gcHJldi0+YWxsbmV4dCkKLQkJCTsKLQkJcHJldi0+YWxsbmV4dCA9IG5wLT5hbGxuZXh0OwotCX0KLQotCWlmIChwYXJlbnQtPmNoaWxkID09IG5wKQotCQlwYXJlbnQtPmNoaWxkID0gbnAtPnNpYmxpbmc7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcHJldnNpYjsKLQkJZm9yIChwcmV2c2liID0gbnAtPnBhcmVudC0+Y2hpbGQ7Ci0JCSAgICAgcHJldnNpYi0+c2libGluZyAhPSBucDsKLQkJICAgICBwcmV2c2liID0gcHJldnNpYi0+c2libGluZykKLQkJCTsKLQkJcHJldnNpYi0+c2libGluZyA9IG5wLT5zaWJsaW5nOwotCX0KLQotCW9mX25vZGVfc2V0X2ZsYWcobnAsIE9GX0RFVEFDSEVEKTsKLQotb3V0X3VubG9jazoKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci19Ci0KICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKIC8qCiAgKiBGaXggdXAgdGhlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGEgbmV3IGRldmljZSBub2RlOgpAQCAtMTQ3OSw5ICs4MDQsOSBAQAogCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBmaXggdXAgbmV3IG5vZGUncyBsaW51eF9waGFuZGxlIGZpZWxkICovCisJLyogZml4IHVwIG5ldyBub2RlJ3MgcGhhbmRsZSBmaWVsZCAqLwogCWlmICgoaWJtX3BoYW5kbGUgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgImlibSxwaGFuZGxlIiwgTlVMTCkpKQotCQlub2RlLT5saW51eF9waGFuZGxlID0gKmlibV9waGFuZGxlOworCQlub2RlLT5waGFuZGxlID0gKmlibV9waGFuZGxlOwogCiBvdXQ6CiAJb2Zfbm9kZV9wdXQocGFyZW50KTsKQEAgLTE1MjAsMTIwICs4NDUsNiBAQAogX19pbml0Y2FsbChwcm9tX3JlY29uZmlnX3NldHVwKTsKICNlbmRpZgogCi0vKgotICogQWRkIGEgcHJvcGVydHkgdG8gYSBub2RlCi0gKi8KLWludCBwcm9tX2FkZF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wLCBzdHJ1Y3QgcHJvcGVydHkqIHByb3ApCi17Ci0Jc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcHJvcC0+bmV4dCA9IE5VTEw7CQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbmV4dCA9ICZucC0+cHJvcGVydGllczsKLQl3aGlsZSAoKm5leHQpIHsKLQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAoKm5leHQpLT5uYW1lKSA9PSAwKSB7Ci0JCQkvKiBkdXBsaWNhdGUgISBkb24ndCBpbnNlcnQgaXQgKi8KLQkJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQluZXh0ID0gJigqbmV4dCktPm5leHQ7Ci0JfQotCSpuZXh0ID0gcHJvcDsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCi0JLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfYWRkX3Byb3AobnAtPnBkZSwgcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZW1vdmUgYSBwcm9wZXJ0eSBmcm9tIGEgbm9kZS4gIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseQotICogcmVtb3ZlIGl0LCBzaW5jZSB3ZSBoYXZlIGdpdmVuIG91dCB3aG8ta25vd3MtaG93LW1hbnkgcG9pbnRlcnMKLSAqIHRvIHRoZSBkYXRhIHVzaW5nIGdldC1wcm9wZXJ0eS4gIEluc3RlYWQgd2UganVzdCBtb3ZlIHRoZSBwcm9wZXJ0eQotICogdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiIGxpc3QsIHNvIGl0IHdvbid0IGJlIGZvdW5kIGFueSBtb3JlLgotICovCi1pbnQgcHJvbV9yZW1vdmVfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZm91bmQgPSAwOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwotCXdoaWxlICgqbmV4dCkgewotCQlpZiAoKm5leHQgPT0gcHJvcCkgewotCQkJLyogZm91bmQgdGhlIG5vZGUgKi8KLQkJCSpuZXh0ID0gcHJvcC0+bmV4dDsKLQkJCXByb3AtPm5leHQgPSBucC0+ZGVhZHByb3BzOwotCQkJbnAtPmRlYWRwcm9wcyA9IHByb3A7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQluZXh0ID0gJigqbmV4dCktPm5leHQ7Ci0JfQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotCWlmICghZm91bmQpCi0JCXJldHVybiAtRU5PREVWOwotCi0jaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQotCS8qIHRyeSB0byByZW1vdmUgdGhlIHByb2Mgbm9kZSBhcyB3ZWxsICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfcmVtb3ZlX3Byb3AobnAtPnBkZSwgcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhIG5vZGUuICBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkKLSAqIHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQgd2hvLWtub3dzLWhvdy1tYW55IHBvaW50ZXJzCi0gKiB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuICBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkKLSAqIHRvIHRoZSAiZGVhZCBwcm9wZXJ0aWVzIiBsaXN0LCBhbmQgYWRkIHRoZSBuZXcgcHJvcGVydHkgdG8gdGhlCi0gKiBwcm9wZXJ0eSBsaXN0Ci0gKi8KLWludCBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJIHN0cnVjdCBwcm9wZXJ0eSAqbmV3cHJvcCwKLQkJCSBzdHJ1Y3QgcHJvcGVydHkgKm9sZHByb3ApCi17Ci0Jc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBmb3VuZCA9IDA7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpuZXh0KSB7Ci0JCWlmICgqbmV4dCA9PSBvbGRwcm9wKSB7Ci0JCQkvKiBmb3VuZCB0aGUgbm9kZSAqLwotCQkJbmV3cHJvcC0+bmV4dCA9IG9sZHByb3AtPm5leHQ7Ci0JCQkqbmV4dCA9IG5ld3Byb3A7Ci0JCQlvbGRwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKLQkJCW5wLT5kZWFkcHJvcHMgPSBvbGRwcm9wOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWZvdW5kKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKLQkvKiB0cnkgdG8gYWRkIHRvIHByb2MgYXMgd2VsbCBpZiBpdCB3YXMgaW5pdGlhbGl6ZWQgKi8KLQlpZiAobnAtPnBkZSkKLQkJcHJvY19kZXZpY2VfdHJlZV91cGRhdGVfcHJvcChucC0+cGRlLCBuZXdwcm9wLCBvbGRwcm9wKTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFICovCi0KLQlyZXR1cm4gMDsKLX0KLQotCiAvKiBGaW5kIHRoZSBkZXZpY2Ugbm9kZSBmb3IgYSBnaXZlbiBsb2dpY2FsIGNwdSBudW1iZXIsIGFsc28gcmV0dXJucyB0aGUgY3B1CiAgKiBsb2NhbCB0aHJlYWQgbnVtYmVyIChpbmRleCBpbiBpYm0saW50ZXJydXB0LXNlcnZlciNzKSBpZiByZWxldmFudCBhbmQKICAqIGFza2VkIGZvciAobm9uIE5VTEwpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCBiYWZhYzJlLi41ZjMwNmM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTY1NCw2ICs2NTQsOSBAQAogI2RlZmluZSBPVjVfQ01PCQkJMHgwMAogI2VuZGlmCiAKKy8qIE9wdGlvbiBWZWN0b3IgNjogSUJNIFBBUFIgaGludHMgKi8KKyNkZWZpbmUgT1Y2X0xJTlVYCQkweDAyCS8qIExpbnV4IGlzIG91ciBPUyAqLworCiAvKgogICogVGhlIGFyY2hpdGVjdHVyZSB2ZWN0b3IgaGFzIGFuIGFycmF5IG9mIFBWUiBtYXNrL3ZhbHVlIHBhaXJzLAogICogZm9sbG93ZWQgYnkgIyBvcHRpb24gdmVjdG9ycyAtIDEsIGZvbGxvd2VkIGJ5IHRoZSBvcHRpb24gdmVjdG9ycy4KQEAgLTY2NSw3ICs2NjgsNyBAQAogCVcoMHhmZmZmZmZmZiksIFcoMHgwZjAwMDAwMyksCS8qIGFsbCAyLjA2LWNvbXBsaWFudCAqLwogCVcoMHhmZmZmZmZmZiksIFcoMHgwZjAwMDAwMiksCS8qIGFsbCAyLjA1LWNvbXBsaWFudCAqLwogCVcoMHhmZmZmZmZmZSksIFcoMHgwZjAwMDAwMSksCS8qIGFsbCAyLjA0LWNvbXBsaWFudCBhbmQgZWFybGllciAqLwotCTUgLSAxLAkJCQkvKiA1IG9wdGlvbiB2ZWN0b3JzICovCisJNiAtIDEsCQkJCS8qIDYgb3B0aW9uIHZlY3RvcnMgKi8KIAogCS8qIG9wdGlvbiB2ZWN0b3IgMTogcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMgc3VwcG9ydGVkICovCiAJMyAtIDIsCQkJCS8qIGxlbmd0aCAqLwpAQCAtNjk3LDEyICs3MDAsMjkgQEAKIAkwLAkJCQkvKiBkb24ndCBoYWx0ICovCiAKIAkvKiBvcHRpb24gdmVjdG9yIDU6IFBBUFIvT0Ygb3B0aW9ucyAqLwotCTUgLSAyLAkJCQkvKiBsZW5ndGggKi8KKwkxMyAtIDIsCQkJCS8qIGxlbmd0aCAqLwogCTAsCQkJCS8qIGRvbid0IGlnbm9yZSwgZG9uJ3QgaGFsdCAqLwogCU9WNV9MUEFSIHwgT1Y1X1NQTFBBUiB8IE9WNV9MQVJHRV9QQUdFUyB8IE9WNV9EUkNPTkZfTUVNT1JZIHwKIAlPVjVfRE9OQVRFX0RFRElDQVRFX0NQVSB8IE9WNV9NU0ksCiAJMCwKIAlPVjVfQ01PLAorCTAsCisJMCwKKwkwLAorCTAsCisJLyogV0FSTklORzogVGhlIG9mZnNldCBvZiB0aGUgIm51bWJlciBvZiBjb3JlcyIgZmllbGQgYmVsb3cKKwkgKiBtdXN0IG1hdGNoIGJ5IHRoZSBtYWNybyBiZWxvdy4gVXBkYXRlIHRoZSBkZWZpbml0aW9uIGlmCisJICogdGhlIHN0cnVjdHVyZSBsYXlvdXQgY2hhbmdlcy4KKwkgKi8KKyNkZWZpbmUgSUJNX0FSQ0hfVkVDX05SQ09SRVNfT0ZGU0VUCTEwMAorCVcoTlJfQ1BVUyksCQkJLyogbnVtYmVyIG9mIGNvcmVzIHN1cHBvcnRlZCAqLworCisJLyogb3B0aW9uIHZlY3RvciA2OiBJQk0gUEFQUiBoaW50cyAqLworCTQgLSAyLAkJCQkvKiBsZW5ndGggKi8KKwkwLAorCTAsCisJT1Y2X0xJTlVYLAorCiB9OwogCiAvKiBPbGQgbWV0aG9kIC0gRUxGIGhlYWRlciB3aXRoIFBUX05PVEUgc2VjdGlvbnMgKi8KQEAgLTc5MiwxMyArODEyLDcwIEBACiAJfQogfTsKIAorc3RhdGljIGludCBfX2luaXQgcHJvbV9jb3VudF9zbXRfdGhyZWFkcyh2b2lkKQoreworCXBoYW5kbGUgbm9kZTsKKwljaGFyIHR5cGVbNjRdOworCXVuc2lnbmVkIGludCBwbGVuOworCisJLyogUGljayB1cCB0aCBmaXJzdCBDUFUgbm9kZSB3ZSBjYW4gZmluZCAqLworCWZvciAobm9kZSA9IDA7IHByb21fbmV4dF9ub2RlKCZub2RlKTsgKSB7CisJCXR5cGVbMF0gPSAwOworCQlwcm9tX2dldHByb3Aobm9kZSwgImRldmljZV90eXBlIiwgdHlwZSwgc2l6ZW9mKHR5cGUpKTsKKworCQlpZiAoc3RyY21wKHR5cGUsIFJFTE9DKCJjcHUiKSkpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogVGhlcmUgaXMgYW4gZW50cnkgZm9yIGVhY2ggc210IHRocmVhZCwgZWFjaCBlbnRyeSBiZWluZworCQkgKiA0IGJ5dGVzIGxvbmcuICBBbGwgY3B1cyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YKKwkJICogc210IHRocmVhZHMsIHNvIHJldHVybiBhZnRlciBmaW5kaW5nIHRoZSBmaXJzdC4KKwkJICovCisJCXBsZW4gPSBwcm9tX2dldHByb3BsZW4obm9kZSwgImlibSxwcGMtaW50ZXJydXB0LXNlcnZlciNzIik7CisJCWlmIChwbGVuID09IFBST01fRVJST1IpCisJCQlicmVhazsKKwkJcGxlbiA+Pj0gMjsKKwkJcHJvbV9kZWJ1ZygiRm91bmQgMHgleCBzbXQgdGhyZWFkcyBwZXIgY29yZVxuIiwgKHVuc2lnbmVkIGxvbmcpcGxlbik7CisKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmIChwbGVuIDwgMSB8fCBwbGVuID4gNjQpIHsKKwkJCXByb21fcHJpbnRmKCJUaHJlYWRzIHBlciBjb3JlIDB4JXggb3V0IG9mIGJvdW5kcywgYXNzdW1pbmcgMVxuIiwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpcGxlbik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gcGxlbjsKKwl9CisJcHJvbV9kZWJ1ZygiTm8gdGhyZWFkcyBmb3VuZCwgYXNzdW1pbmcgMSBwZXIgY29yZVxuIik7CisKKwlyZXR1cm4gMTsKKworfQorCisKIHN0YXRpYyB2b2lkIF9faW5pdCBwcm9tX3NlbmRfY2FwYWJpbGl0aWVzKHZvaWQpCiB7CiAJaWhhbmRsZSBlbGZsb2FkZXIsIHJvb3Q7CiAJcHJvbV9hcmdfdCByZXQ7CisJdTMyICpjb3JlczsKIAogCXJvb3QgPSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCBBRERSKCIvIikpOwogCWlmIChyb290ICE9IDApIHsKKwkJLyogV2UgbmVlZCB0byB0ZWxsIHRoZSBGVyBhYm91dCB0aGUgbnVtYmVyIG9mIGNvcmVzIHdlIHN1cHBvcnQuCisJCSAqCisJCSAqIFRvIGRvIHRoYXQsIHdlIGNvdW50IHRoZSBudW1iZXIgb2YgdGhyZWFkcyBvbiB0aGUgZmlyc3QgY29yZQorCQkgKiAod2UgYXNzdW1lIHRoaXMgaXMgdGhlIHNhbWUgZm9yIGFsbCBjb3JlcykgYW5kIHVzZSBpdCB0bworCQkgKiBkaXZpZGUgTlJfQ1BVUy4KKwkJICovCisJCWNvcmVzID0gKHUzMiAqKVBUUlJFTE9DKCZpYm1fYXJjaGl0ZWN0dXJlX3ZlY1tJQk1fQVJDSF9WRUNfTlJDT1JFU19PRkZTRVRdKTsKKwkJaWYgKCpjb3JlcyAhPSBOUl9DUFVTKSB7CisJCQlwcm9tX3ByaW50ZigiV0FSTklORyAhICIKKwkJCQkgICAgImlibV9hcmNoaXRlY3R1cmVfdmVjIHN0cnVjdHVyZSBpbmNvbnNpc3RlbnQ6IDB4JXggIVxuIiwKKwkJCQkgICAgKmNvcmVzKTsKKwkJfSBlbHNlIHsKKwkJCSpjb3JlcyA9IE5SX0NQVVMgLyBwcm9tX2NvdW50X3NtdF90aHJlYWRzKCk7CisJCQlwcm9tX3ByaW50ZigiTWF4IG51bWJlciBvZiBjb3JlcyBwYXNzZWQgdG8gZmlybXdhcmU6IDB4JXhcbiIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKSpjb3Jlcyk7CisJCX0KKwogCQkvKiB0cnkgY2FsbGluZyB0aGUgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCBtZXRob2QgKi8KIAkJcHJvbV9wcmludGYoIkNhbGxpbmcgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydC4uLiIpOwogCQlpZiAoY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCAzLCAyLCAmcmV0LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZWYxNDk4OC4uZDliMDU4NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCkBAIC00Niw3ICs0Niw3IEBACiAvKgogICogU2V0IG9mIG1zciBiaXRzIHRoYXQgZ2RiIGNhbiBjaGFuZ2Ugb24gYmVoYWxmIG9mIGEgcHJvY2Vzcy4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHXzQweCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogI2RlZmluZSBNU1JfREVCVUdDSEFOR0UJMAogI2Vsc2UKICNkZWZpbmUgTVNSX0RFQlVHQ0hBTkdFCShNU1JfU0UgfCBNU1JfQkUpCkBAIC03MDMsNyArNzAzLDcgQEAKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2stPnRocmVhZC5yZWdzOwogCiAJaWYgKHJlZ3MgIT0gTlVMTCkgewotI2lmIGRlZmluZWQoQ09ORklHXzQweCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0JUOwogCQl0YXNrLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSURNIHwgREJDUjBfSUM7CiAJCXJlZ3MtPm1zciB8PSBNU1JfREU7CkBAIC03MjAsNyArNzIwLDcgQEAKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2stPnRocmVhZC5yZWdzOwogCiAJaWYgKHJlZ3MgIT0gTlVMTCkgewotI2lmIGRlZmluZWQoQ09ORklHXzQweCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lDOwogCQl0YXNrLT50aHJlYWQuZGJjcjAgPSBEQkNSMF9JRE0gfCBEQkNSMF9CVDsKIAkJcmVncy0+bXNyIHw9IE1TUl9ERTsKQEAgLTczNywxNyArNzM3LDI1IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrLT50aHJlYWQucmVnczsKIAogCWlmIChyZWdzICE9IE5VTEwpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKLQkJLyogSWYgREFDIGRvbid0IGNsZWFyIERCQ1JPX0lETSBvciBNU1JfREUgKi8KLQkJaWYgKHRhc2stPnRocmVhZC5kYWJyKQotCQkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH4oREJDUjBfSUMgfCBEQkNSMF9CVCk7Ci0JCWVsc2UgewotCQkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH4oREJDUjBfSUMgfCBEQkNSMF9CVCB8IERCQ1IwX0lETSk7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworCQkvKgorCQkgKiBUaGUgbG9naWMgdG8gZGlzYWJsZSBzaW5nbGUgc3RlcHBpbmcgc2hvdWxkIGJlIGFzCisJCSAqIHNpbXBsZSBhcyB0dXJuaW5nIG9mZiB0aGUgSW5zdHJ1Y3Rpb24gQ29tcGxldGUgZmxhZy4KKwkJICogQW5kLCBhZnRlciBkb2luZyBzbywgaWYgYWxsIGRlYnVnIGZsYWdzIGFyZSBvZmYsIHR1cm4KKwkJICogb2ZmIERCQ1IwKElETSkgYW5kIE1TUihERSkgLi4uLiBUb3JlegorCQkgKi8KKwkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQzsKKwkJLyoKKwkJICogVGVzdCB0byBzZWUgaWYgYW55IG9mIHRoZSBEQkNSX0FDVElWRV9FVkVOVFMgYml0cyBhcmUgc2V0LgorCQkgKi8KKwkJaWYgKCFEQkNSX0FDVElWRV9FVkVOVFModGFzay0+dGhyZWFkLmRiY3IwLAorCQkJCQl0YXNrLT50aHJlYWQuZGJjcjEpKSB7CisJCQkvKgorCQkJICogQWxsIGRlYnVnIGV2ZW50cyB3ZXJlIG9mZi4uLi4uCisJCQkgKi8KKwkJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSURNOwogCQkJcmVncy0+bXNyICY9IH5NU1JfREU7CiAJCX0KLSNlbGlmIGRlZmluZWQoQ09ORklHXzQweCkKLQkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH4oREJDUjBfSUMgfCBEQkNSMF9CVCB8IERCQ1IwX0lETSk7Ci0JCXJlZ3MtPm1zciAmPSB+TVNSX0RFOwogI2Vsc2UKIAkJcmVncy0+bXNyICY9IH4oTVNSX1NFIHwgTVNSX0JFKTsKICNlbmRpZgpAQCAtNzY5LDggKzc3Nyw3IEBACiAJaWYgKChkYXRhICYgfjB4N1VMKSA+PSBUQVNLX1NJWkUpCiAJCXJldHVybiAtRUlPOwogCi0jaWZuZGVmIENPTkZJR19CT09LRQotCisjaWZuZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkvKiBGb3IgcHJvY2Vzc29ycyB1c2luZyBEQUJSIChpLmUuIDk3MCksIHRoZSBib3R0b20gMyBiaXRzIGFyZSBmbGFncy4KIAkgKiAgSXQgd2FzIGFzc3VtZWQsIG9uIHByZXZpb3VzIGltcGxlbWVudGF0aW9ucywgdGhhdCAzIGJpdHMgd2VyZQogCSAqICBwYXNzZWQgdG9nZXRoZXIgd2l0aCB0aGUgZGF0YSBhZGRyZXNzLCBmaXR0aW5nIHRoZSBkZXNpZ24gb2YgdGhlCkBAIC03ODksMjEgKzc5NiwyMiBAQAogCiAJLyogTW92ZSBjb250ZW50cyB0byB0aGUgREFCUiByZWdpc3RlciAqLwogCXRhc2stPnRocmVhZC5kYWJyID0gZGF0YTsKLQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0KKyNlbHNlIC8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAkvKiBBcyBkZXNjcmliZWQgYWJvdmUsIGl0IHdhcyBhc3N1bWVkIDMgYml0cyB3ZXJlIHBhc3NlZCB3aXRoIHRoZSBkYXRhCiAJICogIGFkZHJlc3MsIGJ1dCB3ZSB3aWxsIGFzc3VtZSBvbmx5IHRoZSBtb2RlIGJpdHMgd2lsbCBiZSBwYXNzZWQKIAkgKiAgYXMgdG8gbm90IGNhdXNlIGFsaWdubWVudCByZXN0cmljdGlvbnMgZm9yIERBQy1iYXNlZCBwcm9jZXNzb3JzLgogCSAqLwogCiAJLyogREFDJ3MgaG9sZCB0aGUgd2hvbGUgYWRkcmVzcyB3aXRob3V0IGFueSBtb2RlIGZsYWdzICovCi0JdGFzay0+dGhyZWFkLmRhYnIgPSBkYXRhICYgfjB4M1VMOworCXRhc2stPnRocmVhZC5kYWMxID0gZGF0YSAmIH4weDNVTDsKIAotCWlmICh0YXNrLT50aHJlYWQuZGFiciA9PSAwKSB7Ci0JCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+KERCU1JfREFDMVIgfCBEQlNSX0RBQzFXIHwgREJDUjBfSURNKTsKLQkJdGFzay0+dGhyZWFkLnJlZ3MtPm1zciAmPSB+TVNSX0RFOworCWlmICh0YXNrLT50aHJlYWQuZGFjMSA9PSAwKSB7CisJCWRiY3JfZGFjKHRhc2spICY9IH4oREJDUl9EQUMxUiB8IERCQ1JfREFDMVcpOworCQlpZiAoIURCQ1JfQUNUSVZFX0VWRU5UUyh0YXNrLT50aHJlYWQuZGJjcjAsCisJCQkJCXRhc2stPnRocmVhZC5kYmNyMSkpIHsKKwkJCXRhc2stPnRocmVhZC5yZWdzLT5tc3IgJj0gfk1TUl9ERTsKKwkJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSURNOworCQl9CiAJCXJldHVybiAwOwogCX0KIApAQCAtODE0LDE3ICs4MjIsMTcgQEAKIAogCS8qIFNldCB0aGUgSW50ZXJuYWwgRGVidWdnaW5nIGZsYWcgKElETSBiaXQgMSkgZm9yIHRoZSBEQkNSMAogCSAgIHJlZ2lzdGVyICovCi0JdGFzay0+dGhyZWFkLmRiY3IwID0gREJDUjBfSURNOworCXRhc2stPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JRE07CiAKIAkvKiBDaGVjayBmb3Igd3JpdGUgYW5kIHJlYWQgZmxhZ3MgYW5kIHNldCBEQkNSMAogCSAgIGFjY29yZGluZ2x5ICovCisJZGJjcl9kYWModGFzaykgJj0gfihEQkNSX0RBQzFSfERCQ1JfREFDMVcpOwogCWlmIChkYXRhICYgMHgxVUwpCi0JCXRhc2stPnRocmVhZC5kYmNyMCB8PSBEQlNSX0RBQzFSOworCQlkYmNyX2RhYyh0YXNrKSB8PSBEQkNSX0RBQzFSOwogCWlmIChkYXRhICYgMHgyVUwpCi0JCXRhc2stPnRocmVhZC5kYmNyMCB8PSBEQlNSX0RBQzFXOwotCisJCWRiY3JfZGFjKHRhc2spIHw9IERCQ1JfREFDMVc7CiAJdGFzay0+dGhyZWFkLnJlZ3MtPm1zciB8PSBNU1JfREU7Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgzOSw2ICs4NDcsMzk0IEBACiAJdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKGNoaWxkKTsKIH0KIAorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKK3N0YXRpYyBsb25nIHNldF9pbnRydWN0aW9uX2JwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCisJCQkgICAgICBzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgKmJwX2luZm8pCit7CisJaW50IHNsb3Q7CisJaW50IHNsb3QxX2luX3VzZSA9ICgoY2hpbGQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lBQzEpICE9IDApOworCWludCBzbG90Ml9pbl91c2UgPSAoKGNoaWxkLT50aHJlYWQuZGJjcjAgJiBEQkNSMF9JQUMyKSAhPSAwKTsKKwlpbnQgc2xvdDNfaW5fdXNlID0gKChjaGlsZC0+dGhyZWFkLmRiY3IwICYgREJDUjBfSUFDMykgIT0gMCk7CisJaW50IHNsb3Q0X2luX3VzZSA9ICgoY2hpbGQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lBQzQpICE9IDApOworCisJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMTJNT0RFKQorCQlzbG90Ml9pbl91c2UgPSAxOworCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzM0TU9ERSkKKwkJc2xvdDRfaW5fdXNlID0gMTsKKworCWlmIChicF9pbmZvLT5hZGRyID49IFRBU0tfU0laRSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoYnBfaW5mby0+YWRkcl9tb2RlICE9IFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1QpIHsKKworCQkvKiBNYWtlIHN1cmUgcmFuZ2UgaXMgdmFsaWQuICovCisJCWlmIChicF9pbmZvLT5hZGRyMiA+PSBUQVNLX1NJWkUpCisJCQlyZXR1cm4gLUVJTzsKKworCQkvKiBXZSBuZWVkIGEgcGFpciBvZiBJQUMgcmVnc2lzdGVycyAqLworCQlpZiAoKCFzbG90MV9pbl91c2UpICYmICghc2xvdDJfaW5fdXNlKSkgeworCQkJc2xvdCA9IDE7CisJCQljaGlsZC0+dGhyZWFkLmlhYzEgPSBicF9pbmZvLT5hZGRyOworCQkJY2hpbGQtPnRocmVhZC5pYWMyID0gYnBfaW5mby0+YWRkcjI7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzE7CisJCQlpZiAoYnBfaW5mby0+YWRkcl9tb2RlID09CisJCQkJCVBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFKQorCQkJCWRiY3JfaWFjX3JhbmdlKGNoaWxkKSB8PSBEQkNSX0lBQzEyWDsKKwkJCWVsc2UKKwkJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgfD0gREJDUl9JQUMxMkk7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwkJfSBlbHNlIGlmICgoIXNsb3QzX2luX3VzZSkgJiYgKCFzbG90NF9pbl91c2UpKSB7CisJCQlzbG90ID0gMzsKKwkJCWNoaWxkLT50aHJlYWQuaWFjMyA9IGJwX2luZm8tPmFkZHI7CisJCQljaGlsZC0+dGhyZWFkLmlhYzQgPSBicF9pbmZvLT5hZGRyMjsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSUFDMzsKKwkJCWlmIChicF9pbmZvLT5hZGRyX21vZGUgPT0KKwkJCQkJUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9FWENMVVNJVkUpCisJCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpIHw9IERCQ1JfSUFDMzRYOworCQkJZWxzZQorCQkJCWRiY3JfaWFjX3JhbmdlKGNoaWxkKSB8PSBEQkNSX0lBQzM0STsKKyNlbmRpZgorCQl9IGVsc2UKKwkJCXJldHVybiAtRU5PU1BDOworCX0gZWxzZSB7CisJCS8qIFdlIG9ubHkgbmVlZCBvbmUuICBJZiBwb3NzaWJsZSBsZWF2ZSBhIHBhaXIgZnJlZSBpbgorCQkgKiBjYXNlIGEgcmFuZ2UgaXMgbmVlZGVkIGxhdGVyCisJCSAqLworCQlpZiAoIXNsb3QxX2luX3VzZSkgeworCQkJLyoKKwkJCSAqIERvbid0IHVzZSBpYWMxIGlmIGlhYzEtaWFjMiBhcmUgZnJlZSBhbmQgZWl0aGVyCisJCQkgKiBpYWMzIG9yIGlhYzQgKGJ1dCBub3QgYm90aCkgYXJlIGZyZWUKKwkJCSAqLworCQkJaWYgKHNsb3QyX2luX3VzZSB8fCAoc2xvdDNfaW5fdXNlID09IHNsb3Q0X2luX3VzZSkpIHsKKwkJCQlzbG90ID0gMTsKKwkJCQljaGlsZC0+dGhyZWFkLmlhYzEgPSBicF9pbmZvLT5hZGRyOworCQkJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSUFDMTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQlpZiAoIXNsb3QyX2luX3VzZSkgeworCQkJc2xvdCA9IDI7CisJCQljaGlsZC0+dGhyZWFkLmlhYzIgPSBicF9pbmZvLT5hZGRyOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUMyOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJCX0gZWxzZSBpZiAoIXNsb3QzX2luX3VzZSkgeworCQkJc2xvdCA9IDM7CisJCQljaGlsZC0+dGhyZWFkLmlhYzMgPSBicF9pbmZvLT5hZGRyOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUMzOworCQl9IGVsc2UgaWYgKCFzbG90NF9pbl91c2UpIHsKKwkJCXNsb3QgPSA0OworCQkJY2hpbGQtPnRocmVhZC5pYWM0ID0gYnBfaW5mby0+YWRkcjsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSUFDNDsKKyNlbmRpZgorCQl9IGVsc2UKKwkJCXJldHVybiAtRU5PU1BDOworCX0KK291dDoKKwljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lETTsKKwljaGlsZC0+dGhyZWFkLnJlZ3MtPm1zciB8PSBNU1JfREU7CisKKwlyZXR1cm4gc2xvdDsKK30KKworc3RhdGljIGludCBkZWxfaW5zdHJ1Y3Rpb25fYnAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IHNsb3QpCit7CisJc3dpdGNoIChzbG90KSB7CisJY2FzZSAxOgorCQlpZiAoY2hpbGQtPnRocmVhZC5pYWMxID09IDApCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMxMk1PREUpIHsKKwkJCS8qIGFkZHJlc3MgcmFuZ2UgLSBjbGVhciBzbG90cyAxICYgMiAqLworCQkJY2hpbGQtPnRocmVhZC5pYWMyID0gMDsKKwkJCWRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmPSB+REJDUl9JQUMxMk1PREU7CisJCX0KKwkJY2hpbGQtPnRocmVhZC5pYWMxID0gMDsKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZiAoY2hpbGQtPnRocmVhZC5pYWMyID09IDApCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMxMk1PREUpCisJCQkvKiB1c2VkIGluIGEgcmFuZ2UgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQljaGlsZC0+dGhyZWFkLmlhYzIgPSAwOworCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMyOworCQlicmVhazsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTID4gMgorCWNhc2UgMzoKKwkJaWYgKGNoaWxkLT50aHJlYWQuaWFjMyA9PSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMzRNT0RFKSB7CisJCQkvKiBhZGRyZXNzIHJhbmdlIC0gY2xlYXIgc2xvdHMgMyAmIDQgKi8KKwkJCWNoaWxkLT50aHJlYWQuaWFjNCA9IDA7CisJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgJj0gfkRCQ1JfSUFDMzRNT0RFOworCQl9CisJCWNoaWxkLT50aHJlYWQuaWFjMyA9IDA7CisJCWNoaWxkLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzM7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKGNoaWxkLT50aHJlYWQuaWFjNCA9PSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMzRNT0RFKQorCQkJLyogVXNlZCBpbiBhIHJhbmdlICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2hpbGQtPnRocmVhZC5pYWM0ID0gMDsKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDNDsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2RhYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgKmJwX2luZm8pCit7CisJaW50IGJ5dGVfZW5hYmxlID0KKwkJKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlID4+IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRV9TSElGVCkKKwkJJiAweGY7CisJaW50IGNvbmRpdGlvbl9tb2RlID0KKwkJYnBfaW5mby0+Y29uZGl0aW9uX21vZGUgJiBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTU9ERTsKKwlpbnQgc2xvdDsKKworCWlmIChieXRlX2VuYWJsZSAmJiAoY29uZGl0aW9uX21vZGUgPT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJwX2luZm8tPmFkZHIgPj0gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICgoZGJjcl9kYWMoY2hpbGQpICYgKERCQ1JfREFDMVIgfCBEQkNSX0RBQzFXKSkgPT0gMCkgeworCQlzbG90ID0gMTsKKwkJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRCkKKwkJCWRiY3JfZGFjKGNoaWxkKSB8PSBEQkNSX0RBQzFSOworCQlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSkKKwkJCWRiY3JfZGFjKGNoaWxkKSB8PSBEQkNSX0RBQzFXOworCQljaGlsZC0+dGhyZWFkLmRhYzEgPSAodW5zaWduZWQgbG9uZylicF9pbmZvLT5hZGRyOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJCWlmIChieXRlX2VuYWJsZSkgeworCQkJY2hpbGQtPnRocmVhZC5kdmMxID0KKwkJCQkodW5zaWduZWQgbG9uZylicF9pbmZvLT5jb25kaXRpb25fdmFsdWU7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IyIHw9CisJCQkJKChieXRlX2VuYWJsZSA8PCBEQkNSMl9EVkMxQkVfU0hJRlQpIHwKKwkJCQkgKGNvbmRpdGlvbl9tb2RlIDw8IERCQ1IyX0RWQzFNX1NISUZUKSk7CisJCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCX0gZWxzZSBpZiAoY2hpbGQtPnRocmVhZC5kYmNyMiAmIERCQ1IyX0RBQzEyTU9ERSkgeworCQkvKiBCb3RoIGRhYzEgYW5kIGRhYzIgYXJlIHBhcnQgb2YgYSByYW5nZSAqLworCQlyZXR1cm4gLUVOT1NQQzsKKyNlbmRpZgorCX0gZWxzZSBpZiAoKGRiY3JfZGFjKGNoaWxkKSAmIChEQkNSX0RBQzJSIHwgREJDUl9EQUMyVykpID09IDApIHsKKwkJc2xvdCA9IDI7CisJCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQpCisJCQlkYmNyX2RhYyhjaGlsZCkgfD0gREJDUl9EQUMyUjsKKwkJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUpCisJCQlkYmNyX2RhYyhjaGlsZCkgfD0gREJDUl9EQUMyVzsKKwkJY2hpbGQtPnRocmVhZC5kYWMyID0gKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+YWRkcjsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCQlpZiAoYnl0ZV9lbmFibGUpIHsKKwkJCWNoaWxkLT50aHJlYWQuZHZjMiA9CisJCQkJKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+Y29uZGl0aW9uX3ZhbHVlOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMiB8PQorCQkJCSgoYnl0ZV9lbmFibGUgPDwgREJDUjJfRFZDMkJFX1NISUZUKSB8CisJCQkJIChjb25kaXRpb25fbW9kZSA8PCBEQkNSMl9EVkMyTV9TSElGVCkpOworCQl9CisjZW5kaWYKKwl9IGVsc2UKKwkJcmV0dXJuIC1FTk9TUEM7CisJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JRE07CisJY2hpbGQtPnRocmVhZC5yZWdzLT5tc3IgfD0gTVNSX0RFOworCisJcmV0dXJuIHNsb3QgKyA0OworfQorCitzdGF0aWMgaW50IGRlbF9kYWMoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IHNsb3QpCit7CisJaWYgKHNsb3QgPT0gMSkgeworCQlpZiAoY2hpbGQtPnRocmVhZC5kYWMxID09IDApCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQljaGlsZC0+dGhyZWFkLmRhYzEgPSAwOworCQlkYmNyX2RhYyhjaGlsZCkgJj0gfihEQkNSX0RBQzFSIHwgREJDUl9EQUMxVyk7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJCWlmIChjaGlsZC0+dGhyZWFkLmRiY3IyICYgREJDUjJfREFDMTJNT0RFKSB7CisJCQljaGlsZC0+dGhyZWFkLmRhYzIgPSAwOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMiAmPSB+REJDUjJfREFDMTJNT0RFOworCQl9CisJCWNoaWxkLT50aHJlYWQuZGJjcjIgJj0gfihEQkNSMl9EVkMxTSB8IERCQ1IyX0RWQzFCRSk7CisjZW5kaWYKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCQljaGlsZC0+dGhyZWFkLmR2YzEgPSAwOworI2VuZGlmCisJfSBlbHNlIGlmIChzbG90ID09IDIpIHsKKwkJaWYgKGNoaWxkLT50aHJlYWQuZGFjMSA9PSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwkJaWYgKGNoaWxkLT50aHJlYWQuZGJjcjIgJiBEQkNSMl9EQUMxMk1PREUpCisJCQkvKiBQYXJ0IG9mIGEgcmFuZ2UgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQljaGlsZC0+dGhyZWFkLmRiY3IyICY9IH4oREJDUjJfRFZDMk0gfCBEQkNSMl9EVkMyQkUpOworI2VuZGlmCisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwkJY2hpbGQtPnRocmVhZC5kdmMyID0gMDsKKyNlbmRpZgorCQljaGlsZC0+dGhyZWFkLmRhYzIgPSAwOworCQlkYmNyX2RhYyhjaGlsZCkgJj0gfihEQkNSX0RBQzJSIHwgREJDUl9EQUMyVyk7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCitzdGF0aWMgaW50IHNldF9kYWNfcmFuZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJCSBzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgKmJwX2luZm8pCit7CisJaW50IG1vZGUgPSBicF9pbmZvLT5hZGRyX21vZGUgJiBQUENfQlJFQUtQT0lOVF9NT0RFX01BU0s7CisKKwkvKiBXZSBkb24ndCBhbGxvdyByYW5nZSB3YXRjaHBvaW50cyB0byBiZSB1c2VkIHdpdGggRFZDICovCisJaWYgKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogQmVzdCBlZmZvcnQgdG8gdmVyaWZ5IHRoZSBhZGRyZXNzIHJhbmdlLiAgVGhlIHVzZXIvc3VwZXJ2aXNvciBiaXRzCisJICogcHJldmVudCB0cmFwcGluZyBpbiBrZXJuZWwgc3BhY2UsIGJ1dCBsZXQncyBmYWlsIG9uIGFuIG9idmlvdXMgYmFkCisJICogcmFuZ2UuICBUaGUgc2ltcGxlIHRlc3Qgb24gdGhlIG1hc2sgaXMgbm90IGZvb2wtcHJvb2YsIGFuZCBhbnkKKwkgKiBleGNsdXNpdmUgcmFuZ2Ugd2lsbCBzcGlsbCBvdmVyIGludG8ga2VybmVsIHNwYWNlLgorCSAqLworCWlmIChicF9pbmZvLT5hZGRyID49IFRBU0tfU0laRSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKG1vZGUgPT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLKSB7CisJCS8qCisJCSAqIGRhYzIgaXMgYSBiaXRtYXNrLiAgRG9uJ3QgYWxsb3cgYSBtYXNrIHRoYXQgbWFrZXMgYQorCQkgKiBrZXJuZWwgc3BhY2UgYWRkcmVzcyBmcm9tIGEgdmFsaWQgZGFjMSB2YWx1ZQorCQkgKi8KKwkJaWYgKH4oKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+YWRkcjIpID49IFRBU0tfU0laRSkKKwkJCXJldHVybiAtRUlPOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEZvciByYW5nZSBicmVha3BvaW50cywgYWRkcjIgbXVzdCBhbHNvIGJlIGEgdmFsaWQgYWRkcmVzcworCQkgKi8KKwkJaWYgKGJwX2luZm8tPmFkZHIyID49IFRBU0tfU0laRSkKKwkJCXJldHVybiAtRUlPOworCX0KKworCWlmIChjaGlsZC0+dGhyZWFkLmRiY3IwICYKKwkgICAgKERCQ1IwX0RBQzFSIHwgREJDUjBfREFDMVcgfCBEQkNSMF9EQUMyUiB8IERCQ1IwX0RBQzJXKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEKQorCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IChEQkNSMF9EQUMxUiB8IERCQ1IwX0lETSk7CisJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUpCisJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gKERCQ1IwX0RBQzFXIHwgREJDUjBfSURNKTsKKwljaGlsZC0+dGhyZWFkLmRhYzEgPSBicF9pbmZvLT5hZGRyOworCWNoaWxkLT50aHJlYWQuZGFjMiA9IGJwX2luZm8tPmFkZHIyOworCWlmIChtb2RlID09IFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfSU5DTFVTSVZFKQorCQljaGlsZC0+dGhyZWFkLmRiY3IyICB8PSBEQkNSMl9EQUMxMk07CisJZWxzZSBpZiAobW9kZSA9PSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0VYQ0xVU0lWRSkKKwkJY2hpbGQtPnRocmVhZC5kYmNyMiAgfD0gREJDUjJfREFDMTJNWDsKKwllbHNlCS8qIFBQQ19CUkVBS1BPSU5UX01PREVfTUFTSyAqLworCQljaGlsZC0+dGhyZWFkLmRiY3IyICB8PSBEQkNSMl9EQUMxMk1NOworCWNoaWxkLT50aHJlYWQucmVncy0+bXNyIHw9IE1TUl9ERTsKKworCXJldHVybiA1OworfQorI2VuZGlmIC8qIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRSAqLworCitzdGF0aWMgbG9uZyBwcGNfc2V0X2h3ZGVidWcoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJICAgICBzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgKmJwX2luZm8pCit7CisJaWYgKGJwX2luZm8tPnZlcnNpb24gIT0gMSkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJLyoKKwkgKiBDaGVjayBmb3IgaW52YWxpZCBmbGFncyBhbmQgY29tYmluYXRpb25zCisJICovCisJaWYgKChicF9pbmZvLT50cmlnZ2VyX3R5cGUgPT0gMCkgfHwKKwkgICAgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIH4oUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFIHwKKwkJCQkgICAgICAgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SVykpIHx8CisJICAgIChicF9pbmZvLT5hZGRyX21vZGUgJiB+UFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLKSB8fAorCSAgICAoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUgJgorCSAgICAgfihQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTU9ERSB8CisJICAgICAgIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRV9BTEwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA9PSAwCisJaWYgKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICE9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorCisJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURSkgeworCQlpZiAoKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAhPSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX0VYRUNVVEUpIHx8CisJCSAgICAoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBzZXRfaW50cnVjdGlvbl9icChjaGlsZCwgYnBfaW5mbyk7CisJfQorCWlmIChicF9pbmZvLT5hZGRyX21vZGUgPT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVCkKKwkJcmV0dXJuIHNldF9kYWMoY2hpbGQsIGJwX2luZm8pOworCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJcmV0dXJuIHNldF9kYWNfcmFuZ2UoY2hpbGQsIGJwX2luZm8pOworI2Vsc2UKKwlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorI2Vsc2UgLyogIUNPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgKi8KKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgZGF0YSBicmVha3BvaW50CisJICovCisJaWYgKCgoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SVykgPT0gMCkgfHwKKwkgICAgKChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiB+UFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SVykgIT0gMCkgfHwKKwkgICAgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAhPSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKSB8fAorCSAgICAoYnBfaW5mby0+YWRkcl9tb2RlICE9IFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1QpIHx8CisJICAgIChicF9pbmZvLT5jb25kaXRpb25fbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNoaWxkLT50aHJlYWQuZGFicikKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+YWRkciA+PSBUQVNLX1NJWkUpCisJCXJldHVybiAtRUlPOworCisJY2hpbGQtPnRocmVhZC5kYWJyID0gKHVuc2lnbmVkIGxvbmcpYnBfaW5mby0+YWRkcjsKKworCXJldHVybiAxOworI2VuZGlmIC8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTICovCit9CisKK3N0YXRpYyBsb25nIHBwY19kZWxfaHdkZWJ1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKK3sKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJaW50IHJjOworCisJaWYgKGRhdGEgPD0gNCkKKwkJcmMgPSBkZWxfaW5zdHJ1Y3Rpb25fYnAoY2hpbGQsIChpbnQpZGF0YSk7CisJZWxzZQorCQlyYyA9IGRlbF9kYWMoY2hpbGQsIChpbnQpZGF0YSAtIDQpOworCisJaWYgKCFyYykgeworCQlpZiAoIURCQ1JfQUNUSVZFX0VWRU5UUyhjaGlsZC0+dGhyZWFkLmRiY3IwLAorCQkJCQljaGlsZC0+dGhyZWFkLmRiY3IxKSkgeworCQkJY2hpbGQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSURNOworCQkJY2hpbGQtPnRocmVhZC5yZWdzLT5tc3IgJj0gfk1TUl9ERTsKKwkJfQorCX0KKwlyZXR1cm4gcmM7CisjZWxzZQorCWlmIChkYXRhICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjaGlsZC0+dGhyZWFkLmRhYnIgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwljaGlsZC0+dGhyZWFkLmRhYnIgPSAwOworCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwogLyoKICAqIEhlcmUgYXJlIHRoZSBvbGQgImxlZ2FjeSIgcG93ZXJwYyBzcGVjaWZpYyBnZXRyZWdzL3NldHJlZ3MgcHRyYWNlIGNhbGxzLAogICogd2UgbWFyayB0aGVtIGFzIG9ic29sZXRlIG5vdywgdGhleSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbgpAQCAtOTMyLDEzICsxMzI4LDc3IEBACiAJCWJyZWFrOwogCX0KIAorCWNhc2UgUFBDX1BUUkFDRV9HRVRIV0RCR0lORk86IHsKKwkJc3RydWN0IHBwY19kZWJ1Z19pbmZvIGRiZ2luZm87CisKKwkJZGJnaW5mby52ZXJzaW9uID0gMTsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJCWRiZ2luZm8ubnVtX2luc3RydWN0aW9uX2JwcyA9IENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1M7CisJCWRiZ2luZm8ubnVtX2RhdGFfYnBzID0gQ09ORklHX1BQQ19BRFZfREVCVUdfREFDUzsKKwkJZGJnaW5mby5udW1fY29uZGl0aW9uX3JlZ3MgPSBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTOworCQlkYmdpbmZvLmRhdGFfYnBfYWxpZ25tZW50ID0gNDsKKwkJZGJnaW5mby5zaXplb2ZfY29uZGl0aW9uID0gNDsKKwkJZGJnaW5mby5mZWF0dXJlcyA9IFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfUkFOR0UgfAorCQkJCSAgIFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfTUFTSzsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwkJZGJnaW5mby5mZWF0dXJlcyB8PQorCQkJCSAgIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfUkFOR0UgfAorCQkJCSAgIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfTUFTSzsKKyNlbmRpZgorI2Vsc2UgLyogIUNPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KKwkJZGJnaW5mby5udW1faW5zdHJ1Y3Rpb25fYnBzID0gMDsKKwkJZGJnaW5mby5udW1fZGF0YV9icHMgPSAxOworCQlkYmdpbmZvLm51bV9jb25kaXRpb25fcmVncyA9IDA7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJCWRiZ2luZm8uZGF0YV9icF9hbGlnbm1lbnQgPSA4OworI2Vsc2UKKwkJZGJnaW5mby5kYXRhX2JwX2FsaWdubWVudCA9IDQ7CisjZW5kaWYKKwkJZGJnaW5mby5zaXplb2ZfY29uZGl0aW9uID0gMDsKKwkJZGJnaW5mby5mZWF0dXJlcyA9IDA7CisjZW5kaWYgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZGF0YSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBwY19kZWJ1Z19pbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gX19jb3B5X3RvX3VzZXIoKHN0cnVjdCBwcGNfZGVidWdfaW5mbyBfX3VzZXIgKilkYXRhLAorCQkJCSAgICAgJmRiZ2luZm8sIHNpemVvZihzdHJ1Y3QgcHBjX2RlYnVnX2luZm8pKSA/CisJCSAgICAgIC1FRkFVTFQgOiAwOworCQlicmVhazsKKwl9CisKKwljYXNlIFBQQ19QVFJBQ0VfU0VUSFdERUJVRzogeworCQlzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQgYnBfaW5mbzsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZGF0YSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBwY19od19icmVha3BvaW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gX19jb3B5X2Zyb21fdXNlcigmYnBfaW5mbywKKwkJCQkgICAgICAgKHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCBfX3VzZXIgKilkYXRhLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBwY19od19icmVha3BvaW50KSkgPworCQkgICAgICAtRUZBVUxUIDogMDsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBwcGNfc2V0X2h3ZGVidWcoY2hpbGQsICZicF9pbmZvKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBQUENfUFRSQUNFX0RFTEhXREVCVUc6IHsKKwkJcmV0ID0gcHBjX2RlbF9od2RlYnVnKGNoaWxkLCBhZGRyLCBkYXRhKTsKKwkJYnJlYWs7CisJfQorCiAJY2FzZSBQVFJBQ0VfR0VUX0RFQlVHUkVHOiB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCS8qIFdlIG9ubHkgc3VwcG9ydCBvbmUgREFCUiBhbmQgbm8gSUFCUlMgYXQgdGhlIG1vbWVudCAqLwogCQlpZiAoYWRkciA+IDApCiAJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJCXJldCA9IHB1dF91c2VyKGNoaWxkLT50aHJlYWQuZGFjMSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKyNlbHNlCiAJCXJldCA9IHB1dF91c2VyKGNoaWxkLT50aHJlYWQuZGFiciwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKyNlbmRpZgogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCmluZGV4IDAwYjUwNzguLmEwYWZiNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYwpAQCAtMTQwLDE3ICsxNDAsMTUgQEAKIAkJcmV0dXJuIDA7ICAgICAgICAgICAgICAgLyogbm8gc2lnbmFscyBkZWxpdmVyZWQgKi8KIAl9CiAKKyNpZm5kZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogICAgICAgICAvKgogCSAqIFJlZW5hYmxlIHRoZSBEQUJSIGJlZm9yZSBkZWxpdmVyaW5nIHRoZSBzaWduYWwgdG8KIAkgKiB1c2VyIHNwYWNlLiBUaGUgREFCUiB3aWxsIGhhdmUgYmVlbiBjbGVhcmVkIGlmIGl0CiAJICogdHJpZ2dlcmVkIGluc2lkZSB0aGUga2VybmVsLgogCSAqLwotCWlmIChjdXJyZW50LT50aHJlYWQuZGFicikgeworCWlmIChjdXJyZW50LT50aHJlYWQuZGFicikKIAkJc2V0X2RhYnIoY3VycmVudC0+dGhyZWFkLmRhYnIpOwotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCQltdHNwcihTUFJOX0RCQ1IwLCBjdXJyZW50LT50aHJlYWQuZGJjcjApOwogI2VuZGlmCi0JfQogCiAJaWYgKGlzMzIpIHsKICAgICAgICAgCWlmIChrYS5zYS5zYV9mbGFncyAmIFNBX1NJR0lORk8pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCBkNjcwNDI5Li4yNjY2MTAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTEwNzgsNyArMTA3OCw3IEBACiAJaW50IGk7CiAJdW5zaWduZWQgY2hhciB0bXA7CiAJdW5zaWduZWQgbG9uZyBuZXdfbXNyID0gcmVncy0+bXNyOwotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCXVuc2lnbmVkIGxvbmcgbmV3X2RiY3IwID0gY3VycmVudC0+dGhyZWFkLmRiY3IwOwogI2VuZGlmCiAKQEAgLTEwODcsMTMgKzEwODcsMTcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQlzd2l0Y2ggKG9wLmRiZ190eXBlKSB7CiAJCWNhc2UgU0lHX0RCR19TSU5HTEVfU1RFUFBJTkc6Ci0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJCQlpZiAob3AuZGJnX3ZhbHVlKSB7CiAJCQkJbmV3X21zciB8PSBNU1JfREU7CiAJCQkJbmV3X2RiY3IwIHw9IChEQkNSMF9JRE0gfCBEQkNSMF9JQyk7CiAJCQl9IGVsc2UgewotCQkJCW5ld19tc3IgJj0gfk1TUl9ERTsKLQkJCQluZXdfZGJjcjAgJj0gfihEQkNSMF9JRE0gfCBEQkNSMF9JQyk7CisJCQkJbmV3X2RiY3IwICY9IH5EQkNSMF9JQzsKKwkJCQlpZiAoIURCQ1JfQUNUSVZFX0VWRU5UUyhuZXdfZGJjcjAsCisJCQkJCQljdXJyZW50LT50aHJlYWQuZGJjcjEpKSB7CisJCQkJCW5ld19tc3IgJj0gfk1TUl9ERTsKKwkJCQkJbmV3X2RiY3IwICY9IH5EQkNSMF9JRE07CisJCQkJfQogCQkJfQogI2Vsc2UKIAkJCWlmIChvcC5kYmdfdmFsdWUpCkBAIC0xMTAzLDcgKzExMDcsNyBAQAogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBTSUdfREJHX0JSQU5DSF9UUkFDSU5HOgotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQkJcmV0dXJuIC1FSU5WQUw7CiAjZWxzZQogCQkJaWYgKG9wLmRiZ192YWx1ZSkKQEAgLTExMjQsNyArMTEyOCw3IEBACiAJICAgZmFpbHVyZSBpcyBhIHByb2JsZW0sIGFueXdheSwgYW5kIGl0J3MgdmVyeSB1bmxpa2VseSB1bmxlc3MKIAkgICB0aGUgdXNlciBpcyByZWFsbHkgZG9pbmcgc29tZXRoaW5nIHdyb25nLiAqLwogCXJlZ3MtPm1zciA9IG5ld19tc3I7Ci0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJY3VycmVudC0+dGhyZWFkLmRiY3IwID0gbmV3X2RiY3IwOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKaW5kZXggNmM2MDkzZC4uMWIxNmI5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCQlhY2NvdW50X3N5c3RlbV90aW1lKHRzaywgMCwgZGVsdGEsIGRlbHRhc2NhbGVkKTsKIAllbHNlCiAJCWFjY291bnRfaWRsZV90aW1lKGRlbHRhKTsKLQlwZXJfY3B1KGNwdXRpbWVfbGFzdF9kZWx0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IGRlbHRhOwotCXBlcl9jcHUoY3B1dGltZV9zY2FsZWRfbGFzdF9kZWx0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IGRlbHRhc2NhbGVkOworCV9fZ2V0X2NwdV92YXIoY3B1dGltZV9sYXN0X2RlbHRhKSA9IGRlbHRhOworCV9fZ2V0X2NwdV92YXIoY3B1dGltZV9zY2FsZWRfbGFzdF9kZWx0YSkgPSBkZWx0YXNjYWxlZDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY2NvdW50X3N5c3RlbV92dGltZSk7CkBAIC01NzUsNiArNTc1LDggQEAKIAogCXRyYWNlX3RpbWVyX2ludGVycnVwdF9lbnRyeShyZWdzKTsKIAorCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLnRpbWVyX2lycXMrKzsKKwogCS8qIEVuc3VyZSBhIHBvc2l0aXZlIHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhlIGRlY3JlbWVudGVyLCBvciBlbHNlCiAJICogc29tZSBDUFVzIHdpbGwgY29udGludXVlIHRvIHRha2UgZGVjcmVtZW50ZXIgZXhjZXB0aW9ucyAqLwogCXNldF9kZWMoREVDUkVNRU5URVJfTUFYKTsKQEAgLTkzNSw4ICs5MzcsOCBAQAogCSpkZWMgPSBkZWNyZW1lbnRlcl9jbG9ja2V2ZW50OwogCWRlYy0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoY3B1KTsKIAotCXByaW50ayhLRVJOX0RFQlVHICJjbG9ja2V2ZW50OiAlcyBtdWx0WyV4XSBzaGlmdFslZF0gY3B1WyVkXVxuIiwKLQkgICAgICAgZGVjLT5uYW1lLCBkZWMtPm11bHQsIGRlYy0+c2hpZnQsIGNwdSk7CisJcHJpbnRrX29uY2UoS0VSTl9ERUJVRyAiY2xvY2tldmVudDogJXMgbXVsdFsleF0gc2hpZnRbJWRdIGNwdVslZF1cbiIsCisJCSAgICBkZWMtPm5hbWUsIGRlYy0+bXVsdCwgZGVjLT5zaGlmdCwgY3B1KTsKIAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShkZWMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IGQwNjlmZjguLjY5NjYyNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTYwLDEzICs2MCwxMyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR0dFUikgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCi1pbnQgKCpfX2RlYnVnZ2VyKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX2lwaSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9icHQpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfc3N0ZXApKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfaWFicl9tYXRjaCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9kYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX2ZhdWx0X2hhbmRsZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2ludCAoKl9fZGVidWdnZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OworaW50ICgqX19kZWJ1Z2dlcl9pcGkpKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OworaW50ICgqX19kZWJ1Z2dlcl9icHQpKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OworaW50ICgqX19kZWJ1Z2dlcl9zc3RlcCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX2lhYnJfbWF0Y2gpKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OworaW50ICgqX19kZWJ1Z2dlcl9kYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfZmF1bHRfaGFuZGxlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CiAKIEVYUE9SVF9TWU1CT0woX19kZWJ1Z2dlcik7CiBFWFBPUlRfU1lNQk9MKF9fZGVidWdnZXJfaXBpKTsKQEAgLTEwMiwxMSArMTAyLDExIEBACiBpbnQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQogewogCXN0YXRpYyBzdHJ1Y3QgewotCQlzcGlubG9ja190IGxvY2s7CisJCXJhd19zcGlubG9ja190IGxvY2s7CiAJCXUzMiBsb2NrX293bmVyOwogCQlpbnQgbG9ja19vd25lcl9kZXB0aDsKIAl9IGRpZSA9IHsKLQkJLmxvY2sgPQkJCV9fU1BJTl9MT0NLX1VOTE9DS0VEKGRpZS5sb2NrKSwKKwkJLmxvY2sgPQkJCV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRChkaWUubG9jayksCiAJCS5sb2NrX293bmVyID0JCS0xLAogCQkubG9ja19vd25lcl9kZXB0aCA9CTAKIAl9OwpAQCAtMTIwLDcgKzEyMCw3IEBACiAKIAlpZiAoZGllLmxvY2tfb3duZXIgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgewogCQljb25zb2xlX3ZlcmJvc2UoKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRpZS5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGllLmxvY2ssIGZsYWdzKTsKIAkJZGllLmxvY2tfb3duZXIgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJCWRpZS5sb2NrX293bmVyX2RlcHRoID0gMDsKIAkJYnVzdF9zcGlubG9ja3MoMSk7CkBAIC0xNDYsNiArMTQ2LDExIEBACiAjZW5kaWYKIAkJcHJpbnRrKCIlc1xuIiwgcHBjX21kLm5hbWUgPyBwcGNfbWQubmFtZSA6ICIiKTsKIAorCQlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CisJCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwgMjU1LAorCQkJICAgICAgIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCQkJcmV0dXJuIDE7CisKIAkJcHJpbnRfbW9kdWxlcygpOwogCQlzaG93X3JlZ3MocmVncyk7CiAJfSBlbHNlIHsKQEAgLTE1NSw3ICsxNjAsNyBAQAogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWRpZS5sb2NrX293bmVyID0gLTE7CiAJYWRkX3RhaW50KFRBSU5UX0RJRSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGllLmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGllLmxvY2ssIGZsYWdzKTsKIAogCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkgfHwKIAkJa2V4ZWNfc3JfYWN0aXZhdGVkKHNtcF9wcm9jZXNzb3JfaWQoKSkpCkBAIC0yOTQsNyArMjk5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogLyogT24gNHh4LCB0aGUgcmVhc29uIGZvciB0aGUgbWFjaGluZSBjaGVjayBvciBwcm9ncmFtIGV4Y2VwdGlvbgogICAgaXMgaW4gdGhlIEVTUi4gKi8KICNkZWZpbmUgZ2V0X3JlYXNvbihyZWdzKQkoKHJlZ3MpLT5kc2lzcikKQEAgLTQ3OCw2ICs0ODMsOCBAQAogewogCWludCByZWNvdmVyID0gMDsKIAorCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLm1jZV9leGNlcHRpb25zKys7CisKIAkvKiBTZWUgaWYgYW55IG1hY2hpbmUgZGVwZW5kZW50IGNhbGxzLiBJbiB0aGVvcnksIHdlIHdvdWxkIHdhbnQKIAkgKiB0byBjYWxsIHRoZSBDUFUgZmlyc3QsIGFuZCBjYWxsIHRoZSBwcGNfbWQuIG9uZSBpZiB0aGUgQ1BVCiAJICogb25lIHJldHVybnMgYSBwb3NpdGl2ZSBudW1iZXIuIEhvd2V2ZXIgdGhlcmUgaXMgZXhpc3RpbmcgY29kZQpAQCAtOTYwLDYgKzk2Nyw4IEBACiAKIHZvaWQgcGVyZm9ybWFuY2VfbW9uaXRvcl9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkucG11X2lycXMrKzsKKwogCXBlcmZfaXJxKHJlZ3MpOwogfQogCkBAIC0xMDI0LDEwICsxMDMzLDY5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHXzh4eCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCitzdGF0aWMgdm9pZCBoYW5kbGVfZGVidWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZGVidWdfc3RhdHVzKQoreworCWludCBjaGFuZ2VkID0gMDsKKwkvKgorCSAqIERldGVybWluZSB0aGUgY2F1c2Ugb2YgdGhlIGRlYnVnIGV2ZW50LCBjbGVhciB0aGUKKwkgKiBldmVudCBmbGFncyBhbmQgc2VuZCBhIHRyYXAgdG8gdGhlIGhhbmRsZXIuIFRvcmV6CisJICovCisJaWYgKGRlYnVnX3N0YXR1cyAmIChEQlNSX0RBQzFSIHwgREJTUl9EQUMxVykpIHsKKwkJZGJjcl9kYWMoY3VycmVudCkgJj0gfihEQkNSX0RBQzFSIHwgREJDUl9EQUMxVyk7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJCWN1cnJlbnQtPnRocmVhZC5kYmNyMiAmPSB+REJDUjJfREFDMTJNT0RFOworI2VuZGlmCisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0RBQzEpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICA1KTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0gIGVsc2UgaWYgKGRlYnVnX3N0YXR1cyAmIChEQlNSX0RBQzJSIHwgREJTUl9EQUMyVykpIHsKKwkJZGJjcl9kYWMoY3VycmVudCkgJj0gfihEQkNSX0RBQzJSIHwgREJDUl9EQUMyVyk7CisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0RBQzIpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICA2KTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0gIGVsc2UgaWYgKGRlYnVnX3N0YXR1cyAmIERCU1JfSUFDMSkgeworCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzE7CisJCWRiY3JfaWFjX3JhbmdlKGN1cnJlbnQpICY9IH5EQkNSX0lBQzEyTU9ERTsKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fSUFDMSksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDEpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfSAgZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgREJTUl9JQUMyKSB7CisJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMjsKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fSUFDMiksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDIpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfSAgZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgREJTUl9JQUMzKSB7CisJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMzsKKwkJZGJjcl9pYWNfcmFuZ2UoY3VycmVudCkgJj0gfkRCQ1JfSUFDMzRNT0RFOworCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9JQUMzKSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgMyk7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9ICBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiBEQlNSX0lBQzQpIHsKKwkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUM0OworCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9JQUM0KSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgNCk7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9CisJLyoKKwkgKiBBdCB0aGUgcG9pbnQgdGhpcyByb3V0aW5lIHdhcyBjYWxsZWQsIHRoZSBNU1IoREUpIHdhcyB0dXJuZWQgb2ZmLgorCSAqIENoZWNrIGFsbCBvdGhlciBkZWJ1ZyBmbGFncyBhbmQgc2VlIGlmIHRoYXQgYml0IG5lZWRzIHRvIGJlIHR1cm5lZAorCSAqIGJhY2sgb24gb3Igbm90LgorCSAqLworCWlmIChEQkNSX0FDVElWRV9FVkVOVFMoY3VycmVudC0+dGhyZWFkLmRiY3IwLCBjdXJyZW50LT50aHJlYWQuZGJjcjEpKQorCQlyZWdzLT5tc3IgfD0gTVNSX0RFOworCWVsc2UKKwkJLyogTWFrZSBzdXJlIHRoZSBJRE0gZmxhZyBpcyBvZmYgKi8KKwkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JRE07CisKKwlpZiAoY2hhbmdlZCAmIDB4MDEpCisJCW10c3ByKFNQUk5fREJDUjAsIGN1cnJlbnQtPnRocmVhZC5kYmNyMCk7Cit9CiAKIHZvaWQgX19rcHJvYmVzIERlYnVnRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGRlYnVnX3N0YXR1cykKIHsKKwljdXJyZW50LT50aHJlYWQuZGJzciA9IGRlYnVnX3N0YXR1czsKKwogCS8qIEhhY2sgYWxlcnQ6IE9uIEJvb2tFLCBCcmFuY2ggVGFrZW4gc3RvcHMgb24gdGhlIGJyYW5jaCBpdHNlbGYsIHdoaWxlCiAJICogb24gc2VydmVyLCBpdCBzdG9wcyBvbiB0aGUgdGFyZ2V0IG9mIHRoZSBicmFuY2guIEluIG9yZGVyIHRvIHNpbXVsYXRlCiAJICogdGhlIHNlcnZlciBiZWhhdmlvdXIsIHdlIHRodXMgcmVzdGFydCByaWdodCBhd2F5IHdpdGggYSBzaW5nbGUgc3RlcApAQCAtMTA3MSwyOSArMTEzOSwyMyBAQAogCQlpZiAoZGVidWdnZXJfc3N0ZXAocmVncykpCiAJCQlyZXR1cm47CiAKLQkJaWYgKHVzZXJfbW9kZShyZWdzKSkKLQkJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+KERCQ1IwX0lDKTsKKwkJaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCQkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQzsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJCQlpZiAoREJDUl9BQ1RJVkVfRVZFTlRTKGN1cnJlbnQtPnRocmVhZC5kYmNyMCwKKwkJCQkJICAgICAgIGN1cnJlbnQtPnRocmVhZC5kYmNyMSkpCisJCQkJcmVncy0+bXNyIHw9IE1TUl9ERTsKKwkJCWVsc2UKKwkJCQkvKiBNYWtlIHN1cmUgdGhlIElETSBiaXQgaXMgb2ZmICovCisJCQkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JRE07CisjZW5kaWYKKwkJfQogCiAJCV9leGNlcHRpb24oU0lHVFJBUCwgcmVncywgVFJBUF9UUkFDRSwgcmVncy0+bmlwKTsKLQl9IGVsc2UgaWYgKGRlYnVnX3N0YXR1cyAmIChEQlNSX0RBQzFSIHwgREJTUl9EQUMxVykpIHsKLQkJcmVncy0+bXNyICY9IH5NU1JfREU7Ci0KLQkJaWYgKHVzZXJfbW9kZShyZWdzKSkgewotCQkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH4oREJTUl9EQUMxUiB8IERCU1JfREFDMVcgfAotCQkJCQkJCQlEQkNSMF9JRE0pOwotCQl9IGVsc2UgewotCQkJLyogRGlzYWJsZSBEQUMgaW50ZXJ1cHRzICovCi0JCQltdHNwcihTUFJOX0RCQ1IwLCBtZnNwcihTUFJOX0RCQ1IwKSAmIH4oREJTUl9EQUMxUiB8Ci0JCQkJCQlEQlNSX0RBQzFXIHwgREJDUjBfSURNKSk7Ci0KLQkJCS8qIENsZWFyIHRoZSBEQUMgZXZlbnQgKi8KLQkJCW10c3ByKFNQUk5fREJTUiwgKERCU1JfREFDMVIgfCBEQlNSX0RBQzFXKSk7Ci0JCX0KLQkJLyogU2V0dXAgYW5kIHNlbmQgdGhlIHRyYXAgdG8gdGhlIGhhbmRsZXIgKi8KLQkJZG9fZGFicihyZWdzLCBtZnNwcihTUFJOX0RBQzEpLCBkZWJ1Z19zdGF0dXMpOwotCX0KKwl9IGVsc2UKKwkJaGFuZGxlX2RlYnVnKHJlZ3MsIGRlYnVnX3N0YXR1cyk7CiB9Ci0jZW5kaWYgLyogQ09ORklHXzR4eCB8fCBDT05GSUdfQk9PS0UgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCiAKICNpZiAhZGVmaW5lZChDT05GSUdfVEFVX0lOVCkKIHZvaWQgVEFVRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCmluZGV4IGU2OGJlYWMuLjRkNGVlYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKQEAgLTQzLDYyICs0Myw2MiBAQAogCWxkCXI3LDE2KHI0KQogCWxkdQlyOCwyNChyNCkKIDE6CXN0ZAlyNSw4KHIzKQotCWxkCXI5LDgocjQpCiAJc3RkCXI2LDE2KHIzKQorCWxkCXI5LDgocjQpCiAJbGQJcjEwLDE2KHI0KQogCXN0ZAlyNywyNChyMykKLQlsZAlyMTEsMjQocjQpCiAJc3RkCXI4LDMyKHIzKQorCWxkCXIxMSwyNChyNCkKIAlsZAlyMTIsMzIocjQpCiAJc3RkCXI5LDQwKHIzKQotCWxkCXI1LDQwKHI0KQogCXN0ZAlyMTAsNDgocjMpCisJbGQJcjUsNDAocjQpCiAJbGQJcjYsNDgocjQpCiAJc3RkCXIxMSw1NihyMykKLQlsZAlyNyw1NihyNCkKIAlzdGQJcjEyLDY0KHIzKQorCWxkCXI3LDU2KHI0KQogCWxkCXI4LDY0KHI0KQogCXN0ZAlyNSw3MihyMykKLQlsZAlyOSw3MihyNCkKIAlzdGQJcjYsODAocjMpCisJbGQJcjksNzIocjQpCiAJbGQJcjEwLDgwKHI0KQogCXN0ZAlyNyw4OChyMykKLQlsZAlyMTEsODgocjQpCiAJc3RkCXI4LDk2KHIzKQorCWxkCXIxMSw4OChyNCkKIAlsZAlyMTIsOTYocjQpCiAJc3RkCXI5LDEwNChyMykKLQlsZAlyNSwxMDQocjQpCiAJc3RkCXIxMCwxMTIocjMpCisJbGQJcjUsMTA0KHI0KQogCWxkCXI2LDExMihyNCkKIAlzdGQJcjExLDEyMChyMykKLQlsZAlyNywxMjAocjQpCiAJc3RkdQlyMTIsMTI4KHIzKQorCWxkCXI3LDEyMChyNCkKIAlsZHUJcjgsMTI4KHI0KQogCWJkbnoJMWIKIAogCXN0ZAlyNSw4KHIzKQotCWxkCXI5LDgocjQpCiAJc3RkCXI2LDE2KHIzKQorCWxkCXI5LDgocjQpCiAJbGQJcjEwLDE2KHI0KQogCXN0ZAlyNywyNChyMykKLQlsZAlyMTEsMjQocjQpCiAJc3RkCXI4LDMyKHIzKQorCWxkCXIxMSwyNChyNCkKIAlsZAlyMTIsMzIocjQpCiAJc3RkCXI5LDQwKHIzKQotCWxkCXI1LDQwKHI0KQogCXN0ZAlyMTAsNDgocjMpCisJbGQJcjUsNDAocjQpCiAJbGQJcjYsNDgocjQpCiAJc3RkCXIxMSw1NihyMykKLQlsZAlyNyw1NihyNCkKIAlzdGQJcjEyLDY0KHIzKQorCWxkCXI3LDU2KHI0KQogCWxkCXI4LDY0KHI0KQogCXN0ZAlyNSw3MihyMykKLQlsZAlyOSw3MihyNCkKIAlzdGQJcjYsODAocjMpCisJbGQJcjksNzIocjQpCiAJbGQJcjEwLDgwKHI0KQogCXN0ZAlyNyw4OChyMykKLQlsZAlyMTEsODgocjQpCiAJc3RkCXI4LDk2KHIzKQorCWxkCXIxMSw4OChyNCkKIAlsZAlyMTIsOTYocjQpCiAJc3RkCXI5LDEwNChyMykKIAlzdGQJcjEwLDExMihyMykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvY29weXVzZXJfNjQuUyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXVzZXJfNjQuUwppbmRleCA2OTNiMTRhLi41NzhiNjI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2NvcHl1c2VyXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TCkBAIC00NCwzNyArNDQsNTUgQEAKIAlhbmRpLglyMCxyNCw3CiAJYm5lCS5Mc3JjX3VuYWxpZ25lZAogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfVU5BTElHTkVEX0xEX1NURCkKLQlzcmRpCXI3LHI1LDQKLTIwOglsZAlyOSwwKHI0KQotCWFkZGkJcjQscjQsLTgKLQltdGN0cglyNwotCWFuZGkuCXI1LHI1LDcKLQliZgljcjcqNCswLDIyZgotCWFkZGkJcjMscjMsOAotCWFkZGkJcjQscjQsOAotCW1yCXI4LHI5Ci0JYmx0CWNyMSw3MmYKLTIxOglsZAlyOSw4KHI0KQotNzA6CXN0ZAlyOCw4KHIzKQotMjI6CWxkdQlyOCwxNihyNCkKLTcxOglzdGR1CXI5LDE2KHIzKQotCWJkbnoJMjFiCi03MjoJc3RkCXI4LDgocjMpCi0JYmVxKwkzZgorCWJsdAljcjEsLkxkb190YWlsCQkvKiBpZiA8IDE2IGJ5dGVzIHRvIGNvcHkgKi8KKwlzcmRpCXIwLHI1LDUKKwljbXBkaQljcjEscjAsMAorMjA6CWxkCXI3LDAocjQpCisyMjA6CWxkCXI2LDgocjQpCisJYWRkaQlyNCxyNCwxNgorCW10Y3RyCXIwCisJYW5kaS4JcjAscjUsMHgxMAorCWJlcQkyMmYKIAlhZGRpCXIzLHIzLDE2CisJYWRkaQlyNCxyNCwtMTYKKwltcglyOSxyNworCW1yCXI4LHI2CisJYmVxCWNyMSw3MmYKKzIxOglsZAlyNywxNihyNCkKKzIyMToJbGQJcjYsMjQocjQpCisJYWRkaQlyNCxyNCwzMgorNzA6CXN0ZAlyOSwwKHIzKQorMjcwOglzdGQJcjgsOChyMykKKzIyOglsZAlyOSwwKHI0KQorMjIyOglsZAlyOCw4KHI0KQorNzE6CXN0ZAlyNywxNihyMykKKzI3MToJc3RkCXI2LDI0KHIzKQorCWFkZGkJcjMscjMsMzIKKwliZG56CTIxYgorNzI6CXN0ZAlyOSwwKHIzKQorMjcyOglzdGQJcjgsOChyMykKKwlhbmRpLglyNSxyNSwweGYKKwliZXErCTNmCisJYWRkaQlyNCxyNCwxNgogLkxkb190YWlsOgotCWJmCWNyNyo0KzEsMWYKLTIzOglsd3oJcjksOChyNCkKKwlhZGRpCXIzLHIzLDE2CisJYmYJY3I3KjQrMCwyNDZmCisyNDQ6CWxkCXI5LDAocjQpCisJYWRkaQlyNCxyNCw4CisyNDU6CXN0ZAlyOSwwKHIzKQorCWFkZGkJcjMscjMsOAorMjQ2OgliZgljcjcqNCsxLDFmCisyMzoJbHd6CXI5LDAocjQpCiAJYWRkaQlyNCxyNCw0CiA3MzoJc3R3CXI5LDAocjMpCiAJYWRkaQlyMyxyMyw0CiAxOgliZgljcjcqNCsyLDJmCi00NDoJbGh6CXI5LDgocjQpCis0NDoJbGh6CXI5LDAocjQpCiAJYWRkaQlyNCxyNCwyCiA3NDoJc3RoCXI5LDAocjMpCiAJYWRkaQlyMyxyMywyCiAyOgliZgljcjcqNCszLDNmCi00NToJbGJ6CXI5LDgocjQpCis0NToJbGJ6CXI5LDAocjQpCiA3NToJc3RiCXI5LDAocjMpCiAzOglsaQlyMywwCiAJYmxyCkBAIC0yMjAsNyArMjM4LDkgQEAKIDEzMToKIAlhZGRpCXIzLHIzLDgKIDEyMDoKKzMyMDoKIDEyMjoKKzMyMjoKIDEyNDoKIDEyNToKIDEyNjoKQEAgLTIyOSw5ICsyNDksMTEgQEAKIDEyOToKIDEzMzoKIAlhZGRpCXIzLHIzLDgKLTEyMToKIDEzMjoKIAlhZGRpCXIzLHIzLDgKKzEyMToKKzMyMToKKzM0NDoKIDEzNDoKIDEzNToKIDEzODoKQEAgLTMwMywxOCArMzI1LDIyIEBACiAxODM6CiAJYWRkCXIzLHIzLHI3CiAJYgkxZgorMzcxOgogMTgwOgogCWFkZGkJcjMscjMsOAogMTcxOgogMTc3OgogCWFkZGkJcjMscjMsOAotMTcwOgotMTcyOgorMzcwOgorMzcyOgogMTc2OgogMTc4OgogCWFkZGkJcjMscjMsNAogMTg1OgogCWFkZGkJcjMscjMsNAorMTcwOgorMTcyOgorMzQ1OgogMTczOgogMTc0OgogMTc1OgpAQCAtMzQxLDExICszNjcsMTkgQEAKIAkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgogCS5hbGlnbgkzCiAJLmxsb25nCTIwYiwxMjBiCisJLmxsb25nCTIyMGIsMzIwYgogCS5sbG9uZwkyMWIsMTIxYgorCS5sbG9uZwkyMjFiLDMyMWIKIAkubGxvbmcJNzBiLDE3MGIKKwkubGxvbmcJMjcwYiwzNzBiCiAJLmxsb25nCTIyYiwxMjJiCisJLmxsb25nCTIyMmIsMzIyYgogCS5sbG9uZwk3MWIsMTcxYgorCS5sbG9uZwkyNzFiLDM3MWIKIAkubGxvbmcJNzJiLDE3MmIKKwkubGxvbmcJMjcyYiwzNzJiCisJLmxsb25nCTI0NGIsMzQ0YgorCS5sbG9uZwkyNDViLDM0NWIKIAkubGxvbmcJMjNiLDEyM2IKIAkubGxvbmcJNzNiLDE3M2IKIAkubGxvbmcJNDRiLDE0NGIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYyBiL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYwppbmRleCA3ZTg4NjViLi5lNjQwMTc1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCkBAIC0xMTIsNyArMTEyLDggQEAKIAogdm9pZCBkb19sd3N5bmNfZml4dXBzKHVuc2lnbmVkIGxvbmcgdmFsdWUsIHZvaWQgKmZpeHVwX3N0YXJ0LCB2b2lkICpmaXh1cF9lbmQpCiB7Ci0JdW5zaWduZWQgaW50ICpzdGFydCwgKmVuZCwgKmRlc3Q7CisJbG9uZyAqc3RhcnQsICplbmQ7CisJdW5zaWduZWQgaW50ICpkZXN0OwogCiAJaWYgKCEodmFsdWUgJiBDUFVfRlRSX0xXU1lOQykpCiAJCXJldHVybiA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jIGIvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYwppbmRleCAwOGRmYThlLi42NWFiZmNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMKQEAgLTg0LDggKzg0LDggQEAKIAkgKiB2ZWN0b3JzIGFuZCB0aGUga2VybmVsIGxpdmUgaW4gcmVhbC1tb2RlLgogCSAqLwogCi0gICAgICAgIG10c3ByKFNQUk5fRENDUiwgMHhGMDAwMDAwMCk7CS8qIDUxMiBNQiBvZiBkYXRhIHNwYWNlIGF0IDB4MC4gKi8KLSAgICAgICAgbXRzcHIoU1BSTl9JQ0NSLCAweEYwMDAwMDAwKTsJLyogNTEyIE1CIG9mIGluc3RyLiBzcGFjZSBhdCAweDAuICovCisgICAgICAgIG10c3ByKFNQUk5fRENDUiwgMHhGRkZGMDAwMCk7CS8qIDJHQnl0ZSBvZiBkYXRhIHNwYWNlIGF0IDB4MC4gKi8KKyAgICAgICAgbXRzcHIoU1BSTl9JQ0NSLCAweEZGRkYwMDAwKTsJLyogMkdCeXRlIG9mIGluc3RyLiBzcGFjZSBhdCAweDAuICovCiB9CiAKICNkZWZpbmUgTEFSR0VfUEFHRV9TSVpFXzE2TQkoMTw8MjQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCmluZGV4IDA1NmQyM2EuLjc4NGE0MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jCkBAIC0zNyw3ICszNyw3IEBACiAKICNkZWZpbmUgSFBURV9MT0NLX0JJVCAzCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmF0aXZlX3RsYmllX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobmF0aXZlX3RsYmllX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX190bGJpZSh1bnNpZ25lZCBsb25nIHZhLCBpbnQgcHNpemUsIGludCBzc2l6ZSkKIHsKQEAgLTEwNCw3ICsxMDQsNyBAQAogCWlmICh1c2VfbG9jYWwpCiAJCXVzZV9sb2NhbCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS50bGJpZWw7CiAJaWYgKGxvY2tfdGxiaWUgJiYgIXVzZV9sb2NhbCkKLQkJc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJCXJhd19zcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKIAlhc20gdm9sYXRpbGUoInB0ZXN5bmMiOiA6IDoibWVtb3J5Iik7CiAJaWYgKHVzZV9sb2NhbCkgewogCQlfX3RsYmllbCh2YSwgcHNpemUsIHNzaXplKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogCQlhc20gdm9sYXRpbGUoImVpZWlvOyB0bGJzeW5jOyBwdGVzeW5jIjogOiA6Im1lbW9yeSIpOwogCX0KIAlpZiAobG9ja190bGJpZSAmJiAhdXNlX2xvY2FsKQotCQlzcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9sb2NrX2hwdGUoc3RydWN0IGhhc2hfcHRlICpocHRlcCkKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXVuc2lnbmVkIGxvbmcgKndvcmQgPSAmaHB0ZXAtPnY7CiAKIAl3aGlsZSAoMSkgewotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSFBURV9MT0NLX0JJVCwgd29yZCkpCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKEhQVEVfTE9DS19CSVQsIHdvcmQpKQogCQkJYnJlYWs7CiAJCXdoaWxlKHRlc3RfYml0KEhQVEVfTE9DS19CSVQsIHdvcmQpKQogCQkJY3B1X3JlbGF4KCk7CkBAIC0xMzMsOCArMTMzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nICp3b3JkID0gJmhwdGVwLT52OwogCi0JYXNtIHZvbGF0aWxlKCJsd3N5bmMiOjo6Im1lbW9yeSIpOwotCWNsZWFyX2JpdChIUFRFX0xPQ0tfQklULCB3b3JkKTsKKwljbGVhcl9iaXRfdW5sb2NrKEhQVEVfTE9DS19CSVQsIHdvcmQpOwogfQogCiBzdGF0aWMgbG9uZyBuYXRpdmVfaHB0ZV9pbnNlcnQodW5zaWduZWQgbG9uZyBocHRlX2dyb3VwLCB1bnNpZ25lZCBsb25nIHZhLApAQCAtNDM0LDcgKzQzMyw3IEBACiAJLyogd2UgdGFrZSB0aGUgdGxiaWUgbG9jayBhbmQgaG9sZCBpdC4gIFNvbWUgaGFyZHdhcmUgd2lsbAogCSAqIGRlYWRsb2NrIGlmIHdlIHRyeSB0byB0bGJpZSBmcm9tIHR3byBwcm9jZXNzb3JzIGF0IG9uY2UuCiAJICovCi0Jc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogCiAJc2xvdHMgPSBwdGVnX2NvdW50ICogSFBURVNfUEVSX0dST1VQOwogCkBAIC00NTgsNyArNDU3LDcgQEAKIAl9CiAKIAlhc20gdm9sYXRpbGUoImVpZWlvOyB0bGJzeW5jOyBwdGVzeW5jIjo6OiJtZW1vcnkiKTsKLQlzcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOworCXJhd19zcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtNTIxLDcgKzUyMCw3IEBACiAJCWludCBsb2NrX3RsYmllID0gIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0xPQ0tMRVNTX1RMQklFKTsKIAogCQlpZiAobG9ja190bGJpZSkKLQkJCXNwaW5fbG9jaygmbmF0aXZlX3RsYmllX2xvY2spOworCQkJcmF3X3NwaW5fbG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogCiAJCWFzbSB2b2xhdGlsZSgicHRlc3luYyI6OjoibWVtb3J5Iik7CiAJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewpAQCAtNTM2LDcgKzUzNSw3IEBACiAJCWFzbSB2b2xhdGlsZSgiZWllaW87IHRsYnN5bmM7IHB0ZXN5bmMiOjo6Im1lbW9yeSIpOwogCiAJCWlmIChsb2NrX3RsYmllKQotCQkJc3Bpbl91bmxvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwkJCXJhd19zcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogCX0KIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYwppbmRleCBiOTEwZDM3Li41MTYyMmRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobW11X2NvbnRleHRfbG9jayk7Ci1zdGF0aWMgREVGSU5FX0lEUihtbXVfY29udGV4dF9pZHIpOworc3RhdGljIERFRklORV9JREEobW11X2NvbnRleHRfaWRhKTsKIAogLyoKICAqIFRoZSBwcm90by1WU0lEIHNwYWNlIGhhcyAyXjM1IC0gMSBzZWdtZW50cyBhdmFpbGFibGUgZm9yIHVzZXIgbWFwcGluZ3MuCkBAIC0zOSwxMSArMzksMTEgQEAKIAlpbnQgZXJyOwogCiBhZ2FpbjoKLQlpZiAoIWlkcl9wcmVfZ2V0KCZtbXVfY29udGV4dF9pZHIsIEdGUF9LRVJORUwpKQorCWlmICghaWRhX3ByZV9nZXQoJm1tdV9jb250ZXh0X2lkYSwgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKLQllcnIgPSBpZHJfZ2V0X25ld19hYm92ZSgmbW11X2NvbnRleHRfaWRyLCBOVUxMLCAxLCAmaW5kZXgpOworCWVyciA9IGlkYV9nZXRfbmV3X2Fib3ZlKCZtbXVfY29udGV4dF9pZGEsIDEsICZpbmRleCk7CiAJc3Bpbl91bmxvY2soJm1tdV9jb250ZXh0X2xvY2spOwogCiAJaWYgKGVyciA9PSAtRUFHQUlOKQpAQCAtNTMsNyArNTMsNyBAQAogCiAJaWYgKGluZGV4ID4gTUFYX0NPTlRFWFQpIHsKIAkJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKLQkJaWRyX3JlbW92ZSgmbW11X2NvbnRleHRfaWRyLCBpbmRleCk7CisJCWlkYV9yZW1vdmUoJm1tdV9jb250ZXh0X2lkYSwgaW5kZXgpOwogCQlzcGluX3VubG9jaygmbW11X2NvbnRleHRfbG9jayk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTg1LDcgKzg1LDcgQEAKIHZvaWQgX19kZXN0cm95X2NvbnRleHQoaW50IGNvbnRleHRfaWQpCiB7CiAJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKLQlpZHJfcmVtb3ZlKCZtbXVfY29udGV4dF9pZHIsIGNvbnRleHRfaWQpOworCWlkYV9yZW1vdmUoJm1tdV9jb250ZXh0X2lkYSwgY29udGV4dF9pZCk7CiAJc3Bpbl91bmxvY2soJm1tdV9jb250ZXh0X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19kZXN0cm95X2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCmluZGV4IDEwNDRhNjMuLmRiYzY5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKQEAgLTU2LDcgKzU2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpjb250ZXh0X21hcDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpzdGFsZV9tYXBbTlJfQ1BVU107CiBzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqKmNvbnRleHRfbW07Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbnRleHRfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb250ZXh0X2xvY2spOwogCiAjZGVmaW5lIENUWF9NQVBfU0laRQlcCiAJKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIChsYXN0X2NvbnRleHQgLyBCSVRTX1BFUl9MT05HICsgMSkpCkBAIC0xMjEsOSArMTIxLDkgQEAKIAkvKiBUaGlzIHdpbGwgaGFwcGVuIGlmIHlvdSBoYXZlIG1vcmUgQ1BVcyB0aGFuIGF2YWlsYWJsZSBjb250ZXh0cywKIAkgKiBhbGwgd2UgY2FuIGRvIGhlcmUgaXMgd2FpdCBhIGJpdCBhbmQgdHJ5IGFnYWluCiAJICovCi0Jc3Bpbl91bmxvY2soJmNvbnRleHRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZjb250ZXh0X2xvY2spOwogCWNwdV9yZWxheCgpOwotCXNwaW5fbG9jaygmY29udGV4dF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOwogCiAJLyogVGhpcyB3aWxsIGNhdXNlIHRoZSBjYWxsZXIgdG8gdHJ5IGFnYWluICovCiAJcmV0dXJuIE1NVV9OT19DT05URVhUOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJdW5zaWduZWQgbG9uZyAqbWFwOwogCiAJLyogTm8gbG9ja2xlc3MgZmFzdCBwYXRoIC4uIHlldCAqLwotCXNwaW5fbG9jaygmY29udGV4dF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOwogCiAJcHJfaGFyZCgiWyVkXSBhY3RpdmF0aW5nIGNvbnRleHQgZm9yIG1tIEAlcCwgYWN0aXZlPSVkLCBpZD0lZCIsCiAJCWNwdSwgbmV4dCwgbmV4dC0+Y29udGV4dC5hY3RpdmUsIG5leHQtPmNvbnRleHQuaWQpOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJLyogRmxpY2sgdGhlIE1NVSBhbmQgcmVsZWFzZSBsb2NrICovCiAJcHJfaGFyZGNvbnQoIiAtPiAlZFxuIiwgaWQpOwogCXNldF9jb250ZXh0KGlkLCBuZXh0LT5wZ2QpOwotCXNwaW5fdW5sb2NrKCZjb250ZXh0X2xvY2spOworCXJhd19zcGluX3VubG9jaygmY29udGV4dF9sb2NrKTsKIH0KIAogLyoKQEAgLTMwNyw3ICszMDcsNyBAQAogCiAJV0FSTl9PTihtbS0+Y29udGV4dC5hY3RpdmUgIT0gMCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29udGV4dF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKIAlpZCA9IG1tLT5jb250ZXh0LmlkOwogCWlmIChpZCAhPSBNTVVfTk9fQ09OVEVYVCkgewogCQlfX2NsZWFyX2JpdChpZCwgY29udGV4dF9tYXApOwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCWNvbnRleHRfbW1baWRdID0gTlVMTDsKIAkJbnJfZnJlZV9jb250ZXh0cysrOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29udGV4dF9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCmluZGV4IGYyODgyNzkuLjhiMDRjNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBMb3cgbGV2ZSBUTEIgbWlzcyBoYW5kbGVycyBmb3IgQm9vazNFCisgKiAgTG93IGxldmVsIFRMQiBtaXNzIGhhbmRsZXJzIGZvciBCb29rM0UKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkKICAqICAgICAgQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCmluZGV4IDJmYmM2ODAuLmU4MWQ1ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfU01QCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGxiaXZheF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRsYml2YXhfbG9jayk7CiAKIHN0YXRpYyBpbnQgbW1faXNfY29yZV9sb2NhbChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKQEAgLTIzMiwxMCArMjMyLDEwIEBACiAJCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9VU0VfVExCSVZBWF9CQ0FTVCkpIHsKIAkJCWludCBsb2NrID0gbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTCk7CiAJCQlpZiAobG9jaykKLQkJCQlzcGluX2xvY2soJnRsYml2YXhfbG9jayk7CisJCQkJcmF3X3NwaW5fbG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCV90bGJpdmF4X2JjYXN0KHZtYWRkciwgcGlkLCB0c2l6ZSwgaW5kKTsKIAkJCWlmIChsb2NrKQotCQkJCXNwaW5fdW5sb2NrKCZ0bGJpdmF4X2xvY2spOworCQkJCXJhd19zcGluX3VubG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCWdvdG8gYmFpbDsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCB0bGJfZmx1c2hfcGFyYW0gcCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9jbG9jay5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKaW5kZXggODQ1NDRkMC4uNGM0MjI0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKQEAgLTY5OCw4ICs2OTgsNyBAQAogCS5jbGtfZ2V0X3BhcmVudAkJPSBOVUxMLAogfTsKIAotc3RhdGljIGludAotbXBjNTEyMV9jbGtfaW5pdCh2b2lkKQoraW50IF9faW5pdCBtcGM1MTIxX2Nsa19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIApAQCAtNzI0LDYgKzcyMywzIEBACiAJY2xrX2Z1bmN0aW9ucyA9IG1wYzUxMjFfY2xrX2Z1bmN0aW9uczsKIAlyZXR1cm4gMDsKIH0KLQotCi1hcmNoX2luaXRjYWxsKG1wYzUxMjFfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwppbmRleCA0NDFhYmM0Li5lZTZhZTEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwpAQCAtNjQsOCArNjQsOSBAQAogCS5uYW1lCQkJPSAiTVBDNTEyMSBBRFMiLAogCS5wcm9iZQkJCT0gbXBjNTEyMV9hZHNfcHJvYmUsCiAJLnNldHVwX2FyY2gJCT0gbXBjNTEyMV9hZHNfc2V0dXBfYXJjaCwKLQkuaW5pdAkJCT0gbXBjNTEyeF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMsCisJLmluaXQJCQk9IG1wYzUxMnhfaW5pdCwKIAkuaW5pdF9JUlEJCT0gbXBjNTEyMV9hZHNfaW5pdF9JUlEsCiAJLmdldF9pcnEJCT0gaXBpY19nZXRfaXJxLAogCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5yZXN0YXJ0CQk9IG1wYzUxMnhfcmVzdGFydCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYwppbmRleCBkYTliMjBhLi40ZWNmNGNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcGxkX3BpYyA9IHsKLQkubmFtZSA9ICIgQ1BMRCBQSUMgIiwKKwkubmFtZSA9ICJDUExEIFBJQyIsCiAJLm1hc2sgPSBjcGxkX21hc2tfaXJxLAogCS5hY2sgPSBjcGxkX21hc2tfaXJxLAogCS51bm1hc2sgPSBjcGxkX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMKaW5kZXggMjQ3OWRlOS4uYTZjMGUzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfZ2VuZXJpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2dlbmVyaWMuYwpAQCAtNTEsOCArNTEsOSBAQAogZGVmaW5lX21hY2hpbmUobXBjNTEyMV9nZW5lcmljKSB7CiAJLm5hbWUJCQk9ICJNUEM1MTIxIGdlbmVyaWMiLAogCS5wcm9iZQkJCT0gbXBjNTEyMV9nZW5lcmljX3Byb2JlLAotCS5pbml0CQkJPSBtcGM1MTJ4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcywKKwkuaW5pdAkJCT0gbXBjNTEyeF9pbml0LAogCS5pbml0X0lSUQkJPSBtcGM1MTJ4X2luaXRfSVJRLAogCS5nZXRfaXJxCQk9IGlwaWNfZ2V0X2lycSwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucmVzdGFydAkJPSBtcGM1MTJ4X3Jlc3RhcnQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTJ4LmgKaW5kZXggMjJhNTM1Mi4uYjJkYWNhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeC5oCkBAIC0xMiw1ICsxMiw4IEBACiAjaWZuZGVmIF9fTVBDNTEyWF9IX18KICNkZWZpbmUgX19NUEM1MTJYX0hfXwogZXh0ZXJuIHZvaWQgX19pbml0IG1wYzUxMnhfaW5pdF9JUlEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbXBjNTEyeF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgbXBjNTEyMV9jbGtfaW5pdCh2b2lkKTsKIHZvaWQgX19pbml0IG1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgbXBjNTEyeF9yZXN0YXJ0KGNoYXIgKmNtZCk7CiAjZW5kaWYJCQkJLyogX19NUEM1MTJYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYwppbmRleCA0MzRkNjgzLi5iN2Y1MThhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYwpAQCAtMjEsOSArMjEsMzggQEAKICNpbmNsdWRlIDxhc20vaXBpYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbXBjNTEyMS5oPgogCiAjaW5jbHVkZSAibXBjNTEyeC5oIgogCitzdGF0aWMgc3RydWN0IG1wYzUxMnhfcmVzZXRfbW9kdWxlIF9faW9tZW0gKnJlc2V0X21vZHVsZV9iYXNlOworCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjNTEyeF9yZXN0YXJ0X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1wYzUxMjEtcmVzZXQiKTsKKwlpZiAoIW5wKQorCQlyZXR1cm47CisKKwlyZXNldF9tb2R1bGVfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlvZl9ub2RlX3B1dChucCk7Cit9CisKK3ZvaWQgbXBjNTEyeF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlpZiAocmVzZXRfbW9kdWxlX2Jhc2UpIHsKKwkJLyogRW5hYmxlIHNvZnR3YXJlIHJlc2V0ICJSU1RFIiAqLworCQlvdXRfYmUzMigmcmVzZXRfbW9kdWxlX2Jhc2UtPnJwciwgMHg1MjUzNTQ0NSk7CisJCS8qIFNldCBzb2Z0d2FyZSBoYXJkIHJlc2V0ICovCisJCW91dF9iZTMyKCZyZXNldF9tb2R1bGVfYmFzZS0+cmNyLCAweDIpOworCX0gZWxzZSB7CisJCXByX2VycigiUmVzdGFydCBtb2R1bGUgbm90IG1hcHBlZC5cbiIpOworCX0KKwlmb3IgKDs7KQorCQk7Cit9CisKIHZvaWQgX19pbml0IG1wYzUxMnhfaW5pdF9JUlEodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpAQCAtNTMsOCArODIsMjIgQEAKIAogdm9pZCBfX2luaXQgbXBjNTEyeF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCiAJaWYgKG9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBvZl9idXNfaWRzLCBOVUxMKSkKIAkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6ICIKIAkJCSJFcnJvciB3aGlsZSBwcm9iaW5nIG9mX3BsYXRmb3JtIGJ1c1xuIik7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbXBjNTEyMS1uZmMiKTsKKwlpZiAobnApIHsKKwkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgTlVMTCwgTlVMTCk7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CiB9CiAKK3ZvaWQgX19pbml0IG1wYzUxMnhfaW5pdCh2b2lkKQoreworCW1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKCk7CisJbXBjNTEyMV9jbGtfaW5pdCgpOworCW1wYzUxMnhfcmVzdGFydF9pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCmluZGV4IGNjMjljMGYuLjA0ZDEwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCkBAIC0zMDIsMTEgKzMwMiwxNCBAQAogCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wscmFwaWRpby1kZWx0YSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1ndXRzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdwaW8tbGVkcyIsIH0sCiAJe30sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtcGM4NXh4X3B1Ymxpc2hfZGV2aWNlcyh2b2lkKQogeworCWlmIChtYWNoaW5lX2lzKG1wYzg1NjhfbWRzKSkKKwkJc2ltcGxlX2dwaW9jaGlwX2luaXQoImZzbCxtcGM4NTY4bWRzLWJjc3ItZ3BpbyIpOwogCWlmIChtYWNoaW5lX2lzKG1wYzg1NjlfbWRzKSkKIAkJc2ltcGxlX2dwaW9jaGlwX2luaXQoImZzbCxtcGM4NTY5bWRzLWJjc3ItZ3BpbyIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCmluZGV4IGU1ZGE1ZjYuLjQyZTg3ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzb2NyYXRlc19mcGdhX3BpY19jaGlwID0gewotCS5uYW1lCQk9ICIgRlBHQS1QSUMgIiwKKwkubmFtZQkJPSAiRlBHQS1QSUMiLAogCS5hY2sJCT0gc29jcmF0ZXNfZnBnYV9waWNfYWNrLAogCS5tYXNrICAgICAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2ssCiAJLm1hc2tfYWNrICAgICAgID0gc29jcmF0ZXNfZnBnYV9waWNfbWFza19hY2ssCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwppbmRleCBmNTU5OTE4Li5iYzMzZDE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXB2aWQgPSBtZnNwcihTUFJOX1BWUik7CiAJc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAotCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFJQQyBFbGVjdHJvbmljcyBTVHggXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBSUEMgRWxlY3Ryb25pY3MgU1R4XG4iKTsKIAlzZXFfcHJpbnRmKG0sICJQVlJcdFx0OiAweCV4XG4iLCBwdmlkKTsKIAlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3hlc19tcGM4NXh4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgveGVzX21wYzg1eHguYwppbmRleCAxYjQyNjA1Li4wMTI1NjA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgveGVzX21wYzg1eHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgveGVzX21wYzg1eHguYwpAQCAtODAsOCArODAsOCBAQAogCXByaW50ayhLRVJOX0lORk8gInhlc19tcGM4NXh4OiBFbmFibGluZyBMMiBhcyBjYWNoZVxuIik7CiAKIAljdGwgPSBNUEM4NXh4X0wyQ1RMX0wyRSB8IE1QQzg1eHhfTDJDVExfTDJJOwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1QQzg1NDAiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1QQzg1NjAiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTQwIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTYwIikpCiAJCS8qCiAJCSAqIEFzc3VtZSBMMiBTUkFNIGlzIHVzZWQgZnVsbHkgZm9yIGNhY2hlLCBzbyBzZXQKIAkJICogTDJCTEtTWiAoYml0cyA0OjUpIHRvIG1hdGNoIEwyU0laIChiaXRzIDI6MykuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9odGFiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9odGFiLmMKaW5kZXggMzViMWVjNC4uMjUxNmMxYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaHRhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2h0YWIuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBEQkdfTE9XKGZtdC4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmVhdF9odGFiX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYmVhdF9odGFiX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZWF0X3JlYWRfbWFzayh1bnNpZ25lZCBocHRlX2dyb3VwKQogewpAQCAtMTE0LDE4ICsxMTQsMTggQEAKIAlpZiAocmZsYWdzICYgX1BBR0VfTk9fQ0FDSEUpCiAJCWhwdGVfciAmPSB+X1BBR0VfQ09IRVJFTlQ7CiAKLQlzcGluX2xvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CiAJbHBhcl9yYyA9IGJlYXRfcmVhZF9tYXNrKGhwdGVfZ3JvdXApOwogCWlmIChscGFyX3JjID09IDApIHsKIAkJaWYgKCEodmZsYWdzICYgSFBURV9WX0JPTFRFRCkpCiAJCQlEQkdfTE9XKCIgZnVsbFxuIik7Ci0JCXNwaW5fdW5sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJbHBhcl9yYyA9IGJlYXRfaW5zZXJ0X2h0YWJfZW50cnkoMCwgaHB0ZV9ncm91cCwgbHBhcl9yYyA8PCA0OCwKIAkJaHB0ZV92LCBocHRlX3IsICZzbG90KTsKLQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCiAJLyoKIAkgKiBTaW5jZSB3ZSB0cnkgYW5kIGlvcmVtYXAgUEhCcyB3ZSBkb24ndCBvd24sIHRoZSBwdGUgaW5zZXJ0CkBAIC0xOTgsMTcgKzE5OCwxNyBAQAogCQkiYXZwbnY9JTAxNmx4LCBzbG90PSUwMTZseCwgcHNpemU6ICVkLCBuZXdwcCAlMDE2bHggLi4uICIsCiAJCXdhbnRfdiAmIEhQVEVfVl9BVlBOLCBzbG90LCBwc2l6ZSwgbmV3cHApOwogCi0Jc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmYmVhdF9odGFiX2xvY2spOwogCWR1bW15MCA9IGJlYXRfbHBhcl9ocHRlX2dldHdvcmQwKHNsb3QpOwogCWlmICgoZHVtbXkwICYgfjB4N0ZVTCkgIT0gKHdhbnRfdiAmIH4weDdGVUwpKSB7CiAJCURCR19MT1coIm5vdCBmb3VuZCAhXG4iKTsKLQkJc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZiZWF0X2h0YWJfbG9jayk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlscGFyX3JjID0gYmVhdF93cml0ZV9odGFiX2VudHJ5KDAsIHNsb3QsIDAsIG5ld3BwLCAwLCA3LCAmZHVtbXkwLAogCQkJCQkmZHVtbXkxKTsKLQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCWlmIChscGFyX3JjICE9IDAgfHwgZHVtbXkwID09IDApIHsKIAkJREJHX0xPVygibm90IGZvdW5kICFcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0yNjIsMTMgKzI2MiwxMyBAQAogCXZzaWQgPSBnZXRfa2VybmVsX3ZzaWQoZWEsIE1NVV9TRUdTSVpFXzI1Nk0pOwogCXZhID0gKHZzaWQgPDwgMjgpIHwgKGVhICYgMHgwZmZmZmZmZik7CiAKLQlzcGluX2xvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CiAJc2xvdCA9IGJlYXRfbHBhcl9ocHRlX2ZpbmQodmEsIHBzaXplKTsKIAlCVUdfT04oc2xvdCA9PSAtMSk7CiAKIAlscGFyX3JjID0gYmVhdF93cml0ZV9odGFiX2VudHJ5KDAsIHNsb3QsIDAsIG5ld3BwLCAwLCA3LAogCQkmZHVtbXkwLCAmZHVtbXkxKTsKLQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCiAJQlVHX09OKGxwYXJfcmMgIT0gMCk7CiB9CkBAIC0yODUsMTggKzI4NSwxOCBAQAogCQlzbG90LCB2YSwgcHNpemUsIGxvY2FsKTsKIAl3YW50X3YgPSBocHRlX2VuY29kZV92KHZhLCBwc2l6ZSwgTU1VX1NFR1NJWkVfMjU2TSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmVhdF9odGFiX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CiAJZHVtbXkxID0gYmVhdF9scGFyX2hwdGVfZ2V0d29yZDAoc2xvdCk7CiAKIAlpZiAoKGR1bW15MSAmIH4weDdGVUwpICE9ICh3YW50X3YgJiB+MHg3RlVMKSkgewogCQlEQkdfTE9XKCJub3QgZm91bmQgIVxuIik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCiAJbHBhcl9yYyA9IGJlYXRfd3JpdGVfaHRhYl9lbnRyeSgwLCBzbG90LCAwLCAwLCBIUFRFX1ZfVkFMSUQsIDAsCiAJCSZkdW1teTEsICZkdW1teTIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CiAKIAlCVUdfT04obHBhcl9yYyAhPSAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmMKaW5kZXggMzYwNTJhOS4uNjgyYWY5NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJiZWF0X3dyYXBwZXIuaCIKIAogI2RlZmluZQlNQVhfSVJRUwlOUl9JUlFTCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJlYXRpY19pcnFfbWFza19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGJlYXRpY19pcnFfbWFza19sb2NrKTsKIHN0YXRpYyB1aW50NjRfdAliZWF0aWNfaXJxX21hc2tfZW5hYmxlWyhNQVhfSVJRUysyNTUpLzY0XTsKIHN0YXRpYyB1aW50NjRfdAliZWF0aWNfaXJxX21hc2tfYWNrWyhNQVhfSVJRUysyNTUpLzY0XTsKIApAQCAtNjUsMzAgKzY1LDMwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIAliZWF0aWNfaXJxX21hc2tfZW5hYmxlW2lycV9wbHVnLzY0XSAmPSB+KDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKSk7CiAJYmVhdGljX3VwZGF0ZV9pcnFfbWFzayhpcnFfcGx1Zyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYmVhdGljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycV9wbHVnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiAJYmVhdGljX2lycV9tYXNrX2VuYWJsZVtpcnFfcGx1Zy82NF0gfD0gMVVMIDw8ICg2MyAtIChpcnFfcGx1ZyU2NCkpOwogCWJlYXRpY191cGRhdGVfaXJxX21hc2soaXJxX3BsdWcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlYXRpY19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnFfcGx1ZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogCWJlYXRpY19pcnFfbWFza19hY2tbaXJxX3BsdWcvNjRdICY9IH4oMVVMIDw8ICg2MyAtIChpcnFfcGx1ZyU2NCkpKTsKIAliZWF0aWNfdXBkYXRlX2lycV9tYXNrKGlycV9wbHVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBiZWF0aWNfZW5kX2lycSh1bnNpZ25lZCBpbnQgaXJxX3BsdWcpCkBAIC0xMDMsMTQgKzEwMywxNCBAQAogCiAJCXByaW50ayhLRVJOX0VSUiAiSVJRIG92ZXItZG93bmNvdW50ZWQsIHBsdWcgJWRcbiIsIGlycV9wbHVnKTsKIAl9Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogCWJlYXRpY19pcnFfbWFza19hY2tbaXJxX3BsdWcvNjRdIHw9IDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKTsKIAliZWF0aWNfdXBkYXRlX2lycV9tYXNrKGlycV9wbHVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJlYXRpY19waWMgPSB7Ci0JLm5hbWUgPSAiIENFTEwtQkVBVCAiLAorCS5uYW1lID0gIkNFTEwtQkVBVCIsCiAJLnVubWFzayA9IGJlYXRpY191bm1hc2tfaXJxLAogCS5tYXNrID0gYmVhdGljX21hc2tfaXJxLAogCS5lb2kgPSBiZWF0aWNfZW5kX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYwppbmRleCBkY2RkYWE1Li5mNzVhNGRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3Bvd2VyYnV0dG9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9wb3dlcmJ1dHRvbi5jCkBAIC00OCw3ICs0OCw3IEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIklCTSxDQlBMVVMtMS4wIikpIHsKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiSUJNLENCUExVUy0xLjAiKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBOb3QgYSBjZWxsIGJsYWRlLlxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwppbmRleCA2ODI5Y2Y3Li4xMGViMWE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCkBAIC04OCw3ICs4OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaWljX2NoaXAgPSB7Ci0JLm5hbWUgPSAiIENFTEwtSUlDICIsCisJLm5hbWUgPSAiQ0VMTC1JSUMiLAogCS5tYXNrID0gaWljX21hc2ssCiAJLnVubWFzayA9IGlpY191bm1hc2ssCiAJLmVvaSA9IGlpY19lb2ksCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlpY19pb2V4Y19jaGlwID0gewotCS5uYW1lID0gIiBDRUxMLUlPRVgiLAorCS5uYW1lID0gIkNFTEwtSU9FWCIsCiAJLm1hc2sgPSBpaWNfbWFzaywKIAkudW5tYXNrID0gaWljX3VubWFzaywKIAkuZW9pID0gaWljX2lvZXhjX2VvaSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYwppbmRleCA1ZTBhMTkxLi42MDhmZDJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3Jhcy5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIHsKIAlzdHJ1Y3QgY2JlX3BtZF9yZWdzIF9faW9tZW0gKnJlZ3M7CiAKLQlzeXNyZXNldF9oYWNrID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJJQk0sQ0JQTFVTLTEuMCIpOworCXN5c3Jlc2V0X2hhY2sgPSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIklCTSxDQlBMVVMtMS4wIik7CiAJaWYgKCFzeXNyZXNldF9oYWNrKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKaW5kZXggMDEyNDRmMi4uNTg3NmU4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzcGlkZXJfcGljID0gewotCS5uYW1lID0gIiBTUElERVIgICAiLAorCS5uYW1lID0gIlNQSURFUiIsCiAJLnVubWFzayA9IHNwaWRlcl91bm1hc2tfaXJxLAogCS5tYXNrID0gc3BpZGVyX21hc2tfaXJxLAogCS5hY2sgPSBzcGlkZXJfYWNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfbWFuYWdlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X21hbmFnZS5jCmluZGV4IDRjNTA2YzEuLjg5MWYxOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfbWFuYWdlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9tYW5hZ2UuYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJCQljb250aW51ZTsKIAkJdmljX2hhbmRsZXMgPSBvZl9nZXRfcHJvcGVydHkoc3B1X2RuLCAidmljaW5pdHkiLCAmbGVucCk7CiAJCWZvciAoaT0wOyBpIDwgKGxlbnAgLyBzaXplb2YocGhhbmRsZSkpOyBpKyspIHsKLQkJCWlmICh2aWNfaGFuZGxlc1tpXSA9PSB0YXJnZXQtPmxpbnV4X3BoYW5kbGUpCisJCQlpZiAodmljX2hhbmRsZXNbaV0gPT0gdGFyZ2V0LT5waGFuZGxlKQogCQkJCXJldHVybiBzcHU7CiAJCX0KIAl9CkBAIC00OTksNyArNDk5LDcgQEAKIAogCQkJaWYgKHN0cmNtcChuYW1lLCAic3BlIikgPT0gMCkgewogCQkJCXNwdSA9IGRldm5vZGVfc3B1KGNiZSwgdmljX2RuKTsKLQkJCQlhdm9pZF9waCA9IGxhc3Rfc3B1X2RuLT5saW51eF9waGFuZGxlOworCQkJCWF2b2lkX3BoID0gbGFzdF9zcHVfZG4tPnBoYW5kbGU7CiAJCQl9IGVsc2UgewogCQkJCS8qCiAJCQkJICogIm1pYy10bSIgYW5kICJiaWYwIiBub2RlcyBkbyBub3QgaGF2ZQpAQCAtNTE0LDcgKzUxNCw3IEBACiAJCQkJCWxhc3Rfc3B1LT5oYXNfbWVtX2FmZmluaXR5ID0gMTsKIAkJCQkJc3B1LT5oYXNfbWVtX2FmZmluaXR5ID0gMTsKIAkJCQl9Ci0JCQkJYXZvaWRfcGggPSB2aWNfZG4tPmxpbnV4X3BoYW5kbGU7CisJCQkJYXZvaWRfcGggPSB2aWNfZG4tPnBoYW5kbGU7CiAJCQl9CiAKIAkJCWxpc3RfYWRkX3RhaWwoJnNwdS0+YWZmX2xpc3QsICZsYXN0X3NwdS0+YWZmX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9mc2xfdWxpMTU3NS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9mc2xfdWxpMTU3NS5jCmluZGV4IGZkMjNhMWQuLjhiMGMyMDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZnNsX3VsaTE1NzUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2ZzbF91bGkxNTc1LmMKQEAgLTIyMiw2ICsyMjIsNyBAQAogCWludCBpOwogCXU4ICpkdW1teTsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gZGV2LT5idXM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJcmVzb3VyY2Vfc2l6ZV90IGVuZCA9IDA7CiAKIAlmb3IgKGkgPSBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKzM7IGkrKykgewpAQCAtMjMwLDEzICsyMzEsMTIgQEAKIAkJCWVuZCA9IHBjaV9yZXNvdXJjZV9lbmQoZGV2LCBpKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJaWYgKChidXMtPnJlc291cmNlW2ldKSAmJgotCQkJKGJ1cy0+cmVzb3VyY2VbaV0tPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCQlpZiAoYnVzLT5yZXNvdXJjZVtpXS0+ZW5kID09IGVuZCkKLQkJCQlkdW1teSA9IGlvcmVtYXAoYnVzLT5yZXNvdXJjZVtpXS0+c3RhcnQsIDB4NCk7CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaSkgeworCQlpZiAocmVzICYmIHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgeworCQkJaWYgKHJlcy0+ZW5kID09IGVuZCkKKwkJCQlkdW1teSA9IGlvcmVtYXAocmVzLT5zdGFydCwgMHg0KTsKIAkJCWVsc2UKLQkJCQlkdW1teSA9IGlvcmVtYXAoYnVzLT5yZXNvdXJjZVtpXS0+ZW5kIC0gMywgMHg0KTsKKwkJCQlkdW1teSA9IGlvcmVtYXAocmVzLT5lbmQgLSAzLCAweDQpOwogCQkJaWYgKGR1bW15KSB7CiAJCQkJaW5fOChkdW1teSk7CiAJCQkJaW91bm1hcChkdW1teSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKaW5kZXggODZjNGIyOS4uYmE0NDZiZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwpAQCAtMjczLDcgKzI3Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXNlcmllc19waWMgPSB7Ci0JLm5hbWUJPSAiaVNlcmllcyBpcnEgY29udHJvbGxlciIsCisJLm5hbWUJCT0gImlTZXJpZXMiLAogCS5zdGFydHVwCT0gaXNlcmllc19zdGFydHVwX0lSUSwKIAkuc2h1dGRvd24JPSBpc2VyaWVzX3NodXRkb3duX0lSUSwKIAkudW5tYXNrCQk9IGlzZXJpZXNfZW5hYmxlX0lSUSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcHJvYy5jCmluZGV4IDkxZjRjNmMuLjA2NzYzNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Byb2MuYwpAQCAtODUsNyArODUsNyBAQAogCiAJCXNlcV9wcmludGYobSwgIiAgdGl0YW4gZWxhcHNlZCA9ICVsdSB1U2VjXG4iLCB0aXRhbl91c2VjKTsKIAkJc2VxX3ByaW50ZihtLCAiICB0YiBlbGFwc2VkICAgID0gJWx1IHRpY2tzXG4iLCB0Yl90aWNrcyk7Ci0JCXNlcV9wcmludGYobSwgIiAgdGl0YW4gamlmZmllcyA9ICVsdS4lMDRsdSBcbiIsIHRpdGFuX2ppZmZpZXMsCisJCXNlcV9wcmludGYobSwgIiAgdGl0YW4gamlmZmllcyA9ICVsdS4lMDRsdVxuIiwgdGl0YW5famlmZmllcywKIAkJCSAgIHRpdGFuX2ppZmZfcmVtX3VzZWMpOwogCQlzZXFfcHJpbnRmKG0sICIgIHRiIGppZmZpZXMgICAgPSAlbHUuJTA0bHVcbiIsIHRiX2ppZmZpZXMsCiAJCQkgICB0Yl9qaWZmX3JlbV91c2VjKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKaW5kZXggYTZjZDMzOS4uYjA4NjM0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQltZW1fYmxvY2tzID0gaVNlcmllc19wcm9jZXNzX0NvbmRvcl9tYWluc3RvcmVfdnBkKG1iX2FycmF5LAogCQkJCW1heF9lbnRyaWVzKTsKIAotCXByaW50aygiTWFpbnN0b3JlX1ZQRDogbnVtTWVtb3J5QmxvY2tzID0gJWxkIFxuIiwgbWVtX2Jsb2Nrcyk7CisJcHJpbnRrKCJNYWluc3RvcmVfVlBEOiBudW1NZW1vcnlCbG9ja3MgPSAlbGRcbiIsIG1lbV9ibG9ja3MpOwogCWZvciAoaSA9IDA7IGkgPCBtZW1fYmxvY2tzOyArK2kpIHsKIAkJcHJpbnRrKCJNYWluc3RvcmVfVlBEOiBibG9jayAlM2xkIGxvZ2ljYWwgY2h1bmtzICUwMTZseCAtICUwMTZseFxuIgogCQkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzIGNodW5rcyAlMDE2bHggLSAlMDE2bHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9jcHVmcmVxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9jcHVmcmVxLmMKaW5kZXggYmUyNTI3YS4uZDM1ZTA1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvY3B1ZnJlcS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2NwdWZyZXEuYwpAQCAtMzA0LDggKzMwNCw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBhc19jcHVmcmVxX2luaXQodm9pZCkKIHsKLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUEE2VC0xNjgyTSIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoInBhc2VtaSxwd3JmaWNpZW50IikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBBNlQtMTY4Mk0iKSAmJgorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJwYXNlbWkscHdyZmljaWVudCIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmcGFzX2NwdWZyZXFfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKaW5kZXggOWRkNzg5YS4uODRkN2ZkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKQEAgLTUzOSw3ICs1MzksNyBAQAogCQlpZiAobW9kZWwKIAkJICAgICYmIChzdHJjbXAobW9kZWwsICJpTWFjLDEiKSA9PSAwCiAJCQl8fCBzdHJjbXAobW9kZWwsICJQb3dlck1hYzEsMSIpID09IDApKSB7Ci0JCQlib290eF9wcmludGYoImlNYWMsMSBkZXRlY3RlZCwgc2h1dHRpbmcgZG93biBVU0IgXG4iKTsKKwkJCWJvb3R4X3ByaW50ZigiaU1hYywxIGRldGVjdGVkLCBzaHV0dGluZyBkb3duIFVTQlxuIik7CiAJCQlvdXRfbGUzMigodW5zaWduZWQgX19pb21lbSAqKTB4ODA4ODAwMDgsIDEpOwkvKiBYWFggKi8KIAkJfQogCX0KQEAgLTU1NCw3ICs1NTQsNyBAQAogCX0gZWxzZQogCQlzcGFjZSA9IGJpLT50b3RhbFBhcmFtc1NpemU7CiAKLQlib290eF9wcmludGYoIlRvdGFsIHNwYWNlIHVzZWQgYnkgcGFyYW1ldGVycyAmIHJhbWRpc2s6IDB4JXggXG4iLCBzcGFjZSk7CisJYm9vdHhfcHJpbnRmKCJUb3RhbCBzcGFjZSB1c2VkIGJ5IHBhcmFtZXRlcnMgJiByYW1kaXNrOiAweCV4XG4iLCBzcGFjZSk7CiAKIAkvKiBOZXcgQm9vdFggd2lsbCBoYXZlIGZsdXNoZWQgYWxsIFRMQnMgYW5kIGVudGVycyBrZXJuZWwgd2l0aAogCSAqIE1NVSBzd2l0Y2hlZCBPRkYsIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSB1c2VmdWwgYW55bW9yZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKaW5kZXggMDhkOTRlNC4uZDRmMTI3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKQEAgLTY1NywzMSArNjU3LDMxIEBACiAJY3VyX2ZyZXEgPSAoKnZhbHVlKSAvIDEwMDA7CiAKIAkvKiAgQ2hlY2sgZm9yIDc0NDdBIGJhc2VkIE1hY1JJU0MzICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSAmJgorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikgJiYKIAkgICAgb2ZfZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJkeW5hbWljLXBvd2VyLXN0ZXAiLCBOVUxMKSAmJgogCSAgICBQVlJfVkVSKG1mc3ByKFNQUk5fUFZSKSkgPT0gMHg4MDAzKSB7CiAJCXBtYWNfY3B1ZnJlcV9pbml0Xzc0NDdBKGNwdW5vZGUpOwogCS8qIENoZWNrIGZvciBvdGhlciBNYWNSSVNDMyBtYWNoaW5lcyAqLwotCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAotCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNSIpIHx8Ci0JCSAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAorCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNSIpIHx8CisJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSkgewogCQlwbWFjX2NwdWZyZXFfaW5pdF9NYWNSSVNDMyhjcHVub2RlKTsKIAkvKiBFbHNlIGNoZWNrIGZvciBpQm9vazIgNTAwLzYwMCAqLwotCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkgewogCQloaV9mcmVxID0gY3VyX2ZyZXE7CiAJCWxvd19mcmVxID0gNDAwMDAwOwogCQlzZXRfc3BlZWRfcHJvYyA9IHBtdV9zZXRfY3B1X3NwZWVkOwogCQlpc19wbXVfYmFzZWQgPSAxOwogCX0KIAkvKiBFbHNlIGNoZWNrIGZvciBUaVBiIDU1MCAqLwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywzIikgJiYgY3VyX2ZyZXEgPT0gNTUwMDAwKSB7CisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDMiKSAmJiBjdXJfZnJlcSA9PSA1NTAwMDApIHsKIAkJaGlfZnJlcSA9IGN1cl9mcmVxOwogCQlsb3dfZnJlcSA9IDUwMDAwMDsKIAkJc2V0X3NwZWVkX3Byb2MgPSBwbXVfc2V0X2NwdV9zcGVlZDsKIAkJaXNfcG11X2Jhc2VkID0gMTsKIAl9CiAJLyogRWxzZSBjaGVjayBmb3IgVGlQYiA0MDAgJiA1MDAgKi8KLQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKSB7CisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgewogCQkvKiBXZSBvbmx5IGtub3cgYWJvdXQgdGhlIDQwMCBNSHogYW5kIHRoZSA1MDBNaHogbW9kZWwKIAkJICogdGhleSBib3RoIGhhdmUgMzAwIE1IeiBhcyBsb3cgZnJlcXVlbmN5CiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwppbmRleCA3MDhjNzUxLi4zZWQyODhlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwpAQCAtMzk4LDExICszOTgsMTEgQEAKIAlpbnQgcmMgPSAtRU5PREVWOwogCiAJLyogQ2hlY2sgc3VwcG9ydGVkIHBsYXRmb3JtcyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM5LDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMSIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpCiAJCXVzZV92b2x0c19zbXUgPSAxOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMSwyIikpCisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzExLDIiKSkKIAkJdXNlX3ZvbHRzX3ZkbmFwID0gMTsKIAllbHNlCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNzI5LDkgKzcyOSw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQogCQlyYyA9IGc1X3BtNzJfY3B1ZnJlcV9pbml0KGNwdXMpOwogI2lmZGVmIENPTkZJR19QTUFDX1NNVQogCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKaW5kZXggZmJjOWJiZC4uOWUxYjlmZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKQEAgLTU5LDEwICs1OSwxMCBAQAogICogV2UgdXNlIGEgc2luZ2xlIGdsb2JhbCBsb2NrIHRvIHByb3RlY3QgYWNjZXNzZXMuIEVhY2ggZHJpdmVyIGhhcwogICogdG8gdGFrZSBjYXJlIG9mIGl0cyBvd24gbG9ja2luZwogICovCi1ERUZJTkVfU1BJTkxPQ0soZmVhdHVyZV9sb2NrKTsKK0RFRklORV9SQVdfU1BJTkxPQ0soZmVhdHVyZV9sb2NrKTsKIAotI2RlZmluZSBMT0NLKGZsYWdzKQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7Ci0jZGVmaW5lIFVOTE9DSyhmbGFncykJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisjZGVmaW5lIExPQ0soZmxhZ3MpCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisjZGVmaW5lIFVOTE9DSyhmbGFncykJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCiAKIC8qCkBAIC0yNDI2LDcgKzI0MjYsNyBAQAogCSAgICB9CiAJfQogCWZvcihpPTA7IGk8QVJSQVlfU0laRShwbWFjX21iX2RlZnMpOyBpKyspIHsKLQkgICAgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZShwbWFjX21iX2RlZnNbaV0ubW9kZWxfc3RyaW5nKSkgeworCSAgICBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKHBtYWNfbWJfZGVmc1tpXS5tb2RlbF9zdHJpbmcpKSB7CiAJCXBtYWNfbWIgPSBwbWFjX21iX2RlZnNbaV07CiAJCWdvdG8gZm91bmQ7CiAJICAgIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYwppbmRleCBjNmYwZjllLi44MGE1MjU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jCkBAIC04MCw3ICs4MCw3IEBACiBzdGF0aWMgaW50IGNvcmU5OV9iYW5rID0gMDsKIHN0YXRpYyBpbnQgbnZyYW1fcGFydGl0aW9uc1szXTsKIC8vIFhYWCBUdXJuIHRoYXQgaW50byBhIHNlbQotc3RhdGljIERFRklORV9TUElOTE9DSyhudl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG52X2xvY2spOwogCiBzdGF0aWMgaW50ICgqY29yZTk5X3dyaXRlX2JhbmspKGludCBiYW5rLCB1OCogZGF0YXMpOwogc3RhdGljIGludCAoKmNvcmU5OV9lcmFzZV9iYW5rKShpbnQgYmFuayk7CkBAIC0xNjUsMTAgKzE2NSwxMCBAQAogCXVuc2lnbmVkIGNoYXIgdmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOwogCW91dF84KG52cmFtX2FkZHIsIGFkZHIgPj4gNSk7CiAJdmFsID0gaW5fOCgmbnZyYW1fZGF0YVsoYWRkciAmIDB4MWYpIDw8IDRdKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiB2YWw7CiB9CkBAIC0xNzcsMTAgKzE3NywxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOwogCW91dF84KG52cmFtX2FkZHIsIGFkZHIgPj4gNSk7CiAJb3V0XzgoJm52cmFtX2RhdGFbKGFkZHIgJiAweDFmKSA8PCA0XSwgdmFsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52X2xvY2ssIGZsYWdzKTsKIH0KIAogCkBAIC00ODEsNyArNDgxLDcgQEAKIAlpZiAoIWlzX2NvcmVfOTkgfHwgIW52cmFtX2RhdGEgfHwgIW52cmFtX2ltYWdlKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOwogCWlmICghbWVtY21wKG52cmFtX2ltYWdlLCAodTgqKW52cmFtX2RhdGEgKyBjb3JlOTlfYmFuaypOVlJBTV9TSVpFLAogCQlOVlJBTV9TSVpFKSkKIAkJZ290byBiYWlsOwpAQCAtNTAzLDcgKzUwMyw3IEBACiAJCWlmIChjb3JlOTlfd3JpdGVfYmFuayhjb3JlOTlfYmFuaywgbnZyYW1faW1hZ2UpKQogCQkJcHJpbnRrKCJudnJhbTogRXJyb3Igd3JpdGluZyBiYW5rICVkXG4iLCBjb3JlOTlfYmFuayk7CiAgYmFpbDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52X2xvY2ssIGZsYWdzKTsKIAogI2lmZGVmIERFQlVHCiAgICAgICAgCW1kZWxheSgyMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKaW5kZXggZGIyMGRlNS4uZjVlM2NkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKQEAgLTUwLDEzICs1MCwxMyBAQAogCQl2YWx1ZSA9IH52YWx1ZTsKIAogCS8qIFRvZ2dsZSB0aGUgR1BJTyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXRtcCA9IHJlYWRiKGFkZHIpOwogCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsdWUgJiBtYXNrKTsKIAlEQkcoIkRvIHdyaXRlIDB4JTAyeCB0byBHUElPICVzICglcClcbiIsCiAJICAgIHRtcCwgZnVuYy0+bm9kZS0+ZnVsbF9uYW1lLCBhZGRyKTsKIAl3cml0ZWIodG1wLCBhZGRyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NSw5ICsxNDUsOSBAQAogCXN0cnVjdCBtYWNpb19jaGlwICptYWNpbyA9IGZ1bmMtPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlNQUNJT19PVVQzMihvZmZzZXQsIChNQUNJT19JTjMyKG9mZnNldCkgJiB+bWFzaykgfCAodmFsdWUgJiBtYXNrKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjgsOSArMTY4LDkgQEAKIAlzdHJ1Y3QgbWFjaW9fY2hpcCAqbWFjaW8gPSBmdW5jLT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJTUFDSU9fT1VUOChvZmZzZXQsIChNQUNJT19JTjgob2Zmc2V0KSAmIH5tYXNrKSB8ICh2YWx1ZSAmIG1hc2spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMywxMiArMjIzLDEyIEBACiAJaWYgKGFyZ3MgPT0gTlVMTCB8fCBhcmdzLT5jb3VudCA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXRtcCA9IE1BQ0lPX0lOMzIob2Zmc2V0KTsKIAl2YWwgPSBhcmdzLT51WzBdLnYgPDwgc2hpZnQ7CiAJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKIAlNQUNJT19PVVQzMihvZmZzZXQsIHRtcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDMsMTIgKzI0MywxMiBAQAogCWlmIChhcmdzID09IE5VTEwgfHwgYXJncy0+Y291bnQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAl0bXAgPSBNQUNJT19JTjgob2Zmc2V0KTsKIAl2YWwgPSBhcmdzLT51WzBdLnYgPDwgc2hpZnQ7CiAJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKIAlNQUNJT19PVVQ4KG9mZnNldCwgdG1wKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3OCwxMiArMjc4LDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCS8qIFRoaXMgaXMgZmFpcmx5IGJvZ3VzIGluIGRhcndpbiwgYnV0IGl0IHNob3VsZCB3b3JrIGZvciBvdXIgbmVlZHMKIAkgKiBpbXBsZW1ldGVkIHRoYXQgd2F5OgogCSAqLwogCVVOX09VVChvZmZzZXQsIChVTl9JTihvZmZzZXQpICYgfm1hc2spIHwgKHZhbHVlICYgbWFzaykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYwppbmRleCA5NmQ1Y2U1Li5lZGU0OWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYwpAQCAtODQyLDcgKzg0Miw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmdW5jLCAmZGV2LT5mdW5jdGlvbnMsIGxpbmspIHsKIAkJaWYgKG5hbWUgJiYgc3RyY21wKG5hbWUsIGZ1bmMtPm5hbWUpKQogCQkJY29udGludWU7Ci0JCWlmIChmdW5jLT5waGFuZGxlICYmIHRhcmdldC0+bm9kZSAhPSBmdW5jLT5waGFuZGxlKQorCQlpZiAoZnVuYy0+cGhhbmRsZSAmJiB0YXJnZXQtPnBoYW5kbGUgIT0gZnVuYy0+cGhhbmRsZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGZ1bmMtPmZsYWdzICYgZmxhZ3MpID09IDApCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IDA5ZTgyNzIuLjYzMGE1MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwpAQCAtNTcsNyArNTcsNyBAQAogc3RhdGljIGludCBtYXhfcmVhbF9pcnFzOwogc3RhdGljIHUzMiBsZXZlbF9tYXNrWzRdOwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBtYWNfcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socG1hY19waWNfbG9jayk7CiAKICNkZWZpbmUgTlJfTUFTS19XT1JEUwkoKE5SX0lSUVMgKyAzMSkgLyAzMikKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBwY19sb3N0X2ludGVycnVwdHNbTlJfTUFTS19XT1JEU107CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBfX2NsZWFyX2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwogICAgICAgICBpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoc3JjLCBwcGNfbG9zdF9pbnRlcnJ1cHRzKSkKICAgICAgICAgICAgICAgICBhdG9taWNfZGVjKCZwcGNfbl9sb3N0X2ludGVycnVwdHMpOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgIG1iKCk7CiAgICAgICAgIH0gd2hpbGUoKGluX2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5lbmFibGUpICYgYml0KQogICAgICAgICAgICAgICAgICE9IChwcGNfY2FjaGVkX2lycV9tYXNrW2ldICYgYml0KSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBtYWNfYWNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKQEAgLTEwNywxMiArMTA3LDEyIEBACiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KHNyYywgcHBjX2xvc3RfaW50ZXJydXB0cykpCiAgICAgICAgICAgICAgICAgYXRvbWljX2RlYygmcHBjX25fbG9zdF9pbnRlcnJ1cHRzKTsKICAgICAgICAgb3V0X2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5hY2ssIGJpdCk7CiAgICAgICAgICh2b2lkKWluX2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5hY2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBfX3BtYWNfc2V0X2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFfbnIsIGludCBub2tpY2tsb3N0KQpAQCAtMTUyLDEyICsxNTIsMTIgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKHNyYyAmIDB4MWYpOwogICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlpZiAoKGlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpID09IDApCiAJCW91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrLCBiaXQpOwogICAgICAgICBfX3NldF9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKICAgICAgICAgX19wbWFjX3NldF9pcnFfbWFzayhzcmMsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjcsMTAgKzE2NywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAgICAgICAgIF9fY2xlYXJfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CiAgICAgICAgIF9fcG1hY19zZXRfaXJxX21hc2soc3JjLCAxKTsKLSAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbWFjX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC0xNzgsMjQgKzE3OCwyNCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCV9fc2V0X2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwogICAgICAgICBfX3BtYWNfc2V0X2lycV9tYXNrKHNyYywgMCk7Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBwbWFjX3JldHJpZ2dlcih1bnNpZ25lZCBpbnQgdmlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCV9fcG1hY19yZXRyaWdnZXIoaXJxX21hcFt2aXJxXS5od2lycSk7Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbWFjX3BpYyA9IHsKLQkubmFtZQkJPSAiIFBNQUMtUElDICIsCisJLm5hbWUJCT0gIlBNQUMtUElDIiwKIAkuc3RhcnR1cAk9IHBtYWNfc3RhcnR1cF9pcnEsCiAJLm1hc2sJCT0gcG1hY19tYXNrX2lycSwKIAkuYWNrCQk9IHBtYWNfYWNrX2lycSwKQEAgLTIxMCw3ICsyMTAsNyBAQAogCWludCBpcnEsIGJpdHM7CiAJaW50IHJjID0gSVJRX05PTkU7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJZm9yIChpcnEgPSBtYXhfaXJxczsgKGlycSAtPSAzMikgPj0gbWF4X3JlYWxfaXJxczsgKSB7CiAJCWludCBpID0gaXJxID4+IDU7CiAJCWJpdHMgPSBpbl9sZTMyKCZwbWFjX2lycV9od1tpXS0+ZXZlbnQpIHwgcHBjX2xvc3RfaW50ZXJydXB0c1tpXTsKQEAgLTIyMCwxMiArMjIwLDEyIEBACiAJCWlmIChiaXRzID09IDApCiAJCQljb250aW51ZTsKIAkJaXJxICs9IF9faWxvZzIoYml0cyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCQlyYyA9IElSUV9IQU5ETEVEOwogCX0KLSAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjQ0LDcgKzI0NCw3IEBACiAJCXJldHVybiBOT19JUlFfSUdOT1JFOwkvKiBpZ25vcmUsIGFscmVhZHkgaGFuZGxlZCAqLwogICAgICAgICB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotICAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGlycSA9IG1heF9yZWFsX2lycXM7IChpcnEgLT0gMzIpID49IDA7ICkgewogCQlpbnQgaSA9IGlycSA+PiA1OwogCQliaXRzID0gaW5fbGUzMigmcG1hY19pcnFfaHdbaV0tPmV2ZW50KSB8IHBwY19sb3N0X2ludGVycnVwdHNbaV07CkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJaXJxICs9IF9faWxvZzIoYml0cyk7CiAJCWJyZWFrOwogCX0KLSAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCWlmICh1bmxpa2VseShpcnEgPCAwKSkKIAkJcmV0dXJuIE5PX0lSUTsKIAlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAocG1hY19waWNfaG9zdCwgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IGI0MGMyMmQuLjY4OThlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtNjkzLDkgKzY5Myw5IEBACiAjaWZkZWYgQ09ORklHX1BQQzY0CiAKIAkvKiBpMmMgYmFzZWQgSFcgc3luYyBvbiBzb21lIEc1cyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQogCQlzbXBfY29yZTk5X3NldHVwX2kyY19od3N5bmMobmNwdXMpOwogCiAJLyogcGZ1bmMgYmFzZWQgSFcgc3luYyBvbiByZWNlbnQgRzVzICovCkBAIC03MTMsNyArNzEzLDcgQEAKICNlbHNlIC8qIENPTkZJR19QUEM2NCAqLwogCiAJLyogR1BJTyBiYXNlZCBIVyBzeW5jIG9uIHBwYzMyIENvcmU5OSAqLwotCWlmIChwbWFjX3RiX2ZyZWV6ZSA9PSBOVUxMICYmICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpIHsKKwlpZiAocG1hY190Yl9mcmVlemUgPT0gTlVMTCAmJiAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1OwogCQljb25zdCB1MzIgKnRicHJvcCA9IE5VTEw7CiAKQEAgLTc1MCw3ICs3NTAsNyBAQAogI2VuZGlmCiAKIAkvKiAzMiBiaXRzIFNNUCBjYW4ndCBOQVAgKi8KLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKIAkJcG93ZXJzYXZlX25hcCA9IDA7CiB9CiAKQEAgLTg1Miw3ICs4NTIsNyBAQAogCQkvKiBJZiB3ZSBkaWRuJ3Qgc3RhcnQgdGhlIHNlY29uZCBDUFUsIHdlIG11c3QgdGFrZQogCQkgKiBpdCBvZmYgdGhlIGJ1cwogCQkgKi8KLQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSAmJgorCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpICYmCiAJCSAgICBudW1fb25saW5lX2NwdXMoKSA8IDIpCQkKIAkJCWc1X3BoeV9kaXNhYmxlX2NwdTEoKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKaW5kZXggMTgxMGU0Mi4uNDgyMTFjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKQEAgLTMxNyw5ICszMTcsOSBAQAogCSAqIGNhbGlicmF0aW9uLiBUaGF0J3MgYmV0dGVyIHNpbmNlIHRoZSBWSUEgaXRzZWxmIHNlZW1zCiAJICogdG8gYmUgc2xpZ2h0bHkgb2ZmLiAtLUJlbkgKIAkgKi8KLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzIiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDMyIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MyIikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSAmJgorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQogCQlpZiAodmlhX2NhbGlicmF0ZV9kZWNyKCkpCiAJCQlyZXR1cm47CiAKQEAgLTMyOCw3ICszMjgsNyBAQAogCSAqIHByb2JhYmx5IGltcGxlbWVudCBjYWxpYnJhdGlvbiBiYXNlZCBvbiB0aGUgS0wgdGltZXIgb24gdGhlc2UKIAkgKiBtYWNoaW5lcyBhbnl3YXkuLi4gLUJlbkgKIAkgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzMsNSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMyw1IikpCiAJCWlmICh2aWFfY2FsaWJyYXRlX2RlY3IoKSkKIAkJCXJldHVybjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCmluZGV4IDk0OTAxNTcuLmQ4MzEzNWE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfc2NjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCkBAIC0xMzIsOSArMTMyLDkgQEAKIAkJc2NjX2luaXR0YWJbMV0gPSBpbl84KHNjY2MpOwogCQlvdXRfOChzY2NjLCAxMik7CiAJCXNjY19pbml0dGFiWzNdID0gaW5fOChzY2NjKTsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMSIpCi0JCSAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMiIpCi0JCSAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwxIikKKwkJICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwyIikKKwkJICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CiAJCS8qIFhzZXJ2ZXMgYW5kIEc1cyBkZWZhdWx0IHRvIDU3NjAwICovCiAJCXNjY19pbml0dGFiWzFdID0gMDsKIAkJc2NjX2luaXR0YWJbM10gPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IGNjZDhkZDAuLjdkZjdmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogRVhQT1JUX1NZTUJPTChlZWhfc3Vic3lzdGVtX2VuYWJsZWQpOwogCiAvKiBMb2NrIHRvIGF2b2lkIHJhY2VzIGR1ZSB0byBtdWx0aXBsZSByZXBvcnRzIG9mIGFuIGVycm9yICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpcm1fZXJyb3JfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb25maXJtX2Vycm9yX2xvY2spOwogCiAvKiBCdWZmZXIgZm9yIHJlcG9ydGluZyBzbG90LWVycm9yLWRldGFpbCBydGFzIGNhbGxzLiBJdHMgaGVyZQogICogaW4gQlNTLCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jZWQsIHNvIHRoYXQgaXQgZW5kcyB1cCBpbgpAQCAtNDM2LDcgKzQzNiw3IEBACiB2b2lkIGVlaF9jbGVhcl9zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CiAJCiAJZG4gPSBmaW5kX2RldmljZV9wZSAoZG4pOwogCQpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfm1vZGVfZmxhZzsKIAlQQ0lfRE4oZG4pLT5lZWhfY2hlY2tfY291bnQgPSAwOwogCV9fZWVoX2NsZWFyX3Nsb3QoZG4sIG1vZGVfZmxhZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCSAgICBwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfTk9DSEVDSykgewogCQlpZ25vcmVkX2NoZWNrKys7CiAJCXByX2RlYnVnKCJFRUg6IElnbm9yZWQgY2hlY2sgKCV4KSBmb3IgJXMgJXNcbiIsCi0JCQkgcGRuLT5lZWhfbW9kZSwgcGNpX25hbWUgKGRldiksIGRuLT5mdWxsX25hbWUpOworCQkJIHBkbi0+ZWVoX21vZGUsIGVlaF9wY2lfbmFtZShkZXYpLCBkbi0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MDYsNyArNTA2LDcgQEAKIAkgKiBpbiBvbmUgc2xvdCBtaWdodCByZXBvcnQgZXJyb3JzIHNpbXVsdGFuZW91c2x5LCBhbmQgd2UKIAkgKiBvbmx5IHdhbnQgb25lIGVycm9yIHJlY292ZXJ5IHJvdXRpbmUgcnVubmluZy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAlyYyA9IDE7CiAJaWYgKHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9JU09MQVRFRCkgewogCQlwZG4tPmVlaF9jaGVja19jb3VudCArKzsKQEAgLTUxNSw3ICs1MTUsNyBAQAogCQkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiAlZCByZWFkcyBpZ25vcmVkIGZvciByZWNvdmVyaW5nIGRldmljZSBhdCAiCiAJCQkJImxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lc1xuIiwKIAkJCQlwZG4tPmVlaF9jaGVja19jb3VudCwgbG9jYXRpb24sCi0JCQkJZGV2LT5kcml2ZXItPm5hbWUsIHBjaV9uYW1lKGRldikpOworCQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBlZWhfcGNpX25hbWUoZGV2KSk7CiAJCQlwcmludGsgKEtFUk5fRVJSICJFRUg6IE1pZ2h0IGJlIGluZmluaXRlIGxvb3AgaW4gJXMgZHJpdmVyXG4iLAogCQkJCWRldi0+ZHJpdmVyLT5uYW1lKTsKIAkJCWR1bXBfc3RhY2soKTsKQEAgLTU3NSw3ICs1NzUsNyBAQAogCSAqIHdpdGggb3RoZXIgZnVuY3Rpb25zIG9uIHRoaXMgZGV2aWNlLCBhbmQgZnVuY3Rpb25zIHVuZGVyCiAJICogYnJpZGdlcy4gKi8KIAllZWhfbWFya19zbG90IChkbiwgRUVIX01PREVfSVNPTEFURUQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAogCWVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgKGRuLCBkZXYpOwogCkBAIC01ODYsNyArNTg2LDcgQEAKIAlyZXR1cm4gMTsKIAogZG5fdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEwNjQsNyArMTA2NCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpwaGIsICpucDsKIAlzdHJ1Y3QgZWVoX2Vhcmx5X2VuYWJsZV9pbmZvIGluZm87CiAKLQlzcGluX2xvY2tfaW5pdCgmY29uZmlybV9lcnJvcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2luaXQoJmNvbmZpcm1fZXJyb3JfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNsb3RfZXJyYnVmX2xvY2spOwogCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IGVmOGU0NTQuLmI4ZDcwZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJCWxvY2F0aW9uID0gbG9jYXRpb24gPyBsb2NhdGlvbiA6ICJ1bmtub3duIjsKIAkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IEVycm9yOiBDYW5ub3QgZmluZCBwYXJ0aXRpb24gZW5kcG9pbnQgIgogCQkgICAgICAgICAgICAgICAgImZvciBsb2NhdGlvbj0lcyBwY2kgYWRkcj0lc1xuIiwKLQkJICAgICAgICBsb2NhdGlvbiwgcGNpX25hbWUoZXZlbnQtPmRldikpOworCQkgICAgICAgIGxvY2F0aW9uLCBlZWhfcGNpX25hbWUoZXZlbnQtPmRldikpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTM2OCw3ICszNjgsNyBAQAogCQlwY2lfc3RyID0gcGNpX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CiAJCWRydl9zdHIgPSBwY2lkX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CiAJfSBlbHNlIHsKLQkJcGNpX3N0ciA9IHBjaV9uYW1lIChldmVudC0+ZGV2KTsKKwkJcGNpX3N0ciA9IGVlaF9wY2lfbmFtZShldmVudC0+ZGV2KTsKIAkJZHJ2X3N0ciA9IHBjaWRfbmFtZSAoZXZlbnQtPmRldik7CiAJfQogCQpAQCAtNDc4LDkgKzQ3OCw5IEBACiAJICogZHVlIHRvIGFjdHVhbCwgZmFpbGVkIGNhcmRzLgogCSAqLwogCXByaW50ayhLRVJOX0VSUgotCSAgICJFRUg6IFBDSSBkZXZpY2UgYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzIFxuIgorCSAgICJFRUg6IFBDSSBkZXZpY2UgYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iCiAJCSJoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXIgIgotCQkiYW5kIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLiBcbiIKKwkJImFuZCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbiIKIAkJIlBsZWFzZSB0cnkgcmVzZWF0aW5nIHRoaXMgZGV2aWNlIG9yIHJlcGxhY2luZyBpdC5cbiIsCiAJCWxvY2F0aW9uLCBkcnZfc3RyLCBwY2lfc3RyLCBmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50KTsKIAlnb3RvIHBlcm1fZXJyb3I7CkBAIC00ODgsNyArNDg4LDcgQEAKIGhhcmRfZmFpbDoKIAlwcmludGsoS0VSTl9FUlIKIAkgICAiRUVIOiBVbmFibGUgdG8gcmVjb3ZlciBmcm9tIGZhaWx1cmUgb2YgUENJIGRldmljZSAiCi0JICAgImF0IGxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lcyBcbiIKKwkgICAiYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iCiAJICAgIlBsZWFzZSB0cnkgcmVzZWF0aW5nIHRoaXMgZGV2aWNlIG9yIHJlcGxhY2luZyBpdC5cbiIsCiAJCWxvY2F0aW9uLCBkcnZfc3RyLCBwY2lfc3RyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCmluZGV4IGRkYjgwZjUuLmVjNWRmOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKQEAgLTgwLDcgKzgwLDcgQEAKIAllZWhfbWFya19zbG90KGV2ZW50LT5kbiwgRUVIX01PREVfUkVDT1ZFUklORyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJFRUg6IERldGVjdGVkIFBDSSBidXMgZXJyb3Igb24gZGV2aWNlICVzXG4iLAotCSAgICAgICBwY2lfbmFtZShldmVudC0+ZGV2KSk7CisJICAgICAgIGVlaF9wY2lfbmFtZShldmVudC0+ZGV2KSk7CiAKIAlwZG4gPSBoYW5kbGVfZWVoX2V2ZW50cyhldmVudCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKaW5kZXggNmVhNDY5OC4uZDFiMTI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKQEAgLTM4NywyNCArMzg3LDEyIEBACiAKIHN0YXRpYyBpbnQgcGFyc2VfY2VkZV9wYXJhbWV0ZXJzKHZvaWQpCiB7Ci0JaW50IGNhbGxfc3RhdHVzOwotCiAJbWVtc2V0KGNlZGVfcGFyYW1ldGVycywgMCwgQ0VERV9MQVRFTkNZX1BBUkFNX01BWF9MRU5HVEgpOwotCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImlibSxnZXQtc3lzdGVtLXBhcmFtZXRlciIpLCAzLCAxLAotCQkJCU5VTEwsCi0JCQkJQ0VERV9MQVRFTkNZX1RPS0VOLAotCQkJCV9fcGEoY2VkZV9wYXJhbWV0ZXJzKSwKLQkJCQlDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSCk7Ci0KLQlpZiAoY2FsbF9zdGF0dXMgIT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ0VERV9MQVRFTkNZOiBcCi0JCQklcyAlcyBFcnJvciBjYWxsaW5nIGdldC1zeXN0ZW0tcGFyYW1ldGVyKDB4JXgpXG4iLAotCQkJX19GSUxFX18sIF9fZnVuY19fLCBjYWxsX3N0YXR1cyk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJDRURFX0xBVEVOQ1k6IFwKLQkJCWdldC1zeXN0ZW0tcGFyYW1ldGVyIHN1Y2Nlc3NmdWwuXG4iKTsKLQotCXJldHVybiBjYWxsX3N0YXR1czsKKwlyZXR1cm4gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImlibSxnZXQtc3lzdGVtLXBhcmFtZXRlciIpLCAzLCAxLAorCQkJIE5VTEwsCisJCQkgQ0VERV9MQVRFTkNZX1RPS0VOLAorCQkJIF9fcGEoY2VkZV9wYXJhbWV0ZXJzKSwKKwkJCSBDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfY3B1X2hvdHBsdWdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwppbmRleCAyZjU4YzcxLi4xZmVmYWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwpAQCAtMTI0LDggKzEyNCw4IEBACiAKIAloID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfc3RhdHMpW29wY29kZSAvIDRdOwogCWgtPm51bV9jYWxscysrOwotCWgtPnRiX3RvdGFsID0gbWZ0YigpIC0gaC0+dGJfc3RhcnQ7Ci0JaC0+cHVycl90b3RhbCA9IG1mc3ByKFNQUk5fUFVSUikgLSBoLT5wdXJyX3N0YXJ0OworCWgtPnRiX3RvdGFsICs9IG1mdGIoKSAtIGgtPnRiX3N0YXJ0OworCWgtPnB1cnJfdG90YWwgKz0gbWZzcHIoU1BSTl9QVVJSKSAtIGgtPnB1cnJfc3RhcnQ7CiAKIAlwdXRfY3B1X3ZhcihoY2FsbF9zdGF0cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKaW5kZXggYjZmYTNlNC4uNGI3YTA2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJjLCBpOwogCi0JcHJfZGVidWcoIlBDSTogUmVtb3ZpbmcgUEhCICUwNHg6JTAyeC4uLiBcbiIsCisJcHJfZGVidWcoIlBDSTogUmVtb3ZpbmcgUEhCICUwNHg6JTAyeC4uLlxuIiwKIAkJIHBjaV9kb21haW5fbnIoYiksIGItPm51bWJlcik7CiAKIAkvKiBXZSBjYW5ub3QgdG8gcmVtb3ZlIGEgcm9vdCBidXMgdGhhdCBoYXMgY2hpbGRyZW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYwppbmRleCAxNWViNjEwLi4yMjVhNTBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGh5cF9kdW1wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BoeXBfZHVtcC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJNYXggYXV0byB0aW1lPSAlZFxuIiwgcGgtPm1heHRpbWVfdG9fYXV0byk7CiAKIAkvKnNldCBjcHUgc3RhdGUgYW5kIGhwdGUgc3RhdGVzIGFzIHdlbGwgc2NyYXRjaCBwYWQgYXJlYSAqLwotCXByaW50ayhLRVJOX0lORk8gIiBDUFUgQVJFQSBcbiIpOworCXByaW50ayhLRVJOX0lORk8gIiBDUFUgQVJFQVxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+Y3B1X2RhdGEuZHVtcF9mbGFncyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IHNvdXJjZV90eXBlID0lZFxuIiwgcGgtPmNwdV9kYXRhLnNvdXJjZV90eXBlKTsKIAlwcmludGsoS0VSTl9JTkZPICJjcHUgZXJyb3JfZmxhZ3MgPSVkXG4iLCBwaC0+Y3B1X2RhdGEuZXJyb3JfZmxhZ3MpOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IGxlbmd0aF9jb3BpZWQgPSVsbHhcbiIsCiAJCXBoLT5jcHVfZGF0YS5sZW5ndGhfY29waWVkKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiBIUFRFIEFSRUEgXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICIgSFBURSBBUkVBXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLmR1bXBfZmxhZ3MpOwogCXByaW50ayhLRVJOX0lORk8gIkhQVEUgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLnNvdXJjZV90eXBlKTsKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGVycm9yX2ZsYWdzID0lZFxuIiwgcGgtPmhwdGVfZGF0YS5lcnJvcl9mbGFncyk7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGxlbmd0aF9jb3BpZWQgPSVsbHhcbiIsCiAJCXBoLT5ocHRlX2RhdGEubGVuZ3RoX2NvcGllZCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIgU1JTRCBBUkVBIFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiIFNSU0QgQVJFQVxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiU1JTRCBkdW1wX2ZsYWdzID0lZFxuIiwgcGgtPmtlcm5lbF9kYXRhLmR1bXBfZmxhZ3MpOwogCXByaW50ayhLRVJOX0lORk8gIlNSU0Qgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+a2VybmVsX2RhdGEuc291cmNlX3R5cGUpOwogCXByaW50ayhLRVJOX0lORk8gIlNSU0QgZXJyb3JfZmxhZ3MgPSVkXG4iLCBwaC0+a2VybmVsX2RhdGEuZXJyb3JfZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IGI0ODg2NjMuLjRlN2Y4OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTE0NCw4ICsxNDQsOCBAQAogCQloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKG5yKTsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELCBoY3B1aWQpOwogCQlpZiAocmMgIT0gSF9TVUNDRVNTKQotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZFwKLQkJCQkJCVJldD0gJWxkXG4iLCBuciwgcmMpOworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZCAiCisJCQkJCQkiUmV0PSAlbGRcbiIsIG5yLCByYyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCBmNWY3OTE5Li40Y2E2NDEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAJbHBhcl9yYyA9IHBscGFyX3hpcnIoJnJldHVybl92YWx1ZSk7CiAJaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQotCQlwYW5pYygiIGJhZCByZXR1cm4gY29kZSB4aXJyIC0gcmMgPSAlbHggXG4iLCBscGFyX3JjKTsKKwkJcGFuaWMoIiBiYWQgcmV0dXJuIGNvZGUgeGlyciAtIHJjID0gJWx4XG4iLCBscGFyX3JjKTsKIAlyZXR1cm4gKHVuc2lnbmVkIGludClyZXR1cm5fdmFsdWU7CiB9CiAKQEAgLTQyNCw3ICs0MjQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2RpcmVjdCA9IHsKLQkubmFtZSA9ICIgWElDUyAgICAgIiwKKwkubmFtZSA9ICJYSUNTIiwKIAkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKIAkubWFzayA9IHhpY3NfbWFza19pcnEsCiAJLnVubWFzayA9IHhpY3NfdW5tYXNrX2lycSwKQEAgLTQzMyw3ICs0MzMsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19scGFyID0gewotCS5uYW1lID0gIiBYSUNTICAgICAiLAorCS5uYW1lID0gIlhJQ1MiLAogCS5zdGFydHVwID0geGljc19zdGFydHVwLAogCS5tYXNrID0geGljc19tYXNrX2lycSwKIAkudW5tYXNrID0geGljc191bm1hc2tfaXJxLApAQCAtNTEwLDE1ICs1MTAsMTMgQEAKIC8qCiAgKiBYSUNTIG9ubHkgaGFzIGEgc2luZ2xlIElQSSwgc28gZW5jb2RlIHRoZSBtZXNzYWdlcyBwZXIgQ1BVCiAgKi8KLXN0cnVjdCB4aWNzX2lwaV9zdHJ1Y3QgewotICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOwotCX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCi1zdGF0aWMgc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB4aWNzX2lwaV9tZXNzYWdlW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQodW5zaWduZWQgbG9uZywgeGljc19pcGlfbWVzc2FnZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfeGljc19kb19tZXNzYWdlKGludCBjcHUsIGludCBtc2cpCiB7Ci0Jc2V0X2JpdChtc2csICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpOworCXVuc2lnbmVkIGxvbmcgKnRndCA9ICZwZXJfY3B1KHhpY3NfaXBpX21lc3NhZ2UsIGNwdSk7CisKKwlzZXRfYml0KG1zZywgdGd0KTsKIAltYigpOwogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQlscGFyX3FpcnJfaW5mbyhjcHUsIElQSV9QUklPUklUWSk7CkBAIC01NDQsMjUgKzU0MiwyMyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfZGlzcGF0Y2goaW50IGNwdSkKIHsKKwl1bnNpZ25lZCBsb25nICp0Z3QgPSAmcGVyX2NwdSh4aWNzX2lwaV9tZXNzYWdlLCBjcHUpOworCiAJV0FSTl9PTihjcHVfaXNfb2ZmbGluZShjcHUpKTsKIAogCW1iKCk7CS8qIG9yZGVyIG1taW8gY2xlYXJpbmcgcWlyciAqLwotCXdoaWxlICh4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJd2hpbGUgKCp0Z3QpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNUSU9OKTsKIAkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfUkVTQ0hFRFVMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX1JFU0NIRURVTEUsIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19SRVNDSEVEVUxFKTsKIAkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUsIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFKTsKIAkJfQogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0RFQlVHR0VSX0JSRUFLLAotCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfREVCVUdHRVJfQlJFQUssIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CiAJCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwppbmRleCBhNGI0MWRiLi5lY2FkMTBkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwpAQCAtNzcsNyArNzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbV9waWMgPSB7Ci0JLm5hbWUgPSAiIENQTSBQSUMgIiwKKwkubmFtZSA9ICJDUE0gUElDIiwKIAkubWFzayA9IGNwbV9tYXNrX2lycSwKIAkudW5tYXNrID0gY3BtX3VubWFza19pcnEsCiAJLmVvaSA9IGNwbV9lbmRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCmluZGV4IDE3MDlhYzUuLmZjZWE0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbTJfcGljID0gewotCS5uYW1lID0gIiBDUE0yIFNJVSAiLAorCS5uYW1lID0gIkNQTTIgU0lVIiwKIAkubWFzayA9IGNwbTJfbWFza19pcnEsCiAJLnVubWFzayA9IGNwbTJfdW5tYXNrX2lycSwKIAkuYWNrID0gY3BtMl9hY2ssCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IGM2ZTExYjAuLmUwOTQzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJLm1hc2sJCT0gbWFza19tc2lfaXJxLAogCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCiAJLmFjawkJPSBmc2xfbXNpX2VuZF9pcnEsCi0JLm5hbWUJPSAiIEZTTC1NU0kgICIsCisJLm5hbWUJCT0gIkZTTC1NU0kiLAogfTsKIAogc3RhdGljIGludCBmc2xfbXNpX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2dyYWNrbGUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCmluZGV4IDVkYTM3YzIuLmNmMjdkZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCkBAIC01Niw5ICs1Niw5IEBACiB2b2lkIF9faW5pdCBzZXR1cF9ncmFja2xlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKIAlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgMHhmZWMwMDAwMCwgMHhmZWUwMDAwMCwgMCk7Ci0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEsMSIpKQogCQlwcGNfcGNpX2FkZF9mbGFncyhQUENfUENJX1JFQVNTSUdOX0FMTF9CVVMpOwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpKQogCQlncmFja2xlX3NldF9sb29wX3Nub29wKGhvc2UsIDEpOwogI2lmIDAJLyogRGlzYWJsZWQgZm9yIG5vdywgSFcgcHJvYmxlbXMgPz8/ICovCiAJZ3JhY2tsZV9zZXRfc3RnKGhvc2UsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCmluZGV4IDBhNTVkYjguLjYzMjNlNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgY2FjaGVkX0ExIChjYWNoZWRfODI1OVswXSkKICNkZWZpbmUgY2FjaGVkXzIxIChjYWNoZWRfODI1OVsxXSkKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhpODI1OV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGk4MjU5X2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGlycV9ob3N0ICppODI1OV9ob3N0OwogCkBAIC00Miw3ICs0Miw3IEBACiAJaWYgKHBjaV9pbnRhY2spCiAJCWlycSA9IHJlYWRiKHBjaV9pbnRhY2spOwogCWVsc2UgewotCQlzcGluX2xvY2soJmk4MjU5X2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZpODI1OV9sb2NrKTsKIAkJbG9jayA9IDE7CiAKIAkJLyogUGVyZm9ybSBhbiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgY3ljbGUgb24gY29udHJvbGxlciAxLiAqLwpAQCAtNzQsNyArNzQsNyBAQAogCQlpcnEgPSBOT19JUlE7CiAKIAlpZiAobG9jaykKLQkJc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOwogCXJldHVybiBpcnE7CiB9CiAKQEAgLTgyLDcgKzgyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAlpZiAoaXJxX25yID4gNykgewogCQljYWNoZWRfQTEgfD0gMSA8PCAoaXJxX25yLTgpOwogCQlpbmIoMHhBMSk7IAkvKiBEVU1NWSAqLwpAQCAtOTUsNyArOTUsNyBAQAogCQlvdXRiKGNhY2hlZF8yMSwgMHgyMSk7CiAJCW91dGIoMHgyMCwgMHgyMCk7CS8qIE5vbi1zcGVjaWZpYyBFT0kgKi8KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGk4MjU5X3NldF9pcnFfbWFzayhpbnQgaXJxX25yKQpAQCAtMTEwLDEzICsxMTAsMTMgQEAKIAogCXByX2RlYnVnKCJpODI1OV9tYXNrX2lycSglZClcbiIsIGlycV9ucik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogCWlmIChpcnFfbnIgPCA4KQogCQljYWNoZWRfMjEgfD0gMSA8PCBpcnFfbnI7CiAJZWxzZQogCQljYWNoZWRfQTEgfD0gMSA8PCAoaXJxX25yLTgpOwogCWk4MjU5X3NldF9pcnFfbWFzayhpcnFfbnIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpODI1OV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCkBAIC0xMjUsMTcgKzEyNSwxNyBAQAogCiAJcHJfZGVidWcoImk4MjU5X3VubWFza19pcnEoJWQpXG4iLCBpcnFfbnIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAlpZiAoaXJxX25yIDwgOCkKIAkJY2FjaGVkXzIxICY9IH4oMSA8PCBpcnFfbnIpOwogCWVsc2UKIAkJY2FjaGVkX0ExICY9IH4oMSA8PCAoaXJxX25yLTgpKTsKIAlpODI1OV9zZXRfaXJxX21hc2soaXJxX25yKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpODI1OV9waWMgPSB7Ci0JLm5hbWUJCT0gIiBpODI1OSAgICAiLAorCS5uYW1lCQk9ICJpODI1OSIsCiAJLm1hc2sJCT0gaTgyNTlfbWFza19pcnEsCiAJLmRpc2FibGUJPSBpODI1OV9tYXNrX2lycSwKIAkudW5tYXNrCQk9IGk4MjU5X3VubWFza19pcnEsCkBAIC0yNDEsNyArMjQxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgY29udHJvbGxlciAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CiAKIAkvKiBNYXNrIGFsbCBmaXJzdCAqLwogCW91dGIoMHhmZiwgMHhBMSk7CkBAIC0yNzMsNyArMjczLDcgQEAKIAlvdXRiKGNhY2hlZF9BMSwgMHhBMSk7CiAJb3V0YihjYWNoZWRfMjEsIDB4MjEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CiAKIAkvKiBjcmVhdGUgYSBsZWdhY3kgaG9zdCAqLwogCWk4MjU5X2hvc3QgPSBpcnFfYWxsb2NfaG9zdChub2RlLCBJUlFfSE9TVF9NQVBfTEVHQUNZLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwppbmRleCAyOGNkZGRkLi5kN2I5YjljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwpAQCAtMzIsNyArMzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlwaWMgKiBwcmltYXJ5X2lwaWM7CiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwaWNfbGV2ZWxfaXJxX2NoaXAsIGlwaWNfZWRnZV9pcnFfY2hpcDsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBpY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGlwaWNfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgaXBpY19pbmZvIGlwaWNfaW5mb1tdID0gewogCVsxXSA9IHsKQEAgLTUzMCwxMyArNTMwLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCiAJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrKTsKIAl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzaywgdGVtcCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwaWNfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC01NDYsNyArNTQ2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2spOwogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwpAQCAtNTU2LDcgKzU1Niw3IEBACiAJICogZm9yIG5lYXJseSBhbGwgY2FzZXMuICovCiAJbWIoKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpY19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtNTY2LDcgKzU2Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCiAJdGVtcCA9IDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLmFjaywgdGVtcCk7CkBAIC01NzUsNyArNTc1LDcgQEAKIAkgKiBmb3IgbmVhcmx5IGFsbCBjYXNlcy4gKi8KIAltYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpcGljX21hc2tfaXJxX2FuZF9hY2sodW5zaWduZWQgaW50IHZpcnEpCkBAIC01ODUsNyArNTg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2spOwogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJICogZm9yIG5lYXJseSBhbGwgY2FzZXMuICovCiAJbWIoKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBpcGljX3NldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKQEAgLTY2MCw3ICs2NjAsNyBAQAogCiAvKiBsZXZlbCBpbnRlcnJ1cHRzIGFuZCBlZGdlIGludGVycnVwdHMgaGF2ZSBkaWZmZXJlbnQgYWNrIG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXBpY19sZXZlbF9pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiIElQSUMgICIsCisJLm5hbWUJCT0gIklQSUMiLAogCS51bm1hc2sJCT0gaXBpY191bm1hc2tfaXJxLAogCS5tYXNrCQk9IGlwaWNfbWFza19pcnEsCiAJLm1hc2tfYWNrCT0gaXBpY19tYXNrX2lycSwKQEAgLTY2OCw3ICs2NjgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcGljX2VkZ2VfaXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIiBJUElDICAiLAorCS5uYW1lCQk9ICJJUElDIiwKIAkudW5tYXNrCQk9IGlwaWNfdW5tYXNrX2lycSwKIAkubWFzawkJPSBpcGljX21hc2tfaXJxLAogCS5tYXNrX2Fjawk9IGlwaWNfbWFza19pcnFfYW5kX2FjaywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4X3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKaW5kZXggNjliZDZmNC4uOGMyN2QyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKQEAgLTk0LDcgKzk0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM4eHhfcGljID0gewotCS5uYW1lID0gIiBNUEM4WFggU0lVICIsCisJLm5hbWUgPSAiTVBDOFhYIFNJVSIsCiAJLnVubWFzayA9IG1wYzh4eF91bm1hc2tfaXJxLAogCS5tYXNrID0gbXBjOHh4X21hc2tfaXJxLAogCS5hY2sgPSBtcGM4eHhfYWNrLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCA0NzBkYzZjMS4uMzM5ZThhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBtcGljICptcGljczsKIHN0YXRpYyBzdHJ1Y3QgbXBpYyAqbXBpY19wcmltYXJ5Owotc3RhdGljIERFRklORV9TUElOTE9DSyhtcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobXBpY19sb2NrKTsKIAogI2lmZGVmIENPTkZJR19QUEMzMgkvKiBYWFggZm9yIG5vdyAqLwogI2lmZGVmIENPTkZJR19JUlFfQUxMX0NQVVMKQEAgLTM0NywxMCArMzQ3LDEwIEBACiAJCXVuc2lnbmVkIGludCBtYXNrID0gMVUgPDwgKGZpeHVwLT5pbmRleCAmIDB4MWYpOwogCQl3cml0ZWwobWFzaywgZml4dXAtPmFwcGxlYmFzZSArIHNvZmYpOwogCX0gZWxzZSB7Ci0JCXNwaW5fbG9jaygmbXBpYy0+Zml4dXBfbG9jayk7CisJCXJhd19zcGluX2xvY2soJm1waWMtPmZpeHVwX2xvY2spOwogCQl3cml0ZWIoMHgxMSArIDIgKiBmaXh1cC0+aW5kZXgsIGZpeHVwLT5iYXNlICsgMik7CiAJCXdyaXRlbChmaXh1cC0+ZGF0YSwgZml4dXAtPmJhc2UgKyA0KTsKLQkJc3Bpbl91bmxvY2soJm1waWMtPmZpeHVwX2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJm1waWMtPmZpeHVwX2xvY2spOwogCX0KIH0KIApAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAlEQkcoInN0YXJ0dXBfaHRfaW50ZXJydXB0KDB4JXgsIDB4JXgpIGluZGV4OiAlZFxuIiwKIAkgICAgc291cmNlLCBpcnFmbGFncywgZml4dXAtPmluZGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOwogCS8qIEVuYWJsZSBhbmQgY29uZmlndXJlICovCiAJd3JpdGViKDB4MTAgKyAyICogZml4dXAtPmluZGV4LCBmaXh1cC0+YmFzZSArIDIpOwogCXRtcCA9IHJlYWRsKGZpeHVwLT5iYXNlICsgNCk7CkBAIC0zNzQsNyArMzc0LDcgQEAKIAlpZiAoaXJxZmxhZ3MgJiBJUlFfTEVWRUwpCiAJCXRtcCB8PSAweDIyOwogCXdyaXRlbCh0bXAsIGZpeHVwLT5iYXNlICsgNCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CiAKICNpZmRlZiBDT05GSUdfUE0KIAkvKiB1c2UgdGhlIGxvd2VzdCBiaXQgaW52ZXJ0ZWQgdG8gdGhlIGFjdHVhbCBIVywKQEAgLTM5NiwxMiArMzk2LDEyIEBACiAJREJHKCJzaHV0ZG93bl9odF9pbnRlcnJ1cHQoMHgleCwgMHgleClcbiIsIHNvdXJjZSwgaXJxZmxhZ3MpOwogCiAJLyogRGlzYWJsZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CiAJd3JpdGViKDB4MTAgKyAyICogZml4dXAtPmluZGV4LCBmaXh1cC0+YmFzZSArIDIpOwogCXRtcCA9IHJlYWRsKGZpeHVwLT5iYXNlICsgNCk7CiAJdG1wIHw9IDE7CiAJd3JpdGVsKHRtcCwgZml4dXAtPmJhc2UgKyA0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19QTQogCS8qIHVzZSB0aGUgbG93ZXN0IGJpdCBpbnZlcnRlZCB0byB0aGUgYWN0dWFsIEhXLApAQCAtNTE1LDcgKzUxNSw3IEBACiAJQlVHX09OKG1waWMtPmZpeHVwcyA9PSBOVUxMKTsKIAogCS8qIEluaXQgc3BpbmxvY2sgKi8KLQlzcGluX2xvY2tfaW5pdCgmbXBpYy0+Zml4dXBfbG9jayk7CisJcmF3X3NwaW5fbG9ja19pbml0KCZtcGljLT5maXh1cF9sb2NrKTsKIAogCS8qIE1hcCBVMyBjb25maWcgc3BhY2UuIFdlIGFzc3VtZSBhbGwgSU8tQVBJQ3MgYXJlIG9uIHRoZSBwcmltYXJ5IGJ1cwogCSAqIHNvIHdlIG9ubHkgbmVlZCB0byBtYXAgNjRrQi4KQEAgLTU3MywxMiArNTczLDEyIEBACiAKIAlpZiAoY3B1bWFza19lcXVhbChtYXNrLCBjcHVfYWxsX21hc2spKSB7CiAJCXN0YXRpYyBpbnQgaXJxX3JvdmVyOwotCQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV9yb3Zlcl9sb2NrKTsKKwkJc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaXJxX3JvdmVyX2xvY2spOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCS8qIFJvdW5kLXJvYmluIGRpc3RyaWJ1dGlvbi4uLiAqLwogCWRvX3JvdW5kX3JvYmluOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX3JvdmVyX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfcm92ZXJfbG9jaywgZmxhZ3MpOwogCiAJCXdoaWxlICghY3B1X29ubGluZShpcnFfcm92ZXIpKSB7CiAJCQlpZiAoKytpcnFfcm92ZXIgPj0gTlJfQ1BVUykKQEAgLTU5MCw3ICs1OTAsNyBAQAogCQkJCWlycV9yb3ZlciA9IDA7CiAJCX0gd2hpbGUgKCFjcHVfb25saW5lKGlycV9yb3ZlcikpOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9yb3Zlcl9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfcm92ZXJfbG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7CiAJCWNwdWlkID0gY3B1bWFza19maXJzdF9hbmQobWFzaywgY3B1X29ubGluZV9tYXNrKTsKIAkJaWYgKGNwdWlkID49IG5yX2NwdV9pZHMpCkBAIC0xMzY4LDE0ICsxMzY4LDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCXYgPSBtcGljX3JlYWQobXBpYy0+Z3JlZ3MsIE1QSUNfR1JFR19HTE9CQUxfQ09ORl8xKTsKIAlpZiAoZW5hYmxlKQogCQl2IHw9IE1QSUNfR1JFR19HTE9CQUxfQ09ORl8xX1NJRTsKIAllbHNlCiAJCXYgJj0gfk1QSUNfR1JFR19HTE9CQUxfQ09ORl8xX1NJRTsKIAltcGljX3dyaXRlKG1waWMtPmdyZWdzLCBNUElDX0dSRUdfR0xPQkFMX0NPTkZfMSwgdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIG1waWNfaXJxX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpKQpAQCAtMTM4OCw3ICsxMzg4LDcgQEAKIAlpZiAoIW1waWMpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCWlmIChtcGljX2lzX2lwaShtcGljLCBpcnEpKSB7CiAJCXJlZyA9IG1waWNfaXBpX3JlYWQoc3JjIC0gbXBpYy0+aXBpX3ZlY3NbMF0pICYKIAkJCX5NUElDX1ZFQ1BSSV9QUklPUklUWV9NQVNLOwpAQCAtMTQwMCw3ICsxNDAwLDcgQEAKIAkJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpLAogCQkJICAgICAgIHJlZyB8IChwcmkgPDwgTVBJQ19WRUNQUklfUFJJT1JJVFlfU0hJRlQpKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIG1waWNfc2V0dXBfdGhpc19jcHUodm9pZCkKQEAgLTE0MTUsNyArMTQxNSw3IEBACiAKIAlEQkcoIiVzOiBzZXR1cF90aGlzX2NwdSglZClcbiIsIG1waWMtPm5hbWUsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCiAgCS8qIGxldCB0aGUgbXBpYyBrbm93IHdlIHdhbnQgaW50cnMuIGRlZmF1bHQgYWZmaW5pdHkgaXMgMHhmZmZmZmZmZgogCSAqIHVudGlsIGNoYW5nZWQgdmlhIC9wcm9jLiBUaGF0J3MgaG93IGl0J3MgZG9uZSBvbiB4ODYuIElmIHdlIHdhbnQKQEAgLTE0MzEsNyArMTQzMSw3IEBACiAJLyogU2V0IGN1cnJlbnQgcHJvY2Vzc29yIHByaW9yaXR5IHRvIDAgKi8KIAltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0NVUlJFTlRfVEFTS19QUkkpLCAwKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiB9CiAKQEAgLTE0NjAsNyArMTQ2MCw3IEBACiAJQlVHX09OKG1waWMgPT0gTlVMTCk7CiAKIAlEQkcoIiVzOiB0ZWFyZG93bl90aGlzX2NwdSglZClcbiIsIG1waWMtPm5hbWUsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKIAogCS8qIGxldCB0aGUgbXBpYyBrbm93IHdlIGRvbid0IHdhbnQgaW50cnMuICAqLwogCWZvciAoaSA9IDA7IGkgPCBtcGljLT5udW1fc291cmNlcyA7IGkrKykKQEAgLTE0NzQsNyArMTQ3NCw3IEBACiAJICovCiAJbXBpY19lb2kobXBpYyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIApAQCAtMTU3NSw3ICsxNTc1LDcgQEAKIAlpbnQgaTsKIAlCVUdfT04obXBpYyA9PSBOVUxMKTsKIAotCXByaW50ayhLRVJOX0lORk8gIm1waWM6IHJlcXVlc3RpbmcgSVBJcyAuLi4gXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJtcGljOiByZXF1ZXN0aW5nIElQSXMuLi5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmlwaSA9IGlycV9jcmVhdGVfbWFwcGluZyhtcGljLT5pcnFob3N0LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKaW5kZXggMGY2YWIwNi4uM2I2YTlhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCkBAIC02MCw3ICs2MCw3IEBACiAJLmVvaQkJPSBtcGljX2VuZF9pcnEsCiAJLnNldF90eXBlCT0gbXBpY19zZXRfaXJxX3R5cGUsCiAJLnNldF9hZmZpbml0eQk9IG1waWNfc2V0X2FmZmluaXR5LAotCS5uYW1lCQk9ICJQQVNFTUktTVNJICIsCisJLm5hbWUJCT0gIlBBU0VNSS1NU0kiLAogfTsKIAogc3RhdGljIGludCBwYXNlbWlfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jCmluZGV4IGI2YmQ3NzUuLjMxYWNkM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KIApAQCAtMTg5LDYgKzE5MCw3IEBACiAJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhNUFNDX0NUTFJfTkFNRSwgcG9ydF9udW1iZXIpOwogCWlmICghcGRldikKIAkJcmV0dXJuIC1FTk9NRU07CisJcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHIsIDUpOwogCWlmIChlcnIpCkBAIC0zMDIsNiArMzA0LDcgQEAKIAlpZiAoIXBkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByLCAxKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfc29jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYwppbmRleCA1YjMyYWRjLi41YzAxNDM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYwpAQCAtMTc0LDcgKzE3NCw4IEBACiAJCXwgTDJDX0NGR19DUElNIHwgTDJDX0NGR19UUElNIHwgTDJDX0NGR19MSU0gfCBMMkNfQ0ZHX1NNQ007CiAKIAkvKiBDaGVjayBmb3IgNDYwRVgvR1Qgc3BlY2lhbCBoYW5kbGluZyAqLwotCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxsMi1jYWNoZS00NjBleCIpKQorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxsMi1jYWNoZS00NjBleCIpIHx8CisJICAgIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGwyLWNhY2hlLTQ2MGd0IikpCiAJCXIgfD0gTDJDX0NGR19SREJXOwogCiAJbXRkY3IoZGNyYmFzZV9sMmMgKyBEQ1JOX0wyQzBfQ0ZHLCByKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCmluZGV4IDJhY2M5MjguLmQ5MjdkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcWVfaWNfaXJxX2NoaXAgPSB7Ci0JLm5hbWUgPSAiIFFFSUMgICIsCisJLm5hbWUgPSAiUUVJQyIsCiAJLnVubWFzayA9IHFlX2ljX3VubWFza19pcnEsCiAJLm1hc2sgPSBxZV9pY19tYXNrX2lycSwKIAkubWFza19hY2sgPSBxZV9pY19tYXNrX2lycSwKQEAgLTI1Niw3ICsyNTYsNyBAQAogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKIAogCWlmIChxZV9pY19pbmZvW2h3XS5tYXNrID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBtYXAgcmVzZXJ2ZWQgSVJRIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgbWFwIHJlc2VydmVkIElSUVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBEZWZhdWx0IGNoaXAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pby5jCmluZGV4IDdjODc0NjAuLjc3ZTQ5MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaW8uYwpAQCAtMTU3LDEzICsxNTcsMTMgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgKnBpb19tYXA7CiAKIAlpZiAocGFyX2lvID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwYXJfaW8gbm90IGluaXRpYWxpemVkIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAicGFyX2lvIG5vdCBpbml0aWFsaXplZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBpby1oYW5kbGUiLCBOVUxMKTsKIAlpZiAocGggPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInBpby1oYW5kbGUgbm90IGF2YWlsYWJsZSBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInBpby1oYW5kbGUgbm90IGF2YWlsYWJsZVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE3MSwxMiArMTcxLDEyIEBACiAKIAlwaW9fbWFwID0gb2ZfZ2V0X3Byb3BlcnR5KHBpbywgInBpby1tYXAiLCAmcGlvX21hcF9sZW4pOwogCWlmIChwaW9fbWFwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGlzIG5vdCBzZXQhIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAicGlvLW1hcCBpcyBub3Qgc2V0IVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJcGlvX21hcF9sZW4gLz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAJaWYgKChwaW9fbWFwX2xlbiAlIDYpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGZvcm1hdCB3cm9uZyEgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGZvcm1hdCB3cm9uZyFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYwppbmRleCA2ZjIyMGE5Li4wMDM4ZmI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHVpY19pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiIFVJQyAgIiwKKwkubmFtZQkJPSAiVUlDIiwKIAkudW5tYXNrCQk9IHVpY191bm1hc2tfaXJxLAogCS5tYXNrCQk9IHVpY19tYXNrX2lycSwKICAJLm1hc2tfYWNrCT0gdWljX21hc2tfYWNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCA0ZTYxNTJjLi44YmFkN2Q1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgaW50IHhtb25fZ2F0ZTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluX3htb24gPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5feG1vbiBfX3JlYWRfbW9zdGx5ID0gMDsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYWRyczsKIHN0YXRpYyBpbnQgc2l6ZSA9IDE7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGM4MDIzNTIuLjBkOGNkOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC01NCw2ICs1NCw5IEBACiAJZGVwZW5kcyBvbiBCVUcKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfQlVHX1JFTEFUSVZFX1BPSU5URVJTCisJZGVmX2Jvb2wgeQorCiBjb25maWcgTk9fSU9NRU0KIAlkZWZfYm9vbCB5CiAKQEAgLTg3LDYgKzkwLDcgQEAKIAlzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJc2VsZWN0IEhBVkVfREVGQVVMVF9OT19TUElOX01VVEVYRVMKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0tQUk9CRVMKQEAgLTk1LDYgKzk5LDkgQEAKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBJTklUX0FMTF9QT1NTSUJMRQogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCisJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKwlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0sKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLX0JICiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fTE9DSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcuZGVidWcgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwppbmRleCAyMjgzOTMzLi40NWUwYzYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwpAQCAtNiw0ICs2LDE3IEBACiAKIHNvdXJjZSAibGliL0tjb25maWcuZGVidWciCiAKK2NvbmZpZyBERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworCWJvb2wgIlN0cmljdCB1c2VyIGNvcHkgc2l6ZSBjaGVja3MiCisJLS0taGVscC0tLQorCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gdHVybnMgYSBjZXJ0YWluIHNldCBvZiBzYW5pdHkgY2hlY2tzIGZvciB1c2VyCisJICBjb3B5IG9wZXJhdGlvbnMgaW50byBjb21waWxlIHRpbWUgd2FybmluZ3MuCisKKwkgIFRoZSBjb3B5X2Zyb21fdXNlcigpIGV0YyBjaGVja3MgYXJlIHRoZXJlIHRvIGhlbHAgdGVzdCBpZiB0aGVyZQorCSAgYXJlIHN1ZmZpY2llbnQgc2VjdXJpdHkgY2hlY2tzIG9uIHRoZSBsZW5ndGggYXJndW1lbnQgb2YKKwkgIHRoZSBjb3B5IG9wZXJhdGlvbiwgYnkgaGF2aW5nIGdjYyBwcm92ZSB0aGF0IHRoZSBhcmd1bWVudCBpcworCSAgd2l0aGluIGJvdW5kcy4KKworCSAgSWYgdW5zdXJlLCBvciBpZiB5b3UgcnVuIGFuIG9sZGVyIChwcmUgNC40KSBnY2MsIHNheSBOLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvTWFrZWZpbGUgYi9hcmNoL3MzOTAvTWFrZWZpbGUKaW5kZXggZmM4ZmIyMC4uMGRhMTA3NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBAQAogIwogCiBpZm5kZWYgQ09ORklHXzY0QklUCitMRF9CRkQJCTo9IGVsZjMyLXMzOTAKIExERkxBR1MJCTo9IC1tIGVsZl9zMzkwCiBLQlVJTERfQ0ZMQUdTCSs9IC1tMzEKIEtCVUlMRF9BRkxBR1MJKz0gLW0zMQpAQCAtMjEsNiArMjIsNyBAQAogU1RBQ0tfU0laRQk6PSA4MTkyCiBDSEVDS0ZMQUdTCSs9IC1EX19zMzkwX18gLW1zaXplLWxvbmcKIGVsc2UKK0xEX0JGRAkJOj0gZWxmNjQtczM5MAogTERGTEFHUwkJOj0gLW0gZWxmNjRfczM5MAogTU9ERkxBR1MJKz0gLWZwaWMgLURfX1BJQ19fCiBLQlVJTERfQ0ZMQUdTCSs9IC1tNjQKQEAgLTMwLDYgKzMyLDggQEAKIENIRUNLRkxBR1MJKz0gLURfX3MzOTBfXyAtRF9fczM5MHhfXwogZW5kaWYKIAorZXhwb3J0IExEX0JGRAorCiBjZmxhZ3MtJChDT05GSUdfTUFSQ0hfRzUpICAgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9ZzUpCiBjZmxhZ3MtJChDT05GSUdfTUFSQ0hfWjkwMCkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9ejkwMCkKIGNmbGFncy0kKENPTkZJR19NQVJDSF9aOTkwKSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD16OTkwKQpAQCAtODUsNyArODksOSBAQAogT0JKQ09QWUZMQUdTCTo9IC1PIGJpbmFyeQogTERGTEFHU192bWxpbnV4IDo9IC1lIHN0YXJ0CiAKLWhlYWQteQkJOj0gYXJjaC9zMzkwL2tlcm5lbC9oZWFkLm8gYXJjaC9zMzkwL2tlcm5lbC9pbml0X3Rhc2subworaGVhZC15CQk6PSBhcmNoL3MzOTAva2VybmVsL2hlYWQubworaGVhZC15CQkrPSBhcmNoL3MzOTAva2VybmVsLyQoaWYgJChDT05GSUdfNjRCSVQpLGhlYWQ2NC5vLGhlYWQzMS5vKQoraGVhZC15CQkrPSBhcmNoL3MzOTAva2VybmVsL2luaXRfdGFzay5vCiAKIGNvcmUteQkJKz0gYXJjaC9zMzkwL21tLyBhcmNoL3MzOTAva2VybmVsLyBhcmNoL3MzOTAvY3J5cHRvLyBcCiAJCSAgIGFyY2gvczM5MC9hcHBsZGF0YS8gYXJjaC9zMzkwL2h5cGZzLyBhcmNoL3MzOTAva3ZtLwpAQCAtOTksMTIgKzEwNSwxMiBAQAogCiBib290CQk6PSBhcmNoL3MzOTAvYm9vdAogCi1hbGw6IGltYWdlCithbGw6IGltYWdlIGJ6SW1hZ2UKIAogaW5zdGFsbDogdm1saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJEAKIAotaW1hZ2U6IHZtbGludXgKK2ltYWdlIGJ6SW1hZ2U6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoYm9vdCkvJEAKIAogemZjcGR1bXA6CkBAIC0xMTYsNCArMTIyLDUgQEAKICMgRG9uJ3QgdXNlIHRhYnMgaW4gZWNobyBhcmd1bWVudHMKIGRlZmluZSBhcmNoaGVscAogICBlY2hvICAnKiBpbWFnZSAgICAgICAgICAgLSBLZXJuZWwgaW1hZ2UgZm9yIElQTCAoJChib290KS9pbWFnZSknCisgIGVjaG8JJyogYnpJbWFnZSAgICAgICAgIC0gQ29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UgZm9yIElQTCAoJChib290KS9iekltYWdlKScKIGVuZGVmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZSBiL2FyY2gvczM5MC9ib290L01ha2VmaWxlCmluZGV4IDRkOTdlZWYuLjg4MDBjZjA5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZQpAQCAtOSwxMCArOSwxOCBAQAogRVhUUkFfQ0ZMQUdTICA6PSAtRENPTVBJTEVfVkVSU0lPTj0kKENPTVBJTEVfVkVSU0lPTikgLWdzdGFicyAtSS4KIAogdGFyZ2V0cyA6PSBpbWFnZQordGFyZ2V0cyArPSBiekltYWdlCitzdWJkaXItIDo9IGNvbXByZXNzZWQKIAogJChvYmopL2ltYWdlOiB2bWxpbnV4IEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKIAorJChvYmopL2J6SW1hZ2U6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXggRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCiskKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACisKIGluc3RhbGw6ICQoQ09ORklHVVJFKSAkKG9iaikvaW1hZ2UKIAlzaCAteCAgJChzcmN0cmVlKS8kKG9iaikvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpICQob2JqKS9pbWFnZSBcCiAJICAgICAgU3lzdGVtLm1hcCBLZXJudHlwZXMgIiQoSU5TVEFMTF9QQVRIKSIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNGE2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0wLDAgKzEsNjAgQEAKKyMKKyMgbGludXgvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorIworIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXggaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAorIworCitCSVRTIDo9ICQoaWYgJChDT05GSUdfNjRCSVQpLDY0LDMxKQorCit0YXJnZXRzCTo9IHZtbGludXgubGRzIHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIFwKKwkgICB2bWxpbnV4LmJpbi5sem1hIG1pc2MubyBwaWdneS5vIHNpemVzLmggaGVhZCQoQklUUykubworCitLQlVJTERfQ0ZMQUdTIDo9IC1tJChCSVRTKSAtRF9fS0VSTkVMX18gJChMSU5VWF9JTkNMVURFKSAtTzIKK0tCVUlMRF9DRkxBR1MgKz0gJChjZmxhZ3MteSkKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXBhY2tlZC1zdGFjaykKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZmZyZWVzdGFuZGluZykKKworR0NPVl9QUk9GSUxFIDo9IG4KKworT0JKRUNUUyA6PSAkKGFkZHByZWZpeCAkKG9ianRyZWUpL2FyY2gvczM5MC9rZXJuZWwvLCBoZWFkLm8gc2NscC5vIGViY2RpYy5vKQorT0JKRUNUUyArPSAkKG9iaikvaGVhZCQoQklUUykubyAkKG9iaikvbWlzYy5vICQob2JqKS9waWdneS5vCisKK0xERkxBR1Nfdm1saW51eCA6PSAtLW9mb3JtYXQgJChMRF9CRkQpIC1lIHN0YXJ0dXAgLVQKKyQob2JqKS92bWxpbnV4OiAkKG9iaikvdm1saW51eC5sZHMgJChPQkpFQ1RTKQorCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQorCUA6CisKK3NlZC1zaXplcyA6PSAtZSAncy9eXChbMC05YS1mQS1GXSpcKSAuIFwoX19ic3Nfc3RhcnRcfF9lbmRcKSQkL1wjZGVmaW5lIFNaXDIgMHhcMS9wJworCitxdWlldF9jbWRfc2l6ZXMgPSBHRU4gJEAKKyAgICAgIGNtZF9zaXplcyA9ICQoTk0pICQ8IHwgc2VkIC1uICQoc2VkLXNpemVzKSA+ICRACisKKyQob2JqKS9zaXplcy5oOiB2bWxpbnV4CisJJChjYWxsIGlmX2NoYW5nZWQsc2l6ZXMpCisKK0FGTEFHU19oZWFkJChCSVRTKS5vICs9IC1JJChvYmopCiskKG9iaikvaGVhZCQoQklUUykubzogJChvYmopL3NpemVzLmgKKworQ0ZMQUdTX21pc2MubyArPSAtSSQob2JqKQorJChvYmopL21pc2MubzogJChvYmopL3NpemVzLmgKKworT0JKQ09QWUZMQUdTX3ZtbGludXguYmluIDo9ICAtUiAuY29tbWVudCAtUworJChvYmopL3ZtbGludXguYmluOiB2bWxpbnV4CisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKwordm1saW51eC5iaW4uYWxsLXkgOj0gJChvYmopL3ZtbGludXguYmluCisKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkgIDo9IGd6CitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKSA6PSBiejIKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkgIDo9IGx6bWEKKworJChvYmopL3ZtbGludXguYmluLmd6OiAkKHZtbGludXguYmluLmFsbC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGd6aXApCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKHZtbGludXguYmluLmFsbC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGJ6aXAyKQorJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQodm1saW51eC5iaW4uYWxsLXkpCisJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKKworTERGTEFHU19waWdneS5vIDo9IC1yIC0tZm9ybWF0IGJpbmFyeSAtLW9mb3JtYXQgJChMRF9CRkQpIC1UCiskKG9iaikvcGlnZ3kubzogJChvYmopL3ZtbGludXguc2NyICQob2JqKS92bWxpbnV4LmJpbi4kKHN1ZmZpeC15KQorCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkMzEuUyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDMxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1NTIzYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDMxLlMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFN0YXJ0dXAgZ2x1ZSBjb2RlIHRvIHVuY29tcHJlc3MgdGhlIGtlcm5lbAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxMAorICoKKyAqICAgQXV0aG9yKHMpOglNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInNpemVzLmgiCisKK19fSEVBRAorCS5nbG9ibAlzdGFydHVwX2NvbnRpbnVlCitzdGFydHVwX2NvbnRpbnVlOgorCWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQorLkxQRzE6CisJIyBzZXR1cCBzdGFjaworCWwJJXIxNSwuTHN0YWNrLS5MUEcxKCVyMTMpCisJYWhpCSVyMTUsLTk2CisJbAklcjEsLkxkZWNvbXByZXNzLS5MUEcxKCVyMTMpCisJYmFzcgklcjE0LCVyMQorCSMgc2V0dXAgcmVnaXN0ZXJzIGZvciBtZW1vcnkgbW92ZXIgJiBicmFuY2ggdG8gdGFyZ2V0CisJbHIJJXI0LCVyMgorCWwJJXIyLC5Mb2Zmc2V0LS5MUEcxKCVyMTMpCisJbGEJJXI0LDAoJXIyLCVyNCkKKwlsCSVyMywuTG12c2l6ZS0uTFBHMSglcjEzKQorCWxyCSVyNSwlcjMKKwkjIG1vdmUgdGhlIG1lbW9yeSBtb3ZlciBzb21lcGxhY2Ugc2FmZQorCWxhCSVyMSwweDIwMAorCW12YwkwKG1vdmVyX2VuZC1tb3ZlciwlcjEpLG1vdmVyLS5MUEcxKCVyMTMpCisJIyBkZWNvbXByZXNzIGltYWdlIGlzIHN0YXJ0ZWQgYXQgMHgxMTAwMAorCWxyCSVyNiwlcjIKKwlicgklcjEKK21vdmVyOgorCW12Y2xlCSVyMiwlcjQsMAorCWpvCW1vdmVyCisJYnIJJXI2Cittb3Zlcl9lbmQ6CisKKwkuYWxpZ24JOAorLkxzdGFjazoKKwkubG9uZwkweDgwMDAgKyAoMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSkKKy5MZGVjb21wcmVzczoKKwkubG9uZwlkZWNvbXByZXNzX2tlcm5lbAorLkxvZmZzZXQ6CisJLmxvbmcJMHgxMTAwMAorLkxtdnNpemU6CisJLmxvbmcJU1pfX2Jzc19zdGFydApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkNjQuUyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4MmNiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvaGVhZDY0LlMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIFN0YXJ0dXAgZ2x1ZSBjb2RlIHRvIHVuY29tcHJlc3MgdGhlIGtlcm5lbAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxMAorICoKKyAqICAgQXV0aG9yKHMpOglNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInNpemVzLmgiCisKK19fSEVBRAorCS5nbG9ibAlzdGFydHVwX2NvbnRpbnVlCitzdGFydHVwX2NvbnRpbnVlOgorCWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQorLkxQRzE6CisJIyBzZXR1cCBzdGFjaworCWxnCSVyMTUsLkxzdGFjay0uTFBHMSglcjEzKQorCWFnaGkJJXIxNSwtMTYwCisJYnJhc2wJJXIxNCxkZWNvbXByZXNzX2tlcm5lbAorCSMgc2V0dXAgcmVnaXN0ZXJzIGZvciBtZW1vcnkgbW92ZXIgJiBicmFuY2ggdG8gdGFyZ2V0CisJbGdyCSVyNCwlcjIKKwlsZwklcjIsLkxvZmZzZXQtLkxQRzEoJXIxMykKKwlsYQklcjQsMCglcjIsJXI0KQorCWxnCSVyMywuTG12c2l6ZS0uTFBHMSglcjEzKQorCWxncgklcjUsJXIzCisJIyBtb3ZlIHRoZSBtZW1vcnkgbW92ZXIgc29tZXBsYWNlIHNhZmUKKwlsYQklcjEsMHgyMDAKKwltdmMJMChtb3Zlcl9lbmQtbW92ZXIsJXIxKSxtb3Zlci0uTFBHMSglcjEzKQorCSMgZGVjb21wcmVzcyBpbWFnZSBpcyBzdGFydGVkIGF0IDB4MTEwMDAKKwlsZ3IJJXI2LCVyMgorCWJyCSVyMQorbW92ZXI6CisJbXZjbGUJJXIyLCVyNCwwCisJam8JbW92ZXIKKwlicgklcjYKK21vdmVyX2VuZDoKKworCS5hbGlnbgk4CisuTHN0YWNrOgorCS5xdWFkCTB4ODAwMCArICgxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpKQorLkxvZmZzZXQ6CisJLnF1YWQJMHgxMTAwMAorLkxtdnNpemU6CisJLnF1YWQJU1pfX2Jzc19zdGFydApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTdkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBEZWZpbml0aW9ucyBhbmQgd3JhcHBlciBmdW5jdGlvbnMgZm9yIGtlcm5lbCBkZWNvbXByZXNzb3IKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTAKKyAqCisgKiBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9pcGwuaD4KKyNpbmNsdWRlICJzaXplcy5oIgorCisvKgorICogZ3ppcCBkZWNsYXJhdGlvbnMKKyAqLworI2RlZmluZSBTVEFUSUMgc3RhdGljCisKKyN1bmRlZiBtZW1zZXQKKyN1bmRlZiBtZW1jcHkKKyN1bmRlZiBtZW1tb3ZlCisjZGVmaW5lIG1lbXplcm8ocywgbikgbWVtc2V0KChzKSwgMCwgKG4pKQorCisvKiBTeW1ib2xzIGRlZmluZWQgYnkgbGlua2VyIHNjcmlwdHMgKi8KK2V4dGVybiBjaGFyIGlucHV0X2RhdGFbXTsKK2V4dGVybiBpbnQgaW5wdXRfbGVuOworZXh0ZXJuIGludCBfdGV4dDsKK2V4dGVybiBpbnQgX2VuZDsKKworc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqbSk7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX3B0cjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZyZWVfbWVtX2VuZF9wdHI7CisKKyNpZmRlZiBDT05GSUdfSEFWRV9LRVJORUxfQlpJUDIKKyNkZWZpbmUgSEVBUF9TSVpFCTB4NDAwMDAwCisjZWxzZQorI2RlZmluZSBIRUFQX1NJWkUJMHgxMDAwMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0daSVAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19idW56aXAyLmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgorI2VuZGlmCisKK2V4dGVybiBfc2NscF9wcmludF9lYXJseShjb25zdCBjaGFyICopOworCitpbnQgcHV0cyhjb25zdCBjaGFyICpzKQoreworCV9zY2xwX3ByaW50X2Vhcmx5KHMpOworCXJldHVybiAwOworfQorCit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQoreworCWNoYXIgKnhzOworCisJaWYgKGMgPT0gMCkKKwkJcmV0dXJuIF9fYnVpbHRpbl9tZW1zZXQocywgMCwgbik7CisKKwl4cyA9IChjaGFyICopIHM7CisJaWYgKG4gPiAwKQorCQlkbyB7CisJCQkqeHMrKyA9IGM7CisJCX0gd2hpbGUgKC0tbiA+IDApOworCXJldHVybiBzOworfQorCit2b2lkICptZW1jcHkodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQoreworCXJldHVybiBfX2J1aWx0aW5fbWVtY3B5KF9fZGVzdCwgX19zcmMsIF9fbik7Cit9CisKK3ZvaWQgKm1lbW1vdmUodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQoreworCWNoYXIgKmQ7CisJY29uc3QgY2hhciAqczsKKworCWlmIChfX2Rlc3QgPD0gX19zcmMpCisJCXJldHVybiBfX2J1aWx0aW5fbWVtY3B5KF9fZGVzdCwgX19zcmMsIF9fbik7CisJZCA9IF9fZGVzdCArIF9fbjsKKwlzID0gX19zcmMgKyBfX247CisJd2hpbGUgKF9fbi0tKQorCQkqLS1kID0gKi0tczsKKwlyZXR1cm4gX19kZXN0OworfQorCitzdGF0aWMgdm9pZCBlcnJvcihjaGFyICp4KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBwc3cgPSAweDAwMGEwMDAwZGVhZGJlZWZVTEw7CisKKwlwdXRzKCJcblxuIik7CisJcHV0cyh4KTsKKwlwdXRzKCJcblxuIC0tIFN5c3RlbSBoYWx0ZWQiKTsKKworCWFzbSB2b2xhdGlsZSgibHBzdyAlMCIgOiA6ICJRIiAocHN3KSk7Cit9CisKKy8qCisgKiBTYWZlIGd1YXJkIHRoZSBpcGwgcGFyYW1ldGVyIGJsb2NrIGFnYWluc3QgYSBtZW1vcnkgYXJlYSB0aGF0IHdpbGwgYmUKKyAqIG92ZXJ3cml0dGVuLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHRoZSBpcGwgcGFyYW1ldGVyIGJsb2NrIGlzIGNvbXBsZXgKKyAqIChzZWUgY2lvX2dldF9pcGxpbmZvIGFuZCBpcGxfc2F2ZV9wYXJhbWV0ZXJzKSBidXQgaWYgdGhlIHBvaW50ZXIgdG8KKyAqIHRoZSBpcGwgcGFyYW1ldGVyIGJsb2NrIGludGVyc2VjdHMgd2l0aCB0aGUgcGFzc2VkIG1lbW9yeSBhcmVhIHdlIGNhbgorICogc2FmZWx5IGFzc3VtZSB0aGF0IHdlIGNhbiByZWFkIGZyb20gdGhhdCBtZW1vcnkuIEluIHRoYXQgY2FzZSBqdXN0IGNvcHkKKyAqIHRoZSBtZW1vcnkgdG8gSVBMX1BBUk1CTE9DS19PUklHSU4gZXZlbiBpZiB0aGVyZSBpcyBubyBpcGwgcGFyYW1ldGVyCisgKiBibG9jay4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfaXBsX3Bhcm1ibG9jayh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKnNyYywgKmRzdDsKKworCXNyYyA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpIFMzOTBfbG93Y29yZS5pcGxfcGFybWJsb2NrX3B0cjsKKwlpZiAoc3JjICsgUEFHRV9TSVpFIDw9IHN0YXJ0IHx8IHNyYyA+PSBzdGFydCArIHNpemUpCisJCXJldHVybjsKKwlkc3QgPSAodm9pZCAqKSBJUExfUEFSTUJMT0NLX09SSUdJTjsKKwltZW1tb3ZlKGRzdCwgc3JjLCBQQUdFX1NJWkUpOworCVMzOTBfbG93Y29yZS5pcGxfcGFybWJsb2NrX3B0ciA9IElQTF9QQVJNQkxPQ0tfT1JJR0lOOworfQorCit1bnNpZ25lZCBsb25nIGRlY29tcHJlc3Nfa2VybmVsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvdXRwdXRfYWRkcjsKKwl1bnNpZ25lZCBjaGFyICpvdXRwdXQ7CisKKwlmcmVlX21lbV9wdHIgPSAodW5zaWduZWQgbG9uZykmX2VuZDsKKwlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgSEVBUF9TSVpFOworCW91dHB1dCA9ICh1bnNpZ25lZCBjaGFyICopICgoZnJlZV9tZW1fZW5kX3B0ciArIDQwOTVVTCkgJiAtNDA5NlVMKTsKKworCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQpOworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJLyoKKwkgKiBNb3ZlIHRoZSBpbml0cmQgcmlnaHQgYmVoaW5kIHRoZSBlbmQgb2YgdGhlIGRlY29tcHJlc3NlZAorCSAqIGtlcm5lbCBpbWFnZS4KKwkgKi8KKwlpZiAoSU5JVFJEX1NUQVJUICYmIElOSVRSRF9TSVpFICYmCisJICAgIElOSVRSRF9TVEFSVCA8ICh1bnNpZ25lZCBsb25nKSBvdXRwdXQgKyBTWl9fYnNzX3N0YXJ0KSB7CisJCWNoZWNrX2lwbF9wYXJtYmxvY2sob3V0cHV0ICsgU1pfX2Jzc19zdGFydCwKKwkJCQkgICAgSU5JVFJEX1NUQVJUICsgSU5JVFJEX1NJWkUpOworCQltZW1tb3ZlKG91dHB1dCArIFNaX19ic3Nfc3RhcnQsCisJCQkodm9pZCAqKSBJTklUUkRfU1RBUlQsIElOSVRSRF9TSVpFKTsKKwkJSU5JVFJEX1NUQVJUID0gKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQ7CisJfQorI2VuZGlmCisKKwlwdXRzKCJVbmNvbXByZXNzaW5nIExpbnV4Li4uICIpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBOVUxMLCBOVUxMLCBvdXRwdXQsIE5VTEwsIGVycm9yKTsKKwlwdXRzKCJPaywgYm9vdGluZyB0aGUga2VybmVsLlxuIik7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKSBvdXRwdXQ7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODBmNzlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCkBAIC0wLDAgKzEsNTUgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorCisjaWZkZWYgQ09ORklHXzY0QklUCitPVVRQVVRfRk9STUFUKCJlbGY2NC1zMzkwIiwgImVsZjY0LXMzOTAiLCAiZWxmNjQtczM5MCIpCitPVVRQVVRfQVJDSChzMzkwOjY0LWJpdCkKKyNlbHNlCitPVVRQVVRfRk9STUFUKCJlbGYzMi1zMzkwIiwgImVsZjMyLXMzOTAiLCAiZWxmMzItczM5MCIpCitPVVRQVVRfQVJDSChzMzkwKQorI2VuZGlmCisKK0VOVFJZKHN0YXJ0dXApCisKK1NFQ1RJT05TCit7CisJLyogQmUgY2FyZWZ1bCBwYXJ0cyBvZiBoZWFkXzY0LlMgYXNzdW1lIHN0YXJ0dXBfMzIgaXMgYXQKKwkgKiBhZGRyZXNzIDAuCisJICovCisJLiA9IDA7CisJLmhlYWQudGV4dCA6IHsKKwkJX2hlYWQgPSAuIDsKKwkJSEVBRF9URVhUCisJCV9laGVhZCA9IC4gOworCX0KKwkucm9kYXRhLmNvbXByZXNzZWQgOiB7CisJCSooLnJvZGF0YS5jb21wcmVzc2VkKQorCX0KKwkudGV4dCA6CXsKKwkJX3RleHQgPSAuOwkvKiBUZXh0ICovCisJCSooLnRleHQpCisJCSooLnRleHQuKikKKwkJX2V0ZXh0ID0gLiA7CisJfQorCS5yb2RhdGEgOiB7CisJCV9yb2RhdGEgPSAuIDsKKwkJKigucm9kYXRhKQkgLyogcmVhZC1vbmx5IGRhdGEgKi8KKwkJKigucm9kYXRhLiopCisJCV9lcm9kYXRhID0gLiA7CisJfQorCS5kYXRhIDoJeworCQlfZGF0YSA9IC4gOworCQkqKC5kYXRhKQorCQkqKC5kYXRhLiopCisJCV9lZGF0YSA9IC4gOworCX0KKwkuID0gQUxJR04oMjU2KTsKKwkuYnNzIDogeworCQlfYnNzID0gLiA7CisJCSooLmJzcykKKwkJKiguYnNzLiopCisJCSooQ09NTU9OKQorCQkuID0gQUxJR04oOCk7CS8qIEZvciBjb252ZW5pZW5jZSBkdXJpbmcgemVyb2luZyAqLworCQlfZWJzcyA9IC47CisJfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4LnNjciBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5zY3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyMzgyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvdm1saW51eC5zY3IKQEAgLTAsMCArMSwxMCBAQAorU0VDVElPTlMKK3sKKyAgLnJvZGF0YS5jb21wcmVzc2VkIDogeworCWlucHV0X2xlbiA9IC47CisJTE9ORyhpbnB1dF9kYXRhX2VuZCAtIGlucHV0X2RhdGEpIGlucHV0X2RhdGEgPSAuOworCSooLmRhdGEpCisJb3V0cHV0X2xlbiA9IC4gLSA0OworCWlucHV0X2RhdGFfZW5kID0gLjsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKaW5kZXggNmJlNDUwMy4uNThmNDY3MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwpAQCAtNzgsMTQgKzc4LDE0IEBACiAJc3RydWN0IHMzOTBfYWVzX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJaW50IHJldDsKIAotCXNjdHgtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7Ci0Jc2N0eC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJgorCXNjdHgtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7CisJc2N0eC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyB8PSAodGZtLT5jcnRfZmxhZ3MgJgogCQkJQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CiAKIAlyZXQgPSBjcnlwdG9fY2lwaGVyX3NldGtleShzY3R4LT5mYWxsYmFjay5jaXAsIGluX2tleSwga2V5X2xlbik7CiAJaWYgKHJldCkgewogCQl0Zm0tPmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVNfTUFTSzsKLQkJdGZtLT5jcnRfZmxhZ3MgfD0gKHNjdHgtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJgorCQl0Zm0tPmNydF9mbGFncyB8PSAoc2N0eC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyAmCiAJCQkJQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvZGVmY29uZmlnIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwppbmRleCBiNDE2YWExLi43YWU3MWNjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9kZWZjb25maWcKQEAgLTM2LDYgKzM2LDEzIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKaW5kZXggMmI5MmQ1MC4uODdjZjUyMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCkBAIC00ODgsNyArNDg4LDcgQEAKIAogc3RhdGljIGludCBkaWFnMjI0KHZvaWQgKnB0cikKIHsKLQlpbnQgcmMgPSAtRU5PVFNVUFA7CisJaW50IHJjID0gLUVPUE5PVFNVUFA7CiAKIAlhc20gdm9sYXRpbGUoCiAJCSIJZGlhZwklMSwlMiwweDIyNFxuIgpAQCAtNTA3LDcgKzUwNyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChkaWFnMjI0KGRpYWcyMjRfY3B1X25hbWVzKSkgewogCQlrZnJlZShkaWFnMjI0X2NwdV9uYW1lcyk7Ci0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAJRUJDQVNDKGRpYWcyMjRfY3B1X25hbWVzICsgMTYsICgqZGlhZzIyNF9jcHVfbmFtZXMgKyAxKSAqIDE2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCAyYTExM2Q2Li40NTFiZmJiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xOCw4ICsxOCw2IEBACiAKICNkZWZpbmUgQVRPTUlDX0lOSVQoaSkgIHsgKGkpIH0KIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19DU19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKIAlpbnQgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJCQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCkBAIC0zNSwyNiArMzMsNiBAQAogCW5ld192YWw7CQkJCQkJCVwKIH0pCiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19DU19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKLQlpbnQgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJbAklMCwwKCUzKVxuIgkJCQlcCi0JCSIwOglscgklMSwlMFxuIgkJCQlcCi0JCW9wX3N0cmluZyAiCSUxLCU0XG4iCQkJCVwKLQkJIgljcwklMCwlMSwwKCUzKVxuIgkJCQlcCi0JCSIJamwJMGIiCQkJCQlcCi0JCTogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCQkJXAotCQkgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAotCQk6ICJhIiAocHRyKSwgImQiIChvcF92YWwpLAkJCQlcCi0JCSAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKLQkJOiAiY2MiLCAibWVtb3J5Iik7CQkJCQlcCi0JbmV3X3ZhbDsJCQkJCQkJXAotfSkKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQogewogCWJhcnJpZXIoKTsKQEAgLTEwMSwxOSArNzksMTEgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCiB7Ci0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKIAlhc20gdm9sYXRpbGUoCiAJCSIJY3MJJTAsJTIsJTEiCiAJCTogIitkIiAob2xkKSwgIj1RIiAodi0+Y291bnRlcikKIAkJOiAiZCIgKG5ldyksICJRIiAodi0+Y291bnRlcikKIAkJOiAiY2MiLCAibWVtb3J5Iik7Ci0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCWFzbSB2b2xhdGlsZSgKLQkJIgljcwklMCwlMywwKCUyKSIKLQkJOiAiK2QiIChvbGQpLCAiPW0iICh2LT5jb3VudGVyKQotCQk6ICJhIiAodiksICJkIiAobmV3KSwgIm0iICh2LT5jb3VudGVyKQotCQk6ICJjYyIsICJtZW1vcnkiKTsKLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwogCXJldHVybiBvbGQ7CiB9CiAKQEAgLTE0MCw4ICsxMTAsNiBAQAogCiAjaWZkZWYgQ09ORklHXzY0QklUCiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQotCiAjZGVmaW5lIF9fQ1NHX0xPT1AocHRyLCBvcF92YWwsIG9wX3N0cmluZykgKHsJCQkJXAogCWxvbmcgbG9uZyBvbGRfdmFsLCBuZXdfdmFsOwkJCQkJXAogCWFzbSB2b2xhdGlsZSgJCQkJCQkJXApAQCAtMTU3LDI2ICsxMjUsNiBAQAogCW5ld192YWw7CQkJCQkJCVwKIH0pCiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19DU0dfTE9PUChwdHIsIG9wX3ZhbCwgb3Bfc3RyaW5nKSAoewkJCQlcCi0JbG9uZyBsb25nIG9sZF92YWwsIG5ld192YWw7CQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJbGcJJTAsMCglMylcbiIJCQkJXAotCQkiMDoJbGdyCSUxLCUwXG4iCQkJCVwKLQkJb3Bfc3RyaW5nICIJJTEsJTRcbiIJCQkJXAotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgkJCQlcCi0JCSIJamwJMGIiCQkJCQlcCi0JCTogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCQkJXAotCQkgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAotCQk6ICJhIiAocHRyKSwgImQiIChvcF92YWwpLAkJCQlcCi0JCSAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKLQkJOiAiY2MiLCAibWVtb3J5Iik7CQkJCQlcCi0JbmV3X3ZhbDsJCQkJCQkJXAotfSkKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KIHN0YXRpYyBpbmxpbmUgbG9uZyBsb25nIGF0b21pYzY0X3JlYWQoY29uc3QgYXRvbWljNjRfdCAqdikKIHsKIAliYXJyaWVyKCk7CkBAIC0yMTQsMTkgKzE2MiwxMSBAQAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LAogCQkJCQkgICAgIGxvbmcgbG9uZyBvbGQsIGxvbmcgbG9uZyBuZXcpCiB7Ci0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKIAlhc20gdm9sYXRpbGUoCiAJCSIJY3NnCSUwLCUyLCUxIgogCQk6ICIrZCIgKG9sZCksICI9USIgKHYtPmNvdW50ZXIpCiAJCTogImQiIChuZXcpLCAiUSIgKHYtPmNvdW50ZXIpCiAJCTogImNjIiwgIm1lbW9yeSIpOwotI2Vsc2UgLyogX19HTlVDX18gKi8KLQlhc20gdm9sYXRpbGUoCi0JCSIJY3NnCSUwLCUzLDAoJTIpIgotCQk6ICIrZCIgKG9sZCksICI9bSIgKHYtPmNvdW50ZXIpCi0JCTogImEiICh2KSwgImQiIChuZXcpLCAibSIgKHYtPmNvdW50ZXIpCi0JCTogImNjIiwgIm1lbW9yeSIpOwotI2VuZGlmIC8qIF9fR05VQ19fICovCiAJcmV0dXJuIG9sZDsKIH0KIApAQCAtMjQzLDEwICsxODMsOCBAQAogCXJlZ2lzdGVyX3BhaXIgcnA7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJbG0JJTAsJU4wLDAoJTEpIgotCQk6ICI9JmQiIChycCkKLQkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQotCQkpOworCQkiCWxtCSUwLCVOMCwlMSIKKwkJOiAiPSZkIiAocnApIDogIlEiICh2LT5jb3VudGVyKQkpOwogCXJldHVybiBycC5wYWlyOwogfQogCkBAIC0yNTUsMTAgKzE5Myw4IEBACiAJcmVnaXN0ZXJfcGFpciBycCA9IHsucGFpciA9IGl9OwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCXN0bQklMSwlTjEsMCglMikiCi0JCTogIj1tIiAodi0+Y291bnRlcikKLQkJOiAiZCIgKHJwKSwgImEiICgmdi0+Y291bnRlcikKLQkJKTsKKwkJIglzdG0JJTEsJU4xLCUwIgorCQk6ICI9USIgKHYtPmNvdW50ZXIpIDogImQiIChycCkgKTsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICp2LCBsb25nIGxvbmcgbmV3KQpAQCAtMjY3LDExICsyMDMsMTEgQEAKIAlyZWdpc3Rlcl9wYWlyIHJwX29sZDsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIglsbQklMCwlTjAsMCglMilcbiIKLQkJIjA6CWNkcwklMCwlMywwKCUyKVxuIgorCQkiCWxtCSUwLCVOMCwlMVxuIgorCQkiMDoJY2RzCSUwLCUyLCUxXG4iCiAJCSIJamwJMGJcbiIKLQkJOiAiPSZkIiAocnBfb2xkKSwgIittIiAodi0+Y291bnRlcikKLQkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgImQiIChycF9uZXcpCisJCTogIj0mZCIgKHJwX29sZCksICI9USIgKHYtPmNvdW50ZXIpCisJCTogImQiIChycF9uZXcpLCAiUSIgKHYtPmNvdW50ZXIpCiAJCTogImNjIik7CiAJcmV0dXJuIHJwX29sZC5wYWlyOwogfQpAQCAtMjgzLDkgKzIxOSw5IEBACiAJcmVnaXN0ZXJfcGFpciBycF9uZXcgPSB7LnBhaXIgPSBuZXd9OwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCWNkcwklMCwlMywwKCUyKSIKLQkJOiAiKyZkIiAocnBfb2xkKSwgIittIiAodi0+Y291bnRlcikKLQkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgImQiIChycF9uZXcpCisJCSIJY2RzCSUwLCUyLCUxIgorCQk6ICIrJmQiIChycF9vbGQpLCAiPVEiICh2LT5jb3VudGVyKQorCQk6ICJkIiAocnBfbmV3KSwgIlEiICh2LT5jb3VudGVyKQogCQk6ICJjYyIpOwogCXJldHVybiBycF9vbGQucGFpcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBiMzA2MDZmLi4yZTA1OTcyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC03MSw4ICs3MSw2IEBACiAjZGVmaW5lIF9fQklUT1BTX0FORAkJIm5yIgogI2RlZmluZSBfX0JJVE9QU19YT1IJCSJ4ciIKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKIAkJIglsCSUwLCUyXG4iCQkJXApAQCAtODUsMjIgKzgzLDYgQEAKIAkJOiAiZCIgKF9fdmFsKSwgIlEiICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQlcCiAJCTogImNjIik7CiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglsCSUwLDAoJTQpXG4iCQkJXAotCQkiMDoJbHIJJTEsJTBcbiIJCQlcCi0JCV9fb3Bfc3RyaW5nICIJJTEsJTNcbiIJCQlcCi0JCSIJY3MJJTAsJTEsMCglNClcbiIJCQlcCi0JCSIJamwJMGIiCQkJCVwKLQkJOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkJCVwKLQkJICAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAotCQk6ICJkIiAoX192YWwpLCAiYSIgKF9fYWRkciksCQkJXAotCQkgICJtIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikgOiAiY2MiKTsKLQotI2VuZGlmIC8qIF9fR05VQ19fICovCi0KICNlbHNlIC8qIF9fczM5MHhfXyAqLwogCiAjZGVmaW5lIF9fQklUT1BTX0FMSUdOCQk3CkBAIC0xMDksOCArOTEsNiBAQAogI2RlZmluZSBfX0JJVE9QU19BTkQJCSJuZ3IiCiAjZGVmaW5lIF9fQklUT1BTX1hPUgkJInhnciIKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKIAkJIglsZwklMCwlMlxuIgkJCVwKQEAgLTEyMywyMyArMTAzLDYgQEAKIAkJOiAiZCIgKF9fdmFsKSwgIlEiICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQlcCiAJCTogImNjIik7CiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLSNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglsZwklMCwwKCU0KVxuIgkJCVwKLQkJIjA6CWxncgklMSwlMFxuIgkJCVwKLQkJX19vcF9zdHJpbmcgIgklMSwlM1xuIgkJCVwKLQkJIgljc2cJJTAsJTEsMCglNClcbiIJCQlcCi0JCSIJamwJMGIiCQkJCVwKLQkJOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkJCVwKLQkJICAiPW0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAotCQk6ICJkIiAoX192YWwpLCAiYSIgKF9fYWRkciksCQkJXAotCQkgICJtIiAoKih1bnNpZ25lZCBsb25nICopIF9fYWRkcikgOiAiY2MiKTsKLQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjZGVmaW5lIF9fQklUT1BTX1dPUkRTKGJpdHMpICgoKGJpdHMpK19fQklUT1BTX1dPUkRTSVpFLTEpL19fQklUT1BTX1dPUkRTSVpFKQpAQCAtMjYxLDkgKzIyNCw4IEBACiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJYXNtIHZvbGF0aWxlKAotCQkiCW9jCTAoMSwlMSksMCglMikiCi0JCTogIj1tIiAoKihjaGFyICopIGFkZHIpIDogImEiIChhZGRyKSwKLQkJICAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOworCQkiCW9jCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpIDogIlEiIChfb2lfYml0bWFwW25yICYgN10pIDogImNjIiApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgCkBAIC0yOTAsOSArMjUyLDggQEAKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAlhc20gdm9sYXRpbGUoCi0JCSIJbmMJMCgxLCUxKSwwKCUyKSIKLQkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikJOiAiYSIgKGFkZHIpLAotCQkgICJhIiAoX25pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiKTsKKwkJIgluYwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKSA6ICJRIiAoX25pX2JpdG1hcFtuciAmIDddKSA6ICJjYyIgKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIApAQCAtMzE4LDkgKzI3OSw4IEBACiAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJYXNtIHZvbGF0aWxlKAotCQkiCXhjCTAoMSwlMSksMCglMikiCi0JCTogICI9bSIgKCooY2hhciAqKSBhZGRyKSA6ICJhIiAoYWRkciksCi0JCSAgICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCSIJeGMJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikgOiAiUSIgKF9vaV9iaXRtYXBbbnIgJiA3XSkgOiAiY2MiICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKQEAgLTM0OSwxMCArMzA5LDkgQEAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJY2ggPSAqKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKIAlhc20gdm9sYXRpbGUoCi0JCSIJb2MJMCgxLCUxKSwwKCUyKSIKLQkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikKLQkJOiAiYSIgKGFkZHIpLCAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksCi0JCSAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiLCAibWVtb3J5Iik7CisJCSIJb2MJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikJOiAiUSIgKF9vaV9iaXRtYXBbbnIgJiA3XSkKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIChjaCA+PiAobnIgJiA3KSkgJiAxOwogfQogI2RlZmluZSBfX3Rlc3RfYW5kX3NldF9iaXQoWCxZKQkJdGVzdF9hbmRfc2V0X2JpdF9zaW1wbGUoWCxZKQpAQCAtMzY5LDEwICszMjgsOSBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAljaCA9ICoodW5zaWduZWQgY2hhciAqKSBhZGRyOwogCWFzbSB2b2xhdGlsZSgKLQkJIgluYwkwKDEsJTEpLDAoJTIpIgotCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQk6ICJhIiAoYWRkciksICJhIiAoX25pX2JpdG1hcCArIChuciAmIDcpKSwKLQkJICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIsICJtZW1vcnkiKTsKKwkJIgluYwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKQk6ICJRIiAoX25pX2JpdG1hcFtuciAmIDddKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7CiB9CiAjZGVmaW5lIF9fdGVzdF9hbmRfY2xlYXJfYml0KFgsWSkJdGVzdF9hbmRfY2xlYXJfYml0X3NpbXBsZShYLFkpCkBAIC0zODksMTAgKzM0Nyw5IEBACiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWNoID0gKih1bnNpZ25lZCBjaGFyICopIGFkZHI7CiAJYXNtIHZvbGF0aWxlKAotCQkiCXhjCTAoMSwlMSksMCglMikiCi0JCTogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCTogImEiIChhZGRyKSwgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLAotCQkgICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiwgIm1lbW9yeSIpOworCQkiCXhjCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpCTogIlEiIChfb2lfYml0bWFwW25yICYgN10pCisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiAoY2ggPj4gKG5yICYgNykpICYgMTsKIH0KICNkZWZpbmUgX190ZXN0X2FuZF9jaGFuZ2VfYml0KFgsWSkJdGVzdF9hbmRfY2hhbmdlX2JpdF9zaW1wbGUoWCxZKQpAQCAtNTkxLDExICs1NDgsMTEgQEAKIAlwID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpIHAgKyBvZmZzZXQpOwogI2lmbmRlZiBfX3MzOTB4X18KIAlhc20gdm9sYXRpbGUoCi0JCSIJaWMJJTAsMCglMSlcbiIKLQkJIglpY20JJTAsMiwxKCUxKVxuIgotCQkiCWljbQklMCw0LDIoJTEpXG4iCi0JCSIJaWNtCSUwLDgsMyglMSkiCi0JCTogIj0mZCIgKHdvcmQpIDogImEiIChwKSwgIm0iICgqcCkgOiAiY2MiKTsKKwkJIglpYwklMCwlTzEoJVIxKVxuIgorCQkiCWljbQklMCwyLCVPMSsxKCVSMSlcbiIKKwkJIglpY20JJTAsNCwlTzErMiglUjEpXG4iCisJCSIJaWNtCSUwLDgsJU8xKzMoJVIxKSIKKwkJOiAiPSZkIiAod29yZCkgOiAiUSIgKCpwKSA6ICJjYyIpOwogI2Vsc2UKIAlhc20gdm9sYXRpbGUoCiAJCSIJbHJ2ZwklMCwlMSIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9idWcuaAppbmRleCBiMTA2NmI5Li45YmVlYjlkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC01LDEyICs1LDYgQEAKIAogI2lmZGVmIENPTkZJR19CVUcKIAotI2lmZGVmIENPTkZJR182NEJJVAotI2RlZmluZSBTMzkwX0xPTkcgIi5xdWFkIgotI2Vsc2UKLSNkZWZpbmUgUzM5MF9MT05HICIubG9uZyIKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKIAogI2RlZmluZSBfX0VNSVRfQlVHKHgpIGRvIHsJCQkJCVwKQEAgLTIxLDcgKzE1LDcgQEAKIAkJIjI6CS5hc2NpeglcIiJfX0ZJTEVfXyJcIlxuIgkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCiAJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuIgkJCVwKLQkJIjM6XHQiCVMzOTBfTE9ORyAiXHQxYiwyYlxuIgkJCVwKKwkJIjM6CS5sb25nCTFiLTNiLDJiLTNiXG4iCQkJXAogCQkiCS5zaG9ydAklMCwlMVxuIgkJCVwKIAkJIgkub3JnCTNiKyUyXG4iCQkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCkBAIC0zNyw3ICszMSw3IEBACiAJCSIwOglqCTBiKzJcbiIJCQlcCiAJCSIxOlxuIgkJCQkJXAogCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCVwKLQkJIjI6XHQiCVMzOTBfTE9ORyAiXHQxYlxuIgkJXAorCQkiMjoJLmxvbmcJMWItMmJcbiIJCVwKIAkJIgkuc2hvcnQJJTBcbiIJCQlcCiAJCSIJLm9yZwkyYislMVxuIgkJXAogCQkiLnByZXZpb3VzXG4iCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaAppbmRleCAyMTg1YTZkLi43NDlhOTdlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3J3LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCkBAIC0zMiw2ICszMiw3IEBACiBleHRlcm4gaW50IGNyd19yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcik7CiBleHRlcm4gdm9pZCBjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKGludCByc2MpOwogZXh0ZXJuIHZvaWQgY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCh2b2lkKTsKK3ZvaWQgY3J3X3dhaXRfZm9yX2NoYW5uZWxfcmVwb3J0KHZvaWQpOwogCiAjZGVmaW5lIE5SX1JTQ1MgMTYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2V0ci5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2V0ci5oCmluZGV4IDgwZWY1OGMuLjUzOGUxYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ldHIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZXRyLmgKQEAgLTE0NSwxMSArMTQ1LDExIEBACiAJaW50IHJjID0gLUVOT1NZUzsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIgkuaW5zbglzLDB4YjIxNjAwMDAsMCglMilcbiIKKwkJIgkuaW5zbglzLDB4YjIxNjAwMDAsJTFcbiIKIAkJIjA6CWxhCSUwLDBcbiIKIAkJIjE6XG4iCiAJCUVYX1RBQkxFKDBiLDFiKQotCQk6ICIrZCIgKHJjKSA6ICJtIiAoKmN0cmwpLCAiYSIgKGN0cmwpKTsKKwkJOiAiK2QiIChyYykgOiAiUSIgKCpjdHJsKSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNTksMTEgKzE1OSwxMSBAQAogCWludCByYyA9IC1FTk9TWVM7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJLmluc24JcywweGIyMTcwMDAwLDAoJTIpXG4iCisJCSIJLmluc24JcywweGIyMTcwMDAwLCUxXG4iCiAJCSIwOglsYQklMCwwXG4iCiAJCSIxOlxuIgogCQlFWF9UQUJMRSgwYiwxYikKLQkJOiAiK2QiIChyYykgOiAibSIgKCphaWIpLCAiYSIgKGFpYikpOworCQk6ICIrZCIgKHJjKSA6ICJRIiAoKmFpYikpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTc0LDExICsxNzQsMTEgQEAKIAlpbnQgcmMgPSAtRU5PU1lTOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCS5pbnNuCXMsMHhiMmIzMDAwMCwwKCUyKVxuIgorCQkiCS5pbnNuCXMsMHhiMmIzMDAwMCwlMVxuIgogCQkiMDoJbGEJJTAsMFxuIgogCQkiMTpcbiIKIAkJRVhfVEFCTEUoMGIsMWIpCi0JCTogIitkIiAocmMpIDogIm0iICgqYWliKSwgImEiIChhaWIpLCAiZCIgKHJlZzApKTsKKwkJOiAiK2QiIChyYykgOiAiUSIgKCphaWIpLCAiZCIgKHJlZzApKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggYzJmYjQzMi4uMTViM2FjMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKQEAgLTgsOCArOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKLQogLyogc3RvcmUgdGhlbiBvciBzeXN0ZW0gbWFzay4gKi8KICNkZWZpbmUgX19yYXdfbG9jYWxfaXJxX3N0b3NtKF9fb3IpCQkJCQlcCiAoewkJCQkJCQkJCVwKQEAgLTM2LDQwICszNCw2IEBACiAJYXNtIHZvbGF0aWxlKCJzc20gICAlMCIgOiA6ICJRIiAoX19tYXNrKSA6ICJtZW1vcnkiKTsJCVwKIH0pCiAKLSNlbHNlIC8qIF9fR05VQ19fICovCi0KLS8qIHN0b3JlIHRoZW4gb3Igc3lzdGVtIG1hc2suICovCi0jZGVmaW5lIF9fcmF3X2xvY2FsX2lycV9zdG9zbShfX29yKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX21hc2s7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAotCQkiCXN0b3NtCTAoJTEpLCUyIgkJCQlcCi0JCTogIj1tIiAoX19tYXNrKQkJCQkJCVwKLQkJOiAiYSIgKCZfX21hc2spLCAiaSIgKF9fb3IpIDogIm1lbW9yeSIpOwkJXAotCV9fbWFzazsJCQkJCQkJCVwKLX0pCi0KLS8qIHN0b3JlIHRoZW4gYW5kIHN5c3RlbSBtYXNrLiAqLwotI2RlZmluZSBfX3Jhd19sb2NhbF9pcnFfc3Ruc20oX19hbmQpCQkJCQlcCi0oewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fbWFzazsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJc3Ruc20JMCglMSksJTIiCQkJCVwKLQkJOiAiPW0iIChfX21hc2spCQkJCQkJXAotCQk6ICJhIiAoJl9fbWFzayksICJpIiAoX19hbmQpIDogIm1lbW9yeSIpOwkJXAotCV9fbWFzazsJCQkJCQkJCVwKLX0pCi0KLS8qIHNldCBzeXN0ZW0gbWFzay4gKi8KLSNkZWZpbmUgX19yYXdfbG9jYWxfaXJxX3NzbShfX21hc2spCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKLQkJIglzc20JMCglMCkiCQkJCQlcCi0JCTogOiAiYSIgKCZfX21hc2spLCAibSIgKF9fbWFzaykgOiAibWVtb3J5Iik7CQlcCi19KQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogLyogaW50ZXJydXB0IGNvbnRyb2wuLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJhd19sb2NhbF9pcnFfZW5hYmxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAppbmRleCBjMjVkZmFjLi4wNTUyN2MwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKQEAgLTEsMTQxICsxLDE2IEBACiAvKgotICogIGluY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oCi0gKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciAoaHBAZGUuaWJtLmNvbSksCi0gKiAgICAgICAgICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCi0gKiAgICAgICAgICAgICAgIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDEwCisgKiAgICBBdXRob3Iocyk6IEhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdywKICAqLwogCiAjaWZuZGVmIF9BU01fUzM5MF9MT1dDT1JFX0gKICNkZWZpbmUgX0FTTV9TMzkwX0xPV0NPUkVfSAogCi0jZGVmaW5lIF9fTENfSVBMX1BBUk1CTE9DS19QVFIJCTB4MDAxNAotI2RlZmluZSBfX0xDX0VYVF9QQVJBTVMJCQkweDAwODAKLSNkZWZpbmUgX19MQ19DUFVfQUREUkVTUwkJMHgwMDg0Ci0jZGVmaW5lIF9fTENfRVhUX0lOVF9DT0RFCQkweDAwODYKLQotI2RlZmluZSBfX0xDX1NWQ19JTEMJCQkweDAwODgKLSNkZWZpbmUgX19MQ19TVkNfSU5UX0NPREUJCTB4MDA4YQotI2RlZmluZSBfX0xDX1BHTV9JTEMJCQkweDAwOGMKLSNkZWZpbmUgX19MQ19QR01fSU5UX0NPREUJCTB4MDA4ZQotCi0jZGVmaW5lIF9fTENfUEVSX0FUTUlECQkJMHgwMDk2Ci0jZGVmaW5lIF9fTENfUEVSX0FERFJFU1MJCTB4MDA5OAotI2RlZmluZSBfX0xDX1BFUl9BQ0NFU1NfSUQJCTB4MDBhMQotI2RlZmluZSBfX0xDX0FSX01PREVfSUQJCQkweDAwYTMKLQotI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfSUQJCTB4MDBiOAotI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfTlIJCTB4MDBiYQotI2RlZmluZSBfX0xDX0lPX0lOVF9QQVJNCQkweDAwYmMKLSNkZWZpbmUgX19MQ19JT19JTlRfV09SRAkJMHgwMGMwCi0jZGVmaW5lIF9fTENfU1RGTF9GQUNfTElTVAkJMHgwMGM4Ci0jZGVmaW5lIF9fTENfTUNDS19DT0RFCQkJMHgwMGU4Ci0KLSNkZWZpbmUgX19MQ19EVU1QX1JFSVBMCQkJMHgwZTAwCi0KLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIF9fTENfRVhUX09MRF9QU1cJCTB4MDAxOAotI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXCQkweDAwMjAKLSNkZWZpbmUgX19MQ19QR01fT0xEX1BTVwkJMHgwMDI4Ci0jZGVmaW5lIF9fTENfTUNLX09MRF9QU1cJCTB4MDAzMAotI2RlZmluZSBfX0xDX0lPX09MRF9QU1cJCQkweDAwMzgKLSNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVwkJMHgwMDU4Ci0jZGVmaW5lIF9fTENfU1ZDX05FV19QU1cJCTB4MDA2MAotI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXCQkweDAwNjgKLSNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVwkJMHgwMDcwCi0jZGVmaW5lIF9fTENfSU9fTkVXX1BTVwkJCTB4MDA3OAotI2RlZmluZSBfX0xDX1NBVkVfQVJFQQkJCTB4MDIwMAotI2RlZmluZSBfX0xDX1JFVFVSTl9QU1cJCQkweDAyNDAKLSNkZWZpbmUgX19MQ19SRVRVUk5fTUNDS19QU1cJCTB4MDI0OAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MDI1MAotI2RlZmluZSBfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCQkweDAyNTgKLSNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgwMjYwCi0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MDI2OAotI2RlZmluZSBfX0xDX1NZU1RFTV9USU1FUgkJMHgwMjcwCi0jZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4MDI3OAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDAyODAKLSNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9DTE9DSwkJMHgwMjg4Ci0jZGVmaW5lIF9fTENfQ1VSUkVOVAkJCTB4MDI5MAotI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweDAyOTQKLSNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sJCTB4MDI5OAotI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLCQkweDAyOWMKLSNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSwkJMHgwMmEwCi0jZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4MDJhNAotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4MDJhOAotI2RlZmluZSBfX0xDX1VTRVJfRVhFQ19BU0NFCQkweDAyYWMKLSNkZWZpbmUgX19MQ19DUFVJRAkJCTB4MDJiMAotI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4MDJjOAotI2RlZmluZSBfX0xDX01BQ0hJTkVfRkxBR1MJCTB4MDJkOAotI2RlZmluZSBfX0xDX0ZUUkFDRV9GVU5DCQkweDAyZGMKLSNkZWZpbmUgX19MQ19JUkIJCQkweDAzMDAKLSNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTQkJMHgwMDgwCi0jZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQkweDAwZDgKLSNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDAwZTAKLSNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDAxMDAKLSNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDAxMDgKLSNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEJCTB4MDEyMAotI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MDE2MAotI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEJCTB4MDE4MAotI2RlZmluZSBfX0xDX0NSRUdTX1NBVkVfQVJFQQkJMHgwMWMwCi0jZWxzZSAvKiBfX3MzOTB4X18gKi8KLSNkZWZpbmUgX19MQ19MQVNUX0JSRUFLCQkJMHgwMTEwCi0jZGVmaW5lIF9fTENfRVhUX09MRF9QU1cJCTB4MDEzMAotI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXCQkweDAxNDAKLSNkZWZpbmUgX19MQ19QR01fT0xEX1BTVwkJMHgwMTUwCi0jZGVmaW5lIF9fTENfTUNLX09MRF9QU1cJCTB4MDE2MAotI2RlZmluZSBfX0xDX0lPX09MRF9QU1cJCQkweDAxNzAKLSNkZWZpbmUgX19MQ19SRVNUQVJUX1BTVwkJMHgwMWEwCi0jZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDFiMAotI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAxYzAKLSNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMWQwCi0jZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDFlMAotI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAxZjAKLSNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKLSNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjgwCi0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyOTAKLSNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyYTAKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMmE4Ci0jZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDJiMAotI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyYjgKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDJjMAotI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyYzgKLSNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMmQwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDJkOAotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyZTAKLSNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMmU4Ci0jZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyZjAKLSNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMmY4Ci0jZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDMwMAotI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAzMDgKLSNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAzMTAKLSNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMzE4Ci0jZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAzMjAKLSNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAzNDAKLSNkZWZpbmUgX19MQ19WRFNPX1BFUl9DUFUJCTB4MDM1MAotI2RlZmluZSBfX0xDX01BQ0hJTkVfRkxBR1MJCTB4MDM1OAotI2RlZmluZSBfX0xDX0ZUUkFDRV9GVU5DCQkweDAzNjAKLSNkZWZpbmUgX19MQ19JUkIJCQkweDAzODAKLSNkZWZpbmUgX19MQ19QQVNURQkJCTB4MDNjMAotI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNCQkweDExYjgKLSNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDEyMDAKLSNkZWZpbmUgX19MQ19HUFJFR1NfU0FWRV9BUkVBCQkweDEyODAKLSNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEzMDAKLSNkZWZpbmUgX19MQ19QUkVGSVhfU0FWRV9BUkVBCQkweDEzMTgKLSNkZWZpbmUgX19MQ19GUF9DUkVHX1NBVkVfQVJFQQkJMHgxMzFjCi0jZGVmaW5lIF9fTENfVE9EUkVHX1NBVkVfQVJFQQkJMHgxMzI0Ci0jZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQkweDEzMjgKLSNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDEzMzEKLSNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEJCTB4MTM0MAotI2RlZmluZSBfX0xDX0NSRUdTX1NBVkVfQVJFQQkJMHgxMzgwCi0jZW5kaWYgLyogX19zMzkweF9fICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDxhc20vY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KIAogdm9pZCByZXN0YXJ0X2ludF9oYW5kbGVyKHZvaWQpOwogdm9pZCBleHRfaW50X2hhbmRsZXIodm9pZCk7CkBAIC0xNDQsNyArMTksMTIgQEAKIHZvaWQgbWNja19pbnRfaGFuZGxlcih2b2lkKTsKIHZvaWQgaW9faW50X2hhbmRsZXIodm9pZCk7CiAKLXN0cnVjdCBzYXZlX2FyZWFfczM5MCB7CisjaWZkZWYgQ09ORklHXzMyQklUCisKKyNkZWZpbmUgTENfT1JERVIgMAorI2RlZmluZSBMQ19QQUdFUyAxCisKK3N0cnVjdCBzYXZlX2FyZWEgewogCXUzMglleHRfc2F2ZTsKIAl1NjQJdGltZXI7CiAJdTY0CWNsa19jbXA7CkBAIC0xNTYsNTQgKzM2LDEzIEBACiAJdTY0CWZwX3JlZ3NbNF07CiAJdTMyCWdwX3JlZ3NbMTZdOwogCXUzMgljdHJsX3JlZ3NbMTZdOwotfSAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCi1zdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4IHsKLQl1NjQJZnBfcmVnc1sxNl07Ci0JdTY0CWdwX3JlZ3NbMTZdOwotCXU4CXBzd1sxNl07Ci0JdTgJcGFkMVs4XTsKLQl1MzIJcHJlZl9yZWc7Ci0JdTMyCWZwX2N0cmxfcmVnOwotCXU4CXBhZDJbNF07Ci0JdTMyCXRvZF9yZWc7Ci0JdTY0CXRpbWVyOwotCXU2NAljbGtfY21wOwotCXU4CXBhZDNbOF07Ci0JdTMyCWFjY19yZWdzWzE2XTsKLQl1NjQJY3RybF9yZWdzWzE2XTsKLX0gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi11bmlvbiBzYXZlX2FyZWEgewotCXN0cnVjdCBzYXZlX2FyZWFfczM5MAlzMzkwOwotCXN0cnVjdCBzYXZlX2FyZWFfczM5MHgJczM5MHg7Ci19OwotCi0jZGVmaW5lIFNBVkVfQVJFQV9CQVNFX1MzOTAJMHhkNAotI2RlZmluZSBTQVZFX0FSRUFfQkFTRV9TMzkwWAkweDEyMDAKLQotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgU0FWRV9BUkVBX1NJWkUgc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MCkKLSNkZWZpbmUgU0FWRV9BUkVBX0JBU0UgU0FWRV9BUkVBX0JBU0VfUzM5MAotI2Vsc2UKLSNkZWZpbmUgU0FWRV9BUkVBX1NJWkUgc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgpCi0jZGVmaW5lIFNBVkVfQVJFQV9CQVNFIFNBVkVfQVJFQV9CQVNFX1MzOTBYCi0jZW5kaWYKLQotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgTENfT1JERVIgMAotI2Vsc2UKLSNkZWZpbmUgTENfT1JERVIgMQotI2VuZGlmCi0KLSNkZWZpbmUgTENfUEFHRVMgKDFVTCA8PCBMQ19PUkRFUikKLQotc3RydWN0IF9sb3djb3JlCi17Ci0jaWZuZGVmIF9fczM5MHhfXwotCS8qIDB4MDAwMCAtIDB4MDFmZjogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KK3N0cnVjdCBfbG93Y29yZSB7CiAJcHN3X3QJcmVzdGFydF9wc3c7CQkJLyogMHgwMDAwICovCi0JX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KKwlwc3dfdAlyZXN0YXJ0X29sZF9wc3c7CQkvKiAweDAwMDggKi8KKwlfX3U4CXBhZF8weDAwMTBbMHgwMDE0LTB4MDAxMF07CS8qIDB4MDAxMCAqLworCV9fdTMyCWlwbF9wYXJtYmxvY2tfcHRyOwkJLyogMHgwMDE0ICovCiAJcHN3X3QJZXh0ZXJuYWxfb2xkX3BzdzsJCS8qIDB4MDAxOCAqLwogCXBzd190CXN2Y19vbGRfcHN3OwkJCS8qIDB4MDAyMCAqLwogCXBzd190CXByb2dyYW1fb2xkX3BzdzsJCS8qIDB4MDAyOCAqLwpAQCAtMjI5LDcgKzY4LDkgQEAKIAlfX3UzMgltb25pdG9yX2NvZGU7CQkJLyogMHgwMDljICovCiAJX191OAlleGNfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMCAqLwogCV9fdTgJcGVyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTEgKi8KLQlfX3U4CXBhZF8weDAwYTJbMHgwMGI4LTB4MDBhMl07CS8qIDB4MDBhMiAqLworCV9fdTgJb3BfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMiAqLworCV9fdTgJYXJfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMyAqLworCV9fdTgJcGFkXzB4MDBhNFsweDAwYjgtMHgwMGE0XTsJLyogMHgwMGE0ICovCiAJX191MTYJc3ViY2hhbm5lbF9pZDsJCQkvKiAweDAwYjggKi8KIAlfX3UxNglzdWJjaGFubmVsX25yOwkJCS8qIDB4MDBiYSAqLwogCV9fdTMyCWlvX2ludF9wYXJtOwkJCS8qIDB4MDBiYyAqLwpAQCAtMjQ1LDggKzg2LDkgQEAKIAlfX3UzMglleHRlcm5hbF9kYW1hZ2VfY29kZTsJCS8qIDB4MDBmNCAqLwogCV9fdTMyCWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOwkvKiAweDAwZjggKi8KIAlfX3U4CXBhZF8weDAwZmNbMHgwMTAwLTB4MDBmY107CS8qIDB4MDBmYyAqLwotCV9fdTMyCXN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07CS8qIDB4MDEwMCAqLwotCV9fdTgJcGFkXzB4MDExMFsweDAxMjAtMHgwMTEwXTsJLyogMHgwMTEwICovCisJcHN3X3QJcHN3X3NhdmVfYXJlYTsJCQkvKiAweDAxMDAgKi8KKwlfX3UzMglwcmVmaXhyZWdfc2F2ZV9hcmVhOwkJLyogMHgwMTA4ICovCisJX191OAlwYWRfMHgwMTBjWzB4MDEyMC0weDAxMGNdOwkvKiAweDAxMGMgKi8KIAogCS8qIENQVSByZWdpc3RlciBzYXZlIGFyZWE6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCiAJX191MzIJYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJLyogMHgwMTIwICovCkBAIC0zMTAsMTAgKzE1MiwzMiBAQAogCiAJLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLwogCV9fdTgJcGFkXzB4MGUwOFsweDEwMDAtMHgwZTA4XTsJLyogMHgwZTA4ICovCi0jZWxzZSAvKiAhX19zMzkweF9fICovCi0JLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwotCV9fdTMyCWNjdzFbMl07CQkJLyogMHgwMDAwICovCi0JX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KK30gX19wYWNrZWQ7CisKKyNlbHNlIC8qIENPTkZJR18zMkJJVCAqLworCisjZGVmaW5lIExDX09SREVSIDEKKyNkZWZpbmUgTENfUEFHRVMgMgorCitzdHJ1Y3Qgc2F2ZV9hcmVhIHsKKwl1NjQJZnBfcmVnc1sxNl07CisJdTY0CWdwX3JlZ3NbMTZdOworCXU4CXBzd1sxNl07CisJdTgJcGFkMVs4XTsKKwl1MzIJcHJlZl9yZWc7CisJdTMyCWZwX2N0cmxfcmVnOworCXU4CXBhZDJbNF07CisJdTMyCXRvZF9yZWc7CisJdTY0CXRpbWVyOworCXU2NAljbGtfY21wOworCXU4CXBhZDNbOF07CisJdTMyCWFjY19yZWdzWzE2XTsKKwl1NjQJY3RybF9yZWdzWzE2XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfbG93Y29yZSB7CisJX191OAlwYWRfMHgwMDAwWzB4MDAxNC0weDAwMDBdOwkvKiAweDAwMDAgKi8KKwlfX3UzMglpcGxfcGFybWJsb2NrX3B0cjsJCS8qIDB4MDAxNCAqLwogCV9fdTgJcGFkXzB4MDAxOFsweDAwODAtMHgwMDE4XTsJLyogMHgwMDE4ICovCiAJX191MzIJZXh0X3BhcmFtczsJCQkvKiAweDAwODAgKi8KIAlfX3UxNgljcHVfYWRkcjsJCQkvKiAweDAwODQgKi8KQEAgLTM0NCw3ICsyMDgsOSBAQAogCV9fdTgJcGFkXzB4MDBmMFsweDAwZjQtMHgwMGYwXTsJLyogMHgwMGYwICovCiAJX191MzIJZXh0ZXJuYWxfZGFtYWdlX2NvZGU7CQkvKiAweDAwZjQgKi8KIAlhZGRyX3QJZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7CS8qIDB4MDBmOCAqLwotCV9fdTgJcGFkXzB4MDEwMFsweDAxMjAtMHgwMTAwXTsJLyogMHgwMTAwICovCisJX191OAlwYWRfMHgwMTAwWzB4MDExMC0weDAxMDBdOwkvKiAweDAxMDAgKi8KKwlfX3U2NAlicmVha2luZ19ldmVudF9hZGRyOwkJLyogMHgwMTEwICovCisJX191OAlwYWRfMHgwMTE4WzB4MDEyMC0weDAxMThdOwkvKiAweDAxMTggKi8KIAlwc3dfdAlyZXN0YXJ0X29sZF9wc3c7CQkvKiAweDAxMjAgKi8KIAlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMTMwICovCiAJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMTQwICovCkBAIC00MjUsNyArMjkxLDcgQEAKIAkvKiBDUFUgcmVnaXN0ZXIgc2F2ZSBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwogCV9fdTY0CWZsb2F0aW5nX3B0X3NhdmVfYXJlYVsxNl07CS8qIDB4MTIwMCAqLwogCV9fdTY0CWdwcmVnc19zYXZlX2FyZWFbMTZdOwkJLyogMHgxMjgwICovCi0JX191MzIJc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsJLyogMHgxMzAwICovCisJcHN3X3QJcHN3X3NhdmVfYXJlYTsJCQkvKiAweDEzMDAgKi8KIAlfX3U4CXBhZF8weDEzMTBbMHgxMzE4LTB4MTMxMF07CS8qIDB4MTMxMCAqLwogCV9fdTMyCXByZWZpeHJlZ19zYXZlX2FyZWE7CQkvKiAweDEzMTggKi8KIAlfX3UzMglmcHRfY3JlZ19zYXZlX2FyZWE7CQkvKiAweDEzMWMgKi8KQEAgLTQzOSwxMCArMzA1LDEyIEBACiAKIAkvKiBhbGlnbiB0byB0aGUgdG9wIG9mIHRoZSBwcmVmaXggYXJlYSAqLwogCV9fdTgJcGFkXzB4MTQwMFsweDIwMDAtMHgxNDAwXTsJLyogMHgxNDAwICovCi0jZW5kaWYgLyogIV9fczM5MHhfXyAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgLyogRW5kIHN0cnVjdHVyZSovCit9IF9fcGFja2VkOworCisjZW5kaWYgLyogQ09ORklHXzMyQklUICovCiAKICNkZWZpbmUgUzM5MF9sb3djb3JlICgqKChzdHJ1Y3QgX2xvd2NvcmUgKikgMCkpCisKIGV4dGVybiBzdHJ1Y3QgX2xvd2NvcmUgKmxvd2NvcmVfcHRyW107CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHJlZml4KF9fdTMyIGFkZHJlc3MpCkBAIC00NTgsNiArMzI2LDQgQEAKIAlyZXR1cm4gYWRkcmVzczsKIH0KIAotI2VuZGlmCi0KLSNlbmRpZgorI2VuZGlmIC8qIF9BU01fUzM5MF9MT1dDT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDVlOWRhZjUuLmFmNjUwZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTA3LDkgKzEwNyw2IEBACiAjZGVmaW5lIF9fcGdkKHgpICAgICAgICAoKHBnZF90KSB7ICh4KSB9ICkKICNkZWZpbmUgX19wZ3Byb3QoeCkgICAgICgocGdwcm90X3QpIHsgKHgpIH0gKQogCi0vKiBkZWZhdWx0IHN0b3JhZ2Uga2V5IHVzZWQgZm9yIGFsbCBwYWdlcyAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBkZWZhdWx0X3N0b3JhZ2Vfa2V5OwotCiBzdGF0aWMgaW5saW5lIHZvaWQKIHBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNrZXkpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggYjQyNzE1NC4uNzNlMjU5OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMjgsNyArMjgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2NwdV9pZChzdHJ1Y3QgY3B1aWQgKnB0cikKIHsKLQlhc20gdm9sYXRpbGUoInN0aWRwIDAoJTEpIiA6ICI9bSIgKCpwdHIpIDogImEiIChwdHIpKTsKKwlhc20gdm9sYXRpbGUoInN0aWRwICUwIiA6ICI9USIgKCpwdHIpKTsKIH0KIAogZXh0ZXJuIHZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKTsKQEAgLTE4NCw5ICsxODQsOSBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fbG9hZF9wc3cocHN3X3QgcHN3KQogewogI2lmbmRlZiBfX3MzOTB4X18KLQlhc20gdm9sYXRpbGUoImxwc3cgIDAoJTApIiA6IDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogImNjIik7CisJYXNtIHZvbGF0aWxlKCJscHN3ICAlMCIgOiA6ICJRIiAocHN3KSA6ICJjYyIpOwogI2Vsc2UKLQlhc20gdm9sYXRpbGUoImxwc3dlIDAoJTApIiA6IDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogImNjIik7CisJYXNtIHZvbGF0aWxlKCJscHN3ZSAlMCIgOiA6ICJRIiAocHN3KSA6ICJjYyIpOwogI2VuZGlmCiB9CiAKQEAgLTIwNiwxNyArMjA2LDE3IEBACiAJYXNtIHZvbGF0aWxlKAogCQkiCWJhc3IJJTAsMFxuIgogCQkiMDoJYWhpCSUwLDFmLTBiXG4iCi0JCSIJc3QJJTAsNCglMSlcbiIKLQkJIglscHN3CTAoJTEpXG4iCisJCSIJc3QJJTAsJU8xKzQoJVIxKVxuIgorCQkiCWxwc3cJJTFcbiIKIAkJIjE6IgotCQk6ICI9JmQiIChhZGRyKSA6ICJhIiAoJnBzdyksICJtIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiKTsKKwkJOiAiPSZkIiAoYWRkciksICI9USIgKHBzdykgOiAiUSIgKHBzdykgOiAibWVtb3J5IiwgImNjIik7CiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAlhc20gdm9sYXRpbGUoCiAJCSIJbGFybAklMCwxZlxuIgotCQkiCXN0ZwklMCw4KCUxKVxuIgotCQkiCWxwc3dlCTAoJTEpXG4iCisJCSIJc3RnCSUwLCVPMSs4KCVSMSlcbiIKKwkJIglscHN3ZQklMVxuIgogCQkiMToiCi0JCTogIj0mZCIgKGFkZHIpIDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogIm1lbW9yeSIsICJjYyIpOworCQk6ICI9JmQiIChhZGRyKSwgIj1RIiAocHN3KSA6ICJRIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiKTsKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIH0KICAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA5NWRjZjE4Li5kZDJkOTEzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC00OTIsMTMgKzQ5MiwyNCBAQAogc3RydWN0IHRhc2tfc3RydWN0OwogZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwogCiAjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoKChyZWdzKS0+cHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpICE9IDApCiAjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cHN3LmFkZHIgJiBQU1dfQUREUl9JTlNOKQogI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykoKHJlZ3MpLT5ncHJzWzE1XSkKICNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUocmVncykoKHJlZ3MpLT5ncHJzWzJdKQogI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKLWV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOworCitpbnQgcmVnc19xdWVyeV9yZWdpc3Rlcl9vZmZzZXQoY29uc3QgY2hhciAqbmFtZSk7Citjb25zdCBjaGFyICpyZWdzX3F1ZXJ5X3JlZ2lzdGVyX25hbWUodW5zaWduZWQgaW50IG9mZnNldCk7Cit1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKK3Vuc2lnbmVkIGxvbmcgcmVnc19nZXRfa2VybmVsX3N0YWNrX250aChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG4pOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga2VybmVsX3N0YWNrX3BvaW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIHJlZ3MtPmdwcnNbMTVdICYgUFNXX0FERFJfSU5TTjsKK30KKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggNzlkODQ5Zi4uYzY2NmJmZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0xMyw3ICsxMyw4IEBACiAjaW5jbHVkZSA8YXNtL2Npby5oPgogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KIAotI2RlZmluZSBRRElPX01BWF9RVUVVRVNfUEVSX0lSUQkJMzIKKy8qIG9ubHkgdXNlIDQgcXVldWVzIHRvIHNhdmUgc29tZSBjYWNoZWxpbmVzICovCisjZGVmaW5lIFFESU9fTUFYX1FVRVVFU19QRVJfSVJRCQk0CiAjZGVmaW5lIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EJCTEyOAogI2RlZmluZSBRRElPX01BWF9CVUZGRVJTX01BU0sJCShRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gMSkKICNkZWZpbmUgUURJT19NQVhfRUxFTUVOVFNfUEVSX0JVRkZFUgkxNgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3J3c2VtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcndzZW0uaAppbmRleCA5ZDJhMTc5Li40MjNmZGRhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcndzZW0uaApAQCAtMTI0LDIxICsxMjQsMjEgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYWhpCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhaGkJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIJbGcJJTAsMCglMylcbiIKKwkJIglsZwklMCwlMlxuIgogCQkiMDoJbGdyCSUxLCUwXG4iCi0JCSIJYWdoaQklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFnaGkJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksCi0JCSAgImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKSA6ICJjYyIsICJtZW1vcnkiKTsKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAob2xkIDwgMCkKIAkJcndzZW1fZG93bl9yZWFkX2ZhaWxlZChzZW0pOwogfQpAQCAtMTUyLDI1ICsxNTIsMjUgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWx0cgklMSwlMFxuIgogCQkiCWptCTFmXG4iCi0JCSIJYWhpCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhaGkJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiXG4iCiAJCSIxOiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWx0Z3IJJTEsJTBcbiIKIAkJIglqbQkxZlxuIgotCQkiCWFnaGkJJTEsJTVcbiIKLQkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglhZ2hpCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGJcbiIKIAkJIjE6IgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKLQkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwKLQkJICAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpIDogImNjIiwgIm1lbW9yeSIpOworCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBvbGQgPj0gMCA/IDEgOiAwOwogfQogCkBAIC0xODQsMjAgKzE4NCwyMCBAQAogCXRtcCA9IFJXU0VNX0FDVElWRV9XUklURV9CSUFTOwogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYQklMSwlNFxuIgorCQkiCWNzCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIglsZwklMCwwKCUzKVxuIgorCQkiCWxnCSUwLCUyXG4iCiAJCSIwOglsZ3IJJTEsJTBcbiIKLQkJIglhZwklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFnCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgIm0iICh0bXApCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCWlmIChvbGQgIT0gMCkKIAkJcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc2VtKTsKQEAgLTIxNywyMiArMjE3LDIyIEBACiAKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMilcbiIKKwkJIglsCSUwLCUxXG4iCiAJCSIwOglsdHIJJTAsJTBcbiIKIAkJIglqbnoJMWZcbiIKLQkJIgljcwklMCwlNCwwKCUyKVxuIgorCQkiCWNzCSUwLCUzLCUxXG4iCiAJCSIJamwJMGJcbiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTIpXG4iCisJCSIJbGcJJTAsJTFcbiIKIAkJIjA6CWx0Z3IJJTAsJTBcbiIKIAkJIglqbnoJMWZcbiIKLQkJIgljc2cJJTAsJTQsMCglMilcbiIKKwkJIgljc2cJJTAsJTMsJTFcbiIKIAkJIglqbAkwYlxuIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCQkiMToiCi0JCTogIj0mZCIgKG9sZCksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksCi0JCSAgImQiIChSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykgOiAiY2MiLCAibWVtb3J5Iik7CisJCTogIj0mZCIgKG9sZCksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImQiIChSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIChvbGQgPT0gUldTRU1fVU5MT0NLRURfVkFMVUUpID8gMSA6IDA7CiB9CiAKQEAgLTI0NSwyMSArMjQ1LDIwIEBACiAKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMylcbiIKKwkJIglsCSUwLCUyXG4iCiAJCSIwOglscgklMSwlMFxuIgotCQkiCWFoaQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYWhpCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnaGkJJTEsJTVcbiIKLQkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglhZ2hpCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLAotCQkgICJpIiAoLVJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPVEiIChzZW0tPmNvdW50KQorCQk6ICJRIiAoc2VtLT5jb3VudCksICJpIiAoLVJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCWlmIChuZXcgPCAwKQogCQlpZiAoKG5ldyAmIFJXU0VNX0FDVElWRV9NQVNLKSA9PSAwKQpAQCAtMjc2LDIwICsyNzUsMjAgQEAKIAl0bXAgPSAtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWcJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJtIiAodG1wKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJaWYgKG5ldyA8IDApCiAJCWlmICgobmV3ICYgUldTRU1fQUNUSVZFX01BU0spID09IDApCkBAIC0zMDYsMjAgKzMwNSwyMCBAQAogCXRtcCA9IC1SV1NFTV9XQUlUSU5HX0JJQVM7CiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWcJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJtIiAodG1wKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJaWYgKG5ldyA+IDEpCiAJCXJ3c2VtX2Rvd25ncmFkZV93YWtlKHNlbSk7CkBAIC0zMzQsMjAgKzMzMywyMCBAQAogCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhcgklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYXIJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIJbGcJJTAsMCglMylcbiIKKwkJIglsZwklMCwlMlxuIgogCQkiMDoJbGdyCSUxLCUwXG4iCi0JCSIJYWdyCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWdyCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAiZCIgKGRlbHRhKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAiZCIgKGRlbHRhKQogCQk6ICJjYyIsICJtZW1vcnkiKTsKIH0KIApAQCAtMzYwLDIwICszNTksMjAgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYXIJJTEsJTVcbiIKLQkJIgljcwklMCwlMSwwKCUzKVxuIgorCQkiCWFyCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFncgklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFncgklMSwlNFxuIgorCQkiCWNzZwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKLQkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwgImQiIChkZWx0YSkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImQiIChkZWx0YSkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIG5ldzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggNTJhNzc5Yy4uOWFiNmJkMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTE0LDE0ICsxNCwxNCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQogI2RlZmluZSBQQVJNQVJFQQkJMHgxMDQwMAogI2RlZmluZSBNRU1PUllfQ0hVTktTCQkyNTYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKICNpZm5kZWYgX19zMzkweF9fCiAjZGVmaW5lIElQTF9ERVZJQ0UgICAgICAgICgqKHVuc2lnbmVkIGxvbmcgKikgICgweDEwNDA0KSkKICNkZWZpbmUgSU5JVFJEX1NUQVJUICAgICAgKCoodW5zaWduZWQgbG9uZyAqKSAgKDB4MTA0MEMpKQpAQCAtNzEsOSArNzEsMTIgQEAKICNkZWZpbmUgTUFDSElORV9GTEFHX0tWTQkoMVVMIDw8IDkpCiAjZGVmaW5lIE1BQ0hJTkVfRkxBR19IUEFHRQkoMVVMIDw8IDEwKQogI2RlZmluZSBNQUNISU5FX0ZMQUdfUEZNRgkoMVVMIDw8IDExKQorI2RlZmluZSBNQUNISU5FX0ZMQUdfTFBBUgkoMVVMIDw8IDEyKQogCiAjZGVmaW5lIE1BQ0hJTkVfSVNfVk0JCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19WTSkKICNkZWZpbmUgTUFDSElORV9JU19LVk0JCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19LVk0pCisjZGVmaW5lIE1BQ0hJTkVfSVNfTFBBUgkJKFMzOTBfbG93Y29yZS5tYWNoaW5lX2ZsYWdzICYgTUFDSElORV9GTEFHX0xQQVIpCisKICNkZWZpbmUgTUFDSElORV9IQVNfRElBRzlDCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19ESUFHOUMpCiAKICNpZm5kZWYgX19zMzkweF9fCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2lncC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NpZ3AuaAppbmRleCBmNzJkNjExLi5lM2JmZmQ0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2lncC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zaWdwLmgKQEAgLTEsMjQgKzEsMTkgQEAKIC8qCi0gKiAgaW5jbHVkZS9hc20tczM5MC9zaWdwLmgKKyAqICBSb3V0aW5lcyBhbmQgc3RydWN0dXJlcyBmb3Igc2lnbmFsbGluZyBvdGhlciBwcm9jZXNzb3JzLgogICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSksCi0gKiAgICAgICAgICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKLSAqICAgICAgICAgICAgICAgSGVpa28gQ2Fyc3RlbnMgKGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20pCi0gKgotICogIHNpZ3AuaCBieSBELkouIEJhcnJvdyAoYykgSUJNIDE5OTkKLSAqICBjb250YWlucyByb3V0aW5lcyAvIHN0cnVjdHVyZXMgZm9yIHNpZ25hbGxpbmcgb3RoZXIgUy8zOTAgcHJvY2Vzc29ycyBpbiBhbgotICogIFNNUCBjb25maWd1cmF0aW9uLgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMTAKKyAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdywKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAogICovCiAKLSNpZm5kZWYgX19TSUdQX18KLSNkZWZpbmUgX19TSUdQX18KKyNpZm5kZWYgX19BU01fU0lHUF9ICisjZGVmaW5lIF9fQVNNX1NJR1BfSAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0vKiBnZXQgcmVhbCBjcHUgYWRkcmVzcyBmcm9tIGxvZ2ljYWwgY3B1IG51bWJlciAqLwotZXh0ZXJuIGludCBfX2NwdV9sb2dpY2FsX21hcFtdOworLyogR2V0IHJlYWwgY3B1IGFkZHJlc3MgZnJvbSBsb2dpY2FsIGNwdSBudW1iZXIuICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19jcHVfbG9naWNhbF9tYXBbXTsKIAogc3RhdGljIGlubGluZSBpbnQgY3B1X2xvZ2ljYWxfbWFwKGludCBjcHUpCiB7CkBAIC0yOSwxMDcgKzI0LDEwOCBAQAogI2VuZGlmCiB9CiAKLXR5cGVkZWYgZW51bQotewotCXNpZ3BfdW5hc3NpZ25lZD0weDAsCi0Jc2lncF9zZW5zZSwKLQlzaWdwX2V4dGVybmFsX2NhbGwsCi0Jc2lncF9lbWVyZ2VuY3lfc2lnbmFsLAotCXNpZ3Bfc3RhcnQsCi0Jc2lncF9zdG9wLAotCXNpZ3BfcmVzdGFydCwKLQlzaWdwX3VuYXNzaWduZWQxLAotCXNpZ3BfdW5hc3NpZ25lZDIsCi0Jc2lncF9zdG9wX2FuZF9zdG9yZV9zdGF0dXMsCi0Jc2lncF91bmFzc2lnbmVkMywKLQlzaWdwX2luaXRpYWxfY3B1X3Jlc2V0LAotCXNpZ3BfY3B1X3Jlc2V0LAotCXNpZ3Bfc2V0X3ByZWZpeCwKLQlzaWdwX3N0b3JlX3N0YXR1c19hdF9hZGRyZXNzLAotCXNpZ3Bfc3RvcmVfZXh0ZW5kZWRfc3RhdHVzX2F0X2FkZHJlc3MKLX0gc2lncF9vcmRlcl9jb2RlOworZW51bSB7CisJc2lncF9zZW5zZSA9IDEsCisJc2lncF9leHRlcm5hbF9jYWxsID0gMiwKKwlzaWdwX2VtZXJnZW5jeV9zaWduYWwgPSAzLAorCXNpZ3Bfc3RhcnQgPSA0LAorCXNpZ3Bfc3RvcCA9IDUsCisJc2lncF9yZXN0YXJ0ID0gNiwKKwlzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cyA9IDksCisJc2lncF9pbml0aWFsX2NwdV9yZXNldCA9IDExLAorCXNpZ3BfY3B1X3Jlc2V0ID0gMTIsCisJc2lncF9zZXRfcHJlZml4ID0gMTMsCisJc2lncF9zdG9yZV9zdGF0dXNfYXRfYWRkcmVzcyA9IDE0LAorCXNpZ3Bfc3RvcmVfZXh0ZW5kZWRfc3RhdHVzX2F0X2FkZHJlc3MgPSAxNSwKKwlzaWdwX3NldF9hcmNoaXRlY3R1cmUgPSAxOCwKKwlzaWdwX2NvbmRpdGlvbmFsX2VtZXJnZW5jeV9zaWduYWwgPSAxOSwKKwlzaWdwX3NlbnNlX3J1bm5pbmcgPSAyMSwKK307CiAKLXR5cGVkZWYgX191MzIgc2lncF9zdGF0dXNfd29yZDsKLQotdHlwZWRlZiBlbnVtCi17Ci0gICAgICAgIHNpZ3Bfb3JkZXJfY29kZV9hY2NlcHRlZD0wLAotCXNpZ3Bfc3RhdHVzX3N0b3JlZCwKLQlzaWdwX2J1c3ksCi0Jc2lncF9ub3Rfb3BlcmF0aW9uYWwKLX0gc2lncF9jY29kZTsKLQorZW51bSB7CisJc2lncF9vcmRlcl9jb2RlX2FjY2VwdGVkID0gMCwKKwlzaWdwX3N0YXR1c19zdG9yZWQgPSAxLAorCXNpZ3BfYnVzeSA9IDIsCisJc2lncF9ub3Rfb3BlcmF0aW9uYWwgPSAzLAorfTsKIAogLyoKLSAqIERlZmluaXRpb25zIGZvciB0aGUgZXh0ZXJuYWwgY2FsbAorICogRGVmaW5pdGlvbnMgZm9yIGV4dGVybmFsIGNhbGwuCiAgKi8KLQotLyogJ0JpdCcgc2lnbmFscywgYXN5bmNocm9ub3VzICovCi10eXBlZGVmIGVudW0KLXsKLQllY19zY2hlZHVsZT0wLAorZW51bSB7CisJZWNfc2NoZWR1bGUgPSAwLAogCWVjX2NhbGxfZnVuY3Rpb24sCiAJZWNfY2FsbF9mdW5jdGlvbl9zaW5nbGUsCi0JZWNfYml0X2xhc3QKLX0gZWNfYml0X3NpZzsKK307CiAKIC8qCi0gKiBTaWduYWwgcHJvY2Vzc29yCisgKiBTaWduYWwgcHJvY2Vzc29yLgogICovCi1zdGF0aWMgaW5saW5lIHNpZ3BfY2NvZGUKLXNpZ25hbF9wcm9jZXNzb3IoX191MTYgY3B1X2FkZHIsIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQorc3RhdGljIGlubGluZSBpbnQgcmF3X3NpZ3AodTE2IGNwdSwgaW50IG9yZGVyKQogewogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMSBhc20gKCIxIikgPSAwOwotCXNpZ3BfY2NvZGUgY2NvZGU7CisJaW50IGNjb2RlOwogCiAJYXNtIHZvbGF0aWxlKAogCQkiCXNpZ3AJJTEsJTIsMCglMylcbiIKIAkJIglpcG0JJTBcbiIKIAkJIglzcmwJJTAsMjhcbiIKIAkJOgkiPWQiCShjY29kZSkKLQkJOiAiZCIgKHJlZzEpLCAiZCIgKGNwdV9sb2dpY2FsX21hcChjcHVfYWRkcikpLAotCQkgICJhIiAob3JkZXJfY29kZSkgOiAiY2MiICwgIm1lbW9yeSIpOworCQk6ICJkIiAocmVnMSksICJkIiAoY3B1KSwKKwkJICAiYSIgKG9yZGVyKSA6ICJjYyIgLCAibWVtb3J5Iik7CiAJcmV0dXJuIGNjb2RlOwogfQogCiAvKgotICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlcgorICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlci4KICAqLwotc3RhdGljIGlubGluZSBzaWdwX2Njb2RlCi1zaWduYWxfcHJvY2Vzc29yX3AoX191MzIgcGFyYW1ldGVyLCBfX3UxNiBjcHVfYWRkciwgc2lncF9vcmRlcl9jb2RlIG9yZGVyX2NvZGUpCitzdGF0aWMgaW5saW5lIGludCByYXdfc2lncF9wKHUzMiBwYXJhbWV0ZXIsIHUxNiBjcHUsIGludCBvcmRlcikKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVnMSBhc20gKCIxIikgPSBwYXJhbWV0ZXI7Ci0Jc2lncF9jY29kZSBjY29kZTsKKwlpbnQgY2NvZGU7CiAKIAlhc20gdm9sYXRpbGUoCiAJCSIJc2lncAklMSwlMiwwKCUzKVxuIgogCQkiCWlwbQklMFxuIgogCQkiCXNybAklMCwyOFxuIgogCQk6ICI9ZCIgKGNjb2RlKQotCQk6ICJkIiAocmVnMSksICJkIiAoY3B1X2xvZ2ljYWxfbWFwKGNwdV9hZGRyKSksCi0JCSAgImEiIChvcmRlcl9jb2RlKSA6ICJjYyIgLCAibWVtb3J5Iik7CisJCTogImQiIChyZWcxKSwgImQiIChjcHUpLAorCQkgICJhIiAob3JkZXIpIDogImNjIiAsICJtZW1vcnkiKTsKIAlyZXR1cm4gY2NvZGU7CiB9CiAKIC8qCi0gKiBTaWduYWwgcHJvY2Vzc29yIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gc3RhdHVzCisgKiBTaWduYWwgcHJvY2Vzc29yIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gc3RhdHVzLgogICovCi1zdGF0aWMgaW5saW5lIHNpZ3BfY2NvZGUKLXNpZ25hbF9wcm9jZXNzb3JfcHMoX191MzIgKnN0YXR1c3B0ciwgX191MzIgcGFyYW1ldGVyLCBfX3UxNiBjcHVfYWRkciwKLQkJICAgIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQorc3RhdGljIGlubGluZSBpbnQgcmF3X3NpZ3BfcHModTMyICpzdGF0dXMsIHUzMiBwYXJtLCB1MTYgY3B1LCBpbnQgb3JkZXIpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlZzEgYXNtICgiMSIpID0gcGFyYW1ldGVyOwotCXNpZ3BfY2NvZGUgY2NvZGU7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlZzEgYXNtICgiMSIpID0gcGFybTsKKwlpbnQgY2NvZGU7CiAKIAlhc20gdm9sYXRpbGUoCiAJCSIJc2lncAklMSwlMiwwKCUzKVxuIgogCQkiCWlwbQklMFxuIgogCQkiCXNybAklMCwyOFxuIgogCQk6ICI9ZCIgKGNjb2RlKSwgIitkIiAocmVnMSkKLQkJOiAiZCIgKGNwdV9sb2dpY2FsX21hcChjcHVfYWRkcikpLCAiYSIgKG9yZGVyX2NvZGUpCisJCTogImQiIChjcHUpLCAiYSIgKG9yZGVyKQogCQk6ICJjYyIgLCAibWVtb3J5Iik7Ci0JKnN0YXR1c3B0ciA9IHJlZzE7CisJKnN0YXR1cyA9IHJlZzE7CiAJcmV0dXJuIGNjb2RlOwogfQogCi0jZW5kaWYgLyogX19TSUdQX18gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNpZ3AoaW50IGNwdSwgaW50IG9yZGVyKQoreworCXJldHVybiByYXdfc2lncChjcHVfbG9naWNhbF9tYXAoY3B1KSwgb3JkZXIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzaWdwX3AodTMyIHBhcmFtZXRlciwgaW50IGNwdSwgaW50IG9yZGVyKQoreworCXJldHVybiByYXdfc2lncF9wKHBhcmFtZXRlciwgY3B1X2xvZ2ljYWxfbWFwKGNwdSksIG9yZGVyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2lncF9wcyh1MzIgKnN0YXR1cywgdTMyIHBhcm0sIGludCBjcHUsIGludCBvcmRlcikKK3sKKwlyZXR1cm4gcmF3X3NpZ3BfcHMoc3RhdHVzLCBwYXJtLCBjcHVfbG9naWNhbF9tYXAoY3B1KSwgb3JkZXIpOworfQorCisjZW5kaWYgLyogX19BU01fU0lHUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMmFiMTE0MS4uZWRjMDNjYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMjksNyArMjksNDMgQEAKIGV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CiAKLWV4dGVybiB1bmlvbiBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOworZXh0ZXJuIHN0cnVjdCBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOworCitleHRlcm4gdm9pZCBzbXBfc3dpdGNoX3RvX2lwbF9jcHUodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKik7CitleHRlcm4gdm9pZCBzbXBfc3dpdGNoX3RvX2NwdSh2b2lkICgqKSh2b2lkICopLCB2b2lkICosIHVuc2lnbmVkIGxvbmcgc3AsCisJCQkgICAgICBpbnQgZnJvbSwgaW50IHRvKTsKK2V4dGVybiB2b2lkIHNtcF9yZXN0YXJ0X2NwdSh2b2lkKTsKKworLyoKKyAqIHJldHVybnMgMSBpZiAodmlydHVhbCkgY3B1IGlzIHNjaGVkdWxlZAorICogcmV0dXJucyAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW5saW5lIGludCBzbXBfdmNwdV9zY2hlZHVsZWQoaW50IGNwdSkKK3sKKwl1MzIgc3RhdHVzOworCisJc3dpdGNoIChzaWdwX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZV9ydW5uaW5nKSkgeworCWNhc2Ugc2lncF9zdGF0dXNfc3RvcmVkOgorCQkvKiBDaGVjayBmb3IgcnVubmluZyBzdGF0dXMgKi8KKwkJaWYgKHN0YXR1cyAmIDB4NDAwKQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2Ugc2lncF9ub3Rfb3BlcmF0aW9uYWw6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMTsKK30KKworI2Vsc2UgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX3N3aXRjaF90b19pcGxfY3B1KHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICpkYXRhKQoreworCWZ1bmMoZGF0YSk7Cit9CisKKyNkZWZpbmUgc21wX3ZjcHVfc2NoZWR1bGVkCSgxKQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IGE1ODc5MDcuLjU2NjEyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xMyw4ICsxMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KIHN0YXRpYyBpbmxpbmUgaW50CiBfcmF3X2NvbXBhcmVfYW5kX3N3YXAodm9sYXRpbGUgdW5zaWduZWQgaW50ICpsb2NrLAogCQkgICAgICB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQpAQCAtMjcsMjIgKzI1LDYgQEAKIAlyZXR1cm4gb2xkOwogfQogCi0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCi1zdGF0aWMgaW5saW5lIGludAotX3Jhd19jb21wYXJlX2FuZF9zd2FwKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqbG9jaywKLQkJICAgICAgdW5zaWduZWQgaW50IG9sZCwgdW5zaWduZWQgaW50IG5ldykKLXsKLQlhc20gdm9sYXRpbGUoCi0JCSIJY3MJJTAsJTMsMCglNCkiCi0JCTogIj1kIiAob2xkKSwgIj1tIiAoKmxvY2spCi0JCTogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAobG9jayksICJtIiAoKmxvY2spCi0JCTogImNjIiwgIm1lbW9yeSIgKTsKLQlyZXR1cm4gb2xkOwotfQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogLyoKICAqIFNpbXBsZSBzcGluIGxvY2sgb3BlcmF0aW9ucy4gIFRoZXJlIGFyZSB0d28gdmFyaWFudHMsIG9uZSBjbGVhcnMgSVJRJ3MKICAqIG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IsIG9uZSBkb2VzIG5vdC4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGViMThkYzEuLjZiZGVlMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtNDcsMTEgKzQ3LDExIEBACiAJCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglpY20JJTAsOCwzKCUxKVxuIgotCQkiCWljbQklMCw0LDIoJTEpXG4iCi0JCSIJaWNtCSUwLDIsMSglMSlcbiIKLQkJIglpYwklMCwwKCUxKSIKLQkJOiAiPSZkIiAocmVzdWx0KSA6ICJhIiAoeCksICJtIiAoKngpIDogImNjIik7CisJCSIJaWNtCSUwLDgsJU8xKzMoJVIxKVxuIgorCQkiCWljbQklMCw0LCVPMSsyKCVSMSlcbiIKKwkJIglpY20JJTAsMiwlTzErMSglUjEpXG4iCisJCSIJaWMJJTAsJTEiCisJCTogIj0mZCIgKHJlc3VsdCkgOiAiUSIgKCp4KSA6ICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCiAJCSIJbHJ2CSUwLCUxIgogCQk6ICI9ZCIgKHJlc3VsdCkgOiAibSIgKCp4KSk7CkBAIC03Nyw5ICs3Nyw5IEBACiAJCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglpY20JJTAsMiwxKCUxKVxuIgotCQkiCWljCSUwLDAoJTEpXG4iCi0JCTogIj0mZCIgKHJlc3VsdCkgOiAiYSIgKHgpLCAibSIgKCp4KSA6ICJjYyIpOworCQkiCWljbQklMCwyLCVPKzEoJVIxKVxuIgorCQkiCWljCSUwLCUxXG4iCisJCTogIj0mZCIgKHJlc3VsdCkgOiAiUSIgKCp4KSA6ICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCiAJCSIJbHJ2aAklMCwlMSIKIAkJOiAiPWQiIChyZXN1bHQpIDogIm0iICgqeCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggZTBhNzNkMy4uODQyOTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC0xNSw2ICsxNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCisvKgorICogVGhlIHN5c2NhbGwgdGFibGUgYWx3YXlzIGNvbnRhaW5zIDMyIGJpdCBwb2ludGVycyBzaW5jZSB3ZSBrbm93IHRoYXQgdGhlCisgKiBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaXMgKHdheSkgYmVsb3cgNEdCLiAgU28gdGhlICJpbnQiCisgKiB0eXBlIGhlcmUgaXMgd2hhdCB3ZSB3YW50IFtuZWVkXSBmb3IgYm90aCAzMiBiaXQgYW5kIDY0IGJpdCBzeXN0ZW1zLgorICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107CisKIHN0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCmluZGV4IDlkNzAwNTcuLjIyYmRiMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaApAQCAtODcsNyArODcsOCBAQAogCiBzdHJ1Y3Qgc3lzaW5mb18zXzJfMiB7CiAJY2hhciByZXNlcnZlZF8wWzMxXTsKLQl1bnNpZ25lZCBjaGFyIGNvdW50OworCXVuc2lnbmVkIGNoYXIgOjQ7CisJdW5zaWduZWQgY2hhciBjb3VudDo0OwogCXN0cnVjdCB7CiAJCWNoYXIgcmVzZXJ2ZWRfMFs0XTsKIAkJdW5zaWduZWQgc2hvcnQgY3B1c190b3RhbDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAzNzk2NjFkLi42N2VlNmMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0yNCw2NSArMjQsNjUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX2ZwX3JlZ3MoczM5MF9mcF9yZWdzICpmcHJlZ3MpCiB7CiAJYXNtIHZvbGF0aWxlKAotCQkiCXN0ZAkwLDgoJTEpXG4iCi0JCSIJc3RkCTIsMjQoJTEpXG4iCi0JCSIJc3RkCTQsNDAoJTEpXG4iCi0JCSIJc3RkCTYsNTYoJTEpIgotCQk6ICI9bSIgKCpmcHJlZ3MpIDogImEiIChmcHJlZ3MpLCAibSIgKCpmcHJlZ3MpIDogIm1lbW9yeSIpOworCQkiCXN0ZAkwLCVPMCs4KCVSMClcbiIKKwkJIglzdGQJMiwlTzArMjQoJVIwKVxuIgorCQkiCXN0ZAk0LCVPMCs0MCglUjApXG4iCisJCSIJc3RkCTYsJU8wKzU2KCVSMCkiCisJCTogIj1RIiAoKmZwcmVncykgOiAiUSIgKCpmcHJlZ3MpKTsKIAlpZiAoIU1BQ0hJTkVfSEFTX0lFRUUpCiAJCXJldHVybjsKIAlhc20gdm9sYXRpbGUoCi0JCSIJc3RmcGMJMCglMSlcbiIKLQkJIglzdGQJMSwxNiglMSlcbiIKLQkJIglzdGQJMywzMiglMSlcbiIKLQkJIglzdGQJNSw0OCglMSlcbiIKLQkJIglzdGQJNyw2NCglMSlcbiIKLQkJIglzdGQJOCw3MiglMSlcbiIKLQkJIglzdGQJOSw4MCglMSlcbiIKLQkJIglzdGQJMTAsODgoJTEpXG4iCi0JCSIJc3RkCTExLDk2KCUxKVxuIgotCQkiCXN0ZAkxMiwxMDQoJTEpXG4iCi0JCSIJc3RkCTEzLDExMiglMSlcbiIKLQkJIglzdGQJMTQsMTIwKCUxKVxuIgotCQkiCXN0ZAkxNSwxMjgoJTEpXG4iCi0JCTogIj1tIiAoKmZwcmVncykgOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykgOiAibWVtb3J5Iik7CisJCSIJc3RmcGMJJTBcbiIKKwkJIglzdGQJMSwlTzArMTYoJVIwKVxuIgorCQkiCXN0ZAkzLCVPMCszMiglUjApXG4iCisJCSIJc3RkCTUsJU8wKzQ4KCVSMClcbiIKKwkJIglzdGQJNywlTzArNjQoJVIwKVxuIgorCQkiCXN0ZAk4LCVPMCs3MiglUjApXG4iCisJCSIJc3RkCTksJU8wKzgwKCVSMClcbiIKKwkJIglzdGQJMTAsJU8wKzg4KCVSMClcbiIKKwkJIglzdGQJMTEsJU8wKzk2KCVSMClcbiIKKwkJIglzdGQJMTIsJU8wKzEwNCglUjApXG4iCisJCSIJc3RkCTEzLCVPMCsxMTIoJVIwKVxuIgorCQkiCXN0ZAkxNCwlTzArMTIwKCVSMClcbiIKKwkJIglzdGQJMTUsJU8wKzEyOCglUjApXG4iCisJCTogIj1RIiAoKmZwcmVncykgOiAiUSIgKCpmcHJlZ3MpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfZnBfcmVncyhzMzkwX2ZwX3JlZ3MgKmZwcmVncykKIHsKIAlhc20gdm9sYXRpbGUoCi0JCSIJbGQJMCw4KCUwKVxuIgotCQkiCWxkCTIsMjQoJTApXG4iCi0JCSIJbGQJNCw0MCglMClcbiIKLQkJIglsZAk2LDU2KCUwKSIKLQkJOiA6ICJhIiAoZnByZWdzKSwgIm0iICgqZnByZWdzKSk7CisJCSIJbGQJMCwlTzArOCglUjApXG4iCisJCSIJbGQJMiwlTzArMjQoJVIwKVxuIgorCQkiCWxkCTQsJU8wKzQwKCVSMClcbiIKKwkJIglsZAk2LCVPMCs1NiglUjApIgorCQk6IDogIlEiICgqZnByZWdzKSk7CiAJaWYgKCFNQUNISU5FX0hBU19JRUVFKQogCQlyZXR1cm47CiAJYXNtIHZvbGF0aWxlKAotCQkiCWxmcGMJMCglMClcbiIKLQkJIglsZAkxLDE2KCUwKVxuIgotCQkiCWxkCTMsMzIoJTApXG4iCi0JCSIJbGQJNSw0OCglMClcbiIKLQkJIglsZAk3LDY0KCUwKVxuIgotCQkiCWxkCTgsNzIoJTApXG4iCi0JCSIJbGQJOSw4MCglMClcbiIKLQkJIglsZAkxMCw4OCglMClcbiIKLQkJIglsZAkxMSw5NiglMClcbiIKLQkJIglsZAkxMiwxMDQoJTApXG4iCi0JCSIJbGQJMTMsMTEyKCUwKVxuIgotCQkiCWxkCTE0LDEyMCglMClcbiIKLQkJIglsZAkxNSwxMjgoJTApXG4iCi0JCTogOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykpOworCQkiCWxmcGMJJTBcbiIKKwkJIglsZAkxLCVPMCsxNiglUjApXG4iCisJCSIJbGQJMywlTzArMzIoJVIwKVxuIgorCQkiCWxkCTUsJU8wKzQ4KCVSMClcbiIKKwkJIglsZAk3LCVPMCs2NCglUjApXG4iCisJCSIJbGQJOCwlTzArNzIoJVIwKVxuIgorCQkiCWxkCTksJU8wKzgwKCVSMClcbiIKKwkJIglsZAkxMCwlTzArODgoJVIwKVxuIgorCQkiCWxkCTExLCVPMCs5NiglUjApXG4iCisJCSIJbGQJMTIsJU8wKzEwNCglUjApXG4iCisJCSIJbGQJMTMsJU8wKzExMiglUjApXG4iCisJCSIJbGQJMTQsJU8wKzEyMCglUjApXG4iCisJCSIJbGQJMTUsJU8wKzEyOCglUjApXG4iCisJCTogOiAiUSIgKCpmcHJlZ3MpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNhdmVfYWNjZXNzX3JlZ3ModW5zaWduZWQgaW50ICphY3JzKQogewotCWFzbSB2b2xhdGlsZSgic3RhbSAwLDE1LDAoJTApIiA6IDogImEiIChhY3JzKSA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoInN0YW0gMCwxNSwlMCIgOiAiPVEiICgqYWNycykpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9hY2Nlc3NfcmVncyh1bnNpZ25lZCBpbnQgKmFjcnMpCiB7Ci0JYXNtIHZvbGF0aWxlKCJsYW0gMCwxNSwwKCUwKSIgOiA6ICJhIiAoYWNycykpOworCWFzbSB2b2xhdGlsZSgibGFtIDAsMTUsJTAiIDogOiAiUSIgKCphY3JzKSk7CiB9CiAKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBkbyB7CQkJCQkgICAgIFwKQEAgLTEzOSw0OCArMTM5LDQ4IEBACiAJCXNoaWZ0ID0gKDMgXiAoYWRkciAmIDMpKSA8PCAzOwogCQlhZGRyIF49IGFkZHIgJiAzOwogCQlhc20gdm9sYXRpbGUoCi0JCQkiCWwJJTAsMCglNClcbiIKKwkJCSIJbAklMCwlNFxuIgogCQkJIjA6CWxyCTAsJTBcbiIKIAkJCSIJbnIJMCwlM1xuIgogCQkJIglvcgkwLCUyXG4iCi0JCQkiCWNzCSUwLDAsMCglNClcbiIKKwkJCSIJY3MJJTAsMCwlNFxuIgogCQkJIglqbAkwYlxuIgotCQkJOiAiPSZkIiAob2xkKSwgIj1tIiAoKihpbnQgKikgYWRkcikKLQkJCTogImQiICh4IDw8IHNoaWZ0KSwgImQiICh+KDI1NSA8PCBzaGlmdCkpLCAiYSIgKGFkZHIpLAotCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIik7CisJCQk6ICI9JmQiIChvbGQpLCAiPVEiICgqKGludCAqKSBhZGRyKQorCQkJOiAiZCIgKHggPDwgc2hpZnQpLCAiZCIgKH4oMjU1IDw8IHNoaWZ0KSksCisJCQkgICJRIiAoKihpbnQgKikgYWRkcikgOiAibWVtb3J5IiwgImNjIiwgIjAiKTsKIAkJcmV0dXJuIG9sZCA+PiBzaGlmdDsKIAljYXNlIDI6CiAJCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOwogCQlzaGlmdCA9ICgyIF4gKGFkZHIgJiAyKSkgPDwgMzsKIAkJYWRkciBePSBhZGRyICYgMjsKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTQpXG4iCisJCQkiCWwJJTAsJTRcbiIKIAkJCSIwOglscgkwLCUwXG4iCiAJCQkiCW5yCTAsJTNcbiIKIAkJCSIJb3IJMCwlMlxuIgotCQkJIgljcwklMCwwLDAoJTQpXG4iCisJCQkiCWNzCSUwLDAsJTRcbiIKIAkJCSIJamwJMGJcbiIKLQkJCTogIj0mZCIgKG9sZCksICI9bSIgKCooaW50ICopIGFkZHIpCi0JCQk6ICJkIiAoeCA8PCBzaGlmdCksICJkIiAofig2NTUzNSA8PCBzaGlmdCkpLCAiYSIgKGFkZHIpLAotCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIik7CisJCQk6ICI9JmQiIChvbGQpLCAiPVEiICgqKGludCAqKSBhZGRyKQorCQkJOiAiZCIgKHggPDwgc2hpZnQpLCAiZCIgKH4oNjU1MzUgPDwgc2hpZnQpKSwKKwkJCSAgIlEiICgqKGludCAqKSBhZGRyKSA6ICJtZW1vcnkiLCAiY2MiLCAiMCIpOwogCQlyZXR1cm4gb2xkID4+IHNoaWZ0OwogCWNhc2UgNDoKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTMpXG4iCi0JCQkiMDoJY3MJJTAsJTIsMCglMylcbiIKKwkJCSIJbAklMCwlM1xuIgorCQkJIjA6CWNzCSUwLCUyLCUzXG4iCiAJCQkiCWpsCTBiXG4iCi0JCQk6ICI9JmQiIChvbGQpLCAiPW0iICgqKGludCAqKSBwdHIpCi0JCQk6ICJkIiAoeCksICJhIiAocHRyKSwgIm0iICgqKGludCAqKSBwdHIpCisJCQk6ICI9JmQiIChvbGQpLCAiPVEiICgqKGludCAqKSBwdHIpCisJCQk6ICJkIiAoeCksICJRIiAoKihpbnQgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBvbGQ7CiAjaWZkZWYgX19zMzkweF9fCiAJY2FzZSA4OgogCQlhc20gdm9sYXRpbGUoCi0JCQkiCWxnCSUwLDAoJTMpXG4iCi0JCQkiMDoJY3NnCSUwLCUyLDAoJTMpXG4iCisJCQkiCWxnCSUwLCUzXG4iCisJCQkiMDoJY3NnCSUwLCUyLCUzXG4iCiAJCQkiCWpsCTBiXG4iCiAJCQk6ICI9JmQiIChvbGQpLCAiPW0iICgqKGxvbmcgKikgcHRyKQotCQkJOiAiZCIgKHgpLCAiYSIgKHB0ciksICJtIiAoKihsb25nICopIHB0cikKKwkJCTogImQiICh4KSwgIlEiICgqKGxvbmcgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBvbGQ7CiAjZW5kaWYgLyogX19zMzkweF9fICovCkBAIC0yMTUsMjAgKzIxNSwyMCBAQAogCQlzaGlmdCA9ICgzIF4gKGFkZHIgJiAzKSkgPDwgMzsKIAkJYWRkciBePSBhZGRyICYgMzsKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTQpXG4iCisJCQkiCWwJJTAsJTJcbiIKIAkJCSIwOglucgklMCwlNVxuIgogCQkJIglscgklMSwlMFxuIgogCQkJIglvcgklMCwlMlxuIgogCQkJIglvcgklMSwlM1xuIgotCQkJIgljcwklMCwlMSwwKCU0KVxuIgorCQkJIgljcwklMCwlMSwlMlxuIgogCQkJIglqbmwJMWZcbiIKIAkJCSIJeHIJJTEsJTBcbiIKIAkJCSIJbnIJJTEsJTVcbiIKIAkJCSIJam56CTBiXG4iCiAJCQkiMToiCi0JCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCkKLQkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksICJhIiAocHRyKSwKLQkJCSAgImQiICh+KDI1NSA8PCBzaGlmdCkpCisJCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCksICI9USIgKCooaW50ICopIHB0cikKKwkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksCisJCQkgICJkIiAofigyNTUgPDwgc2hpZnQpKSwgIlEiICgqKGludCAqKSBwdHIpCiAJCQk6ICJtZW1vcnkiLCAiY2MiKTsKIAkJcmV0dXJuIHByZXYgPj4gc2hpZnQ7CiAJY2FzZSAyOgpAQCAtMjM2LDMzICsyMzYsMzUgQEAKIAkJc2hpZnQgPSAoMiBeIChhZGRyICYgMikpIDw8IDM7CiAJCWFkZHIgXj0gYWRkciAmIDI7CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJbAklMCwwKCU0KVxuIgorCQkJIglsCSUwLCUyXG4iCiAJCQkiMDoJbnIJJTAsJTVcbiIKIAkJCSIJbHIJJTEsJTBcbiIKIAkJCSIJb3IJJTAsJTJcbiIKIAkJCSIJb3IJJTEsJTNcbiIKLQkJCSIJY3MJJTAsJTEsMCglNClcbiIKKwkJCSIJY3MJJTAsJTEsJTJcbiIKIAkJCSIJam5sCTFmXG4iCiAJCQkiCXhyCSUxLCUwXG4iCiAJCQkiCW5yCSUxLCU1XG4iCiAJCQkiCWpuegkwYlxuIgogCQkJIjE6IgotCQkJOiAiPSZkIiAocHJldiksICI9JmQiICh0bXApCi0JCQk6ICJkIiAob2xkIDw8IHNoaWZ0KSwgImQiIChuZXcgPDwgc2hpZnQpLCAiYSIgKHB0ciksCi0JCQkgICJkIiAofig2NTUzNSA8PCBzaGlmdCkpCisJCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCksICI9USIgKCooaW50ICopIHB0cikKKwkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksCisJCQkgICJkIiAofig2NTUzNSA8PCBzaGlmdCkpLCAiUSIgKCooaW50ICopIHB0cikKIAkJCTogIm1lbW9yeSIsICJjYyIpOwogCQlyZXR1cm4gcHJldiA+PiBzaGlmdDsKIAljYXNlIDQ6CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJY3MJJTAsJTIsMCglMylcbiIKLQkJCTogIj0mZCIgKHByZXYpIDogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAocHRyKQorCQkJIgljcwklMCwlMywlMVxuIgorCQkJOiAiPSZkIiAocHJldiksICI9USIgKCooaW50ICopIHB0cikKKwkJCTogIjAiIChvbGQpLCAiZCIgKG5ldyksICJRIiAoKihpbnQgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBwcmV2OwogI2lmZGVmIF9fczM5MHhfXwogCWNhc2UgODoKIAkJYXNtIHZvbGF0aWxlKAotCQkJIgljc2cJJTAsJTIsMCglMylcbiIKLQkJCTogIj0mZCIgKHByZXYpIDogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAocHRyKQorCQkJIgljc2cJJTAsJTMsJTFcbiIKKwkJCTogIj0mZCIgKHByZXYpLCAiPVEiICgqKGxvbmcgKikgcHRyKQorCQkJOiAiMCIgKG9sZCksICJkIiAobmV3KSwgIlEiICgqKGxvbmcgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBwcmV2OwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwpAQCAtMzAyLDE3ICszMDQsMTcgQEAKICNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoewkJCQlcCiAJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7CVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJXAotCQkiCWxjdGxnCSUxLCUyLDAoJTApXG4iCQkJXAotCQk6IDogImEiICgmYXJyYXkpLCAiaSIgKGxvdyksICJpIiAoaGlnaCksCVwKLQkJICAgICJtIiAoKihhZGRydHlwZSAqKSgmYXJyYXkpKSk7CQlcCisJCSIJbGN0bGcJJTEsJTIsJTBcbiIJCQlcCisJCTogOiAiUSIgKCooYWRkcnR5cGUgKikoJmFycmF5KSksCQlcCisJCSAgICAiaSIgKGxvdyksICJpIiAoaGlnaCkpOwkJCVwKIAl9KQogCiAjZGVmaW5lIF9fY3RsX3N0b3JlKGFycmF5LCBsb3csIGhpZ2gpICh7CQkJXAogCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOwlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglzdGN0ZwklMiwlMywwKCUxKVxuIgkJCVwKLQkJOiAiPW0iICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAotCQk6ICJhIiAoJmFycmF5KSwgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCVwKKwkJIglzdGN0ZwklMSwlMiwlMFxuIgkJCVwKKwkJOiAiPVEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAorCQk6ICJpIiAobG93KSwgImkiIChoaWdoKSk7CQkJXAogCX0pCiAKICNlbHNlIC8qIF9fczM5MHhfXyAqLwpAQCAtMzIwLDE3ICszMjIsMTcgQEAKICNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoewkJCQlcCiAJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7CVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJXAotCQkiCWxjdGwJJTEsJTIsMCglMClcbiIJCQlcCi0JCTogOiAiYSIgKCZhcnJheSksICJpIiAobG93KSwgImkiIChoaWdoKSwJXAotCQkgICAgIm0iICgqKGFkZHJ0eXBlICopKCZhcnJheSkpKTsJCVwKKwkJIglsY3RsCSUxLCUyLCUwXG4iCQkJXAorCQk6IDogIlEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpLAkJXAorCQkgICAgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCQlcCiB9KQogCiAjZGVmaW5lIF9fY3RsX3N0b3JlKGFycmF5LCBsb3csIGhpZ2gpICh7CQkJXAogCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOwlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglzdGN0bAklMiwlMywwKCUxKVxuIgkJCVwKLQkJOiAiPW0iICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAotCQk6ICJhIiAoJmFycmF5KSwgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCVwKKwkJIglzdGN0bAklMSwlMiwlMFxuIgkJCVwKKwkJOiAiPVEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAorCQk6ICJpIiAobG93KSwgImkiIChoaWdoKSk7CQkJXAogCX0pCiAKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNjYwNjllNy4uMzRmMDg3MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTczLDcgKzczLDcgQEAKIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewotCXJldHVybiAoc3RydWN0IHRocmVhZF9pbmZvICopKCgqKHVuc2lnbmVkIGxvbmcgKikgX19MQ19LRVJORUxfU1RBQ0spLVRIUkVBRF9TSVpFKTsKKwlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShTMzkwX2xvd2NvcmUua2VybmVsX3N0YWNrIC0gVEhSRUFEX1NJWkUpOwogfQogCiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSIFRIUkVBRF9PUkRFUgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAppbmRleCA2OGQ5ZmVhLi5mMTc0YmRhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaApAQCAtMjAsMTAgKzIwLDEwIEBACiAJaW50IGNjOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiICAgc2NrICAgMCglMilcbiIKKwkJIiAgIHNjayAgICUxXG4iCiAJCSIgICBpcG0gICAlMFxuIgogCQkiICAgc3JsICAgJTAsMjhcbiIKLQkJOiAiPWQiIChjYykgOiAibSIgKHRpbWUpLCAiYSIgKCZ0aW1lKSA6ICJjYyIpOworCQk6ICI9ZCIgKGNjKSA6ICJRIiAodGltZSkgOiAiY2MiKTsKIAlyZXR1cm4gY2M7CiB9CiAKQEAgLTMyLDIxICszMiwyMSBAQAogCWludCBjYzsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIiAgIHN0Y2sgIDAoJTIpXG4iCisJCSIgICBzdGNrICAlMVxuIgogCQkiICAgaXBtICAgJTBcbiIKIAkJIiAgIHNybCAgICUwLDI4XG4iCi0JCTogIj1kIiAoY2MpLCAiPW0iICgqdGltZSkgOiAiYSIgKHRpbWUpIDogImNjIik7CisJCTogIj1kIiAoY2MpLCAiPVEiICgqdGltZSkgOiA6ICJjYyIpOwogCXJldHVybiBjYzsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9jbG9ja19jb21wYXJhdG9yKF9fdTY0IHRpbWUpCiB7Ci0JYXNtIHZvbGF0aWxlKCJzY2tjIDAoJTEpIiA6IDogIm0iICh0aW1lKSwgImEiICgmdGltZSkpOworCWFzbSB2b2xhdGlsZSgic2NrYyAlMCIgOiA6ICJRIiAodGltZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfY2xvY2tfY29tcGFyYXRvcihfX3U2NCAqdGltZSkKIHsKLQlhc20gdm9sYXRpbGUoInN0Y2tjIDAoJTEpIiA6ICI9bSIgKCp0aW1lKSA6ICJhIiAodGltZSkpOworCWFzbSB2b2xhdGlsZSgic3Rja2MgJTAiIDogIj1RIiAoKnRpbWUpKTsKIH0KIAogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCkBAIC01NywxMSArNTcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBjbGs7CiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQogCWFzbSB2b2xhdGlsZSgic3RjayAlMCIgOiAiPVEiIChjbGspIDogOiAiY2MiKTsKLSNlbHNlIC8qIF9fR05VQ19fICovCi0JYXNtIHZvbGF0aWxlKCJzdGNrIDAoJTEpIiA6ICI9bSIgKGNsaykgOiAiYSIgKCZjbGspIDogImNjIik7Ci0jZW5kaWYgLyogX19HTlVDX18gKi8KIAlyZXR1cm4gY2xrOwogfQogCkBAIC02OSwxMyArNjUsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgY2xrWzE2XTsKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCiAJYXNtIHZvbGF0aWxlKCJzdGNrZSAlMCIgOiAiPVEiIChjbGspIDogOiAiY2MiKTsKLSNlbHNlIC8qIF9fR05VQ19fICovCi0JYXNtIHZvbGF0aWxlKCJzdGNrZSAwKCUxKSIgOiAiPW0iIChjbGspCi0JCQkJICAgOiAiYSIgKGNsaykgOiAiY2MiKTsKLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCiAJcmV0dXJuICooKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSZjbGtbMV0pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCBjYmYwYTg3Li5kNmIxZWQwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTI2NSw2ICsyNjUsMTIgQEAKIAkJcmV0dXJuIHVhY2Nlc3MuY29weV9mcm9tX3VzZXIobiwgZnJvbSwgdG8pOwogfQogCitleHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQorI2lmZGVmIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworX19jb21waWxldGltZV93YXJuaW5nKCJjb3B5X2Zyb21fdXNlcigpIGJ1ZmZlciBzaXplIGlzIG5vdCBwcm92YWJseSBjb3JyZWN0IikKKyNlbmRpZgorOworCiAvKioKICAqIGNvcHlfZnJvbV91c2VyOiAtIENvcHkgYSBibG9jayBvZiBkYXRhIGZyb20gdXNlciBzcGFjZS4KICAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCkBAIC0yODQsNyArMjkwLDEzIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCiBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKKwl1bnNpZ25lZCBpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKKwogCW1pZ2h0X2ZhdWx0KCk7CisJaWYgKHVubGlrZWx5KHN6ICE9IC0xICYmIHN6IDwgbikpIHsKKwkJY29weV9mcm9tX3VzZXJfb3ZlcmZsb3coKTsKKwkJcmV0dXJuIG47CisJfQogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQogCQluID0gX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Zkc28uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92ZHNvLmgKaW5kZXggN2JkZDdjOC4uNGE3NmQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Zkc28uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdmRzby5oCkBAIC03LDcgKzcsNyBAQAogI2RlZmluZSBWRFNPMzJfTEJBU0UJMAogI2RlZmluZSBWRFNPNjRfTEJBU0UJMAogCi0jZGVmaW5lIFZEU09fVkVSU0lPTl9TVFJJTkcJTElOVVhfMi42LjI2CisjZGVmaW5lIFZEU09fVkVSU0lPTl9TVFJJTkcJTElOVVhfMi42LjI5CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCmluZGV4IDY4M2Y2MzguLjY0MjMwYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjksOSArMjksMTIgQEAKIG9iai15CSs9ICQoaWYgJChDT05GSUdfNjRCSVQpLHJlaXBsNjQubyxyZWlwbC5vKQogCiBleHRyYS15CQkJCSs9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcworZXh0cmEteQkJCQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxoZWFkNjQubyxoZWFkMzEubykKIAogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBzMzkwX2tzeW1zLm8gbW9kdWxlLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubyB0b3BvbG9neS5vCitvYmotJChDT05GSUdfU01QKQkJKz0gJChpZiAkKENPTkZJR182NEJJVCksc3dpdGNoX2NwdTY0Lm8sIFwKKwkJCQkJCQlzd2l0Y2hfY3B1Lm8pCiBvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN1c3BlbmQubyBzd3N1c3BfYXNtNjQubwogb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXQubwogY29tcGF0LW9iai0kKENPTkZJR19BVURJVCkJKz0gY29tcGF0X2F1ZGl0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA2M2U0NjQzLi4wOGRiNzM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC00LDE4ICs0LDI3IEBACiAgKiBhbmQgZm9ybWF0IHRoZSByZXF1aXJlZCBkYXRhLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2RlZmluZSBBU01fT0ZGU0VUU19DCisKICNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ3AuaD4KIAorLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb21waWxlciBpcyBuZXcgZW5vdWdoLiBXZSB3YW50IGEgY29tcGlsZXIgdGhhdAorICogaXMga25vd24gdG8gd29yayB3aXRoIHRoZSAiUSIgYXNzZW1ibGVyIGNvbnN0cmFpbnQuCisgKi8KKyNpZiBfX0dOVUNfXyA8IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPCAzKQorI2Vycm9yIFlvdXIgY29tcGlsZXIgaXMgdG9vIG9sZDsgcGxlYXNlIHVzZSB2ZXJzaW9uIDMuMy4zIG9yIG5ld2VyCisjZW5kaWYKKwogaW50IG1haW4odm9pZCkKIHsKIAlERUZJTkUoX19USFJFQURfaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpOwogCURFRklORShfX1RIUkVBRF9rc3AsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmtzcCkpOwogCURFRklORShfX1RIUkVBRF9wZXIsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnBlcl9pbmZvKSk7Ci0JREVGSU5FKF9fVEhSRUFEX21tX3NlZ21lbnQsCi0JICAgICAgIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLm1tX3NlZ21lbnQpKTsKKwlERUZJTkUoX19USFJFQURfbW1fc2VnbWVudCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQubW1fc2VnbWVudCkpOwogCUJMQU5LKCk7CiAJREVGSU5FKF9fVEFTS19waWQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgcGlkKSk7CiAJQkxBTksoKTsKQEAgLTUyLDE4ICs2MSw5NCBAQAogCURFRklORShfX1ZEU09fV1RPTV9OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX25zZWMpKTsKIAlERUZJTkUoX19WRFNPX1RJTUVaT05FLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0el9taW51dGVzd2VzdCkpOwogCURFRklORShfX1ZEU09fRUNUR19PSywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgZWN0Z19hdmFpbGFibGUpKTsKLQlERUZJTkUoX19WRFNPX0VDVEdfQkFTRSwKLQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZkc29fcGVyX2NwdV9kYXRhLCBlY3RnX3RpbWVyX2Jhc2UpKTsKLQlERUZJTkUoX19WRFNPX0VDVEdfVVNFUiwKLQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZkc29fcGVyX2NwdV9kYXRhLCBlY3RnX3VzZXJfdGltZSkpOworCURFRklORShfX1ZEU09fRUNUR19CQVNFLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19wZXJfY3B1X2RhdGEsIGVjdGdfdGltZXJfYmFzZSkpOworCURFRklORShfX1ZEU09fRUNUR19VU0VSLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19wZXJfY3B1X2RhdGEsIGVjdGdfdXNlcl90aW1lKSk7CiAJLyogY29uc3RhbnRzIHVzZWQgYnkgdGhlIHZkc28gKi8KIAlERUZJTkUoQ0xPQ0tfUkVBTFRJTUUsIENMT0NLX1JFQUxUSU1FKTsKIAlERUZJTkUoQ0xPQ0tfTU9OT1RPTklDLCBDTE9DS19NT05PVE9OSUMpOwogCURFRklORShDTE9DS19SRUFMVElNRV9SRVMsIE1PTk9UT05JQ19SRVNfTlNFQyk7CisJQkxBTksoKTsKIAkvKiBjb25zdGFudHMgZm9yIFNJR1AgKi8KIAlERUZJTkUoX19TSUdQX1NUT1AsIHNpZ3Bfc3RvcCk7CiAJREVGSU5FKF9fU0lHUF9SRVNUQVJULCBzaWdwX3Jlc3RhcnQpOwogCURFRklORShfX1NJR1BfU0VOU0UsIHNpZ3Bfc2Vuc2UpOwogCURFRklORShfX1NJR1BfSU5JVElBTF9DUFVfUkVTRVQsIHNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQpOworCUJMQU5LKCk7CisJLyogbG93Y29yZSBvZmZzZXRzICovCisJREVGSU5FKF9fTENfRVhUX1BBUkFNUywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRfcGFyYW1zKSk7CisJREVGSU5FKF9fTENfQ1BVX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X2FkZHIpKTsKKwlERUZJTkUoX19MQ19FWFRfSU5UX0NPREUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0X2ludF9jb2RlKSk7CisJREVGSU5FKF9fTENfU1ZDX0lMQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzdmNfaWxjKSk7CisJREVGSU5FKF9fTENfU1ZDX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN2Y19jb2RlKSk7CisJREVGSU5FKF9fTENfUEdNX0lMQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZ21faWxjKSk7CisJREVGSU5FKF9fTENfUEdNX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBnbV9jb2RlKSk7CisJREVGSU5FKF9fTENfUEVSX0FUTUlELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9wZXJjX2F0bWlkKSk7CisJREVGSU5FKF9fTENfUEVSX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGVyX2FkZHJlc3MpKTsKKwlERUZJTkUoX19MQ19QRVJfQUNDRVNTX0lELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9hY2Nlc3NfaWQpKTsKKwlERUZJTkUoX19MQ19BUl9NT0RFX0lELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFyX2FjY2Vzc19pZCkpOworCURFRklORShfX0xDX1NVQkNIQU5ORUxfSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9pZCkpOworCURFRklORShfX0xDX1NVQkNIQU5ORUxfTlIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9ucikpOworCURFRklORShfX0xDX0lPX0lOVF9QQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX2ludF9wYXJtKSk7CisJREVGSU5FKF9fTENfSU9fSU5UX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgaW9faW50X3dvcmQpKTsKKwlERUZJTkUoX19MQ19TVEZMX0ZBQ19MSVNULCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN0ZmxfZmFjX2xpc3QpKTsKKwlERUZJTkUoX19MQ19NQ0NLX0NPREUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbWNja19pbnRlcnJ1cHRpb25fY29kZSkpOworCURFRklORShfX0xDX0RVTVBfUkVJUEwsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgaXBpYikpOworCUJMQU5LKCk7CisJREVGSU5FKF9fTENfUlNUX05FV19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcmVzdGFydF9wc3cpKTsKKwlERUZJTkUoX19MQ19SU1RfT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCByZXN0YXJ0X29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19FWFRfT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRlcm5hbF9vbGRfcHN3KSk7CisJREVGSU5FKF9fTENfU1ZDX09MRF9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ZjX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19QR01fT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwcm9ncmFtX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19NQ0tfT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBtY2NrX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19JT19PTERfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19FWFRfTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRlcm5hbF9uZXdfcHN3KSk7CisJREVGSU5FKF9fTENfU1ZDX05FV19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ZjX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19QR01fTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwcm9ncmFtX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19NQ0tfTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBtY2NrX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19JT19ORVdfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUkVUVVJOX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCByZXR1cm5fcHN3KSk7CisJREVGSU5FKF9fTENfUkVUVVJOX01DQ0tfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHJldHVybl9tY2NrX3BzdykpOworCURFRklORShfX0xDX1NZTkNfRU5URVJfVElNRVIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3luY19lbnRlcl90aW1lcikpOworCURFRklORShfX0xDX0FTWU5DX0VOVEVSX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFzeW5jX2VudGVyX3RpbWVyKSk7CisJREVGSU5FKF9fTENfRVhJVF9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleGl0X3RpbWVyKSk7CisJREVGSU5FKF9fTENfVVNFUl9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCB1c2VyX3RpbWVyKSk7CisJREVGSU5FKF9fTENfU1lTVEVNX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN5c3RlbV90aW1lcikpOworCURFRklORShfX0xDX1NURUFMX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN0ZWFsX3RpbWVyKSk7CisJREVGSU5FKF9fTENfTEFTVF9VUERBVEVfVElNRVIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbGFzdF91cGRhdGVfdGltZXIpKTsKKwlERUZJTkUoX19MQ19MQVNUX1VQREFURV9DTE9DSywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBsYXN0X3VwZGF0ZV9jbG9jaykpOworCURFRklORShfX0xDX0NVUlJFTlQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3VycmVudF90YXNrKSk7CisJREVGSU5FKF9fTENfVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgdGhyZWFkX2luZm8pKTsKKwlERUZJTkUoX19MQ19LRVJORUxfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwga2VybmVsX3N0YWNrKSk7CisJREVGSU5FKF9fTENfQVNZTkNfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgYXN5bmNfc3RhY2spKTsKKwlERUZJTkUoX19MQ19QQU5JQ19TVEFDSywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwYW5pY19zdGFjaykpOworCURFRklORShfX0xDX0tFUk5FTF9BU0NFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGtlcm5lbF9hc2NlKSk7CisJREVGSU5FKF9fTENfVVNFUl9BU0NFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHVzZXJfYXNjZSkpOworCURFRklORShfX0xDX1VTRVJfRVhFQ19BU0NFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHVzZXJfZXhlY19hc2NlKSk7CisJREVGSU5FKF9fTENfQ1BVSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X2lkKSk7CisJREVGSU5FKF9fTENfSU5UX0NMT0NLLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGludF9jbG9jaykpOworCURFRklORShfX0xDX01BQ0hJTkVfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbWFjaGluZV9mbGFncykpOworCURFRklORShfX0xDX0ZUUkFDRV9GVU5DLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGZ0cmFjZV9mdW5jKSk7CisJREVGSU5FKF9fTENfSVJCLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlyYikpOworCURFRklORShfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X3RpbWVyX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNsb2NrX2NvbXBfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUFNXX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwc3dfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUFJFRklYX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwcmVmaXhyZWdfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfQVJFR1NfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFjY2Vzc19yZWdzX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX0ZQUkVHU19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfR1BSRUdTX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBncHJlZ3Nfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfQ1JFR1NfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNyZWdzX3NhdmVfYXJlYSkpOworI2lmZGVmIENPTkZJR18zMkJJVAorCURFRklORShfX0xDX1BGQVVMVF9JTlRQQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dF9wYXJhbXMpKTsKKwlERUZJTkUoU0FWRV9BUkVBX0JBU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHIpKTsKKyNlbHNlIC8qIENPTkZJR18zMkJJVCAqLworCURFRklORShfX0xDX1BGQVVMVF9JTlRQQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dF9wYXJhbXMyKSk7CisJREVGSU5FKF9fTENfRVhUX1BBUkFNUzIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0X3BhcmFtczIpKTsKKwlERUZJTkUoU0FWRV9BUkVBX0JBU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUEFTVEUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGFzdGUpKTsKKwlERUZJTkUoX19MQ19GUF9DUkVHX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBmcHRfY3JlZ19zYXZlX2FyZWEpKTsKKwlERUZJTkUoX19MQ19MQVNUX0JSRUFLLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGJyZWFraW5nX2V2ZW50X2FkZHIpKTsKKwlERUZJTkUoX19MQ19WRFNPX1BFUl9DUFUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgdmRzb19wZXJfY3B1X2RhdGEpKTsKKyNlbmRpZiAvKiBDT05GSUdfMzJCSVQgKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYmFzZS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMKaW5kZXggZGM3ZTUyNS4uMTVlNDZjYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMKQEAgLTYsOCArNiw4IEBACiAgKgkJIE1pY2hhZWwgSG9semhldSA8aG9semhldUBkZS5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KIAogI2lmZGVmIENPTkZJR182NEJJVAogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Rpcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYwppbmRleCBkYjk0M2E3Li5iMzliMjdkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKQEAgLTg2LDEwICs4NiwxNyBAQAogCVU0XzEyLAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxMiAqLwogCVU0XzE2LAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxNiAqLwogCVU0XzIwLAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAyMCAqLworCVU0XzMyLAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAzMiAqLwogCVU4XzgsCS8qIDggYml0IHVuc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDggKi8KIAlVOF8xNiwJLyogOCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KKwlVOF8yNCwJLyogOCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMjQgKi8KKwlVOF8zMiwJLyogOCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMzIgKi8KKwlJOF84LAkvKiA4IGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgOCAqLworCUk4XzMyLAkvKiA4IGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMzIgKi8KIAlJMTZfMTYsCS8qIDE2IGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KKwlJMTZfMzIsCS8qIDMyIGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KIAlVMTZfMTYsCS8qIDE2IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxNiAqLworCVUxNl8zMiwJLyogMzIgYml0IHVuc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDE2ICovCiAJSjE2XzE2LAkvKiBQQyByZWxhdGl2ZSBqdW1wIG9mZnNldCBhdCAxNiAqLwogCUozMl8xNiwJLyogUEMgcmVsYXRpdmUgbG9uZyBvZmZzZXQgYXQgMTYgKi8KIAlJMzJfMTYsCS8qIDMyIGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KQEAgLTEwNCwyMSArMTExLDM3IEBACiAgKi8KIGVudW0gewogCUlOU1RSX0lOVkFMSUQsCi0JSU5TVFJfRSwgSU5TVFJfUklFX1JSUCwgSU5TVFJfUklMX1JJLCBJTlNUUl9SSUxfUlAsIElOU1RSX1JJTF9SVSwKLQlJTlNUUl9SSUxfVVAsIElOU1RSX1JJX1JJLCBJTlNUUl9SSV9SUCwgSU5TVFJfUklfUlUsIElOU1RSX1JJX1VQLAorCUlOU1RSX0UsCisJSU5TVFJfUklFX1IwSVUsIElOU1RSX1JJRV9SMFVVLCBJTlNUUl9SSUVfUlJQLCBJTlNUUl9SSUVfUlJQVSwKKwlJTlNUUl9SSUVfUlJVVVUsIElOU1RSX1JJRV9SVVBJLCBJTlNUUl9SSUVfUlVQVSwKKwlJTlNUUl9SSUxfUkksIElOU1RSX1JJTF9SUCwgSU5TVFJfUklMX1JVLCBJTlNUUl9SSUxfVVAsCisJSU5TVFJfUklTX1IwUkRVLCBJTlNUUl9SSVNfUjBVVSwgSU5TVFJfUklTX1JVUkRJLCBJTlNUUl9SSVNfUlVSRFUsCisJSU5TVFJfUklfUkksIElOU1RSX1JJX1JQLCBJTlNUUl9SSV9SVSwgSU5TVFJfUklfVVAsCiAJSU5TVFJfUlJFXzAwLCBJTlNUUl9SUkVfMFIsIElOU1RSX1JSRV9BQSwgSU5TVFJfUlJFX0FSLCBJTlNUUl9SUkVfRjAsCi0JSU5TVFJfUlJFX0ZGLCBJTlNUUl9SUkVfUjAsIElOU1RSX1JSRV9SQSwgSU5TVFJfUlJFX1JGLCBJTlNUUl9SUkVfUlIsCi0JSU5TVFJfUlJFX1JSX09QVCwgSU5TVFJfUlJGX0YwRkYsIElOU1RSX1JSRl9GVUZGLCBJTlNUUl9SUkZfTTBSUiwKLQlJTlNUUl9SUkZfUjBSUiwgSU5TVFJfUlJGX1JVUlIsIElOU1RSX1JSRl9VMEZGLCBJTlNUUl9SUkZfVTBSRiwKKwlJTlNUUl9SUkVfRkYsIElOU1RSX1JSRV9GUiwgSU5TVFJfUlJFX1IwLCBJTlNUUl9SUkVfUkEsIElOU1RSX1JSRV9SRiwKKwlJTlNUUl9SUkVfUlIsIElOU1RSX1JSRV9SUl9PUFQsCisJSU5TVFJfUlJGXzBVRkYsIElOU1RSX1JSRl9GMEZGLCBJTlNUUl9SUkZfRjBGRjIsIElOU1RSX1JSRl9GMEZSLAorCUlOU1RSX1JSRl9GRlJVLCBJTlNUUl9SUkZfRlVGRiwgSU5TVFJfUlJGX00wUlIsIElOU1RSX1JSRl9SMFJSLAorCUlOU1RSX1JSRl9SVVJSLCBJTlNUUl9SUkZfVTBGRiwgSU5TVFJfUlJGX1UwUkYsIElOU1RSX1JSRl9VMFJSLAorCUlOU1RSX1JSRl9VVUZGLCBJTlNUUl9SUlJfRjBGRiwgSU5TVFJfUlJTX1JSUkRVLAogCUlOU1RSX1JSX0ZGLCBJTlNUUl9SUl9SMCwgSU5TVFJfUlJfUlIsIElOU1RSX1JSX1UwLCBJTlNUUl9SUl9VUiwKLQlJTlNUUl9SU0VfQ0NSRCwgSU5TVFJfUlNFX1JSUkQsIElOU1RSX1JTRV9SVVJELCBJTlNUUl9SU0lfUlJQLAotCUlOU1RSX1JTTF9SMFJELCBJTlNUUl9SU1lfQUFSRCwgSU5TVFJfUlNZX0NDUkQsIElOU1RSX1JTWV9SUlJELAotCUlOU1RSX1JTWV9SVVJELCBJTlNUUl9SU19BQVJELCBJTlNUUl9SU19DQ1JELCBJTlNUUl9SU19SMFJELAotCUlOU1RSX1JTX1JSUkQsIElOU1RSX1JTX1JVUkQsIElOU1RSX1JYRV9GUlJELCBJTlNUUl9SWEVfUlJSRCwKLQlJTlNUUl9SWEZfRlJSREYsIElOU1RSX1JYWV9GUlJELCBJTlNUUl9SWFlfUlJSRCwgSU5TVFJfUlhfRlJSRCwKLQlJTlNUUl9SWF9SUlJELCBJTlNUUl9SWF9VUlJELCBJTlNUUl9TSVlfVVJELCBJTlNUUl9TSV9VUkQsCi0JSU5TVFJfU1NFX1JEUkQsIElOU1RSX1NTRl9SUkRSRCwgSU5TVFJfU1NfTDBSRFJELCBJTlNUUl9TU19MSVJEUkQsCi0JSU5TVFJfU1NfTExSRFJELCBJTlNUUl9TU19SUlJEUkQsIElOU1RSX1NTX1JSUkRSRDIsIElOU1RSX1NTX1JSUkRSRDMsCisJSU5TVFJfUlNFX0NDUkQsIElOU1RSX1JTRV9SUlJELCBJTlNUUl9SU0VfUlVSRCwKKwlJTlNUUl9SU0lfUlJQLAorCUlOU1RSX1JTTF9SMFJELAorCUlOU1RSX1JTWV9BQVJELCBJTlNUUl9SU1lfQ0NSRCwgSU5TVFJfUlNZX1JSUkQsIElOU1RSX1JTWV9SVVJELAorCUlOU1RSX1JTX0FBUkQsIElOU1RSX1JTX0NDUkQsIElOU1RSX1JTX1IwUkQsIElOU1RSX1JTX1JSUkQsCisJSU5TVFJfUlNfUlVSRCwKKwlJTlNUUl9SWEVfRlJSRCwgSU5TVFJfUlhFX1JSUkQsCisJSU5TVFJfUlhGX0ZSUkRGLAorCUlOU1RSX1JYWV9GUlJELCBJTlNUUl9SWFlfUlJSRCwgSU5TVFJfUlhZX1VSUkQsCisJSU5TVFJfUlhfRlJSRCwgSU5TVFJfUlhfUlJSRCwgSU5TVFJfUlhfVVJSRCwKKwlJTlNUUl9TSUxfUkRJLCBJTlNUUl9TSUxfUkRVLAorCUlOU1RSX1NJWV9JUkQsIElOU1RSX1NJWV9VUkQsCisJSU5TVFJfU0lfVVJELAorCUlOU1RSX1NTRV9SRFJELAorCUlOU1RSX1NTRl9SUkRSRCwKKwlJTlNUUl9TU19MMFJEUkQsIElOU1RSX1NTX0xJUkRSRCwgSU5TVFJfU1NfTExSRFJELCBJTlNUUl9TU19SUlJEUkQsCisJSU5TVFJfU1NfUlJSRFJEMiwgSU5TVFJfU1NfUlJSRFJEMywKIAlJTlNUUl9TXzAwLCBJTlNUUl9TX1JELAogfTsKIApAQCAtMTI5LDcgKzE1Miw3IEBACiB9OwogCiBzdHJ1Y3QgaW5zbiB7Ci0JY29uc3QgY2hhciBuYW1lWzVdOworCWNvbnN0IGNoYXIgbmFtZVs2XTsKIAl1bnNpZ25lZCBjaGFyIG9wZnJhZzsKIAl1bnNpZ25lZCBjaGFyIGZvcm1hdDsKIH07CkBAIC0xNzAsMTEgKzE5MywxNiBAQAogCVtVNF8xMl0gID0geyAgNCwgMTIsIDAgfSwKIAlbVTRfMTZdICA9IHsgIDQsIDE2LCAwIH0sCiAJW1U0XzIwXSAgPSB7ICA0LCAyMCwgMCB9LAorCVtVNF8zMl0gID0geyAgNCwgMzIsIDAgfSwKIAlbVThfOF0JID0geyAgOCwgIDgsIDAgfSwKIAlbVThfMTZdICA9IHsgIDgsIDE2LCAwIH0sCisJW1U4XzI0XSAgPSB7ICA4LCAyNCwgMCB9LAorCVtVOF8zMl0gID0geyAgOCwgMzIsIDAgfSwKIAlbSTE2XzE2XSA9IHsgMTYsIDE2LCBPUEVSQU5EX1NJR05FRCB9LAogCVtVMTZfMTZdID0geyAxNiwgMTYsIDAgfSwKKwlbVTE2XzMyXSA9IHsgMTYsIDMyLCAwIH0sCiAJW0oxNl8xNl0gPSB7IDE2LCAxNiwgT1BFUkFORF9QQ1JFTCB9LAorCVtJMTZfMzJdID0geyAxNiwgMzIsIE9QRVJBTkRfU0lHTkVEIH0sCiAJW0ozMl8xNl0gPSB7IDMyLCAxNiwgT1BFUkFORF9QQ1JFTCB9LAogCVtJMzJfMTZdID0geyAzMiwgMTYsIE9QRVJBTkRfU0lHTkVEIH0sCiAJW1UzMl8xNl0gPSB7IDMyLCAxNiwgMCB9LApAQCAtMTgzLDgyICsyMTEsOTMgQEAKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZvcm1hdHNbXVs3XSA9IHsKLQlbSU5TVFJfRV0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwJICAgICAgIC8qIGUuZy4gcHIgICAgKi8KLQlbSU5TVFJfUklFX1JSUF0JICA9IHsgMHhmZiwgUl84LFJfMTIsSjE2XzE2LDAsMCwwIH0sICAgLyogZS5nLiBicnhoZyAqLwotCVtJTlNUUl9SSUxfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMzJfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYnJhc2wgKi8KLQlbSU5TVFJfUklMX1VQXQkgID0geyAweDBmLCBVNF84LEozMl8xNiwwLDAsMCwwIH0sICAgICAvKiBlLmcuIGJyY2wgICovCi0JW0lOU1RSX1JJTF9SSV0JICA9IHsgMHgwZiwgUl84LEkzMl8xNiwwLDAsMCwwIH0sICAgICAgLyogZS5nLiBhZmkgICAqLwotCVtJTlNUUl9SSUxfUlVdCSAgPSB7IDB4MGYsIFJfOCxVMzJfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYWxmaSAgKi8KLQlbSU5TVFJfUklfUkldCSAgPSB7IDB4MGYsIFJfOCxJMTZfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYWhpICAgKi8KLQlbSU5TVFJfUklfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMTZfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYnJjdCAgKi8KLQlbSU5TVFJfUklfUlVdCSAgPSB7IDB4MGYsIFJfOCxVMTZfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gdG1sICAgKi8KLQlbSU5TVFJfUklfVVBdCSAgPSB7IDB4MGYsIFU0XzgsSjE2XzE2LDAsMCwwLDAgfSwgICAgIC8qIGUuZy4gYnJjICAgKi8KLQlbSU5TVFJfUlJFXzAwXQkgID0geyAweGZmLCAwLDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBwYWxiICAqLwotCVtJTlNUUl9SUkVfMFJdCSAgPSB7IDB4ZmYsIFJfMjgsMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIHRiICAgICovCi0JW0lOU1RSX1JSRV9BQV0JICA9IHsgMHhmZiwgQV8yNCxBXzI4LDAsMCwwLDAgfSwgICAgICAgLyogZS5nLiBjcHlhICAqLwotCVtJTlNUUl9SUkVfQVJdCSAgPSB7IDB4ZmYsIEFfMjQsUl8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gc2FyICAgKi8KLQlbSU5TVFJfUlJFX0YwXQkgID0geyAweGZmLCBGXzI0LDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBzcWVyICAqLwotCVtJTlNUUl9SUkVfRkZdCSAgPSB7IDB4ZmYsIEZfMjQsRl8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gZGViciAgKi8KLQlbSU5TVFJfUlJFX1IwXQkgID0geyAweGZmLCBSXzI0LDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBpcG0gICAqLwotCVtJTlNUUl9SUkVfUkFdCSAgPSB7IDB4ZmYsIFJfMjQsQV8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gZWFyICAgKi8KLQlbSU5TVFJfUlJFX1JGXQkgID0geyAweGZmLCBSXzI0LEZfMjgsMCwwLDAsMCB9LCAgICAgICAvKiBlLmcuIGNlZmJyICovCi0JW0lOU1RSX1JSRV9SUl0JICA9IHsgMHhmZiwgUl8yNCxSXzI4LDAsMCwwLDAgfSwgICAgICAgLyogZS5nLiBsdXJhICAqLwotCVtJTlNUUl9SUkVfUlJfT1BUXT0geyAweGZmLCBSXzI0LFJPXzI4LDAsMCwwLDAgfSwgICAgICAvKiBlZnBjLCBzZnBjICovCi0JW0lOU1RSX1JSRl9GMEZGXSAgPSB7IDB4ZmYsIEZfMTYsRl8yNCxGXzI4LDAsMCwwIH0sICAgIC8qIGUuZy4gbWFkYnIgKi8KLQlbSU5TVFJfUlJGX0ZVRkZdICA9IHsgMHhmZiwgRl8yNCxGXzE2LEZfMjgsVTRfMjAsMCwwIH0sLyogZS5nLiBkaWRiciAqLwotCVtJTlNUUl9SUkZfUlVSUl0gID0geyAweGZmLCBSXzI0LFJfMjgsUl8xNixVNF8yMCwwLDAgfSwvKiBlLmcuIC5pbnNuICovCi0JW0lOU1RSX1JSRl9SMFJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8xNixSXzI4LDAsMCwwIH0sICAgIC8qIGUuZy4gaWR0ZSAgKi8KLQlbSU5TVFJfUlJGX1UwRkZdICA9IHsgMHhmZiwgRl8yNCxVNF8xNixGXzI4LDAsMCwwIH0sICAgLyogZS5nLiBmaXhyICAqLwotCVtJTlNUUl9SUkZfVTBSRl0gID0geyAweGZmLCBSXzI0LFU0XzE2LEZfMjgsMCwwLDAgfSwgICAvKiBlLmcuIGNmZWJyICovCi0JW0lOU1RSX1JSRl9NMFJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8yOCxNXzE2LDAsMCwwIH0sICAgIC8qIGUuZy4gc3NrZSAgKi8KLQlbSU5TVFJfUlJfRkZdCSAgPSB7IDB4ZmYsIEZfOCxGXzEyLDAsMCwwLDAgfSwgICAgICAgIC8qIGUuZy4gYWRyICAgKi8KLQlbSU5TVFJfUlJfUjBdCSAgPSB7IDB4ZmYsIFJfOCwgMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIHNwbSAgICovCi0JW0lOU1RSX1JSX1JSXQkgID0geyAweGZmLCBSXzgsUl8xMiwwLDAsMCwwIH0sICAgICAgICAvKiBlLmcuIGxyICAgICovCi0JW0lOU1RSX1JSX1UwXQkgID0geyAweGZmLCBVOF84LCAwLDAsMCwwLDAgfSwJICAgICAgIC8qIGUuZy4gc3ZjICAgKi8KLQlbSU5TVFJfUlJfVVJdCSAgPSB7IDB4ZmYsIFU0XzgsUl8xMiwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gYmNyICAgKi8KLQlbSU5TVFJfUlNFX1JSUkRdICA9IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LDAsMCB9LCAgLyogZS5nLiBsbWggICAqLwotCVtJTlNUUl9SU0VfQ0NSRF0gID0geyAweGZmLCBDXzgsQ18xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxtaCAgICovCi0JW0lOU1RSX1JTRV9SVVJEXSAgPSB7IDB4ZmYsIFJfOCxVNF8xMixEXzIwLEJfMTYsMCwwIH0sIC8qIGUuZy4gaWNtaCAgKi8KLQlbSU5TVFJfUlNMX1IwUkRdICA9IHsgMHhmZiwgUl84LERfMjAsQl8xNiwwLDAsMCB9LCAgICAgLyogZS5nLiB0cCAgICAqLwotCVtJTlNUUl9SU0lfUlJQXQkgID0geyAweGZmLCBSXzgsUl8xMixKMTZfMTYsMCwwLDAgfSwgICAvKiBlLmcuIGJyeGggICovCi0JW0lOU1RSX1JTWV9SUlJEXSAgPSB7IDB4ZmYsIFJfOCxSXzEyLEQyMF8yMCxCXzE2LDAsMCB9LC8qIGUuZy4gc3RteSAgKi8KKwlbSU5TVFJfRV0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUklFX1IwVVVdICA9IHsgMHhmZiwgUl84LFUxNl8xNixVNF8zMiwwLDAsMCB9LAorCVtJTlNUUl9SSUVfUlJQVV0gID0geyAweGZmLCBSXzgsUl8xMixVNF8zMixKMTZfMTYsMCwwIH0sCisJW0lOU1RSX1JJRV9SUlBdCSAgPSB7IDB4ZmYsIFJfOCxSXzEyLEoxNl8xNiwwLDAsMCB9LAorCVtJTlNUUl9SSUVfUlJVVVVdID0geyAweGZmLCBSXzgsUl8xMixVOF8xNixVOF8yNCxVOF8zMiwwIH0sCisJW0lOU1RSX1JJRV9SVVBJXSAgPSB7IDB4ZmYsIFJfOCxJOF8zMixVNF8xMixKMTZfMTYsMCwwIH0sCisJW0lOU1RSX1JJTF9SSV0JICA9IHsgMHgwZiwgUl84LEkzMl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJTF9SUF0JICA9IHsgMHgwZiwgUl84LEozMl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJTF9SVV0JICA9IHsgMHgwZiwgUl84LFUzMl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJTF9VUF0JICA9IHsgMHgwZiwgVTRfOCxKMzJfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSVNfUjBSRFVdID0geyAweGZmLCBSXzgsVThfMzIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SSVNfUlVSREldID0geyAweGZmLCBSXzgsSThfMzIsVTRfMTIsRF8yMCxCXzE2LDAgfSwKKwlbSU5TVFJfUklTX1JVUkRVXSA9IHsgMHhmZiwgUl84LFU4XzMyLFU0XzEyLERfMjAsQl8xNiwwIH0sCisJW0lOU1RSX1JJX1JJXQkgID0geyAweDBmLCBSXzgsSTE2XzE2LDAsMCwwLDAgfSwKKwlbSU5TVFJfUklfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMTZfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSV9SVV0JICA9IHsgMHgwZiwgUl84LFUxNl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJX1VQXQkgID0geyAweDBmLCBVNF84LEoxNl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV8wMF0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFXzBSXQkgID0geyAweGZmLCBSXzI4LDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfQUFdCSAgPSB7IDB4ZmYsIEFfMjQsQV8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9BUl0JICA9IHsgMHhmZiwgQV8yNCxSXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX0YwXQkgID0geyAweGZmLCBGXzI0LDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfRkZdCSAgPSB7IDB4ZmYsIEZfMjQsRl8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9GUl0JICA9IHsgMHhmZiwgRl8yNCxSXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX1IwXQkgID0geyAweGZmLCBSXzI0LDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfUkFdCSAgPSB7IDB4ZmYsIFJfMjQsQV8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9SRl0JICA9IHsgMHhmZiwgUl8yNCxGXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX1JSXQkgID0geyAweGZmLCBSXzI0LFJfMjgsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfUlJfT1BUXT0geyAweGZmLCBSXzI0LFJPXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJGXzBVRkZdICA9IHsgMHhmZiwgRl8yNCxGXzI4LFU0XzIwLDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GMEZGMl0gPSB7IDB4ZmYsIEZfMjQsRl8xNixGXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GMEZGXSAgPSB7IDB4ZmYsIEZfMTYsRl8yNCxGXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GMEZSXSAgPSB7IDB4ZmYsIEZfMjQsRl8xNixSXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GRlJVXSAgPSB7IDB4ZmYsIEZfMjQsRl8xNixSXzI4LFU0XzIwLDAsMCB9LAorCVtJTlNUUl9SUkZfRlVGRl0gID0geyAweGZmLCBGXzI0LEZfMTYsRl8yOCxVNF8yMCwwLDAgfSwKKwlbSU5TVFJfUlJGX00wUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LE1fMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1IwUlJdICA9IHsgMHhmZiwgUl8yNCxSXzE2LFJfMjgsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1JVUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LFJfMTYsVTRfMjAsMCwwIH0sCisJW0lOU1RSX1JSRl9VMEZGXSAgPSB7IDB4ZmYsIEZfMjQsVTRfMTYsRl8yOCwwLDAsMCB9LAorCVtJTlNUUl9SUkZfVTBSRl0gID0geyAweGZmLCBSXzI0LFU0XzE2LEZfMjgsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1UwUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LFU0XzE2LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9VVUZGXSAgPSB7IDB4ZmYsIEZfMjQsVTRfMTYsRl8yOCxVNF8yMCwwLDAgfSwKKwlbSU5TVFJfUlJSX0YwRkZdICA9IHsgMHhmZiwgRl8yNCxGXzI4LEZfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlJTX1JSUkRVXSA9IHsgMHhmZiwgUl84LFJfMTIsVTRfMzIsRF8yMCxCXzE2LDAgfSwKKwlbSU5TVFJfUlJfRkZdCSAgPSB7IDB4ZmYsIEZfOCxGXzEyLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJfUjBdCSAgPSB7IDB4ZmYsIFJfOCwgMCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSX1JSXQkgID0geyAweGZmLCBSXzgsUl8xMiwwLDAsMCwwIH0sCisJW0lOU1RSX1JSX1UwXQkgID0geyAweGZmLCBVOF84LCAwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJfVVJdCSAgPSB7IDB4ZmYsIFU0XzgsUl8xMiwwLDAsMCwwIH0sCisJW0lOU1RSX1JTRV9DQ1JEXSAgPSB7IDB4ZmYsIENfOCxDXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNFX1JSUkRdICA9IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU0VfUlVSRF0gID0geyAweGZmLCBSXzgsVTRfMTIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU0lfUlJQXQkgID0geyAweGZmLCBSXzgsUl8xMixKMTZfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlNMX1IwUkRdICA9IHsgMHhmZiwgRF8yMCxMNF84LEJfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlNZX0FBUkRdICA9IHsgMHhmZiwgQV84LEFfMTIsRDIwXzIwLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JTWV9DQ1JEXSAgPSB7IDB4ZmYsIENfOCxDXzEyLEQyMF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU1lfUlJSRF0gID0geyAweGZmLCBSXzgsUl8xMixEMjBfMjAsQl8xNiwwLDAgfSwKIAlbSU5TVFJfUlNZX1JVUkRdICA9IHsgMHhmZiwgUl84LFU0XzEyLEQyMF8yMCxCXzE2LDAsMCB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIGljbWggICovCi0JW0lOU1RSX1JTWV9BQVJEXSAgPSB7IDB4ZmYsIEFfOCxBXzEyLEQyMF8yMCxCXzE2LDAsMCB9LC8qIGUuZy4gbGFteSAgKi8KLQlbSU5TVFJfUlNZX0NDUkRdICA9IHsgMHhmZiwgQ184LENfMTIsRDIwXzIwLEJfMTYsMCwwIH0sLyogZS5nLiBsYW15ICAqLwotCVtJTlNUUl9SU19BQVJEXQkgID0geyAweGZmLCBBXzgsQV8xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxhbSAgICovCi0JW0lOU1RSX1JTX0NDUkRdCSAgPSB7IDB4ZmYsIENfOCxDXzEyLERfMjAsQl8xNiwwLDAgfSwgIC8qIGUuZy4gbGN0bCAgKi8KLQlbSU5TVFJfUlNfUjBSRF0JICA9IHsgMHhmZiwgUl84LERfMjAsQl8xNiwwLDAsMCB9LCAgICAgLyogZS5nLiBzbGwgICAqLwotCVtJTlNUUl9SU19SUlJEXQkgID0geyAweGZmLCBSXzgsUl8xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGNzICAgICovCi0JW0lOU1RSX1JTX1JVUkRdCSAgPSB7IDB4ZmYsIFJfOCxVNF8xMixEXzIwLEJfMTYsMCwwIH0sIC8qIGUuZy4gaWNtICAgKi8KLQlbSU5TVFJfUlhFX0ZSUkRdICA9IHsgMHhmZiwgRl84LERfMjAsWF8xMixCXzE2LDAsMCB9LCAgLyogZS5nLiBheGJyICAqLwotCVtJTlNUUl9SWEVfUlJSRF0gID0geyAweGZmLCBSXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxnICAgICovCisJW0lOU1RSX1JTX0FBUkRdCSAgPSB7IDB4ZmYsIEFfOCxBXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNfQ0NSRF0JICA9IHsgMHhmZiwgQ184LENfMTIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU19SMFJEXQkgID0geyAweGZmLCBSXzgsRF8yMCxCXzE2LDAsMCwwIH0sCisJW0lOU1RSX1JTX1JSUkRdCSAgPSB7IDB4ZmYsIFJfOCxSXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNfUlVSRF0JICA9IHsgMHhmZiwgUl84LFU0XzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlhFX0ZSUkRdICA9IHsgMHhmZiwgRl84LERfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWEVfUlJSRF0gID0geyAweGZmLCBSXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sCiAJW0lOU1RSX1JYRl9GUlJERl0gPSB7IDB4ZmYsIEZfMzIsRl84LERfMjAsWF8xMixCXzE2LDAgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBtYWRiICAqLwotCVtJTlNUUl9SWFlfUlJSRF0gID0geyAweGZmLCBSXzgsRDIwXzIwLFhfMTIsQl8xNiwwLDAgfSwvKiBlLmcuIGx5ICAgICovCi0JW0lOU1RSX1JYWV9GUlJEXSAgPSB7IDB4ZmYsIEZfOCxEMjBfMjAsWF8xMixCXzE2LDAsMCB9LC8qIGUuZy4gbGV5ICAgKi8KLQlbSU5TVFJfUlhfRlJSRF0JICA9IHsgMHhmZiwgRl84LERfMjAsWF8xMixCXzE2LDAsMCB9LCAgLyogZS5nLiBhZSAgICAqLwotCVtJTlNUUl9SWF9SUlJEXQkgID0geyAweGZmLCBSXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sICAvKiBlLmcuIGwgICAgICovCi0JW0lOU1RSX1JYX1VSUkRdCSAgPSB7IDB4ZmYsIFU0XzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sIC8qIGUuZy4gYmMgICAgKi8KLQlbSU5TVFJfU0lfVVJEXQkgID0geyAweGZmLCBEXzIwLEJfMTYsVThfOCwwLDAsMCB9LCAgICAvKiBlLmcuIGNsaSAgICovCi0JW0lOU1RSX1NJWV9VUkRdCSAgPSB7IDB4ZmYsIEQyMF8yMCxCXzE2LFU4XzgsMCwwLDAgfSwgIC8qIGUuZy4gdG15ICAgKi8KLQlbSU5TVFJfU1NFX1JEUkRdICA9IHsgMHhmZiwgRF8yMCxCXzE2LERfMzYsQl8zMiwwLDAgfSwgLyogZS5nLiBtdnNkayAqLwotCVtJTlNUUl9TU19MMFJEUkRdID0geyAweGZmLCBEXzIwLEw4XzgsQl8xNixEXzM2LEJfMzIsMCB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIG12YyAgICovCi0JW0lOU1RSX1NTX0xJUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LERfMzYsQl8zMixVNF8xMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIHNycCAgICovCi0JW0lOU1RSX1NTX0xMUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LERfMzYsTDRfMTIsQl8zMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIHBhY2sgICovCi0JW0lOU1RSX1NTX1JSUkRSRF0gPSB7IDB4ZmYsIERfMjAsUl84LEJfMTYsRF8zNixCXzMyLFJfMTIgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBtdmNrICAqLwotCVtJTlNUUl9TU19SUlJEUkQyXT0geyAweGZmLCBSXzgsRF8yMCxCXzE2LFJfMTIsRF8zNixCXzMyIH0sCi0JCQkJCQkJICAgICAgIC8qIGUuZy4gcGxvICAgKi8KLQlbSU5TVFJfU1NfUlJSRFJEM109IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LERfMzYsQl8zMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIGxtZCAgICovCi0JW0lOU1RSX1NfMDBdCSAgPSB7IDB4ZmYsIDAsMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIGhzY2ggICovCi0JW0lOU1RSX1NfUkRdCSAgPSB7IDB4ZmYsIERfMjAsQl8xNiwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gbHBzdyAgKi8KKwlbSU5TVFJfUlhZX0ZSUkRdICA9IHsgMHhmZiwgRl84LEQyMF8yMCxYXzEyLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JYWV9SUlJEXSAgPSB7IDB4ZmYsIFJfOCxEMjBfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWFlfVVJSRF0gID0geyAweGZmLCBVNF84LEQyMF8yMCxYXzEyLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JYX0ZSUkRdCSAgPSB7IDB4ZmYsIEZfOCxEXzIwLFhfMTIsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlhfUlJSRF0JICA9IHsgMHhmZiwgUl84LERfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWF9VUlJEXQkgID0geyAweGZmLCBVNF84LERfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9TSUxfUkRJXSAgID0geyAweGZmLCBEXzIwLEJfMTYsSTE2XzMyLDAsMCwwIH0sCisJW0lOU1RSX1NJTF9SRFVdICAgPSB7IDB4ZmYsIERfMjAsQl8xNixVMTZfMzIsMCwwLDAgfSwKKwlbSU5TVFJfU0lZX0lSRF0gICA9IHsgMHhmZiwgRDIwXzIwLEJfMTYsSThfOCwwLDAsMCB9LAorCVtJTlNUUl9TSVlfVVJEXQkgID0geyAweGZmLCBEMjBfMjAsQl8xNixVOF84LDAsMCwwIH0sCisJW0lOU1RSX1NJX1VSRF0JICA9IHsgMHhmZiwgRF8yMCxCXzE2LFU4XzgsMCwwLDAgfSwKKwlbSU5TVFJfU1NFX1JEUkRdICA9IHsgMHhmZiwgRF8yMCxCXzE2LERfMzYsQl8zMiwwLDAgfSwKIAlbSU5TVFJfU1NGX1JSRFJEXSA9IHsgMHgwMCwgRF8yMCxCXzE2LERfMzYsQl8zMixSXzgsMCB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIG12Y29zICovCisJW0lOU1RSX1NTX0wwUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDhfOCxCXzE2LERfMzYsQl8zMiwwIH0sCisJW0lOU1RSX1NTX0xJUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LERfMzYsQl8zMixVNF8xMiB9LAorCVtJTlNUUl9TU19MTFJEUkRdID0geyAweGZmLCBEXzIwLEw0XzgsQl8xNixEXzM2LEw0XzEyLEJfMzIgfSwKKwlbSU5TVFJfU1NfUlJSRFJEMl09IHsgMHhmZiwgUl84LERfMjAsQl8xNixSXzEyLERfMzYsQl8zMiB9LAorCVtJTlNUUl9TU19SUlJEUkQzXT0geyAweGZmLCBSXzgsUl8xMixEXzIwLEJfMTYsRF8zNixCXzMyIH0sCisJW0lOU1RSX1NTX1JSUkRSRF0gPSB7IDB4ZmYsIERfMjAsUl84LEJfMTYsRF8zNixCXzMyLFJfMTIgfSwKKwlbSU5TVFJfU18wMF0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfU19SRF0JICA9IHsgMHhmZiwgRF8yMCxCXzE2LDAsMCwwLDAgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW5zbiBvcGNvZGVbXSA9IHsKQEAgLTQ1NCw2ICs0OTMsOCBAQAogc3RhdGljIHN0cnVjdCBpbnNuIG9wY29kZV8wMVtdID0gewogI2lmZGVmIENPTkZJR182NEJJVAogCXsgInNhbTY0IiwgMHgwZSwgSU5TVFJfRSB9LAorCXsgInBmcG8iLCAweDBhLCBJTlNUUl9FIH0sCisJeyAicHRmZiIsIDB4MDQsIElOU1RSX0UgfSwKICNlbmRpZgogCXsgInByIiwgMHgwMSwgSU5TVFJfRSB9LAogCXsgInVwdCIsIDB4MDIsIElOU1RSX0UgfSwKQEAgLTUxOSw2ICs1NjAsOCBAQAogCXsgImN1dGZ1IiwgMHhhNywgSU5TVFJfUlJGX00wUlIgfSwKIAl7ICJzdGZsZSIsIDB4YjAsIElOU1RSX1NfUkQgfSwKIAl7ICJscHN3ZSIsIDB4YjIsIElOU1RSX1NfUkQgfSwKKwl7ICJzcm5tdCIsIDB4YjksIElOU1RSX1NfUkQgfSwKKwl7ICJsZmFzIiwgMHhiZCwgSU5TVFJfU19SRCB9LAogI2VuZGlmCiAJeyAic3RpZHAiLCAweDAyLCBJTlNUUl9TX1JEIH0sCiAJeyAic2NrIiwgMHgwNCwgSU5TVFJfU19SRCB9LApAQCAtNTg5LDcgKzYzMiw2IEBACiAJeyAiY2xzdCIsIDB4NWQsIElOU1RSX1JSRV9SUiB9LAogCXsgInNyc3QiLCAweDVlLCBJTlNUUl9SUkVfUlIgfSwKIAl7ICJjbXBzYyIsIDB4NjMsIElOU1RSX1JSRV9SUiB9LAotCXsgImNtcHNjIiwgMHg2MywgSU5TVFJfUlJFX1JSIH0sCiAJeyAic2lnYSIsIDB4NzQsIElOU1RSX1NfUkQgfSwKIAl7ICJ4c2NoIiwgMHg3NiwgSU5TVFJfU18wMCB9LAogCXsgInJwIiwgMHg3NywgSU5TVFJfU19SRCB9LApAQCAtNjMwLDYgKzY3Miw1NyBAQAogCXsgImNnZXIiLCAweGM4LCBJTlNUUl9SUkZfVTBSRiB9LAogCXsgImNnZHIiLCAweGM5LCBJTlNUUl9SUkZfVTBSRiB9LAogCXsgImNneHIiLCAweGNhLCBJTlNUUl9SUkZfVTBSRiB9LAorCXsgImxwZGZyIiwgMHg3MCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAibG5kZnIiLCAweDcxLCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJjcHNkciIsIDB4NzIsIElOU1RSX1JSRl9GMEZGMiB9LAorCXsgImxjZGZyIiwgMHg3MywgSU5TVFJfUlJFX0ZGIH0sCisJeyAibGRnciIsIDB4YzEsIElOU1RSX1JSRV9GUiB9LAorCXsgImxnZHIiLCAweGNkLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJhZHRyIiwgMHhkMiwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJheHRyIiwgMHhkYSwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJjZHRyIiwgMHhlNCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAiY3h0ciIsIDB4ZWMsIElOU1RSX1JSRV9GRiB9LAorCXsgImtkdHIiLCAweGUwLCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJreHRyIiwgMHhlOCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAiY2VkdHIiLCAweGY0LCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJjZXh0ciIsIDB4ZmMsIElOU1RSX1JSRV9GRiB9LAorCXsgImNkZ3RyIiwgMHhmMSwgSU5TVFJfUlJFX0ZSIH0sCisJeyAiY3hndHIiLCAweGY5LCBJTlNUUl9SUkVfRlIgfSwKKwl7ICJjZHN0ciIsIDB4ZjMsIElOU1RSX1JSRV9GUiB9LAorCXsgImN4c3RyIiwgMHhmYiwgSU5TVFJfUlJFX0ZSIH0sCisJeyAiY2R1dHIiLCAweGYyLCBJTlNUUl9SUkVfRlIgfSwKKwl7ICJjeHV0ciIsIDB4ZmEsIElOU1RSX1JSRV9GUiB9LAorCXsgImNnZHRyIiwgMHhlMSwgSU5TVFJfUlJGX1UwUkYgfSwKKwl7ICJjZ3h0ciIsIDB4ZTksIElOU1RSX1JSRl9VMFJGIH0sCisJeyAiY3NkdHIiLCAweGUzLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJjc3h0ciIsIDB4ZWIsIElOU1RSX1JSRV9SRiB9LAorCXsgImN1ZHRyIiwgMHhlMiwgSU5TVFJfUlJFX1JGIH0sCisJeyAiY3V4dHIiLCAweGVhLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJkZHRyIiwgMHhkMSwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJkeHRyIiwgMHhkOSwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJlZWR0ciIsIDB4ZTUsIElOU1RSX1JSRV9SRiB9LAorCXsgImVleHRyIiwgMHhlZCwgSU5TVFJfUlJFX1JGIH0sCisJeyAiZXNkdHIiLCAweGU3LCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJlc3h0ciIsIDB4ZWYsIElOU1RSX1JSRV9SRiB9LAorCXsgImllZHRyIiwgMHhmNiwgSU5TVFJfUlJGX0YwRlIgfSwKKwl7ICJpZXh0ciIsIDB4ZmUsIElOU1RSX1JSRl9GMEZSIH0sCisJeyAibHRkdHIiLCAweGQ2LCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJsdHh0ciIsIDB4ZGUsIElOU1RSX1JSRV9GRiB9LAorCXsgImZpZHRyIiwgMHhkNywgSU5TVFJfUlJGX1VVRkYgfSwKKwl7ICJmaXh0ciIsIDB4ZGYsIElOU1RSX1JSRl9VVUZGIH0sCisJeyAibGRldHIiLCAweGQ0LCBJTlNUUl9SUkZfMFVGRiB9LAorCXsgImx4ZHRyIiwgMHhkYywgSU5TVFJfUlJGXzBVRkYgfSwKKwl7ICJsZWR0ciIsIDB4ZDUsIElOU1RSX1JSRl9VVUZGIH0sCisJeyAibGR4dHIiLCAweGRkLCBJTlNUUl9SUkZfVVVGRiB9LAorCXsgIm1kdHIiLCAweGQwLCBJTlNUUl9SUlJfRjBGRiB9LAorCXsgIm14dHIiLCAweGQ4LCBJTlNUUl9SUlJfRjBGRiB9LAorCXsgInFhZHRyIiwgMHhmNSwgSU5TVFJfUlJGX0ZVRkYgfSwKKwl7ICJxYXh0ciIsIDB4ZmQsIElOU1RSX1JSRl9GVUZGIH0sCisJeyAicnJkdHIiLCAweGY3LCBJTlNUUl9SUkZfRkZSVSB9LAorCXsgInJyeHRyIiwgMHhmZiwgSU5TVFJfUlJGX0ZGUlUgfSwKKwl7ICJzZmFzciIsIDB4ODUsIElOU1RSX1JSRV9SMCB9LAorCXsgInNkdHIiLCAweGQzLCBJTlNUUl9SUlJfRjBGRiB9LAorCXsgInN4dHIiLCAweGRiLCBJTlNUUl9SUlJfRjBGRiB9LAogI2VuZGlmCiAJeyAibHBlYnIiLCAweDAwLCBJTlNUUl9SUkVfRkYgfSwKIAl7ICJsbmViciIsIDB4MDEsIElOU1RSX1JSRV9GRiB9LApAQCAtNzgwLDYgKzg3MywxNCBAQAogCXsgImN1MjQiLCAweGIxLCBJTlNUUl9SUkZfTTBSUiB9LAogCXsgImN1NDEiLCAweGIyLCBJTlNUUl9SUkZfTTBSUiB9LAogCXsgImN1NDIiLCAweGIzLCBJTlNUUl9SUkZfTTBSUiB9LAorCXsgImNydCIsIDB4NzIsIElOU1RSX1JSRl9VMFJSIH0sCisJeyAiY2dydCIsIDB4NjAsIElOU1RSX1JSRl9VMFJSIH0sCisJeyAiY2xydCIsIDB4NzMsIElOU1RSX1JSRl9VMFJSIH0sCisJeyAiY2xncnQiLCAweDYxLCBJTlNUUl9SUkZfVTBSUiB9LAorCXsgInB0ZiIsIDB4YTIsIElOU1RSX1JSRV9SMCB9LAorCXsgInBmbWYiLCAweGFmLCBJTlNUUl9SUkVfUlIgfSwKKwl7ICJ0cnRlIiwgMHhiZiwgSU5TVFJfUlJGX00wUlIgfSwKKwl7ICJ0cnRyZSIsIDB4YmQsIElOU1RSX1JSRl9NMFJSIH0sCiAjZW5kaWYKIAl7ICJrbWFjIiwgMHgxZSwgSU5TVFJfUlJFX1JSIH0sCiAJeyAibHJ2ciIsIDB4MWYsIElOU1RSX1JSRV9SUiB9LApAQCAtODM1LDYgKzkzNiw0MyBAQAogCXsgImNmaSIsIDB4MGQsIElOU1RSX1JJTF9SSSB9LAogCXsgImNsZ2ZpIiwgMHgwZSwgSU5TVFJfUklMX1JVIH0sCiAJeyAiY2xmaSIsIDB4MGYsIElOU1RSX1JJTF9SVSB9LAorCXsgIm1zZmkiLCAweDAxLCBJTlNUUl9SSUxfUkkgfSwKKwl7ICJtc2dmaSIsIDB4MDAsIElOU1RSX1JJTF9SSSB9LAorI2VuZGlmCisJeyAiIiwgMCwgSU5TVFJfSU5WQUxJRCB9Cit9OworCitzdGF0aWMgc3RydWN0IGluc24gb3Bjb2RlX2M0W10gPSB7CisjaWZkZWYgQ09ORklHXzY0QklUCisJeyAibHJsIiwgMHgwZCwgSU5TVFJfUklMX1JQIH0sCisJeyAibGdybCIsIDB4MDgsIElOU1RSX1JJTF9SUCB9LAorCXsgImxnZnJsIiwgMHgwYywgSU5TVFJfUklMX1JQIH0sCisJeyAibGhybCIsIDB4MDUsIElOU1RSX1JJTF9SUCB9LAorCXsgImxnaHJsIiwgMHgwNCwgSU5TVFJfUklMX1JQIH0sCisJeyAibGxnZnJsIiwgMHgwZSwgSU5TVFJfUklMX1JQIH0sCisJeyAibGxocmwiLCAweDAyLCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJsbGdocmwiLCAweDA2LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJzdHJsIiwgMHgwZiwgSU5TVFJfUklMX1JQIH0sCisJeyAic3RncmwiLCAweDBiLCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJzdGhybCIsIDB4MDcsIElOU1RSX1JJTF9SUCB9LAorI2VuZGlmCisJeyAiIiwgMCwgSU5TVFJfSU5WQUxJRCB9Cit9OworCitzdGF0aWMgc3RydWN0IGluc24gb3Bjb2RlX2M2W10gPSB7CisjaWZkZWYgQ09ORklHXzY0QklUCisJeyAiY3JsIiwgMHgwZCwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2dybCIsIDB4MDgsIElOU1RSX1JJTF9SUCB9LAorCXsgImNnZnJsIiwgMHgwYywgSU5TVFJfUklMX1JQIH0sCisJeyAiY2hybCIsIDB4MDUsIElOU1RSX1JJTF9SUCB9LAorCXsgImNnaHJsIiwgMHgwNCwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xybCIsIDB4MGYsIElOU1RSX1JJTF9SUCB9LAorCXsgImNsZ3JsIiwgMHgwYSwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xnZnJsIiwgMHgwZSwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xocmwiLCAweDA3LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJjbGdocmwiLCAweDA2LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJwZmRybCIsIDB4MDIsIElOU1RSX1JJTF9VUCB9LAorCXsgImV4cmwiLCAweDAwLCBJTlNUUl9SSUxfUlAgfSwKICNlbmRpZgogCXsgIiIsIDAsIElOU1RSX0lOVkFMSUQgfQogfTsKQEAgLTg0Miw2ICs5ODAsOCBAQAogc3RhdGljIHN0cnVjdCBpbnNuIG9wY29kZV9jOFtdID0gewogI2lmZGVmIENPTkZJR182NEJJVAogCXsgIm12Y29zIiwgMHgwMCwgSU5TVFJfU1NGX1JSRFJEIH0sCisJeyAiZWN0ZyIsIDB4MDEsIElOU1RSX1NTRl9SUkRSRCB9LAorCXsgImNzc3QiLCAweDAyLCBJTlNUUl9TU0ZfUlJEUkQgfSwKICNlbmRpZgogCXsgIiIsIDAsIElOU1RSX0lOVkFMSUQgfQogfTsKQEAgLTkxNyw2ICsxMDU3LDEyIEBACiAJeyAibGxnaCIsIDB4OTEsIElOU1RSX1JYWV9SUlJEIH0sCiAJeyAibGxjIiwgMHg5NCwgSU5TVFJfUlhZX1JSUkQgfSwKIAl7ICJsbGgiLCAweDk1LCBJTlNUUl9SWFlfUlJSRCB9LAorCXsgImNnaCIsIDB4MzQsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibGFleSIsIDB4NzUsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibHRnZiIsIDB4MzIsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibWZ5IiwgMHg1YywgSU5TVFJfUlhZX1JSUkQgfSwKKwl7ICJtaHkiLCAweDdjLCBJTlNUUl9SWFlfUlJSRCB9LAorCXsgInBmZCIsIDB4MzYsIElOU1RSX1JYWV9VUlJEIH0sCiAjZW5kaWYKIAl7ICJscnYiLCAweDFlLCBJTlNUUl9SWFlfUlJSRCB9LAogCXsgImxydmgiLCAweDFmLCBJTlNUUl9SWFlfUlJSRCB9LApAQCAtOTMxLDYgKzEwNzcsMTUgQEAKIHN0YXRpYyBzdHJ1Y3QgaW5zbiBvcGNvZGVfZTVbXSA9IHsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl7ICJzdHJhZyIsIDB4MDIsIElOU1RSX1NTRV9SRFJEIH0sCisJeyAiY2hoc2kiLCAweDU0LCBJTlNUUl9TSUxfUkRJIH0sCisJeyAiY2hzaSIsIDB4NWMsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJjZ2hzaSIsIDB4NTgsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJjbGhoc2kiLCAweDU1LCBJTlNUUl9TSUxfUkRVIH0sCisJeyAiY2xmaHNpIiwgMHg1ZCwgSU5TVFJfU0lMX1JEVSB9LAorCXsgImNsZ2hzaSIsIDB4NTksIElOU1RSX1NJTF9SRFUgfSwKKwl7ICJtdmhoaSIsIDB4NDQsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJtdmhpIiwgMHg0YywgSU5TVFJfU0lMX1JESSB9LAorCXsgIm12Z2hpIiwgMHg0OCwgSU5TVFJfU0lMX1JESSB9LAogI2VuZGlmCiAJeyAibGFzcCIsIDB4MDAsIElOU1RSX1NTRV9SRFJEIH0sCiAJeyAidHByb3QiLCAweDAxLCBJTlNUUl9TU0VfUkRSRCB9LApAQCAtOTc3LDYgKzExMzIsMTEgQEAKIAl7ICJsbXkiLCAweDk4LCBJTlNUUl9SU1lfUlJSRCB9LAogCXsgImxhbXkiLCAweDlhLCBJTlNUUl9SU1lfQUFSRCB9LAogCXsgInN0YW15IiwgMHg5YiwgSU5TVFJfUlNZX0FBUkQgfSwKKwl7ICJhc2kiLCAweDZhLCBJTlNUUl9TSVlfSVJEIH0sCisJeyAiYWdzaSIsIDB4N2EsIElOU1RSX1NJWV9JUkQgfSwKKwl7ICJhbHNpIiwgMHg2ZSwgSU5TVFJfU0lZX0lSRCB9LAorCXsgImFsZ3NpIiwgMHg3ZSwgSU5TVFJfU0lZX0lSRCB9LAorCXsgImVjYWciLCAweDRjLCBJTlNUUl9SU1lfUlJSRCB9LAogI2VuZGlmCiAJeyAicmxsIiwgMHgxZCwgSU5TVFJfUlNZX1JSUkQgfSwKIAl7ICJtdmNsdSIsIDB4OGUsIElOU1RSX1JTWV9SUlJEIH0sCkBAIC05ODgsNiArMTE0OCwzMCBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCXsgImJyeGhnIiwgMHg0NCwgSU5TVFJfUklFX1JSUCB9LAogCXsgImJyeGxnIiwgMHg0NSwgSU5TVFJfUklFX1JSUCB9LAorCXsgImNyYiIsIDB4ZjYsIElOU1RSX1JSU19SUlJEVSB9LAorCXsgImNncmIiLCAweGU0LCBJTlNUUl9SUlNfUlJSRFUgfSwKKwl7ICJjcmoiLCAweDc2LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNncmoiLCAweDY0LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNpYiIsIDB4ZmUsIElOU1RSX1JJU19SVVJESSB9LAorCXsgImNnaWIiLCAweGZjLCBJTlNUUl9SSVNfUlVSREkgfSwKKwl7ICJjaWoiLCAweDdlLCBJTlNUUl9SSUVfUlVQSSB9LAorCXsgImNnaWoiLCAweDdjLCBJTlNUUl9SSUVfUlVQSSB9LAorCXsgImNpdCIsIDB4NzIsIElOU1RSX1JJRV9SMElVIH0sCisJeyAiY2dpdCIsIDB4NzAsIElOU1RSX1JJRV9SMElVIH0sCisJeyAiY2xyYiIsIDB4ZjcsIElOU1RSX1JSU19SUlJEVSB9LAorCXsgImNsZ3JiIiwgMHhlNSwgSU5TVFJfUlJTX1JSUkRVIH0sCisJeyAiY2xyaiIsIDB4NzcsIElOU1RSX1JJRV9SUlBVIH0sCisJeyAiY2xncmoiLCAweDY1LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNsaWIiLCAweGZmLCBJTlNUUl9SSVNfUlVSRFUgfSwKKwl7ICJjbGdpYiIsIDB4ZmQsIElOU1RSX1JJU19SVVJEVSB9LAorCXsgImNsaWoiLCAweDdmLCBJTlNUUl9SSUVfUlVQVSB9LAorCXsgImNsZ2lqIiwgMHg3ZCwgSU5TVFJfUklFX1JVUFUgfSwKKwl7ICJjbGZpdCIsIDB4NzMsIElOU1RSX1JJRV9SMFVVIH0sCisJeyAiY2xnaXQiLCAweDcxLCBJTlNUUl9SSUVfUjBVVSB9LAorCXsgInJuc2JnIiwgMHg1NCwgSU5TVFJfUklFX1JSVVVVIH0sCisJeyAicnhzYmciLCAweDU3LCBJTlNUUl9SSUVfUlJVVVUgfSwKKwl7ICJyb3NiZyIsIDB4NTYsIElOU1RSX1JJRV9SUlVVVSB9LAorCXsgInJpc2JnIiwgMHg1NSwgSU5TVFJfUklFX1JSVVVVIH0sCiAjZW5kaWYKIAl7ICIiLCAwLCBJTlNUUl9JTlZBTElEIH0KIH07CkBAIC0xMDA0LDYgKzExODgsMTYgQEAKIAl7ICJsZHkiLCAweDY1LCBJTlNUUl9SWFlfRlJSRCB9LAogCXsgInN0ZXkiLCAweDY2LCBJTlNUUl9SWFlfRlJSRCB9LAogCXsgInN0ZHkiLCAweDY3LCBJTlNUUl9SWFlfRlJSRCB9LAorCXsgInNsZHQiLCAweDQwLCBJTlNUUl9SWEZfRlJSREYgfSwKKwl7ICJzbHh0IiwgMHg0OCwgSU5TVFJfUlhGX0ZSUkRGIH0sCisJeyAic3JkdCIsIDB4NDEsIElOU1RSX1JYRl9GUlJERiB9LAorCXsgInNyeHQiLCAweDQ5LCBJTlNUUl9SWEZfRlJSREYgfSwKKwl7ICJ0ZGNldCIsIDB4NTAsIElOU1RSX1JYRV9GUlJEIH0sCisJeyAidGRjZHQiLCAweDU0LCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInRkY3h0IiwgMHg1OCwgSU5TVFJfUlhFX0ZSUkQgfSwKKwl7ICJ0ZGdldCIsIDB4NTEsIElOU1RSX1JYRV9GUlJEIH0sCisJeyAidGRnZHQiLCAweDU1LCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInRkZ3h0IiwgMHg1OSwgSU5TVFJfUlhFX0ZSUkQgfSwKICNlbmRpZgogCXsgImxkZWIiLCAweDA0LCBJTlNUUl9SWEVfRlJSRCB9LAogCXsgImx4ZGIiLCAweDA1LCBJTlNUUl9SWEVfRlJSRCB9LApAQCAtMTAzNyw2ICsxMjMxLDcgQEAKIAl7ICJtYWUiLCAweDJlLCBJTlNUUl9SWEZfRlJSREYgfSwKIAl7ICJtc2UiLCAweDJmLCBJTlNUUl9SWEZfRlJSREYgfSwKIAl7ICJzcWUiLCAweDM0LCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInNxZCIsIDB4MzUsIElOU1RSX1JYRV9GUlJEIH0sCiAJeyAibWVlIiwgMHgzNywgSU5TVFJfUlhFX0ZSUkQgfSwKIAl7ICJtYWQiLCAweDNlLCBJTlNUUl9SWEZfRlJSREYgfSwKIAl7ICJtc2QiLCAweDNmLCBJTlNUUl9SWEZfRlJSREYgfSwKQEAgLTExMTcsNiArMTMxMiwxMiBAQAogCWNhc2UgMHhjMjoKIAkJdGFibGUgPSBvcGNvZGVfYzI7CiAJCWJyZWFrOworCWNhc2UgMHhjNDoKKwkJdGFibGUgPSBvcGNvZGVfYzQ7CisJCWJyZWFrOworCWNhc2UgMHhjNjoKKwkJdGFibGUgPSBvcGNvZGVfYzY7CisJCWJyZWFrOwogCWNhc2UgMHhjODoKIAkJdGFibGUgPSBvcGNvZGVfYzg7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IGU0OWU5ZTAuLjMxZDYxOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTIxNCwxMCArMjE0LDEzIEBACiAKIHN0YXRpYyBub2lubGluZSBfX2luaXQgdm9pZCBkZXRlY3RfbWFjaGluZV90eXBlKHZvaWQpCiB7Ci0JLyogTm8gVk0gaW5mb3JtYXRpb24/IExvb2tzIGxpa2UgTFBBUiAqLwotCWlmIChzdHNpKCZ2bW1zLCAzLCAyLCAyKSA9PSAtRU5PU1lTKQorCS8qIENoZWNrIGN1cnJlbnQtY29uZmlndXJhdGlvbi1sZXZlbCAqLworCWlmICgoc3RzaShOVUxMLCAwLCAwLCAwKSA+PiAyOCkgPD0gMikgeworCQlTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfTFBBUjsKIAkJcmV0dXJuOwotCWlmICghdm1tcy5jb3VudCkKKwl9CisJLyogR2V0IHZpcnR1YWwtbWFjaGluZSBjcHUgaW5mb3JtYXRpb24uICovCisJaWYgKHN0c2koJnZtbXMsIDMsIDIsIDIpID09IC1FTk9TWVMgfHwgIXZtbXMuY291bnQpCiAJCXJldHVybjsKIAogCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNPyBJZiBub3Qgd2UgYXNzdW1lIHovVk0gKi8KQEAgLTQwMiw4ICs0MDUsMTkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RfY29tbWFuZF9saW5lKHZvaWQpCiB7CisJaW50IGk7CisKKwkvKiBjb252ZXJ0IGFyY2ggY29tbWFuZCBsaW5lIHRvIGFzY2lpICovCisJZm9yIChpID0gMDsgaSA8IEFSQ0hfQ09NTUFORF9MSU5FX1NJWkU7IGkrKykKKwkJaWYgKENPTU1BTkRfTElORVtpXSAmIDB4ODApCisJCQlicmVhazsKKwlpZiAoaSA8IEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpCisJCUVCQ0FTQyhDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOworCUNPTU1BTkRfTElORVtBUkNIX0NPTU1BTkRfTElORV9TSVpFLTFdID0gMDsKKwogCS8qIGNvcHkgYXJjaCBjb21tYW5kIGxpbmUgKi8KLQlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOworCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIHN0cnN0cmlwKENPTU1BTkRfTElORSksCisJCUFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOwogCiAJLyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovCiAJaWYgKE1BQ0hJTkVfSVNfVk0pCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggZThlZjIxYy4uNDM0OGY5YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCmluZGV4IGYzMzY1OGYuLjI5ZmQwZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCkBAIC05LDExICs5LDkgQEAKICAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYwppbmRleCA1YTgyYmM2Li42YTgzZDA1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPHRyYWNlL3N5c2NhbGwuaD4KLSNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKQEAgLTIwMCwxMyArMjAwLDMgQEAKIAlyZXR1cm4gcGFyZW50OwogfQogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KLQotI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNfY2FsbF90YWJsZVtdOwotCi11bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKXN5c19jYWxsX3RhYmxlW25yXTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwppbmRleCBjNTJiNGY3Li5jYTRhNjJiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMTAKICAqCiAgKiAgICBBdXRob3Iocyk6IEhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPgogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CkBAIC0yMiwxMiArMjIsOSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9jcHUuaD4KIAogI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBBUkNIX09GRlNFVAk0CkBAIC0yODgsMTkgKzI4NSw3IEBACiAJYnoJLkxhZ2FpbjEJCSMgc2tpcCBkYXRlc2V0IHRyYWlsZXIKIAlsYQklcjUsMCglcjQsJXIyKQogCWxyCSVyMywlcjIKLS5MaWRlYmM6Ci0JdG0JMCglcjUpLDB4ODAJCSMgaGlnaCBvcmRlciBiaXQgc2V0ID8KLQlibwkuTGRvY3YJCQkjICB5ZXMgLT4gY29udmVydCBmcm9tIEVCQ0RJQwotCWFoaQklcjUsLTEKLQliY3QJJXIzLC5MaWRlYmMKLQliCS5Mbm9jdgotLkxkb2N2OgotCWwJJXIzLC5MY3Z0YWIKLQl0cgkwKDI1NiwlcjQpLDAoJXIzKQkjIGNvbnZlcnQgcGFyYW1ldGVycyB0byBhc2NpaQotCXRyCTI1NigyNTYsJXI0KSwwKCVyMykKLQl0cgk1MTIoMjU2LCVyNCksMCglcjMpCi0JdHIJNzY4KDEyMiwlcjQpLDAoJXIzKQotLkxub2N2OiBsYQklcjMsQ09NTUFORF9MSU5FLVBBUk1BUkVBKCVyMTIpICMgbG9hZCBhZHIuIG9mIGNvbW1hbmQgbGluZQorCWxhCSVyMyxDT01NQU5EX0xJTkUtUEFSTUFSRUEoJXIxMikgIyBsb2FkIGFkci4gb2YgY29tbWFuZCBsaW5lCiAJbXZjCTAoMjU2LCVyMyksMCglcjQpCiAJbXZjCTI1NigyNTYsJXIzKSwyNTYoJXI0KQogCW12Ywk1MTIoMjU2LCVyMyksNTEyKCVyNCkKQEAgLTM4NCw3ICszNjksNiBAQAogLkxpbml0cmQ6LmxvbmcgX2VuZCArIDB4NDAwMDAwCQkjIGRlZmF1bHQgYWRkcmVzcyBvZiBpbml0cmQKIC5McGFybToJLmxvbmcgIFBBUk1BUkVBCiAuTHN0YXJ0dXA6IC5sb25nIHN0YXJ0dXAKLS5MY3Z0YWI6LmxvbmcJX2ViY2FzYyAJCSMgZWJjZGljIHRvIGFzY2lpIHRhYmxlCiAuTHJlc2V0Oi5ieXRlCTB4YzMsMHhjOCwweGMxLDB4ZDUsMHhjNywweGM1LDB4NDAsMHhkOSwweGM0LDB4ZDksMHg0MAogCS5ieXRlCTB4YzEsMHhkMywweGQzLDB4NDAsMHhkMiwweGM1LDB4YzUsMHhkNywweDQwLDB4ZDUsMHhkNgogCS5ieXRlCTB4YzgsMHhkNiwweGQzLDB4YzQJIyAiY2hhbmdlIHJkciBhbGwga2VlcCBub2hvbGQiCkBAIC00MTcsMTMgKzQwMSwxMCBAQAogLnNrOHg4OgogCW12YwkwKDI0MCwlcjgpLDAoJXI5KQkjIGNvcHkgaXBscGFybXMgaW50byBidWZmZXIKIC5nb3RyOgotCWwJJXIxMCwudGJsCQkjIEVCQ0RJQyB0byBBU0NJSSB0YWJsZQotCXRyCTAoMjQwLCVyOCksMCglcjEwKQogCXNscgklcjAsJXIwCiAJc3QJJXIwLElOSVRSRF9TSVpFK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTEpCiAJc3QJJXIwLElOSVRSRF9TVEFSVCtBUkNIX09GRlNFVC1QQVJNQVJFQSglcjExKQogCWoJc3RhcnR1cCAJCSMgY29udGludWUgd2l0aCBzdGFydHVwCi0udGJsOgkubG9uZwlfZWJjYXNjCQkJIyB0cmFuc2xhdGUgdGFibGUKIC5jbWQ6CS5sb25nCUNPTU1BTkRfTElORQkJIyBhZGRyZXNzIG9mIGNvbW1hbmQgbGluZSBidWZmZXIKIC5wYXJtOgkubG9uZwlQQVJNQVJFQQogLmxvd2Nhc2U6CkBAIC00NjcsMTYgKzQ0OCwxNSBAQAogIyBvciBsaW5sb2FkIG9yIFNBTElQTAogIwogCS5vcmcJMHgxMDAwMAotc3RhcnR1cDpiYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKKwkuZ2xvYmwJc3RhcnR1cAorc3RhcnR1cDoKKwliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKIC5MUEcwOgogCXhjCTB4MjAwKDI1NiksMHgyMDAJIyBwYXJ0aWFsbHkgY2xlYXIgbG93Y29yZQogCXhjCTB4MzAwKDI1NiksMHgzMDAKLQlsCSVyMSw1Zi0uTFBHMCglcjEzKQotCXN0Y2sJMCglcjEpCi0Jc3B0CTZmLS5MUEcwKCVyMTMpCi0JbXZjCV9fTENfTEFTVF9VUERBVEVfQ0xPQ0soOCksMCglcjEpCi0JbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksNmYtLkxQRzAoJXIxMykKLQltdmMJX19MQ19FWElUX1RJTUVSKDgpLDVmLS5MUEcwKCVyMTMpCisJc3RjawlfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCisJc3B0CTVmLS5MUEcwKCVyMTMpCisJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksNWYtLkxQRzAoJXIxMykKICNpZm5kZWYgQ09ORklHX01BUkNIX0c1CiAJIyBjaGVjayBjYXBhYmlsaXRpZXMgYWdhaW5zdCBNQVJDSF97RzUsWjkwMCxaOTkwLFo5XzEwOSxaMTB9CiAJeGMJX19MQ19TVEZMX0ZBQ19MSVNUKDgpLF9fTENfU1RGTF9GQUNfTElTVApAQCAtNDk0LDcgKzQ3NCw2IEBACiAJY2wJJXIwLDJmKzEyLS5MUEcwKCVyMTMpCiAJamUJM2YKIDE6CWwJJXIxNSwuTHN0YWNrLS5MUEcwKCVyMTMpCi0JYWhpCSVyMTUsMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSAjIGluaXRfdGFza191bmlvbitUSFJFQURfU0laRQogCWFoaQklcjE1LC05NgogCWxhCSVyMiwuTGFsc19zdHJpbmctLkxQRzAoJXIxMykKIAlsCSVyMywuTHNjbHBfcHJpbnQtLkxQRzAoJXIxMykKQEAgLTUwNSw3ICs0ODQsNyBAQAogLkxzY2xwX3ByaW50OgogCS5sb25nCV9zY2xwX3ByaW50X2Vhcmx5CiAuTHN0YWNrOgotCS5sb25nCWluaXRfdGhyZWFkX3VuaW9uCisJLmxvbmcJMHg4MDAwICsgKDE8PChQQUdFX1NISUZUK1RIUkVBRF9PUkRFUikpCiAJLmFsaWduIDE2CiAyOgkubG9uZwkweDAwMGEwMDAwLDB4OGJhZGNjY2MKICNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkKQEAgLTUzMiwxMyArNTExLDIyIEBACiAzOgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwltdmkJX19MQ19BUl9NT0RFX0lELDEJIyBzZXQgZXNhbWUgZmxhZworCXNscgklcjAsJXIwIAkJIyBzZXQgY3B1aWQgdG8gemVybworCWxoaQklcjEsMgkJCSMgbW9kZSAyID0gZXNhbWUgKGR1bXApCisJc2lncAklcjEsJXIwLDB4MTIJCSMgc3dpdGNoIHRvIGVzYW1lIG1vZGUKKwlzYW02NAkJCQkjIHN3aXRjaCB0byA2NCBiaXQgbW9kZQorCWpnCXN0YXJ0dXBfY29udGludWUKKyNlbHNlCisJbXZpCV9fTENfQVJfTU9ERV9JRCwwCSMgc2V0IEVTQSBmbGFnIChtb2RlIDApCiAJbAklcjEzLDRmLS5MUEcwKCVyMTMpCiAJYgkwKCVyMTMpCi0JLmFsaWduCTQKLTQ6CS5sb25nCXN0YXJ0dXBfY29udGludWUKLTU6CS5sb25nCXNjaGVkX2Nsb2NrX2Jhc2VfY2MKIAkuYWxpZ24JOAotNjoJLmxvbmcJMHg3ZmZmZmZmZiwweGZmZmZmZmZmCis0OgkubG9uZwlzdGFydHVwX2NvbnRpbnVlCisjZW5kaWYKKwkuYWxpZ24JOAorNToJLmxvbmcJMHg3ZmZmZmZmZiwweGZmZmZmZmZmCiAKICMKICMgcGFyYW1zIGF0IDEwNDAwIChzZXR1cC5oKQpAQCAtNTUyLDggKzU0MCw0IEBACiAJLmJ5dGUJInJvb3Q9L2Rldi9yYW0wIHJvIgogCS5ieXRlCTAKIAotI2lmZGVmIENPTkZJR182NEJJVAotI2luY2x1ZGUgImhlYWQ2NC5TIgotI2Vsc2UKLSNpbmNsdWRlICJoZWFkMzEuUyIKLSNlbmRpZgorCS5vcmcJMHgxMTAwMApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKaW5kZXggNjAyYjUwOC4uMWJiY2M0OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA1LDIwMDYKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDIwMDUsMjAxMAogICoKICAqICAgQXV0aG9yKHMpOglIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4KICAqCQlNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CkBAIC0xMCwxMyArMTAsMTkgQEAKICAqCiAgKi8KIAotCS5vcmcJMHgxMTAwMAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCitfX0hFQUQKKwkuZ2xvYmwJc3RhcnR1cF9jb250aW51ZQogc3RhcnR1cF9jb250aW51ZToKIAliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKIC5MUEcxOgogCi0JbXZpCV9fTENfQVJfTU9ERV9JRCwwCSMgc2V0IEVTQSBmbGFnIChtb2RlIDApCisJbAklcjEsLkxiYXNlX2NjLS5MUEcxKCVyMTMpCisJbXZjCTAoOCwlcjEpLF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sKIAlsY3RsCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpICMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWwJJXIxMiwuTHBhcm1hZGRyLS5MUEcxKCVyMTMpICMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQogCQkJCQkjIG1vdmUgSVBMIGRldmljZSB0byBsb3djb3JlCkBAIC02OSwxMCArNzUsMTIgQEAKIC5MZHVhbGQ6LnJlcHQJOAogCS5sb25nCTB4ODAwMDAwMDAsMCwwLDAJIyBpbnZhbGlkIGFjY2Vzcy1saXN0IGVudHJpZXMKIAkuZW5kcgorLkxiYXNlX2NjOgorCS5sb25nCXNjaGVkX2Nsb2NrX2Jhc2VfY2MKIAotCS5vcmcJMHgxMjAwMAogCS5nbG9ibAlfZWhlYWQKIF9laGVhZDoKKwogI2lmZGVmIENPTkZJR19TSEFSRURfS0VSTkVMCiAJLm9yZwkweDEwMDAwMAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwppbmRleCBkOTg0YTJhLi4zOTU4MGU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwogICoKLSAqIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDE5OTksMjAwNgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMTk5OSwyMDEwCiAgKgogICogICBBdXRob3Iocyk6CUhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPgogICoJCU1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KQEAgLTEwLDgwICsxMCwxNyBAQAogICoKICAqLwogCi0JLm9yZwkweDExMDAwCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKK19fSEVBRAorCS5nbG9ibAlzdGFydHVwX2NvbnRpbnVlCiBzdGFydHVwX2NvbnRpbnVlOgotCWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQotLkxQRzE6CXNsbAklcjEzLDEJCQkjIHJlbW92ZSBoaWdoIG9yZGVyIGJpdAotCXNybAklcjEzLDEKLQotI2lmZGVmIENPTkZJR19aRkNQRFVNUAotCi0JIyBjaGVjayBpZiB3ZSBoYXZlIGJlZW4gaXBsZWQgdXNpbmcgemZjcCBkdW1wOgotCi0JdG0JMHhiOSwweDAxCQkjIHRlc3QgaWYgc3ViY2hhbm5lbCBpcyBlbmFibGVkCi0Jam5vCS5ub2R1bXAJCQkjIHN1YmNoYW5uZWwgZGlzYWJsZWQKLQlsCSVyMSwweGI4Ci0JbGEJJXI1LC5MaXBsX3NjaGliLS5MUEcxKCVyMTMpCi0Jc3RzY2gJMCglcjUpCQkJIyBnZXQgc2NoaWIgb2Ygc3ViY2hhbm5lbAotCWpuZQkubm9kdW1wCQkJIyBzY2hpYiBub3QgYXZhaWxhYmxlCi0JdG0JNSglcjUpLDB4MDEJCSMgZGV2bm8gdmFsaWQ/Ci0Jam5vCS5ub2R1bXAKLQl0bQk0KCVyNSksMHg4MAkJIyBxZGlvIGNhcGFibGUgZGV2aWNlPwotCWpubwkubm9kdW1wCi0JbAklcjIsMjAoJXIwKQkJIyBhZGRyZXNzIG9mIGlwbCBwYXJhbWV0ZXIgYmxvY2sKLQlsaGkJJXIzLDAKLQlpYwklcjMsMHgxNDgoJXIyKQkJIyBnZXQgb3B0IGZpZWxkCi0JY2hpCSVyMywweDIwCQkjIGxvYWQgd2l0aCBkdW1wPwotCWpuZQkubm9kdW1wCi0KLQkjIHN0b3JlIGFsbCBwcmVmaXggcmVnaXN0ZXJzIGluIGNhc2Ugb2YgbG9hZCB3aXRoIGR1bXA6Ci0KLQlsYQklcjcsMAkJCSMgYmFzZSByZWdpc3RlciBmb3IgMCBwYWdlCi0JbGEJJXI4LDAJCQkjIGZpcnN0IGNwdQotCWwJJXIxMSwuTHByZWZfYXJyX3B0ci0uTFBHMSglcjEzKQkjIGFkZHJlc3Mgb2YgcHJlZml4IGFycmF5Ci0JYWhpCSVyMTEsNAkJCSMgc2tpcCBib290IGNwdQotCWxyCSVyMTIsJXIxMQotCWFoaQklcjEyLChDT05GSUdfTlJfQ1BVUyo0KQkjIGVuZCBvZiBwcmVmaXggYXJyYXkKLQlzdGFwCS5MY3VycmVudF9jcHUrMi0uTFBHMSglcjEzKQkjIHN0b3JlIGN1cnJlbnQgY3B1IGFkZHIKLTE6Ci0JY2wJJXI4LC5MY3VycmVudF9jcHUtLkxQRzEoJXIxMykJIyBpcyBpcGwgY3B1ID8KLQlqZQk0ZgkJCQkjIGlmIHllcyBnZXQgbmV4dCBjcHUKLTI6Ci0JbHIJJXI5LCVyNwotCXNpZ3AJJXI5LCVyOCwweDkJCSMgc3RvcCAmIHN0b3JlIHN0YXR1cyBvZiBjcHUKLQlicmMJOCwzZgkJCSMgYWNjZXB0ZWQKLQlicmMJNCw0ZgkJCSMgc3RhdHVzIHN0b3JlZDogbmV4dCBjcHUKLQlicmMJMiwyYgkJCSMgYnVzeTogCSB0cnkgYWdhaW4KLQlicmMJMSw0ZgkJCSMgbm90IG9wOgkgbmV4dCBjcHUKLTM6Ci0JbXZjCTAoNCwlcjExKSwyNjQoJXI3KQkjIGNvcHkgcHJlZml4IHJlZ2lzdGVyIHRvIHByZWZpeCBhcnJheQotCWFoaQklcjExLDQJCQkjIG5leHQgZWxlbWVudCBpbiBwcmVmaXggYXJyYXkKLQljbHIJJXIxMSwlcjEyCi0JamUJNWYJCQkjIG5vIG1vcmUgc3BhY2UgaW4gcHJlZml4IGFycmF5Ci00OgotCWFoaQklcjgsMQkJCSMgbmV4dCBjcHUgKHI4ICs9IDEpCi0JY2hpCSVyOCxNQVhfQ1BVX0FERFJFU1MJIyBpcyBsYXN0IHBvc3NpYmxlIGNwdSA/Ci0JamxlCTFiCQkJIyBqdW1wIGlmIG5vdCBsYXN0IGNwdQotNToKLQlsaGkJJXIxLDIJCQkjIG1vZGUgMiA9IGVzYW1lIChkdW1wKQotCWoJNmYKLQkuYWxpZ24gNAotLkxpcGxfc2NoaWI6Ci0JLnJlcHQgMTMKLQkubG9uZyAwCi0JLmVuZHIKLS5ub2R1bXA6Ci0JbGhpCSVyMSwxCQkJIyBtb2RlIDEgPSBlc2FtZSAobm9ybWFsIGlwbCkKLTY6Ci0jZWxzZQotCWxoaQklcjEsMQkJCSMgbW9kZSAxID0gZXNhbWUgKG5vcm1hbCBpcGwpCi0jZW5kaWYgLyogQ09ORklHX1pGQ1BEVU1QICovCi0JbXZpCV9fTENfQVJfTU9ERV9JRCwxCSMgc2V0IGVzYW1lIGZsYWcKLQlzbHIJJXIwLCVyMCAJCSMgc2V0IGNwdWlkIHRvIHplcm8KLQlzaWdwCSVyMSwlcjAsMHgxMgkJIyBzd2l0Y2ggdG8gZXNhbWUgbW9kZQotCXNhbTY0CQkJCSMgc3dpdGNoIHRvIDY0IGJpdCBtb2RlCi0JbGxnZnIJJXIxMywlcjEzCQkjIGNsZWFyIGhpZ2gtb3JkZXIgaGFsZiBvZiBiYXNlIHJlZworCWxhcmwJJXIxLHNjaGVkX2Nsb2NrX2Jhc2VfY2MKKwltdmMJMCg4LCVyMSksX19MQ19MQVNUX1VQREFURV9DTE9DSworCWxhcmwJJXIxMywuTFBHMQkJIyBnZXQgYmFzZQogCWxtaAklcjAsJXIxNSwuTHplcm82NC0uTFBHMSglcjEzKQkjIGNsZWFyIGhpZ2gtb3JkZXIgaGFsZgogCWxjdGxnCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpCSMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWxnCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKQkjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKQEAgLTEwOCw2ICs0NSw3IEBACiAJbHBzd2UJLkxlbnRyeS0uTFBHMSgxMykJIyBqdW1wIHRvIF9zdGV4dCBpbiBwcmltYXJ5LXNwYWNlLAogCQkJCQkjIHZpcnR1YWwgYW5kIG5ldmVyIHJldHVybiAuLi4KIAkuYWxpZ24JMTYKKy5MUEcxOgogLkxlbnRyeToucXVhZAkweDAwMDAwMDAxODAwMDAwMDAsX3N0ZXh0CiAuTGN0bDoJLnF1YWQJMHgwNDM1MDAwMgkJIyBjcjA6IHZhcmlvdXMgdGhpbmdzCiAJLnF1YWQJMAkJCSMgY3IxOiBwcmltYXJ5IHNwYWNlIHNlZ21lbnQgdGFibGUKQEAgLTEzMCwxMiArNjgsNiBAQAogLkxzY2FuMmc6LnF1YWQJMHg4MDAwMDAwMCArIDB4MjAwMDAgLSA4CSMgMkdCICsgMTI4SyAtIDgKIC5Mbm9wOgkubG9uZwkweDA3MDAwNzAwCiAuTHplcm82NDouZmlsbAkxNiw0LDB4MAotI2lmZGVmIENPTkZJR19aRkNQRFVNUAotLkxjdXJyZW50X2NwdToKLQkubG9uZyAweDAKLS5McHJlZl9hcnJfcHRyOgotCS5sb25nIHpmY3BkdW1wX3ByZWZpeF9hcnJheQotI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCAqLwogLkxwYXJtYWRkcjoKIAkucXVhZAlQQVJNQVJFQQogCS5hbGlnbgk2NApAQCAtMTQ2LDkgKzc4LDkgQEAKIAkubG9uZwkweDgwMDAwMDAwLDAsMCwwCSMgaW52YWxpZCBhY2Nlc3MtbGlzdCBlbnRyaWVzCiAJLmVuZHIKIAotCS5vcmcJMHgxMjAwMAogCS5nbG9ibAlfZWhlYWQKIF9laGVhZDoKKwogI2lmZGVmIENPTkZJR19TSEFSRURfS0VSTkVMCiAJLm9yZwkweDEwMDAwMAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwppbmRleCA0ZDczMjk2Li43ZWVkYmJjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3N0YXRpYyB2b2lkIF9faXBsX3J1bih2b2lkICp1bnVzZWQpCiB7CiAJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CiAJaWYgKE1BQ0hJTkVfSVNfVk0pCkBAIC01NjIsNiArNTYyLDExIEBACiAJCXJlaXBsX2Njd19kZXYoJmlwbF9pbmZvLmRhdGEuY2N3LmRldl9pZCk7CiB9CiAKK3N0YXRpYyB2b2lkIGlwbF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJc21wX3N3aXRjaF90b19pcGxfY3B1KF9faXBsX3J1biwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGlwbF9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwpAQCAtMTAzOSw3ICsxMDQ0LDcgQEAKIAkJc3ByaW50Zihkc3QgKyBwb3MsICIgUEFSTSAlcyIsIHZtcGFybSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3N0YXRpYyB2b2lkIF9fcmVpcGxfcnVuKHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZpZDsKIAlzdGF0aWMgY2hhciBidWZbMTI4XTsKQEAgLTEwODcsNiArMTA5MiwxMSBAQAogCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJlaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3sKKwlzbXBfc3dpdGNoX3RvX2lwbF9jcHUoX19yZWlwbF9ydW4sIE5VTEwpOworfQorCiBzdGF0aWMgdm9pZCByZWlwbF9ibG9ja19jY3dfaW5pdChzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKQogewogCWlwYi0+aGRyLmxlbiA9IElQTF9QQVJNX0JMS19DQ1dfTEVOOwpAQCAtMTM2OSwyMCArMTM3OSwxOCBAQAogCiBzdGF0aWMgc3RydWN0IGtzZXQgKmR1bXBfa3NldDsKIAotc3RhdGljIHZvaWQgZHVtcF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCitzdGF0aWMgdm9pZCBfX2R1bXBfcnVuKHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZpZDsKIAlzdGF0aWMgY2hhciBidWZbMTAwXTsKIAogCXN3aXRjaCAoZHVtcF9tZXRob2QpIHsKIAljYXNlIERVTVBfTUVUSE9EX0NDV19DSU86Ci0JCXNtcF9zZW5kX3N0b3AoKTsKIAkJZGV2aWQuZGV2bm8gPSBkdW1wX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vOwogCQlkZXZpZC5zc2lkICA9IDA7CiAJCXJlaXBsX2Njd19kZXYoJmRldmlkKTsKIAkJYnJlYWs7CiAJY2FzZSBEVU1QX01FVEhPRF9DQ1dfVk06Ci0JCXNtcF9zZW5kX3N0b3AoKTsKIAkJc3ByaW50ZihidWYsICJTVE9SRSBTVEFUVVMiKTsKIAkJX19jcGNtZChidWYsIE5VTEwsIDAsIE5VTEwpOwogCQlzcHJpbnRmKGJ1ZiwgIklQTCAlWCIsIGR1bXBfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8pOwpAQCAtMTM5NiwxMCArMTQwNCwxNyBAQAogCQlkaWFnMzA4KERJQUczMDhfU0VULCBkdW1wX2Jsb2NrX2ZjcCk7CiAJCWRpYWczMDgoRElBRzMwOF9EVU1QLCBOVUxMKTsKIAkJYnJlYWs7Ci0JY2FzZSBEVU1QX01FVEhPRF9OT05FOgotCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQotCXByaW50ayhLRVJOX0VNRVJHICJEdW1wIGZhaWxlZCFcbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3sKKwlpZiAoZHVtcF9tZXRob2QgPT0gRFVNUF9NRVRIT0RfTk9ORSkKKwkJcmV0dXJuOworCXNtcF9zZW5kX3N0b3AoKTsKKwlzbXBfc3dpdGNoX3RvX2lwbF9jcHUoX19kdW1wX3J1biwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGR1bXBfY2N3X2luaXQodm9pZCkKQEAgLTE1NzcsNyArMTU5Miw3IEBACiBzdGF0aWMgaW50IHZtY21kX2luaXQodm9pZCkKIHsKIAlpZiAoIU1BQ0hJTkVfSVNfVk0pCi0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl2bWNtZF9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgidm1jbWQiLCBOVUxMLCBmaXJtd2FyZV9rb2JqKTsKIAlpZiAoIXZtY21kX2tzZXQpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTU5NSw3ICsxNjEwLDcgQEAKIHsKIAlpZiAoc3RyY21wKHRyaWdnZXItPm5hbWUsIE9OX1BBTklDX1NUUikgPT0gMCkKIAkJZGlzYWJsZWRfd2FpdCgodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKSA9PSBzaWdwX2J1c3kpCiAJCWNwdV9yZWxheCgpOwogCWZvciAoOzspOwogfQpAQCAtMTkwMiw3ICsxOTE3LDYgQEAKIHZvaWQgX19pbml0IGlwbF9zYXZlX3BhcmFtZXRlcnModm9pZCkKIHsKIAlzdHJ1Y3QgY2lvX2lwbGluZm8gaXBsaW5mbzsKLQl1bnNpZ25lZCBpbnQgKmlwbF9wdHI7CiAJdm9pZCAqc3JjLCAqZHN0OwogCiAJaWYgKGNpb19nZXRfaXBsaW5mbygmaXBsaW5mbykpCkBAIC0xOTEzLDExICsxOTI3LDEwIEBACiAJaWYgKCFpcGxpbmZvLmlzX3FkaW8pCiAJCXJldHVybjsKIAlpcGxfZmxhZ3MgfD0gSVBMX1BBUk1CTE9DS19WQUxJRDsKLQlpcGxfcHRyID0gKHVuc2lnbmVkIGludCAqKV9fTENfSVBMX1BBUk1CTE9DS19QVFI7Ci0Jc3JjID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykqaXBsX3B0cjsKKwlzcmMgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKVMzOTBfbG93Y29yZS5pcGxfcGFybWJsb2NrX3B0cjsKIAlkc3QgPSAodm9pZCAqKUlQTF9QQVJNQkxPQ0tfT1JJR0lOOwogCW1lbW1vdmUoZHN0LCBzcmMsIFBBR0VfU0laRSk7Ci0JKmlwbF9wdHIgPSBJUExfUEFSTUJMT0NLX09SSUdJTjsKKwlTMzkwX2xvd2NvcmUuaXBsX3Bhcm1ibG9ja19wdHIgPSBJUExfUEFSTUJMT0NLX09SSUdJTjsKIH0KIAogc3RhdGljIExJU1RfSEVBRChyY2FsbCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDEzMWQ3ZWUuLmE5MjJkNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC01NCwxMSArNTQsMTEgQEAKIHsKIH0KIAotdm9pZCBtYWNoaW5lX2tleGVjKHN0cnVjdCBraW1hZ2UgKmltYWdlKQorc3RhdGljIHZvaWQgX19tYWNoaW5lX2tleGVjKHZvaWQgKmRhdGEpCiB7CiAJcmVsb2NhdGVfa2VybmVsX3QgZGF0YV9tb3ZlcjsKKwlzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGRhdGE7CiAKLQlzbXBfc2VuZF9zdG9wKCk7CiAJcGZhdWx0X2ZpbmkoKTsKIAlzMzkwX3Jlc2V0X3N5c3RlbSgpOwogCkBAIC02OCwzICs2OCw5IEBACiAJKCpkYXRhX21vdmVyKSgmaW1hZ2UtPmhlYWQsIGltYWdlLT5zdGFydCk7CiAJZm9yICg7Oyk7CiB9CisKK3ZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwlzbXBfc2VuZF9zdG9wKCk7CisJc21wX3N3aXRjaF90b19pcGxfY3B1KF9fbWFjaGluZV9rZXhlYywgaW1hZ2UpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggN2NmNDY0Mi4uMzNmZGM1YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCkBAIC05OTIsMyArOTkyLDYxIEBACiAjZW5kaWYKIAlyZXR1cm4gJnVzZXJfczM5MF92aWV3OwogfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ3ByX25hbWVzW05VTV9HUFJTXSA9IHsKKwkicjAiLCAicjEiLCAgInIyIiwgICJyMyIsICAicjQiLCAgInI1IiwgICJyNiIsICAicjciLAorCSJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgInIxMiIsICJyMTMiLCAicjE0IiwgInIxNSIsCit9OworCit1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCWlmIChvZmZzZXQgPj0gTlVNX0dQUlMpCisJCXJldHVybiAwOworCXJldHVybiByZWdzLT5ncHJzW29mZnNldF07Cit9CisKK2ludCByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldChjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCisJaWYgKCFuYW1lIHx8ICpuYW1lICE9ICdyJykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHN0cmljdF9zdHJ0b3VsKG5hbWUgKyAxLCAxMCwgJm9mZnNldCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChvZmZzZXQgPj0gTlVNX0dQUlMpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBvZmZzZXQ7Cit9CisKK2NvbnN0IGNoYXIgKnJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSh1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCWlmIChvZmZzZXQgPj0gTlVNX0dQUlMpCisJCXJldHVybiBOVUxMOworCXJldHVybiBncHJfbmFtZXNbb2Zmc2V0XTsKK30KKworc3RhdGljIGludCByZWdzX3dpdGhpbl9rZXJuZWxfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGtzcCA9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOworCisJcmV0dXJuIChhZGRyICYgfihUSFJFQURfU0laRSAtIDEpKSA9PSAoa3NwICYgfihUSFJFQURfU0laRSAtIDEpKTsKK30KKworLyoqCisgKiByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKCkgLSBnZXQgTnRoIGVudHJ5IG9mIHRoZSBzdGFjaworICogQHJlZ3M6cHRfcmVncyB3aGljaCBjb250YWlucyBrZXJuZWwgc3RhY2sgcG9pbnRlci4KKyAqIEBuOnN0YWNrIGVudHJ5IG51bWJlci4KKyAqCisgKiByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKCkgcmV0dXJucyBAbiB0aCBlbnRyeSBvZiB0aGUga2VybmVsIHN0YWNrIHdoaWNoCisgKiBpcyBzcGVjaWZpbmVkIGJ5IEByZWdzLiBJZiB0aGUgQG4gdGggZW50cnkgaXMgTk9UIGluIHRoZSBrZXJuZWwgc3RhY2ssCisgKiB0aGlzIHJldHVybnMgMC4KKyAqLwordW5zaWduZWQgbG9uZyByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0ga2VybmVsX3N0YWNrX3BvaW50ZXIocmVncykgKyBuICogc2l6ZW9mKGxvbmcpOworCWlmICghcmVnc193aXRoaW5fa2VybmVsX3N0YWNrKHJlZ3MsIGFkZHIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopYWRkcjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUwppbmRleCAyZjQ4MWNjLi5jYjg5OWQ5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbC5TCkBAIC02LDcgKzYsNyBAQAogICogICAgQXV0aG9yKHMpOiBIb2xnZXIgU21vbGluc2tpIChIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20pCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKICMKICMgZG9fcmVpcGxfYXNtCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCmluZGV4IDc3NDE0NzguLjVlNzNkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCkBAIC00LDcgKzQsNyBAQAogICoJCSBEZW5pcyBKb3NlcGggQmFycm93LAogICovCiAKLSNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCiAjCiAjIGRvX3JlaXBsX2FzbQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zY2xwLlMgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuUwppbmRleCBlMjdjYTYzLi4yN2FmM2JmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NjbHAuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuUwpAQCAtOSw4ICs5LDEwIEBACiAgKi8KIAogTENfRVhUX05FV19QU1cJCT0gMHg1OAkJCSMgYWRkciBvZiBleHQgaW50IGhhbmRsZXIKK0xDX0VYVF9ORVdfUFNXXzY0CT0gMHgxYjAJCQkjIGFkZHIgb2YgZXh0IGludCBoYW5kbGVyIDY0IGJpdAogTENfRVhUX0lOVF9QQVJBTQk9IDB4ODAJCQkjIGFkZHIgb2YgZXh0IGludCBwYXJhbWV0ZXIKIExDX0VYVF9JTlRfQ09ERQkJPSAweDg2CQkJIyBhZGRyIG9mIGV4dCBpbnQgY29kZQorTENfQVJfTU9ERV9JRAkJPSAweGEzCiAKICMKICMgU3Vicm91dGluZSB3aGljaCB3YWl0cyBzeW5jaHJvbm91c2x5IHVudGlsIGVpdGhlciBhbiBleHRlcm5hbCBpbnRlcnJ1cHRpb24KQEAgLTMwLDggKzMyLDE2IEBACiAuTGJhc2VTMToKIAlhaGkJJXIxNSwtOTYJCQkjIGNyZWF0ZSBzdGFjayBmcmFtZQogCWxhCSVyOCxMQ19FWFRfTkVXX1BTVwkJIyByZWdpc3RlciBpbnQgaGFuZGxlcgotCW12YwkuTG9sZHBzd1MxLS5MYmFzZVMxKDgsJXIxMyksMCglcjgpCi0JbXZjCTAoOCwlcjgpLC5MZXh0cHN3UzEtLkxiYXNlUzEoJXIxMykKKwlsYQklcjksLkxleHRwc3dTMS0uTGJhc2VTMSglcjEzKQorI2lmZGVmIENPTkZJR182NEJJVAorCXRtCUxDX0FSX01PREVfSUQsMQorCWpubwkuTGVzYTEKKwlsYQklcjgsTENfRVhUX05FV19QU1dfNjQJCSMgcmVnaXN0ZXIgaW50IGhhbmRsZXIgNjQgYml0CisJbGEJJXI5LC5MZXh0cHN3UzFfNjQtLkxiYXNlUzEoJXIxMykKKy5MZXNhMToKKyNlbmRpZgorCW12YwkuTG9sZHBzd1MxLS5MYmFzZVMxKDE2LCVyMTMpLDAoJXI4KQorCW12YwkwKDE2LCVyOCksMCglcjkpCiAJbGhpCSVyNiwweDAyMDAJCQkjIGNyIG1hc2sgZm9yIGV4dCBpbnQgKGNyMC41NCkKIAlsdHIJJXIyLCVyMgogCWp6CS5Mc2V0Y3RTMQpAQCAtNjQsMTUgKzc0LDE5IEBACiAuTHRpbWVvdXRTMToKIAlsY3RsCSVjMCwlYzAsLkxjdGxTMS0uTGJhc2VTMSglcjEzKQkjIHJlc3RvcmUgaW50ZXJydXB0IHNldHRpbmcKIAkjIHJlc3RvcmUgb2xkIGhhbmRsZXIKLQltdmMJMCg4LCVyOCksLkxvbGRwc3dTMS0uTGJhc2VTMSglcjEzKQorCW12YwkwKDE2LCVyOCksLkxvbGRwc3dTMS0uTGJhc2VTMSglcjEzKQogCWxtCSVyNiwlcjE1LDEyMCglcjE1KQkJIyByZXN0b3JlIHJlZ2lzdGVycwogCWJyCSVyMTQJCQkJIyByZXR1cm4gdG8gY2FsbGVyCiAKIAkuYWxpZ24JOAogLkxvbGRwc3dTMToKLQkubG9uZwkwLCAwCQkJCSMgb2xkIGV4dCBpbnQgUFNXCisJLmxvbmcJMCwgMCwgMCwgMAkJCSMgb2xkIGV4dCBpbnQgUFNXCiAuTGV4dHBzd1MxOgogCS5sb25nCTB4MDAwODAwMDAsIDB4ODAwMDAwMDArLkx3YWl0UzEJIyBQU1cgdG8gaGFuZGxlIGV4dCBpbnQKKyNpZmRlZiBDT05GSUdfNjRCSVQKKy5MZXh0cHN3UzFfNjQ6CisJLnF1YWQJMHgwMDAwMDAwMTgwMDAwMDAwLCAuTHdhaXRTMQkjIFBTVyB0byBoYW5kbGUgZXh0IGludCwgNjQgYml0CisjZW5kaWYKIC5Md2FpdHBzd1MxOgogCS5sb25nCTB4MDEwYTAwMDAsIDB4MDAwMDAwMDArLkxsb29wUzEJIyBQU1cgdG8gd2FpdCBmb3IgZXh0IGludAogLkx0aW1lUzE6CkBAIC0yNTAsNiArMjY0LDEzIEBACiBfc2NscF9wcmludF9lYXJseToKIAlzdG0JJXI2LCVyMTUsMjQoJXIxNSkJCSMgc2F2ZSByZWdpc3RlcnMKIAlhaGkJJXIxNSwtOTYJCQkjIGNyZWF0ZSBzdGFjayBmcmFtZQorI2lmZGVmIENPTkZJR182NEJJVAorCXRtCUxDX0FSX01PREVfSUQsMQorCWpubwkuTGVzYTIKKwlhaGkJJXIxNSwtODAKKwlzdG1oCSVyNiwlcjE1LDk2KCVyMTUpCQkjIHN0b3JlIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcworLkxlc2EyOgorI2VuZGlmCiAJbHIJJXIxMCwlcjIJCQkjIHNhdmUgc3RyaW5nIHBvaW50ZXIKIAlsaGkJJXIyLDAKIAlicmFzCSVyMTQsX3NjbHBfc2V0dXAJCSMgZW5hYmxlIGNvbnNvbGUKQEAgLTI2Miw2ICsyODMsMTMgQEAKIAlsaGkJJXIyLDEKIAlicmFzCSVyMTQsX3NjbHBfc2V0dXAJCSMgZGlzYWJsZSBjb25zb2xlCiAuTGVuZFM1OgorI2lmZGVmIENPTkZJR182NEJJVAorCXRtCUxDX0FSX01PREVfSUQsMQorCWpubwkuTGVzYTMKKwlsbWgJJXI2LCVyMTUsOTYoJXIxNSkJCSMgc3RvcmUgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzCisJYWhpCSVyMTUsODAKKy5MZXNhMzoKKyNlbmRpZgogCWxtCSVyNiwlcjE1LDEyMCglcjE1KQkJIyByZXN0b3JlIHJlZ2lzdGVycwogCWJyCSVyMTQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IDhkODk1N2IuLjc3YTYzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTM5NiwxNSArMzk2LDEyIEBACiBzZXR1cF9sb3djb3JlKHZvaWQpCiB7CiAJc3RydWN0IF9sb3djb3JlICpsYzsKLQlpbnQgbGNfcGFnZXM7CiAKIAkvKgogCSAqIFNldHVwIGxvd2NvcmUgZm9yIGJvb3QgY3B1CiAJICovCi0JbGNfcGFnZXMgPSBzaXplb2Yodm9pZCAqKSA9PSA4ID8gMiA6IDE7Ci0JbGMgPSAoc3RydWN0IF9sb3djb3JlICopCi0JCV9fYWxsb2NfYm9vdG1lbShsY19wYWdlcyAqIFBBR0VfU0laRSwgbGNfcGFnZXMgKiBQQUdFX1NJWkUsIDApOwotCW1lbXNldChsYywgMCwgbGNfcGFnZXMgKiBQQUdFX1NJWkUpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IF9sb3djb3JlKSAhPSBMQ19QQUdFUyAqIDQwOTYpOworCWxjID0gX19hbGxvY19ib290bWVtKExDX1BBR0VTICogUEFHRV9TSVpFLCBMQ19QQUdFUyAqIFBBR0VfU0laRSwgMCk7CiAJbGMtPnJlc3RhcnRfcHN3Lm1hc2sgPSBQU1dfQkFTRV9CSVRTIHwgUFNXX0RFRkFVTFRfS0VZOwogCWxjLT5yZXN0YXJ0X3Bzdy5hZGRyID0KIAkJUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgcmVzdGFydF9pbnRfaGFuZGxlcjsKQEAgLTgwNCw3ICs4MDEsNyBAQAogCWlmIChNQUNISU5FX0lTX1ZNKQogCQlwcl9pbmZvKCJMaW51eCBpcyBydW5uaW5nIGFzIGEgei9WTSAiCiAJCQkiZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbSBpbiAzMS1iaXQgbW9kZVxuIik7Ci0JZWxzZQorCWVsc2UgaWYgKE1BQ0hJTkVfSVNfTFBBUikKIAkJcHJfaW5mbygiTGludXggaXMgcnVubmluZyBuYXRpdmVseSBpbiAzMS1iaXQgbW9kZVxuIik7CiAJaWYgKE1BQ0hJTkVfSEFTX0lFRUUpCiAJCXByX2luZm8oIlRoZSBoYXJkd2FyZSBzeXN0ZW0gaGFzIElFRUUgY29tcGF0aWJsZSAiCkBAIC04MTgsNyArODE1LDcgQEAKIAkJCSJndWVzdCBvcGVyYXRpbmcgc3lzdGVtIGluIDY0LWJpdCBtb2RlXG4iKTsKIAllbHNlIGlmIChNQUNISU5FX0lTX0tWTSkKIAkJcHJfaW5mbygiTGludXggaXMgcnVubmluZyB1bmRlciBLVk0gaW4gNjQtYml0IG1vZGVcbiIpOwotCWVsc2UKKwllbHNlIGlmIChNQUNISU5FX0lTX0xQQVIpCiAJCXByX2luZm8oIkxpbnV4IGlzIHJ1bm5pbmcgbmF0aXZlbHkgaW4gNjQtYml0IG1vZGVcbiIpOwogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCA3NmE2ZmRkLi44YjEwMTI3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vaXBsLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ3AuaD4KQEAgLTUzLDcgKzU0LDcgQEAKICNpbmNsdWRlICJlbnRyeS5oIgogCiAvKiBsb2dpY2FsIGNwdSB0byBjcHUgYWRkcmVzcyAqLwotaW50IF9fY3B1X2xvZ2ljYWxfbWFwW05SX0NQVVNdOwordW5zaWduZWQgc2hvcnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107CiAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfc2V0W05SX0NQVVNdOwogCkBAIC03MiwxMyArNzMsMTMgQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHUsIGNwdV9kZXZpY2VzKTsKIAotc3RhdGljIHZvaWQgc21wX2V4dF9iaXRjYWxsKGludCwgZWNfYml0X3NpZyk7CitzdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGwoaW50LCBpbnQpOwogCi1zdGF0aWMgaW50IGNwdV9zdG9wcGVkKGludCBjcHUpCitzdGF0aWMgaW50IHJhd19jcHVfc3RvcHBlZChpbnQgY3B1KQogewotCV9fdTMyIHN0YXR1czsKKwl1MzIgc3RhdHVzOwogCi0Jc3dpdGNoIChzaWduYWxfcHJvY2Vzc29yX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZSkpIHsKKwlzd2l0Y2ggKHJhd19zaWdwX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZSkpIHsKIAljYXNlIHNpZ3Bfc3RhdHVzX3N0b3JlZDoKIAkJLyogQ2hlY2sgZm9yIHN0b3BwZWQgYW5kIGNoZWNrIHN0b3Agc3RhdGUgKi8KIAkJaWYgKHN0YXR1cyAmIDB4NTApCkBAIC05MCw2ICs5MSw0NCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjcHVfc3RvcHBlZChpbnQgY3B1KQoreworCXJldHVybiByYXdfY3B1X3N0b3BwZWQoY3B1X2xvZ2ljYWxfbWFwKGNwdSkpOworfQorCit2b2lkIHNtcF9zd2l0Y2hfdG9faXBsX2NwdSh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgX2xvd2NvcmUgKmxjLCAqY3VycmVudF9sYzsKKwlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKnNmOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCXVuc2lnbmVkIGxvbmcgc3A7CisKKwlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApCisJCWZ1bmMoZGF0YSk7CisJX19sb2FkX3Bzd19tYXNrKFBTV19CQVNFX0JJVFMgfCBQU1dfREVGQVVMVF9LRVkpOworCS8qIERpc2FibGUgbG93Y29yZSBwcm90ZWN0aW9uICovCisJX19jdGxfY2xlYXJfYml0KDAsIDI4KTsKKwljdXJyZW50X2xjID0gbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlsYyA9IGxvd2NvcmVfcHRyWzBdOworCWlmICghbGMpCisJCWxjID0gY3VycmVudF9sYzsKKwlsYy0+cmVzdGFydF9wc3cubWFzayA9IFBTV19CQVNFX0JJVFMgfCBQU1dfREVGQVVMVF9LRVk7CisJbGMtPnJlc3RhcnRfcHN3LmFkZHIgPSBQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSBzbXBfcmVzdGFydF9jcHU7CisJaWYgKCFjcHVfb25saW5lKDApKQorCQlzbXBfc3dpdGNoX3RvX2NwdShmdW5jLCBkYXRhLCAwLCBzdGFwKCksIF9fY3B1X2xvZ2ljYWxfbWFwWzBdKTsKKwl3aGlsZSAoc2lncCgwLCBzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cykgPT0gc2lncF9idXN5KQorCQljcHVfcmVsYXgoKTsKKwlzcCA9IGxjLT5wYW5pY19zdGFjazsKKwlzcCAtPSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpOworCXJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikgc3A7CisJbWVtY3B5KCZyZWdzLT5ncHJzLCAmY3VycmVudF9sYy0+Z3ByZWdzX3NhdmVfYXJlYSwgc2l6ZW9mKHJlZ3MtPmdwcnMpKTsKKwlyZWdzLT5wc3cgPSBsYy0+cHN3X3NhdmVfYXJlYTsKKwlzcCAtPSBTVEFDS19GUkFNRV9PVkVSSEVBRDsKKwlzZiA9IChzdHJ1Y3Qgc3RhY2tfZnJhbWUgKikgc3A7CisJc2YtPmJhY2tfY2hhaW4gPSByZWdzLT5ncHJzWzE1XTsKKwlzbXBfc3dpdGNoX3RvX2NwdShmdW5jLCBkYXRhLCBzcCwgc3RhcCgpLCBfX2NwdV9sb2dpY2FsX21hcFswXSk7Cit9CisKIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQogewogCWludCBjcHUsIHJjOwpAQCAtMTAzLDcgKzE0Miw3IEBACiAJCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQkJY29udGludWU7CiAJCWRvIHsKLQkJCXJjID0gc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3Bfc3RvcCk7CisJCQlyYyA9IHNpZ3AoY3B1LCBzaWdwX3N0b3ApOwogCQl9IHdoaWxlIChyYyA9PSBzaWdwX2J1c3kpOwogCiAJCXdoaWxlICghY3B1X3N0b3BwZWQoY3B1KSkKQEAgLTEzOSwxMyArMTc4LDEzIEBACiAgKiBTZW5kIGFuIGV4dGVybmFsIGNhbGwgc2lncCB0byBhbm90aGVyIGNwdSBhbmQgcmV0dXJuIHdpdGhvdXQgd2FpdGluZwogICogZm9yIGl0cyBjb21wbGV0aW9uLgogICovCi1zdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGwoaW50IGNwdSwgZWNfYml0X3NpZyBzaWcpCitzdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGwoaW50IGNwdSwgaW50IHNpZykKIHsKIAkvKgogCSAqIFNldCBzaWduYWxpbmcgYml0IGluIGxvd2NvcmUgb2YgdGFyZ2V0IGNwdSBhbmQga2ljayBpdAogCSAqLwogCXNldF9iaXQoc2lnLCAodW5zaWduZWQgbG9uZyAqKSAmbG93Y29yZV9wdHJbY3B1XS0+ZXh0X2NhbGxfZmFzdCk7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3IoY3B1LCBzaWdwX2VtZXJnZW5jeV9zaWduYWwpID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncChjcHUsIHNpZ3BfZW1lcmdlbmN5X3NpZ25hbCkgPT0gc2lncF9idXN5KQogCQl1ZGVsYXkoMTApOwogfQogCkBAIC0yMzksMjQgKzI3OCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNtcF9jdGxfY2xlYXJfYml0KTsKIAotLyoKLSAqIEluIGVhcmx5IGlwbCBzdGF0ZSBhIHRlbXAuIGxvZ2ljYWxseSBjcHUgbnVtYmVyIGlzIG5lZWRlZCwgc28gdGhlIHNpZ3AKLSAqIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCB0byBzZW5zZSBvdGhlciBjcHVzLiBTaW5jZSBOUl9DUFVTIGlzID49IDIgb24KLSAqIENPTkZJR19TTVAgYW5kIHRoZSBpcGwgY3B1IGlzIGxvZ2ljYWwgY3B1IDAsIGl0IG11c3QgYmUgMS4KLSAqLwotI2RlZmluZSBDUFVfSU5JVF9OTwkxCi0KICNpZmRlZiBDT05GSUdfWkZDUERVTVAKIAotLyoKLSAqIHpmY3BkdW1wX3ByZWZpeF9hcnJheSBob2xkcyBwcmVmaXggcmVnaXN0ZXJzIGZvciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOgotICogNjQgYml0IHpmY3BkdW1wIGtlcm5lbCBhbmQgMzEgYml0IGtlcm5lbCB3aGljaCBpcyB0byBiZSBkdW1wZWQuIFdlIGhhdmUgdG8KLSAqIHNhdmUgaXRzIHByZWZpeCByZWdpc3RlcnMsIHNpbmNlIHRoZXkgZ2V0IGxvc3QsIHdoZW4gc3dpdGNoaW5nIGZyb20gMzEgYml0Ci0gKiB0byA2NCBiaXQuCi0gKi8KLXVuc2lnbmVkIGludCB6ZmNwZHVtcF9wcmVmaXhfYXJyYXlbTlJfQ1BVUyArIDFdIFwKLQlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEiKSkpOwotCiBzdGF0aWMgdm9pZCBfX2luaXQgc21wX2dldF9zYXZlX2FyZWEodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHBoeV9jcHUpCiB7CiAJaWYgKGlwbF9pbmZvLnR5cGUgIT0gSVBMX1RZUEVfRkNQX0RVTVApCkBAIC0yNjYsMjEgKzI4OSwxNSBAQAogCQkJICAgInRoZSBkdW1wXG4iLCBjcHUsIE5SX0NQVVMgLSAxKTsKIAkJcmV0dXJuOwogCX0KLQl6ZmNwZHVtcF9zYXZlX2FyZWFzW2NwdV0gPSBrbWFsbG9jKHNpemVvZih1bmlvbiBzYXZlX2FyZWEpLCBHRlBfS0VSTkVMKTsKLQlfX2NwdV9sb2dpY2FsX21hcFtDUFVfSU5JVF9OT10gPSAoX191MTYpIHBoeV9jcHU7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3IoQ1BVX0lOSVRfTk8sIHNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzKSA9PQotCSAgICAgICBzaWdwX2J1c3kpCisJemZjcGR1bXBfc2F2ZV9hcmVhc1tjcHVdID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhdmVfYXJlYSksIEdGUF9LRVJORUwpOworCXdoaWxlIChyYXdfc2lncChwaHlfY3B1LCBzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cykgPT0gc2lncF9idXN5KQogCQljcHVfcmVsYXgoKTsKIAltZW1jcHkoemZjcGR1bXBfc2F2ZV9hcmVhc1tjcHVdLAogCSAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBzdG9yZV9wcmVmaXgoKSArIFNBVkVfQVJFQV9CQVNFLAotCSAgICAgICBTQVZFX0FSRUFfU0laRSk7Ci0jaWZkZWYgQ09ORklHXzY0QklUCi0JLyogY29weSBvcmlnaW5hbCBwcmVmaXggcmVnaXN0ZXIgKi8KLQl6ZmNwZHVtcF9zYXZlX2FyZWFzW2NwdV0tPnMzOTB4LnByZWZfcmVnID0gemZjcGR1bXBfcHJlZml4X2FycmF5W2NwdV07Ci0jZW5kaWYKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWEpKTsKIH0KIAotdW5pb24gc2F2ZV9hcmVhICp6ZmNwZHVtcF9zYXZlX2FyZWFzW05SX0NQVVMgKyAxXTsKK3N0cnVjdCBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOwogRVhQT1JUX1NZTUJPTF9HUEwoemZjcGR1bXBfc2F2ZV9hcmVhcyk7CiAKICNlbHNlCkBAIC0zODksOCArNDA2LDcgQEAKIAkJZm9yIChjcHUgPSAwOyBjcHUgPD0gTUFYX0NQVV9BRERSRVNTOyBjcHUrKykgewogCQkJaWYgKGNwdSA9PSBib290X2NwdV9hZGRyKQogCQkJCWNvbnRpbnVlOwotCQkJX19jcHVfbG9naWNhbF9tYXBbQ1BVX0lOSVRfTk9dID0gY3B1OwotCQkJaWYgKCFjcHVfc3RvcHBlZChDUFVfSU5JVF9OTykpCisJCQlpZiAoIXJhd19jcHVfc3RvcHBlZChjcHUpKQogCQkJCWNvbnRpbnVlOwogCQkJc21wX2dldF9zYXZlX2FyZWEoY19jcHVzLCBjcHUpOwogCQkJY19jcHVzKys7CkBAIC00MTMsOCArNDI5LDcgQEAKIAkJY3B1X2FkZHIgPSBpbmZvLT5jcHVbY3B1XS5hZGRyZXNzOwogCQlpZiAoY3B1X2FkZHIgPT0gYm9vdF9jcHVfYWRkcikKIAkJCWNvbnRpbnVlOwotCQlfX2NwdV9sb2dpY2FsX21hcFtDUFVfSU5JVF9OT10gPSBjcHVfYWRkcjsKLQkJaWYgKCFjcHVfc3RvcHBlZChDUFVfSU5JVF9OTykpIHsKKwkJaWYgKCFyYXdfY3B1X3N0b3BwZWQoY3B1X2FkZHIpKSB7CiAJCQlzX2NwdXMrKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC01MzMsMTggKzU0OCwxOCBAQAogLyogVXBwaW5nIGFuZCBkb3duaW5nIG9mIENQVXMgKi8KIGludCBfX2NwdWluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGU7CiAJc3RydWN0IF9sb3djb3JlICpjcHVfbG93Y29yZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGU7CiAJc3RydWN0IHN0YWNrX2ZyYW1lICpzZjsKLQlzaWdwX2Njb2RlIGNjb2RlOwogCXUzMiBsb3djb3JlOworCWludCBjY29kZTsKIAogCWlmIChzbXBfY3B1X3N0YXRlW2NwdV0gIT0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQpCiAJCXJldHVybiAtRUlPOwogCWlmIChzbXBfYWxsb2NfbG93Y29yZShjcHUpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkbyB7Ci0JCWNjb2RlID0gc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQpOworCQljY29kZSA9IHNpZ3AoY3B1LCBzaWdwX2luaXRpYWxfY3B1X3Jlc2V0KTsKIAkJaWYgKGNjb2RlID09IHNpZ3BfYnVzeSkKIAkJCXVkZWxheSgxMCk7CiAJCWlmIChjY29kZSA9PSBzaWdwX25vdF9vcGVyYXRpb25hbCkKQEAgLTU1Miw3ICs1NjcsNyBAQAogCX0gd2hpbGUgKGNjb2RlID09IHNpZ3BfYnVzeSk7CiAKIAlsb3djb3JlID0gKHUzMikodW5zaWduZWQgbG9uZylsb3djb3JlX3B0cltjcHVdOwotCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yX3AobG93Y29yZSwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncF9wKGxvd2NvcmUsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCiAJCXVkZWxheSgxMCk7CiAKIAlpZGxlID0gY3VycmVudF9zZXRbY3B1XTsKQEAgLTU3OCw3ICs1OTMsNyBAQAogCWNwdV9sb3djb3JlLT5mdHJhY2VfZnVuYyA9IFMzOTBfbG93Y29yZS5mdHJhY2VfZnVuYzsKIAllaWVpbygpOwogCi0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3IoY3B1LCBzaWdwX3Jlc3RhcnQpID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncChjcHUsIHNpZ3BfcmVzdGFydCkgPT0gc2lncF9idXN5KQogCQl1ZGVsYXkoMTApOwogCiAJd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCkBAIC02NDAsNyArNjU1LDcgQEAKIAkvKiBXYWl0IHVudGlsIHRhcmdldCBjcHUgaXMgZG93biAqLwogCXdoaWxlICghY3B1X3N0b3BwZWQoY3B1KSkKIAkJY3B1X3JlbGF4KCk7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3JfcCgwLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwX3AoMCwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKIAkJdWRlbGF5KDEwKTsKIAlzbXBfZnJlZV9sb3djb3JlKGNwdSk7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0b3BwZWRcbiIsIGNwdSk7CkBAIC02NDksNyArNjY0LDcgQEAKIHZvaWQgY3B1X2RpZSh2b2lkKQogewogCWlkbGVfdGFza19leGl0KCk7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncChzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQogCQljcHVfcmVsYXgoKTsKIAlmb3IgKDs7KTsKIH0KQEAgLTc2NSw3ICs3ODAsOCBAQAogCWdldF9vbmxpbmVfY3B1cygpOwogCW11dGV4X2xvY2soJnNtcF9jcHVfc3RhdGVfbXV0ZXgpOwogCXJjID0gLUVCVVNZOwotCWlmIChjcHVfb25saW5lKGNwdSkpCisJLyogZGlzYWxsb3cgY29uZmlndXJhdGlvbiBjaGFuZ2VzIG9mIG9ubGluZSBjcHVzIGFuZCBjcHUgMCAqLworCWlmIChjcHVfb25saW5lKGNwdSkgfHwgY3B1ID09IDApCiAJCWdvdG8gb3V0OwogCXJjID0gMDsKIAlzd2l0Y2ggKHZhbCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjlmMTFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1LlMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIDMxLWJpdCBzd2l0Y2ggY3B1IGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDkKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworIyBzbXBfc3dpdGNoX3RvX2NwdSBzd2l0Y2hlcyB0byBkZXN0aW5hdGlvbiBjcHUgYW5kIGV4ZWN1dGVzIHRoZSBwYXNzZWQgZnVuY3Rpb24KKyMgUGFyYW1ldGVyOiAlcjIgLSBmdW5jdGlvbiB0byBjYWxsCisjCSAgICAgJXIzIC0gZnVuY3Rpb24gcGFyYW1ldGVyCisjCSAgICAgJXI0IC0gc3RhY2sgcG9pbmVyCisjCSAgICAgJXI1IC0gY3VycmVudCBjcHUKKyMJICAgICAlcjYgLSBkZXN0aW5hdGlvbiBjcHUKKworCS5zZWN0aW9uIC50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgc21wX3N3aXRjaF90b19jcHUKK3NtcF9zd2l0Y2hfdG9fY3B1OgorCXN0bQklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkKKwlscgklcjEsJXIxNQorCWFoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAorCXN0CSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQorCWJhc3IJJXIxMywwCiswOglsYQklcjEsLmdwcnJlZ3NfYWRkci0wYiglcjEzKQorCWwJJXIxLDAoJXIxKQorCXN0bQklcjAsJXIxNSwwKCVyMSkKKzE6CXNpZ3AJJXIwLCVyNixfX1NJR1BfUkVTVEFSVAkvKiBzdGFydCBkZXN0aW5hdGlvbiBDUFUgKi8KKwlicmMJMiwxYgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLworMjoJc2lncAklcjAsJXI1LF9fU0lHUF9TVE9QCS8qIHN0b3AgY3VycmVudCBDUFUgKi8KKwlicmMJMiwyYgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLworMzoJagkzYgorCisJLmdsb2JsCXNtcF9yZXN0YXJ0X2NwdQorc21wX3Jlc3RhcnRfY3B1OgorCWJhc3IJJXIxMywwCiswOglsYQklcjEsLmdwcnJlZ3NfYWRkci0wYiglcjEzKQorCWwJJXIxLDAoJXIxKQorCWxtCSVyMCwlcjE1LDAoJXIxKQorMToJc2lncAklcjAsJXI1LF9fU0lHUF9TRU5TRQkvKiBXYWl0IGZvciBjYWxsaW5nIENQVSAqLworCWJyYwkxMCwxYgkJCS8qIGJ1c3ksIGFjY2VwdGVkIChzdGF0dXMgMCksIHJ1bm5pbmcgKi8KKwl0bWxsCSVyMCwweDQwCQkvKiBUZXN0IGlmIGNhbGxpbmcgQ1BVIGlzIHN0b3BwZWQgKi8KKwlqegkxYgorCWx0cgklcjQsJXI0CQkJLyogTmV3IHN0YWNrID8gKi8KKwlqegkxZgorCWxyCSVyMTUsJXI0CisxOgliYXNyCSVyMTQsJXIyCisKKy5ncHJyZWdzX2FkZHI6CisJLmxvbmcJLmdwcnJlZ3MKKworCS5zZWN0aW9uIC5kYXRhLCJhdyIsQHByb2diaXRzCisuZ3BycmVnczoKKwkucmVwdAkxNgorCS5sb25nCTAKKwkuZW5kcgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdTY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0YWFjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdTY0LlMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIDY0LWJpdCBzd2l0Y2ggY3B1IGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDkKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworIyBzbXBfc3dpdGNoX3RvX2NwdSBzd2l0Y2hlcyB0byBkZXN0aW5hdGlvbiBjcHUgYW5kIGV4ZWN1dGVzIHRoZSBwYXNzZWQgZnVuY3Rpb24KKyMgUGFyYW1ldGVyOiAlcjIgLSBmdW5jdGlvbiB0byBjYWxsCisjCSAgICAgJXIzIC0gZnVuY3Rpb24gcGFyYW1ldGVyCisjCSAgICAgJXI0IC0gc3RhY2sgcG9pbmVyCisjCSAgICAgJXI1IC0gY3VycmVudCBjcHUKKyMJICAgICAlcjYgLSBkZXN0aW5hdGlvbiBjcHUKKworCS5zZWN0aW9uIC50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgc21wX3N3aXRjaF90b19jcHUKK3NtcF9zd2l0Y2hfdG9fY3B1OgorCXN0bWcJJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpCisJbGdyCSVyMSwlcjE1CisJYWdoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAorCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKKwlsYXJsCSVyMSwuZ3BycmVncworCXN0bWcJJXIwLCVyMTUsMCglcjEpCisxOglzaWdwCSVyMCwlcjYsX19TSUdQX1JFU1RBUlQJLyogc3RhcnQgZGVzdGluYXRpb24gQ1BVICovCisJYnJjCTIsMWIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKzI6CXNpZ3AJJXIwLCVyNSxfX1NJR1BfU1RPUAkvKiBzdG9wIGN1cnJlbnQgQ1BVICovCisJYnJjCTIsMmIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKzM6CWoJM2IKKworCS5nbG9ibAlzbXBfcmVzdGFydF9jcHUKK3NtcF9yZXN0YXJ0X2NwdToKKwlsYXJsCSVyMSwuZ3BycmVncworCWxtZwklcjAsJXIxNSwwKCVyMSkKKzE6CXNpZ3AJJXIwLCVyNSxfX1NJR1BfU0VOU0UJLyogV2FpdCBmb3IgY2FsbGluZyBDUFUgKi8KKwlicmMJMTAsMWIJCQkvKiBidXN5LCBhY2NlcHRlZCAoc3RhdHVzIDApLCBydW5uaW5nICovCisJdG1sbAklcjAsMHg0MAkJLyogVGVzdCBpZiBjYWxsaW5nIENQVSBpcyBzdG9wcGVkICovCisJanoJMWIKKwlsdGdyCSVyNCwlcjQJCQkvKiBOZXcgc3RhY2sgPyAqLworCWp6CTFmCisJbGdyCSVyMTUsJXI0CisxOgliYXNyCSVyMTQsJXIyCisKKwkuc2VjdGlvbiAuZGF0YSwiYXciLEBwcm9nYml0cworLmdwcnJlZ3M6CisJLnJlcHQJMTYKKwkucXVhZAkwCisJLmVuZHIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCmluZGV4IDBjMjZjYzEuLmIzNTQ0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJY2dyCSVyMSwlcjIKIAlqZQlyZXN0b3JlX3JlZ2lzdGVycwkJLyogcjEgPSByMiAtPiBub3RoaW5nIHRvIGRvICovCiAJbGFybAklcjQsLkxyZXN0YXJ0X3N1c3BlbmRfcHN3CS8qIFNldCBuZXcgcmVzdGFydCBQU1cgKi8KLQltdmMJX19MQ19SRVNUQVJUX1BTVygxNiwlcjApLDAoJXI0KQorCW12YwlfX0xDX1JTVF9ORVdfUFNXKDE2LCVyMCksMCglcjQpCiAzOgogCXNpZ3AJJXI5LCVyMSxfX1NJR1BfSU5JVElBTF9DUFVfUkVTRVQKIAlicmMJOCw0ZgkvKiBhY2NlcHRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwppbmRleCA2NTA2NWFjLi5hOGY5M2YxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwpAQCAtNTEsMTQgKzUxLDYgQEAKICNkZWZpbmUgVVNFQ1NfUEVSX0pJRkZZICAgICAoKHVuc2lnbmVkIGxvbmcpIDEwMDAwMDAvSFopCiAjZGVmaW5lIENMS19USUNLU19QRVJfSklGRlkgKCh1bnNpZ25lZCBsb25nKSBVU0VDU19QRVJfSklGRlkgPDwgMTIpCiAKLS8qCi0gKiBDcmVhdGUgYSBzbWFsbCB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGltZXIgaW50ZXJydXB0cwotICogb24gdGhlIGRpZmZlcmVudCBjcHVzIHRvIGF2b2lkIGxvY2sgY29udGVudGlvbi4KLSAqLwotI2RlZmluZSBDUFVfREVWSUFUSU9OICAgICAgIChzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMTIpCi0KLSNkZWZpbmUgVElDS19TSVpFIHRpY2sKLQogdTY0IHNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSAtMTsJLyogRm9yY2UgdG8gZGF0YSBzZWN0aW9uLiAqLwogRVhQT1JUX1NZTUJPTF9HUEwoc2NoZWRfY2xvY2tfYmFzZV9jYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKaW5kZXggNWY5OWU2Ni4uNmJjOWMxOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RpYWcuYyBiL2FyY2gvczM5MC9rdm0vZGlhZy5jCmluZGV4IDgzMDAzMDkuLjllNGM4NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vZGlhZy5jCisrKyBiL2FyY2gvczM5MC9rdm0vZGlhZy5jCkBAIC0zOSw3ICszOSw3IEBACiAJCXZjcHUtPnJ1bi0+czM5MF9yZXNldF9mbGFncyA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKIAlhdG9taWNfY2xlYXJfbWFzayhDUFVTVEFUX1JVTk5JTkcsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MpOwpAQCAtNjIsNiArNjIsNiBAQAogCWNhc2UgMHgzMDg6CiAJCXJldHVybiBfX2RpYWdfaXBsX2Z1bmN0aW9ucyh2Y3B1KTsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKaW5kZXggYjQwMDk2NC4uM2RkYzMwOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCkBAIC0zMiw3ICszMiw3IEBACiAKIAl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX2xjdGxnKys7CiAJaWYgKCh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXBiICYgMHhmZikgIT0gMHgyZikKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJdXNlcmFkZHIgPSBkaXNwMjsKIAlpZiAoYmFzZTIpCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJcmMgPSBfX2t2bV9zMzkwX3ZjcHVfc3RvcmVfc3RhdHVzKHZjcHUsCiAJCQkJCQkgIEtWTV9TMzkwX1NUT1JFX1NUQVRVU19OT0FERFIpOwogCQlpZiAocmMgPj0gMCkKLQkJCXJjID0gLUVOT1RTVVBQOworCQkJcmMgPSAtRU9QTk9UU1VQUDsKIAl9CiAKIAlpZiAodmNwdS0+YXJjaC5sb2NhbF9pbnQuYWN0aW9uX2JpdHMgJiBBQ1RJT05fUkVMT0FEVkNQVV9PTl9TVE9QKSB7CkBAIC0xNTAsNyArMTUwLDcgQEAKIAlpZiAodmNwdS0+YXJjaC5sb2NhbF9pbnQuYWN0aW9uX2JpdHMgJiBBQ1RJT05fU1RPUF9PTl9TVE9QKSB7CiAJCXZjcHUtPmFyY2gubG9jYWxfaW50LmFjdGlvbl9iaXRzICY9IH5BQ1RJT05fU1RPUF9PTl9TVE9QOwogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICIlcyIsICJjcHUgc3RvcHBlZCIpOwotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmdmNwdS0+YXJjaC5sb2NhbF9pbnQubG9jayk7CkBAIC0xNzEsOSArMTcxLDkgQEAKIAkJCSAyKlBBR0VfU0laRSk7CiAJCWlmIChyYykKIAkJCS8qIHVzZXIgd2lsbCByZWNlaXZlIHNpZ3NlZ3YsIGV4aXQgdG8gdXNlciAqLwotCQkJcmMgPSAtRU5PVFNVUFA7CisJCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0gZWxzZQotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAogCWlmIChyYykKIAkJVkNQVV9FVkVOVCh2Y3B1LCAyLCAidW5oYW5kbGVkIHZhbGlkaXR5IGludGVyY2VwdCBjb2RlICVkIiwKQEAgLTE4OSw3ICsxODksNyBAQAogCWhhbmRsZXIgPSBpbnN0cnVjdGlvbl9oYW5kbGVyc1t2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXBhID4+IDhdOwogCWlmIChoYW5kbGVyKQogCQlyZXR1cm4gaGFuZGxlcih2Y3B1KTsKLQlyZXR1cm4gLUVOT1RTVVBQOworCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfcHJvZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yMDYsNyArMjA2LDcgQEAKIAlyYyA9IGhhbmRsZV9pbnN0cnVjdGlvbih2Y3B1KTsKIAlyYzIgPSBoYW5kbGVfcHJvZyh2Y3B1KTsKIAotCWlmIChyYyA9PSAtRU5PVFNVUFApCisJaWYgKHJjID09IC1FT1BOT1RTVVBQKQogCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aWNwdGNvZGUgPSAweDA0OwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtMjMxLDkgKzIzMSw5IEBACiAJdTggY29kZSA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pY3B0Y29kZTsKIAogCWlmIChjb2RlICYgMyB8fCAoY29kZSA+PiAyKSA+PSBBUlJBWV9TSVpFKGludGVyY2VwdF9mdW5jcykpCi0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlmdW5jID0gaW50ZXJjZXB0X2Z1bmNzW2NvZGUgPj4gMl07CiAJaWYgKGZ1bmMpCiAJCXJldHVybiBmdW5jKHZjcHUpOwotCXJldHVybiAtRU5PVFNVUFA7CisJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggNDM0ODZjMi4uODM0Nzc0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC0xMCwxMiArMTAsMTIgQEAKICAqICAgIEF1dGhvcihzKTogQ2Fyc3RlbiBPdHRlIDxjb3R0ZUBkZS5pYm0uY29tPgogICovCiAKLSNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAia3ZtLXMzOTAuaCIKICNpbmNsdWRlICJnYWNjZXNzLmgiCiAKQEAgLTE4Nyw4ICsxODcsOCBAQAogCQlpZiAocmMgPT0gLUVGQVVMVCkKIAkJCWV4Y2VwdGlvbiA9IDE7CiAKLQkJcmMgPSBwdXRfZ3Vlc3RfdTY0KHZjcHUsIF9fTENfUEZBVUxUX0lOVFBBUk0sCi0JCQlpbnRpLT5leHQuZXh0X3BhcmFtczIpOworCQlyYyA9IHB1dF9ndWVzdF91NjQodmNwdSwgX19MQ19FWFRfUEFSQU1TMiwKKwkJCQkgICBpbnRpLT5leHQuZXh0X3BhcmFtczIpOwogCQlpZiAocmMgPT0gLUVGQVVMVCkKIAkJCWV4Y2VwdGlvbiA9IDE7CiAJCWJyZWFrOwpAQCAtMzQyLDcgKzM0Miw3IEBACiAJaWYgKHBzd19pbnRlcnJ1cHRzX2Rpc2FibGVkKHZjcHUpKSB7CiAJCVZDUFVfRVZFTlQodmNwdSwgMywgIiVzIiwgImRpc2FibGVkIHdhaXQiKTsKIAkJX191bnNldF9jcHVfaWRsZSh2Y3B1KTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsgLyogZGlzYWJsZWQgd2FpdCAqLworCQlyZXR1cm4gLUVPUE5PVFNVUFA7IC8qIGRpc2FibGVkIHdhaXQgKi8KIAl9CiAKIAlpZiAocHN3X2V4dGludF9kaXNhYmxlZCh2Y3B1KSB8fApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IGY4YmNhZWYuLjNmYTBhMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYworKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgpAQCAtNTQzLDcgKzU0NCw3IEBACiAJCXJjID0gLUVJTlRSOwogCX0KIAotCWlmIChyYyA9PSAtRU5PVFNVUFApIHsKKwlpZiAocmMgPT0gLUVPUE5PVFNVUFApIHsKIAkJLyogaW50ZXJjZXB0IGNhbm5vdCBiZSBoYW5kbGVkIGluLWtlcm5lbCwgcHJlcGFyZSBrdm0tcnVuICovCiAJCWt2bV9ydW4tPmV4aXRfcmVhc29uICAgICAgICAgPSBLVk1fRVhJVF9TMzkwX1NJRUlDOwogCQlrdm1fcnVuLT5zMzkwX3NpZWljLmljcHRjb2RlID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmljcHRjb2RlOwpAQCAtNjAzLDQ1ICs2MDQsNDUgQEAKIAl9IGVsc2UKIAkJcHJlZml4ID0gMDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgZnBfcmVncyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBmcF9yZWdzKSwKIAkJCXZjcHUtPmFyY2guZ3Vlc3RfZnByZWdzLmZwcnMsIDEyOCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIGdwX3JlZ3MpLAorCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgZ3BfcmVncyksCiAJCQl2Y3B1LT5hcmNoLmd1ZXN0X2dwcnMsIDEyOCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIHBzdyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBwc3cpLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCAxNiwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIHByZWZfcmVnKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHByZWZfcmVnKSwKIAkJCSZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cHJlZml4LCA0LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChfX2d1ZXN0Y29weSh2Y3B1LAotCQkJYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIGZwX2N0cmxfcmVnKSwKKwkJCWFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBmcF9jdHJsX3JlZyksCiAJCQkmdmNwdS0+YXJjaC5ndWVzdF9mcHJlZ3MuZnBjLCA0LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgdG9kX3JlZyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCB0b2RfcmVnKSwKIAkJCSZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+dG9kcHIsIDQsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCB0aW1lciksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCB0aW1lciksCiAJCQkmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdXRtLCA4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgY2xrX2NtcCksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBjbGtfY21wKSwKIAkJCSZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y2tjLCA4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgYWNjX3JlZ3MpLAorCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgYWNjX3JlZ3MpLAogCQkJJnZjcHUtPmFyY2guZ3Vlc3RfYWNycywgNjQsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsCi0JCQlhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgY3RybF9yZWdzKSwKKwkJCWFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBjdHJsX3JlZ3MpLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3IsIDEyOCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IGQ0MjZhYWMuLjI4YzU1NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0zMjMsNSArMzIzLDUgQEAKIAkJZWxzZQogCQkJcmV0dXJuIGhhbmRsZXIodmNwdSk7CiAJfQotCXJldHVybiAtRU5PVFNVUFA7CisJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwppbmRleCAxNWVlMTExLi4yNDFhNDg0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYworKysgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCXJjID0gMDsgLyogb3JkZXIgYWNjZXB0ZWQgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmMgPSAtRU5PVFNVUFA7CisJCXJjID0gLUVPUE5PVFNVUFA7CiAJfQogCXJldHVybiByYzsKIH0KQEAgLTI5Myw3ICsyOTMsNyBAQAogCQl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX3NpZ3BfcmVzdGFydCsrOwogCQkvKiB1c2VyIHNwYWNlIG11c3Qga25vdyBhYm91dCByZXN0YXJ0ICovCiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCWlmIChyYyA8IDApCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL01ha2VmaWxlIGIvYXJjaC9zMzkwL2xpYi9NYWtlZmlsZQppbmRleCA5Nzk3NWVjLi5jZDU0YTFjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9saWIvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBzMzkwLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgogIwogCi1saWIteSArPSBkZWxheS5vIHN0cmluZy5vIHVhY2Nlc3Nfc3RkLm8gdWFjY2Vzc19wdC5vCitsaWIteSArPSBkZWxheS5vIHN0cmluZy5vIHVhY2Nlc3Nfc3RkLm8gdWFjY2Vzc19wdC5vIHVzZXJjb3B5Lm8KIG9iai0kKENPTkZJR18zMkJJVCkgKz0gZGl2NjQubyBxcm5uZC5vIHVjbXBkaTIubwogbGliLSQoQ09ORklHXzY0QklUKSArPSB1YWNjZXNzX212Y29zLm8KIGxpYi0kKENPTkZJR19TTVApICs9IHNwaW5sb2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYyBiL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYwppbmRleCBjZmYzMjdmLi45MTc1NGZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMKKysrIGIvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCkBAIC00MywxNiArNDMsMjQgQEAKIHsKIAlpbnQgY291bnQgPSBzcGluX3JldHJ5OwogCXVuc2lnbmVkIGludCBjcHUgPSB+c21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBvd25lcjsKIAogCXdoaWxlICgxKSB7Ci0JCWlmIChjb3VudC0tIDw9IDApIHsKLQkJCXVuc2lnbmVkIGludCBvd25lciA9IGxwLT5vd25lcl9jcHU7Ci0JCQlpZiAob3duZXIgIT0gMCkKLQkJCQlfcmF3X3lpZWxkX2NwdSh+b3duZXIpOwotCQkJY291bnQgPSBzcGluX3JldHJ5OworCQlvd25lciA9IGxwLT5vd25lcl9jcHU7CisJCWlmICghb3duZXIgfHwgc21wX3ZjcHVfc2NoZWR1bGVkKH5vd25lcikpIHsKKwkJCWZvciAoY291bnQgPSBzcGluX3JldHJ5OyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkJCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIDAsCisJCQkJCQkJICBjcHUpID09IDApCisJCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChNQUNISU5FX0lTX0xQQVIpCisJCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGFyY2hfc3Bpbl9pc19sb2NrZWQobHApKQotCQkJY29udGludWU7CisJCW93bmVyID0gbHAtPm93bmVyX2NwdTsKKwkJaWYgKG93bmVyKQorCQkJX3Jhd195aWVsZF9jcHUofm93bmVyKTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwgY3B1KSA9PSAwKQogCQkJcmV0dXJuOwogCX0KQEAgLTYzLDE3ICs3MSwyNyBAQAogewogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAJdW5zaWduZWQgaW50IGNwdSA9IH5zbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IG93bmVyOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXdoaWxlICgxKSB7Ci0JCWlmIChjb3VudC0tIDw9IDApIHsKLQkJCXVuc2lnbmVkIGludCBvd25lciA9IGxwLT5vd25lcl9jcHU7Ci0JCQlpZiAob3duZXIgIT0gMCkKLQkJCQlfcmF3X3lpZWxkX2NwdSh+b3duZXIpOwotCQkJY291bnQgPSBzcGluX3JldHJ5OworCQlvd25lciA9IGxwLT5vd25lcl9jcHU7CisJCWlmICghb3duZXIgfHwgc21wX3ZjcHVfc2NoZWR1bGVkKH5vd25lcikpIHsKKwkJCWZvciAoY291bnQgPSBzcGluX3JldHJ5OyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkJCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCisJCQkJCWNvbnRpbnVlOworCQkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwKKwkJCQkJCQkgIGNwdSkgPT0gMCkKKwkJCQkJcmV0dXJuOworCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCX0KKwkJCWlmIChNQUNISU5FX0lTX0xQQVIpCisJCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGFyY2hfc3Bpbl9pc19sb2NrZWQobHApKQotCQkJY29udGludWU7CisJCW93bmVyID0gbHAtPm93bmVyX2NwdTsKKwkJaWYgKG93bmVyKQorCQkJX3Jhd195aWVsZF9jcHUofm93bmVyKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwgY3B1KSA9PSAwKQogCQkJcmV0dXJuOwpAQCAtMTAwLDggKzExOCwxMSBAQAogdm9pZCBhcmNoX3NwaW5fcmVsYXgoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBsb2NrLT5vd25lcl9jcHU7Ci0JaWYgKGNwdSAhPSAwKQotCQlfcmF3X3lpZWxkX2NwdSh+Y3B1KTsKKwlpZiAoY3B1ICE9IDApIHsKKwkJaWYgKE1BQ0hJTkVfSVNfVk0gfHwgTUFDSElORV9JU19LVk0gfHwKKwkJICAgICFzbXBfdmNwdV9zY2hlZHVsZWQofmNwdSkpCisJCQlfcmF3X3lpZWxkX2NwdSh+Y3B1KTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl9yZWxheCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdXNlcmNvcHkuYyBiL2FyY2gvczM5MC9saWIvdXNlcmNvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGIzNjNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2xpYi91c2VyY29weS5jCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorCit2b2lkIGNvcHlfZnJvbV91c2VyX292ZXJmbG93KHZvaWQpCit7CisJV0FSTigxLCAiQnVmZmVyIG92ZXJmbG93IGRldGVjdGVkIVxuIik7Cit9CitFWFBPUlRfU1lNQk9MKGNvcHlfZnJvbV91c2VyX292ZXJmbG93KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRtZW0uYyBiL2FyY2gvczM5MC9tbS9leHRtZW0uYwppbmRleCA1Yzg0NTcxLi42NDA5ZmQ1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKKysrIGIvYXJjaC9zMzkwL21tL2V4dG1lbS5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAl9CiAjZW5kaWYKIAlpZiAocW91dC0+c2VnY250ID4gNikgewotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKQEAgLTMyNCwxMSArMzI0LDExIEBACiAJCWZvciAoaT0wOyBpPHFvdXQtPnNlZ2NudDsgaSsrKSB7CiAJCQlpZiAoKChxb3V0LT5yYW5nZVtpXS5zdGFydCAmIDB4ZmYpICE9IFNFR19UWVBFX0VXKSAmJgogCQkJICAgICgocW91dC0+cmFuZ2VbaV0uc3RhcnQgJiAweGZmKSAhPSBTRUdfVFlQRV9FTikpIHsKLQkJCQlyYyA9IC1FTk9UU1VQUDsKKwkJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CiAJCQlpZiAoc3RhcnQgIT0gcW91dC0+cmFuZ2VbaV0uc3RhcnQgPj4gUEFHRV9TSElGVCkgewotCQkJCXJjID0gLUVOT1RTVVBQOworCQkJCXJjID0gLUVPUE5PVFNVUFA7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KIAkJCXN0YXJ0ID0gKHFvdXQtPnJhbmdlW2ldLmVuZCA+PiBQQUdFX1NISUZUKSArIDE7CkBAIC0zNTcsNyArMzU3LDcgQEAKICAqIC1FTk9TWVMgIDogd2UgYXJlIG5vdCBydW5uaW5nIG9uIFZNCiAgKiAtRUlPICAgICA6IGNvdWxkIG5vdCBwZXJmb3JtIHF1ZXJ5IGRpYWdub3NlCiAgKiAtRU5PRU5UICA6IG5vIHN1Y2ggc2VnbWVudAotICogLUVOT1RTVVBQOiBtdWx0aS1wYXJ0IHNlZ21lbnQgY2Fubm90IGJlIHVzZWQgd2l0aCBsaW51eAorICogLUVPUE5PVFNVUFA6IG11bHRpLXBhcnQgc2VnbWVudCBjYW5ub3QgYmUgdXNlZCB3aXRoIGxpbnV4CiAgKiAtRU5PTUVNICA6IG91dCBvZiBtZW1vcnkKICAqIDAgLi4gNiAgIDogdHlwZSBvZiBzZWdtZW50IGFzIGRlZmluZWQgaW4gaW5jbHVkZS9hc20tczM5MC9leHRtZW0uaAogICovCkBAIC01MTUsNyArNTE1LDcgQEAKICAqIC1FTk9TWVMgIDogd2UgYXJlIG5vdCBydW5uaW5nIG9uIFZNCiAgKiAtRUlPICAgICA6IGNvdWxkIG5vdCBwZXJmb3JtIHF1ZXJ5IG9yIGxvYWQgZGlhZ25vc2UKICAqIC1FTk9FTlQgIDogbm8gc3VjaCBzZWdtZW50Ci0gKiAtRU5PVFNVUFA6IG11bHRpLXBhcnQgc2VnbWVudCBjYW5ub3QgYmUgdXNlZCB3aXRoIGxpbnV4CisgKiAtRU9QTk9UU1VQUDogbXVsdGktcGFydCBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggbGludXgKICAqIC1FTk9TUEMgIDogc2VnbWVudCBjYW5ub3QgYmUgdXNlZCAob3ZlcmxhcHMgd2l0aCBzdG9yYWdlKQogICogLUVCVVNZICAgOiBzZWdtZW50IGNhbiB0ZW1wb3JhcmlseSBub3QgYmUgdXNlZCAob3ZlcmxhcHMgd2l0aCBkY3NzKQogICogLUVSQU5HRSAgOiBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIChleGNlZWRzIGtlcm5lbCBtYXBwaW5nIHJhbmdlKQpAQCAtNzQyLDcgKzc0Miw3IEBACiAJCXByX2VycigiTG9hZGluZyBvciBxdWVyeWluZyBEQ1NTICVzIHJlc3VsdGVkIGluIGEgIgogCQkgICAgICAgImhhcmR3YXJlIGVycm9yXG4iLCBzZWdfbmFtZSk7CiAJCWJyZWFrOwotCWNhc2UgLUVOT1RTVVBQOgorCWNhc2UgLUVPUE5PVFNVUFA6CiAJCXByX2VycigiRENTUyAlcyBoYXMgbXVsdGlwbGUgcGFnZSByYW5nZXMgYW5kIGNhbm5vdCBiZSAiCiAJCSAgICAgICAibG9hZGVkIG9yIHF1ZXJpZWRcbiIsIHNlZ19uYW1lKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IGZjMTAyZTcuLjMwNDBkN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3MzOTBfZXh0Lmg+CkBAIC01OSwxNSArNjAsMTMgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotI2lmZGVmIENPTkZJR19LUFJPQkVTCiAJLyoga3Byb2JlX3J1bm5pbmcoKSBuZWVkcyBzbXBfcHJvY2Vzc29yX2lkKCkgKi8KLQlpZiAoIXVzZXJfbW9kZShyZWdzKSkgeworCWlmIChrcHJvYmVzX2J1aWx0X2luKCkgJiYgIXVzZXJfbW9kZShyZWdzKSkgewogCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJaWYgKGtwcm9iZV9ydW5uaW5nKCkgJiYga3Byb2JlX2ZhdWx0X2hhbmRsZXIocmVncywgMTQpKQogCQkJcmV0ID0gMTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAl9Ci0jZW5kaWYKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vaW5pdC5jIGIvYXJjaC9zMzkwL21tL2luaXQuYwppbmRleCA3NjU2NDc5Li5kNTg2NWU0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vaW5pdC5jCisrKyBiL2FyY2gvczM5MC9tbS9pbml0LmMKQEAgLTE0MywzMyArMTQzLDM0IEBACiB9CiAjZW5kaWYKIAotdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKK3ZvaWQgZnJlZV9pbml0X3BhZ2VzKGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKQogewotICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gYmVnaW47CiAKLSAgICAgICAgYWRkciA9ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2JlZ2luKTsKLSAgICAgICAgZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpOyBhZGRyICs9IFBBR0VfU0laRSkgeworCWlmIChiZWdpbiA+PSBlbmQpCisJCXJldHVybjsKKwlmb3IgKDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKIAkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7Ci0JCW1lbXNldCgodm9pZCAqKWFkZHIsIFBPSVNPTl9GUkVFX0lOSVRNRU0sIFBBR0VfU0laRSk7CisJCW1lbXNldCgodm9pZCAqKShhZGRyICYgUEFHRV9NQVNLKSwgUE9JU09OX0ZSRUVfSU5JVE1FTSwKKwkJICAgICAgIFBBR0VfU0laRSk7CiAJCWZyZWVfcGFnZShhZGRyKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKLSAgICAgICAgfQotICAgICAgICBwcmludGsgKCJGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLAotCQkoKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9lbmQgLSAodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luKSA+PiAxMCk7CisJfQorCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgJXM6ICVsdWsgZnJlZWRcbiIsIHdoYXQsIChlbmQgLSBiZWdpbikgPj4gMTApOworfQorCit2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQoreworCWZyZWVfaW5pdF9wYWdlcygidW51c2VkIGtlcm5lbCBtZW1vcnkiLAorCQkJKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9iZWdpbiwKKwkJCSh1bnNpZ25lZCBsb25nKSZfX2luaXRfZW5kKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0gICAgICAgIGlmIChzdGFydCA8IGVuZCkKLSAgICAgICAgICAgICAgICBwcmludGsgKCJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsIChlbmQgLSBzdGFydCkgPj4gMTApOwotICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewotICAgICAgICAgICAgICAgIENsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotICAgICAgICAgICAgICAgIGluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLSAgICAgICAgICAgICAgICBmcmVlX3BhZ2Uoc3RhcnQpOwotICAgICAgICAgICAgICAgIHRvdGFscmFtX3BhZ2VzKys7Ci0gICAgICAgIH0KKwlmcmVlX2luaXRfcGFnZXMoImluaXRyZCBtZW1vcnkiLCBzdGFydCwgZW5kKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL21tL2luaXQuYyBiL2FyY2gvc2NvcmUvbW0vaW5pdC5jCmluZGV4IGRmYWY0NTguLjdmMDAxYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvbW0vaW5pdC5jCisrKyBiL2FyY2gvc2NvcmUvbW0vaW5pdC5jCkBAIC01OSw3ICs1OSw3IEBACiB9CiAKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKLXN0YXRpYyBpbnQgX19pbml0IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQoraW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQogewogCWlmIChwYWdlbnIgPj0gbWluX2xvd19wZm4gJiYgcGFnZW5yIDwgbWF4X2xvd19wZm4pCiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDIxMjFmYmIuLjA1Y2VmNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTEzLDcgKzEzLDYgQEAKIAlzZWxlY3QgSEFWRV9MTUIKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCi0Jc2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVQogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCXNlbGVjdCBIQVZFX0RNQV9BVFRSUwpAQCAtMjIsNiArMjEsNyBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCiAJc2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwogCXNlbGVjdCBSVENfTElCCiAJc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQKQEAgLTM1LDYgKzM1LDcgQEAKIAlkZWZfYm9vbCBBUkNIID0gInNoIgogCXNlbGVjdCBIQVZFX0tQUk9CRVMKIAlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCisJc2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVSAmJiAhWDJUTEIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAogCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFCkBAIC00Miw2ICs0Myw4IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFX05NSV9FTlRFUiBpZiBEWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgorCXNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQKKwlzZWxlY3QgUEVSRl9FVkVOVFMgaWYgSEFWRV9IV19CUkVBS1BPSU5UCiAJc2VsZWN0IEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaWYgTU1VCiAKIGNvbmZpZyBTVVBFUkg2NApAQCAtNzgsMTIgKzgxLDEzIEBACiBjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19JUlFfUFJPQkUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBJUlFfUEVSX0NQVQogCWRlZl9ib29sIHkKIAorY29uZmlnIFNQQVJTRV9JUlEKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBTVVBFUkgzMgorCiBjb25maWcgR0VORVJJQ19HUElPCiAJZGVmX2Jvb2wgbgogCkBAIC01NDgsOCArNTUyLDcgQEAKIAkJCSAgICAgIENQVV9TVUJUWVBFX1NINzIwMyB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyMDYgfHwgXAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjYzIHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX01YRyAgICB8fCBcCi0JCQkgICAgICBDUFVfU1VCVFlQRV9TSDc3ODYKKwkJCSAgICAgIENQVV9TVUJUWVBFX01YRwogCWRlZmF1bHQgIjYwMDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUgogCWRlZmF1bHQgIjY2MDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDRfMjAyCiAJZGVmYXVsdCAiNTAwMDAwMDAiCkBAIC01NjMsNyArNTY2LDggQEAKIAogY29uZmlnIFNIX0NMS19DUEdfTEVHQUNZCiAJZGVwZW5kcyBvbiBTSF9DTEtfQ1BHCi0JZGVmX2Jvb2wgeSBpZiAhQ1BVX1NVQlRZUEVfU0g3Nzg1ICYmICFBUkNIX1NITU9CSUxFCisJZGVmX2Jvb2wgeSBpZiAhQ1BVX1NVQlRZUEVfU0g3Nzg1ICYmICFBUkNIX1NITU9CSUxFICYmIFwKKwkJICAgICAgIUNQVV9TVUJUWVBFX1NINzc4NgogCiBjb25maWcgU0hfQ0xLX01ECiAJaW50ICJDUFUgTW9kZSBQaW4gU2V0dGluZyIKQEAgLTcyNSwxOCArNzI5LDYgQEAKIAkgIExMU0MsIHRoaXMgc2hvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG90aGVyIGFsdGVybmF0aXZlIG9mCiAJICBkaXNhYmxpbmcgaW50ZXJydXB0cyBhcm91bmQgdGhlIGF0b21pYyBzZXF1ZW5jZS4KIAotY29uZmlnIFNQQVJTRV9JUlEKLQlib29sICJTdXBwb3J0IHNwYXJzZSBpcnEgbnVtYmVyaW5nIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHNwYXJzZSBpcnFzLiBUaGlzIGlzIHVzZWZ1bCBpbiBnZW5lcmFsCi0JICBhcyBtb3N0IENQVXMgaGF2ZSBhIGZhaXJseSBzcGFyc2UgYXJyYXkgb2YgSVJRIHZlY3RvcnMsIHdoaWNoCi0JICB0aGUgaXJxX2Rlc2MgdGhlbiBtYXBzIGRpcmVjdGx5IG9uIHRvLiBTeXN0ZW1zIHdpdGggYSBoaWdoCi0JICBudW1iZXIgb2Ygb2ZmLWNoaXAgSVJRcyB3aWxsIHdhbnQgdG8gdHJlYXQgdGhpcyBhcwotCSAgZXhwZXJpbWVudGFsIHVudGlsIHRoZXkgaGF2ZSBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQuCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCi0KIGVuZG1lbnUKIAogbWVudSAiQm9vdCBvcHRpb25zIgpAQCAtODIyLDExICs4MTQsMTUgQEAKIGNvbmZpZyBQQ0kKIAlib29sICJQQ0kgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19QQ0kKKwlzZWxlY3QgUENJX0RPTUFJTlMKIAloZWxwCiAJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIGEgUENJIG1vdGhlcmJvYXJkLiBQQ0kgaXMgdGhlIG5hbWUgb2YgYQogCSAgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQogCSAgeW91ciBib3guIElmIHlvdSBoYXZlIFBDSSwgc2F5IFksIG90aGVyd2lzZSBOLgogCitjb25maWcgUENJX0RPTUFJTlMKKwlib29sCisKIHNvdXJjZSAiZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvcGNpL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuY3B1IGIvYXJjaC9zaC9LY29uZmlnLmNwdQppbmRleCBjZDZlM2VhLi5kZGYwOTZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcuY3B1CisrKyBiL2FyY2gvc2gvS2NvbmZpZy5jcHUKQEAgLTY4LDcgKzY4LDggQEAKIAogY29uZmlnIFNQRUNVTEFUSVZFX0VYRUNVVElPTgogCWJvb2wgIlNwZWN1bGF0aXZlIHN1YnJvdXRpbmUgcmV0dXJuIgotCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzgwICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1IHx8IENQVV9TVUJUWVBFX1NINzc4NgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBhIHNwZWN1bGF0aXZlIGluc3RydWN0aW9uIGZldGNoIGZvcgogCSAgc3Vicm91dGluZSByZXR1cm4uIFRoZXJlIGFyZSB2YXJpb3VzIHBpdGZhbGxzIGFzc29jaWF0ZWQgd2l0aApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggZGI5MTkyNS4uNTg4NTc5YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC04Myw2ICs4Myw3IEBACiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzcyNF9TT0xVVElPTl9FTkdJTkUpCTo9IHVJbWFnZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIXzcyMDZfU09MVVRJT05fRU5HSU5FKQk6PSB2bWxpbnV4CiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzYxOV9TT0xVVElPTl9FTkdJTkUpCTo9IHZtbGludXgKK2RlZmF1bHRpbWFnZS0kKENPTkZJR19TSF9TREs3Nzg2KQkJOj0gdm1saW51eC5iaW4KIAogIyBTZXQgc29tZSBzZW5zaWJsZSBLYnVpbGQgZGVmYXVsdHMKIEtCVUlMRF9JTUFHRQkJOj0gJChkZWZhdWx0aW1hZ2UteSkKQEAgLTE0MywxMSArMTQ0LDExIEBACiBtYWNoZGlyLSQoQ09ORklHX1NIX0tGUjJSMDkpCQkJKz0gbWFjaC1rZnIycjA5CiBtYWNoZGlyLSQoQ09ORklHX1NIX0VDT1ZFQykJCQkrPSBtYWNoLWVjb3ZlYzI0CiBtYWNoZGlyLSQoQ09ORklHX1NIX1NESzc3ODApCQkJKz0gbWFjaC1zZGs3NzgwCittYWNoZGlyLSQoQ09ORklHX1NIX1NESzc3ODYpCQkJKz0gbWFjaC1zZGs3Nzg2CiBtYWNoZGlyLSQoQ09ORklHX1NIX1gzUFJPVE8pCQkJKz0gbWFjaC14M3Byb3RvCiBtYWNoZGlyLSQoQ09ORklHX1NIX1NINzc2M1JEUCkJCQkrPSBtYWNoLXNoNzc2M3JkcAogbWFjaGRpci0kKENPTkZJR19TSF9TSDQyMDJfTUlDUk9ERVYpCQkrPSBtYWNoLW1pY3JvZGV2CiBtYWNoZGlyLSQoQ09ORklHX1NIX0xBTkRJU0spCQkJKz0gbWFjaC1sYW5kaXNrCi1tYWNoZGlyLSQoQ09ORklHX1NIX1RJVEFOKQkJCSs9IG1hY2gtdGl0YW4KIG1hY2hkaXItJChDT05GSUdfU0hfTEJPWF9SRTIpCQkJKz0gbWFjaC1sYm94cmUyCiBtYWNoZGlyLSQoQ09ORklHX1NIX0NBWU1BTikJCQkrPSBtYWNoLWNheW1hbgogbWFjaGRpci0kKENPTkZJR19TSF9SU0spCQkJKz0gbWFjaC1yc2sKQEAgLTIwMyw4ICsyMDQsOSBAQAogbGlicy0kKENPTkZJR19TVVBFUkgzMikJCTo9IGFyY2gvc2gvbGliLwkkKGxpYnMteSkKIGxpYnMtJChDT05GSUdfU1VQRVJINjQpCQk6PSBhcmNoL3NoL2xpYjY0LyAkKGxpYnMteSkKIAotQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5zcmVjIHVJbWFnZS5iaW4gXAotCSAgICAgICB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlCitCT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLmx6byBcCisJICAgICAgIHVJbWFnZS5zcmVjIHVJbWFnZS5iaW4gekltYWdlIHZtbGludXguYmluIHZtbGludXguc3JlYyBcCisJICAgICAgIHJvbUltYWdlCiBQSE9OWSArPSAkKEJPT1RfVEFSR0VUUykKIAogYWxsOiAkKEtCVUlMRF9JTUFHRSkKQEAgLTIyNSwxMCArMjI3LDEyIEBACiAJQGVjaG8gJyAgekltYWdlIAkgICAgICAgICAgIC0gQ29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UnCiAJQGVjaG8gJyAgcm9tSW1hZ2UJICAgICAgICAgICAtIENvbXByZXNzZWQgUk9NIGltYWdlLCBpZiBzdXBwb3J0ZWQnCiAJQGVjaG8gJyAgdm1saW51eC5zcmVjCSAgICAgICAgICAgLSBDcmVhdGUgYW4gRUxGIFMtcmVjb3JkJworCUBlY2hvICcgIHZtbGludXguYmluCSAgICAgICAgICAgLSBDcmVhdGUgYW4gdW5jb21wcmVzc2VkIGJpbmFyeSBpbWFnZScKIAlAZWNobyAnKiB1SW1hZ2UgIAkgICAgICAgICAgIC0gQWxpYXMgdG8gYm9vdGFibGUgVS1Cb290IGltYWdlJwogCUBlY2hvICcgIHVJbWFnZS5zcmVjCSAgICAgICAgICAgLSBDcmVhdGUgYW4gUy1yZWNvcmQgZm9yIFUtQm9vdCcKIAlAZWNobyAnICB1SW1hZ2UuYmluCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiaW4pJwogCUBlY2hvICcqIHVJbWFnZS5negkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoZ3ppcCknCiAJQGVjaG8gJyAgdUltYWdlLmJ6MgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYnppcDIpJwogCUBlY2hvICcgIHVJbWFnZS5sem1hCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem1hKScKKwlAZWNobyAnICB1SW1hZ2UubHpvCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem8pJwogZW5kZWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCmluZGV4IGFlZGQ5ZGUuLjkzOGU4N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwpAQCAtMTUwLDYgKzE1MCwxNCBAQAogCSAgU2VsZWN0IFNESzc3ODAgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBTSDc3ODAgU0RLNzc4MFIzCiAJICBldmFsdWF0aW9uIGJvYXJkLgogCitjb25maWcgU0hfU0RLNzc4NgorCWJvb2wgIlNESzc3ODYiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODYKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1BDSQorCWhlbHAKKwkgIFNlbGVjdCBTREs3Nzg2IGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgVGVjaG5vbG9neSBFdXJvcGUKKwkgIFNINzc4Ni02NW5tIGJvYXJkLgorCiBjb25maWcgU0hfSElHSExBTkRFUgogCWJvb2wgIkhpZ2hsYW5kZXIiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCmluZGV4IGNlMGYyNjMuLjRmOTBmOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCkBAIC04LDMgKzgsNCBAQAogb2JqLSQoQ09ORklHX1NIX0VET1NLNzc2MCkJKz0gYm9hcmQtZWRvc2s3NzYwLm8KIG9iai0kKENPTkZJR19TSF9FU1BUKQkJKz0gYm9hcmQtZXNwdC5vCiBvYmotJChDT05GSUdfU0hfUE9MQVJJUykJKz0gYm9hcmQtcG9sYXJpcy5vCitvYmotJChDT05GSUdfU0hfVElUQU4pCQkrPSBib2FyZC10aXRhbi5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCmluZGV4IDk5ZmZjNWYuLmVmYmE0NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogI2luY2x1ZGUgPGNwdS9zaDc3MjAuaD4KIAotI2RlZmluZSBMQU45MTE1X1JFQURZCShjdHJsX2lubCgweEE4MDAwMDg0VUwpICYgMHgwMDAwMDAwMVVMKQorI2RlZmluZSBMQU45MTE1X1JFQURZCShfX3Jhd19yZWFkbCgweEE4MDAwMDg0VUwpICYgMHgwMDAwMDAwMVVMKQogCiAvKiBQcmVmZXIgY21kbGluZSBvdmVyIFJlZEJvb3QgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgIlJlZEJvb3QiLCBOVUxMIH07CkBAIC02MCwzMyArNjAsMzMgQEAKIHsKIAkvKiBDUzI6IExBTiAoMHgwODAwMDAwMCAtIDB4MGJmZmZmZmYpICovCiAJLyogbm8gaWRsZSBjeWNsZXMsIG5vcm1hbCBzcGFjZSwgOCBiaXQgZGF0YSBidXMgKi8KLQljdHJsX291dGwoMHgzNmRiMDQwMCwgQ1MyQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgzNmRiMDQwMCwgQ1MyQkNSKTsKIAkvKiAoU1c6MS41IFdSOjMgSFc6MS41KSwgZXh0LiB3YWl0ICovCi0JY3RybF9vdXRsKDB4MDAwMDAzYzAsIENTMldDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDAzYzAsIENTMldDUik7CiAKIAkvKiBDUzQ6IENBTjEgKDB4YjAwMDAwMDAgLSAweGIzZmZmZmZmKSAqLwogCS8qIG5vIGlkbGUgY3ljbGVzLCBub3JtYWwgc3BhY2UsIDggYml0IGRhdGEgYnVzICovCi0JY3RybF9vdXRsKDB4MDAwMDAyMDAsIENTNEJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDAyMDAsIENTNEJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOTgxLCBDUzRXQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMTAwOTgxLCBDUzRXQ1IpOwogCiAJLyogQ1M1YTogQ0FOMiAoMHhiNDAwMDAwMCAtIDB4YjVmZmZmZmYpICovCiAJLyogbm8gaWRsZSBjeWNsZXMsIG5vcm1hbCBzcGFjZSwgOCBiaXQgZGF0YSBidXMgKi8KLQljdHJsX291dGwoMHgwMDAwMDIwMCwgQ1M1QUJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDAyMDAsIENTNUFCQ1IpOwogCS8qIChTVzoxLjUgV1I6MyBIVzoxLjUpLCBleHQuIHdhaXQgKi8KLQljdHJsX291dGwoMHgwMDEwMDk4MSwgQ1M1QVdDUik7CisJX19yYXdfd3JpdGVsKDB4MDAxMDA5ODEsIENTNUFXQ1IpOwogCiAJLyogQ1M1YjogQ0FOMyAoMHhiNjAwMDAwMCAtIDB4YjdmZmZmZmYpICovCiAJLyogbm8gaWRsZSBjeWNsZXMsIG5vcm1hbCBzcGFjZSwgOCBiaXQgZGF0YSBidXMgKi8KLQljdHJsX291dGwoMHgwMDAwMDIwMCwgQ1M1QkJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDAyMDAsIENTNUJCQ1IpOwogCS8qIChTVzoxLjUgV1I6MyBIVzoxLjUpLCBleHQuIHdhaXQgKi8KLQljdHJsX291dGwoMHgwMDEwMDk4MSwgQ1M1QldDUik7CisJX19yYXdfd3JpdGVsKDB4MDAxMDA5ODEsIENTNUJXQ1IpOwogCiAJLyogQ1M2YTogUm90YXJ5ICgweGI4MDAwMDAwIC0gMHhiOWZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDAwMDAwMjAwLCBDUzZBQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M2QUJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIG5vIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOUMxLCBDUzZBV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDEwMDlDMSwgQ1M2QVdDUik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9wb3J0X211bHRpcGxleGluZyh2b2lkKQpAQCAtOTQsNzEgKzk0LDcxIEBACiAJLyogQTcgR1BPKExFRDgpOyAgICAgQTYgR1BPKExFRDcpOyAgICAgQTUgR1BPKExFRDYpOwkgIEE0IEdQTyhMRUQ1KTsKIAkgKiBBMyBHUE8oTEVENCk7ICAgICBBMiBHUE8oTEVEMyk7ICAgICBBMSBHUE8oTEVEMik7CSAgQTAgR1BPKExFRDEpOwogCSAqLwotCWN0cmxfb3V0dygweDU1NTUsIFBPUlRfUEFDUik7CS8qIDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxICovCisJX19yYXdfd3JpdGV3KDB4NTU1NSwgUE9SVF9QQUNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KIAogCS8qIEI3IEdQTyhSU1Q0KTsgICBCNiBHUE8oUlNUMyk7ICBCNSBHUE8oUlNUMik7ICAgIEI0IEdQTyhSU1QxKTsKIAkgKiBCMyBHUE8oUEIzKTsJICAgQjIgR1BPKFBCMik7CSAgQjEgR1BPKFBCMSk7CSAgIEIwIEdQTyhQQjApOwogCSAqLwotCWN0cmxfb3V0dygweDU1NTUsIFBPUlRfUEJDUik7CS8qIDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxICovCisJX19yYXdfd3JpdGV3KDB4NTU1NSwgUE9SVF9QQkNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KIAogCS8qIEM3IEdQTyhQQzcpOwkgIEM2IEdQTyhQQzYpOwkgIEM1IEdQTyhQQzUpOwkgICBDNCBHUE8oUEM0KTsKIAkgKiBDMyBMQ0RfREFUQTM7ICBDMiBMQ0RfREFUQTI7ICAgQzEgTENEX0RBVEExOwkgICBDMCBMQ0RfREFUQTA7CiAJICovCi0JY3RybF9vdXR3KDB4NTUwMCwgUE9SVF9QQ0NSKTsJLyogMDEgMDEgMDEgMDEgMDAgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTAwLCBQT1JUX1BDQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMCAwMCAwMCAwMCAqLwogCiAJLyogRDcgR1BPKFBENyk7CUQ2IEdQTyhQRDYpOwlENSBHUE8oUEQ1KTsJICAgRDQgR1BPKFBENCk7CiAJICogRDMgR1BPKFBEMyk7CUQyIEdQTyhQRDIpOwlEMSBHUE8oUEQxKTsJICAgRDAgR1BPKFBEMCk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1NSwgUE9SVF9QRENSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTU1LCBQT1JUX1BEQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwogCiAJLyogRTcgKHgpOwkgIEU2IEdQSShudSk7CSBFNSBHUEkobnUpOwkgIEU0IExDRF9NX0RJU1A7CiAJICogRTMgTENEX0NMMTsJICBFMiBMQ0RfQ0wyOwkgRTEgTENEX0RPTjsJICBFMCBMQ0RfRkxNOwogCSAqLwotCWN0cmxfb3V0dygweDNDMDAsIFBPUlRfUEVDUik7CS8qIDAwIDExIDExIDAwIDAwIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4M0MwMCwgUE9SVF9QRUNSKTsJLyogMDAgMTEgMTEgMDAgMDAgMDAgMDAgMDAgKi8KIAogCS8qIEY3ICh4KTsJICAgICBGNiBEQTEoVkxDRCk7ICAgICBGNSBEQTAobmMpOwkgIEY0IEFOMzsKIAkgKiBGMyBBTjIoTUlEX0FEKTsgICBGMiBBTjEoRUFSVEhfQUQpOyBGMSBBTjAoVEVNUCk7CSAgRjAgR1BJKyhuYyk7CiAJICovCi0JY3RybF9vdXR3KDB4MDAwMiwgUE9SVF9QRkNSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMTAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAyLCBQT1JUX1BGQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAxMCAqLwogCiAJLyogRzcgKHgpOwkgIEc2IElSUTUoVE9VQ0hfQlVTWSk7IEc1IElSUTQoVE9VQ0hfSVJRKTsgRzQgR1BJKEtFWTIpOwogCSAqIEczIEdQSShLRVkxKTsgIEcyIEdQTyhMRUQxMSk7CUcxIEdQTyhMRUQxMCk7ICAgICBHMCBHUE8oTEVEOSk7CiAJICovCi0JY3RybF9vdXR3KDB4MDNENSwgUE9SVF9QR0NSKTsJLyogMDAgMDAgMDAgMTEgMTEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHgwM0Q1LCBQT1JUX1BHQ1IpOwkvKiAwMCAwMCAwMCAxMSAxMSAwMSAwMSAwMSAqLwogCiAJLyogSDcgKHgpOwkgICAgICBINiAvUkFTKEJSQVMpOwkgIEg1IC9DQVMoQkNBUyk7IEg0IENLRShCQ0tFKTsKIAkgKiBIMyBHUE8oRUFSVEhfT0ZGKTsgSDIgR1BPKEVBUlRIX1RFU1QpOyBIMSBVU0IyX1BXUjsJIEgwIFVTQjFfUFdSOwogCSAqLwotCWN0cmxfb3V0dygweDAwNTAsIFBPUlRfUEhDUik7CS8qIDAwIDAwIDAwIDAwIDAxIDAxIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDA1MCwgUE9SVF9QSENSKTsJLyogMDAgMDAgMDAgMDAgMDEgMDEgMDAgMDAgKi8KIAogCS8qIEo3ICh4KTsJICBKNiBBVURDSzsJICAgSjUgQVNFQlJLQUs7CSAgICBKNCBBVURBVEEzOwogCSAqIEozIEFVREFUQTI7CSAgSjIgQVVEQVRBMTsJICAgSjEgQVVEQVRBMDsJICAgIEowIEFVRFNZTkM7CiAJICovCi0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QSkNSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BKQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAqLwogCiAJLyogSzcgKHgpOwkgICAgSzYgKHgpOwkgICAgIEs1ICh4KTsJICAgSzQgKHgpOwogCSAqIEszIFBJTlQ3KC9QV1IyKTsgSzIgUElOVDYoL1BXUjEpOyBLMSBQSU5UNShudSk7IEswIFBJTlQ0KEZMQVNIX1JFQURZKQogCSAqLwotCWN0cmxfb3V0dygweDAwRkYsIFBPUlRfUEtDUik7CS8qIDAwIDAwIDAwIDAwIDExIDExIDExIDExICovCisJX19yYXdfd3JpdGV3KDB4MDBGRiwgUE9SVF9QS0NSKTsJLyogMDAgMDAgMDAgMDAgMTEgMTEgMTEgMTEgKi8KIAogCS8qIEw3IFRSU1Q7CSAgIEw2IFRNUzsJICAgICBMNSBURE87CQkgIEw0IFRESTsKIAkgKiBMMyBUQ0s7CSAgIEwyICh4KTsJICAgICBMMSAoeCk7CQkgIEwwICh4KTsKIAkgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BMQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUExDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICovCiAKIAkvKiBNNyBHUE8oQ1VSUkVOVF9TSU5LKTsgICAgTTYgR1BPKFBXUl9TV0lUQ0gpOyAgICAgTTUgR1BPKExBTl9TUEVFRCk7CiAJICogTTQgR1BPKExBTl9SRVNFVCk7ICAgICAgIE0zIEdQTyhCVVpaRVIpOwkgICAgTTIgR1BPKExDRF9CTCk7CiAJICogTTEgQ1M1QihDQU4zX0NTKTsJICAgIE0wIEdQSSsobmMpOwogCSAqLwotCWN0cmxfb3V0dygweDU1NTIsIFBPUlRfUE1DUik7CSAgIC8qIDAxIDAxIDAxIDAxIDAxIDAxIDAwIDEwICovCisJX19yYXdfd3JpdGV3KDB4NTU1MiwgUE9SVF9QTUNSKTsJICAgLyogMDEgMDEgMDEgMDEgMDEgMDEgMDAgMTAgKi8KIAogCS8qIENVUlJFTlRfU0lOSz1vZmYsCVBXUl9TV0lUQ0g9b2ZmLCBMQU5fU1BFRUQ9MTAwTUJpdCwKIAkgKiBMQU5fUkVTRVQ9b2ZmLAlCVVpaRVI9b2ZmLAlMQ0RfQkw9b2ZmCiAJICovCiAjaWYgQ09ORklHX1NIX01BR0lDX1BBTkVMX1IyX1ZFUlNJT04gPT0gMgotCWN0cmxfb3V0YigweDMwLCBQT1JUX1BNRFIpOworCV9fcmF3X3dyaXRlYigweDMwLCBQT1JUX1BNRFIpOwogI2VsaWYgQ09ORklHX1NIX01BR0lDX1BBTkVMX1IyX1ZFUlNJT04gPT0gMwotCWN0cmxfb3V0YigweEYwLCBQT1JUX1BNRFIpOworCV9fcmF3X3dyaXRlYigweEYwLCBQT1JUX1BNRFIpOwogI2Vsc2UKICNlcnJvciBVbmtub3duIHJldmlzaW9uIG9mIFBMQVRGT1JNX01QX1IyCiAjZW5kaWYKQEAgLTE2Nyw4ICsxNjcsOCBAQAogCSAqIFA0IEdQTyhudSk7CSAgICAgICBQMyBJUlEzKExBTl9JUlEpOyAgUDIgSVJRMihDQU4zX0lSUSk7CiAJICogUDEgSVJRMShDQU4yX0lSUSk7ICBQMCBJUlEwKENBTjFfSVJRKQogCSAqLwotCWN0cmxfb3V0dygweDAxMDAsIFBPUlRfUFBDUik7CS8qIDAwIDAwIDAwIDAxIDAwIDAwIDAwIDAwICovCi0JY3RybF9vdXRiKDB4MTAsIFBPUlRfUFBEUik7CisJX19yYXdfd3JpdGV3KDB4MDEwMCwgUE9SVF9QUENSKTsJLyogMDAgMDAgMDAgMDEgMDAgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZWIoMHgxMCwgUE9SVF9QUERSKTsKIAogCS8qIFI3IEEyNTsJICAgICBSNiBBMjQ7CSAgICAgUjUgQTIzOwkJICBSNCBBMjI7CiAJICogUjMgQTIxOwkgICAgIFIyIEEyMDsJICAgICBSMSBBMTk7CQkgIFIwIEEwOwpAQCAtMTg1LDIyICsxODUsMjIgQEAKIAkvKiBTNyAoeCk7CQlTNiAoeCk7ICAgICAgICBTNSAoeCk7CSAgICAgUzQgR1BPKEVFUFJPTV9DUzIpOwogCSAqIFMzIEdQTyhFRVBST01fQ1MxKTsgIFMyIFNJT0YwX1RYRDsgIFMxIFNJT0YwX1JYRDsgUzAgU0lPRjBfU0NLOwogCSAqLwotCWN0cmxfb3V0dygweDAxNDAsIFBPUlRfUFNDUik7CS8qIDAwIDAwIDAwIDAxIDAxIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDE0MCwgUE9SVF9QU0NSKTsJLyogMDAgMDAgMDAgMDEgMDEgMDAgMDAgMDAgKi8KIAogCS8qIFQ3ICh4KTsJICAgVDYgKHgpOwkgIFQ1ICh4KTsJICBUNCBDT00xX0NUUzsKIAkgKiBUMyBDT00xX1JUUzsJICAgVDIgQ09NMV9UWEQ7CSAgVDEgQ09NMV9SWEQ7CSAgVDAgR1BPKFdET0cpCiAJICovCi0JY3RybF9vdXR3KDB4MDAwMSwgUE9SVF9QVENSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAxLCBQT1JUX1BUQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMSAqLwogCiAJLyogVTcgKHgpOwkgICAgIFU2ICh4KTsJICAgVTUgKHgpOwkgIFU0IEdQSSsoL0FDX0ZBVUxUKTsKIAkgKiBVMyBHUE8oVE9VQ0hfQ1MpOyBVMiBUT1VDSF9UWEQ7IFUxIFRPVUNIX1JYRDsgIFUwIFRPVUNIX1NDSzsKIAkgKi8KLQljdHJsX291dHcoMHgwMjQwLCBQT1JUX1BVQ1IpOwkvKiAwMCAwMCAwMCAxMCAwMSAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDAyNDAsIFBPUlRfUFVDUik7CS8qIDAwIDAwIDAwIDEwIDAxIDAwIDAwIDAwICovCiAKIAkvKiBWNyAoeCk7CSAgVjYgKHgpOwlWNSAoeCk7CQkgIFY0IEdQTyhNSUQyKTsKIAkgKiBWMyBHUE8oTUlEMSk7ICBWMiBDQVJEX1R4RDsJVjEgQ0FSRF9SeEQ7CSAgVjAgR1BJKygvQkFUX0ZBVUxUKTsKIAkgKi8KLQljdHJsX291dHcoMHgwMTQyLCBQT1JUX1BWQ1IpOwkvKiAwMCAwMCAwMCAwMSAwMSAwMCAwMCAxMCAqLworCV9fcmF3X3dyaXRldygweDAxNDIsIFBPUlRfUFZDUik7CS8qIDAwIDAwIDAwIDAxIDAxIDAwIDAwIDEwICovCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtcHIyX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCkBAIC0yMDksMjQgKzIwOSwyNCBAQAogCSAqIC9QQ0NfQ0QxLCAvUENDX0NEMiwgIFBDQ19CVkQxLCBQQ0NfQlZEMiwKIAkgKiAvSU9JUzE2LCAgSVJRNCwJSVJRNSwJICBVU0IxZF9TVVNQRU5ECiAJICovCi0JY3RybF9vdXR3KDB4QUFCQywgUE9SVF9QU0VMQSk7CisJX19yYXdfd3JpdGV3KDB4QUFCQywgUE9SVF9QU0VMQSk7CiAJLyogc2V0IFBpbiBTZWxlY3QgUmVnaXN0ZXIgQjoKIAkgKiAvU0NJRjBfUlRTLCAvU0NJRjBfQ1RTLCBMQ0RfVkNQV0MsCiAJICogTENEX1ZFUFdDLCAgSUlDX1NEQSwgICAgSUlDX1NDTCwgUmVzZXJ2ZWQKIAkgKi8KLQljdHJsX291dHcoMHgzQzAwLCBQT1JUX1BTRUxCKTsKKwlfX3Jhd193cml0ZXcoMHgzQzAwLCBQT1JUX1BTRUxCKTsKIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBDOgogCSAqIFNJT0YxX1NDSywgU0lPRjFfUnhELCBTQ0lGMV9SeEQsIFNDSUYxX1R4RCwgUmVzZXJ2ZWQKIAkgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BTRUxDKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BTRUxDKTsKIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBEOiBSZXNlcnZlZCwgU0lPRjFfVHhELCBSZXNlcnZlZCwgU0lPRjFfTUNMSywKIAkgKiBSZXNlcnZlZCwgU0lPRjFfU1lOQywgUmVzZXJ2ZWQsIFNDSUYxX1NDSywgUmVzZXJ2ZWQKIAkgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BTRUxEKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BTRUxEKTsKIAkvKiBzZXQgVVNCIFR4UnggQ29udHJvbDogUmVzZXJ2ZWQsIERSViwgUmVzZXJ2ZWQsIFVTQl9UUkFOUywgVVNCX1NFTCAqLwotCWN0cmxfb3V0dygweDAxMDEsIFBPUlRfVVRSQ1RMKTsKKwlfX3Jhd193cml0ZXcoMHgwMTAxLCBQT1JUX1VUUkNUTCk7CiAJLyogc2V0IFVTQiBDbG9jayBDb250cm9sOiBVU1NDUywgVVNTVEIsIFJlc2VydmVkIChIaWdoQnl0ZSBhbHdheXMgQTUpICovCi0JY3RybF9vdXR3KDB4QTVDMCwgUE9SVF9VQ0xLQ1JfVyk7CisJX19yYXdfd3JpdGV3KDB4QTVDMCwgUE9SVF9VQ0xLQ1JfVyk7CiAKIAlzZXR1cF9jaGlwX3NlbGVjdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKaW5kZXggNjI2MDdlYi4uNTk0ODY2MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYwpAQCAtNTksMTUgKzU5LDEyIEBACiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewogCS5iaXRfcG9zCT0gaGVhcnRiZWF0X2JpdF9wb3MsCiAJLm5yX2JpdHMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9iaXRfcG9zKSwKLQkucmVnc2l6ZQk9IDgsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFBPUlRfUENEUiwKLQkJLmVuZAk9IFBPUlRfUENEUiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBPUlRfUENEUiwKKwkuZW5kCT0gUE9SVF9QQ0RSLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CkBAIC03Niw4ICs3Myw4IEBACiAJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwb2xhcmlzX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtOTIsMTUgKzg5LDE1IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiQ29uZmlndXJpbmcgUG9sYXJpcyBleHRlcm5hbCBidXNcbiIpOwogCiAJLyogQ29uZmlndXJlIGFyZWEgNSB3aXRoIDIgd2FpdCBzdGF0ZXMgKi8KLQl3Y3IgPSBjdHJsX2ludyhXQ1IyKTsKKwl3Y3IgPSBfX3Jhd19yZWFkdyhXQ1IyKTsKIAl3Y3IgJj0gKH5BUkVBNV9XQUlUX0NUUkwpOwogCXdjciB8PSAoV0FJVF9TVEFURVNfMTAgPDwgMTApOwotCWN0cmxfb3V0dyh3Y3IsIFdDUjIpOworCV9fcmF3X3dyaXRldyh3Y3IsIFdDUjIpOwogCiAJLyogQ29uZmlndXJlIGFyZWEgNSBmb3IgMzItYml0IGFjY2VzcyAqLwotCWJjcl9tYXNrID0gY3RybF9pbncoQkNSMik7CisJYmNyX21hc2sgPSBfX3Jhd19yZWFkdyhCQ1IyKTsKIAliY3JfbWFzayB8PSAxIDw8IDEwOwotCWN0cmxfb3V0dyhiY3JfbWFzaywgQkNSMik7CisJX19yYXdfd3JpdGV3KGJjcl9tYXNrLCBCQ1IyKTsKIAogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwb2xhcmlzX2RldmljZXMsCiAJCQkJICAgIEFSUkFZX1NJWkUocG9sYXJpc19kZXZpY2VzKSk7CkBAIC0xMzEsMTMgKzEyOCwxMyBAQAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfcG9sYXJpc19pcnEodm9pZCkKIHsKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JY3RybF9vdXR3KDAsIEJDUl9JTENSQSk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSQik7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSQyk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRCk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRSk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRik7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRyk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSQSk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSQik7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSQyk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRCk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRSk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRik7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRyk7CiAKIAlyZWdpc3Rlcl9pcHJfY29udHJvbGxlcigmaXByX2lycV9kZXNjKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKaW5kZXggZTVhOGEyZi4uZmU3ZTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1wY2EuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvcjhhNjY1OTcuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bWFjaC9zaDc3ODVsY3IuaD4KQEAgLTMyLDI2ICszMywxNyBAQAogICogTk9URTogVGhpcyBib2FyZCBoYXMgMiBwaHlzaWNhbCBtZW1vcnkgbWFwcy4KICAqCSBQbGVhc2UgbG9vayBhdCBpbmNsdWRlL2FzbS1zaC9zaDc3ODVsY3IuaCBvciBoYXJkd2FyZSBtYW51YWwuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUExEX0xFRENSLAotCQkuZW5kCT0gUExEX0xFRENSLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDgsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQTERfTEVEQ1IsCisJLmVuZAk9IFBMRF9MRURDUiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJoZWFydGJlYXQiLAogCS5pZAkJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CkBAIC0zNDEsOCArMzMzLDE0IEBACiAJcG1fcG93ZXJfb2ZmID0gc2g3Nzg1bGNyX3Bvd2VyX29mZjsKIAogCS8qIHNtNTAxIERSQU0gY29uZmlndXJhdGlvbiAqLwotCXNtNTAxX3JlZyA9ICh2b2lkIF9faW9tZW0gKikweGIzZTAwMDAwICsgU001MDFfRFJBTV9DT05UUk9MOwotCXdyaXRlbCgweDAwMDMwN2MyLCBzbTUwMV9yZWcpOworCXNtNTAxX3JlZyA9IGlvcmVtYXBfbm9jYWNoZShTTTEwN19SRUdfQUREUiwgU001MDFfRFJBTV9DT05UUk9MKTsKKwlpZiAoIXNtNTAxX3JlZykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpb3JlbWFwIGVycm9yLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJd3JpdGVsKDB4MDAwMzA3YzIsIHNtNTAxX3JlZyArIFNNNTAxX0RSQU1fQ09OVFJPTCk7CisJaW91bm1hcChzbTUwMV9yZWcpOwogfQogCiAvKiBSZXR1cm4gdGhlIGJvYXJkIHNwZWNpZmljIGJvb3QgbW9kZSBwaW4gY29uZmlndXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKaW5kZXggYjFkY2JiYy4uMzI1YmVkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jCkBAIC0xNyw4ICsxNyw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3NobWluX2lycSh2b2lkKQogewotCWN0cmxfb3V0dygweDJhMDAsIFBGQ19QSENSKTsJLy8gSVJRMC0zPUlSUQotCWN0cmxfb3V0dygweDBhYWEsIElOVENfSUNSMSk7CS8vIElSUTAtMz1JUlEtbW9kZSxMb3ctYWN0aXZlLgorCV9fcmF3X3dyaXRldygweDJhMDAsIFBGQ19QSENSKTsJLy8gSVJRMC0zPUlSUQorCV9fcmF3X3dyaXRldygweDBhYWEsIElOVENfSUNSMSk7CS8vIElSUTAtMz1JUlEtbW9kZSxMb3ctYWN0aXZlLgogCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdGl0YW4uYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXRpdGFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjMzZjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC10aXRhbi5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBhcmNoL3NoL2JvYXJkcy90aXRhbi9zZXR1cC5jIC0gU2V0dXAgZm9yIFRpdGFuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiAgSmFtaWUgTGVuZWhhbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCit7CisJLyogZW5hYmxlIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIGV4dGVybmFscyAqLworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKK30KKworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl90aXRhbiBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQk9ICJUaXRhbiIsCisJLm12X2luaXRfaXJxCT0gaW5pdF90aXRhbl9pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCmluZGV4IDM2YjhiYWMuLmE5YmQ2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKQEAgLTIsNyArMiw3IEBACiAgKiBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4gU0g3Nzg2IFVycXVlbGwgU3VwcG9ydC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwICBQYXVsIE11bmR0CiAgKgogICogQmFzZWQgb24gYm9hcmQtc2g3Nzg1bGNyLmMKICAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxtYWNoL3VycXVlbGwuaD4KICNpbmNsdWRlIDxjcHUvc2g3Nzg2Lmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgpAQCAtNTAsMjYgKzUxLDE3IEBACiAgKi8KIAogLyogSGVhcnRCZWF0ICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEJPQVJEUkVHKFNMRURSKSwKLQkJLmVuZAk9IEJPQVJEUkVHKFNMRURSKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IEJPQVJEUkVHKFNMRURSKSwKKwkuZW5kCT0gQk9BUkRSRUcoU0xFRFIpLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJoZWFydGJlYXQiLAogCS5pZAkJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogTEFOOTFDMTExICovCkBAIC0xODQsNiArMTc2LDI3IEBACiAJcmV0dXJuIF9fcmF3X3JlYWR3KFVCT0FSRFJFRyhNRFNXTVIpKTsKIH0KIAorc3RhdGljIGludCB1cnF1ZWxsX2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwkvKgorCSAqIE9ubHkgaGFuZGxlIHRoZSBFWFRBTCBjYXNlLCBhbnlvbmUgaW50ZXJmYWNpbmcgYSBjcnlzdGFsCisJICogcmVzb25hdG9yIHdpbGwgbmVlZCB0byBwcm92aWRlIHRoZWlyIG93biBpbnB1dCBjbG9jay4KKwkgKi8KKwlpZiAodGVzdF9tb2RlX3BpbihNT0RFX1BJTjkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsayA9IGNsa19nZXQoTlVMTCwgImV4dGFsIik7CisJaWYgKCFjbGsgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgMzMzMzMzMzMpOworCWNsa19wdXQoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCiBzdGF0aWMgdm9pZCBfX2luaXQgdXJxdWVsbF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewpAQCAtMjAwLDQgKzIxMyw1IEBACiAJLm12X3NldHVwCT0gdXJxdWVsbF9zZXR1cCwKIAkubXZfaW5pdF9pcnEJPSB1cnF1ZWxsX2luaXRfaXJxLAogCS5tdl9tb2RlX3BpbnMJPSB1cnF1ZWxsX21vZGVfcGlucywKKwkubXZfY2xrX2luaXQJPSB1cnF1ZWxsX2Nsa19pbml0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwppbmRleCAxZjVmYTVjLi41N2UzN2UyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCkBAIC0xNTksMjEgKzE1OSwyMSBAQAogCW1zbGVlcCgxMDApOwogCiAJLyogQVNEIEFQLTMyMC8zMjUgTENEIE9OICovCi0JY3RybF9vdXR3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOworCV9fcmF3X3dyaXRldyhGUEdBX0xDRFJFR19WQUwsIEZQR0FfTENEUkVHKTsKIAogCS8qIGJhY2tsaWdodCAqLwogCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMCk7Ci0JY3RybF9vdXR3KDB4MTAwLCBGUEdBX0JLTFJFRyk7CisJX19yYXdfd3JpdGV3KDB4MTAwLCBGUEdBX0JLTFJFRyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFwMzIwX3d2Z2FfcG93ZXJfb2ZmKHZvaWQgKmJvYXJkX2RhdGEpCiB7CiAJLyogYmFja2xpZ2h0ICovCi0JY3RybF9vdXR3KDAsIEZQR0FfQktMUkVHKTsKKwlfX3Jhd193cml0ZXcoMCwgRlBHQV9CS0xSRUcpOwogCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMSk7CiAKIAkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT0ZGICovCi0JY3RybF9vdXR3KDAsIEZQR0FfTENEUkVHKTsKKwlfX3Jhd193cml0ZXcoMCwgRlBHQV9MQ0RSRUcpOwogfQogCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkY19pbmZvID0gewpAQCAtNDIwLDcgKzQyMCw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSAxMDEsCisJCS5zdGFydAk9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSAyNCwKKwkJLnN0YXJ0CT0gMjMsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ3MSw4ICs0NzEsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gb3Y3NzI1X2luZm8gPSB7Ci0JLmJ1c3dpZHRoCT0gU09DQU1fREFUQVdJRFRIXzgsCi0JLmZsYWdzCQk9IE9WNzcyWF9GTEFHX1ZGTElQIHwgT1Y3NzJYX0ZMQUdfSEZMSVAsCisJLmZsYWdzCQk9IE9WNzcyWF9GTEFHX1ZGTElQIHwgT1Y3NzJYX0ZMQUdfSEZMSVAgfCBcCisJCQkgIE9WNzcyWF9GTEFHXzhCSVQsCiAJLmVkZ2VjdHJsCT0gT1Y3NzJYX0FVVE9fRURHRUNUUkwoMHhmLCAwKSwKIH07CiAKQEAgLTU5NSw3ICs1OTUsNyBAQAogCWdwaW9fcmVxdWVzdChHUElPX1BUWjQsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjQsIDApOyAvKiBTQUREUiAqLwogCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX01TRUxDUkIpICYgfjB4MDAwMSwgUE9SVF9NU0VMQ1JCKTsKIAogCS8qIEZMQ1RMICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRkNFLCBOVUxMKTsKQEAgLTYxMyw5ICs2MTMsOSBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZXRSwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlJCLCBOVUxMKTsKIAotCWN0cmxfb3V0dygwLCBQT1JUX0hJWkNSQyk7Ci0JY3RybF9vdXR3KDB4RkZGRiwgUE9SVF9EUlZDUkEpOwotCWN0cmxfb3V0dygweEZGRkYsIFBPUlRfRFJWQ1JCKTsKKwlfX3Jhd193cml0ZXcoMCwgUE9SVF9ISVpDUkMpOworCV9fcmF3X3dyaXRldygweEZGRkYsIFBPUlRfRFJWQ1JBKTsKKwlfX3Jhd193cml0ZXcoMHhGRkZGLCBQT1JUX0RSVkNSQik7CiAKIAlwbGF0Zm9ybV9yZXNvdXJjZV9zZXR1cF9tZW1vcnkoJmNldV9kZXZpY2UsICJjZXUiLCA0IDw8IDIwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1jYXltYW4vaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYwppbmRleCAzM2Y3NzA4NS4uMTM5NGIwNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1jYXltYW4vaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1jYXltYW4vaXJxLmMKQEAgLTY2LDkgKzY2LDkgQEAKIAlyZWcgPSBFUExEX01BU0tfQkFTRSArICgoaXJxIC8gOCkgPDwgMik7CiAJYml0ID0gMTw8KGlycSAlIDgpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQltYXNrID0gY3RybF9pbmwocmVnKTsKKwltYXNrID0gX19yYXdfcmVhZGwocmVnKTsKIAltYXNrIHw9IGJpdDsKLQljdHJsX291dGwobWFzaywgcmVnKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcmVnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTgzLDkgKzgzLDkgQEAKIAlyZWcgPSBFUExEX01BU0tfQkFTRSArICgoaXJxIC8gOCkgPDwgMik7CiAJYml0ID0gMTw8KGlycSAlIDgpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQltYXNrID0gY3RybF9pbmwocmVnKTsKKwltYXNrID0gX19yYXdfcmVhZGwocmVnKTsKIAltYXNrICY9IH5iaXQ7Ci0JY3RybF9vdXRsKG1hc2ssIHJlZyk7CisJX19yYXdfd3JpdGVsKG1hc2ssIHJlZyk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0xMDksOCArMTA5LDggQEAKIAkJdW5zaWduZWQgbG9uZyBzdGF0dXM7CiAJCWludCBpOwogCi0JCXN0YXR1cyA9IGN0cmxfaW5sKEVQTERfU1RBVFVTX0JBU0UpICYKLQkJCSBjdHJsX2lubChFUExEX01BU0tfQkFTRSkgJiAweGZmOworCQlzdGF0dXMgPSBfX3Jhd19yZWFkbChFUExEX1NUQVRVU19CQVNFKSAmCisJCQkgX19yYXdfcmVhZGwoRVBMRF9NQVNLX0JBU0UpICYgMHhmZjsKIAkJaWYgKHN0YXR1cyA9PSAwKSB7CiAJCQlpcnEgPSAtMTsKIAkJfSBlbHNlIHsKQEAgLTEyNiw4ICsxMjYsOCBAQAogCQl1bnNpZ25lZCBsb25nIHN0YXR1czsKIAkJaW50IGk7CiAKLQkJc3RhdHVzID0gY3RybF9pbmwoRVBMRF9TVEFUVVNfQkFTRSArIDMgKiBzaXplb2YodTMyKSkgJgotCQkJIGN0cmxfaW5sKEVQTERfTUFTS19CQVNFICsgMyAqIHNpemVvZih1MzIpKSAmIDB4ZmY7CisJCXN0YXR1cyA9IF9fcmF3X3JlYWRsKEVQTERfU1RBVFVTX0JBU0UgKyAzICogc2l6ZW9mKHUzMikpICYKKwkJCSBfX3Jhd19yZWFkbChFUExEX01BU0tfQkFTRSArIDMgKiBzaXplb2YodTMyKSkgJiAweGZmOwogCQlpZiAoc3RhdHVzID09IDApIHsKIAkJCWlycSA9IC0xOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9pcnEuYwppbmRleCBmNTVmYzhlLi5kOTMyNjY3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9pcnEuYwpAQCAtMTM1LDMgKzEzNSwzMCBAQAogCS8qIE5vdCByZWFjaGVkICovCiAJcmV0dXJuIGlycTsKIH0KKwordm9pZCBzeXN0ZW1hc2ljX2lycV9pbml0KHZvaWQpCit7CisJaW50IGksIG5pZCA9IGNwdV90b19ub2RlKGJvb3RfY3B1X2RhdGEpOworCisJLyogQXNzaWduIGFsbCB2aXJ0dWFsIElSUXMgdG8gdGhlIFN5c3RlbSBBU0lDIGludC4gaGFuZGxlciAqLworCWZvciAoaSA9IEhXX0VWRU5UX0lSUV9CQVNFOyBpIDwgSFdfRVZFTlRfSVJRX01BWDsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBpcnE7CisKKwkJaXJxID0gY3JlYXRlX2lycV9ucihpLCBuaWQpOworCQlpZiAodW5saWtlbHkoaXJxID09IDApKSB7CisJCQlwcl9lcnIoIiVzOiBmYWlsZWQgaG9va2luZyBpcnEgJWQgZm9yIHN5c3RlbWFzaWNcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGkpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHVubGlrZWx5KGlycSAhPSBpKSkgeworCQkJcHJfZXJyKCIlczogZ290IGlycSAlZCBidXQgd2FudGVkICVkLCBiYWlsaW5nLlxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaXJxLCBpKTsKKwkJCWRlc3Ryb3lfaXJxKGlycSk7CisJCQlyZXR1cm47CisJCX0KKworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnN5c3RlbWFzaWNfaW50LAorCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvcnRjLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9ydGMuYwppbmRleCBhNzQzMzY4Li4wNjFkNjU3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9ydGMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9ydGMuYwpAQCAtMzUsMTEgKzM1LDExIEBACiAJdW5zaWduZWQgbG9uZyB2YWwxLCB2YWwyOwogCiAJZG8gewotCQl2YWwxID0gKChjdHJsX2lubChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAotCQkJKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOworCQl2YWwxID0gKChfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAorCQkJKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOwogCi0JCXZhbDIgPSAoKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8Ci0JCQkoY3RybF9pbmwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CisJCXZhbDIgPSAoKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8CisJCQkoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CiAJfSB3aGlsZSAodmFsMSAhPSB2YWwyKTsKIAogCXRzLT50dl9zZWMgPSB2YWwxIC0gVFdFTlRZX1lFQVJTOwpAQCAtNjAsMTQgKzYwLDE0IEBACiAJdW5zaWduZWQgbG9uZyBhZGogPSBzZWNzICsgVFdFTlRZX1lFQVJTOwogCiAJZG8gewotCQljdHJsX291dGwoKGFkaiAmIDB4ZmZmZjAwMDApID4+IDE2LCBBSUNBX1JUQ19TRUNTX0gpOwotCQljdHJsX291dGwoKGFkaiAmIDB4ZmZmZiksIEFJQ0FfUlRDX1NFQ1NfTCk7CisJCV9fcmF3X3dyaXRlbCgoYWRqICYgMHhmZmZmMDAwMCkgPj4gMTYsIEFJQ0FfUlRDX1NFQ1NfSCk7CisJCV9fcmF3X3dyaXRlbCgoYWRqICYgMHhmZmZmKSwgQUlDQV9SVENfU0VDU19MKTsKIAotCQl2YWwxID0gKChjdHJsX2lubChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAotCQkJKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOworCQl2YWwxID0gKChfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0gpICYgMHhmZmZmKSA8PCAxNikgfAorCQkJKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfTCkgJiAweGZmZmYpOwogCi0JCXZhbDIgPSAoKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8Ci0JCQkoY3RybF9pbmwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CisJCXZhbDIgPSAoKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8CisJCQkoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CiAJfSB3aGlsZSAodmFsMSAhPSB2YWwyKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKaW5kZXggYTRiNzQwMi4uYWQxYTRkYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCkBAIC0yOCwyNSArMjgsOCBAQAogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8bWFjaC9zeXNhc2ljLmg+CiAKLWV4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgc3lzdGVtYXNpY19pbnQ7Ci1leHRlcm4gdm9pZCBhaWNhX3RpbWVfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgc3lzdGVtYXNpY19pcnFfZGVtdXgoaW50KTsKLQogc3RhdGljIHZvaWQgX19pbml0IGRyZWFtY2FzdF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCWludCBpOwotCi0JLyogTWFzayBhbGwgaGFyZHdhcmUgZXZlbnRzICovCi0JLyogWFhYICovCi0KLQkvKiBBY2tub3dsZWRnZSBhbnkgcHJldmlvdXMgZXZlbnRzICovCi0JLyogWFhYICovCi0KLQkvKiBBc3NpZ24gYWxsIHZpcnR1YWwgSVJRcyB0byB0aGUgU3lzdGVtIEFTSUMgaW50LiBoYW5kbGVyICovCi0JZm9yIChpID0gSFdfRVZFTlRfSVJRX0JBU0U7IGkgPCBIV19FVkVOVF9JUlFfTUFYOyBpKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3lzdGVtYXNpY19pbnQsCi0JCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKLQogCWJvYXJkX3RpbWVfaW5pdCA9IGFpY2FfdGltZV9pbml0OwogfQogCkBAIC01NCw0ICszNyw1IEBACiAJLm12X25hbWUJCT0gIlNlZ2EgRHJlYW1jYXN0IiwKIAkubXZfc2V0dXAJCT0gZHJlYW1jYXN0X3NldHVwLAogCS5tdl9pcnFfZGVtdXgJCT0gc3lzdGVtYXNpY19pcnFfZGVtdXgsCisJLm12X2luaXRfaXJxCQk9IHN5c3RlbWFzaWNfaXJxX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZHJhbS5TIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZHJhbS5TCmluZGV4IDgzMzQ0MDAuLjM5NjNjNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2RyYW0uUworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NkcmFtLlMKQEAgLTM3LDYgKzM3LDEwIEBACiAJLmJhbGlnbiA0CiBFTlRSWShlY292ZWMyNF9zZHJhbV9sZWF2ZV9zdGFydCkKIAorCW1vdi5sCUAoU0hfU0xFRVBfTU9ERSwgcjUpLCByMAorCXRzdAkjU1VTUF9TSF9SU1RBTkRCWSwgcjAKKwliZglyZXN1bWVfcnN0YW5kYnkKKwogCS8qIERCU0M6IHB1dCBtZW1vcnkgaW4gYXV0by1yZWZyZXNoIG1vZGUgKi8KIAogCUVEIDB4RkQwMDAwNDAsIDB4MDAwMDAwMDAgLyogREJSRlBETjAgKi8KQEAgLTQ5LDQgKzUzLDU5IEBACiAJcnRzCiAJIG5vcAogCityZXN1bWVfcnN0YW5kYnk6CisKKwkvKiBEQlNDOiByZS1pbml0aWFsaXplIGFuZCBwdXQgaW4gYXV0by1yZWZyZXNoICovCisKKwlFRCAweEZEMDAwMTA4LCAweDAwMDAwMTgxIC8qIERCUERDTlQwICovCisJRUQgMHhGRDAwMDAyMCwgMHgwMTVCMDAwMiAvKiBEQkNPTkYgKi8KKwlFRCAweEZEMDAwMDMwLCAweDAzMDcxNTAyIC8qIERCVFIwICovCisJRUQgMHhGRDAwMDAzNCwgMHgwMjAyMDEwMiAvKiBEQlRSMSAqLworCUVEIDB4RkQwMDAwMzgsIDB4MDEwOTA0MDUgLyogREJUUjIgKi8KKwlFRCAweEZEMDAwMDNDLCAweDAwMDAwMDAyIC8qIERCVFIzICovCisJRUQgMHhGRDAwMDAwOCwgMHgwMDAwMDAwNSAvKiBEQktJTkQgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAxIC8qIERCUkZQRE4wICovCisJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMCAvKiBEQlJGUEROMCAqLworCUVEIDB4RkQwMDAwMTgsIDB4MDAwMDAwMDEgLyogREJDS0VDTlQgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TOgorCWR0CXIwCisJYmYJV0FJVF80MDBOUworCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDIwMDAwIC8qIERCTVJDTlQgKEVNUjIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAzMDAwMCAvKiBEQk1SQ05UIChFTVIzKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAwMDQgLyogREJNUkNOVCAoRU1SKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMDA1MzIgLyogREJNUkNOVCAoTVJTKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDQgLyogREJDTURDTlQgKFJFRikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDAwNDMyIC8qIERCTVJDTlQgKE1SUykgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwM2MwIC8qIERCTVJDTlQgKEVNUikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwMDQwIC8qIERCTVJDTlQgKEVNUikgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TXzI6CisJZHQJcjAKKwliZglXQUlUXzQwME5TXzIKKworCUVEIDB4RkQwMDAwMTAsIDB4MDAwMDAwMDEgLyogREJFTiAqLworCUVEIDB4RkQwMDAwNDQsIDB4MDAwMDA1MGYgLyogREJSRlBETjEgKi8KKwlFRCAweEZEMDAwMDQ4LCAweDIzNjgwMGU2IC8qIERCUkZQRE4yICovCisKKwltb3YubAlEVU1NWSxyMAorCW1vdi5sCUByMCwgcjEgLyogZm9yY2Ugc2luZ2xlIGR1bW15IHJlYWQgKi8KKworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAxMDgsIDB4MDAwMDAwODAgLyogREJQRENOVDAgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDEwMDAwIC8qIERCUkZQRE4wICovCisKKwlydHMKKwkgbm9wCisKKwkuYmFsaWduIDQKK0RVTU1ZOgkubG9uZwkweGFjNDAwMDAwCisKIEVOVFJZKGVjb3ZlYzI0X3NkcmFtX2xlYXZlX2VuZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwppbmRleCA1YzI0NjI4Li4zOWVkODcyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCkBAIC02NCwxOCArNjQsMTYgQEAKIAogLyogSGVhcnRiZWF0ICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBsZWRfcG9zW10gPSB7IDAsIDEsIDIsIDMgfTsKKwogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDgsCiAJLm5yX2JpdHMgPSA0LAogCS5iaXRfcG9zID0gbGVkX3BvcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IDB4QTQwNTAxMkMsIC8qIFBURyAqLwotCQkuZW5kICAgID0gMHhBNDA1MDEyRSAtIDEsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICA9IDB4QTQwNTAxMkMsIC8qIFBURyAqLworCS5lbmQgICAgPSAweEE0MDUwMTJFIC0gMSwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV84QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTg0LDggKzgyLDggQEAKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YSA9ICZoZWFydGJlYXRfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSAxLAorCS5yZXNvdXJjZSAgICAgICA9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBNVEQgKi8KQEAgLTQ1NSw3ICs0NTMsNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydCAgPSAxMDEsCisJCS5zdGFydCAgPSAxMDAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ5MSw3ICs0ODksNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydCAgPSAyNCwKKwkJLnN0YXJ0ICA9IDIzLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC02OTgsMTMgKzY5NiwxMyBAQAogI2RlZmluZSBGQ0xLQkNSCQkweGE0MTUwMDBjCiBzdGF0aWMgdm9pZCBmc2ltY2tfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTMyIHN0YXR1cyA9IGN0cmxfaW5sKGNsay0+ZW5hYmxlX3JlZyk7CisJdTMyIHN0YXR1cyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CiAKIAkvKiB1c2UgZXh0ZXJuYWwgY2xvY2sgKi8KIAlzdGF0dXMgJj0gfjB4MDAwMDAwZmY7CiAJc3RhdHVzIHw9IDB4MDAwMDAwODA7CiAKLQljdHJsX291dGwoc3RhdHVzLCBjbGstPmVuYWJsZV9yZWcpOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBmc2ltY2tfY2xrX29wcyA9IHsKQEAgLTc1Myw2ICs3NTEsMjYgQEAKIAl9LAogfTsKIAorLyogSXJEQSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcmRhX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiSXJEQSIsCisJCS5zdGFydCAgPSAweEE0NUQwMDAwLAorCQkuZW5kICAgID0gMHhBNDVEMDA0OSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMjAsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoX3NpciIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpcmRhX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gaXJkYV9yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZWNvdmVjX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZoZWFydGJlYXRfZGV2aWNlLAogCSZub3JfZmxhc2hfZGV2aWNlLApAQCAtNzczLDggKzc5MSwxMCBAQAogCSZjYW1lcmFfZGV2aWNlc1sxXSwKIAkmY2FtZXJhX2RldmljZXNbMl0sCiAJJmZzaV9kZXZpY2UsCisJJmlyZGFfZGV2aWNlLAogfTsKIAorI2lmZGVmIENPTkZJR19JMkMKICNkZWZpbmUgRUVQUk9NX0FERFIgMHg1MAogc3RhdGljIHU4IG1hY19yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYSwgdTggY29tbWFuZCkKIHsKQEAgLTgxNyw2ICs4MzcsMTIgQEAKIAkJbXNsZWVwKDEwKTsKIAl9CiB9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IHNoX2V0aF9pbml0KHN0cnVjdCBzaF9ldGhfcGxhdF9kYXRhICpwZCkKK3sKKwlwcl9lcnIoInVuYWJsZSB0byByZWFkIHNoX2V0aCBNQUMgYWRkcmVzc1xuIik7Cit9CisjZW5kaWYKIAogI2RlZmluZSBQT1JUX0hJWkEgMHhBNDA1MDE1OAogI2RlZmluZSBJT0RSSVZFQSAgMHhBNDA1MDE4QQpAQCAtODMxLDcgKzg1Nyw4IEBACiAJc3RydWN0IGNsayAqY2xrOwogCiAJLyogcmVnaXN0ZXIgYm9hcmQgc3BlY2lmaWMgc2VsZi1yZWZyZXNoIGNvZGUgKi8KLQlzaF9tb2JpbGVfcmVnaXN0ZXJfc2VsZl9yZWZyZXNoKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YsCisJc2hfbW9iaWxlX3JlZ2lzdGVyX3NlbGZfcmVmcmVzaChTVVNQX1NIX1NUQU5EQlkgfCBTVVNQX1NIX1NGIHwKKwkJCQkJU1VTUF9TSF9SU1RBTkRCWSwKIAkJCQkJJmVjb3ZlYzI0X3NkcmFtX2VudGVyX3N0YXJ0LAogCQkJCQkmZWNvdmVjMjRfc2RyYW1fZW50ZXJfZW5kLAogCQkJCQkmZWNvdmVjMjRfc2RyYW1fbGVhdmVfc3RhcnQsCkBAIC04NTUsNyArODgyLDcgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEcxLCAwKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEcyLCAwKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEczLCAwKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfSElaQSkgJiB+KDB4MSA8PCAxKSkgLCBQT1JUX0hJWkEpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9ISVpBKSAmIH4oMHgxIDw8IDEpKSAsIFBPUlRfSElaQSk7CiAKIAkvKiBlbmFibGUgU0gtRXRoICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRBMSwgTlVMTCk7CkBAIC04NzUsMTYgKzkwMiwxNiBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xOS1NUQSwgICAgICAgTlVMTCk7CiAKIAkvKiBlbmFibGUgVVNCICovCi0JY3RybF9vdXR3KDB4MDAwMCwgMHhBNEQ4MDAwMCk7Ci0JY3RybF9vdXR3KDB4MDAwMCwgMHhBNEQ5MDAwMCk7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgMHhBNEQ4MDAwMCk7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgMHhBNEQ5MDAwMCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRCMywgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX1BUQjQsICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19QVEI1LCAgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVEIzKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEI0LCAwKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEI1LCAwKTsKLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMTkyKTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMTkyKTsKIAogCWlmIChncGlvX2dldF92YWx1ZShHUElPX1BUQjMpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlVTQjEgZnVuY3Rpb24gaXMgc2VsZWN0ZWRcbiIpOwpAQCAtOTI1LDcgKzk1Miw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVlNZTiwgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRERPTiwgICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RMQ0xLLCAgTlVMTCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CiAKIAlncGlvX3JlcXVlc3QoR1BJT19QVEU2LCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19QVFUxLCBOVUxMKTsKQEAgLTkzNyw3ICs5NjQsNyBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUQTIsIDApOwogCiAJLyogSS9PIGJ1ZmZlciBkcml2ZSBhYmlsaXR5IGlzIGhpZ2ggKi8KLQljdHJsX291dHcoKGN0cmxfaW53KElPRFJJVkVBKSAmIH4weDAwYzApIHwgMHgwMDgwICwgSU9EUklWRUEpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoSU9EUklWRUEpICYgfjB4MDBjMCkgfCAweDAwODAgLCBJT0RSSVZFQSk7CiAKIAlpZiAoZ3Bpb19nZXRfdmFsdWUoR1BJT19QVEU2KSkgewogCQkvKiBEVkkgKi8KQEAgLTEwNjksNyArMTA5Niw3IEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRCNywgMCk7CiAKIAkvKiBJL08gYnVmZmVyIGRyaXZlIGFiaWxpdHkgaXMgaGlnaCBmb3IgU0RISTEgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KElPRFJJVkVBKSAmIH4weDMwMDApIHwgMHgyMDAwICwgSU9EUklWRUEpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoSU9EUklWRUEpICYgfjB4MzAwMCkgfCAweDIwMDAgLCBJT0RSSVZFQSk7CiAjZWxzZQogCS8qIGVuYWJsZSBNU0lPRjAgb24gQ04xMSAobmVlZHMgRFMyLjQgc2V0IHRvIE9GRikgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9NU0lPRjBfVFhELCBOVUxMKTsKQEAgLTExMDcsNiArMTEzNCwxMSBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9CTFJDSywgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NMS0FVRElPQk8sIE5VTEwpOwogCisJLyogc2V0IFNQVTIgY2xvY2sgdG8gODMuNCBNSHogKi8KKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJzcHVfY2xrIik7CisJY2xrX3NldF9yYXRlKGNsaywgY2xrX3JvdW5kX3JhdGUoY2xrLCA4MzMzMzMzMykpOworCWNsa19wdXQoY2xrKTsKKwogCS8qIGNoYW5nZSBwYXJlbnQgb2YgRlNJIEIgKi8KIAljbGsgPSBjbGtfZ2V0KE5VTEwsICJmc2liX2NsayIpOwogCWNsa19yZWdpc3RlcigmZnNpbWNrYl9jbGspOwpAQCAtMTEyMyw2ICsxMTU1LDE3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSU5UQ19JUlExLCBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0ZOX0lOVENfSVJRMSk7CiAKKwkvKiBzZXQgVlBVIGNsb2NrIHRvIDE2NiBNSHogKi8KKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJ2cHVfY2xrIik7CisJY2xrX3NldF9yYXRlKGNsaywgY2xrX3JvdW5kX3JhdGUoY2xrLCAxNjYwMDAwMDApKTsKKwljbGtfcHV0KGNsayk7CisKKwkvKiBlbmFibGUgSXJEQSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSREFfT1VULCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX0lOLCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRVNSwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRVNSwgMCk7CisKIAkvKiBlbmFibGUgSTJDIGRldmljZSAqLwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGkyYzBfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKGkyYzBfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYwppbmRleCA4M2MyOGJjLi45ODkzZmQzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYwpAQCAtNjQsNyArNjQsNyBAQAogCiB1bnNpZ25lZCBjaGFyICogX19pbml0IGhpZ2hsYW5kZXJfcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKLQlpZiAoKGN0cmxfaW53KDB4YTQwMDA3MDApICYgMHhmMDAwKSA9PSAweDIwMDApIHsKKwlpZiAoKF9fcmF3X3JlYWR3KDB4YTQwMDA3MDApICYgMHhmMDAwKSA9PSAweDIwMDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgcjc3ODBtcCBpbnRlcnJ1cHQgY29udHJvbGxlci5cbiIpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiAJCXJldHVybiBpcmwyaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYwppbmRleCBiNzIxZTg2Li4wODA1YjIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYwpAQCAtNTcsNyArNTcsNyBAQAogCiB1bnNpZ25lZCBjaGFyICogX19pbml0IGhpZ2hsYW5kZXJfcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKLQlpZiAoY3RybF9pbncoMHhhNTAwMDYwMCkpIHsKKwlpZiAoX19yYXdfcmVhZHcoMHhhNTAwMDYwMCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgcjc3ODBycCBpbnRlcnJ1cHQgY29udHJvbGxlci5cbiIpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiAJCXJldHVybiBpcmwyaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3Nzg1cnAuYwppbmRleCAzODExYjA2Li41NThiMjQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3Nzg1cnAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3Nzg1cnAuYwpAQCAtNjYsMjAgKzY2LDIwIEBACiAKIHVuc2lnbmVkIGNoYXIgKiBfX2luaXQgaGlnaGxhbmRlcl9wbGF0X2lycV9zZXR1cCh2b2lkKQogewotCWlmICgoY3RybF9pbncoMHhhNDAwMDE1OCkgJiAweGYwMDApICE9IDB4MTAwMCkKKwlpZiAoKF9fcmF3X3JlYWR3KDB4YTQwMDAxNTgpICYgMHhmMDAwKSAhPSAweDEwMDApCiAJCXJldHVybiBOVUxMOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgcjc3ODVycCBpbnRlcnJ1cHQgY29udHJvbGxlci5cbiIpOwogCi0JY3RybF9vdXR3KDB4MDAwMCwgUEFfSVJMU1NSMSk7CS8qIEZQR0EgSVJMU1NSMShDRl9DRCBjbGVhcikgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQQV9JUkxTU1IxKTsJLyogRlBHQSBJUkxTU1IxKENGX0NEIGNsZWFyKSAqLwogCiAJLyogU2V0dXAgdGhlIEZQR0EgSVJMICovCi0JY3RybF9vdXR3KDB4MDAwMCwgUEFfSVJMUFJBKTsJLyogRlBHQSBJUkxBICovCi0JY3RybF9vdXR3KDB4ZTU5OCwgUEFfSVJMUFJCKTsJLyogRlBHQSBJUkxCICovCi0JY3RybF9vdXR3KDB4NzA2MCwgUEFfSVJMUFJDKTsJLyogRlBHQSBJUkxDICovCi0JY3RybF9vdXR3KDB4MDAwMCwgUEFfSVJMUFJEKTsJLyogRlBHQSBJUkxEICovCi0JY3RybF9vdXR3KDB4NDMyMSwgUEFfSVJMUFJFKTsJLyogRlBHQSBJUkxFICovCi0JY3RybF9vdXR3KDB4ZGNiYSwgUEFfSVJMUFJGKTsJLyogRlBHQSBJUkxGICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUEFfSVJMUFJBKTsJLyogRlBHQSBJUkxBICovCisJX19yYXdfd3JpdGV3KDB4ZTU5OCwgUEFfSVJMUFJCKTsJLyogRlBHQSBJUkxCICovCisJX19yYXdfd3JpdGV3KDB4NzA2MCwgUEFfSVJMUFJDKTsJLyogRlBHQSBJUkxDICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUEFfSVJMUFJEKTsJLyogRlBHQSBJUkxEICovCisJX19yYXdfd3JpdGV3KDB4NDMyMSwgUEFfSVJMUFJFKTsJLyogRlBHQSBJUkxFICovCisJX19yYXdfd3JpdGV3KDB4ZGNiYSwgUEFfSVJMUFJGKTsJLyogRlBHQSBJUkxGICovCiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiAJcmV0dXJuIGlybDJpcnE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKaW5kZXggMzdiMWEyZS4uNTIyNzg2MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYwpAQCAtMjQsNyArMjQsNyBAQAogCXVuc2lnbmVkIGludCBsLCBtYXNrOwogCWludCByZXQgPSAwOwogCi0JbCA9IGN0cmxfaW53KFBBX0RCU1cpOworCWwgPSBfX3Jhd19yZWFkdyhQQV9EQlNXKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUncyBubyBzdGF0ZSBjaGFuZ2UgKi8KIAlpZiAocHN3LT5zdGF0ZSkgewpAQCAtNDUsNyArNDUsNyBAQAogb3V0OgogCS8qIENsZWFyIHRoZSBzd2l0Y2ggSVJRcyAqLwogCWwgfD0gKDB4NyA8PCAxMik7Ci0JY3RybF9vdXR3KGwsIFBBX0RCU1cpOworCV9fcmF3X3dyaXRldyhsLCBQQV9EQlNXKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKHJldCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCmluZGV4IGY2NjNjMTQuLmFmZmQ2NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCkBAIC0zMTEsMTMgKzMxMSwxMyBAQAogICovCiBzdGF0aWMgaW50IGl2ZHJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBBX0lWRFJDVEwpIHwgKDEgPDwgSVZEUl9DS19PTiksIFBBX0lWRFJDVEwpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQV9JVkRSQ1RMKSB8ICgxIDw8IElWRFJfQ0tfT04pLCBQQV9JVkRSQ1RMKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaXZkcl9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBBX0lWRFJDVEwpICYgfigxIDw8IElWRFJfQ0tfT04pLCBQQV9JVkRSQ1RMKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUEFfSVZEUkNUTCkgJiB+KDEgPDwgSVZEUl9DS19PTiksIFBBX0lWRFJDVEwpOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgaXZkcl9jbGtfb3BzID0gewpAQCAtMzM3LDcgKzMzNyw3IEBACiBzdGF0aWMgdm9pZCByNzc4MHJwX3Bvd2VyX29mZih2b2lkKQogewogCWlmIChtYWNoX2lzX3I3NzgwbXAoKSB8fCBtYWNoX2lzX3I3Nzg1cnAoKSkKLQkJY3RybF9vdXR3KDB4MDAwMSwgUEFfUE9GRik7CisJCV9fcmF3X3dyaXRldygweDAwMDEsIFBBX1BPRkYpOwogfQogCiAvKgpAQCAtMzQ1LDcgKzM0NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBoaWdobGFuZGVyX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JdTE2IHZlciA9IGN0cmxfaW53KFBBX1ZFUlJFRyk7CisJdTE2IHZlciA9IF9fcmF3X3JlYWR3KFBBX1ZFUlJFRyk7CiAJaW50IGk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFNvbHV0aW9ucyBIaWdobGFuZGVyICVzIHN1cHBvcnQuXG4iLApAQCAtMzcwLDEyICszNzAsMTIgQEAKIAkJY2xrX2VuYWJsZShjbGspOwogCX0KIAotCWN0cmxfb3V0dygweDAwMDAsIFBBX09CTEVEKTsJLyogQ2xlYXIgTEVELiAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBBX09CTEVEKTsJLyogQ2xlYXIgTEVELiAqLwogCiAJaWYgKG1hY2hfaXNfcjc3ODBycCgpKQotCQljdHJsX291dHcoMHgwMDAxLCBQQV9TRFBPVyk7CS8qIFNEIFBvd2VyIE9OICovCisJCV9fcmF3X3dyaXRldygweDAwMDEsIFBBX1NEUE9XKTsJLyogU0QgUG93ZXIgT04gKi8KIAotCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9JVkRSQ1RMKSB8IDB4MDEsIFBBX0lWRFJDVEwpOwkvKiBTaTEzMTEyICovCisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBX0lWRFJDVEwpIHwgMHgwMSwgUEFfSVZEUkNUTCk7CS8qIFNpMTMxMTIgKi8KIAogCXBtX3Bvd2VyX29mZiA9IHI3NzgwcnBfcG93ZXJfb2ZmOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKaW5kZXggZTg1MjEyZi4uYjQ5NTM1YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCkBAIC01Myw3ICs1Myw3IEBACiAJaW5mby0+YWNfbGluZV9zdGF0dXMgPSAoYmF0dGVyeSA+IEhQNjgwX0JBVFRFUllfQUNfT04pID8KIAkJCSBBUE1fQUNfT05MSU5FIDogQVBNX0FDX09GRkxJTkU7CiAKLQlwZ2RyID0gY3RybF9pbmIoUEdEUik7CisJcGdkciA9IF9fcmF3X3JlYWRiKFBHRFIpOwogCWlmIChwZ2RyICYgUEdEUl9NQUlOX0JBVFRFUllfT1VUKSB7CiAJCWluZm8tPmJhdHRlcnlfc3RhdHVzCT0gQVBNX0JBVFRFUllfU1RBVFVTX05PVF9QUkVTRU5UOwogCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcJPSAweDgwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCmluZGV4IGQ5MzZjMWEuLjQ0OTlhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKQEAgLTUzLDE3ICs1MywxNyBAQAogCXNoX3dkdF93cml0ZV9jbnQoMCk7CiAKIAkvKiBkaXNhYmxlIFBMTDEgKi8KLQlmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlmcnFjciAmPSB+KEZSUUNSX1BMTEVOIHwgRlJRQ1JfUFNUQlkpOwotCWN0cmxfb3V0dyhmcnFjciwgRlJRQ1IpOworCV9fcmF3X3dyaXRldyhmcnFjciwgRlJRQ1IpOwogCiAJLyogZW5hYmxlIHN0YW5kYnkgKi8KLQlzdGJjciA9IGN0cmxfaW5iKFNUQkNSKTsKLQljdHJsX291dGIoc3RiY3IgfCBTVEJDUl9TVEJZIHwgU1RCQ1JfTVNUUDIsIFNUQkNSKTsKKwlzdGJjciA9IF9fcmF3X3JlYWRiKFNUQkNSKTsKKwlfX3Jhd193cml0ZWIoc3RiY3IgfCBTVEJDUl9TVEJZIHwgU1RCQ1JfTVNUUDIsIFNUQkNSKTsKIAogCS8qIHNldCBzZWxmLXJlZnJlc2ggKi8KLQltY3IgPSBjdHJsX2ludyhNQ1IpOwotCWN0cmxfb3V0dyhtY3IgJiB+TUNSX1JGU0gsIE1DUik7CisJbWNyID0gX19yYXdfcmVhZHcoTUNSKTsKKwlfX3Jhd193cml0ZXcobWNyICYgfk1DUl9SRlNILCBNQ1IpOwogCiAJLyogc2V0IGludGVycnVwdCBoYW5kbGVyICovCiAJYXNtIHZvbGF0aWxlKCJzdGMgdmJyLCAlMCIgOiAiPXIiICh2YnJfb2xkKSk7CkBAIC03Myw4ICs3Myw4IEBACiAJICAgICAgICZ3YWtldXBfc3RhcnQsICZ3YWtldXBfZW5kIC0gJndha2V1cF9zdGFydCk7CiAJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOiA6ICJyIiAodmJyX25ldykpOwogCi0JY3RybF9vdXR3KDAsIFJUQ05UKTsKLQljdHJsX291dHcobWNyIHwgTUNSX1JGU0ggfCBNQ1JfUk1PREUsIE1DUik7CisJX19yYXdfd3JpdGV3KDAsIFJUQ05UKTsKKwlfX3Jhd193cml0ZXcobWNyIHwgTUNSX1JGU0ggfCBNQ1JfUk1PREUsIE1DUik7CiAKIAljcHVfc2xlZXAoKTsKIApAQCAtODMsMTQgKzgzLDE0IEBACiAJZnJlZV9wYWdlKHZicl9uZXcpOwogCiAJLyogZW5hYmxlIFBMTDEgKi8KLQlmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlmcnFjciB8PSBGUlFDUl9QU1RCWTsKLQljdHJsX291dHcoZnJxY3IsIEZSUUNSKTsKKwlfX3Jhd193cml0ZXcoZnJxY3IsIEZSUUNSKTsKIAl1ZGVsYXkoNTApOwogCWZycWNyIHw9IEZSUUNSX1BMTEVOOwotCWN0cmxfb3V0dyhmcnFjciwgRlJRQ1IpOworCV9fcmF3X3dyaXRldyhmcnFjciwgRlJRQ1IpOwogCi0JY3RybF9vdXRiKHN0YmNyLCBTVEJDUik7CisJX19yYXdfd3JpdGViKHN0YmNyLCBTVEJDUik7CiAKIAljbGVhcl9ibF9iaXQoKTsKIH0KQEAgLTExNSwyMSArMTE1LDIxIEBACiAJb3V0dyhoZDY0NDYxX3N0YmNyLCBIRDY0NDYxX1NUQkNSKTsKICNlbmRpZgogCi0JY3RybF9vdXRiKDB4MWYsIERBQ1IpOworCV9fcmF3X3dyaXRlYigweDFmLCBEQUNSKTsKIAotCXN0YmNyID0gY3RybF9pbmIoU1RCQ1IpOwotCWN0cmxfb3V0YigweDAxLCBTVEJDUik7CisJc3RiY3IgPSBfX3Jhd19yZWFkYihTVEJDUik7CisJX19yYXdfd3JpdGViKDB4MDEsIFNUQkNSKTsKIAotCXN0YmNyMiA9IGN0cmxfaW5iKFNUQkNSMik7Ci0JY3RybF9vdXRiKDB4N2YgLCBTVEJDUjIpOworCXN0YmNyMiA9IF9fcmF3X3JlYWRiKFNUQkNSMik7CisJX19yYXdfd3JpdGViKDB4N2YgLCBTVEJDUjIpOwogCiAJb3V0dygweGYwN2YsIEhENjQ0NjFfU0NQVUNSKTsKIAogCXBtX2VudGVyKCk7CiAKIAlvdXR3KDAsIEhENjQ0NjFfU0NQVUNSKTsKLQljdHJsX291dGIoc3RiY3IsIFNUQkNSKTsKLQljdHJsX291dGIoc3RiY3IyLCBTVEJDUjIpOworCV9fcmF3X3dyaXRlYihzdGJjciwgU1RCQ1IpOworCV9fcmF3X3dyaXRlYihzdGJjcjIsIFNUQkNSMik7CiAKICNpZmRlZiBDT05GSUdfSEQ2NDQ2MV9FTkFCTEVSCiAJaGQ2NDQ2MV9zdGJjciA9IGludyhIRDY0NDYxX1NUQkNSKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYwppbmRleCBlNmRkNWU5Li44YzlhZGQ1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCkBAIC0xNDksMTkgKzE0OSwxOSBAQAogCiAJc2hfZGFjX291dHB1dCgwLCBEQUNfU1BFQUtFUl9WT0xVTUUpOwogCXNoX2RhY19kaXNhYmxlKERBQ19TUEVBS0VSX1ZPTFVNRSk7Ci0JdjggPSBjdHJsX2luYihEQUNSKTsKKwl2OCA9IF9fcmF3X3JlYWRiKERBQ1IpOwogCXY4ICY9IH5EQUNSX0RBRTsKLQljdHJsX291dGIodjgsREFDUik7CisJX19yYXdfd3JpdGViKHY4LERBQ1IpOwogCi0JdjggPSBjdHJsX2luYihTQ1BEUik7CisJdjggPSBfX3Jhd19yZWFkYihTQ1BEUik7CiAJdjggfD0gU0NQRFJfVFNfU0NBTl9YIHwgU0NQRFJfVFNfU0NBTl9ZOwogCXY4ICY9IH5TQ1BEUl9UU19TQ0FOX0VOQUJMRTsKLQljdHJsX291dGIodjgsIFNDUERSKTsKKwlfX3Jhd193cml0ZWIodjgsIFNDUERSKTsKIAotCXYgPSBjdHJsX2ludyhTQ1BDUik7CisJdiA9IF9fcmF3X3JlYWR3KFNDUENSKTsKIAl2ICY9IH5TQ1BDUl9UU19NQVNLOwogCXYgfD0gU0NQQ1JfVFNfRU5BQkxFOwotCWN0cmxfb3V0dyh2LCBTQ1BDUik7CisJX19yYXdfd3JpdGV3KHYsIFNDUENSKTsKIH0KIGRldmljZV9pbml0Y2FsbChocDZ4eF9kZXZpY2VzX3NldHVwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWtmcjJyMDkvc2V0dXAuYwppbmRleCA1ZDdiNWQ5Li5iMmNkMGVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWtmcjJyMDkvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWtmcjJyMDkvc2V0dXAuYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJCSAqIHVzZSAxLjggViBmb3IgVmNjUV9WSU8KIAkJICogdXNlIDIuODVWIGZvciBWY2NRX1NSCiAJCSAqLwotCQljdHJsX291dHcoKGN0cmxfaW53KERSVkNSQikgJiB+MHgwMDAzKSB8IDB4MDAwMSwgRFJWQ1JCKTsKKwkJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhEUlZDUkIpICYgfjB4MDAwMykgfCAweDAwMDEsIERSVkNSQik7CiAKIAkJLyogcmVzZXQgY2xlYXIgKi8KIAkJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fUFRCNCwgTlVMTCk7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQgID0gMTAxLAorCQkuc3RhcnQgID0gMTAwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC00OTIsMTMgKzQ5MiwxMyBAQAogCWlmIChrZnIycjA5X3VzYjBfZ2FkZ2V0X2kyY19zZXR1cCgpICE9IDApCiAJCXJldHVybiAtRU5PREVWOyAvKiB1bmFibGUgdG8gY29uZmlndXJlIHVzaW5nIGkyYyAqLwogCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX01TRUxDUkIpICYgfjB4YzAwMCkgfCAweDgwMDAsIFBPUlRfTVNFTENSQik7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX01TRUxDUkIpICYgfjB4YzAwMCkgfCAweDgwMDAsIFBPUlRfTVNFTENSQik7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUERTVEFUVVMsIE5VTEwpOyAvKiBSLXN0YW5kYnkgZGlzYWJsZXMgVVNCIGNsb2NrICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRWNiwgTlVMTCk7IC8qIFVTQkNMS19PTiAqLwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUVjYsIDEpOyAvKiBVU0JDTEtfT04gPSBIICovCiAJbXNsZWVwKDIwKTsgLyogd2FpdCAyMG1zIHRvIGxldCB0aGUgY2xvY2sgc2V0dGxlICovCiAJY2xrX2VuYWJsZShjbGtfZ2V0KE5VTEwsICJ1c2IwIikpOwotCWN0cmxfb3V0dygweDA2MDAsIDB4YTQwNTAxZDQpOworCV9fcmF3X3dyaXRldygweDA2MDAsIDB4YTQwNTAxZDQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjYsMTIgKzUyNiwxMiBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BURzMsIDEpOyAvKiBIUE9OX09OID0gSCAqLwogCiAJLyogc2V0dXAgTk9SIGZsYXNoIGF0IENTMCAqLwotCWN0cmxfb3V0bCgweDM2ZGIwNDAwLCBCU0NfQ1MwQkNSKTsKLQljdHJsX291dGwoMHgwMDAwMDUwMCwgQlNDX0NTMFdDUik7CisJX19yYXdfd3JpdGVsKDB4MzZkYjA0MDAsIEJTQ19DUzBCQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMDAwNTAwLCBCU0NfQ1MwV0NSKTsKIAogCS8qIHNldHVwIE5BTkQgZmxhc2ggYXQgQ1M0ICovCi0JY3RybF9vdXRsKDB4MzZkYjA0MDAsIEJTQ19DUzRCQ1IpOwotCWN0cmxfb3V0bCgweDAwMDAwNTAwLCBCU0NfQ1M0V0NSKTsKKwlfX3Jhd193cml0ZWwoMHgzNmRiMDQwMCwgQlNDX0NTNEJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDA1MDAsIEJTQ19DUzRXQ1IpOwogCiAJLyogc2V0dXAgS0VZU0MgcGlucyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDAsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCmluZGV4IDUyODAxMzEuLjAxZTZhYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKQEAgLTc2LDM5ICs3NiwzOSBAQAogCQlicmVhazsKIAogCWNhc2UgR0lPRFJWX0lPQ1NHSU9EQVRBMToJLyogd3JpdGUgYnl0ZSAqLwotCQljdHJsX291dGIoKHVuc2lnbmVkIGNoYXIpKDB4MGZmICYgZGF0YSksIGFkZHIpOworCQlfX3Jhd193cml0ZWIoKHVuc2lnbmVkIGNoYXIpKDB4MGZmICYgZGF0YSksIGFkZHIpOwogCQlicmVhazsKIAogCWNhc2UgR0lPRFJWX0lPQ1NHSU9EQVRBMjoJLyogd3JpdGUgd29yZCAqLwogCQlpZiAoYWRkciAmIDB4MDEpIHsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCWN0cmxfb3V0dygodW5zaWduZWQgc2hvcnQgaW50KSgweDBmZmZmICYgZGF0YSksIGFkZHIpOworCQlfX3Jhd193cml0ZXcoKHVuc2lnbmVkIHNob3J0IGludCkoMHgwZmZmZiAmIGRhdGEpLCBhZGRyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEdJT0RSVl9JT0NTR0lPREFUQTQ6CS8qIHdyaXRlIGxvbmcgKi8KIAkJaWYgKGFkZHIgJiAweDAzKSB7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJCV9fcmF3X3dyaXRlbChkYXRhLCBhZGRyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEdJT0RSVl9JT0NHR0lPREFUQTE6CS8qIHJlYWQgYnl0ZSAqLwotCQlkYXRhID0gY3RybF9pbmIoYWRkcik7CisJCWRhdGEgPSBfX3Jhd19yZWFkYihhZGRyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEdJT0RSVl9JT0NHR0lPREFUQTI6CS8qIHJlYWQgd29yZCAqLwogCQlpZiAoYWRkciAmIDB4MDEpIHsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCWRhdGEgPSBjdHJsX2ludyhhZGRyKTsKKwkJZGF0YSA9IF9fcmF3X3JlYWR3KGFkZHIpOwogCQlicmVhazsKIAogCWNhc2UgR0lPRFJWX0lPQ0dHSU9EQVRBNDoJLyogcmVhZCBsb25nICovCiAJCWlmIChhZGRyICYgMHgwMykgewogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQlkYXRhID0gX19yYXdfcmVhZGwoYWRkcik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2lycS5jCmluZGV4IDdiMjg0Y2QuLjk2ZjM4YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svaXJxLmMKQEAgLTIyLDE0ICsyMiwxNCBAQAogewogCXVuc2lnbmVkIGNoYXIgbWFzayA9IDB4ZmYgXiAoMHgwMSA8PCAoaXJxIC0gNSkpOwogCi0JY3RybF9vdXRiKGN0cmxfaW5iKFBBX0lNQVNLKSAmIG1hc2ssIFBBX0lNQVNLKTsKKwlfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIoUEFfSU1BU0spICYgbWFzaywgUEFfSU1BU0spOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfbGFuZGlza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBjaGFyIHZhbHVlID0gKDB4MDEgPDwgKGlycSAtIDUpKTsKIAotCWN0cmxfb3V0YihjdHJsX2luYihQQV9JTUFTSykgfCB2YWx1ZSwgUEFfSU1BU0spOworCV9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihQQV9JTUFTSykgfCB2YWx1ZSwgUEFfSU1BU0spOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGxhbmRpc2tfaXJxX2NoaXAgX19yZWFkX21vc3RseSA9IHsKQEAgLTUyLDUgKzUyLDUgQEAKIAkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CiAJCWVuYWJsZV9sYW5kaXNrX2lycShpKTsKIAl9Ci0JY3RybF9vdXRiKDB4MDAsIFBBX1BXUklOVF9DTFIpOworCV9fcmF3X3dyaXRlYigweDAwLCBQQV9QV1JJTlRfQ0xSKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9wc3cuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9wc3cuYwppbmRleCBlNmIwZWZhLi5iZWY4MzUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svcHN3LmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3Bzdy5jCkBAIC0yNSw3ICsyNSw3IEBACiAJdW5zaWduZWQgaW50IHN3X3ZhbHVlOwogCWludCByZXQgPSAwOwogCi0Jc3dfdmFsdWUgPSAoMHgwZmYgJiAofmN0cmxfaW5iKFBBX1NUQVRVUykpKTsKKwlzd192YWx1ZSA9ICgweDBmZiAmICh+X19yYXdfcmVhZGIoUEFfU1RBVFVTKSkpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSdzIG5vIHN0YXRlIGNoYW5nZSAqLwogCWlmIChwc3ctPnN0YXRlKSB7CkBAIC00Miw3ICs0Miw3IEBACiAKIG91dDoKIAkvKiBDbGVhciB0aGUgc3dpdGNoIElSUXMgKi8KLQljdHJsX291dGIoMHgwMCwgUEFfUFdSSU5UX0NMUik7CisJX19yYXdfd3JpdGViKDB4MDAsIFBBX1BXUklOVF9DTFIpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMKaW5kZXggZGIyMmVhMi4uNTAzMzdhY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9zZXR1cC5jCkBAIC0yNSw3ICsyNSw3IEBACiAKIHN0YXRpYyB2b2lkIGxhbmRpc2tfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0gICAgICAgIGN0cmxfb3V0YigweDAxLCBQQV9TSFVURE9XTik7CisgICAgICAgIF9fcmF3X3dyaXRlYigweDAxLCBQQV9TSFVURE9XTik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2ZfaWRlX3Jlc291cmNlc1szXTsKQEAgLTYzLDcgKzYzLDcgQEAKIAkvKiBvcGVuIEkvTyBhcmVhIHdpbmRvdyAqLwogCXBhZGRyYmFzZSA9IHZpcnRfdG9fcGh5cygodm9pZCAqKVBBX0FSRUE1X0lPKTsKIAlwcm90ID0gUEFHRV9LRVJORUxfUENDKDEsIF9QQUdFX1BDQ19JTzE2KTsKLQljZl9pZGVfYmFzZSA9IHAzX2lvcmVtYXAocGFkZHJiYXNlLCBQQUdFX1NJWkUsIHByb3QucGdwcm90KTsKKwljZl9pZGVfYmFzZSA9IGlvcmVtYXBfcHJvdChwYWRkcmJhc2UsIFBBR0VfU0laRSwgcGdwcm90X3ZhbChwcm90KSk7CiAJaWYgKCFjZl9pZGVfYmFzZSkgewogCQlwcmludGsoImFsbG9jYXRlX2NmX2FyZWEgOiBjYW4ndCBvcGVuIENGIEkvTyB3aW5kb3chXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC04OCw3ICs4OCw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbGFuZGlza19zZXR1cChjaGFyICoqY21kbGluZV9wKQogewogICAgICAgICAvKiBMRUQgT04gKi8KLQljdHJsX291dGIoY3RybF9pbmIoUEFfTEVEKSB8IDB4MDMsIFBBX0xFRCk7CisJX19yYXdfd3JpdGViKF9fcmF3X3JlYWRiKFBBX0xFRCkgfCAweDAzLCBQQV9MRUQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiSS1PIERBVEEgREVWSUNFLCBJTkMuIFwiTEFORElTSyBTZXJpZXNcIiBzdXBwb3J0LlxuIik7CiAJcG1fcG93ZXJfb2ZmID0gbGFuZGlza19wb3dlcl9vZmY7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCmluZGV4IDJiMGI1ODEuLjc5YjRlMGQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvc2V0dXAuYwpAQCAtNTYsOCArNTYsOCBAQAogCS8qIG9wZW4gSS9PIGFyZWEgd2luZG93ICovCiAJcGFkZHJiYXNlID0gdmlydF90b19waHlzKCh2b2lkKilQQV9BUkVBNV9JTyk7CiAJcHNpemUgPSBQQUdFX1NJWkU7Ci0JcHJvdCA9IFBBR0VfS0VSTkVMX1BDQyggMSAsIF9QQUdFX1BDQ19JTzE2KTsKLQljZjBfaW9fYmFzZSA9ICh1MzIpcDNfaW9yZW1hcChwYWRkcmJhc2UsIHBzaXplLCBwcm90LnBncHJvdCk7CisJcHJvdCA9IFBBR0VfS0VSTkVMX1BDQygxLCBfUEFHRV9QQ0NfSU8xNik7CisJY2YwX2lvX2Jhc2UgPSAodTMyKWlvcmVtYXBfcHJvdChwYWRkcmJhc2UsIHBzaXplLCBwZ3Byb3RfdmFsKHByb3QpKTsKIAlpZiAoIWNmMF9pb19iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgOiBjYW4ndCBvcGVuIENGIEkvTyB3aW5kb3chXG4iICwgX19mdW5jX18gKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKaW5kZXggNTJkZDc0OC4uMjk2MGM2NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYwpAQCAtMTQxLDEwICsxNDEsMTAgQEAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCiAJLyogU3lzdGVtIGJvYXJkIHByZXNlbnQsIGp1c3QgbWFrZSBhIGR1bW15IFNSQU0gYWNjZXNzLiAgKENTMCB3aWxsIGJlCiAJICAgbWFwcGVkIHRvIFBDSSBtZW1vcnksIHByb2JhYmx5IGdvb2QgdG8gYXZvaWQgaXQuKSAqLwotCWN0cmxfaW53KDB4YTY4MDAwMDApOworCV9fcmF3X3JlYWR3KDB4YTY4MDAwMDApOwogI2Vsc2UKIAkvKiBDUzAgd2lsbCBiZSBtYXBwZWQgdG8gZmxhc2gsIFJPTSBldGMgc28gc2FmZSB0byBhY2Nlc3MgaXQuICovCi0JY3RybF9pbncoMHhhMDAwMDAwMCk7CisJX19yYXdfcmVhZHcoMHhhMDAwMDAwMCk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKaW5kZXggYjU1MTk2My4uYTI2ZDE2NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCkBAIC04OCw3ICs4OCw3IEBACiAJZnBnYUlycSA9IGZwZ2FJcnFUYWJsZVtpcnFdLmZwZ2FJcnE7CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIEZQR0EgSU5UQyByZWdpc3RlciAqLwotCWN0cmxfb3V0bChNSUNST0RFVl9GUEdBX0lOVENfTUFTSyhmcGdhSXJxKSwgTUlDUk9ERVZfRlBHQV9JTlREU0JfUkVHKTsKKwlfX3Jhd193cml0ZWwoTUlDUk9ERVZfRlBHQV9JTlRDX01BU0soZnBnYUlycSksIE1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9taWNyb2Rldl9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTEwNywxMyArMTA3LDEzIEBACiAJcHJpb3JpdHlSZWcgPSBNSUNST0RFVl9GUEdBX0lOVFBSSV9SRUcoZnBnYUlycSk7CiAKIAkvKiBzZXQgcHJpb3JpdHkgZm9yIHRoZSBpbnRlcnJ1cHQgKi8KLQlwcmlvcml0aWVzID0gY3RybF9pbmwocHJpb3JpdHlSZWcpOworCXByaW9yaXRpZXMgPSBfX3Jhd19yZWFkbChwcmlvcml0eVJlZyk7CiAJcHJpb3JpdGllcyAmPSB+TUlDUk9ERVZfRlBHQV9JTlRQUklfTUFTSyhmcGdhSXJxKTsKIAlwcmlvcml0aWVzIHw9IE1JQ1JPREVWX0ZQR0FfSU5UUFJJX0xFVkVMKGZwZ2FJcnEsIHByaSk7Ci0JY3RybF9vdXRsKHByaW9yaXRpZXMsIHByaW9yaXR5UmVnKTsKKwlfX3Jhd193cml0ZWwocHJpb3JpdGllcywgcHJpb3JpdHlSZWcpOwogCiAJLyogZW5hYmxlIGludGVycnVwdHMgb24gdGhlIEZQR0EgSU5UQyByZWdpc3RlciAqLwotCWN0cmxfb3V0bChNSUNST0RFVl9GUEdBX0lOVENfTUFTSyhmcGdhSXJxKSwgTUlDUk9ERVZfRlBHQV9JTlRFTkJfUkVHKTsKKwlfX3Jhd193cml0ZWwoTUlDUk9ERVZfRlBHQV9JTlRDX01BU0soZnBnYUlycSksIE1JQ1JPREVWX0ZQR0FfSU5URU5CX1JFRyk7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZGVzaXJlZCBpcnEgaGFuZGxlciB0byBiZSBhIE1pY3JvRGV2IHR5cGUgKi8KQEAgLTEzNCw3ICsxMzQsNyBAQAogCWludCBpOwogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBGUEdBIElOVEMgcmVnaXN0ZXIgKi8KLQljdHJsX291dGwofjB1bCwgTUlDUk9ERVZfRlBHQV9JTlREU0JfUkVHKTsKKwlfX3Jhd193cml0ZWwofjB1bCwgTUlDUk9ERVZfRlBHQV9JTlREU0JfUkVHKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fRVhURVJOQUxfSVJRUzsgaSsrKQogCQltYWtlX21pY3JvZGV2X2lycShpKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCA1MDdjNzdiLi5iZTMwMGFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDEwMSwKKwkJLnN0YXJ0CT0gMTAwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC00MzEsNyArNDMxLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvIG92NzcyNV9pbmZvID0gewotCS5idXN3aWR0aAk9IFNPQ0FNX0RBVEFXSURUSF84LAorCS5mbGFncwkJPSBPVjc3MlhfRkxBR184QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgb3Y3NzI1X2xpbmsgPSB7CkBAIC00OTYsMjggKzQ5NiwxNiBAQAogCQkJCQkmbWlnb3Jfc2RyYW1fZW50ZXJfZW5kLAogCQkJCQkmbWlnb3Jfc2RyYW1fbGVhdmVfc3RhcnQsCiAJCQkJCSZtaWdvcl9zZHJhbV9sZWF2ZV9lbmQpOwotI2lmZGVmIENPTkZJR19QTQogCS8qIExldCBEMTEgTEVEIHNob3cgU1RBVFVTMCAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NUQVRVUzAsIE5VTEwpOwogCiAJLyogTGl0IEQxMiBMRUQgc2hvdyBQRFNUQVRVUyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BEU1RBVFVTLCBOVUxMKTsKLSNlbHNlCi0JLyogTGl0IEQxMSBMRUQgKi8KLQlncGlvX3JlcXVlc3QoR1BJT19QVEo3LCBOVUxMKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo3LCAxKTsKLQlncGlvX2V4cG9ydChHUElPX1BUSjcsIDApOwotCi0JLyogTGl0IEQxMiBMRUQgKi8KLQlncGlvX3JlcXVlc3QoR1BJT19QVEo1LCBOVUxMKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo1LCAxKTsKLQlncGlvX2V4cG9ydChHUElPX1BUSjUsIDApOwotI2VuZGlmCiAKIAkvKiBTTUM5MUMxMTEgLSBFbmFibGUgSVJRMCwgU2V0dXAgQ1M0IGZvciAxNi1iaXQgZmFzdCBhY2Nlc3MgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUlEwLCBOVUxMKTsKLQljdHJsX291dGwoMHgwMDAwMzQwMCwgQlNDX0NTNEJDUik7Ci0JY3RybF9vdXRsKDB4MDAxMTAwODAsIEJTQ19DUzRXQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMDAzNDAwLCBCU0NfQ1M0QkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDExMDA4MCwgQlNDX0NTNFdDUik7CiAKIAkvKiBLRVlTQyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDAsIE5VTEwpOwpAQCAtNTMzLDcgKzUyMSw3IEBACiAKIAkvKiBOQU5EIEZsYXNoICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ1M2QV9DRTJCLCBOVUxMKTsKLQljdHJsX291dGwoKGN0cmxfaW5sKEJTQ19DUzZBQkNSKSAmIH4weDA2MDApIHwgMHgwMjAwLCBCU0NfQ1M2QUJDUik7CisJX19yYXdfd3JpdGVsKChfX3Jhd19yZWFkbChCU0NfQ1M2QUJDUikgJiB+MHgwNjAwKSB8IDB4MDIwMCwgQlNDX0NTNkFCQ1IpOwogCWdwaW9fcmVxdWVzdChHUElPX1BUQTEsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRBMSk7CiAKQEAgLTYyNyw3ICs2MTUsNyBAQAogI2Vsc2UKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFQwLCAxKTsKICNlbmRpZgotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpIHwgMHgyMDAwLCBQT1JUX01TRUxDUkIpOyAvKiBEMTUtPkQ4ICovCisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfTVNFTENSQikgfCAweDIwMDAsIFBPUlRfTVNFTENSQik7IC8qIEQxNS0+RDggKi8KIAogCXBsYXRmb3JtX3Jlc291cmNlX3NldHVwX21lbW9yeSgmbWlnb3JfY2V1X2RldmljZSwgImNldSIsIDQgPDwgMjApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCmluZGV4IDc4ZDdiMjcuLjU3NGYwMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIHsKIAlzdHJ1Y3QgaW50Y19kZXNjICpkOwogCi0Jc3dpdGNoIChjdHJsX2ludyhQQV9WRVJSRUcpICYgMHhmMCkgeworCXN3aXRjaCAoX19yYXdfcmVhZHcoUEFfVkVSUkVHKSAmIDB4ZjApIHsKICNpZmRlZiBDT05GSUdfUlRTNzc1MVIyRF9QTFVTCiAJY2FzZSAweDEwOgogCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBSMkQtUExVUyBpbnRlcnJ1cHQgY29udHJvbGxlci5cbiIpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAjZW5kaWYKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9JTkZPICJVbmtub3duIFIyRCBpbnRlcnJ1cHQgY29udHJvbGxlciAweCUwNHhcbiIsCi0JCSAgICAgICBjdHJsX2ludyhQQV9WRVJSRUcpKTsKKwkJICAgICAgIF9fcmF3X3JlYWR3KFBBX1ZFUlJFRykpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYwppbmRleCBhNjI1ZWNiLi5iODRkZjZhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMKQEAgLTcwLDcgKzcwLDcgQEAKIHN0YXRpYyB2b2lkIHIyZF9jaGlwX3NlbGVjdChzdHJ1Y3Qgc2hfc3BpX2luZm8gKnNwaSwgaW50IGNzLCBpbnQgc3RhdGUpCiB7CiAJQlVHX09OKGNzICE9IDApOyAgLyogU2luZ2xlIEVwc29uIFJUQy05NzAxSkUgYXR0YWNoZWQgb24gQ1MwICovCi0JY3RybF9vdXR3KHN0YXRlID09IEJJVEJBTkdfQ1NfQUNUSVZFLCBQQV9SVENDRSk7CisJX19yYXdfd3JpdGV3KHN0YXRlID09IEJJVEJBTkdfQ1NfQUNUSVZFLCBQQV9SVENDRSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfc3BpX2luZm8gc3BpX2luZm8gPSB7CkBAIC0yNjIsNyArMjYyLDcgQEAKIAogc3RhdGljIHZvaWQgcnRzNzc1MXIyZF9wb3dlcl9vZmYodm9pZCkKIHsKLQljdHJsX291dHcoMHgwMDAxLCBQQV9QT1dPRkYpOworCV9fcmF3X3dyaXRldygweDAwMDEsIFBBX1BPV09GRik7CiB9CiAKIC8qCkBAIC0yNzEsMTQgKzI3MSwxNCBAQAogc3RhdGljIHZvaWQgX19pbml0IHJ0czc3NTFyMmRfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKIAl2b2lkIF9faW9tZW0gKnNtNTAxX3JlZzsKLQl1MTYgdmVyID0gY3RybF9pbncoUEFfVkVSUkVHKTsKKwl1MTYgdmVyID0gX19yYXdfcmVhZHcoUEFfVkVSUkVHKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlJlbmVzYXMgVGVjaG5vbG9neSBTYWxlcyBSVFM3NzUxUjJEIHN1cHBvcnQuXG4iKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkZQR0EgdmVyc2lvbjolZCAocmV2aXNpb246JWQpXG4iLAogCQkJCQkodmVyID4+IDQpICYgMHhmLCB2ZXIgJiAweGYpOwogCi0JY3RybF9vdXR3KDB4MDAwMCwgUEFfT1VUUE9SVCk7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUEFfT1VUUE9SVCk7CiAJcG1fcG93ZXJfb2ZmID0gcnRzNzc1MXIyZF9wb3dlcl9vZmY7CiAKIAkvKiBzbTUwMSBkcmFtIGNvbmZpZ3VyYXRpb246CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCmluZGV4IGMzNzYxN2UuLjRmYTA4YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCkBAIC05Niw3ICs5Niw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUlhEMCwgTlVMTCk7CiAKIAkvKiBTZXR1cCBMQU45MTE4OiBDUzEgaW4gMTYtYml0IEJpZyBFbmRpYW4gTW9kZSwgSVJRMCBhdCBQb3J0IEIgKi8KLQljdHJsX291dGwoMHgzNmRiMDQwMCwgMHhmZmZjMDAwOCk7IC8qIENTMUJDUiAqLworCV9fcmF3X3dyaXRlbCgweDM2ZGIwNDAwLCAweGZmZmMwMDA4KTsgLyogQ1MxQkNSICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJRMF9QQiwgTlVMTCk7CiAKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocnNrNzIwM19kZXZpY2VzLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jCmluZGV4IDg1NTU1ODEuLmU1Zjc1NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMKQEAgLTM3LDkgKzM3LDkgQEAKIHsKIAlwcmludGsoS0VSTl9JTkZPICJVc2luZyBTREs3NzgwIGludGVycnVwdCBjb250cm9sbGVyLlxuIik7CiAKLQljdHJsX291dHcoMHhGRkZGLCBGUEdBX0lSUTBNUik7CisJX19yYXdfd3JpdGV3KDB4RkZGRiwgRlBHQV9JUlEwTVIpOwogCS8qIFNldHVwIElSTCAwLTMgKi8KLQljdHJsX291dHcoMHgwMDAzLCBGUEdBX0lNU1IpOworCV9fcmF3X3dyaXRldygweDAwMDMsIEZQR0FfSU1TUik7CiAJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUkwzMjEwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmZnBnYV9pbnRjX2Rlc2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvc2V0dXAuYwppbmRleCBhYWQ5NGE3Li40ZGEzOGRiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvc2V0dXAuYwpAQCAtMjAsMjcgKzIwLDE4IEBACiAKICNkZWZpbmUgR1BJT19QRUNSICAgICAgICAweEZGRUEwMDA4CiAKLS8vKiBIZWFydGJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IFBBX0xFRCwKLQkJLmVuZCAgICA9IFBBX0xFRCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCisvKiBIZWFydGJlYXQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydCAgPSBQQV9MRUQsCisJLmVuZCAgICA9IFBBX0xFRCwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUgICAgICAgICAgID0gImhlYXJ0YmVhdCIsCiAJLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gMSwKKwkucmVzb3VyY2UgICAgICAgPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogU01DOTF4ICovCkBAIC04Myw4ICs3NCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZGs3NzgwX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JdTE2IHZlciA9IGN0cmxfaW53KEZQR0FfRlBWRVJSKTsKLQl1MTYgZGF0ZVN0YW1wID0gY3RybF9pbncoRlBHQV9GUERBVEVSKTsKKwl1MTYgdmVyID0gX19yYXdfcmVhZHcoRlBHQV9GUFZFUlIpOworCXUxNiBkYXRlU3RhbXAgPSBfX3Jhd19yZWFkdyhGUEdBX0ZQREFURVIpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBUZWNobm9sb2d5IEV1cm9wZSBTREs3NzgwIHN1cHBvcnQuXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPICJCb2FyZCB2ZXJzaW9uOiAlZCAocmV2aXNpb24gJWQpLCAiCkBAIC05NCw3ICs4NSw3IEBACiAJCQkgZGF0ZVN0YW1wKTsKIAogCS8qIFNldHVwIHBpbiBtdXgnaW5nIGZvciBQQ0lDICovCi0JY3RybF9vdXR3KDB4MDAwMCwgR1BJT19QRUNSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBHUElPX1BFQ1IpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOWYxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkJOj0gc2V0dXAubyBmcGdhLm8gaXJxLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvZnBnYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNGVjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvZnBnYS5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBTREs3Nzg2IEZQR0EgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPG1hY2gvZnBnYS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjZGVmaW5lIEZQR0FfUkVHU19PRkZTRVQJMHgwM2ZmZjgwMAorI2RlZmluZSBGUEdBX1JFR1NfU0laRQkJMHg0OTAKKworLyoKKyAqIFRoZSBGUEdBIGNhbiBiZSBtYXBwZWQgaW4gYW55IG9mIHRoZSBnZW5lcmFsbHkgYXZhaWxhYmxlIGFyZWFzLAorICogc28gd2UgYXR0ZW1wdCB0byBzY2FuIGZvciBpdCB1c2luZyB0aGUgZml4ZWQgU1JTVFIgcmVhZCBtYWdpYy4KKyAqCisgKiBPbmNlIHRoZSBGUEdBIGlzIGxvY2F0ZWQsIHRoZSByZXN0IG9mIHRoZSBtYXBwaW5nIGRhdGEgZm9yIHRoZSBvdGhlcgorICogY29tcG9uZW50cyBjYW4gYmUgZGV0ZXJtaW5lZCBkeW5hbWljYWxseSBmcm9tIGl0cyBzZWN0aW9uIG1hcHBpbmcKKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgX19pb21lbSAqc2RrNzc4Nl9mcGdhX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhcmVhOworCXZvaWQgX19pb21lbSAqYmFzZTsKKworCS8qCisJICogSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgYXJlYXMgd2hlcmUgdGhlIEZQR0EgY291bGQgYmUgbWFwcGVkLgorCSAqIFRoZSBwb3NzaWJsZSByYW5nZSBpcyBhbnl3aGVyZSBmcm9tIGFyZWEgMCB0aHJvdWdoIDYsIGFyZWEgNworCSAqIGlzIHJlc2VydmVkLgorCSAqLworCWZvciAoYXJlYSA9IFBBX0FSRUEwOyBhcmVhIDwgUEFfQVJFQTc7IGFyZWEgKz0gU1pfNjRNKSB7CisJCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUoYXJlYSArIEZQR0FfUkVHU19PRkZTRVQsIEZQR0FfUkVHU19TSVpFKTsKKwkJaWYgKCFiYXNlKSB7CisJCQkvKiBGYWlsZWQgdG8gcmVtYXAgdGhpcyBhcmVhLCBtb3ZlIGFsb25nLiAqLworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaW9yZWFkMTYoYmFzZSArIFNSU1RSKSA9PSBTUlNUUl9NQUdJQykKKwkJCXJldHVybiBiYXNlOwkvKiBGb3VuZCBpdCEgKi8KKworCQlpb3VubWFwKGJhc2UpOworCX0KKworCXJldHVybiBOVUxMOworfQorCit2b2lkIF9faW9tZW0gKnNkazc3ODZfZnBnYV9iYXNlOworCit2b2lkIF9faW5pdCBzZGs3Nzg2X2ZwZ2FfaW5pdCh2b2lkKQoreworCXUxNiB2ZXJzaW9uLCBkYXRlOworCisJc2RrNzc4Nl9mcGdhX2Jhc2UgPSBzZGs3Nzg2X2ZwZ2FfcHJvYmUoKTsKKwlpZiAodW5saWtlbHkoIXNkazc3ODZfZnBnYV9iYXNlKSkgeworCQlwYW5pYygiRlBHQSBkZXRlY3Rpb24gZmFpbGVkLlxuIik7CisJCXJldHVybjsKKwl9CisKKwl2ZXJzaW9uID0gZnBnYV9yZWFkX3JlZyhGUEdBVlIpOworCWRhdGUgPSBmcGdhX3JlYWRfcmVnKEZQR0FEUik7CisKKwlwcl9pbmZvKCJcdEZQR0EgdmVyc2lvbjpcdCVkLiVkIChidWlsdCBvbiAlZC8lZC8lZClcbiIsCisJCWJjZDJiaW4odmVyc2lvbiA+PiA4KSAmIDB4ZiwgYmNkMmJpbih2ZXJzaW9uICYgMHhmKSwKKwkJKChkYXRlID4+IDEyKSAmIDB4ZikgKyAyMDAwLAorCQkoZGF0ZSA+PiA4KSAmIDB4ZiwgYmNkMmJpbihkYXRlICYgMHhmZikpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OTQzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvaXJxLmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIFNESzc3ODYgRlBHQSBJUlEgQ29udHJvbGxlciBTdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWF0dCBGbGVtaW5nCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPG1hY2gvZnBnYS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxLmg+CisKK2VudW0geworCUFUQV9JUlFfQklUCQk9IDEsCisJU1BJX0JVU1lfQklUCQk9IDIsCisJTElSUTVfQklUCQk9IDMsCisJTElSUTZfQklUCQk9IDQsCisJTElSUTdfQklUCQk9IDUsCisJTElSUThfQklUCQk9IDYsCisJS0VZX0lSUV9CSVQJCT0gNywKKwlQRU5fSVJRX0JJVAkJPSA4LAorCUVUSF9JUlFfQklUCQk9IDksCisJUlRDX0FMQVJNX0JJVAkJPSAxMCwKKwlDUllTVEFMX0ZBSUxfQklUCT0gMTIsCisJRVRIX1BNRV9CSVQJCT0gMTQsCit9OworCit2b2lkIF9faW5pdCBzZGs3Nzg2X2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIEVuYWJsZSBwcmlvcml0eSBlbmNvZGluZyBmb3IgYWxsIElSTHMgKi8KKwlmcGdhX3dyaXRlX3JlZyhmcGdhX3JlYWRfcmVnKElOVE1TUikgfCAweDAzMDMsIElOVE1TUik7CisKKwkvKiBDbGVhciBGUEdBIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCisJZnBnYV93cml0ZV9yZWcoMHgwMDAwLCBJTlRBU1IpOworCWZwZ2Ffd3JpdGVfcmVnKDB4MDAwMCwgSU5UQlNSKTsKKworCS8qIFVubWFzayBGUEdBIGludGVycnVwdHMgKi8KKwl0bXAgPSBmcGdhX3JlYWRfcmVnKElOVEFNUik7CisJdG1wICY9IH4oMSA8PCBFVEhfSVJRX0JJVCk7CisJZnBnYV93cml0ZV9yZWcodG1wLCBJTlRBTVIpOworCisJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUkw3NjU0X01BU0spOworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJMMzIxMF9NQVNLKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5NGVhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9zZXR1cC5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogUmVuZXNhcyBUZWNobm9sb2d5IEV1cm9wZSBTREs3Nzg2IFN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYXR0IEZsZW1pbmcKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxtYWNoL2ZwZ2EuaD4KKyNpbmNsdWRlIDxtYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IDB4MDdmZmY4YjAsCisJLmVuZAkJPSAweDA3ZmZmOGIwICsgc2l6ZW9mKHUxNikgLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiaGVhcnRiZWF0IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtc2M5MTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gInNtc2M5MTF4LW1lbW9yeSIsCisJCS5zdGFydAkJPSAweDA3ZmZmZjAwLAorCQkuZW5kCQk9IDB4MDdmZmZmMDAgKyBTWl8yNTYgLSAxLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCQk9ICJzbXNjOTExeC1pcnEiLAorCQkuc3RhcnQJCT0gZXZ0MmlycSgweDJjMCksCisJCS5lbmQJCT0gZXZ0MmlycSgweDJjMCksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgc21zYzkxMXhfY29uZmlnID0geworCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9PUEVOX0RSQUlOLAorCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQsCisJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21zYzkxMXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbXNjOTExeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbXNjOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtc2M5MTF4X3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21idXNfZnBnYV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHgwN2ZmZjllMCwKKwkuZW5kCQk9IDB4MDdmZmY5ZTAgKyBTWl8zMiAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21idXNfZnBnYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImkyYy1zZGs3Nzg2IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnNtYnVzX2ZwZ2FfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYnVzX3BjaWVfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IDB4MDdmZmZjMzAsCisJLmVuZAkJPSAweDA3ZmZmYzMwICsgU1pfMzIgLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYnVzX3BjaWVfZGV2aWNlID0geworCS5uYW1lCQk9ICJpMmMtc2RrNzc4NiIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZzbWJ1c19wY2llX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNkazc3ODZfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJtYXg2OTAwIiwgMHg2OCksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3ODZfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmhlYXJ0YmVhdF9kZXZpY2UsCisJJnNtc2M5MTF4X2RldmljZSwKKwkmc21idXNfZnBnYV9kZXZpY2UsCisJJnNtYnVzX3BjaWVfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBzZGs3Nzg2X2kyY19zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKgorCSAqIEhhbmQgb3ZlciBJMkMgY29udHJvbCB0byB0aGUgRlBHQS4KKwkgKi8KKwl0bXAgPSBmcGdhX3JlYWRfcmVnKFNCQ1IpOworCXRtcCAmPSB+U0NCUl9JMkNDRU47CisJdG1wIHw9IFNDQlJfSTJDTUVOOworCWZwZ2Ffd3JpdGVfcmVnKHRtcCwgU0JDUik7CisKKwlyZXR1cm4gaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgc2RrNzc4Nl9pMmNfZGV2aWNlcywKKwkJCQkgICAgICAgQVJSQVlfU0laRShzZGs3Nzg2X2kyY19kZXZpY2VzKSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNkazc3ODZfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3ODZfZGV2aWNlcywgQVJSQVlfU0laRShzaDc3ODZfZGV2aWNlcykpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc2RrNzc4Nl9pMmNfc2V0dXAoKTsKK30KK19faW5pdGNhbGwoc2RrNzc4Nl9kZXZpY2VzX3NldHVwKTsKKworc3RhdGljIGludCBzZGs3Nzg2X21vZGVfcGlucyh2b2lkKQoreworCXJldHVybiBmcGdhX3JlYWRfcmVnKE1PRFNXUik7Cit9CisKK3N0YXRpYyBpbnQgc2RrNzc4Nl9jbGtfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBPbmx5IGhhbmRsZSB0aGUgRVhUQUwgY2FzZSwgYW55b25lIGludGVyZmFjaW5nIGEgY3J5c3RhbAorCSAqIHJlc29uYXRvciB3aWxsIG5lZWQgdG8gcHJvdmlkZSB0aGVpciBvd24gaW5wdXQgY2xvY2suCisJICovCisJaWYgKHRlc3RfbW9kZV9waW4oTU9ERV9QSU45KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJleHRhbCIpOworCWlmICghY2xrIHx8IElTX0VSUihjbGspKQorCQlyZXR1cm4gUFRSX0VSUihjbGspOworCXJldCA9IGNsa19zZXRfcmF0ZShjbGssIDMzMzMzMzMzKTsKKwljbGtfcHV0KGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzZGs3Nzg2X3Jlc3RhcnQoY2hhciAqY21kKQoreworCWZwZ2Ffd3JpdGVfcmVnKDB4YTVhNSwgU1JTVFIpOworfQorCisvKiBJbml0aWFsaXplIHRoZSBib2FyZCAqLworc3RhdGljIHZvaWQgX19pbml0IHNkazc3ODZfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwlwcl9pbmZvKCJSZW5lc2FzIFRlY2hub2xvZ3kgRXVyb3BlIFNESzc3ODYgc3VwcG9ydDpcbiIpOworCisJc2RrNzc4Nl9mcGdhX2luaXQoKTsKKworCXByX2luZm8oIlx0UENCIHJldmlzaW9uOlx0JWRcbiIsIGZwZ2FfcmVhZF9yZWcoUENCUlIpICYgMHhmKTsKKworCW1hY2hpbmVfb3BzLnJlc3RhcnQgPSBzZGs3Nzg2X3Jlc3RhcnQ7Cit9CisKKy8qCisgKiBUaGUgTWFjaGluZSBWZWN0b3IKKyAqLworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9zZGs3Nzg2IF9faW5pdG12ID0geworCS5tdl9uYW1lCQk9ICJTREs3Nzg2IiwKKwkubXZfc2V0dXAJCT0gc2RrNzc4Nl9zZXR1cCwKKwkubXZfbW9kZV9waW5zCQk9IHNkazc3ODZfbW9kZV9waW5zLAorCS5tdl9jbGtfaW5pdAkJPSBzZGs3Nzg2X2Nsa19pbml0LAorCS5tdl9pbml0X2lycQkJPSBzZGs3Nzg2X2luaXRfaXJxLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lvLmMKaW5kZXggMTgwNDU1Ni4uYWRhZGM3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lvLmMKQEAgLTE2LDcgKzE2LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRlbGF5KHZvaWQpCiB7Ci0JY3RybF9pbncoMHgyMDAwMDAwMCk7ICAvKiBQMiBST00gQXJlYSAqLworCV9fcmF3X3JlYWR3KDB4MjAwMDAwMDApOyAgLyogUDIgUk9NIEFyZWEgKi8KIH0KIAogLyogTVM3NzUwIHJlcXVpcmVzIHNwZWNpYWwgdmVyc2lvbnMgb2YgaW4qLCBvdXQqIHJvdXRpbmVzLCBzaW5jZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lycS5jCmluZGV4IGFlZjdmMDUuLjhkODIxNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaXJxLmMKQEAgLTMyLDEyICszMiwxMiBAQAogCXVuc2lnbmVkIHNob3J0IG1zazAsbXNrMTsKIAogCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KLQl2YWwgPSBjdHJsX2ludyhJTlRDX0lQUjAxKTsKKwl2YWwgPSBfX3Jhd19yZWFkdyhJTlRDX0lQUjAxKTsKIAl2YWwgJj0gbWFzazsKLQljdHJsX291dHcodmFsLCBJTlRDX0lQUjAxKTsKKwlfX3Jhd193cml0ZXcodmFsLCBJTlRDX0lQUjAxKTsKIAkvKiBGUEdBIG1hc2sgc2V0ICovCi0JbXNrMCA9IGN0cmxfaW53KElOVE1TSzApOwotCW1zazEgPSBjdHJsX2ludyhJTlRNU0sxKTsKKwltc2swID0gX19yYXdfcmVhZHcoSU5UTVNLMCk7CisJbXNrMSA9IF9fcmF3X3JlYWR3KElOVE1TSzEpOwogCiAJc3dpdGNoIChpcnEpIHsKIAljYXNlIElSUTBfSVJROgpAQCAtNTEsOCArNTEsOCBAQAogCQltc2sxIHw9IDB4MDBmZjsKIAkJYnJlYWs7CiAJfQotCWN0cmxfb3V0dyhtc2swLCBJTlRNU0swKTsKLQljdHJsX291dHcobXNrMSwgSU5UTVNLMSk7CisJX19yYXdfd3JpdGV3KG1zazAsIElOVE1TSzApOworCV9fcmF3X3dyaXRldyhtc2sxLCBJTlRNU0sxKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX3NlNzIwNl9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTYyLDEzICs2MiwxMyBAQAogCXVuc2lnbmVkIHNob3J0IG1zazAsbXNrMTsKIAogCS8qIFNldCBwcmlvcml0eSBpbiBJUFIgYmFjayB0byBvcmlnaW5hbCB2YWx1ZSAqLwotCXZhbCA9IGN0cmxfaW53KElOVENfSVBSMDEpOworCXZhbCA9IF9fcmF3X3JlYWR3KElOVENfSVBSMDEpOwogCXZhbCB8PSB2YWx1ZTsKLQljdHJsX291dHcodmFsLCBJTlRDX0lQUjAxKTsKKwlfX3Jhd193cml0ZXcodmFsLCBJTlRDX0lQUjAxKTsKIAogCS8qIEZQR0EgbWFzayByZXNldCAqLwotCW1zazAgPSBjdHJsX2ludyhJTlRNU0swKTsKLQltc2sxID0gY3RybF9pbncoSU5UTVNLMSk7CisJbXNrMCA9IF9fcmF3X3JlYWR3KElOVE1TSzApOworCW1zazEgPSBfX3Jhd19yZWFkdyhJTlRNU0sxKTsKIAogCXN3aXRjaCAoaXJxKSB7CiAJY2FzZSBJUlEwX0lSUToKQEAgLTgyLDE5ICs4MiwyMCBAQAogCQltc2sxICY9IH4weDAwZmY7CiAJCWJyZWFrOwogCX0KLQljdHJsX291dHcobXNrMCwgSU5UTVNLMCk7Ci0JY3RybF9vdXR3KG1zazEsIElOVE1TSzEpOworCV9fcmF3X3dyaXRldyhtc2swLCBJTlRNU0swKTsKKwlfX3Jhd193cml0ZXcobXNrMSwgSU5UTVNLMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVvaV9zZTcyMDZfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgc2hvcnQgc3RzMCxzdHMxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKLQlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKKwlpZiAoIShkZXNjLT5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkpCiAJCWVuYWJsZV9zZTcyMDZfaXJxKGlycSk7CiAJLyogRlBHQSBpc3IgY2xlYXIgKi8KLQlzdHMwID0gY3RybF9pbncoSU5UU1RTMCk7Ci0Jc3RzMSA9IGN0cmxfaW53KElOVFNUUzEpOworCXN0czAgPSBfX3Jhd19yZWFkdyhJTlRTVFMwKTsKKwlzdHMxID0gX19yYXdfcmVhZHcoSU5UU1RTMSk7CiAKIAlzd2l0Y2ggKGlycSkgewogCWNhc2UgSVJRMF9JUlE6CkBAIC0xMDgsOCArMTA5LDggQEAKIAkJc3RzMSAmPSB+MHgwMGZmOwogCQlicmVhazsKIAl9Ci0JY3RybF9vdXR3KHN0czAsIElOVFNUUzApOwotCWN0cmxfb3V0dyhzdHMxLCBJTlRTVFMxKTsKKwlfX3Jhd193cml0ZXcoc3RzMCwgSU5UU1RTMCk7CisJX19yYXdfd3JpdGV3KHN0czEsIElOVFNUUzEpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNlNzIwNl9pcnFfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtMTM2LDExICsxMzcsMTEgQEAKIAltYWtlX3NlNzIwNl9pcnEoSVJRMF9JUlEpOyAvKiBTTUM5MUMxMTEgKi8KIAltYWtlX3NlNzIwNl9pcnEoSVJRMV9JUlEpOyAvKiBBVEEgKi8KIAltYWtlX3NlNzIwNl9pcnEoSVJRM19JUlEpOyAvKiBTTE9UIC8gUENNICovCi0JY3RybF9vdXR3KGludyhJTlRDX0lDUjEpIHwgMHgwMDBiICxJTlRDX0lDUjEgKSA7IC8qIElDUjEgKi8KKwlfX3Jhd193cml0ZXcoaW53KElOVENfSUNSMSkgfCAweDAwMGIgLElOVENfSUNSMSApIDsgLyogSUNSMSAqLwogCiAJLyogRlBHQSBTeXN0ZW0gcmVnaXN0ZXIgc2V0dXAqLwotCWN0cmxfb3V0dygweDAwMDAsSU5UU1RTMCk7IC8qIENsZWFyIElOVFNUUzAgKi8KLQljdHJsX291dHcoMHgwMDAwLElOVFNUUzEpOyAvKiBDbGVhciBJTlRTVFMxICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCxJTlRTVFMwKTsgLyogQ2xlYXIgSU5UU1RTMCAqLworCV9fcmF3X3dyaXRldygweDAwMDAsSU5UU1RTMSk7IC8qIENsZWFyIElOVFNUUzEgKi8KIAkvKiBJUlEwPUxBTiwgSVJRMT1BVEEsIElSUTM9U0xULFBDTSAqLwotCWN0cmxfb3V0dygweDAwMDEsSU5UU0VMKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAxLElOVFNFTCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jCmluZGV4IGY1NDY2Mzg0Li44ZjVjNjVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvc2V0dXAuYwpAQCAtNTAsMTUgKzUwLDEyIEBACiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewogCS5iaXRfcG9zCT0gaGVhcnRiZWF0X2JpdF9wb3MsCiAJLm5yX2JpdHMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9iaXRfcG9zKSwKLQkucmVnc2l6ZQk9IDMyLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQQV9MRUQsCi0JCS5lbmQJPSBQQV9MRUQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQQV9MRUQsCisJLmVuZAk9IFBBX0xFRCwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTY3LDggKzY0LDggQEAKIAkuZGV2CT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNlNzIwNl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9pcnEuYwppbmRleCAwNTFjMjlkLi5kNDMwNWMyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL2lycS5jCkBAIC0xNiwxNiArMTYsMTggQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG1hY2gtc2UvbWFjaC9zZTczNDMuaD4KIAordW5zaWduZWQgaW50IHNlNzM0M19mcGdhX2lycVtTRTczNDNfRlBHQV9JUlFfTlJdID0geyAwLCB9OworCiBzdGF0aWMgdm9pZCBkaXNhYmxlX3NlNzM0M19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gU0U3MzQzX0ZQR0FfSVJRX0JBU0U7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBBX0NQTERfSU1TSykgfCAxIDw8IGJpdCwgUEFfQ1BMRF9JTVNLKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gKHVuc2lnbmVkIGludClnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQV9DUExEX0lNU0spIHwgMSA8PCBiaXQsIFBBX0NQTERfSU1TSyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9zZTczNDNfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIFNFNzM0M19GUEdBX0lSUV9CQVNFOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9DUExEX0lNU0spICYgfigxIDw8IGJpdCksIFBBX0NQTERfSU1TSyk7CisJdW5zaWduZWQgaW50IGJpdCA9ICh1bnNpZ25lZCBpbnQpZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUEFfQ1BMRF9JTVNLKSAmIH4oMSA8PCBiaXQpLCBQQV9DUExEX0lNU0spOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNlNzM0M19pcnFfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtMzcsMTkgKzM5LDE2IEBACiAKIHN0YXRpYyB2b2lkIHNlNzM0M19pcnFfZGVtdXgodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXVuc2lnbmVkIHNob3J0IGludHYgPSBjdHJsX2ludyhQQV9DUExEX1NUKTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmV4dF9kZXNjOwotCXVuc2lnbmVkIGludCBleHRfaXJxID0gU0U3MzQzX0ZQR0FfSVJRX0JBU0U7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IF9fcmF3X3JlYWR3KFBBX0NQTERfU1QpOworCXVuc2lnbmVkIGludCBleHRfaXJxID0gMDsKIAogCWludHYgJj0gKDEgPDwgU0U3MzQzX0ZQR0FfSVJRX05SKSAtIDE7CiAKLQl3aGlsZSAoaW50dikgewotCQlpZiAoaW50diAmIDEpIHsKLQkJCWV4dF9kZXNjID0gaXJxX2Rlc2MgKyBleHRfaXJxOwotCQkJaGFuZGxlX2xldmVsX2lycShleHRfaXJxLCBleHRfZGVzYyk7Ci0JCX0KLQkJaW50diA+Pj0gMTsKLQkJZXh0X2lycSsrOworCWZvciAoOyBpbnR2OyBpbnR2ID4+PSAxLCBleHRfaXJxKyspIHsKKwkJaWYgKCEoaW50diAmIDEpKQorCQkJY29udGludWU7CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKHNlNzM0M19mcGdhX2lycVtleHRfaXJxXSk7CiAJfQogfQogCkBAIC01OCwxNiArNTcsMjQgQEAKICAqLwogdm9pZCBfX2luaXQgaW5pdF83MzQzc2VfSVJRKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGksIGlycTsKIAotCWN0cmxfb3V0dygwLCBQQV9DUExEX0lNU0spOwkvKiBkaXNhYmxlIGFsbCBpcnFzICovCi0JY3RybF9vdXR3KDB4MjAwMCwgMHhiMDNmZmZlYyk7CS8qIG1yc2hwYyBpcnEgZW5hYmxlICovCisJX19yYXdfd3JpdGV3KDAsIFBBX0NQTERfSU1TSyk7CS8qIGRpc2FibGUgYWxsIGlycXMgKi8KKwlfX3Jhd193cml0ZXcoMHgyMDAwLCAweGIwM2ZmZmVjKTsJLyogbXJzaHBjIGlycSBlbmFibGUgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBTRTczNDNfRlBHQV9JUlFfTlI7IGkrKykKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBpLAorCWZvciAoaSA9IDA7IGkgPCBTRTczNDNfRlBHQV9JUlFfTlI7IGkrKykgeworCQlpcnEgPSBjcmVhdGVfaXJxKCk7CisJCWlmIChpcnEgPCAwKQorCQkJcmV0dXJuOworCQlzZTczNDNfZnBnYV9pcnFbaV0gPSBpcnE7CisKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoc2U3MzQzX2ZwZ2FfaXJxW2ldLAogCQkJCQkgICAgICAmc2U3MzQzX2lycV9jaGlwLAogCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKIAorCQlzZXRfaXJxX2NoaXBfZGF0YShzZTczNDNfZnBnYV9pcnFbaV0sICh2b2lkICopaSk7CisJfQorCiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRMF9JUlEsIHNlNzM0M19pcnFfZGVtdXgpOwogCXNldF9pcnFfdHlwZShJUlEwX0lSUSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlExX0lSUSwgc2U3MzQzX2lycV9kZW11eCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9zZXR1cC5jCmluZGV4IDRkZTU2ZjMuLmQyMzcwYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9zZXR1cC5jCkBAIC0xMSwyNiArMTEsMTcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUEFfTEVELAotCQkuZW5kCT0gUEFfTEVELAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUEFfTEVELAorCS5lbmQJPSBQQV9MRUQsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImhlYXJ0YmVhdCIsCiAJLmlkCQk9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKQEAgLTgyLDcgKzczLDYgQEAKIAkJLm1hcGJhc2UJPSAweDE2MDAwMDAwLAogCQkucmVnc2hpZnQJPSAxLAogCQkuZmxhZ3MJCT0gU1QxNkMyNTUwQ19GTEFHUywKLQkJLmlycQkJPSBVQVJUQV9JUlEsCiAJCS51YXJ0Y2xrCT0gNzM3MjgwMCwKIAl9LAogCVsxXSA9IHsKQEAgLTkwLDcgKzgwLDYgQEAKIAkJLm1hcGJhc2UJPSAweDE3MDAwMDAwLAogCQkucmVnc2hpZnQJPSAxLAogCQkuZmxhZ3MJCT0gU1QxNkMyNTUwQ19GTEFHUywKLQkJLmlycQkJPSBVQVJUQl9JUlEsCiAJCS51YXJ0Y2xrCT0gNzM3MjgwMCwKIAl9LAogCXsgfSwKQEAgLTEyMSw3ICsxMTAsNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMl0gPSB7Ci0JCS5zdGFydCAgPSBVU0JfSVJRLAorCQkvKiBGaWxsZWQgaW4gbGF0ZXIgKi8KIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtMTM4LDggKzEyNyw4IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1c2JfZGV2aWNlID0gewogCS5uYW1lCQkJPSAiaXNwMTE2eC1oY2QiLAogCS5pZAkJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMgIAk9IEFSUkFZX1NJWkUodXNiX3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgIAk9IHVzYl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRSh1c2JfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gdXNiX3Jlc291cmNlcywKIAkuZGV2CQkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnVzYl9wbGF0Zm9ybV9kYXRhLAogCX0sCkBAIC0xNTUsNiArMTQ0LDEzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzM0M3NlX2RldmljZXNfc2V0dXAodm9pZCkKIHsKKwkvKiBXaXJlLXVwIGR5bmFtaWMgdmVjdG9ycyAqLworCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdLmlycSA9IHNlNzM0M19mcGdhX2lycVtTRTczNDNfRlBHQV9JUlFfVUFSVEFdOworCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzFdLmlycSA9IHNlNzM0M19mcGdhX2lycVtTRTczNDNfRlBHQV9JUlFfVUFSVEJdOworCisJdXNiX3Jlc291cmNlc1syXS5zdGFydCA9IHVzYl9yZXNvdXJjZXNbMl0uZW5kID0KKwkJc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9VU0JdOworCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzM0M3NlX3BsYXRmb3JtX2RldmljZXMsCiAJCQkJICAgIEFSUkFZX1NJWkUoc2g3MzQzc2VfcGxhdGZvcm1fZGV2aWNlcykpOwogfQpAQCAtMTY1LDEwICsxNjEsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IHNoNzM0M3NlX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JY3RybF9vdXR3KDB4ZjkwMCwgRlBHQV9PVVQpOwkvKiBGUEdBICovCisJX19yYXdfd3JpdGV3KDB4ZjkwMCwgRlBHQV9PVVQpOwkvKiBGUEdBICovCiAKLQljdHJsX291dHcoMHgwMDAyLCBQT1JUX1BFQ1IpOwkvKiBQT1JUIEUgMSA9IElSUTUgKi8KLQljdHJsX291dHcoMHgwMDIwLCBQT1JUX1BTRUxEKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAyLCBQT1JUX1BFQ1IpOwkvKiBQT1JUIEUgMSA9IElSUTUgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDIwLCBQT1JUX1BTRUxEKTsKIAogCXByaW50ayhLRVJOX0lORk8gIk1TNzM0M0NQMDEgU2V0dXAuLi5kb25lXG4iKTsKIH0KQEAgLTE3OSw2ICsxNzUsNSBAQAogc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl83MzQzc2UgX19pbml0bXYgPSB7CiAJLm12X25hbWUgPSAiU29sdXRpb25FbmdpbmUgNzM0MyIsCiAJLm12X3NldHVwID0gc2g3MzQzc2Vfc2V0dXAsCi0JLm12X25yX2lycXMgPSBTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9OUiwKIAkubXZfaW5pdF9pcnEgPSBpbml0XzczNDNzZV9JUlEsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L2lycS5jCmluZGV4IGVjMWZlYTUuLjEwMjhjMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvaXJxLmMKQEAgLTk2LDEzICs5NiwxMyBAQAogdm9pZCBfX2luaXQgaW5pdF9zZV9JUlEodm9pZCkKIHsKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JY3RybF9vdXR3KDAsIEJDUl9JTENSQSk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSQik7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSQyk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRCk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRSk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRik7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRyk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSQSk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSQik7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSQyk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRCk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRSk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRik7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRyk7CiAKIAlyZWdpc3Rlcl9pcHJfY29udHJvbGxlcigmaXByX2lycV9kZXNjKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L3NldHVwLmMKaW5kZXggNTI3ZWI2Yi4uNjZkMzlkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L3NldHVwLmMKQEAgLTkzLDE1ICs5MywxMiBAQAogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKIAkuYml0X3Bvcwk9IGhlYXJ0YmVhdF9iaXRfcG9zLAogCS5ucl9iaXRzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcyksCi0JLnJlZ3NpemUJPSAxNiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUEFfTEVELAotCQkuZW5kCT0gUEFfTEVELAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUEFfTEVELAorCS5lbmQJPSBQQV9MRUQsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CkBAIC0xMTAsOCArMTA3LDggQEAKIAkuZGV2CT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkgfHxcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvaXJxLmMKaW5kZXggYjQxN2FjYy4uZDg1MDIyZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9pcnEuYwpAQCAtMzgsNyArMzgsNyBAQAogdm9pZCBfX2luaXQgaW5pdF9zZTc3MjFfSVJRKHZvaWQpCiB7CiAJLyogUFBDUiAqLwotCWN0cmxfb3V0dyhjdHJsX2ludygweGE0MDUwMTE4KSAmIH4weDAwZmYsIDB4YTQwNTAxMTgpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdygweGE0MDUwMTE4KSAmIH4weDAwZmYsIDB4YTQwNTAxMTgpOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogCWludGNfc2V0X3ByaW9yaXR5KE1SU0hQQ19JUlEwLCAweGYgLSBNUlNIUENfSVJRMCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9zZXR1cC5jCmluZGV4IDU1YWY0YzMuLjc0MTZhZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9zZXR1cC5jCkBAIC0yMywxNSArMjMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CiAJLmJpdF9wb3MJPSBoZWFydGJlYXRfYml0X3BvcywKIAkubnJfYml0cwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpLAotCS5yZWdzaXplCT0gMTYsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFBBX0xFRCwKLQkJLmVuZAk9IFBBX0xFRCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBBX0xFRCwKKwkuZW5kCT0gUEFfTEVELAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewpAQCAtNDAsOCArMzcsOCBAQAogCS5kZXYJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNmX2lkZV9yZXNvdXJjZXNbXSA9IHsKQEAgLTgzLDEwICs4MCwxMCBAQAogc3RhdGljIHZvaWQgX19pbml0IHNlNzcyMV9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewogCS8qIGZvciBVU0IgKi8KLQljdHJsX291dHcoMHgwMDAwLCAweEE0MDUwMTBDKTsJLyogUEdDUiAqLwotCWN0cmxfb3V0dygweDAwMDAsIDB4QTQwNTAxMEUpOwkvKiBQSENSICovCi0JY3RybF9vdXR3KDB4MDBBQSwgMHhBNDA1MDExOCk7CS8qIFBQQ1IgKi8KLQljdHJsX291dHcoMHgwMDAwLCAweEE0MDUwMTI0KTsJLyogUFNFTEEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCAweEE0MDUwMTBDKTsJLyogUEdDUiAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIDB4QTQwNTAxMEUpOwkvKiBQSENSICovCisJX19yYXdfd3JpdGV3KDB4MDBBQSwgMHhBNDA1MDExOCk7CS8qIFBQQ1IgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCAweEE0MDUwMTI0KTsJLyogUFNFTEEgKi8KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9pcnEuYwppbmRleCBiMjIxYjY4Li42MTYwNWRiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jCkBAIC0yMSwxMyArMjEsMTMgQEAKIHN0YXRpYyB2b2lkIGRpc2FibGVfc2U3NzIyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBiaXQgPSAodW5zaWduZWQgaW50KWdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KElSUTAxX01BU0spIHwgMSA8PCBiaXQsIElSUTAxX01BU0spOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJUlEwMV9NQVNLKSB8IDEgPDwgYml0LCBJUlEwMV9NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX3NlNzcyMl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gKHVuc2lnbmVkIGludClnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhJUlEwMV9NQVNLKSAmIH4oMSA8PCBiaXQpLCBJUlEwMV9NQVNLKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoSVJRMDFfTUFTSykgJiB+KDEgPDwgYml0KSwgSVJRMDFfTUFTSyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2U3NzIyX2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0zOSw3ICszOSw3IEBACiAKIHN0YXRpYyB2b2lkIHNlNzcyMl9pcnFfZGVtdXgodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXVuc2lnbmVkIHNob3J0IGludHYgPSBjdHJsX2ludyhJUlEwMV9TVFMpOworCXVuc2lnbmVkIHNob3J0IGludHYgPSBfX3Jhd19yZWFkdyhJUlEwMV9TVFMpOwogCXVuc2lnbmVkIGludCBleHRfaXJxID0gMDsKIAogCWludHYgJj0gKDEgPDwgU0U3NzIyX0ZQR0FfSVJRX05SKSAtIDE7CkBAIC01OSw4ICs1OSw4IEBACiB7CiAJaW50IGksIGlycTsKIAotCWN0cmxfb3V0dygwLCBJUlEwMV9NQVNLKTsgICAgICAgLyogZGlzYWJsZSBhbGwgaXJxcyAqLwotCWN0cmxfb3V0dygweDIwMDAsIDB4YjAzZmZmZWMpOyAgLyogbXJzaHBjIGlycSBlbmFibGUgKi8KKwlfX3Jhd193cml0ZXcoMCwgSVJRMDFfTUFTSyk7ICAgICAgIC8qIGRpc2FibGUgYWxsIGlycXMgKi8KKwlfX3Jhd193cml0ZXcoMHgyMDAwLCAweGIwM2ZmZmVjKTsgIC8qIG1yc2hwYyBpcnEgZW5hYmxlICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgU0U3NzIyX0ZQR0FfSVJRX05SOyBpKyspIHsKIAkJaXJxID0gY3JlYXRlX2lycSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvc2V0dXAuYwppbmRleCBiMWNiOTQyLi44MGE0ZTU3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvc2V0dXAuYwpAQCAtMjUsMjYgKzI1LDE3IEBACiAjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgogCiAvKiBIZWFydGJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IFBBX0xFRCwKLQkJLmVuZCAgICA9IFBBX0xFRCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gUEFfTEVELAorCS5lbmQgICAgPSBQQV9MRUQsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJoZWFydGJlYXQiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIFNNQzkxeCAqLwpAQCAtMTY1LDMyICsxNTYsMzIgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNlNzcyMl9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewotCWN0cmxfb3V0dygweDAxMEQsIEZQR0FfT1VUKTsgICAgLyogRlBHQSAqLworCV9fcmF3X3dyaXRldygweDAxMEQsIEZQR0FfT1VUKTsgICAgLyogRlBHQSAqLwogCi0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QRUNSKTsgICAvKiBQT1JUIEUgMSA9IElSUTUgLEUgMCA9IEJTICovCi0JY3RybF9vdXR3KDB4MTAwMCwgUE9SVF9QSkNSKTsgICAvKiBQT1JUIEogMSA9IElSUTEsSiAwID1JUlEwICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QRUNSKTsgICAvKiBQT1JUIEUgMSA9IElSUTUgLEUgMCA9IEJTICovCisJX19yYXdfd3JpdGV3KDB4MTAwMCwgUE9SVF9QSkNSKTsgICAvKiBQT1JUIEogMSA9IElSUTEsSiAwID1JUlEwICovCiAKIAkvKiBMQ0RDIEkvTyAqLwotCWN0cmxfb3V0dygweDAwMjAsIFBPUlRfUFNFTEQpOworCV9fcmF3X3dyaXRldygweDAwMjAsIFBPUlRfUFNFTEQpOwogCiAJLyogU0lPRjEqLwotCWN0cmxfb3V0dygweDAwMDMsIFBPUlRfUFNFTEIpOwotCWN0cmxfb3V0dygweGUwMDAsIFBPUlRfUFNFTEMpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUEtDUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMywgUE9SVF9QU0VMQik7CisJX19yYXdfd3JpdGV3KDB4ZTAwMCwgUE9SVF9QU0VMQyk7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QS0NSKTsKIAogCS8qIExDREMgKi8KLQljdHJsX291dHcoMHg0MDIwLCBQT1JUX1BIQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUExDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTUNSKTsKLQljdHJsX291dHcoMHgwMDAyLCBQT1JUX1BSQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFhDUik7ICAgLyogTENEQyxDUzZBICovCisJX19yYXdfd3JpdGV3KDB4NDAyMCwgUE9SVF9QSENSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BMQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUE1DUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMiwgUE9SVF9QUkNSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BYQ1IpOyAgIC8qIExDREMsQ1M2QSAqLwogCiAJLyogS0VZU0MgKi8KLQljdHJsX291dHcoMHgwQTEwLCBQT1JUX1BTRUxBKTsgLyogQlMsU0hISUQyICovCi0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QWUNSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BaQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHg0MDAwLCBQT1JUX0hJWkNSQSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JDKSAmIH4weGMwMDAsIFBPUlRfSElaQ1JDKTsKKwlfX3Jhd193cml0ZXcoMHgwQTEwLCBQT1JUX1BTRUxBKTsgLyogQlMsU0hISUQyICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QWUNSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BaQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX0hJWkNSQSkgJiB+MHg0MDAwLCBQT1JUX0hJWkNSQSk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfSElaQ1JDKSAmIH4weGMwMDAsIFBPUlRfSElaQ1JDKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9pcnEuYwppbmRleCBmNzZjZjNiLi4wOTQyYmUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L2lycS5jCkBAIC03MiwxNCArNzIsMTQgQEAKIHsKIAlzdHJ1Y3QgZnBnYV9pcnEgc2V0ID0gZ2V0X2ZwZ2FfaXJxKGZwZ2EyaXJxKGlycSkpOwogCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBzZXQuYmFzZTsKLQljdHJsX291dHcoY3RybF9pbncoc2V0Lm1yYWRkcikgfCAweDAwMDEgPDwgYml0LCBzZXQubXJhZGRyKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoc2V0Lm1yYWRkcikgfCAweDAwMDEgPDwgYml0LCBzZXQubXJhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX3NlNzcyNF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlzdHJ1Y3QgZnBnYV9pcnEgc2V0ID0gZ2V0X2ZwZ2FfaXJxKGZwZ2EyaXJxKGlycSkpOwogCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBzZXQuYmFzZTsKLQljdHJsX291dHcoY3RybF9pbncoc2V0Lm1yYWRkcikgJiB+KDB4MDAwMSA8PCBiaXQpLCBzZXQubXJhZGRyKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoc2V0Lm1yYWRkcikgJiB+KDB4MDAwMSA8PCBiaXQpLCBzZXQubXJhZGRyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzZTc3MjRfaXJxX2NoaXAgX19yZWFkX21vc3RseSA9IHsKQEAgLTkyLDE5ICs5MiwxNiBAQAogc3RhdGljIHZvaWQgc2U3NzI0X2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGZwZ2FfaXJxIHNldCA9IGdldF9mcGdhX2lycShpcnEpOwotCXVuc2lnbmVkIHNob3J0IGludHYgPSBjdHJsX2ludyhzZXQuc3JhZGRyKTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmV4dF9kZXNjOworCXVuc2lnbmVkIHNob3J0IGludHYgPSBfX3Jhd19yZWFkdyhzZXQuc3JhZGRyKTsKIAl1bnNpZ25lZCBpbnQgZXh0X2lycSA9IHNldC5iYXNlOwogCiAJaW50diAmPSBzZXQubWFzazsKIAotCXdoaWxlIChpbnR2KSB7Ci0JCWlmIChpbnR2ICYgMHgwMDAxKSB7Ci0JCQlleHRfZGVzYyA9IGlycV9kZXNjICsgZXh0X2lycTsKLQkJCWhhbmRsZV9sZXZlbF9pcnEoZXh0X2lycSwgZXh0X2Rlc2MpOwotCQl9Ci0JCWludHYgPj49IDE7Ci0JCWV4dF9pcnErKzsKKwlmb3IgKDsgaW50djsgaW50diA+Pj0gMSwgZXh0X2lycSsrKSB7CisJCWlmICghKGludHYgJiAxKSkKKwkJCWNvbnRpbnVlOworCisJCWdlbmVyaWNfaGFuZGxlX2lycShleHRfaXJxKTsKIAl9CiB9CiAKQEAgLTExMywyMCArMTEwLDM5IEBACiAgKi8KIHZvaWQgX19pbml0IGluaXRfc2U3NzI0X0lSUSh2b2lkKQogewotCWludCBpOworCWludCBpLCBuaWQgPSBjcHVfdG9fbm9kZShib290X2NwdV9kYXRhKTsKIAotCWN0cmxfb3V0dygweGZmZmYsIElSUTBfTVIpOyAgLyogbWFzayBhbGwgKi8KLQljdHJsX291dHcoMHhmZmZmLCBJUlExX01SKTsgIC8qIG1hc2sgYWxsICovCi0JY3RybF9vdXR3KDB4ZmZmZiwgSVJRMl9NUik7ICAvKiBtYXNrIGFsbCAqLwotCWN0cmxfb3V0dygweDAwMDAsIElSUTBfU1IpOyAgLyogY2xlYXIgaXJxICovCi0JY3RybF9vdXR3KDB4MDAwMCwgSVJRMV9TUik7ICAvKiBjbGVhciBpcnEgKi8KLQljdHJsX291dHcoMHgwMDAwLCBJUlEyX1NSKTsgIC8qIGNsZWFyIGlycSAqLwotCWN0cmxfb3V0dygweDAwMmEsIElSUV9NT0RFKTsgLyogc2V0IGlycSB0eXBlICovCisJX19yYXdfd3JpdGV3KDB4ZmZmZiwgSVJRMF9NUik7ICAvKiBtYXNrIGFsbCAqLworCV9fcmF3X3dyaXRldygweGZmZmYsIElSUTFfTVIpOyAgLyogbWFzayBhbGwgKi8KKwlfX3Jhd193cml0ZXcoMHhmZmZmLCBJUlEyX01SKTsgIC8qIG1hc2sgYWxsICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgSVJRMF9TUik7ICAvKiBjbGVhciBpcnEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBJUlExX1NSKTsgIC8qIGNsZWFyIGlycSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIElSUTJfU1IpOyAgLyogY2xlYXIgaXJxICovCisJX19yYXdfd3JpdGV3KDB4MDAyYSwgSVJRX01PREUpOyAvKiBzZXQgaXJxIHR5cGUgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBTRTc3MjRfRlBHQV9JUlFfTlI7IGkrKykKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoU0U3NzI0X0ZQR0FfSVJRX0JBU0UgKyBpLAorCWZvciAoaSA9IDA7IGkgPCBTRTc3MjRfRlBHQV9JUlFfTlI7IGkrKykgeworCQlpbnQgaXJxLCB3YW50ZWQ7CisKKwkJd2FudGVkID0gU0U3NzI0X0ZQR0FfSVJRX0JBU0UgKyBpOworCisJCWlycSA9IGNyZWF0ZV9pcnFfbnIod2FudGVkLCBuaWQpOworCQlpZiAodW5saWtlbHkoaXJxID09IDApKSB7CisJCQlwcl9lcnIoIiVzOiBmYWlsZWQgaG9va2luZyBpcnEgJWQgZm9yIEZQR0FcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHdhbnRlZCk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAodW5saWtlbHkoaXJxICE9IHdhbnRlZCkpIHsKKwkJCXByX2VycigiJXM6IGdvdCBpcnEgJWQgYnV0IHdhbnRlZCAlZCwgYmFpbGluZy5cbiIsCisJCQkgICAgICAgX19mdW5jX18sIGlycSwgd2FudGVkKTsKKwkJCWRlc3Ryb3lfaXJxKGlycSk7CisJCQlyZXR1cm47CisJCX0KKworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCiAJCQkJCSAgICAgICZzZTc3MjRfaXJxX2NoaXAsCiAJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOworCX0KIAogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUTBfSVJRLCBzZTc3MjRfaXJxX2RlbXV4KTsKIAlzZXRfaXJxX3R5cGUoSVJRMF9JUlEsIElSUV9UWVBFX0xFVkVMX0xPVyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2RyYW0uUyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZHJhbS5TCmluZGV4IDkwNDAxNjcuLjZmYTQ3MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZHJhbS5TCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZHJhbS5TCkBAIC0zOSw2ICszOSwxMCBAQAogCiAJLyogREJTQzogcHV0IG1lbW9yeSBpbiBhdXRvLXJlZnJlc2ggbW9kZSAqLwogCisJbW92LmwJQChTSF9TTEVFUF9NT0RFLCByNSksIHIwCisJdHN0CSNTVVNQX1NIX1JTVEFOREJZLCByMAorCWJmCXJlc3VtZV9yc3RhbmRieQorCiAJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMCAvKiBEQlJGUEROMCAqLwogCVdBSVQgMQogCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCkBAIC00OSw0ICs1Myw3OSBAQAogCXJ0cwogCSBub3AKIAorcmVzdW1lX3JzdGFuZGJ5OgorCisJLyogQ1BHOiBzZXR1cCBjbG9ja3MgYmVmb3JlIHJlc3RhcnRpbmcgZXh0ZXJuYWwgbWVtb3J5ICovCisKKwlFRCAweEE0MTUwMDI0LCAweDAwMDA0MDAwIC8qIFBMTENSICovCisKKwltb3YubAlGUlFDUkEscjAKKwltb3YubAlAcjAscjMKKwltb3YubAlLSUNLLHIxCisJb3IJcjEsIHIzCisJbW92LmwJcjMsIEByMAorCisJbW92LmwJTFNUQVRTLHIwCisJbW92CSMxLHIxCitXQUlUX0xTVEFUUzoKKwltb3YubAlAcjAscjMKKwl0c3QJcjEscjMKKwliZglXQUlUX0xTVEFUUworCisJLyogREJTQzogcmUtaW5pdGlhbGl6ZSBhbmQgcHV0IGluIGF1dG8tcmVmcmVzaCAqLworCisJRUQgMHhGRDAwMDEwOCwgMHgwMDAwMDE4MSAvKiBEQlBEQ05UMCAqLworCUVEIDB4RkQwMDAwMjAsIDB4MDE1QjAwMDIgLyogREJDT05GICovCisJRUQgMHhGRDAwMDAzMCwgMHgwMzA3MTUwMiAvKiBEQlRSMCAqLworCUVEIDB4RkQwMDAwMzQsIDB4MDIwMjAxMDIgLyogREJUUjEgKi8KKwlFRCAweEZEMDAwMDM4LCAweDAxMDkwNDA1IC8qIERCVFIyICovCisJRUQgMHhGRDAwMDAzQywgMHgwMDAwMDAwMiAvKiBEQlRSMyAqLworCUVEIDB4RkQwMDAwMDgsIDB4MDAwMDAwMDUgLyogREJLSU5EICovCisJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMSAvKiBEQlJGUEROMCAqLworCUVEIDB4RkQwMDAwNDAsIDB4MDAwMDAwMDAgLyogREJSRlBETjAgKi8KKwlFRCAweEZEMDAwMDE4LCAweDAwMDAwMDAxIC8qIERCQ0tFQ05UICovCisKKwltb3YJIzEwMCxyMAorV0FJVF80MDBOUzoKKwlkdAlyMAorCWJmCVdBSVRfNDAwTlMKKworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAyMDAwMCAvKiBEQk1SQ05UIChFTVIyKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMzAwMDAgLyogREJNUkNOVCAoRU1SMykgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwMDA0IC8qIERCTVJDTlQgKEVNUikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDAwNTMyIC8qIERCTVJDTlQgKE1SUykgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDAyIC8qIERCQ01EQ05UIChQQUxMKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDQgLyogREJDTURDTlQgKFJFRikgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDA0IC8qIERCQ01EQ05UIChSRUYpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAwMDQzMiAvKiBEQk1SQ05UIChNUlMpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAxMDNjMCAvKiBEQk1SQ05UIChFTVIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAxMDA0MCAvKiBEQk1SQ05UIChFTVIpICovCisKKwltb3YJIzEwMCxyMAorV0FJVF80MDBOU18yOgorCWR0CXIwCisJYmYJV0FJVF80MDBOU18yCisKKwlFRCAweEZEMDAwMDEwLCAweDAwMDAwMDAxIC8qIERCRU4gKi8KKwlFRCAweEZEMDAwMDQ0LCAweDAwMDAwNTBmIC8qIERCUkZQRE4xICovCisJRUQgMHhGRDAwMDA0OCwgMHgyMzY4MDBlNiAvKiBEQlJGUEROMiAqLworCisJbW92LmwJRFVNTVkscjAKKwltb3YubAlAcjAsIHIxIC8qIGZvcmNlIHNpbmdsZSBkdW1teSByZWFkICovCisKKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDAyIC8qIERCQ01EQ05UIChQQUxMKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDQgLyogREJDTURDTlQgKFJFRikgKi8KKwlFRCAweEZEMDAwMTA4LCAweDAwMDAwMDgwIC8qIERCUERDTlQwICovCisJRUQgMHhGRDAwMDA0MCwgMHgwMDAxMDAwMCAvKiBEQlJGUEROMCAqLworCisJcnRzCisJIG5vcAorCisJLmJhbGlnbiA0CitEVU1NWToJLmxvbmcJMHhhYzQwMDAwMAorRlJRQ1JBOgkubG9uZwkweGE0MTUwMDAwCitLSUNLOgkubG9uZwkweDgwMDAwMDAwCitMU1RBVFM6CS5sb25nCTB4YTQxNTAwNjAKKwogRU5UUlkobXM3NzI0c2Vfc2RyYW1fbGVhdmVfZW5kKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYwppbmRleCA4NThlY2IyLi42NmNkYmMzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYwpAQCAtNTMsMjYgKzUzLDE3IEBACiAgKi8KIAogLyogSGVhcnRiZWF0ICovCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gMTYsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBQQV9MRUQsCi0JCS5lbmQgICAgPSBQQV9MRUQsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICA9IFBBX0xFRCwKKwkuZW5kICAgID0gUEFfTEVELAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAiaGVhcnRiZWF0IiwKIAkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSAxLAorCS5yZXNvdXJjZSAgICAgICA9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBMQU45MUMxMTEgKi8KQEAgLTI2NSwxMiArMjU2LDEyIEBACiAjZGVmaW5lIEZDTEtBQ1IJCTB4YTQxNTAwMDgKIHN0YXRpYyB2b2lkIGZzaW1ja19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1MzIgc3RhdHVzID0gY3RybF9pbmwoY2xrLT5lbmFibGVfcmVnKTsKKwl1MzIgc3RhdHVzID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAogCS8qIHVzZSBleHRlcm5hbCBjbG9jayAqLwogCXN0YXR1cyAmPSB+MHgwMDAwMDBmZjsKIAlzdGF0dXMgfD0gMHgwMDAwMDA4MDsKLQljdHJsX291dGwoc3RhdHVzLCBjbGstPmVuYWJsZV9yZWcpOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBmc2ltY2tfY2xrX29wcyA9IHsKQEAgLTMyMiw3ICszMTMsNyBAQAogLyogS0VZU0MgaW4gU29DIChOZWVkcyBTVzMzLTIgc2V0IHRvIE9OKSAqLwogc3RhdGljIHN0cnVjdCBzaF9rZXlzY19pbmZvIGtleXNjX2luZm8gPSB7CiAJLm1vZGUgPSBTSF9LRVlTQ19NT0RFXzEsCi0JLnNjYW5fdGltaW5nID0gMTAsCisJLnNjYW5fdGltaW5nID0gMywKIAkuZGVsYXkgPSA1MCwKIAkua2V5Y29kZXMgPSB7CiAJCUtFWV8xLCBLRVlfMiwgS0VZXzMsIEtFWV80LCBLRVlfNSwKQEAgLTQ2MCw3ICs0NTEsNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydCAgPSAxMDEsCisJCS5zdGFydCAgPSAxMDAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ4Myw3ICs0NzQsNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydCAgPSAyNCwKKwkJLnN0YXJ0ICA9IDIzLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC00OTgsNiArNDg5LDI2IEBACiAJfSwKIH07CiAKKy8qIElyREEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJkYV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIklyREEiLAorCQkuc3RhcnQgID0gMHhBNDVEMDAwMCwKKwkJLmVuZCAgICA9IDB4QTQ1RDAwNDksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IDIwLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlyZGFfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaF9zaXIiLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaXJkYV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGlyZGFfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1zNzcyNHNlX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZoZWFydGJlYXRfZGV2aWNlLAogCSZzbWM5MXhfZXRoX2RldmljZSwKQEAgLTUxMiw2ICs1MjMsNyBAQAogCSZmc2lfZGV2aWNlLAogCSZzZGhpMF9jbjdfZGV2aWNlLAogCSZzZGhpMV9jbjhfZGV2aWNlLAorCSZpcmRhX2RldmljZSwKIH07CiAKIC8qIEkyQyBkZXZpY2UgKi8KQEAgLTUzMSw3ICs1NDMsNyBAQAogCWludCB0ID0gMTAwMDA7CiAKIAl3aGlsZSAodC0tKSB7Ci0JCWlmICghY3RybF9pbncoRUVQUk9NX1NUQVQpKQorCQlpZiAoIV9fcmF3X3JlYWR3KEVFUFJPTV9TVEFUKSkKIAkJCXJldHVybiAxOwogCQl1ZGVsYXkoMSk7CiAJfQpAQCAtNTUxLDEzICs1NjMsMTMgQEAKIAogCS8qIHJlYWQgTUFDIGFkZHIgZnJvbSBFRVBST00gKi8KIAlmb3IgKGkgPSAwIDsgaSA8IDMgOyBpKyspIHsKLQkJY3RybF9vdXR3KDB4MCwgRUVQUk9NX09QKTsgLyogcmVhZCAqLwotCQljdHJsX291dHcoaSoyLCBFRVBST01fQURSKTsKLQkJY3RybF9vdXR3KDB4MSwgRUVQUk9NX1NUUlQpOworCQlfX3Jhd193cml0ZXcoMHgwLCBFRVBST01fT1ApOyAvKiByZWFkICovCisJCV9fcmF3X3dyaXRldyhpKjIsIEVFUFJPTV9BRFIpOworCQlfX3Jhd193cml0ZXcoMHgxLCBFRVBST01fU1RSVCk7CiAJCWlmICghc2hfZXRoX2lzX2VlcHJvbV9yZWFkeSgpKQogCQkJcmV0dXJuOwogCi0JCW1hYyA9IGN0cmxfaW53KEVFUFJPTV9EQVRBKTsKKwkJbWFjID0gX19yYXdfcmVhZHcoRUVQUk9NX0RBVEEpOwogCQlzaF9ldGhfcGxhdC5tYWNfYWRkcltpIDw8IDFdID0gbWFjICYgMHhmZjsKIAkJc2hfZXRoX3BsYXQubWFjX2FkZHJbKGkgPDwgMSkgKyAxXSA9IG1hYyA+PiA4OwogCX0KQEAgLTU5NCwyOCArNjA2LDI5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGRldmljZXNfc2V0dXAodm9pZCkKIHsKLQl1MTYgc3cgPSBjdHJsX2ludyhTVzQxNDApOyAvKiBzZWxlY3QgY2FtZXJhLCBtb25pdG9yICovCi0Jc3RydWN0IGNsayAqZnNpYV9jbGs7CisJdTE2IHN3ID0gX19yYXdfcmVhZHcoU1c0MTQwKTsgLyogc2VsZWN0IGNhbWVyYSwgbW9uaXRvciAqLworCXN0cnVjdCBjbGsgKmNsazsKIAogCS8qIHJlZ2lzdGVyIGJvYXJkIHNwZWNpZmljIHNlbGYtcmVmcmVzaCBjb2RlICovCi0Jc2hfbW9iaWxlX3JlZ2lzdGVyX3NlbGZfcmVmcmVzaChTVVNQX1NIX1NUQU5EQlkgfCBTVVNQX1NIX1NGLAorCXNoX21vYmlsZV9yZWdpc3Rlcl9zZWxmX3JlZnJlc2goU1VTUF9TSF9TVEFOREJZIHwgU1VTUF9TSF9TRiB8CisJCQkJCVNVU1BfU0hfUlNUQU5EQlksCiAJCQkJCSZtczc3MjRzZV9zZHJhbV9lbnRlcl9zdGFydCwKIAkJCQkJJm1zNzcyNHNlX3NkcmFtX2VudGVyX2VuZCwKIAkJCQkJJm1zNzcyNHNlX3NkcmFtX2xlYXZlX3N0YXJ0LAogCQkJCQkmbXM3NzI0c2Vfc2RyYW1fbGVhdmVfZW5kKTsKIAkvKiBSZXNldCBSZWxlYXNlICovCi0JY3RybF9vdXR3KGN0cmxfaW53KEZQR0FfT1VUKSAmCisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KEZQR0FfT1VUKSAmCiAJCSAgfigoMSA8PCAxKSAgfCAvKiBMQU4gKi8KIAkJICAgICgxIDw8IDYpICB8IC8qIFZJREVPIERBQyAqLwogCQkgICAgKDEgPDwgNykgIHwgLyogQUs0NjQzICovCisJCSAgICAoMSA8PCA4KSAgfCAvKiBJckRBICovCiAJCSAgICAoMSA8PCAxMikgfCAvKiBVU0IwICovCiAJCSAgICAoMSA8PCAxNCkpLCAvKiBSTUlJICovCiAJCSAgRlBHQV9PVVQpOwogCiAJLyogdHVybiBvbiBVU0IgY2xvY2tzLCB1c2UgZXh0ZXJuYWwgY2xvY2sgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHhjMDAwKSB8IDB4ODAwMCwgUE9SVF9NU0VMQ1JCKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfTVNFTENSQikgJiB+MHhjMDAwKSB8IDB4ODAwMCwgUE9SVF9NU0VMQ1JCKTsKIAotI2lmZGVmIENPTkZJR19QTQogCS8qIExldCBMRUQ5IHNob3cgU1RBVFVTMiAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NUQVRVUzIsIE5VTEwpOwogCkBAIC02MjQsMjggKzYzNywxMiBAQAogCiAJLyogTGl0IExFRDExIHNob3cgUERTVEFUVVMgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9QRFNUQVRVUywgTlVMTCk7Ci0jZWxzZQotCS8qIExpdCBMRUQ5ICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNiwgTlVMTCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNiwgMSk7Ci0JZ3Bpb19leHBvcnQoR1BJT19QVEo2LCAwKTsKLQotCS8qIExpdCBMRUQxMCAqLwotCWdwaW9fcmVxdWVzdChHUElPX1BUSjUsIE5VTEwpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjUsIDEpOwotCWdwaW9fZXhwb3J0KEdQSU9fUFRKNSwgMCk7Ci0KLQkvKiBMaXQgTEVEMTEgKi8KLQlncGlvX3JlcXVlc3QoR1BJT19QVEo3LCBOVUxMKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo3LCAxKTsKLQlncGlvX2V4cG9ydChHUElPX1BUSjcsIDApOwotI2VuZGlmCiAKIAkvKiBlbmFibGUgVVNCMCBwb3J0ICovCi0JY3RybF9vdXR3KDB4MDYwMCwgMHhhNDA1MDFkNCk7CisJX19yYXdfd3JpdGV3KDB4MDYwMCwgMHhhNDA1MDFkNCk7CiAKIAkvKiBlbmFibGUgVVNCMSBwb3J0ICovCi0JY3RybF9vdXR3KDB4MDYwMCwgMHhhNDA1MDE5Mik7CisJX19yYXdfd3JpdGV3KDB4MDYwMCwgMHhhNDA1MDE5Mik7CiAKIAkvKiBlbmFibGUgSVJRIDAsMSwyICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSU5UQ19JUlEwLCBOVUxMKTsKQEAgLTY5Myw3ICs2OTAsNyBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZDUFdDLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RSRCwgICAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENETENMSywgIE5VTEwpOwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9ISVpBKSAmIH4weDAwMDEpLCBQT1JUX0hJWkEpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9ISVpBKSAmIH4weDAwMDEpLCBQT1JUX0hJWkEpOwogCiAJLyogZW5hYmxlIENFVTAgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9WSU8wX0QxNSwgTlVMTCk7CkBAIC03NjQsMTMgKzc2MSwxOCBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NMS0FVRElPQk8sIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlBU0QsICAgIE5VTEwpOwogCisJLyogc2V0IFNQVTIgY2xvY2sgdG8gODMuNCBNSHogKi8KKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJzcHVfY2xrIik7CisJY2xrX3NldF9yYXRlKGNsaywgY2xrX3JvdW5kX3JhdGUoY2xrLCA4MzMzMzMzMykpOworCWNsa19wdXQoY2xrKTsKKwogCS8qIGNoYW5nZSBwYXJlbnQgb2YgRlNJIEEgKi8KLQlmc2lhX2NsayA9IGNsa19nZXQoTlVMTCwgImZzaWFfY2xrIik7CisJY2xrID0gY2xrX2dldChOVUxMLCAiZnNpYV9jbGsiKTsKIAljbGtfcmVnaXN0ZXIoJmZzaW1ja2FfY2xrKTsKLQljbGtfc2V0X3BhcmVudChmc2lhX2NsaywgJmZzaW1ja2FfY2xrKTsKLQljbGtfc2V0X3JhdGUoZnNpYV9jbGssIDExMDAwKTsKKwljbGtfc2V0X3BhcmVudChjbGssICZmc2ltY2thX2Nsayk7CisJY2xrX3NldF9yYXRlKGNsaywgMTEwMDApOwogCWNsa19zZXRfcmF0ZSgmZnNpbWNrYV9jbGssIDExMDAwKTsKLQljbGtfcHV0KGZzaWFfY2xrKTsKKwljbGtfcHV0KGNsayk7CiAKIAkvKiBTREhJMCBjb25uZWN0ZWQgdG8gY243ICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISTBDRCwgTlVMTCk7CkBAIC03OTIsNiArNzk0LDEwIEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISTFDTUQsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESEkxQ0xLLCBOVUxMKTsKIAorCS8qIGVuYWJsZSBJckRBICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9PVVQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSREFfSU4sICBOVUxMKTsKKwogCS8qCiAJICogZW5hYmxlIFNILUV0aAogCSAqCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvaXJxLmMKaW5kZXggMTIxNzQ0Yy4uZDVjOWVkYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9pcnEuYwpAQCAtMjQsMzAgKzI0LDMwIEBACiB2b2lkIF9faW5pdCBpbml0X3NlNzc4MF9JUlEodm9pZCkKIHsKIAkvKiBlbmFibGUgYWxsIGludGVycnVwdCBhdCBGUEdBICovCi0JY3RybF9vdXR3KDAsIEZQR0FfSU5UTVNLMSk7CisJX19yYXdfd3JpdGV3KDAsIEZQR0FfSU5UTVNLMSk7CiAJLyogbWFzayBTTTUwMSBpbnRlcnJ1cHQgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KEZQR0FfSU5UTVNLMSkgfCAweDAwMDIpLCBGUEdBX0lOVE1TSzEpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoRlBHQV9JTlRNU0sxKSB8IDB4MDAwMiksIEZQR0FfSU5UTVNLMSk7CiAJLyogZW5hYmxlIGFsbCBpbnRlcnJ1cHQgYXQgRlBHQSAqLwotCWN0cmxfb3V0dygwLCBGUEdBX0lOVE1TSzIpOworCV9fcmF3X3dyaXRldygwLCBGUEdBX0lOVE1TSzIpOwogCiAJLyogc2V0IEZQR0EgSU5UU0VMIHJlZ2lzdGVyICovCiAJLyogRlBHQSArIDB4MDYgKi8KLQljdHJsX291dHcoICgoSVJRUElOX1NNNTAxIDw8IElSUVBPU19TTTUwMSkgfAorCV9fcmF3X3dyaXRldyggKChJUlFQSU5fU001MDEgPDwgSVJRUE9TX1NNNTAxKSB8CiAJCShJUlFQSU5fU01DOTFDWCA8PCBJUlFQT1NfU01DOTFDWCkpLCBGUEdBX0lOVFNFTDEpOwogCiAJLyogRlBHQSArIDB4MDggKi8KLQljdHJsX291dHcoKChJUlFQSU5fRVhUSU5UNCA8PCBJUlFQT1NfRVhUSU5UNCkgfAorCV9fcmF3X3dyaXRldygoKElSUVBJTl9FWFRJTlQ0IDw8IElSUVBPU19FWFRJTlQ0KSB8CiAJCShJUlFQSU5fRVhUSU5UMyA8PCBJUlFQT1NfRVhUSU5UMykgfAogCQkoSVJRUElOX0VYVElOVDIgPDwgSVJRUE9TX0VYVElOVDIpIHwKIAkJKElSUVBJTl9FWFRJTlQxIDw8IElSUVBPU19FWFRJTlQxKSksIEZQR0FfSU5UU0VMMik7CiAKIAkvKiBGUEdBICsgMHgwQSAqLwotCWN0cmxfb3V0dygoSVJRUElOX1BDQ1BXIDw8IElSUVBPU19QQ0NQVyksIEZQR0FfSU5UU0VMMyk7CisJX19yYXdfd3JpdGV3KChJUlFQSU5fUENDUFcgPDwgSVJRUE9TX1BDQ1BXKSwgRlBHQV9JTlRTRUwzKTsKIAogCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsgLyogaW5zdGFsbCBoYW5kbGVycyBmb3IgSVJRMC03ICovCiAKIAkvKiBJQ1IxOiBkZXRlY3QgbG93IGxldmVsKGZvciAybmRjdXQpICovCi0JY3RybF9vdXRsKDB4QUFBQTAwMDAsIElOVENfSUNSMSk7CisJX19yYXdfd3JpdGVsKDB4QUFBQTAwMDAsIElOVENfSUNSMSk7CiAKIAkvKgogCSAqIEZQR0EgUENJU0VMIHJlZ2lzdGVyIGluaXRpYWxpemUKQEAgLTYzLDYgKzYzLDYgQEAKIAkgKiAgSU5URCB8fCBJTlREICB8IElOVEMgIHwgIC0tICAgfCBJTlRBCiAJICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKi8KLQljdHJsX291dHcoMHgwMDEzLCBGUEdBX1BDSV9JTlRTRUwxKTsKLQljdHJsX291dHcoMHhFNDAyLCBGUEdBX1BDSV9JTlRTRUwyKTsKKwlfX3Jhd193cml0ZXcoMHgwMDEzLCBGUEdBX1BDSV9JTlRTRUwxKTsKKwlfX3Jhd193cml0ZXcoMHhFNDAyLCBGUEdBX1BDSV9JTlRTRUwyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL3NldHVwLmMKaW5kZXggMWQzYTg2Ny4uNmY3YzIwNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL3NldHVwLmMKQEAgLTE3LDI2ICsxNywxNyBAQAogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KIAogLyogSGVhcnRiZWF0ICovCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gMTYsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgPSBQQV9MRUQsCi0JCS5lbmQgICAgPSBQQV9MRUQsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICA9IFBBX0xFRCwKKwkuZW5kICAgID0gUEFfTEVELAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAiaGVhcnRiZWF0IiwKIAkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSAxLAorCS5yZXNvdXJjZSAgICAgICA9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBTTUM5MXggKi8KQEAgLTg0LDE0ICs3NSwxNCBAQAogc3RhdGljIHZvaWQgX19pbml0IHNlNzc4MF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewogCS8qICJTSC1MaW51eCIgb24gTEVEIERpc3BsYXkgKi8KLQljdHJsX291dHcoICdTJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMF9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAnSCcgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDFfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJy0nICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwyX0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICdMJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMM19BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAnaScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDRfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ24nICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw1X0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICd1JyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNl9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAneCcgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDdfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ1MnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwwX0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICdIJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMV9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnLScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDJfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ0wnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwzX0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICdpJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNF9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnbicgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDVfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ3UnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw2X0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICd4JyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMN19BRERSIDw8IDEpICk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJIaXRhY2hpIFVMIFNvbHV0aW9ucyBFbmdpbmUgNzc4MFNFMDMgc3VwcG9ydC5cbiIpOwogCkBAIC0xMDIsMTUgKzkzLDE1IEBACiAJICogICBSRVEyL0dOVDIgLT4gU2VyaWFsIEFUQQogCSAqICAgUkVRMy9HTlQzIC0+IFBDSSBzbG90CiAJICovCi0JY3RybF9vdXR3KDB4MDIxMywgRlBHQV9SRVFTRUwpOworCV9fcmF3X3dyaXRldygweDAyMTMsIEZQR0FfUkVRU0VMKTsKIAogCS8qIEdQSU8gc2V0dGluZyAqLwotCWN0cmxfb3V0dygweDAwMDAsIEdQSU9fUEVDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KEdQSU9fUEhDUikmMHhmZmYzLCBHUElPX1BIQ1IpOwotCWN0cmxfb3V0dygweDBjMDAsIEdQSU9fUE1TRUxSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBHUElPX1BFQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhHUElPX1BIQ1IpJjB4ZmZmMywgR1BJT19QSENSKTsKKwlfX3Jhd193cml0ZXcoMHgwYzAwLCBHUElPX1BNU0VMUik7CiAKIAkvKiBpVkRSIFBvd2VyIE9OICovCi0JY3RybF9vdXR3KDB4MDAwMSwgRlBHQV9JVkRSUFcpOworCV9fcmF3X3dyaXRldygweDAwMDEsIEZQR0FfSVZEUlBXKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9ydGMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9ydGMuYwppbmRleCBhOGI5Zjg0Li4xYjIwMDk5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvcnRjLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDAzL3J0Yy5jCkBAIC00NCwxNSArNDQsMTUgQEAKIAlzcGluX2xvY2soJnNoMDNfcnRjX2xvY2spOwogIGFnYWluOgogCWRvIHsKLQkJc2VjICA9IChjdHJsX2luYihSVENfU0VDMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19TRUMxMCkgJiAweDcpICogMTA7Ci0JCW1pbiAgPSAoY3RybF9pbmIoUlRDX01JTjEpICYgMHhmKSArIChjdHJsX2luYihSVENfTUlOMTApICYgMHhmKSAqIDEwOwotCQlob3VyID0gKGN0cmxfaW5iKFJUQ19IT1UxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX0hPVTEwKSAmIDB4ZikgKiAxMDsKLQkJZGF5ICA9IChjdHJsX2luYihSVENfREFZMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19EQVkxMCkgJiAweGYpICogMTA7Ci0JCW1vbiAgPSAoY3RybF9pbmIoUlRDX01PTjEpICYgMHhmKSArIChjdHJsX2luYihSVENfTU9OMTApICYgMHhmKSAqIDEwOwotCQl5ZWFyID0gKGN0cmxfaW5iKFJUQ19ZRUExKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX1lFQTEwKSAmIDB4ZikgKiAxMAotCQkgICAgICsgKGN0cmxfaW5iKFJUQ19ZRUExMDAgKSAmIDB4ZikgKiAxMDAKLQkJICAgICArIChjdHJsX2luYihSVENfWUVBMTAwMCkgJiAweGYpICogMTAwMDsKLQl9IHdoaWxlIChzZWMgIT0gKGN0cmxfaW5iKFJUQ19TRUMxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX1NFQzEwKSAmIDB4NykgKiAxMCk7CisJCXNlYyAgPSAoX19yYXdfcmVhZGIoUlRDX1NFQzEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfU0VDMTApICYgMHg3KSAqIDEwOworCQltaW4gID0gKF9fcmF3X3JlYWRiKFJUQ19NSU4xKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX01JTjEwKSAmIDB4ZikgKiAxMDsKKwkJaG91ciA9IChfX3Jhd19yZWFkYihSVENfSE9VMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19IT1UxMCkgJiAweGYpICogMTA7CisJCWRheSAgPSAoX19yYXdfcmVhZGIoUlRDX0RBWTEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfREFZMTApICYgMHhmKSAqIDEwOworCQltb24gID0gKF9fcmF3X3JlYWRiKFJUQ19NT04xKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX01PTjEwKSAmIDB4ZikgKiAxMDsKKwkJeWVhciA9IChfX3Jhd19yZWFkYihSVENfWUVBMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19ZRUExMCkgJiAweGYpICogMTAKKwkJICAgICArIChfX3Jhd19yZWFkYihSVENfWUVBMTAwICkgJiAweGYpICogMTAwCisJCSAgICAgKyAoX19yYXdfcmVhZGIoUlRDX1lFQTEwMDApICYgMHhmKSAqIDEwMDA7CisJfSB3aGlsZSAoc2VjICE9IChfX3Jhd19yZWFkYihSVENfU0VDMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19TRUMxMCkgJiAweDcpICogMTApOwogCWlmICh5ZWFyID09IDAgfHwgbW9uIDwgMSB8fCBtb24gPiAxMiB8fCBkYXkgPiAzMSB8fCBkYXkgPCAxIHx8CiAJICAgIGhvdXIgPiAyMyB8fCBtaW4gPiA1OSB8fCBzZWMgPiA1OSkgewogCQlwcmludGsoS0VSTl9FUlIKQEAgLTYwLDE2ICs2MCwxNiBAQAogCQlwcmludGsoInllYXI9JWQsIG1vbj0lZCwgZGF5PSVkLCBob3VyPSVkLCBtaW49JWQsIHNlYz0lZFxuIiwKIAkJICAgICAgIHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYyk7CiAKLQkJY3RybF9vdXRiKDAsIFJUQ19TRUMxKTsgY3RybF9vdXRiKDAsIFJUQ19TRUMxMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfTUlOMSk7IGN0cmxfb3V0YigwLCBSVENfTUlOMTApOwotCQljdHJsX291dGIoMCwgUlRDX0hPVTEpOyBjdHJsX291dGIoMCwgUlRDX0hPVTEwKTsKLQkJY3RybF9vdXRiKDYsIFJUQ19XRUUxKTsKLQkJY3RybF9vdXRiKDEsIFJUQ19EQVkxKTsgY3RybF9vdXRiKDAsIFJUQ19EQVkxMCk7Ci0JCWN0cmxfb3V0YigxLCBSVENfTU9OMSk7IGN0cmxfb3V0YigwLCBSVENfTU9OMTApOwotCQljdHJsX291dGIoMCwgUlRDX1lFQTEpOyBjdHJsX291dGIoMCwgUlRDX1lFQTEwKTsKLQkJY3RybF9vdXRiKDAsIFJUQ19ZRUExMDApOwotCQljdHJsX291dGIoMiwgUlRDX1lFQTEwMDApOwotCQljdHJsX291dGIoMCwgUlRDX0NUTCk7CisJCV9fcmF3X3dyaXRlYigwLCBSVENfU0VDMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfU0VDMTApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX01JTjEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX01JTjEwKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19IT1UxKTsgX19yYXdfd3JpdGViKDAsIFJUQ19IT1UxMCk7CisJCV9fcmF3X3dyaXRlYig2LCBSVENfV0VFMSk7CisJCV9fcmF3X3dyaXRlYigxLCBSVENfREFZMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfREFZMTApOworCQlfX3Jhd193cml0ZWIoMSwgUlRDX01PTjEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX01PTjEwKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19ZRUExKTsgX19yYXdfd3JpdGViKDAsIFJUQ19ZRUExMCk7CisJCV9fcmF3X3dyaXRlYigwLCBSVENfWUVBMTAwKTsKKwkJX19yYXdfd3JpdGViKDIsIFJUQ19ZRUExMDAwKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19DVEwpOwogCQlnb3RvIGFnYWluOwogCX0KIApAQCAtOTMsOSArOTMsOSBAQAogCS8qIGdldHMgcmVjYWxsZWQgd2l0aCBpcnEgbG9jYWxseSBkaXNhYmxlZCAqLwogCXNwaW5fbG9jaygmc2gwM19ydGNfbG9jayk7CiAJZm9yIChpID0gMCA7IGkgPCAxMDAwMDAwIDsgaSsrKQkvKiBtYXkgdGFrZSB1cCB0byAxIHNlY29uZC4uLiAqLwotCQlpZiAoIShjdHJsX2luYihSVENfQ1RMKSAmIFJUQ19CVVNZKSkKKwkJaWYgKCEoX19yYXdfcmVhZGIoUlRDX0NUTCkgJiBSVENfQlVTWSkpCiAJCQlicmVhazsKLQljbW9zX21pbnV0ZXMgPSAoY3RybF9pbmIoUlRDX01JTjEpICYgMHhmKSArIChjdHJsX2luYihSVENfTUlOMTApICYgMHhmKSAqIDEwOworCWNtb3NfbWludXRlcyA9IChfX3Jhd19yZWFkYihSVENfTUlOMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19NSU4xMCkgJiAweGYpICogMTA7CiAJcmVhbF9zZWNvbmRzID0gbm93dGltZSAlIDYwOwogCXJlYWxfbWludXRlcyA9IG5vd3RpbWUgLyA2MDsKIAlpZiAoKChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSArIDE1KS8zMCkgJiAxKQpAQCAtMTAzLDEwICsxMDMsMTAgQEAKIAlyZWFsX21pbnV0ZXMgJT0gNjA7CiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewotCQljdHJsX291dGIocmVhbF9zZWNvbmRzICUgMTAsIFJUQ19TRUMxKTsKLQkJY3RybF9vdXRiKHJlYWxfc2Vjb25kcyAvIDEwLCBSVENfU0VDMTApOwotCQljdHJsX291dGIocmVhbF9taW51dGVzICUgMTAsIFJUQ19NSU4xKTsKLQkJY3RybF9vdXRiKHJlYWxfbWludXRlcyAvIDEwLCBSVENfTUlOMTApOworCQlfX3Jhd193cml0ZWIocmVhbF9zZWNvbmRzICUgMTAsIFJUQ19TRUMxKTsKKwkJX19yYXdfd3JpdGViKHJlYWxfc2Vjb25kcyAvIDEwLCBSVENfU0VDMTApOworCQlfX3Jhd193cml0ZWIocmVhbF9taW51dGVzICUgMTAsIFJUQ19NSU4xKTsKKwkJX19yYXdfd3JpdGViKHJlYWxfbWludXRlcyAvIDEwLCBSVENfTUlOMTApOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJzZXRfcnRjX21tc3M6IGNhbid0IHVwZGF0ZSBmcm9tICVkIHRvICVkXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDAzL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvc2V0dXAuYwppbmRleCA3NGNmYjRiLi5hZjRhMGMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvc2V0dXAuYwpAQCAtODIsNyArODIsNyBAQAogCS8qIG9wZW4gSS9PIGFyZWEgd2luZG93ICovCiAJcGFkZHJiYXNlID0gdmlydF90b19waHlzKCh2b2lkICopUEFfQVJFQTVfSU8pOwogCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoMSwgX1BBR0VfUENDX0lPMTYpOwotCWNmX2lkZV9iYXNlID0gcDNfaW9yZW1hcChwYWRkcmJhc2UsIFBBR0VfU0laRSwgcHJvdC5wZ3Byb3QpOworCWNmX2lkZV9iYXNlID0gaW9yZW1hcF9wcm90KHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwZ3Byb3RfdmFsKHByb3QpKTsKIAlpZiAoIWNmX2lkZV9iYXNlKSB7CiAJCXByaW50aygiYWxsb2NhdGVfY2ZfYXJlYSA6IGNhbid0IG9wZW4gQ0YgSS9PIHdpbmRvdyFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMKaW5kZXggZDhlYmZhNy4uYWRkNjk4YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMKQEAgLTI4LDE4ICsyOCwxOCBAQAogdm9pZCBfX2luaXQgaW5pdF9zaDc3NjNyZHBfSVJRKHZvaWQpCiB7CiAJLyogR1BJTyBlbmFibGVkICovCi0JY3RybF9vdXRsKDEgPDwgMjUsIElOVENfSU5UMk1TS0NSKTsKKwlfX3Jhd193cml0ZWwoMSA8PCAyNSwgSU5UQ19JTlQyTVNLQ1IpOwogCiAJLyogZW5hYmxlIEdQSU8gaW50ZXJydXB0cyAqLwotCWN0cmxfb3V0bCgoY3RybF9pbmwoSU5UQ19JTlQyUFJJNykgJiAweEZGMDBGRkZGKSB8IDB4MDAwRjAwMDAsCisJX19yYXdfd3JpdGVsKChfX3Jhd19yZWFkbChJTlRDX0lOVDJQUkk3KSAmIDB4RkYwMEZGRkYpIHwgMHgwMDBGMDAwMCwKIAkJICBJTlRDX0lOVDJQUkk3KTsKIAogCS8qIFVTQkggZW5hYmxlZCAqLwotCWN0cmxfb3V0bCgxIDw8IDE3LCBJTlRDX0lOVDJNU0tDUjEpOworCV9fcmF3X3dyaXRlbCgxIDw8IDE3LCBJTlRDX0lOVDJNU0tDUjEpOwogCiAJLyogR0VUSEVSIGVuYWJsZWQgKi8KLQljdHJsX291dGwoMSA8PCAxNiwgSU5UQ19JTlQyTVNLQ1IxKTsKKwlfX3Jhd193cml0ZWwoMSA8PCAxNiwgSU5UQ19JTlQyTVNLQ1IxKTsKIAogCS8qIERNQUMgZW5hYmxlZCAqLwotCWN0cmxfb3V0bCgxIDw8IDgsIElOVENfSU5UMk1TS0NSKTsKKwlfX3Jhd193cml0ZWwoMSA8PCA4LCBJTlRDX0lOVDJNU0tDUik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwppbmRleCAzOTA1MzRhLi5mNjRhNjkxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKQEAgLTE1OCw1MCArMTU4LDUwIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2g3NzYzcmRwX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJLyogQm9hcmQgdmVyc2lvbiBjaGVjayAqLwotCWlmIChjdHJsX2ludyhDUExEX0JPQVJEX0lEX0VSVl9SRUcpID09IDB4RUNCMSkKKwlpZiAoX19yYXdfcmVhZHcoQ1BMRF9CT0FSRF9JRF9FUlZfUkVHKSA9PSAweEVDQjEpCiAJCXByaW50ayhLRVJOX0lORk8gIlJURSBTdGFuZGFyZCBDb25maWd1cmF0aW9uXG4iKTsKIAllbHNlCiAJCXByaW50ayhLRVJOX0lORk8gIlJUQSBTdGFuZGFyZCBDb25maWd1cmF0aW9uXG4iKTsKIAogCS8qIFVTQiBwaW4gc2VsZWN0IGJpdHMgKGNsZWFyIGJpdCA1LTIgdG8gMCkgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTDIpICYgMHhGRkMzKSwgUE9SVF9QU0VMMik7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX1BTRUwyKSAmIDB4RkZDMyksIFBPUlRfUFNFTDIpOwogCS8qIFVTQkggc2V0dXAgcG9ydCBJIGNvbnRyb2xzIHRvIG90aGVyIChjbGVhciBiaXRzIDQtOSB0byAwKSAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BJQ1IpICYgMHhGQzBGLCBQT1JUX1BJQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BJQ1IpICYgMHhGQzBGLCBQT1JUX1BJQ1IpOwogCiAJLyogU2VsZWN0IFVTQiBIb3N0IGNvbnRyb2xsZXIgKi8KLQljdHJsX291dHcoMHgwMCwgVVNCX1VTQkhTQyk7CisJX19yYXdfd3JpdGV3KDB4MDAsIFVTQl9VU0JIU0MpOwogCiAJLyogRm9yIExDRCAqLwogCS8qIHNldCBQVEo3LTEsIGJpdHMgMTUtMiBvZiBQSkNSIHRvIDAgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QSkNSKSAmIDB4MDAwMywgUE9SVF9QSkNSKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9QSkNSKSAmIDB4MDAwMywgUE9SVF9QSkNSKTsKIAkvKiBzZXQgUFRJNSwgYml0cyAxMS0xMCBvZiBQSUNSIHRvIDAgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QSUNSKSAmIDB4RjNGRiwgUE9SVF9QSUNSKTsKLQljdHJsX291dHcoMCwgUE9SVF9QS0NSKTsKLQljdHJsX291dHcoMCwgUE9SVF9QTENSKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9QSUNSKSAmIDB4RjNGRiwgUE9SVF9QSUNSKTsKKwlfX3Jhd193cml0ZXcoMCwgUE9SVF9QS0NSKTsKKwlfX3Jhd193cml0ZXcoMCwgUE9SVF9QTENSKTsKIAkvKiBzZXQgUFNFTDIgYml0cyAxNC04LCA1LTQsIG9mIFBTRUwyIHRvIDAgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTDIpICYgMHgwMEMwKSwgUE9SVF9QU0VMMik7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX1BTRUwyKSAmIDB4MDBDMCksIFBPUlRfUFNFTDIpOwogCS8qIHNldCBQU0VMMyBiaXRzIDE0LTEyLCA2LTQsIDItMCBvZiBQU0VMMyB0byAwICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTRUwzKSAmIDB4MDcwMCksIFBPUlRfUFNFTDMpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9QU0VMMykgJiAweDA3MDApLCBQT1JUX1BTRUwzKTsKIAogCS8qIEZvciBIQUMgKi8KIAkvKiBiaXQzLTAgIDAxMDA6SEFDICYgU1NJMSBlbmFibGUgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTDEpICYgMHhGRkYwKSB8IDB4MDAwNCwgUE9SVF9QU0VMMSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX1BTRUwxKSAmIDB4RkZGMCkgfCAweDAwMDQsIFBPUlRfUFNFTDEpOwogCS8qIGJpdDE0ICAgICAgMTpTU0lfSEFDX0NMSyBlbmFibGUgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QU0VMNCkgfCAweDQwMDAsIFBPUlRfUFNFTDQpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BTRUw0KSB8IDB4NDAwMCwgUE9SVF9QU0VMNCk7CiAKIAkvKiBTSC1FdGhlciAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMSkgJiB+MHhmZjAwKSB8IDB4MjQwMCwgUE9SVF9QU0VMMSk7Ci0JY3RybF9vdXR3KDB4MCwgUE9SVF9QRkNSKTsKLQljdHJsX291dHcoMHgwLCBQT1JUX1BGQ1IpOwotCWN0cmxfb3V0dygweDAsIFBPUlRfUEZDUik7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX1BTRUwxKSAmIH4weGZmMDApIHwgMHgyNDAwLCBQT1JUX1BTRUwxKTsKKwlfX3Jhd193cml0ZXcoMHgwLCBQT1JUX1BGQ1IpOworCV9fcmF3X3dyaXRldygweDAsIFBPUlRfUEZDUik7CisJX19yYXdfd3JpdGV3KDB4MCwgUE9SVF9QRkNSKTsKIAogCS8qIE1NQyAqLwogCS8qc2VsZWN0cyBTQ0lGIGFuZCBNTUMgb3RoZXIgZnVuY3Rpb25zICovCi0JY3RybF9vdXR3KDB4MDAwMSwgUE9SVF9QU0VMMCk7CisJX19yYXdfd3JpdGV3KDB4MDAwMSwgUE9SVF9QU0VMMCk7CiAJLyogTU1DIGNsb2NrIG9wZXJhdGVzICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKE1TVFBDUjEpICYgfjB4OCwgTVNUUENSMSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEFDUikgJiB+MHgzMDAwLCBQT1JUX1BBQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BDQ1IpICYgfjB4Q0ZDMywgUE9SVF9QQ0NSKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoTVNUUENSMSkgJiB+MHg4LCBNU1RQQ1IxKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9QQUNSKSAmIH4weDMwMDAsIFBPUlRfUEFDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfUENDUikgJiB+MHhDRkMzLCBQT1JUX1BDQ1IpOwogfQogCiBzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3NoNzc2M3JkcCBfX2luaXRtdiA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYwppbmRleCBhMzI3N2EyLi4zMzE3NDVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNuYXBnZWFyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jCkBAIC0zMCw3ICszMCw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBlcmFzZWNvbmZpZ19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCSh2b2lkKWN0cmxfaW5iKDB4YjgwMDAwMDApOwkvKiBkdW1teSByZWFkICovCisJKHZvaWQpX19yYXdfcmVhZGIoMHhiODAwMDAwMCk7CS8qIGR1bW15IHJlYWQgKi8KIAogCXByaW50aygiU25hcEdlYXI6IGVyYXNlIHN3aXRjaCBpbnRlcnJ1cHQhXG4iKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jCmluZGV4IDk4NmEwZTcuLjUyM2FlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKQEAgLTQxLDEzICs0MSwxMyBAQAogCQl1bnNpZ25lZCBsb25nIHZhbCwgbWFzayA9IDB4MDEgPDwgMTsKIAogCQkvKiBDbGVhciB0aGUgImlycSJ0aCBiaXQgaW4gdGhlIG1hc2sgYW5kIHNldCBpdCBpbiB0aGUgcmVxdWVzdCAqLwotCQl2YWwgPSBjdHJsX2lubCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKKwkJdmFsID0gX19yYXdfcmVhZGwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CiAJCXZhbCAmPSB+bWFzazsKLQkJY3RybF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CisJCV9fcmF3X3dyaXRlbCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOwogCi0JCXZhbCA9IGN0cmxfaW5sKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOworCQl2YWwgPSBfX3Jhd19yZWFkbCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9yZXF1ZXN0X3JlZ2lzdGVyKTsKIAkJdmFsIHw9IG1hc2s7Ci0JCWN0cmxfb3V0bCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOworCQlfX3Jhd193cml0ZWwodmFsLCAodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9yZXF1ZXN0X3JlZ2lzdGVyKTsKIAl9CiB9CiAKQEAgLTU3LDkgKzU3LDkgQEAKIAkJdW5zaWduZWQgbG9uZyB2YWwsIG1hc2sgPSAweDAxIDw8IDE7CiAKIAkJLyogU2V0ICJpcnEidGggYml0IGluIHRoZSBtYXNrIHJlZ2lzdGVyICovCi0JCXZhbCA9IGN0cmxfaW5sKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOworCQl2YWwgPSBfX3Jhd19yZWFkbCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKIAkJdmFsIHw9IG1hc2s7Ci0JCWN0cmxfb3V0bCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOworCQlfX3Jhd193cml0ZWwodmFsLCAodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGQ3NTM3Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBOaW1ibGUgTWljcm9zeXN0ZW1zIFRJVEFOIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKLSMKLQotb2JqLXkJIDo9IHNldHVwLm8gaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTMwZTk4Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICoJSS9PIHJvdXRpbmVzIGZvciBUaXRhbgotICovCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8bWFjaC90aXRhbi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKLXsKLSAgICAgICAgbWF5YmViYWRpbygodW5zaWduZWQgbG9uZylwb3J0KTsKLSAgICAgICAgcmV0dXJuIHBvcnQ7Ci19Ci0KLXU4IHRpdGFuX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0gICAgICAgIGlmIChQWFNFRyhwb3J0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmIocG9ydCk7Ci0gICAgICAgIHJldHVybiBjdHJsX2ludyhwb3J0MmFkcihwb3J0KSkgJiAweGZmOwotfQotCi11OCB0aXRhbl9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0gICAgICAgIHU4IHY7Ci0KLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHYgPSBjdHJsX2luYihwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHYgPSBjdHJsX2ludyhwb3J0MmFkcihwb3J0KSkgJiAweGZmOwotICAgICAgICBjdHJsX2RlbGF5KCk7Ci0gICAgICAgIHJldHVybiB2OwotfQotCi11MTYgdGl0YW5faW53KHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2ludyhwb3J0KTsKLSAgICAgICAgZWxzZSBpZiAocG9ydCA+PSAweDIwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi11MzIgdGl0YW5faW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2lubChwb3J0KTsKLSAgICAgICAgZWxzZSBpZiAocG9ydCA+PSAweDIwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi12b2lkIHRpdGFuX291dGIodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0Yih2YWx1ZSwgcG9ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKLX0KLQotdm9pZCB0aXRhbl9vdXRiX3AodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0Yih2YWx1ZSwgcG9ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKLSAgICAgICAgY3RybF9kZWxheSgpOwotfQotCi12b2lkIHRpdGFuX291dHcodTE2IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0gICAgICAgIGlmIChQWFNFRyhwb3J0KSkKLSAgICAgICAgICAgICAgICBjdHJsX291dHcodmFsdWUsIHBvcnQpOwotICAgICAgICBlbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKLSAgICAgICAgICAgICAgICBjdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0bCh1MzIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0bCh2YWx1ZSwgcG9ydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtYXliZWJhZGlvKHBvcnQpOwotfQotCi12b2lkIHRpdGFuX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0gICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0gICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgX19pb21lbSAqdGl0YW5faW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBzaXplKQotewotCWlmIChQWFNFRyhwb3J0KSkKLQkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilwb3J0OwotCi0JcmV0dXJuICh2b2lkIF9faW9tZW0gKilwb3J0MmFkcihwb3J0KTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFlN2UwZi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogYXJjaC9zaC9ib2FyZHMvdGl0YW4vc2V0dXAuYyAtIFNldHVwIGZvciBUaXRhbgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIEphbWllIExlbmVoYW4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3RpdGFuLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3RpdGFuX2lycSh2b2lkKQotewotCS8qIGVuYWJsZSBpbmRpdmlkdWFsIGludGVycnVwdCBtb2RlIGZvciBleHRlcm5hbHMgKi8KLQlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSUSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfdGl0YW4gX19pbml0bXYgPSB7Ci0JLm12X25hbWUgPQkiVGl0YW4iLAotCi0JLm12X2luYiA9CXRpdGFuX2luYiwKLQkubXZfaW53ID0JdGl0YW5faW53LAotCS5tdl9pbmwgPQl0aXRhbl9pbmwsCi0JLm12X291dGIgPQl0aXRhbl9vdXRiLAotCS5tdl9vdXR3ID0JdGl0YW5fb3V0dywKLQkubXZfb3V0bCA9CXRpdGFuX291dGwsCi0KLQkubXZfaW5iX3AgPQl0aXRhbl9pbmJfcCwKLQkubXZfaW53X3AgPQl0aXRhbl9pbncsCi0JLm12X2lubF9wID0JdGl0YW5faW5sLAotCS5tdl9vdXRiX3AgPQl0aXRhbl9vdXRiX3AsCi0JLm12X291dHdfcCA9CXRpdGFuX291dHcsCi0JLm12X291dGxfcCA9CXRpdGFuX291dGwsCi0KLQkubXZfaW5zbCA9CXRpdGFuX2luc2wsCi0JLm12X291dHNsID0JdGl0YW5fb3V0c2wsCi0KLQkubXZfaW9wb3J0X21hcCA9IHRpdGFuX2lvcG9ydF9tYXAsCi0KLQkubXZfaW5pdF9pcnEgPQlpbml0X3RpdGFuX2lycSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXgzcHJvdG8vaWxzZWwuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9pbHNlbC5jCmluZGV4IGI1YzY3M2MuLjVjOTg0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9pbHNlbC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9pbHNlbC5jCkBAIC03MCwxMCArNzAsMTAgQEAKIAlwcl9kZWJ1ZygiJXM6IGJpdCMlZDogYWRkciAtIDB4JTA4bHggKHNoaWZ0ICVkLCBzZXQgJWQpXG4iLAogCQkgX19mdW5jX18sIGJpdCwgYWRkciwgc2hpZnQsIHNldCk7CiAKLQl0bXAgPSBjdHJsX2ludyhhZGRyKTsKKwl0bXAgPSBfX3Jhd19yZWFkdyhhZGRyKTsKIAl0bXAgJj0gfigweGYgPDwgc2hpZnQpOwogCXRtcCB8PSBzZXQgPDwgc2hpZnQ7Ci0JY3RybF9vdXR3KHRtcCwgYWRkcik7CisJX19yYXdfd3JpdGV3KHRtcCwgYWRkcik7CiB9CiAKIC8qKgpAQCAtMTQyLDkgKzE0Miw5IEBACiAKIAlhZGRyID0gbWtfaWxzZWxfYWRkcihpcnEpOwogCi0JdG1wID0gY3RybF9pbncoYWRkcik7CisJdG1wID0gX19yYXdfcmVhZHcoYWRkcik7CiAJdG1wICY9IH4oMHhmIDw8IG1rX2lsc2VsX3NoaWZ0KGlycSkpOwotCWN0cmxfb3V0dyh0bXAsIGFkZHIpOworCV9fcmF3X3dyaXRldyh0bXAsIGFkZHIpOwogCiAJY2xlYXJfYml0KGlycSwgJmlsc2VsX2xldmVsX21hcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXgzcHJvdG8vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9zZXR1cC5jCmluZGV4IGVmZTRjYjkuLmUyODQ1OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9zZXR1cC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDMyMTApOwogCiAJLyogU2V0IElDUjAuTFZMTU9ERSAqLwotCWN0cmxfb3V0bChjdHJsX2lubCgweGZlNDEwMDAwKSB8ICgxIDw8IDIxKSwgMHhmZTQxMDAwMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKDB4ZmU0MTAwMDApIHwgKDEgPDwgMjEpLCAweGZlNDEwMDAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl94M3Byb3RvIF9faW5pdG12ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L01ha2VmaWxlIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCmluZGV4IGNiOGNmNTUuLjFjZTYzNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKQEAgLTIxLDEyICsyMSwxNSBAQAogQ09ORklHX0VOVFJZX09GRlNFVAk/PSAweDAwMDAxMDAwCiAKIHN1ZmZpeC15IDo9IGJpbgotc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKSAgOj0gZ3oKLXN1ZmZpeC0kKENPTkZJR19LRVJORUxfQlpJUDIpIDo9IGJ6Mgotc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk1BKSAgOj0gbHptYQorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKQk6PSBnegorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikJOj0gYnoyCitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpCTo9IGx6bWEKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpPKQk6PSBsem8KIAotdGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UuYmluCi1leHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hCit0YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiBcCisJICAgdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UubHpvIHVJbWFnZS5iaW4KK2V4dHJhLXkgKz0gdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgXAorCSAgIHZtbGludXguYmluLmx6bwogc3ViZGlyLSA6PSBjb21wcmVzc2VkIHJvbWltYWdlCiAKICQob2JqKS96SW1hZ2U6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXggRk9SQ0UKQEAgLTQzLDE1ICs0Niw4IEBACiAkKG9iaikvcm9taW1hZ2Uvdm1saW51eDogJChvYmopL3pJbWFnZSBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9yb21pbWFnZSAkQAogCi1LRVJORUxfTUVNT1JZIDo9IDB4MDAwMDAwMDAKLWlmZXEgKCQoQ09ORklHX1BNQl9GSVhFRCkseSkKLUtFUk5FTF9NRU1PUlkgOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCitLRVJORUxfTUVNT1JZCTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAogCQkgICAgICQkWyQoQ09ORklHX01FTU9SWV9TVEFSVCkgJiAweDFmZmZmZmZmXScpCi1lbmRpZgotaWZlcSAoJChDT05GSUdfMjlCSVQpLHkpCi1LRVJORUxfTUVNT1JZIDo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAotCQkgICAgICQkWyQoQ09ORklHX01FTU9SWV9TVEFSVCldJykKLWVuZGlmCiAKIEtFUk5FTF9MT0FECTo9ICQoc2hlbGwgL2Jpbi9iYXNoIC1jICdwcmludGYgIjB4JTA4eCIgXAogCQkgICAgICQkWyQoQ09ORklHX1BBR0VfT0ZGU0VUKSAgKyBcCkBAIC04MCw2ICs3Niw5IEBACiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJChvYmopL3ZtbGludXguYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKIAorJChvYmopL3ZtbGludXguYmluLmx6bzogJChvYmopL3ZtbGludXguYmluIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsbHpvKQorCiAkKG9iaikvdUltYWdlLmJ6MjogJChvYmopL3ZtbGludXguYmluLmJ6MgogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxiemlwMikKIApAQCAtODksNiArODgsOSBAQAogJChvYmopL3VJbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdUltYWdlLmx6bzogJChvYmopL3ZtbGludXguYmluLmx6bworCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem8pCisKICQob2JqKS91SW1hZ2UuYmluOiAkKG9iaikvdm1saW51eC5iaW4KIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2Usbm9uZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA2MTgyZWNhLi41ZDY2MGI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNiwxNCArNiwxMSBAQAogCiB0YXJnZXRzCQk6PSB2bWxpbnV4IHZtbGludXguYmluIHZtbGludXguYmluLmd6IFwKIAkJICAgdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgXAorCQkgICB2bWxpbnV4LmJpbi5sem8gXAogCQkgICBoZWFkXyQoQklUUykubyBtaXNjLm8gcGlnZ3kubwogCiBPQkpFQ1RTID0gJChvYmopL2hlYWRfJChCSVRTKS5vICQob2JqKS9taXNjLm8gJChvYmopL2NhY2hlLm8KIAotaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKLU9CSkVDVFMgKz0gJChvYmopLy4uLy4uL2tlcm5lbC9zaF9iaW9zLm8KLWVuZGlmCi0KICMKICMgSU1BR0VfT0ZGU0VUIGlzIHRoZSBsb2FkIG9mZnNldCBvZiB0aGUgY29tcHJlc3Npb24gbG9hZGVyCiAjCkBAIC00Nyw2ICs0NCw4IEBACiAJJChjYWxsIGlmX2NoYW5nZWQsYnppcDIpCiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQorJChvYmopL3ZtbGludXguYmluLmx6bzogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem8pCiAKIE9CSkNPUFlGTEFHUyArPSAtUiAuZW1wdHlfemVyb19wYWdlCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCBiNTFiMWZjLi4yNzE0MGE2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgogCiAvKgogICogZ3ppcCBkZWNsYXJhdGlvbnMKQEAgLTYyLDI5ICs2MSwxNSBAQAogI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHptYS5jIgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwotc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQotewotCWludCBpID0gMDsKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0xaTworI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHpvLmMiCisjZW5kaWYKIAotCXdoaWxlICgqcysrKQotCQlpKys7Ci0JcmV0dXJuIGk7Ci19Ci0KLWludCBwdXRzKGNvbnN0IGNoYXIgKnMpCi17Ci0JaW50IGxlbiA9IHN0cmxlbihzKTsKLQlzaF9iaW9zX2NvbnNvbGVfd3JpdGUocywgbGVuKTsKLQlyZXR1cm4gbGVuOwotfQotI2Vsc2UKIGludCBwdXRzKGNvbnN0IGNoYXIgKnMpCiB7CiAJLyogVGhpcyBzaG91bGQgYmUgdXBkYXRlZCB0byB1c2UgdGhlIHNoLXNjaSByb3V0aW5lcyAqLwogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHZvaWQqIG1lbXNldCh2b2lkKiBzLCBpbnQgYywgc2l6ZV90IG4pCiB7CkBAIC0xMzIsNyArMTE3LDcgQEAKIAlvdXRwdXRfYWRkciA9IChDT05GSUdfTUVNT1JZX1NUQVJUICsgMHgyMDAwKTsKICNlbHNlCiAJb3V0cHV0X2FkZHIgPSBfX3BhKCh1bnNpZ25lZCBsb25nKSZfdGV4dCtQQUdFX1NJWkUpOwotI2lmZGVmIENPTkZJR18yOUJJVAorI2lmIGRlZmluZWQoQ09ORklHXzI5QklUKQogCW91dHB1dF9hZGRyIHw9IFAyU0VHOwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKaW5kZXggNTBhYTBjMS4uYmNiMzFhZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMKQEAgLTU1LDI1ICs1NSwyMiBAQAogCiBzdGF0aWMgdm9pZCBoZDY0NDYxX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KEhENjQ0NjFfTklSUik7Ci0Jc3RydWN0IGlycV9kZXNjICpleHRfZGVzYzsKKwl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gX19yYXdfcmVhZHcoSEQ2NDQ2MV9OSVJSKTsKIAl1bnNpZ25lZCBpbnQgZXh0X2lycSA9IEhENjQ0NjFfSVJRQkFTRTsKIAogCWludHYgJj0gKDEgPDwgSEQ2NDQ2MV9JUlFfTlVNKSAtIDE7CiAKLQl3aGlsZSAoaW50dikgewotCQlpZiAoaW50diAmIDEpIHsKLQkJCWV4dF9kZXNjID0gaXJxX2Rlc2MgKyBleHRfaXJxOwotCQkJaGFuZGxlX2xldmVsX2lycShleHRfaXJxLCBleHRfZGVzYyk7Ci0JCX0KLQkJaW50diA+Pj0gMTsKLQkJZXh0X2lycSsrOworCWZvciAoOyBpbnR2OyBpbnR2ID4+PSAxLCBleHRfaXJxKyspIHsKKwkJaWYgKCEoaW50diAmIDEpKQorCQkJY29udGludWU7CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGV4dF9pcnEpOwogCX0KIH0KIAogaW50IF9faW5pdCBzZXR1cF9oZDY0NDYxKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGksIG5pZCA9IGNwdV90b19ub2RlKGJvb3RfY3B1X2RhdGEpOwogCiAJaWYgKCFNQUNIX0hENjQ0NjEpCiAJCXJldHVybiAwOwpAQCAtOTAsOSArODcsMjYgQEAKIAlfX3Jhd193cml0ZXcoMHhmZmZmLCBIRDY0NDYxX05JTVIpOwogCiAJLyogIElSUSA4MCAtPiA5NSBiZWxvbmdzIHRvIEhENjQ0NjEgICovCi0JZm9yIChpID0gSEQ2NDQ2MV9JUlFCQVNFOyBpIDwgSEQ2NDQ2MV9JUlFCQVNFICsgMTY7IGkrKykKKwlmb3IgKGkgPSBIRDY0NDYxX0lSUUJBU0U7IGkgPCBIRDY0NDYxX0lSUUJBU0UgKyAxNjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBpcnE7CisKKwkJaXJxID0gY3JlYXRlX2lycV9ucihpLCBuaWQpOworCQlpZiAodW5saWtlbHkoaXJxID09IDApKSB7CisJCQlwcl9lcnIoIiVzOiBmYWlsZWQgaG9va2luZyBpcnEgJWQgZm9yIEhENjQ0NjFcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGkpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCWlmICh1bmxpa2VseShpcnEgIT0gaSkpIHsKKwkJCXByX2VycigiJXM6IGdvdCBpcnEgJWQgYnV0IHdhbnRlZCAlZCwgYmFpbGluZy5cbiIsCisJCQkgICAgICAgX19mdW5jX18sIGlycSwgaSk7CisJCQlkZXN0cm95X2lycShpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmhkNjQ0NjFfaXJxX2NoaXAsCiAJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKKwl9CiAKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihDT05GSUdfSEQ2NDQ2MV9JUlEsIGhkNjQ0NjFfaXJxX2RlbXV4KTsKIAlzZXRfaXJxX3R5cGUoQ09ORklHX0hENjQ0NjFfSVJRLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMzMxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWcKQEAgLTAsMCArMSwxNzU0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM3CisjIFR1ZSBGZWIgIDkgMTU6Mjc6MDYgMjAxMAorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfU1VQRVJIMzI9eQorIyBDT05GSUdfU1VQRVJINjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWciCitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TUEFSU0VfSVJRPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CitDT05GSUdfU1lTX1NVUFBPUlRTX1NNUD15CitDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQorQ09ORklHX0RNQV9DT0hFUkVOVD15CisjIENPTkZJR19ETUFfTk9OQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfVFJBQ0U9eQorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVX1RSQUNFPXkKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19SVF9HUk9VUF9TQ0hFRD15CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUFM9eQorIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBfTlM9eQorQ09ORklHX0NHUk9VUF9GUkVFWkVSPXkKK0NPTkZJR19DR1JPVVBfREVWSUNFPXkKKyMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKK0NPTkZJR19SRVNPVVJDRV9DT1VOVEVSUz15CitDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUj15CisjIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01NX09XTkVSPXkKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorQ09ORklHX1VUU19OUz15CitDT05GSUdfSVBDX05TPXkKK0NPTkZJR19VU0VSX05TPXkKK0NPTkZJR19QSURfTlM9eQorQ09ORklHX05FVF9OUz15CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CisjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVD15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0NHUk9VUD15CisjIENPTkZJR19ERUJVR19CTEtfQ0dST1VQIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfQ0ZRX0dST1VQX0lPU0NIRUQ9eQorIyBDT05GSUdfREVCVUdfQ0ZRX0lPU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKK0NPTkZJR19DUFVfU0g0QT15CitDT05GSUdfQ1BVX1NIWDM9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODY9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX01FTU9SWV9TVEFSVD0weDYwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgyMDAwMDAwMAorIyBDT05GSUdfMjlCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKK0NPTkZJR19QTUI9eQorIyBDT05GSUdfUE1CX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfWDJUTEI9eQorQ09ORklHX1ZTWVNDQUxMPXkKKyMgQ09ORklHX05VTUEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTEKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9NRU1PUllfUFJPQkU9eQorQ09ORklHX0lPUkVNQVBfRklYRUQ9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEsgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMjU2SyBpcyBub3Qgc2V0CitDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMk1CIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CitDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MQorQ09ORklHX0tTTT15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCitDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKKyMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9GUFU9eQorQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorQ09ORklHX0NQVV9IQVNfUFRFQUVYPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIX1NESzc3ODY9eQorIyBDT05GSUdfU0hfVVJRVUVMTCBpcyBub3Qgc2V0CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9USU1FUl9UTVU9eQorQ09ORklHX1NIX0NMS19DUEc9eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPW0KK0NPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KK0NPTkZJR19TSF9DUFVfRlJFUT15CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19IRUFSVEJFQVQ9eQorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19HVVNBPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKK0NPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgZWFybHlwcmludGs9c2gtc2NpLjEsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIG5taV9kZWJ1Zz1zdGF0ZSxkZWJvdW5jZSByb290ZGVsYXk9MTAiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFX0VDUkMgaXMgbm90IHNldAorQ09ORklHX1BDSUVBRVJfSU5KRUNUPXkKK0NPTkZJR19QQ0lFQVNQTT15CitDT05GSUdfUENJRUFTUE1fREVCVUc9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0RFQlVHPXkKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfUE09eQorQ09ORklHX1BNX0RFQlVHPXkKK0NPTkZJR19QTV9WRVJCT1NFPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKK0NPTkZJR19DUFVfSURMRT15CitDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CitDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKK0NPTkZJR19TQVRBX1BNUD15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorQ09ORklHX1NBVEFfU0lMMjQ9eQorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX1BMQVRGT1JNPXkKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTURJT19CSVRCQU5HPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TSF9NU0lPRiBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU0hfU0NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NIX01PQklMRV9TREhJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX1ZHQV9BUkI9eQorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9NNjY1OTI9eQorQ09ORklHX1VTQl9NNjY1OTI9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTUFYNjkwMD15CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9TSD15CisjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19VSU89bQorIyBDT05GSUdfVUlPX0NJRiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1NNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fQUVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QQ0lfR0VORVJJQyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19IVUdFVExCRlM9eQorQ09ORklHX0hVR0VUTEJfUEFHRT15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVk09eQorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKK0NPTkZJR19LU1lNX1RSQUNFUj15CisjIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CitDT05GSUdfRFVNUF9DT0RFPXkKK0NPTkZJR19EV0FSRl9VTldJTkRFUj15CisjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYwppbmRleCAzOTFjYmUxLi4zY2VlNThlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jCkBAIC00MCwxMCArNDAsMTAgQEAKIAogc3RhdGljIGludCBwdnIyX3JlcXVlc3RfZG1hKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKIHsKLQlpZiAoY3RybF9pbmwoUFZSMl9ETUFfTU9ERSkgIT0gMCkKKwlpZiAoX19yYXdfcmVhZGwoUFZSMl9ETUFfTU9ERSkgIT0gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWN0cmxfb3V0bCgwLCBQVlIyX0RNQV9MTU1PREUwKTsKKwlfX3Jhd193cml0ZWwoMCwgUFZSMl9ETUFfTE1NT0RFMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYwLDkgKzYwLDkgQEAKIAogCXhmZXJfY29tcGxldGUgPSAwOwogCi0JY3RybF9vdXRsKGNoYW4tPmRhciwgUFZSMl9ETUFfQUREUik7Ci0JY3RybF9vdXRsKGNoYW4tPmNvdW50LCBQVlIyX0RNQV9DT1VOVCk7Ci0JY3RybF9vdXRsKGNoYW4tPm1vZGUgJiBETUFfTU9ERV9NQVNLLCBQVlIyX0RNQV9NT0RFKTsKKwlfX3Jhd193cml0ZWwoY2hhbi0+ZGFyLCBQVlIyX0RNQV9BRERSKTsKKwlfX3Jhd193cml0ZWwoY2hhbi0+Y291bnQsIFBWUjJfRE1BX0NPVU5UKTsKKwlfX3Jhd193cml0ZWwoY2hhbi0+bW9kZSAmIERNQV9NT0RFX01BU0ssIFBWUjJfRE1BX01PREUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwppbmRleCAzN2ZiNWI4Li44MjcyMDg3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKQEAgLTUyLDExICs1MiwxNCBAQAogICoKICAqIGl0ZXJhdGlvbnMgdG8gY29tcGxldGUgdGhlIHRyYW5zZmVyLgogICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gPSBUU19TSElGVDsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JdTMyIGNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJdTMyIGNoY3IgPSBfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJaW50IGNudCA9ICgoY2hjciAmIENIQ1JfVFNfTE9XX01BU0spID4+IENIQ1JfVFNfTE9XX1NISUZUKSB8CisJCSgoY2hjciAmIENIQ1JfVFNfSElHSF9NQVNLKSA+PiBDSENSX1RTX0hJR0hfU0hJRlQpOwogCi0JcmV0dXJuIHRzX3NoaWZ0WyhjaGNyICYgQ0hDUl9UU19NQVNLKT4+Q0hDUl9UU19TSElGVF07CisJcmV0dXJuIHRzX3NoaWZ0W2NudF07CiB9CiAKIC8qCkBAIC03MCwxMyArNzMsMTMgQEAKIAlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4gPSBkZXZfaWQ7CiAJdTMyIGNoY3I7CiAKLQljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOworCWNoY3IgPSBfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAKIAlpZiAoIShjaGNyICYgQ0hDUl9URSkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWNoY3IgJj0gfihDSENSX0lFIHwgQ0hDUl9ERSk7Ci0JY3RybF9vdXRsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOworCV9fcmF3X3dyaXRlbChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKIAogCXdha2VfdXAoJmNoYW4tPndhaXRfcXVldWUpOwogCkBAIC0xMTUsNyArMTE4LDcgQEAKIAkJY2hhbi0+ZmxhZ3MgJj0gfkRNQV9URUlfQ0FQQUJMRTsKIAl9CiAKLQljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CisJX19yYXdfd3JpdGVsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJY2hhbi0+ZmxhZ3MgfD0gRE1BX0NPTkZJR1VSRUQ7CiAJcmV0dXJuIDA7CkBAIC0xMjYsMTMgKzEyOSwxMyBAQAogCWludCBpcnE7CiAJdTMyIGNoY3I7CiAKLQljaGNyID0gY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOworCWNoY3IgPSBfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CiAJY2hjciB8PSBDSENSX0RFOwogCiAJaWYgKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKQogCQljaGNyIHw9IENIQ1JfSUU7CiAKLQljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CisJX19yYXdfd3JpdGVsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJaWYgKGNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKSB7CiAJCWlycSA9IGdldF9kbXRlX2lycShjaGFuLT5jaGFuKTsKQEAgLTE1MCw5ICsxNTMsOSBAQAogCQlkaXNhYmxlX2lycShpcnEpOwogCX0KIAotCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJY2hjciA9IF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAljaGNyICY9IH4oQ0hDUl9ERSB8IENIQ1JfVEUgfCBDSENSX0lFKTsKLQljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CisJX19yYXdfd3JpdGVsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogfQogCiBzdGF0aWMgaW50IHNoX2RtYWNfeGZlcl9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQpAQCAtMTgzLDEyICsxODYsMTIgQEAKIAkgKi8KIAlpZiAoY2hhbi0+c2FyIHx8IChtYWNoX2lzX2RyZWFtY2FzdCgpICYmCiAJCQkgIGNoYW4tPmNoYW4gPT0gUFZSMl9DQVNDQURFX0NIQU4pKQotCQljdHJsX291dGwoY2hhbi0+c2FyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXStTQVIpKTsKKwkJX19yYXdfd3JpdGVsKGNoYW4tPnNhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0rU0FSKSk7CiAJaWYgKGNoYW4tPmRhciB8fCAobWFjaF9pc19kcmVhbWNhc3QoKSAmJgogCQkJICBjaGFuLT5jaGFuID09IFBWUjJfQ0FTQ0FERV9DSEFOKSkKLQkJY3RybF9vdXRsKGNoYW4tPmRhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBEQVIpKTsKKwkJX19yYXdfd3JpdGVsKGNoYW4tPmRhciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBEQVIpKTsKIAotCWN0cmxfb3V0bChjaGFuLT5jb3VudCA+PiBjYWxjX3htaXRfc2hpZnQoY2hhbiksCisJX19yYXdfd3JpdGVsKGNoYW4tPmNvdW50ID4+IGNhbGNfeG1pdF9zaGlmdChjaGFuKSwKIAkJKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpKTsKIAogCXNoX2RtYWNfZW5hYmxlX2RtYShjaGFuKTsKQEAgLTE5OCwxMCArMjAxLDEwIEBACiAKIHN0YXRpYyBpbnQgc2hfZG1hY19nZXRfZG1hX3Jlc2lkdWUoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCWlmICghKGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSAmIENIQ1JfREUpKQorCWlmICghKF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSAmIENIQ1JfREUpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgVENSKQorCXJldHVybiBfX3Jhd19yZWFkbChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgVENSKQogCQkgPDwgY2FsY194bWl0X3NoaWZ0KGNoYW4pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYWJyZy5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWFicmcuYwppbmRleCA1ZTIyNjg5Li43MjYyMmUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYWJyZy5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hYnJnLmMKQEAgLTg2LDggKzg2LDggQEAKIAl1bnNpZ25lZCBsb25nIGRjcjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWRjciA9IGN0cmxfaW5sKERNQUJSR0NSKTsKLQljdHJsX291dGwoZGNyICYgfjB4MDBmZjAwMDMsIERNQUJSR0NSKTsJLyogYWNrIGFsbCAqLworCWRjciA9IF9fcmF3X3JlYWRsKERNQUJSR0NSKTsKKwlfX3Jhd193cml0ZWwoZGNyICYgfjB4MDBmZjAwMDMsIERNQUJSR0NSKTsJLyogYWNrIGFsbCAqLwogCWRjciAmPSBkY3IgPj4gODsJLyogaWdub3JlIG1hc2tlZCAqLwogCiAJLyogVVNCIHN0dWZmLCBnZXQgaXQgb3V0IG9mIHRoZSB3YXkgZmlyc3QgKi8KQEAgLTEwOSwxNyArMTA5LDE3IEBACiBzdGF0aWMgdm9pZCBkbWFicmdfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGRtYWlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGRjcjsKLQlkY3IgPSBjdHJsX2lubChETUFCUkdDUik7CisJZGNyID0gX19yYXdfcmVhZGwoRE1BQlJHQ1IpOwogCWRjciAmPSB+KDEgPDwgKChkbWFpcnEgPiAxKSA/IGRtYWlycSArIDIyIDogZG1haXJxICsgOCkpOwotCWN0cmxfb3V0bChkY3IsIERNQUJSR0NSKTsKKwlfX3Jhd193cml0ZWwoZGNyLCBETUFCUkdDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWJyZ19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBkbWFpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBkY3I7Ci0JZGNyID0gY3RybF9pbmwoRE1BQlJHQ1IpOworCWRjciA9IF9fcmF3X3JlYWRsKERNQUJSR0NSKTsKIAlkY3IgfD0gKDEgPDwgKChkbWFpcnEgPiAxKSA/IGRtYWlycSArIDIyIDogZG1haXJxICsgOCkpOwotCWN0cmxfb3V0bChkY3IsIERNQUJSR0NSKTsKKwlfX3Jhd193cml0ZWwoZGNyLCBETUFCUkdDUik7CiB9CiAKIGludCBkbWFicmdfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGRtYWlycSwgdm9pZCgqaGFuZGxlcikodm9pZCopLApAQCAtMTY1LDEzICsxNjUsMTMgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BQlJHOiBETUFDIGNoMCBub3QgcmVzZXJ2ZWQhXG4iKTsKICNlbmRpZgogCi0JY3RybF9vdXRsKDAsIERNQUJSR0NSKTsKLQljdHJsX291dGwoMCwgRE1BQ0hDUjApOwotCWN0cmxfb3V0bCgweDk0MDAwMDAwLCBETUFSU1JBKTsJLyogZW5hYmxlIERNQUJSRyBpbiBETUFDIDAgKi8KKwlfX3Jhd193cml0ZWwoMCwgRE1BQlJHQ1IpOworCV9fcmF3X3dyaXRlbCgwLCBETUFDSENSMCk7CisJX19yYXdfd3JpdGVsKDB4OTQwMDAwMDAsIERNQVJTUkEpOwkvKiBlbmFibGUgRE1BQlJHIGluIERNQUMgMCAqLwogCiAJLyogZW5hYmxlIERNQUJSRyBtb2RlLCBlbmFibGUgdGhlIERNQUMgKi8KLQlvciA9IGN0cmxfaW5sKERNQU9SKTsKLQljdHJsX291dGwob3IgfCBETUFPUl9CUkcgfCBETUFPUl9ETUVOLCBETUFPUik7CisJb3IgPSBfX3Jhd19yZWFkbChETUFPUik7CisJX19yYXdfd3JpdGVsKG9yIHwgRE1BT1JfQlJHIHwgRE1BT1JfRE1FTiwgRE1BT1IpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoRE1BQlJHSTAsIGRtYWJyZ19pcnEsIElSUUZfRElTQUJMRUQsCiAJCQkiRE1BQlJHIFVTQiBhZGRyZXNzIGVycm9yIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMgYi9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMKaW5kZXggYTkzMzlhNi4uMmFjYmM3OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2hlYXJ0YmVhdC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBHZW5lcmljIGhlYXJ0YmVhdCBkcml2ZXIgZm9yIHJlZ3VsYXIgTEVEIGJhbmtzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogTW9zdCBTSCByZWZlcmVuY2UgYm9hcmRzIGluY2x1ZGUgYSBudW1iZXIgb2YgaW5kaXZpZHVhbCBMRURzIHRoYXQgY2FuCiAgKiBiZSBpbmRlcGVuZGVudGx5IGNvbnRyb2xsZWQgKGVpdGhlciB2aWEgYSBwcmUtZGVmaW5lZCBoYXJkd2FyZQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAiaGVhcnRiZWF0IgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjEuMiIKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVmYXVsdF9iaXRfcG9zW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcgfTsKIApAQCAtOTgsNyArOTgsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaGQtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaGQtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAodW5saWtlbHkoIWhkLT5iYXNlKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CiAKQEAgLTExNyw4ICsxMTcsMjAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaGQtPm5yX2JpdHM7IGkrKykKIAkJaGQtPm1hc2sgfD0gKDEgPDwgaGQtPmJpdF9wb3NbaV0pOwogCi0JaWYgKCFoZC0+cmVnc2l6ZSkKLQkJaGQtPnJlZ3NpemUgPSA4OwkvKiBkZWZhdWx0IGFjY2VzcyBzaXplICovCisJaWYgKCFoZC0+cmVnc2l6ZSkgeworCQlzd2l0Y2ggKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV9UWVBFX01BU0spIHsKKwkJY2FzZSBJT1JFU09VUkNFX01FTV8zMkJJVDoKKwkJCWhkLT5yZWdzaXplID0gMzI7CisJCQlicmVhazsKKwkJY2FzZSBJT1JFU09VUkNFX01FTV8xNkJJVDoKKwkJCWhkLT5yZWdzaXplID0gMTY7CisJCQlicmVhazsKKwkJY2FzZSBJT1JFU09VUkNFX01FTV84QklUOgorCQlkZWZhdWx0OgorCQkJaGQtPnJlZ3NpemUgPSA4OworCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlzZXR1cF90aW1lcigmaGQtPnRpbWVyLCBoZWFydGJlYXRfdGltZXIsICh1bnNpZ25lZCBsb25nKWhkKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBoZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCAwOGFmMWY0Li40YTU5ZTY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBQQ0kgc3BlY2lmaWMga2VybmVsIGludGVyZmFjZSByb3V0aW5lcyB1bmRlciBMaW51eC4KICMKLW9iai15CQkJCQkrPSBwY2kubworb2JqLXkJCQkJCSs9IGNvbW1vbi5vIHBjaS5vCiAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpCSs9IHBjaS1zaDc3NTEubyBvcHMtc2g0Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKQkrPSBwY2ktc2g3NzUxLm8gb3BzLXNoNC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKQkrPSBwY2ktc2g3NzgwLm8gb3BzLXNoNC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQkrPSBwY2ktc2g3NzgwLm8gb3BzLXNoNC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQkrPSBwY2ktc2g3NzgwLm8gb3BzLXNoNC5vCi1vYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQkrPSBvcHMtc2g3Nzg2Lm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCSs9IHBjaWUtc2g3Nzg2Lm8gb3BzLXNoNzc4Ni5vCiBvYmotJChDT05GSUdfQ1BVX1NINSkJCQkrPSBwY2ktc2g1Lm8gb3BzLXNoNS5vCiAKIG9iai0kKENPTkZJR19TSF9EUkVBTUNBU1QpCQkrPSBvcHMtZHJlYW1jYXN0Lm8gZml4dXBzLWRyZWFtY2FzdC5vIFwKQEAgLTI1LDQgKzI1LDMgQEAKIG9iai0kKENPTkZJR19TSF9MQU5ESVNLKQkJKz0gZml4dXBzLWxhbmRpc2subwogb2JqLSQoQ09ORklHX1NIX0xCT1hfUkUyKQkJKz0gZml4dXBzLXJ0czc3NTFyMmQubwogb2JqLSQoQ09ORklHX1NIX0NBWU1BTikJCQkrPSBmaXh1cHMtY2F5bWFuLm8KLW9iai0kKENPTkZJR19TSF9VUlFVRUxMKQkJKz0gcGNpZS1zaDc3ODYubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9jb21tb24uYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJmMTM4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvY29tbW9uLmMKQEAgLTAsMCArMSwxNjIgQEAKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGVhcmx5IG9uIGJlZm9yZSBQQ0kgc2Nhbm5pbmcgaXMgZG9uZQorICogYW5kIGFsbCBvZiB0aGUgcGNpX2RldiBhbmQgcGNpX2J1cyBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBjcmVhdGVkLgorICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmZha2VfcGNpX2RldihzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCisJaW50IHRvcF9idXMsIGludCBidXNuciwgaW50IGRldmZuKQoreworCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiBkZXY7CisJc3RhdGljIHN0cnVjdCBwY2lfYnVzIGJ1czsKKworCWRldi5idXMgPSAmYnVzOworCWRldi5zeXNkYXRhID0gaG9zZTsKKwlkZXYuZGV2Zm4gPSBkZXZmbjsKKwlidXMubnVtYmVyID0gYnVzbnI7CisJYnVzLnN5c2RhdGEgPSBob3NlOworCWJ1cy5vcHMgPSBob3NlLT5wY2lfb3BzOworCisJaWYoYnVzbnIgIT0gdG9wX2J1cykKKwkJLyogRmFrZSBhIHBhcmVudCBidXMgc3RydWN0dXJlLiAqLworCQlidXMucGFyZW50ID0gJmJ1czsKKwllbHNlCisJCWJ1cy5wYXJlbnQgPSBOVUxMOworCisJcmV0dXJuICZkZXY7Cit9CisKKyNkZWZpbmUgRUFSTFlfUENJX09QKHJ3LCBzaXplLCB0eXBlKQkJCQkJXAoraW50IF9faW5pdCBlYXJseV8jI3J3IyNfY29uZmlnXyMjc2l6ZShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCQlcCisJaW50IHRvcF9idXMsIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdHlwZSB2YWx1ZSkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gcGNpXyMjcncjI19jb25maWdfIyNzaXplKAkJCQlcCisJCWZha2VfcGNpX2Rldihob3NlLCB0b3BfYnVzLCBidXMsIGRldmZuKSwJCVwKKwkJb2Zmc2V0LCB2YWx1ZSk7CQkJCQkJXAorfQorCitFQVJMWV9QQ0lfT1AocmVhZCwgYnl0ZSwgdTggKikKK0VBUkxZX1BDSV9PUChyZWFkLCB3b3JkLCB1MTYgKikKK0VBUkxZX1BDSV9PUChyZWFkLCBkd29yZCwgdTMyICopCitFQVJMWV9QQ0lfT1Aod3JpdGUsIGJ5dGUsIHU4KQorRUFSTFlfUENJX09QKHdyaXRlLCB3b3JkLCB1MTYpCitFQVJMWV9QQ0lfT1Aod3JpdGUsIGR3b3JkLCB1MzIpCisKK2ludCBfX2luaXQgcGNpX2lzXzY2bWh6X2NhcGFibGUoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLAorCQkJCWludCB0b3BfYnVzLCBpbnQgY3VycmVudF9idXMpCit7CisJdTMyIHBjaV9kZXZmbjsKKwl1bnNpZ25lZCBzaG9ydCB2aWQ7CisJaW50IGNhcDY2ID0gLTE7CisJdTE2IHN0YXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJQQ0k6IENoZWNraW5nIDY2TUh6IGNhcGFiaWxpdGllcy4uLlxuIik7CisKKwlmb3IgKHBjaV9kZXZmbiA9IDA7IHBjaV9kZXZmbiA8IDB4ZmY7IHBjaV9kZXZmbisrKSB7CisJCWlmIChQQ0lfRlVOQyhwY2lfZGV2Zm4pKQorCQkJY29udGludWU7CisJCWlmIChlYXJseV9yZWFkX2NvbmZpZ193b3JkKGhvc2UsIHRvcF9idXMsIGN1cnJlbnRfYnVzLAorCQkJCQkgICBwY2lfZGV2Zm4sIFBDSV9WRU5ET1JfSUQsICZ2aWQpICE9CisJCSAgICBQQ0lCSU9TX1NVQ0NFU1NGVUwpCisJCQljb250aW51ZTsKKwkJaWYgKHZpZCA9PSAweGZmZmYpCisJCQljb250aW51ZTsKKworCQkvKiBjaGVjayA2Nk1IeiBjYXBhYmlsaXR5ICovCisJCWlmIChjYXA2NiA8IDApCisJCQljYXA2NiA9IDE7CisJCWlmIChjYXA2NikgeworCQkJZWFybHlfcmVhZF9jb25maWdfd29yZChob3NlLCB0b3BfYnVzLCBjdXJyZW50X2J1cywKKwkJCQkJICAgICAgIHBjaV9kZXZmbiwgUENJX1NUQVRVUywgJnN0YXQpOworCQkJaWYgKCEoc3RhdCAmIFBDSV9TVEFUVVNfNjZNSFopKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgIlBDSTogJTAyeDolMDJ4IG5vdCA2Nk1IeiBjYXBhYmxlLlxuIiwKKwkJCQkgICAgICAgY3VycmVudF9idXMsIHBjaV9kZXZmbik7CisJCQkJY2FwNjYgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGNhcDY2ID4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpYmlvc19lbmFibGVfZXJyKHVuc2lnbmVkIGxvbmcgX19kYXRhKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NoYW5uZWwgKilfX2RhdGE7CisKKwlkZWxfdGltZXIoJmhvc2UtPmVycl90aW1lcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogcmUtZW5hYmxpbmcgZXJyb3IgSVJRLlxuIik7CisJZW5hYmxlX2lycShob3NlLT5lcnJfaXJxKTsKK30KKworc3RhdGljIHZvaWQgcGNpYmlvc19lbmFibGVfc2Vycih1bnNpZ25lZCBsb25nIF9fZGF0YSkKK3sKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSAoc3RydWN0IHBjaV9jaGFubmVsICopX19kYXRhOworCisJZGVsX3RpbWVyKCZob3NlLT5zZXJyX3RpbWVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiByZS1lbmFibGluZyBzeXN0ZW0gZXJyb3IgSVJRLlxuIik7CisJZW5hYmxlX2lycShob3NlLT5zZXJyX2lycSk7Cit9CisKK3ZvaWQgcGNpYmlvc19lbmFibGVfdGltZXJzKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK3sKKwlpZiAoaG9zZS0+ZXJyX2lycSkgeworCQlpbml0X3RpbWVyKCZob3NlLT5lcnJfdGltZXIpOworCQlob3NlLT5lcnJfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhvc2U7CisJCWhvc2UtPmVycl90aW1lci5mdW5jdGlvbiA9IHBjaWJpb3NfZW5hYmxlX2VycjsKKwl9CisKKwlpZiAoaG9zZS0+c2Vycl9pcnEpIHsKKwkJaW5pdF90aW1lcigmaG9zZS0+c2Vycl90aW1lcik7CisJCWhvc2UtPnNlcnJfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhvc2U7CisJCWhvc2UtPnNlcnJfdGltZXIuZnVuY3Rpb24gPSBwY2liaW9zX2VuYWJsZV9zZXJyOworCX0KK30KKworLyoKKyAqIEEgc2ltcGxlIGhhbmRsZXIgZm9yIHRoZSByZWd1bGFyIFBDSSBzdGF0dXMgZXJyb3JzLCBjYWxsZWQgZnJvbSBJUlEKKyAqIGNvbnRleHQuCisgKi8KK3Vuc2lnbmVkIGludCBwY2liaW9zX2hhbmRsZV9zdGF0dXNfZXJyb3JzKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJICB1bnNpZ25lZCBpbnQgc3RhdHVzLAorCQkJCQkgIHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK3sKKwl1bnNpZ25lZCBpbnQgY21kID0gMDsKKworCWlmIChzdGF0dXMgJiBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogbWFzdGVyIGFib3J0LCBwYz0weCUwOGx4XG4iLCBhZGRyKTsKKwkJY21kIHw9IFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVDsKKwl9CisKKwlpZiAoc3RhdHVzICYgUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHRhcmdldCBhYm9ydDogIik7CisJCXBjaWJpb3NfcmVwb3J0X3N0YXR1cyhQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQgfAorCQkJCSAgICAgIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCB8CisJCQkJICAgICAgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JULCAxKTsKKwkJcHJpbnRrKCJcbiIpOworCisJCWNtZCB8PSBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQ7CisJfQorCisJaWYgKHN0YXR1cyAmIChQQ0lfU1RBVFVTX1BBUklUWSB8IFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQ6ICIpOworCQlwY2liaW9zX3JlcG9ydF9zdGF0dXMoUENJX1NUQVRVU19QQVJJVFkgfAorCQkJCSAgICAgIFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZLCAxKTsKKwkJcHJpbnRrKCJcbiIpOworCisJCWNtZCB8PSBQQ0lfU1RBVFVTX1BBUklUWSB8IFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZOworCisJCS8qIE5vdyBiYWNrIG9mZiBvZiB0aGUgSVJRIGZvciBhd2hpbGUgKi8KKwkJaWYgKGhvc2UtPmVycl9pcnEpIHsKKwkJCWRpc2FibGVfaXJxX25vc3luYyhob3NlLT5lcnJfaXJxKTsKKwkJCWhvc2UtPmVycl90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOworCQkJYWRkX3RpbWVyKCZob3NlLT5lcnJfdGltZXIpOworCQl9CisJfQorCisJcmV0dXJuIGNtZDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLWRyZWFtY2FzdC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKaW5kZXggZWQ3ZjQ4OS4uOTQyZWY0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKQEAgLTM5LDcgKzM5LDcgQEAKIAkJLyoKIAkJICogV2UgYWxzbyBhc3N1bWUgdGhhdCBkZXYtPmRldmZuID09IDAKIAkJICovCi0JCWRldi0+cmVzb3VyY2VbMV0uc3RhcnQJPSBwLT5pb19yZXNvdXJjZS0+c3RhcnQgICsgMHgxMDA7CisJCWRldi0+cmVzb3VyY2VbMV0uc3RhcnQJPSBwLT5yZXNvdXJjZXNbMF0uc3RhcnQgICsgMHgxMDA7CiAJCWRldi0+cmVzb3VyY2VbMV0uZW5kCT0gZGV2LT5yZXNvdXJjZVsxXS5zdGFydCArIDB4MjAwIC0gMTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jCmluZGV4IDE1Y2E2NWMuLjA4YjJkODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXI3NzgwcnAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1yNzc4MHJwLmMKQEAgLTIyLDE1ICsyMiwzIEBACiB7CiAJcmV0dXJuIGlycV90YWJbc2xvdF07CiB9Ci0KLWludCBwY2lfZml4dXBfcGNpYyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pCi17Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDA0M2ZmLCBTSDRfUENJSU5UTSk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDc3ODBfUENJSUJBUik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDA4MDAwMDAwLCBTSDc3ODBfUENJQ1NDUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAxYiwgU0g3NzgwX1BDSUNTQVIwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ZmQwMDAwMDAsIFNINzc4MF9QQ0lDU0NSMSk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDBmLCBTSDc3ODBfUENJQ1NBUjEpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMKaW5kZXggNzg5OGYxNC4uZTI0ODUxNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYwpAQCAtNDMsNyArNDMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgYmNyMSwgbWNyOwogCi0JYmNyMSA9IGN0cmxfaW5sKFNINzc1MV9CQ1IxKTsKKwliY3IxID0gX19yYXdfcmVhZGwoU0g3NzUxX0JDUjEpOwogCWJjcjEgfD0gMHg0MDA4MDAwMDsJLyogRW5hYmxlIEJpdCAxOSBCUkVRRU4sIHNldCBQQ0lDIHRvIHNsYXZlICovCiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBiY3IxLCBTSDRfUENJQkNSMSk7CiAKQEAgLTU0LDcgKzU0LDcgQEAKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ZmI5MDAwNDcsIFNINzc1MV9QQ0lDT05GMSk7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCAweGFiMDAwMDAxLCBTSDc3NTFfUENJQ09ORjQpOwogCi0JbWNyID0gY3RybF9pbmwoU0g3NzUxX01DUik7CisJbWNyID0gX19yYXdfcmVhZGwoU0g3NzUxX01DUik7CiAJbWNyID0gKG1jciAmIFBDSU1DUl9NUlNFVF9PRkYpICYgUENJTUNSX1JGU0hfT0ZGOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgbWNyLCBTSDRfUENJTUNSKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2RrNzc4MC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2RrNzc4MC5jCmluZGV4IDI1MGIwZWQuLjA5MzBmOTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNkazc3ODAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZGs3NzgwLmMKQEAgLTMxLDIyICszMSwzIEBACiB7CiAgICAgICAgcmV0dXJuIHNkazc3ODBfaXJxX3RhYltwaW4tMV1bc2xvdF07CiB9Ci1pbnQgcGNpX2ZpeHVwX3BjaWMoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuKQotewotCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0cywgc28gd2Uga25vdyB3aGF0IHRvIGZpeCAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwQzNGRiwgU0g3NzgwX1BDSUlNUik7Ci0KLQkvKiBTZXQgdXAgc3RhbmRhcmQgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDgwMDAwMDAsIFNINzc4MF9QQ0lNQkFSMCk7CS8qIFBDSSAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwODAwMDAwMCwgU0g0X1BDSUxBUjApOwkvKiBTSHd5ICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDA3RjAwMDAxLCBTSDRfUENJTFNSMCk7CS8qIHNpemUgMTI4TSB3LyBNQkFSICovCi0KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINzc4MF9QQ0lNQkFSMSk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRfUENJTEFSMSk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRfUENJTFNSMSk7Ci0KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4QUIwMDA4MDEsIFNINzc4MF9QQ0lJQkFSKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4QTUwMDBDMDEsIFNINF9QQ0lDUik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNlNzc1MS5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2U3NzUxLmMKaW5kZXggNDc1ZmE5Zi4uYTRjN2QzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2U3NzUxLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2U3NzUxLmMKQEAgLTk3LDEyICs5NywxMiBAQAogCSogbWVhbmluZyBhbGwgY2FsbHMgZ28gc3RyYWlnaHQgdGhyb3VnaC4uLiB1c2UgQlVHX09OIHRvCiAJKiBjYXRjaCBlcnJvbmVvdXMgYXNzdW1wdGlvbi4KIAkqLwotCUJVR19PTihjaGFuLT5tZW1fcmVzb3VyY2UtPnN0YXJ0ICE9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UpOworCUJVR19PTihjaGFuLT5yZXNvdXJjZXNbMV0uc3RhcnQgIT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSk7CiAKLQlQQ0lDX1dSSVRFKFNINzc1MV9QQ0lNQlIsIGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQpOworCVBDSUNfV1JJVEUoU0g3NzUxX1BDSU1CUiwgY2hhbi0+cmVzb3VyY2VzWzFdLnN0YXJ0KTsKIAogCS8qIFNldCBJT0JSIGZvciB3aW5kb3cgY29udGFpbmluZyBhcmVhIHNwZWNpZmllZCBpbiBwY2kuaCAqLwotCVBDSUNfV1JJVEUoU0g3NzUxX1BDSUlPQlIsIChjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQgJiBTSDc3NTFfUENJSU9CUl9NQVNLKSk7CisJUENJQ19XUklURShTSDc3NTFfUENJSU9CUiwgKGNoYW4tPnJlc291cmNlc1swXS5zdGFydCAmIFNINzc1MV9QQ0lJT0JSX01BU0spKTsKIAogCS8qIEFsbCBkb25lLCBtYXkgYXMgd2VsbCBzYXkgc28uLi4gKi8KIAlwcmludGsoIlNINzc1MSBQQ0k6IEZpbmlzaGVkIGluaXRpYWxpemF0aW9uIG9mIHRoZSBQQ0kgY29udHJvbGxlclxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDQuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNC5jCmluZGV4IDc4YmViZWIuLjBiODE5OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNC5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKiBEaXJlY3QgYWNjZXNzIHRvIFBDSSBoYXJkd2FyZS4uLgogICovCiAjZGVmaW5lIENPTkZJR19DTUQoYnVzLCBkZXZmbiwgd2hlcmUpIFwKLQkoUDFTRUcgfCAoYnVzLT5udW1iZXIgPDwgMTYpIHwgKGRldmZuIDw8IDgpIHwgKHdoZXJlICYgfjMpKQorCSgweDgwMDAwMDAwIHwgKGJ1cy0+bnVtYmVyIDw8IDE2KSB8IChkZXZmbiA8PCA4KSB8ICh3aGVyZSAmIH4zKSkKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhzaDRfcGNpX2xvY2spOwogCkBAIC0xMDIsMzQgKzEwMiw2IEBACiAJLndyaXRlCQk9IHNoNF9wY2lfd3JpdGUsCiB9OwogCi0vKgotICogTm90IHJlYWxseSByZWxhdGVkIHRvIHBjaV9vcHMsIGJ1dCBpdCdzIGNvbW1vbiBhbmQgbm90IHdvcnRoIHNob3ZpbmcKLSAqIHNvbWV3aGVyZSBlbHNlIGZvciBub3cuLgotICovCi1pbnQgX19pbml0IHNoNF9wY2lfY2hlY2tfZGlyZWN0KHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbikKLXsKLQkvKgotCSAqIENoZWNrIGlmIGNvbmZpZ3VyYXRpb24gd29ya3MuCi0JICovCi0JdW5zaWduZWQgaW50IHRtcCA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRfUENJUEFSKTsKLQotCXBjaV93cml0ZV9yZWcoY2hhbiwgUDFTRUcsIFNINF9QQ0lQQVIpOwotCi0JaWYgKHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRfUENJUEFSKSA9PSBQMVNFRykgewotCQlwY2lfd3JpdGVfcmVnKGNoYW4sIHRtcCwgU0g0X1BDSVBBUik7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgY29uZmlndXJhdGlvbiB0eXBlIDFcbiIpOwotCQlyZXF1ZXN0X3JlZ2lvbihjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lQQVIsIDgsCi0JCQkgICAgICAgIlBDSSBjb25mMSIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIHRtcCwgU0g0X1BDSVBBUik7Ci0KLQlwcmludGsoS0VSTl9FUlIgIlBDSTogJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBwY2lfZml4dXBfcGNpYyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pCiB7CiAJLyogTm90aGluZyB0byBkby4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLWRyZWFtY2FzdC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktZHJlYW1jYXN0LmMKaW5kZXggMjEwZjlkNC4uNjMzNjk0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktZHJlYW1jYXN0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktZHJlYW1jYXN0LmMKQEAgLTI1LDI1ICsyNSwyNSBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL3BjaS5oPgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGdhcHNwY2lfaW9fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiR0FQU1BDSSBJTyIsCi0JLnN0YXJ0CT0gR0FQU1BDSV9CQkFfQ09ORklHLAotCS5lbmQJPSBHQVBTUENJX0JCQV9DT05GSUcgKyBHQVBTUENJX0JCQV9DT05GSUdfU0laRSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ2Fwc3BjaV9tZW1fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiR0FQU1BDSSBtZW0iLAotCS5zdGFydAk9IEdBUFNQQ0lfRE1BX0JBU0UsCi0JLmVuZAk9IEdBUFNQQ0lfRE1BX0JBU0UgKyBHQVBTUENJX0RNQV9TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ2Fwc3BjaV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIkdBUFNQQ0kgSU8iLAorCQkuc3RhcnQJPSBHQVBTUENJX0JCQV9DT05GSUcsCisJCS5lbmQJPSBHQVBTUENJX0JCQV9DT05GSUcgKyBHQVBTUENJX0JCQV9DT05GSUdfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwgIHsKKwkJLm5hbWUJPSAiR0FQU1BDSSBtZW0iLAorCQkuc3RhcnQJPSBHQVBTUENJX0RNQV9CQVNFLAorCQkuZW5kCT0gR0FQU1BDSV9ETUFfQkFTRSArIEdBUFNQQ0lfRE1BX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBkcmVhbWNhc3RfcGNpX2NvbnRyb2xsZXIgPSB7CiAJLnBjaV9vcHMJPSAmZ2Fwc3BjaV9wY2lfb3BzLAotCS5pb19yZXNvdXJjZQk9ICZnYXBzcGNpX2lvX3Jlc291cmNlLAorCS5yZXNvdXJjZXMJPSBnYXBzcGNpX3Jlc291cmNlcywKKwkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShnYXBzcGNpX3Jlc291cmNlcyksCiAJLmlvX29mZnNldAk9IDB4MDAwMDAwMDAsCi0JLm1lbV9yZXNvdXJjZQk9ICZnYXBzcGNpX21lbV9yZXNvdXJjZSwKIAkubWVtX29mZnNldAk9IDB4MDAwMDAwMDAsCiB9OwogCkBAIC05NSw4ICs5NSw2IEBACiAJb3V0bCgweDAwMDAyMDAxLCBHQVBTUENJX0JCQV9DT05GSUcrMHgxMCk7CiAJb3V0bCgweDAxMDAwMDAwLCBHQVBTUENJX0JCQV9DT05GSUcrMHgxNCk7CiAKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmZHJlYW1jYXN0X3BjaV9jb250cm9sbGVyKTsKLQotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmZHJlYW1jYXN0X3BjaV9jb250cm9sbGVyKTsKIH0KIGFyY2hfaW5pdGNhbGwoZ2Fwc3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNC5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKaW5kZXggM2Q1Mjk2Yy4uY2JmNzYzYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKQEAgLTQ5LDYgKzQ5LDE3IEBACiAgICNkZWZpbmUgU0g0X1BDSUlOVF9NV1BECSAgMHgwMDAwMDAwMgkvKiBNYXN0ZXIgV3JpdGUgUEVSUiBEZXRlY3QgKi8KICAgI2RlZmluZSBTSDRfUENJSU5UX01SUEQJICAweDAwMDAwMDAxCS8qIE1hc3RlciBSZWFkIFBFUlIgRGV0ZWN0ICovCiAjZGVmaW5lIFNINF9QQ0lJTlRNCQkweDExOAkJLyogUENJIEludGVycnVwdCBNYXNrICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fVFRBRElNCSAgQklUKDE0KQkvKiBUYXJnZXQtdGFyZ2V0IGFib3J0IGludGVycnVwdCAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX1RNVE9JTQkgIEJJVCg5KQkvKiBUYXJnZXQgcmV0cnkgdGltZW91dCAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX01ERUlNCSAgQklUKDgpCS8qIE1hc3RlciBmdW5jdGlvbiBkaXNhYmxlIGVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fQVBFRElNCSAgQklUKDcpCS8qIEFkZHJlc3MgcGFyaXR5IGVycm9yIGRldGVjdGlvbiAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX1NESU0JICBCSVQoNikJLyogU0VSUiBkZXRlY3Rpb24gKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9EUEVJVFdNCSAgQklUKDUpCS8qIERhdGEgcGFyaXR5IGVycm9yIGZvciB0YXJnZXQgd3JpdGUgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9QRURJVFJNCSAgQklUKDQpCS8qIFBFUlIgZGV0ZWN0aW9uIGZvciB0YXJnZXQgcmVhZCAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX1RBRElNTQkgIEJJVCgzKQkvKiBUYXJnZXQgYWJvcnQgZm9yIG1hc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX01BRElNTQkgIEJJVCgyKQkvKiBNYXN0ZXIgYWJvcnQgZm9yIG1hc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX01XUERJTQkgIEJJVCgxKQkvKiBNYXN0ZXIgd3JpdGUgZGF0YSBwYXJpdHkgZXJyb3IgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9NUkRQRUlNCSAgQklUKDApCS8qIE1hc3RlciByZWFkIGRhdGEgcGFyaXR5IGVycm9yICovCiAjZGVmaW5lIFNINF9QQ0lBTFIJCTB4MTFDCQkvKiBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNINF9QQ0lDTFIJCTB4MTIwCQkvKiBFcnJvciBDb21tYW5kL0RhdGEgKi8KICAgI2RlZmluZSBTSDRfUENJQ0xSX01QSU8JICAweDgwMDAwMDAwCkBAIC02MSw3ICs3Miw3IEBACiAjZGVmaW5lIFNINF9QQ0lBSU5UCQkweDEzMAkJLyogQXJiaXRlciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KICAgI2RlZmluZSBTSDRfUENJQUlOVF9NQktOCSAgMHgwMDAwMjAwMAkvKiBNYXN0ZXIgQnJva2VuIEludGVycnVwdCAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX1RCVE8JICAweDAwMDAxMDAwCS8qIFRhcmdldCBCdXMgVGltZSBPdXQgKi8KLSAgI2RlZmluZSBTSDRfUENJQUlOVF9NQlRPCSAgMHgwMDAwMTAwMAkvKiBNYXN0ZXIgQnVzIFRpbWUgT3V0ICovCisgICNkZWZpbmUgU0g0X1BDSUFJTlRfTUJUTwkgIDB4MDAwMDA4MDAJLyogTWFzdGVyIEJ1cyBUaW1lIE91dCAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX1RBQlQJICAweDAwMDAwMDA4CS8qIFRhcmdldCBBYm9ydCAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX01BQlQJICAweDAwMDAwMDA0CS8qIE1hc3RlciBBYm9ydCAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX1JEUEUJICAweDAwMDAwMDAyCS8qIFJlYWQgRGF0YSBQYXJpdHkgRXJyb3IgKi8KQEAgLTE1MSw3ICsxNjIsNiBAQAogCiAvKiBhcmNoL3NoL2tlcm5lbC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMgKi8KIGV4dGVybiBzdHJ1Y3QgcGNpX29wcyBzaDRfcGNpX29wczsKLWludCBzaDRfcGNpX2NoZWNrX2RpcmVjdChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pOwogaW50IHBjaV9maXh1cF9wY2ljKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbik7CiAKIHN0cnVjdCBzaDRfcGNpX2FkZHJlc3Nfc3BhY2UgewpAQCAtMTY3LDEzICsxNzcsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfd3JpdGVfcmVnKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiwKIAkJCQkgdW5zaWduZWQgbG9uZyB2YWwsIHVuc2lnbmVkIGxvbmcgcmVnKQogewotCWN0cmxfb3V0bCh2YWwsIGNoYW4tPnJlZ19iYXNlICsgcmVnKTsKKwlfX3Jhd193cml0ZWwodmFsLCBjaGFuLT5yZWdfYmFzZSArIHJlZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwY2lfcmVhZF9yZWcoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuLAogCQkJCQkgdW5zaWduZWQgbG9uZyByZWcpCiB7Ci0JcmV0dXJuIGN0cmxfaW5sKGNoYW4tPnJlZ19iYXNlICsgcmVnKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoY2hhbi0+cmVnX2Jhc2UgKyByZWcpOwogfQogCiAjZW5kaWYgLyogX19QQ0lfU0g0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmMKaW5kZXggODczZWQyYi4uMGJmMjk2YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmMKQEAgLTg5LDE0ICs4OSwxMyBAQAogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDVfaW9fcmVzb3VyY2UgPSB7IC8qIHBsYWNlIGhvbGRlciAqLyB9Owotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDVfbWVtX3Jlc291cmNlID0geyAvKiBwbGFjZSBob2xkZXIgKi8gfTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g1X3BjaV9yZXNvdXJjZXNbMl07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NoYW5uZWwgc2g1cGNpX2NvbnRyb2xsZXIgPSB7CiAJLnBjaV9vcHMJCT0gJnNoNV9wY2lfb3BzLAotCS5tZW1fcmVzb3VyY2UJCT0gJnNoNV9tZW1fcmVzb3VyY2UsCisJLnJlc291cmNlcwkJPSBzaDVfcGNpX3Jlc291cmNlcywKKwkubnJfcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUoc2g1X3BjaV9yZXNvdXJjZXMpLAogCS5tZW1fb2Zmc2V0CQk9IDB4MDAwMDAwMDAsCi0JLmlvX3Jlc291cmNlCQk9ICZzaDVfaW9fcmVzb3VyY2UsCiAJLmlvX29mZnNldAkJPSAweDAwMDAwMDAwLAogfTsKIApAQCAtMjEwLDE0ICsyMDksMTIgQEAKICAgICAgICAgU0g1UENJX1dSSVRFKEFJTlRNLCB+MCk7CiAgICAgICAgIFNINVBDSV9XUklURShQSU5UTSwgfjApOwogCi0Jc2g1X2lvX3Jlc291cmNlLnN0YXJ0ID0gUENJX0lPX0FSRUE7Ci0Jc2g1X2lvX3Jlc291cmNlLmVuZCA9IFBDSV9JT19BUkVBICsgMHgxMDAwMDsKKwlzaDVfcGNpX3Jlc291cmNlc1swXS5zdGFydCA9IFBDSV9JT19BUkVBOworCXNoNV9wY2lfcmVzb3VyY2VzWzBdLmVuZCA9IFBDSV9JT19BUkVBICsgMHgxMDAwMDsKIAotCXNoNV9tZW1fcmVzb3VyY2Uuc3RhcnQgPSBtZW1TdGFydDsKLQlzaDVfbWVtX3Jlc291cmNlLmVuZCA9IG1lbVN0YXJ0ICsgbWVtU2l6ZTsKKwlzaDVfcGNpX3Jlc291cmNlc1sxXS5zdGFydCA9IG1lbVN0YXJ0OworCXNoNV9wY2lfcmVzb3VyY2VzWzFdLmVuZCA9IG1lbVN0YXJ0ICsgbWVtU2l6ZTsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZzaDVwY2lfY29udHJvbGxlcik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJnNoNXBjaV9jb250cm9sbGVyKTsKIH0KIGFyY2hfaW5pdGNhbGwoc2g1cGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmggYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuaAppbmRleCBmMjc3NjI4Li4zZjAxZGVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuaApAQCAtODYsMTQgKzg2LDE0IEBACiAvKiAjZGVmaW5lIFBDSVNINV9WQ1JfUkVHKHgpICAgICAgICAgICAgICAgICggU0g1UENJX1ZDUl9CQVNFIChQQ0lTSDVfVkNSXyMjeCkpICovCiAKIC8qIFdyaXRlIEkvTyBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgU0g1UENJX1dSSVRFKHJlZyx2YWwpICAgICAgICBjdHJsX291dGwoKHUzMikodmFsKSxQQ0lTSDVfSUNSX1JFRyhyZWcpKQotI2RlZmluZSBTSDVQQ0lfV1JJVEVfU0hPUlQocmVnLHZhbCkgIGN0cmxfb3V0dygodTE2KSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCi0jZGVmaW5lIFNINVBDSV9XUklURV9CWVRFKHJlZyx2YWwpICAgY3RybF9vdXRiKCh1OCkodmFsKSxQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfV1JJVEUocmVnLHZhbCkgICAgICAgIF9fcmF3X3dyaXRlbCgodTMyKSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9XUklURV9TSE9SVChyZWcsdmFsKSAgX19yYXdfd3JpdGV3KCh1MTYpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1dSSVRFX0JZVEUocmVnLHZhbCkgICBfX3Jhd193cml0ZWIoKHU4KSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCiAKIC8qIFJlYWQgSS9PIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBTSDVQQ0lfUkVBRChyZWcpICAgICAgICAgICAgIGN0cmxfaW5sKFBDSVNINV9JQ1JfUkVHKHJlZykpCi0jZGVmaW5lIFNINVBDSV9SRUFEX1NIT1JUKHJlZykgICAgICAgY3RybF9pbncoUENJU0g1X0lDUl9SRUcocmVnKSkKLSNkZWZpbmUgU0g1UENJX1JFQURfQllURShyZWcpICAgICAgICBjdHJsX2luYihQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfUkVBRChyZWcpICAgICAgICAgICAgIF9fcmF3X3JlYWRsKFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9SRUFEX1NIT1JUKHJlZykgICAgICAgX19yYXdfcmVhZHcoUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1JFQURfQllURShyZWcpICAgICAgICBfX3Jhd19yZWFkYihQQ0lTSDVfSUNSX1JFRyhyZWcpKQogCiAvKiBTZXQgUENJIGNvbmZpZyBiaXRzICovCiAjZGVmaW5lIFNFVF9DT05GSUdfQklUUyhidXMsZGV2Zm4sd2hlcmUpICAoKCgoYnVzKSA8PCAxNikgfCAoKGRldmZuKSA8PCA4KSB8ICgod2hlcmUpICYgfjMpKSB8IDB4ODAwMDAwMDApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCmluZGV4IDcwYzE5OTkuLjE3ODExZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCkBAIC00NCwyNSArNDQsMjUgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NTFfaW9fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiU0g3NzUxX0lPIiwKLQkuc3RhcnQJPSBTSDc3NTFfUENJX0lPX0JBU0UsCi0JLmVuZAk9IFNINzc1MV9QQ0lfSU9fQkFTRSArIFNINzc1MV9QQ0lfSU9fU0laRSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JTwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NTFfbWVtX3Jlc291cmNlID0gewotCS5uYW1lCT0gIlNINzc1MV9tZW0iLAotCS5zdGFydAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UsCi0JLmVuZAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UgKyBTSDc3NTFfUENJX01FTV9TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NTFfcGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiU0g3NzUxX0lPIiwKKwkJLnN0YXJ0CT0gU0g3NzUxX1BDSV9JT19CQVNFLAorCQkuZW5kCT0gU0g3NzUxX1BDSV9JT19CQVNFICsgU0g3NzUxX1BDSV9JT19TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTworCX0sIHsKKwkJLm5hbWUJPSAiU0g3NzUxX21lbSIsCisJCS5zdGFydAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UsCisJCS5lbmQJPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFICsgU0g3NzUxX1BDSV9NRU1fU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NoYW5uZWwgc2g3NzUxX3BjaV9jb250cm9sbGVyID0gewogCS5wY2lfb3BzCT0gJnNoNF9wY2lfb3BzLAotCS5tZW1fcmVzb3VyY2UJPSAmc2g3NzUxX21lbV9yZXNvdXJjZSwKKwkucmVzb3VyY2VzCT0gc2g3NzUxX3BjaV9yZXNvdXJjZXMsCisJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzUxX3BjaV9yZXNvdXJjZXMpLAogCS5tZW1fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKLQkuaW9fcmVzb3VyY2UJPSAmc2g3NzUxX2lvX3Jlc291cmNlLAogCS5pb19vZmZzZXQJPSAweDAwMDAwMDAwLAogCS5pb19tYXBfYmFzZQk9IFNINzc1MV9QQ0lfSU9fQkFTRSwKIH07CkBAIC03OSw3ICs3OSw2IEBACiAJc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gJnNoNzc1MV9wY2lfY29udHJvbGxlcjsKIAl1bnNpZ25lZCBpbnQgaWQ7CiAJdTMyIHdvcmQsIHJlZzsKLQlpbnQgcmV0OwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IFN0YXJ0aW5nIGludGlhbGl6YXRpb24uXG4iKTsKIApAQCAtOTMsMTMgKzkyLDEwIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICgocmV0ID0gc2g0X3BjaV9jaGVja19kaXJlY3QoY2hhbikpICE9IDApCi0JCXJldHVybiByZXQ7Ci0KIAkvKiBTZXQgdGhlIEJDUidzIHRvIGVuYWJsZSBQQ0kgYWNjZXNzICovCi0JcmVnID0gY3RybF9pbmwoU0g3NzUxX0JDUjEpOworCXJlZyA9IF9fcmF3X3JlYWRsKFNINzc1MV9CQ1IxKTsKIAlyZWcgfD0gMHg4MDAwMDsKLQljdHJsX291dGwocmVnLCBTSDc3NTFfQkNSMSk7CisJX19yYXdfd3JpdGVsKHJlZywgU0g3NzUxX0JDUjEpOwogCiAJLyogVHVybiB0aGUgY2xvY2tzIGJhY2sgb24gKG5vdCBkb25lIGluIHJlc2V0KSovCiAJcGNpX3dyaXRlX3JlZyhjaGFuLCAwLCBTSDRfUENJQ0xLUik7CkBAIC0xMzIsMTMgKzEyOCwxMyBAQAogCS8qIFNldCB0aGUgbG9jYWwgMTZNQiBQQ0kgbWVtb3J5IHNwYWNlIHdpbmRvdyB0bwogCSAqIHRoZSBsb3dlc3QgUENJIG1hcHBlZCBhZGRyZXNzCiAJICovCi0Jd29yZCA9IGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQgJiBTSDRfUENJTUJSX01BU0s7CisJd29yZCA9IGNoYW4tPnJlc291cmNlc1sxXS5zdGFydCAmIFNINF9QQ0lNQlJfTUFTSzsKIAlwcl9kZWJ1ZygiUENJOiBTZXR0aW5nIHVwcGVyIGJpdHMgb2YgTWVtb3J5IHdpbmRvdyB0byAweCV4XG4iLCB3b3JkKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQgLCBTSDRfUENJTUJSKTsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgTVNCJ3Mgb2YgSU8gd2luZG93IGFyZSBzZXQgdG8gYWNjZXNzIFBDSSBzcGFjZQogCSAqIGNvcnJlY3RseSAqLwotCXdvcmQgPSBjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQgJiBTSDRfUENJSU9CUl9NQVNLOworCXdvcmQgPSBjaGFuLT5yZXNvdXJjZXNbMF0uc3RhcnQgJiBTSDRfUENJSU9CUl9NQVNLOwogCXByX2RlYnVnKCJQQ0k6IFNldHRpbmcgdXBwZXIgYml0cyBvZiBJTyB3aW5kb3cgdG8gMHgleFxuIiwgd29yZCk7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJSU9CUik7CiAKQEAgLTE1OSwxMyArMTU1LDEzIEBACiAJCXJldHVybiAtMTsKIAogCS8qIGNvbmZpZ3VyZSB0aGUgd2FpdCBjb250cm9sIHJlZ2lzdGVycyAqLwotCXdvcmQgPSBjdHJsX2lubChTSDc3NTFfV0NSMSk7CisJd29yZCA9IF9fcmF3X3JlYWRsKFNINzc1MV9XQ1IxKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lXQ1IxKTsKLQl3b3JkID0gY3RybF9pbmwoU0g3NzUxX1dDUjIpOworCXdvcmQgPSBfX3Jhd19yZWFkbChTSDc3NTFfV0NSMik7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJV0NSMik7Ci0Jd29yZCA9IGN0cmxfaW5sKFNINzc1MV9XQ1IzKTsKKwl3b3JkID0gX19yYXdfcmVhZGwoU0g3NzUxX1dDUjMpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCwgU0g0X1BDSVdDUjMpOwotCXdvcmQgPSBjdHJsX2lubChTSDc3NTFfTUNSKTsKKwl3b3JkID0gX19yYXdfcmVhZGwoU0g3NzUxX01DUik7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJTUNSKTsKIAogCS8qIE5PVEU6IEknbSBpZ25vcmluZyB0aGUgUENJIGVycm9yIElSUXMgZm9yIG5vdy4uCkBAIC0xODAsOCArMTc2LDYgQEAKIAl3b3JkID0gU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOIHwgU0g0X1BDSUNSX0FSQk07CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJQ1IpOwogCi0JcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoY2hhbik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoY2hhbik7CiB9CiBhcmNoX2luaXRjYWxsKHNoNzc1MV9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCmluZGV4IDMyM2I5MmQuLmZmZGNiZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIExvdy1MZXZlbCBQQ0kgU3VwcG9ydCBmb3IgdGhlIFNINzc4MAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xMSw1MiArMTEsMjQwIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4NV9pb19yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJTSDc3ODVfSU8iLAotCS5zdGFydAk9IFNINzc4MF9QQ0lfSU9fQkFTRSwKLQkuZW5kCT0gU0g3NzgwX1BDSV9JT19CQVNFICsgU0g3NzgwX1BDSV9JT19TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4NV9tZW1fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiU0g3Nzg1X21lbSIsCi0JLnN0YXJ0CT0gU0g3NzgwX1BDSV9NRU1PUllfQkFTRSwKLQkuZW5kCT0gU0g3NzgwX1BDSV9NRU1PUllfQkFTRSArIFNINzc4MF9QQ0lfTUVNX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4NV9wY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJQQ0kgSU8iLAorCQkuc3RhcnQJPSAweDEwMDAsCisJCS5lbmQJPSBTWl80TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwgeworCQkubmFtZQk9ICJQQ0kgTUVNIDAiLAorCQkuc3RhcnQJPSAweGZkMDAwMDAwLAorCQkuZW5kCT0gMHhmZDAwMDAwMCArIFNaXzE2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLm5hbWUJPSAiUENJIE1FTSAxIiwKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTAwMDAwMDAgKyBTWl82NE0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS8qCisJCSAqIDMyLWJpdCBvbmx5IHJlc291cmNlcyBtdXN0IGJlIGxhc3QuCisJCSAqLworCQkubmFtZQk9ICJQQ0kgTUVNIDIiLAorCQkuc3RhcnQJPSAweGMwMDAwMDAwLAorCQkuZW5kCT0gMHhjMDAwMDAwMCArIFNaXzUxMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9jaGFubmVsIHNoNzc4MF9wY2lfY29udHJvbGxlciA9IHsKIAkucGNpX29wcwk9ICZzaDRfcGNpX29wcywKLQkubWVtX3Jlc291cmNlCT0gJnNoNzc4NV9tZW1fcmVzb3VyY2UsCi0JLm1lbV9vZmZzZXQJPSAweDAwMDAwMDAwLAotCS5pb19yZXNvdXJjZQk9ICZzaDc3ODVfaW9fcmVzb3VyY2UsCi0JLmlvX29mZnNldAk9IDB4MDAwMDAwMDAsCi0JLmlvX21hcF9iYXNlCT0gU0g3NzgwX1BDSV9JT19CQVNFLAorCS5yZXNvdXJjZXMJPSBzaDc3ODVfcGNpX3Jlc291cmNlcywKKwkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3ODVfcGNpX3Jlc291cmNlcyksCisJLmlvX29mZnNldAk9IDAsCisJLm1lbV9vZmZzZXQJPSAwLAorCS5pb19tYXBfYmFzZQk9IDB4ZmUyMDAwMDAsCisJLnNlcnJfaXJxCT0gZXZ0MmlycSgweGEwMCksCisJLmVycl9pcnEJPSBldnQyaXJxKDB4YWEwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2g0X3BjaV9hZGRyZXNzX21hcCBzaDc3ODBfcGNpX21hcCA9IHsKLQkud2luZG93MAk9IHsKLSNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKLQkJLmJhc2UJPSBTSDc3ODBfMzJCSVRfRERSX0JBU0VfQUREUiwKLQkJLnNpemUJPSAweDQwMDAwMDAwLAotI2Vsc2UKLQkJLmJhc2UJPSBTSDc3ODBfQ1MwX0JBU0VfQUREUiwKLQkJLnNpemUJPSAweDIwMDAwMDAwLAotI2VuZGlmCi0JfSwKK3N0cnVjdCBwY2lfZXJyb3JzIHsKKwl1bnNpZ25lZCBpbnQJbWFzazsKKwljb25zdCBjaGFyCSpzdHI7Cit9IHBjaV9hcmJpdGVyX2Vycm9yc1tdID0geworCXsgU0g0X1BDSUFJTlRfTUJLTiwJIm1hc3RlciBicm9rZW4iIH0sCisJeyBTSDRfUENJQUlOVF9UQlRPLAkidGFyZ2V0IGJ1cyB0aW1lIG91dCIgfSwKKwl7IFNINF9QQ0lBSU5UX01CVE8sCSJtYXN0ZXIgYnVzIHRpbWUgb3V0IiB9LAorCXsgU0g0X1BDSUFJTlRfVEFCVCwJInRhcmdldCBhYm9ydCIgfSwKKwl7IFNINF9QQ0lBSU5UX01BQlQsCSJtYXN0ZXIgYWJvcnQiIH0sCisJeyBTSDRfUENJQUlOVF9SRFBFLAkicmVhZCBkYXRhIHBhcml0eSBlcnJvciIgfSwKKwl7IFNINF9QQ0lBSU5UX1dEUEUsCSJ3cml0ZSBkYXRhIHBhcml0eSBlcnJvciIgfSwKK30sIHBjaV9pbnRlcnJ1cHRfZXJyb3JzW10gPSB7CisJeyBTSDRfUENJSU5UX01MQ0ssCSJtYXN0ZXIgbG9jayBlcnJvciIgfSwKKwl7IFNINF9QQ0lJTlRfVEFCVCwJInRhcmdldC10YXJnZXQgYWJvcnQiIH0sCisJeyBTSDRfUENJSU5UX1RSRVQsCSJ0YXJnZXQgcmV0cnkgdGltZSBvdXQiIH0sCisJeyBTSDRfUENJSU5UX01GREUsCSJtYXN0ZXIgZnVuY3Rpb24gZGlzYWJsZSBlcm9yciIgfSwKKwl7IFNINF9QQ0lJTlRfUFJUWSwJImFkZHJlc3MgcGFyaXR5IGVycm9yIiB9LAorCXsgU0g0X1BDSUlOVF9TRVJSLAkiU0VSUiIgfSwKKwl7IFNINF9QQ0lJTlRfVFdEUCwJImRhdGEgcGFyaXR5IGVycm9yIGZvciB0YXJnZXQgd3JpdGUiIH0sCisJeyBTSDRfUENJSU5UX1RSRFAsCSJQRVJSIGRldGVjdGVkIGZvciB0YXJnZXQgcmVhZCIgfSwKKwl7IFNINF9QQ0lJTlRfTVRBQlQsCSJ0YXJnZXQgYWJvcnQgZm9yIG1hc3RlciIgfSwKKwl7IFNINF9QQ0lJTlRfTU1BQlQsCSJtYXN0ZXIgYWJvcnQgZm9yIG1hc3RlciIgfSwKKwl7IFNINF9QQ0lJTlRfTVdQRCwJIm1hc3RlciB3cml0ZSBkYXRhIHBhcml0eSBlcnJvciIgfSwKKwl7IFNINF9QQ0lJTlRfTVJQRCwJIm1hc3RlciByZWFkIGRhdGEgcGFyaXR5IGVycm9yIiB9LAogfTsKIAorc3RhdGljIGlycXJldHVybl90IHNoNzc4MF9wY2lfZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBjbWQ7CisJaW50IGk7CisKKwlhZGRyID0gX19yYXdfcmVhZGwoaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQUxSKTsKKworCS8qCisJICogSGFuZGxlIHN0YXR1cyBlcnJvcnMuCisJICovCisJc3RhdHVzID0gX19yYXdfcmVhZHcoaG9zZS0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKTsKKwlpZiAoc3RhdHVzICYgKFBDSV9TVEFUVVNfUEFSSVRZIHwKKwkJICAgICAgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgfAorCQkgICAgICBQQ0lfU1RBVFVTX1NJR19UQVJHRVRfQUJPUlQgfAorCQkgICAgICBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQgfAorCQkgICAgICBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQpKSB7CisJCWNtZCA9IHBjaWJpb3NfaGFuZGxlX3N0YXR1c19lcnJvcnMoYWRkciwgc3RhdHVzLCBob3NlKTsKKwkJaWYgKGxpa2VseShjbWQpKQorCQkJX19yYXdfd3JpdGV3KGNtZCwgaG9zZS0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSBhcmJpdGVyIGVycm9ycy4KKwkgKi8KKwlzdGF0dXMgPSBfX3Jhd19yZWFkbChob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lBSU5UKTsKKwlmb3IgKGkgPSBjbWQgPSAwOyBpIDwgQVJSQVlfU0laRShwY2lfYXJiaXRlcl9lcnJvcnMpOyBpKyspIHsKKwkJaWYgKHN0YXR1cyAmIHBjaV9hcmJpdGVyX2Vycm9yc1tpXS5tYXNrKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcywgYWRkcj0lMDhseFxuIiwKKwkJCSAgICAgICBwY2lfYXJiaXRlcl9lcnJvcnNbaV0uc3RyLCBhZGRyKTsKKwkJCWNtZCB8PSBwY2lfYXJiaXRlcl9lcnJvcnNbaV0ubWFzazsKKwkJfQorCX0KKwlfX3Jhd193cml0ZWwoY21kLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lBSU5UKTsKKworCS8qCisJICogSGFuZGxlIHRoZSByZW1haW5pbmcgUENJIGVycm9ycy4KKwkgKi8KKwlzdGF0dXMgPSBfX3Jhd19yZWFkbChob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lJTlQpOworCWZvciAoaSA9IGNtZCA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaV9pbnRlcnJ1cHRfZXJyb3JzKTsgaSsrKSB7CisJCWlmIChzdGF0dXMgJiBwY2lfaW50ZXJydXB0X2Vycm9yc1tpXS5tYXNrKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcywgYWRkcj0lMDhseFxuIiwKKwkJCSAgICAgICBwY2lfaW50ZXJydXB0X2Vycm9yc1tpXS5zdHIsIGFkZHIpOworCQkJY21kIHw9IHBjaV9pbnRlcnJ1cHRfZXJyb3JzW2ldLm1hc2s7CisJCX0KKwl9CisJX19yYXdfd3JpdGVsKGNtZCwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJSU5UKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoNzc4MF9wY2lfc2Vycl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IGRldl9pZDsKKworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHN5c3RlbSBlcnJvciByZWNlaXZlZDogIik7CisJcGNpYmlvc19yZXBvcnRfc3RhdHVzKFBDSV9TVEFUVVNfU0lHX1NZU1RFTV9FUlJPUiwgMSk7CisJcHJpbnRrKCJcbiIpOworCisJLyogRGVhc3NlcnQgU0VSUiAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJSU5UTV9TRElNLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lJTlRNKTsKKworCS8qIEJhY2sgb2ZmIHRoZSBJUlEgZm9yIGF3aGlsZSAqLworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCWhvc2UtPnNlcnJfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKKwlhZGRfdGltZXIoJmhvc2UtPnNlcnJfdGltZXIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzaDc3ODBfcGNpX3NldHVwX2lycXMoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCWludCByZXQ7CisKKwkvKiBDbGVhciBvdXQgUENJIGFyYml0ZXIgSVJRcyAqLworCV9fcmF3X3dyaXRlbCgwLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lBSU5UKTsKKworCS8qIENsZWFyIGFsbCBlcnJvciBjb25kaXRpb25zICovCisJX19yYXdfd3JpdGV3KFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZICB8IFwKKwkJICAgICBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfCBcCisJCSAgICAgUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUIHwgXAorCQkgICAgIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCB8IFwKKwkJICAgICBQQ0lfU1RBVFVTX1NJR19UQVJHRVRfQUJPUlQgfCBcCisJCSAgICAgUENJX1NUQVRVU19QQVJJVFksIGhvc2UtPnJlZ19iYXNlICsgUENJX1NUQVRVUyk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShob3NlLT5zZXJyX2lycSwgc2g3NzgwX3BjaV9zZXJyX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgIlBDSSBTRVJSIGludGVycnVwdCIsIGhvc2UpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBGYWlsZWQgaG9va2luZyBTRVJSIElSUVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBUaGUgUENJIEVSUiBJUlEgbmVlZHMgdG8gYmUgSVJRRl9TSEFSRUQgc2luY2UgYWxsIG9mIHRoZSBwb3dlcgorCSAqIGRvd24gSVJRIHZlY3RvcnMgYXJlIHJvdXRlZCB0aHJvdWdoIHRoZSBFUlIgSVJRIHZlY3Rvci4gV2UKKwkgKiBvbmx5IHJlcXVlc3RfaXJxKCkgb25jZSBhcyB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIG1hc2tpbmcKKwkgKiBzb3VyY2UgZm9yIG11bHRpcGxlIGV2ZW50cy4KKwkgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShob3NlLT5lcnJfaXJxLCBzaDc3ODBfcGNpX2Vycl9pcnEsIElSUUZfU0hBUkVELAorCQkJICAiUENJIEVSUiBpbnRlcnJ1cHQiLCBob3NlKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlmcmVlX2lycShob3NlLT5zZXJyX2lycSwgaG9zZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogVW5tYXNrIGFsbCBvZiB0aGUgYXJiaXRlciBJUlFzLiAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJQUlOVF9NQktOIHwgU0g0X1BDSUFJTlRfVEJUTyB8IFNINF9QQ0lBSU5UX01CVE8gfCBcCisJCSAgICAgU0g0X1BDSUFJTlRfVEFCVCB8IFNINF9QQ0lBSU5UX01BQlQgfCBTSDRfUENJQUlOVF9SRFBFIHwgXAorCQkgICAgIFNINF9QQ0lBSU5UX1dEUEUsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUFJTlRNKTsKKworCS8qIFVubWFzayBhbGwgb2YgdGhlIFBDSSBJUlFzICovCisJX19yYXdfd3JpdGVsKFNINF9QQ0lJTlRNX1RUQURJTSAgfCBTSDRfUENJSU5UTV9UTVRPSU0gIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX01ERUlNICAgfCBTSDRfUENJSU5UTV9BUEVESU0gIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX1NESU0gICAgfCBTSDRfUENJSU5UTV9EUEVJVFdNIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX1BFRElUUk0gfCBTSDRfUENJSU5UTV9UQURJTU0gIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX01BRElNTSAgfCBTSDRfUENJSU5UTV9NV1BESU0gIHwgXAorCQkgICAgIFNINF9QQ0lJTlRNX01SRFBFSU0sIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUlOVE0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzaDc3ODBfcGNpX3RlYXJkb3duX2lycXMoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCWZyZWVfaXJxKGhvc2UtPmVycl9pcnEsIGhvc2UpOworCWZyZWVfaXJxKGhvc2UtPnNlcnJfaXJxLCBob3NlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNoNzc4MF9wY2k2Nl9pbml0KHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKCFwY2lfaXNfNjZtaHpfY2FwYWJsZShob3NlLCAwLCAwKSkKKwkJcmV0dXJuOworCisJLyogRW5hYmxlIHJlZ2lzdGVyIGFjY2VzcyAqLworCXRtcCA9IF9fcmF3X3JlYWRsKGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKKwl0bXAgfD0gU0g0X1BDSUNSX1BSRUZJWDsKKwlfX3Jhd193cml0ZWwodG1wLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7CisKKwkvKiBFbmFibGUgNjZNSHogb3BlcmF0aW9uICovCisJdG1wID0gX19yYXdfcmVhZHcoaG9zZS0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKTsKKwl0bXAgfD0gUENJX1NUQVRVU182Nk1IWjsKKwlfX3Jhd193cml0ZXcodG1wLCBob3NlLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpOworCisJLyogRG9uZSAqLworCXRtcCA9IF9fcmF3X3JlYWRsKGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKKwl0bXAgfD0gU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOOworCV9fcmF3X3dyaXRlbCh0bXAsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKK30KKwogc3RhdGljIGludCBfX2luaXQgc2g3NzgwX3BjaV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gJnNoNzc4MF9wY2lfY29udHJvbGxlcjsKKwlwaHlzX2FkZHJfdCBtZW1waHlzOworCXNpemVfdCBtZW1zaXplOwogCXVuc2lnbmVkIGludCBpZDsKLQljb25zdCBjaGFyICp0eXBlID0gTlVMTDsKLQlpbnQgcmV0OwotCXUzMiB3b3JkOworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IHJldCwgaTsKIAogCXByaW50ayhLRVJOX05PVElDRSAiUENJOiBTdGFydGluZyBpbnRpYWxpemF0aW9uLlxuIik7CiAKQEAgLTY1LDE3ICsyNTMsMjggQEAKIAkvKiBFbmFibGUgQ1BVIGFjY2VzcyB0byB0aGUgUENJQyByZWdpc3RlcnMuICovCiAJX19yYXdfd3JpdGVsKFBDSUVDUl9FTkJMLCBQQ0lFQ1IpOwogCi0JaWQgPSBfX3Jhd19yZWFkdyhjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lWSUQpOwotCWlmIChpZCAhPSBTSDc3ODBfVkVORE9SX0lEKSB7CisJLyogUmVzZXQgKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9QUlNULAorCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKKworCS8qCisJICogV2FpdCBmb3IgaXQgdG8gY29tZSBiYWNrIHVwLiBUaGUgc3BlYyBzYXlzIHRvIGFsbG93IGZvciB1cCB0bworCSAqIDEgc2Vjb25kIGFmdGVyIHRvZ2dsaW5nIHRoZSByZXNldCBwaW4sIGJ1dCBpbiBwcmFjdGljZSAxMDBtcworCSAqIGlzIG1vcmUgdGhhbiBlbm91Z2guCisJICovCisJbWRlbGF5KDEwMCk7CisKKwlpZCA9IF9fcmF3X3JlYWR3KGNoYW4tPnJlZ19iYXNlICsgUENJX1ZFTkRPUl9JRCk7CisJaWYgKGlkICE9IFBDSV9WRU5ET1JfSURfUkVORVNBUykgewogCQlwcmludGsoS0VSTl9FUlIgIlBDSTogVW5rbm93biB2ZW5kb3IgSUQgMHglMDR4LlxuIiwgaWQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZCA9IF9fcmF3X3JlYWR3KGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSURJRCk7Ci0JdHlwZSA9IChpZCA9PSBTSDc3NjNfREVWSUNFX0lEKQk/ICJTSDc3NjMiIDoKLQkgICAgICAgKGlkID09IFNINzc4MF9ERVZJQ0VfSUQpID8gIlNINzc4MCIgOgotCSAgICAgICAoaWQgPT0gU0g3NzgxX0RFVklDRV9JRCkgPyAiU0g3NzgxIiA6Ci0JICAgICAgIChpZCA9PSBTSDc3ODVfREVWSUNFX0lEKSA/ICJTSDc3ODUiIDoKKwlpZCA9IF9fcmF3X3JlYWR3KGNoYW4tPnJlZ19iYXNlICsgUENJX0RFVklDRV9JRCk7CisJdHlwZSA9IChpZCA9PSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzYzKSA/ICJTSDc3NjMiIDoKKwkgICAgICAgKGlkID09IFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODApID8gIlNINzc4MCIgOgorCSAgICAgICAoaWQgPT0gUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc4MSkgPyAiU0g3NzgxIiA6CisJICAgICAgIChpZCA9PSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3Nzg1KSA/ICJTSDc3ODUiIDoKIAkJCQkJICBOVUxMOwogCWlmICh1bmxpa2VseSghdHlwZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEZvdW5kIGFuIHVuc3VwcG9ydGVkIFJlbmVzYXMgaG9zdCAiCkBAIC04NSw2MiArMjg0LDExOSBAQAogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IEZvdW5kIGEgUmVuZXNhcyAlcyBob3N0ICIKIAkgICAgICAgImNvbnRyb2xsZXIsIHJldmlzaW9uICVkLlxuIiwgdHlwZSwKLQkgICAgICAgX19yYXdfcmVhZGIoY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJUklEKSk7CisJICAgICAgIF9fcmF3X3JlYWRiKGNoYW4tPnJlZ19iYXNlICsgUENJX1JFVklTSU9OX0lEKSk7CiAKLQlpZiAoKHJldCA9IHNoNF9wY2lfY2hlY2tfZGlyZWN0KGNoYW4pKSAhPSAwKQorCS8qCisJICogTm93IHRocm93IGl0IGluIHRvIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIG1vZGUgYW5kCisJICogc3RhcnQgdGhlIHJlYWwgd29yay4KKwkgKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUNSX1BSRUZJWCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworCisJbWVtcGh5cyA9IF9fcGEobWVtb3J5X3N0YXJ0KTsKKwltZW1zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQpOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG1vcmUgdGhhbiA1MTJNQiBvZiBtZW1vcnksIHdlIG5lZWQgdG8gcm9sbCBvdmVyIHRvCisJICogTEFSMS9MU1IxLgorCSAqLworCWlmIChtZW1zaXplID4gU1pfNTEyTSkgeworCQlfX3Jhd193cml0ZWwobWVtcGh5cyArIFNaXzUxMk0sIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxBUjEpOworCQlfX3Jhd193cml0ZWwoKCgobWVtc2l6ZSAtIFNaXzUxMk0pIC0gU1pfMU0pICYgMHgxZmYwMDAwMCkgfCAxLAorCQkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMU1IxKTsKKwkJbWVtc2l6ZSA9IFNaXzUxMk07CisJfSBlbHNlIHsKKwkJLyoKKwkJICogT3RoZXJ3aXNlIGp1c3QgemVybyBpdCBvdXQgYW5kIGRpc2FibGUgaXQuCisJCSAqLworCQlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJTEFSMSk7CisJCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMU1IxKTsKKwl9CisKKwkvKgorCSAqIExBUjAvTFNSMCBjb3ZlcnMgdXAgdG8gdGhlIGZpcnN0IDUxMk1CLCB3aGljaCBpcyBlbm91Z2ggdG8KKwkgKiBjb3ZlciBhbGwgb2YgbG93bWVtIG9uIG1vc3QgcGxhdGZvcm1zLgorCSAqLworCV9fcmF3X3dyaXRlbChtZW1waHlzLCBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMQVIwKTsKKwlfX3Jhd193cml0ZWwoKChtZW1zaXplIC0gU1pfMU0pICYgMHgxZmYwMDAwMCkgfCAxLAorCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxTUjApOworCisJLyoKKwkgKiBIb29rIHVwIHRoZSBFUlIgYW5kIFNFUlIgSVJRcy4KKwkgKi8KKwlyZXQgPSBzaDc3ODBfcGNpX3NldHVwX2lycXMoY2hhbik7CisJaWYgKHVubGlrZWx5KHJldCkpCiAJCXJldHVybiByZXQ7CiAKIAkvKgotCSAqIFNldCB0aGUgY2xhc3MgYW5kIHN1Yi1jbGFzcyBjb2Rlcy4KKwkgKiBEaXNhYmxlIHRoZSBjYWNoZSBzbm9vcCBjb250cm9sbGVyIGZvciBub24tY29oZXJlbnQgRE1BLgogCSAqLwotCV9fcmF3X3dyaXRlYihQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgPj4gOCwKLQkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lCQ0MpOwotCV9fcmF3X3dyaXRlYihQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgJiAweGZmLAotCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVNVQik7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUNTQ1IwKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQ1NBUjApOworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lDU0NSMSk7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUNTQVIxKTsKIAogCS8qCi0JICogU2V0IElPIGFuZCBNZW0gd2luZG93cyB0byBsb2NhbCBhZGRyZXNzCi0JICogTWFrZSBQQ0kgYW5kIGxvY2FsIGFkZHJlc3MgdGhlIHNhbWUgZm9yIGVhc3kgMSB0byAxIG1hcHBpbmcKKwkgKiBTZXR1cCB0aGUgbWVtb3J5IEJBUnMKIAkgKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIHNoNzc4MF9wY2lfbWFwLndpbmRvdzAuc2l6ZSAtIDB4ZmZmZmYsIFNINF9QQ0lMU1IwKTsKLQkvKiBTZXQgdGhlIHZhbHVlcyBvbiB3aW5kb3cgMCBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgc2g3NzgwX3BjaV9tYXAud2luZG93MC5iYXNlLCBTSDRfUENJTEFSMCk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCBzaDc3ODBfcGNpX21hcC53aW5kb3cwLmJhc2UsIFNINzc4MF9QQ0lNQkFSMCk7CisJZm9yIChpID0gMTsgaSA8IGNoYW4tPm5yX3Jlc291cmNlczsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gY2hhbi0+cmVzb3VyY2VzICsgaTsKKwkJcmVzb3VyY2Vfc2l6ZV90IHNpemU7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDM4MGYsIFNINF9QQ0lBSU5UTSk7CisJCWlmICh1bmxpa2VseShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykpCisJCQljb250aW51ZTsKIAotCS8qIFNldCB1cCBzdGFuZGFyZCBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwotCV9fcmF3X3dyaXRldygweEZCMDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVNUQVRVUyk7Ci0JX19yYXdfd3JpdGV3KDB4MDA0NywgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQ01EKTsKLQlfX3Jhd193cml0ZXcoMHgxOTEyLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lTVklEKTsKLQlfX3Jhd193cml0ZXcoMHgwMDAxLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lTSUQpOworCQkvKgorCQkgKiBNYWtlIHN1cmUgd2UncmUgaW4gdGhlIHJpZ2h0IHBoeXNpY2FsIGFkZHJlc3NpbmcgbW9kZQorCQkgKiBmb3IgZGVhbGluZyB3aXRoIHRoZSByZXNvdXJjZS4KKwkJICovCisJCWlmICgocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNXzMyQklUKSAmJiBfX2luXzI5Yml0X21vZGUoKSkgeworCQkJY2hhbi0+bnJfcmVzb3VyY2VzLS07CisJCQljb250aW51ZTsKKwkJfQogCi0JX19yYXdfd3JpdGViKDB4MDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVBJRik7CisJCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAKLQkvKiBBcHBseSBhbnkgbGFzdC1taW51dGUgUENJQyBmaXh1cHMgKi8KLQlwY2lfZml4dXBfcGNpYyhjaGFuKTsKKwkJLyoKKwkJICogVGhlIE1CTVIgbWFzayBpcyBjYWxjdWxhdGVkIGluIHVuaXRzIG9mIDI1NmtCLCB3aGljaAorCQkgKiBrZWVwcyB0aGluZ3MgcHJldHR5IHNpbXBsZS4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgoKHJvdW5kdXBfcG93X29mX3R3byhzaXplKSAvIFNaXzI1NkspIC0gMSkgPDwgMTgsCisJCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSU1CTVIoaSAtIDEpKTsKKwkJX19yYXdfd3JpdGVsKHJlcy0+c3RhcnQsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSU1CUihpIC0gMSkpOworCX0KIAotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhmZDAwMDAwMCwgU0g3NzgwX1BDSU1CUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMGZjMDAwMCwgU0g3NzgwX1BDSU1CTVIwKTsKKwkvKgorCSAqIEFuZCBJL08uCisJICovCisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgUENJX0JBU0VfQUREUkVTU18wKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJSU9CUik7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUlPQk1SKTsKIAotI2lmZGVmIENPTkZJR18zMkJJVAotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhjMDAwMDAwMCwgU0g3NzgwX1BDSU1CUjIpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgyMDAwMDAwMCAtIFNINzc4MF9QQ0lfSU9fU0laRSwgU0g3NzgwX1BDSU1CTVIyKTsKLSNlbmRpZgorCV9fcmF3X3dyaXRldyhQQ0lfQ09NTUFORF9TRVJSICAgfCBQQ0lfQ09NTUFORF9XQUlUICAgfCBcCisJCSAgICAgUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfTUFTVEVSIHwgXAorCQkgICAgIFBDSV9DT01NQU5EX01FTU9SWSwgY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfQ09NTUFORCk7CiAKLQkvKiBTZXQgSU9CUiBmb3Igd2luZG93cyBjb250YWluaW5nIGFyZWEgc3BlY2lmaWVkIGluIHBjaS5oICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCBjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQgJiB+KFNINzc4MF9QQ0lfSU9fU0laRS0xKSwKLQkJICAgICAgU0g3NzgwX1BDSUlPQlIpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgKChTSDc3ODBfUENJX0lPX1NJWkUtMSkgJiAoNzw8MTgpKSwKLQkJICAgICAgU0g3NzgwX1BDSUlPQk1SKTsKKwkvKgorCSAqIEluaXRpYWxpemF0aW9uIG1vZGUgY29tcGxldGUsIHJlbGVhc2UgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kCisJICogZW5hYmxlIHJvdW5kIHJvYmluIG1vZGUgdG8gc3RvcCBkZXZpY2Ugb3ZlcnJ1bnMvc3RhcnZhdGlvbi4KKwkgKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOIHwgU0g0X1BDSUNSX0ZUTywKKwkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7CiAKLQkvKiBTSDc3ODAgaW5pdCBkb25lLCBzZXQgY2VudHJhbCBmdW5jdGlvbiBpbml0IGNvbXBsZXRlICovCi0JLyogdXNlIHJvdW5kIHJvYmluIG1vZGUgdG8gc3RvcCBhIGRldmljZSBzdGFydmluZy9vdmVycnVuaW5nICovCi0Jd29yZCA9IFNINF9QQ0lDUl9QUkVGSVggfCBTSDRfUENJQ1JfQ0ZJTiB8IFNINF9QQ0lDUl9GVE87Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJQ1IpOworCXJldCA9IHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKGNoYW4pOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycjsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKGNoYW4pOworCXNoNzc4MF9wY2k2Nl9pbml0KGNoYW4pOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IFJ1bm5pbmcgYXQgJWRNSHouXG4iLAorCSAgICAgICAoX19yYXdfcmVhZHcoY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKSAmIFBDSV9TVEFUVVNfNjZNSFopID8KKwkgICAgICAgNjYgOiAzMyk7CiAKIAlyZXR1cm4gMDsKKworZXJyOgorCXNoNzc4MF9wY2lfdGVhcmRvd25faXJxcyhjaGFuKTsKKwlyZXR1cm4gcmV0OwogfQogYXJjaF9pbml0Y2FsbChzaDc3ODBfcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmggYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuaAppbmRleCA0YTUyNDc4Li4yMDVkY2JlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuaApAQCAtMTIsMTIgKzEyLDExIEBACiAjaWZuZGVmIF9QQ0lfU0g3NzgwX0hfCiAjZGVmaW5lIF9QQ0lfU0g3NzgwX0hfCiAKLS8qIFBsYXRmb3JtIFNwZWNpZmljIFZhbHVlcyAqLwotI2RlZmluZSBTSDc3ODBfVkVORE9SX0lECTB4MTkxMgotI2RlZmluZSBTSDc3ODFfREVWSUNFX0lECTB4MDAwMQotI2RlZmluZSBTSDc3ODBfREVWSUNFX0lECTB4MDAwMgotI2RlZmluZSBTSDc3NjNfREVWSUNFX0lECTB4MDAwNAotI2RlZmluZSBTSDc3ODVfREVWSUNFX0lECTB4MDAwNworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JFTkVTQVMJCTB4MTkxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzgxCTB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzgwCTB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzYzCTB4MDAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3Nzg1CTB4MDAwNwogCiAvKiBTSDc3ODAgQ29udHJvbCBSZWdpc3RlcnMgKi8KICNkZWZpbmUJUENJRUNSCQkJMHhGRTAwMDAwOApAQCAtMjcsNDQgKzI2LDkgQEAKICNkZWZpbmUgU0g3NzgwX1BDSV9DT05GSUdfQkFTRQkweEZEMDAwMDAwCS8qIENvbmZpZyBzcGFjZSBiYXNlIGFkZHIgKi8KICNkZWZpbmUgU0g3NzgwX1BDSV9DT05GSUdfU0laRQkweDAxMDAwMDAwCS8qIENvbmZpZyBzcGFjZSBzaXplICovCiAKLSNkZWZpbmUgU0g3NzgwX1BDSV9NRU1PUllfQkFTRQkweEZEMDAwMDAwCS8qIE1lbW9yeSBzcGFjZSBiYXNlIGFkZHIgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSV9NRU1fU0laRQkweDAxMDAwMDAwCS8qIFNpemUgb2YgTWVtb3J5IHdpbmRvdyAqLwotCi0jZGVmaW5lIFNINzc4MF9QQ0lfSU9fQkFTRQkweEZFMjAwMDAwCS8qIElPIHNwYWNlIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBTSDc3ODBfUENJX0lPX1NJWkUJMHgwMDQwMDAwMAkvKiBTaXplIG9mIElPIHdpbmRvdyAqLwotCiAjZGVmaW5lIFNINzc4MF9QQ0lSRUdfQkFTRQkweEZFMDQwMDAwCS8qIFBDSSByZWdzIGJhc2UgYWRkcmVzcyAqLwogCiAvKiBTSDc3ODAgUENJIENvbmZpZyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVZJRAkJMHgwMDAJCS8qIFZlbmRvciBJRCAqLwotI2RlZmluZSBTSDc3ODBfUENJRElECQkweDAwMgkJLyogRGV2aWNlIElEICovCi0jZGVmaW5lIFNINzc4MF9QQ0lDTUQJCTB4MDA0CQkvKiBDb21tYW5kICovCi0jZGVmaW5lIFNINzc4MF9QQ0lTVEFUVVMJMHgwMDYJCS8qIFN0YXR1cyAqLwotI2RlZmluZSBTSDc3ODBfUENJUklECQkweDAwOAkJLyogUmV2aXNpb24gSUQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVBJRgkJMHgwMDkJCS8qIFByb2dyYW0gSW50ZXJmYWNlICovCi0jZGVmaW5lIFNINzc4MF9QQ0lTVUIJCTB4MDBhCQkvKiBTdWIgY2xhc3MgY29kZSAqLwotI2RlZmluZSBTSDc3ODBfUENJQkNDCQkweDAwYgkJLyogQmFzZSBjbGFzcyBjb2RlICovCi0jZGVmaW5lIFNINzc4MF9QQ0lDTFMJCTB4MDBjCQkvKiBDYWNoZSBsaW5lIHNpemUgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUxUTQkJMHgwMGQJCS8qIGxhdGVuY3kgdGltZXIgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUhEUgkJMHgwMGUJCS8qIEhlYWRlciB0eXBlICovCi0jZGVmaW5lIFNINzc4MF9QQ0lCSVNUCQkweDAwZgkJLyogQklTVCAqLwotI2RlZmluZSBTSDc3ODBfUENJSUJBUgkJMHgwMTAJCS8qIElPIEJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBTSDc3ODBfUENJTUJBUjAJCTB4MDE0CQkvKiBNZW1vcnkgYmFzZSBhZGRyZXNzMCAqLwotI2RlZmluZSBTSDc3ODBfUENJTUJBUjEJCTB4MDE4CQkvKiBNZW1vcnkgYmFzZSBhZGRyZXNzMSAqLwotI2RlZmluZSBTSDc3ODBfUENJU1ZJRAkJMHgwMmMJCS8qIFN1YiBzeXN0ZW0gdmVuZG9yIElEICovCi0jZGVmaW5lIFNINzc4MF9QQ0lTSUQJCTB4MDJlCQkvKiBTdWIgc3lzdGVtIElEICovCi0jZGVmaW5lIFNINzc4MF9QQ0lDUAkJMHgwMzQKLSNkZWZpbmUgU0g3NzgwX1BDSUlOVExJTkUJMHgwM2MJCS8qIEludGVycnVwdCBsaW5lICovCi0jZGVmaW5lIFNINzc4MF9QQ0lJTlRQSU4JMHgwM2QJCS8qIEludGVycnVwdCBwaW4gKi8KLSNkZWZpbmUgU0g3NzgwX1BDSU1JTkdOVAkweDAzZQkJLyogTWludW11bSBncmFuZCAqLwotI2RlZmluZSBTSDc3ODBfUENJTUFYTEFUCTB4MDNmCQkvKiBNYXhtdW0gbGF0ZW5jeSAqLwotI2RlZmluZSBTSDc3ODBfUENJQ0lECQkweDA0MAotI2RlZmluZSBTSDc3ODBfUENJTklQCQkweDA0MQotI2RlZmluZSBTSDc3ODBfUENJUE1DCQkweDA0MgotI2RlZmluZSBTSDc3ODBfUENJUE1DU1IJCTB4MDQ0Ci0jZGVmaW5lIFNINzc4MF9QQ0lQTUNTUl9CU0UJMHgwNDYKLSNkZWZpbmUgU0g3NzgwX1BDSUNERAkJMHgwNDcKLQogI2RlZmluZSBTSDc3ODBfUENJSVIJCTB4MTE0CQkvKiBQQ0kgSW50ZXJydXB0IFJlZ2lzdGVyICovCiAjZGVmaW5lIFNINzc4MF9QQ0lJTVIJCTB4MTE4CQkvKiBQQ0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0g3NzgwX1BDSUFJUgkJMHgxMUMJCS8qIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KQEAgLTc2LDEwICs0MCw4IEBACiAjZGVmaW5lIFNINzc4MF9QQ0lQSU5UCQkweDFDQwkJLyogUG93ZXIgTWdtbnQgSW50LiBSZWdpc3RlciAqLwogI2RlZmluZSBTSDc3ODBfUENJUElOVE0JCTB4MUQwCQkvKiBQb3dlciBNZ21udCBNYXNrIFJlZ2lzdGVyICovCiAKLSNkZWZpbmUgU0g3NzgwX1BDSU1CUjAJCTB4MUUwCi0jZGVmaW5lIFNINzc4MF9QQ0lNQk1SMAkJMHgxRTQKLSNkZWZpbmUgU0g3NzgwX1BDSU1CUjIJCTB4MUYwCi0jZGVmaW5lIFNINzc4MF9QQ0lNQk1SMgkJMHgxRjQKKyNkZWZpbmUgU0g3NzgwX1BDSU1CUih4KQkoMHgxRTAgKyAoKHgpICogOCkpCisjZGVmaW5lIFNINzc4MF9QQ0lNQk1SKHgpCSgweDFFNCArICgoeCkgKiA4KSkKICNkZWZpbmUgU0g3NzgwX1BDSUlPQlIJCTB4MUY4CiAjZGVmaW5lIFNINzc4MF9QQ0lJT0JNUgkJMHgxRkMKICNkZWZpbmUgU0g3NzgwX1BDSUNTQ1IwCQkweDIxMAkJLyogQ2FjaGUgU25vb3AxIENudC4gUmVnaXN0ZXIgKi8KQEAgLTg3LDE2ICs0OSw0IEBACiAjZGVmaW5lIFNINzc4MF9QQ0lDU0FSMAkJMHgyMTgJLyogQ2FjaGUgU25vb3AxIEFkZHIuIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNINzc4MF9QQ0lDU0FSMQkJMHgyMUMJLyogQ2FjaGUgU25vb3AyIEFkZHIuIFJlZ2lzdGVyICovCiAKLS8qIEdlbmVyYWwgTWVtb3J5IENvbmZpZyBBZGRyZXNzZXMgKi8KLSNkZWZpbmUgU0g3NzgwX0NTMF9CQVNFX0FERFIJMHgwCi0jZGVmaW5lIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUJMHgwNDAwMDAwMAotI2RlZmluZSBTSDc3ODBfQ1MxX0JBU0VfQUREUgkoU0g3NzgwX0NTMF9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1MyX0JBU0VfQUREUgkoU0g3NzgwX0NTMV9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1MzX0JBU0VfQUREUgkoU0g3NzgwX0NTMl9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1M0X0JBU0VfQUREUgkoU0g3NzgwX0NTM19CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1M1X0JBU0VfQUREUgkoU0g3NzgwX0NTNF9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotI2RlZmluZSBTSDc3ODBfQ1M2X0JBU0VfQUREUgkoU0g3NzgwX0NTNV9CQVNFX0FERFIgKyBTSDc3ODBfTUVNX1JFR0lPTl9TSVpFKQotCi0jZGVmaW5lIFNINzc4MF8zMkJJVF9ERFJfQkFTRV9BRERSCTB4NDAwMDAwMDAKLQogI2VuZGlmIC8qIF9QQ0lfU0g3NzgwX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBjNDgxZGY2Li45NTNhZjEzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTMzLDE1ICszMywyMiBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3Nfc2NhbmJ1cyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCiB7CiAJc3RhdGljIGludCBuZXh0X2J1c25vOworCXN0YXRpYyBpbnQgbmVlZF9kb21haW5faW5mbzsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCiAJYnVzID0gcGNpX3NjYW5fYnVzKG5leHRfYnVzbm8sIGhvc2UtPnBjaV9vcHMsIGhvc2UpOworCWhvc2UtPmJ1cyA9IGJ1czsKKworCW5lZWRfZG9tYWluX2luZm8gPSBuZWVkX2RvbWFpbl9pbmZvIHx8IGhvc2UtPmluZGV4OworCWhvc2UtPm5lZWRfZG9tYWluX2luZm8gPSBuZWVkX2RvbWFpbl9pbmZvOwogCWlmIChidXMpIHsKIAkJbmV4dF9idXNubyA9IGJ1cy0+c3Vib3JkaW5hdGUgKyAxOwogCQkvKiBEb24ndCBhbGxvdyA4LWJpdCBidXMgbnVtYmVyIG92ZXJmbG93IGluc2lkZSB0aGUgaG9zZSAtCiAJCSAgIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgYnJpZGdlcy4gKi8KLQkJaWYgKG5leHRfYnVzbm8gPiAyMjQpCisJCWlmIChuZXh0X2J1c25vID4gMjI0KSB7CiAJCQluZXh0X2J1c25vID0gMDsKKwkJCW5lZWRfZG9tYWluX2luZm8gPSAxOworCQl9CiAKIAkJcGNpX2J1c19zaXplX2JyaWRnZXMoYnVzKTsKIAkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7CkBAIC01MSwxMCArNTgsMjEgQEAKIAogc3RhdGljIERFRklORV9NVVRFWChwY2lfc2Nhbl9tdXRleCk7CiAKLXZvaWQgX19kZXZpbml0IHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKK2ludCBfX2RldmluaXQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQogewotCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCBob3NlLT5tZW1fcmVzb3VyY2UpOwotCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgaG9zZS0+aW9fcmVzb3VyY2UpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGhvc2UtPm5yX3Jlc291cmNlczsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gaG9zZS0+cmVzb3VyY2VzICsgaTsKKworCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIHJlcykgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCX0KIAogCSpob3NlX3RhaWwgPSBob3NlOwogCWhvc2VfdGFpbCA9ICZob3NlLT5uZXh0OwpAQCAtNjgsNiArODYsMTEgQEAKIAl9CiAKIAkvKgorCSAqIFNldHVwIHRoZSBFUlIvUEVSUiBhbmQgU0VSUiB0aW1lcnMsIGlmIGF2YWlsYWJsZS4KKwkgKi8KKwlwY2liaW9zX2VuYWJsZV90aW1lcnMoaG9zZSk7CisKKwkvKgogCSAqIFNjYW4gdGhlIGJ1cyBpZiBpdCBpcyByZWdpc3RlciBhZnRlciB0aGUgUENJIHN1YnN5c3RlbQogCSAqIGluaXRpYWxpemF0aW9uLgogCSAqLwpAQCAtNzYsNiArOTksMTUgQEAKIAkJcGNpYmlvc19zY2FuYnVzKGhvc2UpOwogCQltdXRleF91bmxvY2soJnBjaV9zY2FuX211dGV4KTsKIAl9CisKKwlyZXR1cm4gMDsKKworb3V0OgorCWZvciAoLS1pOyBpID49IDA7IGktLSkKKwkJcmVsZWFzZV9yZXNvdXJjZSgmaG9zZS0+cmVzb3VyY2VzW2ldKTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIlNraXBwaW5nIFBDSSBidXMgc2NhbiBkdWUgdG8gcmVzb3VyY2UgY29uZmxpY3RcbiIpOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCkBAIC0xMjcsMTEgKzE1OSwxMyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBidXMtPnNlbGY7CiAJc3RydWN0IGxpc3RfaGVhZCAqbG47Ci0Jc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gYnVzLT5zeXNkYXRhOworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKIAogCWlmICghZGV2KSB7Ci0JCWJ1cy0+cmVzb3VyY2VbMF0gPSBjaGFuLT5pb19yZXNvdXJjZTsKLQkJYnVzLT5yZXNvdXJjZVsxXSA9IGNoYW4tPm1lbV9yZXNvdXJjZTsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGhvc2UtPm5yX3Jlc291cmNlczsgaSsrKQorCQkJYnVzLT5yZXNvdXJjZVtpXSA9IGhvc2UtPnJlc291cmNlcyArIGk7CiAJfQogCiAJZm9yIChsbiA9IGJ1cy0+ZGV2aWNlcy5uZXh0OyBsbiAhPSAmYnVzLT5kZXZpY2VzOyBsbiA9IGxuLT5uZXh0KSB7CkBAIC0xNDgsMzQgKzE4MiwyOSBAQAogICogYWRkcmVzc2VzIHRvIGJlIGFsbG9jYXRlZCBpbiB0aGUgMHgwMDAtMHgwZmYgcmVnaW9uCiAgKiBtb2R1bG8gMHg0MDAuCiAgKi8KLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSBkZXYtPnN5c2RhdGE7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2LT5zeXNkYXRhOwogCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJaWYgKHN0YXJ0IDwgUENJQklPU19NSU5fSU8gKyBjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQpCi0JCQlzdGFydCA9IFBDSUJJT1NfTUlOX0lPICsgY2hhbi0+aW9fcmVzb3VyY2UtPnN0YXJ0OworCQlpZiAoc3RhcnQgPCBQQ0lCSU9TX01JTl9JTyArIGhvc2UtPnJlc291cmNlc1swXS5zdGFydCkKKwkJCXN0YXJ0ID0gUENJQklPU19NSU5fSU8gKyBob3NlLT5yZXNvdXJjZXNbMF0uc3RhcnQ7CiAKIAkJLyoKICAgICAgICAgICAgICAgICAgKiBQdXQgZXZlcnl0aGluZyBpbnRvIDB4MDAtMHhmZiByZWdpb24gbW9kdWxvIDB4NDAwLgogCQkgKi8KLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKKwkJaWYgKHN0YXJ0ICYgMHgzMDApCiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQotCX0gZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7Ci0JCWlmIChzdGFydCA8IFBDSUJJT1NfTUlOX01FTSArIGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQpCi0JCQlzdGFydCA9IFBDSUJJT1NfTUlOX01FTSArIGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQ7CiAJfQogCi0JcmVzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KIAogdm9pZCBwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKLQkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKKwkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2LT5zeXNkYXRhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKQEAgLTE4OSw5ICsyMTgsOCBAQAogCXJlZ2lvbi0+ZW5kID0gcmVzLT5lbmQgLSBvZmZzZXQ7CiB9CiAKLXZvaWQgX19kZXZpbml0Ci1wY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKQordm9pZCBwY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCSAgICAgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pCiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2LT5zeXNkYXRhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKQEAgLTI3NCw2ICszMDIsODYgQEAKIAlyZXR1cm4gc3RyOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQKK3BjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXNfZWFybHkoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLAorCQkJCWludCB0b3BfYnVzLCBpbnQgY3VycmVudF9idXMsCisJCQkJdW5zaWduZWQgaW50IHN0YXR1c19tYXNrLCBpbnQgd2FybikKK3sKKwl1bnNpZ25lZCBpbnQgcGNpX2RldmZuOworCXUxNiBzdGF0dXM7CisJaW50IHJldDsKKworCWZvciAocGNpX2RldmZuID0gMDsgcGNpX2RldmZuIDwgMHhmZjsgcGNpX2RldmZuKyspIHsKKwkJaWYgKFBDSV9GVU5DKHBjaV9kZXZmbikpCisJCQljb250aW51ZTsKKwkJcmV0ID0gZWFybHlfcmVhZF9jb25maWdfd29yZChob3NlLCB0b3BfYnVzLCBjdXJyZW50X2J1cywKKwkJCQkJICAgICBwY2lfZGV2Zm4sIFBDSV9TVEFUVVMsICZzdGF0dXMpOworCQlpZiAocmV0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3RhdHVzID09IDB4ZmZmZikKKwkJCWNvbnRpbnVlOworCisJCWVhcmx5X3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIHRvcF9idXMsIGN1cnJlbnRfYnVzLAorCQkJCQlwY2lfZGV2Zm4sIFBDSV9TVEFUVVMsCisJCQkJCXN0YXR1cyAmIHN0YXR1c19tYXNrKTsKKwkJaWYgKHdhcm4pCisJCQlwcmludGsoIiglMDJ4OiUwMng6ICUwNFgpICIsIGN1cnJlbnRfYnVzLAorCQkJICAgICAgIHBjaV9kZXZmbiwgc3RhdHVzKTsKKwl9Cit9CisKKy8qCisgKiBXZSBjYW4ndCB1c2UgcGNpX2ZpbmRfZGV2aWNlKCkgaGVyZSBzaW5jZSB3ZSBhcmUKKyAqIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBfX2luaXRfcmVmb2sKK3BjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IHN0YXR1c19tYXNrLAorCQkJICBpbnQgd2FybikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCXUxNiBzdGF0dXM7CisKKwkJLyoKKwkJICogaWdub3JlIGhvc3QgYnJpZGdlIC0gd2UgaGFuZGxlCisJCSAqIHRoYXQgc2VwYXJhdGVseQorCQkgKi8KKwkJaWYgKGRldi0+YnVzLT5udW1iZXIgPT0gMCAmJiBkZXYtPmRldmZuID09IDApCisJCQljb250aW51ZTsKKworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsICZzdGF0dXMpOworCQlpZiAoc3RhdHVzID09IDB4ZmZmZikKKwkJCWNvbnRpbnVlOworCisJCWlmICgoc3RhdHVzICYgc3RhdHVzX21hc2spID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBjbGVhciB0aGUgc3RhdHVzIGVycm9ycyAqLworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1RBVFVTLCBzdGF0dXMgJiBzdGF0dXNfbWFzayk7CisKKwkJaWYgKHdhcm4pCisJCQlwcmludGsoIiglczogJTA0WCkgIiwgcGNpX25hbWUoZGV2KSwgc3RhdHVzKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCisJCWlmIChkZXYtPnN1Ym9yZGluYXRlKQorCQkJcGNpYmlvc19idXNfcmVwb3J0X3N0YXR1cyhkZXYtPnN1Ym9yZGluYXRlLCBzdGF0dXNfbWFzaywgd2Fybik7Cit9CisKK3ZvaWQgX19pbml0X3JlZm9rIHBjaWJpb3NfcmVwb3J0X3N0YXR1cyh1bnNpZ25lZCBpbnQgc3RhdHVzX21hc2ssIGludCB3YXJuKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZTsKKworCWZvciAoaG9zZSA9IGhvc2VfaGVhZDsgaG9zZTsgaG9zZSA9IGhvc2UtPm5leHQpIHsKKwkJaWYgKHVubGlrZWx5KCFob3NlLT5idXMpKQorCQkJcGNpYmlvc19idXNfcmVwb3J0X3N0YXR1c19lYXJseShob3NlLCBob3NlX2hlYWQtPmluZGV4LAorCQkJCQlob3NlLT5pbmRleCwgc3RhdHVzX21hc2ssIHdhcm4pOworCQllbHNlCisJCQlwY2liaW9zX2J1c19yZXBvcnRfc3RhdHVzKGhvc2UtPmJ1cywgc3RhdHVzX21hc2ssIHdhcm4pOworCX0KK30KKwogaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUsIGludCB3cml0ZV9jb21iaW5lKQogewpAQCAtMzAyLDkgKzQxMCwxNSBAQAogewogCXN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiA9IGRldi0+c3lzZGF0YTsKIAotCWlmICghY2hhbi0+aW9fbWFwX2Jhc2UpCisJaWYgKHVubGlrZWx5KCFjaGFuLT5pb19tYXBfYmFzZSkpIHsKIAkJY2hhbi0+aW9fbWFwX2Jhc2UgPSBnZW5lcmljX2lvX2Jhc2U7CiAKKwkJaWYgKHBjaV9kb21haW5zX3N1cHBvcnRlZCkKKwkJCXBhbmljKCJUbyBhdm9pZCBkYXRhIGNvcnJ1cHRpb24gaW9fbWFwX2Jhc2UgTVVTVCBiZSAiCisJCQkgICAgICAic2V0IHdpdGggbXVsdGlwbGUgUENJIGRvbWFpbnMuIik7CisJfQorCisKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShjaGFuLT5pb19tYXBfYmFzZSArIHBvcnQpOwogfQogCkBAIC0zMjEsMjAgKzQzNSw5IEBACiAKIAlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQogCQlyZXR1cm4gaW9wb3J0X21hcF9wY2koZGV2LCBzdGFydCwgbGVuKTsKLQotCS8qCi0JICogUHJlc2VudGx5IHRoZSBJT1JFU09VUkNFX01FTSBjYXNlIGlzIGEgYml0IHNwZWNpYWwsIG1vc3QKLQkgKiBTSDc3NTEgc3R5bGUgUENJIGNvbnRyb2xsZXJzIGhhdmUgUENJIG1lbW9yeSBhdCBhIGZpeGVkCi0JICogbG9jYXRpb24gaW4gdGhlIGFkZHJlc3Mgc3BhY2Ugd2hlcmUgbm8gcmVtYXBwaW5nIGlzIGRlc2lyZWQuCi0JICogV2l0aCB0aGUgSU9SRVNPVVJDRV9NRU0gY2FzZSBtb3JlIGNhcmUgaGFzIHRvIGJlIHRha2VuCi0JICogdG8gaW5oaWJpdCBwYWdlIHRhYmxlIG1hcHBpbmcgZm9yIGxlZ2FjeSBjb3JlcywgYnV0IHRoaXMgaXMKLQkgKiBwdW50ZWQgb2ZmIHRvIF9faW9yZW1hcCgpLgotCSAqCQkJCQktLSBQRk0uCi0JICovCiAJaWYgKGZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJaWYgKGZsYWdzICYgSU9SRVNPVVJDRV9DQUNIRUFCTEUpCiAJCQlyZXR1cm4gaW9yZW1hcChzdGFydCwgbGVuKTsKLQogCQlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKHN0YXJ0LCBsZW4pOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5jCmluZGV4IGFjMzdlZTguLmFlOTFhMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTG93LUxldmVsIFBDSSBFeHByZXNzIFN1cHBvcnQgZm9yIHRoZSBTSDc3ODYKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0zMCw2MCArMzAsODQgQEAKIAlpbnQgKCpwb3J0X2luaXRfaHcpKHN0cnVjdCBzaDc3ODZfcGNpZV9wb3J0ICpwb3J0KTsKIH0gKnNoNzc4Nl9wY2llX2h3b3BzOwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2lfMzJiaXRfbWVtX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpMF9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5uYW1lCT0gInBjaTBfbWVtIiwKLQkJLnN0YXJ0CT0gU0g0QV9QQ0lNRU1fQkFTRUEsCi0JCS5lbmQJPSBTSDRBX1BDSU1FTV9CQVNFQSArIFNaXzY0TSAtIDEsCisJCS5uYW1lCT0gIlBDSWUwIElPIiwKKwkJLnN0YXJ0CT0gMHhmZDAwMDAwMCwKKwkJLmVuZAk9IDB4ZmQwMDAwMDAgKyBTWl84TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwgeworCQkubmFtZQk9ICJQQ0llMCBNRU0gMCIsCisJCS5zdGFydAk9IDB4YzAwMDAwMDAsCisJCS5lbmQJPSAweGMwMDAwMDAwICsgU1pfNTEyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMCBNRU0gMSIsCisJCS5zdGFydAk9IDB4MTAwMDAwMDAsCisJCS5lbmQJPSAweDEwMDAwMDAwICsgU1pfNjRNIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkubmFtZQk9ICJwY2kxX21lbSIsCi0JCS5zdGFydAk9IFNINEFfUENJTUVNX0JBU0VBMSwKLQkJLmVuZAk9IFNINEFfUENJTUVNX0JBU0VBMSArIFNaXzY0TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLm5hbWUJPSAicGNpMl9tZW0iLAotCQkuc3RhcnQJPSBTSDRBX1BDSU1FTV9CQVNFQTIsCi0JCS5lbmQJPSBTSDRBX1BDSU1FTV9CQVNFQTIgKyBTWl82NE0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLm5hbWUJPSAiUENJZTAgTUVNIDIiLAorCQkuc3RhcnQJPSAweGZlMTAwMDAwLAorCQkuZW5kCT0gMHhmZTEwMDAwMCArIFNaXzFNIC0gMSwKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpXzI5Yml0X21lbV9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJPSBTSDRBX1BDSU1FTV9CQVNFLAotCS5lbmQJPSBTSDRBX1BDSU1FTV9CQVNFICsgU1pfNjRNIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg2X3BjaTFfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJQQ0llMSBJTyIsCisJCS5zdGFydAk9IDB4ZmQ4MDAwMDAsCisJCS5lbmQJPSAweGZkODAwMDAwICsgU1pfOE0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX0sIHsKKwkJLm5hbWUJPSAiUENJZTEgTUVNIDAiLAorCQkuc3RhcnQJPSAweGEwMDAwMDAwLAorCQkuZW5kCT0gMHhhMDAwMDAwMCArIFNaXzUxMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAorCX0sIHsKKwkJLm5hbWUJPSAiUENJZTEgTUVNIDEiLAorCQkuc3RhcnQJPSAweDMwMDAwMDAwLAorCQkuZW5kCT0gMHgzMDAwMDAwMCArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAorCX0sIHsKKwkJLm5hbWUJPSAiUENJZTEgTUVNIDIiLAorCQkuc3RhcnQJPSAweGZlMzAwMDAwLAorCQkuZW5kCT0gMHhmZTMwMDAwMCArIFNaXzFNIC0gMSwKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpX2lvX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpMl9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5uYW1lCT0gInBjaTBfaW8iLAotCQkuc3RhcnQJPSBTSDRBX1BDSUlPX0JBU0UsCi0JCS5lbmQJPSBTSDRBX1BDSUlPX0JBU0UgKyBTWl84TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJCS5uYW1lCT0gIlBDSWUyIElPIiwKKwkJLnN0YXJ0CT0gMHhmYzgwMDAwMCwKKwkJLmVuZAk9IDB4ZmM4MDAwMDAgKyBTWl80TSAtIDEsCiAJfSwgewotCQkubmFtZQk9ICJwY2kxX2lvIiwKLQkJLnN0YXJ0CT0gU0g0QV9QQ0lJT19CQVNFMSwKLQkJLmVuZAk9IFNINEFfUENJSU9fQkFTRTEgKyBTWl84TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJCS5uYW1lCT0gIlBDSWUyIE1FTSAwIiwKKwkJLnN0YXJ0CT0gMHg4MDAwMDAwMCwKKwkJLmVuZAk9IDB4ODAwMDAwMDAgKyBTWl81MTJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8zMkJJVCwKIAl9LCB7Ci0JCS5uYW1lCT0gInBjaTJfaW8iLAotCQkuc3RhcnQJPSBTSDRBX1BDSUlPX0JBU0UyLAotCQkuZW5kCT0gU0g0QV9QQ0lJT19CQVNFMiArIFNaXzRNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwkJLm5hbWUJPSAiUENJZTIgTUVNIDEiLAorCQkuc3RhcnQJPSAweDIwMDAwMDAwLAorCQkuZW5kCT0gMHgyMDAwMDAwMCArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAorCX0sIHsKKwkJLm5hbWUJPSAiUENJZTIgTUVNIDIiLAorCQkuc3RhcnQJPSAweGZjZDAwMDAwLAorCQkuZW5kCT0gMHhmY2QwMDAwMCArIFNaXzFNIC0gMSwKIAl9LAogfTsKIAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHNoNzc4Nl9wY2lfb3BzOwogCi0jZGVmaW5lIERFRklORV9DT05UUk9MTEVSKHN0YXJ0LCBpZHgpCQkJCVwKLXsJCQkJCQkJCVwKLQkucGNpX29wcwk9ICZzaDc3ODZfcGNpX29wcywJCQlcCi0JLnJlZ19iYXNlCT0gc3RhcnQsCQkJCVwKLQkvKiBtZW1fcmVzb3VyY2UgZmlsbGVkIGluIGF0IHByb2JlIHRpbWUgKi8JCVwKLQkubWVtX29mZnNldAk9IDAsCQkJCQlcCi0JLmlvX3Jlc291cmNlCT0gJnNoNzc4Nl9wY2lfaW9fcmVzb3VyY2VzW2lkeF0sCVwKLQkuaW9fb2Zmc2V0CT0gMCwJCQkJCVwKKyNkZWZpbmUgREVGSU5FX0NPTlRST0xMRVIoc3RhcnQsIGlkeCkJCQkJCVwKK3sJCQkJCQkJCQlcCisJLnBjaV9vcHMJPSAmc2g3Nzg2X3BjaV9vcHMsCQkJCVwKKwkucmVzb3VyY2VzCT0gc2g3Nzg2X3BjaSMjaWR4IyNfcmVzb3VyY2VzLAkJCVwKKwkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3ODZfcGNpIyNpZHgjI19yZXNvdXJjZXMpLAlcCisJLnJlZ19iYXNlCT0gc3RhcnQsCQkJCQlcCisJLm1lbV9vZmZzZXQJPSAwLAkJCQkJCVwKKwkuaW9fb2Zmc2V0CT0gMCwJCQkJCQlcCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NoYW5uZWwgc2g3Nzg2X3BjaV9jaGFubmVsc1tdID0gewpAQCAtMTgwLDcgKzIwNCw5IEBACiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gcG9ydC0+aG9zZTsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKLQlpbnQgcmV0OworCXBoeXNfYWRkcl90IG1lbXBoeXM7CisJc2l6ZV90IG1lbXNpemU7CisJaW50IHJldCwgaTsKIAogCS8qIEJlZ2luIGluaXRpYWxpemF0aW9uICovCiAJcGNpX3dyaXRlX3JlZyhjaGFuLCAwLCBTSDRBX1BDSUVUQ1RMUik7CkBAIC0yMDMsMTUgKzIyOSwyNCBAQAogCWRhdGEgfD0gUENJX0NBUF9JRF9FWFA7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVFWFBDQVAwKTsKIAotCS8qIEVuYWJsZSB4NCBsaW5rIHdpZHRoIGFuZCBleHRlbmRlZCBzeW5jLiAqLworCS8qIEVuYWJsZSBkYXRhIGxpbmsgbGF5ZXIgYWN0aXZlIHN0YXRlIHJlcG9ydGluZyAqLworCXBjaV93cml0ZV9yZWcoY2hhbiwgUENJX0VYUF9MTktDQVBfRExMTEFSQywgU0g0QV9QQ0lFRVhQQ0FQMyk7CisKKwkvKiBFbmFibGUgZXh0ZW5kZWQgc3luYyBhbmQgQVNQTSBMMHMgc3VwcG9ydCAqLwogCWRhdGEgPSBwY2lfcmVhZF9yZWcoY2hhbiwgU0g0QV9QQ0lFRVhQQ0FQNCk7Ci0JZGF0YSAmPSB+KFBDSV9FWFBfTE5LU1RBX05MVyA8PCAxNik7Ci0JZGF0YSB8PSAoMSA8PCAyMikgfCBQQ0lfRVhQX0xOS0NUTF9FUzsKKwlkYXRhICY9IH5QQ0lfRVhQX0xOS0NUTF9BU1BNQzsKKwlkYXRhIHw9IFBDSV9FWFBfTE5LQ1RMX0VTIHwgMTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRUVYUENBUDQpOwogCisJLyogV3JpdGUgb3V0IHRoZSBwaHlzaWNhbCBzbG90IG51bWJlciAqLworCWRhdGEgPSBwY2lfcmVhZF9yZWcoY2hhbiwgU0g0QV9QQ0lFRVhQQ0FQNSk7CisJZGF0YSAmPSB+UENJX0VYUF9TTFRDQVBfUFNOOworCWRhdGEgfD0gKHBvcnQtPmluZGV4ICsgMSkgPDwgMTk7CisJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVFWFBDQVA1KTsKKwogCS8qIFNldCB0aGUgY29tcGxldGlvbiB0aW1lciB0aW1lb3V0IHRvIHRoZSBtYXhpbXVtIDMybXMuICovCiAJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVUTENUTFIpOwotCWRhdGEgJj0gfjB4ZmZmZjsKKwlkYXRhICY9IH4weDNmMDA7CiAJZGF0YSB8PSAweDMyIDw8IDg7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVUTENUTFIpOwogCkBAIC0yMjQsNiArMjU5LDMzIEBACiAJZGF0YSB8PSAoMHhmZiA8PCAxNik7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVNQUNDVExSKTsKIAorCW1lbXBoeXMgPSBfX3BhKG1lbW9yeV9zdGFydCk7CisJbWVtc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhtZW1vcnlfZW5kIC0gbWVtb3J5X3N0YXJ0KTsKKworCS8qCisJICogSWYgdGhlcmUncyBtb3JlIHRoYW4gNTEyTUIgb2YgbWVtb3J5LCB3ZSBuZWVkIHRvIHJvbGwgb3ZlciB0bworCSAqIExBUjEvTEFNUjEuCisJICovCisJaWYgKG1lbXNpemUgPiBTWl81MTJNKSB7CisJCV9fcmF3X3dyaXRlbChtZW1waHlzICsgU1pfNTEyTSwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQVIxKTsKKwkJX19yYXdfd3JpdGVsKCgobWVtc2l6ZSAtIFNaXzUxMk0pIC0gU1pfMjU2KSB8IDEsCisJCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFTEFNUjEpOworCQltZW1zaXplID0gU1pfNTEyTTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBPdGhlcndpc2UganVzdCB6ZXJvIGl0IG91dCBhbmQgZGlzYWJsZSBpdC4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRUxBUjEpOworCQlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQU1SMSk7CisJfQorCisJLyoKKwkgKiBMQVIwL0xBTVIwIGNvdmVycyB1cCB0byB0aGUgZmlyc3QgNTEyTUIsIHdoaWNoIGlzIGVub3VnaCB0bworCSAqIGNvdmVyIGFsbCBvZiBsb3dtZW0gb24gbW9zdCBwbGF0Zm9ybXMuCisJICovCisJX19yYXdfd3JpdGVsKG1lbXBoeXMsIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFTEFSMCk7CisJX19yYXdfd3JpdGVsKChtZW1zaXplIC0gU1pfMjU2KSB8IDEsIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFTEFNUjApOworCiAJLyogRmluaXNoIGluaXRpYWxpemF0aW9uICovCiAJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVUQ1RMUik7CiAJZGF0YSB8PSAweDE7CkBAIC0yNDMsMTAgKzMwNSwxNCBAQAogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMTAwMDA3LCBTSDRBX1BDSUVQQ0lDT05GMSk7CisJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVQQ0lDT05GMSk7CisJZGF0YSAmPSB+KFBDSV9TVEFUVVNfREVWU0VMX01BU0sgPDwgMTYpOworCWRhdGEgfD0gUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIgfAorCQkoUENJX1NUQVRVU19DQVBfTElTVCB8IFBDSV9TVEFUVVNfREVWU0VMX0ZBU1QpIDw8IDE2OworCXBjaV93cml0ZV9yZWcoY2hhbiwgZGF0YSwgU0g0QV9QQ0lFUENJQ09ORjEpOworCiAJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDgwODg4MDAwLCBTSDRBX1BDSUVUWFZDMERDVExSKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAyMjIwMDAsIFNINEFfUENJRVJYVkMwRENUTFIpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwNTBBMCwgU0g0QV9QQ0lFRVhQQ0FQMik7CiAKIAl3bWIoKTsKIApAQCAtMjU0LDE1ICszMjAsMzIgQEAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlBDSTogUENJZSMlZCBsaW5rIHdpZHRoICVkXG4iLAogCSAgICAgICBwb3J0LT5pbmRleCwgKGRhdGEgPj4gMjApICYgMHgzZik7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDA3YzAwMDAsIFNINEFfUENJRVBBTVIwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkgwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkwwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ODAwMDAxMDAsIFNINEFfUENJRVBUQ1RMUjApOwogCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAzZmMwMDAwLCBTSDRBX1BDSUVQQU1SMik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJIMik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJMMik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDgwMDAwMDAwLCBTSDRBX1BDSUVQVENUTFIyKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hhbi0+bnJfcmVzb3VyY2VzOyBpKyspIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBjaGFuLT5yZXNvdXJjZXMgKyBpOworCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKKwkJdTMyIGVuYWJsZV9tYXNrOworCisJCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUFRDVExSKGkpKTsKKworCQlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCisJCS8qCisJCSAqIFRoZSBQQU1SIG1hc2sgaXMgY2FsY3VsYXRlZCBpbiB1bml0cyBvZiAyNTZrQiwgd2hpY2gKKwkJICoga2VlcHMgdGhpbmdzIHByZXR0eSBzaW1wbGUuCisJCSAqLworCQlfX3Jhd193cml0ZWwoKChyb3VuZHVwX3Bvd19vZl90d28oc2l6ZSkgLyBTWl8yNTZLKSAtIDEpIDw8IDE4LAorCQkJICAgICBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRVBBTVIoaSkpOworCisJCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSSChpKSk7CisJCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSTChpKSk7CisKKwkJZW5hYmxlX21hc2sgPSBNQVNLX1BBUkU7CisJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJCWVuYWJsZV9tYXNrIHw9IE1BU0tfU1BDOworCisJCXBjaV93cml0ZV9yZWcoY2hhbiwgZW5hYmxlX21hc2ssIFNINEFfUENJRVBUQ1RMUihpKSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTYsOSArMzc5LDcgQEAKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCXJldHVybiByZXQ7CiAKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcihwb3J0LT5ob3NlKTsKLQotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihwb3J0LT5ob3NlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaDc3ODZfcGNpZV9od29wcyBzaDc3ODZfNjVubV9wY2llX2h3b3BzIF9faW5pdGRhdGEgPSB7CkBAIC0zMzIsMTcgKzQxMyw3IEBACiAKIAkJcG9ydC0+aW5kZXgJCT0gaTsKIAkJcG9ydC0+aG9zZQkJPSBzaDc3ODZfcGNpX2NoYW5uZWxzICsgaTsKLQkJcG9ydC0+aG9zZS0+aW9fbWFwX2Jhc2UJPSBwb3J0LT5ob3NlLT5pb19yZXNvdXJjZS0+c3RhcnQ7Ci0KLQkJLyoKLQkJICogQ2hlY2sgaWYgd2UgYXJlIGJvb3RpbmcgaW4gMjkgb3IgMzItYml0IG1vZGUKLQkJICoKLQkJICogMzItYml0IG1vZGUgcHJvdmlkZXMgZWFjaCBjb250cm9sbGVyIHdpdGggaXRzIG93bgotCQkgKiBtZW1vcnkgd2luZG93LCB3aGlsZSAyOS1iaXQgbW9kZSB1c2VzIGEgc2hhcmVkIG9uZS4KLQkJICovCi0JCXBvcnQtPmhvc2UtPm1lbV9yZXNvdXJjZSA9IHRlc3RfbW9kZV9waW4oTU9ERV9QSU4xMCkgPwotCQkJJnNoNzc4Nl9wY2lfMzJiaXRfbWVtX3Jlc291cmNlc1tpXSA6Ci0JCQkmc2g3Nzg2X3BjaV8yOWJpdF9tZW1fcmVzb3VyY2U7CisJCXBvcnQtPmhvc2UtPmlvX21hcF9iYXNlCT0gcG9ydC0+aG9zZS0+cmVzb3VyY2VzWzBdLnN0YXJ0OwogCiAJCXJldCB8PSBzaDc3ODZfcGNpZV9od29wcy0+cG9ydF9pbml0X2h3KHBvcnQpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuaCBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuaAppbmRleCBjNjU1MjkwLi45MGE2OTkyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmgKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5oCkBAIC0zMCw0NyArMzAsOSBAQAogICogZm9yIG90aGVyKE1heCBQYXlsb2FkIFNpemU9NDA5NkIsUENJSU9fU0laRT04TSkKICAqLwogCi0vKiBQQ0kwLTA6IFBDSSBJL08gc3BhY2UgKi8KLSNkZWZpbmUgU0g0QV9QQ0lJT19CQVNFCQkweEZEMDAwMDAwCS8qIFBDSSBJL08gZm9yIGNvbnRyb2xsZXIgMCAqLwotI2RlZmluZSBTSDRBX1BDSUlPX0JBU0UxCTB4RkQ4MDAwMDAJLyogUENJIEkvTyBmb3IgY29udHJvbGxlciAxIChSZXYxLjE0KSovCi0jZGVmaW5lIFNINEFfUENJSU9fQkFTRTIJMHhGQzgwMDAwMAkvKiBQQ0kgSS9PIGZvciBjb250cm9sbGVyIDIgKFJldjEuMTcxKSovCi0KLSNkZWZpbmUgU0g0QV9QQ0lJT19TSVpFNjQJMHgwMDAxMDAwMAkvKiBQTFggYWxsb3dzIG9ubHkgNjRLICovCi0jZGVmaW5lIFNINEFfUENJSU9fU0laRQkJMHgwMDgwMDAwMAkvKiA4TSAqLwotI2RlZmluZSBTSDRBX1BDSUlPX1NJWkUyCTB4MDA0MDAwMDAJLyogNE0gKFJldjEuMTcxKSovCi0KLS8qIFBDSTAtMTogUENJIG1lbW9yeSBzcGFjZSAyOS1iaXQgYWRkcmVzcyAqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9CQVNFCTB4MTAwMDAwMDAKLSNkZWZpbmUgU0g0QV9QQ0lNRU1fU0laRQkweDA0MDAwMDAwCS8qIDY0TSAqLwotCi0vKiBQQ0kwLTI6IFBDSSBtZW1vcnkgc3BhY2UgMzItYml0IGFkZHJlc3MgKi8KLSNkZWZpbmUgU0g0QV9QQ0lNRU1fQkFTRUEJMHhDMDAwMDAwMAkvKiAgZm9yIGNvbnRyb2xsZXIgMCAqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9CQVNFQTEJMHhBMDAwMDAwMAkvKiAgZm9yIGNvbnRyb2xsZXIgMSAoUmV2MS4xNCkqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9CQVNFQTIJMHg4MDAwMDAwMAkvKiAgZm9yIGNvbnRyb2xsZXIgMiAoUmV2MS4xNzEpKi8KLSNkZWZpbmUgU0g0QV9QQ0lNRU1fU0laRUEJMHgyMDAwMDAwMAkvKiA1MTJNICovCi0KIC8qIFBDSTA6IFBDSSBtZW1vcnkgdGFyZ2V0IHRyYW5zZmVyIDMyLWJpdCBhZGRyZXNzIHRyYW5zbGF0aW9uIHZhbHVlKFJldjEuMTFUKSovCiAjZGVmaW5lIFNINEFfUENJQk1TVFJfVFJBTlNMQVRJT04JMHgyMDAwMDAwMAogCi0jZGVmaW5lIFNINEFfUENJX0RFVklDRV9JRAkJMHgwMDAyCi0jZGVmaW5lIFNINEFfUENJX1ZFTkRPUl9JRAkJMHgxOTEyCi0KLS8vIFBDSSBjb21wYXRpYmxlIDAwMC0wM2YKLSNkZWZpbmUgUENJX0NNRAkJMHgwMDQKLSNkZWZpbmUgUENJX1JJRAkJMHgwMDgKLSNkZWZpbmUgUENJX0lCQVIJMHgwMTAKLSNkZWZpbmUgUENJX01CQVIwCTB4MDE0Ci0jZGVmaW5lIFBDSV9NQkFSMQkweDAxOAotCi0vKiBQQ0kgcG93ZXIgbWFuYWdlbWVudC9NU0kvY2FwYWJsaXR5IDA0MC0wZmYgKi8KLS8qIFBDSUUgZXh0ZW5kZWQgMTAwLWZmZiAqLwotCi0vKiBTSDc3ODYgZGV2aWNlIGlkZW50aWZpY2F0aW9uICovCS8vIFJldjEuMTcxCi0jZGVmaW5lIFNINEFfUFZSCQkoMHhGRjAwMDAzMCkKLSNkZWZpbmUgU0g0QV9QVlJfU0hYMwkJKDB4MTA0MDAwMDApCi0jZGVmaW5lIFNINEFfUFJSCQkoMHhGRjAwMDA0NCkKLSNkZWZpbmUgU0g0QV9QUlJfU0g3Nzg2CQkoMHgwMDAwMDQwMCkJLy8gUmV2MS4xNzEKLQogLyoJU1BWQ1IwCQkqLwogI2RlZmluZQlTSDRBX1BDSUVWQ1IwCQkoMHgwMDAwMDApCS8qIFIgLSAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19UT1BfTUIJKDI0KQpAQCAtMzUwLDIzICszMTIsMjMgQEAKICNkZWZpbmUJU0g0QV9QQ0lFQ1NBUjUJCSgweDAyMDJCNCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQlTSDRBX1BDSUVTVENUTFI1CSgweDAyMDJCOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogCi0vKglQQ0lFUEFSTDAJKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDAJCSgweDAyMDQwMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLworLyoJUENJRVBBUkwJKi8KKyNkZWZpbmUJU0g0QV9QQ0lFUEFSTCh4KQkoMHgwMjA0MDAgKyAoKHgpICogMHgyMCkpIC8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KICNkZWZpbmUJCUJJVFNfUEFMCSgxOCkKICNkZWZpbmUJCU1BU0tfUEFMCSgweDNmZmY8PEJJVFNfUEFMKQogCi0vKglQQ0lFUEFSSDAJKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSSDAJCSgweDAyMDQwNCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLworLyoJUENJRVBBUkgJKi8KKyNkZWZpbmUJU0g0QV9QQ0lFUEFSSCh4KQkoMHgwMjA0MDQgKyAoKHgpICogMHgyMCkpIC8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KICNkZWZpbmUJCUJJVFNfUEFICSgwKQogI2RlZmluZQkJTUFTS19QQUgJKDB4ZmZmZmZmZmY8PEJJVFNfUEFIKQogCi0vKglQQ0lFUEFNUjAJICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVIwCQkoMHgwMjA0MDgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KKy8qCVBDSUVQQU1SCSAqLworI2RlZmluZQlTSDRBX1BDSUVQQU1SKHgpCSgweDAyMDQwOCArICgoeCkgKiAweDIwKSkgLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19QQU0JKDE4KQogI2RlZmluZQkJTUFTS19QQU0JKDB4M2ZmZjw8QklUU19QQU0pCiAKLS8qCVBDSUVQVENUTFIwCSovCi0jZGVmaW5lCVNINEFfUENJRVBUQ1RMUjAJKDB4MDIwNDBDKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCisvKglQQ0lFUFRDVExSCSovCisjZGVmaW5lIFNINEFfUENJRVBUQ1RMUih4KQkoMHgwMjA0MEMgKyAoKHgpICogMHgyMCkpCiAjZGVmaW5lCQlCSVRTX1BBUkUJKDMxKQogI2RlZmluZQkJTUFTS19QQVJFCSgweDE8PEJJVFNfUEFSRSkKICNkZWZpbmUJCUJJVFNfVEMJCSgyMCkKQEAgLTM3OCwyNiArMzQwLDYgQEAKICNkZWZpbmUJCUJJVFNfU1BDCSg4KQogI2RlZmluZQkJTUFTS19TUEMJKDB4MTw8QklUU19TUEMpCiAKLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDEJCSgweDAyMDQyMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJIMQkJKDB4MDIwNDI0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVIxCQkoMHgwMjA0MjgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSMQkoMHgwMjA0MkMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDIJCSgweDAyMDQ0MCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJIMgkJKDB4MDIwNDQ0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVIyCQkoMHgwMjA0NDgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSMgkoMHgwMjA0NEMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDMJCSgweDAyMDQ2MCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJIMwkJKDB4MDIwNDY0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVIzCQkoMHgwMjA0NjgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSMwkoMHgwMjA0NkMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDQJCSgweDAyMDQ4MCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJINAkJKDB4MDIwNDg0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVI0CQkoMHgwMjA0ODgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSNAkoMHgwMjA0OEMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFSTDUJCSgweDAyMDRBMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJINQkJKDB4MDIwNEE0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBTVI1CQkoMHgwMjA0QTgpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSNQkoMHgwMjA0QUMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KICNkZWZpbmUJU0g0QV9QQ0lFRE1BT1IJCSgweDAyMTAwMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQlTSDRBX1BDSUVETVNBUjAJCSgweDAyMTEwMCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQlTSDRBX1BDSUVETVNBSFIwCSgweDAyMTEwNCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3N1cGVyaHl3YXkvb3BzLXNoNC0yMDIuYyBiL2FyY2gvc2gvZHJpdmVycy9zdXBlcmh5d2F5L29wcy1zaDQtMjAyLmMKaW5kZXggM2IxNGJmOC4uNmRhNjJlOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3N1cGVyaHl3YXkvb3BzLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvc3VwZXJoeXdheS9vcHMtc2g0LTIwMi5jCkBAIC0xMzQsOCArMTM0LDggQEAKIAkgKgogCSAqIERvIG5vdCB0cnVzdCB0aGUgZG9jdW1lbnRhdGlvbiwgZm9yIGl0IGlzIGV2aWwuCiAJICovCi0JdmNyaCA9IGN0cmxfaW5sKGJhc2UpOwotCXZjcmwgPSBjdHJsX2lubChiYXNlICsgc2l6ZW9mKHUzMikpOworCXZjcmggPSBfX3Jhd19yZWFkbChiYXNlKTsKKwl2Y3JsID0gX19yYXdfcmVhZGwoYmFzZSArIHNpemVvZih1MzIpKTsKIAogCXRtcCA9ICgodTY0KXZjcmggPDwgMzIpIHwgdmNybDsKIAltZW1jcHkodmNyLCAmdG1wLCBzaXplb2YodTY0KSk7CkBAIC0xNDcsOCArMTQ3LDggQEAKIHsKIAl1NjQgdG1wID0gKih1NjQgKikmdmNyOwogCi0JY3RybF9vdXRsKCh0bXAgPj4gMzIpICYgMHhmZmZmZmZmZiwgYmFzZSk7Ci0JY3RybF9vdXRsKHRtcCAmIDB4ZmZmZmZmZmYsIGJhc2UgKyBzaXplb2YodTMyKSk7CisJX19yYXdfd3JpdGVsKCh0bXAgPj4gMzIpICYgMHhmZmZmZmZmZiwgYmFzZSk7CisJX19yYXdfd3JpdGVsKHRtcCAmIDB4ZmZmZmZmZmYsIGJhc2UgKyBzaXplb2YodTMyKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9LYnVpbGQKaW5kZXggZTEyMWMzMC4uNDZjYjkzNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9LYnVpbGQKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTEsNiArMSw4IEBACiBpbmNsdWRlIGluY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQogCi1oZWFkZXIteSArPSBjYWNoZWN0bC5oIGNwdS1mZWF0dXJlcy5oCitoZWFkZXIteSArPSBjYWNoZWN0bC5oCitoZWFkZXIteSArPSBjcHUtZmVhdHVyZXMuaAoraGVhZGVyLXkgKz0gaHdfYnJlYWtwb2ludC5oCiAKIHVuaWZkZWYteSArPSB1bmlzdGRfMzIuaAogdW5pZmRlZi15ICs9IHVuaXN0ZF82NC5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaAppbmRleCA5OWQ2YjNlLi40NDZiMzgzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKQEAgLTI4LDcgKzI4LDcgQEAKIC8qIFJldHVybnMgdGhlIHByaXZpbGVnZWQgc2VnbWVudCBiYXNlIG9mIGEgZ2l2ZW4gYWRkcmVzcyAgKi8KICNkZWZpbmUgUFhTRUcoYSkJKCgodW5zaWduZWQgbG9uZykoYSkpICYgMHhlMDAwMDAwMCkKIAotI2lmIGRlZmluZWQoQ09ORklHXzI5QklUKSB8fCBkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpCisjaWZkZWYgQ09ORklHXzI5QklUCiAvKgogICogTWFwIGFuIGFkZHJlc3MgdG8gYSBjZXJ0YWluIHByaXZpbGVnZWQgc2VnbWVudAogICovCkBAIC00MCw3ICs0MCwxNSBAQAogCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgUDNTRUcpKQogI2RlZmluZSBQNFNFR0FERFIoYSkJXAogCSgoX190eXBlb2ZfXyhhKSkoKCh1bnNpZ25lZCBsb25nKShhKSAmIDB4MWZmZmZmZmYpIHwgUDRTRUcpKQotI2VuZGlmIC8qIDI5QklUIHx8IFBNQl9GSVhFRCAqLworI2Vsc2UKKy8qCisgKiBUaGVzZSB3aWxsIG5ldmVyIHdvcmsgaW4gMzItYml0LCBkb24ndCBldmVuIGJvdGhlci4KKyAqLworI2RlZmluZSBQMVNFR0FERFIoYSkJX19mdXRpbGVfcmVtYXBwaW5nX2F0dGVtcHQKKyNkZWZpbmUgUDJTRUdBRERSKGEpCV9fZnV0aWxlX3JlbWFwcGluZ19hdHRlbXB0CisjZGVmaW5lIFAzU0VHQUREUihhKQlfX2Z1dGlsZV9yZW1hcHBpbmdfYXR0ZW1wdAorI2RlZmluZSBQNFNFR0FERFIoYSkJX19mdXRpbGVfcmVtYXBwaW5nX2F0dGVtcHQKKyNlbmRpZgogI2VuZGlmIC8qIFAxU0VHICovCiAKIC8qIENoZWNrIGlmIGFuIGFkZHJlc3MgY2FuIGJlIHJlYWNoZWQgaW4gMjkgYml0cyAqLwpAQCAtNTcsMTEgKzY1LDUgQEAKICNkZWZpbmUgUDNfQUREUl9NQVgJCVA0U0VHCiAjZW5kaWYKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpZmRlZiBDT05GSUdfUE1CCi1leHRlcm4gaW50IF9faW5fMjliaXRfbW9kZSh2b2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfUE1CICovCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fU0hfQUREUlNQQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWxpZ25tZW50LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FsaWdubWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmVmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FsaWdubWVudC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX19BU01fU0hfQUxJR05NRU5UX0gKKyNkZWZpbmUgX19BU01fU0hfQUxJR05NRU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfYnl0ZV9hY2Nlc3Modm9pZCk7CitleHRlcm4gdm9pZCBpbmNfdW5hbGlnbmVkX3dvcmRfYWNjZXNzKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5jX3VuYWxpZ25lZF9kd29yZF9hY2Nlc3Modm9pZCk7CitleHRlcm4gdm9pZCBpbmNfdW5hbGlnbmVkX211bHRpX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfdXNlcl9hY2Nlc3Modm9pZCk7CitleHRlcm4gdm9pZCBpbmNfdW5hbGlnbmVkX2tlcm5lbF9hY2Nlc3Modm9pZCk7CisKKyNkZWZpbmUgVU1fV0FSTgkJKDEgPDwgMCkKKyNkZWZpbmUgVU1fRklYVVAJKDEgPDwgMSkKKyNkZWZpbmUgVU1fU0lHTkFMCSgxIDw8IDIpCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdW5hbGlnbmVkX3VzZXJfYWN0aW9uKHZvaWQpOworCitleHRlcm4gdm9pZCB1bmFsaWduZWRfZml4dXBzX25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW5zbl9zaXplX3QsIHN0cnVjdCBwdF9yZWdzICopOworCisjZW5kaWYgLyogX19BU01fU0hfQUxJR05NRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWdyYi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtZ3JiLmgKaW5kZXggNGM1YjdkYi4uYTI3M2M4OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtZ3JiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtZ3JiLmgKQEAgLTEyMCw1MCArMTIwLDQgQEAKIAkJOiAibWVtb3J5IiAsICJyMCIsICJyMSIpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKLXsKLQlpbnQgcmV0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiICAgLmFsaWduIDIJCVxuXHQiCi0JCSIgICBtb3ZhICAgICAxZiwgIHIwCVxuXHQiCi0JCSIgICBub3AJCQlcblx0IgotCQkiICAgbW92ICAgICByMTUsICByMQlcblx0IgotCQkiICAgbW92ICAgICMtOCwgIHIxNQlcblx0IgotCQkiICAgbW92LmwgICBAJTEsICAlMAlcblx0IgotCQkiICAgY21wL2VxICAgJTIsICAlMAlcblx0IgotCQkiICAgYmYJICAgICAxZgkJXG5cdCIKLQkJIiAgIG1vdi5sICAgICUzLCBAJTEJXG5cdCIKLQkJIjE6IG1vdiAgICAgIHIxLCAgcjE1CVxuXHQiCi0JCTogIj0mciIgKHJldCkKLQkJOiAiciIgKHYpLCAiciIgKG9sZCksICJyIiAobmV3KQotCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIiAsICJ0Iik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIgICAuYWxpZ24gMgkJXG5cdCIKLQkJIiAgIG1vdmEgICAgMWYsICAgcjAJXG5cdCIKLQkJIiAgIG5vcAkJCVxuXHQiCi0JCSIgICBtb3YgICAgcjE1LCAgIHIxCVxuXHQiCi0JCSIgICBtb3YgICAgIy0xMiwgIHIxNQlcblx0IgotCQkiICAgbW92LmwgIEAlMiwgICAlMQlcblx0IgotCQkiICAgbW92CSAgICAlMSwgICAlMCAgICBcblx0IgotCQkiICAgY21wL2VxICAlNCwgICAlMAlcblx0IgotCQkiICAgYnQvcyAgICAxZgkJXG5cdCIKLQkJIiAgICBhZGQgICAgJTMsICAgJTEJXG5cdCIKLQkJIiAgIG1vdi5sICAgJTEsICBAJTIJXG5cdCIKLQkJIjE6IG1vdiAgICAgcjEsICAgcjE1CVxuXHQiCi0JCTogIj0mciIgKHJldCksICI9JnIiICh0bXApCi0JCTogInIiICh2KSwgInIiIChhKSwgInIiICh1KQotCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIiAsICJ0Iik7Ci0KLQlyZXR1cm4gcmV0ICE9IHU7Ci19CiAjZW5kaWYgLyogX19BU01fU0hfQVRPTUlDX0dSQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1sbHNjLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1sbHNjLmgKaW5kZXggYjA0MGUxZS4uNGIwMGI3OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtbGxzYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWxsc2MuaApAQCAtMTA0LDMxICsxMDQsNCBAQAogCTogInQiKTsKIH0KIAotI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKLQotLyoqCi0gKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgotICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCi0gKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKLXsKLQlpbnQgYywgb2xkOwotCWMgPSBhdG9taWNfcmVhZCh2KTsKLQlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCi0JCQlicmVhazsKLQkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0KLQlyZXR1cm4gYyAhPSAodSk7Ci19Ci0KICNlbmRpZiAvKiBfX0FTTV9TSF9BVE9NSUNfTExTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCBiMTYzODhkLi4yNzVhNDQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTI1LDU4ICsyNSw0MyBAQAogI2VuZGlmCiAKICNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJCWF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikJCWF0b21pY19hZGRfcmV0dXJuKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KQkJKGF0b21pY19pbmNfcmV0dXJuKHYpID09IDApCisjZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSx2KQkoYXRvbWljX3N1Yl9yZXR1cm4oKGkpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikJCShhdG9taWNfc3ViX3JldHVybigxLCAodikpID09IDApCisjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikJCWF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAotI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSBhdG9taWNfc3ViX3JldHVybigxLCh2KSkKLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgYXRvbWljX2FkZF9yZXR1cm4oMSwodikpCisjZGVmaW5lIGF0b21pY19pbmModikJCQlhdG9taWNfYWRkKDEsICh2KSkKKyNkZWZpbmUgYXRvbWljX2RlYyh2KQkJCWF0b21pY19zdWIoMSwgKHYpKQogCi0vKgotICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpCQkoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCisjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pCQkoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvKSwgKG4pKSkKKworLyoqCisgKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCiAgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCiAgKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCiAgKi8KLSNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdCh2KSAoYXRvbWljX2luY19yZXR1cm4odikgPT0gMCkKLQotI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksdikgKGF0b21pY19zdWJfcmV0dXJuKChpKSwgKHYpKSA9PSAwKQotI2RlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KHYpIChhdG9taWNfc3ViX3JldHVybigxLCAodikpID09IDApCi0KLSNkZWZpbmUgYXRvbWljX2luYyh2KSBhdG9taWNfYWRkKDEsKHYpKQotI2RlZmluZSBhdG9taWNfZGVjKHYpIGF0b21pY19zdWIoMSwodikpCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfR1VTQV9SQikgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXJldCA9IHYtPmNvdW50ZXI7Ci0JaWYgKGxpa2VseShyZXQgPT0gb2xkKSkKLQkJdi0+Y291bnRlciA9IG5ldzsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQogewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmV0ID0gdi0+Y291bnRlcjsKLQlpZiAocmV0ICE9IHUpCi0JCXYtPmNvdW50ZXIgKz0gYTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcmV0ICE9IHU7CisJcmV0dXJuIGMgIT0gKHUpOwogfQotI2VuZGlmIC8qICFDT05GSUdfR1VTQV9SQiAmJiAhQ09ORklHX0NQVV9TSDRBICovCi0KLSNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCi0jZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbWIoKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBkZGE5NmViLi5kYTNlYmVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNjMsNiArNjMsMTQgQEAKIAlpZiAoYm9vdF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzICYmIFBhZ2VBbm9uKHBhZ2UpKQogCQlfX2ZsdXNoX2Fub25fcGFnZShwYWdlLCB2bWFkZHIpOwogfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKmFkZHIsIGludCBzaXplKQoreworCV9fZmx1c2hfd2JhY2tfcmVnaW9uKGFkZHIsIHNpemUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbihhZGRyLCBzaXplKTsKK30KIAogI2RlZmluZSBBUkNIX0hBU19GTFVTSF9LRVJORUxfRENBQ0hFX1BBR0UKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKaW5kZXggOWZlN2Q3Zi4uMTFkYTRjNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaApAQCAtMTQ2LDggKzE0NiwxNyBAQAogCS5mbGFncyA9IF9mbGFncywJCQkJCQlcCiB9CiAKK3N0cnVjdCBjbGtfZGl2NF90YWJsZSB7CisJc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqZGl2X211bHRfdGFibGU7CisJdm9pZCAoKmtpY2spKHN0cnVjdCBjbGsgKmNsayk7Cit9OworCiBpbnQgc2hfY2xrX2RpdjRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAotCQkJIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlKTsKKwkJCSBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlKTsKK2ludCBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJIHN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpOworaW50IHNoX2Nsa19kaXY0X3JlcGFyZW50X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBuciwKKwkJCSBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgKnRhYmxlKTsKIAogI2RlZmluZSBTSF9DTEtfRElWNihfbmFtZSwgX3BhcmVudCwgX3JlZywgX2ZsYWdzKQlcCiB7CQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaAppbmRleCBlMjY4MWFiLi40Njc2YmY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctZ3JiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWdyYi5oCkBAIC01NywxMSArNTcsMTAgQEAKIAkJIiAgIG1vdi5sICBAJTEsICAgJTAgICAgICBcblx0IiAvKiBsb2FkICBvbGQgdmFsdWUgKi8KIAkJIiAgIGNtcC9lcSAgJTAsICAgJTIgICAgICBcblx0IgogCQkiICAgYmYgICAgICAgICAgICAxZiAgICAgIFxuXHQiIC8qIGlmIG5vdCBlcXVhbCAqLwotCQkiICAgbW92LmwgICAlMiwgICBAJTEgICAgIFxuXHQiIC8qIHN0b3JlIG5ldyB2YWx1ZSAqLworCQkiICAgbW92LmwgICAlMywgICBAJTEgICAgIFxuXHQiIC8qIHN0b3JlIG5ldyB2YWx1ZSAqLwogCQkiMTogbW92ICAgICByMSwgICByMTUgICAgIFxuXHQiIC8qIExPR09VVCAqLwotCQk6ICI9JnIiIChyZXR2YWwpLAotCQkgICIrciIgIChtKQotCQk6ICJyIiAgIChuZXcpCisJCTogIj0mciIgKHJldHZhbCkKKwkJOiAgInIiICAobSksICJyIiAgKG9sZCksICJyIiAgKG5ldykKIAkJOiAibWVtb3J5IiAsICJyMCIsICJyMSIsICJ0Iik7CiAKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDg3Y2VkMTMuLmJlYTMzMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTg5LDggKzg5LDYgQEAKIHsKIAlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CS8qIGZvciBwb3J0YWJpbGl0eSAqLwotCiAJaWYgKGRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoZGV2LCBnZXRfb3JkZXIoc2l6ZSksIHZhZGRyKSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAppbmRleCA3OGVlZDNlMC4uZTkzNGEyZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCkBAIC0yMCwxNCArMjAsMTQgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCiAjZGVmaW5lIGRtYW9yX3JlYWRfcmVnKG4pIFwKLSAgICAobiA/IGN0cmxfaW53KFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAotCTogY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKKyAgICAobiA/IF9fcmF3X3JlYWR3KFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorCTogX19yYXdfcmVhZHcoU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKICNkZWZpbmUgZG1hb3Jfd3JpdGVfcmVnKG4sIGRhdGEpIFwKLSAgICAobiA/IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UxICsgRE1BT1IpIFwKLSAgICA6IGN0cmxfb3V0dyhkYXRhLCBTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQorICAgIChuID8gX19yYXdfd3JpdGV3KGRhdGEsIFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAorICAgIDogX19yYXdfd3JpdGV3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCiAjZWxzZSAvKiBPdGhlciBDUFUgKi8KLSNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgY3RybF9pbncoU0hfRE1BQ19CQVNFMCArIERNQU9SKQotI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikKKyNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgX19yYXdfcmVhZHcoU0hfRE1BQ19CQVNFMCArIERNQU9SKQorI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgX19yYXdfd3JpdGV3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikKICNlbmRpZgogCiBzdGF0aWMgaW50IGRtdGVfaXJxX21hcFtdIF9fbWF5YmVfdW51c2VkID0gewpAQCAtNjQsOCArNjQsMTAgQEAKICNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAogI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAogI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAorI2RlZmluZSBETV9GSVgJMHgwMDAwYzAwMAogI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAogI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAorI2RlZmluZSBTTV9GSVgJMHgwMDAwMzAwMAogI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCiAjZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCiAjZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCkBAIC04Myw3ICs4NSw3IEBACiAgKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCiAgKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KICAqLwotI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTXzMyKQorI2RlZmluZSBSU19EVUFMCShETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSkKIAogLyogRE1BIGJhc2UgYWRkcmVzcyAqLwogc3RhdGljIHUzMiBkbWFfYmFzZV9hZGRyW10gX19tYXliZV91bnVzZWQgPSB7CkBAIC0xMjMsMTAgKzEyNSw0NyBAQAogICovCiAjZGVmaW5lIFNIRE1BX01JWF9JUlEJKDEgPDwgMSkKICNkZWZpbmUgU0hETUFfRE1BT1IxCSgxIDw8IDIpCi0jZGVmaW5lIFNIRE1BX0RNQUUxCQkoMSA8PCAzKQorI2RlZmluZSBTSERNQV9ETUFFMQkoMSA8PCAzKQorCitlbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCB7CisJU0hETUFfU0xBVkVfU0NJRjBfVFgsCisJU0hETUFfU0xBVkVfU0NJRjBfUlgsCisJU0hETUFfU0xBVkVfU0NJRjFfVFgsCisJU0hETUFfU0xBVkVfU0NJRjFfUlgsCisJU0hETUFfU0xBVkVfU0NJRjJfVFgsCisJU0hETUFfU0xBVkVfU0NJRjJfUlgsCisJU0hETUFfU0xBVkVfU0NJRjNfVFgsCisJU0hETUFfU0xBVkVfU0NJRjNfUlgsCisJU0hETUFfU0xBVkVfU0NJRjRfVFgsCisJU0hETUFfU0xBVkVfU0NJRjRfUlgsCisJU0hETUFfU0xBVkVfU0NJRjVfVFgsCisJU0hETUFfU0xBVkVfU0NJRjVfUlgsCisJU0hETUFfU0xBVkVfU0lVQV9UWCwKKwlTSERNQV9TTEFWRV9TSVVBX1JYLAorCVNIRE1BX1NMQVZFX1NJVUJfVFgsCisJU0hETUFfU0xBVkVfU0lVQl9SWCwKKwlTSERNQV9TTEFWRV9OVU1CRVIsCS8qIE11c3Qgc3RheSBsYXN0ICovCit9OworCitzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgeworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkCXNsYXZlX2lkOworCWRtYV9hZGRyX3QJCQlhZGRyOworCXUzMgkJCQljaGNyOworCWNoYXIJCQkJbWlkX3JpZDsKK307CiAKIHN0cnVjdCBzaF9kbWFlX3BkYXRhIHsKIAl1bnNpZ25lZCBpbnQgbW9kZTsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgKmNvbmZpZzsKKwlpbnQgY29uZmlnX251bTsKK307CisKK3N0cnVjdCBkZXZpY2U7CisKK3N0cnVjdCBzaF9kbWFlX3NsYXZlIHsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZAlzbGF2ZV9pZDsgLyogU2V0IGJ5IHRoZSBwbGF0Zm9ybSAqLworCXN0cnVjdCBkZXZpY2UJCQkqZG1hX2RldjsgLyogU2V0IGJ5IHRoZSBwbGF0Zm9ybSAqLworCXN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZwkqY29uZmlnOyAgLyogU2V0IGJ5IHRoZSBkcml2ZXIgKi8KIH07CiAKICNlbmRpZiAvKiBfX0RNQV9TSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2R3YXJmLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2R3YXJmLmgKaW5kZXggYmRjY2JiZi4uZDYyYWJkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kd2FyZi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZHdhcmYuaApAQCAtMjQzLDE2ICsyNDMsMTMgQEAKIAogCXVuc2lnbmVkIGxvbmcgY2llX3BvaW50ZXI7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Ci0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2RlZmluZSBEV0FSRl9DSUVfWl9BVUdNRU5UQVRJT04JKDEgPDwgMCkKIAotCS8qCi0JICogJ21vZCcgd2lsbCBiZSBub24tTlVMTCBpZiB0aGlzIENJRSBjYW1lIGZyb20gYSBtb2R1bGUncwotCSAqIC5laF9mcmFtZSBzZWN0aW9uLgotCSAqLwotCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwkvKiBsaW5rZWQtbGlzdCBlbnRyeSBpZiB0aGlzIENJRSBpcyBmcm9tIGEgbW9kdWxlICovCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCisJc3RydWN0IHJiX25vZGUgbm9kZTsKIH07CiAKIC8qKgpAQCAtMjY2LDEzICsyNjMsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3NfcmFuZ2U7CiAJdW5zaWduZWQgY2hhciAqaW5zdHJ1Y3Rpb25zOwogCXVuc2lnbmVkIGNoYXIgKmVuZDsKKworCS8qIGxpbmtlZC1saXN0IGVudHJ5IGlmIHRoaXMgRkRFIGlzIGZyb20gYSBtb2R1bGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiAKLQkvKgotCSAqICdtb2QnIHdpbGwgYmUgbm9uLU5VTEwgaWYgdGhpcyBGREUgY2FtZSBmcm9tIGEgbW9kdWxlJ3MKLQkgKiAuZWhfZnJhbWUgc2VjdGlvbi4KLQkgKi8KLQlzdHJ1Y3QgbW9kdWxlICptb2Q7CisJc3RydWN0IHJiX25vZGUgbm9kZTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggNWFjMWU0MC4uNmU3Y2VhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC01NSwxNiArNTUsMjkgQEAKICNkZWZpbmUgRklYX05fQ09MT1VSUyA4CiAJRklYX0NNQVBfQkVHSU4sCiAJRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMpIC0gMSwKLQlGSVhfVU5DQUNIRUQsCisKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCUZJWF9LTUFQX0JFR0lOLAkvKiByZXNlcnZlZCBwdGUncyBmb3IgdGVtcG9yYXJ5IGtlcm5lbCBtYXBwaW5ncyAqLwogCUZJWF9LTUFQX0VORCA9IEZJWF9LTUFQX0JFR0lOKyhLTV9UWVBFX05SKk5SX0NQVVMpLTEsCiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19JT1JFTUFQX0ZJWEVECisJLyoKKwkgKiBGSVhfSU9SRU1BUCBlbnRyaWVzIGFyZSB1c2VmdWwgZm9yIG1hcHBpbmcgcGh5c2ljYWwgYWRkcmVzcworCSAqIHNwYWNlIGJlZm9yZSBpb3JlbWFwKCkgaXMgdXNlYWJsZSwgZS5nLiByZWFsbHkgZWFybHkgaW4gYm9vdAorCSAqIGJlZm9yZSBrbWFsbG9jKCkgaXMgd29ya2luZy4KKwkgKi8KKyNkZWZpbmUgRklYX05fSU9SRU1BUFMJMzIKKwlGSVhfSU9SRU1BUF9CRUdJTiwKKwlGSVhfSU9SRU1BUF9FTkQgPSBGSVhfSU9SRU1BUF9CRUdJTiArIEZJWF9OX0lPUkVNQVBTLAorI2VuZGlmCisKIAlfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMKIH07CiAKIGV4dGVybiB2b2lkIF9fc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCiAJCQkgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7CitleHRlcm4gdm9pZCBfX2NsZWFyX2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHBncHJvdF90IGZsYWdzKTsKIAogI2RlZmluZSBzZXRfZml4bWFwKGlkeCwgcGh5cykgXAogCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCmluZGV4IGZiNmJiYjkuLjA2YzQyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaApAQCAtMiw4ICsyLDggQEAKICNkZWZpbmUgX19BU01fU0hfRlBVX0gKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKICNpZmRlZiBDT05GSUdfU0hfRlBVCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9mcHUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0xNiwyMiArMTYsMjMgQEAKIAlyZWdzLT5zciAmPSB+U1JfRkQ7CiB9CiAKLXN0cnVjdCB0YXNrX3N0cnVjdDsKLQogZXh0ZXJuIHZvaWQgc2F2ZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICpfX3Rzayk7Ci12b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqX190c2spOworZXh0ZXJuIHZvaWQgZnB1X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgX19mcHVfc3RhdGVfcmVzdG9yZSh2b2lkKTsKICNlbHNlCi0KLSNkZWZpbmUgc2F2ZV9mcHUodHNrKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSByZWxlYXNlX2ZwdShyZWdzKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGdyYWJfZnB1KHJlZ3MpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpCWRvIHsgfSB3aGlsZSAoMCkKLQorI2RlZmluZSBzYXZlX2ZwdSh0c2spCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByZXN0b3JlX2ZwdSh0c2spCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlbGVhc2VfZnB1KHJlZ3MpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGdyYWJfZnB1KHJlZ3MpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmcHVfc3RhdGVfcmVzdG9yZShyZWdzKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2ZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiBzdHJ1Y3QgdXNlcl9yZWdzZXQ7CiAKIGV4dGVybiBpbnQgZG9fZnB1X2luc3QodW5zaWduZWQgc2hvcnQsIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKIGV4dGVybiBpbnQgZnByZWdzX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKIAkJICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCkBAIC02NSwxOCArNjYsNiBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmICh0c2tfdXNlZF9tYXRoKHRzaykpIHsKLQkJaWYgKChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpICYmIHRzayA9PSBjdXJyZW50KQotCQkJdW5sYXp5X2ZwdSh0c2ssIHRhc2tfcHRfcmVncyh0c2spKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRzayk7Ci0JcmV0dXJuIDA7Ci19Ci0KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fQVNNX1NIX0ZQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NWRkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIF9fQVNNX1NIX0hXX0JSRUFLUE9JTlRfSAorI2RlZmluZSBfX0FTTV9TSF9IV19CUkVBS1BPSU5UX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUkNIX0hXX0JSRUFLUE9JTlRfSAorCisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCB7CisJY2hhcgkJKm5hbWU7IC8qIENvbnRhaW5zIG5hbWUgb2YgdGhlIHN5bWJvbCB0byBzZXQgYmtwdCAqLworCXVuc2lnbmVkIGxvbmcJYWRkcmVzczsKKwl1MTYJCWxlbjsKKwl1MTYJCXR5cGU7Cit9OworCitlbnVtIHsKKwlTSF9CUkVBS1BPSU5UX1JFQUQJPSAoMSA8PCAxKSwKKwlTSF9CUkVBS1BPSU5UX1dSSVRFCT0gKDEgPDwgMiksCisJU0hfQlJFQUtQT0lOVF9SVwk9IFNIX0JSRUFLUE9JTlRfUkVBRCB8IFNIX0JSRUFLUE9JTlRfV1JJVEUsCisKKwlTSF9CUkVBS1BPSU5UX0xFTl8xCT0gKDEgPDwgMTIpLAorCVNIX0JSRUFLUE9JTlRfTEVOXzIJPSAoMSA8PCAxMyksCisJU0hfQlJFQUtQT0lOVF9MRU5fNAk9IFNIX0JSRUFLUE9JTlRfTEVOXzEgfCBTSF9CUkVBS1BPSU5UX0xFTl8yLAorCVNIX0JSRUFLUE9JTlRfTEVOXzgJPSAoMSA8PCAxNCksCit9OworCitzdHJ1Y3Qgc2hfdWJjIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGludAludW1fZXZlbnRzOworCXVuc2lnbmVkIGludAl0cmFwX25yOworCXZvaWQJCSgqZW5hYmxlKShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICosIGludCk7CisJdm9pZAkJKCpkaXNhYmxlKShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICosIGludCk7CisJdm9pZAkJKCplbmFibGVfYWxsKSh1bnNpZ25lZCBsb25nKTsKKwl2b2lkCQkoKmRpc2FibGVfYWxsKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nCSgqYWN0aXZlX21hc2spKHZvaWQpOworCXVuc2lnbmVkIGxvbmcJKCp0cmlnZ2VyZWRfbWFzaykodm9pZCk7CisJdm9pZAkJKCpjbGVhcl90cmlnZ2VyZWRfbWFzaykodW5zaWduZWQgbG9uZyk7CisJc3RydWN0IGNsawkqY2xrOwkvKiBvcHRpb25hbCBpbnRlcmZhY2UgY2xvY2sgLyBNU1RQIGJpdCAqLworfTsKKworc3RydWN0IHBlcmZfZXZlbnQ7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgcG11OworCisvKiBNYXhpbXVtIG51bWJlciBvZiBVQkMgY2hhbm5lbHMgKi8KKyNkZWZpbmUgSEJQX05VTQkJMgorCisvKiBhcmNoL3NoL2tlcm5lbC9od19icmVha3BvaW50LmMgKi8KK2V4dGVybiBpbnQgYXJjaF9jaGVja192YV9pbl91c2Vyc3BhY2UodW5zaWduZWQgbG9uZyB2YSwgdTE2IGhicF9sZW4pOworZXh0ZXJuIGludCBhcmNoX3ZhbGlkYXRlX2h3YmtwdF9zZXR0aW5ncyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsCisJCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gaW50IGh3X2JyZWFrcG9pbnRfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKKworaW50IGFyY2hfaW5zdGFsbF9od19icmVha3BvaW50KHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7Cit2b2lkIGFyY2hfdW5pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK3ZvaWQgaHdfYnJlYWtwb2ludF9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwordm9pZCBod19icmVha3BvaW50X3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7CisKK2V4dGVybiB2b2lkIGFyY2hfZmlsbF9wZXJmX2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfc2hfdWJjKHN0cnVjdCBzaF91YmMgKik7CisKK2V4dGVybiBzdHJ1Y3QgcG11IHBlcmZfb3BzX2JwOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX0hXX0JSRUFLUE9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDAyNmRkNjUuLjdkYWI3YjIzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBmb3Igb2xkIGNvbXBhdCBjb2RlIGZvciBJL08gb2Zmc2V0aW5nIHRvIFN1cGVySU9zLCBhbGwgb2Ygd2hpY2ggYXJlCiAgKiBiZXR0ZXIgaGFuZGxlZCB0aHJvdWdoIHRoZSBtYWNodmVjIGlvcG9ydCBtYXBwaW5nIHJvdXRpbmVzIHRoZXNlIGRheXMuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CkBAIC03OSwxNiArODAsNTEgQEAKICNkZWZpbmUgd3JpdGVsKHYsYSkJCSh7IF9fcmF3X3dyaXRlbCgodiksKGEpKTsgbWIoKTsgfSkKICNkZWZpbmUgd3JpdGVxKHYsYSkJCSh7IF9fcmF3X3dyaXRlcSgodiksKGEpKTsgbWIoKTsgfSkKIAotLyogU3VwZXJIIG9uLWNoaXAgSS9PIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBjdHJsX2luYgkJX19yYXdfcmVhZGIKLSNkZWZpbmUgY3RybF9pbncJCV9fcmF3X3JlYWR3Ci0jZGVmaW5lIGN0cmxfaW5sCQlfX3Jhd19yZWFkbAotI2RlZmluZSBjdHJsX2lucQkJX19yYXdfcmVhZHEKKy8qCisgKiBMZWdhY3kgU3VwZXJIIG9uLWNoaXAgSS9PIGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGFyZSBhbGwgZGVwcmVjYXRlZCwgYWxsIG5ldyAoYW5kIGVzcGVjaWFsbHkgY3Jvc3MtcGxhdGZvcm0pIGNvZGUKKyAqIHNob3VsZCBiZSB1c2luZyB0aGUgX19yYXdfeHh4KCkgcm91dGluZXMgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggX19kZXByZWNhdGVkIGN0cmxfaW5iKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoYWRkcik7Cit9CiAKLSNkZWZpbmUgY3RybF9vdXRiCQlfX3Jhd193cml0ZWIKLSNkZWZpbmUgY3RybF9vdXR3CQlfX3Jhd193cml0ZXcKLSNkZWZpbmUgY3RybF9vdXRsCQlfX3Jhd193cml0ZWwKLSNkZWZpbmUgY3RybF9vdXRxCQlfX3Jhd193cml0ZXEKK3N0YXRpYyBpbmxpbmUgdTE2IF9fZGVwcmVjYXRlZCBjdHJsX2ludyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBfX2RlcHJlY2F0ZWQgY3RybF9pbmwodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBfX3Jhd19yZWFkbChhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgX19kZXByZWNhdGVkIGN0cmxfaW5xKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZHEoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgY3RybF9vdXRiKHU4IHYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX3Jhd193cml0ZWIodiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgY3RybF9vdXR3KHUxNiB2LCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19yYXdfd3JpdGV3KHYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIGN0cmxfb3V0bCh1MzIgdiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fcmF3X3dyaXRlbCh2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBjdHJsX291dHEodTY0IHYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX3Jhd193cml0ZXEodiwgYWRkcik7Cit9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdlbmVyaWNfaW9fYmFzZTsKIApAQCAtOTcsNiArMTMzLDI4IEBACiAJX19yYXdfcmVhZHcoZ2VuZXJpY19pb19iYXNlKTsKIH0KIAorI2RlZmluZSBfX0JVSUxEX1VOQ0FDSEVEX0lPKGJ3bHEsIHR5cGUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHR5cGUgcmVhZCMjYndscSMjX3VuY2FjaGVkKHVuc2lnbmVkIGxvbmcgYWRkcikJCVwKK3sJCQkJCQkJCQlcCisJdHlwZSByZXQ7CQkJCQkJCVwKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CQkJCQkJXAorCXJldCA9IF9fcmF3X3JlYWQjI2J3bHEoYWRkcik7CQkJCQlcCisJYmFja190b19jYWNoZWQoKTsJCQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZSMjYndscSMjX3VuY2FjaGVkKHR5cGUgdiwgdW5zaWduZWQgbG9uZyBhZGRyKQlcCit7CQkJCQkJCQkJXAorCWp1bXBfdG9fdW5jYWNoZWQoKTsJCQkJCQlcCisJX19yYXdfd3JpdGUjI2J3bHEodiwgYWRkcik7CQkJCQlcCisJYmFja190b19jYWNoZWQoKTsJCQkJCQlcCit9CisKK19fQlVJTERfVU5DQUNIRURfSU8oYiwgdTgpCitfX0JVSUxEX1VOQ0FDSEVEX0lPKHcsIHUxNikKK19fQlVJTERfVU5DQUNIRURfSU8obCwgdTMyKQorX19CVUlMRF9VTkNBQ0hFRF9JTyhxLCB1NjQpCisKICNkZWZpbmUgX19CVUlMRF9NRU1PUllfU1RSSU5HKGJ3bHEsIHR5cGUpCQkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCVwKQEAgLTIzNCwyOCArMjkyLDIxIEBACiAgKi8KICNpZmRlZiBDT05GSUdfTU1VCiB2b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOworCQkJICAgICAgIHBncHJvdF90IHByb3QsIHZvaWQgKmNhbGxlcik7CiB2b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK19faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewotCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKG9mZnNldCwgc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIob2Zmc2V0LCBzaXplLCBwcm90LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorX19pb3JlbWFwXzI5Yml0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpICYmICFkZWZpbmVkKENPTkZJR19QTUIpCisjaWZkZWYgQ09ORklHXzI5QklUCiAJdW5zaWduZWQgbG9uZyBsYXN0X2FkZHIgPSBvZmZzZXQgKyBzaXplIC0gMTsKLSNlbmRpZgotCXZvaWQgX19pb21lbSAqcmV0OwogCi0JcmV0ID0gX19pb3JlbWFwX3RyYXBwZWQob2Zmc2V0LCBzaXplKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIMzIpICYmICFkZWZpbmVkKENPTkZJR19QTUJfRklYRUQpICYmICFkZWZpbmVkKENPTkZJR19QTUIpCiAJLyoKIAkgKiBGb3IgUDEgYW5kIFAyIHNwYWNlIHRoaXMgaXMgdHJpdmlhbCwgYXMgZXZlcnl0aGluZyBpcyBhbHJlYWR5CiAJICogbWFwcGVkLiBVbmNhY2hlZCBhY2Nlc3MgZm9yIFAxIGFkZHJlc3NlcyBhcmUgZG9uZSB0aHJvdWdoIFAyLgpAQCAtMjYzLDcgKzMxNCw3IEBACiAJICogbWFwcGluZyBtdXN0IGJlIGRvbmUgYnkgdGhlIFBNQiBvciBieSB1c2luZyBwYWdlIHRhYmxlcy4KIAkgKi8KIAlpZiAobGlrZWx5KFBYU0VHKG9mZnNldCkgPCBQM1NFRyAmJiBQWFNFRyhsYXN0X2FkZHIpIDwgUDNTRUcpKSB7Ci0JCWlmICh1bmxpa2VseShmbGFncyAmIF9QQUdFX0NBQ0hBQkxFKSkKKwkJaWYgKHVubGlrZWx5KHBncHJvdF92YWwocHJvdCkgJiBfUEFHRV9DQUNIQUJMRSkpCiAJCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKVAxU0VHQUREUihvZmZzZXQpOwogCiAJCXJldHVybiAodm9pZCBfX2lvbWVtICopUDJTRUdBRERSKG9mZnNldCk7CkBAIC0yNzQsMjYgKzMyNSw3MCBAQAogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKVA0U0VHQUREUihvZmZzZXQpOwogI2VuZGlmCiAKLQlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitfX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCXZvaWQgX19pb21lbSAqcmV0OworCisJcmV0ID0gX19pb3JlbWFwX3RyYXBwZWQob2Zmc2V0LCBzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gX19pb3JlbWFwXzI5Yml0KG9mZnNldCwgc2l6ZSwgcHJvdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBwcm90KTsKIH0KICNlbHNlCi0jZGVmaW5lIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIGZsYWdzKQkJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKLSNkZWZpbmUgX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBmbGFncykJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKKyNkZWZpbmUgX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgcHJvdCkJCSgodm9pZCBfX2lvbWVtICopKG9mZnNldCkpCisjZGVmaW5lIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgcHJvdCkJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKICNkZWZpbmUgX19pb3VubWFwKGFkZHIpCQkJCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKLSNkZWZpbmUgaW9yZW1hcChvZmZzZXQsIHNpemUpCQkJCVwKLQlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAwKQotI2RlZmluZSBpb3JlbWFwX25vY2FjaGUob2Zmc2V0LCBzaXplKQkJCVwKLQlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAwKQotI2RlZmluZSBpb3JlbWFwX2NhY2hlKG9mZnNldCwgc2l6ZSkJCQlcCi0JX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgX1BBR0VfQ0FDSEFCTEUpCi0jZGVmaW5lIHAzX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncykJCQlcCi0JX19pb3JlbWFwKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCi0jZGVmaW5lIGlvcmVtYXBfcHJvdChvZmZzZXQsIHNpemUsIGZsYWdzKQkJXAotCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIChmbGFncykpCi0jZGVmaW5lIGlvdW5tYXAoYWRkcikJCQkJCVwKLQlfX2lvdW5tYXAoKGFkZHIpKQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgoraW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXBfbW9kZShvZmZzZXQsIHNpemUsIFBBR0VfS0VSTkVMX05PQ0FDSEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitpb3JlbWFwX2NhY2hlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgUEFHRV9LRVJORUwpOworfQorCisjaWZkZWYgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitpb3JlbWFwX3Byb3QocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiBfX2lvcmVtYXBfbW9kZShvZmZzZXQsIHNpemUsIF9fcGdwcm90KGZsYWdzKSk7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JT1JFTUFQX0ZJWEVECitleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2ZpeGVkKHJlc291cmNlX3NpemVfdCwgdW5zaWduZWQgbG9uZywKKwkJCQkgICB1bnNpZ25lZCBsb25nLCBwZ3Byb3RfdCk7CitleHRlcm4gaW50IGlvdW5tYXBfZml4ZWQodm9pZCBfX2lvbWVtICopOworZXh0ZXJuIHZvaWQgaW9yZW1hcF9maXhlZF9pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK2lvcmVtYXBfZml4ZWQocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCUJVRygpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9yZW1hcF9maXhlZF9pbml0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgaW91bm1hcF9maXhlZCh2b2lkIF9faW9tZW0gKmFkZHIpIHsgcmV0dXJuIC1FSU5WQUw7IH0KKyNlbmRpZgorCisjZGVmaW5lIGlvcmVtYXBfbm9jYWNoZQlpb3JlbWFwCisjZGVmaW5lIGlvdW5tYXAJCV9faW91bm1hcAogCiAjZGVmaW5lIG1heWJlYmFkaW8ocG9ydCkgXAogCXByaW50ayhLRVJOX0VSUiAiYmFkIFBDLWxpa2UgaW8gJXM6JXUgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rZGVidWcuaAppbmRleCA5ODUyMTlmLi41ZjZkMmU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20va2RlYnVnLmgKQEAgLTYsNiArNiw4IEBACiAJRElFX1RSQVAsCiAJRElFX05NSSwKIAlESUVfT09QUywKKwlESUVfQlJFQUtQT0lOVCwKKwlESUVfU1NURVAsCiB9OwogCiAjZW5kaWYgLyogX19BU01fU0hfS0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGM3NDI2YWQuLjE1YTA1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMTEsNyArMTEsOSBAQAogCiAjZGVmaW5lIFBNQl9BRERSCQkweGY2MTAwMDAwCiAjZGVmaW5lIFBNQl9EQVRBCQkweGY3MTAwMDAwCi0jZGVmaW5lIFBNQl9FTlRSWV9NQVgJCTE2CisKKyNkZWZpbmUgTlJfUE1CX0VOVFJJRVMJCTE2CisKICNkZWZpbmUgUE1CX0VfTUFTSwkJMHgwMDAwMDAwZgogI2RlZmluZSBQTUJfRV9TSElGVAkJOAogCkBAIC0yNSwxMSArMjcsMTUgQEAKICNkZWZpbmUgUE1CX0MJCQkweDAwMDAwMDA4CiAjZGVmaW5lIFBNQl9XVAkJCTB4MDAwMDAwMDEKICNkZWZpbmUgUE1CX1VCCQkJMHgwMDAwMDIwMAorI2RlZmluZSBQTUJfQ0FDSEVfTUFTSwkJKFBNQl9DIHwgUE1CX1dUIHwgUE1CX1VCKQogI2RlZmluZSBQTUJfVgkJCTB4MDAwMDAxMDAKIAogI2RlZmluZSBQTUJfTk9fRU5UUlkJCSgtMSkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAvKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF9pZF90W05SX0NQVVNdOwpAQCAtNDcsMjkgKzUzLDMwIEBACiAjZW5kaWYKIH0gbW1fY29udGV4dF90OwogCi1zdHJ1Y3QgcG1iX2VudHJ5OwotCi1zdHJ1Y3QgcG1iX2VudHJ5IHsKLQl1bnNpZ25lZCBsb25nIHZwbjsKLQl1bnNpZ25lZCBsb25nIHBwbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiAwIC4uIE5SX1BNQl9FTlRSSUVTIGZvciBzcGVjaWZpYyBlbnRyeSBzZWxlY3Rpb24sIG9yCi0JICogUE1CX05PX0VOVFJZIHRvIHNlYXJjaCBmb3IgYSBmcmVlIG9uZQotCSAqLwotCWludCBlbnRyeTsKLQotCXN0cnVjdCBwbWJfZW50cnkgKm5leHQ7Ci0JLyogQWRqYWNlbnQgZW50cnkgbGluayBmb3IgY29udGlndW91cyBtdWx0aS1lbnRyeSBtYXBwaW5ncyAqLwotCXN0cnVjdCBwbWJfZW50cnkgKmxpbms7Ci19OwotCisjaWZkZWYgQ09ORklHX1BNQgogLyogYXJjaC9zaC9tbS9wbWIuYyAqLwogbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CiB2b2lkIHBtYl91bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIpOwotaW50IHBtYl9pbml0KHZvaWQpOwordm9pZCBwbWJfaW5pdCh2b2lkKTsKK2Jvb2wgX19pbl8yOWJpdF9tb2RlKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgbG9uZyBwbWJfcmVtYXAodW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2RlZmluZSBwbWJfdW5tYXAoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcG1iX2luaXQoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR18yOUJJVAorI2RlZmluZSBfX2luXzI5Yml0X21vZGUoKQkoMSkKKyNlbHNlCisjZGVmaW5lIF9faW5fMjliaXRfbW9kZSgpCSgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfUE1CICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggNDEwODBiMS4uMzg0Yzc0NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTU4LDcgKzE1OCw3IEBACiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIEVuYWJsZSBNTVUgKi8KLQljdHJsX291dGwoTU1VX0NPTlRST0xfSU5JVCwgTU1VQ1IpOworCV9fcmF3X3dyaXRlbChNTVVfQ09OVFJPTF9JTklULCBNTVVDUik7CiAJY3RybF9iYXJyaWVyKCk7CiAKIAlpZiAoYXNpZF9jYWNoZShjcHUpID09IE5PX0NPTlRFWFQpCkBAIC0xNzEsOSArMTcxLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGNyOwogCi0JY3IgPSBjdHJsX2lubChNTVVDUik7CisJY3IgPSBfX3Jhd19yZWFkbChNTVVDUik7CiAJY3IgJj0gfk1NVV9DT05UUk9MX0lOSVQ7Ci0JY3RybF9vdXRsKGNyLCBNTVVDUik7CisJX19yYXdfd3JpdGVsKGNyLCBNTVVDUik7CiAKIAljdHJsX2JhcnJpZXIoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaAppbmRleCA4ZWY4MDBjLi4xMGUyZTE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCkBAIC00OSwxMSArNDksMTEgQEAKIC8qIE1NVV9UVEIgaXMgdXNlZCBmb3Igb3B0aW1pemluZyB0aGUgZmF1bHQgaGFuZGxpbmcuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X1RUQihwZ2RfdCAqcGdkKQogewotCWN0cmxfb3V0bCgodW5zaWduZWQgbG9uZylwZ2QsIE1NVV9UVEIpOworCV9fcmF3X3dyaXRlbCgodW5zaWduZWQgbG9uZylwZ2QsIE1NVV9UVEIpOwogfQogCiBzdGF0aWMgaW5saW5lIHBnZF90ICpnZXRfVFRCKHZvaWQpCiB7Ci0JcmV0dXJuIChwZ2RfdCAqKWN0cmxfaW5sKE1NVV9UVEIpOworCXJldHVybiAocGdkX3QgKilfX3Jhd19yZWFkbChNTVVfVFRCKTsKIH0KICNlbmRpZiAvKiBfX0FTTV9TSF9NTVVfQ09OVEVYVF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tb2R1bGUuaAppbmRleCAwNjhiZjE2Li5iNzkyN2RlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTEsNyArMSwyMiBAQAogI2lmbmRlZiBfQVNNX1NIX01PRFVMRV9ICiAjZGVmaW5lIF9BU01fU0hfTU9EVUxFX0gKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21vZHVsZS5oPgorc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKKyNpZmRlZiBDT05GSUdfRFdBUkZfVU5XSU5ERVIKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZkZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgY2llX2xpc3Q7CisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgRWxmX1NoZHIgRWxmNjRfU2hkcgorI2RlZmluZSBFbGZfU3ltIEVsZjY0X1N5bQorI2RlZmluZSBFbGZfRWhkciBFbGY2NF9FaGRyCisjZWxzZQorI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCiAjIGlmZGVmIENPTkZJR19DUFVfU0gyCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDgxYmZmYzAuLmQ3MWZlYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC00NSw2ICs0NSw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vdW5jYWNoZWQuaD4KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2htX2FsaWduX21hc2s7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3BmbiwgbWluX2xvd19wZm47CkBAIC01Niw3ICs1Nyw2IEBACiAJcmV0dXJuIChhZGRyMSBeIGFkZHIyKSAmIHNobV9hbGlnbl9tYXNrOwogfQogCi0KICNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKIGV4dGVybiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSk7CiAKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCiAjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGxvbmcgcHRlX2xvdzsgfSBwdGVfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7Cit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CiB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwogI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlX2xvdykKICNkZWZpbmUgX19wdGUoeCkJKChwdGVfdCkgeyAoeCkgfSApCkBAIC0xMjcsMTIgKzEyNyw3IEBACiAgKiBpcyBub3QgdmlzaWJsZSAoaXQgaXMgcGFydCBvZiB0aGUgUE1CIG1hcHBpbmcpIGFuZCBzbyBuZWVkcyB0byBiZQogICogYWRkZWQgb3Igc3VidHJhY3RlZCBhcyByZXF1aXJlZC4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKLS8qIHBoeXMgPSB2aXJ0IC0gUEFHRV9PRkZTRVQgLSAoX19NRU1PUllfU1RBUlQgJiAweGUwMDAwMDAwKSAqLwotI2RlZmluZSBQTUJfT0ZGU0VUCShQQUdFX09GRlNFVCAtIFBYU0VHKF9fTUVNT1JZX1NUQVJUKSkKLSNkZWZpbmUgX19wYSh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUE1CX09GRlNFVCkKLSNkZWZpbmUgX192YSh4KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgUE1CX09GRlNFVCkpCi0jZWxpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKKyNpZmRlZiBDT05GSUdfUE1CCiAjZGVmaW5lIF9fcGEoeCkJKCh1bnNpZ25lZCBsb25nKSh4KS1QQUdFX09GRlNFVCtfX01FTU9SWV9TVEFSVCkKICNkZWZpbmUgX192YSh4KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpK1BBR0VfT0ZGU0VULV9fTUVNT1JZX1NUQVJUKSkKICNlbHNlCkBAIC0xNDAsNiArMTM1LDE0IEBACiAjZGVmaW5lIF9fdmEoeCkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVCkpCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCisjZGVmaW5lIFVOQ0FDX0FERFIoYWRkcikJKChhZGRyKSAtIFBBR0VfT0ZGU0VUICsgdW5jYWNoZWRfc3RhcnQpCisjZGVmaW5lIENBQ19BRERSKGFkZHIpCQkoKGFkZHIpIC0gdW5jYWNoZWRfc3RhcnQgKyBQQUdFX09GRlNFVCkKKyNlbHNlCisjZGVmaW5lIFVOQ0FDX0FERFIoYWRkcikJKChhZGRyKSkKKyNkZWZpbmUgQ0FDX0FERFIoYWRkcikJCSgoYWRkcikpCisjZW5kaWYKKwogI2RlZmluZSBwZm5fdG9fa2FkZHIocGZuKQlfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggNjdmMzk5OS4uMTA0MmY3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0xNSwyMCArMTUsNDkgQEAKICAqLwogc3RydWN0IHBjaV9jaGFubmVsIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwJKm5leHQ7CisJc3RydWN0IHBjaV9idXMJCSpidXM7CiAKIAlzdHJ1Y3QgcGNpX29wcwkJKnBjaV9vcHM7Ci0Jc3RydWN0IHJlc291cmNlCQkqaW9fcmVzb3VyY2U7Ci0Jc3RydWN0IHJlc291cmNlCQkqbWVtX3Jlc291cmNlOworCisJc3RydWN0IHJlc291cmNlCQkqcmVzb3VyY2VzOworCXVuc2lnbmVkIGludAkJbnJfcmVzb3VyY2VzOwogCiAJdW5zaWduZWQgbG9uZwkJaW9fb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcJCW1lbV9vZmZzZXQ7CiAKIAl1bnNpZ25lZCBsb25nCQlyZWdfYmFzZTsKLQogCXVuc2lnbmVkIGxvbmcJCWlvX21hcF9iYXNlOworCisJdW5zaWduZWQgaW50CQlpbmRleDsKKwl1bnNpZ25lZCBpbnQJCW5lZWRfZG9tYWluX2luZm87CisKKwkvKiBPcHRpb25hbCBlcnJvciBoYW5kbGluZyAqLworCXN0cnVjdCB0aW1lcl9saXN0CWVycl90aW1lciwgc2Vycl90aW1lcjsKKwl1bnNpZ25lZCBpbnQJCWVycl9pcnEsIHNlcnJfaXJxOwogfTsKIAotZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKKy8qIGFyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMgKi8KK2V4dGVybiBpbnQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKK2V4dGVybiB2b2lkIHBjaWJpb3NfcmVwb3J0X3N0YXR1cyh1bnNpZ25lZCBpbnQgc3RhdHVzX21hc2ssIGludCB3YXJuKTsKKworLyogYXJjaC9zaC9kcml2ZXJzL3BjaS9jb21tb24uYyAqLworZXh0ZXJuIGludCBlYXJseV9yZWFkX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwgaW50IHRvcF9idXMsCisJCQkJICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHU4ICp2YWx1ZSk7CitleHRlcm4gaW50IGVhcmx5X3JlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTE2ICp2YWx1ZSk7CitleHRlcm4gaW50IGVhcmx5X3JlYWRfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwgaW50IHRvcF9idXMsCisJCQkJICAgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB1MzIgKnZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfd3JpdGVfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHU4IHZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfd3JpdGVfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHUxNiB2YWx1ZSk7CitleHRlcm4gaW50IGVhcmx5X3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHUzMiB2YWx1ZSk7CitleHRlcm4gdm9pZCBwY2liaW9zX2VuYWJsZV90aW1lcnMoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcGNpYmlvc19oYW5kbGVfc3RhdHVzX2Vycm9ycyh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJIHVuc2lnbmVkIGludCBzdGF0dXMsIHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSk7CitleHRlcm4gaW50IHBjaV9pc182Nm1oel9jYXBhYmxlKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwKKwkJCQlpbnQgdG9wX2J1cywgaW50IGN1cnJlbnRfYnVzKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgUENJQklPU19NSU5fSU8sIFBDSUJJT1NfTUlOX01FTTsKIApAQCAtOTksMjAgKzEyOCw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TVVBFUkgzMgotLyoKLSAqIElmIHdlJ3JlIG9uIGFuIFNINzc1MSBvciBTSDc3ODAgUENJIGNvbnRyb2xsZXIsIFBDSSBtZW1vcnkgaXMgbWFwcGVkCi0gKiBhdCB0aGUgZW5kIG9mIHRoZSBhZGRyZXNzIHNwYWNlIGluIGEgc3BlY2lhbCBub24tdHJhbnNsYXRhYmxlIGFyZWEuCi0gKi8KLSNkZWZpbmUgUENJX01FTV9GSVhFRF9TVEFSVAkweGZkMDAwMDAwCi0jZGVmaW5lIFBDSV9NRU1fRklYRURfRU5ECShQQ0lfTUVNX0ZJWEVEX1NUQVJUICsgMHgwMTAwMDAwMCkKLQotI2RlZmluZSBpc19wY2lfbWVtb3J5X2ZpeGVkX3JhbmdlKHMsIGUpCVwKLQkoKHMpID49IFBDSV9NRU1fRklYRURfU1RBUlQgJiYgKGUpIDwgUENJX01FTV9GSVhFRF9FTkQpCi0jZWxzZQotI2RlZmluZSBpc19wY2lfbWVtb3J5X2ZpeGVkX3JhbmdlKHMsIGUpCSgwKQotI2VuZGlmCi0KIC8qIEJvYXJkLXNwZWNpZmljIGZpeHVwIHJvdXRpbmVzLiAqLwogaW50IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOwogCkBAIC0xMjIsNiArMTM3LDE0IEBACiBleHRlcm4gdm9pZCBwY2liaW9zX2J1c190b19yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCQkgICAgc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pOwogCisjZGVmaW5lIHBjaV9kb21haW5fbnIoYnVzKSAoKHN0cnVjdCBwY2lfY2hhbm5lbCAqKShidXMpLT5zeXNkYXRhKS0+aW5kZXgKKworc3RhdGljIGlubGluZSBpbnQgcGNpX3Byb2NfZG9tYWluKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gYnVzLT5zeXNkYXRhOworCXJldHVybiBob3NlLT5uZWVkX2RvbWFpbl9pbmZvOworfQorCiAvKiBDaGFuY2VzIGFyZSB0aGlzIGludGVycnVwdCBpcyB3aXJlZCBQQy1zdHlsZSAuLi4gICovCiBzdGF0aWMgaW5saW5lIGludCBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjaGFubmVsKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA2M2NhMzdiLi44YzAwNzg1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtNCw4ICs0LDE2IEBACiAjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotI2RlZmluZSBRVUlDS19QR0QgMAkvKiBXZSBwcmVzZXJ2ZSBzcGVjaWFsIG1hcHBpbmdzIG92ZXIgZnJlZSAqLwotI2RlZmluZSBRVUlDS19QVCAxCS8qIE90aGVyIHBhZ2UgdGFibGUgcGFnZXMgdGhhdCBhcmUgemVybyBvbiBmcmVlICovCisjZGVmaW5lIFFVSUNLX1BUIDAJLyogT3RoZXIgcGFnZSB0YWJsZSBwYWdlcyB0aGF0IGFyZSB6ZXJvIG9uIGZyZWUgKi8KKworZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKKworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPiAyCitleHRlcm4gdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kKTsKK2V4dGVybiBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTsKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKIAkJCQkgICAgICAgcHRlX3QgKnB0ZSkKQEAgLTIwLDI4ICsyOCw5IEBACiB9CiAjZGVmaW5lIHBtZF9wZ3RhYmxlKHBtZCkgcG1kX3BhZ2UocG1kKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkX2N0b3Iodm9pZCAqeCkKLXsKLQlwZ2RfdCAqcGdkID0geDsKLQotCW1lbWNweShwZ2QgKyBVU0VSX1BUUlNfUEVSX1BHRCwKLQkgICAgICAgc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BUUlNfUEVSX1BHRCwKLQkgICAgICAgKFBUUlNfUEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihwZ2RfdCkpOwotfQotCiAvKgogICogQWxsb2NhdGUgYW5kIGZyZWUgcGFnZSB0YWJsZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlyZXR1cm4gcXVpY2tsaXN0X2FsbG9jKFFVSUNLX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCwgcGdkX2N0b3IpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCi17Ci0JcXVpY2tsaXN0X2ZyZWUoUVVJQ0tfUEdELCBOVUxMLCBwZ2QpOwotfQotCiBzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC04MSw3ICs3MCw2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19wZ3RfY2FjaGUodm9pZCkKIHsKLQlxdWlja2xpc3RfdHJpbShRVUlDS19QR0QsIE5VTEwsIDI1LCAxNik7CiAJcXVpY2tsaXN0X3RyaW0oUVVJQ0tfUFQsIE5VTEwsIDI1LCAxNik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWJkODlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19BU01fU0hfUEdUQUJMRV8yTEVWRUxfSAorI2RlZmluZSBfX0FTTV9TSF9QR1RBQkxFXzJMRVZFTF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+CisKKy8qCisgKiB0cmFkaXRpb25hbCB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZQorICovCisjZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMgorCisvKiBQVEUgYml0cyAqLworI2RlZmluZSBQVEVfTUFHTklUVURFCQkyCS8qIDMyLWJpdCBQVEVzICovCisKKyNkZWZpbmUgUFRFX1NISUZUCQlQQUdFX1NISUZUCisjZGVmaW5lIFBURV9CSVRTCQkoUFRFX1NISUZUIC0gUFRFX01BR05JVFVERSkKKworLyogUEdEIGJpdHMgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJCShQVEVfU0hJRlQgKyBQVEVfQklUUykKKworI2RlZmluZSBQVFJTX1BFUl9QR0QJCShQQUdFX1NJWkUgLyAoMSA8PCBQVEVfTUFHTklUVURFKSkKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRS9QR0RJUl9TSVpFKQorCisjZW5kaWYgLyogX19BU01fU0hfUEdUQUJMRV8yTEVWRUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OWE5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfX0FTTV9TSF9QR1RBQkxFXzNMRVZFTF9ICisjZGVmaW5lIF9fQVNNX1NIX1BHVEFCTEVfM0xFVkVMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworLyoKKyAqIFNvbWUgY29yZXMgbmVlZCBhIDMtbGV2ZWwgcGFnZSB0YWJsZSBsYXlvdXQsIGZvciBleGFtcGxlIHdoZW4gdXNpbmcKKyAqIDY0LWJpdCBQVEVzIGFuZCA0SyBwYWdlcy4KKyAqLworI2RlZmluZSBQQUdFVEFCTEVfTEVWRUxTCTMKKworI2RlZmluZSBQVEVfTUFHTklUVURFCQkzCS8qIDY0LWJpdCBQVEVzIG9uIFNILVgyIFRMQiAqLworCisvKiBQR0QgYml0cyAqLworI2RlZmluZSBQR0RJUl9TSElGVAkJMzAKKworI2RlZmluZSBQVFJTX1BFUl9QR0QJCTQKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJMgorCisvKiBQTUQgYml0cyAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVCAtIFBURV9NQUdOSVRVREUpKQorI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCisKKyNkZWZpbmUgUFRSU19QRVJfUE1ECSgoMSA8PCBQR0RJUl9TSElGVCkgLyBQTURfU0laRSkKKworI2RlZmluZSBwbWRfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwbWQgJTAxNmxseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkKKwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGxvbmcgcG1kOyB9IHBtZF90OworI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQorI2RlZmluZSBfX3BtZCh4KQkoKHBtZF90KSB7ICh4KSB9ICkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF9wYWdlX3ZhZGRyKHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gcHVkX3ZhbChwdWQpOworfQorCisjZGVmaW5lIHBtZF9pbmRleChhZGRyZXNzKQkoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRC0xKSkKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9vZmZzZXQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAocG1kX3QgKilwdWRfcGFnZV92YWRkcigqcHVkKSArIHBtZF9pbmRleChhZGRyZXNzKTsKK30KKworI2RlZmluZSBwdWRfbm9uZSh4KQkoIXB1ZF92YWwoeCkpCisjZGVmaW5lIHB1ZF9wcmVzZW50KHgpCShwdWRfdmFsKHgpKQorI2RlZmluZSBwdWRfY2xlYXIoeHApCWRvIHsgc2V0X3B1ZCh4cCwgX19wdWQoMCkpOyB9IHdoaWxlICgwKQorI2RlZmluZQlwdWRfYmFkKHgpCShwdWRfdmFsKHgpICYgflBBR0VfTUFTSykKKworLyoKKyAqIChwdWRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLAorICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLikKKyAqLworI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKSBkbyB7ICoocHVkcHRyKSA9IChwdWR2YWwpOyB9IHdoaWxlKDApCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QR1RBQkxFXzNMRVZFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGJhMzA0NmUuLmFhYjc2NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMiw3ICsxMiwxMSBAQAogI2lmbmRlZiBfX0FTTV9TSF9QR1RBQkxFX0gKICNkZWZpbmUgX19BU01fU0hfUEdUQUJMRV9ICiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+CisjaWZkZWYgQ09ORklHX1gyVExCCisjaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTUxLDI4ICs1NSwxMiBAQAogI2RlZmluZQlOUEhZU19TSUdOCSgxTEwgPDwgKE5QSFlTIC0gMSkpCiAjZGVmaW5lCU5QSFlTX01BU0sJKC0xTEwgPDwgTlBIWVMpCiAKLS8qCi0gKiB0cmFkaXRpb25hbCB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZQotICovCi0vKiBQVEUgYml0cyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1gyVExCKSB8fCBkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKLSMgZGVmaW5lIFBURV9NQUdOSVRVREUJMwkvKiA2NC1iaXQgUFRFcyBvbiBleHRlbmRlZCBtb2RlIFNILVgyIFRMQiAqLwotI2Vsc2UKLSMgZGVmaW5lIFBURV9NQUdOSVRVREUJMgkvKiAzMi1iaXQgUFRFcyAqLwotI2VuZGlmCi0jZGVmaW5lIFBURV9TSElGVAlQQUdFX1NISUZUCi0jZGVmaW5lIFBURV9CSVRTCShQVEVfU0hJRlQgLSBQVEVfTUFHTklUVURFKQotCi0vKiBQR0QgYml0cyAqLwotI2RlZmluZSBQR0RJUl9TSElGVAkoUFRFX1NISUZUICsgUFRFX0JJVFMpCiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogCiAvKiBFbnRyaWVzIHBlciBsZXZlbCAqLwogI2RlZmluZSBQVFJTX1BFUl9QVEUJKFBBR0VfU0laRSAvICgxIDw8IFBURV9NQUdOSVRVREUpKQotI2RlZmluZSBQVFJTX1BFUl9QR0QJKFBBR0VfU0laRSAvIHNpemVvZihwZ2RfdCkpCiAKLSNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRS9QR0RJUl9TSVpFKQogI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAogCiAjZGVmaW5lIFBIWVNfQUREUl9NQVNLMjkJCTB4MWZmZmZmZmYKQEAgLTE1Myw5ICsxNDEsOSBAQAogI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCgoeCkucHRlX2xvdyA+PiBQQUdFX1NISUZUKSkpCiAKIC8qCi0gKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCisgKiBJbml0aWFsaXNlIHRoZSBwYWdlIHRhYmxlIGNhY2hlcwogICovCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDUwMDNlZTguLmUxNzJkNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC03MSw2ICs3MSw4IEBACiAjZGVmaW5lIF9QQUdFX0VYVF9LRVJOX1dSSVRFCTB4MTAwMAkvKiBFUFI0LWJpdDogS2VybmVsIHNwYWNlIHdyaXRhYmxlICovCiAjZGVmaW5lIF9QQUdFX0VYVF9LRVJOX1JFQUQJMHgyMDAwCS8qIEVQUjUtYml0OiBLZXJuZWwgc3BhY2UgcmVhZGFibGUgKi8KIAorI2RlZmluZSBfUEFHRV9FWFRfV0lSRUQJCTB4NDAwMAkvKiBzb2Z0d2FyZTogV2lyZSBUTEIgZW50cnkgKi8KKwogLyogV3JhcHBlciBmb3IgZXh0ZW5kZWQgbW9kZSBwZ3Byb3QgdHdpZGRsaW5nICovCiAjZGVmaW5lIF9QQUdFX0VYVCh4KQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpIDw8IDMyKQogCkBAIC0xNDEsMTIgKzE0MywxNCBAQAogIyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0TUIpCiAjICBkZWZpbmUgX1BBR0VfU1pIVUdFCShfUEFHRV9FWFRfRVNaMiB8IF9QQUdFX0VYVF9FU1ozKQogIyBlbmRpZgorIyBkZWZpbmUgX1BBR0VfV0lSRUQJKF9QQUdFX0VYVChfUEFHRV9FWFRfV0lSRUQpKQogI2Vsc2UKICMgaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKQogIyAgZGVmaW5lIF9QQUdFX1NaSFVHRQkoX1BBR0VfU1oxKQogIyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQikKICMgIGRlZmluZSBfUEFHRV9TWkhVR0UJKF9QQUdFX1NaMCB8IF9QQUdFX1NaMSkKICMgZW5kaWYKKyMgZGVmaW5lIF9QQUdFX1dJUkVECSgwKQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IDE3Y2RiZWMuLjBlZTQ2NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCkBAIC00MywxMSArNDMsNiBAQAogfQogI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcG1kX3NldChwbWRfdCAqcG1kcCxwdGVfdCAqcHRlcCkKLXsKLQlwbWRfdmFsKCpwbWRwKSA9ICh1bnNpZ25lZCBsb25nKSBwdGVwOwotfQotCiAvKgogICogUEdEIGRlZmluZXMuIFRvcCBsZXZlbC4KICAqLwpAQCAtMTI4LDggKzEyMywyMSBAQAogI2RlZmluZSBfUEFHRV9ESVJUWQkweDQwMCAgLyogc29mdHdhcmU6IHBhZ2UgYWNjZXNzZWQgaW4gd3JpdGUgKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHg4MDAgIC8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KIAorLyogV3JhcHBlciBmb3IgZXh0ZW5kZWQgbW9kZSBwZ3Byb3QgdHdpZGRsaW5nICovCisjZGVmaW5lIF9QQUdFX0VYVCh4KQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpIDw8IDMyKQorCisvKgorICogV2UgY2FuIHVzZSB0aGUgc2lnbi1leHRlbmRlZCBiaXRzIGluIHRoZSBQVEVMIHRvIGdldCAzMiBiaXRzIG9mCisgKiBzb2Z0d2FyZSBmbGFncy4gVGhpcyB3b3JrcyBmb3Igbm93IGJlY2F1c2Ugbm8gaW1wbGVtZW50YXRpb25zIHVzZXMKKyAqIGFueXRoaW5nIGFib3ZlIHRoZSBQUE4gZmllbGQuCisgKi8KKyNkZWZpbmUgX1BBR0VfV0lSRUQJX1BBR0VfRVhUKDB4MDAxKSAvKiBzb2Z0d2FyZTogd2lyZSB0aGUgdGxiIGVudHJ5ICovCisKKyNkZWZpbmUgX1BBR0VfQ0xFQVJfRkxBR1MJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9GSUxFIHwgX1BBR0VfU0hBUkVEIHwgXAorCQkJCSBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfV0lSRUQpCisKIC8qIE1hc2sgd2hpY2ggZHJvcHMgc29mdHdhcmUgZmxhZ3MgKi8KLSNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwkweGZmZmZmZmZmZmZmZmYzZGJMTAorI2RlZmluZSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLCShORUZGX01BU0sgJiB+KF9QQUdFX0NMRUFSX0ZMQUdTKSkKIAogLyoKICAqIEh1Z2VUTEIgc3VwcG9ydApAQCAtMjAzLDEyICsyMTEsNiBAQAogI2RlZmluZSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHByb3QpIF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgJiB+X1BBR0VfQ0FDSEFCTEUpCiAKIC8qCi0gKiBIYW5kbGluZyBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBwYWdlIHRhYmxlIHNldHVwLgotICovCi1leHRlcm4gdm9pZCBfX2hhbmRsZV9iYWRfcG1kX2tlcm5lbChwbWRfdCAqIHBtZCk7Ci0jZGVmaW5lIF9faGFuZGxlX2JhZF9wbWQoeCkJX19oYW5kbGVfYmFkX3BtZF9rZXJuZWwoeCkKLQotLyoKICAqIFBURSBsZXZlbCBhY2Nlc3Mgcm91dGluZXMuCiAgKgogICogTm90ZTE6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCAwMTdlMGMxLi45NjA1ZTA2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC05OCwxMyArOTgsMzQgQEAKIAogLyogRm9yd2FyZCBkZWNsICovCiBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnM7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIGV4dGVybiBzdHJ1Y3QgcHRfcmVncyBmYWtlX3N3YXBwZXJfcmVnczsKIAorLyogYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jICovCitleHRlcm4gdW5zaWduZWQgaW50IHhzdGF0ZV9zaXplOworZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfeHN0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza194c3RhdGVfY2FjaGVwOworCisvKiBhcmNoL3NoL21tL2FsaWdubWVudC5jICovCitleHRlcm4gaW50IGdldF91bmFsaWduX2N0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiBpbnQgc2V0X3VuYWxpZ25fY3RsKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB1bnNpZ25lZCBpbnQgdmFsKTsKKworI2RlZmluZSBHRVRfVU5BTElHTl9DVEwodHNrLCBhZGRyKQlnZXRfdW5hbGlnbl9jdGwoKHRzayksIChhZGRyKSkKKyNkZWZpbmUgU0VUX1VOQUxJR05fQ1RMKHRzaywgdmFsKQlzZXRfdW5hbGlnbl9jdGwoKHRzayksICh2YWwpKQorCisvKiBhcmNoL3NoL21tL2luaXQuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBtZW1faW5pdF9kb25lOworCiAvKiBhcmNoL3NoL2tlcm5lbC9zZXR1cC5jICovCiBjb25zdCBjaGFyICpnZXRfY3B1X3N1YnR5cGUoc3RydWN0IHNoX2NwdWluZm8gKmMpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wOwogCisvKiB0aHJlYWRfc3RydWN0IGZsYWdzICovCisjZGVmaW5lIFNIX1RIUkVBRF9VQUNfTk9QUklOVAkoMSA8PCAwKQorI2RlZmluZSBTSF9USFJFQURfVUFDX1NJR0JVUwkoMSA8PCAxKQorI2RlZmluZSBTSF9USFJFQURfVUFDX01BU0sJKFNIX1RIUkVBRF9VQUNfTk9QUklOVCB8IFNIX1RIUkVBRF9VQUNfU0lHQlVTKQorCiAvKiBwcm9jZXNzb3IgYm9vdCBtb2RlIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgTU9ERV9QSU4wICgxIDw8IDApCiAjZGVmaW5lIE1PREVfUElOMSAoMSA8PCAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKaW5kZXggMWYzZDZmYS4uNTcyYjRlYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KIAogLyoKICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKQEAgLTkwLDkgKzkxLDkgQEAKIAl1bnNpZ25lZCBsb25nIGVudHJ5X3BjOwogfTsKIAotdW5pb24gc2hfZnB1X3VuaW9uIHsKLQlzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0IGhhcmQ7Ci0Jc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCBzb2Z0OwordW5pb24gdGhyZWFkX3hzdGF0ZSB7CisJc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkZnB1OworCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3Qgc29mdGZwdTsKIH07CiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0IHsKQEAgLTEwMCwzOCArMTAxLDMwIEBACiAJdW5zaWduZWQgbG9uZyBzcDsKIAl1bnNpZ25lZCBsb25nIHBjOwogCi0JLyogSGFyZHdhcmUgZGVidWdnaW5nIHJlZ2lzdGVycyAqLwotCXVuc2lnbmVkIGxvbmcgdWJjX3BjOworCS8qIFZhcmlvdXMgdGhyZWFkIGZsYWdzLCBzZWUgU0hfVEhSRUFEX3h4eCAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBmbG9hdGluZyBwb2ludCBpbmZvICovCi0JdW5pb24gc2hfZnB1X3VuaW9uIGZwdTsKKwkvKiBTYXZlIG1pZGRsZSBzdGF0ZXMgb2YgcHRyYWNlIGJyZWFrcG9pbnRzICovCisJc3RydWN0IHBlcmZfZXZlbnQgKnB0cmFjZV9icHNbSEJQX05VTV07CiAKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAJLyogRHNwIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwogCXN0cnVjdCBzaF9kc3Bfc3RydWN0IGRzcF9zdGF0dXM7CiAjZW5kaWYKLX07CiAKLS8qIENvdW50IG9mIGFjdGl2ZSB0YXNrcyB3aXRoIFVCQyBzZXR0aW5ncyAqLwotZXh0ZXJuIGludCB1YmNfdXNlcmNudDsKKwkvKiBFeHRlbmRlZCBwcm9jZXNzb3Igc3RhdGUgKi8KKwl1bmlvbiB0aHJlYWRfeHN0YXRlICp4c3RhdGU7Cit9OwogCiAjZGVmaW5lIElOSVRfVEhSRUFEICB7CQkJCQkJXAogCS5zcCA9IHNpemVvZihpbml0X3N0YWNrKSArIChsb25nKSAmaW5pdF9zdGFjaywJCVwKKwkuZmxhZ3MgPSAwLAkJCQkJCVwKIH0KIAotLyoKLSAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KLSAqLwotI2RlZmluZSBzdGFydF90aHJlYWQoX3JlZ3MsIG5ld19wYywgbmV3X3NwKQkgXAotCXNldF9mcyhVU0VSX0RTKTsJCQkgXAotCV9yZWdzLT5wciA9IDA7CQkJCSBcCi0JX3JlZ3MtPnNyID0gU1JfRkQ7CS8qIFVzZXIgbW9kZS4gKi8gXAotCV9yZWdzLT5wYyA9IG5ld19wYzsJCQkgXAotCV9yZWdzLT5yZWdzWzE1XSA9IG5ld19zcAotCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLwogc3RydWN0IHRhc2tfc3RydWN0Owotc3RydWN0IG1tX3N0cnVjdDsKKworZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5ld19wYywgdW5zaWduZWQgbG9uZyBuZXdfc3ApOwogCiAvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KIGV4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCmluZGV4IDU3MjdkMzEuLjYyMWJjNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaApAQCAtODcsMjYgKzg3LDMxIEBACiAJLyogbG9uZyBzdGF0dXM7ICogc29mdHdhcmUgc3RhdHVzIGluZm9ybWF0aW9uICovCiB9OwogCi0jaWYgMAogLyogRHVtbXkgZnB1IGVtdWxhdG9yICAqLwogc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGZwX3JlZ3NbMzJdOworCXVuc2lnbmVkIGxvbmcgZnBfcmVnc1s2NF07CiAJdW5zaWduZWQgaW50IGZwc2NyOwogCXVuc2lnbmVkIGNoYXIgbG9va2FoZWFkOwogCXVuc2lnbmVkIGxvbmcgZW50cnlfcGM7CiB9OwotI2VuZGlmCiAKLXVuaW9uIHNoX2ZwdV91bmlvbiB7Ci0Jc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkOwotCS8qICdoYXJkJyBpdHNlbGYgb25seSBwcm9kdWNlcyAzMiBiaXQgYWxpZ25tZW50LCB5ZXQgd2UgbmVlZAotCSAgIHRvIGFjY2VzcyBpdCB1c2luZyA2NCBiaXQgbG9hZC9zdG9yZSBhcyB3ZWxsLiAqLwordW5pb24gdGhyZWFkX3hzdGF0ZSB7CisJc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkZnB1OworCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3Qgc29mdGZwdTsKKwkvKgorCSAqIFRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgb25seSBwcm9kdWNlIDMyIGJpdCBhbGlnbm1lbnQsIHlldCB3ZSBuZWVkCisJICogdG8gYWNjZXNzIHRoZW0gdXNpbmcgNjQgYml0IGxvYWQvc3RvcmUgYXMgd2VsbC4KKwkgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgYWxpZ25tZW50X2R1bW15OwogfTsKIAogc3RydWN0IHRocmVhZF9zdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgc3A7CiAJdW5zaWduZWQgbG9uZyBwYzsKKworCS8qIFZhcmlvdXMgdGhyZWFkIGZsYWdzLCBzZWUgU0hfVEhSRUFEX3h4eCAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAkvKiBUaGlzIHN0b3JlcyB0aGUgYWRkcmVzcyBvZiB0aGUgcHRfcmVncyBidWlsdCBkdXJpbmcgYSBjb250ZXh0CiAJICAgc3dpdGNoLCBvciBvZiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhIGJ1aWx0IGZvciBhIGtlcm5lbCBtb2RlCiAJICAgZXhjZXB0aW9uLiAgSXQgaXMgdXNlZCBmb3IgYmFja3RyYWNpbmcgdGhlIHN0YWNrIG9mIGEgc2xlZXBpbmcgdGFzawpAQCAtMTIyLDcgKzEyNyw3IEBACiAJLyogSGFyZHdhcmUgZGVidWdnaW5nIHJlZ2lzdGVycyBtYXkgY29tZSBoZXJlICovCiAKIAkvKiBmbG9hdGluZyBwb2ludCBpbmZvICovCi0JdW5pb24gc2hfZnB1X3VuaW9uIGZwdTsKKwl1bmlvbiB0aHJlYWRfeHN0YXRlICp4c3RhdGU7CiB9OwogCiAjZGVmaW5lIElOSVRfTU1BUCBcCkBAIC0xMzcsNyArMTQyLDcgQEAKIAkudHJhcF9ubwk9IDAsCQkJXAogCS5lcnJvcl9jb2RlCT0gMCwJCQlcCiAJLmFkZHJlc3MJPSAwLAkJCVwKLQkuZnB1CQk9IHsgeyB7IDAsIH0gfSwgfQlcCisJLmZsYWdzCQk9IDAsCQkJXAogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMWRjMTJjYi4uZTExYjE0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMDIsMTMgKzEwMiwxNSBAQAogI2RlZmluZQlQVFJBQ0VfR0VURFNQUkVHUwk1NQkvKiBEU1AgcmVnaXN0ZXJzICovCiAjZGVmaW5lCVBUUkFDRV9TRVREU1BSRUdTCTU2CiAKLSNkZWZpbmUgUFRfVEVYVF9FTkRfQUREUiAJMjQwCi0jZGVmaW5lIFBUX1RFWFRfQUREUiAJCTI0NAkvKiAmKHN0cnVjdCB1c2VyKS0+c3RhcnRfY29kZSAqLwotI2RlZmluZSBQVF9EQVRBX0FERFIgCQkyNDgJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2RhdGEgKi8KKyNkZWZpbmUgUFRfVEVYVF9FTkRfQUREUgkyNDAKKyNkZWZpbmUgUFRfVEVYVF9BRERSCQkyNDQJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2NvZGUgKi8KKyNkZWZpbmUgUFRfREFUQV9BRERSCQkyNDgJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2RhdGEgKi8KICNkZWZpbmUgUFRfVEVYVF9MRU4JCTI1MgogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2RlZmluZSB1c2VyX21vZGUocmVncykJCQkoKChyZWdzKS0+c3IgJiAweDQwMDAwMDAwKT09MCkKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQkoKHVuc2lnbmVkIGxvbmcpKHJlZ3MpLT5wYykKQEAgLTEyNCw2ICsxMjYsMTIgQEAKIGV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKK3N0cnVjdCBwZXJmX2V2ZW50Oworc3RydWN0IHBlcmZfc2FtcGxlX2RhdGE7CisKK2V4dGVybiB2b2lkIHB0cmFjZV90cmlnZ2VyZWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCBpbnQgbm1pLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCiAJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKIApAQCAtMTMxLDEwICsxMzksOCBAQAogewogCXVuc2lnbmVkIGxvbmcgcGMgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOwogCi0jaWZkZWYgUDJTRUcKLQlpZiAocGMgPj0gUDJTRUcgJiYgcGMgPCBQM1NFRykKLQkJcGMgLT0gMHgyMDAwMDAwMDsKLSNlbmRpZgorCWlmICh2aXJ0X2FkZHJfdW5jYWNoZWQocGMpKQorCQlyZXR1cm4gQ0FDX0FERFIocGMpOwogCiAJcmV0dXJuIHBjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yZWJvb3QuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcmVib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkYTBjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcmVib290LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0FTTV9TSF9SRUJPT1RfSAorI2RlZmluZSBfX0FTTV9TSF9SRUJPT1RfSAorCisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCitzdHJ1Y3QgbWFjaGluZV9vcHMgeworCXZvaWQgKCpyZXN0YXJ0KShjaGFyICpjbWQpOworCXZvaWQgKCpoYWx0KSh2b2lkKTsKKwl2b2lkICgqcG93ZXJfb2ZmKSh2b2lkKTsKKwl2b2lkICgqc2h1dGRvd24pKHZvaWQpOworCXZvaWQgKCpjcmFzaF9zaHV0ZG93bikoc3RydWN0IHB0X3JlZ3MgKik7Cit9OworCitleHRlcm4gc3RydWN0IG1hY2hpbmVfb3BzIG1hY2hpbmVfb3BzOworCisvKiBhcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgKi8KK3ZvaWQgbmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX19BU01fU0hfUkVCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBjZTM3NDM1Li40NzU4MzI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xOCw3ICsxOCw2IEBACiAvKiAuLi4gKi8KICNkZWZpbmUgQ09NTUFORF9MSU5FICgoY2hhciAqKSAoUEFSQU0rMHgxMDApKQogCi1pbnQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKik7CiB2b2lkIHNoX212X3NldHVwKHZvaWQpOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9iaW9zLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2Jpb3MuaAppbmRleCBkOWM5NmQ3Li45NTcxNGMyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2Jpb3MuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2Jpb3MuaApAQCAtMSwxOCArMSwyNyBAQAogI2lmbmRlZiBfX0FTTV9TSF9CSU9TX0gKICNkZWZpbmUgX19BU01fU0hfQklPU19ICiAKKyNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUworCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAwIEdyZWcgQmFua3MsIE1pdGNoIERhdmlzCiAgKiBDIEFQSSB0byBpbnRlcmZhY2UgdG8gdGhlIHN0YW5kYXJkIExpbnV4U0ggQklPUwogICogdXN1YWxseSBmcm9tIHdpdGhpbiB0aGUgZWFybHkgc3RhZ2VzIG9mIGtlcm5lbCBib290LgogICovCi0KLQogZXh0ZXJuIHZvaWQgc2hfYmlvc19jb25zb2xlX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7Ci1leHRlcm4gdm9pZCBzaF9iaW9zX2NoYXJfb3V0KGNoYXIgY2gpOwogZXh0ZXJuIHZvaWQgc2hfYmlvc19nZGJfZGV0YWNoKHZvaWQpOwogCiBleHRlcm4gdm9pZCBzaF9iaW9zX2dldF9ub2RlX2FkZHIodW5zaWduZWQgY2hhciAqbm9kZV9hZGRyKTsKIGV4dGVybiB2b2lkIHNoX2Jpb3Nfc2h1dGRvd24odW5zaWduZWQgaW50IGhvdyk7CiAKK2V4dGVybiB2b2lkIHNoX2Jpb3NfdmJyX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzaF9iaW9zX3Zicl9yZWxvYWQodm9pZCk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9iaW9zX3Zicl9pbml0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHNoX2Jpb3NfdmJyX3JlbG9hZCh2b2lkKSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19TSF9TVEFOREFSRF9CSU9TICovCisKICNlbmRpZiAvKiBfX0FTTV9TSF9CSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l1LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NpdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NTY1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NpdS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBwbGF0Zm9ybSBoZWFkZXIgZm9yIHRoZSBTSVUgQVNvQyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgQVNNX1NJVV9ICisjZGVmaW5lIEFTTV9TSVVfSAorCisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgorCitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3Qgc2l1X3BsYXRmb3JtIHsKKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2OworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIGRtYV9zbGF2ZV90eF9hOworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIGRtYV9zbGF2ZV9yeF9hOworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIGRtYV9zbGF2ZV90eF9iOworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIGRtYV9zbGF2ZV9yeF9iOworfTsKKworI2VuZGlmIC8qIEFTTV9TSVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaAppbmRleCBmZTljMmExLi42NGViNDFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaApAQCAtOTIsNSArOTIsNiBAQAogI2RlZmluZSBTVVNQX1NIX1VTVEFOREJZCSgxIDw8IDMpIC8qIFNILU1vYmlsZSBVLXN0YW5kYnkgbW9kZSAqLwogI2RlZmluZSBTVVNQX1NIX1NGCQkoMSA8PCA0KSAvKiBFbmFibGUgc2VsZi1yZWZyZXNoICovCiAjZGVmaW5lIFNVU1BfU0hfTU1VCQkoMSA8PCA1KSAvKiBTYXZlL3Jlc3RvcmUgTU1VIGFuZCBjYWNoZSAqLworI2RlZmluZSBTVVNQX1NIX1JFR1MJCSgxIDw8IDYpIC8qIFNhdmUvcmVzdG9yZSByZWdpc3RlcnMgKi8KIAogI2VuZGlmIC8qIF9BU01fU0hfU1VTUEVORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDZhMzgxNDIuLmFhNzc3N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfX0FTTV9TSF9TWVNDQUxMX0gKICNkZWZpbmUgX19BU01fU0hfU1lTQ0FMTF9ICiAKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHN5c19jYWxsX3RhYmxlW107CisKICNpZmRlZiBDT05GSUdfU1VQRVJIMzIKICMgaW5jbHVkZSAic3lzY2FsbF8zMi5oIgogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGMxNTQxNWIuLjBiZDdhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogI2RlZmluZSBBVF9WRUNUT1JfU0laRV9BUkNIIDUgLyogZW50cmllcyBpbiBBUkNIX0RMSU5GTyAqLwogCkBAIC0zMiw3ICszMSw3IEBACiAjZGVmaW5lIG1iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luY28iOiA6IDoibWVtb3J5IikKICNkZWZpbmUgcm1iKCkJCW1iKCkKICNkZWZpbmUgd21iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luY28iOiA6IDoibWVtb3J5IikKLSNkZWZpbmUgY3RybF9iYXJyaWVyKCkJX19pY2JpKDB4YTgwMDAwMDApCisjZGVmaW5lIGN0cmxfYmFycmllcigpCV9faWNiaShQQUdFX09GRlNFVCkKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIG1iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgiIjogOiA6Im1lbW9yeSIpCkBAIC0xMTQsNiArMTEzLDggQEAKIAkJCQkgICAgKHVuc2lnbmVkIGxvbmcpX25fLCBzaXplb2YoKihwdHIpKSk7IFwKICAgfSkKIAorc3RydWN0IHB0X3JlZ3M7CisKIGV4dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKTsKIHZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKQEAgLTEzNywxNCArMTM4LDE0IEBACiAjZW5kaWYKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY2FjaGVkX3RvX3VuY2FjaGVkOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdW5jYWNoZWRfc2l6ZTsKIAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnNoX2RlYnVnZnNfcm9vdDsKIAogdm9pZCBwZXJfY3B1X3RyYXBfaW5pdCh2b2lkKTsKIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpOwogdm9pZCBjcHVfaWRsZV93YWl0KHZvaWQpOwotCi1hc21saW5rYWdlIHZvaWQgYnJlYWtfcG9pbnRfdHJhcCh2b2lkKTsKK3ZvaWQgc3RvcF90aGlzX2NwdSh2b2lkICopOwogCiAjaWZkZWYgQ09ORklHX1NVUEVSSDMyCiAjZGVmaW5lIEJVSUxEX1RSQVBfSEFORExFUihuYW1lKQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKaW5kZXggMDY4MTRmNS4uNTEyOTZiMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0FTTV9TSF9TWVNURU1fMzJfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CiAKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAKQEAgLTE0NCw5ICsxNDUsNiBAQAogCQlfX3Jlc3RvcmVfZHNwKHByZXYpOwkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIFwKLQlub2lubGluZSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudW5jYWNoZWQudGV4dCIpKSkKLQogLyoKICAqIEp1bXAgdG8gdW5jYWNoZWQgYXJlYS4KICAqIFdoZW4gaGFuZGxpbmcgVExCIG9yIGNhY2hlcywgd2UgbmVlZCB0byBkbyBpdCBmcm9tIGFuIHVuY2FjaGVkIGFyZWEuCkBAIC0yMTYsNiArMjE0LDE3IEBACiBpbnQgaGFuZGxlX3VuYWxpZ25lZF9hY2Nlc3MoaW5zbl9zaXplX3QgaW5zdHJ1Y3Rpb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJICAgIHN0cnVjdCBtZW1fYWNjZXNzICptYSwgaW50KTsKIAorc3RhdGljIGlubGluZSB2b2lkIHRyaWdnZXJfYWRkcmVzc19lcnJvcih2b2lkKQoreworCWlmIChfX2luXzI5Yml0X21vZGUoKSkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkJImxkYyAlMCwgc3Jcblx0IgorCQkJIm1vdi5sIEAlMSwgJTAiCisJCQk6CisJCQk6ICJyIiAoMHgxMDAwMDAwMCksICJyIiAoMHg4MDAwMDAwMSkKKwkJKTsKK30KKwogYXNtbGlua2FnZSB2b2lkIGRvX2FkZHJlc3NfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJIHVuc2lnbmVkIGxvbmcgd3JpdGVhY2Nlc3MsCiAJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAppbmRleCBhYjFkZDkxLi4zNjMzODY0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKQEAgLTE4LDYgKzE4LDcgQEAKIC8qCiAgKglzd2l0Y2hfdG8oKSBzaG91bGQgc3dpdGNoIHRhc2tzIHRvIHRhc2sgbnIgbiwgZmlyc3QKICAqLworc3RydWN0IHRocmVhZF9zdHJ1Y3Q7CiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNoNjRfc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKIAkJCQkgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqcHJldl90aHJlYWQsCiAJCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LApAQCAtMzMsOCArMzQsNiBAQAogCQkJICAgICAgJm5leHQtPnRocmVhZCk7CQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX3VzZXNfanVtcF90b191bmNhY2hlZAotCiAjZGVmaW5lIGp1bXBfdG9fdW5jYWNoZWQoKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJhY2tfdG9fY2FjaGVkKCkJZG8geyB9IHdoaWxlICgwKQogCkBAIC00OCw2ICs0NywxMyBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKShzaWduZWQgbG9uZyBsb25nKShzaWduZWQgbG9uZyl2YWw7CiB9CiAKK2V4dGVybiB2b2lkIHBoeXNfc3RleHQodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmlnZ2VyX2FkZHJlc3NfZXJyb3Iodm9pZCkKK3sKKwlwaHlzX3N0ZXh0KCk7Cit9CisKICNkZWZpbmUgU1JfQkxfTEwJMHgwMDAwMDAwMDEwMDAwMDAwTEwKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9ibF9iaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAxZjNkOTI3Li41NWEzNmZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC05MywxNCArOTMsMTYgQEAKIAogI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoVEhSRUFEX1NISUZUIC0gUEFHRV9TSElGVCkKIAotI2Vsc2UgLyogVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVCAqLwotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgorI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIGV4dGVybiB2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSk7CitleHRlcm4gdm9pZCBhcmNoX3Rhc2tfY2FjaGVfaW5pdCh2b2lkKTsKKyNkZWZpbmUgYXJjaF90YXNrX2NhY2hlX2luaXQgYXJjaF90YXNrX2NhY2hlX2luaXQKK2V4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTsKK2V4dGVybiB2b2lkIGluaXRfdGhyZWFkX3hzdGF0ZSh2b2lkKTsKIAotI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggZGE4ZmU3YS4uNzVhYmIzOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaWZkZWYgQ09ORklHX01NVQogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKIC8qCiAgKiBUTEIgaGFuZGxpbmcuICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgcGFnZXMgZnJvbSB0aGUgcGFnZQpAQCAtOTcsNiArOTgsMjIgQEAKIAogI2RlZmluZSB0bGJfbWlncmF0ZV9maW5pc2gobW0pCQlkbyB7IH0gd2hpbGUgKDApCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKK2V4dGVybiB2b2lkIHRsYl93aXJlX2VudHJ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCk7CitleHRlcm4gdm9pZCB0bGJfdW53aXJlX2VudHJ5KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfd2lyZV9lbnRyeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSAsCisJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl91bndpcmVfZW50cnkodm9pZCkKK3sKKwlCVUcoKTsKK30KKyNlbmRpZgorCiAjZWxzZSAvKiBDT05GSUdfTU1VICovCiAKICNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJCQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91YmMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWJjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZjk2MTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91YmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC91YmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19BU01fU0hfVUJDX0gKLSNkZWZpbmUgX19BU01fU0hfVUJDX0gKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxjcHUvdWJjLmg+Ci0KLS8qIFVzZXIgQnJlYWsgQ29udHJvbGxlciAqLwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQotI2RlZmluZSBVQkNfVFlQRV9TSDc3MjkJKGN1cnJlbnRfY3B1X2RhdGEudHlwZSA9PSBDUFVfU0g3NzI5KQotI2Vsc2UKLSNkZWZpbmUgVUJDX1RZUEVfU0g3NzI5CTAKLSNlbmRpZgotCi0jZGVmaW5lIEJBTVJfQVNJRAkJKDEgPDwgMikKLSNkZWZpbmUgQkFNUl9OT05FCQkwCi0jZGVmaW5lIEJBTVJfMTAJCQkweDEKLSNkZWZpbmUgQkFNUl8xMgkJCTB4MgotI2RlZmluZSBCQU1SX0FMTAkJMHgzCi0jZGVmaW5lIEJBTVJfMTYJCQkweDgKLSNkZWZpbmUgQkFNUl8yMAkJCTB4OQotCi0jZGVmaW5lIEJCUl9JTlNUCQkoMSA8PCA0KQotI2RlZmluZSBCQlJfREFUQQkJKDIgPDwgNCkKLSNkZWZpbmUgQkJSX1JFQUQJCSgxIDw8IDIpCi0jZGVmaW5lIEJCUl9XUklURQkJKDIgPDwgMikKLSNkZWZpbmUgQkJSX0JZVEUJCTB4MQotI2RlZmluZSBCQlJfSEFMRgkJMHgyCi0jZGVmaW5lIEJCUl9MT05HCQkweDMKLSNkZWZpbmUgQkJSX1FVQUQJCSgxIDw8IDYpCS8qIFNINzc1MCAqLwotI2RlZmluZSBCQlJfQ1BVCQkJKDEgPDwgNikJLyogU0g3NzA5QSxTSDc3MjkgKi8KLSNkZWZpbmUgQkJSX0RNQQkJCSgyIDw8IDYpCS8qIFNINzcwOUEsU0g3NzI5ICovCi0KLSNkZWZpbmUgQlJDUl9DTUZBCQkoMSA8PCAxNSkKLSNkZWZpbmUgQlJDUl9DTUZCCQkoMSA8PCAxNCkKLQotI2lmIGRlZmluZWQgQ09ORklHX0NQVV9TSDJBCi0jZGVmaW5lIEJSQ1JfQ01GQ0EJCSgxIDw8IDE1KQotI2RlZmluZSBCUkNSX0NNRkNCCQkoMSA8PCAxNCkKLSNkZWZpbmUgQlJDUl9DTUZEQQkJKDEgPDwgMTMpCi0jZGVmaW5lIEJSQ1JfQ01GREIJCSgxIDw8IDEyKQotI2RlZmluZSBCUkNSX1BDQkIJCSgxIDw8IDYpCS8qIDE6IGFmdGVyIGV4ZWN1dGlvbiAqLwotI2RlZmluZSBCUkNSX1BDQkEJCSgxIDw8IDUpCS8qIDE6IGFmdGVyIGV4ZWN1dGlvbiAqLwotI2RlZmluZSBCUkNSX1BDVEUJCTAKLSNlbHNlCi0jZGVmaW5lIEJSQ1JfUENURQkJKDEgPDwgMTEpCi0jZGVmaW5lIEJSQ1JfUENCQQkJKDEgPDwgMTApCS8qIDE6IGFmdGVyIGV4ZWN1dGlvbiAqLwotI2RlZmluZSBCUkNSX0RCRUIJCSgxIDw8IDcpCi0jZGVmaW5lIEJSQ1JfUENCQgkJKDEgPDwgNikKLSNkZWZpbmUgQlJDUl9TRVEJCSgxIDw8IDMpCi0jZGVmaW5lIEJSQ1JfVUJERQkJKDEgPDwgMCkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9fQVNNX1NIX1VCQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuY2FjaGVkLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuY2FjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0MTlmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5jYWNoZWQuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9fQVNNX1NIX1VOQ0FDSEVEX0gKKyNkZWZpbmUgX19BU01fU0hfVU5DQUNIRURfSAorCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdW5jYWNoZWRfc3RhcnQsIHVuY2FjaGVkX2VuZDsKKworZXh0ZXJuIGludCB2aXJ0X2FkZHJfdW5jYWNoZWQodW5zaWduZWQgbG9uZyBrYWRkcik7CitleHRlcm4gdm9pZCB1bmNhY2hlZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdW5jYWNoZWRfcmVzaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisjZWxzZQorI2RlZmluZSB2aXJ0X2FkZHJfdW5jYWNoZWQoa2FkZHIpCSgwKQorI2RlZmluZSB1bmNhY2hlZF9pbml0KCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHVuY2FjaGVkX3Jlc2l6ZShzaXplKQkJQlVHKCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fU0hfVU5DQUNIRURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS92bWxpbnV4Lmxkcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS92bWxpbnV4Lmxkcy5oCmluZGV4IDI0NGVjNGEuLmQ1OGFkNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdm1saW51eC5sZHMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3ZtbGludXgubGRzLmgKQEAgLTE0LDQgKzE0LDEyIEBACiAjZGVmaW5lIERXQVJGX0VIX0ZSQU1FCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TVVBFUkg2NAorI2RlZmluZSBFWFRSQV9URVhUCQlcCisJKigudGV4dDY0KQkJXAorCSooLnRleHQuLlNIbWVkaWEzMikKKyNlbHNlCisjZGVmaW5lIEVYVFJBX1RFWFQKKyNlbmRpZgorCiAjZW5kaWYgLyogX19BU01fU0hfVk1MSU5VWF9MRFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS93YXRjaGRvZy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS93YXRjaGRvZy5oCmluZGV4IDE5ZGZmZjUuLjg1YTdhY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vd2F0Y2hkb2cuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3dhdGNoZG9nLmgKQEAgLTcwLDcgKzcwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBfX3UzMiBzaF93ZHRfcmVhZF9jbnQodm9pZCkKIHsKLQlyZXR1cm4gY3RybF9pbmwoV1RDTlRfUik7CisJcmV0dXJuIF9fcmF3X3JlYWRsKFdUQ05UX1IpOwogfQogCiAvKioKQEAgLTgyLDcgKzgyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNoX3dkdF93cml0ZV9jbnQoX191MzIgdmFsKQogewotCWN0cmxfb3V0bCgoV1RDTlRfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVENOVCk7CisJX19yYXdfd3JpdGVsKChXVENOVF9ISUdIIDw8IDI0KSB8IChfX3UzMil2YWwsIFdUQ05UKTsKIH0KIAogLyoqCkBAIC05NCw3ICs5NCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfYnN0KF9fdTMyIHZhbCkKIHsKLQljdHJsX291dGwoKFdUQlNUX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RCU1QpOworCV9fcmF3X3dyaXRlbCgoV1RCU1RfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVEJTVCk7CiB9CiAvKioKICAqIAlzaF93ZHRfcmVhZF9jc3IgLSBSZWFkIGZyb20gQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKQEAgLTEwMyw3ICsxMDMsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIF9fdTMyIHNoX3dkdF9yZWFkX2Nzcih2b2lkKQogewotCXJldHVybiBjdHJsX2lubChXVENTUl9SKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoV1RDU1JfUik7CiB9CiAKIC8qKgpAQCAtMTE1LDcgKzExNSw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfY3NyKF9fdTMyIHZhbCkKIHsKLQljdHJsX291dGwoKFdUQ1NSX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RDU1IpOworCV9fcmF3X3dyaXRlbCgoV1RDU1JfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVENTUik7CiB9CiAjZWxzZQogLyoqCkBAIC0xMjQsNyArMTI0LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBfX3U4IHNoX3dkdF9yZWFkX2NudCh2b2lkKQogewotCXJldHVybiBjdHJsX2luYihXVENOVF9SKTsKKwlyZXR1cm4gX19yYXdfcmVhZGIoV1RDTlRfUik7CiB9CiAKIC8qKgpAQCAtMTM2LDcgKzEzNiw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfY250KF9fdTggdmFsKQogewotCWN0cmxfb3V0dygoV1RDTlRfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFdUQ05UKTsKKwlfX3Jhd193cml0ZXcoKFdUQ05UX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBXVENOVCk7CiB9CiAKIC8qKgpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgX191OCBzaF93ZHRfcmVhZF9jc3Iodm9pZCkKIHsKLQlyZXR1cm4gY3RybF9pbmIoV1RDU1JfUik7CisJcmV0dXJuIF9fcmF3X3JlYWRiKFdUQ1NSX1IpOwogfQogCiAvKioKQEAgLTE1OCw3ICsxNTgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2NzcihfX3U4IHZhbCkKIHsKLQljdHJsX291dHcoKFdUQ1NSX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBXVENTUik7CisJX19yYXdfd3JpdGV3KChXVENTUl9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgV1RDU1IpOwogfQogI2VuZGlmIC8qIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgfHwgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS91YmMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS91YmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwZTg3Zi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvdWJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMi91YmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19BU01fQ1BVX1NIMl9VQkNfSAotI2RlZmluZSBfX0FTTV9DUFVfU0gyX1VCQ19ICi0KLSNkZWZpbmUgVUJDX0JBUkEgICAgICAgICAgICAgICAgMHhmZmZmZmY0MAotI2RlZmluZSBVQkNfQkFNUkEgICAgICAgICAgICAgICAweGZmZmZmZjQ0Ci0jZGVmaW5lIFVCQ19CQlJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmNDgKLSNkZWZpbmUgVUJDX0JBUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY2MAotI2RlZmluZSBVQkNfQkFNUkIgICAgICAgICAgICAgICAweGZmZmZmZjY0Ci0jZGVmaW5lIFVCQ19CQlJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmNjgKLSNkZWZpbmUgVUJDX0JEUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY3MAotI2RlZmluZSBVQkNfQkRNUkIgICAgICAgICAgICAgICAweGZmZmZmZjc0Ci0jZGVmaW5lIFVCQ19CUkNSICAgICAgICAgICAgICAgIDB4ZmZmZmZmNzgKLQotLyoKLSAqIFdlIGRvbid0IGhhdmUgYW55IEFTSUQgY2hhbmdlcyB0byBtYWtlIGluIHRoZSBVQkMgb24gdGhlIFNILTIuCi0gKgotICogTWFrZSB0aGVzZSBwdXJwb3NlbHkgaW52YWxpZCB0byB0cmFjayBtaXN1c2UuCi0gKi8KLSNkZWZpbmUgVUJDX0JBU1JBCQkweDAwMDAwMDAwCi0jZGVmaW5lIFVCQ19CQVNSQgkJMHgwMDAwMDAwMAotCi0jZW5kaWYgLyogX19BU01fQ1BVX1NIMl9VQkNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvd2F0Y2hkb2cuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS93YXRjaGRvZy5oCmluZGV4IDM5MzE2MWMuLjFlYWI4YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS93YXRjaGRvZy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS93YXRjaGRvZy5oCkBAIC00NCw3ICs0NCw3IEBACiAJLyoKIAkgKiBTYW1lIHJlYWQvd3JpdGUgYnJhaW4tZGFtYWdlIGFzIGZvciBXVENOVCBoZXJlLi4KIAkgKi8KLQlyZXR1cm4gY3RybF9pbmIoUlNUQ1NSX1IpOworCXJldHVybiBfX3Jhd19yZWFkYihSU1RDU1JfUik7CiB9CiAKIC8qKgpAQCAtNjIsNyArNjIsNyBAQAogCSAqIHdlIGNhbid0IHByZXNlbnRseSB0b3VjaCB0aGUgV09WRiBiaXQsIHNpbmNlIHRoZSB1cHBlciBieXRlCiAJICogaGFzIHRvIGJlIHN3YXBwZWQgZm9yIHRoaXMuIFNvIGp1c3QgbGVhdmUgaXQgYWxvbmUuLgogCSAqLwotCWN0cmxfb3V0dygoV1RDTlRfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFJTVENTUik7CisJX19yYXdfd3JpdGViKChXVENOVF9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgUlNUQ1NSKTsKIH0KIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDJfV0FUQ0hET0dfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RhYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RhYy5oCmluZGV4IDA1ZmRhODMuLjk4ZjFkMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kYWMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZGFjLmgKQEAgLTE3LDI1ICsxNywyNSBAQAogc3RhdGljIF9faW5saW5lX18gdm9pZCBzaF9kYWNfZW5hYmxlKGludCBjaGFubmVsKQogewogCXVuc2lnbmVkIGNoYXIgdjsKLQl2ID0gY3RybF9pbmIoREFDUik7CisJdiA9IF9fcmF3X3JlYWRiKERBQ1IpOwogCWlmKGNoYW5uZWwpIHYgfD0gREFDUl9EQU9FMTsKIAllbHNlIHYgfD0gREFDUl9EQU9FMDsKLQljdHJsX291dGIodixEQUNSKTsKKwlfX3Jhd193cml0ZWIodixEQUNSKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBzaF9kYWNfZGlzYWJsZShpbnQgY2hhbm5lbCkKIHsKIAl1bnNpZ25lZCBjaGFyIHY7Ci0JdiA9IGN0cmxfaW5iKERBQ1IpOworCXYgPSBfX3Jhd19yZWFkYihEQUNSKTsKIAlpZihjaGFubmVsKSB2ICY9IH5EQUNSX0RBT0UxOwogCWVsc2UgdiAmPSB+REFDUl9EQU9FMDsKLQljdHJsX291dGIodixEQUNSKTsKKwlfX3Jhd193cml0ZWIodixEQUNSKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBzaF9kYWNfb3V0cHV0KHU4IHZhbHVlLCBpbnQgY2hhbm5lbCkKIHsKLQlpZihjaGFubmVsKSBjdHJsX291dGIodmFsdWUsREFEUjEpOwotCWVsc2UgY3RybF9vdXRiKHZhbHVlLERBRFIwKTsKKwlpZihjaGFubmVsKSBfX3Jhd193cml0ZWIodmFsdWUsREFEUjEpOworCWVsc2UgX19yYXdfd3JpdGViKHZhbHVlLERBRFIwKTsKIH0KIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfREFDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAppbmRleCAwZWExNWYzLi4yMDc4MTFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCkBAIC0yMCw4ICsyMCwxMCBAQAogI2RlZmluZSBUU18zMgkJMHgwMDAwMDAxMAogI2RlZmluZSBUU18xMjgJCTB4MDAwMDAwMTgKIAotI2RlZmluZSBDSENSX1RTX01BU0sJMHgxOAotI2RlZmluZSBDSENSX1RTX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogCiAjZGVmaW5lIERNQU9SX0lOSVQJRE1BT1JfRE1FCiAKQEAgLTM2LDExICszOCwxMyBAQAogCVhNSVRfU1pfMTI4QklULAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCi0JW1hNSVRfU1pfMzJCSVRdCQk9IDIsCi0JW1hNSVRfU1pfMTI4QklUXQk9IDQsCi19OworI2RlZmluZSBUU19TSElGVCB7CQkJXAorCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCisJW1hNSVRfU1pfMTI4QklUXQk9IDQsCVwKK30KKworI2RlZmluZSBUU19JTkRFWDJWQUwoaSkJKCgoaSkgJiAzKSA8PCBDSENSX1RTX0xPV19TSElGVCkKIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS91YmMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS91YmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU2MzgxZC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvdWJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMy91YmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19BU01fQ1BVX1NIM19VQkNfSAotI2RlZmluZSBfX0FTTV9DUFVfU0gzX1VCQ19ICi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCi0jZGVmaW5lIFVCQ19CQVJBCQkweGE0ZmZmZmIwCi0jZGVmaW5lIFVCQ19CQU1SQQkJMHhhNGZmZmZiNAotI2RlZmluZSBVQkNfQkJSQQkJMHhhNGZmZmZiOAotI2RlZmluZSBVQkNfQkFTUkEJCTB4ZmZmZmZmZTQKLSNkZWZpbmUgVUJDX0JBUkIJCTB4YTRmZmZmYTAKLSNkZWZpbmUgVUJDX0JBTVJCCQkweGE0ZmZmZmE0Ci0jZGVmaW5lIFVCQ19CQlJCCQkweGE0ZmZmZmE4Ci0jZGVmaW5lIFVCQ19CQVNSQgkJMHhmZmZmZmZlOAotI2RlZmluZSBVQkNfQkRSQgkJMHhhNGZmZmY5MAotI2RlZmluZSBVQkNfQkRNUkIJCTB4YTRmZmZmOTQKLSNkZWZpbmUgVUJDX0JSQ1IJCTB4YTRmZmZmOTgKLSNlbHNlCi0jZGVmaW5lIFVCQ19CQVJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmYjAKLSNkZWZpbmUgVUJDX0JBTVJBICAgICAgICAgICAgICAgMHhmZmZmZmZiNAotI2RlZmluZSBVQkNfQkJSQSAgICAgICAgICAgICAgICAweGZmZmZmZmI4Ci0jZGVmaW5lIFVCQ19CQVNSQSAgICAgICAgICAgICAgIDB4ZmZmZmZmZTQKLSNkZWZpbmUgVUJDX0JBUkIgICAgICAgICAgICAgICAgMHhmZmZmZmZhMAotI2RlZmluZSBVQkNfQkFNUkIgICAgICAgICAgICAgICAweGZmZmZmZmE0Ci0jZGVmaW5lIFVCQ19CQlJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmYTgKLSNkZWZpbmUgVUJDX0JBU1JCICAgICAgICAgICAgICAgMHhmZmZmZmZlOAotI2RlZmluZSBVQkNfQkRSQiAgICAgICAgICAgICAgICAweGZmZmZmZjkwCi0jZGVmaW5lIFVCQ19CRE1SQiAgICAgICAgICAgICAgIDB4ZmZmZmZmOTQKLSNkZWZpbmUgVUJDX0JSQ1IgICAgICAgICAgICAgICAgMHhmZmZmZmY5OAotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX1VCQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvYWRkcnNwYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvYWRkcnNwYWNlLmgKaW5kZXggYTNmYTczMy4uZDUxZGEyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2FkZHJzcGFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9hZGRyc3BhY2UuaApAQCAtMjgsNiArMjgsMTUgQEAKICNkZWZpbmUgUDRTRUdfVExCX0RBVEEJMHhmNzAwMDAwMAogI2RlZmluZSBQNFNFR19SRUdfQkFTRQkweGZmMDAwMDAwCiAKKyNkZWZpbmUgUEFfQVJFQTAJMHgwMDAwMDAwMAorI2RlZmluZSBQQV9BUkVBMQkweDA0MDAwMDAwCisjZGVmaW5lIFBBX0FSRUEyCTB4MDgwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTMJMHgwYzAwMDAwMAorI2RlZmluZSBQQV9BUkVBNAkweDEwMDAwMDAwCisjZGVmaW5lIFBBX0FSRUE1CTB4MTQwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTYJMHgxODAwMDAwMAorI2RlZmluZSBQQV9BUkVBNwkweDFjMDAwMDAwCisKICNkZWZpbmUgUEFfQVJFQTVfSU8JMHhiNDAwMDAwMAkvKiBBcmVhIDUgSU8gTWVtb3J5ICovCiAjZGVmaW5lIFBBX0FSRUE2X0lPCTB4YjgwMDAwMDAJLyogQXJlYSA2IElPIE1lbW9yeSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCmluZGV4IGM0ZWQ2NjAuLmU3MzRlYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCkBAIC0yLDIyICsyLDM4IEBACiAjZGVmaW5lIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MzApCiAjZGVmaW5lIERNVEUwX0lSUQk0OAogI2RlZmluZSBETVRFNF9JUlEJNzYKICNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLwogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKLSNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZFMDA5MDAwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkUwMDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQorI2RlZmluZSBETVRFMF9JUlEJNDgKKyNkZWZpbmUgRE1URTRfSVJRCTc2CisjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkUwMDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMHgwMDMwMDAwMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMjAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2NCkKICNkZWZpbmUgRE1URTBfSVJRCTM0CiAjZGVmaW5lIERNVEU0X0lSUQk0NAogI2RlZmluZSBETUFFMF9JUlEJMzgKICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZGNjA4MDIwCi0jZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGRjYwOTAwMAotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkY2MDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQogI2RlZmluZSBETVRFMF9JUlEJNDgJLyogRE1BQzBBKi8KICNkZWZpbmUgRE1URTRfSVJRCTc2CS8qIERNQUMwQiAqLwogI2RlZmluZSBETVRFNl9JUlEJNDAKQEAgLTI5LDcgKzQ1LDI5IEBACiAjZGVmaW5lIERNQUUxX0lSUQk3NAkvKiBETUEgRXJyb3IgSVJRKi8KICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGREMwODAyMAotI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkRDMDkwMDAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGREMwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCisjZGVmaW5lIERNVEUwX0lSUQk0OAkvKiBETUFDMEEqLworI2RlZmluZSBETVRFNF9JUlEJNzYJLyogRE1BQzBCICovCisjZGVmaW5lIERNVEU2X0lSUQk0MAorI2RlZmluZSBETVRFOF9JUlEJNDIJLyogRE1BQzFBICovCisjZGVmaW5lIERNVEU5X0lSUQk0MworI2RlZmluZSBETVRFMTBfSVJRCTcyCS8qIERNQUMxQiAqLworI2RlZmluZSBETVRFMTFfSVJRCTczCisjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgRE1BRTFfSVJRCTc0CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZEQzA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkUwMDkwMDAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTEJMHhGREMwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkweDAwNjAwMDAwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkyMQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQogI2RlZmluZSBETVRFMF9JUlEJMzQKICNkZWZpbmUgRE1URTRfSVJRCTQ0CkBAIC00MSw3ICs3OSwxMSBAQAogI2RlZmluZSBETUFFMF9JUlEJMzgJLyogRE1BIEVycm9yIElSUSAqLwogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDODE4MDIwCi0jZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGQzgwOTAwMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZDODA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKICNlbHNlIC8qIFNINzc4NSAqLwogI2RlZmluZSBETVRFMF9JUlEJMzMKICNkZWZpbmUgRE1URTRfSVJRCTM3CkBAIC01NCwxOCArOTYsMTcgQEAKICNkZWZpbmUgRE1BRTFfSVJRCTU4CS8qIERNQSBFcnJvciBJUlExICovCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGQzgwODAyMAogI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkNDMDgwMjAKLSNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZDODA5MDAwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkM4MDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogI2VuZGlmCiAKLSNkZWZpbmUgUkVRX0hFCTB4MDAwMDAwQzAKLSNkZWZpbmUgUkVRX0gJMHgwMDAwMDA4MAotI2RlZmluZSBSRVFfTEUJMHgwMDAwMDA0MAotI2RlZmluZSBUTV9CVVJTVCAweDAwMDAwMjAKLSNkZWZpbmUgVFNfOAkweDAwMDAwMDAwCi0jZGVmaW5lIFRTXzE2CTB4MDAwMDAwMDgKLSNkZWZpbmUgVFNfMzIJMHgwMDAwMDAxMAotI2RlZmluZSBUU18xNkJMSwkweDAwMDAwMDE4Ci0jZGVmaW5lIFRTXzMyQkxLCTB4MDAxMDAwMDAKKyNkZWZpbmUgUkVRX0hFCQkweDAwMDAwMEMwCisjZGVmaW5lIFJFUV9ICQkweDAwMDAwMDgwCisjZGVmaW5lIFJFUV9MRQkJMHgwMDAwMDA0MAorI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwMDIwCiAKIC8qCiAgKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLApAQCAtNzQsMjIgKzExNSwzMSBAQAogICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KICAqLwogZW51bSB7Ci0JWE1JVF9TWl84QklULAotCVhNSVRfU1pfMTZCSVQsCi0JWE1JVF9TWl8zMkJJVCwKLQlYTUlUX1NaXzEyOEJJVCwKLQlYTUlUX1NaXzI1NkJJVCwKKwlYTUlUX1NaXzhCSVQJCT0gMCwKKwlYTUlUX1NaXzE2QklUCQk9IDEsCisJWE1JVF9TWl8zMkJJVAkJPSAyLAorCVhNSVRfU1pfNjRCSVQJCT0gNywKKwlYTUlUX1NaXzEyOEJJVAkJPSAzLAorCVhNSVRfU1pfMjU2QklUCQk9IDQsCisJWE1JVF9TWl8xMjhCSVRfQkxLCT0gMHhiLAorCVhNSVRfU1pfMjU2QklUX0JMSwk9IDB4YywKIH07CiAKIC8qCiAgKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCi0JW1hNSVRfU1pfMzJCSVRdCQk9IDIsCi0JW1hNSVRfU1pfMTI4QklUXQk9IDQsCi0JW1hNSVRfU1pfMjU2QklUXQk9IDUsCi19OworI2RlZmluZSBUU19TSElGVCB7CQkJXAorCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCisJW1hNSVRfU1pfNjRCSVRdCQk9IDMsCVwKKwlbWE1JVF9TWl8xMjhCSVRdCT0gNCwJXAorCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAlcCisJW1hNSVRfU1pfMTI4QklUX0JMS10JPSA0LAlcCisJW1hNSVRfU1pfMjU2QklUX0JMS10JPSA1LAlcCit9CisKKyNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKChpKSAmIDMpIDw8IENIQ1JfVFNfTE9XX1NISUZUKSB8IFwKKwkJCSAoKCgoaSkgPj4gMikgJiAzKSA8PCBDSENSX1RTX0hJR0hfU0hJRlQpKQogCiAjZW5kaWYgLyogX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaAppbmRleCBiY2IzMDI0Li4xMTRhMzY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCkBAIC02LDggKzYsNiBAQAogI2lmZGVmIENPTkZJR19DUFVfU0g0QQogCiAjZGVmaW5lIERNQU9SX0lOSVQJKERNQU9SX0RNRSkKLSNkZWZpbmUgQ0hDUl9UU19NQVNLCTB4MTgKLSNkZWZpbmUgQ0hDUl9UU19TSElGVAkzCiAKICNpbmNsdWRlIDxjcHUvZG1hLXNoNGEuaD4KICNlbHNlIC8qIENPTkZJR19DUFVfU0g0QSAqLwpAQCAtMjksOCArMjcsMTAgQEAKICNkZWZpbmUgVFNfMzIJCTB4MDAwMDAwMzAKICNkZWZpbmUgVFNfNjQJCTB4MDAwMDAwMDAKIAotI2RlZmluZSBDSENSX1RTX01BU0sJMHg3MAotI2RlZmluZSBDSENSX1RTX1NISUZUCTQKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDcwCisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTQKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogCiAjZGVmaW5lIERNQU9SX0NPRAkweDAwMDAwMDA4CiAKQEAgLTQxLDIzICs0MSwyNiBAQAogICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KICAqLwogZW51bSB7Ci0JWE1JVF9TWl82NEJJVCwKLQlYTUlUX1NaXzhCSVQsCi0JWE1JVF9TWl8xNkJJVCwKLQlYTUlUX1NaXzMyQklULAotCVhNSVRfU1pfMjU2QklULAorCVhNSVRfU1pfOEJJVAk9IDEsCisJWE1JVF9TWl8xNkJJVAk9IDIsCisJWE1JVF9TWl8zMkJJVAk9IDMsCisJWE1JVF9TWl82NEJJVAk9IDAsCisJWE1JVF9TWl8yNTZCSVQJPSA0LAogfTsKIAogLyoKICAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7Ci0JW1hNSVRfU1pfNjRCSVRdCQk9IDMsCi0JW1hNSVRfU1pfOEJJVF0JCT0gMCwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKLQlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKLQlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKLX07CisjZGVmaW5lIFRTX1NISUZUIHsJCQlcCisJW1hNSVRfU1pfOEJJVF0JCT0gMCwJXAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAlcCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCVwKKwlbWE1JVF9TWl82NEJJVF0JCT0gMywJXAorCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAlcCit9CisKKyNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKGkpICYgNykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpCisKICNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQ1BVX1NINF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaAppbmRleCAzY2U3ZWY2Li4wM2VhNzVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaApAQCAtMjUsNiArMjUsMTAgQEAKIAogI2RlZmluZSBNTVVDUl9USQkJKDE8PDIpCiAKKyNkZWZpbmUgTU1VQ1JfVVJCCQkweDAwRkMwMDAwCisjZGVmaW5lIE1NVUNSX1VSQl9TSElGVAkJMTgKKyNkZWZpbmUgTU1VQ1JfVVJCX05FTlRSSUVTCTY0CisKICNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkgJiYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MCkKICNkZWZpbmUgTU1VQ1JfU0UJCSgxIDw8IDQpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc3EuaAppbmRleCA1ODZkNjQ5Li43NDcxNmJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc3EuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc3EuaApAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBfX0FTTV9DUFVfU0g0X1NRX0gKIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAvKgogICogU3RvcmUgcXVldWVzIHJhbmdlIGZyb20gZTAwMDAwMDAtZTNmZmZmZmMsIGFsbG93aW5nIGFwcHJveC4gNjRNQiB0byBiZQpAQCAtMjgsNyArMjksNyBAQAogCiAvKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMgKi8KIHVuc2lnbmVkIGxvbmcgc3FfcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgcGdwcm90X3QgcHJvdCk7CiB2b2lkIHNxX3VubWFwKHVuc2lnbmVkIGxvbmcgdmFkZHIpOwogdm9pZCBzcV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3ViYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3ViYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODZlMTcwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS91YmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3ViYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQotICogQ29weXJpZ2h0IChDKSAyMDAzIFBhdWwgTXVuZHQKLSAqIENvcHlyaWdodCAoQykgMjAwNiBMaW5lbyBTb2x1dGlvbnMgSW5jLiBzdXBwb3J0IFNINEEgVUJDCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19BU01fQ1BVX1NINF9VQkNfSAotI2RlZmluZSBfX0FTTV9DUFVfU0g0X1VCQ19ICi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLSNkZWZpbmUgVUJDX0NCUjAJCTB4ZmYyMDAwMDAKLSNkZWZpbmUgVUJDX0NSUjAJCTB4ZmYyMDAwMDQKLSNkZWZpbmUgVUJDX0NBUjAJCTB4ZmYyMDAwMDgKLSNkZWZpbmUgVUJDX0NBTVIwCQkweGZmMjAwMDBjCi0jZGVmaW5lIFVCQ19DQlIxCQkweGZmMjAwMDIwCi0jZGVmaW5lIFVCQ19DUlIxCQkweGZmMjAwMDI0Ci0jZGVmaW5lIFVCQ19DQVIxCQkweGZmMjAwMDI4Ci0jZGVmaW5lIFVCQ19DQU1SMQkJMHhmZjIwMDAyYwotI2RlZmluZSBVQkNfQ0RSMQkJMHhmZjIwMDAzMAotI2RlZmluZSBVQkNfQ0RNUjEJCTB4ZmYyMDAwMzQKLSNkZWZpbmUgVUJDX0NFVFIxCQkweGZmMjAwMDM4Ci0jZGVmaW5lIFVCQ19DQ01GUgkJMHhmZjIwMDYwMAotI2RlZmluZSBVQkNfQ0JDUgkJMHhmZjIwMDYyMAotCi0vKiBDQlIJKi8KLSNkZWZpbmUgVUJDX0NCUl9BSUUJCSgweDAxPDwzMCkKLSNkZWZpbmUgVUJDX0NCUl9JRF9JTlNUCQkoMHgwMTw8NCkKLSNkZWZpbmUgVUJDX0NCUl9SV19SRUFECQkoMHgwMTw8MSkKLSNkZWZpbmUgVUJDX0NCUl9DRQkJKDB4MDEpCi0KLSNkZWZpbmUJVUJDX0NCUl9BSVZfTUFTSwkoMHgwMEZGMDAwMCkKLSNkZWZpbmUJVUJDX0NCUl9BSVZfU0hJRlQJKDE2KQotI2RlZmluZSBVQkNfQ0JSX0FJVl9TRVQoYXNpZCkJKCgoYXNpZCk8PFVCQ19DQlJfQUlWX1NISUZUKSAmIFVCQ19DQlJfQUlWX01BU0spCi0KLSNkZWZpbmUgVUJDX0NCUl9JTklUCQkweDIwMDAwMDAwCi0KLS8qIENSUgkqLwotI2RlZmluZSBVQkNfQ1JSX1JFUwkJKDB4MDE8PDEzKQotI2RlZmluZSBVQkNfQ1JSX1BDQgkJKDB4MDE8PDEpCi0jZGVmaW5lIFVCQ19DUlJfQklFCQkoMHgwMSkKLQotI2RlZmluZSBVQkNfQ1JSX0lOSVQJCTB4MDAwMDIwMDAKLQotI2Vsc2UJLyogQ09ORklHX0NQVV9TSDQgKi8KLSNkZWZpbmUgVUJDX0JBUkEJCTB4ZmYyMDAwMDAKLSNkZWZpbmUgVUJDX0JBTVJBCQkweGZmMjAwMDA0Ci0jZGVmaW5lIFVCQ19CQlJBCQkweGZmMjAwMDA4Ci0jZGVmaW5lIFVCQ19CQVNSQQkJMHhmZjAwMDAxNAotI2RlZmluZSBVQkNfQkFSQgkJMHhmZjIwMDAwYwotI2RlZmluZSBVQkNfQkFNUkIJCTB4ZmYyMDAwMTAKLSNkZWZpbmUgVUJDX0JCUkIJCTB4ZmYyMDAwMTQKLSNkZWZpbmUgVUJDX0JBU1JCCQkweGZmMDAwMDE4Ci0jZGVmaW5lIFVCQ19CRFJCCQkweGZmMjAwMDE4Ci0jZGVmaW5lIFVCQ19CRE1SQgkJMHhmZjIwMDAxYwotI2RlZmluZSBVQkNfQlJDUgkJMHhmZjIwMDAyMAotI2VuZGlmCS8qIENPTkZJR19DUFVfU0g0ICovCi0KLSNlbmRpZiAvKiBfX0FTTV9DUFVfU0g0X1VCQ19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKaW5kZXggYzY0NGE3Ny4uMTgzYTJmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKQEAgLTE5LDEyICsxOSwxMiBAQAogI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CiAKIAotI2RlZmluZSBTRVRCSVRTX09VVEIobWFzaywgcmVnKSAgIGN0cmxfb3V0YihjdHJsX2luYihyZWcpIHwgbWFzaywgcmVnKQotI2RlZmluZSBTRVRCSVRTX09VVFcobWFzaywgcmVnKSAgIGN0cmxfb3V0dyhjdHJsX2ludyhyZWcpIHwgbWFzaywgcmVnKQotI2RlZmluZSBTRVRCSVRTX09VVEwobWFzaywgcmVnKSAgIGN0cmxfb3V0bChjdHJsX2lubChyZWcpIHwgbWFzaywgcmVnKQotI2RlZmluZSBDTFJCSVRTX09VVEIobWFzaywgcmVnKSAgIGN0cmxfb3V0YihjdHJsX2luYihyZWcpICYgfm1hc2ssIHJlZykKLSNkZWZpbmUgQ0xSQklUU19PVVRXKG1hc2ssIHJlZykgICBjdHJsX291dHcoY3RybF9pbncocmVnKSAmIH5tYXNrLCByZWcpCi0jZGVmaW5lIENMUkJJVFNfT1VUTChtYXNrLCByZWcpICAgY3RybF9vdXRsKGN0cmxfaW5sKHJlZykgJiB+bWFzaywgcmVnKQorI2RlZmluZSBTRVRCSVRTX09VVEIobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihyZWcpIHwgbWFzaywgcmVnKQorI2RlZmluZSBTRVRCSVRTX09VVFcobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhyZWcpIHwgbWFzaywgcmVnKQorI2RlZmluZSBTRVRCSVRTX09VVEwobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChyZWcpIHwgbWFzaywgcmVnKQorI2RlZmluZSBDTFJCSVRTX09VVEIobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihyZWcpICYgfm1hc2ssIHJlZykKKyNkZWZpbmUgQ0xSQklUU19PVVRXKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcocmVnKSAmIH5tYXNrLCByZWcpCisjZGVmaW5lIENMUkJJVFNfT1VUTChtYXNrLCByZWcpICAgX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHJlZykgJiB+bWFzaywgcmVnKQogCiAKICNkZWZpbmUgUEFfTEVEICAgICAgICAgIFBPUlRfUEFEUiAgICAgIC8qIExFRCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtZHJlYW1jYXN0L21hY2gvc3lzYXNpYy5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtZHJlYW1jYXN0L21hY2gvc3lzYXNpYy5oCmluZGV4IGYzMzQyNjYuLjU4ZjcxMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1kcmVhbWNhc3QvbWFjaC9zeXNhc2ljLmgKQEAgLTM5LDUgKzM5LDEwIEBACiAKICNkZWZpbmUgSFdfRVZFTlRfSVJRX01BWCAoSFdfRVZFTlRfSVJRX0JBU0UgKyA5NSkKIAorLyogYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvaXJxLmMgKi8KK2V4dGVybiBpbnQgc3lzdGVtYXNpY19pcnFfZGVtdXgoaW50KTsKK2V4dGVybiB2b2lkIHN5c3RlbWFzaWNfaXJxX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBhaWNhX3RpbWVfaW5pdCh2b2lkKTsKKwogI2VuZGlmIC8qIF9fQVNNX1NIX0RSRUFNQ0FTVF9TWVNBU0lDX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2RrNzc4Ni9tYWNoL2ZwZ2EuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9mcGdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyMGQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9mcGdhLmgKQEAgLTAsMCArMSwxMTQgQEAKKyNpZm5kZWYgX19NQUNIX1NESzc3ODZfRlBHQV9ICisjZGVmaW5lIF9fTUFDSF9TREs3Nzg2X0ZQR0FfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVmaW5lIFNSU1RSCQkweDAwMAorI2RlZmluZSAgU1JTVFJfTUFHSUMJMHgxOTcxCS8qIEZpeGVkIG1hZ2ljYWwgcmVhZCB2YWx1ZSAqLworCisjZGVmaW5lIElOVEFTUgkJMHgwMTAKKyNkZWZpbmUgSU5UQU1SCQkweDAyMAorI2RlZmluZSBNT0RTV1IJCTB4MDMwCisjZGVmaW5lIElOVFRFU1RSCTB4MDQwCisjZGVmaW5lIFNZU1NSCQkweDA1MAorI2RlZmluZSBOUkdQUgkJMHgwNjAKKyNkZWZpbmUgTk1JU1IJCTB4MDcwCisKKyNkZWZpbmUgTk1JTVIJCTB4MDgwCisjZGVmaW5lICBOTUlNUl9NQU5fTk1JTQlCSVQoMCkJLyogTWFudWFsIE5NSSBtYXNrICovCisjZGVmaW5lICBOTUlNUl9BVVhfTk1JTQlCSVQoMSkJLyogQXV4aWxpYXJ5IE5NSSBtYXNrICovCisKKyNkZWZpbmUgSU5UQlNSCQkweDA5MAorI2RlZmluZSBJTlRCTVIJCTB4MGEwCisjZGVmaW5lIFVTUkxFRFIJCTB4MGIwCisjZGVmaW5lIE1BUFNXUgkJMHgwYzAKKyNkZWZpbmUgRlBHQVZSCQkweDBkMAorI2RlZmluZSBGUEdBRFIJCTB4MGUwCisjZGVmaW5lIFBDQlJSCQkweDBmMAorI2RlZmluZSBSU1IJCTB4MTAwCisjZGVmaW5lIEVYVEFTUgkJMHgxMTAKKyNkZWZpbmUgU1BDQVIJCTB4MTIwCisjZGVmaW5lIElOVE1TUgkJMHgxMzAKKyNkZWZpbmUgUENJRUNSCQkweDE0MAorI2RlZmluZSBGQUVSCQkweDE1MAorI2RlZmluZSBVU1JHUElSCQkweDE2MAorLyogMHgxNzAgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgTENMQVNSCQkweDE4MAorCisjZGVmaW5lIFNCQ1IJCTB4MTkwCisjZGVmaW5lICBTQ0JSX0kyQ01FTglCSVQoMCkJLyogRlBHQSBJMkMgbWFzdGVyIGVuYWJsZSAqLworI2RlZmluZSAgU0NCUl9JMkNDRU4JQklUKDEpCS8qIENQVSBJMkMgbWFzdGVyIGVuYWJsZSAqLworCisjZGVmaW5lIFBXUkNSCQkweDFhMAorI2RlZmluZSBTUENCUgkJMHgxYjAKKyNkZWZpbmUgU1BJQ1IJCTB4MWMwCisjZGVmaW5lIFNQSURSCQkweDFkMAorI2RlZmluZSBJMkNDUgkJMHgxZTAKKyNkZWZpbmUgSTJDRFIJCTB4MWYwCisjZGVmaW5lIEZQR0FDUgkJMHgyMDAKKyNkZWZpbmUgSUFTRUxSMQkJMHgyMTAKKyNkZWZpbmUgSUFTRUxSMgkJMHgyMjAKKyNkZWZpbmUgSUFTRUxSMwkJMHgyMzAKKyNkZWZpbmUgSUFTRUxSNAkJMHgyNDAKKyNkZWZpbmUgSUFTRUxSNQkJMHgyNTAKKyNkZWZpbmUgSUFTRUxSNgkJMHgyNjAKKyNkZWZpbmUgSUFTRUxSNwkJMHgyNzAKKyNkZWZpbmUgSUFTRUxSOAkJMHgyODAKKyNkZWZpbmUgSUFTRUxSOQkJMHgyOTAKKyNkZWZpbmUgSUFTRUxSMTAJMHgyYTAKKyNkZWZpbmUgSUFTRUxSMTEJMHgyYjAKKyNkZWZpbmUgSUFTRUxSMTIJMHgyYzAKKyNkZWZpbmUgSUFTRUxSMTMJMHgyZDAKKyNkZWZpbmUgSUFTRUxSMTQJMHgyZTAKKyNkZWZpbmUgSUFTRUxSMTUJMHgyZjAKKy8qIDB4MzAwIHJlc2VydmVkICovCisjZGVmaW5lIElCU0VMUjEJCTB4MzEwCisjZGVmaW5lIElCU0VMUjIJCTB4MzIwCisjZGVmaW5lIElCU0VMUjMJCTB4MzMwCisjZGVmaW5lIElCU0VMUjQJCTB4MzQwCisjZGVmaW5lIElCU0VMUjUJCTB4MzUwCisjZGVmaW5lIElCU0VMUjYJCTB4MzYwCisjZGVmaW5lIElCU0VMUjcJCTB4MzcwCisjZGVmaW5lIElCU0VMUjgJCTB4MzgwCisjZGVmaW5lIElCU0VMUjkJCTB4MzkwCisjZGVmaW5lIElCU0VMUjEwCTB4M2EwCisjZGVmaW5lIElCU0VMUjExCTB4M2IwCisjZGVmaW5lIElCU0VMUjEyCTB4M2MwCisjZGVmaW5lIElCU0VMUjEzCTB4M2QwCisjZGVmaW5lIElCU0VMUjE0CTB4M2UwCisjZGVmaW5lIElCU0VMUjE1CTB4M2YwCisjZGVmaW5lIFVTUkFDUgkJMHg0MDAKKyNkZWZpbmUgQkVFUFIJCTB4NDEwCisjZGVmaW5lIFVTUkxDRFIJCTB4NDIwCisjZGVmaW5lIFNNQkNSCQkweDQzMAorI2RlZmluZSBTTUJEUgkJMHg0NDAKKyNkZWZpbmUgVVNCQ1IJCTB4NDUwCisjZGVmaW5lIEFNU1IJCTB4NDYwCisjZGVmaW5lIEFDQ1IJCTB4NDcwCisjZGVmaW5lIFNESUZDUgkJMHg0ODAKKworLyogYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2ZwZ2EuYyAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqc2RrNzc4Nl9mcGdhX2Jhc2U7CitleHRlcm4gdm9pZCBzZGs3Nzg2X2ZwZ2FfaW5pdCh2b2lkKTsKKworI2RlZmluZSBTREs3Nzg2X0ZQR0FfUkVHQUREUihyZWcpCShzZGs3Nzg2X2ZwZ2FfYmFzZSArIChyZWcpKQorCisvKgorICogQSBjb252ZW5pZW5jZSB3cmFwcGVyIGZyb20gcmVnaXN0ZXIgb2Zmc2V0IHRvIGludGVybmFsIEkyQyBhZGRyZXNzLAorICogd2hlbiB0aGUgRlBHQSBpcyBpbiBJMkMgc2xhdmUgbW9kZS4KKyAqLworI2RlZmluZSBTREs3Nzg2X0ZQR0FfSTJDQUREUihyZWcpCSgocmVnKSA+PiAzKQorCitzdGF0aWMgaW5saW5lIHUxNiBmcGdhX3JlYWRfcmVnKHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIGlvcmVhZDE2KHNkazc3ODZfZnBnYV9iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZwZ2Ffd3JpdGVfcmVnKHUxNiB2YWwsIHVuc2lnbmVkIGludCByZWcpCit7CisJaW93cml0ZTE2KHZhbCwgc2RrNzc4Nl9mcGdhX2Jhc2UgKyByZWcpOworfQorCisjZW5kaWYgLyogX19NQUNIX1NESzc3ODZfRlBHQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvaXJxLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1ODQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9pcnEuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19NQUNIX1NESzc3ODZfSVJRX0gKKyNkZWZpbmUgX19NQUNIX1NESzc3ODZfSVJRX0gKKworLyogYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2lycS5jICovCitleHRlcm4gdm9pZCBzZGs3Nzg2X2luaXRfaXJxKHZvaWQpOworCisjZW5kaWYgLyogX19NQUNIX1NESzc3ODZfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNlL21hY2gvc2U3MzQzLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZS9tYWNoL3NlNzM0My5oCmluZGV4IDc0OTkxNGIuLjhkODE3MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNlL21hY2gvc2U3MzQzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2UvbWFjaC9zZTczNDMuaApAQCAtOTQsMjYgKzk0LDI2IEBACiAKICNkZWZpbmUgUE9SVF9EUlZDUgkweEE0MDUwMTgwCiAKLSNkZWZpbmUgUE9SVF9QQURSICAJMHhBNDA1MDEyMAotI2RlZmluZSBQT1JUX1BCRFIgIAkweEE0MDUwMTIyCi0jZGVmaW5lIFBPUlRfUENEUiAgCTB4QTQwNTAxMjQKLSNkZWZpbmUgUE9SVF9QRERSICAJMHhBNDA1MDEyNgotI2RlZmluZSBQT1JUX1BFRFIgIAkweEE0MDUwMTI4Ci0jZGVmaW5lIFBPUlRfUEZEUiAgCTB4QTQwNTAxMkEKLSNkZWZpbmUgUE9SVF9QR0RSICAJMHhBNDA1MDEyQwotI2RlZmluZSBQT1JUX1BIRFIgIAkweEE0MDUwMTJFCi0jZGVmaW5lIFBPUlRfUEpEUiAgCTB4QTQwNTAxMzAKLSNkZWZpbmUgUE9SVF9QS0RSICAJMHhBNDA1MDEzMgotI2RlZmluZSBQT1JUX1BMRFIgIAkweEE0MDUwMTM0Ci0jZGVmaW5lIFBPUlRfUE1EUiAgCTB4QTQwNTAxMzYKLSNkZWZpbmUgUE9SVF9QTkRSICAJMHhBNDA1MDEzOAotI2RlZmluZSBQT1JUX1BRRFIgIAkweEE0MDUwMTNBCi0jZGVmaW5lIFBPUlRfUFJEUiAgCTB4QTQwNTAxM0MKLSNkZWZpbmUgUE9SVF9QVERSICAJMHhBNDA1MDE2MAotI2RlZmluZSBQT1JUX1BVRFIgIAkweEE0MDUwMTYyCi0jZGVmaW5lIFBPUlRfUFZEUiAgCTB4QTQwNTAxNjQKLSNkZWZpbmUgUE9SVF9QV0RSICAJMHhBNDA1MDE2NgotI2RlZmluZSBQT1JUX1BZRFIgIAkweEE0MDUwMTY4CisjZGVmaW5lIFBPUlRfUEFEUgkweEE0MDUwMTIwCisjZGVmaW5lIFBPUlRfUEJEUgkweEE0MDUwMTIyCisjZGVmaW5lIFBPUlRfUENEUgkweEE0MDUwMTI0CisjZGVmaW5lIFBPUlRfUEREUgkweEE0MDUwMTI2CisjZGVmaW5lIFBPUlRfUEVEUgkweEE0MDUwMTI4CisjZGVmaW5lIFBPUlRfUEZEUgkweEE0MDUwMTJBCisjZGVmaW5lIFBPUlRfUEdEUgkweEE0MDUwMTJDCisjZGVmaW5lIFBPUlRfUEhEUgkweEE0MDUwMTJFCisjZGVmaW5lIFBPUlRfUEpEUgkweEE0MDUwMTMwCisjZGVmaW5lIFBPUlRfUEtEUgkweEE0MDUwMTMyCisjZGVmaW5lIFBPUlRfUExEUgkweEE0MDUwMTM0CisjZGVmaW5lIFBPUlRfUE1EUgkweEE0MDUwMTM2CisjZGVmaW5lIFBPUlRfUE5EUgkweEE0MDUwMTM4CisjZGVmaW5lIFBPUlRfUFFEUgkweEE0MDUwMTNBCisjZGVmaW5lIFBPUlRfUFJEUgkweEE0MDUwMTNDCisjZGVmaW5lIFBPUlRfUFREUgkweEE0MDUwMTYwCisjZGVmaW5lIFBPUlRfUFVEUgkweEE0MDUwMTYyCisjZGVmaW5lIFBPUlRfUFZEUgkweEE0MDUwMTY0CisjZGVmaW5lIFBPUlRfUFdEUgkweEE0MDUwMTY2CisjZGVmaW5lIFBPUlRfUFlEUgkweEE0MDUwMTY4CiAKICNkZWZpbmUgRlBHQV9JTgkJMHhiMTQwMDAwMAogI2RlZmluZSBGUEdBX09VVAkweGIxNDAwMDAyCkBAIC0xMzMsMTggKzEzMywxMCBAQAogI2RlZmluZSBTRTczNDNfRlBHQV9JUlFfVUFSVEIJMTEKIAogI2RlZmluZSBTRTczNDNfRlBHQV9JUlFfTlIJMTIKLSNkZWZpbmUgU0U3MzQzX0ZQR0FfSVJRX0JBU0UJMTIwCi0KLSNkZWZpbmUgTVJTSFBDX0lSUTMgICAgCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9NUlNIUEMzKQotI2RlZmluZSBNUlNIUENfSVJRMiAgICAJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX01SU0hQQzIpCi0jZGVmaW5lIE1SU0hQQ19JUlExICAgIAkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfTVJTSFBDMSkKLSNkZWZpbmUgTVJTSFBDX0lSUTAgICAgCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9NUlNIUEMwKQotI2RlZmluZSBTTUNfSVJRCQkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfU01DKQotI2RlZmluZSBVU0JfSVJRCQkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfVVNCKQotI2RlZmluZSBVQVJUQV9JUlEJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1VBUlRBKQotI2RlZmluZSBVQVJUQl9JUlEJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1VBUlRCKQogCiAvKiBhcmNoL3NoL2JvYXJkcy9zZS83MzQzL2lycS5jICovCitleHRlcm4gdW5zaWduZWQgaW50IHNlNzM0M19mcGdhX2lycVtdOworCiB2b2lkIGluaXRfNzM0M3NlX0lSUSh2b2lkKTsKIAogI2VuZGlmICAvKiBfX0FTTV9TSF9ISVRBQ0hJX1NFNzM0M19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlCmluZGV4IDBkNTg3ZGEuLjAyZmQzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlCkBAIC0xMyw4ICsxMyw5IEBACiAKIG9iai15CTo9IGRlYnVndHJhcHMubyBkbWEtbm9tbXUubyBkdW1wc3RhY2subyAJCQlcCiAJICAgaWRsZS5vIGlvLm8gaW9fZ2VuZXJpYy5vIGlycS5vCQkJCVwKLQkgICBpcnFfJChCSVRTKS5vIG1hY2h2ZWMubyBubWlfZGVidWcubyBwcm9jZXNzXyQoQklUUykubyAJXAotCSAgIHB0cmFjZV8kKEJJVFMpLm8gcmV0dXJuX2FkZHJlc3MubwkJCQlcCisJICAgaXJxXyQoQklUUykubyBtYWNodmVjLm8gbm1pX2RlYnVnLm8gcHJvY2Vzcy5vCQlcCisJICAgcHJvY2Vzc18kKEJJVFMpLm8gcHRyYWNlXyQoQklUUykubwkJCQlcCisJICAgcmVib290Lm8gcmV0dXJuX2FkZHJlc3MubwkJCQkJXAogCSAgIHNldHVwLm8gc2lnbmFsXyQoQklUUykubyBzeXNfc2gubyBzeXNfc2gkKEJJVFMpLm8JCVwKIAkgICBzeXNjYWxsc18kKEJJVFMpLm8gdGltZS5vIHRvcG9sb2d5Lm8gdHJhcHMubwkJCVwKIAkgICB0cmFwc18kKEJJVFMpLm8gdW53aW5kZXIubwpAQCAtMjIsNyArMjMsNyBAQAogb2JqLXkJCQkJKz0gY3B1Lwogb2JqLSQoQ09ORklHX1ZTWVNDQUxMKQkJKz0gdnN5c2NhbGwvCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8KLW9iai0kKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQkrPSBzaF9iaW9zLm8gZWFybHlfcHJpbnRrLm8KK29iai0kKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQkrPSBzaF9iaW9zLm8KIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYi5vCiBvYmotJChDT05GSUdfU0hfQ1BVX0ZSRVEpCSs9IGNwdWZyZXEubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBzaF9rc3ltc18kKEJJVFMpLm8gbW9kdWxlLm8KQEAgLTM5LDYgKzQwLDcgQEAKIG9iai0kKENPTkZJR19EV0FSRl9VTldJTkRFUikJKz0gZHdhcmYubwogb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkrPSBwZXJmX2V2ZW50Lm8gcGVyZl9jYWxsY2hhaW4ubwogCitvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKQkJKz0gaHdfYnJlYWtwb2ludC5vCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QpCSs9IGxvY2FsdGltZXIubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IGQ5N2M4MDMuLjBlNDhiYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKQEAgLTE3LDUgKzE3LDcgQEAKIAogb2JqLSQoQ09ORklHX1NIX0FEQykJCSs9IGFkYy5vCiBvYmotJChDT05GSUdfU0hfQ0xLX0NQRykJKz0gY2xvY2stY3BnLm8KK29iai0kKENPTkZJR19TSF9GUFUpCQkrPSBmcHUubworb2JqLSQoQ09ORklHX1NIX0ZQVV9FTVUpCSs9IGZwdS5vCiAKIG9iai15CSs9IGlycS8gaW5pdC5vIGNsb2NrLm8gaHdibGsubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2FkYy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2FkYy5jCmluZGV4IGRhM2Q2ODcuLmQzMDc1NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9hZGMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvYWRjLmMKQEAgLTE4LDE5ICsxOCwxOSBAQAogCiAJb2ZmID0gKGNoYW5uZWwgJiAweDAzKSA8PCAyOwogCi0JY3NyID0gY3RybF9pbmIoQURDU1IpOworCWNzciA9IF9fcmF3X3JlYWRiKEFEQ1NSKTsKIAljc3IgPSBjaGFubmVsIHwgQURDU1JfQURTVCB8IEFEQ1NSX0NLUzsKLQljdHJsX291dGIoY3NyLCBBRENTUik7CisJX19yYXdfd3JpdGViKGNzciwgQURDU1IpOwogCiAJZG8gewotCQljc3IgPSBjdHJsX2luYihBRENTUik7CisJCWNzciA9IF9fcmF3X3JlYWRiKEFEQ1NSKTsKIAl9IHdoaWxlICgoY3NyICYgQURDU1JfQURGKSA9PSAwKTsKIAogCWNzciAmPSB+KEFEQ1NSX0FERiB8IEFEQ1NSX0FEU1QpOwotCWN0cmxfb3V0Yihjc3IsIEFEQ1NSKTsKKwlfX3Jhd193cml0ZWIoY3NyLCBBRENTUik7CiAKLQlyZXR1cm4gKCgoY3RybF9pbmIoQUREUkFIICsgb2ZmKSA8PCA4KSB8Ci0JCWN0cmxfaW5iKEFERFJBTCArIG9mZikpID4+IDYpOworCXJldHVybiAoKChfX3Jhd19yZWFkYihBRERSQUggKyBvZmYpIDw8IDgpIHwKKwkJX19yYXdfcmVhZGIoQUREUkFMICsgb2ZmKSkgPj4gNik7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWRjX3NpbmdsZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKaW5kZXggNmRmZTJjYy4uZWVkNWVhZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYwpAQCAtMTQ5LDcgKzE0OSw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2Nsa19kaXY0X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0Jc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqdGFibGUgPSBjbGstPnByaXY7CisJc3RydWN0IGNsa19kaXY0X3RhYmxlICpkNHQgPSBjbGstPnByaXY7CisJc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqdGFibGUgPSBkNHQtPmRpdl9tdWx0X3RhYmxlOwogCXVuc2lnbmVkIGludCBpZHg7CiAKIAljbGtfcmF0ZV90YWJsZV9idWlsZChjbGssIGNsay0+ZnJlcV90YWJsZSwgdGFibGUtPm5yX2Rpdmlzb3JzLApAQCAtMTYwLDE3ICsxNjEsOTAgQEAKIAlyZXR1cm4gY2xrLT5mcmVxX3RhYmxlW2lkeF0uZnJlcXVlbmN5OwogfQogCitzdGF0aWMgaW50IHNoX2Nsa19kaXY0X3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJc3RydWN0IGNsa19kaXY0X3RhYmxlICpkNHQgPSBjbGstPnByaXY7CisJc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqdGFibGUgPSBkNHQtPmRpdl9tdWx0X3RhYmxlOworCXUzMiB2YWx1ZTsKKwlpbnQgcmV0OworCisJaWYgKCFzdHJjbXAoInBsbF9jbGsiLCBwYXJlbnQtPm5hbWUpKQorCQl2YWx1ZSA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgJiB+KDEgPDwgNyk7CisJZWxzZQorCQl2YWx1ZSA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgfCAoMSA8PCA3KTsKKworCXJldCA9IGNsa19yZXBhcmVudChjbGssIHBhcmVudCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlfX3Jhd193cml0ZWwodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwkvKiBSZWJpdWxkIHRoZSBmcmVxdWVuY3kgdGFibGUgKi8KKwljbGtfcmF0ZV90YWJsZV9idWlsZChjbGssIGNsay0+ZnJlcV90YWJsZSwgdGFibGUtPm5yX2Rpdmlzb3JzLAorCQkJICAgICB0YWJsZSwgJmNsay0+YXJjaF9mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9jbGtfZGl2NF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSwgaW50IGFsZ29faWQpCit7CisJc3RydWN0IGNsa19kaXY0X3RhYmxlICpkNHQgPSBjbGstPnByaXY7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgaWR4ID0gY2xrX3JhdGVfdGFibGVfZmluZChjbGssIGNsay0+ZnJlcV90YWJsZSwgcmF0ZSk7CisJaWYgKGlkeCA8IDApCisJCXJldHVybiBpZHg7CisKKwl2YWx1ZSA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJdmFsdWUgJj0gfigweGYgPDwgY2xrLT5lbmFibGVfYml0KTsKKwl2YWx1ZSB8PSAoaWR4IDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOworCisJaWYgKGQ0dC0+a2ljaykKKwkJZDR0LT5raWNrKGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9jbGtfZGl2NF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpICYgfigxIDw8IDgpLCBjbGstPmVuYWJsZV9yZWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaF9jbGtfZGl2NF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSB8ICgxIDw8IDgpLCBjbGstPmVuYWJsZV9yZWcpOworfQorCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2hfY2xrX2RpdjRfY2xrX29wcyA9IHsKIAkucmVjYWxjCQk9IHNoX2Nsa19kaXY0X3JlY2FsYywKKwkuc2V0X3JhdGUJPSBzaF9jbGtfZGl2NF9zZXRfcmF0ZSwKIAkucm91bmRfcmF0ZQk9IHNoX2Nsa19kaXZfcm91bmRfcmF0ZSwKIH07CiAKLWludCBfX2luaXQgc2hfY2xrX2RpdjRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAotCQkJCXN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlKQorc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoX2Nsa19kaXY0X2VuYWJsZV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gc2hfY2xrX2RpdjRfcmVjYWxjLAorCS5zZXRfcmF0ZQk9IHNoX2Nsa19kaXY0X3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gc2hfY2xrX2Rpdl9yb3VuZF9yYXRlLAorCS5lbmFibGUJCT0gc2hfY2xrX2RpdjRfZW5hYmxlLAorCS5kaXNhYmxlCT0gc2hfY2xrX2RpdjRfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaF9jbGtfZGl2NF9yZXBhcmVudF9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gc2hfY2xrX2RpdjRfcmVjYWxjLAorCS5zZXRfcmF0ZQk9IHNoX2Nsa19kaXY0X3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gc2hfY2xrX2Rpdl9yb3VuZF9yYXRlLAorCS5lbmFibGUJCT0gc2hfY2xrX2RpdjRfZW5hYmxlLAorCS5kaXNhYmxlCT0gc2hfY2xrX2RpdjRfZGlzYWJsZSwKKwkuc2V0X3BhcmVudAk9IHNoX2Nsa19kaXY0X3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9jbGtfZGl2NF9yZWdpc3Rlcl9vcHMoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSwgc3RydWN0IGNsa19vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgY2xrICpjbGtwOwogCXZvaWQgKmZyZXFfdGFibGU7Ci0JaW50IG5yX2RpdnMgPSB0YWJsZS0+bnJfZGl2aXNvcnM7CisJaW50IG5yX2RpdnMgPSB0YWJsZS0+ZGl2X211bHRfdGFibGUtPm5yX2Rpdmlzb3JzOwogCWludCBmcmVxX3RhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgazsKQEAgLTE4NSw3ICsyNTksNyBAQAogCWZvciAoayA9IDA7ICFyZXQgJiYgKGsgPCBucik7IGsrKykgewogCQljbGtwID0gY2xrcyArIGs7CiAKLQkJY2xrcC0+b3BzID0gJnNoX2Nsa19kaXY0X2Nsa19vcHM7CisJCWNsa3AtPm9wcyA9IG9wczsKIAkJY2xrcC0+aWQgPSAtMTsKIAkJY2xrcC0+cHJpdiA9IHRhYmxlOwogCkBAIC0xOTgsNiArMjcyLDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IF9faW5pdCBzaF9jbGtfZGl2NF9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCisJCQkJc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSkKK3sKKwlyZXR1cm4gc2hfY2xrX2RpdjRfcmVnaXN0ZXJfb3BzKGNsa3MsIG5yLCB0YWJsZSwgJnNoX2Nsa19kaXY0X2Nsa19vcHMpOworfQorCitpbnQgX19pbml0IHNoX2Nsa19kaXY0X2VuYWJsZV9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCisJCQkJc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSkKK3sKKwlyZXR1cm4gc2hfY2xrX2RpdjRfcmVnaXN0ZXJfb3BzKGNsa3MsIG5yLCB0YWJsZSwKKwkJCQkJJnNoX2Nsa19kaXY0X2VuYWJsZV9jbGtfb3BzKTsKK30KKworaW50IF9faW5pdCBzaF9jbGtfZGl2NF9yZXBhcmVudF9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCisJCQkJc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSkKK3sKKwlyZXR1cm4gc2hfY2xrX2RpdjRfcmVnaXN0ZXJfb3BzKGNsa3MsIG5yLCB0YWJsZSwKKwkJCQkJJnNoX2Nsa19kaXY0X3JlcGFyZW50X2Nsa19vcHMpOworfQorCiAjaWZkZWYgQ09ORklHX1NIX0NMS19DUEdfTEVHQUNZCiBzdGF0aWMgc3RydWN0IGNsayBtYXN0ZXJfY2xrID0gewogCS5uYW1lCQk9ICJtYXN0ZXJfY2xrIiwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9mcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDU5ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2ZwdS5jCkBAIC0wLDAgKzEsODQgQEAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisKK2ludCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAodHNrX3VzZWRfbWF0aCh0c2spKSB7CisJCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSAmJiB0c2sgPT0gY3VycmVudCkKKwkJCXVubGF6eV9mcHUodHNrLCB0YXNrX3B0X3JlZ3ModHNrKSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTWVtb3J5IGFsbG9jYXRpb24gYXQgdGhlIGZpcnN0IHVzYWdlIG9mIHRoZSBGUFUgYW5kIG90aGVyIHN0YXRlLgorCSAqLworCWlmICghdHNrLT50aHJlYWQueHN0YXRlKSB7CisJCXRzay0+dGhyZWFkLnhzdGF0ZSA9IGttZW1fY2FjaGVfYWxsb2ModGFza194c3RhdGVfY2FjaGVwLAorCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghdHNrLT50aHJlYWQueHN0YXRlKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgeworCQlzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0ICpmcCA9ICZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHU7CisJCW1lbXNldChmcCwgMCwgeHN0YXRlX3NpemUpOworCQlmcC0+ZnBzY3IgPSBGUFNDUl9JTklUOworCX0gZWxzZSB7CisJCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZwID0gJnRzay0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdTsKKwkJbWVtc2V0KGZwLCAwLCB4c3RhdGVfc2l6ZSk7CisJCWZwLT5mcHNjciA9IEZQU0NSX0lOSVQ7CisJfQorCisJc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRzayk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfU0hfRlBVCit2b2lkIF9fZnB1X3N0YXRlX3Jlc3RvcmUodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKKwlyZXN0b3JlX2ZwdSh0c2spOworCisJdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsKKwl0c2stPmZwdV9jb3VudGVyKys7Cit9CisKK3ZvaWQgZnB1X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJaWYgKHVubGlrZWx5KCF1c2VyX21vZGUocmVncykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBGUFUgaXMgdXNlZCBpbiBrZXJuZWwgbW9kZS5cbiIpOworCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghdHNrX3VzZWRfbWF0aCh0c2spKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJLyoKKwkJICogZG9lcyBhIHNsYWIgYWxsb2Mgd2hpY2ggY2FuIHNsZWVwCisJCSAqLworCQlpZiAoaW5pdF9mcHUodHNrKSkgeworCQkJLyoKKwkJCSAqIHJhbiBvdXQgb2YgbWVtb3J5IQorCQkJICovCisJCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOworCQkJcmV0dXJuOworCQl9CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJfQorCisJZ3JhYl9mcHUocmVncyk7CisKKwlfX2ZwdV9zdGF0ZV9yZXN0b3JlKCk7Cit9CisKK0JVSUxEX1RSQVBfSEFORExFUihmcHVfc3RhdGVfcmVzdG9yZSkKK3sKKwlUUkFQX0hBTkRMRVJfREVDTDsKKworCWZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpOworfQorI2VuZGlmIC8qIENPTkZJR19TSF9GUFUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jCmluZGV4IDg5YjRiNzYuLmM3MzY0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYwpAQCAtMjQsMjIgKzI0LDMyIEBACiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKLSNpbmNsdWRlIDxhc20vdWJjLmg+CisjaW5jbHVkZSA8YXNtL3NoX2Jpb3MuaD4KKworI2lmZGVmIENPTkZJR19TSF9GUFUKKyNkZWZpbmUgY3B1X2hhc19mcHUJMQorI2Vsc2UKKyNkZWZpbmUgY3B1X2hhc19mcHUJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisjZGVmaW5lIGNwdV9oYXNfZHNwCTEKKyNlbHNlCisjZGVmaW5lIGNwdV9oYXNfZHNwCTAKICNlbmRpZgogCiAvKgogICogR2VuZXJpYyB3cmFwcGVyIGZvciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGRpc2FibGUgb24tY2hpcAogICogcGVyaXBoZXJhbHMgKG5vZnB1LCBub2RzcCwgYW5kIHNvIGZvcnRoKS4KICAqLwotI2RlZmluZSBvbmNoaXBfc2V0dXAoeCkJCQkJXAotc3RhdGljIGludCB4IyNfZGlzYWJsZWQgX19pbml0ZGF0YSA9IDA7CQlcCi0JCQkJCQlcCi1zdGF0aWMgaW50IF9faW5pdCB4IyNfc2V0dXAoY2hhciAqb3B0cykJCVwKLXsJCQkJCQlcCi0JeCMjX2Rpc2FibGVkID0gMTsJCQlcCi0JcmV0dXJuIDE7CQkJCVwKLX0JCQkJCQlcCisjZGVmaW5lIG9uY2hpcF9zZXR1cCh4KQkJCQkJXAorc3RhdGljIGludCB4IyNfZGlzYWJsZWQgX19pbml0ZGF0YSA9ICFjcHVfaGFzXyMjeDsJXAorCQkJCQkJCVwKK3N0YXRpYyBpbnQgX19pbml0IHgjI19zZXR1cChjaGFyICpvcHRzKQkJCVwKK3sJCQkJCQkJXAorCXgjI19kaXNhYmxlZCA9IDE7CQkJCVwKKwlyZXR1cm4gMTsJCQkJCVwKK30JCQkJCQkJXAogX19zZXR1cCgibm8iIF9fc3RyaW5naWZ5KHgpLCB4IyNfc2V0dXApOwogCiBvbmNoaXBfc2V0dXAoZnB1KTsKQEAgLTUyLDEwICs2MiwxMCBAQAogc3RhdGljIHZvaWQgX19pbml0IHNwZWN1bGF0aXZlX2V4ZWN1dGlvbl9pbml0KHZvaWQpCiB7CiAJLyogQ2xlYXIgUkFCRCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChDUFVPUE0pICYgfkNQVU9QTV9SQUJELCBDUFVPUE0pOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChDUFVPUE0pICYgfkNQVU9QTV9SQUJELCBDUFVPUE0pOwogCiAJLyogRmx1c2ggdGhlIHVwZGF0ZSAqLwotCSh2b2lkKWN0cmxfaW5sKENQVU9QTSk7CisJKHZvaWQpX19yYXdfcmVhZGwoQ1BVT1BNKTsKIAljdHJsX2JhcnJpZXIoKTsKIH0KICNlbHNlCkBAIC04OSw3ICs5OSw3IEBACiAjZW5kaWYKIAogLyogMm5kLWxldmVsIGNhY2hlIGluaXQgKi8KLXZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBsMl9jYWNoZV9pbml0KHZvaWQpCit2b2lkIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkgbDJfY2FjaGVfaW5pdCh2b2lkKQogewogfQogCkBAIC05NywxMiArMTA3LDEyIEBACiAgKiBHZW5lcmljIGZpcnN0LWxldmVsIGNhY2hlIGluaXQKICAqLwogI2lmZGVmIENPTkZJR19TVVBFUkgzMgotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgY2FjaGVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgY2FjaGVfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY2NyLCBmbGFnczsKIAogCWp1bXBfdG9fdW5jYWNoZWQoKTsKLQljY3IgPSBjdHJsX2lubChDQ1IpOworCWNjciA9IF9fcmF3X3JlYWRsKENDUik7CiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBjYWNoZSBpcyBlbmFibGVkIG9yIG5vdCAtIGEKQEAgLTE0Niw3ICsxNTYsNyBAQAogCQkJZm9yIChhZGRyID0gYWRkcnN0YXJ0OwogCQkJICAgICBhZGRyIDwgYWRkcnN0YXJ0ICsgd2F5c2l6ZTsKIAkJCSAgICAgYWRkciArPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5saW5lc3opCi0JCQkJY3RybF9vdXRsKDAsIGFkZHIpOworCQkJCV9fcmF3X3dyaXRlbCgwLCBhZGRyKTsKIAogCQkJYWRkcnN0YXJ0ICs9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyOwogCQl9IHdoaWxlICgtLXdheXMpOwpAQCAtMTc5LDcgKzE4OSw3IEBACiAKIAlsMl9jYWNoZV9pbml0KCk7CiAKLQljdHJsX291dGwoZmxhZ3MsIENDUik7CisJX19yYXdfd3JpdGVsKGZsYWdzLCBDQ1IpOwogCWJhY2tfdG9fY2FjaGVkKCk7CiB9CiAjZWxzZQpAQCAtMjA3LDYgKzIxNywxOCBAQAogCQlsMl9jYWNoZV9zaGFwZSA9IC0xOyAvKiBObyBTLWNhY2hlICovCiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBmcHVfaW5pdCh2b2lkKQoreworCS8qIERpc2FibGUgdGhlIEZQVSAqLworCWlmIChmcHVfZGlzYWJsZWQgJiYgKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpIHsKKwkJcHJpbnRrKCJGUFUgRGlzYWJsZWRcbiIpOworCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0ZQVTsKKwl9CisKKwlkaXNhYmxlX2ZwdSgpOworCWNsZWFyX3VzZWRfbWF0aCgpOworfQorCiAjaWZkZWYgQ09ORklHX1NIX0RTUAogc3RhdGljIHZvaWQgX19pbml0IHJlbGVhc2VfZHNwKHZvaWQpCiB7CkBAIC0yNDQsMjggKzI2NiwzNSBAQAogCWlmIChzciAmIFNSX0RTUCkKIAkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0RTUDsKIAorCS8qIERpc2FibGUgdGhlIERTUCAqLworCWlmIChkc3BfZGlzYWJsZWQgJiYgKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0RTUCkpIHsKKwkJcHJpbnRrKCJEU1AgRGlzYWJsZWRcbiIpOworCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0RTUDsKKwl9CisKIAkvKiBOb3cgdGhhdCB3ZSd2ZSBkZXRlcm1pbmVkIHRoZSBEU1Agc3RhdHVzLCBjbGVhciB0aGUgRFNQIGJpdC4gKi8KIAlyZWxlYXNlX2RzcCgpOwogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgZHNwX2luaXQodm9pZCkgeyB9CiAjZW5kaWYgLyogQ09ORklHX1NIX0RTUCAqLwogCiAvKioKICAqIHNoX2NwdV9pbml0CiAgKgotICogVGhpcyBpcyBvdXIgaW5pdGlhbCBlbnRyeSBwb2ludCBmb3IgZWFjaCBDUFUsIGFuZCBpcyBpbnZva2VkIG9uIHRoZSBib290Ci0gKiBDUFUgcHJpb3IgdG8gY2FsbGluZyBzdGFydF9rZXJuZWwoKS4gRm9yIFNNUCwgYSBjb21iaW5hdGlvbiBvZiB0aGlzIGFuZAotICogc3RhcnRfc2Vjb25kYXJ5KCkgd2lsbCBicmluZyB1cCBlYWNoIHByb2Nlc3NvciB0byBhIHJlYWR5IHN0YXRlIHByaW9yCi0gKiB0byBoYW5kIGZvcmtpbmcgdGhlIGlkbGUgbG9vcC4KKyAqIFRoaXMgaXMgb3VyIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGVhY2ggQ1BVLCBhbmQgaXMgaW52b2tlZCBvbiB0aGUKKyAqIGJvb3QgQ1BVIHByaW9yIHRvIGNhbGxpbmcgc3RhcnRfa2VybmVsKCkuIEZvciBTTVAsIGEgY29tYmluYXRpb24gb2YKKyAqIHRoaXMgYW5kIHN0YXJ0X3NlY29uZGFyeSgpIHdpbGwgYnJpbmcgdXAgZWFjaCBwcm9jZXNzb3IgdG8gYSByZWFkeQorICogc3RhdGUgcHJpb3IgdG8gaGFuZCBmb3JraW5nIHRoZSBpZGxlIGxvb3AuCiAgKgotICogV2UgZG8gYWxsIG9mIHRoZSBiYXNpYyBwcm9jZXNzb3IgaW5pdCBoZXJlLCBpbmNsdWRpbmcgc2V0dGluZyB1cCB0aGUKLSAqIGNhY2hlcywgRlBVLCBEU1AsIGtpY2tpbmcgdGhlIFVCQywgZXRjLiBCeSB0aGUgdGltZSBzdGFydF9rZXJuZWwoKSBpcwotICogaGl0IChhbmQgc3Vic2VxdWVudGx5IHBsYXRmb3JtX3NldHVwKCkpIHRoaW5ncyBsaWtlIGRldGVybWluaW5nIHRoZQotICogQ1BVIHN1YnR5cGUgYW5kIGluaXRpYWwgY29uZmlndXJhdGlvbiB3aWxsIGFsbCBiZSBkb25lLgorICogV2UgZG8gYWxsIG9mIHRoZSBiYXNpYyBwcm9jZXNzb3IgaW5pdCBoZXJlLCBpbmNsdWRpbmcgc2V0dGluZyB1cAorICogdGhlIGNhY2hlcywgRlBVLCBEU1AsIGV0Yy4gQnkgdGhlIHRpbWUgc3RhcnRfa2VybmVsKCkgaXMgaGl0IChhbmQKKyAqIHN1YnNlcXVlbnRseSBwbGF0Zm9ybV9zZXR1cCgpKSB0aGluZ3MgbGlrZSBkZXRlcm1pbmluZyB0aGUgQ1BVCisgKiBzdWJ0eXBlIGFuZCBpbml0aWFsIGNvbmZpZ3VyYXRpb24gd2lsbCBhbGwgYmUgZG9uZS4KICAqCiAgKiBFYWNoIHByb2Nlc3NvciBmYW1pbHkgaXMgc3RpbGwgcmVzcG9uc2libGUgZm9yIGRvaW5nIGl0cyBvd24gcHJvYmluZwogICogYW5kIGNhY2hlIGNvbmZpZ3VyYXRpb24gaW4gZGV0ZWN0X2NwdV9hbmRfY2FjaGVfc3lzdGVtKCkuCiAgKi8KLQogYXNtbGlua2FnZSB2b2lkIF9faW5pdCBzaF9jcHVfaW5pdCh2b2lkKQogewogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0zMDIsMTggKzMzMSw4IEBACiAJCWRldGVjdF9jYWNoZV9zaGFwZSgpOwogCX0KIAotCS8qIERpc2FibGUgdGhlIEZQVSAqLwotCWlmIChmcHVfZGlzYWJsZWQpIHsKLQkJcHJpbnRrKCJGUFUgRGlzYWJsZWRcbiIpOwotCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0ZQVTsKLQl9Ci0KLQkvKiBGUFUgaW5pdGlhbGl6YXRpb24gKi8KLQlkaXNhYmxlX2ZwdSgpOwotCWlmICgoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkgewotCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsKLQkJY2xlYXJfdXNlZF9tYXRoKCk7Ci0JfQorCWZwdV9pbml0KCk7CisJZHNwX2luaXQoKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgcGVyLUNQVSBBU0lEIGNhY2hlIHZlcnkgZWFybHksIHNpbmNlIHRoZQpAQCAtMzIxLDE4ICszNDAsMjQgQEAKIAkgKi8KIAljdXJyZW50X2NwdV9kYXRhLmFzaWRfY2FjaGUgPSBOT19DT05URVhUOwogCi0jaWZkZWYgQ09ORklHX1NIX0RTUAotCS8qIFByb2JlIGZvciBEU1AgKi8KLQlkc3BfaW5pdCgpOwotCi0JLyogRGlzYWJsZSB0aGUgRFNQICovCi0JaWYgKGRzcF9kaXNhYmxlZCkgewotCQlwcmludGsoIkRTUCBEaXNhYmxlZFxuIik7Ci0JCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJj0gfkNQVV9IQVNfRFNQOwotCQlyZWxlYXNlX2RzcCgpOwotCX0KLSNlbmRpZgotCiAJc3BlY3VsYXRpdmVfZXhlY3V0aW9uX2luaXQoKTsKIAlleHBtYXNrX2luaXQoKTsKKworCS8qIERvIHRoZSByZXN0IG9mIHRoZSBib290IHByb2Nlc3NvciBzZXR1cCAqLworCWlmIChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApIHsKKwkJLyogU2F2ZSBvZmYgdGhlIEJJT1MgVkJSLCBpZiB0aGVyZSBpcyBvbmUgKi8KKwkJc2hfYmlvc192YnJfaW5pdCgpOworCisJCS8qCisJCSAqIFNldHVwIFZCUiBmb3IgYm9vdCBDUFUuIFNlY29uZGFyeSBDUFVzIGRvIHRoaXMgdGhyb3VnaAorCQkgKiBzdGFydF9zZWNvbmRhcnkoKS4KKwkJICovCisJCXBlcl9jcHVfdHJhcF9pbml0KCk7CisKKwkJLyoKKwkJICogQm9vdCBwcm9jZXNzb3IgdG8gc2V0dXAgdGhlIEZQIGFuZCBleHRlbmRlZCBzdGF0ZQorCQkgKiBjb250ZXh0IGluZm8uCisJCSAqLworCQlpbml0X3RocmVhZF94c3RhdGUoKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKaW5kZXggMDZlN2UyOS4uOTZhMjM5NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJCWJpdG1hc2sgPSAxIDw8IChpcnEgLSAzMik7CiAJfQogCi0JY3RybF9vdXRsKGJpdG1hc2ssIHJlZyk7CisJX19yYXdfd3JpdGVsKGJpdG1hc2ssIHJlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfaW50Y19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTEzOSw3ICsxMzksNyBAQAogCQliaXRtYXNrID0gMSA8PCAoaXJxIC0gMzIpOwogCX0KIAotCWN0cmxfb3V0bChiaXRtYXNrLCByZWcpOworCV9fcmF3X3dyaXRlbChiaXRtYXNrLCByZWcpOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfaW50Yyh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTcwLDExICsxNzAsMTEgQEAKIAogCiAJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBhbmQgc2V0IGFsbCBwcmlvcml0aWVzIHRvIDAgdG8gYXZvaWQgdHJvdWJsZSAqLwotCWN0cmxfb3V0bCgtMSwgSU5UQ19JTlREU0JfMCk7Ci0JY3RybF9vdXRsKC0xLCBJTlRDX0lOVERTQl8xKTsKKwlfX3Jhd193cml0ZWwoLTEsIElOVENfSU5URFNCXzApOworCV9fcmF3X3dyaXRlbCgtMSwgSU5UQ19JTlREU0JfMSk7CiAKIAlmb3IgKHJlZyA9IElOVENfSU5UUFJJXzAsIGkgPSAwOyBpIDwgSU5UQ19JTlRQUklfUFJFR1M7IGkrKywgcmVnICs9IDgpCi0JCWN0cmxfb3V0bCggTk9fUFJJT1JJVFksIHJlZyk7CisJCV9fcmF3X3dyaXRlbCggTk9fUFJJT1JJVFksIHJlZyk7CiAKIAogI2lmZGVmIENPTkZJR19TSF9DQVlNQU4KQEAgLTE5OSw3ICsxOTksNyBAQAogCQkJcmVnID0gSU5UQ19JQ1JfU0VUOwogCQkJaSA9IElSUV9JUkwwOwogCQl9Ci0JCWN0cmxfb3V0bChJTlRDX0lDUl9JUkxNLCByZWcpOworCQlfX3Jhd193cml0ZWwoSU5UQ19JQ1JfSVJMTSwgcmVnKTsKIAogCQkvKiBTZXQgaW50ZXJydXB0IHByaW9yaXRpZXMgYWNjb3JkaW5nIHRvIHBsYXRmb3JtIGRlc2NyaXB0aW9uICovCiAJCWZvciAoZGF0YSA9IDAsIHJlZyA9IElOVENfSU5UUFJJXzA7IGkgPCBOUl9JTlRDX0lSUVM7IGkrKykgewpAQCAtMjA3LDcgKzIwNyw3IEBACiAJCQkJKChpICUgSU5UQ19JTlRQUklfUFBSRUcpICogNCk7CiAJCQlpZiAoKGkgJSBJTlRDX0lOVFBSSV9QUFJFRykgPT0gKElOVENfSU5UUFJJX1BQUkVHIC0gMSkpIHsKIAkJCQkvKiBVcG9uIHRoZSA3dGgsIHNldCBQcmlvcml0eSBSZWdpc3RlciAqLwotCQkJCWN0cmxfb3V0bChkYXRhLCByZWcpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCByZWcpOwogCQkJCWRhdGEgPSAwOwogCQkJCXJlZyArPSA4OwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvY2xvY2stc2g3NjE5LmMKaW5kZXggNGZlODYzMS4uMGM5ZjI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2Nsb2NrLXNoNzYxOS5jCkBAIC0zMSw3ICszMSw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IFBMTDIgKiBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDddOworCWNsay0+cmF0ZSAqPSBQTEwyICogcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzYxOV9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQwLDcgKzQwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJFUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUkVRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTAsNyArNTAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiA3XTsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NjE5X2J1c19jbGtfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYwppbmRleCA3ODE0Yzc2Li5iMjYyNjRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYwpAQCAtMzQsNyArMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiAxMDAwMDAwMCAqIFBMTDIgKiBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CisJcmV0dXJuIDEwMDAwMDAwICogUExMMiAqIHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgMHgwMDA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzIwMV9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQzLDcgKzQzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJFUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUkVRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTMsNyArNTMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC02Myw3ICs2Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2ludyhGUkVRQ1IpID4+IDQpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDQpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYwppbmRleCA5NDA5ODY5Li43ZTc1ZDhmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYwpAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwM10gKiBQTEwyIDsKKwljbGstPnJhdGUgKj0gcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDNdICogUExMMiA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDNfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTU4LDcgKzU4LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJFUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUkVRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4LTJdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jCmluZGV4IGMyMjY4YmQuLmIyN2E1ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IFBMTDIgKiBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CisJY2xrLT5yYXRlICo9IFBMTDIgKiBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDZfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00Myw3ICs0Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUzLDcgKzUzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBsbDFyYXRlWyhjdHJsX2ludyhGUkVRQ1IpID4+IDgpICYgMHgwMDA3XTsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDZfYnVzX2Nsa19vcHMgPSB7CkBAIC02Miw3ICs2Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvZnB1LmMKaW5kZXggZDM5NWNlNS4uNDg4ZDI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvZnB1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvZnB1LmMKQEAgLTI2LDggKzI2LDcgQEAKIC8qCiAgKiBTYXZlIEZQVSByZWdpc3RlcnMgb250byB0YXNrIHN0cnVjdHVyZS4KICAqLwotdm9pZAotc2F2ZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit2b2lkIHNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAKQEAgLTUyLDcgKzUxLDcgQEAKIAkJICAgICAiZm1vdi5zCWZyMCwgQC0lMFxuXHQiCiAJCSAgICAgImxkcwklMywgZnBzY3Jcblx0IgogCQkgICAgIDogIj1yIiAoZHVtbXkpCi0JCSAgICAgOiAiMCIgKChjaGFyICopKCZ0c2stPnRocmVhZC5mcHUuaGFyZC5zdGF0dXMpKSwKKwkJICAgICA6ICIwIiAoKGNoYXIgKikoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5zdGF0dXMpKSwKIAkJICAgICAgICJyIiAoRlBTQ1JfUkNIRyksCiAJCSAgICAgICAiciIgKEZQU0NSX0lOSVQpCiAJCSAgICAgOiAibWVtb3J5Iik7CkBAIC02MCw4ICs1OSw3IEBACiAJZGlzYWJsZV9mcHUoKTsKIH0KIAotc3RhdGljIHZvaWQKLXJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQordm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAl1bnNpZ25lZCBsb25nIGR1bW15OwogCkBAIC04NSw0NSArODMsMTIgQEAKIAkJICAgICAibGRzLmwJQCUwKywgZnBzY3Jcblx0IgogCQkgICAgICJsZHMubAlAJTArLCBmcHVsXG5cdCIKIAkJICAgICA6ICI9ciIgKGR1bW15KQotCQkgICAgIDogIjAiICgmdHNrLT50aHJlYWQuZnB1KSwgInIiIChGUFNDUl9SQ0hHKQorCQkgICAgIDogIjAiICh0c2stPnRocmVhZC54c3RhdGUpLCAiciIgKEZQU0NSX1JDSEcpCiAJCSAgICAgOiAibWVtb3J5Iik7CiAJZGlzYWJsZV9mcHUoKTsKIH0KIAogLyoKLSAqIExvYWQgdGhlIEZQVSB3aXRoIHNpZ25hbGxpbmcgTkFOUy4gIFRoaXMgYml0IHBhdHRlcm4gd2UncmUgdXNpbmcKLSAqIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBubyBtYXR0ZXIgd2V0aGVyIGNvbnNpZGVyZWQgYXMgc2luZ2xlIG9yIGFzCi0gKiBkb3VibGUgcHJlY2lzc2lvbiByZXByZXNlbnRzIHNpZ25hbGluZyBOQU5TLgotICovCi0KLXN0YXRpYyB2b2lkCi1mcHVfaW5pdCh2b2lkKQotewotCWVuYWJsZV9mcHUoKTsKLQlhc20gdm9sYXRpbGUoImxkcwklMCwgZnB1bFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIwXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjFcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyMlxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIzXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjRcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyNVxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI2XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjdcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyOFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI5XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjEwXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjExXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjEyXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjEzXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjE0XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjE1XG5cdCIKLQkJICAgICAibGRzCSUyLCBmcHNjclxuXHQiCi0JCSAgICAgOiAvKiBubyBvdXRwdXQgKi8KLQkJICAgICA6ICJyIiAoMCksICJyIiAoRlBTQ1JfUkNIRyksICJyIiAoRlBTQ1JfSU5JVCkpOwotCWRpc2FibGVfZnB1KCk7Ci19Ci0KLS8qCiAgKglFbXVsYXRlIGFyaXRobWV0aWMgb3BzIG9uIGRlbm9ybWFsaXplZCBudW1iZXIgZm9yIHNvbWUgRlBVIGluc25zLgogICovCiAKQEAgLTQ5MCw5ICs0NTUsOSBAQAogCWlmICgoZmluc24gJiAweGYxZmYpID09IDB4ZjBhZCkgeyAvKiBmY252c2QgKi8KIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9GUFVfRVJST1IpKSB7CisJCWlmICgodHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKSkgewogCQkJLyogRlBVIGVycm9yICovCi0JCQlkZW5vcm1hbF90b19kb3VibGUgKCZ0c2stPnRocmVhZC5mcHUuaGFyZCwKKwkJCWRlbm9ybWFsX3RvX2RvdWJsZSAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwKIAkJCQkJICAgIChmaW5zbiA+PiA4KSAmIDB4Zik7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CkBAIC01MDcsOSArNDcyLDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmICgxIDw8IDE5KTsKIAogCQlpZiAoKGZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKQpAQCAtNTE5LDE1ICs0ODQsMTUgQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKi8KIAkJCWxseCA9ICgobG9uZyBsb25nKSBoeCA8PCAzMikKLQkJCSAgICAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbisxXTsKKwkJCSAgICAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24rMV07CiAJCQlsbHkgPSAoKGxvbmcgbG9uZykgaHkgPDwgMzIpCi0JCQkgICAgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20rMV07CisJCQkgICAgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttKzFdOwogCQkJaWYgKChoeCAmIDB4N2ZmZmZmZmYpID49IDB4MDAxMDAwMDApCiAJCQkJbGx4ID0gZGVub3JtYWxfbXVsZChsbHksIGxseCk7CiAJCQllbHNlCiAJCQkJbGx4ID0gZGVub3JtYWxfbXVsZChsbHgsIGxseSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gbGx4ID4+IDMyOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuKzFdID0gbGx4ICYgMHhmZmZmZmZmZjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gbGx4ID4+IDMyOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbisxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKQogCQkgICAgICYmICghcHJlYyAmJiAoKGh4ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwCiAJCQkJICAgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKQEAgLTUzNiw3ICs1MDEsNyBAQAogCQkJCWh4ID0gZGVub3JtYWxfbXVsZihoeSwgaHgpOwogCQkJZWxzZQogCQkJCWh4ID0gZGVub3JtYWxfbXVsZihoeCwgaHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGh4OworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBoeDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKIApAQCAtNTUwLDkgKzUxNSw5IEBACiAKIAkJbiA9IChmaW5zbiA+PiA4KSAmIDB4ZjsKIAkJbSA9IChmaW5zbiA+PiA0KSAmIDB4ZjsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dOwotCQloeSA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV07Ci0JCWZwc2NyID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3I7CisJCWh4ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl07CisJCWh5ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV07CisJCWZwc2NyID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyOwogCQlwcmVjID0gZnBzY3IgJiAoMSA8PCAxOSk7CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKQEAgLTU2MiwxNSArNTI3LDE1IEBACiAKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZykgaHggPDwgMzIpCi0JCQkgICAgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24rMV07CisJCQkgICAgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuKzFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpIGh5IDw8IDMyKQotCQkJICAgICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttKzFdOworCQkJICAgICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSsxXTsKIAkJCWlmICgoZmluc24gJiAweGYwMGYpID09IDB4ZjAwMCkKIAkJCQlsbHggPSBkZW5vcm1hbF9hZGRkKGxseCwgbGx5KTsKIAkJCWVsc2UKIAkJCQlsbHggPSBkZW5vcm1hbF9hZGRkKGxseCwgbGx5IF4gKDFMTCA8PCA2MykpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbisxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24rMV0gPSBsbHggJiAweGZmZmZmZmZmOwogCQl9IGVsc2UgaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKIAkJICAgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCSAgIHx8IChoeSAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMCkpKSB7CkBAIC01NzksNyArNTQ0LDcgQEAKIAkJCQloeCA9IGRlbm9ybWFsX2FkZGYoaHgsIGh5KTsKIAkJCWVsc2UKIAkJCQloeCA9IGRlbm9ybWFsX2FkZGYoaHgsIGh5IF4gMHg4MDAwMDAwMCk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC01OTcsNyArNTYyLDcgQEAKIAogCV9fdW5sYXp5X2ZwdSh0c2ssIHJlZ3MpOwogCWlmIChpZWVlX2ZwZV9oYW5kbGVyKHJlZ3MpKSB7Ci0JCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICY9CisJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciAmPQogCQkJfihGUFNDUl9DQVVTRV9NQVNLIHwgRlBTQ1JfRkxBR19NQVNLKTsKIAkJZ3JhYl9mcHUocmVncyk7CiAJCXJlc3RvcmVfZnB1KHRzayk7CkBAIC02MDcsMzMgKzU3MiwzIEBACiAKIAlmb3JjZV9zaWcoU0lHRlBFLCB0c2spOwogfQotCi12b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQotCWdyYWJfZnB1KHJlZ3MpOwotCWlmICh1bmxpa2VseSghdXNlcl9tb2RlKHJlZ3MpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkJVRzogRlBVIGlzIHVzZWQgaW4ga2VybmVsIG1vZGUuXG4iKTsKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobGlrZWx5KHVzZWRfbWF0aCgpKSkgewotCQkvKiBVc2luZyB0aGUgRlBVIGFnYWluLiAgKi8KLQkJcmVzdG9yZV9mcHUodHNrKTsKLQl9IGVsc2UJewotCQkvKiBGaXJzdCB0aW1lIEZQVSB1c2VyLiAgKi8KLQkJZnB1X2luaXQoKTsKLQkJc2V0X3VzZWRfbWF0aCgpOwotCX0KLQl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyB8PSBUU19VU0VERlBVOwotCXRzay0+ZnB1X2NvdW50ZXIrKzsKLX0KLQotQlVJTERfVFJBUF9IQU5ETEVSKGZwdV9zdGF0ZV9yZXN0b3JlKQotewotCVRSQVBfSEFORExFUl9ERUNMOwotCi0JZnB1X3N0YXRlX3Jlc3RvcmUocmVncyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDMuYwppbmRleCAyN2I4NzM4Li5iNzgzODRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2gzLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNTIsNyArNTIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCk7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzdGNfbXVsdGlwbGllcnNbaWR4XTsKQEAgLTY0LDcgKzY0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDQwMDApID4+IDEyKSB8ICgoZnJxY3IgJiAweDAwMGMpID4+IDIpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDUuYwppbmRleCAwY2E4ZjJjLi4wZWNlYTE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA1LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW53KEZSUUNSKSAmIDB4MDAwM107CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDNdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzA1X21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IGN0cmxfaW53KEZSUUNSKSAmIDB4MDAwMzsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDAzOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01MSw3ICs1MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDMwMCkgPj4gODsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDMwMCkgPj4gODsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzdGNfbXVsdGlwbGllcnNbaWR4XTsKIH0KIApAQCAtNjEsNyArNjEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgJiAweDAwMzApID4+IDQ7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMzApID4+IDQ7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jCmluZGV4IDRiZjc4ODcuLjZmOWZmOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDYuYwpAQCAtMjQsNyArMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDIwMDApID4+IDExKSB8IChmcnFjciAmIDB4MDAwMyk7CiAKIAljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC0zNiw3ICszNiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHg4MDAwKSA+PiAxMykgfCAoKGZycWNyICYgMHgwMDMwKSA+PiA0KTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHN0Y19tdWx0aXBsaWVyc1tpZHhdOwpAQCAtNjAsNyArNjAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4NDAwMCkgPj4gMTIpIHwgKChmcnFjciAmIDB4MDAwYykgPj4gMik7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jCmluZGV4IGU4NzQ5NTAuLmYzMDJiYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDkuYwpAQCAtMjQsNyArMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDIwMDApID4+IDExKSB8IChmcnFjciAmIDB4MDAwMyk7CiAKIAljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC0zNiw3ICszNiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoZnJxY3IgJiAweDAwODApID8KIAkJKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCkgOiAxOwogCkBAIC02MSw3ICs2MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHg0MDAwKSA+PiAxMikgfCAoKGZycWNyICYgMHgwMDBjKSA+PiAyKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEwLmMKaW5kZXggMDMwYTU4Yi4uMjlhODdkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMC5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IG1kX3RhYmxlW2N0cmxfaW53KEZSUUNSKSAmIDB4MDAwN107CisJY2xrLT5yYXRlICo9IG1kX3RhYmxlW19fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3MTBfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07CiB9CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwNzAwKSA+PiA4OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwNzAwKSA+PiA4OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMDcwKSA+PiA0OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDcwKSA+PiA0OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMi5jCmluZGV4IDY0MjhlZTYuLmIwZDBjNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTIuYwpAQCAtMjMsNyArMjMsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9IChmcnFjciAmIDB4MDMwMCkgPj4gODsKIAogCWNsay0+cmF0ZSAqPSBtdWx0aXBsaWVyc1tpZHhdOwpAQCAtMzUsNyArMzUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gZnJxY3IgJiAweDAwMDc7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXZpc29yc1tpZHhdOwpAQCAtNDcsNyArNDcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKGZycWNyICYgMHgwMDMwKSA+PiA0OwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZGl2aXNvcnNbaWR4XTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUwppbmRleCA0NjYxMGMzLi45OWI0ZDAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TCkBAIC00OSw3ICs0OSw3IEBACiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCSEgcmVzZXJ2ZWRfaW5zdHJ1Y3Rpb24gKGZpbGxlZCBieSB0cmFwX2luaXQpIC8qIDE4MCAqLwogCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIGlsbGVnYWxfc2xvdF9pbnN0cnVjdGlvbiAoZmlsbGVkIGJ5IHRyYXBfaW5pdCkgLyoxQTAqLwogCS5sb25nCW5taV90cmFwX2hhbmRsZXIJLyogMUMwICovCSEgQWxsb3cgdHJhcCB0byBkZWJ1Z2dlcgotCS5sb25nCWJyZWFrX3BvaW50X3RyYXAJLyogMUUwICovCisJLmxvbmcJYnJlYWtwb2ludF90cmFwX2hhbmRsZXIJLyogMUUwICovCiAKIAkvKgogCSAqIFBhZCB0aGUgcmVtYWluZGVyIG9mIHRoZSB0YWJsZSBvdXQsIGV4Y2VwdGlvbnMgcmVzaWRpbmcgaW4gZmFyCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMKaW5kZXggZjljN2RmNi4uMjk1ZWM0YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1pbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZGV0ZWN0X2NwdV9hbmRfY2FjaGVfc3lzdGVtKHZvaWQpCitpbnQgZGV0ZWN0X2NwdV9hbmRfY2FjaGVfc3lzdGVtKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyMCwgYWRkcjEsIGRhdGEwLCBkYXRhMSwgZGF0YTIsIGRhdGEzOwogCkBAIC0zMCwyMyArMzAsMjMgQEAKIAlhZGRyMSA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVkgKyAoMSA8PCAxMik7CiAKIAkvKiBGaXJzdCwgd3JpdGUgYmFjayAmIGludmFsaWRhdGUgKi8KLQlkYXRhMCAgPSBjdHJsX2lubChhZGRyMCk7Ci0JY3RybF9vdXRsKGRhdGEwJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIwKTsKLQlkYXRhMSAgPSBjdHJsX2lubChhZGRyMSk7Ci0JY3RybF9vdXRsKGRhdGExJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIxKTsKKwlkYXRhMCAgPSBfX3Jhd19yZWFkbChhZGRyMCk7CisJX19yYXdfd3JpdGVsKGRhdGEwJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIwKTsKKwlkYXRhMSAgPSBfX3Jhd19yZWFkbChhZGRyMSk7CisJX19yYXdfd3JpdGVsKGRhdGExJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIxKTsKIAogCS8qIE5leHQsIGNoZWNrIGlmIHRoZXJlJ3Mgc2hhZG93IG9yIG5vdCAqLwotCWRhdGEwID0gY3RybF9pbmwoYWRkcjApOworCWRhdGEwID0gX19yYXdfcmVhZGwoYWRkcjApOwogCWRhdGEwIF49IFNIX0NBQ0hFX1ZBTElEOwotCWN0cmxfb3V0bChkYXRhMCwgYWRkcjApOwotCWRhdGExID0gY3RybF9pbmwoYWRkcjEpOworCV9fcmF3X3dyaXRlbChkYXRhMCwgYWRkcjApOworCWRhdGExID0gX19yYXdfcmVhZGwoYWRkcjEpOwogCWRhdGEyID0gZGF0YTEgXiBTSF9DQUNIRV9WQUxJRDsKLQljdHJsX291dGwoZGF0YTIsIGFkZHIxKTsKLQlkYXRhMyA9IGN0cmxfaW5sKGFkZHIwKTsKKwlfX3Jhd193cml0ZWwoZGF0YTIsIGFkZHIxKTsKKwlkYXRhMyA9IF9fcmF3X3JlYWRsKGFkZHIwKTsKIAogCS8qIExhc3RseSwgaW52YWxpYXRlIHRoZW0uICovCi0JY3RybF9vdXRsKGRhdGEwJn5TSF9DQUNIRV9WQUxJRCwgYWRkcjApOwotCWN0cmxfb3V0bChkYXRhMiZ+U0hfQ0FDSEVfVkFMSUQsIGFkZHIxKTsKKwlfX3Jhd193cml0ZWwoZGF0YTAmflNIX0NBQ0hFX1ZBTElELCBhZGRyMCk7CisJX19yYXdfd3JpdGVsKGRhdGEyJn5TSF9DQUNIRV9WQUxJRCwgYWRkcjEpOwogCiAJYmFja190b19jYWNoZWQoKTsKIApAQCAtOTQsOSArOTQsOSBAQAogCQlib290X2NwdV9kYXRhLmRjYWNoZS53YXlfaW5jcgk9ICgxIDw8IDEzKTsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUuZW50cnlfbWFzawk9IDB4MWZmMDsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUuc2V0cwk9IDUxMjsKLQkJY3RybF9vdXRsKENDUl9DQUNIRV8zMktCLCBDQ1IzX1JFRyk7CisJCV9fcmF3X3dyaXRlbChDQ1JfQ0FDSEVfMzJLQiwgQ0NSM19SRUcpOwogI2Vsc2UKLQkJY3RybF9vdXRsKENDUl9DQUNIRV8xNktCLCBDQ1IzX1JFRyk7CisJCV9fcmF3X3dyaXRlbChDQ1JfQ0FDSEVfMTZLQiwgQ0NSM19SRUcpOwogI2VuZGlmCiAjZW5kaWYKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDMuYwppbmRleCBjOTg4NDY4Li41M2JlNzBiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2gzLmMKQEAgLTU4LDcgKzU4LDcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpCiB7CiAJaWYgKG1vZGUgPT0gSVJRX01PREVfSVJRKSB7Ci0JCWN0cmxfb3V0dyhjdHJsX2ludyhJTlRDX0lDUjEpICYgfklOVENfSUNSMV9JUlFMVkwsIElOVENfSUNSMSk7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJTlRDX0lDUjEpICYgfklOVENfSUNSMV9JUlFMVkwsIElOVENfSUNSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwppbmRleCAyMTQyMWUzLi42YjgwODUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwpAQCAtMjMsNyArMjMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbWlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IGN0cmxfaW5sKENQRzJfRlJRQ1IzKSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZGwoQ1BHMl9GUlFDUjMpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGZycWNyM19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZlbWlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChDUEcyX0ZSUUNSMykgPj4gMykgJiAweDAwMDc7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkbChDUEcyX0ZSUUNSMykgPj4gMykgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZnJxY3IzX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTkyLDcgKzkyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hvY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKENQRzJfRlJRQ1IzKSA+PiA2KSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWRsKENQRzJfRlJRQ1IzKSA+PiA2KSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtMTIyLDEwICsxMjIsMTAgQEAKIAogCXRtcCA9IGZycWNyM19sb29rdXAoY2xrLCByYXRlKTsKIAotCWZycWNyMyA9IGN0cmxfaW5sKENQRzJfRlJRQ1IzKTsKKwlmcnFjcjMgPSBfX3Jhd19yZWFkbChDUEcyX0ZSUUNSMyk7CiAJZnJxY3IzICY9IH4oMHgwMDA3IDw8IDYpOwogCWZycWNyMyB8PSB0bXAgPDwgNjsKLQljdHJsX291dGwoZnJxY3IzLCBDUEcyX0ZSUUNSMyk7CisJX19yYXdfd3JpdGVsKGZycWNyMywgQ1BHMl9GUlFDUjMpOwogCiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbdG1wXTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LmMKaW5kZXggNzMyOTRkOS4uNWFkZDc1YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tjdHJsX2ludyhGUlFDUikgJiAweDAwMDddOworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNF9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTM3LDcgKzM3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpID4+IDMpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpID4+IDMpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Nyw3ICs1Nyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSA+PiA2KSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSA+PiA2KSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKaW5kZXggZTk3ODU3YS4uNDQ3NDgyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCkBAIC04NSwxNCArODUsMTQgQEAKIAkJICAgICAgImZtb3YucwlmcjEsIEAtJTBcblx0IgogCQkgICAgICAiZm1vdi5zCWZyMCwgQC0lMFxuXHQiCiAJCSAgICAgICJsZHMJJTMsIGZwc2NyXG5cdCI6Ij1yIiAoZHVtbXkpCi0JCSAgICAgIDoiMCIoKGNoYXIgKikoJnRzay0+dGhyZWFkLmZwdS5oYXJkLnN0YXR1cykpLAorCQkgICAgICA6IjAiKChjaGFyICopKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuc3RhdHVzKSksCiAJCSAgICAgICJyIihGUFNDUl9SQ0hHKSwgInIiKEZQU0NSX0lOSVQpCiAJCSAgICAgIDoibWVtb3J5Iik7CiAKIAlkaXNhYmxlX2ZwdSgpOwogfQogCi1zdGF0aWMgdm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3ZvaWQgcmVzdG9yZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJdW5zaWduZWQgbG9uZyBkdW1teTsKIApAQCAtMTM1LDYyICsxMzUsMTEgQEAKIAkJICAgICAgImxkcy5sCUAlMCssIGZwc2NyXG5cdCIKIAkJICAgICAgImxkcy5sCUAlMCssIGZwdWxcblx0IgogCQkgICAgICA6Ij1yIiAoZHVtbXkpCi0JCSAgICAgIDoiMCIoJnRzay0+dGhyZWFkLmZwdSksICJyIihGUFNDUl9SQ0hHKQorCQkgICAgICA6IjAiICh0c2stPnRocmVhZC54c3RhdGUpLCAiciIgKEZQU0NSX1JDSEcpCiAJCSAgICAgIDoibWVtb3J5Iik7CiAJZGlzYWJsZV9mcHUoKTsKIH0KIAotLyoKLSAqIExvYWQgdGhlIEZQVSB3aXRoIHNpZ25hbGxpbmcgTkFOUy4gIFRoaXMgYml0IHBhdHRlcm4gd2UncmUgdXNpbmcKLSAqIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBubyBtYXR0ZXIgd2V0aGVyIGNvbnNpZGVyZWQgYXMgc2luZ2xlIG9yIGFzCi0gKiBkb3VibGUgcHJlY2lzaW9uIHJlcHJlc2VudHMgc2lnbmFsaW5nIE5BTlMuCi0gKi8KLQotc3RhdGljIHZvaWQgZnB1X2luaXQodm9pZCkKLXsKLQllbmFibGVfZnB1KCk7Ci0JYXNtIHZvbGF0aWxlICgJImxkcwklMCwgZnB1bFxuXHQiCi0JCQkibGRzCSUxLCBmcHNjclxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjBcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjNcblx0IgotCQkJImZzdHMJZnB1bCwgZnI0XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjZcblx0IgotCQkJImZzdHMJZnB1bCwgZnI3XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyOFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjlcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjExXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTJcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxM1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjE0XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTVcblx0IgotCQkJImZyY2hnXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjFcblx0IgotCQkJImZzdHMJZnB1bCwgZnIyXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyM1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjRcblx0IgotCQkJImZzdHMJZnB1bCwgZnI1XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjdcblx0IgotCQkJImZzdHMJZnB1bCwgZnI4XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyOVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEwXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTFcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEzXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTRcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxNVxuXHQiCi0JCQkiZnJjaGdcblx0IgotCQkJImxkcwklMiwgZnBzY3Jcblx0IgotCQkJOgkvKiBubyBvdXRwdXQgKi8KLQkJCToiciIgKDApLCAiciIoRlBTQ1JfUkNIRyksICJyIihGUFNDUl9JTklUKSk7Ci0JZGlzYWJsZV9mcHUoKTsKLX0KLQogLyoqCiAgKiAgICAgIGRlbm9ybWFsX3RvX2RvdWJsZSAtIEdpdmVuIGRlbm9ybWFsaXplZCBmbG9hdCBudW1iZXIsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGRvdWJsZSBmbG9hdApAQCAtMjgyLDkgKzIzMSw5IEBACiAJCS8qIGZjbnZzZCAqLwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKLQkJaWYgKCh0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKSkKKwkJaWYgKCh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikpCiAJCQkvKiBGUFUgZXJyb3IgKi8KLQkJCWRlbm9ybWFsX3RvX2RvdWJsZSgmdHNrLT50aHJlYWQuZnB1LmhhcmQsCisJCQlkZW5vcm1hbF90b19kb3VibGUoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwKIAkJCQkJICAgKGZpbnNuID4+IDgpICYgMHhmKTsKIAkJZWxzZQogCQkJcmV0dXJuIDA7CkBAIC0zMDAsOSArMjQ5LDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmIEZQU0NSX0RCTF9QUkVDSVNJT047CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQpAQCAtMzEyLDE4ICsyNjEsMTggQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKGRvdWJsZXMpICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZyloeCA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpaHkgPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20gKyAxXTsKIAkJCWxseCA9IGZsb2F0NjRfbXVsKGxseCwgbGx5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCiAJCQkgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCQkgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsIChmbG9hdHMpICovCiAJCQloeCA9IGZsb2F0MzJfbXVsKGh4LCBoeSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC0zMzgsOSArMjg3LDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmIEZQU0NSX0RCTF9QUkVDSVNJT047CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQpAQCAtMzUwLDE1ICsyOTksMTUgQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKGRvdWJsZXMpICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZyloeCA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpaHkgPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20gKyAxXTsKIAkJCWlmICgoZmluc24gJiAweGYwMGYpID09IDB4ZjAwMCkKIAkJCQlsbHggPSBmbG9hdDY0X2FkZChsbHgsIGxseSk7CiAJCQllbHNlCiAJCQkJbGx4ID0gZmxvYXQ2NF9zdWIobGx4LCBsbHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gbGx4ID4+IDMyOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKIAkJfSBlbHNlIGlmICgoZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKIAkJCSAgICYmICghcHJlYyAmJiAoKGh4ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwCiAJCQkJCSB8fCAoaHkgJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDApKSkgewpAQCAtMzY3LDcgKzMxNiw3IEBACiAJCQkJaHggPSBmbG9hdDMyX2FkZChoeCwgaHkpOwogCQkJZWxzZQogCQkJCWh4ID0gZmxvYXQzMl9zdWIoaHgsIGh5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBoeDsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gaHg7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CiAKQEAgLTM4Miw5ICszMzEsOSBAQAogCiAJCW4gPSAoZmluc24gPj4gOCkgJiAweGY7CiAJCW0gPSAoZmluc24gPj4gNCkgJiAweGY7Ci0JCWh4ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXTsKLQkJaHkgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOwotCQlmcHNjciA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dOworCQloeSA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOworCQlmcHNjciA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjcjsKIAkJcHJlYyA9IGZwc2NyICYgRlBTQ1JfREJMX1BSRUNJU0lPTjsKIAogCQlpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCkBAIC0zOTQsMjAgKzM0MywyMCBAQAogCiAJCQkvKiBGUFUgZXJyb3IgYmVjYXVzZSBvZiBkZW5vcm1hbCAoZG91YmxlcykgKi8KIAkJCWxseCA9ICgobG9uZyBsb25nKWh4IDw8IDMyKQotCQkJICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuICsgMV07CisJCQkgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuICsgMV07CiAJCQlsbHkgPSAoKGxvbmcgbG9uZyloeSA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbSArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSArIDFdOwogCiAJCQlsbHggPSBmbG9hdDY0X2RpdihsbHgsIGxseSk7CiAKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCiAJCQkgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCQkgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsIChmbG9hdHMpICovCiAJCQloeCA9IGZsb2F0MzJfZGl2KGh4LCBoeSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC00MjAsMTcgKzM2OSwxNyBAQAogCQl1bnNpZ25lZCBpbnQgaHg7CiAKIAkJbSA9IChmaW5zbiA+PiA4KSAmIDB4NzsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOwogCi0JCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKKwkJaWYgKCh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKIAkJCSYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDAxMDAwMDApKSB7CiAJCQkvKiBzdWJub3JtYWwgZG91YmxlIHRvIGZsb2F0IGNvbnZlcnNpb24gKi8KIAkJCWxvbmcgbG9uZyBsbHg7CiAKLQkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV0gPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dIDw8IDMyKQorCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSArIDFdOwogCi0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHVsID0gZmxvYXQ2NF90b19mbG9hdDMyKGxseCk7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnB1bCA9IGZsb2F0NjRfdG9fZmxvYXQzMihsbHgpOwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC00NDksNyArMzk4LDcgQEAKIGludCBmbG9hdF9yb3VuZGluZ19tb2RlKHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCWludCByb3VuZGluZ01vZGUgPSBGUFNDUl9ST1VORElOR19NT0RFKHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyKTsKKwlpbnQgcm91bmRpbmdNb2RlID0gRlBTQ1JfUk9VTkRJTkdfTU9ERSh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IpOwogCXJldHVybiByb3VuZGluZ01vZGU7CiB9CiAKQEAgLTQ2MSwxNiArNDEwLDE2IEBACiAJX191bmxhenlfZnB1KHRzaywgcmVncyk7CiAJZnB1X2V4Y2VwdGlvbl9mbGFncyA9IDA7CiAJaWYgKGllZWVfZnBlX2hhbmRsZXIocmVncykpIHsKLQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJj0KKwkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyICY9CiAJCSAgICB+KEZQU0NSX0NBVVNFX01BU0sgfCBGUFNDUl9GTEFHX01BU0spOwotCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciB8PSBmcHVfZXhjZXB0aW9uX2ZsYWdzOworCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgfD0gZnB1X2V4Y2VwdGlvbl9mbGFnczsKIAkJLyogU2V0IHRoZSBGUFNDUiBmbGFnIGFzIHdlbGwgYXMgY2F1c2UgYml0cyAtIHNpbXBseQogCQkgKiByZXBsaWNhdGUgdGhlIGNhdXNlICovCi0JCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyIHw9IChmcHVfZXhjZXB0aW9uX2ZsYWdzID4+IDEwKTsKKwkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyIHw9IChmcHVfZXhjZXB0aW9uX2ZsYWdzID4+IDEwKTsKIAkJZ3JhYl9mcHUocmVncyk7CiAJCXJlc3RvcmVfZnB1KHRzayk7CiAJCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7Ci0JCWlmICgoKCh0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmIEZQU0NSX0VOQUJMRV9NQVNLKSA+PiA3KSAmCisJCWlmICgoKCh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJiBGUFNDUl9FTkFCTEVfTUFTSykgPj4gNykgJgogCQkgICAgIChmcHVfZXhjZXB0aW9uX2ZsYWdzID4+IDIpKSA9PSAwKSB7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTQ3OCwzMyArNDI3LDMgQEAKIAogCWZvcmNlX3NpZyhTSUdGUEUsIHRzayk7CiB9Ci0KLXZvaWQgZnB1X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCi0JZ3JhYl9mcHUocmVncyk7Ci0JaWYgKHVubGlrZWx5KCF1c2VyX21vZGUocmVncykpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQlVHOiBGUFUgaXMgdXNlZCBpbiBrZXJuZWwgbW9kZS5cbiIpOwotCQlCVUcoKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChsaWtlbHkodXNlZF9tYXRoKCkpKSB7Ci0JCS8qIFVzaW5nIHRoZSBGUFUgYWdhaW4uICAqLwotCQlyZXN0b3JlX2ZwdSh0c2spOwotCX0gZWxzZSB7Ci0JCS8qIEZpcnN0IHRpbWUgRlBVIHVzZXIuICAqLwotCQlmcHVfaW5pdCgpOwotCQlzZXRfdXNlZF9tYXRoKCk7Ci0JfQotCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7Ci0JdHNrLT5mcHVfY291bnRlcisrOwotfQotCi1CVUlMRF9UUkFQX0hBTkRMRVIoZnB1X3N0YXRlX3Jlc3RvcmUpCi17Ci0JVFJBUF9IQU5ETEVSX0RFQ0w7Ci0KLQlmcHVfc3RhdGVfcmVzdG9yZShyZWdzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwppbmRleCBkMzZmMGM0Li44MjI5NzdhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCkBAIC0yOCw5ICsyOCw5IEBACiAJCVs5XSA9ICgxIDw8IDE2KQogCX07CiAKLQlwdnIgPSAoY3RybF9pbmwoQ0NOX1BWUikgPj4gOCkgJiAweGZmZmZmZjsKLQlwcnIgPSAoY3RybF9pbmwoQ0NOX1BSUikgPj4gNCkgJiAweGZmOwotCWN2ciA9IChjdHJsX2lubChDQ05fQ1ZSKSk7CisJcHZyID0gKF9fcmF3X3JlYWRsKENDTl9QVlIpID4+IDgpICYgMHhmZmZmZmY7CisJcHJyID0gKF9fcmF3X3JlYWRsKENDTl9QUlIpID4+IDQpICYgMHhmZjsKKwljdnIgPSAoX19yYXdfcmVhZGwoQ0NOX0NWUikpOwogCiAJLyoKIAkgKiBTZXR1cCBzb21lIHNhbmUgU0gtNCBkZWZhdWx0cyBmb3IgdGhlIGljYWNoZQpAQCAtNzEsMTEgKzcxLDExIEBACiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSA0OwogCX0gZWxzZSB7CiAJCS8qIEFuZCBzb21lIFNILTQgZGVmYXVsdHMuLiAqLwotCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfUFRFQTsKKwkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1BURUEgfCBDUFVfSEFTX0ZQVTsKIAkJYm9vdF9jcHVfZGF0YS5mYW1pbHkgPSBDUFVfRkFNSUxZX1NINDsKIAl9CiAKLQkvKiBGUFUgZGV0ZWN0aW9uIHdvcmtzIGZvciBldmVyeW9uZSAqLworCS8qIEZQVSBkZXRlY3Rpb24gd29ya3MgZm9yIGFsbW9zdCBldmVyeW9uZSAqLwogCWlmICgoY3ZyICYgMHgyMDAwMDAwMCkpCiAJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFU7CiAKQEAgLTEyNCw2ICsxMjQsNyBAQAogCQlib290X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3Nzg1OwogCQlicmVhazsKIAljYXNlIDB4NDAwNDoKKwljYXNlIDB4NDAwNToKIAkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzc4NjsKIAkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1BURUFFWCB8IENQVV9IQVNfTDJfQ0FDSEU7CiAJCWJyZWFrOwpAQCAtMTYwLDYgKzE2MSw3IEBACiAJCWJyZWFrOwogCWNhc2UgMHg3MDA6CiAJCWJvb3RfY3B1X2RhdGEudHlwZSA9IENQVV9TSDRfNTAxOworCQlib290X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0ZQVTsKIAkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDI7CiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSAyOwogCQlicmVhazsKQEAgLTIyNyw3ICsyMjksNyBAQAogCQkJICogU2l6ZSBjYWxjdWxhdGlvbiBpcyBtdWNoIG1vcmUgc2Vuc2libGUKIAkJCSAqIHRoYW4gaXQgaXMgZm9yIHRoZSBMMS4KIAkJCSAqCi0JCQkgKiBTaXplcyBhcmUgMTI4S0IsIDI1OEtCLCA1MTJLQiwgYW5kIDFNQi4KKwkJCSAqIFNpemVzIGFyZSAxMjhLQiwgMjU2S0IsIDUxMktCLCBhbmQgMU1CLgogCQkJICovCiAJCQlzaXplID0gKGN2ciAmIDB4ZikgPDwgMTc7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g0LTIwMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMKaW5kZXggNGI3MzM3MS4uYjliN2UxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogewogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROiAvKiBpbmRpdmlkdWFsIGludGVycnVwdCBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXR3KGN0cmxfaW53KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKKwkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsbSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBiMmE5ZGYxLi5mZmQ3OWU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6IC8qIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOworCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmxtKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCmluZGV4IDViNzRjYzAuLmExNmViMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwpAQCAtMzE5LDcgKzMxOSw3IEBACiB7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6Ci0JCWN0cmxfb3V0dyhjdHJsX2ludyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKaW5kZXggOGE4YTk5My4uZmMwNjVmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwpAQCAtNDMsOSArNDMsOSBAQAogCiAjZGVmaW5lIHN0b3JlX3F1ZXVlX2JhcnJpZXIoKQkJCVwKIGRvIHsJCQkJCQlcCi0JKHZvaWQpY3RybF9pbmwoUDRTRUdfU1RPUkVfUVVFKTsJXAotCWN0cmxfb3V0bCgwLCBQNFNFR19TVE9SRV9RVUUgKyAwKTsJXAotCWN0cmxfb3V0bCgwLCBQNFNFR19TVE9SRV9RVUUgKyA4KTsJXAorCSh2b2lkKV9fcmF3X3JlYWRsKFA0U0VHX1NUT1JFX1FVRSk7CVwKKwlfX3Jhd193cml0ZWwoMCwgUDRTRUdfU1RPUkVfUVVFICsgMCk7CVwKKwlfX3Jhd193cml0ZWwoMCwgUDRTRUdfU1RPUkVfUVVFICsgOCk7CVwKIH0gd2hpbGUgKDApOwogCiAvKioKQEAgLTEwMCw3ICsxMDAsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmc3FfbWFwcGluZ19sb2NrKTsKIH0KIAotc3RhdGljIGludCBfX3NxX3JlbWFwKHN0cnVjdCBzcV9tYXBwaW5nICptYXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitzdGF0aWMgaW50IF9fc3FfcmVtYXAoc3RydWN0IHNxX21hcHBpbmcgKm1hcCwgcGdwcm90X3QgcHJvdCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19NTVUpCiAJc3RydWN0IHZtX3N0cnVjdCAqdm1hOwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXZtYS0+YWRkciwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyl2bWEtPmFkZHIgKyBtYXAtPnNpemUsCi0JCQkgICAgICAgdm1hLT5waHlzX2FkZHIsIF9fcGdwcm90KGZsYWdzKSkpIHsKKwkJCSAgICAgICB2bWEtPnBoeXNfYWRkciwgcHJvdCkpIHsKIAkJdnVubWFwKHZtYS0+YWRkcik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTEyMyw4ICsxMjMsOCBAQAogCSAqIHN0cmFpZ2h0Zm9yd2FyZCwgYXMgd2UgY2FuIGp1c3QgbG9hZCB1cCBlYWNoIHF1ZXVlJ3MgUUFDUiB3aXRoCiAJICogdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXBwcm9wcmlhdGVseSBtYXNrZWQuCiAJICovCi0JY3RybF9vdXRsKCgobWFwLT5hZGRyID4+IDI2KSA8PCAyKSAmIDB4MWMsIFNRX1FBQ1IwKTsKLQljdHJsX291dGwoKChtYXAtPmFkZHIgPj4gMjYpIDw8IDIpICYgMHgxYywgU1FfUUFDUjEpOworCV9fcmF3X3dyaXRlbCgoKG1hcC0+YWRkciA+PiAyNikgPDwgMikgJiAweDFjLCBTUV9RQUNSMCk7CisJX19yYXdfd3JpdGVsKCgobWFwLT5hZGRyID4+IDI2KSA8PCAyKSAmIDB4MWMsIFNRX1FBQ1IxKTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CkBAIC0xMzUsMTQgKzEzNSwxNCBAQAogICogQHBoeXM6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgbWFwcGluZy4KICAqIEBzaXplOiBMZW5ndGggb2YgbWFwcGluZy4KICAqIEBuYW1lOiBVc2VyIGludm9raW5nIG1hcHBpbmcuCi0gKiBAZmxhZ3M6IFByb3RlY3Rpb24gZmxhZ3MuCisgKiBAcHJvdDogUHJvdGVjdGlvbiBiaXRzLgogICoKICAqIFJlbWFwcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBAcGh5cyB0aHJvdWdoIHRoZSBuZXh0IGF2YWlsYWJsZSBzdG9yZSBxdWV1ZQogICogYWRkcmVzcyBvZiBAc2l6ZSBsZW5ndGguIEBuYW1lIGlzIGxvZ2dlZCBhdCBib290IHRpbWUgYXMgd2VsbCBhcyB0aHJvdWdoCiAgKiB0aGUgc3lzZnMgaW50ZXJmYWNlLgogICovCiB1bnNpZ25lZCBsb25nIHNxX3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgaW50IHNpemUsCi0JCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgcGdwcm90X3QgcHJvdCkKIHsKIAlzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwOwogCXVuc2lnbmVkIGxvbmcgZW5kOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKIAltYXAtPnNxX2FkZHIgPSBQNFNFR19TVE9SRV9RVUUgKyAocGFnZSA8PCBQQUdFX1NISUZUKTsKIAotCXJldCA9IF9fc3FfcmVtYXAobWFwLCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX05PQ0FDSEUpIHwgZmxhZ3MpOworCXJldCA9IF9fc3FfcmVtYXAobWFwLCBwcm90KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIApAQCAtMzA5LDggKzMwOSw3IEBACiAJCXJldHVybiAtRUlPOwogCiAJaWYgKGxpa2VseShsZW4pKSB7Ci0JCWludCByZXQgPSBzcV9yZW1hcChiYXNlLCBsZW4sICJVc2Vyc3BhY2UiLAotCQkJCSAgIHBncHJvdF92YWwoUEFHRV9TSEFSRUQpKTsKKwkJaW50IHJldCA9IHNxX3JlbWFwKGJhc2UsIGxlbiwgIlVzZXJzcGFjZSIsIFBBR0VfU0hBUkVEKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQppbmRleCAzM2JhYjQ3Li5iMTQ0ZThhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQpAQCAtNDEsNyArNDEsOCBAQAogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJOj0gcGlubXV4LXNoNzc4NS5vCiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQk6PSBwaW5tdXgtc2g3Nzg2Lm8KIAotb2JqLXkJCQkJKz0gJChjbG9jay15KQotb2JqLSQoQ09ORklHX1NNUCkJCSs9ICQoc21wLXkpCi1vYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSAkKHBpbm11eC15KQotb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkrPSBwZXJmX2V2ZW50Lm8KK29iai15CQkJCQkrPSAkKGNsb2NrLXkpCitvYmotJChDT05GSUdfU01QKQkJCSs9ICQoc21wLXkpCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkJKz0gJChwaW5tdXgteSkKK29iai0kKENPTkZJR19QRVJGX0VWRU5UUykJCSs9IHBlcmZfZXZlbnQubworb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkJKz0gdWJjLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKaW5kZXggMGVlM2VlOC4uMmMxNmRmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKQEAgLTEwNywxMyArMTA3LDE3IEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAogICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM2Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKaW5kZXggYTk1ZWJhYi4uOTE1ODhkMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKQEAgLTExMCwxMyArMTEwLDE3IEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAogICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKaW5kZXggZWEzOGI1NS4uMTVkYjZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKQEAgLTExMCwxOSArMTEwLDIyIEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCi1lbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAotICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X0lSREEsIERJVjRfTlIgfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CiAKICNkZWZpbmUgRElWNChfc3RyLCBfcmVnLCBfYml0LCBfbWFzaywgX2ZsYWdzKSBcCiAgIFNIX0NMS19ESVY0KF9zdHIsICZwbGxfY2xrLCBfcmVnLCBfYml0LCBfbWFzaywgX2ZsYWdzKQogCitlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLCBESVY0X05SIH07CisKIHN0cnVjdCBjbGsgZGl2NF9jbGtzW0RJVjRfTlJdID0gewogCVtESVY0X0ldID0gRElWNCgiY3B1X2NsayIsIEZSUUNSLCAyMCwgMHgxZmVmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X1VdID0gRElWNCgidW1lbV9jbGsiLCBGUlFDUiwgMTYsIDB4MWZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKQEAgLTEzMCw5ICsxMzMsMTkgQEAKIAlbRElWNF9CXSA9IERJVjQoImJ1c19jbGsiLCBGUlFDUiwgOCwgMHgxZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X0IzXSA9IERJVjQoImIzX2NsayIsIEZSUUNSLCA0LCAweDFmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfUF0gPSBESVY0KCJwZXJpcGhlcmFsX2NsayIsIEZSUUNSLCAwLCAweDFmZmYsIDApLAorfTsKKworZW51bSB7IERJVjRfSVJEQSwgRElWNF9FTkFCTEVfTlIgfTsKKworc3RydWN0IGNsayBkaXY0X2VuYWJsZV9jbGtzW0RJVjRfRU5BQkxFX05SXSA9IHsKKwlbRElWNF9JUkRBXSA9IERJVjQoImlyZGFfY2xrIiwgSVJEQUNMS0NSLCAwLCAweDFmZmYsIDApLAorfTsKKworZW51bSB7IERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X1JFUEFSRU5UX05SIH07CisKK3N0cnVjdCBjbGsgZGl2NF9yZXBhcmVudF9jbGtzW0RJVjRfUkVQQVJFTlRfTlJdID0gewogCVtESVY0X1NJVUFdID0gRElWNCgic2l1YV9jbGsiLCBTQ0xLQUNSLCAwLCAweDFmZmYsIDApLAogCVtESVY0X1NJVUJdID0gRElWNCgic2l1Yl9jbGsiLCBTQ0xLQkNSLCAwLCAweDFmZmYsIDApLAotCVtESVY0X0lSREFdID0gRElWNCgiaXJkYV9jbGsiLCBJUkRBQ0xLQ1IsIDAsIDB4MWZmZiwgMCksCiB9OwogCiBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tdID0gewpAQCAtMTg5LDYgKzIwMiwxNCBAQAogCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKIAogCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoZGl2NF9lbmFibGVfY2xrcywKKwkJCQkJRElWNF9FTkFCTEVfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZXBhcmVudF9yZWdpc3RlcihkaXY0X3JlcGFyZW50X2Nsa3MsCisJCQkJCURJVjRfUkVQQVJFTlRfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQogCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIEFSUkFZX1NJWkUoZGl2Nl9jbGtzKSk7CiAKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKaW5kZXggMjBhMzFjMi4uNTBiYWJlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKQEAgLTExMCwxNSArMTEwLDE4IEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCi1lbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAotICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X0lSREEsIERJVjRfTlIgfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CisKK2VudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsIERJVjRfTlIgfTsKIAogI2RlZmluZSBESVY0KF9zdHIsIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKICAgU0hfQ0xLX0RJVjQoX3N0ciwgJnBsbF9jbGssIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCkBAIC0xMzAsMTEgKzEzMywyMCBAQAogCVtESVY0X0JdID0gRElWNCgiYnVzX2NsayIsIEZSUUNSLCA4LCAweDBkYmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQjNdID0gRElWNCgiYjNfY2xrIiwgRlJRQ1IsIDQsIDB4MGRiNCwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9QXSA9IERJVjQoInBlcmlwaGVyYWxfY2xrIiwgRlJRQ1IsIDAsIDB4MGRiZiwgMCksCi0JW0RJVjRfU0lVQV0gPSBESVY0KCJzaXVhX2NsayIsIFNDTEtBQ1IsIDAsIDB4MGRiZiwgMCksCi0JW0RJVjRfU0lVQl0gPSBESVY0KCJzaXViX2NsayIsIFNDTEtCQ1IsIDAsIDB4MGRiZiwgMCksCit9OworCitlbnVtIHsgRElWNF9JUkRBLCBESVY0X0VOQUJMRV9OUiB9OworCitzdHJ1Y3QgY2xrIGRpdjRfZW5hYmxlX2Nsa3NbRElWNF9FTkFCTEVfTlJdID0gewogCVtESVY0X0lSREFdID0gRElWNCgiaXJkYV9jbGsiLCBJUkRBQ0xLQ1IsIDAsIDB4MGRiZiwgMCksCiB9OwogCitlbnVtIHsgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfUkVQQVJFTlRfTlIgfTsKKworc3RydWN0IGNsayBkaXY0X3JlcGFyZW50X2Nsa3NbRElWNF9SRVBBUkVOVF9OUl0gPSB7CisJW0RJVjRfU0lVQV0gPSBESVY0KCJzaXVhX2NsayIsIFNDTEtBQ1IsIDAsIDB4MGRiZiwgMCksCisJW0RJVjRfU0lVQl0gPSBESVY0KCJzaXViX2NsayIsIFNDTEtCQ1IsIDAsIDB4MGRiZiwgMCksCit9Owogc3RydWN0IGNsayBkaXY2X2Nsa3NbXSA9IHsKIAlTSF9DTEtfRElWNigidmlkZW9fY2xrIiwgJnBsbF9jbGssIFZDTEtDUiwgMCksCiB9OwpAQCAtMjE2LDYgKzIyOCwxNCBAQAogCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKIAogCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoZGl2NF9lbmFibGVfY2xrcywKKwkJCQkJRElWNF9FTkFCTEVfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZXBhcmVudF9yZWdpc3RlcihkaXY0X3JlcGFyZW50X2Nsa3MsCisJCQkJCURJVjRfUkVQQVJFTlRfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQogCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIEFSUkFZX1NJWkUoZGl2Nl9jbGtzKSk7CiAKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKaW5kZXggOWRiNzQzOC4uNjcwNzA2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKQEAgLTEyNywxMyArMTI3LDI4IEBACiAJJmRpdjNfY2xrLAogfTsKIAorc3RhdGljIHZvaWQgZGl2NF9raWNrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJLyogc2V0IEtJQ0sgYml0IGluIEZSUUNSQSB0byB1cGRhdGUgaGFyZHdhcmUgc2V0dGluZyAqLworCXZhbHVlID0gX19yYXdfcmVhZGwoRlJRQ1JBKTsKKwl2YWx1ZSB8PSAoMSA8PCAzMSk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBGUlFDUkEpOworfQorCiBzdGF0aWMgaW50IGRpdmlzb3JzW10gPSB7IDIsIDMsIDQsIDYsIDgsIDEyLCAxNiwgMCwgMjQsIDMyLCAzNiwgNDgsIDAsIDcyIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfdGFibGUgPSB7CitzdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X2Rpdl9tdWx0X3RhYmxlID0gewogCS5kaXZpc29ycyA9IGRpdmlzb3JzLAogCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2aXNvcnMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorCS5raWNrID0gZGl2NF9raWNrLAorfTsKKwogZW51bSB7IERJVjRfSSwgRElWNF9TSCwgRElWNF9CLCBESVY0X1AsIERJVjRfTTEsIERJVjRfTlIgfTsKIAogI2RlZmluZSBESVY0KF9zdHIsIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKQEAgLTE0NCw3ICsxNTksNyBAQAogCVtESVY0X1NIXSA9IERJVjQoInNoeXdheV9jbGsiLCBGUlFDUkEsIDEyLCAweDJmN2MsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQl0gPSBESVY0KCJidXNfY2xrIiwgRlJRQ1JBLCA4LCAweDJmN2MsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfUF0gPSBESVY0KCJwZXJpcGhlcmFsX2NsayIsIEZSUUNSQSwgMCwgMHgyZjdjLCAwKSwKLQlbRElWNF9NMV0gPSBESVY0KCJ2cHVfY2xrIiwgRlJRQ1JCLCA0LCAweDJmN2MsIDApLAorCVtESVY0X00xXSA9IERJVjQoInZwdV9jbGsiLCBGUlFDUkIsIDQsIDB4MmY3YywgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIH07CiAKIHN0cnVjdCBjbGsgZGl2Nl9jbGtzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NTcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCmluZGV4IGRkYzIzNWMuLjg2YWFlNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gY3RybF9pbmwoRlJRQ1IpICYgMHgwMDAwMDAwZjsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDAwMDAwZjsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHAxZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDUsNyArNDUsNyBAQAogCiBzdGF0aWMgdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgPj4gOCkgJiAweDAwMDAwMDBmOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDgpICYgMHgwMDAwMDAwZjsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSA+PiAyMCkgJiAweDAwMDAwMDBmOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDIwKSAmIDB4MDAwMDAwMGY7CiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNzgsNyArNzgsNyBAQAogCiBzdGF0aWMgdm9pZCBzaHl3YXlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgPj4gMTIpICYgMHgwMDAwMDAwZjsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAxMikgJiAweDAwMDAwMDBmOwogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gc2ZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKaW5kZXggMzcwY2Q0Ny4uOWY0MDExNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcDBmY19kaXZpc29yc1soY3RybF9pbmwoRlJRQ1IpID4+IDQpICYgMHgwN107CisJY2xrLT5yYXRlICo9IHAwZmNfZGl2aXNvcnNbKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiA0KSAmIDB4MDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzYzX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDQpICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDQpICYgMHgwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcDBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC00MSw3ICs0MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMTYpICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDE2KSAmIDB4MDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC02OCw3ICs2OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjApICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDIwKSAmIDB4MDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NzAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCmluZGV4IGUwYjg5NjcuLjllMzM1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soY3RybF9pbmwoRlJRQ1IpID4+IDI4KSAmIDB4MDAwZl07CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soX19yYXdfcmVhZGwoRlJRQ1IpID4+IDI4KSAmIDB4MDAwZl07CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3NzBfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zMCw3ICszMCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjgpICYgMHgwMDBmKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjgpICYgMHgwMDBmKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgJiAweDAwMGYpOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDBmKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTAsNyArNTAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwZik7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwZik7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKaW5kZXggYTI0OWQ4Mi4uMTUwOTYzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW5sKEZSUUNSKSAmIDB4MDAwM107CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tfX3Jhd19yZWFkbChGUlFDUikgJiAweDAwMDNdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzgwX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgJiAweDAwMDMpOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDAzKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDE2KSAmIDB4MDAwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDE2KSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUxLDcgKzUxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAyNCkgJiAweDAwMDEpOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAyNCkgJiAweDAwMDEpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjApICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjApICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBjZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYwppbmRleCA3M2FiZmJmLi5kOTk3ZjBhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYwpAQCAtNTcsMTEgKzU3LDE1IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRpdjJbXSA9IHsgMSwgMiwgNCwgNiwgOCwgMTIsIDE2LCAxOCwKIAkJCSAgICAgICAyNCwgMzIsIDM2LCA0OCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXYyLAogCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2MiksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9ERFIsIERJVjRfR0EsCiAJRElWNF9EVSwgRElWNF9QLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKaW5kZXggYTBlODg2OS4uYWY2OWZkNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKQEAgLTMsMTEgKzMsNyBAQAogICoKICAqIFNINzc4NiBzdXBwb3J0IGZvciB0aGUgY2xvY2sgZnJhbWV3b3JrCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgotICoKLSAqIEJhc2VkIG9uIFNINzc4NQotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xNSwxMjcgKzExLDEyNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2ZyZXEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotc3RhdGljIGludCBpZmNfZGl2aXNvcnNbXSA9IHsgMSwgMiwgNCwgMSB9Owotc3RhdGljIGludCBzZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgNCwgMSB9Owotc3RhdGljIGludCBiZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMTIsIDE2LCAxLAotCQkJICAgICAyNCwgMzIsIDEsIDEsIDEsIDEsIDEsIDEgfTsKLXN0YXRpYyBpbnQgbWZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEgfTsKLXN0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDEsIDE2LCAxLAotCQkJICAgICAgMjQsIDMyLCAxLCA0OCwgMSwgMSwgMSwgMSB9OwotCi1zdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQotewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZl07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbWFzdGVyX2Nsa19vcHMgPSB7Ci0JLmluaXQJCT0gbWFzdGVyX2Nsa19pbml0LAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZik7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbW9kdWxlX2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDE2KSAmIDB4MDAwZik7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfYnVzX2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBidXNfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDI4KSAmIDB4MDAwMyk7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfY3B1X2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBjcHVfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyAqc2g3Nzg2X2Nsa19vcHNbXSA9IHsKLQkmc2g3Nzg2X21hc3Rlcl9jbGtfb3BzLAotCSZzaDc3ODZfbW9kdWxlX2Nsa19vcHMsCi0JJnNoNzc4Nl9idXNfY2xrX29wcywKLQkmc2g3Nzg2X2NwdV9jbGtfb3BzLAotfTsKLQotdm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCi17Ci0JaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3Nzg2X2Nsa19vcHMpKQotCQkqb3BzID0gc2g3Nzg2X2Nsa19vcHNbaWR4XTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMjApICYgMHgwMDAzKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9zaHl3YXlfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IHNoeXdheV9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X3NoeXdheV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNoeXdheV9jbGsiLAotCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCi0JLm9wcwkJPSAmc2g3Nzg2X3NoeXdheV9jbGtfb3BzLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGRyX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMTIpICYgMHgwMDAzKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9kZHJfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IGRkcl9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X2Rkcl9jbGsgPSB7Ci0JLm5hbWUJCT0gImRkcl9jbGsiLAotCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCi0JLm9wcwkJPSAmc2g3Nzg2X2Rkcl9jbGtfb3BzLAotfTsKIAogLyoKLSAqIEFkZGl0aW9uYWwgU0g3Nzg2LXNwZWNpZmljIG9uLWNoaXAgY2xvY2tzIHRoYXQgYXJlbid0IGFscmVhZHkgcGFydCBvZiB0aGUKLSAqIGNsb2NrIGZyYW1ld29yaworICogRGVmYXVsdCByYXRlIGZvciB0aGUgcm9vdCBpbnB1dCBjbG9jaywgcmVzZXQgdGhpcyB3aXRoIGNsa19zZXRfcmF0ZSgpCisgKiBmcm9tIHRoZSBwbGF0Zm9ybSBjb2RlLgogICovCi1zdGF0aWMgc3RydWN0IGNsayAqc2g3Nzg2X29uY2hpcF9jbG9ja3NbXSA9IHsKLQkmc2g3Nzg2X3NoeXdheV9jbGssCi0JJnNoNzc4Nl9kZHJfY2xrLAorc3RhdGljIHN0cnVjdCBjbGsgZXh0YWxfY2xrID0geworCS5uYW1lCQk9ICJleHRhbCIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDMzMzMzMzMzLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IG11bHRpcGxpZXI7CisKKwkvKgorCSAqIENsb2NrIG1vZGVzIDAsIDEsIGFuZCAyIHVzZSBhbiB4NjQgbXVsdGlwbGllciBhZ2FpbnN0IFBMTDEsCisJICogd2hpbGUgbW9kZXMgMywgNCwgYW5kIDUgdXNlIGFuIHgzMi4KKwkgKi8KKwltdWx0aXBsaWVyID0gKHNoX212Lm12X21vZGVfcGlucygpICYgMHhmKSA8IDMgPyA2NCA6IDMyOworCisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlICogbXVsdGlwbGllcjsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHBsbF9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gcGxsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbF9jbGsgPSB7CisJLm5hbWUJCT0gInBsbF9jbGsiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICZwbGxfY2xrX29wcywKKwkucGFyZW50CQk9ICZleHRhbF9jbGssCisJLmZsYWdzCQk9IENMS19FTkFCTEVfT05fSU5JVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW10gPSB7CisJJmV4dGFsX2NsaywKKwkmcGxsX2NsaywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGl2MltdID0geyAxLCAyLCA0LCA2LCA4LCAxMiwgMTYsIDE4LAorCQkJICAgICAgIDI0LCAzMiwgMzYsIDQ4IH07CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CisJLmRpdmlzb3JzID0gZGl2MiwKKwkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdjIpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorfTsKKworZW51bSB7IERJVjRfSSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0REUiwgRElWNF9EVSwgRElWNF9QLCBESVY0X05SIH07CisKKyNkZWZpbmUgRElWNChfc3RyLCBfYml0LCBfbWFzaywgX2ZsYWdzKSBcCisgIFNIX0NMS19ESVY0KF9zdHIsICZwbGxfY2xrLCBGUlFNUjEsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCisKK3N0cnVjdCBjbGsgZGl2NF9jbGtzW0RJVjRfTlJdID0geworCVtESVY0X1BdID0gRElWNCgicGVyaXBoZXJhbF9jbGsiLCAwLCAweDBiNDAsIDApLAorCVtESVY0X0RVXSA9IERJVjQoImR1X2NsayIsIDQsIDB4MDAxMCwgMCksCisJW0RJVjRfRERSXSA9IERJVjQoImRkcl9jbGsiLCAxMiwgMHgwMDAyLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X0JdID0gRElWNCgiYnVzX2NsayIsIDE2LCAweDAzNjAsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfU0hdID0gRElWNCgic2h5d2F5X2NsayIsIDIwLCAweDAwMDIsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfSV0gPSBESVY0KCJjcHVfY2xrIiwgMjgsIDB4MDAwNiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKK307CisKKyNkZWZpbmUgTVNUUENSMAkJMHhmZmM0MDAzMAorI2RlZmluZSBNU1RQQ1IxCQkweGZmYzQwMDM0CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tdID0geworCS8qIE1TVFBDUjAgKi8KKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDUsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjksIDApLAorCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgNCwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyOCwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCAzLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI3LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDIsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjYsIDApLAorCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyNSwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI0LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzc2lfZmNrIiwgMywgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyMywgMCksCisJU0hfQ0xLX01TVFAzMigic3NpX2ZjayIsIDIsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjIsIDApLAorCVNIX0NMS19NU1RQMzIoInNzaV9mY2siLCAxLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDIxLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzc2lfZmNrIiwgMCwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyMCwgMCksCisJU0hfQ0xLX01TVFAzMigiaGFjX2ZjayIsIDEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTcsIDApLAorCVNIX0NMS19NU1RQMzIoImhhY19mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDE2LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJpMmNfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxNSwgMCksCisJU0hfQ0xLX01TVFAzMigiaTJjX2ZjayIsIDAsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTQsIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTlfMTFfZmNrIiwgLTEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTEsIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTY3OF9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxMCwgMCksCisJU0hfQ0xLX01TVFAzMigidG11MzQ1X2ZjayIsIC0xLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDksIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTAxMl9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCA4LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzZGlmX2ZjayIsIDEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgNSwgMCksCisJU0hfQ0xLX01TVFAzMigic2RpZl9mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDQsIDApLAorCVNIX0NMS19NU1RQMzIoImhzcGlfZmNrIiwgLTEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMiwgMCksCisKKwkvKiBNU1RQQ1IxICovCisJU0hfQ0xLX01TVFAzMigidXNiX2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCAxMiwgMCksCisJU0hfQ0xLX01TVFAzMigicGNpZV9mY2siLCAyLCBOVUxMLCBNU1RQQ1IxLCAxMCwgMCksCisJU0hfQ0xLX01TVFAzMigicGNpZV9mY2siLCAxLCBOVUxMLCBNU1RQQ1IxLCA5LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJwY2llX2ZjayIsIDAsIE5VTEwsIE1TVFBDUjEsIDgsIDApLAorCVNIX0NMS19NU1RQMzIoImRtYWNfMTFfNl9mY2siLCAtMSwgTlVMTCwgTVNUUENSMSwgNSwgMCksCisJU0hfQ0xLX01TVFAzMigiZG1hY181XzBfZmNrIiwgLTEsIE5VTEwsIE1TVFBDUjEsIDQsIDApLAorCVNIX0NMS19NU1RQMzIoImR1X2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCAzLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJldGhlcl9mY2siLCAtMSwgTlVMTCwgTVNUUENSMSwgMiwgMCksCiB9OwogCiBpbnQgX19pbml0IGFyY2hfY2xrX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CiAJaW50IGksIHJldCA9IDA7CiAKLQljcGdfY2xrX2luaXQoKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGtzKTsgaSsrKQorCQlyZXQgfD0gY2xrX3JlZ2lzdGVyKGNsa3NbaV0pOwogCi0JY2xrID0gY2xrX2dldChOVUxMLCAibWFzdGVyX2NsayIpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNoNzc4Nl9vbmNoaXBfY2xvY2tzKTsgaSsrKSB7Ci0JCXN0cnVjdCBjbGsgKmNsa3AgPSBzaDc3ODZfb25jaGlwX2Nsb2Nrc1tpXTsKLQotCQljbGtwLT5wYXJlbnQgPSBjbGs7Ci0JCXJldCB8PSBjbGtfcmVnaXN0ZXIoY2xrcCk7Ci0JfQotCi0JY2xrX3B1dChjbGspOworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIEFSUkFZX1NJWkUoZGl2NF9jbGtzKSwKKwkJCQkJICAgJmRpdjRfdGFibGUpOworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfbXN0cDMyX3JlZ2lzdGVyKG1zdHBfY2xrcywgQVJSQVlfU0laRShtc3RwX2Nsa3MpKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMKaW5kZXggMjNjMjdkMy4uZTc1YzU3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYwpAQCAtMzMsNyArMzMsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbKGN0cmxfaW5sKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0tdOworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0tdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2h4M19tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQyLDcgKzQyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0spOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0spOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gQkZDX1BPUykgJiBCRkNfTVNLKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gQkZDX1BPUykgJiBCRkNfTVNLKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNjIsNyArNjIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IElGQ19QT1MpICYgSUZDX01TSyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IElGQ19QT1MpICYgSUZDX01TSyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTg1LDcgKzg1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiBDRkNfUE9TKSAmIENGQ19NU0spOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBDRkNfUE9TKSAmIENGQ19NU0spOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMKaW5kZXggY2I5ZDA3Yi4uMDY4OGE3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjIuYwpAQCAtMjc4LDYgKzI3OCw3IEBACiAJSElaQThfTENEQywgSElaQThfSElaLAogCUhJWkE3X0xDREMsIEhJWkE3X0hJWiwKIAlISVpBNl9MQ0RDLCBISVpBNl9ISVosCisJSElaQjRfU0lVQSwgSElaQjRfSElaLAogCUhJWkIxX1ZJTywgSElaQjFfSElaLAogCUhJWkIwX1ZJTywgSElaQjBfSElaLAogCUhJWkMxNV9JUlE3LCBISVpDMTVfSElaLApAQCAtNTQ2LDcgKzU0Nyw3IEBACiAJUElOTVVYX0RBVEEoVklPX1ZEMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCiAJCSAgICBISVpCMF9WSU8sIEZPRV9WSU9fVkQyKSwKIAlQSU5NVVhfREFUQShWSU9fSEQyX01BUkssIFBTRTNfVklPLCBNU0VMQjlfVklPMiwKLQkJICAgIEhJWkIxX1ZJTywgSElaQjFfVklPLCBGQ0VfVklPX0hEMiksCisJCSAgICBISVpCMV9WSU8sIEZDRV9WSU9fSEQyKSwKIAlQSU5NVVhfREFUQShWSU9fQ0xLMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCiAJCSAgICBISVpCMV9WSU8sIEZSQl9WSU9fQ0xLMiksCiAKQEAgLTY1OCwxNCArNjU5LDE0IEBACiAJUElOTVVYX0RBVEEoU0RISUNMS19NQVJLLCBTREhJQ0xLKSwKIAogCS8qIFNJVSAtIFBvcnQgQSAqLwotCVBJTk1VWF9EQVRBKFNJVUFPTFJfTUFSSywgUFNDMTNfU0lVQU9MUiwgU0lVQU9MUl9TSU9GMV9TWU5DKSwKLQlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQzE0X1NJVUFPQlQsIFNJVUFPQlRfU0lPRjFfU0NLKSwKLQlQSU5NVVhfREFUQShTSVVBSVNMRF9NQVJLLCBQU0MxNV9TSVVBSVNMRCwgU0lVQUlTTERfU0lPRjFfUlhEKSwKLQlQSU5NVVhfREFUQShTSVVBSUxSX01BUkssIFBTQzExX1NJVUFJTFIsIFNJVUFJTFJfU0lPRjFfU1MyKSwKLQlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQzEyX1NJVUFJQlQsIFNJVUFJQlRfU0lPRjFfU1MxKSwKLQlQSU5NVVhfREFUQShTSVVBT1NMRF9NQVJLLCBQU0IwX1NJVUFPU0xELCBTSVVBT1NMRF9TSU9GMV9UWEQpLAotCVBJTk1VWF9EQVRBKFNJVU1DS0FfTUFSSywgUFNFMTFfU0lVTUNLQV9TSU9GMV9NQ0ssIFBTQjFfU0lVTUNLQSwgUFRLMCksCi0JUElOTVVYX0RBVEEoU0lVRkNLQV9NQVJLLCBQU0UxMV9TSVVGQ0tBLCBQVEswKSwKKwlQSU5NVVhfREFUQShTSVVBT0xSX01BUkssIFBTQzEzX1NJVUFPTFIsIEhJWkI0X1NJVUEsIFNJVUFPTFJfU0lPRjFfU1lOQyksCisJUElOTVVYX0RBVEEoU0lVQU9CVF9NQVJLLCBQU0MxNF9TSVVBT0JULCBISVpCNF9TSVVBLCBTSVVBT0JUX1NJT0YxX1NDSyksCisJUElOTVVYX0RBVEEoU0lVQUlTTERfTUFSSywgUFNDMTVfU0lVQUlTTEQsIEhJWkI0X1NJVUEsIFNJVUFJU0xEX1NJT0YxX1JYRCksCisJUElOTVVYX0RBVEEoU0lVQUlMUl9NQVJLLCBQU0MxMV9TSVVBSUxSLCBISVpCNF9TSVVBLCBTSVVBSUxSX1NJT0YxX1NTMiksCisJUElOTVVYX0RBVEEoU0lVQUlCVF9NQVJLLCBQU0MxMl9TSVVBSUJULCBISVpCNF9TSVVBLCBTSVVBSUJUX1NJT0YxX1NTMSksCisJUElOTVVYX0RBVEEoU0lVQU9TTERfTUFSSywgUFNCMF9TSVVBT1NMRCwgSElaQjRfU0lVQSwgU0lVQU9TTERfU0lPRjFfVFhEKSwKKwlQSU5NVVhfREFUQShTSVVNQ0tBX01BUkssIFBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLCBISVpCNF9TSVVBLCBQU0IxX1NJVU1DS0EsIFBUSzApLAorCVBJTk1VWF9EQVRBKFNJVUZDS0FfTUFSSywgUFNFMTFfU0lVRkNLQSwgSElaQjRfU0lVQSwgUFRLMCksCiAKIAkvKiBTSVUgLSBQb3J0IEIgKi8KIAlQSU5NVVhfREFUQShTSVVCT0xSX01BUkssIFBTQjExX1NJVUJPTFIsIFNJT1NUUkIxX1NJVUJPTFIpLApAQCAtMTYxMiw3ICsxNjEzLDcgQEAKIAkJMCwgMCwKIAkJMCwgMCwKIAkJMCwgMCwKLQkJMCwgMCwKKwkJSElaQjRfU0lVQSwgSElaQjRfSElaLAogCQkwLCAwLAogCQkwLCAwLAogCQlISVpCMV9WSU8sIEhJWkIxX0hJWiwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggYjUzMzViNS4uZWYzZjk3OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTQ0Niw2ICs0NDYsOCBAQAogCiBlbnVtIHsKIAlVTlVTRUQ9MCwKKwlFTkFCTEVELAorCURJU0FCTEVELAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LApAQCAtNDYxLDcgKzQ2Myw2IEBACiAJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0lPRjAsIFNJT0YxLCBTSU8sCiAJRkxDVExfRkxTVEVJLCBGTENUTF9GTEVOREksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRSRVExSSwKIAlJMkNfQUxJLCBJMkNfVEFDS0ksIEkyQ19XQUlUSSwgSTJDX0RURUksCi0JU0RISTAsIFNESEkxLCBTREhJMiwgU0RISTMsCiAJQ01ULCBUU0lGLCBTSVUsIFRXT0RHLAogCVRNVTAsIFRNVTEsIFRNVTIsCiAJSVJEQSwgSlBVLCBMQ0RDLApAQCAtNDk0LDggKzQ5NSw4IEBACiAJSU5UQ19WRUNUKEZMQ1RMX0ZMVFJFUTBJLCAweGRjMCksIElOVENfVkVDVChGTENUTF9GTFRSRVExSSwgMHhkZTApLAogCUlOVENfVkVDVChJMkNfQUxJLCAweGUwMCksIElOVENfVkVDVChJMkNfVEFDS0ksIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoSTJDX1dBSVRJLCAweGU0MCksIElOVENfVkVDVChJMkNfRFRFSSwgMHhlNjApLAotCUlOVENfVkVDVChTREhJMCwgMHhlODApLCBJTlRDX1ZFQ1QoU0RISTEsIDB4ZWEwKSwKLQlJTlRDX1ZFQ1QoU0RISTIsIDB4ZWMwKSwgSU5UQ19WRUNUKFNESEkzLCAweGVlMCksCisJSU5UQ19WRUNUKFNESEksIDB4ZTgwKSwgSU5UQ19WRUNUKFNESEksIDB4ZWEwKSwKKwlJTlRDX1ZFQ1QoU0RISSwgMHhlYzApLCBJTlRDX1ZFQ1QoU0RISSwgMHhlZTApLAogCUlOVENfVkVDVChDTVQsIDB4ZjAwKSwgSU5UQ19WRUNUKFRTSUYsIDB4ZjIwKSwKIAlJTlRDX1ZFQ1QoU0lVLCAweGY4MCksIElOVENfVkVDVChUV09ERywgMHhmYTApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCkBAIC01MTMsNyArNTE0LDYgQEAKIAlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURUksIEZMQ1RMX0ZMRU5ESSwKIAkJICAgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVFJFUTFJKSwKIAlJTlRDX0dST1VQKEkyQywgSTJDX0FMSSwgSTJDX1RBQ0tJLCBJMkNfV0FJVEksIEkyQ19EVEVJKSwKLQlJTlRDX0dST1VQKFNESEksIFNESEkwLCBTREhJMSwgU0RISTIsIFNESEkzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC01MzUsNyArNTM1LDcgQEAKIAkgIHsgSTJDX0RURUksIEkyQ19XQUlUSSwgSTJDX1RBQ0tJLCBJMkNfQUxJLAogCSAgICBGTENUTF9GTFRSRVExSSwgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMRU5ESSwgRkxDVExfRkxTVEVJIH0gfSwKIAl7IDB4YTQwODAwYTAsIDB4YTQwODAwZTAsIDgsIC8qIElNUjggLyBJTUNSOCAqLwotCSAgeyBTREhJMywgU0RISTIsIFNESEkxLCBTREhJMCwgMCwgMCwgVFdPREcsIFNJVSB9IH0sCisJICB7IERJU0FCTEVELCBESVNBQkxFRCwgRU5BQkxFRCwgRU5BQkxFRCwgMCwgMCwgVFdPREcsIFNJVSB9IH0sCiAJeyAweGE0MDgwMGE0LCAweGE0MDgwMGU0LCA4LCAvKiBJTVI5IC8gSU1DUjkgKi8KIAkgIHsgMCwgMCwgMCwgQ01ULCAwLCBVU0JfVVNCSTEsIFVTQl9VU0JJMCwgfSB9LAogCXsgMHhhNDA4MDBhOCwgMHhhNDA4MDBlOCwgOCwgLyogSU1SMTAgLyBJTUNSMTAgKi8KQEAgLTU3Myw5ICs1NzMsMTMgQEAKIAkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzYywgInNoNzcyMiIsIHZlY3RvcnMsIGdyb3VwcywKLQkJCSAgICAgbWFza19yZWdpc3RlcnMsIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsCi0JCQkgICAgIGFja19yZWdpc3RlcnMpOworc3RhdGljIHN0cnVjdCBpbnRjX2Rlc2MgaW50Y19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3NzIyIiwKKwkuZm9yY2VfZW5hYmxlID0gRU5BQkxFRCwKKwkuZm9yY2VfZGlzYWJsZSA9IERJU0FCTEVELAorCS5odyA9IElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyksCit9OwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwppbmRleCA3NzJiOTI2Li44NWM2MWY2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwpAQCAtNTkyLDE0ICs1OTIsMTcgQEAKICNkZWZpbmUgUkFNQ1JfQ0FDSEVfTDJGQwkweDAwMDIKICNkZWZpbmUgUkFNQ1JfQ0FDSEVfTDJFCQkweDAwMDEKICNkZWZpbmUgTDJfQ0FDSEVfRU5BQkxFCQkoUkFNQ1JfQ0FDSEVfTDJFfFJBTUNSX0NBQ0hFX0wyRkMpCi12b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGwyX2NhY2hlX2luaXQodm9pZCkKKwordm9pZCBsMl9jYWNoZV9pbml0KHZvaWQpCiB7CiAJLyogRW5hYmxlIEwyIGNhY2hlICovCi0JY3RybF9vdXRsKEwyX0NBQ0hFX0VOQUJMRSwgUkFNQ1IpOworCV9fcmF3X3dyaXRlbChMMl9DQUNIRV9FTkFCTEUsIFJBTUNSKTsKIH0KIAogZW51bSB7CiAJVU5VU0VEPTAsCisJRU5BQkxFRCwKKwlESVNBQkxFRCwKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKQEAgLTYyMiw3ICs2MjUsNiBAQAogCVNDSUZBX1NDSUZBMSwKIAlGTENUTF9GTFNURUksRkxDVExfRkxURU5ESSxGTENUTF9GTFRSRVEwSSxGTENUTF9GTFRSRVExSSwKIAlJMkNfQUxJLEkyQ19UQUNLSSxJMkNfV0FJVEksSTJDX0RURUksCi0JU0RISTBfU0RISUkwLFNESEkwX1NESElJMSxTREhJMF9TREhJSTIsCiAJQ01UX0NNVEksCiAJVFNJRl9UU0lGSSwKIAlTSVVfU0lVSSwKQEAgLTYzMCw3ICs2MzIsNiBAQAogCVRNVTBfVFVOSTAsIFRNVTBfVFVOSTEsIFRNVTBfVFVOSTIsCiAJSVJEQV9JUkRBSSwKIAlBVEFQSV9BVEFQSUksCi0JU0RISTFfU0RISUkwLFNESEkxX1NESElJMSxTREhJMV9TREhJSTIsCiAJVkVVMkgxX1ZFVTJISSwKIAlMQ0RDX0xDRENJLAogCVRNVTFfVFVOSTAsVE1VMV9UVU5JMSxUTVUxX1RVTkkyLApAQCAtNzAxLDkgKzcwMiw5IEBACiAJSU5UQ19WRUNUKEkyQ19XQUlUSSwweEU0MCksCiAJSU5UQ19WRUNUKEkyQ19EVEVJLDB4RTYwKSwKIAotCUlOVENfVkVDVChTREhJMF9TREhJSTAsMHhFODApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTEsMHhFQTApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTIsMHhFQzApLAorCUlOVENfVkVDVChTREhJMCwgMHhFODApLAorCUlOVENfVkVDVChTREhJMCwgMHhFQTApLAorCUlOVENfVkVDVChTREhJMCwgMHhFQzApLAogCiAJSU5UQ19WRUNUKENNVF9DTVRJLDB4RjAwKSwKIAlJTlRDX1ZFQ1QoVFNJRl9UU0lGSSwweEYyMCksCkBAIC03MTcsOSArNzE4LDkgQEAKIAlJTlRDX1ZFQ1QoSVJEQV9JUkRBSSwweDQ4MCksCiAJSU5UQ19WRUNUKEFUQVBJX0FUQVBJSSwweDRBMCksCiAKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkwLDB4NEUwKSwKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkxLDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkyLDB4NTIwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NEUwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTIwKSwKIAogCUlOVENfVkVDVChWRVUySDFfVkVVMkhJLDB4NTYwKSwKIAlJTlRDX1ZFQ1QoTENEQ19MQ0RDSSwweDU4MCksCkBAIC03MzgsMTUgKzczOSwxNCBAQAogCUlOVENfR1JPVVAoRkxDVEwsRkxDVExfRkxTVEVJLEZMQ1RMX0ZMVEVOREksRkxDVExfRkxUUkVRMEksRkxDVExfRkxUUkVRMUkpLAogCUlOVENfR1JPVVAoSTJDLEkyQ19BTEksSTJDX1RBQ0tJLEkyQ19XQUlUSSxJMkNfRFRFSSksCiAJSU5UQ19HUk9VUChfMkRHLCBfMkRHX1RSSSxfMkRHX0lOSSxfMkRHX0NFSSksCi0JSU5UQ19HUk9VUChTREhJMSwgU0RISTFfU0RISUkwLFNESEkxX1NESElJMSxTREhJMV9TREhJSTIpLAogCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLFJUQ19QUkksUlRDX0NVSSksCiAJSU5UQ19HUk9VUChETUFDMUIsIERNQUMxQl9ERUk0LERNQUMxQl9ERUk1LERNQUMxQl9EQURFUlIpLAotCUlOVENfR1JPVVAoU0RISTAsU0RISTBfU0RISUkwLFNESEkwX1NESElJMSxTREhJMF9TREhJSTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4YTQwODAwODAsIDB4YTQwODAwYzAsIDgsIC8qIElNUjAgLyBJTUNSMCAqLwotCSAgeyAwLCAgVE1VMV9UVU5JMixUTVUxX1RVTkkxLFRNVTFfVFVOSTAsMCxTREhJMV9TREhJSTIsU0RISTFfU0RISUkxLFNESEkxX1NESElJMH0gfSwKKwkgIHsgMCwgVE1VMV9UVU5JMiwgVE1VMV9UVU5JMSwgVE1VMV9UVU5JMCwKKwkgICAgMCwgRElTQUJMRUQsIEVOQUJMRUQsIEVOQUJMRUQgfSB9LAogCXsgMHhhNDA4MDA4NCwgMHhhNDA4MDBjNCwgOCwgLyogSU1SMSAvIElNQ1IxICovCiAJICB7IFZJT19WT1VJLCBWSU9fVkVVMkhJLFZJT19CRVVJLFZJT19DRVVJLERNQUMwQV9ERUkzLERNQUMwQV9ERUkyLERNQUMwQV9ERUkxLERNQUMwQV9ERUkwIH0gfSwKIAl7IDB4YTQwODAwODgsIDB4YTQwODAwYzgsIDgsIC8qIElNUjIgLyBJTUNSMiAqLwpAQCAtNzYzLDcgKzc2Myw4IEBACiAJICB7IEkyQ19EVEVJLCBJMkNfV0FJVEksIEkyQ19UQUNLSSwgSTJDX0FMSSwKIAkgICAgRkxDVExfRkxUUkVRMUksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFNURUkgfSB9LAogCXsgMHhhNDA4MDBhMCwgMHhhNDA4MDBlMCwgOCwgLyogSU1SOCAvIElNQ1I4ICovCi0JICB7IDAsU0RISTBfU0RISUkyLFNESEkwX1NESElJMSxTREhJMF9TREhJSTAsMCwwLFNDSUZBX1NDSUZBMixTSVVfU0lVSSB9IH0sCisJICB7IDAsIERJU0FCTEVELCBFTkFCTEVELCBFTkFCTEVELAorCSAgICAwLCAwLCBTQ0lGQV9TQ0lGQTIsIFNJVV9TSVVJIH0gfSwKIAl7IDB4YTQwODAwYTQsIDB4YTQwODAwZTQsIDgsIC8qIElNUjkgLyBJTUNSOSAqLwogCSAgeyAwLCAwLCAwLCBDTVRfQ01USSwgMCwgMCwgVVNCX1VTSTAsMCB9IH0sCiAJeyAweGE0MDgwMGE4LCAweGE0MDgwMGU4LCA4LCAvKiBJTVIxMCAvIElNQ1IxMCAqLwpAQCAtODAzLDkgKzgwNCwxMyBAQAogCSAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y19kZXNjLCAic2g3NzIzIiwgdmVjdG9ycywgZ3JvdXBzLAotCQkJICAgICBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywKLQkJCSAgICAgYWNrX3JlZ2lzdGVycyk7CitzdGF0aWMgc3RydWN0IGludGNfZGVzYyBpbnRjX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJzaDc3MjMiLAorCS5mb3JjZV9lbmFibGUgPSBFTkFCTEVELAorCS5mb3JjZV9kaXNhYmxlID0gRElTQUJMRUQsCisJLmh3ID0gSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdpc3RlcnMsCisJCQkgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKSwKK307CiAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCmluZGV4IGQzMmY5NmMuLjMxZTM0NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCkBAIC03MTQsMTQgKzcxNCwxNyBAQAogI2RlZmluZSBSQU1DUl9DQUNIRV9MMkZDCTB4MDAwMgogI2RlZmluZSBSQU1DUl9DQUNIRV9MMkUJCTB4MDAwMQogI2RlZmluZSBMMl9DQUNIRV9FTkFCTEUJCShSQU1DUl9DQUNIRV9MMkV8UkFNQ1JfQ0FDSEVfTDJGQykKLXZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgbDJfY2FjaGVfaW5pdCh2b2lkKQorCit2b2lkIGwyX2NhY2hlX2luaXQodm9pZCkKIHsKIAkvKiBFbmFibGUgTDIgY2FjaGUgKi8KLQljdHJsX291dGwoTDJfQ0FDSEVfRU5BQkxFLCBSQU1DUik7CisJX19yYXdfd3JpdGVsKEwyX0NBQ0hFX0VOQUJMRSwgUkFNQ1IpOwogfQogCiBlbnVtIHsKIAlVTlVTRUQgPSAwLAorCUVOQUJMRUQsCisJRElTQUJMRUQsCiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCkBAIC03NTAsMTQgKzc1MywxMiBAQAogCUVUSEksCiAJSTJDMV9BTEksIEkyQzFfVEFDS0ksIEkyQzFfV0FJVEksIEkyQzFfRFRFSSwKIAlJMkMwX0FMSSwgSTJDMF9UQUNLSSwgSTJDMF9XQUlUSSwgSTJDMF9EVEVJLAotCVNESEkwX1NESElJMCwgU0RISTBfU0RISUkxLCBTREhJMF9TREhJSTIsIFNESEkwX1NESElJMywKIAlDTVQsCiAJVFNJRiwKIAlGU0ksCiAJU0NJRkE1LAogCVRNVTBfVFVOSTAsIFRNVTBfVFVOSTEsIFRNVTBfVFVOSTIsCiAJSVJEQSwKLQlTREhJMV9TREhJSTAsIFNESEkxX1NESElJMSwgU0RISTFfU0RISUkyLAogCUpQVSwKIAlfMkRETUFDLAogCU1NQ19NTUMySSwgTU1DX01NQzNJLApAQCAtODM5LDEwICs4NDAsMTAgQEAKIAlJTlRDX1ZFQ1QoSTJDMF9XQUlUSSwgMHhFNDApLAogCUlOVENfVkVDVChJMkMwX0RURUksIDB4RTYwKSwKIAotCUlOVENfVkVDVChTREhJMF9TREhJSTAsIDB4RTgwKSwKLQlJTlRDX1ZFQ1QoU0RISTBfU0RISUkxLCAweEVBMCksCi0JSU5UQ19WRUNUKFNESEkwX1NESElJMiwgMHhFQzApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTMsIDB4RUUwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RTgwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUEwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUMwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUUwKSwKIAogCUlOVENfVkVDVChDTVQsICAgIDB4RjAwKSwKIAlJTlRDX1ZFQ1QoVFNJRiwgICAweEYyMCksCkBAIC04NTUsOSArODU2LDkgQEAKIAogCUlOVENfVkVDVChJUkRBLCAgICAweDQ4MCksCiAKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkwLCAweDRFMCksCi0JSU5UQ19WRUNUKFNESEkxX1NESElJMSwgMHg1MDApLAotCUlOVENfVkVDVChTREhJMV9TREhJSTIsIDB4NTIwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NEUwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTIwKSwKIAogCUlOVENfVkVDVChKUFUsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoXzJERE1BQywgMHg0QTApLApAQCAtODgzLDggKzg4NCw2IEBACiAJSU5UQ19HUk9VUChETUFDMEIsIERNQUMwQl9ERUk0LCBETUFDMEJfREVJNSwgRE1BQzBCX0RBREVSUiksCiAJSU5UQ19HUk9VUChJMkMwLCBJMkMwX0FMSSwgSTJDMF9UQUNLSSwgSTJDMF9XQUlUSSwgSTJDMF9EVEVJKSwKIAlJTlRDX0dST1VQKEkyQzEsIEkyQzFfQUxJLCBJMkMxX1RBQ0tJLCBJMkMxX1dBSVRJLCBJMkMxX0RURUkpLAotCUlOVENfR1JPVVAoU0RISTAsIFNESEkwX1NESElJMCwgU0RISTBfU0RISUkxLCBTREhJMF9TREhJSTIsIFNESEkwX1NESElJMyksCi0JSU5UQ19HUk9VUChTREhJMSwgU0RISTFfU0RISUkwLCBTREhJMV9TREhJSTEsIFNESEkxX1NESElJMiksCiAJSU5UQ19HUk9VUChTUFUsIFNQVV9TUFVJMCwgU1BVX1NQVUkxKSwKIAlJTlRDX0dST1VQKE1NQ0lGLCBNTUNfTU1DMkksIE1NQ19NTUMzSSksCiB9OwpAQCAtODkyLDcgKzg5MSw3IEBACiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhhNDA4MDA4MCwgMHhhNDA4MDBjMCwgOCwgLyogSU1SMCAvIElNQ1IwICovCiAJICB7IDAsIFRNVTFfVFVOSTIsIFRNVTFfVFVOSTEsIFRNVTFfVFVOSTAsCi0JICAgIDAsIFNESEkxX1NESElJMiwgU0RISTFfU0RISUkxLCBTREhJMV9TREhJSTAgfSB9LAorCSAgICAwLCBESVNBQkxFRCwgRU5BQkxFRCwgRU5BQkxFRCB9IH0sCiAJeyAweGE0MDgwMDg0LCAweGE0MDgwMGM0LCA4LCAvKiBJTVIxIC8gSU1DUjEgKi8KIAkgIHsgVklPX1ZPVSwgVklPX1ZFVTEsIFZJT19CRVUwLCBWSU9fQ0VVMCwKIAkgICAgRE1BQzBBX0RFSTMsIERNQUMwQV9ERUkyLCBETUFDMEFfREVJMSwgRE1BQzBBX0RFSTAgfSB9LApAQCAtOTE0LDcgKzkxMyw3IEBACiAJICB7IEkyQzBfRFRFSSwgSTJDMF9XQUlUSSwgSTJDMF9UQUNLSSwgSTJDMF9BTEksCiAJICAgIEkyQzFfRFRFSSwgSTJDMV9XQUlUSSwgSTJDMV9UQUNLSSwgSTJDMV9BTEkgfSB9LAogCXsgMHhhNDA4MDBhMCwgMHhhNDA4MDBlMCwgOCwgLyogSU1SOCAvIElNQ1I4ICovCi0JICB7IFNESEkwX1NESElJMywgU0RISTBfU0RISUkyLCBTREhJMF9TREhJSTEsIFNESEkwX1NESElJMCwKKwkgIHsgRElTQUJMRUQsIERJU0FCTEVELCBFTkFCTEVELCBFTkFCTEVELAogCSAgICAwLCAwLCBTQ0lGQTUsIEZTSSB9IH0sCiAJeyAweGE0MDgwMGE0LCAweGE0MDgwMGU0LCA4LCAvKiBJTVI5IC8gSU1DUjkgKi8KIAkgIHsgMCwgMCwgMCwgQ01ULCAwLCBVU0IxLCBVU0IwLCAwIH0gfSwKQEAgLTk2MSw5ICs5NjAsMTMgQEAKIAkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzYywgInNoNzcyNCIsIHZlY3RvcnMsIGdyb3VwcywKLQkJCSAgICAgbWFza19yZWdpc3RlcnMsIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsCi0JCQkgICAgIGFja19yZWdpc3RlcnMpOworc3RhdGljIHN0cnVjdCBpbnRjX2Rlc2MgaW50Y19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3NzI0IiwKKwkuZm9yY2VfZW5hYmxlID0gRU5BQkxFRCwKKwkuZm9yY2VfZGlzYWJsZSA9IERJU0FCTEVELAorCS5odyA9IElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyksCit9OwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYwppbmRleCAzN2UzMmVmLi5lNzVlZGY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYwpAQCAtNDg3LDE3ICs0ODcsMTcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCS8qIGRpc2FibGUgaG9sZGluZyBmdW5jdGlvbiwgaWUgZW5hYmxlICJTSC00IE1vZGUiICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTUwNywzMiArNTA3LDMyIEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJRMzIxMDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCmluZGV4IDZhYmEyNmYuLjdmNmIwYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCkBAIC01MzgsMTEgKzUzOCwxMSBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTctMCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTU1MiwyNyArNTUyLDI3IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJxX2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmw3NjU0X2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDMyMTBfZGVzYyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NzAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCmluZGV4IGMxNjQzYmMuLjg2ZDY4MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCkBAIC02OTQsMTcgKzY5NCwxNyBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTctMCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCiAJLyogZGlzYWJsZSBob2xkaW5nIGZ1bmN0aW9uLCBpZSBlbmFibGUgIlNILTQgTW9kZSIgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtNzE0LDI3ICs3MTQsMjcgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUToKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcnFfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDc2NTRfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsMzIxMF9kZXNjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggYzMxMDU1OC4uZjhmMjE2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTQ2MSwxNyArNDYxLDE3IEBACiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewogCS8qIGRpc2FibGUgSVJRNy0wICovCi0JY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisJX19yYXdfd3JpdGVsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CiAKIAkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOwotCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCV9fcmF3X3dyaXRlbCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCV9fcmF3X3dyaXRlbCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOwogCiAJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAKIAkvKiBkaXNhYmxlIGhvbGRpbmcgZnVuY3Rpb24sIGllIGVuYWJsZSAiU0gtNCBNb2RlIiAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiB9CkBAIC00ODEsMjcgKzQ4MSwyNyBAQAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lycV9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0OgogCQkvKiBlbmFibGUgSVJMNy00IGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTA6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgogCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsNzY1NF9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmwzMjEwX2Rlc2MpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCBmNjg1YjliLi4yMzQ0OGQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtNTQxLDE3ICs1NDEsMTcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCS8qIGRpc2FibGUgaG9sZGluZyBmdW5jdGlvbiwgaWUgZW5hYmxlICJTSC00IE1vZGUiICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTU2MSwzMiArNTYxLDMyIEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJRMzIxMDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCmluZGV4IDcxNjczNDguLjdlNTg1MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCkBAIC04NjcsMTQgKzg2NywxNCBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTMtMCArIElSUTctNCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtODg0LDMyICs4ODQsMzIgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUTc2NTQ6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnE0NTY3KTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUlEzMjEwOgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxMDEyMyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmwwMTIzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jCmluZGV4IDU4NjNlMGMuLjExYmY0YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYwpAQCAtNzgsNyArNzgsMTAgQEAKIAogdm9pZCBwbGF0X3N0YXJ0X2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGVudHJ5X3BvaW50KQogewotCV9fcmF3X3dyaXRlbChlbnRyeV9wb2ludCwgUkVTRVRfUkVHKGNwdSkpOworCWlmIChfX2luXzI5Yml0X21vZGUoKSkKKwkJX19yYXdfd3JpdGVsKGVudHJ5X3BvaW50LCBSRVNFVF9SRUcoY3B1KSk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGVudHJ5X3BvaW50KSwgUkVTRVRfUkVHKGNwdSkpOwogCiAJaWYgKCEoX19yYXdfcmVhZGwoU1RCQ1JfUkVHKGNwdSkpICYgU1RCQ1JfTVNUUCkpCiAJCV9fcmF3X3dyaXRlbChTVEJDUl9NU1RQLCBTVEJDUl9SRUcoY3B1KSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS91YmMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3ViYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjI3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS91YmMuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL3ViYy5jCisgKgorICogT24tY2hpcCBVQkMgc3VwcG9ydCBmb3IgU0gtNEEgQ1BVcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vaHdfYnJlYWtwb2ludC5oPgorCisjZGVmaW5lIFVCQ19DQlIoaWR4KQkoMHhmZjIwMDAwMCArICgweDIwICogaWR4KSkKKyNkZWZpbmUgVUJDX0NSUihpZHgpCSgweGZmMjAwMDA0ICsgKDB4MjAgKiBpZHgpKQorI2RlZmluZSBVQkNfQ0FSKGlkeCkJKDB4ZmYyMDAwMDggKyAoMHgyMCAqIGlkeCkpCisjZGVmaW5lIFVCQ19DQU1SKGlkeCkJKDB4ZmYyMDAwMGMgKyAoMHgyMCAqIGlkeCkpCisKKyNkZWZpbmUgVUJDX0NDTUZSCTB4ZmYyMDA2MDAKKyNkZWZpbmUgVUJDX0NCQ1IJMHhmZjIwMDYyMAorCisvKiBDUlIgKi8KKyNkZWZpbmUgVUJDX0NSUl9QQ0IJKDEgPDwgMSkKKyNkZWZpbmUgVUJDX0NSUl9CSUUJKDEgPDwgMCkKKworLyogQ0JSICovCisjZGVmaW5lIFVCQ19DQlJfQ0UJKDEgPDwgMCkKKworc3RhdGljIHN0cnVjdCBzaF91YmMgc2g0YV91YmM7CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2VuYWJsZShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvLCBpbnQgaWR4KQoreworCV9fcmF3X3dyaXRlbChVQkNfQ0JSX0NFIHwgaW5mby0+bGVuIHwgaW5mby0+dHlwZSwgVUJDX0NCUihpZHgpKTsKKwlfX3Jhd193cml0ZWwoaW5mby0+YWRkcmVzcywgVUJDX0NBUihpZHgpKTsKK30KKworc3RhdGljIHZvaWQgc2g0YV91YmNfZGlzYWJsZShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvLCBpbnQgaWR4KQoreworCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0JSKGlkeCkpOworCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0FSKGlkeCkpOworfQorCitzdGF0aWMgdm9pZCBzaDRhX3ViY19lbmFibGVfYWxsKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaDRhX3ViYy5udW1fZXZlbnRzOyBpKyspCisJCWlmIChtYXNrICYgKDEgPDwgaSkpCisJCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVUJDX0NCUihpKSkgfCBVQkNfQ0JSX0NFLAorCQkJCSAgICAgVUJDX0NCUihpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2Rpc2FibGVfYWxsKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2g0YV91YmMubnVtX2V2ZW50czsgaSsrKQorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVUJDX0NCUihpKSkgJiB+VUJDX0NCUl9DRSwKKwkJCSAgICAgVUJDX0NCUihpKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoNGFfdWJjX2FjdGl2ZV9tYXNrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhY3RpdmUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNoNGFfdWJjLm51bV9ldmVudHM7IGkrKykKKwkJaWYgKF9fcmF3X3JlYWRsKFVCQ19DQlIoaSkpICYgVUJDX0NCUl9DRSkKKwkJCWFjdGl2ZSB8PSAoMSA8PCBpKTsKKworCXJldHVybiBhY3RpdmU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoNGFfdWJjX3RyaWdnZXJlZF9tYXNrKHZvaWQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKFVCQ19DQ01GUik7Cit9CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2NsZWFyX3RyaWdnZXJlZF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVUJDX0NDTUZSKSAmIH5tYXNrLCBVQkNfQ0NNRlIpOworfQorCitzdGF0aWMgc3RydWN0IHNoX3ViYyBzaDRhX3ViYyA9IHsKKwkubmFtZQkJCT0gIlNILTRBIiwKKwkubnVtX2V2ZW50cwkJPSAyLAorCS50cmFwX25yCQk9IDB4MWUwLAorCS5lbmFibGUJCQk9IHNoNGFfdWJjX2VuYWJsZSwKKwkuZGlzYWJsZQkJPSBzaDRhX3ViY19kaXNhYmxlLAorCS5lbmFibGVfYWxsCQk9IHNoNGFfdWJjX2VuYWJsZV9hbGwsCisJLmRpc2FibGVfYWxsCQk9IHNoNGFfdWJjX2Rpc2FibGVfYWxsLAorCS5hY3RpdmVfbWFzawkJPSBzaDRhX3ViY19hY3RpdmVfbWFzaywKKwkudHJpZ2dlcmVkX21hc2sJCT0gc2g0YV91YmNfdHJpZ2dlcmVkX21hc2ssCisJLmNsZWFyX3RyaWdnZXJlZF9tYXNrCT0gc2g0YV91YmNfY2xlYXJfdHJpZ2dlcmVkX21hc2ssCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaDRhX3ViY19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqdWJjX2ljbGsgPSBjbGtfZ2V0KE5VTEwsICJ1YmMwIik7CisJaW50IGk7CisKKwkvKgorCSAqIFRoZSBVQkMgTVNUUCBiaXQgaXMgb3B0aW9uYWwsIGFzIG5vdCBhbGwgcGxhdGZvcm1zIHdpbGwgaGF2ZQorCSAqIGl0LiBKdXN0IGlnbm9yZSBpdCBpZiB3ZSBjYW4ndCBmaW5kIGl0LgorCSAqLworCWlmIChJU19FUlIodWJjX2ljbGspKQorCQl1YmNfaWNsayA9IE5VTEw7CisKKwljbGtfZW5hYmxlKHViY19pY2xrKTsKKworCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0JDUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2g0YV91YmMubnVtX2V2ZW50czsgaSsrKSB7CisJCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0FNUihpKSk7CisJCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0JSKGkpKTsKKworCQlfX3Jhd193cml0ZWwoVUJDX0NSUl9CSUUgfCBVQkNfQ1JSX1BDQiwgVUJDX0NSUihpKSk7CisKKwkJLyogZHVtbXkgcmVhZCBmb3Igd3JpdGUgcG9zdGluZyAqLworCQkodm9pZClfX3Jhd19yZWFkbChVQkNfQ1JSKGkpKTsKKwl9CisKKwljbGtfZGlzYWJsZSh1YmNfaWNsayk7CisKKwlzaDRhX3ViYy5jbGsgPSB1YmNfaWNsazsKKworCXJldHVybiByZWdpc3Rlcl9zaF91YmMoJnNoNGFfdWJjKTsKK30KK2FyY2hfaW5pdGNhbGwoc2g0YV91YmNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwppbmRleCA3Zjg2NGViLi45Y2ZjMTliIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvY2xvY2stc2g1LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKGNwcmNfYmFzZSArIDB4MDApID4+IDYpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZGwoY3ByY19iYXNlICsgMHgwMCkgPj4gNikgJiAweDAwMDc7CiAJY2xrLT5yYXRlICo9IGlmY190YWJsZVtpZHhdOwogfQogCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMTIpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoY3ByY19iYXNlKSA+PiAxMikgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07CiB9CiAKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSA+PiAzKSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KGNwcmNfYmFzZSkgPj4gMykgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07CiB9CiAKQEAgLTU0LDcgKzU0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhjcHJjX2Jhc2UpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9lbnRyeS5TCmluZGV4IDhmMTNmNzMuLjZiODAyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2VudHJ5LlMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCS5yZXB0IDYKIAkJLmxvbmcgZG9fZXhjZXB0aW9uX2Vycm9yCS8qIDB4ODgwIC0gMHg5MjAgKi8KIAkuZW5kcgotCS5sb25nCWRvX3NvZnR3YXJlX2JyZWFrX3BvaW50CS8qIDB4OTQwICovCisJLmxvbmcJYnJlYWtwb2ludF90cmFwX2hhbmRsZXIJLyogMHg5NDAgKi8KIAkubG9uZwlkb19leGNlcHRpb25fZXJyb3IJCS8qIDB4OTYwICovCiAJLmxvbmcJZG9fc2luZ2xlX3N0ZXAJCS8qIDB4OTgwICovCiAKQEAgLTExMjQsNyArMTEyNCw3IEBACiAJcHRhCWl0c19JUlEsIHRyMAogCWJlcWkvbAlyNCwgRVZFTlRfSU5URVJSVVBULCB0cjAKICNpZmRlZiBDT05GSUdfU0hfRlBVCi0JbW92aQlkb19mcHVfc3RhdGVfcmVzdG9yZSwgcjYKKwltb3ZpCWZwdV9zdGF0ZV9yZXN0b3JlX3RyYXBfaGFuZGxlciwgcjYKICNlbHNlCiAJbW92aQlkb19leGNlcHRpb25fZXJyb3IsIHI2CiAjZW5kaWYKQEAgLTExMzUsNyArMTEzNSw3IEBACiAJcHRhCWl0c19JUlEsIHRyMAogCWJlcWkvbAlyNCwgRVZFTlRfSU5URVJSVVBULCB0cjAKICNpZmRlZiBDT05GSUdfU0hfRlBVCi0JbW92aQlkb19mcHVfc3RhdGVfcmVzdG9yZSwgcjYKKwltb3ZpCWZwdV9zdGF0ZV9yZXN0b3JlX3RyYXBfaGFuZGxlciwgcjYKICNlbHNlCiAJbW92aQlkb19leGNlcHRpb25fZXJyb3IsIHI2CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2ZwdS5jCmluZGV4IDQ2NDhjY2UuLjRiM2JiMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9mcHUuYwpAQCAtMTUsMjQgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vdXNlci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9mcHUuaD4KLQotLyoKLSAqIEluaXRpYWxseSBsb2FkIHRoZSBGUFUgd2l0aCBzaWduYWxsaW5nIE5BTlMuICBUaGlzIGJpdCBwYXR0ZXJuCi0gKiBoYXMgdGhlIHByb3BlcnR5IHRoYXQgbm8gbWF0dGVyIHdoZXRoZXIgY29uc2lkZXJlZCBhcyBzaW5nbGUgb3IgYXMKLSAqIGRvdWJsZSBwcmVjaXNpb24sIGl0IHN0aWxsIHJlcHJlc2VudHMgYSBzaWduYWxsaW5nIE5BTi4KLSAqLwotI2RlZmluZSBzTkFONjQJCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAotI2RlZmluZSBzTkFOMzIJCTB4RkZGRkZGRkZVTAotCi1zdGF0aWMgdW5pb24gc2hfZnB1X3VuaW9uIGluaXRfZnB1cmVncyA9IHsKLQkuaGFyZCA9IHsKLQkJLmZwX3JlZ3MgPSB7IFswIC4uLiA2M10gPSBzTkFOMzIgfSwKLQkJLmZwc2NyID0gRlBTQ1JfSU5JVAotCX0KLX07CiAKIHZvaWQgc2F2ZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CkBAIC03MiwxMiArNTQsMTEgQEAKIAkJICAgICAiZmdldHNjciAgIGZyNjNcblx0IgogCQkgICAgICJmc3QucyAgICAgJTAsICgzMio4KSwgZnI2M1xuXHQiCiAJCTogLyogbm8gb3V0cHV0ICovCi0JCTogInIiICgmdHNrLT50aHJlYWQuZnB1LmhhcmQpCisJCTogInIiICgmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1KQogCQk6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1mcGxvYWQoc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCAqZnByZWdzKQordm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlhc20gdm9sYXRpbGUoImZsZC5wICAgICAlMCwgKDAqOCksIGZwMFxuXHQiCiAJCSAgICAgImZsZC5wICAgICAlMCwgKDEqOCksIGZwMlxuXHQiCkBAIC0xMTYsMTYgKzk3LDExIEBACiAKIAkJICAgICAiZmxkLnAgICAgICUwLCAoMzEqOCksIGZwNjJcblx0IgogCQk6IC8qIG5vIG91dHB1dCAqLwotCQk6ICJyIiAoZnByZWdzKSApOworCQk6ICJyIiAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSkKKwkJOiAibWVtb3J5Iik7CiB9CiAKLXZvaWQgZnBpbml0KHN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgKmZwcmVncykKLXsKLQkqZnByZWdzID0gaW5pdF9mcHVyZWdzLmhhcmQ7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZAotZG9fZnB1X2Vycm9yKHVuc2lnbmVkIGxvbmcgZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIGRvX2ZwdV9lcnJvcih1bnNpZ25lZCBsb25nIGV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKQEAgLTEzMywzNSArMTA5LDYgQEAKIAogCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxMTsKIAl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gMDsKKwogCWZvcmNlX3NpZyhTSUdGUEUsIHRzayk7CiB9Ci0KLQotYXNtbGlua2FnZSB2b2lkCi1kb19mcHVfc3RhdGVfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl2b2lkIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycik7Ci0KLQlpZiAoISB1c2VyX21vZGUocmVncykpCi0JCWRpZSgiRlBVIHVzZWQgaW4ga2VybmVsIiwgcmVncywgZXgpOwotCi0JcmVncy0+c3IgJj0gflNSX0ZEOwotCi0JaWYgKGxhc3RfdGFza191c2VkX21hdGggPT0gY3VycmVudCkKLQkJcmV0dXJuOwotCi0JZW5hYmxlX2ZwdSgpOwotCWlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoICE9IE5VTEwpCi0JCS8qIE90aGVyIHByb2Nlc3NlcyBmcHUgc3RhdGUsIHNhdmUgYXdheSAqLwotCQlzYXZlX2ZwdShsYXN0X3Rhc2tfdXNlZF9tYXRoKTsKLQotICAgICAgICBsYXN0X3Rhc2tfdXNlZF9tYXRoID0gY3VycmVudDsKLSAgICAgICAgaWYgKHVzZWRfbWF0aCgpKSB7Ci0gICAgICAgICAgICAgICAgZnBsb2FkKCZjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQpOwotICAgICAgICB9IGVsc2UgewotCQkvKiBGaXJzdCB0aW1lIEZQVSB1c2VyLiAgKi8KLQkJZnBsb2FkKCZpbml0X2ZwdXJlZ3MuaGFyZCk7Ci0gICAgICAgICAgICAgICAgc2V0X3VzZWRfbWF0aCgpOwotICAgICAgICB9Ci0JZGlzYWJsZV9mcHUoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKaW5kZXggY2EwMjlhNC4uZTU1OTY4NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKQEAgLTMzLDcgKzMzLDggQEAKICNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQCQkoU1VTUF9TSF9TTEVFUCkKICNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQX1NGCShTVVNQX1NIX1NMRUVQIHwgU1VTUF9TSF9TRikKICNkZWZpbmUgU1VTUF9NT0RFX1NUQU5EQllfU0YJKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YpCi0jZGVmaW5lIFNVU1BfTU9ERV9SU1RBTkRCWQkoU1VTUF9TSF9SU1RBTkRCWSB8IFNVU1BfU0hfTU1VIHwgU1VTUF9TSF9TRikKKyNkZWZpbmUgU1VTUF9NT0RFX1JTVEFOREJZX1NGIFwKKwkoU1VTUF9TSF9SU1RBTkRCWSB8IFNVU1BfU0hfTU1VIHwgU1VTUF9TSF9SRUdTIHwgU1VTUF9TSF9TRikKICAvKgogICAqIFUtc3RhbmRieSBtb2RlIGlzIHVuc3VwcG9ydGVkIHNpbmNlIGl0IG5lZWRzIGJvb3Rsb2FkZXIgaGFja3MKICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKaW5kZXggZTlkZDdmYS4uZTZhYWM2NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKQEAgLTQ4LDggKzQ4LDQ4IEBACiAJc3RjCXNyLCByMAogCW1vdi5sCXIwLCBAKFNIX1NMRUVQX1NSLCByNSkKIAotCS8qIHNhdmUgc3AgKi8KKwkvKiBzYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgdG8gc3RhY2sgaWYgbmVlZGVkICovCisJbW92LmwJQChTSF9TTEVFUF9NT0RFLCByNSksIHIwCisJdHN0CSNTVVNQX1NIX1JFR1MsIHIwCisJYnQJc2tpcF9yZWdzX3NhdmUKKworCXN0cy5sCXByLCBALXIxNQorCW1vdi5sCXIxNCwgQC1yMTUKKwltb3YubAlyMTMsIEAtcjE1CisJbW92LmwJcjEyLCBALXIxNQorCW1vdi5sCXIxMSwgQC1yMTUKKwltb3YubAlyMTAsIEAtcjE1CisJbW92LmwJcjksIEAtcjE1CisJbW92LmwJcjgsIEAtcjE1CisKKwkvKiBtYWtlIHN1cmUgYmFuazAgaXMgc2VsZWN0ZWQsIHNhdmUgbG93IHJlZ2lzdGVycyAqLworCW1vdi5sCXJiX2JpdCwgcjkKKwlub3QJcjksIHI5CisJYnNyCXNldF9zcgorCSBtb3YJIzAsIHIxMAorCisJYnNyCXNhdmVfbG93X3JlZ3MKKwkgbm9wCisKKwkvKiBzd2l0Y2ggdG8gYmFuayAxLCBzYXZlIGxvdyByZWdpc3RlcnMgKi8KKwltb3YubAlyYl9iaXQsIHIxMAorCWJzcglzZXRfc3IKKwkgbW92CSMtMSwgcjkKKworCWJzcglzYXZlX2xvd19yZWdzCisJIG5vcAorCisJLyogc3dpdGNoIGJhY2sgdG8gYmFuayAwICovCisJbW92LmwJcmJfYml0LCByOQorCW5vdAlyOSwgcjkKKwlic3IJc2V0X3NyCisJIG1vdgkjMCwgcjEwCisKK3NraXBfcmVnc19zYXZlOgorCisJLyogc2F2ZSBzcCwgYWxzbyBzZXQgdG8gaW50ZXJuYWwgcmFtICovCiAJbW92LmwJcjE1LCBAKFNIX1NMRUVQX1NQLCByNSkKKwltb3YJcjUsIHIxNQogCiAJLyogc2F2ZSBzdGJjciAqLwogCWJzciAgICAgc2F2ZV9yZWdpc3RlcgpAQCAtNjAsNyArMTAwLDcgQEAKIAl0c3QJI1NVU1BfU0hfTU1VLCByMAogCWJ0CXNraXBfbW11X3NhdmVfZGlzYWJsZQogCi0gICAgICAgLyogc2F2ZSBtbXUgc3RhdGUgKi8KKwkvKiBzYXZlIG1tdSBzdGF0ZSAqLwogCWJzcglzYXZlX3JlZ2lzdGVyCiAJIG1vdgkjU0hfU0xFRVBfUkVHX1BURUgsIHIwCiAKQEAgLTE3Nyw2ICsyMTcsMjkgQEAKIAltb3YubAlAKHIwLCByNSksIHIwCiAJcnRzCiAJIG5vcAorCitzZXRfc3I6CisJc3RjCXNyLCByOAorCWFuZAlyOSwgcjgKKwlvcglyMTAsIHI4CisJbGRjCXI4LCBzcgorCXJ0cworCSBub3AKKworc2F2ZV9sb3dfcmVnczoKKwltb3YubAlyNywgQC1yMTUKKwltb3YubAlyNiwgQC1yMTUKKwltb3YubAlyNSwgQC1yMTUKKwltb3YubAlyNCwgQC1yMTUKKwltb3YubAlyMywgQC1yMTUKKwltb3YubAlyMiwgQC1yMTUKKwltb3YubAlyMSwgQC1yMTUKKwlydHMKKwkgbW92LmwJcjAsIEAtcjE1CisKKwkuYmFsaWduIDQKK3JiX2JpdDoJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKKwogRU5UUlkoc2hfbW9iaWxlX3NsZWVwX2VudGVyX2VuZCkKIAogCS5iYWxpZ24gNApAQCAtMjcwLDYgKzMzMyw0MCBAQAogCWljYmkJQHIwCiAKIHNraXBfcmVzdG9yZV9tbXU6CisKKwkvKiByZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgaWYgbmVlZGVkICovCisJbW92LmwJQChTSF9TTEVFUF9NT0RFLCByNSksIHIwCisJdHN0CSNTVVNQX1NIX1JFR1MsIHIwCisJYnQJc2tpcF9yZXN0b3JlX3JlZ3MKKworCS8qIHN3aXRjaCB0byBiYW5rIDEsIHJlc3RvcmUgbG93IHJlZ2lzdGVycyAqLworCW1vdi5sCV9yYl9iaXQsIHIxMAorCWJzcglfc2V0X3NyCisJIG1vdgkjLTEsIHI5CisKKwlic3IJcmVzdG9yZV9sb3dfcmVncworCSBub3AKKworCS8qIHN3aXRjaCB0byBiYW5rMCwgcmVzdG9yZSBsb3cgcmVnaXN0ZXJzICovCisJbW92LmwJX3JiX2JpdCwgcjkKKwlub3QJcjksIHI5CisJYnNyCV9zZXRfc3IKKwkgbW92CSMwLCByMTAKKworCWJzcglyZXN0b3JlX2xvd19yZWdzCisJIG5vcAorCisJLyogcmVzdG9yZSB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzICovCisJbW92LmwJQHIxNSssIHI4CisJbW92LmwJQHIxNSssIHI5CisJbW92LmwJQHIxNSssIHIxMAorCW1vdi5sCUByMTUrLCByMTEKKwltb3YubAlAcjE1KywgcjEyCisJbW92LmwJQHIxNSssIHIxMworCW1vdi5sCUByMTUrLCByMTQKKwlsZHMubAlAcjE1KywgcHIKKworc2tpcF9yZXN0b3JlX3JlZ3M6CiAJcnRlCiAJIG5vcAogCkBAIC0yODMsNiArMzgwLDI2IEBACiAJcnRzCiAJIG5vcAogCitfc2V0X3NyOgorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJb3IJcjEwLCByOAorCWxkYwlyOCwgc3IKKwlydHMKKwkgbm9wCisKK3Jlc3RvcmVfbG93X3JlZ3M6CisJbW92LmwJQHIxNSssIHIwCisJbW92LmwJQHIxNSssIHIxCisJbW92LmwJQHIxNSssIHIyCisJbW92LmwJQHIxNSssIHIzCisJbW92LmwJQHIxNSssIHI0CisJbW92LmwJQHIxNSssIHI1CisJbW92LmwJQHIxNSssIHI2CisJcnRzCisJIG1vdi5sCUByMTUrLCByNworCiAJLmJhbGlnbiA0CitfcmJfYml0OgkubG9uZwkweDIwMDAwMDAwICEgUkI9MQogMToJLmxvbmcJfjB4N2ZmCiBFTlRSWShzaF9tb2JpbGVfc2xlZXBfcmVzdW1lX2VuZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUyBiL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUwppbmRleCA1OTE3NDEzLi43YTFiNDZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9kZWJ1Z3RyYXBzLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZGVidWd0cmFwcy5TCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAjaWYgIWRlZmluZWQoQ09ORklHX0tHREIpCi0jZGVmaW5lIGJyZWFrcG9pbnRfdHJhcF9oYW5kbGVyCQlkZWJ1Z190cmFwX2hhbmRsZXIKICNkZWZpbmUgc2luZ2xlc3RlcF90cmFwX2hhbmRsZXIJCWRlYnVnX3RyYXBfaGFuZGxlcgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCmluZGV4IGU1MTE2ODAuLmJkMWM0OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYwpAQCAtMzksMTAgKzM5LDEwIEBACiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmR3YXJmX3JlZ19jYWNoZXA7CiBzdGF0aWMgbWVtcG9vbF90ICpkd2FyZl9yZWdfcG9vbDsKIAotc3RhdGljIExJU1RfSEVBRChkd2FyZl9jaWVfbGlzdCk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgY2llX3Jvb3Q7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGR3YXJmX2NpZV9sb2NrKTsKIAotc3RhdGljIExJU1RfSEVBRChkd2FyZl9mZGVfbGlzdCk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgZmRlX3Jvb3Q7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGR3YXJmX2ZkZV9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBkd2FyZl9jaWUgKmNhY2hlZF9jaWU7CkBAIC0zMDEsNyArMzAxLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBkd2FyZl9jaWUgKmR3YXJmX2xvb2t1cF9jaWUodW5zaWduZWQgbG9uZyBjaWVfcHRyKQogewotCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnJiX25vZGUgPSAmY2llX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgZHdhcmZfY2llICpjaWUgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHdhcmZfY2llX2xvY2ssIGZsYWdzKTsKQEAgLTMxNSwxNiArMzE2LDI0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2llLCAmZHdhcmZfY2llX2xpc3QsIGxpbmspIHsKLQkJaWYgKGNpZS0+Y2llX3BvaW50ZXIgPT0gY2llX3B0cikgewotCQkJY2FjaGVkX2NpZSA9IGNpZTsKLQkJCWJyZWFrOworCXdoaWxlICgqcmJfbm9kZSkgeworCQlzdHJ1Y3QgZHdhcmZfY2llICpjaWVfdG1wOworCisJCWNpZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2NpZSwgbm9kZSk7CisJCUJVR19PTighY2llX3RtcCk7CisKKwkJaWYgKGNpZV9wdHIgPT0gY2llX3RtcC0+Y2llX3BvaW50ZXIpIHsKKwkJCWNpZSA9IGNpZV90bXA7CisJCQljYWNoZWRfY2llID0gY2llX3RtcDsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJaWYgKGNpZV9wdHIgPCBjaWVfdG1wLT5jaWVfcG9pbnRlcikKKwkJCQlyYl9ub2RlID0gJigqcmJfbm9kZSktPnJiX2xlZnQ7CisJCQllbHNlCisJCQkJcmJfbm9kZSA9ICYoKnJiX25vZGUpLT5yYl9yaWdodDsKIAkJfQogCX0KIAotCS8qIENvdWxkbid0IGZpbmQgdGhlIGVudHJ5IGluIHRoZSBsaXN0LiAqLwotCWlmICgmY2llLT5saW5rID09ICZkd2FyZl9jaWVfbGlzdCkKLQkJY2llID0gTlVMTDsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCXJldHVybiBjaWU7CkBAIC0zMzYsMjUgKzM0NSwzNCBAQAogICovCiBzdHJ1Y3QgZHdhcmZfZmRlICpkd2FyZl9sb29rdXBfZmRlKHVuc2lnbmVkIGxvbmcgcGMpCiB7Ci0Jc3RydWN0IGR3YXJmX2ZkZSAqZmRlOworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZmZGVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCBkd2FyZl9mZGUgKmZkZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShmZGUsICZkd2FyZl9mZGVfbGlzdCwgbGluaykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJd2hpbGUgKCpyYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9mZGUgKmZkZV90bXA7CisJCXVuc2lnbmVkIGxvbmcgdG1wX3N0YXJ0LCB0bXBfZW5kOwogCi0JCXN0YXJ0ID0gZmRlLT5pbml0aWFsX2xvY2F0aW9uOwotCQllbmQgPSBmZGUtPmluaXRpYWxfbG9jYXRpb24gKyBmZGUtPmFkZHJlc3NfcmFuZ2U7CisJCWZkZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2ZkZSwgbm9kZSk7CisJCUJVR19PTighZmRlX3RtcCk7CiAKLQkJaWYgKHBjID49IHN0YXJ0ICYmIHBjIDwgZW5kKQotCQkJYnJlYWs7CisJCXRtcF9zdGFydCA9IGZkZV90bXAtPmluaXRpYWxfbG9jYXRpb247CisJCXRtcF9lbmQgPSBmZGVfdG1wLT5pbml0aWFsX2xvY2F0aW9uICsgZmRlX3RtcC0+YWRkcmVzc19yYW5nZTsKKworCQlpZiAocGMgPCB0bXBfc3RhcnQpIHsKKwkJCXJiX25vZGUgPSAmKCpyYl9ub2RlKS0+cmJfbGVmdDsKKwkJfSBlbHNlIHsKKwkJCWlmIChwYyA8IHRtcF9lbmQpIHsKKwkJCQlmZGUgPSBmZGVfdG1wOworCQkJCWdvdG8gb3V0OworCQkJfSBlbHNlCisJCQkJcmJfbm9kZSA9ICYoKnJiX25vZGUpLT5yYl9yaWdodDsKKwkJfQogCX0KIAotCS8qIENvdWxkbid0IGZpbmQgdGhlIGVudHJ5IGluIHRoZSBsaXN0LiAqLwotCWlmICgmZmRlLT5saW5rID09ICZkd2FyZl9mZGVfbGlzdCkKLQkJZmRlID0gTlVMTDsKLQorb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3YXJmX2ZkZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gZmRlOwpAQCAtNTUyLDggKzU3MCw4IEBACiAgKglvbiB0aGUgY2FsbHN0YWNrLiBFYWNoIG9mIHRoZSBsb3dlciAob2xkZXIpIHN0YWNrIGZyYW1lcyBhcmUKICAqCWxpbmtlZCB2aWEgdGhlICJwcmV2IiBtZW1iZXIuCiAgKi8KLXN0cnVjdCBkd2FyZl9mcmFtZSAqIGR3YXJmX3Vud2luZF9zdGFjayh1bnNpZ25lZCBsb25nIHBjLAotCQkJCQlzdHJ1Y3QgZHdhcmZfZnJhbWUgKnByZXYpCitzdHJ1Y3QgZHdhcmZfZnJhbWUgKmR3YXJmX3Vud2luZF9zdGFjayh1bnNpZ25lZCBsb25nIHBjLAorCQkJCSAgICAgICBzdHJ1Y3QgZHdhcmZfZnJhbWUgKnByZXYpCiB7CiAJc3RydWN0IGR3YXJmX2ZyYW1lICpmcmFtZTsKIAlzdHJ1Y3QgZHdhcmZfY2llICpjaWU7CkBAIC03MDgsNiArNzI2LDggQEAKIHN0YXRpYyBpbnQgZHdhcmZfcGFyc2VfY2llKHZvaWQgKmVudHJ5LCB2b2lkICpwLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCSAgIHVuc2lnbmVkIGNoYXIgKmVuZCwgc3RydWN0IG1vZHVsZSAqbW9kKQogeworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZjaWVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CiAJc3RydWN0IGR3YXJmX2NpZSAqY2llOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNvdW50OwpAQCAtODAyLDExICs4MjIsMzAgQEAKIAljaWUtPmluaXRpYWxfaW5zdHJ1Y3Rpb25zID0gcDsKIAljaWUtPmluc3RydWN0aW9uc19lbmQgPSBlbmQ7CiAKLQljaWUtPm1vZCA9IG1vZDsKLQogCS8qIEFkZCB0byBsaXN0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR3YXJmX2NpZV9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmY2llLT5saW5rLCAmZHdhcmZfY2llX2xpc3QpOworCisJd2hpbGUgKCpyYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9jaWUgKmNpZV90bXA7CisKKwkJY2llX3RtcCA9IHJiX2VudHJ5KCpyYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfY2llLCBub2RlKTsKKworCQlwYXJlbnQgPSAqcmJfbm9kZTsKKworCQlpZiAoY2llLT5jaWVfcG9pbnRlciA8IGNpZV90bXAtPmNpZV9wb2ludGVyKQorCQkJcmJfbm9kZSA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNpZS0+Y2llX3BvaW50ZXIgPj0gY2llX3RtcC0+Y2llX3BvaW50ZXIpCisJCQlyYl9ub2RlID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCVdBUk5fT04oMSk7CisJfQorCisJcmJfbGlua19ub2RlKCZjaWUtPm5vZGUsIHBhcmVudCwgcmJfbm9kZSk7CisJcmJfaW5zZXJ0X2NvbG9yKCZjaWUtPm5vZGUsICZjaWVfcm9vdCk7CisKKwlpZiAobW9kICE9IE5VTEwpCisJCWxpc3RfYWRkX3RhaWwoJmNpZS0+bGluaywgJm1vZC0+YXJjaC5jaWVfbGlzdCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC04MTYsNiArODU1LDggQEAKIAkJCSAgIHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCSAgIHVuc2lnbmVkIGNoYXIgKmVuZCwgc3RydWN0IG1vZHVsZSAqbW9kKQogeworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZmZGVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CiAJc3RydWN0IGR3YXJmX2ZkZSAqZmRlOwogCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODYzLDExICs5MDQsMzggQEAKIAlmZGUtPmluc3RydWN0aW9ucyA9IHA7CiAJZmRlLT5lbmQgPSBlbmQ7CiAKLQlmZGUtPm1vZCA9IG1vZDsKLQogCS8qIEFkZCB0byBsaXN0LiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJmZkZS0+bGluaywgJmR3YXJmX2ZkZV9saXN0KTsKKworCXdoaWxlICgqcmJfbm9kZSkgeworCQlzdHJ1Y3QgZHdhcmZfZmRlICpmZGVfdG1wOworCQl1bnNpZ25lZCBsb25nIHRtcF9zdGFydCwgdG1wX2VuZDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworCisJCWZkZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2ZkZSwgbm9kZSk7CisKKwkJc3RhcnQgPSBmZGUtPmluaXRpYWxfbG9jYXRpb247CisJCWVuZCA9IGZkZS0+aW5pdGlhbF9sb2NhdGlvbiArIGZkZS0+YWRkcmVzc19yYW5nZTsKKworCQl0bXBfc3RhcnQgPSBmZGVfdG1wLT5pbml0aWFsX2xvY2F0aW9uOworCQl0bXBfZW5kID0gZmRlX3RtcC0+aW5pdGlhbF9sb2NhdGlvbiArIGZkZV90bXAtPmFkZHJlc3NfcmFuZ2U7CisKKwkJcGFyZW50ID0gKnJiX25vZGU7CisKKwkJaWYgKHN0YXJ0IDwgdG1wX3N0YXJ0KQorCQkJcmJfbm9kZSA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHN0YXJ0ID49IHRtcF9lbmQpCisJCQlyYl9ub2RlID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCVdBUk5fT04oMSk7CisJfQorCisJcmJfbGlua19ub2RlKCZmZGUtPm5vZGUsIHBhcmVudCwgcmJfbm9kZSk7CisJcmJfaW5zZXJ0X2NvbG9yKCZmZGUtPm5vZGUsICZmZGVfcm9vdCk7CisKKwlpZiAobW9kICE9IE5VTEwpCisJCWxpc3RfYWRkX3RhaWwoJmZkZS0+bGluaywgJm1vZC0+YXJjaC5mZGVfbGlzdCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC05MTIsMTkgKzk4MCwyOSBAQAogCiBzdGF0aWMgdm9pZCBkd2FyZl91bndpbmRlcl9jbGVhbnVwKHZvaWQpCiB7Ci0Jc3RydWN0IGR3YXJmX2NpZSAqY2llLCAqY2llX3RtcDsKLQlzdHJ1Y3QgZHdhcmZfZmRlICpmZGUsICpmZGVfdG1wOworCXN0cnVjdCByYl9ub2RlICoqZmRlX3JiX25vZGUgPSAmZmRlX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKmNpZV9yYl9ub2RlID0gJmNpZV9yb290LnJiX25vZGU7CiAKIAkvKgogCSAqIERlYWxsb2NhdGUgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgRFdBUkYgdW53aW5kZXIuCiAJICogVHJhdmVyc2UgYWxsIHRoZSBGREUvQ0lFIGxpc3RzIGFuZCByZW1vdmUgYW5kIGZyZWUgYWxsIHRoZQogCSAqIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaWUsIGNpZV90bXAsICZkd2FyZl9jaWVfbGlzdCwgbGluaykKLQkJa2ZyZWUoY2llKTsKKwl3aGlsZSAoKmZkZV9yYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9mZGUgKmZkZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmZGUsIGZkZV90bXAsICZkd2FyZl9mZGVfbGlzdCwgbGluaykKKwkJZmRlID0gcmJfZW50cnkoKmZkZV9yYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfZmRlLCBub2RlKTsKKwkJcmJfZXJhc2UoKmZkZV9yYl9ub2RlLCAmZmRlX3Jvb3QpOwogCQlrZnJlZShmZGUpOworCX0KKworCXdoaWxlICgqY2llX3JiX25vZGUpIHsKKwkJc3RydWN0IGR3YXJmX2NpZSAqY2llOworCisJCWNpZSA9IHJiX2VudHJ5KCpjaWVfcmJfbm9kZSwgc3RydWN0IGR3YXJmX2NpZSwgbm9kZSk7CisJCXJiX2VyYXNlKCpjaWVfcmJfbm9kZSwgJmNpZV9yb290KTsKKwkJa2ZyZWUoY2llKTsKKwl9CiAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZHdhcmZfcmVnX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGR3YXJmX2ZyYW1lX2NhY2hlcCk7CkBAIC0xMDI0LDYgKzExMDIsOCBAQAogCiAJLyogRGlkIHdlIGZpbmQgdGhlIC5laF9mcmFtZSBzZWN0aW9uPyAqLwogCWlmIChpICE9IGhkci0+ZV9zaG51bSkgeworCQlJTklUX0xJU1RfSEVBRCgmbWUtPmFyY2guY2llX2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmbWUtPmFyY2guZmRlX2xpc3QpOwogCQllcnIgPSBkd2FyZl9wYXJzZV9zZWN0aW9uKChjaGFyICopc3RhcnQsIChjaGFyICopZW5kLCBtZSk7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gcGFyc2UgRFdBUkYgaW5mb1xuIiwKQEAgLTEwNDQsMzggKzExMjQsMjYgQEAKICAqLwogdm9pZCBtb2R1bGVfZHdhcmZfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0Jc3RydWN0IGR3YXJmX2ZkZSAqZmRlOwotCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKKwlzdHJ1Y3QgZHdhcmZfZmRlICpmZGUsICpmdG1wOworCXN0cnVjdCBkd2FyZl9jaWUgKmNpZSwgKmN0bXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCi1hZ2Fpbl9jaWU6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaWUsICZkd2FyZl9jaWVfbGlzdCwgbGluaykgewotCQlpZiAoY2llLT5tb2QgPT0gbW9kKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCZjaWUtPmxpbmsgIT0gJmR3YXJmX2NpZV9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNpZSwgY3RtcCwgJm1vZC0+YXJjaC5jaWVfbGlzdCwgbGluaykgewogCQlsaXN0X2RlbCgmY2llLT5saW5rKTsKKwkJcmJfZXJhc2UoJmNpZS0+bm9kZSwgJmNpZV9yb290KTsKIAkJa2ZyZWUoY2llKTsKLQkJZ290byBhZ2Fpbl9jaWU7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfY2llX2xvY2ssIGZsYWdzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwogCi1hZ2Fpbl9mZGU6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShmZGUsICZkd2FyZl9mZGVfbGlzdCwgbGluaykgewotCQlpZiAoZmRlLT5tb2QgPT0gbW9kKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCZmZGUtPmxpbmsgIT0gJmR3YXJmX2ZkZV9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZkZSwgZnRtcCwgJm1vZC0+YXJjaC5mZGVfbGlzdCwgbGluaykgewogCQlsaXN0X2RlbCgmZmRlLT5saW5rKTsKKwkJcmJfZXJhc2UoJmZkZS0+bm9kZSwgJmZkZV9yb290KTsKIAkJa2ZyZWUoZmRlKTsKLQkJZ290byBhZ2Fpbl9mZGU7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfZmRlX2xvY2ssIGZsYWdzKTsKQEAgLTEwOTQsOCArMTE2Miw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBkd2FyZl91bndpbmRlcl9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKLQlJTklUX0xJU1RfSEVBRCgmZHdhcmZfY2llX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZkd2FyZl9mZGVfbGlzdCk7CiAKIAlkd2FyZl9mcmFtZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZHdhcmZfZnJhbWVzIiwKIAkJCXNpemVvZihzdHJ1Y3QgZHdhcmZfZnJhbWUpLCAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhiYjUwYy4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYQotICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3ICBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+Ci0KLS8qCi0gKglQcmludCBhIHN0cmluZyB0aHJvdWdoIHRoZSBCSU9TCi0gKi8KLXN0YXRpYyB2b2lkIHNoX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLAotCQkJCSB1bnNpZ25lZCBjb3VudCkKLXsKLQlzaF9iaW9zX2NvbnNvbGVfd3JpdGUocywgY291bnQpOwotfQotCi0vKgotICoJU2V0dXAgaW5pdGlhbCBiYXVkL2JpdHMvcGFyaXR5LiBXZSBkbyB0d28gdGhpbmdzIGhlcmU6Ci0gKgktIGNvbnN0cnVjdCBhIGNmbGFnIHNldHRpbmcgZm9yIHRoZSBmaXJzdCByc19vcGVuKCkKLSAqCS0gaW5pdGlhbGl6ZSB0aGUgc2VyaWFsIHBvcnQKLSAqCVJldHVybiBub24temVybyBpZiB3ZSBkaWRuJ3QgZmluZCBhIHNlcmlhbCBwb3J0LgotICovCi1zdGF0aWMgaW50IF9faW5pdCBzaF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKLXsKLQlpbnQJY2ZsYWcgPSBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCi0JLyoKLQkgKglOb3cgY29uc3RydWN0IGEgY2ZsYWcgc2V0dGluZy4KLQkgKglUT0RPOiB0aGlzIGlzIGEgdG90YWxseSBib2d1cyBjZmxhZywgYXMgd2UgaGF2ZQotCSAqCW5vIGlkZWEgd2hhdCBzZXJpYWwgc2V0dGluZ3MgdGhlIEJJT1MgaXMgdXNpbmcsIG9yCi0JICoJZXZlbiBpZiBpdHMgdXNpbmcgdGhlIHNlcmlhbCBwb3J0IGF0IGFsbC4KLQkgKi8KLQljZmxhZyB8PSBCMTE1MjAwIHwgQ1M4IHwgLypubyBwYXJpdHkqLzA7Ci0KLQljby0+Y2ZsYWcgPSBjZmxhZzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgYmlvc19jb25zb2xlID0gewotCS5uYW1lCQk9ICJiaW9zIiwKLQkud3JpdGUJCT0gc2hfY29uc29sZV93cml0ZSwKLQkuc2V0dXAJCT0gc2hfY29uc29sZV9zZXR1cCwKLQkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAotCS5pbmRleAkJPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSAqZWFybHlfY29uc29sZTsKLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKmJ1ZikKLXsKLQlpbnQga2VlcF9lYXJseSA9IDA7Ci0KLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc3Ryc3RyKGJ1ZiwgImtlZXAiKSkKLQkJa2VlcF9lYXJseSA9IDE7Ci0KLQlpZiAoIXN0cm5jbXAoYnVmLCAiYmlvcyIsIDQpKQotCQllYXJseV9jb25zb2xlID0gJmJpb3NfY29uc29sZTsKLQotCWlmIChsaWtlbHkoZWFybHlfY29uc29sZSkpIHsKLQkJaWYgKGtlZXBfZWFybHkpCi0JCQllYXJseV9jb25zb2xlLT5mbGFncyAmPSB+Q09OX0JPT1Q7Ci0JCWVsc2UKLQkJCWVhcmx5X2NvbnNvbGUtPmZsYWdzIHw9IENPTl9CT09UOwotCQlyZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGUpOwotCX0KLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImVhcmx5cHJpbnRrIiwgc2V0dXBfZWFybHlfcHJpbnRrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYTQ4Y2RlZC4uMzBlMTMxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKQEAgLTM5OSwxMiArMzk5LDMgQEAKIAl9CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnN5c19jYWxsX3RhYmxlOwotCi11bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKXN5c19jYWxsX3RhYmxlW25yXTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NZU0NBTExTICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3NoL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggMTE1MWVjZC4uZmUwYjc0MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvc2gva2VybmVsL2hlYWRfMzIuUwpAQCAtMyw2ICszLDcgQEAKICAqICBhcmNoL3NoL2tlcm5lbC9oZWFkLlMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBOaWliZSBZdXRha2EgJiBLYXogS29qaW1hCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBNYXR0IEZsZW1pbmcKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTMsNiArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGNwdS9tbXVfY29udGV4dC5oPgogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDRBCiAjZGVmaW5lIFNZTkNPKCkJCXN5bmNvCkBAIC0zMyw3ICszNiw3IEBACiAJLmxvbmcJMQkJLyogTE9BREVSX1RZUEUgKi8KIAkubG9uZwkweDAwMDAwMDAwCS8qIElOSVRSRF9TVEFSVCAqLwogCS5sb25nCTB4MDAwMDAwMDAJLyogSU5JVFJEX1NJWkUgKi8KLSNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkgJiYgZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQorI2lmZGVmIENPTkZJR18zMkJJVAogCS5sb25nCTB4NTM0NTNmMDAgKyAzMgkvKiAiU0U/IiA9IDMyIGJpdCAqLwogI2Vsc2UKIAkubG9uZwkweDUzNDUzZjAwICsgMjkJLyogIlNFPyIgPSAyOSBiaXQgKi8KQEAgLTgyLDYgKzg1LDIwOSBAQAogCWxkYwlyMCwgcjdfYmFuawkhIC4uLiBhbmQgaW5pdGlhbCB0aHJlYWRfaW5mbwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUE1CCisvKgorICogUmVjb25maWd1cmUgdGhlIGluaXRpYWwgUE1CIG1hcHBpbmdzIHNldHVwIGJ5IHRoZSBoYXJkd2FyZS4KKyAqCisgKiBXaGVuIHdlIGJvb3QgaW4gMzItYml0IE1NVSBtb2RlIHRoZXJlIGFyZSAyIFBNQiBlbnRyaWVzIGFscmVhZHkKKyAqIHNldHVwIGZvciB1cy4KKyAqCisgKiBFbnRyeSAgICAgICBWUE4JICAgUFBOCSAgICBWCVNaCUMJVUIJV1QKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAwCSAgICAweDgwMDAwMDAwIDB4MDAwMDAwMDAgICAxICA1MTJNQgkxCTAJMQorICogICAxCSAgICAweEEwMDAwMDAwIDB4MDAwMDAwMDAgICAxICA1MTJNQgkwCTAJMAorICoKKyAqIEJ1dCB3ZSByZXByb2dyYW0gdGhlbSBoZXJlIGJlY2F1c2Ugd2Ugd2FudCBjb21wbGV0ZSBjb250cm9sIG92ZXIKKyAqIG91ciBhZGRyZXNzIHNwYWNlIGFuZCB0aGUgaW5pdGlhbCBtYXBwaW5ncyBtYXkgbm90IG1hcCBQQUdFX09GRlNFVAorICogdG8gX19NRU1PUllfU1RBUlQgKG9yIGV2ZW4gbWFwIGFsbCBvZiBvdXIgUkFNKS4KKyAqCisgKiBPbmNlIHdlJ3ZlIHNldHVwIGNhY2hlZCBhbmQgdW5jYWNoZWQgbWFwcGluZ3Mgd2UgY2xlYXIgdGhlIHJlc3Qgb2YgdGhlCisgKiBQTUIgZW50cmllcy4gVGhpcyBjbGVhcmluZyBhbHNvIGRlYWxzIHdpdGggdGhlIGZhY3QgdGhhdCBQTUIgZW50cmllcworICogY2FuIHBlcnNpc3QgYWNyb3NzIHJlYm9vdHMuIFRoZSBQTUIgY291bGQgaGF2ZSBiZWVuIGxlZnQgaW4gYW55IHN0YXRlCisgKiB3aGVuIHRoZSByZWJvb3Qgb2NjdXJyZWQsIHNvIHRvIGJlIHNhZmUgd2UgY2xlYXIgYWxsIGVudHJpZXMgYW5kIHN0YXJ0CisgKiB3aXRoIHdpdGggYSBjbGVhbiBzbGF0ZS4KKyAqCisgKiBUaGUgdW5jYWNoZWQgbWFwcGluZyBpcyBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgc21hbGxlc3QgcG9zc2libGUKKyAqIG1hcHBpbmcgd2l0aCBhIHNpbmdsZSB1bmJ1ZmZlcmFibGUgcGFnZS4gT25seSB0aGUga2VybmVsIHRleHQgbmVlZHMgdG8KKyAqIGJlIGNvdmVyZWQgdmlhIHRoZSB1bmNhY2hlZCBtYXBwaW5nIHNvIHRoYXQgY2VydGFpbiBmdW5jdGlvbnMgY2FuIGJlCisgKiBydW4gdW5jYWNoZWQuCisgKgorICogRHJpdmVycyBhbmQgdGhlIGxpa2UgdGhhdCBoYXZlIHByZXZpb3VzbHkgYWJ1c2VkIHRoZSAxOjEgaWRlbnRpdHkKKyAqIG1hcHBpbmcgYXJlIHVuc3VwcG9ydGVkIGluIDMyLWJpdCBtb2RlIGFuZCBtdXN0IHNwZWNpZnkgdGhlaXIgY2FjaGluZworICogcHJlZmVyZW5jZSB3aGVuIHBhZ2UgdGFibGVzIGFyZSBjb25zdHJ1Y3RlZC4KKyAqCisgKiBUaGlzIGZyZWVzIHVwIHRoZSBQMiBzcGFjZSBmb3IgbW9yZSBuZWZhcmlvdXMgcHVycG9zZXMuCisgKgorICogUmVnaXN0ZXIgdXRpbGl6YXRpb24gaXMgYXMgZm9sbG93czoKKyAqCisgKglyMCA9IFBNQl9EQVRBIGRhdGEgZmllbGQKKyAqCXIxID0gUE1CX0RBVEEgYWRkcmVzcyBmaWVsZAorICoJcjIgPSBQTUJfQUREUiBkYXRhIGZpZWxkCisgKglyMyA9IFBNQl9BRERSIGFkZHJlc3MgZmllbGQKKyAqCXI0ID0gUE1CX0VfU0hJRlQKKyAqCXI1ID0gcmVtYWluaW5nIGFtb3VudCBvZiBSQU0gdG8gbWFwCisgKglyNiA9IFBNQiBtYXBwaW5nIHNpemUgd2UncmUgdHJ5aW5nIHRvIHVzZQorICoJcjcgPSBjYWNoZWRfdG9fdW5jYWNoZWQKKyAqCXI4ID0gc2NyYXRjaCByZWdpc3RlcgorICoJcjkgPSBzY3JhdGNoIHJlZ2lzdGVyCisgKglyMTAgPSBudW1iZXIgb2YgUE1CIGVudHJpZXMgd2UndmUgc2V0dXAKKyAqLworCisJbW92LmwJLkxNTVVDUiwgcjEJLyogRmx1c2ggdGhlIFRMQiAqLworCW1vdi5sCUByMSwgcjAKKwlvcgkjTU1VQ1JfVEksIHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJLkxNRU1PUllfU0laRSwgcjUKKworCW1vdgkjUE1CX0VfU0hJRlQsIHIwCisJbW92CSMweDEsIHI0CisJc2hsZAlyMCwgcjQKKworCW1vdi5sCS5MRklSU1RfREFUQV9FTlRSWSwgcjAKKwltb3YubAkuTFBNQl9EQVRBLCByMQorCW1vdi5sCS5MRklSU1RfQUREUl9FTlRSWSwgcjIKKwltb3YubAkuTFBNQl9BRERSLCByMworCisJLyoKKwkgKiBGaXJzdCB3ZSBuZWVkIHRvIHdhbGsgdGhlIFBNQiBhbmQgZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55CisJICogZXhpc3RpbmcgbWFwcGluZ3MgdGhhdCBtYXRjaCB0aGUgaW5pdGlhbCBtYXBwaW5ncyBWUE4vUFBOLgorCSAqIElmIHRoZXNlIGhhdmUgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkIGJ5IHRoZSBib290bG9hZGVyLCB3ZQorCSAqIGRvbid0IGJvdGhlciBzZXR0aW5nIHVwIG5ldyBlbnRyaWVzIGhlcmUsIGFuZCBsZXQgdGhlIGxhdGUgUE1CCisJICogaW5pdGlhbGl6YXRpb24gdGFrZSBjYXJlIG9mIHRoaW5ncyBpbnN0ZWFkLgorCSAqCisJICogTm90ZSB0aGF0IHdlIG1heSBuZWVkIHRvIGNvYWxlc2NlIGFuZCBtZXJnZSBlbnRyaWVzIGluIG9yZGVyCisJICogdG8gcmVjbGFpbSBtb3JlIGF2YWlsYWJsZSBQTUIgc2xvdHMsIHdoaWNoIGlzIG11Y2ggbW9yZSB0aGFuCisJICogd2Ugd2FudCB0byBkbyBhdCB0aGlzIGVhcmx5IHN0YWdlLgorCSAqLworCW1vdgkjMCwgcjEwCisJbW92CSNOUl9QTUJfRU5UUklFUywgcjkKKworCW1vdglyMSwgcjcJCS8qIHRlbXBvcmFyeSBQTUJfREFUQSBpdGVyICovCisKKy5MdmFsaWRhdGVfZXhpc3RpbmdfbWFwcGluZ3M6CisKKwltb3YubAlAcjcsIHI4CisJYW5kCXIwLCByOAorCWNtcC9lcQlyMCwgcjgJCS8qIENoZWNrIGZvciB2YWxpZCBfX01FTU9SWV9TVEFSVCBtYXBwaW5ncyAqLworCWJ0CS5McG1iX2RvbmUKKworCWFkZAkjMSwgcjEwCQkvKiBJbmNyZW1lbnQgdGhlIGxvb3AgY291bnRlciAqLworCWNtcC9lcQlyOSwgcjEwCisJYmYvcwkuTHZhbGlkYXRlX2V4aXN0aW5nX21hcHBpbmdzCisJIGFkZAlyNCwgcjcJCS8qIEluY3JlbWVudCB0byB0aGUgbmV4dCBQTUJfREFUQSBlbnRyeSAqLworCisJLyoKKwkgKiBJZiB3ZSd2ZSBmYWxsZW4gdGhyb3VnaCwgY29udGludWUgd2l0aCBzZXR0aW5nIHVwIHRoZSBpbml0aWFsCisJICogbWFwcGluZ3MuCisJICovCisKKwltb3YJcjUsIHI3CQkvKiBjYWNoZWRfdG9fdW5jYWNoZWQgKi8KKwltb3YJIzAsIHIxMAorCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKwkvKgorCSAqIFVuY2FjaGVkIG1hcHBpbmcKKwkgKi8KKwltb3YJIyhQTUJfU1pfMTZNID4+IDIpLCByOQorCXNobGwyCXI5CisKKwltb3YJIyhQTUJfVUIgPj4gOCksIHI4CisJc2hsbDgJcjgKKworCW9yCXIwLCByOAorCW9yCXI5LCByOAorCW1vdi5sCXI4LCBAcjEKKwltb3YJcjIsIHI4CisJYWRkCXI3LCByOAorCW1vdi5sCXI4LCBAcjMKKworCWFkZAlyNCwgcjEKKwlhZGQJcjQsIHIzCisJYWRkCSMxLCByMTAKKyNlbmRpZgorCisvKgorICogSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgYXZhaWxhYmxlIHNpemVzIGZyb20gbGFyZ2VzdCB0bworICogc21hbGxlc3QgZm9yIGNvbnN0cnVjdGluZyB0aGUgY2FjaGVkIG1hcHBpbmcuCisgKi8KKyNkZWZpbmUgX19QTUJfSVRFUl9CWV9TSVpFKHNpemUpCQkJXAorLkwjI3NpemU6CQkJCQkJXAorCW1vdgkjKHNpemUgPj4gNCksIHI2OwkJCVwKKwlzaGxsMTYJcjY7CQkJCQlcCisJc2hsbDgJcjY7CQkJCQlcCisJCQkJCQkJXAorCWNtcC9oaQlyNSwgcjY7CQkJCQlcCisJYnQJOTk5OWY7CQkJCQlcCisJCQkJCQkJXAorCW1vdgkjKFBNQl9TWl8jI3NpemUjI00gPj4gMiksIHI5OwkJXAorCXNobGwyCXI5OwkJCQkJXAorCQkJCQkJCVwKKwkvKgkJCQkJCVwKKwkgKiBDYWNoZWQgbWFwcGluZwkJCQlcCisJICovCQkJCQkJXAorCW1vdgkjUE1CX0MsIHI4OwkJCQlcCisJb3IJcjAsIHI4OwkJCQkJXAorCW9yCXI5LCByODsJCQkJCVwKKwltb3YubAlyOCwgQHIxOwkJCQlcCisJbW92LmwJcjIsIEByMzsJCQkJXAorCQkJCQkJCVwKKwkvKiBJbmNyZW1lbnQgdG8gdGhlIG5leHQgUE1CX0RBVEEgZW50cnkgKi8JXAorCWFkZAlyNCwgcjE7CQkJCQlcCisJLyogSW5jcmVtZW50IHRvIHRoZSBuZXh0IFBNQl9BRERSIGVudHJ5ICovCVwKKwlhZGQJcjQsIHIzOwkJCQkJXAorCS8qIEluY3JlbWVudCBudW1iZXIgb2YgUE1CIGVudHJpZXMgKi8JCVwKKwlhZGQJIzEsIHIxMDsJCQkJXAorCQkJCQkJCVwKKwlzdWIJcjYsIHI1OwkJCQkJXAorCWFkZAlyNiwgcjA7CQkJCQlcCisJYWRkCXI2LCByMjsJCQkJCVwKKwkJCQkJCQlcCisJYnJhCS5MIyNzaXplOwkJCQlcCis5OTk5OgorCisJX19QTUJfSVRFUl9CWV9TSVpFKDUxMikKKwlfX1BNQl9JVEVSX0JZX1NJWkUoMTI4KQorCV9fUE1CX0lURVJfQllfU0laRSg2NCkKKwlfX1BNQl9JVEVSX0JZX1NJWkUoMTYpCisKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworCS8qCisJICogTm93IHRoYXQgd2UgY2FuIGFjY2VzcyBpdCwgdXBkYXRlIGNhY2hlZF90b191bmNhY2hlZCBhbmQKKwkgKiB1bmNhY2hlZF9zaXplLgorCSAqLworCW1vdi5sCS5MY2FjaGVkX3RvX3VuY2FjaGVkLCByMAorCW1vdi5sCXI3LCBAcjAKKworCW1vdi5sCS5MdW5jYWNoZWRfc2l6ZSwgcjAKKwltb3YJIzEsIHI3CisJc2hsbDE2CXI3CisJc2hsbDgJcjcKKwltb3YubAlyNywgQHIwCisjZW5kaWYKKworCS8qCisJICogQ2xlYXIgdGhlIHJlbWFpbmluZyBQTUIgZW50cmllcy4KKwkgKgorCSAqIHIzID0gZW50cnkgdG8gYmVnaW4gY2xlYXJpbmcgZnJvbQorCSAqIHIxMCA9IG51bWJlciBvZiBlbnRyaWVzIHdlJ3ZlIHNldHVwIHNvIGZhcgorCSAqLworCW1vdgkjMCwgcjEKKwltb3YJI05SX1BNQl9FTlRSSUVTLCByMAorCisuTGFnYWluOgorCW1vdi5sCXIxLCBAcjMJCS8qIENsZWFyIFBNQl9BRERSIGVudHJ5ICovCisJYWRkCSMxLCByMTAJCS8qIEluY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovCisJY21wL2VxCXIwLCByMTAKKwliZi9zCS5MYWdhaW4KKwkgYWRkCXI0LCByMwkJLyogSW5jcmVtZW50IHRvIHRoZSBuZXh0IFBNQl9BRERSIGVudHJ5ICovCisKKwltb3YubAk2ZiwgcjAKKwlpY2JpCUByMAorCisuTHBtYl9kb25lOgorI2VuZGlmIC8qIENPTkZJR19QTUIgKi8KKwogI2lmbmRlZiBDT05GSUdfU0hfTk9fQlNTX0lOSVQKIAkvKgogCSAqIERvbid0IGNsZWFyIEJTUyBpZiBydW5uaW5nIG9uIHNsb3cgcGxhdGZvcm1zIHN1Y2ggYXMgYW4gUlRMIHNpbXVsYXRpb24sCkBAIC0xMzEsMyArMzM3LDE2IEBACiA1OgkubG9uZwlzdGFydF9rZXJuZWwKIDY6CS5sb25nCXNoX2NwdV9pbml0CiA3OgkubG9uZwlpbml0X3RocmVhZF91bmlvbgorCisjaWZkZWYgQ09ORklHX1BNQgorLkxQTUJfQUREUjoJCS5sb25nCVBNQl9BRERSCisuTFBNQl9EQVRBOgkJLmxvbmcJUE1CX0RBVEEKKy5MRklSU1RfQUREUl9FTlRSWToJLmxvbmcJUEFHRV9PRkZTRVQgfCBQTUJfVgorLkxGSVJTVF9EQVRBX0VOVFJZOgkubG9uZwlfX01FTU9SWV9TVEFSVCB8IFBNQl9WCisuTE1NVUNSOgkJLmxvbmcJTU1VQ1IKKy5MTUVNT1JZX1NJWkU6CQkubG9uZwlfX01FTU9SWV9TSVpFCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKy5MY2FjaGVkX3RvX3VuY2FjaGVkOgkubG9uZwljYWNoZWRfdG9fdW5jYWNoZWQKKy5MdW5jYWNoZWRfc2l6ZToJLmxvbmcJdW5jYWNoZWRfc2l6ZQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvc2gva2VybmVsL2hlYWRfNjQuUwppbmRleCAzZWE3NjU4Li5kZWZkODUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaGVhZF82NC5TCkBAIC0yMjAsNyArMjIwLDYgQEAKIAlhZGQubAlyMjIsIHI2MywgcjIyCQkvKiBTaWduIGV4dGVuZCAqLwogCXB1dGNmZwlyMjEsIDAsIHIyMgkJLyogU2V0IE1NVURSWzBdLlBURUggKi8KIAotI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKIAkvKgogCSAqIFNldHVwIGEgRFRMQiB0cmFuc2xhdGlvbiBmb3IgU0NJRiBwaHlzLgogCSAqLwpAQCAtMjMxLDcgKzIzMCw2IEBACiAJbW92aSAgICAweGZhMDMsIHIyMgkvKiAweGZhMDMwMDAwLCBmaXhlZCBTQ0lGIHZpcnQgKi8KIAlzaG9yaSAgIDB4MDAwMywgcjIyCiAJcHV0Y2ZnICByMjEsIDAsIHIyMgkvKiBQVEVIIGxhc3QgKi8KLSNlbmRpZgogCiAJLyoKIAkgKiBTZXQgY2FjaGUgYmVoYXZpb3Vycy4KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2FyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmYxNzUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC0wLDAgKzEsNDYzIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisgKgorICogVW5pZmllZCBrZXJuZWwvdXNlci1zcGFjZSBoYXJkd2FyZSBicmVha3BvaW50IGZhY2lsaXR5IGZvciB0aGUgb24tY2hpcCBVQkMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGFzbS9od19icmVha3BvaW50Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKgorICogU3RvcmVzIHRoZSBicmVha3BvaW50cyBjdXJyZW50bHkgaW4gdXNlIG9uIGVhY2ggYnJlYWtwb2ludCBhZGRyZXNzCisgKiByZWdpc3RlciBmb3IgZWFjaCBjcHVzCisgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9ldmVudCAqLCBicF9wZXJfcmVnW0hCUF9OVU1dKTsKKworLyoKKyAqIEEgZHVtbXkgcGxhY2Vob2xkZXIgZm9yIGVhcmx5IGFjY2Vzc2VzIHVudGlsIHRoZSBDUFVzIGdldCBhIGNoYW5jZSB0bworICogcmVnaXN0ZXIgdGhlaXIgVUJDcyBsYXRlciBpbiB0aGUgYm9vdCBwcm9jZXNzLgorICovCitzdGF0aWMgc3RydWN0IHNoX3ViYyB1YmNfZHVtbXkgPSB7IC5udW1fZXZlbnRzID0gMCB9OworCitzdGF0aWMgc3RydWN0IHNoX3ViYyAqc2hfdWJjIF9fcmVhZF9tb3N0bHkgPSAmdWJjX2R1bW15OworCisvKgorICogSW5zdGFsbCBhIHBlcmYgY291bnRlciBicmVha3BvaW50LgorICoKKyAqIFdlIHNlZWsgYSBmcmVlIFVCQyBjaGFubmVsIGFuZCB1c2UgaXQgZm9yIHRoaXMgYnJlYWtwb2ludC4KKyAqCisgKiBBdG9taWM6IHdlIGhvbGQgdGhlIGNvdW50ZXItPmN0eC0+bG9jayBhbmQgd2Ugb25seSBoYW5kbGUgdmFyaWFibGVzCisgKiBhbmQgcmVnaXN0ZXJzIGxvY2FsIHRvIHRoaXMgY3B1LgorICovCitpbnQgYXJjaF9pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNoX3ViYy0+bnVtX2V2ZW50czsgaSsrKSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICoqc2xvdCA9ICZfX2dldF9jcHVfdmFyKGJwX3Blcl9yZWdbaV0pOworCisJCWlmICghKnNsb3QpIHsKKwkJCSpzbG90ID0gYnA7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChXQVJOX09OQ0UoaSA9PSBzaF91YmMtPm51bV9ldmVudHMsICJDYW4ndCBmaW5kIGFueSBicmVha3BvaW50IHNsb3QiKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWNsa19lbmFibGUoc2hfdWJjLT5jbGspOworCXNoX3ViYy0+ZW5hYmxlKGluZm8sIGkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVbmluc3RhbGwgdGhlIGJyZWFrcG9pbnQgY29udGFpbmVkIGluIHRoZSBnaXZlbiBjb3VudGVyLgorICoKKyAqIEZpcnN0IHdlIHNlYXJjaCB0aGUgZGVidWcgYWRkcmVzcyByZWdpc3RlciBpdCB1c2VzIGFuZCB0aGVuIHdlIGRpc2FibGUKKyAqIGl0LgorICoKKyAqIEF0b21pYzogd2UgaG9sZCB0aGUgY291bnRlci0+Y3R4LT5sb2NrIGFuZCB3ZSBvbmx5IGhhbmRsZSB2YXJpYWJsZXMKKyAqIGFuZCByZWdpc3RlcnMgbG9jYWwgdG8gdGhpcyBjcHUuCisgKi8KK3ZvaWQgYXJjaF91bmluc3RhbGxfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2hfdWJjLT5udW1fZXZlbnRzOyBpKyspIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKipzbG90ID0gJl9fZ2V0X2NwdV92YXIoYnBfcGVyX3JlZ1tpXSk7CisKKwkJaWYgKCpzbG90ID09IGJwKSB7CisJCQkqc2xvdCA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChXQVJOX09OQ0UoaSA9PSBzaF91YmMtPm51bV9ldmVudHMsICJDYW4ndCBmaW5kIGFueSBicmVha3BvaW50IHNsb3QiKSkKKwkJcmV0dXJuOworCisJc2hfdWJjLT5kaXNhYmxlKGluZm8sIGkpOworCWNsa19kaXNhYmxlKHNoX3ViYy0+Y2xrKTsKK30KKworc3RhdGljIGludCBnZXRfaGJwX2xlbih1MTYgaGJwX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgbGVuX2luX2J5dGVzID0gMDsKKworCXN3aXRjaCAoaGJwX2xlbikgeworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fMToKKwkJbGVuX2luX2J5dGVzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl8yOgorCQlsZW5faW5fYnl0ZXMgPSAyOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzQ6CisJCWxlbl9pbl9ieXRlcyA9IDQ7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fODoKKwkJbGVuX2luX2J5dGVzID0gODsKKwkJYnJlYWs7CisJfQorCXJldHVybiBsZW5faW5fYnl0ZXM7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgdmlydHVhbCBhZGRyZXNzIGluIHVzZXIgc3BhY2UuCisgKi8KK2ludCBhcmNoX2NoZWNrX3ZhX2luX3VzZXJzcGFjZSh1bnNpZ25lZCBsb25nIHZhLCB1MTYgaGJwX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJbGVuID0gZ2V0X2hicF9sZW4oaGJwX2xlbik7CisKKwlyZXR1cm4gKHZhIDw9IFRBU0tfU0laRSAtIGxlbik7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgdmlydHVhbCBhZGRyZXNzIGluIGtlcm5lbCBzcGFjZS4KKyAqLworc3RhdGljIGludCBhcmNoX2NoZWNrX3ZhX2luX2tlcm5lbHNwYWNlKHVuc2lnbmVkIGxvbmcgdmEsIHU4IGhicF9sZW4pCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IGdldF9oYnBfbGVuKGhicF9sZW4pOworCisJcmV0dXJuICh2YSA+PSBUQVNLX1NJWkUpICYmICgodmEgKyBsZW4gLSAxKSA+PSBUQVNLX1NJWkUpOworfQorCisvKgorICogU3RvcmUgYSBicmVha3BvaW50J3MgZW5jb2RlZCBhZGRyZXNzLCBsZW5ndGgsIGFuZCB0eXBlLgorICovCitzdGF0aWMgaW50IGFyY2hfc3RvcmVfaW5mbyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisKKwkvKgorCSAqIFVzZXItc3BhY2UgcmVxdWVzdHMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgYWRkcmVzcyBmaWVsZCBwb3B1bGF0ZWQKKwkgKiBGb3Iga2VybmVsLWFkZHJlc3NlcywgZWl0aGVyIHRoZSBhZGRyZXNzIG9yIHN5bWJvbCBuYW1lIGNhbiBiZQorCSAqIHNwZWNpZmllZC4KKwkgKi8KKwlpZiAoaW5mby0+bmFtZSkKKwkJaW5mby0+YWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWthbGxzeW1zX2xvb2t1cF9uYW1lKGluZm8tPm5hbWUpOworCWlmIChpbmZvLT5hZGRyZXNzKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgYXJjaF9icF9nZW5lcmljX2ZpZWxkcyhpbnQgc2hfbGVuLCBpbnQgc2hfdHlwZSwKKwkJCSAgIGludCAqZ2VuX2xlbiwgaW50ICpnZW5fdHlwZSkKK3sKKwkvKiBMZW4gKi8KKwlzd2l0Y2ggKHNoX2xlbikgeworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fMToKKwkJKmdlbl9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl8xOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzI6CisJCSpnZW5fbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fMjsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl80OgorCQkqZ2VuX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzQ7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fODoKKwkJKmdlbl9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl84OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUeXBlICovCisJc3dpdGNoIChzaF90eXBlKSB7CisJY2FzZSBTSF9CUkVBS1BPSU5UX1JFQUQ6CisJCSpnZW5fdHlwZSA9IEhXX0JSRUFLUE9JTlRfUjsKKwljYXNlIFNIX0JSRUFLUE9JTlRfV1JJVEU6CisJCSpnZW5fdHlwZSA9IEhXX0JSRUFLUE9JTlRfVzsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX1JXOgorCQkqZ2VuX3R5cGUgPSBIV19CUkVBS1BPSU5UX1cgfCBIV19CUkVBS1BPSU5UX1I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFyY2hfYnVpbGRfYnBfaW5mbyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisKKwlpbmZvLT5hZGRyZXNzID0gYnAtPmF0dHIuYnBfYWRkcjsKKworCS8qIExlbiAqLworCXN3aXRjaCAoYnAtPmF0dHIuYnBfbGVuKSB7CisJY2FzZSBIV19CUkVBS1BPSU5UX0xFTl8xOgorCQlpbmZvLT5sZW4gPSBTSF9CUkVBS1BPSU5UX0xFTl8xOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfTEVOXzI6CisJCWluZm8tPmxlbiA9IFNIX0JSRUFLUE9JTlRfTEVOXzI7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9MRU5fNDoKKwkJaW5mby0+bGVuID0gU0hfQlJFQUtQT0lOVF9MRU5fNDsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX0xFTl84OgorCQlpbmZvLT5sZW4gPSBTSF9CUkVBS1BPSU5UX0xFTl84OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUeXBlICovCisJc3dpdGNoIChicC0+YXR0ci5icF90eXBlKSB7CisJY2FzZSBIV19CUkVBS1BPSU5UX1I6CisJCWluZm8tPnR5cGUgPSBTSF9CUkVBS1BPSU5UX1JFQUQ7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9XOgorCQlpbmZvLT50eXBlID0gU0hfQlJFQUtQT0lOVF9XUklURTsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX1cgfCBIV19CUkVBS1BPSU5UX1I6CisJCWluZm8tPnR5cGUgPSBTSF9CUkVBS1BPSU5UX1JXOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFZhbGlkYXRlIHRoZSBhcmNoLXNwZWNpZmljIEhXIEJyZWFrcG9pbnQgcmVnaXN0ZXIgc2V0dGluZ3MKKyAqLworaW50IGFyY2hfdmFsaWRhdGVfaHdia3B0X3NldHRpbmdzKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwKKwkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCXVuc2lnbmVkIGludCBhbGlnbjsKKwlpbnQgcmV0OworCisJcmV0ID0gYXJjaF9idWlsZF9icF9pbmZvKGJwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gLUVJTlZBTDsKKworCXN3aXRjaCAoaW5mby0+bGVuKSB7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl8xOgorCQlhbGlnbiA9IDA7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fMjoKKwkJYWxpZ24gPSAxOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzQ6CisJCWFsaWduID0gMzsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl84OgorCQlhbGlnbiA9IDc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gYXJjaF9zdG9yZV9pbmZvKGJwKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgYXBwcm9wcmlhdGUKKwkgKiBmb3IgdGhlIGFsaWdubWVudCBpbXBsaWVkIGJ5IGxlbi4KKwkgKi8KKwlpZiAoaW5mby0+YWRkcmVzcyAmIGFsaWduKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENoZWNrIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiB0aGUgcHJvcGVyIHJhbmdlICovCisJaWYgKHRzaykgeworCQlpZiAoIWFyY2hfY2hlY2tfdmFfaW5fdXNlcnNwYWNlKGluZm8tPmFkZHJlc3MsIGluZm8tPmxlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlpZiAoIWFyY2hfY2hlY2tfdmFfaW5fa2VybmVsc3BhY2UoaW5mby0+YWRkcmVzcywgaW5mby0+bGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmVsZWFzZSB0aGUgdXNlciBicmVha3BvaW50cyB1c2VkIGJ5IHB0cmFjZQorICovCit2b2lkIGZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWludCBpOworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJnRzay0+dGhyZWFkOworCisJZm9yIChpID0gMDsgaSA8IHNoX3ViYy0+bnVtX2V2ZW50czsgaSsrKSB7CisJCXVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludCh0LT5wdHJhY2VfYnBzW2ldKTsKKwkJdC0+cHRyYWNlX2Jwc1tpXSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcyBod19icmVha3BvaW50X2hhbmRsZXIoc3RydWN0IGRpZV9hcmdzICphcmdzKQoreworCWludCBjcHUsIGksIHJjID0gTk9USUZZX1NUT1A7CisJc3RydWN0IHBlcmZfZXZlbnQgKmJwOworCXVuc2lnbmVkIGludCBjbWYsIHJlc3VtZV9tYXNrOworCisJLyoKKwkgKiBEbyBhbiBlYXJseSByZXR1cm4gaWYgbm9uZSBvZiB0aGUgY2hhbm5lbHMgdHJpZ2dlcmVkLgorCSAqLworCWNtZiA9IHNoX3ViYy0+dHJpZ2dlcmVkX21hc2soKTsKKwlpZiAodW5saWtlbHkoIWNtZikpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCS8qCisJICogQnkgZGVmYXVsdCwgcmVzdW1lIGFsbCBvZiB0aGUgYWN0aXZlIGNoYW5uZWxzLgorCSAqLworCXJlc3VtZV9tYXNrID0gc2hfdWJjLT5hY3RpdmVfbWFzaygpOworCisJLyoKKwkgKiBEaXNhYmxlIGJyZWFrcG9pbnRzIGR1cmluZyBleGNlcHRpb24gaGFuZGxpbmcuCisJICovCisJc2hfdWJjLT5kaXNhYmxlX2FsbCgpOworCisJY3B1ID0gZ2V0X2NwdSgpOworCWZvciAoaSA9IDA7IGkgPCBzaF91YmMtPm51bV9ldmVudHM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGV2ZW50X21hc2sgPSAoMSA8PCBpKTsKKworCQlpZiAobGlrZWx5KCEoY21mICYgZXZlbnRfbWFzaykpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhlIGNvdW50ZXIgbWF5IGJlIGNvbmN1cnJlbnRseSByZWxlYXNlZCBidXQgdGhhdCBjYW4gb25seQorCQkgKiBvY2N1ciBmcm9tIGEgY2FsbF9yY3UoKSBwYXRoLiBXZSBjYW4gdGhlbiBzYWZlbHkgZmV0Y2gKKwkJICogdGhlIGJyZWFrcG9pbnQsIHVzZSBpdHMgY2FsbGJhY2ssIHRvdWNoIGl0cyBjb3VudGVyCisJCSAqIHdoaWxlIHdlIGFyZSBpbiBhbiByY3VfcmVhZF9sb2NrKCkgcGF0aC4KKwkJICovCisJCXJjdV9yZWFkX2xvY2soKTsKKworCQlicCA9IHBlcl9jcHUoYnBfcGVyX3JlZ1tpXSwgY3B1KTsKKwkJaWYgKGJwKQorCQkJcmMgPSBOT1RJRllfRE9ORTsKKworCQkvKgorCQkgKiBSZXNldCB0aGUgY29uZGl0aW9uIG1hdGNoIGZsYWcgdG8gZGVub3RlIGNvbXBsZXRpb24gb2YKKwkJICogZXhjZXB0aW9uIGhhbmRsaW5nLgorCQkgKi8KKwkJc2hfdWJjLT5jbGVhcl90cmlnZ2VyZWRfbWFzayhldmVudF9tYXNrKTsKKworCQkvKgorCQkgKiBicCBjYW4gYmUgTlVMTCBkdWUgdG8gY29uY3VycmVudCBwZXJmIGNvdW50ZXIKKwkJICogcmVtb3ZpbmcuCisJCSAqLworCQlpZiAoIWJwKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRG9uJ3QgcmVzdG9yZSB0aGUgY2hhbm5lbCBpZiB0aGUgYnJlYWtwb2ludCBpcyBmcm9tCisJCSAqIHB0cmFjZSwgYXMgaXQgYWx3YXlzIG9wZXJhdGVzIGluIG9uZS1zaG90IG1vZGUuCisJCSAqLworCQlpZiAoYnAtPm92ZXJmbG93X2hhbmRsZXIgPT0gcHRyYWNlX3RyaWdnZXJlZCkKKwkJCXJlc3VtZV9tYXNrICY9IH4oMSA8PCBpKTsKKworCQlwZXJmX2JwX2V2ZW50KGJwLCBhcmdzLT5yZWdzKTsKKworCQkvKiBEZWxpdmVyIHRoZSBzaWduYWwgdG8gdXNlcnNwYWNlICovCisJCWlmIChhcmNoX2NoZWNrX3ZhX2luX3VzZXJzcGFjZShicC0+YXR0ci5icF9hZGRyLAorCQkJCQkgICAgICAgYnAtPmF0dHIuYnBfbGVuKSkgeworCQkJc2lnaW5mb190IGluZm87CisKKwkJCWluZm8uc2lfc2lnbm8gPSBhcmdzLT5zaWducjsKKwkJCWluZm8uc2lfZXJybm8gPSBub3RpZmllcl90b19lcnJubyhyYyk7CisJCQlpbmZvLnNpX2NvZGUgPSBUUkFQX0hXQktQVDsKKworCQkJZm9yY2Vfc2lnX2luZm8oYXJncy0+c2lnbnIsICZpbmZvLCBjdXJyZW50KTsKKwkJfQorCisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCWlmIChjbWYgPT0gMCkKKwkJcmMgPSBOT1RJRllfRE9ORTsKKworCXNoX3ViYy0+ZW5hYmxlX2FsbChyZXN1bWVfbWFzayk7CisKKwlwdXRfY3B1KCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK0JVSUxEX1RSQVBfSEFORExFUihicmVha3BvaW50KQoreworCXVuc2lnbmVkIGxvbmcgZXggPSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpOworCVRSQVBfSEFORExFUl9ERUNMOworCisJbm90aWZ5X2RpZShESUVfQlJFQUtQT0lOVCwgImJyZWFrcG9pbnQiLCByZWdzLCAwLCBleCwgU0lHVFJBUCk7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVidWcgZXhjZXB0aW9uIG5vdGlmaWNhdGlvbnMuCisgKi8KK2ludCBfX2twcm9iZXMgaHdfYnJlYWtwb2ludF9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRpZV9hcmdzICphcmdzID0gZGF0YTsKKworCWlmICh2YWwgIT0gRElFX0JSRUFLUE9JTlQpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCS8qCisJICogSWYgdGhlIGJyZWFrcG9pbnQgaGFzbid0IGJlZW4gdHJpZ2dlcmVkIGJ5IHRoZSBVQkMsIGl0J3MKKwkgKiBwcm9iYWJseSBmcm9tIGEgZGVidWdnZXIsIHNvIGRvbid0IGRvIGFueXRoaW5nIG1vcmUgaGVyZS4KKwkgKgorCSAqIFRoaXMgYWxzbyBwZXJtaXRzIHRoZSBVQkMgaW50ZXJmYWNlIGNsb2NrIHRvIHJlbWFpbiBvZmYgZm9yCisJICogbm9uLVVCQyBicmVha3BvaW50cywgYXMgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgdHJpZ2dlcmVkCisJICogb3IgYWN0aXZlIGNoYW5uZWwgbWFza3MuCisJICovCisJaWYgKGFyZ3MtPnRyYXBuciAhPSBzaF91YmMtPnRyYXBfbnIpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXJldHVybiBod19icmVha3BvaW50X2hhbmRsZXIoZGF0YSk7Cit9CisKK3ZvaWQgaHdfYnJlYWtwb2ludF9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJLyogVE9ETyAqLworfQorCit2b2lkIGh3X2JyZWFrcG9pbnRfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCS8qIFRPRE8gKi8KK30KKworaW50IHJlZ2lzdGVyX3NoX3ViYyhzdHJ1Y3Qgc2hfdWJjICp1YmMpCit7CisJLyogQmFpbCBpZiBpdCdzIGFscmVhZHkgYXNzaWduZWQgKi8KKwlpZiAoc2hfdWJjICE9ICZ1YmNfZHVtbXkpCisJCXJldHVybiAtRUJVU1k7CisJc2hfdWJjID0gdWJjOworCisJcHJfaW5mbygiSFcgQnJlYWtwb2ludHM6ICVzIFVCQyBzdXBwb3J0IHJlZ2lzdGVyZWRcbiIsIHViYy0+bmFtZSk7CisKKwlXQVJOX09OKHViYy0+bnVtX2V2ZW50cyA+IEhCUF9OVU0pOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMgYi9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKaW5kZXggNmIzZDcwNi4uMGZkN2I0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwpAQCAtMjAsMTAgKzIwLDkgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi1zdGF0aWMgaW50IGhsdF9jb3VudGVyOwogdm9pZCAoKnBtX2lkbGUpKHZvaWQpID0gTlVMTDsKLXZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpOwotRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCitzdGF0aWMgaW50IGhsdF9jb3VudGVyOwogCiBzdGF0aWMgaW50IF9faW5pdCBub2hsdF9zZXR1cChjaGFyICpfX3VudXNlZCkKIHsKQEAgLTEzMSw2ICsxMzAsMTUgQEAKIHsKIH0KIAordm9pZCBzdG9wX3RoaXNfY3B1KHZvaWQgKnVudXNlZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKKworCWZvciAoOzspCisJCWNwdV9zbGVlcCgpOworfQorCiAvKgogICogY3B1X2lkbGVfd2FpdCAtIFVzZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBDUFVzIGRpc2NhcmQgb2xkIHZhbHVlIG9mCiAgKiBwbV9pZGxlIGFuZCB1cGRhdGUgdG8gbmV3IHBtX2lkbGUgdmFsdWUuIFJlcXVpcmVkIHdoaWxlIGNoYW5naW5nIHBtX2lkbGUKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lvX3RyYXBwZWQuYyBiL2FyY2gvc2gva2VybmVsL2lvX3RyYXBwZWQuYwppbmRleCA2OWJlNjAzLi40YThiYjRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pb190cmFwcGVkLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jCkBAIC0xODQsMzEgKzE4NCwzMSBAQAogCiAJc3dpdGNoIChzcmNfbGVuKSB7CiAJY2FzZSAxOgotCQl0bXAgPSBjdHJsX2luYihzcmNfYWRkcik7CisJCXRtcCA9IF9fcmF3X3JlYWRiKHNyY19hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQl0bXAgPSBjdHJsX2ludyhzcmNfYWRkcik7CisJCXRtcCA9IF9fcmF3X3JlYWR3KHNyY19hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQl0bXAgPSBjdHJsX2lubChzcmNfYWRkcik7CisJCXRtcCA9IF9fcmF3X3JlYWRsKHNyY19hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSA4OgotCQl0bXAgPSBjdHJsX2lucShzcmNfYWRkcik7CisJCXRtcCA9IF9fcmF3X3JlYWRxKHNyY19hZGRyKTsKIAkJYnJlYWs7CiAJfQogCiAJc3dpdGNoIChkc3RfbGVuKSB7CiAJY2FzZSAxOgotCQljdHJsX291dGIodG1wLCBkc3RfYWRkcik7CisJCV9fcmF3X3dyaXRlYih0bXAsIGRzdF9hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQljdHJsX291dHcodG1wLCBkc3RfYWRkcik7CisJCV9fcmF3X3dyaXRldyh0bXAsIGRzdF9hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQljdHJsX291dGwodG1wLCBkc3RfYWRkcik7CisJCV9fcmF3X3dyaXRlbCh0bXAsIGRzdF9hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSA4OgotCQljdHJsX291dHEodG1wLCBkc3RfYWRkcik7CisJCV9fcmF3X3dyaXRlcSh0bXAsIGRzdF9hZGRyKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNzEsNiArMjcxLDggQEAKIAlpbnNuX3NpemVfdCBpbnN0cnVjdGlvbjsKIAlpbnQgdG1wOwogCisJaWYgKHRyYXBwZWRfaW9fZGlzYWJsZSkKKwkJcmV0dXJuIDA7CiAJaWYgKCFsb29rdXBfdGlvcChhZGRyZXNzKSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2tnZGIuYyBiL2FyY2gvc2gva2VybmVsL2tnZGIuYwppbmRleCAzZTUzMmQwLi43MGM2OTY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwva2dkYi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFN1cGVySCBLR0RCIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwOCAtIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBTaW5nbGUgc3RlcHBpbmcgdGFrZW4gZnJvbSB0aGUgb2xkIHN0dWIgYnkgSGVucnkgQmVsbCBhbmQgSmVyZW15IFNpZWdlbC4KICAqCkBAIC0yNTEsMjQgKzI1MSw2MCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorc3RhdGljIGludCBfX2tnZGJfbm90aWZ5KHN0cnVjdCBkaWVfYXJncyAqYXJncywgdW5zaWduZWQgbG9uZyBjbWQpCit7CisJaW50IHJldDsKIAotQlVJTERfVFJBUF9IQU5ETEVSKGJyZWFrcG9pbnQpCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERJRV9CUkVBS1BPSU5UOgorCQkvKgorCQkgKiBUaGlzIG1lYW5zIGEgdXNlciB0aHJlYWQgaXMgc2luZ2xlIHN0ZXBwaW5nCisJCSAqIGEgc3lzdGVtIGNhbGwgd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQKKwkJICovCisJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKKwkJCXJldHVybiBOT1RJRllfRE9ORTsKKworCQlyZXQgPSBrZ2RiX2hhbmRsZV9leGNlcHRpb24oYXJncy0+dHJhcG5yICYgMHhmZiwgYXJncy0+c2lnbnIsCisJCQkJCSAgICBhcmdzLT5lcnIsIGFyZ3MtPnJlZ3MpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIE5PVElGWV9ET05FOworCisJCWJyZWFrOworCX0KKworCXJldHVybiBOT1RJRllfU1RPUDsKK30KKworc3RhdGljIGludAora2dkYl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqcHRyKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JVFJBUF9IQU5ETEVSX0RFQ0w7CisJaW50IHJldDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlrZ2RiX2hhbmRsZV9leGNlcHRpb24odmVjID4+IDIsIFNJR1RSQVAsIDAsIHJlZ3MpOworCXJldCA9IF9fa2dkYl9ub3RpZnkocHRyLCBjbWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2dkYl9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAk9IGtnZGJfbm90aWZ5LAorCisJLyoKKwkgKiBMb3dlc3QtcHJpbyBub3RpZmllciBwcmlvcml0eSwgd2Ugd2FudCB0byBiZSBub3RpZmllZCBsYXN0OgorCSAqLworCS5wcmlvcml0eQk9IC1JTlRfTUFYLAorfTsKKwogaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX2RpZV9ub3RpZmllcigma2dkYl9ub3RpZmllcik7CiB9CiAKIHZvaWQga2dkYl9hcmNoX2V4aXQodm9pZCkKIHsKKwl1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcigma2dkYl9ub3RpZmllcik7CiB9CiAKIHN0cnVjdCBrZ2RiX2FyY2ggYXJjaF9rZ2RiX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCA3NmYyODAyLi43NjcyMTQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KIAogdHlwZWRlZiB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCkBAIC0yOCwxNSArMzAsMTEgQEAKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVsb2NhdGVfbmV3X2tlcm5lbFtdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7Ci1leHRlcm4gdm9pZCAqZ2RiX3Zicl92ZWN0b3I7CiBleHRlcm4gdm9pZCAqdmJyX2Jhc2U7CiAKLXZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQordm9pZCBuYXRpdmVfbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLX0KLQotdm9pZCBtYWNoaW5lX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoteworCS8qIE5vdGhpbmcgdG8gZG8gZm9yIFVQLCBidXQgZGVmaW5pdGVseSBicm9rZW4gZm9yIFNNUC4uICovCiB9CiAKIC8qCkBAIC0xMTcsMTEgKzExNSw3IEBACiAJa2V4ZWNfaW5mbyhpbWFnZSk7CiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQotCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDoKLQkJICAgICA6ICJyIiAoKCh1bnNpZ25lZCBsb25nKSBnZGJfdmJyX3ZlY3RvcikgLSAweDEwMCkKLQkJICAgICA6ICJtZW1vcnkiKTsKLSNlbmRpZgorCXNoX2Jpb3NfdmJyX3JlbG9hZCgpOwogCiAJLyogbm93IGNhbGwgaXQgKi8KIAlybmsgPSAocmVsb2NhdGVfbmV3X2tlcm5lbF90KSByZWJvb3RfY29kZV9idWZmZXI7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jIGIvYXJjaC9zaC9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwppbmRleCAyNGVhODM3Li5hOWRkM2FiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKQEAgLTY4LDkgKzY4LDYgQEAKIAogCWlzX3VzZXIgPSB1c2VyX21vZGUocmVncyk7CiAKLQlpZiAoIWN1cnJlbnQgfHwgY3VycmVudC0+cGlkID09IDApCi0JCXJldHVybjsKLQogCWlmIChpc191c2VyICYmIGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORykKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhZGQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwpAQCAtMCwwICsxLDEwMCBAQAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfeHN0YXRlX2NhY2hlcCA9IE5VTEw7Cit1bnNpZ25lZCBpbnQgeHN0YXRlX3NpemU7CisKK2ludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpCit7CisJKmRzdCA9ICpzcmM7CisKKwlpZiAoc3JjLT50aHJlYWQueHN0YXRlKSB7CisJCWRzdC0+dGhyZWFkLnhzdGF0ZSA9IGttZW1fY2FjaGVfYWxsb2ModGFza194c3RhdGVfY2FjaGVwLAorCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghZHN0LT50aHJlYWQueHN0YXRlKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbWNweShkc3QtPnRocmVhZC54c3RhdGUsIHNyYy0+dGhyZWFkLnhzdGF0ZSwgeHN0YXRlX3NpemUpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGZyZWVfdGhyZWFkX3hzdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAodHNrLT50aHJlYWQueHN0YXRlKSB7CisJCWttZW1fY2FjaGVfZnJlZSh0YXNrX3hzdGF0ZV9jYWNoZXAsIHRzay0+dGhyZWFkLnhzdGF0ZSk7CisJCXRzay0+dGhyZWFkLnhzdGF0ZSA9IE5VTEw7CisJfQorfQorCisjaWYgVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0aHJlYWRfaW5mb19jYWNoZTsKKworc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCisJdGkgPSBrbWVtX2NhY2hlX2FsbG9jKHRocmVhZF9pbmZvX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkodGkgPT0gTlVMTCkpCisJCXJldHVybiBOVUxMOworI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorCW1lbXNldCh0aSwgMCwgVEhSRUFEX1NJWkUpOworI2VuZGlmCisJcmV0dXJuIHRpOworfQorCit2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSkKK3sKKwlmcmVlX3RocmVhZF94c3RhdGUodGktPnRhc2spOworCWttZW1fY2FjaGVfZnJlZSh0aHJlYWRfaW5mb19jYWNoZSwgdGkpOworfQorCit2b2lkIHRocmVhZF9pbmZvX2NhY2hlX2luaXQodm9pZCkKK3sKKwl0aHJlYWRfaW5mb19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJ0aHJlYWRfaW5mbyIsIFRIUkVBRF9TSVpFLAorCQkJCQkgICAgICBUSFJFQURfU0laRSwgU0xBQl9QQU5JQywgTlVMTCk7Cit9CisjZWxzZQorc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKKwlnZnBfdCBtYXNrID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk87CisjZWxzZQorCWdmcF90IG1hc2sgPSBHRlBfS0VSTkVMOworI2VuZGlmCisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKilfX2dldF9mcmVlX3BhZ2VzKG1hc2ssIFRIUkVBRF9TSVpFX09SREVSKTsKK30KKwordm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpCit7CisJZnJlZV90aHJlYWRfeHN0YXRlKHRpLT50YXNrKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXRpLCBUSFJFQURfU0laRV9PUkRFUik7Cit9CisjZW5kaWYgLyogVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVCAqLworCit2b2lkIGFyY2hfdGFza19jYWNoZV9pbml0KHZvaWQpCit7CisJaWYgKCF4c3RhdGVfc2l6ZSkKKwkJcmV0dXJuOworCisJdGFza194c3RhdGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInRhc2tfeHN0YXRlIiwgeHN0YXRlX3NpemUsCisJCQkJCSAgICAgICBfX2FsaWdub2ZfXyh1bmlvbiB0aHJlYWRfeHN0YXRlKSwKKwkJCQkJICAgICAgIFNMQUJfUEFOSUMgfCBTTEFCX05PVFJBQ0ssIE5VTEwpOworfQorCisjaWZkZWYgQ09ORklHX1NIX0ZQVV9FTVUKKyMgZGVmaW5lIEhBVkVfU09GVEZQCTEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1NPRlRGUAkwCisjZW5kaWYKKwordm9pZCBpbml0X3RocmVhZF94c3RhdGUodm9pZCkKK3sKKwlpZiAoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKQorCQl4c3RhdGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0KTsKKwllbHNlIGlmIChIQVZFX1NPRlRGUCkKKwkJeHN0YXRlX3NpemUgPSBzaXplb2Yoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCk7CisJZWxzZQorCQl4c3RhdGVfc2l6ZSA9IDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggZDhhZjg4OS4uM2NiODhmMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMTYsNjUgKzE2LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+Ci0jaW5jbHVkZSA8bGludXgva2RlYnVnLmg+Ci0jaW5jbHVkZSA8bGludXgvdGljay5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91YmMuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8YXNtL3dhdGNoZG9nLmg+Ci0KLWludCB1YmNfdXNlcmNudCA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfMzJCSVQKLXN0YXRpYyB2b2lkIHdhdGNoZG9nX3RyaWdnZXJfaW1tZWRpYXRlKHZvaWQpCi17Ci0Jc2hfd2R0X3dyaXRlX2NudCgweEZGKTsKLQlzaF93ZHRfd3JpdGVfY3NyKDB4QzIpOwotfQotCi12b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCi17Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCS8qIFVzZSB3YXRjaGRvZyB0aW1lciB0byB0cmlnZ2VyIHJlc2V0ICovCi0Jd2F0Y2hkb2dfdHJpZ2dlcl9pbW1lZGlhdGUoKTsKLQotCXdoaWxlICgxKQotCQljcHVfc2xlZXAoKTsKLX0KLSNlbHNlCi12b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCi17Ci0JLyogU1IuQkw9MSBhbmQgaW52b2tlIGFkZHJlc3MgZXJyb3IgdG8gbGV0IENQVSByZXNldCAobWFudWFsIHJlc2V0KSAqLwotCWFzbSB2b2xhdGlsZSgibGRjICUwLCBzclxuXHQiCi0JCSAgICAgIm1vdi5sIEAlMSwgJTAiIDogOiAiciIgKDB4MTAwMDAwMDApLCAiciIgKDB4ODAwMDAwMDEpKTsKLX0KLSNlbmRpZgotCi12b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQotewotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQl3aGlsZSAoMSkKLQkJY3B1X3NsZWVwKCk7Ci19Ci0KLXZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKLXsKLQlpZiAocG1fcG93ZXJfb2ZmKQotCQlwbV9wb3dlcl9vZmYoKTsKLX0KIAogdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewpAQCAtOTEsNyArNDEsNyBAQAogCXByaW50aygiUEMgIDogJTA4bHggU1AgIDogJTA4bHggU1IgIDogJTA4bHggIiwKIAkgICAgICAgcmVncy0+cGMsIHJlZ3MtPnJlZ3NbMTVdLCByZWdzLT5zcik7CiAjaWZkZWYgQ09ORklHX01NVQotCXByaW50aygiVEVBIDogJTA4eFxuIiwgY3RybF9pbmwoTU1VX1RFQSkpOworCXByaW50aygiVEVBIDogJTA4eFxuIiwgX19yYXdfcmVhZGwoTU1VX1RFQSkpOwogI2Vsc2UKIAlwcmludGsoIlxuIik7CiAjZW5kaWYKQEAgLTE0NywyMSArOTcsMzQgQEAKIH0KIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKK3ZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5ld19wYywKKwkJICB1bnNpZ25lZCBsb25nIG5ld19zcCkKK3sKKwlzZXRfZnMoVVNFUl9EUyk7CisKKwlyZWdzLT5wciA9IDA7CisJcmVncy0+c3IgPSBTUl9GRDsKKwlyZWdzLT5wYyA9IG5ld19wYzsKKwlyZWdzLT5yZWdzWzE1XSA9IG5ld19zcDsKKworCWZyZWVfdGhyZWFkX3hzdGF0ZShjdXJyZW50KTsKK30KK0VYUE9SVF9TWU1CT0woc3RhcnRfdGhyZWFkKTsKKwogLyoKICAqIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uCiAgKi8KIHZvaWQgZXhpdF90aHJlYWQodm9pZCkKIHsKLQlpZiAoY3VycmVudC0+dGhyZWFkLnViY19wYykgewotCQljdXJyZW50LT50aHJlYWQudWJjX3BjID0gMDsKLQkJdWJjX3VzZXJjbnQgLT0gMTsKLQl9CiB9CiAKIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0hfRlBVKQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCWZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHRzayk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9GUFUpCiAJLyogRm9yZ2V0IGxhenkgRlBVIHN0YXRlICovCiAJY2xlYXJfZnB1KHRzaywgdGFza19wdF9yZWdzKHRzaykpOwogCWNsZWFyX3VzZWRfbWF0aCgpOwpAQCAtMjA5LDExICsxNzIsMTAgQEAKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gdGFza190aHJlYWRfaW5mbyhwKTsKIAlzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzOwotI2lmIGRlZmluZWQoQ09ORklHX1NIX0RTUCkKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1NIX0RTUCkKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKIAlpZiAoaXNfZHNwX2VuYWJsZWQodHNrKSkgewogCQkvKiBXZSBjYW4gdXNlIHRoZSBfX3NhdmVfZHNwIG9yIGp1c3QgY29weSB0aGUgc3RydWN0OgogCQkgKiBfX3NhdmVfZHNwKHApOwpAQCAtMjQ0LDUzICsyMDYsMTEgQEAKIAlwLT50aHJlYWQuc3AgPSAodW5zaWduZWQgbG9uZykgY2hpbGRyZWdzOwogCXAtPnRocmVhZC5wYyA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOwogCi0JcC0+dGhyZWFkLnViY19wYyA9IDA7CisJbWVtc2V0KHAtPnRocmVhZC5wdHJhY2VfYnBzLCAwLCBzaXplb2YocC0+dGhyZWFkLnB0cmFjZV9icHMpKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBUcmFjaW5nIGJ5IHVzZXIgYnJlYWsgY29udHJvbGxlci4gICovCi1zdGF0aWMgdm9pZCB1YmNfc2V0X3RyYWNpbmcoaW50IGFzaWQsIHVuc2lnbmVkIGxvbmcgcGMpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQl2YWwgPSAoVUJDX0NCUl9JRF9JTlNUIHwgVUJDX0NCUl9SV19SRUFEIHwgVUJDX0NCUl9DRSk7Ci0JdmFsIHw9IChVQkNfQ0JSX0FJRSB8IFVCQ19DQlJfQUlWX1NFVChhc2lkKSk7Ci0KLQljdHJsX291dGwodmFsLCBVQkNfQ0JSMCk7Ci0JY3RybF9vdXRsKHBjLCAgVUJDX0NBUjApOwotCWN0cmxfb3V0bCgweDAsIFVCQ19DQU1SMCk7Ci0JY3RybF9vdXRsKDB4MCwgVUJDX0NCQ1IpOwotCi0JdmFsID0gKFVCQ19DUlJfUkVTIHwgVUJDX0NSUl9QQ0IgfCBVQkNfQ1JSX0JJRSk7Ci0JY3RybF9vdXRsKHZhbCwgVUJDX0NSUjApOwotCi0JLyogUmVhZCBVQkMgcmVnaXN0ZXIgdGhhdCB3ZSB3cm90ZSBsYXN0LCBmb3IgY2hlY2tpbmcgdXBkYXRlICovCi0JdmFsID0gY3RybF9pbmwoVUJDX0NSUjApOwotCi0jZWxzZQkvKiBDT05GSUdfQ1BVX1NINEEgKi8KLQljdHJsX291dGwocGMsIFVCQ19CQVJBKTsKLQotI2lmZGVmIENPTkZJR19NTVUKLQljdHJsX291dGIoYXNpZCwgVUJDX0JBU1JBKTsKLSNlbmRpZgotCi0JY3RybF9vdXRsKDAsIFVCQ19CQU1SQSk7Ci0KLQlpZiAoY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MjkgfHwKLQkgICAgY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MTAgfHwKLQkgICAgY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MTIgfHwKLQkgICAgY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDcyMDMpewotCQljdHJsX291dHcoQkJSX0lOU1QgfCBCQlJfUkVBRCB8IEJCUl9DUFUsIFVCQ19CQlJBKTsKLQkJY3RybF9vdXRsKEJSQ1JfUENCQSB8IEJSQ1JfUENURSwgVUJDX0JSQ1IpOwotCX0gZWxzZSB7Ci0JCWN0cmxfb3V0dyhCQlJfSU5TVCB8IEJCUl9SRUFELCBVQkNfQkJSQSk7Ci0JCWN0cmxfb3V0dyhCUkNSX1BDQkEsIFVCQ19CUkNSKTsKLQl9Ci0jZW5kaWYJLyogQ09ORklHX0NQVV9TSDRBICovCi19Ci0KIC8qCiAgKglzd2l0Y2hfdG8oeCx5KSBzaG91bGQgc3dpdGNoIHRhc2tzIGZyb20geCB0byB5LgogICoKQEAgLTMwNCw3ICsyMjQsNyBAQAogCiAJLyogd2UncmUgZ29pbmcgdG8gdXNlIHRoaXMgc29vbiwgYWZ0ZXIgYSBmZXcgZXhwZW5zaXZlIHRoaW5ncyAqLwogCWlmIChuZXh0LT5mcHVfY291bnRlciA+IDUpCi0JCXByZWZldGNoKCZuZXh0X3QtPmZwdS5oYXJkKTsKKwkJcHJlZmV0Y2gobmV4dF90LT54c3RhdGUpOwogCiAjaWZkZWYgQ09ORklHX01NVQogCS8qCkBAIC0zMTYsMzIgKzIzNiwxMyBAQAogCQkgICAgIDogInIiICh0YXNrX3RocmVhZF9pbmZvKG5leHQpKSk7CiAjZW5kaWYKIAotCS8qIElmIG5vIHRhc2tzIGFyZSB1c2luZyB0aGUgVUJDLCB3ZSdyZSBkb25lICovCi0JaWYgKHViY191c2VyY250ID09IDApCi0JCS8qIElmIG5vIHRhc2tzIGFyZSB1c2luZyB0aGUgVUJDLCB3ZSdyZSBkb25lICovOwotCWVsc2UgaWYgKG5leHQtPnRocmVhZC51YmNfcGMgJiYgbmV4dC0+bW0pIHsKLQkJaW50IGFzaWQgPSAwOwotI2lmZGVmIENPTkZJR19NTVUKLQkJYXNpZCB8PSBjcHVfYXNpZChzbXBfcHJvY2Vzc29yX2lkKCksIG5leHQtPm1tKTsKLSNlbmRpZgotCQl1YmNfc2V0X3RyYWNpbmcoYXNpZCwgbmV4dC0+dGhyZWFkLnViY19wYyk7Ci0JfSBlbHNlIHsKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLQkJY3RybF9vdXRsKFVCQ19DQlJfSU5JVCwgVUJDX0NCUjApOwotCQljdHJsX291dGwoVUJDX0NSUl9JTklULCBVQkNfQ1JSMCk7Ci0jZWxzZQotCQljdHJsX291dHcoMCwgVUJDX0JCUkEpOwotCQljdHJsX291dHcoMCwgVUJDX0JCUkIpOwotI2VuZGlmCi0JfQotCiAJLyoKIAkgKiBJZiB0aGUgdGFzayBoYXMgdXNlZCBmcHUgdGhlIGxhc3QgNSB0aW1lc2xpY2VzLCBqdXN0IGRvIGEgZnVsbAogCSAqIHJlc3RvcmUgb2YgdGhlIG1hdGggc3RhdGUgaW1tZWRpYXRlbHkgdG8gYXZvaWQgdGhlIHRyYXA7IHRoZQogCSAqIGNoYW5jZXMgb2YgbmVlZGluZyBGUFUgc29vbiBhcmUgb2J2aW91c2x5IGhpZ2ggbm93CiAJICovCiAJaWYgKG5leHQtPmZwdV9jb3VudGVyID4gNSkKLQkJZnB1X3N0YXRlX3Jlc3RvcmUodGFza19wdF9yZWdzKG5leHQpKTsKKwkJX19mcHVfc3RhdGVfcmVzdG9yZSgpOwogCiAJcmV0dXJuIHByZXY7CiB9CkBAIC00MzQsMjAgKzMzNSwzIEBACiAKIAlyZXR1cm4gcGM7CiB9Ci0KLWFzbWxpbmthZ2Ugdm9pZCBicmVha19wb2ludF90cmFwKHZvaWQpCi17Ci0JLyogQ2xlYXIgdHJhY2luZy4gICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JY3RybF9vdXRsKFVCQ19DQlJfSU5JVCwgVUJDX0NCUjApOwotCWN0cmxfb3V0bChVQkNfQ1JSX0lOSVQsIFVCQ19DUlIwKTsKLSNlbHNlCi0JY3RybF9vdXR3KDAsIFVCQ19CQlJBKTsKLQljdHJsX291dHcoMCwgVUJDX0JCUkIpOwotCWN0cmxfb3V0bCgwLCBVQkNfQlJDUik7Ci0jZW5kaWYKLQljdXJyZW50LT50aHJlYWQudWJjX3BjID0gMDsKLQl1YmNfdXNlcmNudCAtPSAxOwotCi0JZm9yY2Vfc2lnKFNJR1RSQVAsIGN1cnJlbnQpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGVjNzlmYWYuLmM5MDk1N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTMyLDMwICszMiw3IEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdCAqbGFzdF90YXNrX3VzZWRfbWF0aCA9IE5VTEw7CiAKLXZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKLXsKLQlleHRlcm4gdm9pZCBwaHlzX3N0ZXh0KHZvaWQpOwotCi0JcGh5c19zdGV4dCgpOwotfQotCi12b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQotewotCWZvciAoOzspOwotfQotCi12b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkic2xlZXBcblx0IgotCQkic3luY2lcblx0IgotCQkibm9wO25vcDtub3A7bm9wXG5cdCIKLQkpOwotCi0JcGFuaWMoIlVuZXhwZWN0ZWQgd2FrZXVwIVxuIik7Ci19Ci0KLXZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKK3ZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBhaCwgYWwsIGJoLCBibCwgY2gsIGNsOwogCkBAIC00MTAsNyArMzg3LDcgQEAKIAkJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCQl9CiAKLQkJbWVtY3B5KGZwdSwgJnRzay0+dGhyZWFkLmZwdS5oYXJkLCBzaXplb2YoKmZwdSkpOworCQltZW1jcHkoZnB1LCAmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCBzaXplb2YoKmZwdSkpOwogCX0KIAogCXJldHVybiBmcHZhbGlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwppbmRleCA5YmUzNWYzLi5jNjI1Y2RhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFN1cGVySCBwcm9jZXNzIHRyYWNpbmcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIEtheiBLb2ppbWEgJiBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDggIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBBdWRpdCBzdXBwb3J0IGJ5IFl1aWNoaSBOYWthbXVyYSA8eW5ha2FtQGhpdGFjaGlzb2Z0LmpwPgogICoKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTYzLDMzICs2NCw2NCBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHB0cmFjZV90cmlnZ2VyZWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCBpbnQgbm1pLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOworCisJLyoKKwkgKiBEaXNhYmxlIHRoZSBicmVha3BvaW50IHJlcXVlc3QgaGVyZSBzaW5jZSBwdHJhY2UgaGFzIGRlZmluZWQgYQorCSAqIG9uZS1zaG90IGJlaGF2aW91ciBmb3IgYnJlYWtwb2ludCBleGNlcHRpb25zLgorCSAqLworCWF0dHIgPSBicC0+YXR0cjsKKwlhdHRyLmRpc2FibGVkID0gdHJ1ZTsKKwltb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0cik7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCA9ICZ0c2stPnRocmVhZDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOworCisJYnAgPSB0aHJlYWQtPnB0cmFjZV9icHNbMF07CisJaWYgKCFicCkgeworCQlod19icmVha3BvaW50X2luaXQoJmF0dHIpOworCisJCWF0dHIuYnBfYWRkciA9IGFkZHI7CisJCWF0dHIuYnBfbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fMjsKKwkJYXR0ci5icF90eXBlID0gSFdfQlJFQUtQT0lOVF9SOworCisJCWJwID0gcmVnaXN0ZXJfdXNlcl9od19icmVha3BvaW50KCZhdHRyLCBwdHJhY2VfdHJpZ2dlcmVkLCB0c2spOworCQlpZiAoSVNfRVJSKGJwKSkKKwkJCXJldHVybiBQVFJfRVJSKGJwKTsKKworCQl0aHJlYWQtPnB0cmFjZV9icHNbMF0gPSBicDsKKwl9IGVsc2UgeworCQlpbnQgZXJyOworCisJCWF0dHIgPSBicC0+YXR0cjsKKwkJYXR0ci5icF9hZGRyID0gYWRkcjsKKwkJZXJyID0gbW9kaWZ5X3VzZXJfaHdfYnJlYWtwb2ludChicCwgJmF0dHIpOworCQlpZiAodW5saWtlbHkoZXJyKSkKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKLQkvKiBOZXh0IHNjaGVkdWxpbmcgd2lsbCBzZXQgdXAgVUJDICovCi0JaWYgKGNoaWxkLT50aHJlYWQudWJjX3BjID09IDApCi0JCXViY191c2VyY250ICs9IDE7Ci0KLQljaGlsZC0+dGhyZWFkLnViY19wYyA9IGdldF9zdGFja19sb25nKGNoaWxkLAotCQkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykpOworCXVuc2lnbmVkIGxvbmcgcGMgPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7CiAKIAlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU0lOR0xFU1RFUCk7CisKKwlzZXRfc2luZ2xlX3N0ZXAoY2hpbGQsIHBjKTsKIH0KIAogdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKLQotCS8qCi0JICogRW5zdXJlIHRoZSBVQkMgaXMgbm90IHByb2dyYW1tZWQgYXQgdGhlIG5leHQgY29udGV4dCBzd2l0Y2guCi0JICoKLQkgKiBOb3JtYWxseSB0aGlzIGlzIG5vdCBuZWVkZWQgYnV0IHRoZXJlIGFyZSBzZXF1ZW5jZXMgc3VjaCBhcwotCSAqIHNpbmdsZXN0ZXAsIHNpZ25hbCBkZWxpdmVyeSwgYW5kIGNvbnRpbnVlIHRoYXQgbGVhdmUgdGhlCi0JICogdWJjX3BjIG5vbi16ZXJvIGxlYWRpbmcgdG8gc3B1cmlvdXMgU0lHVFJBUHMuCi0JICovCi0JaWYgKGNoaWxkLT50aHJlYWQudWJjX3BjICE9IDApIHsKLQkJdWJjX3VzZXJjbnQgLT0gMTsKLQkJY2hpbGQtPnRocmVhZC51YmNfcGMgPSAwOwotCX0KIH0KIAogLyoKQEAgLTE2MywxMCArMTk1LDEwIEBACiAKIAlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCiAJCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCQkgICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKwkJCQkJICAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwgMCwgLTEpOwogCiAJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCi0JCQkJICAgJnRhcmdldC0+dGhyZWFkLmZwdS5zb2Z0LCAwLCAtMSk7CisJCQkJICAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdSwgMCwgLTEpOwogfQogCiBzdGF0aWMgaW50IGZwcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCkBAIC0xODQsMTAgKzIxNiwxMCBAQAogCiAJaWYgKChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQogCQlyZXR1cm4gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCQkgICZ0YXJnZXQtPnRocmVhZC5mcHUuaGFyZCwgMCwgLTEpOworCQkJCQkgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsIDAsIC0xKTsKIAogCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCi0JCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LnNvZnQsIDAsIC0xKTsKKwkJCQkgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPnNvZnRmcHUsIDAsIC0xKTsKIH0KIAogc3RhdGljIGludCBmcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LApAQCAtMzMzLDcgKzM2NSw3IEBACiAJCQkJZWxzZQogCQkJCQl0bXAgPSAwOwogCQkJfSBlbHNlCi0JCQkJdG1wID0gKChsb25nICopJmNoaWxkLT50aHJlYWQuZnB1KQorCQkJCXRtcCA9ICgobG9uZyAqKWNoaWxkLT50aHJlYWQueHN0YXRlKQogCQkJCQlbKGFkZHIgLSAobG9uZykmZHVtbXktPmZwdSkgPj4gMl07CiAJCX0gZWxzZSBpZiAoYWRkciA9PSAobG9uZykgJmR1bW15LT51X2ZwdmFsaWQpCiAJCQl0bXAgPSAhIXRza191c2VkX21hdGgoY2hpbGQpOwpAQCAtMzYyLDcgKzM5NCw3IEBACiAJCWVsc2UgaWYgKGFkZHIgPj0gKGxvbmcpICZkdW1teS0+ZnB1ICYmCiAJCQkgYWRkciA8IChsb25nKSAmZHVtbXktPnVfZnB2YWxpZCkgewogCQkJc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKGNoaWxkKTsKLQkJCSgobG9uZyAqKSZjaGlsZC0+dGhyZWFkLmZwdSkKKwkJCSgobG9uZyAqKWNoaWxkLT50aHJlYWQueHN0YXRlKQogCQkJCVsoYWRkciAtIChsb25nKSZkdW1teS0+ZnB1KSA+PiAyXSA9IGRhdGE7CiAJCQlyZXQgPSAwOwogCQl9IGVsc2UgaWYgKGFkZHIgPT0gKGxvbmcpICZkdW1teS0+dV9mcHZhbGlkKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCmluZGV4IGIwNjNlYjguLjVmZDY0NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCkBAIC04OCw3ICs4OCw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCXRtcCA9ICgobG9uZyAqKSZ0YXNrLT50aHJlYWQuZnB1KVthZGRyIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKwl0bXAgPSAoKGxvbmcgKil0YXNrLT50aHJlYWQueHN0YXRlKVthZGRyIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKIAlyZXR1cm4gdG1wOwogfQogCkBAIC0xMTQsOCArMTE0LDcgQEAKIAlyZWdzID0gKHN0cnVjdCBwdF9yZWdzKikoKHVuc2lnbmVkIGNoYXIgKil0YXNrICsgVEhSRUFEX1NJWkUpIC0gMTsKIAogCWlmICghdHNrX3VzZWRfbWF0aCh0YXNrKSkgewotCQlmcGluaXQoJnRhc2stPnRocmVhZC5mcHUuaGFyZCk7Ci0JCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXNrKTsKKwkJaW5pdF9mcHUodGFzayk7CiAJfSBlbHNlIGlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoID09IHRhc2spIHsKIAkJZW5hYmxlX2ZwdSgpOwogCQlzYXZlX2ZwdSh0YXNrKTsKQEAgLTEyNCw3ICsxMjMsNyBAQAogCQlyZWdzLT5zciB8PSBTUl9GRDsKIAl9CiAKLQkoKGxvbmcgKikmdGFzay0+dGhyZWFkLmZwdSlbYWRkciAvIHNpemVvZih1bnNpZ25lZCBsb25nKV0gPSBkYXRhOworCSgobG9uZyAqKXRhc2stPnRocmVhZC54c3RhdGUpW2FkZHIgLyBzaXplb2YodW5zaWduZWQgbG9uZyldID0gZGF0YTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI2LDcgKzIyNSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkgICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKwkJCQkgICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAwLCAtMSk7CiB9CiAKIHN0YXRpYyBpbnQgZnByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKQEAgLTI0Myw3ICsyNDIsNyBAQAogCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXJnZXQpOwogCiAJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkgICZ0YXJnZXQtPnRocmVhZC5mcHUuaGFyZCwgMCwgLTEpOworCQkJCSAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwgMCwgLTEpOwogfQogCiBzdGF0aWMgaW50IGZwcmVnc19hY3RpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCkBAIC00ODYsOSArNDg1LDEwIEBACiB9CiAKIC8qIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLWFzbWxpbmthZ2Ugdm9pZCBkb19zb2Z0d2FyZV9icmVha19wb2ludCh1bnNpZ25lZCBsb25nIGxvbmcgdmVjLAotCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK0JVSUxEX1RSQVBfSEFORExFUihicmVha3BvaW50KQogeworCVRSQVBfSEFORExFUl9ERUNMOworCiAJLyogV2UgbmVlZCB0byBmb3J3YXJkIHN0ZXAgdGhlIFBDLCB0byBjb3VudGVyYWN0IHRoZSBiYWNrc3RlcCBkb25lCiAJICAgaW4gc2lnbmFsLmMuICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcmVib290LmMgYi9hcmNoL3NoL2tlcm5lbC9yZWJvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWZjYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvcmVib290LmMKQEAgLTAsMCArMSw5OCBAQAorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKyNpbmNsdWRlIDxhc20vd2F0Y2hkb2cuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCit2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKTsKK0VYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorc3RhdGljIHZvaWQgd2F0Y2hkb2dfdHJpZ2dlcl9pbW1lZGlhdGUodm9pZCkKK3sKKwlzaF93ZHRfd3JpdGVfY250KDB4RkYpOworCXNoX3dkdF93cml0ZV9jc3IoMHhDMik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbmF0aXZlX21hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCS8qIEFkZHJlc3MgZXJyb3Igd2l0aCBTUi5CTD0xIGZpcnN0LiAqLworCXRyaWdnZXJfYWRkcmVzc19lcnJvcigpOworCisjaWZkZWYgQ09ORklHX1NVUEVSSDMyCisJLyogSWYgdGhhdCBmYWlscyBvciBpcyB1bnN1cHBvcnRlZCwgZ28gZm9yIHRoZSB3YXRjaGRvZyBuZXh0LiAqLworCXdhdGNoZG9nX3RyaWdnZXJfaW1tZWRpYXRlKCk7CisjZW5kaWYKKworCS8qCisJICogR2l2ZSB1cCBhbmQgc2xlZXAuCisJICovCisJd2hpbGUgKDEpCisJCWNwdV9zbGVlcCgpOworfQorCitzdGF0aWMgdm9pZCBuYXRpdmVfbWFjaGluZV9zaHV0ZG93bih2b2lkKQoreworCXNtcF9zZW5kX3N0b3AoKTsKK30KKworc3RhdGljIHZvaWQgbmF0aXZlX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJaWYgKHBtX3Bvd2VyX29mZikKKwkJcG1fcG93ZXJfb2ZmKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hdGl2ZV9tYWNoaW5lX2hhbHQodm9pZCkKK3sKKwkvKiBzdG9wIG90aGVyIGNwdXMgKi8KKwltYWNoaW5lX3NodXRkb3duKCk7CisKKwkvKiBzdG9wIHRoaXMgY3B1ICovCisJc3RvcF90aGlzX2NwdShOVUxMKTsKK30KKworc3RydWN0IG1hY2hpbmVfb3BzIG1hY2hpbmVfb3BzID0geworCS5wb3dlcl9vZmYJPSBuYXRpdmVfbWFjaGluZV9wb3dlcl9vZmYsCisJLnNodXRkb3duCT0gbmF0aXZlX21hY2hpbmVfc2h1dGRvd24sCisJLnJlc3RhcnQJPSBuYXRpdmVfbWFjaGluZV9yZXN0YXJ0LAorCS5oYWx0CQk9IG5hdGl2ZV9tYWNoaW5lX2hhbHQsCisjaWZkZWYgQ09ORklHX0tFWEVDCisJLmNyYXNoX3NodXRkb3duID0gbmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24sCisjZW5kaWYKK307CisKK3ZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKK3sKKwltYWNoaW5lX29wcy5wb3dlcl9vZmYoKTsKK30KKwordm9pZCBtYWNoaW5lX3NodXRkb3duKHZvaWQpCit7CisJbWFjaGluZV9vcHMuc2h1dGRvd24oKTsKK30KKwordm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKQoreworCW1hY2hpbmVfb3BzLnJlc3RhcnQoY21kKTsKK30KKwordm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKK3sKKwltYWNoaW5lX29wcy5oYWx0KCk7Cit9CisKKyNpZmRlZiBDT05GSUdfS0VYRUMKK3ZvaWQgbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwltYWNoaW5lX29wcy5jcmFzaF9zaHV0ZG93bihyZWdzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggOGIwZTY5Ny4uMzQ1OWU3MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC00MjEsNiArNDIxLDggQEAKIAogCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CiAKKwl1bmNhY2hlZF9pbml0KCk7CisKIAlwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCgpOwogCiAJLyogTGV0IGVhcmx5cHJpbnRrIG91dHB1dCBlYXJseSBjb25zb2xlIG1lc3NhZ2VzICovCkBAIC00NDksMTcgKzQ1MSwxNSBAQAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CiAjZW5kaWYKKwlwYWdpbmdfaW5pdCgpOworCXBtYl9pbml0KCk7CisKKwlpb3JlbWFwX2ZpeGVkX2luaXQoKTsKIAogCS8qIFBlcmZvcm0gdGhlIG1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gKi8KIAlpZiAobGlrZWx5KHNoX212Lm12X3NldHVwKSkKIAkJc2hfbXYubXZfc2V0dXAoY21kbGluZV9wKTsKIAotCXBhZ2luZ19pbml0KCk7Ci0KLSNpZmRlZiBDT05GSUdfUE1CX0VOQUJMRQotCXBtYl9pbml0KCk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TTVAKIAlwbGF0X3NtcF9zZXR1cCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMKaW5kZXggYzg1MmY3OC4uNDc0NzVjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2hfYmlvcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2Jpb3MuYwpAQCAtMSwxOSArMSwzMCBAQAogLyoKLSAqICBsaW51eC9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMKICAqICBDIGludGVyZmFjZSBmb3IgdHJhcHBpbmcgaW50byB0aGUgc3RhbmRhcmQgTGludXhTSCBCSU9TLgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR3JlZyBCYW5rcywgTWl0Y2ggRGF2aXMKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYQorICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDEwICBQYXVsIE11bmR0CiAgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgogCiAjZGVmaW5lIEJJT1NfQ0FMTF9DT05TT0xFX1dSSVRFCQkwCiAjZGVmaW5lIEJJT1NfQ0FMTF9FVEhfTk9ERV9BRERSCQkxMAogI2RlZmluZSBCSU9TX0NBTExfU0hVVERPV04JCTExCi0jZGVmaW5lIEJJT1NfQ0FMTF9DSEFSX09VVAkJMHgxZgkvKiBUT0RPOiBoYWNrICovCiAjZGVmaW5lIEJJT1NfQ0FMTF9HREJfREVUQUNICQkweGZmCiAKK3ZvaWQgKmdkYl92YnJfdmVjdG9yID0gTlVMTDsKKwogc3RhdGljIGlubGluZSBsb25nIHNoX2Jpb3NfY2FsbChsb25nIGZ1bmMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCiAJCQkJICAgIGxvbmcgYXJnMykKIHsKQEAgLTIzLDYgKzM0LDkgQEAKIAlyZWdpc3RlciBsb25nIHI2IF9fYXNtX18oInI2IikgPSBhcmcyOwogCXJlZ2lzdGVyIGxvbmcgcjcgX19hc21fXygicjciKSA9IGFyZzM7CiAKKwlpZiAoIWdkYl92YnJfdmVjdG9yKQorCQlyZXR1cm4gLUVOT1NZUzsKKwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJ0cmFwYQkjMHgzZiI6Ij16IihyMCkKIAkJCSAgICAgOiIwIihyMCksICJyIihyNCksICJyIihyNSksICJyIihyNiksICJyIihyNykKIAkJCSAgICAgOiJtZW1vcnkiKTsKQEAgLTM0LDExICs0OCw2IEBACiAJc2hfYmlvc19jYWxsKEJJT1NfQ0FMTF9DT05TT0xFX1dSSVRFLCAobG9uZylidWYsIChsb25nKWxlbiwgMCwgMCk7CiB9CiAKLXZvaWQgc2hfYmlvc19jaGFyX291dChjaGFyIGNoKQotewotCXNoX2Jpb3NfY2FsbChCSU9TX0NBTExfQ0hBUl9PVVQsIGNoLCAwLCAwLCAwKTsKLX0KLQogdm9pZCBzaF9iaW9zX2dkYl9kZXRhY2godm9pZCkKIHsKIAlzaF9iaW9zX2NhbGwoQklPU19DQUxMX0dEQl9ERVRBQ0gsIDAsIDAsIDAsIDApOwpAQCAtNTUsMyArNjQsMTA5IEBACiB7CiAJc2hfYmlvc19jYWxsKEJJT1NfQ0FMTF9TSFVURE9XTiwgaG93LCAwLCAwLCAwKTsKIH0KKworLyoKKyAqIFJlYWQgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgVkJSIHJlZ2lzdGVyIHRvIGluaXRpYWxpc2UgdGhlIHZlY3RvcgorICogdGhyb3VnaCB3aGljaCBkZWJ1ZyBhbmQgQklPUyB0cmFwcyBhcmUgZGVsZWdhdGVkIGJ5IHRoZSBMaW51eCB0cmFwCisgKiBoYW5kbGVyLgorICovCit2b2lkIHNoX2Jpb3NfdmJyX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZicjsKKworCWlmICh1bmxpa2VseShnZGJfdmJyX3ZlY3RvcikpCisJCXJldHVybjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RjIHZiciwgJTAiIDogIj1yIiAodmJyKSk7CisKKwlpZiAodmJyKSB7CisJCWdkYl92YnJfdmVjdG9yID0gKHZvaWQgKikodmJyICsgMHgxMDApOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNldHRpbmcgR0RCIHRyYXAgdmVjdG9yIHRvICVwXG4iLAorCQkgICAgICAgZ2RiX3Zicl92ZWN0b3IpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNILUJJT1Mgbm90IGRldGVjdGVkXG4iKTsKK30KKworLyoqCisgKiBzaF9iaW9zX3Zicl9yZWxvYWQgLSBSZS1sb2FkIHRoZSBzeXN0ZW0gVkJSIGZyb20gdGhlIEJJT1MgdmVjdG9yLgorICoKKyAqIFRoaXMgY2FuIGJlIHVzZWQgYnkgc2F2ZS9yZXN0b3JlIGNvZGUgdG8gcmVpbml0aWFsaXplIHRoZSBzeXN0ZW0gVkJSCisgKiBmcm9tIHRoZSBmaXhlZCBCSU9TIFZCUi4gQSBuby1vcCBpZiBubyBCSU9TIFZCUiBpcyBrbm93bi4KKyAqLwordm9pZCBzaF9iaW9zX3Zicl9yZWxvYWQodm9pZCkKK3sKKwlpZiAoZ2RiX3Zicl92ZWN0b3IpCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCSJsZGMgJTAsIHZiciIKKwkJCToKKwkJCTogInIiICgoKHVuc2lnbmVkIGxvbmcpIGdkYl92YnJfdmVjdG9yKSAtIDB4MTAwKQorCQkJOiAibWVtb3J5IgorCQkpOworfQorCisvKgorICoJUHJpbnQgYSBzdHJpbmcgdGhyb3VnaCB0aGUgQklPUworICovCitzdGF0aWMgdm9pZCBzaF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKKwkJCQkgdW5zaWduZWQgY291bnQpCit7CisJc2hfYmlvc19jb25zb2xlX3dyaXRlKHMsIGNvdW50KTsKK30KKworLyoKKyAqCVNldHVwIGluaXRpYWwgYmF1ZC9iaXRzL3Bhcml0eS4gV2UgZG8gdHdvIHRoaW5ncyBoZXJlOgorICoJLSBjb25zdHJ1Y3QgYSBjZmxhZyBzZXR0aW5nIGZvciB0aGUgZmlyc3QgcnNfb3BlbigpCisgKgktIGluaXRpYWxpemUgdGhlIHNlcmlhbCBwb3J0CisgKglSZXR1cm4gbm9uLXplcm8gaWYgd2UgZGlkbid0IGZpbmQgYSBzZXJpYWwgcG9ydC4KKyAqLworc3RhdGljIGludCBfX2luaXQgc2hfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCit7CisJaW50CWNmbGFnID0gQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKworCS8qCisJICoJTm93IGNvbnN0cnVjdCBhIGNmbGFnIHNldHRpbmcuCisJICoJVE9ETzogdGhpcyBpcyBhIHRvdGFsbHkgYm9ndXMgY2ZsYWcsIGFzIHdlIGhhdmUKKwkgKglubyBpZGVhIHdoYXQgc2VyaWFsIHNldHRpbmdzIHRoZSBCSU9TIGlzIHVzaW5nLCBvcgorCSAqCWV2ZW4gaWYgaXRzIHVzaW5nIHRoZSBzZXJpYWwgcG9ydCBhdCBhbGwuCisJICovCisJY2ZsYWcgfD0gQjExNTIwMCB8IENTOCB8IC8qbm8gcGFyaXR5Ki8wOworCisJY28tPmNmbGFnID0gY2ZsYWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIGJpb3NfY29uc29sZSA9IHsKKwkubmFtZQkJPSAiYmlvcyIsCisJLndyaXRlCQk9IHNoX2NvbnNvbGVfd3JpdGUsCisJLnNldHVwCQk9IHNoX2NvbnNvbGVfc2V0dXAsCisJLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXgJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgKmVhcmx5X2NvbnNvbGU7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICpidWYpCit7CisJaW50IGtlZXBfZWFybHkgPSAwOworCisJaWYgKCFidWYpCisJCXJldHVybiAwOworCisJaWYgKHN0cnN0cihidWYsICJrZWVwIikpCisJCWtlZXBfZWFybHkgPSAxOworCisJaWYgKCFzdHJuY21wKGJ1ZiwgImJpb3MiLCA0KSkKKwkJZWFybHlfY29uc29sZSA9ICZiaW9zX2NvbnNvbGU7CisKKwlpZiAobGlrZWx5KGVhcmx5X2NvbnNvbGUpKSB7CisJCWlmIChrZWVwX2Vhcmx5KQorCQkJZWFybHlfY29uc29sZS0+ZmxhZ3MgJj0gfkNPTl9CT09UOworCQllbHNlCisJCQllYXJseV9jb25zb2xlLT5mbGFncyB8PSBDT05fQk9PVDsKKwkJcmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJlYXJseXByaW50ayIsIHNldHVwX2Vhcmx5X3ByaW50ayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDEyODE1Y2UuLjU3OWNkMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlzZXRfdXNlZF9tYXRoKCk7Ci0JcmV0dXJuIF9fY29weV9mcm9tX3VzZXIoJnRzay0+dGhyZWFkLmZwdS5oYXJkLCAmc2MtPnNjX2ZwcmVnc1swXSwKKwlyZXR1cm4gX19jb3B5X2Zyb21fdXNlcigmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAmc2MtPnNjX2ZwcmVnc1swXSwKIAkJCQlzaXplb2YobG9uZykqKDE2KjIrMikpOwogfQogCkBAIC0xNzUsNyArMTc1LDcgQEAKIAljbGVhcl91c2VkX21hdGgoKTsKIAogCXVubGF6eV9mcHUodHNrLCByZWdzKTsKLQlyZXR1cm4gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZ0c2stPnRocmVhZC5mcHUuaGFyZCwKKwlyZXR1cm4gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsCiAJCQkgICAgICBzaXplb2YobG9uZykqKDE2KjIrMikpOwogfQogI2VuZGlmIC8qIENPTkZJR19TSF9GUFUgKi8KQEAgLTUyOCw3ICs1MjgsNyBAQAogCQkvKiBmYWxsdGhyb3VnaCAqLwogCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKIAkJCXJlZ3MtPnJlZ3NbMF0gPSBzYXZlX3IwOwotCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShjdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKKwkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+cGMgLSA0KSk7CiAJCQlicmVhazsKIAl9CiB9CkBAIC02MjYsOSArNjI2LDkgQEAKIAkJICAgIHJlZ3MtPnJlZ3NbMF0gPT0gLUVSRVNUQVJUU1lTIHx8CiAJCSAgICByZWdzLT5yZWdzWzBdID09IC1FUkVTVEFSVE5PSU5UUikgewogCQkJcmVncy0+cmVnc1swXSA9IHNhdmVfcjA7Ci0JCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShfX3Jhd19yZWFkdyhyZWdzLT5wYyAtIDQpKTsKIAkJfSBlbHNlIGlmIChyZWdzLT5yZWdzWzBdID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKLQkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKF9fcmF3X3JlYWR3KHJlZ3MtPnBjIC0gNCkpOwogCQkJcmVncy0+cmVnc1szXSA9IF9fTlJfcmVzdGFydF9zeXNjYWxsOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCA1ODBlOTdkLi41YTlmMWYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQsICZzYy0+c2NfZnByZWdzWzBdLAorCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAmc2MtPnNjX2ZwcmVnc1swXSwKIAkJCQkoc2l6ZW9mKGxvbmcgbG9uZykgKiAzMikgKyAoc2l6ZW9mKGludCkgKiAxKSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmc2MtPnNjX2ZwcmVnc1swXSwgJmN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZCwKKwllcnIgfD0gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LAogCQkJICAgICAgKHNpemVvZihsb25nIGxvbmcpICogMzIpICsgKHNpemVvZihpbnQpICogMSkpOwogCWNsZWFyX3VzZWRfbWF0aCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDk4M2UwNzkuLmUxMjRjZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0xNjEsMTUgKzE2MSw2IEBACiAJcGxhdF9zZW5kX2lwaShjcHUsIFNNUF9NU0dfUkVTQ0hFRFVMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3BfdGhpc19jcHUodm9pZCAqdW51c2VkKQotewotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JZm9yICg7OykKLQkJY3B1X3JlbGF4KCk7Ci19Ci0KIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQogewogCXNtcF9jYWxsX2Z1bmN0aW9uKHN0b3BfdGhpc19jcHUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKaW5kZXggN2IwMzYzMy4uMDgzMGMyYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCkBAIC01OCw3ICs1OCw3IEBACiAJVFJBUF9IQU5ETEVSX0RFQ0w7CiAKIAkvKiBSZXdpbmQgKi8KLQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+cGMgLSA0KSk7CiAKIAlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgImRlYnVnIHRyYXAiLCByZWdzLCAwLCB2ZWMgJiAweGZmLAogCQkgICAgICAgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCkBAIC03NSw3ICs3NSw3IEBACiAJVFJBUF9IQU5ETEVSX0RFQ0w7CiAKIAkvKiBSZXdpbmQgKi8KLQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+cGMgLSA0KSk7CiAKIAlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgImJ1ZyB0cmFwIiwgcmVncywgMCwgVFJBUEFfQlVHX09QQ09ERSAmIDB4ZmYsCiAJCSAgICAgICBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCmluZGV4IDg2NjM5YmUuLmMzZDg2ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtMjQsMTEgKzI0LDEwIEBACiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYWxpZ25tZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9rcHJvYmVzLmg+CiAKQEAgLTQ3LDczICs0Niw2IEBACiAjZGVmaW5lIFRSQVBfSUxMRUdBTF9TTE9UX0lOU1QJMTMKICNlbmRpZgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZV91c2VyOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vfc3lzOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfaGFsZjsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlX3dvcmQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9kd29yZDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlX211bHRpOwotLyogYml0ZmllbGQ6IDE6IHdhcm4gMjogZml4dXAgNDogc2lnbmFsIC0+IGNvbWJpbmF0aW9ucyAyfDQgJiYgMXwyfDQgYXJlIG5vdAotICAgdmFsaWQhICovCi1zdGF0aWMgaW50IHNlX3VzZXJtb2RlID0gMzsKLS8qIDA6IG5vIHdhcm5pbmcgMTogcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UsIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLXN0YXRpYyBpbnQgc2Vfa2Vybm1vZGVfd2FybjsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgY29uc3QgY2hhciAqc2VfdXNlcm1vZGVfYWN0aW9uW10gPSB7Ci0JImlnbm9yZWQiLAotCSJ3YXJuIiwKLQkiZml4dXAiLAotCSJmaXh1cCt3YXJuIiwKLQkic2lnbmFsIiwKLQkic2lnbmFsK3dhcm4iCi19OwotCi1zdGF0aWMgaW50IGFsaWdubWVudF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQotewotCXNlcV9wcmludGYobSwgIlVzZXI6XHRcdCVsdVxuIiwgc2VfdXNlcik7Ci0Jc2VxX3ByaW50ZihtLCAiU3lzdGVtOlx0XHQlbHVcbiIsIHNlX3N5cyk7Ci0Jc2VxX3ByaW50ZihtLCAiSGFsZjpcdFx0JWx1XG4iLCBzZV9oYWxmKTsKLQlzZXFfcHJpbnRmKG0sICJXb3JkOlx0XHQlbHVcbiIsIHNlX3dvcmQpOwotCXNlcV9wcmludGYobSwgIkRXb3JkOlx0XHQlbHVcbiIsIHNlX2R3b3JkKTsKLQlzZXFfcHJpbnRmKG0sICJNdWx0aTpcdFx0JWx1XG4iLCBzZV9tdWx0aSk7Ci0Jc2VxX3ByaW50ZihtLCAiVXNlciBmYXVsdHM6XHQlaSAoJXMpXG4iLCBzZV91c2VybW9kZSwKLQkJCXNlX3VzZXJtb2RlX2FjdGlvbltzZV91c2VybW9kZV0pOwotCXNlcV9wcmludGYobSwgIktlcm5lbCBmYXVsdHM6XHQlaSAoZml4dXAlcylcbiIsIHNlX2tlcm5tb2RlX3dhcm4sCi0JCQlzZV9rZXJubW9kZV93YXJuID8gIit3YXJuIiA6ICIiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhbGlnbm1lbnRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhbGlnbm1lbnRfcHJvY19zaG93LCBOVUxMKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYWxpZ25tZW50X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCi17Ci0JaW50ICpkYXRhID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwotCWNoYXIgbW9kZTsKLQotCWlmIChjb3VudCA+IDApIHsKLQkJaWYgKGdldF91c2VyKG1vZGUsIGJ1ZmZlcikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKG1vZGUgPj0gJzAnICYmIG1vZGUgPD0gJzUnKQotCQkJKmRhdGEgPSBtb2RlIC0gJzAnOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFsaWdubWVudF9wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGFsaWdubWVudF9wcm9jX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLQkud3JpdGUJCT0gYWxpZ25tZW50X3Byb2Nfd3JpdGUsCi19OwotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sIHVuc2lnbmVkIGxvbmcgdG9wKQogewogCXVuc2lnbmVkIGxvbmcgcDsKQEAgLTI2NSwxMCArMTk3LDEwIEBACiAJY291bnQgPSAxPDwoaW5zdHJ1Y3Rpb24mMyk7CiAKIAlzd2l0Y2ggKGNvdW50KSB7Ci0JY2FzZSAxOiBzZV9oYWxmICArPSAxOyBicmVhazsKLQljYXNlIDI6IHNlX3dvcmQgICs9IDE7IGJyZWFrOwotCWNhc2UgNDogc2VfZHdvcmQgKz0gMTsgYnJlYWs7Ci0JY2FzZSA4OiBzZV9tdWx0aSArPSAxOyBicmVhazsgLyogPz8/ICovCisJY2FzZSAxOiBpbmNfdW5hbGlnbmVkX2J5dGVfYWNjZXNzKCk7IGJyZWFrOworCWNhc2UgMjogaW5jX3VuYWxpZ25lZF93b3JkX2FjY2VzcygpOyBicmVhazsKKwljYXNlIDQ6IGluY191bmFsaWduZWRfZHdvcmRfYWNjZXNzKCk7IGJyZWFrOworCWNhc2UgODogaW5jX3VuYWxpZ25lZF9tdWx0aV9hY2Nlc3MoKTsgYnJlYWs7CiAJfQogCiAJcmV0ID0gLUVGQVVMVDsKQEAgLTQ1MiwxOCArMzg0LDggQEAKIAlybSA9IHJlZ3MtPnJlZ3NbaW5kZXhdOwogCiAJLyogc2hvdXQgYWJvdXQgZml4dXBzICovCi0JaWYgKCFleHBlY3RlZCkgewotCQlpZiAodXNlcl9tb2RlKHJlZ3MpICYmIChzZV91c2VybW9kZSAmIDEpICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJCXByX25vdGljZSgiRml4aW5nIHVwIHVuYWxpZ25lZCB1c2Vyc3BhY2UgYWNjZXNzICIKLQkJCQkgICJpbiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCi0JCQkJICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKLQkJCQkgICh2b2lkICopcmVncy0+cGMsIGluc3RydWN0aW9uKTsKLQkJZWxzZSBpZiAoc2Vfa2Vybm1vZGVfd2FybiAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlwcl9ub3RpY2UoIkZpeGluZyB1cCB1bmFsaWduZWQga2VybmVsIGFjY2VzcyAiCi0JCQkJICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAotCQkJCSAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksCi0JCQkJICAodm9pZCAqKXJlZ3MtPnBjLCBpbnN0cnVjdGlvbik7Ci0JfQorCWlmICghZXhwZWN0ZWQpCisJCXVuYWxpZ25lZF9maXh1cHNfbm90aWZ5KGN1cnJlbnQsIGluc3RydWN0aW9uLCByZWdzKTsKIAogCXJldCA9IC1FRkFVTFQ7CiAJc3dpdGNoIChpbnN0cnVjdGlvbiYweEYwMDApIHsKQEAgLTYxNiwxMCArNTM4LDEwIEBACiAKIAlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CiAJCWludCBzaV9jb2RlID0gQlVTX0FEUkVSUjsKKwkJdW5zaWduZWQgaW50IHVzZXJfYWN0aW9uOwogCiAJCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCQlzZV91c2VyICs9IDE7CisJCWluY191bmFsaWduZWRfdXNlcl9hY2Nlc3MoKTsKIAogCQlzZXRfZnMoVVNFUl9EUyk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sIChpbnNuX3NpemVfdCAqKShyZWdzLT5wYyAmIH4xKSwKQEAgLTYzMCwxNiArNTUyLDEyIEBACiAJCXNldF9mcyhvbGRmcyk7CiAKIAkJLyogc2hvdXQgYWJvdXQgdXNlcnNwYWNlIGZpeHVwcyAqLwotCQlpZiAoc2VfdXNlcm1vZGUgJiAxKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJVbmFsaWduZWQgdXNlcnNwYWNlIGFjY2VzcyAiCi0JCQkgICAgICAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKLQkJCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsICh2b2lkICopcmVncy0+cGMsCi0JCQkgICAgICAgaW5zdHJ1Y3Rpb24pOworCQl1bmFsaWduZWRfZml4dXBzX25vdGlmeShjdXJyZW50LCBpbnN0cnVjdGlvbiwgcmVncyk7CiAKLQkJaWYgKHNlX3VzZXJtb2RlICYgMikKKwkJdXNlcl9hY3Rpb24gPSB1bmFsaWduZWRfdXNlcl9hY3Rpb24oKTsKKwkJaWYgKHVzZXJfYWN0aW9uICYgVU1fRklYVVApCiAJCQlnb3RvIGZpeHVwOwotCi0JCWlmIChzZV91c2VybW9kZSAmIDQpCisJCWlmICh1c2VyX2FjdGlvbiAmIFVNX1NJR05BTCkKIAkJCWdvdG8gdXNwYWNlX3NlZ3Y7CiAJCWVsc2UgewogCQkJLyogaWdub3JlICovCkBAIC02NTksNyArNTc3LDcgQEAKIAkJCQkJICAgICAgJnVzZXJfbWVtX2FjY2VzcywgMCk7CiAJCXNldF9mcyhvbGRmcyk7CiAKLQkJaWYgKHRtcD09MCkKKwkJaWYgKHRtcCA9PSAwKQogCQkJcmV0dXJuOyAvKiBzb3J0ZWQgKi8KIHVzcGFjZV9zZWd2OgogCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNlbmRpbmcgU0lHQlVTIHRvIFwiJXNcIiBkdWUgdG8gdW5hbGlnbmVkICIKQEAgLTY3Miw3ICs1OTAsNyBAQAogCQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOwogCQlmb3JjZV9zaWdfaW5mbyhTSUdCVVMsICZpbmZvLCBjdXJyZW50KTsKIAl9IGVsc2UgewotCQlzZV9zeXMgKz0gMTsKKwkJaW5jX3VuYWxpZ25lZF9rZXJuZWxfYWNjZXNzKCk7CiAKIAkJaWYgKHJlZ3MtPnBjICYgMSkKIAkJCWRpZSgidW5hbGlnbmVkIHByb2dyYW0gY291bnRlciIsIHJlZ3MsIGVycm9yX2NvZGUpOwpAQCAtNjg3LDExICs2MDUsNyBAQAogCQkJZGllKCJpbnNuIGZhdWx0aW5nIGluIGRvX2FkZHJlc3NfZXJyb3IiLCByZWdzLCAwKTsKIAkJfQogCi0JCWlmIChzZV9rZXJubW9kZV93YXJuKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJVbmFsaWduZWQga2VybmVsIGFjY2VzcyAiCi0JCQkgICAgICAgIm9uIGJlaGFsZiBvZiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAodm9pZCAqKXJlZ3MtPnBjLAotCQkJICAgICAgIGluc3RydWN0aW9uKTsKKwkJdW5hbGlnbmVkX2ZpeHVwc19ub3RpZnkoY3VycmVudCwgaW5zdHJ1Y3Rpb24sIHJlZ3MpOwogCiAJCWhhbmRsZV91bmFsaWduZWRfYWNjZXNzKGluc3RydWN0aW9uLCByZWdzLAogCQkJCQkmdXNlcl9tZW1fYWNjZXNzLCAwKTsKQEAgLTg3NiwzNSArNzkwLDEwIEBACiAJZGllX2lmX2tlcm5lbCgiZXhjZXB0aW9uIiwgcmVncywgZXgpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKLXZvaWQgKmdkYl92YnJfdmVjdG9yOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGdkYl92YnJfaW5pdCh2b2lkKQotewotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdmJyOwotCi0JLyoKLQkgKiBSZWFkIHRoZSBvbGQgdmFsdWUgb2YgdGhlIFZCUiByZWdpc3RlciB0byBpbml0aWFsaXNlCi0JICogdGhlIHZlY3RvciB0aHJvdWdoIHdoaWNoIGRlYnVnIGFuZCBCSU9TIHRyYXBzIGFyZQotCSAqIGRlbGVnYXRlZCBieSB0aGUgTGludXggdHJhcCBoYW5kbGVyLgotCSAqLwotCWFzbSB2b2xhdGlsZSgic3RjIHZiciwgJTAiIDogIj1yIiAodmJyKSk7Ci0KLQlnZGJfdmJyX3ZlY3RvciA9ICh2b2lkICopKHZiciArIDB4MTAwKTsKLQlwcmludGsoIlNldHRpbmcgR0RCIHRyYXAgdmVjdG9yIHRvIDB4JTA4bHhcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKWdkYl92YnJfdmVjdG9yKTsKLX0KLSNlbmRpZgotCiB2b2lkIF9fY3B1aW5pdCBwZXJfY3B1X3RyYXBfaW5pdCh2b2lkKQogewogCWV4dGVybiB2b2lkICp2YnJfYmFzZTsKIAotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi0JaWYgKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkKLQkJZ2RiX3Zicl9pbml0KCk7Ci0jZW5kaWYKLQogCS8qIE5PVEU6IFRoZSBWQlIgdmFsdWUgc2hvdWxkIGJlIGF0IFAxCiAJICAgKG9yIFAyLCB2aXJ0dXJhbCAiZml4ZWQiIGFkZHJlc3Mgc3BhY2UpLgogCSAgIEl0J3MgZGVmaW5pdGVseSBzaG91bGQgbm90IGluIHBoeXNpY2FsIGFkZHJlc3MuICAqLwpAQCAtOTU2LDExICs4NDUsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBUUkFQX1VCQwotCXNldF9leGNlcHRpb25fdGFibGVfdmVjKFRSQVBfVUJDLCBicmVha19wb2ludF90cmFwKTsKKwlzZXRfZXhjZXB0aW9uX3RhYmxlX3ZlYyhUUkFQX1VCQywgYnJlYWtwb2ludF90cmFwX2hhbmRsZXIpOwogI2VuZGlmCi0KLQkvKiBTZXR1cCBWQlIgZm9yIGJvb3QgY3B1ICovCi0JcGVyX2NwdV90cmFwX2luaXQoKTsKIH0KIAogdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nICpzcCkKQEAgLTk4NSwzNCArODcxLDMgQEAKIAlzaG93X3N0YWNrKE5VTEwsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTChkdW1wX3N0YWNrKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKgotICogVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHN5c2N0bF9pbml0LCBvdGhlcndpc2Ugc3lzLyB3aWxsIGJlCi0gKiBvdmVyd3JpdHRlbi4gIEFjdHVhbGx5LCB0aGlzIHNob3VsZG4ndCBiZSBpbiBzeXMvIGF0IGFsbCBzaW5jZQotICogaXQgaXNuJ3QgYSBzeXNjdGwsIGFuZCBpdCBkb2Vzbid0IGNvbnRhaW4gc3lzY3RsIGluZm9ybWF0aW9uLgotICogV2Ugbm93IGxvY2F0ZSBpdCBpbiAvcHJvYy9jcHUvYWxpZ25tZW50IGluc3RlYWQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGFsaWdubWVudF9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXIsICpyZXM7Ci0KLQlkaXIgPSBwcm9jX21rZGlyKCJjcHUiLCBOVUxMKTsKLQlpZiAoIWRpcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXMgPSBwcm9jX2NyZWF0ZV9kYXRhKCJhbGlnbm1lbnQiLCBTX0lXVVNSIHwgU19JUlVHTywgZGlyLAotCQkJICAgICAgICZhbGlnbm1lbnRfcHJvY19mb3BzLCAmc2VfdXNlcm1vZGUpOwotCWlmICghcmVzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotICAgICAgICByZXMgPSBwcm9jX2NyZWF0ZV9kYXRhKCJrZXJuZWxfYWxpZ25tZW50IiwgU19JV1VTUiB8IFNfSVJVR08sIGRpciwKLQkJCSAgICAgICAmYWxpZ25tZW50X3Byb2NfZm9wcywgJnNlX2tlcm5tb2RlX3dhcm4pOwotICAgICAgICBpZiAoIXJlcykKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiAwOwotfQotCi1mc19pbml0Y2FsbChhbGlnbm1lbnRfaW5pdCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc182NC5jCmluZGV4IGQ4NmY1MzEuLmUzZjkyZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfNjQuYwpAQCAtNjExLDE5ICs2MTEsMTkgQEAKIAogCQlzd2l0Y2ggKHdpZHRoX3NoaWZ0KSB7CiAJCWNhc2UgMjoKLQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWddID0gYnVmbG87CisJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZsbzsKIAkJCWJyZWFrOwogCQljYXNlIDM6CiAJCQlpZiAoZG9fcGFpcmVkX2xvYWQpIHsKLQkJCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmxvOwotCQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWcrMV0gPSBidWZoaTsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZsbzsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZysxXSA9IGJ1ZmhpOwogCQkJfSBlbHNlIHsKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfTElUVExFX0VORElBTikKLQkJCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmhpOwotCQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWcrMV0gPSBidWZsbzsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZoaTsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZysxXSA9IGJ1ZmxvOwogI2Vsc2UKLQkJCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmxvOwotCQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWcrMV0gPSBidWZoaTsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZsbzsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZysxXSA9IGJ1ZmhpOwogI2VuZGlmCiAJCQl9CiAJCQlicmVhazsKQEAgLTY4MSwxOSArNjgxLDE5IEBACiAKIAkJc3dpdGNoICh3aWR0aF9zaGlmdCkgewogCQljYXNlIDI6Ci0JCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZ107CisJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWddOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKIAkJCWlmIChkb19wYWlyZWRfbG9hZCkgewotCQkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbc3JjcmVnXTsKLQkJCQlidWZoaSA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZysxXTsKKwkJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWddOworCQkJCWJ1ZmhpID0gY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW3NyY3JlZysxXTsKIAkJCX0gZWxzZSB7CiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pCi0JCQkJYnVmaGkgPSBjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tzcmNyZWddOwotCQkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbc3JjcmVnKzFdOworCQkJCWJ1ZmhpID0gY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW3NyY3JlZ107CisJCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbc3JjcmVnKzFdOwogI2Vsc2UKLQkJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZ107Ci0JCQkJYnVmaGkgPSBjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tzcmNyZWcrMV07CisJCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbc3JjcmVnXTsKKwkJCQlidWZoaSA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWcrMV07CiAjZW5kaWYKIAkJCX0KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYTFlNGVjMi4uN2Y4YTcwOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zLDcgKzMsNyBAQAogICogV3JpdHRlbiBieSBOaWliZSBZdXRha2EgYW5kIFBhdWwgTXVuZHQKICAqLwogI2lmZGVmIENPTkZJR19TVVBFUkg2NAotI2RlZmluZSBMT0FEX09GRlNFVAlDT05GSUdfUEFHRV9PRkZTRVQKKyNkZWZpbmUgTE9BRF9PRkZTRVQJUEFHRV9PRkZTRVQKIE9VVFBVVF9BUkNIKHNoOnNoNSkKICNlbHNlCiAjZGVmaW5lIExPQURfT0ZGU0VUCTAKQEAgLTE0LDE3ICsxNCwxNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS92bWxpbnV4Lmxkcy5oPgogCisjaWZkZWYgQ09ORklHX1BNQgorICNkZWZpbmUgTUVNT1JZX09GRlNFVAkwCisjZWxzZQorICNkZWZpbmUgTUVNT1JZX09GRlNFVAlfX01FTU9SWV9TVEFSVAorI2VuZGlmCisKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0jaWZkZWYgQ09ORklHX1BNQl9GSVhFRAotCS4gPSBDT05GSUdfUEFHRV9PRkZTRVQgKyAoQ09ORklHX01FTU9SWV9TVEFSVCAmIDB4MWZmZmZmZmYpICsKLQkgICAgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKLQkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7Ci0jZWxzZQotCS4gPSBDT05GSUdfUEFHRV9PRkZTRVQgKyBDT05GSUdfTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7Ci0jZW5kaWYKKwkuID0gUEFHRV9PRkZTRVQgKyBNRU1PUllfT0ZGU0VUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7CiAKIAlfdGV4dCA9IC47CQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwogCkBAIC0zNSwxMiArMzQsNyBAQAogCS50ZXh0IDogQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgewogCQlIRUFEX1RFWFQKIAkJVEVYVF9URVhUCi0KLSNpZmRlZiBDT05GSUdfU1VQRVJINjQKLQkJKigudGV4dDY0KQotCQkqKC50ZXh0Li5TSG1lZGlhMzIpCi0jZW5kaWYKLQorCQlFWFRSQV9URVhUCiAJCVNDSEVEX1RFWFQKIAkJTE9DS19URVhUCiAJCUtQUk9CRVNfVEVYVApAQCAtNTEsMjQgKzQ1LDEyIEBACiAJfSA9IDB4MDAwOQogCiAJRVhDRVBUSU9OX1RBQkxFKDE2KQotCiAJTk9URVMKKworCV9zZGF0YSA9IC47CiAJUk9fREFUQShQQUdFX1NJWkUpCi0KLQkvKgotCSAqIENvZGUgd2hpY2ggbXVzdCBiZSBleGVjdXRlZCB1bmNhY2hlZCBhbmQgdGhlIGFzc29jaWF0ZWQgZGF0YQotCSAqLwotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCS51bmNhY2hlZCA6IEFUKEFERFIoLnVuY2FjaGVkKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fdW5jYWNoZWRfc3RhcnQgPSAuOwotCQkqKC51bmNhY2hlZC50ZXh0KQotCQkqKC51bmNhY2hlZC5kYXRhKQotCQlfX3VuY2FjaGVkX2VuZCA9IC47Ci0JfQotCiAJUldfREFUQV9TRUNUSU9OKEwxX0NBQ0hFX0JZVEVTLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQotCi0JX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCisJX2VkYXRhID0gLjsKIAogCURXQVJGX0VIX0ZSQU1FCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbWF0aC1lbXUvbWF0aC5jIGIvYXJjaC9zaC9tYXRoLWVtdS9tYXRoLmMKaW5kZXggZDZjMTVjYS4uMWZjZGIxMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tYXRoLWVtdS9tYXRoLmMKKysrIGIvYXJjaC9zaC9tYXRoLWVtdS9tYXRoLmMKQEAgLTQ3MSwxMCArNDcxLDEwIEBACiAgKglkZW5vcm1hbF90b19kb3VibGUgLSBHaXZlbiBkZW5vcm1hbGl6ZWQgZmxvYXQgbnVtYmVyLAogICoJICAgICAgICAgICAgICAgICAgICAgc3RvcmUgZG91YmxlIGZsb2F0CiAgKgotICoJQGZwdTogUG9pbnRlciB0byBzaF9mcHVfaGFyZCBzdHJ1Y3R1cmUKKyAqCUBmcHU6IFBvaW50ZXIgdG8gc2hfZnB1X3NvZnQgc3RydWN0dXJlCiAgKglAbjogSW5kZXggdG8gRlAgcmVnaXN0ZXIKICAqLwotc3RhdGljIHZvaWQgZGVub3JtYWxfdG9fZG91YmxlKHN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgKmZwdSwgaW50IG4pCitzdGF0aWMgdm9pZCBkZW5vcm1hbF90b19kb3VibGUoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnB1LCBpbnQgbikKIHsKIAl1bnNpZ25lZCBsb25nIGR1LCBkbDsKIAl1bnNpZ25lZCBsb25nIHggPSBmcHUtPmZwdWw7CkBAIC01NTIsMTEgKzU1MiwxMSBAQAogCWlmICgoZmluc24gJiAweGYxZmYpID09IDB4ZjBhZCkgeyAvKiBmY252c2QgKi8KIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiAoMSA8PCAxNykpKSB7CisJCWlmICgodHNrLT50aHJlYWQueHN0YXRlLT5zb2Z0ZnB1LmZwc2NyICYgKDEgPDwgMTcpKSkgewogCQkJLyogRlBVIGVycm9yICovCi0JCQlkZW5vcm1hbF90b19kb3VibGUgKCZ0c2stPnRocmVhZC5mcHUuaGFyZCwKKwkJCWRlbm9ybWFsX3RvX2RvdWJsZSAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdSwKIAkJCQkJICAgIChmaW5zbiA+PiA4KSAmIDB4Zik7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmPQorCQkJdHNrLT50aHJlYWQueHN0YXRlLT5zb2Z0ZnB1LmZwc2NyICY9CiAJCQkJfihGUFNDUl9DQVVTRV9NQVNLIHwgRlBTQ1JfRkxBR19NQVNLKTsKIAkJCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7CiAJCX0gZWxzZSB7CkBAIC02MTcsNyArNjE3LDcgQEAKIGludCBkb19mcHVfaW5zdCh1bnNpZ25lZCBzaG9ydCBpbnN0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0Jc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnB1ID0gJih0c2stPnRocmVhZC5mcHUuc29mdCk7CisJc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnB1ID0gJih0c2stPnRocmVhZC54c3RhdGUtPnNvZnRmcHUpOwogCiAJaWYgKCEodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19VU0VERlBVKSkgewogCQkvKiBpbml0aWFsaXplIG9uY2UuICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL0tjb25maWcgYi9hcmNoL3NoL21tL0tjb25maWcKaW5kZXggOTg2YTcxYi4uMTQ0NWNhNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9LY29uZmlnCisrKyBiL2FyY2gvc2gvbW0vS2NvbmZpZwpAQCAtNzUsNTIgKzc1LDI1IEBACiBjb25maWcgMjlCSVQKIAlkZWZfYm9vbCAhMzJCSVQKIAlkZXBlbmRzIG9uIFNVUEVSSDMyCisJc2VsZWN0IFVOQ0FDSEVEX01BUFBJTkcKIAogY29uZmlnIDMyQklUCiAJYm9vbAogCWRlZmF1bHQgeSBpZiBDUFVfU0g1CiAKLWNvbmZpZyBQTUJfRU5BQkxFCitjb25maWcgUE1CCiAJYm9vbCAiU3VwcG9ydCAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB0aHJvdWdoIFBNQiIKIAlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgQ1BVX1NINEEgJiYgIUNQVV9TSDRBTF9EU1AKLQloZWxwCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCi0JICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKLQkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KLQotY2hvaWNlCi0JcHJvbXB0ICJQTUIgaGFuZGxpbmcgdHlwZSIKLQlkZXBlbmRzIG9uIFBNQl9FTkFCTEUKLQlkZWZhdWx0IFBNQl9GSVhFRAotCi1jb25maWcgUE1CCi0JYm9vbCAiUE1CIgotCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QSAmJiAhQ1BVX1NINEFMX0RTUAotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgZXh0ZW5kZWQgdG8KLQkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQotCSAgMjktYml0IHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSB1c2VkLgotCi1jb25maWcgUE1CX0ZJWEVECi0JYm9vbCAiZml4ZWQgUE1CIgotCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QSAmJiAhQ1BVX1NINEFMX0RTUAogCXNlbGVjdCAzMkJJVAorCXNlbGVjdCBVTkNBQ0hFRF9NQVBQSU5HCiAJaGVscAotCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgZml4ZWQgUE1CIG1hcHBpbmdzIGFyZSBpbmhlcml0ZWQKLQkgIGZyb20gdGhlIGJvb3QgbG9hZGVyLCBhbmQgdGhlIGtlcm5lbCBkb2VzIG5vdCBhdHRlbXB0IGR5bmFtaWMKLQkgIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIGNsb3Nlc3QgdG8gbGVnYWN5IDI5LWJpdCBwaHlzaWNhbCBtb2RlLAotCSAgYW5kIGFsbG93cyBzeXN0ZW1zIHRvIHN1cHBvcnQgdXAgdG8gNTEyTWlCIG9mIHN5c3RlbSBtZW1vcnkuCi0KLWVuZGNob2ljZQorCSAgSWYgeW91IHNheSBZIGhlcmUsIHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSBleHRlbmRlZCB0bworCSAgMzItYml0cyB0aHJvdWdoIHRoZSBTSC00QSBQTUIuIElmIHRoaXMgaXMgbm90IHNldCwgbGVnYWN5CisJICAyOS1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIHVzZWQuCiAKIGNvbmZpZyBYMlRMQgotCWJvb2wgIkVuYWJsZSBleHRlbmRlZCBUTEIgbW9kZSIKLQlkZXBlbmRzIG9uIChDUFVfU0hYMiB8fCBDUFVfU0hYMykgJiYgTU1VICYmIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGVuYWJsZSB0aGUgZXh0ZW5kZWQgbW9kZSBvZiB0aGUgU0gtWDIKLQkgIFRMQi4gRm9yIGxlZ2FjeSBTSC1YIGJlaGF2aW91ciBhbmQgaW50ZXJvcGVyYWJpbGl0eSwgc2F5IE4uIEZvcgotCSAgYWxsIG9mIHRoZSBmdW4gbmV3IGZlYXR1cmVzIGFuZCBhIHdpbGxpbmdsZXNzIHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKLQkgIHNheSBZLgorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIChDUFVfU0hYMiB8fCBDUFVfU0hYMykgJiYgTU1VCiAKIGNvbmZpZyBWU1lTQ0FMTAogCWJvb2wgIlN1cHBvcnQgdnN5c2NhbGwgcGFnZSIKQEAgLTE4OCwxNCArMTYxLDE5IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUcKIAorY29uZmlnIElPUkVNQVBfRklYRUQKKyAgICAgICBkZWZfYm9vbCB5CisgICAgICAgZGVwZW5kcyBvbiBYMlRMQiB8fCBTVVBFUkg2NAorCitjb25maWcgVU5DQUNIRURfTUFQUElORworCWJvb2wKKwogY2hvaWNlCiAJcHJvbXB0ICJLZXJuZWwgcGFnZSBzaXplIgotCWRlZmF1bHQgUEFHRV9TSVpFXzhLQiBpZiBYMlRMQgogCWRlZmF1bHQgUEFHRV9TSVpFXzRLQgogCiBjb25maWcgUEFHRV9TSVpFXzRLQgogCWJvb2wgIjRrQiIKLQlkZXBlbmRzIG9uICFNTVUgfHwgIVgyVExCCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZGVmYXVsdCBwYWdlIHNpemUgdXNlZCBieSBhbGwgU3VwZXJIIENQVXMuCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vTWFrZWZpbGUgYi9hcmNoL3NoL21tL01ha2VmaWxlCmluZGV4IDhhNzA1MzUuLjNkYzhhOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9tbS9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBTdXBlckgtc3BlY2lmaWMgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VyLgogIwogCi1vYmoteQkJCTo9IGNhY2hlLm8gaW5pdC5vIGNvbnNpc3RlbnQubyBtbWFwLm8KK29iai15CQkJOj0gYWxpZ25tZW50Lm8gY2FjaGUubyBpbml0Lm8gY29uc2lzdGVudC5vIG1tYXAubwogCiBjYWNoZW9wcy0kKENPTkZJR19DUFVfU0gyKQkJOj0gY2FjaGUtc2gyLm8KIGNhY2hlb3BzLSQoQ09ORklHX0NQVV9TSDJBKQkJOj0gY2FjaGUtc2gyYS5vCkBAIC0xNSw3ICsxNSw3IEBACiAKIG1tdS15CQkJOj0gbm9tbXUubyBleHRhYmxlXzMyLm8KIG1tdS0kKENPTkZJR19NTVUpCTo9IGV4dGFibGVfJChCSVRTKS5vIGZhdWx0XyQoQklUUykubyBcCi0JCQkgICBpb3JlbWFwXyQoQklUUykubyBrbWFwLm8gdGxiZmx1c2hfJChCSVRTKS5vCisJCQkgICBpb3JlbWFwLm8ga21hcC5vIHBndGFibGUubyB0bGJmbHVzaF8kKEJJVFMpLm8KIAogb2JqLXkJCQkrPSAkKG1tdS15KQogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKQkrPSBhc2lkcy1kZWJ1Z2ZzLm8KQEAgLTI2LDE1ICsyNiwxNyBAQAogCiBpZmRlZiBDT05GSUdfTU1VCiB0bGItJChDT05GSUdfQ1BVX1NIMykJCTo9IHRsYi1zaDMubwotdGxiLSQoQ09ORklHX0NQVV9TSDQpCQk6PSB0bGItc2g0Lm8KK3RsYi0kKENPTkZJR19DUFVfU0g0KQkJOj0gdGxiLXNoNC5vIHRsYi11cmIubwogdGxiLSQoQ09ORklHX0NQVV9TSDUpCQk6PSB0bGItc2g1Lm8KLXRsYi0kKENPTkZJR19DUFVfSEFTX1BURUFFWCkJOj0gdGxiLXB0ZWFleC5vCit0bGItJChDT05GSUdfQ1BVX0hBU19QVEVBRVgpCTo9IHRsYi1wdGVhZXgubyB0bGItdXJiLm8KIG9iai15CQkJCSs9ICQodGxiLXkpCiBlbmRpZgogCiBvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKQkrPSBodWdldGxicGFnZS5vCi1vYmotJChDT05GSUdfUE1CX0VOQUJMRSkJKz0gcG1iLm8KK29iai0kKENPTkZJR19QTUIpCQkrPSBwbWIubwogb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hLm8KK29iai0kKENPTkZJR19JT1JFTUFQX0ZJWEVEKQkrPSBpb3JlbWFwX2ZpeGVkLm8KK29iai0kKENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HKQkrPSB1bmNhY2hlZC5vCiAKICMgU3BlY2lhbCBmbGFncyBmb3IgZmF1bHRfNjQuby4gIFRoaXMgcHV0cyByZXN0cmljdGlvbnMgb24gdGhlIG51bWJlciBvZgogIyBjYWxsZXItc2F2ZSByZWdpc3RlcnMgdGhhdCB0aGUgY29tcGlsZXIgY2FuIHRhcmdldCB3aGVuIGJ1aWxkaW5nIHRoaXMgZmlsZS4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vYWxpZ25tZW50LmMgYi9hcmNoL3NoL21tL2FsaWdubWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTk1YjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL2FsaWdubWVudC5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQWxpZ25tZW50IGFjY2VzcyBjb3VudGVycyBhbmQgY29ycmVzcG9uZGluZyB1c2VyLXNwYWNlIGludGVyZmFjZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNUIE1pY3JvZWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9hbGlnbm1lbnQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlX3VzZXI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9zeXM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9oYWxmOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vfd29yZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlX2R3b3JkOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfbXVsdGk7CisvKiBiaXRmaWVsZDogMTogd2FybiAyOiBmaXh1cCA0OiBzaWduYWwgLT4gY29tYmluYXRpb25zIDJ8NCAmJiAxfDJ8NCBhcmUgbm90CisgICB2YWxpZCEgKi8KK3N0YXRpYyBpbnQgc2VfdXNlcm1vZGUgPSBVTV9XQVJOIHwgVU1fRklYVVA7CisvKiAwOiBubyB3YXJuaW5nIDE6IHByaW50IGEgd2FybmluZyBtZXNzYWdlLCBkaXNhYmxlZCBieSBkZWZhdWx0ICovCitzdGF0aWMgaW50IHNlX2tlcm5tb2RlX3dhcm47CisKK2NvcmVfcGFyYW0oYWxpZ25tZW50LCBzZV91c2VybW9kZSwgaW50LCAwNjAwKTsKKwordm9pZCBpbmNfdW5hbGlnbmVkX2J5dGVfYWNjZXNzKHZvaWQpCit7CisJc2VfaGFsZisrOworfQorCit2b2lkIGluY191bmFsaWduZWRfd29yZF9hY2Nlc3Modm9pZCkKK3sKKwlzZV93b3JkKys7Cit9CisKK3ZvaWQgaW5jX3VuYWxpZ25lZF9kd29yZF9hY2Nlc3Modm9pZCkKK3sKKwlzZV9kd29yZCsrOworfQorCit2b2lkIGluY191bmFsaWduZWRfbXVsdGlfYWNjZXNzKHZvaWQpCit7CisJc2VfbXVsdGkrKzsKK30KKwordm9pZCBpbmNfdW5hbGlnbmVkX3VzZXJfYWNjZXNzKHZvaWQpCit7CisJc2VfdXNlcisrOworfQorCit2b2lkIGluY191bmFsaWduZWRfa2VybmVsX2FjY2Vzcyh2b2lkKQoreworCXNlX3N5cysrOworfQorCisvKgorICogVGhpcyBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIHBvbGljeSB3aGljaCBjYW4gYmUgc2V0IGZyb20gdGhlIGNvbW1hbmQKKyAqIGxpbmUsIHdoaWxlIHByb2Nlc3NlcyBjYW4gb3ZlcmxvYWQgdGhlaXIgcHJlZmVyZW5jZXMgdmlhIHByY3RsKCkuCisgKi8KK3Vuc2lnbmVkIGludCB1bmFsaWduZWRfdXNlcl9hY3Rpb24odm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgYWN0aW9uID0gc2VfdXNlcm1vZGU7CisKKwlpZiAoY3VycmVudC0+dGhyZWFkLmZsYWdzICYgU0hfVEhSRUFEX1VBQ19TSUdCVVMpIHsKKwkJYWN0aW9uICY9IH5VTV9GSVhVUDsKKwkJYWN0aW9uIHw9IFVNX1NJR05BTDsKKwl9CisKKwlpZiAoY3VycmVudC0+dGhyZWFkLmZsYWdzICYgU0hfVEhSRUFEX1VBQ19OT1BSSU5UKQorCQlhY3Rpb24gJj0gflVNX1dBUk47CisKKwlyZXR1cm4gYWN0aW9uOworfQorCitpbnQgZ2V0X3VuYWxpZ25fY3RsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHB1dF91c2VyKHRzay0+dGhyZWFkLmZsYWdzICYgU0hfVEhSRUFEX1VBQ19NQVNLLAorCQkJKHVuc2lnbmVkIGludCBfX3VzZXIgKilhZGRyKTsKK30KKworaW50IHNldF91bmFsaWduX2N0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl0c2stPnRocmVhZC5mbGFncyA9ICh0c2stPnRocmVhZC5mbGFncyAmIH5TSF9USFJFQURfVUFDX01BU0spIHwKKwkJCSAgICAodmFsICYgU0hfVEhSRUFEX1VBQ19NQVNLKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1bmFsaWduZWRfZml4dXBzX25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW5zbl9zaXplX3QgaW5zbiwKKwkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHVzZXJfbW9kZShyZWdzKSAmJiAoc2VfdXNlcm1vZGUgJiBVTV9XQVJOKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCXByX25vdGljZSgiRml4aW5nIHVwIHVuYWxpZ25lZCB1c2Vyc3BhY2UgYWNjZXNzICIKKwkJCSAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKKwkJCSAgdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLAorCQkJICAodm9pZCAqKWluc3RydWN0aW9uX3BvaW50ZXIocmVncyksIGluc24pOworCWVsc2UgaWYgKHNlX2tlcm5tb2RlX3dhcm4gJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlwcl9ub3RpY2UoIkZpeGluZyB1cCB1bmFsaWduZWQga2VybmVsIGFjY2VzcyAiCisJCQkgICJpbiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCisJCQkgIHRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwKKwkJCSAgKHZvaWQgKilpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpLCBpbnNuKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNlX3VzZXJtb2RlX2FjdGlvbltdID0geworCSJpZ25vcmVkIiwKKwkid2FybiIsCisJImZpeHVwIiwKKwkiZml4dXArd2FybiIsCisJInNpZ25hbCIsCisJInNpZ25hbCt3YXJuIgorfTsKKworc3RhdGljIGludCBhbGlnbm1lbnRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzZXFfcHJpbnRmKG0sICJVc2VyOlx0XHQlbHVcbiIsIHNlX3VzZXIpOworCXNlcV9wcmludGYobSwgIlN5c3RlbTpcdFx0JWx1XG4iLCBzZV9zeXMpOworCXNlcV9wcmludGYobSwgIkhhbGY6XHRcdCVsdVxuIiwgc2VfaGFsZik7CisJc2VxX3ByaW50ZihtLCAiV29yZDpcdFx0JWx1XG4iLCBzZV93b3JkKTsKKwlzZXFfcHJpbnRmKG0sICJEV29yZDpcdFx0JWx1XG4iLCBzZV9kd29yZCk7CisJc2VxX3ByaW50ZihtLCAiTXVsdGk6XHRcdCVsdVxuIiwgc2VfbXVsdGkpOworCXNlcV9wcmludGYobSwgIlVzZXIgZmF1bHRzOlx0JWkgKCVzKVxuIiwgc2VfdXNlcm1vZGUsCisJCQlzZV91c2VybW9kZV9hY3Rpb25bc2VfdXNlcm1vZGVdKTsKKwlzZXFfcHJpbnRmKG0sICJLZXJuZWwgZmF1bHRzOlx0JWkgKGZpeHVwJXMpXG4iLCBzZV9rZXJubW9kZV93YXJuLAorCQkJc2Vfa2Vybm1vZGVfd2FybiA/ICIrd2FybiIgOiAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxpZ25tZW50X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWxpZ25tZW50X3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFsaWdubWVudF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCWludCAqZGF0YSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKKwljaGFyIG1vZGU7CisKKwlpZiAoY291bnQgPiAwKSB7CisJCWlmIChnZXRfdXNlcihtb2RlLCBidWZmZXIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChtb2RlID49ICcwJyAmJiBtb2RlIDw9ICc1JykKKwkJCSpkYXRhID0gbW9kZSAtICcwJzsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhbGlnbm1lbnRfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBhbGlnbm1lbnRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGFsaWdubWVudF9wcm9jX3dyaXRlLAorfTsKKworLyoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciBzeXNjdGxfaW5pdCwgb3RoZXJ3aXNlIHN5cy8gd2lsbCBiZQorICogb3ZlcndyaXR0ZW4uICBBY3R1YWxseSwgdGhpcyBzaG91bGRuJ3QgYmUgaW4gc3lzLyBhdCBhbGwgc2luY2UKKyAqIGl0IGlzbid0IGEgc3lzY3RsLCBhbmQgaXQgZG9lc24ndCBjb250YWluIHN5c2N0bCBpbmZvcm1hdGlvbi4KKyAqIFdlIG5vdyBsb2NhdGUgaXQgaW4gL3Byb2MvY3B1L2FsaWdubWVudCBpbnN0ZWFkLgorICovCitzdGF0aWMgaW50IF9faW5pdCBhbGlnbm1lbnRfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyLCAqcmVzOworCisJZGlyID0gcHJvY19ta2RpcigiY3B1IiwgTlVMTCk7CisJaWYgKCFkaXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcHJvY19jcmVhdGVfZGF0YSgiYWxpZ25tZW50IiwgU19JV1VTUiB8IFNfSVJVR08sIGRpciwKKwkJCSAgICAgICAmYWxpZ25tZW50X3Byb2NfZm9wcywgJnNlX3VzZXJtb2RlKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKyAgICAgICAgcmVzID0gcHJvY19jcmVhdGVfZGF0YSgia2VybmVsX2FsaWdubWVudCIsIFNfSVdVU1IgfCBTX0lSVUdPLCBkaXIsCisJCQkgICAgICAgJmFsaWdubWVudF9wcm9jX2ZvcHMsICZzZV9rZXJubW9kZV93YXJuKTsKKyAgICAgICAgaWYgKCFyZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KK2ZzX2luaXRjYWxsKGFsaWdubWVudF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKaW5kZXggNWJhMDY3Yi4uNjkwZWQwMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKQEAgLTIyLDggKzIyLDcgQEAKIAlDQUNIRV9UWVBFX1VOSUZJRUQsCiB9OwogCi1zdGF0aWMgaW50IF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGNhY2hlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwKLQkJCQkJCSAgdm9pZCAqaXRlcikKK3N0YXRpYyBpbnQgY2FjaGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICppdGVyKQogewogCXVuc2lnbmVkIGludCBjYWNoZV90eXBlID0gKHVuc2lnbmVkIGludClmaWxlLT5wcml2YXRlOwogCXN0cnVjdCBjYWNoZV9pbmZvICpjYWNoZTsKQEAgLTM3LDcgKzM2LDcgQEAKIAkgKi8KIAlqdW1wX3RvX3VuY2FjaGVkKCk7CiAKLQljY3IgPSBjdHJsX2lubChDQ1IpOworCWNjciA9IF9fcmF3X3JlYWRsKENDUik7CiAJaWYgKChjY3IgJiBDQ1JfQ0FDSEVfRU5BQkxFKSA9PSAwKSB7CiAJCWJhY2tfdG9fY2FjaGVkKCk7CiAKQEAgLTkwLDcgKzg5LDcgQEAKIAkJZm9yIChhZGRyID0gYWRkcnN0YXJ0LCBsaW5lID0gMDsKIAkJICAgICBhZGRyIDwgYWRkcnN0YXJ0ICsgd2F5c2l6ZTsKIAkJICAgICBhZGRyICs9IGNhY2hlLT5saW5lc3osIGxpbmUrKykgewotCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gY3RybF9pbmwoYWRkcik7CisJCQl1bnNpZ25lZCBsb25nIGRhdGEgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAogCQkJLyogQ2hlY2sgdGhlIFYgYml0LCBpZ25vcmUgaW52YWxpZCBjYWNoZWxpbmVzICovCiAJCQlpZiAoKGRhdGEgJiAxKSA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDIuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2gyLmMKaW5kZXggNjk5YTcxZi4uZGVmY2Y3MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDIuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoMi5jCkBAIC0yOCwxMCArMjgsMTAgQEAKIAkJdW5zaWduZWQgbG9uZyBhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMGZmMCk7CiAJCWludCB3YXk7CiAJCWZvciAod2F5ID0gMDsgd2F5IDwgNDsgd2F5KyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9ICBjdHJsX2lubChhZGRyIHwgKHdheSA8PCAxMikpOworCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gIF9fcmF3X3JlYWRsKGFkZHIgfCAod2F5IDw8IDEyKSk7CiAJCQlpZiAoKGRhdGEgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSA9PSAodiAmIENBQ0hFX1BIWVNBRERSX01BU0spKSB7CiAJCQkJZGF0YSAmPSB+U0hfQ0FDSEVfVVBEQVRFRDsKLQkJCQljdHJsX291dGwoZGF0YSwgYWRkciB8ICh3YXkgPDwgMTIpKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkciB8ICh3YXkgPDwgMTIpKTsKIAkJCX0KIAkJfQogCX0KQEAgLTQ3LDcgKzQ3LDcgQEAKIAkJJiB+KEwxX0NBQ0hFX0JZVEVTLTEpOwogCiAJZm9yICh2ID0gYmVnaW47IHYgPCBlbmQ7IHYrPUwxX0NBQ0hFX0JZVEVTKQotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDBmZjApIHwgMHgwMDAwMDAwOCk7CiB9CiAKQEAgLTYzLDkgKzYzLDkgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJanVtcF90b191bmNhY2hlZCgpOwogCi0JY2NyID0gY3RybF9pbmwoQ0NSKTsKKwljY3IgPSBfX3Jhd19yZWFkbChDQ1IpOwogCWNjciB8PSBDQ1JfQ0FDSEVfSU5WQUxJREFURTsKLQljdHJsX291dGwoY2NyLCBDQ1IpOworCV9fcmF3X3dyaXRlbChjY3IsIENDUik7CiAKIAliYWNrX3RvX2NhY2hlZCgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTc4LDcgKzc4LDcgQEAKIAkJJiB+KEwxX0NBQ0hFX0JZVEVTLTEpOwogCiAJZm9yICh2ID0gYmVnaW47IHYgPCBlbmQ7IHYrPUwxX0NBQ0hFX0JZVEVTKQotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDBmZjApIHwgMHgwMDAwMDAwOCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2gyYS5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDJhLmMKaW5kZXggOTc1ODk5ZC4uMWY1MTIyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDJhLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDJhLmMKQEAgLTMyLDEwICszMiwxMCBAQAogCQl1bnNpZ25lZCBsb25nIGFkZHIgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHYgJiAweDAwMDAwN2YwKTsKIAkJaW50IHdheTsKIAkJZm9yICh3YXkgPSAwOyB3YXkgPCA0OyB3YXkrKykgewotCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gIGN0cmxfaW5sKGFkZHIgfCAod2F5IDw8IDExKSk7CisJCQl1bnNpZ25lZCBsb25nIGRhdGEgPSAgX19yYXdfcmVhZGwoYWRkciB8ICh3YXkgPDwgMTEpKTsKIAkJCWlmICgoZGF0YSAmIENBQ0hFX1BIWVNBRERSX01BU0spID09ICh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSykpIHsKIAkJCQlkYXRhICY9IH5TSF9DQUNIRV9VUERBVEVEOwotCQkJCWN0cmxfb3V0bChkYXRhLCBhZGRyIHwgKHdheSA8PCAxMSkpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBhZGRyIHwgKHdheSA8PCAxMSkpOwogCQkJfQogCQl9CiAJfQpAQCAtNTgsNyArNTgsNyBAQAogCWp1bXBfdG9fdW5jYWNoZWQoKTsKIAogCWZvciAodiA9IGJlZ2luOyB2IDwgZW5kOyB2Kz1MMV9DQUNIRV9CWVRFUykgewotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDA3ZjApIHwgMHgwMDAwMDAwOCk7CiAJfQogCWJhY2tfdG9fY2FjaGVkKCk7CkBAIC03OCwxNyArNzgsMTcgQEAKIAlqdW1wX3RvX3VuY2FjaGVkKCk7CiAKICNpZmRlZiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLCi0JY3RybF9vdXRsKGN0cmxfaW5sKENDUikgfCBDQ1JfT0NBQ0hFX0lOVkFMSURBVEUsIENDUik7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKENDUikgfCBDQ1JfT0NBQ0hFX0lOVkFMSURBVEUsIENDUik7CiAJLyogSS1jYWNoZSBpbnZhbGlkYXRlICovCiAJZm9yICh2ID0gYmVnaW47IHYgPCBlbmQ7IHYrPUwxX0NBQ0hFX0JZVEVTKSB7Ci0JCWN0cmxfb3V0bCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAorCQlfX3Jhd193cml0ZWwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKIAkJCSAgQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMDdmMCkgfCAweDAwMDAwMDA4KTsKIAl9CiAjZWxzZQogCWZvciAodiA9IGJlZ2luOyB2IDwgZW5kOyB2Kz1MMV9DQUNIRV9CWVRFUykgewotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX0lDX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDA3ZjApIHwgMHgwMDAwMDAwOCk7Ci0JCWN0cmxfb3V0bCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAorCQlfX3Jhd193cml0ZWwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKIAkJCSAgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMDdmMCkgfCAweDAwMDAwMDA4KTsKIAl9CiAjZW5kaWYKQEAgLTExNSwxNCArMTE1LDE0IEBACiAJCWludCB3YXk7CiAJCS8qIE8tQ2FjaGUgd3JpdGViYWNrICovCiAJCWZvciAod2F5ID0gMDsgd2F5IDwgNDsgd2F5KyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9ICBjdHJsX2lubChDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgYWRkciB8ICh3YXkgPDwgMTEpKTsKKwkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9ICBfX3Jhd19yZWFkbChDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgYWRkciB8ICh3YXkgPDwgMTEpKTsKIAkJCWlmICgoZGF0YSAmIENBQ0hFX1BIWVNBRERSX01BU0spID09ICh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSykpIHsKIAkJCQlkYXRhICY9IH5TSF9DQUNIRV9VUERBVEVEOwotCQkJCWN0cmxfb3V0bChkYXRhLCBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgYWRkciB8ICh3YXkgPDwgMTEpKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IGFkZHIgfCAod2F5IDw8IDExKSk7CiAJCQl9CiAJCX0KIAkJLyogSS1DYWNoZSBpbnZhbGlkYXRlICovCi0JCWN0cmxfb3V0bChhZGRyLAorCQlfX3Jhd193cml0ZWwoYWRkciwKIAkJCSAgQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8IGFkZHIgfCAweDAwMDAwMDA4KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2gzLmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoMy5jCmluZGV4IGZhZWY4MGMuLmUzNzUyM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2gzLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDMuYwpAQCAtNTAsMTIgKzUwLDEyIEBACiAJCQlwID0gX19wYSh2KTsKIAkJCWFkZHIgPSBhZGRyc3RhcnQgfCAodiAmIGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X21hc2spOwogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQkJZGF0YSA9IF9fcmF3X3JlYWRsKGFkZHIpOwogCiAJCQlpZiAoKGRhdGEgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSA9PQogCQkJICAgIChwICYgQ0FDSEVfUEhZU0FERFJfTUFTSykpIHsKIAkJCQlkYXRhICY9IH5TSF9DQUNIRV9VUERBVEVEOwotCQkJCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkcik7CiAJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtODYsNyArODYsNyBAQAogCQlkYXRhID0gKHYgJiAweGZmZmZmYzAwKTsgLyogX1ZpcnR1YWxfIGFkZHJlc3MsIH5VLCB+ViAqLwogCQlhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8CiAJCQkodiAmIGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X21hc2spIHwgU0hfQ0FDSEVfQVNTT0M7Ci0JCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKaW5kZXggNTYwZGRiNi4uMmNmYWU4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCkBAIC0zNiw3ICszNiw3IEBACiAgKiBDYWxsZWQgZnJvbSBrZXJuZWwvbW9kdWxlLmM6c3lzX2luaXRfbW9kdWxlIGFuZCByb3V0aW5lIGZvciBhLm91dCBmb3JtYXQsCiAgKiBzaWduYWwgaGFuZGxlciBjb2RlIGFuZCBrcHJvYmVzIGNvZGUKICAqLwotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgc2g0X2ZsdXNoX2ljYWNoZV9yYW5nZSh2b2lkICphcmdzKQorc3RhdGljIHZvaWQgc2g0X2ZsdXNoX2ljYWNoZV9yYW5nZSh2b2lkICphcmdzKQogewogCXN0cnVjdCBmbHVzaGVyX2RhdGEgKmRhdGEgPSBhcmdzOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKQEAgLTEwOSw2ICsxMDksNyBAQAogc3RhdGljIHZvaWQgc2g0X2ZsdXNoX2RjYWNoZV9wYWdlKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFyZzsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7CiAjaWZuZGVmIENPTkZJR19TTVAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIApAQCAtMTE2LDIyICsxMTcsMTQgQEAKIAkJc2V0X2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7CiAJZWxzZQogI2VuZGlmCi0JewotCQl1bnNpZ25lZCBsb25nIHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSk7Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVk7Ci0JCWludCBpLCBuOwotCi0JCS8qIExvb3AgYWxsIHRoZSBELWNhY2hlICovCi0JCW4gPSBib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXM7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGFkZHIgKz0gUEFHRV9TSVpFKQotCQkJZmx1c2hfY2FjaGVfb25lKGFkZHIsIHBoeXMpOwotCX0KKwkJZmx1c2hfY2FjaGVfb25lKENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfAorCQkJCShhZGRyICYgc2htX2FsaWduX21hc2spLCBwYWdlX3RvX3BoeXMocGFnZSkpOwogCiAJd21iKCk7CiB9CiAKIC8qIFRPRE86IFNlbGVjdGl2ZSBpY2FjaGUgaW52YWxpZGF0aW9uIHRocm91Z2ggSUMgYWRkcmVzcyBhcnJheS4uICovCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBmbHVzaF9pY2FjaGVfYWxsKHZvaWQpCitzdGF0aWMgdm9pZCBmbHVzaF9pY2FjaGVfYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgY2NyOwogCkBAIC0xMzksOSArMTMyLDkgQEAKIAlqdW1wX3RvX3VuY2FjaGVkKCk7CiAKIAkvKiBGbHVzaCBJLWNhY2hlICovCi0JY2NyID0gY3RybF9pbmwoQ0NSKTsKKwljY3IgPSBfX3Jhd19yZWFkbChDQ1IpOwogCWNjciB8PSBDQ1JfQ0FDSEVfSUNJOwotCWN0cmxfb3V0bChjY3IsIENDUik7CisJX19yYXdfd3JpdGVsKGNjciwgQ0NSKTsKIAogCS8qCiAJICogYmFja190b19jYWNoZWQoKSB3aWxsIHRha2UgY2FyZSBvZiB0aGUgYmFycmllciBmb3IgdXMsIGRvbid0IGFkZApAQCAtMzg0LDkgKzM3Nyw5IEBACiB2b2lkIF9faW5pdCBzaDRfY2FjaGVfaW5pdCh2b2lkKQogewogCXByaW50aygiUFZSPSUwOHggQ1ZSPSUwOHggUFJSPSUwOHhcbiIsCi0JCWN0cmxfaW5sKENDTl9QVlIpLAotCQljdHJsX2lubChDQ05fQ1ZSKSwKLQkJY3RybF9pbmwoQ0NOX1BSUikpOworCQlfX3Jhd19yZWFkbChDQ05fUFZSKSwKKwkJX19yYXdfcmVhZGwoQ0NOX0NWUiksCisJCV9fcmF3X3JlYWRsKENDTl9QUlIpKTsKIAogCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZQk9IHNoNF9mbHVzaF9pY2FjaGVfcmFuZ2U7CiAJbG9jYWxfZmx1c2hfZGNhY2hlX3BhZ2UJCT0gc2g0X2ZsdXNoX2RjYWNoZV9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKaW5kZXggZjUyN2ZiNy4uZjQ5OGRhMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCkBAIC00OCwxMCArNDgsMTAgQEAKIAkJCXVuc2lnbmVkIGxvbmcgZGF0YTsKIAkJCWludCB2ID0gU0hfQ0FDSEVfVVBEQVRFRCB8IFNIX0NBQ0hFX1ZBTElEOwogCi0JCQlkYXRhID0gY3RybF9pbmwoYWRkcik7CisJCQlkYXRhID0gX19yYXdfcmVhZGwoYWRkcik7CiAKIAkJCWlmICgoZGF0YSAmIHYpID09IHYpCi0JCQkJY3RybF9vdXRsKGRhdGEgJiB+diwgYWRkcik7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEgJiB+diwgYWRkcik7CiAKIAkJfQogCkBAIC03OCw3ICs3OCw3IEBACiAvKgogICogV3JpdGViYWNrJkludmFsaWRhdGUgdGhlIEQtY2FjaGUgb2YgdGhlIHBhZ2UKICAqLwotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgX19mbHVzaF9kY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIHBoeXMpCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGh5cykKIHsKIAl1bnNpZ25lZCBsb25nIHdheXMsIHdheXNpemUsIGFkZHJzdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTE1LDEwICsxMTUsMTAgQEAKIAkJICAgICBhZGRyICs9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmxpbmVzeikgewogCQkJdW5zaWduZWQgbG9uZyBkYXRhOwogCi0JCQlkYXRhID0gY3RybF9pbmwoYWRkcikgJiAoMHgxZmZmZkMwMCB8IFNIX0NBQ0hFX1ZBTElEKTsKKwkJCWRhdGEgPSBfX3Jhd19yZWFkbChhZGRyKSAmICgweDFmZmZmQzAwIHwgU0hfQ0FDSEVfVkFMSUQpOwogCQkgICAgICAgIGlmIChkYXRhID09IHBoeXMpIHsKIAkJCQlkYXRhICY9IH4oU0hfQ0FDSEVfVkFMSUQgfCBTSF9DQUNIRV9VUERBVEVEKTsKLQkJCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIpOwogCQkJfQogCQl9CiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKF9fcGEocGFnZV9hZGRyZXNzKHBhZ2UpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIHNoNzcwNV9mbHVzaF9jYWNoZV9hbGwodm9pZCAqYXJncykKK3N0YXRpYyB2b2lkIHNoNzcwNV9mbHVzaF9jYWNoZV9hbGwodm9pZCAqYXJncykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLmMgYi9hcmNoL3NoL21tL2NhY2hlLmMKaW5kZXggYjg2MDdmYS4uMGY0MDk1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGFyY2gvc2gvbW0vY2FjaGUuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMiAgTmlpYmUgWXV0YWthCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA5ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCiAgKi8KQEAgLTQxLDggKzQxLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3YWl0KQogewogCXByZWVtcHRfZGlzYWJsZSgpOwotCXNtcF9jYWxsX2Z1bmN0aW9uKGZ1bmMsIGluZm8sIHdhaXQpOworCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBnZXRzIGNhbGxlZCBlYXJseSBvbiB3aGVuIElSUXMgYXJlCisJICogc3RpbGwgZGlzYWJsZWQgZHVlIHRvIGlvcmVtYXBwaW5nIGJ5IHRoZSBib290IENQVSwgc28gZG9uJ3QKKwkgKiBldmVuIGF0dGVtcHQgSVBJcyB1bmxlc3MgdGhlcmUgYXJlIG90aGVyIENQVXMgb25saW5lLgorCSAqLworCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpCisJCXNtcF9jYWxsX2Z1bmN0aW9uKGZ1bmMsIGluZm8sIHdhaXQpOworCiAJZnVuYyhpbmZvKTsKKwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc2gvbW0vZmF1bHRfMzIuYwppbmRleCA0NzUzMDEwLi4yOGUyMjgzIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCkBAIC01Myw2ICs1Myw5IEBACiAJaWYgKCFwdWRfcHJlc2VudCgqcHVkX2spKQogCQlyZXR1cm4gTlVMTDsKIAorCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCisJICAgIHNldF9wdWQocHVkLCAqcHVkX2spOworCiAJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwogCXBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcmVzcyk7CiAJaWYgKCFwbWRfcHJlc2VudCgqcG1kX2spKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pbml0LmMgYi9hcmNoL3NoL21tL2luaXQuYwppbmRleCA0MzJhY2QwLi42ODAyOGU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtMjEsMjUgKzIxLDEzIEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07CiAKLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKLS8qCi0gKiBIYW5kbGUgdHJpdmlhbCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGNhY2hlZCBhbmQgdW5jYWNoZWQKLSAqIHNlZ21lbnRzLCBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KLSAqIDUxMk1CIGxvd21lbS4KLSAqCi0gKiBUaGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIHVuY2FjaGVkIHNlY3Rpb24gZnJvbSBpdHMgY2FjaGVkIGFsaWFzLgotICogRGVmYXVsdCB2YWx1ZSBvbmx5IHZhbGlkIGluIDI5IGJpdCBtb2RlLCBpbiAzMmJpdCBtb2RlIHdpbGwgYmUKLSAqIG92ZXJyaWRkZW4gaW4gcG1iX2luaXQuCi0gKi8KLXVuc2lnbmVkIGxvbmcgY2FjaGVkX3RvX3VuY2FjaGVkID0gUDJTRUcgLSBQMVNFRzsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX01NVQotc3RhdGljIHZvaWQgc2V0X3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQorc3RhdGljIHB0ZV90ICpfX2dldF9wdGVfcGh5cyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkOwpAQCAtNDksMjIgKzM3LDMwIEBACiAJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwogCWlmIChwZ2Rfbm9uZSgqcGdkKSkgewogCQlwZ2RfRVJST1IoKnBnZCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJcHVkID0gcHVkX2FsbG9jKE5VTEwsIHBnZCwgYWRkcik7CiAJaWYgKHVubGlrZWx5KCFwdWQpKSB7CiAJCXB1ZF9FUlJPUigqcHVkKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlwbWQgPSBwbWRfYWxsb2MoTlVMTCwgcHVkLCBhZGRyKTsKIAlpZiAodW5saWtlbHkoIXBtZCkpIHsKIAkJcG1kX0VSUk9SKCpwbWQpOwotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIHZvaWQgc2V0X3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQoreworCXB0ZV90ICpwdGU7CisKKwlwdGUgPSBfX2dldF9wdGVfcGh5cyhhZGRyKTsKIAlpZiAoIXB0ZV9ub25lKCpwdGUpKSB7CiAJCXB0ZV9FUlJPUigqcHRlKTsKIAkJcmV0dXJuOwpAQCAtNzIsMjMgKzY4LDI0IEBACiAKIAlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwaHlzID4+IFBBR0VfU0hJRlQsIHByb3QpKTsKIAlsb2NhbF9mbHVzaF90bGJfb25lKGdldF9hc2lkKCksIGFkZHIpOworCisJaWYgKHBncHJvdF92YWwocHJvdCkgJiBfUEFHRV9XSVJFRCkKKwkJdGxiX3dpcmVfZW50cnkoTlVMTCwgYWRkciwgKnB0ZSk7CiB9CiAKLS8qCi0gKiBBcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3RoZXIgcGxhdGZvcm1zIHByZXNlcnZlIHRoZSBmaXhtYXAgbWFwcGluZwotICogYWNyb3NzIGEgY29udGV4dCBzd2l0Y2gsIHdlIGRvbid0IHByZXNlbnRseSBkbyB0aGlzLCBidXQgdGhpcyBjb3VsZCBiZSBkb25lCi0gKiBpbiBhIHNpbWlsYXIgZmFzaGlvbiBhcyB0byB0aGUgd2lyZWQgVExCIGludGVyZmFjZSB0aGF0IHNoNjQgdXNlcyAoYnkgd2F5Ci0gKiBvZiB0aGUgbWVtb3J5IG1hcHBlZCBVVExCIGNvbmZpZ3VyYXRpb24pIC0tIHRoaXMgdW5mb3J0dW5hdGVseSBmb3JjZXMgdXMgdG8KLSAqIGdpdmUgdXAgYSBUTEIgZW50cnkgZm9yIGVhY2ggbWFwcGluZyB3ZSB3YW50IHRvIHByZXNlcnZlLiBXaGlsZSB0aGlzIG1heSBiZQotICogdmlhYmxlIGZvciBhIHNtYWxsIG51bWJlciBvZiBmaXhtYXBzLCBpdCdzIG5vdCBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvcgotICogZXZlcnl0aGluZyBhbmQgbmVlZHMgdG8gYmUgY2FyZWZ1bGx5IGV2YWx1YXRlZC4gKGllLCB3ZSBtYXkgd2FudCB0aGlzIGZvcgotICogdGhlIHZzeXNjYWxsIHBhZ2UpLgotICoKLSAqIFhYWDogUGVyaGFwcyBhZGQgYSBfUEFHRV9XSVJFRCBmbGFnIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgd2UgY2FuIHBhc3MKLSAqIGluIGF0IF9fc2V0X2ZpeG1hcCgpIHRpbWUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBiZWhhdmlvciB0byBmb2xsb3cuCi0gKgotICoJCQkJCSAtLSBQRk0uCi0gKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgcGdwcm90X3QgcHJvdCkKK3sKKwlwdGVfdCAqcHRlOworCisJcHRlID0gX19nZXRfcHRlX3BoeXMoYWRkcik7CisKKwlpZiAocGdwcm90X3ZhbChwcm90KSAmIF9QQUdFX1dJUkVEKQorCQl0bGJfdW53aXJlX2VudHJ5KCk7CisKKwlzZXRfcHRlKHB0ZSwgcGZuX3B0ZSgwLCBfX3BncHJvdCgwKSkpOworCWxvY2FsX2ZsdXNoX3RsYl9vbmUoZ2V0X2FzaWQoKSwgYWRkcik7Cit9CisKIHZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQogewogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IF9fZml4X3RvX3ZpcnQoaWR4KTsKQEAgLTEwMSw2ICs5OCwxOCBAQAogCXNldF9wdGVfcGh5cyhhZGRyZXNzLCBwaHlzLCBwcm90KTsKIH0KIAordm9pZCBfX2NsZWFyX2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHBncHJvdF90IHByb3QpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gX19maXhfdG9fdmlydChpZHgpOworCisJaWYgKGlkeCA+PSBfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMpIHsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwljbGVhcl9wdGVfcGh5cyhhZGRyZXNzLCBwcm90KTsKK30KKwogdm9pZCBfX2luaXQgcGFnZV90YWJsZV9yYW5nZV9pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCQkgcGdkX3QgKnBnZF9iYXNlKQogewpAQCAtMTIwLDcgKzEyOSwxMyBAQAogCWZvciAoIDsgKGkgPCBQVFJTX1BFUl9QR0QpICYmICh2YWRkciAhPSBlbmQpOyBwZ2QrKywgaSsrKSB7CiAJCXB1ZCA9IChwdWRfdCAqKXBnZDsKIAkJZm9yICggOyAoaiA8IFBUUlNfUEVSX1BVRCkgJiYgKHZhZGRyICE9IGVuZCk7IHB1ZCsrLCBqKyspIHsKKyNpZmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAJCQlwbWQgPSAocG1kX3QgKilwdWQ7CisjZWxzZQorCQkJcG1kID0gKHBtZF90ICopYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKKwkJCXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBwbWQpOworCQkJcG1kICs9IGs7CisjZW5kaWYKIAkJCWZvciAoOyAoayA8IFBUUlNfUEVSX1BNRCkgJiYgKHZhZGRyICE9IGVuZCk7IHBtZCsrLCBrKyspIHsKIAkJCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKIAkJCQkJcHRlID0gKHB0ZV90ICopIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CkBAIC0xODIsOSArMTk3LDYgQEAKIAl9CiAKIAlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKLQotCS8qIFNldCB1cCB0aGUgdW5jYWNoZWQgZml4bWFwICovCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9VTkNBQ0hFRCwgX19wYSgmX191bmNhY2hlZF9zdGFydCkpOwogfQogCiAvKgpAQCAtMTk1LDYgKzIwNyw4IEBACiAJbm9faW9tbXVfaW5pdCgpOwogfQogCit1bnNpZ25lZCBpbnQgbWVtX2luaXRfZG9uZSA9IDA7CisKIHZvaWQgX19pbml0IG1lbV9pbml0KHZvaWQpCiB7CiAJaW50IGNvZGVzaXplLCBkYXRhc2l6ZSwgaW5pdHNpemU7CkBAIC0yMzEsNiArMjQ1LDggQEAKIAltZW1zZXQoZW1wdHlfemVyb19wYWdlLCAwLCBQQUdFX1NJWkUpOwogCV9fZmx1c2hfd2JhY2tfcmVnaW9uKGVtcHR5X3plcm9fcGFnZSwgUEFHRV9TSVpFKTsKIAorCXZzeXNjYWxsX2luaXQoKTsKKwogCWNvZGVzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0IC0gKHVuc2lnbmVkIGxvbmcpICZfdGV4dDsKIAlkYXRhc2l6ZSA9ICAodW5zaWduZWQgbG9uZykgJl9lZGF0YSAtICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0OwogCWluaXRzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2JlZ2luOwpAQCAtMjQzLDggKzI1OSw0OCBAQAogCQlkYXRhc2l6ZSA+PiAxMCwKIAkJaW5pdHNpemUgPj4gMTApOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgdkRTTyAqLwotCXZzeXNjYWxsX2luaXQoKTsKKwlwcmludGsoS0VSTl9JTkZPICJ2aXJ0dWFsIGtlcm5lbCBtZW1vcnkgbGF5b3V0OlxuIgorCQkiICAgIGZpeG1hcCAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIGtCKVxuIgorI2lmZGVmIENPTkZJR19ISUdITUVNCisJCSIgICAgcGttYXAgICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQga0IpXG4iCisjZW5kaWYKKwkJIiAgICB2bWFsbG9jIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQilcbiIKKwkJIiAgICBsb3dtZW0gIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQikgKGNhY2hlZClcbiIKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworCQkiICAgICAgICAgICAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIE1CKSAodW5jYWNoZWQpXG4iCisjZW5kaWYKKwkJIiAgICAgIC5pbml0IDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKwkJIiAgICAgIC5kYXRhIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKwkJIiAgICAgIC50ZXh0IDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIsCisJCUZJWEFERFJfU1RBUlQsIEZJWEFERFJfVE9QLAorCQkoRklYQUREUl9UT1AgLSBGSVhBRERSX1NUQVJUKSA+PiAxMCwKKworI2lmZGVmIENPTkZJR19ISUdITUVNCisJCVBLTUFQX0JBU0UsIFBLTUFQX0JBU0UrTEFTVF9QS01BUCpQQUdFX1NJWkUsCisJCShMQVNUX1BLTUFQKlBBR0VfU0laRSkgPj4gMTAsCisjZW5kaWYKKworCQkodW5zaWduZWQgbG9uZylWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKKwkJKFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TVEFSVCkgPj4gMjAsCisKKwkJKHVuc2lnbmVkIGxvbmcpbWVtb3J5X3N0YXJ0LCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSwKKwkJKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5IC0gKHVuc2lnbmVkIGxvbmcpbWVtb3J5X3N0YXJ0KSA+PiAyMCwKKworI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCisJCXVuY2FjaGVkX3N0YXJ0LCB1bmNhY2hlZF9lbmQsIHVuY2FjaGVkX3NpemUgPj4gMjAsCisjZW5kaWYKKworCQkodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luLCAodW5zaWduZWQgbG9uZykmX19pbml0X2VuZCwKKwkJKCh1bnNpZ25lZCBsb25nKSZfX2luaXRfZW5kIC0KKwkJICh1bnNpZ25lZCBsb25nKSZfX2luaXRfYmVnaW4pID4+IDEwLAorCisJCSh1bnNpZ25lZCBsb25nKSZfZXRleHQsICh1bnNpZ25lZCBsb25nKSZfZWRhdGEsCisJCSgodW5zaWduZWQgbG9uZykmX2VkYXRhIC0gKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCkgPj4gMTAsCisKKwkJKHVuc2lnbmVkIGxvbmcpJl90ZXh0LCAodW5zaWduZWQgbG9uZykmX2V0ZXh0LAorCQkoKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCAtICh1bnNpZ25lZCBsb25nKSZfdGV4dCkgPj4gMTApOworCisJbWVtX2luaXRfZG9uZSA9IDE7CiB9CiAKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCkBAIC0yNzcsMzUgKzMzMyw2IEBACiB9CiAjZW5kaWYKIAotI2lmIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGhyZWFkX2luZm9fY2FjaGU7Ci0KLXN0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0Jc3RydWN0IHRocmVhZF9pbmZvICp0aTsKLQotCXRpID0ga21lbV9jYWNoZV9hbGxvYyh0aHJlYWRfaW5mb19jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KHRpID09IE5VTEwpKQotCQlyZXR1cm4gTlVMTDsKLSNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLQltZW1zZXQodGksIDAsIFRIUkVBRF9TSVpFKTsKLSNlbmRpZgotCXJldHVybiB0aTsKLX0KLQotdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpCi17Ci0Ja21lbV9jYWNoZV9mcmVlKHRocmVhZF9pbmZvX2NhY2hlLCB0aSk7Ci19Ci0KLXZvaWQgdGhyZWFkX2luZm9fY2FjaGVfaW5pdCh2b2lkKQotewotCXRocmVhZF9pbmZvX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInRocmVhZF9pbmZvIiwgVEhSRUFEX1NJWkUsCi0JCQkJCSAgICAgIFRIUkVBRF9TSVpFLCAwLCBOVUxMKTsKLQlCVUdfT04odGhyZWFkX2luZm9fY2FjaGUgPT0gTlVMTCk7Ci19Ci0jZW5kaWYgLyogVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVCAqLwotCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUpCiB7CkBAIC0zMzYsMTAgKzM2MywzIEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwotCi0jaWZkZWYgQ09ORklHX1BNQgotaW50IF9faW5fMjliaXRfbW9kZSh2b2lkKQotewotCXJldHVybiAhKGN0cmxfaW5sKFBNQl9QQVNDUikgJiBQQVNDUl9TRSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BNQiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMgYi9hcmNoL3NoL21tL2lvcmVtYXAuYwpzaW1pbGFyaXR5IGluZGV4IDc4JQpyZW5hbWUgZnJvbSBhcmNoL3NoL21tL2lvcmVtYXBfMzIuYwpyZW5hbWUgdG8gYXJjaC9zaC9tbS9pb3JlbWFwLmMKaW5kZXggMjE0MWJlZi4uYzY4ZDJkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKKysrIGIvYXJjaC9zaC9tbS9pb3JlbWFwLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAgKiBhcmNoL3NoL21tL2lvcmVtYXAuYwogICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5NSAxOTk2IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDIwMDUgLSAyMDEwICBQYXVsIE11bmR0CisgKgogICogUmUtbWFwIElPIG1lbW9yeSB0byBrZXJuZWwgYWRkcmVzcyBzcGFjZSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgaXQuCiAgKiBUaGlzIGlzIG5lZWRlZCBmb3IgaGlnaCBQQ0kgYWRkcmVzc2VzIHRoYXQgYXJlbid0IG1hcHBlZCBpbiB0aGUKICAqIDY0MGstMU1CIElPIG1lbW9yeSBhcmVhIG9uIFBDJ3MKICAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTUgMTk5NiBMaW51cyBUb3J2YWxkcwotICogKEMpIENvcHlyaWdodCAyMDA1LCAyMDA2IFBhdWwgTXVuZHQKLSAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcwogICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgpAQCAtMzMsMTIgKzMzLDEyIEBACiAgKiBoYXZlIHRvIGNvbnZlcnQgdGhlbSBpbnRvIGFuIG9mZnNldCBpbiBhIHBhZ2UtYWxpZ25lZCBtYXBwaW5nLCBidXQgdGhlCiAgKiBjYWxsZXIgc2hvdWxkbid0IG5lZWQgdG8ga25vdyB0aGF0IHNtYWxsIGRldGFpbC4KICAqLwotdm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY2FsbGVyKQordm9pZCBfX2lvbWVtICogX19pbml0X3JlZm9rCitfX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSBwZ3Byb3RfdCBwZ3Byb3QsIHZvaWQgKmNhbGxlcikKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHIsIGFkZHIsIG9yaWdfYWRkcjsKLQlwZ3Byb3RfdCBwZ3Byb3Q7CiAKIAkvKiBEb24ndCBhbGxvdyB3cmFwYXJvdW5kIG9yIHplcm8gc2l6ZSAqLwogCWxhc3RfYWRkciA9IHBoeXNfYWRkciArIHNpemUgLSAxOwpAQCAtNDYsMTggKzQ2LDYgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgotCSAqIElmIHdlJ3JlIGluIHRoZSBmaXhlZCBQQ0kgbWVtb3J5IHJhbmdlLCBtYXBwaW5nIHRocm91Z2ggcGFnZQotCSAqIHRhYmxlcyBpcyBub3Qgb25seSBwb2ludGxlc3MsIGJ1dCBhbHNvIGZ1bmRhbWVudGFsbHkgYnJva2VuLgotCSAqIEp1c3QgcmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGluc3RlYWQuCi0JICoKLQkgKiBGb3IgYm9hcmRzIHRoYXQgbWFwIGEgc21hbGwgUENJIG1lbW9yeSBhcGVydHVyZSBzb21ld2hlcmUgaW4KLQkgKiBQMS9QMiBzcGFjZSwgaW9yZW1hcCgpIHdpbGwgYWxyZWFkeSBkbyB0aGUgcmlnaHQgdGhpbmcsCi0JICogYW5kIHdlJ2xsIG5ldmVyIGdldCB0aGlzIGZhci4KLQkgKi8KLQlpZiAoaXNfcGNpX21lbW9yeV9maXhlZF9yYW5nZShwaHlzX2FkZHIsIHNpemUpKQotCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBoeXNfYWRkcjsKLQotCS8qCiAJICogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQKIAkgKi8KIAlvZmZzZXQgPSBwaHlzX2FkZHIgJiB+UEFHRV9NQVNLOwpAQCAtNjUsNiArNTMsMTIgQEAKIAlzaXplID0gUEFHRV9BTElHTihsYXN0X2FkZHIrMSkgLSBwaHlzX2FkZHI7CiAKIAkvKgorCSAqIElmIHdlIGNhbid0IHlldCB1c2UgdGhlIHJlZ3VsYXIgYXBwcm9hY2gsIGdvIHRoZSBmaXhtYXAgcm91dGUuCisJICovCisJaWYgKCFtZW1faW5pdF9kb25lKQorCQlyZXR1cm4gaW9yZW1hcF9maXhlZChwaHlzX2FkZHIsIG9mZnNldCwgc2l6ZSwgcGdwcm90KTsKKworCS8qCiAJICogT2ssIGdvIGZvciBpdC4uCiAJICovCiAJYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcihzaXplLCBWTV9JT1JFTUFQLCBjYWxsZXIpOwpAQCAtODQsOCArNzgsOSBAQAogCSAqIFBNQiBlbnRyaWVzIGFyZSBhbGwgcHJlLWZhdWx0ZWQuCiAJICovCiAJaWYgKHVubGlrZWx5KHBoeXNfYWRkciA+PSBQMVNFRykpIHsKLQkJdW5zaWduZWQgbG9uZyBtYXBwZWQgPSBwbWJfcmVtYXAoYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncyk7CisJCXVuc2lnbmVkIGxvbmcgbWFwcGVkOwogCisJCW1hcHBlZCA9IHBtYl9yZW1hcChhZGRyLCBwaHlzX2FkZHIsIHNpemUsIHBncHJvdCk7CiAJCWlmIChsaWtlbHkobWFwcGVkKSkgewogCQkJYWRkcgkJKz0gbWFwcGVkOwogCQkJcGh5c19hZGRyCSs9IG1hcHBlZDsKQEAgLTk0LDcgKzg5LDYgQEAKIAl9CiAjZW5kaWYKIAotCXBncHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwoUEFHRV9LRVJORUxfTk9DQUNIRSkgfCBmbGFncyk7CiAJaWYgKGxpa2VseShzaXplKSkKIAkJaWYgKGlvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwZ3Byb3QpKSB7CiAJCQl2dW5tYXAoKHZvaWQgKilvcmlnX2FkZHIpOwpAQCAtMTA1LDE1ICs5OSwzOCBAQAogfQogRVhQT1JUX1NZTUJPTChfX2lvcmVtYXBfY2FsbGVyKTsKIAorLyoKKyAqIFNpbXBsZSBjaGVja3MgZm9yIG5vbi10cmFuc2xhdGFibGUgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlvbWFwcGluZ19ub250cmFuc2xhdGFibGUodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisjaWZkZWYgQ09ORklHXzI5QklUCisJLyoKKwkgKiBJbiAyOS1iaXQgbW9kZSB0aGlzIGluY2x1ZGVzIHRoZSBmaXhlZCBQMS9QMiBhcmVhcywgYXMgd2VsbCBhcworCSAqIHBhcnRzIG9mIFAzLgorCSAqLworCWlmIChQWFNFRyhvZmZzZXQpIDwgUDNTRUcgfHwgb2Zmc2V0ID49IFAzX0FERFJfTUFYKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyOwotCXVuc2lnbmVkIGxvbmcgc2VnID0gUFhTRUcodmFkZHIpOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKnA7CiAKLQlpZiAoc2VnIDwgUDNTRUcgfHwgdmFkZHIgPj0gUDNfQUREUl9NQVgpCisJLyoKKwkgKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGlzIG5vIHRyYW5zbGF0YWJsZSBtYXBwaW5nLgorCSAqLworCWlmIChpb21hcHBpbmdfbm9udHJhbnNsYXRhYmxlKHZhZGRyKSkKIAkJcmV0dXJuOwotCWlmIChpc19wY2lfbWVtb3J5X2ZpeGVkX3JhbmdlKHZhZGRyLCAwKSkKKworCS8qCisJICogVGhlcmUncyBubyBWTUEgaWYgaXQncyBmcm9tIGFuIGVhcmx5IGZpeGVkIG1hcHBpbmcuCisJICovCisJaWYgKGlvdW5tYXBfZml4ZWQoYWRkcikgPT0gMCkKIAkJcmV0dXJuOwogCiAjaWZkZWYgQ09ORklHX1BNQgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMgYi9hcmNoL3NoL21tL2lvcmVtYXBfNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY0MzQ2NS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXBfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKgotICogYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNyAgUGF1bCBNdW5kdAotICoKLSAqIE1vc3RseSBkZXJpdmVkIGZyb20gYXJjaC9zaC9tbS9pb3JlbWFwLmMgd2hpY2gsIGluIHR1cm4gaXMgbW9zdGx5Ci0gKiBkZXJpdmVkIGZyb20gYXJjaC9pMzg2L21tL2lvcmVtYXAuYyAuCi0gKgotICogICAoQykgQ29weXJpZ2h0IDE5OTUgMTk5NiBMaW51cyBUb3J2YWxkcwotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL21tdS5oPgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNobWVkaWFfaW9tYXAgPSB7Ci0JLm5hbWUJPSAic2htZWRpYV9pb21hcCIsCi0JLnN0YXJ0CT0gSU9CQVNFX1ZBRERSICsgUEFHRV9TSVpFLAotCS5lbmQJPSBJT0JBU0VfRU5EIC0gMSwKLX07Ci0KLXN0YXRpYyB2b2lkIHNobWVkaWFfbWFwaW9hZGRyKHVuc2lnbmVkIGxvbmcgcGEsIHVuc2lnbmVkIGxvbmcgdmEsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLXN0YXRpYyB2b2lkIHNobWVkaWFfdW5tYXBpb2FkZHIodW5zaWduZWQgbG9uZyB2YWRkcik7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICpzaG1lZGlhX2lvcmVtYXAoc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiBwYSwKLQkJCQkgICAgIGludCBzeiwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0KLS8qCi0gKiBXZSBoYXZlIHRoZSBzYW1lIHByb2JsZW0gYXMgdGhlIFNQQVJDLCBzbyBsZXRzIGhhdmUgdGhlIHNhbWUgY29tbWVudDoKLSAqIE91ciBtaW5pLWFsbG9jYXRvci4uLgotICogQm95IHRoaXMgaXMgZ3Jvc3MhIFdlIG5lZWQgaXQgYmVjYXVzZSB3ZSBtdXN0IG1hcCBJL08gZm9yCi0gKiB0aW1lcnMgYW5kIGludGVycnVwdCBjb250cm9sbGVyIGJlZm9yZSB0aGUga21hbGxvYyBpcyBhdmFpbGFibGUuCi0gKi8KLQotI2RlZmluZSBYTk1MTiAgMTUKLSNkZWZpbmUgWE5SRVMgIDEwCi0KLXN0cnVjdCB4cmVzb3VyY2UgewotCXN0cnVjdCByZXNvdXJjZSB4cmVzOyAgIC8qIE11c3QgYmUgZmlyc3QgKi8KLQlpbnQgeGZsYWc7ICAgICAgICAgICAgICAvKiAxID09IHVzZWQgKi8KLQljaGFyIHhuYW1lW1hOTUxOKzFdOwotfTsKLQotc3RhdGljIHN0cnVjdCB4cmVzb3VyY2UgeHJlc3ZbWE5SRVNdOwotCi1zdGF0aWMgc3RydWN0IHhyZXNvdXJjZSAqeHJlc19hbGxvYyh2b2lkKQotewotCXN0cnVjdCB4cmVzb3VyY2UgKnhycDsKLQlpbnQgbjsKLQotCXhycCA9IHhyZXN2OwotCWZvciAobiA9IDA7IG4gPCBYTlJFUzsgbisrKSB7Ci0JCWlmICh4cnAtPnhmbGFnID09IDApIHsKLQkJCXhycC0+eGZsYWcgPSAxOwotCQkJcmV0dXJuIHhycDsKLQkJfQotCQl4cnArKzsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHhyZXNfZnJlZShzdHJ1Y3QgeHJlc291cmNlICp4cnApCi17Ci0JeHJwLT54ZmxhZyA9IDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKnNobWVkaWFfZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIpCi17Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlmb3IgKHJlcyA9IHJvb3QtPmNoaWxkOyByZXM7IHJlcyA9IHJlcy0+c2libGluZykKLQkJaWYgKHJlcy0+c3RhcnQgPD0gdmFkZHIgJiYgcmVzLT5lbmQgPj0gdmFkZHIpCi0JCQlyZXR1cm4gcmVzOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnNobWVkaWFfYWxsb2NfaW8odW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlzdHJ1Y3QgeHJlc291cmNlICp4cmVzOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNoYXIgKnRhY2s7Ci0JaW50IHRsZW47Ci0KLQlpZiAobmFtZSA9PSBOVUxMKQotCQluYW1lID0gIj8/PyI7Ci0KLQl4cmVzID0geHJlc19hbGxvYygpOwotCWlmICh4cmVzICE9IDApIHsKLQkJdGFjayA9IHhyZXMtPnhuYW1lOwotCQlyZXMgPSAmeHJlcy0+eHJlczsKLQl9IGVsc2UgewotCQlwcmludGtfb25jZShLRVJOX05PVElDRSAiJXM6IGRvbmUgd2l0aCBzdGF0aWNzLCAiCi0JCQkgICAgICAgInN3aXRjaGluZyB0byBrbWFsbG9jXG4iLCBfX2Z1bmNfXyk7Ci0JCXRsZW4gPSBzdHJsZW4obmFtZSk7Ci0JCXRhY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICsgdGxlbiArIDEsIEdGUF9LRVJORUwpOwotCQlpZiAoIXRhY2spCi0JCQlyZXR1cm4gTlVMTDsKLQkJbWVtc2V0KHRhY2ssIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKLQkJcmVzID0gKHN0cnVjdCByZXNvdXJjZSAqKSB0YWNrOwotCQl0YWNrICs9IHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpOwotCX0KLQotCXN0cm5jcHkodGFjaywgbmFtZSwgWE5NTE4pOwotCXRhY2tbWE5NTE5dID0gMDsKLQlyZXMtPm5hbWUgPSB0YWNrOwotCi0JcmV0dXJuIHNobWVkaWFfaW9yZW1hcChyZXMsIHBoeXMsIHNpemUsIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgX19pb21lbSAqc2htZWRpYV9pb3JlbWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgcGEsIGludCBzeiwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpIHBhKSAmICh+UEFHRV9NQVNLKTsKLQl1bnNpZ25lZCBsb25nIHJvdW5kX3N6ID0gKG9mZnNldCArIHN6ICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLOwotCXVuc2lnbmVkIGxvbmcgdmE7Ci0JdW5zaWduZWQgaW50IHBzejsKLQotCWlmIChhbGxvY2F0ZV9yZXNvdXJjZSgmc2htZWRpYV9pb21hcCwgcmVzLCByb3VuZF9zeiwKLQkJCSAgICAgIHNobWVkaWFfaW9tYXAuc3RhcnQsIHNobWVkaWFfaW9tYXAuZW5kLAotCQkJICAgICAgUEFHRV9TSVpFLCBOVUxMLCBOVUxMKSAhPSAwKSB7Ci0JCXBhbmljKCJhbGxvY19pb19yZXMoJXMpOiBjYW5ub3Qgb2NjdXB5XG4iLAotCQkgICAgICAocmVzLT5uYW1lICE9IE5VTEwpID8gcmVzLT5uYW1lIDogIj8/PyIpOwotCX0KLQotCXZhID0gcmVzLT5zdGFydDsKLQlwYSAmPSBQQUdFX01BU0s7Ci0KLQlwc3ogPSAocmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgKFBBR0VfU0laRSAtIDEpKSAvIFBBR0VfU0laRTsKLQotCWZvciAocHN6ID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsgcHN6ICE9IDA7IHBzeiAtPSBQQUdFX1NJWkUpIHsKLQkJc2htZWRpYV9tYXBpb2FkZHIocGEsIHZhLCBmbGFncyk7Ci0JCXZhICs9IFBBR0VfU0laRTsKLQkJcGEgKz0gUEFHRV9TSVpFOwotCX0KLQotCXJldHVybiAodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKHJlcy0+c3RhcnQgKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgdm9pZCBzaG1lZGlhX2ZyZWVfaW8oc3RydWN0IHJlc291cmNlICpyZXMpCi17Ci0JdW5zaWduZWQgbG9uZyBsZW4gPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwotCi0JQlVHX09OKChsZW4gJiAoUEFHRV9TSVpFIC0gMSkpICE9IDApOwotCi0Jd2hpbGUgKGxlbikgewotCQlsZW4gLT0gUEFHRV9TSVpFOwotCQlzaG1lZGlhX3VubWFwaW9hZGRyKHJlcy0+c3RhcnQgKyBsZW4pOwotCX0KLQotCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKLX0KLQotc3RhdGljIF9faW5pdF9yZWZvayB2b2lkICpzaDY0X2dldF9wYWdlKHZvaWQpCi17Ci0Jdm9pZCAqcGFnZTsKLQotCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKQotCQlwYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JZWxzZQotCQlwYWdlID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwotCi0JaWYgKCFwYWdlIHx8ICgodW5zaWduZWQgbG9uZylwYWdlICYgflBBR0VfTUFTSykpCi0JCXBhbmljKCJzaDY0X2dldF9wYWdlOiBPdXQgb2YgbWVtb3J5IGFscmVhZHk/XG4iKTsKLQotCXJldHVybiBwYWdlOwotfQotCi1zdGF0aWMgdm9pZCBzaG1lZGlhX21hcGlvYWRkcih1bnNpZ25lZCBsb25nIHBhLCB1bnNpZ25lZCBsb25nIHZhLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlwZ2RfdCAqcGdkcDsKLQlwdWRfdCAqcHVkcDsKLQlwbWRfdCAqcG1kcDsKLQlwdGVfdCAqcHRlcCwgcHRlOwotCXBncHJvdF90IHByb3Q7Ci0KLQlwcl9kZWJ1Zygic2htZWRpYV9tYXBpb3BhZ2UgcGEgJTA4bHggdmEgJTA4bHhcbiIsICBwYSwgdmEpOwotCi0JaWYgKCFmbGFncykKLQkJZmxhZ3MgPSAxOyAvKiAxID0gQ0IwLTEgZGV2aWNlICovCi0KLQlwZ2RwID0gcGdkX29mZnNldF9rKHZhKTsKLQlpZiAocGdkX25vbmUoKnBnZHApIHx8ICFwZ2RfcHJlc2VudCgqcGdkcCkpIHsKLQkJcHVkcCA9IChwdWRfdCAqKXNoNjRfZ2V0X3BhZ2UoKTsKLQkJc2V0X3BnZChwZ2RwLCBfX3BnZCgodW5zaWduZWQgbG9uZylwdWRwIHwgX0tFUk5QR19UQUJMRSkpOwotCX0KLQotCXB1ZHAgPSBwdWRfb2Zmc2V0KHBnZHAsIHZhKTsKLQlpZiAocHVkX25vbmUoKnB1ZHApIHx8ICFwdWRfcHJlc2VudCgqcHVkcCkpIHsKLQkJcG1kcCA9IChwbWRfdCAqKXNoNjRfZ2V0X3BhZ2UoKTsKLQkJc2V0X3B1ZChwdWRwLCBfX3B1ZCgodW5zaWduZWQgbG9uZylwbWRwIHwgX0tFUk5QR19UQUJMRSkpOwotCX0KLQotCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIHZhKTsKLQlpZiAocG1kX25vbmUoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpIHsKLQkJcHRlcCA9IChwdGVfdCAqKXNoNjRfZ2V0X3BhZ2UoKTsKLQkJc2V0X3BtZChwbWRwLCBfX3BtZCgodW5zaWduZWQgbG9uZylwdGVwICsgX1BBR0VfVEFCTEUpKTsKLQl9Ci0KLQlwcm90ID0gX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgICAgIHwgX1BBR0VfV1JJVEUgIHwKLQkJCV9QQUdFX0RJUlRZICAgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1NIQVJFRCB8IGZsYWdzKTsKLQotCXB0ZSA9IHBmbl9wdGUocGEgPj4gUEFHRV9TSElGVCwgcHJvdCk7Ci0JcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIHZhKTsKLQotCWlmICghcHRlX25vbmUoKnB0ZXApICYmCi0JICAgIHB0ZV92YWwoKnB0ZXApICE9IHB0ZV92YWwocHRlKSkKLQkJcHRlX0VSUk9SKCpwdGVwKTsKLQotCXNldF9wdGUocHRlcCwgcHRlKTsKLQotCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodmEsIFBBR0VfU0laRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNobWVkaWFfdW5tYXBpb2FkZHIodW5zaWduZWQgbG9uZyB2YWRkcikKLXsKLQlwZ2RfdCAqcGdkcDsKLQlwdWRfdCAqcHVkcDsKLQlwbWRfdCAqcG1kcDsKLQlwdGVfdCAqcHRlcDsKLQotCXBnZHAgPSBwZ2Rfb2Zmc2V0X2sodmFkZHIpOwotCWlmIChwZ2Rfbm9uZSgqcGdkcCkgfHwgcGdkX2JhZCgqcGdkcCkpCi0JCXJldHVybjsKLQotCXB1ZHAgPSBwdWRfb2Zmc2V0KHBnZHAsIHZhZGRyKTsKLQlpZiAocHVkX25vbmUoKnB1ZHApIHx8IHB1ZF9iYWQoKnB1ZHApKQotCQlyZXR1cm47Ci0KLQlwbWRwID0gcG1kX29mZnNldChwdWRwLCB2YWRkcik7Ci0JaWYgKHBtZF9ub25lKCpwbWRwKSB8fCBwbWRfYmFkKCpwbWRwKSkKLQkJcmV0dXJuOwotCi0JcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIHZhZGRyKTsKLQotCWlmIChwdGVfbm9uZSgqcHRlcCkgfHwgIXB0ZV9wcmVzZW50KCpwdGVwKSkKLQkJcmV0dXJuOwotCi0JY2xlYXJfcGFnZSgodm9pZCAqKXB0ZXApOwotCXB0ZV9jbGVhcigmaW5pdF9tbSwgdmFkZHIsIHB0ZXApOwotfQotCi12b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpCi17Ci0JY2hhciBuYW1lWzE0XTsKLQotCXNwcmludGYobmFtZSwgInBoeXNfJTA4eCIsICh1MzIpb2Zmc2V0KTsKLQlyZXR1cm4gc2htZWRpYV9hbGxvY19pbyhvZmZzZXQsIHNpemUsIG5hbWUsIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woX19pb3JlbWFwX2NhbGxlcik7Ci0KLXZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqdmlydHVhbCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmlydHVhbCAmIFBBR0VfTUFTSzsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQl1bnNpZ25lZCBpbnQgcHN6OwotCi0JcmVzID0gc2htZWRpYV9maW5kX3Jlc291cmNlKCZzaG1lZGlhX2lvbWFwLCB2YWRkcik7Ci0JaWYgKCFyZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGZyZWUgMHglMDhseFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCB2YWRkcik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwc3ogPSAocmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgKFBBR0VfU0laRSAtIDEpKSAvIFBBR0VfU0laRTsKLQotCXNobWVkaWFfZnJlZV9pbyhyZXMpOwotCi0JaWYgKChjaGFyICopcmVzID49IChjaGFyICopeHJlc3YgJiYKLQkgICAgKGNoYXIgKilyZXMgPCAgKGNoYXIgKikmeHJlc3ZbWE5SRVNdKSB7Ci0JCXhyZXNfZnJlZSgoc3RydWN0IHhyZXNvdXJjZSAqKXJlcyk7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUocmVzKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKF9faW91bm1hcCk7Ci0KLXN0YXRpYyBpbnQKLWlvcmVtYXBfcHJvY19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBmcG9zLCBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwKLQkJICB2b2lkICpkYXRhKQotewotCWNoYXIgKnAgPSBidWYsICplID0gYnVmICsgbGVuZ3RoOwotCXN0cnVjdCByZXNvdXJjZSAqcjsKLQljb25zdCBjaGFyICpubTsKLQotCWZvciAociA9ICgoc3RydWN0IHJlc291cmNlICopZGF0YSktPmNoaWxkOyByICE9IE5VTEw7IHIgPSByLT5zaWJsaW5nKSB7Ci0JCWlmIChwICsgMzIgPj0gZSkgICAgICAgIC8qIEJldHRlciB0aGFuIG5vdGhpbmcgKi8KLQkJCWJyZWFrOwotCQlubSA9IHItPm5hbWU7Ci0JCWlmIChubSA9PSBOVUxMKQotCQkJbm0gPSAiPz8/IjsKLQotCQlwICs9IHNwcmludGYocCwgIiUwOGx4LSUwOGx4OiAlc1xuIiwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpci0+c3RhcnQsCi0JCQkgICAgICh1bnNpZ25lZCBsb25nKXItPmVuZCwgbm0pOwotCX0KLQotCXJldHVybiBwLWJ1ZjsKLX0KLQotc3RhdGljIGludCBfX2luaXQgcmVnaXN0ZXJfcHJvY19vbmNoaXAodm9pZCkKLXsKLQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJpb19tYXAiLCAwLCAwLCBpb3JlbWFwX3Byb2NfaW5mbywKLQkJCSAgICAgICAmc2htZWRpYV9pb21hcCk7Ci0JcmV0dXJuIDA7Ci19Ci1sYXRlX2luaXRjYWxsKHJlZ2lzdGVyX3Byb2Nfb25jaGlwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcF9maXhlZC5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwX2ZpeGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3OGIxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF9maXhlZC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogUmUtbWFwIElPIG1lbW9yeSB0byBrZXJuZWwgYWRkcmVzcyBzcGFjZSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgaXQuCisgKgorICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBuZWNlc3NhcnkgdG8gbWFwIGEKKyAqIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UgYmVmb3JlIGlvcmVtYXAoKQorICogY2FuIGJlIHVzZWQsIGUuZy4gZWFybHkgaW4gYm9vdCBiZWZvcmUgcGFnaW5nX2luaXQoKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIE1hdHQgRmxlbWluZworICovCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorCitzdHJ1Y3QgaW9yZW1hcF9tYXAgeworCXZvaWQgX19pb21lbSAqYWRkcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBmaXhtYXBfYWRkcjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW9yZW1hcF9tYXAgaW9yZW1hcF9tYXBzW0ZJWF9OX0lPUkVNQVBTXTsKKwordm9pZCBfX2luaXQgaW9yZW1hcF9maXhlZF9pbml0KHZvaWQpCit7CisJc3RydWN0IGlvcmVtYXBfbWFwICptYXA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRklYX05fSU9SRU1BUFM7IGkrKykgeworCQltYXAgPSAmaW9yZW1hcF9tYXBzW2ldOworCQltYXAtPmZpeG1hcF9hZGRyID0gX19maXhfdG9fdmlydChGSVhfSU9SRU1BUF9CRUdJTiArIGkpOworCX0KK30KKwordm9pZCBfX2luaXQgX19pb21lbSAqCitpb3JlbWFwX2ZpeGVkKHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwllbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgwLCBpZHg7CisJc3RydWN0IGlvcmVtYXBfbWFwICptYXA7CisJdW5zaWduZWQgaW50IG5ycGFnZXM7CisJaW50IGksIHNsb3Q7CisKKwlzbG90ID0gLTE7CisJZm9yIChpID0gMDsgaSA8IEZJWF9OX0lPUkVNQVBTOyBpKyspIHsKKwkJbWFwID0gJmlvcmVtYXBfbWFwc1tpXTsKKwkJaWYgKCFtYXAtPmFkZHIpIHsKKwkJCW1hcC0+c2l6ZSA9IHNpemU7CisJCQlzbG90ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHNsb3QgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogTWFwcGluZ3MgaGF2ZSB0byBmaXQgaW4gdGhlIEZJWF9JT1JFTUFQIGFyZWEuCisJICovCisJbnJwYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKKwlpZiAobnJwYWdlcyA+IEZJWF9OX0lPUkVNQVBTKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogT2ssIGdvIGZvciBpdC4uCisJICovCisJaWR4MCA9IEZJWF9JT1JFTUFQX0JFR0lOICsgc2xvdDsKKwlpZHggPSBpZHgwOworCXdoaWxlIChucnBhZ2VzID4gMCkgeworCQlwZ3Byb3RfdmFsKHByb3QpIHw9IF9QQUdFX1dJUkVEOworCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzX2FkZHIsIHByb3QpOworCQlwaHlzX2FkZHIgKz0gUEFHRV9TSVpFOworCQlpZHgrKzsKKwkJLS1ucnBhZ2VzOworCX0KKworCW1hcC0+YWRkciA9ICh2b2lkIF9faW9tZW0gKikob2Zmc2V0ICsgbWFwLT5maXhtYXBfYWRkcik7CisJcmV0dXJuIG1hcC0+YWRkcjsKK30KKworaW50IGlvdW5tYXBfZml4ZWQodm9pZCBfX2lvbWVtICphZGRyKQoreworCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeDsKKwlzdHJ1Y3QgaW9yZW1hcF9tYXAgKm1hcDsKKwl1bnNpZ25lZCBpbnQgbnJwYWdlczsKKwlpbnQgaSwgc2xvdDsKKworCXNsb3QgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgRklYX05fSU9SRU1BUFM7IGkrKykgeworCQltYXAgPSAmaW9yZW1hcF9tYXBzW2ldOworCQlpZiAobWFwLT5hZGRyID09IGFkZHIpIHsKKwkJCXNsb3QgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHdlIGRvbid0IG1hdGNoLCBpdCdzIG5vdCBmb3IgdXMuCisJICovCisJaWYgKHNsb3QgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5ycGFnZXMgPSBtYXAtPnNpemUgPj4gUEFHRV9TSElGVDsKKworCWlkeCA9IEZJWF9JT1JFTUFQX0JFR0lOICsgc2xvdCArIG5ycGFnZXMgLSAxOworCXdoaWxlIChucnBhZ2VzID4gMCkgeworCQlfX2NsZWFyX2ZpeG1hcChpZHgsIF9fcGdwcm90KF9QQUdFX1dJUkVEKSk7CisJCS0taWR4OworCQktLW5ycGFnZXM7CisJfQorCisJbWFwLT5zaXplID0gMDsKKwltYXAtPmFkZHIgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL25vbW11LmMgYi9hcmNoL3NoL21tL25vbW11LmMKaW5kZXggYWMxNmMwNS4uNzY5NGY1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9ub21tdS5jCisrKyBiL2FyY2gvc2gvbW0vbm9tbXUuYwpAQCAtOTQsMyArOTQsNyBAQAogdm9pZCBfX3NldF9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LCB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IHByb3QpCiB7CiB9CisKK3ZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BndGFibGUuYyBiL2FyY2gvc2gvbW0vcGd0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMjFmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3BndGFibGUuYwpAQCAtMCwwICsxLDU2IEBACisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2RlZmluZSBQR0FMTE9DX0dGUCBHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTworCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBnZF9jYWNoZXA7CisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDIKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcG1kX2NhY2hlcDsKKyNlbmRpZgorCit2b2lkIHBnZF9jdG9yKHZvaWQgKngpCit7CisJcGdkX3QgKnBnZCA9IHg7CisKKwltZW1jcHkocGdkICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJICAgICAgIHN3YXBwZXJfcGdfZGlyICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJICAgICAgIChQVFJTX1BFUl9QR0QgLSBVU0VSX1BUUlNfUEVSX1BHRCkgKiBzaXplb2YocGdkX3QpKTsKK30KKwordm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkKK3sKKwlwZ2RfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInBnZF9jYWNoZSIsCisJCQkJICAgICAgIFBUUlNfUEVSX1BHRCAqICgxPDxQVEVfTUFHTklUVURFKSwKKwkJCQkgICAgICAgUEFHRV9TSVpFLCBTTEFCX1BBTklDLCBwZ2RfY3Rvcik7CisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDIKKwlwbWRfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInBtZF9jYWNoZSIsCisJCQkJICAgICAgIFBUUlNfUEVSX1BNRCAqICgxPDxQVEVfTUFHTklUVURFKSwKKwkJCQkgICAgICAgUEFHRV9TSVpFLCBTTEFCX1BBTklDLCBOVUxMKTsKKyNlbmRpZgorfQorCitwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBnZF9jYWNoZXAsIFBHQUxMT0NfR0ZQKTsKK30KKwordm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUocGdkX2NhY2hlcCwgcGdkKTsKK30KKworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPiAyCit2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgcG1kX3QgKnBtZCkKK3sKKwlzZXRfcHVkKHB1ZCwgX19wdWQoKHVuc2lnbmVkIGxvbmcpcG1kKSk7Cit9CisKK3BtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MocG1kX2NhY2hlcCwgUEdBTExPQ19HRlApOworfQorCit2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKQoreworCWttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCBwbWQpOworfQorI2VuZGlmIC8qIFBBR0VUQUJMRV9MRVZFTFMgPiAyICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BtYi5jIGIvYXJjaC9zaC9tbS9wbWIuYwppbmRleCAyODBmNmExLi4xOThiY2ZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BtYi5jCisrKyBiL2FyY2gvc2gvbW0vcG1iLmMKQEAgLTMsMTEgKzMsOCBAQAogICoKICAqIFByaXZpbGVnZWQgU3BhY2UgTWFwcGluZyBCdWZmZXIgKFBNQikgU3VwcG9ydC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgUGF1bCBNdW5kdAotICoKLSAqIFAxL1AyIFNlY3Rpb24gbWFwcGluZyBkZWZpbml0aW9ucyBmcm9tIG1hcDMyLmgsIHdoaWNoIHdhczoKLSAqCi0gKglDb3B5cmlnaHQgMjAwMyAoYykgTGluZW8gU29sdXRpb25zLEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWF0dCBGbGVtaW5nCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTI0LDQ3ICsyMSw2NyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcndsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAotI2RlZmluZSBOUl9QTUJfRU5UUklFUwkxNgorc3RydWN0IHBtYl9lbnRyeTsKIAotc3RhdGljIHZvaWQgX19wbWJfdW5tYXAoc3RydWN0IHBtYl9lbnRyeSAqKTsKK3N0cnVjdCBwbWJfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgdnBuOworCXVuc2lnbmVkIGxvbmcgcHBuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBzaXplOwogCisJc3BpbmxvY2tfdCBsb2NrOworCisJLyoKKwkgKiAwIC4uIE5SX1BNQl9FTlRSSUVTIGZvciBzcGVjaWZpYyBlbnRyeSBzZWxlY3Rpb24sIG9yCisJICogUE1CX05PX0VOVFJZIHRvIHNlYXJjaCBmb3IgYSBmcmVlIG9uZQorCSAqLworCWludCBlbnRyeTsKKworCS8qIEFkamFjZW50IGVudHJ5IGxpbmsgZm9yIGNvbnRpZ3VvdXMgbXVsdGktZW50cnkgbWFwcGluZ3MgKi8KKwlzdHJ1Y3QgcG1iX2VudHJ5ICpsaW5rOworfTsKKworc3RhdGljIHZvaWQgcG1iX3VubWFwX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKiwgaW50IGRlcHRoKTsKKworc3RhdGljIERFRklORV9SV0xPQ0socG1iX3J3bG9jayk7CiBzdGF0aWMgc3RydWN0IHBtYl9lbnRyeSBwbWJfZW50cnlfbGlzdFtOUl9QTUJfRU5UUklFU107Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwbWJfbWFwOworc3RhdGljIERFQ0xBUkVfQklUTUFQKHBtYl9tYXAsIE5SX1BNQl9FTlRSSUVTKTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1rX3BtYl9lbnRyeSh1bnNpZ25lZCBpbnQgZW50cnkpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2VudHJ5KHVuc2lnbmVkIGludCBlbnRyeSkKIHsKIAlyZXR1cm4gKGVudHJ5ICYgUE1CX0VfTUFTSykgPDwgUE1CX0VfU0hJRlQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBta19wbWJfYWRkcih1bnNpZ25lZCBpbnQgZW50cnkpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2FkZHIodW5zaWduZWQgaW50IGVudHJ5KQogewogCXJldHVybiBta19wbWJfZW50cnkoZW50cnkpIHwgUE1CX0FERFI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBta19wbWJfZGF0YSh1bnNpZ25lZCBpbnQgZW50cnkpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2RhdGEodW5zaWduZWQgaW50IGVudHJ5KQogewogCXJldHVybiBta19wbWJfZW50cnkoZW50cnkpIHwgUE1CX0RBVEE7CiB9CiAKIHN0YXRpYyBpbnQgcG1iX2FsbG9jX2VudHJ5KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHBvczsKKwlpbnQgcG9zOwogCi1yZXBlYXQ6Ci0JcG9zID0gZmluZF9maXJzdF96ZXJvX2JpdCgmcG1iX21hcCwgTlJfUE1CX0VOVFJJRVMpOwotCi0JaWYgKHVubGlrZWx5KHBvcyA+IE5SX1BNQl9FTlRSSUVTKSkKLQkJcmV0dXJuIC1FTk9TUEM7Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChwb3MsICZwbWJfbWFwKSkKLQkJZ290byByZXBlYXQ7CisJcG9zID0gZmluZF9maXJzdF96ZXJvX2JpdChwbWJfbWFwLCBOUl9QTUJfRU5UUklFUyk7CisJaWYgKHBvcyA+PSAwICYmIHBvcyA8IE5SX1BNQl9FTlRSSUVTKQorCQlfX3NldF9iaXQocG9zLCBwbWJfbWFwKTsKKwllbHNlCisJCXBvcyA9IC1FTk9TUEM7CiAKIAlyZXR1cm4gcG9zOwogfQpAQCAtNzMsMjEgKzkwLDM0IEBACiAJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IGVudHJ5KQogewogCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl2b2lkICpyZXQgPSBOVUxMOwogCWludCBwb3M7CiAKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnBtYl9yd2xvY2ssIGlycWZsYWdzKTsKKwogCWlmIChlbnRyeSA9PSBQTUJfTk9fRU5UUlkpIHsKIAkJcG9zID0gcG1iX2FsbG9jX2VudHJ5KCk7Ci0JCWlmIChwb3MgPCAwKQotCQkJcmV0dXJuIEVSUl9QVFIocG9zKTsKKwkJaWYgKHVubGlrZWx5KHBvcyA8IDApKSB7CisJCQlyZXQgPSBFUlJfUFRSKHBvcyk7CisJCQlnb3RvIG91dDsKKwkJfQogCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2JpdChlbnRyeSwgJnBtYl9tYXApKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CisJCWlmIChfX3Rlc3RfYW5kX3NldF9iaXQoZW50cnksIHBtYl9tYXApKSB7CisJCQlyZXQgPSBFUlJfUFRSKC1FTk9TUEMpOworCQkJZ290byBvdXQ7CisJCX0KKwogCQlwb3MgPSBlbnRyeTsKIAl9CiAKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcG1iX3J3bG9jaywgaXJxZmxhZ3MpOworCiAJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtwb3NdOwotCWlmICghcG1iZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltZW1zZXQocG1iZSwgMCwgc2l6ZW9mKHN0cnVjdCBwbWJfZW50cnkpKTsKKworCXNwaW5fbG9ja19pbml0KCZwbWJlLT5sb2NrKTsKIAogCXBtYmUtPnZwbgk9IHZwbjsKIAlwbWJlLT5wcG4JPSBwcG47CkBAIC05NSwxMDEgKzEyNSwxMTMgQEAKIAlwbWJlLT5lbnRyeQk9IHBvczsKIAogCXJldHVybiBwbWJlOworCitvdXQ6CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnBtYl9yd2xvY2ssIGlycWZsYWdzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBwbWJfZnJlZShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQogewotCWludCBwb3MgPSBwbWJlLT5lbnRyeTsKKwlfX2NsZWFyX2JpdChwbWJlLT5lbnRyeSwgcG1iX21hcCk7CiAKLQlwbWJlLT52cG4JPSAwOwotCXBtYmUtPnBwbgk9IDA7Ci0JcG1iZS0+ZmxhZ3MJPSAwOwotCXBtYmUtPmVudHJ5CT0gMDsKLQotCWNsZWFyX2JpdChwb3MsICZwbWJfbWFwKTsKKwlwbWJlLT5lbnRyeQk9IFBNQl9OT19FTlRSWTsKKwlwbWJlLT5saW5rCT0gTlVMTDsKIH0KIAogLyoKLSAqIE11c3QgYmUgaW4gUDIgZm9yIF9fc2V0X3BtYl9lbnRyeSgpCisgKiBFbnN1cmUgdGhhdCB0aGUgUE1CIGVudHJpZXMgbWF0Y2ggb3VyIGNhY2hlIGNvbmZpZ3VyYXRpb24uCisgKgorICogV2hlbiB3ZSBhcmUgaW4gMzItYml0IGFkZHJlc3MgZXh0ZW5kZWQgbW9kZSwgQ0NSLkNCIGJlY29tZXMKKyAqIGludmFsaWQsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB0byBtYW51YWxseSBhZGp1c3QgY2FjaGVhYmxlCisgKiB0cmFuc2xhdGlvbnMuCiAgKi8KLXN0YXRpYyB2b2lkIF9fc2V0X3BtYl9lbnRyeSh1bnNpZ25lZCBsb25nIHZwbiwgdW5zaWduZWQgbG9uZyBwcG4sCi0JCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBvcykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwbWJfY2FjaGVfZmxhZ3Modm9pZCkKIHsKLQljdHJsX291dGwodnBuIHwgUE1CX1YsIG1rX3BtYl9hZGRyKHBvcykpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0jaWZkZWYgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSAotCS8qCi0JICogV2hlbiB3ZSBhcmUgaW4gMzItYml0IGFkZHJlc3MgZXh0ZW5kZWQgbW9kZSwgQ0NSLkNCIGJlY29tZXMKLQkgKiBpbnZhbGlkLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gbWFudWFsbHkgYWRqdXN0IGNhY2hlYWJsZQotCSAqIHRyYW5zbGF0aW9ucy4KLQkgKi8KLQlpZiAobGlrZWx5KGZsYWdzICYgUE1CX0MpKQotCQlmbGFncyB8PSBQTUJfV1Q7CisjaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIKQorCWZsYWdzIHw9IFBNQl9DIHwgUE1CX1dUIHwgUE1CX1VCOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVCQUNLKQorCWZsYWdzIHw9IFBNQl9DOwogI2VuZGlmCiAKLQljdHJsX291dGwocHBuIHwgZmxhZ3MgfCBQTUJfViwgbWtfcG1iX2RhdGEocG9zKSk7CisJcmV0dXJuIGZsYWdzOwogfQogCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBzZXRfcG1iX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCisvKgorICogTXVzdCBiZSBydW4gdW5jYWNoZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9fc2V0X3BtYl9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQogewotCWp1bXBfdG9fdW5jYWNoZWQoKTsKLQlfX3NldF9wbWJfZW50cnkocG1iZS0+dnBuLCBwbWJlLT5wcG4sIHBtYmUtPmZsYWdzLCBwbWJlLT5lbnRyeSk7Ci0JYmFja190b19jYWNoZWQoKTsKKwl3cml0ZWxfdW5jYWNoZWQocG1iZS0+dnBuIHwgUE1CX1YsIG1rX3BtYl9hZGRyKHBtYmUtPmVudHJ5KSk7CisJd3JpdGVsX3VuY2FjaGVkKHBtYmUtPnBwbiB8IHBtYmUtPmZsYWdzIHwgUE1CX1YsCisJCQlta19wbWJfZGF0YShwbWJlLT5lbnRyeSkpOwogfQogCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBjbGVhcl9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3N0YXRpYyB2b2lkIF9fY2xlYXJfcG1iX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCiB7Ci0JdW5zaWduZWQgaW50IGVudHJ5ID0gcG1iZS0+ZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFkZHJfdmFsLCBkYXRhX3ZhbDsKIAotCWlmICh1bmxpa2VseShlbnRyeSA+PSBOUl9QTUJfRU5UUklFUykpCi0JCXJldHVybjsKKwlhZGRyID0gbWtfcG1iX2FkZHIocG1iZS0+ZW50cnkpOworCWRhdGEgPSBta19wbWJfZGF0YShwbWJlLT5lbnRyeSk7CiAKLQlqdW1wX3RvX3VuY2FjaGVkKCk7CisJYWRkcl92YWwgPSBfX3Jhd19yZWFkbChhZGRyKTsKKwlkYXRhX3ZhbCA9IF9fcmF3X3JlYWRsKGRhdGEpOwogCiAJLyogQ2xlYXIgVi1iaXQgKi8KLQlhZGRyID0gbWtfcG1iX2FkZHIoZW50cnkpOwotCWN0cmxfb3V0bChjdHJsX2lubChhZGRyKSAmIH5QTUJfViwgYWRkcik7Ci0KLQlhZGRyID0gbWtfcG1iX2RhdGEoZW50cnkpOwotCWN0cmxfb3V0bChjdHJsX2lubChhZGRyKSAmIH5QTUJfViwgYWRkcik7Ci0KLQliYWNrX3RvX2NhY2hlZCgpOworCXdyaXRlbF91bmNhY2hlZChhZGRyX3ZhbCAmIH5QTUJfViwgYWRkcik7CisJd3JpdGVsX3VuY2FjaGVkKGRhdGFfdmFsICYgflBNQl9WLCBkYXRhKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X3BtYl9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG1iZS0+bG9jaywgZmxhZ3MpOworCV9fc2V0X3BtYl9lbnRyeShwbWJlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWJlLT5sb2NrLCBmbGFncyk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAlpbnQgZmxhZzsKIH0gcG1iX3NpemVzW10gPSB7Ci0JeyAuc2l6ZQk9IDB4MjAwMDAwMDAsIC5mbGFnID0gUE1CX1NaXzUxMk0sIH0sCi0JeyAuc2l6ZSA9IDB4MDgwMDAwMDAsIC5mbGFnID0gUE1CX1NaXzEyOE0sIH0sCi0JeyAuc2l6ZSA9IDB4MDQwMDAwMDAsIC5mbGFnID0gUE1CX1NaXzY0TSwgIH0sCi0JeyAuc2l6ZSA9IDB4MDEwMDAwMDAsIC5mbGFnID0gUE1CX1NaXzE2TSwgIH0sCisJeyAuc2l6ZQk9IFNaXzUxMk0sIC5mbGFnID0gUE1CX1NaXzUxMk0sIH0sCisJeyAuc2l6ZSA9IFNaXzEyOE0sIC5mbGFnID0gUE1CX1NaXzEyOE0sIH0sCisJeyAuc2l6ZSA9IFNaXzY0TSwgIC5mbGFnID0gUE1CX1NaXzY0TSwgIH0sCisJeyAuc2l6ZSA9IFNaXzE2TSwgIC5mbGFnID0gUE1CX1NaXzE2TSwgIH0sCiB9OwogCiBsb25nIHBtYl9yZW1hcCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKKwkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogCXN0cnVjdCBwbWJfZW50cnkgKnBtYnAsICpwbWJlOwogCXVuc2lnbmVkIGxvbmcgd2FudGVkOwogCWludCBwbWJfZmxhZ3MsIGk7CiAJbG9uZyBlcnI7CisJdTY0IGZsYWdzOworCisJZmxhZ3MgPSBwZ3Byb3RfdmFsKHByb3QpOworCisJcG1iX2ZsYWdzID0gUE1CX1dUIHwgUE1CX1VCOwogCiAJLyogQ29udmVydCB0eXBpY2FsIHBncHJvdCB2YWx1ZSB0byB0aGUgUE1CIGVxdWl2YWxlbnQgKi8KIAlpZiAoZmxhZ3MgJiBfUEFHRV9DQUNIQUJMRSkgewotCQlpZiAoZmxhZ3MgJiBfUEFHRV9XVCkKLQkJCXBtYl9mbGFncyA9IFBNQl9XVDsKLQkJZWxzZQotCQkJcG1iX2ZsYWdzID0gUE1CX0M7Ci0JfSBlbHNlCi0JCXBtYl9mbGFncyA9IFBNQl9XVCB8IFBNQl9VQjsKKwkJcG1iX2ZsYWdzIHw9IFBNQl9DOworCisJCWlmICgoZmxhZ3MgJiBfUEFHRV9XVCkgPT0gMCkKKwkJCXBtYl9mbGFncyAmPSB+KFBNQl9XVCB8IFBNQl9VQik7CisJfQogCiAJcG1icCA9IE5VTEw7CiAJd2FudGVkID0gc2l6ZTsKIAogYWdhaW46CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAkJaWYgKHNpemUgPCBwbWJfc2l6ZXNbaV0uc2l6ZSkKIAkJCWNvbnRpbnVlOwogCkBAIC0yMDAsMTggKzI0MiwyNSBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzZXRfcG1iX2VudHJ5KHBtYmUpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1iZS0+bG9jaywgZmxhZ3MpOworCisJCV9fc2V0X3BtYl9lbnRyeShwbWJlKTsKIAogCQlwaHlzCSs9IHBtYl9zaXplc1tpXS5zaXplOwogCQl2YWRkcgkrPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKIAkJc2l6ZQktPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKIAorCQlwbWJlLT5zaXplID0gcG1iX3NpemVzW2ldLnNpemU7CisKIAkJLyoKIAkJICogTGluayBhZGphY2VudCBlbnRyaWVzIHRoYXQgc3BhbiBtdWx0aXBsZSBQTUIgZW50cmllcwogCQkgKiBmb3IgZWFzaWVyIHRlYXItZG93bi4KIAkJICovCi0JCWlmIChsaWtlbHkocG1icCkpCisJCWlmIChsaWtlbHkocG1icCkpIHsKKwkJCXNwaW5fbG9jaygmcG1icC0+bG9jayk7CiAJCQlwbWJwLT5saW5rID0gcG1iZTsKKwkJCXNwaW5fdW5sb2NrKCZwbWJwLT5sb2NrKTsKKwkJfQogCiAJCXBtYnAgPSBwbWJlOwogCkBAIC0yMjEsMTYgKzI3MCwxNyBAQAogCQkgKiBwbWJfc2l6ZXNbaV0uc2l6ZSBhZ2Fpbi4KIAkJICovCiAJCWktLTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWJlLT5sb2NrLCBmbGFncyk7CiAJfQogCi0JaWYgKHNpemUgPj0gMHgxMDAwMDAwKQorCWlmIChzaXplID49IFNaXzE2TSkKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiB3YW50ZWQgLSBzaXplOwogCiBvdXQ6Ci0JaWYgKHBtYnApCi0JCV9fcG1iX3VubWFwKHBtYnApOworCXBtYl91bm1hcF9lbnRyeShwbWJwLCBOUl9QTUJfRU5UUklFUyk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjQwLDI0ICsyOTAsNTIgQEAKIAlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlID0gTlVMTDsKIAlpbnQgaTsKIAorCXJlYWRfbG9jaygmcG1iX3J3bG9jayk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfZW50cnlfbGlzdCk7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgJnBtYl9tYXApKSB7CisJCWlmICh0ZXN0X2JpdChpLCBwbWJfbWFwKSkgewogCQkJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtpXTsKIAkJCWlmIChwbWJlLT52cG4gPT0gYWRkcikKIAkJCQlicmVhazsKIAkJfQogCX0KIAotCWlmICh1bmxpa2VseSghcG1iZSkpCi0JCXJldHVybjsKKwlyZWFkX3VubG9jaygmcG1iX3J3bG9jayk7CiAKLQlfX3BtYl91bm1hcChwbWJlKTsKKwlwbWJfdW5tYXBfZW50cnkocG1iZSwgTlJfUE1CX0VOVFJJRVMpOwogfQogCi1zdGF0aWMgdm9pZCBfX3BtYl91bm1hcChzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQorc3RhdGljIGJvb2wgcG1iX2Nhbl9tZXJnZShzdHJ1Y3QgcG1iX2VudHJ5ICphLCBzdHJ1Y3QgcG1iX2VudHJ5ICpiKQogewotCUJVR19PTighdGVzdF9iaXQocG1iZS0+ZW50cnksICZwbWJfbWFwKSk7CisJcmV0dXJuIChiLT52cG4gPT0gKGEtPnZwbiArIGEtPnNpemUpKSAmJgorCSAgICAgICAoYi0+cHBuID09IChhLT5wcG4gKyBhLT5zaXplKSkgJiYKKwkgICAgICAgKGItPmZsYWdzID09IGEtPmZsYWdzKTsKK30KIAorc3RhdGljIGJvb2wgcG1iX3NpemVfdmFsaWQodW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKQorCQlpZiAocG1iX3NpemVzW2ldLnNpemUgPT0gc2l6ZSkKKwkJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IHBtYl9zaXplX3RvX2ZsYWdzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykKKwkJaWYgKHBtYl9zaXplc1tpXS5zaXplID09IHNpemUpCisJCQlyZXR1cm4gcG1iX3NpemVzW2ldLmZsYWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19wbWJfdW5tYXBfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSwgaW50IGRlcHRoKQorewogCWRvIHsKIAkJc3RydWN0IHBtYl9lbnRyeSAqcG1ibGluayA9IHBtYmU7CiAKQEAgLTI2OCwxMDIgKzM0NiwzMTIgQEAKIAkJICogdGhpcyBlbnRyeSBpbiBwbWJfYWxsb2MoKSAoZXZlbiBpZiB3ZSBoYXZlbid0IGZpbGxlZAogCQkgKiBpdCB5ZXQpLgogCQkgKgotCQkgKiBUaGVyZWZvcmUsIGNhbGxpbmcgY2xlYXJfcG1iX2VudHJ5KCkgaXMgc2FmZSBhcyBubworCQkgKiBUaGVyZWZvcmUsIGNhbGxpbmcgX19jbGVhcl9wbWJfZW50cnkoKSBpcyBzYWZlIGFzIG5vCiAJCSAqIG90aGVyIG1hcHBpbmcgY2FuIGJlIHVzaW5nIHRoYXQgc2xvdC4KIAkJICovCi0JCWNsZWFyX3BtYl9lbnRyeShwbWJlKTsKKwkJX19jbGVhcl9wbWJfZW50cnkocG1iZSk7CiAKIAkJcG1iZSA9IHBtYmxpbmstPmxpbms7CiAKIAkJcG1iX2ZyZWUocG1ibGluayk7Ci0JfSB3aGlsZSAocG1iZSk7CisJfSB3aGlsZSAocG1iZSAmJiAtLWRlcHRoKTsKIH0KIAotI2lmZGVmIENPTkZJR19QTUIKLWludCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBwbWJfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgcG1iX3VubWFwX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUsIGludCBkZXB0aCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQlsb25nIHNpemUsIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JanVtcF90b191bmNhY2hlZCgpOworCWlmICh1bmxpa2VseSghcG1iZSkpCisJCXJldHVybjsKIAotCS8qCi0JICogSW5zZXJ0IFBNQiBlbnRyaWVzIGZvciB0aGUgUDEgYW5kIFAyIGFyZWFzIHNvIHRoYXQsIGFmdGVyCi0JICogd2UndmUgc3dpdGNoZWQgdGhlIE1NVSB0byAzMi1iaXQgbW9kZSwgdGhlIHNlbWFudGljcyBvZiBQMQotCSAqIGFuZCBQMiBhcmUgdGhlIHNhbWUgYXMgaW4gMjktYml0IG1vZGUsIGUuZy4KLQkgKgotCSAqCVAxIC0gcHJvdmlkZXMgYSBjYWNoZWQgd2luZG93IG9udG8gcGh5c2ljYWwgbWVtb3J5Ci0JICoJUDIgLSBwcm92aWRlcyBhbiB1bmNhY2hlZCB3aW5kb3cgb250byBwaHlzaWNhbCBtZW1vcnkKLQkgKi8KLQlzaXplID0gX19NRU1PUllfU1RBUlQgKyBfX01FTU9SWV9TSVpFOwotCi0JcmV0ID0gcG1iX3JlbWFwKFAxU0VHLCAweDAwMDAwMDAwLCBzaXplLCBQTUJfQyk7Ci0JQlVHX09OKHJldCAhPSBzaXplKTsKLQotCXJldCA9IHBtYl9yZW1hcChQMlNFRywgMHgwMDAwMDAwMCwgc2l6ZSwgUE1CX1dUIHwgUE1CX1VCKTsKLQlCVUdfT04ocmV0ICE9IHNpemUpOwotCi0JY3RybF9vdXRsKDAsIFBNQl9JUk1DUik7Ci0KLQkvKiBQTUIuU0UgYW5kIFVCWzddICovCi0JY3RybF9vdXRsKFBBU0NSX1NFIHwgKDEgPDwgNyksIFBNQl9QQVNDUik7Ci0KLQkvKiBGbHVzaCBvdXQgdGhlIFRMQiAqLwotCWkgPSAgY3RybF9pbmwoTU1VQ1IpOwotCWkgfD0gTU1VQ1JfVEk7Ci0JY3RybF9vdXRsKGksIE1NVUNSKTsKLQotCWJhY2tfdG9fY2FjaGVkKCk7Ci0KLQlyZXR1cm4gMDsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnBtYl9yd2xvY2ssIGZsYWdzKTsKKwlfX3BtYl91bm1hcF9lbnRyeShwbWJlLCBkZXB0aCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnBtYl9yd2xvY2ssIGZsYWdzKTsKIH0KLSNlbHNlCi1pbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgcG1iX2luaXQodm9pZCkKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgcG1iX3Bwbl9pbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBwbikKK3sKKwlyZXR1cm4gcHBuID49IF9fcGEobWVtb3J5X3N0YXJ0KSAmJiBwcG4gPCBfX3BhKG1lbW9yeV9lbmQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcG1iX25vdGlmeSh2b2lkKQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YTsKIAotCWp1bXBfdG9fdW5jYWNoZWQoKTsKKwlwcl9pbmZvKCJQTUI6IGJvb3QgbWFwcGluZ3M6XG4iKTsKIAotCWZvciAoaSA9IDA7IGkgPCBQTUJfRU5UUllfTUFYOyBpKyspIHsKKwlyZWFkX2xvY2soJnBtYl9yd2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX2VudHJ5X2xpc3QpOyBpKyspIHsKIAkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKLQkJdW5zaWduZWQgbG9uZyB2cG4sIHBwbiwgZmxhZ3M7CiAKLQkJYWRkciA9IFBNQl9EQVRBICsgKGkgPDwgUE1CX0VfU0hJRlQpOwotCQlkYXRhID0gY3RybF9pbmwoYWRkcik7Ci0JCWlmICghKGRhdGEgJiBQTUJfVikpCisJCWlmICghdGVzdF9iaXQoaSwgcG1iX21hcCkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZGF0YSAmIFBNQl9DKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIKQotCQkJZGF0YSB8PSBQTUJfV1Q7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURUJBQ0spCi0JCQlkYXRhICY9IH5QTUJfV1Q7Ci0jZWxzZQotCQkJZGF0YSAmPSB+KFBNQl9DIHwgUE1CX1dUKTsKLSNlbmRpZgotCQl9Ci0JCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwkJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtpXTsKIAotCQlwcG4gPSBkYXRhICYgUE1CX1BGTl9NQVNLOwotCi0JCWZsYWdzID0gZGF0YSAmIChQTUJfQyB8IFBNQl9XVCB8IFBNQl9VQik7Ci0JCWZsYWdzIHw9IGRhdGEgJiBQTUJfU1pfTUFTSzsKLQotCQlhZGRyID0gUE1CX0FERFIgKyAoaSA8PCBQTUJfRV9TSElGVCk7Ci0JCWRhdGEgPSBjdHJsX2lubChhZGRyKTsKLQotCQl2cG4gPSBkYXRhICYgUE1CX1BGTl9NQVNLOwotCi0JCXBtYmUgPSBwbWJfYWxsb2ModnBuLCBwcG4sIGZsYWdzLCBpKTsKLQkJV0FSTl9PTihJU19FUlIocG1iZSkpOworCQlwcl9pbmZvKCIgICAgICAgMHglMDhseCAtPiAweCUwOGx4IFsgJTRsZE1CICUyc2NhY2hlZCBdXG4iLAorCQkJcG1iZS0+dnBuID4+IFBBR0VfU0hJRlQsIHBtYmUtPnBwbiA+PiBQQUdFX1NISUZULAorCQkJcG1iZS0+c2l6ZSA+PiAyMCwgKHBtYmUtPmZsYWdzICYgUE1CX0MpID8gIiIgOiAidW4iKTsKIAl9CiAKLQliYWNrX3RvX2NhY2hlZCgpOwotCi0JcmV0dXJuIDA7CisJcmVhZF91bmxvY2soJnBtYl9yd2xvY2spOwogfQotI2VuZGlmIC8qIENPTkZJR19QTUIgKi8KKworLyoKKyAqIFN5bmMgb3VyIHNvZnR3YXJlIGNvcHkgb2YgdGhlIFBNQiBtYXBwaW5ncyB3aXRoIHRob3NlIGluIGhhcmR3YXJlLiBUaGUKKyAqIG1hcHBpbmdzIGluIHRoZSBoYXJkd2FyZSBQTUIgd2VyZSBlaXRoZXIgc2V0IHVwIGJ5IHRoZSBib290bG9hZGVyIG9yCisgKiB2ZXJ5IGVhcmx5IG9uIGJ5IHRoZSBrZXJuZWwuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwbWJfc3luY2hyb25pemUodm9pZCkKK3sKKwlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJwID0gTlVMTDsKKwlpbnQgaSwgajsKKworCS8qCisJICogUnVuIHRocm91Z2ggdGhlIGluaXRpYWwgYm9vdCBtYXBwaW5ncywgbG9nIHRoZSBlc3RhYmxpc2hlZAorCSAqIG9uZXMsIGFuZCBibG93IGF3YXkgYW55dGhpbmcgdGhhdCBmYWxscyBvdXRzaWRlIG9mIHRoZSB2YWxpZAorCSAqIFBQTiByYW5nZS4gU3BlY2lmaWNhbGx5LCB3ZSBvbmx5IGNhcmUgYWJvdXQgZXhpc3RpbmcgbWFwcGluZ3MKKwkgKiB0aGF0IGltcGFjdCB0aGUgY2FjaGVkL3VuY2FjaGVkIHNlY3Rpb25zLgorCSAqCisJICogTm90ZSB0aGF0IHRvdWNoaW5nIHRoZXNlIGNhbiBiZSBhIGJpdCBvZiBhIG1pbmVmaWVsZDsgdGhlIGJvb3QKKwkgKiBsb2FkZXIgY2FuIGVzdGFibGlzaCBtdWx0aS1wYWdlIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgY2FjaGluZworCSAqIGF0dHJpYnV0ZXMsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgYXJlbid0IG1vZGlmeWluZyBhCisJICogbWFwcGluZyB0aGF0IHdlJ3JlIHByZXNlbnRseSBleGVjdXRpbmcgZnJvbSwgb3IgbWF5IGV4ZWN1dGUKKwkgKiBmcm9tIGluIHRoZSBjYXNlIG9mIHN0cmFkZGxpbmcgcGFnZSBib3VuZGFyaWVzLgorCSAqCisJICogSW4gdGhlIGZ1dHVyZSB3ZSB3aWxsIGhhdmUgdG8gdGlkeSB1cCBhZnRlciB0aGUgYm9vdCBsb2FkZXIgYnkKKwkgKiBqdW1waW5nIGJldHdlZW4gdGhlIGNhY2hlZCBhbmQgdW5jYWNoZWQgbWFwcGluZ3MgYW5kIHRlYXJpbmcKKwkgKiBkb3duIGFsdGVybmF0aW5nIG1hcHBpbmdzIHdoaWxlIGV4ZWN1dGluZyBmcm9tIHRoZSBvdGhlci4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfUE1CX0VOVFJJRVM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CisJCXVuc2lnbmVkIGxvbmcgYWRkcl92YWwsIGRhdGFfdmFsOworCQl1bnNpZ25lZCBsb25nIHBwbiwgdnBuLCBmbGFnczsKKwkJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwkJdW5zaWduZWQgaW50IHNpemU7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisKKwkJYWRkciA9IG1rX3BtYl9hZGRyKGkpOworCQlkYXRhID0gbWtfcG1iX2RhdGEoaSk7CisKKwkJYWRkcl92YWwgPSBfX3Jhd19yZWFkbChhZGRyKTsKKwkJZGF0YV92YWwgPSBfX3Jhd19yZWFkbChkYXRhKTsKKworCQkvKgorCQkgKiBTa2lwIG92ZXIgYW55IGJvZ3VzIGVudHJpZXMKKwkJICovCisJCWlmICghKGRhdGFfdmFsICYgUE1CX1YpIHx8ICEoYWRkcl92YWwgJiBQTUJfVikpCisJCQljb250aW51ZTsKKworCQlwcG4gPSBkYXRhX3ZhbCAmIFBNQl9QRk5fTUFTSzsKKwkJdnBuID0gYWRkcl92YWwgJiBQTUJfUEZOX01BU0s7CisKKwkJLyoKKwkJICogT25seSBwcmVzZXJ2ZSBpbi1yYW5nZSBtYXBwaW5ncy4KKwkJICovCisJCWlmICghcG1iX3Bwbl9pbl9yYW5nZShwcG4pKSB7CisJCQkvKgorCQkJICogSW52YWxpZGF0ZSBhbnl0aGluZyBvdXQgb2YgYm91bmRzLgorCQkJICovCisJCQl3cml0ZWxfdW5jYWNoZWQoYWRkcl92YWwgJiB+UE1CX1YsIGFkZHIpOworCQkJd3JpdGVsX3VuY2FjaGVkKGRhdGFfdmFsICYgflBNQl9WLCBkYXRhKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVXBkYXRlIHRoZSBjYWNoaW5nIGF0dHJpYnV0ZXMgaWYgbmVjZXNzYXJ5CisJCSAqLworCQlpZiAoZGF0YV92YWwgJiBQTUJfQykgeworCQkJZGF0YV92YWwgJj0gflBNQl9DQUNIRV9NQVNLOworCQkJZGF0YV92YWwgfD0gcG1iX2NhY2hlX2ZsYWdzKCk7CisKKwkJCXdyaXRlbF91bmNhY2hlZChkYXRhX3ZhbCwgZGF0YSk7CisJCX0KKworCQlzaXplID0gZGF0YV92YWwgJiBQTUJfU1pfTUFTSzsKKwkJZmxhZ3MgPSBzaXplIHwgKGRhdGFfdmFsICYgUE1CX0NBQ0hFX01BU0spOworCisJCXBtYmUgPSBwbWJfYWxsb2ModnBuLCBwcG4sIGZsYWdzLCBpKTsKKwkJaWYgKElTX0VSUihwbWJlKSkgeworCQkJV0FSTl9PTl9PTkNFKDEpOworCQkJY29udGludWU7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1iZS0+bG9jaywgaXJxZmxhZ3MpOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGorKykKKwkJCWlmIChwbWJfc2l6ZXNbal0uZmxhZyA9PSBzaXplKQorCQkJCXBtYmUtPnNpemUgPSBwbWJfc2l6ZXNbal0uc2l6ZTsKKworCQlpZiAocG1icCkgeworCQkJc3Bpbl9sb2NrKCZwbWJwLT5sb2NrKTsKKworCQkJLyoKKwkJCSAqIENvbXBhcmUgdGhlIHByZXZpb3VzIGVudHJ5IGFnYWluc3QgdGhlIGN1cnJlbnQgb25lIHRvCisJCQkgKiBzZWUgaWYgdGhlIGVudHJpZXMgc3BhbiBhIGNvbnRpZ3VvdXMgbWFwcGluZy4gSWYgc28sCisJCQkgKiBzZXR1cCB0aGUgZW50cnkgbGlua3MgYWNjb3JkaW5nbHkuIENvbXBvdW5kIG1hcHBpbmdzCisJCQkgKiBhcmUgbGF0ZXIgY29hbGVzY2VkLgorCQkJICovCisJCQlpZiAocG1iX2Nhbl9tZXJnZShwbWJwLCBwbWJlKSkKKwkJCQlwbWJwLT5saW5rID0gcG1iZTsKKworCQkJc3Bpbl91bmxvY2soJnBtYnAtPmxvY2spOworCQl9CisKKwkJcG1icCA9IHBtYmU7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1iZS0+bG9jaywgaXJxZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgX19pbml0IHBtYl9tZXJnZShzdHJ1Y3QgcG1iX2VudHJ5ICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgc3BhbiwgbmV3c2l6ZTsKKwlzdHJ1Y3QgcG1iX2VudHJ5ICp0YWlsOworCWludCBpID0gMSwgZGVwdGggPSAwOworCisJc3BhbiA9IG5ld3NpemUgPSBoZWFkLT5zaXplOworCisJdGFpbCA9IGhlYWQtPmxpbms7CisJd2hpbGUgKHRhaWwpIHsKKwkJc3BhbiArPSB0YWlsLT5zaXplOworCisJCWlmIChwbWJfc2l6ZV92YWxpZChzcGFuKSkgeworCQkJbmV3c2l6ZSA9IHNwYW47CisJCQlkZXB0aCA9IGk7CisJCX0KKworCQkvKiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIGxpbmUuLiAqLworCQlpZiAoIXRhaWwtPmxpbmspCisJCQlicmVhazsKKworCQl0YWlsID0gdGFpbC0+bGluazsKKwkJaSsrOworCX0KKworCS8qCisJICogVGhlIG1lcmdlZCBwYWdlIHNpemUgbXVzdCBiZSB2YWxpZC4KKwkgKi8KKwlpZiAoIXBtYl9zaXplX3ZhbGlkKG5ld3NpemUpKQorCQlyZXR1cm47CisKKwloZWFkLT5mbGFncyAmPSB+UE1CX1NaX01BU0s7CisJaGVhZC0+ZmxhZ3MgfD0gcG1iX3NpemVfdG9fZmxhZ3MobmV3c2l6ZSk7CisKKwloZWFkLT5zaXplID0gbmV3c2l6ZTsKKworCV9fcG1iX3VubWFwX2VudHJ5KGhlYWQtPmxpbmssIGRlcHRoKTsKKwlfX3NldF9wbWJfZW50cnkoaGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwbWJfY29hbGVzY2Uodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwbWJfcndsb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfZW50cnlfbGlzdCk7IGkrKykgeworCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCisJCWlmICghdGVzdF9iaXQoaSwgcG1iX21hcCkpCisJCQljb250aW51ZTsKKworCQlwbWJlID0gJnBtYl9lbnRyeV9saXN0W2ldOworCisJCS8qCisJCSAqIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBjb21wb3VuZCBtYXBwaW5ncworCQkgKi8KKwkJaWYgKCFwbWJlLT5saW5rKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTm90aGluZyB0byBkbyBpZiBpdCBhbHJlYWR5IHVzZXMgdGhlIGxhcmdlc3QgcG9zc2libGUKKwkJICogcGFnZSBzaXplLgorCQkgKi8KKwkJaWYgKHBtYmUtPnNpemUgPT0gU1pfNTEyTSkKKwkJCWNvbnRpbnVlOworCisJCXBtYl9tZXJnZShwbWJlKTsKKwl9CisKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcG1iX3J3bG9jaywgZmxhZ3MpOworfQorCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKK3N0YXRpYyB2b2lkIF9faW5pdCBwbWJfcmVzaXplKHZvaWQpCit7CisJaW50IGk7CisKKwkvKgorCSAqIElmIHRoZSB1bmNhY2hlZCBtYXBwaW5nIHdhcyBjb25zdHJ1Y3RlZCBieSB0aGUga2VybmVsLCBpdCB3aWxsCisJICogYWxyZWFkeSBiZSBhIHJlYXNvbmFibGUgc2l6ZS4KKwkgKi8KKwlpZiAodW5jYWNoZWRfc2l6ZSA9PSBTWl8xNk0pCisJCXJldHVybjsKKworCXJlYWRfbG9jaygmcG1iX3J3bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfZW50cnlfbGlzdCk7IGkrKykgeworCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWlmICghdGVzdF9iaXQoaSwgcG1iX21hcCkpCisJCQljb250aW51ZTsKKworCQlwbWJlID0gJnBtYl9lbnRyeV9saXN0W2ldOworCisJCWlmIChwbWJlLT52cG4gIT0gdW5jYWNoZWRfc3RhcnQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGb3VuZCBpdCwgbm93IHJlc2l6ZSBpdC4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwbWJlLT5sb2NrLCBmbGFncyk7CisKKwkJcG1iZS0+c2l6ZSA9IFNaXzE2TTsKKwkJcG1iZS0+ZmxhZ3MgJj0gflBNQl9TWl9NQVNLOworCQlwbWJlLT5mbGFncyB8PSBwbWJfc2l6ZV90b19mbGFncyhwbWJlLT5zaXplKTsKKworCQl1bmNhY2hlZF9yZXNpemUocG1iZS0+c2l6ZSk7CisKKwkJX19zZXRfcG1iX2VudHJ5KHBtYmUpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZWFkX2xvY2soJnBtYl9yd2xvY2spOworfQorI2VuZGlmCisKK3ZvaWQgX19pbml0IHBtYl9pbml0KHZvaWQpCit7CisJLyogU3luY2hyb25pemUgc29mdHdhcmUgc3RhdGUgKi8KKwlwbWJfc3luY2hyb25pemUoKTsKKworCS8qIEF0dGVtcHQgdG8gY29tYmluZSBjb21wb3VuZCBtYXBwaW5ncyAqLworCXBtYl9jb2FsZXNjZSgpOworCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKwkvKiBSZXNpemUgaW5pdGlhbCBtYXBwaW5ncywgaWYgbmVjZXNzYXJ5ICovCisJcG1iX3Jlc2l6ZSgpOworI2VuZGlmCisKKwkvKiBMb2cgdGhlbSAqLworCXBtYl9ub3RpZnkoKTsKKworCXdyaXRlbF91bmNhY2hlZCgwLCBQTUJfSVJNQ1IpOworCisJLyogRmx1c2ggb3V0IHRoZSBUTEIgKi8KKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoTU1VQ1IpIHwgTU1VQ1JfVEksIE1NVUNSKTsKKwljdHJsX2JhcnJpZXIoKTsKK30KKworYm9vbCBfX2luXzI5Yml0X21vZGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIChfX3Jhd19yZWFkbChQTUJfUEFTQ1IpICYgUEFTQ1JfU0UpID09IDA7Cit9CiAKIHN0YXRpYyBpbnQgcG1iX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcikKIHsKQEAgLTM3OCw4ICs2NjYsOCBAQAogCQl1bnNpZ25lZCBpbnQgc2l6ZTsKIAkJY2hhciAqc3pfc3RyID0gTlVMTDsKIAotCQlhZGRyID0gY3RybF9pbmwobWtfcG1iX2FkZHIoaSkpOwotCQlkYXRhID0gY3RybF9pbmwobWtfcG1iX2RhdGEoaSkpOworCQlhZGRyID0gX19yYXdfcmVhZGwobWtfcG1iX2FkZHIoaSkpOworCQlkYXRhID0gX19yYXdfcmVhZGwobWtfcG1iX2RhdGEoaSkpOwogCiAJCXNpemUgPSBkYXRhICYgUE1CX1NaX01BU0s7CiAJCXN6X3N0ciA9IChzaXplID09IFBNQl9TWl8xNk0pICA/ICIgMTZNQiI6CkBAIC00MzcsMTQgKzcyNSwyMSBAQAogCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTiAmJgogCSAgICBwcmV2X3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgewogCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCisJCXJlYWRfbG9jaygmcG1iX3J3bG9jayk7CisKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX2VudHJ5X2xpc3QpOyBpKyspIHsKLQkJCWlmICh0ZXN0X2JpdChpLCAmcG1iX21hcCkpIHsKKwkJCWlmICh0ZXN0X2JpdChpLCBwbWJfbWFwKSkgewogCQkJCXBtYmUgPSAmcG1iX2VudHJ5X2xpc3RbaV07CiAJCQkJc2V0X3BtYl9lbnRyeShwbWJlKTsKIAkJCX0KIAkJfQorCisJCXJlYWRfdW5sb2NrKCZwbWJfcndsb2NrKTsKIAl9CisKIAlwcmV2X3N0YXRlID0gc3RhdGU7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYyLDYgKzc1Nyw1IEBACiB7CiAJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsICZwbWJfc3lzZGV2X2RyaXZlcik7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbChwbWJfc3lzZGV2X2luaXQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1wdGVhZXguYyBiL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCmluZGV4IDQwOWI3YzIuLjMyZGM2NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCkBAIC02OCw4ICs2OCw3IEBACiAgKiBpbiBleHRlbmRlZCBtb2RlLCB0aGUgbGVnYWN5IDgtYml0IEFTSUQgZmllbGQgaW4gYWRkcmVzcyBhcnJheSAxIGhhcwogICogdW5kZWZpbmVkIGJlaGF2aW91ci4KICAqLwotdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwKLQkJCQkJCSB1bnNpZ25lZCBsb25nIHBhZ2UpCit2b2lkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhc2lkLCB1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CiAJanVtcF90b191bmNhY2hlZCgpOwogCV9fcmF3X3dyaXRlbChwYWdlLCBNTVVfVVRMQl9BRERSRVNTX0FSUkFZIHwgTU1VX1BBR0VfQVNTT0NfQklUKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXNoMy5jIGIvYXJjaC9zaC9tbS90bGItc2gzLmMKaW5kZXggYWNlOGU2ZC4uNGY1ZjdjYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGItc2gzLmMKKysrIGIvYXJjaC9zaC9tbS90bGItc2gzLmMKQEAgLTQxLDE0ICs0MSwxNCBAQAogCiAJLyogU2V0IFBURUggcmVnaXN0ZXIgKi8KIAl2cG4gPSAoYWRkcmVzcyAmIE1NVV9WUE5fTUFTSykgfCBnZXRfYXNpZCgpOwotCWN0cmxfb3V0bCh2cG4sIE1NVV9QVEVIKTsKKwlfX3Jhd193cml0ZWwodnBuLCBNTVVfUFRFSCk7CiAKIAlwdGV2YWwgPSBwdGVfdmFsKHB0ZSk7CiAKIAkvKiBTZXQgUFRFTCByZWdpc3RlciAqLwogCXB0ZXZhbCAmPSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOyAvKiBkcm9wIHNvZnR3YXJlIGZsYWdzICovCiAJLyogY29udmVuaWVudGx5LCB3ZSB3YW50IGFsbCB0aGUgc29mdHdhcmUgZmxhZ3MgdG8gYmUgMCBhbnl3YXkgKi8KLQljdHJsX291dGwocHRldmFsLCBNTVVfUFRFTCk7CisJX19yYXdfd3JpdGVsKHB0ZXZhbCwgTU1VX1BURUwpOwogCiAJLyogTG9hZCB0aGUgVExCICovCiAJYXNtIHZvbGF0aWxlKCJsZHRsYiI6IC8qIG5vIG91dHB1dCAqLyA6IC8qIG5vIGlucHV0ICovIDogIm1lbW9yeSIpOwpAQCAtNzUsNSArNzUsNSBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCB3YXlzOyBpKyspCi0JCWN0cmxfb3V0bChkYXRhLCBhZGRyICsgKGkgPDwgOCkpOworCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkciArIChpIDw8IDgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXNoNC5jIGIvYXJjaC9zaC9tbS90bGItc2g0LmMKaW5kZXggOGNmNTUwZS4uY2NhYzc3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGItc2g0LmMKKysrIGIvYXJjaC9zaC9tbS90bGItc2g0LmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogCS8qIFNldCBQVEVIIHJlZ2lzdGVyICovCiAJdnBuID0gKGFkZHJlc3MgJiBNTVVfVlBOX01BU0spIHwgZ2V0X2FzaWQoKTsKLQljdHJsX291dGwodnBuLCBNTVVfUFRFSCk7CisJX19yYXdfd3JpdGVsKHZwbiwgTU1VX1BURUgpOwogCiAJcHRldmFsID0gcHRlLnB0ZV9sb3c7CiAKQEAgLTQxLDEzICs0MSwxMyBAQAogCSAqIHRoZSBwcm90ZWN0aW9uIGJpdHMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgY29tcGF0LW1vZGUgU1oKIAkgKiBhbmQgUFIgYml0cywgd2hpY2ggYXJlIGNsZWFyZWQpIGJlaW5nIHdyaXR0ZW4gb3V0IGluIFBURUwuCiAJICovCi0JY3RybF9vdXRsKHB0ZS5wdGVfaGlnaCwgTU1VX1BURUEpOworCV9fcmF3X3dyaXRlbChwdGUucHRlX2hpZ2gsIE1NVV9QVEVBKTsKICNlbHNlCiAJaWYgKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfUFRFQSkgewogCQkvKiBUaGUgbGFzdCAzIGJpdHMgYW5kIHRoZSBmaXJzdCBvbmUgb2YgcHRldmFsIGNvbnRhaW5zCiAJCSAqIHRoZSBQVEVBIHRpbWluZyBjb250cm9sIGFuZCBzcGFjZSBhdHRyaWJ1dGUgYml0cwogCQkgKi8KLQkJY3RybF9vdXRsKGNvcHlfcHRlYV9hdHRyaWJ1dGVzKHB0ZXZhbCksIE1NVV9QVEVBKTsKKwkJX19yYXdfd3JpdGVsKGNvcHlfcHRlYV9hdHRyaWJ1dGVzKHB0ZXZhbCksIE1NVV9QVEVBKTsKIAl9CiAjZW5kaWYKIApAQCAtNTcsMTUgKzU3LDE0IEBACiAJcHRldmFsIHw9IF9QQUdFX1dUOwogI2VuZGlmCiAJLyogY29udmVuaWVudGx5LCB3ZSB3YW50IGFsbCB0aGUgc29mdHdhcmUgZmxhZ3MgdG8gYmUgMCBhbnl3YXkgKi8KLQljdHJsX291dGwocHRldmFsLCBNTVVfUFRFTCk7CisJX19yYXdfd3JpdGVsKHB0ZXZhbCwgTU1VX1BURUwpOwogCiAJLyogTG9hZCB0aGUgVExCICovCiAJYXNtIHZvbGF0aWxlKCJsZHRsYiI6IC8qIG5vIG91dHB1dCAqLyA6IC8qIG5vIGlucHV0ICovIDogIm1lbW9yeSIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwKLQkJCQkJCSB1bnNpZ25lZCBsb25nIHBhZ2UpCit2b2lkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhc2lkLCB1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhOwogCkBAIC03OCw2ICs3Nyw2IEBACiAJYWRkciA9IE1NVV9VVExCX0FERFJFU1NfQVJSQVkgfCBNTVVfUEFHRV9BU1NPQ19CSVQ7CiAJZGF0YSA9IHBhZ2UgfCBhc2lkOyAvKiBWQUxJRCBiaXQgaXMgb2ZmICovCiAJanVtcF90b191bmNhY2hlZCgpOwotCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwlfX3Jhd193cml0ZWwoZGF0YSwgYWRkcik7CiAJYmFja190b19jYWNoZWQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXNoNS5jIGIvYXJjaC9zaC9tbS90bGItc2g1LmMKaW5kZXggZmRiNjRlNC4uZjI3ZGJlMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGItc2g1LmMKKysrIGIvYXJjaC9zaC9tbS90bGItc2g1LmMKQEAgLTE0MywzICsxNDMsNDIgQEAKICAqLwogdm9pZCBzaDY0X3RlYXJkb3duX3RsYl9zbG90KHVuc2lnbmVkIGxvbmcgbG9uZyBjb25maWdfYWRkcikKIAlfX2F0dHJpYnV0ZV9fICgoYWxpYXMoIl9fZmx1c2hfdGxiX3Nsb3QiKSkpOworCitzdGF0aWMgaW50IGR0bGJfZW50cnk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGR0bGJfZW50cmllc1s2NF07CisKK3ZvaWQgdGxiX3dpcmVfZW50cnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeTsKKwl1bnNpZ25lZCBsb25nIHBhZGRyLCBmbGFnczsKKworCUJVR19PTihkdGxiX2VudHJ5ID09IEFSUkFZX1NJWkUoZHRsYl9lbnRyaWVzKSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwllbnRyeSA9IHNoNjRfZ2V0X3dpcmVkX2R0bGJfZW50cnkoKTsKKwlkdGxiX2VudHJpZXNbZHRsYl9lbnRyeSsrXSA9IGVudHJ5OworCisJcGFkZHIgPSBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOworCXBhZGRyICY9IH5QQUdFX01BU0s7CisKKwlzaDY0X3NldHVwX3RsYl9zbG90KGVudHJ5LCBhZGRyLCBnZXRfYXNpZCgpLCBwYWRkcik7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgdGxiX3Vud2lyZV9lbnRyeSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQlVHX09OKCFkdGxiX2VudHJ5KTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwllbnRyeSA9IGR0bGJfZW50cmllc1tkdGxiX2VudHJ5LS1dOworCisJc2g2NF90ZWFyZG93bl90bGJfc2xvdChlbnRyeSk7CisJc2g2NF9wdXRfd2lyZWRfZHRsYl9lbnRyeShlbnRyeSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi11cmIuYyBiL2FyY2gvc2gvbW0vdGxiLXVyYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNWI5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3RsYi11cmIuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogYXJjaC9zaC9tbS90bGItdXJiLmMKKyAqCisgKiBUTEIgZW50cnkgd2lyaW5nIGhlbHBlcnMgZm9yIFVSQi1lcXVpcHBlZCBwYXJ0cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hdHQgRmxlbWluZworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKworLyoKKyAqIExvYWQgdGhlIGVudHJ5IGZvciAnYWRkcicgaW50byB0aGUgVExCIGFuZCB3aXJlIHRoZSBlbnRyeS4KKyAqLwordm9pZCB0bGJfd2lyZV9lbnRyeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMsIGZsYWdzOworCWludCB1cmI7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBMb2FkIHRoZSBlbnRyeSBpbnRvIHRoZSBUTEIgKi8KKwlfX3VwZGF0ZV90bGIodm1hLCBhZGRyLCBwdGUpOworCisJLyogLi4uIGFuZCB3aXJlIGl0IHVwLiAqLworCXN0YXR1cyA9IF9fcmF3X3JlYWRsKE1NVUNSKTsKKwl1cmIgPSAoc3RhdHVzICYgTU1VQ1JfVVJCKSA+PiBNTVVDUl9VUkJfU0hJRlQ7CisJc3RhdHVzICY9IH5NTVVDUl9VUkI7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSdyZSBub3QgdHJ5aW5nIHRvIHdpcmUgdGhlIGxhc3QgVExCIGVudHJ5IHNsb3QuCisJICovCisJQlVHX09OKCEtLXVyYik7CisKKwl1cmIgPSB1cmIgJSBNTVVDUl9VUkJfTkVOVFJJRVM7CisKKwlzdGF0dXMgfD0gKHVyYiA8PCBNTVVDUl9VUkJfU0hJRlQpOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIE1NVUNSKTsKKwljdHJsX2JhcnJpZXIoKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFVud2lyZSB0aGUgbGFzdCB3aXJlZCBUTEIgZW50cnkuCisgKgorICogSXQgc2hvdWxkIGFsc28gYmUgbm90ZWQgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gd2lyZSBhbmQgdW53aXJlCisgKiBUTEIgZW50cmllcyBpbiBhbiBhcmJpdHJhcnkgb3JkZXIuIElmIHlvdSB3aXJlIFRMQiBlbnRyeSBOLCBmb2xsb3dlZAorICogYnkgZW50cnkgTisxLCB5b3UgbXVzdCB1bndpcmUgZW50cnkgTisxIGZpcnN0LCB0aGVuIGVudHJ5IE4uIEluIHRoaXMKKyAqIHJlc3BlY3QsIGl0IHdvcmtzIGxpa2UgYSBzdGFjayBvciBMSUZPIHF1ZXVlLgorICovCit2b2lkIHRsYl91bndpcmVfZW50cnkodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXR1cywgZmxhZ3M7CisJaW50IHVyYjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN0YXR1cyA9IF9fcmF3X3JlYWRsKE1NVUNSKTsKKwl1cmIgPSAoc3RhdHVzICYgTU1VQ1JfVVJCKSA+PiBNTVVDUl9VUkJfU0hJRlQ7CisJc3RhdHVzICY9IH5NTVVDUl9VUkI7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSdyZSBub3QgdHJ5aW5nIHRvIHVud2lyZSBhIFRMQiBlbnRyeSB3aGVuIG5vbmUKKwkgKiBoYXZlIGJlZW4gd2lyZWQuCisJICovCisJQlVHX09OKHVyYisrID09IE1NVUNSX1VSQl9ORU5UUklFUyk7CisKKwl1cmIgPSB1cmIgJSBNTVVDUl9VUkJfTkVOVFJJRVM7CisKKwlzdGF0dXMgfD0gKHVyYiA8PCBNTVVDUl9VUkJfU0hJRlQpOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIE1NVUNSKTsKKwljdHJsX2JhcnJpZXIoKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfMzIuYyBiL2FyY2gvc2gvbW0vdGxiZmx1c2hfMzIuYwppbmRleCA2ZjQ1YzFmLi4wMDRiYjNmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYmZsdXNoXzMyLmMKKysrIGIvYXJjaC9zaC9tbS90bGJmbHVzaF8zMi5jCkBAIC0xMzIsOSArMTMyLDkgQEAKIAkgKiAgICAgIEl0J3Mgc2FtZSBwb3NpdGlvbiwgYml0ICMyLgogCSAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlzdGF0dXMgPSBjdHJsX2lubChNTVVDUik7CisJc3RhdHVzID0gX19yYXdfcmVhZGwoTU1VQ1IpOwogCXN0YXR1cyB8PSAweDA0OwotCWN0cmxfb3V0bChzdGF0dXMsIE1NVUNSKTsKKwlfX3Jhd193cml0ZWwoc3RhdHVzLCBNTVVDUik7CiAJY3RybF9iYXJyaWVyKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jIGIvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jCmluZGV4IGRlMGIwZTg4Li43MDZkYTFkIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYmZsdXNoXzY0LmMKKysrIGIvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jCkBAIC0zNiw3ICszNiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmludF9wcm90cyhwZ3Byb3RfdCBwcm90KQogewotCXByaW50aygicHJvdCBpcyAweCUwOGx4XG4iLHBncHJvdF92YWwocHJvdCkpOworCXByaW50aygicHJvdCBpcyAweCUwMTZsbHhcbiIscGdwcm90X3ZhbChwcm90KSk7CiAKIAlwcmludGsoIiVzICVzICVzICVzICVzXG4iLFBQUk9UKF9QQUdFX1NIQVJFRCksUFBST1QoX1BBR0VfUkVBRCksCiAJICAgICAgIFBQUk9UKF9QQUdFX0VYRUNVVEUpLFBQUk9UKF9QQUdFX1dSSVRFKSxQUFJPVChfUEFHRV9VU0VSKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3VuY2FjaGVkLmMgYi9hcmNoL3NoL21tL3VuY2FjaGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyMGE1YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vdW5jYWNoZWQuYwpAQCAtMCwwICsxLDM0IEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBUaGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIHVuY2FjaGVkIHNlY3Rpb24gZnJvbSBpdHMgY2FjaGVkIGFsaWFzLgorICoKKyAqIExlZ2FjeSBwbGF0Zm9ybXMgaGFuZGxlIHRyaXZpYWwgdHJhbnNpdGlvbnMgYmV0d2VlbiBjYWNoZWQgYW5kCisgKiB1bmNhY2hlZCBzZWdtZW50cyBieSBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KKyAqIDUxMk1CIGxvd21lbSwgb3RoZXJzIHZpYSBhIHNwZWNpYWwgdW5jYWNoZWQgbWFwcGluZy4KKyAqCisgKiBEZWZhdWx0IHZhbHVlIG9ubHkgdmFsaWQgaW4gMjkgYml0IG1vZGUsIGluIDMyYml0IG1vZGUgdGhpcyB3aWxsIGJlCisgKiB1cGRhdGVkIGJ5IHRoZSBlYXJseSBQTUIgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqLwordW5zaWduZWQgbG9uZyBjYWNoZWRfdG9fdW5jYWNoZWQgPSBTWl81MTJNOwordW5zaWduZWQgbG9uZyB1bmNhY2hlZF9zaXplID0gU1pfNTEyTTsKK3Vuc2lnbmVkIGxvbmcgdW5jYWNoZWRfc3RhcnQsIHVuY2FjaGVkX2VuZDsKKworaW50IHZpcnRfYWRkcl91bmNhY2hlZCh1bnNpZ25lZCBsb25nIGthZGRyKQoreworCXJldHVybiAoa2FkZHIgPj0gdW5jYWNoZWRfc3RhcnQpICYmIChrYWRkciA8IHVuY2FjaGVkX2VuZCk7Cit9CisKK3ZvaWQgX19pbml0IHVuY2FjaGVkX2luaXQodm9pZCkKK3sKKwl1bmNhY2hlZF9zdGFydCA9IG1lbW9yeV9lbmQ7CisJdW5jYWNoZWRfZW5kID0gdW5jYWNoZWRfc3RhcnQgKyB1bmNhY2hlZF9zaXplOworfQorCit2b2lkIF9faW5pdCB1bmNhY2hlZF9yZXNpemUodW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuY2FjaGVkX3NpemUgPSBzaXplOworCXVuY2FjaGVkX2VuZCA9IHVuY2FjaGVkX3N0YXJ0ICsgdW5jYWNoZWRfc2l6ZTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwppbmRleCA2NjM5YjI1Li5iMjVhYTU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCkBAIC0zMiw2ICszMiw3IEBACiBTTkFQR0VBUgkJU0hfU0VDVVJFRURHRTU0MTAKIEVET1NLNzcwNQkJU0hfRURPU0s3NzA1CiBFRE9TSzc3NjAJCVNIX0VET1NLNzc2MAorU0RLNzc4NgkJCVNIX1NESzc3ODYKIFNINDIwMl9NSUNST0RFVgkJU0hfU0g0MjAyX01JQ1JPREVWCiBTSDAzCQkJU0hfU0gwMwogTEFORElTSwkJCVNIX0xBTkRJU0sKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggNzQ4NmM2MC4uMDI1YTAyYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTUsNiArNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCisvKgorICogVGhlIHN5c2NhbGwgdGFibGUgYWx3YXlzIGNvbnRhaW5zIDMyIGJpdCBwb2ludGVycyBzaW5jZSB3ZSBrbm93IHRoYXQgdGhlCisgKiBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaXMgKHdheSkgYmVsb3cgNEdCLiAgU28gdGhlICJpbnQiCisgKiB0eXBlIGhlcmUgaXMgd2hhdCB3ZSB3YW50IFtuZWVkXSBmb3IgYm90aCAzMiBiaXQgYW5kIDY0IGJpdCBzeXN0ZW1zLgorICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107CisKIC8qIFRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgaXMgZ2l2ZW4gYnkgdGhlIHVzZXIgaW4gJWcxICovCiBzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMKaW5kZXggYjE3MWFlOC4uYjA2MmRlOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYwpAQCAtNTksNyArNTksNyBAQAogCiAJY3VyX2luc3QgPSAwOwogCWZvcl9lYWNoX25vZGVfYnlfdHlwZShkcCwgImNwdSIpIHsKLQkJaW50IGVyciA9IGNoZWNrX2NwdV9ub2RlKGRwLT5ub2RlLCAmY3VyX2luc3QsCisJCWludCBlcnIgPSBjaGVja19jcHVfbm9kZShkcC0+cGhhbmRsZSwgJmN1cl9pbnN0LAogCQkJCQkgY29tcGFyZSwgY29tcGFyZV9hcmcsCiAJCQkJCSBwcm9tX25vZGUsIG1pZCk7CiAJCWlmICghZXJyKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDI5OTczZGEuLjkxMDNhNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jCkBAIC05MSwxNCArOTEsMyBAQAogCXJldHVybiAwOwogfQogI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgc3lzX2NhbGxfdGFibGVbXTsKLQotdW5zaWduZWQgbG9uZyBfX2luaXQgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKQotewotCXJldHVybiAodW5zaWduZWQgbG9uZylzeXNfY2FsbF90YWJsZVtucl07Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfMzIuYwppbmRleCA1M2E1OGIzLi5kYTUyN2IzMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogCWlmICghcGFyZW50KQogCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICJyb290Iik7CiAJZWxzZQotCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICIlMDh4IiwgZHAtPm5vZGUpOworCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICIlMDh4IiwgZHAtPnBoYW5kbGUpOwogCiAJaWYgKG9mX2RldmljZV9yZWdpc3RlcihvcCkpIHsKIAkJcHJpbnRrKCIlczogQ291bGQgbm90IHJlZ2lzdGVyIG9mIGRldmljZS5cbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCmluZGV4IDBhNmYyZDEuLmIzZDRjYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCkBAIC02NzYsNyArNjc2LDcgQEAKIAlpZiAoIXBhcmVudCkKIAkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAicm9vdCIpOwogCWVsc2UKLQkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5ub2RlKTsKKwkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5waGFuZGxlKTsKIAogCWlmIChvZl9kZXZpY2VfcmVnaXN0ZXIob3ApKSB7CiAJCXByaW50aygiJXM6IENvdWxkIG5vdCByZWdpc3RlciBvZiBkZXZpY2UuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwppbmRleCA1OTJiMDNkLi4zN2I2NmM2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwpAQCAtNzIyLDkgKzcyMiwxMCBAQAogewogfQogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmV0dXJuIHJlcy0+c3RhcnQ7CiB9CiAKIGludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKaW5kZXggNGUyNzI0ZS4uNzVlODhjMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKQEAgLTc2OCw5ICs3NjgsMTAgQEAKIAlyZXR1cm4gc3RyOwogfQogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmV0dXJuIHJlcy0+c3RhcnQ7CiB9CiAKIGludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGU4NTY0NTYuLjlmMmIyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTk4MCwxMCArOTgwLDEwIEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyB2b2lkIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGNwdSkKK3N0YXRpYyB2b2lkIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKLQlldmVudC0+b25jcHUgPSBjcHU7CisJZXZlbnQtPm9uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWV2ZW50LT50c3RhbXBfcnVubmluZyArPSBldmVudC0+Y3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOwogCWlmIChpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCiAJCWV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CkBAIC05OTEsNyArOTkxLDcgQEAKIAogaW50IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciwKIAkJCSAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpCisJCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqc3ViOwpAQCAtMTAxNSwxMCArMTAxNSwxMCBAQAogCiAJY3B1Y3R4LT5hY3RpdmVfb25jcHUgKz0gbjsKIAluID0gMTsKLQlldmVudF9zY2hlZF9pbihncm91cF9sZWFkZXIsIGNwdSk7CisJZXZlbnRfc2NoZWRfaW4oZ3JvdXBfbGVhZGVyKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmdyb3VwX2xlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgewogCQlpZiAoc3ViLT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX09GRikgewotCQkJZXZlbnRfc2NoZWRfaW4oc3ViLCBjcHUpOworCQkJZXZlbnRfc2NoZWRfaW4oc3ViKTsKIAkJCW4rKzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb20uaCBiL2FyY2gvc3BhcmMva2VybmVsL3Byb20uaAppbmRleCA0NTMzOTdmLi5hODU5MWVmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmgKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbS5oCkBAIC00LDkgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KIAotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWxsbm9kZXM7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi1leHRlcm4gcndsb2NrX3QgZGV2dHJlZV9sb2NrOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCiBleHRlcm4gdm9pZCAqIHByb21fZWFybHlfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIGlycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYwppbmRleCBkODBhNjVkLi41N2FjOWUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKQEAgLTM3LDE4ICszNyw2IEBACiBjaGFyICpvZl9jb25zb2xlX29wdGlvbnM7CiBFWFBPUlRfU1lNQk9MKG9mX2NvbnNvbGVfb3B0aW9ucyk7CiAKLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCWZvciAobnAgPSBhbGxub2RlczsgbnA7IG5wID0gbnAtPmFsbG5leHQpCi0JCWlmIChucC0+bm9kZSA9PSBoYW5kbGUpCi0JCQlicmVhazsKLQotCXJldHVybiBucDsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUpOwotCiBpbnQgb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBkZWYpCiB7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwpAQCAtODksNyArNzcsNyBAQAogCQkJdm9pZCAqb2xkX3ZhbCA9IHByb3AtPnZhbHVlOwogCQkJaW50IHJldDsKIAotCQkJcmV0ID0gcHJvbV9zZXRwcm9wKGRwLT5ub2RlLCBuYW1lLCB2YWwsIGxlbik7CisJCQlyZXQgPSBwcm9tX3NldHByb3AoZHAtPnBoYW5kbGUsIG5hbWUsIHZhbCwgbGVuKTsKIAogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWlmIChyZXQgPj0gMCkgewpAQCAtMjM2LDcgKzIyNCw3IEBACiAKIAlkcC0+bmFtZSA9IGdldF9vbmVfcHJvcGVydHkobm9kZSwgIm5hbWUiKTsKIAlkcC0+dHlwZSA9IGdldF9vbmVfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIik7Ci0JZHAtPm5vZGUgPSBub2RlOworCWRwLT5waGFuZGxlID0gbm9kZTsKIAogCWRwLT5wcm9wZXJ0aWVzID0gYnVpbGRfcHJvcF9saXN0KG5vZGUpOwogCkBAIC0zMTMsNyArMzAxLDcgQEAKIAogCW5leHRwID0gJmFsbG5vZGVzLT5hbGxuZXh0OwogCWFsbG5vZGVzLT5jaGlsZCA9IHByb21fYnVpbGRfdHJlZShhbGxub2RlcywKLQkJCQkJICBwcm9tX2dldGNoaWxkKGFsbG5vZGVzLT5ub2RlKSwKKwkJCQkJICBwcm9tX2dldGNoaWxkKGFsbG5vZGVzLT5waGFuZGxlKSwKIAkJCQkJICAmbmV4dHApOwogCW9mX2NvbnNvbGVfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCmluZGV4IGFhMzYyMjMuLmViMTQ4NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCkBAIC0zNzAsNyArMzcwLDcgQEAKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb2ZfZmluZF9ub2RlX2J5X2NwdWlkKGNwdSk7CiAKLQkJcHJvbV9zdGFydGNwdShkcC0+bm9kZSwgZW50cnksIGNvb2tpZSk7CisJCXByb21fc3RhcnRjcHUoZHAtPnBoYW5kbGUsIGVudHJ5LCBjb29raWUpOwogCX0KIAogCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCA1MDAwMDsgdGltZW91dCsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKaW5kZXggMjIwMWU5Yy4uYzFlYTllYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQpAQCAtOCw3ICs4LDggQEAKIAlzZXRqbXAubyBzaWduYWwubyBzdHViLm8gc3R1Yl9zZWd2Lm8gc3lzY2FsbHMubyBzeXNjYWxsX3RhYmxlLm8gXAogCXN5c3JxLm8ga3N5bXMubyB0bHMubwogCi1zdWJhcmNoLW9iai15ID0gbGliL2NzdW0tcGFydGlhbF82NC5vIGxpYi9tZW1jcHlfNjQubyBsaWIvdGh1bmtfNjQubworc3ViYXJjaC1vYmoteSA9IGxpYi9jc3VtLXBhcnRpYWxfNjQubyBsaWIvbWVtY3B5XzY0Lm8gbGliL3RodW5rXzY0Lm8gXAorCQlsaWIvcndzZW1fNjQubwogc3ViYXJjaC1vYmotJChDT05GSUdfTU9EVUxFUykgKz0ga2VybmVsL21vZHVsZS5vCiAKIGxkdC15ID0gLi4vc3lzLWkzODYvbGR0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGViNDA5MjUuLjA4OTYwMDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNDUsNiArNDUsNyBAQAogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlmIFg4Nl8zMgogCXNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCiAJc2VsZWN0IFVTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUCisJc2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCBmMjBkZGY4Li5hMTk4MjkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtMzE5LDcgKzMxOSw3IEBACiAKIGNvbmZpZyBYODZfWEFERAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhTTM4NgorCWRlcGVuZHMgb24gWDg2XzY0IHx8ICFNMzg2CiAKIGNvbmZpZyBYODZfUFBST19GRU5DRQogCWJvb2wgIlBlbnRpdW1Qcm8gbWVtb3J5IG9yZGVyaW5nIGVycmF0YSB3b3JrYXJvdW5kIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCA3OGIzMmJlLi4wYTQzZGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtMTM1LDkgKzEzNSw3IEBACiAjIHN1c3BlbmQgYW5kIGhpYmVybmF0aW9uIHN1cHBvcnQKIGRyaXZlcnMtJChDT05GSUdfUE0pICs9IGFyY2gveDg2L3Bvd2VyLwogCi1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpCiBkcml2ZXJzLSQoQ09ORklHX0ZCKSArPSBhcmNoL3g4Ni92aWRlby8KLWVuZGlmCiAKICMjIyMKICMgYm9vdCBsb2FkZXIgc3VwcG9ydC4gU2V2ZXJhbCB0YXJnZXRzIGFyZSBrZXB0IGZvciBsZWdhY3kgcHVycG9zZXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDNiMjJmZTguLjUxZTI0MDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTksMTEgKzE5LDYgQEAKICNkZWZpbmUgX0FTTV9YODZfREVTQ19IIDEKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBfTElOVVhfU1RSSU5HX0hfIDEKLSNkZWZpbmUgX19MSU5VWF9CSVRNQVBfSCAxCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgpAQCAtMTMxLDggKzEyNiw4IEBACiBzdGF0aWMgc3RydWN0IGJvb3RfcGFyYW1zICpyZWFsX21vZGU7CQkvKiBQb2ludGVyIHRvIHJlYWwtbW9kZSBkYXRhICovCiBzdGF0aWMgaW50IHF1aWV0OwogCi1zdGF0aWMgdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCB1bnNpZ25lZCBuKTsKLXZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIG4pOwordm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7Cit2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CiAKIHN0YXRpYyB2b2lkIF9fcHV0c3RyKGludCwgY29uc3QgY2hhciAqKTsKICNkZWZpbmUgcHV0c3RyKF9feCkgIF9fcHV0c3RyKDAsIF9feCkKQEAgLTE4NSwxMSArMTgwLDkgQEAKIAkJcmV0dXJuOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAJaWYgKHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ192aWRlb19tb2RlID09IDAgJiYKIAkgICAgbGluZXMgPT0gMCAmJiBjb2xzID09IDApCiAJCXJldHVybjsKLSNlbmRpZgogCiAJeCA9IHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ194OwogCXkgPSByZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfeTsKQEAgLTIyMyw3ICsyMTYsNyBAQAogCW91dGIoMHhmZiAmIChwb3MgPj4gMSksIHZpZHBvcnQrMSk7CiB9CiAKLXN0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHVuc2lnbmVkIG4pCit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQogewogCWludCBpOwogCWNoYXIgKnNzID0gczsKQEAgLTIzMyw3ICsyMjYsNyBAQAogCXJldHVybiBzOwogfQogCi12b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBuKQordm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCiB7CiAJaW50IGk7CiAJY29uc3QgY2hhciAqcyA9IHNyYzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWtjcHVzdHIuYyBiL2FyY2gveDg2L2Jvb3QvbWtjcHVzdHIuYwppbmRleCA4ZWY2MGYyLi45MTkyNTdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L21rY3B1c3RyLmMKKysrIGIvYXJjaC94ODYvYm9vdC9ta2NwdXN0ci5jCkBAIC0yMiw3ICsyMiw3IEBACiAJaW50IGksIGo7CiAJY29uc3QgY2hhciAqc3RyOwogCi0JcHJpbnRmKCJzdGF0aWMgY29uc3QgY2hhciB4ODZfY2FwX3N0cnNbXSA9IFxuIik7CisJcHJpbnRmKCJzdGF0aWMgY29uc3QgY2hhciB4ODZfY2FwX3N0cnNbXSA9XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOQ0FQSU5UUzsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jIGIvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYwppbmRleCA4MTljYWExLi5lZDdhZWZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKQEAgLTQyLDIyICs0MiwxNSBAQAogewogCXN0cnVjdCBiaW9zcmVncyBpcmVnLCBvcmVnOwogCXUxNiBheDsKLQl1OCByb3dzOwogCXU4IG1vZGU7CiAKIAlpbml0cmVncygmaXJlZyk7CiAKKwkvKiBRdWVyeSBjdXJyZW50IG1vZGUgKi8KIAlheCA9IDB4MGYwMDsKIAlpbnRjYWxsKDB4MTAsICZpcmVnLCAmb3JlZyk7CiAJbW9kZSA9IG9yZWcuYWw7CiAKLQlzZXRfZnMoMCk7Ci0Jcm93cyA9IHJkZnM4KDB4NDg0KTsJLyogcm93cyBtaW51cyBvbmUgKi8KLQotCWlmICgob3JlZy5heCA9PSAweDUwMDMgfHwgb3JlZy5heCA9PSAweDUwMDcpICYmCi0JICAgIChyb3dzID09IDAgfHwgcm93cyA9PSAyNCkpCi0JCXJldHVybiBtb2RlOwotCiAJaWYgKG1vZGUgIT0gMyAmJiBtb2RlICE9IDcpCiAJCW1vZGUgPSAzOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmMKaW5kZXggZjc2NzE2NC4uNDNlZGEyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uYwpAQCAtMjk4LDExICsyOTgsMTggQEAKIAl9CiAKIAkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCWlmIChzYXZlZC5jdXJ4ID49IHhzKQorCQlzYXZlZC5jdXJ4ID0geHMtMTsKKwlpZiAoc2F2ZWQuY3VyeSA+PSB5cykKKwkJc2F2ZWQuY3VyeSA9IHlzLTE7CisKIAlpbml0cmVncygmaXJlZyk7CiAJaXJlZy5haCA9IDB4MDI7CQkvKiBTZXQgY3Vyc29yIHBvc2l0aW9uICovCiAJaXJlZy5kaCA9IHNhdmVkLmN1cnk7CiAJaXJlZy5kbCA9IHNhdmVkLmN1cng7CiAJaW50Y2FsbCgweDEwLCAmaXJlZywgTlVMTCk7CisKKwlzdG9yZV9jdXJzb3JfcG9zaXRpb24oKTsKIH0KIAogdm9pZCBzZXRfdmlkZW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfYW91dC5jCmluZGV4IGY5ZjQ3MjQuLjkwNDZlNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyX2FvdXQuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJICogc2l6ZSBsaW1pdHMgaW1wb3NlZCBvbiB0aGVtIGJ5IGNyZWF0aW5nIHByb2dyYW1zIHdpdGggbGFyZ2UKIAkgKiBhcnJheXMgaW4gdGhlIGRhdGEgb3IgYnNzLgogCSAqLwotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOworCXJsaW0gPSBybGltaXQoUkxJTUlUX0RBVEEpOwogCWlmIChybGltID49IFJMSU1fSU5GSU5JVFkpCiAJCXJsaW0gPSB+MDsKIAlpZiAoZXguYV9kYXRhICsgZXguYV9ic3MgPiBybGltKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKaW5kZXggNjliNzRhNy4uZjFlMjUzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCkBAIC02NSwxMiArNjUsMTcgQEAKIAkJCQkJdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpOwogZXh0ZXJuIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCk7CiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKTsKK2V4dGVybiBpbnQgYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKm5hbWUsCiAJCQkJCSAgICAgICB2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAogCQkJCQkgICAgICAgdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKSB7fQorc3RhdGljIGlubGluZSBpbnQgYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgkvKiBDT05GSUdfU01QICovCiAKIC8qIGFsdGVybmF0aXZlIGFzc2VtYmx5IHByaW1pdGl2ZTogKi8KQEAgLTEyNSwxMSArMTMwLDE2IEBACiAJYXNtIHZvbGF0aWxlIChBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpCQlcCiAJCTogb3V0cHV0IDogImkiICgwKSwgIyMgaW5wdXQpCiAKKy8qIExpa2UgYWx0ZXJuYXRpdmVfaW8sIGJ1dCBmb3IgcmVwbGFjaW5nIGEgZGlyZWN0IGNhbGwgd2l0aCBhbm90aGVyIG9uZS4gKi8KKyNkZWZpbmUgYWx0ZXJuYXRpdmVfY2FsbChvbGRmdW5jLCBuZXdmdW5jLCBmZWF0dXJlLCBvdXRwdXQsIGlucHV0Li4uKQlcCisJYXNtIHZvbGF0aWxlIChBTFRFUk5BVElWRSgiY2FsbCAlUFtvbGRdIiwgImNhbGwgJVBbbmV3XSIsIGZlYXR1cmUpIFwKKwkJOiBvdXRwdXQgOiBbb2xkXSAiaSIgKG9sZGZ1bmMpLCBbbmV3XSAiaSIgKG5ld2Z1bmMpLCAjIyBpbnB1dCkKKwogLyoKICAqIHVzZSB0aGlzIG1hY3JvKHMpIGlmIHlvdSBuZWVkIG1vcmUgdGhhbiBvbmUgb3V0cHV0IHBhcmFtZXRlcgogICogaW4gYWx0ZXJuYXRpdmVfaW8KICAqLwotI2RlZmluZSBBU01fT1VUUFVUMihhLCBiKSBhLCBiCisjZGVmaW5lIEFTTV9PVVRQVVQyKGEuLi4pIGEKIAogc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGU7CiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDRlMWI4ODcuLjhmODIxN2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xLDUgKzEsMzAwIEBACi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJhdG9taWNfMzIuaCIKLSNlbHNlCi0jIGluY2x1ZGUgImF0b21pY182NC5oIgorI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUNfSAorI2RlZmluZSBfQVNNX1g4Nl9BVE9NSUNfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorCisvKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKKyAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCisgKi8KKworI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9CisKKy8qKgorICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKK3sKKwlyZXR1cm4gdi0+Y291bnRlcjsKK30KKworLyoqCisgKiBhdG9taWNfc2V0IC0gc2V0IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IHJlcXVpcmVkIHZhbHVlCisgKgorICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zZXQoYXRvbWljX3QgKnYsIGludCBpKQoreworCXYtPmNvdW50ZXIgPSBpOworfQorCisvKioKKyAqIGF0b21pY19hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWMgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSk7Cit9CisKKy8qKgorICogYXRvbWljX3N1YiAtIHN1YnRyYWN0IGludGVnZXIgZnJvbSBhdG9taWMgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMSwlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiaXIiIChpKSk7Cit9CisKKy8qKgorICogYXRvbWljX3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9hbmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbmMoYXRvbWljX3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMCIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWNfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYyAhPSAwOworfQorCisvKioKKyAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6IDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgaW50ZWdlciBhbmQgcmV0dXJuCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJaW50IF9faTsKKyNpZmRlZiBDT05GSUdfTTM4NgorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKHVubGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2IDw9IDMpKQorCQlnb3RvIG5vX3hhZGQ7CiAjZW5kaWYKKwkvKiBNb2Rlcm4gNDg2KyBwcm9jZXNzb3IgKi8KKwlfX2kgPSBpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZGwgJTAsICUxIgorCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gaSArIF9faTsKKworI2lmZGVmIENPTkZJR19NMzg2Citub194YWRkOiAvKiBMZWdhY3kgMzg2IHByb2Nlc3NvciAqLworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19pID0gYXRvbWljX3JlYWQodik7CisJYXRvbWljX3NldCh2LCBpICsgX19pKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBpICsgX19pOworI2VuZGlmCit9CisKKy8qKgorICogYXRvbWljX3N1Yl9yZXR1cm4gLSBzdWJ0cmFjdCBpbnRlZ2VyIGFuZCByZXR1cm4KKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucyBAdiAtIEBpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oLWksIHYpOworfQorCisjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSwgdikpCisjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQoreworCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbmV3KQoreworCXJldHVybiB4Y2hnKCZ2LT5jb3VudGVyLCBuZXcpOworfQorCisvKioKKyAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGFscmVhZHkgYSBnaXZlbiB2YWx1ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KKyAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBAdiB3YXMgbm90IGFscmVhZHkgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKK3sKKwlpbnQgYywgb2xkOworCWMgPSBhdG9taWNfcmVhZCh2KTsKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCisjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQorCisvKioKKyAqIGF0b21pY19pbmNfc2hvcnQgLSBpbmNyZW1lbnQgb2YgYSBzaG9ydCBpbnRlZ2VyCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGludAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyAxIHRvIEB2CisgKiBSZXR1cm5zIHRoZSBuZXcgdmFsdWUgb2YgQHUKKyAqLworc3RhdGljIGlubGluZSBzaG9ydCBpbnQgYXRvbWljX2luY19zaG9ydChzaG9ydCBpbnQgKnYpCit7CisJYXNtKExPQ0tfUFJFRklYICJhZGR3ICQxLCAlMCIgOiAiK20iICgqdikpOworCXJldHVybiAqdjsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qKgorICogYXRvbWljX29yX2xvbmcgLSBPUiBvZiB0d28gbG9uZyBpbnRlZ2VycworICogQHYxOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZworICogQHYyOiBwb2ludGVyIHRvIHR5cGUgdW5zaWduZWQgbG9uZworICoKKyAqIEF0b21pY2FsbHkgT1JzIEB2MSBhbmQgQHYyCisgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIE9SCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfb3JfbG9uZyh1bnNpZ25lZCBsb25nICp2MSwgdW5zaWduZWQgbG9uZyB2MikKK3sKKwlhc20oTE9DS19QUkVGSVggIm9ycSAlMSwgJTAiIDogIittIiAoKnYxKSA6ICJyIiAodjIpKTsKK30KKyNlbmRpZgorCisvKiBUaGVzZSBhcmUgeDg2LXNwZWNpZmljLCB1c2VkIGJ5IHNvbWUgaGVhZGVyIGZpbGVzICovCisjZGVmaW5lIGF0b21pY19jbGVhcl9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFuZGwgJTAsJTEiCQkJXAorCQkgICAgIDogOiAiciIgKH4obWFzaykpLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCisKKyNkZWZpbmUgYXRvbWljX3NldF9tYXNrKG1hc2ssIGFkZHIpCQkJCVwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9ybCAlMCwlMSIJCQlcCisJCSAgICAgOiA6ICJyIiAoKHVuc2lnbmVkKShtYXNrKSksICJtIiAoKihhZGRyKSkJXAorCQkgICAgIDogIm1lbW9yeSIpCisKKy8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBpbmNsdWRlICJhdG9taWM2NF8zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAiYXRvbWljNjRfNjQuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KKyNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYzY0XzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMjdiZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYzY0XzMyLmgKQEAgLTAsMCArMSwxNjAgQEAKKyNpZm5kZWYgX0FTTV9YODZfQVRPTUlDNjRfMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9BVE9NSUM2NF8zMl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorLy8jaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKworLyogQW4gNjRiaXQgYXRvbWljIHR5cGUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXU2NCBfX2FsaWduZWQoOCkgY291bnRlcjsKK30gYXRvbWljNjRfdDsKKworI2RlZmluZSBBVE9NSUM2NF9JTklUKHZhbCkJeyAodmFsKSB9CisKK2V4dGVybiB1NjQgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBvbGRfdmFsLCB1NjQgbmV3X3ZhbCk7CisKKy8qKgorICogYXRvbWljNjRfeGNoZyAtIHhjaGcgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqIEBuZXdfdmFsOiAgdmFsdWUgdG8gYXNzaWduCisgKgorICogQXRvbWljYWxseSB4Y2hncyB0aGUgdmFsdWUgb2YgQHB0ciB0byBAbmV3X3ZhbCBhbmQgcmV0dXJucworICogdGhlIG9sZCB2YWx1ZS4KKyAqLworZXh0ZXJuIHU2NCBhdG9taWM2NF94Y2hnKGF0b21pYzY0X3QgKnB0ciwgdTY0IG5ld192YWwpOworCisvKioKKyAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWM2NCB2YXJpYWJsZQorICogQHB0cjogICAgICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICogQG5ld192YWw6ICB2YWx1ZSB0byBhc3NpZ24KKyAqCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEBwdHIgdG8gQG5ld192YWwuCisgKi8KK2V4dGVybiB2b2lkIGF0b21pYzY0X3NldChhdG9taWM2NF90ICpwdHIsIHU2NCBuZXdfdmFsKTsKKworLyoqCisgKiBhdG9taWM2NF9yZWFkIC0gcmVhZCBhdG9taWM2NCB2YXJpYWJsZQorICogQHB0cjogICAgICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEBwdHIgYW5kIHJldHVybnMgaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGF0b21pYzY0X3JlYWQoYXRvbWljNjRfdCAqcHRyKQoreworCXU2NCByZXM7CisKKwkvKgorCSAqIE5vdGUsIHdlIGlubGluZSB0aGlzIGF0b21pYzY0X3QgcHJpbWl0aXZlIGJlY2F1c2UKKwkgKiBpdCBvbmx5IGNsb2JiZXJzIEVBWC9FRFggYW5kIGxlYXZlcyB0aGUgb3RoZXJzCisJICogdW50b3VjaGVkLiBXZSBhbHNvIChzb21ld2hhdCBzdWJ0bHkpIHJlbHkgb24gdGhlCisJICogZmFjdCB0aGF0IGNtcHhjaGc4YiByZXR1cm5zIHRoZSBjdXJyZW50IDY0LWJpdCB2YWx1ZQorCSAqIG9mIHRoZSBtZW1vcnkgbG9jYXRpb24gd2UgYXJlIHRvdWNoaW5nOgorCSAqLworCWFzbSB2b2xhdGlsZSgKKwkJIm1vdiAlJWVieCwgJSVlYXhcblx0IgorCQkibW92ICUlZWN4LCAlJWVkeFxuXHQiCisJCUxPQ0tfUFJFRklYICJjbXB4Y2hnOGIgJTFcbiIKKwkJCTogIj0mQSIgKHJlcykKKwkJCTogIm0iICgqcHRyKQorCQkpOworCisJcmV0dXJuIHJlczsKK30KKworZXh0ZXJuIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCisgKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyIGFuZCByZXR1cm5zIEBkZWx0YSArICpAcHRyCisgKi8KK2V4dGVybiB1NjQgYXRvbWljNjRfYWRkX3JldHVybih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CisKKy8qCisgKiBPdGhlciB2YXJpYW50cyB3aXRoIGRpZmZlcmVudCBhcml0aG1ldGljIG9wZXJhdG9yczoKKyAqLworZXh0ZXJuIHU2NCBhdG9taWM2NF9zdWJfcmV0dXJuKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKK2V4dGVybiB1NjQgYXRvbWljNjRfaW5jX3JldHVybihhdG9taWM2NF90ICpwdHIpOworZXh0ZXJuIHU2NCBhdG9taWM2NF9kZWNfcmV0dXJuKGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljNjQgdmFyaWFibGUKKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGRlbHRhIHRvIEBwdHIuCisgKi8KK2V4dGVybiB2b2lkIGF0b21pYzY0X2FkZCh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAZGVsdGEgZnJvbSBAcHRyLgorICovCitleHRlcm4gdm9pZCBhdG9taWM2NF9zdWIodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAZGVsdGEgZnJvbSBAcHRyIGFuZCByZXR1cm5zCisgKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK2V4dGVybiBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEBwdHIgYnkgMS4KKyAqLworZXh0ZXJuIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfZGVjIC0gZGVjcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAcHRyIGJ5IDEuCisgKi8KK2V4dGVybiB2b2lkIGF0b21pYzY0X2RlYyhhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAorICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHB0ciBieSAxIGFuZAorICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgorICogY2FzZXMuCisgKi8KK2V4dGVybiBpbnQgYXRvbWljNjRfZGVjX2FuZF90ZXN0KGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAcHRyIGJ5IDEKKyAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworZXh0ZXJuIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGRlbHRhIHRvIEBwdHIgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCitleHRlcm4gaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZSh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUM2NF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWM2NF82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWM1YjQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfNjQuaApAQCAtMCwwICsxLDIyNCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUM2NF82NF9ICisjZGVmaW5lIF9BU01fWDg2X0FUT01JQzY0XzY0X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKworLyogVGhlIDY0LWJpdCBhdG9taWMgdHlwZSAqLworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQorCisvKioKKyAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KKyAqIERvZXNuJ3QgaW1wbHkgYSByZWFkIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQoreworCXJldHVybiB2LT5jb3VudGVyOworfQorCisvKioKKyAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWM2NCB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKiBAaTogcmVxdWlyZWQgdmFsdWUKKyAqCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnYsIGxvbmcgaSkKK3sKKwl2LT5jb3VudGVyID0gaTsKK30KKworLyoqCisgKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9hZGQobG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMSwlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUxLCUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YnEgJTIsJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKKyAqIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTA7IHNldGUgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCisgKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCisgKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZShsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUyLCUwOyBzZXRzICUxIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGM7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2CisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIF9faSA9IGk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgorCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gaSArIF9faTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCXJldHVybiBhdG9taWM2NF9hZGRfcmV0dXJuKC1pLCB2KTsKK30KKworI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpICAoYXRvbWljNjRfYWRkX3JldHVybigxLCAodikpKQorI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpICAoYXRvbWljNjRfc3ViX3JldHVybigxLCAodikpKQorCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LCBsb25nIG9sZCwgbG9uZyBuZXcpCit7CisJcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqdiwgbG9uZyBuZXcpCit7CisJcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCisgKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9hZGRfdW5sZXNzKGF0b21pYzY0X3QgKnYsIGxvbmcgYSwgbG9uZyB1KQoreworCWxvbmcgYywgb2xkOworCWMgPSBhdG9taWM2NF9yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWM2NF9jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CisJCWlmIChsaWtlbHkob2xkID09IGMpKQorCQkJYnJlYWs7CisJCWMgPSBvbGQ7CisJfQorCXJldHVybiBjICE9ICh1KTsKK30KKworI2RlZmluZSBhdG9taWM2NF9pbmNfbm90X3plcm8odikgYXRvbWljNjRfYWRkX3VubGVzcygodiksIDEsIDApCisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUM2NF82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzVhNjY3Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfQVRPTUlDXzMyX0gKLSNkZWZpbmUgX0FTTV9YODZfQVRPTUlDXzMyX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KLQotLyoKLSAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCi0gKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgotICovCi0KLSNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQotCi0vKioKLSAqIGF0b21pY19yZWFkIC0gcmVhZCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3JlYWQoY29uc3QgYXRvbWljX3QgKnYpCi17Ci0JcmV0dXJuIHYtPmNvdW50ZXI7Ci19Ci0KLS8qKgotICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiByZXF1aXJlZCB2YWx1ZQotICoKLSAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKLXsKLQl2LT5jb3VudGVyID0gaTsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogImlyIiAoaSkpOwotfQotCi0vKioKLSAqIGF0b21pY19zdWIgLSBzdWJ0cmFjdCBpbnRlZ2VyIGZyb20gYXRvbWljIHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTEsJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogImlyIiAoaSkpOwotfQotCi0vKioKLSAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCi0gKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMiwlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pY19pbmMgLSBpbmNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMCIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfZGVjIC0gZGVjcmVtZW50IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTAiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAotICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgotICogY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwOyBzZXRlICUxIgotCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfcmV0dXJuIC0gYWRkIGludGVnZXIgYW5kIHJldHVybgotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCWludCBfX2k7Ci0jaWZkZWYgQ09ORklHX00zODYKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlmICh1bmxpa2VseShib290X2NwdV9kYXRhLng4NiA8PSAzKSkKLQkJZ290byBub194YWRkOwotI2VuZGlmCi0JLyogTW9kZXJuIDQ4NisgcHJvY2Vzc29yICovCi0JX19pID0gaTsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGRsICUwLCAlMSIKLQkJICAgICA6ICIrciIgKGkpLCAiK20iICh2LT5jb3VudGVyKQotCQkgICAgIDogOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGkgKyBfX2k7Ci0KLSNpZmRlZiBDT05GSUdfTTM4Ngotbm9feGFkZDogLyogTGVnYWN5IDM4NiBwcm9jZXNzb3IgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19pID0gYXRvbWljX3JlYWQodik7Ci0JYXRvbWljX3NldCh2LCBpICsgX19pKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIGkgKyBfX2k7Ci0jZW5kaWYKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViX3JldHVybiAtIHN1YnRyYWN0IGludGVnZXIgYW5kIHJldHVybgotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zIEB2IC0gQGkKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQotewotCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbmV3KQotewotCXJldHVybiB4Y2hnKCZ2LT5jb3VudGVyLCBuZXcpOwotfQotCi0vKioKLSAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGFscmVhZHkgYSBnaXZlbiB2YWx1ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KLSAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBAdiB3YXMgbm90IGFscmVhZHkgQHUuCi0gKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKLXsKLQlpbnQgYywgb2xkOwotCWMgPSBhdG9taWNfcmVhZCh2KTsKLQlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCi0JCQlicmVhazsKLQkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0JcmV0dXJuIGMgIT0gKHUpOwotfQotCi0jZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQotCi0jZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSwgdikpCi0jZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpICAoYXRvbWljX3N1Yl9yZXR1cm4oMSwgdikpCi0KLS8qIFRoZXNlIGFyZSB4ODYtc3BlY2lmaWMsIHVzZWQgYnkgc29tZSBoZWFkZXIgZmlsZXMgKi8KLSNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIJCQlcCi0JCSAgICAgOiA6ICJyIiAofihtYXNrKSksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKLQotI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAib3JsICUwLCUxIgkJCQlcCi0JCSAgICAgOiA6ICJyIiAobWFzayksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKLQotLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24geDg2ICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KLS8qIEFuIDY0Yml0IGF0b21pYyB0eXBlICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1NjQgX19hbGlnbmVkKDgpIGNvdW50ZXI7Ci19IGF0b21pYzY0X3Q7Ci0KLSNkZWZpbmUgQVRPTUlDNjRfSU5JVCh2YWwpCXsgKHZhbCkgfQotCi1leHRlcm4gdTY0IGF0b21pYzY0X2NtcHhjaGcoYXRvbWljNjRfdCAqcHRyLCB1NjQgb2xkX3ZhbCwgdTY0IG5ld192YWwpOwotCi0vKioKLSAqIGF0b21pYzY0X3hjaGcgLSB4Y2hnIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKiBAbmV3X3ZhbDogIHZhbHVlIHRvIGFzc2lnbgotICoKLSAqIEF0b21pY2FsbHkgeGNoZ3MgdGhlIHZhbHVlIG9mIEBwdHIgdG8gQG5ld192YWwgYW5kIHJldHVybnMKLSAqIHRoZSBvbGQgdmFsdWUuCi0gKi8KLWV4dGVybiB1NjQgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBuZXdfdmFsKTsKLQotLyoqCi0gKiBhdG9taWM2NF9zZXQgLSBzZXQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqIEBuZXdfdmFsOiAgdmFsdWUgdG8gYXNzaWduCi0gKgotICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAcHRyIHRvIEBuZXdfdmFsLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqcHRyLCB1NjQgbmV3X3ZhbCk7Ci0KLS8qKgotICogYXRvbWljNjRfcmVhZCAtIHJlYWQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAcHRyIGFuZCByZXR1cm5zIGl0LgotICovCi1zdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnB0cikKLXsKLQl1NjQgcmVzOwotCi0JLyoKLQkgKiBOb3RlLCB3ZSBpbmxpbmUgdGhpcyBhdG9taWM2NF90IHByaW1pdGl2ZSBiZWNhdXNlCi0JICogaXQgb25seSBjbG9iYmVycyBFQVgvRURYIGFuZCBsZWF2ZXMgdGhlIG90aGVycwotCSAqIHVudG91Y2hlZC4gV2UgYWxzbyAoc29tZXdoYXQgc3VidGx5KSByZWx5IG9uIHRoZQotCSAqIGZhY3QgdGhhdCBjbXB4Y2hnOGIgcmV0dXJucyB0aGUgY3VycmVudCA2NC1iaXQgdmFsdWUKLQkgKiBvZiB0aGUgbWVtb3J5IGxvY2F0aW9uIHdlIGFyZSB0b3VjaGluZzoKLQkgKi8KLQlhc20gdm9sYXRpbGUoCi0JCSJtb3YgJSVlYngsICUlZWF4XG5cdCIKLQkJIm1vdiAlJWVjeCwgJSVlZHhcblx0IgotCQlMT0NLX1BSRUZJWCAiY21weGNoZzhiICUxXG4iCi0JCQk6ICI9JkEiIChyZXMpCi0JCQk6ICJtIiAoKnB0cikKLQkJKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLWV4dGVybiB1NjQgYXRvbWljNjRfcmVhZChhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ciBhbmQgcmV0dXJucyBAZGVsdGEgKyAqQHB0cgotICovCi1leHRlcm4gdTY0IGF0b21pYzY0X2FkZF9yZXR1cm4odTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0vKgotICogT3RoZXIgdmFyaWFudHMgd2l0aCBkaWZmZXJlbnQgYXJpdGhtZXRpYyBvcGVyYXRvcnM6Ci0gKi8KLWV4dGVybiB1NjQgYXRvbWljNjRfc3ViX3JldHVybih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci1leHRlcm4gdTY0IGF0b21pYzY0X2luY19yZXR1cm4oYXRvbWljNjRfdCAqcHRyKTsKLWV4dGVybiB1NjQgYXRvbWljNjRfZGVjX3JldHVybihhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9hZGQodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X3N1YiAtIHN1YnRyYWN0IHRoZSBhdG9taWM2NCB2YXJpYWJsZQotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGRlbHRhIGZyb20gQHB0ci4KLSAqLwotZXh0ZXJuIHZvaWQgYXRvbWljNjRfc3ViKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGRlbHRhIGZyb20gQHB0ciBhbmQgcmV0dXJucwotICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1leHRlcm4gaW50IGF0b21pYzY0X3N1Yl9hbmRfdGVzdCh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfaW5jIC0gaW5jcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAcHRyIGJ5IDEuCi0gKi8KLWV4dGVybiB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQotICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHB0ciBieSAxLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEBwdHIgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1leHRlcm4gaW50IGF0b21pYzY0X2RlY19hbmRfdGVzdChhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAotICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHB0ciBieSAxCi0gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLWV4dGVybiBpbnQgYXRvbWljNjRfaW5jX2FuZF90ZXN0KGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyIGFuZCByZXR1cm5zIHRydWUKLSAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KLSAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLwotZXh0ZXJuIGludCBhdG9taWM2NF9hZGRfbmVnYXRpdmUodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KLSNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwNWRjMi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4NSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0FUT01JQ182NF9ICi0jZGVmaW5lIF9BU01fWDg2X0FUT01JQ182NF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgotI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+Ci0KLS8qCi0gKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgotICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KLSAqLwotCi0jZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KLQotLyoqCi0gKiBhdG9taWNfcmVhZCAtIHJlYWQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQotewotCXJldHVybiB2LT5jb3VudGVyOwotfQotCi0vKioKLSAqIGF0b21pY19zZXQgLSBzZXQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAaTogcmVxdWlyZWQgdmFsdWUKLSAqCi0gKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCi17Ci0Jdi0+Y291bnRlciA9IGk7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYyB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucwotICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTIsJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jIC0gaW5jcmVtZW50IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2RlYyAtIGRlY3JlbWVudCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2luY19hbmRfdGVzdChhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKLSAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KLSAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgYW5kIHJldHVybgotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCWludCBfX2kgPSBpOwotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZGwgJTAsICUxIgotCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gaSArIF9faTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7Ci19Ci0KLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSkKLSNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLCB2KSkKLQotLyogVGhlIDY0LWJpdCBhdG9taWMgdHlwZSAqLwotCi0jZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQotCi0vKioKLSAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KLSAqIERvZXNuJ3QgaW1wbHkgYSByZWFkIG1lbW9yeSBiYXJyaWVyLgotICovCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQotewotCXJldHVybiB2LT5jb3VudGVyOwotfQotCi0vKioKLSAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWM2NCB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKiBAaTogcmVxdWlyZWQgdmFsdWUKLSAqCi0gKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnYsIGxvbmcgaSkKLXsKLQl2LT5jb3VudGVyID0gaTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9hZGQobG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkcSAlMSwlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJxICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKLSAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YnEgJTIsJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNxICUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2RlYyAtIGRlY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9kZWMoYXRvbWljNjRfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKLSAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKLSAqIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY3EgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlCi0gKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCi0gKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZShsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUyLCUwOyBzZXRzICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2Ci0gKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQlsb25nIF9faSA9IGk7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkcSAlMCwgJTE7IgotCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gaSArIF9faTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCXJldHVybiBhdG9taWM2NF9hZGRfcmV0dXJuKC1pLCB2KTsKLX0KLQotI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpICAoYXRvbWljNjRfYWRkX3JldHVybigxLCAodikpKQotI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpICAoYXRvbWljNjRfc3ViX3JldHVybigxLCAodikpKQotCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LCBsb25nIG9sZCwgbG9uZyBuZXcpCi17Ci0JcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqdiwgbG9uZyBuZXcpCi17Ci0JcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKLXsKLQlyZXR1cm4gY21weGNoZygmdi0+Y291bnRlciwgb2xkLCBuZXcpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljX3hjaGcoYXRvbWljX3QgKnYsIGludCBuZXcpCi17Ci0JcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KLSAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgotICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCi17Ci0JaW50IGMsIG9sZDsKLQljID0gYXRvbWljX3JlYWQodik7Ci0JZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQotCQkJYnJlYWs7Ci0JCW9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7Ci0JCWlmIChsaWtlbHkob2xkID09IGMpKQotCQkJYnJlYWs7Ci0JCWMgPSBvbGQ7Ci0JfQotCXJldHVybiBjICE9ICh1KTsKLX0KLQotI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKLQotLyoqCi0gKiBhdG9taWM2NF9hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAotICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KLSAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgotICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgbG9uZyBhLCBsb25nIHUpCi17Ci0JbG9uZyBjLCBvbGQ7Ci0JYyA9IGF0b21pYzY0X3JlYWQodik7Ci0JZm9yICg7OykgewotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQotCQkJYnJlYWs7Ci0JCW9sZCA9IGF0b21pYzY0X2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0JcmV0dXJuIGMgIT0gKHUpOwotfQotCi0vKioKLSAqIGF0b21pY19pbmNfc2hvcnQgLSBpbmNyZW1lbnQgb2YgYSBzaG9ydCBpbnRlZ2VyCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGludAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyAxIHRvIEB2Ci0gKiBSZXR1cm5zIHRoZSBuZXcgdmFsdWUgb2YgQHUKLSAqLwotc3RhdGljIGlubGluZSBzaG9ydCBpbnQgYXRvbWljX2luY19zaG9ydChzaG9ydCBpbnQgKnYpCi17Ci0JYXNtKExPQ0tfUFJFRklYICJhZGR3ICQxLCAlMCIgOiAiK20iICgqdikpOwotCXJldHVybiAqdjsKLX0KLQotLyoqCi0gKiBhdG9taWNfb3JfbG9uZyAtIE9SIG9mIHR3byBsb25nIGludGVnZXJzCi0gKiBAdjE6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCi0gKiBAdjI6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCi0gKgotICogQXRvbWljYWxseSBPUnMgQHYxIGFuZCBAdjIKLSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgT1IKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19vcl9sb25nKHVuc2lnbmVkIGxvbmcgKnYxLCB1bnNpZ25lZCBsb25nIHYyKQotewotCWFzbShMT0NLX1BSRUZJWCAib3JxICUxLCAlMCIgOiAiK20iICgqdjEpIDogInIiICh2MikpOwotfQotCi0jZGVmaW5lIGF0b21pYzY0X2luY19ub3RfemVybyh2KSBhdG9taWM2NF9hZGRfdW5sZXNzKCh2KSwgMSwgMCkKLQotLyogVGhlc2UgYXJlIHg4Ni1zcGVjaWZpYywgdXNlZCBieSBzb21lIGhlYWRlciBmaWxlcyAqLwotI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKQkJCQkJXAotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIJCQkJXAotCQkgICAgIDogOiAiciIgKH4obWFzaykpLCAibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCi0KLSNkZWZpbmUgYXRvbWljX3NldF9tYXNrKG1hc2ssIGFkZHIpCQkJCQlcCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJvcmwgJTAsJTEiCQkJCVwKLQkJICAgICA6IDogInIiICgodW5zaWduZWQpKG1hc2spKSwgIm0iICgqKGFkZHIpKQkJXAotCQkgICAgIDogIm1lbW9yeSIpCi0KLS8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCWJhcnJpZXIoKQotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLWxvbmcuaD4KLSNlbmRpZiAvKiBfQVNNX1g4Nl9BVE9NSUNfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IDYzN2UxZWMuLjBjZDgyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKQEAgLTE2OCw2ICsxNjgsMTAgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfRkxFWFBSSU9SSVRZICg4KjMyKyAyKSAvKiBJbnRlbCBGbGV4UHJpb3JpdHkgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfRVBUICAgICAgICAgKDgqMzIrIDMpIC8qIEludGVsIEV4dGVuZGVkIFBhZ2UgVGFibGUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfVlBJRCAgICAgICAgKDgqMzIrIDQpIC8qIEludGVsIFZpcnR1YWwgUHJvY2Vzc29yIElEICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05QVAkJKDgqMzIrNSkgIC8qIEFNRCBOZXN0ZWQgUGFnZSBUYWJsZSBzdXBwb3J0ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0xCUlYJKDgqMzIrNikgIC8qIEFNRCBMQlIgVmlydHVhbGl6YXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9TVk1MCSg4KjMyKzcpICAvKiAic3ZtX2xvY2siIEFNRCBTVk0gbG9ja2luZyBNU1IgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTlJJUFMJKDgqMzIrOCkgIC8qICJucmlwX3NhdmUiIEFNRCBTVk0gbmV4dF9yaXAgc2F2ZSAqLwogCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oCmluZGV4IDgyNDBmNzYuLmI4MTAwMmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaApAQCAtMTQsNiArMTQsOSBAQAogICAgd2hpY2ggZGVidWdnaW5nIHJlZ2lzdGVyIHdhcyByZXNwb25zaWJsZSBmb3IgdGhlIHRyYXAuICBUaGUgb3RoZXIgYml0cwogICAgYXJlIGVpdGhlciByZXNlcnZlZCBvciBub3Qgb2YgaW50ZXJlc3QgdG8gdXMuICovCiAKKy8qIERlZmluZSByZXNlcnZlZCBiaXRzIGluIERSNiB3aGljaCBhcmUgYWx3YXlzIHNldCB0byAxICovCisjZGVmaW5lIERSNl9SRVNFUlZFRAkoMHhGRkZGMEZGMCkKKwogI2RlZmluZSBEUl9UUkFQMAkoMHgxKQkJLyogZGIwICovCiAjZGVmaW5lIERSX1RSQVAxCSgweDIpCQkvKiBkYjEgKi8KICNkZWZpbmUgRFJfVFJBUDIJKDB4NCkJCS8qIGRiMiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKaW5kZXggNTMwMTg0Ni4uMjUxOWQwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oCkBAIC0xMiwxMCArMTIsNiBAQAogCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiBleHRlcm4gaW50IGZiX2lzX3ByaW1hcnlfZGV2aWNlKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgeyByZXR1cm4gMDsgfQotI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9GQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDE0Zjk4OTAuLjYzNWYwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0xMTgsMTQgKzExOCwyMCBAQAogCSAqIDI1NiB0ZW1wb3JhcnkgYm9vdC10aW1lIG1hcHBpbmdzLCB1c2VkIGJ5IGVhcmx5X2lvcmVtYXAoKSwKIAkgKiBiZWZvcmUgaW9yZW1hcCgpIGlzIGZ1bmN0aW9uYWwuCiAJICoKLQkgKiBXZSByb3VuZCBpdCB1cCB0byB0aGUgbmV4dCAyNTYgcGFnZXMgYm91bmRhcnkgc28gdGhhdCB3ZQotCSAqIGNhbiBoYXZlIGEgc2luZ2xlIHBnZCBlbnRyeSBhbmQgYSBzaW5nbGUgcHRlIHRhYmxlOgorCSAqIElmIG5lY2Vzc2FyeSB3ZSByb3VuZCBpdCB1cCB0byB0aGUgbmV4dCAyNTYgcGFnZXMgYm91bmRhcnkgc28KKwkgKiB0aGF0IHdlIGNhbiBoYXZlIGEgc2luZ2xlIHBnZCBlbnRyeSBhbmQgYSBzaW5nbGUgcHRlIHRhYmxlOgogCSAqLwogI2RlZmluZSBOUl9GSVhfQlRNQVBTCQk2NAogI2RlZmluZSBGSVhfQlRNQVBTX1NMT1RTCTQKLQlGSVhfQlRNQVBfRU5EID0gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIDI1NiAtCi0JCQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyAmIDI1NSksCi0JRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIE5SX0ZJWF9CVE1BUFMqRklYX0JUTUFQU19TTE9UUyAtIDEsCisjZGVmaW5lIFRPVEFMX0ZJWF9CVE1BUFMJKE5SX0ZJWF9CVE1BUFMgKiBGSVhfQlRNQVBTX1NMT1RTKQorCUZJWF9CVE1BUF9FTkQgPQorCSAoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyBeCisJICAoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIFRPVEFMX0ZJWF9CVE1BUFMgLSAxKSkgJgorCSAtUFRSU19QRVJfUFRFCisJID8gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIFRPVEFMX0ZJWF9CVE1BUFMgLQorCSAgIChfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICYgKFRPVEFMX0ZJWF9CVE1BUFMgLSAxKSkKKwkgOiBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAorCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBUT1RBTF9GSVhfQlRNQVBTIC0gMSwKICNpZmRlZiBDT05GSUdfUFJPVklERV9PSENJMTM5NF9ETUFfSU5JVAogCUZJWF9PSENJMTM5NF9CQVNFLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKaW5kZXggZWJmYjhhOS4uZGEyOTMwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaApAQCAtMzMsOCArMzMsMTYgQEAKIGV4dGVybiBpbnQgZHVtcF9mcHUoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgKik7CiAKIGV4dGVybiB1c2VyX3JlZ3NldF9hY3RpdmVfZm4gZnByZWdzX2FjdGl2ZSwgeGZwcmVnc19hY3RpdmU7Ci1leHRlcm4gdXNlcl9yZWdzZXRfZ2V0X2ZuIGZwcmVnc19nZXQsIHhmcHJlZ3NfZ2V0LCBmcHJlZ3Nfc29mdF9nZXQ7Ci1leHRlcm4gdXNlcl9yZWdzZXRfc2V0X2ZuIGZwcmVnc19zZXQsIHhmcHJlZ3Nfc2V0LCBmcHJlZ3Nfc29mdF9zZXQ7CitleHRlcm4gdXNlcl9yZWdzZXRfZ2V0X2ZuIGZwcmVnc19nZXQsIHhmcHJlZ3NfZ2V0LCBmcHJlZ3Nfc29mdF9nZXQsCisJCQkJeHN0YXRlcmVnc19nZXQ7CitleHRlcm4gdXNlcl9yZWdzZXRfc2V0X2ZuIGZwcmVnc19zZXQsIHhmcHJlZ3Nfc2V0LCBmcHJlZ3Nfc29mdF9zZXQsCisJCQkJIHhzdGF0ZXJlZ3Nfc2V0OworCisvKgorICogeHN0YXRlcmVnc19hY3RpdmUgPT0gZnByZWdzX2FjdGl2ZS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBjb21tZW50CisgKiBhdCB0aGUgZGVmaW5pdGlvbiBvZiBmcHJlZ3NfYWN0aXZlLgorICovCisjZGVmaW5lIHhzdGF0ZXJlZ3NfYWN0aXZlCWZwcmVnc19hY3RpdmUKIAogZXh0ZXJuIHN0cnVjdCBfZnB4X3N3X2J5dGVzIGZ4X3N3X3Jlc2VydmVkOwogI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNzM3MzkzMi4uYTFkY2ZhMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCkBAIC0xLDggKzEsNDIgQEAKICNpZm5kZWYgX0FTTV9YODZfSU9fSAogI2RlZmluZSBfQVNNX1g4Nl9JT19ICiAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucworICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQorICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKKyAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCisgKgorICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCisgKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0CisgKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKKyAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKKyAqIG1pc3Rha2Ugc29tZXdoZXJlLgorICovCisKKy8qCisgKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCisgKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCisgKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6CisgKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCisgKgorICoJCUxpbnVzCisgKi8KKworIC8qCisgICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKKyAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCisgICoKKyAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKKyAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCisgICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CisgICovCisKICNkZWZpbmUgQVJDSF9IQVNfSU9SRU1BUF9XQwogCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNzMsMTEgKzIwNywxMjYgQEAKIGV4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBpbmNsdWRlICJpb18zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAiaW9fNjQuaCIKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgorCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisvKgorICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIHNpemVfdCBjb3VudCkKK3sKKwltZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIHZhbCwgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgc2l6ZV90IGNvdW50KQoreworCW1lbWNweShkc3QsIChjb25zdCB2b2lkIF9fZm9yY2UgKilzcmMsIGNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCittZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCit7CisJbWVtY3B5KCh2b2lkIF9fZm9yY2UgKilkc3QsIHNyYywgY291bnQpOworfQorCisvKgorICogSVNBIHNwYWNlIGlzICdhbHdheXMgbWFwcGVkJyBvbiBhIHR5cGljYWwgeDg2IHN5c3RlbSwgbm8gbmVlZCB0bworICogZXhwbGljaXRseSBpb3JlbWFwKCkgaXQuIFRoZSBmYWN0IHRoYXQgdGhlIElTQSBJTyBzcGFjZSBpcyBtYXBwZWQKKyAqIHRvIFBBR0VfT0ZGU0VUIGlzIHB1cmUgY29pbmNpZGVuY2UgLSBpdCBkb2VzIG5vdCBtZWFuIElTQSB2YWx1ZXMKKyAqIGFyZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcG9pbnRlciBjYW4gYmUKKyAqIHVzZWQgYXMgdGhlIElPLWFyZWEgcG9pbnRlciAoaXQgY2FuIGJlIGlvdW5tYXBwZWQgYXMgd2VsbCwgc28gdGhlCisgKiBhbmFsb2d5IHdpdGggUENJIGlzIHF1aXRlIGxhcmdlKToKKyAqLworI2RlZmluZSBfX0lTQV9JT19iYXNlICgoY2hhciBfX2lvbWVtICopKFBBR0VfT0ZGU0VUKSkKKworLyoKKyAqCUNhY2hlIG1hbmFnZW1lbnQKKyAqCisgKglUaGlzIG5lZWRlZCBmb3IgdHdvIGNhc2VzCisgKgkxLiBPdXQgb2Ygb3JkZXIgYXdhcmUgcHJvY2Vzc29ycworICoJMi4gQWNjaWRlbnRhbGx5IG91dCBvZiBvcmRlciBwcm9jZXNzb3JzIChQUHJvIGVycmF0YSAjNTEpCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3dyaXRlX2J1ZmZlcnModm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCisJYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOwogI2VuZGlmCit9CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKK2V4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKKworZXh0ZXJuIGludCBpb19kZWxheV90eXBlOworZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQoreworCW5hdGl2ZV9pb19kZWxheSgpOworI2lmZGVmIFJFQUxMWV9TTE9XX0lPCisJbmF0aXZlX2lvX2RlbGF5KCk7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKyNkZWZpbmUgQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJvdXQiICNid2wgIiAlIiAjYncgIjAsICV3MSIJCQlcCisJCSAgICAgOiA6ICJhIih2YWx1ZSksICJOZCIocG9ydCkpOwkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkJCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCB0eXBlIHZhbHVlOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUoImluIiAjYndsICIgJXcxLCAlIiAjYncgIjAiCQkJXAorCQkgICAgIDogIj1hIih2YWx1ZSkgOiAiTmQiKHBvcnQpKTsJCQlcCisJcmV0dXJuIHZhbHVlOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfcCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKK3sJCQkJCQkJCQlcCisJb3V0IyNid2wodmFsdWUsIHBvcnQpOwkJCQkJCVwKKwlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfcChpbnQgcG9ydCkJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsKHBvcnQpOwkJCQlcCisJc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKKwlyZXR1cm4gdmFsdWU7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0cyMjYndsKGludCBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSBcCit7CQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgicmVwOyBvdXRzIiAjYndsCQkJCQlcCisJCSAgICAgOiAiK1MiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIGlucyMjYndsKGludCBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQlcCit7CQkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSgicmVwOyBpbnMiICNid2wJCQkJCVwKKwkJICAgICA6ICIrRCIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsJCVwKK30KKworQlVJTERJTyhiLCBiLCBjaGFyKQorQlVJTERJTyh3LCB3LCBzaG9ydCkKK0JVSUxESU8obCwgLCBpbnQpCiAKIGV4dGVybiB2b2lkICp4bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMpOwogZXh0ZXJuIHZvaWQgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyOTk5MDAuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0lPXzMyX0gKLSNkZWZpbmUgX0FTTV9YODZfSU9fMzJfSAotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCi0gKiBpbmIvaW53L2lubC9vdXRiL291dHcvb3V0bCBhbmQgdGhlICJzdHJpbmcgdmVyc2lvbnMiIG9mIHRoZSBzYW1lCi0gKiAoaW5zYi9pbnN3L2luc2wvb3V0c2Ivb3V0c3cvb3V0c2wpLiBZb3UgY2FuIGFsc28gdXNlICJwYXVzaW5nIgotICogdmVyc2lvbnMgb2YgdGhlIHNpbmdsZS1JTyBpbnN0cnVjdGlvbnMgKGluYl9wL2lud19wLy4uKS4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIG9iZnVzY2F0aW5nOiBpdCdzIGp1c3QgY29tcGxpY2F0ZWQKLSAqIHRvIChhKSBoYW5kbGUgaXQgYWxsIGluIGEgd2F5IHRoYXQgbWFrZXMgZ2NjIGFibGUgdG8gb3B0aW1pemUgaXQKLSAqIGFzIHdlbGwgYXMgcG9zc2libGUgYW5kIChiKSB0cnlpbmcgdG8gYXZvaWQgd3JpdGluZyB0aGUgc2FtZSB0aGluZwotICogb3ZlciBhbmQgb3ZlciBhZ2FpbiB3aXRoIHNsaWdodCB2YXJpYXRpb25zIGFuZCBwb3NzaWJseSBtYWtpbmcgYQotICogbWlzdGFrZSBzb21ld2hlcmUuCi0gKi8KLQotLyoKLSAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KLSAqIHRoZSB0d28gc2hvcnQganVtcHM6IHVzaW5nIG91dGIncyB0byBhIG5vbmV4aXN0ZW50IHBvcnQgc2VlbXMKLSAqIHRvIGd1YXJhbnRlZSBiZXR0ZXIgdGltaW5ncyBldmVuIG9uIGZhc3QgbWFjaGluZXMuCi0gKgotICogT24gdGhlIG90aGVyIGhhbmQsIEknZCBsaWtlIHRvIGJlIHN1cmUgb2YgYSBub24tZXhpc3RlbnQgcG9ydDoKLSAqIEkgZmVlbCBhIGJpdCB1bnNhZmUgYWJvdXQgdXNpbmcgMHg4MCAoc2hvdWxkIGJlIHNhZmUsIHRob3VnaCkKLSAqCi0gKgkJTGludXMKLSAqLwotCi0gLyoKLSAgKiAgQml0IHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZCBieSBKYW4gSHViaWNrYQotICAqICBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OS4KLSAgKgotICAqICBpc2FfbWVtc2V0X2lvLCBpc2FfbWVtY3B5X2Zyb21pbywgaXNhX21lbWNweV90b2lvIGFkZGVkLAotICAqICBpc2FfcmVhZFt3bF0gYW5kIGlzYV93cml0ZVt3bF0gZml4ZWQKLSAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAgKi8KLQotI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCi0jZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0vKgotICogQ29udmVydCBhIHZpcnR1YWwgY2FjaGVkIHBvaW50ZXIgdG8gYW4gdW5jYWNoZWQgcG9pbnRlcgotICovCi0jZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgY2hhciB2YWwsIGludCBjb3VudCkKLXsKLQltZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIHZhbCwgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lbWNweV9mcm9taW8odm9pZCAqZHN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgaW50IGNvdW50KQotewotCV9fbWVtY3B5KGRzdCwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXNyYywgY291bnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpzcmMsIGludCBjb3VudCkKLXsKLQlfX21lbWNweSgodm9pZCBfX2ZvcmNlICopZHN0LCBzcmMsIGNvdW50KTsKLX0KLQotLyoKLSAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KLSAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCi0gKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCi0gKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCi0gKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQotICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6Ci0gKi8KLSNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCi0KLS8qCi0gKglDYWNoZSBtYW5hZ2VtZW50Ci0gKgotICoJVGhpcyBuZWVkZWQgZm9yIHR3byBjYXNlcwotICoJMS4gT3V0IG9mIG9yZGVyIGF3YXJlIHByb2Nlc3NvcnMKLSAqCTIuIEFjY2lkZW50YWxseSBvdXQgb2Ygb3JkZXIgcHJvY2Vzc29ycyAoUFBybyBlcnJhdGEgIzUxKQotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfT09TVE9SRSkgfHwgZGVmaW5lZChDT05GSUdfWDg2X1BQUk9fRkVOQ0UpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF93cml0ZV9idWZmZXJzKHZvaWQpCi17Ci0JYXNtIHZvbGF0aWxlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOwotfQotCi0jZWxzZQotCi0jZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKSBkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi1leHRlcm4gdm9pZCBuYXRpdmVfaW9fZGVsYXkodm9pZCk7Ci0KLWV4dGVybiBpbnQgaW9fZGVsYXlfdHlwZTsKLWV4dGVybiB2b2lkIGlvX2RlbGF5X2luaXQodm9pZCk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkKLSNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbG93X2Rvd25faW8odm9pZCkKLXsKLQluYXRpdmVfaW9fZGVsYXkoKTsKLSNpZmRlZiBSRUFMTFlfU0xPV19JTwotCW5hdGl2ZV9pb19kZWxheSgpOwotCW5hdGl2ZV9pb19kZWxheSgpOwotCW5hdGl2ZV9pb19kZWxheSgpOwotI2VuZGlmCi19Ci0KLSNlbmRpZgotCi0jZGVmaW5lIF9fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKLXsJCQkJCQkJCVwKLQlvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsJCQkJXAotfQkJCQkJCQkJXAotCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQlcCi0JcmV0dXJuIGluIyNid2wjI19sb2NhbChwb3J0KTsJCQkJXAotfQotCi0jZGVmaW5lIEJVSUxESU8oYndsLCBidywgdHlwZSkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19sb2NhbCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoIm91dCIgI2J3bCAiICUiICNidyAiMCwgJXcxIgkJXAotCQkgICAgIDogOiAiYSIodmFsdWUpLCAiTmQiKHBvcnQpKTsJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19sb2NhbChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIHR5cGUgdmFsdWU7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgiaW4iICNid2wgIiAldzEsICUiICNidyAiMCIJCVwKLQkJICAgICA6ICI9YSIodmFsdWUpIDogIk5kIihwb3J0KSk7CQkJXAotCXJldHVybiB2YWx1ZTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCVwKLXsJCQkJCQkJCQlcCi0Jb3V0IyNid2wjI19sb2NhbCh2YWx1ZSwgcG9ydCk7CQkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX2xvY2FsX3AoaW50IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOwkJCVwKLQlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAotCXJldHVybiB2YWx1ZTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLV9fQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpCQlcCi17CQkJCQkJCQkJXAotCW91dCMjYndsKHZhbHVlLCBwb3J0KTsJCQkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX3AoaW50IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bChwb3J0KTsJCQkJXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi0JcmV0dXJuIHZhbHVlOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dHMjI2J3bChpbnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoInJlcDsgb3V0cyIgI2J3bAkJCQkJXAotCQkgICAgIDogIitTIihhZGRyKSwgIitjIihjb3VudCkgOiAiZCIocG9ydCkpOwkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI2J3bChpbnQgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoInJlcDsgaW5zIiAjYndsCQkJCQlcCi0JCSAgICAgOiAiK0QiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCi19Ci0KLUJVSUxESU8oYiwgYiwgY2hhcikKLUJVSUxESU8odywgdywgc2hvcnQpCi1CVUlMRElPKGwsICwgaW50KQotCi0jZW5kaWYgLyogX0FTTV9YODZfSU9fMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NDA2NzguLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X0lPXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfSU9fNjRfSAotCi0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgeDg2IElPIGluc3RydWN0aW9ucwotICogaW5iL2ludy9pbmwvb3V0Yi9vdXR3L291dGwgYW5kIHRoZSAic3RyaW5nIHZlcnNpb25zIiBvZiB0aGUgc2FtZQotICogKGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsKS4gWW91IGNhbiBhbHNvIHVzZSAicGF1c2luZyIKLSAqIHZlcnNpb25zIG9mIHRoZSBzaW5nbGUtSU8gaW5zdHJ1Y3Rpb25zIChpbmJfcC9pbndfcC8uLikuCi0gKgotICogVGhpcyBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBvYmZ1c2NhdGluZzogaXQncyBqdXN0IGNvbXBsaWNhdGVkCi0gKiB0byAoYSkgaGFuZGxlIGl0IGFsbCBpbiBhIHdheSB0aGF0IG1ha2VzIGdjYyBhYmxlIHRvIG9wdGltaXplIGl0Ci0gKiBhcyB3ZWxsIGFzIHBvc3NpYmxlIGFuZCAoYikgdHJ5aW5nIHRvIGF2b2lkIHdyaXRpbmcgdGhlIHNhbWUgdGhpbmcKLSAqIG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aCBzbGlnaHQgdmFyaWF0aW9ucyBhbmQgcG9zc2libHkgbWFraW5nIGEKLSAqIG1pc3Rha2Ugc29tZXdoZXJlLgotICovCi0KLS8qCi0gKiBUaGFua3MgdG8gSmFtZXMgdmFuIEFydHNkYWxlbiBmb3IgYSBiZXR0ZXIgdGltaW5nLWZpeCB0aGFuCi0gKiB0aGUgdHdvIHNob3J0IGp1bXBzOiB1c2luZyBvdXRiJ3MgdG8gYSBub25leGlzdGVudCBwb3J0IHNlZW1zCi0gKiB0byBndWFyYW50ZWUgYmV0dGVyIHRpbWluZ3MgZXZlbiBvbiBmYXN0IG1hY2hpbmVzLgotICoKLSAqIE9uIHRoZSBvdGhlciBoYW5kLCBJJ2QgbGlrZSB0byBiZSBzdXJlIG9mIGEgbm9uLWV4aXN0ZW50IHBvcnQ6Ci0gKiBJIGZlZWwgYSBiaXQgdW5zYWZlIGFib3V0IHVzaW5nIDB4ODAgKHNob3VsZCBiZSBzYWZlLCB0aG91Z2gpCi0gKgotICoJCUxpbnVzCi0gKi8KLQotIC8qCi0gICogIEJpdCBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgYnkgSmFuIEh1Ymlja2EKLSAgKiAgU3VwcG9ydCBvZiBCSUdNRU0gYWRkZWQgYnkgR2VyaGFyZCBXaWNoZXJ0LCBTaWVtZW5zIEFHLCBKdWx5IDE5OTkuCi0gICoKLSAgKiAgaXNhX21lbXNldF9pbywgaXNhX21lbWNweV9mcm9taW8sIGlzYV9tZW1jcHlfdG9pbyBhZGRlZCwKLSAgKiAgaXNhX3JlYWRbd2xdIGFuZCBpc2Ffd3JpdGVbd2xdIGZpeGVkCi0gICogIC0gQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+Ci0gICovCi0KLWV4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKLQotZXh0ZXJuIGludCBpb19kZWxheV90eXBlOwotZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQotI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQotewotCW5hdGl2ZV9pb19kZWxheSgpOwotI2lmZGVmIFJFQUxMWV9TTE9XX0lPCi0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0vKgotICogVGFsayBhYm91dCBtaXN1c2luZyBtYWNyb3MuLgotICovCi0jZGVmaW5lIF9fT1VUMShzLCB4KQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNzKHVuc2lnbmVkIHggdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsKLQotI2RlZmluZSBfX09VVDIocywgczEsIHMyKQkJCQlcCi1hc20gdm9sYXRpbGUgKCJvdXQiICNzICIgJSIgczEgIjAsJSIgczIgIjEiCi0KLSNpZm5kZWYgUkVBTExZX1NMT1dfSU8KLSNkZWZpbmUgUkVBTExZX1NMT1dfSU8KLSNkZWZpbmUgVU5TRVRfUkVBTExZX1NMT1dfSU8KLSNlbmRpZgotCi0jZGVmaW5lIF9fT1VUKHMsIHMxLCB4KQkJCQkJCQlcCi0JX19PVVQxKHMsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsJXAotCX0JCQkJCQkJCVwKLQlfX09VVDEocyMjX3AsIHgpIF9fT1VUMihzLCBzMSwgInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsgXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi19Ci0KLSNkZWZpbmUgX19JTjEocykJCQkJCQkJXAotc3RhdGljIGlubGluZSBSRVRVUk5fVFlQRSBpbiMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0KQkJCVwKLXsJCQkJCQkJCQlcCi0JUkVUVVJOX1RZUEUgX3Y7Ci0KLSNkZWZpbmUgX19JTjIocywgczEsIHMyKQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJpbiIgI3MgIiAlIiBzMiAiMSwlIiBzMSAiMCIKLQotI2RlZmluZSBfX0lOKHMsIHMxLCBpLi4uKQkJCQkJCVwKLQlfX0lOMShzKSBfX0lOMihzLCBzMSwgInciKSA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpLCAjI2kpOwlcCi0JcmV0dXJuIF92OwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotCV9fSU4xKHMjI19wKSBfX0lOMihzLCBzMSwgInciKSA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpLCAjI2kpOwlcCi0Jc2xvd19kb3duX2lvKCk7IFwKLQlyZXR1cm4gX3Y7IH0KLQotI2lmZGVmIFVOU0VUX1JFQUxMWV9TTE9XX0lPCi0jdW5kZWYgUkVBTExZX1NMT1dfSU8KLSNlbmRpZgotCi0jZGVmaW5lIF9fSU5TKHMpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqYWRkciwJCVwKLQkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCkJCQkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJyZXAgOyBpbnMiICNzCQkJCQlcCi0JCSAgICAgIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50KQkJCVwKLQkJICAgICAgOiAiZCIgKHBvcnQpLCAiMCIgKGFkZHIpLCAiMSIgKGNvdW50KSk7CQlcCi19Ci0KLSNkZWZpbmUgX19PVVRTKHMpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsCVwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQpCQkJCVwKLXsJCQkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlICgicmVwIDsgb3V0cyIgI3MJCQkJCVwKLQkJICAgICAgOiAiPVMiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJXAotCQkgICAgICA6ICJkIiAocG9ydCksICIwIiAoYWRkciksICIxIiAoY291bnQpKTsJCVwKLX0KLQotI2RlZmluZSBSRVRVUk5fVFlQRSB1bnNpZ25lZCBjaGFyCi1fX0lOKGIsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIHNob3J0Ci1fX0lOKHcsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIGludAotX19JTihsLCAiIikKLSN1bmRlZiBSRVRVUk5fVFlQRQotCi1fX09VVChiLCAiYiIsIGNoYXIpCi1fX09VVCh3LCAidyIsIHNob3J0KQotX19PVVQobCwgLCBpbnQpCi0KLV9fSU5TKGIpCi1fX0lOUyh3KQotX19JTlMobCkKLQotX19PVVRTKGIpCi1fX09VVFModykKLV9fT1VUUyhsKQotCi0jaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCi0KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb21hcC5oPgotCi12b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkKTsKLXZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKTsKLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwKLQkJCQkgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X2Zyb21pbyh0bywgKHVuc2lnbmVkIGxvbmcpZnJvbSwgbGVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCi0JCQkgICAgICAgdW5zaWduZWQgbGVuKQotewotCV9fbWVtY3B5X3RvaW8oKHVuc2lnbmVkIGxvbmcpdG8sIGZyb20sIGxlbik7Ci19Ci0KLXZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSwgaW50IGIsIHNpemVfdCBjKTsKLQotLyoKLSAqIElTQSBzcGFjZSBpcyAnYWx3YXlzIG1hcHBlZCcgb24gYSB0eXBpY2FsIHg4NiBzeXN0ZW0sIG5vIG5lZWQgdG8KLSAqIGV4cGxpY2l0bHkgaW9yZW1hcCgpIGl0LiBUaGUgZmFjdCB0aGF0IHRoZSBJU0EgSU8gc3BhY2UgaXMgbWFwcGVkCi0gKiB0byBQQUdFX09GRlNFVCBpcyBwdXJlIGNvaW5jaWRlbmNlIC0gaXQgZG9lcyBub3QgbWVhbiBJU0EgdmFsdWVzCi0gKiBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHBvaW50ZXIgY2FuIGJlCi0gKiB1c2VkIGFzIHRoZSBJTy1hcmVhIHBvaW50ZXIgKGl0IGNhbiBiZSBpb3VubWFwcGVkIGFzIHdlbGwsIHNvIHRoZQotICogYW5hbG9neSB3aXRoIFBDSSBpcyBxdWl0ZSBsYXJnZSk6Ci0gKi8KLSNkZWZpbmUgX19JU0FfSU9fYmFzZSAoKGNoYXIgX19pb21lbSAqKShQQUdFX09GRlNFVCkpCi0KLSNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCi0KLS8qCi0gKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9BU01fWDg2X0lPXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKaW5kZXggYTI5ZjQ4Yy4uMjg4Yjk2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmgKQEAgLTM5LDExICszOSw1IEBACiAjZGVmaW5lIG5vZGVfc3RhcnRfcGZuKG5pZCkJKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKICNkZWZpbmUgbm9kZV9lbmRfcGZuKG5pZCkgICAgICAgKE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbiArCVwKIAkJCQkgTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcykKLQotI2lmZGVmIENPTkZJR19OVU1BX0VNVQotI2RlZmluZSBGQUtFX05PREVfTUlOX1NJWkUJKDY0ICogMTAyNCAqIDEwMjQpCi0jZGVmaW5lIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLCSh+KEZBS0VfTk9ERV9NSU5fU0laRSAtIDFVTCkpCi0jZW5kaWYKLQogI2VuZGlmCiAjZW5kaWYgLyogX0FTTV9YODZfTU1aT05FXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKaW5kZXggMTM5ZDRjMS4uOTNkYTljMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTE5LDcgKzE5LDYgQEAKIGV4dGVybiBpbnQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIGludCBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKIGV4dGVybiBpbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWlfYml0KHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50IGF2YWlsX3RvX3Jlc3J2X3BlcmZjdHJfbm1pKHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHJlc2VydmVfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHJlbGVhc2VfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgcmVzZXJ2ZV9ldm50c2VsX25taSh1bnNpZ25lZCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oCmluZGV4IGM0YWU4MjIuLjgyM2UwNzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmgKQEAgLTM2LDYgKzM2LDExIEBACiBleHRlcm4gdm9pZCBfX2NwdWluaXQgbnVtYV9jbGVhcl9ub2RlKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgX19jcHVpbml0IG51bWFfYWRkX2NwdShpbnQgY3B1KTsKIGV4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSk7CisKKyNpZmRlZiBDT05GSUdfTlVNQV9FTVUKKyNkZWZpbmUgRkFLRV9OT0RFX01JTl9TSVpFCSgodTY0KTY0IDw8IDIwKQorI2RlZmluZSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSwkofihGQUtFX05PREVfTUlOX1NJWkUgLSAxVUwpKQorI2VuZGlmIC8qIENPTkZJR19OVU1BX0VNVSAqLwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NwdV90b19ub2RlKHZvaWQpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKQl7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCmluZGV4IDlmMGE1ZjUuLjEzMzcwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaApAQCAtMzMsNiArMzMsMTAgQEAKIAogZXh0ZXJuIHZvaWQgKnhxdWFkX3BvcnRpbzsKIAorI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCisjZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCisjZGVmaW5lIFhRVUFEX1BPUlRfQUREUihwb3J0LCBxdWFkKSAoeHF1YWRfcG9ydGlvICsgKFhRVUFEX1BPUlRJT19RVUFEKnF1YWQpICsgcG9ydCkKKwogLyoKICAqIFNZU19DRkdfREFUQV9QUklWX0FERFIsIHN0cnVjdCBlYWNocXVhZG1lbSwgYW5kIHN0cnVjdCBzeXNfY2ZnX2RhdGEgYXJlIHRoZQogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKaW5kZXggNjQyZmUzNC4uYTY2N2YyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaApAQCAtNDAsNyArNDAsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi1leHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKIGV4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKaW5kZXggYjRiZjlhOS4uMDViNThjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBQQ0lfQ0hFQ0tfRU5BQkxFX0FNRF9NTUNPTkYJMHgyMDAwMAogI2RlZmluZSBQQ0lfSEFTX0lPX0VDUwkJMHg0MDAwMAogI2RlZmluZSBQQ0lfTk9BU1NJR05fUk9NUwkweDgwMDAwCisjZGVmaW5lIFBDSV9ST09UX05PX0NSUwkJMHgxMDAwMDAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwY2lfcHJvYmU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwaXJxX3RhYmxlX2FkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggMTM4MDM2Ny4uYmVmZDE3MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMjcsNyArMjcsMTQgQEAKIC8qCiAgKiBJbmNsdWRlcyBldmVudHNlbCBhbmQgdW5pdCBtYXNrIGFzIHdlbGw6CiAgKi8KLSNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UX01BU0sJCQkJICAgIDB4ZmZmZgorCisKKyNkZWZpbmUgSU5URUxfQVJDSF9FVlRTRUxfTUFTSwkJMHgwMDAwMDBGRlVMTAorI2RlZmluZSBJTlRFTF9BUkNIX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAorI2RlZmluZSBJTlRFTF9BUkNIX0VER0VfTUFTSwkJMHgwMDA0MDAwMFVMTAorI2RlZmluZSBJTlRFTF9BUkNIX0lOVl9NQVNLCQkweDAwODAwMDAwVUxMCisjZGVmaW5lIElOVEVMX0FSQ0hfQ05UX01BU0sJCTB4RkYwMDAwMDBVTEwKKyNkZWZpbmUgSU5URUxfQVJDSF9FVkVOVF9NQVNLCShJTlRFTF9BUkNIX1VOSVRfTUFTS3xJTlRFTF9BUkNIX0VWVFNFTF9NQVNLKQogCiAvKgogICogZmlsdGVyIG1hc2sgdG8gdmFsaWRhdGUgZml4ZWQgY291bnRlciBldmVudHMuCkBAIC0zOCw3ICs0NSwxMiBAQAogICogIFRoZSBvdGhlciBmaWx0ZXJzIGFyZSBzdXBwb3J0ZWQgYnkgZml4ZWQgY291bnRlcnMuCiAgKiAgVGhlIGFueS10aHJlYWQgb3B0aW9uIGlzIHN1cHBvcnRlZCBzdGFydGluZyB3aXRoIHYzLgogICovCi0jZGVmaW5lIEFSQ0hfUEVSRk1PTl9FVkVOVF9GSUxURVJfTUFTSwkJCTB4ZmY4NDAwMDAKKyNkZWZpbmUgSU5URUxfQVJDSF9GSVhFRF9NQVNLIFwKKwkoSU5URUxfQVJDSF9DTlRfTUFTS3wgXAorCSBJTlRFTF9BUkNIX0lOVl9NQVNLfCBcCisJIElOVEVMX0FSQ0hfRURHRV9NQVNLfFwKKwkgSU5URUxfQVJDSF9VTklUX01BU0t8XAorCSBJTlRFTF9BUkNIX0VWVFNFTF9NQVNLKQogCiAjZGVmaW5lIEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19TRUwJCSAgICAgIDB4M2MKICNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1VNQVNLCQkoMHgwMCA8PCA4KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDBlOGMyYTAuLjI3MWRlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTIzLDYgKzIzLDExIEBACiAjZW5kaWYKIAogLyoKKyAqIEZsYWdzIHRvIHVzZSB3aGVuIGFsbG9jYXRpbmcgYSB1c2VyIHBhZ2UgdGFibGUgcGFnZS4KKyAqLworZXh0ZXJuIGdmcF90IF9fdXNlcnB0ZV9hbGxvY19nZnA7CisKKy8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KICAqLwogZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggOWQzNjlmNi4uMjAxMDI4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTI3NCwxMCArMjc0LDYgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLS8qIEdldCBOdGggYXJndW1lbnQgYXQgZnVuY3Rpb24gY2FsbCAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVnc19nZXRfYXJndW1lbnRfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgbik7Ci0KIC8qCiAgKiBUaGVzZSBhcmUgZGVmaW5lZCBhcyBwZXIgbGludXgvcHRyYWNlLmgsIHdoaWNoIHNlZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3c2VtLmgKaW5kZXggY2E3NTE3ZC4uNjA2ZWRlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KIAogc3RydWN0IHJ3c2VtX3dhaXRlcjsKIApAQCAtNTUsMTcgKzU2LDI4IEBACiAKIC8qCiAgKiB0aGUgc2VtYXBob3JlIGRlZmluaXRpb24KKyAqCisgKiBUaGUgYmlhcyB2YWx1ZXMgYW5kIHRoZSBjb3VudGVyIHR5cGUgbGltaXRzIHRoZSBudW1iZXIgb2YKKyAqIHBvdGVudGlhbCByZWFkZXJzL3dyaXRlcnMgdG8gMzI3NjcgZm9yIDMyIGJpdHMgYW5kIDIxNDc0ODM2NDcKKyAqIGZvciA2NCBiaXRzLgogICovCiAKLSNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCTB4MDAwMDAwMDAKLSNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDEKLSNkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmYKLSNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCQkoLTB4MDAwMTAwMDApCisjaWZkZWYgQ09ORklHX1g4Nl82NAorIyBkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4ZmZmZmZmZmZMCisjZWxzZQorIyBkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmZMCisjZW5kaWYKKworI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkJMHgwMDAwMDAwMEwKKyNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDFMCisjZGVmaW5lIFJXU0VNX1dBSVRJTkdfQklBUwkJKC1SV1NFTV9BQ1RJVkVfTUFTSy0xKQogI2RlZmluZSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTCQlSV1NFTV9BQ1RJVkVfQklBUwogI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQogCit0eXBlZGVmIHNpZ25lZCBsb25nIHJ3c2VtX2NvdW50X3Q7CisKIHN0cnVjdCByd19zZW1hcGhvcmUgewotCXNpZ25lZCBsb25nCQljb3VudDsKKwlyd3NlbV9jb3VudF90CQljb3VudDsKIAlzcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKQEAgLTEwNSw3ICsxMTcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fcmVhZFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgaW5jbCAgICAgICglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYIF9BU01fSU5DICIoJTEpXG5cdCIKIAkJICAgICAvKiBhZGRzIDB4MDAwMDAwMDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwogCQkgICAgICIgIGpucyAgICAgICAgMWZcbiIKIAkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fZG93bl9yZWFkX2ZhaWxlZFxuIgpAQCAtMTIxLDE0ICsxMzMsMTQgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgX19kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JX19zMzIgcmVzdWx0LCB0bXA7CisJcndzZW1fY291bnRfdCByZXN1bHQsIHRtcDsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgotCQkgICAgICIgIG1vdmwgICAgICAlMCwlMVxuXHQiCisJCSAgICAgIiAgbW92ICAgICAgICAgICUwLCUxXG5cdCIKIAkJICAgICAiMTpcblx0IgotCQkgICAgICIgIG1vdmwJICAgICAlMSwlMlxuXHQiCi0JCSAgICAgIiAgYWRkbCAgICAgICUzLCUyXG5cdCIKKwkJICAgICAiICBtb3YgICAgICAgICAgJTEsJTJcblx0IgorCQkgICAgICIgIGFkZCAgICAgICAgICAlMywlMlxuXHQiCiAJCSAgICAgIiAgamxlCSAgICAgMmZcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIGNtcHhjaGdsICAlMiwlMFxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggIiAgY21weGNoZyAgJTIsJTBcblx0IgogCQkgICAgICIgIGpuegkgICAgIDFiXG5cdCIKIAkJICAgICAiMjpcblx0IgogCQkgICAgICIjIGVuZGluZyBfX2Rvd25fcmVhZF90cnlsb2NrXG5cdCIKQEAgLTE0MywxMyArMTU1LDEzIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGVfbmVzdGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgaW50IHN1YmNsYXNzKQogewotCWludCB0bXA7CisJcndzZW1fY291bnRfdCB0bXA7CiAKIAl0bXAgPSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fd3JpdGVcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlJWVkeCwoJSVlYXgpXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJTEsKCUyKVxuXHQiCiAJCSAgICAgLyogc3VidHJhY3QgMHgwMDAwZmZmZiwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCi0JCSAgICAgIiAgdGVzdGwgICAgICUlZWR4LCUlZWR4XG5cdCIKKwkJICAgICAiICB0ZXN0ICAgICAgJTEsJTFcblx0IgogCQkgICAgIC8qIHdhcyB0aGUgY291bnQgMCBiZWZvcmU/ICovCiAJCSAgICAgIiAganogICAgICAgIDFmXG4iCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25fd3JpdGVfZmFpbGVkXG4iCkBAIC0xNzAsOSArMTgyLDkgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgX19kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCXNpZ25lZCBsb25nIHJldCA9IGNtcHhjaGcoJnNlbS0+Y291bnQsCi0JCQkJICBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwKLQkJCQkgIFJXU0VNX0FDVElWRV9XUklURV9CSUFTKTsKKwlyd3NlbV9jb3VudF90IHJldCA9IGNtcHhjaGcoJnNlbS0+Y291bnQsCisJCQkJICAgIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLAorCQkJCSAgICBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUyk7CiAJaWYgKHJldCA9PSBSV1NFTV9VTkxPQ0tFRF9WQUxVRSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CkBAIC0xODMsOSArMTk1LDkgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JX19zMzIgdG1wID0gLVJXU0VNX0FDVElWRV9SRUFEX0JJQVM7CisJcndzZW1fY291bnRfdCB0bXAgPSAtUldTRU1fQUNUSVZFX1JFQURfQklBUzsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfcmVhZFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZCAgICAgICUlZWR4LCglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKIAkJICAgICAvKiBzdWJ0cmFjdHMgMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCiAJCSAgICAgIiAgam5zICAgICAgICAxZlxuXHQiCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKQEAgLTIwMSwxOCArMjEzLDE4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKKwlyd3NlbV9jb3VudF90IHRtcDsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfd3JpdGVcblx0IgotCQkgICAgICIgIG1vdmwgICAgICAlMiwlJWVkeFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZGwgICAgICUlZWR4LCglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKIAkJICAgICAvKiB0cmllcyB0byB0cmFuc2l0aW9uCiAJCQkweGZmZmYwMDAxIC0+IDB4MDAwMDAwMDAgKi8KIAkJICAgICAiICBqeiAgICAgICAxZlxuIgogCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV93YWtlXG4iCiAJCSAgICAgIjE6XG5cdCIKIAkJICAgICAiIyBlbmRpbmcgX191cF93cml0ZVxuIgotCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKLQkJICAgICA6ICJhIiAoc2VtKSwgImkiICgtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCi0JCSAgICAgOiAibWVtb3J5IiwgImNjIiwgImVkeCIpOworCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9ZCIgKHRtcCkKKwkJICAgICA6ICJhIiAoc2VtKSwgIjEiICgtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiB9CiAKIC8qCkBAIC0yMjEsMzMgKzIzMywzOCBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZG93bmdyYWRlX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fZG93bmdyYWRlX3dyaXRlXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICBhZGRsICAgICAgJTIsKCUlZWF4KVxuXHQiCi0JCSAgICAgLyogdHJhbnNpdGlvbnMgMHhaWlpaMDAwMSAtPiAweFlZWVkwMDAxICovCisJCSAgICAgTE9DS19QUkVGSVggX0FTTV9BREQgIiUyLCglMSlcblx0IgorCQkgICAgIC8qCisJCSAgICAgICogdHJhbnNpdGlvbnMgMHhaWlpaMDAwMSAtPiAweFlZWVkwMDAxIChpMzg2KQorCQkgICAgICAqICAgICAweFpaWlpaWlpaMDAwMDAwMDEgLT4gMHhZWVlZWVlZWTAwMDAwMDAxICh4ODZfNjQpCisJCSAgICAgICovCiAJCSAgICAgIiAgam5zICAgICAgIDFmXG5cdCIKIAkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fZG93bmdyYWRlX3dha2VcbiIKIAkJICAgICAiMTpcblx0IgogCQkgICAgICIjIGVuZGluZyBfX2Rvd25ncmFkZV93cml0ZVxuIgogCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKLQkJICAgICA6ICJhIiAoc2VtKSwgImkiICgtUldTRU1fV0FJVElOR19CSUFTKQorCQkgICAgIDogImEiIChzZW0pLCAiZXIiICgtUldTRU1fV0FJVElOR19CSUFTKQogCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogCiAvKgogICogaW1wbGVtZW50IGF0b21pYyBhZGQgZnVuY3Rpb25hbGl0eQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2FkZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3N0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKHJ3c2VtX2NvdW50X3QgZGVsdGEsCisJCQkJICAgIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIF9BU01fQUREICIlMSwlMCIKIAkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpCi0JCSAgICAgOiAiaXIiIChkZWx0YSkpOworCQkgICAgIDogImVyIiAoZGVsdGEpKTsKIH0KIAogLyoKICAqIGltcGxlbWVudCBleGNoYW5nZSBhbmQgYWRkIGZ1bmN0aW9uYWxpdHkKICAqLwotc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3N0YXRpYyBpbmxpbmUgcndzZW1fY291bnRfdCByd3NlbV9hdG9taWNfdXBkYXRlKHJ3c2VtX2NvdW50X3QgZGVsdGEsCisJCQkJCQlzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JaW50IHRtcCA9IGRlbHRhOworCXJ3c2VtX2NvdW50X3QgdG1wID0gZGVsdGE7CiAKIAlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGQgJTAsJTEiCiAJCSAgICAgOiAiK3IiICh0bXApLCAiK20iIChzZW0tPmNvdW50KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAxZTc5Njc4Li40Y2ZjOTA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMTM1LDYgKzEzNSw4IEBACiB2b2lkIG5hdGl2ZV9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwogdm9pZCBuYXRpdmVfcGxheV9kZWFkKHZvaWQpOwogdm9pZCBwbGF5X2RlYWRfY29tbW9uKHZvaWQpOwordm9pZCB3YmludmRfb25fY3B1KGludCBjcHUpOworaW50IHdiaW52ZF9vbl9hbGxfY3B1cyh2b2lkKTsKIAogdm9pZCBuYXRpdmVfc2VuZF9jYWxsX2Z1bmNfaXBpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKIHZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkoaW50IGNwdSk7CkBAIC0xNDcsNiArMTQ5LDEzIEBACiB7CiAJcmV0dXJuIGNwdW1hc2tfd2VpZ2h0KGNwdV9jYWxsb3V0X21hc2spOwogfQorI2Vsc2UgLyogIUNPTkZJR19TTVAgKi8KKyNkZWZpbmUgd2JpbnZkX29uX2NwdShjcHUpICAgICB3YmludmQoKQorc3RhdGljIGlubGluZSBpbnQgd2JpbnZkX29uX2FsbF9jcHVzKHZvaWQpCit7CisJd2JpbnZkKCk7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiBleHRlcm4gdW5zaWduZWQgZGlzYWJsZWRfY3B1cyBfX2NwdWluaXRkYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCmluZGV4IDM1ZTg5MTIuLjRkYWI3OGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKQEAgLTMsOCArMyw2IEBACiAKIGV4dGVybiBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50OwogCi1pbnQgeDg2X2lzX3N0YWNrX2lkKGludCBpZCwgY2hhciAqbmFtZSk7Ci0KIHN0cnVjdCB0aHJlYWRfaW5mbzsKIHN0cnVjdCBzdGFja3RyYWNlX29wczsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDhkMzNiYzUuLmM0YTM0OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBzeXNfY2FsbF90YWJsZVtdOworCiAvKgogICogT25seSB0aGUgbG93IDMyIGJpdHMgb2Ygb3JpZ19heCBhcmUgbWVhbmluZ2Z1bCwgc28gd2UgcmV0dXJuIGludC4KICAqIFRoaXMgaW1wb3J0YW50bHkgaWdub3JlcyB0aGUgaGlnaCBiaXRzIG9uIDY0LWJpdCwgc28gY29tcGFyaXNvbnMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCA1MzVlNDIxNC4uMzE2NzA4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaApAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyoKQEAgLTE2LDcgKzE4LDI0IEBACiAKIC8qIEhhbmRsZXMgZXhjZXB0aW9ucyBpbiBib3RoIHRvIGFuZCBmcm9tLCBidXQgZG9lc24ndCBkbyBhY2Nlc3Nfb2sgKi8KIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCi1jb3B5X3VzZXJfZ2VuZXJpYyh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKK2NvcHlfdXNlcl9nZW5lcmljX3N0cmluZyh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKK19fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCitjb3B5X3VzZXJfZ2VuZXJpY191bnJvbGxlZCh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZworY29weV91c2VyX2dlbmVyaWModm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbikKK3sKKwl1bnNpZ25lZCByZXQ7CisKKwlhbHRlcm5hdGl2ZV9jYWxsKGNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkLAorCQkJIGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZywKKwkJCSBYODZfRkVBVFVSRV9SRVBfR09PRCwKKwkJCSBBU01fT1VUUFVUMigiPWEiIChyZXQpLCAiPUQiICh0byksICI9UyIgKGZyb20pLAorCQkJCSAgICAgIj1kIiAobGVuKSksCisJCQkgIjEiICh0byksICIyIiAoZnJvbSksICIzIiAobGVuKQorCQkJIDogIm1lbW9yeSIsICJyY3giLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIpOworCXJldHVybiByZXQ7Cit9CiAKIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCiBfY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXIuaAppbmRleCA5OTk4NzNiLi4yNDUzMmM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91c2VyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXNlci5oCkBAIC0xLDUgKzEsNjMgQEAKKyNpZm5kZWYgX0FTTV9YODZfVVNFUl9ICisjZGVmaW5lIF9BU01fWDg2X1VTRVJfSAorCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogIyBpbmNsdWRlICJ1c2VyXzMyLmgiCiAjZWxzZQogIyBpbmNsdWRlICJ1c2VyXzY0LmgiCiAjZW5kaWYKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgdXNlcl95bW1oX3JlZ3MgeworCS8qIDE2ICogMTYgYnl0ZXMgZm9yIGVhY2ggWU1NSC1yZWcgKi8KKwlfX3UzMiB5bW1oX3NwYWNlWzY0XTsKK307CisKK3N0cnVjdCB1c2VyX3hzYXZlX2hkciB7CisJX191NjQgeHN0YXRlX2J2OworCV9fdTY0IHJlc2VydmVkMVsyXTsKKwlfX3U2NCByZXNlcnZlZDJbNV07Cit9OworCisvKgorICogVGhlIHN0cnVjdHVyZSBsYXlvdXQgb2YgdXNlcl94c3RhdGVyZWdzLCB1c2VkIGZvciBleHBvcnRpbmcgdGhlCisgKiBleHRlbmRlZCByZWdpc3RlciBzdGF0ZSB0aHJvdWdoIHB0cmFjZSBhbmQgY29yZS1kdW1wIChOVF9YODZfWFNUQVRFIG5vdGUpCisgKiBpbnRlcmZhY2VzIHdpbGwgYmUgc2FtZSBhcyB0aGUgbWVtb3J5IGxheW91dCBvZiB4c2F2ZSB1c2VkIGJ5IHRoZSBwcm9jZXNzb3IKKyAqIChleGNlcHQgZm9yIHRoZSBieXRlcyA0NjQuLjUxMSwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIHNvZnR3YXJlKSBhbmQgaGVuY2UKKyAqIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUKKyAqIHByb2Nlc3NvciBhbmQgT1MuIFRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgdGhhdCB1c2VycyBuZWVkIHRvIHVzZSBjYW4gYmUKKyAqIG9idGFpbmVkIGJ5IGRvaW5nOgorICogICAgIGNwdWlkX2NvdW50KDB4ZCwgMCwgJmVheCwgJnB0cmFjZV94c3RhdGVyZWdzX3N0cnVjdF9zaXplLCAmZWN4LCAmZWR4KTsKKyAqIGkuZS4sIGNwdWlkLihlYXg9MHhkLGVjeD0wKS5lYnggd2lsbCBiZSB0aGUgc2l6ZSB0aGF0IHVzZXIgKGRlYnVnZ2VycywgZXRjLikKKyAqIG5lZWQgdG8gdXNlLgorICoKKyAqIEZvciBub3csIG9ubHkgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIHNvZnR3YXJlIHVzYWJsZSBieXRlc1s0NjQuLjQ3MV0gd2lsbAorICogYmUgdXNlZCBhbmQgd2lsbCBiZSBzZXQgdG8gT1MgZW5hYmxlZCB4c3RhdGUgbWFzayAod2hpY2ggaXMgc2FtZSBhcyB0aGUKKyAqIDY0Yml0IG1hc2sgcmV0dXJuZWQgYnkgdGhlIHhnZXRididzIHhDUjApLiAgVXNlcnMgKGFuYWx5emluZyBjb3JlIGR1bXAKKyAqIHJlbW90ZWx5LCBldGMuKSBjYW4gdXNlIHRoaXMgbWFzayBhcyB3ZWxsIGFzIHRoZSBtYXNrIHNhdmVkIGluIHRoZQorICogeHN0YXRlX2hkciBieXRlcyBhbmQgaW50ZXJwcmV0IHdoYXQgc3RhdGVzIHRoZSBwcm9jZXNzb3IvT1Mgc3VwcG9ydHMKKyAqIGFuZCB3aGF0IHN0YXRlcyBhcmUgaW4gbW9kaWZpZWQvaW5pdGlhbGl6ZWQgY29uZGl0aW9ucyBmb3IgdGhlCisgKiBwYXJ0aWN1bGFyIHByb2Nlc3MvdGhyZWFkLgorICoKKyAqIEFsc28gd2hlbiB0aGUgdXNlciBtb2RpZmllcyBjZXJ0YWluIHN0YXRlIEZQL1NTRS9ldGMgdGhyb3VnaCB0aGUKKyAqIHB0cmFjZSBpbnRlcmZhY2UsIHRoZXkgbXVzdCBlbnN1cmUgdGhhdCB0aGUgeHNhdmVfaGRyLnhzdGF0ZV9idgorICogYnl0ZXNbNTEyLi41MTldIG9mIHRoZSBtZW1vcnkgbGF5b3V0IGFyZSB1cGRhdGVkIGNvcnJlc3BvbmRpbmdseS4KKyAqIGkuZS4sIGZvciBleGFtcGxlIHdoZW4gRlAgc3RhdGUgaXMgbW9kaWZpZWQgdG8gYSBub24taW5pdCBzdGF0ZSwKKyAqIHhzYXZlX2hkci54c3RhdGVfYnYncyBiaXQgMCBtdXN0IGJlIHNldCB0byAnMScsIHdoZW4gU1NFIGlzIG1vZGlmaWVkIHRvCisgKiBub24taW5pdCBzdGF0ZSwgeHNhdmVfaGRyLnhzdGF0ZV9ididzIGJpdCAxIG11c3QgdG8gYmUgc2V0IHRvICcxJywgZXRjLgorICovCisjZGVmaW5lIFVTRVJfWFNUQVRFX0ZYX1NXX1dPUkRTIDYKKyNkZWZpbmUgVVNFUl9YU1RBVEVfWENSMF9XT1JECTAKKworc3RydWN0IHVzZXJfeHN0YXRlcmVncyB7CisJc3RydWN0IHsKKwkJX191NjQgZnB4X3NwYWNlWzU4XTsKKwkJX191NjQgeHN0YXRlX2Z4X3N3W1VTRVJfWFNUQVRFX0ZYX1NXX1dPUkRTXTsKKwl9IGkzODc7CisJc3RydWN0IHVzZXJfeHNhdmVfaGRyIHhzYXZlX2hkcjsKKwlzdHJ1Y3QgdXNlcl95bW1oX3JlZ3MgeW1taDsKKwkvKiBmdXJ0aGVyIHByb2Nlc3NvciBzdGF0ZSBleHRlbnNpb25zIGdvIGhlcmUgKi8KK307CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L2Jpb3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L2Jpb3MuaAppbmRleCAyNzUxZjMwLi43MTYwNWM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di9iaW9zLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvYmlvcy5oCkBAIC0xOCw4ICsxOCw4IEBACiAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKGMpIFJ1c3MgQW5kZXJzb24gPHJqYUBzZ2kuY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KQEAgLTM2LDcgKzM2LDggQEAKIAlVVl9CSU9TX1dBVENITElTVF9BTExPQywKIAlVVl9CSU9TX1dBVENITElTVF9GUkVFLAogCVVWX0JJT1NfTUVNUFJPVEVDVCwKLQlVVl9CSU9TX0dFVF9QQVJUSVRJT05fQUREUgorCVVWX0JJT1NfR0VUX1BBUlRJVElPTl9BRERSLAorCVVWX0JJT1NfU0VUX0xFR0FDWV9WR0FfVEFSR0VUCiB9OwogCiAvKgpAQCAtODksMTMgKzkwLDE0IEBACiBleHRlcm4gczY0IHV2X2Jpb3NfY2FsbF9pcnFzYXZlKGVudW0gdXZfYmlvc19jbWQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKIGV4dGVybiBzNjQgdXZfYmlvc19jYWxsX3JlZW50cmFudChlbnVtIHV2X2Jpb3NfY21kLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CiAKLWV4dGVybiBzNjQgdXZfYmlvc19nZXRfc25faW5mbyhpbnQsIGludCAqLCBsb25nICosIGxvbmcgKiwgbG9uZyAqKTsKK2V4dGVybiBzNjQgdXZfYmlvc19nZXRfc25faW5mbyhpbnQsIGludCAqLCBsb25nICosIGxvbmcgKiwgbG9uZyAqLCBsb25nICopOwogZXh0ZXJuIHM2NCB1dl9iaW9zX2ZyZXFfYmFzZSh1NjQsIHU2NCAqKTsKIGV4dGVybiBpbnQgdXZfYmlvc19tcV93YXRjaGxpc3RfYWxsb2ModW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50LAogCQkJCQl1bnNpZ25lZCBsb25nICopOwogZXh0ZXJuIGludCB1dl9iaW9zX21xX3dhdGNobGlzdF9mcmVlKGludCwgaW50KTsKIGV4dGVybiBzNjQgdXZfYmlvc19jaGFuZ2VfbWVtcHJvdGVjdCh1NjQsIHU2NCwgZW51bSB1dl9tZW1wcm90ZWN0KTsKIGV4dGVybiBzNjQgdXZfYmlvc19yZXNlcnZlZF9wYWdlX3BhKHU2NCwgdTY0ICosIHU2NCAqLCB1NjQgKik7CitleHRlcm4gaW50IHV2X2Jpb3Nfc2V0X2xlZ2FjeV92Z2FfdGFyZ2V0KGJvb2wgZGVjb2RlLCBpbnQgZG9tYWluLCBpbnQgYnVzKTsKIAogZXh0ZXJuIHZvaWQgdXZfYmlvc19pbml0KHZvaWQpOwogCkBAIC0xMDQsNiArMTA2LDcgQEAKIGV4dGVybiBsb25nIHNuX3BhcnRpdGlvbl9pZDsKIGV4dGVybiBsb25nIHNuX2NvaGVyZW5jeV9pZDsKIGV4dGVybiBsb25nIHNuX3JlZ2lvbl9zaXplOworZXh0ZXJuIGxvbmcgc3lzdGVtX3NlcmlhbF9udW1iZXI7CiAjZGVmaW5lIHBhcnRpdGlvbl9jb2hlcmVuY2VfaWQoKQkoc25fY29oZXJlbmN5X2lkKQogCiBleHRlcm4gc3RydWN0IGtvYmplY3QgKnNnaV91dl9rb2JqOwkvKiAvc3lzL2Zpcm13YXJlL3NnaV91diAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2LmgKaW5kZXggYzBhMDFiNS4uM2JiOTQ5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91di5oCkBAIC0xMSw2ICsxMSw3IEBACiBleHRlcm4gZW51bSB1dl9zeXN0ZW1fdHlwZSBnZXRfdXZfc3lzdGVtX3R5cGUodm9pZCk7CiBleHRlcm4gaW50IGlzX3V2X3N5c3RlbSh2b2lkKTsKIGV4dGVybiB2b2lkIHV2X2NwdV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdXZfbm1pX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB1dl9zeXN0ZW1faW5pdCh2b2lkKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdXZfZmx1c2hfdGxiX290aGVycyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKIAkJCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggNDBiZTgxMy4uMTRjYzc0YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTMyOSw3ICszMjksOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfZ2xvYmFsX2dydV9tbXJfYWRkcmVzcyhpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCXJldHVybiBVVl9HTE9CQUxfR1JVX01NUl9CQVNFIHwgb2Zmc2V0IHwgKHBub2RlIDw8IHV2X2h1Yl9pbmZvLT5tX3ZhbCk7CisJcmV0dXJuIFVWX0dMT0JBTF9HUlVfTU1SX0JBU0UgfCBvZmZzZXQgfAorCQkoKHVuc2lnbmVkIGxvbmcpcG5vZGUgPDwgdXZfaHViX2luZm8tPm1fdmFsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHV2X3dyaXRlX2dsb2JhbF9tbXI4KGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgdmFsKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKaW5kZXggZWEwZThlYS4uNjBjYzM1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCkBAIC0xMjYsNiArMTI2LDcgQEAKICAqIEBnZXRfd2FsbGNsb2NrOgkJZ2V0IHRpbWUgZnJvbSBIVyBjbG9jayBsaWtlIFJUQyBldGMuCiAgKiBAc2V0X3dhbGxjbG9jazoJCXNldCB0aW1lIGJhY2sgdG8gSFcgY2xvY2sKICAqIEBpc191bnRyYWNrZWRfcGF0X3JhbmdlCWV4Y2x1ZGUgZnJvbSBQQVQgbG9naWMKKyAqIEBubWlfaW5pdAkJCWVuYWJsZSBOTUkgb24gY3B1cwogICovCiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB7CiAJdW5zaWduZWQgbG9uZyAoKmNhbGlicmF0ZV90c2MpKHZvaWQpOwpAQCAtMTMzLDYgKzEzNCw3IEBACiAJaW50ICgqc2V0X3dhbGxjbG9jaykodW5zaWduZWQgbG9uZyBub3d0aW1lKTsKIAl2b2lkICgqaW9tbXVfc2h1dGRvd24pKHZvaWQpOwogCWJvb2wgKCppc191bnRyYWNrZWRfcGF0X3JhbmdlKSh1NjQgc3RhcnQsIHU2NCBlbmQpOworCXZvaWQgKCpubWlfaW5pdCkodm9pZCk7CiB9OwogCiBleHRlcm4gc3RydWN0IHg4Nl9pbml0X29wcyB4ODZfaW5pdDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94c2F2ZS5oCmluZGV4IDcyN2FjYzEuLmRkYzA0Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veHNhdmUuaApAQCAtMjcsOSArMjcsMTEgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgeHN0YXRlX3NpemU7CiBleHRlcm4gdTY0IHBjbnR4dF9tYXNrOwogZXh0ZXJuIHN0cnVjdCB4c2F2ZV9zdHJ1Y3QgKmluaXRfeHN0YXRlX2J1ZjsKK2V4dGVybiB1NjQgeHN0YXRlX2Z4X3N3X2J5dGVzW1VTRVJfWFNUQVRFX0ZYX1NXX1dPUkRTXTsKIAogZXh0ZXJuIHZvaWQgeHNhdmVfY250eHRfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHhzYXZlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB1cGRhdGVfcmVnc2V0X3hzdGF0ZV9pbmZvKHVuc2lnbmVkIGludCBzaXplLCB1NjQgeHN0YXRlX21hc2spOwogZXh0ZXJuIGludCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKIGV4dGVybiBpbnQgY2hlY2tfZm9yX3hzdGF0ZShzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0IF9fdXNlciAqYnVmLAogCQkJICAgIHZvaWQgX191c2VyICpmcHN0YXRlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IGFmMWM1ODMuLmY5NTcwMzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogI2lmZGVmCUNPTkZJR19YODZfNjQKICMgaW5jbHVkZSA8YXNtL3Byb3RvLmg+CisjIGluY2x1ZGUgPGFzbS9udW1hXzY0Lmg+CiAjZW5kaWYJCQkJLyogWDg2ICovCiAKICNkZWZpbmUgQkFEX01BRFRfRU5UUlkoZW50cnksIGVuZCkgKAkJCQkJICAgIFwKQEAgLTQ4Miw2ICs0ODMsMjUgQEAKICAqLwogI2lmZGVmIENPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVCiAKK3N0YXRpYyB2b2lkIGFjcGlfbWFwX2NwdTJub2RlKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IGNwdSwgaW50IHBoeXNpZCkKK3sKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisJaW50IG5pZDsKKworCW5pZCA9IGFjcGlfZ2V0X25vZGUoaGFuZGxlKTsKKwlpZiAobmlkID09IC0xIHx8ICFub2RlX29ubGluZShuaWQpKQorCQlyZXR1cm47CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWFwaWNpZF90b19ub2RlW3BoeXNpZF0gPSBuaWQ7CisJbnVtYV9zZXRfbm9kZShjcHUsIG5pZCk7CisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCisJYXBpY2lkXzJfbm9kZVtwaHlzaWRdID0gbmlkOworCWNwdV90b19ub2RlX21hcFtjcHVdID0gbmlkOworI2VuZGlmCisKKyNlbmRpZgorfQorCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBfYWNwaV9tYXBfbHNhcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50ICpwY3B1KQogewogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CkBAIC01NDAsNiArNTYwLDcgQEAKIAl9CiAKIAljcHUgPSBjcHVtYXNrX2ZpcnN0KG5ld19tYXApOworCWFjcGlfbWFwX2NwdTJub2RlKGhhbmRsZSwgY3B1LCBwaHlzaWQpOwogCiAJKnBjcHUgPSBjcHU7CiAJcmV0dmFsID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggZGU3MzUzYy4uZTZlYTAzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCQkJCQkgc3RydWN0IGFsdF9pbnN0ciAqZW5kKQogewogCXN0cnVjdCBhbHRfaW5zdHIgKmE7Ci0JY2hhciBpbnNuYnVmW01BWF9QQVRDSF9MRU5dOworCXU4IGluc25idWZbTUFYX1BBVENIX0xFTl07CiAKIAlEUFJJTlRLKCIlczogYWx0IHRhYmxlICVwIC0+ICVwXG4iLCBfX2Z1bmNfXywgc3RhcnQsIGVuZCk7CiAJZm9yIChhID0gc3RhcnQ7IGEgPCBlbmQ7IGErKykgewpAQCAtMjIzLDYgKzIyMyw4IEBACiAJCX0KICNlbmRpZgogCQltZW1jcHkoaW5zbmJ1ZiwgYS0+cmVwbGFjZW1lbnQsIGEtPnJlcGxhY2VtZW50bGVuKTsKKwkJaWYgKCppbnNuYnVmID09IDB4ZTggJiYgYS0+cmVwbGFjZW1lbnRsZW4gPT0gNSkKKwkJICAgICooczMyICopKGluc25idWYgKyAxKSArPSBhLT5yZXBsYWNlbWVudCAtIGEtPmluc3RyOwogCQlhZGRfbm9wcyhpbnNuYnVmICsgYS0+cmVwbGFjZW1lbnRsZW4sCiAJCQkgYS0+aW5zdHJsZW4gLSBhLT5yZXBsYWNlbWVudGxlbik7CiAJCXRleHRfcG9rZV9lYXJseShpbnN0ciwgaW5zbmJ1ZiwgYS0+aW5zdHJsZW4pOwpAQCAtMzkwLDYgKzM5MiwyNCBAQAogCW11dGV4X3VubG9jaygmc21wX2FsdCk7CiB9CiAKKy8qIFJldHVybiAxIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGlzIHJlc2VydmVkIGZvciBzbXAtYWx0ZXJuYXRpdmVzICovCitpbnQgYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlzdHJ1Y3Qgc21wX2FsdF9tb2R1bGUgKm1vZDsKKwl1OCAqKnB0cjsKKwl1OCAqdGV4dF9zdGFydCA9IHN0YXJ0OworCXU4ICp0ZXh0X2VuZCA9IGVuZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmc21wX2FsdF9tb2R1bGVzLCBuZXh0KSB7CisJCWlmIChtb2QtPnRleHQgPiB0ZXh0X2VuZCB8fCBtb2QtPnRleHRfZW5kIDwgdGV4dF9zdGFydCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKHB0ciA9IG1vZC0+bG9ja3M7IHB0ciA8IG1vZC0+bG9ja3NfZW5kOyBwdHIrKykKKwkJCWlmICh0ZXh0X3N0YXJ0IDw9ICpwdHIgJiYgdGV4dF9lbmQgPj0gKnB0cikKKwkJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggZGZjYTIxMC4uNmUyOWIyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtNTgxLDcgKzU4MSw3IEBACiAJCXJlcyA9ICgoKHU2NCkoKmRlbHRhdHNjKSkgKiBwbV8xMDBtcyk7CiAJCWRvX2RpdihyZXMsIGRlbHRhcG0pOwogCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJUU0MgZGVsdGEgYWRqdXN0ZWQgdG8gIgotCQkJCQkgICJQTS1UaW1lcjogJWx1ICglbGQpIFxuIiwKKwkJCQkJICAiUE0tVGltZXI6ICVsdSAoJWxkKVxuIiwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpcmVzLCAqZGVsdGF0c2MpOwogCQkqZGVsdGF0c2MgPSAobG9uZylyZXM7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IDUzMjQzY2EuLjZiZGQyYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTE2NDcsNyArMTY0Nyw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gSVJRIHJlZGlyZWN0aW9uIHRhYmxlOlxuIik7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiIE5SIERzdCBNYXNrIFRyaWcgSVJSIFBvbCIKLQkJCSAgIiBTdGF0IERtb2QgRGVsaSBWZWN0OiAgIFxuIik7CisJCQkgICIgU3RhdCBEbW9kIERlbGkgVmVjdDpcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8PSByZWdfMDEuYml0cy5lbnRyaWVzOyBpKyspIHsKIAkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYwppbmRleCA5OGM0NjY1Li40N2RkODU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCiAJbXBjX3JlY29yZCA9IDA7CiAJcHJpbnRrKEtFUk5fSU5GTwotCQkiRm91bmQgYW4gT0VNIE1QQyB0YWJsZSBhdCAlOHAgLSBwYXJzaW5nIGl0IC4uLiBcbiIsIG9lbXRhYmxlKTsKKwkJIkZvdW5kIGFuIE9FTSBNUEMgdGFibGUgYXQgJThwIC0gcGFyc2luZyBpdC4uLlxuIiwgb2VtdGFibGUpOwogCiAJaWYgKG1lbWNtcChvZW10YWJsZS0+c2lnbmF0dXJlLCBNUENfT0VNX1NJR05BVFVSRSwgNCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggMjFkYjNjYi4uMzc0MGM4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIFNHSSBVViBBUElDIGZ1bmN0aW9ucyAobm90ZTogbm90IGFuIEludGVsIGNvbXBhdGlibGUgQVBJQykKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CkBAIC0zNCwxMCArMzYsMTMgQEAKIAogREVGSU5FX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7CiAKKyNkZWZpbmUgUFJfREVWRUwoZm10LCBhcmdzLi4uKQlwcl9kZXZlbCgiJXM6ICIgZm10LCBfX2Z1bmNfXywgYXJncykKKwogc3RhdGljIGVudW0gdXZfc3lzdGVtX3R5cGUgdXZfc3lzdGVtX3R5cGU7CiBzdGF0aWMgdTY0IGdydV9zdGFydF9wYWRkciwgZ3J1X2VuZF9wYWRkcjsKIGludCB1dl9taW5faHViX3JldmlzaW9uX2lkOwogRVhQT1JUX1NZTUJPTF9HUEwodXZfbWluX2h1Yl9yZXZpc2lvbl9pZCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHV2X25taV9sb2NrKTsKIAogc3RhdGljIGlubGluZSBib29sIGlzX0dSVV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBlbmQpCiB7CkBAIC03MSw2ICs3Niw3IEBACiAJaWYgKCFzdHJjbXAob2VtX2lkLCAiU0dJIikpIHsKIAkJbm9kZWlkID0gZWFybHlfZ2V0X25vZGVpZCgpOwogCQl4ODZfcGxhdGZvcm0uaXNfdW50cmFja2VkX3BhdF9yYW5nZSA9ICB1dl9pc191bnRyYWNrZWRfcGF0X3JhbmdlOworCQl4ODZfcGxhdGZvcm0ubm1pX2luaXQgPSB1dl9ubWlfaW5pdDsKIAkJaWYgKCFzdHJjbXAob2VtX3RhYmxlX2lkLCAiVVZMIikpCiAJCQl1dl9zeXN0ZW1fdHlwZSA9IFVWX0xFR0FDWV9BUElDOwogCQllbHNlIGlmICghc3RyY21wKG9lbV90YWJsZV9pZCwgIlVWWCIpKQpAQCAtNDgyLDcgKzQ4OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCB1dl9oZWFydGJlYXRfZW5hYmxlKGludCBjcHUpCiB7Ci0JaWYgKCF1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkKSB7CisJd2hpbGUgKCF1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkKSB7CiAJCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZ1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci50aW1lcjsKIAogCQl1dl9zZXRfY3B1X3NjaXJfYml0cyhjcHUsIFNDSVJfQ1BVX0hFQVJUQkVBVHxTQ0lSX0NQVV9BQ1RJVklUWSk7CkBAIC00OTAsMTEgKzQ5NiwxMCBAQAogCQl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBTQ0lSX0NQVV9IQl9JTlRFUlZBTDsKIAkJYWRkX3RpbWVyX29uKHRpbWVyLCBjcHUpOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkID0gMTsKLQl9CiAKLQkvKiBjaGVjayBib290IGNwdSAqLwotCWlmICghdXZfY3B1X2h1Yl9pbmZvKDApLT5zY2lyLmVuYWJsZWQpCi0JCXV2X2hlYXJ0YmVhdF9lbmFibGUoMCk7CisJCS8qIGFsc28gZW5zdXJlIHRoYXQgYm9vdCBjcHUgaXMgZW5hYmxlZCAqLworCQljcHUgPSAwOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtNTUzLDYgKzU1OCwzMCBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19IT1RQTFVHX0NQVSAqLwogCisvKiBEaXJlY3QgTGVnYWN5IFZHQSBJL08gdHJhZmZpYyB0byBkZXNpZ25hdGVkIElPSCAqLworaW50IHV2X3NldF92Z2Ffc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgZGVjb2RlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9iaXRzLCBib29sIGNoYW5nZV9icmlkZ2UpCit7CisJaW50IGRvbWFpbiwgYnVzLCByYzsKKworCVBSX0RFVkVMKCJkZXZmbiAleCBkZWNvZGUgJWQgY21kICV4IGNoZ19icmRnICVkXG4iLAorCQkJcGRldi0+ZGV2Zm4sIGRlY29kZSwgY29tbWFuZF9iaXRzLCBjaGFuZ2VfYnJpZGdlKTsKKworCWlmICghY2hhbmdlX2JyaWRnZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGNvbW1hbmRfYml0cyAmIFBDSV9DT01NQU5EX0lPKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWRvbWFpbiA9IHBjaV9kb21haW5fbnIocGRldi0+YnVzKTsKKwlidXMgPSBwZGV2LT5idXMtPm51bWJlcjsKKworCXJjID0gdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQoZGVjb2RlLCBkb21haW4sIGJ1cyk7CisJUFJfREVWRUwoInZnYSBkZWNvZGUgJWQgJXg6JXgsIHJjOiAlZFxuIiwgZGVjb2RlLCBkb21haW4sIGJ1cywgcmMpOworCisJcmV0dXJuIHJjOworfQorCiAvKgogICogQ2FsbGVkIG9uIGVhY2ggY3B1IHRvIGluaXRpYWxpemUgdGhlIHBlcl9jcHUgVVYgZGF0YSBhcmVhLgogICogRklYTUU6IGhvdHBsdWcgbm90IHN1cHBvcnRlZCB5ZXQKQEAgLTU2OSw2ICs1OTgsNDYgQEAKIAkJc2V0X3gyYXBpY19leHRyYV9iaXRzKHV2X2h1Yl9pbmZvLT5wbm9kZSk7CiB9CiAKKy8qCisgKiBXaGVuIE5NSSBpcyByZWNlaXZlZCwgcHJpbnQgYSBzdGFjayB0cmFjZS4KKyAqLworaW50IHV2X2hhbmRsZV9ubWkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqZGF0YSkKK3sKKwlpZiAocmVhc29uICE9IERJRV9OTUlfSVBJKQorCQlyZXR1cm4gTk9USUZZX09LOworCS8qCisJICogVXNlIGEgbG9jayBzbyBvbmx5IG9uZSBjcHUgcHJpbnRzIGF0IGEgdGltZQorCSAqIHRvIHByZXZlbnQgaW50ZXJtaXhlZCBvdXRwdXQuCisJICovCisJc3Bpbl9sb2NrKCZ1dl9ubWlfbG9jayk7CisJcHJfaW5mbygiTk1JIHN0YWNrIGR1bXAgY3B1ICV1OlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlkdW1wX3N0YWNrKCk7CisJc3Bpbl91bmxvY2soJnV2X25taV9sb2NrKTsKKworCXJldHVybiBOT1RJRllfU1RPUDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB1dl9kdW1wX3N0YWNrX25taV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHV2X2hhbmRsZV9ubWkKK307CisKK3ZvaWQgdXZfcmVnaXN0ZXJfbm1pX25vdGlmaWVyKHZvaWQpCit7CisJaWYgKHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmdXZfZHVtcF9zdGFja19ubWlfbmIpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVViBOTUkgaGFuZGxlciBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIpOworfQorCit2b2lkIHV2X25taV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJLyoKKwkgKiBVbm1hc2sgTk1JIG9uIGFsbCBjcHVzCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQxKSB8IEFQSUNfRE1fTk1JOworCXZhbHVlICY9IH5BUElDX0xWVF9NQVNLRUQ7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKK30KIAogdm9pZCBfX2luaXQgdXZfc3lzdGVtX2luaXQodm9pZCkKIHsKQEAgLTYzNCw4ICs3MDMsOCBAQAogCX0KIAogCXV2X2Jpb3NfaW5pdCgpOwotCXV2X2Jpb3NfZ2V0X3NuX2luZm8oMCwgJnV2X3R5cGUsICZzbl9wYXJ0aXRpb25faWQsCi0JCQkgICAgJnNuX2NvaGVyZW5jeV9pZCwgJnNuX3JlZ2lvbl9zaXplKTsKKwl1dl9iaW9zX2dldF9zbl9pbmZvKDAsICZ1dl90eXBlLCAmc25fcGFydGl0aW9uX2lkLCAmc25fY29oZXJlbmN5X2lkLAorCQkJICAgICZzbl9yZWdpb25fc2l6ZSwgJnN5c3RlbV9zZXJpYWxfbnVtYmVyKTsKIAl1dl9ydGNfaW5pdCgpOwogCiAJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CkBAIC02OTAsNSArNzU5LDkgQEAKIAogCXV2X2NwdV9pbml0KCk7CiAJdXZfc2Npcl9yZWdpc3Rlcl9jcHVfbm90aWZpZXIoKTsKKwl1dl9yZWdpc3Rlcl9ubWlfbm90aWZpZXIoKTsKIAlwcm9jX21rZGlyKCJzZ2lfdXYiLCBOVUxMKTsKKworCS8qIHJlZ2lzdGVyIExlZ2FjeSBWR0EgSS9PIHJlZGlyZWN0aW9uIGhhbmRsZXIgKi8KKwlwY2lfcmVnaXN0ZXJfc2V0X3ZnYV9zdGF0ZSh1dl9zZXRfdmdhX3N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCBiNWI2YjIzLi4wMzFhYTg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC0xOTkyLDggKzE5OTIsOCBAQAogCQlhcG1faW5mby5kaXNhYmxlZCA9IDE7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzIG1hY2hpbmUgZGV0ZWN0ZWQuICIKIAkJICAgICAgICJEaXNhYmxpbmcgQVBNLlxuIiwgZC0+aWRlbnQpOwotCQlwcmludGsoS0VSTl9JTkZPICJUaGlzIGJ1ZyBpcyBmaXhlZCBpbiBiaW9zIFAxNSB3aGljaCBpcyBhdmFpbGFibGUgZm9yIFxuIik7Ci0JCXByaW50ayhLRVJOX0lORk8gImRvd25sb2FkIGZyb20gc3VwcG9ydC5pbnRlbC5jb20gXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVGhpcyBidWcgaXMgZml4ZWQgaW4gYmlvcyBQMTUgd2hpY2ggaXMgYXZhaWxhYmxlIGZvclxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImRvd25sb2FkIGZyb20gc3VwcG9ydC5pbnRlbC5jb21cbiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jCmluZGV4IGIwMjA2YTIuLjhiYzU3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYwpAQCAtMTUsOCArMTUsOCBAQAogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgorICogIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uIDxyamFAc2dpLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CkBAIC0zMCw2ICszMCw3IEBACiBzNjQgdXZfYmlvc19jYWxsKGVudW0gdXZfYmlvc19jbWQgd2hpY2gsIHU2NCBhMSwgdTY0IGEyLCB1NjQgYTMsIHU2NCBhNCwgdTY0IGE1KQogewogCXN0cnVjdCB1dl9zeXN0YWIgKnRhYiA9ICZ1dl9zeXN0YWI7CisJczY0IHJldDsKIAogCWlmICghdGFiLT5mdW5jdGlvbikKIAkJLyoKQEAgLTM3LDkgKzM4LDExIEBACiAJCSAqLwogCQlyZXR1cm4gQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKIAotCXJldHVybiBlZmlfY2FsbDYoKHZvaWQgKilfX3ZhKHRhYi0+ZnVuY3Rpb24pLAotCQkJCQkodTY0KXdoaWNoLCBhMSwgYTIsIGEzLCBhNCwgYTUpOworCXJldCA9IGVmaV9jYWxsNigodm9pZCAqKV9fdmEodGFiLT5mdW5jdGlvbiksICh1NjQpd2hpY2gsCisJCQlhMSwgYTIsIGEzLCBhNCwgYTUpOworCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9iaW9zX2NhbGwpOwogCiBzNjQgdXZfYmlvc19jYWxsX2lycXNhdmUoZW51bSB1dl9iaW9zX2NtZCB3aGljaCwgdTY0IGExLCB1NjQgYTIsIHU2NCBhMywKIAkJCQkJdTY0IGE0LCB1NjQgYTUpCkBAIC03MywxMSArNzYsMTQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNuX2NvaGVyZW5jeV9pZCk7CiBsb25nIHNuX3JlZ2lvbl9zaXplOwogRVhQT1JUX1NZTUJPTF9HUEwoc25fcmVnaW9uX3NpemUpOworbG9uZyBzeXN0ZW1fc2VyaWFsX251bWJlcjsKK0VYUE9SVF9TWU1CT0xfR1BMKHN5c3RlbV9zZXJpYWxfbnVtYmVyKTsKIGludCB1dl90eXBlOworRVhQT1JUX1NZTUJPTF9HUEwodXZfdHlwZSk7CiAKIAogczY0IHV2X2Jpb3NfZ2V0X3NuX2luZm8oaW50IGZjLCBpbnQgKnV2dHlwZSwgbG9uZyAqcGFydGlkLCBsb25nICpjb2hlciwKLQkJbG9uZyAqcmVnaW9uKQorCQlsb25nICpyZWdpb24sIGxvbmcgKnNzbikKIHsKIAlzNjQgcmV0OwogCXU2NCB2MCwgdjE7CkBAIC05Nyw4ICsxMDMsMTEgQEAKIAkJKmNvaGVyID0gcGFydC5jb2hlcmVuY2VfaWQ7CiAJaWYgKHJlZ2lvbikKIAkJKnJlZ2lvbiA9IHBhcnQucmVnaW9uX3NpemU7CisJaWYgKHNzbikKKwkJKnNzbiA9IHYxOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9iaW9zX2dldF9zbl9pbmZvKTsKIAogaW50CiB1dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBtcV9zaXplLApAQCAtMTU0LDYgKzE2MywyNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXZfYmlvc19mcmVxX2Jhc2UpOwogCisvKgorICogdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQgLSBTZXQgTGVnYWN5IFZHQSBJL08gVGFyZ2V0CisgKiBAZGVjb2RlOiB0cnVlIHRvIGVuYWJsZSB0YXJnZXQsIGZhbHNlIHRvIGRpc2FibGUgdGFyZ2V0CisgKiBAZG9tYWluOiBQQ0kgZG9tYWluIG51bWJlcgorICogQGJ1czogUENJIGJ1cyBudW1iZXIKKyAqCisgKiBSZXR1cm5zOgorICogICAgMDogU3VjY2VzcworICogICAgLUVJTlZBTDogSW52YWxpZCBkb21haW4gb3IgYnVzIG51bWJlcgorICogICAgLUVOT1NZUzogQ2FwYWJpbGl0eSBub3QgYXZhaWxhYmxlCisgKiAgICAtRUJVU1k6IExlZ2FjeSBWR0EgSS9PIGNhbm5vdCBiZSByZXRhcmdldGVkIGF0IHRoaXMgdGltZQorICovCitpbnQgdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQoYm9vbCBkZWNvZGUsIGludCBkb21haW4sIGludCBidXMpCit7CisJcmV0dXJuIHV2X2Jpb3NfY2FsbChVVl9CSU9TX1NFVF9MRUdBQ1lfVkdBX1RBUkdFVCwKKwkJCQkodTY0KWRlY29kZSwgKHU2NClkb21haW4sICh1NjQpYnVzLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X2Jpb3Nfc2V0X2xlZ2FjeV92Z2FfdGFyZ2V0KTsKKwogCiAjaWZkZWYgQ09ORklHX0VGSQogdm9pZCB1dl9iaW9zX2luaXQodm9pZCkKQEAgLTE4NSw0ICsyMTMsMyBAQAogCiB2b2lkIHV2X2Jpb3NfaW5pdCh2b2lkKSB7IH0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKaW5kZXggNDY4NDg5Yi4uOTdhZDc5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYwpAQCAtMzIsNiArMzIsMTAgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBfX2NwdWluaXRjb25zdCBjcHVpZF9iaXRzW10gPSB7CiAJCXsgWDg2X0ZFQVRVUkVfSURBLCBDUl9FQVgsIDEsIDB4MDAwMDAwMDYgfSwKIAkJeyBYODZfRkVBVFVSRV9BUkFULCBDUl9FQVgsIDIsIDB4MDAwMDAwMDYgfSwKKwkJeyBYODZfRkVBVFVSRV9OUFQsICAgQ1JfRURYLCAwLCAweDgwMDAwMDBhIH0sCisJCXsgWDg2X0ZFQVRVUkVfTEJSViwgIENSX0VEWCwgMSwgMHg4MDAwMDAwYSB9LAorCQl7IFg4Nl9GRUFUVVJFX1NWTUwsICBDUl9FRFgsIDIsIDB4ODAwMDAwMGEgfSwKKwkJeyBYODZfRkVBVFVSRV9OUklQUywgQ1JfRURYLCAzLCAweDgwMDAwMDBhIH0sCiAJCXsgMCwgMCwgMCwgMCB9CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggZmM2YzhlZi4uZWRkYjFiZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9rOC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2RlZmluZSBMVkxfMV9JTlNUCTEKICNkZWZpbmUgTFZMXzFfREFUQQkyCkBAIC0zMSw2ICszMiw4IEBACiAJc2hvcnQgc2l6ZTsKIH07CiAKKyNkZWZpbmUgTUIoeCkJKCh4KSAqIDEwMjQpCisKIC8qIEFsbCB0aGUgY2FjaGUgZGVzY3JpcHRvciB0eXBlcyB3ZSBjYXJlIGFib3V0IChubyBUTEIgb3IKICAgIHRyYWNlIGNhY2hlIGVudHJpZXMpICovCiAKQEAgLTQ0LDkgKzQ3LDkgQEAKIAl7IDB4MGQsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MjEsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIyLCBMVkxfMywgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4MjMsIExWTF8zLCAgICAgIDEwMjQgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4MjUsIExWTF8zLCAgICAgIDIwNDggfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4MjksIExWTF8zLCAgICAgIDQwOTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4MjMsIExWTF8zLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDI1LCBMVkxfMywgICAgICBNQigyKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHgyOSwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MmMsIExWTF8xX0RBVEEsIDMyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MzAsIExWTF8xX0lOU1QsIDMyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MzksIExWTF8yLCAgICAgIDEyOCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtNTksMTYgKzYyLDE2IEBACiAJeyAweDQxLCBMVkxfMiwgICAgICAxMjggfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0MiwgTFZMXzIsICAgICAgMjU2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NDMsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDQ0LCBMVkxfMiwgICAgICAxMDI0IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NDUsIExWTF8yLCAgICAgIDIwNDggfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0NiwgTFZMXzMsICAgICAgNDA5NiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDQ3LCBMVkxfMywgICAgICA4MTkyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NDksIExWTF8zLCAgICAgIDQwOTYgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGEsIExWTF8zLCAgICAgIDYxNDQgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGIsIExWTF8zLCAgICAgIDgxOTIgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGMsIExWTF8zLCAgICAgMTIyODggfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGQsIExWTF8zLCAgICAgMTYzODQgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGUsIExWTF8yLCAgICAgIDYxNDQgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDQsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDUsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDYsIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDcsIExWTF8zLCAgICAgIE1CKDgpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDksIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDRhLCBMVkxfMywgICAgICBNQig2KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0YiwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NGMsIExWTF8zLCAgICAgIE1CKDEyKSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0ZCwgTFZMXzMsICAgICAgTUIoMTYpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDRlLCBMVkxfMiwgICAgICBNQig2KSB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg2MCwgTFZMXzFfREFUQSwgMTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NjYsIExWTF8xX0RBVEEsIDggfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NjcsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCkBAIC03NywzNCArODAsMzQgQEAKIAl7IDB4NzEsIExWTF9UUkFDRSwgIDE2IH0sCS8qIDgtd2F5IHNldCBhc3NvYyAqLwogCXsgMHg3MiwgTFZMX1RSQUNFLCAgMzIgfSwJLyogOC13YXkgc2V0IGFzc29jICovCiAJeyAweDczLCBMVkxfVFJBQ0UsICA2NCB9LAkvKiA4LXdheSBzZXQgYXNzb2MgKi8KLQl7IDB4NzgsIExWTF8yLCAgICAxMDI0IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NzksIExWTF8yLCAgICAgMTI4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdhLCBMVkxfMiwgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg3YiwgTFZMXzIsICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4N2MsIExWTF8yLCAgICAxMDI0IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdkLCBMVkxfMiwgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdmLCBMVkxfMiwgICAgIDUxMiB9LAkvKiAyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDgyLCBMVkxfMiwgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDgzLCBMVkxfMiwgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg0LCBMVkxfMiwgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg1LCBMVkxfMiwgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg2LCBMVkxfMiwgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg3LCBMVkxfMiwgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQwLCBMVkxfMywgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQxLCBMVkxfMywgICAgMTAyNCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQyLCBMVkxfMywgICAgMjA0OCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQ2LCBMVkxfMywgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQ3LCBMVkxfMywgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQ4LCBMVkxfMywgICAgNDA5NiB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkYywgTFZMXzMsICAgIDIwNDggfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZGQsIExWTF8zLCAgICA0MDk2IH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGRlLCBMVkxfMywgICAgODE5MiB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlMiwgTFZMXzMsICAgIDIwNDggfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZTMsIExWTF8zLCAgICA0MDk2IH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGU0LCBMVkxfMywgICAgODE5MiB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlYSwgTFZMXzMsICAgIDEyMjg4IH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGViLCBMVkxfMywgICAgMTg0MzIgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZWMsIExWTF8zLCAgICAyNDU3NiB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3OCwgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3OSwgTFZMXzIsICAgICAgMTI4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDdhLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2IsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3YywgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2QsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2YsIExWTF8yLCAgICAgIDUxMiB9LAkvKiAyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDgyLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4MywgTFZMXzIsICAgICAgNTEyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODQsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODUsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODYsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDg3LCBMVkxfMiwgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGQwLCBMVkxfMywgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkMSwgTFZMXzMsICAgICAgTUIoMSkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkMiwgTFZMXzMsICAgICAgTUIoMikgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkNiwgTFZMXzMsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkNywgTFZMXzMsICAgICAgTUIoMikgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkOCwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZGMsIExWTF8zLCAgICAgIE1CKDIpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGRkLCBMVkxfMywgICAgICBNQig0KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkZSwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZTIsIExWTF8zLCAgICAgIE1CKDIpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGUzLCBMVkxfMywgICAgICBNQig0KSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlNCwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZWEsIExWTF8zLCAgICAgIE1CKDEyKSB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlYiwgTFZMXzMsICAgICAgTUIoMTgpIH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGVjLCBMVkxfMywgICAgICBNQigyNCkgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MDAsIDAsIDB9CiB9OwogCkBAIC0xNTAsNyArMTUzLDggQEAKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWJ4IGVieDsKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWN4IGVjeDsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBjYW5fZGlzYWJsZTsKKwlib29sIGNhbl9kaXNhYmxlOworCXVuc2lnbmVkIGludCBsM19pbmRpY2VzOwogCURFQ0xBUkVfQklUTUFQKHNoYXJlZF9jcHVfbWFwLCBOUl9DUFVTKTsKIH07CiAKQEAgLTE2MCw3ICsxNjQsOCBAQAogCXVuaW9uIF9jcHVpZDRfbGVhZl9lYnggZWJ4OwogCXVuaW9uIF9jcHVpZDRfbGVhZl9lY3ggZWN4OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGNhbl9kaXNhYmxlOworCWJvb2wgY2FuX2Rpc2FibGU7CisJdW5zaWduZWQgaW50IGwzX2luZGljZXM7CiB9OwogCiB1bnNpZ25lZCBzaG9ydAkJCW51bV9jYWNoZV9sZWF2ZXM7CkBAIC0yOTAsNiArMjk1LDM2IEBACiAJCShlYngtPnNwbGl0LndheXNfb2ZfYXNzb2NpYXRpdml0eSArIDEpIC0gMTsKIH0KIAorc3RydWN0IF9jYWNoZV9hdHRyIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY29uc3QgY2hhciAqLCBzaXplX3QgY291bnQpOworfTsKKworI2lmZGVmIENPTkZJR19DUFVfU1VQX0FNRAorc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWluaXQgYW1kX2NhbGNfbDNfaW5kaWNlcyh2b2lkKQoreworCS8qCisJICogV2UncmUgY2FsbGVkIG92ZXIgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCkgYW5kIHRoZXJlZm9yZQorCSAqIGFyZSBvbiB0aGUgY29ycmVjdCBjcHUuCisJICovCisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKKwl1bnNpZ25lZCBpbnQgc2MwLCBzYzEsIHNjMiwgc2MzOworCXUzMiB2YWwgPSAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHgxQzQsICZ2YWwpOworCisJLyogY2FsY3VsYXRlIHN1YmNhY2hlIHNpemVzICovCisJc2MwID0gISh2YWwgJiBCSVQoMCkpOworCXNjMSA9ICEodmFsICYgQklUKDQpKTsKKwlzYzIgPSAhKHZhbCAmIEJJVCg4KSkgICsgISh2YWwgJiBCSVQoOSkpOworCXNjMyA9ICEodmFsICYgQklUKDEyKSkgKyAhKHZhbCAmIEJJVCgxMykpOworCisJcmV0dXJuIChtYXgobWF4KG1heChzYzAsIHNjMSksIHNjMiksIHNjMykgPDwgMTApIC0gMTsKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0CiBhbWRfY2hlY2tfbDNfZGlzYWJsZShpbnQgaW5kZXgsIHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqdGhpc19sZWFmKQogewpAQCAtMjk5LDEzICszMzQsMTA0IEBACiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTEpCiAJCXJldHVybjsKIAotCS8qIHNlZSBlcnJhdHVtICMzODIgKi8KLQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTApICYmIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8IDB4OCkpCisJLyogc2VlIGVycmF0YSAjMzgyIGFuZCAjMzg4ICovCisJaWYgKChib290X2NwdV9kYXRhLng4NiA9PSAweDEwKSAmJgorCSAgICAoKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsIDwgMHg4KSB8fAorCSAgICAgKGJvb3RfY3B1X2RhdGEueDg2X21hc2sgIDwgMHgxKSkpCiAJCXJldHVybjsKIAotCXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUgPSAxOworCXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUgPSB0cnVlOworCXRoaXNfbGVhZi0+bDNfaW5kaWNlcyAgPSBhbWRfY2FsY19sM19pbmRpY2VzKCk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfY2FjaGVfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZiwKKwkJCQkgIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlpbnQgY3B1ID0gY3B1bWFza19maXJzdCh0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKKwlpbnQgbm9kZSA9IGFtZF9nZXRfbmJfaWQoY3B1KTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOworCXVuc2lnbmVkIGludCByZWcgPSAwOworCisJaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCAmcmVnKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIHJlZyk7Cit9CisKKyNkZWZpbmUgU0hPV19DQUNIRV9ESVNBQkxFKGluZGV4KQkJCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3Nob3dfY2FjaGVfZGlzYWJsZV8jI2luZGV4KHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBzaG93X2NhY2hlX2Rpc2FibGUodGhpc19sZWFmLCBidWYsIGluZGV4KTsJCVwKK30KK1NIT1dfQ0FDSEVfRElTQUJMRSgwKQorU0hPV19DQUNIRV9ESVNBQkxFKDEpCisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2NhY2hlX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAorCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QodG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7CisJaW50IG5vZGUgPSBhbWRfZ2V0X25iX2lkKGNwdSk7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKKwl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CisKKyNkZWZpbmUgU1VCQ0FDSEVfTUFTSwkoM1VMIDw8IDIwKQorI2RlZmluZSBTVUJDQUNIRV9JTkRFWAkweGZmZgorCisJaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZG8gbm90IGFsbG93IHdyaXRlcyBvdXRzaWRlIG9mIGFsbG93ZWQgYml0cyAqLworCWlmICgodmFsICYgfihTVUJDQUNIRV9NQVNLIHwgU1VCQ0FDSEVfSU5ERVgpKSB8fAorCSAgICAoKHZhbCAmIFNVQkNBQ0hFX0lOREVYKSA+IHRoaXNfbGVhZi0+bDNfaW5kaWNlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsIHw9IEJJVCgzMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCB2YWwpOworCS8qCisJICogV2UgbmVlZCB0byBXQklOVkQgb24gYSBjb3JlIG9uIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhlIEwzIGNhY2hlIHdoaWNoCisJICogaW5kaWNlcyB3ZSBkaXNhYmxlIHRoZXJlZm9yZSBhIHNpbXBsZSB3YmludmQoKSBpcyBub3Qgc3VmZmljaWVudC4KKwkgKi8KKwl3YmludmRfb25fY3B1KGNwdSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCB2YWwgfCBCSVQoMzEpKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKyNkZWZpbmUgU1RPUkVfQ0FDSEVfRElTQUJMRShpbmRleCkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCitzdG9yZV9jYWNoZV9kaXNhYmxlXyMjaW5kZXgoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAkJXAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc3RvcmVfY2FjaGVfZGlzYWJsZSh0aGlzX2xlYWYsIGJ1ZiwgY291bnQsIGluZGV4KTsJXAorfQorU1RPUkVfQ0FDSEVfRElTQUJMRSgwKQorU1RPUkVfQ0FDSEVfRElTQUJMRSgxKQorCitzdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMCA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzAsIDA2NDQsCisJCXNob3dfY2FjaGVfZGlzYWJsZV8wLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzApOworc3RhdGljIHN0cnVjdCBfY2FjaGVfYXR0ciBjYWNoZV9kaXNhYmxlXzEgPSBfX0FUVFIoY2FjaGVfZGlzYWJsZV8xLCAwNjQ0LAorCQlzaG93X2NhY2hlX2Rpc2FibGVfMSwgc3RvcmVfY2FjaGVfZGlzYWJsZV8xKTsKKworI2Vsc2UJLyogQ09ORklHX0NQVV9TVVBfQU1EICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQKK2FtZF9jaGVja19sM19kaXNhYmxlKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYpCit7Cit9OworI2VuZGlmIC8qIENPTkZJR19DUFVfU1VQX0FNRCAqLworCiBzdGF0aWMgaW50CiBfX2NwdWluaXQgY3B1aWQ0X2NhY2hlX2xvb2t1cF9yZWdzKGludCBpbmRleCwKIAkJCQkgICBzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZikKQEAgLTcxMSw4MiArODM3LDYgQEAKICNkZWZpbmUgdG9fb2JqZWN0KGspCWNvbnRhaW5lcl9vZihrLCBzdHJ1Y3QgX2luZGV4X2tvYmplY3QsIGtvYmopCiAjZGVmaW5lIHRvX2F0dHIoYSkJY29udGFpbmVyX29mKGEsIHN0cnVjdCBfY2FjaGVfYXR0ciwgYXR0cikKIAotc3RhdGljIHNzaXplX3Qgc2hvd19jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmLAotCQkJCSAgdW5zaWduZWQgaW50IGluZGV4KQotewotCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwotCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOwotCXVuc2lnbmVkIGludCByZWcgPSAwOwotCi0JaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCAmcmVnKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgcmVnKTsKLX0KLQotI2RlZmluZSBTSE9XX0NBQ0hFX0RJU0FCTEUoaW5kZXgpCQkJCQlcCi1zdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19jYWNoZV9kaXNhYmxlXyMjaW5kZXgoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLCBjaGFyICpidWYpICAJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc2hvd19jYWNoZV9kaXNhYmxlKHRoaXNfbGVhZiwgYnVmLCBpbmRleCk7CQlcCi19Ci1TSE9XX0NBQ0hFX0RJU0FCTEUoMCkKLVNIT1dfQ0FDSEVfRElTQUJMRSgxKQotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwKLQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgaW50IGluZGV4KQotewotCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwotCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKLQl1bnNpZ25lZCBpbnQgc2NydWJiZXIgPSAwOwotCi0JaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmFsIHw9IDB4YzAwMDAwMDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDU4LCAmc2NydWJiZXIpOwotCXNjcnViYmVyICY9IH4weDFmMDAwMDAwOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDU4LCBzY3J1YmJlcik7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsIHZhbCAmIH4weDQwMDAwMDAwKTsKLQl3YmludmQoKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsIHZhbCk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi0jZGVmaW5lIFNUT1JFX0NBQ0hFX0RJU0FCTEUoaW5kZXgpCQkJCQlcCi1zdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc3RvcmVfY2FjaGVfZGlzYWJsZV8jI2luZGV4KHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwJICAgICAJXAotCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc3RvcmVfY2FjaGVfZGlzYWJsZSh0aGlzX2xlYWYsIGJ1ZiwgY291bnQsIGluZGV4KTsJXAotfQotU1RPUkVfQ0FDSEVfRElTQUJMRSgwKQotU1RPUkVfQ0FDSEVfRElTQUJMRSgxKQotCi1zdHJ1Y3QgX2NhY2hlX2F0dHIgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBjb25zdCBjaGFyICosIHNpemVfdCBjb3VudCk7Ci19OwotCiAjZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpIFwKIHN0YXRpYyBzdHJ1Y3QgX2NhY2hlX2F0dHIgX25hbWUgPSBcCiAJX19BVFRSKF9uYW1lLCAwNDQ0LCBzaG93XyMjX25hbWUsIE5VTEwpCkBAIC04MDEsMjMgKzg1MSwyOCBAQAogZGVmaW5lX29uZV9ybyhzaGFyZWRfY3B1X21hcCk7CiBkZWZpbmVfb25lX3JvKHNoYXJlZF9jcHVfbGlzdCk7CiAKLXN0YXRpYyBzdHJ1Y3QgX2NhY2hlX2F0dHIgY2FjaGVfZGlzYWJsZV8wID0gX19BVFRSKGNhY2hlX2Rpc2FibGVfMCwgMDY0NCwKLQkJc2hvd19jYWNoZV9kaXNhYmxlXzAsIHN0b3JlX2NhY2hlX2Rpc2FibGVfMCk7Ci1zdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMSA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzEsIDA2NDQsCi0JCXNob3dfY2FjaGVfZGlzYWJsZV8xLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzEpOworI2RlZmluZSBERUZBVUxUX1NZU0ZTX0NBQ0hFX0FUVFJTCVwKKwkmdHlwZS5hdHRyLAkJCVwKKwkmbGV2ZWwuYXR0ciwJCQlcCisJJmNvaGVyZW5jeV9saW5lX3NpemUuYXR0ciwJXAorCSZwaHlzaWNhbF9saW5lX3BhcnRpdGlvbi5hdHRyLAlcCisJJndheXNfb2ZfYXNzb2NpYXRpdml0eS5hdHRyLAlcCisJJm51bWJlcl9vZl9zZXRzLmF0dHIsCQlcCisJJnNpemUuYXR0ciwJCQlcCisJJnNoYXJlZF9jcHVfbWFwLmF0dHIsCQlcCisJJnNoYXJlZF9jcHVfbGlzdC5hdHRyCiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7Ci0JJnR5cGUuYXR0ciwKLQkmbGV2ZWwuYXR0ciwKLQkmY29oZXJlbmN5X2xpbmVfc2l6ZS5hdHRyLAotCSZwaHlzaWNhbF9saW5lX3BhcnRpdGlvbi5hdHRyLAotCSZ3YXlzX29mX2Fzc29jaWF0aXZpdHkuYXR0ciwKLQkmbnVtYmVyX29mX3NldHMuYXR0ciwKLQkmc2l6ZS5hdHRyLAotCSZzaGFyZWRfY3B1X21hcC5hdHRyLAotCSZzaGFyZWRfY3B1X2xpc3QuYXR0ciwKKwlERUZBVUxUX1NZU0ZTX0NBQ0hFX0FUVFJTLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2wzX2F0dHJzW10gPSB7CisJREVGQVVMVF9TWVNGU19DQUNIRV9BVFRSUywKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKIAkmY2FjaGVfZGlzYWJsZV8wLmF0dHIsCiAJJmNhY2hlX2Rpc2FibGVfMS5hdHRyLAorI2VuZGlmCiAJTlVMTAogfTsKIApAQCAtOTA4LDYgKzk2Myw3IEBACiAJdW5zaWduZWQgaW50IGNwdSA9IHN5c19kZXYtPmlkOwogCXVuc2lnbmVkIGxvbmcgaSwgajsKIAlzdHJ1Y3QgX2luZGV4X2tvYmplY3QgKnRoaXNfb2JqZWN0OworCXN0cnVjdCBfY3B1aWQ0X2luZm8gICAqdGhpc19sZWFmOwogCWludCByZXR2YWw7CiAKIAlyZXR2YWwgPSBjcHVpZDRfY2FjaGVfc3lzZnNfaW5pdChjcHUpOwpAQCAtOTI2LDYgKzk4MiwxNCBAQAogCQl0aGlzX29iamVjdCA9IElOREVYX0tPQkpFQ1RfUFRSKGNwdSwgaSk7CiAJCXRoaXNfb2JqZWN0LT5jcHUgPSBjcHU7CiAJCXRoaXNfb2JqZWN0LT5pbmRleCA9IGk7CisKKwkJdGhpc19sZWFmID0gQ1BVSUQ0X0lORk9fSURYKGNwdSwgaSk7CisKKwkJaWYgKHRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUpCisJCQlrdHlwZV9jYWNoZS5kZWZhdWx0X2F0dHJzID0gZGVmYXVsdF9sM19hdHRyczsKKwkJZWxzZQorCQkJa3R5cGVfY2FjaGUuZGVmYXVsdF9hdHRycyA9IGRlZmF1bHRfYXR0cnM7CisKIAkJcmV0dmFsID0ga29iamVjdF9pbml0X2FuZF9hZGQoJih0aGlzX29iamVjdC0+a29iaiksCiAJCQkJCSAgICAgICZrdHlwZV9jYWNoZSwKIAkJCQkJICAgICAgcGVyX2NwdShpY2lfY2FjaGVfa29iamVjdCwgY3B1KSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZQppbmRleCBmNDM2MWI1Li5hZDllNWVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlCkBAIC0xLDMgKzEsMyBAQAotb2JqLXkJCTo9IG1haW4ubyBpZi5vIGdlbmVyaWMubyBzdGF0ZS5vIGNsZWFudXAubworb2JqLXkJCTo9IG1haW4ubyBpZi5vIGdlbmVyaWMubyBjbGVhbnVwLm8KIG9iai0kKENPTkZJR19YODZfMzIpICs9IGFtZC5vIGN5cml4Lm8gY2VudGF1ci5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYwppbmRleCAzM2FmMTQxLi45MmJhOWNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2FtZC5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyBhbWRfbXRycl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG10cnJfb3BzIGFtZF9tdHJyX29wcyA9IHsKIAkudmVuZG9yICAgICAgICAgICAgPSBYODZfVkVORE9SX0FNRCwKIAkuc2V0ICAgICAgICAgICAgICAgPSBhbWRfc2V0X210cnIsCiAJLmdldCAgICAgICAgICAgICAgID0gYW1kX2dldF9tdHJyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jZW50YXVyLmMKaW5kZXggZGU4OWYxNC4uMzE2ZmUzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2VudGF1ci5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyBjZW50YXVyX210cnJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtdHJyX29wcyBjZW50YXVyX210cnJfb3BzID0gewogCS52ZW5kb3IgICAgICAgICAgICA9IFg4Nl9WRU5ET1JfQ0VOVEFVUiwKIAkuc2V0ICAgICAgICAgICAgICAgPSBjZW50YXVyX3NldF9tY3IsCiAJLmdldCAgICAgICAgICAgICAgID0gY2VudGF1cl9nZXRfbWNyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwppbmRleCAyMjhkOTgyLi42OGEzMzQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJcG9zdF9zZXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyBjeXJpeF9tdHJyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRycl9vcHMgY3lyaXhfbXRycl9vcHMgPSB7CiAJLnZlbmRvciAgICAgICAgICAgID0gWDg2X1ZFTkRPUl9DWVJJWCwKIAkuc2V0X2FsbAkgICA9IGN5cml4X3NldF9hbGwsCiAJLnNldCAgICAgICAgICAgICAgID0gY3lyaXhfc2V0X2FyciwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCmluZGV4IDU1ZGEwYzUuLjlhYTVkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJCXRtcCB8PSB+KCgxPDwoaGkgLSAxKSkgLSAxKTsKIAogCQlpZiAodG1wICE9IG1hc2tfbG8pIHsKLQkJCVdBUk5fT05DRSgxLCBLRVJOX0lORk8gIm10cnI6IHlvdXIgQklPUyBoYXMgc2V0IHVwIGFuIGluY29ycmVjdCBtYXNrLCBmaXhpbmcgaXQgdXAuXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IHlvdXIgQklPUyBoYXMgY29uZmlndXJlZCBhbiBpbmNvcnJlY3QgbWFzaywgZml4aW5nIGl0LlxuIik7CiAJCQltYXNrX2xvID0gdG1wOwogCQl9CiAJfQpAQCAtNTcwLDcgKzU3MCw3IEBACiAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3I0Owotc3RhdGljIERFRklORV9TUElOTE9DSyhzZXRfYXRvbWljaXR5X2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soc2V0X2F0b21pY2l0eV9sb2NrKTsKIAogLyoKICAqIFNpbmNlIHdlIGFyZSBkaXNhYmxpbmcgdGhlIGNhY2hlIGRvbid0IGFsbG93IGFueSBpbnRlcnJ1cHRzLApAQCAtNTkwLDcgKzU5MCw3IEBACiAJICogY2hhbmdlcyB0byB0aGUgd2F5IHRoZSBrZXJuZWwgYm9vdHMKIAkgKi8KIAotCXNwaW5fbG9jaygmc2V0X2F0b21pY2l0eV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZzZXRfYXRvbWljaXR5X2xvY2spOwogCiAJLyogRW50ZXIgdGhlIG5vLWZpbGwgKENEPTEsIE5XPTApIGNhY2hlIG1vZGUgYW5kIGZsdXNoIGNhY2hlcy4gKi8KIAljcjAgPSByZWFkX2NyMCgpIHwgWDg2X0NSMF9DRDsKQEAgLTYyNyw3ICs2MjcsNyBAQAogCS8qIFJlc3RvcmUgdmFsdWUgb2YgQ1I0ICovCiAJaWYgKGNwdV9oYXNfcGdlKQogCQl3cml0ZV9jcjQoY3I0KTsKLQlzcGluX3VubG9jaygmc2V0X2F0b21pY2l0eV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnNldF9hdG9taWNpdHlfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbmVyaWNfc2V0X2FsbCh2b2lkKQpAQCAtNzUyLDcgKzc1Miw3IEBACiAvKgogICogR2VuZXJpYyBzdHJ1Y3R1cmUuLi4KICAqLwotc3RydWN0IG10cnJfb3BzIGdlbmVyaWNfbXRycl9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgbXRycl9vcHMgZ2VuZXJpY19tdHJyX29wcyA9IHsKIAkudXNlX2ludGVsX2lmCQk9IDEsCiAJLnNldF9hbGwJCT0gZ2VuZXJpY19zZXRfYWxsLAogCS5nZXQJCQk9IGdlbmVyaWNfZ2V0X210cnIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCA4NGU4M2RlLi5mZTQ2MjJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTYwLDE0ICs2MCwxNCBAQAogdTY0IHNpemVfb3JfbWFzaywgc2l6ZV9hbmRfbWFzazsKIHN0YXRpYyBib29sIG10cnJfYXBzX2RlbGF5ZWRfaW5pdDsKIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyAqbXRycl9vcHNbWDg2X1ZFTkRPUl9OVU1dOworc3RhdGljIGNvbnN0IHN0cnVjdCBtdHJyX29wcyAqbXRycl9vcHNbWDg2X1ZFTkRPUl9OVU1dOwogCi1zdHJ1Y3QgbXRycl9vcHMgKm10cnJfaWY7Citjb25zdCBzdHJ1Y3QgbXRycl9vcHMgKm10cnJfaWY7CiAKIHN0YXRpYyB2b2lkIHNldF9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwKIAkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIG10cnJfdHlwZSB0eXBlKTsKIAotdm9pZCBzZXRfbXRycl9vcHMoc3RydWN0IG10cnJfb3BzICpvcHMpCit2b2lkIHNldF9tdHJyX29wcyhjb25zdCBzdHJ1Y3QgbXRycl9vcHMgKm9wcykKIHsKIAlpZiAob3BzLT52ZW5kb3IgJiYgb3BzLT52ZW5kb3IgPCBYODZfVkVORE9SX05VTSkKIAkJbXRycl9vcHNbb3BzLT52ZW5kb3JdID0gb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKaW5kZXggYTUwMWRlZS4uZGY1ZTQxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCkBAIC0zMiw3ICszMiw3IEBACiBleHRlcm4gaW50IGdlbmVyaWNfdmFsaWRhdGVfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgdHlwZSk7CiAKLWV4dGVybiBzdHJ1Y3QgbXRycl9vcHMgZ2VuZXJpY19tdHJyX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbXRycl9vcHMgZ2VuZXJpY19tdHJyX29wczsKIAogZXh0ZXJuIGludCBwb3NpdGl2ZV9oYXZlX3dyY29tYih2b2lkKTsKIApAQCAtNTMsMTAgKzUzLDEwIEBACiAJCXUzMiBiYXNlX2xvLCB1MzIgYmFzZV9oaSwgdTMyIG1hc2tfbG8sIHUzMiBtYXNrX2hpKTsKIHZvaWQgZ2V0X210cnJfc3RhdGUodm9pZCk7CiAKLWV4dGVybiB2b2lkIHNldF9tdHJyX29wcyhzdHJ1Y3QgbXRycl9vcHMgKm9wcyk7CitleHRlcm4gdm9pZCBzZXRfbXRycl9vcHMoY29uc3Qgc3RydWN0IG10cnJfb3BzICpvcHMpOwogCiBleHRlcm4gdTY0IHNpemVfb3JfbWFzaywgc2l6ZV9hbmRfbWFzazsKLWV4dGVybiBzdHJ1Y3QgbXRycl9vcHMgKm10cnJfaWY7CitleHRlcm4gY29uc3Qgc3RydWN0IG10cnJfb3BzICptdHJyX2lmOwogCiAjZGVmaW5lIGlzX2NwdSh2bmQpCShtdHJyX2lmICYmIG10cnJfaWYtPnZlbmRvciA9PSBYODZfVkVORE9SXyMjdm5kKQogI2RlZmluZSB1c2VfaW50ZWwoKQkobXRycl9pZiAmJiBtdHJyX2lmLT51c2VfaW50ZWxfaWYgPT0gMSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9zdGF0ZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYzgwYjQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItY3lyaXguaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0KLSNpbmNsdWRlICJtdHJyLmgiCi0KLS8qIFB1dCB0aGUgcHJvY2Vzc29yIGludG8gYSBzdGF0ZSB3aGVyZSBNVFJScyBjYW4gYmUgc2FmZWx5IHNldCAqLwotdm9pZCBzZXRfbXRycl9wcmVwYXJlX3NhdmUoc3RydWN0IHNldF9tdHJyX2NvbnRleHQgKmN0eHQpCi17Ci0JdW5zaWduZWQgaW50IGNyMDsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyBsb2NhbGx5ICovCi0JbG9jYWxfaXJxX3NhdmUoY3R4dC0+ZmxhZ3MpOwotCi0JaWYgKHVzZV9pbnRlbCgpIHx8IGlzX2NwdShDWVJJWCkpIHsKLQotCQkvKiBTYXZlIHZhbHVlIG9mIENSNCBhbmQgY2xlYXIgUGFnZSBHbG9iYWwgRW5hYmxlIChiaXQgNykgKi8KLQkJaWYgKGNwdV9oYXNfcGdlKSB7Ci0JCQljdHh0LT5jcjR2YWwgPSByZWFkX2NyNCgpOwotCQkJd3JpdGVfY3I0KGN0eHQtPmNyNHZhbCAmIH5YODZfQ1I0X1BHRSk7Ci0JCX0KLQotCQkvKgotCQkgKiBEaXNhYmxlIGFuZCBmbHVzaCBjYWNoZXMuIE5vdGUgdGhhdCB3YmludmQgZmx1c2hlcyB0aGUgVExCcwotCQkgKiBhcyBhIHNpZGUtZWZmZWN0Ci0JCSAqLwotCQljcjAgPSByZWFkX2NyMCgpIHwgWDg2X0NSMF9DRDsKLQkJd2JpbnZkKCk7Ci0JCXdyaXRlX2NyMChjcjApOwotCQl3YmludmQoKTsKLQotCQlpZiAodXNlX2ludGVsKCkpIHsKLQkJCS8qIFNhdmUgTVRSUiBzdGF0ZSAqLwotCQkJcmRtc3IoTVNSX01UUlJkZWZUeXBlLCBjdHh0LT5kZWZ0eXBlX2xvLCBjdHh0LT5kZWZ0eXBlX2hpKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBDeXJpeCBBUlJzIC0KLQkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSB3ZXJlIGV4Y2x1ZGVkIGF0IHRoZSB0b3AKLQkJCSAqLwotCQkJY3R4dC0+Y2NyMyA9IGdldEN4ODYoQ1g4Nl9DQ1IzKTsKLQkJfQotCX0KLX0KLQotdm9pZCBzZXRfbXRycl9jYWNoZV9kaXNhYmxlKHN0cnVjdCBzZXRfbXRycl9jb250ZXh0ICpjdHh0KQotewotCWlmICh1c2VfaW50ZWwoKSkgewotCQkvKiBEaXNhYmxlIE1UUlJzLCBhbmQgc2V0IHRoZSBkZWZhdWx0IHR5cGUgdG8gdW5jYWNoZWQgKi8KLQkJbXRycl93cm1zcihNU1JfTVRSUmRlZlR5cGUsIGN0eHQtPmRlZnR5cGVfbG8gJiAweGYzMDBVTCwKLQkJICAgICAgY3R4dC0+ZGVmdHlwZV9oaSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGlzX2NwdShDWVJJWCkpIHsKLQkJCS8qIEN5cml4IEFSUnMgLSBldmVyeXRoaW5nIGVsc2Ugd2VyZSBleGNsdWRlZCBhdCB0aGUgdG9wICovCi0JCQlzZXRDeDg2KENYODZfQ0NSMywgKGN0eHQtPmNjcjMgJiAweDBmKSB8IDB4MTApOwotCQl9Ci0JfQotfQotCi0vKiBSZXN0b3JlIHRoZSBwcm9jZXNzb3IgYWZ0ZXIgYSBzZXRfbXRycl9wcmVwYXJlICovCi12b2lkIHNldF9tdHJyX2RvbmUoc3RydWN0IHNldF9tdHJyX2NvbnRleHQgKmN0eHQpCi17Ci0JaWYgKHVzZV9pbnRlbCgpIHx8IGlzX2NwdShDWVJJWCkpIHsKLQotCQkvKiBGbHVzaCBjYWNoZXMgYW5kIFRMQnMgKi8KLQkJd2JpbnZkKCk7Ci0KLQkJLyogUmVzdG9yZSBNVFJSZGVmVHlwZSAqLwotCQlpZiAodXNlX2ludGVsKCkpIHsKLQkJCS8qIEludGVsIChQNikgc3RhbmRhcmQgTVRSUnMgKi8KLQkJCW10cnJfd3Jtc3IoTVNSX01UUlJkZWZUeXBlLCBjdHh0LT5kZWZ0eXBlX2xvLAotCQkJCSAgIGN0eHQtPmRlZnR5cGVfaGkpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIEN5cml4IEFSUnMgLQotCQkJICogZXZlcnl0aGluZyBlbHNlIHdhcyBleGNsdWRlZCBhdCB0aGUgdG9wCi0JCQkgKi8KLQkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCBjdHh0LT5jY3IzKTsKLQkJfQotCi0JCS8qIEVuYWJsZSBjYWNoZXMgKi8KLQkJd3JpdGVfY3IwKHJlYWRfY3IwKCkgJiAweGJmZmZmZmZmKTsKLQotCQkvKiBSZXN0b3JlIHZhbHVlIG9mIENSNCAqLwotCQlpZiAoY3B1X2hhc19wZ2UpCi0JCQl3cml0ZV9jcjQoY3R4dC0+Y3I0dmFsKTsKLQl9Ci0JLyogUmUtZW5hYmxlIGludGVycnVwdHMgbG9jYWxseSAoaWYgZW5hYmxlZCBwcmV2aW91c2x5KSAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGN0eHQtPmZsYWdzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggOGMxYzA3MC4uNjQxY2NiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTcsNiArNyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4sIFJvYmVydCBSaWNodGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLCA8bWFya3VzLnQubWV0emdlckBpbnRlbC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiwgU3RlcGhhbmUgRXJhbmlhbgogICoKICAqICBGb3IgbGljZW5jaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKICAqLwpAQCAtMjIsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CkBAIC02OCwyNiArNzAsNTkgQEAKIAl1NjQJcGVic19ldmVudF9yZXNldFtNQVhfUEVCU19FVkVOVFNdOwogfTsKIAorc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgeworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZwlpZHhtc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKKwkJdTY0CQlpZHhtc2s2NFsxXTsKKwl9OworCWludAljb2RlOworCWludAljbWFzazsKKwlpbnQJd2VpZ2h0OworfTsKKworc3RydWN0IGFtZF9uYiB7CisJaW50IG5iX2lkOyAgLyogTm9ydGhCcmlkZ2UgaWQgKi8KKwlpbnQgcmVmY250OyAvKiByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3QgcGVyZl9ldmVudCAqb3duZXJzW1g4Nl9QTUNfSURYX01BWF07CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgZXZlbnRfY29uc3RyYWludHNbWDg2X1BNQ19JRFhfTUFYXTsKK307CisKIHN0cnVjdCBjcHVfaHdfZXZlbnRzIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRzW1g4Nl9QTUNfSURYX01BWF07Ci0JdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07CisJc3RydWN0IHBlcmZfZXZlbnQJKmV2ZW50c1tYODZfUE1DX0lEWF9NQVhdOyAvKiBpbiBjb3VudGVyIG9yZGVyICovCiAJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKIAl1bnNpZ25lZCBsb25nCQlpbnRlcnJ1cHRzOwogCWludAkJCWVuYWJsZWQ7CiAJc3RydWN0IGRlYnVnX3N0b3JlCSpkczsKKworCWludAkJCW5fZXZlbnRzOworCWludAkJCW5fYWRkZWQ7CisJaW50CQkJYXNzaWduW1g4Nl9QTUNfSURYX01BWF07IC8qIGV2ZW50IHRvIGNvdW50ZXIgYXNzaWdubWVudCAqLworCXU2NAkJCXRhZ3NbWDg2X1BNQ19JRFhfTUFYXTsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRfbGlzdFtYODZfUE1DX0lEWF9NQVhdOyAvKiBpbiBlbmFibGVkIG9yZGVyICovCisJc3RydWN0IGFtZF9uYgkJKmFtZF9uYjsKIH07CiAKLXN0cnVjdCBldmVudF9jb25zdHJhaW50IHsKLQl1bnNpZ25lZCBsb25nCWlkeG1za1tCSVRTX1RPX0xPTkdTKFg4Nl9QTUNfSURYX01BWCldOwotCWludAkJY29kZTsKLX07CisjZGVmaW5lIF9fRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBtLCB3KSB7XAorCXsgLmlkeG1zazY0WzBdID0gKG4pIH0sCQlcCisJLmNvZGUgPSAoYyksCQkJXAorCS5jbWFzayA9IChtKSwJCQlcCisJLndlaWdodCA9ICh3KSwJCQlcCit9CiAKLSNkZWZpbmUgRVZFTlRfQ09OU1RSQUlOVChjLCBtKSB7IC5jb2RlID0gKGMpLCAuaWR4bXNrWzBdID0gKG0pIH0KLSNkZWZpbmUgRVZFTlRfQ09OU1RSQUlOVF9FTkQgIHsgLmNvZGUgPSAwLCAuaWR4bXNrWzBdID0gMCB9CisjZGVmaW5lIEVWRU5UX0NPTlNUUkFJTlQoYywgbiwgbSkJXAorCV9fRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBtLCBIV0VJR0hUKG4pKQogCi0jZGVmaW5lIGZvcl9lYWNoX2V2ZW50X2NvbnN0cmFpbnQoZSwgYykgXAotCWZvciAoKGUpID0gKGMpOyAoZSktPmlkeG1za1swXTsgKGUpKyspCisjZGVmaW5lIElOVEVMX0VWRU5UX0NPTlNUUkFJTlQoYywgbikJXAorCUVWRU5UX0NPTlNUUkFJTlQoYywgbiwgSU5URUxfQVJDSF9FVlRTRUxfTUFTSykKIAorI2RlZmluZSBGSVhFRF9FVkVOVF9DT05TVFJBSU5UKGMsIG4pCVwKKwlFVkVOVF9DT05TVFJBSU5UKGMsIG4sIElOVEVMX0FSQ0hfRklYRURfTUFTSykKKworI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UX0VORAkJXAorCUVWRU5UX0NPTlNUUkFJTlQoMCwgMCwgMCkKKworI2RlZmluZSBmb3JfZWFjaF9ldmVudF9jb25zdHJhaW50KGUsIGMpCVwKKwlmb3IgKChlKSA9IChjKTsgKGUpLT5jbWFzazsgKGUpKyspCiAKIC8qCiAgKiBzdHJ1Y3QgeDg2X3BtdSAtIGdlbmVyaWMgeDg2IHBtdQpAQCAtMTE0LDggKzE0OSwxNCBAQAogCXU2NAkJaW50ZWxfY3RybDsKIAl2b2lkCQkoKmVuYWJsZV9idHMpKHU2NCBjb25maWcpOwogCXZvaWQJCSgqZGlzYWJsZV9idHMpKHZvaWQpOwotCWludAkJKCpnZXRfZXZlbnRfaWR4KShzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKLQkJCQkJIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpOworCisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKgorCQkJKCpnZXRfZXZlbnRfY29uc3RyYWludHMpKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAorCQkJCQkJIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisKKwl2b2lkCQkoKnB1dF9ldmVudF9jb25zdHJhaW50cykoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQkJCQkgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqZXZlbnRfY29uc3RyYWludHM7CiB9OwogCiBzdGF0aWMgc3RydWN0IHg4Nl9wbXUgeDg2X3BtdSBfX3JlYWRfbW9zdGx5OwpAQCAtMTI0LDExMSArMTY1LDggQEAKIAkuZW5hYmxlZCA9IDEsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmV2ZW50X2NvbnN0cmFpbnRzOwotCi0vKgotICogTm90IHN1cmUgYWJvdXQgc29tZSBvZiB0aGVzZQotICovCi1zdGF0aWMgY29uc3QgdTY0IHA2X3BlcmZtb25fZXZlbnRfbWFwW10gPQotewotICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwNzksCi0gIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4MGYyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDAxMmUsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCi0gIFtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCQk9IDB4MDA2MiwKLX07Ci0KLXN0YXRpYyB1NjQgcDZfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCi17Ci0JcmV0dXJuIHA2X3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKLX0KLQotLyoKLSAqIEV2ZW50IHNldHRpbmcgdGhhdCBpcyBzcGVjaWZpZWQgbm90IHRvIGNvdW50IGFueXRoaW5nLgotICogV2UgdXNlIHRoaXMgdG8gZWZmZWN0aXZlbHkgZGlzYWJsZSBhIGNvdW50ZXIuCi0gKgotICogTDJfUlFTVFMgd2l0aCAwIE1FU0kgdW5pdCBtYXNrLgotICovCi0jZGVmaW5lIFA2X05PUF9FVkVOVAkJCTB4MDAwMDAwMkVVTEwKLQotc3RhdGljIHU2NCBwNl9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKLXsKLSNkZWZpbmUgUDZfRVZOVFNFTF9FVkVOVF9NQVNLCQkweDAwMDAwMEZGVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfSU5WX01BU0sJCTB4MDA4MDAwMDBVTEwKLSNkZWZpbmUgUDZfRVZOVFNFTF9SRUdfTUFTSwkJMHhGRjAwMDAwMFVMTAotCi0jZGVmaW5lIFA2X0VWTlRTRUxfTUFTSwkJCVwKLQkoUDZfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAotCSBQNl9FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCi0JIFA2X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKLQkgUDZfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAotCSBQNl9FVk5UU0VMX1JFR19NQVNLKQotCi0JcmV0dXJuIGh3X2V2ZW50ICYgUDZfRVZOVFNFTF9NQVNLOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfcDZfZXZlbnRfY29uc3RyYWludHNbXSA9Ci17Ci0JRVZFTlRfQ09OU1RSQUlOVCgweGMxLCAweDEpLAkvKiBGTE9QUyAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMCwgMHgxKSwJLyogRlBfQ09NUF9PUFNfRVhFICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDExLCAweDEpLAkvKiBGUF9BU1NJU1QgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTIsIDB4MiksCS8qIE1VTCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMywgMHgyKSwJLyogRElWICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDE0LCAweDEpLAkvKiBDWUNMRVNfRElWX0JVU1kgKi8KLQlFVkVOVF9DT05TVFJBSU5UX0VORAotfTsKLQotLyoKLSAqIEludGVsIFBlcmZNb24gdjMuIFVzZWQgb24gQ29yZTIgYW5kIGxhdGVyLgotICovCi1zdGF0aWMgY29uc3QgdTY0IGludGVsX3BlcmZtb25fZXZlbnRfbWFwW10gPQotewotICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwM2MsCi0gIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4NGYyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDQxMmUsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCi0gIFtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCQk9IDB4MDEzYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlX2V2ZW50X2NvbnN0cmFpbnRzW10gPQotewotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMCwgMHgxKSwJLyogRlBfQ09NUF9PUFNfRVhFICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDExLCAweDIpLAkvKiBGUF9BU1NJU1QgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTIsIDB4MiksCS8qIE1VTCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMywgMHgyKSwJLyogRElWICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDE0LCAweDEpLAkvKiBDWUNMRVNfRElWX0JVU1kgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTgsIDB4MSksCS8qIElETEVfRFVSSU5HX0RJViAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxOSwgMHgyKSwJLyogREVMQVlFRF9CWVBBU1MgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4YTEsIDB4MSksCS8qIFJTX1VPUFNfRElTUEFUQ0hfQ1lDTEVTICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweDEpLAkvKiBNRU1fTE9BRF9SRVRJUkVEICovCi0JRVZFTlRfQ09OU1RSQUlOVF9FTkQKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9uZWhhbGVtX2V2ZW50X2NvbnN0cmFpbnRzW10gPQotewotCUVWRU5UX0NPTlNUUkFJTlQoMHg0MCwgMHgzKSwJLyogTDFEX0NBQ0hFX0xEICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDQxLCAweDMpLAkvKiBMMURfQ0FDSEVfU1QgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NDIsIDB4MyksCS8qIEwxRF9DQUNIRV9MT0NLICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDQzLCAweDMpLAkvKiBMMURfQUxMX1JFRiAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg0ZSwgMHgzKSwJLyogTDFEX1BSRUZFVENIICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDRjLCAweDMpLAkvKiBMT0FEX0hJVF9QUkUgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NTEsIDB4MyksCS8qIEwxRCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg1MiwgMHgzKSwJLyogTDFEX0NBQ0hFX1BSRUZFVENIX0xPQ0tfRkJfSElUICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDUzLCAweDMpLAkvKiBMMURfQ0FDSEVfTE9DS19GQl9ISVQgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4YzUsIDB4MyksCS8qIENBQ0hFX0xPQ0tfQ1lDTEVTICovCi0JRVZFTlRfQ09OU1RSQUlOVF9FTkQKLX07Ci0KLXN0YXRpYyB1NjQgaW50ZWxfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCi17Ci0JcmV0dXJuIGludGVsX3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKLX0KK3N0YXRpYyBpbnQgeDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpOwogCiAvKgogICogR2VuZXJhbGl6ZWQgaHcgY2FjaGluZyByZWxhdGVkIGh3X2V2ZW50IHRhYmxlLCBmaWxsZWQKQEAgLTI0NSw0MjQgKzE4Myw2IEBACiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdOwogCi1zdGF0aWMgX19pbml0Y29uc3QgdTY0IG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNGUsIC8qIEwxRF9QUkVGRVRDSC5NSVNTICAgICAgICAgICAgKi8KLQl9LAotIH0sCi0gWyBDKEwxSSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzI0LCAvKiBMMl9SUVNUUy5MT0FEUyAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjI0LCAvKiBMMl9SUVNUUy5MRF9NSVNTICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwYzI0LCAvKiBMMl9SUVNUUy5SRk9TICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODI0LCAvKiBMMl9SUVNUUy5SRk9fTUlTUyAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJlLCAvKiBMTEMgUmVmZXJlbmNlICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJlLCAvKiBMTEMgTWlzc2VzICAgICAgICAgICAgICAgICAgICovCi0JfSwKLSB9LAotIFsgQyhEVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAoYWxpYXMpICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwOCwgLyogRFRMQl9MT0FEX01JU1NFUy5BTlkgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAoYWxpYXMpICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwYywgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCi0JfSwKLSB9LAotIFsgQyhJVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MjBjOCwgLyogSVRMQl9NSVNTX1JFVElSRUQgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLSBbIEMoQlBVICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzZTgsIC8qIEJQVV9DTEVBUlMuQU5ZICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi1zdGF0aWMgX19pbml0Y29uc3QgdTY0IGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcwotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQotewotIFsgQyhMMUQpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBMMURfQ0FDSEVfU1QuSV9TVEFURSAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MTA0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTDFJICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKERUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDIwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKElUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MTI4MiwgLyogSVRMQk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi0gWyBDKEJQVSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi1zdGF0aWMgX19pbml0Y29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIxNDAsIC8qIEwxRF9DQUNIRS5MRCAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRS5TVCAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKEwxSSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MCwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhMTCAgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyOSwgLyogTDJfTEQuTUVTSSAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMjksIC8qIEwyX0xELklTVEFURSAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJBLCAvKiBMMl9TVC5NRVNJICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyQSwgLyogTDJfU1QuSVNUQVRFICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhEVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgIChhbGlhcykgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA1MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfTEQgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMjQwLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgKGFsaWFzKSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDYwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19TVCAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhJVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODIsIC8qIElUTEIuTUlTU0VTICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotIFsgQyhCUFUgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFOWSAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzUsIC8qIEJQX0lOU1RfUkVUSVJFRC5NSVNQUkVEICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotfTsKLQotc3RhdGljIHU2NCBpbnRlbF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKLXsKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfUkVHX01BU0sJCTB4RkYwMDAwMDBVTEwKLQotI2RlZmluZSBDT1JFX0VWTlRTRUxfTUFTSwkJXAotCShDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKLQkgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCi0JIENPUkVfRVZOVFNFTF9FREdFX01BU0sgIHwJXAotCSBDT1JFX0VWTlRTRUxfSU5WX01BU0sgIHwJXAotCSBDT1JFX0VWTlRTRUxfUkVHX01BU0spCi0KLQlyZXR1cm4gaHdfZXZlbnQgJiBDT1JFX0VWTlRTRUxfTUFTSzsKLX0KLQotc3RhdGljIF9faW5pdGNvbnN0IHU2NCBhbWRfaHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwNDAsIC8qIERhdGEgQ2FjaGUgQWNjZXNzZXMgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDQxLCAvKiBEYXRhIENhY2hlIE1pc3NlcyAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0MiwgLyogRGF0YSBDYWNoZSBSZWZpbGxzIDpzeXN0ZW0gKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDI2NywgLyogRGF0YSBQcmVmZXRjaGVyIDphdHRlbXB0cyAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNjcsIC8qIERhdGEgUHJlZmV0Y2hlciA6Y2FuY2VsbGVkICovCi0JfSwKLSB9LAotIFsgQyhMMUkgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogSW5zdHJ1Y3Rpb24gY2FjaGUgZmV0Y2hlcyAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODEsIC8qIEluc3RydWN0aW9uIGNhY2hlIG1pc3NlcyAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTRCLCAvKiBQcmVmZXRjaCBJbnN0cnVjdGlvbnMgOkxvYWQgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTEwgICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzN0QsIC8qIFJlcXVlc3RzIHRvIEwyIENhY2hlIDpJQytEQyAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDM3RSwgLyogTDIgQ2FjaGUgTWlzc2VzIDogSUMrREMgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTdGLCAvKiBMMiBGaWxsL1dyaXRlYmFjayAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKERUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDQwLCAvKiBEYXRhIENhY2hlIEFjY2Vzc2VzICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA0NiwgLyogTDEgRFRMQiBhbmQgTDIgRExUQiBNaXNzICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoSVRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEluc3RydWN0aW9uIGZlY3RoZXMgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDg1LCAvKiBJbnN0ci4gZmV0Y2ggSVRMQiBtaXNzZXMgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLSBbIEMoQlBVICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzIsIC8qIFJldGlyZWQgQnJhbmNoIEluc3RyLiAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMGMzLCAvKiBSZXRpcmVkIE1pc3ByZWRpY3RlZCBCSSAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLX07Ci0KLS8qCi0gKiBBTUQgUGVyZm9ybWFuY2UgTW9uaXRvciBLNyBhbmQgbGF0ZXIuCi0gKi8KLXN0YXRpYyBjb25zdCB1NjQgYW1kX3BlcmZtb25fZXZlbnRfbWFwW10gPQotewotICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwNzYsCi0gIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4MDA4MCwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDAwODEsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCi19OwotCi1zdGF0aWMgdTY0IGFtZF9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKLXsKLQlyZXR1cm4gYW1kX3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKLX0KLQotc3RhdGljIHU2NCBhbWRfcG11X3Jhd19ldmVudCh1NjQgaHdfZXZlbnQpCi17Ci0jZGVmaW5lIEs3X0VWTlRTRUxfRVZFTlRfTUFTSwkweDcwMDAwMDBGRlVMTAotI2RlZmluZSBLN19FVk5UU0VMX1VOSVRfTUFTSwkweDAwMDAwRkYwMFVMTAotI2RlZmluZSBLN19FVk5UU0VMX0VER0VfTUFTSwkweDAwMDA0MDAwMFVMTAotI2RlZmluZSBLN19FVk5UU0VMX0lOVl9NQVNLCTB4MDAwODAwMDAwVUxMCi0jZGVmaW5lIEs3X0VWTlRTRUxfUkVHX01BU0sJMHgwRkYwMDAwMDBVTEwKLQotI2RlZmluZSBLN19FVk5UU0VMX01BU0sJCQlcCi0JKEs3X0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKLQkgSzdfRVZOVFNFTF9VTklUX01BU0sgIHwJXAotCSBLN19FVk5UU0VMX0VER0VfTUFTSyAgfAlcCi0JIEs3X0VWTlRTRUxfSU5WX01BU0sgICB8CVwKLQkgSzdfRVZOVFNFTF9SRUdfTUFTSykKLQotCXJldHVybiBod19ldmVudCAmIEs3X0VWTlRTRUxfTUFTSzsKLX0KLQogLyoKICAqIFByb3BhZ2F0ZSBldmVudCBlbGFwc2VkIHRpbWUgaW50byB0aGUgZ2VuZXJpYyBldmVudC4KICAqIENhbiBvbmx5IGJlIGV4ZWN1dGVkIG9uIHRoZSBDUFUgd2hlcmUgdGhlIGV2ZW50IGlzIGFjdGl2ZS4KQEAgLTkxNCw0MiArNDM0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9idHModTY0IGNvbmZpZykKLXsKLQl1bnNpZ25lZCBsb25nIGRlYnVnY3RsbXNyOwotCi0JZGVidWdjdGxtc3IgPSBnZXRfZGVidWdjdGxtc3IoKTsKLQotCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9UUjsKLQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTOwotCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVElOVDsKLQotCWlmICghKGNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUykpCi0JCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TOwotCi0JaWYgKCEoY29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUikpCi0JCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX1VTUjsKLQotCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2J0cyh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKLQotCWlmICghY3B1Yy0+ZHMpCi0JCXJldHVybjsKLQotCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7Ci0KLQlkZWJ1Z2N0bG1zciAmPQotCQl+KFg4Nl9ERUJVR0NUTF9UUiB8IFg4Nl9ERUJVR0NUTF9CVFMgfCBYODZfREVCVUdDVExfQlRJTlQgfAotCQkgIFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TIHwgWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSKTsKLQotCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Ci19Ci0KIC8qCiAgKiBTZXR1cCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBhdHRyX3R5cGUKICAqLwpAQCAtOTg4LDYgKzQ3Miw4IEBACiAJaHdjLT5jb25maWcgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfSU5UOwogCiAJaHdjLT5pZHggPSAtMTsKKwlod2MtPmxhc3RfY3B1ID0gLTE7CisJaHdjLT5sYXN0X3RhZyA9IH4wVUxMOwogCiAJLyoKIAkgKiBDb3VudCB1c2VyIGFuZCBPUyBldmVudHMgdW5sZXNzIHJlcXVlc3RlZCBub3QgdG8uCkBAIC0xMDU2LDEyNiArNTQyLDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHA2X3BtdV9kaXNhYmxlX2FsbCh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdTY0IHZhbDsKLQotCWlmICghY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDA7Ci0JYmFycmllcigpOwotCi0JLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLwotCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Ci0JdmFsICY9IH5BUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQl3cm1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9hbGwodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCi0JaWYgKCFjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMDsKLQliYXJyaWVyKCk7Ci0KLQl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgMCk7Ci0KLQlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOwotfQotCi1zdGF0aWMgdm9pZCBhbWRfcG11X2Rpc2FibGVfYWxsKHZvaWQpCitzdGF0aWMgdm9pZCB4ODZfcG11X2Rpc2FibGVfYWxsKHZvaWQpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAlpbnQgaWR4OwogCi0JaWYgKCFjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMDsKLQkvKgotCSAqIGVuc3VyZSB3ZSB3cml0ZSB0aGUgZGlzYWJsZSBiZWZvcmUgd2Ugc3RhcnQgZGlzYWJsaW5nIHRoZQotCSAqIGV2ZW50cyBwcm9wZXIsIHNvIHRoYXQgYW1kX3BtdV9lbmFibGVfZXZlbnQoKSBkb2VzIHRoZQotCSAqIHJpZ2h0IHRoaW5nLgotCSAqLwotCWJhcnJpZXIoKTsKLQogCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgewogCQl1NjQgdmFsOwogCiAJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCiAJCQljb250aW51ZTsKLQkJcmRtc3JsKE1TUl9LN19FVk5UU0VMMCArIGlkeCwgdmFsKTsKKwkJcmRtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIHZhbCk7CiAJCWlmICghKHZhbCAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKSkKIAkJCWNvbnRpbnVlOwogCQl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCQl3cm1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOworCQl3cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgdmFsKTsKIAl9CiB9CiAKIHZvaWQgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCiB7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwogCWlmICgheDg2X3BtdV9pbml0aWFsaXplZCgpKQogCQlyZXR1cm47Ci0JcmV0dXJuIHg4Nl9wbXUuZGlzYWJsZV9hbGwoKTsKLX0KIAotc3RhdGljIHZvaWQgcDZfcG11X2VuYWJsZV9hbGwodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0JaWYgKGNwdWMtPmVuYWJsZWQpCisJaWYgKCFjcHVjLT5lbmFibGVkKQogCQlyZXR1cm47CiAKLQljcHVjLT5lbmFibGVkID0gMTsKKwljcHVjLT5uX2FkZGVkID0gMDsKKwljcHVjLT5lbmFibGVkID0gMDsKIAliYXJyaWVyKCk7CiAKLQkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCi0JcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKLQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0Jd3Jtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKKwl4ODZfcG11LmRpc2FibGVfYWxsKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQotCWlmIChjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMTsKLQliYXJyaWVyKCk7Ci0KLQl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgeDg2X3BtdS5pbnRlbF9jdHJsKTsKLQotCWlmICh0ZXN0X2JpdChYODZfUE1DX0lEWF9GSVhFRF9CVFMsIGNwdWMtPmFjdGl2ZV9tYXNrKSkgewotCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPQotCQkJY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107Ci0KLQkJaWYgKFdBUk5fT05fT05DRSghZXZlbnQpKQotCQkJcmV0dXJuOwotCi0JCWludGVsX3BtdV9lbmFibGVfYnRzKGV2ZW50LT5ody5jb25maWcpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYW1kX3BtdV9lbmFibGVfYWxsKHZvaWQpCitzdGF0aWMgdm9pZCB4ODZfcG11X2VuYWJsZV9hbGwodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCWludCBpZHg7CiAKLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDE7Ci0JYmFycmllcigpOwotCiAJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CiAJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOwogCQl1NjQgdmFsOwpAQCAtMTE4NSwzMiArNTkxLDI2NiBAQAogCiAJCXZhbCA9IGV2ZW50LT5ody5jb25maWc7CiAJCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQkJd3Jtc3JsKE1TUl9LN19FVk5UU0VMMCArIGlkeCwgdmFsKTsKKwkJd3Jtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIHZhbCk7CiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdSBwbXU7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3g4Nl9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGV2ZW50LT5wbXUgPT0gJnBtdTsKK30KKworc3RhdGljIGludCB4ODZfc2NoZWR1bGVfZXZlbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBpbnQgbiwgaW50ICphc3NpZ24pCit7CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmMsICpjb25zdHJhaW50c1tYODZfUE1DX0lEWF9NQVhdOworCXVuc2lnbmVkIGxvbmcgdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07CisJaW50IGksIGosIHcsIHdtYXgsIG51bSA9IDA7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKworCWJpdG1hcF96ZXJvKHVzZWRfbWFzaywgWDg2X1BNQ19JRFhfTUFYKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJY29uc3RyYWludHNbaV0gPQorCQkgIHg4Nl9wbXUuZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKGNwdWMsIGNwdWMtPmV2ZW50X2xpc3RbaV0pOworCX0KKworCS8qCisJICogZmFzdHBhdGgsIHRyeSB0byByZXVzZSBwcmV2aW91cyByZWdpc3RlcgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaHdjID0gJmNwdWMtPmV2ZW50X2xpc3RbaV0tPmh3OworCQljID0gY29uc3RyYWludHNbaV07CisKKwkJLyogbmV2ZXIgYXNzaWduZWQgKi8KKwkJaWYgKGh3Yy0+aWR4ID09IC0xKQorCQkJYnJlYWs7CisKKwkJLyogY29uc3RyYWludCBzdGlsbCBob25vcmVkICovCisJCWlmICghdGVzdF9iaXQoaHdjLT5pZHgsIGMtPmlkeG1zaykpCisJCQlicmVhazsKKworCQkvKiBub3QgYWxyZWFkeSB1c2VkICovCisJCWlmICh0ZXN0X2JpdChod2MtPmlkeCwgdXNlZF9tYXNrKSkKKwkJCWJyZWFrOworCisJCXNldF9iaXQoaHdjLT5pZHgsIHVzZWRfbWFzayk7CisJCWlmIChhc3NpZ24pCisJCQlhc3NpZ25baV0gPSBod2MtPmlkeDsKKwl9CisJaWYgKGkgPT0gbikKKwkJZ290byBkb25lOworCisJLyoKKwkgKiBiZWdpbiBzbG93IHBhdGgKKwkgKi8KKworCWJpdG1hcF96ZXJvKHVzZWRfbWFzaywgWDg2X1BNQ19JRFhfTUFYKTsKKworCS8qCisJICogd2VpZ2h0ID0gbnVtYmVyIG9mIHBvc3NpYmxlIGNvdW50ZXJzCisJICoKKwkgKiAxICAgID0gbW9zdCBjb25zdHJhaW5lZCwgb25seSB3b3JrcyBvbiBvbmUgY291bnRlcgorCSAqIHdtYXggPSBsZWFzdCBjb25zdHJhaW5lZCwgd29ya3Mgb24gYW55IGNvdW50ZXIKKwkgKgorCSAqIGFzc2lnbiBldmVudHMgdG8gY291bnRlcnMgc3RhcnRpbmcgd2l0aCBtb3N0CisJICogY29uc3RyYWluZWQgZXZlbnRzLgorCSAqLworCXdtYXggPSB4ODZfcG11Lm51bV9ldmVudHM7CisKKwkvKgorCSAqIHdoZW4gZml4ZWQgZXZlbnQgY291bnRlcnMgYXJlIHByZXNlbnQsCisJICogd21heCBpcyBpbmNyZW1lbnRlZCBieSAxIHRvIGFjY291bnQKKwkgKiBmb3Igb25lIG1vcmUgY2hvaWNlCisJICovCisJaWYgKHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCkKKwkJd21heCsrOworCisJZm9yICh3ID0gMSwgbnVtID0gbjsgbnVtICYmIHcgPD0gd21heDsgdysrKSB7CisJCS8qIGZvciBlYWNoIGV2ZW50ICovCisJCWZvciAoaSA9IDA7IG51bSAmJiBpIDwgbjsgaSsrKSB7CisJCQljID0gY29uc3RyYWludHNbaV07CisJCQlod2MgPSAmY3B1Yy0+ZXZlbnRfbGlzdFtpXS0+aHc7CisKKwkJCWlmIChjLT53ZWlnaHQgIT0gdykKKwkJCQljb250aW51ZTsKKworCQkJZm9yX2VhY2hfYml0KGosIGMtPmlkeG1zaywgWDg2X1BNQ19JRFhfTUFYKSB7CisJCQkJaWYgKCF0ZXN0X2JpdChqLCB1c2VkX21hc2spKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGogPT0gWDg2X1BNQ19JRFhfTUFYKQorCQkJCWJyZWFrOworCisJCQlzZXRfYml0KGosIHVzZWRfbWFzayk7CisKKwkJCWlmIChhc3NpZ24pCisJCQkJYXNzaWduW2ldID0gajsKKwkJCW51bS0tOworCQl9CisJfQorZG9uZToKKwkvKgorCSAqIHNjaGVkdWxpbmcgZmFpbGVkIG9yIGlzIGp1c3QgYSBzaW11bGF0aW9uLAorCSAqIGZyZWUgcmVzb3VyY2VzIGlmIG5lY2Vzc2FyeQorCSAqLworCWlmICghYXNzaWduIHx8IG51bSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlpZiAoeDg2X3BtdS5wdXRfZXZlbnRfY29uc3RyYWludHMpCisJCQkJeDg2X3BtdS5wdXRfZXZlbnRfY29uc3RyYWludHMoY3B1YywgY3B1Yy0+ZXZlbnRfbGlzdFtpXSk7CisJCX0KKwl9CisJcmV0dXJuIG51bSA/IC1FTk9TUEMgOiAwOworfQorCisvKgorICogZG9ncnA6IHRydWUgaWYgbXVzdCBjb2xsZWN0IHNpYmxpbmdzIGV2ZW50cyAoZ3JvdXApCisgKiByZXR1cm5zIHRvdGFsIG51bWJlciBvZiBldmVudHMgYW5kIGVycm9yIGNvZGUKKyAqLworc3RhdGljIGludCBjb2xsZWN0X2V2ZW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciwgYm9vbCBkb2dycCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJaW50IG4sIG1heF9jb3VudDsKKworCW1heF9jb3VudCA9IHg4Nl9wbXUubnVtX2V2ZW50cyArIHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZDsKKworCS8qIGN1cnJlbnQgbnVtYmVyIG9mIGV2ZW50cyBhbHJlYWR5IGFjY2VwdGVkICovCisJbiA9IGNwdWMtPm5fZXZlbnRzOworCisJaWYgKGlzX3g4Nl9ldmVudChsZWFkZXIpKSB7CisJCWlmIChuID49IG1heF9jb3VudCkKKwkJCXJldHVybiAtRU5PU1BDOworCQljcHVjLT5ldmVudF9saXN0W25dID0gbGVhZGVyOworCQluKys7CisJfQorCWlmICghZG9ncnApCisJCXJldHVybiBuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoIWlzX3g4Nl9ldmVudChldmVudCkgfHwKKwkJICAgIGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJCWNvbnRpbnVlOworCisJCWlmIChuID49IG1heF9jb3VudCkKKwkJCXJldHVybiAtRU5PU1BDOworCisJCWNwdWMtPmV2ZW50X2xpc3Rbbl0gPSBldmVudDsKKwkJbisrOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHg4Nl9hc3NpZ25faHdfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBpbnQgaSkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKworCWh3Yy0+aWR4ID0gY3B1Yy0+YXNzaWduW2ldOworCWh3Yy0+bGFzdF9jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaHdjLT5sYXN0X3RhZyA9ICsrY3B1Yy0+dGFnc1tpXTsKKworCWlmIChod2MtPmlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpIHsKKwkJaHdjLT5jb25maWdfYmFzZSA9IDA7CisJCWh3Yy0+ZXZlbnRfYmFzZQk9IDA7CisJfSBlbHNlIGlmIChod2MtPmlkeCA+PSBYODZfUE1DX0lEWF9GSVhFRCkgeworCQlod2MtPmNvbmZpZ19iYXNlID0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTDsKKwkJLyoKKwkJICogV2Ugc2V0IGl0IHNvIHRoYXQgZXZlbnRfYmFzZSArIGlkeCBpbiB3cm1zci9yZG1zciBtYXBzIHRvCisJCSAqIE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCAuLi4gQ1RSMjoKKwkJICovCisJCWh3Yy0+ZXZlbnRfYmFzZSA9CisJCQlNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgLSBYODZfUE1DX0lEWF9GSVhFRDsKKwl9IGVsc2UgeworCQlod2MtPmNvbmZpZ19iYXNlID0geDg2X3BtdS5ldmVudHNlbDsKKwkJaHdjLT5ldmVudF9iYXNlICA9IHg4Nl9wbXUucGVyZmN0cjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hdGNoX3ByZXZfYXNzaWdubWVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkJCQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkJaW50IGkpCit7CisJcmV0dXJuIGh3Yy0+aWR4ID09IGNwdWMtPmFzc2lnbltpXSAmJgorCQlod2MtPmxhc3RfY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSAmJgorCQlod2MtPmxhc3RfdGFnID09IGNwdWMtPnRhZ3NbaV07Cit9CisKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCiB2b2lkIGh3X3BlcmZfZW5hYmxlKHZvaWQpCiB7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKwlpbnQgaTsKKwogCWlmICgheDg2X3BtdV9pbml0aWFsaXplZCgpKQogCQlyZXR1cm47CisKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGNwdWMtPm5fYWRkZWQpIHsKKwkJLyoKKwkJICogYXBwbHkgYXNzaWdubWVudCBvYnRhaW5lZCBlaXRoZXIgZnJvbQorCQkgKiBod19wZXJmX2dyb3VwX3NjaGVkX2luKCkgb3IgeDg2X3BtdV9lbmFibGUoKQorCQkgKgorCQkgKiBzdGVwMTogc2F2ZSBldmVudHMgbW92aW5nIHRvIG5ldyBjb3VudGVycworCQkgKiBzdGVwMjogcmVwcm9ncmFtIG1vdmVkIGV2ZW50cyBpbnRvIG5ldyBjb3VudGVycworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNwdWMtPm5fZXZlbnRzOyBpKyspIHsKKworCQkJZXZlbnQgPSBjcHVjLT5ldmVudF9saXN0W2ldOworCQkJaHdjID0gJmV2ZW50LT5odzsKKworCQkJLyoKKwkJCSAqIHdlIGNhbiBhdm9pZCByZXByb2dyYW1taW5nIGNvdW50ZXIgaWY6CisJCQkgKiAtIGFzc2lnbmVkIHNhbWUgY291bnRlciBhcyBsYXN0IHRpbWUKKwkJCSAqIC0gcnVubmluZyBvbiBzYW1lIENQVSBhcyBsYXN0IHRpbWUKKwkJCSAqIC0gbm8gb3RoZXIgZXZlbnQgaGFzIHVzZWQgdGhlIGNvdW50ZXIgc2luY2UKKwkJCSAqLworCQkJaWYgKGh3Yy0+aWR4ID09IC0xIHx8CisJCQkgICAgbWF0Y2hfcHJldl9hc3NpZ25tZW50KGh3YywgY3B1YywgaSkpCisJCQkJY29udGludWU7CisKKwkJCXg4Nl9wbXVfc3RvcChldmVudCk7CisKKwkJCWh3Yy0+aWR4ID0gLTE7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgY3B1Yy0+bl9ldmVudHM7IGkrKykgeworCisJCQlldmVudCA9IGNwdWMtPmV2ZW50X2xpc3RbaV07CisJCQlod2MgPSAmZXZlbnQtPmh3OworCisJCQlpZiAoaHdjLT5pZHggPT0gLTEpIHsKKwkJCQl4ODZfYXNzaWduX2h3X2V2ZW50KGV2ZW50LCBjcHVjLCBpKTsKKwkJCQl4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGh3Yy0+aWR4KTsKKwkJCX0KKwkJCS8qCisJCQkgKiBuZWVkIHRvIG1hcmsgYXMgYWN0aXZlIGJlY2F1c2UgeDg2X3BtdV9kaXNhYmxlKCkKKwkJCSAqIGNsZWFyIGFjdGl2ZV9tYXNrIGFuZCBldmVudHNbXSB5ZXQgaXQgcHJlc2VydmVzCisJCQkgKiBpZHgKKwkJCSAqLworCQkJc2V0X2JpdChod2MtPmlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOworCQkJY3B1Yy0+ZXZlbnRzW2h3Yy0+aWR4XSA9IGV2ZW50OworCisJCQl4ODZfcG11LmVuYWJsZShod2MsIGh3Yy0+aWR4KTsKKwkJCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKwkJfQorCQljcHVjLT5uX2FkZGVkID0gMDsKKwkJcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOworCX0KKworCWNwdWMtPmVuYWJsZWQgPSAxOworCWJhcnJpZXIoKTsKKwogCXg4Nl9wbXUuZW5hYmxlX2FsbCgpOwogfQogCi1zdGF0aWMgaW5saW5lIHU2NCBpbnRlbF9wbXVfZ2V0X3N0YXR1cyh2b2lkKQotewotCXU2NCBzdGF0dXM7Ci0KLQlyZG1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBzdGF0dXMpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGludGVsX3BtdV9hY2tfc3RhdHVzKHU2NCBhY2spCi17Ci0Jd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLCBhY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgeDg2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3g4Nl9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsCiAJCQkgICAgICBod2MtPmNvbmZpZyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKTsKQEAgLTEyMjEsNTMgKzg2MSw2IEBACiAJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIGh3Yy0+Y29uZmlnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZGlzYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCi17Ci0JaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7Ci0JdTY0IGN0cmxfdmFsLCBtYXNrOwotCi0JbWFzayA9IDB4ZlVMTCA8PCAoaWR4ICogNCk7Ci0KLQlyZG1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOwotCWN0cmxfdmFsICY9IH5tYXNrOwotCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcDZfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCXU2NCB2YWwgPSBQNl9OT1BfRVZFTlQ7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCi0JKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaW50ZWxfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKLXsKLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKLQkJaW50ZWxfcG11X2Rpc2FibGVfYnRzKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaHdjLT5jb25maWdfYmFzZSA9PSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMKSkgewotCQlpbnRlbF9wbXVfZGlzYWJsZV9maXhlZChod2MsIGlkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl4ODZfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFtZF9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Ci19Ci0KIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQgW1g4Nl9QTUNfSURYX01BWF0sIHBtY19wcmV2X2xlZnQpOwogCiAvKgpAQCAtMTMyNiwyMjAgKzkxOSw2MCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotaW50ZWxfcG11X2VuYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCi17Ci0JaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7Ci0JdTY0IGN0cmxfdmFsLCBiaXRzLCBtYXNrOwotCWludCBlcnI7Ci0KLQkvKgotCSAqIEVuYWJsZSBJUlEgZ2VuZXJhdGlvbiAoMHg4KSwKLQkgKiBhbmQgZW5hYmxlIHJpbmctMyBjb3VudGluZyAoMHgyKSBhbmQgcmluZy0wIGNvdW50aW5nICgweDEpCi0JICogaWYgcmVxdWVzdGVkOgotCSAqLwotCWJpdHMgPSAweDhVTEw7Ci0JaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUikKLQkJYml0cyB8PSAweDI7Ci0JaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKQotCQliaXRzIHw9IDB4MTsKLQotCS8qCi0JICogQU5ZIGJpdCBpcyBzdXBwb3J0ZWQgaW4gdjMgYW5kIHVwCi0JICovCi0JaWYgKHg4Nl9wbXUudmVyc2lvbiA+IDIgJiYgaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfQU5ZKQotCQliaXRzIHw9IDB4NDsKLQotCWJpdHMgPDw9IChpZHggKiA0KTsKLQltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKLQotCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Ci0JY3RybF92YWwgJj0gfm1hc2s7Ci0JY3RybF92YWwgfD0gYml0czsKLQllcnIgPSBjaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOwotfQotCi1zdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCitzdGF0aWMgdm9pZCB4ODZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdTY0IHZhbDsKLQotCXZhbCA9IGh3Yy0+Y29uZmlnOwogCWlmIChjcHVjLT5lbmFibGVkKQotCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0KLQkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0JaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7Ci0JCWlmICghX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKS5lbmFibGVkKQotCQkJcmV0dXJuOwotCi0JCWludGVsX3BtdV9lbmFibGVfYnRzKGh3Yy0+Y29uZmlnKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7Ci0JCWludGVsX3BtdV9lbmFibGVfZml4ZWQoaHdjLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JeDg2X3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwotfQotCi1zdGF0aWMgdm9pZCBhbWRfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJeDg2X3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwotfQotCi1zdGF0aWMgaW50IGZpeGVkX21vZGVfaWR4KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCi17Ci0JdW5zaWduZWQgaW50IGh3X2V2ZW50OwotCi0JaHdfZXZlbnQgPSBod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVF9NQVNLOwotCi0JaWYgKHVubGlrZWx5KChod19ldmVudCA9PQotCQkgICAgICB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpKSAmJgotCQkgICAgIChod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSkpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfQlRTOwotCi0JaWYgKCF4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQpCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogZml4ZWQgY291bnRlcnMgZG8gbm90IHRha2UgYWxsIHBvc3NpYmxlIGZpbHRlcnMKLQkgKi8KLQlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRfRklMVEVSX01BU0spCi0JCXJldHVybiAtMTsKLQotCWlmICh1bmxpa2VseShod19ldmVudCA9PSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUykpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfSU5TVFJVQ1RJT05TOwotCWlmICh1bmxpa2VseShod19ldmVudCA9PSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMpKSkKLQkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0NQVV9DWUNMRVM7Ci0JaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFUykpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfQlVTX0NZQ0xFUzsKLQotCXJldHVybiAtMTsKKwkJX194ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7CiB9CiAKIC8qCi0gKiBnZW5lcmljIGNvdW50ZXIgYWxsb2NhdG9yOiBnZXQgbmV4dCBmcmVlIGNvdW50ZXIKLSAqLwotc3RhdGljIGludAotZ2VuX2dldF9ldmVudF9pZHgoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCi17Ci0JaW50IGlkeDsKLQotCWlkeCA9IGZpbmRfZmlyc3RfemVyb19iaXQoY3B1Yy0+dXNlZF9tYXNrLCB4ODZfcG11Lm51bV9ldmVudHMpOwotCXJldHVybiBpZHggPT0geDg2X3BtdS5udW1fZXZlbnRzID8gLTEgOiBpZHg7Ci19Ci0KLS8qCi0gKiBpbnRlbC1zcGVjaWZpYyBjb3VudGVyIGFsbG9jYXRvcjogY2hlY2sgZXZlbnQgY29uc3RyYWludHMKLSAqLwotc3RhdGljIGludAotaW50ZWxfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKLXsKLQljb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqZXZlbnRfY29uc3RyYWludDsKLQlpbnQgaSwgY29kZTsKLQotCWlmICghZXZlbnRfY29uc3RyYWludHMpCi0JCWdvdG8gc2tpcDsKLQotCWNvZGUgPSBod2MtPmNvbmZpZyAmIENPUkVfRVZOVFNFTF9FVkVOVF9NQVNLOwotCi0JZm9yX2VhY2hfZXZlbnRfY29uc3RyYWludChldmVudF9jb25zdHJhaW50LCBldmVudF9jb25zdHJhaW50cykgewotCQlpZiAoY29kZSA9PSBldmVudF9jb25zdHJhaW50LT5jb2RlKSB7Ci0JCQlmb3JfZWFjaF9iaXQoaSwgZXZlbnRfY29uc3RyYWludC0+aWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpIHsKLQkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgY3B1Yy0+dXNlZF9tYXNrKSkKLQkJCQkJcmV0dXJuIGk7Ci0JCQl9Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci1za2lwOgotCXJldHVybiBnZW5fZ2V0X2V2ZW50X2lkeChjcHVjLCBod2MpOwotfQotCi1zdGF0aWMgaW50Ci14ODZfc2NoZWR1bGVfZXZlbnQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCi17Ci0JaW50IGlkeDsKLQotCWlkeCA9IGZpeGVkX21vZGVfaWR4KGh3Yyk7Ci0JaWYgKGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpIHsKLQkJLyogQlRTIGlzIGFscmVhZHkgb2NjdXBpZWQuICovCi0JCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCWh3Yy0+Y29uZmlnX2Jhc2UJPSAwOwotCQlod2MtPmV2ZW50X2Jhc2UJCT0gMDsKLQkJaHdjLT5pZHgJCT0gaWR4OwotCX0gZWxzZSBpZiAoaWR4ID49IDApIHsKLQkJLyoKLQkJICogVHJ5IHRvIGdldCB0aGUgZml4ZWQgZXZlbnQsIGlmIHRoYXQgaXMgYWxyZWFkeSB0YWtlbgotCQkgKiB0aGVuIHRyeSB0byBnZXQgYSBnZW5lcmljIGV2ZW50OgotCQkgKi8KLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQotCQkJZ290byB0cnlfZ2VuZXJpYzsKLQotCQlod2MtPmNvbmZpZ19iYXNlID0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTDsKLQkJLyoKLQkJICogV2Ugc2V0IGl0IHNvIHRoYXQgZXZlbnRfYmFzZSArIGlkeCBpbiB3cm1zci9yZG1zciBtYXBzIHRvCi0JCSAqIE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCAuLi4gQ1RSMjoKLQkJICovCi0JCWh3Yy0+ZXZlbnRfYmFzZSA9Ci0JCQlNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgLSBYODZfUE1DX0lEWF9GSVhFRDsKLQkJaHdjLT5pZHggPSBpZHg7Ci0JfSBlbHNlIHsKLQkJaWR4ID0gaHdjLT5pZHg7Ci0JCS8qIFRyeSB0byBnZXQgdGhlIHByZXZpb3VzIGdlbmVyaWMgZXZlbnQgYWdhaW4gKi8KLQkJaWYgKGlkeCA9PSAtMSB8fCB0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkgewotdHJ5X2dlbmVyaWM6Ci0JCQlpZHggPSB4ODZfcG11LmdldF9ldmVudF9pZHgoY3B1YywgaHdjKTsKLQkJCWlmIChpZHggPT0gLTEpCi0JCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJCXNldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOwotCQkJaHdjLT5pZHggPSBpZHg7Ci0JCX0KLQkJaHdjLT5jb25maWdfYmFzZSA9IHg4Nl9wbXUuZXZlbnRzZWw7Ci0JCWh3Yy0+ZXZlbnRfYmFzZSAgPSB4ODZfcG11LnBlcmZjdHI7Ci0JfQotCi0JcmV0dXJuIGlkeDsKLX0KLQotLyoKLSAqIEZpbmQgYSBQTUMgc2xvdCBmb3IgdGhlIGZyZXNobHkgZW5hYmxlZCAvIHNjaGVkdWxlZCBpbiBldmVudDoKKyAqIGFjdGl2YXRlIGEgc2luZ2xlIGV2ZW50CisgKgorICogVGhlIGV2ZW50IGlzIGFkZGVkIHRvIHRoZSBncm91cCBvZiBlbmFibGVkIGV2ZW50cworICogYnV0IG9ubHkgaWYgaXQgY2FuIGJlIHNjZWhkdWxlZCB3aXRoIGV4aXN0aW5nIGV2ZW50cy4KKyAqCisgKiBDYWxsZWQgd2l0aCBQTVUgZGlzYWJsZWQuIElmIHN1Y2Nlc3NmdWwgYW5kIHJldHVybiB2YWx1ZSAxLAorICogdGhlbiBndWFyYW50ZWVkIHRvIGNhbGwgcGVyZl9lbmFibGUoKSBhbmQgaHdfcGVyZl9lbmFibGUoKQogICovCiBzdGF0aWMgaW50IHg4Nl9wbXVfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CisJaW50IGFzc2lnbltYODZfUE1DX0lEWF9NQVhdOworCWludCBuLCBuMCwgcmV0OworCisJaHdjID0gJmV2ZW50LT5odzsKKworCW4wID0gY3B1Yy0+bl9ldmVudHM7CisJbiA9IGNvbGxlY3RfZXZlbnRzKGNwdWMsIGV2ZW50LCBmYWxzZSk7CisJaWYgKG4gPCAwKQorCQlyZXR1cm4gbjsKKworCXJldCA9IHg4Nl9zY2hlZHVsZV9ldmVudHMoY3B1YywgbiwgYXNzaWduKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogY29weSBuZXcgYXNzaWdubWVudCwgbm93IHdlIGtub3cgaXQgaXMgcG9zc2libGUKKwkgKiB3aWxsIGJlIHVzZWQgYnkgaHdfcGVyZl9lbmFibGUoKQorCSAqLworCW1lbWNweShjcHVjLT5hc3NpZ24sIGFzc2lnbiwgbipzaXplb2YoaW50KSk7CisKKwljcHVjLT5uX2V2ZW50cyA9IG47CisJY3B1Yy0+bl9hZGRlZCAgPSBuIC0gbjA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4ODZfcG11X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlpbnQgaWR4OwogCi0JaWR4ID0geDg2X3NjaGVkdWxlX2V2ZW50KGNwdWMsIGh3Yyk7Ci0JaWYgKGlkeCA8IDApCi0JCXJldHVybiBpZHg7CisJaWYgKGh3Yy0+aWR4ID09IC0xKQorCQlyZXR1cm4gLUVBR0FJTjsKIAotCXBlcmZfZXZlbnRzX2xhcGljX2luaXQoKTsKLQotCXg4Nl9wbXUuZGlzYWJsZShod2MsIGlkeCk7Ci0KLQljcHVjLT5ldmVudHNbaWR4XSA9IGV2ZW50OwotCXNldF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7Ci0KLQl4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7Ci0JeDg2X3BtdS5lbmFibGUoaHdjLCBpZHgpOwotCi0JcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaHdjLT5pZHgpOworCXg4Nl9wbXUuZW5hYmxlKGh3YywgaHdjLT5pZHgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgzLDcgKzEwMTYsNyBAQAogCQlwcl9pbmZvKCJDUFUjJWQ6IG92ZXJmbG93OiAgICUwMTZsbHhcbiIsIGNwdSwgb3ZlcmZsb3cpOwogCQlwcl9pbmZvKCJDUFUjJWQ6IGZpeGVkOiAgICAgICUwMTZsbHhcbiIsIGNwdSwgZml4ZWQpOwogCX0KLQlwcl9pbmZvKCJDUFUjJWQ6IHVzZWQ6ICAgICAgICUwMTZsbHhcbiIsIGNwdSwgKih1NjQgKiljcHVjLT51c2VkX21hc2spOworCXByX2luZm8oIkNQVSMlZDogYWN0aXZlOiAgICAgICAlMDE2bGx4XG4iLCBjcHUsICoodTY0ICopY3B1Yy0+YWN0aXZlX21hc2spOwogCiAJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CiAJCXJkbXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCBwbWNfY3RybCk7CkBAIC0xNjA3LDY3ICsxMDQwLDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKQotewotCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBjcHVjLT5kczsKLQlzdHJ1Y3QgYnRzX3JlY29yZCB7Ci0JCXU2NAlmcm9tOwotCQl1NjQJdG87Ci0JCXU2NAlmbGFnczsKLQl9OwotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOwotCXN0cnVjdCBidHNfcmVjb3JkICphdCwgKnRvcDsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOwotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IHB0X3JlZ3MgcmVnczsKLQotCWlmICghZXZlbnQpCi0JCXJldHVybjsKLQotCWlmICghZHMpCi0JCXJldHVybjsKLQotCWF0ICA9IChzdHJ1Y3QgYnRzX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfYnVmZmVyX2Jhc2U7Ci0JdG9wID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19pbmRleDsKLQotCWlmICh0b3AgPD0gYXQpCi0JCXJldHVybjsKLQotCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOwotCi0KLQlkYXRhLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKLQlkYXRhLmFkZHIJPSAwOwotCWRhdGEucmF3CT0gTlVMTDsKLQlyZWdzLmlwCQk9IDA7Ci0KLQkvKgotCSAqIFByZXBhcmUgYSBnZW5lcmljIHNhbXBsZSwgaS5lLiBmaWxsIGluIHRoZSBpbnZhcmlhbnQgZmllbGRzLgotCSAqIFdlIHdpbGwgb3ZlcndyaXRlIHRoZSBmcm9tIGFuZCB0byBhZGRyZXNzIGJlZm9yZSB3ZSBvdXRwdXQKLQkgKiB0aGUgc2FtcGxlLgotCSAqLwotCXBlcmZfcHJlcGFyZV9zYW1wbGUoJmhlYWRlciwgJmRhdGEsIGV2ZW50LCAmcmVncyk7Ci0KLQlpZiAocGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgZXZlbnQsCi0JCQkgICAgICBoZWFkZXIuc2l6ZSAqICh0b3AgLSBhdCksIDEsIDEpKQotCQlyZXR1cm47Ci0KLQlmb3IgKDsgYXQgPCB0b3A7IGF0KyspIHsKLQkJZGF0YS5pcAkJPSBhdC0+ZnJvbTsKLQkJZGF0YS5hZGRyCT0gYXQtPnRvOwotCi0JCXBlcmZfb3V0cHV0X3NhbXBsZSgmaGFuZGxlLCAmaGVhZGVyLCAmZGF0YSwgZXZlbnQpOwotCX0KLQotCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKLQotCS8qIFRoZXJlJ3MgbmV3IGRhdGEgYXZhaWxhYmxlLiAqLwotCWV2ZW50LT5ody5pbnRlcnJ1cHRzKys7Ci0JZXZlbnQtPnBlbmRpbmdfa2lsbCA9IFBPTExfSU47Ci19Ci0KLXN0YXRpYyB2b2lkIHg4Nl9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCB4ODZfcG11X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CkBAIC0xNjgxLDczICsxMDU0LDM4IEBACiAJeDg2X3BtdS5kaXNhYmxlKGh3YywgaWR4KTsKIAogCS8qCi0JICogTWFrZSBzdXJlIHRoZSBjbGVhcmVkIHBvaW50ZXIgYmVjb21lcyB2aXNpYmxlIGJlZm9yZSB3ZQotCSAqIChwb3RlbnRpYWxseSkgZnJlZSB0aGUgZXZlbnQ6Ci0JICovCi0JYmFycmllcigpOwotCi0JLyoKIAkgKiBEcmFpbiB0aGUgcmVtYWluaW5nIGRlbHRhIGNvdW50IG91dCBvZiBhIGV2ZW50CiAJICogdGhhdCB3ZSBhcmUgZGlzYWJsaW5nOgogCSAqLwogCXg4Nl9wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOwogCi0JLyogRHJhaW4gdGhlIHJlbWFpbmluZyBCVFMgcmVjb3Jkcy4gKi8KLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpCi0JCWludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKGNwdWMpOwotCiAJY3B1Yy0+ZXZlbnRzW2lkeF0gPSBOVUxMOwotCWNsZWFyX2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzayk7Cit9CiAKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlpbnQgaTsKKworCXg4Nl9wbXVfc3RvcChldmVudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3B1Yy0+bl9ldmVudHM7IGkrKykgeworCQlpZiAoZXZlbnQgPT0gY3B1Yy0+ZXZlbnRfbGlzdFtpXSkgeworCisJCQlpZiAoeDg2X3BtdS5wdXRfZXZlbnRfY29uc3RyYWludHMpCisJCQkJeDg2X3BtdS5wdXRfZXZlbnRfY29uc3RyYWludHMoY3B1YywgZXZlbnQpOworCisJCQl3aGlsZSAoKytpIDwgY3B1Yy0+bl9ldmVudHMpCisJCQkJY3B1Yy0+ZXZlbnRfbGlzdFtpLTFdID0gY3B1Yy0+ZXZlbnRfbGlzdFtpXTsKKworCQkJLS1jcHVjLT5uX2V2ZW50czsKKwkJCWJyZWFrOworCQl9CisJfQogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIH0KIAotLyoKLSAqIFNhdmUgYW5kIHJlc3RhcnQgYW4gZXhwaXJlZCBldmVudC4gQ2FsbGVkIGJ5IE5NSSBjb250ZXh0cywKLSAqIHNvIGl0IGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IHByZWVtcHRpbmcgbm9ybWFsIGV2ZW50IG9wczoKLSAqLwotc3RhdGljIGludCBpbnRlbF9wbXVfc2F2ZV9hbmRfcmVzdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0JaW50IGlkeCA9IGh3Yy0+aWR4OwotCWludCByZXQ7Ci0KLQl4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKLQlyZXQgPSB4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7Ci0KLQlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQotCQlpbnRlbF9wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9yZXNldCh2b2lkKQotewotCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpLmRzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGlkeDsKLQotCWlmICgheDg2X3BtdS5udW1fZXZlbnRzKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlwcmludGsoImNsZWFyaW5nIFBNVSBzdGF0ZSBvbiBDUFUjJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKLQkJY2hlY2tpbmdfd3Jtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIDB1bGwpOwotCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5wZXJmY3RyICArIGlkeCwgMHVsbCk7Ci0JfQotCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkOyBpZHgrKykgewotCQljaGVja2luZ193cm1zcmwoTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICsgaWR4LCAwdWxsKTsKLQl9Ci0JaWYgKGRzKQotCQlkcy0+YnRzX2luZGV4ID0gZHMtPmJ0c19idWZmZXJfYmFzZTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBwNl9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbnQgeDg2X3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CkBAIC0xNzgyLDExNyArMTEyMCw3IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQotCQkJcDZfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOwotCX0KLQotCWlmIChoYW5kbGVkKQotCQlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOwotCi0JcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLS8qCi0gKiBUaGlzIGhhbmRsZXIgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBsb2NhbCBBUElDLCBzbyB0aGUgQVBJQyBJUlEgaGFuZGxpbmcKLSAqIHJ1bGVzIGFwcGx5OgotICovCi1zdGF0aWMgaW50IGludGVsX3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7Ci0JaW50IGJpdCwgbG9vcHM7Ci0JdTY0IGFjaywgc3RhdHVzOwotCi0JZGF0YS5hZGRyID0gMDsKLQlkYXRhLnJhdyA9IE5VTEw7Ci0KLQljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0KLQlwZXJmX2Rpc2FibGUoKTsKLQlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcihjcHVjKTsKLQlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOwotCWlmICghc3RhdHVzKSB7Ci0JCXBlcmZfZW5hYmxlKCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWxvb3BzID0gMDsKLWFnYWluOgotCWlmICgrK2xvb3BzID4gMTAwKSB7Ci0JCVdBUk5fT05DRSgxLCAicGVyZmV2ZW50czogaXJxIGxvb3Agc3R1Y2shXG4iKTsKLQkJcGVyZl9ldmVudF9wcmludF9kZWJ1ZygpOwotCQlpbnRlbF9wbXVfcmVzZXQoKTsKLQkJcGVyZl9lbmFibGUoKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaW5jX2lycV9zdGF0KGFwaWNfcGVyZl9pcnFzKTsKLQlhY2sgPSBzdGF0dXM7Ci0JZm9yX2VhY2hfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikmc3RhdHVzLCBYODZfUE1DX0lEWF9NQVgpIHsKLQkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2JpdF07Ci0KLQkJY2xlYXJfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikgJnN0YXR1cyk7Ci0JCWlmICghdGVzdF9iaXQoYml0LCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIWludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KGV2ZW50KSkKLQkJCWNvbnRpbnVlOwotCi0JCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwotCi0JCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCi0JCQlpbnRlbF9wbXVfZGlzYWJsZV9ldmVudCgmZXZlbnQtPmh3LCBiaXQpOwotCX0KLQotCWludGVsX3BtdV9hY2tfc3RhdHVzKGFjayk7Ci0KLQkvKgotCSAqIFJlcGVhdCBpZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gYmUgZG9uZToKLQkgKi8KLQlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gYWdhaW47Ci0KLQlwZXJmX2VuYWJsZSgpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgYW1kX3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7Ci0JaW50IGlkeCwgaGFuZGxlZCA9IDA7Ci0JdTY0IHZhbDsKLQotCWRhdGEuYWRkciA9IDA7Ci0JZGF0YS5yYXcgPSBOVUxMOwotCi0JY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCi0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7Ci0JCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQlldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOwotCQlod2MgPSAmZXZlbnQtPmh3OwotCi0JCXZhbCA9IHg4Nl9wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOwotCQlpZiAodmFsICYgKDFVTEwgPDwgKHg4Nl9wbXUuZXZlbnRfYml0cyAtIDEpKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIGV2ZW50IG92ZXJmbG93Ci0JCSAqLwotCQloYW5kbGVkCQk9IDE7Ci0JCWRhdGEucGVyaW9kCT0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwotCi0JCWlmICgheDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKLQkJCWFtZF9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7CisJCQl4ODZfcG11LmRpc2FibGUoaHdjLCBpZHgpOwogCX0KIAogCWlmIChoYW5kbGVkKQpAQCAtMTk3NSwxOTUgKzEyMDMsMTM4IEBACiAJLnByaW9yaXR5CQk9IDEKIH07CiAKLXN0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBwNl9wbXUgPSB7Ci0JLm5hbWUJCQk9ICJwNiIsCi0JLmhhbmRsZV9pcnEJCT0gcDZfcG11X2hhbmRsZV9pcnEsCi0JLmRpc2FibGVfYWxsCQk9IHA2X3BtdV9kaXNhYmxlX2FsbCwKLQkuZW5hYmxlX2FsbAkJPSBwNl9wbXVfZW5hYmxlX2FsbCwKLQkuZW5hYmxlCQkJPSBwNl9wbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCQk9IHA2X3BtdV9kaXNhYmxlX2V2ZW50LAotCS5ldmVudHNlbAkJPSBNU1JfUDZfRVZOVFNFTDAsCi0JLnBlcmZjdHIJCT0gTVNSX1A2X1BFUkZDVFIwLAotCS5ldmVudF9tYXAJCT0gcDZfcG11X2V2ZW50X21hcCwKLQkucmF3X2V2ZW50CQk9IHA2X3BtdV9yYXdfZXZlbnQsCi0JLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShwNl9wZXJmbW9uX2V2ZW50X21hcCksCi0JLmFwaWMJCQk9IDEsCi0JLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKLQkudmVyc2lvbgkJPSAwLAotCS5udW1fZXZlbnRzCQk9IDIsCi0JLyoKLQkgKiBFdmVudHMgaGF2ZSA0MCBiaXRzIGltcGxlbWVudGVkLiBIb3dldmVyIHRoZXkgYXJlIGRlc2lnbmVkIHN1Y2gKLQkgKiB0aGF0IGJpdHMgWzMyLTM5XSBhcmUgc2lnbiBleHRlbnNpb25zIG9mIGJpdCAzMS4gQXMgc3VjaCB0aGUKLQkgKiBlZmZlY3RpdmUgd2lkdGggb2YgYSBldmVudCBmb3IgUDYtbGlrZSBQTVUgaXMgMzIgYml0cyBvbmx5LgotCSAqCi0JICogU2VlIElBLTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBkZXZlbG9wZXIgbWFudWFsIFZvbCAzQgotCSAqLwotCS5ldmVudF9iaXRzCQk9IDMyLAotCS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IDMyKSAtIDEsCi0JLmdldF9ldmVudF9pZHgJCT0gaW50ZWxfZ2V0X2V2ZW50X2lkeCwKLX07CitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgdW5jb25zdHJhaW5lZDsKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBlbXB0eWNvbnN0cmFpbnQ7CiAKLXN0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBpbnRlbF9wbXUgPSB7Ci0JLm5hbWUJCQk9ICJJbnRlbCIsCi0JLmhhbmRsZV9pcnEJCT0gaW50ZWxfcG11X2hhbmRsZV9pcnEsCi0JLmRpc2FibGVfYWxsCQk9IGludGVsX3BtdV9kaXNhYmxlX2FsbCwKLQkuZW5hYmxlX2FsbAkJPSBpbnRlbF9wbXVfZW5hYmxlX2FsbCwKLQkuZW5hYmxlCQkJPSBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCQk9IGludGVsX3BtdV9kaXNhYmxlX2V2ZW50LAotCS5ldmVudHNlbAkJPSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMCwKLQkucGVyZmN0cgkJPSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwLAotCS5ldmVudF9tYXAJCT0gaW50ZWxfcG11X2V2ZW50X21hcCwKLQkucmF3X2V2ZW50CQk9IGludGVsX3BtdV9yYXdfZXZlbnQsCi0JLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShpbnRlbF9wZXJmbW9uX2V2ZW50X21hcCksCi0JLmFwaWMJCQk9IDEsCi0JLyoKLQkgKiBJbnRlbCBQTUNzIGNhbm5vdCBiZSBhY2Nlc3NlZCBzYW5lbHkgYWJvdmUgMzIgYml0IHdpZHRoLAotCSAqIHNvIHdlIGluc3RhbGwgYW4gYXJ0aWZpY2lhbCAxPDwzMSBwZXJpb2QgcmVnYXJkbGVzcyBvZgotCSAqIHRoZSBnZW5lcmljIGV2ZW50IHBlcmlvZDoKLQkgKi8KLQkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAotCS5lbmFibGVfYnRzCQk9IGludGVsX3BtdV9lbmFibGVfYnRzLAotCS5kaXNhYmxlX2J0cwkJPSBpbnRlbF9wbXVfZGlzYWJsZV9idHMsCi0JLmdldF9ldmVudF9pZHgJCT0gaW50ZWxfZ2V0X2V2ZW50X2lkeCwKLX07Ci0KLXN0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBhbWRfcG11ID0gewotCS5uYW1lCQkJPSAiQU1EIiwKLQkuaGFuZGxlX2lycQkJPSBhbWRfcG11X2hhbmRsZV9pcnEsCi0JLmRpc2FibGVfYWxsCQk9IGFtZF9wbXVfZGlzYWJsZV9hbGwsCi0JLmVuYWJsZV9hbGwJCT0gYW1kX3BtdV9lbmFibGVfYWxsLAotCS5lbmFibGUJCQk9IGFtZF9wbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCQk9IGFtZF9wbXVfZGlzYWJsZV9ldmVudCwKLQkuZXZlbnRzZWwJCT0gTVNSX0s3X0VWTlRTRUwwLAotCS5wZXJmY3RyCQk9IE1TUl9LN19QRVJGQ1RSMCwKLQkuZXZlbnRfbWFwCQk9IGFtZF9wbXVfZXZlbnRfbWFwLAotCS5yYXdfZXZlbnQJCT0gYW1kX3BtdV9yYXdfZXZlbnQsCi0JLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShhbWRfcGVyZm1vbl9ldmVudF9tYXApLAotCS5udW1fZXZlbnRzCQk9IDQsCi0JLmV2ZW50X2JpdHMJCT0gNDgsCi0JLmV2ZW50X21hc2sJCT0gKDFVTEwgPDwgNDgpIC0gMSwKLQkuYXBpYwkJCT0gMSwKLQkvKiB1c2UgaGlnaGVzdCBiaXQgdG8gZGV0ZWN0IG92ZXJmbG93ICovCi0JLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgNDcpIC0gMSwKLQkuZ2V0X2V2ZW50X2lkeAkJPSBnZW5fZ2V0X2V2ZW50X2lkeCwKLX07Ci0KLXN0YXRpYyBfX2luaXQgaW50IHA2X3BtdV9pbml0KHZvaWQpCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKgoreDg2X2dldF9ldmVudF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpIHsKLQljYXNlIDE6Ci0JY2FzZSAzOiAgLyogUGVudGl1bSBQcm8gKi8KLQljYXNlIDU6Ci0JY2FzZSA2OiAgLyogUGVudGl1bSBJSSAqLwotCWNhc2UgNzoKLQljYXNlIDg6Ci0JY2FzZSAxMTogLyogUGVudGl1bSBJSUkgKi8KLQkJZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9wNl9ldmVudF9jb25zdHJhaW50czsKLQkJYnJlYWs7Ci0JY2FzZSA5OgotCWNhc2UgMTM6Ci0JCS8qIFBlbnRpdW0gTSAqLwotCQlldmVudF9jb25zdHJhaW50cyA9IGludGVsX3A2X2V2ZW50X2NvbnN0cmFpbnRzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9jb250KCJ1bnN1cHBvcnRlZCBwNiBDUFUgbW9kZWwgJWQgIiwKLQkJCWJvb3RfY3B1X2RhdGEueDg2X21vZGVsKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmM7CisKKwlpZiAoeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cykgeworCQlmb3JfZWFjaF9ldmVudF9jb25zdHJhaW50KGMsIHg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMpIHsKKwkJCWlmICgoZXZlbnQtPmh3LmNvbmZpZyAmIGMtPmNtYXNrKSA9PSBjLT5jb2RlKQorCQkJCXJldHVybiBjOworCQl9CiAJfQogCi0JeDg2X3BtdSA9IHA2X3BtdTsKLQotCXJldHVybiAwOworCXJldHVybiAmdW5jb25zdHJhaW5lZDsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgaW50ZWxfcG11X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgeDg2X2V2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKIHsKLQl1bmlvbiBjcHVpZDEwX2VkeCBlZHg7Ci0JdW5pb24gY3B1aWQxMF9lYXggZWF4OwotCXVuc2lnbmVkIGludCB1bnVzZWQ7Ci0JdW5zaWduZWQgaW50IGVieDsKLQlpbnQgdmVyc2lvbjsKKwlpbnQgcmV0ID0gMDsKIAotCWlmICghY3B1X2hhcygmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OKSkgewotCQkvKiBjaGVjayBmb3IgUDYgcHJvY2Vzc29yIGZhbWlseSAqLwotCSAgIGlmIChib290X2NwdV9kYXRhLng4NiA9PSA2KSB7Ci0JCXJldHVybiBwNl9wbXVfaW5pdCgpOwotCSAgIH0gZWxzZSB7Ci0JCXJldHVybiAtRU5PREVWOwotCSAgIH0KLQl9CisJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU7CisJZXZlbnQtPm9uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWV2ZW50LT50c3RhbXBfcnVubmluZyArPSBldmVudC0+Y3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOwogCi0JLyoKLQkgKiBDaGVjayB3aGV0aGVyIHRoZSBBcmNoaXRlY3R1cmFsIFBlcmZNb24gc3VwcG9ydHMKLQkgKiBCcmFuY2ggTWlzc2VzIFJldGlyZWQgaHdfZXZlbnQgb3Igbm90LgotCSAqLwotCWNwdWlkKDEwLCAmZWF4LmZ1bGwsICZlYngsICZ1bnVzZWQsICZlZHguZnVsbCk7Ci0JaWYgKGVheC5zcGxpdC5tYXNrX2xlbmd0aCA8PSBBUkNIX1BFUkZNT05fQlJBTkNIX01JU1NFU19SRVRJUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWlzX3g4Nl9ldmVudChldmVudCkpCisJCXJldCA9IGV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CiAKLQl2ZXJzaW9uID0gZWF4LnNwbGl0LnZlcnNpb25faWQ7Ci0JaWYgKHZlcnNpb24gPCAyKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXJldCAmJiAhaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQljcHVjdHgtPmFjdGl2ZV9vbmNwdSsrOwogCi0JeDg2X3BtdQkJCQk9IGludGVsX3BtdTsKLQl4ODZfcG11LnZlcnNpb24JCQk9IHZlcnNpb247Ci0JeDg2X3BtdS5udW1fZXZlbnRzCQk9IGVheC5zcGxpdC5udW1fZXZlbnRzOwotCXg4Nl9wbXUuZXZlbnRfYml0cwkJPSBlYXguc3BsaXQuYml0X3dpZHRoOwotCXg4Nl9wbXUuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCBlYXguc3BsaXQuYml0X3dpZHRoKSAtIDE7CisJaWYgKCFyZXQgJiYgZXZlbnQtPmF0dHIuZXhjbHVzaXZlKQorCQljcHVjdHgtPmV4Y2x1c2l2ZSA9IDE7CiAKLQkvKgotCSAqIFF1aXJrOiB2MiBwZXJmbW9uIGRvZXMgbm90IHJlcG9ydCBmaXhlZC1wdXJwb3NlIGV2ZW50cywgc28KLQkgKiBhc3N1bWUgYXQgbGVhc3QgMyBldmVudHM6Ci0JICovCi0JeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkCT0gbWF4KChpbnQpZWR4LnNwbGl0Lm51bV9ldmVudHNfZml4ZWQsIDMpOwotCi0JLyoKLQkgKiBJbnN0YWxsIHRoZSBody1jYWNoZS1ldmVudHMgdGFibGU6Ci0JICovCi0Jc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCkgewotCWNhc2UgMTU6IC8qIG9yaWdpbmFsIDY1IG5tIGNlbGVyb24vcGVudGl1bS9jb3JlMi94ZW9uLCAiTWVyb20iLyJDb25yb2UiICovCi0JY2FzZSAyMjogLyogc2luZ2xlLWNvcmUgNjUgbm0gY2VsZXJvbi9jb3JlMnNvbG8gIk1lcm9tLUwiLyJDb25yb2UtTCIgKi8KLQljYXNlIDIzOiAvKiBjdXJyZW50IDQ1IG5tIGNlbGVyb24vY29yZTIveGVvbiAiUGVucnluIi8iV29sZmRhbGUiICovCi0JY2FzZSAyOTogLyogc2l4LWNvcmUgNDUgbm0geGVvbiAiRHVubmluZ3RvbiIgKi8KLQkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgY29yZTJfaHdfY2FjaGVfZXZlbnRfaWRzLAotCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOwotCi0JCXByX2NvbnQoIkNvcmUyIGV2ZW50cywgIik7Ci0JCWV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50czsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQljYXNlIDI2OgotCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBuZWhhbGVtX2h3X2NhY2hlX2V2ZW50X2lkcywKLQkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKLQotCQlldmVudF9jb25zdHJhaW50cyA9IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHM7Ci0JCXByX2NvbnQoIk5laGFsZW0vQ29yZWk3IGV2ZW50cywgIik7Ci0JCWJyZWFrOwotCWNhc2UgMjg6Ci0JCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGF0b21faHdfY2FjaGVfZXZlbnRfaWRzLAotCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOwotCi0JCXByX2NvbnQoIkF0b20gZXZlbnRzLCAiKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBfX2luaXQgaW50IGFtZF9wbXVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgeDg2X2V2ZW50X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKIHsKLQkvKiBQZXJmb3JtYW5jZS1tb25pdG9yaW5nIHN1cHBvcnRlZCBmcm9tIEs3IGFuZCBsYXRlcjogKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCA2KQotCQlyZXR1cm4gLUVOT0RFVjsKKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFOworCWV2ZW50LT5vbmNwdSA9IC0xOwogCi0JeDg2X3BtdSA9IGFtZF9wbXU7CisJaWYgKCFpc194ODZfZXZlbnQoZXZlbnQpKQorCQlldmVudC0+cG11LT5kaXNhYmxlKGV2ZW50KTsKIAotCS8qIEV2ZW50cyBhcmUgY29tbW9uIGZvciBhbGwgQU1EcyAqLwotCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGFtZF9od19jYWNoZV9ldmVudF9pZHMsCi0JICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKwlldmVudC0+dHN0YW1wX3J1bm5pbmcgLT0gZXZlbnQtPmN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAotCXJldHVybiAwOworCWlmICghaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQljcHVjdHgtPmFjdGl2ZV9vbmNwdS0tOworCisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1c2l2ZSB8fCAhY3B1Y3R4LT5hY3RpdmVfb25jcHUpCisJCWNwdWN0eC0+ZXhjbHVzaXZlID0gMDsKIH0KIAorLyoKKyAqIENhbGxlZCB0byBlbmFibGUgYSB3aG9sZSBncm91cCBvZiBldmVudHMuCisgKiBSZXR1cm5zIDEgaWYgdGhlIGdyb3VwIHdhcyBlbmFibGVkLCBvciAtRUFHQUlOIGlmIGl0IGNvdWxkIG5vdCBiZS4KKyAqIEFzc3VtZXMgdGhlIGNhbGxlciBoYXMgZGlzYWJsZWQgaW50ZXJydXB0cyBhbmQgaGFzCisgKiBmcm96ZW4gdGhlIFBNVSB3aXRoIGh3X3BlcmZfc2F2ZV9kaXNhYmxlLgorICoKKyAqIGNhbGxlZCB3aXRoIFBNVSBkaXNhYmxlZC4gSWYgc3VjY2Vzc2Z1bCBhbmQgcmV0dXJuIHZhbHVlIDEsCisgKiB0aGVuIGd1YXJhbnRlZWQgdG8gY2FsbCBwZXJmX2VuYWJsZSgpIGFuZCBod19wZXJmX2VuYWJsZSgpCisgKi8KK2ludCBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIsCisJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBwZXJmX2V2ZW50ICpzdWI7CisJaW50IGFzc2lnbltYODZfUE1DX0lEWF9NQVhdOworCWludCBuMCwgbjEsIHJldDsKKworCS8qIG4wID0gdG90YWwgbnVtYmVyIG9mIGV2ZW50cyAqLworCW4wID0gY29sbGVjdF9ldmVudHMoY3B1YywgbGVhZGVyLCB0cnVlKTsKKwlpZiAobjAgPCAwKQorCQlyZXR1cm4gbjA7CisKKwlyZXQgPSB4ODZfc2NoZWR1bGVfZXZlbnRzKGNwdWMsIG4wLCBhc3NpZ24pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB4ODZfZXZlbnRfc2NoZWRfaW4obGVhZGVyLCBjcHVjdHgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwluMSA9IDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKHN1Yi0+c3RhdGUgPiBQRVJGX0VWRU5UX1NUQVRFX09GRikgeworCQkJcmV0ID0geDg2X2V2ZW50X3NjaGVkX2luKHN1YiwgY3B1Y3R4KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byB1bmRvOworCQkJKytuMTsKKwkJfQorCX0KKwkvKgorCSAqIGNvcHkgbmV3IGFzc2lnbm1lbnQsIG5vdyB3ZSBrbm93IGl0IGlzIHBvc3NpYmxlCisJICogd2lsbCBiZSB1c2VkIGJ5IGh3X3BlcmZfZW5hYmxlKCkKKwkgKi8KKwltZW1jcHkoY3B1Yy0+YXNzaWduLCBhc3NpZ24sIG4wKnNpemVvZihpbnQpKTsKKworCWNwdWMtPm5fZXZlbnRzICA9IG4wOworCWNwdWMtPm5fYWRkZWQgICA9IG4xOworCWN0eC0+bnJfYWN0aXZlICs9IG4xOworCisJLyoKKwkgKiAxIG1lYW5zIHN1Y2Nlc3NmdWwgYW5kIGV2ZW50cyBhcmUgYWN0aXZlCisJICogVGhpcyBpcyBub3QgcXVpdGUgdHJ1ZSBiZWNhdXNlIHdlIGRlZmVyCisJICogYWN0dWFsIGFjdGl2YXRpb24gdW50aWwgaHdfcGVyZl9lbmFibGUoKSBidXQKKwkgKiB0aGlzIHdheSB3ZSogZW5zdXJlIGNhbGxlciB3b24ndCB0cnkgdG8gZW5hYmxlCisJICogaW5kaXZpZHVhbCBldmVudHMKKwkgKi8KKwlyZXR1cm4gMTsKK3VuZG86CisJeDg2X2V2ZW50X3NjaGVkX291dChsZWFkZXIsIGNwdWN0eCk7CisJbjAgID0gMTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoc3ViLT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkgeworCQkJeDg2X2V2ZW50X3NjaGVkX291dChzdWIsIGNwdWN0eCk7CisJCQlpZiAoKytuMCA9PSBuMSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisjaW5jbHVkZSAicGVyZl9ldmVudF9hbWQuYyIKKyNpbmNsdWRlICJwZXJmX2V2ZW50X3A2LmMiCisjaW5jbHVkZSAicGVyZl9ldmVudF9pbnRlbC5jIgorCiBzdGF0aWMgdm9pZCBfX2luaXQgcG11X2NoZWNrX2FwaWModm9pZCkKIHsKIAlpZiAoY3B1X2hhc19hcGljKQpAQCAtMjIyMCw2ICsxMzkxLDEwIEBACiAJcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOwogCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigmcGVyZl9ldmVudF9ubWlfbm90aWZpZXIpOwogCisJdW5jb25zdHJhaW5lZCA9IChzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCkKKwkJX19FVkVOVF9DT05TVFJBSU5UKDAsICgxVUxMIDw8IHg4Nl9wbXUubnVtX2V2ZW50cykgLSAxLAorCQkJCSAgIDAsIHg4Nl9wbXUubnVtX2V2ZW50cyk7CisKIAlwcl9pbmZvKCIuLi4gdmVyc2lvbjogICAgICAgICAgICAgICAgJWRcbiIsICAgICB4ODZfcG11LnZlcnNpb24pOwogCXByX2luZm8oIi4uLiBiaXQgd2lkdGg6ICAgICAgICAgICAgICAlZFxuIiwgICAgIHg4Nl9wbXUuZXZlbnRfYml0cyk7CiAJcHJfaW5mbygiLi4uIGdlbmVyaWMgcmVnaXN0ZXJzOiAgICAgICVkXG4iLCAgICAgeDg2X3BtdS5udW1fZXZlbnRzKTsKQEAgLTIyMzcsNTAgKzE0MTIsNzkgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBtdSA9IHsKIAkuZW5hYmxlCQk9IHg4Nl9wbXVfZW5hYmxlLAogCS5kaXNhYmxlCT0geDg2X3BtdV9kaXNhYmxlLAorCS5zdGFydAkJPSB4ODZfcG11X3N0YXJ0LAorCS5zdG9wCQk9IHg4Nl9wbXVfc3RvcCwKIAkucmVhZAkJPSB4ODZfcG11X3JlYWQsCiAJLnVudGhyb3R0bGUJPSB4ODZfcG11X3VudGhyb3R0bGUsCiB9OwogCi1zdGF0aWMgaW50Ci12YWxpZGF0ZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBod19wZXJmX2V2ZW50IGZha2VfZXZlbnQgPSBldmVudC0+aHc7Ci0KLQlpZiAoZXZlbnQtPnBtdSAmJiBldmVudC0+cG11ICE9ICZwbXUpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHg4Nl9zY2hlZHVsZV9ldmVudChjcHVjLCAmZmFrZV9ldmVudCkgPj0gMDsKLX0KLQorLyoKKyAqIHZhbGlkYXRlIGEgc2luZ2xlIGV2ZW50IGdyb3VwCisgKgorICogdmFsaWRhdGlvbiBpbmNsdWRlOgorICoJLSBjaGVjayBldmVudHMgYXJlIGNvbXBhdGlibGUgd2hpY2ggZWFjaCBvdGhlcgorICoJLSBldmVudHMgZG8gbm90IGNvbXBldGUgZm9yIHRoZSBzYW1lIGNvdW50ZXIKKyAqCS0gbnVtYmVyIG9mIGV2ZW50cyA8PSBudW1iZXIgb2YgY291bnRlcnMKKyAqCisgKiB2YWxpZGF0aW9uIGVuc3VyZXMgdGhlIGdyb3VwIGNhbiBiZSBsb2FkZWQgb250byB0aGUKKyAqIFBNVSBpZiBpdCB3YXMgdGhlIG9ubHkgZ3JvdXAgYXZhaWxhYmxlLgorICovCiBzdGF0aWMgaW50IHZhbGlkYXRlX2dyb3VwKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZywgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgZmFrZV9wbXU7CisJc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmZha2VfY3B1YzsKKwlpbnQgcmV0LCBuOwogCi0JbWVtc2V0KCZmYWtlX3BtdSwgMCwgc2l6ZW9mKGZha2VfcG11KSk7CisJcmV0ID0gLUVOT01FTTsKKwlmYWtlX2NwdWMgPSBrbWFsbG9jKHNpemVvZigqZmFrZV9jcHVjKSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCWlmICghZmFrZV9jcHVjKQorCQlnb3RvIG91dDsKIAotCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBsZWFkZXIpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkvKgorCSAqIHRoZSBldmVudCBpcyBub3QgeWV0IGNvbm5lY3RlZCB3aXRoIGl0cworCSAqIHNpYmxpbmdzIHRoZXJlZm9yZSB3ZSBtdXN0IGZpcnN0IGNvbGxlY3QKKwkgKiBleGlzdGluZyBzaWJsaW5ncywgdGhlbiBhZGQgdGhlIG5ldyBldmVudAorCSAqIGJlZm9yZSB3ZSBjYW4gc2ltdWxhdGUgdGhlIHNjaGVkdWxpbmcKKwkgKi8KKwlyZXQgPSAtRU5PU1BDOworCW4gPSBjb2xsZWN0X2V2ZW50cyhmYWtlX2NwdWMsIGxlYWRlciwgdHJ1ZSk7CisJaWYgKG4gPCAwKQorCQlnb3RvIG91dF9mcmVlOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0JCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBzaWJsaW5nKSkKLQkJCXJldHVybiAtRU5PU1BDOwotCX0KKwlmYWtlX2NwdWMtPm5fZXZlbnRzID0gbjsKKwluID0gY29sbGVjdF9ldmVudHMoZmFrZV9jcHVjLCBldmVudCwgZmFsc2UpOworCWlmIChuIDwgMCkKKwkJZ290byBvdXRfZnJlZTsKIAotCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBldmVudCkpCi0JCXJldHVybiAtRU5PU1BDOworCWZha2VfY3B1Yy0+bl9ldmVudHMgPSBuOwogCi0JcmV0dXJuIDA7CisJcmV0ID0geDg2X3NjaGVkdWxlX2V2ZW50cyhmYWtlX2NwdWMsIG4sIE5VTEwpOworCitvdXRfZnJlZToKKwlrZnJlZShmYWtlX2NwdWMpOworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIGNvbnN0IHN0cnVjdCBwbXUgKmh3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CisJY29uc3Qgc3RydWN0IHBtdSAqdG1wOwogCWludCBlcnI7CiAKIAllcnIgPSBfX2h3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CiAJaWYgKCFlcnIpIHsKKwkJLyoKKwkJICogd2UgdGVtcG9yYXJpbHkgY29ubmVjdCBldmVudCB0byBpdHMgcG11CisJCSAqIHN1Y2ggdGhhdCB2YWxpZGF0ZV9ncm91cCgpIGNhbiBjbGFzc2lmeQorCQkgKiBpdCBhcyBhbiB4ODYgZXZlbnQgdXNpbmcgaXNfeDg2X2V2ZW50KCkKKwkJICovCisJCXRtcCA9IGV2ZW50LT5wbXU7CisJCWV2ZW50LT5wbXUgPSAmcG11OworCiAJCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KQogCQkJZXJyID0gdmFsaWRhdGVfZ3JvdXAoZXZlbnQpOworCisJCWV2ZW50LT5wbXUgPSB0bXA7CiAJfQogCWlmIChlcnIpIHsKIAkJaWYgKGV2ZW50LT5kZXN0cm95KQpAQCAtMjMwNCw3ICsxNTA4LDYgQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSwgcG1jX2lycV9lbnRyeSk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwbWNfbm1pX2VudHJ5KTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGluX2lnbm9yZWRfZnJhbWUpOwogCiAKIHN0YXRpYyB2b2lkCkBAIC0yMzIwLDEwICsxNTIzLDYgQEAKIAogc3RhdGljIGludCBiYWNrdHJhY2Vfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKIHsKLQlwZXJfY3B1KGluX2lnbm9yZWRfZnJhbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPQotCQkJeDg2X2lzX3N0YWNrX2lkKE5NSV9TVEFDSywgbmFtZSkgfHwKLQkJCXg4Nl9pc19zdGFja19pZChERUJVR19TVEFDSywgbmFtZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMzMSw5ICsxNTMwLDYgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5ID0gZGF0YTsKIAotCWlmIChwZXJfY3B1KGluX2lnbm9yZWRfZnJhbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSkpCi0JCXJldHVybjsKLQogCWlmIChyZWxpYWJsZSkKIAkJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBhZGRyKTsKIH0KQEAgLTI0NDAsOSArMTYzNiw2IEBACiAKIAlpc191c2VyID0gdXNlcl9tb2RlKHJlZ3MpOwogCi0JaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQtPnBpZCA9PSAwKQotCQlyZXR1cm47Ci0KIAlpZiAoaXNfdXNlciAmJiBjdXJyZW50LT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpCiAJCXJldHVybjsKIApAQCAtMjQ3Miw0ICsxNjY1LDI1IEBACiB2b2lkIGh3X3BlcmZfZXZlbnRfc2V0dXBfb25saW5lKGludCBjcHUpCiB7CiAJaW5pdF9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKKworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJYW1kX3BtdV9jcHVfb25saW5lKGNwdSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9Cit9CisKK3ZvaWQgaHdfcGVyZl9ldmVudF9zZXR1cF9vZmZsaW5lKGludCBjcHUpCit7CisJaW5pdF9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKKworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJYW1kX3BtdV9jcHVfb2ZmbGluZShjcHUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmM2RiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKQEAgLTAsMCArMSw0MTYgQEAKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKKworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYW1kX25iX2xvY2spOworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGFtZF9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDEsIC8qIERhdGEgQ2FjaGUgTWlzc2VzICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTQyLCAvKiBEYXRhIENhY2hlIFJlZmlsbHMgOnN5c3RlbSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMjY3LCAvKiBEYXRhIFByZWZldGNoZXIgOmF0dGVtcHRzICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE2NywgLyogRGF0YSBQcmVmZXRjaGVyIDpjYW5jZWxsZWQgKi8KKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBJbnN0cnVjdGlvbiBjYWNoZSBmZXRjaGVzICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4MSwgLyogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNEIsIC8qIFByZWZldGNoIEluc3RydWN0aW9ucyA6TG9hZCAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMTCAgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDM3RCwgLyogUmVxdWVzdHMgdG8gTDIgQ2FjaGUgOklDK0RDICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMzdFLCAvKiBMMiBDYWNoZSBNaXNzZXMgOiBJQytEQyAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxN0YsIC8qIEwyIEZpbGwvV3JpdGViYWNrICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoRFRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwNDAsIC8qIERhdGEgQ2FjaGUgQWNjZXNzZXMgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDQ2LCAvKiBMMSBEVExCIGFuZCBMMiBETFRCIE1pc3MgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogSW5zdHJ1Y3Rpb24gZmVjdGhlcyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODUsIC8qIEluc3RyLiBmZXRjaCBJVExCIG1pc3NlcyAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMiwgLyogUmV0aXJlZCBCcmFuY2ggSW5zdHIuICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzMsIC8qIFJldGlyZWQgTWlzcHJlZGljdGVkIEJJICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorfTsKKworLyoKKyAqIEFNRCBQZXJmb3JtYW5jZSBNb25pdG9yIEs3IGFuZCBsYXRlci4KKyAqLworc3RhdGljIGNvbnN0IHU2NCBhbWRfcGVyZm1vbl9ldmVudF9tYXBbXSA9Cit7CisgIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3NiwKKyAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwMDgwLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDA4MSwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKK307CisKK3N0YXRpYyB1NjQgYW1kX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQoreworCXJldHVybiBhbWRfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOworfQorCitzdGF0aWMgdTY0IGFtZF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKK3sKKyNkZWZpbmUgSzdfRVZOVFNFTF9FVkVOVF9NQVNLCTB4RjAwMDAwMEZGVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfVU5JVF9NQVNLCTB4MDAwMDBGRjAwVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfRURHRV9NQVNLCTB4MDAwMDQwMDAwVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfSU5WX01BU0sJMHgwMDA4MDAwMDBVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9SRUdfTUFTSwkweDBGRjAwMDAwMFVMTAorCisjZGVmaW5lIEs3X0VWTlRTRUxfTUFTSwkJCVwKKwkoSzdfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAorCSBLN19FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCisJIEs3X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKKwkgSzdfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAorCSBLN19FVk5UU0VMX1JFR19NQVNLKQorCisJcmV0dXJuIGh3X2V2ZW50ICYgSzdfRVZOVFNFTF9NQVNLOworfQorCisvKgorICogQU1ENjQgZXZlbnRzIGFyZSBkZXRlY3RlZCBiYXNlZCBvbiB0aGVpciBldmVudCBjb2Rlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYW1kX2lzX25iX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCit7CisJcmV0dXJuIChod2MtPmNvbmZpZyAmIDB4ZTApID09IDB4ZTA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wdXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQkJICAgICAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXN0cnVjdCBhbWRfbmIgKm5iID0gY3B1Yy0+YW1kX25iOworCWludCBpOworCisJLyoKKwkgKiBvbmx5IGNhcmUgYWJvdXQgTkIgZXZlbnRzCisJICovCisJaWYgKCEobmIgJiYgYW1kX2lzX25iX2V2ZW50KGh3YykpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIG5lZWQgdG8gc2NhbiB3aG9sZSBsaXN0IGJlY2F1c2UgZXZlbnQgbWF5IG5vdCBoYXZlCisJICogYmVlbiBhc3NpZ25lZCBkdXJpbmcgc2NoZWR1bGluZworCSAqCisJICogbm8gcmFjZSBjb25kaXRpb24gcG9zc2libGUgYmVjYXVzZSBldmVudCBjYW4gb25seQorCSAqIGJlIHJlbW92ZWQgb24gb25lIENQVSBhdCBhIHRpbWUgQU5EIFBNVSBpcyBkaXNhYmxlZAorCSAqIHdoZW4gd2UgY29tZSBoZXJlCisJICovCisJZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaSsrKSB7CisJCWlmIChuYi0+b3duZXJzW2ldID09IGV2ZW50KSB7CisJCQljbXB4Y2hnKG5iLT5vd25lcnMraSwgZXZlbnQsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKyAvKgorICAqIEFNRDY0IE5vcnRoQnJpZGdlIGV2ZW50cyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGJlY2F1c2UKKyAgKiBjb3VudGVyIGFjY2VzcyBuZWVkcyB0byBiZSBzeW5jaHJvbml6ZWQgYWNyb3NzIGFsbCBjb3JlcworICAqIG9mIGEgcGFja2FnZS4gUmVmZXIgdG8gQktERyBzZWN0aW9uIDMuMTIKKyAgKgorICAqIE5CIGV2ZW50cyBhcmUgZXZlbnRzIG1lYXN1cmluZyBMMyBjYWNoZSwgSHlwZXJ0cmFuc3BvcnQKKyAgKiB0cmFmZmljLiBUaGV5IGFyZSBpZGVudGlmaWVkIGJ5IGFuIGV2ZW50IGNvZGUgPj0gMHhlMDAuCisgICogVGhleSBtZWFzdXJlIGV2ZW50cyBvbiB0aGUgTm9ydGhCcmlkZSB3aGljaCBpcyBzaGFyZWQKKyAgKiBieSBhbGwgY29yZXMgb24gYSBwYWNrYWdlLiBOQiBldmVudHMgYXJlIGNvdW50ZWQgb24gYQorICAqIHNoYXJlZCBzZXQgb2YgY291bnRlcnMuIFdoZW4gYSBOQiBldmVudCBpcyBwcm9ncmFtbWVkCisgICogaW4gYSBjb3VudGVyLCB0aGUgZGF0YSBhY3R1YWxseSBjb21lcyBmcm9tIGEgc2hhcmVkCisgICogY291bnRlci4gVGh1cywgYWNjZXNzIHRvIHRob3NlIGNvdW50ZXJzIG5lZWRzIHRvIGJlCisgICogc3luY2hyb25pemVkLgorICAqCisgICogV2UgaW1wbGVtZW50IHRoZSBzeW5jaHJvbml6YXRpb24gc3VjaCB0aGF0IG5vIHR3byBjb3JlcworICAqIGNhbiBiZSBtZWFzdXJpbmcgTkIgZXZlbnRzIHVzaW5nIHRoZSBzYW1lIGNvdW50ZXJzLiBUaHVzLAorICAqIHdlIG1haW50YWluIGEgcGVyLU5CIGFsbG9jYXRpb24gdGFibGUuIFRoZSBhdmFpbGFibGUgc2xvdAorICAqIGlzIHByb3BhZ2F0ZWQgdXNpbmcgdGhlIGV2ZW50X2NvbnN0cmFpbnQgc3RydWN0dXJlLgorICAqCisgICogV2UgcHJvdmlkZSBvbmx5IG9uZSBjaG9pY2UgZm9yIGVhY2ggTkIgZXZlbnQgYmFzZWQgb24KKyAgKiB0aGUgZmFjdCB0aGF0IG9ubHkgTkIgZXZlbnRzIGhhdmUgcmVzdHJpY3Rpb25zLiBDb25zZXF1ZW50bHksCisgICogaWYgYSBjb3VudGVyIGlzIGF2YWlsYWJsZSwgdGhlcmUgaXMgYSBndWFyYW50ZWUgdGhlIE5CIGV2ZW50CisgICogd2lsbCBiZSBhc3NpZ25lZCB0byBpdC4gSWYgbm8gc2xvdCBpcyBhdmFpbGFibGUsIGFuIGVtcHR5CisgICogY29uc3RyYWludCBpcyByZXR1cm5lZCBhbmQgc2NoZWR1bGluZyB3aWxsIGV2ZW50dWFsbHkgZmFpbAorICAqIGZvciB0aGlzIGV2ZW50LgorICAqCisgICogTm90ZSB0aGF0IGFsbCBjb3JlcyBhdHRhY2hlZCB0aGUgc2FtZSBOQiBjb21wZXRlIGZvciB0aGUgc2FtZQorICAqIGNvdW50ZXJzIHRvIGhvc3QgTkIgZXZlbnRzLCB0aGlzIGlzIHdoeSB3ZSB1c2UgYXRvbWljIG9wcy4gU29tZQorICAqIG11bHRpLWNoaXAgQ1BVcyBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIE5CLgorICAqCisgICogR2l2ZW4gdGhhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCAoY21weGNoZyksIHRoZXkgbXVzdCBiZQorICAqIGV2ZW50dWFsbHkgZnJlZWQgZm9yIG90aGVycyB0byB1c2UuIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5CisgICogY2FsbGluZyBhbWRfcHV0X2V2ZW50X2NvbnN0cmFpbnRzKCkuCisgICoKKyAgKiBOb24gTkIgZXZlbnRzIGFyZSBub3QgaW1wYWN0ZWQgYnkgdGhpcyByZXN0cmljdGlvbi4KKyAgKi8KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCithbWRfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJc3RydWN0IGFtZF9uYiAqbmIgPSBjcHVjLT5hbWRfbmI7CisJc3RydWN0IHBlcmZfZXZlbnQgKm9sZCA9IE5VTEw7CisJaW50IG1heCA9IHg4Nl9wbXUubnVtX2V2ZW50czsKKwlpbnQgaSwgaiwgayA9IC0xOworCisJLyoKKwkgKiBpZiBub3QgTkIgZXZlbnQgb3Igbm8gTkIsIHRoZW4gbm8gY29uc3RyYWludHMKKwkgKi8KKwlpZiAoIShuYiAmJiBhbWRfaXNfbmJfZXZlbnQoaHdjKSkpCisJCXJldHVybiAmdW5jb25zdHJhaW5lZDsKKworCS8qCisJICogZGV0ZWN0IGlmIGFscmVhZHkgcHJlc2VudCwgaWYgc28gcmV1c2UKKwkgKgorCSAqIGNhbm5vdCBtZXJnZSB3aXRoIGFjdHVhbCBhbGxvY2F0aW9uCisJICogYmVjYXVzZSBvZiBwb3NzaWJsZSBob2xlcworCSAqCisJICogZXZlbnQgY2FuIGFscmVhZHkgYmUgcHJlc2VudCB5ZXQgbm90IGFzc2lnbmVkIChpbiBod2MtPmlkeCkKKwkgKiBiZWNhdXNlIG9mIHN1Y2Nlc3NpdmUgY2FsbHMgdG8geDg2X3NjaGVkdWxlX2V2ZW50cygpIGZyb20KKwkgKiBod19wZXJmX2dyb3VwX3NjaGVkX2luKCkgd2l0aG91dCBod19wZXJmX2VuYWJsZSgpCisJICovCisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCS8qCisJCSAqIGtlZXAgdHJhY2sgb2YgZmlyc3QgZnJlZSBzbG90CisJCSAqLworCQlpZiAoayA9PSAtMSAmJiAhbmItPm93bmVyc1tpXSkKKwkJCWsgPSBpOworCisJCS8qIGFscmVhZHkgcHJlc2VudCwgcmV1c2UgKi8KKwkJaWYgKG5iLT5vd25lcnNbaV0gPT0gZXZlbnQpCisJCQlnb3RvIGRvbmU7CisJfQorCS8qCisJICogbm90IHByZXNlbnQsIHNvIGdyYWIgYSBuZXcgc2xvdAorCSAqIHN0YXJ0aW5nIGVpdGhlciBhdDoKKwkgKi8KKwlpZiAoaHdjLT5pZHggIT0gLTEpIHsKKwkJLyogcHJldmlvdXMgYXNzaWdubWVudCAqLworCQlpID0gaHdjLT5pZHg7CisJfSBlbHNlIGlmIChrICE9IC0xKSB7CisJCS8qIHN0YXJ0IGZyb20gZnJlZSBzbG90IGZvdW5kICovCisJCWkgPSBrOworCX0gZWxzZSB7CisJCS8qCisJCSAqIGV2ZW50IG5vdCBmb3VuZCwgbm8gc2xvdCBmb3VuZCBpbgorCQkgKiBmaXJzdCBwYXNzLCB0cnkgYWdhaW4gZnJvbSB0aGUKKwkJICogYmVnaW5uaW5nCisJCSAqLworCQlpID0gMDsKKwl9CisJaiA9IGk7CisJZG8geworCQlvbGQgPSBjbXB4Y2hnKG5iLT5vd25lcnMraSwgTlVMTCwgZXZlbnQpOworCQlpZiAoIW9sZCkKKwkJCWJyZWFrOworCQlpZiAoKytpID09IG1heCkKKwkJCWkgPSAwOworCX0gd2hpbGUgKGkgIT0gaik7Citkb25lOgorCWlmICghb2xkKQorCQlyZXR1cm4gJm5iLT5ldmVudF9jb25zdHJhaW50c1tpXTsKKworCXJldHVybiAmZW1wdHljb25zdHJhaW50OworfQorCitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgYW1kX3BtdSA9IHsKKwkubmFtZQkJCT0gIkFNRCIsCisJLmhhbmRsZV9pcnEJCT0geDg2X3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSB4ODZfcG11X2Rpc2FibGVfYWxsLAorCS5lbmFibGVfYWxsCQk9IHg4Nl9wbXVfZW5hYmxlX2FsbCwKKwkuZW5hYmxlCQkJPSB4ODZfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSB4ODZfcG11X2Rpc2FibGVfZXZlbnQsCisJLmV2ZW50c2VsCQk9IE1TUl9LN19FVk5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfSzdfUEVSRkNUUjAsCisJLmV2ZW50X21hcAkJPSBhbWRfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IGFtZF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoYW1kX3BlcmZtb25fZXZlbnRfbWFwKSwKKwkubnVtX2V2ZW50cwkJPSA0LAorCS5ldmVudF9iaXRzCQk9IDQ4LAorCS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IDQ4KSAtIDEsCisJLmFwaWMJCQk9IDEsCisJLyogdXNlIGhpZ2hlc3QgYml0IHRvIGRldGVjdCBvdmVyZmxvdyAqLworCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDQ3KSAtIDEsCisJLmdldF9ldmVudF9jb25zdHJhaW50cwk9IGFtZF9nZXRfZXZlbnRfY29uc3RyYWludHMsCisJLnB1dF9ldmVudF9jb25zdHJhaW50cwk9IGFtZF9wdXRfZXZlbnRfY29uc3RyYWludHMKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1kX25iICphbWRfYWxsb2NfbmIoaW50IGNwdSwgaW50IG5iX2lkKQoreworCXN0cnVjdCBhbWRfbmIgKm5iOworCWludCBpOworCisJbmIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYW1kX25iKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuYikKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobmIsIDAsIHNpemVvZigqbmIpKTsKKwluYi0+bmJfaWQgPSBuYl9pZDsKKworCS8qCisJICogaW5pdGlhbGl6ZSBhbGwgcG9zc2libGUgTkIgY29uc3RyYWludHMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpKyspIHsKKwkJc2V0X2JpdChpLCBuYi0+ZXZlbnRfY29uc3RyYWludHNbaV0uaWR4bXNrKTsKKwkJbmItPmV2ZW50X2NvbnN0cmFpbnRzW2ldLndlaWdodCA9IDE7CisJfQorCXJldHVybiBuYjsKK30KKworc3RhdGljIHZvaWQgYW1kX3BtdV9jcHVfb25saW5lKGludCBjcHUpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdTEsICpjcHUyOworCXN0cnVjdCBhbWRfbmIgKm5iID0gTlVMTDsKKwlpbnQgaSwgbmJfaWQ7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbWF4X2NvcmVzIDwgMikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHRvbyBlYXJseSBpbiB0aGUKKwkgKiBib290IHByb2Nlc3MsIGluIHdoaWNoIGNhc2UgbmJfaWQgaXMgYm9ndXMKKwkgKi8KKwluYl9pZCA9IGFtZF9nZXRfbmJfaWQoY3B1KTsKKwlpZiAobmJfaWQgPT0gQkFEX0FQSUNJRCkKKwkJcmV0dXJuOworCisJY3B1MSA9ICZwZXJfY3B1KGNwdV9od19ldmVudHMsIGNwdSk7CisJY3B1MS0+YW1kX25iID0gTlVMTDsKKworCXJhd19zcGluX2xvY2soJmFtZF9uYl9sb2NrKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQljcHUyID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgaSk7CisJCW5iID0gY3B1Mi0+YW1kX25iOworCQlpZiAoIW5iKQorCQkJY29udGludWU7CisJCWlmIChuYi0+bmJfaWQgPT0gbmJfaWQpCisJCQlnb3RvIGZvdW5kOworCX0KKworCW5iID0gYW1kX2FsbG9jX25iKGNwdSwgbmJfaWQpOworCWlmICghbmIpIHsKKwkJcHJfZXJyKCJwZXJmX2V2ZW50czogZmFpbGVkIE5CIGFsbG9jYXRpb24gZm9yIENQVSVkXG4iLCBjcHUpOworCQlyYXdfc3Bpbl91bmxvY2soJmFtZF9uYl9sb2NrKTsKKwkJcmV0dXJuOworCX0KK2ZvdW5kOgorCW5iLT5yZWZjbnQrKzsKKwljcHUxLT5hbWRfbmIgPSBuYjsKKworCXJhd19zcGluX3VubG9jaygmYW1kX25iX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhbWRfcG11X2NwdV9vZmZsaW5lKGludCBjcHUpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3OworCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X21heF9jb3JlcyA8IDIpCisJCXJldHVybjsKKworCWNwdWh3ID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KTsKKworCXJhd19zcGluX2xvY2soJmFtZF9uYl9sb2NrKTsKKworCWlmICgtLWNwdWh3LT5hbWRfbmItPnJlZmNudCA9PSAwKQorCQlrZnJlZShjcHVody0+YW1kX25iKTsKKworCWNwdWh3LT5hbWRfbmIgPSBOVUxMOworCisJcmF3X3NwaW5fdW5sb2NrKCZhbWRfbmJfbG9jayk7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGFtZF9wbXVfaW5pdCh2b2lkKQoreworCS8qIFBlcmZvcm1hbmNlLW1vbml0b3Jpbmcgc3VwcG9ydGVkIGZyb20gSzcgYW5kIGxhdGVyOiAqLworCWlmIChib290X2NwdV9kYXRhLng4NiA8IDYpCisJCXJldHVybiAtRU5PREVWOworCisJeDg2X3BtdSA9IGFtZF9wbXU7CisKKwkvKiBFdmVudHMgYXJlIGNvbW1vbiBmb3IgYWxsIEFNRHMgKi8KKwltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBhbWRfaHdfY2FjaGVfZXZlbnRfaWRzLAorCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisKKwkvKgorCSAqIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSB0aGUgYm9vdCBjcHUsIG90aGVyIGNwdXMgd2lsbCBnZXQKKwkgKiB0aGUgY3B1IGhvdHBsdWcgY2FsbGJhY2tzIGZyb20gc21wX2luaXQoKQorCSAqLworCWFtZF9wbXVfY3B1X29ubGluZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJldHVybiAwOworfQorCisjZWxzZSAvKiBDT05GSUdfQ1BVX1NVUF9BTUQgKi8KKworc3RhdGljIGludCBhbWRfcG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYW1kX3BtdV9jcHVfb25saW5lKGludCBjcHUpCit7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wbXVfY3B1X29mZmxpbmUoaW50IGNwdSkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjU5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwpAQCAtMCwwICsxLDk3MSBAQAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0lOVEVMCisKKy8qCisgKiBJbnRlbCBQZXJmTW9uIHYzLiBVc2VkIG9uIENvcmUyIGFuZCBsYXRlci4KKyAqLworc3RhdGljIGNvbnN0IHU2NCBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3sKKyAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDNjLAorICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDRmMmUsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHg0MTJlLAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAorICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAxM2MsCit9OworCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MiksIC8qIEZQX0FTU0lTVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwgLyogTVVMICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLCAvKiBESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksIC8qIENZQ0xFU19ESVZfQlVTWSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxOSwgMHgyKSwgLyogREVMQVlFRF9CWVBBU1MgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzEsIDB4MSksIC8qIEZQX0NPTVBfSU5TVFJfUkVUICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlMl9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweDN8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4M3woMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLCAvKiBGUF9DT01QX09QU19FWEUgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MiksIC8qIEZQX0FTU0lTVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwgLyogTVVMICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLCAvKiBESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksIC8qIENZQ0xFU19ESVZfQlVTWSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxOCwgMHgxKSwgLyogSURMRV9EVVJJTkdfRElWICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDE5LCAweDIpLCAvKiBERUxBWUVEX0JZUEFTUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhhMSwgMHgxKSwgLyogUlNfVU9QU19ESVNQQVRDSF9DWUNMRVMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksIC8qIE1FTV9MT0FEX1JFVElSRUQgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHNbXSA9Cit7CisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAoMHhmfCgxVUxMPDwzMikpKSwgLyogSU5TVFJVQ1RJT05TX1JFVElSRUQgKi8KKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4M2MsICgweGZ8KDFVTEw8PDMzKSkpLCAvKiBVTkhBTFRFRF9DT1JFX0NZQ0xFUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0MCwgMHgzKSwgLyogTDFEX0NBQ0hFX0xEICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQxLCAweDMpLCAvKiBMMURfQ0FDSEVfU1QgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NDIsIDB4MyksIC8qIEwxRF9DQUNIRV9MT0NLICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQzLCAweDMpLCAvKiBMMURfQUxMX1JFRiAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0OCwgMHgzKSwgLyogTDFEX1BFTkRfTUlTUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0ZSwgMHgzKSwgLyogTDFEX1BSRUZFVENIICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDUxLCAweDMpLCAvKiBMMUQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NjMsIDB4MyksIC8qIENBQ0hFX0xPQ0tfQ1lDTEVTICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF93ZXN0bWVyZV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweGZ8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4ZnwoMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDUxLCAweDMpLCAvKiBMMUQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NjAsIDB4MSksIC8qIE9GRkNPUkVfUkVRVUVTVFNfT1VUU1RBTkRJTkcgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NjMsIDB4MyksIC8qIENBQ0hFX0xPQ0tfQ1lDTEVTICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9nZW5fZXZlbnRfY29uc3RyYWludHNbXSA9Cit7CisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAoMHgzfCgxVUxMPDwzMikpKSwgLyogSU5TVFJVQ1RJT05TX1JFVElSRUQgKi8KKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4M2MsICgweDN8KDFVTEw8PDMzKSkpLCAvKiBVTkhBTFRFRF9DT1JFX0NZQ0xFUyAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCitzdGF0aWMgdTY0IGludGVsX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQoreworCXJldHVybiBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgd2VzdG1lcmVfaHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxMGIsIC8qIE1FTV9JTlNUX1JFVElSRUQuTE9BRFMgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNTEsIC8qIEwxRC5SRVBMICAgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAyMGIsIC8qIE1FTV9JTlNUX1JFVFVSRUQuU1RPUkVTICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNTEsIC8qIEwxRC5NX1JFUEwgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNGUsIC8qIEwxRF9QUkVGRVRDSC5NSVNTICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzI0LCAvKiBMMl9SUVNUUy5MT0FEUyAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjI0LCAvKiBMMl9SUVNUUy5MRF9NSVNTICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwYzI0LCAvKiBMMl9SUVNUUy5SRk9TICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODI0LCAvKiBMMl9SUVNUUy5SRk9fTUlTUyAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJlLCAvKiBMTEMgUmVmZXJlbmNlICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJlLCAvKiBMTEMgTWlzc2VzICAgICAgICAgICAgICAgICAgICovCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDEwYiwgLyogTUVNX0lOU1RfUkVUSVJFRC5MT0FEUyAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwOCwgLyogRFRMQl9MT0FEX01JU1NFUy5BTlkgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDIwYiwgLyogTUVNX0lOU1RfUkVUVVJFRC5TVE9SRVMgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwYywgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE4NSwgLyogSVRMQl9NSVNTRVMuQU5ZICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzZTgsIC8qIEJQVV9DTEVBUlMuQU5ZICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNGUsIC8qIEwxRF9QUkVGRVRDSC5NSVNTICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzI0LCAvKiBMMl9SUVNUUy5MT0FEUyAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjI0LCAvKiBMMl9SUVNUUy5MRF9NSVNTICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwYzI0LCAvKiBMMl9SUVNUUy5SRk9TICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODI0LCAvKiBMMl9SUVNUUy5SRk9fTUlTUyAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJlLCAvKiBMTEMgUmVmZXJlbmNlICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJlLCAvKiBMTEMgTWlzc2VzICAgICAgICAgICAgICAgICAgICovCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAoYWxpYXMpICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwOCwgLyogRFRMQl9MT0FEX01JU1NFUy5BTlkgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAoYWxpYXMpICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwYywgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MjBjOCwgLyogSVRMQl9NSVNTX1JFVElSRUQgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzZTgsIC8qIEJQVV9DTEVBUlMuQU5ZICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcworCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQoreworIFsgQyhMMUQpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBMMURfQ0FDSEVfU1QuSV9TVEFURSAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MTA0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDIwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MTI4MiwgLyogSVRMQk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCisgWyBDKEJQVSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIxNDAsIC8qIEwxRF9DQUNIRS5MRCAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRS5TVCAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MCwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMTCAgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyOSwgLyogTDJfTEQuTUVTSSAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMjksIC8qIEwyX0xELklTVEFURSAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJBLCAvKiBMMl9TVC5NRVNJICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyQSwgLyogTDJfU1QuSVNUQVRFICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgIChhbGlhcykgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA1MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfTEQgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMjQwLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgKGFsaWFzKSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDYwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19TVCAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODIsIC8qIElUTEIuTUlTU0VTICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFOWSAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzUsIC8qIEJQX0lOU1RfUkVUSVJFRC5NSVNQUkVEICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorfTsKKworc3RhdGljIHU2NCBpbnRlbF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKK3sKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCisjZGVmaW5lIENPUkVfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfUkVHX01BU0sJCTB4RkYwMDAwMDBVTEwKKworI2RlZmluZSBDT1JFX0VWTlRTRUxfTUFTSwkJXAorCShJTlRFTF9BUkNIX0VWVFNFTF9NQVNLIHwJXAorCSBJTlRFTF9BUkNIX1VOSVRfTUFTSyAgIHwJXAorCSBJTlRFTF9BUkNIX0VER0VfTUFTSyAgIHwJXAorCSBJTlRFTF9BUkNIX0lOVl9NQVNLICAgIHwJXAorCSBJTlRFTF9BUkNIX0NOVF9NQVNLKQorCisJcmV0dXJuIGh3X2V2ZW50ICYgQ09SRV9FVk5UU0VMX01BU0s7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfYnRzKHU2NCBjb25maWcpCit7CisJdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKKworCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7CisKKwlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfVFI7CisJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUUzsKKwlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRJTlQ7CisKKwlpZiAoIShjb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpKQorCQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTX09GRl9PUzsKKworCWlmICghKGNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VU1IpKQorCQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTX09GRl9VU1I7CisKKwl1cGRhdGVfZGVidWdjdGxtc3IoZGVidWdjdGxtc3IpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9idHModm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7CisKKwlpZiAoIWNwdWMtPmRzKQorCQlyZXR1cm47CisKKwlkZWJ1Z2N0bG1zciA9IGdldF9kZWJ1Z2N0bG1zcigpOworCisJZGVidWdjdGxtc3IgJj0KKwkJfihYODZfREVCVUdDVExfVFIgfCBYODZfREVCVUdDVExfQlRTIHwgWDg2X0RFQlVHQ1RMX0JUSU5UIHwKKwkJICBYODZfREVCVUdDVExfQlRTX09GRl9PUyB8IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX1VTUik7CisKKwl1cGRhdGVfZGVidWdjdGxtc3IoZGVidWdjdGxtc3IpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9hbGwodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIDApOworCisJaWYgKHRlc3RfYml0KFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgY3B1Yy0+YWN0aXZlX21hc2spKQorCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9hbGwodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIHg4Nl9wbXUuaW50ZWxfY3RybCk7CisKKwlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0KKwkJCWNwdWMtPmV2ZW50c1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOworCisJCWlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSkKKwkJCXJldHVybjsKKworCQlpbnRlbF9wbXVfZW5hYmxlX2J0cyhldmVudC0+aHcuY29uZmlnKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGludGVsX3BtdV9nZXRfc3RhdHVzKHZvaWQpCit7CisJdTY0IHN0YXR1czsKKworCXJkbXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcG11X2Fja19zdGF0dXModTY0IGFjaykKK3sKKwl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwsIGFjayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW50ZWxfcG11X2Rpc2FibGVfZml4ZWQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IF9faWR4KQoreworCWludCBpZHggPSBfX2lkeCAtIFg4Nl9QTUNfSURYX0ZJWEVEOworCXU2NCBjdHJsX3ZhbCwgbWFzazsKKworCW1hc2sgPSAweGZVTEwgPDwgKGlkeCAqIDQpOworCisJcmRtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKKwljdHJsX3ZhbCAmPSB+bWFzazsKKwkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcih2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IGNwdWMtPmRzOworCXN0cnVjdCBidHNfcmVjb3JkIHsKKwkJdTY0CWZyb207CisJCXU2NAl0bzsKKwkJdTY0CWZsYWdzOworCX07CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107CisJc3RydWN0IGJ0c19yZWNvcmQgKmF0LCAqdG9wOworCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJaWYgKCFkcykKKwkJcmV0dXJuOworCisJYXQgID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19idWZmZXJfYmFzZTsKKwl0b3AgPSAoc3RydWN0IGJ0c19yZWNvcmQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2luZGV4OworCisJaWYgKHRvcCA8PSBhdCkKKwkJcmV0dXJuOworCisJZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7CisKKworCWRhdGEucGVyaW9kCT0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCWRhdGEuYWRkcgk9IDA7CisJZGF0YS5yYXcJPSBOVUxMOworCXJlZ3MuaXAJCT0gMDsKKworCS8qCisJICogUHJlcGFyZSBhIGdlbmVyaWMgc2FtcGxlLCBpLmUuIGZpbGwgaW4gdGhlIGludmFyaWFudCBmaWVsZHMuCisJICogV2Ugd2lsbCBvdmVyd3JpdGUgdGhlIGZyb20gYW5kIHRvIGFkZHJlc3MgYmVmb3JlIHdlIG91dHB1dAorCSAqIHRoZSBzYW1wbGUuCisJICovCisJcGVyZl9wcmVwYXJlX3NhbXBsZSgmaGVhZGVyLCAmZGF0YSwgZXZlbnQsICZyZWdzKTsKKworCWlmIChwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwKKwkJCSAgICAgIGhlYWRlci5zaXplICogKHRvcCAtIGF0KSwgMSwgMSkpCisJCXJldHVybjsKKworCWZvciAoOyBhdCA8IHRvcDsgYXQrKykgeworCQlkYXRhLmlwCQk9IGF0LT5mcm9tOworCQlkYXRhLmFkZHIJPSBhdC0+dG87CisKKwkJcGVyZl9vdXRwdXRfc2FtcGxlKCZoYW5kbGUsICZoZWFkZXIsICZkYXRhLCBldmVudCk7CisJfQorCisJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworCisJLyogVGhlcmUncyBuZXcgZGF0YSBhdmFpbGFibGUuICovCisJZXZlbnQtPmh3LmludGVycnVwdHMrKzsKKwlldmVudC0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkgeworCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKKwkJaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7CisJCWludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKGh3YywgaWR4KTsKKwkJcmV0dXJuOworCX0KKworCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW50ZWxfcG11X2VuYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCit7CisJaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7CisJdTY0IGN0cmxfdmFsLCBiaXRzLCBtYXNrOworCWludCBlcnI7CisKKwkvKgorCSAqIEVuYWJsZSBJUlEgZ2VuZXJhdGlvbiAoMHg4KSwKKwkgKiBhbmQgZW5hYmxlIHJpbmctMyBjb3VudGluZyAoMHgyKSBhbmQgcmluZy0wIGNvdW50aW5nICgweDEpCisJICogaWYgcmVxdWVzdGVkOgorCSAqLworCWJpdHMgPSAweDhVTEw7CisJaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUikKKwkJYml0cyB8PSAweDI7CisJaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKQorCQliaXRzIHw9IDB4MTsKKworCS8qCisJICogQU5ZIGJpdCBpcyBzdXBwb3J0ZWQgaW4gdjMgYW5kIHVwCisJICovCisJaWYgKHg4Nl9wbXUudmVyc2lvbiA+IDIgJiYgaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfQU5ZKQorCQliaXRzIHw9IDB4NDsKKworCWJpdHMgPDw9IChpZHggKiA0KTsKKwltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKKworCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7CisJY3RybF92YWwgJj0gfm1hc2s7CisJY3RybF92YWwgfD0gYml0czsKKwllcnIgPSBjaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7CisJCWlmICghX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKS5lbmFibGVkKQorCQkJcmV0dXJuOworCisJCWludGVsX3BtdV9lbmFibGVfYnRzKGh3Yy0+Y29uZmlnKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7CisJCWludGVsX3BtdV9lbmFibGVfZml4ZWQoaHdjLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJX194ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Cit9CisKKy8qCisgKiBTYXZlIGFuZCByZXN0YXJ0IGFuIGV4cGlyZWQgZXZlbnQuIENhbGxlZCBieSBOTUkgY29udGV4dHMsCisgKiBzbyBpdCBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBwcmVlbXB0aW5nIG5vcm1hbCBldmVudCBvcHM6CisgKi8KK3N0YXRpYyBpbnQgaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod2MtPmlkeDsKKwlpbnQgcmV0OworCisJeDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJcmV0ID0geDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaWR4OworCisJaWYgKCF4ODZfcG11Lm51bV9ldmVudHMpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXByaW50aygiY2xlYXJpbmcgUE1VIHN0YXRlIG9uIENQVSMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgeworCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgMHVsbCk7CisJCWNoZWNraW5nX3dybXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCAwdWxsKTsKKwl9CisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQ7IGlkeCsrKSB7CisJCWNoZWNraW5nX3dybXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgKyBpZHgsIDB1bGwpOworCX0KKwlpZiAoZHMpCisJCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVGhpcyBoYW5kbGVyIGlzIHRyaWdnZXJlZCBieSB0aGUgbG9jYWwgQVBJQywgc28gdGhlIEFQSUMgSVJRIGhhbmRsaW5nCisgKiBydWxlcyBhcHBseToKKyAqLworc3RhdGljIGludCBpbnRlbF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCWludCBiaXQsIGxvb3BzOworCXU2NCBhY2ssIHN0YXR1czsKKworCWRhdGEuYWRkciA9IDA7CisJZGF0YS5yYXcgPSBOVUxMOworCisJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJcGVyZl9kaXNhYmxlKCk7CisJaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoKTsKKwlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOworCWlmICghc3RhdHVzKSB7CisJCXBlcmZfZW5hYmxlKCk7CisJCXJldHVybiAwOworCX0KKworCWxvb3BzID0gMDsKK2FnYWluOgorCWlmICgrK2xvb3BzID4gMTAwKSB7CisJCVdBUk5fT05DRSgxLCAicGVyZmV2ZW50czogaXJxIGxvb3Agc3R1Y2shXG4iKTsKKwkJcGVyZl9ldmVudF9wcmludF9kZWJ1ZygpOworCQlpbnRlbF9wbXVfcmVzZXQoKTsKKwkJcGVyZl9lbmFibGUoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaW5jX2lycV9zdGF0KGFwaWNfcGVyZl9pcnFzKTsKKwlhY2sgPSBzdGF0dXM7CisJZm9yX2VhY2hfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikmc3RhdHVzLCBYODZfUE1DX0lEWF9NQVgpIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2JpdF07CisKKwkJY2xlYXJfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikgJnN0YXR1cyk7CisJCWlmICghdGVzdF9iaXQoYml0LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQlpZiAoIWludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KGV2ZW50KSkKKwkJCWNvbnRpbnVlOworCisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCisJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCisJCQlpbnRlbF9wbXVfZGlzYWJsZV9ldmVudCgmZXZlbnQtPmh3LCBiaXQpOworCX0KKworCWludGVsX3BtdV9hY2tfc3RhdHVzKGFjayk7CisKKwkvKgorCSAqIFJlcGVhdCBpZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gYmUgZG9uZToKKwkgKi8KKwlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOworCWlmIChzdGF0dXMpCisJCWdvdG8gYWdhaW47CisKKwlwZXJmX2VuYWJsZSgpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBidHNfY29uc3RyYWludCA9CisJRVZFTlRfQ09OU1RSQUlOVCgwLCAxVUxMIDw8IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCitpbnRlbF9zcGVjaWFsX2NvbnN0cmFpbnRzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfZXZlbnQ7CisKKwlod19ldmVudCA9IGV2ZW50LT5ody5jb25maWcgJiBJTlRFTF9BUkNIX0VWRU5UX01BU0s7CisKKwlpZiAodW5saWtlbHkoKGh3X2V2ZW50ID09CisJCSAgICAgIHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpICYmCisJCSAgICAgKGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kID09IDEpKSkgeworCisJCXJldHVybiAmYnRzX2NvbnN0cmFpbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKgoraW50ZWxfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmM7CisKKwljID0gaW50ZWxfc3BlY2lhbF9jb25zdHJhaW50cyhldmVudCk7CisJaWYgKGMpCisJCXJldHVybiBjOworCisJcmV0dXJuIHg4Nl9nZXRfZXZlbnRfY29uc3RyYWludHMoY3B1YywgZXZlbnQpOworfQorCitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgY29yZV9wbXUgPSB7CisJLm5hbWUJCQk9ICJjb3JlIiwKKwkuaGFuZGxlX2lycQkJPSB4ODZfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IHg4Nl9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0geDg2X3BtdV9lbmFibGVfYWxsLAorCS5lbmFibGUJCQk9IHg4Nl9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IHg4Nl9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDAsCisJLnBlcmZjdHIJCT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IGludGVsX3BtdV9ldmVudF9tYXAsCisJLnJhd19ldmVudAkJPSBpbnRlbF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoaW50ZWxfcGVyZm1vbl9ldmVudF9tYXApLAorCS5hcGljCQkJPSAxLAorCS8qCisJICogSW50ZWwgUE1DcyBjYW5ub3QgYmUgYWNjZXNzZWQgc2FuZWx5IGFib3ZlIDMyIGJpdCB3aWR0aCwKKwkgKiBzbyB3ZSBpbnN0YWxsIGFuIGFydGlmaWNpYWwgMTw8MzEgcGVyaW9kIHJlZ2FyZGxlc3Mgb2YKKwkgKiB0aGUgZ2VuZXJpYyBldmVudCBwZXJpb2Q6CisJICovCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKKwkuZ2V0X2V2ZW50X2NvbnN0cmFpbnRzCT0gaW50ZWxfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzLAorCS5ldmVudF9jb25zdHJhaW50cwk9IGludGVsX2NvcmVfZXZlbnRfY29uc3RyYWludHMsCit9OworCitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgaW50ZWxfcG11ID0geworCS5uYW1lCQkJPSAiSW50ZWwiLAorCS5oYW5kbGVfaXJxCQk9IGludGVsX3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSBpbnRlbF9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0gaW50ZWxfcG11X2VuYWJsZV9hbGwsCisJLmVuYWJsZQkJCT0gaW50ZWxfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBpbnRlbF9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDAsCisJLnBlcmZjdHIJCT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IGludGVsX3BtdV9ldmVudF9tYXAsCisJLnJhd19ldmVudAkJPSBpbnRlbF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoaW50ZWxfcGVyZm1vbl9ldmVudF9tYXApLAorCS5hcGljCQkJPSAxLAorCS8qCisJICogSW50ZWwgUE1DcyBjYW5ub3QgYmUgYWNjZXNzZWQgc2FuZWx5IGFib3ZlIDMyIGJpdCB3aWR0aCwKKwkgKiBzbyB3ZSBpbnN0YWxsIGFuIGFydGlmaWNpYWwgMTw8MzEgcGVyaW9kIHJlZ2FyZGxlc3Mgb2YKKwkgKiB0aGUgZ2VuZXJpYyBldmVudCBwZXJpb2Q6CisJICovCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKKwkuZW5hYmxlX2J0cwkJPSBpbnRlbF9wbXVfZW5hYmxlX2J0cywKKwkuZGlzYWJsZV9idHMJCT0gaW50ZWxfcG11X2Rpc2FibGVfYnRzLAorCS5nZXRfZXZlbnRfY29uc3RyYWludHMJPSBpbnRlbF9nZXRfZXZlbnRfY29uc3RyYWludHMKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGludGVsX3BtdV9pbml0KHZvaWQpCit7CisJdW5pb24gY3B1aWQxMF9lZHggZWR4OworCXVuaW9uIGNwdWlkMTBfZWF4IGVheDsKKwl1bnNpZ25lZCBpbnQgdW51c2VkOworCXVuc2lnbmVkIGludCBlYng7CisJaW50IHZlcnNpb247CisKKwlpZiAoIWNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTikpIHsKKwkJLyogY2hlY2sgZm9yIFA2IHByb2Nlc3NvciBmYW1pbHkgKi8KKwkgICBpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNikgeworCQlyZXR1cm4gcDZfcG11X2luaXQoKTsKKwkgICB9IGVsc2UgeworCQlyZXR1cm4gLUVOT0RFVjsKKwkgICB9CisJfQorCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSBBcmNoaXRlY3R1cmFsIFBlcmZNb24gc3VwcG9ydHMKKwkgKiBCcmFuY2ggTWlzc2VzIFJldGlyZWQgaHdfZXZlbnQgb3Igbm90LgorCSAqLworCWNwdWlkKDEwLCAmZWF4LmZ1bGwsICZlYngsICZ1bnVzZWQsICZlZHguZnVsbCk7CisJaWYgKGVheC5zcGxpdC5tYXNrX2xlbmd0aCA8PSBBUkNIX1BFUkZNT05fQlJBTkNIX01JU1NFU19SRVRJUkVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZlcnNpb24gPSBlYXguc3BsaXQudmVyc2lvbl9pZDsKKwlpZiAodmVyc2lvbiA8IDIpCisJCXg4Nl9wbXUgPSBjb3JlX3BtdTsKKwllbHNlCisJCXg4Nl9wbXUgPSBpbnRlbF9wbXU7CisKKwl4ODZfcG11LnZlcnNpb24JCQk9IHZlcnNpb247CisJeDg2X3BtdS5udW1fZXZlbnRzCQk9IGVheC5zcGxpdC5udW1fZXZlbnRzOworCXg4Nl9wbXUuZXZlbnRfYml0cwkJPSBlYXguc3BsaXQuYml0X3dpZHRoOworCXg4Nl9wbXUuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCBlYXguc3BsaXQuYml0X3dpZHRoKSAtIDE7CisKKwkvKgorCSAqIFF1aXJrOiB2MiBwZXJmbW9uIGRvZXMgbm90IHJlcG9ydCBmaXhlZC1wdXJwb3NlIGV2ZW50cywgc28KKwkgKiBhc3N1bWUgYXQgbGVhc3QgMyBldmVudHM6CisJICovCisJaWYgKHZlcnNpb24gPiAxKQorCQl4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQgPSBtYXgoKGludCllZHguc3BsaXQubnVtX2V2ZW50c19maXhlZCwgMyk7CisKKwkvKgorCSAqIEluc3RhbGwgdGhlIGh3LWNhY2hlLWV2ZW50cyB0YWJsZToKKwkgKi8KKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKSB7CisJY2FzZSAxNDogLyogNjUgbm0gY29yZSBzb2xvL2R1bywgIllvbmFoIiAqLworCQlwcl9jb250KCJDb3JlIGV2ZW50cywgIik7CisJCWJyZWFrOworCisJY2FzZSAxNTogLyogb3JpZ2luYWwgNjUgbm0gY2VsZXJvbi9wZW50aXVtL2NvcmUyL3hlb24sICJNZXJvbSIvIkNvbnJvZSIgKi8KKwljYXNlIDIyOiAvKiBzaW5nbGUtY29yZSA2NSBubSBjZWxlcm9uL2NvcmUyc29sbyAiTWVyb20tTCIvIkNvbnJvZS1MIiAqLworCWNhc2UgMjM6IC8qIGN1cnJlbnQgNDUgbm0gY2VsZXJvbi9jb3JlMi94ZW9uICJQZW5yeW4iLyJXb2xmZGFsZSIgKi8KKwljYXNlIDI5OiAvKiBzaXgtY29yZSA0NSBubSB4ZW9uICJEdW5uaW5ndG9uIiAqLworCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBjb3JlMl9od19jYWNoZV9ldmVudF9pZHMsCisJCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisKKwkJeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cyA9IGludGVsX2NvcmUyX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJDb3JlMiBldmVudHMsICIpOworCQlicmVhazsKKworCWNhc2UgMjY6IC8qIDQ1IG5tIG5laGFsZW0sICJCbG9vbWZpZWxkIiAqLworCWNhc2UgMzA6IC8qIDQ1IG5tIG5laGFsZW0sICJMeW5uZmllbGQiICovCisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzLAorCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCisJCXg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9uZWhhbGVtX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJOZWhhbGVtL0NvcmVpNyBldmVudHMsICIpOworCQlicmVhazsKKwljYXNlIDI4OgorCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBhdG9tX2h3X2NhY2hlX2V2ZW50X2lkcywKKwkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfZ2VuX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJBdG9tIGV2ZW50cywgIik7CisJCWJyZWFrOworCisJY2FzZSAzNzogLyogMzIgbm0gbmVoYWxlbSwgIkNsYXJrZGFsZSIgKi8KKwljYXNlIDQ0OiAvKiAzMiBubSBuZWhhbGVtLCAiR3VsZnRvd24iICovCisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIHdlc3RtZXJlX2h3X2NhY2hlX2V2ZW50X2lkcywKKwkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfd2VzdG1lcmVfZXZlbnRfY29uc3RyYWludHM7CisJCXByX2NvbnQoIldlc3RtZXJlIGV2ZW50cywgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qCisJCSAqIGRlZmF1bHQgY29uc3RyYWludHMgZm9yIHYyIGFuZCB1cAorCQkgKi8KKwkJeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cyA9IGludGVsX2dlbl9ldmVudF9jb25zdHJhaW50czsKKwkJcHJfY29udCgiZ2VuZXJpYyBhcmNoaXRlY3RlZCBwZXJmbW9uLCAiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIENPTkZJR19DUFVfU1VQX0lOVEVMICovCisKK3N0YXRpYyBpbnQgaW50ZWxfcG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19DUFVfU1VQX0lOVEVMICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTViYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDYuYwpAQCAtMCwwICsxLDE1NyBAQAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0lOVEVMCisKKy8qCisgKiBOb3Qgc3VyZSBhYm91dCBzb21lIG9mIHRoZXNlCisgKi8KK3N0YXRpYyBjb25zdCB1NjQgcDZfcGVyZm1vbl9ldmVudF9tYXBbXSA9Cit7CisgIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3OSwKKyAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwZjJlLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDEyZSwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKKyAgW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JCT0gMHgwMDYyLAorfTsKKworc3RhdGljIHU2NCBwNl9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKK3sKKwlyZXR1cm4gcDZfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOworfQorCisvKgorICogRXZlbnQgc2V0dGluZyB0aGF0IGlzIHNwZWNpZmllZCBub3QgdG8gY291bnQgYW55dGhpbmcuCisgKiBXZSB1c2UgdGhpcyB0byBlZmZlY3RpdmVseSBkaXNhYmxlIGEgY291bnRlci4KKyAqCisgKiBMMl9SUVNUUyB3aXRoIDAgTUVTSSB1bml0IG1hc2suCisgKi8KKyNkZWZpbmUgUDZfTk9QX0VWRU5UCQkJMHgwMDAwMDAyRVVMTAorCitzdGF0aWMgdTY0IHA2X3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQoreworI2RlZmluZSBQNl9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9VTklUX01BU0sJCTB4MDAwMEZGMDBVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAorI2RlZmluZSBQNl9FVk5UU0VMX1JFR19NQVNLCQkweEZGMDAwMDAwVUxMCisKKyNkZWZpbmUgUDZfRVZOVFNFTF9NQVNLCQkJXAorCShQNl9FVk5UU0VMX0VWRU5UX01BU0sgfAlcCisJIFA2X0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKKwkgUDZfRVZOVFNFTF9FREdFX01BU0sgIHwJXAorCSBQNl9FVk5UU0VMX0lOVl9NQVNLICAgfAlcCisJIFA2X0VWTlRTRUxfUkVHX01BU0spCisKKwlyZXR1cm4gaHdfZXZlbnQgJiBQNl9FVk5UU0VMX01BU0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBwNl9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzEsIDB4MSksCS8qIEZMT1BTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLAkvKiBGUF9DT01QX09QU19FWEUgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MSksCS8qIEZQX0FTU0lTVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwJLyogTVVMICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLAkvKiBESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksCS8qIENZQ0xFU19ESVZfQlVTWSAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCitzdGF0aWMgdm9pZCBwNl9wbXVfZGlzYWJsZV9hbGwodm9pZCkKK3sKKwl1NjQgdmFsOworCisJLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLworCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7CisJdmFsICY9IH5BUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKKwl3cm1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2FsbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLworCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7CisJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcDZfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXU2NCB2YWwgPSBQNl9OT1BfRVZFTlQ7CisKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCisJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHA2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXU2NCB2YWw7CisKKwl2YWwgPSBod2MtPmNvbmZpZzsKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCisJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBwNl9wbXUgPSB7CisJLm5hbWUJCQk9ICJwNiIsCisJLmhhbmRsZV9pcnEJCT0geDg2X3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSBwNl9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0gcDZfcG11X2VuYWJsZV9hbGwsCisJLmVuYWJsZQkJCT0gcDZfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBwNl9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX1A2X0VWTlRTRUwwLAorCS5wZXJmY3RyCQk9IE1TUl9QNl9QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IHA2X3BtdV9ldmVudF9tYXAsCisJLnJhd19ldmVudAkJPSBwNl9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUocDZfcGVyZm1vbl9ldmVudF9tYXApLAorCS5hcGljCQkJPSAxLAorCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDMxKSAtIDEsCisJLnZlcnNpb24JCT0gMCwKKwkubnVtX2V2ZW50cwkJPSAyLAorCS8qCisJICogRXZlbnRzIGhhdmUgNDAgYml0cyBpbXBsZW1lbnRlZC4gSG93ZXZlciB0aGV5IGFyZSBkZXNpZ25lZCBzdWNoCisJICogdGhhdCBiaXRzIFszMi0zOV0gYXJlIHNpZ24gZXh0ZW5zaW9ucyBvZiBiaXQgMzEuIEFzIHN1Y2ggdGhlCisJICogZWZmZWN0aXZlIHdpZHRoIG9mIGEgZXZlbnQgZm9yIFA2LWxpa2UgUE1VIGlzIDMyIGJpdHMgb25seS4KKwkgKgorCSAqIFNlZSBJQS0zMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUgZGV2ZWxvcGVyIG1hbnVhbCBWb2wgM0IKKwkgKi8KKwkuZXZlbnRfYml0cwkJPSAzMiwKKwkuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCAzMikgLSAxLAorCS5nZXRfZXZlbnRfY29uc3RyYWludHMJPSB4ODZfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzLAorCS5ldmVudF9jb25zdHJhaW50cwk9IHA2X2V2ZW50X2NvbnN0cmFpbnRzLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgcDZfcG11X2luaXQodm9pZCkKK3sKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKSB7CisJY2FzZSAxOgorCWNhc2UgMzogIC8qIFBlbnRpdW0gUHJvICovCisJY2FzZSA1OgorCWNhc2UgNjogIC8qIFBlbnRpdW0gSUkgKi8KKwljYXNlIDc6CisJY2FzZSA4OgorCWNhc2UgMTE6IC8qIFBlbnRpdW0gSUlJICovCisJY2FzZSA5OgorCWNhc2UgMTM6CisJCS8qIFBlbnRpdW0gTSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9jb250KCJ1bnN1cHBvcnRlZCBwNiBDUFUgbW9kZWwgJWQgIiwKKwkJCWJvb3RfY3B1X2RhdGEueDg2X21vZGVsKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJeDg2X3BtdSA9IHA2X3BtdTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9TVVBfSU5URUwgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggODk4ZGY5Ny4uNzRmNGU4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTExNSwxNyArMTE1LDYgQEAKIAogCXJldHVybiAhdGVzdF9iaXQoY291bnRlciwgcGVyZmN0cl9ubWlfb3duZXIpOwogfQotCi0vKiBjaGVja3MgdGhlIGFuIG1zciBmb3IgYXZhaWxhYmlsaXR5ICovCi1pbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50IG1zcikKLXsKLQl1bnNpZ25lZCBpbnQgY291bnRlcjsKLQotCWNvdW50ZXIgPSBubWlfcGVyZmN0cl9tc3JfdG9fYml0KG1zcik7Ci0JQlVHX09OKGNvdW50ZXIgPiBOTUlfTUFYX0NPVU5URVJfQklUUyk7Ci0KLQlyZXR1cm4gIXRlc3RfYml0KGNvdW50ZXIsIHBlcmZjdHJfbm1pX293bmVyKTsKLX0KIEVYUE9SVF9TWU1CT0woYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWlfYml0KTsKIAogaW50IHJlc2VydmVfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50IG1zcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwppbmRleCBhZTc3NWNhLi4xMTU0MGExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCkBAIC0xOCwxMSArMTgsNiBAQAogCiAjaW5jbHVkZSAiZHVtcHN0YWNrLmgiCiAKLS8qIEp1c3QgYSBzdHViIGZvciBub3cgKi8KLWludCB4ODZfaXNfc3RhY2tfaWQoaW50IGlkLCBjaGFyICpuYW1lKQotewotCXJldHVybiAwOwotfQogCiB2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKaW5kZXggMGFkOTU5Ny4uZGNlOTlhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwpAQCAtMzMsMTEgKzMzLDYgQEAKICNlbmRpZgogfTsKIAotaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJuIHg4Nl9zdGFja19pZHNbaWQgLSAxXSA9PSBuYW1lOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyAqaW5fZXhjZXB0aW9uX3N0YWNrKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgbG9uZyBzdGFjaywKIAkJCQkJIHVuc2lnbmVkICp1c2VkcCwgY2hhciAqKmlkcCkKIHsKQEAgLTI5MSw2ICsyODYsNyBAQAogCiAJc3AgPSByZWdzLT5zcDsKIAlwcmludGsoIkNQVSAlZCAiLCBjcHUpOworCXByaW50X21vZHVsZXMoKTsKIAlfX3Nob3dfcmVncyhyZWdzLCAxKTsKIAlwcmludGsoIlByb2Nlc3MgJXMgKHBpZDogJWQsIHRocmVhZGluZm8gJXAsIHRhc2sgJXApXG4iLAogCQljdXItPmNvbW0sIGN1ci0+cGlkLCB0YXNrX3RocmVhZF9pbmZvKGN1ciksIGN1cik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCBhMWE3ODc2Li5hOTY2Yjc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTUxNywxMSArNTE3LDE5IEBACiAJCQkgICAgIGludCBjaGVja3R5cGUpCiB7CiAJaW50IGk7CisJdTY0IGVuZDsKIAl1NjQgcmVhbF9yZW1vdmVkX3NpemUgPSAwOwogCiAJaWYgKHNpemUgPiAoVUxMT05HX01BWCAtIHN0YXJ0KSkKIAkJc2l6ZSA9IFVMTE9OR19NQVggLSBzdGFydDsKIAorCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZTgyMCByZW1vdmUgcmFuZ2U6ICUwMTZMeCAtICUwMTZMeCAiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQpOworCWU4MjBfcHJpbnRfdHlwZShvbGRfdHlwZSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CiAJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjAubWFwW2ldOwogCQl1NjQgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwppbmRleCBjZGNmYjEyLi5jMmZhOWI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCkBAIC0zNjIsNyArMzYyLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGQgbm90IG1hcCB0aGUgZmlybXdhcmUgdmVuZG9yIVxuIik7CiAJZWFybHlfaW91bm1hcCh0bXAsIDIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRUZJIHYldS4lLjAydSBieSAlcyBcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiRUZJIHYldS4lLjAydSBieSAlc1xuIiwKIAkgICAgICAgZWZpLnN5c3RhYi0+aGRyLnJldmlzaW9uID4+IDE2LAogCSAgICAgICBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gJiAweGZmZmYsIHZlbmRvcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwppbmRleCAzMDk2ODkyLi5jZDM3NDY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCkBAIC0zMCwxNCArMzAsMzIgQEAKIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCisvKgorICogbW9kaWZ5aW5nX2NvZGUgaXMgc2V0IHRvIG5vdGlmeSBOTUlzIHRoYXQgdGhleSBuZWVkIHRvIHVzZQorICogbWVtb3J5IGJhcnJpZXJzIHdoZW4gZW50ZXJpbmcgb3IgZXhpdGluZy4gQnV0IHdlIGRvbid0IHdhbnQKKyAqIHRvIGJ1cmRlbiBOTUlzIHdpdGggdW5uZWNlc3NhcnkgbWVtb3J5IGJhcnJpZXJzIHdoZW4gY29kZQorICogbW9kaWZpY2F0aW9uIGlzIG5vdCBiZWluZyBkb25lICh3aGljaCBpcyBtb3N0IG9mIHRoZSB0aW1lKS4KKyAqCisgKiBBIG11dGV4IGlzIGFscmVhZHkgaGVsZCB3aGVuIGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUKKyAqIGFuZCBwb3N0X3Byb2Nlc3MgYXJlIGNhbGxlZC4gTm8gbG9ja3MgbmVlZCB0byBiZSB0YWtlbiBoZXJlLgorICoKKyAqIFN0b3AgbWFjaGluZSB3aWxsIG1ha2Ugc3VyZSBjdXJyZW50bHkgcnVubmluZyBOTUlzIGFyZSBkb25lCisgKiBhbmQgbmV3IE5NSXMgd2lsbCBzZWUgdGhlIHVwZGF0ZWQgdmFyaWFibGUgYmVmb3JlIHdlIG5lZWQKKyAqIHRvIHdvcnJ5IGFib3V0IE5NSXMgZG9pbmcgbWVtb3J5IGJhcnJpZXJzLgorICovCitzdGF0aWMgaW50IG1vZGlmeWluZ19jb2RlIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBzYXZlX21vZGlmeWluZ19jb2RlKTsKKwogaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUodm9pZCkKIHsKIAlzZXRfa2VybmVsX3RleHRfcncoKTsKKwltb2RpZnlpbmdfY29kZSA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wb3N0X3Byb2Nlc3Modm9pZCkKIHsKKwltb2RpZnlpbmdfY29kZSA9IDA7CiAJc2V0X2tlcm5lbF90ZXh0X3JvKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDksNiArMTY3LDExIEBACiAKIHZvaWQgZnRyYWNlX25taV9lbnRlcih2b2lkKQogeworCV9fZ2V0X2NwdV92YXIoc2F2ZV9tb2RpZnlpbmdfY29kZSkgPSBtb2RpZnlpbmdfY29kZTsKKworCWlmICghX19nZXRfY3B1X3ZhcihzYXZlX21vZGlmeWluZ19jb2RlKSkKKwkJcmV0dXJuOworCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZubWlfcnVubmluZykgJiBNT0RfQ09ERV9XUklURV9GTEFHKSB7CiAJCXNtcF9ybWIoKTsKIAkJZnRyYWNlX21vZF9jb2RlKCk7CkBAIC0xNjAsNiArMTgzLDkgQEAKIAogdm9pZCBmdHJhY2Vfbm1pX2V4aXQodm9pZCkKIHsKKwlpZiAoIV9fZ2V0X2NwdV92YXIoc2F2ZV9tb2RpZnlpbmdfY29kZSkpCisJCXJldHVybjsKKwogCS8qIEZpbmlzaCBhbGwgZXhlY3V0aW9ucyBiZWZvcmUgY2xlYXJpbmcgbm1pX3J1bm5pbmcgKi8KIAlzbXBfbWIoKTsKIAlhdG9taWNfZGVjKCZubWlfcnVubmluZyk7CkBAIC00ODQsMTMgKzUxMCwzIEBACiAJfQogfQogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KLQotI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnN5c19jYWxsX3RhYmxlOwotCi11bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKSgmc3lzX2NhbGxfdGFibGUpW25yXTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hwZXQuYyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKaW5kZXggYWQ4MGExYy4uZWU0ZmExYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAlmb3JjZV9ocGV0X3Jlc3VtZSgpOwogfQogCi1zdGF0aWMgdm9pZCBocGV0X3Jlc3VtZV9jb3VudGVyKHZvaWQpCitzdGF0aWMgdm9pZCBocGV0X3Jlc3VtZV9jb3VudGVyKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJaHBldF9yZXN1bWVfZGV2aWNlKCk7CiAJaHBldF9yZXN0YXJ0X2NvdW50ZXIoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IGJiNjAwNmUuLmRjYTI4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtNDg2LDggKzQ4Niw2IEBACiAJCXJjdV9yZWFkX2xvY2soKTsKIAogCQlicCA9IHBlcl9jcHUoYnBfcGVyX3JlZ1tpXSwgY3B1KTsKLQkJaWYgKGJwKQotCQkJcmMgPSBOT1RJRllfRE9ORTsKIAkJLyoKIAkJICogUmVzZXQgdGhlICdpJ3RoIFRSQVAgYml0IGluIGRyNiB0byBkZW5vdGUgY29tcGxldGlvbiBvZgogCQkgKiBleGNlcHRpb24gaGFuZGxpbmcKQEAgLTUwNiw3ICs1MDQsMTMgQEAKIAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9Ci0JaWYgKGRyNiAmICh+RFJfVFJBUF9CSVRTKSkKKwkvKgorCSAqIEZ1cnRoZXIgcHJvY2Vzc2luZyBpbiBkb19kZWJ1ZygpIGlzIG5lZWRlZCBmb3IgYSkgdXNlci1zcGFjZQorCSAqIGJyZWFrcG9pbnRzICh0byBnZW5lcmF0ZSBzaWduYWxzKSBhbmQgYikgd2hlbiB0aGUgc3lzdGVtIGhhcworCSAqIHRha2VuIGV4Y2VwdGlvbiBkdWUgdG8gbXVsdGlwbGUgY2F1c2VzCisJICovCisJaWYgKChjdXJyZW50LT50aHJlYWQuZGVidWdyZWc2ICYgRFJfVFJBUF9CSVRTKSB8fAorCSAgICAoZHI2ICYgKH5EUl9UUkFQX0JJVFMpKSkKIAkJcmMgPSBOT1RJRllfRE9ORTsKIAogCXNldF9kZWJ1Z3JlZyhkcjcsIDcpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2kzODcuYyBiL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKaW5kZXggZjJmODU0MC4uYzAxYTJiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2kzODcuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCkBAIC0xNjQsNiArMTY0LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGUgeHN0YXRlcmVnc19hY3RpdmUoKSByb3V0aW5lIGlzIHRoZSBzYW1lIGFzIHRoZSBmcHJlZ3NfYWN0aXZlKCkgcm91dGluZSwKKyAqIGFzIHRoZSAicmVnc2V0LT5uIiBmb3IgdGhlIHhzdGF0ZSByZWdzZXQgd2lsbCBiZSB1cGRhdGVkIGJhc2VkIG9uIHRoZSBmZWF0dXJlCisgKiBjYXBhYmlsaXRlcyBzdXBwb3J0ZWQgYnkgdGhlIHhzYXZlLgorICovCiBpbnQgZnByZWdzX2FjdGl2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQpCiB7CiAJcmV0dXJuIHRza191c2VkX21hdGgodGFyZ2V0KSA/IHJlZ3NldC0+biA6IDA7CkBAIC0yMDQsOCArMjA5LDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRhcmdldCk7Ci0KIAlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCiAJCQkJICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSwgMCwgLTEpOwogCkBAIC0yMjQsNiArMjI3LDY4IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IHhzdGF0ZXJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQl2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjcHVfaGFzX3hzYXZlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGluaXRfZnB1KHRhcmdldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogQ29weSB0aGUgNDhieXRlcyBkZWZpbmVkIGJ5IHRoZSBzb2Z0d2FyZSBmaXJzdCBpbnRvIHRoZSB4c3RhdGUKKwkgKiBtZW1vcnkgbGF5b3V0IGluIHRoZSB0aHJlYWQgc3RydWN0LCBzbyB0aGF0IHdlIGNhbiBjb3B5IHRoZSBlbnRpcmUKKwkgKiB4c3RhdGVyZWdzIHRvIHRoZSB1c2VyIHVzaW5nIG9uZSB1c2VyX3JlZ3NldF9jb3B5b3V0KCkuCisJICovCisJbWVtY3B5KCZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmZ4c2F2ZS5zd19yZXNlcnZlZCwKKwkgICAgICAgeHN0YXRlX2Z4X3N3X2J5dGVzLCBzaXplb2YoeHN0YXRlX2Z4X3N3X2J5dGVzKSk7CisKKwkvKgorCSAqIENvcHkgdGhlIHhzdGF0ZSBtZW1vcnkgbGF5b3V0LgorCSAqLworCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT54c2F2ZSwgMCwgLTEpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB4c3RhdGVyZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCWludCByZXQ7CisJc3RydWN0IHhzYXZlX2hkcl9zdHJ1Y3QgKnhzYXZlX2hkcjsKKworCWlmICghY3B1X2hhc194c2F2ZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPnhzYXZlLCAwLCAtMSk7CisKKwkvKgorCSAqIG14Y3NyIHJlc2VydmVkIGJpdHMgbXVzdCBiZSBtYXNrZWQgdG8gemVybyBmb3Igc2VjdXJpdHkgcmVhc29ucy4KKwkgKi8KKwl0YXJnZXQtPnRocmVhZC54c3RhdGUtPmZ4c2F2ZS5teGNzciAmPSBteGNzcl9mZWF0dXJlX21hc2s7CisKKwl4c2F2ZV9oZHIgPSAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT54c2F2ZS54c2F2ZV9oZHI7CisKKwl4c2F2ZV9oZHItPnhzdGF0ZV9idiAmPSBwY250eHRfbWFzazsKKwkvKgorCSAqIFRoZXNlIGJpdHMgbXVzdCBiZSB6ZXJvLgorCSAqLworCXhzYXZlX2hkci0+cmVzZXJ2ZWQxWzBdID0geHNhdmVfaGRyLT5yZXNlcnZlZDFbMV0gPSAwOworCisJcmV0dXJuIHJldDsKK30KKwogI2lmIGRlZmluZWQgQ09ORklHX1g4Nl8zMiB8fCBkZWZpbmVkIENPTkZJR19JQTMyX0VNVUxBVElPTgogCiAvKgpAQCAtNDA0LDggKzQ2OSw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXJnZXQpOwotCiAJaWYgKCFIQVZFX0hXRlApCiAJCXJldHVybiBmcHJlZ3Nfc29mdF9zZXQodGFyZ2V0LCByZWdzZXQsIHBvcywgY291bnQsIGtidWYsIHVidWYpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCA1YjhjNzUwLi41ZGU5ZjRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTMzNyw2ICszMzcsOSBAQAogCiBpbnQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKKwlpZiAoYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQocC0+YWRkciwgcC0+YWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKCFjYW5fcHJvYmUoKHVuc2lnbmVkIGxvbmcpcC0+YWRkcikpCiAJCXJldHVybiAtRUlMU0VROwogCS8qIGluc246IG11c3QgYmUgb24gc3BlY2lhbCBleGVjdXRhYmxlIHBhZ2Ugb24geDg2LiAqLwpAQCAtNDI5LDcgKzQzMiw3IEBACiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0dXBfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkgICAgICAgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKLSNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgZGVmaW5lZChDT05GSUdfRlJFRVpFUikKKyNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKIAlpZiAocC0+YWluc24uYm9vc3RhYmxlID09IDEgJiYgIXAtPnBvc3RfaGFuZGxlcikgewogCQkvKiBCb29zdCB1cCAtLSB3ZSBjYW4gZXhlY3V0ZSBjb3BpZWQgaW5zdHJ1Y3Rpb25zIGRpcmVjdGx5ICovCiAJCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKaW5kZXggZWJkMTkzZS4uODVhMzQzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCSAgICAgICBjcHVfbnVtLCBtY19pbnRlbC0+aGRyLnJldik7CiAJCXJldHVybiAtMTsKIAl9Ci0JcHJfaW5mbygiQ1BVJWQgdXBkYXRlZCB0byByZXZpc2lvbiAweCV4LCBkYXRlID0gJTA0eC0lMDJ4LSUwMnggXG4iLAorCXByX2luZm8oIkNQVSVkIHVwZGF0ZWQgdG8gcmV2aXNpb24gMHgleCwgZGF0ZSA9ICUwNHgtJTAyeC0lMDJ4XG4iLAogCQljcHVfbnVtLCB2YWxbMV0sCiAJCW1jX2ludGVsLT5oZHIuZGF0ZSAmIDB4ZmZmZiwKIAkJbWNfaW50ZWwtPmhkci5kYXRlID4+IDI0LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYzliMzUyMi4uMDJkNjc4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC05Miw2ICs5MiwxMyBAQAogCX0KIH0KIAordm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc2hvd19yZWdpc3RlcnMocmVncyk7CisJc2hvd190cmFjZShOVUxMLCByZWdzLCAodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpLAorCQkgICByZWdzLT5icCk7Cit9CisKIHZvaWQgc2hvd19yZWdzX2NvbW1vbih2b2lkKQogewogCWNvbnN0IGNoYXIgKmJvYXJkLCAqcHJvZHVjdDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDM3YWQxZTAuLmY2YzYyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMTc0LDEyICsxNzQsNiBAQAogCQkJZDYsIGQ3KTsKIH0KIAotdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc2hvd19yZWdpc3RlcnMocmVncyk7Ci0Jc2hvd190cmFjZShOVUxMLCByZWdzLCAmcmVncy0+c3AsIHJlZ3MtPmJwKTsKLX0KLQogdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKIHsKIAlCVUdfT04oZGVhZF90YXNrLT5tbSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCAxMjZmMGI0Li5kYzk2OTBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTIxMSwxMiArMjExLDYgQEAKIAlwcmludGsoS0VSTl9ERUZBVUxUICJEUjM6ICUwMTZseCBEUjY6ICUwMTZseCBEUjc6ICUwMTZseFxuIiwgZDMsIGQ2LCBkNyk7CiB9CiAKLXZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOwotCXNob3dfdHJhY2UoTlVMTCwgcmVncywgKHZvaWQgKikocmVncyArIDEpLCByZWdzLT5icCk7Ci19Ci0KIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCiB7CiAJaWYgKGRlYWRfdGFzay0+bW0pIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCAwYzEwMzNkLi4yZDk2YWFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC00OCw2ICs0OCw3IEBACiAJUkVHU0VUX0ZQLAogCVJFR1NFVF9YRlAsCiAJUkVHU0VUX0lPUEVSTTY0ID0gUkVHU0VUX1hGUCwKKwlSRUdTRVRfWFNUQVRFLAogCVJFR1NFVF9UTFMsCiAJUkVHU0VUX0lPUEVSTTMyLAogfTsKQEAgLTE0MCwzMCArMTQxLDYgQEAKICNlbmRpZgogfTsKIAotLyoqCi0gKiByZWdzX2dldF9hcmd1bWVudF9udGgoKSAtIGdldCBOdGggYXJndW1lbnQgYXQgZnVuY3Rpb24gY2FsbAotICogQHJlZ3M6CXB0X3JlZ3Mgd2hpY2ggY29udGFpbnMgcmVnaXN0ZXJzIGF0IGZ1bmN0aW9uIGVudHJ5LgotICogQG46CQlhcmd1bWVudCBudW1iZXIuCi0gKgotICogcmVnc19nZXRfYXJndW1lbnRfbnRoKCkgcmV0dXJucyBAbiB0aCBhcmd1bWVudCBvZiBhIGZ1bmN0aW9uIGNhbGwuCi0gKiBTaW5jZSB1c3VhbGx5IHRoZSBrZXJuZWwgc3RhY2sgd2lsbCBiZSBjaGFuZ2VkIHJpZ2h0IGFmdGVyIGZ1bmN0aW9uIGVudHJ5LAotICogeW91IG11c3QgdXNlIHRoaXMgYXQgZnVuY3Rpb24gZW50cnkuIElmIHRoZSBAbiB0aCBlbnRyeSBpcyBOT1QgaW4gdGhlCi0gKiBrZXJuZWwgc3RhY2sgb3IgcHRfcmVncywgdGhpcyByZXR1cm5zIDAuCi0gKi8KLXVuc2lnbmVkIGxvbmcgcmVnc19nZXRfYXJndW1lbnRfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbikKLXsKLQlpZiAobiA8IEFSUkFZX1NJWkUoYXJnX29mZnNfdGFibGUpKQotCQlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopKChjaGFyICopcmVncyArIGFyZ19vZmZzX3RhYmxlW25dKTsKLQllbHNlIHsKLQkJLyoKLQkJICogVGhlIHR5cGljYWwgY2FzZTogYXJnIG4gaXMgb24gdGhlIHN0YWNrLgotCQkgKiAoTm90ZTogc3RhY2tbMF0gPSByZXR1cm4gYWRkcmVzcywgc28gc2tpcCBpdCkKLQkJICovCi0JCW4gLT0gQVJSQVlfU0laRShhcmdfb2Zmc190YWJsZSk7Ci0JCXJldHVybiByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKHJlZ3MsIDEgKyBuKTsKLQl9Ci19Ci0KIC8qCiAgKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCiAgKiBpbiBleGl0LmMgb3IgaW4gc2lnbmFsLmMuCkBAIC0xNTg3LDcgKzE1NjQsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl82NF9yZWdzZXRzW10gPSB7CitzdGF0aWMgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl82NF9yZWdzZXRzW10gX19yZWFkX21vc3RseSA9IHsKIAlbUkVHU0VUX0dFTkVSQUxdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlNUQVRVUywKIAkJLm4gPSBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGxvbmcpLApAQCAtMTYwMCw2ICsxNTc3LDEyIEBACiAJCS5zaXplID0gc2l6ZW9mKGxvbmcpLCAuYWxpZ24gPSBzaXplb2YobG9uZyksCiAJCS5hY3RpdmUgPSB4ZnByZWdzX2FjdGl2ZSwgLmdldCA9IHhmcHJlZ3NfZ2V0LCAuc2V0ID0geGZwcmVnc19zZXQKIAl9LAorCVtSRUdTRVRfWFNUQVRFXSA9IHsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfWDg2X1hTVEFURSwKKwkJLnNpemUgPSBzaXplb2YodTY0KSwgLmFsaWduID0gc2l6ZW9mKHU2NCksCisJCS5hY3RpdmUgPSB4c3RhdGVyZWdzX2FjdGl2ZSwgLmdldCA9IHhzdGF0ZXJlZ3NfZ2V0LAorCQkuc2V0ID0geHN0YXRlcmVnc19zZXQKKwl9LAogCVtSRUdTRVRfSU9QRVJNNjRdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF8zODZfSU9QRVJNLAogCQkubiA9IElPX0JJVE1BUF9MT05HUywKQEAgLTE2MjUsNyArMTYwOCw3IEBACiAjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLwogCiAjaWYgZGVmaW5lZCBDT05GSUdfWDg2XzMyIHx8IGRlZmluZWQgQ09ORklHX0lBMzJfRU1VTEFUSU9OCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl8zMl9yZWdzZXRzW10gPSB7CitzdGF0aWMgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl8zMl9yZWdzZXRzW10gX19yZWFkX21vc3RseSA9IHsKIAlbUkVHU0VUX0dFTkVSQUxdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlNUQVRVUywKIAkJLm4gPSBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMikgLyBzaXplb2YodTMyKSwKQEAgLTE2NDQsNiArMTYyNywxMiBAQAogCQkuc2l6ZSA9IHNpemVvZih1MzIpLCAuYWxpZ24gPSBzaXplb2YodTMyKSwKIAkJLmFjdGl2ZSA9IHhmcHJlZ3NfYWN0aXZlLCAuZ2V0ID0geGZwcmVnc19nZXQsIC5zZXQgPSB4ZnByZWdzX3NldAogCX0sCisJW1JFR1NFVF9YU1RBVEVdID0geworCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9YODZfWFNUQVRFLAorCQkuc2l6ZSA9IHNpemVvZih1NjQpLCAuYWxpZ24gPSBzaXplb2YodTY0KSwKKwkJLmFjdGl2ZSA9IHhzdGF0ZXJlZ3NfYWN0aXZlLCAuZ2V0ID0geHN0YXRlcmVnc19nZXQsCisJCS5zZXQgPSB4c3RhdGVyZWdzX3NldAorCX0sCiAJW1JFR1NFVF9UTFNdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF8zODZfVExTLAogCQkubiA9IEdEVF9FTlRSWV9UTFNfRU5UUklFUywgLmJpYXMgPSBHRFRfRU5UUllfVExTX01JTiwKQEAgLTE2NjYsNiArMTY1NSwyMyBAQAogfTsKICNlbmRpZgogCisvKgorICogVGhpcyByZXByZXNlbnRzIGJ5dGVzIDQ2NC4uNTExIGluIHRoZSBtZW1vcnkgbGF5b3V0IGV4cG9ydGVkIHRocm91Z2gKKyAqIHRoZSBSRUdTRVRfWFNUQVRFIGludGVyZmFjZS4KKyAqLwordTY0IHhzdGF0ZV9meF9zd19ieXRlc1tVU0VSX1hTVEFURV9GWF9TV19XT1JEU107CisKK3ZvaWQgdXBkYXRlX3JlZ3NldF94c3RhdGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSwgdTY0IHhzdGF0ZV9tYXNrKQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwl4ODZfNjRfcmVnc2V0c1tSRUdTRVRfWFNUQVRFXS5uID0gc2l6ZSAvIHNpemVvZih1NjQpOworI2VuZGlmCisjaWYgZGVmaW5lZCBDT05GSUdfWDg2XzMyIHx8IGRlZmluZWQgQ09ORklHX0lBMzJfRU1VTEFUSU9OCisJeDg2XzMyX3JlZ3NldHNbUkVHU0VUX1hTVEFURV0ubiA9IHNpemUgLyBzaXplb2YodTY0KTsKKyNlbmRpZgorCXhzdGF0ZV9meF9zd19ieXRlc1tVU0VSX1hTVEFURV9YQ1IwX1dPUkRdID0geHN0YXRlX21hc2s7Cit9CisKIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA1ZDllNDBjLi5jYjQyMTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtMTIxLDcgKzEyMSw5IEBACiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuX21hcHBlZDsKIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CiAKKyNpZmRlZiBDT05GSUdfRE1JCiBSRVNFUlZFX0JSSyhkbWlfYWxsb2MsIDY1NTM2KTsKKyNlbmRpZgogCiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfaWQgX19yZWFkX21vc3RseTsKIApAQCAtNjY3LDYgKzY2OSwyMyBAQAogCXt9CiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgdHJpbV9iaW9zX3JhbmdlKHZvaWQpCit7CisJLyoKKwkgKiBBIHNwZWNpYWwgY2FzZSBpcyB0aGUgZmlyc3QgNEtiIG9mIG1lbW9yeTsKKwkgKiBUaGlzIGlzIGEgQklPUyBvd25lZCBhcmVhLCBub3Qga2VybmVsIHJhbSwgYnV0IGdlbmVyYWxseQorCSAqIG5vdCBsaXN0ZWQgYXMgc3VjaCBpbiB0aGUgRTgyMCB0YWJsZS4KKwkgKi8KKwllODIwX3VwZGF0ZV9yYW5nZSgwLCBQQUdFX1NJWkUsIEU4MjBfUkFNLCBFODIwX1JFU0VSVkVEKTsKKwkvKgorCSAqIHNwZWNpYWwgY2FzZTogU29tZSBCSU9TZW4gcmVwb3J0IHRoZSBQQyBCSU9TCisJICogYXJlYSAoNjQwLT4xTWIpIGFzIHJhbSBldmVuIHRob3VnaCBpdCBpcyBub3QuCisJICogdGFrZSB0aGVtIG91dC4KKwkgKi8KKwllODIwX3JlbW92ZV9yYW5nZShCSU9TX0JFR0lOLCBCSU9TX0VORCAtIEJJT1NfQkVHSU4sIEU4MjBfUkFNLCAxKTsKKwlzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksICZlODIwLm5yX21hcCk7Cit9CisKIC8qCiAgKiBEZXRlcm1pbmUgaWYgd2Ugd2VyZSBsb2FkZWQgYnkgYW4gRUZJIGxvYWRlci4gIElmIHNvLCB0aGVuIHdlIGhhdmUgYWxzbyBiZWVuCiAgKiBwYXNzZWQgdGhlIGVmaSBtZW1tYXAsIHN5c3RhYiwgZXRjLiwgc28gd2Ugc2hvdWxkIHVzZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMKQEAgLTgzMCw3ICs4NDksNyBAQAogCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkYXRhX3Jlc291cmNlKTsKIAlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmYnNzX3Jlc291cmNlKTsKIAotCisJdHJpbV9iaW9zX3JhbmdlKCk7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmIChwcHJvX3dpdGhfcmFtX2J1ZygpKSB7CiAJCWU4MjBfdXBkYXRlX3JhbmdlKDB4NzAwMDAwMDBVTEwsIDB4NDAwMDBVTEwsIEU4MjBfUkFNLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggYjRlODcwYy4uOWI0NDAxMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0zMjAsNiArMzIwLDcgQEAKIAl1bmxvY2tfdmVjdG9yX2xvY2soKTsKIAlpcGlfY2FsbF91bmxvY2soKTsKIAlwZXJfY3B1KGNwdV9zdGF0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IENQVV9PTkxJTkU7CisJeDg2X3BsYXRmb3JtLm5taV9pbml0KCk7CiAKIAkvKiBlbmFibGUgbG9jYWwgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggMzMzOTkxNy4uMTE2OGU0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTUzNCw2ICs1MzQsOSBAQAogCiAJZ2V0X2RlYnVncmVnKGRyNiwgNik7CiAKKwkvKiBGaWx0ZXIgb3V0IGFsbCB0aGUgcmVzZXJ2ZWQgYml0cyB3aGljaCBhcmUgcHJlc2V0IHRvIDEgKi8KKwlkcjYgJj0gfkRSNl9SRVNFUlZFRDsKKwogCS8qIENhdGNoIGttZW1jaGVjayBjb25kaXRpb25zIGZpcnN0IG9mIGFsbCEgKi8KIAlpZiAoKGRyNiAmIERSX1NURVApICYmIGttZW1jaGVja190cmFwKHJlZ3MpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggNTk3NjgzYS4uMjA4YTg1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNzQwLDcgKzc0MCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcmVzdW1lX3RzYyh2b2lkKQorc3RhdGljIHZvaWQgcmVzdW1lX3RzYyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCWNsb2Nrc291cmNlX3RzYy5jeWNsZV9sYXN0ID0gMDsKIH0KQEAgLTgwNiw3ICs4MDYsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVzX2xvdywgcmVzX2hpZ2g7CiAKIAlyZG1zcl9zYWZlKE1TUl9HRU9ERV9CVVNDT05UX0NPTkYwLCAmcmVzX2xvdywgJnJlc19oaWdoKTsKLQkvKiBHZW9kZV9MWCAtIHRoZSBPTFBDIENQVSBoYXMgYSBwb3NzaWJseSBhIHZlcnkgcmVsaWFibGUgVFNDICovCisJLyogR2VvZGVfTFggLSB0aGUgT0xQQyBDUFUgaGFzIGEgdmVyeSByZWxpYWJsZSBUU0MgKi8KIAlpZiAocmVzX2xvdyAmIFJUU0NfU1VTUCkKIAkJdHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlID0gMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYwppbmRleCAzNmFmYjk4Li4zMDljNzBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYwpAQCAtNTQsMTkgKzU0LDE5IEBACiAJaWYgKCFzZ2lfdXZfa29iaikKIAkJc2dpX3V2X2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJzZ2lfdXYiLCBmaXJtd2FyZV9rb2JqKTsKIAlpZiAoIXNnaV91dl9rb2JqKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImtvYmplY3RfY3JlYXRlX2FuZF9hZGQgc2dpX3V2IGZhaWxlZCBcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkIHNnaV91diBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShzZ2lfdXZfa29iaiwgJnBhcnRpdGlvbl9pZF9hdHRyLmF0dHIpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZnNfY3JlYXRlX2ZpbGUgcGFydGl0aW9uX2lkIGZhaWxlZCBcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBwYXJ0aXRpb25faWQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShzZ2lfdXZfa29iaiwgJmNvaGVyZW5jZV9pZF9hdHRyLmF0dHIpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZnNfY3JlYXRlX2ZpbGUgY29oZXJlbmNlX2lkIGZhaWxlZCBcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBjb2hlcmVuY2VfaWQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jIGIvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKaW5kZXggNjE5ZjdmOC4uNjkzOTIwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKQEAgLTI2LDcgKzI2LDggQEAKIEVYUE9SVF9TWU1CT0woX19wdXRfdXNlcl80KTsKIEVYUE9SVF9TWU1CT0woX19wdXRfdXNlcl84KTsKIAotRVhQT1JUX1NZTUJPTChjb3B5X3VzZXJfZ2VuZXJpYyk7CitFWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZyk7CitFWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkKTsKIEVYUE9SVF9TWU1CT0woX19jb3B5X3VzZXJfbm9jYWNoZSk7CiBFWFBPUlRfU1lNQk9MKF9jb3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9jb3B5X3RvX3VzZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwppbmRleCBjY2QxNzlkLi5lZTU3NDZjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKQEAgLTc2LDEwICs3NiwxMyBAQAogCS5zZXR1cF9wZXJjcHVfY2xvY2tldgkJPSBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jaywKIH07CiAKK3N0YXRpYyB2b2lkIGRlZmF1bHRfbm1pX2luaXQodm9pZCkgeyB9OworCiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB4ODZfcGxhdGZvcm0gPSB7CiAJLmNhbGlicmF0ZV90c2MJCQk9IG5hdGl2ZV9jYWxpYnJhdGVfdHNjLAogCS5nZXRfd2FsbGNsb2NrCQkJPSBtYWNoX2dldF9jbW9zX3RpbWUsCiAJLnNldF93YWxsY2xvY2sJCQk9IG1hY2hfc2V0X3J0Y19tbXNzLAogCS5pb21tdV9zaHV0ZG93bgkJCT0gaW9tbXVfc2h1dGRvd25fbm9vcCwKIAkuaXNfdW50cmFja2VkX3BhdF9yYW5nZQkJPSBpc19JU0FfcmFuZ2UsCisJLm5taV9pbml0CQkJPSBkZWZhdWx0X25taV9pbml0CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3hzYXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYwppbmRleCBjNWVlMTdlLi43ODJjM2EzNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3hzYXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3hzYXZlLmMKQEAgLTMzNyw2ICszMzcsNyBAQAogCWNwdWlkX2NvdW50KDB4ZCwgMCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CiAJeHN0YXRlX3NpemUgPSBlYng7CiAKKwl1cGRhdGVfcmVnc2V0X3hzdGF0ZV9pbmZvKHhzdGF0ZV9zaXplLCBwY250eHRfbWFzayk7CiAJcHJlcGFyZV9meF9zd19mcmFtZSgpOwogCiAJc2V0dXBfeHN0YXRlX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZSBiL2FyY2gveDg2L2xpYi9NYWtlZmlsZQppbmRleCBjZmZkNzU0Zi4uNDE5Mzg2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2xpYi9NYWtlZmlsZQpAQCAtMTQsNyArMTQsNyBAQAogCiBjbGVhbi1maWxlcyA6PSBpbmF0LXRhYmxlcy5jCiAKLW9iai0kKENPTkZJR19TTVApICs9IG1zci1zbXAubworb2JqLSQoQ09ORklHX1NNUCkgKz0gbXNyLXNtcC5vIGNhY2hlLXNtcC5vCiAKIGxpYi15IDo9IGRlbGF5Lm8KIGxpYi15ICs9IHRodW5rXyQoQklUUykubwpAQCAtMzQsOSArMzQsMTAgQEAKIGVuZGlmCiAgICAgICAgIGxpYi0kKENPTkZJR19YODZfVVNFXzNETk9XKSArPSBtbXhfMzIubwogZWxzZQotICAgICAgICBvYmoteSArPSBpb182NC5vIGlvbWFwX2NvcHlfNjQubworICAgICAgICBvYmoteSArPSBpb21hcF9jb3B5XzY0Lm8KICAgICAgICAgbGliLXkgKz0gY3N1bS1wYXJ0aWFsXzY0Lm8gY3N1bS1jb3B5XzY0Lm8gY3N1bS13cmFwcGVyc182NC5vCiAgICAgICAgIGxpYi15ICs9IHRodW5rXzY0Lm8gY2xlYXJfcGFnZV82NC5vIGNvcHlfcGFnZV82NC5vCiAgICAgICAgIGxpYi15ICs9IG1lbW1vdmVfNjQubyBtZW1zZXRfNjQubwogICAgICAgICBsaWIteSArPSBjb3B5X3VzZXJfNjQubyByd2xvY2tfNjQubyBjb3B5X3VzZXJfbm9jYWNoZV82NC5vCisJbGliLSQoQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNKSArPSByd3NlbV82NC5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NhY2hlLXNtcC5jIGIvYXJjaC94ODYvbGliL2NhY2hlLXNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzY2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvY2FjaGUtc21wLmMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCitzdGF0aWMgdm9pZCBfX3diaW52ZCh2b2lkICpkdW1teSkKK3sKKwl3YmludmQoKTsKK30KKwordm9pZCB3YmludmRfb25fY3B1KGludCBjcHUpCit7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgX193YmludmQsIE5VTEwsIDEpOworfQorRVhQT1JUX1NZTUJPTCh3YmludmRfb25fY3B1KTsKKworaW50IHdiaW52ZF9vbl9hbGxfY3B1cyh2b2lkKQoreworCXJldHVybiBvbl9lYWNoX2NwdShfX3diaW52ZCwgTlVMTCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHdiaW52ZF9vbl9hbGxfY3B1cyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMgYi9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKaW5kZXggY2Y4ODlkNC4uNzExMDBjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCisrKyBiL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUwpAQCAtOTAsMTIgKzkwLDYgQEAKIAlDRklfRU5EUFJPQwogRU5EUFJPQyhfY29weV9mcm9tX3VzZXIpCiAKLUVOVFJZKGNvcHlfdXNlcl9nZW5lcmljKQotCUNGSV9TVEFSVFBST0MKLQlBTFRFUk5BVElWRV9KVU1QIFg4Nl9GRUFUVVJFX1JFUF9HT09ELGNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkLGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZwotCUNGSV9FTkRQUk9DCi1FTkRQUk9DKGNvcHlfdXNlcl9nZW5lcmljKQotCiAJLnNlY3Rpb24gLmZpeHVwLCJheCIKIAkvKiBtdXN0IHplcm8gZGVzdCAqLwogRU5UUlkoYmFkX2Zyb21fdXNlcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9pb182NC5jIGIvYXJjaC94ODYvbGliL2lvXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMWViNTkuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbGliL2lvXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLXZvaWQgX19tZW1jcHlfdG9pbyh1bnNpZ25lZCBsb25nIGRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsZW4pCi17Ci0JX19pbmxpbmVfbWVtY3B5KCh2b2lkICopZHN0LCBzcmMsIGxlbik7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fbWVtY3B5X3RvaW8pOwotCi12b2lkIF9fbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgc3JjLCB1bnNpZ25lZCBsZW4pCi17Ci0JX19pbmxpbmVfbWVtY3B5KGRzdCwgKGNvbnN0IHZvaWQgKilzcmMsIGxlbik7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fbWVtY3B5X2Zyb21pbyk7Ci0KLXZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYSwgaW50IGIsIHNpemVfdCBjKQotewotCS8qCi0JICogVE9ETzogbWVtc2V0IGNhbiBtYW5nbGUgdGhlIElPIHBhdHRlcm5zIHF1aXRlIGEgYml0LgotCSAqIHBlcmhhcHMgaXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBhIGR1bWIgb25lOgotCSAqLwotCW1lbXNldCgodm9pZCAqKWEsIGIsIGMpOwotfQotRVhQT1JUX1NZTUJPTChtZW1zZXRfaW8pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21lbWNweV82NC5TIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCmluZGV4IGFkNTQ0MWUuLmY4MmU4ODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKQEAgLTIwLDEyICsyMCwxMSBAQAogLyoKICAqIG1lbWNweV9jKCkgLSBmYXN0IHN0cmluZyBvcHMgKFJFUCBNT1ZTUSkgYmFzZWQgdmFyaWFudC4KICAqCi0gKiBDYWxscyB0byB0aGlzIGdldCBwYXRjaGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZSB2aWEgdGhlCisgKiBUaGlzIGdldHMgcGF0Y2hlZCBvdmVyIHRoZSB1bnJvbGxlZCB2YXJpYW50IChiZWxvdykgdmlhIHRoZQogICogYWx0ZXJuYXRpdmUgaW5zdHJ1Y3Rpb25zIGZyYW1ld29yazoKICAqLwotCUFMSUdOCi1tZW1jcHlfYzoKLQlDRklfU1RBUlRQUk9DCisJLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiLCBAcHJvZ2JpdHMKKy5MbWVtY3B5X2M6CiAJbW92cSAlcmRpLCAlcmF4CiAKIAltb3ZsICVlZHgsICVlY3gKQEAgLTM1LDggKzM0LDggQEAKIAltb3ZsICVlZHgsICVlY3gKIAlyZXAgbW92c2IKIAlyZXQKLQlDRklfRU5EUFJPQwotRU5EUFJPQyhtZW1jcHlfYykKKy5MbWVtY3B5X2U6CisJLnByZXZpb3VzCiAKIEVOVFJZKF9fbWVtY3B5KQogRU5UUlkobWVtY3B5KQpAQCAtMTI4LDE2ICsxMjcsMTAgQEAKIAkgKiBJdCBpcyBhbHNvIGEgbG90IHNpbXBsZXIuIFVzZSB0aGlzIHdoZW4gcG9zc2libGU6CiAJICovCiAKLQkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIKLTE6CS5ieXRlIDB4ZWIJCQkJLyogam1wIDxkaXNwOD4gKi8KLQkuYnl0ZSAobWVtY3B5X2MgLSBtZW1jcHkpIC0gKDJmIC0gMWIpCS8qIG9mZnNldCAqLwotMjoKLQkucHJldmlvdXMKLQogCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgogCS5hbGlnbiA4CiAJLnF1YWQgbWVtY3B5Ci0JLnF1YWQgMWIKKwkucXVhZCAuTG1lbWNweV9jCiAJLmJ5dGUgWDg2X0ZFQVRVUkVfUkVQX0dPT0QKIAogCS8qCkBAIC0xNDUsNiArMTM4LDYgQEAKIAkgKiBzbyBpdCBpcyBzaWxseSB0byBvdmVyd3JpdGUgaXRzZWxmIHdpdGggbm9wcyAtIHJlYm9vdCBpcyB0aGUKIAkgKiBvbmx5IG91dGNvbWUuLi4KIAkgKi8KLQkuYnl0ZSAyYiAtIDFiCi0JLmJ5dGUgMmIgLSAxYgorCS5ieXRlIC5MbWVtY3B5X2UgLSAuTG1lbWNweV9jCisJLmJ5dGUgLkxtZW1jcHlfZSAtIC5MbWVtY3B5X2MKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUyBiL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUwppbmRleCAyYzU5NDgxLi5lODhkM2I4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKKysrIGIvYXJjaC94ODYvbGliL21lbXNldF82NC5TCkBAIC0xMiw5ICsxMiw4IEBACiAgKiAKICAqIHJheCAgIG9yaWdpbmFsIGRlc3RpbmF0aW9uCiAgKi8JCi0JQUxJR04KLW1lbXNldF9jOgotCUNGSV9TVEFSVFBST0MKKwkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIsIEBwcm9nYml0cworLkxtZW1zZXRfYzoKIAltb3ZxICVyZGksJXI5CiAJbW92bCAlZWR4LCVyOGQKIAlhbmRsICQ3LCVyOGQKQEAgLTI5LDggKzI4LDggQEAKIAlyZXAgc3Rvc2IKIAltb3ZxICVyOSwlcmF4CiAJcmV0Ci0JQ0ZJX0VORFBST0MKLUVORFBST0MobWVtc2V0X2MpCisuTG1lbXNldF9lOgorCS5wcmV2aW91cwogCiBFTlRSWShtZW1zZXQpCiBFTlRSWShfX21lbXNldCkKQEAgLTExOCwxNiArMTE3LDExIEBACiAKICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogCi0JLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCJheCIKLTE6CS5ieXRlIDB4ZWIJCQkJLyogam1wIDxkaXNwOD4gKi8KLQkuYnl0ZSAobWVtc2V0X2MgLSBtZW1zZXQpIC0gKDJmIC0gMWIpCS8qIG9mZnNldCAqLwotMjoKLQkucHJldmlvdXMKIAkuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCJhIgogCS5hbGlnbiA4CiAJLnF1YWQgbWVtc2V0Ci0JLnF1YWQgMWIKKwkucXVhZCAuTG1lbXNldF9jCiAJLmJ5dGUgWDg2X0ZFQVRVUkVfUkVQX0dPT0QKIAkuYnl0ZSAuTGZpbmFsIC0gbWVtc2V0Ci0JLmJ5dGUgMmIgLSAxYgorCS5ieXRlIC5MbWVtc2V0X2UgLSAuTG1lbXNldF9jCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvcndzZW1fNjQuUyBiL2FyY2gveDg2L2xpYi9yd3NlbV82NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YWNlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvcndzZW1fNjQuUwpAQCAtMCwwICsxLDgxIEBACisvKgorICogeDg2LTY0IHJ3c2VtIHdyYXBwZXJzCisgKgorICogVGhpcyBpbnRlcmZhY2VzIHRoZSBpbmxpbmUgYXNtIGNvZGUgdG8gdGhlIHNsb3ctcGF0aAorICogQyByb3V0aW5lcy4gV2UgbmVlZCB0byBzYXZlIHRoZSBjYWxsLWNsb2JiZXJlZCByZWdzCisgKiB0aGF0IHRoZSBhc20gZG9lcyBub3QgbWFyayBhcyBjbG9iYmVyZWQsIGFuZCBtb3ZlIHRoZQorICogYXJndW1lbnQgZnJvbSAlcmF4IHRvICVyZGkuCisgKgorICogTk9URSEgV2UgZG9uJ3QgbmVlZCB0byBzYXZlICVyYXgsIGJlY2F1c2UgdGhlIGZ1bmN0aW9ucworICogd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBzZW1hcGhvcmUgcG9pbnRlciBpbiAlcmF4ICh3aGljaAorICogaXMgYWxzbyB0aGUgaW5wdXQgYXJndW1lbnQgdG8gdGhlc2UgaGVscGVycykKKyAqCisgKiBUaGUgZm9sbG93aW5nIGNhbiBjbG9iYmVyICVyZHggYmVjYXVzZSB0aGUgYXNtIGNsb2JiZXJzIGl0OgorICogICBjYWxsX3J3c2VtX2Rvd25fd3JpdGVfZmFpbGVkCisgKiAgIGNhbGxfcndzZW1fd2FrZQorICogYnV0ICVyZGksICVyc2ksICVyY3gsICVyOC1yMTEgYWx3YXlzIG5lZWQgc2F2aW5nLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3J3bG9jay5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS1hc20uaD4KKyNpbmNsdWRlIDxhc20vZnJhbWUuaD4KKyNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CisKKyNkZWZpbmUgc2F2ZV9jb21tb25fcmVncyBcCisJcHVzaHEgJXJkaTsgXAorCXB1c2hxICVyc2k7IFwKKwlwdXNocSAlcmN4OyBcCisJcHVzaHEgJXI4OyBcCisJcHVzaHEgJXI5OyBcCisJcHVzaHEgJXIxMDsgXAorCXB1c2hxICVyMTEKKworI2RlZmluZSByZXN0b3JlX2NvbW1vbl9yZWdzIFwKKwlwb3BxICVyMTE7IFwKKwlwb3BxICVyMTA7IFwKKwlwb3BxICVyOTsgXAorCXBvcHEgJXI4OyBcCisJcG9wcSAlcmN4OyBcCisJcG9wcSAlcnNpOyBcCisJcG9wcSAlcmRpCisKKy8qIEZpeCB1cCBzcGVjaWFsIGNhbGxpbmcgY29udmVudGlvbnMgKi8KK0VOVFJZKGNhbGxfcndzZW1fZG93bl9yZWFkX2ZhaWxlZCkKKwlzYXZlX2NvbW1vbl9yZWdzCisJcHVzaHEgJXJkeAorCW1vdnEgJXJheCwlcmRpCisJY2FsbCByd3NlbV9kb3duX3JlYWRfZmFpbGVkCisJcG9wcSAlcmR4CisJcmVzdG9yZV9jb21tb25fcmVncworCXJldAorCUVORFBST0MoY2FsbF9yd3NlbV9kb3duX3JlYWRfZmFpbGVkKQorCitFTlRSWShjYWxsX3J3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKQorCXNhdmVfY29tbW9uX3JlZ3MKKwltb3ZxICVyYXgsJXJkaQorCWNhbGwgcndzZW1fZG93bl93cml0ZV9mYWlsZWQKKwlyZXN0b3JlX2NvbW1vbl9yZWdzCisJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKQorCitFTlRSWShjYWxsX3J3c2VtX3dha2UpCisJZGVjdyAlZHggICAgLyogZG8gbm90aGluZyBpZiBzdGlsbCBvdXRzdGFuZGluZyBhY3RpdmUgcmVhZGVycyAqLworCWpueiAxZgorCXNhdmVfY29tbW9uX3JlZ3MKKwltb3ZxICVyYXgsJXJkaQorCWNhbGwgcndzZW1fd2FrZQorCXJlc3RvcmVfY29tbW9uX3JlZ3MKKzE6CXJldAorCUVORFBST0MoY2FsbF9yd3NlbV93YWtlKQorCisvKiBGaXggdXAgc3BlY2lhbCBjYWxsaW5nIGNvbnZlbnRpb25zICovCitFTlRSWShjYWxsX3J3c2VtX2Rvd25ncmFkZV93YWtlKQorCXNhdmVfY29tbW9uX3JlZ3MKKwlwdXNocSAlcmR4CisJbW92cSAlcmF4LCVyZGkKKwljYWxsIHJ3c2VtX2Rvd25ncmFkZV93YWtlCisJcG9wcSAlcmR4CisJcmVzdG9yZV9jb21tb25fcmVncworCXJldAorCUVORFBST0MoY2FsbF9yd3NlbV9kb3duZ3JhZGVfd2FrZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuYwppbmRleCBkNDA2YzUyLi5lNzFjNWNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC0yNjYsMTYgKzI2Niw5IEBACiAJaWYgKCFhZnRlcl9ib290bWVtKQogCQlmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKGVuZCwgdXNlX3BzZSwgdXNlX2dicGFnZXMpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQlrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KG1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCi0JCQkJCSAgICAgbXJbaV0ucGFnZV9zaXplX21hc2spOwotCXJldCA9IGVuZDsKLSNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKIAkJcmV0ID0ga2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChtcltpXS5zdGFydCwgbXJbaV0uZW5kLAogCQkJCQkJICAgbXJbaV0ucGFnZV9zaXplX21hc2spOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJZWFybHlfaW9yZW1hcF9wYWdlX3RhYmxlX3JhbmdlX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfMzIuYyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwppbmRleCA5YTBjMjU4Li4yMjI2ZjJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCkBAIC0yNDEsNiArMjQxLDcgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKIHsKIAlpbnQgdXNlX3BzZSA9IHBhZ2Vfc2l6ZV9tYXNrID09ICgxPDxQR19MRVZFTF8yTSk7CisJdW5zaWduZWQgbG9uZyBsYXN0X21hcF9hZGRyID0gZW5kOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwogCXBnZF90ICpwZ2RfYmFzZSA9IHN3YXBwZXJfcGdfZGlyOwogCWludCBwZ2RfaWR4LCBwbWRfaWR4LCBwdGVfb2ZzOwpAQCAtMzQxLDkgKzM0MiwxMCBAQAogCQkJCQlwcm90ID0gUEFHRV9LRVJORUxfRVhFQzsKIAogCQkJCXBhZ2VzXzRrKys7Ci0JCQkJaWYgKG1hcHBpbmdfaXRlciA9PSAxKQorCQkJCWlmIChtYXBwaW5nX2l0ZXIgPT0gMSkgewogCQkJCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwZm4sIGluaXRfcHJvdCkpOwotCQkJCWVsc2UKKwkJCQkJbGFzdF9tYXBfYWRkciA9IChwZm4gPDwgUEFHRV9TSElGVCkgKyBQQUdFX1NJWkU7CisJCQkJfSBlbHNlCiAJCQkJCXNldF9wdGUocHRlLCBwZm5fcHRlKHBmbiwgcHJvdCkpOwogCQkJfQogCQl9CkBAIC0zNjgsNyArMzcwLDcgQEAKIAkJbWFwcGluZ19pdGVyID0gMjsKIAkJZ290byByZXBlYXQ7CiAJfQotCXJldHVybiAwOworCXJldHVybiBsYXN0X21hcF9hZGRyOwogfQogCiBwdGVfdCAqa21hcF9wdGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggYzI0NmQyNS4uNWViMWJhNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMjQsNDMgKzI0LDYgQEAKIAogI2luY2x1ZGUgInBoeXNhZGRyLmgiCiAKLWludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKLXsKLQlyZXNvdXJjZV9zaXplX3QgYWRkciwgZW5kOwotCWludCBpOwotCi0JLyoKLQkgKiBBIHNwZWNpYWwgY2FzZSBpcyB0aGUgZmlyc3QgNEtiIG9mIG1lbW9yeTsKLQkgKiBUaGlzIGlzIGEgQklPUyBvd25lZCBhcmVhLCBub3Qga2VybmVsIHJhbSwgYnV0IGdlbmVyYWxseQotCSAqIG5vdCBsaXN0ZWQgYXMgc3VjaCBpbiB0aGUgRTgyMCB0YWJsZS4KLQkgKi8KLQlpZiAocGFnZW5yID09IDApCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBTZWNvbmQgc3BlY2lhbCBjYXNlOiBTb21lIEJJT1NlbiByZXBvcnQgdGhlIFBDIEJJT1MKLQkgKiBhcmVhICg2NDAtPjFNYikgYXMgcmFtIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdC4KLQkgKi8KLQlpZiAocGFnZW5yID49IChCSU9TX0JFR0lOID4+IFBBR0VfU0hJRlQpICYmCi0JCSAgICBwYWdlbnIgPCAoQklPU19FTkQgPj4gUEFHRV9TSElGVCkpCi0JCXJldHVybiAwOwotCi0JZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKLQkJLyoKLQkJICogTm90IHVzYWJsZSBtZW1vcnk6Ci0JCSAqLwotCQlpZiAoZTgyMC5tYXBbaV0udHlwZSAhPSBFODIwX1JBTSkKLQkJCWNvbnRpbnVlOwotCQlhZGRyID0gKGU4MjAubWFwW2ldLmFkZHIgKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVDsKLQkJZW5kID0gKGU4MjAubWFwW2ldLmFkZHIgKyBlODIwLm1hcFtpXS5zaXplKSA+PiBQQUdFX1NISUZUOwotCi0KLQkJaWYgKChwYWdlbnIgPj0gYWRkcikgJiYgKHBhZ2VuciA8IGVuZCkpCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBGaXggdXAgdGhlIGxpbmVhciBkaXJlY3QgbWFwcGluZyBvZiB0aGUga2VybmVsIHRvIGF2b2lkIGNhY2hlIGF0dHJpYnV0ZQogICogY29uZmxpY3RzLgpAQCAtNDIyLDYgKzM4NSwxMCBAQAogCSAqIFRoZSBib290LWlvcmVtYXAgcmFuZ2Ugc3BhbnMgbXVsdGlwbGUgcG1kcywgZm9yIHdoaWNoCiAJICogd2UgYXJlIG5vdCBwcmVwYXJlZDoKIAkgKi8KKyNkZWZpbmUgX19GSVhBRERSX1RPUCAoLVBBR0VfU0laRSkKKwlCVUlMRF9CVUdfT04oKF9fZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSA+PiBQTURfU0hJRlQpCisJCSAgICAgIT0gKF9fZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkgPj4gUE1EX1NISUZUKSk7CisjdW5kZWYgX19GSVhBRERSX1RPUAogCWlmIChwbWQgIT0gZWFybHlfaW9yZW1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0VORCkpKSB7CiAJCVdBUk5fT04oMSk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBtZCAlcCAhPSAlcFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYwppbmRleCA4Y2MxODMzLi5iM2I1MzFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMKKysrIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIAlpZiAoIXNoYWRvdykKIAkJcmV0dXJuIHRydWU7CiAKLQlzdGF0dXMgPSBrbWVtY2hlY2tfc2hhZG93X3Rlc3Qoc2hhZG93LCBzaXplKTsKKwlzdGF0dXMgPSBrbWVtY2hlY2tfc2hhZG93X3Rlc3RfYWxsKHNoYWRvdywgc2l6ZSk7CiAKIAlyZXR1cm4gc3RhdHVzID09IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMKaW5kZXggM2Y2NmI4Mi4uYWVjMTI0MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jCisrKyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYwpAQCAtMTI1LDEyICsxMjUsMTIgQEAKIAogZW51bSBrbWVtY2hlY2tfc2hhZG93IGttZW1jaGVja19zaGFkb3dfdGVzdCh2b2lkICpzaGFkb3csIHVuc2lnbmVkIGludCBzaXplKQogeworI2lmZGVmIENPTkZJR19LTUVNQ0hFQ0tfUEFSVElBTF9PSwogCXVpbnQ4X3QgKng7CiAJdW5zaWduZWQgaW50IGk7CiAKIAl4ID0gc2hhZG93OwogCi0jaWZkZWYgQ09ORklHX0tNRU1DSEVDS19QQVJUSUFMX09LCiAJLyoKIAkgKiBNYWtlIHN1cmUgX3NvbWVfIGJ5dGVzIGFyZSBpbml0aWFsaXplZC4gR2NjIGZyZXF1ZW50bHkgZ2VuZXJhdGVzCiAJICogY29kZSB0byBhY2Nlc3MgbmVpZ2hib3JpbmcgYnl0ZXMuCkBAIC0xMzksMTMgKzEzOSwyNSBAQAogCQlpZiAoeFtpXSA9PSBLTUVNQ0hFQ0tfU0hBRE9XX0lOSVRJQUxJWkVEKQogCQkJcmV0dXJuIHhbaV07CiAJfQorCisJcmV0dXJuIHhbMF07CiAjZWxzZQorCXJldHVybiBrbWVtY2hlY2tfc2hhZG93X3Rlc3RfYWxsKHNoYWRvdywgc2l6ZSk7CisjZW5kaWYKK30KKworZW51bSBrbWVtY2hlY2tfc2hhZG93IGttZW1jaGVja19zaGFkb3dfdGVzdF9hbGwodm9pZCAqc2hhZG93LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1aW50OF90ICp4OworCXVuc2lnbmVkIGludCBpOworCisJeCA9IHNoYWRvdzsKKwogCS8qIEFsbCBieXRlcyBtdXN0IGJlIGluaXRpYWxpemVkLiAqLwogCWZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKIAkJaWYgKHhbaV0gIT0gS01FTUNIRUNLX1NIQURPV19JTklUSUFMSVpFRCkKIAkJCXJldHVybiB4W2ldOwogCX0KLSNlbmRpZgogCiAJcmV0dXJuIHhbMF07CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmggYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmgKaW5kZXggYWY0NmQ5YS4uZmYwYjJmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5oCisrKyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuaApAQCAtMTEsNiArMTEsOCBAQAogdm9pZCAqa21lbWNoZWNrX3NoYWRvd19sb29rdXAodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIAogZW51bSBrbWVtY2hlY2tfc2hhZG93IGttZW1jaGVja19zaGFkb3dfdGVzdCh2b2lkICpzaGFkb3csIHVuc2lnbmVkIGludCBzaXplKTsKK2VudW0ga21lbWNoZWNrX3NoYWRvdyBrbWVtY2hlY2tfc2hhZG93X3Rlc3RfYWxsKHZvaWQgKnNoYWRvdywKKwkJCQkJCXVuc2lnbmVkIGludCBzaXplKTsKIHZvaWQga21lbWNoZWNrX3NoYWRvd19zZXQodm9pZCAqc2hhZG93LCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbW1hcC5jIGIvYXJjaC94ODYvbW0vbW1hcC5jCmluZGV4IGM4MTkxZGUuLjFkYWI1MTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21tYXAuYworKysgYi9hcmNoL3g4Ni9tbS9tbWFwLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0NPTVBBVF9MQVlPVVQpCiAJCXJldHVybiAxOwogCi0JaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCisJaWYgKHJsaW1pdChSTElNSVRfU1RBQ0spID09IFJMSU1fSU5GSU5JVFkpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OwpAQCAtOTYsNyArOTYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtbWFwX2Jhc2Uodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGdhcCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyOworCXVuc2lnbmVkIGxvbmcgZ2FwID0gcmxpbWl0KFJMSU1JVF9TVEFDSyk7CiAKIAlpZiAoZ2FwIDwgTUlOX0dBUCkKIAkJZ2FwID0gTUlOX0dBUDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfNjQuYyBiL2FyY2gveDg2L21tL251bWFfNjQuYwppbmRleCA4M2JiYzcwLi4zMzA3ZWE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCkBAIC00MjcsNyArNDI3LDcgQEAKIAkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBiaWcgbm9kZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkIGFzIGEgcmVzdWx0CiAJICogb2YgY29uc29saWRhdGluZyB0aGUgcmVtYWluZGVyLgogCSAqLwotCWJpZyA9ICgoc2l6ZSAmIH5GQUtFX05PREVfTUlOX0hBU0hfTUFTSykgJiBucl9ub2RlcykgLworCWJpZyA9ICgoc2l6ZSAmIH5GQUtFX05PREVfTUlOX0hBU0hfTUFTSykgKiBucl9ub2RlcykgLwogCQlGQUtFX05PREVfTUlOX1NJWkU7CiAKIAlzaXplICY9IEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLOwpAQCAtNTAyLDc3ICs1MDIsOTkgQEAKIH0KIAogLyoKLSAqIFNwbGl0cyBudW1fbm9kZXMgbm9kZXMgdXAgZXF1YWxseSBzdGFydGluZyBhdCBub2RlX3N0YXJ0LiAgVGhlIHJldHVybiB2YWx1ZQotICogaXMgdGhlIG51bWJlciBvZiBub2RlcyBzcGxpdCB1cCBhbmQgYWRkciBpcyBhZGp1c3RlZCB0byBiZSBhdCB0aGUgZW5kIG9mIHRoZQotICogbGFzdCBub2RlIGFsbG9jYXRlZC4KKyAqIFJldHVybnMgdGhlIGVuZCBhZGRyZXNzIG9mIGEgbm9kZSBzbyB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IGBzaXplJyBhbW91bnQgb2YKKyAqIG5vbi1yZXNlcnZlZCBtZW1vcnkgb3IgYG1heF9hZGRyJyBpcyByZWFjaGVkLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBzcGxpdF9ub2Rlc19lcXVhbGx5KHU2NCAqYWRkciwgdTY0IG1heF9hZGRyLCBpbnQgbm9kZV9zdGFydCwKLQkJCQkgICAgICBpbnQgbnVtX25vZGVzKQorc3RhdGljIHU2NCBfX2luaXQgZmluZF9lbmRfb2Zfbm9kZSh1NjQgc3RhcnQsIHU2NCBtYXhfYWRkciwgdTY0IHNpemUpCiB7Ci0JdW5zaWduZWQgaW50IGJpZzsKLQl1NjQgc2l6ZTsKLQlpbnQgaTsKKwl1NjQgZW5kID0gc3RhcnQgKyBzaXplOwogCi0JaWYgKG51bV9ub2RlcyA8PSAwKQotCQlyZXR1cm4gLTE7Ci0JaWYgKG51bV9ub2RlcyA+IE1BWF9OVU1OT0RFUykKLQkJbnVtX25vZGVzID0gTUFYX05VTU5PREVTOwotCXNpemUgPSAobWF4X2FkZHIgLSAqYWRkciAtIGU4MjBfaG9sZV9zaXplKCphZGRyLCBtYXhfYWRkcikpIC8KLQkgICAgICAgbnVtX25vZGVzOwotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYmlnIG5vZGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCBhcyBhIHJlc3VsdAotCSAqIG9mIGNvbnNvbGlkYXRpbmcgdGhlIGxlZnRvdmVycy4KLQkgKi8KLQliaWcgPSAoKHNpemUgJiB+RkFLRV9OT0RFX01JTl9IQVNIX01BU0spICogbnVtX25vZGVzKSAvCi0JICAgICAgRkFLRV9OT0RFX01JTl9TSVpFOwotCi0JLyogUm91bmQgZG93biB0byBuZWFyZXN0IEZBS0VfTk9ERV9NSU5fU0laRS4gKi8KLQlzaXplICY9IEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLOwotCWlmICghc2l6ZSkgewotCQlwcmludGsoS0VSTl9FUlIgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBlYWNoIG5vZGUuICAiCi0JCSAgICAgICAiTlVNQSBlbXVsYXRpb24gZGlzYWJsZWQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWZvciAoaSA9IG5vZGVfc3RhcnQ7IGkgPCBudW1fbm9kZXMgKyBub2RlX3N0YXJ0OyBpKyspIHsKLQkJdTY0IGVuZCA9ICphZGRyICsgc2l6ZTsKLQotCQlpZiAoaSA8IGJpZykKLQkJCWVuZCArPSBGQUtFX05PREVfTUlOX1NJWkU7Ci0JCS8qCi0JCSAqIFRoZSBmaW5hbCBub2RlIGNhbiBoYXZlIHRoZSByZW1haW5pbmcgc3lzdGVtIFJBTS4gIE90aGVyCi0JCSAqIG5vZGVzIHJlY2VpdmUgcm91Z2hseSB0aGUgc2FtZSBhbW91bnQgb2YgYXZhaWxhYmxlIHBhZ2VzLgotCQkgKi8KLQkJaWYgKGkgPT0gbnVtX25vZGVzICsgbm9kZV9zdGFydCAtIDEpCisJd2hpbGUgKGVuZCAtIHN0YXJ0IC0gZTgyMF9ob2xlX3NpemUoc3RhcnQsIGVuZCkgPCBzaXplKSB7CisJCWVuZCArPSBGQUtFX05PREVfTUlOX1NJWkU7CisJCWlmIChlbmQgPiBtYXhfYWRkcikgewogCQkJZW5kID0gbWF4X2FkZHI7Ci0JCWVsc2UKLQkJCXdoaWxlIChlbmQgLSAqYWRkciAtIGU4MjBfaG9sZV9zaXplKCphZGRyLCBlbmQpIDwKLQkJCSAgICAgICBzaXplKSB7Ci0JCQkJZW5kICs9IEZBS0VfTk9ERV9NSU5fU0laRTsKLQkJCQlpZiAoZW5kID4gbWF4X2FkZHIpIHsKLQkJCQkJZW5kID0gbWF4X2FkZHI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJaWYgKHNldHVwX25vZGVfcmFuZ2UoaSwgYWRkciwgZW5kIC0gKmFkZHIsIG1heF9hZGRyKSA8IDApCiAJCQlicmVhazsKKwkJfQogCX0KLQlyZXR1cm4gaSAtIG5vZGVfc3RhcnQgKyAxOworCXJldHVybiBlbmQ7CiB9CiAKIC8qCi0gKiBTcGxpdHMgdGhlIHJlbWFpbmluZyBzeXN0ZW0gUkFNIGludG8gY2h1bmtzIG9mIHNpemUuICBUaGUgcmVtYWluaW5nIG1lbW9yeSBpcwotICogYWx3YXlzIGFzc2lnbmVkIHRvIGEgZmluYWwgbm9kZSBhbmQgY2FuIGJlIGFzeW1tZXRyaWMuICBSZXR1cm5zIHRoZSBudW1iZXIgb2YKLSAqIG5vZGVzIHNwbGl0LgorICogU2V0cyB1cCBmYWtlIG5vZGVzIG9mIGBzaXplJyBpbnRlcmxlYXZlZCBvdmVyIHBoeXNpY2FsIG5vZGVzIHJhbmdpbmcgZnJvbQorICogYGFkZHInIHRvIGBtYXhfYWRkcicuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgYWxsb2NhdGVkLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBzcGxpdF9ub2Rlc19ieV9zaXplKHU2NCAqYWRkciwgdTY0IG1heF9hZGRyLCBpbnQgbm9kZV9zdGFydCwKLQkJCQkgICAgICB1NjQgc2l6ZSkKK3N0YXRpYyBpbnQgX19pbml0IHNwbGl0X25vZGVzX3NpemVfaW50ZXJsZWF2ZSh1NjQgYWRkciwgdTY0IG1heF9hZGRyLCB1NjQgc2l6ZSkKIHsKLQlpbnQgaSA9IG5vZGVfc3RhcnQ7Ci0Jc2l6ZSA9IChzaXplIDw8IDIwKSAmIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLOwotCXdoaWxlICghc2V0dXBfbm9kZV9yYW5nZShpKyssIGFkZHIsIHNpemUsIG1heF9hZGRyKSkKLQkJOwotCXJldHVybiBpIC0gbm9kZV9zdGFydDsKKwlub2RlbWFza190IHBoeXNub2RlX21hc2sgPSBOT0RFX01BU0tfTk9ORTsKKwl1NjQgbWluX3NpemU7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlpZiAoIXNpemUpCisJCXJldHVybiAtMTsKKwkvKgorCSAqIFRoZSBsaW1pdCBvbiBlbXVsYXRlZCBub2RlcyBpcyBNQVhfTlVNTk9ERVMsIHNvIHRoZSBzaXplIHBlciBub2RlIGlzCisJICogaW5jcmVhc2VkIGFjY29yZGluZ2x5IGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBpcyB0b28gc21hbGwuICBUaGlzCisJICogY3JlYXRlcyBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9mIG5vZGUgc2l6ZXMgYWNyb3NzIHRoZSBlbnRpcmUKKwkgKiBtYWNoaW5lIChidXQgbm90IG5lY2Vzc2FyaWx5IG92ZXIgcGh5c2ljYWwgbm9kZXMpLgorCSAqLworCW1pbl9zaXplID0gKG1heF9hZGRyIC0gYWRkciAtIGU4MjBfaG9sZV9zaXplKGFkZHIsIG1heF9hZGRyKSkgLworCQkJCQkJTUFYX05VTU5PREVTOworCW1pbl9zaXplID0gbWF4KG1pbl9zaXplLCBGQUtFX05PREVfTUlOX1NJWkUpOworCWlmICgobWluX3NpemUgJiBGQUtFX05PREVfTUlOX0hBU0hfTUFTSykgPCBtaW5fc2l6ZSkKKwkJbWluX3NpemUgPSAobWluX3NpemUgKyBGQUtFX05PREVfTUlOX1NJWkUpICYKKwkJCQkJCUZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLOworCWlmIChzaXplIDwgbWluX3NpemUpIHsKKwkJcHJfZXJyKCJGYWtlIG5vZGUgc2l6ZSAlTHVNQiB0b28gc21hbGwsIGluY3JlYXNpbmcgdG8gJUx1TUJcbiIsCisJCQlzaXplID4+IDIwLCBtaW5fc2l6ZSA+PiAyMCk7CisJCXNpemUgPSBtaW5fc2l6ZTsKKwl9CisJc2l6ZSAmPSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykKKwkJaWYgKHBoeXNub2Rlc1tpXS5zdGFydCAhPSBwaHlzbm9kZXNbaV0uZW5kKQorCQkJbm9kZV9zZXQoaSwgcGh5c25vZGVfbWFzayk7CisJLyoKKwkgKiBGaWxsIHBoeXNpY2FsIG5vZGVzIHdpdGggZmFrZSBub2RlcyBvZiBzaXplIHVudGlsIHRoZXJlIGlzIG5vIG1lbW9yeQorCSAqIGxlZnQgb24gYW55IG9mIHRoZW0uCisJICovCisJd2hpbGUgKG5vZGVzX3dlaWdodChwaHlzbm9kZV9tYXNrKSkgeworCQlmb3JfZWFjaF9ub2RlX21hc2soaSwgcGh5c25vZGVfbWFzaykgeworCQkJdTY0IGRtYTMyX2VuZCA9IE1BWF9ETUEzMl9QRk4gPDwgUEFHRV9TSElGVDsKKwkJCXU2NCBlbmQ7CisKKwkJCWVuZCA9IGZpbmRfZW5kX29mX25vZGUocGh5c25vZGVzW2ldLnN0YXJ0LAorCQkJCQkJcGh5c25vZGVzW2ldLmVuZCwgc2l6ZSk7CisJCQkvKgorCQkJICogSWYgdGhlcmUgd29uJ3QgYmUgYXQgbGVhc3QgRkFLRV9OT0RFX01JTl9TSVpFIG9mCisJCQkgKiBub24tcmVzZXJ2ZWQgbWVtb3J5IGluIFpPTkVfRE1BMzIgZm9yIHRoZSBuZXh0IG5vZGUsCisJCQkgKiB0aGlzIG9uZSBtdXN0IGV4dGVuZCB0byB0aGUgYm91bmRhcnkuCisJCQkgKi8KKwkJCWlmIChlbmQgPCBkbWEzMl9lbmQgJiYgZG1hMzJfZW5kIC0gZW5kIC0KKwkJCSAgICBlODIwX2hvbGVfc2l6ZShlbmQsIGRtYTMyX2VuZCkgPCBGQUtFX05PREVfTUlOX1NJWkUpCisJCQkJZW5kID0gZG1hMzJfZW5kOworCisJCQkvKgorCQkJICogSWYgdGhlcmUgd29uJ3QgYmUgZW5vdWdoIG5vbi1yZXNlcnZlZCBtZW1vcnkgZm9yIHRoZQorCQkJICogbmV4dCBub2RlLCB0aGlzIG9uZSBtdXN0IGV4dGVuZCB0byB0aGUgZW5kIG9mIHRoZQorCQkJICogcGh5c2ljYWwgbm9kZS4KKwkJCSAqLworCQkJaWYgKHBoeXNub2Rlc1tpXS5lbmQgLSBlbmQgLQorCQkJICAgIGU4MjBfaG9sZV9zaXplKGVuZCwgcGh5c25vZGVzW2ldLmVuZCkgPCBzaXplKQorCQkJCWVuZCA9IHBoeXNub2Rlc1tpXS5lbmQ7CisKKwkJCS8qCisJCQkgKiBTZXR1cCB0aGUgZmFrZSBub2RlIHRoYXQgd2lsbCBiZSBhbGxvY2F0ZWQgYXMgYm9vdG1lbQorCQkJICogbGF0ZXIuICBJZiBzZXR1cF9ub2RlX3JhbmdlKCkgcmV0dXJucyBub24temVybywgdGhlcmUKKwkJCSAqIGlzIG5vIG1vcmUgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGlzIHBoeXNpY2FsIG5vZGUuCisJCQkgKi8KKwkJCWlmIChzZXR1cF9ub2RlX3JhbmdlKHJldCsrLCAmcGh5c25vZGVzW2ldLnN0YXJ0LAorCQkJCQkJZW5kIC0gcGh5c25vZGVzW2ldLnN0YXJ0LAorCQkJCQkJcGh5c25vZGVzW2ldLmVuZCkgPCAwKQorCQkJCW5vZGVfY2xlYXIoaSwgcGh5c25vZGVfbWFzayk7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTU4Miw4NyArNjA0LDMyIEBACiBzdGF0aWMgaW50IF9faW5pdCBudW1hX2VtdWxhdGlvbih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCXVuc2lnbmVkIGxvbmcgbGFzdF9wZm4sIGludCBhY3BpLCBpbnQgazgpCiB7Ci0JdTY0IHNpemUsIGFkZHIgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKKwl1NjQgYWRkciA9IHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOwogCXU2NCBtYXhfYWRkciA9IGxhc3RfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JaW50IG51bV9ub2RlcyA9IDAsIG51bSA9IDAsIGNvZWZmX2ZsYWcsIGNvZWZmID0gLTEsIGk7CiAJaW50IG51bV9waHlzX25vZGVzOworCWludCBudW1fbm9kZXM7CisJaW50IGk7CiAKIAludW1fcGh5c19ub2RlcyA9IHNldHVwX3BoeXNub2RlcyhhZGRyLCBtYXhfYWRkciwgYWNwaSwgazgpOwogCS8qCi0JICogSWYgdGhlIG51bWE9ZmFrZSBjb21tYW5kLWxpbmUgaXMganVzdCBhIHNpbmdsZSBudW1iZXIgTiwgc3BsaXQgdGhlCi0JICogc3lzdGVtIFJBTSBpbnRvIE4gZmFrZSBub2Rlcy4KKwkgKiBJZiB0aGUgbnVtYT1mYWtlIGNvbW1hbmQtbGluZSBjb250YWlucyBhICdNJyBvciAnRycsIGl0IHJlcHJlc2VudHMKKwkgKiB0aGUgZml4ZWQgbm9kZSBzaXplLiAgT3RoZXJ3aXNlLCBpZiBpdCBpcyBqdXN0IGEgc2luZ2xlIG51bWJlciBOLAorCSAqIHNwbGl0IHRoZSBzeXN0ZW0gUkFNIGludG8gTiBmYWtlIG5vZGVzLgogCSAqLwotCWlmICghc3RyY2hyKGNtZGxpbmUsICcqJykgJiYgIXN0cmNocihjbWRsaW5lLCAnLCcpKSB7Ci0JCWxvbmcgbiA9IHNpbXBsZV9zdHJ0b2woY21kbGluZSwgTlVMTCwgMCk7CisJaWYgKHN0cmNocihjbWRsaW5lLCAnTScpIHx8IHN0cmNocihjbWRsaW5lLCAnRycpKSB7CisJCXU2NCBzaXplOwogCi0JCW51bV9ub2RlcyA9IHNwbGl0X25vZGVzX2ludGVybGVhdmUoYWRkciwgbWF4X2FkZHIsCi0JCQkJCQkJbnVtX3BoeXNfbm9kZXMsIG4pOwotCQlpZiAobnVtX25vZGVzIDwgMCkKLQkJCXJldHVybiBudW1fbm9kZXM7Ci0JCWdvdG8gb3V0OworCQlzaXplID0gbWVtcGFyc2UoY21kbGluZSwgJmNtZGxpbmUpOworCQludW1fbm9kZXMgPSBzcGxpdF9ub2Rlc19zaXplX2ludGVybGVhdmUoYWRkciwgbWF4X2FkZHIsIHNpemUpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgbjsKKworCQluID0gc2ltcGxlX3N0cnRvdWwoY21kbGluZSwgTlVMTCwgMCk7CisJCW51bV9ub2RlcyA9IHNwbGl0X25vZGVzX2ludGVybGVhdmUoYWRkciwgbWF4X2FkZHIsIG51bV9waHlzX25vZGVzLCBuKTsKIAl9CiAKLQkvKiBQYXJzZSB0aGUgY29tbWFuZCBsaW5lLiAqLwotCWZvciAoY29lZmZfZmxhZyA9IDA7IDsgY21kbGluZSsrKSB7Ci0JCWlmICgqY21kbGluZSAmJiBpc2RpZ2l0KCpjbWRsaW5lKSkgewotCQkJbnVtID0gbnVtICogMTAgKyAqY21kbGluZSAtICcwJzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgqY21kbGluZSA9PSAnKicpIHsKLQkJCWlmIChudW0gPiAwKQotCQkJCWNvZWZmID0gbnVtOwotCQkJY29lZmZfZmxhZyA9IDE7Ci0JCX0KLQkJaWYgKCEqY21kbGluZSB8fCAqY21kbGluZSA9PSAnLCcpIHsKLQkJCWlmICghY29lZmZfZmxhZykKLQkJCQljb2VmZiA9IDE7Ci0JCQkvKgotCQkJICogUm91bmQgZG93biB0byB0aGUgbmVhcmVzdCBGQUtFX05PREVfTUlOX1NJWkUuCi0JCQkgKiBDb21tYW5kLWxpbmUgY29lZmZpY2llbnRzIGFyZSBpbiBtZWdhYnl0ZXMuCi0JCQkgKi8KLQkJCXNpemUgPSAoKHU2NCludW0gPDwgMjApICYgRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7Ci0JCQlpZiAoc2l6ZSkKLQkJCQlmb3IgKGkgPSAwOyBpIDwgY29lZmY7IGkrKywgbnVtX25vZGVzKyspCi0JCQkJCWlmIChzZXR1cF9ub2RlX3JhbmdlKG51bV9ub2RlcywgJmFkZHIsCi0JCQkJCQlzaXplLCBtYXhfYWRkcikgPCAwKQotCQkJCQkJZ290byBkb25lOwotCQkJaWYgKCEqY21kbGluZSkKLQkJCQlicmVhazsKLQkJCWNvZWZmX2ZsYWcgPSAwOwotCQkJY29lZmYgPSAtMTsKLQkJfQotCQludW0gPSAwOwotCX0KLWRvbmU6Ci0JaWYgKCFudW1fbm9kZXMpCi0JCXJldHVybiAtMTsKLQkvKiBGaWxsIHJlbWFpbmRlciBvZiBzeXN0ZW0gUkFNLCBpZiBhcHByb3ByaWF0ZS4gKi8KLQlpZiAoYWRkciA8IG1heF9hZGRyKSB7Ci0JCWlmIChjb2VmZl9mbGFnICYmIGNvZWZmIDwgMCkgewotCQkJLyogU3BsaXQgcmVtYWluaW5nIG5vZGVzIGludG8gbnVtLXNpemVkIGNodW5rcyAqLwotCQkJbnVtX25vZGVzICs9IHNwbGl0X25vZGVzX2J5X3NpemUoJmFkZHIsIG1heF9hZGRyLAotCQkJCQkJCSBudW1fbm9kZXMsIG51bSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlzd2l0Y2ggKCooY21kbGluZSAtIDEpKSB7Ci0JCWNhc2UgJyonOgotCQkJLyogU3BsaXQgcmVtYWluaW5nIG5vZGVzIGludG8gY29lZmYgY2h1bmtzICovCi0JCQlpZiAoY29lZmYgPD0gMCkKLQkJCQlicmVhazsKLQkJCW51bV9ub2RlcyArPSBzcGxpdF9ub2Rlc19lcXVhbGx5KCZhZGRyLCBtYXhfYWRkciwKLQkJCQkJCQkgbnVtX25vZGVzLCBjb2VmZik7Ci0JCQlicmVhazsKLQkJY2FzZSAnLCc6Ci0JCQkvKiBEbyBub3QgYWxsb2NhdGUgcmVtYWluaW5nIHN5c3RlbSBSQU0gKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogR2l2ZSBvbmUgZmluYWwgbm9kZSAqLwotCQkJc2V0dXBfbm9kZV9yYW5nZShudW1fbm9kZXMsICZhZGRyLCBtYXhfYWRkciAtIGFkZHIsCi0JCQkJCSBtYXhfYWRkcik7Ci0JCQludW1fbm9kZXMrKzsKLQkJfQotCX0KLW91dDoKKwlpZiAobnVtX25vZGVzIDwgMCkKKwkJcmV0dXJuIG51bV9ub2RlczsKIAltZW1ub2RlX3NoaWZ0ID0gY29tcHV0ZV9oYXNoX3NoaWZ0KG5vZGVzLCBudW1fbm9kZXMsIE5VTEwpOwogCWlmIChtZW1ub2RlX3NoaWZ0IDwgMCkgewogCQltZW1ub2RlX3NoaWZ0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BndGFibGUuYyBiL2FyY2gveDg2L21tL3BndGFibGUuYwppbmRleCBlZDM0ZjVlLi5jOWJhOWRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jCkBAIC02LDYgKzYsMTQgQEAKIAogI2RlZmluZSBQR0FMTE9DX0dGUCBHRlBfS0VSTkVMIHwgX19HRlBfTk9UUkFDSyB8IF9fR0ZQX1JFUEVBVCB8IF9fR0ZQX1pFUk8KIAorI2lmZGVmIENPTkZJR19ISUdIUFRFCisjZGVmaW5lIFBHQUxMT0NfVVNFUl9HRlAgX19HRlBfSElHSE1FTQorI2Vsc2UKKyNkZWZpbmUgUEdBTExPQ19VU0VSX0dGUCAwCisjZW5kaWYKKworZ2ZwX3QgX191c2VycHRlX2FsbG9jX2dmcCA9IFBHQUxMT0NfR0ZQIHwgUEdBTExPQ19VU0VSX0dGUDsKKwogcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJcmV0dXJuIChwdGVfdCAqKV9fZ2V0X2ZyZWVfcGFnZShQR0FMTE9DX0dGUCk7CkBAIC0xNSwxNiArMjMsMjkgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcHRlOwogCi0jaWZkZWYgQ09ORklHX0hJR0hQVEUKLQlwdGUgPSBhbGxvY19wYWdlcyhQR0FMTE9DX0dGUCB8IF9fR0ZQX0hJR0hNRU0sIDApOwotI2Vsc2UKLQlwdGUgPSBhbGxvY19wYWdlcyhQR0FMTE9DX0dGUCwgMCk7Ci0jZW5kaWYKKwlwdGUgPSBhbGxvY19wYWdlcyhfX3VzZXJwdGVfYWxsb2NfZ2ZwLCAwKTsKIAlpZiAocHRlKQogCQlwZ3RhYmxlX3BhZ2VfY3RvcihwdGUpOwogCXJldHVybiBwdGU7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3VzZXJwdGUoY2hhciAqYXJnKQoreworCWlmICghYXJnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogInVzZXJwdGU9bm9oaWdoIiBkaXNhYmxlcyBhbGxvY2F0aW9uIG9mIHVzZXIgcGFnZXRhYmxlcyBpbgorCSAqIGhpZ2ggbWVtb3J5LgorCSAqLworCWlmIChzdHJjbXAoYXJnLCAibm9oaWdoIikgPT0gMCkKKwkJX191c2VycHRlX2FsbG9jX2dmcCAmPSB+X19HRlBfSElHSE1FTTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oInVzZXJwdGUiLCBzZXR1cF91c2VycHRlKTsKKwogdm9pZCBfX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnB0ZSkKIHsKIAlwZ3RhYmxlX3BhZ2VfZHRvcihwdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vdGxiLmMgYi9hcmNoL3g4Ni9tbS90bGIuYwppbmRleCA2NWI1OGU0Li40MjZmM2ExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS90bGIuYworKysgYi9hcmNoL3g4Ni9tbS90bGIuYwpAQCAtNDEsNyArNDEsNyBAQAogCXN0cnVjdCB7CiAJCXN0cnVjdCBtbV9zdHJ1Y3QgKmZsdXNoX21tOwogCQl1bnNpZ25lZCBsb25nIGZsdXNoX3ZhOwotCQlzcGlubG9ja190IHRsYnN0YXRlX2xvY2s7CisJCXJhd19zcGlubG9ja190IHRsYnN0YXRlX2xvY2s7CiAJCURFQ0xBUkVfQklUTUFQKGZsdXNoX2NwdW1hc2ssIE5SX0NQVVMpOwogCX07CiAJY2hhciBwYWRbSU5URVJOT0RFX0NBQ0hFX0JZVEVTXTsKQEAgLTE4MSw3ICsxODEsNyBAQAogCSAqIG51bV9vbmxpbmVfY3B1cygpIDw9IE5VTV9JTlZBTElEQVRFX1RMQl9WRUNUT1JTLCBidXQgaXQgaXMKIAkgKiBwcm9iYWJseSBub3Qgd29ydGggY2hlY2tpbmcgdGhpcyBmb3IgYSBjYWNoZS1ob3QgbG9jay4KIAkgKi8KLQlzcGluX2xvY2soJmYtPnRsYnN0YXRlX2xvY2spOworCXJhd19zcGluX2xvY2soJmYtPnRsYnN0YXRlX2xvY2spOwogCiAJZi0+Zmx1c2hfbW0gPSBtbTsKIAlmLT5mbHVzaF92YSA9IHZhOwpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIAlmLT5mbHVzaF9tbSA9IE5VTEw7CiAJZi0+Zmx1c2hfdmEgPSAwOwotCXNwaW5fdW5sb2NrKCZmLT50bGJzdGF0ZV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmYtPnRsYnN0YXRlX2xvY2spOwogfQogCiB2b2lkIG5hdGl2ZV9mbHVzaF90bGJfb3RoZXJzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLApAQCAtMjIzLDcgKzIyMyw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbHVzaF9zdGF0ZSk7IGkrKykKLQkJc3Bpbl9sb2NrX2luaXQoJmZsdXNoX3N0YXRlW2ldLnRsYnN0YXRlX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrX2luaXQoJmZsdXNoX3N0YXRlW2ldLnRsYnN0YXRlX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKaW5kZXggMzM0N2Y2OS4uMmM1MDVlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5tdWx0aXBsZXggPQotCQkJa21hbGxvYyhtdWx0aXBsZXhfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlremFsbG9jKG11bHRpcGxleF9zaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwZXJfY3B1KGNwdV9tc3JzLCBpKS5tdWx0aXBsZXgpCiAJCQlyZXR1cm4gMDsKIAl9CkBAIC0xNzksNyArMTc5LDYgQEAKIAkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpIHsKIAkJCW11bHRpcGxleFtpXS5zYXZlZCA9IC0odTY0KWNvdW50ZXJfY29uZmlnW2ldLmNvdW50OwogCQl9IGVsc2UgewotCQkJbXVsdGlwbGV4W2ldLmFkZHIgID0gMDsKIAkJCW11bHRpcGxleFtpXS5zYXZlZCA9IDA7CiAJCX0KIAl9CkBAIC0xODksMjUgKzE4OCwyNyBAQAogCiBzdGF0aWMgdm9pZCBubWlfY3B1X3NhdmVfbXB4X3JlZ2lzdGVycyhzdHJ1Y3Qgb3BfbXNycyAqbXNycykKIHsKKwlzdHJ1Y3Qgb3BfbXNyICpjb3VudGVycyA9IG1zcnMtPmNvdW50ZXJzOwogCXN0cnVjdCBvcF9tc3IgKm11bHRpcGxleCA9IG1zcnMtPm11bHRpcGxleDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBtb2RlbC0+bnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJaW50IHZpcnQgPSBvcF94ODZfcGh5c190b192aXJ0KGkpOwotCQlpZiAobXVsdGlwbGV4W3ZpcnRdLmFkZHIpCi0JCQlyZG1zcmwobXVsdGlwbGV4W3ZpcnRdLmFkZHIsIG11bHRpcGxleFt2aXJ0XS5zYXZlZCk7CisJCWlmIChjb3VudGVyc1tpXS5hZGRyKQorCQkJcmRtc3JsKGNvdW50ZXJzW2ldLmFkZHIsIG11bHRpcGxleFt2aXJ0XS5zYXZlZCk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBubWlfY3B1X3Jlc3RvcmVfbXB4X3JlZ2lzdGVycyhzdHJ1Y3Qgb3BfbXNycyAqbXNycykKIHsKKwlzdHJ1Y3Qgb3BfbXNyICpjb3VudGVycyA9IG1zcnMtPmNvdW50ZXJzOwogCXN0cnVjdCBvcF9tc3IgKm11bHRpcGxleCA9IG1zcnMtPm11bHRpcGxleDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBtb2RlbC0+bnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJaW50IHZpcnQgPSBvcF94ODZfcGh5c190b192aXJ0KGkpOwotCQlpZiAobXVsdGlwbGV4W3ZpcnRdLmFkZHIpCi0JCQl3cm1zcmwobXVsdGlwbGV4W3ZpcnRdLmFkZHIsIG11bHRpcGxleFt2aXJ0XS5zYXZlZCk7CisJCWlmIChjb3VudGVyc1tpXS5hZGRyKQorCQkJd3Jtc3JsKGNvdW50ZXJzW2ldLmFkZHIsIG11bHRpcGxleFt2aXJ0XS5zYXZlZCk7CiAJfQogfQogCkBAIC0zMDMsMTEgKzMwNCwxMSBAQAogCiAJaW50IGk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMgPSBrbWFsbG9jKGNvdW50ZXJzX3NpemUsCisJCXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvdW50ZXJzID0ga3phbGxvYyhjb3VudGVyc19zaXplLAogCQkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvdW50ZXJzKQogCQkJcmV0dXJuIDA7Ci0JCXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzID0ga21hbGxvYyhjb250cm9sc19zaXplLAorCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb250cm9scyA9IGt6YWxsb2MoY29udHJvbHNfc2l6ZSwKIAkJCQkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb250cm9scykKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfYW1kLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYwppbmRleCAzOTY4NmMyLi42YTU4MjU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYwpAQCAtMjIsNiArMjIsOSBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAKICNpbmNsdWRlICJvcF94ODZfbW9kZWwuaCIKICNpbmNsdWRlICJvcF9jb3VudGVyLmgiCkBAIC00MywxNSArNDYsMTMgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFsdWVbTlVNX1ZJUlRfQ09VTlRFUlNdOwogCi0jaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUwotCiAvKiBJYnNGZXRjaEN0bCBiaXRzL21hc2tzICovCiAjZGVmaW5lIElCU19GRVRDSF9SQU5EX0VOCQkoMVVMTDw8NTcpCiAjZGVmaW5lIElCU19GRVRDSF9WQUwJCQkoMVVMTDw8NDkpCiAjZGVmaW5lIElCU19GRVRDSF9FTkFCTEUJCSgxVUxMPDw0OCkKICNkZWZpbmUgSUJTX0ZFVENIX0NOVF9NQVNLCQkweEZGRkYwMDAwVUxMCiAKLS8qSWJzT3BDdGwgYml0cyAqLworLyogSWJzT3BDdGwgYml0cyAqLwogI2RlZmluZSBJQlNfT1BfQ05UX0NUTAkJCSgxVUxMPDwxOSkKICNkZWZpbmUgSUJTX09QX1ZBTAkJCSgxVUxMPDwxOCkKICNkZWZpbmUgSUJTX09QX0VOQUJMRQkJCSgxVUxMPDwxNykKQEAgLTU5LDcgKzYwLDcgQEAKICNkZWZpbmUgSUJTX0ZFVENIX1NJWkUJCQk2CiAjZGVmaW5lIElCU19PUF9TSVpFCQkJMTIKIAotc3RhdGljIGludCBoYXNfaWJzOwkvKiBBTUQgRmFtaWx5MTBoIGFuZCBsYXRlciAqLworc3RhdGljIHUzMiBpYnNfY2FwczsKIAogc3RydWN0IG9wX2lic19jb25maWcgewogCXVuc2lnbmVkIGxvbmcgb3BfZW5hYmxlZDsKQEAgLTcxLDI0ICs3Miw1MiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvcF9pYnNfY29uZmlnIGlic19jb25maWc7CitzdGF0aWMgdTY0IGlic19vcF9jdGw7CiAKLSNlbmRpZgorLyoKKyAqIElCUyBjcHVpZCBmZWF0dXJlIGRldGVjdGlvbgorICovCisKKyNkZWZpbmUgSUJTX0NQVUlEX0ZFQVRVUkVTICAgICAgMHg4MDAwMDAxYgorCisvKgorICogU2FtZSBiaXQgbWFzayBhcyBmb3IgSUJTIGNwdWlkIGZlYXR1cmUgZmxhZ3MgKEZuODAwMF8wMDFCX0VBWCksIGJ1dAorICogYml0IDAgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgZXhpc3RlbmNlIG9mIElCUy4KKyAqLworI2RlZmluZSBJQlNfQ0FQU19BVkFJTAkJCSgxTEw8PDApCisjZGVmaW5lIElCU19DQVBTX1JEV1JPUENOVAkJKDFMTDw8MykKKyNkZWZpbmUgSUJTX0NBUFNfT1BDTlQJCQkoMUxMPDw0KQorCisvKgorICogSUJTIHJhbmRvbWl6YXRpb24gbWFjcm9zCisgKi8KKyNkZWZpbmUgSUJTX1JBTkRPTV9CSVRTCQkJMTIKKyNkZWZpbmUgSUJTX1JBTkRPTV9NQVNLCQkJKCgxVUxMIDw8IElCU19SQU5ET01fQklUUykgLSAxKQorI2RlZmluZSBJQlNfUkFORE9NX01BWENOVF9PRkZTRVQJKDFVTEwgPDwgKElCU19SQU5ET01fQklUUyAtIDUpKQorCitzdGF0aWMgdTMyIGdldF9pYnNfY2Fwcyh2b2lkKQoreworCXUzMiBpYnNfY2FwczsKKwl1bnNpZ25lZCBpbnQgbWF4X2xldmVsOworCisJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJTKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBJQlMgY3B1aWQgZmVhdHVyZSBmbGFncyAqLworCW1heF9sZXZlbCA9IGNwdWlkX2VheCgweDgwMDAwMDAwKTsKKwlpZiAobWF4X2xldmVsIDwgSUJTX0NQVUlEX0ZFQVRVUkVTKQorCQlyZXR1cm4gSUJTX0NBUFNfQVZBSUw7CisKKwlpYnNfY2FwcyA9IGNwdWlkX2VheChJQlNfQ1BVSURfRkVBVFVSRVMpOworCWlmICghKGlic19jYXBzICYgSUJTX0NBUFNfQVZBSUwpKQorCQkvKiBjcHVpZCBmbGFncyBub3QgdmFsaWQgKi8KKwkJcmV0dXJuIElCU19DQVBTX0FWQUlMOworCisJcmV0dXJuIGlic19jYXBzOworfQogCiAjaWZkZWYgQ09ORklHX09QUk9GSUxFX0VWRU5UX01VTFRJUExFWAogCi1zdGF0aWMgdm9pZCBvcF9tdXhfZmlsbF9pbl9hZGRyZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9WSVJUX0NPVU5URVJTOyBpKyspIHsKLQkJaW50IGh3X2NvdW50ZXIgPSBvcF94ODZfdmlydF90b19waHlzKGkpOwotCQlpZiAocmVzZXJ2ZV9wZXJmY3RyX25taShNU1JfSzdfUEVSRkNUUjAgKyBpKSkKLQkJCW1zcnMtPm11bHRpcGxleFtpXS5hZGRyID0gTVNSX0s3X1BFUkZDVFIwICsgaHdfY291bnRlcjsKLQkJZWxzZQotCQkJbXNycy0+bXVsdGlwbGV4W2ldLmFkZHIgPSAwOwotCX0KLX0KLQogc3RhdGljIHZvaWQgb3BfbXV4X3N3aXRjaF9jdHJsKHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCAqbW9kZWwsCiAJCQkgICAgICAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQogewpAQCAtOTgsNyArMTI3LDcgQEAKIAkvKiBlbmFibGUgYWN0aXZlIGNvdW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CiAJCWludCB2aXJ0ID0gb3BfeDg2X3BoeXNfdG9fdmlydChpKTsKLQkJaWYgKCFjb3VudGVyX2NvbmZpZ1t2aXJ0XS5lbmFibGVkKQorCQlpZiAoIXJlc2V0X3ZhbHVlW3ZpcnRdKQogCQkJY29udGludWU7CiAJCXJkbXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOwogCQl2YWwgJj0gbW9kZWwtPnJlc2VydmVkOwpAQCAtMTA3LDEwICsxMzYsNiBAQAogCX0KIH0KIAotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIG9wX211eF9maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpIHsgfQotCiAjZW5kaWYKIAogLyogZnVuY3Rpb25zIGZvciBvcF9hbWRfc3BlYyAqLwpAQCAtMTIyLDE4ICsxNDcsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfcGVyZmN0cl9ubWkoTVNSX0s3X1BFUkZDVFIwICsgaSkpCiAJCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gTVNSX0s3X1BFUkZDVFIwICsgaTsKLQkJZWxzZQotCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IDA7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT05UUk9MUzsgaSsrKSB7CiAJCWlmIChyZXNlcnZlX2V2bnRzZWxfbm1pKE1TUl9LN19FVk5UU0VMMCArIGkpKQogCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IE1TUl9LN19FVk5UU0VMMCArIGk7Ci0JCWVsc2UKLQkJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSAwOwogCX0KLQotCW9wX211eF9maWxsX2luX2FkZHJlc3Nlcyhtc3JzKTsKIH0KIAogc3RhdGljIHZvaWQgb3BfYW1kX3NldHVwX2N0cnMoc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICptb2RlbCwKQEAgLTE0NCw3ICsxNjMsOCBAQAogCiAJLyogc2V0dXAgcmVzZXRfdmFsdWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1ZJUlRfQ09VTlRFUlM7ICsraSkgewotCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCkKKwkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQKKwkJICAgICYmIG1zcnMtPmNvdW50ZXJzW29wX3g4Nl92aXJ0X3RvX3BoeXMoaSldLmFkZHIpCiAJCQlyZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OwogCQllbHNlCiAJCQlyZXNldF92YWx1ZVtpXSA9IDA7CkBAIC0xNTIsOSArMTcyLDE4IEBACiAKIAkvKiBjbGVhciBhbGwgY291bnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xTOyArK2kpIHsKLQkJaWYgKHVubGlrZWx5KCFtc3JzLT5jb250cm9sc1tpXS5hZGRyKSkKKwkJaWYgKHVubGlrZWx5KCFtc3JzLT5jb250cm9sc1tpXS5hZGRyKSkgeworCQkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQgJiYgIXNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCQkvKgorCQkJCSAqIGNvdW50ZXIgaXMgcmVzZXJ2ZWQsIHRoaXMgaXMgb24gYWxsCisJCQkJICogY3B1cywgc28gcmVwb3J0IG9ubHkgZm9yIGNwdSAjMAorCQkJCSAqLworCQkJCW9wX3g4Nl93YXJuX3Jlc2VydmVkKGkpOwogCQkJY29udGludWU7CisJCX0KIAkJcmRtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CisJCWlmICh2YWwgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRSkKKwkJCW9wX3g4Nl93YXJuX2luX3VzZShpKTsKIAkJdmFsICY9IG1vZGVsLT5yZXNlcnZlZDsKIAkJd3Jtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CiAJfQpAQCAtMTY5LDkgKzE5OCw3IEBACiAJLyogZW5hYmxlIGFjdGl2ZSBjb3VudGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgewogCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7Ci0JCWlmICghY291bnRlcl9jb25maWdbdmlydF0uZW5hYmxlZCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIpCisJCWlmICghcmVzZXRfdmFsdWVbdmlydF0pCiAJCQljb250aW51ZTsKIAogCQkvKiBzZXR1cCBjb3VudGVyIHJlZ2lzdGVycyAqLwpAQCAtMTg1LDcgKzIxMiw2MCBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKKy8qCisgKiAxNi1iaXQgTGluZWFyIEZlZWRiYWNrIFNoaWZ0IFJlZ2lzdGVyIChMRlNSKQorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAxNiAgIDE0ICAgMTMgICAgMTEKKyAqIEZlZWRiYWNrIHBvbHlub21pYWwgPSBYICArIFggICsgWCAgKyAgWCAgKyAxCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGZzcl9yYW5kb20odm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IGxmc3JfdmFsdWUgPSAweEYwMEQ7CisJdW5zaWduZWQgaW50IGJpdDsKKworCS8qIENvbXB1dGUgbmV4dCBiaXQgdG8gc2hpZnQgaW4gKi8KKwliaXQgPSAoKGxmc3JfdmFsdWUgPj4gMCkgXgorCSAgICAgICAobGZzcl92YWx1ZSA+PiAyKSBeCisJICAgICAgIChsZnNyX3ZhbHVlID4+IDMpIF4KKwkgICAgICAgKGxmc3JfdmFsdWUgPj4gNSkpICYgMHgwMDAxOworCisJLyogQWR2YW5jZSB0byBuZXh0IHJlZ2lzdGVyIHZhbHVlICovCisJbGZzcl92YWx1ZSA9IChsZnNyX3ZhbHVlID4+IDEpIHwgKGJpdCA8PCAxNSk7CisKKwlyZXR1cm4gbGZzcl92YWx1ZTsKK30KKworLyoKKyAqIElCUyBzb2Z0d2FyZSByYW5kb21pemF0aW9uCisgKgorICogVGhlIElCUyBwZXJpb2RpYyBvcCBjb3VudGVyIGlzIHJhbmRvbWl6ZWQgaW4gc29mdHdhcmUuIFRoZSBsb3dlciAxMgorICogYml0cyBvZiB0aGUgMjAgYml0IGNvdW50ZXIgYXJlIHJhbmRvbWl6ZWQuIElic09wQ3VyQ250IGlzCisgKiBpbml0aWFsaXplZCB3aXRoIGEgMTIgYml0IHJhbmRvbSB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSB1NjQgb3BfYW1kX3JhbmRvbWl6ZV9pYnNfb3AodTY0IHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgcmFuZG9tID0gbGZzcl9yYW5kb20oKTsKKworCWlmICghKGlic19jYXBzICYgSUJTX0NBUFNfUkRXUk9QQ05UKSkKKwkJLyoKKwkJICogV29yayBhcm91bmQgaWYgdGhlIGh3IGNhbiBub3Qgd3JpdGUgdG8gSWJzT3BDdXJDbnQKKwkJICoKKwkJICogUmFuZG9taXplIHRoZSBsb3dlciA4IGJpdHMgb2YgdGhlIDE2IGJpdAorCQkgKiBJYnNPcE1heENudCBbMTU6MF0gdmFsdWUgaW4gdGhlIHJhbmdlIG9mIC0xMjggdG8KKwkJICogKzEyNyBieSBhZGRpbmcvc3VidHJhY3RpbmcgYW4gb2Zmc2V0IHRvIHRoZQorCQkgKiBtYXhpbXVtIGNvdW50IChJYnNPcE1heENudCkuCisJCSAqCisJCSAqIFRvIGF2b2lkIG92ZXIgb3IgdW5kZXJmbG93cyBhbmQgcHJvdGVjdCB1cHBlciBiaXRzCisJCSAqIHN0YXJ0aW5nIGF0IGJpdCAxNiwgdGhlIGluaXRpYWwgdmFsdWUgZm9yCisJCSAqIElic09wTWF4Q250IG11c3QgZml0IGluIHRoZSByYW5nZSBmcm9tIDB4MDA4MSB0bworCQkgKiAweGZmODAuCisJCSAqLworCQl2YWwgKz0gKHM4KShyYW5kb20gPj4gNCk7CisJZWxzZQorCQl2YWwgfD0gKHU2NCkocmFuZG9tICYgSUJTX1JBTkRPTV9NQVNLKSA8PCAzMjsKKworCXJldHVybiB2YWw7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogb3BfYW1kX2hhbmRsZV9pYnMoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLApAQCAtMTk0LDcgKzI3NCw3IEBACiAJdTY0IHZhbCwgY3RsOwogCXN0cnVjdCBvcF9lbnRyeSBlbnRyeTsKIAotCWlmICghaGFzX2licykKKwlpZiAoIWlic19jYXBzKQogCQlyZXR1cm47CiAKIAlpZiAoaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKSB7CkBAIC0yMzYsOCArMzE2LDcgQEAKIAkJCW9wcm9maWxlX3dyaXRlX2NvbW1pdCgmZW50cnkpOwogCiAJCQkvKiByZWVuYWJsZSB0aGUgSVJRICovCi0JCQljdGwgJj0gfklCU19PUF9WQUwgJiAweEZGRkZGRkZGOwotCQkJY3RsIHw9IElCU19PUF9FTkFCTEU7CisJCQljdGwgPSBvcF9hbWRfcmFuZG9taXplX2lic19vcChpYnNfb3BfY3RsKTsKIAkJCXdybXNybChNU1JfQU1ENjRfSUJTT1BDVEwsIGN0bCk7CiAJCX0KIAl9CkBAIC0yNDYsNDEgKzMyNSw1NyBAQAogc3RhdGljIGlubGluZSB2b2lkIG9wX2FtZF9zdGFydF9pYnModm9pZCkKIHsKIAl1NjQgdmFsOwotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkgeworCisJaWYgKCFpYnNfY2FwcykKKwkJcmV0dXJuOworCisJaWYgKGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkgewogCQl2YWwgPSAoaWJzX2NvbmZpZy5tYXhfY250X2ZldGNoID4+IDQpICYgMHhGRkZGOwogCQl2YWwgfD0gaWJzX2NvbmZpZy5yYW5kX2VuID8gSUJTX0ZFVENIX1JBTkRfRU4gOiAwOwogCQl2YWwgfD0gSUJTX0ZFVENIX0VOQUJMRTsKIAkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNGRVRDSENUTCwgdmFsKTsKIAl9CiAKLQlpZiAoaGFzX2licyAmJiBpYnNfY29uZmlnLm9wX2VuYWJsZWQpIHsKLQkJdmFsID0gKGlic19jb25maWcubWF4X2NudF9vcCA+PiA0KSAmIDB4RkZGRjsKLQkJdmFsIHw9IGlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMgPyBJQlNfT1BfQ05UX0NUTCA6IDA7Ci0JCXZhbCB8PSBJQlNfT1BfRU5BQkxFOworCWlmIChpYnNfY29uZmlnLm9wX2VuYWJsZWQpIHsKKwkJaWJzX29wX2N0bCA9IGlic19jb25maWcubWF4X2NudF9vcCA+PiA0OworCQlpZiAoIShpYnNfY2FwcyAmIElCU19DQVBTX1JEV1JPUENOVCkpIHsKKwkJCS8qCisJCQkgKiBJYnNPcEN1ckNudCBub3Qgc3VwcG9ydGVkLiAgU2VlCisJCQkgKiBvcF9hbWRfcmFuZG9taXplX2lic19vcCgpIGZvciBkZXRhaWxzLgorCQkJICovCisJCQlpYnNfb3BfY3RsID0gY2xhbXAoaWJzX29wX2N0bCwgMHgwMDgxVUxMLCAweEZGODBVTEwpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoZSBzdGFydCB2YWx1ZSBpcyByYW5kb21pemVkIHdpdGggYQorCQkJICogcG9zaXRpdmUgb2Zmc2V0LCB3ZSBuZWVkIHRvIGNvbXBlbnNhdGUgaXQKKwkJCSAqIHdpdGggdGhlIGhhbGYgb2YgdGhlIHJhbmRvbWl6ZWQgcmFuZ2UuIEFsc28KKwkJCSAqIGF2b2lkIHVuZGVyZmxvd3MuCisJCQkgKi8KKwkJCWlic19vcF9jdGwgPSBtaW4oaWJzX29wX2N0bCArIElCU19SQU5ET01fTUFYQ05UX09GRlNFVCwKKwkJCQkJIDB4RkZGRlVMTCk7CisJCX0KKwkJaWYgKGlic19jYXBzICYgSUJTX0NBUFNfT1BDTlQgJiYgaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcykKKwkJCWlic19vcF9jdGwgfD0gSUJTX09QX0NOVF9DVEw7CisJCWlic19vcF9jdGwgfD0gSUJTX09QX0VOQUJMRTsKKwkJdmFsID0gb3BfYW1kX3JhbmRvbWl6ZV9pYnNfb3AoaWJzX29wX2N0bCk7CiAJCXdybXNybChNU1JfQU1ENjRfSUJTT1BDVEwsIHZhbCk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBvcF9hbWRfc3RvcF9pYnModm9pZCkKIHsKLQlpZiAoaGFzX2licyAmJiBpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpCisJaWYgKCFpYnNfY2FwcykKKwkJcmV0dXJuOworCisJaWYgKGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkKIAkJLyogY2xlYXIgbWF4IGNvdW50IGFuZCBlbmFibGUgKi8KIAkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNGRVRDSENUTCwgMCk7CiAKLQlpZiAoaGFzX2licyAmJiBpYnNfY29uZmlnLm9wX2VuYWJsZWQpCisJaWYgKGlic19jb25maWcub3BfZW5hYmxlZCkKIAkJLyogY2xlYXIgbWF4IGNvdW50IGFuZCBlbmFibGUgKi8KIAkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNPUENUTCwgMCk7CiB9CiAKLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvcF9hbWRfaGFuZGxlX2licyhzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCi0JCQkJICAgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgb3BfYW1kX3N0YXJ0X2licyh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvcF9hbWRfc3RvcF9pYnModm9pZCkgeyB9Ci0KLSNlbmRpZgotCiBzdGF0aWMgaW50IG9wX2FtZF9jaGVja19jdHJzKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywKIAkJCSAgICAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQogewpAQCAtMzU1LDggKzQ1MCw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUwotCiBzdGF0aWMgdTggaWJzX2VpbHZ0X29mZjsKIAogc3RhdGljIGlubGluZSB2b2lkIGFwaWNfaW5pdF9pYnNfbm1pX3Blcl9jcHUodm9pZCAqYXJnKQpAQCAtNDA1LDQ1ICs0OTgsMzYgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0jaWZkZWYgQ09ORklHX05VTUEKLQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkvKiBXb3JrcyBvbmx5IGZvciA2NGJpdCB3aXRoIHByb3BlciBudW1hIGltcGxlbWVudGF0aW9uLiAqLwotCWlmIChub2RlcyAhPSBudW1fcG9zc2libGVfbm9kZXMoKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiRmFpbGVkIHRvIHNldHVwIENQVSBub2RlKHMpIGZvciBJQlMsICIKLQkJCSJmb3VuZDogJWQsIGV4cGVjdGVkICVkIiwKLQkJCW5vZGVzLCBudW1fcG9zc2libGVfbm9kZXMoKSk7Ci0JCXJldHVybiAxOwotCX0KLSNlbmRpZgogCXJldHVybiAwOwogfQogCiAvKiB1bmluaXRpYWxpemUgdGhlIEFQSUMgZm9yIHRoZSBJQlMgaW50ZXJydXB0cyBpZiBuZWVkZWQgKi8KIHN0YXRpYyB2b2lkIGNsZWFyX2lic19ubWkodm9pZCkKIHsKLQlpZiAoaGFzX2licykKKwlpZiAoaWJzX2NhcHMpCiAJCW9uX2VhY2hfY3B1KGFwaWNfY2xlYXJfaWJzX25taV9wZXJfY3B1LCBOVUxMLCAxKTsKIH0KIAogLyogaW5pdGlhbGl6ZSB0aGUgQVBJQyBmb3IgdGhlIElCUyBpbnRlcnJ1cHRzIGlmIGF2YWlsYWJsZSAqLwogc3RhdGljIHZvaWQgaWJzX2luaXQodm9pZCkKIHsKLQloYXNfaWJzID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUyk7CisJaWJzX2NhcHMgPSBnZXRfaWJzX2NhcHMoKTsKIAotCWlmICghaGFzX2licykKKwlpZiAoIWlic19jYXBzKQogCQlyZXR1cm47CiAKIAlpZiAoaW5pdF9pYnNfbm1pKCkpIHsKLQkJaGFzX2licyA9IDA7CisJCWlic19jYXBzID0gMDsKIAkJcmV0dXJuOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBBTUQgSUJTIGRldGVjdGVkXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTogQU1EIElCUyBkZXRlY3RlZCAoMHglMDh4KVxuIiwKKwkgICAgICAgKHVuc2lnbmVkKWlic19jYXBzKTsKIH0KIAogc3RhdGljIHZvaWQgaWJzX2V4aXQodm9pZCkKIHsKLQlpZiAoIWhhc19pYnMpCisJaWYgKCFpYnNfY2FwcykKIAkJcmV0dXJuOwogCiAJY2xlYXJfaWJzX25taSgpOwpAQCAtNDYzLDcgKzU0Nyw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICghaGFzX2licykKKwlpZiAoIWlic19jYXBzKQogCQlyZXR1cm4gcmV0OwogCiAJLyogbW9kZWwgc3BlY2lmaWMgZmlsZXMgKi8KQEAgLTQ3Myw3ICs1NTcsNyBAQAogCWlic19jb25maWcuZmV0Y2hfZW5hYmxlZCA9IDA7CiAJaWJzX2NvbmZpZy5tYXhfY250X29wID0gMjUwMDAwOwogCWlic19jb25maWcub3BfZW5hYmxlZCA9IDA7Ci0JaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyA9IDE7CisJaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyA9IDA7CiAKIAlkaXIgPSBvcHJvZmlsZWZzX21rZGlyKHNiLCByb290LCAiaWJzX2ZldGNoIik7CiAJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImVuYWJsZSIsCkBAIC00ODgsOCArNTcyLDkgQEAKIAkJCQkmaWJzX2NvbmZpZy5vcF9lbmFibGVkKTsKIAlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAibWF4X2NvdW50IiwKIAkJCQkmaWJzX2NvbmZpZy5tYXhfY250X29wKTsKLQlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAiZGlzcGF0Y2hlZF9vcHMiLAotCQkJCSZpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzKTsKKwlpZiAoaWJzX2NhcHMgJiBJQlNfQ0FQU19PUENOVCkKKwkJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImRpc3BhdGNoZWRfb3BzIiwKKwkJCQkJJmlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MDcsMTkgKzU5Miw2IEBACiAJaWJzX2V4aXQoKTsKIH0KIAotI2Vsc2UKLQotLyogbm8gSUJTIHN1cHBvcnQgKi8KLQotc3RhdGljIGludCBvcF9hbWRfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBvcF9hbWRfZXhpdCh2b2lkKSB7fQotCi0jZW5kaWYgLyogQ09ORklHX09QUk9GSUxFX0lCUyAqLwotCiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgb3BfYW1kX3NwZWMgPSB7CiAJLm51bV9jb3VudGVycwkJPSBOVU1fQ09VTlRFUlMsCiAJLm51bV9jb250cm9scwkJPSBOVU1fQ09OVFJPTFMsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwppbmRleCBhYzZiMzU0Li5lNmExNjBhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKQEAgLTM5NCwxMiArMzk0LDYgQEAKIAlzZXR1cF9udW1fY291bnRlcnMoKTsKIAlzdGFnID0gZ2V0X3N0YWdnZXIoKTsKIAotCS8qIGluaXRpYWxpemUgc29tZSByZWdpc3RlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpCi0JCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBudW1fY29udHJvbHM7ICsraSkKLQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IDA7Ci0KIAkvKiB0aGUgY291bnRlciAmIGNjY3IgcmVnaXN0ZXJzIHdlIHBheSBhdHRlbnRpb24gdG8gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJYWRkciA9IHA0X2NvdW50ZXJzW1ZJUlRfQ1RSKHN0YWcsIGkpXS5jb3VudGVyX2FkZHJlc3M7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKaW5kZXggOGViMDU4Ny4uNWQxNzI3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwpAQCAtMzcsMTUgKzM3LDExIEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgaSsrKSB7CiAJCWlmIChyZXNlcnZlX3BlcmZjdHJfbm1pKE1TUl9QNl9QRVJGQ1RSMCArIGkpKQogCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IE1TUl9QNl9QRVJGQ1RSMCArIGk7Ci0JCWVsc2UKLQkJCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSAwOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7IGkrKykgewogCQlpZiAocmVzZXJ2ZV9ldm50c2VsX25taShNU1JfUDZfRVZOVFNFTDAgKyBpKSkKIAkJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSBNU1JfUDZfRVZOVFNFTDAgKyBpOwotCQllbHNlCi0JCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gMDsKIAl9CiB9CiAKQEAgLTU3LDcgKzUzLDcgQEAKIAlpbnQgaTsKIAogCWlmICghcmVzZXRfdmFsdWUpIHsKLQkJcmVzZXRfdmFsdWUgPSBrbWFsbG9jKHNpemVvZihyZXNldF92YWx1ZVswXSkgKiBudW1fY291bnRlcnMsCisJCXJlc2V0X3ZhbHVlID0ga3phbGxvYyhzaXplb2YocmVzZXRfdmFsdWVbMF0pICogbnVtX2NvdW50ZXJzLAogCQkJCQlHRlBfQVRPTUlDKTsKIAkJaWYgKCFyZXNldF92YWx1ZSkKIAkJCXJldHVybjsKQEAgLTgyLDkgKzc4LDE4IEBACiAKIAkvKiBjbGVhciBhbGwgY291bnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKLQkJaWYgKHVubGlrZWx5KCFtc3JzLT5jb250cm9sc1tpXS5hZGRyKSkKKwkJaWYgKHVubGlrZWx5KCFtc3JzLT5jb250cm9sc1tpXS5hZGRyKSkgeworCQkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQgJiYgIXNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCQkvKgorCQkJCSAqIGNvdW50ZXIgaXMgcmVzZXJ2ZWQsIHRoaXMgaXMgb24gYWxsCisJCQkJICogY3B1cywgc28gcmVwb3J0IG9ubHkgZm9yIGNwdSAjMAorCQkJCSAqLworCQkJCW9wX3g4Nl93YXJuX3Jlc2VydmVkKGkpOwogCQkJY29udGludWU7CisJCX0KIAkJcmRtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CisJCWlmICh2YWwgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRSkKKwkJCW9wX3g4Nl93YXJuX2luX3VzZShpKTsKIAkJdmFsICY9IG1vZGVsLT5yZXNlcnZlZDsKIAkJd3Jtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmggYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAppbmRleCA3YjhlNzVkLi5mZjgyYTc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAorKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaApAQCAtNTcsNiArNTcsMjYgQEAKIAogc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnOwogCitzdGF0aWMgaW5saW5lIHZvaWQgb3BfeDg2X3dhcm5faW5fdXNlKGludCBjb3VudGVyKQoreworCS8qCisJICogVGhlIHdhcm5pbmcgaW5kaWNhdGVzIGFuIGFscmVhZHkgcnVubmluZyBjb3VudGVyLiBJZgorCSAqIG9wcm9maWxlIGRvZXNuJ3QgY29sbGVjdCBkYXRhLCB0aGVuIHRyeSB1c2luZyBhIGRpZmZlcmVudAorCSAqIHBlcmZvcm1hbmNlIGNvdW50ZXIgb24geW91ciBwbGF0Zm9ybSB0byBtb25pdG9yIHRoZSBkZXNpcmVkCisJICogZXZlbnQuIERlbGV0ZSBjb3VudGVyICMlZCBmcm9tIHRoZSBkZXNpcmVkIGV2ZW50IGJ5IGVkaXRpbmcKKwkgKiB0aGUgL3Vzci9zaGFyZS9vcHJvZmlsZS8lcy88Y3B1Pi9ldmVudHMgZmlsZS4gSWYgdGhlIGV2ZW50CisJICogY2Fubm90IGJlIG1vbml0b3JlZCBieSBhbnkgb3RoZXIgY291bnRlciwgY29udGFjdCB5b3VyCisJICogaGFyZHdhcmUgb3IgQklPUyB2ZW5kb3IuCisJICovCisJcHJfd2FybmluZygib3Byb2ZpbGU6IGNvdW50ZXIgIyVkIG9uIGNwdSAjJWQgbWF5IGFscmVhZHkgYmUgdXNlZFxuIiwKKwkJICAgY291bnRlciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9wX3g4Nl93YXJuX3Jlc2VydmVkKGludCBjb3VudGVyKQoreworCXByX3dhcm5pbmcoIm9wcm9maWxlOiBjb3VudGVyICMlZCBpcyBhbHJlYWR5IHJlc2VydmVkXG4iLCBjb3VudGVyKTsKK30KKwogZXh0ZXJuIHU2NCBvcF94ODZfZ2V0X2N0cmwoc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICptb2RlbCwKIAkJCSAgIHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyAqY291bnRlcl9jb25maWcpOwogZXh0ZXJuIGludCBvcF94ODZfcGh5c190b192aXJ0KGludCBwaHlzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9hY3BpLmMgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCmluZGV4IDk1OWU1NDguLjVmMTFmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9hY3BpLmMKKysrIGIvYXJjaC94ODYvcGNpL2FjcGkuYwpAQCAtMTUsNiArMTUsNTEgQEAKIAlpbnQgYnVzbnVtOwogfTsKIAorc3RhdGljIGJvb2wgcGNpX3VzZV9jcnMgPSB0cnVlOworCitzdGF0aWMgaW50IF9faW5pdCBzZXRfdXNlX2Nycyhjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJcGNpX3VzZV9jcnMgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgcGNpX3VzZV9jcnNfdGFibGVbXSBfX2luaXRjb25zdCA9IHsKKwkvKiBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODMgKi8KKwl7CisJCS5jYWxsYmFjayA9IHNldF91c2VfY3JzLAorCQkuaWRlbnQgPSAiSUJNIFN5c3RlbSB4MzgwMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSUJNIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIngzODAwIiksCisJCX0sCisJfSwKKwl7fQorfTsKKwordm9pZCBfX2luaXQgcGNpX2FjcGlfY3JzX3F1aXJrcyh2b2lkKQoreworCWludCB5ZWFyOworCisJaWYgKGRtaV9nZXRfZGF0ZShETUlfQklPU19EQVRFLCAmeWVhciwgTlVMTCwgTlVMTCkgJiYgeWVhciA8IDIwMDgpCisJCXBjaV91c2VfY3JzID0gZmFsc2U7CisKKwlkbWlfY2hlY2tfc3lzdGVtKHBjaV91c2VfY3JzX3RhYmxlKTsKKworCS8qCisJICogSWYgdGhlIHVzZXIgc3BlY2lmaWVzICJwY2k9dXNlX2NycyIgb3IgInBjaT1ub2NycyIgZXhwbGljaXRseSwgdGhhdAorCSAqIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhbnl0aGluZyB3ZSBmaWd1cmVkIG91dCBhYm92ZS4KKwkgKi8KKwlpZiAocGNpX3Byb2JlICYgUENJX1JPT1RfTk9fQ1JTKQorCQlwY2lfdXNlX2NycyA9IGZhbHNlOworCWVsc2UgaWYgKHBjaV9wcm9iZSAmIFBDSV9VU0VfX0NSUykKKwkJcGNpX3VzZV9jcnMgPSB0cnVlOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiAlcyBob3N0IGJyaWRnZSB3aW5kb3dzIGZyb20gQUNQSTsgIgorCSAgICAgICAiaWYgbmVjZXNzYXJ5LCB1c2UgXCJwY2k9JXNcIiBhbmQgcmVwb3J0IGEgYnVnXG4iLAorCSAgICAgICBwY2lfdXNlX2NycyA/ICJVc2luZyIgOiAiSWdub3JpbmciLAorCSAgICAgICBwY2lfdXNlX2NycyA/ICJub2NycyIgOiAidXNlX2NycyIpOworfQorCiBzdGF0aWMgYWNwaV9zdGF0dXMKIHJlc291cmNlX3RvX2FkZHIoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLAogCQkJc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICphZGRyKQpAQCAtNDUsMjAgKzkwLDYgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLXN0YXRpYyBpbnQKLWJ1c19oYXNfdHJhbnNwYXJlbnRfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewotCQl1MTYgY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7Ci0KLQkJaWYgKGNsYXNzID09IFBDSV9DTEFTU19CUklER0VfUENJICYmIGRldi0+dHJhbnNwYXJlbnQpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgdm9pZAogYWxpZ25fcmVzb3VyY2Uoc3RydWN0IGFjcGlfZGV2aWNlICpicmlkZ2UsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewpAQCAtOTIsMTIgKzEyMyw4IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJlc291cmNlICpyb290OwotCWludCBtYXhfcm9vdF9idXNfcmVzb3VyY2VzID0gUENJX0JVU19OVU1fUkVTT1VSQ0VTOwogCXU2NCBzdGFydCwgZW5kOwogCi0JaWYgKGJ1c19oYXNfdHJhbnNwYXJlbnRfYnJpZGdlKGluZm8tPmJ1cykpCi0JCW1heF9yb290X2J1c19yZXNvdXJjZXMgLT0gMzsKLQogCXN0YXR1cyA9IHJlc291cmNlX3RvX2FkZHIoYWNwaV9yZXMsICZhZGRyKTsKIAlpZiAoIUFDUElfU1VDQ0VTUyhzdGF0dXMpKQogCQlyZXR1cm4gQUVfT0s7CkBAIC0xMTUsMTUgKzE0Miw2IEBACiAKIAlzdGFydCA9IGFkZHIubWluaW11bSArIGFkZHIudHJhbnNsYXRpb25fb2Zmc2V0OwogCWVuZCA9IHN0YXJ0ICsgYWRkci5hZGRyZXNzX2xlbmd0aCAtIDE7Ci0JaWYgKGluZm8tPnJlc19udW0gPj0gbWF4X3Jvb3RfYnVzX3Jlc291cmNlcykgewotCQlpZiAocGNpX3Byb2JlICYgUENJX1VTRV9fQ1JTKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBGYWlsZWQgdG8gYWxsb2NhdGUgIgotCQkJICAgICAgICIweCVseC0weCVseCBmcm9tICVzIGZvciAlcyBkdWUgdG8gX0NSUyAiCi0JCQkgICAgICAgInJldHVybmluZyBtb3JlIHRoYW4gJWQgcmVzb3VyY2UgZGVzY3JpcHRvcnNcbiIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIHN0YXJ0LCAodW5zaWduZWQgbG9uZykgZW5kLAotCQkJICAgICAgIHJvb3QtPm5hbWUsIGluZm8tPm5hbWUsIG1heF9yb290X2J1c19yZXNvdXJjZXMpOwotCQlyZXR1cm4gQUVfT0s7Ci0JfQogCiAJcmVzID0gJmluZm8tPnJlc1tpbmZvLT5yZXNfbnVtXTsKIAlyZXMtPm5hbWUgPSBpbmZvLT5uYW1lOwpAQCAtMTMzLDcgKzE1MSw3IEBACiAJcmVzLT5jaGlsZCA9IE5VTEw7CiAJYWxpZ25fcmVzb3VyY2UoaW5mby0+YnJpZGdlLCByZXMpOwogCi0JaWYgKCEocGNpX3Byb2JlICYgUENJX1VTRV9fQ1JTKSkgeworCWlmICghcGNpX3VzZV9jcnMpIHsKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmaW5mby0+YnJpZGdlLT5kZXYsCiAJCQkgICAiaG9zdCBicmlkZ2Ugd2luZG93ICVwUiAoaWdub3JlZClcbiIsIHJlcyk7CiAJCXJldHVybiBBRV9PSzsKQEAgLTE0Myw3ICsxNjEsNyBAQAogCQlkZXZfZXJyKCZpbmZvLT5icmlkZ2UtPmRldiwKIAkJCSJjYW4ndCBhbGxvY2F0ZSBob3N0IGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwogCX0gZWxzZSB7Ci0JCWluZm8tPmJ1cy0+cmVzb3VyY2VbaW5mby0+cmVzX251bV0gPSByZXM7CisJCXBjaV9idXNfYWRkX3Jlc291cmNlKGluZm8tPmJ1cywgcmVzLCAwKTsKIAkJaW5mby0+cmVzX251bSsrOwogCQlpZiAoYWRkci50cmFuc2xhdGlvbl9vZmZzZXQpCiAJCQlkZXZfaW5mbygmaW5mby0+YnJpZGdlLT5kZXYsICJob3N0IGJyaWRnZSB3aW5kb3cgJXBSICIKQEAgLTE2NCwxMCArMTgyLDggQEAKIAlzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyBpbmZvOwogCXNpemVfdCBzaXplOwogCi0JaWYgKCEocGNpX3Byb2JlICYgUENJX1VTRV9fQ1JTKSkKLQkJZGV2X2luZm8oJmRldmljZS0+ZGV2LAotCQkJICJpZ25vcmluZyBob3N0IGJyaWRnZSB3aW5kb3dzIGZyb20gQUNQSTsgIgotCQkJICJib290IHdpdGggXCJwY2k9dXNlX2Nyc1wiIHRvIHVzZSB0aGVtXG4iKTsKKwlpZiAocGNpX3VzZV9jcnMpCisJCXBjaV9idXNfcmVtb3ZlX3Jlc291cmNlcyhidXMpOwogCiAJaW5mby5icmlkZ2UgPSBkZXZpY2U7CiAJaW5mby5idXMgPSBidXM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYyBiL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jCmluZGV4IGY5MzlkNjAuLjEyZDU0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jCisrKyBiL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jCkBAIC0zNiwxMyArMzYsMTQgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBwZWVyIHJvb3QgYnVzICUwMnggcmVzIHVwZGF0ZWQgZnJvbSBwY2kgY29uZlxuIiwKIAkJCWItPm51bWJlcik7CiAKKwlwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMoYik7CiAJaW5mbyA9ICZwY2lfcm9vdF9pbmZvW2ldOwogCWZvciAoaiA9IDA7IGogPCBpbmZvLT5yZXNfbnVtOyBqKyspIHsKIAkJc3RydWN0IHJlc291cmNlICpyZXM7CiAJCXN0cnVjdCByZXNvdXJjZSAqcm9vdDsKIAogCQlyZXMgPSAmaW5mby0+cmVzW2pdOwotCQliLT5yZXNvdXJjZVtqXSA9IHJlczsKKwkJcGNpX2J1c19hZGRfcmVzb3VyY2UoYiwgcmVzLCAwKTsKIAkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQogCQkJcm9vdCA9ICZpb3BvcnRfcmVzb3VyY2U7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9idXNfbnVtYS5oIGIvYXJjaC94ODYvcGNpL2J1c19udW1hLmgKaW5kZXggYWRiYzIzZi4uNzMxYjY0ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmgKKysrIGIvYXJjaC94ODYvcGNpL2J1c19udW1hLmgKQEAgLTIsOCArMiw3IEBACiAKIC8qCiAgKiBzdWIgYnVzICh0cmFuc3BhcmVudCkgd2lsbCB1c2UgZW50cmVzIGZyb20gMyB0byBzdG9yZSBleHRyYSBmcm9tCi0gKiByb290LCBzbyBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzbG90IHRoZXJlLCBTaG91bGQgd2UKLSAqIGluY3JlYXNlIFBDSV9CVVNfTlVNX1JFU09VUkNFUz8KKyAqIHJvb3QsIHNvIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHNsb3QgdGhlcmUuCiAgKi8KICNkZWZpbmUgUkVTX05VTSAxNgogc3RydWN0IHBjaV9yb290X2luZm8gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCmluZGV4IGQyNTUyYzYuLjM3MzYxNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKQEAgLTUyMCw2ICs1MjAsOSBAQAogCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICJ1c2VfY3JzIikpIHsKIAkJcGNpX3Byb2JlIHw9IFBDSV9VU0VfX0NSUzsKIAkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgIm5vY3JzIikpIHsKKwkJcGNpX3Byb2JlIHw9IFBDSV9ST09UX05PX0NSUzsKKwkJcmV0dXJuIE5VTEw7CiAJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgImVhcmx5ZHVtcCIpKSB7CiAJCXBjaV9lYXJseV9kdW1wX3JlZ3MgPSAxOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDVkYzllOGMuLjVhOGZiZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtNjAsMjIgKzYwLDIwIEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBoYXZlIGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7Ci0KIAkJaWYgKHNraXBfaXNhX2lvcmVzb3VyY2VfYWxpZ24oZGV2KSkKLQkJCXJldHVybjsKLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKKwkJCXJldHVybiBzdGFydDsKKwkJaWYgKHN0YXJ0ICYgMHgzMDApCiAJCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQogCX0KKwlyZXR1cm4gc3RhcnQ7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaWJpb3NfYWxpZ25fcmVzb3VyY2UpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaXJxLmMgYi9hcmNoL3g4Ni9wY2kvaXJxLmMKaW5kZXggMDY5NmQ1MC4uYjAyZjZkOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2lycS5jCisrKyBiL2FyY2gveDg2L3BjaS9pcnEuYwpAQCAtNTkwLDYgKzU5MCw4IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzE6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzI6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzM6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMxOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9DUFRfTFBDMjoKIAkJci0+bmFtZSA9ICJQSUlYL0lDSCI7CiAJCXItPmdldCA9IHBpcnFfcGlpeF9nZXQ7CiAJCXItPnNldCA9IHBpcnFfcGlpeF9zZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMgYi9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKaW5kZXggYjE5ZDFlNS4uOGYzZjlhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5jCisrKyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYwpAQCAtMzAzLDIyICszMDMsMTcgQEAKIHsKIAlzdHJ1Y3QgcGNpX21tY2ZnX3JlZ2lvbiAqY2ZnLCAqY2ZneDsKIAotCS8qIGxhc3Qgb25lKi8KLQljZmcgPSBsaXN0X2VudHJ5KHBjaV9tbWNmZ19saXN0LnByZXYsIHR5cGVvZigqY2ZnKSwgbGlzdCk7Ci0JaWYgKGNmZykKLQkJaWYgKGNmZy0+ZW5kX2J1cyA8IGNmZy0+c3RhcnRfYnVzKQotCQkJY2ZnLT5lbmRfYnVzID0gMjU1OwotCi0JaWYgKGxpc3RfaXNfc2luZ3VsYXIoJnBjaV9tbWNmZ19saXN0KSkKLQkJcmV0dXJuOwotCi0JLyogZG9uJ3Qgb3ZlcmxhcCBwbGVhc2UgKi8KKwkvKiBGaXh1cCBvdmVybGFwcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ZnLCAmcGNpX21tY2ZnX2xpc3QsIGxpc3QpIHsKIAkJaWYgKGNmZy0+ZW5kX2J1cyA8IGNmZy0+c3RhcnRfYnVzKQogCQkJY2ZnLT5lbmRfYnVzID0gMjU1OwogCisJCS8qIERvbid0IGFjY2VzcyB0aGUgbGlzdCBoZWFkICEgKi8KKwkJaWYgKGNmZy0+bGlzdC5uZXh0ID09ICZwY2lfbW1jZmdfbGlzdCkKKwkJCWJyZWFrOworCiAJCWNmZ3ggPSBsaXN0X2VudHJ5KGNmZy0+bGlzdC5uZXh0LCB0eXBlb2YoKmNmZyksIGxpc3QpOwotCQlpZiAoY2ZnICE9IGNmZ3ggJiYgY2ZnLT5lbmRfYnVzID49IGNmZ3gtPnN0YXJ0X2J1cykKKwkJaWYgKGNmZy0+ZW5kX2J1cyA+PSBjZmd4LT5zdGFydF9idXMpCiAJCQljZmctPmVuZF9idXMgPSBjZmd4LT5zdGFydF9idXMgLSAxOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jIGIvYXJjaC94ODYvcGNpL251bWFxXzMyLmMKaW5kZXggOGViMjk1ZS4uODg4NGExYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL251bWFxXzMyLmMKKysrIGIvYXJjaC94ODYvcGNpL251bWFxXzMyLmMKQEAgLTgsOSArOCw3IEBACiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CiAjaW5jbHVkZSA8YXNtL3BjaV94ODYuaD4KLQotI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCi0jZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIC8qIDI1NmsgcGVyIHF1YWQuICovCisjaW5jbHVkZSA8YXNtL251bWFxLmg+CiAKICNkZWZpbmUgQlVTMlFVQUQoZ2xvYmFsKSAobXBfYnVzX2lkX3RvX25vZGVbZ2xvYmFsXSkKIApAQCAtMTgsOCArMTYsNiBAQAogCiAjZGVmaW5lIFFVQURMT0NBTDJCVVMocXVhZCxsb2NhbCkgKHF1YWRfbG9jYWxfdG9fbXBfYnVzX2lkW3F1YWRdW2xvY2FsXSkKIAotI2RlZmluZSBYUVVBRF9QT1JUX0FERFIocG9ydCwgcXVhZCkgKHhxdWFkX3BvcnRpbyArIChYUVVBRF9QT1JUSU9fUVVBRCpxdWFkKSArIHBvcnQpCi0KICNkZWZpbmUgUENJX0NPTkYxX01RX0FERFJFU1MoYnVzLCBkZXZmbiwgcmVnKSBcCiAJKDB4ODAwMDAwMDAgfCAoQlVTMkxPQ0FMKGJ1cykgPDwgMTYpIHwgKGRldmZuIDw8IDgpIHwgKHJlZyAmIH4zKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvdGVzdF9nZXRfbGVuLmMgYi9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYwppbmRleCBiZWU4ZDZhLi4xMzQwM2ZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYworKysgYi9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYwpAQCAtNDMsNyArNDMsNyBAQAogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBvYmpkdW1wIC1kIGEub3V0IHwgYXdrIC1mIGRpc3RpbGwuYXdrIHwiCi0JCSIgJXMgWy15fC1uXSBbLXZdIFxuIiwgcHJvZyk7CisJCSIgJXMgWy15fC1uXSBbLXZdXG4iLCBwcm9nKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0LXkJNjRiaXQgbW9kZVxuIik7CiAJZnByaW50ZihzdGRlcnIsICJcdC1uCTMyYml0IG1vZGVcbiIpOwogCWZwcmludGYoc3RkZXJyLCAiXHQtdgl2ZXJib3NlIG1vZGVcbiIpOwpAQCAtNjksNyArNjksNyBAQAogCiBzdGF0aWMgdm9pZCBkdW1wX2luc24oRklMRSAqZnAsIHN0cnVjdCBpbnNuICppbnNuKQogewotCWZwcmludGYoZnAsICJJbnN0cnVjdGlvbiA9IHsgXG4iKTsKKwlmcHJpbnRmKGZwLCAiSW5zdHJ1Y3Rpb24gPSB7XG4iKTsKIAlkdW1wX2ZpZWxkKGZwLCAicHJlZml4ZXMiLCAiXHQiLAkmaW5zbi0+cHJlZml4ZXMpOwogCWR1bXBfZmllbGQoZnAsICJyZXhfcHJlZml4IiwgIlx0IiwJJmluc24tPnJleF9wcmVmaXgpOwogCWR1bXBfZmllbGQoZnAsICJ2ZXhfcHJlZml4IiwgIlx0IiwJJmluc24tPnZleF9wcmVmaXgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jCmluZGV4IGI3YzA3MzQuLmNkMTAyNjkgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMKQEAgLTY5LDI2ICs2OSwyNSBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCi0gICAgCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7Ci0KIAkJaWYgKHNpemUgPiAweDEwMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEkvTyBSZWdpb24gJXMvJWQgdG9vIGxhcmdlIgogCQkJICAgICAgICIgKCVsZCBieXRlcylcbiIsIHBjaV9uYW1lKGRldiksCiAJCQkgICAgICAgZGV2LT5yZXNvdXJjZSAtIHJlcywgc2l6ZSk7CiAJCX0KIAotCQlpZiAoc3RhcnQgJiAweDMwMCkgeworCQlpZiAoc3RhcnQgJiAweDMwMCkKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9CiAJfQorCisJcmV0dXJuIHN0YXJ0OwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggODFjMTg1YS4uNmEyZTI5NSAxMDA2NDQKLS0tIGEvY3J5cHRvL0tjb25maWcKKysrIGIvY3J5cHRvL0tjb25maWcKQEAgLTExNCw2ICsxMTQsMTYgQEAKIAloZWxwCiAJICBUaGVzZSBhcmUgJ051bGwnIGFsZ29yaXRobXMsIHVzZWQgYnkgSVBzZWMsIHdoaWNoIGRvIG5vdGhpbmcuCiAKK2NvbmZpZyBDUllQVE9fUENSWVBUCisJdHJpc3RhdGUgIlBhcmFsbGVsIGNyeXB0byBlbmdpbmUgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBTTVAgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFBBREFUQQorCXNlbGVjdCBDUllQVE9fTUFOQUdFUgorCXNlbGVjdCBDUllQVE9fQUVBRAorCWhlbHAKKwkgIFRoaXMgY29udmVydHMgYW4gYXJiaXRyYXJ5IGNyeXB0byBhbGdvcml0aG0gaW50byBhIHBhcmFsbGVsCisJICBhbGdvcml0aG0gdGhhdCBleGVjdXRlcyBpbiBrZXJuZWwgdGhyZWFkcy4KKwogY29uZmlnIENSWVBUT19XT1JLUVVFVUUKICAgICAgICB0cmlzdGF0ZQogCmRpZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUgYi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggOWU4ZjYxOS4uZDdlNjQ0MSAxMDA2NDQKLS0tIGEvY3J5cHRvL01ha2VmaWxlCisrKyBiL2NyeXB0by9NYWtlZmlsZQpAQCAtNTYsNiArNTYsNyBAQAogb2JqLSQoQ09ORklHX0NSWVBUT19DVFIpICs9IGN0ci5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0dDTSkgKz0gZ2NtLm8KIG9iai0kKENPTkZJR19DUllQVE9fQ0NNKSArPSBjY20ubworb2JqLSQoQ09ORklHX0NSWVBUT19QQ1JZUFQpICs9IHBjcnlwdC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0NSWVBURCkgKz0gY3J5cHRkLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVTKSArPSBkZXNfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0ZDUllQVCkgKz0gZmNyeXB0Lm8KZGlmZiAtLWdpdCBhL2NyeXB0by9hYmxrY2lwaGVyLmMgYi9jcnlwdG8vYWJsa2NpcGhlci5jCmluZGV4IGY2ZjA4MzMuLmZlOTgwZGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hYmxrY2lwaGVyLmMKKysrIGIvY3J5cHRvL2FibGtjaXBoZXIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBBc3luY2hyb25vdXMgYmxvY2sgY2hhaW5pbmcgY2lwaGVyIG9wZXJhdGlvbnMuCi0gKiAKKyAqCiAgKiBUaGlzIGlzIHRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiBvZiBibGtjaXBoZXIuYyBpbmRpY2F0aW5nIGNvbXBsZXRpb24KICAqIHZpYSBhIGNhbGxiYWNrLgogICoKQEAgLTgsNyArOCw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVhZC5jIGIvY3J5cHRvL2FlYWQuYwppbmRleCAwYTU1ZGE3Li42NzI5ZThmIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVhZC5jCisrKyBiL2NyeXB0by9hZWFkLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAgKiBBRUFEOiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSAqIAorICoKICAqIFRoaXMgZmlsZSBwcm92aWRlcyBBUEkgc3VwcG9ydCBmb3IgQUVBRCBhbGdvcml0aG1zLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwNyBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzX2dlbmVyaWMuYyBiL2NyeXB0by9hZXNfZ2VuZXJpYy5jCmluZGV4IGU3OGI3ZWUuLmE2OGM3M2QgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXNfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9hZXNfZ2VuZXJpYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogQUVTIENpcGhlciBBbGdvcml0aG0uCkBAIC0xMTI3LDcgKzExMjcsNyBAQAogCiAjZGVmaW5lIHN0YXJfeCh4KSAoKCh4KSAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4gKCgoKHgpICYgMHg4MDgwODA4MCkgPj4gNykgKiAweDFiKQogCi0jZGVmaW5lIGltaXhfY29sKHkseCkJZG8gewkJXAorI2RlZmluZSBpbWl4X2NvbCh5LCB4KQlkbyB7CQlcCiAJdQk9IHN0YXJfeCh4KTsJCVwKIAl2CT0gc3Rhcl94KHUpOwkJXAogCXcJPSBzdGFyX3godik7CQlcCmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYXBpLmMgYi9jcnlwdG8vYWxnYXBpLmMKaW5kZXggZjE0OWIxYy4uM2U0NTI0ZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2FwaS5jCisrKyBiL2NyeXB0by9hbGdhcGkuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJbGlzdF9hZGQoJmFsZy0+Y3JhX2xpc3QsICZjcnlwdG9fYWxnX2xpc3QpOwogCWxpc3RfYWRkKCZsYXJ2YWwtPmFsZy5jcmFfbGlzdCwgJmNyeXB0b19hbGdfbGlzdCk7CiAKLW91dDoJCitvdXQ6CiAJcmV0dXJuIGxhcnZhbDsKIAogZnJlZV9sYXJ2YWw6CkBAIC0zODgsNyArMzg4LDcgQEAKIHsKIAlpbnQgcmV0OwogCUxJU1RfSEVBRChsaXN0KTsKLQkKKwogCWRvd25fd3JpdGUoJmNyeXB0b19hbGdfc2VtKTsKIAlyZXQgPSBjcnlwdG9fcmVtb3ZlX2FsZyhhbGcsICZsaXN0KTsKIAl1cF93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FudWJpcy5jIGIvY3J5cHRvL2FudWJpcy5jCmluZGV4IGU0MmMzYTguLjc3NTMwZDUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnViaXMuYworKysgYi9jcnlwdG8vYW51YmlzLmMKQEAgLTQ2OSwxNCArNDY5LDEzIEBACiAJdTMyIGthcHBhW0FOVUJJU19NQVhfTl07CiAJdTMyIGludGVyW0FOVUJJU19NQVhfTl07CiAKLQlzd2l0Y2ggKGtleV9sZW4pCi0JeworCXN3aXRjaCAoa2V5X2xlbikgewogCQljYXNlIDE2OiBjYXNlIDIwOiBjYXNlIDI0OiBjYXNlIDI4OgogCQljYXNlIDMyOiBjYXNlIDM2OiBjYXNlIDQwOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47Ci0JCQlyZXR1cm4gLSBFSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAljdHgtPmtleV9sZW4gPSBrZXlfbGVuICogODsKQEAgLTUzMCwyMyArNTI5LDI0IEBACiAJCS8qCiAJCSAqIGNvbXB1dGUga2FwcGFee3IrMX0gZnJvbSBrYXBwYV5yOgogCQkgKi8KLQkJaWYgKHIgPT0gUikgeworCQlpZiAociA9PSBSKQogCQkJYnJlYWs7Ci0JCX0KIAkJZm9yIChpID0gMDsgaSA8IE47IGkrKykgewogCQkJaW50IGogPSBpOwogCQkJaW50ZXJbaV0gID0gVDBbKGthcHBhW2otLV0gPj4gMjQpICAgICAgIF07Ci0JCQlpZiAoaiA8IDApIGogPSBOIC0gMTsKKwkJCWlmIChqIDwgMCkKKwkJCQlqID0gTiAtIDE7CiAJCQlpbnRlcltpXSBePSBUMVsoa2FwcGFbai0tXSA+PiAxNikgJiAweGZmXTsKLQkJCWlmIChqIDwgMCkgaiA9IE4gLSAxOworCQkJaWYgKGogPCAwKQorCQkJCWogPSBOIC0gMTsKIAkJCWludGVyW2ldIF49IFQyWyhrYXBwYVtqLS1dID4+ICA4KSAmIDB4ZmZdOwotCQkJaWYgKGogPCAwKSBqID0gTiAtIDE7CisJCQlpZiAoaiA8IDApCisJCQkJaiA9IE4gLSAxOwogCQkJaW50ZXJbaV0gXj0gVDNbKGthcHBhW2ogIF0gICAgICApICYgMHhmZl07CiAJCX0KIAkJa2FwcGFbMF0gPSBpbnRlclswXSBeIHJjW3JdOwotCQlmb3IgKGkgPSAxOyBpIDwgTjsgaSsrKSB7CisJCWZvciAoaSA9IDE7IGkgPCBOOyBpKyspCiAJCQlrYXBwYVtpXSA9IGludGVyW2ldOwotCQl9CiAJfQogCiAJLyoKQEAgLTY5MCw3ICs2OTAsNyBAQAogc3RhdGljIGludCBfX2luaXQgYW51YmlzX21vZF9pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7Ci0JCisKIAlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbnViaXNfYWxnKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FwaS5jIGIvY3J5cHRvL2FwaS5jCmluZGV4IDc5ODUyNmQuLjAzM2E3MTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hcGkuYworKysgYi9jcnlwdG8vYXBpLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KQEAgLTI4OCwxMSArMjg4LDExIEBACiAKIAljYXNlIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUzoKIAkJcmV0dXJuIGNyeXB0b19pbml0X2NvbXByZXNzX29wcyh0Zm0pOwotCQorCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCQorCiAJQlVHKCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0zMTUsMTAgKzMxNSw5IEBACiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ09NUFJFU1M6CiAJCWNyeXB0b19leGl0X2NvbXByZXNzX29wcyh0Zm0pOwogCQlicmVhazsKLQkKKwogCWRlZmF1bHQ6CiAJCUJVRygpOwotCQkKIAl9CiB9CiAKQEAgLTU5MywxMiArNTkyLDEyIEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKTsKLQkKKwogCWlmICghSVNfRVJSKGFsZykpIHsKIAkJY3J5cHRvX21vZF9wdXQoYWxnKTsKIAkJcmV0ID0gMTsKIAl9Ci0JCisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2hhc19hbGcpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2F1dGhlbmMuYyBiL2NyeXB0by9hdXRoZW5jLmMKaW5kZXggNGQ2ZjQ5YS4uMTg4NzA5MCAxMDA2NDQKLS0tIGEvY3J5cHRvL2F1dGhlbmMuYworKysgYi9jcnlwdG8vYXV0aGVuYy5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAogCQkJCSBhdXRoc2l6ZSwgMCk7CiAKLQllcnIgPSBtZW1jbXAoaWhhc2gsIGFocmVxLT5yZXN1bHQsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAogCQkJCSBhdXRoc2l6ZSwgMCk7CiAKLQllcnIgPSBtZW1jbXAoaWhhc2gsIGFocmVxLT5yZXN1bHQsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC00NjQsNyArNDY0LDcgQEAKIAlpaGFzaCA9IG9oYXNoICsgYXV0aHNpemU7CiAJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGloYXNoLCBhcmVxX2N0eC0+c2csIGFyZXFfY3R4LT5jcnlwdGxlbiwKIAkJCQkgYXV0aHNpemUsIDApOwotCXJldHVybiBtZW1jbXAoaWhhc2gsIG9oYXNoLCBhdXRoc2l6ZSkgPyAtRUJBRE1TRzogMDsKKwlyZXR1cm4gbWVtY21wKGloYXNoLCBvaGFzaCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogfQogCiBzdGF0aWMgaW50IGNyeXB0b19hdXRoZW5jX2l2ZXJpZnkoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCB1OCAqaXYsCkBAIC01NTcsMTEgKzU1NywxMSBAQAogCiAJY3R4LT5hdXRoID0gYXV0aDsKIAljdHgtPmVuYyA9IGVuYzsKLQkKKwogCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IG1heF90KHVuc2lnbmVkIGludCwKIAkJCQljcnlwdG9fYWhhc2hfcmVxc2l6ZShhdXRoKSArIGN0eC0+cmVxb2ZmICsKIAkJCQlzaXplb2Yoc3RydWN0IGF1dGhlbmNfcmVxdWVzdF9jdHgpICsKLQkJCQlzaXplb2Yoc3RydWN0IGFoYXNoX3JlcXVlc3QpLCAKKwkJCQlzaXplb2Yoc3RydWN0IGFoYXNoX3JlcXVlc3QpLAogCQkJCXNpemVvZihzdHJ1Y3Qgc2tjaXBoZXJfZ2l2Y3J5cHRfcmVxdWVzdCkgKwogCQkJCWNyeXB0b19hYmxrY2lwaGVyX3JlcXNpemUoZW5jKSArCiAJCQkJY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplKGVuYykpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsb3dmaXNoLmMgYi9jcnlwdG8vYmxvd2Zpc2guYwppbmRleCA2ZjViNDg3Li5hNjdkNTJlIDEwMDY0NAotLS0gYS9jcnlwdG8vYmxvd2Zpc2guYworKysgYi9jcnlwdG8vYmxvd2Zpc2guYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIEJsb3dmaXNoIENpcGhlciBBbGdvcml0aG0sIGJ5IEJydWNlIFNjaG5laWVyLgpAQCAtMjk5LDcgKzI5OSw3IEBACiAJMHhiNzRlNjEzMiwgMHhjZTc3ZTI1YiwgMHg1NzhmZGZlMywgMHgzYWMzNzJlNiwKIH07CiAKLS8qIAorLyoKICAqIFJvdW5kIGxvb3AgdW5yb2xsaW5nIG1hY3JvcywgUyBpcyBhIHBvaW50ZXIgdG8gYSBTLUJveCBhcnJheQogICogb3JnYW5pemVkIGluIDQgdW5zaWduZWQgbG9uZ3MgYXQgYSByb3cuCiAgKi8KQEAgLTMxNSw3ICszMTUsNyBAQAogCiAvKgogICogVGhlIGJsb3dmaXNoIGVuY2lwaGVyLCBwcm9jZXNzZXMgNjQtYml0IGJsb2Nrcy4KLSAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gTVVTVE4nVCByZXNwZWN0IGVuZGlhbmVzcyAKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gTVVTVE4nVCByZXNwZWN0IGVuZGlhbmVzcwogICovCiBzdGF0aWMgdm9pZCBlbmNyeXB0X2Jsb2NrKHN0cnVjdCBiZl9jdHggKmJjdHgsIHUzMiAqZHN0LCB1MzIgKnNyYykKIHsKQEAgLTM5NSw3ICszOTUsNyBAQAogCW91dF9ibGtbMV0gPSBjcHVfdG9fYmUzMih5bCk7CiB9CiAKLS8qIAorLyoKICAqIENhbGN1bGF0ZXMgdGhlIGJsb3dmaXNoIFMgYW5kIFAgYm94ZXMgZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uCiAgKi8KIHN0YXRpYyBpbnQgYmZfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCkBAIC00MTcsMTAgKzQxNywxMCBAQAogCiAJLyogQWN0dWFsIHN1YmtleSBnZW5lcmF0aW9uICovCiAJZm9yIChqID0gMCwgaSA9IDA7IGkgPCAxNiArIDI7IGkrKykgewotCQl0ZW1wID0gKCgodTMyIClrZXlbal0gPDwgMjQpIHwKLQkJCSgodTMyIClrZXlbKGogKyAxKSAlIGtleWxlbl0gPDwgMTYpIHwKLQkJCSgodTMyIClrZXlbKGogKyAyKSAlIGtleWxlbl0gPDwgOCkgfAotCQkJKCh1MzIgKWtleVsoaiArIDMpICUga2V5bGVuXSkpOworCQl0ZW1wID0gKCgodTMyKWtleVtqXSA8PCAyNCkgfAorCQkJKCh1MzIpa2V5WyhqICsgMSkgJSBrZXlsZW5dIDw8IDE2KSB8CisJCQkoKHUzMilrZXlbKGogKyAyKSAlIGtleWxlbl0gPDwgOCkgfAorCQkJKCh1MzIpa2V5WyhqICsgMykgJSBrZXlsZW5dKSk7CiAKIAkJUFtpXSA9IFBbaV0gXiB0ZW1wOwogCQlqID0gKGogKyA0KSAlIGtleWxlbjsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJU1tjb3VudCArIDFdID0gZGF0YVsxXTsKIAkJfQogCX0KLQkKKwogCS8qIEJydWNlIHNheXMgbm90IHRvIGJvdGhlciB3aXRoIHRoZSB3ZWFrIGtleSBjaGVjay4gKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9jYW1lbGxpYS5jIGIvY3J5cHRvL2NhbWVsbGlhLmMKaW5kZXggOTY0NjM1ZC4uNjRjZmY0NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NhbWVsbGlhLmMKKysrIGIvY3J5cHRvL2NhbWVsbGlhLmMKQEAgLTM5LDI3MSArMzksMjcxIEBACiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiBzdGF0aWMgY29uc3QgdTMyIGNhbWVsbGlhX3NwMTExMFsyNTZdID0gewotCTB4NzA3MDcwMDAsMHg4MjgyODIwMCwweDJjMmMyYzAwLDB4ZWNlY2VjMDAsCi0JMHhiM2IzYjMwMCwweDI3MjcyNzAwLDB4YzBjMGMwMDAsMHhlNWU1ZTUwMCwKLQkweGU0ZTRlNDAwLDB4ODU4NTg1MDAsMHg1NzU3NTcwMCwweDM1MzUzNTAwLAotCTB4ZWFlYWVhMDAsMHgwYzBjMGMwMCwweGFlYWVhZTAwLDB4NDE0MTQxMDAsCi0JMHgyMzIzMjMwMCwweGVmZWZlZjAwLDB4NmI2YjZiMDAsMHg5MzkzOTMwMCwKLQkweDQ1NDU0NTAwLDB4MTkxOTE5MDAsMHhhNWE1YTUwMCwweDIxMjEyMTAwLAotCTB4ZWRlZGVkMDAsMHgwZTBlMGUwMCwweDRmNGY0ZjAwLDB4NGU0ZTRlMDAsCi0JMHgxZDFkMWQwMCwweDY1NjU2NTAwLDB4OTI5MjkyMDAsMHhiZGJkYmQwMCwKLQkweDg2ODY4NjAwLDB4YjhiOGI4MDAsMHhhZmFmYWYwMCwweDhmOGY4ZjAwLAotCTB4N2M3YzdjMDAsMHhlYmViZWIwMCwweDFmMWYxZjAwLDB4Y2VjZWNlMDAsCi0JMHgzZTNlM2UwMCwweDMwMzAzMDAwLDB4ZGNkY2RjMDAsMHg1ZjVmNWYwMCwKLQkweDVlNWU1ZTAwLDB4YzVjNWM1MDAsMHgwYjBiMGIwMCwweDFhMWExYTAwLAotCTB4YTZhNmE2MDAsMHhlMWUxZTEwMCwweDM5MzkzOTAwLDB4Y2FjYWNhMDAsCi0JMHhkNWQ1ZDUwMCwweDQ3NDc0NzAwLDB4NWQ1ZDVkMDAsMHgzZDNkM2QwMCwKLQkweGQ5ZDlkOTAwLDB4MDEwMTAxMDAsMHg1YTVhNWEwMCwweGQ2ZDZkNjAwLAotCTB4NTE1MTUxMDAsMHg1NjU2NTYwMCwweDZjNmM2YzAwLDB4NGQ0ZDRkMDAsCi0JMHg4YjhiOGIwMCwweDBkMGQwZDAwLDB4OWE5YTlhMDAsMHg2NjY2NjYwMCwKLQkweGZiZmJmYjAwLDB4Y2NjY2NjMDAsMHhiMGIwYjAwMCwweDJkMmQyZDAwLAotCTB4NzQ3NDc0MDAsMHgxMjEyMTIwMCwweDJiMmIyYjAwLDB4MjAyMDIwMDAsCi0JMHhmMGYwZjAwMCwweGIxYjFiMTAwLDB4ODQ4NDg0MDAsMHg5OTk5OTkwMCwKLQkweGRmZGZkZjAwLDB4NGM0YzRjMDAsMHhjYmNiY2IwMCwweGMyYzJjMjAwLAotCTB4MzQzNDM0MDAsMHg3ZTdlN2UwMCwweDc2NzY3NjAwLDB4MDUwNTA1MDAsCi0JMHg2ZDZkNmQwMCwweGI3YjdiNzAwLDB4YTlhOWE5MDAsMHgzMTMxMzEwMCwKLQkweGQxZDFkMTAwLDB4MTcxNzE3MDAsMHgwNDA0MDQwMCwweGQ3ZDdkNzAwLAotCTB4MTQxNDE0MDAsMHg1ODU4NTgwMCwweDNhM2EzYTAwLDB4NjE2MTYxMDAsCi0JMHhkZWRlZGUwMCwweDFiMWIxYjAwLDB4MTExMTExMDAsMHgxYzFjMWMwMCwKLQkweDMyMzIzMjAwLDB4MGYwZjBmMDAsMHg5YzljOWMwMCwweDE2MTYxNjAwLAotCTB4NTM1MzUzMDAsMHgxODE4MTgwMCwweGYyZjJmMjAwLDB4MjIyMjIyMDAsCi0JMHhmZWZlZmUwMCwweDQ0NDQ0NDAwLDB4Y2ZjZmNmMDAsMHhiMmIyYjIwMCwKLQkweGMzYzNjMzAwLDB4YjViNWI1MDAsMHg3YTdhN2EwMCwweDkxOTE5MTAwLAotCTB4MjQyNDI0MDAsMHgwODA4MDgwMCwweGU4ZThlODAwLDB4YThhOGE4MDAsCi0JMHg2MDYwNjAwMCwweGZjZmNmYzAwLDB4Njk2OTY5MDAsMHg1MDUwNTAwMCwKLQkweGFhYWFhYTAwLDB4ZDBkMGQwMDAsMHhhMGEwYTAwMCwweDdkN2Q3ZDAwLAotCTB4YTFhMWExMDAsMHg4OTg5ODkwMCwweDYyNjI2MjAwLDB4OTc5Nzk3MDAsCi0JMHg1NDU0NTQwMCwweDViNWI1YjAwLDB4MWUxZTFlMDAsMHg5NTk1OTUwMCwKLQkweGUwZTBlMDAwLDB4ZmZmZmZmMDAsMHg2NDY0NjQwMCwweGQyZDJkMjAwLAotCTB4MTAxMDEwMDAsMHhjNGM0YzQwMCwweDAwMDAwMDAwLDB4NDg0ODQ4MDAsCi0JMHhhM2EzYTMwMCwweGY3ZjdmNzAwLDB4NzU3NTc1MDAsMHhkYmRiZGIwMCwKLQkweDhhOGE4YTAwLDB4MDMwMzAzMDAsMHhlNmU2ZTYwMCwweGRhZGFkYTAwLAotCTB4MDkwOTA5MDAsMHgzZjNmM2YwMCwweGRkZGRkZDAwLDB4OTQ5NDk0MDAsCi0JMHg4Nzg3ODcwMCwweDVjNWM1YzAwLDB4ODM4MzgzMDAsMHgwMjAyMDIwMCwKLQkweGNkY2RjZDAwLDB4NGE0YTRhMDAsMHg5MDkwOTAwMCwweDMzMzMzMzAwLAotCTB4NzM3MzczMDAsMHg2NzY3NjcwMCwweGY2ZjZmNjAwLDB4ZjNmM2YzMDAsCi0JMHg5ZDlkOWQwMCwweDdmN2Y3ZjAwLDB4YmZiZmJmMDAsMHhlMmUyZTIwMCwKLQkweDUyNTI1MjAwLDB4OWI5YjliMDAsMHhkOGQ4ZDgwMCwweDI2MjYyNjAwLAotCTB4YzhjOGM4MDAsMHgzNzM3MzcwMCwweGM2YzZjNjAwLDB4M2IzYjNiMDAsCi0JMHg4MTgxODEwMCwweDk2OTY5NjAwLDB4NmY2ZjZmMDAsMHg0YjRiNGIwMCwKLQkweDEzMTMxMzAwLDB4YmViZWJlMDAsMHg2MzYzNjMwMCwweDJlMmUyZTAwLAotCTB4ZTllOWU5MDAsMHg3OTc5NzkwMCwweGE3YTdhNzAwLDB4OGM4YzhjMDAsCi0JMHg5ZjlmOWYwMCwweDZlNmU2ZTAwLDB4YmNiY2JjMDAsMHg4ZThlOGUwMCwKLQkweDI5MjkyOTAwLDB4ZjVmNWY1MDAsMHhmOWY5ZjkwMCwweGI2YjZiNjAwLAotCTB4MmYyZjJmMDAsMHhmZGZkZmQwMCwweGI0YjRiNDAwLDB4NTk1OTU5MDAsCi0JMHg3ODc4NzgwMCwweDk4OTg5ODAwLDB4MDYwNjA2MDAsMHg2YTZhNmEwMCwKLQkweGU3ZTdlNzAwLDB4NDY0NjQ2MDAsMHg3MTcxNzEwMCwweGJhYmFiYTAwLAotCTB4ZDRkNGQ0MDAsMHgyNTI1MjUwMCwweGFiYWJhYjAwLDB4NDI0MjQyMDAsCi0JMHg4ODg4ODgwMCwweGEyYTJhMjAwLDB4OGQ4ZDhkMDAsMHhmYWZhZmEwMCwKLQkweDcyNzI3MjAwLDB4MDcwNzA3MDAsMHhiOWI5YjkwMCwweDU1NTU1NTAwLAotCTB4ZjhmOGY4MDAsMHhlZWVlZWUwMCwweGFjYWNhYzAwLDB4MGEwYTBhMDAsCi0JMHgzNjM2MzYwMCwweDQ5NDk0OTAwLDB4MmEyYTJhMDAsMHg2ODY4NjgwMCwKLQkweDNjM2MzYzAwLDB4MzgzODM4MDAsMHhmMWYxZjEwMCwweGE0YTRhNDAwLAotCTB4NDA0MDQwMDAsMHgyODI4MjgwMCwweGQzZDNkMzAwLDB4N2I3YjdiMDAsCi0JMHhiYmJiYmIwMCwweGM5YzljOTAwLDB4NDM0MzQzMDAsMHhjMWMxYzEwMCwKLQkweDE1MTUxNTAwLDB4ZTNlM2UzMDAsMHhhZGFkYWQwMCwweGY0ZjRmNDAwLAotCTB4Nzc3Nzc3MDAsMHhjN2M3YzcwMCwweDgwODA4MDAwLDB4OWU5ZTllMDAsCisJMHg3MDcwNzAwMCwgMHg4MjgyODIwMCwgMHgyYzJjMmMwMCwgMHhlY2VjZWMwMCwKKwkweGIzYjNiMzAwLCAweDI3MjcyNzAwLCAweGMwYzBjMDAwLCAweGU1ZTVlNTAwLAorCTB4ZTRlNGU0MDAsIDB4ODU4NTg1MDAsIDB4NTc1NzU3MDAsIDB4MzUzNTM1MDAsCisJMHhlYWVhZWEwMCwgMHgwYzBjMGMwMCwgMHhhZWFlYWUwMCwgMHg0MTQxNDEwMCwKKwkweDIzMjMyMzAwLCAweGVmZWZlZjAwLCAweDZiNmI2YjAwLCAweDkzOTM5MzAwLAorCTB4NDU0NTQ1MDAsIDB4MTkxOTE5MDAsIDB4YTVhNWE1MDAsIDB4MjEyMTIxMDAsCisJMHhlZGVkZWQwMCwgMHgwZTBlMGUwMCwgMHg0ZjRmNGYwMCwgMHg0ZTRlNGUwMCwKKwkweDFkMWQxZDAwLCAweDY1NjU2NTAwLCAweDkyOTI5MjAwLCAweGJkYmRiZDAwLAorCTB4ODY4Njg2MDAsIDB4YjhiOGI4MDAsIDB4YWZhZmFmMDAsIDB4OGY4ZjhmMDAsCisJMHg3YzdjN2MwMCwgMHhlYmViZWIwMCwgMHgxZjFmMWYwMCwgMHhjZWNlY2UwMCwKKwkweDNlM2UzZTAwLCAweDMwMzAzMDAwLCAweGRjZGNkYzAwLCAweDVmNWY1ZjAwLAorCTB4NWU1ZTVlMDAsIDB4YzVjNWM1MDAsIDB4MGIwYjBiMDAsIDB4MWExYTFhMDAsCisJMHhhNmE2YTYwMCwgMHhlMWUxZTEwMCwgMHgzOTM5MzkwMCwgMHhjYWNhY2EwMCwKKwkweGQ1ZDVkNTAwLCAweDQ3NDc0NzAwLCAweDVkNWQ1ZDAwLCAweDNkM2QzZDAwLAorCTB4ZDlkOWQ5MDAsIDB4MDEwMTAxMDAsIDB4NWE1YTVhMDAsIDB4ZDZkNmQ2MDAsCisJMHg1MTUxNTEwMCwgMHg1NjU2NTYwMCwgMHg2YzZjNmMwMCwgMHg0ZDRkNGQwMCwKKwkweDhiOGI4YjAwLCAweDBkMGQwZDAwLCAweDlhOWE5YTAwLCAweDY2NjY2NjAwLAorCTB4ZmJmYmZiMDAsIDB4Y2NjY2NjMDAsIDB4YjBiMGIwMDAsIDB4MmQyZDJkMDAsCisJMHg3NDc0NzQwMCwgMHgxMjEyMTIwMCwgMHgyYjJiMmIwMCwgMHgyMDIwMjAwMCwKKwkweGYwZjBmMDAwLCAweGIxYjFiMTAwLCAweDg0ODQ4NDAwLCAweDk5OTk5OTAwLAorCTB4ZGZkZmRmMDAsIDB4NGM0YzRjMDAsIDB4Y2JjYmNiMDAsIDB4YzJjMmMyMDAsCisJMHgzNDM0MzQwMCwgMHg3ZTdlN2UwMCwgMHg3Njc2NzYwMCwgMHgwNTA1MDUwMCwKKwkweDZkNmQ2ZDAwLCAweGI3YjdiNzAwLCAweGE5YTlhOTAwLCAweDMxMzEzMTAwLAorCTB4ZDFkMWQxMDAsIDB4MTcxNzE3MDAsIDB4MDQwNDA0MDAsIDB4ZDdkN2Q3MDAsCisJMHgxNDE0MTQwMCwgMHg1ODU4NTgwMCwgMHgzYTNhM2EwMCwgMHg2MTYxNjEwMCwKKwkweGRlZGVkZTAwLCAweDFiMWIxYjAwLCAweDExMTExMTAwLCAweDFjMWMxYzAwLAorCTB4MzIzMjMyMDAsIDB4MGYwZjBmMDAsIDB4OWM5YzljMDAsIDB4MTYxNjE2MDAsCisJMHg1MzUzNTMwMCwgMHgxODE4MTgwMCwgMHhmMmYyZjIwMCwgMHgyMjIyMjIwMCwKKwkweGZlZmVmZTAwLCAweDQ0NDQ0NDAwLCAweGNmY2ZjZjAwLCAweGIyYjJiMjAwLAorCTB4YzNjM2MzMDAsIDB4YjViNWI1MDAsIDB4N2E3YTdhMDAsIDB4OTE5MTkxMDAsCisJMHgyNDI0MjQwMCwgMHgwODA4MDgwMCwgMHhlOGU4ZTgwMCwgMHhhOGE4YTgwMCwKKwkweDYwNjA2MDAwLCAweGZjZmNmYzAwLCAweDY5Njk2OTAwLCAweDUwNTA1MDAwLAorCTB4YWFhYWFhMDAsIDB4ZDBkMGQwMDAsIDB4YTBhMGEwMDAsIDB4N2Q3ZDdkMDAsCisJMHhhMWExYTEwMCwgMHg4OTg5ODkwMCwgMHg2MjYyNjIwMCwgMHg5Nzk3OTcwMCwKKwkweDU0NTQ1NDAwLCAweDViNWI1YjAwLCAweDFlMWUxZTAwLCAweDk1OTU5NTAwLAorCTB4ZTBlMGUwMDAsIDB4ZmZmZmZmMDAsIDB4NjQ2NDY0MDAsIDB4ZDJkMmQyMDAsCisJMHgxMDEwMTAwMCwgMHhjNGM0YzQwMCwgMHgwMDAwMDAwMCwgMHg0ODQ4NDgwMCwKKwkweGEzYTNhMzAwLCAweGY3ZjdmNzAwLCAweDc1NzU3NTAwLCAweGRiZGJkYjAwLAorCTB4OGE4YThhMDAsIDB4MDMwMzAzMDAsIDB4ZTZlNmU2MDAsIDB4ZGFkYWRhMDAsCisJMHgwOTA5MDkwMCwgMHgzZjNmM2YwMCwgMHhkZGRkZGQwMCwgMHg5NDk0OTQwMCwKKwkweDg3ODc4NzAwLCAweDVjNWM1YzAwLCAweDgzODM4MzAwLCAweDAyMDIwMjAwLAorCTB4Y2RjZGNkMDAsIDB4NGE0YTRhMDAsIDB4OTA5MDkwMDAsIDB4MzMzMzMzMDAsCisJMHg3MzczNzMwMCwgMHg2NzY3NjcwMCwgMHhmNmY2ZjYwMCwgMHhmM2YzZjMwMCwKKwkweDlkOWQ5ZDAwLCAweDdmN2Y3ZjAwLCAweGJmYmZiZjAwLCAweGUyZTJlMjAwLAorCTB4NTI1MjUyMDAsIDB4OWI5YjliMDAsIDB4ZDhkOGQ4MDAsIDB4MjYyNjI2MDAsCisJMHhjOGM4YzgwMCwgMHgzNzM3MzcwMCwgMHhjNmM2YzYwMCwgMHgzYjNiM2IwMCwKKwkweDgxODE4MTAwLCAweDk2OTY5NjAwLCAweDZmNmY2ZjAwLCAweDRiNGI0YjAwLAorCTB4MTMxMzEzMDAsIDB4YmViZWJlMDAsIDB4NjM2MzYzMDAsIDB4MmUyZTJlMDAsCisJMHhlOWU5ZTkwMCwgMHg3OTc5NzkwMCwgMHhhN2E3YTcwMCwgMHg4YzhjOGMwMCwKKwkweDlmOWY5ZjAwLCAweDZlNmU2ZTAwLCAweGJjYmNiYzAwLCAweDhlOGU4ZTAwLAorCTB4MjkyOTI5MDAsIDB4ZjVmNWY1MDAsIDB4ZjlmOWY5MDAsIDB4YjZiNmI2MDAsCisJMHgyZjJmMmYwMCwgMHhmZGZkZmQwMCwgMHhiNGI0YjQwMCwgMHg1OTU5NTkwMCwKKwkweDc4Nzg3ODAwLCAweDk4OTg5ODAwLCAweDA2MDYwNjAwLCAweDZhNmE2YTAwLAorCTB4ZTdlN2U3MDAsIDB4NDY0NjQ2MDAsIDB4NzE3MTcxMDAsIDB4YmFiYWJhMDAsCisJMHhkNGQ0ZDQwMCwgMHgyNTI1MjUwMCwgMHhhYmFiYWIwMCwgMHg0MjQyNDIwMCwKKwkweDg4ODg4ODAwLCAweGEyYTJhMjAwLCAweDhkOGQ4ZDAwLCAweGZhZmFmYTAwLAorCTB4NzI3MjcyMDAsIDB4MDcwNzA3MDAsIDB4YjliOWI5MDAsIDB4NTU1NTU1MDAsCisJMHhmOGY4ZjgwMCwgMHhlZWVlZWUwMCwgMHhhY2FjYWMwMCwgMHgwYTBhMGEwMCwKKwkweDM2MzYzNjAwLCAweDQ5NDk0OTAwLCAweDJhMmEyYTAwLCAweDY4Njg2ODAwLAorCTB4M2MzYzNjMDAsIDB4MzgzODM4MDAsIDB4ZjFmMWYxMDAsIDB4YTRhNGE0MDAsCisJMHg0MDQwNDAwMCwgMHgyODI4MjgwMCwgMHhkM2QzZDMwMCwgMHg3YjdiN2IwMCwKKwkweGJiYmJiYjAwLCAweGM5YzljOTAwLCAweDQzNDM0MzAwLCAweGMxYzFjMTAwLAorCTB4MTUxNTE1MDAsIDB4ZTNlM2UzMDAsIDB4YWRhZGFkMDAsIDB4ZjRmNGY0MDAsCisJMHg3Nzc3NzcwMCwgMHhjN2M3YzcwMCwgMHg4MDgwODAwMCwgMHg5ZTllOWUwMCwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3AwMjIyWzI1Nl0gPSB7Ci0JMHgwMGUwZTBlMCwweDAwMDUwNTA1LDB4MDA1ODU4NTgsMHgwMGQ5ZDlkOSwKLQkweDAwNjc2NzY3LDB4MDA0ZTRlNGUsMHgwMDgxODE4MSwweDAwY2JjYmNiLAotCTB4MDBjOWM5YzksMHgwMDBiMGIwYiwweDAwYWVhZWFlLDB4MDA2YTZhNmEsCi0JMHgwMGQ1ZDVkNSwweDAwMTgxODE4LDB4MDA1ZDVkNWQsMHgwMDgyODI4MiwKLQkweDAwNDY0NjQ2LDB4MDBkZmRmZGYsMHgwMGQ2ZDZkNiwweDAwMjcyNzI3LAotCTB4MDA4YThhOGEsMHgwMDMyMzIzMiwweDAwNGI0YjRiLDB4MDA0MjQyNDIsCi0JMHgwMGRiZGJkYiwweDAwMWMxYzFjLDB4MDA5ZTllOWUsMHgwMDljOWM5YywKLQkweDAwM2EzYTNhLDB4MDBjYWNhY2EsMHgwMDI1MjUyNSwweDAwN2I3YjdiLAotCTB4MDAwZDBkMGQsMHgwMDcxNzE3MSwweDAwNWY1ZjVmLDB4MDAxZjFmMWYsCi0JMHgwMGY4ZjhmOCwweDAwZDdkN2Q3LDB4MDAzZTNlM2UsMHgwMDlkOWQ5ZCwKLQkweDAwN2M3YzdjLDB4MDA2MDYwNjAsMHgwMGI5YjliOSwweDAwYmViZWJlLAotCTB4MDBiY2JjYmMsMHgwMDhiOGI4YiwweDAwMTYxNjE2LDB4MDAzNDM0MzQsCi0JMHgwMDRkNGQ0ZCwweDAwYzNjM2MzLDB4MDA3MjcyNzIsMHgwMDk1OTU5NSwKLQkweDAwYWJhYmFiLDB4MDA4ZThlOGUsMHgwMGJhYmFiYSwweDAwN2E3YTdhLAotCTB4MDBiM2IzYjMsMHgwMDAyMDIwMiwweDAwYjRiNGI0LDB4MDBhZGFkYWQsCi0JMHgwMGEyYTJhMiwweDAwYWNhY2FjLDB4MDBkOGQ4ZDgsMHgwMDlhOWE5YSwKLQkweDAwMTcxNzE3LDB4MDAxYTFhMWEsMHgwMDM1MzUzNSwweDAwY2NjY2NjLAotCTB4MDBmN2Y3ZjcsMHgwMDk5OTk5OSwweDAwNjE2MTYxLDB4MDA1YTVhNWEsCi0JMHgwMGU4ZThlOCwweDAwMjQyNDI0LDB4MDA1NjU2NTYsMHgwMDQwNDA0MCwKLQkweDAwZTFlMWUxLDB4MDA2MzYzNjMsMHgwMDA5MDkwOSwweDAwMzMzMzMzLAotCTB4MDBiZmJmYmYsMHgwMDk4OTg5OCwweDAwOTc5Nzk3LDB4MDA4NTg1ODUsCi0JMHgwMDY4Njg2OCwweDAwZmNmY2ZjLDB4MDBlY2VjZWMsMHgwMDBhMGEwYSwKLQkweDAwZGFkYWRhLDB4MDA2ZjZmNmYsMHgwMDUzNTM1MywweDAwNjI2MjYyLAotCTB4MDBhM2EzYTMsMHgwMDJlMmUyZSwweDAwMDgwODA4LDB4MDBhZmFmYWYsCi0JMHgwMDI4MjgyOCwweDAwYjBiMGIwLDB4MDA3NDc0NzQsMHgwMGMyYzJjMiwKLQkweDAwYmRiZGJkLDB4MDAzNjM2MzYsMHgwMDIyMjIyMiwweDAwMzgzODM4LAotCTB4MDA2NDY0NjQsMHgwMDFlMWUxZSwweDAwMzkzOTM5LDB4MDAyYzJjMmMsCi0JMHgwMGE2YTZhNiwweDAwMzAzMDMwLDB4MDBlNWU1ZTUsMHgwMDQ0NDQ0NCwKLQkweDAwZmRmZGZkLDB4MDA4ODg4ODgsMHgwMDlmOWY5ZiwweDAwNjU2NTY1LAotCTB4MDA4Nzg3ODcsMHgwMDZiNmI2YiwweDAwZjRmNGY0LDB4MDAyMzIzMjMsCi0JMHgwMDQ4NDg0OCwweDAwMTAxMDEwLDB4MDBkMWQxZDEsMHgwMDUxNTE1MSwKLQkweDAwYzBjMGMwLDB4MDBmOWY5ZjksMHgwMGQyZDJkMiwweDAwYTBhMGEwLAotCTB4MDA1NTU1NTUsMHgwMGExYTFhMSwweDAwNDE0MTQxLDB4MDBmYWZhZmEsCi0JMHgwMDQzNDM0MywweDAwMTMxMzEzLDB4MDBjNGM0YzQsMHgwMDJmMmYyZiwKLQkweDAwYThhOGE4LDB4MDBiNmI2YjYsMHgwMDNjM2MzYywweDAwMmIyYjJiLAotCTB4MDBjMWMxYzEsMHgwMGZmZmZmZiwweDAwYzhjOGM4LDB4MDBhNWE1YTUsCi0JMHgwMDIwMjAyMCwweDAwODk4OTg5LDB4MDAwMDAwMDAsMHgwMDkwOTA5MCwKLQkweDAwNDc0NzQ3LDB4MDBlZmVmZWYsMHgwMGVhZWFlYSwweDAwYjdiN2I3LAotCTB4MDAxNTE1MTUsMHgwMDA2MDYwNiwweDAwY2RjZGNkLDB4MDBiNWI1YjUsCi0JMHgwMDEyMTIxMiwweDAwN2U3ZTdlLDB4MDBiYmJiYmIsMHgwMDI5MjkyOSwKLQkweDAwMGYwZjBmLDB4MDBiOGI4YjgsMHgwMDA3MDcwNywweDAwMDQwNDA0LAotCTB4MDA5YjliOWIsMHgwMDk0OTQ5NCwweDAwMjEyMTIxLDB4MDA2NjY2NjYsCi0JMHgwMGU2ZTZlNiwweDAwY2VjZWNlLDB4MDBlZGVkZWQsMHgwMGU3ZTdlNywKLQkweDAwM2IzYjNiLDB4MDBmZWZlZmUsMHgwMDdmN2Y3ZiwweDAwYzVjNWM1LAotCTB4MDBhNGE0YTQsMHgwMDM3MzczNywweDAwYjFiMWIxLDB4MDA0YzRjNGMsCi0JMHgwMDkxOTE5MSwweDAwNmU2ZTZlLDB4MDA4ZDhkOGQsMHgwMDc2NzY3NiwKLQkweDAwMDMwMzAzLDB4MDAyZDJkMmQsMHgwMGRlZGVkZSwweDAwOTY5Njk2LAotCTB4MDAyNjI2MjYsMHgwMDdkN2Q3ZCwweDAwYzZjNmM2LDB4MDA1YzVjNWMsCi0JMHgwMGQzZDNkMywweDAwZjJmMmYyLDB4MDA0ZjRmNGYsMHgwMDE5MTkxOSwKLQkweDAwM2YzZjNmLDB4MDBkY2RjZGMsMHgwMDc5Nzk3OSwweDAwMWQxZDFkLAotCTB4MDA1MjUyNTIsMHgwMGViZWJlYiwweDAwZjNmM2YzLDB4MDA2ZDZkNmQsCi0JMHgwMDVlNWU1ZSwweDAwZmJmYmZiLDB4MDA2OTY5NjksMHgwMGIyYjJiMiwKLQkweDAwZjBmMGYwLDB4MDAzMTMxMzEsMHgwMDBjMGMwYywweDAwZDRkNGQ0LAotCTB4MDBjZmNmY2YsMHgwMDhjOGM4YywweDAwZTJlMmUyLDB4MDA3NTc1NzUsCi0JMHgwMGE5YTlhOSwweDAwNGE0YTRhLDB4MDA1NzU3NTcsMHgwMDg0ODQ4NCwKLQkweDAwMTExMTExLDB4MDA0NTQ1NDUsMHgwMDFiMWIxYiwweDAwZjVmNWY1LAotCTB4MDBlNGU0ZTQsMHgwMDBlMGUwZSwweDAwNzM3MzczLDB4MDBhYWFhYWEsCi0JMHgwMGYxZjFmMSwweDAwZGRkZGRkLDB4MDA1OTU5NTksMHgwMDE0MTQxNCwKLQkweDAwNmM2YzZjLDB4MDA5MjkyOTIsMHgwMDU0NTQ1NCwweDAwZDBkMGQwLAotCTB4MDA3ODc4NzgsMHgwMDcwNzA3MCwweDAwZTNlM2UzLDB4MDA0OTQ5NDksCi0JMHgwMDgwODA4MCwweDAwNTA1MDUwLDB4MDBhN2E3YTcsMHgwMGY2ZjZmNiwKLQkweDAwNzc3Nzc3LDB4MDA5MzkzOTMsMHgwMDg2ODY4NiwweDAwODM4MzgzLAotCTB4MDAyYTJhMmEsMHgwMGM3YzdjNywweDAwNWI1YjViLDB4MDBlOWU5ZTksCi0JMHgwMGVlZWVlZSwweDAwOGY4ZjhmLDB4MDAwMTAxMDEsMHgwMDNkM2QzZCwKKwkweDAwZTBlMGUwLCAweDAwMDUwNTA1LCAweDAwNTg1ODU4LCAweDAwZDlkOWQ5LAorCTB4MDA2NzY3NjcsIDB4MDA0ZTRlNGUsIDB4MDA4MTgxODEsIDB4MDBjYmNiY2IsCisJMHgwMGM5YzljOSwgMHgwMDBiMGIwYiwgMHgwMGFlYWVhZSwgMHgwMDZhNmE2YSwKKwkweDAwZDVkNWQ1LCAweDAwMTgxODE4LCAweDAwNWQ1ZDVkLCAweDAwODI4MjgyLAorCTB4MDA0NjQ2NDYsIDB4MDBkZmRmZGYsIDB4MDBkNmQ2ZDYsIDB4MDAyNzI3MjcsCisJMHgwMDhhOGE4YSwgMHgwMDMyMzIzMiwgMHgwMDRiNGI0YiwgMHgwMDQyNDI0MiwKKwkweDAwZGJkYmRiLCAweDAwMWMxYzFjLCAweDAwOWU5ZTllLCAweDAwOWM5YzljLAorCTB4MDAzYTNhM2EsIDB4MDBjYWNhY2EsIDB4MDAyNTI1MjUsIDB4MDA3YjdiN2IsCisJMHgwMDBkMGQwZCwgMHgwMDcxNzE3MSwgMHgwMDVmNWY1ZiwgMHgwMDFmMWYxZiwKKwkweDAwZjhmOGY4LCAweDAwZDdkN2Q3LCAweDAwM2UzZTNlLCAweDAwOWQ5ZDlkLAorCTB4MDA3YzdjN2MsIDB4MDA2MDYwNjAsIDB4MDBiOWI5YjksIDB4MDBiZWJlYmUsCisJMHgwMGJjYmNiYywgMHgwMDhiOGI4YiwgMHgwMDE2MTYxNiwgMHgwMDM0MzQzNCwKKwkweDAwNGQ0ZDRkLCAweDAwYzNjM2MzLCAweDAwNzI3MjcyLCAweDAwOTU5NTk1LAorCTB4MDBhYmFiYWIsIDB4MDA4ZThlOGUsIDB4MDBiYWJhYmEsIDB4MDA3YTdhN2EsCisJMHgwMGIzYjNiMywgMHgwMDAyMDIwMiwgMHgwMGI0YjRiNCwgMHgwMGFkYWRhZCwKKwkweDAwYTJhMmEyLCAweDAwYWNhY2FjLCAweDAwZDhkOGQ4LCAweDAwOWE5YTlhLAorCTB4MDAxNzE3MTcsIDB4MDAxYTFhMWEsIDB4MDAzNTM1MzUsIDB4MDBjY2NjY2MsCisJMHgwMGY3ZjdmNywgMHgwMDk5OTk5OSwgMHgwMDYxNjE2MSwgMHgwMDVhNWE1YSwKKwkweDAwZThlOGU4LCAweDAwMjQyNDI0LCAweDAwNTY1NjU2LCAweDAwNDA0MDQwLAorCTB4MDBlMWUxZTEsIDB4MDA2MzYzNjMsIDB4MDAwOTA5MDksIDB4MDAzMzMzMzMsCisJMHgwMGJmYmZiZiwgMHgwMDk4OTg5OCwgMHgwMDk3OTc5NywgMHgwMDg1ODU4NSwKKwkweDAwNjg2ODY4LCAweDAwZmNmY2ZjLCAweDAwZWNlY2VjLCAweDAwMGEwYTBhLAorCTB4MDBkYWRhZGEsIDB4MDA2ZjZmNmYsIDB4MDA1MzUzNTMsIDB4MDA2MjYyNjIsCisJMHgwMGEzYTNhMywgMHgwMDJlMmUyZSwgMHgwMDA4MDgwOCwgMHgwMGFmYWZhZiwKKwkweDAwMjgyODI4LCAweDAwYjBiMGIwLCAweDAwNzQ3NDc0LCAweDAwYzJjMmMyLAorCTB4MDBiZGJkYmQsIDB4MDAzNjM2MzYsIDB4MDAyMjIyMjIsIDB4MDAzODM4MzgsCisJMHgwMDY0NjQ2NCwgMHgwMDFlMWUxZSwgMHgwMDM5MzkzOSwgMHgwMDJjMmMyYywKKwkweDAwYTZhNmE2LCAweDAwMzAzMDMwLCAweDAwZTVlNWU1LCAweDAwNDQ0NDQ0LAorCTB4MDBmZGZkZmQsIDB4MDA4ODg4ODgsIDB4MDA5ZjlmOWYsIDB4MDA2NTY1NjUsCisJMHgwMDg3ODc4NywgMHgwMDZiNmI2YiwgMHgwMGY0ZjRmNCwgMHgwMDIzMjMyMywKKwkweDAwNDg0ODQ4LCAweDAwMTAxMDEwLCAweDAwZDFkMWQxLCAweDAwNTE1MTUxLAorCTB4MDBjMGMwYzAsIDB4MDBmOWY5ZjksIDB4MDBkMmQyZDIsIDB4MDBhMGEwYTAsCisJMHgwMDU1NTU1NSwgMHgwMGExYTFhMSwgMHgwMDQxNDE0MSwgMHgwMGZhZmFmYSwKKwkweDAwNDM0MzQzLCAweDAwMTMxMzEzLCAweDAwYzRjNGM0LCAweDAwMmYyZjJmLAorCTB4MDBhOGE4YTgsIDB4MDBiNmI2YjYsIDB4MDAzYzNjM2MsIDB4MDAyYjJiMmIsCisJMHgwMGMxYzFjMSwgMHgwMGZmZmZmZiwgMHgwMGM4YzhjOCwgMHgwMGE1YTVhNSwKKwkweDAwMjAyMDIwLCAweDAwODk4OTg5LCAweDAwMDAwMDAwLCAweDAwOTA5MDkwLAorCTB4MDA0NzQ3NDcsIDB4MDBlZmVmZWYsIDB4MDBlYWVhZWEsIDB4MDBiN2I3YjcsCisJMHgwMDE1MTUxNSwgMHgwMDA2MDYwNiwgMHgwMGNkY2RjZCwgMHgwMGI1YjViNSwKKwkweDAwMTIxMjEyLCAweDAwN2U3ZTdlLCAweDAwYmJiYmJiLCAweDAwMjkyOTI5LAorCTB4MDAwZjBmMGYsIDB4MDBiOGI4YjgsIDB4MDAwNzA3MDcsIDB4MDAwNDA0MDQsCisJMHgwMDliOWI5YiwgMHgwMDk0OTQ5NCwgMHgwMDIxMjEyMSwgMHgwMDY2NjY2NiwKKwkweDAwZTZlNmU2LCAweDAwY2VjZWNlLCAweDAwZWRlZGVkLCAweDAwZTdlN2U3LAorCTB4MDAzYjNiM2IsIDB4MDBmZWZlZmUsIDB4MDA3ZjdmN2YsIDB4MDBjNWM1YzUsCisJMHgwMGE0YTRhNCwgMHgwMDM3MzczNywgMHgwMGIxYjFiMSwgMHgwMDRjNGM0YywKKwkweDAwOTE5MTkxLCAweDAwNmU2ZTZlLCAweDAwOGQ4ZDhkLCAweDAwNzY3Njc2LAorCTB4MDAwMzAzMDMsIDB4MDAyZDJkMmQsIDB4MDBkZWRlZGUsIDB4MDA5Njk2OTYsCisJMHgwMDI2MjYyNiwgMHgwMDdkN2Q3ZCwgMHgwMGM2YzZjNiwgMHgwMDVjNWM1YywKKwkweDAwZDNkM2QzLCAweDAwZjJmMmYyLCAweDAwNGY0ZjRmLCAweDAwMTkxOTE5LAorCTB4MDAzZjNmM2YsIDB4MDBkY2RjZGMsIDB4MDA3OTc5NzksIDB4MDAxZDFkMWQsCisJMHgwMDUyNTI1MiwgMHgwMGViZWJlYiwgMHgwMGYzZjNmMywgMHgwMDZkNmQ2ZCwKKwkweDAwNWU1ZTVlLCAweDAwZmJmYmZiLCAweDAwNjk2OTY5LCAweDAwYjJiMmIyLAorCTB4MDBmMGYwZjAsIDB4MDAzMTMxMzEsIDB4MDAwYzBjMGMsIDB4MDBkNGQ0ZDQsCisJMHgwMGNmY2ZjZiwgMHgwMDhjOGM4YywgMHgwMGUyZTJlMiwgMHgwMDc1NzU3NSwKKwkweDAwYTlhOWE5LCAweDAwNGE0YTRhLCAweDAwNTc1NzU3LCAweDAwODQ4NDg0LAorCTB4MDAxMTExMTEsIDB4MDA0NTQ1NDUsIDB4MDAxYjFiMWIsIDB4MDBmNWY1ZjUsCisJMHgwMGU0ZTRlNCwgMHgwMDBlMGUwZSwgMHgwMDczNzM3MywgMHgwMGFhYWFhYSwKKwkweDAwZjFmMWYxLCAweDAwZGRkZGRkLCAweDAwNTk1OTU5LCAweDAwMTQxNDE0LAorCTB4MDA2YzZjNmMsIDB4MDA5MjkyOTIsIDB4MDA1NDU0NTQsIDB4MDBkMGQwZDAsCisJMHgwMDc4Nzg3OCwgMHgwMDcwNzA3MCwgMHgwMGUzZTNlMywgMHgwMDQ5NDk0OSwKKwkweDAwODA4MDgwLCAweDAwNTA1MDUwLCAweDAwYTdhN2E3LCAweDAwZjZmNmY2LAorCTB4MDA3Nzc3NzcsIDB4MDA5MzkzOTMsIDB4MDA4Njg2ODYsIDB4MDA4MzgzODMsCisJMHgwMDJhMmEyYSwgMHgwMGM3YzdjNywgMHgwMDViNWI1YiwgMHgwMGU5ZTllOSwKKwkweDAwZWVlZWVlLCAweDAwOGY4ZjhmLCAweDAwMDEwMTAxLCAweDAwM2QzZDNkLAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjYW1lbGxpYV9zcDMwMzNbMjU2XSA9IHsKLQkweDM4MDAzODM4LDB4NDEwMDQxNDEsMHgxNjAwMTYxNiwweDc2MDA3Njc2LAotCTB4ZDkwMGQ5ZDksMHg5MzAwOTM5MywweDYwMDA2MDYwLDB4ZjIwMGYyZjIsCi0JMHg3MjAwNzI3MiwweGMyMDBjMmMyLDB4YWIwMGFiYWIsMHg5YTAwOWE5YSwKLQkweDc1MDA3NTc1LDB4MDYwMDA2MDYsMHg1NzAwNTc1NywweGEwMDBhMGEwLAotCTB4OTEwMDkxOTEsMHhmNzAwZjdmNywweGI1MDBiNWI1LDB4YzkwMGM5YzksCi0JMHhhMjAwYTJhMiwweDhjMDA4YzhjLDB4ZDIwMGQyZDIsMHg5MDAwOTA5MCwKLQkweGY2MDBmNmY2LDB4MDcwMDA3MDcsMHhhNzAwYTdhNywweDI3MDAyNzI3LAotCTB4OGUwMDhlOGUsMHhiMjAwYjJiMiwweDQ5MDA0OTQ5LDB4ZGUwMGRlZGUsCi0JMHg0MzAwNDM0MywweDVjMDA1YzVjLDB4ZDcwMGQ3ZDcsMHhjNzAwYzdjNywKLQkweDNlMDAzZTNlLDB4ZjUwMGY1ZjUsMHg4ZjAwOGY4ZiwweDY3MDA2NzY3LAotCTB4MWYwMDFmMWYsMHgxODAwMTgxOCwweDZlMDA2ZTZlLDB4YWYwMGFmYWYsCi0JMHgyZjAwMmYyZiwweGUyMDBlMmUyLDB4ODUwMDg1ODUsMHgwZDAwMGQwZCwKLQkweDUzMDA1MzUzLDB4ZjAwMGYwZjAsMHg5YzAwOWM5YywweDY1MDA2NTY1LAotCTB4ZWEwMGVhZWEsMHhhMzAwYTNhMywweGFlMDBhZWFlLDB4OWUwMDllOWUsCi0JMHhlYzAwZWNlYywweDgwMDA4MDgwLDB4MmQwMDJkMmQsMHg2YjAwNmI2YiwKLQkweGE4MDBhOGE4LDB4MmIwMDJiMmIsMHgzNjAwMzYzNiwweGE2MDBhNmE2LAotCTB4YzUwMGM1YzUsMHg4NjAwODY4NiwweDRkMDA0ZDRkLDB4MzMwMDMzMzMsCi0JMHhmZDAwZmRmZCwweDY2MDA2NjY2LDB4NTgwMDU4NTgsMHg5NjAwOTY5NiwKLQkweDNhMDAzYTNhLDB4MDkwMDA5MDksMHg5NTAwOTU5NSwweDEwMDAxMDEwLAotCTB4NzgwMDc4NzgsMHhkODAwZDhkOCwweDQyMDA0MjQyLDB4Y2MwMGNjY2MsCi0JMHhlZjAwZWZlZiwweDI2MDAyNjI2LDB4ZTUwMGU1ZTUsMHg2MTAwNjE2MSwKLQkweDFhMDAxYTFhLDB4M2YwMDNmM2YsMHgzYjAwM2IzYiwweDgyMDA4MjgyLAotCTB4YjYwMGI2YjYsMHhkYjAwZGJkYiwweGQ0MDBkNGQ0LDB4OTgwMDk4OTgsCi0JMHhlODAwZThlOCwweDhiMDA4YjhiLDB4MDIwMDAyMDIsMHhlYjAwZWJlYiwKLQkweDBhMDAwYTBhLDB4MmMwMDJjMmMsMHgxZDAwMWQxZCwweGIwMDBiMGIwLAotCTB4NmYwMDZmNmYsMHg4ZDAwOGQ4ZCwweDg4MDA4ODg4LDB4MGUwMDBlMGUsCi0JMHgxOTAwMTkxOSwweDg3MDA4Nzg3LDB4NGUwMDRlNGUsMHgwYjAwMGIwYiwKLQkweGE5MDBhOWE5LDB4MGMwMDBjMGMsMHg3OTAwNzk3OSwweDExMDAxMTExLAotCTB4N2YwMDdmN2YsMHgyMjAwMjIyMiwweGU3MDBlN2U3LDB4NTkwMDU5NTksCi0JMHhlMTAwZTFlMSwweGRhMDBkYWRhLDB4M2QwMDNkM2QsMHhjODAwYzhjOCwKLQkweDEyMDAxMjEyLDB4MDQwMDA0MDQsMHg3NDAwNzQ3NCwweDU0MDA1NDU0LAotCTB4MzAwMDMwMzAsMHg3ZTAwN2U3ZSwweGI0MDBiNGI0LDB4MjgwMDI4MjgsCi0JMHg1NTAwNTU1NSwweDY4MDA2ODY4LDB4NTAwMDUwNTAsMHhiZTAwYmViZSwKLQkweGQwMDBkMGQwLDB4YzQwMGM0YzQsMHgzMTAwMzEzMSwweGNiMDBjYmNiLAotCTB4MmEwMDJhMmEsMHhhZDAwYWRhZCwweDBmMDAwZjBmLDB4Y2EwMGNhY2EsCi0JMHg3MDAwNzA3MCwweGZmMDBmZmZmLDB4MzIwMDMyMzIsMHg2OTAwNjk2OSwKLQkweDA4MDAwODA4LDB4NjIwMDYyNjIsMHgwMDAwMDAwMCwweDI0MDAyNDI0LAotCTB4ZDEwMGQxZDEsMHhmYjAwZmJmYiwweGJhMDBiYWJhLDB4ZWQwMGVkZWQsCi0JMHg0NTAwNDU0NSwweDgxMDA4MTgxLDB4NzMwMDczNzMsMHg2ZDAwNmQ2ZCwKLQkweDg0MDA4NDg0LDB4OWYwMDlmOWYsMHhlZTAwZWVlZSwweDRhMDA0YTRhLAotCTB4YzMwMGMzYzMsMHgyZTAwMmUyZSwweGMxMDBjMWMxLDB4MDEwMDAxMDEsCi0JMHhlNjAwZTZlNiwweDI1MDAyNTI1LDB4NDgwMDQ4NDgsMHg5OTAwOTk5OSwKLQkweGI5MDBiOWI5LDB4YjMwMGIzYjMsMHg3YjAwN2I3YiwweGY5MDBmOWY5LAotCTB4Y2UwMGNlY2UsMHhiZjAwYmZiZiwweGRmMDBkZmRmLDB4NzEwMDcxNzEsCi0JMHgyOTAwMjkyOSwweGNkMDBjZGNkLDB4NmMwMDZjNmMsMHgxMzAwMTMxMywKLQkweDY0MDA2NDY0LDB4OWIwMDliOWIsMHg2MzAwNjM2MywweDlkMDA5ZDlkLAotCTB4YzAwMGMwYzAsMHg0YjAwNGI0YiwweGI3MDBiN2I3LDB4YTUwMGE1YTUsCi0JMHg4OTAwODk4OSwweDVmMDA1ZjVmLDB4YjEwMGIxYjEsMHgxNzAwMTcxNywKLQkweGY0MDBmNGY0LDB4YmMwMGJjYmMsMHhkMzAwZDNkMywweDQ2MDA0NjQ2LAotCTB4Y2YwMGNmY2YsMHgzNzAwMzczNywweDVlMDA1ZTVlLDB4NDcwMDQ3NDcsCi0JMHg5NDAwOTQ5NCwweGZhMDBmYWZhLDB4ZmMwMGZjZmMsMHg1YjAwNWI1YiwKLQkweDk3MDA5Nzk3LDB4ZmUwMGZlZmUsMHg1YTAwNWE1YSwweGFjMDBhY2FjLAotCTB4M2MwMDNjM2MsMHg0YzAwNGM0YywweDAzMDAwMzAzLDB4MzUwMDM1MzUsCi0JMHhmMzAwZjNmMywweDIzMDAyMzIzLDB4YjgwMGI4YjgsMHg1ZDAwNWQ1ZCwKLQkweDZhMDA2YTZhLDB4OTIwMDkyOTIsMHhkNTAwZDVkNSwweDIxMDAyMTIxLAotCTB4NDQwMDQ0NDQsMHg1MTAwNTE1MSwweGM2MDBjNmM2LDB4N2QwMDdkN2QsCi0JMHgzOTAwMzkzOSwweDgzMDA4MzgzLDB4ZGMwMGRjZGMsMHhhYTAwYWFhYSwKLQkweDdjMDA3YzdjLDB4NzcwMDc3NzcsMHg1NjAwNTY1NiwweDA1MDAwNTA1LAotCTB4MWIwMDFiMWIsMHhhNDAwYTRhNCwweDE1MDAxNTE1LDB4MzQwMDM0MzQsCi0JMHgxZTAwMWUxZSwweDFjMDAxYzFjLDB4ZjgwMGY4ZjgsMHg1MjAwNTI1MiwKLQkweDIwMDAyMDIwLDB4MTQwMDE0MTQsMHhlOTAwZTllOSwweGJkMDBiZGJkLAotCTB4ZGQwMGRkZGQsMHhlNDAwZTRlNCwweGExMDBhMWExLDB4ZTAwMGUwZTAsCi0JMHg4YTAwOGE4YSwweGYxMDBmMWYxLDB4ZDYwMGQ2ZDYsMHg3YTAwN2E3YSwKLQkweGJiMDBiYmJiLDB4ZTMwMGUzZTMsMHg0MDAwNDA0MCwweDRmMDA0ZjRmLAorCTB4MzgwMDM4MzgsIDB4NDEwMDQxNDEsIDB4MTYwMDE2MTYsIDB4NzYwMDc2NzYsCisJMHhkOTAwZDlkOSwgMHg5MzAwOTM5MywgMHg2MDAwNjA2MCwgMHhmMjAwZjJmMiwKKwkweDcyMDA3MjcyLCAweGMyMDBjMmMyLCAweGFiMDBhYmFiLCAweDlhMDA5YTlhLAorCTB4NzUwMDc1NzUsIDB4MDYwMDA2MDYsIDB4NTcwMDU3NTcsIDB4YTAwMGEwYTAsCisJMHg5MTAwOTE5MSwgMHhmNzAwZjdmNywgMHhiNTAwYjViNSwgMHhjOTAwYzljOSwKKwkweGEyMDBhMmEyLCAweDhjMDA4YzhjLCAweGQyMDBkMmQyLCAweDkwMDA5MDkwLAorCTB4ZjYwMGY2ZjYsIDB4MDcwMDA3MDcsIDB4YTcwMGE3YTcsIDB4MjcwMDI3MjcsCisJMHg4ZTAwOGU4ZSwgMHhiMjAwYjJiMiwgMHg0OTAwNDk0OSwgMHhkZTAwZGVkZSwKKwkweDQzMDA0MzQzLCAweDVjMDA1YzVjLCAweGQ3MDBkN2Q3LCAweGM3MDBjN2M3LAorCTB4M2UwMDNlM2UsIDB4ZjUwMGY1ZjUsIDB4OGYwMDhmOGYsIDB4NjcwMDY3NjcsCisJMHgxZjAwMWYxZiwgMHgxODAwMTgxOCwgMHg2ZTAwNmU2ZSwgMHhhZjAwYWZhZiwKKwkweDJmMDAyZjJmLCAweGUyMDBlMmUyLCAweDg1MDA4NTg1LCAweDBkMDAwZDBkLAorCTB4NTMwMDUzNTMsIDB4ZjAwMGYwZjAsIDB4OWMwMDljOWMsIDB4NjUwMDY1NjUsCisJMHhlYTAwZWFlYSwgMHhhMzAwYTNhMywgMHhhZTAwYWVhZSwgMHg5ZTAwOWU5ZSwKKwkweGVjMDBlY2VjLCAweDgwMDA4MDgwLCAweDJkMDAyZDJkLCAweDZiMDA2YjZiLAorCTB4YTgwMGE4YTgsIDB4MmIwMDJiMmIsIDB4MzYwMDM2MzYsIDB4YTYwMGE2YTYsCisJMHhjNTAwYzVjNSwgMHg4NjAwODY4NiwgMHg0ZDAwNGQ0ZCwgMHgzMzAwMzMzMywKKwkweGZkMDBmZGZkLCAweDY2MDA2NjY2LCAweDU4MDA1ODU4LCAweDk2MDA5Njk2LAorCTB4M2EwMDNhM2EsIDB4MDkwMDA5MDksIDB4OTUwMDk1OTUsIDB4MTAwMDEwMTAsCisJMHg3ODAwNzg3OCwgMHhkODAwZDhkOCwgMHg0MjAwNDI0MiwgMHhjYzAwY2NjYywKKwkweGVmMDBlZmVmLCAweDI2MDAyNjI2LCAweGU1MDBlNWU1LCAweDYxMDA2MTYxLAorCTB4MWEwMDFhMWEsIDB4M2YwMDNmM2YsIDB4M2IwMDNiM2IsIDB4ODIwMDgyODIsCisJMHhiNjAwYjZiNiwgMHhkYjAwZGJkYiwgMHhkNDAwZDRkNCwgMHg5ODAwOTg5OCwKKwkweGU4MDBlOGU4LCAweDhiMDA4YjhiLCAweDAyMDAwMjAyLCAweGViMDBlYmViLAorCTB4MGEwMDBhMGEsIDB4MmMwMDJjMmMsIDB4MWQwMDFkMWQsIDB4YjAwMGIwYjAsCisJMHg2ZjAwNmY2ZiwgMHg4ZDAwOGQ4ZCwgMHg4ODAwODg4OCwgMHgwZTAwMGUwZSwKKwkweDE5MDAxOTE5LCAweDg3MDA4Nzg3LCAweDRlMDA0ZTRlLCAweDBiMDAwYjBiLAorCTB4YTkwMGE5YTksIDB4MGMwMDBjMGMsIDB4NzkwMDc5NzksIDB4MTEwMDExMTEsCisJMHg3ZjAwN2Y3ZiwgMHgyMjAwMjIyMiwgMHhlNzAwZTdlNywgMHg1OTAwNTk1OSwKKwkweGUxMDBlMWUxLCAweGRhMDBkYWRhLCAweDNkMDAzZDNkLCAweGM4MDBjOGM4LAorCTB4MTIwMDEyMTIsIDB4MDQwMDA0MDQsIDB4NzQwMDc0NzQsIDB4NTQwMDU0NTQsCisJMHgzMDAwMzAzMCwgMHg3ZTAwN2U3ZSwgMHhiNDAwYjRiNCwgMHgyODAwMjgyOCwKKwkweDU1MDA1NTU1LCAweDY4MDA2ODY4LCAweDUwMDA1MDUwLCAweGJlMDBiZWJlLAorCTB4ZDAwMGQwZDAsIDB4YzQwMGM0YzQsIDB4MzEwMDMxMzEsIDB4Y2IwMGNiY2IsCisJMHgyYTAwMmEyYSwgMHhhZDAwYWRhZCwgMHgwZjAwMGYwZiwgMHhjYTAwY2FjYSwKKwkweDcwMDA3MDcwLCAweGZmMDBmZmZmLCAweDMyMDAzMjMyLCAweDY5MDA2OTY5LAorCTB4MDgwMDA4MDgsIDB4NjIwMDYyNjIsIDB4MDAwMDAwMDAsIDB4MjQwMDI0MjQsCisJMHhkMTAwZDFkMSwgMHhmYjAwZmJmYiwgMHhiYTAwYmFiYSwgMHhlZDAwZWRlZCwKKwkweDQ1MDA0NTQ1LCAweDgxMDA4MTgxLCAweDczMDA3MzczLCAweDZkMDA2ZDZkLAorCTB4ODQwMDg0ODQsIDB4OWYwMDlmOWYsIDB4ZWUwMGVlZWUsIDB4NGEwMDRhNGEsCisJMHhjMzAwYzNjMywgMHgyZTAwMmUyZSwgMHhjMTAwYzFjMSwgMHgwMTAwMDEwMSwKKwkweGU2MDBlNmU2LCAweDI1MDAyNTI1LCAweDQ4MDA0ODQ4LCAweDk5MDA5OTk5LAorCTB4YjkwMGI5YjksIDB4YjMwMGIzYjMsIDB4N2IwMDdiN2IsIDB4ZjkwMGY5ZjksCisJMHhjZTAwY2VjZSwgMHhiZjAwYmZiZiwgMHhkZjAwZGZkZiwgMHg3MTAwNzE3MSwKKwkweDI5MDAyOTI5LCAweGNkMDBjZGNkLCAweDZjMDA2YzZjLCAweDEzMDAxMzEzLAorCTB4NjQwMDY0NjQsIDB4OWIwMDliOWIsIDB4NjMwMDYzNjMsIDB4OWQwMDlkOWQsCisJMHhjMDAwYzBjMCwgMHg0YjAwNGI0YiwgMHhiNzAwYjdiNywgMHhhNTAwYTVhNSwKKwkweDg5MDA4OTg5LCAweDVmMDA1ZjVmLCAweGIxMDBiMWIxLCAweDE3MDAxNzE3LAorCTB4ZjQwMGY0ZjQsIDB4YmMwMGJjYmMsIDB4ZDMwMGQzZDMsIDB4NDYwMDQ2NDYsCisJMHhjZjAwY2ZjZiwgMHgzNzAwMzczNywgMHg1ZTAwNWU1ZSwgMHg0NzAwNDc0NywKKwkweDk0MDA5NDk0LCAweGZhMDBmYWZhLCAweGZjMDBmY2ZjLCAweDViMDA1YjViLAorCTB4OTcwMDk3OTcsIDB4ZmUwMGZlZmUsIDB4NWEwMDVhNWEsIDB4YWMwMGFjYWMsCisJMHgzYzAwM2MzYywgMHg0YzAwNGM0YywgMHgwMzAwMDMwMywgMHgzNTAwMzUzNSwKKwkweGYzMDBmM2YzLCAweDIzMDAyMzIzLCAweGI4MDBiOGI4LCAweDVkMDA1ZDVkLAorCTB4NmEwMDZhNmEsIDB4OTIwMDkyOTIsIDB4ZDUwMGQ1ZDUsIDB4MjEwMDIxMjEsCisJMHg0NDAwNDQ0NCwgMHg1MTAwNTE1MSwgMHhjNjAwYzZjNiwgMHg3ZDAwN2Q3ZCwKKwkweDM5MDAzOTM5LCAweDgzMDA4MzgzLCAweGRjMDBkY2RjLCAweGFhMDBhYWFhLAorCTB4N2MwMDdjN2MsIDB4NzcwMDc3NzcsIDB4NTYwMDU2NTYsIDB4MDUwMDA1MDUsCisJMHgxYjAwMWIxYiwgMHhhNDAwYTRhNCwgMHgxNTAwMTUxNSwgMHgzNDAwMzQzNCwKKwkweDFlMDAxZTFlLCAweDFjMDAxYzFjLCAweGY4MDBmOGY4LCAweDUyMDA1MjUyLAorCTB4MjAwMDIwMjAsIDB4MTQwMDE0MTQsIDB4ZTkwMGU5ZTksIDB4YmQwMGJkYmQsCisJMHhkZDAwZGRkZCwgMHhlNDAwZTRlNCwgMHhhMTAwYTFhMSwgMHhlMDAwZTBlMCwKKwkweDhhMDA4YThhLCAweGYxMDBmMWYxLCAweGQ2MDBkNmQ2LCAweDdhMDA3YTdhLAorCTB4YmIwMGJiYmIsIDB4ZTMwMGUzZTMsIDB4NDAwMDQwNDAsIDB4NGYwMDRmNGYsCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNhbWVsbGlhX3NwNDQwNFsyNTZdID0gewotCTB4NzA3MDAwNzAsMHgyYzJjMDAyYywweGIzYjMwMGIzLDB4YzBjMDAwYzAsCi0JMHhlNGU0MDBlNCwweDU3NTcwMDU3LDB4ZWFlYTAwZWEsMHhhZWFlMDBhZSwKLQkweDIzMjMwMDIzLDB4NmI2YjAwNmIsMHg0NTQ1MDA0NSwweGE1YTUwMGE1LAotCTB4ZWRlZDAwZWQsMHg0ZjRmMDA0ZiwweDFkMWQwMDFkLDB4OTI5MjAwOTIsCi0JMHg4Njg2MDA4NiwweGFmYWYwMGFmLDB4N2M3YzAwN2MsMHgxZjFmMDAxZiwKLQkweDNlM2UwMDNlLDB4ZGNkYzAwZGMsMHg1ZTVlMDA1ZSwweDBiMGIwMDBiLAotCTB4YTZhNjAwYTYsMHgzOTM5MDAzOSwweGQ1ZDUwMGQ1LDB4NWQ1ZDAwNWQsCi0JMHhkOWQ5MDBkOSwweDVhNWEwMDVhLDB4NTE1MTAwNTEsMHg2YzZjMDA2YywKLQkweDhiOGIwMDhiLDB4OWE5YTAwOWEsMHhmYmZiMDBmYiwweGIwYjAwMGIwLAotCTB4NzQ3NDAwNzQsMHgyYjJiMDAyYiwweGYwZjAwMGYwLDB4ODQ4NDAwODQsCi0JMHhkZmRmMDBkZiwweGNiY2IwMGNiLDB4MzQzNDAwMzQsMHg3Njc2MDA3NiwKLQkweDZkNmQwMDZkLDB4YTlhOTAwYTksMHhkMWQxMDBkMSwweDA0MDQwMDA0LAotCTB4MTQxNDAwMTQsMHgzYTNhMDAzYSwweGRlZGUwMGRlLDB4MTExMTAwMTEsCi0JMHgzMjMyMDAzMiwweDljOWMwMDljLDB4NTM1MzAwNTMsMHhmMmYyMDBmMiwKLQkweGZlZmUwMGZlLDB4Y2ZjZjAwY2YsMHhjM2MzMDBjMywweDdhN2EwMDdhLAotCTB4MjQyNDAwMjQsMHhlOGU4MDBlOCwweDYwNjAwMDYwLDB4Njk2OTAwNjksCi0JMHhhYWFhMDBhYSwweGEwYTAwMGEwLDB4YTFhMTAwYTEsMHg2MjYyMDA2MiwKLQkweDU0NTQwMDU0LDB4MWUxZTAwMWUsMHhlMGUwMDBlMCwweDY0NjQwMDY0LAotCTB4MTAxMDAwMTAsMHgwMDAwMDAwMCwweGEzYTMwMGEzLDB4NzU3NTAwNzUsCi0JMHg4YThhMDA4YSwweGU2ZTYwMGU2LDB4MDkwOTAwMDksMHhkZGRkMDBkZCwKLQkweDg3ODcwMDg3LDB4ODM4MzAwODMsMHhjZGNkMDBjZCwweDkwOTAwMDkwLAotCTB4NzM3MzAwNzMsMHhmNmY2MDBmNiwweDlkOWQwMDlkLDB4YmZiZjAwYmYsCi0JMHg1MjUyMDA1MiwweGQ4ZDgwMGQ4LDB4YzhjODAwYzgsMHhjNmM2MDBjNiwKLQkweDgxODEwMDgxLDB4NmY2ZjAwNmYsMHgxMzEzMDAxMywweDYzNjMwMDYzLAotCTB4ZTllOTAwZTksMHhhN2E3MDBhNywweDlmOWYwMDlmLDB4YmNiYzAwYmMsCi0JMHgyOTI5MDAyOSwweGY5ZjkwMGY5LDB4MmYyZjAwMmYsMHhiNGI0MDBiNCwKLQkweDc4NzgwMDc4LDB4MDYwNjAwMDYsMHhlN2U3MDBlNywweDcxNzEwMDcxLAotCTB4ZDRkNDAwZDQsMHhhYmFiMDBhYiwweDg4ODgwMDg4LDB4OGQ4ZDAwOGQsCi0JMHg3MjcyMDA3MiwweGI5YjkwMGI5LDB4ZjhmODAwZjgsMHhhY2FjMDBhYywKLQkweDM2MzYwMDM2LDB4MmEyYTAwMmEsMHgzYzNjMDAzYywweGYxZjEwMGYxLAotCTB4NDA0MDAwNDAsMHhkM2QzMDBkMywweGJiYmIwMGJiLDB4NDM0MzAwNDMsCi0JMHgxNTE1MDAxNSwweGFkYWQwMGFkLDB4Nzc3NzAwNzcsMHg4MDgwMDA4MCwKLQkweDgyODIwMDgyLDB4ZWNlYzAwZWMsMHgyNzI3MDAyNywweGU1ZTUwMGU1LAotCTB4ODU4NTAwODUsMHgzNTM1MDAzNSwweDBjMGMwMDBjLDB4NDE0MTAwNDEsCi0JMHhlZmVmMDBlZiwweDkzOTMwMDkzLDB4MTkxOTAwMTksMHgyMTIxMDAyMSwKLQkweDBlMGUwMDBlLDB4NGU0ZTAwNGUsMHg2NTY1MDA2NSwweGJkYmQwMGJkLAotCTB4YjhiODAwYjgsMHg4ZjhmMDA4ZiwweGViZWIwMGViLDB4Y2VjZTAwY2UsCi0JMHgzMDMwMDAzMCwweDVmNWYwMDVmLDB4YzVjNTAwYzUsMHgxYTFhMDAxYSwKLQkweGUxZTEwMGUxLDB4Y2FjYTAwY2EsMHg0NzQ3MDA0NywweDNkM2QwMDNkLAotCTB4MDEwMTAwMDEsMHhkNmQ2MDBkNiwweDU2NTYwMDU2LDB4NGQ0ZDAwNGQsCi0JMHgwZDBkMDAwZCwweDY2NjYwMDY2LDB4Y2NjYzAwY2MsMHgyZDJkMDAyZCwKLQkweDEyMTIwMDEyLDB4MjAyMDAwMjAsMHhiMWIxMDBiMSwweDk5OTkwMDk5LAotCTB4NGM0YzAwNGMsMHhjMmMyMDBjMiwweDdlN2UwMDdlLDB4MDUwNTAwMDUsCi0JMHhiN2I3MDBiNywweDMxMzEwMDMxLDB4MTcxNzAwMTcsMHhkN2Q3MDBkNywKLQkweDU4NTgwMDU4LDB4NjE2MTAwNjEsMHgxYjFiMDAxYiwweDFjMWMwMDFjLAotCTB4MGYwZjAwMGYsMHgxNjE2MDAxNiwweDE4MTgwMDE4LDB4MjIyMjAwMjIsCi0JMHg0NDQ0MDA0NCwweGIyYjIwMGIyLDB4YjViNTAwYjUsMHg5MTkxMDA5MSwKLQkweDA4MDgwMDA4LDB4YThhODAwYTgsMHhmY2ZjMDBmYywweDUwNTAwMDUwLAotCTB4ZDBkMDAwZDAsMHg3ZDdkMDA3ZCwweDg5ODkwMDg5LDB4OTc5NzAwOTcsCi0JMHg1YjViMDA1YiwweDk1OTUwMDk1LDB4ZmZmZjAwZmYsMHhkMmQyMDBkMiwKLQkweGM0YzQwMGM0LDB4NDg0ODAwNDgsMHhmN2Y3MDBmNywweGRiZGIwMGRiLAotCTB4MDMwMzAwMDMsMHhkYWRhMDBkYSwweDNmM2YwMDNmLDB4OTQ5NDAwOTQsCi0JMHg1YzVjMDA1YywweDAyMDIwMDAyLDB4NGE0YTAwNGEsMHgzMzMzMDAzMywKLQkweDY3NjcwMDY3LDB4ZjNmMzAwZjMsMHg3ZjdmMDA3ZiwweGUyZTIwMGUyLAotCTB4OWI5YjAwOWIsMHgyNjI2MDAyNiwweDM3MzcwMDM3LDB4M2IzYjAwM2IsCi0JMHg5Njk2MDA5NiwweDRiNGIwMDRiLDB4YmViZTAwYmUsMHgyZTJlMDAyZSwKLQkweDc5NzkwMDc5LDB4OGM4YzAwOGMsMHg2ZTZlMDA2ZSwweDhlOGUwMDhlLAotCTB4ZjVmNTAwZjUsMHhiNmI2MDBiNiwweGZkZmQwMGZkLDB4NTk1OTAwNTksCi0JMHg5ODk4MDA5OCwweDZhNmEwMDZhLDB4NDY0NjAwNDYsMHhiYWJhMDBiYSwKLQkweDI1MjUwMDI1LDB4NDI0MjAwNDIsMHhhMmEyMDBhMiwweGZhZmEwMGZhLAotCTB4MDcwNzAwMDcsMHg1NTU1MDA1NSwweGVlZWUwMGVlLDB4MGEwYTAwMGEsCi0JMHg0OTQ5MDA0OSwweDY4NjgwMDY4LDB4MzgzODAwMzgsMHhhNGE0MDBhNCwKLQkweDI4MjgwMDI4LDB4N2I3YjAwN2IsMHhjOWM5MDBjOSwweGMxYzEwMGMxLAotCTB4ZTNlMzAwZTMsMHhmNGY0MDBmNCwweGM3YzcwMGM3LDB4OWU5ZTAwOWUsCisJMHg3MDcwMDA3MCwgMHgyYzJjMDAyYywgMHhiM2IzMDBiMywgMHhjMGMwMDBjMCwKKwkweGU0ZTQwMGU0LCAweDU3NTcwMDU3LCAweGVhZWEwMGVhLCAweGFlYWUwMGFlLAorCTB4MjMyMzAwMjMsIDB4NmI2YjAwNmIsIDB4NDU0NTAwNDUsIDB4YTVhNTAwYTUsCisJMHhlZGVkMDBlZCwgMHg0ZjRmMDA0ZiwgMHgxZDFkMDAxZCwgMHg5MjkyMDA5MiwKKwkweDg2ODYwMDg2LCAweGFmYWYwMGFmLCAweDdjN2MwMDdjLCAweDFmMWYwMDFmLAorCTB4M2UzZTAwM2UsIDB4ZGNkYzAwZGMsIDB4NWU1ZTAwNWUsIDB4MGIwYjAwMGIsCisJMHhhNmE2MDBhNiwgMHgzOTM5MDAzOSwgMHhkNWQ1MDBkNSwgMHg1ZDVkMDA1ZCwKKwkweGQ5ZDkwMGQ5LCAweDVhNWEwMDVhLCAweDUxNTEwMDUxLCAweDZjNmMwMDZjLAorCTB4OGI4YjAwOGIsIDB4OWE5YTAwOWEsIDB4ZmJmYjAwZmIsIDB4YjBiMDAwYjAsCisJMHg3NDc0MDA3NCwgMHgyYjJiMDAyYiwgMHhmMGYwMDBmMCwgMHg4NDg0MDA4NCwKKwkweGRmZGYwMGRmLCAweGNiY2IwMGNiLCAweDM0MzQwMDM0LCAweDc2NzYwMDc2LAorCTB4NmQ2ZDAwNmQsIDB4YTlhOTAwYTksIDB4ZDFkMTAwZDEsIDB4MDQwNDAwMDQsCisJMHgxNDE0MDAxNCwgMHgzYTNhMDAzYSwgMHhkZWRlMDBkZSwgMHgxMTExMDAxMSwKKwkweDMyMzIwMDMyLCAweDljOWMwMDljLCAweDUzNTMwMDUzLCAweGYyZjIwMGYyLAorCTB4ZmVmZTAwZmUsIDB4Y2ZjZjAwY2YsIDB4YzNjMzAwYzMsIDB4N2E3YTAwN2EsCisJMHgyNDI0MDAyNCwgMHhlOGU4MDBlOCwgMHg2MDYwMDA2MCwgMHg2OTY5MDA2OSwKKwkweGFhYWEwMGFhLCAweGEwYTAwMGEwLCAweGExYTEwMGExLCAweDYyNjIwMDYyLAorCTB4NTQ1NDAwNTQsIDB4MWUxZTAwMWUsIDB4ZTBlMDAwZTAsIDB4NjQ2NDAwNjQsCisJMHgxMDEwMDAxMCwgMHgwMDAwMDAwMCwgMHhhM2EzMDBhMywgMHg3NTc1MDA3NSwKKwkweDhhOGEwMDhhLCAweGU2ZTYwMGU2LCAweDA5MDkwMDA5LCAweGRkZGQwMGRkLAorCTB4ODc4NzAwODcsIDB4ODM4MzAwODMsIDB4Y2RjZDAwY2QsIDB4OTA5MDAwOTAsCisJMHg3MzczMDA3MywgMHhmNmY2MDBmNiwgMHg5ZDlkMDA5ZCwgMHhiZmJmMDBiZiwKKwkweDUyNTIwMDUyLCAweGQ4ZDgwMGQ4LCAweGM4YzgwMGM4LCAweGM2YzYwMGM2LAorCTB4ODE4MTAwODEsIDB4NmY2ZjAwNmYsIDB4MTMxMzAwMTMsIDB4NjM2MzAwNjMsCisJMHhlOWU5MDBlOSwgMHhhN2E3MDBhNywgMHg5ZjlmMDA5ZiwgMHhiY2JjMDBiYywKKwkweDI5MjkwMDI5LCAweGY5ZjkwMGY5LCAweDJmMmYwMDJmLCAweGI0YjQwMGI0LAorCTB4Nzg3ODAwNzgsIDB4MDYwNjAwMDYsIDB4ZTdlNzAwZTcsIDB4NzE3MTAwNzEsCisJMHhkNGQ0MDBkNCwgMHhhYmFiMDBhYiwgMHg4ODg4MDA4OCwgMHg4ZDhkMDA4ZCwKKwkweDcyNzIwMDcyLCAweGI5YjkwMGI5LCAweGY4ZjgwMGY4LCAweGFjYWMwMGFjLAorCTB4MzYzNjAwMzYsIDB4MmEyYTAwMmEsIDB4M2MzYzAwM2MsIDB4ZjFmMTAwZjEsCisJMHg0MDQwMDA0MCwgMHhkM2QzMDBkMywgMHhiYmJiMDBiYiwgMHg0MzQzMDA0MywKKwkweDE1MTUwMDE1LCAweGFkYWQwMGFkLCAweDc3NzcwMDc3LCAweDgwODAwMDgwLAorCTB4ODI4MjAwODIsIDB4ZWNlYzAwZWMsIDB4MjcyNzAwMjcsIDB4ZTVlNTAwZTUsCisJMHg4NTg1MDA4NSwgMHgzNTM1MDAzNSwgMHgwYzBjMDAwYywgMHg0MTQxMDA0MSwKKwkweGVmZWYwMGVmLCAweDkzOTMwMDkzLCAweDE5MTkwMDE5LCAweDIxMjEwMDIxLAorCTB4MGUwZTAwMGUsIDB4NGU0ZTAwNGUsIDB4NjU2NTAwNjUsIDB4YmRiZDAwYmQsCisJMHhiOGI4MDBiOCwgMHg4ZjhmMDA4ZiwgMHhlYmViMDBlYiwgMHhjZWNlMDBjZSwKKwkweDMwMzAwMDMwLCAweDVmNWYwMDVmLCAweGM1YzUwMGM1LCAweDFhMWEwMDFhLAorCTB4ZTFlMTAwZTEsIDB4Y2FjYTAwY2EsIDB4NDc0NzAwNDcsIDB4M2QzZDAwM2QsCisJMHgwMTAxMDAwMSwgMHhkNmQ2MDBkNiwgMHg1NjU2MDA1NiwgMHg0ZDRkMDA0ZCwKKwkweDBkMGQwMDBkLCAweDY2NjYwMDY2LCAweGNjY2MwMGNjLCAweDJkMmQwMDJkLAorCTB4MTIxMjAwMTIsIDB4MjAyMDAwMjAsIDB4YjFiMTAwYjEsIDB4OTk5OTAwOTksCisJMHg0YzRjMDA0YywgMHhjMmMyMDBjMiwgMHg3ZTdlMDA3ZSwgMHgwNTA1MDAwNSwKKwkweGI3YjcwMGI3LCAweDMxMzEwMDMxLCAweDE3MTcwMDE3LCAweGQ3ZDcwMGQ3LAorCTB4NTg1ODAwNTgsIDB4NjE2MTAwNjEsIDB4MWIxYjAwMWIsIDB4MWMxYzAwMWMsCisJMHgwZjBmMDAwZiwgMHgxNjE2MDAxNiwgMHgxODE4MDAxOCwgMHgyMjIyMDAyMiwKKwkweDQ0NDQwMDQ0LCAweGIyYjIwMGIyLCAweGI1YjUwMGI1LCAweDkxOTEwMDkxLAorCTB4MDgwODAwMDgsIDB4YThhODAwYTgsIDB4ZmNmYzAwZmMsIDB4NTA1MDAwNTAsCisJMHhkMGQwMDBkMCwgMHg3ZDdkMDA3ZCwgMHg4OTg5MDA4OSwgMHg5Nzk3MDA5NywKKwkweDViNWIwMDViLCAweDk1OTUwMDk1LCAweGZmZmYwMGZmLCAweGQyZDIwMGQyLAorCTB4YzRjNDAwYzQsIDB4NDg0ODAwNDgsIDB4ZjdmNzAwZjcsIDB4ZGJkYjAwZGIsCisJMHgwMzAzMDAwMywgMHhkYWRhMDBkYSwgMHgzZjNmMDAzZiwgMHg5NDk0MDA5NCwKKwkweDVjNWMwMDVjLCAweDAyMDIwMDAyLCAweDRhNGEwMDRhLCAweDMzMzMwMDMzLAorCTB4Njc2NzAwNjcsIDB4ZjNmMzAwZjMsIDB4N2Y3ZjAwN2YsIDB4ZTJlMjAwZTIsCisJMHg5YjliMDA5YiwgMHgyNjI2MDAyNiwgMHgzNzM3MDAzNywgMHgzYjNiMDAzYiwKKwkweDk2OTYwMDk2LCAweDRiNGIwMDRiLCAweGJlYmUwMGJlLCAweDJlMmUwMDJlLAorCTB4Nzk3OTAwNzksIDB4OGM4YzAwOGMsIDB4NmU2ZTAwNmUsIDB4OGU4ZTAwOGUsCisJMHhmNWY1MDBmNSwgMHhiNmI2MDBiNiwgMHhmZGZkMDBmZCwgMHg1OTU5MDA1OSwKKwkweDk4OTgwMDk4LCAweDZhNmEwMDZhLCAweDQ2NDYwMDQ2LCAweGJhYmEwMGJhLAorCTB4MjUyNTAwMjUsIDB4NDI0MjAwNDIsIDB4YTJhMjAwYTIsIDB4ZmFmYTAwZmEsCisJMHgwNzA3MDAwNywgMHg1NTU1MDA1NSwgMHhlZWVlMDBlZSwgMHgwYTBhMDAwYSwKKwkweDQ5NDkwMDQ5LCAweDY4NjgwMDY4LCAweDM4MzgwMDM4LCAweGE0YTQwMGE0LAorCTB4MjgyODAwMjgsIDB4N2I3YjAwN2IsIDB4YzljOTAwYzksIDB4YzFjMTAwYzEsCisJMHhlM2UzMDBlMywgMHhmNGY0MDBmNCwgMHhjN2M3MDBjNywgMHg5ZTllMDA5ZSwKIH07CiAKIApAQCAtMzQ0LDcgKzM0NCw3IEBACiAJbHIgPSAobHIgPDwgYml0cykgKyAocmwgPj4gKDMyIC0gYml0cykpOwlcCiAJcmwgPSAocmwgPDwgYml0cykgKyAocnIgPj4gKDMyIC0gYml0cykpOwlcCiAJcnIgPSAocnIgPDwgYml0cykgKyAodzAgPj4gKDMyIC0gYml0cykpOwlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUk9MRFFvMzIobGwsIGxyLCBybCwgcnIsIHcwLCB3MSwgYml0cykJCVwKICAgICBkbyB7CQkJCQkJXApAQCAtMzU0LDcgKzM1NCw3IEBACiAJbHIgPSAocmwgPDwgKGJpdHMgLSAzMikpICsgKHJyID4+ICg2NCAtIGJpdHMpKTsJXAogCXJsID0gKHJyIDw8IChiaXRzIC0gMzIpKSArICh3MCA+PiAoNjQgLSBiaXRzKSk7CVwKIAlyciA9ICh3MCA8PCAoYml0cyAtIDMyKSkgKyAodzEgPj4gKDY0IC0gYml0cykpOwlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQ0FNRUxMSUFfRih4bCwgeHIsIGtsLCBrciwgeWwsIHlyLCBpbCwgaXIsIHQwLCB0MSkJXAogICAgIGRvIHsJCQkJCQkJXApAQCAtMzczLDcgKzM3Myw3IEBACiAJeWwgXj0geXI7CQkJCQkJXAogCXlyID0gcm9yMzIoeXIsIDgpOwkJCQkJXAogCXlyIF49IHlsOwkJCQkJCVwKLSAgICB9IHdoaWxlKDApCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTVUJLRVlfTChJTkRFWCkgKHN1YmtleVsoSU5ERVgpKjJdKQogI2RlZmluZSBTVUJLRVlfUihJTkRFWCkgKHN1YmtleVsoSU5ERVgpKjIgKyAxXSkKQEAgLTgzNSw3ICs4MzUsNyBAQAogc3RhdGljIHZvaWQgY2FtZWxsaWFfc2V0dXAxOTIoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1MzIgKnN1YmtleSkKIHsKIAl1bnNpZ25lZCBjaGFyIGtrWzMyXTsKLQl1MzIga3JsbCwga3Jsciwga3JybCxrcnJyOworCXUzMiBrcmxsLCBrcmxyLCBrcnJsLCBrcnJyOwogCiAJbWVtY3B5KGtrLCBrZXksIDI0KTsKIAltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikma3JsbCwga2V5KzE2LCA0KTsKQEAgLTg2NSw3ICs4NjUsNyBAQAogCXQxIHw9IGxyOwkJCQkJCQlcCiAJbGwgXj0gdDE7CQkJCQkJCVwKIAlyciBePSByb2wzMih0MywgMSk7CQkJCQkJXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIENBTUVMTElBX1JPVU5EU00oeGwsIHhyLCBrbCwga3IsIHlsLCB5ciwgaWwsIGlyKQkJXAogICAgIGRvIHsJCQkJCQkJCVwKQEAgLTg4MSwxMiArODgxLDEyIEBACiAJaXIgXj0gaWwgXiBrcjsJCQkJCQkJXAogCXlsIF49IGlyOwkJCQkJCQlcCiAJeXIgXj0gcm9yMzIoaWwsIDgpIF4gaXI7CQkJCQkJXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogCiAvKiBtYXggPSAyNDogMTI4Yml0IGVuY3J5cHQsIG1heCA9IDMyOiAyNTZiaXQgZW5jcnlwdCAqLwogc3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZW5jcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgbWF4KQogewotCXUzMiBpbCxpcix0MCx0MTsgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGVzICovCisJdTMyIGlsLCBpciwgdDAsIHQxOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KIAogCS8qIHByZSB3aGl0ZW5pbmcgYnV0IGFic29yYiBrdzIgKi8KIAlpb1swXSBePSBTVUJLRVlfTCgwKTsKQEAgLTg5NCwzMCArODk0LDMwIEBACiAKIAkvKiBtYWluIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBST1VORFMoaSkgZG8geyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyAyKSxTVUJLRVlfUihpICsgMiksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDMpLFNVQktFWV9SKGkgKyAzKSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgNCksU1VCS0VZX1IoaSArIDQpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyA1KSxTVUJLRVlfUihpICsgNSksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDYpLFNVQktFWV9SKGkgKyA2KSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgNyksU1VCS0VZX1IoaSArIDcpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgMiksIFNVQktFWV9SKGkgKyAyKSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDMpLCBTVUJLRVlfUihpICsgMyksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyA0KSwgU1VCS0VZX1IoaSArIDQpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgNSksIFNVQktFWV9SKGkgKyA1KSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDYpLCBTVUJLRVlfUihpICsgNiksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA3KSwgU1VCS0VZX1IoaSArIDcpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCiB9IHdoaWxlICgwKQogI2RlZmluZSBGTFMoaSkgZG8geyBcCi0JQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLCBcCi0JCSAgICAgU1VCS0VZX0woaSArIDApLFNVQktFWV9SKGkgKyAwKSwgXAotCQkgICAgIFNVQktFWV9MKGkgKyAxKSxTVUJLRVlfUihpICsgMSksIFwKLQkJICAgICB0MCx0MSxpbCxpcik7IFwKKwlDQU1FTExJQV9GTFMoaW9bMF0sIGlvWzFdLCBpb1syXSwgaW9bM10sIFwKKwkJICAgICBTVUJLRVlfTChpICsgMCksIFNVQktFWV9SKGkgKyAwKSwgXAorCQkgICAgIFNVQktFWV9MKGkgKyAxKSwgU1VCS0VZX1IoaSArIDEpLCBcCisJCSAgICAgdDAsIHQxLCBpbCwgaXIpOyBcCiB9IHdoaWxlICgwKQogCiAJUk9VTkRTKDApOwpAQCAtOTQxLDcgKzk0MSw3IEBACiAKIHN0YXRpYyB2b2lkIGNhbWVsbGlhX2RvX2RlY3J5cHQoY29uc3QgdTMyICpzdWJrZXksIHUzMiAqaW8sIHVuc2lnbmVkIGkpCiB7Ci0JdTMyIGlsLGlyLHQwLHQxOyAgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KKwl1MzIgaWwsIGlyLCB0MCwgdDE7ICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqLwogCiAJLyogcHJlIHdoaXRlbmluZyBidXQgYWJzb3JiIGt3MiAqLwogCWlvWzBdIF49IFNVQktFWV9MKGkpOwpAQCAtOTQ5LDMwICs5NDksMzAgQEAKIAogCS8qIG1haW4gaXRlcmF0aW9uICovCiAjZGVmaW5lIFJPVU5EUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDcpLFNVQktFWV9SKGkgKyA3KSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgNiksU1VCS0VZX1IoaSArIDYpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyA1KSxTVUJLRVlfUihpICsgNSksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDQpLFNVQktFWV9SKGkgKyA0KSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgMyksU1VCS0VZX1IoaSArIDMpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyAyKSxTVUJLRVlfUihpICsgMiksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyA3KSwgU1VCS0VZX1IoaSArIDcpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgNiksIFNVQktFWV9SKGkgKyA2KSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDUpLCBTVUJLRVlfUihpICsgNSksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA0KSwgU1VCS0VZX1IoaSArIDQpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgMyksIFNVQktFWV9SKGkgKyAzKSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDIpLCBTVUJLRVlfUihpICsgMiksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAjZGVmaW5lIEZMUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sIFwKLQkJICAgICBTVUJLRVlfTChpICsgMSksU1VCS0VZX1IoaSArIDEpLCBcCi0JCSAgICAgU1VCS0VZX0woaSArIDApLFNVQktFWV9SKGkgKyAwKSwgXAotCQkgICAgIHQwLHQxLGlsLGlyKTsgXAorCUNBTUVMTElBX0ZMUyhpb1swXSwgaW9bMV0sIGlvWzJdLCBpb1szXSwgXAorCQkgICAgIFNVQktFWV9MKGkgKyAxKSwgU1VCS0VZX1IoaSArIDEpLCBcCisJCSAgICAgU1VCS0VZX0woaSArIDApLCBTVUJLRVlfUihpICsgMCksIFwKKwkJICAgICB0MCwgdDEsIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAKIAlpZiAoaSA9PSAzMikgewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q1LmMgYi9jcnlwdG8vY2FzdDUuYwppbmRleCA4Y2JlMjhmLi5hMWQyMjk0IDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDUuYworKysgYi9jcnlwdG8vY2FzdDUuYwpAQCAtNTY5LDEyICs1NjksMTIgQEAKIAkweGVhZWU2ODAxLCAweDhkYjJhMjgzLCAweGVhOGJmNTllCiB9OwogCi0jZGVmaW5lIEYxKEQsbSxyKSAgKCAgKEkgPSAoKG0pICsgKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkgKQotI2RlZmluZSBGMihELG0scikgICggIChJID0gKChtKSBeIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pICkKLSNkZWZpbmUgRjMoRCxtLHIpICAoICAoSSA9ICgobSkgLSAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gKyBzMlsoST4+MTYpJjB4ZmZdKSBeIHMzWyhJPj44KSYweGZmXSkgLSBzNFtJJjB4ZmZdKSApCisjZGVmaW5lIEYxKEQsIG0sIHIpICAoKEkgPSAoKG0pICsgKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkpCisjZGVmaW5lIEYyKEQsIG0sIHIpICAoKEkgPSAoKG0pIF4gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIC0gczJbKEk+PjE2KSYweGZmXSkgKyBzM1soST4+OCkmMHhmZl0pIF4gczRbSSYweGZmXSkpCisjZGVmaW5lIEYzKEQsIG0sIHIpICAoKEkgPSAoKG0pIC0gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkpCiAKIAogc3RhdGljIHZvaWQgY2FzdDVfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpCkBAIC02OTQsNyArNjk0LDcgQEAKIAlkc3RbMV0gPSBjcHVfdG9fYmUzMihsKTsKIH0KIAotc3RhdGljIHZvaWQga2V5X3NjaGVkdWxlKHUzMiAqIHgsIHUzMiAqIHosIHUzMiAqIGspCitzdGF0aWMgdm9pZCBrZXlfc2NoZWR1bGUodTMyICp4LCB1MzIgKnosIHUzMiAqaykKIHsKIAogI2RlZmluZSB4aShpKSAgICgoeFsoaSkvNF0gPj4gKDgqKDMtKChpKSU0KSkpKSAmIDB4ZmYpCmRpZmYgLS1naXQgYS9jcnlwdG8vY2FzdDYuYyBiL2NyeXB0by9jYXN0Ni5jCmluZGV4IDAwN2QwMmIuLmUwYzE1YTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jYXN0Ni5jCisrKyBiL2NyeXB0by9jYXN0Ni5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKiB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQpAQCAtMzUsMTIgKzM1LDEyIEBACiAJdTggS3JbMTJdWzRdOwogfTsKIAotI2RlZmluZSBGMShELHIsbSkgICggIChJID0gKChtKSArIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSBeIHMyWyhJPj4xNikmMHhmZl0pIC0gczNbKEk+PjgpJjB4ZmZdKSArIHM0W0kmMHhmZl0pICkKLSNkZWZpbmUgRjIoRCxyLG0pICAoICAoSSA9ICgobSkgXiAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gLSBzMlsoST4+MTYpJjB4ZmZdKSArIHMzWyhJPj44KSYweGZmXSkgXiBzNFtJJjB4ZmZdKSApCi0jZGVmaW5lIEYzKEQscixtKSAgKCAgKEkgPSAoKG0pIC0gKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkgKQorI2RlZmluZSBGMShELCByLCBtKSAgKChJID0gKChtKSArIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSBeIHMyWyhJPj4xNikmMHhmZl0pIC0gczNbKEk+PjgpJjB4ZmZdKSArIHM0W0kmMHhmZl0pKQorI2RlZmluZSBGMihELCByLCBtKSAgKChJID0gKChtKSBeIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pKQorI2RlZmluZSBGMyhELCByLCBtKSAgKChJID0gKChtKSAtIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSArIHMyWyhJPj4xNikmMHhmZl0pIF4gczNbKEk+PjgpJjB4ZmZdKSAtIHM0W0kmMHhmZl0pKQogCiBzdGF0aWMgY29uc3QgdTMyIHMxWzI1Nl0gPSB7CiAJMHgzMGZiNDBkNCwgMHg5ZmEwZmYwYiwgMHg2YmVjY2QyZiwgMHgzZjI1OGM3YSwgMHgxZTIxM2YyZiwKQEAgLTMxMiw3ICszMTIsNyBAQAogCiBzdGF0aWMgY29uc3QgdTMyIFRtWzI0XVs4XSA9IHsKIAl7IDB4NWE4Mjc5OTksIDB4Yzk1YzY1M2EsIDB4MzgzNjUwZGIsIDB4YTcxMDNjN2MsIDB4MTVlYTI4MWQsCi0JCTB4ODRjNDEzYmUsIDB4ZjM5ZGZmNWYsIDB4NjI3N2ViMDAgfSAsIAorCQkweDg0YzQxM2JlLCAweGYzOWRmZjVmLCAweDYyNzdlYjAwIH0gLAogCXsgMHhkMTUxZDZhMSwgMHg0MDJiYzI0MiwgMHhhZjA1YWRlMywgMHgxZGRmOTk4NCwgMHg4Y2I5ODUyNSwKIAkJMHhmYjkzNzBjNiwgMHg2YTZkNWM2NywgMHhkOTQ3NDgwOCB9ICwKIAl7IDB4NDgyMTMzYTksIDB4YjZmYjFmNGEsIDB4MjVkNTBhZWIsIDB4OTRhZWY2OGMsIDB4MDM4OGUyMmQsCkBAIC0zNjksNyArMzY5LDggQEAKIH07CiAKIC8qIGZvcndhcmQgb2N0YXZlICovCi1zdGF0aWMgdm9pZCBXKHUzMiAqa2V5LCB1bnNpZ25lZCBpbnQgaSkgeworc3RhdGljIHZvaWQgVyh1MzIgKmtleSwgdW5zaWduZWQgaW50IGkpCit7CiAJdTMyIEk7CiAJa2V5WzZdIF49IEYxKGtleVs3XSwgVHJbaSAlIDRdWzBdLCBUbVtpXVswXSk7CiAJa2V5WzVdIF49IEYyKGtleVs2XSwgVHJbaSAlIDRdWzFdLCBUbVtpXVsxXSk7CkBAIC0zNzcsNyArMzc4LDcgQEAKIAlrZXlbM10gXj0gRjEoa2V5WzRdLCBUcltpICUgNF1bM10sIFRtW2ldWzNdKTsKIAlrZXlbMl0gXj0gRjIoa2V5WzNdLCBUcltpICUgNF1bNF0sIFRtW2ldWzRdKTsKIAlrZXlbMV0gXj0gRjMoa2V5WzJdLCBUcltpICUgNF1bNV0sIFRtW2ldWzVdKTsKLQlrZXlbMF0gXj0gRjEoa2V5WzFdLCBUcltpICUgNF1bNl0sIFRtW2ldWzZdKTsJCisJa2V5WzBdIF49IEYxKGtleVsxXSwgVHJbaSAlIDRdWzZdLCBUbVtpXVs2XSk7CiAJa2V5WzddIF49IEYyKGtleVswXSwgVHJbaSAlIDRdWzddLCBUbVtpXVs3XSk7CiB9CiAKQEAgLTM5MywxMSArMzk0LDExIEBACiAJaWYgKGtleV9sZW4gJSA0ICE9IDApIHsKIAkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CQorCX0KIAotCW1lbXNldCAocF9rZXksIDAsIDMyKTsKLQltZW1jcHkgKHBfa2V5LCBpbl9rZXksIGtleV9sZW4pOwotCQorCW1lbXNldChwX2tleSwgMCwgMzIpOworCW1lbWNweShwX2tleSwgaW5fa2V5LCBrZXlfbGVuKTsKKwogCWtleVswXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzBdKTsJCS8qIEEgKi8KIAlrZXlbMV0gPSBiZTMyX3RvX2NwdShwX2tleVsxXSk7CQkvKiBCICovCiAJa2V5WzJdID0gYmUzMl90b19jcHUocF9rZXlbMl0pOwkJLyogQyAqLwpAQCAtNDA2LDE4ICs0MDcsMTYgQEAKIAlrZXlbNV0gPSBiZTMyX3RvX2NwdShwX2tleVs1XSk7CQkvKiBGICovCiAJa2V5WzZdID0gYmUzMl90b19jcHUocF9rZXlbNl0pOwkJLyogRyAqLwogCWtleVs3XSA9IGJlMzJfdG9fY3B1KHBfa2V5WzddKTsJCS8qIEggKi8KLQkKLQogCiAJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKLQkJVyAoa2V5LCAyICogaSk7Ci0JCVcgKGtleSwgMiAqIGkgKyAxKTsKLQkJCisJCVcoa2V5LCAyICogaSk7CisJCVcoa2V5LCAyICogaSArIDEpOworCiAJCWMtPktyW2ldWzBdID0ga2V5WzBdICYgMHgxZjsKIAkJYy0+S3JbaV1bMV0gPSBrZXlbMl0gJiAweDFmOwogCQljLT5LcltpXVsyXSA9IGtleVs0XSAmIDB4MWY7CiAJCWMtPktyW2ldWzNdID0ga2V5WzZdICYgMHgxZjsKLQkJCisKIAkJYy0+S21baV1bMF0gPSBrZXlbN107CiAJCWMtPkttW2ldWzFdID0ga2V5WzVdOwogCQljLT5LbVtpXVsyXSA9IGtleVszXTsKQEAgLTQyOCwyMSArNDI3LDIzIEBACiB9CiAKIC8qZm9yd2FyZCBxdWFkIHJvdW5kKi8KLXN0YXRpYyB2b2lkIFEgKHUzMiAqIGJsb2NrLCB1OCAqIEtyLCB1MzIgKiBLbSkgeworc3RhdGljIHZvaWQgUSh1MzIgKmJsb2NrLCB1OCAqS3IsIHUzMiAqS20pCit7CiAJdTMyIEk7CiAJYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CiAJYmxvY2tbMV0gXj0gRjIoYmxvY2tbMl0sIEtyWzFdLCBLbVsxXSk7CiAJYmxvY2tbMF0gXj0gRjMoYmxvY2tbMV0sIEtyWzJdLCBLbVsyXSk7Ci0JYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7CQkKKwlibG9ja1szXSBePSBGMShibG9ja1swXSwgS3JbM10sIEttWzNdKTsKIH0KIAogLypyZXZlcnNlIHF1YWQgcm91bmQqLwotc3RhdGljIHZvaWQgUUJBUiAodTMyICogYmxvY2ssIHU4ICogS3IsIHUzMiAqIEttKSB7CitzdGF0aWMgdm9pZCBRQkFSKHUzMiAqYmxvY2ssIHU4ICpLciwgdTMyICpLbSkKK3sKIAl1MzIgSTsKLSAgICAgICAgYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7Ci0gICAgICAgIGJsb2NrWzBdIF49IEYzKGJsb2NrWzFdLCBLclsyXSwgS21bMl0pOwotICAgICAgICBibG9ja1sxXSBePSBGMihibG9ja1syXSwgS3JbMV0sIEttWzFdKTsKLSAgICAgICAgYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CisJYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7CisJYmxvY2tbMF0gXj0gRjMoYmxvY2tbMV0sIEtyWzJdLCBLbVsyXSk7CisJYmxvY2tbMV0gXj0gRjIoYmxvY2tbMl0sIEtyWzFdLCBLbVsxXSk7CisJYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhc3Q2X2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dGJ1ZiwgY29uc3QgdTggKmluYnVmKQpAQCAtNDUxLDY0ICs0NTIsNjUgQEAKIAljb25zdCBfX2JlMzIgKnNyYyA9IChjb25zdCBfX2JlMzIgKilpbmJ1ZjsKIAlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKilvdXRidWY7CiAJdTMyIGJsb2NrWzRdOwotCXUzMiAqIEttOyAKLQl1OCAqIEtyOworCXUzMiAqS207CisJdTggKktyOwogCiAJYmxvY2tbMF0gPSBiZTMyX3RvX2NwdShzcmNbMF0pOwogCWJsb2NrWzFdID0gYmUzMl90b19jcHUoc3JjWzFdKTsKIAlibG9ja1syXSA9IGJlMzJfdG9fY3B1KHNyY1syXSk7CiAJYmxvY2tbM10gPSBiZTMyX3RvX2NwdShzcmNbM10pOwogCi0JS20gPSBjLT5LbVswXTsgS3IgPSBjLT5LclswXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsyXTsgS3IgPSBjLT5LclsyXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVszXTsgS3IgPSBjLT5LclszXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs0XTsgS3IgPSBjLT5Lcls0XTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs1XTsgS3IgPSBjLT5Lcls1XTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs2XTsgS3IgPSBjLT5Lcls2XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs3XTsgS3IgPSBjLT5Lcls3XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs4XTsgS3IgPSBjLT5Lcls4XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs5XTsgS3IgPSBjLT5Lcls5XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFFCQVIgKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bM107IEtyID0gYy0+S3JbM107IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs0XTsgS3IgPSBjLT5Lcls0XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNl07IEtyID0gYy0+S3JbNl07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs3XTsgS3IgPSBjLT5Lcls3XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUUJBUihibG9jaywgS3IsIEttKTsKIAogCWRzdFswXSA9IGNwdV90b19iZTMyKGJsb2NrWzBdKTsKIAlkc3RbMV0gPSBjcHVfdG9fYmUzMihibG9ja1sxXSk7CiAJZHN0WzJdID0gY3B1X3RvX2JlMzIoYmxvY2tbMl0pOwogCWRzdFszXSA9IGNwdV90b19iZTMyKGJsb2NrWzNdKTsKLX0JCit9CiAKLXN0YXRpYyB2b2lkIGNhc3Q2X2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dGJ1ZiwgY29uc3QgdTggKmluYnVmKSB7Ci0Jc3RydWN0IGNhc3Q2X2N0eCAqIGMgPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworc3RhdGljIHZvaWQgY2FzdDZfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpCit7CisJc3RydWN0IGNhc3Q2X2N0eCAqYyA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJY29uc3QgX19iZTMyICpzcmMgPSAoY29uc3QgX19iZTMyICopaW5idWY7CiAJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0YnVmOwogCXUzMiBibG9ja1s0XTsKLQl1MzIgKiBLbTsgCi0JdTggKiBLcjsKKwl1MzIgKkttOworCXU4ICpLcjsKIAogCWJsb2NrWzBdID0gYmUzMl90b19jcHUoc3JjWzBdKTsKIAlibG9ja1sxXSA9IGJlMzJfdG9fY3B1KHNyY1sxXSk7CiAJYmxvY2tbMl0gPSBiZTMyX3RvX2NwdShzcmNbMl0pOwogCWJsb2NrWzNdID0gYmUzMl90b19jcHUoc3JjWzNdKTsKIAotCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzldOyBLciA9IGMtPktyWzldOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzZdOyBLciA9IGMtPktyWzZdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzNdOyBLciA9IGMtPktyWzNdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzBdOyBLciA9IGMtPktyWzBdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQkKKwlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs4XTsgS3IgPSBjLT5Lcls4XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNl07IEtyID0gYy0+S3JbNl07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs1XTsgS3IgPSBjLT5Lcls1XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bM107IEtyID0gYy0+S3JbM107IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsyXTsgS3IgPSBjLT5LclsyXTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisKIAlkc3RbMF0gPSBjcHVfdG9fYmUzMihibG9ja1swXSk7CiAJZHN0WzFdID0gY3B1X3RvX2JlMzIoYmxvY2tbMV0pOwogCWRzdFsyXSA9IGNwdV90b19iZTMyKGJsb2NrWzJdKTsKIAlkc3RbM10gPSBjcHVfdG9fYmUzMihibG9ja1szXSk7Ci19CQorfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewogCS5jcmFfbmFtZSA9ICJjYXN0NiIsCmRpZmYgLS1naXQgYS9jcnlwdG8vY2lwaGVyLmMgYi9jcnlwdG8vY2lwaGVyLmMKaW5kZXggOWExYTczMS4uMzk1NDFlMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NpcGhlci5jCisrKyBiL2NyeXB0by9jaXBoZXIuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9jb21wcmVzcy5jIGIvY3J5cHRvL2NvbXByZXNzLmMKaW5kZXggMWVlMzU3MC4uYzMzZjA3NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NvbXByZXNzLmMKKysrIGIvY3J5cHRvL2NvbXByZXNzLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCkBAIC0zOSw3ICszOSw3IEBACiAKIAlvcHMtPmNvdF9jb21wcmVzcyA9IGNyeXB0b19jb21wcmVzczsKIAlvcHMtPmNvdF9kZWNvbXByZXNzID0gY3J5cHRvX2RlY29tcHJlc3M7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyYzMyYy5jIGIvY3J5cHRvL2NyYzMyYy5jCmluZGV4IDk3M2JjMmMuLmRlOWU1NWMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcmMzMmMuYworKysgYi9jcnlwdG8vY3JjMzJjLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBDUkMzMkMgY2hrc3VtCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCkBAIC0xNDIsNyArMTQyLDcgQEAKIH0KIAogLyoKLSAqIFN0ZXBzIHRocm91Z2ggYnVmZmVyIG9uZSBieXRlIGF0IGF0IHRpbWUsIGNhbGN1bGF0ZXMgcmVmbGVjdGVkIAorICogU3RlcHMgdGhyb3VnaCBidWZmZXIgb25lIGJ5dGUgYXQgYXQgdGltZSwgY2FsY3VsYXRlcyByZWZsZWN0ZWQKICAqIGNyYyB1c2luZyB0YWJsZS4KICAqLwogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvX251bGwuYyBiL2NyeXB0by9jcnlwdG9fbnVsbC5jCmluZGV4IGNiNzFjOTEuLjA3YThhOTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdG9fbnVsbC5jCisrKyBiL2NyeXB0by9jcnlwdG9fbnVsbC5jCkBAIC0xLDExICsxLDExIEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBOdWxsIGFsZ29yaXRobXMsIGFrYSBNdWNoIEFkbyBBYm91dCBOb3RoaW5nLgogICoKICAqIFRoZXNlIGFyZSBuZWVkZWQgZm9yIElQc2VjLCBhbmQgbWF5IGJlIHVzZWZ1bCBpbiBnZW5lcmFsIGZvcgogICogdGVzdGluZyAmIGRlYnVnZ2luZy4KLSAqIAorICoKICAqIFRoZSBudWxsIGNpcGhlciBpcyBjb21wbGlhbnQgd2l0aCBSRkMyNDEwLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KQEAgLTE2Myw3ICsxNjMsNyBAQAogc3RhdGljIGludCBfX2luaXQgY3J5cHRvX251bGxfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQkKKwogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNpcGhlcl9udWxsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CkBAIC0xODAsNyArMTgwLDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9kaWdlc3Q7CiAKLW91dDoJCitvdXQ6CiAJcmV0dXJuIHJldDsKIAogb3V0X3VucmVnaXN0ZXJfZGlnZXN0OgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RlZmxhdGUuYyBiL2NyeXB0by9kZWZsYXRlLmMKaW5kZXggOTEyOGRhNC4uNDYzZGM4NSAxMDA2NDQKLS0tIGEvY3J5cHRvL2RlZmxhdGUuYworKysgYi9jcnlwdG8vZGVmbGF0ZS5jCkBAIC0xLDE0ICsxLDE0IEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBEZWZsYXRlIGFsZ29yaXRobSAoUkZDIDE5NTEpLCBpbXBsZW1lbnRlZCBoZXJlIHByaW1hcmlseSBmb3IgdXNlCiAgKiBieSBJUENPTVAgKFJGQyAzMTczICYgUkZDIDIzOTQpLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMyBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIEZJWE1FOiBkZWZsYXRlIHRyYW5zZm9ybXMgd2lsbCByZXF1aXJlIHVwIHRvIGEgdG90YWwgb2YgYWJvdXQgNDM2ayBvZiBrZXJuZWwKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+Y29tcF9zdHJlYW07CiAKIAlzdHJlYW0tPndvcmtzcGFjZSA9IHZtYWxsb2MoemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoKSk7Ci0JaWYgKCFzdHJlYW0tPndvcmtzcGFjZSApIHsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTYxLDcgKzYxLDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZnJlZTsKIAl9Ci1vdXQ6CQorb3V0OgogCXJldHVybiByZXQ7CiBvdXRfZnJlZToKIAl2ZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CkBAIC03NCw3ICs3NCw3IEBACiAJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmRlY29tcF9zdHJlYW07CiAKIAlzdHJlYW0tPndvcmtzcGFjZSA9IGt6YWxsb2MoemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdHJlYW0tPndvcmtzcGFjZSApIHsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEwNiw3ICsxMDYsNyBAQAogewogCXN0cnVjdCBkZWZsYXRlX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAlpbnQgcmV0OwotCQorCiAJcmV0ID0gZGVmbGF0ZV9jb21wX2luaXQoY3R4KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTE1MywxMSArMTUzLDExIEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KLSAKKwogc3RhdGljIGludCBkZWZsYXRlX2RlY29tcHJlc3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKnNyYywKIAkJCSAgICAgIHVuc2lnbmVkIGludCBzbGVuLCB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgKmRsZW4pCiB7Ci0JCisKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZGVmbGF0ZV9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKQEAgLTE4Miw3ICsxODIsNyBAQAogCWlmIChyZXQgPT0gWl9PSyAmJiAhc3RyZWFtLT5hdmFpbF9pbiAmJiBzdHJlYW0tPmF2YWlsX291dCkgewogCQl1OCB6ZXJvc3R1ZmYgPSAwOwogCQlzdHJlYW0tPm5leHRfaW4gPSAmemVyb3N0dWZmOwotCQlzdHJlYW0tPmF2YWlsX2luID0gMTsgCisJCXN0cmVhbS0+YXZhaWxfaW4gPSAxOwogCQlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7CiAJfQogCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzX2dlbmVyaWMuYyBiL2NyeXB0by9kZXNfZ2VuZXJpYy5jCmluZGV4IDViZDNlZTMuLjI0OWY5MDMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kZXNfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9kZXNfZ2VuZXJpYy5jCkBAIC04NjksOCArODY5LDcgQEAKIAogCWlmICh1bmxpa2VseSghKChLWzBdIF4gS1syXSkgfCAoS1sxXSBeIEtbM10pKSB8fAogCQkgICAgICEoKEtbMl0gXiBLWzRdKSB8IChLWzNdIF4gS1s1XSkpKSAmJgotCQkgICAgICgqZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkpCi0JeworCQkgICAgICgqZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkpIHsKIAkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX1dFQUtfS0VZOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZWNiLmMgYi9jcnlwdG8vZWNiLmMKaW5kZXggYTQ2ODM4ZS4uOTM1Y2ZlZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjYi5jCisrKyBiL2NyeXB0by9lY2IuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAJCWRvIHsKIAkJCWZuKGNyeXB0b19jaXBoZXJfdGZtKHRmbSksIHdkc3QsIHdzcmMpOwotCQorCiAJCQl3c3JjICs9IGJzaXplOwogCQkJd2RzdCArPSBic2l6ZTsKIAkJfSB3aGlsZSAoKG5ieXRlcyAtPSBic2l6ZSkgPj0gYnNpemUpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2ZjcnlwdC5jIGIvY3J5cHRvL2ZjcnlwdC5jCmluZGV4IGI4MmQ2MWYuLmMzMzEwN2UgMTAwNjQ0Ci0tLSBhL2NyeXB0by9mY3J5cHQuYworKysgYi9jcnlwdG8vZmNyeXB0LmMKQEAgLTYwLDEzICs2MCwxMyBAQAogCXUzMiB0ID0gbG8gJiAoKDEgPDwgbikgLSAxKTsJCQkJXAogCWxvID0gKGxvID4+IG4pIHwgKChoaSAmICgoMSA8PCBuKSAtIDEpKSA8PCAoMzIgLSBuKSk7CVwKIAloaSA9IChoaSA+PiBuKSB8ICh0IDw8ICgyNC1uKSk7CQkJCVwKLX0gd2hpbGUoMCkKK30gd2hpbGUgKDApCiAKIC8qIFJvdGF0ZSByaWdodCBvbmUgNjQgYml0IG51bWJlciBhcyBhIDU2IGJpdCBudW1iZXIgKi8KICNkZWZpbmUgcm9yNTZfNjQoaywgbikJCQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJayA9IChrID4+IG4pIHwgKChrICYgKCgxIDw8IG4pIC0gMSkpIDw8ICg1NiAtIG4pKTsJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAogLyoKICAqIFNib3hlcyBmb3IgRmVpc3RlbCBuZXR3b3JrIGRlcml2ZWQgZnJvbQpAQCAtMjI4LDcgKzIyOCw3IEBACiAJdW5pb24gbGM0IHsgX19iZTMyIGw7IHU4IGNbNF07IH0gdTsJCQkJXAogCXUubCA9IHNjaGVkIF4gUjsJCQkJCQlcCiAJTCBePSBzYm94MFt1LmNbMF1dIF4gc2JveDFbdS5jWzFdXSBeIHNib3gyW3UuY1syXV0gXiBzYm94M1t1LmNbM11dOyBcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCiAvKgogICogZW5jcnlwdG9yCmRpZmYgLS1naXQgYS9jcnlwdG8vZ2NtLmMgYi9jcnlwdG8vZ2NtLmMKaW5kZXggYzY1NDcxMy4uMmY1ZmJiYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2djbS5jCisrKyBiL2NyeXB0by9nY20uYwpAQCAtMzcsNiArMzcsMTkgQEAKIAl1OCBub25jZVs0XTsKIH07CiAKK3N0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggeworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQ7CisJdTggbm9uY2VbNF07Cit9OworCitzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCB7CisJdTggYXV0aF90YWdbMTZdOworCXN0cnVjdCBzY2F0dGVybGlzdCBjaXBoZXJbMV07CisJc3RydWN0IHNjYXR0ZXJsaXN0IHBheWxvYWRbMl07CisJc3RydWN0IHNjYXR0ZXJsaXN0IGFzc29jWzJdOworCXN0cnVjdCBhZWFkX3JlcXVlc3Qgc3VicmVxOworfTsKKwogc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4IHsKIAl1bnNpZ25lZCBpbnQgY3J5cHRsZW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmM7CkBAIC0xMDQ3LDYgKzEwNjAsMjcyIEBACiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCAqY3J5cHRvX3JmYzQ1NDNfcmVxY3R4KAorCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gY3J5cHRvX2FlYWRfYWxpZ25tYXNrKGNyeXB0b19hZWFkX3JlcXRmbShyZXEpKTsKKworCXJldHVybiAodm9pZCAqKVBUUl9BTElHTigodTggKilhZWFkX3JlcXVlc3RfY3R4KHJlcSksIGFsaWduICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWVhZCAqcGFyZW50LCBjb25zdCB1OCAqa2V5LAorCQkJCSB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQgPSBjdHgtPmNoaWxkOworCWludCBlcnI7CisKKwlpZiAoa2V5bGVuIDwgNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXlsZW4gLT0gNDsKKwltZW1jcHkoY3R4LT5ub25jZSwga2V5ICsga2V5bGVuLCA0KTsKKworCWNyeXB0b19hZWFkX2NsZWFyX2ZsYWdzKGNoaWxkLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fYWVhZF9zZXRfZmxhZ3MoY2hpbGQsIGNyeXB0b19hZWFkX2dldF9mbGFncyhwYXJlbnQpICYKKwkJCQkgICAgIENSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19hZWFkX3NldGtleShjaGlsZCwga2V5LCBrZXlsZW4pOworCWNyeXB0b19hZWFkX3NldF9mbGFncyhwYXJlbnQsIGNyeXB0b19hZWFkX2dldF9mbGFncyhjaGlsZCkgJgorCQkJCSAgICAgIENSWVBUT19URk1fUkVTX01BU0spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcnlwdG9fcmZjNDU0M19zZXRhdXRoc2l6ZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnBhcmVudCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYXV0aHNpemUpCit7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHBhcmVudCk7CisKKwlpZiAoYXV0aHNpemUgIT0gMTYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGF1dGhzaXplKGN0eC0+Y2hpbGQsIGF1dGhzaXplKTsKK30KKworLyogdGhpcyBpcyB0aGUgc2FtZSBhcyBjcnlwdG9fYXV0aGVuY19jaGFpbiAqLworc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfY2hhaW4oc3RydWN0IHNjYXR0ZXJsaXN0ICpoZWFkLAorCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgY2hhaW4pCit7CisJaWYgKGNoYWluKSB7CisJCWhlYWQtPmxlbmd0aCArPSBzZy0+bGVuZ3RoOworCQlzZyA9IHNjYXR0ZXJ3YWxrX3NnX25leHQoc2cpOworCX0KKworCWlmIChzZykKKwkJc2NhdHRlcndhbGtfc2dfY2hhaW4oaGVhZCwgMiwgc2cpOworCWVsc2UKKwkJc2dfbWFya19lbmQoaGVhZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpjcnlwdG9fcmZjNDU0M19jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsCisJCQkJCQkgaW50IGVuYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX3JlcV9jdHggKnJjdHggPSBjcnlwdG9fcmZjNDU0M19yZXFjdHgocmVxKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpzdWJyZXEgPSAmcmN0eC0+c3VicmVxOworCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0ID0gcmVxLT5kc3Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpjaXBoZXIgPSByY3R4LT5jaXBoZXI7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpwYXlsb2FkID0gcmN0eC0+cGF5bG9hZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmFzc29jID0gcmN0eC0+YXNzb2M7CisJdW5zaWduZWQgaW50IGF1dGhzaXplID0gY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCk7CisJdW5zaWduZWQgaW50IGFzc29jbGVuID0gcmVxLT5hc3NvY2xlbjsKKwlzdHJ1Y3QgcGFnZSAqZHN0cDsKKwl1OCAqdmRzdDsKKwl1OCAqaXYgPSBQVFJfQUxJR04oKHU4ICopKHJjdHggKyAxKSArIGNyeXB0b19hZWFkX3JlcXNpemUoY3R4LT5jaGlsZCksCisJCQkgICBjcnlwdG9fYWVhZF9hbGlnbm1hc2soY3R4LT5jaGlsZCkgKyAxKTsKKworCW1lbWNweShpdiwgY3R4LT5ub25jZSwgNCk7CisJbWVtY3B5KGl2ICsgNCwgcmVxLT5pdiwgOCk7CisKKwkvKiBjb25zdHJ1Y3QgY2lwaGVyL3BsYWludGV4dCAqLworCWlmIChlbmMpCisJCW1lbXNldChyY3R4LT5hdXRoX3RhZywgMCwgYXV0aHNpemUpOworCWVsc2UKKwkJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KHJjdHgtPmF1dGhfdGFnLCBkc3QsCisJCQkJCSByZXEtPmNyeXB0bGVuIC0gYXV0aHNpemUsCisJCQkJCSBhdXRoc2l6ZSwgMCk7CisKKwlzZ19pbml0X29uZShjaXBoZXIsIHJjdHgtPmF1dGhfdGFnLCBhdXRoc2l6ZSk7CisKKwkvKiBjb25zdHJ1Y3QgdGhlIGFhZCAqLworCWRzdHAgPSBzZ19wYWdlKGRzdCk7CisJdmRzdCA9IFBhZ2VIaWdoTWVtKGRzdHApID8gTlVMTCA6IHBhZ2VfYWRkcmVzcyhkc3RwKSArIGRzdC0+b2Zmc2V0OworCisJc2dfaW5pdF90YWJsZShwYXlsb2FkLCAyKTsKKwlzZ19zZXRfYnVmKHBheWxvYWQsIHJlcS0+aXYsIDgpOworCWNyeXB0b19yZmM0NTQzX2NoYWluKHBheWxvYWQsIGRzdCwgdmRzdCA9PSByZXEtPml2ICsgOCk7CisJYXNzb2NsZW4gKz0gOCArIHJlcS0+Y3J5cHRsZW4gLSAoZW5jID8gMCA6IGF1dGhzaXplKTsKKworCXNnX2luaXRfdGFibGUoYXNzb2MsIDIpOworCXNnX3NldF9wYWdlKGFzc29jLCBzZ19wYWdlKHJlcS0+YXNzb2MpLCByZXEtPmFzc29jLT5sZW5ndGgsCisJCSAgICByZXEtPmFzc29jLT5vZmZzZXQpOworCWNyeXB0b19yZmM0NTQzX2NoYWluKGFzc29jLCBwYXlsb2FkLCAwKTsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKHN1YnJlcSwgY3R4LT5jaGlsZCk7CisJYWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhzdWJyZXEsIHJlcS0+YmFzZS5mbGFncywgcmVxLT5iYXNlLmNvbXBsZXRlLAorCQkJCSAgcmVxLT5iYXNlLmRhdGEpOworCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoc3VicmVxLCBjaXBoZXIsIGNpcGhlciwgZW5jID8gMCA6IGF1dGhzaXplLCBpdik7CisJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhzdWJyZXEsIGFzc29jLCBhc3NvY2xlbik7CisKKwlyZXR1cm4gc3VicmVxOworfQorCitzdGF0aWMgaW50IGNyeXB0b19yZmM0NTQzX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19yZXFfY3R4ICpyY3R4ID0gY3J5cHRvX3JmYzQ1NDNfcmVxY3R4KHJlcSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqc3VicmVxOworCWludCBlcnI7CisKKwlzdWJyZXEgPSBjcnlwdG9fcmZjNDU0M19jcnlwdChyZXEsIDEpOworCWVyciA9IGNyeXB0b19hZWFkX2VuY3J5cHQoc3VicmVxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KHJjdHgtPmF1dGhfdGFnLCByZXEtPmRzdCwgcmVxLT5jcnlwdGxlbiwKKwkJCQkgY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCksIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJcmVxID0gY3J5cHRvX3JmYzQ1NDNfY3J5cHQocmVxLCAwKTsKKworCXJldHVybiBjcnlwdG9fYWVhZF9kZWNyeXB0KHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gKHZvaWQgKil0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWRfc3Bhd24gKnNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZDsKKwl1bnNpZ25lZCBsb25nIGFsaWduOworCisJYWVhZCA9IGNyeXB0b19zcGF3bl9hZWFkKHNwYXduKTsKKwlpZiAoSVNfRVJSKGFlYWQpKQorCQlyZXR1cm4gUFRSX0VSUihhZWFkKTsKKworCWN0eC0+Y2hpbGQgPSBhZWFkOworCisJYWxpZ24gPSBjcnlwdG9fYWVhZF9hbGlnbm1hc2soYWVhZCk7CisJYWxpZ24gJj0gfihjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSAtIDEpOworCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCkgKworCQkJCUFMSUdOKGNyeXB0b19hZWFkX3JlcXNpemUoYWVhZCksCisJCQkJICAgICAgY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpICsKKwkJCQlhbGlnbiArIDE2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19yZmM0NTQzX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWNyeXB0b19mcmVlX2FlYWQoY3R4LT5jaGlsZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdG9fcmZjNDU0M19hbGxvYyhzdHJ1Y3QgcnRhdHRyICoqdGIpCit7CisJc3RydWN0IGNyeXB0b19hdHRyX3R5cGUgKmFsZ3Q7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWRfc3Bhd24gKnNwYXduOworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisJY29uc3QgY2hhciAqY2NtX25hbWU7CisJaW50IGVycjsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisJZXJyID0gUFRSX0VSUihhbGd0KTsKKwlpZiAoSVNfRVJSKGFsZ3QpKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJaWYgKChhbGd0LT50eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0FFQUQpICYgYWxndC0+bWFzaykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljY21fbmFtZSA9IGNyeXB0b19hdHRyX2FsZ19uYW1lKHRiWzFdKTsKKwllcnIgPSBQVFJfRVJSKGNjbV9uYW1lKTsKKwlpZiAoSVNfRVJSKGNjbV9uYW1lKSkKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworCWluc3QgPSBremFsbG9jKHNpemVvZigqaW5zdCkgKyBzaXplb2YoKnNwYXduKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwljcnlwdG9fc2V0X2FlYWRfc3Bhd24oc3Bhd24sIGluc3QpOworCWVyciA9IGNyeXB0b19ncmFiX2FlYWQoc3Bhd24sIGNjbV9uYW1lLCAwLAorCQkJICAgICAgIGNyeXB0b19yZXF1aXJlc19zeW5jKGFsZ3QtPnR5cGUsIGFsZ3QtPm1hc2spKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CisKKwlhbGcgPSBjcnlwdG9fYWVhZF9zcGF3bl9hbGcoc3Bhd24pOworCisJZXJyID0gLUVJTlZBTDsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCAxNi1ieXRlIGJsb2Nrcy4gKi8KKwlpZiAoYWxnLT5jcmFfYWVhZC5pdnNpemUgIT0gMTYpCisJCWdvdG8gb3V0X2Ryb3BfYWxnOworCisJLyogTm90IGEgc3RyZWFtIGNpcGhlcj8gKi8KKwlpZiAoYWxnLT5jcmFfYmxvY2tzaXplICE9IDEpCisJCWdvdG8gb3V0X2Ryb3BfYWxnOworCisJZXJyID0gLUVOQU1FVE9PTE9ORzsKKwlpZiAoc25wcmludGYoaW5zdC0+YWxnLmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJyZmM0NTQzKCVzKSIsIGFsZy0+Y3JhX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUgfHwKKwkgICAgc25wcmludGYoaW5zdC0+YWxnLmNyYV9kcml2ZXJfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwKKwkJICAgICAicmZjNDU0MyglcykiLCBhbGctPmNyYV9kcml2ZXJfbmFtZSkgPj0KKwkgICAgQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJZ290byBvdXRfZHJvcF9hbGc7CisKKwlpbnN0LT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0FFQUQ7CisJaW5zdC0+YWxnLmNyYV9mbGFncyB8PSBhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfQVNZTkM7CisJaW5zdC0+YWxnLmNyYV9wcmlvcml0eSA9IGFsZy0+Y3JhX3ByaW9yaXR5OworCWluc3QtPmFsZy5jcmFfYmxvY2tzaXplID0gMTsKKwlpbnN0LT5hbGcuY3JhX2FsaWdubWFzayA9IGFsZy0+Y3JhX2FsaWdubWFzazsKKwlpbnN0LT5hbGcuY3JhX3R5cGUgPSAmY3J5cHRvX25pdmFlYWRfdHlwZTsKKworCWluc3QtPmFsZy5jcmFfYWVhZC5pdnNpemUgPSA4OworCWluc3QtPmFsZy5jcmFfYWVhZC5tYXhhdXRoc2l6ZSA9IDE2OworCisJaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHgpOworCisJaW5zdC0+YWxnLmNyYV9pbml0ID0gY3J5cHRvX3JmYzQ1NDNfaW5pdF90Zm07CisJaW5zdC0+YWxnLmNyYV9leGl0ID0gY3J5cHRvX3JmYzQ1NDNfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuc2V0a2V5ID0gY3J5cHRvX3JmYzQ1NDNfc2V0a2V5OworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRhdXRoc2l6ZSA9IGNyeXB0b19yZmM0NTQzX3NldGF1dGhzaXplOworCWluc3QtPmFsZy5jcmFfYWVhZC5lbmNyeXB0ID0gY3J5cHRvX3JmYzQ1NDNfZW5jcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZGVjcnlwdCA9IGNyeXB0b19yZmM0NTQzX2RlY3J5cHQ7CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZ2VuaXYgPSAic2VxaXYiOworCitvdXQ6CisJcmV0dXJuIGluc3Q7CisKK291dF9kcm9wX2FsZzoKKwljcnlwdG9fZHJvcF9hZWFkKHNwYXduKTsKK291dF9mcmVlX2luc3Q6CisJa2ZyZWUoaW5zdCk7CisJaW5zdCA9IEVSUl9QVFIoZXJyKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfZnJlZShzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCWNyeXB0b19kcm9wX3NwYXduKGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCkpOworCWtmcmVlKGluc3QpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSBjcnlwdG9fcmZjNDU0M190bXBsID0geworCS5uYW1lID0gInJmYzQ1NDMiLAorCS5hbGxvYyA9IGNyeXB0b19yZmM0NTQzX2FsbG9jLAorCS5mcmVlID0gY3J5cHRvX3JmYzQ1NDNfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fZ2NtX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTEwNjcsOCArMTM0NiwxNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VuZG9fZ2NtOwogCisJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDU0M190bXBsKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bmRvX3JmYzQxMDY7CisKIAlyZXR1cm4gMDsKIAorb3V0X3VuZG9fcmZjNDEwNjoKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX3JmYzQxMDZfdG1wbCk7CiBvdXRfdW5kb19nY206CiAJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19nY21fdG1wbCk7CiBvdXRfdW5kb19iYXNlOgpAQCAtMTA4MSw2ICsxMzY2LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdG9fZ2NtX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJa2ZyZWUoZ2NtX3plcm9lcyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19yZmM0NTQzX3RtcGwpOwogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDEwNl90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV9iYXNlX3RtcGwpOwpAQCAtMTA5NCwzICsxMzgwLDQgQEAKIE1PRFVMRV9BVVRIT1IoIk1pa2tvIEhlcnJhbmVuIDxtaDFAaWtpLmZpPiIpOwogTU9EVUxFX0FMSUFTKCJnY21fYmFzZSIpOwogTU9EVUxFX0FMSUFTKCJyZmM0MTA2Iik7CitNT0RVTEVfQUxJQVMoInJmYzQ1NDMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDUuYyBiL2NyeXB0by9tZDUuYwppbmRleCA4M2ViNTI5Li45ZmRhMjEzIDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ1LmMKKysrIGIvY3J5cHRvL21kNS5jCkBAIC0xNiwxNyArMTYsMTMgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9tZDUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNkZWZpbmUgTUQ1X0RJR0VTVF9TSVpFCQkxNgotI2RlZmluZSBNRDVfSE1BQ19CTE9DS19TSVpFCTY0Ci0jZGVmaW5lIE1ENV9CTE9DS19XT1JEUwkJMTYKLSNkZWZpbmUgTUQ1X0hBU0hfV09SRFMJCTQKLQogI2RlZmluZSBGMSh4LCB5LCB6KQkoeiBeICh4ICYgKHkgXiB6KSkpCiAjZGVmaW5lIEYyKHgsIHksIHopCUYxKHosIHgsIHkpCiAjZGVmaW5lIEYzKHgsIHksIHopCSh4IF4geSBeIHopCkBAIC0zNSwxMiArMzEsNiBAQAogI2RlZmluZSBNRDVTVEVQKGYsIHcsIHgsIHksIHosIGluLCBzKSBcCiAJKHcgKz0gZih4LCB5LCB6KSArIGluLCB3ID0gKHc8PHMgfCB3Pj4oMzItcykpICsgeCkKIAotc3RydWN0IG1kNV9jdHggewotCXUzMiBoYXNoW01ENV9IQVNIX1dPUkRTXTsKLQl1MzIgYmxvY2tbTUQ1X0JMT0NLX1dPUkRTXTsKLQl1NjQgYnl0ZV9jb3VudDsKLX07Ci0KIHN0YXRpYyB2b2lkIG1kNV90cmFuc2Zvcm0odTMyICpoYXNoLCB1MzIgY29uc3QgKmluKQogewogCXUzMiBhLCBiLCBjLCBkOwpAQCAtMTQxLDcgKzEzMSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWQ1X3RyYW5zZm9ybV9oZWxwZXIoc3RydWN0IG1kNV9jdHggKmN0eCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZDVfdHJhbnNmb3JtX2hlbHBlcihzdHJ1Y3QgbWQ1X3N0YXRlICpjdHgpCiB7CiAJbGUzMl90b19jcHVfYXJyYXkoY3R4LT5ibG9jaywgc2l6ZW9mKGN0eC0+YmxvY2spIC8gc2l6ZW9mKHUzMikpOwogCW1kNV90cmFuc2Zvcm0oY3R4LT5oYXNoLCBjdHgtPmJsb2NrKTsKQEAgLTE0OSw3ICsxMzksNyBAQAogCiBzdGF0aWMgaW50IG1kNV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBtZDVfY3R4ICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IG1kNV9zdGF0ZSAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCiAJbWN0eC0+aGFzaFswXSA9IDB4Njc0NTIzMDE7CiAJbWN0eC0+aGFzaFsxXSA9IDB4ZWZjZGFiODk7CkBAIC0xNjIsNyArMTUyLDcgQEAKIAogc3RhdGljIGludCBtZDVfdXBkYXRlKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlzdHJ1Y3QgbWQ1X2N0eCAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBtZDVfc3RhdGUgKm1jdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAljb25zdCB1MzIgYXZhaWwgPSBzaXplb2YobWN0eC0+YmxvY2spIC0gKG1jdHgtPmJ5dGVfY291bnQgJiAweDNmKTsKIAogCW1jdHgtPmJ5dGVfY291bnQgKz0gbGVuOwpAQCAtMTk0LDcgKzE4NCw3IEBACiAKIHN0YXRpYyBpbnQgbWQ1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQogewotCXN0cnVjdCBtZDVfY3R4ICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IG1kNV9zdGF0ZSAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCWNvbnN0IHVuc2lnbmVkIGludCBvZmZzZXQgPSBtY3R4LT5ieXRlX2NvdW50ICYgMHgzZjsKIAljaGFyICpwID0gKGNoYXIgKiltY3R4LT5ibG9jayArIG9mZnNldDsKIAlpbnQgcGFkZGluZyA9IDU2IC0gKG9mZnNldCArIDEpOwpAQCAtMjIwLDEyICsyMTAsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtZDVfZXhwb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB2b2lkICpvdXQpCit7CisJc3RydWN0IG1kNV9zdGF0ZSAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwltZW1jcHkob3V0LCBjdHgsIHNpemVvZigqY3R4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWQ1X2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqaW4pCit7CisJc3RydWN0IG1kNV9zdGF0ZSAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwltZW1jcHkoY3R4LCBpbiwgc2l6ZW9mKCpjdHgpKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0gewogCS5kaWdlc3RzaXplCT0JTUQ1X0RJR0VTVF9TSVpFLAogCS5pbml0CQk9CW1kNV9pbml0LAogCS51cGRhdGUJCT0JbWQ1X3VwZGF0ZSwKIAkuZmluYWwJCT0JbWQ1X2ZpbmFsLAotCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgbWQ1X2N0eCksCisJLmV4cG9ydAkJPQltZDVfZXhwb3J0LAorCS5pbXBvcnQJCT0JbWQ1X2ltcG9ydCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IG1kNV9zdGF0ZSksCiAJLmJhc2UJCT0JewogCQkuY3JhX25hbWUJPQkibWQ1IiwKIAkJLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKZGlmZiAtLWdpdCBhL2NyeXB0by9wY3J5cHQuYyBiL2NyeXB0by9wY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIwMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3BjcnlwdC5jCkBAIC0wLDAgKzEsNDQ1IEBACisvKgorICogcGNyeXB0IC0gUGFyYWxsZWwgY3J5cHRvIHdyYXBwZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3BjcnlwdC5oPgorCitzdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2VuY19wYWRhdGE7CitzdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2RlY19wYWRhdGE7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmVuY3dxOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZWN3cTsKKworc3RydWN0IHBjcnlwdF9pbnN0YW5jZV9jdHggeworCXN0cnVjdCBjcnlwdG9fc3Bhd24gc3Bhd247CisJdW5zaWduZWQgaW50IHRmbV9jb3VudDsKK307CisKK3N0cnVjdCBwY3J5cHRfYWVhZF9jdHggeworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQ7CisJdW5zaWduZWQgaW50IGNiX2NwdTsKK307CisKK3N0YXRpYyBpbnQgcGNyeXB0X2RvX3BhcmFsbGVsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhLCB1bnNpZ25lZCBpbnQgKmNiX2NwdSwKKwkJCSAgICAgIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCXVuc2lnbmVkIGludCBjcHVfaW5kZXgsIGNwdSwgaTsKKworCWNwdSA9ICpjYl9jcHU7CisKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9hY3RpdmVfbWFzaykpCisJCQlnb3RvIG91dDsKKworCWNwdV9pbmRleCA9IGNwdSAlIGNwdW1hc2tfd2VpZ2h0KGNwdV9hY3RpdmVfbWFzayk7CisKKwljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9hY3RpdmVfbWFzayk7CisJZm9yIChpID0gMDsgaSA8IGNwdV9pbmRleDsgaSsrKQorCQljcHUgPSBjcHVtYXNrX25leHQoY3B1LCBjcHVfYWN0aXZlX21hc2spOworCisJKmNiX2NwdSA9IGNwdTsKKworb3V0OgorCXJldHVybiBwYWRhdGFfZG9fcGFyYWxsZWwocGluc3QsIHBhZGF0YSwgY3B1KTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCisJCQkgICAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGtleShjdHgtPmNoaWxkLCBrZXksIGtleWxlbik7Cit9CisKK3N0YXRpYyBpbnQgcGNyeXB0X2FlYWRfc2V0YXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCisJCQkJICAgdW5zaWduZWQgaW50IGF1dGhzaXplKQoreworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGF1dGhzaXplKGN0eC0+Y2hpbGQsIGF1dGhzaXplKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfc2VyaWFsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShyZXEtPmJhc2UuZGF0YSwgcGFkYXRhLT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZ2l2X3NlcmlhbChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBwY3J5cHRfcGFkYXRhX3JlcXVlc3QocGFkYXRhKTsKKwlzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0ICpyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisKKwlhZWFkX3JlcXVlc3RfY29tcGxldGUocmVxLT5hcmVxLmJhc2UuZGF0YSwgcGFkYXRhLT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisKKwlwYWRhdGEtPmluZm8gPSBlcnI7CisJcmVxLT5iYXNlLmZsYWdzICY9IH5DUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisKKwlwYWRhdGFfZG9fc2VyaWFsKHBhZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjcnlwdF9hZWFkX2VuYyhzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBwY3J5cHRfcGFkYXRhX3JlcXVlc3QocGFkYXRhKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisKKwlwYWRhdGEtPmluZm8gPSBjcnlwdG9fYWVhZF9lbmNyeXB0KHJlcSk7CisKKwlpZiAocGFkYXRhLT5pbmZvID09IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuOworCisJcGFkYXRhX2RvX3NlcmlhbChwYWRhdGEpOworfQorCitzdGF0aWMgaW50IHBjcnlwdF9hZWFkX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCWludCBlcnI7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmNyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCXUzMiBmbGFncyA9IGFlYWRfcmVxdWVzdF9mbGFncyhyZXEpOworCisJbWVtc2V0KHBhZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRhdGFfcHJpdikpOworCisJcGFkYXRhLT5wYXJhbGxlbCA9IHBjcnlwdF9hZWFkX2VuYzsKKwlwYWRhdGEtPnNlcmlhbCA9IHBjcnlwdF9hZWFkX3NlcmlhbDsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKGNyZXEsIGN0eC0+Y2hpbGQpOworCWFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2soY3JlcSwgZmxhZ3MgJiB+Q1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCSAgcGNyeXB0X2FlYWRfZG9uZSwgcmVxKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KGNyZXEsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCSAgICAgICByZXEtPmNyeXB0bGVuLCByZXEtPml2KTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKGNyZXEsIHJlcS0+YXNzb2MsIHJlcS0+YXNzb2NsZW4pOworCisJZXJyID0gcGNyeXB0X2RvX3BhcmFsbGVsKHBhZGF0YSwgJmN0eC0+Y2JfY3B1LCBwY3J5cHRfZW5jX3BhZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCWVyciA9IGNyeXB0b19hZWFkX2VuY3J5cHQoY3JlcSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfYWVhZF9kZWMoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gcGNyeXB0X3BhZGF0YV9yZXF1ZXN0KHBhZGF0YSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCisJcGFkYXRhLT5pbmZvID0gY3J5cHRvX2FlYWRfZGVjcnlwdChyZXEpOworCisJaWYgKHBhZGF0YS0+aW5mbyA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybjsKKworCXBhZGF0YV9kb19zZXJpYWwocGFkYXRhKTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpjcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCXN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhID0gcGNyeXB0X3JlcXVlc3RfcGFkYXRhKHByZXEpOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwl1MzIgZmxhZ3MgPSBhZWFkX3JlcXVlc3RfZmxhZ3MocmVxKTsKKworCW1lbXNldChwYWRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcGFkYXRhX3ByaXYpKTsKKworCXBhZGF0YS0+cGFyYWxsZWwgPSBwY3J5cHRfYWVhZF9kZWM7CisJcGFkYXRhLT5zZXJpYWwgPSBwY3J5cHRfYWVhZF9zZXJpYWw7CisKKwlhZWFkX3JlcXVlc3Rfc2V0X3RmbShjcmVxLCBjdHgtPmNoaWxkKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKGNyZXEsIGZsYWdzICYgfkNSWVBUT19URk1fUkVRX01BWV9TTEVFUCwKKwkJCQkgIHBjcnlwdF9hZWFkX2RvbmUsIHJlcSk7CisJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChjcmVxLCByZXEtPnNyYywgcmVxLT5kc3QsCisJCQkgICAgICAgcmVxLT5jcnlwdGxlbiwgcmVxLT5pdik7CisJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhjcmVxLCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuKTsKKworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2RlY19wYWRhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWVhZF9kZWNyeXB0KGNyZXEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZ2l2ZW5jKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCXBhZGF0YS0+aW5mbyA9IGNyeXB0b19hZWFkX2dpdmVuY3J5cHQocmVxKTsKKworCWlmIChwYWRhdGEtPmluZm8gPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlwYWRhdGFfZG9fc2VyaWFsKHBhZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcGNyeXB0X2FlYWRfZ2l2ZW5jcnlwdChzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxID0gJnJlcS0+YXJlcTsKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBhZWFkX3JlcXVlc3RfY3R4KGFyZXEpOworCXN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKmNyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gYWVhZF9naXZjcnlwdF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJdTMyIGZsYWdzID0gYWVhZF9yZXF1ZXN0X2ZsYWdzKGFyZXEpOworCisJbWVtc2V0KHBhZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRhdGFfcHJpdikpOworCisJcGFkYXRhLT5wYXJhbGxlbCA9IHBjcnlwdF9hZWFkX2dpdmVuYzsKKwlwYWRhdGEtPnNlcmlhbCA9IHBjcnlwdF9hZWFkX2dpdl9zZXJpYWw7CisKKwlhZWFkX2dpdmNyeXB0X3NldF90Zm0oY3JlcSwgY3R4LT5jaGlsZCk7CisJYWVhZF9naXZjcnlwdF9zZXRfY2FsbGJhY2soY3JlcSwgZmxhZ3MgJiB+Q1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCSAgIHBjcnlwdF9hZWFkX2RvbmUsIGFyZXEpOworCWFlYWRfZ2l2Y3J5cHRfc2V0X2NyeXB0KGNyZXEsIGFyZXEtPnNyYywgYXJlcS0+ZHN0LAorCQkJCWFyZXEtPmNyeXB0bGVuLCBhcmVxLT5pdik7CisJYWVhZF9naXZjcnlwdF9zZXRfYXNzb2MoY3JlcSwgYXJlcS0+YXNzb2MsIGFyZXEtPmFzc29jbGVuKTsKKwlhZWFkX2dpdmNyeXB0X3NldF9naXYoY3JlcSwgcmVxLT5naXYsIHJlcS0+c2VxKTsKKworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2VuY19wYWRhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWVhZF9naXZlbmNyeXB0KGNyZXEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWludCBjcHUsIGNwdV9pbmRleDsKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gY3J5cHRvX3RmbV9hbGdfaW5zdGFuY2UodGZtKTsKKwlzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCAqaWN0eCA9IGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCk7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmNpcGhlcjsKKworCWljdHgtPnRmbV9jb3VudCsrOworCisJY3B1X2luZGV4ID0gaWN0eC0+dGZtX2NvdW50ICUgY3B1bWFza193ZWlnaHQoY3B1X2FjdGl2ZV9tYXNrKTsKKworCWN0eC0+Y2JfY3B1ID0gY3B1bWFza19maXJzdChjcHVfYWN0aXZlX21hc2spOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2luZGV4OyBjcHUrKykKKwkJY3R4LT5jYl9jcHUgPSBjcHVtYXNrX25leHQoY3R4LT5jYl9jcHUsIGNwdV9hY3RpdmVfbWFzayk7CisKKwljaXBoZXIgPSBjcnlwdG9fc3Bhd25fYWVhZChjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpKTsKKworCWlmIChJU19FUlIoY2lwaGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2lwaGVyKTsKKworCWN0eC0+Y2hpbGQgPSBjaXBoZXI7CisJdGZtLT5jcnRfYWVhZC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBwY3J5cHRfcmVxdWVzdCkKKwkJKyBzaXplb2Yoc3RydWN0IGFlYWRfZ2l2Y3J5cHRfcmVxdWVzdCkKKwkJKyBjcnlwdG9fYWVhZF9yZXFzaXplKGNpcGhlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3J5cHRvX2ZyZWVfYWVhZChjdHgtPmNoaWxkKTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKnBjcnlwdF9hbGxvY19pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IHBjcnlwdF9pbnN0YW5jZV9jdHggKmN0eDsKKwlpbnQgZXJyOworCisJaW5zdCA9IGt6YWxsb2Moc2l6ZW9mKCppbnN0KSArIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0KSB7CisJCWluc3QgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSAtRU5BTUVUT09MT05HOworCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX2RyaXZlcl9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJwY3J5cHQoJXMpIiwgYWxnLT5jcmFfZHJpdmVyX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKKworCW1lbWNweShpbnN0LT5hbGcuY3JhX25hbWUsIGFsZy0+Y3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOworCisJY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwllcnIgPSBjcnlwdG9faW5pdF9zcGF3bigmY3R4LT5zcGF3biwgYWxnLCBpbnN0LAorCQkJCUNSWVBUT19BTEdfVFlQRV9NQVNLKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CisKKwlpbnN0LT5hbGcuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHkgKyAxMDA7CisJaW5zdC0+YWxnLmNyYV9ibG9ja3NpemUgPSBhbGctPmNyYV9ibG9ja3NpemU7CisJaW5zdC0+YWxnLmNyYV9hbGlnbm1hc2sgPSBhbGctPmNyYV9hbGlnbm1hc2s7CisKK291dDoKKwlyZXR1cm4gaW5zdDsKKworb3V0X2ZyZWVfaW5zdDoKKwlrZnJlZShpbnN0KTsKKwlpbnN0ID0gRVJSX1BUUihlcnIpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqcGNyeXB0X2FsbG9jX2FlYWQoc3RydWN0IHJ0YXR0ciAqKnRiKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisKKwlhbGcgPSBjcnlwdG9fZ2V0X2F0dHJfYWxnKHRiLCBhbGd0LT50eXBlLAorCQkJCSAgKGFsZ3QtPm1hc2sgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CisKKwlpbnN0ID0gcGNyeXB0X2FsbG9jX2luc3RhbmNlKGFsZyk7CisJaWYgKElTX0VSUihpbnN0KSkKKwkJZ290byBvdXRfcHV0X2FsZzsKKworCWluc3QtPmFsZy5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfQUVBRCB8IENSWVBUT19BTEdfQVNZTkM7CisJaW5zdC0+YWxnLmNyYV90eXBlID0gJmNyeXB0b19hZWFkX3R5cGU7CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuaXZzaXplID0gYWxnLT5jcmFfYWVhZC5pdnNpemU7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmdlbml2ID0gYWxnLT5jcmFfYWVhZC5nZW5pdjsKKwlpbnN0LT5hbGcuY3JhX2FlYWQubWF4YXV0aHNpemUgPSBhbGctPmNyYV9hZWFkLm1heGF1dGhzaXplOworCisJaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBwY3J5cHRfYWVhZF9jdHgpOworCisJaW5zdC0+YWxnLmNyYV9pbml0ID0gcGNyeXB0X2FlYWRfaW5pdF90Zm07CisJaW5zdC0+YWxnLmNyYV9leGl0ID0gcGNyeXB0X2FlYWRfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuc2V0a2V5ID0gcGNyeXB0X2FlYWRfc2V0a2V5OworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRhdXRoc2l6ZSA9IHBjcnlwdF9hZWFkX3NldGF1dGhzaXplOworCWluc3QtPmFsZy5jcmFfYWVhZC5lbmNyeXB0ID0gcGNyeXB0X2FlYWRfZW5jcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZGVjcnlwdCA9IHBjcnlwdF9hZWFkX2RlY3J5cHQ7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmdpdmVuY3J5cHQgPSBwY3J5cHRfYWVhZF9naXZlbmNyeXB0OworCitvdXRfcHV0X2FsZzoKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCXJldHVybiBpbnN0OworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqcGNyeXB0X2FsbG9jKHN0cnVjdCBydGF0dHIgKip0YikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisJaWYgKElTX0VSUihhbGd0KSkKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZ3QpOworCisJc3dpdGNoIChhbGd0LT50eXBlICYgYWxndC0+bWFzayAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSB7CisJY2FzZSBDUllQVE9fQUxHX1RZUEVfQUVBRDoKKwkJcmV0dXJuIHBjcnlwdF9hbGxvY19hZWFkKHRiKTsKKwl9CisKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2ZyZWUoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKK3sKKwlzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCAqY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKworCWNyeXB0b19kcm9wX3NwYXduKCZjdHgtPnNwYXduKTsKKwlrZnJlZShpbnN0KTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgcGNyeXB0X3RtcGwgPSB7CisJLm5hbWUgPSAicGNyeXB0IiwKKwkuYWxsb2MgPSBwY3J5cHRfYWxsb2MsCisJLmZyZWUgPSBwY3J5cHRfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwY3J5cHRfaW5pdCh2b2lkKQoreworCWVuY3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgicGVuY3J5cHQiKTsKKwlpZiAoIWVuY3dxKQorCQlnb3RvIGVycjsKKworCWRlY3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgicGRlY3J5cHQiKTsKKwlpZiAoIWRlY3dxKQorCQlnb3RvIGVycl9kZXN0cm95X2VuY3dxOworCisKKwlwY3J5cHRfZW5jX3BhZGF0YSA9IHBhZGF0YV9hbGxvYyhjcHVfcG9zc2libGVfbWFzaywgZW5jd3EpOworCWlmICghcGNyeXB0X2VuY19wYWRhdGEpCisJCWdvdG8gZXJyX2Rlc3Ryb3lfZGVjd3E7CisKKwlwY3J5cHRfZGVjX3BhZGF0YSA9IHBhZGF0YV9hbGxvYyhjcHVfcG9zc2libGVfbWFzaywgZGVjd3EpOworCWlmICghcGNyeXB0X2RlY19wYWRhdGEpCisJCWdvdG8gZXJyX2ZyZWVfcGFkYXRhOworCisJcGFkYXRhX3N0YXJ0KHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlwYWRhdGFfc3RhcnQocGNyeXB0X2RlY19wYWRhdGEpOworCisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOworCitlcnJfZnJlZV9wYWRhdGE6CisJcGFkYXRhX2ZyZWUocGNyeXB0X2VuY19wYWRhdGEpOworCitlcnJfZGVzdHJveV9kZWN3cToKKwlkZXN0cm95X3dvcmtxdWV1ZShkZWN3cSk7CisKK2Vycl9kZXN0cm95X2VuY3dxOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGVuY3dxKTsKKworZXJyOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGNyeXB0X2V4aXQodm9pZCkKK3sKKwlwYWRhdGFfc3RvcChwY3J5cHRfZW5jX3BhZGF0YSk7CisJcGFkYXRhX3N0b3AocGNyeXB0X2RlY19wYWRhdGEpOworCisJZGVzdHJveV93b3JrcXVldWUoZW5jd3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGRlY3dxKTsKKworCXBhZGF0YV9mcmVlKHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlwYWRhdGFfZnJlZShwY3J5cHRfZGVjX3BhZGF0YSk7CisKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOworfQorCittb2R1bGVfaW5pdChwY3J5cHRfaW5pdCk7Cittb2R1bGVfZXhpdChwY3J5cHRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlN0ZWZmZW4gS2xhc3NlcnQgPHN0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBhcmFsbGVsIGNyeXB0byB3cmFwcGVyIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5jIGIvY3J5cHRvL3Rlc3RtZ3IuYwppbmRleCA3NjIwYmZjLi5jNDk0ZDc2IDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5jCisrKyBiL2NyeXB0by90ZXN0bWdyLmMKQEAgLTE0NzcsOSArMTQ3Nyw1NCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYWxnX3Rlc3RfbnVsbChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywKKwkJCSAgICAgY29uc3QgY2hhciAqZHJpdmVyLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJcmV0dXJuIDA7Cit9CisKIC8qIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBzb3J0ZWQgYnkgYWxnb3JpdGhtIG5hbWUuICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgYWxnX3Rlc3RfZGVzY3NbXSA9IHsKIAl7CisJCS5hbGcgPSAiX19kcml2ZXItY2JjLWFlcy1hZXNuaSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IHsKKwkJCQkuZW5jID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0KKwkJCX0KKwkJfQorCX0sIHsKKwkJLmFsZyA9ICJfX2RyaXZlci1lY2ItYWVzLWFlc25pIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgeworCQkuYWxnID0gIl9fZ2hhc2gtcGNsbXVscWRxbmkiLAorCQkudGVzdCA9IGFsZ190ZXN0X251bGwsCisJCS5zdWl0ZSA9IHsKKwkJCS5oYXNoID0geworCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkuY291bnQgPSAwCisJCQl9CisJCX0KKwl9LCB7CiAJCS5hbGcgPSAiYW5zaV9jcHJuZyIsCiAJCS50ZXN0ID0gYWxnX3Rlc3RfY3BybmcsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApAQCAtMTYyMyw2ICsxNjY4LDMwIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAiY3J5cHRkKF9fZHJpdmVyLWVjYi1hZXMtYWVzbmkpIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgeworCQkuYWxnID0gImNyeXB0ZChfX2doYXNoLXBjbG11bHFkcW5pKSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmhhc2ggPSB7CisJCQkJLnZlY3MgPSBOVUxMLAorCQkJCS5jb3VudCA9IDAKKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJjdHIoYWVzKSIsCiAJCS50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApAQCAtMTY2OSw2ICsxNzM4LDIxIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAiZWNiKF9fYWVzLWFlc25pKSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IHsKKwkJCQkuZW5jID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0KKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJlY2IoYWVzKSIsCiAJCS50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oCmluZGV4IDBiYmExNDguLjRjZWQ1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNldmVudHMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmgKQEAgLTc2LDEyICs3Niw5IEBACiAgKiBldmdwZSAtIEdQRSBoYW5kbGluZyBhbmQgZGlzcGF0Y2gKICAqLwogYWNwaV9zdGF0dXMKLWFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3Moc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLAotCQkJCXU4IHR5cGUpOworYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pOwogCi1hY3BpX3N0YXR1cwotYWNwaV9ldl9lbmFibGVfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbywKLQkJICAgdTggd3JpdGVfdG9faGFyZHdhcmUpOworYWNwaV9zdGF0dXMgYWNwaV9ldl9lbmFibGVfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfZXZfZGlzYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKIApAQCAtMTIyLDkgKzExOSw2IEBACiB1MzIgYWNwaV9ldl9ncGVfZGV0ZWN0KHN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICpncGVfeHJ1cHRfbGlzdCk7CiAKIGFjcGlfc3RhdHVzCi1hY3BpX2V2X3NldF9ncGVfdHlwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sIHU4IHR5cGUpOwotCi1hY3BpX3N0YXR1cwogYWNwaV9ldl9jaGVja19mb3Jfd2FrZV9vbmx5X2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pOwogCiBhY3BpX3N0YXR1cyBhY3BpX2V2X2dwZV9pbml0aWFsaXplKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAppbmRleCA4MWU2NGY0Li4xM2NiODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaApAQCAtNDI2LDYgKzQyNiw4IEBACiAJc3RydWN0IGFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8gKnJlZ2lzdGVyX2luZm87CS8qIEJhY2twb2ludGVyIHRvIHJlZ2lzdGVyIGluZm8gKi8KIAl1OCBmbGFnczsJCS8qIE1pc2MgaW5mbyBhYm91dCB0aGlzIEdQRSAqLwogCXU4IGdwZV9udW1iZXI7CQkvKiBUaGlzIEdQRSAqLworCXU4IHJ1bnRpbWVfY291bnQ7CisJdTggd2FrZXVwX2NvdW50OwogfTsKIAogLyogSW5mb3JtYXRpb24gYWJvdXQgYSBHUEUgcmVnaXN0ZXIgcGFpciwgb25lIHBlciBlYWNoIHN0YXR1cy9lbmFibGUgcGFpciBpbiBhbiBhcnJheSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCmluZGV4IDY0MDYyYjEuLjA3ZjZlMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKQEAgLTI4Nyw4ICsyODcsMTAgQEAKIAogc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyIHsKIAlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwkvKiBQYXJlbnQgZGV2aWNlICovCisJdTMyIGhhbmRsZXJfdHlwZTsKIAlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXI7CiAJdm9pZCAqY29udGV4dDsKKwlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKm5leHQ7CiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfYWRkcl9oYW5kbGVyIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwppbmRleCBhZmFjZjQ0Li4wYjQ1MzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCkBAIC01NCw1NCArNTQsOSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X3NldF9ncGVfdHlwZQotICoKLSAqIFBBUkFNRVRFUlM6ICBncGVfZXZlbnRfaW5mbyAgICAgICAgICAtIEdQRSB0byBzZXQKLSAqICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgICAtIE5ldyB0eXBlCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBTZXRzIHRoZSBuZXcgdHlwZSBmb3IgdGhlIEdQRSAod2FrZSwgcnVuLCBvciB3YWtlL3J1bikKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1hY3BpX3N0YXR1cwotYWNwaV9ldl9zZXRfZ3BlX3R5cGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLCB1OCB0eXBlKQotewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfc2V0X2dwZV90eXBlKTsKLQotCS8qIFZhbGlkYXRlIHR5cGUgYW5kIHVwZGF0ZSByZWdpc3RlciBlbmFibGUgbWFza3MgKi8KLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFOgotCWNhc2UgQUNQSV9HUEVfVFlQRV9SVU5USU1FOgotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTjoKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQotCi0JLyogRGlzYWJsZSB0aGUgR1BFIGlmIGN1cnJlbnRseSBlbmFibGVkICovCi0KLQlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKLQotCS8qIENsZWFyIHRoZSB0eXBlIGJpdHMgYW5kIGluc2VydCB0aGUgbmV3IFR5cGUgKi8KLQotCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPSB+QUNQSV9HUEVfVFlQRV9NQVNLOwotCWdwZV9ldmVudF9pbmZvLT5mbGFncyB8PSB0eXBlOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgICAgIC0gR1BFIHRvIHVwZGF0ZQotICogICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgIC0gV2hhdCB0byBkbzogQUNQSV9HUEVfRElTQUJMRSBvcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9HUEVfRU5BQkxFCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTExMCw4ICs2NSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cwotYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCi0JCQkJdTggdHlwZSkKK2FjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3Moc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKQogewogCXN0cnVjdCBhY3BpX2dwZV9yZWdpc3Rlcl9pbmZvICpncGVfcmVnaXN0ZXJfaW5mbzsKIAl1OCByZWdpc3Rlcl9iaXQ7CkBAIC0xMjcsMzcgKzgxLDE0IEBACiAJICAgICgxIDw8CiAJICAgICAoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLSBncGVfcmVnaXN0ZXJfaW5mby0+YmFzZV9ncGVfbnVtYmVyKSk7CiAKLQkvKiAxKSBEaXNhYmxlIGNhc2UuIFNpbXBseSBjbGVhciBhbGwgZW5hYmxlIGJpdHMgKi8KKwlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLCByZWdpc3Rlcl9iaXQpOworCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKIAotCWlmICh0eXBlID09IEFDUElfR1BFX0RJU0FCTEUpIHsKLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwKLQkJCSAgICAgICByZWdpc3Rlcl9iaXQpOwotCQlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Ci0JfQotCi0JLyogMikgRW5hYmxlIGNhc2UuIFNldC9DbGVhciB0aGUgYXBwcm9wcmlhdGUgZW5hYmxlIGJpdHMgKi8KLQotCXN3aXRjaCAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9NQVNLKSB7Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0U6Ci0JCUFDUElfU0VUX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLCByZWdpc3Rlcl9iaXQpOwotCQlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3dha2UsCi0JCQkgICAgICAgcmVnaXN0ZXJfYml0KTsKKwlpZiAoZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpCiAJCUFDUElfU0VUX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7Ci0JCWJyZWFrOwogCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOOgorCWlmIChncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50KQogCQlBQ1BJX1NFVF9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwgcmVnaXN0ZXJfYml0KTsKLQkJQUNQSV9TRVRfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KQEAgLTE2Nyw4ICs5OCw2IEBACiAgKiBGVU5DVElPTjogICAgYWNwaV9ldl9lbmFibGVfZ3BlCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgICAgIC0gR1BFIHRvIGVuYWJsZQotICogICAgICAgICAgICAgIHdyaXRlX3RvX2hhcmR3YXJlICAgICAgIC0gRW5hYmxlIG5vdywgb3IganVzdCBtYXJrIGRhdGEgc3RydWN0cwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdBS0UgR1BFcyBzaG91bGQgYmUgZGVmZXJyZWQpCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTE3Niw5ICsxMDUsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWFjcGlfc3RhdHVzCi1hY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLAotCQkgICB1OCB3cml0ZV90b19oYXJkd2FyZSkKK2FjcGlfc3RhdHVzIGFjcGlfZXZfZW5hYmxlX2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCkBAIC0xODYsNDcgKzExMywyMCBAQAogCiAJLyogTWFrZSBzdXJlIEhXIGVuYWJsZSBtYXNrcyBhcmUgdXBkYXRlZCAqLwogCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfRU5BQkxFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwlzdGF0dXMgPSBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KIAogCS8qIE1hcmsgd2FrZS1lbmFibGVkIG9yIEhXIGVuYWJsZSwgb3IgYm90aCAqLwogCi0Jc3dpdGNoIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spIHsKLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRToKKwlpZiAoZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpIHsKKwkJLyogQ2xlYXIgdGhlIEdQRSAob2Ygc3RhbGUgZXZlbnRzKSwgdGhlbiBlbmFibGUgaXQgKi8KKwkJc3RhdHVzID0gYWNwaV9od19jbGVhcl9ncGUoZ3BlX2V2ZW50X2luZm8pOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAotCQlBQ1BJX1NFVF9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCQlicmVhazsKLQotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTjoKLQotCQlBQ1BJX1NFVF9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCi0JCS8qbGludCAtZmFsbHRocm91Z2ggKi8KLQotCWNhc2UgQUNQSV9HUEVfVFlQRV9SVU5USU1FOgotCi0JCUFDUElfU0VUX0JJVChncGVfZXZlbnRfaW5mby0+ZmxhZ3MsIEFDUElfR1BFX1JVTl9FTkFCTEVEKTsKLQotCQlpZiAod3JpdGVfdG9faGFyZHdhcmUpIHsKLQotCQkJLyogQ2xlYXIgdGhlIEdQRSAob2Ygc3RhbGUgZXZlbnRzKSwgdGhlbiBlbmFibGUgaXQgKi8KLQotCQkJc3RhdHVzID0gYWNwaV9od19jbGVhcl9ncGUoZ3BlX2V2ZW50X2luZm8pOwotCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCQl9Ci0KLQkJCS8qIEVuYWJsZSB0aGUgcmVxdWVzdGVkIHJ1bnRpbWUgR1BFICovCi0KLQkJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfZ3BlX2VuYWJsZV9yZWcoZ3BlX2V2ZW50X2luZm8pOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCQkvKiBFbmFibGUgdGhlIHJlcXVlc3RlZCBydW50aW1lIEdQRSAqLworCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlX2dwZV9lbmFibGVfcmVnKGdwZV9ldmVudF9pbmZvKTsKIAl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMjUyLDM0ICsxNTIsOSBAQAogCiAJLyogTWFrZSBzdXJlIEhXIGVuYWJsZSBtYXNrcyBhcmUgdXBkYXRlZCAqLwogCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfRElTQUJMRSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJc3RhdHVzID0gYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQkvKiBDbGVhciB0aGUgYXBwcm9wcmlhdGUgZW5hYmxlZCBmbGFncyBmb3IgdGhpcyBHUEUgKi8KLQotCXN3aXRjaCAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9NQVNLKSB7Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0U6Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9ldmVudF9pbmZvLT5mbGFncywgQUNQSV9HUEVfV0FLRV9FTkFCTEVEKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRV9SVU46Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9ldmVudF9pbmZvLT5mbGFncywgQUNQSV9HUEVfV0FLRV9FTkFCTEVEKTsKLQotCQkvKiBmYWxsdGhyb3VnaCAqLwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0KLQkJLyogRGlzYWJsZSB0aGUgcmVxdWVzdGVkIHJ1bnRpbWUgR1BFICovCi0KLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9SVU5fRU5BQkxFRCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQogCiAJLyoKIAkgKiBFdmVuIGlmIHdlIGRvbid0IGtub3cgdGhlIEdQRSB0eXBlLCBtYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMKQEAgLTUyMSw3ICszOTYsNyBAQAogCiAJLyogU2V0IHRoZSBHUEUgZmxhZ3MgZm9yIHJldHVybiB0byBlbmFibGVkIHN0YXRlICovCiAKLQkodm9pZClhY3BpX2V2X2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8sIEZBTFNFKTsKKwkodm9pZClhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKIAogCS8qCiAJICogVGFrZSBhIHNuYXBzaG90IG9mIHRoZSBHUEUgaW5mbyBmb3IgdGhpcyBsZXZlbCAtIHdlIGNvcHkgdGhlIGluZm8gdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYwppbmRleCAyNDc5MjA5Li4zZDRjNGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCkBAIC0yNTgsNyArMjU4LDYgQEAKIAl1MzIgZ3BlX251bWJlcjsKIAljaGFyIG5hbWVbQUNQSV9OQU1FX1NJWkUgKyAxXTsKIAl1OCB0eXBlOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfc2F2ZV9tZXRob2RfaW5mbyk7CiAKQEAgLTMyNSwyNiArMzI0LDIwIEBACiAKIAkvKgogCSAqIE5vdyB3ZSBjYW4gYWRkIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGdwZV9ldmVudF9pbmZvIGJsb2NrIGZvciB1c2UKLQkgKiBkdXJpbmcgZGlzcGF0Y2ggb2YgdGhpcyBHUEUuIERlZmF1bHQgdHlwZSBpcyBSVU5USU1FLCBhbHRob3VnaCB0aGlzIG1heQotCSAqIGNoYW5nZSB3aGVuIHRoZSBfUFJXIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIGxhdGVyLgorCSAqIGR1cmluZyBkaXNwYXRjaCBvZiB0aGlzIEdQRS4KIAkgKi8KIAlncGVfZXZlbnRfaW5mbyA9CiAJICAgICZncGVfYmxvY2stPmV2ZW50X2luZm9bZ3BlX251bWJlciAtIGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXJdOwogCi0JZ3BlX2V2ZW50X2luZm8tPmZsYWdzID0gKHU4KQotCSAgICAodHlwZSB8IEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCB8IEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CisJZ3BlX2V2ZW50X2luZm8tPmZsYWdzID0gKHU4KSAodHlwZSB8IEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCk7CiAKIAlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2gubWV0aG9kX25vZGUgPQogCSAgICAoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKilvYmpfaGFuZGxlOwogCi0JLyogVXBkYXRlIGVuYWJsZSBtYXNrLCBidXQgZG9uJ3QgZW5hYmxlIHRoZSBIVyBHUEUgYXMgb2YgeWV0ICovCi0KLQlzdGF0dXMgPSBhY3BpX2V2X2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8sIEZBTFNFKTsKLQogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKIAkJCSAgIlJlZ2lzdGVyZWQgR1BFIG1ldGhvZCAlcyBhcyBHUEUgbnVtYmVyIDB4JS4yWFxuIiwKIAkJCSAgbmFtZSwgZ3BlX251bWJlcikpOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NTQsMjAgKzQ0Nyw3IEBACiAJCQkJCQkJZ3BlX2Jsb2NrLT4KIAkJCQkJCQlibG9ja19iYXNlX251bWJlcl07CiAKLQkJLyogTWFyayBHUEUgZm9yIFdBS0UtT05MWSBidXQgV0FLRV9ESVNBQkxFRCAqLwotCi0JCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPQotCQkgICAgfihBQ1BJX0dQRV9XQUtFX0VOQUJMRUQgfCBBQ1BJX0dQRV9SVU5fRU5BQkxFRCk7Ci0KLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfZXZfc2V0X2dwZV90eXBlKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9UWVBFX1dBS0UpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvLAotCQkJCQkJICAgIEFDUElfR1BFX0RJU0FCTEUpOworCQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gQUNQSV9HUEVfQ0FOX1dBS0U7CiAJfQogCiAgICAgICBjbGVhbnVwOgpAQCAtOTg5LDcgKzk2OSw2IEBACiBhY3BpX2V2X2luaXRpYWxpemVfZ3BlX2Jsb2NrKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpncGVfZGV2aWNlLAogCQkJICAgICBzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAqZ3BlX2Jsb2NrKQogewotCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAJc3RydWN0IGFjcGlfZ3BlX3dhbGtfaW5mbyBncGVfaW5mbzsKIAl1MzIgd2FrZV9ncGVfY291bnQ7CkBAIC0xMDE5LDQyICs5OTgsNTAgQEAKIAkJZ3BlX2luZm8uZ3BlX2Jsb2NrID0gZ3BlX2Jsb2NrOwogCQlncGVfaW5mby5ncGVfZGV2aWNlID0gZ3BlX2RldmljZTsKIAotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9uc193YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAorCQlhY3BpX25zX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsCiAJCQkJCSAgIEFDUElfVUlOVDMyX01BWCwgQUNQSV9OU19XQUxLX1VOTE9DSywKIAkJCQkJICAgYWNwaV9ldl9tYXRjaF9wcndfYW5kX2dwZSwgTlVMTCwKIAkJCQkJICAgJmdwZV9pbmZvLCBOVUxMKTsKIAl9CiAKIAkvKgotCSAqIEVuYWJsZSBhbGwgR1BFcyBpbiB0aGlzIGJsb2NrIHRoYXQgaGF2ZSB0aGVzZSBhdHRyaWJ1dGVzOgotCSAqIDEpIGFyZSAicnVudGltZSIgb3IgInJ1bi93YWtlIiBHUEVzLCBhbmQKLQkgKiAyKSBoYXZlIGEgY29ycmVzcG9uZGluZyBfTHh4IG9yIF9FeHggbWV0aG9kCi0JICoKLQkgKiBBbnkgb3RoZXIgR1BFcyB3aXRoaW4gdGhpcyBibG9jayBtdXN0IGJlIGVuYWJsZWQgdmlhIHRoZQotCSAqIGFjcGlfZW5hYmxlX2dwZSgpIGV4dGVybmFsIGludGVyZmFjZS4KKwkgKiBFbmFibGUgYWxsIEdQRXMgdGhhdCBoYXZlIGEgY29ycmVzcG9uZGluZyBtZXRob2QgYW5kIGFyZW4ndAorCSAqIGNhcGFibGUgb2YgZ2VuZXJhdGluZyB3YWtldXBzLiBBbnkgb3RoZXIgR1BFcyB3aXRoaW4gdGhpcyBibG9jaworCSAqIG11c3QgYmUgZW5hYmxlZCB2aWEgdGhlIGFjcGlfZW5hYmxlX2dwZSgpIGludGVyZmFjZS4KIAkgKi8KIAl3YWtlX2dwZV9jb3VudCA9IDA7CiAJZ3BlX2VuYWJsZWRfY291bnQgPSAwOworCWlmIChncGVfZGV2aWNlID09IGFjcGlfZ2JsX2ZhZHRfZ3BlX2RldmljZSkKKwkJZ3BlX2RldmljZSA9IE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIOyBqKyspIHsKKwkJCWFjcGlfc3RhdHVzIHN0YXR1czsKKwkJCWFjcGlfc2l6ZSBncGVfaW5kZXg7CisJCQlpbnQgZ3BlX251bWJlcjsKIAogCQkJLyogR2V0IHRoZSBpbmZvIGJsb2NrIGZvciB0aGlzIHBhcnRpY3VsYXIgR1BFICovCisJCQlncGVfaW5kZXggPSAoYWNwaV9zaXplKWkgKiBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSCArIGo7CisJCQlncGVfZXZlbnRfaW5mbyA9ICZncGVfYmxvY2stPmV2ZW50X2luZm9bZ3BlX2luZGV4XTsKIAotCQkJZ3BlX2V2ZW50X2luZm8gPSAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvWygoYWNwaV9zaXplKSBpICoKLQkJCQkJCQkJIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKQotCQkJCQkJCQkrIGpdOwotCi0JCQlpZiAoKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCQkJICAgICBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpICYmCi0JCQkgICAgKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1RZUEVfUlVOVElNRSkpIHsKLQkJCQlncGVfZW5hYmxlZF9jb3VudCsrOwotCQkJfQotCi0JCQlpZiAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9XQUtFKSB7CisJCQlpZiAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfQ0FOX1dBS0UpIHsKIAkJCQl3YWtlX2dwZV9jb3VudCsrOworCQkJCWlmIChhY3BpX2dibF9sZWF2ZV93YWtlX2dwZXNfZGlzYWJsZWQpCisJCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQlpZiAoIShncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpKQorCQkJCWNvbnRpbnVlOworCisJCQlncGVfbnVtYmVyID0gZ3BlX2luZGV4ICsgZ3BlX2Jsb2NrLT5ibG9ja19iYXNlX251bWJlcjsKKwkJCXN0YXR1cyA9IGFjcGlfZW5hYmxlX2dwZShncGVfZGV2aWNlLCBncGVfbnVtYmVyLAorCQkJCQkJQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAorCQkJCQkJIkZhaWxlZCB0byBlbmFibGUgR1BFICUwMlhcbiIsCisJCQkJCQlncGVfbnVtYmVyKSk7CisJCQllbHNlCisJCQkJZ3BlX2VuYWJsZWRfY291bnQrKzsKIAkJfQogCX0KIApAQCAtMTA2MiwxNSArMTA0OSw3IEBACiAJCQkgICJGb3VuZCAldSBXYWtlLCBFbmFibGVkICV1IFJ1bnRpbWUgR1BFcyBpbiB0aGlzIGJsb2NrXG4iLAogCQkJICB3YWtlX2dwZV9jb3VudCwgZ3BlX2VuYWJsZWRfY291bnQpKTsKIAotCS8qIEVuYWJsZSBhbGwgdmFsaWQgcnVudGltZSBHUEVzIGZvdW5kIGFib3ZlICovCi0KLQlzdGF0dXMgPSBhY3BpX2h3X2VuYWJsZV9ydW50aW1lX2dwZV9ibG9jayhOVUxMLCBncGVfYmxvY2ssIE5VTEwpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ291bGQgbm90IGVuYWJsZSBHUEVzIGluIEdwZUJsb2NrICVwIiwKLQkJCSAgICBncGVfYmxvY2spKTsKLQl9Ci0KLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMKaW5kZXggY2UyMjRlMS4uOGYwZmFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jCkBAIC0yNTksOSArMjU5LDE1IEBACiAKIAloYW5kbGVyX29iaiA9IG5vdGlmeV9pbmZvLT5ub3RpZnkuaGFuZGxlcl9vYmo7CiAJaWYgKGhhbmRsZXJfb2JqKSB7Ci0JCWhhbmRsZXJfb2JqLT5ub3RpZnkuaGFuZGxlcihub3RpZnlfaW5mby0+bm90aWZ5Lm5vZGUsCi0JCQkJCSAgICBub3RpZnlfaW5mby0+bm90aWZ5LnZhbHVlLAotCQkJCQkgICAgaGFuZGxlcl9vYmotPm5vdGlmeS5jb250ZXh0KTsKKwkJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpub3RpZmllcjsKKworCQlub3RpZmllciA9ICZoYW5kbGVyX29iai0+bm90aWZ5OworCQl3aGlsZSAobm90aWZpZXIpIHsKKwkJCW5vdGlmaWVyLT5oYW5kbGVyKG5vdGlmeV9pbmZvLT5ub3RpZnkubm9kZSwKKwkJCQkJICBub3RpZnlfaW5mby0+bm90aWZ5LnZhbHVlLAorCQkJCQkgIG5vdGlmaWVyLT5jb250ZXh0KTsKKwkJCW5vdGlmaWVyID0gbm90aWZpZXItPm5leHQ7CisJCX0KIAl9CiAKIAkvKiBBbGwgZG9uZSB3aXRoIHRoZSBpbmZvIG9iamVjdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYwppbmRleCAyZmUwODA5Li40NzRlMmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYwpAQCAtMjE4LDYgKzIxOCw3MiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3BvcHVsYXRlX2hhbmRsZXJfb2JqZWN0CisgKgorICogUEFSQU1FVEVSUzogIGhhbmRsZXJfb2JqICAgICAgICAtIEhhbmRsZXIgb2JqZWN0IHRvIHBvcHVsYXRlCisgKiAgICAgICAgICAgICAgaGFuZGxlcl90eXBlICAgICAgIC0gVGhlIHR5cGUgb2YgaGFuZGxlcjoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUElfU1lTVEVNX05PVElGWTogc3lzdGVtX2hhbmRsZXIgKDAwLTdmKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9ERVZJQ0VfTk9USUZZOiBkcml2ZXJfaGFuZGxlciAoODAtZmYpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0FMTF9OT1RJRlk6ICBib3RoIHN5c3RlbSBhbmQgZGV2aWNlCisgKiAgICAgICAgICAgICAgaGFuZGxlciAgICAgICAgICAgIC0gQWRkcmVzcyBvZiB0aGUgaGFuZGxlcgorICogICAgICAgICAgICAgIGNvbnRleHQgICAgICAgICAgICAtIFZhbHVlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBvbiBlYWNoIEdQRQorICogICAgICAgICAgICAgIG5leHQgICAgICAgICAgICAgICAtIEFkZHJlc3Mgb2YgYSBoYW5kbGVyIG9iamVjdCB0byBsaW5rIHRvCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogUG9wdWxhdGUgYSBoYW5kbGVyIG9iamVjdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK2FjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3Qoc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpoYW5kbGVyX29iaiwKKwkJCSAgICAgdTMyIGhhbmRsZXJfdHlwZSwKKwkJCSAgICAgYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyLCB2b2lkICpjb250ZXh0LAorCQkJICAgICBzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKm5leHQpCit7CisJaGFuZGxlcl9vYmotPmhhbmRsZXJfdHlwZSA9IGhhbmRsZXJfdHlwZTsKKwloYW5kbGVyX29iai0+aGFuZGxlciA9IGhhbmRsZXI7CisJaGFuZGxlcl9vYmotPmNvbnRleHQgPSBjb250ZXh0OworCWhhbmRsZXJfb2JqLT5uZXh0ID0gbmV4dDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9hZGRfaGFuZGxlcl9vYmplY3QKKyAqCisgKiBQQVJBTUVURVJTOiAgcGFyZW50X29iaiAgICAgICAgIC0gUGFyZW50IG9mIHRoZSBuZXcgb2JqZWN0CisgKiAgICAgICAgICAgICAgaGFuZGxlciAgICAgICAgICAgIC0gQWRkcmVzcyBvZiB0aGUgaGFuZGxlcgorICogICAgICAgICAgICAgIGNvbnRleHQgICAgICAgICAgICAtIFZhbHVlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBvbiBlYWNoIEdQRQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogQ3JlYXRlIGEgbmV3IGhhbmRsZXIgb2JqZWN0IGFuZCBwb3B1bGF0ZSBpdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2FkZF9oYW5kbGVyX29iamVjdChzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKnBhcmVudF9vYmosCisJCQlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpoYW5kbGVyX29iajsKKworCS8qIFRoZSBwYXJlbnQgbXVzdCBub3QgYmUgYSBkZWZpY2Ugbm90aWZ5IGhhbmRsZXIgb2JqZWN0LiAqLworCWlmIChwYXJlbnRfb2JqLT5oYW5kbGVyX3R5cGUgJiBBQ1BJX0RFVklDRV9OT1RJRlkpCisJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOworCisJaGFuZGxlcl9vYmogPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2YoKmhhbmRsZXJfb2JqKSk7CisJaWYgKCFoYW5kbGVyX29iaikKKwkJcmV0dXJuIEFFX05PX01FTU9SWTsKKworCWFjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3QoaGFuZGxlcl9vYmosCisJCQkJCUFDUElfU1lTVEVNX05PVElGWSwKKwkJCQkJaGFuZGxlciwgY29udGV4dCwKKwkJCQkJcGFyZW50X29iai0+bmV4dCk7CisJcGFyZW50X29iai0+bmV4dCA9IGhhbmRsZXJfb2JqOworCisJcmV0dXJuIEFFX09LOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIKICAqCiAgKiBQQVJBTUVURVJTOiAgRGV2aWNlICAgICAgICAgIC0gVGhlIGRldmljZSBmb3Igd2hpY2ggbm90aWZpZXMgd2lsbCBiZSBoYW5kbGVkCkBAIC0zMTYsMTUgKzM4MiwzMiBAQAogCQlvYmpfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKIAkJaWYgKG9ial9kZXNjKSB7CiAKLQkJCS8qIE9iamVjdCBleGlzdHMgLSBtYWtlIHN1cmUgdGhlcmUncyBubyBoYW5kbGVyICovCisJCQkvKiBPYmplY3QgZXhpc3RzLiAqLwogCi0JCQlpZiAoKChoYW5kbGVyX3R5cGUgJiBBQ1BJX1NZU1RFTV9OT1RJRlkpICYmCi0JCQkgICAgIG9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnkpIHx8Ci0JCQkgICAgKChoYW5kbGVyX3R5cGUgJiBBQ1BJX0RFVklDRV9OT1RJRlkpICYmCi0JCQkgICAgIG9ial9kZXNjLT5jb21tb25fbm90aWZ5LmRldmljZV9ub3RpZnkpKSB7CisJCQkvKiBGb3IgYSBkZXZpY2Ugbm90aWZ5LCBtYWtlIHN1cmUgdGhlcmUncyBubyBoYW5kbGVyLiAqLworCQkJaWYgKChoYW5kbGVyX3R5cGUgJiBBQ1BJX0RFVklDRV9OT1RJRlkpICYmCisJCQkgICAgIG9ial9kZXNjLT5jb21tb25fbm90aWZ5LmRldmljZV9ub3RpZnkpIHsKIAkJCQlzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKIAkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KKworCQkJLyogU3lzdGVtIG5vdGlmaWVzIG1heSBoYXZlIG1vcmUgaGFuZGxlcnMgaW5zdGFsbGVkLiAqLworCQkJbm90aWZ5X29iaiA9IG9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnk7CisKKwkJCWlmICgoaGFuZGxlcl90eXBlICYgQUNQSV9TWVNURU1fTk9USUZZKSAmJiBub3RpZnlfb2JqKSB7CisJCQkJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpwYXJlbnRfb2JqOworCisJCQkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgeworCQkJCQlzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKKwkJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCQkJfQorCisJCQkJcGFyZW50X29iaiA9ICZub3RpZnlfb2JqLT5ub3RpZnk7CisJCQkJc3RhdHVzID0gYWNwaV9hZGRfaGFuZGxlcl9vYmplY3QocGFyZW50X29iaiwKKwkJCQkJCQkJIGhhbmRsZXIsCisJCQkJCQkJCSBjb250ZXh0KTsKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIENyZWF0ZSBhIG5ldyBvYmplY3QgKi8KIApAQCAtMzU2LDkgKzQzOSwxMCBAQAogCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCX0KIAotCQlub3RpZnlfb2JqLT5ub3RpZnkubm9kZSA9IG5vZGU7Ci0JCW5vdGlmeV9vYmotPm5vdGlmeS5oYW5kbGVyID0gaGFuZGxlcjsKLQkJbm90aWZ5X29iai0+bm90aWZ5LmNvbnRleHQgPSBjb250ZXh0OworCQlhY3BpX3BvcHVsYXRlX2hhbmRsZXJfb2JqZWN0KCZub3RpZnlfb2JqLT5ub3RpZnksCisJCQkJCQloYW5kbGVyX3R5cGUsCisJCQkJCQloYW5kbGVyLCBjb250ZXh0LAorCQkJCQkJTlVMTCk7CiAKIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgewogCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSA9IG5vdGlmeV9vYmo7CkBAIC00MTgsNiArNTAyLDEwIEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKKworCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLworCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7CisKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byBleGl0OwpAQCAtNDQ1LDE1ICs1MzMsNiBAQAogCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCX0KIAotCQkvKiBNYWtlIHN1cmUgYWxsIGRlZmVycmVkIHRhc2tzIGFyZSBjb21wbGV0ZWQgKi8KLQotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKLQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byBleGl0OwotCQl9Ci0KIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgewogCQkJYWNwaV9nYmxfc3lzdGVtX25vdGlmeS5ub2RlID0gTlVMTDsKIAkJCWFjcGlfZ2JsX3N5c3RlbV9ub3RpZnkuaGFuZGxlciA9IE5VTEw7CkBAIC00ODgsMjggKzU2Nyw2MCBAQAogCQkvKiBPYmplY3QgZXhpc3RzIC0gbWFrZSBzdXJlIHRoZXJlJ3MgYW4gZXhpc3RpbmcgaGFuZGxlciAqLwogCiAJCWlmIChoYW5kbGVyX3R5cGUgJiBBQ1BJX1NZU1RFTV9OT1RJRlkpIHsKKwkJCXN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqaGFuZGxlcl9vYmo7CisJCQlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKnBhcmVudF9vYmo7CisKIAkJCW5vdGlmeV9vYmogPSBvYmpfZGVzYy0+Y29tbW9uX25vdGlmeS5zeXN0ZW1fbm90aWZ5OwogCQkJaWYgKCFub3RpZnlfb2JqKSB7CiAJCQkJc3RhdHVzID0gQUVfTk9UX0VYSVNUOwogCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQogCi0JCQlpZiAobm90aWZ5X29iai0+bm90aWZ5LmhhbmRsZXIgIT0gaGFuZGxlcikgeworCQkJaGFuZGxlcl9vYmogPSAmbm90aWZ5X29iai0+bm90aWZ5OworCQkJcGFyZW50X29iaiA9IE5VTEw7CisJCQl3aGlsZSAoaGFuZGxlcl9vYmotPmhhbmRsZXIgIT0gaGFuZGxlcikgeworCQkJCWlmIChoYW5kbGVyX29iai0+bmV4dCkgeworCQkJCQlwYXJlbnRfb2JqID0gaGFuZGxlcl9vYmo7CisJCQkJCWhhbmRsZXJfb2JqID0gaGFuZGxlcl9vYmotPm5leHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaGFuZGxlcl9vYmotPmhhbmRsZXIgIT0gaGFuZGxlcikgewogCQkJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9Ci0JCQkvKiBNYWtlIHN1cmUgYWxsIGRlZmVycmVkIHRhc2tzIGFyZSBjb21wbGV0ZWQgKi8KIAotCQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlnb3RvIGV4aXQ7CisJCQkvKgorCQkJICogUmVtb3ZlIHRoZSBoYW5kbGVyLiAgVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNhc2VzLgorCQkJICogRmlyc3QsIHdlIG1heSBuZWVkIHRvIHJlbW92ZSBhIG5vbi1lbWJlZGRlZCBvYmplY3QuCisJCQkgKiBTZWNvbmQsIHdlIG1heSBuZWVkIHRvIHJlbW92ZSB0aGUgZW1iZWRkZWQgb2JqZWN0J3MKKwkJCSAqIGhhbmRsZXIgZGF0YSwgd2hpbGUgbm9uLWVtYmVkZGVkIG9iamVjdHMgZXhpc3QuCisJCQkgKiBGaW5hbGx5LCB3ZSBtYXkgbmVlZCB0byByZW1vdmUgdGhlIGVtYmVkZGVkIG9iamVjdAorCQkJICogZW50aXJlbHkgYWxvbmcgd2l0aCBpdHMgY29udGFpbmVyLgorCQkJICovCisJCQlpZiAocGFyZW50X29iaikgeworCQkJCS8qIE5vbi1lbWJlZGRlZCBvYmplY3QgaXMgYmVpbmcgcmVtb3ZlZC4gKi8KKwkJCQlwYXJlbnRfb2JqLT5uZXh0ID0gaGFuZGxlcl9vYmotPm5leHQ7CisJCQkJQUNQSV9GUkVFKGhhbmRsZXJfb2JqKTsKKwkJCX0gZWxzZSBpZiAobm90aWZ5X29iai0+bm90aWZ5Lm5leHQpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBoYW5kbGVyIG1hdGNoZXMgdGhlIGVtYmVkZGVkIG9iamVjdCwgYnV0CisJCQkJICogdGhlcmUgYXJlIG1vcmUgaGFuZGxlciBvYmplY3RzIGluIHRoZSBsaXN0LgorCQkJCSAqIFJlcGxhY2UgdGhlIGVtYmVkZGVkIG9iamVjdCdzIGRhdGEgd2l0aCB0aGUKKwkJCQkgKiBmaXJzdCBuZXh0IG9iamVjdCdzIGRhdGEgYW5kIHJlbW92ZSB0aGF0CisJCQkJICogb2JqZWN0LgorCQkJCSAqLworCQkJCXBhcmVudF9vYmogPSAmbm90aWZ5X29iai0+bm90aWZ5OworCQkJCWhhbmRsZXJfb2JqID0gbm90aWZ5X29iai0+bm90aWZ5Lm5leHQ7CisJCQkJKnBhcmVudF9vYmogPSAqaGFuZGxlcl9vYmo7CisJCQkJQUNQSV9GUkVFKGhhbmRsZXJfb2JqKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogTm8gbW9yZSBoYW5kbGVyIG9iamVjdHMgaW4gdGhlIGxpc3QuICovCisJCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSA9IE5VTEw7CisJCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG5vdGlmeV9vYmopOwogCQkJfQotCi0JCQkvKiBSZW1vdmUgdGhlIGhhbmRsZXIgKi8KLQkJCW9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnkgPSBOVUxMOwotCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG5vdGlmeV9vYmopOwogCQl9CiAKIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgewpAQCAtNTIzLDE0ICs2MzQsNiBAQAogCQkJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9Ci0JCQkvKiBNYWtlIHN1cmUgYWxsIGRlZmVycmVkIHRhc2tzIGFyZSBjb21wbGV0ZWQgKi8KLQotCQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9CiAKIAkJCS8qIFJlbW92ZSB0aGUgaGFuZGxlciAqLwogCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuZGV2aWNlX25vdGlmeSA9IE5VTEw7CkBAIC02MTcsMTMgKzcyMCw2IEBACiAJaGFuZGxlci0+Y29udGV4dCA9IGNvbnRleHQ7CiAJaGFuZGxlci0+bWV0aG9kX25vZGUgPSBncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2gubWV0aG9kX25vZGU7CiAKLQkvKiBEaXNhYmxlIHRoZSBHUEUgYmVmb3JlIGluc3RhbGxpbmcgdGhlIGhhbmRsZXIgKi8KLQotCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKLQl9Ci0KIAkvKiBJbnN0YWxsIHRoZSBoYW5kbGVyICovCiAKIAlmbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKQEAgLTcwNywxMyArODAzLDYgQEAKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0JLyogRGlzYWJsZSB0aGUgR1BFIGJlZm9yZSByZW1vdmluZyB0aGUgaGFuZGxlciAqLwotCi0Jc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gdW5sb2NrX2FuZF9leGl0OwotCX0KLQogCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwogCiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0VWRU5UUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKaW5kZXggZWVkN2EzOC4uMTI0YzE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwpAQCAtMjAxLDY3ICsyMDEsMjUgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9zZXRfZ3BlX3R5cGUKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3NldF9ncGUKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKICAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKLSAqICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgLSBOZXcgR1BFIHR5cGUKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IFNldCB0aGUgdHlwZSBvZiBhbiBpbmRpdmlkdWFsIEdQRQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX3NldF9ncGVfdHlwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfc2V0X2dwZV90eXBlKTsKLQotCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyICovCi0KLQlncGVfZXZlbnRfaW5mbyA9IGFjcGlfZXZfZ2V0X2dwZV9ldmVudF9pbmZvKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIpOwotCWlmICghZ3BlX2V2ZW50X2luZm8pIHsKLQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKLQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JfQotCi0JaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spID09IHR5cGUpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKLQl9Ci0KLQkvKiBTZXQgdGhlIG5ldyB0eXBlICh3aWxsIGRpc2FibGUgR1BFIGlmIGN1cnJlbnRseSBlbmFibGVkKSAqLwotCi0Jc3RhdHVzID0gYWNwaV9ldl9zZXRfZ3BlX3R5cGUoZ3BlX2V2ZW50X2luZm8sIHR5cGUpOwotCi0gICAgICB1bmxvY2tfYW5kX2V4aXQ6Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLUFDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9ncGVfdHlwZSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9lbmFibGVfZ3BlCi0gKgotICogUEFSQU1FVEVSUzogIGdwZV9kZXZpY2UgICAgICAtIFBhcmVudCBHUEUgRGV2aWNlCi0gKiAgICAgICAgICAgICAgZ3BlX251bWJlciAgICAgIC0gR1BFIGxldmVsIHdpdGhpbiB0aGUgR1BFIGJsb2NrCi0gKiAgICAgICAgICAgICAgRmxhZ3MgICAgICAgICAgIC0gSnVzdCBlbmFibGUsIG9yIGFsc28gd2FrZSBlbmFibGU/CisgKiAgICAgICAgICAgICAgYWN0aW9uICAgICAgICAgIC0gRW5hYmxlIG9yIGRpc2FibGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgZnJvbSBJU1Igb3Igbm90CiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBFbmFibGUgYW4gQUNQSSBldmVudCAoZ2VuZXJhbCBwdXJwb3NlKQorICogREVTQ1JJUFRJT046IEVuYWJsZSBvciBkaXNhYmxlIGFuIEFDUEkgZXZlbnQgKGdlbmVyYWwgcHVycG9zZSkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKQorYWNwaV9zdGF0dXMgYWNwaV9zZXRfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCBhY3Rpb24pCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VuYWJsZV9ncGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9zZXRfZ3BlKTsKIAogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCkBAIC0yNzMsMTUgKzIzMSw5MCBAQAogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKLQkvKiBQZXJmb3JtIHRoZSBlbmFibGUgKi8KKwkvKiBQZXJmb3JtIHRoZSBhY3Rpb24gKi8KIAotCXN0YXR1cyA9IGFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbywgVFJVRSk7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIEFDUElfR1BFX0VOQUJMRToKKwkJc3RhdHVzID0gYWNwaV9ldl9lbmFibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKKwkJYnJlYWs7CisKKwljYXNlIEFDUElfR1BFX0RJU0FCTEU6CisJCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFjdGlvblxuIikpOworCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOworCQlicmVhazsKKwl9CiAKICAgICAgIHVubG9ja19hbmRfZXhpdDoKIAlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9ncGVfbG9jaywgZmxhZ3MpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9zZXRfZ3BlKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2VuYWJsZV9ncGUKKyAqCisgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKKyAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKKyAqICAgICAgICAgICAgICB0eXBlICAgICAgICAgICAgLSBQdXJwb3NlIHRoZSBHUEUgd2lsbCBiZSB1c2VkIGZvcgorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogVGFrZSBhIHJlZmVyZW5jZSB0byBhIEdQRSBhbmQgZW5hYmxlIGl0IGlmIG5lY2Vzc2FyeQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCithY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CisJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VuYWJsZV9ncGUpOworCisJaWYgKHR5cGUgJiB+QUNQSV9HUEVfVFlQRV9XQUtFX1JVTikKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCisJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CisKKwkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLworCisJZ3BlX2V2ZW50X2luZm8gPSBhY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyhncGVfZGV2aWNlLCBncGVfbnVtYmVyKTsKKwlpZiAoIWdwZV9ldmVudF9pbmZvKSB7CisJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCX0KKworCWlmICh0eXBlICYgQUNQSV9HUEVfVFlQRV9SVU5USU1FKSB7CisJCWlmICgrK2dwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50ID09IDEpIHsKKwkJCXN0YXR1cyA9IGFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQkJZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQtLTsKKwkJfQorCX0KKworCWlmICh0eXBlICYgQUNQSV9HUEVfVFlQRV9XQUtFKSB7CisJCWlmICghKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0NBTl9XQUtFKSkgeworCQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKwkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQl9CisKKwkJLyoKKwkJICogV2FrZS11cCBHUEVzIGFyZSBvbmx5IGVuYWJsZWQgcmlnaHQgcHJpb3IgdG8gcHV0dGluZyB0aGUKKwkJICogc3lzdGVtIGludG8gYSBzbGVlcCBzdGF0ZS4KKwkJICovCisJCWlmICgrK2dwZV9ldmVudF9pbmZvLT53YWtldXBfY291bnQgPT0gMSkKKwkJCWFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MoZ3BlX2V2ZW50X2luZm8pOworCX0KKwordW5sb2NrX2FuZF9leGl0OgorCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Cit9CiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbmFibGVfZ3BlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjkwLDE1ICszMjMsMTQgQEAKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKICAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKLSAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgLSBKdXN0IGRpc2FibGUsIG9yIGFsc28gd2FrZSBkaXNhYmxlPwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBmcm9tIElTUiBvciBub3QKKyAqICAgICAgICAgICAgICB0eXBlICAgICAgICAgICAgLSBQdXJwb3NlIHRoZSBHUEUgd29uJ3QgYmUgdXNlZCBmb3IgYW55IG1vcmUKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgotICogREVTQ1JJUFRJT046IERpc2FibGUgYW4gQUNQSSBldmVudCAoZ2VuZXJhbCBwdXJwb3NlKQorICogREVTQ1JJUFRJT046IFJlbGVhc2UgYSByZWZlcmVuY2UgdG8gYSBHUEUgYW5kIGRpc2FibGUgaXQgaWYgbmVjZXNzYXJ5CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfZGlzYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpCithY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwpAQCAtMzA2LDYgKzMzOCw5IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZGlzYWJsZV9ncGUpOwogCisJaWYgKHR5cGUgJiB+QUNQSV9HUEVfVFlQRV9XQUtFX1JVTikKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCiAJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CiAJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KIApAQCAtMzE1LDEzICszNTAsMjQgQEAKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJaWYgKCh0eXBlICYgQUNQSV9HUEVfVFlQRV9SVU5USU1FKSAmJiBncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCkgeworCQlpZiAoLS1ncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCA9PSAwKQorCQkJc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJfQorCisJaWYgKCh0eXBlICYgQUNQSV9HUEVfVFlQRV9XQUtFKSAmJiBncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50KSB7CisJCS8qCisJCSAqIFdha2UtdXAgR1BFcyBhcmUgbm90IGVuYWJsZWQgYWZ0ZXIgbGVhdmluZyBzeXN0ZW0gc2xlZXAKKwkJICogc3RhdGVzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgdGhlbSBoZXJlLgorCQkgKi8KKwkJaWYgKC0tZ3BlX2V2ZW50X2luZm8tPndha2V1cF9jb3VudCA9PSAwKQorCQkJYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7CisJfQogCiB1bmxvY2tfYW5kX2V4aXQ6CiAJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KLQogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZGlzYWJsZV9ncGUpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggOGE5NWU4My4uZjUzZmJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtNDIyLDExICs0MjIsMTAgQEAKIAogCWlmIChkZXZpY2UtPndha2V1cC5mbGFncy52YWxpZCkgewogCQkvKiBCdXR0b24ncyBHUEUgaXMgcnVuLXdha2UgR1BFICovCi0JCWFjcGlfc2V0X2dwZV90eXBlKGRldmljZS0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJICBkZXZpY2UtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCSAgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7CiAJCWFjcGlfZW5hYmxlX2dwZShkZXZpY2UtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIpOworCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7CisJCWRldmljZS0+d2FrZXVwLnJ1bl93YWtlX2NvdW50Kys7CiAJCWRldmljZS0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgPSAxOwogCX0KIApAQCAtNDQ2LDYgKzQ0NSwxNCBAQAogewogCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCisJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnZhbGlkKSB7CisJCWFjcGlfZGlzYWJsZV9ncGUoZGV2aWNlLT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQlkZXZpY2UtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCUFDUElfR1BFX1RZUEVfV0FLRV9SVU4pOworCQlkZXZpY2UtPndha2V1cC5ydW5fd2FrZV9jb3VudC0tOworCQlkZXZpY2UtPndha2V1cC5zdGF0ZS5lbmFibGVkID0gMDsKKwl9CisKIAlhY3BpX2J1dHRvbl9yZW1vdmVfZnMoZGV2aWNlKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShidXR0b24tPmlucHV0KTsKIAlrZnJlZShidXR0b24pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCBkNjQ3MWJiLi4yN2UwYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtMzA3LDcgKzMwNywxMSBAQAogCXByX2RlYnVnKFBSRUZJWCAidHJhbnNhY3Rpb24gc3RhcnRcbiIpOwogCS8qIGRpc2FibGUgR1BFIGR1cmluZyB0cmFuc2FjdGlvbiBpZiBzdG9ybSBpcyBkZXRlY3RlZCAqLwogCWlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpKSB7Ci0JCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisJCS8qCisJCSAqIEl0IGhhcyB0byBiZSBkaXNhYmxlZCBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwgcmVnYXJkbGVzcyBvZiB0aGUKKwkJICogR1BFIHJlZmVyZW5jZSBjb3VudGluZywgc28gdGhhdCBpdCBkb2Vzbid0IHRyaWdnZXIuCisJCSAqLworCQlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRElTQUJMRSk7CiAJfQogCiAJc3RhdHVzID0gYWNwaV9lY190cmFuc2FjdGlvbl91bmxvY2tlZChlYywgdCk7CkBAIC0zMTYsOCArMzIwLDEyIEBACiAJZWNfY2hlY2tfc2NpX3N5bmMoZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKIAlpZiAodGVzdF9iaXQoRUNfRkxBR1NfR1BFX1NUT1JNLCAmZWMtPmZsYWdzKSkgewogCQltc2xlZXAoMSk7Ci0JCS8qIGl0IGlzIHNhZmUgdG8gZW5hYmxlIEdQRSBvdXRzaWRlIG9mIHRyYW5zYWN0aW9uICovCi0JCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKKwkJLyoKKwkJICogSXQgaXMgc2FmZSB0byBlbmFibGUgdGhlIEdQRSBvdXRzaWRlIG9mIHRoZSB0cmFuc2FjdGlvbi4gIFVzZQorCQkgKiBhY3BpX3NldF9ncGUoKSBmb3IgdGhhdCwgc2luY2Ugd2UgdXNlZCBpdCB0byBkaXNhYmxlIHRoZSBHUEUKKwkJICogYWJvdmUuCisJCSAqLworCQlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRU5BQkxFKTsKIAl9IGVsc2UgaWYgKHQtPmlycV9jb3VudCA+IEFDUElfRUNfU1RPUk1fVEhSRVNIT0xEKSB7CiAJCXByX2luZm8oUFJFRklYICJHUEUgc3Rvcm0gZGV0ZWN0ZWQsICIKIAkJCSJ0cmFuc2FjdGlvbnMgd2lsbCB1c2UgcG9sbGluZyBtb2RlXG4iKTsKQEAgLTc4OCw4ICs3OTYsOCBAQAogCQkJCSAgJmFjcGlfZWNfZ3BlX2hhbmRsZXIsIGVjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAtRU5PREVWOwotCWFjcGlfc2V0X2dwZV90eXBlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7Ci0JYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCisJYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihlYy0+aGFuZGxlLAogCQkJCQkJICAgIEFDUElfQURSX1NQQUNFX0VDLAogCQkJCQkJICAgICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIsCkBAIC04MDYsNiArODE0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCiAJCQkJJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOworCQkJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC04MTYsNiArODI1LDcgQEAKIAogc3RhdGljIHZvaWQgZWNfcmVtb3ZlX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2VjICplYykKIHsKKwlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CiAJaWYgKEFDUElfRkFJTFVSRShhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoZWMtPmhhbmRsZSwKIAkJCQlBQ1BJX0FEUl9TUEFDRV9FQywgJmFjcGlfZWNfc3BhY2VfaGFuZGxlcikpKQogCQlwcl9lcnIoUFJFRklYICJmYWlsZWQgdG8gcmVtb3ZlIHNwYWNlIGhhbmRsZXJcbiIpOwpAQCAtMTA1NywxNiArMTA2NywxNiBAQAogc3RhdGljIGludCBhY3BpX2VjX3N1c3BlbmQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JLyogU3RvcCB1c2luZyBHUEUgKi8KLQlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCS8qIFN0b3AgdXNpbmcgdGhlIEdQRSwgYnV0IGtlZXAgaXQgcmVmZXJlbmNlIGNvdW50ZWQuICovCisJYWNwaV9zZXRfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX0RJU0FCTEUpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfZWNfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBhY3BpX2VjICplYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQkvKiBFbmFibGUgdXNlIG9mIEdQRSBiYWNrICovCi0JYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCS8qIEVuYWJsZSB0aGUgR1BFIGFnYWluLCBidXQgZG9uJ3QgcmVmZXJlbmNlIGNvdW50IGl0IG9uY2UgbW9yZS4gKi8KKwlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRU5BQkxFKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2ludGVybmFsLmggYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAppbmRleCBjYjI4ZTA1Li45YzRjOTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaApAQCAtMzYsOCArMzYsNiBAQAogaW50IGFjcGlfcG93ZXJfaW5pdCh2b2lkKTsKIGludCBhY3BpX2RldmljZV9zbGVlcF93YWtlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuYWJsZSwgaW50IHNsZWVwX3N0YXRlLCBpbnQgZGV2X3N0YXRlKTsKLWludCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCBpbnQgc2xlZXBfc3RhdGUpOwotaW50IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KTsKIGludCBhY3BpX3Bvd2VyX2dldF9pbmZlcnJlZF9zdGF0ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBpbnQgYWNwaV9wb3dlcl90cmFuc2l0aW9uKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpOwogZXh0ZXJuIGludCBhY3BpX3Bvd2VyX25vY2hlY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2JpbmQuYyBiL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCmluZGV4IGE1YTc3YjcuLjJlZjA0MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKQEAgLTM4LDcgKzQwLDEzIEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAogCWRldiA9IGFjcGlfZ2V0X3BjaV9kZXYoZGV2aWNlLT5oYW5kbGUpOwotCWlmICghZGV2IHx8ICFkZXYtPnN1Ym9yZGluYXRlKQorCWlmICghZGV2KQorCQlnb3RvIG91dDsKKworCWRldmljZV9zZXRfcnVuX3dha2UoJmRldi0+ZGV2LCBmYWxzZSk7CisJcGNpX2FjcGlfcmVtb3ZlX3BtX25vdGlmaWVyKGRldmljZSk7CisKKwlpZiAoIWRldi0+c3Vib3JkaW5hdGUpCiAJCWdvdG8gb3V0OwogCiAJYWNwaV9wY2lfaXJxX2RlbF9wcnQoZGV2LT5zdWJvcmRpbmF0ZSk7CkBAIC02Miw2ICs3MCwxMCBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gMDsKIAorCXBjaV9hY3BpX2FkZF9wbV9ub3RpZmllcihkZXZpY2UsIGRldik7CisJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKQorCQlkZXZpY2Vfc2V0X3J1bl93YWtlKCZkZXYtPmRldiwgdHJ1ZSk7CisKIAkvKgogCSAqIEluc3RhbGwgdGhlICdiaW5kJyBmdW5jdGlvbiB0byBmYWNpbGl0YXRlIGNhbGxiYWNrcyBmb3IKIAkgKiBjaGlsZHJlbiBvZiB0aGUgUDJQIGJyaWRnZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggNjRmNTViNi4uZDcyNDczNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KQEAgLTUyOCw2ICs1MjksMTAgQEAKIAlpZiAoZmxhZ3MgIT0gYmFzZV9mbGFncykKIAkJYWNwaV9wY2lfb3NjX3N1cHBvcnQocm9vdCwgZmxhZ3MpOwogCisJcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllcihkZXZpY2UsIHJvb3QtPmJ1cyk7CisJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKQorCQlkZXZpY2Vfc2V0X3J1bl93YWtlKHJvb3QtPmJ1cy0+YnJpZGdlLCB0cnVlKTsKKwogCXJldHVybiAwOwogCiBlbmQ6CkBAIC01NDksNiArNTU0LDkgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9wY2lfcm9vdCAqcm9vdCA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAorCWRldmljZV9zZXRfcnVuX3dha2Uocm9vdC0+YnVzLT5icmlkZ2UsIGZhbHNlKTsKKwlwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyKGRldmljZSk7CisKIAlrZnJlZShyb290KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU1OCw2ICs1NjYsNyBAQAogCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKIAkJcmV0dXJuIDA7CiAKKwlwY2lfYWNwaV9jcnNfcXVpcmtzKCk7CiAJaWYgKGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9wY2lfcm9vdF9kcml2ZXIpIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IDNlMDA5NjcuLmZiN2ZjMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtNzQxLDE5ICs3NDEsNDAgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9idXNfZ2V0X3dha2V1cF9kZXZpY2VfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBhY3BpX2J1c19zZXRfcnVuX3dha2VfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwotCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrYWdlID0gTlVMTDsKLQlpbnQgcHN3X2Vycm9yOwotCiAJc3RydWN0IGFjcGlfZGV2aWNlX2lkIGJ1dHRvbl9kZXZpY2VfaWRzW10gPSB7CiAJCXsiUE5QMEMwRCIsIDB9LAogCQl7IlBOUDBDMEMiLCAwfSwKIAkJeyJQTlAwQzBFIiwgMH0sCiAJCXsiIiwgMH0sCiAJfTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9ldmVudF9zdGF0dXMgZXZlbnRfc3RhdHVzOworCisJZGV2aWNlLT53YWtldXAucnVuX3dha2VfY291bnQgPSAwOworCWRldmljZS0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQgPSAwOworCisJLyogUG93ZXIgYnV0dG9uLCBMaWQgc3dpdGNoIGFsd2F5cyBlbmFibGUgd2FrZXVwICovCisJaWYgKCFhY3BpX21hdGNoX2RldmljZV9pZHMoZGV2aWNlLCBidXR0b25fZGV2aWNlX2lkcykpIHsKKwkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPSAxOworCQlkZXZpY2UtPndha2V1cC5mbGFncy5hbHdheXNfZW5hYmxlZCA9IDE7CisJCXJldHVybjsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2dldF9ncGVfc3RhdHVzKE5VTEwsIGRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJCUFDUElfTk9UX0lTUiwgJmV2ZW50X3N0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSBBRV9PSykKKwkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPQorCQkJCSEhKGV2ZW50X3N0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19IQU5ETEUpOworfQorCitzdGF0aWMgaW50IGFjcGlfYnVzX2dldF93YWtldXBfZGV2aWNlX2ZsYWdzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZSA9IE5VTEw7CisJaW50IHBzd19lcnJvcjsKIAogCS8qIF9QUlcgKi8KIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmhhbmRsZSwgIl9QUlciLCBOVUxMLCAmYnVmZmVyKTsKQEAgLTc3Myw2ICs3OTQsNyBAQAogCiAJZGV2aWNlLT53YWtldXAuZmxhZ3MudmFsaWQgPSAxOwogCWRldmljZS0+d2FrZXVwLnByZXBhcmVfY291bnQgPSAwOworCWFjcGlfYnVzX3NldF9ydW5fd2FrZV9mbGFncyhkZXZpY2UpOwogCS8qIENhbGwgX1BTVy9fRFNXIG9iamVjdCB0byBkaXNhYmxlIGl0cyBhYmlsaXR5IHRvIHdha2UgdGhlIHNsZWVwaW5nCiAJICogc3lzdGVtIGZvciB0aGUgQUNQSSBkZXZpY2Ugd2l0aCB0aGUgX1BSVyBvYmplY3QuCiAJICogVGhlIF9QU1cgb2JqZWN0IGlzIGRlcHJlY2lhdGVkIGluIEFDUEkgMy4wIGFuZCBpcyByZXBsYWNlZCBieSBfRFNXLgpAQCAtNzg0LDEwICs4MDYsNiBAQAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkJImVycm9yIGluIF9EU1cgb3IgX1BTVyBldmFsdWF0aW9uXG4iKSk7CiAKLQkvKiBQb3dlciBidXR0b24sIExpZCBzd2l0Y2ggYWx3YXlzIGVuYWJsZSB3YWtldXAgKi8KLQlpZiAoIWFjcGlfbWF0Y2hfZGV2aWNlX2lkcyhkZXZpY2UsIGJ1dHRvbl9kZXZpY2VfaWRzKSkKLQkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPSAxOwotCiBlbmQ6CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlkZXZpY2UtPmZsYWdzLndha2VfY2FwYWJsZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IDc5ZDMzZDkuLjNiZGU1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC03NDUsOSArNzQ1LDE4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWVycm9yID0gZW5hYmxlID8KLQkJYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2LCBhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSkgOgotCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2KTsKKwlpZiAoZW5hYmxlKSB7CisJCWVycm9yID0gYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2LAorCQkJCQkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUpOworCQlpZiAoIWVycm9yKQorCQkJYWNwaV9lbmFibGVfZ3BlKGFkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQlhZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQkJQUNQSV9HUEVfVFlQRV9XQUtFKTsKKwl9IGVsc2UgeworCQlhY3BpX2Rpc2FibGVfZ3BlKGFkZXYtPndha2V1cC5ncGVfZGV2aWNlLCBhZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQlBQ1BJX0dQRV9UWVBFX1dBS0UpOworCQllcnJvciA9IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYpOworCX0KIAlpZiAoIWVycm9yKQogCQlkZXZfaW5mbyhkZXYsICJ3YWtlLXVwIGNhcGFiaWxpdHkgJXMgYnkgQUNQSVxuIiwKIAkJCQllbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwppbmRleCBkMTEyODI5Li5hMjA2YTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKKysrIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCkBAIC0zODcsMTAgKzM4NywxMCBAQAogCWlmIChpbmRleCA8IG51bV9ncGVzKSB7CiAJCWlmICghc3RyY21wKGJ1ZiwgImRpc2FibGVcbiIpICYmCiAJCQkJKHN0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19FTkFCTEVEKSkKLQkJCXJlc3VsdCA9IGFjcGlfZGlzYWJsZV9ncGUoaGFuZGxlLCBpbmRleCk7CisJCQlyZXN1bHQgPSBhY3BpX3NldF9ncGUoaGFuZGxlLCBpbmRleCwgQUNQSV9HUEVfRElTQUJMRSk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiZW5hYmxlXG4iKSAmJgogCQkJCSEoc3RhdHVzICYgQUNQSV9FVkVOVF9GTEFHX0VOQUJMRUQpKQotCQkJcmVzdWx0ID0gYWNwaV9lbmFibGVfZ3BlKGhhbmRsZSwgaW5kZXgpOworCQkJcmVzdWx0ID0gYWNwaV9zZXRfZ3BlKGhhbmRsZSwgaW5kZXgsIEFDUElfR1BFX0VOQUJMRSk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiY2xlYXJcbiIpICYmCiAJCQkJKHN0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19TRVQpKQogCQkJcmVzdWx0ID0gYWNwaV9jbGVhcl9ncGUoaGFuZGxlLCBpbmRleCwgQUNQSV9OT1RfSVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS93YWtldXAuYyBiL2RyaXZlcnMvYWNwaS93YWtldXAuYwppbmRleCBlMGVlMGMwLi40YjlkMzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKKysrIGIvZHJpdmVycy9hY3BpL3dha2V1cC5jCkBAIC0yMSwxMiArMjEsMTIgQEAKIEFDUElfTU9EVUxFX05BTUUoIndha2V1cF9kZXZpY2VzIikKIAogLyoqCi0gKiBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3ByZXAgLSBwcmVwYXJlIHdha2V1cCBkZXZpY2VzCi0gKglAc2xlZXBfc3RhdGU6CUFDUEkgc3RhdGUKLSAqIEVuYWJsZSBhbGwgd2FrdXAgZGV2aWNlcyBwb3dlciBpZiB0aGUgZGV2aWNlcycgd2FrZXVwIGxldmVsCi0gKiBpcyBoaWdoZXIgdGhhbiByZXF1ZXN0ZWQgc2xlZXAgbGV2ZWwKKyAqIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCAtIFByZXBhcmUgd2FrZS11cCBkZXZpY2VzLgorICogQHNsZWVwX3N0YXRlOiBBQ1BJIHN5c3RlbSBzbGVlcCBzdGF0ZS4KKyAqCisgKiBFbmFibGUgYWxsIHdha2UtdXAgZGV2aWNlcycgcG93ZXIsIHVubGVzcyB0aGUgcmVxdWVzdGVkIHN5c3RlbSBzbGVlcCBzdGF0ZSBpcworICogdG9vIGRlZXAuCiAgKi8KLQogdm9pZCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3ByZXAodTggc2xlZXBfc3RhdGUpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CkBAIC0zNiw5ICszNiw4IEBACiAJCQkJCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlLAogCQkJCQkJICAgICAgIHdha2V1cF9saXN0KTsKIAotCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkIHx8Ci0JCSAgICAhZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCB8fAotCQkgICAgKHNsZWVwX3N0YXRlID4gKHUzMikgZGV2LT53YWtldXAuc2xlZXBfc3RhdGUpKQorCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkIHx8ICFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkCisJCSAgICB8fCAoc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkpCiAJCQljb250aW51ZTsKIAogCQlhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGRldiwgc2xlZXBfc3RhdGUpOwpAQCAtNDYsOSArNDUsMTIgQEAKIH0KIAogLyoqCi0gKiBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlIC0gZW5hYmxlIHdha2V1cCBkZXZpY2VzCi0gKglAc2xlZXBfc3RhdGU6CUFDUEkgc3RhdGUKLSAqIEVuYWJsZSBhbGwgd2FrdXAgZGV2aWNlcydzIEdQRQorICogYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZSAtIEVuYWJsZSB3YWtlLXVwIGRldmljZSBHUEVzLgorICogQHNsZWVwX3N0YXRlOiBBQ1BJIHN5c3RlbSBzbGVlcCBzdGF0ZS4KKyAqCisgKiBFbmFibGUgYWxsIHdha2UtdXAgZGV2aWNlcycgR1BFcywgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0CisgKiBhY3BpX2Rpc2FibGVfYWxsX2dwZXMoKSB3YXMgZXhlY3V0ZWQgYmVmb3JlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgYW55CisgKiBHUEVzIGhlcmUuCiAgKi8KIHZvaWQgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZSh1OCBzbGVlcF9zdGF0ZSkKIHsKQEAgLTY1LDI5ICs2NywyMiBAQAogCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkKQogCQkJY29udGludWU7CiAKLQkJLyogSWYgdXNlcnMgd2FudCB0byBkaXNhYmxlIHJ1bi13YWtlIEdQRSwKLQkJICogd2Ugb25seSBkaXNhYmxlIGl0IGZvciB3YWtlIGFuZCBsZWF2ZSBpdCBmb3IgcnVudGltZQotCQkgKi8KIAkJaWYgKCghZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCAmJiAhZGV2LT53YWtldXAucHJlcGFyZV9jb3VudCkKLQkJICAgIHx8IHNsZWVwX3N0YXRlID4gKHUzMikgZGV2LT53YWtldXAuc2xlZXBfc3RhdGUpIHsKLQkJCWlmIChkZXYtPndha2V1cC5mbGFncy5ydW5fd2FrZSkgewotCQkJCS8qIHNldF9ncGVfdHlwZSB3aWxsIGRpc2FibGUgR1BFLCBsZWF2ZSBpdCBsaWtlIHRoYXQgKi8KLQkJCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQkJICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCQkJICBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwotCQkJfQorCQkgICAgfHwgc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UpCi0JCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJZGV2LT53YWtldXAuZ3BlX251bWJlcik7CisKKwkJLyogVGhlIHdha2UtdXAgcG93ZXIgc2hvdWxkIGhhdmUgYmVlbiBlbmFibGVkIGFscmVhZHkuICovCisJCWFjcGlfc2V0X2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLCBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCUFDUElfR1BFX0VOQUJMRSk7CiAJfQogfQogCiAvKioKLSAqIGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlIC0gZGlzYWJsZSBkZXZpY2VzJyB3YWtldXAgY2FwYWJpbGl0eQotICoJQHNsZWVwX3N0YXRlOglBQ1BJIHN0YXRlCi0gKiBEaXNhYmxlIGFsbCB3YWt1cCBkZXZpY2VzJ3MgR1BFIGFuZCB3YWtldXAgY2FwYWJpbGl0eQorICogYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UgLSBEaXNhYmxlIGRldmljZXMnIHdha2V1cCBjYXBhYmlsaXR5LgorICogQHNsZWVwX3N0YXRlOiBBQ1BJIHN5c3RlbSBzbGVlcCBzdGF0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgYWZmZWN0cyBkZXZpY2VzIHdpdGggd2FrZXVwLnN0YXRlLmVuYWJsZWQgc2V0LCB3aGljaCBtZWFucworICogdGhhdCBpdCByZXZlcnNlcyB0aGUgY2hhbmdlcyBtYWRlIGJ5IGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCgpLgogICovCiB2b2lkIGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlKHU4IHNsZWVwX3N0YXRlKQogewpAQCAtOTcsMzAgKzkyLDExIEBACiAJCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0KIAkJCWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UsIHdha2V1cF9saXN0KTsKIAotCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkKQorCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkIHx8ICFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkCisJCSAgICB8fCAoc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoKCFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkICYmICFkZXYtPndha2V1cC5wcmVwYXJlX2NvdW50KQotCQkgICAgfHwgc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkgewotCQkJaWYgKGRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKSB7Ci0JCQkJYWNwaV9zZXRfZ3BlX3R5cGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJCSAgZGV2LT53YWtldXAuZ3BlX251bWJlciwKLQkJCQkJCSAgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7Ci0JCQkJLyogUmUtZW5hYmxlIGl0LCBzaW5jZSBzZXRfZ3BlX3R5cGUgd2lsbCBkaXNhYmxlIGl0ICovCi0JCQkJYWNwaV9lbmFibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2KTsKLQkJLyogTmV2ZXIgZGlzYWJsZSBydW4td2FrZSBHUEUgKi8KLQkJaWYgKCFkZXYtPndha2V1cC5mbGFncy5ydW5fd2FrZSkgewotCQkJYWNwaV9kaXNhYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQkgZGV2LT53YWtldXAuZ3BlX251bWJlcik7Ci0JCQlhY3BpX2NsZWFyX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCSAgICAgICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLCBBQ1BJX05PVF9JU1IpOwotCQl9CiAJfQogfQogCkBAIC0xMzQsMTMgKzExMCwxMSBAQAogCQkJCQkJICAgICAgIHN0cnVjdCBhY3BpX2RldmljZSwKIAkJCQkJCSAgICAgICB3YWtldXBfbGlzdCk7CiAJCS8qIEluIGNhc2UgdXNlciBkb2Vzbid0IGxvYWQgYnV0dG9uIGRyaXZlciAqLwotCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlIHx8IGRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQpCisJCWlmICghZGV2LT53YWtldXAuZmxhZ3MuYWx3YXlzX2VuYWJsZWQgfHwKKwkJICAgIGRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQpCiAJCQljb250aW51ZTsKLQkJYWNwaV9zZXRfZ3BlX3R5cGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJICBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKLQkJYWNwaV9lbmFibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJZGV2LT53YWtldXAuZ3BlX251bWJlcik7CisgCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwgZGV2LT53YWtldXAuZ3BlX251bWJlciwKKyAJCQkJQUNQSV9HUEVfVFlQRV9XQUtFKTsKIAkJZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCA9IDE7CiAJfQogCW11dGV4X3VubG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggYjM0MzkwMy4uYTZhNzM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtMzA4Miw4ICszMDgyLDE2IEBACiAJYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnKHBkZXYsIGhwcml2KTsKIAogCS8qIHByZXBhcmUgaG9zdCAqLwotCWlmIChocHJpdi0+Y2FwICYgSE9TVF9DQVBfTkNRKQotCQlwaS5mbGFncyB8PSBBVEFfRkxBR19OQ1EgfCBBVEFfRkxBR19GUERNQV9BQTsKKwlpZiAoaHByaXYtPmNhcCAmIEhPU1RfQ0FQX05DUSkgeworCQlwaS5mbGFncyB8PSBBVEFfRkxBR19OQ1E7CisJCS8qIEF1dG8tYWN0aXZhdGUgb3B0aW1pemF0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHN1cHBvcnRlZCBvbgorCQkgICBhbGwgQUhDSSBjb250cm9sbGVycyBpbmRpY2F0aW5nIE5DUSBzdXBwb3J0LCBidXQgaXQgc2VlbXMKKwkJICAgdG8gYmUgYnJva2VuIGF0IGxlYXN0IG9uIHNvbWUgTlZJRElBIE1DUDc5IGNoaXBzZXRzLgorCQkgICBVbnRpbCB3ZSBnZXQgaW5mbyBvbiB3aGljaCBOVklESUEgY2hpcHNldHMgZG9uJ3QgaGF2ZSB0aGlzCisJCSAgIGlzc3VlLCBpZiBhbnksIGRpc2FibGUgQUEgb24gYWxsIE5WSURJQSBBSENJcy4gKi8KKwkJaWYgKHBkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX05WSURJQSkKKwkJCXBpLmZsYWdzIHw9IEFUQV9GTEFHX0ZQRE1BX0FBOworCX0KIAogCWlmIChocHJpdi0+Y2FwICYgSE9TVF9DQVBfUE1QKQogCQlwaS5mbGFncyB8PSBBVEFfRkxBR19QTVA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCBhNTE0MmJkLi4wZTI2YTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZXN1bWUtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CiAKICNpbmNsdWRlICIuLi9iYXNlLmgiCiAjaW5jbHVkZSAicG93ZXIuaCIKQEAgLTQyLDYgKzQzLDcgQEAKIExJU1RfSEVBRChkcG1fbGlzdCk7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZHBtX2xpc3RfbXR4KTsKK3N0YXRpYyBwbV9tZXNzYWdlX3QgcG1fdHJhbnNpdGlvbjsKIAogLyoKICAqIFNldCBvbmNlIHRoZSBwcmVwYXJhdGlvbiBvZiBkZXZpY2VzIGZvciBhIFBNIHRyYW5zaXRpb24gaGFzIHN0YXJ0ZWQsIHJlc2V0CkBAIC01Niw2ICs1OCw3IEBACiB2b2lkIGRldmljZV9wbV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PTjsKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+cG93ZXIuY29tcGxldGlvbik7CiAJcG1fcnVudGltZV9pbml0KGRldik7CiB9CiAKQEAgLTExMSw2ICsxMTQsNyBAQAogCXByX2RlYnVnKCJQTTogUmVtb3ZpbmcgaW5mbyBmb3IgJXM6JXNcbiIsCiAJCSBkZXYtPmJ1cyA/IGRldi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCiAJCSBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOworCWNvbXBsZXRlX2FsbCgmZGV2LT5wb3dlci5jb21wbGV0aW9uKTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCWxpc3RfZGVsX2luaXQoJmRldi0+cG93ZXIuZW50cnkpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKQEAgLTE4OCw2ICsxOTIsMzEgQEAKIH0KIAogLyoqCisgKiBkcG1fd2FpdCAtIFdhaXQgZm9yIGEgUE0gb3BlcmF0aW9uIHRvIGNvbXBsZXRlLgorICogQGRldjogRGV2aWNlIHRvIHdhaXQgZm9yLgorICogQGFzeW5jOiBJZiB1bnNldCwgd2FpdCBvbmx5IGlmIHRoZSBkZXZpY2UncyBwb3dlci5hc3luY19zdXNwZW5kIGZsYWcgaXMgc2V0LgorICovCitzdGF0aWMgdm9pZCBkcG1fd2FpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgYXN5bmMpCit7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWlmIChhc3luYyB8fCAocG1fYXN5bmNfZW5hYmxlZCAmJiBkZXYtPnBvd2VyLmFzeW5jX3N1c3BlbmQpKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOworfQorCitzdGF0aWMgaW50IGRwbV93YWl0X2ZuKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYXN5bmNfcHRyKQoreworCWRwbV93YWl0KGRldiwgKigoYm9vbCAqKWFzeW5jX3B0cikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkcG1fd2FpdF9mb3JfY2hpbGRyZW4oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGFzeW5jKQoreworICAgICAgIGRldmljZV9mb3JfZWFjaF9jaGlsZChkZXYsICZhc3luYywgZHBtX3dhaXRfZm4pOworfQorCisvKioKICAqIHBtX29wIC0gRXhlY3V0ZSB0aGUgUE0gb3BlcmF0aW9uIGFwcHJvcHJpYXRlIGZvciBnaXZlbiBQTSBldmVudC4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAb3BzOiBQTSBvcGVyYXRpb25zIHRvIGNob29zZSBmcm9tLgpAQCAtMjcxLDggKzMwMCw5IEBACiAJa3RpbWVfdCBjYWxsdGltZSwgZGVsdGEsIHJldHRpbWU7CiAKIAlpZiAoaW5pdGNhbGxfZGVidWcpIHsKLQkJcHJfaW5mbygiY2FsbGluZyAgJXNfaSsgQCAlaVxuIiwKLQkJCQlkZXZfbmFtZShkZXYpLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJCXByX2luZm8oImNhbGxpbmcgICVzKyBAICVpLCBwYXJlbnQ6ICVzXG4iLAorCQkJCWRldl9uYW1lKGRldiksIHRhc2tfcGlkX25yKGN1cnJlbnQpLAorCQkJCWRldi0+cGFyZW50ID8gZGV2X25hbWUoZGV2LT5wYXJlbnQpIDogIm5vbmUiKTsKIAkJY2FsbHRpbWUgPSBrdGltZV9nZXQoKTsKIAl9CiAKQEAgLTQ2OCwxNiArNDk4LDIwIEBACiAgKiBkZXZpY2VfcmVzdW1lIC0gRXhlY3V0ZSAicmVzdW1lIiBjYWxsYmFja3MgZm9yIGdpdmVuIGRldmljZS4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIEBhc3luYzogSWYgdHJ1ZSwgdGhlIGRldmljZSBpcyBiZWluZyByZXN1bWVkIGFzeW5jaHJvbm91c2x5LgogICovCi1zdGF0aWMgaW50IGRldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGRldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIGJvb2wgYXN5bmMpCiB7CiAJaW50IGVycm9yID0gMDsKIAogCVRSQUNFX0RFVklDRShkZXYpOwogCVRSQUNFX1JFU1VNRSgwKTsKIAorCWRwbV93YWl0KGRldi0+cGFyZW50LCBhc3luYyk7CiAJZG93bigmZGV2LT5zZW0pOwogCisJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fUkVTVU1JTkc7CisKIAlpZiAoZGV2LT5idXMpIHsKIAkJaWYgKGRldi0+YnVzLT5wbSkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAiIik7CkBAIC01MTAsMTEgKzU0NCwyOSBAQAogCX0KICBFbmQ6CiAJdXAoJmRldi0+c2VtKTsKKwljb21wbGV0ZV9hbGwoJmRldi0+cG93ZXIuY29tcGxldGlvbik7CiAKIAlUUkFDRV9SRVNVTUUoZXJyb3IpOwogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgYXN5bmNfcmVzdW1lKHZvaWQgKmRhdGEsIGFzeW5jX2Nvb2tpZV90IGNvb2tpZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZXZpY2VfcmVzdW1lKGRldiwgcG1fdHJhbnNpdGlvbiwgdHJ1ZSk7CisJaWYgKGVycm9yKQorCQlwbV9kZXZfZXJyKGRldiwgcG1fdHJhbnNpdGlvbiwgIiBhc3luYyIsIGVycm9yKTsKKwlwdXRfZGV2aWNlKGRldik7Cit9CisKK3N0YXRpYyBib29sIGlzX2FzeW5jKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5wb3dlci5hc3luY19zdXNwZW5kICYmIHBtX2FzeW5jX2VuYWJsZWQKKwkJJiYgIXBtX3RyYWNlX2lzX2VuYWJsZWQoKTsKK30KKwogLyoqCiAgKiBkcG1fcmVzdW1lIC0gRXhlY3V0ZSAicmVzdW1lIiBjYWxsYmFja3MgZm9yIG5vbi1zeXNkZXYgZGV2aWNlcy4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgpAQCAtNTI1LDIxICs1NzcsMzMgQEAKIHN0YXRpYyB2b2lkIGRwbV9yZXN1bWUocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7Ci0JCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5uZXh0KTsKKwlwbV90cmFuc2l0aW9uID0gc3RhdGU7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmRwbV9saXN0LCBwb3dlci5lbnRyeSkgeworCQlpZiAoZGV2LT5wb3dlci5zdGF0dXMgPCBEUE1fT0ZGKQorCQkJY29udGludWU7CisKKwkJSU5JVF9DT01QTEVUSU9OKGRldi0+cG93ZXIuY29tcGxldGlvbik7CisJCWlmIChpc19hc3luYyhkZXYpKSB7CisJCQlnZXRfZGV2aWNlKGRldik7CisJCQlhc3luY19zY2hlZHVsZShhc3luY19yZXN1bWUsIGRldik7CisJCX0KKwl9CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgeworCQlkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QubmV4dCk7CiAJCWdldF9kZXZpY2UoZGV2KTsKLQkJaWYgKGRldi0+cG93ZXIuc3RhdHVzID49IERQTV9PRkYpIHsKKwkJaWYgKGRldi0+cG93ZXIuc3RhdHVzID49IERQTV9PRkYgJiYgIWlzX2FzeW5jKGRldikpIHsKIAkJCWludCBlcnJvcjsKIAotCQkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fUkVTVU1JTkc7CiAJCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAKLQkJCWVycm9yID0gZGV2aWNlX3Jlc3VtZShkZXYsIHN0YXRlKTsKKwkJCWVycm9yID0gZGV2aWNlX3Jlc3VtZShkZXYsIHN0YXRlLCBmYWxzZSk7CiAKIAkJCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJCQlpZiAoZXJyb3IpCkBAIC01NTQsNiArNjE4LDcgQEAKIAl9CiAJbGlzdF9zcGxpY2UoJmxpc3QsICZkcG1fbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOworCWFzeW5jX3N5bmNocm9uaXplX2Z1bGwoKTsKIAlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsIE5VTEwpOwogfQogCkBAIC03MzEsMTcgKzc5NiwyNCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBhc3luY19lcnJvcjsKKwogLyoqCiAgKiBkZXZpY2Vfc3VzcGVuZCAtIEV4ZWN1dGUgInN1c3BlbmQiIGNhbGxiYWNrcyBmb3IgZ2l2ZW4gZGV2aWNlLgogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogQGFzeW5jOiBJZiB0cnVlLCB0aGUgZGV2aWNlIGlzIGJlaW5nIHN1c3BlbmRlZCBhc3luY2hyb25vdXNseS4KICAqLwotc3RhdGljIGludCBkZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgX19kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgYm9vbCBhc3luYykKIHsKIAlpbnQgZXJyb3IgPSAwOwogCisJZHBtX3dhaXRfZm9yX2NoaWxkcmVuKGRldiwgYXN5bmMpOwogCWRvd24oJmRldi0+c2VtKTsKIAorCWlmIChhc3luY19lcnJvcikKKwkJZ290byBFbmQ7CisKIAlpZiAoZGV2LT5jbGFzcykgewogCQlpZiAoZGV2LT5jbGFzcy0+cG0pIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImNsYXNzICIpOwpAQCAtNzcyLDEyICs4NDQsNDQgQEAKIAkJCWVycm9yID0gbGVnYWN5X3N1c3BlbmQoZGV2LCBzdGF0ZSwgZGV2LT5idXMtPnN1c3BlbmQpOwogCQl9CiAJfQorCisJaWYgKCFlcnJvcikKKwkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT0ZGOworCiAgRW5kOgogCXVwKCZkZXYtPnNlbSk7CisJY29tcGxldGVfYWxsKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOwogCiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgdm9pZCBhc3luY19zdXNwZW5kKHZvaWQgKmRhdGEsIGFzeW5jX2Nvb2tpZV90IGNvb2tpZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBfX2RldmljZV9zdXNwZW5kKGRldiwgcG1fdHJhbnNpdGlvbiwgdHJ1ZSk7CisJaWYgKGVycm9yKSB7CisJCXBtX2Rldl9lcnIoZGV2LCBwbV90cmFuc2l0aW9uLCAiIGFzeW5jIiwgZXJyb3IpOworCQlhc3luY19lcnJvciA9IGVycm9yOworCX0KKworCXB1dF9kZXZpY2UoZGV2KTsKK30KKworc3RhdGljIGludCBkZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJSU5JVF9DT01QTEVUSU9OKGRldi0+cG93ZXIuY29tcGxldGlvbik7CisKKwlpZiAocG1fYXN5bmNfZW5hYmxlZCAmJiBkZXYtPnBvd2VyLmFzeW5jX3N1c3BlbmQpIHsKKwkJZ2V0X2RldmljZShkZXYpOworCQlhc3luY19zY2hlZHVsZShhc3luY19zdXNwZW5kLCBkZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gX19kZXZpY2Vfc3VzcGVuZChkZXYsIHBtX3RyYW5zaXRpb24sIGZhbHNlKTsKK30KKwogLyoqCiAgKiBkcG1fc3VzcGVuZCAtIEV4ZWN1dGUgInN1c3BlbmQiIGNhbGxiYWNrcyBmb3IgYWxsIG5vbi1zeXNkZXYgZGV2aWNlcy4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgpAQCAtNzkwLDEzICs4OTQsMTUgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOworCXBtX3RyYW5zaXRpb24gPSBzdGF0ZTsKKwlhc3luY19lcnJvciA9IDA7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fbGlzdCkpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGRwbV9saXN0LnByZXYpOwogCiAJCWdldF9kZXZpY2UoZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCi0JCWVycm9yID0gZGV2aWNlX3N1c3BlbmQoZGV2LCBzdGF0ZSk7CisJCWVycm9yID0gZGV2aWNlX3N1c3BlbmQoZGV2KTsKIAogCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTgwNCwxMyArOTEwLDE3IEBACiAJCQlwdXRfZGV2aWNlKGRldik7CiAJCQlicmVhazsKIAkJfQotCQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PRkY7CiAJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5wb3dlci5lbnRyeSkpCiAJCQlsaXN0X21vdmUoJmRldi0+cG93ZXIuZW50cnksICZsaXN0KTsKIAkJcHV0X2RldmljZShkZXYpOworCQlpZiAoYXN5bmNfZXJyb3IpCisJCQlicmVhazsKIAl9CiAJbGlzdF9zcGxpY2UoJmxpc3QsIGRwbV9saXN0LnByZXYpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBhc3luY19lcnJvcjsKIAlpZiAoIWVycm9yKQogCQlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsIE5VTEwpOwogCXJldHVybiBlcnJvcjsKQEAgLTkzNiwzICsxMDQ2LDE0IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogJXBGIHJldHVybnMgJWRcbiIsIGZ1bmN0aW9uLCBmbiwgcmV0KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fc3VzcGVuZF9yZXBvcnRfcmVzdWx0KTsKKworLyoqCisgKiBkZXZpY2VfcG1fd2FpdF9mb3JfZGV2IC0gV2FpdCBmb3Igc3VzcGVuZC9yZXN1bWUgb2YgYSBkZXZpY2UgdG8gY29tcGxldGUuCisgKiBAZGV2OiBEZXZpY2UgdG8gd2FpdCBmb3IuCisgKiBAc3Vib3JkaW5hdGU6IERldmljZSB0aGF0IG5lZWRzIHRvIHdhaXQgZm9yIEBkZXYuCisgKi8KK3ZvaWQgZGV2aWNlX3BtX3dhaXRfZm9yX2RldihzdHJ1Y3QgZGV2aWNlICpzdWJvcmRpbmF0ZSwgc3RydWN0IGRldmljZSAqZGV2KQoreworCWRwbV93YWl0KGRldiwgc3Vib3JkaW5hdGUtPnBvd2VyLmFzeW5jX3N1c3BlbmQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3BtX3dhaXRfZm9yX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaCBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCmluZGV4IGI4ZmExYWEuLmMwYmQwM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCkBAIC0xMiwxMCArMTIsMTAgQEAKIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCi0vKgotICogbWFpbi5jCi0gKi8KKy8qIGtlcm5lbC9wb3dlci9tYWluLmMgKi8KK2V4dGVybiBpbnQgcG1fYXN5bmNfZW5hYmxlZDsKIAorLyogZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyAqLwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZHBtX2xpc3Q7CS8qIFRoZSBhY3RpdmUgZGV2aWNlIGxpc3QgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICp0b19kZXZpY2Uoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwppbmRleCBmOGIwNDRlLi42MjZkZDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKQEAgLTEwMTEsNiArMTAxMSw1MCBAQAogRVhQT1JUX1NZTUJPTF9HUEwocG1fcnVudGltZV9lbmFibGUpOwogCiAvKioKKyAqIHBtX3J1bnRpbWVfZm9yYmlkIC0gQmxvY2sgcnVuLXRpbWUgUE0gb2YgYSBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICoKKyAqIEluY3JlYXNlIHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudCBhbmQgY2xlYXIgaXRzIHBvd2VyLnJ1bnRpbWVfYXV0byBmbGFnLAorICogc28gdGhhdCBpdCBjYW5ub3QgYmUgc3VzcGVuZGVkIGF0IHJ1biB0aW1lIHVudGlsIHBtX3J1bnRpbWVfYWxsb3coKSBpcyBjYWxsZWQKKyAqIGZvciBpdC4KKyAqLwordm9pZCBwbV9ydW50aW1lX2ZvcmJpZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwlpZiAoIWRldi0+cG93ZXIucnVudGltZV9hdXRvKQorCQlnb3RvIG91dDsKKworCWRldi0+cG93ZXIucnVudGltZV9hdXRvID0gZmFsc2U7CisJYXRvbWljX2luYygmZGV2LT5wb3dlci51c2FnZV9jb3VudCk7CisJX19wbV9ydW50aW1lX3Jlc3VtZShkZXYsIGZhbHNlKTsKKworIG91dDoKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9ydW50aW1lX2ZvcmJpZCk7CisKKy8qKgorICogcG1fcnVudGltZV9hbGxvdyAtIFVuYmxvY2sgcnVuLXRpbWUgUE0gb2YgYSBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICoKKyAqIERlY3JlYXNlIHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudCBhbmQgc2V0IGl0cyBwb3dlci5ydW50aW1lX2F1dG8gZmxhZy4KKyAqLwordm9pZCBwbV9ydW50aW1lX2FsbG93KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0bykKKwkJZ290byBvdXQ7CisKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0byA9IHRydWU7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+cG93ZXIudXNhZ2VfY291bnQpKQorCQlfX3BtX3J1bnRpbWVfaWRsZShkZXYpOworCisgb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfYWxsb3cpOworCisvKioKICAqIHBtX3J1bnRpbWVfaW5pdCAtIEluaXRpYWxpemUgcnVuLXRpbWUgUE0gZmllbGRzIGluIGdpdmVuIGRldmljZSBvYmplY3QuCiAgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IHRvIGluaXRpYWxpemUuCiAgKi8KQEAgLTEwMjgsNiArMTA3Miw3IEBACiAKIAlhdG9taWNfc2V0KCZkZXYtPnBvd2VyLmNoaWxkX2NvdW50LCAwKTsKIAlwbV9zdXNwZW5kX2lnbm9yZV9jaGlsZHJlbihkZXYsIGZhbHNlKTsKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0byA9IHRydWU7CiAKIAlkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZyA9IGZhbHNlOwogCWRldi0+cG93ZXIucmVxdWVzdCA9IFJQTV9SRVFfTk9ORTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKaW5kZXggNTk2YWVlYy4uODZmZDkzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKQEAgLTQsOSArNCwyNSBAQAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgInBvd2VyLmgiCiAKIC8qCisgKgljb250cm9sIC0gUmVwb3J0L2NoYW5nZSBjdXJyZW50IHJ1bnRpbWUgUE0gc2V0dGluZyBvZiB0aGUgZGV2aWNlCisgKgorICoJUnVudGltZSBwb3dlciBtYW5hZ2VtZW50IG9mIGEgZGV2aWNlIGNhbiBiZSBibG9ja2VkIHdpdGggdGhlIGhlbHAgb2YKKyAqCXRoaXMgYXR0cmlidXRlLiAgQWxsIGRldmljZXMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzIGZvcgorICoJdGhlIHBvd2VyL2NvbnRyb2wgZmlsZToKKyAqCisgKgkgKyAiYXV0b1xuIiB0byBhbGxvdyB0aGUgZGV2aWNlIHRvIGJlIHBvd2VyIG1hbmFnZWQgYXQgcnVuIHRpbWU7CisgKgkgKyAib25cbiIgdG8gcHJldmVudCB0aGUgZGV2aWNlIGZyb20gYmVpbmcgcG93ZXIgbWFuYWdlZCBhdCBydW4gdGltZTsKKyAqCisgKglUaGUgZGVmYXVsdCBmb3IgYWxsIGRldmljZXMgaXMgImF1dG8iLCB3aGljaCBtZWFucyB0aGF0IGRldmljZXMgbWF5IGJlCisgKglzdWJqZWN0IHRvIGF1dG9tYXRpYyBwb3dlciBtYW5hZ2VtZW50LCBkZXBlbmRpbmcgb24gdGhlaXIgZHJpdmVycy4KKyAqCUNoYW5naW5nIHRoaXMgYXR0cmlidXRlIHRvICJvbiIgcHJldmVudHMgdGhlIGRyaXZlciBmcm9tIHBvd2VyIG1hbmFnaW5nCisgKgl0aGUgZGV2aWNlIGF0IHJ1biB0aW1lLiAgRG9pbmcgdGhhdCB3aGlsZSB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZCBjYXVzZXMKKyAqCWl0IHRvIGJlIHdva2VuIHVwLgorICoKICAqCXdha2V1cCAtIFJlcG9ydC9jaGFuZ2UgY3VycmVudCB3YWtldXAgb3B0aW9uIGZvciBkZXZpY2UKICAqCiAgKglTb21lIGRldmljZXMgc3VwcG9ydCAid2FrZXVwIiBldmVudHMsIHdoaWNoIGFyZSBoYXJkd2FyZSBzaWduYWxzCkBAIC0zOCwxMSArNTQsNjEgQEAKICAqCXdha2V1cCBldmVudHMgaW50ZXJuYWxseSAodW5sZXNzIHRoZXkgYXJlIGRpc2FibGVkKSwga2VlcGluZwogICoJdGhlaXIgaGFyZHdhcmUgaW4gbG93IHBvd2VyIG1vZGVzIHdoZW5ldmVyIHRoZXkncmUgdW51c2VkLiAgVGhpcwogICoJc2F2ZXMgcnVudGltZSBwb3dlciwgd2l0aG91dCByZXF1aXJpbmcgc3lzdGVtLXdpZGUgc2xlZXAgc3RhdGVzLgorICoKKyAqCWFzeW5jIC0gUmVwb3J0L2NoYW5nZSBjdXJyZW50IGFzeW5jIHN1c3BlbmQgc2V0dGluZyBmb3IgdGhlIGRldmljZQorICoKKyAqCUFzeW5jaHJvbm91cyBzdXNwZW5kIGFuZCByZXN1bWUgb2YgdGhlIGRldmljZSBkdXJpbmcgc3lzdGVtLXdpZGUgcG93ZXIKKyAqCXN0YXRlIHRyYW5zaXRpb25zIGNhbiBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgImVuYWJsZWQiIHRvIHRoaXMgZmlsZS4KKyAqCUFuYWxvZ291c2x5LCBpZiAiZGlzYWJsZWQiIGlzIHdyaXR0ZW4gdG8gdGhpcyBmaWxlLCB0aGUgZGV2aWNlIHdpbGwgYmUKKyAqCXN1c3BlbmRlZCBhbmQgcmVzdW1lZCBzeW5jaHJvbm91c2x5LgorICoKKyAqCUFsbCBkZXZpY2VzIGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHZhbHVlcyBmb3IgcG93ZXIvYXN5bmM6CisgKgorICoJICsgImVuYWJsZWRcbiIgdG8gcGVybWl0IHRoZSBhc3luY2hyb25vdXMgc3VzcGVuZC9yZXN1bWUgb2YgdGhlIGRldmljZTsKKyAqCSArICJkaXNhYmxlZFxuIiB0byBmb3JiaWQgaXQ7CisgKgorICoJTk9URTogSXQgZ2VuZXJhbGx5IGlzIHVuc2FmZSB0byBwZXJtaXQgdGhlIGFzeW5jaHJvbm91cyBzdXNwZW5kL3Jlc3VtZQorICoJb2YgYSBkZXZpY2UgdW5sZXNzIGl0IGlzIGNlcnRhaW4gdGhhdCBhbGwgb2YgdGhlIFBNIGRlcGVuZGVuY2llcyBvZiB0aGUKKyAqCWRldmljZSBhcmUga25vd24gdG8gdGhlIFBNIGNvcmUuICBIb3dldmVyLCBmb3Igc29tZSBkZXZpY2VzIHRoaXMKKyAqCWF0dHJpYnV0ZSBpcyBzZXQgdG8gImVuYWJsZWQiIGJ5IGJ1cyB0eXBlIGNvZGUgb3IgZGV2aWNlIGRyaXZlcnMgYW5kIGluCisgKgl0aGF0IGNhc2VzIGl0IHNob3VsZCBiZSBzYWZlIHRvIGxlYXZlIHRoZSBkZWZhdWx0IHZhbHVlLgogICovCiAKIHN0YXRpYyBjb25zdCBjaGFyIGVuYWJsZWRbXSA9ICJlbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyIGRpc2FibGVkW10gPSAiZGlzYWJsZWQiOwogCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKK3N0YXRpYyBjb25zdCBjaGFyIGN0cmxfYXV0b1tdID0gImF1dG8iOworc3RhdGljIGNvbnN0IGNoYXIgY3RybF9vbltdID0gIm9uIjsKKworc3RhdGljIHNzaXplX3QgY29udHJvbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAorCQkJCWRldi0+cG93ZXIucnVudGltZV9hdXRvID8gY3RybF9hdXRvIDogY3RybF9vbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNvbnRyb2xfc3RvcmUoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBuKQoreworCWNoYXIgKmNwOworCWludCBsZW4gPSBuOworCisJY3AgPSBtZW1jaHIoYnVmLCAnXG4nLCBuKTsKKwlpZiAoY3ApCisJCWxlbiA9IGNwIC0gYnVmOworCWlmIChsZW4gPT0gc2l6ZW9mIGN0cmxfYXV0byAtIDEgJiYgc3RybmNtcChidWYsIGN0cmxfYXV0bywgbGVuKSA9PSAwKQorCQlwbV9ydW50aW1lX2FsbG93KGRldik7CisJZWxzZSBpZiAobGVuID09IHNpemVvZiBjdHJsX29uIC0gMSAmJiBzdHJuY21wKGJ1ZiwgY3RybF9vbiwgbGVuKSA9PSAwKQorCQlwbV9ydW50aW1lX2ZvcmJpZChkZXYpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihjb250cm9sLCAwNjQ0LCBjb250cm9sX3Nob3csIGNvbnRyb2xfc3RvcmUpOworI2VuZGlmCisKIHN0YXRpYyBzc2l6ZV90CiB3YWtlX3Nob3coc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCiB7CkBAIC03Nyw5ICsxNDMsNDMgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHdha2V1cCwgMDY0NCwgd2FrZV9zaG93LCB3YWtlX3N0b3JlKTsKIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUF9BRFZBTkNFRF9ERUJVRworc3RhdGljIHNzaXplX3QgYXN5bmNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsCisJCQlkZXZpY2VfYXN5bmNfc3VzcGVuZF9lbmFibGVkKGRldikgPyBlbmFibGVkIDogZGlzYWJsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBhc3luY19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwljaGFyICpjcDsKKwlpbnQgbGVuID0gbjsKKworCWNwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgbik7CisJaWYgKGNwKQorCQlsZW4gPSBjcCAtIGJ1ZjsKKwlpZiAobGVuID09IHNpemVvZiBlbmFibGVkIC0gMSAmJiBzdHJuY21wKGJ1ZiwgZW5hYmxlZCwgbGVuKSA9PSAwKQorCQlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoZGV2KTsKKwllbHNlIGlmIChsZW4gPT0gc2l6ZW9mIGRpc2FibGVkIC0gMSAmJiBzdHJuY21wKGJ1ZiwgZGlzYWJsZWQsIGxlbikgPT0gMCkKKwkJZGV2aWNlX2Rpc2FibGVfYXN5bmNfc3VzcGVuZChkZXYpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihhc3luYywgMDY0NCwgYXN5bmNfc2hvdywgYXN5bmNfc3RvcmUpOworI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUF9BRFZBTkNFRF9ERUJVRyAqLwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHBvd2VyX2F0dHJzW10gPSB7CisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKwkmZGV2X2F0dHJfY29udHJvbC5hdHRyLAorI2VuZGlmCiAJJmRldl9hdHRyX3dha2V1cC5hdHRyLAorI2lmZGVmIENPTkZJR19QTV9TTEVFUF9BRFZBTkNFRF9ERUJVRworCSZkZXZfYXR0cl9hc3luYy5hdHRyLAorI2VuZGlmCiAJTlVMTCwKIH07CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwbV9hdHRyX2dyb3VwID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMgYi9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYwppbmRleCBhNWFmMWQ2Li5lMzVjZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYwpAQCAtMTQ3MCw4ICsxNDcwLDYgQEAKIAogdm9pZCBkb19mZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICogcSkKIHsKLSAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCURQUklOVCgoImRvX2ZkX3JlcXVlc3QgZm9yIHBpZCAlZFxuIixjdXJyZW50LT5waWQpKTsKIAl3aGlsZSggZmRjX2J1c3kgKSBzbGVlcF9vbiggJmZkY193YWl0ICk7CiAJZmRjX2J1c3kgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwppbmRleCA4ZjU2OWUzLi44MjFjMjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtODY0LDcgKzg2NCw3IEBACiAJc3RydWN0IHN3aW1fcHJpdiAqc3dkOwogCWludCByZXQ7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9NRU0sICJzd2ltLXJlZ3MiKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CkBAIC05NDIsNyArOTQyLDcgQEAKIAogCWlvdW5tYXAoc3dkLT5iYXNlKTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoZGV2LCBJT1JFU09VUkNFX01FTSwgInN3aW0tcmVncyIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzKQogCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwppbmRleCBjMTJiMzEzLi43ODhkOTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwpAQCAtMjgsNiArMjgsOSBAQAogICogQWxsIGRpc2sgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIGJ5IHNlbmRpbmcgbWVzc2FnZXMgYmFjayBhbmQgZm9ydGggdG8KICAqIHRoZSBPUy80MDAgcGFydGl0aW9uLgogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgInZpb2Q6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02Myw5ICs2Niw2IEBACiAKICNkZWZpbmUgVklPRF9WRVJTCQkiMS42NCIKIAotI2RlZmluZSBWSU9EX0tFUk5fV0FSTklORwlLRVJOX1dBUk5JTkcgInZpb2Q6ICIKLSNkZWZpbmUgVklPRF9LRVJOX0lORk8JCUtFUk5fSU5GTyAidmlvZDogIgotCiBlbnVtIHsKIAlQQVJUSVRJT05fU0hJRlQgPSAzLAogCU1BWF9ESVNLTk8gPSBIVk1BWEFSQ0hJVEVDVEVEVklSVFVBTERJU0tTLApAQCAtMTU2LDcgKzE1Niw3IEBACiAJCQkoKHU2NClERVZJQ0VfTk8oZCkgPDwgNDgpIHwgKCh1NjQpZmxhZ3MgPDwgMzIpLAogCQkJMCwgMCwgMCk7CiAJaWYgKGh2cmMgIT0gMCkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgIkhWIG9wZW4gZmFpbGVkICVkXG4iLCAoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJIViBvcGVuIGZhaWxlZCAlZFxuIiwgKGludClodnJjKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xNjcsOSArMTY3LDggQEAKIAkJY29uc3Qgc3RydWN0IHZpb19lcnJvcl9lbnRyeSAqZXJyID0KIAkJCXZpb19sb29rdXBfcmModmlvZGFzZF9lcnJfdGFibGUsIHdlLnN1Yl9yZXN1bHQpOwogCi0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkJCSJiYWQgcmMgb3BlbmluZyBkaXNrOiAlZDoweCUwNHggKCVzKVxuIiwKLQkJCQkoaW50KXdlLnJjLCB3ZS5zdWJfcmVzdWx0LCBlcnItPm1zZyk7CisJCXByX3dhcm5pbmcoImJhZCByYyBvcGVuaW5nIGRpc2s6ICVkOjB4JTA0eCAoJXMpXG4iLAorCQkJICAgKGludCl3ZS5yYywgd2Uuc3ViX3Jlc3VsdCwgZXJyLT5tc2cpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE5NSw4ICsxOTQsNyBAQAogCQkJKCh1NjQpREVWSUNFX05PKGQpIDw8IDQ4KSAvKiB8ICgodTY0KWZsYWdzIDw8IDMyKSAqLywKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApCi0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiSFYgY2xvc2UgY2FsbCBmYWlsZWQgJWRcbiIsCi0JCQkJKGludClodnJjKTsKKwkJcHJfd2FybmluZygiSFYgY2xvc2UgY2FsbCBmYWlsZWQgJWRcbiIsIChpbnQpaHZyYyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4OCw4ICsyODYsNyBAQAogCQliZXZlbnQgPSAoc3RydWN0IHZpb2Jsb2NrbHBldmVudCAqKQogCQkJdmlvX2dldF9ldmVudF9idWZmZXIodmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8pOwogCQlpZiAoYmV2ZW50ID09IE5VTEwpIHsKLQkJCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkJICAgICAgICJlcnJvciBhbGxvY2F0aW5nIGRpc2sgZXZlbnQgYnVmZmVyXG4iKTsKKwkJCXByX3dhcm5pbmcoImVycm9yIGFsbG9jYXRpbmcgZGlzayBldmVudCBidWZmZXJcbiIpOwogCQkJZ290byBlcnJvcl9yZXQ7CiAJCX0KIApAQCAtMzMzLDkgKzMzMCw4IEBACiAJfQogCiAJaWYgKGh2cmMgIT0gSHZMcEV2ZW50X1JjX0dvb2QpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiZXJyb3Igc2VuZGluZyBkaXNrIGV2ZW50IHRvIE9TLzQwMCAocmMgJWQpXG4iLAotCQkgICAgICAgKGludClodnJjKTsKKwkJcHJfd2FybmluZygiZXJyb3Igc2VuZGluZyBkaXNrIGV2ZW50IHRvIE9TLzQwMCAocmMgJWQpXG4iLAorCQkJICAgKGludClodnJjKTsKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpb2Rhc2Rfc3BpbmxvY2ssIGZsYWdzKTsKQEAgLTQwMiw3ICszOTgsNyBAQAogCQkJKCh1NjQpZGV2X25vIDw8IDQ4KSB8ICgodTY0KWZsYWdzPDwgMzIpLAogCQkJMCwgMCwgMCk7CiAJaWYgKGh2cmMgIT0gMCkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgImJhZCByYyBvbiBIViBvcGVuICVkXG4iLCAoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJiYWQgcmMgb24gSFYgb3BlbiAlZFxuIiwgKGludClodnJjKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC00MTYsOSArNDEyLDggQEAKIAkJZ290byByZXRyeTsKIAl9CiAJaWYgKHdlLm1heF9kaXNrID4gKE1BWF9ESVNLTk8gLSAxKSkgewotCQlwcmludGtfb25jZShWSU9EX0tFUk5fSU5GTwotCQkJIk9ubHkgZXhhbWluaW5nIHRoZSBmaXJzdCAlZCBvZiAlZCBkaXNrcyBjb25uZWN0ZWRcbiIsCi0JCQlNQVhfRElTS05PLCB3ZS5tYXhfZGlzayArIDEpOworCQlwcmludGtfb25jZShLRVJOX0lORk8gcHJfZm10KCJPbmx5IGV4YW1pbmluZyB0aGUgZmlyc3QgJWQgb2YgJWQgZGlza3MgY29ubmVjdGVkXG4iKSwKKwkJCSAgICBNQVhfRElTS05PLCB3ZS5tYXhfZGlzayArIDEpOwogCX0KIAogCS8qIFNlbmQgdGhlIGNsb3NlIGV2ZW50IHRvIE9TLzQwMC4gIFdlIERPTidUIGV4cGVjdCBhIHJlc3BvbnNlICovCkBAIC00MzIsMTcgKzQyNywxNSBAQAogCQkJKCh1NjQpZGV2X25vIDw8IDQ4KSB8ICgodTY0KWZsYWdzIDw8IDMyKSwKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiYmFkIHJjIHNlbmRpbmcgZXZlbnQgdG8gT1MvNDAwICVkXG4iLCAoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJiYWQgcmMgc2VuZGluZyBldmVudCB0byBPUy80MDAgJWRcbiIsIChpbnQpaHZyYyk7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChkLT5kZXYgPT0gTlVMTCkgewogCQkvKiB0aGlzIGlzIHdoZW4gd2UgcmVwcm9iZSBmb3IgbmV3IGRpc2tzICovCiAJCWlmICh2aW9fY3JlYXRlX3Zpb2Rhc2QoZGV2X25vKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJCQkiY2Fubm90IGFsbG9jYXRlIHZpcnR1YWwgZGV2aWNlIGZvciBkaXNrICVkXG4iLAotCQkJCWRldl9ubyk7CisJCQlwcl93YXJuaW5nKCJjYW5ub3QgYWxsb2NhdGUgdmlydHVhbCBkZXZpY2UgZm9yIGRpc2sgJWRcbiIsCisJCQkJICAgZGV2X25vKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCS8qCkBAIC00NTcsMTUgKzQ1MCwxMyBAQAogCXNwaW5fbG9ja19pbml0KCZkLT5xX2xvY2spOwogCXEgPSBibGtfaW5pdF9xdWV1ZShkb192aW9kYXNkX3JlcXVlc3QsICZkLT5xX2xvY2spOwogCWlmIChxID09IE5VTEwpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJjYW5ub3QgYWxsb2NhdGUgcXVldWUgZm9yIGRpc2sgJWRcbiIsCi0JCQkJZGV2X25vKTsKKwkJcHJfd2FybmluZygiY2Fubm90IGFsbG9jYXRlIHF1ZXVlIGZvciBkaXNrICVkXG4iLCBkZXZfbm8pOwogCQlyZXR1cm4gMDsKIAl9CiAJZyA9IGFsbG9jX2Rpc2soMSA8PCBQQVJUSVRJT05fU0hJRlQpOwogCWlmIChnID09IE5VTEwpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCQkJImNhbm5vdCBhbGxvY2F0ZSBkaXNrIHN0cnVjdHVyZSBmb3IgZGlzayAlZFxuIiwKLQkJCQlkZXZfbm8pOworCQlwcl93YXJuaW5nKCJjYW5ub3QgYWxsb2NhdGUgZGlzayBzdHJ1Y3R1cmUgZm9yIGRpc2sgJWRcbiIsCisJCQkgICBkZXZfbm8pOwogCQlibGtfY2xlYW51cF9xdWV1ZShxKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDg4LDEzICs0NzksMTIgQEAKIAlnLT5kcml2ZXJmc19kZXYgPSBkLT5kZXY7CiAJc2V0X2NhcGFjaXR5KGcsIGQtPnNpemUgPj4gOSk7CiAKLQlwcmludGsoVklPRF9LRVJOX0lORk8gImRpc2sgJWQ6ICVsdSBzZWN0b3JzICglbHUgTUIpICIKLQkJCSJDSFM9JWQvJWQvJWQgc2VjdG9yIHNpemUgJWQlc1xuIiwKLQkJCWRldl9ubywgKHVuc2lnbmVkIGxvbmcpKGQtPnNpemUgPj4gOSksCi0JCQkodW5zaWduZWQgbG9uZykoZC0+c2l6ZSA+PiAyMCksCi0JCQkoaW50KWQtPmN5bGluZGVycywgKGludClkLT50cmFja3MsCi0JCQkoaW50KWQtPnNlY3RvcnMsIChpbnQpZC0+Ynl0ZXNfcGVyX3NlY3RvciwKLQkJCWQtPnJlYWRfb25seSA/ICIgKFJPKSIgOiAiIik7CisJcHJfaW5mbygiZGlzayAlZDogJWx1IHNlY3RvcnMgKCVsdSBNQikgQ0hTPSVkLyVkLyVkIHNlY3RvciBzaXplICVkJXNcbiIsCisJCWRldl9ubywgKHVuc2lnbmVkIGxvbmcpKGQtPnNpemUgPj4gOSksCisJCSh1bnNpZ25lZCBsb25nKShkLT5zaXplID4+IDIwKSwKKwkJKGludClkLT5jeWxpbmRlcnMsIChpbnQpZC0+dHJhY2tzLAorCQkoaW50KWQtPnNlY3RvcnMsIChpbnQpZC0+Ynl0ZXNfcGVyX3NlY3RvciwKKwkJZC0+cmVhZF9vbmx5ID8gIiAoUk8pIiA6ICIiKTsKIAogCS8qIHJlZ2lzdGVyIHVzIGluIHRoZSBnbG9iYWwgbGlzdCAqLwogCWFkZF9kaXNrKGcpOwpAQCAtNTc5LDggKzU2OSw4IEBACiAJaWYgKGVycm9yKSB7CiAJCWNvbnN0IHN0cnVjdCB2aW9fZXJyb3JfZW50cnkgKmVycjsKIAkJZXJyID0gdmlvX2xvb2t1cF9yYyh2aW9kYXNkX2Vycl90YWJsZSwgYmV2ZW50LT5zdWJfcmVzdWx0KTsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJyZWFkL3dyaXRlIGVycm9yICVkOjB4JTA0eCAoJXMpXG4iLAotCQkJCWV2ZW50LT54UmMsIGJldmVudC0+c3ViX3Jlc3VsdCwgZXJyLT5tc2cpOworCQlwcl93YXJuaW5nKCJyZWFkL3dyaXRlIGVycm9yICVkOjB4JTA0eCAoJXMpXG4iLAorCQkJICAgZXZlbnQtPnhSYywgYmV2ZW50LT5zdWJfcmVzdWx0LCBlcnItPm1zZyk7CiAJCW51bV9zZWN0ID0gYmxrX3JxX3NlY3RvcnMocmVxKTsKIAl9CiAJcWxvY2sgPSByZXEtPnEtPnF1ZXVlX2xvY2s7CkBAIC02MDUsOCArNTk1LDcgQEAKIAkJcmV0dXJuOwogCS8qIEZpcnN0LCB3ZSBzaG91bGQgTkVWRVIgZ2V0IGFuIGludCBoZXJlLi4ub25seSBhY2tzICovCiAJaWYgKGh2bHBldmVudF9pc19pbnQoZXZlbnQpKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkgICAgICAgIllpa2VzISBnb3QgYW4gaW50IGluIHZpb2Rhc2QgZXZlbnQgaGFuZGxlciFcbiIpOworCQlwcl93YXJuaW5nKCJZaWtlcyEgZ290IGFuIGludCBpbiB2aW9kYXNkIGV2ZW50IGhhbmRsZXIhXG4iKTsKIAkJaWYgKGh2bHBldmVudF9uZWVkX2FjayhldmVudCkpIHsKIAkJCWV2ZW50LT54UmMgPSBIdkxwRXZlbnRfUmNfSW52YWxpZFN1YnR5cGU7CiAJCQlIdkNhbGxFdmVudF9hY2tMcEV2ZW50KGV2ZW50KTsKQEAgLTY0OSw3ICs2MzgsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiaW52YWxpZCBzdWJ0eXBlISIpOworCQlwcl93YXJuaW5nKCJpbnZhbGlkIHN1YnR5cGUhIik7CiAJCWlmIChodmxwZXZlbnRfbmVlZF9hY2soZXZlbnQpKSB7CiAJCQlldmVudC0+eFJjID0gSHZMcEV2ZW50X1JjX0ludmFsaWRTdWJ0eXBlOwogCQkJSHZDYWxsRXZlbnRfYWNrTHBFdmVudChldmVudCk7CkBAIC03MzgsMjkgKzcyNywyNiBAQAogCQl2aW9fc2V0X2hvc3RscCgpOwogCiAJaWYgKHZpb3BhdGhfaG9zdExwID09IEh2THBJbmRleEludmFsaWQpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJpbnZhbGlkIGhvc3RpbmcgcGFydGl0aW9uXG4iKTsKKwkJcHJfd2FybmluZygiaW52YWxpZCBob3N0aW5nIHBhcnRpdGlvblxuIik7CiAJCXJjID0gLUVJTzsKIAkJZ290byBlYXJseV9mYWlsOwogCX0KIAotCXByaW50ayhWSU9EX0tFUk5fSU5GTyAidmVycyAiIFZJT0RfVkVSUyAiLCBob3N0aW5nIHBhcnRpdGlvbiAlZFxuIiwKLQkJCXZpb3BhdGhfaG9zdExwKTsKKwlwcl9pbmZvKCJ2ZXJzICIgVklPRF9WRVJTICIsIGhvc3RpbmcgcGFydGl0aW9uICVkXG4iLCB2aW9wYXRoX2hvc3RMcCk7CiAKICAgICAgICAgLyogcmVnaXN0ZXIgdGhlIGJsb2NrIGRldmljZSAqLwogCXJjID0gIHJlZ2lzdGVyX2Jsa2RldihWSU9EQVNEX01BSk9SLCBWSU9EX0dFTkhEX05BTUUpOwogCWlmIChyYykgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJCQkiVW5hYmxlIHRvIGdldCBtYWpvciBudW1iZXIgJWQgZm9yICVzXG4iLAotCQkJCVZJT0RBU0RfTUFKT1IsIFZJT0RfR0VOSERfTkFNRSk7CisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBnZXQgbWFqb3IgbnVtYmVyICVkIGZvciAlc1xuIiwKKwkJCSAgIFZJT0RBU0RfTUFKT1IsIFZJT0RfR0VOSERfTkFNRSk7CiAJCWdvdG8gZWFybHlfZmFpbDsKIAl9CiAJLyogQWN0dWFsbHkgb3BlbiB0aGUgcGF0aCB0byB0aGUgaG9zdGluZyBwYXJ0aXRpb24gKi8KIAlyYyA9IHZpb3BhdGhfb3Blbih2aW9wYXRoX2hvc3RMcCwgdmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8sCiAJCQkJVklPTUFYUkVRICsgMik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkgICAgICAgImVycm9yIG9wZW5pbmcgcGF0aCB0byBob3N0IHBhcnRpdGlvbiAlZFxuIiwKLQkJICAgICAgIHZpb3BhdGhfaG9zdExwKTsKKwkJcHJfd2FybmluZygiZXJyb3Igb3BlbmluZyBwYXRoIHRvIGhvc3QgcGFydGl0aW9uICVkXG4iLAorCQkJICAgdmlvcGF0aF9ob3N0THApOwogCQlnb3RvIHVucmVnaXN0ZXJfYmxrOwogCX0KIApAQCAtNzY5LDcgKzc1NSw3IEBACiAKIAlyYyA9IHZpb19yZWdpc3Rlcl9kcml2ZXIoJnZpb2Rhc2RfZHJpdmVyKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJ2aW9fcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZFxuIik7CisJCXByX3dhcm5pbmcoInZpb19yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkXG4iKTsKIAkJZ290byB1bnNldF9oYW5kbGVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwppbmRleCBjMTdlNjIyLi4zYzY0YWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYwpAQCAtMjQzLDEwICsyNDMsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19ibGsgKnZibGs7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CiAJaW50IGVycjsKIAl1NjQgY2FwOwotCXUzMiB2OwotCXUzMiBibGtfc2l6ZSwgc2dfZWxlbXM7CisJdTMyIHYsIGJsa19zaXplLCBzZ19lbGVtcywgb3B0X2lvX3NpemU7CisJdTE2IG1pbl9pb19zaXplOworCXU4IHBoeXNpY2FsX2Jsb2NrX2V4cCwgYWxpZ25tZW50X29mZnNldDsKIAogCWlmIChpbmRleF90b19taW5vcihpbmRleCkgPj0gMSA8PCBNSU5PUkJJVFMpCiAJCXJldHVybiAtRU5PU1BDOwpAQCAtMjkzLDEzICsyOTUsMTMgQEAKIAkJZ290byBvdXRfbWVtcG9vbDsKIAl9CiAKLQl2YmxrLT5kaXNrLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX3ZpcnRibGtfcmVxdWVzdCwgJnZibGstPmxvY2spOwotCWlmICghdmJsay0+ZGlzay0+cXVldWUpIHsKKwlxID0gdmJsay0+ZGlzay0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb192aXJ0YmxrX3JlcXVlc3QsICZ2YmxrLT5sb2NrKTsKKwlpZiAoIXEpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfcHV0X2Rpc2s7CiAJfQogCi0JdmJsay0+ZGlzay0+cXVldWUtPnF1ZXVlZGF0YSA9IHZibGs7CisJcS0+cXVldWVkYXRhID0gdmJsazsKIAogCWlmIChpbmRleCA8IDI2KSB7CiAJCXNwcmludGYodmJsay0+ZGlzay0+ZGlza19uYW1lLCAidmQlYyIsICdhJyArIGluZGV4ICUgMjYpOwpAQCAtMzIzLDEwICszMjUsMTAgQEAKIAogCS8qIElmIGJhcnJpZXJzIGFyZSBzdXBwb3J0ZWQsIHRlbGwgYmxvY2sgbGF5ZXIgdGhhdCBxdWV1ZSBpcyBvcmRlcmVkICovCiAJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQkxLX0ZfRkxVU0gpKQotCQlibGtfcXVldWVfb3JkZXJlZCh2YmxrLT5kaXNrLT5xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCwKKwkJYmxrX3F1ZXVlX29yZGVyZWQocSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCwKIAkJCQkgIHZpcnRibGtfcHJlcGFyZV9mbHVzaCk7CiAJZWxzZSBpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9CQVJSSUVSKSkKLQkJYmxrX3F1ZXVlX29yZGVyZWQodmJsay0+ZGlzay0+cXVldWUsIFFVRVVFX09SREVSRURfVEFHLCBOVUxMKTsKKwkJYmxrX3F1ZXVlX29yZGVyZWQocSwgUVVFVUVfT1JERVJFRF9UQUcsIE5VTEwpOwogCiAJLyogSWYgZGlzayBpcyByZWFkLW9ubHkgaW4gdGhlIGhvc3QsIHRoZSBndWVzdCBzaG91bGQgb2JleSAqLwogCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0JMS19GX1JPKSkKQEAgLTM0NSwxNCArMzQ3LDE0IEBACiAJc2V0X2NhcGFjaXR5KHZibGstPmRpc2ssIGNhcCk7CiAKIAkvKiBXZSBjYW4gaGFuZGxlIHdoYXRldmVyIHRoZSBob3N0IHRvbGQgdXMgdG8gaGFuZGxlLiAqLwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyh2YmxrLT5kaXNrLT5xdWV1ZSwgdmJsay0+c2dfZWxlbXMtMik7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyh2YmxrLT5kaXNrLT5xdWV1ZSwgdmJsay0+c2dfZWxlbXMtMik7CisJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIHZibGstPnNnX2VsZW1zLTIpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgdmJsay0+c2dfZWxlbXMtMik7CiAKIAkvKiBObyBuZWVkIHRvIGJvdW5jZSBhbnkgcmVxdWVzdHMgKi8KLQlibGtfcXVldWVfYm91bmNlX2xpbWl0KHZibGstPmRpc2stPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CisJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChxLCBCTEtfQk9VTkNFX0FOWSk7CiAKIAkvKiBObyByZWFsIHNlY3RvciBsaW1pdC4gKi8KLQlibGtfcXVldWVfbWF4X3NlY3RvcnModmJsay0+ZGlzay0+cXVldWUsIC0xVSk7CisJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIC0xVSk7CiAKIAkvKiBIb3N0IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgbWF4aW11bSBzZWdtZW50IHNpemUgYW5kIG51bWJlciBvZgogCSAqIHNlZ21lbnRzLiAqLwpAQCAtMzYwLDE2ICszNjIsNDUgQEAKIAkJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIHNpemVfbWF4KSwKIAkJCQkmdik7CiAJaWYgKCFlcnIpCi0JCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHZibGstPmRpc2stPnF1ZXVlLCB2KTsKKwkJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocSwgdik7CiAJZWxzZQotCQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZSh2YmxrLT5kaXNrLT5xdWV1ZSwgLTFVKTsKKwkJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocSwgLTFVKTsKIAogCS8qIEhvc3QgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgZGV2aWNlICovCiAJZXJyID0gdmlydGlvX2NvbmZpZ192YWwodmRldiwgVklSVElPX0JMS19GX0JMS19TSVpFLAogCQkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgYmxrX3NpemUpLAogCQkJCSZibGtfc2l6ZSk7CiAJaWYgKCFlcnIpCi0JCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUodmJsay0+ZGlzay0+cXVldWUsIGJsa19zaXplKTsKKwkJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxLCBibGtfc2l6ZSk7CisJZWxzZQorCQlibGtfc2l6ZSA9IHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxKTsKKworCS8qIFVzZSB0b3BvbG9neSBpbmZvcm1hdGlvbiBpZiBhdmFpbGFibGUgKi8KKwllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1ksCisJCQlvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2Jsa19jb25maWcsIHBoeXNpY2FsX2Jsb2NrX2V4cCksCisJCQkmcGh5c2ljYWxfYmxvY2tfZXhwKTsKKwlpZiAoIWVyciAmJiBwaHlzaWNhbF9ibG9ja19leHApCisJCWJsa19xdWV1ZV9waHlzaWNhbF9ibG9ja19zaXplKHEsCisJCQkJYmxrX3NpemUgKiAoMSA8PCBwaHlzaWNhbF9ibG9ja19leHApKTsKKworCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9UT1BPTE9HWSwKKwkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgYWxpZ25tZW50X29mZnNldCksCisJCQkmYWxpZ25tZW50X29mZnNldCk7CisJaWYgKCFlcnIgJiYgYWxpZ25tZW50X29mZnNldCkKKwkJYmxrX3F1ZXVlX2FsaWdubWVudF9vZmZzZXQocSwgYmxrX3NpemUgKiBhbGlnbm1lbnRfb2Zmc2V0KTsKKworCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9UT1BPTE9HWSwKKwkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgbWluX2lvX3NpemUpLAorCQkJJm1pbl9pb19zaXplKTsKKwlpZiAoIWVyciAmJiBtaW5faW9fc2l6ZSkKKwkJYmxrX3F1ZXVlX2lvX21pbihxLCBibGtfc2l6ZSAqIG1pbl9pb19zaXplKTsKKworCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9UT1BPTE9HWSwKKwkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgb3B0X2lvX3NpemUpLAorCQkJJm9wdF9pb19zaXplKTsKKwlpZiAoIWVyciAmJiBvcHRfaW9fc2l6ZSkKKwkJYmxrX3F1ZXVlX2lvX29wdChxLCBibGtfc2l6ZSAqIG9wdF9pb19zaXplKTsKKwogCiAJYWRkX2Rpc2sodmJsay0+ZGlzayk7CiAJcmV0dXJuIDA7CkBAIC00MTIsNyArNDQzLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKIAlWSVJUSU9fQkxLX0ZfQkFSUklFUiwgVklSVElPX0JMS19GX1NFR19NQVgsIFZJUlRJT19CTEtfRl9TSVpFX01BWCwKIAlWSVJUSU9fQkxLX0ZfR0VPTUVUUlksIFZJUlRJT19CTEtfRl9STywgVklSVElPX0JMS19GX0JMS19TSVpFLAotCVZJUlRJT19CTEtfRl9TQ1NJLCBWSVJUSU9fQkxLX0ZfRkxVU0gKKwlWSVJUSU9fQkxLX0ZfU0NTSSwgVklSVElPX0JMS19GX0ZMVVNILCBWSVJUSU9fQkxLX0ZfVE9QT0xPR1kKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IGUwMjM2ODIuLjMxNDFkZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC02NjYsNiArNjY2LDE0IEBACiAJaGVscAogCSAgVmlydGlvIGNvbnNvbGUgZm9yIHVzZSB3aXRoIGxndWVzdCBhbmQgb3RoZXIgaHlwZXJ2aXNvcnMuCiAKKwkgIEFsc28gc2VydmVzIGFzIGEgZ2VuZXJhbC1wdXJwb3NlIHNlcmlhbCBkZXZpY2UgZm9yIGRhdGEKKwkgIHRyYW5zZmVyIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCBob3N0LiAgQ2hhcmFjdGVyIGRldmljZXMgYXQKKwkgIC9kZXYvdnBvcnROcG4gd2lsbCBiZSBjcmVhdGVkIHdoZW4gY29ycmVzcG9uZGluZyBwb3J0cyBhcmUKKwkgIGZvdW5kLCB3aGVyZSBOIGlzIHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBuIGlzIHRoZSBwb3J0IG51bWJlcgorCSAgd2l0aGluIHRoYXQgZGV2aWNlLiAgSWYgc3BlY2lmaWVkIGJ5IHRoZSBob3N0LCBhIHN5c2ZzCisJICBhdHRyaWJ1dGUgY2FsbGVkICduYW1lJyB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGEgbmFtZSBmb3IKKwkgIHRoZSBwb3J0IHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHVkZXYgc2NyaXB0cyB0byBjcmVhdGUgYQorCSAgc3ltbGluayB0byB0aGUgZGV2aWNlLgogCiBjb25maWcgSFZDUwogCXRyaXN0YXRlICJJQk0gSHlwZXJ2aXNvciBWaXJ0dWFsIENvbnNvbGUgU2VydmVyIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCAzOTk5YTVmLi44YTcxM2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2FncF9iYWNrZW5kLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgImFncC5oIgogCiAvKgpAQCAtODE1LDEyICs4MTYsNiBAQAogCQlpbnRlbF9pODMwX2ZpbmlfZmx1c2goKTsKIH0KIAotc3RhdGljIHZvaWQKLWRvX3diaW52ZCh2b2lkICpudWxsKQotewotCXdiaW52ZCgpOwotfQotCiAvKiBUaGUgY2hpcHNldF9mbHVzaCBpbnRlcmZhY2UgbmVlZHMgdG8gZ2V0IGRhdGEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCiAgKiBmbHVzaGVkIG91dCBvZiB0aGUgQ1BVIGFsbCB0aGUgd2F5IG91dCB0byBtYWluIG1lbW9yeSwgYmVjYXVzZSB0aGUgR1BVCiAgKiBkb2Vzbid0IHNub29wIHRob3NlIGJ1ZmZlcnMuCkBAIC04MzcsMTIgKzgzMiwxMCBAQAogCiAJbWVtc2V0KHBnLCAwLCAxMDI0KTsKIAotCWlmIChjcHVfaGFzX2NsZmx1c2gpIHsKKwlpZiAoY3B1X2hhc19jbGZsdXNoKQogCQljbGZsdXNoX2NhY2hlX3JhbmdlKHBnLCAxMDI0KTsKLQl9IGVsc2UgewotCQlpZiAob25fZWFjaF9jcHUoZG9fd2JpbnZkLCBOVUxMLCAxKSAhPSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgY2FjaGUgZmx1c2guXG4iKTsKLQl9CisJZWxzZSBpZiAod2JpbnZkX29uX2FsbF9jcHVzKCkgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgY2FjaGUgZmx1c2guXG4iKTsKIH0KIAogLyogVGhlIGludGVsIGk4MzAgYXV0b21hdGljYWxseSBpbml0aWFsaXplcyB0aGUgYWdwIGFwZXJ0dXJlIGR1cmluZyBQT1NULgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19iZWF0LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYwppbmRleCAwYWZjOGI4Li41ZmU0NjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2JlYXQuYwpAQCAtODQsNyArODQsNyBAQAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19iZWF0X2dldF9wdXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX2JlYXRfZ2V0X3B1dF9vcHMgPSB7CiAJLmdldF9jaGFycyA9IGh2Y19iZWF0X2dldF9jaGFycywKIAkucHV0X2NoYXJzID0gaHZjX2JlYXRfcHV0X2NoYXJzLAogfTsKQEAgLTk5LDcgKzk5LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaHZjX2JlYXRfY29uc29sZV9pbml0KHZvaWQpCiB7Ci0JaWYgKGh2Y19iZWF0X3VzZWl0ICYmIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQmVhdCIpKSB7CisJaWYgKGh2Y19iZWF0X3VzZWl0ICYmIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQmVhdCIpKSB7CiAJCWh2Y19pbnN0YW50aWF0ZSgwLCAwLCAmaHZjX2JlYXRfZ2V0X3B1dF9vcHMpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggNDE2ZDM0Mi4uNGMzYjU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogICogY29uc29sZSBpbnRlcmZhY2VzIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCBhcyBhIHR0eSBkZXZpY2UuICBUaGlzIGhhcyB0byBiZQogICogc3RhdGljIGJlY2F1c2Uga21hbGxvYyB3aWxsIG5vdCB3b3JrIGR1cmluZyBlYXJseSBjb25zb2xlIGluaXQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzICpjb25zX29wc1tNQVhfTlJfSFZDX0NPTlNPTEVTXTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzICpjb25zX29wc1tNQVhfTlJfSFZDX0NPTlNPTEVTXTsKIHN0YXRpYyB1aW50MzJfdCB2dGVybW5vc1tNQVhfTlJfSFZDX0NPTlNPTEVTXSA9CiAJe1swIC4uLiBNQVhfTlJfSFZDX0NPTlNPTEVTIC0gMV0gPSAtMX07CiAKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICogdnR5IGFkYXB0ZXJzIGRvIE5PVCBnZXQgYW4gaHZjX2luc3RhbnRpYXRlKCkgY2FsbGJhY2sgc2luY2UgdGhleQogICogYXBwZWFyIGFmdGVyIGVhcmx5IGNvbnNvbGUgaW5pdC4KICAqLwotaW50IGh2Y19pbnN0YW50aWF0ZSh1aW50MzJfdCB2dGVybW5vLCBpbnQgaW5kZXgsIHN0cnVjdCBodl9vcHMgKm9wcykKK2ludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3QgaHZfb3BzICpvcHMpCiB7CiAJc3RydWN0IGh2Y19zdHJ1Y3QgKmhwOwogCkBAIC03NDgsOCArNzQ4LDkgQEAKIAkuY2hhcnNfaW5fYnVmZmVyID0gaHZjX2NoYXJzX2luX2J1ZmZlciwKIH07CiAKLXN0cnVjdCBodmNfc3RydWN0IF9fZGV2aW5pdCAqaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBkYXRhLAotCQkJCQlzdHJ1Y3QgaHZfb3BzICpvcHMsIGludCBvdXRidWZfc2l6ZSkKK3N0cnVjdCBodmNfc3RydWN0ICpodmNfYWxsb2ModWludDMyX3QgdnRlcm1ubywgaW50IGRhdGEsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBodl9vcHMgKm9wcywKKwkJCSAgICAgaW50IG91dGJ1Zl9zaXplKQogewogCXN0cnVjdCBodmNfc3RydWN0ICpocDsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmgKaW5kZXggMTA5NTBjYS4uNTQzODFlYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oCkBAIC01NSw3ICs1NSw3IEBACiAJaW50IG91dGJ1Zl9zaXplOwogCWludCBuX291dGJ1ZjsKIAl1aW50MzJfdCB2dGVybW5vOwotCXN0cnVjdCBodl9vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgaHZfb3BzICpvcHM7CiAJaW50IGlycV9yZXF1ZXN0ZWQ7CiAJaW50IGRhdGE7CiAJc3RydWN0IHdpbnNpemUgd3M7CkBAIC03NiwxMSArNzYsMTIgQEAKIH07CiAKIC8qIFJlZ2lzdGVyIGEgdnRlcm0gYW5kIGEgc2xvdCBpbmRleCBmb3IgdXNlIGFzIGEgY29uc29sZSAoY29uc29sZV9pbml0KSAqLwotZXh0ZXJuIGludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4LCBzdHJ1Y3QgaHZfb3BzICpvcHMpOworZXh0ZXJuIGludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4LAorCQkJICAgY29uc3Qgc3RydWN0IGh2X29wcyAqb3BzKTsKIAogLyogcmVnaXN0ZXIgYSB2dGVybSBmb3IgaHZjIHR0eSBvcGVyYXRpb24gKG1vZHVsZV9pbml0IG9yIGhvdHBsdWcgYWRkKSAqLwotZXh0ZXJuIHN0cnVjdCBodmNfc3RydWN0ICogX19kZXZpbml0IGh2Y19hbGxvYyh1aW50MzJfdCB2dGVybW5vLCBpbnQgZGF0YSwKLQkJCQlzdHJ1Y3QgaHZfb3BzICpvcHMsIGludCBvdXRidWZfc2l6ZSk7CitleHRlcm4gc3RydWN0IGh2Y19zdHJ1Y3QgKiBodmNfYWxsb2ModWludDMyX3QgdnRlcm1ubywgaW50IGRhdGEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaHZfb3BzICpvcHMsIGludCBvdXRidWZfc2l6ZSk7CiAvKiByZW1vdmUgYSB2dGVybSBmcm9tIGh2YyB0dHkgb3BlcmF0aW9uIChtb2R1bGVfZXhpdCBvciBob3RwbHVnIHJlbW92ZSkgKi8KIGV4dGVybiBpbnQgaHZjX3JlbW92ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYyBiL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jCmluZGV4IDkzNmQwNWIuLmZkMDI0MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAlyZXR1cm4gc2VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX2dldF9wdXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX2dldF9wdXRfb3BzID0gewogCS5nZXRfY2hhcnMgPSBnZXRfY2hhcnMsCiAJLnB1dF9jaGFycyA9IHB1dF9jaGFycywKIAkubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKaW5kZXggZmU2MmJkMC4uMjE2ODFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogCiAKIC8qIEhWQyBvcGVyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfaXVjdl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyBodmNfaXVjdl9vcHMgPSB7CiAJLmdldF9jaGFycyA9IGh2Y19pdWN2X2dldF9jaGFycywKIAkucHV0X2NoYXJzID0gaHZjX2l1Y3ZfcHV0X2NoYXJzLAogCS5ub3RpZmllcl9hZGQgPSBodmNfaXVjdl9ub3RpZmllcl9hZGQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYyBiL2RyaXZlcnMvY2hhci9odmNfcnRhcy5jCmluZGV4IDg4NTkwZDAuLjYxYzRhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfcnRhcy5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfcnRhcy5jCkBAIC03MSw3ICs3MSw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19ydGFzX2dldF9wdXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX3J0YXNfZ2V0X3B1dF9vcHMgPSB7CiAJLmdldF9jaGFycyA9IGh2Y19ydGFzX3JlYWRfY29uc29sZSwKIAkucHV0X2NoYXJzID0gaHZjX3J0YXNfd3JpdGVfY29uc29sZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3VkYmcuYyBiL2RyaXZlcnMvY2hhci9odmNfdWRiZy5jCmluZGV4IGJkNjNiYTguLmIwOTU3ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfdWRiZy5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfdWRiZy5jCkBAIC01OCw3ICs1OCw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y191ZGJnX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y191ZGJnX29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gaHZjX3VkYmdfZ2V0LAogCS5wdXRfY2hhcnMgPSBodmNfdWRiZ19wdXQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y192aW8uYyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKaW5kZXggMTBiZTM0My4uMjczNzBlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y192aW8uYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJcmV0dXJuIGdvdDsKIH0KIAotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX2dldF9wdXRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX2dldF9wdXRfb3BzID0gewogCS5nZXRfY2hhcnMgPSBmaWx0ZXJlZF9nZXRfY2hhcnMsCiAJLnB1dF9jaGFycyA9IGh2Y19wdXRfY2hhcnMsCiAJLm5vdGlmaWVyX2FkZCA9IG5vdGlmaWVyX2FkZF9pcnEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jIGIvZHJpdmVycy9jaGFyL2h2Y194ZW4uYwppbmRleCBiMWE3MTYzLi42MDQ0NmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXJldHVybiByZWN2OwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gcmVhZF9jb25zb2xlLAogCS5wdXRfY2hhcnMgPSB3cml0ZV9jb25zb2xlLAogCS5ub3RpZmllcl9hZGQgPSBub3RpZmllcl9hZGRfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IDg3MDYwMjYuLjZlYTEwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTE4NiwzICsxODYsMTUgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBteGMtcm5nYS4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIEhXX1JBTkRPTV9OT01BRElLCisJdHJpc3RhdGUgIlNULUVyaWNzc29uIE5vbWFkaWsgUmFuZG9tIE51bWJlciBHZW5lcmF0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhXX1JBTkRPTSAmJiBQTEFUX05PTUFESUsKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwtc2lkZSBzdXBwb3J0IGZvciB0aGUgUmFuZG9tIE51bWJlcgorCSAgR2VuZXJhdG9yIGhhcmR3YXJlIGZvdW5kIG9uIFNULUVyaWNzc29uIFNvQ3MgKDg4MTUgYW5kIDg1MDApLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBub21hZGlrLXJuZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCmluZGV4IDVlZWIxMzAuLjQyNzMzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQpAQCAtMTgsMyArMTgsNCBAQAogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9UWDQ5MzkpICs9IHR4NDkzOS1ybmcubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9NWENfUk5HQSkgKz0gbXhjLXJuZ2Eubwogb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9PQ1RFT04pICs9IG9jdGVvbi1ybmcubworb2JqLSQoQ09ORklHX0hXX1JBTkRPTV9OT01BRElLKSArPSBub21hZGlrLXJuZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL25vbWFkaWstcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL25vbWFkaWstcm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiNGM0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vbm9tYWRpay1ybmcuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIE5vbWFkaWsgUk5HIHN1cHBvcnQKKyAqICBDb3B5cmlnaHQgMjAwOSBBbGVzc2FuZHJvIFJ1YmluaQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9od19yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCitzdGF0aWMgaW50IG5ta19ybmdfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdm9pZCAqZGF0YSwgc2l6ZV90IG1heCwgYm9vbCB3YWl0KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilybmctPnByaXY7CisKKwkvKgorCSAqIFRoZSByZWdpc3RlciBpcyAzMiBiaXRzIGFuZCBnaXZlcyAxNiByYW5kb20gYml0cyAobG93IGhhbGYpLgorCSAqIEEgc3Vic2VxdWVudCByZWFkIHdpbGwgZGVsYXkgdGhlIGNvcmUgZm9yIDQwMG5zLCBzbyB3ZSBqdXN0IHJlYWQKKwkgKiBvbmNlIGFuZCBhY2NlcHQgdGhlIHZlcnkgdW5saWtlbHkgdmVyeSBzbWFsbCBkZWxheSwgZXZlbiBpZiB3YWl0PT0wLgorCSAqLworCSoodTE2ICopZGF0YSA9IF9fcmF3X3JlYWRsKGJhc2UgKyA4KSAmIDB4ZmZmZjsKKwlyZXR1cm4gMjsKK30KKworLyogd2UgaGF2ZSBhdCBtb3N0IG9uZSBSTkcgcGVyIG1hY2hpbmUsIGdyYW50ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgaHdybmcgbm1rX3JuZyA9IHsKKwkubmFtZQkJPSAibm9tYWRpayIsCisJLnJlYWQJCT0gbm1rX3JuZ19yZWFkLAorfTsKKworc3RhdGljIGludCBubWtfcm5nX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBzdHJ1Y3QgYW1iYV9pZCAqaWQpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCByZXQ7CisKKwlyZXQgPSBhbWJhX3JlcXVlc3RfcmVnaW9ucyhkZXYsIGRldi0+ZGV2LmluaXRfbmFtZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSAtRU5PTUVNOworCWJhc2UgPSBpb3JlbWFwKGRldi0+cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZkZXYtPnJlcykpOworCWlmICghYmFzZSkKKwkJZ290byBvdXRfcmVsZWFzZTsKKwlubWtfcm5nLnByaXYgPSAodW5zaWduZWQgbG9uZyliYXNlOworCXJldCA9IGh3cm5nX3JlZ2lzdGVyKCZubWtfcm5nKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bm1hcDsKKwlyZXR1cm4gMDsKKworb3V0X3VubWFwOgorCWlvdW5tYXAoYmFzZSk7CitvdXRfcmVsZWFzZToKKwlhbWJhX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbm1rX3JuZ19yZW1vdmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKW5ta19ybmcucHJpdjsKKwlod3JuZ191bnJlZ2lzdGVyKCZubWtfcm5nKTsKKwlpb3VubWFwKGJhc2UpOworCWFtYmFfcmVsZWFzZV9yZWdpb25zKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBubWtfcm5nX2lkc1tdID0geworCXsKKwkJLmlkCT0gMHgwMDA4MDVlMSwKKwkJLm1hc2sJPSAweDAwMGZmZmZmLCAvKiB0b3AgYml0cyBhcmUgcmV2IGFuZCBjZmc6IGFjY2VwdCBhbGwgKi8KKwl9LAorCXswLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kcml2ZXIgbm1rX3JuZ19kcml2ZXIgPSB7CisJLmRydiA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gInJuZyIsCisJCX0sCisJLnByb2JlID0gbm1rX3JuZ19wcm9iZSwKKwkucmVtb3ZlID0gbm1rX3JuZ19yZW1vdmUsCisJLmlkX3RhYmxlID0gbm1rX3JuZ19pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBubWtfcm5nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gYW1iYV9kcml2ZXJfcmVnaXN0ZXIoJm5ta19ybmdfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG5ta19ybmdfZXhpdCh2b2lkKQoreworCWFtYmFfZHJpdmVyX3VucmVnaXN0ZXIoJm5ta19ybmdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobm1rX3JuZ19pbml0KTsKK21vZHVsZV9leGl0KG5ta19ybmdfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9udnJhbS5jIGIvZHJpdmVycy9jaGFyL252cmFtLmMKaW5kZXggZmRiY2M5Zi4uNWViODNjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL252cmFtLmMKKysrIGIvZHJpdmVycy9jaGFyL252cmFtLmMKQEAgLTMzNiwxNCArMzM2LDEyIEBACiAKIHN0YXRpYyBpbnQgbnZyYW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlsb2NrX2tlcm5lbCgpOwogCXNwaW5fbG9jaygmbnZyYW1fc3RhdGVfbG9jayk7CiAKIAlpZiAoKG52cmFtX29wZW5fY250ICYmIChmaWxlLT5mX2ZsYWdzICYgT19FWENMKSkgfHwKIAkgICAgKG52cmFtX29wZW5fbW9kZSAmIE5WUkFNX0VYQ0wpIHx8CiAJICAgICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIChudnJhbV9vcGVuX21vZGUgJiBOVlJBTV9XUklURSkpKSB7CiAJCXNwaW5fdW5sb2NrKCZudnJhbV9zdGF0ZV9sb2NrKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMzU0LDcgKzM1Miw2IEBACiAJbnZyYW1fb3Blbl9jbnQrKzsKIAogCXNwaW5fdW5sb2NrKCZudnJhbV9zdGF0ZV9sb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCmluZGV4IDJkYjRjMGEuLmM5YmM4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGNtbV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gKHN0cnVjdCBjbTQwMDBfZGV2ICopIGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CiAJdW5zaWduZWQgc2hvcnQgczsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggYTAzNWFlMy4uMjEzMzczYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTEsMTggKzEsNiBAQAotLypEOjMwMAotICogVGhlIEd1ZXN0IGNvbnNvbGUgZHJpdmVyCi0gKgotICogV3JpdGluZyBjb25zb2xlIGRyaXZlcnMgaXMgb25lIG9mIHRoZSBmZXcgcmVtYWluaW5nIERhcmsgQXJ0cyBpbiBMaW51eC4KLSAqIEZvcnR1bmF0ZWx5IGZvciB1cywgdGhlIHBhdGggb2YgdmlydHVhbCBjb25zb2xlcyBoYXMgYmVlbiB3ZWxsLXRyb2RkZW4gYnkKLSAqIHRoZSBQb3dlclBDIGZvbGtzLCB3aG8gd3JvdGUgImh2Y19jb25zb2xlLmMiIHRvIGdlbmVyaWNhbGx5IHN1cHBvcnQgYW55Ci0gKiB2aXJ0dWFsIGNvbnNvbGUuICBXZSB1c2UgdGhhdCBpbmZyYXN0cnVjdHVyZSB3aGljaCBvbmx5IHJlcXVpcmVzIHVzIHRvIHdyaXRlCi0gKiB0aGUgYmFzaWMgcHV0X2NoYXJzIGFuZCBnZXRfY2hhcnMgZnVuY3Rpb25zIGFuZCBjYWxsIHRoZSByaWdodCByZWdpc3RlcgotICogZnVuY3Rpb25zLgotIDoqLwotCi0vKk06MDAyIFRoZSBjb25zb2xlIGNhbiBiZSBmbG9vZGVkOiB3aGlsZSB0aGUgR3Vlc3QgaXMgcHJvY2Vzc2luZyBpbnB1dCB0aGUKLSAqIEhvc3QgY2FuIHNlbmQgbW9yZS4gIEJ1ZmZlcmluZyBpbiB0aGUgSG9zdCBjb3VsZCBhbGxldmlhdGUgdGhpcywgYnV0IGl0IGlzIGEKLSAqIGRpZmZpY3VsdCBwcm9ibGVtIGluIGdlbmVyYWwuIDoqLwotLyogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBSdXN0eSBSdXNzZWxsLCBJQk0gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBSZWQgSGF0LCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOCwxNDIgKzE2LDY5NCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLworI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSAiaHZjX2NvbnNvbGUuaCIKIAotLypEOjM0MCBUaGVzZSByZXByZXNlbnQgb3VyIGlucHV0IGFuZCBvdXRwdXQgY29uc29sZSBxdWV1ZXMsIGFuZCB0aGUgdmlydGlvCi0gKiBvcGVyYXRpb25zIGZvciB0aGVtLiAqLwotc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKmluX3ZxLCAqb3V0X3ZxOwotc3RhdGljIHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2OwotCi0vKiBUaGlzIGlzIG91ciBpbnB1dCBidWZmZXIsIGFuZCBob3cgbXVjaCBkYXRhIGlzIGxlZnQgaW4gaXQuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGluX2xlbjsKLXN0YXRpYyBjaGFyICppbiwgKmluYnVmOwotCi0vKiBUaGUgb3BlcmF0aW9ucyBmb3Igb3VyIGNvbnNvbGUuICovCi1zdGF0aWMgc3RydWN0IGh2X29wcyB2aXJ0aW9fY29uczsKLQotLyogVGhlIGh2YyBkZXZpY2UgKi8KLXN0YXRpYyBzdHJ1Y3QgaHZjX3N0cnVjdCAqaHZjOwotCi0vKkQ6MzEwIFRoZSBwdXRfY2hhcnMoKSBjYWxsYmFjayBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgorLyoKKyAqIFRoaXMgaXMgYSBnbG9iYWwgc3RydWN0IGZvciBzdG9yaW5nIGNvbW1vbiBkYXRhIGZvciBhbGwgdGhlIGRldmljZXMKKyAqIHRoaXMgZHJpdmVyIGhhbmRsZXMuCiAgKgotICogV2UgdHVybiB0aGUgY2hhcmFjdGVycyBpbnRvIGEgc2NhdHRlci1nYXRoZXIgbGlzdCwgYWRkIGl0IHRvIHRoZSBvdXRwdXQKLSAqIHF1ZXVlIGFuZCB0aGVuIGtpY2sgdGhlIEhvc3QuICBUaGVuIHdlIHNpdCBoZXJlIHdhaXRpbmcgZm9yIGl0IHRvIGZpbmlzaDoKLSAqIGluZWZmaWNpZW50IGluIHRoZW9yeSwgYnV0IGluIHByYWN0aWNlIGltcGxlbWVudGF0aW9ucyB3aWxsIGRvIGl0Ci0gKiBpbW1lZGlhdGVseSAobGd1ZXN0J3MgTGF1bmNoZXIgZG9lcykuICovCi1zdGF0aWMgaW50IHB1dF9jaGFycyh1MzIgdnRlcm1ubywgY29uc3QgY2hhciAqYnVmLCBpbnQgY291bnQpCisgKiBNYWlubHksIGl0IGhhcyBhIGxpbmtlZCBsaXN0IGZvciBhbGwgdGhlIGNvbnNvbGVzIGluIG9uZSBwbGFjZSBzbworICogdGhhdCBjYWxsYmFja3MgZnJvbSBodmMgZm9yIGdldF9jaGFycygpLCBwdXRfY2hhcnMoKSB3b3JrIHByb3Blcmx5CisgKiBhY3Jvc3MgbXVsdGlwbGUgZGV2aWNlcyBhbmQgbXVsdGlwbGUgcG9ydHMgcGVyIGRldmljZS4KKyAqLworc3RydWN0IHBvcnRzX2RyaXZlcl9kYXRhIHsKKwkvKiBVc2VkIGZvciByZWdpc3RlcmluZyBjaGFyZGV2cyAqLworCXN0cnVjdCBjbGFzcyAqY2xhc3M7CisKKwkvKiBVc2VkIGZvciBleHBvcnRpbmcgcGVyLXBvcnQgaW5mb3JtYXRpb24gdG8gZGVidWdmcyAqLworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyOworCisJLyogTnVtYmVyIG9mIGRldmljZXMgdGhpcyBkcml2ZXIgaXMgaGFuZGxpbmcgKi8KKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwkvKgorCSAqIFRoaXMgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaHZjIGNvbnNvbGVzCisJICogc3Bhd25lZCBieSB0aGlzIGRyaXZlci4gIFRoaXMgbnVtYmVyIGlzIGdpdmVuIGFzIHRoZSBmaXJzdAorCSAqIGFyZ3VtZW50IHRvIGh2Y19hbGxvYygpLiAgVG8gY29ycmVjdGx5IG1hcCBhbiBpbml0aWFsCisJICogY29uc29sZSBzcGF3bmVkIHZpYSBodmNfaW5zdGFudGlhdGUgdG8gdGhlIGNvbnNvbGUgYmVpbmcKKwkgKiBob29rZWQgdXAgdmlhIGh2Y19hbGxvYywgd2UgbmVlZCB0byBwYXNzIHRoZSBzYW1lIHZ0ZXJtbm8uCisJICoKKwkgKiBXZSBhbHNvIGp1c3QgYXNzdW1lIHRoZSBmaXJzdCBjb25zb2xlIGJlaW5nIGluaXRpYWxpc2VkIHdhcworCSAqIHRoZSBmaXJzdCBvbmUgdGhhdCBnb3QgdXNlZCBhcyB0aGUgaW5pdGlhbCBjb25zb2xlLgorCSAqLworCXVuc2lnbmVkIGludCBuZXh0X3Z0ZXJtbm87CisKKwkvKiBBbGwgdGhlIGNvbnNvbGUgZGV2aWNlcyBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyICovCisJc3RydWN0IGxpc3RfaGVhZCBjb25zb2xlczsKK307CitzdGF0aWMgc3RydWN0IHBvcnRzX2RyaXZlcl9kYXRhIHBkcnZkYXRhOworCitERUZJTkVfU1BJTkxPQ0socGRydmRhdGFfbG9jayk7CisKKy8qIFRoaXMgc3RydWN0IGhvbGRzIGluZm9ybWF0aW9uIHRoYXQncyByZWxldmFudCBvbmx5IGZvciBjb25zb2xlIHBvcnRzICovCitzdHJ1Y3QgY29uc29sZSB7CisJLyogV2UnbGwgcGxhY2UgYWxsIGNvbnNvbGVzIGluIGEgbGlzdCBpbiB0aGUgcGRydmRhdGEgc3RydWN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogVGhlIGh2YyBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uc29sZSBwb3J0ICovCisJc3RydWN0IGh2Y19zdHJ1Y3QgKmh2YzsKKworCS8qCisJICogVGhpcyBudW1iZXIgaWRlbnRpZmllcyB0aGUgbnVtYmVyIHRoYXQgd2UgdXNlZCB0byByZWdpc3RlcgorCSAqIHdpdGggaHZjIGluIGh2Y19pbnN0YW50aWF0ZSgpIGFuZCBodmNfYWxsb2MoKTsgdGhpcyBpcyB0aGUKKwkgKiBudW1iZXIgcGFzc2VkIG9uIGJ5IHRoZSBodmMgY2FsbGJhY2tzIHRvIHVzIHRvCisJICogZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSBvdGhlciBjb25zb2xlIHBvcnRzIGhhbmRsZWQgYnkKKwkgKiB0aGlzIGRyaXZlcgorCSAqLworCXUzMiB2dGVybW5vOworfTsKKworc3RydWN0IHBvcnRfYnVmZmVyIHsKKwljaGFyICpidWY7CisKKwkvKiBzaXplIG9mIHRoZSBidWZmZXIgaW4gKmJ1ZiBhYm92ZSAqLworCXNpemVfdCBzaXplOworCisJLyogdXNlZCBsZW5ndGggb2YgdGhlIGJ1ZmZlciAqLworCXNpemVfdCBsZW47CisJLyogb2Zmc2V0IGluIHRoZSBidWYgZnJvbSB3aGljaCB0byBjb25zdW1lIGRhdGEgKi8KKwlzaXplX3Qgb2Zmc2V0OworfTsKKworLyoKKyAqIFRoaXMgaXMgYSBwZXItZGV2aWNlIHN0cnVjdCB0aGF0IHN0b3JlcyBkYXRhIGNvbW1vbiB0byBhbGwgdGhlCisgKiBwb3J0cyBmb3IgdGhhdCBkZXZpY2UgKHZkZXYtPnByaXYpLgorICovCitzdHJ1Y3QgcG9ydHNfZGV2aWNlIHsKKwkvKgorCSAqIFdvcmtxdWV1ZSBoYW5kbGVycyB3aGVyZSB3ZSBwcm9jZXNzIGRlZmVycmVkIHdvcmsgYWZ0ZXIKKwkgKiBub3RpZmljYXRpb24KKwkgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29udHJvbF93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjb25maWdfd29yazsKKworCXN0cnVjdCBsaXN0X2hlYWQgcG9ydHM7CisKKwkvKiBUbyBwcm90ZWN0IHRoZSBsaXN0IG9mIHBvcnRzICovCisJc3BpbmxvY2tfdCBwb3J0c19sb2NrOworCisJLyogVG8gcHJvdGVjdCB0aGUgdnEgb3BlcmF0aW9ucyBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbCAqLworCXNwaW5sb2NrX3QgY3ZxX2xvY2s7CisKKwkvKiBUaGUgY3VycmVudCBjb25maWcgc3BhY2UgaXMgc3RvcmVkIGhlcmUgKi8KKwlzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnIGNvbmZpZzsKKworCS8qIFRoZSB2aXJ0aW8gZGV2aWNlIHdlJ3JlIGFzc29jaWF0ZWQgd2l0aCAqLworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2OworCisJLyoKKwkgKiBBIGNvdXBsZSBvZiB2aXJ0cXVldWVzIGZvciB0aGUgY29udHJvbCBjaGFubmVsOiBvbmUgZm9yCisJICogZ3Vlc3QtPmhvc3QgdHJhbnNmZXJzLCBvbmUgZm9yIGhvc3QtPmd1ZXN0IHRyYW5zZmVycworCSAqLworCXN0cnVjdCB2aXJ0cXVldWUgKmNfaXZxLCAqY19vdnE7CisKKwkvKiBBcnJheSBvZiBwZXItcG9ydCBJTyB2aXJ0cXVldWVzICovCisJc3RydWN0IHZpcnRxdWV1ZSAqKmluX3ZxcywgKipvdXRfdnFzOworCisJLyogVXNlZCBmb3IgbnVtYmVyaW5nIGRldmljZXMgZm9yIHN5c2ZzIGFuZCBkZWJ1Z2ZzICovCisJdW5zaWduZWQgaW50IGRydl9pbmRleDsKKworCS8qIE1ham9yIG51bWJlciBmb3IgdGhpcyBkZXZpY2UuICBQb3J0cyB3aWxsIGJlIGNyZWF0ZWQgYXMgbWlub3JzLiAqLworCWludCBjaHJfbWFqb3I7Cit9OworCisvKiBUaGlzIHN0cnVjdCBob2xkcyB0aGUgcGVyLXBvcnQgZGF0YSAqLworc3RydWN0IHBvcnQgeworCS8qIE5leHQgcG9ydCBpbiB0aGUgbGlzdCwgaGVhZCBpcyBpbiB0aGUgcG9ydHNfZGV2aWNlICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogUG9pbnRlciB0byB0aGUgcGFyZW50IHZpcnRpb19jb25zb2xlIGRldmljZSAqLworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisKKwkvKiBUaGUgY3VycmVudCBidWZmZXIgZnJvbSB3aGljaCBkYXRhIGhhcyB0byBiZSBmZWQgdG8gcmVhZGVycyAqLworCXN0cnVjdCBwb3J0X2J1ZmZlciAqaW5idWY7CisKKwkvKgorCSAqIFRvIHByb3RlY3QgdGhlIG9wZXJhdGlvbnMgb24gdGhlIGluX3ZxIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisJICogcG9ydC4gIEhhcyB0byBiZSBhIHNwaW5sb2NrIGJlY2F1c2UgaXQgY2FuIGJlIGNhbGxlZCBmcm9tCisJICogaW50ZXJydXB0IGNvbnRleHQgKGdldF9jaGFyKCkpLgorCSAqLworCXNwaW5sb2NrX3QgaW5idWZfbG9jazsKKworCS8qIFRoZSBJTyB2cXMgZm9yIHRoaXMgcG9ydCAqLworCXN0cnVjdCB2aXJ0cXVldWUgKmluX3ZxLCAqb3V0X3ZxOworCisJLyogRmlsZSBpbiB0aGUgZGVidWdmcyBkaXJlY3RvcnkgdGhhdCBleHBvc2VzIHRoaXMgcG9ydCdzIGluZm9ybWF0aW9uICovCisJc3RydWN0IGRlbnRyeSAqZGVidWdmc19maWxlOworCisJLyoKKwkgKiBUaGUgZW50cmllcyBpbiB0aGlzIHN0cnVjdCB3aWxsIGJlIHZhbGlkIGlmIHRoaXMgcG9ydCBpcworCSAqIGhvb2tlZCB1cCB0byBhbiBodmMgY29uc29sZQorCSAqLworCXN0cnVjdCBjb25zb2xlIGNvbnM7CisKKwkvKiBFYWNoIHBvcnQgYXNzb2NpYXRlcyB3aXRoIGEgc2VwYXJhdGUgY2hhciBkZXZpY2UgKi8KKwlzdHJ1Y3QgY2RldiBjZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCS8qIEEgd2FpdHF1ZXVlIGZvciBwb2xsKCkgb3IgYmxvY2tpbmcgcmVhZCBvcGVyYXRpb25zICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHF1ZXVlOworCisJLyogVGhlICduYW1lJyBvZiB0aGUgcG9ydCB0aGF0IHdlIGV4cG9zZSB2aWEgc3lzZnMgcHJvcGVydGllcyAqLworCWNoYXIgKm5hbWU7CisKKwkvKiBUaGUgJ2lkJyB0byBpZGVudGlmeSB0aGUgcG9ydCB3aXRoIHRoZSBIb3N0ICovCisJdTMyIGlkOworCisJLyogSXMgdGhlIGhvc3QgZGV2aWNlIG9wZW4gKi8KKwlib29sIGhvc3RfY29ubmVjdGVkOworCisJLyogV2Ugc2hvdWxkIGFsbG93IG9ubHkgb25lIHByb2Nlc3MgdG8gb3BlbiBhIHBvcnQgKi8KKwlib29sIGd1ZXN0X2Nvbm5lY3RlZDsKK307CisKKy8qIFRoaXMgaXMgdGhlIHZlcnkgZWFybHkgYXJjaC1zcGVjaWZpZWQgcHV0IGNoYXJzIGZ1bmN0aW9uLiAqLworc3RhdGljIGludCAoKmVhcmx5X3B1dF9jaGFycykodTMyLCBjb25zdCBjaGFyICosIGludCk7CisKK3N0YXRpYyBzdHJ1Y3QgcG9ydCAqZmluZF9wb3J0X2J5X3Z0ZXJtbm8odTMyIHZ0ZXJtbm8pCiB7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCXN0cnVjdCBwb3J0ICpwb3J0OworCXN0cnVjdCBjb25zb2xlICpjb25zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRydmRhdGFfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ucywgJnBkcnZkYXRhLmNvbnNvbGVzLCBsaXN0KSB7CisJCWlmIChjb25zLT52dGVybW5vID09IHZ0ZXJtbm8pIHsKKwkJCXBvcnQgPSBjb250YWluZXJfb2YoY29ucywgc3RydWN0IHBvcnQsIGNvbnMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJcG9ydCA9IE5VTEw7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRydmRhdGFfbG9jaywgZmxhZ3MpOworCXJldHVybiBwb3J0OworfQorCitzdGF0aWMgc3RydWN0IHBvcnQgKmZpbmRfcG9ydF9ieV9pZChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LCB1MzIgaWQpCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmcG9ydGRldi0+cG9ydHMsIGxpc3QpCisJCWlmIChwb3J0LT5pZCA9PSBpZCkKKwkJCWdvdG8gb3V0OworCXBvcnQgPSBOVUxMOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkZXYtPnBvcnRzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBwb3J0OworfQorCitzdGF0aWMgc3RydWN0IHBvcnQgKmZpbmRfcG9ydF9ieV92cShzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnRkZXYtPnBvcnRzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZwb3J0ZGV2LT5wb3J0cywgbGlzdCkKKwkJaWYgKHBvcnQtPmluX3ZxID09IHZxIHx8IHBvcnQtPm91dF92cSA9PSB2cSkKKwkJCWdvdG8gb3V0OworCXBvcnQgPSBOVUxMOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkZXYtPnBvcnRzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcG9ydDsKK30KKworc3RhdGljIGJvb2wgaXNfY29uc29sZV9wb3J0KHN0cnVjdCBwb3J0ICpwb3J0KQoreworCWlmIChwb3J0LT5jb25zLmh2YykKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgdXNlX211bHRpcG9ydChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2KQoreworCS8qCisJICogVGhpcyBjb25kaXRpb24gY2FuIGJlIHRydWUgd2hlbiBwdXRfY2hhcnMgaXMgY2FsbGVkIGZyb20KKwkgKiBlYXJseV9pbml0CisJICovCisJaWYgKCFwb3J0ZGV2LT52ZGV2KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcG9ydGRldi0+dmRldi0+ZmVhdHVyZXNbMF0gJiAoMSA8PCBWSVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYnVmKHN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmKQoreworCWtmcmVlKGJ1Zi0+YnVmKTsKKwlrZnJlZShidWYpOworfQorCitzdGF0aWMgc3RydWN0IHBvcnRfYnVmZmVyICphbGxvY19idWYoc2l6ZV90IGJ1Zl9zaXplKQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCisJYnVmID0ga21hbGxvYyhzaXplb2YoKmJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIGZhaWw7CisJYnVmLT5idWYgPSBremFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi0+YnVmKQorCQlnb3RvIGZyZWVfYnVmOworCWJ1Zi0+bGVuID0gMDsKKwlidWYtPm9mZnNldCA9IDA7CisJYnVmLT5zaXplID0gYnVmX3NpemU7CisJcmV0dXJuIGJ1ZjsKKworZnJlZV9idWY6CisJa2ZyZWUoYnVmKTsKK2ZhaWw6CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIENhbGxlcnMgc2hvdWxkIHRha2UgYXBwcm9wcmlhdGUgbG9ja3MgKi8KK3N0YXRpYyB2b2lkICpnZXRfaW5idWYoc3RydWN0IHBvcnQgKnBvcnQpCit7CisJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CiAJdW5zaWduZWQgaW50IGxlbjsKIAotCS8qIFRoaXMgaXMgYSBjb252ZW5pZW50IHJvdXRpbmUgdG8gaW5pdGlhbGl6ZSBhIHNpbmdsZS1lbGVtIHNnIGxpc3QgKi8KLQlzZ19pbml0X29uZShzZywgYnVmLCBjb3VudCk7Ci0KLQkvKiBhZGRfYnVmIHdhbnRzIGEgdG9rZW4gdG8gaWRlbnRpZnkgdGhpcyBidWZmZXI6IHdlIGhhbmQgaXQgYW55Ci0JICogbm9uLU5VTEwgcG9pbnRlciwgc2luY2UgdGhlcmUncyBvbmx5IGV2ZXIgb25lIGJ1ZmZlci4gKi8KLQlpZiAob3V0X3ZxLT52cV9vcHMtPmFkZF9idWYob3V0X3ZxLCBzZywgMSwgMCwgKHZvaWQgKikxKSA+PSAwKSB7Ci0JCS8qIFRlbGwgSG9zdCB0byBnbyEgKi8KLQkJb3V0X3ZxLT52cV9vcHMtPmtpY2sob3V0X3ZxKTsKLQkJLyogQ2hpbGwgb3V0IHVudGlsIGl0J3MgZG9uZSB3aXRoIHRoZSBidWZmZXIuICovCi0JCXdoaWxlICghb3V0X3ZxLT52cV9vcHMtPmdldF9idWYob3V0X3ZxLCAmbGVuKSkKLQkJCWNwdV9yZWxheCgpOworCXZxID0gcG9ydC0+aW5fdnE7CisJYnVmID0gdnEtPnZxX29wcy0+Z2V0X2J1Zih2cSwgJmxlbik7CisJaWYgKGJ1ZikgeworCQlidWYtPmxlbiA9IGxlbjsKKwkJYnVmLT5vZmZzZXQgPSAwOwogCX0KLQotCS8qIFdlJ3JlIGV4cGVjdGVkIHRvIHJldHVybiB0aGUgYW1vdW50IG9mIGRhdGEgd2Ugd3JvdGU6IGFsbCBvZiBpdC4gKi8KLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIGJ1ZjsKIH0KIAotLyogQ3JlYXRlIGEgc2NhdHRlci1nYXRoZXIgbGlzdCByZXByZXNlbnRpbmcgb3VyIGlucHV0IGJ1ZmZlciBhbmQgcHV0IGl0IGluIHRoZQotICogcXVldWUuICovCi1zdGF0aWMgdm9pZCBhZGRfaW5idWYodm9pZCkKKy8qCisgKiBDcmVhdGUgYSBzY2F0dGVyLWdhdGhlciBsaXN0IHJlcHJlc2VudGluZyBvdXIgaW5wdXQgYnVmZmVyIGFuZCBwdXQKKyAqIGl0IGluIHRoZSBxdWV1ZS4KKyAqCisgKiBDYWxsZXJzIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGxvY2tzLgorICovCitzdGF0aWMgaW50IGFkZF9pbmJ1ZihzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgc3RydWN0IHBvcnRfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOwotCXNnX2luaXRfb25lKHNnLCBpbmJ1ZiwgUEFHRV9TSVpFKTsKKwlpbnQgcmV0OwogCi0JLyogV2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGFkZCBvbmUgYnVmZmVyIHRvIGFuIGVtcHR5IHF1ZXVlLiAqLwotCWlmIChpbl92cS0+dnFfb3BzLT5hZGRfYnVmKGluX3ZxLCBzZywgMCwgMSwgaW5idWYpIDwgMCkKLQkJQlVHKCk7Ci0JaW5fdnEtPnZxX29wcy0+a2ljayhpbl92cSk7CisJc2dfaW5pdF9vbmUoc2csIGJ1Zi0+YnVmLCBidWYtPnNpemUpOworCisJcmV0ID0gdnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgc2csIDAsIDEsIGJ1Zik7CisJdnEtPnZxX29wcy0+a2ljayh2cSk7CisJcmV0dXJuIHJldDsKIH0KIAotLypEOjM1MCBnZXRfY2hhcnMoKSBpcyB0aGUgY2FsbGJhY2sgZnJvbSB0aGUgaHZjX2NvbnNvbGUgaW5mcmFzdHJ1Y3R1cmUgd2hlbgotICogYW4gaW50ZXJydXB0IGlzIHJlY2VpdmVkLgorLyogRGlzY2FyZCBhbnkgdW5yZWFkIGRhdGEgdGhpcyBwb3J0IGhhcy4gQ2FsbGVycyBsb2NrZXJzLiAqLworc3RhdGljIHZvaWQgZGlzY2FyZF9wb3J0X2RhdGEoc3RydWN0IHBvcnQgKnBvcnQpCit7CisJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CisJdW5zaWduZWQgaW50IGxlbjsKKwlpbnQgcmV0OworCisJdnEgPSBwb3J0LT5pbl92cTsKKwlpZiAocG9ydC0+aW5idWYpCisJCWJ1ZiA9IHBvcnQtPmluYnVmOworCWVsc2UKKwkJYnVmID0gdnEtPnZxX29wcy0+Z2V0X2J1Zih2cSwgJmxlbik7CisKKwlyZXQgPSAwOworCXdoaWxlIChidWYpIHsKKwkJaWYgKGFkZF9pbmJ1Zih2cSwgYnVmKSA8IDApIHsKKwkJCXJldCsrOworCQkJZnJlZV9idWYoYnVmKTsKKwkJfQorCQlidWYgPSB2cS0+dnFfb3BzLT5nZXRfYnVmKHZxLCAmbGVuKTsKKwl9CisJcG9ydC0+aW5idWYgPSBOVUxMOworCWlmIChyZXQpCisJCWRldl93YXJuKHBvcnQtPmRldiwgIkVycm9ycyBhZGRpbmcgJWQgYnVmZmVycyBiYWNrIHRvIHZxXG4iLAorCQkJIHJldCk7Cit9CisKK3N0YXRpYyBib29sIHBvcnRfaGFzX2RhdGEoc3RydWN0IHBvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5pbmJ1Zl9sb2NrLCBmbGFncyk7CisJaWYgKHBvcnQtPmluYnVmKSB7CisJCXJldCA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKwlwb3J0LT5pbmJ1ZiA9IGdldF9pbmJ1Zihwb3J0KTsKKwlpZiAocG9ydC0+aW5idWYpIHsKKwkJcmV0ID0gdHJ1ZTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IGZhbHNlOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmluYnVmX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzZW5kX2NvbnRyb2xfbXNnKHN0cnVjdCBwb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgZXZlbnQsCisJCQkJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKKwlzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29udHJvbCBjcGt0OworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOworCWludCBsZW47CisKKwlpZiAoIXVzZV9tdWx0aXBvcnQocG9ydC0+cG9ydGRldikpCisJCXJldHVybiAwOworCisJY3BrdC5pZCA9IHBvcnQtPmlkOworCWNwa3QuZXZlbnQgPSBldmVudDsKKwljcGt0LnZhbHVlID0gdmFsdWU7CisKKwl2cSA9IHBvcnQtPnBvcnRkZXYtPmNfb3ZxOworCisJc2dfaW5pdF9vbmUoc2csICZjcGt0LCBzaXplb2YoY3BrdCkpOworCWlmICh2cS0+dnFfb3BzLT5hZGRfYnVmKHZxLCBzZywgMSwgMCwgJmNwa3QpID49IDApIHsKKwkJdnEtPnZxX29wcy0+a2ljayh2cSk7CisJCXdoaWxlICghdnEtPnZxX29wcy0+Z2V0X2J1Zih2cSwgJmxlbikpCisJCQljcHVfcmVsYXgoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNlbmRfYnVmKHN0cnVjdCBwb3J0ICpwb3J0LCB2b2lkICppbl9idWYsIHNpemVfdCBpbl9jb3VudCkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJc3RydWN0IHZpcnRxdWV1ZSAqb3V0X3ZxOworCXNzaXplX3QgcmV0OworCXVuc2lnbmVkIGludCBsZW47CisKKwlvdXRfdnEgPSBwb3J0LT5vdXRfdnE7CisKKwlzZ19pbml0X29uZShzZywgaW5fYnVmLCBpbl9jb3VudCk7CisJcmV0ID0gb3V0X3ZxLT52cV9vcHMtPmFkZF9idWYob3V0X3ZxLCBzZywgMSwgMCwgaW5fYnVmKTsKKworCS8qIFRlbGwgSG9zdCB0byBnbyEgKi8KKwlvdXRfdnEtPnZxX29wcy0+a2ljayhvdXRfdnEpOworCisJaWYgKHJldCA8IDApIHsKKwkJbGVuID0gMDsKKwkJZ290byBmYWlsOworCX0KKworCS8qCisJICogV2FpdCB0aWxsIHRoZSBob3N0IGFja25vd2xlZGdlcyBpdCBwdXNoZWQgb3V0IHRoZSBkYXRhIHdlCisJICogc2VudC4gQWxzbyBlbnN1cmUgd2UgcmV0dXJuIHRvIHVzZXJzcGFjZSB0aGUgbnVtYmVyIG9mCisJICogYnl0ZXMgdGhhdCB3ZXJlIHN1Y2Nlc3NmdWxseSBjb25zdW1lZCBieSB0aGUgaG9zdC4KKwkgKi8KKwl3aGlsZSAoIW91dF92cS0+dnFfb3BzLT5nZXRfYnVmKG91dF92cSwgJmxlbikpCisJCWNwdV9yZWxheCgpOworZmFpbDoKKwkvKiBXZSdyZSBleHBlY3RlZCB0byByZXR1cm4gdGhlIGFtb3VudCBvZiBkYXRhIHdlIHdyb3RlICovCisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIEdpdmUgb3V0IHRoZSBkYXRhIHRoYXQncyByZXF1ZXN0ZWQgZnJvbSB0aGUgYnVmZmVyIHRoYXQgd2UgaGF2ZQorICogcXVldWVkIHVwLgorICovCitzdGF0aWMgc3NpemVfdCBmaWxsX3JlYWRidWYoc3RydWN0IHBvcnQgKnBvcnQsIGNoYXIgKm91dF9idWYsIHNpemVfdCBvdXRfY291bnQsCisJCQkgICAgYm9vbCB0b191c2VyKQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW91dF9jb3VudCB8fCAhcG9ydF9oYXNfZGF0YShwb3J0KSkKKwkJcmV0dXJuIDA7CisKKwlidWYgPSBwb3J0LT5pbmJ1ZjsKKwlvdXRfY291bnQgPSBtaW4ob3V0X2NvdW50LCBidWYtPmxlbiAtIGJ1Zi0+b2Zmc2V0KTsKKworCWlmICh0b191c2VyKSB7CisJCXNzaXplX3QgcmV0OworCisJCXJldCA9IGNvcHlfdG9fdXNlcihvdXRfYnVmLCBidWYtPmJ1ZiArIGJ1Zi0+b2Zmc2V0LCBvdXRfY291bnQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJbWVtY3B5KG91dF9idWYsIGJ1Zi0+YnVmICsgYnVmLT5vZmZzZXQsIG91dF9jb3VudCk7CisJfQorCisJYnVmLT5vZmZzZXQgKz0gb3V0X2NvdW50OworCisJaWYgKGJ1Zi0+b2Zmc2V0ID09IGJ1Zi0+bGVuKSB7CisJCS8qCisJCSAqIFdlJ3JlIGRvbmUgdXNpbmcgYWxsIHRoZSBkYXRhIGluIHRoaXMgYnVmZmVyLgorCQkgKiBSZS1xdWV1ZSBzbyB0aGF0IHRoZSBIb3N0IGNhbiBzZW5kIHVzIG1vcmUgZGF0YS4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5pbmJ1Zl9sb2NrLCBmbGFncyk7CisJCXBvcnQtPmluYnVmID0gTlVMTDsKKworCQlpZiAoYWRkX2luYnVmKHBvcnQtPmluX3ZxLCBidWYpIDwgMCkKKwkJCWRldl93YXJuKHBvcnQtPmRldiwgImZhaWxlZCBhZGRfYnVmXG4iKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5pbmJ1Zl9sb2NrLCBmbGFncyk7CisJfQorCS8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IGNvcGllZCAqLworCXJldHVybiBvdXRfY291bnQ7Cit9CisKKy8qIFRoZSBjb25kaXRpb24gdGhhdCBtdXN0IGJlIHRydWUgZm9yIHBvbGxpbmcgdG8gZW5kICovCitzdGF0aWMgYm9vbCB3YWl0X2lzX292ZXIoc3RydWN0IHBvcnQgKnBvcnQpCit7CisJcmV0dXJuIHBvcnRfaGFzX2RhdGEocG9ydCkgfHwgIXBvcnQtPmhvc3RfY29ubmVjdGVkOworfQorCitzdGF0aWMgc3NpemVfdCBwb3J0X2ZvcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwlzc2l6ZV90IHJldDsKKworCXBvcnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIXBvcnRfaGFzX2RhdGEocG9ydCkpIHsKKwkJLyoKKwkJICogSWYgbm90aGluZydzIGNvbm5lY3RlZCBvbiB0aGUgaG9zdCBqdXN0IHJldHVybiAwIGluCisJCSAqIGNhc2Ugb2YgbGlzdF9lbXB0eTsgdGhpcyB0ZWxscyB0aGUgdXNlcnNwYWNlIGFwcAorCQkgKiB0aGF0IHRoZXJlJ3Mgbm8gY29ubmVjdGlvbgorCQkgKi8KKwkJaWYgKCFwb3J0LT5ob3N0X2Nvbm5lY3RlZCkKKwkJCXJldHVybiAwOworCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocG9ydC0+d2FpdHF1ZXVlLAorCQkJCQkgICAgICAgd2FpdF9pc19vdmVyKHBvcnQpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwkvKgorCSAqIFdlIGNvdWxkJ3ZlIHJlY2VpdmVkIGEgZGlzY29ubmVjdGlvbiBtZXNzYWdlIHdoaWxlIHdlIHdlcmUKKwkgKiB3YWl0aW5nIGZvciBtb3JlIGRhdGEuCisJICoKKwkgKiBUaGlzIGNoZWNrIGlzIG5vdCBjbHViYmVkIGluIHRoZSBpZigpIHN0YXRlbWVudCBhYm92ZSBhcyB3ZQorCSAqIG1pZ2h0IHJlY2VpdmUgc29tZSBkYXRhIGFzIHdlbGwgYXMgdGhlIGhvc3QgY291bGQgZ2V0CisJICogZGlzY29ubmVjdGVkIGFmdGVyIHdlIGdvdCB3b2tlbiB1cCBmcm9tIG91ciB3YWl0LiAgU28gd2UKKwkgKiByZWFsbHkgd2FudCB0byBnaXZlIG9mZiB3aGF0ZXZlciBkYXRhIHdlIGhhdmUgYW5kIG9ubHkgdGhlbgorCSAqIGNoZWNrIGZvciBob3N0X2Nvbm5lY3RlZC4KKwkgKi8KKwlpZiAoIXBvcnRfaGFzX2RhdGEocG9ydCkgJiYgIXBvcnQtPmhvc3RfY29ubmVjdGVkKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBmaWxsX3JlYWRidWYocG9ydCwgdWJ1ZiwgY291bnQsIHRydWUpOworfQorCitzdGF0aWMgc3NpemVfdCBwb3J0X2ZvcHNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZwKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCWNoYXIgKmJ1ZjsKKwlzc2l6ZV90IHJldDsKKworCXBvcnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwljb3VudCA9IG1pbigoc2l6ZV90KSgzMiAqIDEwMjQpLCBjb3VudCk7CisKKwlidWYgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihidWYsIHVidWYsIGNvdW50KTsKKwlpZiAocmV0KSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZnJlZV9idWY7CisJfQorCisJcmV0ID0gc2VuZF9idWYocG9ydCwgYnVmLCBjb3VudCk7CitmcmVlX2J1ZjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9ydF9mb3BzX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJdW5zaWduZWQgaW50IHJldDsKKworCXBvcnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJcG9sbF93YWl0KGZpbHAsICZwb3J0LT53YWl0cXVldWUsIHdhaXQpOworCisJcmV0ID0gMDsKKwlpZiAocG9ydC0+aW5idWYpCisJCXJldCB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCWlmIChwb3J0LT5ob3N0X2Nvbm5lY3RlZCkKKwkJcmV0IHw9IFBPTExPVVQ7CisJaWYgKCFwb3J0LT5ob3N0X2Nvbm5lY3RlZCkKKwkJcmV0IHw9IFBPTExIVVA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvcnRfZm9wc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCS8qIE5vdGlmeSBob3N0IG9mIHBvcnQgYmVpbmcgY2xvc2VkICovCisJc2VuZF9jb250cm9sX21zZyhwb3J0LCBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU4sIDApOworCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisJcG9ydC0+Z3Vlc3RfY29ubmVjdGVkID0gZmFsc2U7CisKKwlkaXNjYXJkX3BvcnRfZGF0YShwb3J0KTsKKworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb3J0X2ZvcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2RldiAqY2RldiA9IGlub2RlLT5pX2NkZXY7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisKKwlwb3J0ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBwb3J0LCBjZGV2KTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBwb3J0OworCisJLyoKKwkgKiBEb24ndCBhbGxvdyBvcGVuaW5nIG9mIGNvbnNvbGUgcG9ydCBkZXZpY2VzIC0tIHRoYXQncyBkb25lCisJICogdmlhIC9kZXYvaHZjCisJICovCisJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIEFsbG93IG9ubHkgb25lIHByb2Nlc3MgdG8gb3BlbiBhIHBhcnRpY3VsYXIgcG9ydCBhdCBhIHRpbWUgKi8KKwlzcGluX2xvY2tfaXJxKCZwb3J0LT5pbmJ1Zl9sb2NrKTsKKwlpZiAocG9ydC0+Z3Vlc3RfY29ubmVjdGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisJCXJldHVybiAtRU1GSUxFOworCX0KKworCXBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5pbmJ1Zl9sb2NrKTsKKworCS8qIE5vdGlmeSBob3N0IG9mIHBvcnQgYmVpbmcgb3BlbmVkICovCisJc2VuZF9jb250cm9sX21zZyhmaWxwLT5wcml2YXRlX2RhdGEsIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBmaWxlIG9wZXJhdGlvbnMgdGhhdCB3ZSBzdXBwb3J0OiBwcm9ncmFtcyBpbiB0aGUgZ3Vlc3QgY2FuIG9wZW4KKyAqIGEgY29uc29sZSBkZXZpY2UsIHJlYWQgZnJvbSBpdCwgd3JpdGUgdG8gaXQsIHBvbGwgZm9yIGRhdGEgYW5kCisgKiBjbG9zZSBpdC4gIFRoZSBkZXZpY2VzIGFyZSBhdAorICogICAvZGV2L3Zwb3J0PGRldmljZSBudW1iZXI+cDxwb3J0IG51bWJlcj4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9ydF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuICA9IHBvcnRfZm9wc19vcGVuLAorCS5yZWFkICA9IHBvcnRfZm9wc19yZWFkLAorCS53cml0ZSA9IHBvcnRfZm9wc193cml0ZSwKKwkucG9sbCAgPSBwb3J0X2ZvcHNfcG9sbCwKKwkucmVsZWFzZSA9IHBvcnRfZm9wc19yZWxlYXNlLAorfTsKKworLyoKKyAqIFRoZSBwdXRfY2hhcnMoKSBjYWxsYmFjayBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLgogICoKLSAqIE1vc3Qgb2YgdGhlIGNvZGUgZGVhbHMgd2l0aCB0aGUgZmFjdCB0aGF0IHRoZSBodmNfY29uc29sZSgpIGluZnJhc3RydWN0dXJlCi0gKiBvbmx5IGFza3MgdXMgZm9yIDE2IGJ5dGVzIGF0IGEgdGltZS4gIFdlIGtlZXAgaW5fb2Zmc2V0IGFuZCBpbl91c2VkIGZpZWxkcwotICogZm9yIHBhcnRpYWxseS1maWxsZWQgYnVmZmVycy4gKi8KKyAqIFdlIHR1cm4gdGhlIGNoYXJhY3RlcnMgaW50byBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsIGFkZCBpdCB0byB0aGUKKyAqIG91dHB1dCBxdWV1ZSBhbmQgdGhlbiBraWNrIHRoZSBIb3N0LiAgVGhlbiB3ZSBzaXQgaGVyZSB3YWl0aW5nIGZvcgorICogaXQgdG8gZmluaXNoOiBpbmVmZmljaWVudCBpbiB0aGVvcnksIGJ1dCBpbiBwcmFjdGljZQorICogaW1wbGVtZW50YXRpb25zIHdpbGwgZG8gaXQgaW1tZWRpYXRlbHkgKGxndWVzdCdzIExhdW5jaGVyIGRvZXMpLgorICovCitzdGF0aWMgaW50IHB1dF9jaGFycyh1MzIgdnRlcm1ubywgY29uc3QgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X3Z0ZXJtbm8odnRlcm1ubyk7CisJaWYgKCFwb3J0KQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseShlYXJseV9wdXRfY2hhcnMpKQorCQlyZXR1cm4gZWFybHlfcHV0X2NoYXJzKHZ0ZXJtbm8sIGJ1ZiwgY291bnQpOworCisJcmV0dXJuIHNlbmRfYnVmKHBvcnQsICh2b2lkICopYnVmLCBjb3VudCk7Cit9CisKKy8qCisgKiBnZXRfY2hhcnMoKSBpcyB0aGUgY2FsbGJhY2sgZnJvbSB0aGUgaHZjX2NvbnNvbGUgaW5mcmFzdHJ1Y3R1cmUKKyAqIHdoZW4gYW4gaW50ZXJydXB0IGlzIHJlY2VpdmVkLgorICoKKyAqIFdlIGNhbGwgb3V0IHRvIGZpbGxfcmVhZGJ1ZiB0aGF0IGdldHMgdXMgdGhlIHJlcXVpcmVkIGRhdGEgZnJvbSB0aGUKKyAqIGJ1ZmZlcnMgdGhhdCBhcmUgcXVldWVkIHVwLgorICovCiBzdGF0aWMgaW50IGdldF9jaGFycyh1MzIgdnRlcm1ubywgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X3Z0ZXJtbm8odnRlcm1ubyk7CisJaWYgKCFwb3J0KQorCQlyZXR1cm4gMDsKKwogCS8qIElmIHdlIGRvbid0IGhhdmUgYW4gaW5wdXQgcXVldWUgeWV0LCB3ZSBjYW4ndCBnZXQgaW5wdXQuICovCi0JQlVHX09OKCFpbl92cSk7CisJQlVHX09OKCFwb3J0LT5pbl92cSk7CiAKLQkvKiBObyBidWZmZXI/ICBUcnkgdG8gZ2V0IG9uZS4gKi8KLQlpZiAoIWluX2xlbikgewotCQlpbiA9IGluX3ZxLT52cV9vcHMtPmdldF9idWYoaW5fdnEsICZpbl9sZW4pOwotCQlpZiAoIWluKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogWW91IHdhbnQgbW9yZSB0aGFuIHdlIGhhdmUgdG8gZ2l2ZT8gIFdlbGwsIHRyeSB3YW50aW5nIGxlc3MhICovCi0JaWYgKGluX2xlbiA8IGNvdW50KQotCQljb3VudCA9IGluX2xlbjsKLQotCS8qIENvcHkgYWNyb3NzIHRvIHRoZWlyIGJ1ZmZlciBhbmQgaW5jcmVtZW50IG9mZnNldC4gKi8KLQltZW1jcHkoYnVmLCBpbiwgY291bnQpOwotCWluICs9IGNvdW50OwotCWluX2xlbiAtPSBjb3VudDsKLQotCS8qIEZpbmlzaGVkPyAgUmUtcmVnaXN0ZXIgYnVmZmVyIHNvIEhvc3Qgd2lsbCB1c2UgaXQgYWdhaW4uICovCi0JaWYgKGluX2xlbiA9PSAwKQotCQlhZGRfaW5idWYoKTsKLQotCXJldHVybiBjb3VudDsKLX0KLS8qOiovCi0KLS8qRDozMjAgQ29uc29sZSBkcml2ZXJzIGFyZSBpbml0aWFsaXplZCB2ZXJ5IGVhcmx5IHNvIGJvb3QgbWVzc2FnZXMgY2FuIGdvIG91dCwKLSAqIHNvIHdlIGRvIHRoaW5ncyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBnZW5lcmljIHZpcnRpbyBpbml0aWFsaXphdGlvbgotICogb2YgdGhlIG5ldCBhbmQgYmxvY2sgZHJpdmVycy4KLSAqCi0gKiBBdCB0aGlzIHN0YWdlLCB0aGUgY29uc29sZSBpcyBvdXRwdXQtb25seS4gIEl0J3MgdG9vIGVhcmx5IHRvIHNldCB1cCBhCi0gKiB2aXJ0cXVldWUsIHNvIHdlIGxldCB0aGUgZHJpdmVycyBkbyBzb21lIGJvdXRpcXVlIGVhcmx5LW91dHB1dCB0aGluZy4gKi8KLWludCBfX2luaXQgdmlydGlvX2NvbnNfZWFybHlfaW5pdChpbnQgKCpwdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpKQotewotCXZpcnRpb19jb25zLnB1dF9jaGFycyA9IHB1dF9jaGFyczsKLQlyZXR1cm4gaHZjX2luc3RhbnRpYXRlKDAsIDAsICZ2aXJ0aW9fY29ucyk7CisJcmV0dXJuIGZpbGxfcmVhZGJ1Zihwb3J0LCBidWYsIGNvdW50LCBmYWxzZSk7CiB9CiAKLS8qCi0gKiB2aXJ0aW8gY29uc29sZSBjb25maWd1cmF0aW9uLiBUaGlzIHN1cHBvcnRzOgotICogLSBjb25zb2xlIHJlc2l6ZQotICovCi1zdGF0aWMgdm9pZCB2aXJ0Y29uc19hcHBseV9jb25maWcoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHJlc2l6ZV9jb25zb2xlKHN0cnVjdCBwb3J0ICpwb3J0KQogeworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2OwogCXN0cnVjdCB3aW5zaXplIHdzOwogCi0JaWYgKHZpcnRpb19oYXNfZmVhdHVyZShkZXYsIFZJUlRJT19DT05TT0xFX0ZfU0laRSkpIHsKLQkJZGV2LT5jb25maWctPmdldChkZXYsCi0JCQkJIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsIGNvbHMpLAotCQkJCSAmd3Mud3NfY29sLCBzaXplb2YodTE2KSk7Ci0JCWRldi0+Y29uZmlnLT5nZXQoZGV2LAotCQkJCSBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLCByb3dzKSwKLQkJCQkgJndzLndzX3Jvdywgc2l6ZW9mKHUxNikpOwotCQlodmNfcmVzaXplKGh2Yywgd3MpOworCXZkZXYgPSBwb3J0LT5wb3J0ZGV2LT52ZGV2OworCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0NPTlNPTEVfRl9TSVpFKSkgeworCQl2ZGV2LT5jb25maWctPmdldCh2ZGV2LAorCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgY29scyksCisJCQkJICAmd3Mud3NfY29sLCBzaXplb2YodTE2KSk7CisJCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsCisJCQkJICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLCByb3dzKSwKKwkJCQkgICZ3cy53c19yb3csIHNpemVvZih1MTYpKTsKKwkJaHZjX3Jlc2l6ZShwb3J0LT5jb25zLmh2Yywgd3MpOwogCX0KIH0KIAotLyoKLSAqIHdlIHN1cHBvcnQgb25seSBvbmUgY29uc29sZSwgdGhlIGh2YyBzdHJ1Y3QgaXMgYSBnbG9iYWwgdmFyCi0gKiBXZSBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gYXQgdGhpcyBwb2ludCwgc2luY2Ugd2Ugbm93IGhhdmUgYSB0dHkKLSAqLworLyogV2Ugc2V0IHRoZSBjb25maWd1cmF0aW9uIGF0IHRoaXMgcG9pbnQsIHNpbmNlIHdlIG5vdyBoYXZlIGEgdHR5ICovCiBzdGF0aWMgaW50IG5vdGlmaWVyX2FkZF92aW8oc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBpbnQgZGF0YSkKIHsKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCXBvcnQgPSBmaW5kX3BvcnRfYnlfdnRlcm1ubyhocC0+dnRlcm1ubyk7CisJaWYgKCFwb3J0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWhwLT5pcnFfcmVxdWVzdGVkID0gMTsKLQl2aXJ0Y29uc19hcHBseV9jb25maWcodmRldik7CisJcmVzaXplX2NvbnNvbGUocG9ydCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3Myw3OSArNzEzLDc5NyBAQAogCWhwLT5pcnFfcmVxdWVzdGVkID0gMDsKIH0KIAotc3RhdGljIHZvaWQgaHZjX2hhbmRsZV9pbnB1dChzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKKy8qIFRoZSBvcGVyYXRpb25zIGZvciBjb25zb2xlIHBvcnRzLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZfb3BzID0geworCS5nZXRfY2hhcnMgPSBnZXRfY2hhcnMsCisJLnB1dF9jaGFycyA9IHB1dF9jaGFycywKKwkubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX3ZpbywKKwkubm90aWZpZXJfZGVsID0gbm90aWZpZXJfZGVsX3ZpbywKKwkubm90aWZpZXJfaGFuZ3VwID0gbm90aWZpZXJfZGVsX3ZpbywKK307CisKKy8qCisgKiBDb25zb2xlIGRyaXZlcnMgYXJlIGluaXRpYWxpemVkIHZlcnkgZWFybHkgc28gYm9vdCBtZXNzYWdlcyBjYW4gZ28KKyAqIG91dCwgc28gd2UgZG8gdGhpbmdzIHNsaWdodGx5IGRpZmZlcmVudGx5IGZyb20gdGhlIGdlbmVyaWMgdmlydGlvCisgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgbmV0IGFuZCBibG9jayBkcml2ZXJzLgorICoKKyAqIEF0IHRoaXMgc3RhZ2UsIHRoZSBjb25zb2xlIGlzIG91dHB1dC1vbmx5LiAgSXQncyB0b28gZWFybHkgdG8gc2V0CisgKiB1cCBhIHZpcnRxdWV1ZSwgc28gd2UgbGV0IHRoZSBkcml2ZXJzIGRvIHNvbWUgYm91dGlxdWUgZWFybHktb3V0cHV0CisgKiB0aGluZy4KKyAqLworaW50IF9faW5pdCB2aXJ0aW9fY29uc19lYXJseV9pbml0KGludCAoKnB1dF9jaGFycykodTMyLCBjb25zdCBjaGFyICosIGludCkpCiB7Ci0JaWYgKGh2Y19wb2xsKGh2YykpCisJZWFybHlfcHV0X2NoYXJzID0gcHV0X2NoYXJzOworCXJldHVybiBodmNfaW5zdGFudGlhdGUoMCwgMCwgJmh2X29wcyk7Cit9CisKK2ludCBpbml0X3BvcnRfY29uc29sZShzdHJ1Y3QgcG9ydCAqcG9ydCkKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBUaGUgSG9zdCdzIHRlbGxpbmcgdXMgdGhpcyBwb3J0IGlzIGEgY29uc29sZSBwb3J0LiAgSG9vayBpdAorCSAqIHVwIHdpdGggYW4gaHZjIGNvbnNvbGUuCisJICoKKwkgKiBUbyBzZXQgdXAgYW5kIG1hbmFnZSBvdXIgdmlydHVhbCBjb25zb2xlLCB3ZSBjYWxsCisJICogaHZjX2FsbG9jKCkuCisJICoKKwkgKiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgaHZjX2FsbG9jKCkgaXMgdGhlIHZpcnR1YWwgY29uc29sZQorCSAqIG51bWJlci4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlCisJICogbm90aWZpY2F0aW9uIG1lY2hhbmlzbSAobGlrZSBpcnEgbnVtYmVyKS4gIFdlIGN1cnJlbnRseQorCSAqIGxlYXZlIHRoaXMgYXMgemVybywgdmlydHF1ZXVlcyBoYXZlIGltcGxpY2l0IG5vdGlmaWNhdGlvbnMuCisJICoKKwkgKiBUaGUgdGhpcmQgYXJndW1lbnQgaXMgYSAic3RydWN0IGh2X29wcyIgY29udGFpbmluZyB0aGUKKwkgKiBwdXRfY2hhcnMoKSBnZXRfY2hhcnMoKSwgbm90aWZpZXJfYWRkKCkgYW5kIG5vdGlmaWVyX2RlbCgpCisJICogcG9pbnRlcnMuICBUaGUgZmluYWwgYXJndW1lbnQgaXMgdGhlIG91dHB1dCBidWZmZXIgc2l6ZTogd2UKKwkgKiBjYW4gZG8gYW55IHNpemUsIHNvIHdlIHB1dCBQQUdFX1NJWkUgaGVyZS4KKwkgKi8KKwlwb3J0LT5jb25zLnZ0ZXJtbm8gPSBwZHJ2ZGF0YS5uZXh0X3Z0ZXJtbm87CisKKwlwb3J0LT5jb25zLmh2YyA9IGh2Y19hbGxvYyhwb3J0LT5jb25zLnZ0ZXJtbm8sIDAsICZodl9vcHMsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihwb3J0LT5jb25zLmh2YykpIHsKKwkJcmV0ID0gUFRSX0VSUihwb3J0LT5jb25zLmh2Yyk7CisJCWRldl9lcnIocG9ydC0+ZGV2LAorCQkJImVycm9yICVkIGFsbG9jYXRpbmcgaHZjIGZvciBwb3J0XG4iLCByZXQpOworCQlwb3J0LT5jb25zLmh2YyA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCXNwaW5fbG9ja19pcnEoJnBkcnZkYXRhX2xvY2spOworCXBkcnZkYXRhLm5leHRfdnRlcm1ubysrOworCWxpc3RfYWRkX3RhaWwoJnBvcnQtPmNvbnMubGlzdCwgJnBkcnZkYXRhLmNvbnNvbGVzKTsKKwlzcGluX3VubG9ja19pcnEoJnBkcnZkYXRhX2xvY2spOworCXBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCA9IHRydWU7CisKKwkvKiBOb3RpZnkgaG9zdCBvZiBwb3J0IGJlaW5nIG9wZW5lZCAqLworCXNlbmRfY29udHJvbF9tc2cocG9ydCwgVklSVElPX0NPTlNPTEVfUE9SVF9PUEVOLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3BvcnRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJXNcbiIsIHBvcnQtPm5hbWUpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19wb3J0X25hbWUsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG9ydF9zeXNmc19lbnRyaWVzW10gPSB7CisJJmRldl9hdHRyX25hbWUuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwb3J0X2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkubmFtZSA9IE5VTEwsCQkvKiBwdXQgaW4gZGV2aWNlIGRpcmVjdG9yeSAqLworCS5hdHRycyA9IHBvcnRfc3lzZnNfZW50cmllcywKK307CisKK3N0YXRpYyBpbnQgZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRlYnVnZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJY2hhciAqYnVmOworCXNzaXplX3QgcmV0LCBvdXRfb2Zmc2V0LCBvdXRfY291bnQ7CisKKwlvdXRfY291bnQgPSAxMDI0OworCWJ1ZiA9IGttYWxsb2Mob3V0X2NvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCW91dF9vZmZzZXQgPSAwOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50LAorCQkJICAgICAgICJuYW1lOiAlc1xuIiwgcG9ydC0+bmFtZSA/IHBvcnQtPm5hbWUgOiAiIik7CisJb3V0X29mZnNldCArPSBzbnByaW50ZihidWYgKyBvdXRfb2Zmc2V0LCBvdXRfY291bnQgLSBvdXRfb2Zmc2V0LAorCQkJICAgICAgICJndWVzdF9jb25uZWN0ZWQ6ICVkXG4iLCBwb3J0LT5ndWVzdF9jb25uZWN0ZWQpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiaG9zdF9jb25uZWN0ZWQ6ICVkXG4iLCBwb3J0LT5ob3N0X2Nvbm5lY3RlZCk7CisJb3V0X29mZnNldCArPSBzbnByaW50ZihidWYgKyBvdXRfb2Zmc2V0LCBvdXRfY291bnQgLSBvdXRfb2Zmc2V0LAorCQkJICAgICAgICJpc19jb25zb2xlOiAlc1xuIiwKKwkJCSAgICAgICBpc19jb25zb2xlX3BvcnQocG9ydCkgPyAieWVzIiA6ICJubyIpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiY29uc29sZV92dGVybW5vOiAldVxuIiwgcG9ydC0+Y29ucy52dGVybW5vKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBvZmZwLCBidWYsIG91dF9vZmZzZXQpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9ydF9kZWJ1Z2ZzX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgPSBkZWJ1Z2ZzX29wZW4sCisJLnJlYWQgID0gZGVidWdmc19yZWFkLAorfTsKKworLyogUmVtb3ZlIGFsbCBwb3J0LXNwZWNpZmljIGRhdGEuICovCitzdGF0aWMgaW50IHJlbW92ZV9wb3J0KHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+cG9ydGRldi0+cG9ydHNfbG9jayk7CisJbGlzdF9kZWwoJnBvcnQtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+cG9ydGRldi0+cG9ydHNfbG9jayk7CisKKwlpZiAoaXNfY29uc29sZV9wb3J0KHBvcnQpKSB7CisJCXNwaW5fbG9ja19pcnEoJnBkcnZkYXRhX2xvY2spOworCQlsaXN0X2RlbCgmcG9ydC0+Y29ucy5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwkJaHZjX3JlbW92ZShwb3J0LT5jb25zLmh2Yyk7CisJfQorCWlmIChwb3J0LT5ndWVzdF9jb25uZWN0ZWQpCisJCXNlbmRfY29udHJvbF9tc2cocG9ydCwgVklSVElPX0NPTlNPTEVfUE9SVF9PUEVOLCAwKTsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcG9ydC0+ZGV2LT5rb2JqLCAmcG9ydF9hdHRyaWJ1dGVfZ3JvdXApOworCWRldmljZV9kZXN0cm95KHBkcnZkYXRhLmNsYXNzLCBwb3J0LT5kZXYtPmRldnQpOworCWNkZXZfZGVsKCZwb3J0LT5jZGV2KTsKKworCS8qIFJlbW92ZSB1bnVzZWQgZGF0YSB0aGlzIHBvcnQgbWlnaHQgaGF2ZSByZWNlaXZlZC4gKi8KKwlkaXNjYXJkX3BvcnRfZGF0YShwb3J0KTsKKworCS8qIFJlbW92ZSBidWZmZXJzIHdlIHF1ZXVlZCB1cCBmb3IgdGhlIEhvc3QgdG8gc2VuZCB1cyBkYXRhIGluLiAqLworCXdoaWxlICgoYnVmID0gcG9ydC0+aW5fdnEtPnZxX29wcy0+ZGV0YWNoX3VudXNlZF9idWYocG9ydC0+aW5fdnEpKSkKKwkJZnJlZV9idWYoYnVmKTsKKworCWtmcmVlKHBvcnQtPm5hbWUpOworCisJZGVidWdmc19yZW1vdmUocG9ydC0+ZGVidWdmc19maWxlKTsKKworCWtmcmVlKHBvcnQpOworCXJldHVybiAwOworfQorCisvKiBBbnkgcHJpdmF0ZSBtZXNzYWdlcyB0aGF0IHRoZSBIb3N0IGFuZCBHdWVzdCB3YW50IHRvIHNoYXJlICovCitzdGF0aWMgdm9pZCBoYW5kbGVfY29udHJvbF9tZXNzYWdlKHN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXYsCisJCQkJICAgc3RydWN0IHBvcnRfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgKmNwa3Q7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJc2l6ZV90IG5hbWVfc2l6ZTsKKwlpbnQgZXJyOworCisJY3BrdCA9IChzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29udHJvbCAqKShidWYtPmJ1ZiArIGJ1Zi0+b2Zmc2V0KTsKKworCXBvcnQgPSBmaW5kX3BvcnRfYnlfaWQocG9ydGRldiwgY3BrdC0+aWQpOworCWlmICghcG9ydCkgeworCQkvKiBObyB2YWxpZCBoZWFkZXIgYXQgc3RhcnQgb2YgYnVmZmVyLiAgRHJvcCBpdC4gKi8KKwkJZGV2X2RiZygmcG9ydGRldi0+dmRldi0+ZGV2LAorCQkJIkludmFsaWQgaW5kZXggJXUgaW4gY29udHJvbCBwYWNrZXRcbiIsIGNwa3QtPmlkKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoY3BrdC0+ZXZlbnQpIHsKKwljYXNlIFZJUlRJT19DT05TT0xFX0NPTlNPTEVfUE9SVDoKKwkJaWYgKCFjcGt0LT52YWx1ZSkKKwkJCWJyZWFrOworCQlpZiAoaXNfY29uc29sZV9wb3J0KHBvcnQpKQorCQkJYnJlYWs7CisKKwkJaW5pdF9wb3J0X2NvbnNvbGUocG9ydCk7CisJCS8qCisJCSAqIENvdWxkIHJlbW92ZSB0aGUgcG9ydCBoZXJlIGluIGNhc2UgaW5pdCBmYWlscyAtIGJ1dAorCQkgKiBoYXZlIHRvIG5vdGlmeSB0aGUgaG9zdCBmaXJzdC4KKwkJICovCisJCWJyZWFrOworCWNhc2UgVklSVElPX0NPTlNPTEVfUkVTSVpFOgorCQlpZiAoIWlzX2NvbnNvbGVfcG9ydChwb3J0KSkKKwkJCWJyZWFrOworCQlwb3J0LT5jb25zLmh2Yy0+aXJxX3JlcXVlc3RlZCA9IDE7CisJCXJlc2l6ZV9jb25zb2xlKHBvcnQpOworCQlicmVhazsKKwljYXNlIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTjoKKwkJcG9ydC0+aG9zdF9jb25uZWN0ZWQgPSBjcGt0LT52YWx1ZTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT53YWl0cXVldWUpOworCQlicmVhazsKKwljYXNlIFZJUlRJT19DT05TT0xFX1BPUlRfTkFNRToKKwkJLyoKKwkJICogU2tpcCB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGFuZCB0aGUgY3BrdCB0byBnZXQgdGhlIHNpemUKKwkJICogb2YgdGhlIG5hbWUgdGhhdCB3YXMgc2VudAorCQkgKi8KKwkJbmFtZV9zaXplID0gYnVmLT5sZW4gLSBidWYtPm9mZnNldCAtIHNpemVvZigqY3BrdCkgKyAxOworCisJCXBvcnQtPm5hbWUgPSBrbWFsbG9jKG5hbWVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcG9ydC0+bmFtZSkgeworCQkJZGV2X2Vycihwb3J0LT5kZXYsCisJCQkJIk5vdCBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgcG9ydCBuYW1lXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXN0cm5jcHkocG9ydC0+bmFtZSwgYnVmLT5idWYgKyBidWYtPm9mZnNldCArIHNpemVvZigqY3BrdCksCisJCQluYW1lX3NpemUgLSAxKTsKKwkJcG9ydC0+bmFtZVtuYW1lX3NpemUgLSAxXSA9IDA7CisKKwkJLyoKKwkJICogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBzeXNmcyBhdHRyaWJ1dGUsICduYW1lJywKKwkJICogY3JlYXRlIGl0IG9ubHkgaWYgd2UgaGF2ZSBhIG5hbWUgZm9yIHRoZSBwb3J0LgorCQkgKi8KKwkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwb3J0LT5kZXYtPmtvYmosCisJCQkJCSAmcG9ydF9hdHRyaWJ1dGVfZ3JvdXApOworCQlpZiAoZXJyKQorCQkJZGV2X2Vycihwb3J0LT5kZXYsCisJCQkJIkVycm9yICVkIGNyZWF0aW5nIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iLAorCQkJCWVycik7CisKKwkJYnJlYWs7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9QT1JUX1JFTU9WRToKKwkJLyoKKwkJICogSG90IHVucGx1ZyB0aGUgcG9ydC4gIFdlIGRvbid0IGRlY3JlbWVudCBucl9wb3J0cworCQkgKiBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aCBleHRyYSBjb21wbGV4aXRpZXMKKwkJICogb2YgdXNpbmcgdGhlIGxvd2VzdC1hdmFpbGFibGUgcG9ydCBpZDogV2UgY2FuIGp1c3QKKwkJICogcGljayB1cCB0aGUgbnJfcG9ydHMgbnVtYmVyIGFzIHRoZSBpZCBhbmQgbm90IGhhdmUKKwkJICogdXNlcnNwYWNlIHNlbmQgaXQgdG8gdXMuICBUaGlzIGhlbHBzIHVzIGluIHR3bworCQkgKiB3YXlzOgorCQkgKgorCQkgKiAtIFdlIGRvbid0IG5lZWQgdG8gaGF2ZSBhICdwb3J0X2lkJyBmaWVsZCBpbiB0aGUKKwkJICogICBjb25maWcgc3BhY2Ugd2hlbiBhIHBvcnQgaXMgaG90LWFkZGVkLiAgVGhpcyBpcyBhCisJCSAqICAgZ29vZCB0aGluZyBhcyB3ZSBtaWdodCBxdWV1ZSB1cCBtdWx0aXBsZSBob3RwbHVnCisJCSAqICAgcmVxdWVzdHMgaXNzdWVkIGluIG91ciB3b3JrcXVldWUuCisJCSAqCisJCSAqIC0gQW5vdGhlciB3YXkgdG8gZGVhbCB3aXRoIHRoaXMgd291bGQgaGF2ZSBiZWVuIHRvCisJCSAqICAgdXNlIGEgYml0bWFwIG9mIHRoZSBhY3RpdmUgcG9ydHMgYW5kIHNlbGVjdCB0aGUKKwkJICogICBsb3dlc3Qgbm9uLWFjdGl2ZSBwb3J0IGZyb20gdGhhdCBtYXAuICBUaGF0CisJCSAqICAgYmxvYXRzIHRoZSBhbHJlYWR5IHRpZ2h0IGNvbmZpZyBzcGFjZSBhbmQgd2UKKwkJICogICB3b3VsZCBlbmQgdXAgYXJ0aWZpY2lhbGx5IGxpbWl0aW5nIHRoZQorCQkgKiAgIG1heC4gbnVtYmVyIG9mIHBvcnRzIHRvIHNpemVvZihiaXRtYXApLiAgUmlnaHQKKwkJICogICBub3cgd2UgY2FuIHN1cHBvcnQgMl4zMiBwb3J0cyAoYXMgdGhlIHBvcnQgaWQgaXMKKwkJICogICBzdG9yZWQgaW4gYSB1MzIgdHlwZSkuCisJCSAqCisJCSAqLworCQlyZW1vdmVfcG9ydChwb3J0KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb250cm9sX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldjsKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJcG9ydGRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcG9ydHNfZGV2aWNlLCBjb250cm9sX3dvcmspOworCXZxID0gcG9ydGRldi0+Y19pdnE7CisKKwlzcGluX2xvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKKwl3aGlsZSAoKGJ1ZiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pKSkgeworCQlzcGluX3VubG9jaygmcG9ydGRldi0+Y3ZxX2xvY2spOworCisJCWJ1Zi0+bGVuID0gbGVuOworCQlidWYtPm9mZnNldCA9IDA7CisKKwkJaGFuZGxlX2NvbnRyb2xfbWVzc2FnZShwb3J0ZGV2LCBidWYpOworCisJCXNwaW5fbG9jaygmcG9ydGRldi0+Y3ZxX2xvY2spOworCQlpZiAoYWRkX2luYnVmKHBvcnRkZXYtPmNfaXZxLCBidWYpIDwgMCkgeworCQkJZGV2X3dhcm4oJnBvcnRkZXYtPnZkZXYtPmRldiwKKwkJCQkgIkVycm9yIGFkZGluZyBidWZmZXIgdG8gcXVldWVcbiIpOworCQkJZnJlZV9idWYoYnVmKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcG9ydGRldi0+Y3ZxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBpbl9pbnRyKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X3ZxKHZxLT52ZGV2LT5wcml2LCB2cSk7CisJaWYgKCFwb3J0KQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCWlmICghcG9ydC0+aW5idWYpCisJCXBvcnQtPmluYnVmID0gZ2V0X2luYnVmKHBvcnQpOworCisJLyoKKwkgKiBEb24ndCBxdWV1ZSB1cCBkYXRhIHdoZW4gcG9ydCBpcyBjbG9zZWQuICBUaGlzIGNvbmRpdGlvbgorCSAqIGNhbiBiZSByZWFjaGVkIHdoZW4gYSBjb25zb2xlIHBvcnQgaXMgbm90IHlldCBjb25uZWN0ZWQgKG5vCisJICogdHR5IGlzIHNwYXduZWQpIGFuZCB0aGUgaG9zdCBzZW5kcyBvdXQgZGF0YSB0byBjb25zb2xlCisJICogcG9ydHMuICBGb3IgZ2VuZXJpYyBzZXJpYWwgcG9ydHMsIHRoZSBob3N0IHdvbid0CisJICogKHNob3VsZG4ndCkgc2VuZCBkYXRhIHRpbGwgdGhlIGd1ZXN0IGlzIGNvbm5lY3RlZC4KKwkgKi8KKwlpZiAoIXBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCkKKwkJZGlzY2FyZF9wb3J0X2RhdGEocG9ydCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5pbmJ1Zl9sb2NrLCBmbGFncyk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPndhaXRxdWV1ZSk7CisKKwlpZiAoaXNfY29uc29sZV9wb3J0KHBvcnQpICYmIGh2Y19wb2xsKHBvcnQtPmNvbnMuaHZjKSkKIAkJaHZjX2tpY2soKTsKIH0KIAotLypEOjM3MCBPbmNlIHdlJ3JlIGZ1cnRoZXIgaW4gYm9vdCwgd2UgZ2V0IHByb2JlZCBsaWtlIGFueSBvdGhlciB2aXJ0aW8gZGV2aWNlLgotICogQXQgdGhpcyBzdGFnZSB3ZSBzZXQgdXAgdGhlIG91dHB1dCB2aXJ0cXVldWUuCi0gKgotICogVG8gc2V0IHVwIGFuZCBtYW5hZ2Ugb3VyIHZpcnR1YWwgY29uc29sZSwgd2UgY2FsbCBodmNfYWxsb2MoKS4gIFNpbmNlIHdlCi0gKiBuZXZlciByZW1vdmUgdGhlIGNvbnNvbGUgZGV2aWNlIHdlIG5ldmVyIG5lZWQgdGhpcyBwb2ludGVyIGFnYWluLgotICoKLSAqIEZpbmFsbHkgd2UgcHV0IG91ciBpbnB1dCBidWZmZXIgaW4gdGhlIGlucHV0IHF1ZXVlLCByZWFkeSB0byByZWNlaXZlLiAqLwotc3RhdGljIGludCBfX2RldmluaXQgdmlydGNvbnNfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGNvbnRyb2xfaW50cihzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKIHsKLQl2cV9jYWxsYmFja190ICpjYWxsYmFja3NbXSA9IHsgaHZjX2hhbmRsZV9pbnB1dCwgTlVMTH07Ci0JY29uc3QgY2hhciAqbmFtZXNbXSA9IHsgImlucHV0IiwgIm91dHB1dCIgfTsKLQlzdHJ1Y3QgdmlydHF1ZXVlICp2cXNbMl07CisJc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldjsKKworCXBvcnRkZXYgPSB2cS0+dmRldi0+cHJpdjsKKwlzY2hlZHVsZV93b3JrKCZwb3J0ZGV2LT5jb250cm9sX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBjb25maWdfaW50cihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2OworCisJcG9ydGRldiA9IHZkZXYtPnByaXY7CisJaWYgKHVzZV9tdWx0aXBvcnQocG9ydGRldikpIHsKKwkJLyogSGFuZGxlIHBvcnQgaG90LWFkZCAqLworCQlzY2hlZHVsZV93b3JrKCZwb3J0ZGV2LT5jb25maWdfd29yayk7CisJfQorCS8qCisJICogV2UnbGwgdXNlIHRoaXMgd2F5IG9mIHJlc2l6aW5nIG9ubHkgZm9yIGxlZ2FjeSBzdXBwb3J0LgorCSAqIEZvciBuZXdlciB1c2Vyc3BhY2UgKFZJUlRJT19DT05TT0xFX0ZfTVVMVFBPUlQrKSwgdXNlCisJICogY29udHJvbCBtZXNzYWdlcyB0byBpbmRpY2F0ZSBjb25zb2xlIHNpemUgY2hhbmdlcyBzbyB0aGF0CisJICogaXQgY2FuIGJlIGRvbmUgcGVyLXBvcnQKKwkgKi8KKwlyZXNpemVfY29uc29sZShmaW5kX3BvcnRfYnlfaWQocG9ydGRldiwgMCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZpbGxfcXVldWUoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHNwaW5sb2NrX3QgKmxvY2spCit7CisJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7CisJdW5zaWduZWQgaW50IHJldDsKIAlpbnQgZXJyOwogCi0JdmRldiA9IGRldjsKKwlyZXQgPSAwOworCWRvIHsKKwkJYnVmID0gYWxsb2NfYnVmKFBBR0VfU0laRSk7CisJCWlmICghYnVmKQorCQkJYnJlYWs7CiAKLQkvKiBUaGlzIGlzIHRoZSBzY3JhdGNoIHBhZ2Ugd2UgdXNlIHRvIHJlY2VpdmUgY29uc29sZSBpbnB1dCAqLwotCWluYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghaW5idWYpIHsKKwkJc3Bpbl9sb2NrX2lycShsb2NrKTsKKwkJZXJyID0gYWRkX2luYnVmKHZxLCBidWYpOworCQlpZiAoZXJyIDwgMCkgeworCQkJc3Bpbl91bmxvY2tfaXJxKGxvY2spOworCQkJZnJlZV9idWYoYnVmKTsKKwkJCWJyZWFrOworCQl9CisJCXJldCsrOworCQlzcGluX3VubG9ja19pcnEobG9jayk7CisJfSB3aGlsZSAoZXJyID4gMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkZF9wb3J0KHN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXYsIHUzMiBpZCkKK3sKKwljaGFyIGRlYnVnZnNfbmFtZVsxNl07CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7CisJZGV2X3QgZGV2dDsKKwlpbnQgZXJyOworCisJcG9ydCA9IGttYWxsb2Moc2l6ZW9mKCpwb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQkvKiBGaW5kIHRoZSBxdWV1ZXMuICovCi0JLyogRklYTUU6IFRoaXMgaXMgd2h5IHdlIHdhbnQgdG8gd2VhbiBvZmYgaHZjOiB3ZSBkbyBub3RoaW5nCi0JICogd2hlbiBpbnB1dCBjb21lcyBpbi4gKi8KLQllcnIgPSB2ZGV2LT5jb25maWctPmZpbmRfdnFzKHZkZXYsIDIsIHZxcywgY2FsbGJhY2tzLCBuYW1lcyk7Ci0JaWYgKGVycikKLQkJZ290byBmcmVlOworCXBvcnQtPnBvcnRkZXYgPSBwb3J0ZGV2OworCXBvcnQtPmlkID0gaWQ7CiAKLQlpbl92cSA9IHZxc1swXTsKLQlvdXRfdnEgPSB2cXNbMV07CisJcG9ydC0+bmFtZSA9IE5VTEw7CisJcG9ydC0+aW5idWYgPSBOVUxMOworCXBvcnQtPmNvbnMuaHZjID0gTlVMTDsKIAotCS8qIFN0YXJ0IHVzaW5nIHRoZSBuZXcgY29uc29sZSBvdXRwdXQuICovCi0JdmlydGlvX2NvbnMuZ2V0X2NoYXJzID0gZ2V0X2NoYXJzOwotCXZpcnRpb19jb25zLnB1dF9jaGFycyA9IHB1dF9jaGFyczsKLQl2aXJ0aW9fY29ucy5ub3RpZmllcl9hZGQgPSBub3RpZmllcl9hZGRfdmlvOwotCXZpcnRpb19jb25zLm5vdGlmaWVyX2RlbCA9IG5vdGlmaWVyX2RlbF92aW87Ci0JdmlydGlvX2NvbnMubm90aWZpZXJfaGFuZ3VwID0gbm90aWZpZXJfZGVsX3ZpbzsKKwlwb3J0LT5ob3N0X2Nvbm5lY3RlZCA9IHBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCA9IGZhbHNlOwogCi0JLyogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGh2Y19hbGxvYygpIGlzIHRoZSB2aXJ0dWFsIGNvbnNvbGUgbnVtYmVyLCBzbwotCSAqIHdlIHVzZSB6ZXJvLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGFyYW1ldGVyIGZvciB0aGUKLQkgKiBub3RpZmljYXRpb24gbWVjaGFuaXNtIChsaWtlIGlycSBudW1iZXIpLiBXZSBjdXJyZW50bHkgbGVhdmUgdGhpcwotCSAqIGFzIHplcm8sIHZpcnRxdWV1ZXMgaGF2ZSBpbXBsaWNpdCBub3RpZmljYXRpb25zLgotCSAqCi0JICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgInN0cnVjdCBodl9vcHMiIGNvbnRhaW5pbmcgdGhlIHB1dF9jaGFycygpCi0JICogZ2V0X2NoYXJzKCksIG5vdGlmaWVyX2FkZCgpIGFuZCBub3RpZmllcl9kZWwoKSBwb2ludGVycy4KLQkgKiBUaGUgZmluYWwgYXJndW1lbnQgaXMgdGhlIG91dHB1dCBidWZmZXIgc2l6ZTogd2UgY2FuIGRvIGFueSBzaXplLAotCSAqIHNvIHdlIHB1dCBQQUdFX1NJWkUgaGVyZS4gKi8KLQlodmMgPSBodmNfYWxsb2MoMCwgMCwgJnZpcnRpb19jb25zLCBQQUdFX1NJWkUpOwotCWlmIChJU19FUlIoaHZjKSkgewotCQllcnIgPSBQVFJfRVJSKGh2Yyk7Ci0JCWdvdG8gZnJlZV92cXM7CisJcG9ydC0+aW5fdnEgPSBwb3J0ZGV2LT5pbl92cXNbcG9ydC0+aWRdOworCXBvcnQtPm91dF92cSA9IHBvcnRkZXYtPm91dF92cXNbcG9ydC0+aWRdOworCisJY2Rldl9pbml0KCZwb3J0LT5jZGV2LCAmcG9ydF9mb3BzKTsKKworCWRldnQgPSBNS0RFVihwb3J0ZGV2LT5jaHJfbWFqb3IsIGlkKTsKKwllcnIgPSBjZGV2X2FkZCgmcG9ydC0+Y2RldiwgZGV2dCwgMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmcG9ydC0+cG9ydGRldi0+dmRldi0+ZGV2LAorCQkJIkVycm9yICVkIGFkZGluZyBjZGV2IGZvciBwb3J0ICV1XG4iLCBlcnIsIGlkKTsKKwkJZ290byBmcmVlX3BvcnQ7CisJfQorCXBvcnQtPmRldiA9IGRldmljZV9jcmVhdGUocGRydmRhdGEuY2xhc3MsICZwb3J0LT5wb3J0ZGV2LT52ZGV2LT5kZXYsCisJCQkJICBkZXZ0LCBwb3J0LCAidnBvcnQldXAldSIsCisJCQkJICBwb3J0LT5wb3J0ZGV2LT5kcnZfaW5kZXgsIGlkKTsKKwlpZiAoSVNfRVJSKHBvcnQtPmRldikpIHsKKwkJZXJyID0gUFRSX0VSUihwb3J0LT5kZXYpOworCQlkZXZfZXJyKCZwb3J0LT5wb3J0ZGV2LT52ZGV2LT5kZXYsCisJCQkiRXJyb3IgJWQgY3JlYXRpbmcgZGV2aWNlIGZvciBwb3J0ICV1XG4iLAorCQkJZXJyLCBpZCk7CisJCWdvdG8gZnJlZV9jZGV2OwogCX0KIAotCS8qIFJlZ2lzdGVyIHRoZSBpbnB1dCBidWZmZXIgdGhlIGZpcnN0IHRpbWUuICovCi0JYWRkX2luYnVmKCk7CisJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmluYnVmX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPndhaXRxdWV1ZSk7CisKKwkvKiBGaWxsIHRoZSBpbl92cSB3aXRoIGJ1ZmZlcnMgc28gdGhlIGhvc3QgY2FuIHNlbmQgdXMgZGF0YS4gKi8KKwllcnIgPSBmaWxsX3F1ZXVlKHBvcnQtPmluX3ZxLCAmcG9ydC0+aW5idWZfbG9jayk7CisJaWYgKCFlcnIpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJFcnJvciBhbGxvY2F0aW5nIGluYnVmc1xuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9kZXZpY2U7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgdXNpbmcgbXVsdGlwb3J0IHN1cHBvcnQsIHRoaXMgaGFzIHRvIGJlIGEgY29uc29sZSBwb3J0CisJICovCisJaWYgKCF1c2VfbXVsdGlwb3J0KHBvcnQtPnBvcnRkZXYpKSB7CisJCWVyciA9IGluaXRfcG9ydF9jb25zb2xlKHBvcnQpOworCQlpZiAoZXJyKQorCQkJZ290byBmcmVlX2luYnVmczsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZwb3J0ZGV2LT5wb3J0c19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZwb3J0LT5saXN0LCAmcG9ydC0+cG9ydGRldi0+cG9ydHMpOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydGRldi0+cG9ydHNfbG9jayk7CisKKwkvKgorCSAqIFRlbGwgdGhlIEhvc3Qgd2UncmUgc2V0IHNvIHRoYXQgaXQgY2FuIHNlbmQgdXMgdmFyaW91cworCSAqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhpcyBwb3J0IChlZywgcG9ydCBuYW1lLAorCSAqIGNhY2hpbmcsIHdoZXRoZXIgdGhpcyBpcyBhIGNvbnNvbGUgcG9ydCwgZXRjLikKKwkgKi8KKwlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfUkVBRFksIDEpOworCisJaWYgKHBkcnZkYXRhLmRlYnVnZnNfZGlyKSB7CisJCS8qCisJCSAqIEZpbmFsbHksIGNyZWF0ZSB0aGUgZGVidWdmcyBmaWxlIHRoYXQgd2UgY2FuIHVzZSB0bworCQkgKiBpbnNwZWN0IGEgcG9ydCdzIHN0YXRlIGF0IGFueSB0aW1lCisJCSAqLworCQlzcHJpbnRmKGRlYnVnZnNfbmFtZSwgInZwb3J0JXVwJXUiLAorCQkJcG9ydC0+cG9ydGRldi0+ZHJ2X2luZGV4LCBpZCk7CisJCXBvcnQtPmRlYnVnZnNfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZGVidWdmc19uYW1lLCAwNDQ0LAorCQkJCQkJCSBwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpciwKKwkJCQkJCQkgcG9ydCwKKwkJCQkJCQkgJnBvcnRfZGVidWdmc19vcHMpOworCX0KKwlyZXR1cm4gMDsKKworZnJlZV9pbmJ1ZnM6CisJd2hpbGUgKChidWYgPSBwb3J0LT5pbl92cS0+dnFfb3BzLT5kZXRhY2hfdW51c2VkX2J1Zihwb3J0LT5pbl92cSkpKQorCQlmcmVlX2J1ZihidWYpOworZnJlZV9kZXZpY2U6CisJZGV2aWNlX2Rlc3Ryb3kocGRydmRhdGEuY2xhc3MsIHBvcnQtPmRldi0+ZGV2dCk7CitmcmVlX2NkZXY6CisJY2Rldl9kZWwoJnBvcnQtPmNkZXYpOworZnJlZV9wb3J0OgorCWtmcmVlKHBvcnQpOworZmFpbDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVGhlIHdvcmtoYW5kbGVyIGZvciBjb25maWctc3BhY2UgdXBkYXRlcy4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHBvcnRzIGFyZSBob3QtYWRkZWQuCisgKi8KK3N0YXRpYyB2b2lkIGNvbmZpZ193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcgdmlydGNvbmNvbmY7CisJc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldjsKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKKwlpbnQgZXJyOworCisJcG9ydGRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcG9ydHNfZGV2aWNlLCBjb25maWdfd29yayk7CisKKwl2ZGV2ID0gcG9ydGRldi0+dmRldjsKKwl2ZGV2LT5jb25maWctPmdldCh2ZGV2LAorCQkJICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLCBucl9wb3J0cyksCisJCQkgICZ2aXJ0Y29uY29uZi5ucl9wb3J0cywKKwkJCSAgc2l6ZW9mKHZpcnRjb25jb25mLm5yX3BvcnRzKSk7CisKKwlpZiAocG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzID09IHZpcnRjb25jb25mLm5yX3BvcnRzKSB7CisJCS8qCisJCSAqIFBvcnQgMCBnb3QgaG90LWFkZGVkLiAgU2luY2Ugd2UgYWxyZWFkeSBkaWQgYWxsIHRoZQorCQkgKiBvdGhlciBpbml0aWFsaXNhdGlvbiBmb3IgaXQsIGp1c3QgdGVsbCB0aGUgSG9zdAorCQkgKiB0aGF0IHRoZSBwb3J0IGlzIHJlYWR5IGlmIHdlIGZpbmQgdGhlIHBvcnQuICBJbgorCQkgKiBjYXNlIHRoZSBwb3J0IHdhcyBob3QtcmVtb3ZlZCBlYXJsaWVyLCB3ZSBjYWxsCisJCSAqIGFkZF9wb3J0IHRvIGFkZCB0aGUgcG9ydC4KKwkJICovCisJCXN0cnVjdCBwb3J0ICpwb3J0OworCisJCXBvcnQgPSBmaW5kX3BvcnRfYnlfaWQocG9ydGRldiwgMCk7CisJCWlmICghcG9ydCkKKwkJCWFkZF9wb3J0KHBvcnRkZXYsIDApOworCQllbHNlCisJCQlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfUkVBRFksIDEpOworCQlyZXR1cm47CisJfQorCWlmICh2aXJ0Y29uY29uZi5ucl9wb3J0cyA+IHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMpIHsKKwkJZGV2X3dhcm4oJnZkZXYtPmRldiwKKwkJCSAiTW9yZSBwb3J0cyBzcGVjaWZpZWQgKCV1KSB0aGFuIGFsbG93ZWQgKCV1KSIsCisJCQkgcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzICsgMSwKKwkJCSBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodmlydGNvbmNvbmYubnJfcG9ydHMgPCBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMpCisJCXJldHVybjsKKworCS8qIEhvdC1hZGQgcG9ydHMgKi8KKwl3aGlsZSAodmlydGNvbmNvbmYubnJfcG9ydHMgLSBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMpIHsKKwkJZXJyID0gYWRkX3BvcnQocG9ydGRldiwgcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQlwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaW5pdF92cXMoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldikKK3sKKwl2cV9jYWxsYmFja190ICoqaW9fY2FsbGJhY2tzOworCWNoYXIgKippb19uYW1lczsKKwlzdHJ1Y3QgdmlydHF1ZXVlICoqdnFzOworCXUzMiBpLCBqLCBucl9wb3J0cywgbnJfcXVldWVzOworCWludCBlcnI7CisKKwlucl9wb3J0cyA9IHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHM7CisJbnJfcXVldWVzID0gdXNlX211bHRpcG9ydChwb3J0ZGV2KSA/IChucl9wb3J0cyArIDEpICogMiA6IDI7CisKKwl2cXMgPSBrbWFsbG9jKG5yX3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgdmlydHF1ZXVlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZxcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCWlvX2NhbGxiYWNrcyA9IGttYWxsb2MobnJfcXVldWVzICogc2l6ZW9mKHZxX2NhbGxiYWNrX3QgKiksIEdGUF9LRVJORUwpOworCWlmICghaW9fY2FsbGJhY2tzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV92cXM7CisJfQorCWlvX25hbWVzID0ga21hbGxvYyhucl9xdWV1ZXMgKiBzaXplb2YoY2hhciAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb19uYW1lcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfY2FsbGJhY2tzOworCX0KKwlwb3J0ZGV2LT5pbl92cXMgPSBrbWFsbG9jKG5yX3BvcnRzICogc2l6ZW9mKHN0cnVjdCB2aXJ0cXVldWUgKiksCisJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvcnRkZXYtPmluX3ZxcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfbmFtZXM7CisJfQorCXBvcnRkZXYtPm91dF92cXMgPSBrbWFsbG9jKG5yX3BvcnRzICogc2l6ZW9mKHN0cnVjdCB2aXJ0cXVldWUgKiksCisJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0ZGV2LT5vdXRfdnFzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9pbnZxczsKKwl9CisKKwkvKgorCSAqIEZvciBiYWNrd2FyZCBjb21wYXQgKG5ld2VyIGhvc3QgYnV0IG9sZGVyIGd1ZXN0KSwgdGhlIGhvc3QKKwkgKiBzcGF3bnMgYSBjb25zb2xlIHBvcnQgZmlyc3QgYW5kIGFsc28gaW5pdHMgdGhlIHZxcyBmb3IgcG9ydAorCSAqIDAgYmVmb3JlIG90aGVycy4KKwkgKi8KKwlqID0gMDsKKwlpb19jYWxsYmFja3Nbal0gPSBpbl9pbnRyOworCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBOVUxMOworCWlvX25hbWVzW2pdID0gImlucHV0IjsKKwlpb19uYW1lc1tqICsgMV0gPSAib3V0cHV0IjsKKwlqICs9IDI7CisKKwlpZiAodXNlX211bHRpcG9ydChwb3J0ZGV2KSkgeworCQlpb19jYWxsYmFja3Nbal0gPSBjb250cm9sX2ludHI7CisJCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBOVUxMOworCQlpb19uYW1lc1tqXSA9ICJjb250cm9sLWkiOworCQlpb19uYW1lc1tqICsgMV0gPSAiY29udHJvbC1vIjsKKworCQlmb3IgKGkgPSAxOyBpIDwgbnJfcG9ydHM7IGkrKykgeworCQkJaiArPSAyOworCQkJaW9fY2FsbGJhY2tzW2pdID0gaW5faW50cjsKKwkJCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBOVUxMOworCQkJaW9fbmFtZXNbal0gPSAiaW5wdXQiOworCQkJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CisJCX0KKwl9CisJLyogRmluZCB0aGUgcXVldWVzLiAqLworCWVyciA9IHBvcnRkZXYtPnZkZXYtPmNvbmZpZy0+ZmluZF92cXMocG9ydGRldi0+dmRldiwgbnJfcXVldWVzLCB2cXMsCisJCQkJCSAgICAgIGlvX2NhbGxiYWNrcywKKwkJCQkJICAgICAgKGNvbnN0IGNoYXIgKiopaW9fbmFtZXMpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9vdXR2cXM7CisKKwlqID0gMDsKKwlwb3J0ZGV2LT5pbl92cXNbMF0gPSB2cXNbMF07CisJcG9ydGRldi0+b3V0X3Zxc1swXSA9IHZxc1sxXTsKKwlqICs9IDI7CisJaWYgKHVzZV9tdWx0aXBvcnQocG9ydGRldikpIHsKKwkJcG9ydGRldi0+Y19pdnEgPSB2cXNbal07CisJCXBvcnRkZXYtPmNfb3ZxID0gdnFzW2ogKyAxXTsKKworCQlmb3IgKGkgPSAxOyBpIDwgbnJfcG9ydHM7IGkrKykgeworCQkJaiArPSAyOworCQkJcG9ydGRldi0+aW5fdnFzW2ldID0gdnFzW2pdOworCQkJcG9ydGRldi0+b3V0X3Zxc1tpXSA9IHZxc1tqICsgMV07CisJCX0KKwl9CisJa2ZyZWUoaW9fY2FsbGJhY2tzKTsKKwlrZnJlZShpb19uYW1lcyk7CisJa2ZyZWUodnFzKTsKKworCXJldHVybiAwOworCitmcmVlX25hbWVzOgorCWtmcmVlKGlvX25hbWVzKTsKK2ZyZWVfY2FsbGJhY2tzOgorCWtmcmVlKGlvX2NhbGxiYWNrcyk7CitmcmVlX291dHZxczoKKwlrZnJlZShwb3J0ZGV2LT5vdXRfdnFzKTsKK2ZyZWVfaW52cXM6CisJa2ZyZWUocG9ydGRldi0+aW5fdnFzKTsKK2ZyZWVfdnFzOgorCWtmcmVlKHZxcyk7CitmYWlsOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRkZXZfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKKy8qCisgKiBPbmNlIHdlJ3JlIGZ1cnRoZXIgaW4gYm9vdCwgd2UgZ2V0IHByb2JlZCBsaWtlIGFueSBvdGhlciB2aXJ0aW8KKyAqIGRldmljZS4KKyAqCisgKiBJZiB0aGUgaG9zdCBhbHNvIHN1cHBvcnRzIG11bHRpcGxlIGNvbnNvbGUgcG9ydHMsIHdlIGNoZWNrIHRoZQorICogY29uZmlnIHNwYWNlIHRvIHNlZSBob3cgbWFueSBwb3J0cyB0aGUgaG9zdCBoYXMgc3Bhd25lZC4gIFdlCisgKiBpbml0aWFsaXplIGVhY2ggcG9ydCBmb3VuZC4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQgdmlydGNvbnNfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldjsKKwl1MzIgaTsKKwlpbnQgZXJyOworCWJvb2wgbXVsdGlwb3J0OworCisJcG9ydGRldiA9IGttYWxsb2Moc2l6ZW9mKCpwb3J0ZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0ZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBBdHRhY2ggdGhpcyBwb3J0ZGV2IHRvIHRoaXMgdmlydGlvX2RldmljZSwgYW5kIHZpY2UtdmVyc2EuICovCisJcG9ydGRldi0+dmRldiA9IHZkZXY7CisJdmRldi0+cHJpdiA9IHBvcnRkZXY7CisKKwlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwlwb3J0ZGV2LT5kcnZfaW5kZXggPSBwZHJ2ZGF0YS5pbmRleCsrOworCXNwaW5fdW5sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7CisKKwlwb3J0ZGV2LT5jaHJfbWFqb3IgPSByZWdpc3Rlcl9jaHJkZXYoMCwgInZpcnRpby1wb3J0c2RldiIsCisJCQkJCSAgICAgJnBvcnRkZXZfZm9wcyk7CisJaWYgKHBvcnRkZXYtPmNocl9tYWpvciA8IDApIHsKKwkJZGV2X2VycigmdmRldi0+ZGV2LAorCQkJIkVycm9yICVkIHJlZ2lzdGVyaW5nIGNocmRldiBmb3IgZGV2aWNlICV1XG4iLAorCQkJcG9ydGRldi0+Y2hyX21ham9yLCBwb3J0ZGV2LT5kcnZfaW5kZXgpOworCQllcnIgPSBwb3J0ZGV2LT5jaHJfbWFqb3I7CisJCWdvdG8gZnJlZTsKKwl9CisKKwltdWx0aXBvcnQgPSBmYWxzZTsKKwlwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMgPSAxOworCXBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMgPSAxOworCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQpKSB7CisJCW11bHRpcG9ydCA9IHRydWU7CisJCXZkZXYtPmZlYXR1cmVzWzBdIHw9IDEgPDwgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQ7CisKKwkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywKKwkJCQkJCSBucl9wb3J0cyksCisJCQkJICAmcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzLAorCQkJCSAgc2l6ZW9mKHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cykpOworCQl2ZGV2LT5jb25maWctPmdldCh2ZGV2LCBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLAorCQkJCQkJIG1heF9ucl9wb3J0cyksCisJCQkJICAmcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cywKKwkJCQkgIHNpemVvZihwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzKSk7CisJCWlmIChwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMgPiBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzKSB7CisJCQlkZXZfd2FybigmdmRldi0+ZGV2LAorCQkJCSAiTW9yZSBwb3J0cyAoJXUpIHNwZWNpZmllZCB0aGFuIGFsbG93ZWQgKCV1KS4gV2lsbCBpbml0ICV1IHBvcnRzLiIsCisJCQkJIHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cywKKwkJCQkgcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cywKKwkJCQkgcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cyk7CisKKwkJCXBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyA9IHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHM7CisJCX0KKwl9CisKKwkvKiBMZXQgdGhlIEhvc3Qga25vdyB3ZSBzdXBwb3J0IG11bHRpcGxlIHBvcnRzLiovCisJdmRldi0+Y29uZmlnLT5maW5hbGl6ZV9mZWF0dXJlcyh2ZGV2KTsKKworCWVyciA9IGluaXRfdnFzKHBvcnRkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnZkZXYtPmRldiwgIkVycm9yICVkIGluaXRpYWxpemluZyB2cXNcbiIsIGVycik7CisJCWdvdG8gZnJlZV9jaHJkZXY7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnBvcnRkZXYtPnBvcnRzX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZwb3J0ZGV2LT5wb3J0cyk7CisKKwlpZiAobXVsdGlwb3J0KSB7CisJCXNwaW5fbG9ja19pbml0KCZwb3J0ZGV2LT5jdnFfbG9jayk7CisJCUlOSVRfV09SSygmcG9ydGRldi0+Y29udHJvbF93b3JrLCAmY29udHJvbF93b3JrX2hhbmRsZXIpOworCQlJTklUX1dPUksoJnBvcnRkZXYtPmNvbmZpZ193b3JrLCAmY29uZmlnX3dvcmtfaGFuZGxlcik7CisKKwkJZXJyID0gZmlsbF9xdWV1ZShwb3J0ZGV2LT5jX2l2cSwgJnBvcnRkZXYtPmN2cV9sb2NrKTsKKwkJaWYgKCFlcnIpIHsKKwkJCWRldl9lcnIoJnZkZXYtPmRldiwKKwkJCQkiRXJyb3IgYWxsb2NhdGluZyBidWZmZXJzIGZvciBjb250cm9sIHF1ZXVlXG4iKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfdnFzOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0czsgaSsrKQorCQlhZGRfcG9ydChwb3J0ZGV2LCBpKTsKKworCS8qIFN0YXJ0IHVzaW5nIHRoZSBuZXcgY29uc29sZSBvdXRwdXQuICovCisJZWFybHlfcHV0X2NoYXJzID0gTlVMTDsKIAlyZXR1cm4gMDsKIAogZnJlZV92cXM6CiAJdmRldi0+Y29uZmlnLT5kZWxfdnFzKHZkZXYpOworCWtmcmVlKHBvcnRkZXYtPmluX3Zxcyk7CisJa2ZyZWUocG9ydGRldi0+b3V0X3Zxcyk7CitmcmVlX2NocmRldjoKKwl1bnJlZ2lzdGVyX2NocmRldihwb3J0ZGV2LT5jaHJfbWFqb3IsICJ2aXJ0aW8tcG9ydHNkZXYiKTsKIGZyZWU6Ci0Ja2ZyZWUoaW5idWYpOworCWtmcmVlKHBvcnRkZXYpOwogZmFpbDoKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCB2aXJ0Y29uc19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldjsKKwlzdHJ1Y3QgcG9ydCAqcG9ydCwgKnBvcnQyOworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGludCBsZW47CisKKwlwb3J0ZGV2ID0gdmRldi0+cHJpdjsKKworCWNhbmNlbF93b3JrX3N5bmMoJnBvcnRkZXYtPmNvbnRyb2xfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmcG9ydGRldi0+Y29uZmlnX3dvcmspOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHBvcnQyLCAmcG9ydGRldi0+cG9ydHMsIGxpc3QpCisJCXJlbW92ZV9wb3J0KHBvcnQpOworCisJdW5yZWdpc3Rlcl9jaHJkZXYocG9ydGRldi0+Y2hyX21ham9yLCAidmlydGlvLXBvcnRzZGV2Iik7CisKKwl3aGlsZSAoKGJ1ZiA9IHBvcnRkZXYtPmNfaXZxLT52cV9vcHMtPmdldF9idWYocG9ydGRldi0+Y19pdnEsICZsZW4pKSkKKwkJZnJlZV9idWYoYnVmKTsKKworCXdoaWxlICgoYnVmID0gcG9ydGRldi0+Y19pdnEtPnZxX29wcy0+ZGV0YWNoX3VudXNlZF9idWYocG9ydGRldi0+Y19pdnEpKSkKKwkJZnJlZV9idWYoYnVmKTsKKworCXZkZXYtPmNvbmZpZy0+ZGVsX3Zxcyh2ZGV2KTsKKwlrZnJlZShwb3J0ZGV2LT5pbl92cXMpOworCWtmcmVlKHBvcnRkZXYtPm91dF92cXMpOworCisJa2ZyZWUocG9ydGRldik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVklSVElPX0lEX0NPTlNPTEUsIFZJUlRJT19ERVZfQU5ZX0lEIH0sCiAJeyAwIH0sCkBAIC0yNTMsNiArMTUxMSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKIAlWSVJUSU9fQ09OU09MRV9GX1NJWkUsCisJVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX2NvbnNvbGUgPSB7CkBAIC0yNjIsMTQgKzE1MjEsNDEgQEAKIAkuZHJpdmVyLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCiAJLnByb2JlID0JdmlydGNvbnNfcHJvYmUsCi0JLmNvbmZpZ19jaGFuZ2VkID0gdmlydGNvbnNfYXBwbHlfY29uZmlnLAorCS5yZW1vdmUgPQl2aXJ0Y29uc19yZW1vdmUsCisJLmNvbmZpZ19jaGFuZ2VkID0gY29uZmlnX2ludHIsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7CisJaW50IGVycjsKKworCXBkcnZkYXRhLmNsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAidmlydGlvLXBvcnRzIik7CisJaWYgKElTX0VSUihwZHJ2ZGF0YS5jbGFzcykpIHsKKwkJZXJyID0gUFRSX0VSUihwZHJ2ZGF0YS5jbGFzcyk7CisJCXByX2VycigiRXJyb3IgJWQgY3JlYXRpbmcgdmlydGlvLXBvcnRzIGNsYXNzXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXBkcnZkYXRhLmRlYnVnZnNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJ2aXJ0aW8tcG9ydHMiLCBOVUxMKTsKKwlpZiAoIXBkcnZkYXRhLmRlYnVnZnNfZGlyKSB7CisJCXByX3dhcm5pbmcoIkVycm9yICVsZCBjcmVhdGluZyBkZWJ1Z2ZzIGRpciBmb3IgdmlydGlvLXBvcnRzXG4iLAorCQkJICAgUFRSX0VSUihwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikpOworCX0KKwlJTklUX0xJU1RfSEVBRCgmcGRydmRhdGEuY29uc29sZXMpOworCiAJcmV0dXJuIHJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnZpcnRpb19jb25zb2xlKTsKIH0KKworc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnZpcnRpb19jb25zb2xlKTsKKworCWNsYXNzX2Rlc3Ryb3kocGRydmRhdGEuY2xhc3MpOworCWlmIChwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHBkcnZkYXRhLmRlYnVnZnNfZGlyKTsKK30KIG1vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoZmluaSk7CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodmlydGlvLCBpZF90YWJsZSk7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlZpcnRpbyBjb25zb2xlIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYyBiL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKaW5kZXggOTk0ZTFhNS4uOGIyNDcyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYworKysgYi9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jCkBAIC0xMzYsNyArMTM2LDcgQEAKICAqIHZtZV9zY2NfaW5pdCgpIGFuZCBzdXBwb3J0IGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHNjY19pbml0X2RyaXZlcnModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNjY19pbml0X2RyaXZlcnModm9pZCkKIHsKIAlpbnQgZXJyb3I7CiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogLyogcG9ydHNbXSBhcnJheSBpcyBpbmRleGVkIGJ5IGxpbmUgbm8gKGkuZS4gWzBdIGZvciB0dHlTMCwgWzFdIGZvciB0dHlTMSkuCiAgKi8KIAotc3RhdGljIHZvaWQgc2NjX2luaXRfcG9ydHN0cnVjdHModm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzY2NfaW5pdF9wb3J0c3RydWN0cyh2b2lkKQogewogCXN0cnVjdCBzY2NfcG9ydCAqcG9ydDsKIAlpbnQgaTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogCiAKICNpZmRlZiBDT05GSUdfTVZNRTE0N19TQ0MKLXN0YXRpYyBpbnQgbXZtZTE0N19zY2NfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXZtZTE0N19zY2NfaW5pdCh2b2lkKQogewogCXN0cnVjdCBzY2NfcG9ydCAqcG9ydDsKIAlpbnQgZXJyb3I7CkBAIC0yOTgsNyArMjk4LDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX01WTUUxNjJfU0NDCi1zdGF0aWMgaW50IG12bWUxNjJfc2NjX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG12bWUxNjJfc2NjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnQgKnBvcnQ7CiAJaW50IGVycm9yOwpAQCAtNDA0LDcgKzQwNCw3IEBACiAKIAogI2lmZGVmIENPTkZJR19CVk1FNjAwMF9TQ0MKLXN0YXRpYyBpbnQgYnZtZTYwMDBfc2NjX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGJ2bWU2MDAwX3NjY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHNjY19wb3J0ICpwb3J0OwogCWludCBlcnJvcjsKQEAgLTUwMyw3ICs1MDMsNyBAQAogI2VuZGlmCiAKIAotc3RhdGljIGludCB2bWVfc2NjX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHZtZV9zY2NfaW5pdCh2b2lkKQogewogCWludCByZXMgPSAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwppbmRleCA2YjNlMGMyLi41Nzg1OTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKQEAgLTQwLDcgKzQwLDYgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzX3N1c3BlbmQ7CiAJdW5zaWduZWQgbG9uZyBtYXRjaF92YWx1ZTsKIAl1bnNpZ25lZCBsb25nIG5leHRfbWF0Y2hfdmFsdWU7CiAJdW5zaWduZWQgbG9uZyBtYXhfbWF0Y2hfdmFsdWU7CkBAIC00MzIsNiArNDMxLDExIEBACiAJc2hfY210X3N0b3AoY3NfdG9fc2hfY210KGNzKSwgRkxBR19DTE9DS1NPVVJDRSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja3NvdXJjZV9yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwlzaF9jbXRfc3RhcnQoY3NfdG9fc2hfY210KGNzKSwgRkxBR19DTE9DS1NPVVJDRSk7Cit9CisKIHN0YXRpYyBpbnQgc2hfY210X3JlZ2lzdGVyX2Nsb2Nrc291cmNlKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwKIAkJCQkgICAgICAgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyByYXRpbmcpCiB7CkBAIC00NDIsNiArNDQ2LDggQEAKIAljcy0+cmVhZCA9IHNoX2NtdF9jbG9ja3NvdXJjZV9yZWFkOwogCWNzLT5lbmFibGUgPSBzaF9jbXRfY2xvY2tzb3VyY2VfZW5hYmxlOwogCWNzLT5kaXNhYmxlID0gc2hfY210X2Nsb2Nrc291cmNlX2Rpc2FibGU7CisJY3MtPnN1c3BlbmQgPSBzaF9jbXRfY2xvY2tzb3VyY2VfZGlzYWJsZTsKKwljcy0+cmVzdW1lID0gc2hfY210X2Nsb2Nrc291cmNlX3Jlc3VtZTsKIAljcy0+bWFzayA9IENMT0NLU09VUkNFX01BU0soc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogOCk7CiAJY3MtPmZsYWdzID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVM7CiAJcHJfaW5mbygic2hfY210OiAlcyB1c2VkIGFzIGNsb2NrIHNvdXJjZVxuIiwgY3MtPm5hbWUpOwpAQCAtNjAzLDE4ICs2MDksMTMgQEAKIAlwLT5pcnFhY3Rpb24uaGFuZGxlciA9IHNoX2NtdF9pbnRlcnJ1cHQ7CiAJcC0+aXJxYWN0aW9uLmRldl9pZCA9IHA7CiAJcC0+aXJxYWN0aW9uLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEw7Ci0JcmV0ID0gc2V0dXBfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoInNoX2NtdDogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOwotCQlnb3RvIGVycjE7Ci0JfQogCiAJLyogZ2V0IGhvbGQgb2YgY2xvY2sgKi8KIAlwLT5jbGsgPSBjbGtfZ2V0KCZwLT5wZGV2LT5kZXYsIGNmZy0+Y2xrKTsKIAlpZiAoSVNfRVJSKHAtPmNsaykpIHsKIAkJcHJfZXJyKCJzaF9jbXQ6IGNhbm5vdCBnZXQgY2xvY2sgXCIlc1wiXG4iLCBjZmctPmNsayk7CiAJCXJldCA9IFBUUl9FUlIocC0+Y2xrKTsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjE7CiAJfQogCiAJaWYgKHJlc291cmNlX3NpemUocmVzKSA9PSA2KSB7CkBAIC02MjcsMTQgKzYyOCwyNSBAQAogCQlwLT5jbGVhcl9iaXRzID0gfjB4YzAwMDsKIAl9CiAKLQlyZXR1cm4gc2hfY210X3JlZ2lzdGVyKHAsIGNmZy0+bmFtZSwKLQkJCSAgICAgICBjZmctPmNsb2NrZXZlbnRfcmF0aW5nLAotCQkJICAgICAgIGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKTsKLSBlcnIyOgotCXJlbW92ZV9pcnEoaXJxLCAmcC0+aXJxYWN0aW9uKTsKLSBlcnIxOgorCXJldCA9IHNoX2NtdF9yZWdpc3RlcihwLCBjZmctPm5hbWUsCisJCQkgICAgICBjZmctPmNsb2NrZXZlbnRfcmF0aW5nLAorCQkJICAgICAgY2ZnLT5jbG9ja3NvdXJjZV9yYXRpbmcpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycjE7CisJfQorCisJcmV0ID0gc2V0dXBfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInNoX2NtdDogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOworCQlnb3RvIGVycjE7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjE6CiAJaW91bm1hcChwLT5tYXBiYXNlKTsKLSBlcnIwOgorZXJyMDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NjgsMzggKzY4MCwxMSBAQAogCXJldHVybiAtRUJVU1k7IC8qIGNhbm5vdCB1bnJlZ2lzdGVyIGNsb2NrZXZlbnQgYW5kIGNsb2Nrc291cmNlICovCiB9CiAKLXN0YXRpYyBpbnQgc2hfY210X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCS8qIHNhdmUgZmxhZyBzdGF0ZSBhbmQgc3RvcCBDTVQgY2hhbm5lbCAqLwotCXAtPmZsYWdzX3N1c3BlbmQgPSBwLT5mbGFnczsKLQlzaF9jbXRfc3RvcChwLCBwLT5mbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2hfY210X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JLyogc3RhcnQgQ01UIGNoYW5uZWwgZnJvbSBzYXZlZCBzdGF0ZSAqLwotCXNoX2NtdF9zdGFydChwLCBwLT5mbGFnc19zdXNwZW5kKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNoX2NtdF9kZXZfcG1fb3BzID0gewotCS5zdXNwZW5kID0gc2hfY210X3N1c3BlbmQsCi0JLnJlc3VtZSA9IHNoX2NtdF9yZXN1bWUsCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF9jbXRfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2hfY210X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2hfY210X3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInNoX2NtdCIsCi0JCS5wbQk9ICZzaF9jbXRfZGV2X3BtX29wcywKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX210dTIuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfbXR1Mi5jCmluZGV4IDk3M2U3MTQuLjRjOGE3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfbXR1Mi5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfbXR1Mi5jCkBAIC0yMjEsMTUgKzIyMSwxNSBAQAogCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CiAJY2VkLT5zZXRfbW9kZSA9IHNoX210dTJfY2xvY2tfZXZlbnRfbW9kZTsKIAorCXByX2luZm8oInNoX210dTI6ICVzIHVzZWQgZm9yIGNsb2NrIGV2ZW50c1xuIiwgY2VkLT5uYW1lKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKKwogCXJldCA9IHNldHVwX2lycShwLT5pcnFhY3Rpb24uaXJxLCAmcC0+aXJxYWN0aW9uKTsKIAlpZiAocmV0KSB7CiAJCXByX2Vycigic2hfbXR1MjogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAogCQkgICAgICAgcC0+aXJxYWN0aW9uLmlycSk7CiAJCXJldHVybjsKIAl9Ci0KLQlwcl9pbmZvKCJzaF9tdHUyOiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7Ci0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2hfbXR1Ml9yZWdpc3RlcihzdHJ1Y3Qgc2hfbXR1Ml9wcml2ICpwLCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKaW5kZXggOTNjMjMyMi4uOTYxZjViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jCkBAIC0zMjMsMTUgKzMyMywxNSBAQAogCWNlZC0+c2V0X25leHRfZXZlbnQgPSBzaF90bXVfY2xvY2tfZXZlbnRfbmV4dDsKIAljZWQtPnNldF9tb2RlID0gc2hfdG11X2Nsb2NrX2V2ZW50X21vZGU7CiAKKwlwcl9pbmZvKCJzaF90bXU6ICVzIHVzZWQgZm9yIGNsb2NrIGV2ZW50c1xuIiwgY2VkLT5uYW1lKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKKwogCXJldCA9IHNldHVwX2lycShwLT5pcnFhY3Rpb24uaXJxLCAmcC0+aXJxYWN0aW9uKTsKIAlpZiAocmV0KSB7CiAJCXByX2Vycigic2hfdG11OiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsCiAJCSAgICAgICBwLT5pcnFhY3Rpb24uaXJxKTsKIAkJcmV0dXJuOwogCX0KLQotCXByX2luZm8oInNoX3RtdTogJXMgdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLCBjZWQtPm5hbWUpOwotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOwogfQogCiBzdGF0aWMgaW50IHNoX3RtdV9yZWdpc3RlcihzdHJ1Y3Qgc2hfdG11X3ByaXYgKnAsIGNoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKaW5kZXggNDZlODk5YS4uMWMzODQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYwpAQCAtMTI3NCw3ICsxMjc0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgY3J5cHRvNHh4X21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBjcnlwdG80eHhfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlICAgICAgPSAiYW1jYyxwcGM0eHgtY3J5cHRvIix9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYyBiL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jCmluZGV4IDQ4MDExNjIuLmM3YTVhNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2dlb2RlLWFlcy5jCkBAIC0xMzUsMTMgKzEzNSwxMyBAQAogCS8qCiAJICogVGhlIHJlcXVlc3RlZCBrZXkgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEhXLCBkbyBhIGZhbGxiYWNrCiAJICovCi0Jb3AtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7Ci0Jb3AtPmZhbGxiYWNrLmJsay0+YmFzZS5jcnRfZmxhZ3MgfD0gKHRmbS0+Y3J0X2ZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisJb3AtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7CisJb3AtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgfD0gKHRmbS0+Y3J0X2ZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CiAKIAlyZXQgPSBjcnlwdG9fY2lwaGVyX3NldGtleShvcC0+ZmFsbGJhY2suY2lwLCBrZXksIGxlbik7CiAJaWYgKHJldCkgewogCQl0Zm0tPmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVNfTUFTSzsKLQkJdGZtLT5jcnRfZmxhZ3MgfD0gKG9wLT5mYWxsYmFjay5ibGstPmJhc2UuY3J0X2ZsYWdzICYgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CisJCXRmbS0+Y3J0X2ZsYWdzIHw9IChvcC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyAmIENSWVBUT19URk1fUkVTX01BU0spOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAlpZiAoSVNfRVJSKG9wLT5mYWxsYmFjay5jaXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgYWxsb2NhdGluZyBmYWxsYmFjayBhbGdvICVzXG4iLCBuYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIob3AtPmZhbGxiYWNrLmJsayk7CisJCXJldHVybiBQVFJfRVJSKG9wLT5mYWxsYmFjay5jaXApOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jIGIvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jCmluZGV4IGM0N2ZmZTguLmZkNTI5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYworKysgYi9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKQEAgLTE5NTgsNyArMTk1OCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdGFsaXRvc19tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGFsaXRvc19tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAiZnNsLHNlYzIuMCIsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3NoZG1hLmMgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCmluZGV4IGQxMGNjODkuLmI3NWNlOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3NoZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvc2hkbWEuYwpAQCAtNDgsMjMgKzQ4LDIwIEBACiAgKi8KICNkZWZpbmUgUlNfREVGQVVMVCAgKFJTX0RVQUwpCiAKKy8qIEEgYml0bWFzayB3aXRoIGJpdHMgZW5vdWdoIGZvciBlbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hfZG1hZV9zbGF2ZV91c2VkW0JJVFNfVE9fTE9OR1MoU0hETUFfU0xBVkVfTlVNQkVSKV07CisKIHN0YXRpYyB2b2lkIHNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIGJvb2wgYWxsKTsKIAogI2RlZmluZSBTSF9ETUFDX0NIQU5fQkFTRShpZCkgKGRtYV9iYXNlX2FkZHJbaWRdKQogc3RhdGljIHZvaWQgc2hfZG1hZV93cml0ZWwoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfZGMsIHUzMiBkYXRhLCB1MzIgcmVnKQogewotCWN0cmxfb3V0bChkYXRhLCAoU0hfRE1BQ19DSEFOX0JBU0Uoc2hfZGMtPmlkKSArIHJlZykpOworCWN0cmxfb3V0bChkYXRhLCBTSF9ETUFDX0NIQU5fQkFTRShzaF9kYy0+aWQpICsgcmVnKTsKIH0KIAogc3RhdGljIHUzMiBzaF9kbWFlX3JlYWRsKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2RjLCB1MzIgcmVnKQogewotCXJldHVybiBjdHJsX2lubCgoU0hfRE1BQ19DSEFOX0JBU0Uoc2hfZGMtPmlkKSArIHJlZykpOwotfQotCi1zdGF0aWMgdm9pZCBkbWFlX2luaXQoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKLXsKLQl1MzIgY2hjciA9IFJTX0RFRkFVTFQ7IC8qIGRlZmF1bHQgaXMgRFVBTCBtb2RlICovCi0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciwgQ0hDUik7CisJcmV0dXJuIGN0cmxfaW5sKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpOwogfQogCiAvKgpAQCAtOTUsMjcgKzkyLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG1hZV9pc19idXN5KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCitzdGF0aWMgYm9vbCBkbWFlX2lzX2J1c3koc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKIHsKIAl1MzIgY2hjciA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUik7Ci0JaWYgKGNoY3IgJiBDSENSX0RFKSB7Ci0JCWlmICghKGNoY3IgJiBDSENSX1RFKSkKLQkJCXJldHVybiAtRUJVU1k7IC8qIHdvcmtpbmcgKi8KLQl9Ci0JcmV0dXJuIDA7IC8qIHdhaXRpbmcgKi8KKworCWlmICgoY2hjciAmIChDSENSX0RFIHwgQ0hDUl9URSkpID09IENIQ1JfREUpCisJCXJldHVybiB0cnVlOyAvKiB3b3JraW5nICovCisKKwlyZXR1cm4gZmFsc2U7IC8qIHdhaXRpbmcgKi8KIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FsY194bWl0X3NoaWZ0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gPSBUU19TSElGVDsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdCh1MzIgY2hjcikKIHsKLQl1MzIgY2hjciA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUik7Ci0JcmV0dXJuIHRzX3NoaWZ0WyhjaGNyICYgQ0hDUl9UU19NQVNLKSA+PiBDSENSX1RTX1NISUZUXTsKKwlpbnQgY250ID0gKChjaGNyICYgQ0hDUl9UU19MT1dfTUFTSykgPj4gQ0hDUl9UU19MT1dfU0hJRlQpIHwKKwkJKChjaGNyICYgQ0hDUl9UU19ISUdIX01BU0spID4+IENIQ1JfVFNfSElHSF9TSElGVCk7CisKKwlyZXR1cm4gdHNfc2hpZnRbY250XTsKIH0KIAogc3RhdGljIHZvaWQgZG1hZV9zZXRfcmVnKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHN0cnVjdCBzaF9kbWFlX3JlZ3MgKmh3KQogewogCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LT5zYXIsIFNBUik7CiAJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPmRhciwgREFSKTsKLQlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody0+dGNyID4+IGNhbGNfeG1pdF9zaGlmdChzaF9jaGFuKSwgVENSKTsKKwlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody0+dGNyID4+IHNoX2NoYW4tPnhtaXRfc2hpZnQsIFRDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfc3RhcnQoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKQEAgLTEyMyw3ICsxMjMsNyBAQAogCXUzMiBjaGNyID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBDSENSKTsKIAogCWNoY3IgfD0gQ0hDUl9ERSB8IENIQ1JfSUU7Ci0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciwgQ0hDUik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciAmIH5DSENSX1RFLCBDSENSKTsKIH0KIAogc3RhdGljIHZvaWQgZG1hZV9oYWx0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCkBAIC0xMzQsNTUgKzEzNCw1MCBAQAogCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IsIENIQ1IpOwogfQogCitzdGF0aWMgdm9pZCBkbWFlX2luaXQoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKK3sKKwl1MzIgY2hjciA9IFJTX0RFRkFVTFQ7IC8qIGRlZmF1bHQgaXMgRFVBTCBtb2RlICovCisJc2hfY2hhbi0+eG1pdF9zaGlmdCA9IGNhbGNfeG1pdF9zaGlmdChjaGNyKTsKKwlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBjaGNyLCBDSENSKTsKK30KKwogc3RhdGljIGludCBkbWFlX3NldF9jaGNyKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHUzMiB2YWwpCiB7Ci0JaW50IHJldCA9IGRtYWVfaXNfYnVzeShzaF9jaGFuKTsKIAkvKiBXaGVuIERNQSB3YXMgd29ya2luZywgY2FuIG5vdCBzZXQgZGF0YSB0byBDSENSICovCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpZiAoZG1hZV9pc19idXN5KHNoX2NoYW4pKQorCQlyZXR1cm4gLUVCVVNZOwogCisJc2hfY2hhbi0+eG1pdF9zaGlmdCA9IGNhbGNfeG1pdF9zaGlmdCh2YWwpOwogCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIHZhbCwgQ0hDUik7CisKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBETUFSUzFfQUREUgkweDA0Ci0jZGVmaW5lIERNQVJTMl9BRERSCTB4MDgKLSNkZWZpbmUgRE1BUlNfU0hJRlQgOAotI2RlZmluZSBETUFSU19DSEFOX01TSyAweDAxCisjZGVmaW5lIERNQVJTX1NISUZUCTgKKyNkZWZpbmUgRE1BUlNfQ0hBTl9NU0sJMHgwMQogc3RhdGljIGludCBkbWFlX3NldF9kbWFycyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MTYgdmFsKQogewogCXUzMiBhZGRyOwogCWludCBzaGlmdCA9IDA7Ci0JaW50IHJldCA9IGRtYWVfaXNfYnVzeShzaF9jaGFuKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCisJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChzaF9jaGFuLT5pZCAmIERNQVJTX0NIQU5fTVNLKQogCQlzaGlmdCA9IERNQVJTX1NISUZUOwogCi0Jc3dpdGNoIChzaF9jaGFuLT5pZCkgewotCS8qIERNQVJTMCAqLwotCWNhc2UgMDoKLQljYXNlIDE6Ci0JCWFkZHIgPSBTSF9ETUFSU19CQVNFOwotCQlicmVhazsKLQkvKiBETUFSUzEgKi8KLQljYXNlIDI6Ci0JY2FzZSAzOgotCQlhZGRyID0gKFNIX0RNQVJTX0JBU0UgKyBETUFSUzFfQUREUik7Ci0JCWJyZWFrOwotCS8qIERNQVJTMiAqLwotCWNhc2UgNDoKLQljYXNlIDU6Ci0JCWFkZHIgPSAoU0hfRE1BUlNfQkFTRSArIERNQVJTMl9BRERSKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwlpZiAoc2hfY2hhbi0+aWQgPCA2KQorCQkvKiBETUEwUlMwIC0gRE1BMFJTMiAqLworCQlhZGRyID0gU0hfRE1BUlNfQkFTRTAgKyAoc2hfY2hhbi0+aWQgLyAyKSAqIDQ7CisjaWZkZWYgU0hfRE1BUlNfQkFTRTEKKwllbHNlIGlmIChzaF9jaGFuLT5pZCA8IDEyKQorCQkvKiBETUExUlMwIC0gRE1BMVJTMiAqLworCQlhZGRyID0gU0hfRE1BUlNfQkFTRTEgKyAoKHNoX2NoYW4tPmlkIC0gNikgLyAyKSAqIDQ7CisjZW5kaWYKKwllbHNlCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAotCWN0cmxfb3V0dygodmFsIDw8IHNoaWZ0KSB8Ci0JCShjdHJsX2ludyhhZGRyKSAmIChzaGlmdCA/IDB4RkYwMCA6IDB4MDBGRikpLAotCQlhZGRyKTsKKwljdHJsX291dHcoKHZhbCA8PCBzaGlmdCkgfCAoY3RybF9pbncoYWRkcikgJiAoMHhGRjAwID4+IHNoaWZ0KSksIGFkZHIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTAsMTAgKzI0NSw1MyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnICpzaF9kbWFlX2ZpbmRfc2xhdmUoCisJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgc2xhdmVfaWQpCit7CisJc3RydWN0IGRtYV9kZXZpY2UgKmRtYV9kZXYgPSBzaF9jaGFuLT5jb21tb24uZGV2aWNlOworCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSBjb250YWluZXJfb2YoZG1hX2RldiwKKwkJCQkJc3RydWN0IHNoX2RtYWVfZGV2aWNlLCBjb21tb24pOworCXN0cnVjdCBzaF9kbWFlX3BkYXRhICpwZGF0YSA9ICZzaGRldi0+cGRhdGE7CisJaW50IGk7CisKKwlpZiAoKHVuc2lnbmVkKXNsYXZlX2lkID49IFNIRE1BX1NMQVZFX05VTUJFUikKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPmNvbmZpZ19udW07IGkrKykKKwkJaWYgKHBkYXRhLT5jb25maWdbaV0uc2xhdmVfaWQgPT0gc2xhdmVfaWQpCisJCQlyZXR1cm4gcGRhdGEtPmNvbmZpZyArIGk7CisKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGludCBzaF9kbWFlX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKIAlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYzsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSAqcGFyYW0gPSBjaGFuLT5wcml2YXRlOworCisJLyoKKwkgKiBUaGlzIHJlbGllcyBvbiB0aGUgZ3VhcmFudGVlIGZyb20gZG1hZW5naW5lIHRoYXQgYWxsb2NfY2hhbl9yZXNvdXJjZXMKKwkgKiBuZXZlciBydW5zIGNvbmN1cnJlbnRseSB3aXRoIGl0c2VsZiBvciBmcmVlX2NoYW5fcmVzb3VyY2VzLgorCSAqLworCWlmIChwYXJhbSkgeworCQlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgKmNmZzsKKworCQljZmcgPSBzaF9kbWFlX2ZpbmRfc2xhdmUoc2hfY2hhbiwgcGFyYW0tPnNsYXZlX2lkKTsKKwkJaWYgKCFjZmcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAodGVzdF9hbmRfc2V0X2JpdChwYXJhbS0+c2xhdmVfaWQsIHNoX2RtYWVfc2xhdmVfdXNlZCkpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCXBhcmFtLT5jb25maWcgPSBjZmc7CisKKwkJZG1hZV9zZXRfZG1hcnMoc2hfY2hhbiwgY2ZnLT5taWRfcmlkKTsKKwkJZG1hZV9zZXRfY2hjcihzaF9jaGFuLCBjZmctPmNoY3IpOworCX0gZWxzZSB7CisJCWlmICgoc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBDSENSKSAmIDB4NzAwKSAhPSAweDQwMCkKKwkJCWRtYWVfc2V0X2NoY3Ioc2hfY2hhbiwgUlNfREVGQVVMVCk7CisJfQogCiAJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCXdoaWxlIChzaF9jaGFuLT5kZXNjc19hbGxvY2F0ZWQgPCBOUl9ERVNDU19QRVJfQ0hBTk5FTCkgewpAQCAtMjg2LDEwICszMjQsMTggQEAKIAlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYywgKl9kZXNjOwogCUxJU1RfSEVBRChsaXN0KTsKIAorCWRtYWVfaGFsdChzaF9jaGFuKTsKKwogCS8qIFByZXBhcmVkIGFuZCBub3Qgc3VibWl0dGVkIGRlc2NyaXB0b3JzIGNhbiBzdGlsbCBiZSBvbiB0aGUgcXVldWUgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJnNoX2NoYW4tPmxkX3F1ZXVlKSkKIAkJc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc2hfY2hhbiwgdHJ1ZSk7CiAKKwlpZiAoY2hhbi0+cHJpdmF0ZSkgeworCQkvKiBUaGUgY2FsbGVyIGlzIGhvbGRpbmcgZG1hX2xpc3RfbXV0ZXggKi8KKwkJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtID0gY2hhbi0+cHJpdmF0ZTsKKwkJY2xlYXJfYml0KHBhcmFtLT5zbGF2ZV9pZCwgc2hfZG1hZV9zbGF2ZV91c2VkKTsKKwl9CisKIAlzcGluX2xvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CiAKIAlsaXN0X3NwbGljZV9pbml0KCZzaF9jaGFuLT5sZF9mcmVlLCAmbGlzdCk7CkBAIC0zMDEsMjMgKzM0Nyw5NyBAQAogCQlrZnJlZShkZXNjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqc2hfZG1hZV9wcmVwX21lbWNweSgKLQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZG1hX2Rlc3QsIGRtYV9hZGRyX3QgZG1hX3NyYywKLQlzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorLyoqCisgKiBzaF9kbWFlX2FkZF9kZXNjIC0gZ2V0LCBzZXQgdXAgYW5kIHJldHVybiBvbmUgdHJhbnNmZXIgZGVzY3JpcHRvcgorICogQHNoX2NoYW46CURNQSBjaGFubmVsCisgKiBAZmxhZ3M6CURNQSB0cmFuc2ZlciBmbGFncworICogQGRlc3Q6CWRlc3RpbmF0aW9uIERNQSBhZGRyZXNzLCBpbmNyZW1lbnRlZCB3aGVuIGRpcmVjdGlvbiBlcXVhbHMKKyAqCQlETUFfRlJPTV9ERVZJQ0Ugb3IgRE1BX0JJRElSRUNUSU9OQUwKKyAqIEBzcmM6CXNvdXJjZSBETUEgYWRkcmVzcywgaW5jcmVtZW50ZWQgd2hlbiBkaXJlY3Rpb24gZXF1YWxzCisgKgkJRE1BX1RPX0RFVklDRSBvciBETUFfQklESVJFQ1RJT05BTAorICogQGxlbjoJRE1BIHRyYW5zZmVyIGxlbmd0aAorICogQGZpcnN0OglpZiBOVUxMLCBzZXQgdG8gdGhlIGN1cnJlbnQgZGVzY3JpcHRvciBhbmQgY29va2llIHNldCB0byAtRUJVU1kKKyAqIEBkaXJlY3Rpb246CW5lZWRlZCBmb3Igc2xhdmUgRE1BIHRvIGRlY2lkZSB3aGljaCBhZGRyZXNzIHRvIGtlZXAgY29uc3RhbnQsCisgKgkJZXF1YWxzIERNQV9CSURJUkVDVElPTkFMIGZvciBNRU1DUFkKKyAqIFJldHVybnMgMCBvciBhbiBlcnJvcgorICogTG9ja3M6IGNhbGxlZCB3aXRoIGRlc2NfbG9jayBoZWxkCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfZGVzYyAqc2hfZG1hZV9hZGRfZGVzYyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGRtYV9hZGRyX3QgKmRlc3QsIGRtYV9hZGRyX3QgKnNyYywgc2l6ZV90ICpsZW4sCisJc3RydWN0IHNoX2Rlc2MgKipmaXJzdCwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW47Ci0Jc3RydWN0IHNoX2Rlc2MgKmZpcnN0ID0gTlVMTCwgKnByZXYgPSBOVUxMLCAqbmV3OworCXN0cnVjdCBzaF9kZXNjICpuZXc7CiAJc2l6ZV90IGNvcHlfc2l6ZTsKKworCWlmICghKmxlbikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBBbGxvY2F0ZSB0aGUgbGluayBkZXNjcmlwdG9yIGZyb20gdGhlIGZyZWUgbGlzdCAqLworCW5ldyA9IHNoX2RtYWVfZ2V0X2Rlc2Moc2hfY2hhbik7CisJaWYgKCFuZXcpIHsKKwkJZGV2X2VycihzaF9jaGFuLT5kZXYsICJObyBmcmVlIGxpbmsgZGVzY3JpcHRvciBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljb3B5X3NpemUgPSBtaW4oKmxlbiwgKHNpemVfdClTSF9ETUFfVENSX01BWCArIDEpOworCisJbmV3LT5ody5zYXIgPSAqc3JjOworCW5ldy0+aHcuZGFyID0gKmRlc3Q7CisJbmV3LT5ody50Y3IgPSBjb3B5X3NpemU7CisKKwlpZiAoISpmaXJzdCkgeworCQkvKiBGaXJzdCBkZXNjICovCisJCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVCVVNZOworCQkqZmlyc3QgPSBuZXc7CisJfSBlbHNlIHsKKwkJLyogT3RoZXIgZGVzYyAtIGludmlzaWJsZSB0byB0aGUgdXNlciAqLworCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhzaF9jaGFuLT5kZXYsCisJCSJjaGFpbmluZyAoJXUvJXUpQCV4IC0+ICV4IHdpdGggJXAsIGNvb2tpZSAlZCwgc2hpZnQgJWRcbiIsCisJCWNvcHlfc2l6ZSwgKmxlbiwgKnNyYywgKmRlc3QsICZuZXctPmFzeW5jX3R4LAorCQluZXctPmFzeW5jX3R4LmNvb2tpZSwgc2hfY2hhbi0+eG1pdF9zaGlmdCk7CisKKwluZXctPm1hcmsgPSBERVNDX1BSRVBBUkVEOworCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKKwluZXctPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKworCSpsZW4gLT0gY29weV9zaXplOworCWlmIChkaXJlY3Rpb24gPT0gRE1BX0JJRElSRUNUSU9OQUwgfHwgZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCSpzcmMgKz0gY29weV9zaXplOworCWlmIChkaXJlY3Rpb24gPT0gRE1BX0JJRElSRUNUSU9OQUwgfHwgZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKKwkJKmRlc3QgKz0gY29weV9zaXplOworCisJcmV0dXJuIG5ldzsKK30KKworLyoKKyAqIHNoX2RtYWVfcHJlcF9zZyAtIHByZXBhcmUgdHJhbnNmZXIgZGVzY3JpcHRvcnMgZnJvbSBhbiBTRyBsaXN0CisgKgorICogQ29tbW9uIHJvdXRpbmUgZm9yIHB1YmxpYyAoTUVNQ1BZKSBhbmQgc2xhdmUgRE1BLiBUaGUgTUVNQ1BZIGNhc2UgaXMgYWxzbworICogY29udmVydGVkIHRvIHNjYXR0ZXItZ2F0aGVyIHRvIGd1YXJhbnRlZSBjb25zaXN0ZW50IGxvY2tpbmcgYW5kIGEgY29ycmVjdAorICogbGlzdCBtYW5pcHVsYXRpb24uIEZvciBzbGF2ZSBETUEgZGlyZWN0aW9uIGNhcnJpZXMgdGhlIHVzdWFsIG1lYW5pbmcsIGFuZCwKKyAqIGxvZ2ljYWxseSwgdGhlIFNHIGxpc3QgaXMgUkFNIGFuZCB0aGUgYWRkciB2YXJpYWJsZSBjb250YWlucyBzbGF2ZSBhZGRyZXNzLAorICogZS5nLiwgdGhlIEZJRk8gSS9PIHJlZ2lzdGVyLiBGb3IgTUVNQ1BZIGRpcmVjdGlvbiBlcXVhbHMgRE1BX0JJRElSRUNUSU9OQUwKKyAqIGFuZCB0aGUgU0cgbGlzdCBjb250YWlucyBvbmx5IG9uZSBlbGVtZW50IGFuZCBwb2ludHMgYXQgdGhlIHNvdXJjZSBidWZmZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9zZyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLAorCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2dfbGVuLCBkbWFfYWRkcl90ICphZGRyLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBzaF9kZXNjICpmaXJzdCA9IE5VTEwsICpuZXcgPSBOVUxMIC8qIGNvbXBpbGVyLi4uICovOwogCUxJU1RfSEVBRCh0eF9saXN0KTsKLQlpbnQgY2h1bmtzID0gKGxlbiArIFNIX0RNQV9UQ1JfTUFYKSAvIChTSF9ETUFfVENSX01BWCArIDEpOworCWludCBjaHVua3MgPSAwOworCWludCBpOwogCi0JaWYgKCFjaGFuKQorCWlmICghc2dfbGVuKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICghbGVuKQotCQlyZXR1cm4gTlVMTDsKLQotCXNoX2NoYW4gPSB0b19zaF9jaGFuKGNoYW4pOworCWZvcl9lYWNoX3NnKHNnbCwgc2csIHNnX2xlbiwgaSkKKwkJY2h1bmtzICs9IChzZ19kbWFfbGVuKHNnKSArIFNIX0RNQV9UQ1JfTUFYKSAvCisJCQkoU0hfRE1BX1RDUl9NQVggKyAxKTsKIAogCS8qIEhhdmUgdG8gbG9jayB0aGUgd2hvbGUgbG9vcCB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCByZWxlYXNlICovCiAJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwpAQCAtMzMzLDQ5ICs0NTMsMzIgQEAKIAkgKglvbmx5IGR1cmluZyB0aGlzIGZ1bmN0aW9uLCB0aGVuIHRoZXkgYXJlIGltbWVkaWF0ZWx5IHNwbGljZWQKIAkgKgliYWNrIG9udG8gdGhlIGZyZWUgbGlzdCBpbiBmb3JtIG9mIGEgY2hhaW4KIAkgKi8KLQlkbyB7Ci0JCS8qIEFsbG9jYXRlIHRoZSBsaW5rIGRlc2NyaXB0b3IgZnJvbSB0aGUgZnJlZSBsaXN0ICovCi0JCW5ldyA9IHNoX2RtYWVfZ2V0X2Rlc2Moc2hfY2hhbik7Ci0JCWlmICghbmV3KSB7Ci0JCQlkZXZfZXJyKHNoX2NoYW4tPmRldiwKLQkJCQkiTm8gZnJlZSBtZW1vcnkgZm9yIGxpbmsgZGVzY3JpcHRvclxuIik7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldywgJnR4X2xpc3QsIG5vZGUpCi0JCQkJbmV3LT5tYXJrID0gREVTQ19JRExFOwotCQkJbGlzdF9zcGxpY2UoJnR4X2xpc3QsICZzaF9jaGFuLT5sZF9mcmVlKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19sZW4sIGkpIHsKKwkJZG1hX2FkZHJfdCBzZ19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQlzaXplX3QgbGVuID0gc2dfZG1hX2xlbihzZyk7CiAKLQkJY29weV9zaXplID0gbWluKGxlbiwgKHNpemVfdClTSF9ETUFfVENSX01BWCArIDEpOworCQlpZiAoIWxlbikKKwkJCWdvdG8gZXJyX2dldF9kZXNjOwogCi0JCW5ldy0+aHcuc2FyID0gZG1hX3NyYzsKLQkJbmV3LT5ody5kYXIgPSBkbWFfZGVzdDsKLQkJbmV3LT5ody50Y3IgPSBjb3B5X3NpemU7Ci0JCWlmICghZmlyc3QpIHsKLQkJCS8qIEZpcnN0IGRlc2MgKi8KLQkJCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVCVVNZOwotCQkJZmlyc3QgPSBuZXc7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBPdGhlciBkZXNjIC0gaW52aXNpYmxlIHRvIHRoZSB1c2VyICovCi0JCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FSU5WQUw7Ci0JCX0KKwkJZG8geworCQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsICJBZGQgU0cgIyVkQCVwWyVkXSwgZG1hICVsbHhcbiIsCisJCQkJaSwgc2csIGxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZ19hZGRyKTsKIAotCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwKLQkJCSJjaGFpbmluZyAldSBvZiAldSB3aXRoICVwLCBkc3QgJXgsIGNvb2tpZSAlZFxuIiwKLQkJCWNvcHlfc2l6ZSwgbGVuLCAmbmV3LT5hc3luY190eCwgZG1hX2Rlc3QsCi0JCQluZXctPmFzeW5jX3R4LmNvb2tpZSk7CisJCQlpZiAoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKKwkJCQluZXcgPSBzaF9kbWFlX2FkZF9kZXNjKHNoX2NoYW4sIGZsYWdzLAorCQkJCQkJJnNnX2FkZHIsIGFkZHIsICZsZW4sICZmaXJzdCwKKwkJCQkJCWRpcmVjdGlvbik7CisJCQllbHNlCisJCQkJbmV3ID0gc2hfZG1hZV9hZGRfZGVzYyhzaF9jaGFuLCBmbGFncywKKwkJCQkJCWFkZHIsICZzZ19hZGRyLCAmbGVuLCAmZmlyc3QsCisJCQkJCQlkaXJlY3Rpb24pOworCQkJaWYgKCFuZXcpCisJCQkJZ290byBlcnJfZ2V0X2Rlc2M7CiAKLQkJbmV3LT5tYXJrID0gREVTQ19QUkVQQVJFRDsKLQkJbmV3LT5hc3luY190eC5mbGFncyA9IGZsYWdzOwotCQluZXctPmNodW5rcyA9IGNodW5rcy0tOwotCi0JCXByZXYgPSBuZXc7Ci0JCWxlbiAtPSBjb3B5X3NpemU7Ci0JCWRtYV9zcmMgKz0gY29weV9zaXplOwotCQlkbWFfZGVzdCArPSBjb3B5X3NpemU7Ci0JCS8qIEluc2VydCB0aGUgbGluayBkZXNjcmlwdG9yIHRvIHRoZSBMRCByaW5nICovCi0JCWxpc3RfYWRkX3RhaWwoJm5ldy0+bm9kZSwgJnR4X2xpc3QpOwotCX0gd2hpbGUgKGxlbik7CisJCQluZXctPmNodW5rcyA9IGNodW5rcy0tOworCQkJbGlzdF9hZGRfdGFpbCgmbmV3LT5ub2RlLCAmdHhfbGlzdCk7CisJCX0gd2hpbGUgKGxlbik7CisJfQogCiAJaWYgKG5ldyAhPSBmaXJzdCkKIAkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRU5PU1BDOwpAQCAtMzg2LDYgKzQ4OSw3NyBAQAogCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCiAJcmV0dXJuICZmaXJzdC0+YXN5bmNfdHg7CisKK2Vycl9nZXRfZGVzYzoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldywgJnR4X2xpc3QsIG5vZGUpCisJCW5ldy0+bWFyayA9IERFU0NfSURMRTsKKwlsaXN0X3NwbGljZSgmdHhfbGlzdCwgJnNoX2NoYW4tPmxkX2ZyZWUpOworCisJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqc2hfZG1hZV9wcmVwX21lbWNweSgKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZG1hX2Rlc3QsIGRtYV9hZGRyX3QgZG1hX3NyYywKKwlzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW47CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJaWYgKCFjaGFuIHx8ICFsZW4pCisJCXJldHVybiBOVUxMOworCisJY2hhbi0+cHJpdmF0ZSA9IE5VTEw7CisKKwlzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKworCXNnX2luaXRfdGFibGUoJnNnLCAxKTsKKwlzZ19zZXRfcGFnZSgmc2csIHBmbl90b19wYWdlKFBGTl9ET1dOKGRtYV9zcmMpKSwgbGVuLAorCQkgICAgb2Zmc2V0X2luX3BhZ2UoZG1hX3NyYykpOworCXNnX2RtYV9hZGRyZXNzKCZzZykgPSBkbWFfc3JjOworCXNnX2RtYV9sZW4oJnNnKSA9IGxlbjsKKworCXJldHVybiBzaF9kbWFlX3ByZXBfc2coc2hfY2hhbiwgJnNnLCAxLCAmZG1hX2Rlc3QsIERNQV9CSURJUkVDVElPTkFMLAorCQkJICAgICAgIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqc2hfZG1hZV9wcmVwX3NsYXZlX3NnKAorCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBzZ19sZW4sCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbTsKKwlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuOworCisJaWYgKCFjaGFuKQorCQlyZXR1cm4gTlVMTDsKKworCXNoX2NoYW4gPSB0b19zaF9jaGFuKGNoYW4pOworCXBhcmFtID0gY2hhbi0+cHJpdmF0ZTsKKworCS8qIFNvbWVvbmUgY2FsbGluZyBzbGF2ZSBETUEgb24gYSBwdWJsaWMgY2hhbm5lbD8gKi8KKwlpZiAoIXBhcmFtIHx8ICFzZ19sZW4pIHsKKwkJZGV2X3dhcm4oc2hfY2hhbi0+ZGV2LCAiJXM6IGJhZCBwYXJhbWV0ZXI6ICVwLCAlZCwgJWRcbiIsCisJCQkgX19mdW5jX18sIHBhcmFtLCBzZ19sZW4sIHBhcmFtID8gcGFyYW0tPnNsYXZlX2lkIDogLTEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIGlmIChwYXJhbSAhPSBOVUxMKSwgdGhpcyBpcyBhIHN1Y2Nlc3NmdWxseSByZXF1ZXN0ZWQgc2xhdmUgY2hhbm5lbCwKKwkgKiB0aGVyZWZvcmUgcGFyYW0tPmNvbmZpZyAhPSBOVUxMIHRvby4KKwkgKi8KKwlyZXR1cm4gc2hfZG1hZV9wcmVwX3NnKHNoX2NoYW4sIHNnbCwgc2dfbGVuLCAmcGFyYW0tPmNvbmZpZy0+YWRkciwKKwkJCSAgICAgICBkaXJlY3Rpb24sIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2hfZG1hZV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKworCWlmICghY2hhbikKKwkJcmV0dXJuOworCisJc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc2hfY2hhbiwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBkbWFfYXN5bmNfdHhfY2FsbGJhY2sgX19sZF9jbGVhbnVwKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIGJvb2wgYWxsKQpAQCAtNDE5LDcgKzU5MywxMSBAQAogCQkJY29va2llID0gdHgtPmNvb2tpZTsKIAogCQlpZiAoZGVzYy0+bWFyayA9PSBERVNDX0NPTVBMRVRFRCAmJiBkZXNjLT5jaHVua3MgPT0gMSkgewotCQkJQlVHX09OKHNoX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgIT0gZGVzYy0+Y29va2llIC0gMSk7CisJCQlpZiAoc2hfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSAhPSBkZXNjLT5jb29raWUgLSAxKQorCQkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LAorCQkJCQkiQ29tcGxldGluZyBjb29raWUgJWQsIGV4cGVjdGVkICVkXG4iLAorCQkJCQlkZXNjLT5jb29raWUsCisJCQkJCXNoX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgKyAxKTsKIAkJCXNoX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgPSBkZXNjLT5jb29raWU7CiAJCX0KIApAQCAtNDkyLDcgKzY3MCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBGaW5kIHRoZSBmaXJzdCB1bi10cmFuc2ZlciBkZXNjaXB0b3IgKi8KKwkvKiBGaW5kIHRoZSBmaXJzdCBub3QgdHJhbnNmZXJyZWQgZGVzY2lwdG9yICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKQogCQlpZiAoc2QtPm1hcmsgPT0gREVTQ19TVUJNSVRURUQpIHsKIAkJCS8qIEdldCB0aGUgbGQgc3RhcnQgYWRkcmVzcyBmcm9tIGxkX3F1ZXVlICovCkBAIC01NTksNyArNzM3LDcgQEAKIAogCS8qIElSUSBNdWx0aSAqLwogCWlmIChzaGRldi0+cGRhdGEubW9kZSAmIFNIRE1BX01JWF9JUlEpIHsKLQkJaW50IGNudCA9IDA7CisJCWludCBfX21heWJlX3VudXNlZCBjbnQgPSAwOwogCQlzd2l0Y2ggKGlycSkgewogI2lmIGRlZmluZWQoRE1URTZfSVJRKSAmJiBkZWZpbmVkKERNQUUxX0lSUSkKIAkJY2FzZSBETVRFNl9JUlE6CkBAIC01OTYsMTEgKzc3NCwxNCBAQAogCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4gPSAoc3RydWN0IHNoX2RtYWVfY2hhbiAqKWRhdGE7CiAJc3RydWN0IHNoX2Rlc2MgKmRlc2M7CiAJdTMyIHNhcl9idWYgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIFNBUik7CisJdTMyIGRhcl9idWYgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIERBUik7CiAKIAlzcGluX2xvY2soJnNoX2NoYW4tPmRlc2NfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmc2hfY2hhbi0+bGRfcXVldWUsIG5vZGUpIHsKLQkJaWYgKChkZXNjLT5ody5zYXIgKyBkZXNjLT5ody50Y3IpID09IHNhcl9idWYgJiYKLQkJICAgIGRlc2MtPm1hcmsgPT0gREVTQ19TVUJNSVRURUQpIHsKKwkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19TVUJNSVRURUQgJiYKKwkJICAgICgoZGVzYy0+ZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSAmJgorCQkgICAgICAoZGVzYy0+aHcuZGFyICsgZGVzYy0+aHcudGNyKSA9PSBkYXJfYnVmKSB8fAorCQkgICAgIChkZXNjLT5ody5zYXIgKyBkZXNjLT5ody50Y3IpID09IHNhcl9idWYpKSB7CiAJCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwgImRvbmUgIyVkQCVwIGRzdCAldVxuIiwKIAkJCQlkZXNjLT5hc3luY190eC5jb29raWUsICZkZXNjLT5hc3luY190eCwKIAkJCQlkZXNjLT5ody5kYXIpOwpAQCAtNjczLDcgKzg1NCw3IEBACiAJfQogCiAJc25wcmludGYobmV3X3NoX2NoYW4tPmRldl9pZCwgc2l6ZW9mKG5ld19zaF9jaGFuLT5kZXZfaWQpLAotCQkJInNoLWRtYWUlZCIsIG5ld19zaF9jaGFuLT5pZCk7CisJCSAic2gtZG1hZSVkIiwgbmV3X3NoX2NoYW4tPmlkKTsKIAogCS8qIHNldCB1cCBjaGFubmVsIGlycSAqLwogCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgJnNoX2RtYWVfaW50ZXJydXB0LCBpcnFmbGFncywKQEAgLTY4NCwxMSArODY1LDYgQEAKIAkJZ290byBlcnJfbm9faXJxOwogCX0KIAotCS8qIENIQ1IgcmVnaXN0ZXIgY29udHJvbCBmdW5jdGlvbiAqLwotCW5ld19zaF9jaGFuLT5zZXRfY2hjciA9IGRtYWVfc2V0X2NoY3I7Ci0JLyogRE1BUlMgcmVnaXN0ZXIgY29udHJvbCBmdW5jdGlvbiAqLwotCW5ld19zaF9jaGFuLT5zZXRfZG1hcnMgPSBkbWFlX3NldF9kbWFyczsKLQogCXNoZGV2LT5jaGFuW2lkXSA9IG5ld19zaF9jaGFuOwogCXJldHVybiAwOwogCkBAIC03NTksMTIgKzkzNSwxOSBAQAogCUlOSVRfTElTVF9IRUFEKCZzaGRldi0+Y29tbW9uLmNoYW5uZWxzKTsKIAogCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIHNoZGV2LT5jb21tb24uY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgc2hkZXYtPmNvbW1vbi5jYXBfbWFzayk7CisKIAlzaGRldi0+Y29tbW9uLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcwogCQk9IHNoX2RtYWVfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9IHNoX2RtYWVfZnJlZV9jaGFuX3Jlc291cmNlczsKIAlzaGRldi0+Y29tbW9uLmRldmljZV9wcmVwX2RtYV9tZW1jcHkgPSBzaF9kbWFlX3ByZXBfbWVtY3B5OwogCXNoZGV2LT5jb21tb24uZGV2aWNlX2lzX3R4X2NvbXBsZXRlID0gc2hfZG1hZV9pc19jb21wbGV0ZTsKIAlzaGRldi0+Y29tbW9uLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gc2hfZG1hZV9tZW1jcHlfaXNzdWVfcGVuZGluZzsKKworCS8qIENvbXB1bHNvcnkgZm9yIERNQV9TTEFWRSBmaWVsZHMgKi8KKwlzaGRldi0+Y29tbW9uLmRldmljZV9wcmVwX3NsYXZlX3NnID0gc2hfZG1hZV9wcmVwX3NsYXZlX3NnOworCXNoZGV2LT5jb21tb24uZGV2aWNlX3Rlcm1pbmF0ZV9hbGwgPSBzaF9kbWFlX3Rlcm1pbmF0ZV9hbGw7CisKIAlzaGRldi0+Y29tbW9uLmRldiA9ICZwZGV2LT5kZXY7CiAJLyogRGVmYXVsdCB0cmFuc2ZlciBzaXplIG9mIDMyIGJ5dGVzIHJlcXVpcmVzIDMyLWJ5dGUgYWxpZ25tZW50ICovCiAJc2hkZXYtPmNvbW1vbi5jb3B5X2FsaWduID0gNTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3NoZG1hLmggYi9kcml2ZXJzL2RtYS9zaGRtYS5oCmluZGV4IDEwOGYxY2YuLjdlMjI3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3NoZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvc2hkbWEuaApAQCAtMjksNiArMjksNyBAQAogCXN0cnVjdCBzaF9kbWFlX3JlZ3MgaHc7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciBhc3luY190eDsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CiAJZG1hX2Nvb2tpZV90IGNvb2tpZTsKIAlpbnQgY2h1bmtzOwogCWludCBtYXJrOwpAQCAtNDUsMTMgKzQ2LDkgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CQkvKiBDaGFubmVsIGRldmljZSAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwkvKiBUYXNrbGV0ICovCiAJaW50IGRlc2NzX2FsbG9jYXRlZDsJCS8qIGRlc2MgY291bnQgKi8KKwlpbnQgeG1pdF9zaGlmdDsJCQkvKiBsb2dfMihieXRlc19wZXJfeGZlcikgKi8KIAlpbnQgaWQ7CQkJCS8qIFJhdyBpZCBvZiB0aGlzIGNoYW5uZWwgKi8KIAljaGFyIGRldl9pZFsxNl07CQkvKiB1bmlxdWUgbmFtZSBwZXIgRE1BQyBvZiBjaGFubmVsICovCi0KLQkvKiBTZXQgY2hjciAqLwotCWludCAoKnNldF9jaGNyKShzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MzIgcmVncyk7Ci0JLyogU2V0IERNQSByZXNvdXJjZSAqLwotCWludCAoKnNldF9kbWFycykoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTE2IHJlcyk7CiB9OwogCiBzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwppbmRleCAwNTFkMWViLi5mODJiY2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJdm9pZCAqaWJmdF9sb2MgPSBlbnRyeS0+aGVhZGVyOwogCWNoYXIgKnN0ciA9IGJ1ZjsKIAljaGFyICptYWM7Ci0JaW50IHZhbDsKKwlfX2JlMzIgdmFsOwogCiAJaWYgKCFuaWMpCiAJCXJldHVybiAwOwpAQCAtMzk3LDEwICszOTcsOCBAQAogCQlzdHIgKz0gc3ByaW50Zl9pcGFkZHIoc3RyLCBuaWMtPmlwX2FkZHIpOwogCQlicmVhazsKIAljYXNlIGliZnRfZXRoX3N1Ym5ldF9tYXNrOgotCQl2YWwgPSB+KCgxIDw8ICgzMi1uaWMtPnN1Ym5ldF9tYXNrX3ByZWZpeCkpLTEpOwotCQlzdHIgKz0gc3ByaW50ZihzdHIsIE5JUFFVQURfRk1ULAotCQkJICAgICAgICh1OCkodmFsID4+IDI0KSwgKHU4KSh2YWwgPj4gMTYpLAotCQkJICAgICAgICh1OCkodmFsID4+IDgpLCAodTgpKHZhbCkpOworCQl2YWwgPSBjcHVfdG9fYmUzMih+KCgxIDw8ICgzMi1uaWMtPnN1Ym5ldF9tYXNrX3ByZWZpeCkpLTEpKTsKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiJXBJNCIsICZ2YWwpOwogCQlicmVhazsKIAljYXNlIGliZnRfZXRoX29yaWdpbjoKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIG5pYy0+b3JpZ2luKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwppbmRleCBlN2IxOTQ0Li4yMmQ0NzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCkBAIC0xMjc5LDQ3ICsxMjc5LDQ3IEBACiAJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IHJhZGVvbl9jb25uZWN0b3JfdGFibGU7CiAJaWYgKHJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPT0gQ1RfTk9ORSkgewogI2lmZGVmIENPTkZJR19QUENfUE1BQwotCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDMiKSkgeworCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDMiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggVkdBICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfUE9XRVJCT09LX1ZHQTsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNCIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDUiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggaW50ZXJuYWwgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19JTlRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMSIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMiIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNCIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDEiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDIiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDMiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDQiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDUiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggZXh0ZXJuYWwgc2luZ2xlIGxpbmsgdG1kcyAoc2lsMTY0KSAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNiIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDYiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggZXh0ZXJuYWwgZHVhbCBvciBzaW5nbGUgbGluayB0bWRzICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfUE9XRVJCT09LX0VYVEVSTkFMOwotCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw3IikgfHwKLQkJCSAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw4IikgfHwKLQkJCSAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw5IikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNyIpIHx8CisJCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOCIpIHx8CisJCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOSIpKSB7CiAJCQkvKiBQb3dlckJvb2s2LDIgPyAqLwogCQkJLyogcG93ZXJib29rIHdpdGggZXh0ZXJuYWwgZHVhbCBsaW5rIHRtZHMgKHNpbDExNzg/KSAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMSIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMiIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNSIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNyIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDIiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDMiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDUiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDciKSkgewogCQkJLyogaWJvb2sgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9JQk9PSzsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCw0IikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCw0IikpIHsKIAkJCS8qIGVtYWMgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9FTUFDOwotCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMCwxIikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTAsMSIpKSB7CiAJCQkvKiBtaW5pIHdpdGggaW50ZXJuYWwgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX01JTklfSU5URVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEwLDIiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMCwyIikpIHsKIAkJCS8qIG1pbmkgd2l0aCBleHRlcm5hbCB0bWRzICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfTUlOSV9FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEyLDEiKSkgewogCQkJLyogUG93ZXJNYWM4LDEgPyAqLwogCQkJLyogaW1hYyBnNSBpc2lnaHQgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9JTUFDX0c1X0lTSUdIVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS9LY29uZmlnIGIvZHJpdmVycy9ncHUvdmdhL0tjb25maWcKaW5kZXggNzkwZTY3NS4uMDkyMDQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvdmdhL0tjb25maWcKQEAgLTgsMyArOCwxMSBAQAogCSAgYXJlIGFjY2Vzc2VkIGF0IHNhbWUgdGltZSB0aGV5IG5lZWQgc29tZSBraW5kIG9mIGNvb3JkaW5hdGlvbi4gUGxlYXNlCiAJICBzZWUgRG9jdW1lbnRhdGlvbi92Z2FhcmJpdGVyLnR4dCBmb3IgbW9yZSBkZXRhaWxzLiBTZWxlY3QgdGhpcyB0bwogCSAgZW5hYmxlIFZHQSBhcmJpdGVyLgorCitjb25maWcgVkdBX0FSQl9NQVhfR1BVUworCWludCAiTWF4aW11bSBudW1iZXIgb2YgR1BVcyIKKwlkZWZhdWx0IDE2CisJZGVwZW5kcyBvbiBWR0FfQVJCCisJaGVscAorCSAgUmVzZXJ2ZXMgc3BhY2UgaW4gdGhlIGtlcm5lbCB0byBtYWludGFpbiByZXNvdXJjZSBsb2NraW5nIGZvcgorCSAgbXVsdGlwbGUgR1BVUy4gIFRoZSBvdmVyaGVhZCBmb3IgZWFjaCBHUFUgaXMgdmVyeSBzbWFsbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwppbmRleCAyZjZjZjY5Li44ODI3ODE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCkBAIC02ODgsNyArNjg4LDcgQEAKICAqIHRoZSBhcmJpdGVyLgogICovCiAKLSNkZWZpbmUgTUFYX1VTRVJfQ0FSRFMgICAgICAgICAxNgorI2RlZmluZSBNQVhfVVNFUl9DQVJEUyAgICAgICAgIENPTkZJR19WR0FfQVJCX01BWF9HUFVTCiAjZGVmaW5lIFBDSV9JTlZBTElEX0NBUkQgICAgICAgKChzdHJ1Y3QgcGNpX2RldiAqKS0xVUwpCiAKIC8qCkBAIC05NTQsNiArOTU0LDcgQEAKIAkJfQogCiAJfSBlbHNlIGlmIChzdHJuY21wKGN1cnJfcG9zLCAidGFyZ2V0ICIsIDcpID09IDApIHsKKwkJc3RydWN0IHBjaV9idXMgKnBidXM7CiAJCXVuc2lnbmVkIGludCBkb21haW4sIGJ1cywgZGV2Zm47CiAJCXN0cnVjdCB2Z2FfZGV2aWNlICp2Z2FkZXY7CiAKQEAgLTk2OSwxOCArOTcwLDMxIEBACiAJCQkJcmV0X3ZhbCA9IC1FUFJPVE87CiAJCQkJZ290byBkb25lOwogCQkJfQorCQkJcHJfZGV2ZWwoInZnYWFyYjogJXMgPT0+ICV4OiV4OiV4LiV4XG4iLCBjdXJyX3BvcywKKwkJCQlkb21haW4sIGJ1cywgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbikpOwogCi0JCQlwZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoYnVzLCBkZXZmbik7CisJCQlwYnVzID0gcGNpX2ZpbmRfYnVzKGRvbWFpbiwgYnVzKTsKKwkJCXByX2RldmVsKCJ2Z2FhcmI6IHBidXMgJXBcbiIsIHBidXMpOworCQkJaWYgKHBidXMgPT0gTlVMTCkgeworCQkJCXByX2VycigidmdhYXJiOiBpbnZhbGlkIFBDSSBkb21haW4gYW5kL29yIGJ1cyBhZGRyZXNzICV4OiV4XG4iLAorCQkJCQlkb21haW4sIGJ1cyk7CisJCQkJcmV0X3ZhbCA9IC1FTk9ERVY7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcGRldiA9IHBjaV9nZXRfc2xvdChwYnVzLCBkZXZmbik7CisJCQlwcl9kZXZlbCgidmdhYXJiOiBwZGV2ICVwXG4iLCBwZGV2KTsKIAkJCWlmICghcGRldikgewotCQkJCXByX2luZm8oInZnYWFyYjogaW52YWxpZCBQQ0kgYWRkcmVzcyFcbiIpOworCQkJCXByX2VycigidmdhYXJiOiBpbnZhbGlkIFBDSSBhZGRyZXNzICV4OiV4XG4iLAorCQkJCQlidXMsIGRldmZuKTsKIAkJCQlyZXRfdmFsID0gLUVOT0RFVjsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCX0KIAogCQl2Z2FkZXYgPSB2Z2FkZXZfZmluZChwZGV2KTsKKwkJcHJfZGV2ZWwoInZnYWFyYjogdmdhZGV2ICVwXG4iLCB2Z2FkZXYpOwogCQlpZiAodmdhZGV2ID09IE5VTEwpIHsKLQkJCXByX2luZm8oInZnYWFyYjogdGhpcyBwY2kgZGV2aWNlIGlzIG5vdCBhIHZnYSBkZXZpY2VcbiIpOworCQkJcHJfZXJyKCJ2Z2FhcmI6IHRoaXMgcGNpIGRldmljZSBpcyBub3QgYSB2Z2EgZGV2aWNlXG4iKTsKIAkJCXBjaV9kZXZfcHV0KHBkZXYpOwogCQkJcmV0X3ZhbCA9IC1FTk9ERVY7CiAJCQlnb3RvIGRvbmU7CkBAIC05OTgsNyArMTAxMiw4IEBACiAJCQl9CiAJCX0KIAkJaWYgKGkgPT0gTUFYX1VTRVJfQ0FSRFMpIHsKLQkJCXByX2VycigidmdhYXJiOiBtYXhpbXVtIHVzZXIgY2FyZHMgbnVtYmVyIHJlYWNoZWQhXG4iKTsKKwkJCXByX2VycigidmdhYXJiOiBtYXhpbXVtIHVzZXIgY2FyZHMgKCVkKSBudW1iZXIgcmVhY2hlZCFcbiIsCisJCQkJTUFYX1VTRVJfQ0FSRFMpOwogCQkJcGNpX2Rldl9wdXQocGRldik7CiAJCQkvKiBYWFg6IHdoaWNoIHZhbHVlIHRvIHJldHVybj8gKi8KIAkJCXJldF92YWwgPSAgLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IDI0ZDkwZWEuLjcxZDRjMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtNTUsNiArNTUsMTIgQEAKIG1lbnUgIlNwZWNpYWwgSElEIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBISUQKIAorY29uZmlnIEhJRF8zTV9QQ1QKKwl0cmlzdGF0ZSAiM00gUENUIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciAzTSBQQ1QgdG91Y2ggc2NyZWVucy4KKwogY29uZmlnIEhJRF9BNFRFQ0gKIAl0cmlzdGF0ZSAiQTQgdGVjaCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTE4Myw2ICsxODksMjMgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIExvZ2l0ZWNoCiAJICBSdW1ibGVwYWQgMiBkZXZpY2VzLgogCitjb25maWcgTE9HSUc5NDBfRkYKKwlib29sICJMb2dpdGVjaCBGbGlnaHQgU3lzdGVtIEc5NDAgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhJRF9MT0dJVEVDSAorCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgTG9naXRlY2gKKwkgIEZsaWdodCBTeXN0ZW0gRzk0MCBkZXZpY2VzLgorCitjb25maWcgSElEX01BR0lDTU9VU0UKKwl0cmlzdGF0ZSAiQXBwbGUgTWFnaWNNb3VzZSBtdWx0aS10b3VjaCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQlRfSElEUAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciB0aGUgQXBwbGUgTWFnaWMgTW91c2UgbXVsdGktdG91Y2guCisKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBtdWx0aS10b3VjaCBmZWF0dXJlcyBvZiB0aGUKKwlBcHBsZSBXaXJlbGVzcyAiTWFnaWMiIE1vdXNlLgorCiBjb25maWcgSElEX01JQ1JPU09GVAogCXRyaXN0YXRlICJNaWNyb3NvZnQiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0xOTAsNiArMjEzLDEyIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIE1pY3Jvc29mdCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCBISUQgc3RhbmRhcmQuCiAKK2NvbmZpZyBISURfTU9TQVJUCisJdHJpc3RhdGUgIk1vc0FydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgTW9zQXJ0IGR1YWwtdG91Y2ggcGFuZWxzLgorCiBjb25maWcgSElEX01PTlRFUkVZCiAJdHJpc3RhdGUgIk1vbnRlcmV5IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMTk4LDExICsyMjcsMTcgQEAKIAlTdXBwb3J0IGZvciBNb250ZXJleSBHZW5pdXMgS0IyOUUuCiAKIGNvbmZpZyBISURfTlRSSUcKLQl0cmlzdGF0ZSAiTlRyaWciIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIk5UcmlnIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBOLVRyaWcgdG91Y2ggc2NyZWVuLgorCitjb25maWcgSElEX09SVEVLCisJdHJpc3RhdGUgIk9ydGVrIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRAogCWRlZmF1bHQgIUVNQkVEREVECiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIE4tVHJpZyB0b3VjaCBzY3JlZW4uCisJU3VwcG9ydCBmb3IgT3J0ZWsgV0tCLTIwMDAgd2lyZWxlc3Mga2V5Ym9hcmQgKyBtb3VzZSB0cmFja3BhZC4KIAogY29uZmlnIEhJRF9QQU5USEVSTE9SRAogCXRyaXN0YXRlICJQYW50aGVybG9yZCBzdXBwb3J0IiBpZiBFTUJFRERFRApAQCAtMjI3LDYgKzI2MiwxMiBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBQZXRhbHlueCBNYXh0ZXIgcmVtb3RlIGNvbnRyb2wuCiAKK2NvbmZpZyBISURfUVVBTlRBCisJdHJpc3RhdGUgIlF1YW50YSBPcHRpY2FsIFRvdWNoIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBRdWFudGEgT3B0aWNhbCBUb3VjaCBkdWFsLXRvdWNoIHBhbmVscy4KKwogY29uZmlnIEhJRF9TQU1TVU5HCiAJdHJpc3RhdGUgIlNhbXN1bmciIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0yNDEsNiArMjgyLDEyIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIFNvbnkgUFMzIGNvbnRyb2xsZXIuCiAKK2NvbmZpZyBISURfU1RBTlRVTQorCXRyaXN0YXRlICJTdGFudHVtIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBTdGFudHVtIG11bHRpdG91Y2ggcGFuZWwuCisKIGNvbmZpZyBISURfU1VOUExVUwogCXRyaXN0YXRlICJTdW5wbHVzIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMzA1LDkgKzM1Miw4IEBACiAJICBSdW1ibGUgRm9yY2Ugb3IgRm9yY2UgRmVlZGJhY2sgV2hlZWwuCiAKIGNvbmZpZyBISURfV0FDT00KLQl0cmlzdGF0ZSAiV2Fjb20gQmx1ZXRvb3RoIGRldmljZXMgc3VwcG9ydCIgaWYgRU1CRURERUQKKwl0cmlzdGF0ZSAiV2Fjb20gQmx1ZXRvb3RoIGRldmljZXMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEJUX0hJRFAKLQlkZWZhdWx0ICFFTUJFRERFRAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBXYWNvbSBHcmFwaGlyZSBCbHVldG9vdGggdGFibGV0LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IDBkZTJkZmYuLjBiMjYxOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC0xOCw3ICsxOCwxMSBAQAogaWZkZWYgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGCiAJaGlkLWxvZ2l0ZWNoLW9ianMJKz0gaGlkLWxnMmZmLm8KIGVuZGlmCitpZmRlZiBDT05GSUdfTE9HSUc5NDBfRkYKKwloaWQtbG9naXRlY2gtb2JqcwkrPSBoaWQtbGczZmYubworZW5kaWYKIAorb2JqLSQoQ09ORklHX0hJRF8zTV9QQ1QpCSs9IGhpZC0zbS1wY3Qubwogb2JqLSQoQ09ORklHX0hJRF9BNFRFQ0gpCSs9IGhpZC1hNHRlY2gubwogb2JqLSQoQ09ORklHX0hJRF9BUFBMRSkJCSs9IGhpZC1hcHBsZS5vCiBvYmotJChDT05GSUdfSElEX0JFTEtJTikJKz0gaGlkLWJlbGtpbi5vCkBAIC0zMSwxNCArMzUsMTkgQEAKIG9iai0kKENPTkZJR19ISURfS0VOU0lOR1RPTikJKz0gaGlkLWtlbnNpbmd0b24ubwogb2JqLSQoQ09ORklHX0hJRF9LWUUpCQkrPSBoaWQta3llLm8KIG9iai0kKENPTkZJR19ISURfTE9HSVRFQ0gpCSs9IGhpZC1sb2dpdGVjaC5vCitvYmotJChDT05GSUdfSElEX01BR0lDTU9VU0UpICAgICs9IGhpZC1tYWdpY21vdXNlLm8KIG9iai0kKENPTkZJR19ISURfTUlDUk9TT0ZUKQkrPSBoaWQtbWljcm9zb2Z0Lm8KIG9iai0kKENPTkZJR19ISURfTU9OVEVSRVkpCSs9IGhpZC1tb250ZXJleS5vCitvYmotJChDT05GSUdfSElEX01PU0FSVCkJKz0gaGlkLW1vc2FydC5vCiBvYmotJChDT05GSUdfSElEX05UUklHKQkJKz0gaGlkLW50cmlnLm8KK29iai0kKENPTkZJR19ISURfT1JURUspCQkrPSBoaWQtb3J0ZWsubworb2JqLSQoQ09ORklHX0hJRF9RVUFOVEEpCSs9IGhpZC1xdWFudGEubwogb2JqLSQoQ09ORklHX0hJRF9QQU5USEVSTE9SRCkJKz0gaGlkLXBsLm8KIG9iai0kKENPTkZJR19ISURfUEVUQUxZTlgpCSs9IGhpZC1wZXRhbHlueC5vCiBvYmotJChDT05GSUdfSElEX1NBTVNVTkcpCSs9IGhpZC1zYW1zdW5nLm8KIG9iai0kKENPTkZJR19ISURfU01BUlRKT1lQTFVTKQkrPSBoaWQtc2pveS5vCiBvYmotJChDT05GSUdfSElEX1NPTlkpCQkrPSBoaWQtc29ueS5vCitvYmotJChDT05GSUdfSElEX1NUQU5UVU0pCSs9IGhpZC1zdGFudHVtLm8KIG9iai0kKENPTkZJR19ISURfU1VOUExVUykJKz0gaGlkLXN1bnBsdXMubwogb2JqLSQoQ09ORklHX0hJRF9HUkVFTkFTSUEpCSs9IGhpZC1nYWZmLm8KIG9iai0kKENPTkZJR19ISURfVEhSVVNUTUFTVEVSKQkrPSBoaWQtdG1mZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtM20tcGN0LmMgYi9kcml2ZXJzL2hpZC9oaWQtM20tcGN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3MGFlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC0zbS1wY3QuYwpAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciAzTSBQQ1QgbXVsdGl0b3VjaCBwYW5lbHMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+CisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworTU9EVUxFX0FVVEhPUigiU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiM00gUENUIG11bHRpdG91Y2ggcGFuZWxzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBtbW1fZmluZ2VyIHsKKwlfX3MzMiB4LCB5OworCV9fdTggcmFuazsKKwlib29sIHRvdWNoLCB2YWxpZDsKK307CisKK3N0cnVjdCBtbW1fZGF0YSB7CisJc3RydWN0IG1tbV9maW5nZXIgZlsxMF07CisJX191OCBjdXJpZCwgbnVtOworCWJvb2wgdG91Y2gsIHZhbGlkOworfTsKKworc3RhdGljIGludCBtbW1faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCWNhc2UgSElEX1VQX0JVVFRPTjoKKwkJcmV0dXJuIC0xOworCisJY2FzZSBISURfVVBfR0VOREVTSzoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0dEX1g6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0dEX1k6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19ZLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9VUF9ESUdJVElaRVI6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2U6IG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KKwkJY2FzZSAweDE0OgorCQljYXNlIDB4MjM6CisJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKKwkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJCXJldHVybiAtMTsKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROX1RPVUNIKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lEKTsKKwkJCXJldHVybiAxOworCQl9CisJCS8qIGxldCBoaWQtaW5wdXQgZGVjaWRlIGZvciB0aGUgb3RoZXJzICovCisJCXJldHVybiAwOworCisJY2FzZSAweGZmMDAwMDAwOgorCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2U6IG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tbV9pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQorCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQsCisgKiBzbyB0aGF0IGl0IGNhbiBkZWNpZGUgd2hhdCB0byBzZW5kIHRvIHRoZSBpbnB1dCBsYXllci4KKyAqLworc3RhdGljIHZvaWQgbW1tX2ZpbHRlcl9ldmVudChzdHJ1Y3QgbW1tX2RhdGEgKm1kLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgbW1tX2ZpbmdlciAqb2xkZXN0ID0gMDsKKwlib29sIHByZXNzZWQgPSBmYWxzZSwgcmVsZWFzZWQgPSBmYWxzZTsKKwlpbnQgaTsKKworCS8qCisJICogd2UgbmVlZCB0byBpdGVyYXRlIG9uIGFsbCBmaW5nZXJzIHRvIGRlY2lkZSBpZiB3ZSBoYXZlIGEgcHJlc3MKKwkgKiBvciBhIHJlbGVhc2UgZXZlbnQgaW4gb3VyIHRvdWNoc2NyZWVuIGVtdWxhdGlvbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgeworCQlzdHJ1Y3QgbW1tX2ZpbmdlciAqZiA9ICZtZC0+ZltpXTsKKwkJaWYgKCFmLT52YWxpZCkgeworCQkJLyogdGhpcyBmaW5nZXIgaXMganVzdCBwbGFjZWhvbGRlciBkYXRhLCBpZ25vcmUgKi8KKwkJfSBlbHNlIGlmIChmLT50b3VjaCkgeworCQkJLyogdGhpcyBmaW5nZXIgaXMgb24gdGhlIHNjcmVlbiAqLworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lELCBpKTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCBmLT54KTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBmLT55KTsKKwkJCWlucHV0X210X3N5bmMoaW5wdXQpOworCQkJLyoKKwkJCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogbWFpbnRhaW4gdGhlIGFnZSByYW5rCisJCQkgKiBvZiB0aGlzIGZpbmdlciwgZGVjaWRlIGlmIHdlIGhhdmUgYSBwcmVzcworCQkJICovCisJCQlpZiAoZi0+cmFuayA9PSAwKSB7CisJCQkJZi0+cmFuayA9ICsrKG1kLT5udW0pOworCQkJCWlmIChmLT5yYW5rID09IDEpCisJCQkJCXByZXNzZWQgPSB0cnVlOworCQkJfQorCQkJaWYgKGYtPnJhbmsgPT0gMSkKKwkJCQlvbGRlc3QgPSBmOworCQl9IGVsc2UgeworCQkJLyogdGhpcyBmaW5nZXIgdG9vayBvZmYgdGhlIHNjcmVlbiAqLworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBtYWludGFpbiBhZ2UgcmFuayBvZiBvdGhlcnMgKi8KKwkJCWludCBqOworCisJCQlmb3IgKGogPSAwOyBqIDwgMTA7ICsraikgeworCQkJCXN0cnVjdCBtbW1fZmluZ2VyICpnID0gJm1kLT5mW2pdOworCQkJCWlmIChnLT5yYW5rID4gZi0+cmFuaykgeworCQkJCQlnLT5yYW5rLS07CisJCQkJCWlmIChnLT5yYW5rID09IDEpCisJCQkJCQlvbGRlc3QgPSBnOworCQkJCX0KKwkJCX0KKwkJCWYtPnJhbmsgPSAwOworCQkJLS0obWQtPm51bSk7CisJCQlpZiAobWQtPm51bSA9PSAwKQorCQkJCXJlbGVhc2VkID0gdHJ1ZTsKKwkJfQorCQlmLT52YWxpZCA9IDA7CisJfQorCisJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJaWYgKG9sZGVzdCkgeworCQlpZiAocHJlc3NlZCkKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBvbGRlc3QtPngpOworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgb2xkZXN0LT55KTsKKwl9IGVsc2UgaWYgKHJlbGVhc2VkKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMCk7CisJfQorfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBhbGwgcmVwb3J0cworICogc28gdGhhdCB3ZSBjYW4gYWNjdW11bGF0ZSBjb250YWN0IHBvaW50IGluZm9ybWF0aW9uLAorICogYW5kIGNhbGwgaW5wdXRfbXRfc3luYyBhZnRlciBlYWNoIHBvaW50LgorICovCitzdGF0aWMgaW50IG1tbV9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IG1tbV9kYXRhICptZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCS8qCisJICogc3RyYW5nZWx5LCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYmVmb3JlCisJICogZmllbGQtPmhpZGlucHV0IGlzIGluaXRpYWxpemVkIQorCSAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgeworCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCQltZC0+dG91Y2ggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQkJbWQtPnZhbGlkID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaWYgKG1kLT52YWxpZCkgeworCQkJCW1kLT5jdXJpZCA9IHZhbHVlOworCQkJCW1kLT5mW3ZhbHVlXS50b3VjaCA9IG1kLT50b3VjaDsKKwkJCQltZC0+Zlt2YWx1ZV0udmFsaWQgPSAxOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1g6CisJCQlpZiAobWQtPnZhbGlkKQorCQkJCW1kLT5mW21kLT5jdXJpZF0ueCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1k6CisJCQlpZiAobWQtPnZhbGlkKQorCQkJCW1kLT5mW21kLT5jdXJpZF0ueSA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJCW1tbV9maWx0ZXJfZXZlbnQobWQsIGlucHV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtbW1fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtbW1fZGF0YSAqbWQ7CisKKwltZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbW1fZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghbWQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIDNNIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIG1kKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCisJaWYgKHJldCkKKwkJa2ZyZWUobWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1tbV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBtbW1fZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF8zTSwgVVNCX0RFVklDRV9JRF8zTTE5NjgpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1tbV9kZXZpY2VzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgbW1tX2dyYWJiZWRfdXNhZ2VzW10gPSB7CisJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCisJeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1tbV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiM20tcGN0IiwKKwkuaWRfdGFibGUgPSBtbW1fZGV2aWNlcywKKwkucHJvYmUgPSBtbW1fcHJvYmUsCisJLnJlbW92ZSA9IG1tbV9yZW1vdmUsCisJLmlucHV0X21hcHBpbmcgPSBtbW1faW5wdXRfbWFwcGluZywKKwkuaW5wdXRfbWFwcGVkID0gbW1tX2lucHV0X21hcHBlZCwKKwkudXNhZ2VfdGFibGUgPSBtbW1fZ3JhYmJlZF91c2FnZXMsCisJLmV2ZW50ID0gbW1tX2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbW1tX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmbW1tX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtbW1fZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbW1tX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1tbV9pbml0KTsKK21vZHVsZV9leGl0KG1tbV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwppbmRleCA1YjRkNjZkLi43ODI4NmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwpAQCAtNDAsNiArNDAsMTEgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZm5tb2RlLCAiTW9kZSBvZiBmbiBrZXkgb24gQXBwbGUga2V5Ym9hcmRzICgwID0gZGlzYWJsZWQsICIKIAkJIlsxXSA9IGZrZXlzbGFzdCwgMiA9IGZrZXlzZmlyc3QpIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXNvX2xheW91dCA9IDE7Cittb2R1bGVfcGFyYW0oaXNvX2xheW91dCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlzb19sYXlvdXQsICJFbmFibGUvRGlzYWJsZSBoYXJkY29kZWQgSVNPLWxheW91dCBvZiB0aGUga2V5Ym9hcmQuICIKKwkJIigwID0gZGlzYWJsZWQsIFsxXSA9IGVuYWJsZWQpIik7CisKIHN0cnVjdCBhcHBsZV9zYyB7CiAJdW5zaWduZWQgbG9uZyBxdWlya3M7CiAJdW5zaWduZWQgaW50IGZuX29uOwpAQCAtMTk5LDExICsyMDQsMTMgQEAKIAkJfQogCX0KIAotCWlmIChhc2MtPnF1aXJrcyAmIEFQUExFX0lTT19LRVlCT0FSRCkgewotCQl0cmFucyA9IGFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oYXBwbGVfaXNvX2tleWJvYXJkLCB1c2FnZS0+Y29kZSk7Ci0JCWlmICh0cmFucykgewotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB0cmFucy0+dG8sIHZhbHVlKTsKLQkJCXJldHVybiAxOworICAgICAgICBpZiAoaXNvX2xheW91dCkgeworCQlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9JU09fS0VZQk9BUkQpIHsKKwkJCXRyYW5zID0gYXBwbGVfZmluZF90cmFuc2xhdGlvbihhcHBsZV9pc29fa2V5Ym9hcmQsIHVzYWdlLT5jb2RlKTsKKwkJCWlmICh0cmFucykgeworCQkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLCB2YWx1ZSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IGVhYmU1ZjguLjM2OGZiYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtNCw3ICs0LDcgQEAKICAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgogICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYwotICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgSmlyaSBLb3NpbmEKICAqLwogCiAvKgpAQCAtNTEsNyArNTEsNyBAQAogICogUmVnaXN0ZXIgYSBuZXcgcmVwb3J0IGZvciBhIGRldmljZS4KICAqLwogCi1zdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9yZWdpc3Rlcl9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgaWQpCitzdHJ1Y3QgaGlkX3JlcG9ydCAqaGlkX3JlZ2lzdGVyX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBpZCkKIHsKIAlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bSA9IGRldmljZS0+cmVwb3J0X2VudW0gKyB0eXBlOwogCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CkBAIC03NSw2ICs3NSw3IEBACiAKIAlyZXR1cm4gcmVwb3J0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3JlZ2lzdGVyX3JlcG9ydCk7CiAKIC8qCiAgKiBSZWdpc3RlciBhIG5ldyBmaWVsZCBmb3IgdGhpcyByZXBvcnQuCkBAIC0zODcsNyArMzg4LDggQEAKIAlfX3UzMiBkYXRhOwogCXVuc2lnbmVkIG47CiAKLQlpZiAoaXRlbS0+c2l6ZSA9PSAwKSB7CisJLyogTG9jYWwgZGVsaW1pdGVyIGNvdWxkIGhhdmUgdmFsdWUgMCwgd2hpY2ggYWxsb3dzIHNpemUgdG8gYmUgMCAqLworCWlmIChpdGVtLT5zaXplID09IDAgJiYgaXRlbS0+dGFnICE9IEhJRF9MT0NBTF9JVEVNX1RBR19ERUxJTUlURVIpIHsKIAkJZGJnX2hpZCgiaXRlbSBkYXRhIGV4cGVjdGVkIGZvciBsb2NhbCBpdGVtXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTEyNDgsMTEgKzEyNTAsMTMgQEAKIAogLyogYSBsaXN0IG9mIGRldmljZXMgZm9yIHdoaWNoIHRoZXJlIGlzIGEgc3BlY2lhbGl6ZWQgZHJpdmVyIG9uIEhJRCBidXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfYmxhY2tsaXN0W10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEXzNNLCBVU0JfREVWSUNFX0lEXzNNMTk2OCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01JR0hUWU1PVVNFKSB9LAorCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NQUdJQ01PVVNFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJKSB9LApAQCAtMTMyNCw2ICsxMzI4LDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GM0QpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRkZHICkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRk9SQ0UzRF9QUk8pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZMSUdIVF9TWVNURU1fRzk0MCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTDIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0cyNV9XSEVFTCkgfSwKQEAgLTEzMzcsMTAgKzEzNDIsMTUgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX1dJUkVMRVNTX09QVElDQUxfREVTS1RPUF8zXzApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PTlRFUkVZLCBVU0JfREVWSUNFX0lEX0dFTklVU19LQjI5RSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PUlRFSywgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QRVRBTFlOWCwgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsIFVTQl9ERVZJQ0VfSURfUVVBTlRBX09QVElDQUxfVE9VQ0gpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwgVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKKwl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfVkFJT19WR1hfTU9VU0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU0sIFVTQl9ERVZJQ0VfSURfTVRQKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TVU5QTFVTLCBVU0JfREVWSUNFX0lEX1NVTlBMVVNfV0RFU0tUT1ApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwNCkgfSwKQEAgLTE1NDMsOCArMTU1Myw5IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUkNBQkxFLCBVU0JfREVWSUNFX0lEX0FJUkNBQkxFMSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUxDT1IsIFVTQl9ERVZJQ0VfSURfQUxDT1JfVVNCUlMyMzIpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVMsIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00pfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX0xDTTIpfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX1Q5MU1UKX0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVNURUssIFVTQl9ERVZJQ0VfSURfQVNVU1RFS19MQ00pfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVU1RFSywgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTTIpfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVZFUk1FRElBLCBVU0JfREVWSUNFX0lEX0FWRVJfRk1fTVI4MDApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JFUktTSElSRSwgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0lEQywgMHgwMTAzKSB9LApAQCAtMTY2MSw4ICsxNjcyLDYgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BISUxJUFMsIFVTQl9ERVZJQ0VfSURfUEhJTElQU19JRUVFODAyMTU0X0RPTkdMRSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUE9XRVJDT00sIFVTQl9ERVZJQ0VfSURfUE9XRVJDT01fVVBTKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9URU5YLCBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMSkgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEVOWCwgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQUJQUk8pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9HT1RFTVApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwppbmRleCA2YWJkMDM2Li5jZDRlY2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwpAQCAtODY0LDEzICs4NjQsMTMgQEAKIAlbRVZfU05EXSA9IHNvdW5kcywJCQlbRVZfUkVQXSA9IHJlcGVhdHMsCiB9OwogCi12b2lkIGhpZF9yZXNvbHZfZXZlbnQoX191OCB0eXBlLCBfX3UxNiBjb2RlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpIHsKLQorc3RhdGljIHZvaWQgaGlkX3Jlc29sdl9ldmVudChfX3U4IHR5cGUsIF9fdTE2IGNvZGUsIHN0cnVjdCBzZXFfZmlsZSAqZikKK3sKIAlzZXFfcHJpbnRmKGYsICIlcy4lcyIsIGV2ZW50c1t0eXBlXSA/IGV2ZW50c1t0eXBlXSA6ICI/IiwKIAkJbmFtZXNbdHlwZV0gPyAobmFtZXNbdHlwZV1bY29kZV0gPyBuYW1lc1t0eXBlXVtjb2RlXSA6ICI/IikgOiAiPyIpOwogfQogCi12b2lkIGhpZF9kdW1wX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IHNlcV9maWxlICpmKQorc3RhdGljIHZvaWQgaGlkX2R1bXBfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpCiB7CiAJaW50IGksIGosIGs7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCAwMTAzNjhlLi43MmMwNWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC0xOCw2ICsxOCw5IEBACiAjaWZuZGVmIEhJRF9JRFNfSF9GSUxFCiAjZGVmaW5lIEhJRF9JRFNfSF9GSUxFCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF8zTQkJMHgwNTk2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfM00xOTY4CQkweDA1MDAKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0E0VEVDSAkJMHgwOWRhCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQTRURUNIX1dDUDMyUFUJMHgwMDA2CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQJMHgwMDBhCkBAIC01Niw2ICs1OSw3IEBACiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BUFBMRQkJMHgwNWFjCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUlHSFRZTU9VU0UJMHgwMzA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUFHSUNNT1VTRQkweDAzMGQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJCTB4MDIwZQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX0lTTwkweDAyMGYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfQU5TSQkweDAyMTQKQEAgLTk2LDkgKzEwMCwxMiBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wJMHg4MjQxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNAkweDgyNDIKIAotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FTVVMJCTB4MGIwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfTENNCQkweDE3MjYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTX0xDTTIJCTB4MTc1YgorI2RlZmluZSBVU0JfVkVORE9SX0lEX0FTVVMJCTB4MDQ4NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfVDkxTVQJMHgwMTg1CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BU1VTVEVLCQkweDBiMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTQkweDE3MjYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTTIJMHgxNzViCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BVEVOCQkweDA1NTcKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOX1VDMTAwS00JMHgyMDA0CkBAIC0xNjksNiArMTc2LDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWQkweDBkN2YKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSAweDAxMDAKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0VUVVJCT1RPVUNICTB4MjJiOQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0VUVVJCT1RPVUNICTB4MDAwNgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfRVRUCQkweDA2NjQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9UQzVVSAkJMHgwMzA5CiAKQEAgLTMwMyw2ICszMTMsNyBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDJfMgkweGMyMTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0YzRAkweGMyODMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTwkweGMyODYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GTElHSFRfU1lTVEVNX0c5NDAJMHhjMjg3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwJMHhjMjk0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GRkcJMHhjMjkzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTAkweGMyOTUKQEAgLTM2NSw2ICszNzYsOSBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX09OVFJBSwkJMHgwYTA3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMAkweDAwNjQKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX09SVEVLCQkweDA1YTQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwCTB4MjAwMAorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEFOSklUCQkweDEzNGMKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTlRIRVJMT1JECTB4MDgxMApAQCAtMzgyLDkgKzM5NiwxNiBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BPV0VSQ09NCQkweDBkOWYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9QT1dFUkNPTV9VUFMJMHgwMDAyCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QUk9ESUdFCQkweDA1YWYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QUk9ESUdFX0NPUkRMRVNTCTB4MzA2MgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FJVEVLCQkweDA2YTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFECTB4ZmYxNwogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUVVBTlRBCQkweDA0MDgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9RVUFOVEFfT1BUSUNBTF9UT1VDSAkweDMwMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4JMHgzMDAxCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TQU1TVU5HCQkweDA0MTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQU1TVU5HX0lSX1JFTU9URQkweDAwMDEKIApAQCAtMzk2LDE4ICs0MTcsMjAgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fRklSU1QJMHgwMDM0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xBU1QJMHgwMDQ2CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVEFOVFVNCQkweDFmODcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NVFAJCTB4MDAwMgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1VOCQkweDA0MzAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9SQVJJVEFOX0tWTV9ET05HTEUJMHhjZGFiCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVU5QTFVTCQkweDA0ZmMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TVU5QTFVTX1dERVNLVE9QCTB4MDVkOAogCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfVEVOWAkJMHgxMTMwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkxCTB4MDAwMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMgkweDAwMDIKLQogI2RlZmluZSBVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUgkweDA0NGYKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPVUNIUEFDSwkJMHgxYmZkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9VQ0hQQUNLX1JUUwkweDE2ODgKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPUE1BWAkJMHgwNjYzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9QTUFYX0NPQlJBUEFECTB4MDEwMwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCmluZGV4IDU4NjJiMGYuLjc5ZDllZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpawotICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgSmlyaSBLb3NpbmEKICAqCiAgKiAgSElEIHRvIExpbnV4IElucHV0IG1hcHBpbmcKICAqLwpAQCAtMTkzLDEyICsxOTMsMTcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEhJRF9VUF9CVVRUT046Ci0JCWNvZGUgPSAoKHVzYWdlLT5oaWQgLSAxKSAmIDB4Zik7CisJCWNvZGUgPSAoKHVzYWdlLT5oaWQgLSAxKSAmIEhJRF9VU0FHRSk7CiAKIAkJc3dpdGNoIChmaWVsZC0+YXBwbGljYXRpb24pIHsKIAkJY2FzZSBISURfR0RfTU9VU0U6CiAJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IDB4MTEwOyBicmVhazsKLQkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOworCQljYXNlIEhJRF9HRF9KT1lTVElDSzoKKwkJCQkgICAgICBpZiAoY29kZSA8PSAweGYpCisJCQkJCSAgICAgIGNvZGUgKz0gQlROX0pPWVNUSUNLOworCQkJCSAgICAgIGVsc2UKKwkJCQkJICAgICAgY29kZSArPSBCVE5fVFJJR0dFUl9IQVBQWTsKKwkJCQkgICAgICBicmVhazsKIAkJY2FzZSBISURfR0RfR0FNRVBBRDogIGNvZGUgKz0gMHgxMzA7IGJyZWFrOwogCQlkZWZhdWx0OgogCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwpIHsKQEAgLTQwMCw2ICs0MDUsNyBAQAogCQljYXNlIDB4MTkyOiBtYXBfa2V5X2NsZWFyKEtFWV9DQUxDKTsJCWJyZWFrOwogCQljYXNlIDB4MTk0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSUxFKTsJCWJyZWFrOwogCQljYXNlIDB4MTk2OiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7CisJCWNhc2UgMHgxOTk6IG1hcF9rZXlfY2xlYXIoS0VZX0NIQVQpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOWM6IG1hcF9rZXlfY2xlYXIoS0VZX0xPR09GRik7CQlicmVhazsKIAkJY2FzZSAweDE5ZTogbWFwX2tleV9jbGVhcihLRVlfQ09GRkVFKTsJCWJyZWFrOwogCQljYXNlIDB4MWE2OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwppbmRleCA5ZmNkM2QwLi4zNjc3YzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwpAQCAtMzQsNiArMzQsNyBAQAogI2RlZmluZSBMR19GRgkJCTB4MjAwCiAjZGVmaW5lIExHX0ZGMgkJCTB4NDAwCiAjZGVmaW5lIExHX1JERVNDX1JFTF9BQlMJMHg4MDAKKyNkZWZpbmUgTEdfRkYzCQkJMHgxMDAwCiAKIC8qCiAgKiBDZXJ0YWluIExvZ2l0ZWNoIGtleWJvYXJkcyBzZW5kIGluIHJlcG9ydCAjMyBrZXlzIHdoaWNoIGFyZSBmYXIKQEAgLTI2Niw3ICsyNjcsNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCWlmIChxdWlya3MgJiAoTEdfRkYgfCBMR19GRjIpKQorCWlmIChxdWlya3MgJiAoTEdfRkYgfCBMR19GRjIgfCBMR19GRjMpKQogCQljb25uZWN0X21hc2sgJj0gfkhJRF9DT05ORUNUX0ZGOwogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIGNvbm5lY3RfbWFzayk7CkBAIC0yNzksNiArMjgwLDggQEAKIAkJbGdmZl9pbml0KGhkZXYpOwogCWlmIChxdWlya3MgJiBMR19GRjIpCiAJCWxnMmZmX2luaXQoaGRldik7CisJaWYgKHF1aXJrcyAmIExHX0ZGMykKKwkJbGczZmZfaW5pdChoZGV2KTsKIAogCXJldHVybiAwOwogZXJyX2ZyZWU6CkBAIC0zMzEsNiArMzM0LDggQEAKIAkJLmRyaXZlcl9kYXRhID0gTEdfRkYgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMiksCiAJCS5kcml2ZXJfZGF0YSA9IExHX0ZGMiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GTElHSFRfU1lTVEVNX0c5NDApLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRjMgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfU1BBQ0VOQVZJR0FUT1IpLAogCQkuZHJpdmVyX2RhdGEgPSBMR19SREVTQ19SRUxfQUJTIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX1NQQUNFVFJBVkVMTEVSKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5oIGIvZHJpdmVycy9oaWQvaGlkLWxnLmgKaW5kZXggYmYzMTU5Mi4uY2UyYWM4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnLmgKQEAgLTEzLDQgKzEzLDEwIEBACiBzdGF0aWMgaW5saW5lIGludCBsZzJmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KSB7IHJldHVybiAtMTsgfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTE9HSUc5NDBfRkYKK2ludCBsZzNmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBsZzNmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KSB7IHJldHVybiAtMTsgfQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnM2ZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGczZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDAyODMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnM2ZmLmMKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiAgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgTG9naXRlY2ggRmxpZ2h0IFN5c3RlbSBHOTQwCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBHYXJ5IFN0ZWluIDxMb3JkQ25pZGFyaWFuQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorCisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorI2luY2x1ZGUgImhpZC1sZy5oIgorCisvKgorICogRzk0MCBUaGVvcnkgb2YgT3BlcmF0aW9uIChmcm9tIGV4cGVyaW1lbnRhdGlvbikKKyAqCisgKiBUaGVyZSBhcmUgNjMgZmllbGRzIChvbmx5IDMgb2YgdGhlbSBjdXJyZW50bHkgdXNlZCkKKyAqIDAgLSBzZWVtcyB0byBiZSBjb21tYW5kIGZpZWxkCisgKiAxIC0gMzAgZGVhbCB3aXRoIHRoZSB4IGF4aXMKKyAqIDMxIC02MCBkZWFsIHdpdGggdGhlIHkgYXhpcworICoKKyAqIEZpZWxkIDEgaXMgeCBheGlzIGNvbnN0YW50IGZvcmNlCisgKiBGaWVsZCAzMSBpcyB5IGF4aXMgY29uc3RhbnQgZm9yY2UKKyAqCisgKiBvdGhlciBpbnRlcmVzdGluZyBmaWVsZHMgMSwyLDMsNCBvbiB4IGF4aXMKKyAqIChzYW1lIGZvciAzMSwzMiwzMywzNCBvbiB5IGF4aXMpCisgKgorICogMCAwIDEyNyAxMjcgbWFrZXMgdGhlIGpveXN0aWNrIGF1dG9jZW50ZXIgaGFyZAorICoKKyAqIDEyNyAwIDEyNyAxMjcgbWFrZXMgdGhlIGpveXN0aWNrIGxvb3NlIG9uIHRoZSByaWdodCwKKyAqIGJ1dCBzdG9wcyBhbGwgbW92ZW1udCBsZWZ0CisgKgorICogLTEyNyAwIC0xMjcgLTEyNyBtYWtlcyB0aGUgam95c3RpY2sgbG9vc2Ugb24gdGhlIGxlZnQsCisgKiBidXQgc3RvcHMgYWxsIG1vdmVtZW50IHJpZ2h0CisgKgorICogMCAwIC0xMjcgLTEyNyBtYWtlcyB0aGUgam95c3RpY2sgcmF0dGxlIHZlcnkgaGFyZAorICoKKyAqIEknbSBzdXJlIHRoZXNlIGFyZSBlZmZlY3RzIHRoYXQgSSBkb24ndCBrbm93IGVub3VnaCBhYm91dCB0aGVtCisgKi8KKworc3RydWN0IGxnM2ZmX2RldmljZSB7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKK307CisKK3N0YXRpYyBpbnQgaGlkX2xnM2ZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9ICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCWludCB4LCB5OworCisvKgorICogTWF4dXNhZ2Ugc2hvdWxkIGFsd2F5cyBiZSA2MyAobWF4aW11bSBmaWVsZHMpCisgKiBsaWtlbHkgYSBiZXR0ZXIgd2F5IHRvIGVuc3VyZSB0aGlzIGRhdGEgaXMgY2xlYW4KKyAqLworCW1lbXNldChyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZSwgMCwgc2l6ZW9mKF9fczMyKSpyZXBvcnQtPmZpZWxkWzBdLT5tYXh1c2FnZSk7CisKKwlzd2l0Y2ggKGVmZmVjdC0+dHlwZSkgeworCWNhc2UgRkZfQ09OU1RBTlQ6CisvKgorICogQWxyZWFkeSBjbGFtcGVkIGluIGZmX21lbWxlc3MKKyAqIDAgaXMgY2VudGVyIChkaWZmZXJlbnQgdGhlbiBvdGhlciBsb2dpdGVjaCkKKyAqLworCQl4ID0gZWZmZWN0LT51LnJhbXAuc3RhcnRfbGV2ZWw7CisJCXkgPSBlZmZlY3QtPnUucmFtcC5lbmRfbGV2ZWw7CisKKwkJLyogc2VuZCBjb21tYW5kIGJ5dGUgKi8KKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOworCisvKgorICogU2lnbiBiYWNrd2FyZHMgZnJvbSBvdGhlciBGb3JjZTNkIHBybworICogd2hpY2ggZ2V0IHJlY2FzdCBoZXJlIGluIHR3bydzIGNvbXBsZW1lbnQgOCBiaXRzCisgKi8KKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAodW5zaWduZWQgY2hhcikoLXgpOworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszMV0gPSAodW5zaWduZWQgY2hhcikoLXkpOworCisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIGhpZF9sZzNmZl9zZXRfYXV0b2NlbnRlcihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHUxNiBtYWduaXR1ZGUpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPSAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKworLyoKKyAqIEF1dG8gQ2VudGVyaW5nIHByb2JlZCBmcm9tIGRldmljZQorICogTk9URTogZGVhZG1hbidzIHN3aXRjaCBvbiBHOTQwIG11c3QgYmUgY292ZXJlZAorICogZm9yIGVmZmVjdHMgdG8gd29yaworICovCisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbM10gPSAweDdGOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gMHg3RjsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszMV0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzMyXSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMzNdID0gMHg3RjsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszNF0gPSAweDdGOworCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKK30KKworCitzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IGZmM19qb3lzdGlja19hY1tdID0geworCUZGX0NPTlNUQU5ULAorCUZGX0FVVE9DRU5URVIsCisJLTEKK307CisKK2ludCBsZzNmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCWNvbnN0IHNpZ25lZCBzaG9ydCAqZmZfYml0cyA9IGZmM19qb3lzdGlja19hYzsKKwlpbnQgZXJyb3I7CisJaW50IGk7CisKKwkvKiBGaW5kIHRoZSByZXBvcnQgdG8gdXNlICovCisJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7CisJCWVycl9oaWQoIk5vIG91dHB1dCByZXBvcnQgZm91bmQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENoZWNrIHRoYXQgdGhlIHJlcG9ydCBsb29rcyBvayAqLworCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKwlpZiAoIXJlcG9ydCkgeworCQllcnJfaGlkKCJOVUxMIG91dHB1dCByZXBvcnQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZpZWxkID0gcmVwb3J0LT5maWVsZFswXTsKKwlpZiAoIWZpZWxkKSB7CisJCWVycl9oaWQoIk5VTEwgZmllbGQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEFzc3VtZSBzaW5nbGUgZml4ZWQgZGV2aWNlIEc5NDAgKi8KKwlmb3IgKGkgPSAwOyBmZl9iaXRzW2ldID49IDA7IGkrKykKKwkJc2V0X2JpdChmZl9iaXRzW2ldLCBkZXYtPmZmYml0KTsKKworCWVycm9yID0gaW5wdXRfZmZfY3JlYXRlX21lbWxlc3MoZGV2LCBOVUxMLCBoaWRfbGczZmZfcGxheSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAodGVzdF9iaXQoRkZfQVVUT0NFTlRFUiwgZGV2LT5mZmJpdCkpCisJCWRldi0+ZmYtPnNldF9hdXRvY2VudGVyID0gaGlkX2xnM2ZmX3NldF9hdXRvY2VudGVyOworCisJZGV2X2luZm8oJmhpZC0+ZGV2LCAiRm9yY2UgZmVlZGJhY2sgZm9yIExvZ2l0ZWNoIEZsaWdodCBTeXN0ZW0gRzk0MCBieSAiCisJCQkiR2FyeSBTdGVpbiA8TG9yZENuaWRhcmlhbkBnbWFpbC5jb20+XG4iKTsKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKaW5kZXggOTg3YWJlYi4uNjExNDJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCkBAIC02Nyw2ICs2Nyw3IEBACiAJeyAweDA0NmQsIDB4YzIxOSwgZmZfcnVtYmxlIH0sCiAJeyAweDA0NmQsIDB4YzI4MywgZmZfam95c3RpY2sgfSwKIAl7IDB4MDQ2ZCwgMHhjMjg2LCBmZl9qb3lzdGlja19hYyB9LAorCXsgMHgwNDZkLCAweGMyODcsIGZmX2pveXN0aWNrX2FjIH0sCiAJeyAweDA0NmQsIDB4YzI5MywgZmZfam95c3RpY2sgfSwKIAl7IDB4MDQ2ZCwgMHhjMjk0LCBmZl93aGVlbCB9LAogCXsgMHgwNDZkLCAweGMyOTUsIGZmX2pveXN0aWNrIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jIGIvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNhOTRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqICAgQXBwbGUgIk1hZ2ljIiBXaXJlbGVzcyBNb3VzZSBkcml2ZXIKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAxMCBNaWNoYWVsIFBvb2xlIDxtZHBvb2xlQHRyb2lsdXMub3JnPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RhdGljIGJvb2wgZW11bGF0ZV8zYnV0dG9uID0gdHJ1ZTsKK21vZHVsZV9wYXJhbShlbXVsYXRlXzNidXR0b24sIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbXVsYXRlXzNidXR0b24sICJFbXVsYXRlIGEgbWlkZGxlIGJ1dHRvbiIpOworCitzdGF0aWMgaW50IG1pZGRsZV9idXR0b25fc3RhcnQgPSAtMzUwOworc3RhdGljIGludCBtaWRkbGVfYnV0dG9uX3N0b3AgPSArMzUwOworCitzdGF0aWMgYm9vbCBlbXVsYXRlX3Njcm9sbF93aGVlbCA9IHRydWU7Cittb2R1bGVfcGFyYW0oZW11bGF0ZV9zY3JvbGxfd2hlZWwsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbXVsYXRlX3Njcm9sbF93aGVlbCwgIkVtdWxhdGUgYSBzY3JvbGwgd2hlZWwiKTsKKworc3RhdGljIGJvb2wgcmVwb3J0X3RvdWNoZXMgPSB0cnVlOworbW9kdWxlX3BhcmFtKHJlcG9ydF90b3VjaGVzLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVwb3J0X3RvdWNoZXMsICJFbWl0IHRvdWNoIHJlY29yZHMgKG90aGVyd2lzZSwgb25seSB1c2UgdGhlbSBmb3IgZW11bGF0aW9uKSIpOworCitzdGF0aWMgYm9vbCByZXBvcnRfdW5kZWNpcGhlcmVkOworbW9kdWxlX3BhcmFtKHJlcG9ydF91bmRlY2lwaGVyZWQsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZXBvcnRfdW5kZWNpcGhlcmVkLCAiUmVwb3J0IHVuZGVjaXBoZXJlZCBtdWx0aS10b3VjaCBzdGF0ZSBmaWVsZCB1c2luZyBhIE1TQ19SQVcgZXZlbnQiKTsKKworI2RlZmluZSBUT1VDSF9SRVBPUlRfSUQgICAweDI5CisvKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgbm90IHByZWNpc2UsIGJ1dCB0aGV5J3JlIGNsb3NlIGVub3VnaC4gIChCaXRzCisgKiAweDAzIHNlZW0gdG8gaW5kaWNhdGUgdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgdG91Y2gsIGJpdHMgMHg3MCBzZWVtCisgKiB0byBiZSBzb21lIGtpbmQgb2YgYml0IG1hc2sgLS0gMHgyMCBtYXkgYmUgYSBuZWFyLWZpZWxkIHJlYWRpbmcsCisgKiBhbmQgMHg0MCBpcyBhY3R1YWwgY29udGFjdCwgYW5kIDB4MTAgbWF5IGJlIGEgc3RhcnQvc3RvcCBvciBjaGFuZ2UKKyAqIGluZGljYXRpb24uKQorICovCisjZGVmaW5lIFRPVUNIX1NUQVRFX01BU0sgIDB4ZjAKKyNkZWZpbmUgVE9VQ0hfU1RBVEVfTk9ORSAgMHgwMAorI2RlZmluZSBUT1VDSF9TVEFURV9TVEFSVCAweDMwCisjZGVmaW5lIFRPVUNIX1NUQVRFX0RSQUcgIDB4NDAKKworLyoqCisgKiBzdHJ1Y3QgbWFnaWNtb3VzZV9zYyAtIFRyYWNrcyBNYWdpYyBNb3VzZS1zcGVjaWZpYyBkYXRhLgorICogQGlucHV0OiBJbnB1dCBkZXZpY2UgdGhyb3VnaCB3aGljaCB3ZSByZXBvcnQgZXZlbnRzLgorICogQHF1aXJrczogQ3VycmVudGx5IHVudXNlZC4KKyAqIEBsYXN0X3RpbWVzdGFtcDogVGltZXN0YW1wIGZyb20gbW9zdCByZWNlbnQgKDE4LWJpdCkgdG91Y2ggcmVwb3J0CisgKiAgICAgKHVuaXRzIG9mIG1pbGxpc2Vjb25kcyBvdmVyIHNob3J0IHdpbmRvd3MsIGJ1dCBzZWVtcyB0bworICogICAgIGluY3JlYXNlIGZhc3RlciB3aGVuIHRoZXJlIGFyZSBubyB0b3VjaGVzKS4KKyAqIEBkZWx0YV90aW1lOiAxOC1iaXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gbW9zdCByZWNlbnQgdG91Y2gKKyAqICAgICByZXBvcnRzIGZyb20gdGhlIG1vdXNlLgorICogQG50b3VjaGVzOiBOdW1iZXIgb2YgdG91Y2hlcyBpbiBtb3N0IHJlY2VudCB0b3VjaCByZXBvcnQuCisgKiBAc2Nyb2xsX2FjY2VsOiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgc2Nyb2xsIG1vdGlvbnMuCisgKiBAc2Nyb2xsX2ppZmZpZXM6IFRpbWUgb2YgbGFzdCBzY3JvbGwgbW90aW9uLgorICogQHRvdWNoZXM6IE1vc3QgcmVjZW50IGRhdGEgZm9yIGEgdG91Y2gsIGluZGV4ZWQgYnkgdHJhY2tpbmcgSUQuCisgKiBAdHJhY2tpbmdfaWRzOiBNYXBwaW5nIG9mIGN1cnJlbnQgdG91Y2ggaW5wdXQgZGF0YSB0byBAdG91Y2hlcy4KKyAqLworc3RydWN0IG1hZ2ljbW91c2Vfc2MgeworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXVuc2lnbmVkIGxvbmcgcXVpcmtzOworCisJaW50IGxhc3RfdGltZXN0YW1wOworCWludCBkZWx0YV90aW1lOworCWludCBudG91Y2hlczsKKwlpbnQgc2Nyb2xsX2FjY2VsOworCXVuc2lnbmVkIGxvbmcgc2Nyb2xsX2ppZmZpZXM7CisKKwlzdHJ1Y3QgeworCQlzaG9ydCB4OworCQlzaG9ydCB5OworCQlzaG9ydCBzY3JvbGxfeTsKKwkJdTggc2l6ZTsKKwl9IHRvdWNoZXNbMTZdOworCWludCB0cmFja2luZ19pZHNbMTZdOworfTsKKworc3RhdGljIGludCBtYWdpY21vdXNlX2Zpcm1fdG91Y2goc3RydWN0IG1hZ2ljbW91c2Vfc2MgKm1zYykKK3sKKwlpbnQgdG91Y2ggPSAtMTsKKwlpbnQgaWk7CisKKwkvKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSAiZmlybSIgdG91Y2gsIHNldCB0b3VjaCB0byBpdHMKKwkgKiB0cmFja2luZyBJRC4KKwkgKi8KKwlmb3IgKGlpID0gMDsgaWkgPCBtc2MtPm50b3VjaGVzOyBpaSsrKSB7CisJCWludCBpZHggPSBtc2MtPnRyYWNraW5nX2lkc1tpaV07CisJCWlmIChtc2MtPnRvdWNoZXNbaWR4XS5zaXplIDwgOCkgeworCQkJLyogSWdub3JlIHRoaXMgdG91Y2guICovCisJCX0gZWxzZSBpZiAodG91Y2ggPj0gMCkgeworCQkJdG91Y2ggPSAtMTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJdG91Y2ggPSBpZHg7CisJCX0KKwl9CisKKwlyZXR1cm4gdG91Y2g7Cit9CisKK3N0YXRpYyB2b2lkIG1hZ2ljbW91c2VfZW1pdF9idXR0b25zKHN0cnVjdCBtYWdpY21vdXNlX3NjICptc2MsIGludCBzdGF0ZSkKK3sKKwlpbnQgbGFzdF9zdGF0ZSA9IHRlc3RfYml0KEJUTl9MRUZULCBtc2MtPmlucHV0LT5rZXkpIDw8IDAgfAorCQl0ZXN0X2JpdChCVE5fUklHSFQsIG1zYy0+aW5wdXQtPmtleSkgPDwgMSB8CisJCXRlc3RfYml0KEJUTl9NSURETEUsIG1zYy0+aW5wdXQtPmtleSkgPDwgMjsKKworCWlmIChlbXVsYXRlXzNidXR0b24pIHsKKwkJaW50IGlkOworCisJCS8qIElmIHNvbWUgYnV0dG9uIHdhcyBwcmVzc2VkIGJlZm9yZSwga2VlcCBpdCBoZWxkCisJCSAqIGRvd24uICBPdGhlcndpc2UsIGlmIHRoZXJlJ3MgZXhhY3RseSBvbmUgZmlybQorCQkgKiB0b3VjaCwgdXNlIHRoYXQgdG8gb3ZlcnJpZGUgdGhlIG1vdXNlJ3MgZ3Vlc3MuCisJCSAqLworCQlpZiAoc3RhdGUgPT0gMCkgeworCQkJLyogVGhlIGJ1dHRvbiB3YXMgcmVsZWFzZWQuICovCisJCX0gZWxzZSBpZiAobGFzdF9zdGF0ZSAhPSAwKSB7CisJCQlzdGF0ZSA9IGxhc3Rfc3RhdGU7CisJCX0gZWxzZSBpZiAoKGlkID0gbWFnaWNtb3VzZV9maXJtX3RvdWNoKG1zYykpID49IDApIHsKKwkJCWludCB4ID0gbXNjLT50b3VjaGVzW2lkXS54OworCQkJaWYgKHggPCBtaWRkbGVfYnV0dG9uX3N0YXJ0KQorCQkJCXN0YXRlID0gMTsKKwkJCWVsc2UgaWYgKHggPiBtaWRkbGVfYnV0dG9uX3N0b3ApCisJCQkJc3RhdGUgPSAyOworCQkJZWxzZQorCQkJCXN0YXRlID0gNDsKKwkJfSAvKiBlbHNlOiB3ZSBrZWVwIHRoZSBtb3VzZSdzIGd1ZXNzICovCisKKwkJaW5wdXRfcmVwb3J0X2tleShtc2MtPmlucHV0LCBCVE5fTUlERExFLCBzdGF0ZSAmIDQpOworCX0KKworCWlucHV0X3JlcG9ydF9rZXkobXNjLT5pbnB1dCwgQlROX0xFRlQsIHN0YXRlICYgMSk7CisJaW5wdXRfcmVwb3J0X2tleShtc2MtPmlucHV0LCBCVE5fUklHSFQsIHN0YXRlICYgMik7CisKKwlpZiAoc3RhdGUgIT0gbGFzdF9zdGF0ZSkKKwkJbXNjLT5zY3JvbGxfYWNjZWwgPSAwOworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX2VtaXRfdG91Y2goc3RydWN0IG1hZ2ljbW91c2Vfc2MgKm1zYywgaW50IHJhd19pZCwgdTggKnRkYXRhKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gbXNjLT5pbnB1dDsKKwlfX3MzMiB4X3kgPSB0ZGF0YVswXSA8PCA4IHwgdGRhdGFbMV0gPDwgMTYgfCB0ZGF0YVsyXSA8PCAyNDsKKwlpbnQgbWlzYyA9IHRkYXRhWzVdIHwgdGRhdGFbNl0gPDwgODsKKwlpbnQgaWQgPSAobWlzYyA+PiA2KSAmIDE1OworCWludCB4ID0geF95IDw8IDEyID4+IDIwOworCWludCB5ID0gLSh4X3kgPj4gMjApOworCisJLyogU3RvcmUgdHJhY2tpbmcgSUQgYW5kIG90aGVyIGZpZWxkcy4gKi8KKwltc2MtPnRyYWNraW5nX2lkc1tyYXdfaWRdID0gaWQ7CisJbXNjLT50b3VjaGVzW2lkXS54ID0geDsKKwltc2MtPnRvdWNoZXNbaWRdLnkgPSB5OworCW1zYy0+dG91Y2hlc1tpZF0uc2l6ZSA9IG1pc2MgJiA2MzsKKworCS8qIElmIHJlcXVlc3RlZCwgZW11bGF0ZSBhIHNjcm9sbCB3aGVlbCBieSBkZXRlY3Rpbmcgc21hbGwKKwkgKiB2ZXJ0aWNhbCB0b3VjaCBtb3Rpb25zIGFsb25nIHRoZSBtaWRkbGUgb2YgdGhlIG1vdXNlLgorCSAqLworCWlmIChlbXVsYXRlX3Njcm9sbF93aGVlbCAmJgorCSAgICBtaWRkbGVfYnV0dG9uX3N0YXJ0IDwgeCAmJiB4IDwgbWlkZGxlX2J1dHRvbl9zdG9wKSB7CisJCXN0YXRpYyBjb25zdCBpbnQgYWNjZWxfcHJvZmlsZVtdID0geworCQkJMjU2LCAyMjgsIDE5MiwgMTYwLCAxMjgsIDk2LCA2NCwgMzIsCisJCX07CisJCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwkJaW50IHN0ZXAgPSBtc2MtPnRvdWNoZXNbaWRdLnNjcm9sbF95IC0geTsKKworCQkvKiBSZXNldCBhY2NlbGVyYXRpb24gYWZ0ZXIgaGFsZiBhIHNlY29uZC4gKi8KKwkJaWYgKHRpbWVfYWZ0ZXIobm93LCBtc2MtPnNjcm9sbF9qaWZmaWVzICsgSFogLyAyKSkKKwkJCW1zYy0+c2Nyb2xsX2FjY2VsID0gMDsKKworCQkvKiBDYWxjdWxhdGUgYW5kIGFwcGx5IHRoZSBzY3JvbGwgbW90aW9uLiAqLworCQlzd2l0Y2ggKHRkYXRhWzddICYgVE9VQ0hfU1RBVEVfTUFTSykgeworCQljYXNlIFRPVUNIX1NUQVRFX1NUQVJUOgorCQkJbXNjLT50b3VjaGVzW2lkXS5zY3JvbGxfeSA9IHk7CisJCQltc2MtPnNjcm9sbF9hY2NlbCA9IG1pbl90KGludCwgbXNjLT5zY3JvbGxfYWNjZWwgKyAxLAorCQkJCQkJQVJSQVlfU0laRShhY2NlbF9wcm9maWxlKSAtIDEpOworCQkJYnJlYWs7CisJCWNhc2UgVE9VQ0hfU1RBVEVfRFJBRzoKKwkJCXN0ZXAgPSBzdGVwIC8gYWNjZWxfcHJvZmlsZVttc2MtPnNjcm9sbF9hY2NlbF07CisJCQlpZiAoc3RlcCAhPSAwKSB7CisJCQkJbXNjLT50b3VjaGVzW2lkXS5zY3JvbGxfeSA9IHk7CisJCQkJbXNjLT5zY3JvbGxfamlmZmllcyA9IG5vdzsKKwkJCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCBSRUxfV0hFRUwsIHN0ZXApOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBHZW5lcmF0ZSB0aGUgaW5wdXQgZXZlbnRzIGZvciB0aGlzIHRvdWNoLiAqLworCWlmIChyZXBvcnRfdG91Y2hlcykgeworCQlpbnQgb3JpZW50YXRpb24gPSAobWlzYyA+PiAxMCkgLSAzMjsKKworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfVFJBQ0tJTkdfSUQsIGlkKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1RPVUNIX01BSk9SLCB0ZGF0YVszXSk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UT1VDSF9NSU5PUiwgdGRhdGFbNF0pOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sIG9yaWVudGF0aW9uKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1gsIHgpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgeSk7CisKKwkJaWYgKHJlcG9ydF91bmRlY2lwaGVyZWQpCisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfTVNDLCBNU0NfUkFXLCB0ZGF0YVs3XSk7CisKKwkJaW5wdXRfbXRfc3luYyhpbnB1dCk7CisJfQorfQorCitzdGF0aWMgaW50IG1hZ2ljbW91c2VfcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IG1hZ2ljbW91c2Vfc2MgKm1zYyA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IG1zYy0+aW5wdXQ7CisJaW50IHgsIHksIHRzLCBpaSwgY2xpY2tzOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAweDEwOgorCQlpZiAoc2l6ZSAhPSA2KQorCQkJcmV0dXJuIDA7CisJCXggPSAoX19zMTYpKGRhdGFbMl0gfCBkYXRhWzNdIDw8IDgpOworCQl5ID0gKF9fczE2KShkYXRhWzRdIHwgZGF0YVs1XSA8PCA4KTsKKwkJY2xpY2tzID0gZGF0YVsxXTsKKwkJYnJlYWs7CisJY2FzZSBUT1VDSF9SRVBPUlRfSUQ6CisJCS8qIEV4cGVjdCBzaXggYnl0ZXMgb2YgcHJlZml4LCBhbmQgTio4IGJ5dGVzIG9mIHRvdWNoIGRhdGEuICovCisJCWlmIChzaXplIDwgNiB8fCAoKHNpemUgLSA2KSAlIDgpICE9IDApCisJCQlyZXR1cm4gMDsKKwkJdHMgPSBkYXRhWzNdID4+IDYgfCBkYXRhWzRdIDw8IDIgfCBkYXRhWzVdIDw8IDEwOworCQltc2MtPmRlbHRhX3RpbWUgPSAodHMgLSBtc2MtPmxhc3RfdGltZXN0YW1wKSAmIDB4M2ZmZmY7CisJCW1zYy0+bGFzdF90aW1lc3RhbXAgPSB0czsKKwkJbXNjLT5udG91Y2hlcyA9IChzaXplIC0gNikgLyA4OworCQlmb3IgKGlpID0gMDsgaWkgPCBtc2MtPm50b3VjaGVzOyBpaSsrKQorCQkJbWFnaWNtb3VzZV9lbWl0X3RvdWNoKG1zYywgaWksIGRhdGEgKyBpaSAqIDggKyA2KTsKKwkJLyogV2hlbiBlbXVsYXRpbmcgdGhyZWUtYnV0dG9uIG1vZGUsIGl0IGlzIGltcG9ydGFudAorCQkgKiB0byBoYXZlIHRoZSBjdXJyZW50IHRvdWNoIGluZm9ybWF0aW9uIGJlZm9yZQorCQkgKiBnZW5lcmF0aW5nIGEgY2xpY2sgZXZlbnQuCisJCSAqLworCQl4ID0gKHNpZ25lZCBjaGFyKWRhdGFbMV07CisJCXkgPSAoc2lnbmVkIGNoYXIpZGF0YVsyXTsKKwkJY2xpY2tzID0gZGF0YVszXTsKKwkJYnJlYWs7CisJY2FzZSAweDIwOiAvKiBUaGVvcmV0aWNhbGx5IGJhdHRlcnkgc3RhdHVzICgwLTEwMCksIGJ1dCBJIGhhdmUKKwkJICAgICogbmV2ZXIgc2VlbiBpdCAtLSBtYXliZSBpdCBpcyBvbmx5IHVwb24gcmVxdWVzdC4KKwkJICAgICovCisJY2FzZSAweDYwOiAvKiBVbmtub3duLCBtYXliZSBsYXNlciBvbi9vZmYuICovCisJY2FzZSAweDYxOiAvKiBMYXNlciByZWZsZWN0aW9uIHN0YXR1cyBjaGFuZ2UuCisJCSAgICAqIGRhdGFbMV06IDAgPSBzcG90dGVkLCAxID0gbG9zdAorCQkgICAgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwltYWdpY21vdXNlX2VtaXRfYnV0dG9ucyhtc2MsIGNsaWNrcyAmIDMpOworCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9YLCB4KTsKKwlpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCBSRUxfWSwgeSk7CisJaW5wdXRfc3luYyhpbnB1dCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbWFnaWNtb3VzZV9pbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBoaWQtPmxsX2RyaXZlci0+b3BlbihoaWQpOworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX2lucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCWhpZC0+bGxfZHJpdmVyLT5jbG9zZShoaWQpOworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX3NldHVwX2lucHV0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCBzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dCwgaGRldik7CisJaW5wdXQtPmV2ZW50ID0gaGRldi0+bGxfZHJpdmVyLT5oaWRpbnB1dF9pbnB1dF9ldmVudDsKKwlpbnB1dC0+b3BlbiA9IG1hZ2ljbW91c2VfaW5wdXRfb3BlbjsKKwlpbnB1dC0+Y2xvc2UgPSBtYWdpY21vdXNlX2lucHV0X2Nsb3NlOworCisJaW5wdXQtPm5hbWUgPSBoZGV2LT5uYW1lOworCWlucHV0LT5waHlzID0gaGRldi0+cGh5czsKKwlpbnB1dC0+dW5pcSA9IGhkZXYtPnVuaXE7CisJaW5wdXQtPmlkLmJ1c3R5cGUgPSBoZGV2LT5idXM7CisJaW5wdXQtPmlkLnZlbmRvciA9IGhkZXYtPnZlbmRvcjsKKwlpbnB1dC0+aWQucHJvZHVjdCA9IGhkZXYtPnByb2R1Y3Q7CisJaW5wdXQtPmlkLnZlcnNpb24gPSBoZGV2LT52ZXJzaW9uOworCWlucHV0LT5kZXYucGFyZW50ID0gaGRldi0+ZGV2LnBhcmVudDsKKworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CisJX19zZXRfYml0KEJUTl9MRUZULCBpbnB1dC0+a2V5Yml0KTsKKwlfX3NldF9iaXQoQlROX1JJR0hULCBpbnB1dC0+a2V5Yml0KTsKKwlpZiAoZW11bGF0ZV8zYnV0dG9uKQorCQlfX3NldF9iaXQoQlROX01JRERMRSwgaW5wdXQtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9UT09MX0ZJTkdFUiwgaW5wdXQtPmtleWJpdCk7CisKKwlfX3NldF9iaXQoRVZfUkVMLCBpbnB1dC0+ZXZiaXQpOworCV9fc2V0X2JpdChSRUxfWCwgaW5wdXQtPnJlbGJpdCk7CisJX19zZXRfYml0KFJFTF9ZLCBpbnB1dC0+cmVsYml0KTsKKwlpZiAoZW11bGF0ZV9zY3JvbGxfd2hlZWwpCisJCV9fc2V0X2JpdChSRUxfV0hFRUwsIGlucHV0LT5yZWxiaXQpOworCisJaWYgKHJlcG9ydF90b3VjaGVzKSB7CisJCV9fc2V0X2JpdChFVl9BQlMsIGlucHV0LT5ldmJpdCk7CisKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9UUkFDS0lOR19JRCwgMCwgMTUsIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1RPVUNIX01BSk9SLCAwLCAyNTUsIDQsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1RPVUNIX01JTk9SLCAwLCAyNTUsIDQsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX09SSUVOVEFUSU9OLCAtMzIsIDMxLCAxLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCAtMTEwMCwgMTM1OCwKKwkJCQk0LCAwKTsKKwkJLyogTm90ZTogVG91Y2ggWSBwb3NpdGlvbiBmcm9tIHRoZSBkZXZpY2UgaXMgaW52ZXJ0ZWQgcmVsYXRpdmUKKwkJICogdG8gaG93IHBvaW50ZXIgbW90aW9uIGlzIHJlcG9ydGVkIChhbmQgcmVsYXRpdmUgdG8gaG93IFVTQgorCQkgKiBISUQgcmVjb21tZW5kcyB0aGUgY29vcmRpbmF0ZXMgd29yaykuICBUaGlzIGRyaXZlciBrZWVwcworCQkgKiB0aGUgb3JpZ2luIGF0IHRoZSBzYW1lIHBvc2l0aW9uLCBhbmQganVzdCB1c2VzIHRoZSBhZGRpdGl2ZQorCQkgKiBpbnZlcnNlIG9mIHRoZSByZXBvcnRlZCBZLgorCQkgKi8KKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9ZLCAtMTU4OSwgMjA0NywKKwkJCQk0LCAwKTsKKwl9CisKKwlpZiAocmVwb3J0X3VuZGVjaXBoZXJlZCkgeworCQlfX3NldF9iaXQoRVZfTVNDLCBpbnB1dC0+ZXZiaXQpOworCQlfX3NldF9iaXQoTVNDX1JBVywgaW5wdXQtPm1zY2JpdCk7CisJfQorfQorCitzdGF0aWMgaW50IG1hZ2ljbW91c2VfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCV9fdTggZmVhdHVyZV8xW10gPSB7IDB4ZDcsIDB4MDEgfTsKKwlfX3U4IGZlYXR1cmVfMltdID0geyAweGY4LCAweDAxLCAweDMyIH07CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJc3RydWN0IG1hZ2ljbW91c2Vfc2MgKm1zYzsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCWludCByZXQ7CisKKwltc2MgPSBremFsbG9jKHNpemVvZigqbXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1zYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIG1hZ2ljbW91c2UgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1zYy0+cXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBtc2MpOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAibWFnaWNtb3VzZSBoaWQgcGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJtYWdpY21vdXNlIGh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmVwb3J0ID0gaGlkX3JlZ2lzdGVyX3JlcG9ydChoZGV2LCBISURfSU5QVVRfUkVQT1JULCBUT1VDSF9SRVBPUlRfSUQpOworCWlmICghcmVwb3J0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciB0b3VjaCByZXBvcnRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9zdG9wX2h3OworCX0KKwlyZXBvcnQtPnNpemUgPSA2OworCisJcmV0ID0gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIGZlYXR1cmVfMSwgc2l6ZW9mKGZlYXR1cmVfMSksCisJCQlISURfRkVBVFVSRV9SRVBPUlQpOworCWlmIChyZXQgIT0gc2l6ZW9mKGZlYXR1cmVfMSkpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgdG91Y2ggZGF0YSAoMTolZClcbiIsCisJCQkJcmV0KTsKKwkJZ290byBlcnJfc3RvcF9odzsKKwl9CisJcmV0ID0gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIGZlYXR1cmVfMiwKKwkJCXNpemVvZihmZWF0dXJlXzIpLCBISURfRkVBVFVSRV9SRVBPUlQpOworCWlmIChyZXQgIT0gc2l6ZW9mKGZlYXR1cmVfMikpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgdG91Y2ggZGF0YSAoMjolZClcbiIsCisJCQkJcmV0KTsKKwkJZ290byBlcnJfc3RvcF9odzsKKwl9CisKKwlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgaW5wdXQgZGV2aWNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfc3RvcF9odzsKKwl9CisJbWFnaWNtb3VzZV9zZXR1cF9pbnB1dChpbnB1dCwgaGRldik7CisKKwlyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaW5wdXQgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9pbnB1dDsKKwl9CisJbXNjLT5pbnB1dCA9IGlucHV0OworCisJcmV0dXJuIDA7CitlcnJfaW5wdXQ6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOworZXJyX3N0b3BfaHc6CisJaGlkX2h3X3N0b3AoaGRldik7CitlcnJfZnJlZToKKwlrZnJlZShtc2MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1hZ2ljbW91c2VfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBtYWdpY19taWNlW10gPSB7CisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01BR0lDTU9VU0UpLAorCQkuZHJpdmVyX2RhdGEgPSAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1hZ2ljX21pY2UpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbWFnaWNtb3VzZV9kcml2ZXIgPSB7CisJLm5hbWUgPSAibWFnaWNtb3VzZSIsCisJLmlkX3RhYmxlID0gbWFnaWNfbWljZSwKKwkucHJvYmUgPSBtYWdpY21vdXNlX3Byb2JlLAorCS5yZW1vdmUgPSBtYWdpY21vdXNlX3JlbW92ZSwKKwkucmF3X2V2ZW50ID0gbWFnaWNtb3VzZV9yYXdfZXZlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYWdpY21vdXNlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaGlkX3JlZ2lzdGVyX2RyaXZlcigmbWFnaWNtb3VzZV9kcml2ZXIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgcmVnaXN0ZXIgbWFnaWNtb3VzZSBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1hZ2ljbW91c2VfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbWFnaWNtb3VzZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtYWdpY21vdXNlX2luaXQpOworbW9kdWxlX2V4aXQobWFnaWNtb3VzZV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tb3NhcnQuYyBiL2RyaXZlcnMvaGlkL2hpZC1tb3NhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODcxODE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1vc2FydC5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHRoZSBtdWx0aXRvdWNoIHBhbmVsIG9uIHRoZSBBU1VTIEVlZVBDIFQ5MU1UCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+CisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIFRlZW11IFR1b21pbmVuIDx0ZWVtdS50dW9taW5lbkBjeWJlcmNvbS5jb20+CisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1vc0FydCBkdWFsLXRvdWNoIHBhbmVsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBtb3NhcnRfZGF0YSB7CisJX191MTYgeCwgeTsKKwlfX3U4IGlkOworCWJvb2wgdmFsaWQ7CQkvKiB2YWxpZCBmaW5nZXIgZGF0YSwgb3IganVzdCBwbGFjZWhvbGRlcj8gKi8KKwlib29sIGZpcnN0OwkJLyogaXMgdGhpcyB0aGUgZmlyc3QgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCisJYm9vbCBhY3Rpdml0eV9ub3c7CS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCisJYm9vbCBhY3Rpdml0eTsJCS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIHByZXZpb3VzbHk/ICovCit9OworCitzdGF0aWMgaW50IG1vc2FydF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgeworCisJY2FzZSBISURfVVBfR0VOREVTSzoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0dEX1g6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0dEX1k6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19ZLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9VUF9ESUdJVElaRVI6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKKwkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6CisJCWNhc2UgSElEX0RHX1dJRFRIOgorCQljYXNlIEhJRF9ER19IRUlHSFQ6CisJCQlyZXR1cm4gLTE7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7CisJCQlyZXR1cm4gMTsKKworCQl9CisJCXJldHVybiAwOworCisJY2FzZSAweGZmMDAwMDAwOgorCQkvKiBpZ25vcmUgSElEIGZlYXR1cmVzICovCisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtb3NhcnRfaW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKKwkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHdob2xlIGZpbmdlciBoYXMgYmVlbiBwYXJzZWQsCisgKiBzbyB0aGF0IGl0IGNhbiBkZWNpZGUgd2hhdCB0byBzZW5kIHRvIHRoZSBpbnB1dCBsYXllci4KKyAqLworc3RhdGljIHZvaWQgbW9zYXJ0X2ZpbHRlcl9ldmVudChzdHJ1Y3QgbW9zYXJ0X2RhdGEgKnRkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwl0ZC0+Zmlyc3QgPSAhdGQtPmZpcnN0OyAvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKworCWlmICghdGQtPnZhbGlkKSB7CisJCS8qCisJCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgbm8gZmluZ2VyIGluIHRoaXMgZnJhbWUgaXMgdmFsaWQKKwkJICogYW5kIHRoZXJlIHByZXZpb3VzbHkgd2FzIGZpbmdlciBhY3Rpdml0eSwgdGhpcyBpcyBhIHJlbGVhc2UKKwkJICovIAorCQlpZiAoIXRkLT5maXJzdCAmJiAhdGQtPmFjdGl2aXR5X25vdyAmJiB0ZC0+YWN0aXZpdHkpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMCk7CisJCQl0ZC0+YWN0aXZpdHkgPSBmYWxzZTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lELCB0ZC0+aWQpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCB0ZC0+eCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1ksIHRkLT55KTsKKworCWlucHV0X210X3N5bmMoaW5wdXQpOworCXRkLT52YWxpZCA9IGZhbHNlOworCisJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiBmaXJzdCBhY3RpdmUgZmluZ2VyIGluIHRoaXMgZnJhbWUuLi4gKi8KKwlpZiAoIXRkLT5hY3Rpdml0eV9ub3cpIHsKKwkJLyogaWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIGFjdGl2aXR5LCBlbWl0IHRvdWNoIGV2ZW50ICovCisJCWlmICghdGQtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDEpOworCQkJdGQtPmFjdGl2aXR5ID0gdHJ1ZTsKKwkJfQorCQl0ZC0+YWN0aXZpdHlfbm93ID0gdHJ1ZTsKKwkJLyogYW5kIGluIGFueSBjYXNlIHRoaXMgaXMgb3VyIHByZWZlcnJlZCBmaW5nZXIgKi8KKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIHRkLT54KTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIHRkLT55KTsKKwl9Cit9CisKKworc3RhdGljIGludCBtb3NhcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBtb3NhcnRfZGF0YSAqdGQgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgeworCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQkJdGQtPnZhbGlkID0gISF2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9YOgorCQkJdGQtPnggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9ZOgorCQkJdGQtPnkgPSB2YWx1ZTsKKwkJCW1vc2FydF9maWx0ZXJfZXZlbnQodGQsIGlucHV0KTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQl0ZC0+aWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCQkvKiB0b3VjaCBlbXVsYXRpb246IHRoaXMgaXMgdGhlIGxhc3QgZmllbGQgaW4gYSBmcmFtZSAqLworCQkJdGQtPmZpcnN0ID0gZmFsc2U7CisJCQl0ZC0+YWN0aXZpdHlfbm93ID0gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJLyogYXZvaWQgaW50ZXJmZXJlbmNlIGZyb20gZ2VuZXJpYyBoaWRpbnB1dCBoYW5kbGluZyAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIGZhbGxiYWNrIHRvIHRoZSBnZW5lcmljIGhpZGlucHV0IGhhbmRsaW5nICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCisJCWhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbW9zYXJ0X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbW9zYXJ0X2RhdGEgKnRkOworCisKKwl0ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3NhcnRfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghdGQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIE1vc0FydCBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXRkLT52YWxpZCA9IGZhbHNlOworCXRkLT5hY3Rpdml0eSA9IGZhbHNlOworCXRkLT5hY3Rpdml0eV9ub3cgPSBmYWxzZTsKKwl0ZC0+Zmlyc3QgPSBmYWxzZTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgdGQpOworCisJLyogY3VycmVudGx5LCBpdCdzIGJldHRlciB0byBoYXZlIG9uZSBldmRldiBkZXZpY2Ugb25seSAqLworI2lmIDAKKwloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX01VTFRJX0lOUFVUOworI2VuZGlmCisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisKKwlpZiAocmV0ID09IDApIHsKKwkJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmUgPSBoZGV2LT5yZXBvcnRfZW51bQorCQkJCQkJKyBISURfRkVBVFVSRV9SRVBPUlQ7CisJCXN0cnVjdCBoaWRfcmVwb3J0ICpyID0gcmUtPnJlcG9ydF9pZF9oYXNoWzddOworCisJCXItPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDI7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhkZXYsIHIsIFVTQl9ESVJfT1VUKTsKKwl9IGVsc2UgCisJCWtmcmVlKHRkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1vc2FydF9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBtb3NhcnRfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfVDkxTVQpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1vc2FydF9kZXZpY2VzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgbW9zYXJ0X2dyYWJiZWRfdXNhZ2VzW10gPSB7CisJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCisJeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1vc2FydF9kcml2ZXIgPSB7CisJLm5hbWUgPSAibW9zYXJ0IiwKKwkuaWRfdGFibGUgPSBtb3NhcnRfZGV2aWNlcywKKwkucHJvYmUgPSBtb3NhcnRfcHJvYmUsCisJLnJlbW92ZSA9IG1vc2FydF9yZW1vdmUsCisJLmlucHV0X21hcHBpbmcgPSBtb3NhcnRfaW5wdXRfbWFwcGluZywKKwkuaW5wdXRfbWFwcGVkID0gbW9zYXJ0X2lucHV0X21hcHBlZCwKKwkudXNhZ2VfdGFibGUgPSBtb3NhcnRfZ3JhYmJlZF91c2FnZXMsCisJLmV2ZW50ID0gbW9zYXJ0X2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbW9zYXJ0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmbW9zYXJ0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtb3NhcnRfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbW9zYXJ0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1vc2FydF9pbml0KTsKK21vZHVsZV9leGl0KG1vc2FydF9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYwppbmRleCA0OWNlNjlkLi4zMjM0YzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYwpAQCAtMjUsMTEgKzI1LDE2IEBACiAJCQkJCUVWX0tFWSwgKGMpKQogCiBzdHJ1Y3QgbnRyaWdfZGF0YSB7Ci0JX19zMzIgeCwgeSwgaWQsIHcsIGg7Ci0JY2hhciByZWFkaW5nX2FfcG9pbnQsIGZvdW5kX2NvbnRhY3RfaWQ7Ci0JY2hhciBwZW5fYWN0aXZlOwotCWNoYXIgZmluZ2VyX2FjdGl2ZTsKLQljaGFyIGludmVydGVkOworCS8qIEluY29taW5nIHJhdyB2YWx1ZXMgZm9yIGEgc2luZ2xlIGNvbnRhY3QgKi8KKwlfX3UxNiB4LCB5LCB3LCBoOworCV9fdTE2IGlkOworCV9fdTggY29uZmlkZW5jZTsKKworCWJvb2wgcmVhZGluZ19tdDsKKwlfX3U4IGZpcnN0X2NvbnRhY3RfY29uZmlkZW5jZTsKKworCV9fdTggbXRfZm9vdGVyWzRdOworCV9fdTggbXRfZm9vdF9jb3VudDsKIH07CiAKIC8qCkBAIC00Miw4ICs0NywxMSBAQAogCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCiAJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQogewotCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CisJLyogTm8gc3BlY2lhbCBtYXBwaW5ncyBuZWVkZWQgZm9yIHRoZSBwZW4gYW5kIHNpbmdsZSB0b3VjaCAqLworCWlmIChmaWVsZC0+cGh5c2ljYWwpCisJCXJldHVybiAwOwogCisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKIAljYXNlIEhJRF9VUF9HRU5ERVNLOgogCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKIAkJY2FzZSBISURfR0RfWDoKQEAgLTY2LDE4ICs3NCwxMiBAQAogCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKIAkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CiAJCS8qIHdlIGRvIG5vdCB3YW50IHRvIG1hcCB0aGVzZSBmb3Igbm93ICovCi0JCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDogLyogdmFsdWUgaXMgdXNlbGVzcyAqLworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6IC8qIE5vdCB0cnVzdHdvcnRoeSwgc3F1ZWxjaCBmb3Igbm93ICovCiAJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKIAkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKIAkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKIAkJCXJldHVybiAtMTsKIAotCQkvKiBvcmlnaW5hbCBtYXBwaW5nIGJ5IFJhZmkgUnViaW4gKi8KLQkJY2FzZSBISURfREdfQ09ORklERU5DRToKLQkJCW50X21hcF9rZXlfY2xlYXIoQlROX1RPT0xfRE9VQkxFVEFQKTsKLQkJCXJldHVybiAxOwotCiAJCS8qIHdpZHRoL2hlaWdodCBtYXBwZWQgb24gVG91Y2hNYWpvci9Ub3VjaE1pbm9yL09yaWVudGF0aW9uICovCiAJCWNhc2UgSElEX0RHX1dJRFRIOgogCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LApAQCAtMTA0LDYgKzEwNiwxMCBAQAogCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCiAJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQogeworCS8qIE5vIHNwZWNpYWwgbWFwcGluZ3MgbmVlZGVkIGZvciB0aGUgcGVuIGFuZCBzaW5nbGUgdG91Y2ggKi8KKwlpZiAoZmllbGQtPnBoeXNpY2FsKQorCQlyZXR1cm4gMDsKKwogCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfUkVMCiAJCQl8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCiAJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7CkBAIC0xMjMsMzEgKzEyOSwzMCBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKIAlzdHJ1Y3QgbnRyaWdfZGF0YSAqbmQgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKIAorCS8qIE5vIHNwZWNpYWwgaGFuZGxpbmcgbmVlZGVkIGZvciB0aGUgcGVuICovCisJaWYgKGZpZWxkLT5hcHBsaWNhdGlvbiA9PSBISURfREdfUEVOKQorCQlyZXR1cm4gMDsKKwogICAgICAgICBpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKIAkJc3dpdGNoICh1c2FnZS0+aGlkKSB7Ci0KLQkJY2FzZSBISURfREdfSU5SQU5HRToKLQkJCWlmIChmaWVsZC0+YXBwbGljYXRpb24gJiAweDMpCi0JCQkJbmQtPnBlbl9hY3RpdmUgPSAodmFsdWUgIT0gMCk7Ci0JCQllbHNlCi0JCQkJbmQtPmZpbmdlcl9hY3RpdmUgPSAodmFsdWUgIT0gMCk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9ER19JTlZFUlQ6Ci0JCQluZC0+aW52ZXJ0ZWQgPSB2YWx1ZTsKLQkJCXJldHVybiAwOwotCisJCWNhc2UgMHhmZjAwMDAwMToKKwkJCS8qIFRhZyBpbmRpY2F0aW5nIHRoZSBzdGFydCBvZiBhIG11bHRpdG91Y2ggZ3JvdXAgKi8KKwkJCW5kLT5yZWFkaW5nX210ID0gMTsKKwkJCW5kLT5maXJzdF9jb250YWN0X2NvbmZpZGVuY2UgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCQluZC0+Y29uZmlkZW5jZSA9IHZhbHVlOworCQkJYnJlYWs7CiAJCWNhc2UgSElEX0dEX1g6CiAJCQluZC0+eCA9IHZhbHVlOwotCQkJbmQtPnJlYWRpbmdfYV9wb2ludCA9IDE7CisJCQkvKiBDbGVhciB0aGUgY29udGFjdCBmb290ZXIgKi8KKwkJCW5kLT5tdF9mb290X2NvdW50ID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIEhJRF9HRF9ZOgogCQkJbmQtPnkgPSB2YWx1ZTsKIAkJCWJyZWFrOwogCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CiAJCQluZC0+aWQgPSB2YWx1ZTsKLQkJCS8qIHdlIHJlY2VpdmUgdGhpcyBvbmx5IHdoZW4gaW4gbXVsdGl0b3VjaCBtb2RlICovCi0JCQluZC0+Zm91bmRfY29udGFjdF9pZCA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBISURfREdfV0lEVEg6CiAJCQluZC0+dyA9IHZhbHVlOwpAQCAtMTU5LDM1ICsxNjQsMTMgQEAKIAkJCSAqIHJlcG9ydCByZWNlaXZlZCBpbiBhIGZpbmdlciBldmVudC4gV2Ugd2FudAogCQkJICogdG8gZW1pdCBhIG5vcm1hbCAoWCwgWSkgcG9zaXRpb24KIAkJCSAqLwotCQkJaWYgKCFuZC0+Zm91bmRfY29udGFjdF9pZCkgewotCQkJCWlmIChuZC0+cGVuX2FjdGl2ZSAmJiBuZC0+ZmluZ2VyX2FjdGl2ZSkgewotCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9PTF9ET1VCTEVUQVAsIDApOwotCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9PTF9ET1VCTEVUQVAsIDEpOwotCQkJCX0KKwkJCWlmICghbmQtPnJlYWRpbmdfbXQpIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9PTF9ET1VCTEVUQVAsCisJCQkJCQkgKG5kLT5jb25maWRlbmNlICE9IDApKTsKIAkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOwogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBuZC0+eSk7CiAJCQl9CiAJCQlicmVhazsKLQkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6Ci0JCQkvKgotCQkJICogd2hlbiBpbiBzaW5nbGUgdG91Y2ggbW9kZSwgdGhpcyBpcyB0aGUgbGFzdAotCQkJICogcmVwb3J0IHJlY2VpdmVkIGluIGEgcGVuIGV2ZW50LiBXZSB3YW50Ci0JCQkgKiB0byBlbWl0IGEgbm9ybWFsIChYLCBZKSBwb3NpdGlvbgotCQkJICovCi0JCQlpZiAoISBuZC0+Zm91bmRfY29udGFjdF9pZCkgewotCQkJCWlmIChuZC0+cGVuX2FjdGl2ZSAmJiBuZC0+ZmluZ2VyX2FjdGl2ZSkgewotCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAotCQkJCQkJCW5kLT5pbnZlcnRlZCA/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTgotCQkJCQkJCSwgMCk7Ci0JCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCi0JCQkJCQkJbmQtPmludmVydGVkID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOCi0JCQkJCQkJLCAxKTsKLQkJCQl9Ci0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIG5kLT54KTsKLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgbmQtPnkpOwotCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19QUkVTU1VSRSwgdmFsdWUpOwotCQkJfQotCQkJYnJlYWs7CiAJCWNhc2UgMHhmZjAwMDAwMjoKIAkJCS8qCiAJCQkgKiB3ZSByZWNlaXZlIHRoaXMgd2hlbiB0aGUgZGV2aWNlIGlzIGluIG11bHRpdG91Y2gKQEAgLTE5NSwxMCArMTc4LDM0IEBACiAJCQkgKiB0aGlzIHVzYWdlIHRlbGxzIGlmIHRoZSBjb250YWN0IHBvaW50IGlzIHJlYWwKIAkJCSAqIG9yIGEgcGxhY2Vob2xkZXIKIAkJCSAqLwotCQkJaWYgKCFuZC0+cmVhZGluZ19hX3BvaW50IHx8IHZhbHVlICE9IDEpCisKKwkJCS8qIFNob3VsZG4ndCBnZXQgbW9yZSB0aGFuIDQgZm9vdGVyIHBhY2tldHMsIHNvIHNraXAgKi8KKwkJCWlmIChuZC0+bXRfZm9vdF9jb3VudCA+PSA0KQogCQkJCWJyZWFrOworCisJCQluZC0+bXRfZm9vdGVyW25kLT5tdF9mb290X2NvdW50KytdID0gdmFsdWU7CisKKwkJCS8qIGlmIHRoZSBmb290ZXIgaXNuJ3QgY29tcGxldGUgYnJlYWsgKi8KKwkJCWlmIChuZC0+bXRfZm9vdF9jb3VudCAhPSA0KQorCQkJCWJyZWFrOworCisJCQkvKiBQZW4gYWN0aXZpdHkgc2lnbmFsLCB0cmlnZ2VyIGVuZCBvZiB0b3VjaC4gKi8KKwkJCWlmIChuZC0+bXRfZm9vdGVyWzJdKSB7CisJCQkJbmQtPmNvbmZpZGVuY2UgPSAwOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBJZiB0aGUgY29udGFjdCB3YXMgaW52YWxpZCAqLworCQkJaWYgKCEobmQtPmNvbmZpZGVuY2UgJiYgbmQtPm10X2Zvb3RlclswXSkKKwkJCQkJfHwgbmQtPncgPD0gMjUwCisJCQkJCXx8IG5kLT5oIDw9IDE5MCkgeworCQkJCW5kLT5jb25maWRlbmNlID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJLyogZW1pdCBhIG5vcm1hbCAoWCwgWSkgZm9yIHRoZSBmaXJzdCBwb2ludCBvbmx5ICovCiAJCQlpZiAobmQtPmlkID09IDApIHsKKwkJCQluZC0+Zmlyc3RfY29udGFjdF9jb25maWRlbmNlID0gbmQtPmNvbmZpZGVuY2U7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIG5kLT54KTsKIAkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgbmQtPnkpOwogCQkJfQpAQCAtMjIwLDggKzIyNywzOSBAQAogCQkJCQkJQUJTX01UX1RPVUNIX01JTk9SLCBuZC0+dyk7CiAJCQl9CiAJCQlpbnB1dF9tdF9zeW5jKGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQpOwotCQkJbmQtPnJlYWRpbmdfYV9wb2ludCA9IDA7Ci0JCQluZC0+Zm91bmRfY29udGFjdF9pZCA9IDA7CisJCQlicmVhazsKKworCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6IC8qIEVuZCBvZiBhIG11bHRpdG91Y2ggZ3JvdXAgKi8KKwkJCWlmICghbmQtPnJlYWRpbmdfbXQpCisJCQkJYnJlYWs7CisKKwkJCW5kLT5yZWFkaW5nX210ID0gMDsKKworCQkJaWYgKG5kLT5maXJzdF9jb250YWN0X2NvbmZpZGVuY2UpIHsKKwkJCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQkJY2FzZSAwOgkvKiBmb3Igc2luZ2xlIHRvdWNoIGRldmljZXMgKi8KKwkJCQljYXNlIDE6CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJQlROX1RPT0xfRE9VQkxFVEFQLCAxKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJCUJUTl9UT09MX1RSSVBMRVRBUCwgMSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQlkZWZhdWx0OgorCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJCUJUTl9UT09MX1FVQURUQVAsIDEpOworCQkJCX0KKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDEpOworCQkJfSBlbHNlIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJQlROX1RPT0xfRE9VQkxFVEFQLCAwKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJQlROX1RPT0xfVFJJUExFVEFQLCAwKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJQlROX1RPT0xfUVVBRFRBUCwgMCk7CisJCQl9CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMjMxLDggKzI2OSw4IEBACiAJfQogCiAJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KLSAgICAgICAgaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCi0gICAgICAgICAgICAgICAgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisJaWYgKChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTI0MSwyMyArMjc5LDY3IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgbnRyaWdfZGF0YSAqbmQ7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRhKQorCQloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX01VTFRJX0lOUFVUOwogCiAJbmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRyaWdfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghbmQpIHsKIAkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIE4tVHJpZyBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW5kLT5yZWFkaW5nX2FfcG9pbnQgPSAwOwotCW5kLT5mb3VuZF9jb250YWN0X2lkID0gMDsKKworCW5kLT5yZWFkaW5nX210ID0gMDsKIAloaWRfc2V0X2RydmRhdGEoaGRldiwgbmQpOwogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwotCWlmICghcmV0KQotCQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KIAotCWlmIChyZXQpCi0JCWtmcmVlIChuZCk7CisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CiAKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaGlkaW5wdXQsICZoZGV2LT5pbnB1dHMsIGxpc3QpIHsKKwkJaW5wdXQgPSBoaWRpbnB1dC0+aW5wdXQ7CisJCXN3aXRjaCAoaGlkaW5wdXQtPnJlcG9ydC0+ZmllbGRbMF0tPmFwcGxpY2F0aW9uKSB7CisJCWNhc2UgSElEX0RHX1BFTjoKKwkJCWlucHV0LT5uYW1lID0gIk4tVHJpZyBQZW4iOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX1RPVUNIU0NSRUVOOgorCQkJX19jbGVhcl9iaXQoQlROX1RPT0xfUEVOLCBpbnB1dC0+a2V5Yml0KTsKKwkJCS8qCisJCQkgKiBBIGxpdHRsZSBzb21ldGhpbmcgc3BlY2lhbCB0byBlbmFibGUKKwkJCSAqIHR3byBhbmQgdGhyZWUgZmluZ2VyIHRhcHMuCisJCQkgKi8KKwkJCV9fc2V0X2JpdChCVE5fVE9PTF9ET1VCTEVUQVAsIGlucHV0LT5rZXliaXQpOworCQkJX19zZXRfYml0KEJUTl9UT09MX1RSSVBMRVRBUCwgaW5wdXQtPmtleWJpdCk7CisJCQlfX3NldF9iaXQoQlROX1RPT0xfUVVBRFRBUCwgaW5wdXQtPmtleWJpdCk7CisJCQkvKgorCQkJICogVGhlIHBoeXNpY2FsIHRvdWNoc2NyZWVuIChzaW5nbGUgdG91Y2gpCisJCQkgKiBpbnB1dCBoYXMgYSB2YWx1ZSBmb3IgcGh5c2ljYWwsIHdoZXJlYXMKKwkJCSAqIHRoZSBtdWx0aXRvdWNoIG9ubHkgaGFzIGxvZ2ljYWwgaW5wdXQKKwkJCSAqIGZpZWxkcy4KKwkJCSAqLworCQkJaW5wdXQtPm5hbWUgPQorCQkJCShoaWRpbnB1dC0+cmVwb3J0LT5maWVsZFswXQorCQkJCSAtPnBoeXNpY2FsKSA/CisJCQkJIk4tVHJpZyBUb3VjaHNjcmVlbiIgOgorCQkJCSJOLVRyaWcgTXVsdGlUb3VjaCI7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworZXJyX2ZyZWU6CisJa2ZyZWUobmQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3Niw3ICszNTgsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBudHJpZ19ncmFiYmVkX3VzYWdlc1tdID0gewogCXsgSElEX0FOWV9JRCwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCB9LAotCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMX0KKwl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEgfQogfTsKIAogc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG50cmlnX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1vcnRlay5jIGIvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5YTk2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1vcnRlay5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3IgT3J0ZWsgV0tCLTIwMDAgKHdpcmVsZXNzIGtleWJvYXJkICsgbW91c2UgdHJhY2twYWQpLgorICogIEZpeGVzIExvZ2ljYWxNYXhpbXVtIGVycm9yIGluIFVTQiByZXBvcnQgZGVzY3JpcHRpb24sIHNlZQorICogIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc4NworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgSm9obmF0aG9uIEhhcnJpcyA8am1oYXJyaXNAZ21haWwuY29tPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RhdGljIHZvaWQgb3J0ZWtfcmVwb3J0X2ZpeHVwKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBfX3U4ICpyZGVzYywKKwkJdW5zaWduZWQgaW50IHJzaXplKQoreworCWlmIChyc2l6ZSA+PSA1NiAmJiByZGVzY1s1NF0gPT0gMHgyNSAmJiByZGVzY1s1NV0gPT0gMHgwMSkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiRml4aW5nIHVwIE9ydGVrIFdLQi0yMDAwICIKKwkJCQkicmVwb3J0IGRlc2NyaXB0b3IuXG4iKTsKKwkJcmRlc2NbNTVdID0gMHg5MjsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBvcnRla19kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09SVEVLLCBVU0JfREVWSUNFX0lEX09SVEVLX1dLQjIwMDApIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG9ydGVrX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgb3J0ZWtfZHJpdmVyID0geworCS5uYW1lID0gIm9ydGVrIiwKKwkuaWRfdGFibGUgPSBvcnRla19kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBvcnRla19yZXBvcnRfZml4dXAKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9ydGVrX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmb3J0ZWtfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9ydGVrX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJm9ydGVrX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9ydGVrX2luaXQpOworbW9kdWxlX2V4aXQob3J0ZWtfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcXVhbnRhLmMgYi9kcml2ZXJzL2hpZC9oaWQtcXVhbnRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkZDUxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1xdWFudGEuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBRdWFudGEgT3B0aWNhbCBUb3VjaCBkdWFsLXRvdWNoIHBhbmVscworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgorICoKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlF1YW50YSBkdWFsLXRvdWNoIHBhbmVsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBxdWFudGFfZGF0YSB7CisJX191MTYgeCwgeTsKKwlfX3U4IGlkOworCWJvb2wgdmFsaWQ7CQkvKiB2YWxpZCBmaW5nZXIgZGF0YSwgb3IganVzdCBwbGFjZWhvbGRlcj8gKi8KKwlib29sIGZpcnN0OwkJLyogaXMgdGhpcyB0aGUgZmlyc3QgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCisJYm9vbCBhY3Rpdml0eV9ub3c7CS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCisJYm9vbCBhY3Rpdml0eTsJCS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIHByZXZpb3VzbHk/ICovCit9OworCitzdGF0aWMgaW50IHF1YW50YV9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgeworCisJY2FzZSBISURfVVBfR0VOREVTSzoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0dEX1g6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0dEX1k6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19ZLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9VUF9ESUdJVElaRVI6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKKwkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6CisJCWNhc2UgSElEX0RHX1dJRFRIOgorCQljYXNlIEhJRF9ER19IRUlHSFQ6CisJCQlyZXR1cm4gLTE7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIDB4ZmYwMDAwMDA6CisJCS8qIGlnbm9yZSB2ZW5kb3Itc3BlY2lmaWMgZmVhdHVyZXMgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF1YW50YV9pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQorCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgZmluZ2VyIGhhcyBiZWVuIHBhcnNlZCwKKyAqIHNvIHRoYXQgaXQgY2FuIGRlY2lkZSB3aGF0IHRvIHNlbmQgdG8gdGhlIGlucHV0IGxheWVyLgorICovCitzdGF0aWMgdm9pZCBxdWFudGFfZmlsdGVyX2V2ZW50KHN0cnVjdCBxdWFudGFfZGF0YSAqdGQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCQorCXRkLT5maXJzdCA9ICF0ZC0+Zmlyc3Q7IC8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCisJaWYgKCF0ZC0+dmFsaWQpIHsKKwkJLyoKKwkJICogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiBubyBmaW5nZXIgaW4gdGhpcyBmcmFtZSBpcyB2YWxpZAorCQkgKiBhbmQgdGhlcmUgcHJldmlvdXNseSB3YXMgZmluZ2VyIGFjdGl2aXR5LCB0aGlzIGlzIGEgcmVsZWFzZQorCQkgKi8gCisJCWlmICghdGQtPmZpcnN0ICYmICF0ZC0+YWN0aXZpdHlfbm93ICYmIHRkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAwKTsKKwkJCXRkLT5hY3Rpdml0eSA9IGZhbHNlOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQsIHRkLT5pZCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIHRkLT54KTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgdGQtPnkpOworCisJaW5wdXRfbXRfc3luYyhpbnB1dCk7CisJdGQtPnZhbGlkID0gZmFsc2U7CisKKwkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIGZpcnN0IGFjdGl2ZSBmaW5nZXIgaW4gdGhpcyBmcmFtZS4uLiAqLworCWlmICghdGQtPmFjdGl2aXR5X25vdykgeworCQkvKiBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgYWN0aXZpdHksIGVtaXQgdG91Y2ggZXZlbnQgKi8KKwkJaWYgKCF0ZC0+YWN0aXZpdHkpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7CisJCQl0ZC0+YWN0aXZpdHkgPSB0cnVlOworCQl9CisJCXRkLT5hY3Rpdml0eV9ub3cgPSB0cnVlOworCQkvKiBhbmQgaW4gYW55IGNhc2UgdGhpcyBpcyBvdXIgcHJlZmVycmVkIGZpbmdlciAqLworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgdGQtPngpOworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgdGQtPnkpOworCX0KK30KKworCitzdGF0aWMgaW50IHF1YW50YV9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IHF1YW50YV9kYXRhICp0ZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKworCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCXRkLT52YWxpZCA9ICEhdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWDoKKwkJCXRkLT54ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWToKKwkJCXRkLT55ID0gdmFsdWU7CisJCQlxdWFudGFfZmlsdGVyX2V2ZW50KHRkLCBpbnB1dCk7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJdGQtPmlkID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQkJLyogdG91Y2ggZW11bGF0aW9uOiB0aGlzIGlzIHRoZSBsYXN0IGZpZWxkIGluIGEgZnJhbWUgKi8KKwkJCXRkLT5maXJzdCA9IGZhbHNlOworCQkJdGQtPmFjdGl2aXR5X25vdyA9IGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJCS8qIGF2b2lkIGludGVyZmVyZW5jZSBmcm9tIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBmYWxsYmFjayB0byB0aGUgZ2VuZXJpYyBoaWRpbnB1dCBoYW5kbGluZyAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQorCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHF1YW50YV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IHF1YW50YV9kYXRhICp0ZDsKKworCXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHF1YW50YV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgUXVhbnRhIFRvdWNoIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdGQtPnZhbGlkID0gZmFsc2U7CisJdGQtPmFjdGl2aXR5ID0gZmFsc2U7CisJdGQtPmFjdGl2aXR5X25vdyA9IGZhbHNlOworCXRkLT5maXJzdCA9IGZhbHNlOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCB0ZCk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKworCWlmIChyZXQpCisJCWtmcmVlKHRkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHF1YW50YV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBxdWFudGFfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsCisJCQlVU0JfREVWSUNFX0lEX1FVQU5UQV9PUFRJQ0FMX1RPVUNIKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsCisJCQlVU0JfREVWSUNFX0lEX1BJWEFSVF9JTUFHSU5HX0lOQ19PUFRJQ0FMX1RPVUNIX1NDUkVFTikgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgcXVhbnRhX2RldmljZXMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBxdWFudGFfZ3JhYmJlZF91c2FnZXNbXSA9IHsKKwl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKKwl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9Cit9OworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgcXVhbnRhX2RyaXZlciA9IHsKKwkubmFtZSA9ICJxdWFudGEtdG91Y2giLAorCS5pZF90YWJsZSA9IHF1YW50YV9kZXZpY2VzLAorCS5wcm9iZSA9IHF1YW50YV9wcm9iZSwKKwkucmVtb3ZlID0gcXVhbnRhX3JlbW92ZSwKKwkuaW5wdXRfbWFwcGluZyA9IHF1YW50YV9pbnB1dF9tYXBwaW5nLAorCS5pbnB1dF9tYXBwZWQgPSBxdWFudGFfaW5wdXRfbWFwcGVkLAorCS51c2FnZV90YWJsZSA9IHF1YW50YV9ncmFiYmVkX3VzYWdlcywKKwkuZXZlbnQgPSBxdWFudGFfZXZlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBxdWFudGFfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZxdWFudGFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHF1YW50YV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZxdWFudGFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocXVhbnRhX2luaXQpOworbW9kdWxlX2V4aXQocXVhbnRhX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwppbmRleCA0ZTg0NTAyLi45YmYwMGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICAqIHRvICJvcGVyYXRpb25hbCIuICBXaXRob3V0IHRoaXMsIHRoZSBwczMgY29udHJvbGxlciB3aWxsIG5vdCByZXBvcnQgYW55CiAgKiBldmVudHMuCiAgKi8KLXN0YXRpYyBpbnQgc29ueV9zZXRfb3BlcmF0aW9uYWwoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCitzdGF0aWMgaW50IHNvbnlfc2V0X29wZXJhdGlvbmFsX3VzYihzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoaGRldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CkBAIC03Myw2ICs3MywxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc29ueV9zZXRfb3BlcmF0aW9uYWxfYnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJdW5zaWduZWQgY2hhciBidWZbXSA9IHsgMHg1MywgMHhmNCwgIDB4NDIsIDB4MDMsIDB4MDAsIDB4MDAgfTsKKwlyZXR1cm4gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIEhJRF9GRUFUVVJFX1JFUE9SVCk7Cit9CisKIHN0YXRpYyBpbnQgc29ueV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQogewogCWludCByZXQ7CkBAIC04MSw3ICs4Nyw3IEBACiAKIAlzYyA9IGt6YWxsb2Moc2l6ZW9mKCpzYyksIEdGUF9LRVJORUwpOwogCWlmIChzYyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGFwcGxlIGRlc2NyaXB0b3JcbiIpOworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvYyBzb255IGRlc2NyaXB0b3JcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTEwMSw3ICsxMDcsMTcgQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQlyZXQgPSBzb255X3NldF9vcGVyYXRpb25hbChoZGV2KTsKKwlzd2l0Y2ggKGhkZXYtPmJ1cykgeworCWNhc2UgQlVTX1VTQjoKKwkJcmV0ID0gc29ueV9zZXRfb3BlcmF0aW9uYWxfdXNiKGhkZXYpOworCQlicmVhazsKKwljYXNlIEJVU19CTFVFVE9PVEg6CisJCXJldCA9IHNvbnlfc2V0X29wZXJhdGlvbmFsX2J0KGhkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAwOworCX0KKwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9zdG9wOwogCkBAIC0xMjEsNiArMTM3LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHNvbnlfZGV2aWNlc1tdID0gewogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpIH0sCisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1ZBSU9fVkdYX01PVVNFKSwKIAkJLmRyaXZlcl9kYXRhID0gVkFJT19SREVTQ19DT05TVEFOVCB9LAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYyBiL2RyaXZlcnMvaGlkL2hpZC1zdGFudHVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1OTJhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zdGFudHVtLmMKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3IgU3RhbnR1bSBtdWx0aXRvdWNoIHBhbmVscworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4KKyAqCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCitNT0RVTEVfQVVUSE9SKCJTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdGFudHVtIEhJRCBtdWx0aXRvdWNoIHBhbmVscyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCitzdHJ1Y3Qgc3RhbnR1bV9kYXRhIHsKKwlfX3MzMiB4LCB5LCB6LCB3LCBoOwkvKiB4LCB5LCBwcmVzc3VyZSwgd2lkdGgsIGhlaWdodCAqLworCV9fdTE2IGlkOwkJLyogdG91Y2ggaWQgKi8KKwlib29sIHZhbGlkOwkJLyogdmFsaWQgZmluZ2VyIGRhdGEsIG9yIGp1c3QgcGxhY2Vob2xkZXI/ICovCisJYm9vbCBmaXJzdDsJCS8qIGZpcnN0IGZpbmdlciBpbiB0aGUgSElEIHBhY2tldD8gKi8KKwlib29sIGFjdGl2aXR5OwkJLyogYXQgbGVhc3Qgb25lIGFjdGl2ZSBmaW5nZXIgc28gZmFyPyAqLworfTsKKworc3RhdGljIGludCBzdGFudHVtX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CisKKwljYXNlIEhJRF9VUF9HRU5ERVNLOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfR0RfWDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1gsCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfR0RfWToKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1ksCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKKwkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJCXJldHVybiAtMTsKKworCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBISURfREdfV0lEVEg6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RPVUNIX01BSk9SKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19IRUlHSFQ6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RPVUNIX01JTk9SKTsKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX01UX09SSUVOVEFUSU9OLAorCQkJCQkxLCAxLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUpOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7CisJCQlyZXR1cm4gMTsKKworCQl9CisJCXJldHVybiAwOworCisJY2FzZSAweGZmMDAwMDAwOgorCQkvKiBubyBpbnB1dC1vcmllbnRlZCBtZWFuaW5nICovCisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGFudHVtX2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCisJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB3aG9sZSBmaW5nZXIgaGFzIGJlZW4gcGFyc2VkLAorICogc28gdGhhdCBpdCBjYW4gZGVjaWRlIHdoYXQgdG8gc2VuZCB0byB0aGUgaW5wdXQgbGF5ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHN0YW50dW1fZmlsdGVyX2V2ZW50KHN0cnVjdCBzdGFudHVtX2RhdGEgKnNkLAorCQkJCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlib29sIHdpZGU7CisKKwlpZiAoIXNkLT52YWxpZCkgeworCQkvKgorCQkgKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIHRoZSBmaXJzdCBmaW5nZXIgaXMgbm90IHZhbGlkIGFuZAorCQkgKiB0aGVyZSBwcmV2aW91c2x5IHdhcyBmaW5nZXIgYWN0aXZpdHksIHRoaXMgaXMgYSByZWxlYXNlCisJCSAqLworCQlpZiAoc2QtPmZpcnN0ICYmIHNkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAwKTsKKwkJCXNkLT5hY3Rpdml0eSA9IGZhbHNlOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQsIHNkLT5pZCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIHNkLT54KTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgc2QtPnkpOworCisJd2lkZSA9IChzZC0+dyA+IHNkLT5oKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfT1JJRU5UQVRJT04sIHdpZGUpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UT1VDSF9NQUpPUiwgd2lkZSA/IHNkLT53IDogc2QtPmgpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UT1VDSF9NSU5PUiwgd2lkZSA/IHNkLT5oIDogc2QtPncpOworCisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BSRVNTVVJFLCBzZC0+eik7CisKKwlpbnB1dF9tdF9zeW5jKGlucHV0KTsKKwlzZC0+dmFsaWQgPSBmYWxzZTsKKworCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCWlmIChzZC0+Zmlyc3QpIHsKKwkJaWYgKCFzZC0+YWN0aXZpdHkpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7CisJCQlzZC0+YWN0aXZpdHkgPSB0cnVlOworCQl9CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBzZC0+eCk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBzZC0+eSk7CisJfQorCXNkLT5maXJzdCA9IGZhbHNlOworfQorCisKK3N0YXRpYyBpbnQgc3RhbnR1bV9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IHN0YW50dW1fZGF0YSAqc2QgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgeworCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQkvKiB0aGlzIGlzIHRoZSBsYXN0IGZpZWxkIGluIGEgZmluZ2VyICovCisJCQlzdGFudHVtX2ZpbHRlcl9ldmVudChzZCwgaW5wdXQpOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX1dJRFRIOgorCQkJc2QtPncgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19IRUlHSFQ6CisJCQlzZC0+aCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1g6CisJCQlzZC0+eCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1k6CisJCQlzZC0+eSA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgorCQkJc2QtPnogPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQlzZC0+aWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQkJc2QtPnZhbGlkID0gISF2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIDB4ZmYwMDAwMDI6CisJCQkvKiB0aGlzIGNvbWVzIG9ubHkgYmVmb3JlIHRoZSBmaXJzdCBmaW5nZXIgKi8KKwkJCXNkLT5maXJzdCA9IHRydWU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogaWdub3JlIHRoZSBvdGhlcnMgKi8KKwkJCXJldHVybiAxOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzdGFudHVtX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzdGFudHVtX2RhdGEgKnNkOworCisJc2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RhbnR1bV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgU3RhbnR1bSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNkLT52YWxpZCA9IGZhbHNlOworCXNkLT5maXJzdCA9IGZhbHNlOworCXNkLT5hY3Rpdml0eSA9IGZhbHNlOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBzZCk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKworCWlmIChyZXQpCisJCWtmcmVlKHNkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0YW50dW1fcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgc3RhbnR1bV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU0sIFVTQl9ERVZJQ0VfSURfTVRQKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBzdGFudHVtX2RldmljZXMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBzdGFudHVtX2dyYWJiZWRfdXNhZ2VzW10gPSB7CisJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCisJeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHN0YW50dW1fZHJpdmVyID0geworCS5uYW1lID0gInN0YW50dW0iLAorCS5pZF90YWJsZSA9IHN0YW50dW1fZGV2aWNlcywKKwkucHJvYmUgPSBzdGFudHVtX3Byb2JlLAorCS5yZW1vdmUgPSBzdGFudHVtX3JlbW92ZSwKKwkuaW5wdXRfbWFwcGluZyA9IHN0YW50dW1faW5wdXRfbWFwcGluZywKKwkuaW5wdXRfbWFwcGVkID0gc3RhbnR1bV9pbnB1dF9tYXBwZWQsCisJLnVzYWdlX3RhYmxlID0gc3RhbnR1bV9ncmFiYmVkX3VzYWdlcywKKwkuZXZlbnQgPSBzdGFudHVtX2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3RhbnR1bV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnN0YW50dW1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHN0YW50dW1fZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmc3RhbnR1bV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzdGFudHVtX2luaXQpOworbW9kdWxlX2V4aXQoc3RhbnR1bV9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXdhY29tLmMgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwppbmRleCAxMmRjZGE1Li44ZDNiNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwpAQCAtMTU2LDcgKzE1Niw5IEBACiAJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJc3RydWN0IHdhY29tX2RhdGEgKndkYXRhOworCWNoYXIgcmVwX2RhdGFbMl07CiAJaW50IHJldDsKKwlpbnQgbGltaXQ7CiAKIAl3ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCp3ZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICh3ZGF0YSA9PSBOVUxMKSB7CkBAIC0xNjYsNiArMTY4LDcgQEAKIAogCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCB3ZGF0YSk7CiAKKwkvKiBQYXJzZSB0aGUgSElEIHJlcG9ydCBub3cgKi8KIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOwpAQCAtMTc4LDYgKzE4MSwzMSBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAorCS8qCisJICogTm90ZSB0aGF0IGlmIHRoZSByYXcgcXVlcmllcyBmYWlsLCBpdCdzIG5vdCBhIGhhcmQgZmFpbHVyZSBhbmQgaXQKKwkgKiBpcyBzYWZlIHRvIGNvbnRpbnVlCisJICovCisKKwkvKiBTZXQgV2Fjb20gbW9kZTIgKi8KKwlyZXBfZGF0YVswXSA9IDB4MDM7IHJlcF9kYXRhWzFdID0gMHgwMDsKKwlsaW1pdCA9IDM7CisJZG8geworCQlyZXQgPSBoZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoaGRldiwgcmVwX2RhdGEsIDIsCisJCQkJSElEX0ZFQVRVUkVfUkVQT1JUKTsKKwl9IHdoaWxlIChyZXQgPCAwICYmIGxpbWl0LS0gPiAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X3dhcm4oJmhkZXYtPmRldiwgImZhaWxlZCB0byBwb2tlIGRldmljZSAjMSwgJWRcbiIsIHJldCk7CisKKwkvKiAweDA2IC0gaGlnaCByZXBvcnRpbmcgc3BlZWQsIDB4MDUgLSBsb3cgc3BlZWQgKi8KKwlyZXBfZGF0YVswXSA9IDB4MDY7IHJlcF9kYXRhWzFdID0gMHgwMDsKKwlsaW1pdCA9IDM7CisJZG8geworCQlyZXQgPSBoZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoaGRldiwgcmVwX2RhdGEsIDIsCisJCQkJSElEX0ZFQVRVUkVfUkVQT1JUKTsKKwl9IHdoaWxlIChyZXQgPCAwICYmIGxpbWl0LS0gPiAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X3dhcm4oJmhkZXYtPmRldiwgImZhaWxlZCB0byBwb2tlIGRldmljZSAjMiwgJWRcbiIsIHJldCk7CisKIAloaWRpbnB1dCA9IGxpc3RfZW50cnkoaGRldi0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOwogCWlucHV0ID0gaGlkaW5wdXQtPmlucHV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IGNkZDEzNjkuLmQwNDQ3NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoZGV2LCBidWYsIGNvdW50KTsKKwlyZXQgPSBkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChkZXYsIGJ1ZiwgY291bnQsIEhJRF9PVVRQVVRfUkVQT1JUKTsKIG91dDoKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCmluZGV4IGUyOTk3YTguLjU2ZDA2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCkBAIC01LDcgKzUsNyBAQAogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggT2xpdmVyIE5ldWt1bQotICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgSmlyaSBLb3NpbmEKICAqLwogCiAvKgpAQCAtMzE2LDYgKzMxNiw3IEBACiAJCQllcnJfaGlkKCJ1c2Jfc3VibWl0X3VyYihvdXQpIGZhaWxlZCIpOwogCQkJcmV0dXJuIC0xOwogCQl9CisJCXVzYmhpZC0+bGFzdF9vdXQgPSBqaWZmaWVzOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIHF1ZXVlIHdvcmsgdG8gd2FrZSB1cCB0aGUgZGV2aWNlLgpAQCAtMzc3LDYgKzM3OCw3IEBACiAJCQllcnJfaGlkKCJ1c2Jfc3VibWl0X3VyYihjdHJsKSBmYWlsZWQiKTsKIAkJCXJldHVybiAtMTsKIAkJfQorCQl1c2JoaWQtPmxhc3RfY3RybCA9IGppZmZpZXM7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogcXVldWUgd29yayB0byB3YWtlIHVwIHRoZSBkZXZpY2UuCkBAIC01MTIsOSArNTE0LDIwIEBACiAJCXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmVwb3J0ID0gcmVwb3J0OwogCQl1c2JoaWQtPm91dGhlYWQgPSBoZWFkOwogCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKQorCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkgewogCQkJaWYgKGhpZF9zdWJtaXRfb3V0KGhpZCkpCiAJCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogdGhlIHF1ZXVlIGlzIGtub3duIHRvIHJ1bgorCQkJICogYnV0IGFuIGVhcmxpZXIgcmVxdWVzdCBtYXkgYmUgc3R1Y2sKKwkJCSAqIHdlIG1heSBuZWVkIHRvIHRpbWUgb3V0CisJCQkgKiBubyByYWNlIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgdW5kZXIKKwkJCSAqIHNwaW5sb2NrCisJCQkgKi8KKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHVzYmhpZC0+bGFzdF9vdXQgKyBIWiAqIDUpKQorCQkJCXVzYl91bmxpbmtfdXJiKHVzYmhpZC0+dXJib3V0KTsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC01MzUsOSArNTQ4LDIwIEBACiAJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLmRpciA9IGRpcjsKIAl1c2JoaWQtPmN0cmxoZWFkID0gaGVhZDsKIAotCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX0NUUkxfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpIHsKIAkJaWYgKGhpZF9zdWJtaXRfY3RybChoaWQpKQogCQkJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIHRoZSBxdWV1ZSBpcyBrbm93biB0byBydW4KKwkJICogYnV0IGFuIGVhcmxpZXIgcmVxdWVzdCBtYXkgYmUgc3R1Y2sKKwkJICogd2UgbWF5IG5lZWQgdG8gdGltZSBvdXQKKwkJICogbm8gcmFjZSBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHVuZGVyCisJCSAqIHNwaW5sb2NrCisJCSAqLworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB1c2JoaWQtPmxhc3RfY3RybCArIEhaICogNSkpCisJCQl1c2JfdW5saW5rX3VyYih1c2JoaWQtPnVyYmN0cmwpOworCX0KIH0KIAogdm9pZCB1c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcikKQEAgLTc3NCw3ICs3OTgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmhpZF9vdXRwdXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3U4ICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgdXNiaGlkX291dHB1dF9yYXdfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTggKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQl1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlKQogewogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBoaWRfdG9fdXNiX2RldihoaWQpOwpAQCAtNzg1LDcgKzgxMCw3IEBACiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCiAJCUhJRF9SRVFfU0VUX1JFUE9SVCwKIAkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCSgoSElEX09VVFBVVF9SRVBPUlQgKyAxKSA8PCA4KSB8ICpidWYsCisJCSgocmVwb3J0X3R5cGUgKyAxKSA8PCA4KSB8ICpidWYsCiAJCWludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBidWYgKyAxLCBjb3VudCAtIDEsCiAJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKIApAQCAtOTgxLDkgKzEwMDYsNiBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+bG9jayk7CiAKLQl1c2JoaWQtPmludGYgPSBpbnRmOwotCXVzYmhpZC0+aWZudW0gPSBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQogCXVzYmhpZC0+dXJiY3RybCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1c2JoaWQtPnVyYmN0cmwpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTExNTQsNiArMTE3Niw4IEBACiAKIAloaWQtPmRyaXZlcl9kYXRhID0gdXNiaGlkOwogCXVzYmhpZC0+aGlkID0gaGlkOworCXVzYmhpZC0+aW50ZiA9IGludGY7CisJdXNiaGlkLT5pZm51bSA9IGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCiAJcmV0ID0gaGlkX2FkZF9kZXZpY2UoaGlkKTsKIAlpZiAocmV0KSB7CkBAIC0xMzQyLDcgKzEzNjYsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoaWRfdXNiX2lkcyBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoaWRfdXNiX2lkc1tdID0gewogCXsgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MsCiAJCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfSU5URVJGQUNFX0NMQVNTX0hJRCB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwppbmRleCAzODc3M2RjLi43ODQ0MjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKQEAgLTQzLDggKzQzLDEwIEBACiAKIAl7IFVTQl9WRU5ET1JfSURfQUZBVEVDSCwgVVNCX0RFVklDRV9JRF9BRkFURUNIX0FGOTAxNiwgSElEX1FVSVJLX0ZVTExTUEVFRF9JTlRFUlZBTCB9LAogCisJeyBVU0JfVkVORE9SX0lEX0VUVVJCT1RPVUNILCBVU0JfREVWSUNFX0lEX0VUVVJCT1RPVUNILCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfUEFOVEhFUkxPUkQsIFVTQl9ERVZJQ0VfSURfUEFOVEhFUkxPUkRfVFdJTl9VU0JfSk9ZU1RJQ0ssIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB8IEhJRF9RVUlSS19TS0lQX09VVFBVVF9SRVBPUlRTIH0sCiAJeyBVU0JfVkVORE9SX0lEX1BMQVlET1RDT00sIFVTQl9ERVZJQ0VfSURfUExBWURPVENPTV9FTVNfVVNCSUksIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9UT1VDSFBBQ0ssIFVTQl9ERVZJQ0VfSURfVE9VQ0hQQUNLX1JUUywgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAKIAl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOX1VDMTAwS00sIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fQ1MxMjRVLCBISURfUVVJUktfTk9HRVQgfSwKQEAgLTU3LDYgKzU5LDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfM0FYSVNfNUJVVFRPTl9TVElDSywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0RNSSwgVVNCX0RFVklDRV9JRF9ETUlfRU5DLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfRUxPLCBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAsIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9QUk9ESUdFLCBVU0JfREVWSUNFX0lEX1BST0RJR0VfQ09SRExFU1MsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9TVU4sIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfVFVSQk9YLCBVU0JfREVWSUNFX0lEX1RVUkJPWF9LRVlCT0FSRCwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1VDTE9HSUMsIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfUEYxMjA5LCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaCBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaAppbmRleCAwOGY1MDVjLi5lYzIwNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCkBAIC04MCwxMiArODAsMTQgQEAKIAl1bnNpZ25lZCBjaGFyIGN0cmxoZWFkLCBjdHJsdGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBmaWZvIGhlYWQgJiB0YWlsICovCiAJY2hhciAqY3RybGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgYnVmZmVyICovCiAJZG1hX2FkZHJfdCBjdHJsYnVmX2RtYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgYnVmZmVyIGRtYSAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9jdHJsOwkJCQkJCS8qIHJlY29yZCBvZiBsYXN0IG91dHB1dCBmb3IgdGltZW91dHMgKi8KIAogCXN0cnVjdCB1cmIgKnVyYm91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgVVJCICovCiAJc3RydWN0IGhpZF9vdXRwdXRfZmlmbyBvdXRbSElEX0NPTlRST0xfRklGT19TSVpFXTsgICAgICAgICAgICAgIC8qIE91dHB1dCBwaXBlIGZpZm8gKi8KIAl1bnNpZ25lZCBjaGFyIG91dGhlYWQsIG91dHRhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IHBpcGUgZmlmbyBoZWFkICYgdGFpbCAqLwogCWNoYXIgKm91dGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgYnVmZmVyICovCiAJZG1hX2FkZHJfdCBvdXRidWZfZG1hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgZG1hICovCisJdW5zaWduZWQgbG9uZyBsYXN0X291dDsJCQkJCQkJLyogcmVjb3JkIG9mIGxhc3Qgb3V0cHV0IGZvciB0aW1lb3V0cyAqLwogCiAJc3BpbmxvY2tfdCBsb2NrOwkJCQkJCS8qIGZpZm8gc3BpbmxvY2sgKi8KIAl1bnNpZ25lZCBsb25nIGlvZmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSS9PIGZsYWdzIChDVFJMX1JVTk5JTkcsIE9VVF9SVU5OSU5HKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKaW5kZXggNmM5YWNlMS4uMmFkNjJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYworKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotdm9pZCBhbXNfZXhpdCh2b2lkKQordm9pZCBhbXNfc2Vuc29yX2RldGFjaCh2b2lkKQogewogCS8qIFJlbW92ZSBpbnB1dCBkZXZpY2UgKi8KIAlhbXNfaW5wdXRfZXhpdCgpOwpAQCAtMjIxLDkgKzIyMSw2IEBACiAJLyogUmVtb3ZlIGF0dHJpYnV0ZXMgKi8KIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3VycmVudCk7CiAKLQkvKiBTaHV0IGRvd24gaW1wbGVtZW50YXRpb24gKi8KLQlhbXNfaW5mby5leGl0KCk7Ci0KIAkvKiBGbHVzaCBpbnRlcnJ1cHQgd29ya2VyCiAJICoKIAkgKiBXZSBkbyB0aGlzIGFmdGVyIGFtc19pbmZvLmV4aXQoKSwgYmVjYXVzZSBhbiBpbnRlcnJ1cHQgbWlnaHQKQEAgLTIzOSw2ICsyMzYsMTIgQEAKIAlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfZnJlZWZhbGxfY2xpZW50KTsKIH0KIAorc3RhdGljIHZvaWQgX19leGl0IGFtc19leGl0KHZvaWQpCit7CisJLyogU2h1dCBkb3duIGltcGxlbWVudGF0aW9uICovCisJYW1zX2luZm8uZXhpdCgpOworfQorCiBNT0RVTEVfQVVUSE9SKCJTdGVsaWFuIFBvcCwgTWljaGFlbCBIYW5zZWxtYW5uIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFwcGxlIE1vdGlvbiBTZW5zb3IgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKaW5kZXggMmNiZjhhNjUuLmFiZWVjZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pMmMuYworKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKQEAgLTIzOCw2ICsyMzgsOCBAQAogc3RhdGljIGludCBhbXNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCWlmIChhbXNfaW5mby5oYXNfZGV2aWNlKSB7CisJCWFtc19zZW5zb3JfZGV0YWNoKCk7CisKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJCWFtc19pMmNfc2V0X2lycShBTVNfSVJRX0FMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwppbmRleCBmYjE4YjNkLi40ZjYxYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCkBAIC0xMzMsNiArMTMzLDggQEAKIAogc3RhdGljIHZvaWQgYW1zX3BtdV9leGl0KHZvaWQpCiB7CisJYW1zX3NlbnNvcl9kZXRhY2goKTsKKwogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCWFtc19wbXVfc2V0X2lycShBTVNfSVJRX0FMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLmgKaW5kZXggNWVkMzg3Yi4uYjI4ZDdlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLmgKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLmgKQEAgLTYxLDYgKzYxLDcgQEAKIAogZXh0ZXJuIHZvaWQgYW1zX3NlbnNvcnMoczggKngsIHM4ICp5LCBzOCAqeik7CiBleHRlcm4gaW50IGFtc19zZW5zb3JfYXR0YWNoKHZvaWQpOworZXh0ZXJuIHZvaWQgYW1zX3NlbnNvcl9kZXRhY2godm9pZCk7CiAKIGV4dGVybiBpbnQgYW1zX3BtdV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwogZXh0ZXJuIGludCBhbXNfaTJjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDVmMzE4Y2UuLjczN2YwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC01NjQsNiArNTY0LDE2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtdmVyc2F0aWxlLgogCitjb25maWcgSTJDX09DVEVPTgorCXRyaXN0YXRlICJDYXZpdW0gT0NURU9OIEkyQyBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIENQVV9DQVZJVU1fT0NURU9OCisJaGVscAorCSAgU2F5IHllcyBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBJMkMgc2VyaWFsIGJ1cyBvbiBDYXZpdW0KKwkgIE9DVEVPTiBTT0MuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy1vY3Rlb24uCisKIGNvbW1lbnQgIkV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMiCiAKIGNvbmZpZyBJMkNfUEFSUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDMwMmM1NTEuLmMyYzRlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTU0LDYgKzU0LDcgQEAKIG9iai0kKENPTkZJR19JMkNfU0lNVEVDKQkrPSBpMmMtc2ltdGVjLm8KIG9iai0kKENPTkZJR19JMkNfU1RVMzAwKQkrPSBpMmMtc3R1MzAwLm8KIG9iai0kKENPTkZJR19JMkNfVkVSU0FUSUxFKQkrPSBpMmMtdmVyc2F0aWxlLm8KK29iai0kKENPTkZJR19JMkNfT0NURU9OKQkrPSBpMmMtb2N0ZW9uLm8KIAogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiBvYmotJChDT05GSUdfSTJDX1BBUlBPUlQpCSs9IGkyYy1wYXJwb3J0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb2N0ZW9uLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzc1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5LTIwMTAKKyAqIE5va2lhIFNpZW1lbnMgTmV0d29ya3MsIG1pY2hhZWwubGF3bmljay5leHRAbnNuLmNvbQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAxMCBDYXZpdW0gTmV0d29ya3MsIEluYy4KKyAqCisgKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgaTJjIGFkYXB0ZXIgaW4gQ2F2aXVtIE5ldHdvcmtzJyBPQ1RFT04gcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgImkyYy1vY3Rlb24iCisKKy8qIFRoZSBwcmV2aW91cyBvdXQtb2YtdHJlZSB2ZXJzaW9uIHdhcyBpbXBsaWNpdGx5IHZlcnNpb24gMS4wLiAqLworI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wIgorCisvKiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIFNXX1RXU0kJIDB4MDAKKyNkZWZpbmUgVFdTSV9JTlQgMHgxMAorCisvKiBDb250cm9sbGVyIGNvbW1hbmQgcGF0dGVybnMgKi8KKyNkZWZpbmUgU1dfVFdTSV9WICAgICAgICAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfRU9QX1RXU0lfREFUQSAgIDB4MEMwMDAwMDEwMDAwMDAwMHVsbAorI2RlZmluZSBTV19UV1NJX0VPUF9UV1NJX0NUTCAgICAweDBDMDAwMDAyMDAwMDAwMDB1bGwKKyNkZWZpbmUgU1dfVFdTSV9FT1BfVFdTSV9DTEtDVEwgMHgwQzAwMDAwMzAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCAgIDB4MEMwMDAwMDMwMDAwMDAwMHVsbAorI2RlZmluZSBTV19UV1NJX0VPUF9UV1NJX1JTVCAgICAweDBDMDAwMDA3MDAwMDAwMDB1bGwKKyNkZWZpbmUgU1dfVFdTSV9PUF9UV1NJX0NMSyAgICAgMHgwODAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfUiAgICAgICAgICAgICAgIDB4MDEwMDAwMDAwMDAwMDAwMHVsbAorCisvKiBDb250cm9sbGVyIGNvbW1hbmQgYW5kIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIFRXU0lfQ1RMX0NFICAgMHg4MAorI2RlZmluZSBUV1NJX0NUTF9FTkFCIDB4NDAKKyNkZWZpbmUgVFdTSV9DVExfU1RBICAweDIwCisjZGVmaW5lIFRXU0lfQ1RMX1NUUCAgMHgxMAorI2RlZmluZSBUV1NJX0NUTF9JRkxHIDB4MDgKKyNkZWZpbmUgVFdTSV9DVExfQUFLICAweDA0CisKKy8qIFNvbWUgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBTVEFUX1NUQVJUICAgICAgMHgwOAorI2RlZmluZSBTVEFUX1JTVEFSVCAgICAgMHgxMAorI2RlZmluZSBTVEFUX1RYQUREUl9BQ0sgMHgxOAorI2RlZmluZSBTVEFUX1RYREFUQV9BQ0sgMHgyOAorI2RlZmluZSBTVEFUX1JYQUREUl9BQ0sgMHg0MAorI2RlZmluZSBTVEFUX1JYREFUQV9BQ0sgMHg1MAorI2RlZmluZSBTVEFUX0lETEUgICAgICAgMHhGOAorCitzdHJ1Y3Qgb2N0ZW9uX2kyYyB7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7CisJaW50IGlycTsKKwlpbnQgdHdzaV9mcmVxOworCWludCBzeXNfZnJlcTsKKwlyZXNvdXJjZV9zaXplX3QgdHdzaV9waHlzOworCXZvaWQgX19pb21lbSAqdHdzaV9iYXNlOworCXJlc291cmNlX3NpemVfdCByZWdzaXplOworCXN0cnVjdCBkZXZpY2UgKmRldjsKK307CisKKy8qKgorICogb2N0ZW9uX2kyY193cml0ZV9zdyAtIHdyaXRlIGFuIEkyQyBjb3JlIHJlZ2lzdGVyLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICogQGVvcF9yZWc6IFJlZ2lzdGVyIHNlbGVjdG9yLgorICogQGRhdGE6IFZhbHVlIHRvIGJlIHdyaXR0ZW4uCisgKgorICogVGhlIEkyQyBjb3JlIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgaW5kaXJlY3RseSB2aWEgdGhlIFNXX1RXU0kgQ1NSLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faTJjX3dyaXRlX3N3KHN0cnVjdCBvY3Rlb25faTJjICppMmMsCisJCQkJdTY0IGVvcF9yZWcsCisJCQkJdTggZGF0YSkKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKFNXX1RXU0lfViB8IGVvcF9yZWcgfCBkYXRhLCBpMmMtPnR3c2lfYmFzZSArIFNXX1RXU0kpOworCWRvIHsKKwkJdG1wID0gX19yYXdfcmVhZHEoaTJjLT50d3NpX2Jhc2UgKyBTV19UV1NJKTsKKwl9IHdoaWxlICgodG1wICYgU1dfVFdTSV9WKSAhPSAwKTsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3JlYWRfc3cgLSB3cml0ZSBhbiBJMkMgY29yZSByZWdpc3Rlci4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEBlb3BfcmVnOiBSZWdpc3RlciBzZWxlY3Rvci4KKyAqCisgKiBSZXR1cm5zIHRoZSBkYXRhLgorICoKKyAqIFRoZSBJMkMgY29yZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIGluZGlyZWN0bHkgdmlhIHRoZSBTV19UV1NJIENTUi4KKyAqLworc3RhdGljIHU4IG9jdGVvbl9pMmNfcmVhZF9zdyhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjLCB1NjQgZW9wX3JlZykKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKFNXX1RXU0lfViB8IGVvcF9yZWcgfCBTV19UV1NJX1IsIGkyYy0+dHdzaV9iYXNlICsgU1dfVFdTSSk7CisJZG8geworCQl0bXAgPSBfX3Jhd19yZWFkcShpMmMtPnR3c2lfYmFzZSArIFNXX1RXU0kpOworCX0gd2hpbGUgKCh0bXAgJiBTV19UV1NJX1YpICE9IDApOworCisJcmV0dXJuIHRtcCAmIDB4RkY7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY193cml0ZV9pbnQgLSB3cml0ZSB0aGUgVFdTSV9JTlQgcmVnaXN0ZXIKKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEBkYXRhOiBWYWx1ZSB0byBiZSB3cml0dGVuLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faTJjX3dyaXRlX2ludChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjLCB1NjQgZGF0YSkKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKGRhdGEsIGkyYy0+dHdzaV9iYXNlICsgVFdTSV9JTlQpOworCXRtcCA9IF9fcmF3X3JlYWRxKGkyYy0+dHdzaV9iYXNlICsgVFdTSV9JTlQpOworfQorCisvKioKKyAqIG9jdGVvbl9pMmNfaW50X2VuYWJsZSAtIGVuYWJsZSB0aGUgVFMgaW50ZXJydXB0LgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIFRoZSBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCB3aGVuIHRoZXJlIGlzIG5vbi1TVEFUX0lETEUgc3RhdGUgaW4KKyAqIHRoZSBTV19UV1NJX0VPUF9UV1NJX1NUQVQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pMmNfaW50X2VuYWJsZShzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMHg0MCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19pbnRfZGlzYWJsZSAtIGRpc2FibGUgdGhlIFRTIGludGVycnVwdC4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2kyY19pbnRfZGlzYWJsZShzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY191bmJsb2NrIC0gdW5ibG9jayB0aGUgYnVzLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIElmIHRoZXJlIHdhcyBhIHJlc2V0IHdoaWxlIGEgZGV2aWNlIHdhcyBkcml2aW5nIDAgdG8gYnVzLAorICogYnVzIGlzIGJsb2NrZWQuIFdlIHRvZ2dsZSBpdCBmcmVlIG1hbnVhbGx5IGJ5IHNvbWUgY2xvY2sKKyAqIGN5Y2xlcyBhbmQgc2VuZCBhIHN0b3AuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pMmNfdW5ibG9jayhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCBpOworCisJZGV2X2RiZyhpMmMtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlvY3Rlb25faTJjX3dyaXRlX2ludChpMmMsIDB4MCk7CisJCXVkZWxheSg1KTsKKwkJb2N0ZW9uX2kyY193cml0ZV9pbnQoaTJjLCAweDIwMCk7CisJCXVkZWxheSg1KTsKKwl9CisJb2N0ZW9uX2kyY193cml0ZV9pbnQoaTJjLCAweDMwMCk7CisJdWRlbGF5KDUpOworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMHgxMDApOworCXVkZWxheSg1KTsKKwlvY3Rlb25faTJjX3dyaXRlX2ludChpMmMsIDB4MCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19pc3IgLSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKyAqIEBpbnQ6IFRoZSBpcnEsIHVudXNlZC4KKyAqIEBkZXZfaWQ6IE91ciBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqLworc3RhdGljIGlycXJldHVybl90IG9jdGVvbl9pMmNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjID0gZGV2X2lkOworCisJb2N0ZW9uX2kyY19pbnRfZGlzYWJsZShpMmMpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaTJjLT5xdWV1ZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIGludCBvY3Rlb25faTJjX3Rlc3RfaWZsZyhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCXJldHVybiAob2N0ZW9uX2kyY19yZWFkX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwpICYgVFdTSV9DVExfSUZMRykgIT0gMDsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3dhaXQgLSB3YWl0IGZvciB0aGUgSUZMRyB0byBiZSBzZXQuCisgKiBAaTJjOiBUaGUgc3RydWN0IG9jdGVvbl9pMmMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pMmNfd2FpdChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCByZXN1bHQ7CisKKwlvY3Rlb25faTJjX2ludF9lbmFibGUoaTJjKTsKKworCXJlc3VsdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyYy0+cXVldWUsCisJCQkJCQkgIG9jdGVvbl9pMmNfdGVzdF9pZmxnKGkyYyksCisJCQkJCQkgIGkyYy0+YWRhcC50aW1lb3V0KTsKKworCW9jdGVvbl9pMmNfaW50X2Rpc2FibGUoaTJjKTsKKworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9kYmcoaTJjLT5kZXYsICIlczogd2FpdCBpbnRlcnJ1cHRlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmVzdWx0OworCX0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKwkJZGV2X2RiZyhpMmMtPmRldiwgIiVzOiB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19zdGFydCAtIHNlbmQgU1RBUlQgdG8gdGhlIGJ1cy4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2kyY19zdGFydChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCXU4IGRhdGE7CisJaW50IHJlc3VsdDsKKworCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwKKwkJCQlUV1NJX0NUTF9FTkFCIHwgVFdTSV9DVExfU1RBKTsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfd2FpdChpMmMpOworCWlmIChyZXN1bHQpIHsKKwkJaWYgKG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCkgPT0gU1RBVF9JRExFKSB7CisJCQkvKgorCQkJICogQ29udHJvbGxlciByZWZ1c2VkIHRvIHNlbmQgc3RhcnQgZmxhZyBNYXkKKwkJCSAqIGJlIGEgY2xpZW50IGlzIGhvbGRpbmcgU0RBIGxvdyAtIGxldCdzIHRyeQorCQkJICogdG8gZnJlZSBpdC4KKwkJCSAqLworCQkJb2N0ZW9uX2kyY191bmJsb2NrKGkyYyk7CisJCQlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwsCisJCQkJCSAgICBUV1NJX0NUTF9FTkFCIHwgVFdTSV9DVExfU1RBKTsKKworCQkJcmVzdWx0ID0gb2N0ZW9uX2kyY193YWl0KGkyYyk7CisJCX0KKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCisJZGF0YSA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJaWYgKChkYXRhICE9IFNUQVRfU1RBUlQpICYmIChkYXRhICE9IFNUQVRfUlNUQVJUKSkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiJXM6IGJhZCBzdGF0dXMgKDB4JXgpXG4iLCBfX2Z1bmNfXywgZGF0YSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9jdGVvbl9pMmNfc3RvcCAtIHNlbmQgU1RPUCB0byB0aGUgYnVzLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGludCBvY3Rlb25faTJjX3N0b3Aoc3RydWN0IG9jdGVvbl9pMmMgKmkyYykKK3sKKwl1OCBkYXRhOworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLAorCQkJICAgIFRXU0lfQ1RMX0VOQUIgfCBUV1NJX0NUTF9TVFApOworCisJZGF0YSA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisKKwlpZiAoZGF0YSAhPSBTVEFUX0lETEUpIHsKKwkJZGV2X2VycihpMmMtPmRldiwgIiVzOiBiYWQgc3RhdHVzKDB4JXgpXG4iLCBfX2Z1bmNfXywgZGF0YSk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3dyaXRlIC0gc2VuZCBkYXRhIHRvIHRoZSBidXMuCisgKiBAaTJjOiBUaGUgc3RydWN0IG9jdGVvbl9pMmMuCisgKiBAdGFyZ2V0OiBUYXJnZXQgYWRkcmVzcy4KKyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHNlbnQuCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGRhdGEuCisgKgorICogVGhlIGFkZHJlc3MgaXMgc2VudCBvdmVyIHRoZSBidXMsIHRoZW4gdGhlIGRhdGEuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pMmNfd3JpdGUoc3RydWN0IG9jdGVvbl9pMmMgKmkyYywgaW50IHRhcmdldCwKKwkJCSAgICBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgcmVzdWx0OworCXU4IHRtcDsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfc3RhcnQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfREFUQSwgdGFyZ2V0IDw8IDEpOworCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwgVFdTSV9DVExfRU5BQik7CisKKwlyZXN1bHQgPSBvY3Rlb25faTJjX3dhaXQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXRtcCA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJCWlmICgodG1wICE9IFNUQVRfVFhBRERSX0FDSykgJiYgKHRtcCAhPSBTVEFUX1RYREFUQV9BQ0spKSB7CisJCQlkZXZfZXJyKGkyYy0+ZGV2LAorCQkJCSIlczogYmFkIHN0YXR1cyBiZWZvcmUgd3JpdGUgKDB4JXgpXG4iLAorCQkJCV9fZnVuY19fLCB0bXApOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9EQVRBLCBkYXRhW2ldKTsKKwkJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLCBUV1NJX0NUTF9FTkFCKTsKKworCQlyZXN1bHQgPSBvY3Rlb25faTJjX3dhaXQoaTJjKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19yZWFkIC0gcmVjZWl2ZSBkYXRhIGZyb20gdGhlIGJ1cy4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEB0YXJnZXQ6IFRhcmdldCBhZGRyZXNzLgorICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhZSAuCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGRhdGEuCisgKgorICogVGhlIGFkZHJlc3MgaXMgc2VudCBvdmVyIHRoZSBidXMsIHRoZW4gdGhlIGRhdGEgaXMgcmVhZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2kyY19yZWFkKHN0cnVjdCBvY3Rlb25faTJjICppMmMsIGludCB0YXJnZXQsCisJCQkgICB1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgcmVzdWx0OworCXU4IHRtcDsKKworCWlmIChsZW5ndGggPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfc3RhcnQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfREFUQSwgKHRhcmdldDw8MSkgfCAxKTsKKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwsIFRXU0lfQ1RMX0VOQUIpOworCisJcmVzdWx0ID0gb2N0ZW9uX2kyY193YWl0KGkyYyk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQl0bXAgPSBvY3Rlb25faTJjX3JlYWRfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX1NUQVQpOworCQlpZiAoKHRtcCAhPSBTVEFUX1JYREFUQV9BQ0spICYmICh0bXAgIT0gU1RBVF9SWEFERFJfQUNLKSkgeworCQkJZGV2X2VycihpMmMtPmRldiwKKwkJCQkiJXM6IGJhZCBzdGF0dXMgYmVmb3JlIHJlYWQgKDB4JXgpXG4iLAorCQkJCV9fZnVuY19fLCB0bXApOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoaSsxIDwgbGVuZ3RoKQorCQkJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLAorCQkJCQkJVFdTSV9DVExfRU5BQiB8IFRXU0lfQ1RMX0FBSyk7CisJCWVsc2UKKwkJCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwKKwkJCQkJCVRXU0lfQ1RMX0VOQUIpOworCisJCXJlc3VsdCA9IG9jdGVvbl9pMmNfd2FpdChpMmMpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQlkYXRhW2ldID0gb2N0ZW9uX2kyY19yZWFkX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9EQVRBKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY194ZmVyIC0gVGhlIGRyaXZlcidzIG1hc3Rlcl94ZmVyIGZ1bmN0aW9uLgorICogQGFkYXA6IFBvaW50ZXIgdG8gdGhlIGkyY19hZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEBtc2dzOiBQb2ludGVyIHRvIHRoZSBtZXNzYWdlcyB0byBiZSBwcm9jZXNzZWQuCisgKiBAbnVtOiBMZW5ndGggb2YgdGhlIE1TR1MgYXJyYXkuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHByb2Nlc3NlZCwgb3IgYSBuZWdhdGl2ZSBlcnJubyBvbgorICogZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBvY3Rlb25faTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsCisJCQkgICBpbnQgbnVtKQoreworCXN0cnVjdCBpMmNfbXNnICpwbXNnOworCWludCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCBvY3Rlb25faTJjICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCisJZm9yIChpID0gMDsgcmV0ID09IDAgJiYgaSA8IG51bTsgaSsrKSB7CisJCXBtc2cgPSAmbXNnc1tpXTsKKwkJZGV2X2RiZyhpMmMtPmRldiwKKwkJCSJEb2luZyAlcyAlZCBieXRlKHMpIHRvL2Zyb20gMHglMDJ4IC0gJWQgb2YgJWQgbWVzc2FnZXNcbiIsCisJCQkgcG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQkgcG1zZy0+bGVuLCBwbXNnLT5hZGRyLCBpICsgMSwgbnVtKTsKKwkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSBvY3Rlb25faTJjX3JlYWQoaTJjLCBwbXNnLT5hZGRyLCBwbXNnLT5idWYsCisJCQkJCQlwbXNnLT5sZW4pOworCQllbHNlCisJCQlyZXQgPSBvY3Rlb25faTJjX3dyaXRlKGkyYywgcG1zZy0+YWRkciwgcG1zZy0+YnVmLAorCQkJCQkJcG1zZy0+bGVuKTsKKwl9CisJb2N0ZW9uX2kyY19zdG9wKGkyYyk7CisKKwlyZXR1cm4gKHJldCAhPSAwKSA/IHJldCA6IG51bTsKK30KKworc3RhdGljIHUzMiBvY3Rlb25faTJjX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gb2N0ZW9uX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IG9jdGVvbl9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IG9jdGVvbl9pMmNfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgb2N0ZW9uX2kyY19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiT0NURU9OIGFkYXB0ZXIiLAorCS5hbGdvID0gJm9jdGVvbl9pMmNfYWxnbywKKwkudGltZW91dCA9IDIsCit9OworCisvKioKKyAqIG9jdGVvbl9pMmNfc2V0Y2xvY2sgLSBDYWxjdWxhdGUgYW5kIHNldCBjbG9jayBkaXZpc29ycy4KKyAqLworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19zZXRjbG9jayhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCB0Y2xrLCB0aHBfYmFzZSwgaW5jLCB0aHBfaWR4LCBtZGl2X2lkeCwgbmRpdl9pZHgsIGZvc2NsLCBkaWZmOworCWludCB0aHAgPSAweDE4LCBtZGl2ID0gMiwgbmRpdiA9IDAsIGRlbHRhX2h6ID0gMTAwMDAwMDsKKworCWZvciAobmRpdl9pZHggPSAwOyBuZGl2X2lkeCA8IDggJiYgZGVsdGFfaHogIT0gMDsgbmRpdl9pZHgrKykgeworCQkvKgorCQkgKiBBbiBtZGl2IHZhbHVlIG9mIGxlc3MgdGhhbiAyIHNlZW1zIHRvIG5vdCB3b3JrIHdlbGwKKwkJICogd2l0aCBkczEzMzcgUlRDcywgc28gd2UgY29uc3RyYWluIGl0IHRvIGxhcmdlcgorCQkgKiB2YWx1ZXMuCisJCSAqLworCQlmb3IgKG1kaXZfaWR4ID0gMTU7IG1kaXZfaWR4ID49IDIgJiYgZGVsdGFfaHogIT0gMDsgbWRpdl9pZHgtLSkgeworCQkJLyoKKwkJCSAqIEZvciBnaXZlbiBuZGl2IGFuZCBtZGl2IHZhbHVlcyBjaGVjayB0aGUKKwkJCSAqIHR3byBjbG9zZXN0IHRocCB2YWx1ZXMuCisJCQkgKi8KKwkJCXRjbGsgPSBpMmMtPnR3c2lfZnJlcSAqIChtZGl2X2lkeCArIDEpICogMTA7CisJCQl0Y2xrICo9ICgxIDw8IG5kaXZfaWR4KTsKKwkJCXRocF9iYXNlID0gKGkyYy0+c3lzX2ZyZXEgLyAodGNsayAqIDIpKSAtIDE7CisJCQlmb3IgKGluYyA9IDA7IGluYyA8PSAxOyBpbmMrKykgeworCQkJCXRocF9pZHggPSB0aHBfYmFzZSArIGluYzsKKwkJCQlpZiAodGhwX2lkeCA8IDUgfHwgdGhwX2lkeCA+IDB4ZmYpCisJCQkJCWNvbnRpbnVlOworCisJCQkJZm9zY2wgPSBpMmMtPnN5c19mcmVxIC8gKDIgKiAodGhwX2lkeCArIDEpKTsKKwkJCQlmb3NjbCA9IGZvc2NsIC8gKDEgPDwgbmRpdl9pZHgpOworCQkJCWZvc2NsID0gZm9zY2wgLyAobWRpdl9pZHggKyAxKSAvIDEwOworCQkJCWRpZmYgPSBhYnMoZm9zY2wgLSBpMmMtPnR3c2lfZnJlcSk7CisJCQkJaWYgKGRpZmYgPCBkZWx0YV9oeikgeworCQkJCQlkZWx0YV9oeiA9IGRpZmY7CisJCQkJCXRocCA9IHRocF9pZHg7CisJCQkJCW1kaXYgPSBtZGl2X2lkeDsKKwkJCQkJbmRpdiA9IG5kaXZfaWR4OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9PUF9UV1NJX0NMSywgdGhwKTsKKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DTEtDVEwsIChtZGl2IDw8IDMpIHwgbmRpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19pbml0bG93bGV2ZWwoc3RydWN0IG9jdGVvbl9pMmMgKmkyYykKK3sKKwl1OCBzdGF0dXM7CisJaW50IHRyaWVzOworCisJLyogZGlzYWJsZSBoaWdoIGxldmVsIGNvbnRyb2xsZXIsIGVuYWJsZSBidXMgYWNjZXNzICovCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLCBUV1NJX0NUTF9FTkFCKTsKKworCS8qIHJlc2V0IGNvbnRyb2xsZXIgKi8KKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9SU1QsIDApOworCisJZm9yICh0cmllcyA9IDEwOyB0cmllczsgdHJpZXMtLSkgeworCQl1ZGVsYXkoMSk7CisJCXN0YXR1cyA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJCWlmIChzdGF0dXMgPT0gU1RBVF9JRExFKQorCQkJcmV0dXJuIDA7CisJfQorCWRldl9lcnIoaTJjLT5kZXYsICIlczogVFdTSV9SU1QgZmFpbGVkISAoMHgleClcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvY3Rlb25faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGlycSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjOworCXN0cnVjdCBvY3Rlb25faTJjX2RhdGEgKmkyY19kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzX21lbTsKKworCS8qIEFsbCBhZGFwdG9ycyBoYXZlIGFuIGlycS4gICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCWkyYyA9IGt6YWxsb2Moc2l6ZW9mKCppMmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWkyYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJremFsbG9jIGZhaWxlZFxuIik7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpMmMtPmRldiA9ICZwZGV2LT5kZXY7CisJaTJjX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXJlc19tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJaWYgKHJlc19tZW0gPT0gTlVMTCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiZm91bmQgbm8gbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmVzdWx0ID0gLUVOWElPOworCQlnb3RvIGZhaWxfcmVnaW9uOworCX0KKworCWlmIChpMmNfZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJubyBJMkMgZnJlcXVlbmN5IGRhdGFcbiIpOworCQlyZXN1bHQgPSAtRU5YSU87CisJCWdvdG8gZmFpbF9yZWdpb247CisJfQorCisJaTJjLT50d3NpX3BoeXMgPSByZXNfbWVtLT5zdGFydDsKKwlpMmMtPnJlZ3NpemUgPSByZXNvdXJjZV9zaXplKHJlc19tZW0pOworCWkyYy0+dHdzaV9mcmVxID0gaTJjX2RhdGEtPmkyY19mcmVxOworCWkyYy0+c3lzX2ZyZXEgPSBpMmNfZGF0YS0+c3lzX2ZyZXE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpMmMtPnR3c2lfcGh5cywgaTJjLT5yZWdzaXplLCByZXNfbWVtLT5uYW1lKSkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbF9yZWdpb247CisJfQorCWkyYy0+dHdzaV9iYXNlID0gaW9yZW1hcChpMmMtPnR3c2lfcGh5cywgaTJjLT5yZWdzaXplKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmkyYy0+cXVldWUpOworCisJaTJjLT5pcnEgPSBpcnE7CisKKwlyZXN1bHQgPSByZXF1ZXN0X2lycShpMmMtPmlycSwgb2N0ZW9uX2kyY19pc3IsIDAsIERSVl9OQU1FLCBpMmMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGludGVycnVwdFxuIik7CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCisJcmVzdWx0ID0gb2N0ZW9uX2kyY19pbml0bG93bGV2ZWwoaTJjKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJpbml0IGxvdyBsZXZlbCBmYWlsZWRcbiIpOworCQlnb3RvICBmYWlsX2FkZDsKKwl9CisKKwlyZXN1bHQgPSBvY3Rlb25faTJjX3NldGNsb2NrKGkyYyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiY2xvY2sgaW5pdCBmYWlsZWRcbiIpOworCQlnb3RvICBmYWlsX2FkZDsKKwl9CisKKwlpMmMtPmFkYXAgPSBvY3Rlb25faTJjX29wczsKKwlpMmMtPmFkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaTJjLT5hZGFwLm5yID0gcGRldi0+aWQgPj0gMCA/IHBkZXYtPmlkIDogMDsKKwlpMmNfc2V0X2FkYXBkYXRhKCZpMmMtPmFkYXAsIGkyYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKKworCXJlc3VsdCA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBhZGFwdGVyXG4iKTsKKwkJZ290byBmYWlsX2FkZDsKKwl9CisKKwlkZXZfaW5mbyhpMmMtPmRldiwgInZlcnNpb24gJXNcbiIsIERSVl9WRVJTSU9OKTsKKworCXJldHVybiByZXN1bHQ7CisKK2ZhaWxfYWRkOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWZyZWVfaXJxKGkyYy0+aXJxLCBpMmMpOworZmFpbF9pcnE6CisJaW91bm1hcChpMmMtPnR3c2lfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyYy0+dHdzaV9waHlzLCBpMmMtPnJlZ3NpemUpOworZmFpbF9yZWdpb246CisJa2ZyZWUoaTJjKTsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfTsKKworc3RhdGljIGludCBfX2RldmV4aXQgb2N0ZW9uX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpMmNfZGVsX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZnJlZV9pcnEoaTJjLT5pcnEsIGkyYyk7CisJaW91bm1hcChpMmMtPnR3c2lfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyYy0+dHdzaV9waHlzLCBpMmMtPnJlZ3NpemUpOworCWtmcmVlKGkyYyk7CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvY3Rlb25faTJjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb2N0ZW9uX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9jdGVvbl9pMmNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJWX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfaW5pdCh2b2lkKQoreworCWludCBydjsKKworCXJ2ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvY3Rlb25faTJjX2RyaXZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2N0ZW9uX2kyY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9jdGVvbl9pMmNfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBMYXduaWNrIDxtaWNoYWVsLmxhd25pY2suZXh0QG5zbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgYWRhcHRlciBmb3IgQ2F2aXVtIE9DVEVPTiBwcm9jZXNzb3JzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOworCittb2R1bGVfaW5pdChvY3Rlb25faTJjX2luaXQpOworbW9kdWxlX2V4aXQob2N0ZW9uX2kyY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwppbmRleCA4N2NlZjBjLi4zNDlhNjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCkBAIC01Niw4ICs1Niw4IEBACiAJY2hhbl90YWJfdCAqY3RwOwogCWF1MXhfZGRtYV9kZXNjX3QgKmRwOwogCi0JaWYoIXB1dF9kZXN0X2ZsYWdzKGFod2lmLT5yeF9jaGFuLCAodm9pZCopYWRkciwgY291bnQgPDwgMSwgCi0JCQkgICBERE1BX0ZMQUdTX05PSUUpKSB7CisJaWYgKCFhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoYWh3aWYtPnJ4X2NoYW4sIHZpcnRfdG9fcGh5cyhhZGRyKSwKKwkJCQkgICBjb3VudCA8PCAxLCBERE1BX0ZMQUdTX05PSUUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR1cm47CiAJfQpAQCAtNzQsOCArNzQsOCBAQAogCWNoYW5fdGFiX3QgKmN0cDsKIAlhdTF4X2RkbWFfZGVzY190ICpkcDsKIAotCWlmKCFwdXRfc291cmNlX2ZsYWdzKGFod2lmLT50eF9jaGFuLCAodm9pZCopYWRkciwKLQkJCSAgICAgY291bnQgPDwgMSwgRERNQV9GTEFHU19OT0lFKSkgeworCWlmICghYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoYWh3aWYtPnR4X2NoYW4sIHZpcnRfdG9fcGh5cyhhZGRyKSwKKwkJCQkgICAgIGNvdW50IDw8IDEsIERETUFfRkxBR1NfTk9JRSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CkBAIC0yNDYsMTcgKzI0NiwxNCBAQAogCQkJCWZsYWdzID0gRERNQV9GTEFHU19OT0lFOwogCiAJCQlpZiAoaXN3cml0ZSkgewotCQkJCWlmKCFwdXRfc291cmNlX2ZsYWdzKGFod2lmLT50eF9jaGFuLCAKLQkJCQkJCSAgICAgKHZvaWQqKSBzZ192aXJ0KHNnKSwKLQkJCQkJCSAgICAgdGMsIGZsYWdzKSkgeyAKKwkJCQlpZiAoIWF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGFod2lmLT50eF9jaGFuLAorCQkJCQlzZ19waHlzKHNnKSwgdGMsIGZsYWdzKSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCAlZFxuIiwgCiAJCQkJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJCX0KLQkJCX0gZWxzZSAKLQkJCXsKLQkJCQlpZighcHV0X2Rlc3RfZmxhZ3MoYWh3aWYtPnJ4X2NoYW4sIAotCQkJCQkJICAgKHZvaWQqKSBzZ192aXJ0KHNnKSwKLQkJCQkJCSAgIHRjLCBmbGFncykpIHsgCisJCQl9IGVsc2UgIHsKKwkJCQlpZiAoIWF1MXh4eF9kYmRtYV9wdXRfZGVzdChhaHdpZi0+cnhfY2hhbiwKKwkJCQkJc2dfcGh5cyhzZyksIHRjLCBmbGFncykpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIAogCQkJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCmluZGV4IDM0NjRlYmMuLjQ1MmZkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCkBAIC0xMDksNyArMTA5LDcgQEAKIAogY29uZmlnIEhJU0FYX1RFTEVTUENJCiAJYm9vbCAiVGVsZXMgUENJIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCisJZGVwZW5kcyBvbiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIHRoZSBUZWxlcyBQQ0kuCiAJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5IaVNheD4gb24gaG93IHRvIGNvbmZpZ3VyZSBpdC4KQEAgLTIzNyw3ICsyMzcsNyBAQAogCiBjb25maWcgSElTQVhfTkVUSkVUCiAJYm9vbCAiTkVUamV0IGNhcmQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIE5ldEpldCBmcm9tIFRyYXZlcnNlCiAJICBUZWNobm9sb2dpZXMuCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAogY29uZmlnIEhJU0FYX05FVEpFVF9VCiAJYm9vbCAiTkVUc3BpZGVyIFUgY2FyZCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgTmV0c3BpZGVyIFUgaW50ZXJmYWNlIElTRE4gY2FyZAogCSAgZnJvbSBUcmF2ZXJzZSBUZWNobm9sb2dpZXMuCkBAIC0yODcsNyArMjg3LDcgQEAKIAogY29uZmlnIEhJU0FYX0JLTV9BNFQKIAlib29sICJUZWxla29tIEE0VCBjYXJkIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kKKwlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgVGVsZWtvbSBBNFQgY2FyZC4KIApAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIGNvbmZpZyBISVNBWF9TQ1RfUVVBRFJPCiAJYm9vbCAiU2NpdGVsIFF1YWRybyBjYXJkIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kKKwlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgU2NpdGVsIFF1YWRybyBjYXJkLgogCkBAIC0zMTYsNyArMzE2LDcgQEAKIAogY29uZmlnIEhJU0FYX0hGQ19QQ0kKIAlib29sICJIRkMgUENJLUJ1cyBjYXJkcyIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgSEZDLVMgUENJIDJCRFMwIGJhc2VkIGNhcmRzLgogCkBAIC0zMjUsNyArMzI1LDcgQEAKIAogY29uZmlnIEhJU0FYX1c2NjkyCiAJYm9vbCAiV2luYm9uZCBXNjY5MiBiYXNlZCBjYXJkcyIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgV2luYm9uZCBXNjY5MiBiYXNlZCBQQ0kgSVNETiBjYXJkcy4KIApAQCAtMzQxLDcgKzM0MSw3IEBACiAKIGNvbmZpZyBISVNBWF9FTlRFUk5PV19QQ0kKIAlib29sICJGb3JtdWxhLW4gZW50ZXI6bm93IFBDSSBjYXJkIgotCWRlcGVuZHMgb24gSElTQVhfTkVUSkVUICYmIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gSElTQVhfTkVUSkVUICYmIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIEZvcm11bGEtbiBlbnRlcjpub3cgUENJCiAJICBJU0ROIGNhcmQuCkBAIC00MTIsNyArNDEyLDcgQEAKIAogY29uZmlnIEhJU0FYX0ZSSVRaX1BDSVBOUAogCXRyaXN0YXRlICJBVk0gRnJpdHohQ2FyZCBQQ0kvUENJdjIvUG5QIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFBDSSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIEFWTSBGcml0eiFDYXJkIFBDSSwKIAkgIEZyaXR6IUNhcmQgUENJIHYyIGFuZCBGcml0eiFDYXJkIFBuUC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jCmluZGV4IDdjYWJjNWEuLjE0Mjk1YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAKICNlbmRpZiAvKiBfX0lTQVBOUF9fICovCiAKLSNpZm5kZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZm5kZWYgQ09ORklHX1BDSQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdm1fcGNpX3NldHVwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKQEAgLTgzNSw3ICs4MzUsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdm1fcGNpX3NldHVwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKLQlpZiAoKGRldl9hdm0gPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BVk0sCisJaWYgKChkZXZfYXZtID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfQVZNLAogCQlQQ0lfREVWSUNFX0lEX0FWTV9BMSwgZGV2X2F2bSkpKSB7CiAKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9hdm0pKQpAQCAtODY0LDcgKzg2NCw3IEBACiAJcmV0dXJuICgxKTsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiBpbnQgX19kZXZpbml0CiBzZXR1cF9hdm1fcGNpcG5wKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jCmluZGV4IDljYTJlZTUuLjlmMjAwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hNHQuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJfSBlbHNlCiAJCXJldHVybiAoMCk7CiAKLQl3aGlsZSAoKGRldl9hNHQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTiwKKwl3aGlsZSAoKGRldl9hNHQgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTiwKIAkJUENJX0RFVklDRV9JRF9aT1JBTl8zNjEyMCwgZGV2X2E0dCkpKSB7CiAJCXJldCA9IGE0dF9wY2lfcHJvYmUoZGV2X2E0dCwgY3MsICZmb3VuZCwgJnBjaV9tZW1hZGRyKTsKIAkJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMKaW5kZXggZTFmZjQ3MS4uZTc3NTcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hOC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTguYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCShzdWJfdmVuZG9yX2lkICE9IFBDSV9WRU5ET1JfSURfQkVSS09NKSkpCiAJCXJldHVybiAoMCk7CiAJaWYgKGNzLT5zdWJ0eXAgPT0gU0NUXzEpIHsKLQkJd2hpbGUgKChkZXZfYTggPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9QTFgsCisJCXdoaWxlICgoZGV2X2E4ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLAogCQkJUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgZGV2X2E4KSkpIHsKIAkJCQogCQkJc3ViX3ZlbmRvcl9pZCA9IGRldl9hOC0+c3Vic3lzdGVtX3ZlbmRvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCmluZGV4IDBiMGMyZTUuLjc4MGRhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIAogI2VuZGlmCS8qIElTQVBOUCAqLwogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRldl9kaXZhIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfZGl2YV91IF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfZGl2YTIwMSBfX2RldmluaXRkYXRhID0gTlVMTDsKQEAgLTExNTksMjEgKzExNTksMjEgQEAKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBjYXJkLT5jczsKIAogCWNzLT5zdWJ0eXAgPSAwOwotCWlmICgoZGV2X2RpdmEgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwlpZiAoKGRldl9kaXZhID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwLCBkZXZfZGl2YSkpKSB7CiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZfZGl2YSkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5zdWJ0eXAgPSBESVZBX1BDSTsKIAkJY3MtPmlycSA9IGRldl9kaXZhLT5pcnE7CiAJCWNzLT5ody5kaXZhLmNmZ19yZWcgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X2RpdmEsIDIpOwotCX0gZWxzZSBpZiAoKGRldl9kaXZhX3UgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwl9IGVsc2UgaWYgKChkZXZfZGl2YV91ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwX1UsIGRldl9kaXZhX3UpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2RpdmFfdSkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5zdWJ0eXAgPSBESVZBX1BDSTsKIAkJY3MtPmlycSA9IGRldl9kaXZhX3UtPmlycTsKIAkJY3MtPmh3LmRpdmEuY2ZnX3JlZyA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZfZGl2YV91LCAyKTsKLQl9IGVsc2UgaWYgKChkZXZfZGl2YTIwMSA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAorCX0gZWxzZSBpZiAoKGRldl9kaXZhMjAxID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCiAJCVBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMSwgZGV2X2RpdmEyMDEpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2RpdmEyMDEpKQogCQkJcmV0dXJuKDApOwpAQCAtMTE4Myw3ICsxMTgzLDcgQEAKIAkJCSh1bG9uZykgaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X2RpdmEyMDEsIDApLCA0MDk2KTsKIAkJY3MtPmh3LmRpdmEuY2ZnX3JlZyA9CiAJCQkodWxvbmcpIGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldl9kaXZhMjAxLCAxKSwgNDA5Nik7Ci0JfSBlbHNlIGlmICgoZGV2X2RpdmEyMDIgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwl9IGVsc2UgaWYgKChkZXZfZGl2YTIwMiA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAogCQlQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMDIsIGRldl9kaXZhMjAyKSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9kaXZhMjAyKSkKIAkJCXJldHVybigwKTsKQEAgLTEyMjksMTQgKzEyMjksMTQgQEAKIAlyZXR1cm4gKDEpOwkJLyogY2FyZCBmb3VuZCAqLwogfQogCi0jZWxzZQkvKiBpZiAhQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbHNlCS8qIGlmICFDT05GSUdfUENJICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNldHVwX2RpdmFfcGNpKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKIHsKIAlyZXR1cm4gKC0xKTsJLyogY2FyZCBub3QgZm91bmQ7IGNvbnRpbnVlIHNlYXJjaCAqLwogfQogCi0jZW5kaWYJLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZgkvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX2RpdmEoc3RydWN0IElzZG5DYXJkICpjYXJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKaW5kZXggYWEyOWQxYy4uMjNjNDFmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jCkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCSAgICAgICBjcy0+aXJxKTsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIAlzdHJ1Y3QgcGNpX2RldiAqZGV2X3FzMTAwMCBfX2RldmluaXRkYXRhID0gTlVMTDsKIHN0YXRpYyAJc3RydWN0IHBjaV9kZXYgKmRldl9xczMwMDAgX19kZXZpbml0ZGF0YSA9IE5VTEw7CiAKQEAgLTEwMzUsNyArMTAzNSw3IEBACiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gY2FyZC0+Y3M7CiAKIAljcy0+c3VidHlwID0gMDsKLQlpZiAoKGRldl9xczEwMDAgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FTFNBLAorCWlmICgoZGV2X3FzMTAwMCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCiAJCVBDSV9ERVZJQ0VfSURfRUxTQV9NSUNST0xJTkssIGRldl9xczEwMDApKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3FzMTAwMCkpCiAJCQlyZXR1cm4oMCk7CkBAIC0xMDQzLDcgKzEwNDMsNyBAQAogCQljcy0+aXJxID0gZGV2X3FzMTAwMC0+aXJxOwogCQljcy0+aHcuZWxzYS5jZmcgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X3FzMTAwMCwgMSk7CiAJCWNzLT5ody5lbHNhLmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X3FzMTAwMCwgMyk7Ci0JfSBlbHNlIGlmICgoZGV2X3FzMzAwMCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCisJfSBlbHNlIGlmICgoZGV2X3FzMzAwMCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VMU0EsCiAJCVBDSV9ERVZJQ0VfSURfRUxTQV9RUzMwMDAsIGRldl9xczMwMDApKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3FzMzAwMCkpCiAJCQlyZXR1cm4oMCk7CkBAIC0xMDkzLDcgKzEwOTMsNyBAQAogewogCXJldHVybiAoMSk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBzZXR1cF9lbHNhX2NvbW1vbihzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMKaW5kZXggMzlmNDIxZS4uMjYyNjRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gZW5fcGNpX3Byb2JlKGRldl9uZXRqZXQsIGNzKTsKIAkJCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwppbmRleCAwZWEzYjQ2Li4zNTM5ODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZ2F6ZWwuYwpAQCAtNTMxLDcgKzUzMSw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfdGVsIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNTQ2LDcgKzU0Niw3IEBACiAJZm91bmQgPSAwOwogCXNlZWtjYXJkID0gUENJX0RFVklDRV9JRF9QTFhfUjY4NTsKIAlmb3IgKG5ic2VlayA9IDA7IG5ic2VlayA8IDQ7IG5ic2VlaysrKSB7Ci0JCWlmICgoZGV2X3RlbCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1BMWCwKKwkJaWYgKChkZXZfdGVsID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLAogCQkJCQlzZWVrY2FyZCwgZGV2X3RlbCkpKSB7CiAJCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3RlbCkpCiAJCQkJcmV0dXJuIDE7CkBAIC02MjAsNyArNjIwLDcgQEAKIAogCXJldHVybiAoMCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX2dhemVsKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKQEAgLTY0MCw3ICs2NDAsNyBAQAogCQkJcmV0dXJuICgwKTsKIAl9IGVsc2UgewogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiAJCWlmIChzZXR1cF9nYXplbHBjaShjcykpCiAJCQlyZXR1cm4gKDApOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IDEwOTE0NzMuLjkxN2NjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtMTY1OCw3ICsxNjU4LDcgQEAKIAogCWkgPSAwOwogCXdoaWxlIChpZF9saXN0W2ldLnZlbmRvcl9pZCkgewotCQl0bXBfaGZjcGNpID0gcGNpX2ZpbmRfZGV2aWNlKGlkX2xpc3RbaV0udmVuZG9yX2lkLAorCQl0bXBfaGZjcGNpID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKGlkX2xpc3RbaV0udmVuZG9yX2lkLAogCQkJCQkgICAgIGlkX2xpc3RbaV0uZGV2aWNlX2lkLAogCQkJCQkgICAgIGRldl9oZmNwY2kpOwogCQlpKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCmluZGV4IDA2ODVjMTkuLjgzMmE4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC0xMzIzLDMgKzEzMjMsMjYgQEAKIGNoYXIgKkhpU2F4X2dldHJldihjb25zdCBjaGFyICpyZXZpc2lvbik7CiBpbnQgVGVpTmV3KHZvaWQpOwogdm9pZCBUZWlGcmVlKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1BDSQorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKy8qIGFkYXB0YXRpb24gd3JhcHBlciBmb3Igb2xkIHVzYWdlCisgKiBXQVJOSU5HISBUaGlzIGlzIHVuZml0IGZvciB1c2UgaW4gYSBQQ0kgaG90cGx1ZyBlbnZpcm9ubWVudCwKKyAqIGFzIHRoZSByZXR1cm5lZCBQQ0kgZGV2aWNlIGNhbiBkaXNhcHBlYXIgYXQgYW55IG1vbWVudCBpbiB0aW1lLgorICogQ2FsbGVycyBzaG91bGQgYmUgY29udmVydGVkIHRvIHVzZSBwY2lfZ2V0X2RldmljZSgpIGluc3RlYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKmhpc2F4X2ZpbmRfcGNpX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBkZXZpY2UsCisJCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlwY2lfZGV2X2dldChmcm9tKTsKKwlwZGV2ID0gcGNpX2dldF9zdWJzeXModmVuZG9yLCBkZXZpY2UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGZyb20pOworCXBjaV9kZXZfcHV0KHBkZXYpOworCXJldHVybiBwZGV2OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKaW5kZXggZWYwMDYzMy4uY2NhYTZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKQEAgLTI5NywxMiArMjk3LDEyIEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiAJCXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbmljY3lfZGV2IF9fZGV2aW5pdGRhdGE7CiAKIAkJdV9pbnQgcGNpX2lvYWRkcjsKIAkJY3MtPnN1YnR5cCA9IDA7Ci0JCWlmICgobmljY3lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfU0FUU0FHRU0sCisJCWlmICgobmljY3lfZGV2ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfU0FUU0FHRU0sCiAJCQkJCQkgUENJX0RFVklDRV9JRF9TQVRTQUdFTV9OSUNDWSwKIAkJCQkJCSBuaWNjeV9kZXYpKSkgewogCQkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKG5pY2N5X2RldikpCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTmljY3k6IGlvMCAwIGFuZCBOT19QQ0lfQklPU1xuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5pY2N5OiB1bmFibGUgdG8gY29uZmlnIE5JQ0NZIFBDSVxuIik7CiAJCXJldHVybiAwOwotI2VuZGlmCQkJCS8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYJCQkJLyogQ09ORklHX1BDSSAqLwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJIaVNheDogTklDQ1kgJXMgY29uZmlnIGlycTolZCBkYXRhOjB4JVggYWxlOjB4JVhcbiIsCiAJCShjcy0+c3VidHlwID09IDEpID8gIlBuUCIgOiAiUENJIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCmluZGV4IDhkMzZjY2MuLjIzNDRlN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gbmpzX3BjaV9wcm9iZShkZXZfbmV0amV0LCBjcyk7CiAJCQlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jCmluZGV4IGQzMDZjOTQuLjA5NWU5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAKIAlmb3IgKCA7OyApCiAJewotCQlpZiAoKGRldl9uZXRqZXQgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwkJaWYgKChkZXZfbmV0amV0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwgIGRldl9uZXRqZXQpKSkgewogCQkJcmV0ID0gbmp1X3BjaV9wcm9iZShkZXZfbmV0amV0LCBjcyk7CiAJCQlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwppbmRleCA1NTY5YTUyLi42OWRmYzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCkBAIC01OTgsNyArNTk4LDcgQEAKIH0KICNlbmRpZiAvKiBfX0lTQVBOUF9fICovCiAKLSNpZmRlZiBDT05GSUdfUENJX0xFR0FDWQorI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZGV2X3NlZGwgX19kZXZpbml0ZGF0YSA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC02MDcsNyArNjA3LDcgQEAKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBjYXJkLT5jczsKIAl1MTYgc3ViX3ZlbmRvcl9pZCwgc3ViX2lkOwogCi0JaWYgKChkZXZfc2VkbCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1RJR0VSSkVULAorCWlmICgoZGV2X3NlZGwgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKIAkJCVBDSV9ERVZJQ0VfSURfVElHRVJKRVRfMTAwLCBkZXZfc2VkbCkpKSB7CiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZfc2VkbCkpCiAJCQlyZXR1cm4oMCk7CkBAIC02NzMsNyArNjczLDcgQEAKIAlyZXR1cm4gKDEpOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIGludCBfX2RldmluaXQKIHNldHVwX3NlZGxiYXVlcihzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCmluZGV4IDI4YjA4ZGUuLmI4NWNlYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc3BjaS5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIAlpZiAoY3MtPnR5cCAhPSBJU0ROX0NUWVBFX1RFTEVTUENJKQogCQlyZXR1cm4gKDApOwogCi0JaWYgKChkZXZfdGVsID0gcGNpX2ZpbmRfZGV2aWNlIChQQ0lfVkVORE9SX0lEX1pPUkFOLCBQQ0lfREVWSUNFX0lEX1pPUkFOXzM2MTIwLCBkZXZfdGVsKSkpIHsKKwlpZiAoKGRldl90ZWwgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UgKFBDSV9WRU5ET1JfSURfWk9SQU4sIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYxMjAsIGRldl90ZWwpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3RlbCkpCiAJCQlyZXR1cm4oMCk7CiAJCWNzLT5pcnEgPSBkZXZfdGVsLT5pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCmluZGV4IGM0ZDg2MmMuLjlkNmU4NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCQlyZXR1cm4gKDApOwogCiAJd2hpbGUgKGlkX2xpc3RbaWRfaWR4XS52ZW5kb3JfaWQpIHsKLQkJZGV2X3c2NjkyID0gcGNpX2ZpbmRfZGV2aWNlKGlkX2xpc3RbaWRfaWR4XS52ZW5kb3JfaWQsCisJCWRldl93NjY5MiA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShpZF9saXN0W2lkX2lkeF0udmVuZG9yX2lkLAogCQkJCQkgICAgaWRfbGlzdFtpZF9pZHhdLmRldmljZV9pZCwKIAkJCQkJICAgIGRldl93NjY5Mik7CiAJCWlmIChkZXZfdzY2OTIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMKaW5kZXggMjM3NDFjZWMuLjFjNGVlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCkBAIC0zMTcsMTMgKzMxNywxNSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKChhZGJfY29udHJvbGxlciA9PSBOVUxMKSB8fCBhZGJfY29udHJvbGxlci0+aW5pdCgpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IG5vIEFEQiBpbnRlcmZhY2UgZGV0ZWN0ZWRcbiIpOworCWlmIChhZGJfY29udHJvbGxlciAhPSBOVUxMICYmIGFkYl9jb250cm9sbGVyLT5pbml0ICYmCisJICAgIGFkYl9jb250cm9sbGVyLT5pbml0KCkpCiAJCWFkYl9jb250cm9sbGVyID0gTlVMTDsKKwlpZiAoYWRiX2NvbnRyb2xsZXIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBubyBBREIgaW50ZXJmYWNlIGRldGVjdGVkXG4iKTsKIAl9IGVsc2UgewogI2lmZGVmIENPTkZJR19QUEMKLQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgfHwKLQkJCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCisJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpIHx8CisJCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKQogCQkJc2xlZXB5X3RyYWNrcGFkID0gMTsKICNlbmRpZiAvKiBDT05GSUdfUFBDICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwppbmRleCA1ZmY0N2JhLi5jNDJlZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCkBAIC05MCw2ICs5MCw4IEBACiAKIHN0YXRpYyB2b2lkIHdyaXRlX2JvdGhfZmFuX3NwZWVkKHN0cnVjdCB0aGVybW9zdGF0ICp0aCwgaW50IHNwZWVkKTsKIHN0YXRpYyB2b2lkIHdyaXRlX2Zhbl9zcGVlZChzdHJ1Y3QgdGhlcm1vc3RhdCAqdGgsIGludCBzcGVlZCwgaW50IGZhbik7CitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X2NyZWF0ZV9maWxlcyh2b2lkKTsKK3N0YXRpYyB2b2lkIHRoZXJtb3N0YXRfcmVtb3ZlX2ZpbGVzKHZvaWQpOwogCiBzdGF0aWMgaW50CiB3cml0ZV9yZWcoc3RydWN0IHRoZXJtb3N0YXQqIHRoLCBpbnQgcmVnLCB1OCBkYXRhKQpAQCAtMTYxLDYgKzE2Myw4IEBACiAJc3RydWN0IHRoZXJtb3N0YXQgKnRoID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IGk7CiAJCisJdGhlcm1vc3RhdF9yZW1vdmVfZmlsZXMoKTsKKwogCWlmICh0aHJlYWRfdGhlcm0gIT0gTlVMTCkgewogCQlrdGhyZWFkX3N0b3AodGhyZWFkX3RoZXJtKTsKIAl9CkBAIC0zMTIsNyArMzE2LDcgQEAKIAogCQkJaWYgKHZlcmJvc2UpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgImFkdDc0Nng6IFNldHRpbmcgZmFucyBzcGVlZCB0byAlZCAiCi0JCQkJCQkgIihsaW1pdCBleGNlZWRlZCBieSAlZCBvbiAlcykgXG4iLAorCQkJCQkJICIobGltaXQgZXhjZWVkZWQgYnkgJWQgb24gJXMpXG4iLAogCQkJCQkJbmV3X3NwZWVkLCB2YXIsCiAJCQkJCQlzZW5zb3JfbG9jYXRpb25bZmFuX251bWJlcisxXSk7CiAJCQl3cml0ZV9ib3RoX2Zhbl9zcGVlZCh0aCwgbmV3X3NwZWVkKTsKQEAgLTQ0OSw2ICs0NTMsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwl0aGVybW9zdGF0X2NyZWF0ZV9maWxlcygpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2Niw3ICs1NzIsNiBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSogbnA7CiAJY29uc3QgdTMyICpwcm9wOwogCWludCBpID0gMCwgb2Zmc2V0ID0gMDsKLQlpbnQgZXJyOwogCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZmFuIik7CiAJaWYgKCFucCkKQEAgLTYzMyw2ICs2MzgsMTcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisjaWZuZGVmIENPTkZJR19JMkNfUE9XRVJNQUMKKwlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7CisjZW5kaWYKKworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X2NyZWF0ZV9maWxlcyh2b2lkKQoreworCWludCBlcnI7CisKIAllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMV90ZW1wZXJhdHVyZSk7CiAJZXJyIHw9IGRldmljZV9jcmVhdGVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IyX3RlbXBlcmF0dXJlKTsKIAllcnIgfD0gZGV2aWNlX2NyZWF0ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjFfbGltaXQpOwpAQCAtNjQ3LDE2ICs2NjMsOSBAQAogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSJGYWlsZWQgdG8gY3JlYXRlIHRlbXBlcnRhdXJlIGF0dHJpYnV0ZSBmaWxlKHMpLlxuIik7Ci0KLSNpZm5kZWYgQ09ORklHX0kyQ19QT1dFUk1BQwotCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKLSNlbmRpZgotCi0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0aGVybW9zdGF0X2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdAotdGhlcm1vc3RhdF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X3JlbW92ZV9maWxlcyh2b2lkKQogewogCWlmIChvZl9kZXYpIHsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjFfdGVtcGVyYXR1cmUpOwpAQCAtNjczLDkgKzY4MiwxNCBAQAogCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYtPmRldiwKIAkJCQkJICAgJmRldl9hdHRyX3NlbnNvcjJfZmFuX3NwZWVkKTsKIAotCQlvZl9kZXZpY2VfdW5yZWdpc3RlcihvZl9kZXYpOwogCX0KK30KKworc3RhdGljIHZvaWQgX19leGl0Cit0aGVybW9zdGF0X2V4aXQodm9pZCkKK3sKIAlpMmNfZGVsX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOworCW9mX2RldmljZV91bnJlZ2lzdGVyKG9mX2Rldik7CiB9CiAKIG1vZHVsZV9pbml0KHRoZXJtb3N0YXRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggNDU0YmM1MC4uNTczOGQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtMTg5OSw3ICsxODk5LDcgQEAKIAkgKi8KIAlpZiAocmFja21hYykKIAkJY3B1X3BpZF90eXBlID0gQ1BVX1BJRF9UWVBFX1JBQ0tNQUM7Ci0JZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpCisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpCiAJICAgICYmIChjcHVfY291bnQgPiAxKQogCSAgICAmJiBmY3VfZmFuc1tDUFVBX1BVTVBfUlBNX0lOREVYXS5pZCAhPSBGQ1VfRkFOX0FCU0VOVF9JRAogCSAgICAmJiBmY3VfZmFuc1tDUFVCX1BVTVBfUlBNX0lOREVYXS5pZCAhPSBGQ1VfRkFOX0FCU0VOVF9JRCkgewpAQCAtMjIzNCwxMCArMjIzNCwxMCBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKLQlyYWNrbWFjID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIik7CisJcmFja21hYyA9IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpOwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgJiYKLQkgICAgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSAmJgorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpICYmCisJICAgICFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgJiYKIAkgICAgIXJhY2ttYWMpCiAJICAgIAlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCmluZGV4IGJhNDhmZDcuLjdmYjhiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCWluZm8gPSBvZl9nZXRfcHJvcGVydHkobnAsICJ0aGVybWFsLWluZm8iLCBOVUxMKTsKIAlvZl9ub2RlX3B1dChucCk7CiAKLQlpZiggIWluZm8gfHwgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDYiKSApCisJaWYoICFpbmZvIHx8ICFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMyw2IikgKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmKCBpbmZvLT5pZCAhPSAzICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1jdWRhLmMKaW5kZXggNjJkZDFmZC4uOTcxYmM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtY3VkYS5jCkBAIC04OSw3ICs4OSw2IEBACiAKICNpZmRlZiBDT05GSUdfQURCCiBzdGF0aWMgaW50IGN1ZGFfcHJvYmUodm9pZCk7Ci1zdGF0aWMgaW50IGN1ZGFfaW5pdCh2b2lkKTsKIHN0YXRpYyBpbnQgY3VkYV9zZW5kX3JlcXVlc3Qoc3RydWN0IGFkYl9yZXF1ZXN0ICpyZXEsIGludCBzeW5jKTsKIHN0YXRpYyBpbnQgY3VkYV9hZGJfYXV0b3BvbGwoaW50IGRldnMpOwogc3RhdGljIGludCBjdWRhX3Jlc2V0X2FkYl9idXModm9pZCk7CkBAIC0xMDcsMTcgKzEwNiw0MiBAQAogCiAjaWZkZWYgQ09ORklHX0FEQgogc3RydWN0IGFkYl9kcml2ZXIgdmlhX2N1ZGFfZHJpdmVyID0gewotCSJDVURBIiwKLQljdWRhX3Byb2JlLAotCWN1ZGFfaW5pdCwKLQljdWRhX3NlbmRfcmVxdWVzdCwKLQljdWRhX2FkYl9hdXRvcG9sbCwKLQljdWRhX3BvbGwsCi0JY3VkYV9yZXNldF9hZGJfYnVzCisJLm5hbWUgICAgICAgICA9ICJDVURBIiwKKwkucHJvYmUgICAgICAgID0gY3VkYV9wcm9iZSwKKwkuc2VuZF9yZXF1ZXN0ID0gY3VkYV9zZW5kX3JlcXVlc3QsCisJLmF1dG9wb2xsICAgICA9IGN1ZGFfYWRiX2F1dG9wb2xsLAorCS5wb2xsICAgICAgICAgPSBjdWRhX3BvbGwsCisJLnJlc2V0X2J1cyAgICA9IGN1ZGFfcmVzZXRfYWRiX2J1cywKIH07CiAjZW5kaWYgLyogQ09ORklHX0FEQiAqLwogCi0jaWZkZWYgQ09ORklHX1BQQworI2lmZGVmIENPTkZJR19NQUMKK2ludCBfX2luaXQgZmluZF92aWFfY3VkYSh2b2lkKQoreworICAgIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CisgICAgaW50IGVycjsKKworICAgIGlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSAhPSBNQUNfQURCX0NVREEpCisJcmV0dXJuIDA7CisKKyAgICB2aWEgPSB2aWExOworICAgIGN1ZGFfc3RhdGUgPSBpZGxlOworCisgICAgZXJyID0gY3VkYV9pbml0X3ZpYSgpOworICAgIGlmIChlcnIpIHsKKwlwcmludGsoS0VSTl9FUlIgImN1ZGFfaW5pdF92aWEoKSBmYWlsZWRcbiIpOworCXZpYSA9IE5VTEw7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogZW5hYmxlIGF1dG9wb2xsICovCisgICAgY3VkYV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDMsIENVREFfUEFDS0VULCBDVURBX0FVVE9QT0xMLCAxKTsKKyAgICB3aGlsZSAoIXJlcS5jb21wbGV0ZSkKKwljdWRhX3BvbGwoKTsKKworICAgIHJldHVybiAxOworfQorI2Vsc2UKIGludCBfX2luaXQgZmluZF92aWFfY3VkYSh2b2lkKQogewogICAgIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CkBAIC0xNzUsNyArMTk5LDcgQEAKICAgICB2aWFzID0gTlVMTDsKICAgICByZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUFBDICovCisjZW5kaWYgLyogIWRlZmluZWQgQ09ORklHX01BQyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCB2aWFfY3VkYV9zdGFydCh2b2lkKQogewpAQCAtMTg0LDE0ICsyMDgsMTQgQEAKIAogI2lmZGVmIENPTkZJR19NQUMKICAgICBjdWRhX2lycSA9IElSUV9NQUNfQURCOwotI2Vsc2UgLyogQ09ORklHX01BQyAqLworI2Vsc2UKICAgICBjdWRhX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHZpYXMsIDApOwogICAgIGlmIChjdWRhX2lycSA9PSBOT19JUlEpIHsKIAlwcmludGsoS0VSTl9FUlIgInZpYS1jdWRhOiBjYW4ndCBtYXAgaW50ZXJydXB0cyBmb3IgJXNcbiIsCiAJICAgICAgIHZpYXMtPmZ1bGxfbmFtZSk7CiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQotI2VuZGlmIC8qIENPTkZJR19NQUMgKi8KKyNlbmRpZgogCiAgICAgaWYgKHJlcXVlc3RfaXJxKGN1ZGFfaXJxLCBjdWRhX2ludGVycnVwdCwgMCwgIkFEQiIsIGN1ZGFfaW50ZXJydXB0KSkgewogCXByaW50ayhLRVJOX0VSUiAidmlhLWN1ZGE6IGNhbid0IHJlcXVlc3QgaXJxICVkXG4iLCBjdWRhX2lycSk7CkBAIC0yMTYsMjggKzI0MCwxMCBAQAogI2Vsc2UKICAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9DVURBKQogCXJldHVybiAtRU5PREVWOwotICAgIHZpYSA9IHZpYTE7CiAjZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQKLWN1ZGFfaW5pdCh2b2lkKQotewotI2lmZGVmIENPTkZJR19QUEMKICAgICBpZiAodmlhID09IE5VTEwpCiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgcmV0dXJuIDA7Ci0jZWxzZSAKLSAgICBpbnQgZXJyID0gY3VkYV9pbml0X3ZpYSgpOwotICAgIGlmIChlcnIpIHsKLQlwcmludGsoS0VSTl9FUlIgImN1ZGFfaW5pdF92aWEoKSBmYWlsZWRcbiIpOwotCXJldHVybiAtRU5PREVWOwotICAgIH0KLSAgICBvdXRfOCgmdmlhW0lFUl0sIElFUl9TRVR8U1JfSU5UKTsgLyogZW5hYmxlIGludGVycnVwdCBmcm9tIFNSICovCi0KLSAgICByZXR1cm4gdmlhX2N1ZGFfc3RhcnQoKTsKLSNlbmRpZgogfQogI2VuZGlmIC8qIENPTkZJR19BREIgKi8KIApAQCAtNDMwLDkgKzQzNiwxMSBAQAogICAgIC8qIGN1ZGFfaW50ZXJydXB0IG9ubHkgdGFrZXMgYSBub3JtYWwgbG9jaywgd2UgZGlzYWJsZQogICAgICAqIGludGVycnVwdHMgaGVyZSB0byBhdm9pZCByZS1lbnRlcmluZyBhbmQgdGh1cyBkZWFkbG9ja2luZy4KICAgICAgKi8KLSAgICBkaXNhYmxlX2lycShjdWRhX2lycSk7CisgICAgaWYgKGN1ZGFfaXJxKQorCWRpc2FibGVfaXJxKGN1ZGFfaXJxKTsKICAgICBjdWRhX2ludGVycnVwdCgwLCBOVUxMKTsKLSAgICBlbmFibGVfaXJxKGN1ZGFfaXJxKTsKKyAgICBpZiAoY3VkYV9pcnEpCisJZW5hYmxlX2lycShjdWRhX2lycSk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApAQCAtNDQ2LDcgKzQ1NCw3IEBACiAgICAgCiAgICAgc3Bpbl9sb2NrKCZjdWRhX2xvY2spOwogCi0gICAgLyogT24gcG93ZXJtYWNzLCB0aGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIFZJQSBJUlEuIEJ1dCBpdCB1c2VzCisgICAgLyogT24gcG93ZXJtYWNzLCB0aGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIFZJQSBJUlEuIEJ1dCB0aGV5IHVzZQogICAgICAqIGp1c3QgdGhlIHNoaWZ0IHJlZ2lzdGVyIElSUSAtLSBvdGhlciBWSUEgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGRpc2FibGVkLgogICAgICAqIE9uIG02OGsgbWFjcywgdGhlIFZJQSBJUlEgc291cmNlcyBhcmUgZGlzcGF0Y2hlZCBpbmRpdmlkdWFsbHkuIFVubGVzcwogICAgICAqIHdlIGFyZSBwb2xsaW5nLCB0aGUgc2hpZnQgcmVnaXN0ZXIgSVJRIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKaW5kZXggYTM0OGJiMC4uNGYzYzQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCkBAIC0xNTAsMTMgKzE1MCwxMyBAQAogCiAJLyogU3BlY2lhbCBjYXNlIGZvciB0aGUgb2xkIFBvd2VyQm9vayBzaW5jZSBJIGNhbid0IHRlc3Qgb24gaXQgKi8KIAlhdXRvc2F2ZSA9Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAotCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpOworCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzQwMC8yNDAwIikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM1MDAiKTsKIAogCWlmICghYXV0b3NhdmUgJiYKIAkgICAgIXBtYWNfaGFzX2JhY2tsaWdodF90eXBlKCJwbXUiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCiAJCXJldHVybjsKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInBtdWJsIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggZGIzNzljMy4uNDI3NjQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtNDYzLDggKzQ2Myw4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUEMzMgotICAJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAotICAJCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIikpIHsKKyAgCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzQwMC8yNDAwIikgfHwKKyAgCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpKSB7CiAJCWludCBtYiA9IHBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0dFVF9NQl9JTkZPLAogCQkJTlVMTCwgUE1BQ19NQl9JTkZPX01PREVMLCAwKTsKIAkJcG11X2JhdHRlcnlfY291bnQgPSAxOwpAQCAtNDcyLDggKzQ3Miw4IEBACiAJCQlwbXVfYmF0dGVyaWVzWzBdLmZsYWdzIHw9IFBNVV9CQVRUX1RZUEVfQ09NRVQ7CiAJCWVsc2UKIAkJCXBtdV9iYXR0ZXJpZXNbMF0uZmxhZ3MgfD0gUE1VX0JBVFRfVFlQRV9IT09QRVI7Ci0JfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpIHsKKwl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkgewogCQlwbXVfYmF0dGVyeV9jb3VudCA9IDI7CiAJCXBtdV9iYXR0ZXJpZXNbMF0uZmxhZ3MgfD0gUE1VX0JBVFRfVFlQRV9TTUFSVDsKIAkJcG11X2JhdHRlcmllc1sxXS5mbGFncyB8PSBQTVVfQkFUVF9UWVBFX1NNQVJUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jCmluZGV4IDA3NWI0ZDkuLjQzN2Y1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NvcmUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMKQEAgLTQ2OCw5ICs0NjgsOSBAQAogCURCRygid2Y6IGNvcmUgbG9hZGVkXG4iKTsKIAogCS8qIERvbid0IHJlZ2lzdGVyIG9uIG9sZCBtYWNoaW5lcyB0aGF0IHVzZSB0aGVybV9wbTcyIGZvciBub3cgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3Zl9wbGF0Zm9ybV9kZXZpY2UpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jCmluZGV4IDkwMGFhZGUuLjFhNzdhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NwdWZyZXFfY2xhbXAuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMKQEAgLTc2LDkgKzc2LDkgQEAKIAlzdHJ1Y3Qgd2ZfY29udHJvbCAqY2xhbXA7CiAKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2xhbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2ZfY29udHJvbCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKaW5kZXggZWQ2NDI2YS4uZDgyNTdkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCkBAIC0yMzksOSArMjM5LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdmX2xtNzVfc2Vuc29yX2luaXQodm9pZCkKIHsKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd2ZfbG03NV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKaW5kZXggYTY3YjM0OS4uYjQ4NmViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCkBAIC0xODgsOSArMTg4LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdmX21heDY2OTBfc2Vuc29yX2luaXQodm9pZCkKIHsKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd2ZfbWF4NjY5MF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTEyLmMKaW5kZXggNzNkNjk1ZC4uZTBlZTgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTExMi5jCkBAIC02NzYsNyArNjc2LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzExLDIiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMSwyIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogQ291bnQgdGhlIG51bWJlciBvZiBDUFUgY29yZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTEyMS5jCmluZGV4IDY2ZWM0ZmIxLi45NDdkNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTEyMS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMKQEAgLTEwMDgsNyArMTAwOCw3IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKQogCQlyYyA9IHBtMTIxX2luaXRfcG0oKTsKIAogCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKaW5kZXggYWJiZTIwNi4uNTY1ZDViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG04MS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtODEuYwpAQCAtNzc5LDggKzc3OSw4IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpKQogCQlyYyA9IHdmX2luaXRfcG0oKTsKIAogCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMKaW5kZXggNzY0YzUyNS4uYmVhOTkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG05MS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtOTEuYwpAQCAtNzExLDcgKzcxMSw3IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM5LDEiKSkKIAkJcmMgPSB3Zl9pbml0X3BtKCk7CiAKIAlpZiAocmMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zZW5zb3JzLmMKaW5kZXggOWM1NjdiOS4uM2MxOTM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2Vuc29ycy5jCkBAIC0zNjMsOSArMzYzLDkgQEAKIAkgKiBJIHlldCBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHVwIHdpdGggOCwyIGFuZCB3aWxsIGhhdmUgdG8KIAkgKiBhZGp1c3QgZm9yIGxhdGVyLCB1bmxlc3Mgd2UgY2FuIDEwMCUgdHJ1c3QgdGhlIFNEQiBwYXJ0aXRpb24uLi4KIAkgKi8KLQlpZiAoKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDEiKSB8fAotCSAgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpIHx8Ci0JICAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpICYmCisJaWYgKChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKKwkgICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSB8fAorCSAgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzksMSIpKSAmJgogCSAgICBjcHV2Y3BfdmVyc2lvbiA+PSAyKSB7CiAJCXBvdy0+cXVhZHJhdGljID0gMTsKIAkJREJHKCJ3aW5kZmFybTogQ1BVIFBvd2VyIHVzaW5nIHF1YWRyYXRpYyB0cmFuc2Zvcm1cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvSVIvTWFrZWZpbGUKaW5kZXggZGY1ZGRiNC4uMTcxODkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogaXItY29tbW9uLW9ianMgIDo9IGlyLWZ1bmN0aW9ucy5vIGlyLWtleW1hcHMubwotaXItY29yZS1vYmpzCTo9IGlyLWtleXRhYmxlLm8KK2lyLWNvcmUtb2Jqcwk6PSBpci1rZXl0YWJsZS5vIGlyLXN5c2ZzLm8KIAogb2JqLSQoQ09ORklHX0lSX0NPUkUpICs9IGlyLWNvcmUubwogb2JqLSQoQ09ORklHX1ZJREVPX0lSKSArPSBpci1jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItZnVuY3Rpb25zLmMKaW5kZXggNzc2YTEzNi4uYWIwNjkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWZ1bmN0aW9ucy5jCkBAIC01Miw3ICs1Miw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgaXJfaW5wdXRfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCi0JCSAgIGludCBpcl90eXBlKQorCQkgIGNvbnN0IHU2NCBpcl90eXBlKQogewogCWlyLT5pcl90eXBlID0gaXJfdHlwZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXltYXBzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYwppbmRleCA5YmJlNmIxLi4wZWZkZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYwpAQCAtMzM5MywzICszMzkzLDEwMiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25lY190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlKTsKIAorCisvKiBMZWFkdGVrIFdpbmZhc3QgVFYgVVNCIElJIERlbHV4ZSByZW1vdGUKKyAgIE1hZ251cyBBbG0gPG1hZ251cy5hbG1AZ21haWwuY29tPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlW10gPSB7CisJeyAweDYyLCBLRVlfMH0sCisJeyAweDc1LCBLRVlfMX0sCisJeyAweDc2LCBLRVlfMn0sCisJeyAweDc3LCBLRVlfM30sCisJeyAweDc5LCBLRVlfNH0sCisJeyAweDdhLCBLRVlfNX0sCisJeyAweDdiLCBLRVlfNn0sCisJeyAweDdkLCBLRVlfN30sCisJeyAweDdlLCBLRVlfOH0sCisJeyAweDdmLCBLRVlfOX0sCisKKwl7IDB4MzgsIEtFWV9DQU1FUkF9LAkJLyogU05BUFNIT1QgKi8KKwl7IDB4MzcsIEtFWV9SRUNPUkR9LAkJLyogUkVDT1JEICovCisJeyAweDM1LCBLRVlfVElNRX0sCQkvKiBUSU1FU0hJRlQgKi8KKworCXsgMHg3NCwgS0VZX1ZPTFVNRVVQfSwJCS8qIFZPTFVNRVVQICovCisJeyAweDc4LCBLRVlfVk9MVU1FRE9XTn0sCS8qIFZPTFVNRURPV04gKi8KKwl7IDB4NjQsIEtFWV9NVVRFfSwJCS8qIE1VVEUgKi8KKworCXsgMHgyMSwgS0VZX0NIQU5ORUx9LAkJLyogU1VSRiAqLworCXsgMHg3YywgS0VZX0NIQU5ORUxVUH0sCQkvKiBDSEFOTkVMVVAgKi8KKwl7IDB4NjAsIEtFWV9DSEFOTkVMRE9XTn0sCS8qIENIQU5ORUxET1dOICovCisJeyAweDYxLCBLRVlfTEFTVH0sCQkvKiBMQVNUIENIQU5ORUwgKFJFQ0FMTCkgKi8KKworCXsgMHg3MiwgS0VZX1ZJREVPfSwgCQkvKiBJTlBVVCBNT0RFUyAoVFYvRk0pICovCisKKwl7IDB4NzAsIEtFWV9QT1dFUjJ9LAkJLyogVFYgT04vT0ZGICovCisKKwl7IDB4MzksIEtFWV9DWUNMRVdJTkRPV1N9LAkvKiBNSU5JTUlaRSAoQk9TUykgKi8KKwl7IDB4M2EsIEtFWV9ORVd9LAkJLyogUElQICovCisJeyAweDczLCBLRVlfWk9PTX0sCQkvKiBGVUxMU0VDUkVFTiAqLworCisJeyAweDY2LCBLRVlfSU5GT30sCQkvKiBPU0QgKERJU1BMQVkpICovCisKKwl7IDB4MzEsIEtFWV9ET1R9LAkJLyogJy4nICovCisJeyAweDYzLCBLRVlfRU5URVJ9LAkJLyogRU5URVIgKi8KKworfTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGVfdGFibGUpOworCisvKiBLd29ybGQgMzE1VQorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2t3b3JsZF8zMTV1W10gPSB7CisJeyAweDYxNDMsIEtFWV9QT1dFUiB9LAorCXsgMHg2MTAxLCBLRVlfVFVORVIgfSwJCS8qIHNvdXJjZSAqLworCXsgMHg2MTBiLCBLRVlfWk9PTSB9LAorCXsgMHg2MTAzLCBLRVlfUE9XRVIyIH0sCQkvKiBzaHV0ZG93biAqLworCisJeyAweDYxMDQsIEtFWV8xIH0sCisJeyAweDYxMDgsIEtFWV8yIH0sCisJeyAweDYxMDIsIEtFWV8zIH0sCisJeyAweDYxMDksIEtFWV9DSEFOTkVMVVAgfSwKKworCXsgMHg2MTBmLCBLRVlfNCB9LAorCXsgMHg2MTA1LCBLRVlfNSB9LAorCXsgMHg2MTA2LCBLRVlfNiB9LAorCXsgMHg2MTA3LCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHg2MTBjLCBLRVlfNyB9LAorCXsgMHg2MTBkLCBLRVlfOCB9LAorCXsgMHg2MTBhLCBLRVlfOSB9LAorCXsgMHg2MTBlLCBLRVlfVk9MVU1FVVAgfSwKKworCXsgMHg2MTEwLCBLRVlfTEFTVCB9LAorCXsgMHg2MTExLCBLRVlfMCB9LAorCXsgMHg2MTEyLCBLRVlfRU5URVIgfSwKKwl7IDB4NjExMywgS0VZX1ZPTFVNRURPV04gfSwKKworCXsgMHg2MTE0LCBLRVlfUkVDT1JEIH0sCisJeyAweDYxMTUsIEtFWV9TVE9QIH0sCisJeyAweDYxMTYsIEtFWV9QTEFZIH0sCisJeyAweDYxMTcsIEtFWV9NVVRFIH0sCisKKwl7IDB4NjExOCwgS0VZX1VQIH0sCisJeyAweDYxMTksIEtFWV9ET1dOIH0sCisJeyAweDYxMWEsIEtFWV9MRUZUIH0sCisJeyAweDYxMWIsIEtFWV9SSUdIVCB9LAorCisJeyAweDYxMWMsIEtFWV9SRUQgfSwKKwl7IDB4NjExZCwgS0VZX0dSRUVOIH0sCisJeyAweDYxMWUsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4NjExZiwgS0VZX0JMVUUgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2t3b3JsZF8zMTV1LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19rd29ybGRfMzE1dSksCisJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMKaW5kZXggYjUyMWVkOS4uMDkwM2Y1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYwpAQCAtNjUsNyArNjUsNyBAQAogICogSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBxdWFudGl0eSBvZiB0YWJsZSByZXNpemVzLCBpdCBoYXMgYSBtaW5pbXVtCiAgKiB0YWJsZSBzaXplIG9mIElSX1RBQl9NSU5fU0laRS4KICAqLwotaW50IGlyX3JvdW5kdXBfdGFibGVzaXplKGludCBuX2VsZW1zKQorc3RhdGljIGludCBpcl9yb3VuZHVwX3RhYmxlc2l6ZShpbnQgbl9lbGVtcykKIHsKIAlzaXplX3Qgc2l6ZTsKIApAQCAtODEsNyArODEsNiBAQAogCiAJcmV0dXJuIG5fZWxlbXM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9yb3VuZHVwX3RhYmxlc2l6ZSk7CiAKIC8qKgogICogaXJfY29weV90YWJsZSgpIC0gY29waWVzIGEga2V5dGFibGUsIGRpc2NhcmRpbmcgdGhlIHVudXNlZCBlbnRyaWVzCkBAIC04OSw5ICs4OCwxMSBAQAogICogQG9yaWdpbjoJb3JpZ2luIHRhYmxlCiAgKgogICogQ29waWVzIGFsbCBlbnRyaWVzIHdoZXJlIHRoZSBrZXljb2RlIGlzIG5vdCBLRVlfVU5LTk9XTi9LRVlfUkVTRVJWRUQKKyAqIEFsc28gY29waWVzIHRhYmxlIHNpemUgYW5kIHRhYmxlIHByb3RvY29sLgorICogTk9URTogSXQgc2hvdWxkbid0IGNvcHkgdGhlIGxvY2sgZmllbGQKICAqLwogCi1pbnQgaXJfY29weV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmRlc3RpbiwKK3N0YXRpYyBpbnQgaXJfY29weV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmRlc3RpbiwKIAkJIGNvbnN0IHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqb3JpZ2luKQogewogCWludCBpLCBqID0gMDsKQEAgLTEwNSwxMiArMTA2LDEyIEBACiAJCWorKzsKIAl9CiAJZGVzdGluLT5zaXplID0gajsKKwlkZXN0aW4tPmlyX3R5cGUgPSBvcmlnaW4tPmlyX3R5cGU7CiAKIAlJUl9kcHJpbnRrKDEsICJDb3BpZWQgJWQgc2NhbmNvZGVzIHRvIHRoZSBuZXcga2V5Y29kZSB0YWJsZVxuIiwgZGVzdGluLT5zaXplKTsKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29weV90YWJsZSk7CiAKIC8qKgogICogaXJfZ2V0a2V5Y29kZSgpIC0gZ2V0IGEga2V5Y29kZSBhdCB0aGUgZXZkZXYgc2NhbmNvZGUgLT5rZXljb2RlIHRhYmxlCkBAIC0xODQsMTggKzE4NSwxNCBAQAogCWludCBuZXdzaXplID0gcmNfdGFiLT5zaXplIC0gMTsKIAlpbnQgcmVzaXplID0gaXJfaXNfcmVzaXplX25lZWRlZChyY190YWIsIG5ld3NpemUpOwogCXN0cnVjdCBpcl9zY2FuY29kZSAqb2xka2V5bWFwID0gcmNfdGFiLT5zY2FuOwotCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwOworCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwID0gTlVMTDsKIAotCWlmIChyZXNpemUpIHsKKwlpZiAocmVzaXplKQogCQluZXdrZXltYXAgPSBremFsbG9jKGlyX3JvdW5kdXBfdGFibGVzaXplKG5ld3NpemUpICoKIAkJCQkgICAgc2l6ZW9mKCpuZXdrZXltYXApLCBHRlBfQVRPTUlDKTsKIAotCQkvKiBUaGVyZSdzIG5vIG1lbW9yeSBmb3IgcmVzaXplLiBLZWVwIHRoZSBvbGQgdGFibGUgKi8KLQkJaWYgKCFuZXdrZXltYXApCi0JCQlyZXNpemUgPSAwOwotCX0KLQotCWlmICghcmVzaXplKSB7CisJLyogVGhlcmUncyBubyBtZW1vcnkgZm9yIHJlc2l6ZS4gS2VlcCB0aGUgb2xkIHRhYmxlICovCisJaWYgKCFyZXNpemUgfHwgIW5ld2tleW1hcCkgewogCQluZXdrZXltYXAgPSBvbGRrZXltYXA7CiAKIAkJLyogV2UnbGwgbW9kaWZ5IHRoZSBsaXZlIHRhYmxlLiBMb2NrIGl0ICovCkBAIC0zOTksMTIgKzM5NiwxNCBAQAogICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCiAgKiBAcmNfdGFiOgl0aGUgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIHRhYmxlIG9mIHNjYW5jb2RlL2tleW1hcAogICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGlucHV0IGluZnJhc3RydWN0dXJlIHRvIHdvcmsgd2l0aAotICogYW4gSVIuCi0gKiBJdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgSVIgZGV2aWNlLgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaW5wdXQgaW5mcmFzdHJ1Y3R1cmUKKyAqIHRvIHdvcmsgd2l0aCBhbiBJUi4KKyAqIEl0IHdpbGwgcmVnaXN0ZXIgdGhlIGlucHV0L2V2ZGV2IGludGVyZmFjZSBmb3IgdGhlIGRldmljZSBhbmQKKyAqIHJlZ2lzdGVyIHRoZSBzeWZzIGNvZGUgZm9yIElSIGNsYXNzCiAgKi8KIGludCBpcl9pbnB1dF9yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCi0JCSAgICAgIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiKQorCQkgICAgICBjb25zdCBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMpCiB7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2OwogCXN0cnVjdCBpcl9zY2FuY29kZSAgKmtleW1hcCAgICA9IHJjX3RhYi0+c2NhbjsKQEAgLTQxNywxOSArNDE2LDIyIEBACiAJaWYgKCFpcl9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnJjX3RhYi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmlyX2Rldi0+cmNfdGFiLmxvY2spOwogCiAJaXJfZGV2LT5yY190YWIuc2l6ZSA9IGlyX3JvdW5kdXBfdGFibGVzaXplKHJjX3RhYi0+c2l6ZSk7CiAJaXJfZGV2LT5yY190YWIuc2NhbiA9IGt6YWxsb2MoaXJfZGV2LT5yY190YWIuc2l6ZSAqCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXJfc2NhbmNvZGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlyX2Rldi0+cmNfdGFiLnNjYW4pCisJaWYgKCFpcl9kZXYtPnJjX3RhYi5zY2FuKSB7CisJCWtmcmVlKGlyX2Rldik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCUlSX2RwcmludGsoMSwgIkFsbG9jYXRlZCBzcGFjZSBmb3IgJWQga2V5Y29kZSBlbnRyaWVzICglemQgYnl0ZXMpXG4iLAogCQlpcl9kZXYtPnJjX3RhYi5zaXplLAogCQlpcl9kZXYtPnJjX3RhYi5zaXplICogc2l6ZW9mKGlyX2Rldi0+cmNfdGFiLnNjYW4pKTsKIAogCWlyX2NvcHlfdGFibGUoJmlyX2Rldi0+cmNfdGFiLCByY190YWIpOworCWlyX2Rldi0+cHJvcHMgPSBwcm9wczsKIAogCS8qIHNldCB0aGUgYml0cyBmb3IgdGhlIGtleXMgKi8KIAlJUl9kcHJpbnRrKDEsICJrZXkgbWFwIHNpemU6ICVkXG4iLCByY190YWItPnNpemUpOwpAQCAtNDQ3LDE2ICs0NDksMzEgQEAKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGlyX2Rldik7CiAKIAlyYyA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOworCisJcmMgPSBpcl9yZWdpc3Rlcl9jbGFzcyhpbnB1dF9kZXYpOwogCWlmIChyYyA8IDApIHsKLQkJa2ZyZWUocmNfdGFiLT5zY2FuKTsKLQkJa2ZyZWUoaXJfZGV2KTsKLQkJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBOVUxMKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJZ290byBlcnI7CiAJfQogCisJcmV0dXJuIDA7CisKK2VycjoKKwlrZnJlZShyY190YWItPnNjYW4pOworCWtmcmVlKGlyX2Rldik7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBOVUxMKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9yZWdpc3Rlcik7CiAKKy8qKgorICogaXJfaW5wdXRfdW5yZWdpc3RlcigpIC0gdW5yZWdpc3RlcnMgSVIgYW5kIGZyZWVzIHJlc291cmNlcworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGZyZWUgbWVtb3J5IGFuZCBkZS1yZWdpc3RlciBpbnRlcmZhY2VzLgorICovCiB2b2lkIGlyX2lucHV0X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewogCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CkBAIC00NzIsNiArNDg5LDggQEAKIAlrZnJlZShyY190YWItPnNjYW4pOwogCXJjX3RhYi0+c2NhbiA9IE5VTEw7CiAKKwlpcl91bnJlZ2lzdGVyX2NsYXNzKGRldik7CisKIAlrZnJlZShpcl9kZXYpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ZmJjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYwpAQCAtMCwwICsxLDIxMSBAQAorLyogaXItcmVnaXN0ZXIuYyAtIGhhbmRsZSBJUiBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKworI2RlZmluZSBJUlJDVl9OVU1fREVWSUNFUwkyNTYKKworLyogYml0IGFycmF5IHRvIHJlcHJlc2VudCBJUiBzeXNmcyBkZXZpY2UgbnVtYmVyICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcl9jb3JlX2Rldl9udW1iZXI7CisKKy8qIGNsYXNzIGZvciAvc3lzL2NsYXNzL2lycmN2ICovCitzdGF0aWMgc3RydWN0IGNsYXNzICppcl9pbnB1dF9jbGFzczsKKworLyoqCisgKiBzaG93X3Byb3RvY29sKCkgLSBzaG93cyB0aGUgY3VycmVudCBJUiBwcm90b2NvbAorICogQGQ6CQl0aGUgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBtYXR0cjoJdGhlIGRldmljZSBhdHRyaWJ1dGUgc3RydWN0ICh1bnVzZWQpCisgKiBAYnVmOglhIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBjYWxsYmFjayByb3V0aW5lIGZvciBpbnB1dCByZWFkIHRoZSBJUiBwcm90b2NvbCB0eXBlLgorICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/L2N1cnJlbnRfcHJvdG9jb2wuCisgKiBJdCByZXR1cm5zIHRoZSBwcm90b2NvbCBuYW1lLCBhcyB1bmRlcnN0b29kIGJ5IHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfcHJvdG9jb2woc3RydWN0IGRldmljZSAqZCwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLCBjaGFyICpidWYpCit7CisJY2hhciAqczsKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJdTY0IGlyX3R5cGUgPSBpcl9kZXYtPnJjX3RhYi5pcl90eXBlOworCisJSVJfZHByaW50aygxLCAiQ3VycmVudCBwcm90b2NvbCBpcyAlbGxkXG4iLCAobG9uZyBsb25nKWlyX3R5cGUpOworCisJLyogRklYTUU6IGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBwcm90b2NvbHMgYXQgdGhlIHNhbWUgdGltZSAqLworCWlmIChpcl90eXBlID09IElSX1RZUEVfVU5LTk9XTikKKwkJcyA9ICJVbmtub3duIjsKKwllbHNlIGlmIChpcl90eXBlID09IElSX1RZUEVfUkM1KQorCQlzID0gIlJDLTUiOworCWVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9QRCkKKwkJcyA9ICJQdWxzZS9kaXN0YW5jZSI7CisJZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX05FQykKKwkJcyA9ICJORUMiOworCWVsc2UKKwkJcyA9ICJPdGhlciI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcyk7Cit9CisKKy8qKgorICogc3RvcmVfcHJvdG9jb2woKSAtIHNob3dzIHRoZSBjdXJyZW50IElSIHByb3RvY29sCisgKiBAZDoJCXRoZSBkZXZpY2UgZGVzY3JpcHRvcgorICogQG1hdHRyOgl0aGUgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3QgKHVudXNlZCkKKyAqIEBidWY6CWEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyCisgKiBAbGVuOglsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlcgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBhIGNhbGxiYWNrIHJvdXRpbmUgZm9yIGNoYW5naW5nIHRoZSBJUiBwcm90b2NvbCB0eXBlLgorICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/L2N1cnJlbnRfcHJvdG9jb2wuCisgKiBJdCBjaGFuZ2VzIHRoZSBJUiB0aGUgcHJvdG9jb2wgbmFtZSwgaWYgdGhlIElSIHR5cGUgaXMgcmVjb2duaXplZAorICogYnkgdGhlIGRyaXZlci4KKyAqIElmIGFuIHVua25vd24gcHJvdG9jb2wgbmFtZSBpcyB1c2VkLCByZXR1cm5zIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3Byb3RvY29sKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpkYXRhLAorCQkJICAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV047CisJaW50IHJjID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKmJ1ZjsKKworCWJ1ZiA9IHN0cnNlcCgoY2hhciAqKikgJmRhdGEsICJcbiIpOworCisJaWYgKCFzdHJjYXNlY21wKGJ1ZiwgInJjLTUiKSkKKwkJaXJfdHlwZSA9IElSX1RZUEVfUkM1OworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGJ1ZiwgInBkIikpCisJCWlyX3R5cGUgPSBJUl9UWVBFX1BEOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGJ1ZiwgIm5lYyIpKQorCQlpcl90eXBlID0gSVJfVFlQRV9ORUM7CisKKwlpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX1VOS05PV04pIHsKKwkJSVJfZHByaW50aygxLCAiRXJyb3Igc2V0dGluZyBwcm90b2NvbCB0byAlbGxkXG4iLAorCQkJICAgKGxvbmcgbG9uZylpcl90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGlyX2Rldi0+cHJvcHMgJiYgaXJfZGV2LT5wcm9wcy0+Y2hhbmdlX3Byb3RvY29sKQorCQlyYyA9IGlyX2Rldi0+cHJvcHMtPmNoYW5nZV9wcm90b2NvbChpcl9kZXYtPnByb3BzLT5wcml2LAorCQkJCQkJICAgIGlyX3R5cGUpOworCisJaWYgKHJjIDwgMCkgeworCQlJUl9kcHJpbnRrKDEsICJFcnJvciBzZXR0aW5nIHByb3RvY29sIHRvICVsbGRcbiIsCisJCQkgICAobG9uZyBsb25nKWlyX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJfZGV2LT5yY190YWIubG9jaywgZmxhZ3MpOworCWlyX2Rldi0+cmNfdGFiLmlyX3R5cGUgPSBpcl90eXBlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyX2Rldi0+cmNfdGFiLmxvY2ssIGZsYWdzKTsKKworCUlSX2RwcmludGsoMSwgIkN1cnJlbnQgcHJvdG9jb2wgaXMgJWxsZFxuIiwKKwkJICAgKGxvbmcgbG9uZylpcl90eXBlKTsKKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBTdGF0aWMgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3Qgd2l0aCB0aGUgc3lzZnMgYXR0cmlidXRlcyBmb3IgSVIncworICovCitzdGF0aWMgREVWSUNFX0FUVFIoY3VycmVudF9wcm90b2NvbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfcHJvdG9jb2wsIHN0b3JlX3Byb3RvY29sKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlyX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9jdXJyZW50X3Byb3RvY29sLmF0dHIsCisJTlVMTCwKK307CisKKy8qKgorICogaXJfcmVnaXN0ZXJfY2xhc3MoKSAtIGNyZWF0ZXMgdGhlIHN5c2ZzIGZvciAvc3lzL2NsYXNzL2lycmN2L2lycmN2PworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIHN5ZnMgY29kZSBmb3IgSVIgY2xhc3MKKyAqLworaW50IGlyX3JlZ2lzdGVyX2NsYXNzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKK3sKKwlpbnQgcmM7CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOworCWludCBkZXZubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmlyX2NvcmVfZGV2X251bWJlciwKKwkJCQkJSVJSQ1ZfTlVNX0RFVklDRVMpOworCisJaWYgKHVubGlrZWx5KGRldm5vIDwgMCkpCisJCXJldHVybiBkZXZubzsKKworCWlyX2Rldi0+YXR0ci5hdHRycyA9IGlyX2Rldl9hdHRyczsKKwlpcl9kZXYtPmNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoaXJfaW5wdXRfY2xhc3MsIE5VTEwsCisJCQkJCSAgaW5wdXRfZGV2LT5kZXYuZGV2dCwgaXJfZGV2LAorCQkJCQkgICJpcnJjdiVkIiwgZGV2bm8pOworCWtvYmogPSAmaXJfZGV2LT5jbGFzc19kZXYtPmtvYmo7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJDcmVhdGluZyBJUiBkZXZpY2UgJXNcbiIsIGtvYmplY3RfbmFtZShrb2JqKSk7CisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoa29iaiwgJmlyX2Rldi0+YXR0cik7CisJaWYgKHVubGlrZWx5KHJjIDwgMCkpIHsKKwkJZGV2aWNlX2Rlc3Ryb3koaXJfaW5wdXRfY2xhc3MsIGlucHV0X2Rldi0+ZGV2LmRldnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpcl9kZXYtPmRldm5vID0gZGV2bm87CisJc2V0X2JpdChkZXZubywgJmlyX2NvcmVfZGV2X251bWJlcik7CisKKwlyZXR1cm4gMDsKK307CisKKy8qKgorICogaXJfdW5yZWdpc3Rlcl9jbGFzcygpIC0gcmVtb3ZlcyB0aGUgc3lzZnMgZm9yIHN5c2ZzIGZvcgorICoJCQkgICAvc3lzL2NsYXNzL2lycmN2L2lycmN2PworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gdW5yZWdpc3RlciB0aGUgc3lmcyBjb2RlIGZvciBJUiBjbGFzcworICovCit2b2lkIGlyX3VucmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisKKwljbGVhcl9iaXQoaXJfZGV2LT5kZXZubywgJmlyX2NvcmVfZGV2X251bWJlcik7CisKKwlrb2JqID0gJmlyX2Rldi0+Y2xhc3NfZGV2LT5rb2JqOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKGtvYmosICZpcl9kZXYtPmF0dHIpOworCWRldmljZV9kZXN0cm95KGlyX2lucHV0X2NsYXNzLCBpbnB1dF9kZXYtPmRldi5kZXZ0KTsKKworCWtmcmVlKGlyX2Rldi0+YXR0ci5uYW1lKTsKK30KKworLyoKKyAqIEluaXQvZXhpdCBjb2RlIGZvciB0aGUgbW9kdWxlLiBCYXNpY2FsbHksIGNyZWF0ZXMvcmVtb3ZlcyAvc3lzL2NsYXNzL2lycmN2CisgKi8KKworc3RhdGljIGludCBfX2luaXQgaXJfY29yZV9pbml0KHZvaWQpCit7CisJaXJfaW5wdXRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJpcnJjdiIpOworCWlmIChJU19FUlIoaXJfaW5wdXRfY2xhc3MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaXJfY29yZTogdW5hYmxlIHRvIHJlZ2lzdGVyIGlycmN2IGNsYXNzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaXJfaW5wdXRfY2xhc3MpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXJfY29yZV9leGl0KHZvaWQpCit7CisJY2xhc3NfZGVzdHJveShpcl9pbnB1dF9jbGFzcyk7Cit9CisKK21vZHVsZV9pbml0KGlyX2NvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChpcl9jb3JlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwppbmRleCA3MzY0Yjk2Li5mZDhlMWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwpAQCAtNDIzLDE0ICs0MjMsMTUgQEAKIAl9CiB9CiAKK2ludCBzYWE3MTQ2X3Z2X2RldmluaXQoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYpCit7CisJcmV0dXJuIHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT52NGwyX2Rldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTQ2X3Z2X2RldmluaXQpOworCiBpbnQgc2FhNzE0Nl92dl9pbml0KHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgKmV4dF92dikKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnY7Ci0JaW50IGVycjsKLQotCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT52NGwyX2Rldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKIAogCXZ2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxNDZfdnYpLCBHRlBfS0VSTkVMKTsKIAlpZiAodnYgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYwppbmRleCAyYjg3NmYzLi5kOWFhYWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYwpAQCAtMTMzNyw2ICsxMzM3LDIyIEBACiAJfSwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVFVORVJfU09OWV9CVEZfUFhOMDFaIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3NvbnlfYnRmX3B4bjAxel9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDM2Ny4yNSAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwNCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3NvbnlfYnRmX3B4bjAxel9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9zb255X2J0Zl9weG4wMXpfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9zb255X2J0Zl9weG4wMXpfcmFuZ2VzKSwKKwl9LAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCB0dW5lcnR5cGUgdHVuZXJzW10gPSB7CkBAIC0xODA1LDYgKzE4MjEsMTEgQEAKIAkJLm5hbWUgICA9ICJOWFAgVERBMTgyNzEiLAogCQkvKiBzZWUgdGRhMTgyNzEtZmUuYyBmb3IgZGV0YWlscyAqLwogCX0sCisJW1RVTkVSX1NPTllfQlRGX1BYTjAxWl0gPSB7CisJCS5uYW1lICAgPSAiU29ueSBCVEYtUHhuMDFaIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3NvbnlfYnRmX3B4bjAxel9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3NvbnlfYnRmX3B4bjAxel9wYXJhbXMpLAorCX0sCiB9OwogRVhQT1JUX1NZTUJPTCh0dW5lcnMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMKaW5kZXggZjI3MGU2MC4uYmU1MWMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYwpAQCAtOTE3LDMwICs5MTcsNjggQEAKIAkgKiB0aGF0IHhjMjAyOCB3aWxsIGJlIGluIGEgc2FmZSBzdGF0ZS4KIAkgKiBNYXliZSB0aGlzIG1pZ2h0IGFsc28gYmUgbmVlZGVkIGZvciBEVFYuCiAJICovCi0JaWYgKG5ld19tb2RlID09IFRfQU5BTE9HX1RWKQorCWlmIChuZXdfbW9kZSA9PSBUX0FOQUxPR19UVikgewogCQlyYyA9IHNlbmRfc2VxKHByaXYsIHsweDAwLCAweDAwfSk7CiAKLQkvKgotCSAqIERpZ2l0YWwgbW9kZXMgcmVxdWlyZSBhbiBvZmZzZXQgdG8gYWRqdXN0IHRvIHRoZQotCSAqIHByb3BlciBmcmVxdWVuY3kuCi0JICogQW5hbG9nIG1vZGVzIHJlcXVpcmUgb2Zmc2V0ID0gMAotCSAqLwotCWlmIChuZXdfbW9kZSA9PSBUX0RJR0lUQUxfVFYpIHsKLQkJLyogU2V0cyB0aGUgb2Zmc2V0IGFjY29yZGluZyB3aXRoIGZpcm13YXJlICovCisJCS8qIEFuYWxvZyBtb2RlcyByZXF1aXJlIG9mZnNldCA9IDAgKi8KKwl9IGVsc2UgeworCQkvKgorCQkgKiBEaWdpdGFsIG1vZGVzIHJlcXVpcmUgYW4gb2Zmc2V0IHRvIGFkanVzdCB0byB0aGUKKwkJICogcHJvcGVyIGZyZXF1ZW5jeS4gVGhlIG9mZnNldCBkZXBlbmRzIG9uIHdoYXQKKwkJICogZmlybXdhcmUgdmVyc2lvbiBpcyB1c2VkLgorCQkgKi8KKworCQkvKgorCQkgKiBBZGp1c3QgdG8gdGhlIGNlbnRlciBmcmVxdWVuY3kuIFRoaXMgaXMgY2FsY3VsYXRlZCBieSB0aGUKKwkJICogZm9ybXVsYTogb2Zmc2V0ID0gMS4yNU1IeiAtIEJXLzIKKwkJICogRm9yIERUViA3LzgsIHRoZSBmaXJtd2FyZSB1c2VzIEJXID0gODAwMCwgc28gaXQgbmVlZHMgYQorCQkgKiBmdXJ0aGVyIGFkanVzdG1lbnQgdG8gZ2V0IHRoZSBmcmVxdWVuY3kgY2VudGVyIG9uIFZIRgorCQkgKi8KIAkJaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNikKIAkJCW9mZnNldCA9IDE3NTAwMDA7CiAJCWVsc2UgaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNykKIAkJCW9mZnNldCA9IDIyNTAwMDA7CiAJCWVsc2UJLyogRFRWOCBvciBEVFY3OCAqLwogCQkJb2Zmc2V0ID0gMjc1MDAwMDsKLQotCQkvKgotCQkgKiBXZSBtdXN0IGFkanVzdCB0aGUgb2Zmc2V0IGJ5IDUwMGtIeiAgd2hlbgotCQkgKiB0dW5pbmcgYSA3TUh6IFZIRiBjaGFubmVsIHdpdGggRFRWNzggZmlybXdhcmUKLQkJICogKHVzZWQgaW4gQXVzdHJhbGlhLCBJdGFseSBhbmQgR2VybWFueSkKLQkJICovCiAJCWlmICgocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3OCkgJiYgZnJlcSA8IDQ3MDAwMDAwMCkKIAkJCW9mZnNldCAtPSA1MDAwMDA7CisKKwkJLyoKKwkJICogeGMzMDI4IGFkZGl0aW9uYWwgIm1hZ2ljIgorCQkgKiBEZXBlbmRpbmcgb24gdGhlIGZpcm13YXJlIHZlcnNpb24sIGl0IG5lZWRzIHNvbWUgYWRqdXN0bWVudHMKKwkJICogdG8gcHJvcGVybHkgY2VudHJhbGl6ZSB0aGUgZnJlcXVlbmN5LiBUaGlzIHNlZW1zIHRvIGJlCisJCSAqIG5lZWRlZCB0byBjb21wZW5zYXRlIHRoZSBTQ09ERSB0YWJsZSBhZGp1c3RtZW50cyBtYWRlIGJ5CisJCSAqIG5ld2VyIGZpcm13YXJlcworCQkgKi8KKworI2lmIDEKKwkJLyoKKwkJICogVGhlIHByb3BlciBhZGp1c3RtZW50IHdvdWxkIGJlIHRvIGRvIGl0IGF0IHMtY29kZSB0YWJsZS4KKwkJICogSG93ZXZlciwgdGhpcyBkaWRuJ3Qgd29yaywgYXMgcmVwb3J0ZWQgYnkKKwkJICogUm9iZXJ0IExvd2VyeSA8cmdsb3dlcnlAZXhlbWFpbC5jb20uYXU+CisJCSAqLworCisJCWlmIChwcml2LT5jdXJfZncudHlwZSAmIERUVjcpCisJCQlvZmZzZXQgKz0gNTAwMDAwOworCisjZWxzZQorCQkvKgorCQkgKiBTdGlsbCBuZWVkIHRlc3RzIGZvciBYQzMwMjhMIChmaXJtd2FyZSAzLjIgb3IgdXBwZXIpCisJCSAqIFNvLCBmb3Igbm93LCBsZXQncyBqdXN0IGNvbW1lbnQgdGhlIHBlci1maXJtd2FyZQorCQkgKiB2ZXJzaW9uIG9mIHRoaXMgY2hhbmdlLiBSZXBvcnRzIHdpdGggeGMzMDI4bCB3b3JraW5nCisJCSAqIHdpdGggYW5kIHdpdGhvdXQgdGhlIGxpbmVzIGJlbGxvdyBhcmUgd2VsY29tZQorCQkgKi8KKworCQlpZiAocHJpdi0+ZmlybV92ZXJzaW9uIDwgMHgwMzAyKSB7CisJCQlpZiAocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3KQorCQkJCW9mZnNldCArPSA1MDAwMDA7CisJCX0gZWxzZSB7CisJCQlpZiAocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3KQorCQkJCW9mZnNldCAtPSAzMDAwMDA7CisJCQllbHNlIGlmICh0eXBlICE9IEFUU0MpIC8qIERWQiBANk1IeiwgRFRWIDggYW5kIERUViA3LzggKi8KKwkJCQlvZmZzZXQgKz0gMjAwMDAwOworCQl9CisjZW5kaWYKIAl9CiAKIAlkaXYgPSAoZnJlcSAtIG9mZnNldCArIERJViAvIDIpIC8gRElWOwpAQCAtMTA5NywxNyArMTEzNSwyNCBAQAogCiAJLyogQWxsIFMtY29kZSB0YWJsZXMgbmVlZCBhIDIwMGtIeiBzaGlmdCAqLwogCWlmIChwcml2LT5jdHJsLmRlbW9kKSB7Ci0JCWRlbW9kID0gcHJpdi0+Y3RybC5kZW1vZCArIDIwMDsKKwkJZGVtb2QgPSBwcml2LT5jdHJsLmRlbW9kOworCisJCS8qCisJCSAqIE5ld2VyIGZpcm13YXJlcyByZXF1aXJlIGEgMjAwIGtIeiBvZmZzZXQgb25seSBmb3IgQVRTQworCQkgKi8KKwkJaWYgKHR5cGUgPT0gQVRTQyB8fCBwcml2LT5maXJtX3ZlcnNpb24gPCAweDAzMDIpCisJCQlkZW1vZCArPSAyMDA7CiAJCS8qCiAJCSAqIFRoZSBEVFY3IFMtY29kZSB0YWJsZSBuZWVkcyBhIDcwMCBrSHogc2hpZnQuCi0JCSAqIFRoYW5rcyB0byBUZXJyeSBXdSA8dGVycnl3dTIwMDlAZ21haWwuY29tPiBmb3IgcmVwb3J0aW5nIHRoaXMKIAkJICoKIAkJICogRFRWNyBpcyBvbmx5IHVzZWQgaW4gQXVzdHJhbGlhLiAgR2VybWFueSBvciBJdGFseSBtYXkgYWxzbwogCQkgKiB1c2UgdGhpcyBmaXJtd2FyZSBhZnRlciBpbml0aWFsaXphdGlvbiwgYnV0IGEgdHVuZSB0byBhIFVIRgogCQkgKiBjaGFubmVsIHNob3VsZCB0aGVuIGNhdXNlIERUVjc4IHRvIGJlIHVzZWQuCisJCSAqCisJCSAqIFVuZm9ydHVuYXRlbHksIG9uIHJlYWwtZmllbGQgdGVzdHMsIHRoZSBzLWNvZGUgb2Zmc2V0CisJCSAqIGRpZG4ndCB3b3JrIGFzIGV4cGVjdGVkLCBhcyByZXBvcnRlZCBieQorCQkgKiBSb2JlcnQgTG93ZXJ5IDxyZ2xvd2VyeUBleGVtYWlsLmNvbS5hdT4KIAkJICovCi0JCWlmICh0eXBlICYgRFRWNykKLQkJCWRlbW9kICs9IDUwMDsKIAl9CiAKIAlyZXR1cm4gZ2VuZXJpY19zZXRfZnJlcShmZSwgcC0+ZnJlcXVlbmN5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKaW5kZXggY2Y4ZjY1Zi4uMTYxY2NmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCkBAIC03Niw2ICs3NiwxMCBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwogCXNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL0tjb25maWciCiAKK2NvbW1lbnQgIlN1cHBvcnRlZCBuR2VuZSBBZGFwdGVycyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKKwlzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL25nZW5lL0tjb25maWciCisKIGNvbW1lbnQgIlN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCmluZGV4IGMxMjkyMmMuLmExYTA4NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiAJCXNpYW5vLwkJXAogCQlkbTExMDUvCQlcCiAJCXB0MS8JCVwKLQkJbWFudGlzLworCQltYW50aXMvCQlcCisJCW5nZW5lLwogCiBvYmotJChDT05GSUdfRFZCX0ZJUkVEVFYpCSs9IGZpcmV3aXJlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKaW5kZXggYTI0YzEyNS4uOTlkNjIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCkBAIC01NzYsNDMgKzU3NiwzMCBAQAogICAgICAgLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGJ0ODc4X3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IGJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZDsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBNb2R1bGUgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGJ0ODc4X2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBidDg3OF9pbml0X21vZHVsZSh2b2lkKQogewogCWJ0ODc4X251bSA9IDA7Ci0JYnQ4NzhfcGNpX2RyaXZlcl9yZWdpc3RlcmVkID0gMDsKIAogCXByaW50ayhLRVJOX0lORk8gImJ0ODc4OiBBVURJTyBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZCBsb2FkZWRcbiIsCiAJICAgICAgIChCVDg3OF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKIAkgICAgICAgKEJUODc4X1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsCiAJICAgICAgIEJUODc4X1ZFUlNJT05fQ09ERSAmIDB4ZmYpOwotLyoKLQlidDg3OF9jaGVja19jaGlwc2V0KCk7Ci0qLwotCS8qIGxhdGVyIHdlIHJlZ2lzdGVyIGluc2lkZSBvZiBidDg3OF9maW5kX2F1ZGlvX2RtYSgpCi0JICogYmVjYXVzZSB3ZSBtYXkgd2FudCB0byBpZ25vcmUgY2VydGFpbiBjYXJkcyAqLwotCWJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZCA9IDE7CisKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYnQ4NzhfcGNpX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGJ0ODc4X2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYnQ4NzhfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlpZiAoYnQ4NzhfcGNpX2RyaXZlcl9yZWdpc3RlcmVkKSB7Ci0JCWJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZCA9IDA7Ci0JCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYnQ4NzhfcGNpX2RyaXZlcik7Ci0JfQotCXJldHVybjsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJ0ODc4X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChidDg3OF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChidDg3OF9jbGVhbnVwX21vZHVsZSk7CiAKLS8vTU9EVUxFX0FVVEhPUigiWFhYIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCmluZGV4IDkxMzUzYTYuLjhiMGNkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCkBAIC0xMzUyLDggKzEzNTIsNyBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAlpZiAoKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX1ZMRikgJiYKLQkJIShzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfQ0FCTEUpICYmCi0JCSEoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX0FUU0MpKSB7CisJICAgIShzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfQVRTQykpIHsKIAogCQlpZiAoc3RhdGUtPnJ4X3R1bmFbOV0gIT0gZHN0X2NoZWNrX3N1bSgmc3RhdGUtPnJ4X3R1bmFbMF0sIDkpKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiY2hlY2tzdW0gZmFpbHVyZSA/ICIpOwpAQCAtMTgyMCw4ICsxODE5LDEzIEBACiAJCS5mcmVxdWVuY3lfbWF4ID0gODU4MDAwMDAwLAogCQkuc3ltYm9sX3JhdGVfbWluID0gMTAwMDAwMCwKIAkJLnN5bWJvbF9yYXRlX21heCA9IDQ1MDAwMDAwLAotCS8qICAgICAuIHN5bWJvbF9yYXRlX3RvbGVyYW5jZQk9CT8/PywqLwotCQkuY2FwcyA9IEZFX0NBTl9GRUNfQVVUTyB8IEZFX0NBTl9RQU1fQVVUTworCQkuY2FwcyA9IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUUFNX0FVVE8gfAorCQkJRkVfQ0FOX1FBTV8xNgl8CisJCQlGRV9DQU5fUUFNXzMyCXwKKwkJCUZFX0NBTl9RQU1fNjQJfAorCQkJRkVfQ0FOX1FBTV8xMjgJfAorCQkJRkVfQ0FOX1FBTV8yNTYKIAl9LAogCiAJLnJlbGVhc2UgPSBkc3RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKaW5kZXggZGUzZWViMC4uNjk1MjM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKQEAgLTgsNiArOCw3IEBACiAJc2VsZWN0IERWQl9TVEI2MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9DWDI0MTE2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TSTIxWFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0RTMzAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBWSURFT19JUgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZSBTRE1DIERNMTEwNSBQQ0kgY2hpcCBsaWtlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKaW5kZXggZjBmNDgzYS4uMzgzY2NhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgInNpMjF4eC5oIgogI2luY2x1ZGUgImN4MjQxMTYuaCIKICNpbmNsdWRlICJ6MDE5NGEuaCIKKyNpbmNsdWRlICJkczMwMDAuaCIKIAogI2RlZmluZSBVTlNFVCAoLTFVKQogCkBAIC0yNjksNyArMjcwLDcgQEAKIAl1MzIJCQlpcl9jb21tYW5kOwogfTsKIAotc3RydWN0IGRtMTEwNWR2YiB7CitzdHJ1Y3QgZG0xMTA1X2RldiB7CiAJLyogcGNpICovCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJdTggX19pb21lbSAqaW9fbWVtOwpAQCAtMzA4LDMxICszMDksNDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCi0jZGVmaW5lIGRtX2lvX21lbShyZWcpCSgodW5zaWduZWQgbG9uZykoJmRtMTEwNWR2Yi0+aW9fbWVtW3JlZ10pKQorI2RlZmluZSBkbV9pb19tZW0ocmVnKQkoKHVuc2lnbmVkIGxvbmcpKCZkZXYtPmlvX21lbVtyZWddKSkKKworI2RlZmluZSBkbV9yZWFkYihyZWcpCQlpbmIoZG1faW9fbWVtKHJlZykpCisjZGVmaW5lIGRtX3dyaXRlYihyZWcsIHZhbHVlKQlvdXRiKCh2YWx1ZSksIChkbV9pb19tZW0ocmVnKSkpCisKKyNkZWZpbmUgZG1fcmVhZHcocmVnKQkJaW53KGRtX2lvX21lbShyZWcpKQorI2RlZmluZSBkbV93cml0ZXcocmVnLCB2YWx1ZSkJb3V0dygodmFsdWUpLCAoZG1faW9fbWVtKHJlZykpKQorCisjZGVmaW5lIGRtX3JlYWRsKHJlZykJCWlubChkbV9pb19tZW0ocmVnKSkKKyNkZWZpbmUgZG1fd3JpdGVsKHJlZywgdmFsdWUpCW91dGwoKHZhbHVlKSwgKGRtX2lvX21lbShyZWcpKSkKKworI2RlZmluZSBkbV9hbmRvcmwocmVnLCBtYXNrLCB2YWx1ZSkgXAorCW91dGwoKGlubChkbV9pb19tZW0ocmVnKSkgJiB+KG1hc2spKSB8XAorCQkoKHZhbHVlKSAmIChtYXNrKSksIChkbV9pb19tZW0ocmVnKSkpCisKKyNkZWZpbmUgZG1fc2V0bChyZWcsIGJpdCkJZG1fYW5kb3JsKChyZWcpLCAoYml0KSwgKGJpdCkpCisjZGVmaW5lIGRtX2NsZWFybChyZWcsIGJpdCkJZG1fYW5kb3JsKChyZWcpLCAoYml0KSwgMCkKIAogc3RhdGljIGludCBkbTExMDVfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKIAkJCSAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgOwogCiAJaW50IGFkZHIsIHJjLCBpLCBqLCBrLCBsZW4sIGJ5dGUsIGRhdGE7CiAJdTggc3RhdHVzOwogCi0JZG0xMTA1ZHZiID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlkZXYgPSBpMmNfYWRhcC0+YWxnb19kYXRhOwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlvdXRiKDB4MDAsIGRtX2lvX21lbShETTExMDVfSTJDQ1RSKSk7CisJCWRtX3dyaXRlYihETTExMDVfSTJDQ1RSLCAweDAwKTsKIAkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewogCQkJLyogcmVhZCBieXRlcyAqLwogCQkJYWRkciAgPSBtc2dzW2ldLmFkZHIgPDwgMTsKIAkJCWFkZHIgfD0gMTsKLQkJCW91dGIoYWRkciwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKKwkJCWRtX3dyaXRlYihETTExMDVfSTJDREFULCBhZGRyKTsKIAkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKQotCQkJCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgYnl0ZSArIDEsIDApOwogCi0JCQlvdXRiKDB4ODEgKyBtc2dzW2ldLmxlbiwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJCWRtX3dyaXRlYihETTExMDVfSTJDQ1RSLCAweDgxICsgbXNnc1tpXS5sZW4pOwogCQkJZm9yIChqID0gMDsgaiA8IDU1OyBqKyspIHsKIAkJCQltZGVsYXkoMTApOwotCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOworCQkJCXN0YXR1cyA9IGRtX3JlYWRiKERNMTEwNV9JMkNTVFMpOwogCQkJCWlmICgoc3RhdHVzICYgMHhjMCkgPT0gMHg0MCkKIAkJCQkJYnJlYWs7CiAJCQl9CkBAIC0zNDAsNTYgKzM1Nyw1NCBAQAogCQkJCXJldHVybiAtMTsKIAogCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IG1zZ3NbaV0ubGVuOyBieXRlKyspIHsKLQkJCQlyYyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKSk7CisJCQkJcmMgPSBkbV9yZWFkYihETTExMDVfSTJDREFUICsgYnl0ZSArIDEpOwogCQkJCWlmIChyYyA8IDApCiAJCQkJCWdvdG8gZXJyOwogCQkJCW1zZ3NbaV0uYnVmW2J5dGVdID0gcmM7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKG1zZ3NbaV0uYnVmWzBdID09IDB4ZjcpICYmIChtc2dzW2ldLmFkZHIgPT0gMHg1NSkpIHsKLQkJCQkvKiBwcmVwYWlyZWQgZm9yIGN4MjQxMTYgZmlybXdhcmUgKi8KLQkJCQkvKiBXcml0ZSBpbiBzbWFsbCBibG9ja3MgKi8KLQkJCQlsZW4gPSBtc2dzW2ldLmxlbiAtIDE7Ci0JCQkJayA9IDE7Ci0JCQkJZG8gewotCQkJCQlvdXRiKG1zZ3NbaV0uYWRkciA8PCAxLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCkpOwotCQkJCQlvdXRiKDB4ZjcsIGRtX2lvX21lbShETTExMDVfSTJDREFUICsgMSkpOwotCQkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgKGxlbiA+IDQ4ID8gNDggOiBsZW4pOyBieXRlKyspIHsKLQkJCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltrK2J5dGVdOwotCQkJCQkJb3V0YihkYXRhLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAyKSk7Ci0JCQkJCX0KLQkJCQkJb3V0YigweDgyICsgKGxlbiA+IDQ4ID8gNDggOiBsZW4pLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0NUUikpOwotCQkJCQlmb3IgKGogPSAwOyBqIDwgMjU7IGorKykgewotCQkJCQkJbWRlbGF5KDEwKTsKLQkJCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOwotCQkJCQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweDQwKQotCQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQkJaWYgKGogPj0gMjUpCi0JCQkJCQlyZXR1cm4gLTE7Ci0KLQkJCQkJayArPSA0ODsKLQkJCQkJbGVuIC09IDQ4OwotCQkJCX0gd2hpbGUgKGxlbiA+IDApOwotCQkJfSBlbHNlIHsKLQkJCQkvKiB3cml0ZSBieXRlcyAqLwotCQkJCW91dGIobXNnc1tpXS5hZGRyPDwxLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCkpOwotCQkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7Ci0JCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltieXRlXTsKLQkJCQkJb3V0YihkYXRhLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKSk7CisJCX0gZWxzZSBpZiAoKG1zZ3NbaV0uYnVmWzBdID09IDB4ZjcpICYmIChtc2dzW2ldLmFkZHIgPT0gMHg1NSkpIHsKKwkJCS8qIHByZXBhaXJlZCBmb3IgY3gyNDExNiBmaXJtd2FyZSAqLworCQkJLyogV3JpdGUgaW4gc21hbGwgYmxvY2tzICovCisJCQlsZW4gPSBtc2dzW2ldLmxlbiAtIDE7CisJCQlrID0gMTsKKwkJCWRvIHsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCwgbXNnc1tpXS5hZGRyIDw8IDEpOworCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgMSwgMHhmNyk7CisJCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IChsZW4gPiA0OCA/IDQ4IDogbGVuKTsgYnl0ZSsrKSB7CisJCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltrICsgYnl0ZV07CisJCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgYnl0ZSArIDIsIGRhdGEpOwogCQkJCX0KLQkJCQlvdXRiKDB4ODEgKyBtc2dzW2ldLmxlbiwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHg4MiArIChsZW4gPiA0OCA/IDQ4IDogbGVuKSk7CiAJCQkJZm9yIChqID0gMDsgaiA8IDI1OyBqKyspIHsKIAkJCQkJbWRlbGF5KDEwKTsKLQkJCQkJc3RhdHVzID0gaW5iKGRtX2lvX21lbShETTExMDVfSTJDU1RTKSk7CisJCQkJCXN0YXR1cyA9IGRtX3JlYWRiKERNMTEwNV9JMkNTVFMpOwogCQkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCQlpZiAoaiA+PSAyNSkKIAkJCQkJcmV0dXJuIC0xOworCisJCQkJayArPSA0ODsKKwkJCQlsZW4gLT0gNDg7CisJCQl9IHdoaWxlIChsZW4gPiAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHdyaXRlIGJ5dGVzICovCisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCwgbXNnc1tpXS5hZGRyIDw8IDEpOworCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IG1zZ3NbaV0ubGVuOyBieXRlKyspIHsKKwkJCQlkYXRhID0gbXNnc1tpXS5idWZbYnl0ZV07CisJCQkJZG1fd3JpdGViKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSwgZGF0YSk7CiAJCQl9CisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHg4MSArIG1zZ3NbaV0ubGVuKTsKKwkJCWZvciAoaiA9IDA7IGogPCAyNTsgaisrKSB7CisJCQkJbWRlbGF5KDEwKTsKKwkJCQlzdGF0dXMgPSBkbV9yZWFkYihETTExMDVfSTJDU1RTKTsKKwkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoaiA+PSAyNSkKKwkJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CiAJcmV0dXJuIG51bTsKQEAgLTQwNywyMiArNDIyLDIyIEBACiAJLmZ1bmN0aW9uYWxpdHkgPSBmdW5jdGlvbmFsaXR5LAogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG0xMTA1ZHZiICpmZWVkX3RvX2RtMTEwNWR2YihzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkbTExMDVfZGV2ICpmZWVkX3RvX2RtMTEwNV9kZXYoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQogewotCXJldHVybiBjb250YWluZXJfb2YoZmVlZC0+ZGVtdXgsIHN0cnVjdCBkbTExMDVkdmIsIGRlbXV4KTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGZlZWQtPmRlbXV4LCBzdHJ1Y3QgZG0xMTA1X2RldiwgZGVtdXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbTExMDVkdmIgKmZyb250ZW5kX3RvX2RtMTEwNWR2YihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtMTEwNV9kZXYgKmZyb250ZW5kX3RvX2RtMTEwNV9kZXYoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihmZS0+ZHZiLCBzdHJ1Y3QgZG0xMTA1ZHZiLCBkdmJfYWRhcHRlcik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZS0+ZHZiLCBzdHJ1Y3QgZG0xMTA1X2RldiwgZHZiX2FkYXB0ZXIpOwogfQogCi1zdGF0aWMgaW50IGRtMTEwNWR2Yl9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQorc3RhdGljIGludCBkbTExMDVfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBmcm9udGVuZF90b19kbTExMDVkdmIoZmUpOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBmcm9udGVuZF90b19kbTExMDVfZGV2KGZlKTsKIAl1MzIgbG5iX21hc2ssIGxuYl8xM3YsIGxuYl8xOHYsIGxuYl9vZmY7CiAKLQlzd2l0Y2ggKGRtMTEwNWR2Yi0+Ym9hcmRucikgeworCXN3aXRjaCAoZGV2LT5ib2FyZG5yKSB7CiAJY2FzZSBETTExMDVfQk9BUkRfQVhFU1NfRE0wNToKIAkJbG5iX21hc2sgPSBETTA1X0xOQl9NQVNLOwogCQlsbmJfb2ZmID0gRE0wNV9MTkJfT0ZGOwpAQCAtNDM4LDYyICs0NTMsNjcgQEAKIAkJbG5iXzE4diA9IERNMTEwNV9MTkJfMThWOwogCX0KIAotCW91dGwobG5iX21hc2ssIGRtX2lvX21lbShETTExMDVfR1BJT0NUUikpOworCWRtX3dyaXRlbChETTExMDVfR1BJT0NUUiwgbG5iX21hc2spOwogCWlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzE4KQotCQlvdXRsKGxuYl8xOHYgLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJZG1fd3JpdGVsKERNMTEwNV9HUElPVkFMLCBsbmJfMTh2KTsKIAllbHNlIGlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzEzKQotCQlvdXRsKGxuYl8xM3YsIGRtX2lvX21lbShETTExMDVfR1BJT1ZBTCkpOworCQlkbV93cml0ZWwoRE0xMTA1X0dQSU9WQUwsIGxuYl8xM3YpOwogCWVsc2UKLQkJb3V0bChsbmJfb2ZmLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJZG1fd3JpdGVsKERNMTEwNV9HUElPVkFMLCBsbmJfb2ZmKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfc2V0X2RtYV9hZGRyKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9zZXRfZG1hX2FkZHIoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlvdXRsKGNwdV90b19sZTMyKGRtMTEwNWR2Yi0+ZG1hX2FkZHIpLCBkbV9pb19tZW0oRE0xMTA1X1NUQURSKSk7CisJZG1fd3JpdGVsKERNMTEwNV9TVEFEUiwgY3B1X3RvX2xlMzIoZGV2LT5kbWFfYWRkcikpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVkdmJfZG1hX21hcChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVfZG1hX21hcChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCWRtMTEwNWR2Yi0+dHNfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZG0xMTA1ZHZiLT5wZGV2LCA2KkRNMTEwNV9ETUFfQllURVMsICZkbTExMDVkdmItPmRtYV9hZGRyKTsKKwlkZXYtPnRzX2J1ZiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGRldiwKKwkJCQkJNiAqIERNMTEwNV9ETUFfQllURVMsCisJCQkJCSZkZXYtPmRtYV9hZGRyKTsKIAotCXJldHVybiAhZG0xMTA1ZHZiLT50c19idWY7CisJcmV0dXJuICFkZXYtPnRzX2J1ZjsKIH0KIAotc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2RtYV91bm1hcChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgdm9pZCBkbTExMDVfZG1hX3VubWFwKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChkbTExMDVkdmItPnBkZXYsIDYqRE0xMTA1X0RNQV9CWVRFUywgZG0xMTA1ZHZiLT50c19idWYsIGRtMTEwNWR2Yi0+ZG1hX2FkZHIpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wZGV2LAorCQkJNiAqIERNMTEwNV9ETUFfQllURVMsCisJCQlkZXYtPnRzX2J1ZiwKKwkJCWRldi0+ZG1hX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfZW5hYmxlX2lycXMoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIHZvaWQgZG0xMTA1X2VuYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0Jb3V0YihJTlRNQUtfQUxMTUFTSywgZG1faW9fbWVtKERNMTEwNV9JTlRNQUspKTsKLQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfQ1IpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lOVE1BSywgSU5UTUFLX0FMTE1BU0spOworCWRtX3dyaXRlYihETTExMDVfQ1IsIDEpOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfZGlzYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9kaXNhYmxlX2lycXMoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlvdXRiKElOVE1BS19JUk0sIGRtX2lvX21lbShETTExMDVfSU5UTUFLKSk7Ci0Jb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0NSKSk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRNQUssIElOVE1BS19JUk0pOworCWRtX3dyaXRlYihETTExMDVfQ1IsIDApOwogfQogCi1zdGF0aWMgaW50IGRtMTEwNWR2Yl9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZikKK3N0YXRpYyBpbnQgZG0xMTA1X3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGZlZWRfdG9fZG0xMTA1ZHZiKGYpOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBmZWVkX3RvX2RtMTEwNV9kZXYoZik7CiAKLQlpZiAoZG0xMTA1ZHZiLT5mdWxsX3RzX3VzZXJzKysgPT0gMCkKLQkJZG0xMTA1ZHZiX2VuYWJsZV9pcnFzKGRtMTEwNWR2Yik7CisJaWYgKGRldi0+ZnVsbF90c191c2VycysrID09IDApCisJCWRtMTEwNV9lbmFibGVfaXJxcyhkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG0xMTA1ZHZiX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmYpCitzdGF0aWMgaW50IGRtMTEwNV9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGZlZWRfdG9fZG0xMTA1ZHZiKGYpOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBmZWVkX3RvX2RtMTEwNV9kZXYoZik7CiAKLQlpZiAoLS1kbTExMDVkdmItPmZ1bGxfdHNfdXNlcnMgPT0gMCkKLQkJZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhkbTExMDVkdmIpOworCWlmICgtLWRldi0+ZnVsbF90c191c2VycyA9PSAwKQorCQlkbTExMDVfZGlzYWJsZV9pcnFzKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNyw2OCArNTM3LDY0IEBACiAvKiB3b3JrIGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIGRtMTEwNV9kbXhfYnVmZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPQotCQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG0xMTA1ZHZiLCB3b3JrKTsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbTExMDVfZGV2LCB3b3JrKTsKIAl1bnNpZ25lZCBpbnQgbmJwYWNrZXRzOwotCXUzMiBvbGR3cnAgPSBkbTExMDVkdmItPndycDsKLQl1MzIgbmV4dHdycCA9IGRtMTEwNWR2Yi0+bmV4dHdycDsKKwl1MzIgb2xkd3JwID0gZGV2LT53cnA7CisJdTMyIG5leHR3cnAgPSBkZXYtPm5leHR3cnA7CiAKLQlpZiAoISgoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSA9PSAweDQ3KSAmJgotCQkJKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycCArIDE4OF0gPT0gMHg0NykgJiYKLQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODggKiAyXSA9PSAweDQ3KSkpIHsKLQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50Kys7CisJaWYgKCEoKGRldi0+dHNfYnVmW29sZHdycF0gPT0gMHg0NykgJiYKKwkJCShkZXYtPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCisJCQkoZGV2LT50c19idWZbb2xkd3JwICsgMTg4ICogMl0gPT0gMHg0NykpKSB7CisJCWRldi0+UGFja2V0RXJyb3JDb3VudCsrOwogCQkvKiBiYWQgcGFja2V0IGZvdW5kICovCi0JCWlmICgoZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID49IDIpICYmCi0JCQkJKGRtMTEwNWR2Yi0+ZG1hcnN0ID09IDApKSB7Ci0JCQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfUlNUKSk7Ci0JCQlkbTExMDVkdmItPndycCA9IDA7Ci0JCQlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPSAwOwotCQkJZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOworCQlpZiAoKGRldi0+UGFja2V0RXJyb3JDb3VudCA+PSAyKSAmJgorCQkJCShkZXYtPmRtYXJzdCA9PSAwKSkgeworCQkJZG1fd3JpdGViKERNMTEwNV9SU1QsIDEpOworCQkJZGV2LT53cnAgPSAwOworCQkJZGV2LT5QYWNrZXRFcnJvckNvdW50ID0gMDsKKwkJCWRldi0+ZG1hcnN0ID0gMDsKIAkJCXJldHVybjsKIAkJfQogCX0KIAogCWlmIChuZXh0d3JwIDwgb2xkd3JwKSB7Ci0JCW1lbWNweShkbTExMDVkdmItPnRzX2J1ZiArIGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUsCi0JCQkJCQlkbTExMDVkdmItPnRzX2J1ZiwgbmV4dHdycCk7Ci0JCW5icGFja2V0cyA9ICgoZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSAtIG9sZHdycCkgKyBuZXh0d3JwKSAvIDE4ODsKKwkJbWVtY3B5KGRldi0+dHNfYnVmICsgZGV2LT5idWZmZXJfc2l6ZSwgZGV2LT50c19idWYsIG5leHR3cnApOworCQluYnBhY2tldHMgPSAoKGRldi0+YnVmZmVyX3NpemUgLSBvbGR3cnApICsgbmV4dHdycCkgLyAxODg7CiAJfSBlbHNlCiAJCW5icGFja2V0cyA9IChuZXh0d3JwIC0gb2xkd3JwKSAvIDE4ODsKIAotCWRtMTEwNWR2Yi0+d3JwID0gbmV4dHdycDsKLQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRtMTEwNWR2Yi0+ZGVtdXgsCi0JCQkJCSZkbTExMDVkdmItPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOworCWRldi0+d3JwID0gbmV4dHdycDsKKwlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRldi0+ZGVtdXgsICZkZXYtPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG0xMTA1ZHZiX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgZG0xMTA1X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZGV2X2lkOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBkZXZfaWQ7CiAKIAkvKiBSZWFkLVdyaXRlIElOU1RTIEFjaydzIEludGVycnVwdCBmb3IgRE0xMTA1IGNoaXAgMTYuMDMuMjAwOCAqLwotCXVuc2lnbmVkIGludCBpbnRzdHMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JTlRTVFMpKTsKLQlvdXRiKGludHN0cywgZG1faW9fbWVtKERNMTEwNV9JTlRTVFMpKTsKKwl1bnNpZ25lZCBpbnQgaW50c3RzID0gZG1fcmVhZGIoRE0xMTA1X0lOVFNUUyk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRTVFMsIGludHN0cyk7CiAKIAlzd2l0Y2ggKGludHN0cykgewogCWNhc2UgSU5UU1RTX1RTSVJROgogCWNhc2UgKElOVFNUU19UU0lSUSB8IElOVFNUU19JUik6Ci0JCWRtMTEwNWR2Yi0+bmV4dHdycCA9IGlubChkbV9pb19tZW0oRE0xMTA1X1dSUCkpIC0KLQkJCQkJaW5sKGRtX2lvX21lbShETTExMDVfU1RBRFIpKTsKLQkJcXVldWVfd29yayhkbTExMDVkdmItPndxLCAmZG0xMTA1ZHZiLT53b3JrKTsKKwkJZGV2LT5uZXh0d3JwID0gZG1fcmVhZGwoRE0xMTA1X1dSUCkgLSBkbV9yZWFkbChETTExMDVfU1RBRFIpOworCQlxdWV1ZV93b3JrKGRldi0+d3EsICZkZXYtPndvcmspOwogCQlicmVhazsKIAljYXNlIElOVFNUU19JUjoKLQkJZG0xMTA1ZHZiLT5pci5pcl9jb21tYW5kID0gaW5sKGRtX2lvX21lbShETTExMDVfSVJDT0RFKSk7Ci0JCXNjaGVkdWxlX3dvcmsoJmRtMTEwNWR2Yi0+aXIud29yayk7CisJCWRldi0+aXIuaXJfY29tbWFuZCA9IGRtX3JlYWRsKERNMTEwNV9JUkNPREUpOworCQlzY2hlZHVsZV93b3JrKCZkZXYtPmlyLndvcmspOwogCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWludCBfX2RldmluaXQgZG0xMTA1X2lyX2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQoraW50IF9fZGV2aW5pdCBkbTExMDVfaXJfaW5pdChzdHJ1Y3QgZG0xMTA1X2RldiAqZG0xMTA1KQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gJmlyX2NvZGVzX2RtMTEwNV9uZWNfdGFibGU7Ci0JaW50IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCXU2NCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwpAQCAtNjExLDUxICs2MjcsNTEgQEAKIAogCUlOSVRfV09SSygmZG0xMTA1LT5pci53b3JrLCBkbTExMDVfZW1pdF9rZXkpOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2Rlcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2RlcywgTlVMTCk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIF9fZGV2ZXhpdCBkbTExMDVfaXJfZXhpdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDUpCit2b2lkIF9fZGV2ZXhpdCBkbTExMDVfaXJfZXhpdChzdHJ1Y3QgZG0xMTA1X2RldiAqZG0xMTA1KQogewogCWlyX2lucHV0X3VucmVnaXN0ZXIoZG0xMTA1LT5pci5pbnB1dF9kZXYpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVkdmJfaHdfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVfaHdfaW5pdChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCWRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZGlzYWJsZV9pcnFzKGRldik7CiAKLQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSE9TVF9DVFIpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0hPU1RfQ1RSLCAwKTsKIAogCS8qREFUQUxFTiAxODgsKi8KLQlvdXRiKDE4OCwgZG1faW9fbWVtKERNMTEwNV9EVEFMRU5USCkpOworCWRtX3dyaXRlYihETTExMDVfRFRBTEVOVEgsIDE4OCk7CiAJLypUU19TVFJUIFRTX1ZBTFAgTVNCRklSU1QgVFNfTU9ERSBBTFBBUyBUU1BFUyovCi0Jb3V0dygweGMxMGEsIGRtX2lvX21lbShETTExMDVfVFNDVFIpKTsKKwlkbV93cml0ZXcoRE0xMTA1X1RTQ1RSLCAweGMxMGEpOwogCiAJLyogbWFwIERNQSBhbmQgc2V0IGFkZHJlc3MgKi8KLQlkbTExMDVkdmJfZG1hX21hcChkbTExMDVkdmIpOwotCWRtMTEwNWR2Yl9zZXRfZG1hX2FkZHIoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZG1hX21hcChkZXYpOworCWRtMTEwNV9zZXRfZG1hX2FkZHIoZGV2KTsKIAkvKiBiaWcgYnVmZmVyICovCi0Jb3V0bCg1KkRNMTEwNV9ETUFfQllURVMsIGRtX2lvX21lbShETTExMDVfUkxFTikpOwotCW91dGIoNDcsIGRtX2lvX21lbShETTExMDVfSU5UQ05UKSk7CisJZG1fd3JpdGVsKERNMTEwNV9STEVOLCA1ICogRE0xMTA1X0RNQV9CWVRFUyk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRDTlQsIDQ3KTsKIAogCS8qIElSIE5FQyBtb2RlIGVuYWJsZSAqLwotCW91dGIoKERNMTEwNV9JUl9FTiB8IERNMTEwNV9TWVNfQ0hLKSwgZG1faW9fbWVtKERNMTEwNV9JUkNUUikpOwotCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9JUk1PREUpKTsKLQlvdXR3KDAsIGRtX2lvX21lbShETTExMDVfU1lTVEVNQ09ERSkpOworCWRtX3dyaXRlYihETTExMDVfSVJDVFIsIChETTExMDVfSVJfRU4gfCBETTExMDVfU1lTX0NISykpOworCWRtX3dyaXRlYihETTExMDVfSVJNT0RFLCAwKTsKKwlkbV93cml0ZXcoRE0xMTA1X1NZU1RFTUNPREUsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRtMTEwNWR2Yl9od19leGl0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9od19leGl0KHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0JZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhkbTExMDVkdmIpOworCWRtMTEwNV9kaXNhYmxlX2lycXMoZGV2KTsKIAogCS8qIElSIGRpc2FibGUgKi8KLQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSVJDVFIpKTsKLQlvdXRiKElOVE1BS19OT05FTUFTSywgZG1faW9fbWVtKERNMTEwNV9JTlRNQUspKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lSQ1RSLCAwKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lOVE1BSywgSU5UTUFLX05PTkVNQVNLKTsKIAotCWRtMTEwNWR2Yl9kbWFfdW5tYXAoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZG1hX3VubWFwKGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgc2hhcnBfejAxOTRhX2NvbmZpZyA9IHsKQEAgLTY4NSw3MCArNzAxLDc5IEBACiAJLmRlbW9kX2FkZHJlc3MgPSAweDU1LAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgc3RydWN0IGRzMzAwMF9jb25maWcgZHZid29ybGRfZHMzMDAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmcm9udGVuZF9pbml0KHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7CiAJaW50IHJldDsKIAotCXN3aXRjaCAoZG0xMTA1ZHZiLT5ib2FyZG5yKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkbnIpIHsKIAljYXNlIERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDA0OgotCQlkbTExMDVkdmItPmZlID0gZHZiX2F0dGFjaCgKKwkJZGV2LT5mZSA9IGR2Yl9hdHRhY2goCiAJCQljeDI0MTE2X2F0dGFjaCwgJnNlcml0X3NwMjYzM19jb25maWcsCi0JCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7Ci0JCWlmIChkbTExMDVkdmItPmZlKQotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1ZHZiX3NldF92b2x0YWdlOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkgeworCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOworCQkJYnJlYWs7CisJCX0KKworCQlkZXYtPmZlID0gZHZiX2F0dGFjaCgKKwkJCWRzMzAwMF9hdHRhY2gsICZkdmJ3b3JsZF9kczMwMDBfY29uZmlnLAorCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKIAogCQlicmVhazsKIAljYXNlIERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDAyOgogCWNhc2UgRE0xMTA1X0JPQVJEX0FYRVNTX0RNMDU6CiAJZGVmYXVsdDoKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJc3R2MDI5OV9hdHRhY2gsICZzaGFycF96MDE5NGFfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkgewotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0KLQkJCQkJCQlkbTExMDVkdmJfc2V0X3ZvbHRhZ2U7Ci0JCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkbTExMDVkdmItPmZlLCAweDYwLAotCQkJCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgRFZCX1BMTF9PUEVSQTEpOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkgeworCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOworCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5mZSwgMHg2MCwKKwkJCQkJJmRldi0+aTJjX2FkYXAsIERWQl9QTExfT1BFUkExKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJc3R2MDI4OF9hdHRhY2gsICZlYXJkYV9jb25maWcsCi0JCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7Ci0JCWlmIChkbTExMDVkdmItPmZlKSB7Ci0JCQlkbTExMDVkdmItPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPQotCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOwotCQkJZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgZG0xMTA1ZHZiLT5mZSwgMHg2MSwKLQkJCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkgeworCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOworCQkJZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgZGV2LT5mZSwgMHg2MSwKKwkJCQkJJmRldi0+aTJjX2FkYXApOwogCQkJYnJlYWs7CiAJCX0KIAotCQlkbTExMDVkdmItPmZlID0gZHZiX2F0dGFjaCgKKwkJZGV2LT5mZSA9IGR2Yl9hdHRhY2goCiAJCQlzaTIxeHhfYXR0YWNoLCAmc2VyaXRfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkKLQkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9Ci0JCQkJCQlkbTExMDVkdmJfc2V0X3ZvbHRhZ2U7CisJCQkmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkZXYtPmZlKQorCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOwogCiAJfQogCi0JaWYgKCFkbTExMDVkdmItPmZlKSB7Ci0JCWRldl9lcnIoJmRtMTEwNWR2Yi0+cGRldi0+ZGV2LCAiY291bGQgbm90IGF0dGFjaCBmcm9udGVuZFxuIik7CisJaWYgKCFkZXYtPmZlKSB7CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiY291bGQgbm90IGF0dGFjaCBmcm9udGVuZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJldCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlciwgZG0xMTA1ZHZiLT5mZSk7CisJcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZkZXYtPmR2Yl9hZGFwdGVyLCBkZXYtPmZlKTsKIAlpZiAocmV0IDwgMCkgewotCQlpZiAoZG0xMTA1ZHZiLT5mZS0+b3BzLnJlbGVhc2UpCi0JCQlkbTExMDVkdmItPmZlLT5vcHMucmVsZWFzZShkbTExMDVkdmItPmZlKTsKLQkJZG0xMTA1ZHZiLT5mZSA9IE5VTEw7CisJCWlmIChkZXYtPmZlLT5vcHMucmVsZWFzZSkKKwkJCWRldi0+ZmUtPm9wcy5yZWxlYXNlKGRldi0+ZmUpOworCQlkZXYtPmZlID0gTlVMTDsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGRtMTEwNWR2Yl9yZWFkX21hYyhzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIsIHU4ICptYWMpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZG0xMTA1X3JlYWRfbWFjKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYsIHU4ICptYWMpCiB7CiAJc3RhdGljIHU4IGNvbW1hbmRbMV0gPSB7IDB4MjggfTsKIApAQCAtNzY2LDQ3ICs3OTEsNDcgQEAKIAkJfSwKIAl9OwogCi0JZG0xMTA1X2kyY194ZmVyKCZkbTExMDVkdmItPmkyY19hZGFwLCBtc2cgLCAyKTsKLQlkZXZfaW5mbygmZG0xMTA1ZHZiLT5wZGV2LT5kZXYsICJNQUMgJXBNXG4iLCBtYWMpOworCWRtMTEwNV9pMmNfeGZlcigmZGV2LT5pMmNfYWRhcCwgbXNnICwgMik7CisJZGV2X2luZm8oJmRldi0+cGRldi0+ZGV2LCAiTUFDICVwTVxuIiwgbWFjKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmI7CisJc3RydWN0IGRtMTEwNV9kZXYgKmRldjsKIAlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyOwogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4OwogCXN0cnVjdCBkbXhfZGVtdXggKmRteDsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgaTsKIAotCWRtMTEwNWR2YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbTExMDVkdmIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRtMTEwNWR2YikKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG0xMTA1X2RldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGJvYXJkIGNvbmZpZyAqLwotCWRtMTEwNWR2Yi0+bnIgPSBkbTExMDVfZGV2Y291bnQ7Ci0JZG0xMTA1ZHZiLT5ib2FyZG5yID0gVU5TRVQ7Ci0JaWYgKGNhcmRbZG0xMTA1ZHZiLT5ucl0gPCBBUlJBWV9TSVpFKGRtMTEwNV9ib2FyZHMpKQotCQlkbTExMDVkdmItPmJvYXJkbnIgPSBjYXJkW2RtMTEwNWR2Yi0+bnJdOwotCWZvciAoaSA9IDA7IFVOU0VUID09IGRtMTEwNWR2Yi0+Ym9hcmRuciAmJgorCWRldi0+bnIgPSBkbTExMDVfZGV2Y291bnQ7CisJZGV2LT5ib2FyZG5yID0gVU5TRVQ7CisJaWYgKGNhcmRbZGV2LT5ucl0gPCBBUlJBWV9TSVpFKGRtMTEwNV9ib2FyZHMpKQorCQlkZXYtPmJvYXJkbnIgPSBjYXJkW2Rldi0+bnJdOworCWZvciAoaSA9IDA7IFVOU0VUID09IGRldi0+Ym9hcmRuciAmJgogCQkJCWkgPCBBUlJBWV9TSVpFKGRtMTEwNV9zdWJpZHMpOyBpKyspCiAJCWlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09CiAJCQlkbTExMDVfc3ViaWRzW2ldLnN1YnZlbmRvciAmJgogCQkJCXBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0KIAkJCQkJZG0xMTA1X3N1Ymlkc1tpXS5zdWJkZXZpY2UpCi0JCQlkbTExMDVkdmItPmJvYXJkbnIgPSBkbTExMDVfc3ViaWRzW2ldLmNhcmQ7CisJCQlkZXYtPmJvYXJkbnIgPSBkbTExMDVfc3ViaWRzW2ldLmNhcmQ7CiAKLQlpZiAoVU5TRVQgPT0gZG0xMTA1ZHZiLT5ib2FyZG5yKSB7Ci0JCWRtMTEwNWR2Yi0+Ym9hcmRuciA9IERNMTEwNV9CT0FSRF9VTktOT1dOOworCWlmIChVTlNFVCA9PSBkZXYtPmJvYXJkbnIpIHsKKwkJZGV2LT5ib2FyZG5yID0gRE0xMTA1X0JPQVJEX1VOS05PV047CiAJCWRtMTEwNV9jYXJkX2xpc3QocGRldik7CiAJfQogCiAJZG0xMTA1X2RldmNvdW50Kys7Ci0JZG0xMTA1ZHZiLT5wZGV2ID0gcGRldjsKLQlkbTExMDVkdmItPmJ1ZmZlcl9zaXplID0gNSAqIERNMTEwNV9ETUFfQllURVM7Ci0JZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID0gMDsKLQlkbTExMDVkdmItPmRtYXJzdCA9IDA7CisJZGV2LT5wZGV2ID0gcGRldjsKKwlkZXYtPmJ1ZmZlcl9zaXplID0gNSAqIERNMTEwNV9ETUFfQllURVM7CisJZGV2LT5QYWNrZXRFcnJvckNvdW50ID0gMDsKKwlkZXYtPmRtYXJzdCA9IDA7CiAKIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmV0IDwgMCkKQEAgLTgyMiw0NyArODQ3LDQ3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3BjaV9kaXNhYmxlX2RldmljZTsKIAotCWRtMTEwNWR2Yi0+aW9fbWVtID0gcGNpX2lvbWFwKHBkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwotCWlmICghZG0xMTA1ZHZiLT5pb19tZW0pIHsKKwlkZXYtPmlvX21lbSA9IHBjaV9pb21hcChwZGV2LCAwLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAoIWRldi0+aW9fbWVtKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJmRtMTEwNWR2Yi0+bG9jayk7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRtMTEwNWR2Yik7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKLQlyZXQgPSBkbTExMDVkdmJfaHdfaW5pdChkbTExMDVkdmIpOworCXJldCA9IGRtMTEwNV9od19pbml0KGRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3BjaV9pb3VubWFwOwogCiAJLyogaTJjICovCi0JaTJjX3NldF9hZGFwZGF0YSgmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgZG0xMTA1ZHZiKTsKLQlzdHJjcHkoZG0xMTA1ZHZiLT5pMmNfYWRhcC5uYW1lLCBEUklWRVJfTkFNRSk7Ci0JZG0xMTA1ZHZiLT5pMmNfYWRhcC5vd25lciA9IFRISVNfTU9EVUxFOwotCWRtMTEwNWR2Yi0+aTJjX2FkYXAuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKLQlkbTExMDVkdmItPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCWRtMTEwNWR2Yi0+aTJjX2FkYXAuYWxnbyA9ICZkbTExMDVfYWxnbzsKLQlkbTExMDVkdmItPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRtMTEwNWR2YjsKLQlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCWkyY19zZXRfYWRhcGRhdGEoJmRldi0+aTJjX2FkYXAsIGRldik7CisJc3RyY3B5KGRldi0+aTJjX2FkYXAubmFtZSwgRFJJVkVSX05BTUUpOworCWRldi0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKKwlkZXYtPmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CisJZGV2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlkZXYtPmkyY19hZGFwLmFsZ28gPSAmZG0xMTA1X2FsZ287CisJZGV2LT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBkZXY7CisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKIAogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9kbTExMDVkdmJfaHdfZXhpdDsKKwkJZ290byBlcnJfZG0xMTA1X2h3X2V4aXQ7CiAKIAkvKiBkdmIgKi8KLQlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlciwgRFJJVkVSX05BTUUsCisJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmRldi0+ZHZiX2FkYXB0ZXIsIERSSVZFUl9OQU1FLAogCQkJCQlUSElTX01PRFVMRSwgJnBkZXYtPmRldiwgYWRhcHRlcl9ucik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2kyY19kZWxfYWRhcHRlcjsKIAotCWR2Yl9hZGFwdGVyID0gJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXI7CisJZHZiX2FkYXB0ZXIgPSAmZGV2LT5kdmJfYWRhcHRlcjsKIAotCWRtMTEwNWR2Yl9yZWFkX21hYyhkbTExMDVkdmIsIGR2Yl9hZGFwdGVyLT5wcm9wb3NlZF9tYWMpOworCWRtMTEwNV9yZWFkX21hYyhkZXYsIGR2Yl9hZGFwdGVyLT5wcm9wb3NlZF9tYWMpOwogCi0JZHZiZGVtdXggPSAmZG0xMTA1ZHZiLT5kZW11eDsKKwlkdmJkZW11eCA9ICZkZXYtPmRlbXV4OwogCWR2YmRlbXV4LT5maWx0ZXJudW0gPSAyNTY7CiAJZHZiZGVtdXgtPmZlZWRudW0gPSAyNTY7Ci0JZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBkbTExMDVkdmJfc3RhcnRfZmVlZDsKLQlkdmJkZW11eC0+c3RvcF9mZWVkID0gZG0xMTA1ZHZiX3N0b3BfZmVlZDsKKwlkdmJkZW11eC0+c3RhcnRfZmVlZCA9IGRtMTEwNV9zdGFydF9mZWVkOworCWR2YmRlbXV4LT5zdG9wX2ZlZWQgPSBkbTExMDVfc3RvcF9mZWVkOwogCWR2YmRlbXV4LT5kbXguY2FwYWJpbGl0aWVzID0gKERNWF9UU19GSUxURVJJTkcgfAogCQkJRE1YX1NFQ1RJT05fRklMVEVSSU5HIHwgRE1YX01FTU9SWV9CQVNFRF9GSUxURVJJTkcpOwogCXJldCA9IGR2Yl9kbXhfaW5pdChkdmJkZW11eCk7CkBAIC04NzAsMTEzICs4OTUsMTEzIEBACiAJCWdvdG8gZXJyX2R2Yl91bnJlZ2lzdGVyX2FkYXB0ZXI7CiAKIAlkbXggPSAmZHZiZGVtdXgtPmRteDsKLQlkbTExMDVkdmItPmRteGRldi5maWx0ZXJudW0gPSAyNTY7Ci0JZG0xMTA1ZHZiLT5kbXhkZXYuZGVtdXggPSBkbXg7Ci0JZG0xMTA1ZHZiLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKKwlkZXYtPmRteGRldi5maWx0ZXJudW0gPSAyNTY7CisJZGV2LT5kbXhkZXYuZGVtdXggPSBkbXg7CisJZGV2LT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKIAotCXJldCA9IGR2Yl9kbXhkZXZfaW5pdCgmZG0xMTA1ZHZiLT5kbXhkZXYsIGR2Yl9hZGFwdGVyKTsKKwlyZXQgPSBkdmJfZG14ZGV2X2luaXQoJmRldi0+ZG14ZGV2LCBkdmJfYWRhcHRlcik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2R2Yl9kbXhfcmVsZWFzZTsKIAotCWRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQuc291cmNlID0gRE1YX0ZST05URU5EXzA7CisJZGV2LT5od19mcm9udGVuZC5zb3VyY2UgPSBETVhfRlJPTlRFTkRfMDsKIAotCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJmRldi0+aHdfZnJvbnRlbmQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9kdmJfZG14ZGV2X3JlbGVhc2U7CiAKLQlkbTExMDVkdmItPm1lbV9mcm9udGVuZC5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOworCWRldi0+bWVtX2Zyb250ZW5kLnNvdXJjZSA9IERNWF9NRU1PUllfRkU7CiAKLQlyZXQgPSBkbXgtPmFkZF9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPm1lbV9mcm9udGVuZCk7CisJcmV0ID0gZG14LT5hZGRfZnJvbnRlbmQoZG14LCAmZGV2LT5tZW1fZnJvbnRlbmQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9yZW1vdmVfaHdfZnJvbnRlbmQ7CiAKLQlyZXQgPSBkbXgtPmNvbm5lY3RfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5od19mcm9udGVuZCk7CisJcmV0ID0gZG14LT5jb25uZWN0X2Zyb250ZW5kKGRteCwgJmRldi0+aHdfZnJvbnRlbmQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9yZW1vdmVfbWVtX2Zyb250ZW5kOwogCi0JcmV0ID0gZnJvbnRlbmRfaW5pdChkbTExMDVkdmIpOworCXJldCA9IGZyb250ZW5kX2luaXQoZGV2KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfZGlzY29ubmVjdF9mcm9udGVuZDsKIAotCWR2Yl9uZXRfaW5pdChkdmJfYWRhcHRlciwgJmRtMTEwNWR2Yi0+ZHZibmV0LCBkbXgpOwotCWRtMTEwNV9pcl9pbml0KGRtMTEwNWR2Yik7CisJZHZiX25ldF9pbml0KGR2Yl9hZGFwdGVyLCAmZGV2LT5kdmJuZXQsIGRteCk7CisJZG0xMTA1X2lyX2luaXQoZGV2KTsKIAotCUlOSVRfV09SSygmZG0xMTA1ZHZiLT53b3JrLCBkbTExMDVfZG14X2J1ZmZlcik7Ci0Jc3ByaW50ZihkbTExMDVkdmItPndxbiwgIiVzLyVkIiwgZHZiX2FkYXB0ZXItPm5hbWUsIGR2Yl9hZGFwdGVyLT5udW0pOwotCWRtMTEwNWR2Yi0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkbTExMDVkdmItPndxbik7Ci0JaWYgKCFkbTExMDVkdmItPndxKQorCUlOSVRfV09SSygmZGV2LT53b3JrLCBkbTExMDVfZG14X2J1ZmZlcik7CisJc3ByaW50ZihkZXYtPndxbiwgIiVzLyVkIiwgZHZiX2FkYXB0ZXItPm5hbWUsIGR2Yl9hZGFwdGVyLT5udW0pOworCWRldi0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXYtPndxbik7CisJaWYgKCFkZXYtPndxKQogCQlnb3RvIGVycl9kdmJfbmV0OwogCi0JcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBkbTExMDVkdmJfaXJxLCBJUlFGX1NIQVJFRCwKLQkJCQkJCURSSVZFUl9OQU1FLCBkbTExMDVkdmIpOworCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG0xMTA1X2lycSwgSVJRRl9TSEFSRUQsCisJCQkJCQlEUklWRVJfTkFNRSwgZGV2KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfd29ya3F1ZXVlOwogCiAJcmV0dXJuIDA7CiAKIGVycl93b3JrcXVldWU6Ci0JZGVzdHJveV93b3JrcXVldWUoZG0xMTA1ZHZiLT53cSk7CisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53cSk7CiBlcnJfZHZiX25ldDoKLQlkdmJfbmV0X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZHZibmV0KTsKKwlkdmJfbmV0X3JlbGVhc2UoJmRldi0+ZHZibmV0KTsKIGVycl9kaXNjb25uZWN0X2Zyb250ZW5kOgogCWRteC0+ZGlzY29ubmVjdF9mcm9udGVuZChkbXgpOwogZXJyX3JlbW92ZV9tZW1fZnJvbnRlbmQ6Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRldi0+bWVtX2Zyb250ZW5kKTsKIGVycl9yZW1vdmVfaHdfZnJvbnRlbmQ6Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5od19mcm9udGVuZCk7CisJZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZGV2LT5od19mcm9udGVuZCk7CiBlcnJfZHZiX2RteGRldl9yZWxlYXNlOgotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZG0xMTA1ZHZiLT5kbXhkZXYpOworCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZGV2LT5kbXhkZXYpOwogZXJyX2R2Yl9kbXhfcmVsZWFzZToKIAlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOwogZXJyX2R2Yl91bnJlZ2lzdGVyX2FkYXB0ZXI6CiAJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcihkdmJfYWRhcHRlcik7CiBlcnJfaTJjX2RlbF9hZGFwdGVyOgotCWkyY19kZWxfYWRhcHRlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7Ci1lcnJfZG0xMTA1ZHZiX2h3X2V4aXQ6Ci0JZG0xMTA1ZHZiX2h3X2V4aXQoZG0xMTA1ZHZiKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOworZXJyX2RtMTEwNV9od19leGl0OgorCWRtMTEwNV9od19leGl0KGRldik7CiBlcnJfcGNpX2lvdW5tYXA6Ci0JcGNpX2lvdW5tYXAocGRldiwgZG0xMTA1ZHZiLT5pb19tZW0pOworCXBjaV9pb3VubWFwKHBkZXYsIGRldi0+aW9fbWVtKTsKIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIGVycl9rZnJlZToKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0Ja2ZyZWUoZG0xMTA1ZHZiKTsKKwlrZnJlZShkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkbTExMDVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyID0gJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXI7Ci0Jc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAmZG0xMTA1ZHZiLT5kZW11eDsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIgPSAmZGV2LT5kdmJfYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9ICZkZXYtPmRlbXV4OwogCXN0cnVjdCBkbXhfZGVtdXggKmRteCA9ICZkdmJkZW11eC0+ZG14OwogCi0JZG0xMTA1X2lyX2V4aXQoZG0xMTA1ZHZiKTsKKwlkbTExMDVfaXJfZXhpdChkZXYpOwogCWRteC0+Y2xvc2UoZG14KTsKLQlkdmJfbmV0X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZHZibmV0KTsKLQlpZiAoZG0xMTA1ZHZiLT5mZSkKLQkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZG0xMTA1ZHZiLT5mZSk7CisJZHZiX25ldF9yZWxlYXNlKCZkZXYtPmR2Ym5ldCk7CisJaWYgKGRldi0+ZmUpCisJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGRldi0+ZmUpOwogCiAJZG14LT5kaXNjb25uZWN0X2Zyb250ZW5kKGRteCk7Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQpOwotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOwotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZG0xMTA1ZHZiLT5kbXhkZXYpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRldi0+bWVtX2Zyb250ZW5kKTsKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkZXYtPmh3X2Zyb250ZW5kKTsKKwlkdmJfZG14ZGV2X3JlbGVhc2UoJmRldi0+ZG14ZGV2KTsKIAlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOwogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXB0ZXIpOwotCWlmICgmZG0xMTA1ZHZiLT5pMmNfYWRhcCkKLQkJaTJjX2RlbF9hZGFwdGVyKCZkbTExMDVkdmItPmkyY19hZGFwKTsKKwlpZiAoJmRldi0+aTJjX2FkYXApCisJCWkyY19kZWxfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CiAKLQlkbTExMDVkdmJfaHdfZXhpdChkbTExMDVkdmIpOworCWRtMTEwNV9od19leGl0KGRldik7CiAJc3luY2hyb25pemVfaXJxKHBkZXYtPmlycSk7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkbTExMDVkdmIpOwotCXBjaV9pb3VubWFwKHBkZXYsIGRtMTEwNWR2Yi0+aW9fbWVtKTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJcGNpX2lvdW5tYXAocGRldiwgZGV2LT5pb19tZW0pOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlkbTExMDVfZGV2Y291bnQtLTsKLQlrZnJlZShkbTExMDVkdmIpOworCWtmcmVlKGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkbTExMDVfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCAwNzQ2MTIyLi41NWVhMjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtMTE5OSw4ICsxMTk5LDYgQEAKIHsKIAlpbnQgciA9IDA7CiAKLQlkdHZfcHJvcGVydHlfZHVtcCh0dnApOwotCiAJLyogQWxsb3cgdGhlIGZyb250ZW5kIHRvIHZhbGlkYXRlIGluY29taW5nIHByb3BlcnRpZXMgKi8KIAlpZiAoZmUtPm9wcy5nZXRfcHJvcGVydHkpCiAJCXIgPSBmZS0+b3BzLmdldF9wcm9wZXJ0eShmZSwgdHZwKTsKQEAgLTEzMjMsNiArMTMyMSw4IEBACiAJCXIgPSAtMTsKIAl9CiAKKwlkdHZfcHJvcGVydHlfZHVtcCh0dnApOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKIAlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CiAKLQlkcHJpbnRrICgiJXNcbiIsIF9fZnVuY19fKTsKKwlkcHJpbnRrKCIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgX0lPQ19OUihjbWQpKTsKIAogCWlmIChmZXByaXYtPmV4aXQpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTUzNiw4ICsxNTM2LDcgQEAKIAkJaWYgKCh0dnBzLT5udW0gPT0gMCkgfHwgKHR2cHMtPm51bSA+IERUVl9JT0NUTF9NQVhfTVNHUykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQl0dnAgPSAoc3RydWN0IGR0dl9wcm9wZXJ0eSAqKSBrbWFsbG9jKHR2cHMtPm51bSAqCi0JCQlzaXplb2Yoc3RydWN0IGR0dl9wcm9wZXJ0eSksIEdGUF9LRVJORUwpOworCQl0dnAgPSBrbWFsbG9jKHR2cHMtPm51bSAqIHNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdHZwKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CkBAIC0xNTY5LDggKzE1NjgsNyBAQAogCQlpZiAoKHR2cHMtPm51bSA9PSAwKSB8fCAodHZwcy0+bnVtID4gRFRWX0lPQ1RMX01BWF9NU0dTKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXR2cCA9IChzdHJ1Y3QgZHR2X3Byb3BlcnR5ICopIGttYWxsb2ModHZwcy0+bnVtICoKLQkJCXNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CisJCXR2cCA9IGttYWxsb2ModHZwcy0+bnVtICogc2l6ZW9mKHN0cnVjdCBkdHZfcHJvcGVydHkpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0dnApIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwppbmRleCA4Yjg1NThmLi5iMTE1MzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCkBAIC01MDQsNiArNTA0LDcgQEAKIAkJCQkgICAgICAgImJ5dGVzIGxlZnQgaW4gVFMuICBSZXN5bmNpbmcuXG4iLCB0c19yZW1haW4pOwogCQkJCXByaXYtPnVsZV9zbmR1X2xlbiA9IDA7CiAJCQkJcHJpdi0+bmVlZF9wdXNpID0gMTsKKwkJCQl0cyArPSBUU19TWjsKIAkJCQljb250aW51ZTsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmMKaW5kZXggNTg0YmJkMS4uYTU3MTJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jCkBAIC04OSw2ICs4OSw3IEBACiAJcmJ1Zi0+cHJlYWQgPSByYnVmLT5wd3JpdGU7CiAJcmJ1Zi0+ZXJyb3IgPSAwOwogfQorRVhQT1JUX1NZTUJPTChkdmJfcmluZ2J1ZmZlcl9mbHVzaCk7CiAKIHZvaWQgZHZiX3JpbmdidWZmZXJfcmVzZXQoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpyYnVmKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDQ2NTI5NWIuLmU1ZjkxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTMzNiwzICszMzYsMTEgQEAKIAlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgRTNDIEVDMTY4IERWQi1UIFVTQjIuMCByZWNlaXZlci4KKworY29uZmlnIERWQl9VU0JfQVo2MDI3CisJdHJpc3RhdGUgIkF6dXJld2F2ZSBEVkItUy9TMiBVU0IyLjAgQVo2MDI3IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9TVEIwODk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVEI2MTAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBWjYwMjcgZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQppbmRleCA3MmM5MmNiLi4xYTE5MjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKQEAgLTg1LDYgKzg1LDkgQEAKIGR2Yi11c2ItZWMxNjgtb2JqcyA9IGVjMTY4Lm8KIG9iai0kKENPTkZJR19EVkJfVVNCX0VDMTY4KSArPSBkdmItdXNiLWVjMTY4Lm8KIAorZHZiLXVzYi1hejYwMjctb2JqcyA9IGF6NjAyNy5vCitvYmotJChDT05GSUdfRFZCX1VTQl9BWjYwMjcpICs9IGR2Yi11c2ItYXo2MDI3Lm8KKwogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvIC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzLwogIyBkdWUgdG8gdHVuZXIteGMzMDI4CiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCmluZGV4IDhiNjBhNjAuLmQ3OTc1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwpAQCAtMjEsNiArMjEsOCBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorCiAjaW5jbHVkZSAiYWY5MDE1LmgiCiAjaW5jbHVkZSAiYWY5MDEzLmgiCiAjaW5jbHVkZSAibXQyMDYwLmgiCkBAIC01NTMsMjYgKzU1NSw0NSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIGR1bXAgZWVwcm9tICovCi1zdGF0aWMgaW50IGFmOTAxNV9lZXByb21fZHVtcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCisvKiBoYXNoIChhbmQgZHVtcCkgZWVwcm9tICovCitzdGF0aWMgaW50IGFmOTAxNV9lZXByb21faGFzaChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKLQl1OCByZWcsIHZhbDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVlcHJvbV9zaXplID0gMjU2OworCXVuc2lnbmVkIGludCByZWc7CisJaW50IHJldDsKKwl1OCB2YWwsICplZXByb207CisJc3RydWN0IHJlcV90IHJlcSA9IHtSRUFEX0kyQywgQUY5MDE1X0kyQ19FRVBST00sIDAsIDAsIDEsIDEsICZ2YWx9OwogCi0JZm9yIChyZWcgPSAwOyA7IHJlZysrKSB7Ci0JCWlmIChyZWcgJSAxNiA9PSAwKSB7Ci0JCQlpZiAocmVnKQotCQkJCWRlYl9pbmZvKEtFUk5fQ09OVCAiXG4iKTsKLQkJCWRlYl9pbmZvKEtFUk5fREVCVUcgIiUwMng6IiwgcmVnKTsKLQkJfQotCQlpZiAoYWY5MDE1X3JlYWRfcmVnX2kyYyhkLCBBRjkwMTVfSTJDX0VFUFJPTSwgcmVnLCAmdmFsKSA9PSAwKQotCQkJZGViX2luZm8oS0VSTl9DT05UICIgJTAyeCIsIHZhbCk7Ci0JCWVsc2UKLQkJCWRlYl9pbmZvKEtFUk5fQ09OVCAiIC0tIik7Ci0JCWlmIChyZWcgPT0gMHhmZikKLQkJCWJyZWFrOworCWVlcHJvbSA9IGttYWxsb2MoZWVwcm9tX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChlZXByb20gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHJlZyA9IDA7IHJlZyA8IGVlcHJvbV9zaXplOyByZWcrKykgeworCQlyZXEuYWRkciA9IHJlZzsKKwkJcmV0ID0gYWY5MDE1X3J3X3VkZXYodWRldiwgJnJlcSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWU7CisJCWVlcHJvbVtyZWddID0gdmFsOwogCX0KLQlkZWJfaW5mbyhLRVJOX0NPTlQgIlxuIik7Ci0JcmV0dXJuIDA7CisKKwlpZiAoZHZiX3VzYl9hZjkwMTVfZGVidWcgJiAweDAxKQorCQlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBlZXByb20sCisJCQkJZWVwcm9tX3NpemUpOworCisJQlVHX09OKGVlcHJvbV9zaXplICUgNCk7CisKKwlhZjkwMTVfY29uZmlnLmVlcHJvbV9zdW0gPSAwOworCWZvciAocmVnID0gMDsgcmVnIDwgZWVwcm9tX3NpemUgLyBzaXplb2YodTMyKTsgcmVnKyspIHsKKwkJYWY5MDE1X2NvbmZpZy5lZXByb21fc3VtICo9IEdPTERFTl9SQVRJT19QUklNRV8zMjsKKwkJYWY5MDE1X2NvbmZpZy5lZXByb21fc3VtICs9IGxlMzJfdG9fY3B1KCgodTMyICopZWVwcm9tKVtyZWddKTsKKwl9CisKKwlkZWJfaW5mbygiJXM6IGVlcHJvbSBzdW09JS44eFxuIiwgX19mdW5jX18sIGFmOTAxNV9jb25maWcuZWVwcm9tX3N1bSk7CisKKwlyZXQgPSAwOworZnJlZToKKwlrZnJlZShlZXByb20pOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWY5MDE1X2Rvd25sb2FkX2lyX3RhYmxlKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKQEAgLTcxMSwxMiArNzMyLDEzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0cnVjdCBhZjkwMTVfc2V0dXAgeworCXVuc2lnbmVkIGludCBpZDsKKwlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKnJjX2tleV9tYXA7CisJdW5zaWduZWQgaW50IHJjX2tleV9tYXBfc2l6ZTsKKwl1OCAqaXJfdGFibGU7CisJdW5zaWduZWQgaW50IGlyX3RhYmxlX3NpemU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCAqYWY5MDE1X3NldHVwX21hdGNoKHVuc2lnbmVkIGludCBpZCwKKwkJY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCAqdGFibGUpCit7CisJZm9yICg7IHRhYmxlLT5yY19rZXlfbWFwOyB0YWJsZSsrKQorCQlpZiAodGFibGUtPmlkID09IGlkKQorCQkJcmV0dXJuIHRhYmxlOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCBhZjkwMTVfc2V0dXBfbW9kcGFyYW1bXSA9IHsKKwl7IEFGOTAxNV9SRU1PVEVfQV9MSU5LX0RUVV9NLAorCQlhZjkwMTVfcmNfa2V5c19hX2xpbmssIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYV9saW5rKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2FfbGluaywgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYV9saW5rKSB9LAorCXsgQUY5MDE1X1JFTU9URV9NU0lfRElHSVZPWF9NSU5JX0lJX1YzLAorCQlhZjkwMTVfcmNfa2V5c19tc2ksIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpKSwKKwkJYWY5MDE1X2lyX3RhYmxlX21zaSwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpKSB9LAorCXsgQUY5MDE1X1JFTU9URV9NWUdJQ1RWX1U3MTgsCisJCWFmOTAxNV9yY19rZXlzX215Z2ljdHYsIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXlnaWN0diksCisJCWFmOTAxNV9pcl90YWJsZV9teWdpY3R2LCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9teWdpY3R2KSB9LAorCXsgQUY5MDE1X1JFTU9URV9ESUdJVFRSQURFX0RWQl9ULAorCQlhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2RpZ2l0dHJhZGUpLAorCQlhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZSwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZSkgfSwKKwl7IEFGOTAxNV9SRU1PVEVfQVZFUk1FRElBX0tTLAorCQlhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEsIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rcywgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzKSB9LAorCXsgfQorfTsKKworLyogZG9uJ3QgYWRkIG5ldyBlbnRyaWVzIGhlcmUgYW55bW9yZSwgdXNlIGhhc2hlcyBpbnN0ZWFkICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCBhZjkwMTVfc2V0dXBfdXNiaWRzW10gPSB7CisJeyBVU0JfVklEX0xFQURURUssCisJCWFmOTAxNV9yY19rZXlzX2xlYWR0ZWssIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbGVhZHRlayksCisJCWFmOTAxNV9pcl90YWJsZV9sZWFkdGVrLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9sZWFkdGVrKSB9LAorCXsgVVNCX1ZJRF9WSVNJT05QTFVTLAorCQlhZjkwMTVfcmNfa2V5c190d2luaGFuLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3R3aW5oYW4pLAorCQlhZjkwMTVfaXJfdGFibGVfdHdpbmhhbiwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfdHdpbmhhbikgfSwKKwl7IFVTQl9WSURfS1dPUkxEXzIsIC8qIFRPRE86IHVzZSBjb3JyZWN0IHJjIGtleXMgKi8KKwkJYWY5MDE1X3JjX2tleXNfdHdpbmhhbiwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190d2luaGFuKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2t3b3JsZCwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfa3dvcmxkKSB9LAorCXsgVVNCX1ZJRF9BVkVSTUVESUEsCisJCWFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEpLAorCQlhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWEpIH0sCisJeyBVU0JfVklEX01TSV8yLAorCQlhZjkwMTVfcmNfa2V5c19tc2lfZGlnaXZveF9paWksIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpX2RpZ2l2b3hfaWlpKSwKKwkJYWY5MDE1X2lyX3RhYmxlX21zaV9kaWdpdm94X2lpaSwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpX2RpZ2l2b3hfaWlpKSB9LAorCXsgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgYWY5MDE1X3NldHVwX2hhc2hlc1tdID0geworCXsgMHhiOGZlYjcwOCwKKwkJYWY5MDE1X3JjX2tleXNfbXNpLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaSksCisJCWFmOTAxNV9pcl90YWJsZV9tc2ksIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaSkgfSwKKwl7IDB4YTM3MDNkMDAsCisJCWFmOTAxNV9yY19rZXlzX2FfbGluaywgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hX2xpbmspLAorCQlhZjkwMTVfaXJfdGFibGVfYV9saW5rLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hX2xpbmspIH0sCisJeyAweDliN2RjNjRlLAorCQlhZjkwMTVfcmNfa2V5c19teWdpY3R2LCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX215Z2ljdHYpLAorCQlhZjkwMTVfaXJfdGFibGVfbXlnaWN0diwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXlnaWN0dikgfSwKKwl7IH0KK307CisKK3N0YXRpYyB2b2lkIGFmOTAxNV9zZXRfcmVtb3RlX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzKQoreworCWNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgKnRhYmxlID0gTlVMTDsKKworCWlmIChkdmJfdXNiX2FmOTAxNV9yZW1vdGUpIHsKKwkJLyogbG9hZCByZW1vdGUgZGVmaW5lZCBhcyBtb2R1bGUgcGFyYW0gKi8KKwkJdGFibGUgPSBhZjkwMTVfc2V0dXBfbWF0Y2goZHZiX3VzYl9hZjkwMTVfcmVtb3RlLAorCQkJCWFmOTAxNV9zZXR1cF9tb2RwYXJhbSk7CisJfSBlbHNlIHsKKwkJdTE2IHZlbmRvciA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCisJCXRhYmxlID0gYWY5MDE1X3NldHVwX21hdGNoKGFmOTAxNV9jb25maWcuZWVwcm9tX3N1bSwKKwkJCQlhZjkwMTVfc2V0dXBfaGFzaGVzKTsKKworCQlpZiAoIXRhYmxlICYmIHZlbmRvciA9PSBVU0JfVklEX0FGQVRFQ0gpIHsKKwkJCS8qIENoZWNrIFVTQiBtYW51ZmFjdHVyZXIgYW5kIHByb2R1Y3Qgc3RyaW5ncyBhbmQgdHJ5CisJCQkgICB0byBkZXRlcm1pbmUgY29ycmVjdCByZW1vdGUgaW4gY2FzZSBvZiBjaGlwIHZlbmRvcgorCQkJICAgcmVmZXJlbmNlIElEcyBhcmUgdXNlZC4KKwkJCSAgIERPIE5PVCBBREQgQU5ZVEhJTkcgTkVXIEhFUkUuIFVzZSBoYXNoZXMgaW5zdGVhZC4KKwkJCSAqLworCQkJY2hhciBtYW51ZmFjdHVyZXJbMTBdOworCQkJbWVtc2V0KG1hbnVmYWN0dXJlciwgMCwgc2l6ZW9mKG1hbnVmYWN0dXJlcikpOworCQkJdXNiX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCisJCQkJbWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSk7CisJCQlpZiAoIXN0cmNtcCgiTVNJIiwgbWFudWZhY3R1cmVyKSkgeworCQkJCS8qIGlNYW51ZmFjdHVyZXIgMSBNU0kKKwkJCQkgICBpUHJvZHVjdCAgICAgIDIgTVNJIEstVk9YICovCisJCQkJdGFibGUgPSBhZjkwMTVfc2V0dXBfbWF0Y2goCisJCQkJCUFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMywKKwkJCQkJYWY5MDE1X3NldHVwX21vZHBhcmFtKTsKKwkJCX0gZWxzZSBpZiAodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0KKwkJCQljcHVfdG9fbGUxNihVU0JfUElEX1RSRUtTVE9SX0RWQlQpKSB7CisJCQkJdGFibGUgPSAmKGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXApeyAwLAorCQkJCQlhZjkwMTVfcmNfa2V5c190cmVrc3RvciwKKwkJCQkJQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190cmVrc3RvciksCisJCQkJCWFmOTAxNV9pcl90YWJsZV90cmVrc3RvciwKKwkJCQkJQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfdHJla3N0b3IpCisJCQkJfTsKKwkJCX0KKwkJfSBlbHNlIGlmICghdGFibGUpCisJCQl0YWJsZSA9IGFmOTAxNV9zZXR1cF9tYXRjaCh2ZW5kb3IsIGFmOTAxNV9zZXR1cF91c2JpZHMpOworCX0KKworCWlmICh0YWJsZSkgeworCQlwcm9wcy0+cmNfa2V5X21hcCA9IHRhYmxlLT5yY19rZXlfbWFwOworCQlwcm9wcy0+cmNfa2V5X21hcF9zaXplID0gdGFibGUtPnJjX2tleV9tYXBfc2l6ZTsKKwkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IHRhYmxlLT5pcl90YWJsZTsKKwkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0gdGFibGUtPmlyX3RhYmxlX3NpemU7CisJfQorfQorCiBzdGF0aWMgaW50IGFmOTAxNV9yZWFkX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKIAlpbnQgcmV0OwogCXU4IHZhbCwgaSwgb2Zmc2V0ID0gMDsKIAlzdHJ1Y3QgcmVxX3QgcmVxID0ge1JFQURfSTJDLCBBRjkwMTVfSTJDX0VFUFJPTSwgMCwgMCwgMSwgMSwgJnZhbH07Ci0JY2hhciBtYW51ZmFjdHVyZXJbMTBdOwogCiAJLyogSVIgcmVtb3RlIGNvbnRyb2xsZXIgKi8KIAlyZXEuYWRkciA9IEFGOTAxNV9FRVBST01fSVJfTU9ERTsKQEAgLTcyOCwxNTggKzg2OSwxOCBAQAogCX0KIAlpZiAocmV0KQogCQlnb3RvIGVycm9yOworCisJcmV0ID0gYWY5MDE1X2VlcHJvbV9oYXNoKHVkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKIAlkZWJfaW5mbygiJXM6IElSIG1vZGU6JWRcbiIsIF9fZnVuY19fLCB2YWwpOwogCWZvciAoaSA9IDA7IGkgPCBhZjkwMTVfcHJvcGVydGllc19jb3VudDsgaSsrKSB7CiAJCWlmICh2YWwgPT0gQUY5MDE1X0lSX01PREVfRElTQUJMRUQpIHsKIAkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPSBOVUxMOwogCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplICA9IDA7Ci0JCX0gZWxzZSBpZiAoZHZiX3VzYl9hZjkwMTVfcmVtb3RlKSB7Ci0JCQkvKiBsb2FkIHJlbW90ZSBkZWZpbmVkIGFzIG1vZHVsZSBwYXJhbSAqLwotCQkJc3dpdGNoIChkdmJfdXNiX2FmOTAxNV9yZW1vdGUpIHsKLQkJCWNhc2UgQUY5MDE1X1JFTU9URV9BX0xJTktfRFRVX006Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19hX2xpbms7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYV9saW5rKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0gYWY5MDE1X2lyX3RhYmxlX2FfbGluazsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYV9saW5rKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUY5MDE1X1JFTU9URV9NU0lfRElHSVZPWF9NSU5JX0lJX1YzOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfbXNpOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IGFmOTAxNV9pcl90YWJsZV9tc2k7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfTVlHSUNUVl9VNzE4OgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfbXlnaWN0djsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19teWdpY3R2KTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9teWdpY3R2OwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9teWdpY3R2KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUY5MDE1X1JFTU9URV9ESUdJVFRSQURFX0RWQl9UOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfZGlnaXR0cmFkZTsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9kaWdpdHRyYWRlOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9kaWdpdHRyYWRlKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUY5MDE1X1JFTU9URV9BVkVSTUVESUFfS1M6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19hdmVybWVkaWE7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3M7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rcyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKSB7Ci0JCQljYXNlIFVTQl9WSURfTEVBRFRFSzoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX2xlYWR0ZWs7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbGVhZHRlayk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfbGVhZHRlazsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbGVhZHRlayk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVTQl9WSURfVklTSU9OUExVUzoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX3R3aW5oYW47Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHdpbmhhbik7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfdHdpbmhhbjsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfdHdpbmhhbik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVTQl9WSURfS1dPUkxEXzI6Ci0JCQkJLyogVE9ETzogdXNlIGNvcnJlY3QgcmMga2V5cyAqLwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfdHdpbmhhbjsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190d2luaGFuKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0gYWY5MDE1X2lyX3RhYmxlX2t3b3JsZDsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfa3dvcmxkKTsKLQkJCQlicmVhazsKLQkJCS8qIENoZWNrIFVTQiBtYW51ZmFjdHVyZXIgYW5kIHByb2R1Y3Qgc3RyaW5ncyBhbmQgdHJ5Ci0JCQkgICB0byBkZXRlcm1pbmUgY29ycmVjdCByZW1vdGUgaW4gY2FzZSBvZiBjaGlwIHZlbmRvcgotCQkJICAgcmVmZXJlbmNlIElEcyBhcmUgdXNlZC4gKi8KLQkJCWNhc2UgVVNCX1ZJRF9BRkFURUNIOgotCQkJCW1lbXNldChtYW51ZmFjdHVyZXIsIDAsIHNpemVvZihtYW51ZmFjdHVyZXIpKTsKLQkJCQl1c2Jfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKLQkJCQkJbWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSk7Ci0JCQkJaWYgKCFzdHJjbXAoIkdlbmlhdGVjaCIsIG1hbnVmYWN0dXJlcikpIHsKLQkJCQkJLyogaU1hbnVmYWN0dXJlciAxIEdlbmlhdGVjaAotCQkJCQkgICBpUHJvZHVjdCAgICAgIDIgQUY5MDE1ICovCi0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCQkgIGFmOTAxNV9yY19rZXlzX215Z2ljdHY7Ci0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19teWdpY3R2KTsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJCSAgYWY5MDE1X2lyX3RhYmxlX215Z2ljdHY7Ci0JCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXlnaWN0dik7Ci0JCQkJfSBlbHNlIGlmICghc3RyY21wKCJNU0kiLCBtYW51ZmFjdHVyZXIpKSB7Ci0JCQkJCS8qIGlNYW51ZmFjdHVyZXIgMSBNU0kKLQkJCQkJICAgaVByb2R1Y3QgICAgICAyIE1TSSBLLVZPWCAqLwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkJICBhZjkwMTVfcmNfa2V5c19tc2k7Ci0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2kpOwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkJICBhZjkwMTVfaXJfdGFibGVfbXNpOwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaSk7Ci0JCQkJfSBlbHNlIGlmICh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PQotCQkJCQljcHVfdG9fbGUxNihVU0JfUElEX1RSRUtTVE9SX0RWQlQpKSB7Ci0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCQkgIGFmOTAxNV9yY19rZXlzX3RyZWtzdG9yOwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHJla3N0b3IpOwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkJICBhZjkwMTVfaXJfdGFibGVfdHJla3N0b3I7Ci0JCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfdHJla3N0b3IpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgVVNCX1ZJRF9BVkVSTUVESUE6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19hdmVybWVkaWE7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWE7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVTQl9WSURfTVNJXzI6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19tc2lfZGlnaXZveF9paWk7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpX2RpZ2l2b3hfaWlpKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9tc2lfZGlnaXZveF9paWk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaV9kaWdpdm94X2lpaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KKwkJfSBlbHNlCisJCQlhZjkwMTVfc2V0X3JlbW90ZV9jb25maWcodWRldiwgJmFmOTAxNV9wcm9wZXJ0aWVzW2ldKTsKIAl9CiAKIAkvKiBUUyBtb2RlIC0gb25lIG9yIHR3byByZWNlaXZlcnMgKi8KQEAgLTEwMDEsNiArMTAwMiw5IEBACiAJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5ncGlvWzFdID0gQUY5MDEzX0dQSU9fTE87CiAJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5yZl9zcGVjX2ludiA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSBBRjkwMTNfVFVORVJfVERBMTgyMTg6CisJCQl3YXJuKCJ0dW5lciBOWFAgVERBMTgyMTggbm90IHN1cHBvcnRlZCB5ZXQiKTsKKwkJCXJldHVybiAtRU5PREVWOwogCQlkZWZhdWx0OgogCQkJd2FybigidHVuZXIgaWQ6JWQgbm90IHN1cHBvcnRlZCwgcGxlYXNlIHJlcG9ydCEiLCB2YWwpOwogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTI1LDExICsxMTI5LDYgQEAKIAogCQlkZWJfaW5mbygiJXM6IGluaXQgSTJDXG4iLCBfX2Z1bmNfXyk7CiAJCXJldCA9IGFmOTAxNV9pMmNfaW5pdChhZGFwLT5kZXYpOwotCi0JCS8qIGR1bXAgZWVwcm9tIChkZWJ1ZykgKi8KLQkJcmV0ID0gYWY5MDE1X2VlcHJvbV9kdW1wKGFkYXAtPmRldik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CiAJCS8qIHNlbGVjdCBJMkMgYWRhcHRlciAqLwogCQlpMmNfYWRhcCA9ICZzdGF0ZS0+aTJjX2FkYXA7CkBAIC0xMjk1LDYgKzEyOTQsOCBAQAogLyogMjUgKi97VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9LV09STERfMzk5VV8yKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEX1BDMTYwX1QpfSwKIAl7VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9TVkVPTl9TVFYyMCl9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX1RJTllUV0lOXzIpfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0xFQURURUssICAgVVNCX1BJRF9XSU5GQVNUX0RUVjIwMDBEUyl9LAogCXswfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYWY5MDE1X3VzYl90YWJsZSk7CkBAIC0xMzgxLDcgKzEzODIsOCBAQAogCQkJfSwKIAkJCXsKIAkJCQkubmFtZSA9ICJEaWdpdGFsTm93IFRpbnlUd2luIERWQi1UIFJlY2VpdmVyIiwKLQkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbNV0sIE5VTEx9LAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs1XSwKKwkJCQkJICAgICAmYWY5MDE1X3VzYl90YWJsZVsyOF0sIE5VTEx9LAogCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKIAkJCX0sCiAJCQl7CkBAIC0xNTY2LDcgKzE1NjgsNyBAQAogCiAJCS5pMmNfYWxnbyA9ICZhZjkwMTVfaTJjX2FsZ28sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSA2LCAvKiBtYXggOSAqLworCQkubnVtX2RldmljZV9kZXNjcyA9IDcsIC8qIG1heCA5ICovCiAJCS5kZXZpY2VzID0gewogCQkJewogCQkJCS5uYW1lID0gIkF2ZXJNZWRpYSBBVmVyVFYgVm9sYXIgR1BTIDgwNSAoQTgwNSkiLApAQCAtMTYwMCw2ICsxNjAyLDExIEBACiAJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzI3XSwgTlVMTH0sCiAJCQkJLndhcm1faWRzID0ge05VTEx9LAogCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJMZWFkdGVrIFdpbkZhc3QgRFRWMjAwMERTIiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMjldLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAogCQl9CiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAppbmRleCA5MzFjODUxLi5lZjM2YjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKQEAgLTEwNyw2ICsxMDcsNyBAQAogCXUxNiBtdDIwNjBfaWYxWzJdOwogCXUxNiBmaXJtd2FyZV9zaXplOwogCXUxNiBmaXJtd2FyZV9jaGVja3N1bTsKKwl1MzIgZWVwcm9tX3N1bTsKIAl1OCAgKmlyX3RhYmxlOwogCXUxNiBpcl90YWJsZV9zaXplOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjkwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jCkBAIC0wLDAgKzEsMTE1MSBAQAorLyogRFZCIFVTQiBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUgQVpVUkVXQVZFIERWQi1TL1MyIFVTQjIuMCAoQVo2MDI3KQorICogcmVjZWl2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFkYW1zLlh1IDxhZGFtcy54dUBhendhdmUuY29tLmNuPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICoJU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqIHNlZSBEb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICovCisjaW5jbHVkZSAiYXo2MDI3LmgiCisKKyNpbmNsdWRlICJzdGIwODk5X2Rydi5oIgorI2luY2x1ZGUgInN0YjA4OTlfcmVnLmgiCisjaW5jbHVkZSAic3RiMDg5OV9jZmcuaCIKKworI2luY2x1ZGUgInN0YjYxMDAuaCIKKyNpbmNsdWRlICJzdGI2MTAwX2NmZy5oIgorI2luY2x1ZGUgImR2Yl9jYV9lbjUwMjIxLmgiCisKK2ludCBkdmJfdXNiX2F6NjAyN19kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9hejYwMjdfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLHhmZXI9MixyYz00IChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CisKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCitzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSB7CisJc3RydWN0IGR2Yl9jYV9lbjUwMjIxIGNhOworCXN0cnVjdCBtdXRleCBjYV9tdXRleDsKKwl1OCBwb3dlcl9zdGF0ZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcgYXo2MDI3X3N0YjA4OTlfczFfaW5pdF8xW10gPSB7CisKKwkvKiAweDAwMDAwMDBiLCBTWVNSRUcgKi8KKwl7IFNUQjA4OTlfREVWX0lECQksIDB4MzAgfSwKKwl7IFNUQjA4OTlfRElTQ05UUkwxCQksIDB4MzIgfSwKKwl7IFNUQjA4OTlfRElTQ05UUkwyICAgICAJLCAweDgwIH0sCisJeyBTVEIwODk5X0RJU1JYX1NUMCAgICAgCSwgMHgwNCB9LAorCXsgU1RCMDg5OV9ESVNSWF9TVDEgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRElTUEFSSVRZICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0RJU0ZJRk8gICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ESVNTVEFUVVMJCSwgMHgyMCB9LAorCXsgU1RCMDg5OV9ESVNGMjIgICAgICAgIAksIDB4OTkgfSwKKwl7IFNUQjA4OTlfRElTRjIyUlggICAgICAJLCAweGE4IH0sCisJLyogU1lTUkVHID8gKi8KKwl7IFNUQjA4OTlfQUNSUFJFU0MgICAgICAJLCAweDExIH0sCisJeyBTVEIwODk5X0FDUkRJVjEgICAgICAgCSwgMHgwYSB9LAorCXsgU1RCMDg5OV9BQ1JESVYyICAgICAgIAksIDB4MDUgfSwKKwl7IFNUQjA4OTlfREFDUjEgICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0RBQ1IyICAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9PVVRDRkcgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTU9ERUNGRyAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0lSUVNUQVRVU18zCQksIDB4ZmUgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzIJCSwgMHgwMyB9LAorCXsgU1RCMDg5OV9JUlFTVEFUVVNfMQkJLCAweDdjIH0sCisJeyBTVEIwODk5X0lSUVNUQVRVU18wCQksIDB4ZjQgfSwKKwl7IFNUQjA4OTlfSVJRTVNLXzMgICAgICAJLCAweGYzIH0sCisJeyBTVEIwODk5X0lSUU1TS18yICAgICAgCSwgMHhmYyB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMSAgICAgIAksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfSVJRTVNLXzAJCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9JUlFDRkcJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JMkNDRkcgICAgICAgIAksIDB4ODggfSwKKwl7IFNUQjA4OTlfSTJDUlBUICAgICAgICAJLCAweDU4IH0sCisJeyBTVEIwODk5X0lPUFZBTFVFNQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFNAkJLCAweDMzIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFMwkJLCAweDZkIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFMgkJLCAweDkwIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFMQkJLCAweDYwIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFMAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0dQSU8wMENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDFDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzAyQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wM0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDRDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA1Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wNkNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDdDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA4Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wOUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTBDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzExQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xMkNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTNDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE0Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xNUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTZDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE3Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xOENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTlDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzIwQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X1NEQVRDRkcgICAgICAgCSwgMHhiOCB9LAorCXsgU1RCMDg5OV9TQ0xUQ0ZHICAgICAgIAksIDB4YmEgfSwKKwl7IFNUQjA4OTlfQUdDUkZDRkcgICAgICAJLCAweDFjIH0sIC8qIDB4MTEgKi8KKwl7IFNUQjA4OTlfR1BJTzIyICAgICAgICAJLCAweDgyIH0sIC8qIEFHQ0JCMkNGRyAqLworCXsgU1RCMDg5OV9HUElPMjEgICAgICAgIAksIDB4OTEgfSwgLyogQUdDQkIxQ0ZHICovCisJeyBTVEIwODk5X0RJUkNMS0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9DTEtPVVQyN0NGRyAgIAksIDB4N2UgfSwKKwl7IFNUQjA4OTlfU1REQllDRkcgICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0NTMENGRyAgICAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9DUzFDRkcgICAgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfRElTRVFDT0NGRyAgICAJLCAweDIwIH0sCisJeyBTVEIwODk5X0dQSU8zMkNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zM0NGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zNENGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zNUNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zNkNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zN0NGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zOENGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zOUNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X05DT0FSU0UgICAgICAgCSwgMHgxNyB9LCAvKiAweDE1ID0gMjcgTWh6IENsb2NrLCBGLzMgPSAxOThNSHosIEYvNiA9IDk5TUh6ICovCisJeyBTVEIwODk5X1NZTlRDVFJMICAgICAgCSwgMHgwMiB9LCAvKiAweDAwID0gQ0xLIGZyb20gQ0xLSSwgMHgwMiA9IENMSyBmcm9tIFhUQUxJICovCisJeyBTVEIwODk5X0ZJTFRDVFJMICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWVNDVFJMICAgICAgIAksIDB4MDEgfSwKKwl7IFNUQjA4OTlfU1RPUENMSzEgICAgICAJLCAweDIwIH0sCisJeyBTVEIwODk5X1NUT1BDTEsyICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JTlRCVUZTVEFUVVMJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JTlRCVUZDVFJMICAgIAksIDB4MGEgfSwKKwl7IDB4ZmZmZgkJCSwgMHhmZiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdGIwODk5X3MxX3JlZyBhejYwMjdfc3RiMDg5OV9zMV9pbml0XzNbXSA9IHsKKwl7IFNUQjA4OTlfREVNT0QgICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1JDT01QQyAgICAgICAgCSwgMHhjOSB9LAorCXsgU1RCMDg5OV9BR0MxQ04gICAgICAgIAksIDB4MDEgfSwKKwl7IFNUQjA4OTlfQUdDMVJFRiAgICAgICAJLCAweDEwIH0sCisJeyBTVEIwODk5X1JUQwkgICAgICAgIAksIDB4MjMgfSwKKwl7IFNUQjA4OTlfVE1HQ0ZHICAgICAgICAJLCAweDRlIH0sCisJeyBTVEIwODk5X0FHQzJSRUYgICAgICAgCSwgMHgzNCB9LAorCXsgU1RCMDg5OV9UTFNSICAgICAgICAgIAksIDB4ODQgfSwKKwl7IFNUQjA4OTlfQ0ZEICAgICAgICAgICAJLCAweGY3IH0sCisJeyBTVEIwODk5X0FDTEMJICAgICAgICAJLCAweDg3IH0sCisJeyBTVEIwODk5X0JDTEMgICAgICAgICAgCSwgMHg5NCB9LAorCXsgU1RCMDg5OV9FUU9OICAgICAgICAgIAksIDB4NDEgfSwKKwl7IFNUQjA4OTlfTERUICAgICAgICAgICAJLCAweGYxIH0sCisJeyBTVEIwODk5X0xEVDIgICAgICAgICAgCSwgMHhlMyB9LAorCXsgU1RCMDg5OV9FUVVBTFJFRiAgICAgIAksIDB4YjQgfSwKKwl7IFNUQjA4OTlfVE1HUkFNUCAgICAgICAJLCAweDEwIH0sCisJeyBTVEIwODk5X1RNR1RIRCAgICAgICAgCSwgMHgzMCB9LAorCXsgU1RCMDg5OV9JRENDT01QCQksIDB4ZmQgfSwKKwl7IFNUQjA4OTlfUURDQ09NUAkJLCAweGZmIH0sCisJeyBTVEIwODk5X1BPV0VSSQkJLCAweDBjIH0sCisJeyBTVEIwODk5X1BPV0VSUQkJLCAweDBmIH0sCisJeyBTVEIwODk5X1JDT01QCQkJLCAweDZjIH0sCisJeyBTVEIwODk5X0FHQ0lRSU4JCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9BR0MySTEJCSwgMHgwNiB9LAorCXsgU1RCMDg5OV9BR0MySTIJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UTElSCQkJLCAweDMwIH0sCisJeyBTVEIwODk5X1JURgkJCSwgMHg3ZiB9LAorCXsgU1RCMDg5OV9EU1RBVFVTCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTERJCQkJLCAweGJjIH0sCisJeyBTVEIwODk5X0NGUk0JCQksIDB4ZWEgfSwKKwl7IFNUQjA4OTlfQ0ZSTAkJCSwgMHgzMSB9LAorCXsgU1RCMDg5OV9OSVJNCQkJLCAweDJiIH0sCisJeyBTVEIwODk5X05JUkwJCQksIDB4ODAgfSwKKwl7IFNUQjA4OTlfSVNZTUIJCQksIDB4MWQgfSwKKwl7IFNUQjA4OTlfUVNZTUIJCQksIDB4YTYgfSwKKwl7IFNUQjA4OTlfU0ZSSCAgICAgICAgICAJLCAweDJmIH0sCisJeyBTVEIwODk5X1NGUk0gICAgICAgICAgCSwgMHg2OCB9LAorCXsgU1RCMDg5OV9TRlJMICAgICAgICAgIAksIDB4NDAgfSwKKwl7IFNUQjA4OTlfU0ZSVVBIICAgICAgICAJLCAweDJmIH0sCisJeyBTVEIwODk5X1NGUlVQTSAgICAgICAgCSwgMHg2OCB9LAorCXsgU1RCMDg5OV9TRlJVUEwgICAgICAgIAksIDB4NDAgfSwKKwl7IFNUQjA4OTlfRVFVQUkxCQksIDB4MDIgfSwKKwl7IFNUQjA4OTlfRVFVQVExCQksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfRVFVQUkyCQksIDB4MDQgfSwKKwl7IFNUQjA4OTlfRVFVQVEyCQksIDB4MDUgfSwKKwl7IFNUQjA4OTlfRVFVQUkzCQksIDB4MDIgfSwKKwl7IFNUQjA4OTlfRVFVQVEzCQksIDB4ZmQgfSwKKwl7IFNUQjA4OTlfRVFVQUk0CQksIDB4MDMgfSwKKwl7IFNUQjA4OTlfRVFVQVE0CQksIDB4MDcgfSwKKwl7IFNUQjA4OTlfRVFVQUk1CQksIDB4MDggfSwKKwl7IFNUQjA4OTlfRVFVQVE1CQksIDB4ZjUgfSwKKwl7IFNUQjA4OTlfRFNUQVRVUzIJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9WU1RBVFVTICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVkVSUk9SCQksIDB4ODYgfSwKKwl7IFNUQjA4OTlfSVFTV0FQCQksIDB4MmEgfSwKKwl7IFNUQjA4OTlfRUNOVDFNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDFMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDJNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDJMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDNNCQksIDB4MGEgfSwKKwl7IFNUQjA4OTlfRUNOVDNMCQksIDB4YWQgfSwKKwl7IFNUQjA4OTlfRkVDQVVUTzEgICAgICAJLCAweDA2IH0sCisJeyBTVEIwODk5X0ZFQ00JICAgICAgICAJLCAweDAxIH0sCisJeyBTVEIwODk5X1ZUSDEyICAgICAgICAgCSwgMHhiMCB9LAorCXsgU1RCMDg5OV9WVEgyMyAgICAgICAgIAksIDB4N2EgfSwKKwl7IFNUQjA4OTlfVlRIMzQJICAgICAgICAJLCAweDU4IH0sCisJeyBTVEIwODk5X1ZUSDU2ICAgICAgICAgCSwgMHgzOCB9LAorCXsgU1RCMDg5OV9WVEg2NyAgICAgICAgIAksIDB4MzQgfSwKKwl7IFNUQjA4OTlfVlRINzggICAgICAgICAJLCAweDI0IH0sCisJeyBTVEIwODk5X1BSVklUICAgICAgICAgCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9WSVRTWU5DICAgICAgIAksIDB4MTkgfSwKKwl7IFNUQjA4OTlfUlNVTEMgICAgICAgICAJLCAweGIxIH0sIC8qIERWQiA9IDB4YjEsIERTUyA9IDB4YTEgKi8KKwl7IFNUQjA4OTlfVFNVTEMgICAgICAgICAJLCAweDQyIH0sCisJeyBTVEIwODk5X1JTTExDICAgICAgICAgCSwgMHg0MSB9LAorCXsgU1RCMDg5OV9UU0xQTAkgICAgICAgIAksIDB4MTIgfSwKKwl7IFNUQjA4OTlfVFNDRkdIICAgICAgICAJLCAweDBjIH0sCisJeyBTVEIwODk5X1RTQ0ZHTSAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0NGR0wgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNPVVQJCQksIDB4NjkgfSwgLyogMHgwZCBmb3IgQ0FNICovCisJeyBTVEIwODk5X1JTU1lOQ0RFTCAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0lOSERFTEggICAgIAksIDB4MDIgfSwKKwl7IFNUQjA4OTlfVFNJTkhERUxNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNJTkhERUxMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNMTFNUS00JCSwgMHgxYiB9LAorCXsgU1RCMDg5OV9UU0xMU1RLTAkJLCAweGIzIH0sCisJeyBTVEIwODk5X1RTVUxTVEtNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNVTFNUS0wJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9QQ0tMRU5VTAkJLCAweGJjIH0sCisJeyBTVEIwODk5X1BDS0xFTkxMCQksIDB4Y2MgfSwKKwl7IFNUQjA4OTlfUlNQQ0tMRU4JCSwgMHhiZCB9LAorCXsgU1RCMDg5OV9UU1NUQVRVUwkJLCAweDkwIH0sCisJeyBTVEIwODk5X0VSUkNUUkwxICAgICAgCSwgMHhiNiB9LAorCXsgU1RCMDg5OV9FUlJDVFJMMiAgICAgIAksIDB4OTUgfSwKKwl7IFNUQjA4OTlfRVJSQ1RSTDMgICAgICAJLCAweDhkIH0sCisJeyBTVEIwODk5X0RNT05NU0sxCQksIDB4MjcgfSwKKwl7IFNUQjA4OTlfRE1PTk1TSzAJCSwgMHgwMyB9LAorCXsgU1RCMDg5OV9ERU1BUFZJVCAgICAgIAksIDB4NWMgfSwKKwl7IFNUQjA4OTlfUExQQVJNCQksIDB4MTkgfSwKKwl7IFNUQjA4OTlfUERFTENUUkwgICAgICAJLCAweDQ4IH0sCisJeyBTVEIwODk5X1BERUxDVFJMMiAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9CQkhDVFJMMSAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfQkJIQ1RSTDIgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0hZU1RUSFJFU0ggICAgCSwgMHg3NyB9LAorCXsgU1RCMDg5OV9NQVRDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTUFUQ1NUTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1VQTENTVE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9VUExDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfREZMQ1NUTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0RGTENTVEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DQ1NUCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ0RDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ0RDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVNJX0VOVFJZCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVNJX0JJVF9FTgkJLCAweDAwIH0sCisJeyBTVEIwODk5X01BVFNUUk0JCSwgMHhmMCB9LAorCXsgU1RCMDg5OV9NQVRTVFJMCQksIDB4MDIgfSwKKwl7IFNUQjA4OTlfVVBMU1RSTQkJLCAweDQ1IH0sCisJeyBTVEIwODk5X1VQTFNUUkwJCSwgMHg2MCB9LAorCXsgU1RCMDg5OV9ERkxTVFJNCQksIDB4ZTMgfSwKKwl7IFNUQjA4OTlfREZMU1RSTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNTVFIJCSwgMHg0NyB9LAorCXsgU1RCMDg5OV9TWU5DRFNUUk0JCSwgMHgwNSB9LAorCXsgU1RCMDg5OV9TWU5DRFNUUkwJCSwgMHgxOCB9LAorCXsgU1RCMDg5OV9DRkdQREVMU1RBVFVTMQksIDB4MTkgfSwKKwl7IFNUQjA4OTlfQ0ZHUERFTFNUQVRVUzIJLCAweDJiIH0sCisJeyBTVEIwODk5X0JCRkVSUk9STQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0JCRkVSUk9STAkJLCAweDAxIH0sCisJeyBTVEIwODk5X1VQS1RFUlJPUk0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9VUEtURVJST1JMCQksIDB4MDAgfSwKKwl7IDB4ZmZmZgkJCSwgMHhmZiB9LAorfTsKKworCisKK3N0cnVjdCBzdGIwODk5X2NvbmZpZyBhejYwMjdfc3RiMDg5OV9jb25maWcgPSB7CisJLmluaXRfZGV2CQk9IGF6NjAyN19zdGIwODk5X3MxX2luaXRfMSwKKwkuaW5pdF9zMl9kZW1vZAkJPSBzdGIwODk5X3MyX2luaXRfMiwKKwkuaW5pdF9zMV9kZW1vZAkJPSBhejYwMjdfc3RiMDg5OV9zMV9pbml0XzMsCisJLmluaXRfczJfZmVjCQk9IHN0YjA4OTlfczJfaW5pdF80LAorCS5pbml0X3RzdAkJPSBzdGIwODk5X3MxX2luaXRfNSwKKworCS5kZW1vZF9hZGRyZXNzIAkJPSAweGQwLCAvKiAweDY4LCAweGQwID4+IDEgKi8KKworCS54dGFsX2ZyZXEJCT0gMjcwMDAwMDAsCisJLmludmVyc2lvbgkJPSBJUV9TV0FQX09OLCAvKiAxICovCisKKwkubG9fY2xrCQkJPSA3NjUwMDAwMCwKKwkuaGlfY2xrCQkJPSA5OTAwMDAwMCwKKworCS5lc25vX2F2ZQkJPSBTVEIwODk5X0RWQlMyX0VTTk9fQVZFLAorCS5lc25vX3F1YW50CQk9IFNUQjA4OTlfRFZCUzJfRVNOT19RVUFOVCwKKwkuYXZmcmFtZXNfY29hcnNlCT0gU1RCMDg5OV9EVkJTMl9BVkZSQU1FU19DT0FSU0UsCisJLmF2ZnJhbWVzX2ZpbmUJCT0gU1RCMDg5OV9EVkJTMl9BVkZSQU1FU19GSU5FLAorCS5taXNzX3RocmVzaG9sZAkJPSBTVEIwODk5X0RWQlMyX01JU1NfVEhSRVNIT0xELAorCS51d3BfdGhyZXNob2xkX2FjcQk9IFNUQjA4OTlfRFZCUzJfVVdQX1RIUkVTSE9MRF9BQ1EsCisJLnV3cF90aHJlc2hvbGRfdHJhY2sJPSBTVEIwODk5X0RWQlMyX1VXUF9USFJFU0hPTERfVFJBQ0ssCisJLnV3cF90aHJlc2hvbGRfc29mCT0gU1RCMDg5OV9EVkJTMl9VV1BfVEhSRVNIT0xEX1NPRiwKKwkuc29mX3NlYXJjaF90aW1lb3V0CT0gU1RCMDg5OV9EVkJTMl9TT0ZfU0VBUkNIX1RJTUVPVVQsCisKKwkuYnRyX25jb19iaXRzCQk9IFNUQjA4OTlfRFZCUzJfQlRSX05DT19CSVRTLAorCS5idHJfZ2Fpbl9zaGlmdF9vZmZzZXQJPSBTVEIwODk5X0RWQlMyX0JUUl9HQUlOX1NISUZUX09GRlNFVCwKKwkuY3JsX25jb19iaXRzCQk9IFNUQjA4OTlfRFZCUzJfQ1JMX05DT19CSVRTLAorCS5sZHBjX21heF9pdGVyCQk9IFNUQjA4OTlfRFZCUzJfTERQQ19NQVhfSVRFUiwKKworCS50dW5lcl9nZXRfZnJlcXVlbmN5CT0gc3RiNjEwMF9nZXRfZnJlcXVlbmN5LAorCS50dW5lcl9zZXRfZnJlcXVlbmN5CT0gc3RiNjEwMF9zZXRfZnJlcXVlbmN5LAorCS50dW5lcl9zZXRfYmFuZHdpZHRoCT0gc3RiNjEwMF9zZXRfYmFuZHdpZHRoLAorCS50dW5lcl9nZXRfYmFuZHdpZHRoCT0gc3RiNjEwMF9nZXRfYmFuZHdpZHRoLAorCS50dW5lcl9zZXRfcmZzaWdnYWluCT0gTlVMTCwKK307CisKK3N0cnVjdCBzdGI2MTAwX2NvbmZpZyBhejYwMjdfc3RiNjEwMF9jb25maWcgPSB7CisJLnR1bmVyX2FkZHJlc3MJPSAweGMwLAorCS5yZWZjbG9jawk9IDI3MDAwMDAwLAorfTsKKworCisvKiBjaGVjayBmb3IgbXV0ZXggRklYTUUgKi8KK2ludCBhejYwMjdfdXNiX2luX29wKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggcmVxLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTggKmIsIGludCBibGVuKQoreworCWludCByZXQgPSAtMTsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT51c2JfbXV0ZXgpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGQtPnVkZXYsIDApLAorCQkJICAgICAgcmVxLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiwKKwkJCSAgICAgIHZhbHVlLAorCQkJICAgICAgaW5kZXgsCisJCQkgICAgICBiLAorCQkJICAgICAgYmxlbiwKKwkJCSAgICAgIDIwMDApOworCisJaWYgKHJldCA8IDApIHsKKwkJd2FybigidXNiIGluIG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0gZWxzZQorCQlyZXQgPSAwOworCisJZGViX3hmZXIoImluOiByZXEuICUwMngsIHZhbDogJTA0eCwgaW5kOiAlMDR4LCBidWZmZXI6ICIsIHJlcSwgdmFsdWUsIGluZGV4KTsKKwlkZWJ1Z19kdW1wKGIsIGJsZW4sIGRlYl94ZmVyKTsKKworCW11dGV4X3VubG9jaygmZC0+dXNiX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN191c2Jfb3V0X29wKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwKKwkJCSAgICAgdTggcmVxLAorCQkJICAgICB1MTYgdmFsdWUsCisJCQkgICAgIHUxNiBpbmRleCwKKwkJCSAgICAgdTggKmIsCisJCQkgICAgIGludCBibGVuKQoreworCWludCByZXQ7CisKKwlkZWJfeGZlcigib3V0OiByZXEuICUwMngsIHZhbDogJTA0eCwgaW5kOiAlMDR4LCBidWZmZXI6ICIsIHJlcSwgdmFsdWUsIGluZGV4KTsKKwlkZWJ1Z19kdW1wKGIsIGJsZW4sIGRlYl94ZmVyKTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPnVzYl9tdXRleCkpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZC0+dWRldiwgMCksCisJCQkgICAgICByZXEsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCwKKwkJCSAgICAgIHZhbHVlLAorCQkJICAgICAgaW5kZXgsCisJCQkgICAgICBiLAorCQkJICAgICAgYmxlbiwKKwkJCSAgICAgIDIwMDApOworCisJaWYgKHJldCAhPSBibGVuKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCW11dGV4X3VubG9jaygmZC0+dXNiX211dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfSBlbHNleworCQltdXRleF91bmxvY2soJmQtPnVzYl9tdXRleCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBhejYwMjdfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwlkZWJfaW5mbygiJXMgJWQiLCBfX2Z1bmNfXywgb25vZmYpOworCisJcmVxID0gMHhCQzsKKwl2YWx1ZSA9IG9ub2ZmOworCWluZGV4ID0gMDsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGtleXMgZm9yIHRoZSBlbmNsb3NlZCByZW1vdGUgY29udHJvbCAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhejYwMjdfcmNfa2V5c1tdID0geworCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCit9OworCisvKiByZW1vdGUgY29udHJvbCBzdHVmZiAoZG9lcyBub3Qgd29yayB3aXRoIG15IGJveCkgKi8KK3N0YXRpYyBpbnQgYXo2MDI3X3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKK2ludCBhejYwMjdfcG93ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK3sKKwl1OCB2ID0gb25vZmY7CisJcmV0dXJuIGF6NjAyN191c2Jfb3V0X29wKGQsMHhCQyx2LDMsTlVMTCwxKTsKK30KKyovCisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3JlYWRfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLAorCQkJCQlpbnQgc2xvdCwKKwkJCQkJaW50IGFkZHJlc3MpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCXU4IGJbMTJdOworCisJaWYgKHNsb3QgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCisJcmVxID0gMHhDMTsKKwl2YWx1ZSA9IGFkZHJlc3M7CisJaW5kZXggPSAwOworCWJsZW4gPSAxOworCisJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgYiwgYmxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJd2FybigidXNiIGluIG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJldCA9IGJbMF07CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3dyaXRlX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwKKwkJCQkJIGludCBzbG90LAorCQkJCQkgaW50IGFkZHJlc3MsCisJCQkJCSB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTE7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJZGViX2luZm8oIiVzICVkIiwgX19mdW5jX18sIHNsb3QpOworCWlmIChzbG90ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXEgPSAweEMyOworCXZhbHVlMSA9IGFkZHJlc3M7CisJaW5kZXggPSB2YWx1ZTsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUxLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3JlYWRfY2FtX2NvbnRyb2woc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwKKwkJCQkgICAgICBpbnQgc2xvdCwKKwkJCQkgICAgICB1OCBhZGRyZXNzKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKwl1OCBiWzEyXTsKKworCWlmIChzbG90ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKworCXJlcSA9IDB4QzM7CisJdmFsdWUgPSBhZGRyZXNzOworCWluZGV4ID0gMDsKKwlibGVuID0gMjsKKworCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGIsIGJsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdhcm4oInVzYiBpbiBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAoYlswXSA9PSAwKQorCQkJd2FybigiUmVhZCBDSSBJTyBlcnJvciIpOworCisJCXJldCA9IGJbMV07CisJCWRlYl9pbmZvKCJyZWFkIGNhbSBkYXRhID0gJXggZnJvbSAweCV4IiwgYlsxXSwgdmFsdWUpOworCX0KKworCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV93cml0ZV9jYW1fY29udHJvbChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLAorCQkJCSAgICAgICBpbnQgc2xvdCwKKwkJCQkgICAgICAgdTggYWRkcmVzcywKKwkJCQkgICAgICAgdTggdmFsdWUpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWUxOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCWlmIChzbG90ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXEgPSAweEM0OworCXZhbHVlMSA9IGFkZHJlc3M7CisJaW5kZXggPSB2YWx1ZTsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUxLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworZmFpbGVkOgorCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IENJX0NhbVJlYWR5KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90KQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisJdTggYlsxMl07CisKKwlyZXEgPSAweEM4OworCXZhbHVlID0gMDsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDE7CisKKwlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBiLCBibGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQl3YXJuKCJ1c2IgaW4gb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCXJldCA9IC1FSU87CisJfSBlbHNleworCQlyZXQgPSBiWzBdOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9zbG90X3Jlc2V0KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90KQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldCwgaTsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisKKwlyZXEgPSAweEM2OworCXZhbHVlID0gMTsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1zbGVlcCg1MDApOworCXJlcSA9IDB4QzY7CisJdmFsdWUgPSAwOworCWluZGV4ID0gMDsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKwkJbXNsZWVwKDEwMCk7CisKKwkJaWYgKENJX0NhbVJlYWR5KGNhLCBzbG90KSkgeworCQkJZGViX2luZm8oIkNBTSBSZWFkeSIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXNsZWVwKDUwMDApOworCitmYWlsZWQ6CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3Nsb3Rfc2h1dGRvd24oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwgaW50IHNsb3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3Nsb3RfdHNfZW5hYmxlKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90KQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCWRlYl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJlcSA9IDB4Qzc7CisJdmFsdWUgPSAxOworCWluZGV4ID0gMDsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCitmYWlsZWQ6CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3BvbGxfc2xvdF9zdGF0dXMoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwgaW50IHNsb3QsIGludCBvcGVuKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisJdTggYlsxMl07CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCisJcmVxID0gMHhDNTsKKwl2YWx1ZSA9IDA7CisJaW5kZXggPSAwOworCWJsZW4gPSAxOworCisJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgYiwgYmxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJd2FybigidXNiIGluIG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0gZWxzZQorCQlyZXQgPSAwOworCisJaWYgKGJbMF0gPT0gMCkgeworCQlyZXQgPSAwOworCisJfSBlbHNlIGlmIChiWzBdID09IDEpIHsKKwkJcmV0ID0gRFZCX0NBX0VONTAyMjFfUE9MTF9DQU1fUFJFU0VOVCB8CisJCSAgICAgIERWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1JFQURZOworCX0KKworCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIGF6NjAyN19jaV91bmluaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZTsKKworCWRlYl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKworCWlmIChOVUxMID09IGQpCisJCXJldHVybjsKKworCXN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKwlpZiAoTlVMTCA9PSBzdGF0ZSkKKwkJcmV0dXJuOworCisJaWYgKE5VTEwgPT0gc3RhdGUtPmNhLmRhdGEpCisJCXJldHVybjsKKworCWR2Yl9jYV9lbjUwMjIxX3JlbGVhc2UoJnN0YXRlLT5jYSk7CisKKwltZW1zZXQoJnN0YXRlLT5jYSwgMCwgc2l6ZW9mKHN0YXRlLT5jYSkpOworfQorCisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX2luaXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBhLT5kZXY7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKwlpbnQgcmV0OworCisJZGViX2luZm8oIiVzIiwgX19mdW5jX18pOworCisJbXV0ZXhfaW5pdCgmc3RhdGUtPmNhX211dGV4KTsKKworCXN0YXRlLT5jYS5vd25lcgkJCT0gVEhJU19NT0RVTEU7CisJc3RhdGUtPmNhLnJlYWRfYXR0cmlidXRlX21lbQk9IGF6NjAyN19jaV9yZWFkX2F0dHJpYnV0ZV9tZW07CisJc3RhdGUtPmNhLndyaXRlX2F0dHJpYnV0ZV9tZW0JPSBhejYwMjdfY2lfd3JpdGVfYXR0cmlidXRlX21lbTsKKwlzdGF0ZS0+Y2EucmVhZF9jYW1fY29udHJvbAk9IGF6NjAyN19jaV9yZWFkX2NhbV9jb250cm9sOworCXN0YXRlLT5jYS53cml0ZV9jYW1fY29udHJvbAk9IGF6NjAyN19jaV93cml0ZV9jYW1fY29udHJvbDsKKwlzdGF0ZS0+Y2Euc2xvdF9yZXNldAkJPSBhejYwMjdfY2lfc2xvdF9yZXNldDsKKwlzdGF0ZS0+Y2Euc2xvdF9zaHV0ZG93bgkJPSBhejYwMjdfY2lfc2xvdF9zaHV0ZG93bjsKKwlzdGF0ZS0+Y2Euc2xvdF90c19lbmFibGUJPSBhejYwMjdfY2lfc2xvdF90c19lbmFibGU7CisJc3RhdGUtPmNhLnBvbGxfc2xvdF9zdGF0dXMJPSBhejYwMjdfY2lfcG9sbF9zbG90X3N0YXR1czsKKwlzdGF0ZS0+Y2EuZGF0YQkJCT0gZDsKKworCXJldCA9IGR2Yl9jYV9lbjUwMjIxX2luaXQoJmEtPmR2Yl9hZGFwLAorCQkJCSAgJnN0YXRlLT5jYSwKKwkJCQkgIDAsIC8qIGZsYWdzICovCisJCQkJICAxKTsvKiBuX3Nsb3RzICovCisJaWYgKHJldCAhPSAwKSB7CisJCWVycigiQ2Fubm90IGluaXRpYWxpemUgQ0k6IEVycm9yICVkLiIsIHJldCk7CisJCW1lbXNldCgmc3RhdGUtPmNhLCAwLCBzaXplb2Yoc3RhdGUtPmNhKSk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGViX2luZm8oIkNJIGluaXRpYWxpemVkLiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCitzdGF0aWMgaW50IGF6NjAyN19yZWFkX21hY19hZGRyKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggbWFjWzZdKQoreworCWF6NjAyN191c2JfaW5fb3AoZCwgMHhiNywgNiwgMCwgJm1hY1swXSwgNik7CisJcmV0dXJuIDA7Cit9CisqLworCitzdGF0aWMgaW50IGF6NjAyN19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCisJdTggYnVmOworCWludCByZXQ7CisJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IGZlLT5kdmItPnByaXY7CisKKwlzdHJ1Y3QgaTJjX21zZyBpMmNfbXNnID0geworCQkuYWRkcgk9IDB4OTksCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSAmYnVmLAorCQkubGVuCT0gMQorCX07CisKKwkvKgorCSAqIDIgICAtLTE4dgorCSAqIDEgICAtLTEzdgorCSAqIDAgICAtLW9mZgorCSAqLworCXN3aXRjaCAodm9sdGFnZSkgeworCWNhc2UgU0VDX1ZPTFRBR0VfMTM6CisJCWJ1ZiA9IDE7CisJCXJldCA9IGkyY190cmFuc2ZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJmkyY19tc2csIDEpOworCQlicmVhazsKKworCWNhc2UgU0VDX1ZPTFRBR0VfMTg6CisJCWJ1ZiA9IDI7CisJCXJldCA9IGkyY190cmFuc2ZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJmkyY19tc2csIDEpOworCQlicmVhazsKKworCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCQlidWYgPSAwOworCQlyZXQgPSBpMmNfdHJhbnNmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZpMmNfbXNnLCAxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBhejYwMjdfZnJvbnRlbmRfcG93ZXJvbihzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwlyZXEgPSAweEJDOworCXZhbHVlID0gMTsgLyogcG93ZXIgb24gKi8KKwlpbmRleCA9IDM7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IGF6NjAyN19mcm9udGVuZF9yZXNldChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwkvKiByZXNldCBkZW1vZHVsYXRvciAqLworCXJlcSA9IDB4QzA7CisJdmFsdWUgPSAxOyAvKiBoaWdoICovCisJaW5kZXggPSAzOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoYWRhcC0+ZGV2LCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJlcSA9IDB4QzA7CisJdmFsdWUgPSAwOyAvKiBsb3cgKi8KKwlpbmRleCA9IDM7CisJYmxlbiA9IDA7CisJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwltc2xlZXBfaW50ZXJydXB0aWJsZSgyMDApOworCisJcmVxID0gMHhDMDsKKwl2YWx1ZSA9IDE7IC8qaGlnaCAqLworCWluZGV4ID0gMzsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwltc2xlZXBfaW50ZXJydXB0aWJsZSgyMDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF6NjAyN19mcm9udGVuZF90c2J5cGFzcyhzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpCit7CisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCS8qIFRTIHBhc3N0aHJvdWdoICovCisJcmVxID0gMHhDNzsKKwl2YWx1ZSA9IG9ub2ZmOworCWluZGV4ID0gMDsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhejYwMjdfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisKKwlhejYwMjdfZnJvbnRlbmRfcG93ZXJvbihhZGFwKTsKKwlhejYwMjdfZnJvbnRlbmRfcmVzZXQoYWRhcCk7CisKKwlkZWJfaW5mbygiYWRhcCA9ICVwLCBkZXYgPSAlcFxuIiwgYWRhcCwgYWRhcC0+ZGV2KTsKKwlhZGFwLT5mZSA9IHN0YjA4OTlfYXR0YWNoKCZhejYwMjdfc3RiMDg5OV9jb25maWcsICZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKworCWlmIChhZGFwLT5mZSkgeworCQlkZWJfaW5mbygiZm91bmQgU1RCMDg5OSBEVkItUy9EVkItUzIgZnJvbnRlbmQgQDB4JTAyeCIsIGF6NjAyN19zdGIwODk5X2NvbmZpZy5kZW1vZF9hZGRyZXNzKTsKKwkJaWYgKHN0YjYxMDBfYXR0YWNoKGFkYXAtPmZlLCAmYXo2MDI3X3N0YjYxMDBfY29uZmlnLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpIHsKKwkJCWRlYl9pbmZvKCJmb3VuZCBTVEI2MTAwIERWQi1TL0RWQi1TMiBmcm9udGVuZCBAMHglMDJ4IiwgYXo2MDI3X3N0YjYxMDBfY29uZmlnLnR1bmVyX2FkZHJlc3MpOworCQkJYWRhcC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGF6NjAyN19zZXRfdm9sdGFnZTsKKwkJCWF6NjAyN19jaV9pbml0KGFkYXApOworCQl9IGVsc2UgeworCQkJYWRhcC0+ZmUgPSBOVUxMOworCQl9CisJfSBlbHNlCisJCXdhcm4oIm5vIGZyb250LWVuZCBhdHRhY2hlZFxuIik7CisKKwlhejYwMjdfZnJvbnRlbmRfdHNieXBhc3MoYWRhcCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGF6NjAyN19wcm9wZXJ0aWVzOworCitzdGF0aWMgdm9pZCBhejYwMjdfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlhejYwMjdfY2lfdW5pbml0KGQpOworCWR2Yl91c2JfZGV2aWNlX2V4aXQoaW50Zik7Cit9CisKKworc3RhdGljIGludCBhejYwMjdfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLAorCQkJCSAgICZhejYwMjdfcHJvcGVydGllcywKKwkJCQkgICBUSElTX01PRFVMRSwKKwkJCQkgICBOVUxMLAorCQkJCSAgIGFkYXB0ZXJfbnIpOworfQorCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgYXo2MDI3X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sIGludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgaSA9IDAsIGogPSAwLCBsZW4gPSAwOworCWludCByZXQ7CisJdTE2IGluZGV4OworCXUxNiB2YWx1ZTsKKwlpbnQgbGVuZ3RoOworCXU4IHJlcTsKKwl1OCBkYXRhWzI1Nl07CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlpZiAobnVtID4gMikKKwkJd2FybigibW9yZSB0aGFuIDIgaTJjIG1lc3NhZ2VzIGF0IGEgdGltZSBpcyBub3QgaGFuZGxlZCB5ZXQuIFRPRE8uIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKworCQlpZiAobXNnW2ldLmFkZHIgPT0gMHg5OSkgeworCQkJcmVxID0gMHhCRTsKKwkJCWluZGV4ID0gMDsKKwkJCXZhbHVlID0gbXNnW2ldLmJ1ZlswXSAmIDB4MDBmZjsKKwkJCWxlbmd0aCA9IDE7CisJCQlhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgZGF0YSwgbGVuZ3RoKTsKKwkJfQorCisJCWlmIChtc2dbaV0uYWRkciA9PSAweGQwKSB7CisJCQkvKiB3cml0ZS9yZWFkIHJlcXVlc3QgKi8KKwkJCWlmIChpICsgMSA8IG51bSAmJiAobXNnW2kgKyAxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQkJCXJlcSA9IDB4Qjk7CisJCQkJaW5kZXggPSAoKChtc2dbaV0uYnVmWzBdIDw8IDgpICYgMHhmZjAwKSB8IChtc2dbaV0uYnVmWzFdICYgMHgwMGZmKSk7CisJCQkJdmFsdWUgPSBtc2dbaV0uYWRkciArIChtc2dbaV0ubGVuIDw8IDgpOworCQkJCWxlbmd0aCA9IG1zZ1tpICsgMV0ubGVuICsgNjsKKwkJCQlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBkYXRhLCBsZW5ndGgpOworCQkJCWxlbiA9IG1zZ1tpICsgMV0ubGVuOworCQkJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKKwkJCQkJbXNnW2kgKyAxXS5idWZbal0gPSBkYXRhW2ogKyA1XTsKKworCQkJCWkrKzsKKwkJCX0gZWxzZSB7CisKKwkJCQlpZiAobXNnW2ldLmFkZHIgPT0gMHhkMCkgeworCQkJCQkvKiBkZW1vZCAxNmJpdCBhZGRyICovCisJCQkJCXJlcSA9IDB4QkQ7CisJCQkJCWluZGV4ID0gKCgobXNnW2ldLmJ1ZlswXSA8PCA4KSAmIDB4ZmYwMCkgfCAobXNnW2ldLmJ1ZlsxXSAmIDB4MDBmZikpOworCQkJCQl2YWx1ZSA9IG1zZ1tpXS5hZGRyICsgKDIgPDwgOCk7CisJCQkJCWxlbmd0aCA9IG1zZ1tpXS5sZW4gLSAyOworCQkJCQlsZW4gPSBtc2dbaV0ubGVuIC0gMjsKKwkJCQkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorCQkJCQkJZGF0YVtqXSA9IG1zZ1tpXS5idWZbaiArIDJdOworCisJCQkJfQorCQkJCWF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBkYXRhLCBsZW5ndGgpOworCQkJfQorCQl9CisKKwkJaWYgKG1zZ1tpXS5hZGRyID09IDB4YzApIHsKKwkJCWlmIChtc2dbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCisJCQkJcmVxID0gMHhCOTsKKwkJCQlpbmRleCA9IDB4MDsKKwkJCQl2YWx1ZSA9IG1zZ1tpXS5hZGRyOworCQkJCWxlbmd0aCA9IG1zZ1tpXS5sZW4gKyA2OworCQkJCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIGxlbmd0aCk7CisJCQkJbGVuID0gbXNnW2ldLmxlbjsKKwkJCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCQkJCW1zZ1tpXS5idWZbal0gPSBkYXRhW2ogKyA1XTsKKworCQkJfSBlbHNlIHsKKworCQkJCXJlcSA9IDB4QkQ7CisJCQkJaW5kZXggPSBtc2dbaV0uYnVmWzBdICYgMHgwMEZGOworCQkJCXZhbHVlID0gbXNnW2ldLmFkZHIgKyAoMSA8PCA4KTsKKwkJCQlsZW5ndGggPSBtc2dbaV0ubGVuIC0gMTsKKwkJCQlsZW4gPSBtc2dbaV0ubGVuIC0gMTsKKworCQkJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKKwkJCQkJZGF0YVtqXSA9IG1zZ1tpXS5idWZbaiArIDFdOworCisJCQkJYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIGxlbmd0aCk7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCisJcmV0dXJuIGk7Cit9CisKKworc3RhdGljIHUzMiBhejYwMjdfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19JMkM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBhejYwMjdfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBhejYwMjdfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBhejYwMjdfaTJjX2Z1bmMsCit9OworCitpbnQgYXo2MDI3X2lkZW50aWZ5X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJICBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcHJvcHMsCisJCQkgIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiAqKmRlc2MsCisJCQkgIGludCAqY29sZCkKK3sKKwl1OCBiWzE2XTsKKwlzMTYgcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkJICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkJICAweGI3LAorCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiwKKwkJCQkgIDYsCisJCQkJICAwLAorCQkJCSAgYiwKKwkJCQkgIDYsCisJCQkJICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisKKwkqY29sZCA9IHJldCA8PSAwOworCisJZGViX2luZm8oImNvbGQ6ICVkXG4iLCAqY29sZCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGF6NjAyN191c2JfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BWlVSRVdBVkUsIFVTQl9QSURfQVpVUkVXQVZFX0FaNjAyNykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywgIFVTQl9QSURfVEVSUkFURUNfRFZCUzJDSSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9URUNITklTQVQsIFVTQl9QSURfVEVDSE5JU0FUX1VTQjJfSERDSSkgfSwKKwl7IH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXo2MDI3X3VzYl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBhejYwMjdfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCisJLmZpcm13YXJlICAgICAgICAgICAgPSAiZHZiLXVzYi1hejYwMjctMDMuZnciLAorCS5ub19yZWNvbm5lY3QgICAgICAgID0gMSwKKworCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlKSwKKwkuaWRlbnRpZnlfc3RhdGUJCT0gYXo2MDI3X2lkZW50aWZ5X3N0YXRlLAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CisJCQkuc3RyZWFtaW5nX2N0cmwgICA9IGF6NjAyN19zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gYXo2MDI3X2Zyb250ZW5kX2F0dGFjaCwKKworCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS5jb3VudCA9IDEwLAorCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJCQl9CisJCQkJfQorCQkJfSwKKwkJfQorCX0sCisvKgorCS5wb3dlcl9jdHJsICAgICAgID0gYXo2MDI3X3Bvd2VyX2N0cmwsCisJLnJlYWRfbWFjX2FkZHJlc3MgPSBhejYwMjdfcmVhZF9tYWNfYWRkciwKKyAqLworCS5yY19rZXlfbWFwICAgICAgID0gYXo2MDI3X3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGF6NjAyN19yY19rZXlzKSwKKwkucmNfaW50ZXJ2YWwgICAgICA9IDQwMCwKKwkucmNfcXVlcnkgICAgICAgICA9IGF6NjAyN19yY19xdWVyeSwKKwkuaTJjX2FsZ28gICAgICAgICA9ICZhejYwMjdfaTJjX2FsZ28sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsKKwkJCS5uYW1lID0gIkFaVVJFV0FWRSBEVkItUy9TMiBVU0IyLjAgKEFaNjAyNykiLAorCQkJLmNvbGRfaWRzID0geyAmYXo2MDI3X3VzYl90YWJsZVswXSwgTlVMTCB9LAorCQkJLndhcm1faWRzID0geyBOVUxMIH0sCisJCX0sCisJCXsgTlVMTCB9LAorCX0KK307CisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhejYwMjdfdXNiX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiZHZiX3VzYl9hejYwMjciLAorCS5wcm9iZSAJCT0gYXo2MDI3X3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCAJPSBhejYwMjdfdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlIAk9IGF6NjAyN191c2JfdGFibGUsCit9OworCisvKiBtb2R1bGUgc3R1ZmYgKi8KK3N0YXRpYyBpbnQgX19pbml0IGF6NjAyN191c2JfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhejYwMjdfdXNiX2RyaXZlcik7CisJaWYgKHJlc3VsdCkgeworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuICglZCkiLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXo2MDI3X3VzYl9tb2R1bGVfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgZnJvbSB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZhejYwMjdfdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGF6NjAyN191c2JfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoYXo2MDI3X3VzYl9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFkYW1zIFh1IDxBZGFtcy54dUBhendhdmUuY29tLmNuPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEFaVVJFV0FWRSBEVkItUy9TMiBVU0IyLjAgKEFaNjAyNykiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYWZlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0RWQl9VU0JfVlA2MDI3X0hfCisjZGVmaW5lIF9EVkJfVVNCX1ZQNjAyN19IXworCisjZGVmaW5lIERWQl9VU0JfTE9HX1BSRUZJWCAiYXo2MDI3IgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworCitleHRlcm4gaW50IGR2Yl91c2JfYXo2MDI3X2RlYnVnOworI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfYXo2MDI3X2RlYnVnLCAweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfeGZlcihhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfYXo2MDI3X2RlYnVnLCAweDAyLCBhcmdzKQorI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfYXo2MDI3X2RlYnVnLCAweDA0LCBhcmdzKQorI2RlZmluZSBkZWJfZmUoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfYXo2MDI3X2RlYnVnLCAweDA4LCBhcmdzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCAwNWZiMjhlOS4uYTdiODQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwpAQCAtMTE4NCw2ICsxMTg0LDkgQEAKIAkub3NjX2Nsa19mcmVxID0gMzA0MDAsIC8qIGluIGtIeiAqLwogCS5pZl9mcmVxID0gMCwgLyogemVybyBJRiAqLwogCS56aWZfc3dhcF9pcSA9IDEsCisJLmFnY19taW4gPSAweDJFLAorCS5hZ2NfbWF4ID0gMHg5MCwKKwkuYWdjX2hvbGRfbG9vcCA9IDAsCiB9OwogCiBzdGF0aWMgaW50IGN4dXNiX215Z2ljYV9kNjg5X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaAppbmRleCA0OTVhOTA1Li44M2ZjMjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaApAQCAtNDIsNyArNDIsNiBAQAogCXUxNiBtdDIwNjBfaWYxWzJdOwogCXU4IHJjX3RvZ2dsZTsKIAl1OCByY19jb3VudGVyOwotCXU4IHJjX2Z1bmNfdmVyc2lvbjsKIAl1OCBpc19kaWI3MDAwcGM7CiAJdTggZndfdXNlX25ld19pMmNfYXBpOwogCXU4IGRpc2FibGVfc3RyZWFtaW5nX21hc3Rlcl9tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKaW5kZXggMGQzYzlhOS4uNGY5NjFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCkBAIC00NzEsMTQgKzQ3MSwyMDkgQEAKIAlyZXR1cm4gZGliMDcwMF9jdHJsX3dyKGFkYXAtPmRldiwgYiwgNCk7CiB9CiAKKy8qIE51bWJlciBvZiBrZXlwcmVzc2VzIHRvIGlnbm9yZSBiZWZvcmUgc3RhcnQgcmVwZWF0aW5nICovCisjZGVmaW5lIFJDX1JFUEVBVF9ERUxBWV9WMV8yMCAxMAorCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFJDIHJlc3BvbnNlIHBhY2tldCBzdGFydGluZyBpbiBmaXJtd2FyZSAxLjIwICovCitzdHJ1Y3QgZGliMDcwMF9yY19yZXNwb25zZSB7CisJdTggcmVwb3J0X2lkOworCXU4IGRhdGFfc3RhdGU7CisJdTE2IHN5c3RlbTsKKwl1OCBkYXRhOworCXU4IG5vdF9kYXRhOworfTsKKyNkZWZpbmUgUkNfTVNHX1NJWkVfVjFfMjAgNgorCitzdGF0aWMgdm9pZCBkaWIwNzAwX3JjX3VyYl9jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnB1cmIpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gcHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcDsKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3Q7CisJc3RydWN0IGRpYjA3MDBfcmNfcmVzcG9uc2UgcG9sbF9yZXBseTsKKwl1OCAqYnVmOworCWludCBmb3VuZCA9IDA7CisJdTMyIGV2ZW50OworCWludCBzdGF0ZTsKKwlpbnQgaTsKKworCWRlYl9pbmZvKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisJaWYgKGQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGQtPnJjX2lucHV0X2RldiA9PSBOVUxMKSB7CisJCS8qIFRoaXMgd2lsbCBvY2N1ciBpZiBkaXNhYmxlX3JjX3BvbGxpbmc9MSAqLworCQl1c2JfZnJlZV91cmIocHVyYik7CisJCXJldHVybjsKKwl9CisKKwlrZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCXN0ID0gZC0+cHJpdjsKKwlidWYgPSAodTggKilwdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlpZiAocHVyYi0+c3RhdHVzIDwgMCkgeworCQlkZWJfaW5mbygiZGlzY29udGludWluZyBwb2xsaW5nXG4iKTsKKwkJdXNiX2ZyZWVfdXJiKHB1cmIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHB1cmItPmFjdHVhbF9sZW5ndGggIT0gUkNfTVNHX1NJWkVfVjFfMjApIHsKKwkJZGViX2luZm8oIm1hbGZvcm1lZCByYyBtc2cgc2l6ZT0lZFxuIiwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJLyogU2V0IGluaXRpYWwgcmVzdWx0cyBpbiBjYXNlIHdlIGV4aXQgdGhlIGZ1bmN0aW9uIGVhcmx5ICovCisJZXZlbnQgPSAwOworCXN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOworCisJZGViX2RhdGEoIklSIHJhdyAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAobGVuICVkKVxuIiwgYnVmWzBdLAorCQkgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJc3dpdGNoIChkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8pIHsKKwljYXNlIDA6CisJCS8qIE5FQyBQcm90b2NvbCAqLworCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSAwOworCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAxOworCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSBidWZbMl07CisJCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKKwkJcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOworCisJCS8qIE5FQyBwcm90b2NvbCBzZW5kcyByZXBlYXQgY29kZSBhcyAwIDAgMCBGRiAqLworCQlpZiAoKHBvbGxfcmVwbHkuc3lzdGVtID09IDB4MDApICYmIChwb2xsX3JlcGx5LmRhdGEgPT0gMHgwMCkKKwkJICAgICYmIChwb2xsX3JlcGx5Lm5vdF9kYXRhID09IDB4ZmYpKSB7CisJCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAyOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogUkM1IFByb3RvY29sICovCisJCXBvbGxfcmVwbHkucmVwb3J0X2lkICA9IGJ1ZlswXTsKKwkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gYnVmWzFdOworCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOworCQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07CisJCXBvbGxfcmVwbHkubm90X2RhdGEgICA9IGJ1Zls1XTsKKwkJYnJlYWs7CisJfQorCisJaWYgKChwb2xsX3JlcGx5LmRhdGEgKyBwb2xsX3JlcGx5Lm5vdF9kYXRhKSAhPSAweGZmKSB7CisJCS8qIEtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrICovCisJCWVycigia2V5IGZhaWxlZCBpbnRlZ3JpdHkgY2hlY2s6ICUwNHggJTAyeCAlMDJ4IiwKKwkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLAorCQkgICAgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwlkZWJfZGF0YSgicmlkPSUwMnggZHM9JTAyeCBzbT0lMDR4IGQ9JTAyeCBuZD0lMDJ4XG4iLAorCQkgcG9sbF9yZXBseS5yZXBvcnRfaWQsIHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSwKKwkJIHBvbGxfcmVwbHkuc3lzdGVtLCBwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOworCisJLyogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gKHBvbGxfcmVwbHkuc3lzdGVtICYgMHhmZikgJiYKKwkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IHBvbGxfcmVwbHkuZGF0YSkgeworCQkJZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZCA9PSAwKSB7CisJCWVycigiVW5rbm93biByZW1vdGUgY29udHJvbGxlciBrZXk6ICUwNHggJTAyeCAlMDJ4IiwKKwkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLCBwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOworCQlkLT5sYXN0X2V2ZW50ID0gMDsKKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwlpZiAocG9sbF9yZXBseS5kYXRhX3N0YXRlID09IDEpIHsKKwkJLyogTmV3IGtleSBoaXQgKi8KKwkJc3QtPnJjX2NvdW50ZXIgPSAwOworCQlldmVudCA9IGtleW1hcFtpXS5ldmVudDsKKwkJc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CisJCWQtPmxhc3RfZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJfSBlbHNlIGlmIChwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPT0gMikgeworCQkvKiBLZXkgcmVwZWF0ZWQgKi8KKwkJc3QtPnJjX2NvdW50ZXIrKzsKKworCQkvKiBwcmV2ZW50cyB1bndhbnRlZCBkb3VibGUgaGl0cyAqLworCQlpZiAoc3QtPnJjX2NvdW50ZXIgPiBSQ19SRVBFQVRfREVMQVlfVjFfMjApIHsKKwkJCWV2ZW50ID0gZC0+bGFzdF9ldmVudDsKKwkJCXN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOworCQkJc3QtPnJjX2NvdW50ZXIgPSBSQ19SRVBFQVRfREVMQVlfVjFfMjA7CisJCX0KKwl9IGVsc2UgeworCQllcnIoIlVua25vd24gZGF0YSBzdGF0ZSBbJWRdIiwgcG9sbF9yZXBseS5kYXRhX3N0YXRlKTsKKwl9CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ6CisJCWJyZWFrOworCWNhc2UgUkVNT1RFX0tFWV9QUkVTU0VEOgorCQlkZWJfaW5mbygia2V5IHByZXNzZWRcbiIpOworCQlkLT5sYXN0X2V2ZW50ID0gZXZlbnQ7CisJY2FzZSBSRU1PVEVfS0VZX1JFUEVBVDoKKwkJZGViX2luZm8oImtleSByZXBlYXRlZFxuIik7CisJCWlucHV0X2V2ZW50KGQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBldmVudCwgMSk7CisJCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKKwkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGQtPmxhc3RfZXZlbnQsIDApOworCQlpbnB1dF9zeW5jKGQtPnJjX2lucHV0X2Rldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworcmVzdWJtaXQ6CisJLyogQ2xlYW4gdGhlIGJ1ZmZlciBiZWZvcmUgd2UgcmVxdWV1ZSAqLworCW1lbXNldChwdXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIFJDX01TR19TSVpFX1YxXzIwKTsKKworCS8qIFJlcXVldWUgVVJCICovCisJdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0FUT01JQyk7Cit9CisKIGludCBkaWIwNzAwX3JjX3NldHVwKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OwogCXU4IHJjX3NldHVwWzNdID0ge1JFUVVFU1RfU0VUX1JDLCBkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8sIDB9OwotCWludCBpID0gZGliMDcwMF9jdHJsX3dyKGQsIHJjX3NldHVwLCAzKTsKKwlzdHJ1Y3QgdXJiICpwdXJiOworCWludCByZXQ7CisJaW50IGk7CisKKwlpZiAoZC0+cHJvcHMucmNfa2V5X21hcCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIFNldCB0aGUgSVIgbW9kZSAqLworCWkgPSBkaWIwNzAwX2N0cmxfd3IoZCwgcmNfc2V0dXAsIDMpOwogCWlmIChpPDApIHsKIAkJZXJyKCJpciBwcm90b2NvbCBzZXR1cCBmYWlsZWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KKworCWlmIChzdC0+ZndfdmVyc2lvbiA8IDB4MTAyMDApCisJCXJldHVybiAwOworCisJLyogU3RhcnRpbmcgaW4gZmlybXdhcmUgMS4yMCwgdGhlIFJDIGluZm8gaXMgcHJvdmlkZWQgb24gYSBidWxrIHBpcGUgKi8KKwlwdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAocHVyYiA9PSBOVUxMKSB7CisJCWVycigicmMgdXNiIGFsbG9jIHVyYiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga3phbGxvYyhSQ19NU0dfU0laRV9WMV8yMCwgR0ZQX0tFUk5FTCk7CisJaWYgKHB1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCWVycigicmMga3phbGxvYyBmYWlsZWRcbiIpOworCQl1c2JfZnJlZV91cmIocHVyYik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJdXNiX2ZpbGxfYnVsa191cmIocHVyYiwgZC0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGQtPnVkZXYsIDEpLAorCQkJICBwdXJiLT50cmFuc2Zlcl9idWZmZXIsIFJDX01TR19TSVpFX1YxXzIwLAorCQkJICBkaWIwNzAwX3JjX3VyYl9jb21wbGV0aW9uLCBkKTsKKworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgIT0gMCkgeworCQllcnIoInJjIHN1Ym1pdCB1cmIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCA0NDk3MmQwLi4zNGVhYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTQ3MiwyMCArNDcyLDI1IEBACiAKIC8qIE51bWJlciBvZiBrZXlwcmVzc2VzIHRvIGlnbm9yZSBiZWZvcmUgc3RhcnQgcmVwZWF0aW5nICovCiAjZGVmaW5lIFJDX1JFUEVBVF9ERUxBWSA2Ci0jZGVmaW5lIFJDX1JFUEVBVF9ERUxBWV9WMV8yMCAxMAogCi0KLQotLyogVXNlZCBieSBmaXJtd2FyZSB2ZXJzaW9ucyA8IDEuMjAgKGRlcHJlY2F0ZWQpICovCi1zdGF0aWMgaW50IGRpYjA3MDBfcmNfcXVlcnlfbGVnYWN5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwKLQkJCQkgICBpbnQgKnN0YXRlKQorc3RhdGljIGludCBkaWIwNzAwX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKIHsKIAl1OCBrZXlbNF07CiAJaW50IGk7CiAJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOwogCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGQtPnByaXY7CisKIAkqZXZlbnQgPSAwOwogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKworCWlmIChzdC0+ZndfdmVyc2lvbiA+PSAweDEwMjAwKSB7CisJCS8qIEZvciAxLjIwIGZpcm13YXJlICwgV2UgbmVlZCB0byBrZWVwIHRoZSBSQyBwb2xsaW5nCisJCSAgIGNhbGxiYWNrIHNvIHdlIGNhbiByZXVzZSB0aGUgaW5wdXQgZGV2aWNlIHNldHVwIGluCisJCSAgIGR2Yi11c2ItcmVtb3RlLmMuICBIb3dldmVyLCB0aGUgYWN0dWFsIHdvcmsgaXMgYmVpbmcgZG9uZQorCQkgICBpbiB0aGUgYnVsayBVUkIgY29tcGxldGlvbiBoYW5kbGVyLiAqLworCQlyZXR1cm4gMDsKKwl9CisKIAlpPWRpYjA3MDBfY3RybF9yZChkLHJjX3JlcXVlc3QsMixrZXksNCk7CiAJaWYgKGk8PTApIHsKIAkJZXJyKCJSQyBRdWVyeSBGYWlsZWQiKTsKQEAgLTU1NywxNDkgKzU2Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgUkMgcmVzcG9uc2UgcGFja2V0IHN0YXJ0aW5nIGluIGZpcm13YXJlIDEuMjAgKi8KLXN0cnVjdCBkaWIwNzAwX3JjX3Jlc3BvbnNlIHsKLQl1OCByZXBvcnRfaWQ7Ci0JdTggZGF0YV9zdGF0ZTsKLQl1MTYgc3lzdGVtOwotCXU4IGRhdGE7Ci0JdTggbm90X2RhdGE7Ci19OwotCi0vKiBUaGlzIHN1cHBvcnRzIHRoZSBuZXcgSVIgcmVzcG9uc2UgZm9ybWF0IGZvciBmaXJtd2FyZSB2MS4yMCAqLwotc3RhdGljIGludCBkaWIwNzAwX3JjX3F1ZXJ5X3YxXzIwKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwKLQkJCQkgIGludCAqc3RhdGUpCi17Ci0Jc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOwotCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGQtPnByaXY7Ci0Jc3RydWN0IGRpYjA3MDBfcmNfcmVzcG9uc2UgcG9sbF9yZXBseTsKLQl1OCBidWZbNl07Ci0JaW50IGk7Ci0JaW50IHN0YXR1czsKLQlpbnQgYWN0bGVuOwotCWludCBmb3VuZCA9IDA7Ci0KLQkvKiBTZXQgaW5pdGlhbCByZXN1bHRzIGluIGNhc2Ugd2UgZXhpdCB0aGUgZnVuY3Rpb24gZWFybHkgKi8KLQkqZXZlbnQgPSAwOwotCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKLQotCS8qIEZpcm13YXJlIHYxLjIwIHByb3ZpZGVzIFJDIGRhdGEgdmlhIGJ1bGsgZW5kcG9pbnQgMSAqLwotCXN0YXR1cyA9IHVzYl9idWxrX21zZyhkLT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZC0+dWRldiwgMSksIGJ1ZiwKLQkJCSAgICAgIHNpemVvZihidWYpLCAmYWN0bGVuLCA1MCk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJLyogTm8gZGF0YSBhdmFpbGFibGUgKG1lYW5pbmcgbm8ga2V5IHByZXNzKSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQotCXN3aXRjaCAoZHZiX3VzYl9kaWIwNzAwX2lyX3Byb3RvKSB7Ci0JY2FzZSAwOgotCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSAwOwotCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAxOwotCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSBidWZbMl07Ci0JCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKLQkJcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOwotCi0JCS8qIE5FQyBwcm90b2NvbCBzZW5kcyByZXBlYXQgY29kZSBhcyAwIDAgMCBGRiAqLwotCQlpZiAoKHBvbGxfcmVwbHkuc3lzdGVtID09IDB4MDApICYmIChwb2xsX3JlcGx5LmRhdGEgPT0gMHgwMCkKLQkJICAgICYmIChwb2xsX3JlcGx5Lm5vdF9kYXRhID09IDB4ZmYpKSB7Ci0JCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAyOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQlpZiAoYWN0bGVuICE9IHNpemVvZihidWYpKSB7Ci0JCS8qIFdlIGRpZG4ndCBnZXQgYmFjayB0aGUgNiBieXRlIG1lc3NhZ2Ugd2UgZXhwZWN0ZWQgKi8KLQkJZXJyKCJVbmV4cGVjdGVkIFJDIHJlc3BvbnNlIHNpemUgWyVkXSIsIGFjdGxlbik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSBidWZbMF07Ci0JcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gYnVmWzFdOwotCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOwotCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKLQlwb2xsX3JlcGx5Lm5vdF9kYXRhICAgPSBidWZbNV07Ci0KLQkJYnJlYWs7Ci0JfQotCi0JaWYgKChwb2xsX3JlcGx5LmRhdGEgKyBwb2xsX3JlcGx5Lm5vdF9kYXRhKSAhPSAweGZmKSB7Ci0JCS8qIEtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrICovCi0JCWVycigia2V5IGZhaWxlZCBpbnRlZ3JpdHkgY2hlY2s6ICUwNHggJTAyeCAlMDJ4IiwKLQkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLAotCQkgICAgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCi0JLyogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gKHBvbGxfcmVwbHkuc3lzdGVtICYgMHhmZikgJiYKLQkJCXJjNV9kYXRhKCZrZXltYXBbaV0pID09IHBvbGxfcmVwbHkuZGF0YSkgewotCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoZm91bmQgPT0gMCkgewotCQllcnIoIlVua25vd24gcmVtb3RlIGNvbnRyb2xsZXIga2V5OiAlMDR4ICUwMnggJTAyeCIsCi0JCQlwb2xsX3JlcGx5LnN5c3RlbSwKLQkJCXBvbGxfcmVwbHkuZGF0YSwgcG9sbF9yZXBseS5ub3RfZGF0YSk7Ci0JCWQtPmxhc3RfZXZlbnQgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocG9sbF9yZXBseS5kYXRhX3N0YXRlID09IDEpIHsKLQkJLyogTmV3IGtleSBoaXQgKi8KLQkJc3QtPnJjX2NvdW50ZXIgPSAwOwotCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7Ci0JCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJZC0+bGFzdF9ldmVudCA9IGtleW1hcFtpXS5ldmVudDsKLQl9IGVsc2UgaWYgKHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9PSAyKSB7Ci0JCS8qIEtleSByZXBlYXRlZCAqLwotCQlzdC0+cmNfY291bnRlcisrOwotCi0JCS8qIHByZXZlbnRzIHVud2FudGVkIGRvdWJsZSBoaXRzICovCi0JCWlmIChzdC0+cmNfY291bnRlciA+IFJDX1JFUEVBVF9ERUxBWV9WMV8yMCkgewotCQkJKmV2ZW50ID0gZC0+bGFzdF9ldmVudDsKLQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJCXN0LT5yY19jb3VudGVyID0gUkNfUkVQRUFUX0RFTEFZX1YxXzIwOwotCQl9Ci0JfSBlbHNlIHsKLQkJZXJyKCJVbmtub3duIGRhdGEgc3RhdGUgWyVkXSIsIHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGliMDcwMF9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCi17Ci0Jc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKLQotCS8qIEJlY2F1c2Ugc29tZSBwZW9wbGUgbWF5IGhhdmUgaW1wcm9wZXJseSBuYW1lZCBmaXJtd2FyZSBmaWxlcywKLQkgICBsZXQncyBmaWd1cmUgb3V0IHdoZXRoZXIgdG8gdXNlIHRoZSBuZXcgZmlybXdhcmUgY2FsbCBvciB0aGUgbGVnYWN5Ci0JICAgY2FsbCBiYXNlZCBvbiB0aGUgZmlybXdhcmUgdmVyc2lvbiBlbWJlZGRlZCBpbiB0aGUgZmlsZSAqLwotCWlmIChzdC0+cmNfZnVuY192ZXJzaW9uID09IDApIHsKLQkJdTMyIGh3dmVyLCByb212ZXIsIHJhbXZlciwgZnd0eXBlOwotCQlpbnQgcmV0ID0gZGliMDcwMF9nZXRfdmVyc2lvbihkLCAmaHd2ZXIsICZyb212ZXIsICZyYW12ZXIsCi0JCQkJCSAgICAgICZmd3R5cGUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZXJyKCJDb3VsZCBub3QgZGV0ZXJtaW5lIHZlcnNpb24gaW5mbyIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmIChyYW12ZXIgPCAweDEwMjAwKQotCQkJc3QtPnJjX2Z1bmNfdmVyc2lvbiA9IDE7Ci0JCWVsc2UKLQkJCXN0LT5yY19mdW5jX3ZlcnNpb24gPSAyOwotCX0KLQotCWlmIChzdC0+cmNfZnVuY192ZXJzaW9uID09IDIpCi0JCXJldHVybiBkaWIwNzAwX3JjX3F1ZXJ5X3YxXzIwKGQsIGV2ZW50LCBzdGF0ZSk7Ci0JZWxzZQotCQlyZXR1cm4gZGliMDcwMF9yY19xdWVyeV9sZWdhY3koZCwgZXZlbnQsIHN0YXRlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkaWIwNzAwX3JjX2tleXNbXSA9IHsKIAkvKiBLZXkgY29kZXMgZm9yIHRoZSB0aW55IFBpbm5hY2xlIHJlbW90ZSovCiAJeyAweDA3MDAsIEtFWV9NVVRFIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggYmMzNTgxZC4uYWU4YjU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaApAQCAtNjQsNiArNjQsOCBAQAogI2RlZmluZSBVU0JfVklEX0hVTUFYX0NPRVgJCQkweDEwYjkKICNkZWZpbmUgVVNCX1ZJRF83NzQJCQkJMHg3YTY5CiAjZGVmaW5lIFVTQl9WSURfRVZPTFVURVBDCQkJMHgxZTU5CisjZGVmaW5lIFVTQl9WSURfQVpVUkVXQVZFCQkJMHgxM2QzCisjZGVmaW5lIFVTQl9WSURfVEVDSE5JU0FUCQkJMHgxNGY3CiAKIC8qIFByb2R1Y3QgSURzICovCiAjZGVmaW5lIFVTQl9QSURfQURTVEVDSF9VU0IyX0NPTEQJCQkweGEzMzMKQEAgLTEzOCw2ICsxNDAsNyBAQAogI2RlZmluZSBVU0JfUElEX1RXSU5IQU5fVlA3MDIxX0NPTEQJCQkweDMyMDcKICNkZWZpbmUgVVNCX1BJRF9UV0lOSEFOX1ZQNzAyMV9XQVJNCQkJMHgzMjA4CiAjZGVmaW5lIFVTQl9QSURfVElOWVRXSU4JCQkJMHgzMjI2CisjZGVmaW5lIFVTQl9QSURfVElOWVRXSU5fMgkJCQkweGU0MDIKICNkZWZpbmUgVVNCX1BJRF9ETlRWX1RJTllVU0IyX0NPTEQJCQkweDMyMjMKICNkZWZpbmUgVVNCX1BJRF9ETlRWX1RJTllVU0IyX1dBUk0JCQkweDMyMjQKICNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQ09MRAkJCTB4ODEwNQpAQCAtMjA5LDYgKzIxMiw3IEBACiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjcxRQkJCTB4MDIyYgogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3MkUJCQkweDAyMzYKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzNFCQkJMHgwMjM3CisjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjMxMEUJCQkweDMyMTEKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWODAxRQkJCTB4MDIzYQogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY4MDFFX1NFCQkJMHgwMjNiCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczQQkJCTB4MDI0MwpAQCAtMjQ4LDYgKzI1Miw3IEBACiAjZGVmaW5lIFVTQl9QSURfRElHSVZPWF9NSU5JX1NMX1dBUk0JCQkweGUzNjEKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQjJfQ09MRAkJCTB4MGJjNgogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCMl9XQVJNCQkJMHgwYmM3CisjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFYyMDAwRFMJCQkweDZhMDQKICNkZWZpbmUgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfQ09MRAkJCTB4NjAyNQogI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9XQVJNCQkJMHg2MDI2CiAjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1NUSzc3MDBQCQkweDZmMDAKQEAgLTI5MCw1ICsyOTUsNyBAQAogI2RlZmluZSBVU0JfUElEX0ZSSUlPX1dISVRFCQkJCTB4MDAwMQogI2RlZmluZSBVU0JfUElEX1RWV0FZX1BMVVMJCQkJMHgwMDAyCiAjZGVmaW5lIFVTQl9QSURfU1ZFT05fU1RWMjAJCQkJMHhlMzlkCi0KKyNkZWZpbmUgVVNCX1BJRF9BWlVSRVdBVkVfQVo2MDI3CQkJMHgzMjc1CisjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfRFZCUzJDSQkJCTB4MzI3NQorI2RlZmluZSBVU0JfUElEX1RFQ0hOSVNBVF9VU0IyX0hEQ0kJCQkweDAwMDIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKaW5kZXggZTMzMWRiOC4uNWQ5MWY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX2RldmljZSksR0ZQX0tFUk5FTCk7CiAJaWYgKGQgPT0gTlVMTCkgewogCQllcnIoIm5vIG1lbW9yeSBmb3IgJ3N0cnVjdCBkdmJfdXNiX2RldmljZSciKTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZC0+dWRldiA9IHVkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKaW5kZXggNmI1ZGVkOS4uYTAzZWY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwpAQCAtMTA3LDYgKzEwNyw3IEBACiAJCWNhc2UgUkVNT1RFX0tFWV9SRVBFQVQ6CiAJCQlkZWJfcmMoImtleSByZXBlYXRlZFxuIik7CiAJCQlpbnB1dF9ldmVudChkLT5yY19pbnB1dF9kZXYsIEVWX0tFWSwgZXZlbnQsIDEpOworCQkJaW5wdXRfc3luYyhkLT5yY19pbnB1dF9kZXYpOwogCQkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGQtPmxhc3RfZXZlbnQsIDApOwogCQkJaW5wdXRfc3luYyhkLT5yY19pbnB1dF9kZXYpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYwppbmRleCA2NDEzMmMwLi5hY2NjNjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKQEAgLTEsNiArMSw3IEBACiAvKiBEVkIgVVNCIGZyYW1ld29yayBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUKICoJRFZCV29ybGQgRFZCLVMgMjEwMSwgMjEwMiwgRFZCLVMyIDIxMDQsIERWQi1DIDMxMDEsCi0qCVRlVmlpIFM2MDAsIFM2MzAsIFM2NTAgQ2FyZHMKKyoJVGVWaWkgUzYwMCwgUzYzMCwgUzY1MCwKKyoJUHJvZiAxMTAwLCA3NTAwIENhcmRzCiAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCiAqCiAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC00NjksMTEgKzQ3MCwxMyBAQAogCQkJCQkJCQlpbnQgbnVtKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJaW50IHJldCA9IDA7CiAJaW50IGxlbiwgaSwgajsKIAogCWlmICghZCkKIAkJcmV0dXJuIC1FTk9ERVY7CisJdWRldiA9IGQtPnVkZXY7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCkBAIC00ODgsOCArNDkxLDEzIEBACiAJCX0KIAkJY2FzZSAoRFcyMTAyX1ZPTFRBR0VfQ1RSTCk6IHsKIAkJCXU4IG9idWZbMl07CisKKwkJCW9idWZbMF0gPSAxOworCQkJb2J1ZlsxXSA9IG1zZ1tqXS5idWZbMV07Lyogb2ZmLW9uICovCisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHg4YSwgMCwgMCwKKwkJCQkJb2J1ZiwgMiwgRFcyMTBYX1dSSVRFX01TRyk7CiAJCQlvYnVmWzBdID0gMzsKLQkJCW9idWZbMV0gPSBtc2dbal0uYnVmWzBdOworCQkJb2J1ZlsxXSA9IG1zZ1tqXS5idWZbMF07LyogMTN2LTE4diAqLwogCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OGEsIDAsIDAsCiAJCQkJCW9idWYsIDIsIERXMjEwWF9XUklURV9NU0cpOwogCQkJYnJlYWs7CkBAIC01MjcsNiArNTM1LDE3IEBACiAJCQkJCWkgKz0gMTY7CiAJCQkJCWxlbiAtPSAxNjsKIAkJCQl9IHdoaWxlIChsZW4gPiAwKTsKKwkJCX0gZWxzZSBpZiAoKHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IDB4NzUwMCkKKwkJCQkJJiYgKGogPCAobnVtIC0gMSkpKSB7CisJCQkJLyogd3JpdGUgcmVnaXN0ZXIgYWRkciBiZWZvcmUgcmVhZCAqLworCQkJCXU4IG9idWZbbXNnW2pdLmxlbiArIDJdOworCQkJCW9idWZbMF0gPSBtc2dbaiArIDFdLmxlbjsKKwkJCQlvYnVmWzFdID0gKG1zZ1tqXS5hZGRyIDw8IDEpOworCQkJCW1lbWNweShvYnVmICsgMiwgbXNnW2pdLmJ1ZiwgbXNnW2pdLmxlbik7CisJCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OTIsIDAsIDAsCisJCQkJCQlvYnVmLCBtc2dbal0ubGVuICsgMiwKKwkJCQkJCURXMjEwWF9XUklURV9NU0cpOworCQkJCWJyZWFrOwogCQkJfSBlbHNlIHsKIAkJCQkvKiB3cml0ZSByZWdpc3RlcnMgKi8KIAkJCQl1OCBvYnVmW21zZ1tqXS5sZW4gKyAyXTsKQEAgLTY1MSwxOCArNjcwLDI1IEBACiAKIHN0YXRpYyBpbnQgZHcyMTB4X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7Ci0Jc3RhdGljIHU4IGNvbW1hbmRfMTN2WzFdID0gezB4MDB9OwotCXN0YXRpYyB1OCBjb21tYW5kXzE4dlsxXSA9IHsweDAxfTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKLQkJey5hZGRyID0gRFcyMTAyX1ZPTFRBR0VfQ1RSTCwgLmZsYWdzID0gMCwKLQkJCS5idWYgPSBjb21tYW5kXzEzdiwgLmxlbiA9IDF9LAorCXN0YXRpYyB1OCBjb21tYW5kXzEzdltdID0gezB4MDAsIDB4MDF9OworCXN0YXRpYyB1OCBjb21tYW5kXzE4dltdID0gezB4MDEsIDB4MDF9OworCXN0YXRpYyB1OCBjb21tYW5kX29mZltdID0gezB4MDAsIDB4MDB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBEVzIxMDJfVk9MVEFHRV9DVFJMLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gY29tbWFuZF9vZmYsCisJCS5sZW4gPSAyLAogCX07CiAKIAlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICp1ZGV2X2FkYXAgPQogCQkoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqKShmZS0+ZHZiLT5wcml2KTsKIAlpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCkKLQkJbXNnWzBdLmJ1ZiA9IGNvbW1hbmRfMTh2OwotCWkyY190cmFuc2ZlcigmdWRldl9hZGFwLT5kZXYtPmkyY19hZGFwLCBtc2csIDEpOworCQltc2cuYnVmID0gY29tbWFuZF8xOHY7CisJZWxzZSBpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xMykKKwkJbXNnLmJ1ZiA9IGNvbW1hbmRfMTN2OworCisJaTJjX3RyYW5zZmVyKCZ1ZGV2X2FkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczNSw2ICs3NjEsMTggQEAKIAkuY2xrX2RpdiA9IDEsCiB9OwogCitzdGF0aWMgc3RydWN0IHN0djA5MDBfY29uZmlnIHByb2ZfNzUwMF9zdHYwOTAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NmEsCisJLmRlbW9kX21vZGUgPSAwLAorCS54dGFsID0gMjcwMDAwMDAsCisJLmNsa21vZGUgPSAzLC8qIDAtQ0xLSSwgMi1YVEFMSSwgZWxzZSBBVVRPICovCisJLmRpc2VxY19tb2RlID0gMiwvKiAyLzMgUFdNICovCisJLnR1bjFfbWFkZHJlc3MgPSAwLC8qIDB4NjAgKi8KKwkudHVuMV9hZGMgPSAwLC8qIDIgVnBwICovCisJLnBhdGgxX21vZGUgPSAzLAorCS50dW4xX3R5cGUgPSAzLAorfTsKKwogc3RhdGljIGludCBkdzIxMDRfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmQpCiB7CiAJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnR1bmVyX29wcyA9IE5VTEw7CkBAIC04ODIsNiArOTIwLDE5IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKK3N0YXRpYyBpbnQgcHJvZl83NTAwX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICpkKQoreworCWQtPmZlID0gZHZiX2F0dGFjaChzdHYwOTAwX2F0dGFjaCwgJnByb2ZfNzUwMF9zdHYwOTAwX2NvbmZpZywKKwkJCQkJJmQtPmRldi0+aTJjX2FkYXAsIDApOworCWlmIChkLT5mZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKwlkLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZHcyMTB4X3NldF92b2x0YWdlOworCisJaW5mbygiQXR0YWNoZWQgU1RWMDkwMCtTVEI2MTAwQSFcbiIpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHcyMTAyX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewogCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweDYwLApAQCAtMTA3Myw2ICsxMTI0LDcgQEAKIAl7VVNCX0RFVklDRSgweDkwMjIsIFVTQl9QSURfVEVWSUlfUzYzMCl9LAogCXtVU0JfREVWSUNFKDB4MzAxMSwgVVNCX1BJRF9QUk9GXzExMDApfSwKIAl7VVNCX0RFVklDRSgweDkwMjIsIFVTQl9QSURfVEVWSUlfUzY2MCl9LAorCXtVU0JfREVWSUNFKDB4MzAzNCwgMHg3NTAwKX0sCiAJeyB9CiB9OwogCkBAIC0xMzg3LDkgKzE0MzksMzAgQEAKIAl9CiB9OwogCitzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcDc1MDA7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uIGQ3NTAwID0geworCSJQcm9mIDc1MDAgVVNCIERWQi1TMiIsCisJeyZkdzIxMDJfdGFibGVbOV0sIE5VTEx9LAorCXtOVUxMfSwKK307CisKIHN0YXRpYyBpbnQgZHcyMTAyX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CisKKwlwNzUwMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwNzUwMCkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyogY29weSBkZWZhdWx0IHN0cnVjdHVyZSAqLworCW1lbWNweShwNzUwMCwgJnM2eDBfcHJvcGVydGllcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcykpOworCS8qIGZpbGwgb25seSBkaWZmZXJlbnQgZmllbGRzICovCisJcDc1MDAtPmZpcm13YXJlID0gImR2Yi11c2ItcDc1MDAuZnciOworCXA3NTAwLT5kZXZpY2VzWzBdID0gZDc1MDA7CisJcDc1MDAtPnJjX2tleV9tYXAgPSB0YnNfcmNfa2V5czsKKwlwNzUwMC0+cmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRSh0YnNfcmNfa2V5cyk7CisJcDc1MDAtPmFkYXB0ZXItPmZyb250ZW5kX2F0dGFjaCA9IHByb2ZfNzUwMF9mcm9udGVuZF9hdHRhY2g7CisKIAlpZiAoMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzIxMDJfcHJvcGVydGllcywKIAkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAogCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmR3MjEwNF9wcm9wZXJ0aWVzLApAQCAtMTM5Nyw2ICsxNDcwLDggQEAKIAkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzMxMDFfcHJvcGVydGllcywKIAkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAogCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJnM2eDBfcHJvcGVydGllcywKKwkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAorCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgcDc1MDAsCiAJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikpCiAJCXJldHVybiAwOwogCkBAIC0xNDMxLDYgKzE1MDYsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIERWQldvcmxkIERWQi1TIDIxMDEsIDIxMDIsIERWQi1TMiAyMTA0LCIKIAkJCQkiIERWQi1DIDMxMDEgVVNCMi4wLCIKIAkJCQkiIFRlVmlpIFM2MDAsIFM2MzAsIFM2NTAsIFM2NjAgVVNCMi4wLCIKLQkJCQkiIFByb2YgMTEwMCBVU0IyLjAgZGV2aWNlcyIpOworCQkJCSIgUHJvZiAxMTAwLCA3NTAwIFVTQjIuMCBkZXZpY2VzIik7CiBNT0RVTEVfVkVSU0lPTigiMC4xIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMKaW5kZXggZWJiN2I5Zi4uZDE0YmQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJezB4NzYsIDB4MEN9LAogfTsKIAotY29uc3Qgc3RhdGljIGludCBpbml0X2NvZGVfbGVuID0gc2l6ZW9mKGluaXRfY29kZSkgLyBzaXplb2YodThbMl0pOworc3RhdGljIGNvbnN0IGludCBpbml0X2NvZGVfbGVuID0gc2l6ZW9mKGluaXRfY29kZSkgLyBzaXplb2YodThbMl0pOwogCiBzdGF0aWMgaW50IGpkdmJ0OTA1MDJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYwppbmRleCBlZjliN2JlLi43MzdmZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCkBAIC0xNiw2ICsxNiw5IEBACiAjaW5jbHVkZSAicXQxMDEwLmgiCiAjaW5jbHVkZSAidGRhMTAwNHguaCIKICNpbmNsdWRlICJ0ZGE4Mjd4LmgiCisKKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgInR1bmVyLXNpbXBsZS5oIgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogLyogZGVidWcgKi8KQEAgLTE1OCwxMSArMTYxLDE0IEBACiAKIAkJCWNhc2UgMHg5MzoKIAkJCWNhc2UgMHg5MjoKKwkJCWNhc2UgMHg4MzogLyogcGlubmFjbGUgUENUVjMxMGUgKi8KKwkJCWNhc2UgMHg4MjoKIAkJCQltLT5yZXBfY291bnQgPSAwOwogCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAkJCQlnb3RvIHVubG9jazsKIAogCQkJY2FzZSAweDkxOgorCQkJY2FzZSAweDgxOiAvKiBwaW5uYWNsZSBQQ1RWMzEwZSAqLwogCQkJCS8qIHByZXZlbnQgaW1tZWRpYXRlIGF1dG8tcmVwZWF0ICovCiAJCQkJaWYgKCsrbS0+cmVwX2NvdW50ID4gMikKIAkJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9SRVBFQVQ7CkBAIC01NDYsNiArNTUyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbTkyMHhfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgYWRhcC0+ZmUsCisJCSAgICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDYxLAorCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOworCXJldHVybiAwOworfQorCiAvKiBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgbTkyMHhfaW5pdHMgbWVnYXNreV9yY19pbml0IFtdID0gewogCXsgTTkyMDZfUkNfSU5JVDIsIDB4YTggfSwKQEAgLTU2Miw2ICs1NzYsMTggQEAKIAl7IH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbTkyMHhfaW5pdHMgcGlubmFjbGUzMTBlX2luaXRbXSA9IHsKKwkvKiB3aXRob3V0IHRoZXNlIHRoZSB0dW5lciBkb24ndCB3b3JrICovCisJeyAweGZmMjAsICAgICAgICAgMHg5YiB9LAorCXsgMHhmZjIyLCAgICAgICAgIDB4NzAgfSwKKworCS8qIHJjIHNldHRpbmdzICovCisJeyAweGZmNTAsICAgICAgICAgMHg4MCB9LAorCXsgTTkyMDZfUkNfSU5JVDEsIDB4MDAgfSwKKwl7IE05MjA2X1JDX0lOSVQyLCAweGZmIH0sCisJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCiAvKiBpciBrZXltYXBzICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IG1lZ2Fza3lfcmNfa2V5cyBbXSA9IHsKIAl7IDB4MDAxMiwgS0VZX1BPV0VSIH0sCkBAIC02MDIsMTEgKzYyOCw2OCBAQAogCXsgMHgwMDFlLCBLRVlfVk9MVU1FVVAgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgcGlubmFjbGUzMTBlX3JjX2tleXNbXSA9IHsKKwl7IDB4MTYsIEtFWV9QT1dFUiB9LAorCXsgMHgxNywgS0VZX0ZBVk9SSVRFUyB9LAorCXsgMHgwZiwgS0VZX1RFWFQgfSwKKwl7IDB4NDgsIEtFWV9NRURJQSB9LAkJLyogcHJldmlldyAqLworCXsgMHgxYywgS0VZX0VQRyB9LAorCXsgMHgwNCwgS0VZX0xJU1QgfSwJCQkvKiByZWNvcmQgbGlzdCAqLworCXsgMHgwMywgS0VZXzEgfSwKKwl7IDB4MDEsIEtFWV8yIH0sCisJeyAweDA2LCBLRVlfMyB9LAorCXsgMHgwOSwgS0VZXzQgfSwKKwl7IDB4MWQsIEtFWV81IH0sCisJeyAweDFmLCBLRVlfNiB9LAorCXsgMHgwZCwgS0VZXzcgfSwKKwl7IDB4MTksIEtFWV84IH0sCisJeyAweDFiLCBLRVlfOSB9LAorCXsgMHgxNSwgS0VZXzAgfSwKKwl7IDB4MGMsIEtFWV9DQU5DRUwgfSwKKwl7IDB4NGEsIEtFWV9DTEVBUiB9LAorCXsgMHgxMywgS0VZX0JBQ0sgfSwKKwl7IDB4MDAsIEtFWV9UQUIgfSwKKwl7IDB4NGIsIEtFWV9VUCB9LAorCXsgMHg0ZSwgS0VZX0xFRlQgfSwKKwl7IDB4NTIsIEtFWV9SSUdIVCB9LAorCXsgMHg1MSwgS0VZX0RPV04gfSwKKwl7IDB4NGYsIEtFWV9FTlRFUiB9LAkJLyogY291bGQgYWxzbyBiZSBLRVlfT0sgKi8KKwl7IDB4MWUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwYSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDIsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxMSwgS0VZX1JFQ09SRCB9LAorCXsgMHgxNCwgS0VZX1BMQVkgfSwKKwl7IDB4NGMsIEtFWV9QQVVTRSB9LAorCXsgMHgxYSwgS0VZX1NUT1AgfSwKKwl7IDB4NDAsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MTIsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHg0MSwgS0VZX1BSRVZJT1VTU09ORyB9LAkvKiBSZXBsYXkgKi8KKwl7IDB4NDIsIEtFWV9ORVhUU09ORyB9LAkJLyogU2tpcCAqLworCXsgMHg1NCwgS0VZX0NBTUVSQSB9LAkJLyogQ2FwdHVyZSAqLworLyoJeyAweDUwLCBLRVlfU0FQIH0sCSovCQkvKiBTYXAgKi8KKwl7IDB4NDcsIEtFWV9DWUNMRVdJTkRPV1MgfSwJLyogUGlwICovCisJeyAweDRkLCBLRVlfU0NSRUVOIH0sCQkvKiBGdWxsU2NyZWVuICovCisJeyAweDA4LCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4MGUsIEtFWV9NVVRFIH0sCisvKgl7IDB4NDksIEtFWV9MUiB9LAkqLwkJLyogTC9SICovCisJeyAweDA3LCBLRVlfU0xFRVAgfSwJCS8qIEhpYmVybmF0ZSAqLworCXsgMHgwOCwgS0VZX01FRElBIH0sCQkvKiBBL1YgKi8KKwl7IDB4MGUsIEtFWV9NRU5VIH0sCQkJLyogUmVjYWxsICovCisJeyAweDQ1LCBLRVlfWk9PTUlOIH0sCisJeyAweDQ2LCBLRVlfWk9PTU9VVCB9LAorCXsgMHgxOCwgS0VZX1RWIH0sCQkJLyogUmVkICovCisJeyAweDUzLCBLRVlfVkNSIH0sCQkJLyogR3JlZW4gKi8KKwl7IDB4NWUsIEtFWV9TQVQgfSwJCQkvKiBZZWxsb3cgKi8KKwl7IDB4NWYsIEtFWV9QTEFZRVIgfSwJCS8qIEJsdWUgKi8KK307CisKIC8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgbWVnYXNreV9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRpZ2l2b3hfbWluaV9paV9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHR2d2Fsa2VydHdpbl9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRwb3NoX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgcGlubmFjbGVfcGN0djMxMGVfcHJvcGVydGllczsKIAogc3RhdGljIGludCBtOTIweF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTY1Miw2ICs3MzUsMTMgQEAKIAkJCWdvdG8gZm91bmQ7CiAJCX0KIAorCQlyZXQgPSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZwaW5uYWNsZV9wY3R2MzEwZV9wcm9wZXJ0aWVzLAorCQkJCQkgIFRISVNfTU9EVUxFLCAmZCwgYWRhcHRlcl9ucik7CisJCWlmIChyZXQgPT0gMCkgeworCQkJcmNfaW5pdF9zZXEgPSBwaW5uYWNsZTMxMGVfaW5pdDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwogCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CiAJCS8qIEFub3RoZXIgaW50ZXJmYWNlIG9uIGEgbXVsdGktdHVuZXIgZGV2aWNlICovCkBAIC02ODIsNiArNzcyLDcgQEAKIAkJCSAgICAgVVNCX1BJRF9MSUZFVklFV19UVl9XQUxLRVJfVFdJTl9XQVJNKSB9LAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EUE9TSCwgVVNCX1BJRF9EUE9TSF9NOTIwNl9DT0xEKSB9LAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EUE9TSCwgVVNCX1BJRF9EUE9TSF9NOTIwNl9XQVJNKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9WSVNJT05QTFVTLCBVU0JfUElEX1BJTk5BQ0xFX1BDVFYzMTBFKSB9LAogCQl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBtOTIweF90YWJsZSk7CkBAIC04OTUsNiArOTg2LDU2IEBACiAJIH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBwaW5uYWNsZV9wY3R2MzEwZV9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkuZG93bmxvYWRfZmlybXdhcmUgPSBOVUxMLAorCisJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJLnJjX2tleV9tYXAgICAgICAgPSBwaW5uYWNsZTMxMGVfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUocGlubmFjbGUzMTBlX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gbTkyMHhfcmNfcXVlcnksCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgbTkyMHhfc3RhdGUpLAorCisJLmlkZW50aWZ5X3N0YXRlICAgPSBtOTIweF9pZGVudGlmeV9zdGF0ZSwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHt7CisJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwKKwkJCURWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGLAorCisJCS5waWRfZmlsdGVyX2NvdW50ID0gOCwKKwkJLnBpZF9maWx0ZXIgICAgICAgPSBtOTIweF9waWRfZmlsdGVyLAorCQkucGlkX2ZpbHRlcl9jdHJsICA9IG05MjB4X3BpZF9maWx0ZXJfY3RybCwKKworCQkuZnJvbnRlbmRfYXR0YWNoICA9IG05MjB4X210MzUyX2Zyb250ZW5kX2F0dGFjaCwKKwkJLnR1bmVyX2F0dGFjaCAgICAgPSBtOTIweF9mbWQxMjE2bWVfdHVuZXJfYXR0YWNoLAorCisJCS5zdHJlYW0gPSB7CisJCQkudHlwZSA9IFVTQl9JU09DLAorCQkJLmNvdW50ID0gNSwKKwkJCS5lbmRwb2ludCA9IDB4ODQsCisJCQkudSA9IHsKKwkJCQkuaXNvYyA9IHsKKwkJCQkJLmZyYW1lc3BlcnVyYiA9IDEyOCwKKwkJCQkJLmZyYW1lc2l6ZSA9IDU2NCwKKwkJCQkJLmludGVydmFsID0gMSwKKwkJCQl9CisJCQl9CisJCX0sCisJfSB9LAorCS5pMmNfYWxnbyAgICAgICAgID0gJm05MjB4X2kyY19hbGdvLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7ICAgIlBpbm5hY2xlIFBDVFYgMzEwZSIsCisJCQl7ICZtOTIweF90YWJsZVs2XSwgTlVMTCB9LAorCQkJeyBOVUxMIH0sCisJCX0KKwl9Cit9OworCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbTkyMHhfZHJpdmVyID0gewogCS5uYW1lCQk9ICJkdmJfdXNiX205MjB4IiwKIAkucHJvYmUJCT0gbTkyMHhfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmgKaW5kZXggMzc1MzI4OS4uM2MwNjE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguaApAQCAtMTgsNyArMTgsNyBAQAogI2RlZmluZSBNOTIwNl9GVwkweDMwCiAKICNkZWZpbmUgTTkyMDZfTUFYX0ZJTFRFUlMgOAotI2RlZmluZSBNOTIwNl9NQVhfQURBUFRFUlMgMgorI2RlZmluZSBNOTIwNl9NQVhfQURBUFRFUlMgNAogCiAvKgogc2VxdWVuY2VzIGZvdW5kIGluIGxvZ3M6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYwppbmRleCBkNGUyMzA5Li44MzA1NTc2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJCQkJKG1zZ1tpXS5hZGRyPDwxKXwobXNnW2ldLmZsYWdzJkkyQ19NX1JEPzB4MDE6MCksCiAJCQkJCW1zZ1tpXS5idWYsCiAJCQkJCW1zZ1tpXS5sZW4KLQkJCQkJKSE9IG1zZ1tpXS5sZW4pKSB7CisJCQkJCSkpICE9IG1zZ1tpXS5sZW4pIHsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChkdmJfdXNiX29wZXJhMV9kZWJ1ZyAmIDB4MTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtMTM5NC5jCmluZGV4IDdjNTQ1OWMyLi5jM2UwZWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYwpAQCAtOTAsMTMgKzkwLDE0IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihmZHR2LT5kZXZpY2UsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSwgZGV2aWNlKS0+bmU7CiB9CiAKLXN0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgX19iZTMyIGRhdGFbXSkKK3N0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSkKIHsKKwlxdWFkbGV0X3QgKmQgPSBkYXRhOwogCWludCByZXQ7CiAKLQlyZXQgPSBocHNiX25vZGVfbG9jayhub2RlX29mKGZkdHYpLCBhZGRyLCBFWFRDT0RFX0NPTVBBUkVfU1dBUCwKLQkJKF9fZm9yY2UgcXVhZGxldF90ICopJmRhdGFbMV0sIChfX2ZvcmNlIHF1YWRsZXRfdClkYXRhWzBdKTsKLQlkYXRhWzBdID0gZGF0YVsxXTsKKwlyZXQgPSBocHNiX25vZGVfbG9jayhub2RlX29mKGZkdHYpLCBhZGRyLAorCQkJICAgICBFWFRDT0RFX0NPTVBBUkVfU1dBUCwgJmRbMV0sIGRbMF0pOworCWRbMF0gPSBkWzFdOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE5Miw5ICsxOTMsMTMgQEAKIAlpbnQga3ZfbGVuLCBlcnI7CiAJdm9pZCAqa3Zfc3RyOwogCi0Ja3ZfbGVuID0gKHVkLT5tb2RlbF9uYW1lX2t2LT52YWx1ZS5sZWFmLmxlbiAtIDIpICogc2l6ZW9mKHF1YWRsZXRfdCk7Ci0Ja3Zfc3RyID0gQ1NSMTIxMl9URVhUVUFMX0RFU0NSSVBUT1JfTEVBRl9EQVRBKHVkLT5tb2RlbF9uYW1lX2t2KTsKLQorCWlmICh1ZC0+bW9kZWxfbmFtZV9rdikgeworCQlrdl9sZW4gPSAodWQtPm1vZGVsX25hbWVfa3YtPnZhbHVlLmxlYWYubGVuIC0gMikgKiA0OworCQlrdl9zdHIgPSBDU1IxMjEyX1RFWFRVQUxfREVTQ1JJUFRPUl9MRUFGX0RBVEEodWQtPm1vZGVsX25hbWVfa3YpOworCX0gZWxzZSB7CisJCWt2X2xlbiA9IDA7CisJCWt2X3N0ciA9IE5VTEw7CisJfQogCWZkdHYgPSBmZHR2X2FsbG9jKGRldiwgJmZkdHZfMTM5NF9iYWNrZW5kLCBrdl9zdHIsIGt2X2xlbik7CiAJaWYgKCFmZHR2KQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCmluZGV4IDUwYzQyYTQuLjFiMzFiZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtNzQsNyArNzQsNiBAQAogI2RlZmluZSBFTjUwMjIxX1RBR19DQV9JTkZPCQkweDlmODAzMQogCiBzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgewotCWludCBsZW5ndGg7CiAJdTggY3R5cGU7CiAJdTggc3VidW5pdDsKIAl1OCBvcGNvZGU7CkBAIC04MiwxMyArODEsMjcgQEAKIH07CiAKIHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgewotCWludCBsZW5ndGg7CiAJdTggcmVzcG9uc2U7CiAJdTggc3VidW5pdDsKIAl1OCBvcGNvZGU7CiAJdTggb3BlcmFuZFs1MDldOwogfTsKIAorI2RlZmluZSBMQVNUX09QRVJBTkQgKDUwOSAtIDEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9vcGVyYW5kcyhzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMsIGludCBmcm9tLCBpbnQgdG8pCit7CisJbWVtc2V0KCZjLT5vcGVyYW5kW2Zyb21dLCAwLCB0byAtIGZyb20gKyAxKTsKK30KKworc3RhdGljIHZvaWQgcGFkX29wZXJhbmRzKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYywgaW50IGZyb20pCit7CisJaW50IHRvID0gQUxJR04oZnJvbSwgNCk7CisKKwlpZiAoZnJvbSA8PSB0byAmJiB0byA8PSBMQVNUX09QRVJBTkQpCisJCWNsZWFyX29wZXJhbmRzKGMsIGZyb20sIHRvKTsKK30KKwogI2RlZmluZSBBVkNfREVCVUdfUkVBRF9ERVNDUklQVE9SICAgICAgICAgICAgICAweDAwMDEKICNkZWZpbmUgQVZDX0RFQlVHX0RTSVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCiAjZGVmaW5lIEFWQ19ERUJVR19EU0QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNApAQCAtMjAyLDc4ICsyMTUsNjUgQEAKIAkJICAgICAgIDE2LCAxLCBtc2csIGxlbmd0aCwgZmFsc2UpOwogfQogCi1zdGF0aWMgaW50IF9fYXZjX3dyaXRlKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAotCQljb25zdCBzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMsIHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIpCitzdGF0aWMgaW50IGF2Y193cml0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKIAlpbnQgZXJyLCByZXRyeTsKIAotCWlmIChyKQotCQlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSBmYWxzZTsKKwlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSBmYWxzZTsKIAogCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDY7IHJldHJ5KyspIHsKIAkJaWYgKHVubGlrZWx5KGF2Y19kZWJ1ZykpCi0JCQlkZWJ1Z19mY3AoJmMtPmN0eXBlLCBjLT5sZW5ndGgpOworCQkJZGVidWdfZmNwKGZkdHYtPmF2Y19kYXRhLCBmZHR2LT5hdmNfZGF0YV9sZW5ndGgpOwogCiAJCWVyciA9IGZkdHYtPmJhY2tlbmQtPndyaXRlKGZkdHYsIEZDUF9DT01NQU5EX1JFR0lTVEVSLAotCQkJCQkgICAodm9pZCAqKSZjLT5jdHlwZSwgYy0+bGVuZ3RoKTsKKwkJCQlmZHR2LT5hdmNfZGF0YSwgZmR0di0+YXZjX2RhdGFfbGVuZ3RoKTsKIAkJaWYgKGVycikgewotCQkJZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gdHJ1ZTsKIAkJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiRkNQIGNvbW1hbmQgd3JpdGUgZmFpbGVkXG4iKTsKKwogCQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWlmICghcikKLQkJCXJldHVybiAwOwotCiAJCS8qCiAJCSAqIEFWL0Mgc3BlY3Mgc2F5IHRoYXQgYW5zd2VycyBzaG91bGQgYmUgc2VudCB3aXRoaW4gMTUwIG1zLgogCQkgKiBUaW1lIG91dCBhZnRlciAyMDAgbXMuCiAJCSAqLwogCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KGZkdHYtPmF2Y193YWl0LAogCQkJCSAgICAgICBmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQsCi0JCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSkgIT0gMCkgewotCQkJci0+bGVuZ3RoID0gZmR0di0+cmVzcG9uc2VfbGVuZ3RoOwotCQkJbWVtY3B5KCZyLT5yZXNwb25zZSwgZmR0di0+cmVzcG9uc2UsIHItPmxlbmd0aCk7Ci0KKwkJCQkgICAgICAgbXNlY3NfdG9famlmZmllcygyMDApKSAhPSAwKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAl9CiAJZGV2X2VycihmZHR2LT5kZXZpY2UsICJGQ1AgcmVzcG9uc2UgdGltZWQgb3V0XG4iKTsKKwogCXJldHVybiAtRVRJTUVET1VUOwogfQogCi1zdGF0aWMgaW50IGF2Y193cml0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJY29uc3Qgc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjLCBzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyKQorc3RhdGljIGJvb2wgaXNfcmVnaXN0ZXJfcmMoc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqcikKIHsKLQlpbnQgcmV0OwotCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZmR0di0+YXZjX211dGV4KSkKLQkJcmV0dXJuIC1FSU5UUjsKLQotCXJldCA9IF9fYXZjX3dyaXRlKGZkdHYsIGMsIHIpOwotCi0JbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHItPm9wY29kZSAgICAgPT0gQVZDX09QQ09ERV9WRU5ET1IgJiYKKwkgICAgICAgci0+b3BlcmFuZFswXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wICYmCisJICAgICAgIHItPm9wZXJhbmRbMV0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMSAmJgorCSAgICAgICByLT5vcGVyYW5kWzJdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzIgJiYKKwkgICAgICAgci0+b3BlcmFuZFszXSA9PSBTRkVfVkVORE9SX09QQ09ERV9SRUdJU1RFUl9SRU1PVEVfQ09OVFJPTDsKIH0KIAogaW50IGF2Y19yZWN2KHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKQogewotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPQotCQkJZGF0YSAtIG9mZnNldG9mKHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUsIHJlc3BvbnNlKTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gZGF0YTsKIAogCWlmICh1bmxpa2VseShhdmNfZGVidWcpKQogCQlkZWJ1Z19mY3AoZGF0YSwgbGVuZ3RoKTsKIAotCWlmIChsZW5ndGggPj0gOCAmJgotCSAgICByLT5vcGVyYW5kWzBdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzAgJiYKLQkgICAgci0+b3BlcmFuZFsxXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xICYmCi0JICAgIHItPm9wZXJhbmRbMl0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMiAmJgotCSAgICByLT5vcGVyYW5kWzNdID09IFNGRV9WRU5ET1JfT1BDT0RFX1JFR0lTVEVSX1JFTU9URV9DT05UUk9MKSB7Ci0JCWlmIChyLT5yZXNwb25zZSA9PSBBVkNfUkVTUE9OU0VfQ0hBTkdFRCkgewotCQkJZmR0dl9oYW5kbGVfcmMoZmR0diwKLQkJCSAgICByLT5vcGVyYW5kWzRdIDw8IDggfCByLT5vcGVyYW5kWzVdKTsKKwlpZiAobGVuZ3RoID49IDggJiYgaXNfcmVnaXN0ZXJfcmMocikpIHsKKwkJc3dpdGNoIChyLT5yZXNwb25zZSkgeworCQljYXNlIEFWQ19SRVNQT05TRV9DSEFOR0VEOgorCQkJZmR0dl9oYW5kbGVfcmMoZmR0diwgci0+b3BlcmFuZFs0XSA8PCA4IHwgci0+b3BlcmFuZFs1XSk7CiAJCQlzY2hlZHVsZV93b3JrKCZmZHR2LT5yZW1vdGVfY3RybF93b3JrKTsKLQkJfSBlbHNlIGlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfSU5URVJJTSkgeworCQkJYnJlYWs7CisJCWNhc2UgQVZDX1JFU1BPTlNFX0lOVEVSSU06CisJCQlpZiAoaXNfcmVnaXN0ZXJfcmMoKHZvaWQgKilmZHR2LT5hdmNfZGF0YSkpCisJCQkJZ290byB3YWtlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CiAJCQlkZXZfaW5mbyhmZHR2LT5kZXZpY2UsCiAJCQkJICJyZW1vdGUgY29udHJvbCByZXN1bHQgPSAlZFxuIiwgci0+cmVzcG9uc2UpOwogCQl9CkBAIC0yODUsOSArMjg1LDkgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JbWVtY3B5KGZkdHYtPnJlc3BvbnNlLCBkYXRhLCBsZW5ndGgpOwotCWZkdHYtPnJlc3BvbnNlX2xlbmd0aCA9IGxlbmd0aDsKLQorCW1lbWNweShmZHR2LT5hdmNfZGF0YSwgZGF0YSwgbGVuZ3RoKTsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBsZW5ndGg7Cit3YWtlOgogCWZkdHYtPmF2Y19yZXBseV9yZWNlaXZlZCA9IHRydWU7CiAJd2FrZV91cCgmZmR0di0+YXZjX3dhaXQpOwogCkBAIC0zMTgsMTAgKzMxOCwxMSBAQAogICogdHVuaW5nIGNvbW1hbmQgZm9yIHNldHRpbmcgdGhlIHJlbGF0aXZlIExOQiBmcmVxdWVuY3kKICAqIChub3Qgc3VwcG9ydGVkIGJ5IHRoZSBBVkMgc3RhbmRhcmQpCiAgKi8KLXN0YXRpYyB2b2lkIGF2Y190dW5lcl90dW5lcXBzayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKLQkJCSAgICAgICBzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCitzdGF0aWMgaW50IGF2Y190dW5lcl90dW5lcXBzayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwKKwkJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogeworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisKIAljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX1ZFTkRPUjsKIAogCWMtPm9wZXJhbmRbMF0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wOwpAQCAtMzcwLDE2ICszNzEsMTggQEAKIAkJYy0+b3BlcmFuZFsxM10gPSAweDE7CiAJCWMtPm9wZXJhbmRbMTRdID0gMHhmZjsKIAkJYy0+b3BlcmFuZFsxNV0gPSAweGZmOwotCQljLT5sZW5ndGggPSAyMDsKKworCQlyZXR1cm4gMTY7CiAJfSBlbHNlIHsKLQkJYy0+bGVuZ3RoID0gMTY7CisJCXJldHVybiAxMzsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF2Y190dW5lcl9kc2RfZHZiX2Moc3RydWN0IGZpcmVkdHYgKmZkdHYsCi0JCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCi0JCQkJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjKQorc3RhdGljIGludCBhdmNfdHVuZXJfZHNkX2R2Yl9jKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogeworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisKIAljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX0RTRDsKIAogCWMtPm9wZXJhbmRbMF0gPSAwOyAgICAvKiBzb3VyY2UgcGx1ZyAqLwpAQCAtNDQwLDE1ICs0NDMsMTQgQEAKIAljLT5vcGVyYW5kWzIwXSA9IDB4MDA7CiAJYy0+b3BlcmFuZFsyMV0gPSAweDAwOwogCi0JLyogQWRkIFBJRHMgdG8gZmlsdGVyICovCi0JYy0+bGVuZ3RoID0gQUxJR04oMjIgKyBhZGRfcGlkX2ZpbHRlcihmZHR2LCAmYy0+b3BlcmFuZFsyMl0pICsgMywgNCk7CisJcmV0dXJuIDIyICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMjJdKTsKIH0KIAotc3RhdGljIHZvaWQgYXZjX3R1bmVyX2RzZF9kdmJfdChzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKLQkJCQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCitzdGF0aWMgaW50IGF2Y190dW5lcl9kc2RfZHZiX3Qoc3RydWN0IGZpcmVkdHYgKmZkdHYsCisJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7CiAJc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKm9mZG0gPSAmcGFyYW1zLT51Lm9mZG07CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKIAogCWMtPm9wY29kZSA9IEFWQ19PUENPREVfRFNEOwogCkBAIC01NDMsNTUgKzU0NSw1OCBAQAogCWMtPm9wZXJhbmRbMTVdID0gMHgwMDsgLyogbmV0d29ya19JRFswXSAqLwogCWMtPm9wZXJhbmRbMTZdID0gMHgwMDsgLyogbmV0d29ya19JRFsxXSAqLwogCi0JLyogQWRkIFBJRHMgdG8gZmlsdGVyICovCi0JYy0+bGVuZ3RoID0gQUxJR04oMTcgKyBhZGRfcGlkX2ZpbHRlcihmZHR2LCAmYy0+b3BlcmFuZFsxN10pICsgMywgNCk7CisJcmV0dXJuIDE3ICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMTddKTsKIH0KIAogaW50IGF2Y190dW5lcl9kc2Qoc3RydWN0IGZpcmVkdHYgKmZkdHYsCiAJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHBvcywgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwogCiAJc3dpdGNoIChmZHR2LT50eXBlKSB7CiAJY2FzZSBGSVJFRFRWX0RWQl9TOgotCWNhc2UgRklSRURUVl9EVkJfUzI6IGF2Y190dW5lcl90dW5lcXBzayhmZHR2LCBwYXJhbXMsIGMpOyBicmVhazsKLQljYXNlIEZJUkVEVFZfRFZCX0M6IGF2Y190dW5lcl9kc2RfZHZiX2MoZmR0diwgcGFyYW1zLCBjKTsgYnJlYWs7Ci0JY2FzZSBGSVJFRFRWX0RWQl9UOiBhdmNfdHVuZXJfZHNkX2R2Yl90KGZkdHYsIHBhcmFtcywgYyk7IGJyZWFrOworCWNhc2UgRklSRURUVl9EVkJfUzI6IHBvcyA9IGF2Y190dW5lcl90dW5lcXBzayhmZHR2LCBwYXJhbXMpOyBicmVhazsKKwljYXNlIEZJUkVEVFZfRFZCX0M6IHBvcyA9IGF2Y190dW5lcl9kc2RfZHZiX2MoZmR0diwgcGFyYW1zKTsgYnJlYWs7CisJY2FzZSBGSVJFRFRWX0RWQl9UOiBwb3MgPSBhdmNfdHVuZXJfZHNkX2R2Yl90KGZkdHYsIHBhcmFtcyk7IGJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KKwlwYWRfb3BlcmFuZHMoYywgcG9zKTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCW1zbGVlcCg1MDApOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKICNpZiAwCi0JLyogRklYTUU6ICovCi0JLyogdTggKnN0YXR1cyB3YXMgYW4gb3V0LXBhcmFtZXRlciBvZiBhdmNfdHVuZXJfZHNkLCB1bnVzZWQgYnkgY2FsbGVyICovCisJLyoKKwkgKiBGSVhNRToKKwkgKiB1OCAqc3RhdHVzIHdhcyBhbiBvdXQtcGFyYW1ldGVyIG9mIGF2Y190dW5lcl9kc2QsIHVudXNlZCBieSBjYWxsZXIuCisJICogQ2hlY2sgZm9yIEFWQ19SRVNQT05TRV9BQ0NFUFRFRCBoZXJlIGluc3RlYWQ/CisJICovCiAJaWYgKHN0YXR1cykKIAkJKnN0YXR1cyA9IHItPm9wZXJhbmRbMl07CiAjZW5kaWYKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlpZiAocmV0ID09IDApCisJCW1zbGVlcCg1MDApOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y190dW5lcl9zZXRfcGlkcyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdW5zaWduZWQgY2hhciBwaWRjLCB1MTYgcGlkW10pCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLwotCWludCBwb3MsIGs7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcmV0LCBwb3MsIGs7CiAKIAlpZiAocGlkYyA+IDE2ICYmIHBpZGMgIT0gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC02MTQsMjQgKzYxOSwyNyBAQAogCQkJYy0+b3BlcmFuZFtwb3MrK10gPSAweDAwOyAvKiB0YWJsZUlEICovCiAJCQljLT5vcGVyYW5kW3BvcysrXSA9IDB4MDA7IC8qIGZpbHRlcl9sZW5ndGggKi8KIAkJfQorCXBhZF9vcGVyYW5kcyhjLCBwb3MpOwogCi0JYy0+bGVuZ3RoID0gQUxJR04oMyArIHBvcywgNCk7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gQUxJR04oMyArIHBvcywgNCk7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JbXNsZWVwKDUwKTsKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlpZiAocmV0ID09IDApCisJCW1zbGVlcCg1MCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX3R1bmVyX2dldF90cyhzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOyAvKiBGSVhNRTogdW51c2VkICovCi0JaW50IHNsOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldCwgc2w7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC02NDYsMjYgKzY1NCwzMyBAQAogCWMtPm9wZXJhbmRbNF0gPSAweDAwOwkvKiBhbnRlbm5hIG51bWJlciAqLwogCWMtPm9wZXJhbmRbNV0gPSAweDA7IAkvKiBzeXN0ZW1fc3BlY2lmaWNfc2VhcmNoX2ZsYWdzICovCiAJYy0+b3BlcmFuZFs2XSA9IHNsOwkvKiBzeXN0ZW1fc3BlY2lmaWNfbXVsdGlwbGV4IHNlbGVjdGlvbl9sZW5ndGggKi8KLQljLT5vcGVyYW5kWzddID0gMHgwMDsJLyogdmFsaWRfZmxhZ3MgWzBdICovCi0JYy0+b3BlcmFuZFs4XSA9IDB4MDA7CS8qIHZhbGlkX2ZsYWdzIFsxXSAqLwotCWMtPm9wZXJhbmRbNyArIHNsXSA9IDB4MDA7IC8qIG5yX29mX2RzaXRfc2VsX3NwZWNzIChhbHdheXMgMCkgKi8KKwkvKgorCSAqIG9wZXJhbmRbN106IHZhbGlkX2ZsYWdzWzBdCisJICogb3BlcmFuZFs4XTogdmFsaWRfZmxhZ3NbMV0KKwkgKiBvcGVyYW5kWzcgKyBzbF06IG5yX29mX2RzaXRfc2VsX3NwZWNzIChhbHdheXMgMCkKKwkgKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA3LCAyNCk7CiAKLQljLT5sZW5ndGggPSBmZHR2LT50eXBlID09IEZJUkVEVFZfRFZCX1QgPyAyNCA6IDI4OworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IGZkdHYtPnR5cGUgPT0gRklSRURUVl9EVkJfVCA/IDI0IDogMjg7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JbXNsZWVwKDI1MCk7Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQltc2xlZXAoMjUwKTsKKworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfaWRlbnRpZnlfc3VidW5pdChzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTY3OCwzMSArNjkzLDM0IEBACiAJYy0+b3BlcmFuZFs0XSA9IDB4MDg7IC8qIGxlbmd0aCBsb3dieXRlICAqLwogCWMtPm9wZXJhbmRbNV0gPSAweDAwOyAvKiBvZmZzZXQgaGlnaGJ5dGUgKi8KIAljLT5vcGVyYW5kWzZdID0gMHgwZDsgLyogb2Zmc2V0IGxvd2J5dGUgICovCisJY2xlYXJfb3BlcmFuZHMoYywgNywgOCk7IC8qIHBhZGRpbmcgKi8KIAotCWMtPmxlbmd0aCA9IDEyOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAlpZiAoKHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9TVEFCTEUgJiYKIAkgICAgIHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgfHwKIAkgICAgKHItPm9wZXJhbmRbM10gPDwgOCkgKyByLT5vcGVyYW5kWzRdICE9IDgpIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJjYW5ub3QgcmVhZCBzdWJ1bml0IGlkZW50aWZpZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogI2RlZmluZSBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPIDIyCiAKIGludCBhdmNfdHVuZXJfc3RhdHVzKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBzdHJ1Y3QgZmlyZWR0dl90dW5lcl9zdGF0dXMgKnN0YXQpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKLQlpbnQgbGVuZ3RoOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IGxlbmd0aCwgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNzEwLDI3ICs3MjgsMzAgQEAKIAogCWMtPm9wZXJhbmRbMF0gPSBERVNDUklQVE9SX1RVTkVSX1NUQVRVUzsKIAljLT5vcGVyYW5kWzFdID0gMHhmZjsJLyogcmVhZF9yZXN1bHRfc3RhdHVzICovCi0JYy0+b3BlcmFuZFsyXSA9IDB4MDA7CS8qIHJlc2VydmVkICovCi0JYy0+b3BlcmFuZFszXSA9IDA7CS8qIFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gPj4gODsgKi8KLQljLT5vcGVyYW5kWzRdID0gMDsJLyogU0laRU9GX0FOVEVOTkFfSU5QVVRfSU5GTyAmIDB4ZmY7ICovCi0JYy0+b3BlcmFuZFs1XSA9IDB4MDA7Ci0JYy0+b3BlcmFuZFs2XSA9IDB4MDA7CisJLyoKKwkgKiBvcGVyYW5kWzJdOiByZXNlcnZlZAorCSAqIG9wZXJhbmRbM106IFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gPj4gOAorCSAqIG9wZXJhbmRbNF06IFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gJiAweGZmCisJICovCisJY2xlYXJfb3BlcmFuZHMoYywgMiwgMzEpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCWlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfU1RBQkxFICYmCiAJICAgIHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgewogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgImNhbm5vdCByZWFkIHR1bmVyIHN0YXR1c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAlsZW5ndGggPSByLT5vcGVyYW5kWzldOwogCWlmIChyLT5vcGVyYW5kWzFdICE9IDB4MTAgfHwgbGVuZ3RoICE9IFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8pIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJnb3QgaW52YWxpZCB0dW5lciBzdGF0dXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJc3RhdC0+YWN0aXZlX3N5c3RlbQkJPSByLT5vcGVyYW5kWzEwXTsKQEAgLTc2NiwyMCArNzg3LDIxIEBACiAJc3RhdC0+Y2FfZHZiX2ZsYWcJCT0gci0+b3BlcmFuZFszMV0gPj4gMyAmIDE7CiAJc3RhdC0+Y2FfZXJyb3JfZmxhZwkJPSByLT5vcGVyYW5kWzMxXSA+PiAyICYgMTsKIAlzdGF0LT5jYV9pbml0aWFsaXphdGlvbl9zdGF0dXMJPSByLT5vcGVyYW5kWzMxXSA+PiAxICYgMTsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2xuYl9jb250cm9sKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBjaGFyIHZvbHRhZ2UsIGNoYXIgYnVyc3QsCiAJCSAgICBjaGFyIGNvbnR0b25lLCBjaGFyIG5yZGlzZXEsCiAJCSAgICBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpkaXNlcWNtZCkKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOwotCWludCBpLCBqLCBrOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHBvcywgaiwgaywgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNzg5LDQxICs4MTEsNDEgQEAKIAljLT5vcGVyYW5kWzFdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMTsKIAljLT5vcGVyYW5kWzJdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMjsKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfTE5CX0NPTlRST0w7Ci0KIAljLT5vcGVyYW5kWzRdID0gdm9sdGFnZTsKIAljLT5vcGVyYW5kWzVdID0gbnJkaXNlcTsKIAotCWkgPSA2OwotCisJcG9zID0gNjsKIAlmb3IgKGogPSAwOyBqIDwgbnJkaXNlcTsgaisrKSB7Ci0JCWMtPm9wZXJhbmRbaSsrXSA9IGRpc2VxY21kW2pdLm1zZ19sZW47CisJCWMtPm9wZXJhbmRbcG9zKytdID0gZGlzZXFjbWRbal0ubXNnX2xlbjsKIAogCQlmb3IgKGsgPSAwOyBrIDwgZGlzZXFjbWRbal0ubXNnX2xlbjsgaysrKQotCQkJYy0+b3BlcmFuZFtpKytdID0gZGlzZXFjbWRbal0ubXNnW2tdOworCQkJYy0+b3BlcmFuZFtwb3MrK10gPSBkaXNlcWNtZFtqXS5tc2dba107CiAJfQorCWMtPm9wZXJhbmRbcG9zKytdID0gYnVyc3Q7CisJYy0+b3BlcmFuZFtwb3MrK10gPSBjb250dG9uZTsKKwlwYWRfb3BlcmFuZHMoYywgcG9zKTsKIAotCWMtPm9wZXJhbmRbaSsrXSA9IGJ1cnN0OwotCWMtPm9wZXJhbmRbaSsrXSA9IGNvbnR0b25lOwotCi0JYy0+bGVuZ3RoID0gQUxJR04oMyArIGksIDQpOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAlpZiAoci0+cmVzcG9uc2UgIT0gQVZDX1JFU1BPTlNFX0FDQ0VQVEVEKSB7CiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiTE5CIGNvbnRyb2wgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfcmVnaXN0ZXJfcmVtb3RlX2NvbnRyb2woc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9OT1RJRlk7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVU5JVCB8IDc7CkBAIC04MzMsMTAgKzg1NSwxNiBAQAogCWMtPm9wZXJhbmRbMV0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xOwogCWMtPm9wZXJhbmRbMl0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yOwogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9SRUdJU1RFUl9SRU1PVEVfQ09OVFJPTDsKKwljLT5vcGVyYW5kWzRdID0gMDsgLyogcGFkZGluZyAqLwogCi0JYy0+bGVuZ3RoID0gODsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSA4OworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCXJldHVybiBhdmNfd3JpdGUoZmR0diwgYywgTlVMTCk7CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGU/ICovCisKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGF2Y19yZW1vdGVfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTg1MSwxMSArODc5LDEwIEBACiAjaWYgMCAvKiBGSVhNRTogdW51c2VkICovCiBpbnQgYXZjX3R1bmVyX2hvc3QyY2Eoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTg2NywxNSArODk0LDE2IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfQVBQTElDQVRJT05fSU5GTzsgLyogY2EgdGFnICovCi0JYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCA4KTsKIAotCWMtPmxlbmd0aCA9IDEyOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZT8gKi8KIAotCXJldHVybiAwOworCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKIApAQCAtOTA2LDEyICs5MzQsMTEgQEAKIAogaW50IGF2Y19jYV9hcHBfaW5mbyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqYXBwX2luZm8sIHVuc2lnbmVkIGludCAqbGVuKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7Ci0JaW50IHBvczsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtOTIzLDExICs5NTAsMTIgQEAKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9BUFBMSUNBVElPTl9JTkZPOyAvKiBjYSB0YWcgKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlIGFuZCB2YWxpZGF0ZSByZXNwb25zZSBkYXRhICovCiAKQEAgLTkzOSwxOCArOTY3LDE5IEBACiAJYXBwX2luZm9bNF0gPSAweDAxOwogCW1lbWNweSgmYXBwX2luZm9bNV0sICZyLT5vcGVyYW5kW3Bvc10sIDUgKyByLT5vcGVyYW5kW3BvcyArIDRdKTsKIAkqbGVuID0gYXBwX2luZm9bM10gKyA0Oworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfaW5mbyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqYXBwX2luZm8sIHVuc2lnbmVkIGludCAqbGVuKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7Ci0JaW50IHBvczsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtOTYyLDExICs5OTEsMTQgQEAKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9BUFBMSUNBVElPTl9JTkZPOyAvKiBjYSB0YWcgKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZSBhbmQgdmFsaWRhdGUgcmVzcG9uc2UgZGF0YSAqLwogCiAJcG9zID0gZ2V0X2NhX29iamVjdF9wb3Mocik7CiAJYXBwX2luZm9bMF0gPSAoRU41MDIyMV9UQUdfQ0FfSU5GTyA+PiAxNikgJiAweGZmOwpAQCAtOTc2LDE3ICsxMDA4LDE4IEBACiAJYXBwX2luZm9bNF0gPSByLT5vcGVyYW5kW3BvcyArIDBdOwogCWFwcF9pbmZvWzVdID0gci0+b3BlcmFuZFtwb3MgKyAxXTsKIAkqbGVuID0gYXBwX2luZm9bM10gKyA0Oworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfcmVzZXQoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTEwMDIsMTkgKzEwMzUsMjAgQEAKIAljLT5vcGVyYW5kWzddID0gMTsgLyogbGVuZ3RoICovCiAJYy0+b3BlcmFuZFs4XSA9IDA7IC8qIGZvcmNlIGhhcmR3YXJlIHJlc2V0ICovCiAKLQljLT5sZW5ndGggPSAxMjsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CiAKLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGU/ICovCiAKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2NhX3BtdChzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqbXNnLCBpbnQgbGVuZ3RoKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKIAlpbnQgbGlzdF9tYW5hZ2VtZW50OwogCWludCBwcm9ncmFtX2luZm9fbGVuZ3RoOwogCWludCBwbXRfY21kX2lkOwpAQCAtMTAyMiwxMSArMTA1NiwxMiBAQAogCWludCB3cml0ZV9wb3M7CiAJaW50IGVzX2luZm9fbGVuZ3RoOwogCWludCBjcmMzMl9jc3VtOworCWludCByZXQ7CiAKIAlpZiAodW5saWtlbHkoYXZjX2RlYnVnICYgQVZDX0RFQlVHX0FQUExJQ0FUSU9OX1BNVCkpCiAJCWRlYnVnX3BtdChtc2csIGxlbmd0aCk7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMDU4LDcgKzEwOTMsNyBAQAogCiAJYy0+b3BlcmFuZFsxMl0gPSAweDAyOyAvKiBUYWJsZSBpZD0yICovCiAJYy0+b3BlcmFuZFsxM10gPSAweDgwOyAvKiBTZWN0aW9uIHN5bnRheCArIGxlbmd0aCAqLwotCS8qIGMtPm9wZXJhbmRbMTRdID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDEyOyAqLworCiAJYy0+b3BlcmFuZFsxNV0gPSBtc2dbMV07IC8qIFByb2dyYW0gbnVtYmVyICovCiAJYy0+b3BlcmFuZFsxNl0gPSBtc2dbMl07CiAJYy0+b3BlcmFuZFsxN10gPSAweDAxOyAvKiBWZXJzaW9uIG51bWJlcj0wICsgY3VycmVudC9uZXh0PTEgKi8KQEAgLTExMDYsMTIgKzExNDEsNyBAQAogCQkJd3JpdGVfcG9zICs9IGVzX2luZm9fbGVuZ3RoOwogCQl9CiAJfQotCi0JLyogQ1JDICovCi0JYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOwotCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKLQljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7Ci0JYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOworCXdyaXRlX3BvcyArPSA0OyAvKiBDUkMgKi8KIAogCWMtPm9wZXJhbmRbN10gPSAweDgyOwogCWMtPm9wZXJhbmRbOF0gPSAod3JpdGVfcG9zIC0gMTApID4+IDg7CkBAIC0xMTIzLDI4ICsxMTUzLDMxIEBACiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAzXSA9IChjcmMzMl9jc3VtID4+IDE2KSAmIDB4ZmY7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAyXSA9IChjcmMzMl9jc3VtID4+ICA4KSAmIDB4ZmY7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAxXSA9IChjcmMzMl9jc3VtID4+ICAwKSAmIDB4ZmY7CisJcGFkX29wZXJhbmRzKGMsIHdyaXRlX3Bvcyk7CiAKLQljLT5sZW5ndGggPSBBTElHTigzICsgd3JpdGVfcG9zLCA0KTsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBBTElHTigzICsgd3JpdGVfcG9zLCA0KTsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgewogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwKIAkJCSJDQSBQTVQgZmFpbGVkIHdpdGggcmVzcG9uc2UgMHgleFxuIiwgci0+cmVzcG9uc2UpOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKIAl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19jYV9nZXRfdGltZV9kYXRlKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBpbnQgKmludGVydmFsKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX1NUQVRVUzsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMTU2LDI4ICsxMTg5LDI4IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0NBMkhPU1Q7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfREFURV9USU1FOyAvKiBjYSB0YWcgKi8KLQljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCWNsZWFyX29wZXJhbmRzKGMsIDYsIExBU1RfT1BFUkFORCk7CiAKLQljLT5sZW5ndGggPSAxMjsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KIAogCSppbnRlcnZhbCA9IHItPm9wZXJhbmRbZ2V0X2NhX29iamVjdF9wb3MocildOworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfZW50ZXJfbWVudShzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOyAvKiBGSVhNRTogdW51c2VkICovCisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX1NUQVRVUzsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMTg5LDI0ICsxMjIyLDI1IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfRU5URVJfTUVOVTsKLQljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCWNsZWFyX29wZXJhbmRzKGMsIDYsIDgpOwogCi0JYy0+bGVuZ3RoID0gMTI7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19jYV9nZXRfbW1pKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBjaGFyICptbWlfb2JqZWN0LCB1bnNpZ25lZCBpbnQgKmxlbikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtMTIxOCwyMCArMTI1MiwyMSBAQAogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOwogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX01NSTsKLQljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCWNsZWFyX29wZXJhbmRzKGMsIDYsIExBU1RfT1BFUkFORCk7CiAKLQljLT5sZW5ndGggPSAxMjsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KIAogCSpsZW4gPSBnZXRfY2Ffb2JqZWN0X2xlbmd0aChyKTsKIAltZW1jcHkobW1pX29iamVjdCwgJnItPm9wZXJhbmRbZ2V0X2NhX29iamVjdF9wb3MocildLCAqbGVuKTsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAjZGVmaW5lIENNUF9PVVRQVVRfUExVR19DT05UUk9MX1JFR18wCTB4ZmZmZmYwMDAwOTA0VUxMCkBAIC0xMjQwLDE0ICsxMjc1LDE0IEBACiB7CiAJaW50IHJldDsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmZkdHYtPmF2Y19tdXRleCkpCi0JCXJldHVybiAtRUlOVFI7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCXJldCA9IGZkdHYtPmJhY2tlbmQtPnJlYWQoZmR0diwgYWRkciwgZGF0YSk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiQ01QOiByZWFkIEkvTyBlcnJvclxuIik7CiAKIAltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjU1LDE0ICsxMjkwLDE5IEBACiB7CiAJaW50IHJldDsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmZkdHYtPmF2Y19tdXRleCkpCi0JCXJldHVybiAtRUlOVFI7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldCA9IGZkdHYtPmJhY2tlbmQtPmxvY2soZmR0diwgYWRkciwgZGF0YSk7CisJLyogZGF0YVtdIGlzIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBETUEtbWFwcGVkLiAqLworCW1lbWNweShmZHR2LT5hdmNfZGF0YSwgZGF0YSwgOCk7CisKKwlyZXQgPSBmZHR2LT5iYWNrZW5kLT5sb2NrKGZkdHYsIGFkZHIsIGZkdHYtPmF2Y19kYXRhKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJDTVA6IGxvY2sgSS9PIGVycm9yXG4iKTsKKwllbHNlCisJCW1lbWNweShkYXRhLCBmZHR2LT5hdmNfZGF0YSwgOCk7CiAKIAltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1kdmIuYwppbmRleCBmYzk5OTZjLi4wNzllOGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZHZiLmMKQEAgLTI3Nyw3ICsyNzcsNiBAQAogCiAJbXV0ZXhfaW5pdCgmZmR0di0+YXZjX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmZHR2LT5hdmNfd2FpdCk7Ci0JZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gdHJ1ZTsKIAltdXRleF9pbml0KCZmZHR2LT5kZW11eF9tdXRleCk7CiAJSU5JVF9XT1JLKCZmZHR2LT5yZW1vdGVfY3RybF93b3JrLCBhdmNfcmVtb3RlX2N0cmxfd29yayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYwppbmRleCA2MjIzYmYwLi43YTNkZTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCkBAIC00MSw3ICs0MSw3IEBACiAJcmV0dXJuIHJjb2RlICE9IFJDT0RFX0NPTVBMRVRFID8gLUVJTyA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgX19iZTMyIGRhdGFbXSkKK3N0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gbm9kZV9yZXEoZmR0diwgYWRkciwgZGF0YSwgOCwgVENPREVfTE9DS19DT01QQVJFX1NXQVApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di5oCmluZGV4IDM1MDgwZGIuLjc4Y2MyOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LmgKQEAgLTczLDcgKzczLDcgQEAKIHN0cnVjdCBmaXJlZHR2OwogCiBzdHJ1Y3QgZmlyZWR0dl9iYWNrZW5kIHsKLQlpbnQgKCpsb2NrKShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIF9fYmUzMiBkYXRhW10pOworCWludCAoKmxvY2spKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSk7CiAJaW50ICgqcmVhZCkoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHU2NCBhZGRyLCB2b2lkICpkYXRhKTsKIAlpbnQgKCp3cml0ZSkoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHU2NCBhZGRyLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIAlpbnQgKCpzdGFydF9pc28pKHN0cnVjdCBmaXJlZHR2ICpmZHR2KTsKQEAgLTExNCw4ICsxMTQsOCBAQAogCXVuc2lnbmVkIGxvbmcJCWNoYW5uZWxfYWN0aXZlOwogCXUxNgkJCWNoYW5uZWxfcGlkWzE2XTsKIAotCXNpemVfdAkJCXJlc3BvbnNlX2xlbmd0aDsKLQl1OAkJCXJlc3BvbnNlWzUxMl07CisJaW50CQkJYXZjX2RhdGFfbGVuZ3RoOworCXU4CQkJYXZjX2RhdGFbNTEyXTsKIH07CiAKIC8qIGZpcmVkdHYtMTM5NC5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmgKaW5kZXggMjhiOTBjOS4uZTkwZmE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuaApAQCAtNDQsNiArNDQsNyBAQAogCUFGOTAxM19UVU5FUl9NVDIwNjBfMiAgID0gMTQ3LCAvKiBNaWNyb3R1bmUgKi8KIAlBRjkwMTNfVFVORVJfVERBMTgyNzEgICA9IDE1NiwgLyogTlhQICovCiAJQUY5MDEzX1RVTkVSX1FUMTAxMEEgICAgPSAxNjIsIC8qIFF1YW50ZWsgKi8KKwlBRjkwMTNfVFVORVJfVERBMTgyMTggICA9IDE3OSwgLyogTlhQICovCiB9OwogCiAvKiBBRjkwMTMvNSBHUElPcyAobW9zdGx5IGd1ZXNzZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5jCmluZGV4IDU5ODgxYTUuLjQzYWFjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5jCkBAIC0xNzAsNiArMTcwLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X2FnY19jb25maWcoc3RydWN0IGF0Ym1fc3RhdGUgKnByaXYsCisJdTggbWluLCB1OCBtYXgsIHU4IGhvbGRfbG9vcCkKK3sKKwkvKiBubyBlZmZlY3QgaWYgYm90aCBtaW4gYW5kIG1heCBhcmUgemVybyAqLworCWlmICghbWluICYmICFtYXgpCisJICAgIHJldHVybiAwOworCisJYXRibTg4MzBfd3JpdGVfcmVnKHByaXYsIFJFR19BR0NfTUlOLCBtaW4pOworCWF0Ym04ODMwX3dyaXRlX3JlZyhwcml2LCBSRUdfQUdDX01BWCwgbWF4KTsKKwlhdGJtODgzMF93cml0ZV9yZWcocHJpdiwgUkVHX0FHQ19IT0xEX0xPT1AsIGhvbGRfbG9vcCk7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCBzZXRfc3RhdGljX2NoYW5uZWxfbW9kZShzdHJ1Y3QgYXRibV9zdGF0ZSAqcHJpdikKIHsKQEAgLTIyNyw2ICsyNDAsOSBAQAogCS8qU2V0IElGIGZyZXF1ZW5jeSovCiAJc2V0X2lmX2ZyZXEocHJpdiwgY2ZnLT5pZl9mcmVxKTsKIAorCS8qU2V0IEFHQyBDb25maWcqLworCXNldF9hZ2NfY29uZmlnKHByaXYsIGNmZy0+YWdjX21pbiwgY2ZnLT5hZ2NfbWF4LAorCQljZmctPmFnY19ob2xkX2xvb3ApOwogCiAJLypTZXQgc3RhdGljIGNoYW5uZWwgbW9kZSovCiAJc2V0X3N0YXRpY19jaGFubmVsX21vZGUocHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA5MC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuYwppbmRleCA2MTQ1NTI3Li43ZWFjMTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA5MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDkwLmMKQEAgLTI4Myw3ICsyODMsNyBAQAogCXJldHVybiAwOwogfQogCi1leHRlcm4gdm9pZCBkaWIwMDkwX2RjY19mcmVxKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBmYXN0KQordm9pZCBkaWIwMDkwX2RjY19mcmVxKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBmYXN0KQogewogCXN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwogCWlmIChmYXN0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMKaW5kZXggNmY2ZmEyOS4uMmFhOTdkZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYwpAQCAtMTk5OSw2ICsxOTk5LDggQEAKIAlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgdGltZSwgcmV0OwogCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfSVNEQlQ7CisKIAlkaWI4MDAwX3NldF9vdXRwdXRfbW9kZShzdGF0ZSwgT1VUTU9ERV9ISUdIX1opOwogCiAJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCmluZGV4IGU2ZjNkNzMuLjk4MGUwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIEVYUE9SVF9TWU1CT0woZGlieDAwMF9leGl0X2kyY19tYXN0ZXIpOwogCiAKLXUzMiBzeXN0aW1lKCkKK3UzMiBzeXN0aW1lKHZvaWQpCiB7CiAgICAgc3RydWN0IHRpbWVzcGVjIHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwppbmRleCBiMTgxYmYwLi4xMzQzNzI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwpAQCAtMTU4LDcgKzE1OCw4IEBACiAJLyogb3ZlcnJpZGUgZnJvbnRlbmQgb3BzICovCiAJZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKIAlmZS0+b3BzLmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlID0gbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlOwotCWZlLT5vcHMuc2V0X3RvbmUgPSBsbmJwMjFfc2V0X3RvbmU7CisJaWYgKCEob3ZlcnJpZGVfY2xlYXIgJiBMTkJIMjRfVEVOKSkgLyoyMmtIeiBsb2dpYyBjb250cm9sbGVkIGJ5IGRlbW9kKi8KKwkJZmUtPm9wcy5zZXRfdG9uZSA9IGxuYnAyMV9zZXRfdG9uZTsKIAlwcmludGsoS0VSTl9JTkZPICJMTkJ4MnggYXR0YWNoZWQgb24gYWRkcj0leFxuIiwgbG5icDIxLT5pMmNfYWRkcik7CiAKIAlyZXR1cm4gZmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMKaW5kZXggOTU1MmEyMi4uZDIxYTMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguYwpAQCAtOTcsOCArOTcsNiBAQAogI2RlZmluZQlMTkJfU1VQUExZX0NUUkxfUkVHXzQJCTB4Y2UKICNkZWZpbmUJTE5CX1NVUFBMWV9TVEFUVVNfUkVHCQkweGNmCiAKLSNkZWZpbmUgRkFMU0UJMAotI2RlZmluZSBUUlVFCTEKICNkZWZpbmUgRkFJTAktMQogI2RlZmluZSBQQVNTCTAKIApAQCAtNzE4LDcgKzcxNiw3IEBACiAJaW50IGZpbmVfdHVuZV9mcmVxOwogCXVuc2lnbmVkIGNoYXIgc2FtcGxlX3JhdGUgPSAwOwogCS8qIGJvb2xlYW4gKi8KLQl1bnNpZ25lZCBpbnQgaW5iYW5kX2ludGVyZmVyZXJfaW5kOworCWJvb2wgaW5iYW5kX2ludGVyZmVyZXJfaW5kOwogCiAJLyogSU5URVJNRURJQVRFIFZBTFVFUyAqLwogCWludCBpY29hcnNlX3R1bmVfZnJlcTsgLyogTUh6ICovCkBAIC03MjgsMTUgKzcyNiw4IEBACiAJdW5zaWduZWQgaW50IHgxOwogCXVuc2lnbmVkIGludCB4MjsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgaW5iYW5kX2ludGVyZmVyZXJfZGl2MltBTExPV0FCTEVfRlNfQ09VTlRdID0gewotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFCi0JfTsKLQl1bnNpZ25lZCBpbnQgaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtBTExPV0FCTEVfRlNfQ09VTlRdID0gewotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFCi0JfTsKLQorCWJvb2wgaW5iYW5kX2ludGVyZmVyZXJfZGl2MltBTExPV0FCTEVfRlNfQ09VTlRdOworCWJvb2wgaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtBTExPV0FCTEVfRlNfQ09VTlRdOwogCWludCBzdGF0dXM7CiAKIAkvKiBhbGxvd2FibGUgc2FtcGxlIHJhdGVzIGZvciBBREMgaW4gTUh6ICovCkBAIC03NjIsNyArNzUzLDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpCi0JCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldID0gRkFMU0U7CisJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldID0gZmFsc2U7CiAKIAlpZl9saW1pdF9oaWdoID0gLTcwMDAwMDsKIAlpZl9saW1pdF9sb3cgPSAtMTAwMDAwOwpAQCAtNzk4LDcgKzc4OSw3IEBACiAKIAkJaWYgKCgoYmFuZF9sb3cgPCB4MSkgJiYgKHgxIDwgYmFuZF9oaWdoKSkgfHwKIAkJCQkJKChiYW5kX2xvdyA8IHgyKSAmJiAoeDIgPCBiYW5kX2hpZ2gpKSkKLQkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSA9IFRSVUU7CisJCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0gPSB0cnVlOwogCiAJfQogCkBAIC04MTEsMjUgKzgwMiwyOCBAQAogCiAJCWlmICgoKGJhbmRfbG93IDwgeDEpICYmICh4MSA8IGJhbmRfaGlnaCkpIHx8CiAJCQkJCSgoYmFuZF9sb3cgPCB4MikgJiYgKHgyIDwgYmFuZF9oaWdoKSkpCi0JCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSBUUlVFOworCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID0gdHJ1ZTsKIAl9CiAKLQlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgPSBUUlVFOwotCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkKLQkJaW5iYW5kX2ludGVyZmVyZXJfaW5kICY9IGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfAotCQkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXTsKKwlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkgeworCQlpZiAoaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSB8fCBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSB7CisJCQlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJaWYgKGluYmFuZF9pbnRlcmZlcmVyX2luZCkgewogCQlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpIHsKLQkJCWlmIChpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID09IEZBTFNFKSB7CisJCQlpZiAoIWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0pIHsKIAkJCQlzYW1wbGVfcmF0ZSA9ICh1OCkgYWZzW2ldOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKSB7Ci0JCQlpZiAoKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfAotCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSA9PSBGQUxTRSkgeworCQkJaWYgKChpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldIHx8CisJCQkgICAgICFpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSkgewogCQkJCXNhbXBsZV9yYXRlID0gKHU4KSBhZnNbaV07CiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaAppbmRleCAyOWMzZmE4Li5lM2UzNWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwLmgKQEAgLTQ5LDYgKzQ5LDggQEAKIAl1OCB0dW4yX21hZGRyZXNzOwogCXU4IHR1bjFfYWRjOy8qIDEgZm9yIHN0djYxMTAsIDIgZm9yIHN0YjYxMDAgKi8KIAl1OCB0dW4yX2FkYzsKKwl1OCB0dW4xX3R5cGU7LyogZm9yIG5vdyAzIGZvciBzdGI2MTAwIGF1dG8sIGVsc2UgLSBzb2Z0d2FyZSAqLworCXU4IHR1bjJfdHlwZTsKIAkvKiBTZXQgZGV2aWNlIHBhcmFtIHRvIHN0YXJ0IGRtYSAqLwogCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKaW5kZXggODc2MmM4Ni4uMDFmOGYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotdm9pZCBleHRyYWN0X21hc2tfcG9zKHUzMiBsYWJlbCwgdTggKm1hc2ssIHU4ICpwb3MpCitzdGF0aWMgdm9pZCBleHRyYWN0X21hc2tfcG9zKHUzMiBsYWJlbCwgdTggKm1hc2ssIHU4ICpwb3MpCiB7CiAJdTggcG9zaXRpb24gPSAwLCBpID0gMDsKIApAQCAtMjE4LDcgKzIxOCw3IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfaW5pdGlhbGl6ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCkKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9pbml0aWFsaXplKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwKQogewogCXMzMiBpOwogCkBAIC0yODIsNyArMjgyLDcgQEAKIAlyZXR1cm4gU1RWMDkwMF9OT19FUlJPUjsKIH0KIAotdTMyIHN0djA5MDBfZ2V0X21jbGtfZnJlcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIGV4dF9jbGspCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X21jbGtfZnJlcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIGV4dF9jbGspCiB7CiAJdTMyIG1jbGsgPSA5MDAwMDAwMCwgZGl2ID0gMCwgYWRfZGl2ID0gMDsKIApAQCAtMjk2LDcgKzI5Niw3IEBACiAJcmV0dXJuIG1jbGs7CiB9CiAKLWVudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX3NldF9tY2xrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCB1MzIgbWNsaykKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9zZXRfbWNsayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIG1jbGspCiB7CiAJdTMyIG1fZGl2LCBjbGtfc2VsOwogCkBAIC0zMzQsNyArMzM0LDcgQEAKIAlyZXR1cm4gU1RWMDkwMF9OT19FUlJPUjsKIH0KIAotdTMyIHN0djA5MDBfZ2V0X2Vycl9jb3VudChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGNudHIsCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X2Vycl9jb3VudChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGNudHIsCiAJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCiB7CiAJdTMyIGxzYiwgbXNiLCBoc2IsIGVycl92YWw7CkBAIC01NjcsNiArNTY3LDQ2IEBACiAJfQogfQogCit1MzIgc3R2MDkwMF9nZXRfZnJlcV9hdXRvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCBpbnQgZGVtb2QpCit7CisJdTMyIGZyZXEsIHJvdW5kOworCS8qCUZvcm11bGF0IDoKKwlUdW5lcl9GcmVxdWVuY3koTUh6KQk9IFJlZ3MgLyA2NAorCVR1bmVyX2dyYW51bGFyaXR5KE1IeikJPSBSZWdzIC8gMjA0OAorCXJlYWxfVHVuZXJfRnJlcXVlbmN5CT0gVHVuZXJfRnJlcXVlbmN5KE1IeikgLSBUdW5lcl9ncmFudWxhcml0eShNSHopCisJKi8KKwlmcmVxID0gKHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGRlJFUTIpIDw8IDEwKSArCisJCShzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRkZSRVExKSA8PCAyKSArCisJCXN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGRlJFUTApOworCisJZnJlcSA9IChmcmVxICogMTAwMCkgLyA2NDsKKworCXJvdW5kID0gKHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGUkVTVEUxKSA+PiAyKSArCisJCXN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGUkVTVEUwKTsKKworCXJvdW5kID0gKHJvdW5kICogMTAwMCkgLyAyMDQ4OworCisJcmV0dXJuIGZyZXEgKyByb3VuZDsKK30KKwordm9pZCBzdHYwOTAwX3NldF90dW5lcl9hdXRvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCB1MzIgRnJlcXVlbmN5LAorCQkJCQkJdTMyIEJhbmR3aWR0aCwgaW50IGRlbW9kKQoreworCXUzMiB0dW5lckZyZXF1ZW5jeTsKKwkvKiBGb3JtdWxhdDoKKwlUdW5lcl9mcmVxdWVuY3lfcmVnPSBGcmVxdWVuY3koTUh6KSo2NAorCSovCisJdHVuZXJGcmVxdWVuY3kgPSAoRnJlcXVlbmN5ICogNjQpIC8gMTAwMDsKKworCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBUVU5fUkZGUkVRMiwgKHR1bmVyRnJlcXVlbmN5ID4+IDEwKSk7CisJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIFRVTl9SRkZSRVExLCAodHVuZXJGcmVxdWVuY3kgPj4gMikgJiAweGZmKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgVFVOX1JGRlJFUTAsICh0dW5lckZyZXF1ZW5jeSAmIDB4MDMpKTsKKwkvKiBMb3cgUGFzcyBGaWx0ZXIgPSBCVyAvMiAoTUh6KSovCisJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIFRVTl9CVywgQmFuZHdpZHRoIC8gMjAwMDAwMCk7CisJLyogVHVuZXIgV3JpdGUgdHJpZyAqLworCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFROUkxELCAxKTsKK30KKwogc3RhdGljIHMzMiBzdHYwOTAwX2dldF9yZl9sZXZlbChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKIAkJCQljb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSAqbG9va3VwLAogCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCkBAIC0xMzI5LDcgKzEzNjksNiBAQAogCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CiAJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGRlbW9kRXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOwogCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwID0gTlVMTDsKLQogCWludCBzZWxvc2NpLCBpOwogCiAJc3RydWN0IHN0djA5MDBfaW5vZGUgKnRlbXBfaW50ID0gZmluZF9pbm9kZShzdGF0ZS0+aTJjX2FkYXAsCkBAIC0xMzQ1LDcgKzEzODQsMTQgQEAKIAl9IGVsc2UgewogCQlzdGF0ZS0+aW50ZXJuYWwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCksCiAJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoc3RhdGUtPmludGVybmFsID09IE5VTEwpCisJCQlyZXR1cm4gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKIAkJdGVtcF9pbnQgPSBhcHBlbmRfaW50ZXJuYWwoc3RhdGUtPmludGVybmFsKTsKKwkJaWYgKHRlbXBfaW50ID09IE5VTEwpIHsKKwkJCWtmcmVlKHN0YXRlLT5pbnRlcm5hbCk7CisJCQlzdGF0ZS0+aW50ZXJuYWwgPSBOVUxMOworCQkJcmV0dXJuIFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CisJCX0KIAkJc3RhdGUtPmludGVybmFsLT5kbWRzX3VzZWQgPSAxOwogCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGFwID0gc3RhdGUtPmkyY19hZGFwOwogCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKQEAgLTEzNzEsMTEgKzE0MTcsNiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JaWYgKHN0YXRlLT5pbnRlcm5hbCA9PSBOVUxMKSB7Ci0JCWVycm9yID0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQogCWludHAgPSBzdGF0ZS0+aW50ZXJuYWw7CiAKIAlpbnRwLT5kZW1vZF9tb2RlID0gcF9pbml0LT5kZW1vZF9tb2RlOwpAQCAtMTQwNCw2ICsxNDQ1LDI3IEBACiAJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9SU1RfSFdBUkUsIDApOwogCX0KIAorCWludHAtPnR1bmVyX3R5cGVbMF0gPSBwX2luaXQtPnR1bmVyMV90eXBlOworCWludHAtPnR1bmVyX3R5cGVbMV0gPSBwX2luaXQtPnR1bmVyMl90eXBlOworCS8qIHR1bmVyIGluaXQgKi8KKwlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIxX3R5cGUpIHsKKwljYXNlIDM6IC8qRkVfQVVUT19TVEI2MTAwOiovCisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkNGRywgMHgzYyk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkNGRzIsIDB4ODYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDRkczLCAweDE4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SWFRBTCwgMjcpOyAvKiAyN01IeiAqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJTVEVQUywgMHgwNSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkdBSU4sIDB4MTcpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJBREosIDB4MWYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDVEwyLCAweDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfVFVOX1RZUEUsIDMpOworCQlicmVhazsKKwkvKiBjYXNlIEZFX1NXX1RVTkVSOiAqLworCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9UVU5fVFlQRSwgNik7CisJCWJyZWFrOworCX0KKwogCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9UVU5fTUFERFJFU1MsIHBfaW5pdC0+dHVuMV9tYWRkcmVzcyk7CiAJc3dpdGNoIChwX2luaXQtPnR1bmVyMV9hZGMpIHsKIAljYXNlIDE6CkBAIC0xNDEzLDYgKzE0NzUsMjcgQEAKIAkJYnJlYWs7CiAJfQogCisJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5STEQsIDEpOyAvKiBodyB0dW5lciAqLworCisJLyogdHVuZXIgaW5pdCAqLworCXN3aXRjaCAocF9pbml0LT50dW5lcjJfdHlwZSkgeworCWNhc2UgMzogLypGRV9BVVRPX1NUQjYxMDA6Ki8KKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SQ0ZHLCAweDNjKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SQ0ZHMiwgMHg4Nik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNGRzMsIDB4MTgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJYVEFMLCAyNyk7IC8qIDI3TUh6ICovCisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUlNURVBTLCAweDA1KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SR0FJTiwgMHgxNyk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkFESiwgMHgxZik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNUTDIsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMl9UVU5fVFlQRSwgMyk7CisJCWJyZWFrOworCS8qIGNhc2UgRkVfU1dfVFVORVI6ICovCisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AyX1RVTl9UWVBFLCA2KTsKKwkJYnJlYWs7CisJfQorCiAJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AyX1RVTl9NQUREUkVTUywgcF9pbml0LT50dW4yX21hZGRyZXNzKTsKIAlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIyX2FkYykgewogCWNhc2UgMToKQEAgLTE0MjIsNiArMTUwNSw4IEBACiAJCWJyZWFrOwogCX0KIAorCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkxELCAxKTsgLyogaHcgdHVuZXIgKi8KKwogCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9UVU5fSVFTV0FQLCBwX2luaXQtPnR1bjFfaXFfaW52KTsKIAlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDJfVFVOX0lRU1dBUCwgcF9pbml0LT50dW4yX2lxX2ludik7CiAJc3R2MDkwMF9zZXRfbWNsayhpbnRwLCAxMzUwMDAwMDApOwpAQCAtMTgyNCwxMCArMTkwOSwxMiBAQAogCQlpbml0X3BhcmFtcy50dW4xX21hZGRyZXNzCT0gY29uZmlnLT50dW4xX21hZGRyZXNzOwogCQlpbml0X3BhcmFtcy50dW4xX2lxX2ludgkJPSBTVFYwOTAwX0lRX05PUk1BTDsKIAkJaW5pdF9wYXJhbXMudHVuZXIxX2FkYwkJPSBjb25maWctPnR1bjFfYWRjOworCQlpbml0X3BhcmFtcy50dW5lcjFfdHlwZQkJPSBjb25maWctPnR1bjFfdHlwZTsKIAkJaW5pdF9wYXJhbXMucGF0aDJfdHNfY2xvY2sJPSBjb25maWctPnBhdGgyX21vZGU7CiAJCWluaXRfcGFyYW1zLnRzX2NvbmZpZwkJPSBjb25maWctPnRzX2NvbmZpZ19yZWdzOwogCQlpbml0X3BhcmFtcy50dW4yX21hZGRyZXNzCT0gY29uZmlnLT50dW4yX21hZGRyZXNzOwogCQlpbml0X3BhcmFtcy50dW5lcjJfYWRjCQk9IGNvbmZpZy0+dHVuMl9hZGM7CisJCWluaXRfcGFyYW1zLnR1bmVyMl90eXBlCQk9IGNvbmZpZy0+dHVuMl90eXBlOwogCQlpbml0X3BhcmFtcy50dW4yX2lxX2ludgkJPSBTVFYwOTAwX0lRX1NXQVBQRUQ7CiAKIAkJZXJyX3N0djA5MDAgPSBzdHYwOTAwX2luaXRfaW50ZXJuYWwoJnN0YXRlLT5mcm9udGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaAppbmRleCBkOGJhOGE5Li5iNjJiMGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCkBAIC0yNDcsNiArMjQ3LDcgQEAKIAogCXU4CXR1bjFfbWFkZHJlc3M7CiAJaW50CXR1bmVyMV9hZGM7CisJaW50IAl0dW5lcjFfdHlwZTsKIAogCS8qIElRIGZyb20gdGhlIHR1bmVyMSB0byB0aGUgZGVtb2QgKi8KIAllbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uCXR1bjFfaXFfaW52OwpAQCAtMjU0LDYgKzI1NSw3IEBACiAKIAl1OAl0dW4yX21hZGRyZXNzOwogCWludAl0dW5lcjJfYWRjOworCWludAl0dW5lcjJfdHlwZTsKIAogCS8qIElRIGZyb20gdGhlIHR1bmVyMiB0byB0aGUgZGVtb2QgKi8KIAllbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uCXR1bjJfaXFfaW52OwpAQCAtMzA5LDYgKzMxMSw4IEBACiAJczMyCWJ3WzJdOwogCXMzMglzeW1ib2xfcmF0ZVsyXTsKIAlzMzIJc3JjaF9yYW5nZVsyXTsKKwkvKiBmb3Igc29mdHdhcmUvYXV0byB0dW5lciAqLworCWludAl0dW5lcl90eXBlWzJdOwogCiAJLyogYWxnb3JpdGhtIGZvciBzZWFyY2ggQmxpbmQsIENvbGQgb3IgV2FybSovCiAJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvCXNyY2hfYWxnb1syXTsKQEAgLTM5NCw0ICszOTgsMTEgQEAKIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQgc3R2MDkwMF9nZXRfc3RhbmRhcmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CiAKK2V4dGVybiB1MzIKK3N0djA5MDBfZ2V0X2ZyZXFfYXV0byhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGRlbW9kKTsKKworZXh0ZXJuIHZvaWQKK3N0djA5MDBfc2V0X3R1bmVyX2F1dG8oc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIHUzMiBGcmVxdWVuY3ksCisJCQkJCQl1MzIgQmFuZHdpZHRoLCBpbnQgZGVtb2QpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKaW5kZXggN2I4ZWRmMS4uNzMxYWZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKQEAgLTMxNzQsMTcgKzMxNzQsMjEgQEAKICNkZWZpbmUgUjA5MDBfUDFfVE5SUkYxIDB4ZjRlOQogI2RlZmluZSBUTlJSRjEgUkVHeChSMDkwMF9QMV9UTlJSRjEpCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVEyIDB4ZjRlOTAwZmYKKyNkZWZpbmUgVFVOX1JGRlJFUTIgRkxEeChGMDkwMF9QMV9UVU5fUkZGUkVRMikKIAogLypQMV9UTlJSRjAqLwogI2RlZmluZSBSMDkwMF9QMV9UTlJSRjAgMHhmNGVhCiAjZGVmaW5lIFROUlJGMCBSRUd4KFIwOTAwX1AxX1ROUlJGMCkKICNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGRlJFUTEgMHhmNGVhMDBmZgorI2RlZmluZSBUVU5fUkZGUkVRMSBGTER4KEYwOTAwX1AxX1RVTl9SRkZSRVExKQogCiAvKlAxX1ROUkJXKi8KICNkZWZpbmUgUjA5MDBfUDFfVE5SQlcgMHhmNGViCiAjZGVmaW5lIFROUkJXIFJFR3goUjA5MDBfUDFfVE5SQlcpCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVEwIDB4ZjRlYjAwYzAKKyNkZWZpbmUgVFVOX1JGRlJFUTAgRkxEeChGMDkwMF9QMV9UVU5fUkZGUkVRMCkKICNkZWZpbmUgRjA5MDBfUDFfVFVOX0JXIDB4ZjRlYjAwM2YKKyNkZWZpbmUgVFVOX0JXIEZMRHgoRjA5MDBfUDFfVFVOX0JXKQogCiAvKlAxX1ROUkFESiovCiAjZGVmaW5lIFIwOTAwX1AxX1ROUkFESiAweGY0ZWMKQEAgLTMyMzQsMTEgKzMyMzgsMTMgQEAKICNkZWZpbmUgRjA5MDBfUDFfVFVOX0kyQ0xPQ0tFRCAweGY0ZjYwMDEwCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9QUk9HRE9ORSAweGY0ZjYwMDBjCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRlJFU1RFMSAweGY0ZjYwMDAzCisjZGVmaW5lIFRVTl9SRlJFU1RFMSBGTER4KEYwOTAwX1AxX1RVTl9SRlJFU1RFMSkKIAogLypQMV9UTlJSRVNURSovCiAjZGVmaW5lIFIwOTAwX1AxX1ROUlJFU1RFIDB4ZjRmNwogI2RlZmluZSBUTlJSRVNURSBSRUd4KFIwOTAwX1AxX1ROUlJFU1RFKQogI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZSRVNURTAgMHhmNGY3MDBmZgorI2RlZmluZSBUVU5fUkZSRVNURTAgRkxEeChGMDkwMF9QMV9UVU5fUkZSRVNURTApCiAKIC8qUDFfU01BUENPRUY3Ki8KICNkZWZpbmUgUjA5MDBfUDFfU01BUENPRUY3IDB4ZjUwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMKaW5kZXggYjhkYTg3Zi4uYmEwNzA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlyZXR1cm4gbG9jazsKIH0KIAotaW50IHN0djA5MDBfc3dfYWxnbyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKK3N0YXRpYyBpbnQgc3R2MDkwMF9zd19hbGdvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLAogCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCiB7CiAJaW50CWxvY2sgPSBGQUxTRSwKQEAgLTYwNiw3ICs2MDYsMTIgQEAKIAkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CiAKIAkJaWYgKGludHAtPmNoaXBfaWQgPD0gMHgyMCkgewotCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGludHAtPmJ3W2RdKTsKKwkJCWlmIChpbnRwLT50dW5lcl90eXBlW2RdID09IDMpCisJCQkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLCB0dW5lcl9mcmVxLAorCQkJCQkJaW50cC0+YndbZF0sIGRlbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaW50cC0+YndbZF0pOworCiAJCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBETURJU1RBVEUsIDB4MWMpOwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgQ0ZSSU5JVDEsIDApOwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgQ0ZSSU5JVDAsIDApOwpAQCAtNzkwLDcgKzc5NSw3IEBACiAJcmV0dXJuIHByYXRlOwogfQogCi12b2lkIHN0djA5MDBfc2V0X2R2YnMxX3RyYWNrX2Nhcl9sb29wKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLAorc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfZHZiczFfdHJhY2tfY2FyX2xvb3Aoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsCiAJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsCiAJCQkJCXUzMiBzcmF0ZSkKIHsKQEAgLTk3Niw4ICs5ODEsMTYgQEAKIAkJCQkJaW50cC0+cm9sbG9mZikgKyAxMDAwMDAwMDsKIAogCQlpZiAoKGludHAtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bl9zdyA9PSAxKSkgewotCQkJaWYgKGludHAtPnNyY2hfYWxnb1tkZW1vZF0gIT0gU1RWMDkwMF9XQVJNX1NUQVJUKQotCQkJCXN0djA5MDBfc2V0X2JhbmR3aWR0aChmZSwgaW50cC0+YndbZGVtb2RdKTsKKwkJCWlmIChpbnRwLT5zcmNoX2FsZ29bZGVtb2RdICE9IFNUVjA5MDBfV0FSTV9TVEFSVCkgeworCQkJCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQkJCQlzdHYwOTAwX3NldF90dW5lcl9hdXRvKGludHAsCisJCQkJCQkJaW50cC0+ZnJlcVtkZW1vZF0sCisJCQkJCQkJaW50cC0+YndbZGVtb2RdLAorCQkJCQkJCWRlbW9kKTsKKwkJCQllbHNlCisJCQkJCXN0djA5MDBfc2V0X2JhbmR3aWR0aChmZSwKKwkJCQkJCQlpbnRwLT5id1tkZW1vZF0pOworCQkJfQogCQl9CiAKIAkJaWYgKChpbnRwLT5zcmNoX2FsZ29bZGVtb2RdID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB8fApAQCAtMTIwMiw3ICsxMjE1LDExIEBACiAJfQogCiAJcmVzdWx0LT5zdGFuZGFyZCA9IHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBkKTsKLQlyZXN1bHQtPmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQlyZXN1bHQtPmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X2ZyZXFfYXV0byhpbnRwLCBkKTsKKwllbHNlCisJCXJlc3VsdC0+ZnJlcXVlbmN5ID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisKIAlvZmZzZXRGcmVxID0gc3R2MDkwMF9nZXRfY2Fycl9mcmVxKGludHAsIGludHAtPm1jbGssIGQpIC8gMTAwMDsKIAlyZXN1bHQtPmZyZXF1ZW5jeSArPSBvZmZzZXRGcmVxOwogCXJlc3VsdC0+c3ltYm9sX3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpbnRwLCBpbnRwLT5tY2xrLCBkKTsKQEAgLTEyMTMsNiArMTIzMCw5IEBACiAJcmVzdWx0LT5waWxvdCA9IHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgREVNT0RfVFlQRSkgJiAweDAxOwogCXJlc3VsdC0+ZnJhbWVfbGVuID0gKCh1MzIpc3R2MDkwMF9nZXRfYml0cyhpbnRwLCBERU1PRF9UWVBFKSkgPj4gMTsKIAlyZXN1bHQtPnJvbGxvZmYgPSBzdHYwOTAwX2dldF9iaXRzKGludHAsIFJPTExPRkZfU1RBVFVTKTsKKworCWRwcmludGsoIiVzOiBtb2Rjb2RlPTB4JXggXG4iLCBfX2Z1bmNfXywgcmVzdWx0LT5tb2Rjb2RlKTsKKwogCXN3aXRjaCAocmVzdWx0LT5zdGFuZGFyZCkgewogCWNhc2UgU1RWMDkwMF9EVkJTMl9TVEFOREFSRDoKIAkJcmVzdWx0LT5zcGVjdHJ1bSA9IHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgU1BFQ0lOVl9ERU1PRCk7CkBAIC0xMjM5LDcgKzEyNTksMTEgQEAKIAlpZiAoKGludHAtPnNyY2hfYWxnb1tkXSA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgfHwKIAkJCQkoaW50cC0+c3ltYm9sX3JhdGVbZF0gPCAxMDAwMDAwMCkpIHsKIAkJb2Zmc2V0RnJlcSA9IHJlc3VsdC0+ZnJlcXVlbmN5IC0gaW50cC0+ZnJlcVtkXTsKLQkJaW50cC0+ZnJlcVtkXSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCQlpZiAoaW50cC0+dHVuZXJfdHlwZVtkZW1vZF0gPT0gMykKKwkJCWludHAtPmZyZXFbZF0gPSBzdHYwOTAwX2dldF9mcmVxX2F1dG8oaW50cCwgZCk7CisJCWVsc2UKKwkJCWludHAtPmZyZXFbZF0gPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwogCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9ICgoaW50cC0+c3JjaF9yYW5nZVtkXSAvIDIwMDApICsgNTAwKSkKIAkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOwogCQllbHNlIGlmIChBQlMob2Zmc2V0RnJlcSkgPD0KQEAgLTE0ODEsNyArMTUwNSwxMiBAQAogCQkJZWxzZQogCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CiAKLQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpbnRwLT5id1tkZW1vZF0pOworCQkJaWYgKGludHAtPnR1bmVyX3R5cGVbZGVtb2RdID09IDMpCisJCQkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLCB0dW5lcl9mcmVxLAorCQkJCQkJaW50cC0+YndbZGVtb2RdLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsCisJCQkJCQlpbnRwLT5id1tkZW1vZF0pOwogCQl9CiAJfQogCkBAIC0xNjA4LDcgKzE2MzcsOCBAQAogCiAJYWdjMl9pbnQgPSBzdHYwOTAwX2JsaW5kX2NoZWNrX2FnYzJfbWluX2xldmVsKGludHAsIGRlbW9kKTsKIAotCWlmIChhZ2MyX2ludCA+IFNUVjA5MDBfQkxJTkRfU0VBUkNIX0FHQzJfVEgpCisJZHByaW50aygiJXMgYWdjMl9pbnQ9JWQgYWdjMl90aD0lZCBcbiIsIF9fZnVuY19fLCBhZ2MyX2ludCwgYWdjMl90aCk7CisJaWYgKGFnYzJfaW50ID4gYWdjMl90aCkKIAkJcmV0dXJuIEZBTFNFOwogCiAJaWYgKGludHAtPmNoaXBfaWQgPT0gMHgxMCkKQEAgLTE4NzUsNyArMTkwNSwxMSBAQAogCiAJfQogCi0Jc3R2MDkwMF9zZXRfdHVuZXIoZmUsIGludHAtPmZyZXFbZGVtb2RdLCBpbnRwLT5id1tkZW1vZF0pOworCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQlzdHYwOTAwX3NldF90dW5lcl9hdXRvKGludHAsIGludHAtPmZyZXFbZGVtb2RdLAorCQkJCWludHAtPmJ3W2RlbW9kXSwgZGVtb2QpOworCWVsc2UKKwkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIGludHAtPmZyZXFbZGVtb2RdLCBpbnRwLT5id1tkZW1vZF0pOwogCiAJYWdjMV9wb3dlciA9IE1BS0VXT1JEKHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgQUdDSVFfVkFMVUUxKSwKIAkJCQlzdHYwOTAwX2dldF9iaXRzKGludHAsIEFHQ0lRX1ZBTFVFMCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMKaW5kZXggMTU3MzQ2Ni4uYzUyYzMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jCkBAIC0zNyw3ICszNyw4MiBAQAogc3RhdGljIHVuc2lnbmVkIGludCB2ZXJib3NlOwogbW9kdWxlX3BhcmFtKHZlcmJvc2UsIGludCwgMDY0NCk7CiAKLXN0cnVjdCBtdXRleCBkZW1vZF9sb2NrOworLyogaW50ZXJuYWwgcGFyYW1zIG5vZGUgKi8KK3N0cnVjdCBzdHYwOTB4X2RldiB7CisJLyogcG9pbnRlciBmb3IgaW50ZXJuYWwgcGFyYW1zLCBvbmUgZm9yIGVhY2ggcGFpciBvZiBkZW1vZHMgKi8KKwlzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbAkJKmludGVybmFsOworCXN0cnVjdCBzdHYwOTB4X2RldgkJKm5leHRfZGV2OworfTsKKworLyogZmlyc3QgaW50ZXJuYWwgcGFyYW1zICovCitzdGF0aWMgc3RydWN0IHN0djA5MHhfZGV2ICpzdHYwOTB4X2ZpcnN0X2RldjsKKworLyogZmluZCBjaGlwIGJ5IGkyYyBhZGFwdGVyIGFuZCBpMmMgYWRkcmVzcyAqLworc3RhdGljIHN0cnVjdCBzdHYwOTB4X2RldiAqZmluZF9kZXYoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkJdTggaTJjX2FkZHIpCit7CisJc3RydWN0IHN0djA5MHhfZGV2ICp0ZW1wX2RldiA9IHN0djA5MHhfZmlyc3RfZGV2OworCisJLyoKKwkgU2VhcmNoIG9mIHRoZSBsYXN0IHN0djA5MDAgY2hpcCBvcgorCSBmaW5kIGl0IGJ5IGkyYyBhZGFwdGVyIGFuZCBpMmMgYWRkcmVzcyAqLworCXdoaWxlICgodGVtcF9kZXYgIT0gTlVMTCkgJiYKKwkJKCh0ZW1wX2Rldi0+aW50ZXJuYWwtPmkyY19hZGFwICE9IGkyY19hZGFwKSB8fAorCQkodGVtcF9kZXYtPmludGVybmFsLT5pMmNfYWRkciAhPSBpMmNfYWRkcikpKSB7CisKKwkJdGVtcF9kZXYgPSB0ZW1wX2Rldi0+bmV4dF9kZXY7CisJfQorCisJcmV0dXJuIHRlbXBfZGV2OworfQorCisvKiBkZWFsbG9jYXRpbmcgY2hpcCAqLworc3RhdGljIHZvaWQgcmVtb3ZlX2RldihzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbCAqaW50ZXJuYWwpCit7CisJc3RydWN0IHN0djA5MHhfZGV2ICpwcmV2X2RldiA9IHN0djA5MHhfZmlyc3RfZGV2OworCXN0cnVjdCBzdHYwOTB4X2RldiAqZGVsX2RldiA9IGZpbmRfZGV2KGludGVybmFsLT5pMmNfYWRhcCwKKwkJCQkJCWludGVybmFsLT5pMmNfYWRkcik7CisKKwlpZiAoZGVsX2RldiAhPSBOVUxMKSB7CisJCWlmIChkZWxfZGV2ID09IHN0djA5MHhfZmlyc3RfZGV2KSB7CisJCQlzdHYwOTB4X2ZpcnN0X2RldiA9IGRlbF9kZXYtPm5leHRfZGV2OworCQl9IGVsc2UgeworCQkJd2hpbGUgKHByZXZfZGV2LT5uZXh0X2RldiAhPSBkZWxfZGV2KQorCQkJCXByZXZfZGV2ID0gcHJldl9kZXYtPm5leHRfZGV2OworCisJCQlwcmV2X2Rldi0+bmV4dF9kZXYgPSBkZWxfZGV2LT5uZXh0X2RldjsKKwkJfQorCisJCWtmcmVlKGRlbF9kZXYpOworCX0KK30KKworLyogYWxsb2NhdGluZyBuZXcgY2hpcCAqLworc3RhdGljIHN0cnVjdCBzdHYwOTB4X2RldiAqYXBwZW5kX2ludGVybmFsKHN0cnVjdCBzdHYwOTB4X2ludGVybmFsICppbnRlcm5hbCkKK3sKKwlzdHJ1Y3Qgc3R2MDkweF9kZXYgKm5ld19kZXY7CisJc3RydWN0IHN0djA5MHhfZGV2ICp0ZW1wX2RldjsKKworCW5ld19kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkweF9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3X2RldiAhPSBOVUxMKSB7CisJCW5ld19kZXYtPmludGVybmFsID0gaW50ZXJuYWw7CisJCW5ld19kZXYtPm5leHRfZGV2ID0gTlVMTDsKKworCQkvKiBhcHBlbmQgdG8gbGlzdCAqLworCQlpZiAoc3R2MDkweF9maXJzdF9kZXYgPT0gTlVMTCkgeworCQkJc3R2MDkweF9maXJzdF9kZXYgPSBuZXdfZGV2OworCQl9IGVsc2UgeworCQkJdGVtcF9kZXYgPSBzdHYwOTB4X2ZpcnN0X2RldjsKKwkJCXdoaWxlICh0ZW1wX2Rldi0+bmV4dF9kZXYgIT0gTlVMTCkKKwkJCQl0ZW1wX2RldiA9IHRlbXBfZGV2LT5uZXh0X2RldjsKKworCQkJdGVtcF9kZXYtPm5leHRfZGV2ID0gbmV3X2RldjsKKwkJfQorCX0KKworCXJldHVybiBuZXdfZGV2OworfQorCiAKIC8qIERWQlMxIGFuZCBEU1MgQy9OIExvb2t1cCB0YWJsZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTB4X3RhYiBzdHYwOTB4X3MxY25fdGFiW10gPSB7CkBAIC02ODMsNiArNzU4LDkgQEAKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MzIgcmVnOwogCisJaWYgKGVuYWJsZSkKKwkJbXV0ZXhfbG9jaygmc3RhdGUtPmludGVybmFsLT50dW5lcl9sb2NrKTsKKwogCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgSTJDUlBUKTsKIAlpZiAoZW5hYmxlKSB7CiAJCWRwcmludGsoRkVfREVCVUcsIDEsICJFbmFibGUgR2F0ZSIpOwpAQCAtNjk2LDkgKzc3NCwxNCBAQAogCQlpZiAoKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEkyQ1JQVCwgcmVnKSkgPCAwKQogCQkJZ290byBlcnI7CiAJfQorCisJaWYgKCFlbmFibGUpCisJCW11dGV4X3VubG9jaygmc3RhdGUtPmludGVybmFsLT50dW5lcl9sb2NrKTsKKwogCXJldHVybiAwOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC03NTUsMTMgKzgzOCwxMyBAQAogCiAJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA0KTsgLyogU1IgKiAyXjE2IC8gbWFzdGVyX2NsayAqLwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEyKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTIpOwogCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNik7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gMTApOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiAxMCk7CiAJfSBlbHNlIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA5KTsKLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiA3KTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gNyk7CiAJfQogCiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQxLCAoc3ltID4+IDgpICYgMHg3ZikgPCAwKSAvKiBNU0IgKi8KQEAgLTc4MiwxMyArODY1LDEzIEBACiAJc3JhdGUgPSAxMDUgKiAoc3JhdGUgLyAxMDApOwogCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNCk7IC8qIFNSICogMl4xNiAvIG1hc3Rlcl9jbGsgKi8KLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiAxMik7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDEyKTsKIAl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgewogCQlzeW0gID0gKHNyYXRlIDw8IDYpOwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEwKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTApOwogCX0gZWxzZSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgOSk7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gNyk7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDcpOwogCX0KIAogCWlmIChzeW0gPCAweDdmZmYpIHsKQEAgLTgxNiwxMyArODk5LDEzIEBACiAJc3JhdGUgPSA5NSAqIChzcmF0ZSAvIDEwMCk7CiAJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA0KTsgLyogU1IgKiAyXjE2IC8gbWFzdGVyX2NsayAqLwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEyKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTIpOwogCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNik7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gMTApOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiAxMCk7CiAJfSBlbHNlIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA5KTsKLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiA3KTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gNyk7CiAJfQogCiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzEsICgoc3ltID4+IDgpICYgMHg3ZikpIDwgMCkgLyogTVNCICovCkBAIC0xMTAzLDIxICsxMTg2LDIxIEBACiAKIAlzd2l0Y2ggKHN0YXRlLT5kZW1vZCkgewogCWNhc2UgU1RWMDkweF9ERU1PRFVMQVRPUl8wOgotCQltdXRleF9sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMik7CiAJCVNUVjA5MHhfU0VURklFTEQocmVnLCBTVE9QX0NMS1ZJVDFfRklFTEQsIGVuYWJsZSk7CiAJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMiwgcmVnKSA8IDApCiAJCQlnb3RvIGVycjsKLQkJbXV0ZXhfdW5sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOwogCQlicmVhazsKIAogCWNhc2UgU1RWMDkweF9ERU1PRFVMQVRPUl8xOgotCQltdXRleF9sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMik7CiAJCVNUVjA5MHhfU0VURklFTEQocmVnLCBTVE9QX0NMS1ZJVDJfRklFTEQsIGVuYWJsZSk7CiAJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMiwgcmVnKSA8IDApCiAJCQlnb3RvIGVycjsKLQkJbXV0ZXhfdW5sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMTI2LDE0ICsxMjA5LDE0IEBACiAJfQogCXJldHVybiAwOwogZXJyOgotCW11dGV4X3VubG9jaygmZGVtb2RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOwogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKIAlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgc3R2MDkweF9kdmJzX3RyYWNrX2NybChzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUpCiB7Ci0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MzApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJLyogU2V0IEFDTEMgQkNMQyBvcHRpbWlzZWQgdmFsdWUgdnMgU1IgKi8KIAkJaWYgKHN0YXRlLT5zcmF0ZSA+PSAxNTAwMDAwMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEFDTEMsIDB4MmIpIDwgMCkKQEAgLTEyMTUsNyArMTI5OCw3IEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBCQ0xDLCAweDA5KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCS8qIGVuYWJsZSBTMiBjYXJyaWVyIGxvb3AgKi8KIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVIyQ0ZHLCAweDI2KSA8IDApCiAJCQkJZ290byBlcnI7CkBAIC0xMjQ2LDYgKzEzMjksMTAgQEAKIAlkZWZhdWx0OgogCQkvKiBlbmFibGUgRFZCLVMyIGFuZCBEVkItUzIgaW4gQXV0byBNT0RFICovCiAJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgRE1EQ0ZHTUQpOworCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgRFZCUzFfRU5BQkxFX0ZJRUxELCAwKTsKKwkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIERWQlMyX0VOQUJMRV9GSUVMRCwgMCk7CisJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBETURDRkdNRCwgcmVnKSA8IDApCisJCQlnb3RvIGVycjsKIAkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIERWQlMxX0VOQUJMRV9GSUVMRCwgMSk7CiAJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBEVkJTMl9FTkFCTEVfRklFTEQsIDEpOwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRE1EQ0ZHTUQsIHJlZykgPCAwKQpAQCAtMTI1Nyw3ICsxMzQ0LDcgQEAKIAkJaWYgKHN0djA5MHhfZHZic190cmFja19jcmwoc3RhdGUpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkJLyogZW5hYmxlIFMyIGNhcnJpZXIgbG9vcCAqLwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUjJDRkcsIDB4MjYpIDwgMCkKIAkJCQlnb3RvIGVycjsKQEAgLTEzMDQsNyArMTM5MSw3IEBACiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRElTVEFURSwgcmVnKSA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJaWYgKHN0YXRlLT5zcmF0ZSA8PSA1MDAwMDAwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSQ0ZHLCAweDQ0KSA8IDApCiAJCQkJZ290byBlcnI7CkBAIC0xMzQ4LDcgKzE0MzUsNyBAQAogCQkJICogQ0ZSIG1heCA9ICsxTUh6CiAJCQkgKi8KIAkJCWZyZXFfYWJzICA9IDEwMDAgPDwgMTY7Ci0JCQlmcmVxX2FicyAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwkJCWZyZXFfYWJzIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAkJCWZyZXEgICAgICA9IChzMTYpIGZyZXFfYWJzOwogCQl9IGVsc2UgewogCQkJLyogQ09MRCBTdGFydApAQCAtMTM1OCw3ICsxNDQ1LDcgQEAKIAkJCSAqLwogCQkJZnJlcV9hYnMgID0gKHN0YXRlLT5zZWFyY2hfcmFuZ2UgLyAyMDAwKSArIDYwMDsKIAkJCWZyZXFfYWJzICA9IGZyZXFfYWJzIDw8IDE2OwotCQkJZnJlcV9hYnMgLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlmcmVxX2FicyAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlmcmVxICAgICAgPSAoczE2KSBmcmVxX2FiczsKIAkJfQogCkBAIC0xMzgxLDcgKzE0NjgsNyBAQAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDRlJJTklUMCwgMCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBFUVVBTENGRywgMHg0MSkgPCAwKQogCQkJZ290byBlcnI7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBGRkVDRkcsIDB4NDEpIDwgMCkKQEAgLTE0MTgsMTAgKzE1MDUsMTAgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgUlRDLCAweDg4KSA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJLypGcmVxdWVuY3kgb2Zmc2V0IGRldGVjdG9yIHNldHRpbmcqLwogCQlpZiAoc3RhdGUtPnNyYXRlIDwgMjAwMDAwMCkgewotCQkJaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwkJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkJCS8qIEN1dCAyICovCiAJCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4MzkpIDwgMCkKIAkJCQkJZ290byBlcnI7CkBAIC0xNTEyLDcgKzE1OTksNyBAQAogCQlzdGVwcyA9IDE7CiAKIAlkaXIgPSAxOwotCWZyZXFfc3RlcCA9ICgxMDAwMDAwICogMjU2KSAvIChzdGF0ZS0+bWNsayAvIDI1Nik7CisJZnJlcV9zdGVwID0gKDEwMDAwMDAgKiAyNTYpIC8gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDI1Nik7CiAJZnJlcV9pbml0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7CkBAIC0xNTgzLDcgKzE2NzAsNyBAQAogCXUzMiBzcmF0ZV9jb2Fyc2UgPSAwLCBhZ2MyID0gMCwgY2FyX3N0ZXAgPSAxMjAwLCByZWc7CiAJdTMyIGFnYzJ0aDsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKQorCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgzMCkKIAkJYWdjMnRoID0gMHgyZTAwOwogCWVsc2UKIAkJYWdjMnRoID0gMHgxZjAwOwpAQCAtMTYxOSwxMyArMTcwNiwxMyBAQAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBBR0MyUkVGLCAweDUwKSA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MzApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4OTkpIDwgMCkKIAkJCWdvdG8gZXJyOwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSU1RFUCwgMHg5OCkgPCAwKQogCQkJZ290byBlcnI7CiAKLQl9IGVsc2UgaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwl9IGVsc2UgaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDZhKSA8IDApCiAJCQlnb3RvIGVycjsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlNURVAsIDB4OTUpIDwgMCkKQEAgLTE2NzcsNyArMTc2NCw3IEBACiAJCQkJU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBBR0MySTApOwogCQl9CiAJCWFnYzIgLz0gMTA7Ci0JCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsayk7CisJCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCQljdXJfc3RlcCsrOwogCQlkaXIgKj0gLTE7CiAJCWlmICgodG1nX2NwdCA+PSA1KSAmJiAoYWdjMiA8IGFnYzJ0aCkgJiYKQEAgLTE2OTUsMTIgKzE3ODIsMTIgQEAKIAogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3kpIHsKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2ZyZXF1ZW5jeShmZSwgZnJlcSkgPCAwKQotCQkJCQlnb3RvIGVycjsKKwkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCX0KIAogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgpIHsKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQkJCWdvdG8gZXJyOworCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJfQogCiAJCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC0xNzEzLDcgKzE4MDAsNyBAQAogCiAJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cykgewogCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfc3RhdHVzKGZlLCAmcmVnKSA8IDApCi0JCQkJCWdvdG8gZXJyOworCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJfQogCiAJCQlpZiAocmVnKQpAQCAtMTcyOSw5ICsxODE2LDEyIEBACiAJaWYgKCF0bWdfbG9jaykKIAkJc3JhdGVfY29hcnNlID0gMDsKIAllbHNlCi0JCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsayk7CisJCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCiAJcmV0dXJuIHNyYXRlX2NvYXJzZTsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMTc0MSw3ICsxODMxLDcgQEAKIHsKIAl1MzIgc3JhdGVfY29hcnNlLCBmcmVxX2NvYXJzZSwgc3ltLCByZWc7CiAKLQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGspOworCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCWZyZXFfY29hcnNlICA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQ0ZSMikgPDwgODsKIAlmcmVxX2NvYXJzZSB8PSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIENGUjEpOwogCXN5bSA9IDEzICogKHNyYXRlX2NvYXJzZSAvIDEwKTsgLyogU0ZSVVAgPSBTRlIgKyAzMCUgKi8KQEAgLTE3NjcsMTAgKzE4NTcsMTAgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEFHQzJSRUYsIDB4MzgpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgzMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4NzkpIDwgMCkKIAkJCQlnb3RvIGVycjsKLQkJfSBlbHNlIGlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCX0gZWxzZSBpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDQ5KSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTE3NzgsMjAgKzE4NjgsMjAgQEAKIAkJaWYgKHNyYXRlX2NvYXJzZSA+IDMwMDAwMDApIHsKIAkJCXN5bSAgPSAxMyAqIChzcmF0ZV9jb2Fyc2UgLyAxMCk7IC8qIFNGUlVQID0gU0ZSICsgMzAlICovCiAJCQlzeW0gID0gKHN5bSAvIDEwMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlVQMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAxMCAqIChzcmF0ZV9jb2Fyc2UgLyAxMyk7IC8qIFNGUkxPVyA9IFNGUiAtIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cxLCAoc3ltID4+IDgpICYgMHg3ZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAoc3JhdGVfY29hcnNlIC8gMTAwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDEsIChzeW0gPj4gOCkgJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDAsIHN5bSAmIDB4ZmYpIDwgMCkKQEAgLTE3OTksMjAgKzE4ODksMjAgQEAKIAkJfSBlbHNlIHsKIAkJCXN5bSAgPSAxMyAqIChzcmF0ZV9jb2Fyc2UgLyAxMCk7IC8qIFNGUlVQID0gU0ZSICsgMzAlICovCiAJCQlzeW0gID0gKHN5bSAvIDEwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlVQMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAxMCAqIChzcmF0ZV9jb2Fyc2UgLyAxNCk7IC8qIFNGUkxPVyA9IFNGUiAtIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cxLCAoc3ltID4+IDgpICYgMHg3ZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAoc3JhdGVfY29hcnNlIC8gMTAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDEsIChzeW0gPj4gOCkgJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDAsIHN5bSAmIDB4ZmYpIDwgMCkKQEAgLTE4NzQsMTggKzE5NjQsMTkgQEAKIAl1MzIgYWdjMiwgcmVnLCBzcmF0ZV9jb2Fyc2U7CiAJczMyIGNwdF9mYWlsLCBhZ2MyX292Zmx3LCBpOwogCXU4IGtfcmVmLCBrX21heCwga19taW47Ci0JaW50IGNvYXJzZV9mYWlsLCBsb2NrOworCWludCBjb2Fyc2VfZmFpbCA9IDA7CisJaW50IGxvY2s7CiAKIAlrX21heCA9IDExMDsKIAlrX21pbiA9IDEwOwogCiAJYWdjMiA9IHN0djA5MHhfZ2V0X2FnYzJfbWluX2xldmVsKHN0YXRlKTsKIAotCWlmIChhZ2MyID4gU1RWMDkweF9TRUFSQ0hfQUdDMl9USChzdGF0ZS0+ZGV2X3ZlcikpIHsKKwlpZiAoYWdjMiA+IFNUVjA5MHhfU0VBUkNIX0FHQzJfVEgoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKSkgewogCQlsb2NrID0gMDsKIAl9IGVsc2UgewogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkNGRywgMHhjNCkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9IGVsc2UgewpAQCAtMTg5Nyw3ICsxOTg4LDcgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFJUQ1MyLCAweDQ0KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBFUVVBTENGRywgMHg0MSkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEZGRUNGRywgMHg0MSkgPCAwKQpAQCAtMTk1Niw3ICsyMDQ3LDcgQEAKIAl1MzIgcmVnOwogCXMzMiB0bWdfY3B0ID0gMCwgaTsKIAl1OCBmcmVxLCB0bWdfdGhoLCB0bWdfdGhsOwotCWludCB0bWdfbG9jazsKKwlpbnQgdG1nX2xvY2sgPSAwOwogCiAJZnJlcSA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQ0FSRlJFUSk7CiAJdG1nX3RoaCA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgVE1HVEhSSVNFKTsKQEAgLTIwODAsMTIgKzIxNzEsMTIgQEAKIAogCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2ZyZXF1ZW5jeSkgewogCQkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3koZmUsIGZyZXEpIDwgMCkKLQkJCQkJCQlnb3RvIGVycjsKKwkJCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJCQl9CiAKIAkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgpIHsKIAkJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKGZlLCBzdGF0ZS0+dHVuZXJfYncpIDwgMCkKLQkJCQkJCQlnb3RvIGVycjsKKwkJCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJCQl9CiAKIAkJCQkJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMjA5OCw3ICsyMTg5LDcgQEAKIAogCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cykgewogCQkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMoZmUsICZyZWcpIDwgMCkKLQkJCQkJCQlnb3RvIGVycjsKKwkJCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJCQl9CiAKIAkJCQkJaWYgKHJlZykKQEAgLTIxMjksNiArMjIyMCw4IEBACiAKIAlyZXR1cm4gbG9jazsKIAorZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMjE0MiwxMyArMjIzNSwxMyBAQAogCWNhcl9tYXggPSBzdGF0ZS0+c2VhcmNoX3JhbmdlIC8gMTAwMDsKIAljYXJfbWF4ICs9IGNhcl9tYXggLyAxMDsKIAljYXJfbWF4ICA9IDY1NTM2ICogKGNhcl9tYXggLyAyKTsKLQljYXJfbWF4IC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCWNhcl9tYXggLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCiAJaWYgKGNhcl9tYXggPiAweDQwMDApCiAJCWNhcl9tYXggPSAweDQwMDAgOyAvKiBtYXhjYXJyaWVyIHNob3VsZCBiZTw9ICstMS80IE1jbGsgKi8KIAogCWluYyAgPSBzcmF0ZTsKLQlpbmMgLz0gc3RhdGUtPm1jbGsgLyAxMDAwOworCWluYyAvPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwOwogCWluYyAqPSAyNTY7CiAJaW5jICo9IDI1NjsKIAlpbmMgLz0gMTAwMDsKQEAgLTIyMDksNyArMjMwMiw3IEBACiAKIAljYXJfbWF4ICs9IChjYXJfbWF4IC8gMTApOyAvKiAxMCUgbWFyZ2luICovCiAJY2FyX21heCAgPSAoNjU1MzYgKiBjYXJfbWF4IC8gMik7Ci0JY2FyX21heCAvPSBzdGF0ZS0+bWNsayAvIDEwMDA7CisJY2FyX21heCAvPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwOwogCiAJaWYgKGNhcl9tYXggPiAweDQwMDApCiAJCWNhcl9tYXggPSAweDQwMDA7CkBAIC0yMjM0LDcgKzIzMjcsNyBAQAogCWNhcl9tYXggID0gc3RhdGUtPnNlYXJjaF9yYW5nZSAvIDEwMDA7CiAJY2FyX21heCArPSAoY2FyX21heCAvIDEwKTsKIAljYXJfbWF4ICA9ICg2NTUzNiAqIGNhcl9tYXggLyAyKTsKLQljYXJfbWF4IC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCWNhcl9tYXggLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCWlmIChjYXJfbWF4ID4gMHg0MDAwKQogCQljYXJfbWF4ID0gMHg0MDAwOwogCkBAIC0yMzA0LDcgKzIzOTcsNyBAQAogCWNhc2UgU1RWMDkweF9TRUFSQ0hfRFZCUzE6CiAJY2FzZSBTVFYwOTB4X1NFQVJDSF9EU1M6CiAJCS8qIGFjY2VsZXJhdGUgdGhlIGZyZXF1ZW5jeSBkZXRlY3RvciAqLwotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDNCKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTIzMTUsNyArMjQwOCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTVFYwOTB4X1NFQVJDSF9EVkJTMjoKLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDc5KSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTIzMjgsNyArMjQyMSw3IEBACiAJY2FzZSBTVFYwOTB4X1NFQVJDSF9BVVRPOgogCWRlZmF1bHQ6CiAJCS8qIGFjY2VsZXJhdGUgdGhlIGZyZXF1ZW5jeSBkZXRlY3RvciAqLwotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDNiKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDc5KSA8IDApCkBAIC0yMzUwLDcgKzI0NDMsNyBAQAogCQkvKnJ1biB0aGUgU1cgc2VhcmNoIDIgdGltZXMgbWF4aW11bSovCiAJCWlmIChsb2NrIHx8IG5vX3NpZ25hbCB8fCAodHJpYWxzID09IDIpKSB7CiAJCQkvKkNoZWNrIGlmIHRoZSBkZW1vZCBpcyBub3QgbG9zaW5nIGxvY2sgaW4gRFZCUzIqLwotCQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDQ5KSA8IDApCiAJCQkJCWdvdG8gZXJyOwogCQkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDT1JSRUxBQlMsIDB4OWUpIDwgMCkKQEAgLTIzNzIsNyArMjQ2NSw3IEBACiAJCQkJCS8qRkFMU0UgbG9jaywgVGhlIGRlbW9kIGlzIGxvb3NpbmcgbG9jayAqLwogCQkJCQlsb2NrID0gMDsKIAkJCQkJaWYgKHRyaWFscyA8IDIpIHsKLQkJCQkJCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCQkJCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCQkJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDc5KSA8IDApCiAJCQkJCQkJCWdvdG8gZXJyOwogCQkJCQkJfQpAQCAtMjQyMiwxMSArMjUxNSwxMSBAQAogCWRlcm90IHw9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQ0ZSMCk7CiAKIAlkZXJvdCA9IGNvbXAyKGRlcm90LCAyNCk7Ci0JaW50XzEgPSBzdGF0ZS0+bWNsayA+PiAxMjsKKwlpbnRfMSA9IG1jbGsgPj4gMTI7CiAJaW50XzIgPSBkZXJvdCA+PiAxMjsKIAogCS8qIGNhcnJpZXJfZnJlcXVlbmN5ID0gTWFzdGVyQ2xvY2sgKiBSZWcgLyAyXjI0ICovCi0JdG1wXzEgPSBzdGF0ZS0+bWNsayAlIDB4MTAwMDsKKwl0bXBfMSA9IG1jbGsgJSAweDEwMDA7CiAJdG1wXzIgPSBkZXJvdCAlIDB4MTAwMDsKIAogCWRlcm90ID0gKGludF8xICogaW50XzIpICsKQEAgLTI1MDIsMTMgKzI1OTUsMTMgQEAKIAogCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfZnJlcXVlbmN5KSB7CiAJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfZnJlcXVlbmN5KGZlLCAmc3RhdGUtPmZyZXF1ZW5jeSkgPCAwKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9nYXRlb2ZmOwogCX0KIAogCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKIAkJZ290byBlcnI7CiAKLQlvZmZzdF9mcmVxID0gc3R2MDkweF9nZXRfY2FyX2ZyZXEoc3RhdGUsIHN0YXRlLT5tY2xrKSAvIDEwMDA7CisJb2Zmc3RfZnJlcSA9IHN0djA5MHhfZ2V0X2Nhcl9mcmVxKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspIC8gMTAwMDsKIAlzdGF0ZS0+ZnJlcXVlbmN5ICs9IG9mZnN0X2ZyZXE7CiAKIAlpZiAoc3R2MDkweF9nZXRfdml0ZXJiaShzdGF0ZSkgPCAwKQpAQCAtMjUzMCw3ICsyNjIzLDcgQEAKIAogCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeSkgewogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9mcmVxdWVuY3koZmUsICZzdGF0ZS0+ZnJlcXVlbmN5KSA8IDApCi0JCQkJZ290byBlcnI7CisJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJfQogCiAJCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKQEAgLTI1NTAsNiArMjY0Myw5IEBACiAJfQogCiAJcmV0dXJuIFNUVjA5MHhfT1VUT0ZSQU5HRTsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMjU3OSw3ICsyNjc1LDcgQEAKIAlzMzIgaTsKIAlzdHJ1Y3Qgc3R2MDkweF9sb25nX2ZyYW1lX2NybG9vcCAqY2FyX2xvb3AsICpjYXJfbG9vcF9xcHNrX2xvdywgKmNhcl9sb29wX2Fwc2tfbG93OwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID09IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID09IDB4MjApIHsKIAkJY2FyX2xvb3AJCT0gc3R2MDkweF9zMl9jcmxfY3V0MjA7CiAJCWNhcl9sb29wX3Fwc2tfbG93CT0gc3R2MDkweF9zMl9sb3dxcHNrX2NybF9jdXQyMDsKIAkJY2FyX2xvb3BfYXBza19sb3cJPSBzdHYwOTB4X3MyX2Fwc2tfY3JsX2N1dDIwOwpAQCAtMjcwMCw3ICsyNzk2LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MzApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJLyogQ3V0IDMuMCBhbmQgdXAgKi8KIAkJc2hvcnRfY3JsID0gc3R2MDkweF9zMl9zaG9ydF9jcmxfY3V0MzA7CiAJfSBlbHNlIHsKQEAgLTI3MzIsNyArMjgyOCw3IEBACiAJczMyIHNyYXRlLCBwaWxvdHMsIGFjbGMsIGZfMSwgZl8wLCBpID0gMCwgYmxpbmRfdHVuZSA9IDA7CiAJdTMyIHJlZzsKIAotCXNyYXRlICA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsayk7CisJc3JhdGUgID0gc3R2MDkweF9nZXRfc3JhdGUoc3RhdGUsIHN0YXRlLT5pbnRlcm5hbC0+bWNsayk7CiAJc3JhdGUgKz0gc3R2MDkweF9nZXRfdG1nb2Zmc3Qoc3RhdGUsIHNyYXRlKTsKIAogCXN3aXRjaCAoc3RhdGUtPmRlbHN5cykgewpAQCAtMjc1MSw3ICsyODQ3LDcgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERFTU9ELCByZWcpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgzMCkgewogCQkJaWYgKHN0djA5MHhfZ2V0X3ZpdGVyYmkoc3RhdGUpIDwgMCkKIAkJCQlnb3RvIGVycjsKIApAQCAtMjg2OCw3ICsyOTY0LDcgQEAKIAkJCWdvdG8gZXJyOwogCX0KIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmICgoc3RhdGUtPnNlYXJjaF9tb2RlID09IFNUVjA5MHhfU0VBUkNIX0RWQlMxKQl8fAogCQkgICAgKHN0YXRlLT5zZWFyY2hfbW9kZSA9PSBTVFYwOTB4X1NFQVJDSF9EU1MpCQl8fAogCQkgICAgKHN0YXRlLT5zZWFyY2hfbW9kZSA9PSBTVFYwOTB4X1NFQVJDSF9BVVRPKSkgewpAQCAtMjg5MCw3ICsyOTg2LDggQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSTE9XMSwgMHg4MCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmICgoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bmUgPT0gMSkgfHwgKHN0YXRlLT5zcmF0ZSA8IDEwMDAwMDAwKSkgeworCWlmICgoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHx8IChibGluZF90dW5lID09IDEpIHx8CisJICAgIChzdGF0ZS0+c3JhdGUgPCAxMDAwMDAwMCkpIHsKIAkJLyogdXBkYXRlIGluaXRpYWwgY2FycmllciBmcmVxIHdpdGggdGhlIGZvdW5kIGZyZXEgb2Zmc2V0ICovCiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDRlJJTklUMSwgZl8xKSA8IDApCiAJCQlnb3RvIGVycjsKQEAgLTI4OTgsNyArMjk5NSw3IEBACiAJCQlnb3RvIGVycjsKIAkJc3RhdGUtPnR1bmVyX2J3ID0gc3R2MDkweF9jYXJfd2lkdGgoc3JhdGUsIHN0YXRlLT5yb2xsb2ZmKSArIDEwMDAwMDAwOwogCi0JCWlmICgoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bmUgPT0gMSkpIHsKKwkJaWYgKChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bmUgPT0gMSkpIHsKIAogCQkJaWYgKHN0YXRlLT5hbGdvICE9IFNUVjA5MHhfV0FSTV9TRUFSQ0gpIHsKIApAQCAtMjkwNyw3ICszMDA0LDcgQEAKIAogCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKSB7CiAJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKGZlLCBzdGF0ZS0+dHVuZXJfYncpIDwgMCkKLQkJCQkJCWdvdG8gZXJyOworCQkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCQl9CiAKIAkJCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC0yOTUwLDcgKzMwNDcsNyBAQAogCiAJfQogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4NDkpIDwgMCkKIAkJCWdvdG8gZXJyOwogCX0KQEAgLTI5NTksNiArMzA1Niw5IEBACiAJCXN0djA5MHhfc2V0X3ZpdF90aHRyYWNxKHN0YXRlKTsKIAogCXJldHVybiAwOworCitlcnJfZ2F0ZW9mZjoKKwlzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKIAlyZXR1cm4gLTE7CkBAIC0zMDI2LDcgKzMxMjYsNyBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkvKiByb2xsb2ZmIHRvIGF1dG8gbW9kZSBpZiBEVkJTMiAqLwogCQlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIERFTU9EKTsKIAkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIE1BTlVBTF9TWFJPTExPRkZfRklFTEQsIDB4MDApOwpAQCAtMzA2Miw3ICszMTYyLDcgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRE1ESVNUQVRFLCAweDVjKSA8IDApIC8qIERlbW9kIHN0b3AgKi8KIAkJZ290byBlcnI7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoc3RhdGUtPnNyYXRlID4gNTAwMDAwMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTEFCUywgMHg5ZSkgPCAwKQogCQkJCWdvdG8gZXJyOwpAQCAtMzEwMiw3ICszMjAyLDcgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEFHQzJSRUYsIDB4MzgpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEtSRUZUTUcsIDB4NWEpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChzdGF0ZS0+YWxnbyA9PSBTVFYwOTB4X0NPTERfU0VBUkNIKQpAQCAtMzEyMCw5ICszMjIwLDExIEBACiAJCWlmIChzdHYwOTB4X3NldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPnNyYXRlKSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3R2MDkweF9zZXRfbWF4X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsaywgc3RhdGUtPnNyYXRlKSA8IDApCisJCWlmIChzdHYwOTB4X3NldF9tYXhfc3JhdGUoc3RhdGUsIHN0YXRlLT5pbnRlcm5hbC0+bWNsaywKKwkJCQkJICBzdGF0ZS0+c3JhdGUpIDwgMCkKIAkJCWdvdG8gZXJyOwotCQlpZiAoc3R2MDkweF9zZXRfbWluX3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsaywgc3RhdGUtPnNyYXRlKSA8IDApCisJCWlmIChzdHYwOTB4X3NldF9taW5fc3JhdGUoc3RhdGUsIHN0YXRlLT5pbnRlcm5hbC0+bWNsaywKKwkJCQkJICBzdGF0ZS0+c3JhdGUpIDwgMCkKIAkJCWdvdG8gZXJyOwogCiAJCWlmIChzdGF0ZS0+c3JhdGUgPj0gMTAwMDAwMDApCkBAIC0zMTM2LDE4ICszMjM4LDIxIEBACiAJCWdvdG8gZXJyOwogCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYmdhaW4pIHsKLQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYmdhaW4oZmUsIDEwKSA8IDApIC8qIDEwZEIgKi8KLQkJCWdvdG8gZXJyOworCQlyZWcgPSBzdGF0ZS0+Y29uZmlnLT50dW5lcl9iYmdhaW47CisJCWlmIChyZWcgPT0gMCkKKwkJCXJlZyA9IDEwOyAvKiBkZWZhdWx0OiAxMGRCICovCisJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmJnYWluKGZlLCByZWcpIDwgMCkKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3kpIHsKIAkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3koZmUsIHN0YXRlLT5mcmVxdWVuY3kpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aCkgewogCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMzE1NSwyMiArMzI2MCwyMiBAQAogCiAJbXNsZWVwKDUwKTsKIAotCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDEpIDwgMCkKLQkJZ290byBlcnI7Ci0KIAlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cykgewotCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cyhmZSwgJnJlZykgPCAwKQorCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAxKSA8IDApCiAJCQlnb3RvIGVycjsKKwkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMoZmUsICZyZWcpIDwgMCkKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CisJCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKKwkJCWdvdG8gZXJyOworCisJCWlmIChyZWcpCisJCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiVHVuZXIgcGhhc2UgbG9ja2VkIik7CisJCWVsc2UgeworCQkJZHByaW50ayhGRV9ERUJVRywgMSwgIlR1bmVyIHVubG9ja2VkIik7CisJCQlyZXR1cm4gU1RWMDkweF9OT0NBUlJJRVI7CisJCX0KIAl9CiAKLQlpZiAocmVnKQotCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiVHVuZXIgcGhhc2UgbG9ja2VkIik7Ci0JZWxzZQotCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiVHVuZXIgdW5sb2NrZWQiKTsKLQotCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKLQkJZ290byBlcnI7Ci0KIAltc2xlZXAoMTApOwogCWFnYzFfcG93ZXIgPSBNQUtFV09SRDE2KFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQUdDSVFJTjEpLAogCQkJCVNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQUdDSVFJTjApKTsKQEAgLTMxOTQsNyArMzI5OSw3IEBACiAJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgREVNT0QpOwogCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgU1BFQ0lOVl9DT05UUk9MX0ZJRUxELCBzdGF0ZS0+aW52ZXJzaW9uKTsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCS8qIHJvbGxvZmYgdG8gYXV0byBtb2RlIGlmIERWQlMyICovCiAJCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgTUFOVUFMX1NYUk9MTE9GRl9GSUVMRCwgMSk7CiAJCX0gZWxzZSB7CkBAIC0zMjM4LDcgKzMzNDMsNyBAQAogCWlmICgobG9jaykgJiYgKHNpZ25hbF9zdGF0ZSA9PSBTVFYwOTB4X1JBTkdFT0spKSB7IC8qIHNpZ25hbCB3aXRoaW4gUmFuZ2UgKi8KIAkJc3R2MDkweF9vcHRpbWl6ZV90cmFjayhzdGF0ZSk7CiAKLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQkvKiA+PSBDdXQgMi4wIDpyZWxlYXNlIFRTIHJlc2V0IGFmdGVyCiAJCQkgKiBkZW1vZCBsb2NrIGFuZCBvcHRpbWl6ZWQgVHJhY2tpbmcKIAkJCSAqLwpAQCAtMzI5Myw2ICszMzk4LDggQEAKIAl9CiAJcmV0dXJuIHNpZ25hbF9zdGF0ZTsKIAorZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMzMwMyw2ICszNDEwLDkgQEAKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKnByb3BzID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAKKwlpZiAocC0+ZnJlcXVlbmN5ID09IDApCisJCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9JTlZBTElEOworCiAJc3RhdGUtPmRlbHN5cyA9IHByb3BzLT5kZWxpdmVyeV9zeXN0ZW07CiAJc3RhdGUtPmZyZXF1ZW5jeSA9IHAtPmZyZXF1ZW5jeTsKIAlzdGF0ZS0+c3JhdGUgPSBwLT51LnFwc2suc3ltYm9sX3JhdGU7CkBAIC0zMzUzLDcgKzM0NjMsOCBAQAogCQkJaWYgKFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBQS1RERUxJTl9MT0NLX0ZJRUxEKSkgewogCQkJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgVFNTVEFUVVMpOwogCQkJCWlmIChTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgVFNGSUZPX0xJTkVPS19GSUVMRCkpIHsKLQkJCQkJKnN0YXR1cyA9IEZFX0hBU19DQVJSSUVSIHwKKwkJCQkJKnN0YXR1cyA9IEZFX0hBU19TSUdOQUwgfAorCQkJCQkJICBGRV9IQVNfQ0FSUklFUiB8CiAJCQkJCQkgIEZFX0hBU19WSVRFUkJJIHwKIAkJCQkJCSAgRkVfSEFTX1NZTkMgfAogCQkJCQkJICBGRV9IQVNfTE9DSzsKQEAgLTMzNzAsNyArMzQ4MSwxMSBAQAogCQkJaWYgKFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBMT0NLRURWSVRfRklFTEQpKSB7CiAJCQkJcmVnID0gU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBUU1NUQVRVUyk7CiAJCQkJaWYgKFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBUU0ZJRk9fTElORU9LX0ZJRUxEKSkgewotCQkJCQkqc3RhdHVzID0gRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfVklURVJCSSB8IEZFX0hBU19TWU5DIHwgRkVfSEFTX0xPQ0s7CisJCQkJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwKKwkJCQkJCSAgRkVfSEFTX0NBUlJJRVIgfAorCQkJCQkJICBGRV9IQVNfVklURVJCSSB8CisJCQkJCQkgIEZFX0hBU19TWU5DIHwKKwkJCQkJCSAgRkVfSEFTX0xPQ0s7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0zNzcwLDYgKzM4ODUsMTUgQEAKIHsKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAorCXN0YXRlLT5pbnRlcm5hbC0+bnVtX3VzZWQtLTsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5udW1fdXNlZCA8PSAwKSB7CisKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkFjdHVhbGx5IHJlbW92aW5nIik7CisKKwkJcmVtb3ZlX2RldihzdGF0ZS0+aW50ZXJuYWwpOworCQlrZnJlZShzdGF0ZS0+aW50ZXJuYWwpOworCX0KKwogCWtmcmVlKHN0YXRlKTsKIH0KIApAQCAtMzkwMSwxMCArNDAyNSwxMCBAQAogCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9OQ09BUlNFLCByZWcpIDwgMCkKIAkJZ290byBlcnI7CiAKLQlzdGF0ZS0+bWNsayA9IHN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOworCXN0YXRlLT5pbnRlcm5hbC0+bWNsayA9IHN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOwogCiAJLypTZXQgdGhlIERpc2VxQyBmcmVxdWVuY3kgdG8gMjJLSHogKi8KLQlkaXYgPSBzdGF0ZS0+bWNsayAvIDcwNDAwMDsKKwlkaXYgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyA3MDQwMDA7CiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEYyMlRYLCBkaXYpIDwgMCkKIAkJZ290byBlcnI7CiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEYyMlJYLCBkaXYpIDwgMCkKQEAgLTM5MjAsNyArNDA0NCw3IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+dHMxX21vZGUpIHsKIAkJY2FzZSBTVFYwOTB4X1RTTU9ERV9QQVJBTExFTF9QVU5DVFVSRUQ6CiAJCWNhc2UgU1RWMDkweF9UU01PREVfRFZCQ0k6CkBAIC00MDkyLDYgKzQyMTYsNzEgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CisKKwlpZiAoc3RhdGUtPmNvbmZpZy0+dHMxX2NsayA+IDApIHsKKwkJdTMyIHNwZWVkOworCisJCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+dHMxX21vZGUpIHsKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9QQVJBTExFTF9QVU5DVFVSRUQ6CisJCWNhc2UgU1RWMDkweF9UU01PREVfRFZCQ0k6CisJCWRlZmF1bHQ6CisJCQlzcGVlZCA9IHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvCisJCQkJKHN0YXRlLT5jb25maWctPnRzMV9jbGsgLyA0KTsKKwkJCWlmIChzcGVlZCA8IDB4MDgpCisJCQkJc3BlZWQgPSAweDA4OworCQkJaWYgKHNwZWVkID4gMHhGRikKKwkJCQlzcGVlZCA9IDB4RkY7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfUFVOQ1RVUkVEOgorCQljYXNlIFNUVjA5MHhfVFNNT0RFX1NFUklBTF9DT05USU5VT1VTOgorCQkJc3BlZWQgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLworCQkJCShzdGF0ZS0+Y29uZmlnLT50czFfY2xrIC8gMzIpOworCQkJaWYgKHNwZWVkIDwgMHgyMCkKKwkJCQlzcGVlZCA9IDB4MjA7CisJCQlpZiAoc3BlZWQgPiAweEZGKQorCQkJCXNwZWVkID0gMHhGRjsKKwkJCWJyZWFrOworCQl9CisJCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfVFNDRkdNKTsKKwkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIFRTRklGT19NQU5TUEVFRF9GSUVMRCwgMyk7CisJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9UU0NGR00sIHJlZykgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9UU1NQRUVELCBzcGVlZCkgPCAwKQorCQkJZ290byBlcnI7CisJfQorCisJaWYgKHN0YXRlLT5jb25maWctPnRzMl9jbGsgPiAwKSB7CisJCXUzMiBzcGVlZDsKKworCQlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnRzMl9tb2RlKSB7CisJCWNhc2UgU1RWMDkweF9UU01PREVfUEFSQUxMRUxfUFVOQ1RVUkVEOgorCQljYXNlIFNUVjA5MHhfVFNNT0RFX0RWQkNJOgorCQlkZWZhdWx0OgorCQkJc3BlZWQgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLworCQkJCShzdGF0ZS0+Y29uZmlnLT50czJfY2xrIC8gNCk7CisJCQlpZiAoc3BlZWQgPCAweDA4KQorCQkJCXNwZWVkID0gMHgwODsKKwkJCWlmIChzcGVlZCA+IDB4RkYpCisJCQkJc3BlZWQgPSAweEZGOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkweF9UU01PREVfU0VSSUFMX1BVTkNUVVJFRDoKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfQ09OVElOVU9VUzoKKwkJCXNwZWVkID0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8KKwkJCQkoc3RhdGUtPmNvbmZpZy0+dHMyX2NsayAvIDMyKTsKKwkJCWlmIChzcGVlZCA8IDB4MjApCisJCQkJc3BlZWQgPSAweDIwOworCQkJaWYgKHNwZWVkID4gMHhGRikKKwkJCQlzcGVlZCA9IDB4RkY7CisJCQlicmVhazsKKwkJfQorCQlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTQ0ZHTSk7CisJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBUU0ZJRk9fTUFOU1BFRURfRklFTEQsIDMpOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNDRkdNLCByZWcpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNTUEVFRCwgc3BlZWQpIDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKwogCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNDRkdIKTsKIAlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgUlNUX0hXQVJFX0ZJRUxELCAweDAxKTsKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNDRkdILCByZWcpIDwgMCkKQEAgLTQxMjAsNiArNDMwOSwxNSBAQAogCWNvbnN0IHN0cnVjdCBzdHYwOTB4X2NvbmZpZyAqY29uZmlnID0gc3RhdGUtPmNvbmZpZzsKIAl1MzIgcmVnOwogCisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA9PSAwKSB7CisJCXN0djA5MHhfc2V0X21jbGsoc3RhdGUsIDEzNTAwMDAwMCwgY29uZmlnLT54dGFsKTsgLyogMTM1IE1oeiAqLworCQltc2xlZXAoNSk7CisJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9TWU5UQ1RSTCwKKwkJCQkgICAgICAweDIwIHwgY29uZmlnLT5jbGtfbW9kZSkgPCAwKQorCQkJZ290byBlcnI7CisJCXN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOworCX0KKwogCWlmIChzdHYwOTB4X3dha2V1cChmZSkgPCAwKSB7CiAJCWRwcmludGsoRkVfRVJST1IsIDEsICJFcnJvciB3YWtpbmcgZGV2aWNlIik7CiAJCWdvdG8gZXJyOwpAQCAtNDE0MiwxMiArNDM0MCwxMiBAQAogCiAJaWYgKGNvbmZpZy0+dHVuZXJfc2V0X21vZGUpIHsKIAkJaWYgKGNvbmZpZy0+dHVuZXJfc2V0X21vZGUoZmUsIFRVTkVSX1dBS0UpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoY29uZmlnLT50dW5lcl9pbml0KSB7CiAJCWlmIChjb25maWctPnR1bmVyX2luaXQoZmUpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC00MTU3LDYgKzQzNTUsOSBAQAogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOworCitlcnJfZ2F0ZW9mZjoKKwlzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKIAlyZXR1cm4gLTE7CkBAIC00MTg4LDE2ICs0Mzg5LDI2IEBACiAJfQogCiAJLyogU1RWMDkweCBpbml0ICovCi0JaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRElTVEFURSwgMHg1YykgPCAwKSAvKiBTdG9wIERlbW9kICovCisKKwkvKiBTdG9wIERlbW9kICovCisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX0RNRElTVEFURSwgMHg1YykgPCAwKQorCQlnb3RvIGVycjsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfRE1ESVNUQVRFLCAweDVjKSA8IDApCiAJCWdvdG8gZXJyOwogCiAJbXNsZWVwKDUpOwogCi0JaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFROUkNGRywgMHg2YykgPCAwKSAvKiBjaGVjayByZWdpc3RlciAhIChObyBUdW5lciBNb2RlKSAqLworCS8qIFNldCBObyBUdW5lciBNb2RlICovCisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX1ROUkNGRywgMHg2YykgPCAwKQorCQlnb3RvIGVycjsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVE5SQ0ZHLCAweDZjKSA8IDApCiAJCWdvdG8gZXJyOwogCisJLyogSTJDIHJlcGVhdGVyIE9GRiAqLwogCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBFTkFSUFRfTEVWRUxfRklFTEQsIGNvbmZpZy0+cmVwZWF0ZXJfbGV2ZWwpOwotCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBJMkNSUFQsIHJlZykgPCAwKSAvKiByZXBlYXRlciBPRkYgKi8KKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfSTJDUlBULCByZWcpIDwgMCkKKwkJZ290byBlcnI7CisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX0kyQ1JQVCwgcmVnKSA8IDApCiAJCWdvdG8gZXJyOwogCiAJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X05DT0FSU0UsIDB4MTMpIDwgMCkgLyogc2V0IFBMTCBkaXZpZGVyICovCkBAIC00MjE2LDggKzQ0MjcsOCBAQAogCQkJZ290byBlcnI7CiAJfQogCi0Jc3RhdGUtPmRldl92ZXIgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X01JRCk7Ci0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X01JRCk7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9UU0dFTkVSQUwsIDB4MGMpIDwgMCkKIAkJCWdvdG8gZXJyOwogCkBAIC00MjI4LDI4ICs0NDM5LDM2IEBACiAJCQkJZ290byBlcnI7CiAJCX0KIAotCX0gZWxzZSBpZiAoc3RhdGUtPmRldl92ZXIgPCAweDIwKSB7CisJfSBlbHNlIGlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPCAweDIwKSB7CiAJCWRwcmludGsoRkVfRVJST1IsIDEsICJFUlJPUjogVW5zdXBwb3J0ZWQgQ3V0OiAweCUwMnghIiwKLQkJCXN0YXRlLT5kZXZfdmVyKTsKKwkJCXN0YXRlLT5pbnRlcm5hbC0+ZGV2X3Zlcik7CiAKIAkJZ290byBlcnI7Ci0JfSBlbHNlIGlmIChzdGF0ZS0+ZGV2X3ZlciA+IDB4MzApIHsKKwl9IGVsc2UgaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+IDB4MzApIHsKIAkJLyogd2Ugc2hvdWxkbid0IGJhaWwgb3V0IGZyb20gaGVyZSAqLwogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSU5GTzogQ3V0OiAweCUwMnggcHJvYmFibHkgaW5jb21wbGV0ZSBzdXBwb3J0ISIsCi0JCQlzdGF0ZS0+ZGV2X3Zlcik7CisJCQlzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIpOwogCX0KIAorCS8qIEFEQzEgcmFuZ2UgKi8KKwlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFROUjEpOworCVNUVjA5MHhfU0VURklFTEQocmVnLCBBREMxX0lOTU9ERV9GSUVMRCwKKwkJKGNvbmZpZy0+YWRjMV9yYW5nZSA9PSBTVFYwOTB4X0FEQ18xVnBwKSA/IDAgOiAxKTsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUVE5SMSwgcmVnKSA8IDApCisJCWdvdG8gZXJyOworCisJLyogQURDMiByYW5nZSAqLworCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUVE5SMyk7CisJU1RWMDkweF9TRVRGSUVMRChyZWcsIEFEQzJfSU5NT0RFX0ZJRUxELAorCQkoY29uZmlnLT5hZGMyX3JhbmdlID09IFNUVjA5MHhfQURDXzFWcHApID8gMCA6IDEpOworCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9UU1RUTlIzLCByZWcpIDwgMCkKKwkJZ290byBlcnI7CisKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUUkVTMCwgMHg4MCkgPCAwKQogCQlnb3RvIGVycjsKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUUkVTMCwgMHgwMCkgPCAwKQogCQlnb3RvIGVycjsKIAotCXN0djA5MHhfc2V0X21jbGsoc3RhdGUsIDEzNTAwMDAwMCwgY29uZmlnLT54dGFsKTsgLyogMTM1IE1oeiAqLwotCW1zbGVlcCg1KTsKLQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfU1lOVENUUkwsIDB4MjAgfCBjb25maWctPmNsa19tb2RlKSA8IDApCi0JCWdvdG8gZXJyOwotCXN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOwotCiAJcmV0dXJuIDA7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwpAQCAtNDI5OSw2ICs0NTE4LDcgQEAKIAkJCQkgICAgZW51bSBzdHYwOTB4X2RlbW9kdWxhdG9yIGRlbW9kKQogewogCXN0cnVjdCBzdHYwOTB4X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJc3RydWN0IHN0djA5MHhfZGV2ICp0ZW1wX2ludDsKIAogCXN0YXRlID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBzdHYwOTB4X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCkBAIC00MzE0LDggKzQ1MzQsMzIgQEAKIAlzdGF0ZS0+ZGV2aWNlCQkJCT0gY29uZmlnLT5kZXZpY2U7CiAJc3RhdGUtPnJvbGxvZmYJCQkJPSBTVFYwOTB4X1JPXzM1OyAvKiBkZWZhdWx0ICovCiAKLQlpZiAoc3RhdGUtPmRlbW9kID09IFNUVjA5MHhfREVNT0RVTEFUT1JfMCkKLQkJbXV0ZXhfaW5pdCgmZGVtb2RfbG9jayk7CisJdGVtcF9pbnQgPSBmaW5kX2RldihzdGF0ZS0+aTJjLAorCQkJCXN0YXRlLT5jb25maWctPmFkZHJlc3MpOworCisJaWYgKCh0ZW1wX2ludCAhPSBOVUxMKSAmJiAoc3RhdGUtPmRlbW9kX21vZGUgPT0gU1RWMDkweF9EVUFMKSkgeworCQlzdGF0ZS0+aW50ZXJuYWwgPSB0ZW1wX2ludC0+aW50ZXJuYWw7CisJCXN0YXRlLT5pbnRlcm5hbC0+bnVtX3VzZWQrKzsKKwkJZHByaW50ayhGRV9JTkZPLCAxLCAiRm91bmQgSW50ZXJuYWwgU3RydWN0dXJlISIpOworCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiQXR0YWNoaW5nICVzIGRlbW9kdWxhdG9yKCVkKSBDdXQ9MHglMDJ4IiwKKwkJCXN0YXRlLT5kZXZpY2UgPT0gU1RWMDkwMCA/ICJTVFYwOTAwIiA6ICJTVFYwOTAzIiwKKwkJCWRlbW9kLAorCQkJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKTsKKwkJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisJfSBlbHNlIHsKKwkJc3RhdGUtPmludGVybmFsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MHhfaW50ZXJuYWwpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCQl0ZW1wX2ludCA9IGFwcGVuZF9pbnRlcm5hbChzdGF0ZS0+aW50ZXJuYWwpOworCQlzdGF0ZS0+aW50ZXJuYWwtPm51bV91c2VkID0gMTsKKwkJc3RhdGUtPmludGVybmFsLT5tY2xrID0gMDsKKwkJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID0gMDsKKwkJc3RhdGUtPmludGVybmFsLT5pMmNfYWRhcCA9IHN0YXRlLT5pMmM7CisJCXN0YXRlLT5pbnRlcm5hbC0+aTJjX2FkZHIgPSBzdGF0ZS0+Y29uZmlnLT5hZGRyZXNzOworCQlkcHJpbnRrKEZFX0lORk8sIDEsICJDcmVhdGUgTmV3IEludGVybmFsIFN0cnVjdHVyZSEiKTsKKwl9CisKKwltdXRleF9pbml0KCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOworCW11dGV4X2luaXQoJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CiAKIAlpZiAoc3R2MDkweF9zbGVlcCgmc3RhdGUtPmZyb250ZW5kKSA8IDApIHsKIAkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkVycm9yIHB1dHRpbmcgZGV2aWNlIHRvIHNsZWVwIik7CkBAIC00MzMxLDEwICs0NTc1LDEwIEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZHByaW50ayhGRV9FUlJPUiwgMSwgIkF0dGFjaGluZyAlcyBkZW1vZHVsYXRvciglZCkgQ3V0PTB4JTAyeFxuIiwKKwlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiQXR0YWNoaW5nICVzIGRlbW9kdWxhdG9yKCVkKSBDdXQ9MHglMDJ4IiwKIAkgICAgICAgc3RhdGUtPmRldmljZSA9PSBTVFYwOTAwID8gIlNUVjA5MDAiIDogIlNUVjA5MDMiLAogCSAgICAgICBkZW1vZCwKLQkgICAgICAgc3RhdGUtPmRldl92ZXIpOworCSAgICAgICBzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIpOwogCiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5oCmluZGV4IGIxMzM4MDcuLjMwZjAxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguaApAQCAtNjAsNiArNjAsMTEgQEAKIAlTVFYwOTB4X1JQVExFVkVMXzIJPSA3LAogfTsKIAorZW51bSBzdHYwOTB4X2FkY19yYW5nZSB7CisJU1RWMDkweF9BRENfMlZwcAk9IDAsCisJU1RWMDkweF9BRENfMVZwcAk9IDEKK307CisKIHN0cnVjdCBzdHYwOTB4X2NvbmZpZyB7CiAJZW51bSBzdHYwOTB4X2RldmljZQlkZXZpY2U7CiAJZW51bSBzdHYwOTB4X21vZGUJZGVtb2RfbW9kZTsKQEAgLTY4LDEzICs3MywxNyBAQAogCXUzMiB4dGFsOyAvKiBkZWZhdWx0OiA4MDAwMDAwICovCiAJdTggYWRkcmVzczsgLyogZGVmYXVsdDogMHg2OCAqLwogCi0JdTMyIHJlZl9jbGs7IC8qIGRlZmF1bHQ6IDE2MDAwMDAwIEZJWE1FIHRvIHR1bmVyIGNvbmZpZyAqLwotCiAJdTggdHMxX21vZGU7CiAJdTggdHMyX21vZGU7CisJdTMyIHRzMV9jbGs7CisJdTMyIHRzMl9jbGs7CiAKIAllbnVtIHN0djA5MHhfaTJjcnB0CXJlcGVhdGVyX2xldmVsOwogCisJdTgJCQl0dW5lcl9iYmdhaW47IC8qIGRlZmF1bHQ6IDEwZGIgKi8KKwllbnVtIHN0djA5MHhfYWRjX3JhbmdlCWFkYzFfcmFuZ2U7IC8qIGRlZmF1bHQ6IDJWcHAgKi8KKwllbnVtIHN0djA5MHhfYWRjX3JhbmdlCWFkYzJfcmFuZ2U7IC8qIGRlZmF1bHQ6IDJWcHAgKi8KKwogCWJvb2wgZGlzZXFjX2VudmVsb3BlX21vZGU7CiAKIAlpbnQgKCp0dW5lcl9pbml0KSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHhfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHhfcHJpdi5oCmluZGV4IDU5MjFhOGQuLjViNzgwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4X3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweF9wcml2LmgKQEAgLTIzMCwxMSArMjMwLDIzIEBACiAJczMyIHJlYWQ7CiB9OwogCitzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbCB7CisJc3RydWN0IGkyY19hZGFwdGVyIAkqaTJjX2FkYXA7CisJdTgJCQlpMmNfYWRkcjsKKworCXN0cnVjdCBtdXRleAkJZGVtb2RfbG9jazsgLyogTG9jayBhY2Nlc3MgdG8gc2hhcmVkIHJlZ2lzdGVyICovCisJc3RydWN0IG11dGV4CQl0dW5lcl9sb2NrOyAvKiBMb2NrIGFjY2VzcyB0byB0dW5lcnMgKi8KKwlzMzIJCQltY2xrOyAvKiBNYXN0ZXJjbG9jayBEaXZpZGVyIGZhY3RvciAqLworCXUzMgkJCWRldl92ZXI7CisKKwlpbnQJCQludW1fdXNlZDsKK307CisKIHN0cnVjdCBzdHYwOTB4X3N0YXRlIHsKIAllbnVtIHN0djA5MHhfZGV2aWNlCQlkZXZpY2U7CiAJZW51bSBzdHYwOTB4X2RlbW9kdWxhdG9yCWRlbW9kOwogCWVudW0gc3R2MDkweF9tb2RlCQlkZW1vZF9tb2RlOwotCXUzMgkJCQlkZXZfdmVyOworCXN0cnVjdCBzdHYwOTB4X2ludGVybmFsCQkqaW50ZXJuYWw7CiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJCSppMmM7CiAJY29uc3Qgc3RydWN0IHN0djA5MHhfY29uZmlnCSpjb25maWc7CkBAIC0yNTYsMTEgKzI2OCw4IEBACiAJdTMyCQkJCWZyZXF1ZW5jeTsKIAl1MzIJCQkJc3JhdGU7CiAKLQlzMzIJCQkJbWNsazsgLyogTWFzdGVyY2xvY2sgRGl2aWRlciBmYWN0b3IgKi8KIAlzMzIJCQkJdHVuZXJfYnc7CiAKLQl1MzIJCQkJdHVuZXJfcmVmY2xrOwotCiAJczMyCQkJCXNlYXJjaF9yYW5nZTsKIAogCXMzMgkJCQlEZW1vZFRpbWVvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5jCmluZGV4IGJjZmNiNjUuLmY5MzFlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5jCkBAIC0zNSw4ICszNSw2IEBACiBtb2R1bGVfcGFyYW0odmVyYm9zZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmVyYm9zZSwgIlNldCBWZXJib3NpdHkgbGV2ZWwiKTsKIAotc3RhdGljIHU4IHN0djYxMTB4X3JlZ3NbXSA9IHsweDA3LCAweDExLCAweGRjLCAweDg1LCAweDE3LCAweDAxLCAweGU2LCAweDFlfTsKLQogc3RhdGljIGludCBzdHY2MTEweF9yZWFkX3JlZyhzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4LCB1OCByZWcsIHU4ICpkYXRhKQogewogCWludCByZXQ7CkBAIC01OCwxMiArNTYsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzdHY2MTEweF93cml0ZV9yZWcoc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCwgdTggcmVnLCB1OCBkYXRhKQorc3RhdGljIGludCBzdHY2MTEweF93cml0ZV9yZWdzKHN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHgsIGludCBzdGFydCwgdTggZGF0YVtdLCBpbnQgbGVuKQogewogCWludCByZXQ7CiAJY29uc3Qgc3RydWN0IHN0djYxMTB4X2NvbmZpZyAqY29uZmlnID0gc3R2NjExMHgtPmNvbmZpZzsKLQl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gMCwgLiBidWYgPSBidWYsIC5sZW4gPSAyIH07CisJdTggYnVmW2xlbiArIDFdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBjb25maWctPmFkZHIsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsCisJCS5sZW4gPSBsZW4gKyAxCisJfTsKKworCWlmIChzdGFydCArIGxlbiA+IDgpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmWzBdID0gc3RhcnQ7CisJbWVtY3B5KCZidWZbMV0sIGRhdGEsIGxlbik7CiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIoc3R2NjExMHgtPmkyYywgJm1zZywgMSk7CiAJaWYgKHJldCAhPSAxKSB7CkBAIC03NCwxOCArODMsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzdHY2MTEweF93cml0ZV9yZWcoc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCwgdTggcmVnLCB1OCBkYXRhKQoreworCXJldHVybiBzdHY2MTEweF93cml0ZV9yZWdzKHN0djYxMTB4LCByZWcsICZkYXRhLCAxKTsKK30KKwogc3RhdGljIGludCBzdHY2MTEweF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAlpbnQgcmV0OwotCXU4IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdHY2MTEweF9yZWdzKTsgaSsrKSB7Ci0JCXJldCA9IHN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgaSwgc3R2NjExMHhfcmVnc1tpXSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KKwlyZXQgPSBzdHY2MTEweF93cml0ZV9yZWdzKHN0djYxMTB4LCAwLCBzdHY2MTEweC0+cmVncywKKwkJCQkgIEFSUkFZX1NJWkUoc3R2NjExMHgtPnJlZ3MpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CisJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTk4LDIzICsxMTAsMjMgQEAKIAlzMzIgcFZhbCwgcENhbGMsIHJEaXZPcHQgPSAwLCBwQ2FsY09wdCA9IDEwMDA7CiAJdTggaTsKIAotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9LLCAoUkVGQ0xPQ0tfTUh6IC0gMTYpKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0ssIChSRUZDTE9DS19NSHogLSAxNikpOwogCiAJaWYgKGZyZXF1ZW5jeSA8PSAxMDIzMDAwKSB7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMSk7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAwKTsKIAkJcFZhbCA9IDQwOwogCX0gZWxzZSBpZiAoZnJlcXVlbmN5IDw9IDEzMDAwMDApIHsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAxKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDEpOwogCQlwVmFsID0gNDA7CiAJfSBlbHNlIGlmIChmcmVxdWVuY3kgPD0gMjA0NjAwMCkgewotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDApOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMCk7CiAJCXBWYWwgPSAyMDsKIAl9IGVsc2UgewotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDApOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMSk7CiAJCXBWYWwgPSAyMDsKIAl9CiAKQEAgLTEzMCwyMSArMTQyLDIxIEBACiAJZGl2aWRlciA9IChmcmVxdWVuY3kgKiBSX0RJVihyRGl2T3B0KSAqIHBWYWwpIC8gUkVGQ0xPQ0tfa0h6OwogCWRpdmlkZXIgPSAoZGl2aWRlciArIDUpIC8gMTA7CiAKLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1JfRElWLCByRGl2T3B0KTsKLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX05fRElWXzExXzgsIE1TQihkaXZpZGVyKSk7Ci0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcwXSwgVE5HMF9OX0RJVl83XzAsIExTQihkaXZpZGVyKSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUl9ESVYsIHJEaXZPcHQpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX05fRElWXzExXzgsIE1TQihkaXZpZGVyKSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMF0sIFRORzBfTl9ESVZfN18wLCBMU0IoZGl2aWRlcikpOwogCiAJLyogVkNPIEF1dG8gY2FsaWJyYXRpb24gKi8KLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSwgU1RBVDFfQ0FMVkNPX1NUUlQsIDEpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSwgU1RBVDFfQ0FMVkNPX1NUUlQsIDEpOwogCi0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0pOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSk7Ci0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzBdKTsKLQlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzAsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzBdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOwogCiAJZm9yIChpID0gMDsgaSA8IFRSSUFMUzsgaSsrKSB7Ci0JCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKLQkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxWQ09fU1RSVCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pKQorCQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOworCQlpZiAoIVNUVjYxMTB4X0dFVEZJRUxEKFNUQVQxX0NBTFZDT19TVFJULCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pKQogCQkJCWJyZWFrOwogCQltc2xlZXAoMSk7CiAJfQpAQCAtMTU2LDE0ICsxNjgsMTQgQEAKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0pOwotCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcwXSk7CisJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSk7CisJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzAsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcwXSk7CiAKLQkqZnJlcXVlbmN5ID0gKE1BS0VXT1JEMTYoU1RWNjExMHhfR0VURklFTEQoVE5HMV9OX0RJVl8xMV84LCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdKSwKLQkJCQkgU1RWNjExMHhfR0VURklFTEQoVE5HMF9OX0RJVl83XzAsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMF0pKSkgKiBSRUZDTE9DS19rSHo7CisJKmZyZXF1ZW5jeSA9IChNQUtFV09SRDE2KFNUVjYxMTB4X0dFVEZJRUxEKFRORzFfTl9ESVZfMTFfOCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0pLAorCQkJCSBTVFY2MTEweF9HRVRGSUVMRChUTkcwX05fRElWXzdfMCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMF0pKSkgKiBSRUZDTE9DS19rSHo7CiAKLQkqZnJlcXVlbmN5IC89ICgxIDw8IChTVFY2MTEweF9HRVRGSUVMRChUTkcxX1JfRElWLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdKSArCi0JCQkgICAgIFNUVjYxMTB4X0dFVEZJRUxEKFRORzFfRElWNFNFTCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSkpKTsKKwkqZnJlcXVlbmN5IC89ICgxIDw8IChTVFY2MTEweF9HRVRGSUVMRChUTkcxX1JfRElWLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSkgKworCQkJICAgICBTVFY2MTEweF9HRVRGSUVMRChUTkcxX0RJVjRTRUwsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdKSkpOwogCiAJKmZyZXF1ZW5jeSA+Pj0gMjsKIApAQCAtMTc5LDI3ICsxOTEsMjcgQEAKIAloYWxmYncgPSBiYW5kd2lkdGggPj4gMTsKIAogCWlmIChoYWxmYncgPiAzNjAwMDAwMCkKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAzMSk7IC8qIExQRiAqLworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAzMSk7IC8qIExQRiAqLwogCWVsc2UgaWYgKGhhbGZidyA8IDUwMDAwMDApCi0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgMCk7IC8qIExQRiAqLworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAwKTsgLyogTFBGICovCiAJZWxzZQotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfQ0YsICgoaGFsZmJ3IC8gMTAwMDAwMCkgLSA1KSk7IC8qIExQRiAqLworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAoKGhhbGZidyAvIDEwMDAwMDApIC0gNSkpOyAvKiBMUEYgKi8KIAogCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgwKTsgLyogY2FsLiBjbGsgYWN0aXZhdGVkICovCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFJDX1NUUlQsIDB4MSk7IC8qIExQRiBhdXRvIGNhbCAqLworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfUkNDTEtfT0ZGLCAweDApOyAvKiBjYWwuIGNsayBhY3RpdmF0ZWQgKi8KKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFJDX1NUUlQsIDB4MSk7IC8qIExQRiBhdXRvIGNhbCAqLwogCi0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwzLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10pOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVFJJQUxTOyBpKyspIHsKLQkJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pOwotCQlpZiAoIVNUVjYxMTB4X0dFVEZJRUxEKFNUQVQxX0NBTFJDX1NUUlQsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKSkKKwkJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxSQ19TVFJULCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pKQogCQkJYnJlYWs7CiAJCW1zbGVlcCgxKTsKIAl9Ci0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgxKTsgLyogY2FsLiBkb25lICovCi0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfUkNDTEtfT0ZGLCAweDEpOyAvKiBjYWwuIGRvbmUgKi8KKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwzLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDgsOCArMjIwLDggQEAKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDMsICZzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwzXSk7Ci0JKmJhbmR3aWR0aCA9IChTVFY2MTEweF9HRVRGSUVMRChDVFJMM19DRiwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pICsgNSkgKiAyMDAwMDAwOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgJnN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSk7CisJKmJhbmR3aWR0aCA9IChTVFY2MTEweF9HRVRGSUVMRChDVFJMM19DRiwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdKSArIDUpICogMjAwMDAwMDsKIAogCXJldHVybiAwOwogfQpAQCAtMjIyLDIwICsyMzQsMjAgQEAKIAlzd2l0Y2ggKHJlZmNsb2NrKSB7CiAJZGVmYXVsdDoKIAljYXNlIDE6Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAyKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDIpOwogCQlicmVhazsKIAljYXNlIDg6CiAJY2FzZSAwOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAzKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDMpOwogCQlicmVhazsKIAl9Ci0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMiwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0pOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NCw4ICsyNTYsOCBAQAogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAotCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMiwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKLQkqZ2FpbiA9IDIgKiBTVFY2MTEweF9HRVRGSUVMRChDVFJMMl9CQkdBSU4sIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0pOworCSpnYWluID0gMiAqIFNUVjYxMTB4X0dFVEZJRUxEKENUUkwyX0JCR0FJTiwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjU0LDggKzI2Niw4IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0JCR0FJTiwgZ2FpbiAvIDIpOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0JCR0FJTiwgZ2FpbiAvIDIpOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI2NywxOSArMjc5LDE5IEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFRVTkVSX1NMRUVQOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1JYLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0xQVCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9SWCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfTFBULCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRVTkVSX1dBS0U6Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9TWU4sIDEpOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfUlgsIDEpOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfTFBULCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9TWU4sIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1JYLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9MUFQsIDEpOwogCQlicmVhazsKIAl9CiAKLQlyZXQgPSBzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwxLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSk7CisJcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdKTsKIAlpZiAocmV0IDwgMCkgewogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIEVycm9yIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMjk3LDkgKzMwOSw5IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0Jc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CiAKLQlpZiAoU1RWNjExMHhfR0VURklFTEQoU1RBVDFfTE9DSywgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pKQorCWlmIChTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9MT0NLLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pKQogCQkqc3RhdHVzID0gVFVORVJfUEhBU0VMT0NLRUQ7CiAJZWxzZQogCQkqc3RhdHVzID0gMDsKQEAgLTM0OSw2ICszNjEsOCBAQAogCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4OworCXU4IGRlZmF1bHRfcmVnc1tdID0gezB4MDcsIDB4MTEsIDB4ZGMsIDB4ODUsIDB4MTcsIDB4MDEsIDB4ZTYsIDB4MWV9OworCWludCByZXQ7CiAKIAlzdHY2MTEweCA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3R2NjExMHggPT0gTlVMTCkKQEAgLTM1Nyw2ICszNzEsNDQgQEAKIAlzdHY2MTEweC0+aTJjCQk9IGkyYzsKIAlzdHY2MTEweC0+Y29uZmlnCT0gY29uZmlnOwogCXN0djYxMTB4LT5kZXZjdGwJPSAmc3R2NjExMHhfY3RsOworCW1lbWNweShzdHY2MTEweC0+cmVncywgZGVmYXVsdF9yZWdzLCA4KTsKKworCS8qIHNldHVwIGRpdmlkZXIgKi8KKwlzd2l0Y2ggKHN0djYxMTB4LT5jb25maWctPmNsa19kaXYpIHsKKwlkZWZhdWx0OgorCWNhc2UgMToKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDApOworCQlicmVhazsKKwljYXNlIDI6CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMik7CisJCWJyZWFrOworCWNhc2UgODoKKwljYXNlIDA6CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAzKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkgeworCQlyZXQgPSBmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVncyhzdHY2MTEweCwgMCwgc3R2NjExMHgtPnJlZ3MsCisJCQkJICBBUlJBWV9TSVpFKHN0djYxMTB4LT5yZWdzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIHsKKwkJcmV0ID0gZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycm9yOworCX0KIAogCWZlLT50dW5lcl9wcml2CQk9IHN0djYxMTB4OwogCWZlLT5vcHMudHVuZXJfb3BzCT0gc3R2NjExMHhfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguaAppbmRleCBhMzgyNTcwLi4yNDI5YWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguaApAQCAtMjYsNiArMjYsNyBAQAogc3RydWN0IHN0djYxMTB4X2NvbmZpZyB7CiAJdTgJYWRkcjsKIAl1MzIJcmVmY2xrOworCXU4CWNsa19kaXY7IC8qIGRpdmlzb3IgdmFsdWUgZm9yIHRoZSBvdXRwdXQgY2xvY2sgKi8KIH07CiAKIGVudW0gdHVuZXJfbW9kZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHhfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4X3ByaXYuaAppbmRleCA3MjYwZGE2Li4wZWM5MzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHhfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweF9wcml2LmgKQEAgLTY4LDYgKzY4LDcgQEAKIHN0cnVjdCBzdHY2MTEweF9zdGF0ZSB7CiAJc3RydWN0IGkyY19hZGFwdGVyCQkqaTJjOwogCWNvbnN0IHN0cnVjdCBzdHY2MTEweF9jb25maWcJKmNvbmZpZzsKKwl1OCAJCQkJcmVnc1s4XTsKIAogCXN0cnVjdCBzdHY2MTEweF9kZXZjdGwJCSpkZXZjdGw7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTY2NXguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE2NjV4LmMKaW5kZXggODdkNTI3My4uYzQ0ZmVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTY2NXguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhNjY1eC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJZnJlcXVlbmN5ICs9IGNvbmZpZy0+cmVmX2RpdmlkZXIgPj4gMTsKIAkJZnJlcXVlbmN5IC89IGNvbmZpZy0+cmVmX2RpdmlkZXI7CiAKLQkJYnVmWzBdID0gKHU4KSAoZnJlcXVlbmN5ICYgMHg3ZjAwKSA+PiA4OworCQlidWZbMF0gPSAodTgpICgoZnJlcXVlbmN5ICYgMHg3ZjAwKSA+PiA4KTsKIAkJYnVmWzFdID0gKHU4KSAoZnJlcXVlbmN5ICYgMHgwMGZmKSA+PiAwOwogCQlidWZbMl0gPSAweDgwIHwgMHg0MCB8IDB4MDI7CiAJCWJ1ZlszXSA9IDB4MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYwppbmRleCAzMjBjM2MzLi42MTRhZmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjYxLmMKQEAgLTM5LDcgKzM5LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgdGRhODI2MV9jb25maWcgKmNvbmZpZyA9IHN0YXRlLT5jb25maWc7CiAJaW50IGVyciA9IDA7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkcgk9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IGJ1ZiwgIC5sZW4gPSAyIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkcgk9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IGJ1ZiwgIC5sZW4gPSAxIH07CiAKIAlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkKIAkJcHJpbnRrKCIlczogcmVhZCBlcnJvciwgZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jCmluZGV4IDRlODE0ZmYuLjM0YzVkZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJc3RhdGUtPmJmID0gMHhmZjsKIAogCWlmICghc3RhdGUtPmNvbmZpZy0+cmZfbG9vcF9lbmFibGUpCi0JCXpsMTAwMzZfaW5pdF90YWJbMV1bMl0gfD0gMHgwMTsKKwkJemwxMDAzNl9pbml0X3RhYlsxXVswXSB8PSAweDAxOwogCiAJZGViX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzOS5jCmluZGV4IDExYjI5Y2IuLmMwODVlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzkuYwpAQCAtMjg3LDcgKzI4Nyw2IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRwcmludGsoIkNoaXAgSUQ9JXggZG9lcyBub3QgbWF0Y2ggYSBrbm93biB0eXBlXG4iLCBzdGF0ZS0+aWQpOwotCQlicmVhazsKIAkJZ290byBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaGlmLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2hpZi5jCmluZGV4IDc0NzdkYWMuLjU3NzJlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaGlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19oaWYuYwpAQCAtMjIsOCArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSAiZG14ZGV2LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMKaW5kZXggNmE5ZGY3Ny4uNDY3NWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW5wdXQuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJcmMtPmlkLnZlcnNpb24JPSAxOwogCXJjLT5kZXYJCT0gbWFudGlzLT5wZGV2LT5kZXY7CiAKLQllcnIgPSBpcl9pbnB1dF9yZWdpc3RlcihyYywgJmlyX21hbnRpcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIocmMsICZpcl9tYW50aXMsIE5VTEwpOwogCWlmIChlcnIpIHsKIAkJZHByaW50ayhNQU5USVNfRVJST1IsIDEsICJJUiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCwgcmV0ID0gJWQiLCBlcnIpOwogCQlpbnB1dF9mcmVlX2RldmljZShyYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3BjaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19wY2kuYwppbmRleCA2Yzc1MzRhLi41OWZlZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3BjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfcGNpLmMKQEAgLTQxLDExICs0MSw2IEBACiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiZHZiX25ldC5oIgogCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KICNpbmNsdWRlICJtYW50aXNfY29tbW9uLmgiCiAjaW5jbHVkZSAibWFudGlzX3JlZy5oIgogI2luY2x1ZGUgIm1hbnRpc19wY2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzhlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmlnIERWQl9OR0VORQorCXRyaXN0YXRlICJNaWNyb25hcyBuR2VuZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQworCXNlbGVjdCBEVkJfTE5CUDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVFY2MTEweCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDkweCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIE1pY3JvbmFzIFBDSSBleHByZXNzIGNhcmRzIHdpdGggbkdlbmUgYnJpZGdlLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNDM1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbkdlbmUgZGV2aWNlIGRyaXZlcgorIworCituZ2VuZS1vYmpzIDo9IG5nZW5lLWNvcmUubworCitvYmotJChDT05GSUdfRFZCX05HRU5FKSArPSBuZ2VuZS5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MGRmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYwpAQCAtMCwwICsxLDIwMjQgQEAKKy8qCisgKiBuZ2VuZS5jOiBuR2VuZSBQQ0llIGJyaWRnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBNaWNyb25hcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJhbHBoIE1ldHpsZXIgPHJqa21AbWV0emxlcmJyb3MuZGU+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBNb2RpZmljYXRpb25zIGZvciBuZXcgbkdlbmUgZmlybXdhcmUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBFRVBST00tY29weWluZywKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIG5ldyBkdWFsIERWQi1TMiBjYXJkIHByb3RvdHlwZQorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIG9ubHksIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICogT3IsIHBvaW50IHlvdXIgYnJvd3NlciB0byBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJuZ2VuZS5oIgorCisjaW5jbHVkZSAic3R2NjExMHguaCIKKyNpbmNsdWRlICJzdHYwOTB4LmgiCisjaW5jbHVkZSAibG5iaDI0LmgiCisKK3N0YXRpYyBpbnQgb25lX2FkYXB0ZXIgPSAxOworbW9kdWxlX3BhcmFtKG9uZV9hZGFwdGVyLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhvbmVfYWRhcHRlciwgIlVzZSBvbmx5IG9uZSBhZGFwdGVyLiIpOworCisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiUHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uLiIpOworCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworI2RlZmluZSBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCisjZGVmaW5lIGRwcmludGsJaWYgKGRlYnVnKSBwcmludGsKKworI2RlZmluZSBERVZJQ0VfTkFNRSAibmdlbmUiCisKKyNkZWZpbmUgbmd3cml0ZWIoZGF0LCBhZHIpICAgICAgICAgd3JpdGViKChkYXQpLCAoY2hhciAqKShkZXYtPmlvbWVtICsgKGFkcikpKQorI2RlZmluZSBuZ3dyaXRlbChkYXQsIGFkcikgICAgICAgICB3cml0ZWwoKGRhdCksIChjaGFyICopKGRldi0+aW9tZW0gKyAoYWRyKSkpCisjZGVmaW5lIG5nd3JpdGViKGRhdCwgYWRyKSAgICAgICAgIHdyaXRlYigoZGF0KSwgKGNoYXIgKikoZGV2LT5pb21lbSArIChhZHIpKSkKKyNkZWZpbmUgbmdyZWFkbChhZHIpICAgICAgICAgICAgICAgcmVhZGwoZGV2LT5pb21lbSArIChhZHIpKQorI2RlZmluZSBuZ3JlYWRiKGFkcikgICAgICAgICAgICAgICByZWFkYihkZXYtPmlvbWVtICsgKGFkcikpCisjZGVmaW5lIG5nY3B5dG8oYWRyLCBzcmMsIGNvdW50KSAgIG1lbWNweV90b2lvKChjaGFyICopIFwKKwkJCQkgICAoZGV2LT5pb21lbSArIChhZHIpKSwgKHNyYyksIChjb3VudCkpCisjZGVmaW5lIG5nY3B5ZnJvbShkc3QsIGFkciwgY291bnQpIG1lbWNweV9mcm9taW8oKGRzdCksIChjaGFyICopIFwKKwkJCQkgICAoZGV2LT5pb21lbSArIChhZHIpKSwgKGNvdW50KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBuR2VuZSBpbnRlcnJ1cHQgaGFuZGxlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBldmVudF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IChzdHJ1Y3QgbmdlbmUgKilkYXRhOworCisJd2hpbGUgKGRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCAhPSBkZXYtPkV2ZW50UXVldWVXcml0ZUluZGV4KSB7CisJCXN0cnVjdCBFVkVOVF9CVUZGRVIgRXZlbnQgPQorCQkJZGV2LT5FdmVudFF1ZXVlW2Rldi0+RXZlbnRRdWV1ZVJlYWRJbmRleF07CisJCWRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCA9CisJCQkoZGV2LT5FdmVudFF1ZXVlUmVhZEluZGV4ICsgMSkgJiAoRVZFTlRfUVVFVUVfU0laRSAtIDEpOworCisJCWlmICgoRXZlbnQuVUFSVFN0YXR1cyAmIDB4MDEpICYmIChkZXYtPlR4RXZlbnROb3RpZnkpKQorCQkJZGV2LT5UeEV2ZW50Tm90aWZ5KGRldiwgRXZlbnQuVGltZVN0YW1wKTsKKwkJaWYgKChFdmVudC5VQVJUU3RhdHVzICYgMHgwMikgJiYgKGRldi0+UnhFdmVudE5vdGlmeSkpCisJCQlkZXYtPlJ4RXZlbnROb3RpZnkoZGV2LCBFdmVudC5UaW1lU3RhbXAsCisJCQkJCSAgIEV2ZW50LlJYQ2hhcmFjdGVyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlbXV4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopZGF0YTsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gY2hhbi0+bmV4dEJ1ZmZlcjsKKworCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCisJd2hpbGUgKEN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDgwKSB7CisJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCXUzMiBGbGFncyA9IGNoYW4tPkRhdGFGb3JtYXRGbGFnczsKKwkJCWlmIChDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHgyMCkKKwkJCQlGbGFncyB8PSBCRUZfT1ZFUkZMT1c7CisJCQlpZiAoY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKSB7CisJCQkJaWYgKCFjaGFuLT5wQnVmZmVyRXhjaGFuZ2UoY2hhbiwKKwkJCQkJCQkgICBDdXItPkJ1ZmZlcjEsCisJCQkJCQkJICAgY2hhbi0+Q2FwdHVyZTFMZW5ndGgsCisJCQkJCQkJICAgQ3VyLT5uZ2VuZUJ1ZmZlci5TUi4KKwkJCQkJCQkgICBDbG9jaywgRmxhZ3MpKSB7CisJCQkJCS8qCisJCQkJCSAgIFdlIGRpZG4ndCBnZXQgZGF0YQorCQkJCQkgICBDbGVhciBpbiBzZXJ2aWNlIGZsYWcgdG8gbWFrZSBzdXJlIHdlCisJCQkJCSAgIGdldCBjYWxsZWQgb24gbmV4dCBpbnRlcnJ1cHQgYWdhaW4uCisJCQkJCSAgIGxlYXZlIGZpbGwvZW1wdHkgKDB4ODApIGZsYWcgYWxvbmUKKwkJCQkJICAgdG8gYXZvaWQgaGFyZHdhcmUgcnVubmluZyBvdXQgb2YKKwkJCQkJICAgYnVmZmVycyBkdXJpbmcgc3RhcnR1cCwgd2UgaG9sZCBvbmx5CisJCQkJCSAgIGluIHJ1biBzdGF0ZSAoIHRoZSBzb3VyY2UgbWF5IGJlIGxhdGUKKwkJCQkJICAgZGVsaXZlcmluZyBkYXRhICkKKwkJCQkJKi8KKworCQkJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgeworCQkJCQkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmPQorCQkJCQkJCX4weDQwOworCQkJCQkJYnJlYWs7CisJCQkJCQkvKiBTdG9wIHByb2NjZXNzaW5nIHN0cmVhbSAqLworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogV2UgZ290IGEgdmFsaWQgYnVmZmVyLAorCQkJCQkgICBzbyBzd2l0Y2ggdG8gcnVuIHN0YXRlICovCisJCQkJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1JVTjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBPT1BTXG4iKTsKKwkJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgeworCQkJCQlDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICY9IH4weDQwOworCQkJCQlicmVhazsJLyogU3RvcCBwcm9jY2Vzc2luZyBzdHJlYW0gKi8KKwkJCQl9CisJCQl9CisJCQlpZiAoY2hhbi0+QXVkaW9EVE9VcGRhdGVkKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRQorCQkJCSAgICAgICAiOiBVcGRhdGUgQXVkaW9EVE8gPSAlZFxuIiwKKwkJCQkgICAgICAgY2hhbi0+QXVkaW9EVE9WYWx1ZSk7CisJCQkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5EVE9VcGRhdGUgPQorCQkJCQljaGFuLT5BdWRpb0RUT1ZhbHVlOworCQkJCWNoYW4tPkF1ZGlvRFRPVXBkYXRlZCA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgeworCQkJCXUzMiBGbGFncyA9IDA7CisJCQkJaWYgKEN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDAxKQorCQkJCQlGbGFncyB8PSBCRUZfRVZFTl9GSUVMRDsKKwkJCQlpZiAoQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmIDB4MjApCisJCQkJCUZsYWdzIHw9IEJFRl9PVkVSRkxPVzsKKwkJCQlpZiAoY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKQorCQkJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UoY2hhbiwKKwkJCQkJCQkgICAgICBDdXItPkJ1ZmZlcjEsCisJCQkJCQkJICAgICAgY2hhbi0+CisJCQkJCQkJICAgICAgQ2FwdHVyZTFMZW5ndGgsCisJCQkJCQkJICAgICAgQ3VyLT5uZ2VuZUJ1ZmZlci4KKwkJCQkJCQkgICAgICBTUi5DbG9jaywgRmxhZ3MpOworCQkJCWlmIChjaGFuLT5wQnVmZmVyRXhjaGFuZ2UyKQorCQkJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UyKGNoYW4sCisJCQkJCQkJICAgICAgIEN1ci0+QnVmZmVyMiwKKwkJCQkJCQkgICAgICAgY2hhbi0+CisJCQkJCQkJICAgICAgIENhcHR1cmUyTGVuZ3RoLAorCQkJCQkJCSAgICAgICBDdXItPm5nZW5lQnVmZmVyLgorCQkJCQkJCSAgICAgICBTUi5DbG9jaywgRmxhZ3MpOworCQkJfSBlbHNlIGlmIChjaGFuLT5IV1N0YXRlICE9IEhXU1RBVEVfU1RPUCkKKwkJCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9SVU47CisJCX0KKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyA9IDB4MDA7CisJCUN1ciA9IEN1ci0+TmV4dDsKKwl9CisJY2hhbi0+bmV4dEJ1ZmZlciA9IEN1cjsKKworCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5nZW5lICpkZXYgPSAoc3RydWN0IG5nZW5lICopZGV2X2lkOworCXUzMiBpY291bnRzID0gMDsKKwlpcnFyZXR1cm5fdCByYyA9IElSUV9OT05FOworCXUzMiBpID0gTUFYX1NUUkVBTTsKKwl1OCAqdG1wQ21kRG9uZUJ5dGU7CisKKwlpZiAoZGV2LT5Cb290RmlybXdhcmUpIHsKKwkJaWNvdW50cyA9IG5ncmVhZGwoTkdFTkVfSU5UX0NPVU5UUyk7CisJCWlmIChpY291bnRzICE9IGRldi0+aWNvdW50cykgeworCQkJbmd3cml0ZWwoMCwgRk9SQ0VfTk1JKTsKKwkJCWRldi0+Y21kX2RvbmUgPSAxOworCQkJd2FrZV91cCgmZGV2LT5jbWRfd3EpOworCQkJZGV2LT5pY291bnRzID0gaWNvdW50czsKKwkJCXJjID0gSVJRX0hBTkRMRUQ7CisJCX0KKwkJcmV0dXJuIHJjOworCX0KKworCW5nd3JpdGVsKDAsIEZPUkNFX05NSSk7CisKKwlzcGluX2xvY2soJmRldi0+Y21kX2xvY2spOworCXRtcENtZERvbmVCeXRlID0gZGV2LT5DbWREb25lQnl0ZTsKKwlpZiAodG1wQ21kRG9uZUJ5dGUgJiYKKwkgICAgKCp0bXBDbWREb25lQnl0ZSB8fAorCSAgICAoZGV2LT5uZ2VuZXRvaG9zdFswXSA9PSAxICYmIGRldi0+bmdlbmV0b2hvc3RbMV0gIT0gMCkpKSB7CisJCWRldi0+Q21kRG9uZUJ5dGUgPSBOVUxMOworCQlkZXYtPmNtZF9kb25lID0gMTsKKwkJd2FrZV91cCgmZGV2LT5jbWRfd3EpOworCQlyYyA9IElSUV9IQU5ETEVEOworCX0KKwlzcGluX3VubG9jaygmZGV2LT5jbWRfbG9jayk7CisKKwlpZiAoZGV2LT5FdmVudEJ1ZmZlci0+RXZlbnRTdGF0dXMgJiAweDgwKSB7CisJCXU4IG5leHRXcml0ZUluZGV4ID0KKwkJCShkZXYtPkV2ZW50UXVldWVXcml0ZUluZGV4ICsgMSkgJgorCQkJKEVWRU5UX1FVRVVFX1NJWkUgLSAxKTsKKwkJaWYgKG5leHRXcml0ZUluZGV4ICE9IGRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCkgeworCQkJZGV2LT5FdmVudFF1ZXVlW2Rldi0+RXZlbnRRdWV1ZVdyaXRlSW5kZXhdID0KKwkJCQkqKGRldi0+RXZlbnRCdWZmZXIpOworCQkJZGV2LT5FdmVudFF1ZXVlV3JpdGVJbmRleCA9IG5leHRXcml0ZUluZGV4OworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IGV2ZW50IG92ZXJmbG93XG4iKTsKKwkJCWRldi0+RXZlbnRRdWV1ZU92ZXJmbG93Q291bnQgKz0gMTsKKwkJCWRldi0+RXZlbnRRdWV1ZU92ZXJmbG93RmxhZyA9IDE7CisJCX0KKwkJZGV2LT5FdmVudEJ1ZmZlci0+RXZlbnRTdGF0dXMgJj0gfjB4ODA7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+ZXZlbnRfdGFza2xldCk7CisJCXJjID0gSVJRX0hBTkRMRUQ7CisJfQorCisJd2hpbGUgKGkgPiAwKSB7CisJCWktLTsKKwkJc3Bpbl9sb2NrKCZkZXYtPmNoYW5uZWxbaV0uc3RhdGVfbG9jayk7CisJCS8qIGlmIChkZXYtPmNoYW5uZWxbaV0uU3RhdGU+PUtTU1RBVEVfUlVOKSB7ICovCisJCWlmIChkZXYtPmNoYW5uZWxbaV0ubmV4dEJ1ZmZlcikgeworCQkJaWYgKChkZXYtPmNoYW5uZWxbaV0ubmV4dEJ1ZmZlci0+CisJCQkgICAgIG5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHhDMCkgPT0gMHg4MCkgeworCQkJCWRldi0+Y2hhbm5lbFtpXS5uZXh0QnVmZmVyLT4KKwkJCQkJbmdlbmVCdWZmZXIuU1IuRmxhZ3MgfD0gMHg0MDsKKwkJCQl0YXNrbGV0X3NjaGVkdWxlKAorCQkJCQkmZGV2LT5jaGFubmVsW2ldLmRlbXV4X3Rhc2tsZXQpOworCQkJCXJjID0gSVJRX0hBTkRMRUQ7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmRldi0+Y2hhbm5lbFtpXS5zdGF0ZV9sb2NrKTsKKwl9CisKKwkvKiBSZXF1ZXN0IG1pZ2h0IGhhdmUgYmVlbiBwcm9jZXNzZWQgYnkgYSBwcmV2aW91cyBjYWxsLiAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBuR2VuZSBjb21tYW5kIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBkdW1wX2NvbW1hbmRfaW8oc3RydWN0IG5nZW5lICpkZXYpCit7CisJdTggYnVmWzhdLCAqYjsKKworCW5nY3B5ZnJvbShidWYsIEhPU1RfVE9fTkdFTkUsIDgpOworCXByaW50ayhLRVJOX0VSUiAiaG9zdF90b19uZ2VuZSAoJTA0eCk6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJSE9TVF9UT19OR0VORSwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLAorCQlidWZbNF0sIGJ1Zls1XSwgYnVmWzZdLCBidWZbN10pOworCisJbmdjcHlmcm9tKGJ1ZiwgTkdFTkVfVE9fSE9TVCwgOCk7CisJcHJpbnRrKEtFUk5fRVJSICJuZ2VuZV90b19ob3N0ICglMDR4KTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQlOR0VORV9UT19IT1NULCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sCisJCWJ1Zls0XSwgYnVmWzVdLCBidWZbNl0sIGJ1Zls3XSk7CisKKwliID0gZGV2LT5ob3N0dG9uZ2VuZTsKKwlwcmludGsoS0VSTl9FUlIgImRldi0+aG9zdHRvbmdlbmUgKCVwKTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQliLCBiWzBdLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdLCBiWzVdLCBiWzZdLCBiWzddKTsKKworCWIgPSBkZXYtPm5nZW5ldG9ob3N0OworCXByaW50ayhLRVJOX0VSUiAiZGV2LT5uZ2VuZXRvaG9zdCAoJXApOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCWIsIGJbMF0sIGJbMV0sIGJbMl0sIGJbM10sIGJbNF0sIGJbNV0sIGJbNl0sIGJbN10pOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfbXV0ZXgoc3RydWN0IG5nZW5lICpkZXYsIHN0cnVjdCBuZ2VuZV9jb21tYW5kICpjb20pCit7CisJaW50IHJldDsKKwl1OCAqdG1wQ21kRG9uZUJ5dGU7CisKKwlkZXYtPmNtZF9kb25lID0gMDsKKworCWlmIChjb20tPmNtZC5oZHIuT3Bjb2RlID09IENNRF9GV0xPQURfUFJFUEFSRSkgeworCQlkZXYtPkJvb3RGaXJtd2FyZSA9IDE7CisJCWRldi0+aWNvdW50cyA9IG5ncmVhZGwoTkdFTkVfSU5UX0NPVU5UUyk7CisJCW5nd3JpdGVsKDAsIE5HRU5FX0NPTU1BTkQpOworCQluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EX0hJKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfU1RBVFVTKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfU1RBVFVTX0hJKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfRVZFTlQpOworCQluZ3dyaXRlbCgwLCBOR0VORV9FVkVOVF9ISSk7CisJfSBlbHNlIGlmIChjb20tPmNtZC5oZHIuT3Bjb2RlID09IENNRF9GV0xPQURfRklOSVNIKSB7CisJCXU2NCBmd2lvID0gZGV2LT5QQUZXSW50ZXJmYWNlQnVmZmVyOworCisJCW5nd3JpdGVsKGZ3aW8gJiAweGZmZmZmZmZmLCBOR0VORV9DT01NQU5EKTsKKwkJbmd3cml0ZWwoZndpbyA+PiAzMiwgTkdFTkVfQ09NTUFORF9ISSk7CisJCW5nd3JpdGVsKChmd2lvICsgMjU2KSAmIDB4ZmZmZmZmZmYsIE5HRU5FX1NUQVRVUyk7CisJCW5nd3JpdGVsKChmd2lvICsgMjU2KSA+PiAzMiwgTkdFTkVfU1RBVFVTX0hJKTsKKwkJbmd3cml0ZWwoKGZ3aW8gKyA1MTIpICYgMHhmZmZmZmZmZiwgTkdFTkVfRVZFTlQpOworCQluZ3dyaXRlbCgoZndpbyArIDUxMikgPj4gMzIsIE5HRU5FX0VWRU5UX0hJKTsKKwl9CisKKwltZW1jcHkoZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciwgY29tLT5jbWQucmF3OCwgY29tLT5pbl9sZW4gKyAyKTsKKworCWlmIChkZXYtPkJvb3RGaXJtd2FyZSkKKwkJbmdjcHl0byhIT1NUX1RPX05HRU5FLCBjb20tPmNtZC5yYXc4LCBjb20tPmluX2xlbiArIDIpOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5jbWRfbG9jayk7CisJdG1wQ21kRG9uZUJ5dGUgPSBkZXYtPm5nZW5ldG9ob3N0ICsgY29tLT5vdXRfbGVuOworCWlmICghY29tLT5vdXRfbGVuKQorCQl0bXBDbWREb25lQnl0ZSsrOworCSp0bXBDbWREb25lQnl0ZSA9IDA7CisJZGV2LT5uZ2VuZXRvaG9zdFswXSA9IDA7CisJZGV2LT5uZ2VuZXRvaG9zdFsxXSA9IDA7CisJZGV2LT5DbWREb25lQnl0ZSA9IHRtcENtZERvbmVCeXRlOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5jbWRfbG9jayk7CisKKwkvKiBOb3RpZnkgODA1MS4gKi8KKwluZ3dyaXRlbCgxLCBGT1JDRV9JTlQpOworCisJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGRldi0+Y21kX3dxLCBkZXYtPmNtZF9kb25lID09IDEsIDIgKiBIWik7CisJaWYgKCFyZXQpIHsKKwkJLypuZ3dyaXRlbCgwLCBGT1JDRV9OTUkpOyovCisKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FCisJCSAgICAgICAiOiBDb21tYW5kIHRpbWVvdXQgY21kPSUwMnggcHJldj0lMDJ4XG4iLAorCQkgICAgICAgY29tLT5jbWQuaGRyLk9wY29kZSwgZGV2LT5wcmV2X2NtZCk7CisJCWR1bXBfY29tbWFuZF9pbyhkZXYpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjb20tPmNtZC5oZHIuT3Bjb2RlID09IENNRF9GV0xPQURfRklOSVNIKQorCQlkZXYtPkJvb3RGaXJtd2FyZSA9IDA7CisKKwlkZXYtPnByZXZfY21kID0gY29tLT5jbWQuaGRyLk9wY29kZTsKKworCWlmICghY29tLT5vdXRfbGVuKQorCQlyZXR1cm4gMDsKKworCW1lbWNweShjb20tPmNtZC5yYXc4LCBkZXYtPm5nZW5ldG9ob3N0LCBjb20tPm91dF9sZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZChzdHJ1Y3QgbmdlbmUgKmRldiwgc3RydWN0IG5nZW5lX2NvbW1hbmQgKmNvbSkKK3sKKwlpbnQgcmVzdWx0OworCisJZG93bigmZGV2LT5jbWRfbXV0ZXgpOworCXJlc3VsdCA9IG5nZW5lX2NvbW1hbmRfbXV0ZXgoZGV2LCBjb20pOworCXVwKCZkZXYtPmNtZF9tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfaTJjX3JlYWQoc3RydWN0IG5nZW5lICpkZXYsIHU4IGFkciwKKwkJCSAgIHU4ICpvdXQsIHU4IG91dGxlbiwgdTggKmluLCB1OCBpbmxlbiwgaW50IGZsYWcpCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0kyQ19SRUFEOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IG91dGxlbiArIDM7CisJY29tLmNtZC5JMkNSZWFkLkRldmljZSA9IGFkciA8PCAxOworCW1lbWNweShjb20uY21kLkkyQ1JlYWQuRGF0YSwgb3V0LCBvdXRsZW4pOworCWNvbS5jbWQuSTJDUmVhZC5EYXRhW291dGxlbl0gPSBpbmxlbjsKKwljb20uY21kLkkyQ1JlYWQuRGF0YVtvdXRsZW4gKyAxXSA9IDA7CisJY29tLmluX2xlbiA9IG91dGxlbiArIDM7CisJY29tLm91dF9sZW4gPSBpbmxlbiArIDE7CisKKwlpZiAobmdlbmVfY29tbWFuZChkZXYsICZjb20pIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKGNvbS5jbWQucmF3OFswXSA+PiAxKSAhPSBhZHIpCisJCXJldHVybiAtRUlPOworCisJaWYgKGZsYWcpCisJCW1lbWNweShpbiwgY29tLmNtZC5yYXc4LCBpbmxlbiArIDEpOworCWVsc2UKKwkJbWVtY3B5KGluLCBjb20uY21kLnJhdzggKyAxLCBpbmxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9pMmNfd3JpdGUoc3RydWN0IG5nZW5lICpkZXYsIHU4IGFkciwKKwkJCQkgICB1OCAqb3V0LCB1OCBvdXRsZW4pCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfSTJDX1dSSVRFOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IG91dGxlbiArIDE7CisJY29tLmNtZC5JMkNSZWFkLkRldmljZSA9IGFkciA8PCAxOworCW1lbWNweShjb20uY21kLkkyQ1JlYWQuRGF0YSwgb3V0LCBvdXRsZW4pOworCWNvbS5pbl9sZW4gPSBvdXRsZW4gKyAxOworCWNvbS5vdXRfbGVuID0gMTsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChjb20uY21kLnJhdzhbMF0gPT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2xvYWRfZmlybXdhcmUoc3RydWN0IG5nZW5lICpkZXYsCisJCQkJICAgICAgIHU4ICpuZ2VuZV9mdywgdTMyIHNpemUpCit7CisjZGVmaW5lIEZJUlNUQ0hVTksgKDEwMjQpCisJdTMyIGNsZWZ0OworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9GV0xPQURfUFJFUEFSRTsKKwljb20uY21kLmhkci5MZW5ndGggPSAwOworCWNvbS5pbl9sZW4gPSAwOworCWNvbS5vdXRfbGVuID0gMDsKKworCW5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKTsKKworCWNsZWZ0ID0gKHNpemUgKyAzKSAmIH4zOworCWlmIChjbGVmdCA+IEZJUlNUQ0hVTkspIHsKKwkJbmdjcHl0byhQUk9HUkFNX1NSQU0gKyBGSVJTVENIVU5LLCBuZ2VuZV9mdyArIEZJUlNUQ0hVTkssCisJCQljbGVmdCAtIEZJUlNUQ0hVTkspOworCQljbGVmdCA9IEZJUlNUQ0hVTks7CisJfQorCW5nY3B5dG8oREFUQV9GSUZPX0FSRUEsIG5nZW5lX2Z3LCBjbGVmdCk7CisKKwltZW1zZXQoJmNvbSwgMCwgc2l6ZW9mKHN0cnVjdCBuZ2VuZV9jb21tYW5kKSk7CisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0ZXTE9BRF9GSU5JU0g7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gNDsKKwljb20uY21kLkZXTG9hZEZpbmlzaC5BZGRyZXNzID0gREFUQV9GSUZPX0FSRUE7CisJY29tLmNtZC5GV0xvYWRGaW5pc2guTGVuZ3RoID0gKHVuc2lnbmVkIHNob3J0KWNsZWZ0OworCWNvbS5pbl9sZW4gPSA0OworCWNvbS5vdXRfbGVuID0gMDsKKworCXJldHVybiBuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSk7Cit9CisKKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2NvbmZpZ19idWYoc3RydWN0IG5nZW5lICpkZXYsIHU4IGNvbmZpZykKK3sKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfQ09ORklHVVJFX0JVRkZFUjsKKwljb20uY21kLmhkci5MZW5ndGggPSAxOworCWNvbS5jbWQuQ29uZmlndXJlQnVmZmVycy5jb25maWcgPSBjb25maWc7CisJY29tLmluX2xlbiA9IDE7CisJY29tLm91dF9sZW4gPSAwOworCisJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfY29uZmlnX2ZyZWVfYnVmKHN0cnVjdCBuZ2VuZSAqZGV2LCB1OCAqY29uZmlnKQoreworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9DT05GSUdVUkVfRlJFRV9CVUZGRVI7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gNjsKKwltZW1jcHkoJmNvbS5jbWQuQ29uZmlndXJlQnVmZmVycy5jb25maWcsIGNvbmZpZywgNik7CisJY29tLmluX2xlbiA9IDY7CisJY29tLm91dF9sZW4gPSAwOworCisJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9ncGlvX3NldChzdHJ1Y3QgbmdlbmUgKmRldiwgdTggc2VsZWN0LCB1OCBsZXZlbCkKK3sKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfU0VUX0dQSU9fUElOOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IDE7CisJY29tLmNtZC5TZXRHcGlvUGluLnNlbGVjdCA9IHNlbGVjdCB8IChsZXZlbCA8PCA3KTsKKwljb20uaW5fbGVuID0gMTsKKwljb20ub3V0X2xlbiA9IDA7CisKKwlyZXR1cm4gbmdlbmVfY29tbWFuZChkZXYsICZjb20pOworfQorCisKKy8qCisgMDIwMDA2NDAgaXMgc2FtcGxlIG9uIHJpc2luZyBlZGdlLgorIDAyMDAwNzQwIGlzIHNhbXBsZSBvbiBmYWxsaW5nIGVkZ2UuCisgMDIwMDAwNDAgaXMgaWdub3JlICJ2YWxpZCIgc2lnbmFsCisKKyAwOiBGRF9DVEwxIEJpdCA3LDYgbXVzdCBiZSAwLDEKKyAgICA3ICAgZGlzYWJsZShmdyBjb250cm9sbGVkKQorICAgIDYgICAwLUFVWCwxLVRTCisgICAgNSAgIDAtcGFyLDEtc2VyCisgICAgNCAgIDAtbHNiLzEtbXNiCisgICAgMywyIHJlc2VydmVkCisgICAgMSwwIDAtbm8gc3luYywgMS11c2UgZXh0LiBzdGFydCwgMi11c2UgMHg0NywgMy1ib3RoCisgMTogRkRfQ1RMMiBoYXMgMy12YWxpZCBtdXN0IGJlIGhpLCAyLXVzZSB2YWxpZCwgMS1lZGdlCisgMjogRkRfU1RBIGlzIHJlYWQtb25seS4gMC1zeW5jCisgMzogRkRfSU5TWU5DIGlzIG51bWJlciBvZiA0N3MgdG8gdHJpZ2dlciAiaW4gc3luYyIuCisgNDogRkRfT1VUU1lOQyBpcyBudW1iZXIgb2YgNDdzIHRvIHRyaWdnZXIgIm91dCBvZiBzeW5jIi4KKyA1OiBGRF9NQVhCWVRFMSBpcyBsb3ctb3JkZXIgb2YgYnl0ZXMgcGVyIHBhY2tldC4KKyA2OiBGRF9NQVhCWVRFMiBpcyBoaWdoLW9yZGVyIG9mIGJ5dGVzIHBlciBwYWNrZXQuCisgNzogVG9wIGJ5dGUgaXMgdW51c2VkLgorKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1OCBUU0ZlYXR1cmVEZWNvZGVyU2V0dXBbOCAqIDRdID0geworCTB4NDIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMiwgMHhiYywgMHgwMCwgMHgwMCwJLyogRFJYSCAqLworCTB4NzEsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsCS8qIERSWEhzZXIgKi8KKwkweDcyLCAweDA2LCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAkvKiBTMnNlciAqLworfTsKKworLyogU2V0IE5HRU5FIEkyUyBDb25maWcgdG8gMTYgYml0IHBhY2tlZCAqLworc3RhdGljIHU4IEkyU0NvbmZpZ3VyYXRpb25bXSA9IHsKKwkweDAwLCAweDEwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTAsIDB4MDAsIDB4MDAsCit9OworCitzdGF0aWMgdTggU1BESUZDb25maWd1cmF0aW9uWzEwXSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCisvKiBTZXQgTkdFTkUgSTJTIENvbmZpZyB0byB0cmFuc3BvcnQgc3RyZWFtIGNvbXBhdGlibGUgbW9kZSAqLworCitzdGF0aWMgdTggVFNfSTJTQ29uZmlndXJhdGlvbls0XSA9IHsgMHgzRSwgMHgxQSwgMHgwMCwgMHgwMCB9OyAvKjNlIDE4IDAwIDAwID8qLworCitzdGF0aWMgdTggVFNfSTJTT3V0Q29uZmlndXJhdGlvbls0XSA9IHsgMHg4MCwgMHgyMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgdTggSVRVRGVjb2RlclNldHVwWzRdWzE2XSA9IHsKKwl7MHgxYywgMHgxMywgMHgwMSwgMHg2OCwgMHgzZCwgMHg5MCwgMHgxNCwgMHgyMCwgIC8qIFNEVFYgKi8KKwkgMHgwMCwgMHgwMCwgMHgwMSwgMHhiMCwgMHg5YywgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4OWMsIDB4MDMsIDB4MjMsIDB4QzAsIDB4NjAsIDB4MEUsIDB4MTMsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDlmLCAweDAwLCAweDIzLCAweEMwLCAweDYwLCAweDBGLCAweDEzLCAweDAwLCAgLyogSERUViAxMDgwaTUwICovCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDljLCAweDAxLCAweDIzLCAweEMwLCAweDYwLCAweDBFLCAweDEzLCAweDAwLCAgLyogSERUViAxMDgwaTYwICovCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MDAsIDB4MDAsIDB4MDB9LAorfTsKKworLyoKKyAqIDUwIDQ4IDYwIGdsZWljaAorICogMjdwNTAgOWYgMDAgMjIgODAgNDIgNjkgMTggLi4uCisgKiAyN3A2MCA5MyAwMCAyMiA4MCA4MiA2OSAxYyAuLi4KKyAqLworCisvKiBNYXhieXRlIHRvIDExNDQgKGZvciByYXcgZGF0YSkgKi8KK3N0YXRpYyB1OCBJVFVGZWF0dXJlRGVjb2RlclNldHVwWzhdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDQsIDB4MDAKK307CisKK3N0YXRpYyB2b2lkIEZpbGxUU0J1ZmZlcih2b2lkICpCdWZmZXIsIGludCBMZW5ndGgsIHUzMiBGbGFncykKK3sKKwl1MzIgKnB0ciA9IEJ1ZmZlcjsKKworCW1lbXNldChCdWZmZXIsIDB4ZmYsIExlbmd0aCk7CisJd2hpbGUgKExlbmd0aCA+IDApIHsKKwkJaWYgKEZsYWdzICYgREZfU1dBUDMyKQorCQkJKnB0ciA9IDB4NDcxRkZGMTA7CisJCWVsc2UKKwkJCSpwdHIgPSAweDEwRkYxRjQ3OworCQlwdHIgKz0gKDE4OCAvIDQpOworCQlMZW5ndGggLT0gMTg4OworCX0KK30KKworCitzdGF0aWMgdm9pZCBmbHVzaF9idWZmZXJzKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXU4IHZhbDsKKworCWRvIHsKKwkJbXNsZWVwKDEpOworCQlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJdmFsID0gY2hhbi0+bmV4dEJ1ZmZlci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDgwOworCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCX0gd2hpbGUgKHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2J1ZmZlcnMoc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciA9IGNoYW4tPm5leHRCdWZmZXI7CisKKwlkbyB7CisJCW1lbXNldCgmQ3VyLT5uZ2VuZUJ1ZmZlci5TUiwgMCwgc2l6ZW9mKEN1ci0+bmdlbmVCdWZmZXIuU1IpKTsKKwkJaWYgKGNoYW4tPm1vZGUgJiBOR0VORV9JT19UU09VVCkKKwkJCUZpbGxUU0J1ZmZlcihDdXItPkJ1ZmZlcjEsCisJCQkJICAgICBjaGFuLT5DYXB0dXJlMUxlbmd0aCwKKwkJCQkgICAgIGNoYW4tPkRhdGFGb3JtYXRGbGFncyk7CisJCUN1ciA9IEN1ci0+TmV4dDsKKwl9IHdoaWxlIChDdXIgIT0gY2hhbi0+bmV4dEJ1ZmZlcik7CisKKwlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCWNoYW4tPm5leHRCdWZmZXItPm5nZW5lQnVmZmVyLlNSLkRUT1VwZGF0ZSA9CisJCQljaGFuLT5BdWRpb0RUT1ZhbHVlOworCQljaGFuLT5BdWRpb0RUT1VwZGF0ZWQgPSAwOworCisJCUN1ciA9IGNoYW4tPlRTSWRsZUJ1ZmZlci5IZWFkOworCisJCWRvIHsKKwkJCW1lbXNldCgmQ3VyLT5uZ2VuZUJ1ZmZlci5TUiwgMCwKKwkJCSAgICAgICBzaXplb2YoQ3VyLT5uZ2VuZUJ1ZmZlci5TUikpOworCQkJRmlsbFRTQnVmZmVyKEN1ci0+QnVmZmVyMSwKKwkJCQkgICAgIGNoYW4tPkNhcHR1cmUxTGVuZ3RoLAorCQkJCSAgICAgY2hhbi0+RGF0YUZvcm1hdEZsYWdzKTsKKwkJCUN1ciA9IEN1ci0+TmV4dDsKKwkJfSB3aGlsZSAoQ3VyICE9IGNoYW4tPlRTSWRsZUJ1ZmZlci5IZWFkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9zdHJlYW1fY29udHJvbChzdHJ1Y3QgbmdlbmUgKmRldiwgdTggc3RyZWFtLAorCQkJCQl1OCBjb250cm9sLCB1OCBtb2RlLCB1OCBmbGFncykKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9ICZkZXYtPmNoYW5uZWxbc3RyZWFtXTsKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisJdTE2IEJzVVZJID0gKChzdHJlYW0gJiAxKSA/IDB4OTQwMCA6IDB4OTMwMCk7CisJdTE2IEJzU0RJID0gKChzdHJlYW0gJiAxKSA/IDB4OTYwMCA6IDB4OTUwMCk7CisJdTE2IEJzU1BJID0gKChzdHJlYW0gJiAxKSA/IDB4OTgwMCA6IDB4OTcwMCk7CisJdTE2IEJzU0RPID0gMHg5QjAwOworCisJLyogZG93bigmZGV2LT5zdHJlYW1fbXV0ZXgpOyAqLworCXdoaWxlIChkb3duX3RyeWxvY2soJmRldi0+c3RyZWFtX211dGV4KSkgeworCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IFNDIGxvY2tlZFxuIik7CisJCW1zbGVlcCgxKTsKKwl9CisJbWVtc2V0KCZjb20sIDAsIHNpemVvZihjb20pKTsKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfQ09OVFJPTDsKKwljb20uY21kLmhkci5MZW5ndGggPSBzaXplb2Yoc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MKSAtIDI7CisJY29tLmNtZC5TdHJlYW1Db250cm9sLlN0cmVhbSA9IHN0cmVhbSB8IChjb250cm9sID8gOCA6IDApOworCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpCisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0gfD0gMHgwNzsKKwljb20uY21kLlN0cmVhbUNvbnRyb2wuQ29udHJvbCA9IGNvbnRyb2wgfAorCQkoZmxhZ3MgJiBTRkxBR19PUkRFUl9MVU1BX0NIUk9NQSk7CisJY29tLmNtZC5TdHJlYW1Db250cm9sLk1vZGUgPSBtb2RlOworCWNvbS5pbl9sZW4gPSBzaXplb2Yoc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MKTsKKwljb20ub3V0X2xlbiA9IDA7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRQorCQkiOiBTdHJlYW09JTAyeCwgQ29udHJvbD0lMDJ4LCBNb2RlPSUwMnhcbiIsCisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0sIGNvbS5jbWQuU3RyZWFtQ29udHJvbC5Db250cm9sLAorCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTW9kZSk7CisKKwljaGFuLT5Nb2RlID0gbW9kZTsKKworCWlmICghKGNvbnRyb2wgJiAweDgwKSkgeworCQlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJaWYgKGNoYW4tPlN0YXRlID09IEtTU1RBVEVfUlVOKSB7CisJCQljaGFuLT5TdGF0ZSA9IEtTU1RBVEVfQUNRVUlSRTsKKwkJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1NUT1A7CisJCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCQkJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApIHsKKwkJCQl1cCgmZGV2LT5zdHJlYW1fbXV0ZXgpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCS8qIGNsZWFyX2J1ZmZlcnMoY2hhbik7ICovCisJCQlmbHVzaF9idWZmZXJzKGNoYW4pOworCQkJdXAoJmRldi0+c3RyZWFtX211dGV4KTsKKwkJCXJldHVybiAwOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChtb2RlICYgU01PREVfQVVESU9fQ0FQVFVSRSkgeworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQ2FwdHVyZUJsb2NrQ291bnQgPQorCQkJY2hhbi0+Q2FwdHVyZTFMZW5ndGggLyBBVURJT19CTE9DS19TSVpFOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQnVmZmVyX0FkZHJlc3MgPSBjaGFuLT5SaW5nQnVmZmVyLlBBSGVhZDsKKwl9IGVsc2UgaWYgKG1vZGUgJiBTTU9ERV9UUkFOU1BPUlRfU1RSRUFNKSB7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5DYXB0dXJlQmxvY2tDb3VudCA9CisJCQljaGFuLT5DYXB0dXJlMUxlbmd0aCAvIFRTX0JMT0NLX1NJWkU7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NYXhMaW5lc1BlckZpZWxkID0KKwkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoIC8gVFNfQkxPQ0tfU0laRTsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkJ1ZmZlcl9BZGRyZXNzID0KKwkJCWNoYW4tPlRTUmluZ0J1ZmZlci5QQUhlYWQ7CisJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CeXRlc1BlclZCSUxpbmUgPQorCQkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoIC8gVFNfQkxPQ0tfU0laRTsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0gfD0gMHgwNzsKKwkJfQorCX0gZWxzZSB7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CeXRlc1BlclZpZGVvTGluZSA9IGNoYW4tPm5CeXRlc1BlckxpbmU7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NYXhMaW5lc1BlckZpZWxkID0gY2hhbi0+bkxpbmVzOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTWluTGluZXNQZXJGaWVsZCA9IDEwMDsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkJ1ZmZlcl9BZGRyZXNzID0gY2hhbi0+UmluZ0J1ZmZlci5QQUhlYWQ7CisKKwkJaWYgKG1vZGUgJiBTTU9ERV9WQklfQ0FQVFVSRSkgeworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLk1heFZCSUxpbmVzUGVyRmllbGQgPQorCQkJCWNoYW4tPm5WQklMaW5lczsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NaW5WQklMaW5lc1BlckZpZWxkID0gMDsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CeXRlc1BlclZCSUxpbmUgPQorCQkJCWNoYW4tPm5CeXRlc1BlclZCSUxpbmU7CisJCX0KKwkJaWYgKGZsYWdzICYgU0ZMQUdfQ09MT1JCQVIpCisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU3RyZWFtIHw9IDB4MDQ7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJaWYgKG1vZGUgJiBTTU9ERV9BVURJT19DQVBUVVJFKSB7CisJCWNoYW4tPm5leHRCdWZmZXIgPSBjaGFuLT5SaW5nQnVmZmVyLkhlYWQ7CisJCWlmIChtb2RlICYgU01PREVfQVVESU9fU1BESUYpIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPQorCQkJCXNpemVvZihTUERJRkNvbmZpZ3VyYXRpb24pOworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1NQSTsKKwkJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhLAorCQkJICAgICAgIFNQRElGQ29uZmlndXJhdGlvbiwgc2l6ZW9mKFNQRElGQ29uZmlndXJhdGlvbikpOworCQl9IGVsc2UgeworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUxlbiA9IDQ7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhQWRkciA9IEJzU0RJOworCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkgICAgICAgSTJTQ29uZmlndXJhdGlvbiArCisJCQkgICAgICAgNCAqIGRldi0+Y2FyZF9pbmZvLT5pMnNbc3RyZWFtXSwgNCk7CisJCX0KKwl9IGVsc2UgaWYgKG1vZGUgJiBTTU9ERV9UUkFOU1BPUlRfU1RSRUFNKSB7CisJCWNoYW4tPm5leHRCdWZmZXIgPSBjaGFuLT5UU1JpbmdCdWZmZXIuSGVhZDsKKwkJaWYgKHN0cmVhbSA+PSBTVFJFQU1fQVVESU9JTjEpIHsKKwkJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhTGVuID0KKwkJCQkJc2l6ZW9mKFRTX0kyU091dENvbmZpZ3VyYXRpb24pOworCQkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNTRE87CisJCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkJICAgICAgIFRTX0kyU091dENvbmZpZ3VyYXRpb24sCisJCQkJICAgICAgIHNpemVvZihUU19JMlNPdXRDb25maWd1cmF0aW9uKSk7CisJCQl9IGVsc2UgeworCQkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPQorCQkJCQlzaXplb2YoVFNfSTJTQ29uZmlndXJhdGlvbik7CisJCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1NESTsKKwkJCQltZW1jcHkoY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YSwKKwkJCQkgICAgICAgVFNfSTJTQ29uZmlndXJhdGlvbiwKKwkJCQkgICAgICAgc2l6ZW9mKFRTX0kyU0NvbmZpZ3VyYXRpb24pKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPSA4OworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1VWSSArIDB4MTA7CisJCQltZW1jcHkoY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YSwKKwkJCSAgICAgICBUU0ZlYXR1cmVEZWNvZGVyU2V0dXAgKworCQkJICAgICAgIDggKiBkZXYtPmNhcmRfaW5mby0+dHNmW3N0cmVhbV0sIDgpOworCQl9CisJfSBlbHNlIHsKKwkJY2hhbi0+bmV4dEJ1ZmZlciA9IGNoYW4tPlJpbmdCdWZmZXIuSGVhZDsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUxlbiA9CisJCQkxNiArIHNpemVvZihJVFVGZWF0dXJlRGVjb2RlclNldHVwKTsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1VWSTsKKwkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCSAgICAgICBJVFVEZWNvZGVyU2V0dXBbY2hhbi0+aXR1bW9kZV0sIDE2KTsKKwkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEgKyAxNiwKKwkJICAgICAgIElUVUZlYXR1cmVEZWNvZGVyU2V0dXAsIHNpemVvZihJVFVGZWF0dXJlRGVjb2RlclNldHVwKSk7CisJfQorCWNsZWFyX2J1ZmZlcnMoY2hhbik7CisJY2hhbi0+U3RhdGUgPSBLU1NUQVRFX1JVTjsKKwlpZiAobW9kZSAmIFNNT0RFX1RSQU5TUE9SVF9TVFJFQU0pCisJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1JVTjsKKwllbHNlCisJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1NUQVJUVVA7CisJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKSB7CisJCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJCXJldHVybiAtMTsKKwl9CisJdXAoJmRldi0+c3RyZWFtX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEkyQyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG5nZW5lX2kyY19zZXRfYnVzKHN0cnVjdCBuZ2VuZSAqZGV2LCBpbnQgYnVzKQoreworCWlmICghKGRldi0+Y2FyZF9pbmZvLT5pMmNfYWNjZXNzICYgMikpCisJCXJldHVybjsKKwlpZiAoZGV2LT5pMmNfY3VycmVudF9idXMgPT0gYnVzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGJ1cykgeworCWNhc2UgMDoKKwkJbmdlbmVfY29tbWFuZF9ncGlvX3NldChkZXYsIDMsIDApOworCQluZ2VuZV9jb21tYW5kX2dwaW9fc2V0KGRldiwgMiwgMSk7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQluZ2VuZV9jb21tYW5kX2dwaW9fc2V0KGRldiwgMiwgMCk7CisJCW5nZW5lX2NvbW1hbmRfZ3Bpb19zZXQoZGV2LCAzLCAxKTsKKwkJYnJlYWs7CisJfQorCWRldi0+aTJjX2N1cnJlbnRfYnVzID0gYnVzOworfQorCitzdGF0aWMgaW50IG5nZW5lX2kyY19tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0KKwkJKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKworCWRvd24oJmRldi0+aTJjX3N3aXRjaF9tdXRleCk7CisJbmdlbmVfaTJjX3NldF9idXMoZGV2LCBjaGFuLT5udW1iZXIpOworCisJaWYgKG51bSA9PSAyICYmIG1zZ1sxXS5mbGFncyAmIEkyQ19NX1JEICYmICEobXNnWzBdLmZsYWdzICYgSTJDX01fUkQpKQorCQlpZiAoIW5nZW5lX2NvbW1hbmRfaTJjX3JlYWQoZGV2LCBtc2dbMF0uYWRkciwKKwkJCQkJICAgIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4sCisJCQkJCSAgICBtc2dbMV0uYnVmLCBtc2dbMV0ubGVuLCAwKSkKKwkJCWdvdG8gZG9uZTsKKworCWlmIChudW0gPT0gMSAmJiAhKG1zZ1swXS5mbGFncyAmIEkyQ19NX1JEKSkKKwkJaWYgKCFuZ2VuZV9jb21tYW5kX2kyY193cml0ZShkZXYsIG1zZ1swXS5hZGRyLAorCQkJCQkgICAgIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4pKQorCQkJZ290byBkb25lOworCWlmIChudW0gPT0gMSAmJiAobXNnWzBdLmZsYWdzICYgSTJDX01fUkQpKQorCQlpZiAoIW5nZW5lX2NvbW1hbmRfaTJjX3JlYWQoZGV2LCBtc2dbMF0uYWRkciwgMCwgMCwKKwkJCQkJICAgIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4sIDApKQorCQkJZ290byBkb25lOworCisJdXAoJmRldi0+aTJjX3N3aXRjaF9tdXRleCk7CisJcmV0dXJuIC1FSU87CisKK2RvbmU6CisJdXAoJmRldi0+aTJjX3N3aXRjaF9tdXRleCk7CisJcmV0dXJuIG51bTsKK30KKworCitzdGF0aWMgdTMyIG5nZW5lX2kyY19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIG5nZW5lX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IG5nZW5lX2kyY19tYXN0ZXJfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IG5nZW5lX2kyY19mdW5jdGlvbmFsaXR5LAorfTsKKworc3RhdGljIGludCBuZ2VuZV9pMmNfaW5pdChzdHJ1Y3QgbmdlbmUgKmRldiwgaW50IGRldl9ucikKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSAmKGRldi0+Y2hhbm5lbFtkZXZfbnJdLmkyY19hZGFwdGVyKTsKKworCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgJihkZXYtPmNoYW5uZWxbZGV2X25yXSkpOworCWFkYXAtPmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUwgfCBJMkNfQ0xBU1NfVFZfQU5BTE9HOworCisJc3RyY3B5KGFkYXAtPm5hbWUsICJuR2VuZSIpOworCisJYWRhcC0+YWxnbyA9ICZuZ2VuZV9pMmNfYWxnbzsKKwlhZGFwLT5hbGdvX2RhdGEgPSAodm9pZCAqKSYoZGV2LT5jaGFubmVsW2Rldl9ucl0pOworCWFkYXAtPmRldi5wYXJlbnQgPSAmZGV2LT5wY2lfZGV2LT5kZXY7CisKKwlyZXR1cm4gaTJjX2FkZF9hZGFwdGVyKGFkYXApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRFZCIGZ1bmN0aW9ucyBhbmQgQVBJIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc3dhcF9idWZmZXIodTMyICpwLCB1MzIgbGVuKQoreworCXdoaWxlIChsZW4pIHsKKwkJKnAgPSBzd2FiMzIoKnApOworCQlwKys7CisJCWxlbiAtPSA0OworCX0KK30KKworCitzdGF0aWMgdm9pZCAqdHNpbl9leGNoYW5nZSh2b2lkICpwcml2LCB2b2lkICpidWYsIHUzMiBsZW4sIHUzMiBjbG9jaywgdTMyIGZsYWdzKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gcHJpdjsKKworCisjaWZkZWYgQ09NTUFORF9USU1FT1VUX1dPUktBUk9VTkQKKwlpZiAoY2hhbi0+dXNlcnMgPiAwKQorI2VuZGlmCisJCWR2Yl9kbXhfc3dmaWx0ZXIoJmNoYW4tPmRlbXV4LCBidWYsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3U4IGZpbGxfdHNbMTg4XSA9IHsgMHg0NywgMHgxZiwgMHhmZiwgMHgxMCB9OworCitzdGF0aWMgdm9pZCAqdHNvdXRfZXhjaGFuZ2Uodm9pZCAqcHJpdiwgdm9pZCAqYnVmLCB1MzIgbGVuLAorCQkJICAgIHUzMiBjbG9jaywgdTMyIGZsYWdzKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gcHJpdjsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKwl1MzIgYWxlbjsKKworCWFsZW4gPSBkdmJfcmluZ2J1ZmZlcl9hdmFpbCgmZGV2LT50c291dF9yYnVmKTsKKwlhbGVuIC09IGFsZW4gJSAxODg7CisKKwlpZiAoYWxlbiA8IGxlbikKKwkJRmlsbFRTQnVmZmVyKGJ1ZiArIGFsZW4sIGxlbiAtIGFsZW4sIGZsYWdzKTsKKwllbHNlCisJCWFsZW4gPSBsZW47CisJZHZiX3JpbmdidWZmZXJfcmVhZCgmZGV2LT50c291dF9yYnVmLCBidWYsIGFsZW4pOworCWlmIChmbGFncyAmIERGX1NXQVAzMikKKwkJc3dhcF9idWZmZXIoKHUzMiAqKWJ1ZiwgYWxlbik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPnRzb3V0X3JidWYucXVldWUpOworCXJldHVybiBidWY7Cit9CisKKworc3RhdGljIHZvaWQgc2V0X3RyYW5zZmVyKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuLCBpbnQgc3RhdGUpCit7CisJdTggY29udHJvbCA9IDAsIG1vZGUgPSAwLCBmbGFncyA9IDA7CisJc3RydWN0IG5nZW5lICpkZXYgPSBjaGFuLT5kZXY7CisJaW50IHJldDsKKworCS8qCisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBzdCAlZFxuIiwgc3RhdGUpOworCW1zbGVlcCgxMDApOworCSovCisKKwlpZiAoc3RhdGUpIHsKKwkJaWYgKGNoYW4tPnJ1bm5pbmcpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogYWxyZWFkeSBydW5uaW5nXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghY2hhbi0+cnVubmluZykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBhbHJlYWR5IHN0b3BwZWRcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGRldi0+Y2FyZF9pbmZvLT5zd2l0Y2hfY3RybCkKKwkJZGV2LT5jYXJkX2luZm8tPnN3aXRjaF9jdHJsKGNoYW4sIDEsIHN0YXRlIF4gMSk7CisKKwlpZiAoc3RhdGUpIHsKKwkJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisKKwkJLyogcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBsb2NrPSUwOHhcbiIsCisJCQkgIG5ncmVhZGwoMHg5MzEwKSk7ICovCisJCWR2Yl9yaW5nYnVmZmVyX2ZsdXNoKCZkZXYtPnRzb3V0X3JidWYpOworCQljb250cm9sID0gMHg4MDsKKwkJaWYgKGNoYW4tPm1vZGUgJiAoTkdFTkVfSU9fVFNJTiB8IE5HRU5FX0lPX1RTT1VUKSkgeworCQkJY2hhbi0+Q2FwdHVyZTFMZW5ndGggPSA1MTIgKiAxODg7CisJCQltb2RlID0gU01PREVfVFJBTlNQT1JUX1NUUkVBTTsKKwkJfQorCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UgPSB0c291dF9leGNoYW5nZTsKKwkJCS8qIDB4NjY2NjY2NjYgPSA1ME1IeiAqMl4zMyAvMjUwTUh6ICovCisJCQljaGFuLT5BdWRpb0RUT1ZhbHVlID0gMHg2NjY2NjY2NjsKKwkJCS8qIHNldF9kdG8oY2hhbiwgMzg4MTA3MDArMTAwMCk7ICovCisJCQkvKiBzZXRfZHRvKGNoYW4sIDE5MzkyNjU4KTsgKi8KKwkJfQorCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTSU4pCisJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UgPSB0c2luX2V4Y2hhbmdlOworCQkvKiBuZ3dyaXRlbCgwLCAweDkzMTApOyAqLworCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCX0gZWxzZQorCQk7LyogcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBsb2NrPSUwOHhcbiIsCisJCQkgICBuZ3JlYWRsKDB4OTMxMCkpOyAqLworCisJcmV0ID0gbmdlbmVfY29tbWFuZF9zdHJlYW1fY29udHJvbChkZXYsIGNoYW4tPm51bWJlciwKKwkJCQkJICAgY29udHJvbCwgbW9kZSwgZmxhZ3MpOworCWlmICghcmV0KQorCQljaGFuLT5ydW5uaW5nID0gc3RhdGU7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogc2V0X3RyYW5zZmVyICVkIGZhaWxlZFxuIiwKKwkJICAgICAgIHN0YXRlKTsKKwlpZiAoIXN0YXRlKSB7CisJCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UgPSAwOworCQlkdmJfcmluZ2J1ZmZlcl9mbHVzaCgmZGV2LT50c291dF9yYnVmKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCit7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZG14ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4gPSBkdmJkbXgtPnByaXY7CisKKwlpZiAoY2hhbi0+dXNlcnMgPT0gMCkgeworI2lmZGVmIENPTU1BTkRfVElNRU9VVF9XT1JLQVJPVU5ECisJCWlmICghY2hhbi0+cnVubmluZykKKyNlbmRpZgorCQkJc2V0X3RyYW5zZmVyKGNoYW4sIDEpOworCQkvKiBtc2xlZXAoMTApOyAqLworCX0KKworCXJldHVybiArK2NoYW4tPnVzZXJzOworfQorCitzdGF0aWMgaW50IG5nZW5lX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCit7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZG14ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4gPSBkdmJkbXgtPnByaXY7CisKKwlpZiAoLS1jaGFuLT51c2VycykKKwkJcmV0dXJuIGNoYW4tPnVzZXJzOworCisjaWZuZGVmIENPTU1BTkRfVElNRU9VVF9XT1JLQVJPVU5ECisJc2V0X3RyYW5zZmVyKGNoYW4sIDApOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgbXlfZHZiX2RteF90c19jYXJkX2luaXQoc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXgsIGNoYXIgKmlkLAorCQkJCSAgIGludCAoKnN0YXJ0X2ZlZWQpKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqKSwKKwkJCQkgICBpbnQgKCpzdG9wX2ZlZWQpKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqKSwKKwkJCQkgICB2b2lkICpwcml2KQoreworCWR2YmRlbXV4LT5wcml2ID0gcHJpdjsKKworCWR2YmRlbXV4LT5maWx0ZXJudW0gPSAyNTY7CisJZHZiZGVtdXgtPmZlZWRudW0gPSAyNTY7CisJZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBzdGFydF9mZWVkOworCWR2YmRlbXV4LT5zdG9wX2ZlZWQgPSBzdG9wX2ZlZWQ7CisJZHZiZGVtdXgtPndyaXRlX3RvX2RlY29kZXIgPSAwOworCWR2YmRlbXV4LT5kbXguY2FwYWJpbGl0aWVzID0gKERNWF9UU19GSUxURVJJTkcgfAorCQkJCSAgICAgIERNWF9TRUNUSU9OX0ZJTFRFUklORyB8CisJCQkJICAgICAgRE1YX01FTU9SWV9CQVNFRF9GSUxURVJJTkcpOworCXJldHVybiBkdmJfZG14X2luaXQoZHZiZGVtdXgpOworfQorCitzdGF0aWMgaW50IG15X2R2Yl9kbXhkZXZfdHNfY2FyZF9pbml0KHN0cnVjdCBkbXhkZXYgKmRteGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCwKKwkJCQkgICAgICBzdHJ1Y3QgZG14X2Zyb250ZW5kICpod19mcm9udGVuZCwKKwkJCQkgICAgICBzdHJ1Y3QgZG14X2Zyb250ZW5kICptZW1fZnJvbnRlbmQsCisJCQkJICAgICAgc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCisJZG14ZGV2LT5maWx0ZXJudW0gPSAyNTY7CisJZG14ZGV2LT5kZW11eCA9ICZkdmJkZW11eC0+ZG14OworCWRteGRldi0+Y2FwYWJpbGl0aWVzID0gMDsKKwlyZXQgPSBkdmJfZG14ZGV2X2luaXQoZG14ZGV2LCBkdmJfYWRhcHRlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlod19mcm9udGVuZC0+c291cmNlID0gRE1YX0ZST05URU5EXzA7CisJZHZiZGVtdXgtPmRteC5hZGRfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsIGh3X2Zyb250ZW5kKTsKKwltZW1fZnJvbnRlbmQtPnNvdXJjZSA9IERNWF9NRU1PUllfRkU7CisJZHZiZGVtdXgtPmRteC5hZGRfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsIG1lbV9mcm9udGVuZCk7CisJcmV0dXJuIGR2YmRlbXV4LT5kbXguY29ubmVjdF9mcm9udGVuZCgmZHZiZGVtdXgtPmRteCwgaHdfZnJvbnRlbmQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbkdlbmUgaGFyZHdhcmUgaW5pdCBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgZnJlZV9yaW5nYnVmZmVyKHN0cnVjdCBuZ2VuZSAqZGV2LCBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpyYikKK3sKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gcmItPkhlYWQ7CisJdTMyIGo7CisKKwlpZiAoIUN1cikKKwkJcmV0dXJuOworCisJZm9yIChqID0gMDsgaiA8IHJiLT5OdW1CdWZmZXJzOyBqKyssIEN1ciA9IEN1ci0+TmV4dCkgeworCQlpZiAoQ3VyLT5CdWZmZXIxKQorCQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsCisJCQkJCSAgICByYi0+QnVmZmVyMUxlbmd0aCwKKwkJCQkJICAgIEN1ci0+QnVmZmVyMSwKKwkJCQkJICAgIEN1ci0+c2NMaXN0MS0+QWRkcmVzcyk7CisKKwkJaWYgKEN1ci0+QnVmZmVyMikKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCQkgICAgcmItPkJ1ZmZlcjJMZW5ndGgsCisJCQkJCSAgICBDdXItPkJ1ZmZlcjIsCisJCQkJCSAgICBDdXItPnNjTGlzdDItPkFkZHJlc3MpOworCX0KKworCWlmIChyYi0+U0NMaXN0TWVtKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwgcmItPlNDTGlzdE1lbVNpemUsCisJCQkJICAgIHJiLT5TQ0xpc3RNZW0sIHJiLT5QQVNDTGlzdE1lbSk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwgcmItPk1lbVNpemUsIHJiLT5IZWFkLCByYi0+UEFIZWFkKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9pZGxlYnVmZmVyKHN0cnVjdCBuZ2VuZSAqZGV2LAorCQkgICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnJiLAorCQkgICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnRiKQoreworCWludCBqOworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIgPSB0Yi0+SGVhZDsKKworCWlmICghcmItPkhlYWQpCisJCXJldHVybjsKKwlmcmVlX3JpbmdidWZmZXIoZGV2LCByYik7CisJZm9yIChqID0gMDsgaiA8IHRiLT5OdW1CdWZmZXJzOyBqKyssIEN1ciA9IEN1ci0+TmV4dCkgeworCQlDdXItPkJ1ZmZlcjIgPSAwOworCQlDdXItPnNjTGlzdDIgPSAwOworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMiA9IDA7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMiA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2NvbW1vbl9idWZmZXJzKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCXUzMiBpOworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuOworCisJZm9yIChpID0gU1RSRUFNX1ZJREVPSU4xOyBpIDwgTUFYX1NUUkVBTTsgaSsrKSB7CisJCWNoYW4gPSAmZGV2LT5jaGFubmVsW2ldOworCQlmcmVlX2lkbGVidWZmZXIoZGV2LCAmY2hhbi0+VFNJZGxlQnVmZmVyLCAmY2hhbi0+VFNSaW5nQnVmZmVyKTsKKwkJZnJlZV9yaW5nYnVmZmVyKGRldiwgJmNoYW4tPlJpbmdCdWZmZXIpOworCQlmcmVlX3JpbmdidWZmZXIoZGV2LCAmY2hhbi0+VFNSaW5nQnVmZmVyKTsKKwl9CisKKwlpZiAoZGV2LT5PdmVyZmxvd0J1ZmZlcikKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsCisJCQkJICAgIE9WRVJGTE9XX0JVRkZFUl9TSVpFLAorCQkJCSAgICBkZXYtPk92ZXJmbG93QnVmZmVyLCBkZXYtPlBBT3ZlcmZsb3dCdWZmZXIpOworCisJaWYgKGRldi0+RldJbnRlcmZhY2VCdWZmZXIpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCSAgICA0MDk2LAorCQkJCSAgICBkZXYtPkZXSW50ZXJmYWNlQnVmZmVyLAorCQkJCSAgICBkZXYtPlBBRldJbnRlcmZhY2VCdWZmZXIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJpbmcgYnVmZmVyIGhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgY3JlYXRlX3JpbmdfYnVmZmVyKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkgICAgICAgc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciAqZGVzY3IsIHUzMiBOdW1CdWZmZXJzKQoreworCWRtYV9hZGRyX3QgdG1wOworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpIZWFkOworCXUzMiBpOworCXUzMiBNZW1TaXplID0gU0laRU9GX1NCdWZmZXJIZWFkZXIgKiBOdW1CdWZmZXJzOworCXU2NCBQQVJpbmdCdWZmZXJIZWFkOworCXU2NCBQQVJpbmdCdWZmZXJDdXI7CisJdTY0IFBBUmluZ0J1ZmZlck5leHQ7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciwgKk5leHQ7CisKKwlkZXNjci0+SGVhZCA9IDA7CisJZGVzY3ItPk1lbVNpemUgPSAwOworCWRlc2NyLT5QQUhlYWQgPSAwOworCWRlc2NyLT5OdW1CdWZmZXJzID0gMDsKKworCWlmIChNZW1TaXplIDwgNDA5NikKKwkJTWVtU2l6ZSA9IDQwOTY7CisKKwlIZWFkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpX2RldiwgTWVtU2l6ZSwgJnRtcCk7CisJUEFSaW5nQnVmZmVySGVhZCA9IHRtcDsKKworCWlmICghSGVhZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoSGVhZCwgMCwgTWVtU2l6ZSk7CisKKwlQQVJpbmdCdWZmZXJDdXIgPSBQQVJpbmdCdWZmZXJIZWFkOworCUN1ciA9IEhlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTnVtQnVmZmVycyAtIDE7IGkrKykgeworCQlOZXh0ID0gKHN0cnVjdCBTQnVmZmVySGVhZGVyICopCisJCQkoKCh1OCAqKSBDdXIpICsgU0laRU9GX1NCdWZmZXJIZWFkZXIpOworCQlQQVJpbmdCdWZmZXJOZXh0ID0gUEFSaW5nQnVmZmVyQ3VyICsgU0laRU9GX1NCdWZmZXJIZWFkZXI7CisJCUN1ci0+TmV4dCA9IE5leHQ7CisJCUN1ci0+bmdlbmVCdWZmZXIuTmV4dCA9IFBBUmluZ0J1ZmZlck5leHQ7CisJCUN1ciA9IE5leHQ7CisJCVBBUmluZ0J1ZmZlckN1ciA9IFBBUmluZ0J1ZmZlck5leHQ7CisJfQorCS8qIExhc3QgQnVmZmVyIHBvaW50cyBiYWNrIHRvIGZpcnN0IG9uZSAqLworCUN1ci0+TmV4dCA9IEhlYWQ7CisJQ3VyLT5uZ2VuZUJ1ZmZlci5OZXh0ID0gUEFSaW5nQnVmZmVySGVhZDsKKworCWRlc2NyLT5IZWFkICAgICAgID0gSGVhZDsKKwlkZXNjci0+TWVtU2l6ZSAgICA9IE1lbVNpemU7CisJZGVzY3ItPlBBSGVhZCAgICAgPSBQQVJpbmdCdWZmZXJIZWFkOworCWRlc2NyLT5OdW1CdWZmZXJzID0gTnVtQnVmZmVyczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IEFsbG9jYXRlUmluZ0J1ZmZlcnMoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCisJCQkgICAgICAgZG1hX2FkZHJfdCBvZiwKKwkJCSAgICAgICBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpwUmluZ0J1ZmZlciwKKwkJCSAgICAgICB1MzIgQnVmZmVyMUxlbmd0aCwgdTMyIEJ1ZmZlcjJMZW5ndGgpCit7CisJZG1hX2FkZHJfdCB0bXA7CisJdTMyIGksIGo7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIFNDTGlzdE1lbVNpemUgPSBwUmluZ0J1ZmZlci0+TnVtQnVmZmVycworCQkqICgoQnVmZmVyMkxlbmd0aCAhPSAwKSA/IChOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUyAqIDIpIDoKKwkJICAgIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTKQorCQkqIHNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisKKwl1NjQgUEFTQ0xpc3RNZW07CisJc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgKlNDTGlzdEVudHJ5OworCXU2NCBQQVNDTGlzdEVudHJ5OworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXI7CisJdm9pZCAqU0NMaXN0TWVtOworCisJaWYgKFNDTGlzdE1lbVNpemUgPCA0MDk2KQorCQlTQ0xpc3RNZW1TaXplID0gNDA5NjsKKworCVNDTGlzdE1lbSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIFNDTGlzdE1lbVNpemUsICZ0bXApOworCisJUEFTQ0xpc3RNZW0gPSB0bXA7CisJaWYgKFNDTGlzdE1lbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChTQ0xpc3RNZW0sIDAsIFNDTGlzdE1lbVNpemUpOworCisJcFJpbmdCdWZmZXItPlNDTGlzdE1lbSA9IFNDTGlzdE1lbTsKKwlwUmluZ0J1ZmZlci0+UEFTQ0xpc3RNZW0gPSBQQVNDTGlzdE1lbTsKKwlwUmluZ0J1ZmZlci0+U0NMaXN0TWVtU2l6ZSA9IFNDTGlzdE1lbVNpemU7CisJcFJpbmdCdWZmZXItPkJ1ZmZlcjFMZW5ndGggPSBCdWZmZXIxTGVuZ3RoOworCXBSaW5nQnVmZmVyLT5CdWZmZXIyTGVuZ3RoID0gQnVmZmVyMkxlbmd0aDsKKworCVNDTGlzdEVudHJ5ID0gU0NMaXN0TWVtOworCVBBU0NMaXN0RW50cnkgPSBQQVNDTGlzdE1lbTsKKwlDdXIgPSBwUmluZ0J1ZmZlci0+SGVhZDsKKworCWZvciAoaSA9IDA7IGkgPCBwUmluZ0J1ZmZlci0+TnVtQnVmZmVyczsgaSArPSAxLCBDdXIgPSBDdXItPk5leHQpIHsKKwkJdTY0IFBBQnVmZmVyOworCisJCXZvaWQgKkJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIEJ1ZmZlcjFMZW5ndGgsCisJCQkJCQkgICAgJnRtcCk7CisJCVBBQnVmZmVyID0gdG1wOworCisJCWlmIChCdWZmZXIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCUN1ci0+QnVmZmVyMSA9IEJ1ZmZlcjsKKworCQlTQ0xpc3RFbnRyeS0+QWRkcmVzcyA9IFBBQnVmZmVyOworCQlTQ0xpc3RFbnRyeS0+TGVuZ3RoICA9IEJ1ZmZlcjFMZW5ndGg7CisKKwkJQ3VyLT5zY0xpc3QxID0gU0NMaXN0RW50cnk7CisJCUN1ci0+bmdlbmVCdWZmZXIuQWRkcmVzc19vZl9maXJzdF9lbnRyeV8xID0gUEFTQ0xpc3RFbnRyeTsKKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5OdW1iZXJfb2ZfZW50cmllc18xID0KKwkJCU5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTOworCisJCVNDTGlzdEVudHJ5ICs9IDE7CisJCVBBU0NMaXN0RW50cnkgKz0gc2l6ZW9mKHN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UKTsKKworI2lmIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTID4gMQorCQlmb3IgKGogPSAwOyBqIDwgTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVMgLSAxOyBqICs9IDEpIHsKKwkJCVNDTGlzdEVudHJ5LT5BZGRyZXNzID0gb2Y7CisJCQlTQ0xpc3RFbnRyeS0+TGVuZ3RoID0gT1ZFUkZMT1dfQlVGRkVSX1NJWkU7CisJCQlTQ0xpc3RFbnRyeSArPSAxOworCQkJUEFTQ0xpc3RFbnRyeSArPQorCQkJCXNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisJCX0KKyNlbmRpZgorCisJCWlmICghQnVmZmVyMkxlbmd0aCkKKwkJCWNvbnRpbnVlOworCisJCUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIEJ1ZmZlcjJMZW5ndGgsICZ0bXApOworCQlQQUJ1ZmZlciA9IHRtcDsKKworCQlpZiAoQnVmZmVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlDdXItPkJ1ZmZlcjIgPSBCdWZmZXI7CisKKwkJU0NMaXN0RW50cnktPkFkZHJlc3MgPSBQQUJ1ZmZlcjsKKwkJU0NMaXN0RW50cnktPkxlbmd0aCAgPSBCdWZmZXIyTGVuZ3RoOworCisJCUN1ci0+c2NMaXN0MiA9IFNDTGlzdEVudHJ5OworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMiA9IFBBU0NMaXN0RW50cnk7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMiA9CisJCQlOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUzsKKworCQlTQ0xpc3RFbnRyeSAgICs9IDE7CisJCVBBU0NMaXN0RW50cnkgKz0gc2l6ZW9mKHN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UKTsKKworI2lmIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTID4gMQorCQlmb3IgKGogPSAwOyBqIDwgTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVMgLSAxOyBqKyspIHsKKwkJCVNDTGlzdEVudHJ5LT5BZGRyZXNzID0gb2Y7CisJCQlTQ0xpc3RFbnRyeS0+TGVuZ3RoID0gT1ZFUkZMT1dfQlVGRkVSX1NJWkU7CisJCQlTQ0xpc3RFbnRyeSArPSAxOworCQkJUEFTQ0xpc3RFbnRyeSArPQorCQkJCXNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisJCX0KKyNlbmRpZgorCisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBGaWxsVFNJZGxlQnVmZmVyKHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnBJZGxlQnVmZmVyLAorCQkJICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnBSaW5nQnVmZmVyKQoreworCWludCBzdGF0dXMgPSAwOworCisJLyogQ29weSBwb2ludGVyIHRvIHNjYXR0ZXIgZ2F0aGVyIGxpc3QgaW4gVFNSaW5nYnVmZmVyCisJICAgc3RydWN0dXJlIGZvciBidWZmZXIgMgorCSAgIExvYWQgbnVtYmVyIG9mIGJ1ZmZlcgorCSovCisJdTMyIG4gPSBwUmluZ0J1ZmZlci0+TnVtQnVmZmVyczsKKworCS8qIFBvaW50IHRvIGZpcnN0IGJ1ZmZlciBlbnRyeSAqLworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIgPSBwUmluZ0J1ZmZlci0+SGVhZDsKKwlpbnQgaTsKKwkvKiBMb29wIHRocnUgYWxsIGJ1ZmZlciBhbmQgc2V0IEJ1ZmZlciAyIHBvaW50ZXJzIHRvIFRTSWRsZWJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJQ3VyLT5CdWZmZXIyID0gcElkbGVCdWZmZXItPkhlYWQtPkJ1ZmZlcjE7CisJCUN1ci0+c2NMaXN0MiA9IHBJZGxlQnVmZmVyLT5IZWFkLT5zY0xpc3QxOworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMiA9CisJCQlwSWRsZUJ1ZmZlci0+SGVhZC0+bmdlbmVCdWZmZXIuCisJCQlBZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzE7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMiA9CisJCQlwSWRsZUJ1ZmZlci0+SGVhZC0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMTsKKwkJQ3VyID0gQ3VyLT5OZXh0OworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdTMyIFJpbmdCdWZmZXJTaXplc1tNQVhfU1RSRUFNXSA9IHsKKwlSSU5HX1NJWkVfVklERU8sCisJUklOR19TSVpFX1ZJREVPLAorCVJJTkdfU0laRV9BVURJTywKKwlSSU5HX1NJWkVfQVVESU8sCisJUklOR19TSVpFX0FVRElPLAorfTsKKworc3RhdGljIHUzMiBCdWZmZXIxU2l6ZXNbTUFYX1NUUkVBTV0gPSB7CisJTUFYX1ZJREVPX0JVRkZFUl9TSVpFLAorCU1BWF9WSURFT19CVUZGRVJfU0laRSwKKwlNQVhfQVVESU9fQlVGRkVSX1NJWkUsCisJTUFYX0FVRElPX0JVRkZFUl9TSVpFLAorCU1BWF9BVURJT19CVUZGRVJfU0laRQorfTsKKworc3RhdGljIHUzMiBCdWZmZXIyU2l6ZXNbTUFYX1NUUkVBTV0gPSB7CisJTUFYX1ZCSV9CVUZGRVJfU0laRSwKKwlNQVhfVkJJX0JVRkZFUl9TSVpFLAorCTAsCisJMCwKKwkwCit9OworCisKK3N0YXRpYyBpbnQgQWxsb2NDb21tb25CdWZmZXJzKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWludCBzdGF0dXMgPSAwLCBpOworCisJZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpX2RldiwgNDA5NiwKKwkJCQkJCSAgICAgJmRldi0+UEFGV0ludGVyZmFjZUJ1ZmZlcik7CisJaWYgKCFkZXYtPkZXSW50ZXJmYWNlQnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXYtPmhvc3R0b25nZW5lID0gZGV2LT5GV0ludGVyZmFjZUJ1ZmZlcjsKKwlkZXYtPm5nZW5ldG9ob3N0ID0gZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciArIDI1NjsKKwlkZXYtPkV2ZW50QnVmZmVyID0gZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciArIDUxMjsKKworCWRldi0+T3ZlcmZsb3dCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsCisJCQkJCQkgICBPVkVSRkxPV19CVUZGRVJfU0laRSwKKwkJCQkJCSAgICZkZXYtPlBBT3ZlcmZsb3dCdWZmZXIpOworCWlmICghZGV2LT5PdmVyZmxvd0J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGRldi0+T3ZlcmZsb3dCdWZmZXIsIDAsIE9WRVJGTE9XX0JVRkZFUl9TSVpFKTsKKworCWZvciAoaSA9IFNUUkVBTV9WSURFT0lOMTsgaSA8IE1BWF9TVFJFQU07IGkrKykgeworCQlpbnQgdHlwZSA9IGRldi0+Y2FyZF9pbmZvLT5pb190eXBlW2ldOworCisJCWRldi0+Y2hhbm5lbFtpXS5TdGF0ZSA9IEtTU1RBVEVfU1RPUDsKKworCQlpZiAodHlwZSAmIChOR0VORV9JT19UViB8IE5HRU5FX0lPX0hEVFYgfCBOR0VORV9JT19BSU4pKSB7CisJCQlzdGF0dXMgPSBjcmVhdGVfcmluZ19idWZmZXIoZGV2LT5wY2lfZGV2LAorCQkJCQkJICAgICZkZXYtPmNoYW5uZWxbaV0uUmluZ0J1ZmZlciwKKwkJCQkJCSAgICBSaW5nQnVmZmVyU2l6ZXNbaV0pOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisKKwkJCWlmICh0eXBlICYgKE5HRU5FX0lPX1RWIHwgTkdFTkVfSU9fQUlOKSkgeworCQkJCXN0YXR1cyA9IEFsbG9jYXRlUmluZ0J1ZmZlcnMoZGV2LT5wY2lfZGV2LAorCQkJCQkJCSAgICAgZGV2LT4KKwkJCQkJCQkgICAgIFBBT3ZlcmZsb3dCdWZmZXIsCisJCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJCSAgICAgUmluZ0J1ZmZlciwKKwkJCQkJCQkgICAgIEJ1ZmZlcjFTaXplc1tpXSwKKwkJCQkJCQkgICAgIEJ1ZmZlcjJTaXplc1tpXSk7CisJCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmICh0eXBlICYgTkdFTkVfSU9fSERUVikgeworCQkJCXN0YXR1cyA9IEFsbG9jYXRlUmluZ0J1ZmZlcnMoZGV2LT5wY2lfZGV2LAorCQkJCQkJCSAgICAgZGV2LT4KKwkJCQkJCQkgICAgIFBBT3ZlcmZsb3dCdWZmZXIsCisJCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJCSAgICAgUmluZ0J1ZmZlciwKKwkJCQkJCQkgICBNQVhfSERUVl9CVUZGRVJfU0laRSwKKwkJCQkJCQkgICAgIDApOworCQkJCWlmIChzdGF0dXMgPCAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICh0eXBlICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKworCQkJc3RhdHVzID0gY3JlYXRlX3JpbmdfYnVmZmVyKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgIFRTUmluZ0J1ZmZlciwgUklOR19TSVpFX1RTKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCisJCQlzdGF0dXMgPSBBbGxvY2F0ZVJpbmdCdWZmZXJzKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAgZGV2LT5QQU92ZXJmbG93QnVmZmVyLAorCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgICBUU1JpbmdCdWZmZXIsCisJCQkJCQkgICAgIE1BWF9UU19CVUZGRVJfU0laRSwgMCk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHR5cGUgJiBOR0VORV9JT19UU09VVCkgeworCQkJc3RhdHVzID0gY3JlYXRlX3JpbmdfYnVmZmVyKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgIFRTSWRsZUJ1ZmZlciwgMSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJCXN0YXR1cyA9IEFsbG9jYXRlUmluZ0J1ZmZlcnMoZGV2LT5wY2lfZGV2LAorCQkJCQkJICAgICBkZXYtPlBBT3ZlcmZsb3dCdWZmZXIsCisJCQkJCQkgICAgICZkZXYtPmNoYW5uZWxbaV0uCisJCQkJCQkgICAgIFRTSWRsZUJ1ZmZlciwKKwkJCQkJCSAgICAgTUFYX1RTX0JVRkZFUl9TSVpFLCAwKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisJCQlGaWxsVFNJZGxlQnVmZmVyKCZkZXYtPmNoYW5uZWxbaV0uVFNJZGxlQnVmZmVyLAorCQkJCQkgJmRldi0+Y2hhbm5lbFtpXS5UU1JpbmdCdWZmZXIpOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIG5nZW5lX3JlbGVhc2VfYnVmZmVycyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpZiAoZGV2LT5pb21lbSkKKwkJaW91bm1hcChkZXYtPmlvbWVtKTsKKwlmcmVlX2NvbW1vbl9idWZmZXJzKGRldik7CisJdmZyZWUoZGV2LT50c291dF9idWYpOworCXZmcmVlKGRldi0+YWluX2J1Zik7CisJdmZyZWUoZGV2LT52aW5fYnVmKTsKKwl2ZnJlZShkZXYpOworfQorCitzdGF0aWMgaW50IG5nZW5lX2dldF9idWZmZXJzKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWlmIChBbGxvY0NvbW1vbkJ1ZmZlcnMoZGV2KSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzRdICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJZGV2LT50c291dF9idWYgPSB2bWFsbG9jKFRTT1VUX0JVRl9TSVpFKTsKKwkJaWYgKCFkZXYtPnRzb3V0X2J1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCQlkdmJfcmluZ2J1ZmZlcl9pbml0KCZkZXYtPnRzb3V0X3JidWYsCisJCQkJICAgIGRldi0+dHNvdXRfYnVmLCBUU09VVF9CVUZfU0laRSk7CisJfQorCWlmIChkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVsyXSAmIE5HRU5FX0lPX0FJTikgeworCQlkZXYtPmFpbl9idWYgPSB2bWFsbG9jKEFJTl9CVUZfU0laRSk7CisJCWlmICghZGV2LT5haW5fYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRldi0+YWluX3JidWYsIGRldi0+YWluX2J1ZiwgQUlOX0JVRl9TSVpFKTsKKwl9CisJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzBdICYgTkdFTkVfSU9fSERUVikgeworCQlkZXYtPnZpbl9idWYgPSB2bWFsbG9jKFZJTl9CVUZfU0laRSk7CisJCWlmICghZGV2LT52aW5fYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRldi0+dmluX3JidWYsIGRldi0+dmluX2J1ZiwgVklOX0JVRl9TSVpFKTsKKwl9CisJZGV2LT5pb21lbSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpX2RldiwgMCksCisJCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2lfZGV2LCAwKSk7CisJaWYgKCFkZXYtPmlvbWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuZ2VuZV9pbml0KHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWludCBpOworCisJdGFza2xldF9pbml0KCZkZXYtPmV2ZW50X3Rhc2tsZXQsIGV2ZW50X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWRldik7CisKKwltZW1zZXRfaW8oZGV2LT5pb21lbSArIDB4YzAwMCwgMHgwMCwgMHgyMjApOworCW1lbXNldF9pbyhkZXYtPmlvbWVtICsgMHhjNDAwLCAweDAwLCAweDEwMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NUUkVBTTsgaSsrKSB7CisJCWRldi0+Y2hhbm5lbFtpXS5kZXYgPSBkZXY7CisJCWRldi0+Y2hhbm5lbFtpXS5udW1iZXIgPSBpOworCX0KKworCWRldi0+ZndfaW50ZXJmYWNlX3ZlcnNpb24gPSAwOworCisJbmd3cml0ZWwoMCwgTkdFTkVfSU5UX0VOQUJMRSk7CisKKwlkZXYtPmljb3VudHMgPSBuZ3JlYWRsKE5HRU5FX0lOVF9DT1VOVFMpOworCisJZGV2LT5kZXZpY2VfdmVyc2lvbiA9IG5ncmVhZGwoREVWX1ZFUikgJiAweDBmOworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogRGV2aWNlIHZlcnNpb24gJWRcbiIsCisJICAgICAgIGRldi0+ZGV2aWNlX3ZlcnNpb24pOworfQorCitzdGF0aWMgaW50IG5nZW5lX2xvYWRfZmlybShzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwl1MzIgc2l6ZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKKwl1OCAqbmdlbmVfZnc7CisJY2hhciAqZndfbmFtZTsKKwlpbnQgZXJyLCB2ZXJzaW9uOworCisJdmVyc2lvbiA9IGRldi0+Y2FyZF9pbmZvLT5md192ZXJzaW9uOworCisJc3dpdGNoICh2ZXJzaW9uKSB7CisJZGVmYXVsdDoKKwljYXNlIDE1OgorCQl2ZXJzaW9uID0gMTU7CisJCXNpemUgPSAyMzQ2NjsKKwkJZndfbmFtZSA9ICJuZ2VuZV8xNS5mdyI7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXNpemUgPSAyMzQ5ODsKKwkJZndfbmFtZSA9ICJuZ2VuZV8xNi5mdyI7CisJCWJyZWFrOworCWNhc2UgMTc6CisJCXNpemUgPSAyNDQ0NjsKKwkJZndfbmFtZSA9ICJuZ2VuZV8xNy5mdyI7CisJCWJyZWFrOworCX0KKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJmRldi0+cGNpX2Rldi0+ZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FCisJCQkiOiBDb3VsZCBub3QgbG9hZCBmaXJtd2FyZSBmaWxlICVzLlxuIiwgZndfbmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUKKwkJCSI6IENvcHkgJXMgdG8geW91ciBob3RwbHVnIGRpcmVjdG9yeSFcbiIsIGZ3X25hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzaXplICE9IGZ3LT5zaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkJIjogRmlybXdhcmUgJXMgaGFzIGludmFsaWQgc2l6ZSEiLCBmd19uYW1lKTsKKwkJZXJyID0gLTE7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRQorCQkJIjogTG9hZGluZyBmaXJtd2FyZSBmaWxlICVzLlxuIiwgZndfbmFtZSk7CisJCW5nZW5lX2Z3ID0gKHU4ICopIGZ3LT5kYXRhOworCQllcnIgPSBuZ2VuZV9jb21tYW5kX2xvYWRfZmlybXdhcmUoZGV2LCBuZ2VuZV9mdywgc2l6ZSk7CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBuZ2VuZV9zdG9wKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWRvd24oJmRldi0+Y21kX211dGV4KTsKKwlpMmNfZGVsX2FkYXB0ZXIoJihkZXYtPmNoYW5uZWxbMF0uaTJjX2FkYXB0ZXIpKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJihkZXYtPmNoYW5uZWxbMV0uaTJjX2FkYXB0ZXIpKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9JTlRfRU5BQkxFKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EX0hJKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9TVEFUVVMpOworCW5nd3JpdGVsKDAsIE5HRU5FX1NUQVRVU19ISSk7CisJbmd3cml0ZWwoMCwgTkdFTkVfRVZFTlQpOworCW5nd3JpdGVsKDAsIE5HRU5FX0VWRU5UX0hJKTsKKwlmcmVlX2lycShkZXYtPnBjaV9kZXYtPmlycSwgZGV2KTsKK30KKworc3RhdGljIGludCBuZ2VuZV9zdGFydChzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgc3RhdDsKKwlpbnQgaTsKKworCXBjaV9zZXRfbWFzdGVyKGRldi0+cGNpX2Rldik7CisJbmdlbmVfaW5pdChkZXYpOworCisJc3RhdCA9IHJlcXVlc3RfaXJxKGRldi0+cGNpX2Rldi0+aXJxLCBpcnFfaGFuZGxlciwKKwkJCSAgIElSUUZfU0hBUkVELCAibkdlbmUiLAorCQkJICAgKHZvaWQgKilkZXYpOworCWlmIChzdGF0IDwgMCkKKwkJcmV0dXJuIHN0YXQ7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPmNtZF93cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT50eF93cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5yeF93cSk7CisJc2VtYV9pbml0KCZkZXYtPmNtZF9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZkZXYtPnN0cmVhbV9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZkZXYtPnBsbF9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZkZXYtPmkyY19zd2l0Y2hfbXV0ZXgsIDEpOworCXNwaW5fbG9ja19pbml0KCZkZXYtPmNtZF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NUUkVBTTsgaSsrKQorCQlzcGluX2xvY2tfaW5pdCgmZGV2LT5jaGFubmVsW2ldLnN0YXRlX2xvY2spOworCW5nd3JpdGVsKDEsIFRJTUVTVEFNUFMpOworCisJbmd3cml0ZWwoMSwgTkdFTkVfSU5UX0VOQUJMRSk7CisKKwlzdGF0ID0gbmdlbmVfbG9hZF9maXJtKGRldik7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ID0gbmdlbmVfaTJjX2luaXQoZGV2LCAwKTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDsKKworCXN0YXQgPSBuZ2VuZV9pMmNfaW5pdChkZXYsIDEpOworCWlmIChzdGF0IDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKGRldi0+Y2FyZF9pbmZvLT5md192ZXJzaW9uID09IDE3KSB7CisJCXU4IHRzaW40X2NvbmZpZ1s2XSA9IHsKKwkJCTMwNzIgLyA2NCwgMzA3MiAvIDY0LCAwLCAzMDcyIC8gNjQsIDMwNzIgLyA2NCwgMH07CisJCXU4IGRlZmF1bHRfY29uZmlnWzZdID0geworCQkJNDA5NiAvIDY0LCA0MDk2IC8gNjQsIDAsIDIwNDggLyA2NCwgMjA0OCAvIDY0LCAwfTsKKwkJdTggKmJjb25mID0gZGVmYXVsdF9jb25maWc7CisKKwkJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzNdID09IE5HRU5FX0lPX1RTSU4pCisJCQliY29uZiA9IHRzaW40X2NvbmZpZzsKKwkJZHByaW50ayhLRVJOX0RFQlVHIERFVklDRV9OQU1FICI6IEZXIDE3IGJ1ZmZlciBjb25maWdcbiIpOworCQlzdGF0ID0gbmdlbmVfY29tbWFuZF9jb25maWdfZnJlZV9idWYoZGV2LCBiY29uZik7CisJfSBlbHNlIHsKKwkJaW50IGJjb25mID0gQlVGRkVSX0NPTkZJR180NDIyOworCQlpZiAoZGV2LT5jYXJkX2luZm8tPmlvX3R5cGVbM10gPT0gTkdFTkVfSU9fVFNJTikKKwkJCWJjb25mID0gQlVGRkVSX0NPTkZJR18zMzMzOworCQlzdGF0ID0gbmdlbmVfY29tbWFuZF9jb25maWdfYnVmKGRldiwgYmNvbmYpOworCX0KKwlyZXR1cm4gc3RhdDsKK2ZhaWw6CisJbmd3cml0ZWwoMCwgTkdFTkVfSU5UX0VOQUJMRSk7CisJZnJlZV9pcnEoZGV2LT5wY2lfZGV2LT5pcnEsIGRldik7CisJcmV0dXJuIHN0YXQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFN3aXRjaCBjb250cm9sIChJMkMgZ2F0ZXMsIGV0Yy4pICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZW1vZC90dW5lciBhdHRhY2htZW50ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHR1bmVyX2F0dGFjaF9zdHY2MTEwKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBzdHYwOTB4X2NvbmZpZyAqZmVjb25mID0gKHN0cnVjdCBzdHYwOTB4X2NvbmZpZyAqKQorCQljaGFuLT5kZXYtPmNhcmRfaW5mby0+ZmVfY29uZmlnW2NoYW4tPm51bWJlcl07CisJc3RydWN0IHN0djYxMTB4X2NvbmZpZyAqdHVuZXJjb25mID0gKHN0cnVjdCBzdHY2MTEweF9jb25maWcgKikKKwkJY2hhbi0+ZGV2LT5jYXJkX2luZm8tPnR1bmVyX2NvbmZpZ1tjaGFuLT5udW1iZXJdOworCXN0cnVjdCBzdHY2MTEweF9kZXZjdGwgKmN0bDsKKworCWN0bCA9IGR2Yl9hdHRhY2goc3R2NjExMHhfYXR0YWNoLCBjaGFuLT5mZSwgdHVuZXJjb25mLAorCQkJICZjaGFuLT5pMmNfYWRhcHRlcik7CisJaWYgKGN0bCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUglERVZJQ0VfTkFNRSAiOiBObyBTVFY2MTEwWCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlmZWNvbmYtPnR1bmVyX2luaXQgICAgICAgICAgPSBjdGwtPnR1bmVyX2luaXQ7CisJZmVjb25mLT50dW5lcl9zZXRfbW9kZSAgICAgID0gY3RsLT50dW5lcl9zZXRfbW9kZTsKKwlmZWNvbmYtPnR1bmVyX3NldF9mcmVxdWVuY3kgPSBjdGwtPnR1bmVyX3NldF9mcmVxdWVuY3k7CisJZmVjb25mLT50dW5lcl9nZXRfZnJlcXVlbmN5ID0gY3RsLT50dW5lcl9nZXRfZnJlcXVlbmN5OworCWZlY29uZi0+dHVuZXJfc2V0X2JhbmR3aWR0aCA9IGN0bC0+dHVuZXJfc2V0X2JhbmR3aWR0aDsKKwlmZWNvbmYtPnR1bmVyX2dldF9iYW5kd2lkdGggPSBjdGwtPnR1bmVyX2dldF9iYW5kd2lkdGg7CisJZmVjb25mLT50dW5lcl9zZXRfYmJnYWluICAgID0gY3RsLT50dW5lcl9zZXRfYmJnYWluOworCWZlY29uZi0+dHVuZXJfZ2V0X2JiZ2FpbiAgICA9IGN0bC0+dHVuZXJfZ2V0X2JiZ2FpbjsKKwlmZWNvbmYtPnR1bmVyX3NldF9yZWZjbGsgICAgPSBjdGwtPnR1bmVyX3NldF9yZWZjbGs7CisJZmVjb25mLT50dW5lcl9nZXRfc3RhdHVzICAgID0gY3RsLT50dW5lcl9nZXRfc3RhdHVzOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBkZW1vZF9hdHRhY2hfc3R2MDkwMChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKmZlY29uZiA9IChzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKikKKwkJY2hhbi0+ZGV2LT5jYXJkX2luZm8tPmZlX2NvbmZpZ1tjaGFuLT5udW1iZXJdOworCisJY2hhbi0+ZmUgPSBkdmJfYXR0YWNoKHN0djA5MHhfYXR0YWNoLAorCQkJZmVjb25mLAorCQkJJmNoYW4tPmkyY19hZGFwdGVyLAorCQkJY2hhbi0+bnVtYmVyID09IDAgPyBTVFYwOTB4X0RFTU9EVUxBVE9SXzAgOgorCQkJCQkgICAgU1RWMDkweF9ERU1PRFVMQVRPUl8xKTsKKwlpZiAoY2hhbi0+ZmUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIJREVWSUNFX05BTUUgIjogTm8gU1RWMDkwMCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIWR2Yl9hdHRhY2gobG5iaDI0X2F0dGFjaCwgY2hhbi0+ZmUsICZjaGFuLT5pMmNfYWRhcHRlciwgMCwKKwkJCTAsIGNoYW4tPmRldi0+Y2FyZF9pbmZvLT5sbmJbY2hhbi0+bnVtYmVyXSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IE5vIExOQkgyNCBmb3VuZCFcbiIpOworCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGNoYW4tPmZlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgcmVsZWFzZV9jaGFubmVsKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4ID0gJmNoYW4tPmRlbXV4OworCXN0cnVjdCBuZ2VuZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBuZ2VuZV9pbmZvICpuaSA9IGRldi0+Y2FyZF9pbmZvOworCWludCBpbyA9IG5pLT5pb190eXBlW2NoYW4tPm51bWJlcl07CisKKyNpZmRlZiBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCWlmIChjaGFuLT5ydW5uaW5nKQorCQlzZXRfdHJhbnNmZXIoY2hhbiwgMCk7CisjZW5kaWYKKworCXRhc2tsZXRfa2lsbCgmY2hhbi0+ZGVtdXhfdGFza2xldCk7CisKKwlpZiAoaW8gJiAoTkdFTkVfSU9fVFNJTiB8IE5HRU5FX0lPX1RTT1VUKSkgeworCQlpZiAoY2hhbi0+ZmUpIHsKKwkJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGNoYW4tPmZlKTsKKwkJCWR2Yl9mcm9udGVuZF9kZXRhY2goY2hhbi0+ZmUpOworCQkJY2hhbi0+ZmUgPSAwOworCQl9CisJCWR2YmRlbXV4LT5kbXguY2xvc2UoJmR2YmRlbXV4LT5kbXgpOworCQlkdmJkZW11eC0+ZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiZGVtdXgtPmRteCwKKwkJCQkJICAgICAgJmNoYW4tPmh3X2Zyb250ZW5kKTsKKwkJZHZiZGVtdXgtPmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsCisJCQkJCSAgICAgICZjaGFuLT5tZW1fZnJvbnRlbmQpOworCQlkdmJfZG14ZGV2X3JlbGVhc2UoJmNoYW4tPmRteGRldik7CisJCWR2Yl9kbXhfcmVsZWFzZSgmY2hhbi0+ZGVtdXgpOworCisJCWlmIChjaGFuLT5udW1iZXIgPT0gMCB8fCAhb25lX2FkYXB0ZXIpCisJCQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkZXYtPmFkYXB0ZXJbY2hhbi0+bnVtYmVyXSk7CisJfQorfQorCitzdGF0aWMgaW50IGluaXRfY2hhbm5lbChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlpbnQgcmV0ID0gMCwgbnIgPSBjaGFuLT5udW1iZXI7CisJc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9ICZjaGFuLT5kZW11eDsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgbmdlbmVfaW5mbyAqbmkgPSBkZXYtPmNhcmRfaW5mbzsKKwlpbnQgaW8gPSBuaS0+aW9fdHlwZVtucl07CisKKwl0YXNrbGV0X2luaXQoJmNoYW4tPmRlbXV4X3Rhc2tsZXQsIGRlbXV4X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWNoYW4pOworCWNoYW4tPnVzZXJzID0gMDsKKwljaGFuLT50eXBlID0gaW87CisJY2hhbi0+bW9kZSA9IGNoYW4tPnR5cGU7CS8qIGZvciBub3cgb25seSBvbmUgbW9kZSAqLworCisJaWYgKGlvICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKwkJaWYgKG5yID49IFNUUkVBTV9BVURJT0lOMSkKKwkJCWNoYW4tPkRhdGFGb3JtYXRGbGFncyA9IERGX1NXQVAzMjsKKwkJaWYgKG5yID09IDAgfHwgIW9uZV9hZGFwdGVyKSB7CisJCQlhZGFwdGVyID0gJmRldi0+YWRhcHRlcltucl07CisJCQlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcihhZGFwdGVyLCAibkdlbmUiLAorCQkJCQkJICAgVEhJU19NT0RVTEUsCisJCQkJCQkgICAmY2hhbi0+ZGV2LT5wY2lfZGV2LT5kZXYsCisJCQkJCQkgICBhZGFwdGVyX25yKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyID0gJmRldi0+YWRhcHRlclswXTsKKwkJfQorCisJCXJldCA9IG15X2R2Yl9kbXhfdHNfY2FyZF9pbml0KGR2YmRlbXV4LCAiU1cgZGVtdXgiLAorCQkJCQkgICAgICBuZ2VuZV9zdGFydF9mZWVkLAorCQkJCQkgICAgICBuZ2VuZV9zdG9wX2ZlZWQsIGNoYW4pOworCQlyZXQgPSBteV9kdmJfZG14ZGV2X3RzX2NhcmRfaW5pdCgmY2hhbi0+ZG14ZGV2LCAmY2hhbi0+ZGVtdXgsCisJCQkJCQkgJmNoYW4tPmh3X2Zyb250ZW5kLAorCQkJCQkJICZjaGFuLT5tZW1fZnJvbnRlbmQsIGFkYXB0ZXIpOworCX0KKworCWlmIChpbyAmIE5HRU5FX0lPX1RTSU4pIHsKKwkJY2hhbi0+ZmUgPSBOVUxMOworCQlpZiAobmktPmRlbW9kX2F0dGFjaFtucl0pCisJCQluaS0+ZGVtb2RfYXR0YWNoW25yXShjaGFuKTsKKwkJaWYgKGNoYW4tPmZlKSB7CisJCQlpZiAoZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKGFkYXB0ZXIsIGNoYW4tPmZlKSA8IDApIHsKKwkJCQlpZiAoY2hhbi0+ZmUtPm9wcy5yZWxlYXNlKQorCQkJCQljaGFuLT5mZS0+b3BzLnJlbGVhc2UoY2hhbi0+ZmUpOworCQkJCWNoYW4tPmZlID0gTlVMTDsKKwkJCX0KKwkJfQorCQlpZiAoY2hhbi0+ZmUgJiYgbmktPnR1bmVyX2F0dGFjaFtucl0pCisJCQlpZiAobmktPnR1bmVyX2F0dGFjaFtucl0gKGNoYW4pIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkJCSAgICAgICAiOiBUdW5lciBhdHRhY2ggZmFpbGVkIG9uIGNoYW5uZWwgJWQhXG4iLAorCQkJCSAgICAgICBucik7CisJCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jaGFubmVscyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfU1RSRUFNOyBpKyspIHsKKwkJaWYgKGluaXRfY2hhbm5lbCgmZGV2LT5jaGFubmVsW2ldKSA8IDApIHsKKwkJCWZvciAoaiA9IGkgLSAxOyBqID49IDA7IGotLSkKKwkJCQlyZWxlYXNlX2NoYW5uZWwoJmRldi0+Y2hhbm5lbFtqXSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZGV2aWNlIHByb2JlL3JlbW92ZSBjYWxscyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG5nZW5lX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IChzdHJ1Y3QgbmdlbmUgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwl0YXNrbGV0X2tpbGwoJmRldi0+ZXZlbnRfdGFza2xldCk7CisJZm9yIChpID0gTUFYX1NUUkVBTSAtIDE7IGkgPj0gMDsgaS0tKQorCQlyZWxlYXNlX2NoYW5uZWwoJmRldi0+Y2hhbm5lbFtpXSk7CisJbmdlbmVfc3RvcChkZXYpOworCW5nZW5lX3JlbGVhc2VfYnVmZmVycyhkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG5nZW5lX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG5nZW5lICpkZXY7CisJaW50IHN0YXQgPSAwOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgbmdlbmUpKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJc3RhdCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDA7CisJfQorCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgbmdlbmUpKTsKKworCWRldi0+cGNpX2RldiA9IHBjaV9kZXY7CisJZGV2LT5jYXJkX2luZm8gPSAoc3RydWN0IG5nZW5lX2luZm8gKilpZC0+ZHJpdmVyX2RhdGE7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBGb3VuZCAlc1xuIiwgZGV2LT5jYXJkX2luZm8tPm5hbWUpOworCisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIGRldik7CisKKwkvKiBBbGxvYyBidWZmZXJzIGFuZCBzdGFydCBuR2VuZSAqLworCXN0YXQgPSBuZ2VuZV9nZXRfYnVmZmVycyhkZXYpOworCWlmIChzdGF0IDwgMCkKKwkJZ290byBmYWlsMTsKKwlzdGF0ID0gbmdlbmVfc3RhcnQoZGV2KTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDE7CisKKwlkZXYtPmkyY19jdXJyZW50X2J1cyA9IC0xOworCisJLyogUmVnaXN0ZXIgRFZCIGFkYXB0ZXJzIGFuZCBkZXZpY2VzIGZvciBib3RoIGNoYW5uZWxzICovCisJaWYgKGluaXRfY2hhbm5lbHMoZGV2KSA8IDApCisJCWdvdG8gZmFpbDI7CisKKwlyZXR1cm4gMDsKKworZmFpbDI6CisJbmdlbmVfc3RvcChkZXYpOworZmFpbDE6CisJbmdlbmVfcmVsZWFzZV9idWZmZXJzKGRldik7CitmYWlsMDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIDApOworCXJldHVybiBzdGF0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENhcmQgY29uZmlncyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkweF9jb25maWcgZmVfY2luZVMyID0geworCS5kZXZpY2UgICAgICAgICA9IFNUVjA5MDAsCisJLmRlbW9kX21vZGUgICAgID0gU1RWMDkweF9EVUFMLAorCS5jbGtfbW9kZSAgICAgICA9IFNUVjA5MHhfQ0xLX0VYVCwKKworCS54dGFsICAgICAgICAgICA9IDI3MDAwMDAwLAorCS5hZGRyZXNzICAgICAgICA9IDB4NjgsCisKKwkudHMxX21vZGUgICAgICAgPSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfUFVOQ1RVUkVELAorCS50czJfbW9kZSAgICAgICA9IFNUVjA5MHhfVFNNT0RFX1NFUklBTF9QVU5DVFVSRUQsCisKKwkucmVwZWF0ZXJfbGV2ZWwgPSBTVFYwOTB4X1JQVExFVkVMXzE2LAorCisJLmFkYzFfcmFuZ2UJPSBTVFYwOTB4X0FEQ18xVnBwLAorCS5hZGMyX3JhbmdlCT0gU1RWMDkweF9BRENfMVZwcCwKKworCS5kaXNlcWNfZW52ZWxvcGVfbW9kZSA9IHRydWUsCit9OworCitzdGF0aWMgc3RydWN0IHN0djYxMTB4X2NvbmZpZyB0dW5lcl9jaW5lUzJfMCA9IHsKKwkuYWRkcgk9IDB4NjAsCisJLnJlZmNsawk9IDI3MDAwMDAwLAorCS5jbGtfZGl2ID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3R2NjExMHhfY29uZmlnIHR1bmVyX2NpbmVTMl8xID0geworCS5hZGRyCT0gMHg2MywKKwkucmVmY2xrCT0gMjcwMDAwMDAsCisJLmNsa19kaXYgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBuZ2VuZV9pbmZvIG5nZW5lX2luZm9fY2luZVMyID0geworCS50eXBlCQk9IE5HRU5FX1NJREVXSU5ERVIsCisJLm5hbWUJCT0gIkxpbnV4NE1lZGlhIGNpbmVTMiBEVkItUzIgVHdpbiBUdW5lciIsCisJLmlvX3R5cGUJPSB7TkdFTkVfSU9fVFNJTiwgTkdFTkVfSU9fVFNJTn0sCisJLmRlbW9kX2F0dGFjaAk9IHtkZW1vZF9hdHRhY2hfc3R2MDkwMCwgZGVtb2RfYXR0YWNoX3N0djA5MDB9LAorCS50dW5lcl9hdHRhY2gJPSB7dHVuZXJfYXR0YWNoX3N0djYxMTAsIHR1bmVyX2F0dGFjaF9zdHY2MTEwfSwKKwkuZmVfY29uZmlnCT0geyZmZV9jaW5lUzIsICZmZV9jaW5lUzJ9LAorCS50dW5lcl9jb25maWcJPSB7JnR1bmVyX2NpbmVTMl8wLCAmdHVuZXJfY2luZVMyXzF9LAorCS5sbmIJCT0gezB4MGIsIDB4MDh9LAorCS50c2YJCT0gezMsIDN9LAorCS5md192ZXJzaW9uCT0gMTUsCit9OworCitzdGF0aWMgc3RydWN0IG5nZW5lX2luZm8gbmdlbmVfaW5mb19zYXRpeHMyID0geworCS50eXBlCQk9IE5HRU5FX1NJREVXSU5ERVIsCisJLm5hbWUJCT0gIk15c3RpcXVlIFNhVGlYLVMyIER1YWwiLAorCS5pb190eXBlCT0ge05HRU5FX0lPX1RTSU4sIE5HRU5FX0lPX1RTSU59LAorCS5kZW1vZF9hdHRhY2gJPSB7ZGVtb2RfYXR0YWNoX3N0djA5MDAsIGRlbW9kX2F0dGFjaF9zdHYwOTAwfSwKKwkudHVuZXJfYXR0YWNoCT0ge3R1bmVyX2F0dGFjaF9zdHY2MTEwLCB0dW5lcl9hdHRhY2hfc3R2NjExMH0sCisJLmZlX2NvbmZpZwk9IHsmZmVfY2luZVMyLCAmZmVfY2luZVMyfSwKKwkudHVuZXJfY29uZmlnCT0geyZ0dW5lcl9jaW5lUzJfMCwgJnR1bmVyX2NpbmVTMl8xfSwKKwkubG5iCQk9IHsweDBiLCAweDA4fSwKKwkudHNmCQk9IHszLCAzfSwKKwkuZndfdmVyc2lvbgk9IDE1LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBDSSBTdWJzeXN0ZW0gSUQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTkdFTkVfSUQoX3N1YnZlbmQsIF9zdWJkZXYsIF9kcml2ZXJkYXRhKSB7IFwKKwkudmVuZG9yID0gTkdFTkVfVklELCAuZGV2aWNlID0gTkdFTkVfUElELCBcCisJLnN1YnZlbmRvciA9IF9zdWJ2ZW5kLCAuc3ViZGV2aWNlID0gX3N1YmRldiwgXAorCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmX2RyaXZlcmRhdGEgfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nZW5lX2lkX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJTkdFTkVfSUQoMHgxOGMzLCAweGFiYzMsIG5nZW5lX2luZm9fY2luZVMyKSwKKwlOR0VORV9JRCgweDE4YzMsIDB4YWJjNCwgbmdlbmVfaW5mb19jaW5lUzIpLAorCU5HRU5FX0lEKDB4MThjMywgMHhkYjAxLCBuZ2VuZV9pbmZvX3NhdGl4czIpLAorCXswfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZ2VuZV9pZF90YmwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEluaXQvRXhpdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG5nZW5lX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZSkKK3sKKwlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogUENJIGVycm9yXG4iKTsKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fZnJvemVuKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVI7Cit9CisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG5nZW5lX2xpbmtfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IGxpbmsgcmVzZXRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBuZ2VuZV9zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBzbG90IHJlc2V0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmdlbmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiByZXN1bWVcbiIpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBuZ2VuZV9lcnJvcnMgPSB7CisJLmVycm9yX2RldGVjdGVkID0gbmdlbmVfZXJyb3JfZGV0ZWN0ZWQsCisJLmxpbmtfcmVzZXQgPSBuZ2VuZV9saW5rX3Jlc2V0LAorCS5zbG90X3Jlc2V0ID0gbmdlbmVfc2xvdF9yZXNldCwKKwkucmVzdW1lID0gbmdlbmVfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nZW5lX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgID0gIm5nZW5lIiwKKwkuaWRfdGFibGUgICAgPSBuZ2VuZV9pZF90YmwsCisJLnByb2JlICAgICAgID0gbmdlbmVfcHJvYmUsCisJLnJlbW92ZSAgICAgID0gX19kZXZleGl0X3AobmdlbmVfcmVtb3ZlKSwKKwkuZXJyX2hhbmRsZXIgPSAmbmdlbmVfZXJyb3JzLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgbW9kdWxlX2luaXRfbmdlbmUodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJuR2VuZSBQQ0lFIGJyaWRnZSBkcml2ZXIsIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IE1pY3JvbmFzXG4iKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmdlbmVfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyBfX2V4aXQgdm9pZCBtb2R1bGVfZXhpdF9uZ2VuZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbmdlbmVfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1vZHVsZV9pbml0X25nZW5lKTsKK21vZHVsZV9leGl0KG1vZHVsZV9leGl0X25nZW5lKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJuR2VuZSIpOworTU9EVUxFX0FVVEhPUigiTWljcm9uYXMsIFJhbHBoIE1ldHpsZXIsIE1hbmZyZWQgVm9lbGtlbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlYjI5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmgKQEAgLTAsMCArMSw4NTkgQEAKKy8qCisgKiBuZ2VuZS5oOiBuR2VuZSBQQ0llIGJyaWRnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBNaWNyb25hcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgb25seSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpZm5kZWYgX05HRU5FX0hfCisjZGVmaW5lIF9OR0VORV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKKyNpbmNsdWRlICJkbXhkZXYuaCIKKyNpbmNsdWRlICJkdmJkZXYuaCIKKyNpbmNsdWRlICJkdmJfZGVtdXguaCIKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJkdmJfcmluZ2J1ZmZlci5oIgorCisjZGVmaW5lIE5HRU5FX1ZJRCAgICAgICAweDE4YzMKKyNkZWZpbmUgTkdFTkVfUElEICAgICAgIDB4MDcyMAorCisjaWZuZGVmIFZJREVPX0NBUF9WQzEKKyNkZWZpbmUgVklERU9fQ0FQX0FWQyAgIDEyOAorI2RlZmluZSBWSURFT19DQVBfSDI2NCAgMTI4CisjZGVmaW5lIFZJREVPX0NBUF9WQzEgICAyNTYKKyNkZWZpbmUgVklERU9fQ0FQX1dNVjkgIDI1NgorI2RlZmluZSBWSURFT19DQVBfTVBFRzQgNTEyCisjZW5kaWYKKworZW51bSBTVFJFQU0geworCVNUUkVBTV9WSURFT0lOMSA9IDAsICAgICAgICAvKiBJVFU2NTYgb3IgVFMgSW5wdXQgKi8KKwlTVFJFQU1fVklERU9JTjIsCisJU1RSRUFNX0FVRElPSU4xLCAgICAgICAgICAgIC8qIEkyUyBvciBTUEkgSW5wdXQgKi8KKwlTVFJFQU1fQVVESU9JTjIsCisJU1RSRUFNX0FVRElPT1VULAorCU1BWF9TVFJFQU0KK307CisKK2VudW0gU01PREVfQklUUyB7CisJU01PREVfQVVESU9fU1BESUYgPSAweDIwLAorCVNNT0RFX0FWU1lOQyA9IDB4MTAsCisJU01PREVfVFJBTlNQT1JUX1NUUkVBTSA9IDB4MDgsCisJU01PREVfQVVESU9fQ0FQVFVSRSA9IDB4MDQsCisJU01PREVfVkJJX0NBUFRVUkUgPSAweDAyLAorCVNNT0RFX1ZJREVPX0NBUFRVUkUgPSAweDAxCit9OworCitlbnVtIFNUUkVBTV9GTEFHX0JJVFMgeworCVNGTEFHX0NIUk9NQV9GT1JNQVRfMkNPTVAgID0gMHgwMSwgLyogQ2hyb21hIEZvcm1hdCA6IDIncyBjb21wbGVtZW50ICovCisJU0ZMQUdfQ0hST01BX0ZPUk1BVF9PRkZTRVQgPSAweDAwLCAvKiBDaHJvbWEgRm9ybWF0IDogQmluYXJ5IG9mZnNldCAqLworCVNGTEFHX09SREVSX0xVTUFfQ0hST01BICAgID0gMHgwMiwgLyogQnl0ZSBvcmRlcjogWSxDYixZLENyICovCisJU0ZMQUdfT1JERVJfQ0hST01BX0xVTUEgICAgPSAweDAwLCAvKiBCeXRlIG9yZGVyOiBDYixZLENyLFkgKi8KKwlTRkxBR19DT0xPUkJBUiAgICAgICAgICAgICA9IDB4MDQsIC8qIFNlbGVjdCBjb2xvcmJhciAqLworfTsKKworI2RlZmluZSBQUk9HUkFNX1JPTSAgICAgMHgwMDAwCisjZGVmaW5lIFBST0dSQU1fU1JBTSAgICAweDEwMDAKKyNkZWZpbmUgUEVSSVBIRVJBTFMwICAgIDB4ODAwMAorI2RlZmluZSBQRVJJUEhFUkFMUzEgICAgMHg5MDAwCisjZGVmaW5lIFNIQVJFRF9CVUZGRVIgICAweEMwMDAKKworI2RlZmluZSBIT1NUX1RPX05HRU5FICAgIChTSEFSRURfQlVGRkVSKzB4MDAwMCkKKyNkZWZpbmUgTkdFTkVfVE9fSE9TVCAgICAoU0hBUkVEX0JVRkZFUisweDAxMDApCisjZGVmaW5lIE5HRU5FX0NPTU1BTkQgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjAwKQorI2RlZmluZSBOR0VORV9DT01NQU5EX0hJIChTSEFSRURfQlVGRkVSKzB4MDIwNCkKKyNkZWZpbmUgTkdFTkVfU1RBVFVTICAgICAoU0hBUkVEX0JVRkZFUisweDAyMDgpCisjZGVmaW5lIE5HRU5FX1NUQVRVU19ISSAgKFNIQVJFRF9CVUZGRVIrMHgwMjBDKQorI2RlZmluZSBOR0VORV9FVkVOVCAgICAgIChTSEFSRURfQlVGRkVSKzB4MDIxMCkKKyNkZWZpbmUgTkdFTkVfRVZFTlRfSEkgICAoU0hBUkVEX0JVRkZFUisweDAyMTQpCisjZGVmaW5lIFZBUklBQkxFUyAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjEwKQorCisjZGVmaW5lIE5HRU5FX0lOVF9DT1VOVFMgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjYwKQorI2RlZmluZSBOR0VORV9JTlRfRU5BQkxFICAgICAgIChTSEFSRURfQlVGRkVSKzB4MDI2NCkKKyNkZWZpbmUgTkdFTkVfVkJJX0xJTkVfQ09VTlQgICAoU0hBUkVEX0JVRkZFUisweDAyNjgpCisKKyNkZWZpbmUgQlVGRkVSX0dQX1hNSVQgIChTSEFSRURfQlVGRkVSKzB4MDgwMCkKKyNkZWZpbmUgQlVGRkVSX0dQX1JFQ1YgIChTSEFSRURfQlVGRkVSKzB4MDkwMCkKKyNkZWZpbmUgRUVQUk9NX0FSRUEgICAgIChTSEFSRURfQlVGRkVSKzB4MEEwMCkKKworI2RlZmluZSBTR19WX0lOXzEgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQTgwKQorI2RlZmluZSBTR19WQklfMSAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQjAwKQorI2RlZmluZSBTR19BX0lOXzEgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQjgwKQorI2RlZmluZSBTR19WX0lOXzIgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQzAwKQorI2RlZmluZSBTR19WQklfMiAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQzgwKQorI2RlZmluZSBTR19BX0lOXzIgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRDAwKQorI2RlZmluZSBTR19WX09VVCAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRDgwKQorI2RlZmluZSBTR19BX09VVDIgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRTAwKQorCisjZGVmaW5lIERBVEFfQV9JTl8xICAgICAoU0hBUkVEX0JVRkZFUisweDBFODApCisjZGVmaW5lIERBVEFfQV9JTl8yICAgICAoU0hBUkVEX0JVRkZFUisweDBGMDApCisjZGVmaW5lIERBVEFfQV9PVVQgICAgICAoU0hBUkVEX0JVRkZFUisweDBGODApCisjZGVmaW5lIERBVEFfVl9JTl8xICAgICAoU0hBUkVEX0JVRkZFUisweDEwMDApCisjZGVmaW5lIERBVEFfVl9JTl8yICAgICAoU0hBUkVEX0JVRkZFUisweDIwMDApCisjZGVmaW5lIERBVEFfVl9PVVQgICAgICAoU0hBUkVEX0JVRkZFUisweDMwMDApCisKKyNkZWZpbmUgREFUQV9GSUZPX0FSRUEgIChTSEFSRURfQlVGRkVSKzB4MTAwMCkKKworI2RlZmluZSBUSU1FU1RBTVBTICAgICAgMHhBMDAwCisjZGVmaW5lIFNDUkFUQ0hQQUQgICAgICAweEEwODAKKyNkZWZpbmUgRk9SQ0VfSU5UICAgICAgIDB4QTA4OAorI2RlZmluZSBGT1JDRV9OTUkgICAgICAgMHhBMDkwCisjZGVmaW5lIElOVF9TVEFUVVMgICAgICAweEEwQTAKKworI2RlZmluZSBERVZfVkVSICAgICAgICAgMHg5MDA0CisKKyNkZWZpbmUgRldfREVCVUdfREVGQVVMVCAoUFJPR1JBTV9TUkFNKzB4MDBGRikKKworc3RydWN0IFNHX0FERFIgeworCXU2NCBzdGFydDsKKwl1NjQgY3VycjsKKwl1MTYgY3Vycl9wdHI7CisJdTE2IGVsZW1lbnRzOworCXUzMiBwYWRbM107Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBTSEFSRURfTUVNT1JZIHsKKwkvKiBDMDAwICovCisJdTMyIEhvc3RUb05nZW5lWzY0XTsKKworCS8qIEMxMDAgKi8KKwl1MzIgTmdlbmVUb0hvc3RbNjRdOworCisJLyogQzIwMCAqLworCXU2NCBOZ2VuZUNvbW1hbmQ7CisJdTY0IE5nZW5lU3RhdHVzOworCXU2NCBOZ2VuZUV2ZW50OworCisJLyogQzIxMCAqLworCXU4IHBhZDFbMHhjMjYwIC0gMHhjMjE4XTsKKworCS8qIEMyNjAgKi8KKwl1MzIgSW50Q291bnRzOworCXUzMiBJbnRFbmFibGU7CisKKwkvKiBDMjY4ICovCisJdTggcGFkMlsweGQwMDAgLSAweGMyNjhdOworCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBCVUZGRVJfU1RSRUFNX1JFU1VMVFMgeworCXUzMiBDbG9jazsgICAgICAgICAgIC8qIFN0cmVhbSB0aW1lIGluIDEwMG5zIHVuaXRzICovCisJdTE2IFJlbWFpbmluZ0xpbmVzOyAgLyogUmVtYWluaW5nIGxpbmVzIGluIHRoaXMgZmllbGQuCisJCQkJMCBmb3IgY29tcGxldGUgZmllbGQgKi8KKwl1OCAgRmllbGRDb3VudDsgICAgICAvKiBWaWRlbyBmaWVsZCBudW1iZXIgKi8KKwl1OCAgRmxhZ3M7ICAgICAgICAgICAvKiBCaXQgNyA9IERvbmUsIEJpdCA2ID0gc2VlbiwgQml0IDUgPSBvdmVyZmxvdywKKwkJCQlCaXQgMCA9IEZpZWxkSUQgKi8KKwl1MTYgQmxvY2tDb3VudDsgICAgICAvKiBBdWRpbyBibG9jayBjb3VudCAodW51c2VkKSAqLworCXU4ICBSZXNlcnZlZFsyXTsKKwl1MzIgRFRPVXBkYXRlOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCB7CisJdTY0IEFkZHJlc3M7CisJdTMyIExlbmd0aDsKKwl1MzIgUmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBCVUZGRVJfSEVBREVSIHsKKwl1NjQgICAgTmV4dDsKKwlzdHJ1Y3QgQlVGRkVSX1NUUkVBTV9SRVNVTFRTIFNSOworCisJdTMyICAgIE51bWJlcl9vZl9lbnRyaWVzXzE7CisJdTMyICAgIFJlc2VydmVkNTsKKwl1NjQgICAgQWRkcmVzc19vZl9maXJzdF9lbnRyeV8xOworCisJdTMyICAgIE51bWJlcl9vZl9lbnRyaWVzXzI7CisJdTMyICAgIFJlc2VydmVkNzsKKwl1NjQgICAgQWRkcmVzc19vZl9maXJzdF9lbnRyeV8yOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRVZFTlRfQlVGRkVSIHsKKwl1MzIgICAgVGltZVN0YW1wOworCXU4ICAgICBHUElPU3RhdHVzOworCXU4ICAgICBVQVJUU3RhdHVzOworCXU4ICAgICBSWENoYXJhY3RlcjsKKwl1OCAgICAgRXZlbnRTdGF0dXM7CisJdTMyICAgIFJlc2VydmVkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisvKiBGaXJtd2FyZSBjb21tYW5kcy4gKi8KKworZW51bSBPUENPREVTIHsKKwlDTURfTk9QID0gMCwKKwlDTURfRldMT0FEX1BSRVBBUkUgID0gMHgwMSwKKwlDTURfRldMT0FEX0ZJTklTSCAgID0gMHgwMiwKKwlDTURfSTJDX1JFQUQgICAgICAgID0gMHgwMywKKwlDTURfSTJDX1dSSVRFICAgICAgID0gMHgwNCwKKworCUNNRF9JMkNfV1JJVEVfTk9TVE9QID0gMHgwNSwKKwlDTURfSTJDX0NPTlRJTlVFX1dSSVRFID0gMHgwNiwKKwlDTURfSTJDX0NPTlRJTlVFX1dSSVRFX05PU1RPUCA9IDB4MDcsCisKKwlDTURfREVCVUdfT1VUUFVUICAgID0gMHgwOSwKKworCUNNRF9DT05UUk9MICAgICAgICAgPSAweDEwLAorCUNNRF9DT05GSUdVUkVfQlVGRkVSID0gMHgxMSwKKwlDTURfQ09ORklHVVJFX0ZSRUVfQlVGRkVSID0gMHgxMiwKKworCUNNRF9TUElfUkVBRCAgICAgICAgPSAweDEzLAorCUNNRF9TUElfV1JJVEUgICAgICAgPSAweDE0LAorCisJQ01EX01FTV9SRUFEICAgICAgICA9IDB4MjAsCisJQ01EX01FTV9XUklURQkgICAgPSAweDIxLAorCUNNRF9TRlJfUkVBRAkgICAgPSAweDIyLAorCUNNRF9TRlJfV1JJVEUJICAgID0gMHgyMywKKwlDTURfSVJBTV9SRUFECSAgICA9IDB4MjQsCisJQ01EX0lSQU1fV1JJVEUJICAgID0gMHgyNSwKKwlDTURfU0VUX0dQSU9fUElOICAgID0gMHgyNiwKKwlDTURfU0VUX0dQSU9fSU5UICAgID0gMHgyNywKKwlDTURfQ09ORklHVVJFX1VBUlQgID0gMHgyOCwKKwlDTURfV1JJVEVfVUFSVCAgICAgID0gMHgyOSwKKwlNQVhfQ01ECit9OworCitlbnVtIFJFU1BPTlNFUyB7CisJT0sgPSAwLAorCUVSUk9SID0gMQorfTsKKworc3RydWN0IEZXX0hFQURFUiB7CisJdTggT3Bjb2RlOworCXU4IExlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0kyQ19XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggRGV2aWNlOworCXU4IERhdGFbMjUwXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0kyQ19DT05USU5VRV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggRGF0YVsyNTBdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfSTJDX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IERldmljZTsKKwl1OCBEYXRhWzI1Ml07ICAgIC8qIGZvbGxvd2VkIGJ5IHR3byBieXRlcyBvZiByZWFkIGRhdGEgY291bnQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NQSV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggTW9kZVNlbGVjdDsKKwl1OCBEYXRhWzI1MF07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TUElfUkVBRCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggTW9kZVNlbGVjdDsKKwl1OCBEYXRhWzI1Ml07ICAgIC8qIGZvbGxvd2VkIGJ5IHR3byBieXRlcyBvZiByZWFkIGRhdGEgY291bnQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0ZXTE9BRF9QUkVQQVJFIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0ZXTE9BRF9GSU5JU0ggeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXUxNiBBZGRyZXNzOyAgICAgLyogYWRkcmVzcyBvZiBmaW5hbCBibG9jayAqLworCXUxNiBMZW5ndGg7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKy8qCisgKiBNZWFuaW5nIG9mIEZXX1NUUkVBTV9DT05UUk9MOjpNb2RlIGJpdHM6CisgKiAgQml0IDc6IExvb3BiYWNrIFBFWGluIHRvIFBFWG91dCB1c2luZyBUVk91dCBjaGFubmVsCisgKiAgQml0IDY6IEFWTE9PUAorICogIEJpdCA1OiBBdWRpbyBzZWxlY3Q7IDA9STJTLCAxPVNQRElGCisgKiAgQml0IDQ6IEFWU1lOQworICogIEJpdCAzOiBFbmFibGUgdHJhbnNwb3J0IHN0cmVhbQorICogIEJpdCAyOiBFbmFibGUgYXVkaW8gY2FwdHVyZQorICogIEJpdCAxOiBFbmFibGUgSVRVLVZpZGVvIFZCSSBjYXB0dXJlCisgKiAgQml0IDA6IEVuYWJsZSBJVFUtVmlkZW8gY2FwdHVyZQorICoKKyAqIE1lYW5pbmcgb2YgRldfU1RSRUFNX0NPTlRST0w6OkNvbnRyb2wgYml0cyAoc2VlIFVWSTFfQ1RMKQorICogIEJpdCA3OiBjb250aW51b3VzIGNhcHR1cmUKKyAqICBCaXQgNjogY2FwdHVyZSBvbmUgZmllbGQKKyAqICBCaXQgNTogY2FwdHVyZSBvbmUgZnJhbWUKKyAqICBCaXQgNDogdW51c2VkCisgKiAgQml0IDM6IHN0YXJ0aW5nIGZpZWxkOyAwPW9kZCwgMT1ldmVuCisgKiAgQml0IDI6IHNhbXBsZSBzaXplOyAwPTgtYml0LCAxPTEwLWJpdAorICogIEJpdCAxOiBkYXRhIGZvcm1hdDsgMD1VWVZZLCAxPVlVWTIKKyAqICBCaXQgMDogcmVzZXRzIGJ1ZmZlciBwb2ludGVycworKi8KKworZW51bSBGU0NfTU9ERV9CSVRTIHsKKwlTTU9ERV9MT09QQkFDSyAgICAgICAgICA9IDB4ODAsCisJU01PREVfQVZMT09QICAgICAgICAgICAgPSAweDQwLAorCV9TTU9ERV9BVURJT19TUERJRiAgICAgID0gMHgyMCwKKwlfU01PREVfQVZTWU5DICAgICAgICAgICA9IDB4MTAsCisJX1NNT0RFX1RSQU5TUE9SVF9TVFJFQU0gPSAweDA4LAorCV9TTU9ERV9BVURJT19DQVBUVVJFICAgID0gMHgwNCwKKwlfU01PREVfVkJJX0NBUFRVUkUgICAgICA9IDB4MDIsCisJX1NNT0RFX1ZJREVPX0NBUFRVUkUgICAgPSAweDAxCit9OworCisKKy8qIE1lYW5pbmcgb2YgRldfU1RSRUFNX0NPTlRST0w6OlN0cmVhbSBiaXRzOgorICogQml0IDM6IEF1ZGlvIHNhbXBsZSBjb3VudDogIDAgPSByZWxhdGl2ZSwgMSA9IGFic29sdXRlCisgKiBCaXQgMjogY29sb3IgYmFyIHNlbGVjdDsgMT1jb2xvciBiYXJzLCAwPUNWMyBkZWNvZGVyCisgKiBCaXRzIDEtMDogc3RyZWFtIHNlbGVjdCwgVVZJMSwgVVZJMiwgVFZPVVQKKyAqLworCitzdHJ1Y3QgRldfU1RSRUFNX0NPTlRST0wgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgICBTdHJlYW07ICAgICAgICAgICAgIC8qIFN0cmVhbSBudW1iZXIgKFVWSTEsIFVWSTIsIFRWT1VUKSAqLworCXU4ICAgICBDb250cm9sOyAgICAgICAgICAgIC8qIFZhbHVlIHdyaXR0ZW4gdG8gVVZJMV9DVEwgKi8KKwl1OCAgICAgTW9kZTsgICAgICAgICAgICAgICAvKiBDb250cm9scyBjbG9jayBzb3VyY2UgKi8KKwl1OCAgICAgU2V0dXBEYXRhTGVuOwkgICAvKiBMZW5ndGggb2Ygc2V0dXAgZGF0YSwgTVNCPTEgd3JpdGUKKwkJCQkgICAgICBiYWNrd2FyZHMgKi8KKwl1MTYgICAgQ2FwdHVyZUJsb2NrQ291bnQ7ICAvKiBCbG9ja3MgKGEgMjU2IEJ5dGVzKSB0byBjYXB0dXJlIHBlciBidWZmZXIKKwkJCQkgICAgICBmb3IgVFMgYW5kIEF1ZGlvICovCisJdTY0ICAgIEJ1ZmZlcl9BZGRyZXNzOwkgICAvKiBBZGRyZXNzIG9mIGZpcnN0IGJ1ZmZlciBoZWFkZXIgKi8KKwl1MTYgICAgQnl0ZXNQZXJWaWRlb0xpbmU7CisJdTE2ICAgIE1heExpbmVzUGVyRmllbGQ7CisJdTE2ICAgIE1pbkxpbmVzUGVyRmllbGQ7CisJdTE2ICAgIFJlc2VydmVkXzE7CisJdTE2ICAgIEJ5dGVzUGVyVkJJTGluZTsKKwl1MTYgICAgTWF4VkJJTGluZXNQZXJGaWVsZDsKKwl1MTYgICAgTWluVkJJTGluZXNQZXJGaWVsZDsKKwl1MTYgICAgU2V0dXBEYXRhQWRkcjsgICAgICAvKiBuZ2VuZSByZWxhdGl2ZSBhZGRyZXNzIG9mIHNldHVwIGRhdGEgKi8KKwl1OCAgICAgU2V0dXBEYXRhWzMyXTsgICAgICAvKiBzZXR1cCBkYXRhICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBBVURJT19CTE9DS19TSVpFICAgIDI1NgorI2RlZmluZSBUU19CTE9DS19TSVpFICAgICAgIDI1NgorCitzdHJ1Y3QgRldfTUVNX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXUxNiAgIGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19NRU1fV1JJVEUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXUxNiAgIGFkZHJlc3M7CisJdTggICAgZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NGUl9JUkFNX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgIGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TRlJfSVJBTV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICAgYWRkcmVzczsKKwl1OCAgICBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfU0VUX0dQSU9fUElOIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgICBzZWxlY3Q7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TRVRfR1BJT19JTlQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgIHNlbGVjdDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NFVF9ERUJVR01PREUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgZGVidWdfZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19DT05GSUdVUkVfQlVGRkVSUyB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICBjb25maWc7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK2VudW0gX0JVRkZFUl9DT05GSUdTIHsKKwkvKiA0ayBVVkkxLCA0ayBVVkkyLCAyayBBVUQxLCAyayBBVUQyICAoc3RhbmRhcmQgdXNhZ2UpICovCisJQlVGRkVSX0NPTkZJR180NDIyID0gMCwKKwkvKiAzayBVVkkxLCAzayBVVkkyLCAzayBBVUQxLCAzayBBVUQyICAoNHggVFMgaW5wdXQgdXNhZ2UpICovCisJQlVGRkVSX0NPTkZJR18zMzMzID0gMSwKKwkvKiA4ayBVVkkxLCAwayBVVkkyLCAyayBBVUQxLCAyayBJMlNPdXQgIChIRFRWIGRlY29kZXIgdXNhZ2UpICovCisJQlVGRkVSX0NPTkZJR184MDIyID0gMiwKKwlCVUZGRVJfQ09ORklHX0ZXMTcgPSAyNTUsIC8qIFVzZSBuZXcgRlcgMTcgY29tbWFuZCAqLworfTsKKworc3RydWN0IEZXX0NPTkZJR1VSRV9GUkVFX0JVRkZFUlMgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgVVZJMV9CdWZmZXJMZW5ndGg7CisJdTggICBVVkkyX0J1ZmZlckxlbmd0aDsKKwl1OCAgIFRWT19CdWZmZXJMZW5ndGg7CisJdTggICBBVUQxX0J1ZmZlckxlbmd0aDsKKwl1OCAgIEFVRDJfQnVmZmVyTGVuZ3RoOworCXU4ICAgVFZBX0J1ZmZlckxlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0NPTkZJR1VSRV9VQVJUIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCBVYXJ0Q29udHJvbDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworZW51bSBfVUFSVF9DT05GSUcgeworCV9VQVJUX0JBVURSQVRFXzE5MjAwID0gMCwKKwlfVUFSVF9CQVVEUkFURV85NjAwICA9IDEsCisJX1VBUlRfQkFVRFJBVEVfNDgwMCAgPSAyLAorCV9VQVJUX0JBVURSQVRFXzI0MDAgID0gMywKKwlfVUFSVF9SWF9FTkFCTEUgICAgICA9IDB4NDAsCisJX1VBUlRfVFhfRU5BQkxFICAgICAgPSAweDgwLAorfTsKKworc3RydWN0IEZXX1dSSVRFX1VBUlQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IERhdGFbMjUyXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworCitzdHJ1Y3QgbmdlbmVfY29tbWFuZCB7CisJdTMyIGluX2xlbjsKKwl1MzIgb3V0X2xlbjsKKwl1bmlvbiB7CisJCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1s2NF07CisJCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzhbMjU2XTsKKwkJc3RydWN0IEZXX0hFQURFUiAgICAgICAgICAgICAgICAgaGRyOworCQlzdHJ1Y3QgRldfSTJDX1dSSVRFICAgICAgICAgICAgICBJMkNXcml0ZTsKKwkJc3RydWN0IEZXX0kyQ19DT05USU5VRV9XUklURSAgICAgSTJDQ29udGludWVXcml0ZTsKKwkJc3RydWN0IEZXX0kyQ19SRUFEICAgICAgICAgICAgICAgSTJDUmVhZDsKKwkJc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MICAgICAgICAgU3RyZWFtQ29udHJvbDsKKwkJc3RydWN0IEZXX0ZXTE9BRF9QUkVQQVJFICAgICAgICAgRldMb2FkUHJlcGFyZTsKKwkJc3RydWN0IEZXX0ZXTE9BRF9GSU5JU0ggICAgICAgICAgRldMb2FkRmluaXNoOworCQlzdHJ1Y3QgRldfTUVNX1JFQUQJCSBNZW1vcnlSZWFkOworCQlzdHJ1Y3QgRldfTUVNX1dSSVRFCQkgTWVtb3J5V3JpdGU7CisJCXN0cnVjdCBGV19TRlJfSVJBTV9SRUFECQkgU2ZySXJhbVJlYWQ7CisJCXN0cnVjdCBGV19TRlJfSVJBTV9XUklURSAgICAgICAgIFNmcklyYW1Xcml0ZTsKKwkJc3RydWN0IEZXX1NQSV9XUklURSAgICAgICAgICAgICAgU1BJV3JpdGU7CisJCXN0cnVjdCBGV19TUElfUkVBRCAgICAgICAgICAgICAgIFNQSVJlYWQ7CisJCXN0cnVjdCBGV19TRVRfR1BJT19QSU4gICAgICAgICAgIFNldEdwaW9QaW47CisJCXN0cnVjdCBGV19TRVRfR1BJT19JTlQgICAgICAgICAgIFNldEdwaW9JbnQ7CisJCXN0cnVjdCBGV19TRVRfREVCVUdNT0RFICAgICAgICAgIFNldERlYnVnTW9kZTsKKwkJc3RydWN0IEZXX0NPTkZJR1VSRV9CVUZGRVJTICAgICAgQ29uZmlndXJlQnVmZmVyczsKKwkJc3RydWN0IEZXX0NPTkZJR1VSRV9GUkVFX0JVRkZFUlMgQ29uZmlndXJlRnJlZUJ1ZmZlcnM7CisJCXN0cnVjdCBGV19DT05GSUdVUkVfVUFSVCAgICAgICAgIENvbmZpZ3VyZVVhcnQ7CisJCXN0cnVjdCBGV19XUklURV9VQVJUICAgICAgICAgICAgIFdyaXRlVWFydDsKKwl9IGNtZDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBOR0VORV9JTlRFUkZBQ0VfVkVSU0lPTiAweDEwMworI2RlZmluZSBNQVhfVklERU9fQlVGRkVSX1NJWkUgICAoNDE3NzkyKSAvKiAyODgqMTQ0MCByb3VuZGVkIHVwIHRvIG5leHQgcGFnZSAqLworI2RlZmluZSBNQVhfQVVESU9fQlVGRkVSX1NJWkUgICAgICg4MTkyKSAvKiBHaXZlcyByb29tIGZvciBhYm91dCAyM21zZWNANDhLSHogKi8KKyNkZWZpbmUgTUFYX1ZCSV9CVUZGRVJfU0laRSAgICAgICgyODY3MikgLyogMTE0NCoxOCByb3VuZGVkIHVwIHRvIG5leHQgcGFnZSAqLworI2RlZmluZSBNQVhfVFNfQlVGRkVSX1NJWkUgICAgICAgKDk4MzA0KSAvKiA1MTIqMTg4IHJvdW5kZWQgdXAgdG8gbmV4dCBwYWdlICovCisjZGVmaW5lIE1BWF9IRFRWX0JVRkZFUl9TSVpFICAgKDIwODA3NjgpIC8qIDU0MSoxOTIwKjIgcm91bmRlZCB1cCB0byBuZXh0IHBhZ2UKKwkJCQkJICAgIE1heDogKDE5MjB4MTA4MGk2MCkgKi8KKworI2RlZmluZSBPVkVSRkxPV19CVUZGRVJfU0laRSAgICAoODE5MikKKworI2RlZmluZSBSSU5HX1NJWkVfVklERU8gICAgIDQKKyNkZWZpbmUgUklOR19TSVpFX0FVRElPICAgICA4CisjZGVmaW5lIFJJTkdfU0laRV9UUyAgICAgICAgOAorCisjZGVmaW5lIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTICA4CisKKyNkZWZpbmUgTUFYX0RNQV9MRU5HVEggKCgoTUFYX1ZJREVPX0JVRkZFUl9TSVpFICsgTUFYX1ZCSV9CVUZGRVJfU0laRSkgKiBcCisJCQlSSU5HX1NJWkVfVklERU8gKiAyKSArIFwKKwkJCShNQVhfQVVESU9fQlVGRkVSX1NJWkUgKiBSSU5HX1NJWkVfQVVESU8gKiAyKSArIFwKKwkJCShNQVhfVFNfQlVGRkVSX1NJWkUgKiBSSU5HX1NJWkVfVFMgKiA0KSArIFwKKwkJCShSSU5HX1NJWkVfVklERU8gKiBQQUdFX1NJWkUgKiAyKSArIFwKKwkJCShSSU5HX1NJWkVfQVVESU8gKiBQQUdFX1NJWkUgKiAyKSArIFwKKwkJCShSSU5HX1NJWkVfVFMgICAgKiBQQUdFX1NJWkUgKiA0KSArIFwKKwkJCSA4ICogUEFHRV9TSVpFICsgT1ZFUkZMT1dfQlVGRkVSX1NJWkUgKyBQQUdFX1NJWkUpCisKKyNkZWZpbmUgRVZFTlRfUVVFVUVfU0laRSAgICAxNgorCisvKiBHYXRoZXJzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgc2luZ2xlIGNoYW5uZWwuICovCisKK3N0cnVjdCBTQnVmZmVySGVhZGVyIHsKKwlzdHJ1Y3QgQlVGRkVSX0hFQURFUiAgIG5nZW5lQnVmZmVyOyAvKiBQaHlzaWNhbCBkZXNjcmlwdG9yICovCisJc3RydWN0IFNCdWZmZXJIZWFkZXIgICpOZXh0OworCXZvaWQgICAgICAgICAgICAgICAgICAqQnVmZmVyMTsKKwlzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCAqc2NMaXN0MTsKKwl2b2lkICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjI7CisJc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgKnNjTGlzdDI7Cit9OworCisvKiBTaXplb2YgU0J1ZmZlckhlYWRlciBhbGlnbmVkIHRvIG5leHQgNjQgQml0IGJvdW5kYXJ5IChodyByZXN0cmljdGlvbikgKi8KKyNkZWZpbmUgU0laRU9GX1NCdWZmZXJIZWFkZXIgKChzaXplb2Yoc3RydWN0IFNCdWZmZXJIZWFkZXIpICsgNjMpICYgfjYzKQorCitlbnVtIEhXU1RBVEUgeworCUhXU1RBVEVfU1RPUCwKKwlIV1NUQVRFX1NUQVJUVVAsCisJSFdTVEFURV9SVU4sCisJSFdTVEFURV9QQVVTRSwKK307CisKK2VudW0gS1NTVEFURSB7CisJS1NTVEFURV9TVE9QLAorCUtTU1RBVEVfQUNRVUlSRSwKKwlLU1NUQVRFX1BBVVNFLAorCUtTU1RBVEVfUlVOLAorfTsKKworc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciB7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkhlYWQ7IC8qIFBvaW50cyB0byBmaXJzdCBidWZmZXIgaW4gcmluZyBidWZmZXIKKwkJCQkgICAgICAgc3RydWN0dXJlKi8KKwl1NjQgICBQQUhlYWQ7ICAgICAgICAgLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBmaXJzdCBidWZmZXIgKi8KKwl1MzIgICBNZW1TaXplOyAgICAgICAgLyogTWVtb3J5IHNpemUgb2YgYWxsb2NhdGVkIHJpbmcgYnVmZmVycworCQkJCSAobmVlZGVkIGZvciBmcmVlaW5nKSAqLworCXUzMiAgIE51bUJ1ZmZlcnM7ICAgICAvKiBOdW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcmluZyAqLworCXUzMiAgIEJ1ZmZlcjFMZW5ndGg7ICAvKiBBbGxvY2F0ZWQgbGVuZ3RoIG9mIEJ1ZmZlciAxICovCisJdTMyICAgQnVmZmVyMkxlbmd0aDsgIC8qIEFsbG9jYXRlZCBsZW5ndGggb2YgQnVmZmVyIDIgKi8KKwl2b2lkICpTQ0xpc3RNZW07ICAgICAgLyogTWVtb3J5IHRvIGhvbGQgc2NhdHRlciBnYXRoZXIgbGlzdHMgZm9yIHRoaXMKKwkJCQkgcmluZyAqLworCXU2NCAgIFBBU0NMaXN0TWVtOyAgICAvKiBQaHlzaWNhbCBhZGRyZXNzICAuLiAqLworCXUzMiAgIFNDTGlzdE1lbVNpemU7ICAvKiBTaXplIG9mIHRoaXMgbWVtb3J5ICovCit9OworCitlbnVtIFNUUkVBTU1PREVGTEFHUyB7CisJU3RyZWFtTW9kZV9OT05FICAgPSAwLCAvKiBTdHJlYW0gbm90IHVzZWQgKi8KKwlTdHJlYW1Nb2RlX0FOQUxPRyA9IDEsIC8qIEFuYWxvZzogU3RyZWFtIDAsMSA9IFZpZGVvLCAyLDMgPSBBdWRpbyAqLworCVN0cmVhbU1vZGVfVFNJTiAgID0gMiwgLyogVHJhbnNwb3J0IHN0cmVhbSBpbnB1dCAoYWxsKSAqLworCVN0cmVhbU1vZGVfSERUViAgID0gNCwgLyogSERUVjogTWF4aW11bSAxOTIweDEwODBwMzAsMTkyMHgxMDgwaTYwCisJCQkJICAob25seSBzdHJlYW0gMCkgKi8KKwlTdHJlYW1Nb2RlX1RTT1VUICA9IDgsIC8qIFRyYW5zcG9ydCBzdHJlYW0gb3V0cHV0IChvbmx5IHN0cmVhbSAzKSAqLworfTsKKworCitlbnVtIEJ1ZmZlckV4Y2hhbmdlRmxhZ3MgeworCUJFRl9FVkVOX0ZJRUxEICAgPSAweDAwMDAwMDAxLAorCUJFRl9DT05USU5VQVRJT04gPSAweDAwMDAwMDAyLAorCUJFRl9NT1JFX0RBVEEgICAgPSAweDAwMDAwMDA0LAorCUJFRl9PVkVSRkxPVyAgICAgPSAweDAwMDAwMDA4LAorCURGX1NXQVAzMiAgICAgICAgPSAweDAwMDEwMDAwLAorfTsKKwordHlwZWRlZiB2b2lkICooSUJ1ZmZlckV4Y2hhbmdlKSh2b2lkICosIHZvaWQgKiwgdTMyLCB1MzIsIHUzMik7CisKK3N0cnVjdCBNSUNJX1NUUkVBTUlORk8geworCUlCdWZmZXJFeGNoYW5nZSAgICAqcEV4Y2hhbmdlOworCUlCdWZmZXJFeGNoYW5nZSAgICAqcEV4Y2hhbmdlVkJJOyAgICAgLyogU2Vjb25kYXJ5IChWQkksIGFuY2lsbGFyeSkgKi8KKwl1OCAgU3RyZWFtOworCXU4ICBGbGFnczsKKwl1OCAgTW9kZTsKKwl1OCAgUmVzZXJ2ZWQ7CisJdTE2IG5MaW5lc1ZpZGVvOworCXUxNiBuQnl0ZXNQZXJMaW5lVmlkZW87CisJdTE2IG5MaW5lc1ZCSTsKKwl1MTYgbkJ5dGVzUGVyTGluZVZCSTsKKwl1MzIgQ2FwdHVyZUxlbmd0aDsgICAgLyogVXNlZCBmb3IgYXVkaW8gYW5kIHRyYW5zcG9ydCBzdHJlYW0gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU1RSVUNUUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogc291bmQgaGFyZHdhcmUgZGVmaW5pdGlvbiAqLworI2RlZmluZSBNSVhFUl9BRERSX1RWVFVORVIgICAgICAwCisjZGVmaW5lIE1JWEVSX0FERFJfTEFTVCAgICAgICAgIDAKKworc3RydWN0IG5nZW5lX2NoYW5uZWw7CisKKy8qc3RydWN0IHNvdW5kIGNoaXAqLworCitzdHJ1Y3QgbXljaGlwIHsKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXVuc2lnbmVkIGxvbmcgcG9ydDsKKwlpbnQgaXJxOworCXNwaW5sb2NrX3QgbWl4ZXJfbG9jazsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IG1peGVyX3ZvbHVtZVtNSVhFUl9BRERSX0xBU1QgKyAxXVsyXTsKKwlpbnQgY2FwdHVyZV9zb3VyY2VbTUlYRVJfQUREUl9MQVNUICsgMV1bMl07Cit9OworCisjaWZkZWYgTkdFTkVfVjRMCitzdHJ1Y3QgbmdlbmVfb3ZlcmxheSB7CisJaW50ICAgICAgICAgICAgICAgICAgICB0dm5vcm07CisJc3RydWN0IHY0bDJfcmVjdCAgICAgICB3OworCWVudW0gdjRsMl9maWVsZCAgICAgICAgZmllbGQ7CisJc3RydWN0IHY0bDJfY2xpcCAgICAgICAqY2xpcHM7CisJaW50ICAgICAgICAgICAgICAgICAgICBuY2xpcHM7CisJaW50ICAgICAgICAgICAgICAgICAgICBzZXR1cF9vazsKK307CisKK3N0cnVjdCBuZ2VuZV90dm5vcm0geworCWludCAgIHY0bDJfaWQ7CisJY2hhciAgKm5hbWU7CisJdTE2ICAgc3dpZHRoLCBzaGVpZ2h0OyAvKiBzY2FsZWQgc3RhbmRhcmQgd2lkdGgsIGhlaWdodCAqLworCWludCAgIHR1bmVyX25vcm07CisJaW50ICAgc291bmRzdGQ7Cit9OworCitzdHJ1Y3QgbmdlbmVfdm9wZW4geworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICAgICAgKmNoOworCWVudW0gdjRsMl9wcmlvcml0eSAgICAgICAgIHByaW87CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OworCWludCAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgIHZidWZfcTsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgICB2Ymk7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgZm91cmNjOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHBpY3hjb3VudDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM7CisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgICAgdHlwZTsKKwljb25zdCBzdHJ1Y3QgbmdlbmVfZm9ybWF0ICpmbXQ7CisKKwljb25zdCBzdHJ1Y3QgbmdlbmVfZm9ybWF0ICpvdmZtdDsKKwlzdHJ1Y3QgbmdlbmVfb3ZlcmxheSAgICAgICBvdjsKK307CisjZW5kaWYKKworc3RydWN0IG5nZW5lX2NoYW5uZWwgeworCXN0cnVjdCBkZXZpY2UgICAgICAgICBkZXZpY2U7CisJc3RydWN0IGkyY19hZGFwdGVyICAgIGkyY19hZGFwdGVyOworCisJc3RydWN0IG5nZW5lICAgICAgICAgKmRldjsKKwlpbnQgICAgICAgICAgICAgICAgICAgbnVtYmVyOworCWludCAgICAgICAgICAgICAgICAgICB0eXBlOworCWludCAgICAgICAgICAgICAgICAgICBtb2RlOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCAgKmZlOworCXN0cnVjdCBkbXhkZXYgICAgICAgICBkbXhkZXY7CisJc3RydWN0IGR2Yl9kZW11eCAgICAgIGRlbXV4OworCXN0cnVjdCBkbXhfZnJvbnRlbmQgICBod19mcm9udGVuZDsKKwlzdHJ1Y3QgZG14X2Zyb250ZW5kICAgbWVtX2Zyb250ZW5kOworCWludCAgICAgICAgICAgICAgICAgICB1c2VyczsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAqdjRsX2RldjsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZGVtdXhfdGFza2xldDsKKworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpuZXh0QnVmZmVyOworCWVudW0gS1NTVEFURSAgICAgICAgICBTdGF0ZTsKKwllbnVtIEhXU1RBVEUgICAgICAgICAgSFdTdGF0ZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgU3RyZWFtOworCXU4ICAgICAgICAgICAgICAgICAgICBGbGFnczsKKwl1OCAgICAgICAgICAgICAgICAgICAgTW9kZTsKKwlJQnVmZmVyRXhjaGFuZ2UgICAgICAqcEJ1ZmZlckV4Y2hhbmdlOworCUlCdWZmZXJFeGNoYW5nZSAgICAgICpwQnVmZmVyRXhjaGFuZ2UyOworCisJc3BpbmxvY2tfdCAgICAgICAgICAgIHN0YXRlX2xvY2s7CisJdTE2ICAgICAgICAgICAgICAgICAgIG5MaW5lczsKKwl1MTYgICAgICAgICAgICAgICAgICAgbkJ5dGVzUGVyTGluZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgblZCSUxpbmVzOworCXUxNiAgICAgICAgICAgICAgICAgICBuQnl0ZXNQZXJWQklMaW5lOworCXUxNiAgICAgICAgICAgICAgICAgICBpdHVtb2RlOworCXUzMiAgICAgICAgICAgICAgICAgICBDYXB0dXJlMUxlbmd0aDsKKwl1MzIgICAgICAgICAgICAgICAgICAgQ2FwdHVyZTJMZW5ndGg7CisJc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciBSaW5nQnVmZmVyOworCXN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgVFNSaW5nQnVmZmVyOworCXN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgVFNJZGxlQnVmZmVyOworCisJdTMyICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRGbGFnczsKKworCWludCAgICAgICAgICAgICAgICAgICBBdWRpb0RUT1VwZGF0ZWQ7CisJdTMyICAgICAgICAgICAgICAgICAgIEF1ZGlvRFRPVmFsdWU7CisKKwlpbnQgKCpzZXRfdG9uZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCBmZV9zZWNfdG9uZV9tb2RlX3QpOworCXU4IGxuYmg7CisKKwkvKiBzdHVmZiBmcm9tIGFuYWxvZyBkcml2ZXIgKi8KKworCWludCBtaW5vcjsKKwlzdHJ1Y3QgbXljaGlwICAgICAgICAqbXljaGlwOworCXN0cnVjdCBzbmRfY2FyZCAgICAgICpzb3VuZGNhcmQ7CisJdTggICAgICAgICAgICAgICAgICAgKmV2ZW5idWZmZXI7CisJdTggICAgICAgICAgICAgICAgICAgIGRtYV9vbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgc291bmRzdHJlYW1vbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgYXVkaW9tdXRlOworCWludCAgICAgICAgICAgICAgICAgICBzb3VuZGJ1ZmZpc2FsbG9jYXRlZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgc25kYnVmZmZsYWc7CisJaW50ICAgICAgICAgICAgICAgICAgIHR1bl9yZHk7CisJaW50ICAgICAgICAgICAgICAgICAgIGRlY19yZHk7CisJaW50ICAgICAgICAgICAgICAgICAgIHR1bl9kZWNfcmR5OworCWludCAgICAgICAgICAgICAgICAgICBsYXN0YnVmZmVyZmxhZzsKKworCXN0cnVjdCBuZ2VuZV90dm5vcm0gICp0dm5vcm1zOworCWludCAgICAgICAgICAgICAgICAgICB0dm5vcm1fbnVtOworCWludCAgICAgICAgICAgICAgICAgICB0dm5vcm07CisKKyNpZmRlZiBOR0VORV9WNEwKKwlpbnQgICAgICAgICAgICAgICAgICAgdmlkZW91c2VyczsKKwlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CisJc3RydWN0IG5nZW5lX3ZvcGVuICAgIGluaXQ7CisJaW50ICAgICAgICAgICAgICAgICAgIHJlc291cmNlczsKKwlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciBmYnVmOworCXN0cnVjdCBuZ2VuZV9idWZmZXIgICpzY3JlZW47ICAgICAvKiBvdmVybGF5ICAgICAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgIGNhcHR1cmU7ICAgIC8qIHZpZGVvIGNhcHR1cmUgcXVldWUgKi8KKwlzcGlubG9ja190IHNfbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHJlc2xvY2s7CisjZW5kaWYKKworCWludCBydW5uaW5nOworfTsKKworc3RydWN0IG5nZW5lOworCit0eXBlZGVmIHZvaWQgKHJ4X2NiX3QpKHN0cnVjdCBuZ2VuZSAqLCB1MzIsIHU4KTsKK3R5cGVkZWYgdm9pZCAodHhfY2JfdCkoc3RydWN0IG5nZW5lICosIHUzMik7CisKK3N0cnVjdCBuZ2VuZSB7CisJaW50ICAgICAgICAgICAgICAgICAgIG5yOworCXN0cnVjdCBwY2lfZGV2ICAgICAgICpwY2lfZGV2OworCXVuc2lnbmVkIGNoYXIgICAgICAgICppb21lbTsKKworCS8qc3RydWN0IGkyY19hZGFwdGVyICBpMmNfYWRhcHRlcjsqLworCisJdTMyICAgICAgICAgICAgICAgICAgIGRldmljZV92ZXJzaW9uOworCXUzMiAgICAgICAgICAgICAgICAgICBmd19pbnRlcmZhY2VfdmVyc2lvbjsKKwl1MzIgICAgICAgICAgICAgICAgICAgaWNvdW50czsKKworCXU4ICAgICAgICAgICAgICAgICAgICpDbWREb25lQnl0ZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgQm9vdEZpcm13YXJlOworCXZvaWQgICAgICAgICAgICAgICAgICpPdmVyZmxvd0J1ZmZlcjsKKwlkbWFfYWRkcl90ICAgICAgICAgICAgUEFPdmVyZmxvd0J1ZmZlcjsKKwl2b2lkICAgICAgICAgICAgICAgICAqRldJbnRlcmZhY2VCdWZmZXI7CisJZG1hX2FkZHJfdCAgICAgICAgICAgIFBBRldJbnRlcmZhY2VCdWZmZXI7CisJdTggICAgICAgICAgICAgICAgICAgKm5nZW5ldG9ob3N0OworCXU4ICAgICAgICAgICAgICAgICAgICpob3N0dG9uZ2VuZTsKKworCXN0cnVjdCBFVkVOVF9CVUZGRVIgICBFdmVudFF1ZXVlW0VWRU5UX1FVRVVFX1NJWkVdOworCWludCAgICAgICAgICAgICAgICAgICBFdmVudFF1ZXVlT3ZlcmZsb3dDb3VudDsKKwlpbnQgICAgICAgICAgICAgICAgICAgRXZlbnRRdWV1ZU92ZXJmbG93RmxhZzsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZXZlbnRfdGFza2xldDsKKwlzdHJ1Y3QgRVZFTlRfQlVGRkVSICAqRXZlbnRCdWZmZXI7CisJaW50ICAgICAgICAgICAgICAgICAgIEV2ZW50UXVldWVXcml0ZUluZGV4OworCWludCAgICAgICAgICAgICAgICAgICBFdmVudFF1ZXVlUmVhZEluZGV4OworCisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIGNtZF93cTsKKwlpbnQgICAgICAgICAgICAgICAgICAgY21kX2RvbmU7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgIGNtZF9tdXRleDsKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgc3RyZWFtX211dGV4OworCXN0cnVjdCBzZW1hcGhvcmUgICAgICBwbGxfbXV0ZXg7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgIGkyY19zd2l0Y2hfbXV0ZXg7CisJaW50ICAgICAgICAgICAgICAgICAgIGkyY19jdXJyZW50X2NoYW5uZWw7CisJaW50ICAgICAgICAgICAgICAgICAgIGkyY19jdXJyZW50X2J1czsKKwlzcGlubG9ja190ICAgICAgICAgICAgY21kX2xvY2s7CisKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgICAgYWRhcHRlcltNQVhfU1RSRUFNXTsKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAgY2hhbm5lbFtNQVhfU1RSRUFNXTsKKworCXN0cnVjdCBuZ2VuZV9pbmZvICAgICpjYXJkX2luZm87CisKKwl0eF9jYl90ICAgICAgICAgICAgICAqVHhFdmVudE5vdGlmeTsKKwlyeF9jYl90ICAgICAgICAgICAgICAqUnhFdmVudE5vdGlmeTsKKwlpbnQgICAgICAgICAgICAgICAgICAgdHhfYnVzeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgdHhfd3E7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIHJ4X3dxOworI2RlZmluZSBVQVJUX1JCVUZfTEVOIDQwOTYKKwl1OCAgICAgICAgICAgICAgICAgICAgdWFydF9yYnVmW1VBUlRfUkJVRl9MRU5dOworCWludCAgICAgICAgICAgICAgICAgICB1YXJ0X3JwLCB1YXJ0X3dwOworCisJdTggICAgICAgICAgICAgICAgICAgKnRzb3V0X2J1ZjsKKyNkZWZpbmUgVFNPVVRfQlVGX1NJWkUgKDUxMioxODgqOCkKKwlzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgdHNvdXRfcmJ1ZjsKKworCXU4ICAgICAgICAgICAgICAgICAgICphaW5fYnVmOworI2RlZmluZSBBSU5fQlVGX1NJWkUgKDEyOCoxMDI0KQorCXN0cnVjdCBkdmJfcmluZ2J1ZmZlciBhaW5fcmJ1ZjsKKworCisJdTggICAgICAgICAgICAgICAgICAgKnZpbl9idWY7CisjZGVmaW5lIFZJTl9CVUZfU0laRSAoNCoxOTIwKjEwODApCisJc3RydWN0IGR2Yl9yaW5nYnVmZmVyIHZpbl9yYnVmOworCisJdW5zaWduZWQgbG9uZyAgICAgICAgIGV4cF92YWw7CisJaW50IHByZXZfY21kOworfTsKKworc3RydWN0IG5nZW5lX2luZm8geworCWludCAgIHR5cGU7CisjZGVmaW5lIE5HRU5FX0FQUCAgICAgICAgMAorI2RlZmluZSBOR0VORV9URVJSQVRFQyAgIDEKKyNkZWZpbmUgTkdFTkVfU0lERVdJTkRFUiAyCisjZGVmaW5lIE5HRU5FX1JBQ0VSICAgICAgMworI2RlZmluZSBOR0VORV9WSVBFUiAgICAgIDQKKyNkZWZpbmUgTkdFTkVfUFlUSE9OICAgICA1CisjZGVmaW5lIE5HRU5FX1ZCT1hfVjEJIDYKKyNkZWZpbmUgTkdFTkVfVkJPWF9WMgkgNworCisJaW50ICAgZndfdmVyc2lvbjsKKwljaGFyICpuYW1lOworCisJaW50ICAgaW9fdHlwZVtNQVhfU1RSRUFNXTsKKyNkZWZpbmUgTkdFTkVfSU9fTk9ORSAgICAwCisjZGVmaW5lIE5HRU5FX0lPX1RWICAgICAgMQorI2RlZmluZSBOR0VORV9JT19IRFRWICAgIDIKKyNkZWZpbmUgTkdFTkVfSU9fVFNJTiAgICA0CisjZGVmaW5lIE5HRU5FX0lPX1RTT1VUICAgOAorI2RlZmluZSBOR0VORV9JT19BSU4gICAgIDE2CisKKwl2b2lkICpmZV9jb25maWdbNF07CisJdm9pZCAqdHVuZXJfY29uZmlnWzRdOworCisJaW50ICgqZGVtb2RfYXR0YWNoWzRdKShzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqKTsKKwlpbnQgKCp0dW5lcl9hdHRhY2hbNF0pKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopOworCisJdTggICAgYXZmWzRdOworCXU4ICAgIG1zcFs0XTsKKwl1OCAgICBkZW1vZGFbNF07CisJdTggICAgbG5iWzRdOworCWludCAgIGkyY19hY2Nlc3M7CisJdTggICAgbnRzYzsKKwl1OCAgICB0c2ZbNF07CisJdTggICAgaTJzWzRdOworCisJaW50ICgqZ2F0ZV9jdHJsKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGludCk7CisJaW50ICgqc3dpdGNoX2N0cmwpKHN0cnVjdCBuZ2VuZV9jaGFubmVsICosIGludCwgaW50KTsKK307CisKKyNpZmRlZiBOR0VORV9WNEwKK3N0cnVjdCBuZ2VuZV9mb3JtYXR7CisJY2hhciAqbmFtZTsKKwlpbnQgICBmb3VyY2M7ICAgICAgICAgIC8qIHZpZGVvNGxpbnV4IDIgICAgICAqLworCWludCAgIGJ0Zm9ybWF0OyAgICAgICAgLyogQlQ4NDhfQ09MT1JfRk1UXyogICovCisJaW50ICAgZm9ybWF0OworCWludCAgIGJ0c3dhcDsgICAgICAgICAgLyogQlQ4NDhfQ09MT1JfQ1RMXyogICovCisJaW50ICAgZGVwdGg7ICAgICAgICAgICAvKiBiaXQvcGl4ZWwgICAgICAgICAgKi8KKwlpbnQgICBmbGFnczsKKwlpbnQgICBoc2hpZnQsIHZzaGlmdDsgIC8qIGZvciBwbGFuYXIgbW9kZXMgICAqLworCWludCAgIHBhbGV0dGU7Cit9OworCisjZGVmaW5lIFJFU09VUkNFX09WRVJMQVkgICAgICAgMQorI2RlZmluZSBSRVNPVVJDRV9WSURFTyAgICAgICAgIDIKKyNkZWZpbmUgUkVTT1VSQ0VfVkJJICAgICAgICAgICA0CisKK3N0cnVjdCBuZ2VuZV9idWZmZXIgeworCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICAgICB2YjsKKworCS8qIG5nZW5lIHNwZWNpZmljICovCisJY29uc3Qgc3RydWN0IG5nZW5lX2Zvcm1hdCAqZm10OworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHR2bm9ybTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBidGZvcm1hdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBidHN3YXA7Cit9OworI2VuZGlmCisKKworI2VuZGlmCisKKy8qICBMb2NhbFdvcmRzOiAgRW5kaWYKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwppbmRleCAxMDY3YjIyLi5jZmY3N2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtNjIsNiArNjIsNyBAQAogCVtTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNXSA9IHsKIAkJLm5hbWUJPSAiSGF1cHBhdWdlIFdpblRWIE1pbmlTdGljayIsCiAJCS50eXBlCT0gU01TX05PVkFfQjAsCisJCS5md1tERVZJQ0VfTU9ERV9JU0RCVF9CREFdID0gInNtczF4eHgtaGN3LTU1eHh4LWlzZGJ0LTAyLmZ3IiwKIAkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LWhjdy01NXh4eC1kdmJ0LTAyLmZ3IiwKIAkJLmJvYXJkX2NmZy5sZWRzX3Bvd2VyID0gMjYsCiAJCS5ib2FyZF9jZmcubGVkMCA9IDI3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCmluZGV4IGNhNzU4YmMuLjRiZmQzNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTE0NTksOCArMTQ1OSwxMCBAQAogCWlmICghKGNvcmVkZXYtPmRldmljZV9mbGFncyAmIFNNU19ERVZJQ0VfRkFNSUxZMikpIHsKIAkJcE1zZy0+eE1zZ0hlYWRlci5tc2dUeXBlID0gTVNHX1NNU19HUElPX0NPTkZJR19SRVE7CiAJCWlmIChHZXRHcGlvUGluUGFyYW1zKFBpbk51bSwgJlRyYW5zbGF0ZWRQaW5OdW0sICZHcm91cE51bSwKLQkJCQkmZ3JvdXBDZmcpICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkmZ3JvdXBDZmcpICE9IDApIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZnJlZTsKKwkJfQogCiAJCXBNc2ctPm1zZ0RhdGFbMV0gPSBUcmFuc2xhdGVkUGluTnVtOwogCQlwTXNnLT5tc2dEYXRhWzJdID0gR3JvdXBOdW07CkBAIC0xNDkwLDYgKzE0OTIsNyBAQAogCQllbHNlCiAJCQlzbXNfZXJyKCJzbXNjb3JlX2dwaW9fY29uZmlndXJlIGVycm9yIik7CiAJfQorZnJlZToKIAlrZnJlZShidWZmZXIpOwogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCmluZGV4IGVlYzE4YWEuLjhlY2FkZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKQEAgLTIxMiw2ICsyMTIsOCBAQAogI2RlZmluZSBNU0dfU01TX0RBQl9DSEFOTkVMCQkJCTYwNwogI2RlZmluZSBNU0dfU01TX0dFVF9QSURfRklMVEVSX0xJU1RfUkVRCQkJNjA4CiAjZGVmaW5lIE1TR19TTVNfR0VUX1BJRF9GSUxURVJfTElTVF9SRVMJCQk2MDkKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVMJCQk2MTYKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVEJCQk2MTUKICNkZWZpbmUgTVNHX1NNU19IT19QRVJfU0xJQ0VTX0lORAkJCTYzMAogI2RlZmluZSBNU0dfU01TX1NFVF9BTlRFTk5BX0NPTkZJR19SRVEJCQk2NTEKICNkZWZpbmUgTVNHX1NNU19TRVRfQU5URU5OQV9DT05GSUdfUkVTCQkJNjUyCkBAIC0zMzksNyArMzQxLDcgQEAKIAogLyogU3RhdGlzdGljcyBpbmZvcm1hdGlvbiByZXR1cm5lZCBhcyByZXNwb25zZSBmb3IKICAqIFNtc0hvc3RBcGlHZXRTdGF0aXN0aWNzX1JlcSAqLwotc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TIHsKK3N0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfU1QgewogCXUzMiBSZXNlcnZlZDsJCS8qIFJlc2VydmVkICovCiAKIAkvKiBDb21tb24gcGFyYW1ldGVycyAqLwpAQCAtNDI0LDYgKzQyNiw3OSBAQAogCXUzMiBSZXNlcnZlZEZpZWxkc1sxMF07CS8qIFJlc2VydmVkICovCiB9OwogCitzdHJ1Y3QgU21zTXNnU3RhdGlzdGljc0luZm9fU1QgeworCXUzMiBSZXF1ZXN0UmVzdWx0OworCisJc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TVCBTdGF0OworCisJLyogU3BsaXQgdGhlIGNhbGMgb2YgdGhlIFNOUiBpbiBEQUIgKi8KKwl1MzIgU2lnbmFsOyAvKiBkQiAqLworCXUzMiBOb2lzZTsgLyogZEIgKi8KKworfTsKKworc3RydWN0IFNNU0hPU1RMSUJfSVNEQlRfTEFZRVJfU1RBVF9TVCB7CisJLyogUGVyLWxheWVyIGluZm9ybWF0aW9uICovCisJdTMyIENvZGVSYXRlOyAvKiBDb2RlIFJhdGUgZnJvbSBTTVNIT1NUTElCX0NPREVfUkFURV9FVCwKKwkJICAgICAgICogMjU1IG1lYW5zIGxheWVyIGRvZXMgbm90IGV4aXN0ICovCisJdTMyIENvbnN0ZWxsYXRpb247IC8qIENvbnN0ZWxsYXRpb24gZnJvbSBTTVNIT1NUTElCX0NPTlNURUxMQVRJT05fRVQsCisJCQkgICAgKiAyNTUgbWVhbnMgbGF5ZXIgZG9lcyBub3QgZXhpc3QgKi8KKwl1MzIgQkVSOyAvKiBQb3N0IFZpdGVyYmkgQkVSIFsxRS01XSwgMHhGRkZGRkZGRiBpbmRpY2F0ZSBOL0EgKi8KKwl1MzIgQkVSRXJyb3JDb3VudDsgLyogUG9zdCBWaXRlcmJpIEVycm9yIEJpdHMgQ291bnQgKi8KKwl1MzIgQkVSQml0Q291bnQ7IC8qIFBvc3QgVml0ZXJiaSBUb3RhbCBCaXRzIENvdW50ICovCisJdTMyIFByZUJFUjsgLyogUHJlIFZpdGVyYmkgQkVSIFsxRS01XSwgMHhGRkZGRkZGRiBpbmRpY2F0ZSBOL0EgKi8KKwl1MzIgVFNfUEVSOyAvKiBUcmFuc3BvcnQgc3RyZWFtIFBFUiBbJV0sIDB4RkZGRkZGRkYgaW5kaWNhdGUgTi9BICovCisJdTMyIEVycm9yVFNQYWNrZXRzOyAvKiBOdW1iZXIgb2YgZXJyb25lb3VzIHRyYW5zcG9ydC1zdHJlYW0gcGFja2V0cyAqLworCXUzMiBUb3RhbFRTUGFja2V0czsgLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zcG9ydC1zdHJlYW0gcGFja2V0cyAqLworCXUzMiBUSUxkZXB0aEk7IC8qIFRpbWUgaW50ZXJsZWF2ZXIgZGVwdGggSSBwYXJhbWV0ZXIsCisJCQkqIDI1NSBtZWFucyBsYXllciBkb2VzIG5vdCBleGlzdCAqLworCXUzMiBOdW1iZXJPZlNlZ21lbnRzOyAvKiBOdW1iZXIgb2Ygc2VnbWVudHMgaW4gbGF5ZXIgQSwKKwkJCSAgICAgICAqIDI1NSBtZWFucyBsYXllciBkb2VzIG5vdCBleGlzdCAqLworCXUzMiBUTUNDRXJyb3JzOyAvKiBUTUNDIGVycm9ycyAqLworfTsKKworc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19JU0RCVF9TVCB7CisJdTMyIFN0YXRpc3RpY3NUeXBlOyAvKiBFbnVtZXJhdG9yIGlkZW50aWZ5aW5nIHRoZSB0eXBlIG9mIHRoZQorCQkJCSogc3RydWN0dXJlLiAgVmFsdWVzIGFyZSB0aGUgc2FtZSBhcworCQkJCSogU01TSE9TVExJQl9ERVZJQ0VfTU9ERVNfRQorCQkJCSoKKwkJCQkqIFRoaXMgZmllbGQgTVVTVCBhbHdheXMgYmUgZmlyc3QgaW4gYW55CisJCQkJKiBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLworCisJdTMyIEZ1bGxTaXplOyAvKiBUb3RhbCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgdGhlIG1vZGVtLgorCQkgICAgICAgKiBJZiB0aGUgc2l6ZSByZXF1ZXN0ZWQgYnkgdGhlIGhvc3QgaXMgc21hbGxlciB0aGFuCisJCSAgICAgICAqIEZ1bGxTaXplLCB0aGUgc3RydWN0IHdpbGwgYmUgdHJ1bmNhdGVkICovCisKKwkvKiBDb21tb24gcGFyYW1ldGVycyAqLworCXUzMiBJc1JmTG9ja2VkOyAvKiAwIC0gbm90IGxvY2tlZCwgMSAtIGxvY2tlZCAqLworCXUzMiBJc0RlbW9kTG9ja2VkOyAvKiAwIC0gbm90IGxvY2tlZCwgMSAtIGxvY2tlZCAqLworCXUzMiBJc0V4dGVybmFsTE5BT247IC8qIDAgLSBleHRlcm5hbCBMTkEgb2ZmLCAxIC0gZXh0ZXJuYWwgTE5BIG9uICovCisKKwkvKiBSZWNlcHRpb24gcXVhbGl0eSAqLworCXMzMiAgU05SOyAvKiBkQiAqLworCXMzMiAgUlNTSTsgLyogZEJtICovCisJczMyICBJbkJhbmRQd3I7IC8qIEluIGJhbmQgcG93ZXIgaW4gZEJNICovCisJczMyICBDYXJyaWVyT2Zmc2V0OyAvKiBDYXJyaWVyIE9mZnNldCBpbiBIeiAqLworCisJLyogVHJhbnNtaXNzaW9uIHBhcmFtZXRlcnMgKi8KKwl1MzIgRnJlcXVlbmN5OyAvKiBGcmVxdWVuY3kgaW4gSHogKi8KKwl1MzIgQmFuZHdpZHRoOyAvKiBCYW5kd2lkdGggaW4gTUh6ICovCisJdTMyIFRyYW5zbWlzc2lvbk1vZGU7IC8qIElTREItVCB0cmFuc21pc3Npb24gbW9kZSAqLworCXUzMiBNb2RlbVN0YXRlOyAvKiAwIC0gQWNxdWlzaXRpb24sIDEgLSBMb2NrZWQgKi8KKwl1MzIgR3VhcmRJbnRlcnZhbDsgLyogR3VhcmQgSW50ZXJ2YWwsIDEgZGl2aWRlZCBieSB2YWx1ZSAqLworCXUzMiBTeXN0ZW1UeXBlOyAvKiBJU0RCLVQgc3lzdGVtIHR5cGUgKElTREItVCAvIElTREItVHNiKSAqLworCXUzMiBQYXJ0aWFsUmVjZXB0aW9uOyAvKiBUUlVFIC0gcGFydGlhbCByZWNlcHRpb24sIEZBTFNFIG90aGVyd2lzZSAqLworCXUzMiBOdW1PZkxheWVyczsgLyogTnVtYmVyIG9mIElTREItVCBsYXllcnMgaW4gdGhlIG5ldHdvcmsgKi8KKworCS8qIFBlci1sYXllciBpbmZvcm1hdGlvbiAqLworCS8qIExheWVycyBBLCBCIGFuZCBDICovCisJc3RydWN0IFNNU0hPU1RMSUJfSVNEQlRfTEFZRVJfU1RBVF9TVAlMYXllckluZm9bM107CisJLyogUGVyLWxheWVyIHN0YXRpc3RpY3MsIHNlZSBTTVNIT1NUTElCX0lTREJUX0xBWUVSX1NUQVRfU1QgKi8KKworCS8qIEludGVyZmFjZSBpbmZvcm1hdGlvbiAqLworCXUzMiBTbXNUb0hvc3RUeEVycm9yczsgLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbiBlcnJvcnMuICovCit9OworCiBzdHJ1Y3QgUElEX1NUQVRJU1RJQ1NfREFUQV9TIHsKIAlzdHJ1Y3QgUElEX0JVUlNUX1MgewogCQl1MzIgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKaW5kZXggNjhiZjlmYi4uNWYzOTM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKQEAgLTExNiw2ICsxMTYsMTE4IEBACiAJfQogfQogCisKK3N0YXRpYyB2b2lkIHNtc2R2Yl91cGRhdGVfZHZiX3N0YXRzKHN0cnVjdCBSRUNFUFRJT05fU1RBVElTVElDU19TICpwUmVjZXB0aW9uRGF0YSwKKwkJCQkgICBzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX1NUICpwKQoreworCWlmIChzbXNfZGJnICYgMikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzZXJ2ZWQgPSAlZCIsIHAtPlJlc2VydmVkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzUmZMb2NrZWQgPSAlZCIsIHAtPklzUmZMb2NrZWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNEZW1vZExvY2tlZCA9ICVkIiwgcC0+SXNEZW1vZExvY2tlZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc0V4dGVybmFsTE5BT24gPSAlZCIsIHAtPklzRXh0ZXJuYWxMTkFPbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJTTlIgPSAlZCIsIHAtPlNOUik7CisJCXByaW50ayhLRVJOX0RFQlVHICJCRVIgPSAlZCIsIHAtPkJFUik7CisJCXByaW50ayhLRVJOX0RFQlVHICJGSUJfQ1JDID0gJWQiLCBwLT5GSUJfQ1JDKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRTX1BFUiA9ICVkIiwgcC0+VFNfUEVSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1GRVIgPSAlZCIsIHAtPk1GRVIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUlNTSSA9ICVkIiwgcC0+UlNTSSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJbkJhbmRQd3IgPSAlZCIsIHAtPkluQmFuZFB3cik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDYXJyaWVyT2Zmc2V0ID0gJWQiLCBwLT5DYXJyaWVyT2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZyZXF1ZW5jeSA9ICVkIiwgcC0+RnJlcXVlbmN5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhbmR3aWR0aCA9ICVkIiwgcC0+QmFuZHdpZHRoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRyYW5zbWlzc2lvbk1vZGUgPSAlZCIsIHAtPlRyYW5zbWlzc2lvbk1vZGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTW9kZW1TdGF0ZSA9ICVkIiwgcC0+TW9kZW1TdGF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJHdWFyZEludGVydmFsID0gJWQiLCBwLT5HdWFyZEludGVydmFsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvZGVSYXRlID0gJWQiLCBwLT5Db2RlUmF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJMUENvZGVSYXRlID0gJWQiLCBwLT5MUENvZGVSYXRlKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkhpZXJhcmNoeSA9ICVkIiwgcC0+SGllcmFyY2h5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvbnN0ZWxsYXRpb24gPSAlZCIsIHAtPkNvbnN0ZWxsYXRpb24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiQnVyc3RTaXplID0gJWQiLCBwLT5CdXJzdFNpemUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQnVyc3REdXJhdGlvbiA9ICVkIiwgcC0+QnVyc3REdXJhdGlvbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJCdXJzdEN5Y2xlVGltZSA9ICVkIiwgcC0+QnVyc3RDeWNsZVRpbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2FsY3VsYXRlZEJ1cnN0Q3ljbGVUaW1lID0gJWQiLCBwLT5DYWxjdWxhdGVkQnVyc3RDeWNsZVRpbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZSb3dzID0gJWQiLCBwLT5OdW1PZlJvd3MpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZQYWRkQ29scyA9ICVkIiwgcC0+TnVtT2ZQYWRkQ29scyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZlB1bmN0Q29scyA9ICVkIiwgcC0+TnVtT2ZQdW5jdENvbHMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRXJyb3JUU1BhY2tldHMgPSAlZCIsIHAtPkVycm9yVFNQYWNrZXRzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRvdGFsVFNQYWNrZXRzID0gJWQiLCBwLT5Ub3RhbFRTUGFja2V0cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZlZhbGlkTXBlVGxicyA9ICVkIiwgcC0+TnVtT2ZWYWxpZE1wZVRsYnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZJbnZhbGlkTXBlVGxicyA9ICVkIiwgcC0+TnVtT2ZJbnZhbGlkTXBlVGxicyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZkNvcnJlY3RlZE1wZVRsYnMgPSAlZCIsIHAtPk51bU9mQ29ycmVjdGVkTXBlVGxicyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJCRVJFcnJvckNvdW50ID0gJWQiLCBwLT5CRVJFcnJvckNvdW50KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJFUkJpdENvdW50ID0gJWQiLCBwLT5CRVJCaXRDb3VudCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJTbXNUb0hvc3RUeEVycm9ycyA9ICVkIiwgcC0+U21zVG9Ib3N0VHhFcnJvcnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUHJlQkVSID0gJWQiLCBwLT5QcmVCRVIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2VsbElkID0gJWQiLCBwLT5DZWxsSWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRHZiaFNydkluZEhQID0gJWQiLCBwLT5EdmJoU3J2SW5kSFApOworCQlwcmludGsoS0VSTl9ERUJVRyAiRHZiaFNydkluZExQID0gJWQiLCBwLT5EdmJoU3J2SW5kTFApOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtTVBFUmVjZWl2ZWQgPSAlZCIsIHAtPk51bU1QRVJlY2VpdmVkKTsKKwl9CisKKwlwUmVjZXB0aW9uRGF0YS0+SXNEZW1vZExvY2tlZCA9IHAtPklzRGVtb2RMb2NrZWQ7CisKKwlwUmVjZXB0aW9uRGF0YS0+U05SID0gcC0+U05SOworCXBSZWNlcHRpb25EYXRhLT5CRVIgPSBwLT5CRVI7CisJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgPSBwLT5CRVJFcnJvckNvdW50OworCXBSZWNlcHRpb25EYXRhLT5JbkJhbmRQd3IgPSBwLT5JbkJhbmRQd3I7CisJcFJlY2VwdGlvbkRhdGEtPkVycm9yVFNQYWNrZXRzID0gcC0+RXJyb3JUU1BhY2tldHM7Cit9OworCisKK3N0YXRpYyB2b2lkIHNtc2R2Yl91cGRhdGVfaXNkYnRfc3RhdHMoc3RydWN0IFJFQ0VQVElPTl9TVEFUSVNUSUNTX1MgKnBSZWNlcHRpb25EYXRhLAorCQkJCSAgICBzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX0lTREJUX1NUICpwKQoreworCWludCBpOworCisJaWYgKHNtc19kYmcgJiAyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc1JmTG9ja2VkID0gJWQiLCBwLT5Jc1JmTG9ja2VkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzRGVtb2RMb2NrZWQgPSAlZCIsIHAtPklzRGVtb2RMb2NrZWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNFeHRlcm5hbExOQU9uID0gJWQiLCBwLT5Jc0V4dGVybmFsTE5BT24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiU05SID0gJWQiLCBwLT5TTlIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUlNTSSA9ICVkIiwgcC0+UlNTSSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJbkJhbmRQd3IgPSAlZCIsIHAtPkluQmFuZFB3cik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDYXJyaWVyT2Zmc2V0ID0gJWQiLCBwLT5DYXJyaWVyT2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZyZXF1ZW5jeSA9ICVkIiwgcC0+RnJlcXVlbmN5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhbmR3aWR0aCA9ICVkIiwgcC0+QmFuZHdpZHRoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRyYW5zbWlzc2lvbk1vZGUgPSAlZCIsIHAtPlRyYW5zbWlzc2lvbk1vZGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTW9kZW1TdGF0ZSA9ICVkIiwgcC0+TW9kZW1TdGF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJHdWFyZEludGVydmFsID0gJWQiLCBwLT5HdWFyZEludGVydmFsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlN5c3RlbVR5cGUgPSAlZCIsIHAtPlN5c3RlbVR5cGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUGFydGlhbFJlY2VwdGlvbiA9ICVkIiwgcC0+UGFydGlhbFJlY2VwdGlvbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZkxheWVycyA9ICVkIiwgcC0+TnVtT2ZMYXllcnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiU21zVG9Ib3N0VHhFcnJvcnMgPSAlZCIsIHAtPlNtc1RvSG9zdFR4RXJyb3JzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IENvZGVSYXRlID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQ29kZVJhdGUpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBDb25zdGVsbGF0aW9uID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQ29uc3RlbGxhdGlvbik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEJFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLkJFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEJFUkVycm9yQ291bnQgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5CRVJFcnJvckNvdW50KTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogQkVSQml0Q291bnQgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5CRVJCaXRDb3VudCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IFByZUJFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlByZUJFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IFRTX1BFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRTX1BFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEVycm9yVFNQYWNrZXRzID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uRXJyb3JUU1BhY2tldHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBUb3RhbFRTUGFja2V0cyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRvdGFsVFNQYWNrZXRzKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogVElMZGVwdGhJID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uVElMZGVwdGhJKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogTnVtYmVyT2ZTZWdtZW50cyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLk51bWJlck9mU2VnbWVudHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBUTUNDRXJyb3JzID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uVE1DQ0Vycm9ycyk7CisJCX0KKwl9CisKKwlwUmVjZXB0aW9uRGF0YS0+SXNEZW1vZExvY2tlZCA9IHAtPklzRGVtb2RMb2NrZWQ7CisKKwlwUmVjZXB0aW9uRGF0YS0+U05SID0gcC0+U05SOworCXBSZWNlcHRpb25EYXRhLT5JbkJhbmRQd3IgPSBwLT5JbkJhbmRQd3I7CisKKwlwUmVjZXB0aW9uRGF0YS0+RXJyb3JUU1BhY2tldHMgPSAwOworCXBSZWNlcHRpb25EYXRhLT5CRVIgPSAwOworCXBSZWNlcHRpb25EYXRhLT5CRVJFcnJvckNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXBSZWNlcHRpb25EYXRhLT5CRVIgKz0gcC0+TGF5ZXJJbmZvW2ldLkJFUjsKKwkJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgKz0gcC0+TGF5ZXJJbmZvW2ldLkJFUkVycm9yQ291bnQ7CisJCXBSZWNlcHRpb25EYXRhLT5FcnJvclRTUGFja2V0cyArPSBwLT5MYXllckluZm9baV0uRXJyb3JUU1BhY2tldHM7CisJfQorfQorCiBzdGF0aWMgaW50IHNtc2R2Yl9vbnJlc3BvbnNlKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYikKIHsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPSAoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqKSBjb250ZXh0OwpAQCAtMTM0LDYgKzI0Niw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNU0dfU01TX1JGX1RVTkVfUkVTOgorCWNhc2UgTVNHX1NNU19JU0RCVF9UVU5FX1JFUzoKIAkJY29tcGxldGUoJmNsaWVudC0+dHVuZV9kb25lKTsKIAkJYnJlYWs7CiAKQEAgLTIxNyw2ICszMzAsNDAgQEAKIAkJaXNfc3RhdHVzX3VwZGF0ZSA9IHRydWU7CiAJCWJyZWFrOwogCX0KKwljYXNlIE1TR19TTVNfR0VUX1NUQVRJU1RJQ1NfUkVTOiB7CisJCXVuaW9uIHsKKwkJCXN0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfSVNEQlRfU1QgIGlzZGJ0OworCQkJc3RydWN0IFNtc01zZ1N0YXRpc3RpY3NJbmZvX1NUICAgICAgICAgZHZiOworCQl9ICpwID0gKHZvaWQgKikgKHBoZHIgKyAxKTsKKwkJc3RydWN0IFJFQ0VQVElPTl9TVEFUSVNUSUNTX1MgKnBSZWNlcHRpb25EYXRhID0KKwkJCQkmY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YTsKKworCQlzbXNfaW5mbygiTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVMiKTsKKworCQlpc19zdGF0dXNfdXBkYXRlID0gdHJ1ZTsKKworCQlzd2l0Y2ggKHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKGNsaWVudC0+Y29yZWRldikpIHsKKwkJY2FzZSBERVZJQ0VfTU9ERV9JU0RCVDoKKwkJY2FzZSBERVZJQ0VfTU9ERV9JU0RCVF9CREE6CisJCQlzbXNkdmJfdXBkYXRlX2lzZGJ0X3N0YXRzKHBSZWNlcHRpb25EYXRhLCAmcC0+aXNkYnQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzbXNkdmJfdXBkYXRlX2R2Yl9zdGF0cyhwUmVjZXB0aW9uRGF0YSwgJnAtPmR2Yi5TdGF0KTsKKwkJfQorCQlpZiAoIXBSZWNlcHRpb25EYXRhLT5Jc0RlbW9kTG9ja2VkKSB7CisJCQlwUmVjZXB0aW9uRGF0YS0+U05SID0gMDsKKwkJCXBSZWNlcHRpb25EYXRhLT5CRVIgPSAwOworCQkJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgPSAwOworCQkJcFJlY2VwdGlvbkRhdGEtPkluQmFuZFB3ciA9IDA7CisJCQlwUmVjZXB0aW9uRGF0YS0+RXJyb3JUU1BhY2tldHMgPSAwOworCQl9CisKKwkJY29tcGxldGUoJmNsaWVudC0+dHVuZV9kb25lKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXNtc19pbmZvKCJVbmhhbmRsZWQgbWVzc2FnZSAlZCIsIHBoZHItPm1zZ1R5cGUpOworCiAJfQogCXNtc2NvcmVfcHV0YnVmZmVyKGNsaWVudC0+Y29yZWRldiwgY2IpOwogCkBAIC0yMzMsMTAgKzM4MCwxMCBAQAogCQkJCQkJRFZCM19FVkVOVF9VTkNfRVJSKTsKIAogCQl9IGVsc2UgewotCQkJLypjbGllbnQtPmZlX3N0YXR1cyA9Ci0JCQkJKHBoZHItPm1zZ1R5cGUgPT0gTVNHX1NNU19OT19TSUdOQUxfSU5EKSA/Ci0JCQkJMCA6IEZFX0hBU19TSUdOQUw7Ki8KLQkJCWNsaWVudC0+ZmVfc3RhdHVzID0gMDsKKwkJCWlmIChjbGllbnQtPnNtc19zdGF0X2R2Yi5SZWNlcHRpb25EYXRhLklzUmZMb2NrZWQpCisJCQkJY2xpZW50LT5mZV9zdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVI7CisJCQllbHNlCisJCQkJY2xpZW50LT5mZV9zdGF0dXMgPSAwOwogCQkJc21zX2JvYXJkX2R2YjNfZXZlbnQoY2xpZW50LCBEVkIzX0VWRU5UX0ZFX1VOTE9DSyk7CiAJCX0KIAl9CkBAIC0zMjUsNiArNDcyLDIwIEBACiAJCQkJCQkwIDogLUVUSU1FOwogfQogCitzdGF0aWMgaW50IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQpCit7CisJaW50IHJjOworCXN0cnVjdCBTbXNNc2dIZHJfU1QgTXNnID0geyBNU0dfU01TX0dFVF9TVEFUSVNUSUNTX1JFUSwKKwkJCQkgICAgRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQsCisJCQkJICAgIEhJRl9UQVNLLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCksIDAgfTsKKworCXJjID0gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCSAgJmNsaWVudC0+dHVuZV9kb25lKTsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbGVkX2ZlZWRiYWNrKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCkKIHsKIAlpZiAoY2xpZW50LT5mZV9zdGF0dXMgJiBGRV9IQVNfTE9DSykKQEAgLTMzNywzMyArNDk4LDQzIEBACiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdCkKIHsKKwlpbnQgcmM7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OwogCWNsaWVudCA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCisJcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKwogCSpzdGF0ID0gY2xpZW50LT5mZV9zdGF0dXM7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQogeworCWludCByYzsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQ7CiAJY2xpZW50ID0gY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKKwlyYyA9IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChjbGllbnQpOworCiAJKmJlciA9IGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuQkVSOwogCiAJbGVkX2ZlZWRiYWNrKGNsaWVudCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQogeworCWludCByYzsKKwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAlpZiAoY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YS5JbkJhbmRQd3IgPCAtOTUpCiAJCSpzdHJlbmd0aCA9IDA7CiAJCWVsc2UgaWYgKGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuSW5CYW5kUHdyID4gLTI5KQpAQCAtMzc1LDMxICs1NDYsMzcgQEAKIAogCWxlZF9mZWVkYmFjayhjbGllbnQpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHNtc2R2Yl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CisJaW50IHJjOwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAkqc25yID0gY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YS5TTlI7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKKwlpbnQgcmM7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OwogCWNsaWVudCA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCisJcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKwogCSp1Y2Jsb2NrcyA9IGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuRXJyb3JUU1BhY2tldHM7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCkBAIC00MTMsOSArNTkwLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21zZHZiX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3N0YXRpYyBpbnQgc21zZHZiX2R2YnRfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KIAkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKQEAgLTQyOSwyNCArNjA3LDMzIEBACiAJY2xpZW50LT5mZV9zdGF0dXMgPSBGRV9IQVNfU0lHTkFMOwogCWNsaWVudC0+ZXZlbnRfZmVfc3RhdGUgPSAtMTsKIAljbGllbnQtPmV2ZW50X3VuY19zdGF0ZSA9IC0xOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlQ7CiAKIAlNc2cuTXNnLm1zZ1NyY0lkID0gRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQ7CiAJTXNnLk1zZy5tc2dEc3RJZCA9IEhJRl9UQVNLOwogCU1zZy5Nc2cubXNnRmxhZ3MgPSAwOwogCU1zZy5Nc2cubXNnVHlwZSA9IE1TR19TTVNfUkZfVFVORV9SRVE7CiAJTXNnLk1zZy5tc2dMZW5ndGggPSBzaXplb2YoTXNnKTsKLQlNc2cuRGF0YVswXSA9IGZlcC0+ZnJlcXVlbmN5OworCU1zZy5EYXRhWzBdID0gYy0+ZnJlcXVlbmN5OwogCU1zZy5EYXRhWzJdID0gMTIwMDAwMDA7CiAKLQlzbXNfZGVidWcoImZyZXEgJWQgYmFuZCAlZCIsCi0JCSAgZmVwLT5mcmVxdWVuY3ksIGZlcC0+dS5vZmRtLmJhbmR3aWR0aCk7CisJc21zX2luZm8oIiVzOiBmcmVxICVkIGJhbmQgJWQiLCBfX2Z1bmNfXywgYy0+ZnJlcXVlbmN5LAorCQkgYy0+YmFuZHdpZHRoX2h6KTsKIAotCXN3aXRjaCAoZmVwLT51Lm9mZG0uYmFuZHdpZHRoKSB7Ci0JY2FzZSBCQU5EV0lEVEhfOF9NSFo6IE1zZy5EYXRhWzFdID0gQldfOF9NSFo7IGJyZWFrOwotCWNhc2UgQkFORFdJRFRIXzdfTUhaOiBNc2cuRGF0YVsxXSA9IEJXXzdfTUhaOyBicmVhazsKLQljYXNlIEJBTkRXSURUSF82X01IWjogTXNnLkRhdGFbMV0gPSBCV182X01IWjsgYnJlYWs7Ci0JY2FzZSBCQU5EV0lEVEhfQVVUTzogcmV0dXJuIC1FT1BOT1RTVVBQOwotCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoYy0+YmFuZHdpZHRoX2h6IC8gMTAwMDAwMCkgeworCWNhc2UgODoKKwkJTXNnLkRhdGFbMV0gPSBCV184X01IWjsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlNc2cuRGF0YVsxXSA9IEJXXzdfTUhaOworCQlicmVhazsKKwljYXNlIDY6CisJCU1zZy5EYXRhWzFdID0gQldfNl9NSFo7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBEaXNhYmxlIExOQSwgaWYgYW55LiBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBubyBMTkEgaXMgcHJlc2VudCAqLwogCXJldCA9IHNtc19ib2FyZF9sbmFfY29udHJvbChjbGllbnQtPmNvcmVkZXYsIDApOwpAQCAtNDcwLDYgKzY1Nyw5MCBAQAogCQkJCQkgICAmY2xpZW50LT50dW5lX2RvbmUpOwogfQogCitzdGF0aWMgaW50IHNtc2R2Yl9pc2RidF9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KKwkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgU21zTXNnSGRyX1NUCU1zZzsKKwkJdTMyCQlEYXRhWzRdOworCX0gTXNnOworCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfSVNEQlQ7CisKKwlNc2cuTXNnLm1zZ1NyY0lkICA9IERWQlRfQkRBX0NPTlRST0xfTVNHX0lEOworCU1zZy5Nc2cubXNnRHN0SWQgID0gSElGX1RBU0s7CisJTXNnLk1zZy5tc2dGbGFncyAgPSAwOworCU1zZy5Nc2cubXNnVHlwZSAgID0gTVNHX1NNU19JU0RCVF9UVU5FX1JFUTsKKwlNc2cuTXNnLm1zZ0xlbmd0aCA9IHNpemVvZihNc2cpOworCisJaWYgKGMtPmlzZGJ0X3NiX3NlZ21lbnRfaWR4ID09IC0xKQorCQljLT5pc2RidF9zYl9zZWdtZW50X2lkeCA9IDA7CisKKwlzd2l0Y2ggKGMtPmlzZGJ0X3NiX3NlZ21lbnRfY291bnQpIHsKKwljYXNlIDM6CisJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfM1NFRzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzFTRUc7CisJCWJyZWFrOworCWNhc2UgMDoJLyogQVVUTyAqLworCQlzd2l0Y2ggKGMtPmJhbmR3aWR0aF9oeiAvIDEwMDAwMDApIHsKKwkJY2FzZSA4OgorCQljYXNlIDc6CisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMzsKKwkJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfM1NFRzsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMTsKKwkJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfMVNFRzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvKiBBc3N1bWVzIDYgTUhaIGJ3ICovCisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMTsKKwkJCWMtPmJhbmR3aWR0aF9oeiA9IDYwMDA7CisJCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzFTRUc7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbXNfaW5mbygiU2VnbWVudCBjb3VudCAlZCBub3Qgc3VwcG9ydGVkIiwgYy0+aXNkYnRfc2Jfc2VnbWVudF9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCU1zZy5EYXRhWzBdID0gYy0+ZnJlcXVlbmN5OworCU1zZy5EYXRhWzJdID0gMTIwMDAwMDA7CisJTXNnLkRhdGFbM10gPSBjLT5pc2RidF9zYl9zZWdtZW50X2lkeDsKKworCXNtc19pbmZvKCIlczogZnJlcSAlZCBzZWd3aWR0aCAlZCBzZWdpbmRleCAlZFxuIiwgX19mdW5jX18sCisJCSBjLT5mcmVxdWVuY3ksIGMtPmlzZGJ0X3NiX3NlZ21lbnRfY291bnQsCisJCSBjLT5pc2RidF9zYl9zZWdtZW50X2lkeCk7CisKKwlyZXR1cm4gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCSAgICZjbGllbnQtPnR1bmVfZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgc21zZHZiX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPQorCQljb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKKwlzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiA9IGNsaWVudC0+Y29yZWRldjsKKworCXN3aXRjaCAoc21zY29yZV9nZXRfZGV2aWNlX21vZGUoY29yZWRldikpIHsKKwljYXNlIERFVklDRV9NT0RFX0RWQlQ6CisJY2FzZSBERVZJQ0VfTU9ERV9EVkJUX0JEQToKKwkJcmV0dXJuIHNtc2R2Yl9kdmJ0X3NldF9mcm9udGVuZChmZSwgZmVwKTsKKwljYXNlIERFVklDRV9NT0RFX0lTREJUOgorCWNhc2UgREVWSUNFX01PREVfSVNEQlRfQkRBOgorCQlyZXR1cm4gc21zZHZiX2lzZGJ0X3NldF9mcm9udGVuZChmZSwgZmVwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgc21zZHZiX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKIHsKQEAgLTU1NywxMyArODI4LDYgQEAKIAkvKiBkZXZpY2UgcmVtb3ZhbCBoYW5kbGVkIGJ5IG9ucmVtb3ZlIGNhbGxiYWNrICovCiAJaWYgKCFhcnJpdmFsKQogCQlyZXR1cm4gMDsKLQotCWlmIChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZShjb3JlZGV2KSAhPSBERVZJQ0VfTU9ERV9EVkJUX0JEQSkgewotCQlzbXNfZXJyKCJTTVMgRGV2aWNlIG1vZGUgaXMgbm90IHNldCBmb3IgIgotCQkJIkRWQiBvcGVyYXRpb24uIik7Ci0JCXJldHVybiAwOwotCX0KLQogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsaWVudCkgewogCQlzbXNfZXJyKCJrbWFsbG9jKCkgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuYwppbmRleCBlM2Q3NzZmLi5hNTZlYWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2lyLmMKQEAgLTg1LDkgKzg1LDkgQEAKIAkJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi11MzIgaXJfcG9zOwotdTMyCWlyX3dvcmQ7Ci11MzIgaXJfdG9nZ2xlOworc3RhdGljIHUzMiBpcl9wb3M7CitzdGF0aWMgdTMyIGlyX3dvcmQ7CitzdGF0aWMgdTMyIGlyX3RvZ2dsZTsKIAogI2RlZmluZSBSQzVfUFVTSF9CSVQoZHN0LCBiaXQsIHBvcykJXAogCXsgZHN0IDw8PSAxOyBkc3QgfD0gYml0OyBwb3MrKzsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwppbmRleCAyM2ExYzYzLi5iMDcwZTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwpAQCAtMjY4LDggKzI2OCw4IEBACiAKIAogLyogL3Byb2MvYXY3MTEwX2lyIGludGVyZmFjZSAqLwotc3RhdGljIGludCBhdjcxMTBfaXJfd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3QgYXY3MTEwX2lyX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciAqcGFnZTsKIAl1MzIgaXJfY29uZmlnOwpAQCAtMzA5LDYgKzMwOSwxMCBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXY3MTEwX2lyX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLndyaXRlCQk9IGF2NzExMF9pcl9wcm9jX3dyaXRlLAorfTsKIAogLyogaW50ZXJydXB0IGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIGlyX2hhbmRsZXIoc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MzIgaXJjb20pCkBAIC0zNjgsMTEgKzM3Miw5IEBACiAJaW5wdXRfZGV2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZhdjcxMTAtPmlyOwogCiAJaWYgKGF2X2NudCA9PSAxKSB7Ci0JCWUgPSBjcmVhdGVfcHJvY19lbnRyeSgiYXY3MTEwX2lyIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBOVUxMKTsKLQkJaWYgKGUpIHsKLQkJCWUtPndyaXRlX3Byb2MgPSBhdjcxMTBfaXJfd3JpdGVfcHJvYzsKKwkJZSA9IHByb2NfY3JlYXRlKCJhdjcxMTBfaXIiLCBTX0lXVVNSLCBOVUxMLCAmYXY3MTEwX2lyX3Byb2NfZm9wcyk7CisJCWlmIChlKQogCQkJZS0+c2l6ZSA9IDQgKyAyNTYgKiBzaXplb2YodTE2KTsKLQkJfQogCX0KIAogCXRhc2tsZXRfaW5pdCgmYXY3MTEwLT5pci5pcl90YXNrbGV0LCBhdjcxMTBfZW1pdF9rZXksICh1bnNpZ25lZCBsb25nKSAmYXY3MTEwLT5pcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IDk3ODJlMDUuLjQ5YzJhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlidWRnZXRfY2ktPmlyLnRpbWVyX2tleXVwLmZ1bmN0aW9uID0gbXNwNDMwX2lyX2tleXVwOwogCWJ1ZGdldF9jaS0+aXIudGltZXJfa2V5dXAuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmYnVkZ2V0X2NpLT5pcjsKIAlidWRnZXRfY2ktPmlyLmxhc3RfcmF3ID0gMHhmZmZmOyAvKiBBbiBpbXBvc3NpYmxlIHZhbHVlICovCi0JZXJyb3IgPSBpcl9pbnB1dF9yZWdpc3RlcihpbnB1dF9kZXYsIGlyX2NvZGVzKTsKKwllcnJvciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgImJ1ZGdldF9jaTogY291bGQgbm90IGluaXQgZHJpdmVyIGZvciBJUiBkZXZpY2UgKGNvZGUgJWQpXG4iLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKaW5kZXggZTQ4MzgwYy4uOWZkZjI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKQEAgLTQzMyw5ICs0MzMsOCBAQAogCS5kZW1vZF9tb2RlCQk9IFNUVjA5MHhfU0lOR0xFLAogCS5jbGtfbW9kZQkJPSBTVFYwOTB4X0NMS19FWFQsCiAKLQkueHRhbAkJCT0gMjcwMDAwMDAsCisJLnh0YWwJCQk9IDEzNTAwMDAwLAogCS5hZGRyZXNzCQk9IDB4NjgsCi0JLnJlZl9jbGsJCT0gMjcwMDAwMDAsCiAKIAkudHMxX21vZGUJCT0gU1RWMDkweF9UU01PREVfRFZCQ0ksCiAJLnRzMl9tb2RlCQk9IFNUVjA5MHhfVFNNT0RFX1NFUklBTF9DT05USU5VT1VTLApAQCAtNDU3LDYgKzQ1Niw3IEBACiBzdGF0aWMgc3RydWN0IHN0djYxMTB4X2NvbmZpZyB0dDE2MDBfc3R2NjExMHhfY29uZmlnID0gewogCS5hZGRyCQkJPSAweDYwLAogCS5yZWZjbGsJCQk9IDI3MDAwMDAwLAorCS5jbGtfZGl2CQk9IDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlzbDY0MjNfY29uZmlnIHR0MTYwMF9pc2w2NDIzX2NvbmZpZyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwppbmRleCAzZjQwZjM3Li44MzU2N2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCkBAIC00MTcsNiArNDE3LDE4IEBACiAJICBTYXkgWSBoZXJlIGlmIFRFQTU3NjQgaGF2ZSBhIDMyNzY4IEh6IGNyeXN0YWwgaW4gY2lyY3VpdCwgc2F5IE4KIAkgIGhlcmUgaWYgVEVBNTc2NCByZWZlcmVuY2UgZnJlcXVlbmN5IGlzIGNvbm5lY3RlZCBpbiBGUkVRSU4uCiAKK2NvbmZpZyBSQURJT19TQUE3NzA2SAorCXRyaXN0YXRlICJTQUE3NzA2SCBDYXIgUmFkaW8gRFNQIgorCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDIKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgU0FBNzcwNkggQ2FyIHJhZGlvIERpZ2l0YWwKKwkgIFNpZ25hbCBQcm9jZXNzb3IsIGZvdW5kIGZvciBpbnN0YW5jZSBvbiB0aGUgUnVzc2VsbHZpbGxlIGRldmVsb3BtZW50CisJICBib2FyZC4gT24gdGhlIHJ1c3NlbGx2aWxsZSB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byBpbnRlcm5hbAorCSAgdGltYmVyZGFsZSBJMkMgYnVzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBTQUE3NzA2SC4KKwogY29uZmlnIFJBRElPX1RFRjY4NjIKIAl0cmlzdGF0ZSAiVEVGNjg2MiBDYXIgUmFkaW8gRW5oYW5jZWQgU2VsZWN0aXZpdHkgVHVuZXIiCiAJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMgpAQCAtNDI5LDQgKzQ0MSwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgVEVGNjg2Mi4KIAorY29uZmlnIFJBRElPX1RJTUJFUkRBTEUKKwl0cmlzdGF0ZSAiRW5hYmxlIHRoZSBUaW1iZXJkYWxlIHJhZGlvIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1GRF9USU1CRVJEQUxFICYmIFZJREVPX1Y0TDIKKwlkZXBlbmRzIG9uIEkyQwkjIGZvciBSQURJT19TQUE3NzA2SAorCXNlbGVjdCBSQURJT19URUY2ODYyCisJc2VsZWN0IFJBRElPX1NBQTc3MDZICisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIGtpbmQgb2YgdW1icmVsbGEgZHJpdmVyIGZvciB0aGUgUmFkaW8gVHVuZXIgYW5kIERTUAorCSAgZm91bmQgYmVoaW5kIHRoZSBUaW1iZXJkYWxlIEZQR0Egb24gdGhlIFJ1c3NlbGx2aWxsZSBib2FyZC4KKwkgIEVuYWJsaW5nIHRoaXMgZHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIERTUCBhbmQgdHVuZXIuCisKIGVuZGlmICMgUkFESU9fQURBUFRFUlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCmluZGV4IDAxOTIyYWQuLmY2MTU1ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQpAQCAtMjMsNiArMjMsOCBAQAogb2JqLSQoQ09ORklHX1JBRElPX1NJNDcwWCkgKz0gc2k0NzB4Lwogb2JqLSQoQ09ORklHX1VTQl9NUjgwMCkgKz0gcmFkaW8tbXI4MDAubwogb2JqLSQoQ09ORklHX1JBRElPX1RFQTU3NjQpICs9IHJhZGlvLXRlYTU3NjQubworb2JqLSQoQ09ORklHX1JBRElPX1NBQTc3MDZIKSArPSBzYWE3NzA2aC5vCiBvYmotJChDT05GSUdfUkFESU9fVEVGNjg2MikgKz0gdGVmNjg2Mi5vCitvYmotJChDT05GSUdfUkFESU9fVElNQkVSREFMRSkgKz0gcmFkaW8tdGltYi5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSXNvdW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRpbWIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGltYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTQ1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRpbWIuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIHJhZGlvLXRpbWIuYyBUaW1iZXJkYWxlIEZQR0EgUmFkaW8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdGltYl9yYWRpby5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ0aW1iLXJhZGlvIgorCitzdHJ1Y3QgdGltYnJhZGlvIHsKKwlzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhCXBkYXRhOworCXN0cnVjdCB2NGwyX3N1YmRldgkqc2RfdHVuZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2CSpzZF9kc3A7CisJc3RydWN0IHZpZGVvX2RldmljZQl2aWRlb19kZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OworfTsKKworCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCit7CisJc3RybGNweSh2LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiVGltYmVyZGFsZSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOworCXYtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKTsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl90dW5lciAqdikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgZ190dW5lciwgdik7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX3R1bmVyICp2KQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfdHVuZXIsIHR1bmVyLCBzX3R1bmVyLCB2KTsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJdW5zaWduZWQgaW50ICppKQoreworCSppID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJdW5zaWduZWQgaW50IGkpCit7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfdHVuZXIsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX2RzcCwgY29yZSwgcXVlcnljdHJsLCBxYyk7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX2RzcCwgY29yZSwgZ19jdHJsLCBjdHJsKTsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfZHNwLCBjb3JlLCBzX2N0cmwsIGN0cmwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHRpbWJyYWRpb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAk9IHRpbWJyYWRpb192aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX3R1bmVyCQk9IHRpbWJyYWRpb192aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIJCT0gdGltYnJhZGlvX3ZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kJPSB0aW1icmFkaW9fdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kJPSB0aW1icmFkaW9fdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2NfZ19pbnB1dAkJPSB0aW1icmFkaW9fdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IHRpbWJyYWRpb192aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfYXVkaW8JCT0gdGltYnJhZGlvX3ZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbwkJPSB0aW1icmFkaW9fdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19xdWVyeWN0cmwJPSB0aW1icmFkaW9fdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybAkJPSB0aW1icmFkaW9fdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybAkJPSB0aW1icmFkaW9fdmlkaW9jX3NfY3RybAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB0aW1icmFkaW9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbWJyYWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aW1iX3JhZGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRpbWJyYWRpbyAqdHI7CisJaW50IGVycjsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUGxhdGZvcm0gZGF0YSBtaXNzaW5nXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJdHIgPSBremFsbG9jKHNpemVvZigqdHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXRyLT5wZGF0YSA9ICpwZGF0YTsKKworCXN0cmxjcHkodHItPnZpZGVvX2Rldi5uYW1lLCAiVGltYmVyZGFsZSBSYWRpbyIsCisJCXNpemVvZih0ci0+dmlkZW9fZGV2Lm5hbWUpKTsKKwl0ci0+dmlkZW9fZGV2LmZvcHMgPSAmdGltYnJhZGlvX2ZvcHM7CisJdHItPnZpZGVvX2Rldi5pb2N0bF9vcHMgPSAmdGltYnJhZGlvX2lvY3RsX29wczsKKwl0ci0+dmlkZW9fZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl0ci0+dmlkZW9fZGV2Lm1pbm9yID0gLTE7CisKKwlzdHJsY3B5KHRyLT52NGwyX2Rldi5uYW1lLCBEUklWRVJfTkFNRSwgc2l6ZW9mKHRyLT52NGwyX2Rldi5uYW1lKSk7CisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgJnRyLT52NGwyX2Rldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdjRsMl9kZXY7CisKKwl0ci0+dmlkZW9fZGV2LnY0bDJfZGV2ID0gJnRyLT52NGwyX2RldjsKKworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHItPnZpZGVvX2RldiwgVkZMX1RZUEVfUkFESU8sIC0xKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIHJlZyB2aWRlb1xuIik7CisJCWdvdG8gZXJyX3ZpZGVvX3JlcTsKKwl9CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdHItPnZpZGVvX2RldiwgdHIpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHIpOworCXJldHVybiAwOworCitlcnJfdmlkZW9fcmVxOgorCXZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5KCZ0ci0+dmlkZW9fZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ0ci0+djRsMl9kZXYpOworZXJyX3Y0bDJfZGV2OgorCWtmcmVlKHRyKTsKK2VycjoKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVkXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGltYnJhZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdHItPnZpZGVvX2Rldik7CisJdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHkoJnRyLT52aWRlb19kZXYpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHItPnY0bDJfZGV2KTsKKworCWtmcmVlKHRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aW1icmFkaW9fcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHRpbWJyYWRpb19wcm9iZSwKKwkucmVtb3ZlCQk9IHRpbWJyYWRpb19yZW1vdmUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdGltYnJhZGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aW1icmFkaW9fcGxhdGZvcm1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRpbWJyYWRpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpbWJyYWRpb19wbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0aW1icmFkaW9faW5pdCk7Cittb2R1bGVfZXhpdCh0aW1icmFkaW9fZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVGltYmVyZGFsZSBSYWRpbyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMgPGluZm9AbW9jZWFuLWxhYnMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjU1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NhYTc3MDZoLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBzYWE3NzA2LmMgUGhpbGlwcyBTQUE3NzA2SCBDYXIgUmFkaW8gRFNQIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAic2FhNzcwNmgiCisKKy8qIHRoZSBJMkMgbWVtb3J5IG1hcCBsb29rcyBsaWtlIHRoaXMKKworCSQxQzAwIC0gJEZGRkYgTm90IFVzZWQKKwkkMjIwMCAtICQzRkZGIFJlc2VydmVkIFlSQU0gKERTUDIpIHNwYWNlCisJJDIwMDAgLSAkMjFGRiBZUkFNIChEU1AyKQorCSQxRkYwIC0gJDFGRkYgSGFyZHdhcmUgUmVnaXN0ZXJzCisJJDEyODAgLSAkMUZFRiBSZXNlcnZlZCBYUkFNIChEU1AyKSBzcGFjZQorCSQxMDAwIC0gJDEyN0YgWFJBTSAoRFNQMikKKwkkMEZGRiAgICAgICAgRFNQIENPTlRST0wKKwkkMEEwMCAtICQwRkZFIFJlc2VydmVkCisJJDA5ODAgLSAkMDlGRiBSZXNlcnZlZCBZUkFNIChEU1AxKSBzcGFjZQorCSQwODAwIC0gJDA5N0YgWVJBTSAoRFNQMSkKKwkkMDIwMCAtICQwN0ZGIE5vdCBVc2VkCisJJDAxODAgLSAkMDFGRiBSZXNlcnZlZCBYUkFNIChEU1AxKSBzcGFjZQorCSQwMDAwIC0gJDAxN0YgWFJBTSAoRFNQMSkKKyovCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0NUUkwJCTB4MGZmZgorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0JZUF9QTEwJCTB4MDAwMQorI2RlZmluZSBTQUE3NzA2SF9DVFJMX1BMTF9ESVZfTUFTSwkweDAwM2UKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaCTB4MDAzZQorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUF9UVVJCTwkJMHgwMDQwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfUENfUkVTRVRfRFNQMQkweDAwODAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyCTB4MDEwMAorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUDFfUk9NX0VOX01BU0sJMHgwNjAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRFNQMV9GVU5DX1BST00JMHgwMDAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRFNQMl9ST01fRU5fTUFTSwkweDE4MDAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9EU1AyX0ZVTkNfUFJPTQkweDAwMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9ESUdfU0lMX0lOVEVSUE9MCTB4ODAwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19FVkFMVUFUSU9OCQkJMHgxZmYwCisjZGVmaW5lIFNBQTc3MDZIX0VWQUxfRElTQUJMRV9DSEFSR0VfUFVNUAkweDAwMDAwMQorI2RlZmluZSBTQUE3NzA2SF9FVkFMX0RDU19DTE9DSwkJCTB4MDAwMDAyCisjZGVmaW5lIFNBQTc3MDZIX0VWQUxfR05EUkMxX0VOQUJMRQkJMHgwMDAwMDQKKyNkZWZpbmUgU0FBNzcwNkhfRVZBTF9HTkRSQzJfRU5BQkxFCQkweDAwMDAwOAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTF9HRU4xCQkJMHgxZmYzCisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjFfTUlOX0xPT1BHQUlOX01BU0sJMHgwMDAwMGYKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMV9MT09QR0FJTl9NQVNLCQkweDAwMDBmMAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4xX0NPQVJTRV9SQVRJT04JCTB4ZmZmZjAwCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0NMX0dFTjIJCQkweDFmZjQKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9XU0VER0VfRkFMTElORwkJMHgwMDAwMDEKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9TVE9QX1ZDTwkJMHgwMDAwMDIKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9GUkVSVU4JCQkweDAwMDAwNAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4yX0FEQVBUSVZFCQkweDAwMDAwOAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4yX0ZJTkVfUkFUSU9fTUFTSwkweDBmZmZmMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTF9HRU40CQkweDFmZjYKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VONF9CWVBBU1NfUExMMQkweDAwMTAwMAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU40X1BMTDFfRElWX01BU0sJMHgwM2UwMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VONF9EU1AxX1RVUkJPCTB4MDQwMDAwCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1NFTAkweDFmZjcKKyNkZWZpbmUgU0FBNzcwNkhfU0VMX0RTUDJfU1JDQV9NQVNLCTB4MDAwMDA3CisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AyX0ZNVEFfTUFTSwkweDAwMDAzMQorI2RlZmluZSBTQUE3NzA2SF9TRUxfRFNQMl9TUkNCX01BU0sJMHgwMDAxYzAKKyNkZWZpbmUgU0FBNzcwNkhfU0VMX0RTUDJfRk1UQl9NQVNLCTB4MDAwZTAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AxX1NSQ19NQVNLCTB4MDAzMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AxX0ZNVF9NQVNLCTB4MDFjMDAzCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9TUERJRjIJCTB4MDIwMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9IT1NUX0lPX0ZNVF9NQVNLCTB4MWMwMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9FTl9IT1NUX0lPCQkweDIwMDAwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19JQUMJCTB4MWZmOAorI2RlZmluZSBTQUE3NzA2SF9SRUdfQ0xLX1NFVAkJMHgxZmY5CisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTEtfQ09FRkYJCTB4MWZmYQorI2RlZmluZSBTQUE3NzA2SF9SRUdfSU5QVVRfU0VOUwkJMHgxZmZiCisjZGVmaW5lIFNBQTc3MDZIX0lOUFVUX1NFTlNfUkRTX1ZPTF9NQVNLCTB4MDAwM2YKKyNkZWZpbmUgU0FBNzcwNkhfSU5QVVRfU0VOU19GTV9WT0xfTUFTSwkJMHgwMGZjMAorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX0ZNX01QWAkJMHgwMTAwMAorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX09GRl9GSUxURVJfQV9FTgkweDAyMDAwCisjZGVmaW5lIFNBQTc3MDZIX0lOUFVUX1NFTlNfT0ZGX0ZJTFRFUl9CX0VOCTB4MDQwMDAKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1BIT05FX05BVl9BVURJTwkweDFmZmMKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0lPX0NPTkZfRFNQMgkweDFmZmQKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1NUQVRVU19EU1AyCTB4MWZmZQorI2RlZmluZSBTQUE3NzA2SF9SRUdfUENfRFNQMgkJMHgxZmZmCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMV9NT0QwCTB4MDgwMAorI2RlZmluZSBTQUE3NzA2SF9EU1AxX1JPTV9WRVIJMHgwOTdmCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfTVBUUjAJMHgxMDAwCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMV9NT0RQTlRSCTB4MDAwMAorCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWE1FTV9DT05UTExDVwkweDExM2UKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9YTUVNX0JVU0FNUAkweDExNGEKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9YTUVNX0ZEQUNQTlRSCTB4MTFmOQorI2RlZmluZSBTQUE3NzA2SF9EU1AyX1hNRU1fSUlTMVBOVFIJMHgxMWZiCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9ZTUVNX1BWR0EJCTB4MjEyYQorI2RlZmluZSBTQUE3NzA2SF9EU1AyX1lNRU1fUFZBVDEJMHgyMTJiCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFUCQkweDIxMmMKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9ZTUVNX1JPTV9WRVIJMHgyMWZmCisKKyNkZWZpbmUgU1VQUE9SVEVEX0RTUDFfUk9NX1ZFUgkJMHg2NjcKKworc3RydWN0IHNhYTc3MDZoX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdW5zaWduZWQgbXV0ZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3NzA2aF9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9pMmNfc2VuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgZXJyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgbGVuKTsKKwlpZiAoZXJyID09IGxlbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGVyciA+IDAgPyAtRUlPIDogZXJyOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCXN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCWludCBlcnIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBudW0pOworCWlmIChlcnIgPT0gbnVtKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyID4gMCA/IC1FSU8gOiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc2V0X3JlZzI0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ1Zls1XTsKKwlpbnQgcG9zID0gMDsKKworCWJ1Zltwb3MrK10gPSByZWcgPj4gODsKKwlidWZbcG9zKytdID0gcmVnOworCWJ1Zltwb3MrK10gPSB2YWwgPj4gMTY7CisJYnVmW3BvcysrXSA9IHZhbCA+PiA4OworCWJ1Zltwb3MrK10gPSB2YWw7CisKKwlyZXR1cm4gc2FhNzcwNmhfaTJjX3NlbmQoY2xpZW50LCBidWYsIHBvcyk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MzIgdmFsLAorCWludCAqZXJyKQoreworCXJldHVybiAqZXJyID8gKmVyciA6IHNhYTc3MDZoX3NldF9yZWcyNChzZCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3NldF9yZWcxNihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCBidWZbNF07CisJaW50IHBvcyA9IDA7CisKKwlidWZbcG9zKytdID0gcmVnID4+IDg7CisJYnVmW3BvcysrXSA9IHJlZzsKKwlidWZbcG9zKytdID0gdmFsID4+IDg7CisJYnVmW3BvcysrXSA9IHZhbDsKKworCXJldHVybiBzYWE3NzA2aF9pMmNfc2VuZChjbGllbnQsIGJ1ZiwgcG9zKTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcsIHUxNiB2YWwsCisJaW50ICplcnIpCit7CisJcmV0dXJuICplcnIgPyAqZXJyIDogc2FhNzcwNmhfc2V0X3JlZzE2KHNkLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfZ2V0X3JlZzE2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ1ZlsyXTsKKwlpbnQgZXJyOworCXU4IHJlZ2FkZHJbXSA9IHtyZWcgPj4gOCwgcmVnfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsge2NsaWVudC0+YWRkciwgMCwgc2l6ZW9mKHJlZ2FkZHIpLCByZWdhZGRyfSwKKwkJCQl7Y2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgc2l6ZW9mKGJ1ZiksIGJ1Zn0gfTsKKworCWVyciA9IHNhYTc3MDZoX2kyY190cmFuc2ZlcihjbGllbnQsIG1zZywgQVJSQVlfU0laRShtc2cpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGJ1ZlswXSA8PCA4IHwgYnVmWzFdOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3VubXV0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBzYWE3NzA2aF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaIHwgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AxIHwKKwkJU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyLCAmZXJyKTsKKworCS8qIG5ld2VyIHZlcnNpb25zIG9mIHRoZSBjaGlwIHJlcXVpcmVzIGEgc21hbGwgc2xlZXAgYWZ0ZXIgcmVzZXQgKi8KKwltc2xlZXAoMSk7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19FVkFMVUFUSU9OLCAwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19DTF9HRU4xLCAweDA0MDAyMiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xfR0VOMiwKKwkJU0FBNzcwNkhfQ0xfR0VOMl9XU0VER0VfRkFMTElORywgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xfR0VONCwgMHgwMjQwODAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX1NFTCwgMHgyMDAwODAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0lBQywgMHhmNGNhZWQsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0NMS19TRVQsIDB4MTI0MzM0LCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19DTEtfQ09FRkYsIDB4MDA0YTFhLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19JTlBVVF9TRU5TLCAweDAwNzFjNywKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfUEhPTkVfTkFWX0FVRElPLAorCQkweDBlMjJmZiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfSU9fQ09ORl9EU1AyLCAweDAwMWZmOCwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfU1RBVFVTX0RTUDIsIDB4MDgwMDAzLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19QQ19EU1AyLCAweDAwMDAwNCwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AxX01PRDAsIDB4MGM2YywgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX01QVFIwLCAweDAwMGI0YiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AxX01PRFBOVFIsIDB4MDAwNjAwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDFfTU9EUE5UUiwgMHgwMDAwYzAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0NPTlRMTENXLCAweDAwMDgxOSwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1hNRU1fQ09OVExMQ1csIDB4MDAwODVhLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9CVVNBTVAsIDB4N2ZmZmZmLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9GREFDUE5UUiwgMHgyMDAwY2IsCisJCSZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0lJUzFQTlRSLCAweDIwMDBjYiwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1lNRU1fUFZHQSwgMHgwZjgwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcxNl9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFUMSwgMHgwODAwLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcxNl9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFULCAweDA4MDAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0NPTlRMTENXLCAweDAwMDkwNSwKKwkJJmVycik7CisJaWYgKCFlcnIpCisJCXN0YXRlLT5tdXRlZCA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9tdXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IHNhYTc3MDZoX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgZXJyOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzE2KHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaIHwgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AxIHwKKwkJU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyKTsKKwlpZiAoIWVycikKKwkJc3RhdGUtPm11dGVkID0gMTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+bXV0ZWQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoY3RybC0+dmFsdWUpCisJCQlyZXR1cm4gc2FhNzcwNmhfbXV0ZShzZCk7CisJCXJldHVybiBzYWE3NzA2aF91bm11dGUoc2QpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTc3MDZILCAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3NzA2aF9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNzcwNmhfZ19jaGlwX2lkZW50LAorCS5xdWVyeWN0cmwgPSBzYWE3NzA2aF9xdWVyeWN0cmwsCisJLmdfY3RybCA9IHNhYTc3MDZoX2dfY3RybCwKKwkuc19jdHJsID0gc2FhNzcwNmhfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzcwNmhfb3BzID0geworCS5jb3JlID0gJnNhYTc3MDZoX2NvcmVfb3BzLAorfTsKKworLyoKKyAqIEdlbmVyaWMgaTJjIHByb2JlCisgKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCisgKi8KKworc3RhdGljIGludCBfX2RldmluaXQgc2FhNzcwNmhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJaW50IGVycjsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhYTc3MDZoX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNzcwNmhfb3BzKTsKKworCS8qIGNoZWNrIHRoZSByb20gdmVyc2lvbnMgKi8KKwllcnIgPSBzYWE3NzA2aF9nZXRfcmVnMTYoc2QsIFNBQTc3MDZIX0RTUDFfUk9NX1ZFUik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyOworCWlmIChlcnIgIT0gU1VQUE9SVEVEX0RTUDFfUk9NX1ZFUikKKwkJdjRsMl93YXJuKHNkLCAiVW5rbm93biBEU1AxIFJPTSBjb2RlIHZlcnNpb246IDB4JXhcbiIsIGVycik7CisKKwlzdGF0ZS0+bXV0ZWQgPSAxOworCisJLyogc3RhcnR1cCBpbiBhIG11dGVkIHN0YXRlICovCisJZXJyID0gc2FhNzcwNmhfbXV0ZShzZCk7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zdGF0ZShzZCkpOworCisJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IEZhaWxlZCB0byBwcm9iZTogJWRcbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzYWE3NzA2aF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzYWE3NzA2aF9tdXRlKHNkKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTc3MDZoX2lkW10gPSB7CisJe0RSSVZFUl9OQU1FLCAwfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3NzA2aF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzYWE3NzA2aF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKKwkucHJvYmUJCT0gc2FhNzcwNmhfcHJvYmUsCisJLnJlbW92ZQkJPSBzYWE3NzA2aF9yZW1vdmUsCisJLmlkX3RhYmxlCT0gc2FhNzcwNmhfaWQsCit9OworCitzdGF0aWMgX19pbml0IGludCBzYWE3NzA2aF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZzYWE3NzA2aF9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgc2FhNzcwNmhfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZzYWE3NzA2aF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzYWE3NzA2aF9pbml0KTsKK21vZHVsZV9leGl0KHNhYTc3MDZoX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNBQTc3MDZIIENhciBSYWRpbyBEU1AgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKaW5kZXggNGRhMGYxNS4uNDcwNzVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYwpAQCAtNzI0LDcgKzcyNCw3IEBACiAJCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAKIAkvKiBtaW4gaXMgd29yc3QsIG1heCBpcyBiZXN0OyBzaWduYWw6MC4uMHhmZmZmOyByc3NpOiAwLi4weGZmICovCi0JLyogbWVhc3VyZWQgaW4gdW5pdHMgb2YgZGLsqIlWIGluIDEgZGIgaW5jcmVtZW50cyAobWF4IGF0IH43NSBkYuyoiVYpICovCisJLyogbWVhc3VyZWQgaW4gdW5pdHMgb2YgZGLCtVYgaW4gMSBkYiBpbmNyZW1lbnRzIChtYXggYXQgfjc1IGRiwrVWKSAqLwogCXR1bmVyLT5zaWduYWwgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUlNTSSk7CiAJLyogdGhlIGlkZWFsIGZhY3RvciBpcyAweGZmZmYvNzUgPSA4NzMsOCAqLwogCXR1bmVyLT5zaWduYWwgPSAodHVuZXItPnNpZ25hbCAqIDg3MykgKyAoOCAqIHR1bmVyLT5zaWduYWwgLyAxMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMKaW5kZXggYTk2ZTFiOS4uNmY2MDg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC11c2IuYwpAQCAtNTkwLDggKzU5MCw5IEBACiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOwogCQkJa2ZyZWUocmFkaW8tPmludF9pbl9idWZmZXIpOwogCQkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJCQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogCQkJa2ZyZWUocmFkaW8pOwotCQkJZ290byB1bmxvY2s7CisJCQlnb3RvIGRvbmU7CiAJCX0KIAogCQkvKiBjYW5jZWwgcmVhZCBwcm9jZXNzZXMgKi8KQEAgLTYwMSw3ICs2MDIsNiBAQAogCQlyZXR2YWwgPSBzaTQ3MHhfc3RvcChyYWRpbyk7CiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CiAJfQotdW5sb2NrOgogCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiBkb25lOgogCXJldHVybiByZXR2YWw7CkBAIC04NDIsOSArODQyLDExIEBACiAJCWtmcmVlKHJhZGlvLT5pbnRfaW5fYnVmZmVyKTsKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2KTsKIAkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiAJCWtmcmVlKHJhZGlvKTsKKwl9IGVsc2UgeworCQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogCX0KLQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCAyZjgzYmU3Li5mOGZjODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0zODgsNiArMzg4LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0dnA1MTUwLgogCitjb25maWcgVklERU9fVFZQNzAwMgorCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUVlA3MDAyIHZpZGVvIGRlY29kZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBUVlA3MDAyIHZpZGVvIGRlY29kZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHR2cDcwMDIuCisKIGNvbmZpZyBWSURFT19WUFgzMjIwCiAJdHJpc3RhdGUgInZweDMyMjBhLCB2cHgzMjE2YiAmIHZweDMyMTRjIHZpZGVvIGRlY29kZXJzIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKQEAgLTU0OCw3ICs1NTcsNiBAQAogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdnBzcyBzeXN0ZW0gbW9kdWxlIGZvciB2aWRlbyBkcml2ZXIKLQlkZWZhdWx0IHkKIAogY29uZmlnIFZJREVPX1ZQRkVfQ0FQVFVSRQogCXRyaXN0YXRlICJWUEZFIFZpZGVvIENhcHR1cmUgRHJpdmVyIgpAQCAtNTkyLDYgKzYwMCwxOSBAQAogCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGZlLgogCitjb25maWcgVklERU9fSVNJRgorCXRyaXN0YXRlICJJU0lGIEhXIG1vZHVsZSIKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTM2NSAmJiBWSURFT19WUEZFX0NBUFRVUkUKKwlzZWxlY3QgVklERU9fVlBTU19TWVNURU0KKwlkZWZhdWx0IHkKKwloZWxwCisJICAgRW5hYmxlcyBJU0lGIGh3IG1vZHVsZS4gVGhpcyBpcyB0aGUgaGFyZHdhcmUgbW9kdWxlIGZvcgorCSAgIGNvbmZpZ3VyaW5nIElTSUYgaW4gVlBGRSB0byBjYXB0dXJlIFJhdyBCYXllciBSR0IgZGF0YSAgZnJvbQorCSAgIGEgaW1hZ2Ugc2Vuc29yIG9yIFlVViBkYXRhIGZyb20gYSBZVVYgc291cmNlLgorCisJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwZmUuCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIgogCiBjb25maWcgVklERU9fUE1TCkBAIC02MzgsOSArNjU5LDE0IEBACiAJICBpbmZvcm1hdGlvbi4KIAogY29uZmlnIFZJREVPX0NQSUEKLQl0cmlzdGF0ZSAiQ1BpQSBWaWRlbyBGb3IgTGludXgiCisJdHJpc3RhdGUgIkNQaUEgVmlkZW8gRm9yIExpbnV4IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIGNwaWExIG1vZHVsZQorCSAgaW5zdGVhZC4gTm90ZSB0aGF0IHlvdSBuZWVkIGF0bGVhc3QgdmVyc2lvbiAwLjYuNCBvZiBsaWJ2NGwgZm9yCisJICB0aGUgY3BpYTEgZ3NwY2EgbW9kdWxlLgorCiAJICBUaGlzIGlzIHRoZSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIGNhbWVyYXMgYmFzZWQgb24gVmlzaW9uJ3MgQ1BpQQogCSAgKENvbG91ciBQcm9jZXNzb3IgSW50ZXJmYWNlIEFTSUMpLCBzdWNoIGFzIHRoZSBDcmVhdGl2ZSBMYWJzIFZpZGVvCiAJICBCbGFzdGVyIFdlYmNhbSBJSS4gSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGNhbWVyYXMsIHNheSBZIGhlcmUKQEAgLTk0NCw2ICs5NzAsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vS2NvbmZpZyIKQEAgLTk1NSw2ICs5ODMsNyBAQAogY29uZmlnIFZJREVPX09WQ0FNQ0hJUAogCXRyaXN0YXRlICJPbW5pVmlzaW9uIENhbWVyYSBDaGlwIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgb3Y1MTEgLyBvdjUxOCBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKQEAgLTk3MSw2ICsxMDAwLDcgQEAKIGNvbmZpZyBVU0JfVzk5NjhDRgogCXRyaXN0YXRlICJVU0IgVzk5Nls4N11DRiBKUEVHIER1YWwgTW9kZSBDYW1lcmEgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQyAmJiBWSURFT19PVkNBTUNISVAKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgdzk5NjhjZiBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKQEAgLTk5Miw2ICsxMDIyLDcgQEAKIGNvbmZpZyBVU0JfT1Y1MTEKIAl0cmlzdGF0ZSAiVVNCIE9WNTExIENhbWVyYSBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgb3Y1MTEgLyBvdjUxOCBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKQEAgLTEwMjAsNiArMTA1MSw3IEBACiBjb25maWcgVVNCX1NUVjY4MAogCXRyaXN0YXRlICJVU0IgU1RWNjgwIChQZW5jYW0pIENhbWVyYSBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIHN0djA2ODAgbW9kdWxlCiAJICBpbnN0ZWFkLiBOb3RlIHRoYXQgZm9yIHRoZSBnc3BjYSBzdHYwNjgwIG1vZHVsZSB5b3UgbmVlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggMmFmNjhlZS4uYjg4YjYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC01Niw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfVklERU9fVklOTykgKz0gaW5keWNhbS5vCiBvYmotJChDT05GSUdfVklERU9fVFZQNTE1MCkgKz0gdHZwNTE1MC5vCiBvYmotJChDT05GSUdfVklERU9fVFZQNTE0WCkgKz0gdHZwNTE0eC5vCitvYmotJChDT05GSUdfVklERU9fVFZQNzAwMikgKz0gdHZwNzAwMi5vCiBvYmotJChDT05GSUdfVklERU9fTVNQMzQwMCkgKz0gbXNwMzQwMC5vCiBvYmotJChDT05GSUdfVklERU9fQ1M1MzQ1KSArPSBjczUzNDUubwogb2JqLSQoQ09ORklHX1ZJREVPX0NTNTNMMzJBKSArPSBjczUzbDMyYS5vCkBAIC05OSw2ICsxMDAsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMzQpICs9IHNhYTcxMzQvCiBvYmotJChDT05GSUdfVklERU9fQ1g4OCkgKz0gY3g4OC8KIG9iai0kKENPTkZJR19WSURFT19FTTI4WFgpICs9IGVtMjh4eC8KK29iai0kKENPTkZJR19WSURFT19UTEcyMzAwKSArPSB0bGcyMzAwLwogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjMxWFgpICs9IGN4MjMxeHgvCiBvYmotJChDT05GSUdfVklERU9fVVNCVklTSU9OKSArPSB1c2J2aXNpb24vCiBvYmotJChDT05GSUdfVklERU9fUFZSVVNCMikgKz0gcHZydXNiMi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwppbmRleCA1YmIwZjllLi41NDdlMWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJdjRsMl9lcnIoc2QsICJubyBub3RpZnkgZm91bmQhXG4iKTsKIAogCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCBOVUxMKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDAsIDEpOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMSwgMCk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCA1LCAwKTsKQEAgLTI2Myw3ICsyNjMsNyBAQAogCQkvKiBidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxYSwgIDUsIDEpOyAqLwogCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbMV07CiAJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKLQkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0xPVywgMCk7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIE5VTEwpOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMCwgMSk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAxLCAxKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDUsIDEpOwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOCwgKHRpbWluZy0+aHNjYWxlID4+IDgpICYgMHhmZik7CiAJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOSwgdGltaW5nLT5oc2NhbGUgJiAweGZmKTsKIAlkZWNvZGVyLT5ub3JtID0gc3RkOwotCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKKwl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNiw3ICszMDYsNyBAQAogCQl2NGwyX2VycihzZCwgIm5vIG5vdGlmeSBmb3VuZCFcbiIpOwogCiAJaWYgKGRlY29kZXItPmlucHV0ICE9IGlucHV0KSB7Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCBOVUxMKTsKIAkJZGVjb2Rlci0+aW5wdXQgPSBpbnB1dDsKIAkJLyogc2VsZWN0IG1vZGUgKi8KIAkJaWYgKGRlY29kZXItPmlucHV0ID09IDApIHsKQEAgLTMxNiw3ICszMTYsNyBAQAogCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDYsIDEpOwogCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MWEsIDEsIDApOwogCQl9Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0hJR0gsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCBhZTA4YjA3Li5jYjQ2ZThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC04MSw2ICs4MSw3IEBACiBzdGF0aWMgaW50IHJhZGlvX25yW0JUVFZfTUFYXSA9IHsgWzAgLi4uIChCVFRWX01BWC0xKV0gPSAtMSB9Owogc3RhdGljIGludCB2YmlfbnJbQlRUVl9NQVhdID0geyBbMCAuLi4gKEJUVFZfTUFYLTEpXSA9IC0xIH07CiBzdGF0aWMgaW50IGRlYnVnX2xhdGVuY3k7CitzdGF0aWMgaW50IGRpc2FibGVfaXI7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmRzcjsKIApAQCAtMTA3LDYgKzEwOCw3IEBACiBtb2R1bGVfcGFyYW0oYnR0dl9kZWJ1ZywgICAgICAgIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oaXJxX2RlYnVnLCAgICAgICAgIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oZGVidWdfbGF0ZW5jeSwgICAgIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9pciwgICAgICAgIGludCwgMDQ0NCk7CiAKIG1vZHVsZV9wYXJhbShmZHNyLCAgICAgICAgICAgICAgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbShnYnVmZmVycywgICAgICAgICAgaW50LCAwNDQ0KTsKQEAgLTEzOSw2ICsxNDEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhidHR2X2dwaW8sImxvZyBncGlvIGNoYW5nZXMsIGRlZmF1bHQgaXMgMCAobm8pIik7CiBNT0RVTEVfUEFSTV9ERVNDKGJ0dHZfZGVidWcsImRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFfZGVidWcsImlycSBoYW5kbGVyIGRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2lyLCAiZGlzYWJsZSBpbmZyYXJlZCByZW1vdGUgc3VwcG9ydCIpOwogTU9EVUxFX1BBUk1fREVTQyhnYnVmZmVycywibnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycy4gcmFuZ2UgMi0zMiwgZGVmYXVsdCA4Iik7CiBNT0RVTEVfUEFSTV9ERVNDKGdidWZzaXplLCJzaXplIG9mIHRoZSBjYXB0dXJlIGJ1ZmZlcnMsIGRlZmF1bHQgaXMgMHgyMDgwMDAiKTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXRfY3JvcCwicmVzZXQgY3JvcHBpbmcgcGFyYW1ldGVycyBhdCBvcGVuKCksIGRlZmF1bHQgIgpAQCAtNDQ2MSw4ICs0NDY0LDEwIEBACiAJCXJlcXVlc3RfbW9kdWxlcyhidHYpOwogCX0KIAotCWluaXRfYnR0dl9pMmNfaXIoYnR2KTsKLQlidHR2X2lucHV0X2luaXQoYnR2KTsKKwlpZiAoIWRpc2FibGVfaXIpIHsKKwkJaW5pdF9idHR2X2kyY19pcihidHYpOworCQlidHR2X2lucHV0X2luaXQoYnR2KTsKKwl9CiAKIAkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KIAlidHR2X251bSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwppbmRleCAyNzdhMDkyLi5iMzIwZGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJc3RydWN0IGNhcmRfaXIgKmlyOwogCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMgPSBOVUxMOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOwogCWludCBlcnIgPSAtRU5PTUVNOwogCiAJaWYgKCFidHYtPmhhc19yZW1vdGUpCkBAIC0zODksNyArMzg5LDcgQEAKIAlidHR2X2lyX3N0YXJ0KGJ0diwgaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpcl9pbnB1dF9yZWdpc3RlcihidHYtPnJlbW90ZS0+ZGV2LCBpcl9jb2Rlcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoYnR2LT5yZW1vdGUtPmRldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCA3YmI5YzFlLi5jYmJmN2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTE5MDcsNyArMTkwNyw2IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAltdXRleF9pbml0KCZjYW0tPnNfbXV0ZXgpOwotCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhbS0+ZGV2X2xvY2spOwogCWNhbS0+c3RhdGUgPSBTX05PVFJFQURZOwogCWNhZmVfc2V0X2NvbmZpZ19uZWVkZWQoY2FtLCAxKTsKQEAgLTE5NDcsNyArMTk0Niw2IEBACiAJICogYmVjYXVzZSB0aGUgc2Vuc29yIGNvdWxkIGF0dGFjaCBpbiB0aGlzIGNhbGwgY2hhaW4sIGxlYWRpbmcgdG8KIAkgKiB1bnNpZ2h0bHkgZGVhZGxvY2tzLgogCSAqLwotCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsgIC8qIGF0dGFjaCBjYW4gZGVhZGxvY2sgKi8KIAlyZXQgPSBjYWZlX3NtYnVzX3NldHVwKGNhbSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZWlycTsKQEAgLTE5NzMsNyArMTk3MSw3IEBACiAJY2FtLT52ZGV2LnY0bDJfZGV2ID0gJmNhbS0+djRsMl9kZXY7CiAJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9zbWJ1czsKKwkJZ290byBvdXRfdW5sb2NrOwogCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7CiAKIAkvKgpAQCAtMTk4OCw2ICsxOTg2LDggQEAKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcmV0dXJuIDA7CiAKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogb3V0X3NtYnVzOgogCWNhZmVfc21idXNfc2h1dGRvd24oY2FtKTsKIG91dF9mcmVlaXJxOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCA1NTFkZGYyLi45MzNhZTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzczNyw5ICszNzM3LDYgQEAKIAlpZiAoc2l6ZSA+IEZSQU1FX05VTSpDUElBX01BWF9GUkFNRV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghY2FtIHx8ICFjYW0tPm9wcykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wLXNhZmUgKi8KIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmJ1c3lfbG9jaykpCiAJCXJldHVybiAtRUlOVFI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCmluZGV4IGU4YTUwYTYuLmJhZjdlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCkBAIC0xOSwzICsxOSwxNCBAQAogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDE4LgorCitjb25maWcgVklERU9fQ1gxOF9BTFNBCisJdHJpc3RhdGUgIkNvbmV4YW50IDIzNDE4IERNQSBhdWRpbyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fQ1gxOCAmJiBTTkQgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNORF9QQ00KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBkaXJlY3QgKERNQSkgYXVkaW8gb24KKwkgIENvbmV4YW50IDIzNDE4IGJhc2VkIFRWIGNhcmRzIHVzaW5nIEFMU0EuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4MTgtYWxzYS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZQppbmRleCBmN2JmMGVkLi4yZmFkZDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L01ha2VmaWxlCkBAIC0zLDggKzMsMTAgQEAKIAljeDE4LW1haWxib3gubyBjeDE4LXZiaS5vIGN4MTgtYXVkaW8ubyBjeDE4LXZpZGVvLm8gY3gxOC1pcnEubyBcCiAJY3gxOC1hdi1jb3JlLm8gY3gxOC1hdi1hdWRpby5vIGN4MTgtYXYtZmlybXdhcmUubyBjeDE4LWF2LXZiaS5vIGN4MTgtc2NiLm8gXAogCWN4MTgtZHZiLm8gY3gxOC1pby5vCitjeDE4LWFsc2Etb2JqcyA6PSBjeDE4LWFsc2EtbWFpbi5vIGN4MTgtYWxzYS1wY20ubwogCiBvYmotJChDT05GSUdfVklERU9fQ1gxOCkgKz0gY3gxOC5vCitvYmotJChDT05GSUdfVklERU9fQ1gxOF9BTFNBKSArPSBjeDE4LWFsc2EubwogCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1haW4uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNDFkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1haW4uYwpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqICBBTFNBIGludGVyZmFjZSB0byBjeDE4IFBDTSBjYXB0dXJlIHN0cmVhbXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICogIENvcHlyaWdodCAoQykgMjAwOSAgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgUG9ydGlvbnMgb2YgdGhpcyB3b3JrIHdlcmUgc3BvbnNvcmVkIGJ5IE9ORUxBTiBMaW1pdGVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKworI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC12ZXJzaW9uLmgiCisjaW5jbHVkZSAiY3gxOC1hbHNhLmgiCisjaW5jbHVkZSAiY3gxOC1hbHNhLW1peGVyLmgiCisjaW5jbHVkZSAiY3gxOC1hbHNhLXBjbS5oIgorCitpbnQgY3gxOF9hbHNhX2RlYnVnOworCisjZGVmaW5lIENYMThfREVCVUdfQUxTQV9JTkZPKGZtdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChjeDE4X2Fsc2FfZGVidWcgJiAyKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQsICJjeDE4LWFsc2EiLCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgY3gxOF9hbHNhX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKKwkJICJEZWJ1ZyBsZXZlbCAoYml0bWFzaykuIERlZmF1bHQ6IDBcbiIKKwkJICJcdFx0XHQgIDEvMHgwMDAxOiB3YXJuaW5nXG4iCisJCSAiXHRcdFx0ICAyLzB4MDAwMjogaW5mb1xuIik7CisKK01PRFVMRV9BVVRIT1IoIkFuZHkgV2FsbHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ1gyMzQxOCBBTFNBIEludGVyZmFjZSIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkNYMjM0MTggTVBFRzIgZW5jb2RlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitNT0RVTEVfVkVSU0lPTihDWDE4X1ZFUlNJT04pOworCitzdGF0aWMgaW5saW5lCitzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqdG9fc25kX2N4MThfY2FyZChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiB0b19jeDE4KHY0bDJfZGV2KS0+YWxzYTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IHNuZF9jeDE4X2NhcmQgKnBfdG9fc25kX2N4MThfY2FyZChzdHJ1Y3QgdjRsMl9kZXZpY2UgKip2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgc25kX2N4MThfY2FyZCwgdjRsMl9kZXYpOworfQorCitzdGF0aWMgdm9pZCBzbmRfY3gxOF9jYXJkX2ZyZWUoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJaWYgKGN4c2MgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGN4c2MtPnY0bDJfZGV2ICE9IE5VTEwpCisJCXRvX2N4MTgoY3hzYy0+djRsMl9kZXYpLT5hbHNhID0gTlVMTDsKKworCS8qIEZJWE1FIC0gdGFrZSBhbnkgb3RoZXIgc3RvcHBpbmcgYWN0aW9ucyBuZWVkZWQgKi8KKworCWtmcmVlKGN4c2MpOworfQorCitzdGF0aWMgdm9pZCBzbmRfY3gxOF9jYXJkX3ByaXZhdGVfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKnNjKQoreworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1cm47CisJc25kX2N4MThfY2FyZF9mcmVlKHNjLT5wcml2YXRlX2RhdGEpOworCXNjLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXNjLT5wcml2YXRlX2ZyZWUgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X2NhcmRfY3JlYXRlKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqc2MsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3gxOF9jYXJkICoqY3hzYykKK3sKKwkqY3hzYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfY3gxOF9jYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCpjeHNjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJKCpjeHNjKS0+djRsMl9kZXYgPSB2NGwyX2RldjsKKwkoKmN4c2MpLT5zYyA9IHNjOworCisJc2MtPnByaXZhdGVfZGF0YSA9ICpjeHNjOworCXNjLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3gxOF9jYXJkX3ByaXZhdGVfZnJlZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X2NhcmRfc2V0X25hbWVzKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCXN0cnVjdCBzbmRfY2FyZCAqc2MgPSBjeHNjLT5zYzsKKworCS8qIHNjLT5kcml2ZXIgaXMgdXNlZCBieSBhbHNhLWxpYidzIGNvbmZpZ3VyYXRvcjogc2ltcGxlLCB1bmlxdWUgKi8KKwlzdHJsY3B5KHNjLT5kcml2ZXIsICJDWDIzNDE4Iiwgc2l6ZW9mKHNjLT5kcml2ZXIpKTsKKworCS8qIHNjLT5zaG9ydG5hbWUgaXMgYSBzeW1saW5rIGluIC9wcm9jL2Fzb3VuZDogQ1gxOC1NIC0+IGNhcmROICovCisJc25wcmludGYoc2MtPnNob3J0bmFtZSwgIHNpemVvZihzYy0+c2hvcnRuYW1lKSwgIkNYMTgtJWQiLAorCQkgY3gtPmluc3RhbmNlKTsKKworCS8qIHNjLT5sb25nbmFtZSBpcyByZWFkIGZyb20gL3Byb2MvYXNvdW5kL2NhcmRzICovCisJc25wcmludGYoc2MtPmxvbmduYW1lLCBzaXplb2Yoc2MtPmxvbmduYW1lKSwKKwkJICJDWDIzNDE4ICMlZCAlcyBUVi9GTSBSYWRpby9MaW5lLUluIENhcHR1cmUiLAorCQkgY3gtPmluc3RhbmNlLCBjeC0+Y2FyZF9uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X2luaXQoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KHY0bDJfZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjID0gTlVMTDsKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYzsKKwlpbnQgcmV0OworCisJLyogTnVtYnJzIHN0ZXBzIGZyb20gIldyaXRpbmcgYW4gQUxTQSBEcml2ZXIiIGJ5IFRha2FzaGkgSXdhaSAqLworCisJLyogKDEpIENoZWNrIGFuZCBpbmNyZW1lbnQgdGhlIGRldmljZSBpbmRleCAqLworCS8qIFRoaXMgaXMgYSBuby1vcCBmb3IgdXMuICBXZSdsbCB1c2UgdGhlIGN4LT5pbnN0YW5jZSAqLworCisJLyogKDIpIENyZWF0ZSBhIGNhcmQgaW5zdGFuY2UgKi8KKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCAvKiB1c2UgZmlyc3QgYXZhaWxhYmxlIGlkICovCisJCQkgICAgICBTTkRSVl9ERUZBVUxUX1NUUjEsIC8qIHhpZCBmcm9tIGVuZCBvZiBzaG9ydG5hbWUqLworCQkJICAgICAgVEhJU19NT0RVTEUsIDAsICZzYyk7CisJaWYgKHJldCkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogc25kX2NhcmRfY3JlYXRlKCkgZmFpbGVkIHdpdGggZXJyICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX2V4aXQ7CisJfQorCisJLyogKDMpIENyZWF0ZSBhIG1haW4gY29tcG9uZW50ICovCisJcmV0ID0gc25kX2N4MThfY2FyZF9jcmVhdGUodjRsMl9kZXYsIHNjLCAmY3hzYyk7CisJaWYgKHJldCkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogc25kX2N4MThfY2FyZF9jcmVhdGUoKSBmYWlsZWQgd2l0aCBlcnIgJWRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBlcnJfZXhpdF9mcmVlOworCX0KKworCS8qICg0KSBTZXQgdGhlIGRyaXZlciBJRCBhbmQgbmFtZSBzdHJpbmdzICovCisJc25kX2N4MThfY2FyZF9zZXRfbmFtZXMoY3hzYyk7CisKKworCXJldCA9IHNuZF9jeDE4X3BjbV9jcmVhdGUoY3hzYyk7CisJaWYgKHJldCkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogc25kX2N4MThfcGNtX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGVycl9leGl0X2ZyZWU7CisJfQorCS8qIEZJWE1FIC0gcHJvYyBmaWxlcyAqLworCisJLyogKDcpIFNldCB0aGUgZHJpdmVyIGRhdGEgYW5kIHJldHVybiAwICovCisJLyogV2UgZG8gdGhpcyBvdXQgb2Ygbm9ybWFsIG9yZGVyIGZvciBQQ0kgZHJpdmVycyB0byBhdm9pZCByYWNlcyAqLworCWN4LT5hbHNhID0gY3hzYzsKKworCS8qICg2KSBSZWdpc3RlciB0aGUgY2FyZCBpbnN0YW5jZSAqLworCXJldCA9IHNuZF9jYXJkX3JlZ2lzdGVyKHNjKTsKKwlpZiAocmV0KSB7CisJCWN4LT5hbHNhID0gTlVMTDsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jYXJkX3JlZ2lzdGVyKCkgZmFpbGVkIHdpdGggZXJyICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX2V4aXRfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2V4aXRfZnJlZToKKwlpZiAoc2MgIT0gTlVMTCkKKwkJc25kX2NhcmRfZnJlZShzYyk7CitlcnJfZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY3gxOF9hbHNhX2xvYWQoc3RydWN0IGN4MTggKmN4KQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmY3gtPnY0bDJfZGV2OworCXN0cnVjdCBjeDE4X3N0cmVhbSAqczsKKworCWlmICh2NGwyX2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3gxOC1hbHNhOiAlczogc3RydWN0IHY0bDJfZGV2aWNlICogaXMgTlVMTFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY3ggPSB0b19jeDE4KHY0bDJfZGV2KTsKKwlpZiAoY3ggPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImN4MTgtYWxzYSBjeCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9QQ01dOworCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCkgeworCQlDWDE4X0RFQlVHX0FMU0FfSU5GTygiJXM6IFBDTSBzdHJlYW0gZm9yIGNhcmQgaXMgZGlzYWJsZWQgLSAiCisJCQkJICAgICAic2tpcHBpbmdcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGN4LT5hbHNhICE9IE5VTEwpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHN0cnVjdCBzbmRfY3gxOF9jYXJkICogYWxyZWFkeSBleGlzdHNcbiIsCisJCQkgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzbmRfY3gxOF9pbml0KHY0bDJfZGV2KSkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogZmFpbGVkIHRvIGNyZWF0ZSBzdHJ1Y3Qgc25kX2N4MThfY2FyZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fKTsKKwl9IGVsc2UgeworCQlDWDE4X0RFQlVHX0FMU0FfSU5GTygiJXM6IGNyZWF0ZWQgY3gxOCBBTFNBIGludGVyZmFjZSBpbnN0YW5jZSAiCisJCQkJICAgICAiXG4iLCBfX2Z1bmNfXyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjeDE4X2Fsc2FfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gImN4MTgtYWxzYTogbW9kdWxlIGxvYWRpbmcuLi5cbiIpOworCWN4MThfZXh0X2luaXQgPSAmY3gxOF9hbHNhX2xvYWQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbmRfY3gxOF9leGl0KHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCisJLyogRklYTUUgLSBwb2ludGVyIGNoZWNrcyAmIHNodXRkb3duIGN4c2MgKi8KKworCXNuZF9jYXJkX2ZyZWUoY3hzYy0+c2MpOworCWN4LT5hbHNhID0gTlVMTDsKK30KKworc3RhdGljIGludCBfX2V4aXQgY3gxOF9hbHNhX2V4aXRfY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYzsKKworCWlmICh2NGwyX2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3gxOC1hbHNhOiAlczogc3RydWN0IHY0bDJfZGV2aWNlICogaXMgTlVMTFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY3hzYyA9IHRvX3NuZF9jeDE4X2NhcmQodjRsMl9kZXYpOworCWlmIChjeHNjID09IE5VTEwpIHsKKwkJQ1gxOF9BTFNBX1dBUk4oIiVzOiBzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqIGlzIE5VTExcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlzbmRfY3gxOF9leGl0KGN4c2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3gxOF9hbHNhX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJjeDE4LWFsc2E6IG1vZHVsZSB1bmxvYWRpbmcuLi5cbiIpOworCisJZHJ2ID0gZHJpdmVyX2ZpbmQoImN4MTgiLCAmcGNpX2J1c190eXBlKTsKKwlyZXQgPSBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKGRydiwgTlVMTCwgTlVMTCwgY3gxOF9hbHNhX2V4aXRfY2FsbGJhY2spOworCXB1dF9kcml2ZXIoZHJ2KTsKKworCWN4MThfZXh0X2luaXQgPSBOVUxMOworCXByaW50ayhLRVJOX0lORk8gImN4MTgtYWxzYTogbW9kdWxlIHVubG9hZCBjb21wbGV0ZVxuIik7Cit9CisKK21vZHVsZV9pbml0KGN4MThfYWxzYV9pbml0KTsKK21vZHVsZV9leGl0KGN4MThfYWxzYV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWl4ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWl4ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIxMTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1taXhlci5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogIEFMU0EgbWl4ZXIgY29udHJvbHMgZm9yIHRoZQorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAiY3gxOC1hbHNhLmgiCisjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKworLyoKKyAqIE5vdGUgdGhlIGN4MTgtYXYtY29yZSB2b2x1bWUgc2NhbGUgaXMgZnVubnksIGR1ZSB0byB0aGUgYWxpZ25tZW50IG9mIHRoZQorICogc2NhbGUgd2l0aCBhbm90aGVyIGNoaXAncyByYW5nZToKKyAqCisgKiB2NGwyX2NvbnRyb2wgdmFsdWUJLzUxMglpbmRpY2F0ZWQgZEIJYWN0dWFsIGRCCXJlZyAweDhkNAorICogMHgwMDAwIC0gMHgwMWZmCSAgMAktMTE5CQktOTYJCTIyOAorICogMHgwMjAwIC0gMHgwMmZmCSAgMQktMTE4CQktOTYJCTIyOAorICogLi4uCisgKiAweDJjMDAgLSAweDJkZmYJIDIyCSAtOTcJCS05NgkJMjI4CisgKiAweDJlMDAgLSAweDJmZmYJIDIzCSAtOTYJCS05NgkJMjI4CisgKiAweDMwMDAgLSAweDMxZmYJIDI0CSAtOTUJCS05NQkJMjI2CisgKiAuLi4KKyAqIDB4ZWUwMCAtIDB4ZWZmZgkxMTkJICAgMAkJICAwCQkgMzYKKyAqIC4uLgorICogMHhmZTAwIC0gMHhmZmZmCTEyNwkgICs4CQkgKzgJCSAyMAorICovCitzdGF0aWMgaW5saW5lIGludCBkQl90b19jeDE4X2F2X3ZvbChpbnQgZEIpCit7CisJaWYgKGRCIDwgLTk2KQorCQlkQiA9IC05NjsKKwllbHNlIGlmIChkQiA+IDgpCisJCWRCID0gODsKKwlyZXR1cm4gKGRCICsgMTE5KSA8PCA5OworfQorCitzdGF0aWMgaW5saW5lIGludCBjeDE4X2F2X3ZvbF90b19kQihpbnQgdikKK3sKKwlpZiAodiA8ICgyMyA8PCA5KSkKKwkJdiA9ICgyMyA8PCA5KTsKKwllbHNlIGlmICh2ID4gKDEyNyA8PCA5KSkKKwkJdiA9ICgxMjcgPDwgOSk7CisJcmV0dXJuICh2ID4+IDkpIC0gMTE5OworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X21peGVyX3R2X3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMTsKKwkvKiBXZSdyZSBhbHJlYWR5IHRyYW5zbGF0aW5nIHZhbHVlcywganVzdCBrZWVwIHRoaXMgY29udHJvbCBpbiBkQiAqLworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiAgPSAtOTY7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ICA9ICAgODsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5zdGVwID0gICAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X21peGVyX3R2X3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjdGwpCit7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MgPSBzbmRfa2NvbnRyb2xfY2hpcChrY3RsKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIHZjdHJsOworCWludCByZXQ7CisKKwl2Y3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTsKKwl2Y3RybC52YWx1ZSA9IGRCX3RvX2N4MThfYXZfdm9sKHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCisJc25kX2N4MThfbG9jayhjeHNjKTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgZ19jdHJsLCAmdmN0cmwpOworCXNuZF9jeDE4X3VubG9jayhjeHNjKTsKKworCWlmICghcmV0KQorCQl1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY3gxOF9hdl92b2xfdG9fZEIodmN0cmwudmFsdWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfbWl4ZXJfdHZfdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWN0bCkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdGwpOworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgdmN0cmw7CisJaW50IHJldDsKKworCXZjdHJsLmlkID0gVjRMMl9DSURfQVVESU9fVk9MVU1FOworCXZjdHJsLnZhbHVlID0gZEJfdG9fY3gxOF9hdl92b2wodWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisKKwlzbmRfY3gxOF9sb2NrKGN4c2MpOworCisJLyogRmV0Y2ggY3VycmVudCBzdGF0ZSAqLworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBnX2N0cmwsICZ2Y3RybCk7CisKKwlpZiAocmV0IHx8CisJICAgIChjeDE4X2F2X3ZvbF90b19kQih2Y3RybC52YWx1ZSkgIT0gdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkpIHsKKworCQkvKiBTZXQsIGlmIG5lZWRlZCAqLworCQl2Y3RybC52YWx1ZSA9IGRCX3RvX2N4MThfYXZfdm9sKHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgc19jdHJsLCAmdmN0cmwpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IDE7IC8qIEluZGljYXRlIGNvbnRyb2wgd2FzIGNoYW5nZWQgdy9vIGVycm9yICovCisJfQorCXNuZF9jeDE4X3VubG9jayhjeHNjKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyogVGhpcyBpcyBhIGJpdCBvZiBvdmVya2lsbCwgdGhlIHNsaWRlciBpcyBhbHJlYWR5IGluIGRCIGludGVybmFsbHkgKi8KK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShzbmRfY3gxOF9taXhlcl90dl92b2xfZGJfc2NhbGUsIC05NjAwLCAxMDAsIDApOworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2N4MThfbWl4ZXJfdHZfdm9sIF9faW5pdGRhdGEgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiQW5hbG9nIFRWIENhcHR1cmUgVm9sdW1lIiwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAorCS5pbmZvID0gc25kX2N4MThfbWl4ZXJfdHZfdm9sdW1lX2luZm8sCisJLmdldCA9IHNuZF9jeDE4X21peGVyX3R2X3ZvbHVtZV9nZXQsCisJLnB1dCA9IHNuZF9jeDE4X21peGVyX3R2X3ZvbHVtZV9wdXQsCisJLnRsdi5wID0gc25kX2N4MThfbWl4ZXJfdHZfdm9sX2RiX3NjYWxlCit9OworCisvKiBGSVhNRSAtIGFkZCBtdXRlIHN3aXRjaCBhbmQgYmFsYW5jZSwgYmFzcywgdHJlYmxlIHNsaWRlcnM6CisJVjRMMl9DSURfQVVESU9fTVVURQorCisJVjRMMl9DSURfQVVESU9fQkFMQU5DRQorCisJVjRMMl9DSURfQVVESU9fQkFTUworCVY0TDJfQ0lEX0FVRElPX1RSRUJMRQorKi8KKworLyogRklYTUUgLSBhZGQgc3RlcmVvLCBsYW5nMSwgbGFuZzIsIG1vbm8gbWVudSAqLworLyogRklYTUUgLSBhZGQgQ1M1MzQ1IEkyUyB2b2x1bWUgZm9yIEhWUi0xNjAwICovCisKK2ludCBfX2luaXQgc25kX2N4MThfbWl4ZXJfY3JlYXRlKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBjeHNjLT52NGwyX2RldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjID0gY3hzYy0+c2M7CisJaW50IHJldDsKKworCXN0cmxjcHkoc2MtPm1peGVybmFtZSwgIkNYMjM0MTggTWl4ZXIiLCBzaXplb2Yoc2MtPm1peGVybmFtZSkpOworCisJcmV0ID0gc25kX2N0bF9hZGQoc2MsIHNuZF9jdGxfbmV3MShzbmRfY3gxOF9taXhlcl90dl92b2wsIGN4c2MpKTsKKwlpZiAocmV0KSB7CisJCUNYMThfQUxTQV9XQVJOKCIlczogZmFpbGVkIHRvIGFkZCAlcyBjb250cm9sLCBlcnIgJWRcbiIsCisJCQkJX19mdW5jX18sIHNuZF9jeDE4X21peGVyX3R2X3ZvbC5uYW1lLCByZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1taXhlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1taXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDE4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqICBBTFNBIG1peGVyIGNvbnRyb2xzIGZvciB0aGUKKyAqICBBTFNBIGludGVyZmFjZSB0byBjeDE4IFBDTSBjYXB0dXJlIHN0cmVhbXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCitpbnQgX19pbml0IHNuZF9jeDE4X21peGVyX2NyZWF0ZShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmQzMTJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1wY20uYwpAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAqICBBTFNBIFBDTSBkZXZpY2UgZm9yIHRoZQorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBQb3J0aW9ucyBvZiB0aGlzIHdvcmsgd2VyZSBzcG9uc29yZWQgYnkgT05FTEFOIExpbWl0ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC1xdWV1ZS5oIgorI2luY2x1ZGUgImN4MTgtc3RyZWFtcy5oIgorI2luY2x1ZGUgImN4MTgtZmlsZW9wcy5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IHBjbV9kZWJ1ZzsKK21vZHVsZV9wYXJhbShwY21fZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHBjbV9kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBmb3IgcGNtIik7CisKKyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikgZG8gewkJCQkJXAorCSAgICBpZiAocGNtX2RlYnVnKQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3gxOC1hbHNhLXBjbSAlczogIiBmbXQsCQlcCisJCQkJICBfX2Z1bmNfXywgIyNhcmcpOyAJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9jeDE4X2h3X2NhcHR1cmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVAgICAgICAgICAgIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgICAgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAorCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKworCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCisJLnJhdGVfbWluID0gNDgwMDAsCisJLnJhdGVfbWF4ID0gNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSA2MjcyMCAqIDgsCS8qIGp1c3QgYWJvdXQgdGhlIHZhbHVlIGluIHVzYmF1ZGlvLmMgKi8KKwkucGVyaW9kX2J5dGVzX21pbiA9IDY0LAkJLyogMTI1NDQvMiwgKi8KKwkucGVyaW9kX2J5dGVzX21heCA9IDEyNTQ0LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gOTgsCQkvKiAxMjU0NCwgKi8KK307CisKK3ZvaWQgY3gxOF9hbHNhX2Fubm91bmNlX3BjbV9kYXRhKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjLCB1OCAqcGNtX2RhdGEsCisJCQkJIHNpemVfdCBudW1fYnl0ZXMpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwl1bnNpZ25lZCBpbnQgb2xkcHRyOworCXVuc2lnbmVkIGludCBzdHJpZGU7CisJaW50IHBlcmlvZF9lbGFwc2VkID0gMDsKKwlpbnQgbGVuZ3RoOworCisJZHByaW50aygiY3gxOCBhbHNhIGFubm91bmNlIHB0cj0lcCBkYXRhPSVwIG51bV9ieXRlcz0lemRcbiIsIGN4c2MsCisJCXBjbV9kYXRhLCBudW1fYnl0ZXMpOworCisJc3Vic3RyZWFtID0gY3hzYy0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtOworCWlmIChzdWJzdHJlYW0gPT0gTlVMTCkgeworCQlkcHJpbnRrKCJzdWJzdHJlYW0gd2FzIE5VTExcbiIpOworCQlyZXR1cm47CisJfQorCisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpZiAocnVudGltZSA9PSBOVUxMKSB7CisJCWRwcmludGsoInJ1bnRpbWUgd2FzIE5VTExcbiIpOworCQlyZXR1cm47CisJfQorCisJc3RyaWRlID0gcnVudGltZS0+ZnJhbWVfYml0cyA+PiAzOworCWlmIChzdHJpZGUgPT0gMCkgeworCQlkcHJpbnRrKCJzdHJpZGUgaXMgemVyb1xuIik7CisJCXJldHVybjsKKwl9CisKKwlsZW5ndGggPSBudW1fYnl0ZXMgLyBzdHJpZGU7CisJaWYgKGxlbmd0aCA9PSAwKSB7CisJCWRwcmludGsoIiVzOiBsZW5ndGggd2FzIHplcm9cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChydW50aW1lLT5kbWFfYXJlYSA9PSBOVUxMKSB7CisJCWRwcmludGsoImRtYSBhcmVhIHdhcyBOVUxMIC0gaWdub3JpbmdcbiIpOworCQlyZXR1cm47CisJfQorCisJb2xkcHRyID0gY3hzYy0+aHdwdHJfZG9uZV9jYXB0dXJlOworCWlmIChvbGRwdHIgKyBsZW5ndGggPj0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJdW5zaWduZWQgaW50IGNudCA9CisJCQlydW50aW1lLT5idWZmZXJfc2l6ZSAtIG9sZHB0cjsKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBwY21fZGF0YSwKKwkJICAgICAgIGNudCAqIHN0cmlkZSk7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgcGNtX2RhdGEgKyBjbnQgKiBzdHJpZGUsCisJCSAgICAgICBsZW5ndGggKiBzdHJpZGUgLSBjbnQgKiBzdHJpZGUpOworCX0gZWxzZSB7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgcGNtX2RhdGEsCisJCSAgICAgICBsZW5ndGggKiBzdHJpZGUpOworCX0KKwlzbmRfcGNtX3N0cmVhbV9sb2NrKHN1YnN0cmVhbSk7CisKKwljeHNjLT5od3B0cl9kb25lX2NhcHR1cmUgKz0gbGVuZ3RoOworCWlmIChjeHNjLT5od3B0cl9kb25lX2NhcHR1cmUgPj0KKwkgICAgcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZSAtPQorCQkJcnVudGltZS0+YnVmZmVyX3NpemU7CisKKwljeHNjLT5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgKz0gbGVuZ3RoOworCWlmIChjeHNjLT5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgPj0KKwkgICAgcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJY3hzYy0+Y2FwdHVyZV90cmFuc2Zlcl9kb25lIC09CisJCQlydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJcGVyaW9kX2VsYXBzZWQgPSAxOworCX0KKworCXNuZF9wY21fc3RyZWFtX3VubG9jayhzdWJzdHJlYW0pOworCisJaWYgKHBlcmlvZF9lbGFwc2VkKQorCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBjeHNjLT52NGwyX2RldjsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KHY0bDJfZGV2KTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnM7CisJc3RydWN0IGN4MThfb3Blbl9pZCBpdGVtOworCWludCByZXQ7CisKKwkvKiBJbnN0cnVjdCB0aGUgY3gxOCB0byBzdGFydCBzZW5kaW5nIHBhY2tldHMgKi8KKwlzbmRfY3gxOF9sb2NrKGN4c2MpOworCXMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXTsKKworCWl0ZW0uY3ggPSBjeDsKKwlpdGVtLnR5cGUgPSBzLT50eXBlOworCWl0ZW0ub3Blbl9pZCA9IGN4LT5vcGVuX2lkKys7CisKKwkvKiBTZWUgaWYgdGhlIHN0cmVhbSBpcyBhdmFpbGFibGUgKi8KKwlpZiAoY3gxOF9jbGFpbV9zdHJlYW0oJml0ZW0sIGl0ZW0udHlwZSkpIHsKKwkJLyogTm8sIGl0J3MgYWxyZWFkeSBpbiB1c2UgKi8KKwkJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1PRkYsICZzLT5zX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpKSB7CisJCS8qIFdlJ3JlIGFscmVhZHkgc3RyZWFtaW5nLiAgTm8gYWRkaXRpb25hbCBhY3Rpb24gcmVxdWlyZWQgKi8KKwkJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCQlyZXR1cm4gMDsKKwl9CisKKworCXJ1bnRpbWUtPmh3ID0gc25kX2N4MThfaHdfY2FwdHVyZTsKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7CisJY3hzYy0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGN4OworCisJY3gtPnBjbV9hbm5vdW5jZV9jYWxsYmFjayA9IGN4MThfYWxzYV9hbm5vdW5jZV9wY21fZGF0YTsKKworCS8qIE5vdCBjdXJyZW50bHkgc3RyZWFtaW5nLCBzbyBzdGFydCBpdCB1cCAqLworCXNldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncyk7CisJcmV0ID0gY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0ocyk7CisJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGN4c2MtPnY0bDJfZGV2OworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqczsKKwlpbnQgcmV0OworCisJLyogSW5zdHJ1Y3QgdGhlIGN4MTggdG8gc3RvcCBzZW5kaW5nIHBhY2tldHMgKi8KKwlzbmRfY3gxOF9sb2NrKGN4c2MpOworCXMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXTsKKwlyZXQgPSBjeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHMsIDApOworCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKKworCWN4MThfcmVsZWFzZV9zdHJlYW0ocyk7CisKKwljeC0+cGNtX2Fubm91bmNlX2NhbGxiYWNrID0gTlVMTDsKKwlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21faW9jdGwoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9pb2N0bChzdWJzdHJlYW0sIGNtZCwgYXJnKTsKK30KKworCitzdGF0aWMgaW50IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAorCQkJCQlzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vicy0+cnVudGltZTsKKworCWRwcmludGsoIkFsbG9jYXRpbmcgdmJ1ZmZlclxuIik7CisJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7CisJCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPiBzaXplKQorCQkJcmV0dXJuIDA7CisKKwkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOworCX0KKwlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2Moc2l6ZSk7CisJaWYgKCFydW50aW1lLT5kbWFfYXJlYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQgcmV0OworCisJZHByaW50aygiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXQgPSBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKKwkJCQkJICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN4c2MtPnNsb2NrLCBmbGFncyk7CisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKKwkJZHByaW50aygiZnJlZWluZyBwY20gY2FwdHVyZSByZWdpb25cbiIpOworCQl2ZnJlZShzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKTsKKwkJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN4c2MtPnNsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZSA9IDA7CisJY3hzYy0+Y2FwdHVyZV90cmFuc2Zlcl9kb25lID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMKK3NuZF9wY21fdWZyYW1lc190IHNuZF9jeDE4X3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc25kX3BjbV91ZnJhbWVzX3QgaHdwdHJfZG9uZTsKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjeHNjLT5zbG9jaywgZmxhZ3MpOworCWh3cHRyX2RvbmUgPSBjeHNjLT5od3B0cl9kb25lX2NhcHR1cmU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3hzYy0+c2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBod3B0cl9kb25lOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OworCisJcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShwYWdlcHRyKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY3gxOF9wY21fY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4JCT0gc25kX2N4MThfcGNtX2NhcHR1cmVfb3BlbiwKKwkuY2xvc2UJCT0gc25kX2N4MThfcGNtX2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9jeDE4X3BjbV9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gc25kX2N4MThfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHNuZF9jeDE4X3BjbV9od19mcmVlLAorCS5wcmVwYXJlCT0gc25kX2N4MThfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBzbmRfY3gxOF9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHNuZF9jeDE4X3BjbV9wb2ludGVyLAorCS5wYWdlCQk9IHNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZSwKK307CisKK2ludCBzbmRfY3gxOF9wY21fY3JlYXRlKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCBzbmRfcGNtICpzcDsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjID0gY3hzYy0+c2M7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGN4c2MtPnY0bDJfZGV2OworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfcGNtX25ldyhzYywgIkNYMjM0MTggUENNIiwKKwkJCSAgMCwgLyogUENNIGRldmljZSAwLCB0aGUgb25seSBvbmUgZm9yIHRoaXMgY2FyZCAqLworCQkJICAwLCAvKiAwIHBsYXliYWNrIHN1YnN0cmVhbXMgKi8KKwkJCSAgMSwgLyogMSBjYXB0dXJlIHN1YnN0cmVhbSAqLworCQkJICAmc3ApOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jeDE4X3BjbV9jcmVhdGUoKSBmYWlsZWQgd2l0aCBlcnIgJWRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBlcnJfZXhpdDsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmY3hzYy0+c2xvY2spOworCisJc25kX3BjbV9zZXRfb3BzKHNwLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkmc25kX2N4MThfcGNtX2NhcHR1cmVfb3BzKTsKKwlzcC0+aW5mb19mbGFncyA9IDA7CisJc3AtPnByaXZhdGVfZGF0YSA9IGN4c2M7CisJc3RybGNweShzcC0+bmFtZSwgY3gtPmNhcmRfbmFtZSwgc2l6ZW9mKHNwLT5uYW1lKSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2V4aXQ6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTY2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiAgQUxTQSBQQ00gZGV2aWNlIGZvciB0aGUKKyAqICBBTFNBIGludGVyZmFjZSB0byBjeDE4IFBDTSBjYXB0dXJlIHN0cmVhbXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCitpbnQgX19pbml0IHNuZF9jeDE4X3BjbV9jcmVhdGUoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpOworCisvKiBVc2VkIGJ5IGN4MTgtbWFpbGJveCB0byBhbm5vdW5jZSB0aGUgUENNIGRhdGEgdG8gdGhlIG1vZHVsZSAqLwordm9pZCBjeDE4X2Fsc2FfYW5ub3VuY2VfcGNtX2RhdGEoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmNhcmQsIHU4ICpwY21fZGF0YSwKKwkJCQkgc2l6ZV90IG51bV9ieXRlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhMWNkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKK3N0cnVjdCBzbmRfY2FyZDsKKworc3RydWN0IHNuZF9jeDE4X2NhcmQgeworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7CisJc3RydWN0IHNuZF9jYXJkICpzYzsKKwl1bnNpZ25lZCBpbnQgY2FwdHVyZV90cmFuc2Zlcl9kb25lOworCXVuc2lnbmVkIGludCBod3B0cl9kb25lX2NhcHR1cmU7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpjYXB0dXJlX3BjbV9zdWJzdHJlYW07CisJc3BpbmxvY2tfdCBzbG9jazsKK307CisKK2V4dGVybiBpbnQgY3gxOF9hbHNhX2RlYnVnOworCisvKgorICogRmlsZSBvcGVyYXRpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgZW5jb2RlciBvciB2aWRlbyBvciBhdWRpbyBzdWJkZXZpY2VzCisgKiBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuICBVc2UgdGhlIHNhbWUgbG9jayB3ZSB1c2UgZm9yIHY0bDIgZmlsZSBvcHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfY3gxOF9sb2NrKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCW11dGV4X2xvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfY3gxOF91bmxvY2soc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOChjeHNjLT52NGwyX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOworfQorCisjZGVmaW5lIENYMThfQUxTQV9EQkdGTEdfV0FSTiAgKDEgPDwgMCkKKyNkZWZpbmUgQ1gxOF9BTFNBX0RCR0ZMR19XQVJOICAoMSA8PCAwKQorI2RlZmluZSBDWDE4X0FMU0FfREJHRkxHX0lORk8gICgxIDw8IDEpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX0RFQlVHKHgsIHR5cGUsIGZtdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoKHgpICYgY3gxOF9hbHNhX2RlYnVnKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICIlcy1hbHNhOiAiIHR5cGUgIjogIiBmbXQsIFwKKwkJCQl2NGwyX2Rldi0+bmFtZSAsICMjIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBDWDE4X0FMU0FfREVCVUdfV0FSTihmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0FMU0FfREVCVUcoQ1gxOF9BTFNBX0RCR0ZMR19XQVJOLCAid2FybmluZyIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX0RFQlVHX0lORk8oZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9BTFNBX0RFQlVHKENYMThfQUxTQV9EQkdGTEdfSU5GTywgImluZm8iLCBmbXQgLCAjIyBhcmdzKQorCisjZGVmaW5lIENYMThfQUxTQV9FUlIoZm10LCBhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fRVJSICIlcy1hbHNhOiAiIGZtdCwgdjRsMl9kZXYtPm5hbWUgLCAjIyBhcmdzKQorCisjZGVmaW5lIENYMThfQUxTQV9XQVJOKGZtdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzLWFsc2E6ICIgZm10LCB2NGwyX2Rldi0+bmFtZSAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX0lORk8oZm10LCBhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMtYWxzYTogIiBmbXQsIHY0bDJfZGV2LT5uYW1lICwgIyMgYXJncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCmluZGV4IGYxMWU0N2EuLmY4MDhmYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJLmdwaW9faW5pdC5kaXJlY3Rpb24gPSAweDcsCiAJLmdwaW9fYXVkaW9faW5wdXQgPSB7IC5tYXNrICAgPSAweDcsCiAJCQkgICAgICAudHVuZXIgID0gMHg2LCAubGluZWluID0gMHgyLCAucmFkaW8gID0gMHgyIH0sCi0JLnhjZWl2ZV9waW4gPSAxNSwKKwkueGNlaXZlX3BpbiA9IDEsCiAJLnBjaV9saXN0ID0gY3gxOF9wY2lfbGVhZHRla19wdnIyMTAwLAogCS5pMmMgPSAmY3gxOF9pMmNfc3RkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKaW5kZXggN2Y2NWE0Ny4uYzk1YTg2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKQEAgLTQ3LDYgKzQ3LDEwIEBACiAgICBzZXR0aW5nIHRoaXMgdG8gMSB5b3UgZW5zdXJlIHRoYXQgcmFkaW8wIGlzIG5vdyBhbHNvIHJhZGlvMS4gKi8KIGludCBjeDE4X2ZpcnN0X21pbm9yOwogCisvKiBDYWxsYmFjayBmb3IgcmVnaXN0ZXJpbmcgZXh0ZW5zaW9ucyAqLworaW50ICgqY3gxOF9leHRfaW5pdCkoc3RydWN0IGN4MTggKik7CitFWFBPUlRfU1lNQk9MKGN4MThfZXh0X2luaXQpOworCiAvKiBhZGQgeW91ciByZXZpc2lvbiBhbmQgd2hhdG5vdCBoZXJlICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3gxOF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9DWCwgUENJX0RFVklDRV9JRF9DWDIzNDE4LApAQCAtOTEsNyArOTUsNyBAQAogCiBzdGF0aWMgaW50IGVuY190c19idWZzID0gLTE7CiBzdGF0aWMgaW50IGVuY19tcGdfYnVmcyA9IC0xOwotc3RhdGljIGludCBlbmNfaWR4X2J1ZnMgPSAtMTsKK3N0YXRpYyBpbnQgZW5jX2lkeF9idWZzID0gQ1gxOF9NQVhfRldfTURMU19QRVJfU1RSRUFNOwogc3RhdGljIGludCBlbmNfeXV2X2J1ZnMgPSAtMTsKIHN0YXRpYyBpbnQgZW5jX3ZiaV9idWZzID0gLTE7CiBzdGF0aWMgaW50IGVuY19wY21fYnVmcyA9IC0xOwpAQCAtMTk2LDE0ICsyMDAsMTcgQEAKIAkJICJOdW1iZXIgb2YgZW5jb2RlciBNUEcgYnVmZmVyc1xuIgogCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBlbmNfbXBnXyogcGFyYW1ldGVycyIpOwogTU9EVUxFX1BBUk1fREVTQyhlbmNfaWR4X2J1ZmZlcnMsCi0JCSAiRW5jb2RlciBJRFggYnVmZmVyIG1lbW9yeSAoTUIpLiAoZW5jX2lkeF9idWZzIGNhbiBvdmVycmlkZSlcbiIKLQkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfSURYX0JVRkZFUlMpKTsKKwkJICIoRGVwcmVjYXRlZCkgRW5jb2RlciBJRFggYnVmZmVyIG1lbW9yeSAoTUIpXG4iCisJCSAiXHRcdFx0SWdub3JlZCwgZXhjZXB0IDAgZGlzYWJsZXMgSURYIGJ1ZmZlciBhbGxvY2F0aW9uc1xuIgorCQkgIlx0XHRcdERlZmF1bHQ6IDEgW0VuYWJsZWRdIik7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY19pZHhfYnVmc2l6ZSwKIAkJICJTaXplIG9mIGFuIGVuY29kZXIgSURYIGJ1ZmZlciAoa0IpXG4iCi0JCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX0lEWF9CVUZTSVpFKSk7CisJCSAiXHRcdFx0QWxsb3dlZCB2YWx1ZXMgYXJlIG11bHRpcGxlcyBvZiAxLjUga0Igcm91bmRlZCB1cFxuIgorCQkgIlx0XHRcdChtdWx0aXBsZXMgb2Ygc2l6ZSByZXF1aXJlZCBmb3IgNjQgaW5kZXggZW50cmllcylcbiIKKwkJICJcdFx0XHREZWZhdWx0OiAyIik7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY19pZHhfYnVmcywKIAkJICJOdW1iZXIgb2YgZW5jb2RlciBJRFggYnVmZmVyc1xuIgotCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBlbmNfaWR4XyogcGFyYW1ldGVycyIpOworCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9NQVhfRldfTURMU19QRVJfU1RSRUFNKSk7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY195dXZfYnVmZmVycywKIAkJICJFbmNvZGVyIFlVViBidWZmZXIgbWVtb3J5IChNQikuIChlbmNfeXV2X2J1ZnMgY2FuIG92ZXJyaWRlKVxuIgogCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX0VOQ19ZVVZfQlVGRkVSUykpOwpAQCAtMjMxLDcgKzIzOCw4IEBACiAJCSAiTnVtYmVyIG9mIGVuY29kZXIgUENNIGJ1ZmZlcnNcbiIKIAkJICJcdFx0XHREZWZhdWx0IGlzIGNvbXB1dGVkIGZyb20gb3RoZXIgZW5jX3BjbV8qIHBhcmFtZXRlcnMiKTsKIAotTU9EVUxFX1BBUk1fREVTQyhjeDE4X2ZpcnN0X21pbm9yLCAiU2V0IGRldmljZSBub2RlIG51bWJlciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CitNT0RVTEVfUEFSTV9ERVNDKGN4MThfZmlyc3RfbWlub3IsCisJCSAiU2V0IGRldmljZSBub2RlIG51bWJlciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CiAKIE1PRFVMRV9BVVRIT1IoIkhhbnMgVmVya3VpbCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDWDIzNDE4IGRyaXZlciIpOwpAQCAtMjQwLDYgKzI0OCwyOCBAQAogCiBNT0RVTEVfVkVSU0lPTihDWDE4X1ZFUlNJT04pOwogCisjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChNT0RVTEUpCitzdGF0aWMgdm9pZCByZXF1ZXN0X21vZHVsZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGN4MTggKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3gxOCwgcmVxdWVzdF9tb2R1bGVfd2spOworCisJLyogTWFrZSBzdXJlIGN4MTgtYWxzYSBtb2R1bGUgaXMgbG9hZGVkICovCisJcmVxdWVzdF9tb2R1bGUoImN4MTgtYWxzYSIpOworCisJLyogSW5pdGlhbGl6ZSBjeDE4LWFsc2EgZm9yIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIGN4MTggZGV2aWNlICovCisJaWYgKGN4MThfZXh0X2luaXQgIT0gTlVMTCkKKwkJY3gxOF9leHRfaW5pdChkZXYpOworfQorCitzdGF0aWMgdm9pZCByZXF1ZXN0X21vZHVsZXMoc3RydWN0IGN4MTggKmRldikKK3sKKwlJTklUX1dPUksoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2ssIHJlcXVlc3RfbW9kdWxlX2FzeW5jKTsKKwlzY2hlZHVsZV93b3JrKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drKTsKK30KKyNlbHNlCisjZGVmaW5lIHJlcXVlc3RfbW9kdWxlcyhkZXYpCisjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KKwogLyogR2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9ucyAqLwogaW50IGN4MThfbXNsZWVwX3RpbWVvdXQodW5zaWduZWQgaW50IG1zZWNzLCBpbnQgaW50cikKIHsKQEAgLTUwMSw3ICs1MzEsMTIgQEAKIAkJLyoKIAkJICogWVVWIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgbmVlZHMgdG8gYmUKIAkJICogYW4gaW50ZWdyYWwgbXVsdGlwbGUgb2YgMzMuNzUga0IgKHN0b3JhZ2UgZm9yIDMyIHNjcmVlbnMKLQkJICogbGluZXMgdG8gbWFpbnRhaW4gYWxpZ25tZW50IGluIGNhc2Ugb2YgbG9zdCBidWZmZXJzCisJCSAqIGxpbmVzIHRvIG1haW50YWluIGFsaWdubWVudCBpbiBjYXNlIG9mIGxvc3QgYnVmZmVycykuCisJCSAqCisJCSAqIElEWCBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgc3RyZWFtX2J1Zl9zaXplIHNob3VsZCBiZQorCQkgKiBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiAxLjUga0IgKHN0b3JhZ2UgZm9yIDY0IGluZGV4IGVudHJpZXMKKwkJICogdG8gbWFpbnRhaW4gYWxpZ25tZW50IGluIGNhc2Ugb2YgbG9zdCBidWZmZXJzKS4KKwkJICoKIAkJICovCiAJCWlmIChpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1lVVikgewogCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSAqPSAxMDI0OwpAQCAtNTExLDE1ICs1NDYsMjQgQEAKIAkJCWlmIChjeC0+c3RyZWFtX2J1Zl9zaXplW2ldIDwgQ1gxOF9VTklUX0VOQ19ZVVZfQlVGU0laRSkKIAkJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0KIAkJCQkJCUNYMThfVU5JVF9FTkNfWVVWX0JVRlNJWkU7CisJCX0gZWxzZSBpZiAoaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpIHsKKwkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gKj0gMTAyNDsKKwkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gLT0KKwkJCSAgIChjeC0+c3RyZWFtX2J1Zl9zaXplW2ldICUgQ1gxOF9VTklUX0VOQ19JRFhfQlVGU0laRSk7CisKKwkJCWlmIChjeC0+c3RyZWFtX2J1Zl9zaXplW2ldIDwgQ1gxOF9VTklUX0VOQ19JRFhfQlVGU0laRSkKKwkJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0KKwkJCQkJCUNYMThfVU5JVF9FTkNfSURYX0JVRlNJWkU7CiAJCX0KIAkJLyoKLQkJICogWVVWIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgaXMKKwkJICogWVVWIGFuZCBJRFggYXJlIHNwZWNpYWwgY2FzZXMgd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBpcwogCQkgKiBub3cgaW4gYnl0ZXMuCiAJCSAqIFZCSSBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgc3RyZWFtX2J1Zl9zaXplIGlzIGZpeGVkCiAJCSAqIGFuZCBhbHJlYWR5IGluIGJ5dGVzCiAJCSAqLwogCQlpZiAoaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgfHwKLQkJICAgIGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWKSB7CisJCSAgICBpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1lVViB8fAorCQkgICAgaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpIHsKIAkJCWlmIChjeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPCAwKSB7CiAJCQkJY3gtPnN0cmVhbV9idWZmZXJzW2ldID0KIAkJCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldICogMTAyNCAqIDEwMjQKQEAgLTEwMzIsNiArMTA3NiwxMCBAQAogCX0KIAogCUNYMThfSU5GTygiSW5pdGlhbGl6ZWQgY2FyZDogJXNcbiIsIGN4LT5jYXJkX25hbWUpOworCisJLyogTG9hZCBjeDE4IHN1Ym1vZHVsZXMgKGN4MTgtYWxzYSkgKi8KKwlyZXF1ZXN0X21vZHVsZXMoY3gpOworCiAJcmV0dXJuIDA7CiAKIGZyZWVfc3RyZWFtczoKQEAgLTEyMjAsNiArMTI2OCw3IEBACiAJa2ZyZWUoY3gpOwogfQogCisKIC8qIGRlZmluZSBhIHBjaV9kcml2ZXIgZm9yIGNhcmQgZGV0ZWN0aW9uICovCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3gxOF9wY2lfZHJpdmVyID0gewogICAgICAgLm5hbWUgPSAgICAgImN4MTgiLApAQCAtMTIzMCw3ICsxMjc5LDggQEAKIAogc3RhdGljIGludCBfX2luaXQgbW9kdWxlX3N0YXJ0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY3gxODogIFN0YXJ0IGluaXRpYWxpemF0aW9uLCB2ZXJzaW9uICVzXG4iLCBDWDE4X1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gImN4MTg6ICBTdGFydCBpbml0aWFsaXphdGlvbiwgdmVyc2lvbiAlc1xuIiwKKwkgICAgICAgQ1gxOF9WRVJTSU9OKTsKIAogCS8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KIAlpZiAoY3gxOF9maXJzdF9taW5vciA8IDAgfHwgY3gxOF9maXJzdF9taW5vciA+PSBDWDE4X01BWF9DQVJEUykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAppbmRleCBlM2Y3OTExLi4yM2FkNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaApAQCAtMTI2LDEwICsxMjYsMjIgQEAKICNkZWZpbmUgQ1gxOF82MjVfTElORV9FTkNfWVVWX0JVRlNJWkUJKENYMThfVU5JVF9FTkNfWVVWX0JVRlNJWkUgKiA1NzYvMzIpCiAjZGVmaW5lIENYMThfNTI1X0xJTkVfRU5DX1lVVl9CVUZTSVpFCShDWDE4X1VOSVRfRU5DX1lVVl9CVUZTSVpFICogNDgwLzMyKQogCisvKiBJRFggYnVmZmVyIHNpemUgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIGluZGV4IGVudHJ5IHNpemUgZnJvbSB0aGUgY2hpcCAqLworc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSB7CisJX19sZTMyIGxlbmd0aDsKKwlfX2xlMzIgb2Zmc2V0X2xvdzsKKwlfX2xlMzIgb2Zmc2V0X2hpZ2g7CisJX19sZTMyIGZsYWdzOworCV9fbGUzMiBwdHNfbG93OworCV9fbGUzMiBwdHNfaGlnaDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBDWDE4X1VOSVRfRU5DX0lEWF9CVUZTSVpFIFwKKwkoc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpICogVjRMMl9FTkNfSURYX0VOVFJJRVMpCisKIC8qIERNQSBidWZmZXIsIGRlZmF1bHQgc2l6ZSBpbiBrQiBhbGxvY2F0ZWQgKi8KICNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19UU19CVUZTSVpFICAgMzIKICNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19NUEdfQlVGU0laRSAgMzIKLSNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19JRFhfQlVGU0laRSAgMzIKKyNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19JRFhfQlVGU0laRSAgKENYMThfVU5JVF9FTkNfSURYX0JVRlNJWkUgKiAxIC8gMTAyNCArIDEpCiAjZGVmaW5lIENYMThfREVGQVVMVF9FTkNfWVVWX0JVRlNJWkUgIChDWDE4X1VOSVRfRU5DX1lVVl9CVUZTSVpFICogMyAvIDEwMjQgKyAxKQogI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX1BDTV9CVUZTSVpFICAgNAogCkBAIC0yMzQsMTYgKzI0Niw4IEBACiAjZGVmaW5lIENYMThfV0FSTl9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pICAgICB2NGwyX3dhcm4oZGV2LCBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBDWDE4X0lORk9fREVWKGRldiwgZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKGRldiwgZm10ICwgIyMgYXJncykKIAotLyogVmFsdWVzIGZvciBDWDE4X0FQSV9ERUNfUExBWUJBQ0tfU1BFRUQgbXBlZ19mcmFtZV90eXBlX21hc2sgcGFyYW1ldGVyOiAqLwotI2RlZmluZSBNUEVHX0ZSQU1FX1RZUEVfSUZSQU1FIDEKLSNkZWZpbmUgTVBFR19GUkFNRV9UWVBFX0lGUkFNRV9QRlJBTUUgMwotI2RlZmluZSBNUEVHX0ZSQU1FX1RZUEVfQUxMIDcKLQotI2RlZmluZSBDWDE4X01BWF9QR01fSU5ERVggKDQwMCkKLQogZXh0ZXJuIGludCBjeDE4X2RlYnVnOwogCi0KIHN0cnVjdCBjeDE4X29wdGlvbnMgewogCWludCBtZWdhYnl0ZXNbQ1gxOF9NQVhfU1RSRUFNU107IC8qIFNpemUgaW4gbWVnYWJ5dGVzIG9mIGVhY2ggc3RyZWFtICovCiAJaW50IGNhcmR0eXBlOwkJLyogZm9yY2UgY2FyZCB0eXBlIG9uIGxvYWQgKi8KQEAgLTI3Niw2ICsyODAsMTggQEAKICNkZWZpbmUgQ1gxOF9TTElDRURfVFlQRV9XU1NfNjI1ICAgICAgICAoNSkKICNkZWZpbmUgQ1gxOF9TTElDRURfVFlQRV9WUFMgICAgICAgICAgICAoNykKIAorLyoqCisgKiBsaXN0X2VudHJ5X2lzX3Bhc3RfZW5kIC0gY2hlY2sgaWYgYSBwcmV2aW91cyBsb29wIGN1cnNvciBpcyBvZmYgbGlzdCBlbmQKKyAqIEBwb3M6CXRoZSB0eXBlICogcHJldmlvdXNseSB1c2VkIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqCisgKiBDaGVjayBpZiB0aGUgZW50cnkncyBsaXN0X2hlYWQgaXMgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHRodXMgaXQncyBub3QgYQorICogcmVhbCBlbnRyeSBidXQgd2FzIHRoZSBsb29wIGN1cnNvciB0aGF0IHdhbGtlZCBwYXN0IHRoZSBlbmQKKyAqLworI2RlZmluZSBsaXN0X2VudHJ5X2lzX3Bhc3RfZW5kKHBvcywgaGVhZCwgbWVtYmVyKSBcCisJKCZwb3MtPm1lbWJlciA9PSAoaGVhZCkpCisKIHN0cnVjdCBjeDE4X2J1ZmZlciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKQEAgLTU1OCw2ICs1NzQsMTAgQEAKIAlpbnQgc3RyZWFtX2J1ZmZlcnNbQ1gxOF9NQVhfU1RSRUFNU107IC8qICMgb2YgYnVmZmVycyBmb3IgZWFjaCBzdHJlYW0gKi8KIAlpbnQgc3RyZWFtX2J1Zl9zaXplW0NYMThfTUFYX1NUUkVBTVNdOyAvKiBTdHJlYW0gYnVmZmVyIHNpemUgKi8KIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gc3RyZWFtc1tDWDE4X01BWF9TVFJFQU1TXTsgCS8qIFN0cmVhbSBkYXRhICovCisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmFsc2E7IC8qIEFMU0EgaW50ZXJmYWNlIGZvciBQQ00gY2FwdHVyZSBzdHJlYW0gKi8KKwl2b2lkICgqcGNtX2Fubm91bmNlX2NhbGxiYWNrKShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY2FyZCwgdTggKnBjbV9kYXRhLAorCQkJCSAgICAgIHNpemVfdCBudW1fYnl0ZXMpOworCiAJdW5zaWduZWQgbG9uZyBpX2ZsYWdzOyAgLyogZ2xvYmFsIGN4MTggZmxhZ3MgKi8KIAlhdG9taWNfdCBhbmFfY2FwdHVyaW5nOwkvKiBjb3VudCBudW1iZXIgb2YgYWN0aXZlIGFuYWxvZyBjYXB0dXJlIHN0cmVhbXMgKi8KIAlhdG9taWNfdCB0b3RfY2FwdHVyaW5nOwkvKiB0b3RhbCBjb3VudCBudW1iZXIgb2YgYWN0aXZlIGNhcHR1cmUgc3RyZWFtcyAqLwpAQCAtNTc1LDEyICs1OTUsNiBAQAogCiAJc3RydWN0IHZiaV9pbmZvIHZiaTsKIAotCXUzMiBwZ21faW5mb19vZmZzZXQ7Ci0JdTMyIHBnbV9pbmZvX251bTsKLQl1MzIgcGdtX2luZm9fd3JpdGVfaWR4OwotCXUzMiBwZ21faW5mb19yZWFkX2lkeDsKLQlzdHJ1Y3QgdjRsMl9lbmNfaWR4X2VudHJ5IHBnbV9pbmZvW0NYMThfTUFYX1BHTV9JTkRFWF07Ci0KIAl1NjQgbXBnX2RhdGFfcmVjZWl2ZWQ7CiAJdTY0IHZiaV9kYXRhX2luc2VydGVkOwogCkBAIC02MjMsNiArNjM3LDkgQEAKIAl1MzIgYWN0aXZlX2lucHV0OwogCXY0bDJfc3RkX2lkIHN0ZDsKIAl2NGwyX3N0ZF9pZCB0dW5lcl9zdGQ7CS8qIFRoZSBub3JtIG9mIHRoZSB0dW5lciAoZml4ZWQpICovCisKKwkvKiBVc2VkIGZvciBjeDE4LWFsc2EgbW9kdWxlIGxvYWRpbmcgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVxdWVzdF9tb2R1bGVfd2s7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjeDE4ICp0b19jeDE4KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCkBAIC02MzAsNiArNjQ3LDkgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgY3gxOCwgdjRsMl9kZXYpOwogfQogCisvKiBjeDE4IGV4dGVuc2lvbnMgdG8gYmUgbG9hZGVkICovCitleHRlcm4gaW50ICgqY3gxOF9leHRfaW5pdCkoc3RydWN0IGN4MTggKik7CisKIC8qIEdsb2JhbHMgKi8KIGV4dGVybiBpbnQgY3gxOF9maXJzdF9taW5vcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwppbmRleCA3MWFkMmQxLi4wYWUyYzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwpAQCAtMjEzLDEwICsyMTMsMTQgQEAKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqc3RyZWFtID0gKHN0cnVjdCBjeDE4X3N0cmVhbSAqKSBkZW11eC0+cHJpdjsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSBzdHJlYW0tPmN4OworCXN0cnVjdCBjeDE4ICpjeDsKIAlpbnQgcmV0OwogCXUzMiB2OwogCisJaWYgKCFzdHJlYW0pCisJCXJldHVybiAtRUlOVkFMOworCisJY3ggPSBzdHJlYW0tPmN4OwogCUNYMThfREVCVUdfSU5GTygiU3RhcnQgZmVlZDogcGlkID0gMHgleCBpbmRleCA9ICVkXG4iLAogCQkJZmVlZC0+cGlkLCBmZWVkLT5pbmRleCk7CiAKQEAgLTI1MywxMiArMjU3LDEwIEBACiAJaWYgKCFkZW11eC0+ZG14LmZyb250ZW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghc3RyZWFtKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW11dGV4X2xvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKIAlpZiAoc3RyZWFtLT5kdmIuZmVlZGluZysrID09IDApIHsKIAkJQ1gxOF9ERUJVR19JTkZPKCJTdGFydGluZyBUcmFuc3BvcnQgRE1BXG4iKTsKKwkJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJc2V0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzdHJlYW0tPnNfZmxhZ3MpOwogCQlyZXQgPSBjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbShzdHJlYW0pOwogCQlpZiAocmV0IDwgMCkgewpAQCAtMjY3LDYgKzI2OSw3IEBACiAJCQlpZiAoc3RyZWFtLT5kdmIuZmVlZGluZyA9PSAwKQogCQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzdHJlYW0tPnNfZmxhZ3MpOwogCQl9CisJCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAl9IGVsc2UKIAkJcmV0ID0gMDsKIAltdXRleF91bmxvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKQEAgLTI3OSwxNyArMjgyLDIwIEBACiB7CiAJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSBmZWVkLT5kZW11eDsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnN0cmVhbSA9IChzdHJ1Y3QgY3gxOF9zdHJlYW0gKilkZW11eC0+cHJpdjsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSBzdHJlYW0tPmN4OworCXN0cnVjdCBjeDE4ICpjeDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCUNYMThfREVCVUdfSU5GTygiU3RvcCBmZWVkOiBwaWQgPSAweCV4IGluZGV4ID0gJWRcbiIsCi0JCQlmZWVkLT5waWQsIGZlZWQtPmluZGV4KTsKLQogCWlmIChzdHJlYW0pIHsKKwkJY3ggPSBzdHJlYW0tPmN4OworCQlDWDE4X0RFQlVHX0lORk8oIlN0b3AgZmVlZDogcGlkID0gMHgleCBpbmRleCA9ICVkXG4iLAorCQkJCWZlZWQtPnBpZCwgZmVlZC0+aW5kZXgpOworCiAJCW11dGV4X2xvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKIAkJaWYgKC0tc3RyZWFtLT5kdmIuZmVlZGluZyA9PSAwKSB7CiAJCQlDWDE4X0RFQlVHX0lORk8oIlN0b3BwaW5nIFRyYW5zcG9ydCBETUFcbiIpOworCQkJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJCXJldCA9IGN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc3RyZWFtLCAwKTsKKwkJCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJfSBlbHNlCiAJCQlyZXQgPSAwOwogCQltdXRleF91bmxvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwppbmRleCBjMDg4NWM2Li44NjNjZTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCkBAIC0zNywxNSArMzcsMjEgQEAKIAogLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBjbGFpbSB0aGUgc3RyZWFtIGZvciBhIHNwZWNpZmljIGZpbGUgZGVzY3JpcHRvci4KICAgIElmIG5vIG9uZSBlbHNlIGlzIHVzaW5nIHRoaXMgc3RyZWFtIHRoZW4gdGhlIHN0cmVhbSBpcyBjbGFpbWVkIGFuZAotICAgYXNzb2NpYXRlZCBWQkkgc3RyZWFtcyBhcmUgYWxzbyBhdXRvbWF0aWNhbGx5IGNsYWltZWQuCisgICBhc3NvY2lhdGVkIFZCSSBhbmQgSURYIHN0cmVhbXMgYXJlIGFsc28gYXV0b21hdGljYWxseSBjbGFpbWVkLgogICAgUG9zc2libGUgZXJyb3IgcmV0dXJuczogLUVCVVNZIGlmIHNvbWVvbmUgZWxzZSBoYXMgY2xhaW1lZAogICAgdGhlIHN0cmVhbSBvciAwIG9uIHN1Y2Nlc3MuICovCi1zdGF0aWMgaW50IGN4MThfY2xhaW1fc3RyZWFtKHN0cnVjdCBjeDE4X29wZW5faWQgKmlkLCBpbnQgdHlwZSkKK2ludCBjeDE4X2NsYWltX3N0cmVhbShzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGN4MTggKmN4ID0gaWQtPmN4OwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKLQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfdmJpOwotCWludCB2YmlfdHlwZTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfYXNzb2M7CisKKwkvKiBOb3RoaW5nIHNob3VsZCBldmVyIHRyeSB0byBkaXJlY3RseSBjbGFpbSB0aGUgSURYIHN0cmVhbSAqLworCWlmICh0eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgeworCQlDWDE4X1dBUk4oIk1QRUcgSW5kZXggc3RyZWFtIGNhbm5vdCBiZSBjbGFpbWVkICIKKwkJCSAgImRpcmVjdGx5LCBidXQgc29tZXRoaW5nIHRyaWVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9TX0NMQUlNRUQsICZzLT5zX2ZsYWdzKSkgewogCQkvKiBzb21lb25lIGFscmVhZHkgY2xhaW1lZCB0aGlzIHN0cmVhbSAqLwpAQCAtNjcsMzIgKzczLDQ3IEBACiAJfQogCXMtPmlkID0gaWQtPm9wZW5faWQ7CiAKLQkvKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgbmVlZHMgdG8gY2xhaW0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJCi0JICAgKHByb3ZpZGVkIFZCSSBpbnNlcnRpb24gaXMgb24gYW5kIHNsaWNlZCBWQkkgaXMgc2VsZWN0ZWQpLCBmb3IgYWxsCi0JICAgb3RoZXIgc3RyZWFtcyB3ZSdyZSBkb25lICovCi0JaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JICAgIGN4LT52YmkuaW5zZXJ0X21wZWcgJiYgIWN4MThfcmF3X3ZiaShjeCkpIHsKLQkJdmJpX3R5cGUgPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkk7Ci0JfSBlbHNlIHsKKwkvKgorCSAqIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyBuZWVkcyB0byBjbGFpbToKKwkgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkksIGlmIFZCSSBpbnNlcnRpb24gaXMgb24gZm9yIHNsaWNlZCBWQkksIG9yCisJICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYLCBpZiBWQkkgaW5zZXJ0aW9uIGlzIG9mZiBmb3Igc2xpY2VkIFZCSQorCSAqIChXZSBkb24ndCB5ZXQgZml4IHVwIE1QRUcgSW5kZXggZW50cmllcyBmb3Igb3VyIGluc2VydGVkIHBhY2tldHMpLgorCSAqCisJICogRm9yIGFsbCBvdGhlciBzdHJlYW1zIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKHR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKQogCQlyZXR1cm4gMDsKLQl9Ci0Jc192YmkgPSAmY3gtPnN0cmVhbXNbdmJpX3R5cGVdOwogCi0Jc2V0X2JpdChDWDE4X0ZfU19DTEFJTUVELCAmc192YmktPnNfZmxhZ3MpOworCXNfYXNzb2MgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKKwlpZiAoY3gtPnZiaS5pbnNlcnRfbXBlZyAmJiAhY3gxOF9yYXdfdmJpKGN4KSkKKwkJc19hc3NvYyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldOworCWVsc2UgaWYgKCFjeDE4X3N0cmVhbV9lbmFibGVkKHNfYXNzb2MpKQorCQlyZXR1cm4gMDsKKworCXNldF9iaXQoQ1gxOF9GX1NfQ0xBSU1FRCwgJnNfYXNzb2MtPnNfZmxhZ3MpOwogCiAJLyogbWFyayB0aGF0IGl0IGlzIHVzZWQgaW50ZXJuYWxseSAqLwotCXNldF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc192YmktPnNfZmxhZ3MpOworCXNldF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc19hc3NvYy0+c19mbGFncyk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGN4MThfY2xhaW1fc3RyZWFtKTsKIAogLyogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhIHByZXZpb3VzbHkgY2xhaW1lZCBzdHJlYW0uIEl0IHdpbGwgdGFrZSBpbnRvCiAgICBhY2NvdW50IGFzc29jaWF0ZWQgVkJJIHN0cmVhbXMuICovCi1zdGF0aWMgdm9pZCBjeDE4X3JlbGVhc2Vfc3RyZWFtKHN0cnVjdCBjeDE4X3N0cmVhbSAqcykKK3ZvaWQgY3gxOF9yZWxlYXNlX3N0cmVhbShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMpCiB7CiAJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7Ci0Jc3RydWN0IGN4MThfc3RyZWFtICpzX3ZiaTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfYXNzb2M7CiAKIAlzLT5pZCA9IC0xOworCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgeworCQkvKgorCQkgKiBUaGUgSURYIHN0cmVhbSBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSwgYW5kIGNhbgorCQkgKiBvbmx5IGJlIGluZGlyZWN0bHkgdW5jbGFpbWVkIGJ5IHVuY2xhaW1pbmcgdGhlIE1QRyBzdHJlYW0uCisJCSAqLworCQlyZXR1cm47CisJfQorCiAJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJICYmCiAJCXRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnMtPnNfZmxhZ3MpKSB7CiAJCS8qIHRoaXMgc3RyZWFtIGlzIHN0aWxsIGluIHVzZSBpbnRlcm5hbGx5ICovCkBAIC0xMDUsMjUgKzEyNiwzNiBAQAogCiAJY3gxOF9mbHVzaF9xdWV1ZXMocyk7CiAKLQkvKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgbmVlZHMgdG8gcmVsZWFzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkksCi0JICAgZm9yIGFsbCBvdGhlciBzdHJlYW1zIHdlJ3JlIGRvbmUgKi8KLQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpCi0JCXNfdmJpID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07Ci0JZWxzZQorCS8qCisJICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHIG5lZWRzIHRvIHJlbGVhc2UgdGhlCisJICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJIGFuZC9vciBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFggc3RyZWFtcy4KKwkgKgorCSAqIEZvciBhbGwgb3RoZXIgc3RyZWFtcyB3ZSdyZSBkb25lLgorCSAqLworCWlmIChzLT50eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykKIAkJcmV0dXJuOwogCi0JLyogY2xlYXIgaW50ZXJuYWwgdXNlIGZsYWcgKi8KLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX3ZiaS0+c19mbGFncykpIHsKLQkJLyogd2FzIGFscmVhZHkgY2xlYXJlZCAqLwotCQlyZXR1cm47CisJLyogVW5jbGFpbSB0aGUgYXNzb2NpYXRlZCBNUEVHIEluZGV4IHN0cmVhbSAqLworCXNfYXNzb2MgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfYXNzb2MtPnNfZmxhZ3MpKSB7CisJCWNsZWFyX2JpdChDWDE4X0ZfU19DTEFJTUVELCAmc19hc3NvYy0+c19mbGFncyk7CisJCWN4MThfZmx1c2hfcXVldWVzKHNfYXNzb2MpOwogCX0KLQlpZiAoc192YmktPmlkICE9IC0xKSB7Ci0JCS8qIFZCSSBzdHJlYW0gc3RpbGwgY2xhaW1lZCBieSBhIGZpbGUgZGVzY3JpcHRvciAqLwotCQlyZXR1cm47CisKKwkvKiBVbmNsYWltIHRoZSBhc3NvY2lhdGVkIFZCSSBzdHJlYW0gKi8KKwlzX2Fzc29jID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX2Fzc29jLT5zX2ZsYWdzKSkgeworCQlpZiAoc19hc3NvYy0+aWQgPT0gLTEpIHsKKwkJCS8qCisJCQkgKiBUaGUgVkJJIHN0cmVhbSBpcyBub3Qgc3RpbGwgY2xhaW1lZCBieSBhIGZpbGUKKwkJCSAqIGRlc2NyaXB0b3IsIHNvIGNvbXBsZXRlbHkgdW5jbGFpbSBpdC4KKwkJCSAqLworCQkJY2xlYXJfYml0KENYMThfRl9TX0NMQUlNRUQsICZzX2Fzc29jLT5zX2ZsYWdzKTsKKwkJCWN4MThfZmx1c2hfcXVldWVzKHNfYXNzb2MpOworCQl9CiAJfQotCWNsZWFyX2JpdChDWDE4X0ZfU19DTEFJTUVELCAmc192YmktPnNfZmxhZ3MpOwotCWN4MThfZmx1c2hfcXVldWVzKHNfdmJpKTsKIH0KK0VYUE9SVF9TWU1CT0woY3gxOF9yZWxlYXNlX3N0cmVhbSk7CiAKIHN0YXRpYyB2b2lkIGN4MThfZHVhbHdhdGNoKHN0cnVjdCBjeDE4ICpjeCkKIHsKQEAgLTE3Nyw5ICsyMDksNyBAQAogCSplcnIgPSAwOwogCXdoaWxlICgxKSB7CiAJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgewotCQkJLyogUHJvY2VzcyBwZW5kaW5nIHByb2dyYW0gaW5mbyB1cGRhdGVzIGFuZCBwZW5kaW5nCi0JCQkgICBWQkkgZGF0YSAqLwotCisJCQkvKiBQcm9jZXNzIHBlbmRpbmcgcHJvZ3JhbSB1cGRhdGVzIGFuZCBWQkkgZGF0YSAqLwogCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgY3gtPmR1YWx3YXRjaF9qaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKSkpIHsKIAkJCQljeC0+ZHVhbHdhdGNoX2ppZmZpZXMgPSBqaWZmaWVzOwogCQkJCWN4MThfZHVhbHdhdGNoKGN4KTsKQEAgLTM2MiwxOCArMzkyLDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCi0vKioKLSAqIGxpc3RfZW50cnlfaXNfcGFzdF9lbmQgLSBjaGVjayBpZiBhIHByZXZpb3VzIGxvb3AgY3Vyc29yIGlzIG9mZiBsaXN0IGVuZAotICogQHBvczoJdGhlIHR5cGUgKiBwcmV2aW91c2x5IHVzZWQgYXMgYSBsb29wIGN1cnNvci4KLSAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgotICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgotICoKLSAqIENoZWNrIGlmIHRoZSBlbnRyeSdzIGxpc3RfaGVhZCBpcyB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgdGh1cyBpdCdzIG5vdCBhCi0gKiByZWFsIGVudHJ5IGJ1dCB3YXMgdGhlIGxvb3AgY3Vyc29yIHRoYXQgd2Fsa2VkIHBhc3QgdGhlIGVuZAotICovCi0jZGVmaW5lIGxpc3RfZW50cnlfaXNfcGFzdF9lbmQocG9zLCBoZWFkLCBtZW1iZXIpIFwKLQkoJnBvcy0+bWVtYmVyID09IChoZWFkKSkKLQogc3RhdGljIHNpemVfdCBjeDE4X2NvcHlfbWRsX3RvX3VzZXIoc3RydWN0IGN4MThfc3RyZWFtICpzLAogCQlzdHJ1Y3QgY3gxOF9tZGwgKm1kbCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCB1Y291bnQpCiB7CkBAIC00OTgsNiArNTE2LDcgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2lkLT50eXBlXTsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfdmJpOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19pZHg7CiAKIAlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9SQUQpIHsKIAkJLyogeW91IGNhbm5vdCByZWFkIGZyb20gdGhlc2Ugc3RyZWFtIHR5cGVzLiAqLwpAQCAtNTE2LDI1ICs1MzUsMzMgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogU3RhcnQgVkJJIGNhcHR1cmUgaWYgcmVxdWlyZWQgKi8KKwkvKiBTdGFydCBhc3NvY2lhdGVkIFZCSSBvciBJRFggc3RyZWFtIGNhcHR1cmUgaWYgcmVxdWlyZWQgKi8KIAlzX3ZiaSA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldOwotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAmJgotCSAgICB0ZXN0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX3ZiaS0+c19mbGFncykgJiYKLQkgICAgIXRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpKSB7Ci0JCS8qIE5vdGU6IHRoZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgaXMgY2xhaW1lZAotCQkgICBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIE1QRyBzdHJlYW0gaXMgY2xhaW1lZC4KLQkJICAgV2Ugb25seSBuZWVkIHRvIHN0YXJ0IHRoZSBWQkkgY2FwdHVyaW5nLiAqLwotCQlpZiAoY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc192YmkpKSB7Ci0JCQlDWDE4X0RFQlVHX1dBUk4oIlZCSSBjYXB0dXJlIHN0YXJ0IGZhaWxlZFxuIik7Ci0KLQkJCS8qIEZhaWx1cmUsIGNsZWFuIHVwIGFuZCByZXR1cm4gYW4gZXJyb3IgKi8KLQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncyk7Ci0JCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncyk7Ci0JCQkvKiBhbHNvIHJlbGVhc2VzIHRoZSBhc3NvY2lhdGVkIFZCSSBzdHJlYW0gKi8KLQkJCWN4MThfcmVsZWFzZV9zdHJlYW0ocyk7Ci0JCQlyZXR1cm4gLUVJTzsKKwlzX2lkeCA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgeworCQkvKgorCQkgKiBUaGUgVkJJIGFuZCBJRFggc3RyZWFtcyBzaG91bGQgaGF2ZSBiZWVuIGNsYWltZWQKKwkJICogYXV0b21hdGljYWxseSwgaWYgZm9yIGludGVybmFsIHVzZSwgd2hlbiB0aGUgTVBHIHN0cmVhbSB3YXMKKwkJICogY2xhaW1lZC4gIFdlIG9ubHkgbmVlZCB0byBzdGFydCB0aGVzZSBzdHJlYW1zIGNhcHR1cmluZy4KKwkJICovCisJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX2lkeC0+c19mbGFncykgJiYKKwkJICAgICF0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfaWR4LT5zX2ZsYWdzKSkgeworCQkJaWYgKGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKHNfaWR4KSkgeworCQkJCUNYMThfREVCVUdfV0FSTigiSURYIGNhcHR1cmUgc3RhcnQgZmFpbGVkXG4iKTsKKwkJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc19pZHgtPnNfZmxhZ3MpOworCQkJCWdvdG8gc3RhcnRfZmFpbGVkOworCQkJfQorCQkJQ1gxOF9ERUJVR19JTkZPKCJJRFggY2FwdHVyZSBzdGFydGVkXG4iKTsKIAkJfQotCQlDWDE4X0RFQlVHX0lORk8oIlZCSSBpbnNlcnRpb24gc3RhcnRlZFxuIik7CisJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX3ZiaS0+c19mbGFncykgJiYKKwkJICAgICF0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKSkgeworCQkJaWYgKGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKHNfdmJpKSkgeworCQkJCUNYMThfREVCVUdfV0FSTigiVkJJIGNhcHR1cmUgc3RhcnQgZmFpbGVkXG4iKTsKKwkJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpOworCQkJCWdvdG8gc3RhcnRfZmFpbGVkOworCQkJfQorCQkJQ1gxOF9ERUJVR19JTkZPKCJWQkkgaW5zZXJ0aW9uIHN0YXJ0ZWRcbiIpOworCQl9CiAJfQogCiAJLyogVGVsbCB0aGUgY2FyZCB0byBzdGFydCBjYXB0dXJpbmcgKi8KQEAgLTU0NywxOSArNTc0LDI5IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qIGZhaWx1cmUsIGNsZWFuIHVwICovCitzdGFydF9mYWlsZWQ6CiAJQ1gxOF9ERUJVR19XQVJOKCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyaW5nIGZvciBzdHJlYW0gJXNcbiIsIHMtPm5hbWUpOwogCi0JLyogTm90ZTogdGhlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSBpcyByZWxlYXNlZAotCSAgIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgTVBHIHN0cmVhbSBpcyByZWxlYXNlZC4KLQkgICBXZSBvbmx5IG5lZWQgdG8gc3RvcCB0aGUgVkJJIGNhcHR1cmluZy4gKi8KLQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKLQkgICAgdGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpKSB7Ci0JCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc192YmksIDApOwotCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpOworCS8qCisJICogVGhlIGFzc29jaWF0ZWQgVkJJIGFuZCBJRFggc3RyZWFtcyBmb3IgaW50ZXJuYWwgdXNlIGFyZSByZWxlYXNlZAorCSAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgTVBHIHN0cmVhbSBpcyByZWxlYXNlZC4gIFdlIG9ubHkgbmVlZCB0byBzdG9wCisJICogdGhlIGFzc29jaWF0ZWQgc3RyZWFtLgorCSAqLworCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgeworCQkvKiBTdG9wIHRoZSBJRFggc3RyZWFtIHdoaWNoIGlzIGFsd2F5cyBmb3IgaW50ZXJuYWwgdXNlICovCisJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX2lkeC0+c19mbGFncykpIHsKKwkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc19pZHgsIDApOworCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfaWR4LT5zX2ZsYWdzKTsKKwkJfQorCQkvKiBTdG9wIHRoZSBWQkkgc3RyZWFtLCBpZiBvbmx5IHJ1bm5pbmcgZm9yIGludGVybmFsIHVzZSAqLworCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpICYmCisJCSAgICAhdGVzdF9iaXQoQ1gxOF9GX1NfQVBQTF9JTywgJnNfdmJpLT5zX2ZsYWdzKSkgeworCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSwgMCk7CisJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpOworCQl9CiAJfQogCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKLQljeDE4X3JlbGVhc2Vfc3RyZWFtKHMpOworCWN4MThfcmVsZWFzZV9zdHJlYW0ocyk7IC8qIEFsc28gcmVsZWFzZXMgYXNzb2NpYXRlZCBzdHJlYW1zICovCiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTYxOCw2ICs2NTUsOCBAQAogewogCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaWQtPnR5cGVdOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc192YmkgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfaWR4ID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CiAKIAlDWDE4X0RFQlVHX0lPQ1RMKCJjbG9zZSgpIG9mICVzXG4iLCBzLT5uYW1lKTsKIApAQCAtNjI1LDE3ICs2NjQsMTkgQEAKIAogCS8qIFN0b3AgY2FwdHVyaW5nICovCiAJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpKSB7Ci0JCXN0cnVjdCBjeDE4X3N0cmVhbSAqc192YmkgPQotCQkJJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07Ci0KIAkJQ1gxOF9ERUJVR19JTkZPKCJjbG9zZSBzdG9wcGluZyBjYXB0dXJlXG4iKTsKLQkJLyogU3BlY2lhbCBjYXNlOiBhIHJ1bm5pbmcgVkJJIGNhcHR1cmUgZm9yIFZCSSBpbnNlcnRpb24KLQkJICAgaW4gdGhlIG1wZWcgc3RyZWFtLiBOZWVkIHRvIHN0b3AgdGhhdCB0b28uICovCi0JCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKLQkJICAgIHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKSAmJgotCQkgICAgIXRlc3RfYml0KENYMThfRl9TX0FQUExfSU8sICZzX3ZiaS0+c19mbGFncykpIHsKLQkJCUNYMThfREVCVUdfSU5GTygiY2xvc2Ugc3RvcHBpbmcgZW1iZWRkZWQgVkJJIGNhcHR1cmVcbiIpOwotCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSwgMCk7CisJCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKKwkJCS8qIFN0b3AgaW50ZXJuYWwgdXNlIGFzc29jaWF0ZWQgVkJJIGFuZCBJRFggc3RyZWFtcyAqLworCQkJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKSAmJgorCQkJICAgICF0ZXN0X2JpdChDWDE4X0ZfU19BUFBMX0lPLCAmc192YmktPnNfZmxhZ3MpKSB7CisJCQkJQ1gxOF9ERUJVR19JTkZPKCJjbG9zZSBzdG9wcGluZyBlbWJlZGRlZCBWQkkgIgorCQkJCQkJImNhcHR1cmVcbiIpOworCQkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc192YmksIDApOworCQkJfQorCQkJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfaWR4LT5zX2ZsYWdzKSkgeworCQkJCUNYMThfREVCVUdfSU5GTygiY2xvc2Ugc3RvcHBpbmcgSURYIGNhcHR1cmVcbiIpOworCQkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc19pZHgsIDApOworCQkJfQogCQl9CiAJCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgJiYKIAkJICAgIHRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnMtPnNfZmxhZ3MpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5oCmluZGV4IDkyZTJkNWQuLjVjOGZjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmgKQEAgLTM0LDMgKzM0LDYgQEAKIHZvaWQgY3gxOF9tdXRlKHN0cnVjdCBjeDE4ICpjeCk7CiB2b2lkIGN4MThfdW5tdXRlKHN0cnVjdCBjeDE4ICpjeCk7CiAKKy8qIFNoYXJlZCB3aXRoIGN4MTgtYWxzYSBtb2R1bGUgKi8KK2ludCBjeDE4X2NsYWltX3N0cmVhbShzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCwgaW50IHR5cGUpOwordm9pZCBjeDE4X3JlbGVhc2Vfc3RyZWFtKHN0cnVjdCBjeDE4X3N0cmVhbSAqcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwppbmRleCAzZTRmYzE5Li5iODFkZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKQEAgLTc3NSwxMCArNzc1LDE0MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9jeDE4X3Byb2Nlc3NfaWR4X2RhdGEoc3RydWN0IGN4MThfYnVmZmVyICpidWYsCisJCQkJICBzdHJ1Y3QgdjRsMl9lbmNfaWR4ICppZHgpCit7CisJaW50IGNvbnN1bWVkLCByZW1haW5pbmc7CisJc3RydWN0IHY0bDJfZW5jX2lkeF9lbnRyeSAqZV9pZHg7CisJc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSAqZV9idWY7CisKKwkvKiBGcmFtZSB0eXBlIGxvb2t1cDogMT1JLCAyPVAsIDQ9QiAqLworCWNvbnN0IGludCBtYXBwaW5nWzhdID0geworCQktMSwgVjRMMl9FTkNfSURYX0ZSQU1FX0ksIFY0TDJfRU5DX0lEWF9GUkFNRV9QLAorCQktMSwgVjRMMl9FTkNfSURYX0ZSQU1FX0IsIC0xLCAtMSwgLTEKKwl9OworCisJLyoKKwkgKiBBc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCBhIGJ1ZiBob2xkcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2YKKwkgKiBzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5IG9iamVjdHMgYW5kIGlzIHByb3Blcmx5IGFsaWduZWQuCisJICogVGhpcyBpcyBlbmZvcmNlZCBieSB0aGUgbW9kdWxlIG9wdGlvbnMgb24gSURYIGJ1ZmZlciBzaXplcy4KKwkgKi8KKwlyZW1haW5pbmcgPSBidWYtPmJ5dGVzdXNlZCAtIGJ1Zi0+cmVhZHBvczsKKwljb25zdW1lZCA9IDA7CisJZV9pZHggPSAmaWR4LT5lbnRyeVtpZHgtPmVudHJpZXNdOworCWVfYnVmID0gKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkgKikgJmJ1Zi0+YnVmW2J1Zi0+cmVhZHBvc107CisKKwl3aGlsZSAocmVtYWluaW5nID49IHNpemVvZihzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5KSAmJgorCSAgICAgICBpZHgtPmVudHJpZXMgPCBWNEwyX0VOQ19JRFhfRU5UUklFUykgeworCisJCWVfaWR4LT5vZmZzZXQgPSAoKCh1NjQpIGxlMzJfdG9fY3B1KGVfYnVmLT5vZmZzZXRfaGlnaCkpIDw8IDMyKQorCQkJCXwgbGUzMl90b19jcHUoZV9idWYtPm9mZnNldF9sb3cpOworCisJCWVfaWR4LT5wdHMgPSAoKCh1NjQpIChsZTMyX3RvX2NwdShlX2J1Zi0+cHRzX2hpZ2gpICYgMSkpIDw8IDMyKQorCQkJICAgICB8IGxlMzJfdG9fY3B1KGVfYnVmLT5wdHNfbG93KTsKKworCQllX2lkeC0+bGVuZ3RoID0gbGUzMl90b19jcHUoZV9idWYtPmxlbmd0aCk7CisKKwkJZV9pZHgtPmZsYWdzID0gbWFwcGluZ1tsZTMyX3RvX2NwdShlX2J1Zi0+ZmxhZ3MpICYgMHg3XTsKKworCQllX2lkeC0+cmVzZXJ2ZWRbMF0gPSAwOworCQllX2lkeC0+cmVzZXJ2ZWRbMV0gPSAwOworCisJCWlkeC0+ZW50cmllcysrOworCQllX2lkeCA9ICZpZHgtPmVudHJ5W2lkeC0+ZW50cmllc107CisJCWVfYnVmKys7CisKKwkJcmVtYWluaW5nIC09IHNpemVvZihzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5KTsKKwkJY29uc3VtZWQgKz0gc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpOworCX0KKworCS8qIFN3YWxsb3cgYW55IHBhcnRpYWwgZW50cmllcyBhdCB0aGUgZW5kLCBpZiB0aGVyZSBhcmUgYW55ICovCisJaWYgKHJlbWFpbmluZyA+IDAgJiYgcmVtYWluaW5nIDwgc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpKQorCQljb25zdW1lZCArPSByZW1haW5pbmc7CisKKwlidWYtPnJlYWRwb3MgKz0gY29uc3VtZWQ7CisJcmV0dXJuIGNvbnN1bWVkOworfQorCitzdGF0aWMgaW50IGN4MThfcHJvY2Vzc19pZHhfZGF0YShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsIHN0cnVjdCBjeDE4X21kbCAqbWRsLAorCQkJCSBzdHJ1Y3QgdjRsMl9lbmNfaWR4ICppZHgpCit7CisJaWYgKHMtPnR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtZGwtPmN1cnJfYnVmID09IE5VTEwpCisJCW1kbC0+Y3Vycl9idWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtZGwtPmJ1Zl9saXN0LAorCQkJCQkJIHN0cnVjdCBjeDE4X2J1ZmZlciwgbGlzdCk7CisKKwlpZiAobGlzdF9lbnRyeV9pc19wYXN0X2VuZChtZGwtPmN1cnJfYnVmLCAmbWRsLT5idWZfbGlzdCwgbGlzdCkpIHsKKwkJLyoKKwkJICogRm9yIHNvbWUgcmVhc29uIHdlJ3ZlIGV4aGF1c3RlZCB0aGUgYnVmZmVycywgYnV0IHRoZSBNREwKKwkJICogb2JqZWN0IHN0aWxsIHNhaWQgc29tZSBkYXRhIHdhcyB1bnJlYWQuCisJCSAqIEZpeCB0aGF0IGFuZCBiYWlsIG91dC4KKwkJICovCisJCW1kbC0+cmVhZHBvcyA9IG1kbC0+Ynl0ZXN1c2VkOworCQlyZXR1cm4gMDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20obWRsLT5jdXJyX2J1ZiwgJm1kbC0+YnVmX2xpc3QsIGxpc3QpIHsKKworCQkvKiBTa2lwIGFueSBlbXB0eSBidWZmZXJzIGluIHRoZSBNREwgKi8KKwkJaWYgKG1kbC0+Y3Vycl9idWYtPnJlYWRwb3MgPj0gbWRsLT5jdXJyX2J1Zi0+Ynl0ZXN1c2VkKQorCQkJY29udGludWU7CisKKwkJbWRsLT5yZWFkcG9zICs9IF9jeDE4X3Byb2Nlc3NfaWR4X2RhdGEobWRsLT5jdXJyX2J1ZiwgaWR4KTsKKworCQkvKiBleGl0IHdoZW4gTURMIGRyYWluZWQgb3IgcmVxdWVzdCBzYXRpc2ZpZWQgKi8KKwkJaWYgKGlkeC0+ZW50cmllcyA+PSBWNEwyX0VOQ19JRFhfRU5UUklFUyB8fAorCQkgICAgbWRsLT5jdXJyX2J1Zi0+cmVhZHBvcyA8IG1kbC0+Y3Vycl9idWYtPmJ5dGVzdXNlZCB8fAorCQkgICAgbWRsLT5yZWFkcG9zID49IG1kbC0+Ynl0ZXN1c2VkKQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGN4MThfZ19lbmNfaW5kZXgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCXN0cnVjdCB2NGwyX2VuY19pZHggKmlkeCkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCXMzMiB0bXA7CisJc3RydWN0IGN4MThfbWRsICptZGw7CisKKwlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpIC8qIE1vZHVsZSBvcHRpb25zIGluaGliaXRlZCBJRFggc3RyZWFtICovCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ29tcHV0ZSB0aGUgYmVzdCBjYXNlIG51bWJlciBvZiBlbnRyaWVzIHdlIGNhbiBidWZmZXIgKi8KKwl0bXAgPSBzLT5idWZmZXJzIC0KKwkJCSAgcy0+YnVmc19wZXJfbWRsICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYX0ZXX01ETF9NSU47CisJaWYgKHRtcCA8PSAwKQorCQl0bXAgPSAxOworCXRtcCA9IHRtcCAqIHMtPmJ1Zl9zaXplIC8gc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpOworCisJLyogRmlsbCBvdXQgdGhlIGhlYWRlciBvZiB0aGUgcmV0dXJuIHN0cnVjdHVyZSAqLworCWlkeC0+ZW50cmllcyA9IDA7CisJaWR4LT5lbnRyaWVzX2NhcCA9IHRtcDsKKwltZW1zZXQoaWR4LT5yZXNlcnZlZCwgMCwgc2l6ZW9mKGlkeC0+cmVzZXJ2ZWQpKTsKKworCS8qIFB1bGwgSURYIE1ETHMgYW5kIGJ1ZmZlcnMgZnJvbSBxX2Z1bGwgYW5kIHBvcHVsYXRlIHRoZSBlbnRyaWVzICovCisJZG8geworCQltZGwgPSBjeDE4X2RlcXVldWUocywgJnMtPnFfZnVsbCk7CisJCWlmIChtZGwgPT0gTlVMTCkgLyogTm8gbW9yZSBJRFggZGF0YSByaWdodCBub3cgKi8KKwkJCWJyZWFrOworCisJCS8qIEV4dHJhY3QgdGhlIEluZGV4IGVudHJ5IGRhdGEgZnJvbSB0aGUgTURMIGFuZCBidWZmZXJzICovCisJCWN4MThfcHJvY2Vzc19pZHhfZGF0YShzLCBtZGwsIGlkeCk7CisJCWlmIChtZGwtPnJlYWRwb3MgPCBtZGwtPmJ5dGVzdXNlZCkgeworCQkJLyogV2UgZmluaXNoZWQgd2l0aCBkYXRhIHJlbWFpbmluZywgcHVzaCB0aGUgTURMIGJhY2sgKi8KKwkJCWN4MThfcHVzaChzLCBtZGwsICZzLT5xX2Z1bGwpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBXZSBkcmFpbmVkIHRoaXMgTURMLCBzY2hlZHVsZSBpdCB0byBnbyB0byB0aGUgZmlybXdhcmUgKi8KKwkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnJlZSk7CisKKwl9IHdoaWxlIChpZHgtPmVudHJpZXMgPCBWNEwyX0VOQ19JRFhfRU5UUklFUyk7CisKKwkvKiBUZWxsIHRoZSB3b3JrIGhhbmRsZXIgdG8gc2VuZCBmcmVlIElEWCBNRExzIHRvIHRoZSBmaXJtd2FyZSAqLworCWN4MThfc3RyZWFtX2xvYWRfZndfcXVldWUocyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9lbmNvZGVyX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKaW5kZXggZjIzMWRkMC4uNmRjY2UyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImN4MTgtbWFpbGJveC5oIgogI2luY2x1ZGUgImN4MTgtcXVldWUuaCIKICNpbmNsdWRlICJjeDE4LXN0cmVhbXMuaCIKKyNpbmNsdWRlICJjeDE4LWFsc2EtcGNtLmgiIC8qIEZJWE1FIG1ha2UgY29uZmlndXJhYmxlICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICpycHVfc3RyW10gPSB7ICJBUFUiLCAiQ1BVIiwgIkVQVSIsICJIUFUiIH07CiAKQEAgLTE1Nyw2ICsxNTgsMzQgQEAKIAl9CiB9CiAKKworc3RhdGljIHZvaWQgY3gxOF9tZGxfc2VuZF90b19hbHNhKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfc3RyZWFtICpzLAorCQkJCSAgc3RydWN0IGN4MThfbWRsICptZGwpCit7CisJc3RydWN0IGN4MThfYnVmZmVyICpidWY7CisKKwlpZiAobWRsLT5ieXRlc3VzZWQgPT0gMCkKKwkJcmV0dXJuOworCisJLyogV2UgaWdub3JlIG1kbCBhbmQgYnVmIHJlYWRwb3MgYWNjb3VudGluZyBoZXJlIC0gaXQgZG9lc24ndCBtYXR0ZXIgKi8KKworCS8qIFRoZSBsaWtlbHkgY2FzZSAqLworCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZtZGwtPmJ1Zl9saXN0KSkgeworCQlidWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtZGwtPmJ1Zl9saXN0LCBzdHJ1Y3QgY3gxOF9idWZmZXIsCisJCQkJICAgICAgIGxpc3QpOworCQlpZiAoYnVmLT5ieXRlc3VzZWQpCisJCQljeC0+cGNtX2Fubm91bmNlX2NhbGxiYWNrKGN4LT5hbHNhLCBidWYtPmJ1ZiwKKwkJCQkJCSAgYnVmLT5ieXRlc3VzZWQpOworCQlyZXR1cm47CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidWYsICZtZGwtPmJ1Zl9saXN0LCBsaXN0KSB7CisJCWlmIChidWYtPmJ5dGVzdXNlZCA9PSAwKQorCQkJYnJlYWs7CisJCWN4LT5wY21fYW5ub3VuY2VfY2FsbGJhY2soY3gtPmFsc2EsIGJ1Zi0+YnVmLCBidWYtPmJ5dGVzdXNlZCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBlcHVfZG1hX2RvbmUoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9pbl93b3JrX29yZGVyICpvcmRlcikKIHsKIAl1MzIgaGFuZGxlLCBtZGxfYWNrX2NvdW50LCBpZDsKQEAgLTIyMywxMSArMjUyLDIxIEBACiAJCUNYMThfREVCVUdfSElfRE1BKCIlcyByZWN2IGJ5dGVzdXNlZCA9ICVkXG4iLAogCQkJCSAgcy0+bmFtZSwgbWRsLT5ieXRlc3VzZWQpOwogCi0JCWlmIChzLT50eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKQotCQkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnVsbCk7Ci0JCWVsc2UgeworCQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUykgewogCQkJY3gxOF9tZGxfc2VuZF90b19kdmIocywgbWRsKTsKIAkJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2ZyZWUpOworCQl9IGVsc2UgaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNKSB7CisJCQkvKiBQYXNzIHRoZSBkYXRhIHRvIGN4MTgtYWxzYSAqLworCQkJaWYgKGN4LT5wY21fYW5ub3VuY2VfY2FsbGJhY2sgIT0gTlVMTCkgeworCQkJCWN4MThfbWRsX3NlbmRfdG9fYWxzYShjeCwgcywgbWRsKTsKKwkJCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mcmVlKTsKKwkJCX0gZWxzZSB7CisJCQkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnVsbCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mdWxsKTsKKwkJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkKKwkJCQljeDE4X3N0cmVhbV9yb3RhdGVfaWR4X21kbHMoY3gpOwogCQl9CiAJfQogCS8qIFB1dCBhcyBtYW55IE1ETHMgYXMgcG9zc2libGUgYmFjayBpbnRvIGZ3IHVzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKaW5kZXggNjMzMDQ4Mi4uYWVmYzhjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCkBAIC00MTksNiArNDE5LDkgQEAKIHsKIAlzdHJ1Y3QgY3gxOF9tZGwgKm1kbDsKIAlzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKKworCUNYMThfREVCVUdfSU5GTygiRGVhbGxvY2F0aW5nIGJ1ZmZlcnMgZm9yICVzIHN0cmVhbVxuIiwgcy0+bmFtZSk7CiAKIAkvKiBtb3ZlIGFsbCBidWZmZXJzIHRvIGJ1Zl9wb29sIGFuZCBhbGwgTURMcyB0byBxX2lkbGUgKi8KIAljeDE4X3VubG9hZF9xdWV1ZXMocyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKaW5kZXggOTg3YTkzMC4uMDU0NDUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwpAQCAtMzE5LDExICszMTksMjcgQEAKIAogCS8qIFRlYXJkb3duIGFsbCBzdHJlYW1zICovCiAJZm9yICh0eXBlID0gMDsgdHlwZSA8IENYMThfTUFYX1NUUkVBTVM7IHR5cGUrKykgewotCQlpZiAoY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQpIHsKLQkJCWN4MThfZHZiX3VucmVnaXN0ZXIoJmN4LT5zdHJlYW1zW3R5cGVdKTsKLQkJCWN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkID0gZmFsc2U7CisKKwkJLyogTm8gc3RydWN0IHZpZGVvX2RldmljZSwgYnV0IGNhbiBoYXZlIGJ1ZmZlcnMgYWxsb2NhdGVkICovCisJCWlmICh0eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKSB7CisJCQlpZiAoY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQpIHsKKwkJCQljeDE4X2R2Yl91bnJlZ2lzdGVyKCZjeC0+c3RyZWFtc1t0eXBlXSk7CisJCQkJY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQgPSBmYWxzZTsKKwkJCQljeDE4X3N0cmVhbV9mcmVlKCZjeC0+c3RyZWFtc1t0eXBlXSk7CisJCQl9CisJCQljb250aW51ZTsKIAkJfQogCisJCS8qIE5vIHN0cnVjdCB2aWRlb19kZXZpY2UsIGJ1dCBjYW4gaGF2ZSBidWZmZXJzIGFsbG9jYXRlZCAqLworCQlpZiAodHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpIHsKKwkJCWlmIChjeC0+c3RyZWFtX2J1ZmZlcnNbdHlwZV0gIT0gMCkgeworCQkJCWN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXSA9IDA7CisJCQkJY3gxOF9zdHJlYW1fZnJlZSgmY3gtPnN0cmVhbXNbdHlwZV0pOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKiBJZiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGV4aXN0cywgY2FuIGhhdmUgYnVmZmVycyBhbGxvY2F0ZWQgKi8KIAkJdmRldiA9IGN4LT5zdHJlYW1zW3R5cGVdLnZpZGVvX2RldjsKIAogCQljeC0+c3RyZWFtc1t0eXBlXS52aWRlb19kZXYgPSBOVUxMOwpAQCAtNDQ3LDYgKzQ2MywzMiBAQAogCWN4MThfYXBpKGN4LCBDWDE4X0NQVV9TRVRfUkFXX1ZCSV9QQVJBTSwgNiwgZGF0YSk7CiB9CiAKK3ZvaWQgY3gxOF9zdHJlYW1fcm90YXRlX2lkeF9tZGxzKHN0cnVjdCBjeDE4ICpjeCkKK3sKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKKwlzdHJ1Y3QgY3gxOF9tZGwgKm1kbDsKKworCWlmICghY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkKKwkJcmV0dXJuOworCisJLyogUmV0dXJuIGlmIHRoZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyBsb3cgb24gTURMcyAqLworCWlmICgoYXRvbWljX3JlYWQoJnMtPnFfZnJlZS5kZXB0aCkgKyBhdG9taWNfcmVhZCgmcy0+cV9idXN5LmRlcHRoKSkgPj0KKwkJCQkJICAgIENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF9GV19NRExfTUlOKQorCQlyZXR1cm47CisKKwkvKiBSZXR1cm4gaWYgdGhlcmUgYXJlIG5vIE1ETHMgdG8gcm90YXRlIGJhY2sgdG8gdGhlIGZpcm13YXJlICovCisJaWYgKGF0b21pY19yZWFkKCZzLT5xX2Z1bGwuZGVwdGgpIDwgMikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUYWtlIHRoZSBvbGRlc3QgSURYIE1ETCBzdGlsbCBob2xkaW5nIGRhdGEsIGFuZCBkaXNjYXJkIGl0cyBpbmRleAorCSAqIGVudHJpZXMgYnkgc2NoZWR1bGluZyB0aGUgTURMIHRvIGdvIGJhY2sgdG8gdGhlIGZpcm13YXJlCisJICovCisJbWRsID0gY3gxOF9kZXF1ZXVlKHMsICZzLT5xX2Z1bGwpOworCWlmIChtZGwgIT0gTlVMTCkKKwkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnJlZSk7Cit9CisKIHN0YXRpYwogc3RydWN0IGN4MThfcXVldWUgKl9jeDE4X3N0cmVhbV9wdXRfbWRsX2Z3KHN0cnVjdCBjeDE4X3N0cmVhbSAqcywKIAkJCQkJICAgc3RydWN0IGN4MThfbWRsICptZGwpCkBAIC01NDYsOCArNTg4LDkgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKIAlpbnQgY2FwdHlwZSA9IDA7CiAJc3RydWN0IGN4MThfYXBpX2Z1bmNfcHJpdmF0ZSBwcml2OworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19pZHg7CiAKLQlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKKwlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJQ1gxOF9ERUJVR19JTkZPKCJTdGFydCBlbmNvZGVyIHN0cmVhbSAlc1xuIiwgcy0+bmFtZSk7CkBAIC01NjEsNiArNjA0LDkgQEAKIAkJY3gtPnNlYXJjaF9wYWNrX2hlYWRlciA9IDA7CiAJCWJyZWFrOwogCisJY2FzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFg6CisJCWNhcHR5cGUgPSBDQVBUVVJFX0NIQU5ORUxfVFlQRV9JTkRFWDsKKwkJYnJlYWs7CiAJY2FzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUzoKIAkJY2FwdHlwZSA9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTOwogCQlicmVhazsKQEAgLTYzNSwxMSArNjgxLDEzIEBACiAJCQljeDE4X3ZiaV9zZXR1cChzKTsKIAogCQkvKgotCQkgKiBhc3NpZ24gcHJvZ3JhbSBpbmRleCBpbmZvLgotCQkgKiBNYXNrIDc6IHNlbGVjdCBJL1AvQiwgTnVtX3JlcTogNDAwIG1heAotCQkgKiBGSVhNRSAtIGN1cnJlbnRseSB3ZSBoYXZlIHRoaXMgaGFyZGNvZGVkIGFzIGRpc2FibGVkCisJCSAqIFNlbGVjdCB0byByZWNlaXZlIEksIFAsIGFuZCBCIGZyYW1lIGluZGV4IGVudHJpZXMsIGlmIHRoZQorCQkgKiBpbmRleCBzdHJlYW0gaXMgZW5hYmxlZC4gIE90aGVyd2lzZSBkaXNhYmxlIGluZGV4IGVudHJ5CisJCSAqIGdlbmVyYXRpb24uCiAJCSAqLwotCQljeDE4X3ZhcGlfcmVzdWx0KGN4LCBkYXRhLCBDWDE4X0NQVV9TRVRfSU5ERVhUQUJMRSwgMSwgMCk7CisJCXNfaWR4ID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJCWN4MThfdmFwaV9yZXN1bHQoY3gsIGRhdGEsIENYMThfQ1BVX1NFVF9JTkRFWFRBQkxFLCAyLAorCQkJCSBzLT5oYW5kbGUsIGN4MThfc3RyZWFtX2VuYWJsZWQoc19pZHgpID8gNyA6IDApOwogCiAJCS8qIENhbGwgb3V0IHRvIHRoZSBjb21tb24gQ1gyMzQxeCBBUEkgc2V0dXAgZm9yIHVzZXIgY29udHJvbHMgKi8KIAkJcHJpdi5jeCA9IGN4OwpAQCAtNjk3LDYgKzc0NSw3IEBACiAJYXRvbWljX2luYygmY3gtPnRvdF9jYXB0dXJpbmcpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbSk7CiAKIHZvaWQgY3gxOF9zdG9wX2FsbF9jYXB0dXJlcyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CkBAIC03MDUsNyArNzU0LDcgQEAKIAlmb3IgKGkgPSBDWDE4X01BWF9TVFJFQU1TIC0gMTsgaSA+PSAwOyBpLS0pIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQorCQlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpCiAJCQljb250aW51ZTsKIAkJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpKQogCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzLCAwKTsKQEAgLTcxNyw3ICs3NjYsNyBAQAogCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwogCXVuc2lnbmVkIGxvbmcgdGhlbjsKIAotCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQorCWlmICghY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB5b3UgYXJlIGFsbG93ZWQgdG8gc3RvcCB0aGUgY2FwdHVyZQpAQCAtNzYyLDYgKzgxMSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbSk7CiAKIHUzMiBjeDE4X2ZpbmRfaGFuZGxlKHN0cnVjdCBjeDE4ICpjeCkKIHsKQEAgLTc4OSw3ICs4MzksNyBAQAogCQlzID0gJmN4LT5zdHJlYW1zW2ldOwogCQlpZiAocy0+aGFuZGxlICE9IGhhbmRsZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAocy0+dmlkZW9fZGV2IHx8IHMtPmR2Yi5lbmFibGVkKQorCQlpZiAoY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkKIAkJCXJldHVybiBzOwogCX0KIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaAppbmRleCA0YTAxZGI1Li4wYmZmMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oCkBAIC0yOCw2ICsyOCwxNiBAQAogaW50IGN4MThfc3RyZWFtc19yZWdpc3RlcihzdHJ1Y3QgY3gxOCAqY3gpOwogdm9pZCBjeDE4X3N0cmVhbXNfY2xlYW51cChzdHJ1Y3QgY3gxOCAqY3gsIGludCB1bnJlZ2lzdGVyKTsKIAorI2RlZmluZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhfRldfTURMX01JTiAoMykKK3ZvaWQgY3gxOF9zdHJlYW1fcm90YXRlX2lkeF9tZGxzKHN0cnVjdCBjeDE4ICpjeCk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjeDE4X3N0cmVhbV9lbmFibGVkKHN0cnVjdCBjeDE4X3N0cmVhbSAqcykKK3sKKwlyZXR1cm4gcy0+dmlkZW9fZGV2IHx8IHMtPmR2Yi5lbmFibGVkIHx8CisJICAgICAgIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCAmJgorCQlzLT5jeC0+c3RyZWFtX2J1ZmZlcnNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXSAhPSAwKTsKK30KKwogLyogUmVsYXRlZCB0byBzdWJtaXNzaW9uIG9mIG1kbHMgdG8gZmlybXdhcmUgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3N0cmVhbV9sb2FkX2Z3X3F1ZXVlKHN0cnVjdCBjeDE4X3N0cmVhbSAqcykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAppbmRleCA5YzBiNWJiLi4zZTFhZWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCkBAIC0yNCw3ICsyNCw3IEBACiAKICNkZWZpbmUgQ1gxOF9EUklWRVJfTkFNRSAiY3gxOCIKICNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NQUpPUiAxCi0jZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IgMworI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01JTk9SIDQKICNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDAKIAogI2RlZmluZSBDWDE4X1ZFUlNJT04gX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NQUpPUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IpICIuIiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAppbmRleCA4Njg4MDZlLi4yYzAwOTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKQEAgLTE5MSw3ICsxOTEsOCBAQAogI2RlZmluZSBDWDE4X0NQVV9TRVRfTUVESUFOX0NPUklORyAgICAgICAgICAgCShDUFVfQ01EX01BU0tfQ0FQVFVSRSB8IDB4MDAwRSkKIAogLyogRGVzY3JpcHRpb246IFRoaXMgY29tbWFuZCBzZXQgdGhlIHBpY3R1cmUgdHlwZSBtYXNrIGZvciBpbmRleCBmaWxlCi0gICBJTlswXSAtIAkwID0gZGlzYWJsZSBpbmRleCBmaWxlIG91dHB1dAorICAgSU5bMF0gLSBUYXNrIGhhbmRsZSAoaWdub3JlZCBieSBmaXJtd2FyZSkKKyAgIElOWzFdIC0gCTAgPSBkaXNhYmxlIGluZGV4IGZpbGUgb3V0cHV0CiAJCQkxID0gb3V0cHV0IEkgcGljdHVyZQogCQkJMiA9IFAgcGljdHVyZQogCQkJNCA9IEIgcGljdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYwppbmRleCBjNTA4MmE0Li42NGUwMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYwpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLwogCQlkdmItPmZyb250ZW5kLT5jYWxsYmFjayA9IGN4MjMxeHhfdHVuZXJfY2FsbGJhY2s7CiAKLQkJaWYgKGR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmItPmZyb250ZW5kLAorCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmItPmZyb250ZW5kLAogCQkJICAgICAgICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCi0JCQkgICAgICAgJmNueHRfcmRlMjUwX3R1bmVyY29uZmlnKSA8IDApIHsKKwkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpKSB7CiAJCQlyZXN1bHQgPSAtRUlOVkFMOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQpAQCAtNDg2LDkgKzQ4Niw5IEBACiAJCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLwogCQlkdmItPmZyb250ZW5kLT5jYWxsYmFjayA9IGN4MjMxeHhfdHVuZXJfY2FsbGJhY2s7CiAKLQkJaWYgKGR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmItPmZyb250ZW5kLAorCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmItPmZyb250ZW5kLAogCQkJICAgICAgICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCi0JCQkgICAgICAgJmNueHRfcmRlMjUwX3R1bmVyY29uZmlnKSA8IDApIHsKKwkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpKSB7CiAJCQlyZXN1bHQgPSAtRUlOVkFMOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWlucHV0LmMKaW5kZXggMTU4MjZmOS4uYzU3NzFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAljeDIzMXh4X2lyX3N0YXJ0KGlyKTsKIAogCS8qIGFsbCBkb25lICovCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBkZXYtPmJvYXJkLmlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCmluZGV4IDg4YzBkMjQuLjJhYjk3YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCkBAIC02ODEsNyArNjgxLDcgQEAKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9WSURFT19JRDoKIAkJcmV0dXJuICAiU0VUX1ZJREVPX0lEIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9QQ1JfSUQ6Ci0JCXJldHVybiAgIlNFVF9QQ1JfUElEIjsKKwkJcmV0dXJuICAiU0VUX1BDUl9JRCI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfRlJBTUVfUkFURToKIAkJcmV0dXJuICAiU0VUX0ZSQU1FX1JBVEUiOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0ZSQU1FX1NJWkU6CkBAIC02OTMsNyArNjkzLDcgQEAKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9BU1BFQ1RfUkFUSU86CiAJCXJldHVybiAgIlNFVF9BU1BFQ1RfUkFUSU8iOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0ROUl9GSUxURVJfTU9ERToKLQkJcmV0dXJuICAiU0VUX0ROUl9GSUxURVJfUFJPUFMiOworCQlyZXR1cm4gICJTRVRfRE5SX0ZJTFRFUl9NT0RFIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9ETlJfRklMVEVSX1BST1BTOgogCQlyZXR1cm4gICJTRVRfRE5SX0ZJTFRFUl9QUk9QUyI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfQ09SSU5HX0xFVkVMUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IDFlYzQ4MTYuLmQ2MzkxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjc0LDYgKzI3NCwzMSBAQAogCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJfSwKKwlbQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiTEVBRFRFSyBXaW5GYXN0IFB4VFYxMjAwIiwKKwkJLnBvcnRhICAgICAgICAgID0gQ1gyMzg4NV9BTkFMT0dfVklERU8sCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2FkZHIgICAgID0gMHg2MSwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSBDWDI1ODQwX1ZJTjJfQ0gxIHwKKwkJCQkgIENYMjU4NDBfVklONV9DSDIgfAorCQkJCSAgQ1gyNTg0MF9OT05FMF9DSDMsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSBDWDI1ODQwX0NPTVBPU0lURTEsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IENYMjU4NDBfU1ZJREVPX0xVTUEzIHwKKwkJCQkgIENYMjU4NDBfU1ZJREVPX0NIUk9NQTQsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9ORU5ULAorCQkJLnZtdXggICA9IENYMjU4NDBfVklON19DSDEgfAorCQkJCSAgQ1gyNTg0MF9WSU42X0NIMiB8CisJCQkJICBDWDI1ODQwX1ZJTjhfQ0gzIHwKKwkJCQkgIENYMjU4NDBfQ09NUE9ORU5UX09OLAorCQl9IH0sCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtNDE3LDYgKzQ0MiwxMCBAQAogCQkuc3VidmVuZG9yID0gMHgxNGYxLAogCQkuc3ViZGV2aWNlID0gMHg4NTc4LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1NThQUk8sCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxMDdkLAorCQkuc3ViZGV2aWNlID0gMHg2ZjIyLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDAsCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9pZGNvdW50ID0gQVJSQVlfU0laRShjeDIzODg1X3N1Ymlkcyk7CkBAIC02MTcsNiArNjQ2LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMDoKIAkJLyogVHVuZXIgUmVzZXQgQ29tbWFuZCAqLwogCQliaXRtYXNrID0gMHgwNDsKIAkJYnJlYWs7CkBAIC03NjksNiArNzk5LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMDoKIAkJLyogR1BJTy0yICB4YzMwMjggdHVuZXIgcmVzZXQgKi8KIAogCQkvKiBUaGUgZm9sbG93aW5nIEdQSU8ncyBhcmUgb24gdGhlIGludGVybmFsIEFWQ29yZSAoY3gyNTg0MCkgKi8KQEAgLTEwNzYsNiArMTEwNyw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX01ZR0lDQV9YODUwNjoKIAljYXNlIENYMjM4ODVfQk9BUkRfTUFHSUNQUk9fUFJPSERUVkUyOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwOgogCQlkZXYtPnNkX2N4MjU4NDAgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19idXNbMl0uaTJjX2FkYXAsCiAJCQkJImN4MjU4NDAiLCAiY3gyNTg0MCIsIDB4ODggPj4gMSwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCmluZGV4IGU0NWQyZGYuLjkzOTA3OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCkBAIC01NDIsNiArNTQyLDkgQEAKIAkub3NjX2Nsa19mcmVxID0gMzA0MDAsIC8qIGluIGtIeiAqLwogCS5pZl9mcmVxID0gMCwgLyogemVybyBJRiAqLwogCS56aWZfc3dhcF9pcSA9IDEsCisJLmFnY19taW4gPSAweDJFLAorCS5hZ2NfbWF4ID0gMHhGRiwKKwkuYWdjX2hvbGRfbG9vcCA9IDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1heDIxNjVfY29uZmlnIG15Z2ljX3g4NTU4cHJvX21heDIxNjVfY2ZnMSA9IHsKQEAgLTU1OCw2ICs1NjEsOSBAQAogCS5vc2NfY2xrX2ZyZXEgPSAzMDQwMCwgLyogaW4ga0h6ICovCiAJLmlmX2ZyZXEgPSAwLCAvKiB6ZXJvIElGICovCiAJLnppZl9zd2FwX2lxID0gMSwKKwkuYWdjX21pbiA9IDB4MkUsCisJLmFnY19tYXggPSAweEZGLAorCS5hZ2NfaG9sZF9sb29wID0gMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWF4MjE2NV9jb25maWcgbXlnaWNfeDg1NThwcm9fbWF4MjE2NV9jZmcyID0gewpAQCAtOTk0LDE1ICsxMDAwLDggQEAKIAkJbmV0dXBfZ2V0X2NhcmRfaW5mbygmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwLCAmY2luZm8pOwogCQltZW1jcHkocG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjLAogCQkJCWNpbmZvLnBvcnRbcG9ydC0+bnIgLSAxXS5tYWMsIDYpOwotCQlwcmludGsoS0VSTl9JTkZPICJOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkIHBvcnQlZCBNQUM9IgotCQkJIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAotCQkJcG9ydC0+bnIsCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMF0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMV0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMl0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbM10sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNF0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNV0pOworCQlwcmludGsoS0VSTl9JTkZPICJOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkIHBvcnQlZCBNQUM9JXBNXG4iLAorCQkJcG9ydC0+bnIsIHBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hYyk7CiAKIAkJbmV0dXBfY2lfaW5pdChwb3J0KTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYwppbmRleCA3NjhlZWM5Li45YzY2MjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogCWRldi0+aXJfaW5wdXQgPSBpcjsKIAljeDIzODg1X2lucHV0X2lyX3N0YXJ0KGRldik7CiAKLQlyZXQgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+ZGV2LCBpcl9jb2Rlcyk7CisJcmV0ID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmRldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwppbmRleCA4OTM0ZDYxLi4yZDNhYzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlICJjeDIzODg1LWlvY3RsLmgiCisjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDIzODg1IGJhc2VkIFRWIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+Iik7CkBAIC0xNTA1LDYgKzE1MDYsMTggQEAKIAkJCXR1bl9zZXR1cC50dW5lcl9jYWxsYmFjayA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2s7CiAKIAkJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CisKKwkJCWlmIChkZXYtPmJvYXJkID09IENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwKSB7CisJCQkJc3RydWN0IHhjMjAyOF9jdHJsIGN0cmwgPSB7CisJCQkJCS5mbmFtZSA9IFhDMjAyOF9ERUZBVUxUX0ZJUk1XQVJFLAorCQkJCQkubWF4X2xlbiA9IDY0CisJCQkJfTsKKwkJCQlzdHJ1Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgY2ZnID0geworCQkJCQkudHVuZXIgPSBkZXYtPnR1bmVyX3R5cGUsCisJCQkJCS5wcml2ID0gJmN0cmwKKwkJCQl9OworCQkJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX2NvbmZpZywgJmNmZyk7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IDA4YjNmNmIuLjBlM2E5OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTgxLDYgKzgxLDcgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDAgICAgMjUKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MCAgICAgICAgMjYKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1NThQUk8gICAgICAgICAgMjcKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDAgMjgKIAogI2RlZmluZSBHUElPXzAgMHgwMDAwMDAwMQogI2RlZmluZSBHUElPXzEgMHgwMDAwMDAwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCmluZGV4IDM4NWVjZDUuLmYyNDYxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTczNCwxMCArNzM0LDggQEAKIAkJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICJ2aWRfaW5wdXQgMHgleFxuIiwKIAkJCXZpZF9pbnB1dCk7CiAJCXJlZyA9IHZpZF9pbnB1dCAmIDB4ZmY7Ci0JCWlmICgodmlkX2lucHV0ICYgQ1gyNTg0MF9TVklERU9fT04pID09IENYMjU4NDBfU1ZJREVPX09OKQotCQkJaXNfY29tcG9zaXRlID0gMDsKLQkJZWxzZSBpZiAoKHZpZF9pbnB1dCAmIENYMjU4NDBfQ09NUE9ORU5UX09OKSA9PSAwKQotCQkJaXNfY29tcG9zaXRlID0gMTsKKwkJaXNfY29tcG9zaXRlID0gIWlzX2NvbXBvbmVudCAmJgorCQkJKCh2aWRfaW5wdXQgJiBDWDI1ODQwX1NWSURFT19PTikgIT0gQ1gyNTg0MF9TVklERU9fT04pOwogCiAJCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAibXV4IGNmZyAweCV4IGNvbXA9JWRcbiIsCiAJCQlyZWcsIGlzX2NvbXBvc2l0ZSk7CkBAIC0xMzQ3LDMwICsxMzQ1LDU5IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBjeDI1ODQwX3NfYXVkaW9fc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2OworCisJaWYgKGlzX2N4MjU4M3goc3RhdGUpIHx8IGlzX2N4MjM4OHgoc3RhdGUpIHx8IGlzX2N4MjMxeHgoc3RhdGUpKQorCQlyZXR1cm4gMDsKKworCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAiJXMgYXVkaW8gb3V0cHV0XG4iLAorCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCisJaWYgKGVuYWJsZSkgeworCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTUpIHwgMHg4MDsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE2KSB8IDB4MDM7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNiwgdik7CisJfSBlbHNlIHsKKwkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE1KSAmIH4oMHg4MCk7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNSwgdik7CisJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgJiB+KDB4MDMpOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTYsIHYpOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjeDI1ODQwX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7CiAJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2OwogCi0JdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICIlcyBvdXRwdXRcbiIsCisJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICIlcyB2aWRlbyBvdXRwdXRcbiIsCiAJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CiAJaWYgKGVuYWJsZSkgewogCQlpZiAoaXNfY3gyMzg4eChzdGF0ZSkgfHwgaXNfY3gyMzF4eChzdGF0ZSkpIHsKLQkJCXU4IHYgPSAoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpIHwgMHgwYik7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpIHwgMHgwYjsKIAkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQyMSwgdik7CiAJCX0gZWxzZSB7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsCi0JCQkJCWlzX2N4MjU4M3goc3RhdGUpID8gMHgwYyA6IDB4OGMpOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LAotCQkJCQlpc19jeDI1ODN4KHN0YXRlKSA/IDB4MDQgOiAweDA3KTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNSkgfCAweDBjOworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgfCAweDA0OworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCB2KTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChpc19jeDIzODh4KHN0YXRlKSB8fCBpc19jeDIzMXh4KHN0YXRlKSkgewotCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDIxKSAmIH4oMHgwYik7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpICYgfigweDBiKTsKIAkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQyMSwgdik7CiAJCX0gZWxzZSB7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsIDB4MDApOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCAweDAwKTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNSkgJiB+KDB4MGMpOworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgJiB+KDB4MDQpOworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCB2KTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTE2MDEsNiArMTYyOCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyBjeDI1ODQwX2F1ZGlvX29wcyA9IHsKIAkuc19jbG9ja19mcmVxID0gY3gyNTg0MF9zX2Nsb2NrX2ZyZXEsCiAJLnNfcm91dGluZyA9IGN4MjU4NDBfc19hdWRpb19yb3V0aW5nLAorCS5zX3N0cmVhbSA9IGN4MjU4NDBfc19hdWRpb19zdHJlYW0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBjeDI1ODQwX3ZpZGVvX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCA1YTY3NDQ1Li42NGIzNTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC01ODMsMTYgKzU4MywxOCBAQAogewogCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlPWNoaXAtPmNvcmU7Ci0JaW50IHYsIGI7CisJaW50IGxlZnQsIHJpZ2h0LCB2LCBiOwogCWludCBjaGFuZ2VkID0gMDsKIAl1MzIgb2xkOwogCi0JYiA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIC0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJbGVmdCA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMHgzZjsKKwlyaWdodCA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICYgMHgzZjsKKwliID0gcmlnaHQgLSBsZWZ0OwogCWlmIChiIDwgMCkgewotCSAgICB2ID0gMHgzZiAtIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCSAgICB2ID0gMHgzZiAtIGxlZnQ7CiAJICAgIGIgPSAoLWIpIHwgMHg0MDsKIAl9IGVsc2UgewotCSAgICB2ID0gMHgzZiAtIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOworCSAgICB2ID0gMHgzZiAtIHJpZ2h0OwogCX0KIAkvKiBEbyB3ZSByZWFsbHkga25vdyB0aGlzIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIElSUXMgb24/ICovCiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggZDg0NGYyYS4uZWFmMGVlN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMTQ2Niw2ICsxNDY2LDE4IEBACiAJCQkuYXVkaW9yb3V0ZSA9IDgsCiAJCX0sCiAJfSwKKwlbQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwXSA9IHsKKwkJLm5hbWUJCT0gIlNhbXN1bmcgU01UIDcwMjAgRFZCLVMiLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnJhZGlvX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dAkJPSB7IHsKKwkJCS50eXBlCT0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4CT0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCiAJW0NYODhfQk9BUkRfQURTVEVDSF9QVFZfMzkwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkFEUyBUZWNoIEluc3RhbnQgVmlkZW8gUENJIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULApAQCAtMjM1NSw2ICsyMzY3LDE0IEBACiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDE0MDQsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MThhYywKKwkJLnN1YmRldmljZSA9IDB4ZGMwMCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCisJCS5zdWJkZXZpY2UgPSAweGRjY2QsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjAsCiAJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDE0NjEsCiAJCS5zdWJkZXZpY2UgPSAweGMxMTEsIC8qIEF2ZXJNZWRpYSBNMTUwLUQgKi8KQEAgLTI2MzMsNiArMjY1Myw5IEBACiAJY2FzZSA5ODU1OTogLyogV2luVFYtSFZSMTEwMExQIChWaWRlbyBubyBJUiwgUmV0YWlsIC0gTG93IFByb2ZpbGUpICovCiAJCS8qIGtub3duICovCiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwOgorCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwODk4OUZGKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJd2Fybl9wcmludGsoY29yZSwgIndhcm5pbmc6IHVua25vd24gaGF1cHBhdWdlIG1vZGVsICMlZFxuIiwKIAkJCSAgICB0di5tb2RlbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCmluZGV4IGIxNDI5NjkuLjk0YWI4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCkBAIC02NzQsNiArNjc0LDE5NCBAQAogCXJldHVybiAwOwogfQogCisKKworc3RhdGljIHU4IHNhbXN1bmdfc210XzcwMjBfaW5pdHRhYltdID0geworCSAgICAgMHgwMSwgMHgxNSwKKwkgICAgIDB4MDIsIDB4MDAsCisJICAgICAweDAzLCAweDAwLAorCSAgICAgMHgwNCwgMHg3RCwKKwkgICAgIDB4MDUsIDB4MEYsCisJICAgICAweDA2LCAweDAyLAorCSAgICAgMHgwNywgMHgwMCwKKwkgICAgIDB4MDgsIDB4NjAsCisKKwkgICAgIDB4MEEsIDB4QzIsCisJICAgICAweDBCLCAweDAwLAorCSAgICAgMHgwQywgMHgwMSwKKwkgICAgIDB4MEQsIDB4ODEsCisJICAgICAweDBFLCAweDQ0LAorCSAgICAgMHgwRiwgMHgwOSwKKwkgICAgIDB4MTAsIDB4M0MsCisJICAgICAweDExLCAweDg0LAorCSAgICAgMHgxMiwgMHhEQSwKKwkgICAgIDB4MTMsIDB4OTksCisJICAgICAweDE0LCAweDhELAorCSAgICAgMHgxNSwgMHhDRSwKKwkgICAgIDB4MTYsIDB4RTgsCisJICAgICAweDE3LCAweDQzLAorCSAgICAgMHgxOCwgMHgxQywKKwkgICAgIDB4MTksIDB4MUIsCisJICAgICAweDFBLCAweDFELAorCisJICAgICAweDFDLCAweDEyLAorCSAgICAgMHgxRCwgMHgwMCwKKwkgICAgIDB4MUUsIDB4MDAsCisJICAgICAweDFGLCAweDAwLAorCSAgICAgMHgyMCwgMHgwMCwKKwkgICAgIDB4MjEsIDB4MDAsCisJICAgICAweDIyLCAweDAwLAorCSAgICAgMHgyMywgMHgwMCwKKworCSAgICAgMHgyOCwgMHgwMiwKKwkgICAgIDB4MjksIDB4MjgsCisJICAgICAweDJBLCAweDE0LAorCSAgICAgMHgyQiwgMHgwRiwKKwkgICAgIDB4MkMsIDB4MDksCisJICAgICAweDJELCAweDA1LAorCisJICAgICAweDMxLCAweDFGLAorCSAgICAgMHgzMiwgMHgxOSwKKwkgICAgIDB4MzMsIDB4RkMsCisJICAgICAweDM0LCAweDEzLAorCSAgICAgMHhmZiwgMHhmZiwKK307CisKKworc3RhdGljIGludCBzYW1zdW5nX3NtdF83MDIwX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJdTggYnVmWzRdOworCXUzMiBkaXY7CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IDB4NjEsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsCisJCS5sZW4gPSBzaXplb2YoYnVmKSB9OworCisJZGl2ID0gcGFyYW1zLT5mcmVxdWVuY3kgLyAxMjU7CisKKwlidWZbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlidWZbMV0gPSBkaXYgJiAweGZmOworCWJ1ZlsyXSA9IDB4ODQ7ICAvKiAweEM0ICovCisJYnVmWzNdID0gMHgwMDsKKworCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA8IDE1MDAwMDApCisJCWJ1ZlszXSB8PSAweDEwOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+Y29yZS0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zbXRfNzAyMF9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOworCisJY3hfc2V0KE1PX0dQMF9JTywgMHgwODAwKTsKKworCXN3aXRjaCAodG9uZSkgeworCWNhc2UgU0VDX1RPTkVfT046CisJCWN4X3NldChNT19HUDBfSU8sIDB4MDgpOworCQlicmVhazsKKwljYXNlIFNFQ19UT05FX09GRjoKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zbXRfNzAyMF9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKworCXU4IGRhdGE7CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IDgsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSAmZGF0YSwKKwkJLmxlbiA9IHNpemVvZihkYXRhKSB9OworCisJY3hfc2V0KE1PX0dQMF9JTywgMHg4MDAwKTsKKworCXN3aXRjaCAodm9sdGFnZSkgeworCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCQlicmVhazsKKwljYXNlIFNFQ19WT0xUQUdFXzEzOgorCQlkYXRhID0gSVNMNjQyMV9FTjEgfCBJU0w2NDIxX0xMQzE7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHg4MCk7CisJCWJyZWFrOworCWNhc2UgU0VDX1ZPTFRBR0VfMTg6CisJCWRhdGEgPSBJU0w2NDIxX0VOMSB8IElTTDY0MjFfTExDMSB8IElTTDY0MjFfVlNFTDE7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHg4MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX07CisKKwlyZXR1cm4gKGkyY190cmFuc2ZlcigmZGV2LT5jb3JlLT5pMmNfYWRhcCwgJm1zZywgMSkgPT0gMSkgPyAwIDogLUVJTzsKK30KKworc3RhdGljIGludCBzYW1zdW5nX3NtdF83MDIwX3N0djAyOTlfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXUzMiBzcmF0ZSwgdTMyIHJhdGlvKQoreworCXU4IGFjbGsgPSAwOworCXU4IGJjbGsgPSAwOworCisJaWYgKHNyYXRlIDwgMTUwMDAwMCkgeworCQlhY2xrID0gMHhiNzsKKwkJYmNsayA9IDB4NDc7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDMwMDAwMDApIHsKKwkJYWNsayA9IDB4Yjc7CisJCWJjbGsgPSAweDRiOworCX0gZWxzZSBpZiAoc3JhdGUgPCA3MDAwMDAwKSB7CisJCWFjbGsgPSAweGI3OworCQliY2xrID0gMHg0ZjsKKwl9IGVsc2UgaWYgKHNyYXRlIDwgMTQwMDAwMDApIHsKKwkJYWNsayA9IDB4Yjc7CisJCWJjbGsgPSAweDUzOworCX0gZWxzZSBpZiAoc3JhdGUgPCAzMDAwMDAwMCkgeworCQlhY2xrID0gMHhiNjsKKwkJYmNsayA9IDB4NTM7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDQ1MDAwMDAwKSB7CisJCWFjbGsgPSAweGI0OworCQliY2xrID0gMHg1MTsKKwl9CisKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDEzLCBhY2xrKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDE0LCBiY2xrKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDFmLCAocmF0aW8gPj4gMTYpICYgMHhmZik7CisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgyMCwgKHJhdGlvID4+ICA4KSAmIDB4ZmYpOworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MjEsIHJhdGlvICYgMHhmMCk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNhbXN1bmdfc3R2MDI5OV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gc2Ftc3VuZ19zbXRfNzAyMF9pbml0dGFiLAorCS5tY2xrID0gODgwMDAwMDBVTCwKKwkuaW52ZXJ0ID0gMCwKKwkuc2tpcF9yZWluaXQgPSAwLAorCS5sb2NrX291dHB1dCA9IFNUVjAyOTlfTE9DS09VVFBVVF9MSywKKwkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3N5bWJvbF9yYXRlID0gc2Ftc3VuZ19zbXRfNzAyMF9zdHYwMjk5X3NldF9zeW1ib2xfcmF0ZSwKK307CisKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKQEAgLTEyMDMsNiArMTM5MSwzMiBAQAogCQl9CiAJCWJyZWFrOwogCQl9CisJY2FzZSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjA6CisJCWRldi0+dHNfZ2VuX2NudHJsID0gMHgwODsKKworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAxMDEpOworCisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMSk7CisJCW1kZWxheSgxMDApOworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAxKTsKKwkJbWRlbGF5KDIwMCk7CisKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLAorCQkJCQkmc2Ftc3VuZ19zdHYwMjk5X2NvbmZpZywKKwkJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPQorCQkJCXNhbXN1bmdfc210XzcwMjBfdHVuZXJfc2V0X3BhcmFtczsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT50dW5lcl9wcml2ID0KKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPQorCQkJCXNhbXN1bmdfc210XzcwMjBfc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF90b25lID0KKwkJCQlzYW1zdW5nX3NtdF83MDIwX3NldF90b25lOworCQl9CisKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKIAkJICAgICAgIGNvcmUtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggZjlmZGExOC4uZGUxODBkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlzdHJ1Y3QgY3g4OF9JUiAqaXI7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMgPSBOVUxMOwotCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpciA9IGt6YWxsb2Moc2l6ZW9mKCppciksIEdGUF9LRVJORUwpOwpAQCAtMzgzLDcgKzM4Myw3IEBACiAJY3g4OF9pcl9zdGFydChjb3JlLCBpcik7CiAKIAkvKiBhbGwgZG9uZSAqLwotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggYmI1MTA0OC4uMzM4YWY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtMTEwLDYgKzExMCw5IEBACiAJCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQ1NTAwOgogCQkJY3hfd3JpdGUoVFNfU09QX1NUQVQsIDE8PDEzKTsKIAkJCWJyZWFrOworCQljYXNlIENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMDoKKwkJCWN4X3dyaXRlKFRTX1NPUF9TVEFULCAweDAwKTsKKwkJCWJyZWFrOwogCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMToKIAkJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU0UyX1MxOgogCQkJY3hfd3JpdGUoTU9fUElOTVVYX0lPLCAweDg4KTsgLyogRW5hYmxlIE1QRUcgcGFyYWxsZWwgSU8gYW5kIHZpZGVvIHNpZ25hbCBwaW5zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCBiMTQ5OWJmLi40OGI2YzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTIzOSw2ICsyMzksNyBAQAogI2RlZmluZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTgwMEggICAgICAgIDgxCiAjZGVmaW5lIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSF9KICAgICAgODIKICNkZWZpbmUgQ1g4OF9CT0FSRF9QUk9GXzczMDEgICAgICAgICAgICAgICA4MworI2RlZmluZSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjAgICAgICAgIDg0CiAKIGVudW0gY3g4OF9pdHlwZSB7CiAJQ1g4OF9WTVVYX0NPTVBPU0lURTEgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKaW5kZXggZWU0Mzg3Ni4uOWI0MTNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCkBAIC05MTMsNiArOTEzLDggQEAKIE1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKIE1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRSgiZGFidXNiL2Zpcm13YXJlLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImRhYnVzYi9iaXRzdHJlYW0uYmluIik7CiAKIG1vZHVsZV9wYXJhbShidWZmZXJzLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyAoYnVmZmVycywgIk51bWJlciBvZiBidWZmZXJzIChkZWZhdWx0PTI1NikiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9NYWtlZmlsZQppbmRleCAxYThiOGYzLi5hMzc5NTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL01ha2VmaWxlCkBAIC0xNSwzICsxNSw0IEBACiBvYmotJChDT05GSUdfVklERU9fVlBGRV9DQVBUVVJFKSArPSB2cGZlX2NhcHR1cmUubwogb2JqLSQoQ09ORklHX1ZJREVPX0RNNjQ0Nl9DQ0RDKSArPSBkbTY0NHhfY2NkYy5vCiBvYmotJChDT05GSUdfVklERU9fRE0zNTVfQ0NEQykgKz0gZG0zNTVfY2NkYy5vCitvYmotJChDT05GSUdfVklERU9fSVNJRikgKz0gaXNpZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGMuYwppbmRleCAzMTQzOTAwLi5jMjlhYzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTM1NV9jY2RjLmMKQEAgLTM3LDggKzM3LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCiAjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS9kbTM1NV9jY2RjLmg+CiAjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cHNzLmg+CisKICNpbmNsdWRlICJkbTM1NV9jY2RjX3JlZ3MuaCIKICNpbmNsdWRlICJjY2RjX2h3X2RldmljZS5oIgogCkBAIC00Niw2NyArNTAsNzUgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ0NEQyBEcml2ZXIgZm9yIERNMzU1Iik7CiBNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZSAqZGV2OwotCi0vKiBPYmplY3QgZm9yIENDREMgcmF3IG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3IGNjZGNfaHdfcGFyYW1zX3JhdyA9IHsKLQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKLQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAotCS53aW4gPSBDQ0RDX1dJTl9WR0EsCi0JLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5nYWluID0gewotCQkucl95ZSA9IDI1NiwKLQkJLmdiX2cgPSAyNTYsCi0JCS5ncl9jeSA9IDI1NiwKLQkJLmJfbWcgPSAyNTYKK3N0YXRpYyBzdHJ1Y3QgY2NkY19vcGVyX2NvbmZpZyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCS8qIENDREMgaW50ZXJmYWNlIHR5cGUgKi8KKwllbnVtIHZwZmVfaHdfaWZfdHlwZSBpZl90eXBlOworCS8qIFJhdyBCYXllciBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBiYXllcjsKKwkvKiBZQ2JDciBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIHljYmNyOworCS8qIE1hc3RlciBjbG9jayAqLworCXN0cnVjdCBjbGsgKm1jbGs7CisJLyogc2xhdmUgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICpzY2xrOworCS8qIGNjZGMgYmFzZSBhZGRyZXNzICovCisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Cit9IGNjZGNfY2ZnID0geworCS8qIFJhdyBjb25maWd1cmF0aW9ucyAqLworCS5iYXllciA9IHsKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUsCisJCS53aW4gPSBDQ0RDX1dJTl9WR0EsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuZ2FpbiA9IHsKKwkJCS5yX3llID0gMjU2LAorCQkJLmdiX2cgPSAyNTYsCisJCQkuZ3JfY3kgPSAyNTYsCisJCQkuYl9tZyA9IDI1NgorCQl9LAorCQkuY29uZmlnX3BhcmFtcyA9IHsKKwkJCS5kYXRhc2Z0ID0gMiwKKwkJCS5tZmlsdDEgPSBDQ0RDX05PX01FRElBTl9GSUxURVIxLAorCQkJLm1maWx0MiA9IENDRENfTk9fTUVESUFOX0ZJTFRFUjIsCisJCQkuYWxhdyA9IHsKKwkJCQkuZ2FtYV93ZCA9IDIsCisJCQl9LAorCQkJLmJsa19jbGFtcCA9IHsKKwkJCQkuc2FtcGxlX3BpeGVsID0gMSwKKwkJCQkuZGNfc3ViID0gMjUKKwkJCX0sCisJCQkuY29sX3BhdF9maWVsZDAgPSB7CisJCQkJLm9sb3AgPSBDQ0RDX0dSRUVOX0JMVUUsCisJCQkJLm9sZXAgPSBDQ0RDX0JMVUUsCisJCQkJLmVsb3AgPSBDQ0RDX1JFRCwKKwkJCQkuZWxlcCA9IENDRENfR1JFRU5fUkVECisJCQl9LAorCQkJLmNvbF9wYXRfZmllbGQxID0geworCQkJCS5vbG9wID0gQ0NEQ19HUkVFTl9CTFVFLAorCQkJCS5vbGVwID0gQ0NEQ19CTFVFLAorCQkJCS5lbG9wID0gQ0NEQ19SRUQsCisJCQkJLmVsZXAgPSBDQ0RDX0dSRUVOX1JFRAorCQkJfSwKKwkJfSwKIAl9LAotCS5jb25maWdfcGFyYW1zID0gewotCQkuZGF0YXNmdCA9IDIsCi0JCS5kYXRhX3N6ID0gQ0NEQ19EQVRBXzEwQklUUywKLQkJLm1maWx0MSA9IENDRENfTk9fTUVESUFOX0ZJTFRFUjEsCi0JCS5tZmlsdDIgPSBDQ0RDX05PX01FRElBTl9GSUxURVIyLAotCQkuYWxhdyA9IHsKLQkJCS5nYW1hX3dkID0gMiwKLQkJfSwKLQkJLmJsa19jbGFtcCA9IHsKLQkJCS5zYW1wbGVfcGl4ZWwgPSAxLAotCQkJLmRjX3N1YiA9IDI1Ci0JCX0sCi0JCS5jb2xfcGF0X2ZpZWxkMCA9IHsKLQkJCS5vbG9wID0gQ0NEQ19HUkVFTl9CTFVFLAotCQkJLm9sZXAgPSBDQ0RDX0JMVUUsCi0JCQkuZWxvcCA9IENDRENfUkVELAotCQkJLmVsZXAgPSBDQ0RDX0dSRUVOX1JFRAotCQl9LAotCQkuY29sX3BhdF9maWVsZDEgPSB7Ci0JCQkub2xvcCA9IENDRENfR1JFRU5fQkxVRSwKLQkJCS5vbGVwID0gQ0NEQ19CTFVFLAotCQkJLmVsb3AgPSBDQ0RDX1JFRCwKLQkJCS5lbGVwID0gQ0NEQ19HUkVFTl9SRUQKLQkJfSwKKwkvKiBZQ2JDciBjb25maWd1cmF0aW9uICovCisJLnljYmNyID0geworCQkud2luID0gQ0NEQ19XSU5fUEFMLAorCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCwKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5idDY1Nl9lbmFibGUgPSAxLAorCQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCisJCS5idWZfdHlwZSA9IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQKIAl9LAogfTsKIAogCi0vKiBPYmplY3QgZm9yIENDREMgeWNiY3IgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciBjY2RjX2h3X3BhcmFtc195Y2JjciA9IHsKLQkud2luID0gQ0NEQ19XSU5fUEFMLAotCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCwKLQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCi0JLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5idDY1Nl9lbmFibGUgPSAxLAotCS5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWSwKLQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECi19OwotCi1zdGF0aWMgZW51bSB2cGZlX2h3X2lmX3R5cGUgY2NkY19pZl90eXBlOwotc3RhdGljIHZvaWQgKl9faW9tZW0gY2NkY19iYXNlX2FkZHI7Ci1zdGF0aWMgaW50IGNjZGNfYWRkcl9zaXplOwotCiAvKiBSYXcgQmF5ZXIgZm9ybWF0cyAqLwogc3RhdGljIHUzMiBjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0c1tdID0KIAkJe1Y0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfUElYX0ZNVF9TQkdHUjE2fTsKQEAgLTExOCwxOCArMTMwLDEyIEBACiAvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIHJlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChjY2RjX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIGNjZGNfYmFzZV9hZGRyICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgY2NkY19zZXRfY2NkY19iYXNlKHZvaWQgKmFkZHIsIGludCBzaXplKQotewotCWNjZGNfYmFzZV9hZGRyID0gYWRkcjsKLQljY2RjX2FkZHJfc2l6ZSA9IHNpemU7CisJX19yYXdfd3JpdGVsKHZhbCwgY2NkY19jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19lbmFibGUoaW50IGVuKQpAQCAtMTUzLDEyICsxNTksMTIgQEAKIHN0YXRpYyB2b2lkIGNjZGNfY29uZmlnX2dhaW5fb2Zmc2V0KHZvaWQpCiB7CiAJLyogY29uZmlndXJlIGdhaW4gKi8KLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLnJfeWUsIFJZRUdBSU4pOwotCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmdhaW4uZ3JfY3ksIEdSQ1lHQUlOKTsKLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdiX2csIEdCR0dBSU4pOwotCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmdhaW4uYl9tZywgQk1HR0FJTik7CisJcmVndyhjY2RjX2NmZy5iYXllci5nYWluLnJfeWUsIFJZRUdBSU4pOworCXJlZ3coY2NkY19jZmcuYmF5ZXIuZ2Fpbi5ncl9jeSwgR1JDWUdBSU4pOworCXJlZ3coY2NkY19jZmcuYmF5ZXIuZ2Fpbi5nYl9nLCBHQkdHQUlOKTsKKwlyZWd3KGNjZGNfY2ZnLmJheWVyLmdhaW4uYl9tZywgQk1HR0FJTik7CiAJLyogY29uZmlndXJlIG9mZnNldCAqLwotCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmNjZGNfb2Zmc2V0LCBPRkZTRVQpOworCXJlZ3coY2NkY19jZmcuYmF5ZXIuY2NkY19vZmZzZXQsIE9GRlNFVCk7CiB9CiAKIC8qCkBAIC0xNjksNyArMTc1LDcgQEAKIHsKIAlpbnQgaTsKIAotCWRldl9kYmcoZGV2LCAiXG5zdGFydGluZyBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuc3RhcnRpbmcgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CiAJLyogc2V0IGFsbCByZWdpc3RlcnMgdG8gemVybyAqLwogCWZvciAoaSA9IDA7IGkgPD0gQ0NEQ19SRUdfTEFTVDsgaSArPSA0KQogCQlyZWd3KDAsIGkpOwpAQCAtMTgwLDMwICsxODYsMjkgQEAKIAlyZWd3KENVTEhfREVGQVVMVCwgQ1VMSCk7CiAJcmVndyhDVUxWX0RFRkFVTFQsIENVTFYpOwogCS8qIFNldCBkZWZhdWx0IEdhaW4gYW5kIE9mZnNldCAqLwotCWNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLnJfeWUgPSBHQUlOX0RFRkFVTFQ7Ci0JY2NkY19od19wYXJhbXNfcmF3LmdhaW4uZ2JfZyA9IEdBSU5fREVGQVVMVDsKLQljY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5ncl9jeSA9IEdBSU5fREVGQVVMVDsKLQljY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5iX21nID0gR0FJTl9ERUZBVUxUOworCWNjZGNfY2ZnLmJheWVyLmdhaW4ucl95ZSA9IEdBSU5fREVGQVVMVDsKKwljY2RjX2NmZy5iYXllci5nYWluLmdiX2cgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19jZmcuYmF5ZXIuZ2Fpbi5ncl9jeSA9IEdBSU5fREVGQVVMVDsKKwljY2RjX2NmZy5iYXllci5nYWluLmJfbWcgPSBHQUlOX0RFRkFVTFQ7CiAJY2NkY19jb25maWdfZ2Fpbl9vZmZzZXQoKTsKIAlyZWd3KE9VVENMSVBfREVGQVVMVCwgT1VUQ0xJUCk7CiAJcmVndyhMU0NDRkcyX0RFRkFVTFQsIExTQ0NGRzIpOwogCS8qIHNlbGVjdCBjY2RjIGlucHV0ICovCiAJaWYgKHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKFZQU1NfQ0NEQ0lOKSkgewotCQlkZXZfZGJnKGRldiwgIlxuY291bGRuJ3Qgc2VsZWN0IGNjZGMgaW5wdXQgc291cmNlIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5jb3VsZG4ndCBzZWxlY3QgY2NkYyBpbnB1dCBzb3VyY2UiKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCS8qIHNlbGVjdCBjY2RjIGNsb2NrICovCiAJaWYgKHZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfQ0NEQ19DTE9DSywgMSkgPCAwKSB7Ci0JCWRldl9kYmcoZGV2LCAiXG5jb3VsZG4ndCBlbmFibGUgY2NkYyBjbG9jayIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuY291bGRuJ3QgZW5hYmxlIGNjZGMgY2xvY2siKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkVuZCBvZiBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjY2RjX29wZW4oc3RydWN0IGRldmljZSAqZGV2aWNlKQogewotCWRldiA9IGRldmljZTsKIAlyZXR1cm4gY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CiB9CiAKQEAgLTIyNiw3ICsyMzEsNyBAQAogCWludCB2ZXJ0X3N0YXJ0LCB2ZXJ0X25yX2xpbmVzOwogCWludCBtaWRfaW1nID0gMDsKIAotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOwogCiAJLyoKIAkgKiBwcGMgLSBwZXIgcGl4ZWwgY291bnQuIGluZGljYXRlcyBob3cgbWFueSBwaXhlbHMgcGVyIGNlbGwKQEAgLTI2MCw0NSArMjY1LDQ2IEBACiAJcmVndyh2ZXJ0X3N0YXJ0ICYgQ0NEQ19TVEFSVF9WRVJfT05FX01BU0ssIFNMVjApOwogCXJlZ3codmVydF9zdGFydCAmIENDRENfU1RBUlRfVkVSX1RXT19NQVNLLCBTTFYxKTsKIAlyZWd3KHZlcnRfbnJfbGluZXMgJiBDQ0RDX05VTV9MSU5FU19WRVIsIE5MVik7Ci0JZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX3NldHdpbi4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5FbmQgb2YgY2NkY19zZXR3aW4uLi4iKTsKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9jY2RjX3BhcmFtKHN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjY2RjcGFyYW0pCiB7CiAJaWYgKGNjZGNwYXJhbS0+ZGF0YXNmdCA8IENDRENfREFUQV9OT19TSElGVCB8fAogCSAgICBjY2RjcGFyYW0tPmRhdGFzZnQgPiBDQ0RDX0RBVEFfU0hJRlRfNkJJVCkgewotCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgZGF0YSBzaGlmdFxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBkYXRhIHNoaWZ0XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNjZGNwYXJhbS0+bWZpbHQxIDwgQ0NEQ19OT19NRURJQU5fRklMVEVSMSB8fAogCSAgICBjY2RjcGFyYW0tPm1maWx0MSA+IENDRENfTUVESUFOX0ZJTFRFUjEpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIxXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIxXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNjZGNwYXJhbS0+bWZpbHQyIDwgQ0NEQ19OT19NRURJQU5fRklMVEVSMiB8fAogCSAgICBjY2RjcGFyYW0tPm1maWx0MiA+IENDRENfTUVESUFOX0ZJTFRFUjIpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIyXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIyXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKChjY2RjcGFyYW0tPm1lZF9maWx0X3RocmVzIDwgMCkgfHwKIAkgICAoY2NkY3BhcmFtLT5tZWRfZmlsdF90aHJlcyA+IENDRENfTUVEX0ZJTFRfVEhSRVNIKSkgewotCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgbWVkaWFuIGZpbHRlciB0aHJlc2hvbGRcbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwKKwkJCSJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIgdGhyZXNvbGRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY2NkY3BhcmFtLT5kYXRhX3N6IDwgQ0NEQ19EQVRBXzE2QklUUyB8fAogCSAgICBjY2RjcGFyYW0tPmRhdGFfc3ogPiBDQ0RDX0RBVEFfOEJJVFMpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIGRhdGEgc2l6ZVxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBkYXRhIHNpemVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY2NkY3BhcmFtLT5hbGF3LmVuYWJsZSkgewogCQlpZiAoY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPCBDQ0RDX0dBTU1BX0JJVFNfMTNfNCB8fAogCQkgICAgY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPiBDQ0RDX0dBTU1BX0JJVFNfMDlfMCkgewotCQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIEFMQVdcbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJJbnZhbGlkIHZhbHVlIG9mIEFMQVdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC0zMDYsMTIgKzMxMiwxNCBAQAogCWlmIChjY2RjcGFyYW0tPmJsa19jbGFtcC5iX2NsYW1wX2VuYWJsZSkgewogCQlpZiAoY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX3BpeGVsIDwgQ0NEQ19TQU1QTEVfMVBJWEVMUyB8fAogCQkgICAgY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX3BpeGVsID4gQ0NEQ19TQU1QTEVfMTZQSVhFTFMpIHsKLQkJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBzYW1wbGUgcGl4ZWxcbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsCisJCQkJIkludmFsaWQgdmFsdWUgb2Ygc2FtcGxlIHBpeGVsXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChjY2RjcGFyYW0tPmJsa19jbGFtcC5zYW1wbGVfbG4gPCBDQ0RDX1NBTVBMRV8xTElORVMgfHwKIAkJICAgIGNjZGNwYXJhbS0+YmxrX2NsYW1wLnNhbXBsZV9sbiA+IENDRENfU0FNUExFXzE2TElORVMpIHsKLQkJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBzYW1wbGUgbGluZXNcbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsCisJCQkJIkludmFsaWQgdmFsdWUgb2Ygc2FtcGxlIGxpbmVzXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMzI1LDE4ICszMzMsMTggQEAKIAlpbnQgeDsKIAogCS8qIG9ubHkgcmF3IG1vZHVsZSBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgdGhyb3VnaCB0aGUgSU9DVEwgKi8KLQlpZiAoY2NkY19pZl90eXBlICE9IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlICE9IFZQRkVfUkFXX0JBWUVSKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXggPSBjb3B5X2Zyb21fdXNlcigmY2NkY19yYXdfcGFyYW1zLCBwYXJhbXMsIHNpemVvZihjY2RjX3Jhd19wYXJhbXMpKTsKIAlpZiAoeCkgewotCQlkZXZfZGJnKGRldiwgImNjZGNfc2V0X3BhcmFtczogZXJyb3IgaW4gY29weWluZyBjY2RjIgorCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgImNjZGNfc2V0X3BhcmFtczogZXJyb3IgaW4gY29weWluZyBjY2RjIgogCQkJInBhcmFtcywgJWRcbiIsIHgpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlpZiAoIXZhbGlkYXRlX2NjZGNfcGFyYW0oJmNjZGNfcmF3X3BhcmFtcykpIHsKLQkJbWVtY3B5KCZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcywKKwkJbWVtY3B5KCZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zLAogCQkJJmNjZGNfcmF3X3BhcmFtcywKIAkJCXNpemVvZihjY2RjX3Jhd19wYXJhbXMpKTsKIAkJcmV0dXJuIDA7CkBAIC0zNDcsMTEgKzM1NSwxMSBAQAogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZSBDQ0RDIGZvciBZQ2JDciB2aWRlbyBjYXB0dXJlICovCiBzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ195Y2Jjcih2b2lkKQogewotCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciAqcGFyYW1zID0gJmNjZGNfaHdfcGFyYW1zX3ljYmNyOworCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciAqcGFyYW1zID0gJmNjZGNfY2ZnLnljYmNyOwogCXUzMiB0ZW1wOwogCiAJLyogZmlyc3Qgc2V0IHRoZSBDQ0RDIHBvd2VyIG9uIGRlZmF1bHRzIHZhbHVlcyBpbiBhbGwgcmVnaXN0ZXJzICovCi0JZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3ljYmNyLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3ljYmNyLi4uIik7CiAJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CiAKIAkvKiBjb25maWd1cmUgcGl4ZWwgZm9ybWF0ICYgdmlkZW8gZnJhbWUgZm9ybWF0ICovCkBAIC00MDMsNyArNDExLDcgQEAKIAkJcmVndyhDQ0RDX1NET0ZTVF9GSUVMRF9JTlRFUkxFQVZFRCwgU0RPRlNUKTsKIAl9CiAKLQlkZXZfZGJnKGRldiwgIlxuRW5kIG9mIGNjZGNfY29uZmlnX3ljYmNyLi4uXG4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuRW5kIG9mIGNjZGNfY29uZmlnX3ljYmNyLi4uXG4iKTsKIH0KIAogLyoKQEAgLTQ4Myw3ICs0OTEsNyBAQAogCSAqLwogCiAJaWYgKGNvdW50KSB7Ci0JCWRldl9lcnIoZGV2LCAiZGVmZWN0IHRhYmxlIHdyaXRlIHRpbWVvdXQgISEhXG4iKTsKKwkJZGV2X2VycihjY2RjX2NmZy5kZXYsICJkZWZlY3QgdGFibGUgd3JpdGUgdGltZW91dCAhISFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiAwOwpAQCAtNjA1LDEyICs2MTMsMTIgQEAKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgQ0NEQyBmb3IgUmF3IG1vZGUgaW1hZ2UgY2FwdHVyZSAqLwogc3RhdGljIGludCBjY2RjX2NvbmZpZ19yYXcodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfcmF3OworCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgKnBhcmFtcyA9ICZjY2RjX2NmZy5iYXllcjsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50IHZhbDsKIAotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfcmF3Li4uIik7CiAKIAkvKiByZXN0b3JlIHBvd2VyIG9uIGRlZmF1bHRzIHRvIHJlZ2lzdGVyICovCiAJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CkBAIC02NTksNyArNjY3LDcgQEAKIAl2YWwgfD0gKGNvbmZpZ19wYXJhbXMtPmRhdGFzZnQgJiBDQ0RDX0RBVEFTRlRfTUFTSykgPDwKIAkJQ0NEQ19EQVRBU0ZUX1NISUZUOwogCXJlZ3codmFsICwgTU9ERVNFVCk7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBNT0RFU0VULi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gTU9ERVNFVC4uLlxuIiwgdmFsKTsKIAogCS8qIENvbmZpZ3VyZSB0aGUgTWVkaWFuIEZpbHRlciB0aHJlc2hvbGQgKi8KIAlyZWd3KChjb25maWdfcGFyYW1zLT5tZWRfZmlsdF90aHJlcykgJiBDQ0RDX01FRF9GSUxUX1RIUkVTSCwgTUVERklMVCk7CkBAIC02ODEsNyArNjg5LDcgQEAKIAkJKGNvbmZpZ19wYXJhbXMtPm1maWx0MiA8PCBDQ0RDX01GSUxUMl9TSElGVCkpOwogCiAJcmVndyh2YWwsIEdBTU1BV0QpOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gR0FNTUFXRC4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEdBTU1BV0QuLi5cbiIsIHZhbCk7CiAKIAkvKiBjb25maWd1cmUgdmlkZW8gd2luZG93ICovCiAJY2NkY19zZXR3aW4oJnBhcmFtcy0+d2luLCBwYXJhbXMtPmZybV9mbXQsIDEpOwpAQCAtNzA2LDcgKzcxNCw3IEBACiAJLyogQ29uZmlndXJlIHRoZSBHYWluICAmIG9mZnNldCBjb250cm9sICovCiAJY2NkY19jb25maWdfZ2Fpbl9vZmZzZXQoKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIENPTFBUTi4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAleCB0byBDT0xQVE4uLi5cbiIsIHZhbCk7CiAKIAkvKiBDb25maWd1cmUgREFUQU9GU1QgIHJlZ2lzdGVyICovCiAJdmFsID0gKGNvbmZpZ19wYXJhbXMtPmRhdGFfb2Zmc2V0Lmhvcnpfb2Zmc2V0ICYgQ0NEQ19EQVRBT0ZTVF9NQVNLKSA8PApAQCAtNzI2LDcgKzczNCw3IEBACiAJCQlDQ0RDX0hTSVpFX1ZBTF9NQVNLOwogCiAJCS8qIGFkanVzdCB0byBtdWx0aXBsZSBvZiAzMiAqLwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEhTSVpFLi4uXG4iLAorCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEhTSVpFLi4uXG4iLAogCQkgICAgICAgKCgocGFyYW1zLT53aW4ud2lkdGgpICsgMzEpID4+IDUpICYKIAkJCUNDRENfSFNJWkVfVkFMX01BU0spOwogCX0gZWxzZSB7CkBAIC03MzQsNyArNzQyLDcgQEAKIAkJdmFsIHw9ICgoKHBhcmFtcy0+d2luLndpZHRoICogMikgKyAzMSkgPj4gNSkgJgogCQkJQ0NEQ19IU0laRV9WQUxfTUFTSzsKIAotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEhTSVpFLi4uXG4iLAorCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEhTSVpFLi4uXG4iLAogCQkgICAgICAgKCgocGFyYW1zLT53aW4ud2lkdGggKiAyKSArIDMxKSA+PiA1KSAmCiAJCQlDQ0RDX0hTSVpFX1ZBTF9NQVNLKTsKIAl9CkBAIC03NDUsMzQgKzc1MywzNCBAQAogCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW5hYmxlKSB7CiAJCQkvKiBGb3IgaW50ZXJsYWNlIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfSU5WRVJTRSwgU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKIAkJCQlDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfSU5WRVJTRSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBGb3IgaW50ZXJsYWNlIG5vbiBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19TRE9GU1RfSU5URVJMQUNFX05PUk1BTCwgU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKIAkJCQlDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfTk9STUFMKTsKIAkJfQogCX0gZWxzZSBpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKSB7CiAJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbmFibGUpIHsKIAkJCS8qIEZvciBwcm9nZXNzaXZlIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9JTlZFUlNFLCBTRE9GU1QpOwotCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAorCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAogCQkJCUNDRENfU0RPRlNUX1BST0dSRVNTSVZFX0lOVkVSU0UpOwogCQl9IGVsc2UgewogCQkJLyogRm9yIHByb2dlc3NpdmUgbm9uIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9OT1JNQUwsIFNET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCiAJCQkJQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfTk9STUFMKTsKIAkJfQogCX0KLQlkZXZfZGJnKGRldiwgIlxuZW5kIG9mIGNjZGNfY29uZmlnX3Jhdy4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5lbmQgb2YgY2NkY19jb25maWdfcmF3Li4uIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19jb25maWd1cmUodm9pZCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQlyZXR1cm4gY2NkY19jb25maWdfcmF3KCk7CiAJZWxzZQogCQljY2RjX2NvbmZpZ195Y2JjcigpOwpAQCAtNzgxLDIzICs3ODksMjMgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9idWZ0eXBlKGVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZSA9IGJ1Zl90eXBlOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci5idWZfdHlwZSA9IGJ1Zl90eXBlOwogCWVsc2UKLQkJY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwkJY2NkY19jZmcueWNiY3IuYnVmX3R5cGUgPSBidWZfdHlwZTsKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyBlbnVtIGNjZGNfYnVmdHlwZSBjY2RjX2dldF9idWZ0eXBlKHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZTsKLQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGU7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBjY2RjX2NmZy5iYXllci5idWZfdHlwZTsKKwlyZXR1cm4gY2NkY19jZmcueWNiY3IuYnVmX3R5cGU7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19lbnVtX3BpeCh1MzIgKnBpeCwgaW50IGkpCiB7CiAJaW50IHJldCA9IC1FSU5WQUw7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CiAJCWlmIChpIDwgQVJSQVlfU0laRShjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0cykpIHsKIAkJCSpwaXggPSBjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0c1tpXTsKIAkJCXJldCA9IDA7CkBAIC04MTMsMjAgKzgyMSwxOSBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X3BpeGVsX2Zvcm1hdCh1MzIgcGl4Zm10KQogewotCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXc7CisJc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPSAmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3OwogCi0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgewotCQljY2RjX2h3X3BhcmFtc19yYXcucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQljY2RjX2NmZy5iYXllci5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXOwogCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpCiAJCQlhbGF3LT5lbmFibGUgPSAxOwogCQllbHNlIGlmIChwaXhmbXQgIT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgewogCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQotCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CisJCQljY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKIAkJZWxzZSBpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9VWVZZKQotCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCQljY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODM0LDE3ICs4NDEsMTYgQEAKIH0KIHN0YXRpYyB1MzIgY2NkY19nZXRfcGl4ZWxfZm9ybWF0KHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdzsKKwlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9ICZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmFsYXc7CiAJdTMyIHBpeGZtdDsKIAotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCiAJCWlmIChhbGF3LT5lbmFibGUpCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OwogCQllbHNlCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKIAllbHNlIHsKLQkJaWYgKGNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9PSBDQ0RDX1BJWE9SREVSX1lDQllDUikKKwkJaWYgKGNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9PSBDQ0RDX1BJWE9SREVSX1lDQllDUikKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOwogCQllbHNlCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKQEAgLTg1Myw1MyArODU5LDUzIEBACiB9CiBzdGF0aWMgaW50IGNjZGNfc2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LndpbiA9ICp3aW47CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfY2ZnLmJheWVyLndpbiA9ICp3aW47CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci53aW4gPSAqd2luOworCQljY2RjX2NmZy55Y2Jjci53aW4gPSAqd2luOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX2dldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCSp3aW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQkqd2luID0gY2NkY19jZmcuYmF5ZXIud2luOwogCWVsc2UKLQkJKndpbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbjsKKwkJKndpbiA9IGNjZGNfY2ZnLnljYmNyLndpbjsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBjY2RjX2dldF9saW5lX2xlbmd0aCh2b2lkKQogewogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKIAkJaWYgKChjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkgfHwKIAkJICAgIChjb25maWdfcGFyYW1zLT5kYXRhX3N6ID09IENDRENfREFUQV84QklUUykpCi0JCQlsZW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luLndpZHRoOworCQkJbGVuID0gY2NkY19jZmcuYmF5ZXIud2luLndpZHRoOwogCQllbHNlCi0JCQlsZW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luLndpZHRoICogMjsKKwkJCWxlbiA9IGNjZGNfY2ZnLmJheWVyLndpbi53aWR0aCAqIDI7CiAJfSBlbHNlCi0JCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbi53aWR0aCAqIDI7CisJCWxlbiA9IGNjZGNfY2ZnLnljYmNyLndpbi53aWR0aCAqIDI7CiAJcmV0dXJuIEFMSUdOKGxlbiwgMzIpOwogfQogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2ZyYW1lX2Zvcm1hdChlbnVtIGNjZGNfZnJtZm10IGZybV9mbXQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQgPSBmcm1fZm10OworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci5mcm1fZm10ID0gZnJtX2ZtdDsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmZybV9mbXQgPSBmcm1fZm10OworCQljY2RjX2NmZy55Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGVudW0gY2NkY19mcm1mbXQgY2NkY19nZXRfZnJhbWVfZm9ybWF0KHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10OworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19jZmcuYmF5ZXIuZnJtX2ZtdDsKIAllbHNlCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10OworCQlyZXR1cm4gY2NkY19jZmcueWNiY3IuZnJtX2ZtdDsKIH0KIAogc3RhdGljIGludCBjY2RjX2dldGZpZCh2b2lkKQpAQCAtOTE2LDE0ICs5MjIsMTQgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9od19pZl9wYXJhbXMoc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0gKnBhcmFtcykKIHsKLQljY2RjX2lmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CisJY2NkY19jZmcuaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKIAogCXN3aXRjaCAocGFyYW1zLT5pZl90eXBlKSB7CiAJY2FzZSBWUEZFX0JUNjU2OgogCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzE2OgogCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6Ci0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7Ci0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CisJCWNjZGNfY2ZnLnljYmNyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7CisJCWNjZGNfY2ZnLnljYmNyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFRPRE8gYWRkIHN1cHBvcnQgZm9yIHJhdyBiYXllciBoZXJlICovCkBAIC05MzgsNyArOTQ0LDYgQEAKIAkuaHdfb3BzID0gewogCQkub3BlbiA9IGNjZGNfb3BlbiwKIAkJLmNsb3NlID0gY2NkY19jbG9zZSwKLQkJLnNldF9jY2RjX2Jhc2UgPSBjY2RjX3NldF9jY2RjX2Jhc2UsCiAJCS5lbmFibGUgPSBjY2RjX2VuYWJsZSwKIAkJLmVuYWJsZV9vdXRfdG9fc2RyYW0gPSBjY2RjX2VuYWJsZV9vdXRwdXRfdG9fc2RyYW0sCiAJCS5zZXRfaHdfaWZfcGFyYW1zID0gY2NkY19zZXRfaHdfaWZfcGFyYW1zLApAQCAtOTU5LDE5ICs5NjQsMTE4IEBACiAJfSwKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IGRtMzU1X2NjZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl2b2lkICgqc2V0dXBfcGlubXV4KSh2b2lkKTsKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qCisJICogZmlyc3QgdHJ5IHRvIHJlZ2lzdGVyIHdpdGggdnBmZS4gSWYgbm90IGNvcnJlY3QgcGxhdGZvcm0sIHRoZW4gd2UKKwkgKiBkb24ndCBoYXZlIHRvIGlvbWFwCisJICovCisJc3RhdHVzID0gdnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbm9yZXM7CisJfQorCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcmVzLT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZmFpbF9ub3JlczsKKwl9CisKKwljY2RjX2NmZy5iYXNlX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWNjZGNfY2ZnLmJhc2VfYWRkcikgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbm9tZW07CisJfQorCisJLyogR2V0IGFuZCBlbmFibGUgTWFzdGVyIGNsb2NrICovCisJY2NkY19jZmcubWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1hc3RlciIpOworCWlmIChJU19FUlIoY2NkY19jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gUFRSX0VSUihjY2RjX2NmZy5tY2xrKTsKKwkJZ290byBmYWlsX25vbWFwOworCX0KKwlpZiAoY2xrX2VuYWJsZShjY2RjX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisKKwkvKiBHZXQgYW5kIGVuYWJsZSBTbGF2ZSBjbG9jayAqLworCWNjZGNfY2ZnLnNjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJzbGF2ZSIpOworCWlmIChJU19FUlIoY2NkY19jZmcuc2NsaykpIHsKKwkJc3RhdHVzID0gUFRSX0VSUihjY2RjX2NmZy5zY2xrKTsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCWlmIChjbGtfZW5hYmxlKGNjZGNfY2ZnLnNjbGspKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9zY2xrOworCX0KKworCS8qIFBsYXRmb3JtIGRhdGEgaG9sZHMgc2V0dXBfcGlubXV4IGZ1bmN0aW9uIHB0ciAqLworCWlmIChOVUxMID09IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9zY2xrOworCX0KKwlzZXR1cF9waW5tdXggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkvKgorCSAqIHNldHVwIE11eCBjb25maWd1cmF0aW9uIGZvciBjY2RjIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZm9yCisJICogZGlmZmVyZW50IFNvQ3MgdXNpbmcgdGhpcyBDQ0RDCisJICovCisJc2V0dXBfcGlubXV4KCk7CisJY2NkY19jZmcuZGV2ID0gJnBkZXYtPmRldjsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwgY2NkY19od19kZXYubmFtZSk7CisJcmV0dXJuIDA7CitmYWlsX3NjbGs6CisJY2xrX3B1dChjY2RjX2NmZy5zY2xrKTsKK2ZhaWxfbWNsazoKKwljbGtfcHV0KGNjZGNfY2ZnLm1jbGspOworZmFpbF9ub21hcDoKKwlpb3VubWFwKGNjZGNfY2ZnLmJhc2VfYWRkcik7CitmYWlsX25vbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbF9ub3JlczoKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRtMzU1X2NjZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisKKwljbGtfcHV0KGNjZGNfY2ZnLm1jbGspOworCWNsa19wdXQoY2NkY19jZmcuc2Nsayk7CisJaW91bm1hcChjY2RjX2NmZy5iYXNlX2FkZHIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRtMzU1X2NjZGNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImRtMzU1X2NjZGMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkbTM1NV9jY2RjX3JlbW92ZSksCisJLnByb2JlID0gZG0zNTVfY2NkY19wcm9iZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGRtMzU1X2NjZGNfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX05PVElDRSAiZG0zNTVfY2NkY19pbml0XG4iKTsKLQlpZiAodnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpIDwgMCkKLQkJcmV0dXJuIC0xOwotCXByaW50ayhLRVJOX05PVElDRSAiJXMgaXMgcmVnaXN0ZXJlZCB3aXRoIHZwZmUuXG4iLAotCQljY2RjX2h3X2Rldi5uYW1lKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkbTM1NV9jY2RjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkbTM1NV9jY2RjX2V4aXQodm9pZCkKIHsKLQl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZG0zNTVfY2NkY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChkbTM1NV9jY2RjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYwppbmRleCBkNWZhMTkzLi4wYzM5NGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYwpAQCAtMzcsOCArMzcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKICNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2RtNjQ0eF9jY2RjLmg+CiAjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cHNzLmg+CisKICNpbmNsdWRlICJkbTY0NHhfY2NkY19yZWdzLmgiCiAjaW5jbHVkZSAiY2NkY19od19kZXZpY2UuaCIKIApAQCAtNDYsMzIgKzUwLDQ0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkNDREMgRHJpdmVyIGZvciBETTY0NDYiKTsKIE1PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0KLS8qIE9iamVjdCBmb3IgQ0NEQyByYXcgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjY2RjX3BhcmFtc19yYXcgY2NkY19od19wYXJhbXNfcmF3ID0gewotCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXLAotCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUsCi0JLndpbiA9IENDRENfV0lOX1ZHQSwKLQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmNvbmZpZ19wYXJhbXMgPSB7Ci0JCS5kYXRhX3N6ID0gQ0NEQ19EQVRBXzEwQklUUywKK3N0YXRpYyBzdHJ1Y3QgY2NkY19vcGVyX2NvbmZpZyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCS8qIENDREMgaW50ZXJmYWNlIHR5cGUgKi8KKwllbnVtIHZwZmVfaHdfaWZfdHlwZSBpZl90eXBlOworCS8qIFJhdyBCYXllciBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBiYXllcjsKKwkvKiBZQ2JDciBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIHljYmNyOworCS8qIE1hc3RlciBjbG9jayAqLworCXN0cnVjdCBjbGsgKm1jbGs7CisJLyogc2xhdmUgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICpzY2xrOworCS8qIGNjZGMgYmFzZSBhZGRyZXNzICovCisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Cit9IGNjZGNfY2ZnID0geworCS8qIFJhdyBjb25maWd1cmF0aW9ucyAqLworCS5iYXllciA9IHsKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUsCisJCS53aW4gPSBDQ0RDX1dJTl9WR0EsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuY29uZmlnX3BhcmFtcyA9IHsKKwkJCS5kYXRhX3N6ID0gQ0NEQ19EQVRBXzEwQklUUywKKwkJfSwKIAl9LAotfTsKLQotLyogT2JqZWN0IGZvciBDQ0RDIHljYmNyIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgY2NkY19od19wYXJhbXNfeWNiY3IgPSB7Ci0JLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAotCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCwKLQkud2luID0gQ0NEQ19XSU5fUEFMLAotCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuYnQ2NTZfZW5hYmxlID0gMSwKLQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCi0JLmJ1Zl90eXBlID0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRAorCS55Y2JjciA9IHsKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCisJCS53aW4gPSBDQ0RDX1dJTl9QQUwsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuYnQ2NTZfZW5hYmxlID0gMSwKKwkJLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZLAorCQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECisJfSwKIH07CiAKICNkZWZpbmUgQ0NEQ19NQVhfUkFXX1lVVl9GT1JNQVRTCTIKQEAgLTg0LDI1ICsxMDAsMTUgQEAKIHN0YXRpYyB1MzIgY2NkY19yYXdfeXV2X3BpeF9mb3JtYXRzW10gPQogCXtWNEwyX1BJWF9GTVRfVVlWWSwgVjRMMl9QSVhfRk1UX1lVWVZ9OwogCi1zdGF0aWMgdm9pZCAqX19pb21lbSBjY2RjX2Jhc2VfYWRkcjsKLXN0YXRpYyBpbnQgY2NkY19hZGRyX3NpemU7Ci1zdGF0aWMgZW51bSB2cGZlX2h3X2lmX3R5cGUgY2NkY19pZl90eXBlOwotCiAvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIHJlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChjY2RjX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIGNjZGNfYmFzZV9hZGRyICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgY2NkY19zZXRfY2NkY19iYXNlKHZvaWQgKmFkZHIsIGludCBzaXplKQotewotCWNjZGNfYmFzZV9hZGRyID0gYWRkcjsKLQljY2RjX2FkZHJfc2l6ZSA9IHNpemU7CisJX19yYXdfd3JpdGVsKHZhbCwgY2NkY19jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19lbmFibGUoaW50IGZsYWcpCkBAIC0xMzIsNyArMTM4LDcgQEAKIAlpbnQgdmVydF9zdGFydCwgdmVydF9ucl9saW5lczsKIAlpbnQgdmFsID0gMCwgbWlkX2ltZyA9IDA7CiAKLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19zZXR3aW4uLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19zZXR3aW4uLi4iKTsKIAkvKgogCSAqIHBwYyAtIHBlciBwaXhlbCBjb3VudC4gaW5kaWNhdGVzIGhvdyBtYW55IHBpeGVscyBwZXIgY2VsbAogCSAqIG91dHB1dCB0byBTRFJBTS4gZXhhbXBsZSwgZm9yIHljYmNyLCBpdCBpcyBvbmUgeSBhbmQgb25lIGMsIHNvIDIuCkBAIC0xNzEsNyArMTc3LDcgQEAKIAlyZWd3KCh2ZXJ0X3N0YXJ0IDw8IENDRENfVkVSVF9TVEFSVF9TTFYwX1NISUZUKSB8IHZlcnRfc3RhcnQsCiAJICAgICBDQ0RDX1ZFUlRfU1RBUlQpOwogCXJlZ3codmVydF9ucl9saW5lcywgQ0NEQ19WRVJUX0xJTkVTKTsKLQlkZXZfZGJnKGRldiwgIlxuRW5kIG9mIGNjZGNfc2V0d2luLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkVuZCBvZiBjY2RjX3NldHdpbi4uLiIpOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX3JlYWRyZWdzKHZvaWQpCkBAIC0xNzksMzkgKzE4NSwzOSBAQAogCXVuc2lnbmVkIGludCB2YWwgPSAwOwogCiAJdmFsID0gcmVncihDQ0RDX0FMQVcpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEFMQVcuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0NMQU1QKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIENMQU1QLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQ0xBTVAuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0RDU1VCKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIERDU1VCLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRENTVUIuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0JMS0NNUCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBCTEtDTVAuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBCTEtDTVAuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZQQ19BRERSKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZQQ19BRERSLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRlBDX0FERFIuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZQQyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZNVENGRyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRDRkcuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRDRkcuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0NPTFBUTik7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBDT0xQVE4uLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBDT0xQVE4uLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZNVF9IT1JaKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVF9IT1JaLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX0hPUlouLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZNVF9WRVJUKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVF9WRVJULi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX1ZFUlQuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0hTSVpFX09GRik7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBIU0laRV9PRkYuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBIU0laRV9PRkYuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1NET0ZTVCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBTRE9GU1QuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBTRE9GU1QuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1ZQX09VVCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBWUF9PVVQuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBWUF9PVVQuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1NZTl9NT0RFKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFNZTl9NT0RFLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gU1lOX01PREUuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0hPUlpfSU5GTyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBIT1JaX0lORk8uLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBIT1JaX0lORk8uLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1ZFUlRfU1RBUlQpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVkVSVF9TVEFSVC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZFUlRfU1RBUlQuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1ZFUlRfTElORVMpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVkVSVF9MSU5FUy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZFUlRfTElORVMuLi5cbiIsIHZhbCk7CiB9CiAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfY2NkY19wYXJhbShzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY2NkY3BhcmFtKQpAQCAtMjIwLDcgKzIyNiw3IEBACiAJCWlmICgoY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPiBDQ0RDX0dBTU1BX0JJVFNfMDlfMCkgfHwKIAkJICAgIChjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA8IENDRENfR0FNTUFfQklUU18xNV82KSB8fAogCQkgICAgKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkIDwgY2NkY3BhcmFtLT5kYXRhX3N6KSkgewotCQkJZGV2X2RiZyhkZXYsICJcbkludmFsaWQgZGF0YSBsaW5lIHNlbGVjdCIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkludmFsaWQgZGF0YSBsaW5lIHNlbGVjdCIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtMjMwLDcgKzIzNiw3IEBACiBzdGF0aWMgaW50IGNjZGNfdXBkYXRlX3Jhd19wYXJhbXMoc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKnJhd19wYXJhbXMpCiB7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50ICpmcGNfdmlydGFkZHIgPSBOVUxMOwogCXVuc2lnbmVkIGludCAqZnBjX3BoeXNhZGRyID0gTlVMTDsKIApAQCAtMjY2LDcgKzI3Miw3IEBACiAJCQkJCQkJIEZQX05VTV9CWVRFUykpOwogCiAJCWlmIChmcGNfdmlydGFkZHIgPT0gTlVMTCkgewotCQkJZGV2X2RiZyhkZXYsCisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwKIAkJCQkiXG5VbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBGUEMiKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC0yNzksNyArMjg1LDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoZnBjX3ZpcnRhZGRyLAogCQkJKHZvaWQgX191c2VyICopcmF3X3BhcmFtcy0+ZmF1bHRfcHhsLmZwY190YWJsZV9hZGRyLAogCQkJY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwX251bSAqIEZQX05VTV9CWVRFUykpIHsKLQkJZGV2X2RiZyhkZXYsICJcbiBjb3B5X2Zyb21fdXNlciBmYWlsZWQiKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbiBjb3B5X2Zyb21fdXNlciBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCWNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcGNfdGFibGVfYWRkciA9ICh1bnNpZ25lZCBpbnQpZnBjX3BoeXNhZGRyOwpAQCAtMjg5LDcgKzI5NSw3IEBACiBzdGF0aWMgaW50IGNjZGNfY2xvc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCAqZnBjX3BoeXNhZGRyID0gTlVMTCwgKmZwY192aXJ0YWRkciA9IE5VTEw7CiAKIAlmcGNfcGh5c2FkZHIgPSAodW5zaWduZWQgaW50ICopY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwY190YWJsZV9hZGRyOwpAQCAtMzIzLDkgKzMyOSw4IEBACiAKIHN0YXRpYyBpbnQgY2NkY19vcGVuKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKLQlkZXYgPSBkZXZpY2U7CiAJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKIAkJY2NkY19lbmFibGVfdnBvcnQoMSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNDEsMTIgKzM0NiwxMiBAQAogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3IGNjZGNfcmF3X3BhcmFtczsKIAlpbnQgeDsKIAotCWlmIChjY2RjX2lmX3R5cGUgIT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgIT0gVlBGRV9SQVdfQkFZRVIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJeCA9IGNvcHlfZnJvbV91c2VyKCZjY2RjX3Jhd19wYXJhbXMsIHBhcmFtcywgc2l6ZW9mKGNjZGNfcmF3X3BhcmFtcykpOwogCWlmICh4KSB7Ci0JCWRldl9kYmcoZGV2LCAiY2NkY19zZXRfcGFyYW1zOiBlcnJvciBpbiBjb3B5aW5nIgorCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgImNjZGNfc2V0X3BhcmFtczogZXJyb3IgaW4gY29weWluZyIKIAkJCSAgICJjY2RjIHBhcmFtcywgJWRcbiIsIHgpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0zNjQsMTAgKzM2OSwxMCBAQAogICovCiB2b2lkIGNjZGNfY29uZmlnX3ljYmNyKHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfeWNiY3I7CisJc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyICpwYXJhbXMgPSAmY2NkY19jZmcueWNiY3I7CiAJdTMyIHN5bl9tb2RlOwogCi0JZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3ljYmNyLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3ljYmNyLi4uIik7CiAJLyoKIAkgKiBmaXJzdCByZXN0b3JlIHRoZSBDQ0RDIHJlZ2lzdGVycyB0byBkZWZhdWx0IHZhbHVlcwogCSAqIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIHdlIGFzc3VtZSBkZWZhdWx0IHZhbHVlcyB0byBiZSBzZXQgaW4KQEAgLTQyOCw3ICs0MzMsNyBAQAogCQlyZWd3KENDRENfU0RPRlNUX0ZJRUxEX0lOVEVSTEVBVkVELCBDQ0RDX1NET0ZTVCk7CiAKIAljY2RjX3NibF9yZXNldCgpOwotCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19jb25maWdfeWNiY3IuLi5cbiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5FbmQgb2YgY2NkY19jb25maWdfeWNiY3IuLi5cbiIpOwogCWNjZGNfcmVhZHJlZ3MoKTsKIH0KIApAQCAtNDQwLDkgKzQ0NSw5IEBACiAJCS8qIGNvbmZpZ3VyZSBEQ1N1YiAqLwogCQl2YWwgPSAoYmNsYW1wLT5kY19zdWIpICYgQ0NEQ19CTEtfRENfU1VCX01BU0s7CiAJCXJlZ3codmFsLCBDQ0RDX0RDU1VCKTsKLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBEQ1NVQi4uLlxuIiwgdmFsKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBEQ1NVQi4uLlxuIiwgdmFsKTsKIAkJcmVndyhDQ0RDX0NMQU1QX0RFRkFVTFRfVkFMLCBDQ0RDX0NMQU1QKTsKLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIENMQU1QLi4uXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIENMQU1QLi4uXG4iKTsKIAkJcmV0dXJuOwogCX0KIAkvKgpAQCAtNDU3LDEwICs0NjIsMTAgQEAKIAkgICAgICAgKChiY2xhbXAtPnNhbXBsZV9waXhlbCAmIENDRENfQkxLX1NBTVBMRV9MTl9NQVNLKSA8PAogCQlDQ0RDX0JMS19TQU1QTEVfTE5fU0hJRlQpIHwgQ0NEQ19CTEtfQ0xBTVBfRU5BQkxFKTsKIAlyZWd3KHZhbCwgQ0NEQ19DTEFNUCk7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBDTEFNUC4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIENMQU1QLi4uXG4iLCB2YWwpOwogCS8qIElmIEJsYWNrIGNsYW1waW5nIGlzIGVuYWJsZSB0aGVuIG1ha2UgZGNzdWIgMCAqLwogCXJlZ3coQ0NEQ19EQ1NVQl9ERUZBVUxUX1ZBTCwgQ0NEQ19EQ1NVQik7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMDAwMDAwMCB0byBEQ1NVQi4uLlxuIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgwMDAwMDAwMCB0byBEQ1NVQi4uLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGNjZGNfY29uZmlnX2JsYWNrX2NvbXBlbnNlKHN0cnVjdCBjY2RjX2JsYWNrX2NvbXBlbnNhdGlvbiAqYmNvbXApCkBAIC00OTAsMTcgKzQ5NSwxNyBAQAogCiAJLyogQ29uZmlndXJlIEZhdWx0IHBpeGVsIGlmIG5lZWRlZCAqLwogCXJlZ3coZnBjLT5mcGNfdGFibGVfYWRkciwgQ0NEQ19GUENfQUREUik7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGUENfQUREUi4uLlxuIiwKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQ19BRERSLi4uXG4iLAogCQkgICAgICAgKGZwYy0+ZnBjX3RhYmxlX2FkZHIpKTsKIAkvKiBXcml0ZSB0aGUgRlBDIHBhcmFtcyB3aXRoIEZQQyBkaXNhYmxlICovCiAJdmFsID0gZnBjLT5mcF9udW0gJiBDQ0RDX0ZQQ19GUENfTlVNX01BU0s7CiAJcmVndyh2YWwsIENDRENfRlBDKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOwogCS8qIHJlYWQgdGhlIEZQQyByZWdpc3RlciAqLwogCXZhbCA9IHJlZ3IoQ0NEQ19GUEMpIHwgQ0NEQ19GUENfRU5BQkxFOwogCXJlZ3codmFsLCBDQ0RDX0ZQQyk7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CiB9CiAKIC8qCkBAIC01MDksMTMgKzUxNCwxMyBAQAogICovCiB2b2lkIGNjZGNfY29uZmlnX3Jhdyh2b2lkKQogewotCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc19yYXc7CisJc3RydWN0IGNjZGNfcGFyYW1zX3JhdyAqcGFyYW1zID0gJmNjZGNfY2ZnLmJheWVyOwogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCBzeW5fbW9kZSA9IDA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfcmF3Li4uIik7CiAKIAkvKiAgICAgIFJlc2V0IENDREMgKi8KIAljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKQEAgLTU0NSw3ICs1NTAsNyBAQAogCQl2YWwgPSAoKGNvbmZpZ19wYXJhbXMtPmFsYXcuZ2FtYV93ZCAmCiAJCSAgICAgIENDRENfQUxBV19HQU1BX1dEX01BU0spIHwgQ0NEQ19BTEFXX0VOQUJMRSk7CiAJCXJlZ3codmFsLCBDQ0RDX0FMQVcpOwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEFMQVcuLi5cbiIsIHZhbCk7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKIAl9CiAKIAkvKiBDb25maWd1cmUgdmlkZW8gd2luZG93ICovCkBAIC01ODIsMTEgKzU4NywxMSBAQAogCS8qIFdyaXRlIHZhbHVlIGluIEZNVENGRyAqLwogCXJlZ3codmFsLCBDQ0RDX0ZNVENGRyk7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKIAkvKiBDb25maWd1cmUgdGhlIGNvbG9yIHBhdHRlcm4gYWNjb3JkaW5nIHRvIG10OXQwMDEgc2Vuc29yICovCiAJcmVndyhDQ0RDX0NPTFBUTl9WQUwsIENDRENfQ09MUFROKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4QkIxMUJCMTEgdG8gQ09MUFROLi4uXG4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweEJCMTFCQjExIHRvIENPTFBUTi4uLlxuIik7CiAJLyoKIAkgKiBDb25maWd1cmUgRGF0YSBmb3JtYXR0ZXIoVmlkZW8gcG9ydCkgcGl4ZWwgc2VsZWN0aW9uCiAJICogKEZNVF9IT1JaLCBGTVRfVkVSVCkKQEAgLTU5Niw3ICs2MDEsNyBAQAogCSAgICAgIChwYXJhbXMtPndpbi53aWR0aCAmIENDRENfRk1UX0hPUlpfRk1UTE5IX01BU0spOwogCXJlZ3codmFsLCBDQ0RDX0ZNVF9IT1JaKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UX0hPUlouLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRfSE9SWi4uLlxuIiwgdmFsKTsKIAl2YWwgPSAocGFyYW1zLT53aW4udG9wICYgQ0NEQ19GTVRfVkVSVF9GTVRTTFZfTUFTSykKIAkgICAgPDwgQ0NEQ19GTVRfVkVSVF9GTVRTTFZfU0hJRlQ7CiAJaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkKQEAgLTYwNCwxMyArNjA5LDEzIEBACiAJZWxzZQogCQl2YWwgfD0gKHBhcmFtcy0+d2luLmhlaWdodCA+PiAxKSAmIENDRENfRk1UX1ZFUlRfRk1UTE5WX01BU0s7CiAKLQlkZXZfZGJnKGRldiwgIlxucGFyYW1zLT53aW4uaGVpZ2h0ICAweCV4IC4uLlxuIiwKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxucGFyYW1zLT53aW4uaGVpZ2h0ICAweCV4IC4uLlxuIiwKIAkgICAgICAgcGFyYW1zLT53aW4uaGVpZ2h0KTsKIAlyZWd3KHZhbCwgQ0NEQ19GTVRfVkVSVCk7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVF9WRVJULi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UX1ZFUlQuLi5cbiIsIHZhbCk7CiAKLQlkZXZfZGJnKGRldiwgIlxuYmVsb3cgcmVndyh2YWwsIEZNVF9WRVJUKS4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5iZWxvdyByZWd3KHZhbCwgRk1UX1ZFUlQpLi4uIik7CiAKIAkvKgogCSAqIENvbmZpZ3VyZSBIb3Jpem9udGFsIG9mZnNldCByZWdpc3Rlci4gSWYgcGFjayA4IGlzIGVuYWJsZWQgdGhlbgpAQCAtNjMxLDE3ICs2MzYsMTcgQEAKIAkJaWYgKHBhcmFtcy0+aW1hZ2VfaW52ZXJ0X2VuYWJsZSkgewogCQkJLyogRm9yIGludGVsYWNlIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX0lOVEVSTEFDRURfSU1BR0VfSU5WRVJULCBDQ0RDX1NET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDRCNkQgdG8gU0RPRlNULi4uXG4iKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4NEI2RCB0byBTRE9GU1QuLlxuIik7CiAJCX0KIAogCQllbHNlIHsKIAkJCS8qIEZvciBpbnRlbGFjZSBub24gaW52ZXJzZSBtb2RlICovCiAJCQlyZWd3KENDRENfSU5URVJMQUNFRF9OT19JTUFHRV9JTlZFUlQsIENDRENfU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4MDI0OSB0byBTRE9GU1QuLi5cbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgwMjQ5IHRvIFNET0ZTVC4uXG4iKTsKIAkJfQogCX0gZWxzZSBpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKSB7CiAJCXJlZ3coQ0NEQ19QUk9HUkVTU0lWRV9OT19JTUFHRV9JTlZFUlQsIENDRENfU0RPRlNUKTsKLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIFNET0ZTVC4uLlxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4MDAwMCB0byBTRE9GU1QuLi5cbiIpOwogCX0KIAogCS8qCkBAIC02NjIsMTggKzY2NywxOCBAQAogCXZhbCB8PSAocGFyYW1zLT53aW4ubGVmdCkgJiBDQ0RDX1ZQX09VVF9IT1JaX1NUX01BU0s7CiAJcmVndyh2YWwsIENDRENfVlBfT1VUKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gVlBfT1VULi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gVlBfT1VULi4uXG4iLCB2YWwpOwogCXJlZ3coc3luX21vZGUsIENDRENfU1lOX01PREUpOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gU1lOX01PREUuLi5cbiIsIHN5bl9tb2RlKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIFNZTl9NT0RFLi4uXG4iLCBzeW5fbW9kZSk7CiAKIAljY2RjX3NibF9yZXNldCgpOwotCWRldl9kYmcoZGV2LCAiXG5lbmQgb2YgY2NkY19jb25maWdfcmF3Li4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbmVuZCBvZiBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKIAljY2RjX3JlYWRyZWdzKCk7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19jb25maWd1cmUodm9pZCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQljY2RjX2NvbmZpZ19yYXcoKTsKIAllbHNlCiAJCWNjZGNfY29uZmlnX3ljYmNyKCk7CkBAIC02ODIsMjQgKzY4NywyNCBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2J1ZnR5cGUoZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGUpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfY2ZnLmJheWVyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOworCQljY2RjX2NmZy55Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgZW51bSBjY2RjX2J1ZnR5cGUgY2NkY19nZXRfYnVmdHlwZSh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGU7Ci0JcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19jZmcuYmF5ZXIuYnVmX3R5cGU7CisJcmV0dXJuIGNjZGNfY2ZnLnljYmNyLmJ1Zl90eXBlOwogfQogCiBzdGF0aWMgaW50IGNjZGNfZW51bV9waXgodTMyICpwaXgsIGludCBpKQogewogCWludCByZXQgPSAtRUlOVkFMOwotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgewogCQlpZiAoaSA8IEFSUkFZX1NJWkUoY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHMpKSB7CiAJCQkqcGl4ID0gY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbaV07CiAJCQlyZXQgPSAwOwpAQCAtNzE1LDE3ICs3MjAsMTcgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9waXhlbF9mb3JtYXQodTMyIHBpeGZtdCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7Ci0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWNjZGNfY2ZnLmJheWVyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CiAJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKLQkJCWNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXcuZW5hYmxlID0gMTsKKwkJCWNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuYWxhdy5lbmFibGUgPSAxOwogCQllbHNlIGlmIChwaXhmbXQgIT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgewogCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQotCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CisJCQljY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKIAkJZWxzZSBpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9VWVZZKQotCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCQljY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzM0LDE3ICs3MzksMTYgQEAKIAogc3RhdGljIHUzMiBjY2RjX2dldF9waXhlbF9mb3JtYXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcy5hbGF3OworCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0gJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuYWxhdzsKIAl1MzIgcGl4Zm10OwogCi0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKIAkJaWYgKGFsYXctPmVuYWJsZSkKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CiAJCWVsc2UKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjE2OwogCWVsc2UgewotCQlpZiAoY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQorCQlpZiAoY2NkY19jZmcueWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1lVWVY7CiAJCWVsc2UKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9VWVZZOwpAQCAtNzU0LDUzICs3NTgsNTMgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy53aW4gPSAqd2luOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci53aW4gPSAqd2luOwogCWVsc2UKLQkJY2NkY19od19wYXJhbXNfeWNiY3Iud2luID0gKndpbjsKKwkJY2NkY19jZmcueWNiY3Iud2luID0gKndpbjsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19nZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQkqd2luID0gY2NkY19od19wYXJhbXNfcmF3LndpbjsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJKndpbiA9IGNjZGNfY2ZnLmJheWVyLndpbjsKIAllbHNlCi0JCSp3aW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW47CisJCSp3aW4gPSBjY2RjX2NmZy55Y2Jjci53aW47CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2NkY19nZXRfbGluZV9sZW5ndGgodm9pZCkKIHsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCi0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CiAJCWlmICgoY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpIHx8CiAJCSAgICAoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpKQotCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aDsKKwkJCWxlbiA9IGNjZGNfY2ZnLmJheWVyLndpbi53aWR0aDsKIAkJZWxzZQotCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aCAqIDI7CisJCQlsZW4gPSBjY2RjX2NmZy5iYXllci53aW4ud2lkdGggKiAyOwogCX0gZWxzZQotCQlsZW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW4ud2lkdGggKiAyOworCQlsZW4gPSBjY2RjX2NmZy55Y2Jjci53aW4ud2lkdGggKiAyOwogCXJldHVybiBBTElHTihsZW4sIDMyKTsKIH0KIAogc3RhdGljIGludCBjY2RjX3NldF9mcmFtZV9mb3JtYXQoZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10KQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10ID0gZnJtX2ZtdDsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIuZnJtX2ZtdCA9IGZybV9mbXQ7CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKKwkJY2NkY19jZmcueWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBlbnVtIGNjZGNfZnJtZm10IGNjZGNfZ2V0X2ZyYW1lX2Zvcm1hdCh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuZnJtX2ZtdDsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGNjZGNfY2ZnLmJheWVyLmZybV9mbXQ7CiAJZWxzZQotCQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdDsKKwkJcmV0dXJuIGNjZGNfY2ZnLnljYmNyLmZybV9mbXQ7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19nZXRmaWQodm9pZCkKQEAgLTgxNiwxNCArODIwLDE0IEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfaHdfaWZfcGFyYW1zKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbXMpCiB7Ci0JY2NkY19pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOworCWNjZGNfY2ZnLmlmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CiAKIAlzd2l0Y2ggKHBhcmFtcy0+aWZfdHlwZSkgewogCWNhc2UgVlBGRV9CVDY1NjoKIAljYXNlIFZQRkVfWUNCQ1JfU1lOQ18xNjoKIAljYXNlIFZQRkVfWUNCQ1JfU1lOQ184OgotCQljY2RjX2h3X3BhcmFtc195Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOwotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOworCQljY2RjX2NmZy55Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOworCQljY2RjX2NmZy55Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBUT0RPIGFkZCBzdXBwb3J0IGZvciByYXcgYmF5ZXIgaGVyZSAqLwpAQCAtODM4LDcgKzg0Miw2IEBACiAJLmh3X29wcyA9IHsKIAkJLm9wZW4gPSBjY2RjX29wZW4sCiAJCS5jbG9zZSA9IGNjZGNfY2xvc2UsCi0JCS5zZXRfY2NkY19iYXNlID0gY2NkY19zZXRfY2NkY19iYXNlLAogCQkucmVzZXQgPSBjY2RjX3NibF9yZXNldCwKIAkJLmVuYWJsZSA9IGNjZGNfZW5hYmxlLAogCQkuc2V0X2h3X2lmX3BhcmFtcyA9IGNjZGNfc2V0X2h3X2lmX3BhcmFtcywKQEAgLTg1OSwxOSArODYyLDEwNSBAQAogCX0sCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBkbTY0NHhfY2NkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCWludCBzdGF0dXMgPSAwOworCisJLyoKKwkgKiBmaXJzdCB0cnkgdG8gcmVnaXN0ZXIgd2l0aCB2cGZlLiBJZiBub3QgY29ycmVjdCBwbGF0Zm9ybSwgdGhlbiB3ZQorCSAqIGRvbid0IGhhdmUgdG8gaW9tYXAKKwkgKi8KKwlzdGF0dXMgPSB2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9ub3JlczsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCByZXMtPm5hbWUpOworCWlmICghcmVzKSB7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJZ290byBmYWlsX25vcmVzOworCX0KKworCWNjZGNfY2ZnLmJhc2VfYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghY2NkY19jZmcuYmFzZV9hZGRyKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9ub21lbTsKKwl9CisKKwkvKiBHZXQgYW5kIGVuYWJsZSBNYXN0ZXIgY2xvY2sgKi8KKwljY2RjX2NmZy5tY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWFzdGVyIik7CisJaWYgKElTX0VSUihjY2RjX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGNjZGNfY2ZnLm1jbGspOworCQlnb3RvIGZhaWxfbm9tYXA7CisJfQorCWlmIChjbGtfZW5hYmxlKGNjZGNfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKworCS8qIEdldCBhbmQgZW5hYmxlIFNsYXZlIGNsb2NrICovCisJY2NkY19jZmcuc2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNsYXZlIik7CisJaWYgKElTX0VSUihjY2RjX2NmZy5zY2xrKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGNjZGNfY2ZnLnNjbGspOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisJaWYgKGNsa19lbmFibGUoY2NkY19jZmcuc2NsaykpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX3NjbGs7CisJfQorCWNjZGNfY2ZnLmRldiA9ICZwZGV2LT5kZXY7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsIGNjZGNfaHdfZGV2Lm5hbWUpOworCXJldHVybiAwOworZmFpbF9zY2xrOgorCWNsa19wdXQoY2NkY19jZmcuc2Nsayk7CitmYWlsX21jbGs6CisJY2xrX3B1dChjY2RjX2NmZy5tY2xrKTsKK2ZhaWxfbm9tYXA6CisJaW91bm1hcChjY2RjX2NmZy5iYXNlX2FkZHIpOworZmFpbF9ub21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZhaWxfbm9yZXM6CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkbTY0NHhfY2NkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKworCWNsa19wdXQoY2NkY19jZmcubWNsayk7CisJY2xrX3B1dChjY2RjX2NmZy5zY2xrKTsKKwlpb3VubWFwKGNjZGNfY2ZnLmJhc2VfYWRkcik7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZG02NDR4X2NjZGNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImRtNjQ0eF9jY2RjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZG02NDR4X2NjZGNfcmVtb3ZlKSwKKwkucHJvYmUgPSBkbTY0NHhfY2NkY19wcm9iZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGRtNjQ0eF9jY2RjX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9OT1RJQ0UgImRtNjQ0eF9jY2RjX2luaXRcbiIpOwotCWlmICh2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2RldikgPCAwKQotCQlyZXR1cm4gLTE7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsCi0JCWNjZGNfaHdfZGV2Lm5hbWUpOwotCXJldHVybiAwOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRtNjQ0eF9jY2RjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkbTY0NHhfY2NkY19leGl0KHZvaWQpCiB7Ci0JdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRtNjQ0eF9jY2RjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGRtNjQ0eF9jY2RjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljMjljNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmLmMKQEAgLTAsMCArMSwxMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKElTSUYpIGRyaXZlcgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZvciBjb25maWd1cmluZyB0aGUgSVNJRiBJUCBhdmFpbGFibGUgb24gRE0zNjUgb3IgYW55IG90aGVyCisgKiBUSSBTb0NzLiBUaGlzIGlzIHVzZWQgZm9yIGNhcHR1cmluZyB5dXYgb3IgYmF5ZXIgdmlkZW8gb3IgaW1hZ2UgZGF0YQorICogZnJvbSBhIGRlY29kZXIgb3Igc2Vuc29yLiBUaGlzIElQIGlzIHNpbWlsYXIgdG8gdGhlIENDREMgSVAgb24gRE0zNTUKKyAqIGFuZCBETTY0NDYsIGJ1dCB3aXRoIGVuaGFuY2VkIG9yIGFkZGl0aW9uYWwgaXAgYmxvY2tzLiBUaGUgZHJpdmVyCisgKiBjb25maWd1cmVzIHRoZSBJU0lGIHVwb24gY29tbWFuZHMgZnJvbSB0aGUgdnBmZSBicmlkZ2UgZHJpdmVyIHRocm91Z2gKKyAqIGNjZGNfaHdfZGV2aWNlIGludGVyZmFjZS4KKyAqCisgKiBUT0RPOiAxKSBSYXcgYmF5ZXIgcGFyYW1ldGVyIHNldHRpbmdzIGFuZCBiYXllciBjYXB0dXJlCisgKgkgMikgQWRkIHN1cHBvcnQgZm9yIGNvbnRyb2wgaW9jdGwKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxtYWNoL211eC5oPgorCisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS9pc2lmLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cHNzLmg+CisKKyNpbmNsdWRlICJpc2lmX3JlZ3MuaCIKKyNpbmNsdWRlICJjY2RjX2h3X2RldmljZS5oIgorCisvKiBEZWZhdWx0cyBmb3IgbW9kdWxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworc3RhdGljIHN0cnVjdCBpc2lmX2NvbmZpZ19wYXJhbXNfcmF3IGlzaWZfY29uZmlnX2RlZmF1bHRzID0geworCS5saW5lYXJpemUgPSB7CisJCS5lbiA9IDAsCisJCS5jb3JyX3NoZnQgPSBJU0lGX05PX1NISUZULAorCQkuc2NhbGVfZmFjdCA9IHsxLCAwfSwKKwl9LAorCS5kZl9jc2MgPSB7CisJCS5kZl9vcl9jc2MgPSAwLAorCQkuY3NjID0geworCQkJLmVuID0gMCwKKwkJfSwKKwl9LAorCS5kZmMgPSB7CisJCS5lbiA9IDAsCisJfSwKKwkuYmNsYW1wID0geworCQkuZW4gPSAwLAorCX0sCisJLmdhaW5fb2Zmc2V0ID0geworCQkuZ2FpbiA9IHsKKwkJCS5yX3llID0gezEsIDB9LAorCQkJLmdyX2N5ID0gezEsIDB9LAorCQkJLmdiX2cgPSB7MSwgMH0sCisJCQkuYl9tZyA9IHsxLCAwfSwKKwkJfSwKKwl9LAorCS5jdWxsaW5nID0geworCQkuaGNwYXRfb2RkID0gMHhmZiwKKwkJLmhjcGF0X2V2ZW4gPSAweGZmLAorCQkudmNwYXQgPSAweGZmLAorCX0sCisJLmNvbXByZXNzID0geworCQkuYWxnID0gSVNJRl9BTEFXLAorCX0sCit9OworCisvKiBJU0lGIG9wZXJhdGlvbiBjb25maWd1cmF0aW9uICovCitzdGF0aWMgc3RydWN0IGlzaWZfb3Blcl9jb25maWcgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwllbnVtIHZwZmVfaHdfaWZfdHlwZSBpZl90eXBlOworCXN0cnVjdCBpc2lmX3ljYmNyX2NvbmZpZyB5Y2JjcjsKKwlzdHJ1Y3QgaXNpZl9wYXJhbXNfcmF3IGJheWVyOworCWVudW0gaXNpZl9kYXRhX3BhY2sgZGF0YV9wYWNrOworCS8qIE1hc3RlciBjbG9jayAqLworCXN0cnVjdCBjbGsgKm1jbGs7CisJLyogSVNJRiBiYXNlIGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKKwkvKiBJU0lGIExpbmVhciBUYWJsZSAwICovCisJdm9pZCBfX2lvbWVtICpsaW5lYXJfdGJsMF9hZGRyOworCS8qIElTSUYgTGluZWFyIFRhYmxlIDEgKi8KKwl2b2lkIF9faW9tZW0gKmxpbmVhcl90YmwxX2FkZHI7Cit9IGlzaWZfY2ZnID0geworCS55Y2JjciA9IHsKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCisJCS53aW4gPSBJU0lGX1dJTl9OVFNDLAorCQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZLAorCQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVELAorCX0sCisJLmJheWVyID0geworCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKKwkJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKKwkJLndpbiA9IElTSUZfV0lOX1ZHQSwKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5nYWluID0geworCQkJLnJfeWUgPSB7MSwgMH0sCisJCQkuZ3JfY3kgPSB7MSwgMH0sCisJCQkuZ2JfZyA9IHsxLCAwfSwKKwkJCS5iX21nID0gezEsIDB9LAorCQl9LAorCQkuY2ZhX3BhdCA9IElTSUZfQ0ZBX1BBVF9NT1NBSUMsCisJCS5kYXRhX21zYiA9IElTSUZfQklUX01TQl8xMSwKKwkJLmNvbmZpZ19wYXJhbXMgPSB7CisJCQkuZGF0YV9zaGlmdCA9IElTSUZfTk9fU0hJRlQsCisJCQkuY29sX3BhdF9maWVsZDAgPSB7CisJCQkJLm9sb3AgPSBJU0lGX0dSRUVOX0JMVUUsCisJCQkJLm9sZXAgPSBJU0lGX0JMVUUsCisJCQkJLmVsb3AgPSBJU0lGX1JFRCwKKwkJCQkuZWxlcCA9IElTSUZfR1JFRU5fUkVELAorCQkJfSwKKwkJCS5jb2xfcGF0X2ZpZWxkMSA9IHsKKwkJCQkub2xvcCA9IElTSUZfR1JFRU5fQkxVRSwKKwkJCQkub2xlcCA9IElTSUZfQkxVRSwKKwkJCQkuZWxvcCA9IElTSUZfUkVELAorCQkJCS5lbGVwID0gSVNJRl9HUkVFTl9SRUQsCisJCQl9LAorCQkJLnRlc3RfcGF0X2dlbiA9IDAsCisJCX0sCisJfSwKKwkuZGF0YV9wYWNrID0gSVNJRl9EQVRBX1BBQ0s4LAorfTsKKworLyogUmF3IEJheWVyIGZvcm1hdHMgKi8KK3N0YXRpYyBjb25zdCB1MzIgaXNpZl9yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbXSA9IHsKKwlWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX1BJWF9GTVRfU0JHR1IxNn07CisKKy8qIFJhdyBZVVYgZm9ybWF0cyAqLworc3RhdGljIGNvbnN0IHUzMiBpc2lmX3Jhd195dXZfcGl4X2Zvcm1hdHNbXSA9IHsKKwlWNEwyX1BJWF9GTVRfVVlWWSwgVjRMMl9QSVhfRk1UX1lVWVZ9OworCisvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHJlZ3IodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoaXNpZl9jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBpc2lmX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOworfQorCisvKiByZWdfbW9kaWZ5KCkgLSByZWFkLCBtb2RpZnkgYW5kIHdyaXRlIHJlZ2lzdGVyICovCitzdGF0aWMgaW5saW5lIHUzMiByZWdfbW9kaWZ5KHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgb2Zmc2V0KQoreworCXUzMiBuZXdfdmFsID0gKHJlZ3Iob2Zmc2V0KSAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKKworCXJlZ3cobmV3X3ZhbCwgb2Zmc2V0KTsKKwlyZXR1cm4gbmV3X3ZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ3dfbGluX3RibCh1MzIgdmFsLCB1MzIgb2Zmc2V0LCBpbnQgaSkKK3sKKwlpZiAoIWkpCisJCV9fcmF3X3dyaXRlbCh2YWwsIGlzaWZfY2ZnLmxpbmVhcl90YmwwX2FkZHIgKyBvZmZzZXQpOworCWVsc2UKKwkJX19yYXdfd3JpdGVsKHZhbCwgaXNpZl9jZmcubGluZWFyX3RibDFfYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfZGlzYWJsZV9hbGxfbW9kdWxlcyh2b2lkKQoreworCS8qIGRpc2FibGUgQkMgKi8KKwlyZWd3KDAsIENMQU1QQ0ZHKTsKKwkvKiBkaXNhYmxlIHZkZmMgKi8KKwlyZWd3KDAsIERGQ0NUTCk7CisJLyogZGlzYWJsZSBDU0MgKi8KKwlyZWd3KDAsIENTQ0NUTCk7CisJLyogZGlzYWJsZSBsaW5lYXJpemF0aW9uICovCisJcmVndygwLCBMSU5DRkcwKTsKKwkvKiBkaXNhYmxlIG90aGVyIG1vZHVsZXMgaGVyZSBhcyB0aGV5IGFyZSBzdXBwb3J0ZWQgKi8KK30KKworc3RhdGljIHZvaWQgaXNpZl9lbmFibGUoaW50IGVuKQoreworCWlmICghZW4pIHsKKwkJLyogQmVmb3JlIGRpc2FibGUgaXNpZiwgZGlzYWJsZSBhbGwgSVNJRiBtb2R1bGVzICovCisJCWlzaWZfZGlzYWJsZV9hbGxfbW9kdWxlcygpOworCQkvKgorCQkgKiB3YWl0IGZvciBuZXh0IFZELiBBc3N1bWUgbG93ZXN0IHNjYW4gcmF0ZSBpcyAxMiBIei4gU28KKwkJICogMTAwIG1zZWMgZGVsYXkgaXMgZ29vZCBlbm91Z2gKKwkJICovCisJCW1zbGVlcCgxMDApOworCX0KKwlyZWdfbW9kaWZ5KElTSUZfU1lOQ0VOX1ZESERFTl9NQVNLLCBlbiwgU1lOQ0VOKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9lbmFibGVfb3V0cHV0X3RvX3NkcmFtKGludCBlbikKK3sKKwlyZWdfbW9kaWZ5KElTSUZfU1lOQ0VOX1dFTl9NQVNLLCBlbiA8PCBJU0lGX1NZTkNFTl9XRU5fU0hJRlQsIFNZTkNFTik7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfY29uZmlnX2N1bGxpbmcoc3RydWN0IGlzaWZfY3VsICpjdWwpCit7CisJdTMyIHZhbDsKKworCS8qIEhvcml6b250YWwgcGF0dGVybiAqLworCXZhbCA9IChjdWwtPmhjcGF0X2V2ZW4gPDwgQ1VMTF9QQVRfRVZFTl9MSU5FX1NISUZUKSB8IGN1bC0+aGNwYXRfb2RkOworCXJlZ3codmFsLCBDVUxIKTsKKworCS8qIHZlcnRpY2FsIHBhdHRlcm4gKi8KKwlyZWd3KGN1bC0+dmNwYXQsIENVTFYpOworCisJLyogTFBGICovCisJcmVnX21vZGlmeShJU0lGX0xQRl9NQVNLIDw8IElTSUZfTFBGX1NISUZULAorCQkgIGN1bC0+ZW5fbHBmIDw8IElTSUZfTFBGX1NISUZULCBNT0RFU0VUKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfZ2Fpbl9vZmZzZXQodm9pZCkKK3sKKwlzdHJ1Y3QgaXNpZl9nYWluX29mZnNldHNfYWRqICpnYWluX29mZl9wID0KKwkJJmlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuZ2Fpbl9vZmZzZXQ7CisJdTMyIHZhbDsKKworCXZhbCA9ICghIWdhaW5fb2ZmX3AtPmdhaW5fc2RyYW1fZW4gPDwgR0FJTl9TRFJBTV9FTl9TSElGVCkgfAorCSAgICAgICghIWdhaW5fb2ZmX3AtPmdhaW5faXBpcGVfZW4gPDwgR0FJTl9JUElQRV9FTl9TSElGVCkgfAorCSAgICAgICghIWdhaW5fb2ZmX3AtPmdhaW5faDNhX2VuIDw8IEdBSU5fSDNBX0VOX1NISUZUKSB8CisJICAgICAgKCEhZ2Fpbl9vZmZfcC0+b2Zmc2V0X3NkcmFtX2VuIDw8IE9GU1RfU0RSQU1fRU5fU0hJRlQpIHwKKwkgICAgICAoISFnYWluX29mZl9wLT5vZmZzZXRfaXBpcGVfZW4gPDwgT0ZTVF9JUElQRV9FTl9TSElGVCkgfAorCSAgICAgICghIWdhaW5fb2ZmX3AtPm9mZnNldF9oM2FfZW4gPDwgT0ZTVF9IM0FfRU5fU0hJRlQpOworCisJcmVnX21vZGlmeShHQUlOX09GRlNFVF9FTl9NQVNLLCB2YWwsIENHQU1NQVdEKTsKKworCXZhbCA9IChnYWluX29mZl9wLT5nYWluLnJfeWUuaW50ZWdlciA8PCBHQUlOX0lOVEVHRVJfU0hJRlQpIHwKKwkgICAgICAgZ2Fpbl9vZmZfcC0+Z2Fpbi5yX3llLmRlY2ltYWw7CisJcmVndyh2YWwsIENSR0FJTik7CisKKwl2YWwgPSAoZ2Fpbl9vZmZfcC0+Z2Fpbi5ncl9jeS5pbnRlZ2VyIDw8IEdBSU5fSU5URUdFUl9TSElGVCkgfAorCSAgICAgICBnYWluX29mZl9wLT5nYWluLmdyX2N5LmRlY2ltYWw7CisJcmVndyh2YWwsIENHUkdBSU4pOworCisJdmFsID0gKGdhaW5fb2ZmX3AtPmdhaW4uZ2JfZy5pbnRlZ2VyIDw8IEdBSU5fSU5URUdFUl9TSElGVCkgfAorCSAgICAgICBnYWluX29mZl9wLT5nYWluLmdiX2cuZGVjaW1hbDsKKwlyZWd3KHZhbCwgQ0dCR0FJTik7CisKKwl2YWwgPSAoZ2Fpbl9vZmZfcC0+Z2Fpbi5iX21nLmludGVnZXIgPDwgR0FJTl9JTlRFR0VSX1NISUZUKSB8CisJICAgICAgIGdhaW5fb2ZmX3AtPmdhaW4uYl9tZy5kZWNpbWFsOworCXJlZ3codmFsLCBDQkdBSU4pOworCisJcmVndyhnYWluX29mZl9wLT5vZmZzZXQsIENPRlNUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfcmVzdG9yZV9kZWZhdWx0cyh2b2lkKQoreworCWVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc291cmNlID0gVlBTU19DQ0RDSU47CisKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIlxuc3RhcnRpbmcgaXNpZl9yZXN0b3JlX2RlZmF1bHRzLi4uIik7CisJaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcyA9IGlzaWZfY29uZmlnX2RlZmF1bHRzOworCS8qIEVuYWJsZSBjbG9jayB0byBJU0lGLCBJUElQRUlGIGFuZCBCTCAqLworCXZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfQ0NEQ19DTE9DSywgMSk7CisJdnBzc19lbmFibGVfY2xvY2soVlBTU19JUElQRUlGX0NMT0NLLCAxKTsKKwl2cHNzX2VuYWJsZV9jbG9jayhWUFNTX0JMX0NMT0NLLCAxKTsKKwkvKiBTZXQgZGVmYXVsdCBvZmZzZXQgYW5kIGdhaW4gKi8KKwlpc2lmX2NvbmZpZ19nYWluX29mZnNldCgpOworCXZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKHNvdXJjZSk7CisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcbkVuZCBvZiBpc2lmX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKK30KKworc3RhdGljIGludCBpc2lmX29wZW4oc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCWlzaWZfcmVzdG9yZV9kZWZhdWx0cygpOworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIHRoZSB3aW5kb3cgc2l6ZSB0byBiZSBjYXB0dXJlIGluIElTSUYgcmVnICovCitzdGF0aWMgdm9pZCBpc2lmX3NldHdpbihzdHJ1Y3QgdjRsMl9yZWN0ICppbWFnZV93aW4sCisJCQllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQsIGludCBwcGMpCit7CisJaW50IGhvcnpfc3RhcnQsIGhvcnpfbnJfcGl4ZWxzOworCWludCB2ZXJ0X3N0YXJ0LCB2ZXJ0X25yX2xpbmVzOworCWludCBtaWRfaW1nID0gMDsKKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5TdGFydGluZyBpc2lmX3NldHdpbi4uLiIpOworCS8qCisJICogcHBjIC0gcGVyIHBpeGVsIGNvdW50LiBpbmRpY2F0ZXMgaG93IG1hbnkgcGl4ZWxzIHBlciBjZWxsCisJICogb3V0cHV0IHRvIFNEUkFNLiBleGFtcGxlLCBmb3IgeWNiY3IsIGl0IGlzIG9uZSB5IGFuZCBvbmUgYywgc28gMi4KKwkgKiByYXcgY2FwdHVyZSB0aGlzIGlzIDEKKwkgKi8KKwlob3J6X3N0YXJ0ID0gaW1hZ2Vfd2luLT5sZWZ0IDw8IChwcGMgLSAxKTsKKwlob3J6X25yX3BpeGVscyA9ICgoaW1hZ2Vfd2luLT53aWR0aCkgPDwgKHBwYyAtIDEpKSAtIDE7CisKKwkvKiBXcml0aW5nIHRoZSBob3Jpem9udGFsIGluZm8gaW50byB0aGUgcmVnaXN0ZXJzICovCisJcmVndyhob3J6X3N0YXJ0ICYgU1RBUlRfUFhfSE9SX01BU0ssIFNQSCk7CisJcmVndyhob3J6X25yX3BpeGVscyAmIE5VTV9QWF9IT1JfTUFTSywgTE5IKTsKKwl2ZXJ0X3N0YXJ0ID0gaW1hZ2Vfd2luLT50b3A7CisKKwlpZiAoZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSB7CisJCXZlcnRfbnJfbGluZXMgPSAoaW1hZ2Vfd2luLT5oZWlnaHQgPj4gMSkgLSAxOworCQl2ZXJ0X3N0YXJ0ID4+PSAxOworCQkvKiBUbyBhY2NvdW50IGZvciBWRCBzaW5jZSBsaW5lIDAgZG9lc24ndCBoYXZlIGFueSBkYXRhICovCisJCXZlcnRfc3RhcnQgKz0gMTsKKwl9IGVsc2UgeworCQkvKiBUbyBhY2NvdW50IGZvciBWRCBzaW5jZSBsaW5lIDAgZG9lc24ndCBoYXZlIGFueSBkYXRhICovCisJCXZlcnRfc3RhcnQgKz0gMTsKKwkJdmVydF9ucl9saW5lcyA9IGltYWdlX3dpbi0+aGVpZ2h0IC0gMTsKKwkJLyogY29uZmlndXJlIFZESU5UMCBhbmQgVkRJTlQxICovCisJCW1pZF9pbWcgPSB2ZXJ0X3N0YXJ0ICsgKGltYWdlX3dpbi0+aGVpZ2h0IC8gMik7CisJCXJlZ3cobWlkX2ltZywgVkRJTlQxKTsKKwl9CisKKwlyZWd3KDAsIFZESU5UMCk7CisJcmVndyh2ZXJ0X3N0YXJ0ICYgU1RBUlRfVkVSX09ORV9NQVNLLCBTTFYwKTsKKwlyZWd3KHZlcnRfc3RhcnQgJiBTVEFSVF9WRVJfVFdPX01BU0ssIFNMVjEpOworCXJlZ3codmVydF9ucl9saW5lcyAmIE5VTV9MSU5FU19WRVIsIExOVik7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfY29uZmlnX2JjbGFtcChzdHJ1Y3QgaXNpZl9ibGFja19jbGFtcCAqYmMpCit7CisJdTMyIHZhbDsKKworCS8qCisJICogREMgT2Zmc2V0IGlzIGFsd2F5cyBhZGRlZCB0byBpbWFnZSBkYXRhIGlycmVzcGVjdGl2ZSBvZiBiYyBlbmFibGUKKwkgKiBzdGF0dXMKKwkgKi8KKwlyZWd3KGJjLT5kY19vZmZzZXQsIENMRENPRlNUKTsKKworCWlmIChiYy0+ZW4pIHsKKwkJdmFsID0gYmMtPmJjX21vZGVfY29sb3IgPDwgSVNJRl9CQ19NT0RFX0NPTE9SX1NISUZUOworCisJCS8qIEVuYWJsZSBCQyBhbmQgaG9yaXpvbnRhbCBjbGFtcCBjYWN1bGF0aW9uIHBhcmFtYXRlcnMgKi8KKwkJdmFsID0gdmFsIHwgMSB8IChiYy0+aG9yei5tb2RlIDw8IElTSUZfSE9SWl9CQ19NT0RFX1NISUZUKTsKKworCQlyZWd3KHZhbCwgQ0xBTVBDRkcpOworCisJCWlmIChiYy0+aG9yei5tb2RlICE9IElTSUZfSE9SWl9CQ19ESVNBQkxFKSB7CisJCQkvKgorCQkJICogV2luZG93IGNvdW50IGZvciBjYWxjdWxhdGlvbgorCQkJICogQmFzZSB3aW5kb3cgc2VsZWN0aW9uCisJCQkgKiBwaXhlbCBsaW1pdAorCQkJICogSG9yaXpvbnRhbCBzaXplIG9mIHdpbmRvdworCQkJICogdmVydGljYWwgc2l6ZSBvZiB0aGUgd2luZG93CisJCQkgKiBIb3Jpem9udGFsIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cKKwkJCSAqIFZlcnRpY2FsIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cKKwkJCSAqLworCQkJdmFsID0gYmMtPmhvcnoud2luX2NvdW50X2NhbGMgfAorCQkJICAgICAgKCghIWJjLT5ob3J6LmJhc2Vfd2luX3NlbF9jYWxjKSA8PAorCQkJCUlTSUZfSE9SWl9CQ19XSU5fU0VMX1NISUZUKSB8CisJCQkgICAgICAoKCEhYmMtPmhvcnouY2xhbXBfcGl4X2xpbWl0KSA8PAorCQkJCUlTSUZfSE9SWl9CQ19QSVhfTElNSVRfU0hJRlQpIHwKKwkJCSAgICAgIChiYy0+aG9yei53aW5faF9zel9jYWxjIDw8CisJCQkJSVNJRl9IT1JaX0JDX1dJTl9IX1NJWkVfU0hJRlQpIHwKKwkJCSAgICAgIChiYy0+aG9yei53aW5fdl9zel9jYWxjIDw8CisJCQkJSVNJRl9IT1JaX0JDX1dJTl9WX1NJWkVfU0hJRlQpOworCQkJcmVndyh2YWwsIENMSFdJTjApOworCisJCQlyZWd3KGJjLT5ob3J6Lndpbl9zdGFydF9oX2NhbGMsIENMSFdJTjEpOworCQkJcmVndyhiYy0+aG9yei53aW5fc3RhcnRfdl9jYWxjLCBDTEhXSU4yKTsKKwkJfQorCisJCS8qIHZlcnRpY2FsIGNsYW1wIGNhY3VsYXRpb24gcGFyYW1hdGVycyAqLworCisJCS8qIFJlc2V0IGNsYW1wIHZhbHVlIHNlbCBmb3IgcHJldmlvdXMgbGluZSAqLworCQl2YWwgfD0KKwkJKGJjLT52ZXJ0LnJlc2V0X3ZhbF9zZWwgPDwgSVNJRl9WRVJUX0JDX1JTVF9WQUxfU0VMX1NISUZUKSB8CisJCShiYy0+dmVydC5saW5lX2F2ZV9jb2VmIDw8IElTSUZfVkVSVF9CQ19MSU5FX0FWRV9DT0VGX1NISUZUKTsKKwkJcmVndyh2YWwsIENMVldJTjApOworCisJCS8qIE9wdGljYWwgQmxhY2sgaG9yaXpvbnRhbCBzdGFydCBwb3NpdGlvbiAqLworCQlyZWd3KGJjLT52ZXJ0Lm9iX3N0YXJ0X2gsIENMVldJTjEpOworCQkvKiBPcHRpY2FsIEJsYWNrIHZlcnRpY2FsIHN0YXJ0IHBvc2l0aW9uICovCisJCXJlZ3coYmMtPnZlcnQub2Jfc3RhcnRfdiwgQ0xWV0lOMik7CisJCS8qIE9wdGljYWwgQmxhY2sgdmVydGljYWwgc2l6ZSBmb3IgY2FsY3VsYXRpb24gKi8KKwkJcmVndyhiYy0+dmVydC5vYl92X3N6X2NhbGMsIENMVldJTjMpOworCQkvKiBWZXJ0aWNhbCBzdGFydCBwb3NpdGlvbiBmb3IgQkMgc3VidHJhY3Rpb24gKi8KKwkJcmVndyhiYy0+dmVydF9zdGFydF9zdWIsIENMU1YpOworCX0KK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfbGluZWFyaXphdGlvbihzdHJ1Y3QgaXNpZl9saW5lYXJpemUgKmxpbmVhcml6ZSkKK3sKKwl1MzIgdmFsLCBpOworCisJaWYgKCFsaW5lYXJpemUtPmVuKSB7CisJCXJlZ3coMCwgTElOQ0ZHMCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzaGlmdCB2YWx1ZSBmb3IgY29ycmVjdGlvbiAmIGVuYWJsZSBsaW5lYXJpemF0aW9uIChzZXQgbHNiKSAqLworCXZhbCA9IChsaW5lYXJpemUtPmNvcnJfc2hmdCA8PCBJU0lGX0xJTl9DT1JSU0ZUX1NISUZUKSB8IDE7CisJcmVndyh2YWwsIExJTkNGRzApOworCisJLyogU2NhbGUgZmFjdG9yICovCisJdmFsID0gKCghIWxpbmVhcml6ZS0+c2NhbGVfZmFjdC5pbnRlZ2VyKSA8PAorCSAgICAgICBJU0lGX0xJTl9TQ0FMRV9GQUNUX0lOVEVHX1NISUZUKSB8CisJICAgICAgIGxpbmVhcml6ZS0+c2NhbGVfZmFjdC5kZWNpbWFsOworCXJlZ3codmFsLCBMSU5DRkcxKTsKKworCWZvciAoaSA9IDA7IGkgPCBJU0lGX0xJTkVBUl9UQUJfU0laRTsgaSsrKSB7CisJCWlmIChpICUgMikKKwkJCXJlZ3dfbGluX3RibChsaW5lYXJpemUtPnRhYmxlW2ldLCAoKGkgPj4gMSkgPDwgMiksIDEpOworCQllbHNlCisJCQlyZWd3X2xpbl90YmwobGluZWFyaXplLT50YWJsZVtpXSwgKChpID4+IDEpIDw8IDIpLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9jb25maWdfZGZjKHN0cnVjdCBpc2lmX2RmYyAqdmRmYykKK3sKKwkvKiBpbml0aWFsaXplIHJldHJpZXMgdG8gbG9vcCBmb3IgbWF4IH4gMjUwIHVzZWMgKi8KKwl1MzIgdmFsLCBjb3VudCwgcmV0cmllcyA9IGxvb3BzX3Blcl9qaWZmeSAvICg0MDAwL0haKTsKKwlpbnQgaTsKKworCWlmICghdmRmYy0+ZW4pCisJCXJldHVybiAwOworCisJLyogQ29ycmVjdGlvbiBtb2RlICovCisJdmFsID0gKHZkZmMtPmNvcnJfbW9kZSA8PCBJU0lGX1ZERkNfQ09SUl9NT0RfU0hJRlQpOworCisJLyogQ29ycmVjdCB3aG9sZSBsaW5lIG9yIHBhcnRpYWwgKi8KKwlpZiAodmRmYy0+Y29ycl93aG9sZV9saW5lKQorCQl2YWwgfD0gMSA8PCBJU0lGX1ZERkNfQ09SUl9XSE9MRV9MTl9TSElGVDsKKworCS8qIGxldmVsIHNoaWZ0IHZhbHVlICovCisJdmFsIHw9IHZkZmMtPmRlZl9sZXZlbF9zaGlmdCA8PCBJU0lGX1ZERkNfTEVWRUxfU0hGVF9TSElGVDsKKworCXJlZ3codmFsLCBERkNDVEwpOworCisJLyogRGVmZWN0IHNhdHVyYXRpb24gbGV2ZWwgKi8KKwlyZWd3KHZkZmMtPmRlZl9zYXRfbGV2ZWwsIFZERlNBVExWKTsKKworCXJlZ3codmRmYy0+dGFibGVbMF0ucG9zX3ZlcnQsIERGQ01FTTApOworCXJlZ3codmRmYy0+dGFibGVbMF0ucG9zX2hvcnosIERGQ01FTTEpOworCWlmICh2ZGZjLT5jb3JyX21vZGUgPT0gSVNJRl9WREZDX05PUk1BTCB8fAorCSAgICB2ZGZjLT5jb3JyX21vZGUgPT0gSVNJRl9WREZDX0hPUlpfSU5URVJQT0xfSUZfU0FUKSB7CisJCXJlZ3codmRmYy0+dGFibGVbMF0ubGV2ZWxfYXRfcG9zLCBERkNNRU0yKTsKKwkJcmVndyh2ZGZjLT50YWJsZVswXS5sZXZlbF91cF9waXhlbHMsIERGQ01FTTMpOworCQlyZWd3KHZkZmMtPnRhYmxlWzBdLmxldmVsX2xvd19waXhlbHMsIERGQ01FTTQpOworCX0KKworCS8qIHNldCBERkNNQVJTVCBhbmQgc2V0IERGQ01XUiAqLworCXZhbCA9IHJlZ3IoREZDTUVNQ1RMKSB8ICgxIDw8IElTSUZfREZDTUVNQ1RMX0RGQ01BUlNUX1NISUZUKSB8IDE7CisJcmVndyh2YWwsIERGQ01FTUNUTCk7CisKKwljb3VudCA9IHJldHJpZXM7CisJd2hpbGUgKGNvdW50ICYmIChyZWdyKERGQ01FTUNUTCkgJiAweDEpKQorCQljb3VudC0tOworCisJaWYgKCFjb3VudCkgeworCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgImRlZmVjdCB0YWJsZSB3cml0ZSB0aW1lb3V0ICEhIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAxOyBpIDwgdmRmYy0+bnVtX3ZkZWZlY3RzOyBpKyspIHsKKwkJcmVndyh2ZGZjLT50YWJsZVtpXS5wb3NfdmVydCwgREZDTUVNMCk7CisJCXJlZ3codmRmYy0+dGFibGVbaV0ucG9zX2hvcnosIERGQ01FTTEpOworCQlpZiAodmRmYy0+Y29ycl9tb2RlID09IElTSUZfVkRGQ19OT1JNQUwgfHwKKwkJICAgIHZkZmMtPmNvcnJfbW9kZSA9PSBJU0lGX1ZERkNfSE9SWl9JTlRFUlBPTF9JRl9TQVQpIHsKKwkJCXJlZ3codmRmYy0+dGFibGVbaV0ubGV2ZWxfYXRfcG9zLCBERkNNRU0yKTsKKwkJCXJlZ3codmRmYy0+dGFibGVbaV0ubGV2ZWxfdXBfcGl4ZWxzLCBERkNNRU0zKTsKKwkJCXJlZ3codmRmYy0+dGFibGVbaV0ubGV2ZWxfbG93X3BpeGVscywgREZDTUVNNCk7CisJCX0KKwkJdmFsID0gcmVncihERkNNRU1DVEwpOworCQkvKiBjbGVhciBERkNNQVJTVCBhbmQgc2V0IERGQ01XUiAqLworCQl2YWwgJj0gfkJJVChJU0lGX0RGQ01FTUNUTF9ERkNNQVJTVF9TSElGVCk7CisJCXZhbCB8PSAxOworCQlyZWd3KHZhbCwgREZDTUVNQ1RMKTsKKworCQljb3VudCA9IHJldHJpZXM7CisJCXdoaWxlIChjb3VudCAmJiAocmVncihERkNNRU1DVEwpICYgMHgxKSkKKwkJCWNvdW50LS07CisKKwkJaWYgKCFjb3VudCkgeworCQkJZGV2X2Vycihpc2lmX2NmZy5kZXYsCisJCQkJImRlZmVjdCB0YWJsZSB3cml0ZSB0aW1lb3V0ICEhIVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJaWYgKHZkZmMtPm51bV92ZGVmZWN0cyA8IElTSUZfVkRGQ19UQUJMRV9TSVpFKSB7CisJCS8qIEV4dHJhIGN5Y2xlIG5lZWRlZCAqLworCQlyZWd3KDAsIERGQ01FTTApOworCQlyZWd3KDB4MUZGRiwgREZDTUVNMSk7CisJCXJlZ3coMSwgREZDTUVNQ1RMKTsKKwl9CisKKwkvKiBlbmFibGUgVkRGQyAqLworCXJlZ19tb2RpZnkoKDEgPDwgSVNJRl9WREZDX0VOX1NISUZUKSwgKDEgPDwgSVNJRl9WREZDX0VOX1NISUZUKSwKKwkJICAgREZDQ1RMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfY3NjKHN0cnVjdCBpc2lmX2RmX2NzYyAqZGZfY3NjKQoreworCXUzMiB2YWwxID0gMCwgdmFsMiA9IDAsIGk7CisKKwlpZiAoIWRmX2NzYy0+Y3NjLmVuKSB7CisJCXJlZ3coMCwgQ1NDQ1RMKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgSVNJRl9DU0NfTlVNX0NPRUZGOyBpKyspIHsKKwkJaWYgKChpICUgMikgPT0gMCkgeworCQkJLyogQ1NDTSAtIExTQiAqLworCQkJdmFsMSA9IChkZl9jc2MtPmNzYy5jb2VmZltpXS5pbnRlZ2VyIDw8CisJCQkJSVNJRl9DU0NfQ09FRl9JTlRFR19TSElGVCkgfAorCQkJCWRmX2NzYy0+Y3NjLmNvZWZmW2ldLmRlY2ltYWw7CisJCX0gZWxzZSB7CisKKwkJCS8qIENTQ00gLSBNU0IgKi8KKwkJCXZhbDIgPSAoZGZfY3NjLT5jc2MuY29lZmZbaV0uaW50ZWdlciA8PAorCQkJCUlTSUZfQ1NDX0NPRUZfSU5URUdfU0hJRlQpIHwKKwkJCQlkZl9jc2MtPmNzYy5jb2VmZltpXS5kZWNpbWFsOworCQkJdmFsMiA8PD0gSVNJRl9DU0NNX01TQl9TSElGVDsKKwkJCXZhbDIgfD0gdmFsMTsKKwkJCXJlZ3codmFsMiwgKENTQ00wICsgKChpIC0gMSkgPDwgMSkpKTsKKwkJfQorCX0KKworCS8qIHByb2dyYW0gdGhlIGFjdGl2ZSBhcmVhICovCisJcmVndyhkZl9jc2MtPnN0YXJ0X3BpeCwgRk1UU1BIKTsKKwkvKgorCSAqIG9uZSBleHRyYSBwaXhlbCBhcyByZXF1aXJlZCBmb3IgQ1NDLiBBY3R1YWxseSBudW1iZXIgb2YKKwkgKiBwaXhlbCAtIDEgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgaW4gdGhpcyByZWdpc3Rlci4gU28gd2UKKwkgKiBuZWVkIHRvIHN1YnRyYWN0IDEgYmVmb3JlIHdyaXRpbmcgdG8gRk1UU1BILCBidXQgd2Ugd2lsbAorCSAqIG5vdCBkbyB0aGlzIHNpbmNlIGNzYyByZXF1aXJlcyBvbmUgZXh0cmEgcGl4ZWwKKwkgKi8KKwlyZWd3KGRmX2NzYy0+bnVtX3BpeGVscywgRk1UTE5IKTsKKwlyZWd3KGRmX2NzYy0+c3RhcnRfbGluZSwgRk1UU0xWKTsKKwkvKgorCSAqIG9uZSBleHRyYSBsaW5lIGFzIHJlcXVpcmVkIGZvciBDU0MuIFNlZSByZWFzb24gZG9jdW1lbnRlZCBmb3IKKwkgKiBudW1fcGl4ZWxzCisJICovCisJcmVndyhkZl9jc2MtPm51bV9saW5lcywgRk1UTE5WKTsKKworCS8qIEVuYWJsZSBDU0MgKi8KKwlyZWd3KDEsIENTQ0NUTCk7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9jb25maWdfcmF3KHZvaWQpCit7CisJc3RydWN0IGlzaWZfcGFyYW1zX3JhdyAqcGFyYW1zID0gJmlzaWZfY2ZnLmJheWVyOworCXN0cnVjdCBpc2lmX2NvbmZpZ19wYXJhbXNfcmF3ICptb2R1bGVfcGFyYW1zID0KKwkJJmlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CisJc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSBmcmFtZV9zaXplOworCXN0cnVjdCB2cHNzX3N5bmNfcG9sIHN5bmM7CisJdTMyIHZhbDsKKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5TdGFydGluZyBpc2lmX2NvbmZpZ19yYXcuLlxuIik7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBDQ0RDRkcgcmVnaXN0ZXI6LQorCSAqIFNldCBDQ0QgTm90IHRvIHN3YXAgaW5wdXQgc2luY2UgaW5wdXQgaXMgUkFXIGRhdGEKKwkgKiBTZXQgRklEIGRldGVjdGlvbiBmdW5jdGlvbiB0byBMYXRjaCBhdCBWLVN5bmMKKwkgKiBTZXQgV0VOTE9HIC0gaXNpZiB2YWxpZCBhcmVhCisJICogU2V0IFRSR1NFTAorCSAqIFNldCBFWFRSRworCSAqIFBhY2tlZCB0byA4IG9yIDE2IGJpdHMKKwkgKi8KKworCXZhbCA9IElTSUZfWUNJTlNXUF9SQVcgfCBJU0lGX0NDRENGR19GSURNRF9MQVRDSF9WU1lOQyB8CisJCUlTSUZfQ0NEQ0ZHX1dFTkxPR19BTkQgfCBJU0lGX0NDRENGR19UUkdTRUxfV0VOIHwKKwkJSVNJRl9DQ0RDRkdfRVhUUkdfRElTQUJMRSB8IGlzaWZfY2ZnLmRhdGFfcGFjazsKKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweCV4IHRvIC4uLkNDRENGRyBcbiIsIHZhbCk7CisJcmVndyh2YWwsIENDRENGRyk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgdmVydGljYWwgc3luYyBwb2xhcml0eShNT0RFU0VULlZEUE9MKQorCSAqIENvbmZpZ3VyZSB0aGUgaG9yaXpvbnRhbCBzeW5jIHBvbGFyaXR5IChNT0RFU0VULkhEUE9MKQorCSAqIENvbmZpZ3VyZSBmcmFtZSBpZCBwb2xhcml0eSAoTU9ERVNFVC5GTERQT0wpCisJICogQ29uZmlndXJlIGRhdGEgcG9sYXJpdHkKKwkgKiBDb25maWd1cmUgRXh0ZXJuYWwgV0VOIFNlbGVjdGlvbgorCSAqIENvbmZpZ3VyZSBmcmFtZSBmb3JtYXQocHJvZ3Jlc3NpdmUgb3IgaW50ZXJsYWNlKQorCSAqIENvbmZpZ3VyZSBwaXhlbCBmb3JtYXQgKElucHV0IG1vZGUpCisJICogQ29uZmlndXJlIHRoZSBkYXRhIHNoaWZ0CisJICovCisKKwl2YWwgPSBJU0lGX1ZESERPVVRfSU5QVVQgfCAocGFyYW1zLT52ZF9wb2wgPDwgSVNJRl9WRF9QT0xfU0hJRlQpIHwKKwkJKHBhcmFtcy0+aGRfcG9sIDw8IElTSUZfSERfUE9MX1NISUZUKSB8CisJCShwYXJhbXMtPmZpZF9wb2wgPDwgSVNJRl9GSURfUE9MX1NISUZUKSB8CisJCShJU0lGX0RBVEFQT0xfTk9STUFMIDw8IElTSUZfREFUQVBPTF9TSElGVCkgfAorCQkoSVNJRl9FWFdFTl9ESVNBQkxFIDw8IElTSUZfRVhXRU5fU0hJRlQpIHwKKwkJKHBhcmFtcy0+ZnJtX2ZtdCA8PCBJU0lGX0ZSTV9GTVRfU0hJRlQpIHwKKwkJKHBhcmFtcy0+cGl4X2ZtdCA8PCBJU0lGX0lOUFVUX1NISUZUKSB8CisJCShwYXJhbXMtPmNvbmZpZ19wYXJhbXMuZGF0YV9zaGlmdCA8PCBJU0lGX0RBVEFTRlRfU0hJRlQpOworCisJcmVndyh2YWwsIE1PREVTRVQpOworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweCV4IHRvIE1PREVTRVQuLi5cbiIsIHZhbCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBHQU1NQVdEIHJlZ2lzdGVyCisJICogQ0ZBIHBhdHRlcm4gc2V0dGluZworCSAqLworCXZhbCA9IHBhcmFtcy0+Y2ZhX3BhdCA8PCBJU0lGX0dBTU1BV0RfQ0ZBX1NISUZUOworCisJLyogR2FtbWEgbXNiICovCisJaWYgKG1vZHVsZV9wYXJhbXMtPmNvbXByZXNzLmFsZyA9PSBJU0lGX0FMQVcpCisJCXZhbCB8PSBJU0lGX0FMQVdfRU5BQkxFOworCisJdmFsIHw9IChwYXJhbXMtPmRhdGFfbXNiIDw8IElTSUZfQUxBV19HQU1BX1dEX1NISUZUKTsKKwlyZWd3KHZhbCwgQ0dBTU1BV0QpOworCisJLyogQ29uZmlndXJlIERQQ00gY29tcHJlc3Npb24gc2V0dGluZ3MgKi8KKwlpZiAobW9kdWxlX3BhcmFtcy0+Y29tcHJlc3MuYWxnID09IElTSUZfRFBDTSkgeworCQl2YWwgPSAgQklUKElTSUZfRFBDTV9FTl9TSElGVCkgfAorCQkgICAgICAgKG1vZHVsZV9wYXJhbXMtPmNvbXByZXNzLnByZWQgPDwKKwkJICAgICAgIElTSUZfRFBDTV9QUkVESUNUT1JfU0hJRlQpOworCX0KKworCXJlZ3codmFsLCBNSVNDKTsKKworCS8qIENvbmZpZ3VyZSBHYWluICYgT2Zmc2V0ICovCisJaXNpZl9jb25maWdfZ2Fpbl9vZmZzZXQoKTsKKworCS8qIENvbmZpZ3VyZSBDb2xvciBwYXR0ZXJuICovCisJdmFsID0gKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMC5vbG9wKSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMC5vbGVwIDw8IDIpIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQwLmVsb3AgPDwgNCkgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDAuZWxlcCA8PCA2KSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMS5vbG9wIDw8IDgpIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQxLm9sZXAgPDwgMTApIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQxLmVsb3AgPDwgMTIpIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQxLmVsZXAgPDwgMTQpOworCXJlZ3codmFsLCBDQ09MUCk7CisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nICV4IHRvIENDT0xQIC4uLlxuIiwgdmFsKTsKKworCS8qIENvbmZpZ3VyZSBIU0laRSByZWdpc3RlciAgKi8KKwl2YWwgPSAoISFwYXJhbXMtPmhvcnpfZmxpcF9lbikgPDwgSVNJRl9IU0laRV9GTElQX1NISUZUOworCisJLyogY2FsY3VsYXRlIGxpbmUgb2Zmc2V0IGluIDMyIGJ5dGVzIGJhc2VkIG9uIHBhY2sgdmFsdWUgKi8KKwlpZiAoaXNpZl9jZmcuZGF0YV9wYWNrID09IElTSUZfUEFDS184QklUKQorCQl2YWwgfD0gKChwYXJhbXMtPndpbi53aWR0aCArIDMxKSA+PiA1KTsKKwllbHNlIGlmIChpc2lmX2NmZy5kYXRhX3BhY2sgPT0gSVNJRl9QQUNLXzEyQklUKQorCQl2YWwgfD0gKCgocGFyYW1zLT53aW4ud2lkdGggKworCQkgICAgICAgKHBhcmFtcy0+d2luLndpZHRoID4+IDIpKSArIDMxKSA+PiA1KTsKKwllbHNlCisJCXZhbCB8PSAoKChwYXJhbXMtPndpbi53aWR0aCAqIDIpICsgMzEpID4+IDUpOworCXJlZ3codmFsLCBIU0laRSk7CisKKwkvKiBDb25maWd1cmUgU0RPRlNUIHJlZ2lzdGVyICAqLworCWlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgeworCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW4pIHsKKwkJCS8qIEZvciBpbnRlcmxhY2UgaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KDB4NEI2RCwgU0RPRlNUKTsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweDRCNkQgdG8gU0RPRlNULi4uXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEZvciBpbnRlcmxhY2Ugbm9uIGludmVyc2UgbW9kZSAqLworCQkJcmVndygweDBCNkQsIFNET0ZTVCk7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgMHgwQjZEIHRvIFNET0ZTVC4uLlxuIik7CisJCX0KKwl9IGVsc2UgaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkgeworCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW4pIHsKKwkJCS8qIEZvciBwcm9ncmVzc2l2ZSBpbnZlcnNlIG1vZGUgKi8KKwkJCXJlZ3coMHg0MDAwLCBTRE9GU1QpOworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4NDAwMCB0byBTRE9GU1QuLi5cbiIpOworCQl9IGVsc2UgeworCQkJLyogRm9yIHByb2dyZXNzaXZlIG5vbiBpbnZlcnNlIG1vZGUgKi8KKwkJCXJlZ3coMHgwMDAwLCBTRE9GU1QpOworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4MDAwMCB0byBTRE9GU1QuLi5cbiIpOworCQl9CisJfQorCisJLyogQ29uZmlndXJlIHZpZGVvIHdpbmRvdyAqLworCWlzaWZfc2V0d2luKCZwYXJhbXMtPndpbiwgcGFyYW1zLT5mcm1fZm10LCAxKTsKKworCS8qIENvbmZpZ3VyZSBCbGFjayBDbGFtcCAqLworCWlzaWZfY29uZmlnX2JjbGFtcCgmbW9kdWxlX3BhcmFtcy0+YmNsYW1wKTsKKworCS8qIENvbmZpZ3VyZSBWZXJ0aWNhbCBEZWZlY3Rpb24gUGl4ZWwgQ29ycmVjdGlvbiAqLworCWlmIChpc2lmX2NvbmZpZ19kZmMoJm1vZHVsZV9wYXJhbXMtPmRmYykgPCAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghbW9kdWxlX3BhcmFtcy0+ZGZfY3NjLmRmX29yX2NzYykKKwkJLyogQ29uZmlndXJlIENvbG9yIFNwYWNlIENvbnZlcnNpb24gKi8KKwkJaXNpZl9jb25maWdfY3NjKCZtb2R1bGVfcGFyYW1zLT5kZl9jc2MpOworCisJaXNpZl9jb25maWdfbGluZWFyaXphdGlvbigmbW9kdWxlX3BhcmFtcy0+bGluZWFyaXplKTsKKworCS8qIENvbmZpZ3VyZSBDdWxsaW5nICovCisJaXNpZl9jb25maWdfY3VsbGluZygmbW9kdWxlX3BhcmFtcy0+Y3VsbGluZyk7CisKKwkvKiBDb25maWd1cmUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgb2Zmc2V0cyhERkMsTFNDLEdhaW4pICovCisJcmVndyhtb2R1bGVfcGFyYW1zLT5ob3J6X29mZnNldCwgREFUQUhPRlNUKTsKKwlyZWd3KG1vZHVsZV9wYXJhbXMtPnZlcnRfb2Zmc2V0LCBEQVRBVk9GU1QpOworCisJLyogU2V0dXAgdGVzdCBwYXR0ZXJuIGlmIGVuYWJsZWQgKi8KKwlpZiAocGFyYW1zLT5jb25maWdfcGFyYW1zLnRlc3RfcGF0X2dlbikgeworCQkvKiBVc2UgdGhlIEhEL1ZEIHBvbCBzZXR0aW5ncyBmcm9tIHVzZXIgKi8KKwkJc3luYy5jY2RwZ19oZHBvbCA9IHBhcmFtcy0+aGRfcG9sOworCQlzeW5jLmNjZHBnX3ZkcG9sID0gcGFyYW1zLT52ZF9wb2w7CisJCWRtMzY1X3Zwc3Nfc2V0X3N5bmNfcG9sKHN5bmMpOworCQlmcmFtZV9zaXplLmhscGZyID0gaXNpZl9jZmcuYmF5ZXIud2luLndpZHRoOworCQlmcmFtZV9zaXplLnBwbGVuID0gaXNpZl9jZmcuYmF5ZXIud2luLmhlaWdodDsKKwkJZG0zNjVfdnBzc19zZXRfcGdfZnJhbWVfc2l6ZShmcmFtZV9zaXplKTsKKwkJdnBzc19zZWxlY3RfY2NkY19zb3VyY2UoVlBTU19QR0xQQkspOworCX0KKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5FbmQgb2YgaXNpZl9jb25maWdfeWNiY3IuLi5cbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzaWZfc2V0X2J1ZnR5cGUoZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGUpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWlzaWZfY2ZnLmJheWVyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJZWxzZQorCQlpc2lmX2NmZy55Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOworCisJcmV0dXJuIDA7CisKK30KK3N0YXRpYyBlbnVtIGNjZGNfYnVmdHlwZSBpc2lmX2dldF9idWZ0eXBlKHZvaWQpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBpc2lmX2NmZy5iYXllci5idWZfdHlwZTsKKworCXJldHVybiBpc2lmX2NmZy55Y2Jjci5idWZfdHlwZTsKK30KKworc3RhdGljIGludCBpc2lmX2VudW1fcGl4KHUzMiAqcGl4LCBpbnQgaSkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlmIChpIDwgQVJSQVlfU0laRShpc2lmX3Jhd19iYXllcl9waXhfZm9ybWF0cykpIHsKKwkJCSpwaXggPSBpc2lmX3Jhd19iYXllcl9waXhfZm9ybWF0c1tpXTsKKwkJCXJldCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaSA8IEFSUkFZX1NJWkUoaXNpZl9yYXdfeXV2X3BpeF9mb3JtYXRzKSkgeworCQkJKnBpeCA9IGlzaWZfcmF3X3l1dl9waXhfZm9ybWF0c1tpXTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlzaWZfc2V0X3BpeGVsX2Zvcm1hdCh1bnNpZ25lZCBpbnQgcGl4Zm10KQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkgeworCQkJaWYgKChpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmNvbXByZXNzLmFsZyAhPQorCQkJICAgICBJU0lGX0FMQVcpICYmCisJCQkgICAgKGlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuY29tcHJlc3MuYWxnICE9CisJCQkgICAgIElTSUZfRFBDTSkpIHsKKwkJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwKKwkJCQkJIkVpdGhlciBjb25maWd1cmUgQS1MYXcgb3IgRFBDTVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpc2lmX2NmZy5kYXRhX3BhY2sgPSBJU0lGX1BBQ0tfOEJJVDsKKwkJfSBlbHNlIGlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpIHsKKwkJCWlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuY29tcHJlc3MuYWxnID0KKwkJCQkJSVNJRl9OT19DT01QUkVTU0lPTjsKKwkJCWlzaWZfY2ZnLmRhdGFfcGFjayA9IElTSUZfUEFDS18xNkJJVDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaXNpZl9jZmcuYmF5ZXIucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwl9IGVsc2UgeworCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQorCQkJaXNpZl9jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CisJCWVsc2UgaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfVVlWWSkKKwkJCWlzaWZfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaXNpZl9jZmcuZGF0YV9wYWNrID0gSVNJRl9QQUNLXzhCSVQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGlzaWZfZ2V0X3BpeGVsX2Zvcm1hdCh2b2lkKQoreworCXUzMiBwaXhmbXQ7CisKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJaWYgKGlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuY29tcHJlc3MuYWxnID09IElTSUZfQUxBVyB8fAorCQkgICAgaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5jb21wcmVzcy5hbGcgPT0gSVNJRl9EUENNKQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKKwkJZWxzZQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSMTY7CisJZWxzZSB7CisJCWlmIChpc2lmX2NmZy55Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJZWxzZQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJfQorCXJldHVybiBwaXhmbXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpc2lmX2NmZy5iYXllci53aW4udG9wID0gd2luLT50b3A7CisJCWlzaWZfY2ZnLmJheWVyLndpbi5sZWZ0ID0gd2luLT5sZWZ0OworCQlpc2lmX2NmZy5iYXllci53aW4ud2lkdGggPSB3aW4tPndpZHRoOworCQlpc2lmX2NmZy5iYXllci53aW4uaGVpZ2h0ID0gd2luLT5oZWlnaHQ7CisJfSBlbHNlIHsKKwkJaXNpZl9jZmcueWNiY3Iud2luLnRvcCA9IHdpbi0+dG9wOworCQlpc2lmX2NmZy55Y2Jjci53aW4ubGVmdCA9IHdpbi0+bGVmdDsKKwkJaXNpZl9jZmcueWNiY3Iud2luLndpZHRoID0gd2luLT53aWR0aDsKKwkJaXNpZl9jZmcueWNiY3Iud2luLmhlaWdodCA9IHdpbi0+aGVpZ2h0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXNpZl9nZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJKndpbiA9IGlzaWZfY2ZnLmJheWVyLndpbjsKKwllbHNlCisJCSp3aW4gPSBpc2lmX2NmZy55Y2Jjci53aW47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXNpZl9nZXRfbGluZV9sZW5ndGgodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJaWYgKGlzaWZfY2ZnLmRhdGFfcGFjayA9PSBJU0lGX1BBQ0tfOEJJVCkKKwkJCWxlbiA9ICgoaXNpZl9jZmcuYmF5ZXIud2luLndpZHRoKSk7CisJCWVsc2UgaWYgKGlzaWZfY2ZnLmRhdGFfcGFjayA9PSBJU0lGX1BBQ0tfMTJCSVQpCisJCQlsZW4gPSAoKChpc2lmX2NmZy5iYXllci53aW4ud2lkdGggKiAyKSArCisJCQkJIChpc2lmX2NmZy5iYXllci53aW4ud2lkdGggPj4gMikpKTsKKwkJZWxzZQorCQkJbGVuID0gKCgoaXNpZl9jZmcuYmF5ZXIud2luLndpZHRoICogMikpKTsKKwl9IGVsc2UKKwkJbGVuID0gKCgoaXNpZl9jZmcueWNiY3Iud2luLndpZHRoICogMikpKTsKKwlyZXR1cm4gQUxJR04obGVuLCAzMik7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfZnJhbWVfZm9ybWF0KGVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCkKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJaXNpZl9jZmcuYmF5ZXIuZnJtX2ZtdCA9IGZybV9mbXQ7CisJZWxzZQorCQlpc2lmX2NmZy55Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBlbnVtIGNjZGNfZnJtZm10IGlzaWZfZ2V0X2ZyYW1lX2Zvcm1hdCh2b2lkKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gaXNpZl9jZmcuYmF5ZXIuZnJtX2ZtdDsKKwlyZXR1cm4gaXNpZl9jZmcueWNiY3IuZnJtX2ZtdDsKK30KKworc3RhdGljIGludCBpc2lmX2dldGZpZCh2b2lkKQoreworCXJldHVybiAocmVncihNT0RFU0VUKSA+PiAxNSkgJiAweDE7Cit9CisKKy8qIG1pc2Mgb3BlcmF0aW9ucyAqLworc3RhdGljIHZvaWQgaXNpZl9zZXRmYmFkZHIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJlZ3coKGFkZHIgPj4gMjEpICYgMHgwN2ZmLCBDQURVKTsKKwlyZWd3KChhZGRyID4+IDUpICYgMHgwZmZmZiwgQ0FETCk7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfaHdfaWZfcGFyYW1zKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbXMpCit7CisJaXNpZl9jZmcuaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKKworCXN3aXRjaCAocGFyYW1zLT5pZl90eXBlKSB7CisJY2FzZSBWUEZFX0JUNjU2OgorCWNhc2UgVlBGRV9CVDY1Nl8xMEJJVDoKKwljYXNlIFZQRkVfWUNCQ1JfU1lOQ184OgorCQlpc2lmX2NmZy55Y2Jjci5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVDsKKwkJaXNpZl9jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCWJyZWFrOworCWNhc2UgVlBGRV9CVDExMjA6CisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfMTY6CisJCWlzaWZfY2ZnLnljYmNyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl8xNkJJVDsKKwkJaXNpZl9jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCWJyZWFrOworCWNhc2UgVlBGRV9SQVdfQkFZRVI6CisJCWlzaWZfY2ZnLmJheWVyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBpbnRlcmZhY2UgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIElTSUYgZm9yIFlDYkNyIHBhcmFtZXRlcnMuICovCitzdGF0aWMgaW50IGlzaWZfY29uZmlnX3ljYmNyKHZvaWQpCit7CisJc3RydWN0IGlzaWZfeWNiY3JfY29uZmlnICpwYXJhbXMgPSAmaXNpZl9jZmcueWNiY3I7CisJc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSBmcmFtZV9zaXplOworCXUzMiBtb2Rlc2V0ID0gMCwgY2NkY2ZnID0gMDsKKwlzdHJ1Y3QgdnBzc19zeW5jX3BvbCBzeW5jOworCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcblN0YXJ0aW5nIGlzaWZfY29uZmlnX3ljYmNyLi4uIik7CisKKwkvKiBjb25maWd1cmUgcGl4ZWwgZm9ybWF0IG9yIGlucHV0IG1vZGUgKi8KKwltb2Rlc2V0ID0gbW9kZXNldCB8IChwYXJhbXMtPnBpeF9mbXQgPDwgSVNJRl9JTlBVVF9TSElGVCkgfAorCQkgIChwYXJhbXMtPmZybV9mbXQgPDwgSVNJRl9GUk1fRk1UX1NISUZUKSB8CisJCSAgKHBhcmFtcy0+ZmlkX3BvbCA8PCBJU0lGX0ZJRF9QT0xfU0hJRlQpIHwKKwkJICAocGFyYW1zLT5oZF9wb2wgPDwgSVNJRl9IRF9QT0xfU0hJRlQpIHwKKwkJICAocGFyYW1zLT52ZF9wb2wgPDwgSVNJRl9WRF9QT0xfU0hJRlQpOworCisJLyogcGFjayB0aGUgZGF0YSB0byA4LWJpdCBJU0lGQ0ZHICovCisJc3dpdGNoIChpc2lmX2NmZy5pZl90eXBlKSB7CisJY2FzZSBWUEZFX0JUNjU2OgorCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzhCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW1vZGVzZXQgfD0gKFZQRkVfUElOUE9MX05FR0FUSVZFIDw8IElTSUZfVkRfUE9MX1NISUZUKTsKKwkJcmVndygzLCBSRUM2NTZJRik7CisJCWNjZGNmZyA9IGNjZGNmZyB8IElTSUZfREFUQV9QQUNLOCB8IElTSUZfWUNJTlNXUF9ZQ0JDUjsKKwkJYnJlYWs7CisJY2FzZSBWUEZFX0JUNjU2XzEwQklUOgorCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzhCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qIHNldHVwIEJULjY1NiwgZW1iZWRkZWQgc3luYyAgKi8KKwkJcmVndygzLCBSRUM2NTZJRik7CisJCS8qIGVuYWJsZSAxMCBiaXQgbW9kZSBpbiBjY2RjZmcgKi8KKwkJY2NkY2ZnID0gY2NkY2ZnIHwgSVNJRl9EQVRBX1BBQ0s4IHwgSVNJRl9ZQ0lOU1dQX1lDQkNSIHwKKwkJCUlTSUZfQlc2NTZfRU5BQkxFOworCQlicmVhazsKKwljYXNlIFZQRkVfQlQxMTIwOgorCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzE2QklUKSB7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIkludmFsaWQgcGl4X2ZtdChpbnB1dCBtb2RlKVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlyZWd3KDMsIFJFQzY1NklGKTsKKwkJYnJlYWs7CisKKwljYXNlIFZQRkVfWUNCQ1JfU1lOQ184OgorCQljY2RjZmcgfD0gSVNJRl9EQVRBX1BBQ0s4OworCQljY2RjZmcgfD0gSVNJRl9ZQ0lOU1dQX1lDQkNSOworCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzhCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzE2OgorCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzE2QklUKSB7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIkludmFsaWQgcGl4X2ZtdChpbnB1dCBtb2RlKVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBzaG91bGQgbmV2ZXIgY29tZSBoZXJlICovCisJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBpbnRlcmZhY2UgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlZ3cobW9kZXNldCwgTU9ERVNFVCk7CisKKwkvKiBTZXQgdXAgcGl4IG9yZGVyICovCisJY2NkY2ZnIHw9IHBhcmFtcy0+cGl4X29yZGVyIDw8IElTSUZfUElYX09SREVSX1NISUZUOworCisJcmVndyhjY2RjZmcsIENDRENGRyk7CisKKwkvKiBjb25maWd1cmUgdmlkZW8gd2luZG93ICovCisJaWYgKChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfQlQxMTIwKSB8fAorCSAgICAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1lDQkNSX1NZTkNfMTYpKQorCQlpc2lmX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgMSk7CisJZWxzZQorCQlpc2lmX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgMik7CisKKwkvKgorCSAqIGNvbmZpZ3VyZSB0aGUgaG9yaXpvbnRhbCBsaW5lIG9mZnNldAorCSAqIHRoaXMgaXMgZG9uZSBieSByb3VuZGluZyB1cCB3aWR0aCB0byBhIG11bHRpcGxlIG9mIDE2IHBpeGVscworCSAqIGFuZCBtdWx0aXBseSBieSB0d28gdG8gYWNjb3VudCBmb3IgeTpjYjpjciA0OjI6MiBkYXRhCisJICovCisJcmVndygoKCgocGFyYW1zLT53aW4ud2lkdGggKiAyKSArIDMxKSAmIDB4ZmZmZmZmZTApID4+IDUpLCBIU0laRSk7CisKKwkvKiBjb25maWd1cmUgdGhlIG1lbW9yeSBsaW5lIG9mZnNldCAqLworCWlmICgocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX0lOVEVSTEFDRUQpICYmCisJICAgIChwYXJhbXMtPmJ1Zl90eXBlID09IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQpKQorCQkvKiB0d28gZmllbGRzIGFyZSBpbnRlcmxlYXZlZCBpbiBtZW1vcnkgKi8KKwkJcmVndygweDAwMDAwMjQ5LCBTRE9GU1QpOworCisJLyogU2V0dXAgdGVzdCBwYXR0ZXJuIGlmIGVuYWJsZWQgKi8KKwlpZiAoaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy50ZXN0X3BhdF9nZW4pIHsKKwkJc3luYy5jY2RwZ19oZHBvbCA9IHBhcmFtcy0+aGRfcG9sOworCQlzeW5jLmNjZHBnX3ZkcG9sID0gcGFyYW1zLT52ZF9wb2w7CisJCWRtMzY1X3Zwc3Nfc2V0X3N5bmNfcG9sKHN5bmMpOworCQlkbTM2NV92cHNzX3NldF9wZ19mcmFtZV9zaXplKGZyYW1lX3NpemUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc2lmX2NvbmZpZ3VyZSh2b2lkKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gaXNpZl9jb25maWdfcmF3KCk7CisJcmV0dXJuIGlzaWZfY29uZmlnX3ljYmNyKCk7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9jbG9zZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJLyogY29weSBkZWZhdWx0cyB0byBtb2R1bGUgcGFyYW1zICovCisJaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcyA9IGlzaWZfY29uZmlnX2RlZmF1bHRzOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNjZGNfaHdfZGV2aWNlIGlzaWZfaHdfZGV2ID0geworCS5uYW1lID0gIklTSUYiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5od19vcHMgPSB7CisJCS5vcGVuID0gaXNpZl9vcGVuLAorCQkuY2xvc2UgPSBpc2lmX2Nsb3NlLAorCQkuZW5hYmxlID0gaXNpZl9lbmFibGUsCisJCS5lbmFibGVfb3V0X3RvX3NkcmFtID0gaXNpZl9lbmFibGVfb3V0cHV0X3RvX3NkcmFtLAorCQkuc2V0X2h3X2lmX3BhcmFtcyA9IGlzaWZfc2V0X2h3X2lmX3BhcmFtcywKKwkJLmNvbmZpZ3VyZSA9IGlzaWZfY29uZmlndXJlLAorCQkuc2V0X2J1ZnR5cGUgPSBpc2lmX3NldF9idWZ0eXBlLAorCQkuZ2V0X2J1ZnR5cGUgPSBpc2lmX2dldF9idWZ0eXBlLAorCQkuZW51bV9waXggPSBpc2lmX2VudW1fcGl4LAorCQkuc2V0X3BpeGVsX2Zvcm1hdCA9IGlzaWZfc2V0X3BpeGVsX2Zvcm1hdCwKKwkJLmdldF9waXhlbF9mb3JtYXQgPSBpc2lmX2dldF9waXhlbF9mb3JtYXQsCisJCS5zZXRfZnJhbWVfZm9ybWF0ID0gaXNpZl9zZXRfZnJhbWVfZm9ybWF0LAorCQkuZ2V0X2ZyYW1lX2Zvcm1hdCA9IGlzaWZfZ2V0X2ZyYW1lX2Zvcm1hdCwKKwkJLnNldF9pbWFnZV93aW5kb3cgPSBpc2lmX3NldF9pbWFnZV93aW5kb3csCisJCS5nZXRfaW1hZ2Vfd2luZG93ID0gaXNpZl9nZXRfaW1hZ2Vfd2luZG93LAorCQkuZ2V0X2xpbmVfbGVuZ3RoID0gaXNpZl9nZXRfbGluZV9sZW5ndGgsCisJCS5zZXRmYmFkZHIgPSBpc2lmX3NldGZiYWRkciwKKwkJLmdldGZpZCA9IGlzaWZfZ2V0ZmlkLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc2lmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdm9pZCAoKnNldHVwX3Bpbm11eCkodm9pZCk7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJdm9pZCAqX19pb21lbSBhZGRyOworCWludCBzdGF0dXMgPSAwLCBpOworCisJLyoKKwkgKiBmaXJzdCB0cnkgdG8gcmVnaXN0ZXIgd2l0aCB2cGZlLiBJZiBub3QgY29ycmVjdCBwbGF0Zm9ybSwgdGhlbiB3ZQorCSAqIGRvbid0IGhhdmUgdG8gaW9tYXAKKwkgKi8KKwlzdGF0dXMgPSB2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZpc2lmX2h3X2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwkvKiBHZXQgYW5kIGVuYWJsZSBNYXN0ZXIgY2xvY2sgKi8KKwlpc2lmX2NmZy5tY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWFzdGVyIik7CisJaWYgKElTX0VSUihpc2lmX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGlzaWZfY2ZnLm1jbGspOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisJaWYgKGNsa19lbmFibGUoaXNpZl9jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCisJLyogUGxhdGZvcm0gZGF0YSBob2xkcyBzZXR1cF9waW5tdXggZnVuY3Rpb24gcHRyICovCisJaWYgKE5VTEwgPT0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCXNldHVwX3Bpbm11eCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCS8qCisJICogc2V0dXAgTXV4IGNvbmZpZ3VyYXRpb24gZm9yIGNjZGMgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmb3IKKwkgKiBkaWZmZXJlbnQgU29DcyB1c2luZyB0aGlzIENDREMKKwkgKi8KKwlzZXR1cF9waW5tdXgoKTsKKworCWkgPSAwOworCS8qIEdldCB0aGUgSVNJRiBiYXNlIGFkZHJlc3MsIGxpbmVhcml6YXRpb24gdGFibGUwIGFuZCB0YWJsZTEgYWRkci4gKi8KKwl3aGlsZSAoaSA8IDMpIHsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKKwkJaWYgKCFyZXMpIHsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWxfbm9iYXNlX3JlczsKKwkJfQorCQlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCQkgcmVzLT5uYW1lKTsKKwkJaWYgKCFyZXMpIHsKKwkJCXN0YXR1cyA9IC1FQlVTWTsKKwkJCWdvdG8gZmFpbF9ub2Jhc2VfcmVzOworCQl9CisJCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwkJaWYgKCFhZGRyKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBmYWlsX2Jhc2VfaW9tYXA7CisJCX0KKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCS8qIElTSUYgYmFzZSBhZGRyZXNzICovCisJCQlpc2lmX2NmZy5iYXNlX2FkZHIgPSBhZGRyOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCS8qIElTSUYgbGluZWFyIHRibDAgYWRkcmVzcyAqLworCQkJaXNpZl9jZmcubGluZWFyX3RibDBfYWRkciA9IGFkZHI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIElTSUYgbGluZWFyIHRibDAgYWRkcmVzcyAqLworCQkJaXNpZl9jZmcubGluZWFyX3RibDFfYWRkciA9IGFkZHI7CisJCQlicmVhazsKKwkJfQorCQlpKys7CisJfQorCWlzaWZfY2ZnLmRldiA9ICZwZGV2LT5kZXY7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwKKwkJaXNpZl9od19kZXYubmFtZSk7CisJcmV0dXJuIDA7CitmYWlsX2Jhc2VfaW9tYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaS0tOworZmFpbF9ub2Jhc2VfcmVzOgorCWlmIChpc2lmX2NmZy5iYXNlX2FkZHIpCisJCWlvdW5tYXAoaXNpZl9jZmcuYmFzZV9hZGRyKTsKKwlpZiAoaXNpZl9jZmcubGluZWFyX3RibDBfYWRkcikKKwkJaW91bm1hcChpc2lmX2NmZy5saW5lYXJfdGJsMF9hZGRyKTsKKworCXdoaWxlIChpID49IDApIHsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJCWktLTsKKwl9CitmYWlsX21jbGs6CisJY2xrX3B1dChpc2lmX2NmZy5tY2xrKTsKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmlzaWZfaHdfZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGlzaWZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJaW50IGkgPSAwOworCisJaW91bm1hcChpc2lmX2NmZy5iYXNlX2FkZHIpOworCWlvdW5tYXAoaXNpZl9jZmcubGluZWFyX3RibDBfYWRkcik7CisJaW91bm1hcChpc2lmX2NmZy5saW5lYXJfdGJsMV9hZGRyKTsKKwl3aGlsZSAoaSA8IDMpIHsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKKwkJaWYgKHJlcykKKwkJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCQlpKys7CisJfQorCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmaXNpZl9od19kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpc2lmX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJpc2lmIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoaXNpZl9yZW1vdmUpLAorCS5wcm9iZSA9IGlzaWZfcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc2lmX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpc2lmX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpc2lmX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlzaWZfaW5pdCk7Cittb2R1bGVfZXhpdChpc2lmX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvaXNpZl9yZWdzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvaXNpZl9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiODg5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmX3JlZ3MuaApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfSVNJRl9SRUdTX0gKKyNkZWZpbmUgX0lTSUZfUkVHU19ICisKKy8qIElTSUYgcmVnaXN0ZXJzIHJlbGF0aXZlIG9mZnNldHMgKi8KKyNkZWZpbmUgU1lOQ0VOCQkJCQkweDAwCisjZGVmaW5lIE1PREVTRVQJCQkJCTB4MDQKKyNkZWZpbmUgSERXCQkJCQkweDA4CisjZGVmaW5lIFZEVwkJCQkJMHgwYworI2RlZmluZSBQUExOCQkJCQkweDEwCisjZGVmaW5lIExQRlIJCQkJCTB4MTQKKyNkZWZpbmUgU1BICQkJCQkweDE4CisjZGVmaW5lIExOSAkJCQkJMHgxYworI2RlZmluZSBTTFYwCQkJCQkweDIwCisjZGVmaW5lIFNMVjEJCQkJCTB4MjQKKyNkZWZpbmUgTE5WCQkJCQkweDI4CisjZGVmaW5lIENVTEgJCQkJCTB4MmMKKyNkZWZpbmUgQ1VMVgkJCQkJMHgzMAorI2RlZmluZSBIU0laRQkJCQkJMHgzNAorI2RlZmluZSBTRE9GU1QJCQkJCTB4MzgKKyNkZWZpbmUgQ0FEVQkJCQkJMHgzYworI2RlZmluZSBDQURMCQkJCQkweDQwCisjZGVmaW5lIExJTkNGRzAJCQkJCTB4NDQKKyNkZWZpbmUgTElOQ0ZHMQkJCQkJMHg0OAorI2RlZmluZSBDQ09MUAkJCQkJMHg0YworI2RlZmluZSBDUkdBSU4gCQkJCQkweDUwCisjZGVmaW5lIENHUkdBSU4JCQkJCTB4NTQKKyNkZWZpbmUgQ0dCR0FJTgkJCQkJMHg1OAorI2RlZmluZSBDQkdBSU4JCQkJCTB4NWMKKyNkZWZpbmUgQ09GU1RBCQkJCQkweDYwCisjZGVmaW5lIEZMU0hDRkcwCQkJCTB4NjQKKyNkZWZpbmUgRkxTSENGRzEJCQkJMHg2OAorI2RlZmluZSBGTFNIQ0ZHMgkJCQkweDZjCisjZGVmaW5lIFZESU5UMAkJCQkJMHg3MAorI2RlZmluZSBWRElOVDEJCQkJCTB4NzQKKyNkZWZpbmUgVkRJTlQyCQkJCQkweDc4CisjZGVmaW5lIE1JU0MgCQkJCQkweDdjCisjZGVmaW5lIENHQU1NQVdECQkJCTB4ODAKKyNkZWZpbmUgUkVDNjU2SUYJCQkJMHg4NAorI2RlZmluZSBDQ0RDRkcJCQkJCTB4ODgKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEZWZlY3QgQ29ycmVjdGlvbiByZWdpc3RlcnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBERkNDVEwJCQkJCTB4OGMKKyNkZWZpbmUgVkRGU0FUTFYJCQkJMHg5MAorI2RlZmluZSBERkNNRU1DVEwJCQkJMHg5NAorI2RlZmluZSBERkNNRU0wCQkJCQkweDk4CisjZGVmaW5lIERGQ01FTTEJCQkJCTB4OWMKKyNkZWZpbmUgREZDTUVNMgkJCQkJMHhhMAorI2RlZmluZSBERkNNRU0zCQkJCQkweGE0CisjZGVmaW5lIERGQ01FTTQJCQkJCTB4YTgKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEJsYWNrIENsYW1wIHJlZ2lzdGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0xBTVBDRkcJCQkJMHhhYworI2RlZmluZSBDTERDT0ZTVAkJCQkweGIwCisjZGVmaW5lIENMU1YJCQkJCTB4YjQKKyNkZWZpbmUgQ0xIV0lOMAkJCQkJMHhiOAorI2RlZmluZSBDTEhXSU4xCQkJCQkweGJjCisjZGVmaW5lIENMSFdJTjIJCQkJCTB4YzAKKyNkZWZpbmUgQ0xWUlYJCQkJCTB4YzQKKyNkZWZpbmUgQ0xWV0lOMAkJCQkJMHhjOAorI2RlZmluZSBDTFZXSU4xCQkJCQkweGNjCisjZGVmaW5lIENMVldJTjIJCQkJCTB4ZDAKKyNkZWZpbmUgQ0xWV0lOMwkJCQkJMHhkNAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTGVuc2UgU2hhZGluZyBDb3JyZWN0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEQVRBSE9GU1QJCQkJMHhkOAorI2RlZmluZSBEQVRBVk9GU1QJCQkJMHhkYworI2RlZmluZSBMU0NIVkFMCQkJCQkweGUwCisjZGVmaW5lIExTQ1ZWQUwJCQkJCTB4ZTQKKyNkZWZpbmUgVFdPRExTQ0NGRwkJCQkweGU4CisjZGVmaW5lIFRXT0RMU0NPRlNUCQkJCTB4ZWMKKyNkZWZpbmUgVFdPRExTQ0lOSQkJCQkweGYwCisjZGVmaW5lIFRXT0RMU0NHUkJVCQkJCTB4ZjQKKyNkZWZpbmUgVFdPRExTQ0dSQkwJCQkJMHhmOAorI2RlZmluZSBUV09ETFNDR1JPRgkJCQkweGZjCisjZGVmaW5lIFRXT0RMU0NPUkJVCQkJCTB4MTAwCisjZGVmaW5lIFRXT0RMU0NPUkJMCQkJCTB4MTA0CisjZGVmaW5lIFRXT0RMU0NPUk9GCQkJCTB4MTA4CisjZGVmaW5lIFRXT0RMU0NJUlFFTgkJCQkweDEwYworI2RlZmluZSBUV09ETFNDSVJRU1QJCQkJMHgxMTAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIERhdGEgZm9ybWF0dGVyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBGTVRDRkcJCQkJCTB4MTE0CisjZGVmaW5lIEZNVFBMRU4JCQkJCTB4MTE4CisjZGVmaW5lIEZNVFNQSAkJCQkJMHgxMWMKKyNkZWZpbmUgRk1UTE5ICQkJCQkweDEyMAorI2RlZmluZSBGTVRTTFYJCQkJCTB4MTI0CisjZGVmaW5lIEZNVExOVgkJCQkJMHgxMjgKKyNkZWZpbmUgRk1UUkxFTgkJCQkJMHgxMmMKKyNkZWZpbmUgRk1USENOVAkJCQkJMHgxMzAKKyNkZWZpbmUgRk1UQVBUUl9CQVNFCQkJCTB4MTM0CisvKiBCZWxvdyBtYWNybyBmb3IgYWRkcmVzc2VzIEZNVEFQVFIwIC0gRk1UQVBUUjE1ICovCisjZGVmaW5lIEZNVEFQVFIoaSkJCQkoRk1UQVBUUl9CQVNFICsgKGkgKiA0KSkKKyNkZWZpbmUgRk1UUEdNVkYwCQkJCTB4MTc0CisjZGVmaW5lIEZNVFBHTVZGMQkJCQkweDE3OAorI2RlZmluZSBGTVRQR01BUFUwCQkJCTB4MTdjCisjZGVmaW5lIEZNVFBHTUFQVTEJCQkJMHgxODAKKyNkZWZpbmUgRk1UUEdNQVBTMAkJCQkweDE4NAorI2RlZmluZSBGTVRQR01BUFMxCQkJCTB4MTg4CisjZGVmaW5lIEZNVFBHTUFQUzIJCQkJMHgxOGMKKyNkZWZpbmUgRk1UUEdNQVBTMwkJCQkweDE5MAorI2RlZmluZSBGTVRQR01BUFM0CQkJCTB4MTk0CisjZGVmaW5lIEZNVFBHTUFQUzUJCQkJMHgxOTgKKyNkZWZpbmUgRk1UUEdNQVBTNgkJCQkweDE5YworI2RlZmluZSBGTVRQR01BUFM3CQkJCTB4MWEwCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvbG9yIFNwYWNlIENvbnZlcnRlcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDU0NDVEwJCQkJCTB4MWE0CisjZGVmaW5lIENTQ00wCQkJCQkweDFhOAorI2RlZmluZSBDU0NNMQkJCQkJMHgxYWMKKyNkZWZpbmUgQ1NDTTIJCQkJCTB4MWIwCisjZGVmaW5lIENTQ00zCQkJCQkweDFiNAorI2RlZmluZSBDU0NNNAkJCQkJMHgxYjgKKyNkZWZpbmUgQ1NDTTUJCQkJCTB4MWJjCisjZGVmaW5lIENTQ002CQkJCQkweDFjMAorI2RlZmluZSBDU0NNNwkJCQkJMHgxYzQKKyNkZWZpbmUgT0JXSU4wCQkJCQkweDFjOAorI2RlZmluZSBPQldJTjEJCQkJCTB4MWNjCisjZGVmaW5lIE9CV0lOMgkJCQkJMHgxZDAKKyNkZWZpbmUgT0JXSU4zCQkJCQkweDFkNAorI2RlZmluZSBPQlZBTDAJCQkJCTB4MWQ4CisjZGVmaW5lIE9CVkFMMQkJCQkJMHgxZGMKKyNkZWZpbmUgT0JWQUwyCQkJCQkweDFlMAorI2RlZmluZSBPQlZBTDMJCQkJCTB4MWU0CisjZGVmaW5lIE9CVkFMNAkJCQkJMHgxZTgKKyNkZWZpbmUgT0JWQUw1CQkJCQkweDFlYworI2RlZmluZSBPQlZBTDYJCQkJCTB4MWYwCisjZGVmaW5lIE9CVkFMNwkJCQkJMHgxZjQKKyNkZWZpbmUgQ0xLQ1RMCQkJCQkweDFmOAorCisvKiBNYXNrcyAmIFNoaWZ0cyBiZWxvdyAqLworI2RlZmluZSBTVEFSVF9QWF9IT1JfTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBOVU1fUFhfSE9SX01BU0sJCQkJMHg3RkZGCisjZGVmaW5lIFNUQVJUX1ZFUl9PTkVfTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBTVEFSVF9WRVJfVFdPX01BU0sJCQkweDdGRkYKKyNkZWZpbmUgTlVNX0xJTkVTX1ZFUgkJCQkweDdGRkYKKworLyogZ2FpbiAtIG9mZnNldCBtYXNrcyAqLworI2RlZmluZSBHQUlOX0lOVEVHRVJfU0hJRlQJCQk5CisjZGVmaW5lIE9GRlNFVF9NQVNLCQkJICAJMHhGRkYKKyNkZWZpbmUgR0FJTl9TRFJBTV9FTl9TSElGVAkJCTEyCisjZGVmaW5lIEdBSU5fSVBJUEVfRU5fU0hJRlQJCQkxMworI2RlZmluZSBHQUlOX0gzQV9FTl9TSElGVAkJCTE0CisjZGVmaW5lIE9GU1RfU0RSQU1fRU5fU0hJRlQJCQk4CisjZGVmaW5lIE9GU1RfSVBJUEVfRU5fU0hJRlQJCQk5CisjZGVmaW5lIE9GU1RfSDNBX0VOX1NISUZUCQkJMTAKKyNkZWZpbmUgR0FJTl9PRkZTRVRfRU5fTUFTSwkJCTB4NzcwMAorCisvKiBDdWxsaW5nICovCisjZGVmaW5lIENVTExfUEFUX0VWRU5fTElORV9TSElGVAkJOAorCisvKiBDQ0RDRkcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVNJRl9ZQ0lOU1dQX1JBVwkJCSgweDAwIDw8IDQpCisjZGVmaW5lIElTSUZfWUNJTlNXUF9ZQ0JDUgkJCSgweDAxIDw8IDQpCisjZGVmaW5lIElTSUZfQ0NEQ0ZHX0ZJRE1EX0xBVENIX1ZTWU5DCQkoMHgwMCA8PCA2KQorI2RlZmluZSBJU0lGX0NDRENGR19XRU5MT0dfQU5ECQkJKDB4MDAgPDwgOCkKKyNkZWZpbmUgSVNJRl9DQ0RDRkdfVFJHU0VMX1dFTgkJCSgweDAwIDw8IDkpCisjZGVmaW5lIElTSUZfQ0NEQ0ZHX0VYVFJHX0RJU0FCTEUJCSgweDAwIDw8IDEwKQorI2RlZmluZSBJU0lGX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUJCSgweDAxIDw8IDE1KQorI2RlZmluZSBJU0lGX0xBVENIX09OX1ZTWU5DX0VOQUJMRQkJKDB4MDAgPDwgMTUpCisjZGVmaW5lIElTSUZfREFUQV9QQUNLX01BU0sJCQkzCisjZGVmaW5lIElTSUZfREFUQV9QQUNLMTYJCQkwCisjZGVmaW5lIElTSUZfREFUQV9QQUNLMTIJCQkxCisjZGVmaW5lIElTSUZfREFUQV9QQUNLOAkJCQkyCisjZGVmaW5lIElTSUZfUElYX09SREVSX1NISUZUCQkJMTEKKyNkZWZpbmUgSVNJRl9CVzY1Nl9FTkFCTEUJCQkoMHgwMSA8PCA1KQorCisvKiBNT0RFU0VUIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX1ZESERPVVRfSU5QVVQJCQkoMHgwMCA8PCAwKQorI2RlZmluZSBJU0lGX0lOUFVUX1NISUZUCQkJMTIKKyNkZWZpbmUgSVNJRl9SQVdfSU5QVVRfTU9ERQkJCTAKKyNkZWZpbmUgSVNJRl9GSURfUE9MX1NISUZUCQkJNAorI2RlZmluZSBJU0lGX0hEX1BPTF9TSElGVAkJCTMKKyNkZWZpbmUgSVNJRl9WRF9QT0xfU0hJRlQJCQkyCisjZGVmaW5lIElTSUZfREFUQVBPTF9OT1JNQUwJCQkwCisjZGVmaW5lIElTSUZfREFUQVBPTF9TSElGVAkJCTYKKyNkZWZpbmUgSVNJRl9FWFdFTl9ESVNBQkxFIAkJCTAKKyNkZWZpbmUgSVNJRl9FWFdFTl9TSElGVAkJCTUKKyNkZWZpbmUgSVNJRl9GUk1fRk1UX1NISUZUCQkJNworI2RlZmluZSBJU0lGX0RBVEFTRlRfU0hJRlQJCQk4CisjZGVmaW5lIElTSUZfTFBGX1NISUZUCQkJCTE0CisjZGVmaW5lIElTSUZfTFBGX01BU0sJCQkJMQorCisvKiBHQU1NQVdEIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX0FMQVdfR0FNQV9XRF9NQVNLCQkJMHhGCisjZGVmaW5lIElTSUZfQUxBV19HQU1BX1dEX1NISUZUCQkJMQorI2RlZmluZSBJU0lGX0FMQVdfRU5BQkxFCQkJMQorI2RlZmluZSBJU0lGX0dBTU1BV0RfQ0ZBX1NISUZUCQkJNQorCisvKiBIU0laRSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9IU0laRV9GTElQX01BU0sJCQkxCisjZGVmaW5lIElTSUZfSFNJWkVfRkxJUF9TSElGVAkJCTEyCisKKy8qIE1JU0MgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfRFBDTV9FTl9TSElGVAkJCTEyCisjZGVmaW5lIElTSUZfRFBDTV9QUkVESUNUT1JfU0hJRlQJCTEzCisKKy8qIEJsYWNrIGNsYW1wIHJlbGF0ZWQgKi8KKyNkZWZpbmUgSVNJRl9CQ19NT0RFX0NPTE9SX1NISUZUCQk0CisjZGVmaW5lIElTSUZfSE9SWl9CQ19NT0RFX1NISUZUCQkJMQorI2RlZmluZSBJU0lGX0hPUlpfQkNfV0lOX1NFTF9TSElGVAkJNQorI2RlZmluZSBJU0lGX0hPUlpfQkNfUElYX0xJTUlUX1NISUZUCQk2CisjZGVmaW5lIElTSUZfSE9SWl9CQ19XSU5fSF9TSVpFX1NISUZUCQk4CisjZGVmaW5lIElTSUZfSE9SWl9CQ19XSU5fVl9TSVpFX1NISUZUCQkxMgorI2RlZmluZQlJU0lGX1ZFUlRfQkNfUlNUX1ZBTF9TRUxfU0hJRlQJCTQKKyNkZWZpbmUgSVNJRl9WRVJUX0JDX0xJTkVfQVZFX0NPRUZfU0hJRlQJOAorCisvKiBWREZDIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX1ZERkNfRU5fU0hJRlQJCQk0CisjZGVmaW5lIElTSUZfVkRGQ19DT1JSX01PRF9TSElGVAkJNQorI2RlZmluZSBJU0lGX1ZERkNfQ09SUl9XSE9MRV9MTl9TSElGVAkJNworI2RlZmluZSBJU0lGX1ZERkNfTEVWRUxfU0hGVF9TSElGVAkJOAorI2RlZmluZSBJU0lGX1ZERkNfUE9TX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgSVNJRl9ERkNNRU1DVExfREZDTUFSU1RfU0hJRlQJCTIKKworLyogQ1NDIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX0NTQ19DT0VGX0lOVEVHX01BU0sJCTcKKyNkZWZpbmUgSVNJRl9DU0NfQ09FRl9ERUNJTUFMX01BU0sJCTB4MWYKKyNkZWZpbmUgSVNJRl9DU0NfQ09FRl9JTlRFR19TSElGVAkJNQorI2RlZmluZSBJU0lGX0NTQ01fTVNCX1NISUZUCQkJOAorI2RlZmluZSBJU0lGX0RGX0NTQ19TUEhfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGX0NTQ19MTkhfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGX0NTQ19TTFZfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGX0NTQ19MTlZfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGX05VTUxJTkVTCQkJMHg3RkZGCisjZGVmaW5lIElTSUZfREZfTlVNUElYCQkJCTB4MUZGRgorCisvKiBPZmZzZXRzIGZvciBMU0MvREZDL0dhaW4gKi8KKyNkZWZpbmUgSVNJRl9EQVRBX0hfT0ZGU0VUX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgSVNJRl9EQVRBX1ZfT0ZGU0VUX01BU0sJCQkweDFGRkYKKworLyogTGluZWFyaXphdGlvbiAqLworI2RlZmluZSBJU0lGX0xJTl9DT1JSU0ZUX1NISUZUCQkJNAorI2RlZmluZSBJU0lGX0xJTl9TQ0FMRV9GQUNUX0lOVEVHX1NISUZUCQkxMAorCisKKy8qIFBhdHRlcm4gcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfUEdfRU4JCQkJKDEgPDwgMykKKyNkZWZpbmUgSVNJRl9TRUxfUEdfU1JDCQkJCSgzIDw8IDQpCisjZGVmaW5lIElTSUZfUEdfVkRfUE9MX1NISUZUCQkJMAorI2RlZmluZSBJU0lGX1BHX0hEX1BPTF9TSElGVAkJCTEKKworLypyYW5kb20gb3RoZXIganVuayovCisjZGVmaW5lIElTSUZfU1lOQ0VOX1ZESERFTl9NQVNLCQkJKDEgPDwgMCkKKyNkZWZpbmUgSVNJRl9TWU5DRU5fV0VOX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBJU0lGX1NZTkNFTl9XRU5fU0hJRlQJCQkxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jCmluZGV4IGRlMjJiYzkuLjg4NWNkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKQEAgLTEwNyw5ICsxMDcsNiBAQAogCWludCB2cGZlX3Byb2JlZDsKIAkvKiBuYW1lIG9mIGNjZGMgZGV2aWNlICovCiAJY2hhciBuYW1lWzMyXTsKLQkvKiBmb3Igc3RvcmluZyBtZW0gbWFwcyBmb3IgQ0NEQyAqLwotCWludCBjY2RjX2FkZHJfc2l6ZTsKLQl2b2lkICpfX2lvbWVtIGNjZGNfYWRkcjsKIH07CiAKIC8qIGRhdGEgc3RydWN0dXJlcyAqLwpAQCAtMjI5LDcgKzIyNiw2IEBACiAJQlVHX09OKCFkZXYtPmh3X29wcy5zZXRfaW1hZ2Vfd2luZG93KTsKIAlCVUdfT04oIWRldi0+aHdfb3BzLmdldF9pbWFnZV93aW5kb3cpOwogCUJVR19PTighZGV2LT5od19vcHMuZ2V0X2xpbmVfbGVuZ3RoKTsKLQlCVUdfT04oIWRldi0+aHdfb3BzLnNldGZiYWRkcik7CiAJQlVHX09OKCFkZXYtPmh3X29wcy5nZXRmaWQpOwogCiAJbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKQEAgLTI0MCwyNSArMjM2LDIzIEBACiAJCSAqIHdhbGsgdGhyb3VnaCBpdCBkdXJpbmcgdnBmZSBwcm9iZQogCQkgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJ2cGZlIGNhcHR1cmUgbm90IGluaXRpYWxpemVkXG4iKTsKLQkJcmV0ID0gLTE7CisJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gdW5sb2NrOwogCX0KIAogCWlmIChzdHJjbXAoZGV2LT5uYW1lLCBjY2RjX2NmZy0+bmFtZSkpIHsKIAkJLyogaWdub3JlIHRoaXMgY2NkYyAqLwotCQlyZXQgPSAtMTsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJaWYgKGNjZGNfZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2NkYyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIpOwotCQlyZXQgPSAtMTsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJY2NkY19kZXYgPSBkZXY7Ci0JZGV2LT5od19vcHMuc2V0X2NjZGNfYmFzZShjY2RjX2NmZy0+Y2NkY19hZGRyLAotCQkJCSAgY2NkY19jZmctPmNjZGNfYWRkcl9zaXplKTsKIHVubG9jazoKIAltdXRleF91bmxvY2soJmNjZGNfbG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTE3ODYsNjEgKzE3ODAsNiBAQAogCXJldHVybiB2cGZlX2RldjsKIH0KIAotc3RhdGljIHZvaWQgdnBmZV9kaXNhYmxlX2Nsb2NrKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCi17Ci0Jc3RydWN0IHZwZmVfY29uZmlnICp2cGZlX2NmZyA9IHZwZmVfZGV2LT5jZmc7Ci0KLQljbGtfZGlzYWJsZSh2cGZlX2NmZy0+dnBzc2Nsayk7Ci0JY2xrX3B1dCh2cGZlX2NmZy0+dnBzc2Nsayk7Ci0JY2xrX2Rpc2FibGUodnBmZV9jZmctPnNsYXZlY2xrKTsKLQljbGtfcHV0KHZwZmVfY2ZnLT5zbGF2ZWNsayk7Ci0JdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCi0JCSAidnBmZSB2cHNzIG1hc3RlciAmIHNsYXZlIGNsb2NrcyBkaXNhYmxlZFxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgdnBmZV9lbmFibGVfY2xvY2soc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKLXsKLQlzdHJ1Y3QgdnBmZV9jb25maWcgKnZwZmVfY2ZnID0gdnBmZV9kZXYtPmNmZzsKLQlpbnQgcmV0ID0gLUVOT0VOVDsKLQotCXZwZmVfY2ZnLT52cHNzY2xrID0gY2xrX2dldCh2cGZlX2Rldi0+cGRldiwgInZwc3NfbWFzdGVyIik7Ci0JaWYgKE5VTEwgPT0gdnBmZV9jZmctPnZwc3NjbGspIHsKLQkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwgIk5vIGNsb2NrIGRlZmluZWQgZm9yIgotCQkJICJ2cHNzX21hc3RlclxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGNsa19lbmFibGUodnBmZV9jZmctPnZwc3NjbGspKSB7Ci0JCXY0bDJfZXJyKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCi0JCQkidnBmZSB2cHNzIG1hc3RlciBjbG9jayBub3QgZW5hYmxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQl2NGwyX2luZm8odnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKLQkJICJ2cGZlIHZwc3MgbWFzdGVyIGNsb2NrIGVuYWJsZWRcbiIpOwotCi0JdnBmZV9jZmctPnNsYXZlY2xrID0gY2xrX2dldCh2cGZlX2Rldi0+cGRldiwgInZwc3Nfc2xhdmUiKTsKLQlpZiAoTlVMTCA9PSB2cGZlX2NmZy0+c2xhdmVjbGspIHsKLQkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKLQkJCSJObyBjbG9jayBkZWZpbmVkIGZvciB2cHNzIHNsYXZlXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGNsa19lbmFibGUodnBmZV9jZmctPnNsYXZlY2xrKSkgewotCQl2NGwyX2Vycih2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAotCQkJICJ2cGZlIHZwc3Mgc2xhdmUgY2xvY2sgbm90IGVuYWJsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsICJ2cGZlIHZwc3Mgc2xhdmUgY2xvY2sgZW5hYmxlZFxuIik7Ci0JcmV0dXJuIDA7Ci1vdXQ6Ci0JaWYgKHZwZmVfY2ZnLT52cHNzY2xrKQotCQljbGtfcHV0KHZwZmVfY2ZnLT52cHNzY2xrKTsKLQlpZiAodnBmZV9jZmctPnNsYXZlY2xrKQotCQljbGtfcHV0KHZwZmVfY2ZnLT5zbGF2ZWNsayk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KIC8qCiAgKiB2cGZlX3Byb2JlIDogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGRldmljZSBlbnRyaWVzIGJ5IHJlZ2lzdGVyCiAgKiBpdHNlbGYgdG8gdGhlIFY0TDIgZHJpdmVyIGFuZCBpbml0aWFsaXplcyBmaWVsZHMgb2YgZWFjaApAQCAtMTg3MCw3ICsxODA5LDcgQEAKIAogCWlmIChOVUxMID09IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gZ2V0IHZwZmUgY29uZmlnXG4iKTsKLQkJcmV0ID0gLUVOT0VOVDsKKwkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBwcm9iZV9mcmVlX2Rldl9tZW07CiAJfQogCkBAIC0xODg0LDE4ICsxODIzLDEzIEBACiAJCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOwogCX0KIAotCS8qIGVuYWJsZSB2cHNzIGNsb2NrcyAqLwotCXJldCA9IHZwZmVfZW5hYmxlX2Nsb2NrKHZwZmVfZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIHByb2JlX2ZyZWVfZGV2X21lbTsKLQogCW11dGV4X2xvY2soJmNjZGNfbG9jayk7CiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBjY2RjIGNvbmZpZ3VyYXRpb24gKi8KIAljY2RjX2NmZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjY2RjX2NvbmZpZyksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGNjZGNfY2ZnKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCiAJCQkgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgY2NkY19jZmdcbiIpOwotCQlnb3RvIHByb2JlX2Rpc2FibGVfY2xvY2s7CisJCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOwogCX0KIAogCXN0cm5jcHkoY2NkY19jZmctPm5hbWUsIHZwZmVfY2ZnLT5jY2RjLCAzMik7CkBAIC0xOTA0LDYxICsxODM4LDM0IEBACiAJaWYgKCFyZXMxKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCiAJCQkgIlVuYWJsZSB0byBnZXQgaW50ZXJydXB0IGZvciBWSU5UMFxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbTsKIAl9CiAJdnBmZV9kZXYtPmNjZGNfaXJxMCA9IHJlczEtPnN0YXJ0OwogCiAJLyogR2V0IFZJTlQxIGlycSByZXNvdXJjZSAqLwotCXJlczEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwKLQkJCQlJT1JFU09VUkNFX0lSUSwgMSk7CisJcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMSk7CiAJaWYgKCFyZXMxKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCiAJCQkgIlVuYWJsZSB0byBnZXQgaW50ZXJydXB0IGZvciBWSU5UMVxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbTsKIAl9CiAJdnBmZV9kZXYtPmNjZGNfaXJxMSA9IHJlczEtPnN0YXJ0OwogCi0JLyogR2V0IGFkZHJlc3MgYmFzZSBvZiBDQ0RDICovCi0JcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMxKSB7Ci0JCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCi0JCQkiVW5hYmxlIHRvIGdldCByZWdpc3RlciBhZGRyZXNzIG1hcFxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKLQl9Ci0KLQljY2RjX2NmZy0+Y2NkY19hZGRyX3NpemUgPSByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSwKLQkJCQlwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewotCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAotCQkJIkZhaWxlZCByZXF1ZXN0X21lbV9yZWdpb24gZm9yIGNjZGMgYmFzZVxuIik7Ci0JCXJldCA9IC1FTlhJTzsKLQkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOwotCX0KLQljY2RjX2NmZy0+Y2NkY19hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlczEtPnN0YXJ0LAotCQkJCQkgICAgIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSk7Ci0JaWYgKCFjY2RjX2NmZy0+Y2NkY19hZGRyKSB7Ci0JCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gaW9yZW1hcCBjY2RjIGFkZHJcbiIpOwotCQlyZXQgPSAtRU5YSU87Ci0JCWdvdG8gcHJvYmVfb3V0X3JlbGVhc2VfbWVtMTsKLQl9Ci0KIAlyZXQgPSByZXF1ZXN0X2lycSh2cGZlX2Rldi0+Y2NkY19pcnEwLCB2cGZlX2lzciwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgInZwZmVfY2FwdHVyZTAiLCB2cGZlX2Rldik7CiAKIAlpZiAoMCAhPSByZXQpIHsKIAkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIlVuYWJsZSB0byByZXF1ZXN0IGludGVycnVwdFxuIik7Ci0JCWdvdG8gcHJvYmVfb3V0X3VubWFwMTsKKwkJZ290byBwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbTsKIAl9CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHZpZGVvIGRldmljZSAqLwogCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwogCWlmIChOVUxMID09IHZmZCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAotCQkJIlVuYWJsZSB0byBhbGxvYyB2aWRlbyBkZXZpY2VcbiIpOworCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLCAiVW5hYmxlIHRvIGFsbG9jIHZpZGVvIGRldmljZVxuIik7CiAJCWdvdG8gcHJvYmVfb3V0X3JlbGVhc2VfaXJxOwogCX0KIApAQCAtMjA3MywxMiArMTk4MCw3IEBACiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZwZmVfZGV2LT52aWRlb19kZXYpOwogcHJvYmVfb3V0X3JlbGVhc2VfaXJxOgogCWZyZWVfaXJxKHZwZmVfZGV2LT5jY2RjX2lycTAsIHZwZmVfZGV2KTsKLXByb2JlX291dF91bm1hcDE6Ci0JaW91bm1hcChjY2RjX2NmZy0+Y2NkY19hZGRyKTsKLXByb2JlX291dF9yZWxlYXNlX21lbTE6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlczEtPnN0YXJ0LCByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDEpOwotcHJvYmVfZGlzYWJsZV9jbG9jazoKLQl2cGZlX2Rpc2FibGVfY2xvY2sodnBmZV9kZXYpOworcHJvYmVfZnJlZV9jY2RjX2NmZ19tZW06CiAJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOwogCWtmcmVlKGNjZGNfY2ZnKTsKIHByb2JlX2ZyZWVfZGV2X21lbToKQEAgLTIwOTIsNyArMTk5NCw2IEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCB2cGZlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCXY0bDJfaW5mbyhwZGV2LT5kZXYuZHJpdmVyLCAidnBmZV9yZW1vdmVcbiIpOwogCkBAIC0yMTAwLDEyICsyMDAxLDYgQEAKIAlrZnJlZSh2cGZlX2Rldi0+c2QpOwogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwZmVfZGV2LT52NGwyX2Rldik7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodnBmZV9kZXYtPnZpZGVvX2Rldik7Ci0JbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKLQlpb3VubWFwKGNjZGNfY2ZnLT5jY2RjX2FkZHIpOwotCW11dGV4X3VubG9jaygmY2NkY19sb2NrKTsKLQl2cGZlX2Rpc2FibGVfY2xvY2sodnBmZV9kZXYpOwogCWtmcmVlKHZwZmVfZGV2KTsKIAlrZnJlZShjY2RjX2NmZyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYwppbmRleCA3ZWU3MmVjLi43OTE4NjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCi0gKiBjb21tb24gdnBzcyBkcml2ZXIgZm9yIGFsbCB2aWRlbyBkcml2ZXJzLgorICogY29tbW9uIHZwc3Mgc3lzdGVtIG1vZHVsZSBwbGF0Zm9ybSBkcml2ZXIgZm9yIGFsbCB2aWRlbyBkcml2ZXJzLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTM1LDEyICszNSw1MiBAQAogLyogRE02NDR4IGRlZmluZXMgKi8KICNkZWZpbmUgRE02NDRYX1NCTF9QQ1JfVlBTUwkJKDQpCiAKKyNkZWZpbmUgRE0zNTVfVlBTU0JMX0lOVFNFTAkJMHgxMAorI2RlZmluZSBETTM1NV9WUFNTQkxfRVZUU0VMCQkweDE0CiAvKiB2cHNzIEJMIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgRE0zNTVfVlBTU0JMX0NDRENNVVgJCTB4MWMKIC8qIHZwc3MgQ0xLIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgRE0zNTVfVlBTU0NMS19DTEtDVFJMCQkweDA0CiAvKiBtYXNrcyBhbmQgc2hpZnRzICovCiAjZGVmaW5lIFZQU1NfSFNTSVNFTF9TSElGVAkJNAorLyoKKyAqIFZESU5UMCAtIHZwc3NfaW50MCwgVkRJTlQxIC0gdnBzc19pbnQxLCBIM0EgLSB2cHNzX2ludDQsCisgKiBJUElQRV9JTlQxX1NEUiAtIHZwc3NfaW50NQorICovCisjZGVmaW5lIERNMzU1X1ZQU1NCTF9JTlRTRUxfREVGQVVMVAkweGZmODNmZjEwCisvKiBWRU5DSU5UIC0gdnBzc19pbnQ4ICovCisjZGVmaW5lIERNMzU1X1ZQU1NCTF9FVlRTRUxfREVGQVVMVAkweDQKKworI2RlZmluZSBETTM2NV9JU1A1X1BDQ1IgCQkweDA0CisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMMQkJMHgxMAorI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDIJCTB4MTQKKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwzCQkweDE4CisjZGVmaW5lIERNMzY1X0lTUDVfQ0NEQ01VWCAJCTB4MjAKKyNkZWZpbmUgRE0zNjVfSVNQNV9QR19GUkFNRV9TSVpFIAkweDI4CisjZGVmaW5lIERNMzY1X1ZQQkVfQ0xLX0NUUkwgCQkweDAwCisvKgorICogdnBzcyBpbnRlcnJ1cHRzLiBWRElOVDAgLSB2cHNzX2ludDAsIFZESU5UMSAtIHZwc3NfaW50MSwKKyAqIEFGIC0gdnBzc19pbnQzCisgKi8KKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwxX0RFRkFVTFQJMHgwYjFmMDEwMAorLyogQUVXIC0gdnBzc19pbnQ2LCBSU1pfSU5UX0RNQSAtIHZwc3NfaW50NSAqLworI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDJfREVGQVVMVAkweDFmMGEwZjFmCisvKiBWRU5DIC0gdnBzc19pbnQ4ICovCisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMM19ERUZBVUxUCTB4MDAwMDAwMTUKKworLyogbWFza3MgYW5kIHNoaWZ0cyBmb3IgRE0zNjUqLworI2RlZmluZSBETTM2NV9DQ0RDX1BHX1ZEX1BPTF9TSElGVCAJMAorI2RlZmluZSBETTM2NV9DQ0RDX1BHX0hEX1BPTF9TSElGVCAJMQorCisjZGVmaW5lIENDRF9TUkNfU0VMX01BU0sJCShCSVRfTUFTSyg1KSB8IEJJVF9NQVNLKDQpKQorI2RlZmluZSBDQ0RfU1JDX1NFTF9TSElGVAkJNAorCisvKiBEaWZmZXJlbnQgU29DIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgKi8KK2VudW0gdnBzc19wbGF0Zm9ybV90eXBlIHsKKwlETTY0NFgsCisJRE0zNTUsCisJRE0zNjUsCit9OwogCiAvKgogICogdnBzcyBvcGVyYXRpb25zLiBEZXBlbmRzIG9uIHBsYXRmb3JtLiBOb3QgYWxsIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlCkBAIC01OSwxMyArOTksOSBAQAogCiAvKiB2cHNzIGNvbmZpZ3VyYXRpb24gKi8KIHN0cnVjdCB2cHNzX29wZXJfY29uZmlnIHsKLQlfX2lvbWVtIHZvaWQgKnZwc3NfYmxfcmVnc19iYXNlOwotCV9faW9tZW0gdm9pZCAqdnBzc19yZWdzX2Jhc2U7Ci0Jc3RydWN0IHJlc291cmNlCQkqcjE7Ci0JcmVzb3VyY2Vfc2l6ZV90CQlsZW4xOwotCXN0cnVjdCByZXNvdXJjZQkJKnIyOwotCXJlc291cmNlX3NpemVfdAkJbGVuMjsKLQljaGFyIHZwc3NfbmFtZVszMl07CisJX19pb21lbSB2b2lkICp2cHNzX3JlZ3NfYmFzZTA7CisJX19pb21lbSB2b2lkICp2cHNzX3JlZ3NfYmFzZTE7CisJZW51bSB2cHNzX3BsYXRmb3JtX3R5cGUgcGxhdGZvcm07CiAJc3BpbmxvY2tfdCB2cHNzX2xvY2s7CiAJc3RydWN0IHZwc3NfaHdfb3BzIGh3X29wczsKIH07CkBAIC03NSwyMiArMTExLDQ2IEBACiAvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGJsX3JlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTAgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmxfcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIG9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlICsgb2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsLCBvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTAgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiB2cHNzX3JlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdnBzc19yZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UgKyBvZmZzZXQpOworCV9fcmF3X3dyaXRlbCh2YWwsIG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMSArIG9mZnNldCk7Cit9CisKKy8qIEZvciBETTM2NSBvbmx5ICovCitzdGF0aWMgaW5saW5lIHUzMiBpc3A1X3JlYWQodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwICsgb2Zmc2V0KTsKK30KKworLyogRm9yIERNMzY1IG9ubHkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpc3A1X3dyaXRlKHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZG0zNjVfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKK3sKKwl1MzIgdGVtcCA9IGlzcDVfcmVhZChETTM2NV9JU1A1X0NDRENNVVgpICYgfkNDRF9TUkNfU0VMX01BU0s7CisKKwkvKiBpZiB3ZSBhcmUgdXNpbmcgcGF0dGVybiBnZW5lcmF0b3IsIGVuYWJsZSBpdCAqLworCWlmIChzcmNfc2VsID09IFZQU1NfUEdMUEJLIHx8IHNyY19zZWwgPT0gVlBTU19DQ0RDUEcpCisJCXRlbXAgfD0gMHgwODsKKworCXRlbXAgfD0gKHNyY19zZWwgPDwgQ0NEX1NSQ19TRUxfU0hJRlQpOworCWlzcDVfd3JpdGUodGVtcCwgRE0zNjVfSVNQNV9DQ0RDTVVYKTsKIH0KIAogc3RhdGljIHZvaWQgZG0zNTVfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKQEAgLTEwMSw5ICsxNjEsOSBAQAogaW50IHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKIHsKIAlpZiAoIW9wZXJfY2ZnLmh3X29wcy5zZWxlY3RfY2NkY19zb3VyY2UpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkbTM1NV9zZWxlY3RfY2NkY19zb3VyY2Uoc3JjX3NlbCk7CisJb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZShzcmNfc2VsKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodnBzc19zZWxlY3RfY2NkY19zb3VyY2UpOwpAQCAtMTE0LDcgKzE3NCw3IEBACiAKIAlpZiAod2JsX3NlbCA8IFZQU1NfUENSX0FFV19XQkxfMCB8fAogCSAgICB3Ymxfc2VsID4gVlBTU19QQ1JfQ0NEQ19XQkxfTykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHdyaXRpbmcgYSAwIGNsZWFyIHRoZSBvdmVyZmxvdyAqLwogCW1hc2sgPSB+KG1hc2sgPDwgd2JsX3NlbCk7CkBAIC0xMjYsNyArMTg2LDcgQEAKIGludCB2cHNzX2NsZWFyX3dibF9vdmVyZmxvdyhlbnVtIHZwc3Nfd2JsX3NlbCB3Ymxfc2VsKQogewogCWlmICghb3Blcl9jZmcuaHdfb3BzLmNsZWFyX3dibF9vdmVyZmxvdykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBvcGVyX2NmZy5od19vcHMuY2xlYXJfd2JsX292ZXJmbG93KHdibF9zZWwpOwogfQpAQCAtMTY2LDcgKzIyNiw3IEBACiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJkbTM1NV9lbmFibGVfY2xvY2s6IgogCQkJCSIgSW52YWxpZCBzZWxlY3RvcjogJWRcbiIsIGNsb2NrX3NlbCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9wZXJfY2ZnLnZwc3NfbG9jaywgZmxhZ3MpOwpAQCAtMTgxLDEwMCArMjQxLDIyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRtMzY1X2VuYWJsZV9jbG9jayhlbnVtIHZwc3NfY2xvY2tfc2VsIGNsb2NrX3NlbCwgaW50IGVuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHV0ZW1wLCBtYXNrID0gMHgxLCBzaGlmdCA9IDAsIG9mZnNldCA9IERNMzY1X0lTUDVfUENDUjsKKwl1MzIgKCpyZWFkKSh1MzIgb2Zmc2V0KSA9IGlzcDVfcmVhZDsKKwl2b2lkKCp3cml0ZSkodTMyIHZhbCwgdTMyIG9mZnNldCkgPSBpc3A1X3dyaXRlOworCisJc3dpdGNoIChjbG9ja19zZWwpIHsKKwljYXNlIFZQU1NfQkxfQ0xPQ0s6CisJCWJyZWFrOworCWNhc2UgVlBTU19DQ0RDX0NMT0NLOgorCQlzaGlmdCA9IDE7CisJCWJyZWFrOworCWNhc2UgVlBTU19IM0FfQ0xPQ0s6CisJCXNoaWZ0ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1JTWl9DTE9DSzoKKwkJc2hpZnQgPSAzOworCQlicmVhazsKKwljYXNlIFZQU1NfSVBJUEVfQ0xPQ0s6CisJCXNoaWZ0ID0gNDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0lQSVBFSUZfQ0xPQ0s6CisJCXNoaWZ0ID0gNTsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1BDTEtfSU5URVJOQUw6CisJCXNoaWZ0ID0gNjsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1BTWU5DX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSA3OworCQlicmVhazsKKwljYXNlIFZQU1NfVlBCRV9DTE9DSzoKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWNhc2UgVlBTU19WRU5DX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSAyOworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0xEQ19DTE9DSzoKKwkJc2hpZnQgPSAzOworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0ZESUZfQ0xPQ0s6CisJCXNoaWZ0ID0gNDsKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWNhc2UgVlBTU19PU0RfQ0xPQ0tfU0VMOgorCQlzaGlmdCA9IDY7CisJCXJlYWQgPSB2cHNzX3JlZ3I7CisJCXdyaXRlID0gdnBzc19yZWd3OworCQlvZmZzZXQgPSBETTM2NV9WUEJFX0NMS19DVFJMOworCQlicmVhazsKKwljYXNlIFZQU1NfTERDX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSA3OworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJkbTM2NV9lbmFibGVfY2xvY2s6IEludmFsaWQgc2VsZWN0b3I6ICVkXG4iLAorCQkgICAgICAgY2xvY2tfc2VsKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGVyX2NmZy52cHNzX2xvY2ssIGZsYWdzKTsKKwl1dGVtcCA9IHJlYWQob2Zmc2V0KTsKKwlpZiAoIWVuKSB7CisJCW1hc2sgPSB+bWFzazsKKwkJdXRlbXAgJj0gKG1hc2sgPDwgc2hpZnQpOworCX0gZWxzZQorCQl1dGVtcCB8PSAobWFzayA8PCBzaGlmdCk7CisKKwl3cml0ZSh1dGVtcCwgb2Zmc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGVyX2NmZy52cHNzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCiBpbnQgdnBzc19lbmFibGVfY2xvY2soZW51bSB2cHNzX2Nsb2NrX3NlbCBjbG9ja19zZWwsIGludCBlbikKIHsKIAlpZiAoIW9wZXJfY2ZnLmh3X29wcy5lbmFibGVfY2xvY2spCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayhjbG9ja19zZWwsIGVuKTsKIH0KIEVYUE9SVF9TWU1CT0wodnBzc19lbmFibGVfY2xvY2spOwogCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3N5bmNfcG9sKHN0cnVjdCB2cHNzX3N5bmNfcG9sIHN5bmMpCit7CisJaW50IHZhbCA9IDA7CisJdmFsID0gaXNwNV9yZWFkKERNMzY1X0lTUDVfQ0NEQ01VWCk7CisKKwl2YWwgfD0gKHN5bmMuY2NkcGdfaGRwb2wgPDwgRE0zNjVfQ0NEQ19QR19IRF9QT0xfU0hJRlQpOworCXZhbCB8PSAoc3luYy5jY2RwZ192ZHBvbCA8PCBETTM2NV9DQ0RDX1BHX1ZEX1BPTF9TSElGVCk7CisKKwlpc3A1X3dyaXRlKHZhbCwgRE0zNjVfSVNQNV9DQ0RDTVVYKTsKK30KK0VYUE9SVF9TWU1CT0woZG0zNjVfdnBzc19zZXRfc3luY19wb2wpOworCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUoc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSBmcmFtZV9zaXplKQoreworCWludCBjdXJyZW50X3JlZyA9ICgoZnJhbWVfc2l6ZS5obHBmciA+PiAxKSAtIDEpIDw8IDE2OworCisJY3VycmVudF9yZWcgfD0gKGZyYW1lX3NpemUucHBsZW4gLSAxKTsKKwlpc3A1X3dyaXRlKGN1cnJlbnRfcmVnLCBETTM2NV9JU1A1X1BHX0ZSQU1FX1NJWkUpOworfQorRVhQT1JUX1NZTUJPTChkbTM2NV92cHNzX3NldF9wZ19mcmFtZV9zaXplKTsKKwogc3RhdGljIGludCBfX2luaXQgdnBzc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCBzdGF0dXMsIGRtMzU1ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyMSwgKnIyOworCWNoYXIgKnBsYXRmb3JtX25hbWU7CisJaW50IHN0YXR1czsKIAogCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlzdHJjcHkob3Blcl9jZmcudnBzc19uYW1lLCBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSk7CiAKLQlpZiAoIXN0cmNtcChvcGVyX2NmZy52cHNzX25hbWUsICJkbTM1NV92cHNzIikpCi0JCWRtMzU1ID0gMTsKLQllbHNlIGlmIChzdHJjbXAob3Blcl9jZmcudnBzc19uYW1lLCAiZG02NDR4X3Zwc3MiKSkgeworCXBsYXRmb3JtX25hbWUgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXN0cmNtcChwbGF0Zm9ybV9uYW1lLCAiZG0zNTVfdnBzcyIpKQorCQlvcGVyX2NmZy5wbGF0Zm9ybSA9IERNMzU1OworCWVsc2UgaWYgKCFzdHJjbXAocGxhdGZvcm1fbmFtZSwgImRtMzY1X3Zwc3MiKSkKKwkJb3Blcl9jZmcucGxhdGZvcm0gPSBETTM2NTsKKwllbHNlIGlmICghc3RyY21wKHBsYXRmb3JtX25hbWUsICJkbTY0NHhfdnBzcyIpKQorCQlvcGVyX2NmZy5wbGF0Zm9ybSA9IERNNjQ0WDsKKwllbHNlIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidnBzcyBkcml2ZXIgbm90IHN1cHBvcnRlZCBvbiIKIAkJCSIgdGhpcyBwbGF0Zm9ybVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyB2cHNzIHByb2JlZFxuIiwgb3Blcl9jZmcudnBzc19uYW1lKTsKLQlvcGVyX2NmZy5yMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFvcGVyX2NmZy5yMSkKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgdnBzcyBwcm9iZWRcbiIsIHBsYXRmb3JtX25hbWUpOworCXIxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXIxKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCW9wZXJfY2ZnLmxlbjEgPSBvcGVyX2NmZy5yMS0+ZW5kIC0gb3Blcl9jZmcucjEtPnN0YXJ0ICsgMTsKLQotCW9wZXJfY2ZnLnIxID0gcmVxdWVzdF9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSwKLQkJCQkJIG9wZXJfY2ZnLnIxLT5uYW1lKTsKLQlpZiAoIW9wZXJfY2ZnLnIxKQorCXIxID0gcmVxdWVzdF9tZW1fcmVnaW9uKHIxLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMSksIHIxLT5uYW1lKTsKKwlpZiAoIXIxKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jb3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UgPSBpb3JlbWFwKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7Ci0JaWYgKCFvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSkgeworCW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCA9IGlvcmVtYXAocjEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIxKSk7CisJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTApIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIGZhaWwxOwogCX0KIAotCWlmIChkbTM1NSkgewotCQlvcGVyX2NmZy5yMiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JCWlmICghb3Blcl9jZmcucjIpIHsKKwlpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNTUgfHwgb3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNjUpIHsKKwkJcjIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCQlpZiAoIXIyKSB7CiAJCQlzdGF0dXMgPSAtRU5PRU5UOwogCQkJZ290byBmYWlsMjsKIAkJfQotCQlvcGVyX2NmZy5sZW4yID0gb3Blcl9jZmcucjItPmVuZCAtIG9wZXJfY2ZnLnIyLT5zdGFydCArIDE7Ci0JCW9wZXJfY2ZnLnIyID0gcmVxdWVzdF9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIyLT5zdGFydCwKLQkJCQkJCSBvcGVyX2NmZy5sZW4yLAotCQkJCQkJIG9wZXJfY2ZnLnIyLT5uYW1lKTsKLQkJaWYgKCFvcGVyX2NmZy5yMikgeworCQlyMiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyMi0+c3RhcnQsIHJlc291cmNlX3NpemUocjIpLCByMi0+bmFtZSk7CisJCWlmICghcjIpIHsKIAkJCXN0YXR1cyA9IC1FQlVTWTsKIAkJCWdvdG8gZmFpbDI7CiAJCX0KIAotCQlvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSA9IGlvcmVtYXAob3Blcl9jZmcucjItPnN0YXJ0LAotCQkJCQkJICBvcGVyX2NmZy5sZW4yKTsKLQkJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSkgeworCQlvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEgPSBpb3JlbWFwKHIyLT5zdGFydCwKKwkJCQkJCSAgIHJlc291cmNlX3NpemUocjIpKTsKKwkJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEpIHsKIAkJCXN0YXR1cyA9IC1FQlVTWTsKIAkJCWdvdG8gZmFpbDM7CiAJCX0KIAl9CiAKLQlpZiAoZG0zNTUpIHsKKwlpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNTUpIHsKIAkJb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayA9IGRtMzU1X2VuYWJsZV9jbG9jazsKIAkJb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZSA9IGRtMzU1X3NlbGVjdF9jY2RjX3NvdXJjZTsKKwkJLyogU2V0dXAgdnBzcyBpbnRlcnJ1cHRzICovCisJCWJsX3JlZ3coRE0zNTVfVlBTU0JMX0lOVFNFTF9ERUZBVUxULCBETTM1NV9WUFNTQkxfSU5UU0VMKTsKKwkJYmxfcmVndyhETTM1NV9WUFNTQkxfRVZUU0VMX0RFRkFVTFQsIERNMzU1X1ZQU1NCTF9FVlRTRUwpOworCX0gZWxzZSBpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNjUpIHsKKwkJb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayA9IGRtMzY1X2VuYWJsZV9jbG9jazsKKwkJb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZSA9IGRtMzY1X3NlbGVjdF9jY2RjX3NvdXJjZTsKKwkJLyogU2V0dXAgdnBzcyBpbnRlcnJ1cHRzICovCisJCWlzcDVfd3JpdGUoRE0zNjVfSVNQNV9JTlRTRUwxX0RFRkFVTFQsIERNMzY1X0lTUDVfSU5UU0VMMSk7CisJCWlzcDVfd3JpdGUoRE0zNjVfSVNQNV9JTlRTRUwyX0RFRkFVTFQsIERNMzY1X0lTUDVfSU5UU0VMMik7CisJCWlzcDVfd3JpdGUoRE0zNjVfSVNQNV9JTlRTRUwzX0RFRkFVTFQsIERNMzY1X0lTUDVfSU5UU0VMMyk7CiAJfSBlbHNlCiAJCW9wZXJfY2ZnLmh3X29wcy5jbGVhcl93Ymxfb3ZlcmZsb3cgPSBkbTY0NHhfY2xlYXJfd2JsX292ZXJmbG93OwogCiAJc3Bpbl9sb2NrX2luaXQoJm9wZXJfY2ZnLnZwc3NfbG9jayk7Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHZwc3MgcHJvYmUgc3VjY2Vzc1xuIiwgb3Blcl9jZmcudnBzc19uYW1lKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgdnBzcyBwcm9iZSBzdWNjZXNzXG4iLCBwbGF0Zm9ybV9uYW1lKTsKIAlyZXR1cm4gMDsKIAogZmFpbDM6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIyLT5zdGFydCwgb3Blcl9jZmcubGVuMik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHIyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMikpOwogZmFpbDI6Ci0JaW91bm1hcChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSk7CisJaW91bm1hcChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTApOwogZmFpbDE6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHIxLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMSkpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHZwc3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW91bm1hcChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7Ci0JaWYgKCFzdHJjbXAob3Blcl9jZmcudnBzc19uYW1lLCAiZG0zNTVfdnBzcyIpKSB7Ci0JCWlvdW5tYXAob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UpOwotCQlyZWxlYXNlX21lbV9yZWdpb24ob3Blcl9jZmcucjItPnN0YXJ0LCBvcGVyX2NmZy5sZW4yKTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CisKKwlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNTUgfHwgb3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNjUpIHsKKwkJaW91bm1hcChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEpOworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCmluZGV4IDI1MTAwMDAuLmVjYmNlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCkBAIC0yMzIsNiArMjMyLDEyIEBACiAJewktMSwJCS0xLAktMSwJCS0xfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgZGlrb21fZGszMDBfZGlnaXRhbFtdID0geworCXtFTTI4WFhfUjA4X0dQSU8sCTB4NmUsCX5FTV9HUElPXzQsCTEwfSwKKwl7RU0yODgwX1IwNF9HUE8sCTB4MDgsCTB4ZmYsCQkxMH0sCisJeyAtMSwJCQktMSwJLTEsCQktMX0sCit9OworCiAKIC8qCiAgKiAgQm9hcmQgZGVmaW5pdGlvbnMKQEAgLTQ2MSwyMSArNDY3LDMwIEBACiAJCS5uYW1lICAgICAgICAgPSAiTGVhZHRlayBXaW5mYXN0IFVTQiBJSSBEZWx1eGUiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKLQkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc19pcl9pMmMgICA9IDEsCisJCS50dmF1ZGlvX2FkZHIgPSAweDU4LAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5UIHwKKwkJCQlUREE5ODg3X1BPUlQyX0FDVElWRSB8CisJCQkJVERBOTg4N19RU1MsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLmFkZWNvZGVyICAgICA9IEVNMjhYWF9UVkFVRElPLAogCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAotCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTQsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9BVVgsCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCi0JCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTUsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCi0JCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCisJCQkucmFkaW8JICA9IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9SQURJTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0FVWCwKKwkJCX0KIAl9LAogCVtFTTI4MjBfQk9BUkRfVklERU9MT0dZXzIwSzE0WFVTQl0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVmlkZW9sb2d5IDIwSzE0WFVTQiBVU0IyLjAiLApAQCAtNzMwLDExICs3NDUsMTIgQEAKIAogCVtFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTX0ZSXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBIeWJyaWQgWFMgU2VjYW0iLAotCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCiAJCS5oYXNfbXNwMzR4eCAgPSAxLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5oYXNfZHZiICAgICAgPSAxLAorCQkuZHZiX2dwaW8gICAgID0gZGVmYXVsdF9kaWdpdGFsLAogCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLApAQCAtMTI2NSw2ICsxMjgxLDcgQEAKIAkJLmRlY29kZXIJPSBFTTI4WFhfU0FBNzExWCwKIAkJLmhhc19kdmIJPSAxLAogCQkuZHZiX2dwaW8JPSBlbTI4ODJfa3dvcmxkXzMxNXVfZGlnaXRhbCwKKwkJLmlyX2NvZGVzCT0gJmlyX2NvZGVzX2t3b3JsZF8zMTV1X3RhYmxlLAogCQkueGNsawkJPSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTJNSFosCiAJCS5pMmNfc3BlZWQJPSBFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSwKIAkJLyogQW5hbG9nIG1vZGUgLSBzdGlsbCBub3QgcmVhZHkgKi8KQEAgLTE0MzEsNiArMTQ0OCwyMSBAQAogCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9IH0sCiAJfSwKKwlbRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJEaWtvbSBESzMwMCIsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLm10c19maXJtd2FyZSA9IDEsCisJCS5oYXNfZHZiICAgICAgPSAxLAorCQkuZHZiX2dwaW8gICAgID0gZGlrb21fZGszMDBfZGlnaXRhbCwKKwkJLmlucHV0ICAgICAgICA9IHsgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCisJCX0gfSwKKwl9LAogCVtFTTI4ODNfQk9BUkRfS1dPUkxEX0hZQlJJRF8zMzBVXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJLd29ybGQgUGx1c1RWIEhEIEh5YnJpZCAzMzAiLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LApAQCAtMTc1MSw2ICsxNzgzLDcgQEAKIAl7MHhjZWU0NGE5OSwgRU0yODgyX0JPQVJEX0VWR0FfSU5EVFVCRSwgVFVORVJfWEMyMDI4fSwKIAl7MHhiODg0NmIyMCwgRU0yODgxX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk8sIFRVTkVSX1hDMjAyOH0sCiAJezB4NjNmNjUzYmQsIEVNMjg3MF9CT0FSRF9SRURET19EVkJfQ19VU0JfQk9YLCBUVU5FUl9BQlNFTlR9LAorCXsweDRlOTEzNDQyLCBFTTI4ODJfQk9BUkRfRElLT01fREszMDAsIFRVTkVSX1hDMjAyOH0sCiB9OwogCiAvKiBJMkMgZGV2aWNlbGlzdCBoYXNoIHRhYmxlIGZvciBkZXZpY2VzIHdpdGggZ2VuZXJpYyBVU0IgSURzICovCkBAIC0yMTAzLDYgKzIxMzYsNyBAQAogCQljdGwtPmRlbW9kID0gWEMzMDI4X0ZFX0RFRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgRU0yODgzX0JPQVJEX0tXT1JMRF9IWUJSSURfMzMwVToKKwljYXNlIEVNMjg4Ml9CT0FSRF9ESUtPTV9ESzMwMDoKIAkJY3RsLT5kZW1vZCA9IFhDMzAyOF9GRV9DSElOQTsKIAkJY3RsLT5mbmFtZSA9IFhDMjAyOF9ERUZBVUxUX0ZJUk1XQVJFOwogCQlicmVhazsKQEAgLTIyNTksOSArMjI5MywxMiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHZvaWQgZW0yOHh4X3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CisJLyogTGVhZHRlayB3aW5mYXN0IHR2IFVTQklJIGRlbHV4ZSBjYW4gZmluZCBhIG5vbiB3b3JraW5nIElSLWRldmljZSAqLworCS8qIGF0IGFkZHJlc3MgMHgxOCwgc28gaWYgdGhhdCBhZGRyZXNzIGlzIG5lZWRlZCBmb3IgYW5vdGhlciBib2FyZCBpbiAqLworCS8qIHRoZSBmdXR1cmUsIHBsZWFzZSBwdXQgaXQgYWZ0ZXIgMHgxZi4gKi8KIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyX2xpc3RbXSA9IHsKLQkJIDB4MzAsIDB4NDcsIEkyQ19DTElFTlRfRU5ECisJCSAweDFmLCAweDMwLCAweDQ3LCBJMkNfQ0xJRU5UX0VORAogCX07CiAKIAlpZiAoZGlzYWJsZV9pcikKQEAgLTIyODgsNiArMjMyNSwxMCBAQAogCQlkZXYtPmluaXRfZGF0YS5pcl9jb2RlcyA9ICZpcl9jb2Rlc19yYzVfaGF1cHBhdWdlX25ld190YWJsZTsKIAkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGVtMjh4eF9nZXRfa2V5X2VtX2hhdXA7CiAJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4NDAgSGF1cHBhdWdlKSI7CisJY2FzZSBFTTI4MjBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJX0RFTFVYRToKKwkJZGV2LT5pbml0X2RhdGEuaXJfY29kZXMgPSAmaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGVfdGFibGU7OworCQlkZXYtPmluaXRfZGF0YS5nZXRfa2V5ID0gZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGU7CisJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4MjAgV2luZmFzdCBUViBVU0JJSSBEZWx1eGUpIjsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMzgxLDYgKzI0MjIsMzEgQEAKIAkJZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC50dW5lcl9ncGlvKTsKIAkJZW0yOHh4X3NldF9tb2RlKGRldiwgRU0yOFhYX0FOQUxPR19NT0RFKTsKIAkJYnJlYWs7CisKKy8qCisJCSAqIFRoZSBEaWtvbSBESzMwMCBpcyBkZXRlY3RlZCBhcyBhbiBLd29ybGQgVlMtRFZCLVQgMzIzVVIuCisJCSAqCisJCSAqIFRoaXMgb2NjdXJzIGJlY2F1c2UgdGhleSBzaGFyZSBpZGVudGljYWwgVVNCIHZlbmRvciBhbmQKKwkJICogcHJvZHVjdCBJRHMuCisJCSAqCisJCSAqIFdoYXQgd2UgZG8gaGVyZSBpcyBsb29rIHVwIHRoZSBFRVBST00gaGFzaCBvZiB0aGUgRGlrb20KKwkJICogYW5kIGlmIGl0IGlzIGZvdW5kIHRoZW4gd2UgZGVjaWRlIHRoYXQgd2UgZG8gbm90IGhhdmUKKwkJICogYSBLd29ybGQgYW5kIHJlc2V0IHRoZSBkZXZpY2UgdG8gdGhlIERpa29tIGluc3RlYWQuCisJCSAqCisJCSAqIFRoaXMgc29sdXRpb24gaXMgb25seSB2YWxpZCBpZiB0aGV5IGRvIG5vdCBzaGFyZSBlZXByb20KKwkJICogaGFzaCBpZGVudGl0aWVzIHdoaWNoIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkIGFzIHlldC4KKwkJICovCisJY2FzZSBFTTI4ODJfQk9BUkRfS1dPUkxEX1ZTX0RWQlQ6CisJCWlmICghZW0yOHh4X2hpbnRfYm9hcmQoZGV2KSkKKwkJCWVtMjh4eF9zZXRfbW9kZWwoZGV2KTsKKworCQkvKiBJbiBjYXNlcyB3aGVyZSB3ZSBoYWQgdG8gdXNlIGEgYm9hcmQgaGludCwgdGhlIGNhbGwgdG8KKwkJICAgZW0yOHh4X3NldF9tb2RlKCkgaW4gZW0yOHh4X3ByZV9jYXJkX3NldHVwKCkgd2FzIGEgbm8tb3AsCisJCSAgIHNvIG1ha2UgdGhlIGNhbGwgbm93IHNvIHRoZSBhbmFsb2cgR1BJT3MgYXJlIHNldCBwcm9wZXJseQorCQkgICBiZWZvcmUgcHJvYmluZyB0aGUgaTJjIGJ1cy4gKi8KKwkJZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC50dW5lcl9ncGlvKTsKKwkJZW0yOHh4X3NldF9tb2RlKGRldiwgRU0yOFhYX0FOQUxPR19NT0RFKTsKKwkJYnJlYWs7CiAJfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChNT0RVTEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwppbmRleCBiMzExZDQ1Li41YTM3ZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKQEAgLTY5MSw5ICs2OTEsMTUgQEAKIAlpZiAoZW0yOHh4X3ZiaV9zdXBwb3J0ZWQoZGV2KSA9PSAxKSB7CiAJCXZpbmN0cmwgfD0gRU0yOFhYX1ZJTkNUUkxfVkJJX1JBVzsKIAkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzRfVkJJX1NUQVJUX0gsIDB4MDApOwotCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNV9WQklfU1RBUlRfViwgMHgwOSk7Ci0JCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM2X1ZCSV9XSURUSCwgMHhiNCk7Ci0JCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM3X1ZCSV9IRUlHSFQsIDB4MGMpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNl9WQklfV0lEVEgsIGRldi0+dmJpX3dpZHRoLzQpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzN19WQklfSEVJR0hULCBkZXYtPnZiaV9oZWlnaHQpOworCQlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCQkvKiBOVFNDICovCisJCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNV9WQklfU1RBUlRfViwgMHgwOSk7CisJCX0gZWxzZSBpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNjI1XzUwKSB7CisJCQkvKiBQQUwgKi8KKwkJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM1X1ZCSV9TVEFSVF9WLCAweDA3KTsKKwkJfQogCX0KIAogCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxMV9WSU5DVFJMLCB2aW5jdHJsKTsKQEAgLTc2MCw2ICs3NjYsMTMgQEAKIAl3aWR0aCA9IG5vcm1fbWF4dyhkZXYpOwogCWhlaWdodCA9IG5vcm1fbWF4aChkZXYpOwogCisJLyogUHJvcGVybHkgc2V0dXAgVkJJICovCisJZGV2LT52Ymlfd2lkdGggPSA3MjA7CisJaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzUyNV82MCkKKwkJZGV2LT52YmlfaGVpZ2h0ID0gMTI7CisJZWxzZQorCQlkZXYtPnZiaV9oZWlnaHQgPSAxODsKKwogCWlmICghZGV2LT5wcm9ncmVzc2l2ZSkKIAkJaGVpZ2h0ID4+PSBub3JtX21heGgoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCmluZGV4IGNjMDUwNWUuLjFiOTYzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKQEAgLTUwMiw3ICs1MDIsOSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUzoKKwljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRlI6CiAJY2FzZSBFTTI4ODFfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BSTzoKKwljYXNlIEVNMjg4Ml9CT0FSRF9ESUtPTV9ESzMwMDoKIAkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCiAJCQkJCSAgICZlbTI4eHhfemwxMDM1M194YzMwMjhfbm9faTJjX2dhdGUsCiAJCQkJCSAgICZkZXYtPmkyY19hZGFwKTsKQEAgLTYwNiw2ICs2MDgsNyBAQAogCiAJaWYgKGRldi0+ZHZiKSB7CiAJCXVucmVnaXN0ZXJfZHZiKGRldi0+ZHZiKTsKKwkJa2ZyZWUoZGV2LT5kdmIpOwogCQlkZXYtPmR2YiA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCmluZGV4IGFmMGQ5MzUuLjFmYjc1NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCkBAIC03NSw2ICs3NSwxMCBAQAogCXVuc2lnbmVkIGludCByZXBlYXRfaW50ZXJ2YWw7CiAKIAlpbnQgICgqZ2V0X2tleSkoc3RydWN0IGVtMjh4eF9JUiAqLCBzdHJ1Y3QgZW0yOHh4X2lyX3BvbGxfcmVzdWx0ICopOworCisJLyogSVIgZGV2aWNlIHByb3BlcnRpZXMgKi8KKworCXN0cnVjdCBpcl9kZXZfcHJvcHMgcHJvcHM7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTgwLDYgKzE4NCwzNiBAQAogCXJldHVybiAxOwogfQogCitpbnQgZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGUoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3sKKwl1bnNpZ25lZCBjaGFyIHN1YmFkZHIsIGtleWRldGVjdCwga2V5OworCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7IHsgLmFkZHIgPSBpci0+Yy0+YWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9ICZzdWJhZGRyLCAubGVuID0gMX0sCisKKwkJCQl7IC5hZGRyID0gaXItPmMtPmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJmtleWRldGVjdCwgLmxlbiA9IDF9IH07CisKKwlzdWJhZGRyID0gMHgxMDsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoaXItPmMtPmFkYXB0ZXIsIG1zZywgMikpIHsKKwkJaTJjZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoa2V5ZGV0ZWN0ID09IDB4MDApCisJCXJldHVybiAwOworCisJc3ViYWRkciA9IDB4MDA7CisJbXNnWzFdLmJ1ZiA9ICZrZXk7CisJaWYgKDIgIT0gaTJjX3RyYW5zZmVyKGlyLT5jLT5hZGFwdGVyLCBtc2csIDIpKSB7CisJCWkyY2RwcmludGsoInJlYWQgZXJyb3JcbiIpOworCXJldHVybiAtRUlPOworCX0KKwlpZiAoa2V5ID09IDB4MDApCisJCXJldHVybiAwOworCisJKmlyX2tleSA9IGtleTsKKwkqaXJfcmF3ID0ga2V5OworCXJldHVybiAxOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIFBvbGwgYmFzZWQgZ2V0IGtleWNvZGUgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMzNiwzNSArMzcwLDI4IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpci0+d29yayk7CiB9CiAKLWludCBlbTI4eHhfaXJfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCitpbnQgZW0yOHh4X2lyX2NoYW5nZV9wcm90b2NvbCh2b2lkICpwcml2LCB1NjQgaXJfdHlwZSkKIHsKLQlzdHJ1Y3QgZW0yOHh4X0lSICppcjsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JdTggaXJfY29uZmlnOwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JaWYgKGRldi0+Ym9hcmQuaXJfY29kZXMgPT0gTlVMTCkgewotCQkvKiBObyByZW1vdGUgY29udHJvbCBzdXBwb3J0ICovCi0JCXJldHVybiAwOwotCX0KLQotCWlyID0ga3phbGxvYyhzaXplb2YoKmlyKSwgR0ZQX0tFUk5FTCk7Ci0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpciB8fCAhaW5wdXRfZGV2KQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCWlyLT5pbnB1dCA9IGlucHV0X2RldjsKLQlpcl9jb25maWcgPSBFTTI4NzRfSVJfUkM1OworCWludCByYyA9IDA7CisJc3RydWN0IGVtMjh4eF9JUiAqaXIgPSBwcml2OworCXN0cnVjdCBlbTI4eHggKmRldiA9IGlyLT5kZXY7CisJdTggaXJfY29uZmlnID0gRU0yODc0X0lSX1JDNTsKIAogCS8qIEFkanVzdCB4Y2xrIGJhc2VkIG8gSVIgdGFibGUgZm9yIFJDNS9ORUMgdGFibGVzICovCi0JaWYgKGRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPT0gSVJfVFlQRV9SQzUpIHsKKworCWRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCWlmIChpcl90eXBlID09IElSX1RZUEVfUkM1KSB7CiAJCWRldi0+Ym9hcmQueGNsayB8PSBFTTI4WFhfWENMS19JUl9SQzVfTU9ERTsKIAkJaXItPmZ1bGxfY29kZSA9IDE7Ci0JfSBlbHNlICBpZiAoZGV2LT5ib2FyZC5pcl9jb2Rlcy0+aXJfdHlwZSA9PSBJUl9UWVBFX05FQykgeworCX0gZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX05FQykgewogCQlkZXYtPmJvYXJkLnhjbGsgJj0gfkVNMjhYWF9YQ0xLX0lSX1JDNV9NT0RFOwogCQlpcl9jb25maWcgPSBFTTI4NzRfSVJfTkVDOwogCQlpci0+ZnVsbF9jb2RlID0gMTsKLQl9CisJfSBlbHNlCisJCXJjID0gLUVJTlZBTDsKKworCWRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPSBpcl90eXBlOworCiAJZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCBkZXYtPmJvYXJkLnhjbGssCiAJCQkgICAgICBFTTI4WFhfWENMS19JUl9SQzVfTU9ERSk7CiAKQEAgLTM4MCw5ICs0MDcsNDIgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCJVbnJlY29nbml6ZWQgZW0yOHh4IGNoaXAgaWQ6IElSIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJcmMgPSAtRUlOVkFMOwogCX0KIAorCXJldHVybiByYzsKK30KKworaW50IGVtMjh4eF9pcl9pbml0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlzdHJ1Y3QgZW0yOHh4X0lSICppcjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpZiAoZGV2LT5ib2FyZC5pcl9jb2RlcyA9PSBOVUxMKSB7CisJCS8qIE5vIHJlbW90ZSBjb250cm9sIHN1cHBvcnQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaXIgPSBremFsbG9jKHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJLyogcmVjb3JkIGhhbmRsZXMgdG8gb3Vyc2VsZiAqLworCWlyLT5kZXYgPSBkZXY7CisJZGV2LT5pciA9IGlyOworCisJaXItPmlucHV0ID0gaW5wdXRfZGV2OworCisJLyoKKwkgKiBlbTI4NzQgc3VwcG9ydHMgbW9yZSBwcm90b2NvbHMuIEZvciBub3csIGxldCdzIGp1c3QgYW5ub3VuY2UKKwkgKiB0aGUgdHdvIHByb3RvY29scyB0aGF0IHdlcmUgYWxyZWFkeSB0ZXN0ZWQKKwkgKi8KKwlpci0+cHJvcHMuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8IElSX1RZUEVfTkVDOworCWlyLT5wcm9wcy5wcml2ID0gaXI7CisJaXItPnByb3BzLmNoYW5nZV9wcm90b2NvbCA9IGVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2w7CisKIAkvKiBUaGlzIGlzIGhvdyBvZnRlbiB3ZSBhc2sgdGhlIGNoaXAgZm9yIElSIGluZm9ybWF0aW9uICovCiAJaXItPnBvbGxpbmcgPSAxMDA7IC8qIG1zICovCiAKQEAgLTM5Myw2ICs0NTMsOCBAQAogCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBpci0+cGh5cywgc2l6ZW9mKGlyLT5waHlzKSk7CiAJc3RybGNhdChpci0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoaXItPnBoeXMpKTsKIAorCS8qIFNldCBJUiBwcm90b2NvbCAqLworCWVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2woaXIsIGRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUpOwogCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBJUl9UWVBFX09USEVSKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfb3V0X2ZyZWU7CkBAIC00MDUsMTQgKzQ2NywxMyBAQAogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwogCiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+dWRldi0+ZGV2OwotCS8qIHJlY29yZCBoYW5kbGVzIHRvIG91cnNlbGYgKi8KLQlpci0+ZGV2ID0gZGV2OwotCWRldi0+aXIgPSBpcjsKKwogCiAJZW0yOHh4X2lyX3N0YXJ0KGlyKTsKIAogCS8qIGFsbCBkb25lICovCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBkZXYtPmJvYXJkLmlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMsCisJCQkJJmlyLT5wcm9wcyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaAppbmRleCAwNThhYzg3Li45MWU5MDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oCkBAIC0xNzMsOCArMTczLDggQEAKIC8qIGVtMjg3NCBJUiBjb25maWcgcmVnaXN0ZXIgKDB4NTApICovCiAjZGVmaW5lIEVNMjg3NF9JUl9ORUMgICAgICAgICAgIDB4MDAKICNkZWZpbmUgRU0yODc0X0lSX1JDNSAgICAgICAgICAgMHgwNAotI2RlZmluZSBFTTI4NzRfSVJfUkM1X01PREVfMCAgICAweDA4Ci0jZGVmaW5lIEVNMjg3NF9JUl9SQzVfTU9ERV82QSAgIDB4MGIKKyNkZWZpbmUgRU0yODc0X0lSX1JDNl9NT0RFXzAgICAgMHgwOAorI2RlZmluZSBFTTI4NzRfSVJfUkM2X01PREVfNkEgICAweDBiCiAKIC8qIGVtMjg3NCBUcmFuc3BvcnQgU3RyZWFtIEVuYWJsZSBSZWdpc3RlciAoMHg1ZikgKi8KICNkZWZpbmUgRU0yODc0X1RTMV9DQVBUVVJFX0VOQUJMRSAoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jCmluZGV4IDk0OTQzZTUuLmM3ZGNlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmJpLmMKQEAgLTcxLDcgKzcxLDExIEBACiBzdGF0aWMgaW50CiB2Ymlfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1bnNpZ25lZCBpbnQgKnNpemUpCiB7Ci0JKnNpemUgPSA3MjAgKiAxMiAqIDI7CisJc3RydWN0IGVtMjh4eF9maCAgICAgKmZoICA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAqZGV2ID0gZmgtPmRldjsKKworCSpzaXplID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOworCiAJaWYgKDAgPT0gKmNvdW50KQogCQkqY291bnQgPSB2YmlidWZzOwogCWlmICgqY291bnQgPCAyKQpAQCAtODUsMTkgKzg5LDE4IEBACiB2YmlfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAogCSAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CisJc3RydWN0IGVtMjh4eF9maCAgICAgKmZoICA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAqZGV2ID0gZmgtPmRldjsKIAlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOwogCWludCAgICAgICAgICAgICAgICAgIHJjID0gMDsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKIAotCXNpemUgPSA3MjAgKiAxMiAqIDI7Ci0KLQlidWYtPnZiLnNpemUgPSBzaXplOworCWJ1Zi0+dmIuc2l6ZSA9IGRldi0+dmJpX3dpZHRoICogZGV2LT52YmlfaGVpZ2h0ICogMjsKIAogCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgICYmICBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1Zi0+dmIud2lkdGggID0gNzIwOwotCWJ1Zi0+dmIuaGVpZ2h0ID0gMTI7CisJYnVmLT52Yi53aWR0aCAgPSBkZXYtPnZiaV93aWR0aDsKKwlidWYtPnZiLmhlaWdodCA9IGRldi0+dmJpX2hlaWdodDsKIAlidWYtPnZiLmZpZWxkICA9IGZpZWxkOwogCiAJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA4NDliMThjLi5hYzJiZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMjgyLDcgKzI4Miw3IEBACiB7CiAJdm9pZCAqc3RhcnR3cml0ZSwgKnN0YXJ0cmVhZDsKIAlpbnQgIG9mZnNldDsKLQlpbnQgYnl0ZXNwZXJsaW5lID0gNzIwOworCWludCBieXRlc3BlcmxpbmUgPSBkZXYtPnZiaV93aWR0aDsKIAogCWlmIChkZXYgPT0gTlVMTCkgewogCQllbTI4eHhfaXNvY2RiZygiZGV2IGlzIG51bGxcbiIpOwpAQCAtMzIzLDggKzMyMyw4IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhlIGJvdHRvbSBmaWVsZCBwb3B1bGF0ZXMgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBmcmFtZSAqLwogCWlmIChidWYtPnRvcF9maWVsZCA9PSAwKSB7Ci0JCXN0YXJ0d3JpdGUgKz0gYnl0ZXNwZXJsaW5lICogMHgwYzsKLQkJb2Zmc2V0ICs9IGJ5dGVzcGVybGluZSAqIDB4MGM7CisJCXN0YXJ0d3JpdGUgKz0gYnl0ZXNwZXJsaW5lICogZGV2LT52YmlfaGVpZ2h0OworCQlvZmZzZXQgKz0gYnl0ZXNwZXJsaW5lICogZGV2LT52YmlfaGVpZ2h0OwogCX0KIAogCW1lbWNweShzdGFydHdyaXRlLCBzdGFydHJlYWQsIGxlbik7CkBAIC01NzgsOCArNTc4LDcgQEAKIAkJCWRldi0+Y3VyX2ZpZWxkID0gcFsyXTsKIAkJfQogCi0JCS8qIEZJWE1FOiBnZXQgcmlkIG9mIGhhcmQtY29kZWQgdmFsdWUgKi8KLQkJdmJpX3NpemUgPSA3MjAgKiAweDBjOworCQl2Ymlfc2l6ZSA9IGRldi0+dmJpX3dpZHRoICogZGV2LT52YmlfaGVpZ2h0OwogCiAJCWlmIChkZXYtPmNhcHR1cmVfdHlwZSA9PSAwKSB7CiAJCQlpZiAoZGV2LT52YmlfcmVhZCA+PSB2Ymlfc2l6ZSkgewpAQCAtMTg1MCwxOCArMTg0OSwyNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKIHsKLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDcyMDsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CisJc3RydWN0IGVtMjh4eCAgICAgICAgICpkZXYgPSBmaC0+ZGV2OworCisJZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSBkZXYtPnZiaV93aWR0aDsKIAlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOwogCWZvcm1hdC0+Zm10LnZiaS5vZmZzZXQgPSAwOwogCWZvcm1hdC0+Zm10LnZiaS5mbGFncyA9IDA7CisJZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7CisJZm9ybWF0LT5mbXQudmJpLmNvdW50WzBdID0gZGV2LT52YmlfaGVpZ2h0OworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IGRldi0+dmJpX2hlaWdodDsKIAogCS8qIFZhcmllcyBieSB2aWRlbyBzdGFuZGFyZCAoTlRTQywgUEFMLCBldGMuKSAqLwotCS8qIEZJWE1FOiBoYXJkLWNvZGVkIGZvciBOVFNDIHN1cHBvcnQgKi8KLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsgLyogRklYTUU6ID8/PyAqLwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCS8qIE5UU0MgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gMTA7CisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwl9IGVsc2UgaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgeworCQkvKiBQQUwgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gNjsKKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMzE4OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTg2OSwxOCArMTg3NywyNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKIHsKLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDcyMDsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CisJc3RydWN0IGVtMjh4eCAgICAgICAgICpkZXYgPSBmaC0+ZGV2OworCisJZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSBkZXYtPnZiaV93aWR0aDsKIAlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOwogCWZvcm1hdC0+Zm10LnZiaS5vZmZzZXQgPSAwOwogCWZvcm1hdC0+Zm10LnZiaS5mbGFncyA9IDA7CisJZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7CisJZm9ybWF0LT5mbXQudmJpLmNvdW50WzBdID0gZGV2LT52YmlfaGVpZ2h0OworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IGRldi0+dmJpX2hlaWdodDsKIAogCS8qIFZhcmllcyBieSB2aWRlbyBzdGFuZGFyZCAoTlRTQywgUEFMLCBldGMuKSAqLwotCS8qIEZJWE1FOiBoYXJkLWNvZGVkIGZvciBOVFNDIHN1cHBvcnQgKi8KLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsgLyogRklYTUU6ID8/PyAqLwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCS8qIE5UU0MgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gMTA7CisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwl9IGVsc2UgaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgeworCQkvKiBQQUwgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gNjsKKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMzE4OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTkyMiw3ICsxOTM5LDggQEAKIAkJICAgQXQgYSBtaW5pbXVtLCBpdCBjYXVzZXMgYSBjcmFzaCBpbiB6dmJpIHNpbmNlIGl0IGRvZXMKIAkJICAgYSBtZW1jcHkgYmFzZWQgb24gdGhlIHNvdXJjZSBidWZmZXIgbGVuZ3RoICovCiAJCWludCByZXN1bHQgPSB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZiaXEsIGIpOwotCQliLT5sZW5ndGggPSAxNzI4MDsKKwkJYi0+bGVuZ3RoID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOworCiAJCXJldHVybiByZXN1bHQ7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAppbmRleCA4MGQ5YjRmLi5iYTZmZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaApAQCAtMTExLDYgKzExMSw3IEBACiAjZGVmaW5lIEVNMjg2MV9CT0FSRF9HQURNRUlfVVRWMzMwUExVUyAgICAgICAgICAgNzIKICNkZWZpbmUgRU0yODcwX0JPQVJEX1JFRERPX0RWQl9DX1VTQl9CT1ggICAgICAgICAgNzMKICNkZWZpbmUgRU0yODAwX0JPQVJEX1ZDMjExQQkJCSAgNzQKKyNkZWZpbmUgRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwCQkgIDc1CiAKIC8qIExpbWl0cyBtaW5pbXVtIGFuZCBkZWZhdWx0IG51bWJlciBvZiBidWZmZXJzICovCiAjZGVmaW5lIEVNMjhYWF9NSU5fQlVGIDQKQEAgLTU1Miw3ICs1NTMsOCBAQAogCWludCBjYXB0dXJlX3R5cGU7CiAJaW50IHZiaV9yZWFkOwogCXVuc2lnbmVkIGNoYXIgY3VyX2ZpZWxkOwotCisJdW5zaWduZWQgaW50IHZiaV93aWR0aDsKKwl1bnNpZ25lZCBpbnQgdmJpX2hlaWdodDsgLyogbGluZXMgcGVyIGZpZWxkICovCiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgICByZXF1ZXN0X21vZHVsZV93azsKIApAQCAtNjkzLDYgKzY5NSw4IEBACiBpbnQgZW0yOHh4X2dldF9rZXlfZW1faGF1cChzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KTsKIGludCBlbTI4eHhfZ2V0X2tleV9waW5uYWNsZV91c2JfZ3JleShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksCiAJCQkJICAgICB1MzIgKmlyX3Jhdyk7CitpbnQgZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGUoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LAorCQkJCSAgICAgdTMyICppcl9yYXcpOwogdm9pZCBlbTI4eHhfcmVnaXN0ZXJfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBlbTI4eHggKmRldik7CiB2b2lkIGVtMjh4eF9kZXJlZ2lzdGVyX3NuYXBzaG90X2J1dHRvbihzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcKaW5kZXggZGNjMWEwMy4uODc5ODFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZwpAQCAtMSw3ICsxLDExIEBACiBjb25maWcgVVNCX0VUNjFYMjUxCi0JdHJpc3RhdGUgIlVTQiBFVDYxWFsxMl01MSBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgorCXRyaXN0YXRlICJVU0IgRVQ2MVhbMTJdNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSB6YzN4eCBtb2R1bGUKKwkgIGluc3RlYWQuCisKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBFdG9tcyBFVDYxWDE1MQogCSAgb3IgRVQ2MVgyNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKaW5kZXggNjA5ZDY1Yi4uZTAwNjBjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwpAQCAtMjEsNiArMjEsMTUgQEAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvS2NvbmZpZyIKIAorY29uZmlnIFVTQl9HU1BDQV9CRU5RCisJdHJpc3RhdGUgIkJlbnEgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEJlbnEgREMgRTMwMCBjYW1lcmEuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX2JlbnEuCisKIGNvbmZpZyBVU0JfR1NQQ0FfQ09ORVgKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC0zMCw2ICszOSwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfY29uZXguCiAKK2NvbmZpZyBVU0JfR1NQQ0FfQ1BJQTEKKwl0cmlzdGF0ZSAiY3BpYSBDUGlBICh2ZXJzaW9uIDEpIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgVVNCIGNhbWVyYXMgYmFzZWQgb24gdGhlIGNwaWEKKwkgIENQaUEgY2hpcC4gTm90ZSB0aGF0IHlvdSBuZWVkIGF0bGVhc3QgdmVyc2lvbiAwLjYuNCBvZiBsaWJ2NGwgZm9yCisJICBhcHBsaWNhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgdmlkZW9mb3JtYXQgZ2VuZXJhdGVkIGJ5IHRoaXMgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9jcGlhMS4KKwogY29uZmlnIFVTQl9HU1BDQV9FVE9NUwogCXRyaXN0YXRlICJFdG9tcyBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC04NiwxNSArMTA2LDI1IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffb3Y1MTkuCiAKIGNvbmZpZyBVU0JfR1NQQ0FfT1Y1MzQKLQl0cmlzdGF0ZSAiT1Y1MzQgVVNCIENhbWVyYSBEcml2ZXIiCisJdHJpc3RhdGUgIk9WNTM0IE9WNzcyeCBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCiAJaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBPVjUzNCBjaGlwLgotCSAgKGUuZy4gU29ueSBQbGF5c3RhdGlvbiBFWUUpCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIE9WNTM0IGNoaXAKKwkgIGFuZCBzZW5zb3IgT1Y3NzJ4IChlLmcuIFNvbnkgUGxheXN0YXRpb24gRVlFKQogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUzNC4KIAorY29uZmlnIFVTQl9HU1BDQV9PVjUzNF85CisJdHJpc3RhdGUgIk9WNTM0IE9WOTY1eCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBPVjUzNCBjaGlwCisJICBhbmQgc2Vuc29yIE9WOTY1eCAoZS5nLiBIZXJjdWxlcyBEdWFscGl4KQorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUzNF85LgorCiBjb25maWcgVVNCX0dTUENBX1BBQzIwNwogCXRyaXN0YXRlICJQaXhhcnQgUEFDMjA3IFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKQEAgLTEyMiw2ICsxNTIsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3BhYzczMTEuCiAKK2NvbmZpZyBVU0JfR1NQQ0FfU045QzIwMjgKKwl0cmlzdGF0ZSAiU09OSVggRHVhbC1Nb2RlIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN0cmVhbWluZyBzdXBwb3J0IGZvciBTb25peCBTTjlDMjAyOCBjYW1lcmFzLgorCSAgVGhlc2UgYXJlIHN1cHBvcnRlZCBhcyBzdGlsbGNhbXMgaW4gbGliZ3Bob3RvMi9jYW1saWJzL3Nvbml4LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zbjljMjAyOC4KKwogY29uZmlnIFVTQl9HU1BDQV9TTjlDMjBYCiAJdHJpc3RhdGUgIlNOOUMyMFggVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKaW5kZXggZmYyYzcyNy4uNmU0Y2YxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCkBAIC0xLDUgKzEsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkgICAgICAgICAgKz0gZ3NwY2FfbWFpbi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0JFTlEpICAgICArPSBnc3BjYV9iZW5xLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfQ09ORVgpICAgICs9IGdzcGNhX2NvbmV4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfQ1BJQTEpICAgICs9IGdzcGNhX2NwaWExLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfRVRPTVMpICAgICs9IGdzcGNhX2V0b21zLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCkgICs9IGdzcGNhX2ZpbmVwaXgubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KKSAgKz0gZ3NwY2FfamVpbGluai5vCkBAIC03LDkgKzksMTEgQEAKIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEpICs9IGdzcGNhX21yOTczMTBhLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkpICAgICs9IGdzcGNhX292NTE5Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQpICAgICs9IGdzcGNhX292NTM0Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MzRfOSkgICs9IGdzcGNhX292NTM0Xzkubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcpICAgKz0gZ3NwY2FfcGFjMjA3Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMikgICs9IGdzcGNhX3BhYzczMDIubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExKSAgKz0gZ3NwY2FfcGFjNzMxMS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NOOUMyMDI4KSArPSBnc3BjYV9zbjljMjAyOC5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NOOUMyMFgpICArPSBnc3BjYV9zbjljMjB4Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhCKSAgICs9IGdzcGNhX3Nvbml4Yi5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYSikgICArPSBnc3BjYV9zb25peGoubwpAQCAtMzAsNyArMzQsOSBAQAogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9aQzNYWCkgICAgKz0gZ3NwY2FfemMzeHgubwogCiBnc3BjYV9tYWluLW9ianMgICAgIDo9IGdzcGNhLm8KK2dzcGNhX2JlbnEtb2JqcyAgICAgOj0gYmVucS5vCiBnc3BjYV9jb25leC1vYmpzICAgIDo9IGNvbmV4Lm8KK2dzcGNhX2NwaWExLW9ianMgICAgOj0gY3BpYTEubwogZ3NwY2FfZXRvbXMtb2JqcyAgICA6PSBldG9tcy5vCiBnc3BjYV9maW5lcGl4LW9ianMgIDo9IGZpbmVwaXgubwogZ3NwY2FfamVpbGluai1vYmpzICA6PSBqZWlsaW5qLm8KQEAgLTM4LDkgKzQ0LDExIEBACiBnc3BjYV9tcjk3MzEwYS1vYmpzIDo9IG1yOTczMTBhLm8KIGdzcGNhX292NTE5LW9ianMgICAgOj0gb3Y1MTkubwogZ3NwY2Ffb3Y1MzQtb2JqcyAgICA6PSBvdjUzNC5vCitnc3BjYV9vdjUzNF85LW9ianMgIDo9IG92NTM0XzkubwogZ3NwY2FfcGFjMjA3LW9ianMgICA6PSBwYWMyMDcubwogZ3NwY2FfcGFjNzMwMi1vYmpzICA6PSBwYWM3MzAyLm8KIGdzcGNhX3BhYzczMTEtb2JqcyAgOj0gcGFjNzMxMS5vCitnc3BjYV9zbjljMjAyOC1vYmpzIDo9IHNuOWMyMDI4Lm8KIGdzcGNhX3NuOWMyMHgtb2JqcyAgOj0gc245YzIweC5vCiBnc3BjYV9zb25peGItb2JqcyAgIDo9IHNvbml4Yi5vCiBnc3BjYV9zb25peGotb2JqcyAgIDo9IHNvbml4ai5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2JlbnEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvYmVucS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYWM0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2JlbnEuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIEJlbnEgREMgRTMwMCBzdWJkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVhbi1GcmFuY29pcyBNb2luZSAoaHR0cDovL21vaW5lamYuZnJlZS5mcikKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgImJlbnEiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCZW5xIERDIEUzMDAgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCit9OworCitzdGF0aWMgdm9pZCBzZF9pc29jX2lycShzdHJ1Y3QgdXJiICp1cmIpOworCisvKiAtLSB3cml0ZSBhIHJlZ2lzdGVyIC0tICovCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1MTYgdmFsdWUsIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldDsKKworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkweDAyLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJdmFsdWUsCisJCQlpbmRleCwKKwkJCU5VTEwsCisJCQkwLAorCQkJNTAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJyZWdfdyBlcnIgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQorfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGUgPSB2Z2FfbW9kZTsKKwlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwlnc3BjYV9kZXYtPmNhbS5ub191cmJfY3JlYXRlID0gMTsKKwlnc3BjYV9kZXYtPmNhbS5yZXZlcnNlX2FsdHMgPSAxOworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfaXNvY19pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsCisJCWdzcGNhX2Rldi0+bmJhbHQgLSAxKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKy8qCXJlZ193KGdzcGNhX2RldiwgMHgwMDAzLCAweDAwMDIpOyAqLworCXJldHVybiAwOworfQorCisvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGksIG47CisKKwkvKiBjcmVhdGUgNCBVUkJzIC0gMiBvbiBlbmRwb2ludCAweDgzIGFuZCAyIG9uIDB4MDgyICovCisjaWYgTUFYX05VUkJTIDwgNAorI2Vycm9yICJOb3QgZW5vdWdoIFVSQnMgaW4gdGhlIGdzcGNhIHRhYmxlIgorI2VuZGlmCisjZGVmaW5lIFNEX1BLVF9TWiA2NAorI2RlZmluZSBTRF9OUEtUIDMyCisJZm9yIChuID0gMDsgbiA8IDQ7IG4rKykgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKFNEX05QS1QsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJZXJyKCJ1c2JfYWxsb2NfdXJiIGZhaWxlZCIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZ3NwY2FfZGV2LT51cmJbbl0gPSB1cmI7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyhnc3BjYV9kZXYtPmRldiwKKwkJCQkJCVNEX1BLVF9TWiAqIFNEX05QS1QsCisJCQkJCQlHRlBfS0VSTkVMLAorCQkJCQkJJnVyYi0+dHJhbnNmZXJfZG1hKTsKKworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJZXJyKCJ1c2JfYnVmZmVyX2FsbG9jIGZhaWxlZCIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJdXJiLT5kZXYgPSBnc3BjYV9kZXYtPmRldjsKKwkJdXJiLT5jb250ZXh0ID0gZ3NwY2FfZGV2OworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBTRF9QS1RfU1ogKiBTRF9OUEtUOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJCW4gJiAxID8gMHg4MiA6IDB4ODMpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQCisJCQkJCXwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQl1cmItPmNvbXBsZXRlID0gc2RfaXNvY19pcnE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTRF9OUEtUOworCQlmb3IgKGkgPSAwOyBpIDwgU0RfTlBLVDsgaSsrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IFNEX1BLVF9TWjsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gU0RfUEtUX1NaICogaTsKKwkJfQorCX0KKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDAzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA3KTsKKwl1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgZ3NwY2FfZGV2LT5uYmFsdCAtIDEpOworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwkvKiB1bnVzZWQgKi8KK30KKworLyogcmVjZXB0aW9uIG9mIGFuIFVSQiAqLworc3RhdGljIHZvaWQgc2RfaXNvY19pcnEoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IChzdHJ1Y3QgZ3NwY2FfZGV2ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXJiICp1cmIwOworCXU4ICpkYXRhOworCWludCBpLCBzdDsKKworCVBERUJVRyhEX1BBQ0ssICJzZCBpc29jIGlycSIpOworCWlmICghZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybjsKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikKKwkJCXJldHVybjsJCS8qIGRpc2Nvbm5lY3Rpb24gKi8KKyNpZmRlZiBDT05GSUdfUE0KKwkJaWYgKGdzcGNhX2Rldi0+ZnJvemVuKQorCQkJcmV0dXJuOworI2VuZGlmCisJCVBERUJVRyhEX0VSUnxEX1BBQ0ssICJ1cmIgc3RhdHVzOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHRoaXMgaXMgYSBjb250cm9sIFVSTiAoZXAgMHg4MyksIHdhaXQgKi8KKwlpZiAodXJiID09IGdzcGNhX2Rldi0+dXJiWzBdIHx8IHVyYiA9PSBnc3BjYV9kZXYtPnVyYlsyXSkKKwkJcmV0dXJuOworCisJLyogc2NhbiBib3RoIHJlY2VpdmVkIFVSQnMgKi8KKwlpZiAodXJiID09IGdzcGNhX2Rldi0+dXJiWzFdKQorCQl1cmIwID0gZ3NwY2FfZGV2LT51cmJbMF07CisJZWxzZQorCQl1cmIwID0gZ3NwY2FfZGV2LT51cmJbMl07CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCisJCS8qIGNoZWNrIHRoZSBwYWNrZXQgc3RhdHVzIGFuZCBsZW5ndGggKi8KKwkJaWYgKHVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggIT0gU0RfUEtUX1NaCisJCSAgICB8fCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggIT0gU0RfUEtUX1NaKSB7CisJCQlQREVCVUcoRF9FUlIsICJJU09DIGJhZCBsZW5ndGhzICVkIC8gJWQiLAorCQkJCXVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJY29udGludWU7CisJCX0KKwkJc3QgPSB1cmIwLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCWlmIChzdCA9PSAwKQorCQkJc3QgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJaWYgKHN0KSB7CisJCQlQREVCVUcoRF9FUlIsCisJCQkJIklTT0MgZGF0YSBlcnJvcjogWyVkXSBzdGF0dXM9JWQiLAorCQkJCWksIHN0KTsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBUaGUgaW1hZ2VzIGFyZSByZWNlaXZlZCBpbiBVUkJzIG9mIGRpZmZlcmVudCBlbmRwb2ludHMKKwkJICogKDB4ODMgYW5kIDB4ODIpLgorCQkgKiBJbWFnZSBwaWVjZXMgaW4gVVJCcyBvZiBlcCAweDgzIGFyZSBjb250aW51YXRlZCBpbiBVUkJzIG9mCisJCSAqIGVwIDB4ODIgb2YgdGhlIHNhbWUgaW5kZXguCisJCSAqIFRoZSBwYWNrZXRzIGluIHRoZSBVUkJzIG9mIGVuZHBvaW50IDB4ODMgc3RhcnQgd2l0aDoKKwkJICoJLSA4MCBiYS9iYiAwMCAwMCA9IHN0YXJ0IG9mIGltYWdlIGZvbGxvd2VkIGJ5ICdmZiBkOCcKKwkJICoJLSAwNCBiYS9iYiBvbyBvbyA9IGltYWdlIHBpZWNlCisJCSAqCQl3aGVyZSAnb28gb28nIGlzIHRoZSBpbWFnZSBvZmZzZXQKKwkJCQkJCShub3QgY2hla2VkKQorCQkgKgktIChvdGhlciAtPiBiYWQgZnJhbWUpCisJCSAqIFRoZSBpbWFnZXMgYXJlIEpQRUcgZW5jb2RlZCB3aXRoIGZ1bGwgaGVhZGVyIGFuZAorCQkgKiBub3JtYWwgZmYgZXNjYXBlLgorCQkgKiBUaGUgZW5kIG9mIGltYWdlICgnZmYgZDknKSBtYXkgb2NjdXIgaW4gYW55IFVSQi4KKwkJICogKG5vdCBjaGVrZWQpCisJCSAqLworCQlkYXRhID0gKHU4ICopIHVyYjAtPnRyYW5zZmVyX2J1ZmZlcgorCQkJCQkrIHVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJaWYgKGRhdGFbMF0gPT0gMHg4MCAmJiAoZGF0YVsxXSAmIDB4ZmUpID09IDB4YmEpIHsKKworCQkJLyogbmV3IGltYWdlICovCisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJTlVMTCwgMCk7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyA0LCBTRF9QS1RfU1ogLSA0KTsKKwkJfSBlbHNlIGlmIChkYXRhWzBdID09IDB4MDQgJiYgKGRhdGFbMV0gJiAweGZlKSA9PSAweGJhKSB7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsCisJCQkJCWRhdGEgKyA0LCBTRF9QS1RfU1ogLSA0KTsKKwkJfSBlbHNlIHsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJY29udGludWU7CisJCX0KKwkJZGF0YSA9ICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcgorCQkJCQkrIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULAorCQkJCQlkYXRhLCBTRF9QS1RfU1opOworCX0KKworCS8qIHJlc3VibWl0IHRoZSBVUkJzICovCisJc3QgPSB1c2Jfc3VibWl0X3VyYih1cmIwLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3QgPCAwKQorCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXNiX3N1Ym1pdF91cmIoMCkgcmV0ICVkIiwgc3QpOworCXN0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3QgPCAwKQorCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXNiX3N1Ym1pdF91cmIoKSByZXQgJWQiLCBzdCk7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5pc29jX2luaXQgPSBzZF9pc29jX2luaXQsCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDRhNSwgMHgzMDM1KX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpbmZvKCJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpbmZvKCJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjlkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBBdXRvIGdhaW4gYWxnb3JpdGhtIGZvciBjYW1lcmEncyB3aXRoIGEgY29hcnNlIGV4cG9zdXJlIGNvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogQXV0b2dhaW4gKyBleHBvc3VyZSBhbGdvcml0aG0gZm9yIGNhbWVyYXMgd2l0aCBhIGNvYXJzZSBleHBvc3VyZSBjb250cm9sCisgICAodXN1YWxseSB0aGlzIG1lYW5zIHdlIGNhbiBvbmx5IGNvbnRyb2wgdGhlIGNsb2NrZGl2IHRvIGNoYW5nZSBleHBvc3VyZSkKKyAgIEFzIGNoYW5naW5nIHRoZSBjbG9ja2RpdiBzbyB0aGF0IHRoZSBmcHMgZHJvcHMgZnJvbSAzMCB0byAxNSBmcHMgZm9yCisgICBleGFtcGxlLCB3aWxsIGxlYWQgdG8gYSBodWdlIGV4cG9zdXJlIGNoYW5nZSAoaXQgZWZmZWN0aXZlbHkgZG91YmxlcyksCisgICB0aGlzIGFsZ29yaXRobSBub3JtYWxseSB0cmllcyB0byBvbmx5IGFkanVzdCB0aGUgZ2FpbiAoYmV0d2VlbiA0MCBhbmQKKyAgIDgwICUpIGFuZCBpZiB0aGF0IGRvZXMgbm90IGhlbHAsIG9ubHkgdGhlbiBjaGFuZ2VzIGV4cG9zdXJlLiBUaGlzIGxlYWRzCisgICB0byBhIG11Y2ggbW9yZSBzdGFibGUgaW1hZ2UgdGhlbiB1c2luZyB0aGUga25lZSBhbGdvcml0aG0gd2hpY2ggYXQKKyAgIGNlcnRhaW4gcG9pbnRzIG9mIHRoZSBrbmVlIGdyYXBoIHdpbGwgb25seSB0cnkgdG8gYWRqdXN0IGV4cG9zdXJlLAorICAgd2hpY2ggbGVhZHMgdG8gb3NjaWxhdGluZyBhcyBvbmUgZXhwb3N1cmUgc3RlcCBpcyBodWdlLgorCisgICBOb3RlIHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBzZCBzdHJ1Y3QgZm9yIHRoZSBjYW0gaW4gcXVlc3Rpb24gaGFzCisgICBleHBfdG9vX2hpZ2hfY250IGFuZCBleHBfdG9vX2hpZ2hfY250IGludCBtZW1iZXJzIGZvciB1c2UgYnkgdGhpcyBmdW5jdGlvbi4KKworICAgUmV0dXJucyAwIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLCAxIGlmIHRoZSBnYWluIGFuZCBvciBleHBvc3VyZSBzZXR0aW5ncworICAgd2hlcmUgY2hhbmdlZC4gKi8KK3N0YXRpYyBpbnQgZ3NwY2FfY29hcnNlX2dyYWluZWRfZXhwb19hdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJaW50IGF2Z19sdW0sIGludCBkZXNpcmVkX2F2Z19sdW0sIGludCBkZWFkem9uZSkKK3sKKwlpbnQgaSwgc3RlcHMsIGdhaW4sIG9yaWdfZ2FpbiwgZXhwb3N1cmUsIG9yaWdfZXhwb3N1cmU7CisJaW50IGdhaW5fbG93LCBnYWluX2hpZ2g7CisJY29uc3Qgc3RydWN0IGN0cmwgKmdhaW5fY3RybCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGN0cmwgKmV4cG9zdXJlX2N0cmwgPSBOVUxMOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5jdHJsczsgaSsrKSB7CisJCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgaSkpCisJCQljb250aW51ZTsKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfR0FJTikKKwkJCWdhaW5fY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOworCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkKKwkJCWV4cG9zdXJlX2N0cmwgPSAmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXTsKKwl9CisJaWYgKCFnYWluX2N0cmwgfHwgIWV4cG9zdXJlX2N0cmwpIHsKKwkJUERFQlVHKERfRVJSLCAiRXJyb3I6IGdzcGNhX2NvYXJzZV9ncmFpbmVkX2V4cG9fYXV0b2dhaW4gIgorCQkJImNhbGxlZCBvbiBjYW0gd2l0aG91dCBnYWluIG9yIGV4cG9zdXJlIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChnYWluX2N0cmwtPmdldChnc3BjYV9kZXYsICZnYWluKSB8fAorCSAgICBleHBvc3VyZV9jdHJsLT5nZXQoZ3NwY2FfZGV2LCAmZXhwb3N1cmUpKQorCQlyZXR1cm4gMDsKKworCW9yaWdfZ2FpbiA9IGdhaW47CisJb3JpZ19leHBvc3VyZSA9IGV4cG9zdXJlOworCWdhaW5fbG93ID0KKwkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogMjsKKwlnYWluX2xvdyArPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07CisJZ2Fpbl9oaWdoID0KKwkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogNDsKKwlnYWluX2hpZ2ggKz0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtOworCisJLyogSWYgd2UgYXJlIG9mIGEgbXVsdGlwbGUgb2YgZGVhZHpvbmUsIGRvIG11bHRpcGxlIHN0ZXBzIHRvIHJlYWNoIHRoZQorCSAgIGRlc2lyZWQgbHVtaW5hdGlvbiBmYXN0ICh3aXRoIHRoZSByaXNjIG9mIGEgc2xpZ2h0IG92ZXJzaG9vdCkgKi8KKwlzdGVwcyA9IChkZXNpcmVkX2F2Z19sdW0gLSBhdmdfbHVtKSAvIGRlYWR6b25lOworCisJUERFQlVHKERfRlJBTSwgImF1dG9nYWluOiBsdW06ICVkLCBkZXNpcmVkOiAlZCwgc3RlcHM6ICVkIiwKKwkJYXZnX2x1bSwgZGVzaXJlZF9hdmdfbHVtLCBzdGVwcyk7CisKKwlpZiAoKGdhaW4gKyBzdGVwcykgPiBnYWluX2hpZ2ggJiYKKwkgICAgc2QtPmV4cG9zdXJlIDwgZXhwb3N1cmVfY3RybC0+cWN0cmwubWF4aW11bSkgeworCQlnYWluID0gZ2Fpbl9oaWdoOworCQlzZC0+ZXhwX3Rvb19sb3dfY250Kys7CisJfSBlbHNlIGlmICgoZ2FpbiArIHN0ZXBzKSA8IGdhaW5fbG93ICYmCisJCSAgIHNkLT5leHBvc3VyZSA+IGV4cG9zdXJlX2N0cmwtPnFjdHJsLm1pbmltdW0pIHsKKwkJZ2FpbiA9IGdhaW5fbG93OworCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCsrOworCX0gZWxzZSB7CisJCWdhaW4gKz0gc3RlcHM7CisJCWlmIChnYWluID4gZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtKQorCQkJZ2FpbiA9IGdhaW5fY3RybC0+cWN0cmwubWF4aW11bTsKKwkJZWxzZSBpZiAoZ2FpbiA8IGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkKKwkJCWdhaW4gPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07CisJCXNkLT5leHBfdG9vX2hpZ2hfY250ID0gMDsKKwkJc2QtPmV4cF90b29fbG93X2NudCA9IDA7CisJfQorCisJaWYgKHNkLT5leHBfdG9vX2hpZ2hfY250ID4gMykgeworCQlleHBvc3VyZS0tOworCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7CisJfSBlbHNlIGlmIChzZC0+ZXhwX3Rvb19sb3dfY250ID4gMykgeworCQlleHBvc3VyZSsrOworCQlzZC0+ZXhwX3Rvb19sb3dfY250ID0gMDsKKwl9CisKKwlpZiAoZ2FpbiAhPSBvcmlnX2dhaW4pIHsKKwkJZ2Fpbl9jdHJsLT5zZXQoZ3NwY2FfZGV2LCBnYWluKTsKKwkJcmV0dmFsID0gMTsKKwl9CisJaWYgKGV4cG9zdXJlICE9IG9yaWdfZXhwb3N1cmUpIHsKKwkJZXhwb3N1cmVfY3RybC0+c2V0KGdzcGNhX2RldiwgZXhwb3N1cmUpOworCQlyZXR2YWwgPSAxOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKaW5kZXggYzk4YjVkNi4uMTlmZTZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkCSA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogfQogCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTQ1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NwaWExLmMKQEAgLTAsMCArMSwyMDIyIEBACisvKgorICogY3BpYSBDUGlBICgxKSBnc3BjYSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSGFucyBkZSBHb2VkZSA8aGRnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIGFkYXB0ZWQgZnJvbSB0aGUgaW4ga2VybmVsIHY0bDEgY3BpYSBkcml2ZXIgd2hpY2ggaXMgOgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAwIFBldGVyIFByZWdsZXIKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAwIFNjb3R0IEouIEJlcnRpbgorICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDAgSm9oYW5uZXMgRXJkZmVsdCA8am9oYW5uZXNAZXJkZmVsdC5jb20+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAgU1RNaWNyb2VsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJjcGlhMSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKK01PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGhkZ29lZGVAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVmlzaW9uIENQaUEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogY29uc3RhbnQgdmFsdWUncyAqLworI2RlZmluZSBNQUdJQ18wCQkweDE5CisjZGVmaW5lIE1BR0lDXzEJCTB4NjgKKyNkZWZpbmUgREFUQV9JTgkJMHhDMAorI2RlZmluZSBEQVRBX09VVAkweDQwCisjZGVmaW5lIFZJREVPU0laRV9RQ0lGCTAJLyogMTc2eDE0NCAqLworI2RlZmluZSBWSURFT1NJWkVfQ0lGCTEJLyogMzUyeDI4OCAqLworI2RlZmluZSBTVUJTQU1QTEVfNDIwCTAKKyNkZWZpbmUgU1VCU0FNUExFXzQyMgkxCisjZGVmaW5lIFlVVk9SREVSX1lVWVYJMAorI2RlZmluZSBZVVZPUkRFUl9VWVZZCTEKKyNkZWZpbmUgTk9UX0NPTVBSRVNTRUQJMAorI2RlZmluZSBDT01QUkVTU0VECTEKKyNkZWZpbmUgTk9fREVDSU1BVElPTgkwCisjZGVmaW5lIERFQ0lNQVRJT05fRU5BQgkxCisjZGVmaW5lIEVPSQkJMHhmZgkvKiBFbmQgT2YgSW1hZ2UgKi8KKyNkZWZpbmUgRU9MCQkweGZkCS8qIEVuZCBPZiBMaW5lICovCisjZGVmaW5lIEZSQU1FX0hFQURFUl9TSVpFCTY0CisKKy8qIEltYWdlIGdyYWIgbW9kZXMgKi8KKyNkZWZpbmUgQ1BJQV9HUkFCX1NJTkdMRQkwCisjZGVmaW5lIENQSUFfR1JBQl9DT05USU5FT1VTCTEKKworLyogQ29tcHJlc3Npb24gcGFyYW1ldGVycyAqLworI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX05PTkUJMAorI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX0FVVE8JMQorI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX01BTlVBTAkyCisjZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX1FVQUxJVFkgICAgICAgICAwCisjZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX0ZSQU1FUkFURSAgICAgICAxCisKKy8qIFJldHVybiBvZmZzZXRzIGZvciBHZXRDYW1lcmFTdGF0ZSAqLworI2RlZmluZSBTWVNURU1TVEFURQkwCisjZGVmaW5lIEdSQUJTVEFURQkxCisjZGVmaW5lIFNUUkVBTVNUQVRFCTIKKyNkZWZpbmUgRkFUQUxFUlJPUgkzCisjZGVmaW5lIENNREVSUk9SCTQKKyNkZWZpbmUgREVCVUdGTEFHUwk1CisjZGVmaW5lIFZQU1RBVFVTCTYKKyNkZWZpbmUgRVJST1JDT0RFCTcKKworLyogU3lzdGVtU3RhdGUgKi8KKyNkZWZpbmUgVU5JTklUSUFMSVNFRF9TVEFURQkwCisjZGVmaW5lIFBBU1NfVEhST1VHSF9TVEFURQkxCisjZGVmaW5lIExPX1BPV0VSX1NUQVRFCQkyCisjZGVmaW5lIEhJX1BPV0VSX1NUQVRFCQkzCisjZGVmaW5lIFdBUk1fQk9PVF9TVEFURQkJNAorCisvKiBHcmFiU3RhdGUgKi8KKyNkZWZpbmUgR1JBQl9JRExFCQkwCisjZGVmaW5lIEdSQUJfQUNUSVZFCQkxCisjZGVmaW5lIEdSQUJfRE9ORQkJMgorCisvKiBTdHJlYW1TdGF0ZSAqLworI2RlZmluZSBTVFJFQU1fTk9UX1JFQURZCTAKKyNkZWZpbmUgU1RSRUFNX1JFQURZCQkxCisjZGVmaW5lIFNUUkVBTV9PUEVOCQkyCisjZGVmaW5lIFNUUkVBTV9QQVVTRUQJCTMKKyNkZWZpbmUgU1RSRUFNX0ZJTklTSEVECQk0CisKKy8qIEZhdGFsIEVycm9yLCBDbWRFcnJvciwgYW5kIERlYnVnRmxhZ3MgKi8KKyNkZWZpbmUgQ1BJQV9GTEFHCSAgMQorI2RlZmluZSBTWVNURU1fRkxBRwkgIDIKKyNkZWZpbmUgSU5UX0NUUkxfRkxBRwkgIDQKKyNkZWZpbmUgUFJPQ0VTU19GTEFHCSAgOAorI2RlZmluZSBDT01fRkxBRwkgMTYKKyNkZWZpbmUgVlBfQ1RSTF9GTEFHCSAzMgorI2RlZmluZSBDQVBUVVJFX0ZMQUcJIDY0CisjZGVmaW5lIERFQlVHX0ZMQUcJMTI4CisKKy8qIFZQU3RhdHVzICovCisjZGVmaW5lIFZQX1NUQVRFX09LCQkJMHgwMAorCisjZGVmaW5lIFZQX1NUQVRFX0ZBSUxFRF9WSURFT0lOSVQJMHgwMQorI2RlZmluZSBWUF9TVEFURV9GQUlMRURfQUVDQUNCSU5JVAkweDAyCisjZGVmaW5lIFZQX1NUQVRFX0FFQ19NQVgJCTB4MDQKKyNkZWZpbmUgVlBfU1RBVEVfQUNCX0JNQVgJCTB4MDgKKworI2RlZmluZSBWUF9TVEFURV9BQ0JfUk1JTgkJMHgxMAorI2RlZmluZSBWUF9TVEFURV9BQ0JfR01JTgkJMHgyMAorI2RlZmluZSBWUF9TVEFURV9BQ0JfUk1BWAkJMHg0MAorI2RlZmluZSBWUF9TVEFURV9BQ0JfR01BWAkJMHg4MAorCisvKiBkZWZhdWx0IChtaW5pbXVtKSBjb21wZW5zYXRpb24gdmFsdWVzICovCisjZGVmaW5lIENPTVBfUkVEICAgICAgICAyMjAKKyNkZWZpbmUgQ09NUF9HUkVFTjEgICAgIDIxNAorI2RlZmluZSBDT01QX0dSRUVOMiAgICAgQ09NUF9HUkVFTjEKKyNkZWZpbmUgQ09NUF9CTFVFICAgICAgIDIzMAorCisvKiBleHBvc3VyZSBzdGF0dXMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfVkVSWV9MSUdIVCAwCisjZGVmaW5lIEVYUE9TVVJFX0xJR0hUICAgICAgMQorI2RlZmluZSBFWFBPU1VSRV9OT1JNQUwgICAgIDIKKyNkZWZpbmUgRVhQT1NVUkVfREFSSyAgICAgICAzCisjZGVmaW5lIEVYUE9TVVJFX1ZFUllfREFSSyAgNAorCisjZGVmaW5lIENQSUFfTU9EVUxFX0NQSUEJCQkoMCA8PCA1KQorI2RlZmluZSBDUElBX01PRFVMRV9TWVNURU0JCQkoMSA8PCA1KQorI2RlZmluZSBDUElBX01PRFVMRV9WUF9DVFJMCQkJKDUgPDwgNSkKKyNkZWZpbmUgQ1BJQV9NT0RVTEVfQ0FQVFVSRQkJCSg2IDw8IDUpCisjZGVmaW5lIENQSUFfTU9EVUxFX0RFQlVHCQkJKDcgPDwgNSkKKworI2RlZmluZSBJTlBVVCAoREFUQV9JTiA8PCA4KQorI2RlZmluZSBPVVRQVVQgKERBVEFfT1VUIDw8IDgpCisKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uCShJTlBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0UG5QSUQJCShJTlBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzCShJTlBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b0hpUG93ZXIJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b0xvUG93ZXIJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA1KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b1N1c3BlbmQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA3KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b1Bhc3NUaHJvdWdoCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX01vZGlmeUNhbWVyYVN0YXR1cwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDEwKQorCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkVkNSZWdzCQkoSU5QVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfV3JpdGVWQ1JlZwkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDIpCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0cwkoSU5QVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRCYXVkUmF0ZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEVDUFRpbWluZwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1JlYWRJREFUQQkJKElOUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlSURBVEEJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2VuZXJpY0NhbGwJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDkpCisjZGVmaW5lIENQSUFfQ09NTUFORF9JMkNTdGFydAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDEwKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSTJDU3RvcAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDExKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSTJDV3JpdGUJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0kyQ1JlYWQJCShJTlBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDEzKQorCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb24JKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZXNldEZyYW1lQ291bnRlcgkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbG91clBhcmFtcwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDMpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRFeHBvc3VyZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb2xvdXJCYWxhbmNlCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFNlbnNvckZQUwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDcpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRWUERlZmF1bHRzCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEFwY29yCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDkpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRGbGlja2VyQ3RybAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDEwKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0VkxPZmZzZXQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldENvbG91clBhcmFtcwkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTYpCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxNykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFNlbnNvck1hdHJpeAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDE5KQorI2RlZmluZSBDUElBX0NPTU1BTkRfQ29sb3VyQmFycwkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAyNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1JlYWRWUFJlZ3MJCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAzMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlVlBSZWcJCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMzEpCisKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dyYWJGcmFtZQkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfVXBsb2FkRnJhbWUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0R3JhYk1vZGUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSW5pdFN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9GaW5pU3RyZWFtQ2FwCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1N0YXJ0U3RyZWFtQ2FwCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0VuZFN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDcpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRGb3JtYXQJCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFJPSQkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA5KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb24JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uVGFyZ2V0IChPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRZVVZUaHJlc2gJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uUGFyYW1zIChPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTMpCisjZGVmaW5lIENQSUFfQ09NTUFORF9EaXNjYXJkRnJhbWUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxNCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dyYWJSZXNldAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxNSkKKworI2RlZmluZSBDUElBX0NPTU1BTkRfT3V0cHV0UlMyMzIJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0Fib3J0UHJvY2VzcwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0RHJhbVBhZ2UJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1N0YXJ0RHJhbVVwbG9hZAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA2KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU3RhcnREdW1teUR0cmVhbQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfQWJvcnRTdHJlYW0JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgOSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0Rvd25sb2FkRFJBTQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCAxMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX051bGwJCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDExKQorCisjZGVmaW5lIFJPVU5EX1VQX0VYUF9GT1JfRkxJQ0tFUiAxNQorCisvKiBDb25zdGFudHMgZm9yIGF1dG9tYXRpYyBmcmFtZSByYXRlIGFkanVzdG1lbnQgKi8KKyNkZWZpbmUgTUFYX0VYUCAgICAgICAzMDIKKyNkZWZpbmUgTUFYX0VYUF8xMDIgICAyNTUKKyNkZWZpbmUgTE9XX0VYUCAgICAgICAxNDAKKyNkZWZpbmUgVkVSWV9MT1dfRVhQICAgNzAKKyNkZWZpbmUgVEMgICAgICAgICAgICAgOTQKKyNkZWZpbmUJRVhQX0FDQ19EQVJLICAgNTAKKyNkZWZpbmUJRVhQX0FDQ19MSUdIVCAgOTAKKyNkZWZpbmUgSElHSF9DT01QXzEwMiAxNjAKKyNkZWZpbmUgTUFYX0NPTVAgICAgICAyMzkKKyNkZWZpbmUgREFSS19USU1FICAgICAgIDMKKyNkZWZpbmUgTElHSFRfVElNRSAgICAgIDMKKworI2RlZmluZSBGSVJNV0FSRV9WRVJTSU9OKHgsIHkpIChzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID09ICh4KSAmJiBcCisJCQkJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gKHkpKQorCisvKiBEZXZlbG9wZXIncyBHdWlkZSBUYWJsZSA1IHAgMy0zNAorICogaW5kZXhlZCBieSBbbWFpbnNdW3NlbnNvckZwcy5iYXNlcmF0ZV1bc2Vuc29yRnBzLmRpdmlzb3JdKi8KK3N0YXRpYyB1OCBmbGlja2VyX2p1bXBzWzJdWzJdWzRdID0KK3sgeyB7IDc2LCAzOCwgMTksIDkgfSwgeyA5MiwgNDYsIDIzLCAxMSB9IH0sCisgIHsgeyA2NCwgMzIsIDE2LCA4IH0sIHsgNzYsIDM4LCAxOSwgOX0gfQorfTsKKworc3RydWN0IGNhbV9wYXJhbXMgeworCXN0cnVjdCB7CisJCXU4IGZpcm13YXJlVmVyc2lvbjsKKwkJdTggZmlybXdhcmVSZXZpc2lvbjsKKwkJdTggdmNWZXJzaW9uOworCQl1OCB2Y1JldmlzaW9uOworCX0gdmVyc2lvbjsKKwlzdHJ1Y3QgeworCQl1MTYgdmVuZG9yOworCQl1MTYgcHJvZHVjdDsKKwkJdTE2IGRldmljZVJldmlzaW9uOworCX0gcG5wSUQ7CisJc3RydWN0IHsKKwkJdTggdnBWZXJzaW9uOworCQl1OCB2cFJldmlzaW9uOworCQl1MTYgY2FtZXJhSGVhZElEOworCX0gdnBWZXJzaW9uOworCXN0cnVjdCB7CisJCXU4IHN5c3RlbVN0YXRlOworCQl1OCBncmFiU3RhdGU7CisJCXU4IHN0cmVhbVN0YXRlOworCQl1OCBmYXRhbEVycm9yOworCQl1OCBjbWRFcnJvcjsKKwkJdTggZGVidWdGbGFnczsKKwkJdTggdnBTdGF0dXM7CisJCXU4IGVycm9yQ29kZTsKKwl9IHN0YXR1czsKKwlzdHJ1Y3QgeworCQl1OCBicmlnaHRuZXNzOworCQl1OCBjb250cmFzdDsKKwkJdTggc2F0dXJhdGlvbjsKKwl9IGNvbG91clBhcmFtczsKKwlzdHJ1Y3QgeworCQl1OCBnYWluTW9kZTsKKwkJdTggZXhwTW9kZTsKKwkJdTggY29tcE1vZGU7CisJCXU4IGNlbnRyZVdlaWdodDsKKwkJdTggZ2FpbjsKKwkJdTggZmluZUV4cDsKKwkJdTggY29hcnNlRXhwTG87CisJCXU4IGNvYXJzZUV4cEhpOworCQl1OCByZWRDb21wOworCQl1OCBncmVlbjFDb21wOworCQl1OCBncmVlbjJDb21wOworCQl1OCBibHVlQ29tcDsKKwl9IGV4cG9zdXJlOworCXN0cnVjdCB7CisJCXU4IGJhbGFuY2VNb2RlOworCQl1OCByZWRHYWluOworCQl1OCBncmVlbkdhaW47CisJCXU4IGJsdWVHYWluOworCX0gY29sb3VyQmFsYW5jZTsKKwlzdHJ1Y3QgeworCQl1OCBkaXZpc29yOworCQl1OCBiYXNlcmF0ZTsKKwl9IHNlbnNvckZwczsKKwlzdHJ1Y3QgeworCQl1OCBnYWluMTsKKwkJdTggZ2FpbjI7CisJCXU4IGdhaW40OworCQl1OCBnYWluODsKKwl9IGFwY29yOworCXN0cnVjdCB7CisJCXU4IGRpc2FibGVkOworCQl1OCBmbGlja2VyTW9kZTsKKwkJdTggY29hcnNlSnVtcDsKKwkJdTggYWxsb3dhYmxlT3ZlckV4cG9zdXJlOworCX0gZmxpY2tlckNvbnRyb2w7CisJc3RydWN0IHsKKwkJdTggZ2FpbjE7CisJCXU4IGdhaW4yOworCQl1OCBnYWluNDsKKwkJdTggZ2Fpbjg7CisJfSB2bE9mZnNldDsKKwlzdHJ1Y3QgeworCQl1OCBtb2RlOworCQl1OCBkZWNpbWF0aW9uOworCX0gY29tcHJlc3Npb247CisJc3RydWN0IHsKKwkJdTggZnJUYXJnZXRpbmc7CisJCXU4IHRhcmdldEZSOworCQl1OCB0YXJnZXRROworCX0gY29tcHJlc3Npb25UYXJnZXQ7CisJc3RydWN0IHsKKwkJdTggeVRocmVzaG9sZDsKKwkJdTggdXZUaHJlc2hvbGQ7CisJfSB5dXZUaHJlc2hvbGQ7CisJc3RydWN0IHsKKwkJdTggaHlzdGVyZXNpczsKKwkJdTggdGhyZXNoTWF4OworCQl1OCBzbWFsbFN0ZXA7CisJCXU4IGxhcmdlU3RlcDsKKwkJdTggZGVjaW1hdGlvbkh5c3RlcmVzaXM7CisJCXU4IGZyRGlmZlN0ZXBUaHJlc2g7CisJCXU4IHFEaWZmU3RlcFRocmVzaDsKKwkJdTggZGVjaW1hdGlvblRocmVzaE1vZDsKKwl9IGNvbXByZXNzaW9uUGFyYW1zOworCXN0cnVjdCB7CisJCXU4IHZpZGVvU2l6ZTsJCS8qIENJRi9RQ0lGICovCisJCXU4IHN1YlNhbXBsZTsKKwkJdTggeXV2T3JkZXI7CisJfSBmb3JtYXQ7CisJc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlbCBRWDMgc3BlY2lmaWMgZGF0YSAqLworCQl1OCBxeDNfZGV0ZWN0ZWQ7ICAgICAgICAvKiBhIFFYMyBpcyBwcmVzZW50ICovCisJCXU4IHRvcGxpZ2h0OyAgICAgICAgICAgIC8qIHRvcCBsaWdodCBsaXQgLCBSL1cgKi8KKwkJdTggYm90dG9tbGlnaHQ7ICAgICAgICAgLyogYm90dG9tIGxpZ2h0IGxpdCwgUi9XICovCisJCXU4IGJ1dHRvbjsgICAgICAgICAgICAgIC8qIHNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkIChSL08pICovCisJCXU4IGNyYWRsZWQ7ICAgICAgICAgICAgIC8qIG1pY3Jvc2NvcGUgaXMgaW4gY3JhZGxlIChSL08pICovCisJfSBxeDM7CisJc3RydWN0IHsKKwkJdTggY29sU3RhcnQ7CQkvKiBza2lwIGZpcnN0IDgqY29sU3RhcnQgcGl4ZWxzICovCisJCXU4IGNvbEVuZDsJCS8qIGZpbmlzaCBhdCA4KmNvbEVuZCBwaXhlbHMgKi8KKwkJdTggcm93U3RhcnQ7CQkvKiBza2lwIGZpcnN0IDQqcm93U3RhcnQgbGluZXMgKi8KKwkJdTggcm93RW5kOwkJLyogZmluaXNoIGF0IDQqcm93RW5kIGxpbmVzICovCisJfSByb2k7CisJdTggZWNwVGltaW5nOworCXU4IHN0cmVhbVN0YXJ0TGluZTsKK307CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCXN0cnVjdCBjYW1fcGFyYW1zIHBhcmFtczsJCS8qIGNhbWVyYSBzZXR0aW5ncyAqLworCisJYXRvbWljX3QgY2FtX2V4cG9zdXJlOworCWF0b21pY190IGZwczsKKwlpbnQgZXhwb3N1cmVfY291bnQ7CisJdTggZXhwb3N1cmVfc3RhdHVzOworCXU4IG1haW5zRnJlcTsJCQkJLyogMCA9IDUwaHosIDEgPSA2MGh6ICovCisJdTggZmlyc3RfZnJhbWU7CisJdTggZnJlcTsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2F0dXJhdGlvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb21wdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29tcHRhcmdldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMTAwLAorCQkuc3RlcCA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDUwCisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJCS5mbGFncyA9IDAsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDk2LAorCQkuc3RlcCAgICA9IDgsCisjZGVmaW5lIENPTlRSQVNUX0RFRiA0OAorCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNhdHVyYXRpb24iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMTAwLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNBVFVSQVRJT05fREVGIDUwCisJCS5kZWZhdWx0X3ZhbHVlID0gU0FUVVJBVElPTl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRzYXR1cmF0aW9uLAorCSAgICAuZ2V0ID0gc2RfZ2V0c2F0dXJhdGlvbiwKKwl9LAorCXsKKwkJeworCQkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAorCQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDIsCS8qIDA6IDAsIDE6IDUwSHosIDI6NjBIeiAqLworCQkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBGUkVRX0RFRiAxCisJCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0ZnJlcSwKKwkJLmdldCA9IHNkX2dldGZyZXEsCisJfSwKKwl7CisJCXsKKyNkZWZpbmUgVjRMMl9DSURfQ09NUF9UQVJHRVQgVjRMMl9DSURfUFJJVkFURV9CQVNFCisJCQkuaWQJID0gVjRMMl9DSURfQ09NUF9UQVJHRVQsCisJCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCQkubmFtZSAgICA9ICJDb21wcmVzc2lvbiBUYXJnZXQiLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAxLAorCQkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT01QX1RBUkdFVF9ERUYgQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfUVVBTElUWQorCQkJLmRlZmF1bHRfdmFsdWUgPSBDT01QX1RBUkdFVF9ERUYsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRjb21wdGFyZ2V0LAorCQkuZ2V0ID0gc2RfZ2V0Y29tcHRhcmdldCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgbW9kZVtdID0geworCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS8qIFRoZSBzaXplaW1hZ2UgaXMgdHJpYWwgYW5kIGVycm9yLCBhcyB3aXRoIGxvdyBmcmFtZXJhdGVzCisJCSAgIHRoZSBjYW1lcmEgd2lsbCBwYWQgb3V0IHVzYiBmcmFtZXMsIG1ha2luZyB0aGUgaW1hZ2UKKwkJICAgZGF0YSBsYXJnZXIgdGhlbiBzdHJpY3RseSBuZWNlc3NhcnkgKi8KKwkJLmJ5dGVzcGVybGluZSA9IDE2MCwKKwkJLnNpemVpbWFnZSA9IDY1NTM2LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDN9LAorCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNzIsCisJCS5zaXplaW1hZ2UgPSA2NTUzNiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAyfSwKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9DUElBMSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMjYyMTQ0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDF9LAorCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5zaXplaW1hZ2UgPSAyNjIxNDQsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdlbmVyYWwgZnVuY3Rpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgY3BpYV91c2JfdHJhbnNmZXJDbWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCAqY29tbWFuZCkKK3sKKwl1OCByZXF1ZXN0dHlwZTsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwlpbnQgcmV0LCBkYXRhYnl0ZXMgPSBjb21tYW5kWzZdIHwgKGNvbW1hbmRbN10gPDwgOCk7CisJLyogU29tZXRpbWVzIHdlIHNlZSBzcHVyaW91cyBFUElQRSBlcnJvcnMgKi8KKwlpbnQgcmV0cmllcyA9IDM7CisKKwlpZiAoY29tbWFuZFswXSA9PSBEQVRBX0lOKSB7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOworCQlyZXF1ZXN0dHlwZSA9IFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCX0gZWxzZSBpZiAoY29tbWFuZFswXSA9PSBEQVRBX09VVCkgeworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKKwkJcmVxdWVzdHR5cGUgPSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCX0gZWxzZSB7CisJCVBERUJVRyhEX0VSUiwgIlVuZXhwZWN0ZWQgZmlyc3QgYnl0ZSBvZiBjb21tYW5kOiAleCIsCisJCSAgICAgICBjb21tYW5kWzBdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCityZXRyeToKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHBpcGUsCisJCQkgICAgICBjb21tYW5kWzFdLAorCQkJICAgICAgcmVxdWVzdHR5cGUsCisJCQkgICAgICBjb21tYW5kWzJdIHwgKGNvbW1hbmRbM10gPDwgOCksCisJCQkgICAgICBjb21tYW5kWzRdIHwgKGNvbW1hbmRbNV0gPDwgOCksCisJCQkgICAgICBnc3BjYV9kZXYtPnVzYl9idWYsIGRhdGFieXRlcywgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAidXNiX2NvbnRyb2xfbXNnICUwMngsIGVycm9yICVkIiwgY29tbWFuZFsxXSwKKwkJICAgICAgIHJldCk7CisKKwlpZiAocmV0ID09IC1FUElQRSAmJiByZXRyaWVzID4gMCkgeworCQlyZXRyaWVzLS07CisJCWdvdG8gcmV0cnk7CisJfQorCisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IDA7Cit9CisKKy8qIHNlbmQgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgdG8gdGhlIGNhbWVyYSAqLworc3RhdGljIGludCBkb19jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGNvbW1hbmQsCisJCSAgICAgIHU4IGEsIHU4IGIsIHU4IGMsIHU4IGQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQsIGRhdGFzaXplOworCXU4IGNtZFs4XTsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldFBuUElEOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1czoKKwljYXNlIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb246CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyUGFyYW1zOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2U6CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0RXhwb3N1cmU6CisJCWRhdGFzaXplID0gODsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6CisJY2FzZSBDUElBX0NPTU1BTkRfUmVhZFZDUmVnczoKKwkJZGF0YXNpemUgPSA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhc2l6ZSA9IDA7CisJCWJyZWFrOworCX0KKworCWNtZFswXSA9IGNvbW1hbmQgPj4gODsKKwljbWRbMV0gPSBjb21tYW5kICYgMHhmZjsKKwljbWRbMl0gPSBhOworCWNtZFszXSA9IGI7CisJY21kWzRdID0gYzsKKwljbWRbNV0gPSBkOworCWNtZFs2XSA9IGRhdGFzaXplOworCWNtZFs3XSA9IDA7CisKKwlyZXQgPSBjcGlhX3VzYl90cmFuc2ZlckNtZChnc3BjYV9kZXYsIGNtZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uOgorCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjVmVyc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjUmV2aXNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbM107CisJCWJyZWFrOworCWNhc2UgQ1BJQV9DT01NQU5EX0dldFBuUElEOgorCQlzZC0+cGFyYW1zLnBucElELnZlbmRvciA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdIDw8IDgpOworCQlzZC0+cGFyYW1zLnBucElELnByb2R1Y3QgPQorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzJdIHwgKGdzcGNhX2Rldi0+dXNiX2J1ZlszXSA8PCA4KTsKKwkJc2QtPnBhcmFtcy5wbnBJRC5kZXZpY2VSZXZpc2lvbiA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbNF0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzVdIDw8IDgpOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXM6CisJCXNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5ncmFiU3RhdGUgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMuc3RhdHVzLnN0cmVhbVN0YXRlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5mYXRhbEVycm9yID0gZ3NwY2FfZGV2LT51c2JfYnVmWzNdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5jbWRFcnJvciA9IGdzcGNhX2Rldi0+dXNiX2J1Zls0XTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMuZGVidWdGbGFncyA9IGdzcGNhX2Rldi0+dXNiX2J1Zls1XTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMudnBTdGF0dXMgPSBnc3BjYV9kZXYtPnVzYl9idWZbNl07CisJCXNkLT5wYXJhbXMuc3RhdHVzLmVycm9yQ29kZSA9IGdzcGNhX2Rldi0+dXNiX2J1Zls3XTsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uOgorCQlzZC0+cGFyYW1zLnZwVmVyc2lvbi52cFZlcnNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMudnBWZXJzaW9uLnZwUmV2aXNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMudnBWZXJzaW9uLmNhbWVyYUhlYWRJRCA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzNdIDw8IDgpOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJQYXJhbXM6CisJCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0ID0gZ3NwY2FfZGV2LT51c2JfYnVmWzFdOworCQlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlOgorCQlzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UucmVkR2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmdyZWVuR2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJsdWVHYWluID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZToKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBnc3BjYV9kZXYtPnVzYl9idWZbMl07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBnc3BjYV9kZXYtPnVzYl9idWZbM107CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IGdzcGNhX2Rldi0+dXNiX2J1Zls0XTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gZ3NwY2FfZGV2LT51c2JfYnVmWzVdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbNl07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbN107CisJCWJyZWFrOworCisJY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6CisJCWlmICghc2QtPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKQorCQkJYnJlYWs7CisJCS8qIHRlc3QgYnV0dG9uIHByZXNzICovCisJCXNkLT5wYXJhbXMucXgzLmJ1dHRvbiA9ICgoZ3NwY2FfZGV2LT51c2JfYnVmWzFdICYgMHgwMikgPT0gMCk7CisJCWlmIChzZC0+cGFyYW1zLnF4My5idXR0b24pIHsKKwkJCS8qIGJ1dHRvbiBwcmVzc2VkIC0gdW5sb2NrIHRoZSBsYXRjaCAqLworCQkJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Xcml0ZU1DUG9ydCwKKwkJCQkgICAzLCAweERGLCAweERGLCAwKTsKKwkJCWRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsCisJCQkJICAgMywgMHhGRiwgMHhGRiwgMCk7CisJCX0KKworCQkvKiB0ZXN0IHdoZXRoZXIgbWljcm9zY29wZSBpcyBjcmFkbGVkICovCisJCXNkLT5wYXJhbXMucXgzLmNyYWRsZWQgPSAoKGdzcGNhX2Rldi0+dXNiX2J1ZlsyXSAmIDB4NDApID09IDApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogc2VuZCBhIGNvbW1hbmQgdG8gdGhlIGNhbWVyYSB3aXRoIGFuIGFkZGl0aW9uYWwgZGF0YSB0cmFuc2FjdGlvbiAqLworc3RhdGljIGludCBkb19jb21tYW5kX2V4dGVuZGVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGNvbW1hbmQsCisJCQkgICAgICAgdTggYSwgdTggYiwgdTggYywgdTggZCwKKwkJCSAgICAgICB1OCBlLCB1OCBmLCB1OCBnLCB1OCBoLAorCQkJICAgICAgIHU4IGksIHU4IGosIHU4IGssIHU4IGwpCit7CisJdTggY21kWzhdOworCisJY21kWzBdID0gY29tbWFuZCA+PiA4OworCWNtZFsxXSA9IGNvbW1hbmQgJiAweGZmOworCWNtZFsyXSA9IGE7CisJY21kWzNdID0gYjsKKwljbWRbNF0gPSBjOworCWNtZFs1XSA9IGQ7CisJY21kWzZdID0gODsKKwljbWRbN10gPSAwOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IGU7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gZjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSBnOworCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9IGg7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzRdID0gaTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbNV0gPSBqOworCWdzcGNhX2Rldi0+dXNiX2J1Zls2XSA9IGs7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzddID0gbDsKKworCXJldHVybiBjcGlhX3VzYl90cmFuc2ZlckNtZChnc3BjYV9kZXYsIGNtZCk7Cit9CisKKy8qICBmaW5kX292ZXJfZXhwb3N1cmUKKyAqICBGaW5kcyBhIHN1aXRhYmxlIHZhbHVlIG9mIE92ZXJFeHBvc3VyZSBmb3IgdXNlIHdpdGggU2V0RmxpY2tlckN0cmwKKyAqICBTb21lIGNhbGN1bGF0aW9uIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhpcyB2YWx1ZSBjaGFuZ2VzIHdpdGggdGhlIGJyaWdodG5lc3MKKyAqICBzZXQgd2l0aCBTZXRDb2xvdXJQYXJhbWV0ZXJzCisgKgorICogIFBhcmFtZXRlcnM6IEJyaWdodG5lc3MgLSBsYXN0IGJyaWdodG5lc3MgdmFsdWUgc2V0IHdpdGggU2V0Q29sb3VyUGFyYW1ldGVycworICoKKyAqICBSZXR1cm5zOiBPdmVyRXhwb3N1cmUgdmFsdWUgdG8gdXNlIHdpdGggU2V0RmxpY2tlckN0cmwKKyAqLworI2RlZmluZSBGTElDS0VSX01BWF9FWFBPU1VSRSAgICAgICAgICAgICAgICAgICAgMjUwCisjZGVmaW5lIEZMSUNLRVJfQUxMT1dBQkxFX09WRVJfRVhQT1NVUkUgICAgICAgICAxNDYKKyNkZWZpbmUgRkxJQ0tFUl9CUklHSFRORVNTX0NPTlNUQU5UICAgICAgICAgICAgIDU5CitzdGF0aWMgaW50IGZpbmRfb3Zlcl9leHBvc3VyZShpbnQgYnJpZ2h0bmVzcykKK3sKKwlpbnQgTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlLCBPdmVyRXhwb3N1cmU7CisKKwlNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmUgPSBGTElDS0VSX01BWF9FWFBPU1VSRSAtIGJyaWdodG5lc3MgLQorCQkJCSAgIEZMSUNLRVJfQlJJR0hUTkVTU19DT05TVEFOVDsKKworCWlmIChNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmUgPCBGTElDS0VSX0FMTE9XQUJMRV9PVkVSX0VYUE9TVVJFKQorCQlPdmVyRXhwb3N1cmUgPSBNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmU7CisJZWxzZQorCQlPdmVyRXhwb3N1cmUgPSBGTElDS0VSX0FMTE9XQUJMRV9PVkVSX0VYUE9TVVJFOworCisJcmV0dXJuIE92ZXJFeHBvc3VyZTsKK30KKyN1bmRlZiBGTElDS0VSX01BWF9FWFBPU1VSRQorI3VuZGVmIEZMSUNLRVJfQUxMT1dBQkxFX09WRVJfRVhQT1NVUkUKKyN1bmRlZiBGTElDS0VSX0JSSUdIVE5FU1NfQ09OU1RBTlQKKworLyogaW5pdGlhbGlzZSBjYW1fZGF0YSBzdHJ1Y3R1cmUgICovCitzdGF0aWMgdm9pZCByZXNldF9jYW1lcmFfcGFyYW1zKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbV9wYXJhbXMgKnBhcmFtcyA9ICZzZC0+cGFyYW1zOworCisJLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgdmFsdWVzIGFyZSB0aGUgZGVmYXVsdHMgZnJvbQorCSAqICJTb2Z0d2FyZSBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQ1BpQSBDYW1lcmFzIi4gIEFueSBjaGFuZ2VzCisJICogdG8gdGhlIGRlZmF1bHRzIGFyZSBub3RlZCBpbiBjb21tZW50cy4gKi8KKwlwYXJhbXMtPmNvbG91clBhcmFtcy5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJcGFyYW1zLT5jb2xvdXJQYXJhbXMuY29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJcGFyYW1zLT5jb2xvdXJQYXJhbXMuc2F0dXJhdGlvbiA9IFNBVFVSQVRJT05fREVGOworCXBhcmFtcy0+ZXhwb3N1cmUuZ2Fpbk1vZGUgPSA0OworCXBhcmFtcy0+ZXhwb3N1cmUuZXhwTW9kZSA9IDI7CQkvKiBBRUMgKi8KKwlwYXJhbXMtPmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKKwlwYXJhbXMtPmV4cG9zdXJlLmNlbnRyZVdlaWdodCA9IDE7CisJcGFyYW1zLT5leHBvc3VyZS5nYWluID0gMDsKKwlwYXJhbXMtPmV4cG9zdXJlLmZpbmVFeHAgPSAwOworCXBhcmFtcy0+ZXhwb3N1cmUuY29hcnNlRXhwTG8gPSAxODU7CisJcGFyYW1zLT5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IDA7CisJcGFyYW1zLT5leHBvc3VyZS5yZWRDb21wID0gQ09NUF9SRUQ7CisJcGFyYW1zLT5leHBvc3VyZS5ncmVlbjFDb21wID0gQ09NUF9HUkVFTjE7CisJcGFyYW1zLT5leHBvc3VyZS5ncmVlbjJDb21wID0gQ09NUF9HUkVFTjI7CisJcGFyYW1zLT5leHBvc3VyZS5ibHVlQ29tcCA9IENPTVBfQkxVRTsKKwlwYXJhbXMtPmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPSAyOwkvKiBBQ0IgKi8KKwlwYXJhbXMtPmNvbG91ckJhbGFuY2UucmVkR2FpbiA9IDMyOworCXBhcmFtcy0+Y29sb3VyQmFsYW5jZS5ncmVlbkdhaW4gPSA2OworCXBhcmFtcy0+Y29sb3VyQmFsYW5jZS5ibHVlR2FpbiA9IDkyOworCXBhcmFtcy0+YXBjb3IuZ2FpbjEgPSAweDE4OworCXBhcmFtcy0+YXBjb3IuZ2FpbjIgPSAweDE2OworCXBhcmFtcy0+YXBjb3IuZ2FpbjQgPSAweDI0OworCXBhcmFtcy0+YXBjb3IuZ2FpbjggPSAweDM0OworCXBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPSAwOworCXBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOworCisJcGFyYW1zLT5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJZmxpY2tlcl9qdW1wc1tzZC0+bWFpbnNGcmVxXQorCQkJICAgICBbcGFyYW1zLT5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkgICAgIFtwYXJhbXMtPnNlbnNvckZwcy5kaXZpc29yXTsKKwlwYXJhbXMtPmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA9CisJCWZpbmRfb3Zlcl9leHBvc3VyZShwYXJhbXMtPmNvbG91clBhcmFtcy5icmlnaHRuZXNzKTsKKwlwYXJhbXMtPnZsT2Zmc2V0LmdhaW4xID0gMjA7CisJcGFyYW1zLT52bE9mZnNldC5nYWluMiA9IDI0OworCXBhcmFtcy0+dmxPZmZzZXQuZ2FpbjQgPSAyNjsKKwlwYXJhbXMtPnZsT2Zmc2V0LmdhaW44ID0gMjY7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzID0gMzsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLnRocmVzaE1heCA9IDExOworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwID0gMTsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLmxhcmdlU3RlcCA9IDM7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uSHlzdGVyZXNpcyA9IDI7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoID0gNTsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCA9IDM7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uVGhyZXNoTW9kID0gMjsKKwkvKiBFbmQgb2YgZGVmYXVsdCB2YWx1ZXMgZnJvbSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBHdWlkZSAqLworCisJLyogU2V0IFNlbnNvciBGUFMgdG8gMTVmcHMuIFRoaXMgc2VlbXMgYmV0dGVyIHRoYW4gMzBmcHMKKwkgKiBmb3IgaW5kb29yIGxpZ2h0aW5nLiAqLworCXBhcmFtcy0+c2Vuc29yRnBzLmRpdmlzb3IgPSAxOworCXBhcmFtcy0+c2Vuc29yRnBzLmJhc2VyYXRlID0gMTsKKworCXBhcmFtcy0+eXV2VGhyZXNob2xkLnlUaHJlc2hvbGQgPSA2OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisJcGFyYW1zLT55dXZUaHJlc2hvbGQudXZUaHJlc2hvbGQgPSA2OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisKKwlwYXJhbXMtPmZvcm1hdC5zdWJTYW1wbGUgPSBTVUJTQU1QTEVfNDIwOworCXBhcmFtcy0+Zm9ybWF0Lnl1dk9yZGVyID0gWVVWT1JERVJfWVVZVjsKKworCXBhcmFtcy0+Y29tcHJlc3Npb24ubW9kZSA9IENQSUFfQ09NUFJFU1NJT05fQVVUTzsKKwlwYXJhbXMtPmNvbXByZXNzaW9uLmRlY2ltYXRpb24gPSBOT19ERUNJTUFUSU9OOworCisJcGFyYW1zLT5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9IENPTVBfVEFSR0VUX0RFRjsKKwlwYXJhbXMtPmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSID0gMTU7IC8qIEZyb20gd2luZG93cyBkcml2ZXIgKi8KKwlwYXJhbXMtPmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEgPSA1OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisKKwlwYXJhbXMtPnF4My5xeDNfZGV0ZWN0ZWQgPSAwOworCXBhcmFtcy0+cXgzLnRvcGxpZ2h0ID0gMDsKKwlwYXJhbXMtPnF4My5ib3R0b21saWdodCA9IDA7CisJcGFyYW1zLT5xeDMuYnV0dG9uID0gMDsKKwlwYXJhbXMtPnF4My5jcmFkbGVkID0gMDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRzdGF0dXMoc3RydWN0IGNhbV9wYXJhbXMgKnBhcmFtcykKK3sKKwlQREVCVUcoRF9QUk9CRSwgInN0YXR1czogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKKwkgICAgICAgcGFyYW1zLT5zdGF0dXMuc3lzdGVtU3RhdGUsIHBhcmFtcy0+c3RhdHVzLmdyYWJTdGF0ZSwKKwkgICAgICAgcGFyYW1zLT5zdGF0dXMuc3RyZWFtU3RhdGUsIHBhcmFtcy0+c3RhdHVzLmZhdGFsRXJyb3IsCisJICAgICAgIHBhcmFtcy0+c3RhdHVzLmNtZEVycm9yLCBwYXJhbXMtPnN0YXR1cy5kZWJ1Z0ZsYWdzLAorCSAgICAgICBwYXJhbXMtPnN0YXR1cy52cFN0YXR1cywgcGFyYW1zLT5zdGF0dXMuZXJyb3JDb2RlKTsKK30KKworc3RhdGljIGludCBnb3RvX2xvd19wb3dlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dvdG9Mb1Bvd2VyLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgIT0gTE9fUE9XRVJfU1RBVEUpIHsKKwkJaWYgKHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlICE9IFdBUk1fQk9PVF9TVEFURSkgeworCQkJUERFQlVHKERfRVJSLAorCQkJICAgICAgICJ1bmV4cGVjdGVkIHN0YXRlIGFmdGVyIGxvIHBvd2VyIGNtZDogJTAyeCIsCisJCQkgICAgICAgc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUpOworCQkJcHJpbnRzdGF0dXMoJnNkLT5wYXJhbXMpOworCQl9CisJCXJldHVybiAtRUlPOworCX0KKworCVBERUJVRyhEX0NPTkYsICJjYW1lcmEgbm93IGluIExPVyBwb3dlciBzdGF0ZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvdG9faGlnaF9wb3dlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dvdG9IaVBvd2VyLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXNsZWVwX2ludGVycnVwdGlibGUoNDApOwkvKiB3aW5kb3dzIGRyaXZlciBkb2VzIGl0IHRvbyAqLworCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVJTlRSOworCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgIT0gSElfUE9XRVJfU1RBVEUpIHsKKwkJUERFQlVHKERfRVJSLCAidW5leHBlY3RlZCBzdGF0ZSBhZnRlciBoaSBwb3dlciBjbWQ6ICUwMngiLAorCQkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlKTsKKwkJcHJpbnRzdGF0dXMoJnNkLT5wYXJhbXMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlQREVCVUcoRF9DT05GLCAiY2FtZXJhIG5vdyBpbiBISUdIIHBvd2VyIHN0YXRlIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3ZlcnNpb25faW5mb3JtYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXQ7CisKKwkvKiBHZXRDUElBVmVyc2lvbiAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q1BJQVZlcnNpb24sIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBHZXRQblBJRCAqLworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldFBuUElELCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIGludCBzYXZlX2NhbWVyYV9zdGF0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZSwgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlLCAwLCAwLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0Zm9ybWF0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Rm9ybWF0LAorCQkJIHNkLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSwKKwkJCSBzZC0+cGFyYW1zLmZvcm1hdC5zdWJTYW1wbGUsCisJCQkgc2QtPnBhcmFtcy5mb3JtYXQueXV2T3JkZXIsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRST0ksCisJCQkgIHNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0LCBzZC0+cGFyYW1zLnJvaS5jb2xFbmQsCisJCQkgIHNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0LCBzZC0+cGFyYW1zLnJvaS5yb3dFbmQpOworfQorCitpbnQgY29tbWFuZF9zZXRjb2xvdXJwYXJhbXMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb2xvdXJQYXJhbXMsCisJCQkgIHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MsCisJCQkgIHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0LAorCQkJICBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0YXBjb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRBcGNvciwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluMSwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluMiwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluNCwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluOCk7Cit9CisKK2ludCBjb21tYW5kX3NldHZsb2Zmc2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0VkxPZmZzZXQsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjEsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjIsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjQsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjgpOworfQorCitpbnQgY29tbWFuZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kX2V4dGVuZGVkKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEV4cG9zdXJlLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZSwKKwkJCQkgIDEsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jZW50cmVXZWlnaHQsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4sCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlICE9IDEpIHsKKwkJcmV0ID0gZG9fY29tbWFuZF9leHRlbmRlZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRFeHBvc3VyZSwKKwkJCQkJICAwLAorCQkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSwKKwkJCQkJICAwLCAwLAorCQkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiwKKwkJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAsCisJCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbywKKwkJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpLAorCQkJCQkgIDAsIDAsIDAsIDApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbG91cmJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPT0gMSkgeworCQlpbnQgcmV0OworCisJCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZSwKKwkJCQkgMSwKKwkJCQkgc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLnJlZEdhaW4sCisJCQkJIHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ncmVlbkdhaW4sCisJCQkJIHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ibHVlR2Fpbik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJICAzLCAwLCAwLCAwKTsKKwl9CisJaWYgKHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9PSAyKSB7CisJCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJICAyLCAwLCAwLCAwKTsKKwl9CisJaWYgKHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9PSAzKSB7CisJCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJICAzLCAwLCAwLCAwKTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IGNvbW1hbmRfc2V0Y29tcHJlc3Npb250YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uVGFyZ2V0LAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEsIDApOworfQorCitpbnQgY29tbWFuZF9zZXR5dXZ0cmVzaChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0WVVWVGhyZXNoLAorCQkJICBzZC0+cGFyYW1zLnl1dlRocmVzaG9sZC55VGhyZXNob2xkLAorCQkJICBzZC0+cGFyYW1zLnl1dlRocmVzaG9sZC51dlRocmVzaG9sZCwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbXByZXNzaW9ucGFyYW1zKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZF9leHRlbmRlZChnc3BjYV9kZXYsCisJCQkgICAgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uUGFyYW1zLAorCQkJICAgIDAsIDAsIDAsIDAsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMudGhyZXNoTWF4LAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMubGFyZ2VTdGVwLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvbkh5c3RlcmVzaXMsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMucURpZmZTdGVwVGhyZXNoLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvblRocmVzaE1vZCk7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbXByZXNzaW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvbiwKKwkJCSAgc2QtPnBhcmFtcy5jb21wcmVzc2lvbi5tb2RlLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uLmRlY2ltYXRpb24sIDAsIDApOworfQorCitpbnQgY29tbWFuZF9zZXRzZW5zb3JmcHMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldFNlbnNvckZQUywKKwkJCSAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciwKKwkJCSAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9zZXRmbGlja2VyY3RybChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0RmxpY2tlckN0cmwsCisJCQkgIHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUsCisJCQkgIHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCwKKwkJCSAgc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUsCisJCQkgIDApOworfQorCitpbnQgY29tbWFuZF9zZXRlY3B0aW1pbmcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEVDUFRpbWluZywKKwkJCSAgc2QtPnBhcmFtcy5lY3BUaW1pbmcsIDAsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9wYXVzZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfRW5kU3RyZWFtQ2FwLCAwLCAwLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfcmVzdW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Jbml0U3RyZWFtQ2FwLAorCQkJICAwLCBzZC0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGxpZ2h0cyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQsIHAxLCBwMjsKKworCWlmICghc2QtPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKQorCQlyZXR1cm4gMDsKKworCXAxID0gKHNkLT5wYXJhbXMucXgzLmJvdHRvbWxpZ2h0ID09IDApIDw8IDE7CisJcDIgPSAoc2QtPnBhcmFtcy5xeDMudG9wbGlnaHQgPT0gMCkgPDwgMzsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVWQ1JlZywKKwkJCSAweDkwLCAweDhGLCAweDUwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsIDIsIDAsCisJCQkgIHAxIHwgcDIgfCAweEUwLCAwKTsKK30KKworc3RhdGljIGludCBzZXRfZmxpY2tlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBvbiwgaW50IGFwcGx5KQoreworCS8qIEV2ZXJ5dGhpbmcgaW4gaGVyZSBpcyBmcm9tIHRoZSBXaW5kb3dzIGRyaXZlciAqLworLyogZGVmaW5lIGZvciBjb21wZ2FpbiBjYWxjdWxhdGlvbiAqLworI2lmIDAKKyNkZWZpbmUgQ09NUEdBSU4oYmFzZSwgY3VyZXhwLCBuZXdleHApIFwKKyAgICAodTgpICgoKChmbG9hdCkgYmFzZSAtIDEyOC4wKSAqICgoZmxvYXQpIGN1cmV4cCAvIChmbG9hdCkgbmV3ZXhwKSkgKyAxMjguNSkKKyNkZWZpbmUgRVhQX0ZST01fQ09NUChiYXNlY29tcCwgY3VyY29tcCwgY3VyZXhwKSBcCisgICAgKHUxNikoKGZsb2F0KWN1cmV4cCAqIChmbG9hdCkodTgpKGN1cmNvbXAgKyAxMjgpIC8gXAorICAgIChmbG9hdCkodTgpKGJhc2Vjb21wIC0gMTI4KSkKKyNlbHNlCisgIC8qIGVxdWl2YWxlbnQgZnVuY3Rpb25zIHdpdGhvdXQgZmxvYXRpbmcgcG9pbnQgbWF0aCAqLworI2RlZmluZSBDT01QR0FJTihiYXNlLCBjdXJleHAsIG5ld2V4cCkgXAorICAgICh1OCkoMTI4ICsgKCgodTMyKSgyKihiYXNlLTEyOCkqY3VyZXhwICsgbmV3ZXhwKSkgLyAoMiAqIG5ld2V4cCkpKQorI2RlZmluZSBFWFBfRlJPTV9DT01QKGJhc2Vjb21wLCBjdXJjb21wLCBjdXJleHApIFwKKyAgICAodTE2KSgoKHUzMikoY3VyZXhwICogKHU4KShjdXJjb21wICsgMTI4KSkgLyAodTgpKGJhc2Vjb21wIC0gMTI4KSkpCisjZW5kaWYKKworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgY3VycmVudGV4cCA9IHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gKworCQkJIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgKiAyNTY7CisJaW50IHJldCwgc3RhcnRleHA7CisKKwlpZiAob24pIHsKKwkJaW50IGNqID0gc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wOworCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID0gMTsKKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDA7CisJCWlmIChzZC0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgIT0gMikgeworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlID0gMjsKKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCX0KKwkJY3VycmVudGV4cCA9IGN1cnJlbnRleHAgPDwgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4gPSAwOworCQkvKiByb3VuZCBkb3duIGN1cnJlbnQgZXhwb3N1cmUgdG8gbmVhcmVzdCB2YWx1ZSAqLworCQlzdGFydGV4cCA9IChjdXJyZW50ZXhwICsgUk9VTkRfVVBfRVhQX0ZPUl9GTElDS0VSKSAvIGNqOworCQlpZiAoc3RhcnRleHAgPCAxKQorCQkJc3RhcnRleHAgPSAxOworCQlzdGFydGV4cCA9IChzdGFydGV4cCAqIGNqKSAtIDE7CisJCWlmIChGSVJNV0FSRV9WRVJTSU9OKDEsIDIpKQorCQkJd2hpbGUgKHN0YXJ0ZXhwID4gTUFYX0VYUF8xMDIpCisJCQkJc3RhcnRleHAgLT0gY2o7CisJCWVsc2UKKwkJCXdoaWxlIChzdGFydGV4cCA+IE1BWF9FWFApCisJCQkJc3RhcnRleHAgLT0gY2o7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBzdGFydGV4cCAmIDB4ZmY7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBzdGFydGV4cCA+PiA4OworCQlpZiAoY3VycmVudGV4cCA+IHN0YXJ0ZXhwKSB7CisJCQlpZiAoY3VycmVudGV4cCA+ICgyICogc3RhcnRleHApKQorCQkJCWN1cnJlbnRleHAgPSAyICogc3RhcnRleHA7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfUkVELCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfR1JFRU4xLCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfR1JFRU4yLCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wID0KKwkJCQlDT01QR0FJTihDT01QX0JMVUUsIGN1cnJlbnRleHAsIHN0YXJ0ZXhwKTsKKwkJfSBlbHNlIHsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IENPTVBfUkVEOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gQ09NUF9HUkVFTjE7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBDT01QX0dSRUVOMjsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBDT01QX0JMVUU7CisJCX0KKwkJaWYgKEZJUk1XQVJFX1ZFUlNJT04oMSwgMikpCisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlID0gMDsKKwkJZWxzZQorCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb21wTW9kZSA9IDE7CisKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluMSA9IDB4MTg7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjIgPSAweDE4OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW40ID0gMHgxNjsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluOCA9IDB4MTQ7CisJfSBlbHNlIHsKKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9IDA7CisJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOworCQkvKiBBdmVyYWdlIGVxdWl2YWxlbnQgY29hcnNlIGZvciBlYWNoIGNvbXAgY2hhbm5lbCAqLworCQlzdGFydGV4cCA9IEVYUF9GUk9NX0NPTVAoQ09NUF9SRUQsCisJCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLCBjdXJyZW50ZXhwKTsKKwkJc3RhcnRleHAgKz0gRVhQX0ZST01fQ09NUChDT01QX0dSRUVOMSwKKwkJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAsIGN1cnJlbnRleHApOworCQlzdGFydGV4cCArPSBFWFBfRlJPTV9DT01QKENPTVBfR1JFRU4yLAorCQkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCwgY3VycmVudGV4cCk7CisJCXN0YXJ0ZXhwICs9IEVYUF9GUk9NX0NPTVAoQ09NUF9CTFVFLAorCQkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAsIGN1cnJlbnRleHApOworCQlzdGFydGV4cCA9IHN0YXJ0ZXhwID4+IDI7CisJCXdoaWxlIChzdGFydGV4cCA+IE1BWF9FWFAgJiYgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluIDwKKwkJICAgICAgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgLSAxKSB7CisJCQlzdGFydGV4cCA9IHN0YXJ0ZXhwID4+IDE7CisJCQkrK3NkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbjsKKwkJfQorCQlpZiAoRklSTVdBUkVfVkVSU0lPTigxLCAyKSAmJiBzdGFydGV4cCA+IE1BWF9FWFBfMTAyKQorCQkJc3RhcnRleHAgPSBNQVhfRVhQXzEwMjsKKwkJaWYgKHN0YXJ0ZXhwID4gTUFYX0VYUCkKKwkJCXN0YXJ0ZXhwID0gTUFYX0VYUDsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IHN0YXJ0ZXhwICYgMHhmZjsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IHN0YXJ0ZXhwID4+IDg7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IENPTVBfUkVEOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAgPSBDT01QX0dSRUVOMTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wID0gQ09NUF9HUkVFTjI7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBDT01QX0JMVUU7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29tcE1vZGUgPSAxOworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW4xID0gMHgxODsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluMiA9IDB4MTY7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjQgPSAweDI0OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW44ID0gMHgzNDsKKwl9CisJc2QtPnBhcmFtcy52bE9mZnNldC5nYWluMSA9IDIwOworCXNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjIgPSAyNDsKKwlzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW40ID0gMjY7CisJc2QtPnBhcmFtcy52bE9mZnNldC5nYWluOCA9IDI2OworCisJaWYgKGFwcGx5KSB7CisJCXJldCA9IGNvbW1hbmRfc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gY29tbWFuZF9zZXRhcGNvcihnc3BjYV9kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBjb21tYW5kX3NldHZsb2Zmc2V0KGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisjdW5kZWYgRVhQX0ZST01fQ09NUAorI3VuZGVmIENPTVBHQUlOCit9CisKKy8qIG1vbml0b3IgdGhlIGV4cG9zdXJlIGFuZCBhZGp1c3QgdGhlIHNlbnNvciBmcmFtZSByYXRlIGlmIG5lZWRlZCAqLworc3RhdGljIHZvaWQgbW9uaXRvcl9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGV4cF9hY2MsIGJjb21wLCBnYWluLCBjb2Fyc2VMLCBjbWRbOF07CisJaW50IHJldCwgbGlnaHRfZXhwLCBkYXJrX2V4cCwgdmVyeV9kYXJrX2V4cDsKKwlpbnQgb2xkX2V4cG9zdXJlLCBuZXdfZXhwb3N1cmUsIGZyYW1lcmF0ZTsKKwlpbnQgc2V0ZnBzID0gMCwgc2V0ZXhwID0gMCwgc2V0ZmxpY2tlciA9IDA7CisKKwkvKiBnZXQgbmVjZXNzYXJ5IHN0YXRzIGFuZCByZWdpc3RlciBzZXR0aW5ncyBmcm9tIGNhbWVyYSAqLworCS8qIGRvX2NvbW1hbmQgY2FuJ3QgaGFuZGxlIHRoaXMsIHNvIGRvIGl0IG91cnNlbHZlcyAqLworCWNtZFswXSA9IENQSUFfQ09NTUFORF9SZWFkVlBSZWdzID4+IDg7CisJY21kWzFdID0gQ1BJQV9DT01NQU5EX1JlYWRWUFJlZ3MgJiAweGZmOworCWNtZFsyXSA9IDMwOworCWNtZFszXSA9IDQ7CisJY21kWzRdID0gOTsKKwljbWRbNV0gPSA4OworCWNtZFs2XSA9IDg7CisJY21kWzddID0gMDsKKwlyZXQgPSBjcGlhX3VzYl90cmFuc2ZlckNtZChnc3BjYV9kZXYsIGNtZCk7CisJaWYgKHJldCkgeworCQlQREVCVUcoRF9FUlIsICJSZWFkVlBSZWdzKDMwLDQsOSw4KSAtIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm47CisJfQorCWV4cF9hY2MgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJYmNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJZ2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwljb2Fyc2VMID0gZ3NwY2FfZGV2LT51c2JfYnVmWzNdOworCisJbGlnaHRfZXhwID0gc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyArCisJCSAgICBUQyAtIDUwICsgRVhQX0FDQ19MSUdIVDsKKwlpZiAobGlnaHRfZXhwID4gMjU1KQorCQlsaWdodF9leHAgPSAyNTU7CisJZGFya19leHAgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzICsKKwkJICAgVEMgLSA1MCAtIEVYUF9BQ0NfREFSSzsKKwlpZiAoZGFya19leHAgPCAwKQorCQlkYXJrX2V4cCA9IDA7CisJdmVyeV9kYXJrX2V4cCA9IGRhcmtfZXhwIC8gMjsKKworCW9sZF9leHBvc3VyZSA9IHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgKiAyNTYgKworCQkgICAgICAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbzsKKworCWlmICghc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCkgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb24gKi8KKwkJaW50IG1heF9jb21wID0gRklSTVdBUkVfVkVSU0lPTigxLCAyKSA/IE1BWF9DT01QIDoKKwkJCQkJCQlISUdIX0NPTVBfMTAyOworCQliY29tcCArPSAxMjg7CS8qIGRlY29kZSAqLworCQlpZiAoYmNvbXAgPj0gbWF4X2NvbXAgJiYgZXhwX2FjYyA8IGRhcmtfZXhwKSB7CisJCQkvKiBkYXJrICovCisJCQlpZiAoZXhwX2FjYyA8IHZlcnlfZGFya19leHApIHsKKwkJCQkvKiB2ZXJ5IGRhcmsgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUkspCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0KKwkJCQkJCUVYUE9TVVJFX1ZFUllfREFSSzsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGp1c3QgZGFyayAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0RBUkspCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfREFSSzsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAob2xkX2V4cG9zdXJlIDw9IExPV19FWFAgfHwgZXhwX2FjYyA+IGxpZ2h0X2V4cCkgeworCQkJLyogbGlnaHQgKi8KKwkJCWlmIChvbGRfZXhwb3N1cmUgPD0gVkVSWV9MT1dfRVhQKSB7CisJCQkJLyogdmVyeSBsaWdodCAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQpCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0KKwkJCQkJCUVYUE9TVVJFX1ZFUllfTElHSFQ7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBqdXN0IGxpZ2h0ICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfTElHSFQpCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTElHSFQ7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJLyogbm90IGRhcmsgb3IgbGlnaHQgKi8KKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb2ZmICovCisJCWlmIChvbGRfZXhwb3N1cmUgPj0gTUFYX0VYUCAmJiBleHBfYWNjIDwgZGFya19leHApIHsKKwkJCS8qIGRhcmsgKi8KKwkJCWlmIChleHBfYWNjIDwgdmVyeV9kYXJrX2V4cCkgeworCQkJCS8qIHZlcnkgZGFyayAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfREFSSykKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPQorCQkJCQkJRVhQT1NVUkVfVkVSWV9EQVJLOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoganVzdCBkYXJrICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9EQVJLOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChvbGRfZXhwb3N1cmUgPD0gTE9XX0VYUCB8fCBleHBfYWNjID4gbGlnaHRfZXhwKSB7CisJCQkvKiBsaWdodCAqLworCQkJaWYgKG9sZF9leHBvc3VyZSA8PSBWRVJZX0xPV19FWFApIHsKKwkJCQkvKiB2ZXJ5IGxpZ2h0ICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9MSUdIVCkKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPQorCQkJCQkJRVhQT1NVUkVfVkVSWV9MSUdIVDsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGp1c3QgbGlnaHQgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9MSUdIVDsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBub3QgZGFyayBvciBsaWdodCAqLworCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJfQorCX0KKworCWZyYW1lcmF0ZSA9IGF0b21pY19yZWFkKCZzZC0+ZnBzKTsKKwlpZiAoZnJhbWVyYXRlID4gMzAgfHwgZnJhbWVyYXRlIDwgMSkKKwkJZnJhbWVyYXRlID0gMTsKKworCWlmICghc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCkgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb24gKi8KKwkJaWYgKChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfREFSSyB8fAorCQkgICAgIHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykgJiYKKwkJICAgIHNkLT5leHBvc3VyZV9jb3VudCA+PSBEQVJLX1RJTUUgKiBmcmFtZXJhdGUgJiYKKwkJICAgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPCAzKSB7CisKKwkJCS8qIGRhcmsgZm9yIHRvbyBsb25nICovCisJCQkrK3NkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7CisJCQlzZXRmcHMgPSAxOworCisJCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQorCQkJCWZsaWNrZXJfanVtcHNbc2QtPm1haW5zRnJlcV0KKwkJCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOworCQkJc2V0ZmxpY2tlciA9IDE7CisKKwkJCW5ld19leHBvc3VyZSA9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcC0xOworCQkJd2hpbGUgKG5ld19leHBvc3VyZSA8IG9sZF9leHBvc3VyZSAvIDIpCisJCQkJbmV3X2V4cG9zdXJlICs9CisJCQkJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBuZXdfZXhwb3N1cmUgJiAweGZmOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IG5ld19leHBvc3VyZSA+PiA4OworCQkJc2V0ZXhwID0gMTsKKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCQlQREVCVUcoRF9DT05GLCAiQXV0b21hdGljYWxseSBkZWNyZWFzaW5nIHNlbnNvcl9mcHMiKTsKKworCQl9IGVsc2UgaWYgKChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQgfHwKKwkJCSAgICBzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0xJR0hUKSAmJgorCQkJICAgc2QtPmV4cG9zdXJlX2NvdW50ID49IExJR0hUX1RJTUUgKiBmcmFtZXJhdGUgJiYKKwkJCSAgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPiAwKSB7CisKKwkJCS8qIGxpZ2h0IGZvciB0b28gbG9uZyAqLworCQkJaW50IG1heF9leHAgPSBGSVJNV0FSRV9WRVJTSU9OKDEsIDIpID8gTUFYX0VYUF8xMDIgOgorCQkJCQkJCSAgICAgICBNQVhfRVhQOworCQkJLS1zZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOworCQkJc2V0ZnBzID0gMTsKKworCQkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJCQlmbGlja2VyX2p1bXBzW3NkLT5tYWluc0ZyZXFdCisJCQkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQorCQkJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKKwkJCXNldGZsaWNrZXIgPSAxOworCisJCQluZXdfZXhwb3N1cmUgPSBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAtMTsKKwkJCXdoaWxlIChuZXdfZXhwb3N1cmUgPCAyICogb2xkX2V4cG9zdXJlICYmCisJCQkgICAgICAgbmV3X2V4cG9zdXJlICsKKwkJCSAgICAgICBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPCBtYXhfZXhwKQorCQkJCW5ld19leHBvc3VyZSArPQorCQkJCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXA7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvID0gbmV3X2V4cG9zdXJlICYgMHhmZjsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBuZXdfZXhwb3N1cmUgPj4gODsKKwkJCXNldGV4cCA9IDE7CisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQkJUERFQlVHKERfQ09ORiwgIkF1dG9tYXRpY2FsbHkgaW5jcmVhc2luZyBzZW5zb3JfZnBzIik7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb2ZmICovCisJCWlmICgoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUksgfHwKKwkJICAgICBzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0RBUkspICYmCisJCSAgICBzZC0+ZXhwb3N1cmVfY291bnQgPj0gREFSS19USU1FICogZnJhbWVyYXRlICYmCisJCSAgICBzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yIDwgMykgeworCisJCQkvKiBkYXJrIGZvciB0b28gbG9uZyAqLworCQkJKytzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOworCQkJc2V0ZnBzID0gMTsKKworCQkJaWYgKHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiA+IDApIHsKKwkJCQktLXNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbjsKKwkJCQlzZXRleHAgPSAxOworCQkJfQorCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJCVBERUJVRyhEX0NPTkYsICJBdXRvbWF0aWNhbGx5IGRlY3JlYXNpbmcgc2Vuc29yX2ZwcyIpOworCisJCX0gZWxzZSBpZiAoKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9MSUdIVCB8fAorCQkJICAgIHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfTElHSFQpICYmCisJCQkgICBzZC0+ZXhwb3N1cmVfY291bnQgPj0gTElHSFRfVElNRSAqIGZyYW1lcmF0ZSAmJgorCQkJICAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA+IDApIHsKKworCQkJLyogbGlnaHQgZm9yIHRvbyBsb25nICovCisJCQktLXNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7CisJCQlzZXRmcHMgPSAxOworCisJCQlpZiAoc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluIDwKKwkJCSAgICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlIC0gMSkgeworCQkJCSsrc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluOworCQkJCXNldGV4cCA9IDE7CisJCQl9CisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQkJUERFQlVHKERfQ09ORiwgIkF1dG9tYXRpY2FsbHkgaW5jcmVhc2luZyBzZW5zb3JfZnBzIik7CisJCX0KKwl9CisKKwlpZiAoc2V0ZXhwKQorCQljb21tYW5kX3NldGV4cG9zdXJlKGdzcGNhX2Rldik7CisKKwlpZiAoc2V0ZnBzKQorCQljb21tYW5kX3NldHNlbnNvcmZwcyhnc3BjYV9kZXYpOworCisJaWYgKHNldGZsaWNrZXIpCisJCWNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBpZiBmbGlja2VyIGlzIHN3aXRjaGVkIG9mZiwgdGhpcyBmdW5jdGlvbiBzd2l0Y2hlcyBpdCBiYWNrIG9uLkl0IGNoZWNrcywKKyAgIGhvd2V2ZXIsIHRoYXQgY29uZGl0aW9ucyBhcmUgc3VpdGFibGUgYmVmb3JlIHJlc3RhcnRpbmcgaXQuCisgICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgZmlybXdhcmUgdmVyc2lvbiAxLjIuCisKKyAgIEl0IGFsc28gYWRqdXN0IHRoZSBjb2xvdXIgYmFsYW5jZSB3aGVuIGFuIGV4cG9zdXJlIHN0ZXAgaXMgZGV0ZWN0ZWQgLSBhcworICAgbG9uZyBhcyBmbGlja2VyIGlzIHJ1bm5pbmcKKyovCitzdGF0aWMgdm9pZCByZXN0YXJ0X2ZsaWNrZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgY2FtX2V4cG9zdXJlLCBvbGRfZXhwOworCisJaWYgKCFGSVJNV0FSRV9WRVJTSU9OKDEsIDIpKQorCQlyZXR1cm47CisKKwljYW1fZXhwb3N1cmUgPSBhdG9taWNfcmVhZCgmc2QtPmNhbV9leHBvc3VyZSk7CisKKwlpZiAoc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9PSAwIHx8CisJICAgIGNhbV9leHBvc3VyZSA9PSAwKQorCQlyZXR1cm47CisKKwlvbGRfZXhwID0gc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyArCisJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSoyNTY7CisJLyoKKwkgIHNlZSBob3cgZmFyIGF3YXkgY2FtZXJhIGV4cG9zdXJlIGlzIGZyb20gYSB2YWxpZAorCSAgZmxpY2tlciBleHBvc3VyZSB2YWx1ZQorCSovCisJY2FtX2V4cG9zdXJlICU9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKKwlpZiAoIXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgJiYKKwkgICAgY2FtX2V4cG9zdXJlIDw9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCAtIDMpIHsKKwkJLyogRmxpY2tlciBjb250cm9sIGF1dG8tZGlzYWJsZWQgKi8KKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDE7CisJfQorCisJaWYgKHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgJiYKKwkgICAgb2xkX2V4cCA+IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCArCisJCSAgICAgIFJPVU5EX1VQX0VYUF9GT1JfRkxJQ0tFUikgeworCQkvKiBleHBvc3VyZSBpcyBub3cgaGlnaCBlbm91Z2ggdG8gc3dpdGNoCisJCSAgIGZsaWNrZXIgY29udHJvbCBiYWNrIG9uICovCisJCXNldF9mbGlja2VyKGdzcGNhX2RldiwgMSwgMSk7CisJfQorfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGNhbSAqY2FtOworCisJcmVzZXRfY2FtZXJhX3BhcmFtcyhnc3BjYV9kZXYpOworCisJUERFQlVHKERfUFJPQkUsICJjcGlhIENQaUEgY2FtZXJhIGRldGVjdGVkICh2aWQvcGlkIDB4JTA0WDoweCUwNFgpIiwKKwkgICAgICAgaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKKworCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwljYW0tPmNhbV9tb2RlID0gbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUobW9kZSk7CisKKwlzZF9zZXRmcmVxKGdzcGNhX2RldiwgRlJFUV9ERUYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcHJpdiwgcmV0OworCisJLyogU3RhcnQgdGhlIGNhbWVyYSBpbiBsb3cgcG93ZXIgbW9kZSAqLworCWlmIChnb3RvX2xvd19wb3dlcihnc3BjYV9kZXYpKSB7CisJCWlmIChzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSAhPSBXQVJNX0JPT1RfU1RBVEUpIHsKKwkJCVBERUJVRyhEX0VSUiwgInVuZXhwZWN0ZWQgc3lzdGVtc3RhdGU6ICUwMngiLAorCQkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlKTsKKwkJCXByaW50c3RhdHVzKCZzZC0+cGFyYW1zKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogRklYTUU6IHRoaXMgaXMganVzdCBkaXJ0eSB0cmlhbCBhbmQgZXJyb3IgKi8KKwkJcmV0ID0gZ290b19oaWdoX3Bvd2VyKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfRGlzY2FyZEZyYW1lLAorCQkJCSAwLCAwLCAwLCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZ290b19sb3dfcG93ZXIoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogcHJvY2VkdXJlIGRlc2NyaWJlZCBpbiBkZXZlbG9wZXIncyBndWlkZSBwMy0yOCAqLworCisJLyogQ2hlY2sgdGhlIGZpcm13YXJlIHZlcnNpb24uICovCisJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9IDA7CisJZ2V0X3ZlcnNpb25faW5mb3JtYXRpb24oZ3NwY2FfZGV2KTsKKwlpZiAoc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiAhPSAxKSB7CisJCVBERUJVRyhEX0VSUiwgIm9ubHkgZmlybXdhcmUgdmVyc2lvbiAxIGlzIHN1cHBvcnRlZCAoZ290OiAlZCkiLAorCQkgICAgICAgc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEEgYnVnIGluIGZpcm13YXJlIDEtMDIgbGltaXRzIGdhaW5Nb2RlIHRvIDIgKi8KKwlpZiAoc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPD0gMiAmJgorCSAgICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlID4gMikgeworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlID0gMjsKKwl9CisKKwkvKiBzZXQgUVgzIGRldGVjdGVkIGZsYWcgKi8KKwlzZC0+cGFyYW1zLnF4My5xeDNfZGV0ZWN0ZWQgPSAoc2QtPnBhcmFtcy5wbnBJRC52ZW5kb3IgPT0gMHgwODEzICYmCisJCQkJICAgICAgIHNkLT5wYXJhbXMucG5wSUQucHJvZHVjdCA9PSAweDAwMDEpOworCisJLyogVGhlIGZhdGFsIGVycm9yIGNoZWNraW5nIHNob3VsZCBiZSBkb25lIGFmdGVyCisJICogdGhlIGNhbWVyYSBwb3dlcnMgdXAgKGRldmVsb3BlcidzIGd1aWRlIHAgMy0zOCkgKi8KKworCS8qIFNldCBzdHJlYW1TdGF0ZSBiZWZvcmUgdHJhbnNpdGlvbiB0byBoaWdoIHBvd2VyIHRvIGF2b2lkIGJ1ZworCSAqIGluIGZpcm13YXJlIDEtMDIgKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX01vZGlmeUNhbWVyYVN0YXR1cywKKwkJCSBTVFJFQU1TVEFURSwgMCwgU1RSRUFNX05PVF9SRUFEWSwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEdvdG9IaVBvd2VyICovCisJcmV0ID0gZ290b19oaWdoX3Bvd2VyKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENoZWNrIHRoZSBjYW1lcmEgc3RhdHVzICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvcikgeworCQlQREVCVUcoRF9FUlIsICJmYXRhbF9lcnJvcjogJTA0eCwgdnBfc3RhdHVzOiAlMDR4IiwKKwkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLmZhdGFsRXJyb3IsCisJCSAgICAgICBzZC0+cGFyYW1zLnN0YXR1cy52cFN0YXR1cyk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFZQVmVyc2lvbiBjYW4ndCBiZSByZXRyaWV2ZWQgYmVmb3JlIHRoZSBjYW1lcmEgaXMgaW4gSGlQb3dlciwKKwkgKiBzbyBnZXQgaXQgaGVyZSBpbnN0ZWFkIG9mIGluIGdldF92ZXJzaW9uX2luZm9ybWF0aW9uLiAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRGV0ZXJtaW5lIHZpZGVvIG1vZGUgc2V0dGluZ3MgKi8KKwlzZC0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSA9IDEyMDsKKworCXByaXYgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlpZiAocHJpdiAmIDB4MDEpIHsgLyogY3JvcCAqLworCQlzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCA9IDI7CisJCXNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0ID0gNjsKKwl9IGVsc2UgeworCQlzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCA9IDA7CisJCXNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0ID0gMDsKKwl9CisKKwlpZiAocHJpdiAmIDB4MDIpIHsgLyogcXVhcnRlciAqLworCQlzZC0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUgPSBWSURFT1NJWkVfUUNJRjsKKwkJc2QtPnBhcmFtcy5yb2kuY29sU3RhcnQgLz0gMjsKKwkJc2QtPnBhcmFtcy5yb2kucm93U3RhcnQgLz0gMjsKKwkJc2QtPnBhcmFtcy5zdHJlYW1TdGFydExpbmUgLz0gMjsKKwl9IGVsc2UKKwkJc2QtPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplID0gVklERU9TSVpFX0NJRjsKKworCXNkLT5wYXJhbXMucm9pLmNvbEVuZCA9IHNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0ICsKKwkJCQkoZ3NwY2FfZGV2LT53aWR0aCA+PiAzKTsKKwlzZC0+cGFyYW1zLnJvaS5yb3dFbmQgPSBzZC0+cGFyYW1zLnJvaS5yb3dTdGFydCArCisJCQkJKGdzcGNhX2Rldi0+aGVpZ2h0ID4+IDIpOworCisJLyogQW5kIG5vdyBzZXQgdGhlIGNhbWVyYSB0byBhIGtub3duIHN0YXRlICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRHcmFiTW9kZSwKKwkJCSBDUElBX0dSQUJfQ09OVElORU9VUywgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKiBXZSBzdGFydCB3aXRoIGNvbXByZXNzaW9uIGRpc2FibGVkLCBhcyB3ZSBuZWVkIG9uZSB1bmNvbXByZXNzZWQKKwkgICBmcmFtZSB0byBoYW5kbGUgbGF0ZXIgY29tcHJlc3NlZCBmcmFtZXMgKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uLAorCQkJIENQSUFfQ09NUFJFU1NJT05fTk9ORSwKKwkJCSBOT19ERUNJTUFUSU9OLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29tcHJlc3Npb250YXJnZXQoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29sb3VycGFyYW1zKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGZvcm1hdChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXR5dXZ0cmVzaChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRlY3B0aW1pbmcoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29tcHJlc3Npb25wYXJhbXMoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29sb3VyYmFsYW5jZShnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRzZW5zb3JmcHMoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0YXBjb3IoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0dmxvZmZzZXQoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU3RhcnQgc3RyZWFtICovCisJcmV0ID0gY29tbWFuZF9yZXN1bWUoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogV2FpdCA2IGZyYW1lcyBiZWZvcmUgdHVybmluZyBjb21wcmVzc2lvbiBvbiBmb3IgdGhlIHNlbnNvciB0byBnZXQKKwkgICBhbGwgc2V0dGluZ3MgYW5kIEFFQy9BQ0IgdG8gc2V0dGxlICovCisJc2QtPmZpcnN0X2ZyYW1lID0gNjsKKwlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCXNkLT5leHBvc3VyZV9jb3VudCA9IDA7CisJYXRvbWljX3NldCgmc2QtPmNhbV9leHBvc3VyZSwgMCk7CisJYXRvbWljX3NldCgmc2QtPmZwcywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWNvbW1hbmRfcGF1c2UoZ3NwY2FfZGV2KTsKKworCS8qIHNhdmUgY2FtZXJhIHN0YXRlIGZvciBsYXRlciBvcGVuIChkZXZlbG9wZXJzIGd1aWRlIGNoIDMuNS4zKSAqLworCXNhdmVfY2FtZXJhX3N0YXRlKGdzcGNhX2Rldik7CisKKwkvKiBHb3RvTG9Qb3dlciAqLworCWdvdG9fbG93X3Bvd2VyKGdzcGNhX2Rldik7CisKKwkvKiBVcGRhdGUgdGhlIGNhbWVyYSBzdGF0dXMgKi8KKwlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cywgMCwgMCwgMCwgMCk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCS8qIFN0YXJ0IC8gU3RvcCB0aGUgY2FtZXJhIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyB0bworCSAgIGEgc3VwcG9ydGVkIGNhbWVyYSwgYW5kIHRvIGdldCBzb21lIGluZm9ybWF0aW9uIGZyb20gaXQKKwkgICB0byBwcmludC4gKi8KKwlyZXQgPSBzZF9zdGFydChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZF9zdG9wTihnc3BjYV9kZXYpOworCisJUERFQlVHKERfUFJPQkUsICJDUElBIFZlcnNpb246ICAgICAgICAgICAgICVkLiUwMmQgKCVkLiVkKSIsCisJCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uLAorCQkJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24sCisJCQlzZC0+cGFyYW1zLnZlcnNpb24udmNWZXJzaW9uLAorCQkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjUmV2aXNpb24pOworCVBERUJVRyhEX1BST0JFLCAiQ1BJQSBQblAtSUQ6ICAgICAgICAgICAgICAlMDR4OiUwNHg6JTA0eCIsCisJCQlzZC0+cGFyYW1zLnBucElELnZlbmRvciwgc2QtPnBhcmFtcy5wbnBJRC5wcm9kdWN0LAorCQkJc2QtPnBhcmFtcy5wbnBJRC5kZXZpY2VSZXZpc2lvbik7CisJUERFQlVHKERfUFJPQkUsICJWUC1WZXJzaW9uOiAgICAgICAgICAgICAgICVkLiVkICUwNHgiLAorCQkJc2QtPnBhcmFtcy52cFZlcnNpb24udnBWZXJzaW9uLAorCQkJc2QtPnBhcmFtcy52cFZlcnNpb24udnBSZXZpc2lvbiwKKwkJCXNkLT5wYXJhbXMudnBWZXJzaW9uLmNhbWVyYUhlYWRJRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCisJCQlpbnQgbGVuKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIENoZWNrIGZvciBTT0YgKi8KKwlpZiAobGVuID49IDY0ICYmCisJICAgIGRhdGFbMF0gPT0gTUFHSUNfMCAmJiBkYXRhWzFdID09IE1BR0lDXzEgJiYKKwkgICAgZGF0YVsxNl0gPT0gc2QtPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplICYmCisJICAgIGRhdGFbMTddID09IHNkLT5wYXJhbXMuZm9ybWF0LnN1YlNhbXBsZSAmJgorCSAgICBkYXRhWzE4XSA9PSBzZC0+cGFyYW1zLmZvcm1hdC55dXZPcmRlciAmJgorCSAgICBkYXRhWzI0XSA9PSBzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCAmJgorCSAgICBkYXRhWzI1XSA9PSBzZC0+cGFyYW1zLnJvaS5jb2xFbmQgJiYKKwkgICAgZGF0YVsyNl0gPT0gc2QtPnBhcmFtcy5yb2kucm93U3RhcnQgJiYKKwkgICAgZGF0YVsyN10gPT0gc2QtPnBhcmFtcy5yb2kucm93RW5kKSB7CisJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOworCisJCWF0b21pY19zZXQoJnNkLT5jYW1fZXhwb3N1cmUsIGRhdGFbMzldICogMik7CisJCWF0b21pY19zZXQoJnNkLT5mcHMsIGRhdGFbNDFdKTsKKworCQlpZiAoZnJhbWUgPT0gTlVMTCkgeworCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBDaGVjayBmb3IgcHJvcGVyIEVPRiBmb3IgbGFzdCBmcmFtZSAqLworCQlpZiAoKGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhKSA+IDQgJiYKKwkJICAgIGZyYW1lLT5kYXRhX2VuZFstNF0gPT0gMHhmZiAmJgorCQkgICAgZnJhbWUtPmRhdGFfZW5kWy0zXSA9PSAweGZmICYmCisJCSAgICBmcmFtZS0+ZGF0YV9lbmRbLTJdID09IDB4ZmYgJiYKKwkJICAgIGZyYW1lLT5kYXRhX2VuZFstMV0gPT0gMHhmZikKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAorCQkJCQkJTlVMTCwgMCk7CisKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBkYXRhLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBzZF9kcV9jYWxsYmFjayhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogU2V0IHRoZSBub3JtYWwgY29tcHJlc3Npb24gc2V0dGluZ3Mgb25jZSB3ZSBoYXZlIGNhcHR1cmVkIGEKKwkgICBmZXcgdW5jb21wcmVzc2VkIGZyYW1lcyAoYW5kIEFFQyBoYXMgaG9wZWZ1bGx5IHNldHRsZWQpICovCisJaWYgKHNkLT5maXJzdF9mcmFtZSkgeworCQlzZC0+Zmlyc3RfZnJhbWUtLTsKKwkJaWYgKHNkLT5maXJzdF9mcmFtZSA9PSAwKQorCQkJY29tbWFuZF9zZXRjb21wcmVzc2lvbihnc3BjYV9kZXYpOworCX0KKworCS8qIFN3aXRjaCBmbGlja2VyIGNvbnRyb2wgYmFjayBvbiBpZiBpdCBnb3QgdHVybmVkIG9mZiAqLworCXJlc3RhcnRfZmxpY2tlcihnc3BjYV9kZXYpOworCisJLyogSWYgQUVDIGlzIGVuYWJsZWQsIG1vbml0b3IgdGhlIGV4cG9zdXJlIGFuZAorCSAgIGFkanVzdCB0aGUgc2Vuc29yIGZyYW1lIHJhdGUgaWYgbmVlZGVkICovCisJaWYgKHNkLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSA9PSAyKQorCQltb25pdG9yX2V4cG9zdXJlKGdzcGNhX2Rldik7CisKKwkvKiBVcGRhdGUgb3VyIGtub3dsZWRnZSBvZiB0aGUgY2FtZXJhIHN0YXRlICovCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZSwgMCwgMCwgMCwgMCk7CisJaWYgKHNkLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCkKKwkJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0cywgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgPSB2YWw7CisJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUgPQorCQlmaW5kX292ZXJfZXhwb3N1cmUoc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCXJldCA9IGNvbW1hbmRfc2V0Y29sb3VycGFyYW1zKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gY29tbWFuZF9zZXRmbGlja2VyY3RybChnc3BjYV9kZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybiBjb21tYW5kX3NldGNvbG91cnBhcmFtcyhnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24gPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlyZXR1cm4gY29tbWFuZF9zZXRjb2xvdXJwYXJhbXMoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNhdHVyYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBvbjsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQgKi8KKwkJb24gPSAwOworCQlicmVhazsKKwljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCisJCW9uID0gMTsKKwkJc2QtPm1haW5zRnJlcSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJb24gPSAxOworCQlzZC0+bWFpbnNGcmVxID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2QtPmZyZXEgPSB2YWw7CisJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJZmxpY2tlcl9qdW1wc1tzZC0+bWFpbnNGcmVxXQorCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKKworCXJldHVybiBzZXRfZmxpY2tlcihnc3BjYV9kZXYsIG9uLCBnc3BjYV9kZXYtPnN0cmVhbWluZyk7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbXB0YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybiBjb21tYW5kX3NldGNvbXByZXNzaW9udGFyZ2V0KGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb21wdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQoreworCXN3aXRjaCAobWVudS0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgorCQlzd2l0Y2ggKG1lbnUtPmluZGV4KSB7CisJCWNhc2UgMDoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIk5vRmxpa2VyIik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09NUF9UQVJHRVQ6CisJCXN3aXRjaCAobWVudS0+aW5kZXgpIHsKKwkJY2FzZSBDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9RVUFMSVRZOgorCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJRdWFsaXR5Iik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSBDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9GUkFNRVJBVEU6CisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIkZyYW1lcmF0ZSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ID0gc2RfaW5pdCwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuZHFfY2FsbGJhY2sgPSBzZF9kcV9jYWxsYmFjaywKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA1NTMsIDB4MDAwMil9LAorCXtVU0JfREVWSUNFKDB4MDgxMywgMHgwMDAxKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKaW5kZXggZmRmNGMwZWMuLmVjZDRkNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTg1MSw3ICs4NTEsNyBAQAogfQogCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jCmluZGV4IDQ4NzhjOGYuLjllNDI0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09IHN1ZC1kcml2ZXIgc3RydWN0dXJlIGluaXRpYWxpc2F0aW9uID09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkxMzIwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkxMzIwID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMTMyMCwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX21pMjAyMCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX21pMjAyMCA9IHsKIAkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgICAgICAgPSBzZF9jdHJsc19taTIwMjAsCiAJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLApAQCAtMTg3LDcgKzE4Nyw3IEBACiAJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTIwMjBiID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwYiA9IHsKIAkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgICAgICAgPSBzZF9jdHJsc19taTIwMjBiLAogCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKQEAgLTIwMCw3ICsyMDAsNyBAQAogCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3YyNjQwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3YyNjQwID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX292MjY0MCwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1NSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1NSA9IHsKIAkubmFtZSAgICAgICAgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgICAgICAgPSBzZF9jdHJsc19vdjk2NTUsCiAJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGJkNjIxNGQuLjIyMmFmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTMsNiArMyw5IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgSmVhbi1GcmFuY29pcyBNb2luZSAoaHR0cDovL21vaW5lamYuZnJlZS5mcikKICAqCisgKiBDYW1lcmEgYnV0dG9uIGlucHV0IGhhbmRsaW5nIGJ5IE3DoXJ0b24gTsOpbWV0aAorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTcOhcnRvbiBOw6ltZXRoIDxubTEyN0BmcmVlbWFpbC5odT4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC0zNyw2ICs0MCwxMSBAQAogCiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAorI2lmZGVmIENPTkZJR19JTlBVVAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CisjZW5kaWYKKwogLyogZ2xvYmFsIHZhbHVlcyAqLwogI2RlZmluZSBERUZfTlVSQlMgMwkJLyogZGVmYXVsdCBudW1iZXIgb2YgVVJCcyAqLwogI2lmIERFRl9OVVJCUyA+IE1BWF9OVVJCUwpAQCAtNDcsNyArNTUsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQSBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCA4LCAwKQorI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgOSwgMCkKIAogI2lmZGVmIEdTUENBX0RFQlVHCiBpbnQgZ3NwY2FfZGVidWcgPSBEX0VSUiB8IERfUFJPQkU7CkBAIC0xMDQsMTUgKzExMiwxODUgQEAKIAkuY2xvc2UJCT0gZ3NwY2Ffdm1fY2xvc2UsCiB9OwogCisvKgorICogSW5wdXQgYW5kIGludGVycnVwdCBlbmRwb2ludCBoYW5kbGluZyBmdW5jdGlvbnMKKyAqLworI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIHZvaWQgaW50X2lycShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gKHN0cnVjdCBnc3BjYV9kZXYgKikgdXJiLT5jb250ZXh0OworCWludCByZXQ7CisKKwlyZXQgPSB1cmItPnN0YXR1czsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgMDoKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+aW50X3BrdF9zY2FuKGdzcGNhX2RldiwKKwkJICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpIDwgMCkgeworCQkJUERFQlVHKERfRVJSLCAiVW5rbm93biBwYWNrZXQgcmVjZWl2ZWQiKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIFN0b3AgaXMgcmVxdWVzdGVkIGVpdGhlciBieSBzb2Z0d2FyZSBvciBoYXJkd2FyZSBpcyBnb25lLAorCQkgKiBrZWVwIHRoZSByZXQgdmFsdWUgbm9uLXplcm8gYW5kIGRvbid0IHJlc3VibWl0IGxhdGVyLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlQREVCVUcoRF9FUlIsICJVUkIgZXJyb3IgJWksIHJlc3VibWl0dGluZyIsIHVyYi0+c3RhdHVzKTsKKwkJdXJiLT5zdGF0dXMgPSAwOworCQlyZXQgPSAwOworCX0KKworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmV0IDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgIlJlc3VibWl0IFVSQiBmYWlsZWQgd2l0aCBlcnJvciAlaSIsIHJldCk7CisJfQorfQorCitzdGF0aWMgaW50IGdzcGNhX2lucHV0X2Nvbm5lY3Qoc3RydWN0IGdzcGNhX2RldiAqZGV2KQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlpbnQgZXJyID0gMDsKKworCWRldi0+aW5wdXRfZGV2ID0gTlVMTDsKKwlpZiAoZGV2LT5zZF9kZXNjLT5pbnRfcGt0X3NjYW4gfHwgZGV2LT5zZF9kZXNjLT5vdGhlcl9pbnB1dCkgIHsKKwkJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJCWlmICghaW5wdXRfZGV2KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdXNiX21ha2VfcGF0aChkZXYtPmRldiwgZGV2LT5waHlzLCBzaXplb2YoZGV2LT5waHlzKSk7CisJCXN0cmxjYXQoZGV2LT5waHlzLCAiL2lucHV0MCIsIHNpemVvZihkZXYtPnBoeXMpKTsKKworCQlpbnB1dF9kZXYtPm5hbWUgPSBkZXYtPnNkX2Rlc2MtPm5hbWU7CisJCWlucHV0X2Rldi0+cGh5cyA9IGRldi0+cGh5czsKKworCQl1c2JfdG9faW5wdXRfaWQoZGV2LT5kZXYsICZpbnB1dF9kZXYtPmlkKTsKKworCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKKwkJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoS0VZX0NBTUVSQSldID0gQklUX01BU0soS0VZX0NBTUVSQSk7CisJCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZkZXYtPmRldi0+ZGV2OworCisJCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCQlpZiAoZXJyKSB7CisJCQlQREVCVUcoRF9FUlIsICJJbnB1dCBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCAiCisJCQkJIndpdGggZXJyb3IgJWkiLCBlcnIpOworCQkJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gTlVMTDsKKwkJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJCX0gZWxzZSB7CisJCQlkZXYtPmlucHV0X2RldiA9IGlucHV0X2RldjsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfYW5kX3N1Ym1pdF9pbnRfdXJiKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcCkKK3sKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX2xlbjsKKwlpbnQgaW50ZXJ2YWw7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJdm9pZCAqYnVmZmVyID0gTlVMTDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWJ1ZmZlcl9sZW4gPSBlcC0+d01heFBhY2tldFNpemU7CisJaW50ZXJ2YWwgPSBlcC0+YkludGVydmFsOworCVBERUJVRyhEX1BST0JFLCAiZm91bmQgaW50IGluIGVuZHBvaW50OiAweCV4LCAiCisJCSJidWZmZXJfbGVuPSV1LCBpbnRlcnZhbD0ldSIsCisJCWVwLT5iRW5kcG9pbnRBZGRyZXNzLCBidWZmZXJfbGVuLCBpbnRlcnZhbCk7CisKKwlkZXYgPSBnc3BjYV9kZXYtPmRldjsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlidWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgZXAtPndNYXhQYWNrZXRTaXplLAorCQkJCUdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7CisJaWYgKCFidWZmZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9idWZmZXI7CisJfQorCXVzYl9maWxsX2ludF91cmIodXJiLCBkZXYsCisJCXVzYl9yY3ZpbnRwaXBlKGRldiwgZXAtPmJFbmRwb2ludEFkZHJlc3MpLAorCQlidWZmZXIsIGJ1ZmZlcl9sZW4sCisJCWludF9pcnEsICh2b2lkICopZ3NwY2FfZGV2LCBpbnRlcnZhbCk7CisJZ3NwY2FfZGV2LT5pbnRfdXJiID0gdXJiOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAic3VibWl0IFVSQiBmYWlsZWQgd2l0aCBlcnJvciAlaSIsIHJldCk7CisJCWdvdG8gZXJyb3Jfc3VibWl0OworCX0KKwlyZXR1cm4gcmV0OworCitlcnJvcl9zdWJtaXQ6CisJdXNiX2J1ZmZlcl9mcmVlKGRldiwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworZXJyb3JfYnVmZmVyOgorCXVzYl9mcmVlX3VyYih1cmIpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ3NwY2FfaW5wdXRfY3JlYXRlX3VyYihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50Zl9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXA7CisJaW50IGk7CisKKwlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5pbnRfcGt0X3NjYW4pICB7CisJCWludGYgPSB1c2JfaWZudW1fdG9faWYoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UpOworCQlpbnRmX2Rlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwkJZm9yIChpID0gMDsgaSA8IGludGZfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJCWVwID0gJmludGZfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKwkJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSAmJgorCQkJICAgIHVzYl9lbmRwb2ludF94ZmVyX2ludChlcCkpIHsKKworCQkJCWFsbG9jX2FuZF9zdWJtaXRfaW50X3VyYihnc3BjYV9kZXYsIGVwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ3NwY2FfaW5wdXRfZGVzdHJveV91cmIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1cmIgKnVyYjsKKworCXVyYiA9IGdzcGNhX2Rldi0+aW50X3VyYjsKKwlpZiAodXJiKSB7CisJCWdzcGNhX2Rldi0+aW50X3VyYiA9IE5VTEw7CisJCXVzYl9raWxsX3VyYih1cmIpOworCQl1c2JfYnVmZmVyX2ZyZWUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCXVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJfQorfQorI2Vsc2UKKyNkZWZpbmUgZ3NwY2FfaW5wdXRfY29ubmVjdChnc3BjYV9kZXYpCQkwCisjZGVmaW5lIGdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KQorI2RlZmluZSBnc3BjYV9pbnB1dF9kZXN0cm95X3VyYihnc3BjYV9kZXYpCisjZW5kaWYKKwogLyogZ2V0IHRoZSBjdXJyZW50IGlucHV0IGZyYW1lIGJ1ZmZlciAqLwogc3RydWN0IGdzcGNhX2ZyYW1lICpnc3BjYV9nZXRfaV9mcmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKLQlpbnQgaTsKIAotCWkgPSBnc3BjYV9kZXYtPmZyX2k7Ci0JaSA9IGdzcGNhX2Rldi0+ZnJfcXVldWVbaV07Ci0JZnJhbWUgPSAmZ3NwY2FfZGV2LT5mcmFtZVtpXTsKKwlmcmFtZSA9IGdzcGNhX2Rldi0+Y3VyX2ZyYW1lOwogCWlmICgoZnJhbWUtPnY0bDJfYnVmLmZsYWdzICYgQlVGX0FMTF9GTEFHUykKIAkJCQkhPSBWNEwyX0JVRl9GTEFHX1FVRVVFRCkKIAkJcmV0dXJuIE5VTEw7CkBAIC00ODYsMTEgKzY2NCwxMyBAQAogCQkJaSwgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CiAJZ3NwY2FfZGV2LT5hbHQgPSBpOwkJLyogbWVtb3JpemUgdGhlIGN1cnJlbnQgYWx0IHNldHRpbmcgKi8KIAlpZiAoZ3NwY2FfZGV2LT5uYmFsdCA+IDEpIHsKKwkJZ3NwY2FfaW5wdXRfZGVzdHJveV91cmIoZ3NwY2FfZGV2KTsKIAkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIGkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZXJyKCJzZXQgYWx0ICVkIGVyciAlZCIsIGksIHJldCk7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCWVwID0gTlVMTDsKIAkJfQorCQlnc3BjYV9pbnB1dF9jcmVhdGVfdXJiKGdzcGNhX2Rldik7CiAJfQogCXJldHVybiBlcDsKIH0KQEAgLTUzNCwyNiArNzE0LDIyIEBACiAJCQludXJicyA9IDE7CiAJfQogCi0JZ3NwY2FfZGV2LT5udXJicyA9IG51cmJzOwogCWZvciAobiA9IDA7IG4gPCBudXJiczsgbisrKSB7CiAJCXVyYiA9IHVzYl9hbGxvY191cmIobnBrdCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiKSB7CiAJCQllcnIoInVzYl9hbGxvY191cmIgZmFpbGVkIik7Ci0JCQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CisJCWdzcGNhX2Rldi0+dXJiW25dID0gdXJiOwogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MoZ3NwY2FfZGV2LT5kZXYsCiAJCQkJCQlic2l6ZSwKIAkJCQkJCUdGUF9LRVJORUwsCiAJCQkJCQkmdXJiLT50cmFuc2Zlcl9kbWEpOwogCiAJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJCWVycigidXNiX2J1ZmZlcl91cmIgZmFpbGVkIik7Ci0JCQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKKwkJCWVycigidXNiX2J1ZmZlcl9hbGxvYyBmYWlsZWQiKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCWdzcGNhX2Rldi0+dXJiW25dID0gdXJiOwogCQl1cmItPmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCQl1cmItPmNvbnRleHQgPSBnc3BjYV9kZXY7CiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJzaXplOwpAQCAtNTg1LDYgKzc2MSw3IEBACiBzdGF0aWMgaW50IGdzcGNhX2luaXRfdHJhbnNmZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IHVyYiAqdXJiOwogCWludCBuLCByZXQ7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKQEAgLTU5NSw2ICs3NzIsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlnc3BjYV9kZXYtPnVzYl9lcnIgPSAwOworCiAJLyogc2V0IHRoZSBoaWdoZXIgYWx0ZXJuYXRlIHNldHRpbmcgYW5kCiAJICogbG9vcCB1bnRpbCB1cmIgc3VibWl0IHN1Y2NlZWRzICovCiAJaWYgKGdzcGNhX2Rldi0+Y2FtLnJldmVyc2VfYWx0cykKQEAgLTYxMywxMCArNzkyLDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAlmb3IgKDs7KSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgImluaXQgdHJhbnNmZXIgYWx0ICVkIiwgZ3NwY2FfZGV2LT5hbHQpOwotCQlyZXQgPSBjcmVhdGVfdXJicyhnc3BjYV9kZXYsIGVwKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKKwkJaWYgKCFnc3BjYV9kZXYtPmNhbS5ub191cmJfY3JlYXRlKSB7CisJCQlQREVCVUcoRF9TVFJFQU0sICJpbml0IHRyYW5zZmVyIGFsdCAlZCIsCisJCQkJZ3NwY2FfZGV2LT5hbHQpOworCQkJcmV0ID0gY3JlYXRlX3VyYnMoZ3NwY2FfZGV2LCBlcCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CiAKIAkJLyogY2xlYXIgdGhlIGJ1bGsgZW5kcG9pbnQgKi8KIAkJaWYgKGdzcGNhX2Rldi0+Y2FtLmJ1bGspCkBAIC02MzYsOCArODIwLDExIEBACiAJCQlicmVhazsKIAogCQkvKiBzdWJtaXQgdGhlIFVSQnMgKi8KLQkJZm9yIChuID0gMDsgbiA8IGdzcGNhX2Rldi0+bnVyYnM7IG4rKykgewotCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoZ3NwY2FfZGV2LT51cmJbbl0sIEdGUF9LRVJORUwpOworCQlmb3IgKG4gPSAwOyBuIDwgTUFYX05VUkJTOyBuKyspIHsKKwkJCXVyYiA9IGdzcGNhX2Rldi0+dXJiW25dOworCQkJaWYgKHVyYiA9PSBOVUxMKQorCQkJCWJyZWFrOworCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CkBAIC02OTQsNyArODgxLDkgQEAKIAkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4pCiAJCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7CiAJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQlnc3BjYV9pbnB1dF9kZXN0cm95X3VyYihnc3BjYV9kZXYpOwogCQlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOworCQlnc3BjYV9pbnB1dF9jcmVhdGVfdXJiKGdzcGNhX2Rldik7CiAJfQogCiAJLyogYWx3YXlzIGNhbGwgc3RvcDAgdG8gZnJlZSB0aGUgc3ViZHJpdmVyJ3MgcmVzb3VyY2VzICovCkBAIC0yMDYwLDExICsyMjQ5LDEyIEBACiAJCVBERUJVRyhEX0VSUiwgIlRvbyBtYW55IGNvbmZpZyIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisKKwkvKiB0aGUgVVNCIHZpZGVvIGludGVyZmFjZSBtdXN0IGJlIHRoZSBmaXJzdCBvbmUgKi8KIAlpbnRlcmZhY2UgPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7Ci0JaWYgKGludGVyZmFjZS0+YkludGVyZmFjZU51bWJlciA+IDApIHsKLQkJUERFQlVHKERfRVJSLCAiaW50ZiAhPSAwIik7CisJaWYgKGRldi0+Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzICE9IDEgJiYKKwkgICAgaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyICE9IDApCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCS8qIGNyZWF0ZSB0aGUgZGV2aWNlICovCiAJaWYgKGRldl9zaXplIDwgc2l6ZW9mICpnc3BjYV9kZXYpCkBAIC0yMDk2LDYgKzIyODYsMTAgQEAKIAkJZ290byBvdXQ7CiAJZ3NwY2Ffc2V0X2RlZmF1bHRfbW9kZShnc3BjYV9kZXYpOwogCisJcmV0ID0gZ3NwY2FfaW5wdXRfY29ubmVjdChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCiAJbXV0ZXhfaW5pdCgmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJbXV0ZXhfaW5pdCgmZ3NwY2FfZGV2LT5yZWFkX2xvY2spOwogCW11dGV4X2luaXQoJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CkBAIC0yMTE2LDggKzIzMTAsMTUgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZ3NwY2FfZGV2KTsKIAlQREVCVUcoRF9QUk9CRSwgIiVzIGNyZWF0ZWQiLCB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZnc3BjYV9kZXYtPnZkZXYpKTsKKworCWdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KTsKKwogCXJldHVybiAwOwogb3V0OgorI2lmZGVmIENPTkZJR19JTlBVVAorCWlmIChnc3BjYV9kZXYtPmlucHV0X2RldikKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworI2VuZGlmCiAJa2ZyZWUoZ3NwY2FfZGV2LT51c2JfYnVmKTsKIAlrZnJlZShnc3BjYV9kZXYpOwogCXJldHVybiByZXQ7CkBAIC0yMTMzLDYgKzIzMzQsOSBAQAogdm9pZCBnc3BjYV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisjaWZkZWYgQ09ORklHX0lOUFVUCisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworI2VuZGlmCiAKIAlQREVCVUcoRF9QUk9CRSwgIiVzIGRpc2Nvbm5lY3QiLAogCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZnc3BjYV9kZXYtPnZkZXYpKTsKQEAgLTIxNDQsNiArMjM0OCwxNSBAQAogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+d3EpOwogCX0KIAorI2lmZGVmIENPTkZJR19JTlBVVAorCWdzcGNhX2lucHV0X2Rlc3Ryb3lfdXJiKGdzcGNhX2Rldik7CisJaW5wdXRfZGV2ID0gZ3NwY2FfZGV2LT5pbnB1dF9kZXY7CisJaWYgKGlucHV0X2RldikgeworCQlnc3BjYV9kZXYtPmlucHV0X2RldiA9IE5VTEw7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJfQorI2VuZGlmCisKIAkvKiB0aGUgZGV2aWNlIGlzIGZyZWVkIGF0IGV4aXQgb2YgdGhpcyBmdW5jdGlvbiAqLwogCWdzcGNhX2Rldi0+ZGV2ID0gTlVMTDsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwpAQCAtMjE2OSw2ICsyMzgyLDcgQEAKIAlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wTikKIAkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wTihnc3BjYV9kZXYpOwogCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCWdzcGNhX2lucHV0X2Rlc3Ryb3lfdXJiKGdzcGNhX2Rldik7CiAJZ3NwY2Ffc2V0X2FsdDAoZ3NwY2FfZGV2KTsKIAlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wMCkKIAkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wMChnc3BjYV9kZXYpOwpAQCAtMjE4Miw2ICsyMzk2LDcgQEAKIAogCWdzcGNhX2Rldi0+ZnJvemVuID0gMDsKIAlnc3BjYV9kZXYtPnNkX2Rlc2MtPmluaXQoZ3NwY2FfZGV2KTsKKwlnc3BjYV9pbnB1dF9jcmVhdGVfdXJiKGdzcGNhX2Rldik7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlyZXR1cm4gZ3NwY2FfaW5pdF90cmFuc2Zlcihnc3BjYV9kZXYpOwogCXJldHVybiAwOwpAQCAtMjIwNSw2ICsyNDIwLDggQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5jdHJsczsgaSsrKSB7CisJCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgaSkpCisJCQljb250aW51ZTsKIAkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfR0FJTikKIAkJCWdhaW5fY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOwogCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAppbmRleCA1OWM3OTQxZC4uMDJjNjk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaApAQCAtNDgsMjYgKzQ4LDI3IEBACiAKIC8qIHVzZWQgdG8gbGlzdCBmcmFtZXJhdGVzIHN1cHBvcnRlZCBieSBhIGNhbWVyYSBtb2RlIChyZXNvbHV0aW9uKSAqLwogc3RydWN0IGZyYW1lcmF0ZXMgewotCWludCAqcmF0ZXM7CisJY29uc3QgdTggKnJhdGVzOwogCWludCBucmF0ZXM7CiB9OwogCiAvKiBkZXZpY2UgaW5mb3JtYXRpb24gLSBzZXQgYXQgcHJvYmUgdGltZSAqLwogc3RydWN0IGNhbSB7Ci0JaW50IGJ1bGtfc2l6ZTsJCS8qIGJ1ZmZlciBzaXplIHdoZW4gaW1hZ2UgdHJhbnNmZXIgYnkgYnVsayAqLwogCWNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmNhbV9tb2RlOwkvKiBzaXplIG5tb2RlcyAqLwotCWNoYXIgbm1vZGVzOwogCWNvbnN0IHN0cnVjdCBmcmFtZXJhdGVzICptb2RlX2ZyYW1lcmF0ZXM7IC8qIG11c3QgaGF2ZSBzaXplIG5tb2RlLAogCQkJCQkJICAgKiBqdXN0IGxpa2UgY2FtX21vZGUgKi8KLQlfX3U4IGJ1bGtfbnVyYnM7CS8qIG51bWJlciBvZiBVUkJzIGluIGJ1bGsgbW9kZQorCXUzMiBidWxrX3NpemU7CQkvKiBidWZmZXIgc2l6ZSB3aGVuIGltYWdlIHRyYW5zZmVyIGJ5IGJ1bGsgKi8KKwl1MzIgaW5wdXRfZmxhZ3M7CS8qIHZhbHVlIGZvciBFTlVNX0lOUFVUIHN0YXR1cyBmbGFncyAqLworCXU4IG5tb2RlczsJCS8qIHNpemUgb2YgY2FtX21vZGUgKi8KKwl1OCBub191cmJfY3JlYXRlOwkvKiBkb24ndCBjcmVhdGUgdHJhbnNmZXIgVVJCcyAqLworCXU4IGJ1bGtfbnVyYnM7CQkvKiBudW1iZXIgb2YgVVJCcyBpbiBidWxrIG1vZGUKIAkJCQkgKiAtIGNhbm5vdCBiZSA+IE1BWF9OVVJCUwogCQkJCSAqIC0gd2hlbiAwIGFuZCBidWxrX3NpemUgIT0gMCBtZWFucwogCQkJCSAqICAgMSBVUkIgYW5kIHN1Ym1pdCBkb25lIGJ5IHN1YmRyaXZlciAqLwogCXU4IGJ1bGs7CQkvKiBpbWFnZSB0cmFuc2ZlciBieSAwOmlzb2MgLyAxOmJ1bGsgKi8KIAl1OCBucGt0OwkJLyogbnVtYmVyIG9mIHBhY2tldHMgaW4gYW4gSVNPQyBtZXNzYWdlCiAJCQkJICogMCBpcyB0aGUgZGVmYXVsdCB2YWx1ZTogMzIgcGFja2V0cyAqLwotCXUzMiBpbnB1dF9mbGFnczsJLyogdmFsdWUgZm9yIEVOVU1fSU5QVVQgc3RhdHVzIGZsYWdzICovCi0JY2hhciByZXZlcnNlX2FsdHM7CS8qIEFsdCBzZXR0aW5ncyBhcmUgaW4gaGlnaCB0byBsb3cgb3JkZXIgKi8KKwl1OCByZXZlcnNlX2FsdHM7CS8qIEFsdCBzZXR0aW5ncyBhcmUgaW4gaGlnaCB0byBsb3cgb3JkZXIgKi8KIH07CiAKIHN0cnVjdCBnc3BjYV9kZXY7CkBAIC05MCw2ICs5MSw5IEBACiB0eXBlZGVmIHZvaWQgKCpjYW1fcGt0X29wKSAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJCXU4ICpkYXRhLAogCQkJCWludCBsZW4pOwordHlwZWRlZiBpbnQgKCpjYW1faW50X3BrdF9vcCkgKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCQl1OCAqZGF0YSwKKwkJCQlpbnQgbGVuKTsKIAogc3RydWN0IGN0cmwgewogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKQEAgLTEyNSw2ICsxMjksMTIgQEAKIAljYW1fcmVnX29wIGdldF9yZWdpc3RlcjsKICNlbmRpZgogCWNhbV9pZGVudF9vcCBnZXRfY2hpcF9pZGVudDsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwljYW1faW50X3BrdF9vcCBpbnRfcGt0X3NjYW47CisJLyogb3RoZXJfaW5wdXQgbWFrZXMgdGhlIGdzcGNhIGNvcmUgY3JlYXRlIGdzcGNhX2Rldi0+aW5wdXQgZXZlbiB3aGVuCisJICAgaW50X3BrdF9zY2FuIGlzIE5VTEwsIGZvciBjYW1zIHdpdGggbm9uIGludGVycnVwdCBkcml2ZW4gYnV0dG9ucyAqLworCXU4IG90aGVyX2lucHV0OworI2VuZGlmCiB9OwogCiAvKiBwYWNrZXQgdHlwZXMgd2hlbiBtb3ZpbmcgZnJvbSBpc28gYnVmIHRvIGZyYW1lIGJ1ZiAqLwpAQCAtMTQ3LDYgKzE1NywxMCBAQAogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsJCS8qIHN1YmRyaXZlciBoYW5kbGluZyB0aGUgZGV2aWNlICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZmlsZSAqY2FwdF9maWxlOwkJLyogZmlsZSBkb2luZyB2aWRlbyBjYXB0dXJlICovCisjaWZkZWYgQ09ORklHX0lOUFVUCisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWNoYXIgcGh5c1s2NF07CQkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGggKi8KKyNlbmRpZgogCiAJc3RydWN0IGNhbSBjYW07CQkJCS8qIGRldmljZSBpbmZvcm1hdGlvbiAqLwogCWNvbnN0IHN0cnVjdCBzZF9kZXNjICpzZF9kZXNjOwkJLyogc3ViZHJpdmVyIGRlc2NyaXB0aW9uICovCkBAIC0xNTYsNiArMTcwLDkgQEAKICNkZWZpbmUgVVNCX0JVRl9TWiA2NAogCV9fdTggKnVzYl9idWY7CQkJCS8qIGJ1ZmZlciBmb3IgVVNCIGV4Y2hhbmdlcyAqLwogCXN0cnVjdCB1cmIgKnVyYltNQVhfTlVSQlNdOworI2lmZGVmIENPTkZJR19JTlBVVAorCXN0cnVjdCB1cmIgKmludF91cmI7CisjZW5kaWYKIAogCV9fdTggKmZyYnVmOwkJCQkvKiBidWZmZXIgZm9yIG5mcmFtZXMgKi8KIAlzdHJ1Y3QgZ3NwY2FfZnJhbWUgZnJhbWVbR1NQQ0FfTUFYX0ZSQU1FU107CkBAIC0xODcsNyArMjA0LDYgQEAKIAljaGFyIHVzZXJzOwkJCS8qIG51bWJlciBvZiBvcGVucyAqLwogCWNoYXIgcHJlc2VudDsJCQkvKiBkZXZpY2UgY29ubmVjdGVkICovCiAJY2hhciBuYnVmcmVhZDsJCQkvKiBudW1iZXIgb2YgYnVmZmVycyBmb3IgcmVhZCgpICovCi0JY2hhciBudXJiczsJCQkvKiBudW1iZXIgb2YgYWxsb2NhdGVkIFVSQnMgKi8KIAljaGFyIG1lbW9yeTsJCQkvKiBtZW1vcnkgdHlwZSAoVjRMMl9NRU1PUllfeHh4KSAqLwogCV9fdTggaWZhY2U7CQkJLyogVVNCIGludGVyZmFjZSBudW1iZXIgKi8KIAlfX3U4IGFsdDsJCQkvKiBVU0IgYWx0ZXJuYXRlIHNldHRpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMKaW5kZXggOGQwNzFkZi4uYzA3MjJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl9CiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGN0cmwgbXQ5bTExMV9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIG10OW0xMTFfY3RybHNbXSA9IHsKICNkZWZpbmUgVkZMSVBfSURYIDAKIAl7CiAJCXsKQEAgLTE3MSw3ICsxNzEsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJQcm9iaW5nIGZvciBhIG10OW0xMTEgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhIG10OW0xMTEgc2Vuc29yIik7CiAKIAkvKiBEbyB0aGUgcHJlaW5pdCAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfbXQ5bTExMSk7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmMKaW5kZXggMmEyOGI3NC4uNjJjMWNiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jCkBAIC0zMyw3ICszMyw3IEBACiBzdGF0aWMgaW50IG92NzY2MF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgb3Y3NjYwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgY3RybCBvdjc2NjBfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBvdjc2NjBfY3RybHNbXSA9IHsKICNkZWZpbmUgR0FJTl9JRFggMQogCXsKIAkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmgKaW5kZXggZjU1ODhlYi4uNGQ5ZGNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oCkBAIC05NCw3ICs5NCw3IEBACiBpbnQgb3Y3NjYwX3N0b3Aoc3RydWN0IHNkICpzZCk7CiB2b2lkIG92NzY2MF9kaXNjb25uZWN0KHN0cnVjdCBzZCAqc2QpOwogCi1jb25zdCBzdGF0aWMgc3RydWN0IG01NjAyX3NlbnNvciBvdjc2NjAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG01NjAyX3NlbnNvciBvdjc2NjAgPSB7CiAJLm5hbWUgPSAib3Y3NjYwIiwKIAkuaTJjX3NsYXZlX2lkID0gMHg0MiwKIAkuaTJjX3JlZ1cgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKaW5kZXggOTIzY2RkNS4uMDY5YmEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCkBAIC0zMDcsNyArMzA3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5mbygiUHJvYmluZyBmb3IgYW4gb3Y5NjUwIHNlbnNvciIpOworCVBERUJVRyhEX1BST0JFLCAiUHJvYmluZyBmb3IgYW4gb3Y5NjUwIHNlbnNvciIpOwogCiAJLyogUnVuIHRoZSBwcmUtaW5pdCBiZWZvcmUgcHJvYmluZyB0aGUgc2Vuc29yICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9vdjk2NTApICYmICFlcnI7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKaW5kZXggOGQ3NGQ4MC4uOTI1Yjg3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5mbygiUHJvYmluZyBmb3IgYSBwbzEwMzAgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhIHBvMTAzMCBzZW5zb3IiKTsKIAogCS8qIFJ1biB0aGUgcHJlLWluaXQgdG8gYWN0dWFsbHkgcHJvYmUgdGhlIHVuaXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3BvMTAzMCk7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKaW5kZXggMWI1MzZmN2QuLmRhMGEzOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIlByb2JpbmcgZm9yIGEgczVrNGFhIHNlbnNvciIpOworCVBERUJVRyhEX1BST0JFLCAiUHJvYmluZyBmb3IgYSBzNWs0YWEgc2Vuc29yIik7CiAKIAkvKiBQcmVpbml0IHRoZSBzZW5zb3IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3M1azRhYSkgJiYgIWVycjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwppbmRleCA2Yjg5ZjMzLi5mYmQ5MTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJQcm9iaW5nIGZvciBhIHM1azgzYSBzZW5zb3IiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlByb2JpbmcgZm9yIGEgczVrODNhIHNlbnNvciIpOwogCiAJLyogUHJlaW5pdCB0aGUgc2Vuc29yICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9zNWs4M2EpICYmICFlcnI7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYwppbmRleCA5Y2Y4ZDY4Li4zZDkyMjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYwpAQCAtNTQsNyArNTQsNyBAQAogc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCmluZGV4IDkxNTQ4NzAuLjMzNzQ0ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKQEAgLTU3LDYgKzU3LDE0IEBACiAjZGVmaW5lIE1SOTczMTBBX0dBSU5fTUFYCQkzMQogI2RlZmluZSBNUjk3MzEwQV9HQUlOX0RFRkFVTFQJCTI1CiAKKyNkZWZpbmUgTVI5NzMxMEFfQ09OVFJBU1RfTUlOCQkwCisjZGVmaW5lIE1SOTczMTBBX0NPTlRSQVNUX01BWAkJMzEKKyNkZWZpbmUgTVI5NzMxMEFfQ09OVFJBU1RfREVGQVVMVAkyMworCisjZGVmaW5lIE1SOTczMTBBX0NTX0dBSU5fTUlOCQkwCisjZGVmaW5lIE1SOTczMTBBX0NTX0dBSU5fTUFYCQkweDdmZgorI2RlZmluZSBNUjk3MzEwQV9DU19HQUlOX0RFRkFVTFQJMHgxMTAKKwogI2RlZmluZSBNUjk3MzEwQV9NSU5fQ0xPQ0tESVZfTUlOCTMKICNkZWZpbmUgTVI5NzMxMEFfTUlOX0NMT0NLRElWX01BWAk4CiAjZGVmaW5lIE1SOTczMTBBX01JTl9DTE9DS0RJVl9ERUZBVUxUCTMKQEAgLTgyLDcgKzkwLDggQEAKIAogCWludCBicmlnaHRuZXNzOwogCXUxNiBleHBvc3VyZTsKLQl1OCBnYWluOworCXUzMiBnYWluOworCXU4IGNvbnRyYXN0OwogCXU4IG1pbl9jbG9ja2RpdjsKIH07CiAKQEAgLTk4LDYgKzEwNyw4IEBACiBzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldG1pbl9jbG9ja2RpdihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CkBAIC0xMDUsMTEgKzExNiwxMyBAQAogc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOwogc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKIHN0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAvKiBTZXBhcmF0ZSBicmlnaHRuZXNzIGNvbnRyb2wgZGVzY3JpcHRpb24gZm9yIEFyZ3VzIFF1aWNrQ2xpeCBhcyBpdCBoYXMKLSAgIGRpZmZlcmVudCBsaW1pdHMgZnJvbSB0aGUgb3RoZXIgbXI5NzMxMGEgY2FtZXJhcyAqLworICogZGlmZmVyZW50IGxpbWl0cyBmcm9tIHRoZSBvdGhlciBtcjk3MzEwYSBjYW1lcmFzLCBhbmQgc2VwYXJhdGUgZ2FpbgorICogY29udHJvbCBmb3IgU2FrYXIgQ3liZXJQaXggY2FtZXJhLiAqLwogCXsKICNkZWZpbmUgTk9STV9CUklHSFRORVNTX0lEWCAwCiAJCXsKQEAgLTE3MSw3ICsxODQsMzcgQEAKIAkJLmdldCA9IHNkX2dldGdhaW4sCiAJfSwKIAl7Ci0jZGVmaW5lIE1JTl9DTE9DS0RJVl9JRFggNAorI2RlZmluZSBTQUtBUl9DU19HQUlOX0lEWCA0CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJHYWluIiwKKwkJCS5taW5pbXVtID0gTVI5NzMxMEFfQ1NfR0FJTl9NSU4sCisJCQkubWF4aW11bSA9IE1SOTczMTBBX0NTX0dBSU5fTUFYLAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBNUjk3MzEwQV9DU19HQUlOX0RFRkFVTFQsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0Z2FpbiwKKwkJLmdldCA9IHNkX2dldGdhaW4sCisJfSwKKwl7CisjZGVmaW5lIENPTlRSQVNUX0lEWCA1CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiQ29udHJhc3QiLAorCQkJLm1pbmltdW0gPSBNUjk3MzEwQV9DT05UUkFTVF9NSU4sCisJCQkubWF4aW11bSA9IE1SOTczMTBBX0NPTlRSQVNUX01BWCwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gTVI5NzMxMEFfQ09OVFJBU1RfREVGQVVMVCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkJLmdldCA9IHNkX2dldGNvbnRyYXN0LAorCX0sCisJeworI2RlZmluZSBNSU5fQ0xPQ0tESVZfSURYIDYKIAkJewogCQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFLAogCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtMzI3LDcgKzM3MCw2IEBACiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCi0JZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDEpOwogCWRhdGFbMF0gPSAweDE5OwogCWRhdGFbMV0gPSAweDUxOwogCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKQEAgLTQzNyw2ICs0NzksNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW07CisJaW50IGdhaW5fZGVmYXVsdCA9IE1SOTczMTBBX0dBSU5fREVGQVVMVDsKIAlpbnQgZXJyX2NvZGU7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CkBAIC00NjAsMTIgKzUwMywxNCBAQAogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIAorCS8qIE5vdywgdGhlIHF1ZXJ5IGZvciBzZW5zb3IgdHlwZS4gKi8KKwllcnJfY29kZSA9IGNhbV9nZXRfcmVzcG9uc2UxNihnc3BjYV9kZXYsIDB4MDcsIDEpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKwogCWlmIChpZC0+aWRQcm9kdWN0ID09IDB4MDExMCB8fCBpZC0+aWRQcm9kdWN0ID09IDB4MDEwZSkgewogCQlzZC0+Y2FtX3R5cGUgPSBDQU1fVFlQRV9DSUY7CiAJCWNhbS0+bm1vZGVzLS07Ci0JCWVycl9jb2RlID0gY2FtX2dldF9yZXNwb25zZTE2KGdzcGNhX2RldiwgMHgwNiwgMSk7Ci0JCWlmIChlcnJfY29kZSA8IDApCi0JCQlyZXR1cm4gZXJyX2NvZGU7CiAJCS8qCiAJCSAqIEFsbCBidXQgb25lIG9mIHRoZSBrbm93biBDSUYgY2FtZXJhcyBzaGFyZSB0aGUgc2FtZSBVU0IgSUQsCiAJCSAqIGJ1dCB0d28gZGlmZmVyZW50IGluaXQgcm91dGluZXMgYXJlIGluIHVzZSwgYW5kIHRoZSBjb250cm9sCkBAIC00NzMsMTIgKzUxOCwxMiBAQAogCQkgKiBvZiB0aGUgdHdvIGtub3duIHZhcmlldGllcyBpcyBjb25uZWN0ZWQhCiAJCSAqCiAJCSAqIEEgbGlzdCBvZiBrbm93biBDSUYgY2FtZXJhcyBmb2xsb3dzLiBUaGV5IGFsbCByZXBvcnQgZWl0aGVyCi0JCSAqIDAwMDIgZm9yIHR5cGUgMCBvciAwMDAzIGZvciB0eXBlIDEuCisJCSAqIDAyMDAgZm9yIHR5cGUgMCBvciAwMzAwIGZvciB0eXBlIDEuCiAJCSAqIElmIHlvdSBoYXZlIGFub3RoZXIgdG8gcmVwb3J0LCBwbGVhc2UgZG8KIAkJICoKIAkJICogTmFtZQkJc2QtPnNlbnNvcl90eXBlCQlyZXBvcnRlZCBieQogCQkgKgotCQkgKiBTYWthciBTcHktc2hvdAkwCQlULiBLaWxnb3JlCisJCSAqIFNha2FyIDU2Mzc5IFNweS1zaG90CTAJCVQuIEtpbGdvcmUKIAkJICogSW5ub3ZhZ2UJCTAJCVQuIEtpbGdvcmUKIAkJICogVml2aXRhciBNaW5pCQkwCQlILiBEZSBHb2VkZQogCQkgKiBWaXZpdGFyIE1pbmkJCTAJCUUuIFJvZHJpZ3VlegpAQCAtNDg3LDcgKzUzMiw3IEBACiAJCSAqIFBoaWxpcHMgZGlnLiBrZXljaC4JMQkJVC4gS2lsZ29yZQogCQkgKiBUcnVzdCBTcHljQG0gMTAwCTEJCUEuIEphY29icwogCQkgKi8KLQkJc3dpdGNoIChnc3BjYV9kZXYtPnVzYl9idWZbMV0pIHsKKwkJc3dpdGNoIChnc3BjYV9kZXYtPnVzYl9idWZbMF0pIHsKIAkJY2FzZSAyOgogCQkJc2QtPnNlbnNvcl90eXBlID0gMDsKIAkJCWJyZWFrOwpAQCAtNTA0LDIwICs1NDksMTkgQEAKIAl9IGVsc2UgewogCQlzZC0+Y2FtX3R5cGUgPSBDQU1fVFlQRV9WR0E7CiAKLQkJZXJyX2NvZGUgPSBjYW1fZ2V0X3Jlc3BvbnNlMTYoZ3NwY2FfZGV2LCAweDA3LCAxKTsKLQkJaWYgKGVycl9jb2RlIDwgMCkKLQkJCXJldHVybiBlcnJfY29kZTsKLQogCQkvKgotCQkgKiBIZXJlIGlzIGEgdGFibGUgb2YgdGhlIHJlc3BvbnNlcyB0byB0aGUgcHJldmlvdXMgY29tbWFuZAotCQkgKiBmcm9tIHRoZSBrbm93biBNUjk3MzEwQSBWR0EgY2FtZXJhcy4KKwkJICogSGVyZSBpcyBhIHRhYmxlIG9mIHRoZSByZXNwb25zZXMgdG8gdGhlIHF1ZXJ5IGZvciBzZW5zb3IKKwkJICogdHlwZSwgZnJvbSB0aGUga25vd24gTVI5NzMxMEEgVkdBIGNhbWVyYXMuIFNpeCBkaWZmZXJlbnQKKwkJICogY2FtZXJhcyBvZiB3aGljaCBmaXZlIHNoYXJlIHRoZSBzYW1lIFVTQiBJRC4KIAkJICoKIAkJICogTmFtZQkJCWdzcGNhX2Rldi0+dXNiX2J1ZltdCXNkLT5zZW5zb3JfdHlwZQogCQkgKgkJCQlzZC0+ZG9fbGNkX3N0b3AKIAkJICogQWlwdGVrIFBlbmNhbSBWR0ErCTAzMDAJCTAJCTEKLQkJICogSU9OIGRpZ2l0YWwJCTAzNTAJCTAJCTEKKwkJICogSU9OIGRpZ2l0YWwJCTAzMDAJCTAJCTEKIAkJICogQXJndXMgREMtMTYyMAkwNDUwCQkxCQkwCiAJCSAqIEFyZ3VzIFF1aWNrQ2xpeAkwNDIwCQkxCQkxCisJCSAqIFNha2FyIDc3Mzc5IERpZ2l0YWwJMDM1MAkJMAkJMQorCQkgKiBTYWthciAxNjM4eCBDeWJlclBpeAkwMTIwCQkwCQkyCiAJCSAqCiAJCSAqIEJhc2VkIHVwb24gdGhlc2UgcmVzdWx0cywgd2UgYXNzdW1lIGRlZmF1bHQgc2V0dGluZ3MKIAkJICogYW5kIHRoZW4gY29ycmVjdCBhcyBuZWNlc3NhcnksIGFzIGZvbGxvd3MuCkBAIC01MjcsMTAgKzU3MSwxMiBAQAogCQlzZC0+c2Vuc29yX3R5cGUgPSAxOwogCQlzZC0+ZG9fbGNkX3N0b3AgPSAwOwogCQlzZC0+YWRqX2NvbG9ycyA9IDA7Ci0JCWlmICgoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDB4MDMpICYmCisJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gPT0gMHgwMSkgeworCQkJc2QtPnNlbnNvcl90eXBlID0gMjsKKwkJfSBlbHNlIGlmICgoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDB4MDMpICYmCiAJCQkJCShnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMHgwNCkpIHsKIAkJCVBERUJVRyhEX0VSUiwgIlVua25vd24gVkdBIFNlbnNvciBpZCBCeXRlIDA6ICUwMngiLAotCQkJCQlnc3BjYV9kZXYtPnVzYl9idWZbMV0pOworCQkJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0pOwogCQkJUERFQlVHKERfRVJSLCAiRGVmYXVsdHMgYXNzdW1lZCwgbWF5IG5vdCB3b3JrIik7CiAJCQlQREVCVUcoRF9FUlIsICJQbGVhc2UgcmVwb3J0IHRoaXMiKTsKIAkJfQpAQCAtNTYwLDcgKzYwNiw3IEBACiAJCVBERUJVRyhEX1BST0JFLCAiTVI5NzMxMEEgVkdBIGNhbWVyYSBkZXRlY3RlZCwgc2Vuc29yOiAlZCIsCiAJCSAgICAgICBzZC0+c2Vuc29yX3R5cGUpOwogCX0KLQkvKiBTdG9wIHN0cmVhbWluZyBhcyB3ZSd2ZSBzdGFydGVkIGl0IHRvIHByb2JlIHRoZSBzZW5zb3IgdHlwZS4gKi8KKwkvKiBTdG9wIHN0cmVhbWluZyBhcyB3ZSd2ZSBzdGFydGVkIGl0IG9ubHkgdG8gcHJvYmUgdGhlIHNlbnNvciB0eXBlLiAqLwogCXNkX3N0b3BOKGdzcGNhX2Rldik7CiAKIAlpZiAoZm9yY2Vfc2Vuc29yX3R5cGUgIT0gLTEpIHsKQEAgLTU3NCw5ICs2MjAsMTMgQEAKIAkJLyogTm8gYnJpZ2h0bmVzcyBmb3Igc2Vuc29yX3R5cGUgMCAqLwogCQlpZiAoc2QtPnNlbnNvcl90eXBlID09IDApCiAJCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgTk9STV9CUklHSFRORVNTX0lEWCkgfAotCQkJCQkgICAgICAoMSA8PCBBUkdVU19RQ19CUklHSFRORVNTX0lEWCk7CisJCQkJCSAgICAgICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCk7CiAJCWVsc2UKIAkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBBUkdVU19RQ19CUklHSFRORVNTX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBDT05UUkFTVF9JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgU0FLQVJfQ1NfR0FJTl9JRFgpIHwKIAkJCQkJICAgICAgKDEgPDwgTUlOX0NMT0NLRElWX0lEWCk7CiAJfSBlbHNlIHsKIAkJLyogQWxsIGNvbnRyb2xzIG5lZWQgdG8gYmUgZGlzYWJsZWQgaWYgVkdBIHNlbnNvcl90eXBlIGlzIDAgKi8KQEAgLTU4NSwxNyArNjM1LDMwIEBACiAJCQkJCSAgICAgICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKSB8CiAJCQkJCSAgICAgICgxIDw8IEVYUE9TVVJFX0lEWCkgfAogCQkJCQkgICAgICAoMSA8PCBHQUlOX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBDT05UUkFTVF9JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgU0FLQVJfQ1NfR0FJTl9JRFgpIHwKIAkJCQkJICAgICAgKDEgPDwgTUlOX0NMT0NLRElWX0lEWCk7Ci0JCWVsc2UgaWYgKHNkLT5kb19sY2Rfc3RvcCkKKwkJZWxzZSBpZiAoc2QtPnNlbnNvcl90eXBlID09IDIpIHsKKwkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IEdBSU5fSURYKSB8CisJCQkJCSAgICAgICgxIDw8IE1JTl9DTE9DS0RJVl9JRFgpOworCQkJZ2Fpbl9kZWZhdWx0ID0gTVI5NzMxMEFfQ1NfR0FJTl9ERUZBVUxUOworCQl9IGVsc2UgaWYgKHNkLT5kb19sY2Rfc3RvcCkKIAkJCS8qIEFyZ3VzIFF1aWNrQ2xpeCBoYXMgZGlmZmVyZW50IGJyaWdodG5lc3MgbGltaXRzICovCi0JCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgTk9STV9CUklHSFRORVNTX0lEWCk7CisJCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgTk9STV9CUklHSFRORVNTX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBDT05UUkFTVF9JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgU0FLQVJfQ1NfR0FJTl9JRFgpOwogCQllbHNlCi0JCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpOworCQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCk7CiAJfQogCiAJc2QtPmJyaWdodG5lc3MgPSBNUjk3MzEwQV9CUklHSFRORVNTX0RFRkFVTFQ7CiAJc2QtPmV4cG9zdXJlID0gTVI5NzMxMEFfRVhQT1NVUkVfREVGQVVMVDsKLQlzZC0+Z2FpbiA9IE1SOTczMTBBX0dBSU5fREVGQVVMVDsKKwlzZC0+Z2FpbiA9IGdhaW5fZGVmYXVsdDsKKwlzZC0+Y29udHJhc3QgPSBNUjk3MzEwQV9DT05UUkFTVF9ERUZBVUxUOwogCXNkLT5taW5fY2xvY2tkaXYgPSBNUjk3MzEwQV9NSU5fQ0xPQ0tESVZfREVGQVVMVDsKIAogCXJldHVybiAwOwpAQCAtNjk3LDYgKzc2MCwxMiBAQAogCQkJezB4MTMsIDB4MDAsIHsweDAxfSwgMX0sCiAJCQl7MCwgMCwgezB9LCAwfQogCQl9OworCQkvKiBXaXRob3V0IHRoaXMgY29tbWFuZCB0aGUgY2FtIHdvbid0IHdvcmsgd2l0aCBVU0ItVUhDSSAqLworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDBhOworCQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSAweDAwOworCQllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMik7CisJCWlmIChlcnJfY29kZSA8IDApCisJCQlyZXR1cm4gZXJyX2NvZGU7CiAJCWVycl9jb2RlID0gc2Vuc29yX3dyaXRlX3JlZ3MoZ3NwY2FfZGV2LCBjaWZfc2Vuc29yMV9pbml0X2RhdGEsCiAJCQkJCSBBUlJBWV9TSVpFKGNpZl9zZW5zb3IxX2luaXRfZGF0YSkpOwogCX0KQEAgLTcxNyw2ICs3ODYsMTAgQEAKIAkJZGF0YVs1XSAgPSAweDAwOwogCQlkYXRhWzEwXSA9IDB4OTE7CiAJfQorCWlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMikgeworCQlkYXRhWzVdICA9IDB4MDA7CisJCWRhdGFbMTBdID0gMHgxODsKKwl9CiAKIAlzd2l0Y2ggKGdzcGNhX2Rldi0+d2lkdGgpIHsKIAljYXNlIDE2MDoKQEAgLTczMSw2ICs4MDQsMTAgQEAKIAkJZGF0YVs0XSA9IDB4Nzg7ICAvKiByZWcgMywgViBzaXplLzQgKi8KIAkJZGF0YVs2XSA9IDB4MDQ7ICAvKiByZWcgNSwgSCBzdGFydCAqLwogCQlkYXRhWzhdID0gMHgwMzsgIC8qIHJlZyA3LCBWIHN0YXJ0ICovCisJCWlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMikgeworCQkJZGF0YVs2XSA9IDI7CisJCQlkYXRhWzhdID0gMTsKKwkJfQogCQlpZiAoc2QtPmRvX2xjZF9zdG9wKQogCQkJZGF0YVs4XSA9IDB4MDQ7ICAvKiBCYXllciB0aWxlIHNoaWZ0ZWQgKi8KIAkJYnJlYWs7CkBAIC03NTMsNyArODMwLDYgQEAKIAkJcmV0dXJuIGVycl9jb2RlOwogCiAJaWYgKCFzZC0+c2Vuc29yX3R5cGUpIHsKLQkJLyogVGhlIG9ubHkga25vd24gc2Vuc29yX3R5cGUgMCBjYW0gaXMgdGhlIEFyZ3VzIERDLTE2MjAgKi8KIAkJY29uc3Qgc3RydWN0IHNlbnNvcl93X2RhdGEgdmdhX3NlbnNvcjBfaW5pdF9kYXRhW10gPSB7CiAJCQl7MHgwMSwgMHgwMCwgezB4MGMsIDB4MDAsIDB4MDR9LCAzfSwKIAkJCXsweDE0LCAweDAwLCB7MHgwMSwgMHhlNCwgMHgwMiwgMHg4NH0sIDR9LApAQCAtNzY0LDcgKzg0MCw3IEBACiAJCX07CiAJCWVycl9jb2RlID0gc2Vuc29yX3dyaXRlX3JlZ3MoZ3NwY2FfZGV2LCB2Z2Ffc2Vuc29yMF9pbml0X2RhdGEsCiAJCQkJCSBBUlJBWV9TSVpFKHZnYV9zZW5zb3IwX2luaXRfZGF0YSkpOwotCX0gZWxzZSB7CS8qIHNkLT5zZW5zb3JfdHlwZSA9IDEgKi8KKwl9IGVsc2UgaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAxKSB7CiAJCWNvbnN0IHN0cnVjdCBzZW5zb3Jfd19kYXRhIGNvbG9yX2FkaltdID0gewogCQkJezB4MDIsIDB4MDAsIHsweDA2LCAweDU5LCAweDBjLCAweDE2LCAweDAwLAogCQkJCS8qIGFkanVzdGVkIGJsdWUsIGdyZWVuLCByZWQgZ2FpbiBjb3JyZWN0CkBAIC04MDIsNiArODc4LDQ4IEBACiAKIAkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IxX2luaXRfZGF0YSwKIAkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjFfaW5pdF9kYXRhKSk7CisJfSBlbHNlIHsJLyogc2Vuc29yIHR5cGUgPT0gMiAqLworCQljb25zdCBzdHJ1Y3Qgc2Vuc29yX3dfZGF0YSB2Z2Ffc2Vuc29yMl9pbml0X2RhdGFbXSA9IHsKKworCQkJezB4MDEsIDB4MDAsIHsweDQ4fSwgMX0sCisJCQl7MHgwMiwgMHgwMCwgezB4MjJ9LCAxfSwKKwkJCS8qIFJlZyAzIG1zYiBhbmQgNCBpcyBsc2Igb2YgdGhlIGV4cG9zdXJlIHNldHRpbmcqLworCQkJezB4MDUsIDB4MDAsIHsweDEwfSwgMX0sCisJCQl7MHgwNiwgMHgwMCwgezB4MDB9LCAxfSwKKwkJCXsweDA3LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MDgsIDB4MDAsIHsweDAwfSwgMX0sCisJCQl7MHgwOSwgMHgwMCwgezB4MDB9LCAxfSwKKwkJCS8qIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgaW4gdGhlIGdhaW4gY29udHJvbAorCQkJICogd2hpY2ggaXMgQlRXIGNvbXBsZXRlbHkgYm9ya2VkIGluIHRoZSBPRU0gZHJpdmVyCisJCQkgKiBUaGUgdmFsdWVzIGZvciBlYWNoIGNvbG9yIGdvIGZyb20gMCB0byAweDdmZgorCQkJICp7MHgwYSwgMHgwMCwgezB4MDF9LCAxfSwgIGdyZWVuMSBnYWluIG1zYgorCQkJICp7MHgwYiwgMHgwMCwgezB4MTB9LCAxfSwgIGdyZWVuMSBnYWluIGxzYgorCQkJICp7MHgwYywgMHgwMCwgezB4MDF9LCAxfSwgIHJlZCBnYWluIG1zYgorCQkJICp7MHgwZCwgMHgwMCwgezB4MTB9LCAxfSwgIHJlZCBnYWluIGxzYgorCQkJICp7MHgwZSwgMHgwMCwgezB4MDF9LCAxfSwgIGJsdWUgZ2FpbiBtc2IKKwkJCSAqezB4MGYsIDB4MDAsIHsweDEwfSwgMX0sICBibHVlIGdhaW4gbHNiCisJCQkgKnsweDEwLCAweDAwLCB7MHgwMX0sIDF9LCBncmVlbjIgZ2FpbiBtc2IKKwkJCSAqezB4MTEsIDB4MDAsIHsweDEwfSwgMX0sIGdyZWVuMiBnYWluIGxzYgorCQkJICovCisJCQl7MHgxMiwgMHgwMCwgezB4MDB9LCAxfSwKKwkJCXsweDEzLCAweDAwLCB7MHgwNH0sIDF9LCAvKiB3ZWlyZCBlZmZlY3Qgb24gY29sb3JzICovCisJCQl7MHgxNCwgMHgwMCwgezB4MDB9LCAxfSwKKwkJCXsweDE1LCAweDAwLCB7MHgwNn0sIDF9LAorCQkJezB4MTYsIDB4MDAsIHsweDAxfSwgMX0sCisJCQl7MHgxNywgMHgwMCwgezB4ZTJ9LCAxfSwgLyogdmVydGljYWwgYWxpZ25tZW50ICovCisJCQl7MHgxOCwgMHgwMCwgezB4MDJ9LCAxfSwKKwkJCXsweDE5LCAweDAwLCB7MHg4Mn0sIDF9LCAvKiBkb24ndCBtZXNzIHdpdGggKi8KKwkJCXsweDFhLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MWIsIDB4MDAsIHsweDIwfSwgMX0sCisJCQkvKiB7MHgxYywgMHgwMCwgezB4MTd9LCAxfSwgY29udHJhc3QgY29udHJvbCAqLworCQkJezB4MWQsIDB4MDAsIHsweDgwfSwgMX0sIC8qIG1vdmluZyBjYXVzZXMgYSBtZXNzICovCisJCQl7MHgxZSwgMHgwMCwgezB4MDh9LCAxfSwgLyogbW92aW5nIGphbXMgdGhlIGNhbWVyYSAqLworCQkJezB4MWYsIDB4MDAsIHsweDBjfSwgMX0sCisJCQl7MHgyMCwgMHgwMCwgezB4MDB9LCAxfSwKKwkJCXswLCAwLCB7MH0sIDB9CisJCX07CisJCWVycl9jb2RlID0gc2Vuc29yX3dyaXRlX3JlZ3MoZ3NwY2FfZGV2LCB2Z2Ffc2Vuc29yMl9pbml0X2RhdGEsCisJCQkJCSBBUlJBWV9TSVpFKHZnYV9zZW5zb3IyX2luaXRfZGF0YSkpOwogCX0KIAlyZXR1cm4gZXJyX2NvZGU7CiB9CkBAIC04MzQsNiArOTUyLDcgQEAKIAkJcmV0dXJuIGVycl9jb2RlOwogCiAJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKIAlzZXRnYWluKGdzcGNhX2Rldik7CiAKQEAgLTg5Myw3ICsxMDEyLDcgQEAKIHN0YXRpYyB2b2lkIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IGV4cG9zdXJlOworCWludCBleHBvc3VyZSA9IE1SOTczMTBBX0VYUE9TVVJFX0RFRkFVTFQ7CiAJdTggYnVmWzJdOwogCiAJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBFWFBPU1VSRV9JRFgpKQpAQCAtOTA1LDYgKzEwMjQsMTEgQEAKIAkJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlICogOTI2NykgLyAxMDAwMCArIDMwMDsKIAkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDMsIGV4cG9zdXJlID4+IDQpOwogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgNCwgZXhwb3N1cmUgJiAweDBmKTsKKwl9IGVsc2UgaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAyKSB7CisJCWV4cG9zdXJlID0gc2QtPmV4cG9zdXJlOworCQlleHBvc3VyZSA+Pj0gMzsKKwkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDMsIGV4cG9zdXJlID4+IDgpOworCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgNCwgZXhwb3N1cmUgJiAweGZmKTsKIAl9IGVsc2UgewogCQkvKiBXZSBoYXZlIGJvdGggYSBjbG9jayBkaXZpZGVyIGFuZCBhbiBleHBvc3VyZSByZWdpc3Rlci4KIAkJICAgV2UgZmlyc3QgY2FsY3VsYXRlIHRoZSBjbG9jayBkaXZpZGVyLCBhcyB0aGF0IGRldGVybWluZXMKQEAgLTk0MywxNyArMTA2NywzNCBAQAogc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGdhaW5yZWc7CiAKLQlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEdBSU5fSURYKSkKKwlpZiAoKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBHQUlOX0lEWCkpICYmCisJICAgIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgU0FLQVJfQ1NfR0FJTl9JRFgpKSkKIAkJcmV0dXJuOwogCi0JaWYgKHNkLT5jYW1fdHlwZSA9PSBDQU1fVFlQRV9DSUYgJiYgc2QtPnNlbnNvcl90eXBlID09IDEpIHsKKwlpZiAoc2QtPmNhbV90eXBlID09IENBTV9UWVBFX0NJRiAmJiBzZC0+c2Vuc29yX3R5cGUgPT0gMSkKIAkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDB4MGUsIHNkLT5nYWluKTsKLQl9IGVsc2UgeworCWVsc2UgaWYgKHNkLT5jYW1fdHlwZSA9PSBDQU1fVFlQRV9WR0EgJiYgc2QtPnNlbnNvcl90eXBlID09IDIpCisJCWZvciAoZ2FpbnJlZyA9IDB4MGE7IGdhaW5yZWcgPCAweDExOyBnYWlucmVnICs9IDIpIHsKKwkJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCBnYWlucmVnLCBzZC0+Z2FpbiA+PiA4KTsKKwkJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCBnYWlucmVnICsgMSwgc2QtPmdhaW4gJiAweGZmKTsKKwkJfQorCWVsc2UKIAkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDB4MTAsIHNkLT5nYWluKTsKLQl9CiB9CiAKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IENPTlRSQVNUX0lEWCkpCisJCXJldHVybjsKKworCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCAweDFjLCBzZC0+Y29udHJhc3QpOworfQorCisKIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xMDA4LDYgKzExNDksMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2Rfc2V0bWluX2Nsb2NrZGl2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCBiNGY5NjU3Li5iYzRjZWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC0zOCw2ICszOCw3IEBACiAgKi8KICNkZWZpbmUgTU9EVUxFX05BTUUgIm92NTE5IgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiIpOwpAQCAtNzAsNiArNzEsOSBAQAogCWNoYXIgaW52ZXJ0X2xlZDsKICNkZWZpbmUgQlJJREdFX0lOVkVSVF9MRUQJOAogCisJY2hhciBzbmFwc2hvdF9wcmVzc2VkOworCWNoYXIgc25hcHNob3RfbmVlZHNfcmVzZXQ7CisKIAkvKiBEZXRlcm1pbmVkIGJ5IHNlbnNvciB0eXBlICovCiAJX191OCBzaWY7CiAKQEAgLTk5LDEwICsxMDMsMTIgQEAKICNkZWZpbmUgU0VOX09WNjYzMDhBRiA1CiAjZGVmaW5lIFNFTl9PVjc2MTAgNgogI2RlZmluZSBTRU5fT1Y3NjIwIDcKLSNkZWZpbmUgU0VOX09WNzY0MCA4Ci0jZGVmaW5lIFNFTl9PVjc2NzAgOQotI2RlZmluZSBTRU5fT1Y3NkJFIDEwCi0jZGVmaW5lIFNFTl9PVjg2MTAgMTEKKyNkZWZpbmUgU0VOX09WNzYyMEFFIDgKKyNkZWZpbmUgU0VOX09WNzY0MCA5CisjZGVmaW5lIFNFTl9PVjc2NDggMTAKKyNkZWZpbmUgU0VOX09WNzY3MCAxMQorI2RlZmluZSBTRU5fT1Y3NkJFIDEyCisjZGVmaW5lIFNFTl9PVjg2MTAgMTMKIAogCXU4IHNlbnNvcl9hZGRyOwogCWludCBzZW5zb3Jfd2lkdGg7CkBAIC0xMzksNiArMTQ1LDcgQEAKIHN0YXRpYyB2b2lkIHNldGZyZXEoc3RydWN0IHNkICpzZCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTE1Myw2ICsxNjAsNyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJfSwKKyNkZWZpbmUgQ09OVFJBU1RfSURYIDEKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTE2Nyw2ICsxNzUsNyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCiAJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKIAl9LAorI2RlZmluZSBDT0xPUl9JRFggMgogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCkBAIC0yNTU0LDcgKzI1NjMsNyBAQAogCQkvKiBJIGRvbid0IGtub3cgd2hhdCdzIGRpZmZlcmVudCBhYm91dCB0aGUgNzZCRSB5ZXQuICovCiAJCWlmIChpMmNfcihzZCwgMHgxNSkgJiAxKSB7CiAJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2MjBBRSIpOwotCQkJc2QtPnNlbnNvciA9IFNFTl9PVjc2MjA7CisJCQlzZC0+c2Vuc29yID0gU0VOX09WNzYyMEFFOwogCQl9IGVsc2UgewogCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYW4gT1Y3NkJFIik7CiAJCQlzZC0+c2Vuc29yID0gU0VOX09WNzZCRTsKQEAgLTI1ODgsNyArMjU5Nyw3IEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4NDg6CiAJCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYW4gT1Y3NjQ4Iik7Ci0JCQkJc2QtPnNlbnNvciA9IFNFTl9PVjc2NDA7IC8qIEZJWE1FICovCisJCQkJc2QtPnNlbnNvciA9IFNFTl9PVjc2NDg7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCVBERUJVRyhEX1BST0JFLCAiVW5rbm93biBzZW5zb3I6IDB4NzYleCIsIGxvdyk7CkBAIC0yNjgwLDYgKzI2ODksMzYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNkX3Jlc2V0X3NuYXBzaG90KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoIXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCkKKwkJcmV0dXJuOworCisJLyogTm90ZSBpdCBpcyBpbXBvcnRhbnQgdGhhdCB3ZSBjbGVhciBzZC0+c25hcHNob3RfbmVlZHNfcmVzZXQsCisJICAgYmVmb3JlIGFjdHVhbGx5IGNsZWFyaW5nIHRoZSBzbmFwc2hvdCBzdGF0ZSBpbiB0aGUgYnJpZGdlCisJICAgb3RoZXJ3aXNlIHdlIG1pZ2h0IHJhY2Ugd2l0aCB0aGUgcGt0X3NjYW4gaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlzZC0+c25hcHNob3RfbmVlZHNfcmVzZXQgPSAwOworCisJc3dpdGNoIChzZC0+YnJpZGdlKSB7CisJY2FzZSBCUklER0VfT1Y1MTE6CisJY2FzZSBCUklER0VfT1Y1MTFQTFVTOgorCQlyZWdfdyhzZCwgUjUxeF9TWVNfU05BUCwgMHgwMik7CisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAwKTsKKwkJYnJlYWs7CisJY2FzZSBCUklER0VfT1Y1MTg6CisJY2FzZSBCUklER0VfT1Y1MThQTFVTOgorCQlyZWdfdyhzZCwgUjUxeF9TWVNfU05BUCwgMHgwMik7IC8qIFJlc2V0ICovCisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAxKTsgLyogRW5hYmxlICovCisJCWJyZWFrOworCWNhc2UgQlJJREdFX09WNTE5OgorCQlyZWdfdyhzZCwgUjUxeF9TWVNfUkVTRVQsIDB4NDApOworCQlyZWdfdyhzZCwgUjUxeF9TWVNfUkVTRVQsIDB4MDApOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQgb3Y1MXhfdXBsb2FkX3F1YW5fdGFibGVzKHN0cnVjdCBzZCAqc2QpCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciB5UXVhblRhYmxlNTExW10gPSB7CkBAIC0zMTE1LDcgKzMxNTQsMTEgQEAKIAkJCQkgICAgICAoMSA8PCBPVjc2NzBfRlJFUV9JRFgpOwogCX0KIAlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwotCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDAgfHwgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwKQorCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDAgfHwKKwkgICAgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQ4KQorCQlnc3BjYV9kZXYtPmN0cmxfZGlzIHw9ICgxIDw8IEFVVE9CUklHSFRfSURYKSB8CisJCQkJICAgICAgICgxIDw8IENPTlRSQVNUX0lEWCk7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY3MCkKIAkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAxIDw8IEFVVE9CUklHSFRfSURYOwogCS8qIE9WODYxMCBGcmVxdWVuY3kgZmlsdGVyIGNvbnRyb2wgc2hvdWxkIHdvcmsgYnV0IG5lZWRzIHRlc3RpbmcgKi8KIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y4NjEwKQpAQCAtMzE2OSwxMCArMzIxMiwxMiBAQAogCQkJcmV0dXJuIC1FSU87CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2MjAsIEFSUkFZX1NJWkUobm9ybV83NjIwKSkpCiAJCQlyZXR1cm4gLUVJTzsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjQwOgorCWNhc2UgU0VOX09WNzY0ODoKIAkJaWYgKHdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2NDAsIEFSUkFZX1NJWkUobm9ybV83NjQwKSkpCiAJCQlyZXR1cm4gLUVJTzsKIAkJYnJlYWs7CkBAIC0zMjQ2LDcgKzMyOTEsOSBAQAogCS8qIE5vdGUgb25jZSB0aGUgRklYTUUncyBpbiBtb2RlX2luaXRfb3Zfc2Vuc29yX3JlZ3MoKSBhcmUgZml4ZWQKIAkgICBmb3IgbW9yZSBzZW5zb3JzIHdlIG5lZWQgdG8gZG8gdGhpcyBmb3IgdGhlbSB0b28gKi8KIAljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NjIwQUU6CiAJY2FzZSBTRU5fT1Y3NjQwOgorCWNhc2UgU0VOX09WNzY0ODoKIAljYXNlIFNFTl9PVjc2QkU6CiAJCWlmIChzZC0+Z3NwY2FfZGV2LndpZHRoID09IDMyMCkKIAkJCWludGVybGFjZWQgPSAxOwpAQCAtMzM3Nyw3ICszNDI0LDcgQEAKIAogCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9PVjUxOFBMVVMpIHsKIAkJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JCWNhc2UgU0VOX09WNzYyMDoKKwkJY2FzZSBTRU5fT1Y3NjIwQUU6CiAJCQlpZiAoc2QtPmdzcGNhX2Rldi53aWR0aCA9PSAzMjApIHsKIAkJCQlyZWdfdyhzZCwgMHgyMCwgMHgwMCk7CiAJCQkJcmVnX3coc2QsIDB4MjEsIDB4MTkpOwpAQCAtMzM4Niw2ICszNDMzLDEwIEBACiAJCQkJcmVnX3coc2QsIDB4MjEsIDB4MWYpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgU0VOX09WNzYyMDoKKwkJCXJlZ193KHNkLCAweDIwLCAweDAwKTsKKwkJCXJlZ193KHNkLCAweDIxLCAweDE5KTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmVnX3coc2QsIDB4MjEsIDB4MTkpOwogCQl9CkBAIC0zNDg4LDcgKzM1MzksOCBAQAogCQlpZiAod3JpdGVfcmVndmFscyhzZCwgbW9kZV9pbml0XzUxOSwKIAkJCQkgIEFSUkFZX1NJWkUobW9kZV9pbml0XzUxOSkpKQogCQkJcmV0dXJuIC1FSU87Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDApIHsKKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fAorCQkgICAgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQ4KSB7CiAJCQkvKiBTZWxlY3QgOC1iaXQgaW5wdXQgbW9kZSAqLwogCQkJcmVnX3dfbWFzayhzZCwgT1Y1MTlfUjIwX0RGUiwgMHgxMCwgMHgxMCk7CiAJCX0KQEAgLTM1MDMsNiArMzU1NSw5IEBACiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY3MCAmJgogCSAgICBzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZVtzZC0+Z3NwY2FfZGV2LmN1cnJfbW9kZV0ucHJpdikKIAkJcmVnX3coc2QsIE9WNTE5X1IxMl9YX09GRlNFVEwsIDB4MDQpOworCWVsc2UgaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0OCAmJgorCSAgICBzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZVtzZC0+Z3NwY2FfZGV2LmN1cnJfbW9kZV0ucHJpdikKKwkJcmVnX3coc2QsIE9WNTE5X1IxMl9YX09GRlNFVEwsIDB4MDEpOwogCWVsc2UKIAkJcmVnX3coc2QsIE9WNTE5X1IxMl9YX09GRlNFVEwsIDB4MDApOwogCXJlZ193KHNkLCBPVjUxOV9SMTNfWF9PRkZTRVRILAkweDAwKTsKQEAgLTM1MjAsNiArMzU3NSw3IEBACiAJc2QtPmNsb2NrZGl2ID0gMDsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlzd2l0Y2ggKHNkLT5mcmFtZV9yYXRlKSB7CiAJCWRlZmF1bHQ6CiAvKgkJY2FzZSAzMDogKi8KQEAgLTM2NDksNiArMzcwNSw3IEBACiAJCWkyY193X21hc2soc2QsIDB4MTIsIDB4MDQsIDB4MDYpOyAvKiBBV0I6IDEgVGVzdCBwYXR0ZXJuOiAwICovCiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAljYXNlIFNFTl9PVjc2QkU6CiAJCWkyY193X21hc2soc2QsIDB4MTQsIHF2Z2EgPyAweDIwIDogMHgwMCwgMHgyMCk7CiAJCWkyY193X21hc2soc2QsIDB4MjgsIHF2Z2EgPyAweDAwIDogMHgyMCwgMHgyMCk7CkBAIC0zNjYzLDEzICszNzIwLDE2IEBACiAJCQlpMmNfdyhzZCwgMHgzNSwgcXZnYSA/IDB4MWUgOiAweDllKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjQwOgorCWNhc2UgU0VOX09WNzY0ODoKIAkJaTJjX3dfbWFzayhzZCwgMHgxNCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsKIAkJaTJjX3dfbWFzayhzZCwgMHgyOCwgcXZnYSA/IDB4MDAgOiAweDIwLCAweDIwKTsKLS8qCQlpMmNfdyhzZCwgMHgyNCwgcXZnYSA/IDB4MjAgOiAweDNhKTsgKi8KLS8qCQlpMmNfdyhzZCwgMHgyNSwgcXZnYSA/IDB4MzAgOiAweDYwKTsgKi8KLS8qCQlpMmNfd19tYXNrKHNkLCAweDJkLCBxdmdhID8gMHg0MCA6IDB4MDAsIDB4NDApOyAqLwotLyoJCWkyY193X21hc2soc2QsIDB4NjcsIHF2Z2EgPyAweGYwIDogMHg5MCwgMHhmMCk7ICovCi0vKgkJaTJjX3dfbWFzayhzZCwgMHg3NCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsgKi8KKwkJLyogU2V0dGluZyB0aGlzIHVuZG9jdW1lbnRlZCBiaXQgaW4gcXZnYSBtb2RlIHJlbW92ZXMgYSB2ZXJ5CisJCSAgIGFubm95aW5nIHZlcnRpY2FsIHNoYWtpbmcgb2YgdGhlIGltYWdlICovCisJCWkyY193X21hc2soc2QsIDB4MmQsIHF2Z2EgPyAweDQwIDogMHgwMCwgMHg0MCk7CisJCS8qIFVua25vd24gKi8KKwkJaTJjX3dfbWFzayhzZCwgMHg2NywgcXZnYSA/IDB4ZjAgOiAweDkwLCAweGYwKTsKKwkJLyogQWxsb3cgaGlnaGVyIGF1dG9tYXRpYyBnYWluICh0byBhbGxvdyBoaWdoZXIgZnJhbWVyYXRlcykgKi8KKwkJaTJjX3dfbWFzayhzZCwgMHg3NCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsKIAkJaTJjX3dfbWFzayhzZCwgMHgxMiwgMHgwNCwgMHgwNCk7IC8qIEFXQjogMSAqLwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NzA6CkBAIC0zNzk1LDExICszODU1LDEzIEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCQlod3NiYXNlID0gMHgyZjsJCS8qIEZyb20gNzYyMC5TRVQgKHNwZWMgaXMgd3JvbmcpICovCiAJCWh3ZWJhc2UgPSAweDJmOwogCQl2d3NiYXNlID0gdndlYmFzZSA9IDB4MDU7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzY0MDoKKwljYXNlIFNFTl9PVjc2NDg6CiAJCWh3c2Jhc2UgPSAweDFhOwogCQlod2ViYXNlID0gMHgxYTsKIAkJdndzYmFzZSA9IHZ3ZWJhc2UgPSAweDAzOwpAQCAtMzg5Myw2ICszOTU1LDEyIEBACiAJc2V0YXV0b2JyaWdodG5lc3Moc2QpOwogCXNldGZyZXEoc2QpOwogCisJLyogRm9yY2UgY2xlYXIgc25hcHNob3Qgc3RhdGUgaW4gY2FzZSB0aGUgc25hcHNob3QgYnV0dG9uIHdhcworCSAgIHByZXNzZWQgd2hpbGUgd2Ugd2VyZW4ndCBzdHJlYW1pbmcgKi8KKwlzZC0+c25hcHNob3RfbmVlZHNfcmVzZXQgPSAxOworCXNkX3Jlc2V0X3NuYXBzaG90KGdzcGNhX2Rldik7CisJc2QtPnNuYXBzaG90X3ByZXNzZWQgPSAwOworCiAJcmV0ID0gb3Y1MXhfcmVzdGFydChzZCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMzkxOSw2ICszOTg3LDM0IEBACiAJCXc5OTY4Y2Zfc3RvcDAoc2QpOwogfQogCitzdGF0aWMgdm9pZCBvdjUxeF9oYW5kbGVfYnV0dG9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggc3RhdGUpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKHNkLT5zbmFwc2hvdF9wcmVzc2VkICE9IHN0YXRlKSB7CisjaWZkZWYgQ09ORklHX0lOUFVUCisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIHN0YXRlKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisjZW5kaWYKKwkJaWYgKHN0YXRlKQorCQkJc2QtPnNuYXBzaG90X25lZWRzX3Jlc2V0ID0gMTsKKworCQlzZC0+c25hcHNob3RfcHJlc3NlZCA9IHN0YXRlOworCX0gZWxzZSB7CisJCS8qIE9uIHRoZSBvdjUxMSAvIG92NTE5IHdlIG5lZWQgdG8gcmVzZXQgdGhlIGJ1dHRvbiBzdGF0ZQorCQkgICBtdWx0aXBsZSB0aW1lcywgYXMgcmVzZXR0aW5nIGRvZXMgbm90IHdvcmsgYXMgbG9uZyBhcyB0aGUKKwkJICAgYnV0dG9uIHN0YXlzIHByZXNzZWQgKi8KKwkJc3dpdGNoIChzZC0+YnJpZGdlKSB7CisJCWNhc2UgQlJJREdFX09WNTExOgorCQljYXNlIEJSSURHRV9PVjUxMVBMVVM6CisJCWNhc2UgQlJJREdFX09WNTE5OgorCQkJaWYgKHN0YXRlKQorCQkJCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgb3Y1MTFfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJdTggKmluLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KQEAgLTM5NDAsNiArNDAzNiw3IEBACiAJICovCiAJaWYgKCEoaW5bMF0gfCBpblsxXSB8IGluWzJdIHwgaW5bM10gfCBpbls0XSB8IGluWzVdIHwgaW5bNl0gfCBpbls3XSkgJiYKIAkgICAgKGluWzhdICYgMHgwOCkpIHsKKwkJb3Y1MXhfaGFuZGxlX2J1dHRvbihnc3BjYV9kZXYsIChpbls4XSA+PiAyKSAmIDEpOwogCQlpZiAoaW5bOF0gJiAweDgwKSB7CiAJCQkvKiBGcmFtZSBlbmQgKi8KIAkJCWlmICgoaW5bOV0gKyAxKSAqIDggIT0gZ3NwY2FfZGV2LT53aWR0aCB8fApAQCAtMzk3Nyw2ICs0MDc0LDcgQEAKIAkvKiBBIGZhbHNlIHBvc2l0aXZlIGhlcmUgaXMgbGlrZWx5LCB1bnRpbCBPVlQgZ2l2ZXMgbWUKIAkgKiB0aGUgZGVmaW5pdGl2ZSBTT0YvRU9GIGZvcm1hdCAqLwogCWlmICgoIShkYXRhWzBdIHwgZGF0YVsxXSB8IGRhdGFbMl0gfCBkYXRhWzNdIHwgZGF0YVs1XSkpICYmIGRhdGFbNl0pIHsKKwkJb3Y1MXhfaGFuZGxlX2J1dHRvbihnc3BjYV9kZXYsIChkYXRhWzZdID4+IDEpICYgMSk7CiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBOVUxMLCAwKTsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBOVUxMLCAwKTsKIAkJc2QtPnBhY2tldF9uciA9IDA7CkBAIC00MDI0LDYgKzQxMjIsOSBAQAogCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGZmICYmIGRhdGFbMl0gPT0gMHhmZikgewogCQlzd2l0Y2ggKGRhdGFbM10pIHsKIAkJY2FzZSAweDUwOgkJLyogc3RhcnQgb2YgZnJhbWUgKi8KKwkJCS8qIERvbid0IGNoZWNrIHRoZSBidXR0b24gc3RhdGUgaGVyZSwgYXMgdGhlIHN0YXRlCisJCQkgICB1c3VhbGx5IChhbHdheXMgPykgY2hhbmdlcyBhdCBFT0YgYW5kIGNoZWNraW5nIGl0CisJCQkgICBoZXJlIGxlYWRzIHRvIHVubmVjZXNzYXJ5IHNuYXBzaG90IHN0YXRlIHJlc2V0cy4gKi8KICNkZWZpbmUgSERSU1ogMTYKIAkJCWRhdGEgKz0gSERSU1o7CiAJCQlsZW4gLT0gSERSU1o7CkBAIC00MDM1LDYgKzQxMzYsNyBAQAogCQkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOwogCQkJcmV0dXJuOwogCQljYXNlIDB4NTE6CQkvKiBlbmQgb2YgZnJhbWUgKi8KKwkJCW92NTF4X2hhbmRsZV9idXR0b24oZ3NwY2FfZGV2LCBkYXRhWzExXSAmIDEpOwogCQkJaWYgKGRhdGFbOV0gIT0gMCkKIAkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKIAkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULApAQCAtNDEwMyw5ICs0MjA1LDExIEBACiAJY2FzZSBTRU5fT1Y2NjMwOgogCWNhc2UgU0VOX09WNjYzMDhBRjoKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19CUlQsIHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAkJLyogNzYyMCBkb2Vzbid0IGxpa2UgbWFudWFsIGNoYW5nZXMgd2hlbiBpbiBhdXRvIG1vZGUgKi8KIAkJaWYgKCFzZC0+YXV0b2JyaWdodG5lc3MpCiAJCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19CUlQsIHZhbCk7CkBAIC00MTQyLDcgKzQyNDYsOCBAQAogCQlpMmNfdyhzZCwgMHg2NCwgY3RhYlt2YWwgPj4gNV0pOwogCQlicmVhazsKIAkgICAgfQotCWNhc2UgU0VOX09WNzYyMDogeworCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRTogewogCQlzdGF0aWMgY29uc3QgX191OCBjdGFiW10gPSB7CiAJCQkweDAxLCAweDA1LCAweDA5LCAweDExLCAweDE1LCAweDM1LCAweDM3LCAweDU3LAogCQkJMHg1YiwgMHhhNSwgMHhhNywgMHhjNywgMHhjOSwgMHhjZiwgMHhlZiwgMHhmZgpAQCAtNDE1MiwxMCArNDI1Nyw2IEBACiAJCWkyY193KHNkLCAweDY0LCBjdGFiW3ZhbCA+PiA0XSk7CiAJCWJyZWFrOwogCSAgICB9Ci0JY2FzZSBTRU5fT1Y3NjQwOgotCQkvKiBVc2UgZ2FpbiBjb250cm9sIGluc3RlYWQuICovCi0JCWkyY193KHNkLCBPVjc2MTBfUkVHX0dBSU4sIHZhbCA+PiAyKTsKLQkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjcwOgogCQkvKiBjaGVjayB0aGF0IHRoaXMgaXNuJ3QganVzdCB0aGUgc2FtZSBhcyBvdjc2MTAgKi8KIAkJaTJjX3coc2QsIE9WNzY3MF9SRUdfQ09OVFJBUywgdmFsID4+IDEpOwpAQCAtNDE3OSw2ICs0MjgwLDcgQEAKIAkJaTJjX3coc2QsIE9WNzYxMF9SRUdfU0FULCB2YWwpOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NjIwQUU6CiAJCS8qIFVzZSBVViBnYW1tYSBjb250cm9sIGluc3RlYWQuIEJpdHMgMCAmIDcgYXJlIHJlc2VydmVkLiAqLwogLyoJCXJjID0gb3ZfaTJjX3dyaXRlKHNkLT5kZXYsIDB4NjIsICh2YWwgPj4gOSkgJiAweDdlKTsKIAkJaWYgKHJjIDwgMCkKQEAgLTQxODYsNiArNDI4OCw3IEBACiAJCWkyY193KHNkLCBPVjc2MTBfUkVHX1NBVCwgdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjQwOgorCWNhc2UgU0VOX09WNzY0ODoKIAkJaTJjX3coc2QsIE9WNzYxMF9SRUdfU0FULCB2YWwgJiAweGYwKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjcwOgpAQCAtNDE5OCw3ICs0MzAxLDggQEAKIAogc3RhdGljIHZvaWQgc2V0YXV0b2JyaWdodG5lc3Moc3RydWN0IHNkICpzZCkKIHsKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQwIHx8IHNkLT5zZW5zb3IgPT0gU0VOX09WNzY3MCB8fAorCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDAgfHwgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQ4IHx8CisJICAgIHNkLT5zZW5zb3IgPT0gU0VOX09WNzY3MCB8fAogCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjI2MTAgfHwgc2QtPnNlbnNvciA9PSBTRU5fT1YzNjEwKQogCQlyZXR1cm47CiAKQEAgLTQ0NzUsOSArNDU3OSwxMyBAQAogCS5zdG9wTiA9IHNkX3N0b3BOLAogCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5kcV9jYWxsYmFjayA9IHNkX3Jlc2V0X3NuYXBzaG90LAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCiAJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKIAkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5vdGhlcl9pbnB1dCA9IDEsCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtNDQ5NCw3ICs0NjAyLDggQEAKIAkgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDI4YyksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAogCXtVU0JfREVWSUNFKDB4MDU0YywgMHgwMTU0KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCi0Je1VTQl9ERVZJQ0UoMHgwNTRjLCAweDAxNTUpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKKwl7VVNCX0RFVklDRSgweDA1NGMsIDB4MDE1NSksCisJIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB8IEJSSURHRV9JTlZFUlRfTEVEIH0sCiAJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDA1MTEpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTEgfSwKIAl7VVNCX0RFVklDRSgweDA1YTksIDB4MDUxOCksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOCB9LAogCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTE5KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKaW5kZXggMGE2YjhmMC4uOTU3ZTA1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBvdjUzNCBnc3BjYSBkcml2ZXIKKyAqIG92NTM0LW92NzcyeCBnc3BjYSBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW50b25pbyBPc3BpdGUgPG9zcGl0ZUBzdHVkZW50aS51bmluYS5pdD4KICAqIENvcHlyaWdodCAoQykgMjAwOCBKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4KQEAgLTY4LDEyICs2OCw3IEBACiAJczggc2hhcnBuZXNzOwogCXU4IGhmbGlwOwogCXU4IHZmbGlwOwotCXU4IHNhdHVyOwotCXU4IGxpZ2h0ZnJlcTsKIAotCXU4IHNlbnNvcjsKLSNkZWZpbmUgU0VOU09SX09WNzcyWCAwCi0jZGVmaW5lIFNFTlNPUl9PVjk2NVggMQogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtMTAxLDEyICs5Niw4IEBACiBzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwotc3RhdGljIGludCBzZF9zZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7Ci1zdGF0aWMgaW50IHNkX2dldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwotc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc19vdjc3MnhbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogICAgIHsJCQkJCQkJLyogMCAqLwogCXsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMTE1LDggKzEwNiw4IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQlJJR0hUTkVTU183N19ERUYgMjAKLQkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTXzc3X0RFRiwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMjAKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAogCS5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLApAQCAtMTI5LDggKzEyMCw4IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQ09OVFJBU1RfNzdfREVGIDM3Ci0JCS5kZWZhdWx0X3ZhbHVlID0gQ09OVFJBU1RfNzdfREVGLAorI2RlZmluZSBDT05UUkFTVF9ERUYgMzcKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCiAJfSwKIAkuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCiAJLmdldCA9IHNkX2dldGNvbnRyYXN0LApAQCAtMTU3LDggKzE0OCw4IEBACiAJICAgIC5taW5pbXVtID0gMCwKIAkgICAgLm1heGltdW0gPSAyNTUsCiAJICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgRVhQT183N19ERUYgMTIwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT183N19ERUYsCisjZGVmaW5lIEVYUE9fREVGIDEyMAorCSAgICAuZGVmYXVsdF92YWx1ZSA9IEVYUE9fREVGLAogCX0sCiAJLnNldCA9IHNkX3NldGV4cG9zdXJlLAogCS5nZXQgPSBzZF9nZXRleHBvc3VyZSwKQEAgLTIxMywxMyArMjA0LDEzIEBACiAJICAgIC5taW5pbXVtID0gMCwKIAkgICAgLm1heGltdW0gPSAxLAogCSAgICAuc3RlcCAgICA9IDEsCi0jZGVmaW5lIEFVVE9HQUlOXzc3X0RFRiAwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fNzdfREVGLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMAorCSAgICAuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRhdXRvZ2FpbiwKIAkuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCiAgICAgfSwKLSNkZWZpbmUgQVdCXzc3X0lEWCA4CisjZGVmaW5lIEFXQl9JRFggOAogICAgIHsJCQkJCQkJLyogOCAqLwogCXsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UsCkBAIC0yNDIsOCArMjMzLDggQEAKIAkgICAgLm1pbmltdW0gPSAwLAogCSAgICAubWF4aW11bSA9IDYzLAogCSAgICAuc3RlcCAgICA9IDEsCi0jZGVmaW5lIFNIQVJQTkVTU183N19ERUYgMAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IFNIQVJQTkVTU183N19ERUYsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgMAorCSAgICAuZGVmYXVsdF92YWx1ZSA9IFNIQVJQTkVTU19ERUYsCiAJfSwKIAkuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAogCS5nZXQgPSBzZF9nZXRzaGFycG5lc3MsCkBAIC0yNzcsMTA3ICsyNjgsNiBAQAogCS5nZXQgPSBzZF9nZXR2ZmxpcCwKICAgICB9LAogfTsKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc19vdjk2NXhbXSA9IHsKLSAgICB7CQkJCQkJCS8qIDAgKi8KLQl7Ci0JCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKLQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKLQkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDE1LAotCQkuc3RlcCAgICA9IDEsCi0jZGVmaW5lIEJSSUdIVE5FU1NfOTZfREVGIDcKLQkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTXzk2X0RFRiwKLQl9LAotCS5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAotCS5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAotICAgIH0sCi0gICAgewkJCQkJCQkvKiAxICovCi0JewotCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKLQkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDE1LAotCQkuc3RlcCAgICA9IDEsCi0jZGVmaW5lIENPTlRSQVNUXzk2X0RFRiAzCi0JCS5kZWZhdWx0X3ZhbHVlID0gQ09OVFJBU1RfOTZfREVGLAotCX0sCi0JLnNldCA9IHNkX3NldGNvbnRyYXN0LAotCS5nZXQgPSBzZF9nZXRjb250cmFzdCwKLSAgICB9LAotICAgIHsJCQkJCQkJLyogMiAqLwotCXsKLQkgICAgLmlkICAgICAgPSBWNEwyX0NJRF9BVVRPR0FJTiwKLQkgICAgLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCSAgICAubmFtZSAgICA9ICJBdXRvZ2FpbiIsCi0JICAgIC5taW5pbXVtID0gMCwKLQkgICAgLm1heGltdW0gPSAxLAotCSAgICAuc3RlcCAgICA9IDEsCi0jZGVmaW5lIEFVVE9HQUlOXzk2X0RFRiAxCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fOTZfREVGLAotCX0sCi0JLnNldCA9IHNkX3NldGF1dG9nYWluLAotCS5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKLSAgICB9LAotI2RlZmluZSBFWFBPXzk2X0lEWCAzCi0gICAgewkJCQkJCQkvKiAzICovCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX0VYUE9TVVJFLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JICAgIC5uYW1lICAgID0gIkV4cG9zdXJlIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDMsCi0JICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgRVhQT185Nl9ERUYgMAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IEVYUE9fOTZfREVGLAotCX0sCi0JLnNldCA9IHNkX3NldGV4cG9zdXJlLAotCS5nZXQgPSBzZF9nZXRleHBvc3VyZSwKLSAgICB9LAotICAgIHsJCQkJCQkJLyogNCAqLwotCXsKLQkgICAgLmlkICAgICAgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgLm5hbWUgICAgPSAiU2hhcnBuZXNzIiwKLQkgICAgLm1pbmltdW0gPSAtMSwJCS8qIC0xID0gYXV0byAqLwotCSAgICAubWF4aW11bSA9IDQsCi0JICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgU0hBUlBORVNTXzk2X0RFRiAtMQotCSAgICAuZGVmYXVsdF92YWx1ZSA9IFNIQVJQTkVTU185Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAotCS5nZXQgPSBzZF9nZXRzaGFycG5lc3MsCi0gICAgfSwKLSAgICB7CQkJCQkJCS8qIDUgKi8KLQl7Ci0JCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKLQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSAgICA9ICJTYXR1cmF0aW9uIiwKLQkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDQsCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgU0FUVVJfREVGIDIKLQkJLmRlZmF1bHRfdmFsdWUgPSBTQVRVUl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0c2F0dXIsCi0JLmdldCA9IHNkX2dldHNhdHVyLAotICAgIH0sCi0gICAgewotCXsKLQkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCi0JCS5uYW1lICAgID0gIkxpZ2h0IGZyZXF1ZW5jeSBmaWx0ZXIiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMiwJLyogMDogMCwgMTogNTBIeiwgMjo2MEh6ICovCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgRlJFUV9ERUYgMAotCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAotCX0sCi0JLnNldCA9IHNkX3NldGZyZXEsCi0JLmdldCA9IHNkX2dldGZyZXEsCi0gICAgfSwKLX07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG92NzcyeF9tb2RlW10gPSB7CiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9GSUVMRF9OT05FLApAQCAtMzkyLDM1ICsyODIsMjEgQEAKIAkgLnByaXYgPSAwfSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG92OTY1eF9tb2RlW10gPSB7Ci0JezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAotCSAuYnl0ZXNwZXJsaW5lID0gMzIwLAotCSAuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1OTAsCi0JIC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCi0JIC5wcml2ID0gNH0sCi0JezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAotCSAuYnl0ZXNwZXJsaW5lID0gNjQwLAotCSAuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCi0JIC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCi0JIC5wcml2ID0gM30sCi0JezgwMCwgNjAwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAotCSAuYnl0ZXNwZXJsaW5lID0gODAwLAotCSAuc2l6ZWltYWdlID0gODAwICogNjAwICogMyAvIDggKyA1OTAsCi0JIC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCi0JIC5wcml2ID0gMn0sCi0JezEwMjQsIDc2OCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKLQkgLmJ5dGVzcGVybGluZSA9IDEwMjQsCi0JIC5zaXplaW1hZ2UgPSAxMDI0ICogNzY4ICogMyAvIDggKyA1OTAsCi0JIC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCi0JIC5wcml2ID0gMX0sCi0JezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSAxMjgwLAotCSAuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAwfSwKK3N0YXRpYyBjb25zdCB1OCBxdmdhX3JhdGVzW10gPSB7MTI1LCAxMDAsIDc1LCA2MCwgNTAsIDQwLCAzMH07CitzdGF0aWMgY29uc3QgdTggdmdhX3JhdGVzW10gPSB7NjAsIDUwLCA0MCwgMzAsIDE1fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmcmFtZXJhdGVzIG92NzcyeF9mcmFtZXJhdGVzW10gPSB7CisJeyAvKiAzMjB4MjQwICovCisJCS5yYXRlcyA9IHF2Z2FfcmF0ZXMsCisJCS5ucmF0ZXMgPSBBUlJBWV9TSVpFKHF2Z2FfcmF0ZXMpLAorCX0sCisJeyAvKiA2NDB4NDgwICovCisJCS5yYXRlcyA9IHZnYV9yYXRlcywKKwkJLm5yYXRlcyA9IEFSUkFZX1NJWkUodmdhX3JhdGVzKSwKKwl9LAogfTsKIAotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292NzcyeFtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0W11bMl0gPSB7CiAJeyAweGMyLCAweDBjIH0sCiAJeyAweDg4LCAweGY4IH0sCiAJeyAweGMzLCAweDY5IH0sCkBAIC00NzgsNyArMzU0LDcgQEAKIAl7IDB4YzEsIDB4M2MgfSwKIAl7IDB4YzIsIDB4MGMgfSwKIH07Ci1zdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfb3Y3NzJ4W11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRbXVsyXSA9IHsKIAl7IDB4MTIsIDB4ODAgfSwKIAl7IDB4MTEsIDB4MDEgfSwKIC8qZml4bWU6IGJldHRlciBoYXZlIGEgZGVsYXk/Ki8KQEAgLTU3MSw3ICs0NDcsNyBAQAogCXsgMHg4ZSwgMHgwMCB9LAkJLyogRGUtbm9pc2UgdGhyZXNob2xkICovCiAJeyAweDBjLCAweGQwIH0KIH07Ci1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292NzcyeF92Z2FbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfdmdhW11bMl0gPSB7CiAJezB4MWMsIDB4MDB9LAogCXsweDFkLCAweDQwfSwKIAl7MHgxZCwgMHgwMn0sCkBAIC01ODIsNyArNDU4LDcgQEAKIAl7MHhjMCwgMHg1MH0sCiAJezB4YzEsIDB4M2N9LAogfTsKLXN0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfb3Y3NzJ4X3ZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF92Z2FbXVsyXSA9IHsKIAl7MHgxMiwgMHgwMH0sCiAJezB4MTcsIDB4MjZ9LAogCXsweDE4LCAweGEwfSwKQEAgLTU5Miw3ICs0NjgsNyBAQAogCXsweDJjLCAweGYwfSwKIAl7MHg2NSwgMHgyMH0sCiB9Owotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjc3MnhfcXZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9xdmdhW11bMl0gPSB7CiAJezB4MWMsIDB4MDB9LAogCXsweDFkLCAweDQwfSwKIAl7MHgxZCwgMHgwMn0sCkBAIC02MDMsNyArNDc5LDcgQEAKIAl7MHhjMCwgMHgyOH0sCiAJezB4YzEsIDB4MWV9LAogfTsKLXN0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfb3Y3NzJ4X3F2Z2FbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfcXZnYVtdWzJdID0gewogCXsweDEyLCAweDQwfSwKIAl7MHgxNywgMHgzZn0sCiAJezB4MTgsIDB4NTB9LApAQCAtNjE0LDU3MSArNDkwLDYgQEAKIAl7MHg2NSwgMHgyZn0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfb3Y5NjV4W11bMl0gPSB7Ci0JezB4ODgsIDB4Zjh9LAotCXsweDg5LCAweGZmfSwKLQl7MHg3NiwgMHgwM30sCi0JezB4OTIsIDB4MDN9LAotCXsweDk1LCAweDEwfSwKLQl7MHhlMiwgMHgwMH0sCi0JezB4ZTcsIDB4M2V9LAotCXsweDhkLCAweDFjfSwKLQl7MHg4ZSwgMHgwMH0sCi0JezB4OGYsIDB4MDB9LAotCXsweDFmLCAweDAwfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ODksIDB4ZmZ9LAotCXsweDg4LCAweGY4fSwKLQl7MHg3NiwgMHgwM30sCi0JezB4OTIsIDB4MDF9LAotCXsweDkzLCAweDE4fSwKLQl7MHgxYywgMHgwYX0sCi0JezB4MWQsIDB4NDh9LAotCXsweGMwLCAweDUwfSwKLQl7MHhjMSwgMHgzY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4MzQsIDB4MDV9LAotCXsweGU3LCAweDJlfSwKLQl7MHgzMSwgMHhmOX0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHgyNSwgMHg0Mn0sCi0JezB4OTQsIDB4MTF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9pbml0X292OTY1eFtdWzJdID0gewotCXsweDEyLCAweDgwfSwJLyogY29tNyAtIFNTQ0IgcmVzZXQgKi8KLQl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KLQl7MHgwMSwgMHg4MH0sCS8qIGJsdWUgKi8KLQl7MHgwMiwgMHg4MH0sCS8qIHJlZCAqLwotCXsweDAzLCAweDFifSwJLyogdnJlZiAqLwotCXsweDA0LCAweDAzfSwJLyogY29tMSAtIGV4cG9zdXJlIGxvdyBiaXRzICovCi0JezB4MGIsIDB4NTd9LAkvKiB2ZXIgKi8KLQl7MHgwZSwgMHg2MX0sCS8qIGNvbTUgKi8KLQl7MHgwZiwgMHg0Mn0sCS8qIGNvbTYgKi8KLQl7MHgxMSwgMHgwMH0sCS8qIGNsa3JjICovCi0JezB4MTIsIDB4MDJ9LAkvKiBjb203IC0gMTVmcHMgVkdBIFlVWVYgKi8KLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDE0LCAweDI4fSwJLyogY29tOSAqLwotCXsweDE2LCAweDI0fSwJLyogcmVnMTYgKi8KLQl7MHgxNywgMHgxZH0sCS8qIGhzdGFydCovCi0JezB4MTgsIDB4YmR9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wKi8KLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgyNCwgMHgzY30sCS8qIGFldyAqLwotCXsweDI1LCAweDM2fSwJLyogYWViICovCi0JezB4MjYsIDB4NzF9LAkvKiB2cHQgKi8KLQl7MHgyNywgMHgwOH0sCS8qIGJiaWFzICovCi0JezB4MjgsIDB4MDh9LAkvKiBnYmJpYXMgKi8KLQl7MHgyOSwgMHgxNX0sCS8qIGdyIGNvbSAqLwotCXsweDJhLCAweDAwfSwJLyogZXhoY2ggKi8KLQl7MHgyYiwgMHgwMH0sCS8qIGV4aGNsICovCi0JezB4MmMsIDB4MDh9LAkvKiByYmlhcyAqLwotCXsweDMyLCAweGZmfSwJLyogaHJlZiAqLwotCXsweDMzLCAweDAwfSwJLyogY2hsZiAqLwotCXsweDM0LCAweDNmfSwJLyogYXJlZjEgKi8KLQl7MHgzNSwgMHgwMH0sCS8qIGFyZWYyICovCi0JezB4MzYsIDB4Zjh9LAkvKiBhcmVmMyAqLwotCXsweDM4LCAweDcyfSwJLyogYWRjMiAqLwotCXsweDM5LCAweDU3fSwJLyogYXJlZjQgKi8KLQl7MHgzYSwgMHg4MH0sCS8qIHRzbGIgLSB5dXl2ICovCi0JezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KLQl7MHgzZCwgMHg5OX0sCS8qIGNvbTEzICovCi0JezB4M2YsIDB4YzF9LAkvKiBlZGdlICovCi0JezB4NDAsIDB4YzB9LAkvKiBjb20xNSAqLwotCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KLQl7MHg0MiwgMHhjMH0sCS8qIGNvbTE3ICovCi0JezB4NDMsIDB4MGF9LAkvKiByc3ZkICovCi0JezB4NDQsIDB4ZjB9LAotCXsweDQ1LCAweDQ2fSwKLQl7MHg0NiwgMHg2Mn0sCi0JezB4NDcsIDB4MmF9LAotCXsweDQ4LCAweDNjfSwKLQl7MHg0YSwgMHhmY30sCi0JezB4NGIsIDB4ZmN9LAotCXsweDRjLCAweDdmfSwKLQl7MHg0ZCwgMHg3Zn0sCi0JezB4NGUsIDB4N2Z9LAotCXsweDRmLCAweDk4fSwJLyogbWF0cml4ICovCi0JezB4NTAsIDB4OTh9LAotCXsweDUxLCAweDAwfSwKLQl7MHg1MiwgMHgyOH0sCi0JezB4NTMsIDB4NzB9LAotCXsweDU0LCAweDk4fSwKLQl7MHg1OCwgMHgxYX0sCS8qIG1hdHJpeCBjb2VmIHNpZ24gKi8KLQl7MHg1OSwgMHg4NX0sCS8qIEFXQiBjb250cm9sICovCi0JezB4NWEsIDB4YTl9LAotCXsweDViLCAweDY0fSwKLQl7MHg1YywgMHg4NH0sCi0JezB4NWQsIDB4NTN9LAotCXsweDVlLCAweDBlfSwKLQl7MHg1ZiwgMHhmMH0sCS8qIEFXQiBibHVlIGxpbWl0ICovCi0JezB4NjAsIDB4ZjB9LAkvKiBBV0IgcmVkIGxpbWl0ICovCi0JezB4NjEsIDB4ZjB9LAkvKiBBV0IgZ3JlZW4gbGltaXQgKi8KLQl7MHg2MiwgMHgwMH0sCS8qIGxjYzEgKi8KLQl7MHg2MywgMHgwMH0sCS8qIGxjYzIgKi8KLQl7MHg2NCwgMHgwMn0sCS8qIGxjYzMgKi8KLQl7MHg2NSwgMHgxNn0sCS8qIGxjYzQgKi8KLQl7MHg2NiwgMHgwMX0sCS8qIGxjYzUgKi8KLQl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCi0JezB4NmIsIDB4NWF9LAkvKiBkYnZsICovCi0JezB4NmMsIDB4MDR9LAotCXsweDZkLCAweDU1fSwKLQl7MHg2ZSwgMHgwMH0sCi0JezB4NmYsIDB4OWR9LAotCXsweDcwLCAweDIxfSwJLyogZG5zdGggKi8KLQl7MHg3MSwgMHg3OH0sCi0JezB4NzIsIDB4MDB9LAkvKiBwb2lkeCAqLwotCXsweDczLCAweDAxfSwJLyogcGNrZHYgKi8KLQl7MHg3NCwgMHgzYX0sCS8qIHhpbmR4ICovCi0JezB4NzUsIDB4MzV9LAkvKiB5aW5keCAqLwotCXsweDc2LCAweDAxfSwKLQl7MHg3NywgMHgwMn0sCi0JezB4N2EsIDB4MTJ9LAkvKiBnYW1tYSBjdXJ2ZSAqLwotCXsweDdiLCAweDA4fSwKLQl7MHg3YywgMHgxNn0sCi0JezB4N2QsIDB4MzB9LAotCXsweDdlLCAweDVlfSwKLQl7MHg3ZiwgMHg3Mn0sCi0JezB4ODAsIDB4ODJ9LAotCXsweDgxLCAweDhlfSwKLQl7MHg4MiwgMHg5YX0sCi0JezB4ODMsIDB4YTR9LAotCXsweDg0LCAweGFjfSwKLQl7MHg4NSwgMHhiOH0sCi0JezB4ODYsIDB4YzN9LAotCXsweDg3LCAweGQ2fSwKLQl7MHg4OCwgMHhlNn0sCi0JezB4ODksIDB4ZjJ9LAotCXsweDhhLCAweDAzfSwKLQl7MHg4YywgMHg4OX0sCS8qIGNvbTE5ICovCi0JezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCi0JezB4OTAsIDB4N2R9LAotCXsweDkxLCAweDdifSwKLQl7MHg5ZCwgMHgwM30sCS8qIGxjYzYgKi8KLQl7MHg5ZSwgMHgwNH0sCS8qIGxjYzcgKi8KLQl7MHg5ZiwgMHg3YX0sCi0JezB4YTAsIDB4Nzl9LAotCXsweGExLCAweDQwfSwJLyogYWVjaG0gKi8KLQl7MHhhNCwgMHg1MH0sCS8qIGNvbTIxICovCi0JezB4YTUsIDB4Njh9LAkvKiBjb20yNiAqLwotCXsweGE2LCAweDRhfSwJLyogQVdCIGdyZWVuICovCi0JezB4YTgsIDB4YzF9LAkvKiByZWZhOCAqLwotCXsweGE5LCAweGVmfSwJLyogcmVmYTkgKi8KLQl7MHhhYSwgMHg5Mn0sCi0JezB4YWIsIDB4MDR9LAotCXsweGFjLCAweDgwfSwJLyogYmxhY2sgbGV2ZWwgY29udHJvbCAqLwotCXsweGFkLCAweDgwfSwKLQl7MHhhZSwgMHg4MH0sCi0JezB4YWYsIDB4ODB9LAotCXsweGIyLCAweGYyfSwKLQl7MHhiMywgMHgyMH0sCi0JezB4YjQsIDB4MjB9LAkvKiBjdHJsYjQgKi8KLQl7MHhiNSwgMHgwMH0sCi0JezB4YjYsIDB4YWZ9LAotCXsweGJiLCAweGFlfSwKLQl7MHhiYywgMHg3Zn0sCS8qIEFEQyBjaGFubmVsIG9mZnNldHMgKi8KLQl7MHhkYiwgMHg3Zn0sCi0JezB4YmUsIDB4N2Z9LAotCXsweGJmLCAweDdmfSwKLQl7MHhjMCwgMHhlMn0sCi0JezB4YzEsIDB4YzB9LAotCXsweGMyLCAweDAxfSwKLQl7MHhjMywgMHg0ZX0sCi0JezB4YzYsIDB4ODV9LAotCXsweGM3LCAweDgwfSwJLyogY29tMjQgKi8KLQl7MHhjOSwgMHhlMH0sCi0JezB4Y2EsIDB4ZTh9LAotCXsweGNiLCAweGYwfSwKLQl7MHhjYywgMHhkOH0sCi0JezB4Y2QsIDB4ZjF9LAotCXsweDRmLCAweDk4fSwJLyogbWF0cml4ICovCi0JezB4NTAsIDB4OTh9LAotCXsweDUxLCAweDAwfSwKLQl7MHg1MiwgMHgyOH0sCi0JezB4NTMsIDB4NzB9LAotCXsweDU0LCAweDk4fSwKLQl7MHg1OCwgMHgxYX0sCi0JezB4ZmYsIDB4NDF9LAkvKiByZWFkIDQxLCB3cml0ZSBmZiAwMCAqLwotCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KLQotCXsweGM1LCAweDAzfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHg2YSwgMHgwMn0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0KLQl7MHgxMiwgMHg2Mn0sCS8qIGNvbTcgLSAzMGZwcyBWR0EgWVVWICovCi0JezB4MzYsIDB4ZmF9LAkvKiBhcmVmMyAqLwotCXsweDY5LCAweDBhfSwJLyogaHYgKi8KLQl7MHg4YywgMHg4OX0sCS8qIGNvbTIyICovCi0JezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCi0JezB4M2UsIDB4MGN9LAotCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KLQl7MHg3MiwgMHgwMH0sCi0JezB4NzMsIDB4MDB9LAotCXsweDc0LCAweDNhfSwKLQl7MHg3NSwgMHgzNX0sCi0JezB4NzYsIDB4MDF9LAotCXsweGM3LCAweDgwfSwKLQl7MHgwMywgMHgxMn0sCS8qIHZyZWYgKi8KLQl7MHgxNywgMHgxNn0sCS8qIGhzdGFydCAqLwotCXsweDE4LCAweDAyfSwJLyogaHN0b3AgKi8KLQl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCi0JezB4MWEsIDB4M2R9LAkvKiB2c3RvcCAqLwotCXsweDMyLCAweGZmfSwJLyogaHJlZiAqLwotCXsweGMwLCAweGFhfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2VfaW5pdF9vdjk2NXhfMltdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweDUwfSwKLQl7MHhjMSwgMHgzY30sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0KLQl7MHhjMiwgMHgwY30sCi0JezB4YzMsIDB4Zjl9LAotCXsweGRhLCAweDAxfSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4YTB9LAotCXsweDUyLCAweDNjfSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDAwfSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDB9LAotCXsweDVhLCAweGEwfSwKLQl7MHg1YiwgMHg3OH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfb3Y5NjV4XzJbXVsyXSA9IHsKLQl7MHgzYiwgMHhjNH0sCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCi0JezB4MDAsIDB4MDB9LAkvKiBnYWluICovCi0JezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KLQl7MHgxMSwgMHgwM30sCS8qIGNsa3JjICovCi0JezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCi0JezB4NmEsIDB4MDV9LAotCXsweGM1LCAweDA3fSwKLQl7MHhhMiwgMHg0Yn0sCi0JezB4YTMsIDB4M2V9LAotCXsweDJkLCAweDAwfSwKLQl7MHhmZiwgMHg0Mn0sCS8qIHJlYWQgNDIsIHdyaXRlIGZmIDAwICovCi0JezB4NDIsIDB4YzB9LAkvKiBjb20xNyAqLwotCXsweDJkLCAweDAwfSwKLQl7MHhmZiwgMHg0Mn0sCS8qIHJlYWQgNDIsIHdyaXRlIGZmIDAwICovCi0JezB4NDIsIDB4YzF9LAkvKiBjb20xNyAqLwotLyogc2hhcnBuZXNzICovCi0JezB4M2YsIDB4MDF9LAotCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCi0vKiBzYXR1cmF0aW9uICovCi0JezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KLQl7MHg1MCwgMHg5OH0sCi0JezB4NTEsIDB4MDB9LAotCXsweDUyLCAweDI4fSwKLQl7MHg1MywgMHg3MH0sCi0JezB4NTQsIDB4OTh9LAotCXsweDU4LCAweDFhfSwKLQl7MHhmZiwgMHg0MX0sCS8qIHJlYWQgNDEsIHdyaXRlIGZmIDAwICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotLyogY29udHJhc3QgKi8KLQl7MHg1NiwgMHg0MH0sCi0vKiBicmlnaHRuZXNzICovCi0JezB4NTUsIDB4OGZ9LAotLyogZXhwbyAqLwotCXsweDEwLCAweDI1fSwJLyogYWVjaCAtIGV4cG9zdXJlIGhpZ2ggYml0cyAqLwotCXsweGZmLCAweDEzfSwJLyogcmVhZCAxMywgd3JpdGUgZmYgMDAgKi8KLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotfTsKLQotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjk2NXhfMV92Z2FbXVsyXSA9IHsJLyogc2FtZSBmb3IgcXZnYSAqLwotCXsweDEyLCAweDYyfSwJLyogY29tNyAtIDMwZnBzIFZHQSBZVVYgKi8KLQl7MHgzNiwgMHhmYX0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MGF9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMH0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweDAzLCAweDEyfSwJLyogdnJlZiAqLwotCXsweDE3LCAweDE2fSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHgzZH0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4YWF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjk2NXhfMV9zdmdhW11bMl0gPSB7Ci0JezB4MTIsIDB4MDJ9LAkvKiBjb203IC0gWVVZViAtIFZHQSAxNSBmdWxsIHJlc29sdXRpb24gKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MDJ9LAkvKiBodiAqLwotCXsweDhjLCAweDBkfSwJLyogY29tMjIgKi8KLQl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMX0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweDAzLCAweDFifSwJLyogdnJlZiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4YmR9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4ZTJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjk2NXhfMV94Z2FbXVsyXSA9IHsKLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MDJ9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMX0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweDAzLCAweDFifSwJLyogdnJlZiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4YmR9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4ZTJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjk2NXhfMV9zeGdhW11bMl0gPSB7Ci0JezB4MTIsIDB4MDJ9LAkvKiBjb203ICovCi0JezB4MzYsIDB4Zjh9LAkvKiBhcmVmMyAqLwotCXsweDY5LCAweDAyfSwJLyogaHYgKi8KLQl7MHg4YywgMHg4OX0sCS8qIGNvbTIyICovCi0JezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCi0JezB4M2UsIDB4MGN9LAkvKiBjb20xNCAqLwotCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KLQl7MHg3MiwgMHgwMH0sCi0JezB4NzMsIDB4MDF9LAotCXsweDc0LCAweDNhfSwKLQl7MHg3NSwgMHgzNX0sCi0JezB4NzYsIDB4MDF9LAotCXsweGM3LCAweDgwfSwJLyogY29tMjQgKi8KLQl7MHgwMywgMHgxYn0sCS8qIHZyZWYgKi8KLQl7MHgxNywgMHgxZH0sCS8qIGhzdGFydCAqLwotCXsweDE4LCAweDAyfSwJLyogaHN0b3AgKi8KLQl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCi0JezB4MWEsIDB4ODF9LAkvKiB2c3RvcCAqLwotCXsweDMyLCAweGZmfSwJLyogaHJlZiAqLwotCXsweGMwLCAweGUyfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3F2Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHg1MH0sCi0JezB4YzEsIDB4M2N9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCi0JezB4YzIsIDB4NGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHhkYSwgMHgwMH0sCi0JezB4NTAsIDB4MDB9LAotCXsweDUxLCAweGEwfSwKLQl7MHg1MiwgMHg3OH0sCi0JezB4NTMsIDB4MDB9LAotCXsweDU0LCAweDAwfSwKLQl7MHg1NSwgMHgwMH0sCi0JezB4NTcsIDB4MDB9LAotCXsweDVjLCAweDAwfSwKLQl7MHg1YSwgMHg1MH0sCi0JezB4NWIsIDB4M2N9LAotCXsweDM1LCAweDAyfSwKLQl7MHhkOSwgMHgxMH0sCi0JezB4OTQsIDB4MTF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjk2NXhfdmdhW11bMl0gPSB7Ci0JezB4OTQsIDB4YWF9LAotCXsweGYxLCAweDYwfSwKLQl7MHhlNSwgMHgwNH0sCi0JezB4YzAsIDB4NTB9LAotCXsweGMxLCAweDNjfSwKLQl7MHg4YywgMHgwMH0sCi0JezB4OGQsIDB4MWN9LAotCXsweDM0LCAweDA1fSwKLQl7MHhjMiwgMHgwY30sCi0JezB4YzMsIDB4Zjl9LAotCXsweGRhLCAweDAxfSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4YTB9LAotCXsweDUyLCAweDNjfSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDAwfSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDB9LAotCXsweDVhLCAweGEwfSwKLQl7MHg1YiwgMHg3OH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292OTY1eF9zdmdhW11bMl0gPSB7Ci0JezB4OTQsIDB4YWF9LAotCXsweGYxLCAweDYwfSwKLQl7MHhlNSwgMHgwNH0sCi0JezB4YzAsIDB4YTB9LAotCXsweGMxLCAweDgwfSwKLQl7MHg4YywgMHgwMH0sCi0JezB4OGQsIDB4MWN9LAotCXsweDM0LCAweDA1fSwKLQl7MHhjMiwgMHg0Y30sCi0JezB4YzMsIDB4Zjl9LAotCXsweDUwLCAweDAwfSwKLQl7MHg1MSwgMHg0MH0sCi0JezB4NTIsIDB4MDB9LAotCXsweDUzLCAweDAwfSwKLQl7MHg1NCwgMHgwMH0sCi0JezB4NTUsIDB4ODh9LAotCXsweDU3LCAweDAwfSwKLQl7MHg1YywgMHgwMH0sCi0JezB4NWEsIDB4Yzh9LAotCXsweDViLCAweDk2fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweGRhLCAweDAwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292OTY1eF94Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHhhMH0sCi0JezB4YzEsIDB4ODB9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDRjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4NTAsIDB4MDB9LAotCXsweDUxLCAweDQwfSwKLQl7MHg1MiwgMHgwMH0sCi0JezB4NTMsIDB4MDB9LAotCXsweDU0LCAweDAwfSwKLQl7MHg1NSwgMHg4OH0sCi0JezB4NTcsIDB4MDB9LAotCXsweDVjLCAweDAxfSwKLQl7MHg1YSwgMHgwMH0sCi0JezB4NWIsIDB4YzB9LAotCXsweDM1LCAweDAyfSwKLQl7MHhkOSwgMHgxMH0sCi0JezB4ZGEsIDB4MDF9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N4Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHhhMH0sCi0JezB4YzEsIDB4ODB9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ZGEsIDB4MDB9LAotCXsweDM1LCAweDAyfSwKLQl7MHhkOSwgMHgxMH0sCi0JezB4OTQsIDB4MTF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjk2NXhfMl9xdmdhW11bMl0gPSB7Ci0JezB4M2IsIDB4ZTR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCi0JezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KLQl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCi0JezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCi0JezB4NmEsIDB4MDJ9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGM1LCAweDAzfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhhMiwgMHg5Nn0sCS8qIGJkNTAgKi8KLQl7MHhhMywgMHg3ZH0sCS8qIGJkNjAgKi8KLQotCXsweGZmLCAweDEzfSwJLyogcmVhZCAxMywgd3JpdGUgZmYgMDAgKi8KLQl7MHgxMywgMHhlN30sCi0JezB4M2EsIDB4ODB9LAkvKiB0c2xiIC0geXV5diAqLwotfTsKLQotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjk2NXhfMl92Z2FbXVsyXSA9IHsKLQl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDEzLCAweGUwfSwJLyogY29tOCAqLwotCXsweDAwLCAweDAwfSwKLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwNX0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YzUsIDB4MDd9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGEyLCAweDRifSwJLyogYmQ1MCAqLwotCXsweGEzLCAweDNlfSwJLyogYmQ2MCAqLwotCi0JezB4MmQsIDB4MDB9LAkvKiBhZHZmbCAqLwotfTsKLQotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjk2NXhfMl9zdmdhW11bMl0gPSB7CS8qIHNhbWUgZm9yIHhnYSAqLwotCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCi0JezB4MDAsIDB4MDB9LAotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi0JezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLwotCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLwotCXsweDZhLCAweDBjfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhjNSwgMHgwZn0sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YTIsIDB4NGV9LAkvKiBiZDUwICovCi0JezB4YTMsIDB4NDF9LAkvKiBiZDYwICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N4Z2FbXVsyXSA9IHsKLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCi0JezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KLQl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDExLCAweDAxfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwY30sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YzUsIDB4MGZ9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGEyLCAweDRlfSwJLyogYmQ1MCAqLwotCXsweGEzLCAweDQxfSwJLyogYmQ2MCAqLwotfTsKLQogc3RhdGljIHZvaWQgb3Y1MzRfcmVnX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywgdTggdmFsKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CkBAIC0xMzYwLDE0ICs2NzEsMTQgQEAKIAlQREVCVUcoRF9QUk9CRSwgImZyYW1lX3JhdGU6ICVkIiwgci0+ZnBzKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzc183NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4OUIsIHNkLT5icmlnaHRuZXNzKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Y29udHJhc3RfNzcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIApAQCAtMTQwMSw3ICs3MTIsNyBAQAogCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgwMCwgdmFsKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmVfNzcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCB2YWw7CkBAIC0xNDMyLDcgKzc0Myw3IEBACiAJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCBzZC0+aHVlKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0YXV0b2dhaW5fNzcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIApAQCAtMTQ1Nyw3ICs3NjgsNyBAQAogCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NjMsIDB4YWEpOwkvKiBBV0Igb2ZmICovCiB9CiAKLXN0YXRpYyB2b2lkIHNldHNoYXJwbmVzc183NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCB2YWw7CkBAIC0xNDkxLDEzMiArODAyLDYgQEAKIAkJCQlzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYykgJiAweDdmKTsKIH0KIAotLyogb3Y5NjV4IHNwZWNpZmljIGNvbnRyb2xzICovCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzXzk2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCi0JdmFsID0gc2QtPmJyaWdodG5lc3M7Ci0JaWYgKHZhbCA8IDgpCi0JCXZhbCA9IDE1IC0gdmFsOwkJLyogZiAuLiA4ICovCi0JZWxzZQotCQl2YWwgPSB2YWwgLSA4OwkJLyogMCAuLiA3ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDU1LAkvKiBicnRuIC0gYnJpZ2h0bmVzcyBhZGp1c3RtZW50ICovCi0JCQkweDBmIHwgKHZhbCA8PCA0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGNvbnRyYXN0Xzk2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTYsCS8qIGNuc3QxIC0gY29udHJhc3QgMSBjdHJsIGNvZWZmICovCi0JCQlzZC0+Y29udHJhc3QgPDwgNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGV4cG9zdXJlXzk2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCXN0YXRpYyBjb25zdCB1OCBleHBvWzRdID0gezB4MDAsIDB4MjUsIDB4MzgsIDB4NWV9OwotCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEwLAkJCS8qIGFlY1s5OjJdICovCi0JCQlleHBvW3NkLT5leHBvc3VyZV0pOwotCXZhbCA9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJCS8qIGNvbTggKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsKTsKLQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHhhMSk7CQkvKiBhZWNoICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4YTEsIHZhbCAmIDB4ZTApOwkvKiBhZWNbMTU6MTBdID0gMCAqLwotfQotCi1zdGF0aWMgdm9pZCBzZXRzaGFycG5lc3NfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzOCB2YWw7Ci0KLQl2YWwgPSBzZC0+c2hhcnBuZXNzOwotCWlmICh2YWwgPCAwKSB7CQkJCS8qIGF1dG8gKi8KLQkJdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4NDIpOwkvKiBjb20xNyAqLwotCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCB8IDB4NDApOwotCQkJCS8qIEVkZ2UgZW5oYW5jZW1lbnQgc3RyZW5ndGggYXV0byBhZGp1c3QgKi8KLQkJcmV0dXJuOwotCX0KLQlpZiAodmFsICE9IDApCi0JCXZhbCA9IDEgPDwgKHZhbCAtIDEpOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgzZiwJLyogZWRnZSAtIGVkZ2UgZW5oYW5jZS4gZmFjdG9yICovCi0JCQl2YWwpOwotCXZhbCA9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDQyKTsJCS8qIGNvbTE3ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCAmIDB4YmYpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRhdXRvZ2Fpbl85NihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXU4IHZhbDsKLQotLypmaXhtZTogc2hvdWxkIGFkanVzdCBhZ2MvYXdiL2FlYyBieSBkaWZmZXJlbnQgY29udHJvbHMgKi8KLQl2YWwgPSBzZC0+YXV0b2dhaW47Ci0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JaWYgKHNkLT5hdXRvZ2FpbikKLQkJdmFsIHw9IDB4MDU7CQkvKiBhZ2MgJiBhZWMgKi8KLQllbHNlCi0JCXZhbCAmPSAweGZhOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1OCB2YWwxLCB2YWwyLCB2YWwzOwotCXN0YXRpYyBjb25zdCB1OCBtYXRyaXhbNV1bMl0gPSB7Ci0JCXsweDE0LCAweDM4fSwKLQkJezB4MWUsIDB4NTR9LAotCQl7MHgyOCwgMHg3MH0sCi0JCXsweDMyLCAweDhjfSwKLQkJezB4NDgsIDB4OTB9Ci0JfTsKLQotCXZhbDEgPSBtYXRyaXhbc2QtPnNhdHVyXVswXTsKLQl2YWwyID0gbWF0cml4W3NkLT5zYXR1cl1bMV07Ci0JdmFsMyA9IHZhbDEgKyB2YWwyOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg0ZiwgdmFsMyk7CS8qIG1hdHJpeCBjb2VmZiAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1MCwgdmFsMyk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDUxLCAweDAwKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTIsIHZhbDEpOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1MywgdmFsMik7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDU0LCB2YWwzKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTgsIDB4MWEpOwkvKiBtdHhzIC0gY29lZmYgc2lnbnMgKi8KLQl2YWwxID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4NDEpOwkvKiBjb20xNiAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDQxLCB2YWwxKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXU4IHZhbDsKLQotCXZhbCA9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJCS8qIGNvbTggKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCWlmIChzZC0+bGlnaHRmcmVxID09IDApIHsKLQkJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwgJiAweGRmKTsKLQkJcmV0dXJuOwotCX0KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCB8IDB4MjApOwotCi0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4NDIpOwkJLyogY29tMTcgKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCWlmIChzZC0+bGlnaHRmcmVxID09IDEpCi0JCXZhbCB8PSAweDAxOwotCWVsc2UKLQkJdmFsICY9IDB4ZmU7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDQyLCB2YWwpOwotfQotCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQpAQCAtMTYyNCw3NyArODA5LDUwIEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKIAotCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm87Ci0KIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NzJYKSB7Ci0JCWNhbS0+Y2FtX21vZGUgPSBvdjc3MnhfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92NzcyeF9tb2RlKTsKKwljYW0tPmNhbV9tb2RlID0gb3Y3NzJ4X21vZGU7CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92NzcyeF9tb2RlKTsKKwljYW0tPm1vZGVfZnJhbWVyYXRlcyA9IG92NzcyeF9mcmFtZXJhdGVzOwogCi0JCWNhbS0+YnVsayA9IDE7Ci0JCWNhbS0+YnVsa19zaXplID0gMTYzODQ7Ci0JCWNhbS0+YnVsa19udXJicyA9IDI7Ci0JfSBlbHNlIHsJCS8qIG92OTY1eCAqLwotCQljYW0tPmNhbV9tb2RlID0gb3Y5NjV4X21vZGU7Ci0JCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShvdjk2NXhfbW9kZSk7Ci0JfQorCWNhbS0+YnVsayA9IDE7CisJY2FtLT5idWxrX3NpemUgPSAxNjM4NDsKKwljYW0tPmJ1bGtfbnVyYnMgPSAyOwogCiAJc2QtPmZyYW1lX3JhdGUgPSAzMDsKIAotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpIHsKLQkJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTXzc3X0RFRjsKLQkJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfNzdfREVGOwotCQlzZC0+Z2FpbiA9IEdBSU5fREVGOwotCQlzZC0+ZXhwb3N1cmUgPSBFWFBPXzc3X0RFRjsKLQkJc2QtPnJlZGJsYyA9IFJFRF9CQUxBTkNFX0RFRjsKLQkJc2QtPmJsdWVibGMgPSBCTFVFX0JBTEFOQ0VfREVGOwotCQlzZC0+aHVlID0gSFVFX0RFRjsKLSNpZiBBVVRPR0FJTl83N19ERUYgIT0gMAotCQlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl83N19ERUY7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmdhaW4gPSBHQUlOX0RFRjsKKwlzZC0+ZXhwb3N1cmUgPSBFWFBPX0RFRjsKKwlzZC0+cmVkYmxjID0gUkVEX0JBTEFOQ0VfREVGOworCXNkLT5ibHVlYmxjID0gQkxVRV9CQUxBTkNFX0RFRjsKKwlzZC0+aHVlID0gSFVFX0RFRjsKKyNpZiBBVVRPR0FJTl9ERUYgIT0gMAorCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKICNlbHNlCi0JCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEFXQl83N19JRFgpOworCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEFXQl9JRFgpOwogI2VuZGlmCiAjaWYgQVdCX0RFRiAhPSAwCi0JCXNkLT5hd2IgPSBBV0JfREVGCisJc2QtPmF3YiA9IEFXQl9ERUYKICNlbmRpZgotI2lmIFNIQVJQTkVTU183N19ERUYgIT0gMAotCQlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTXzc3X0RFRjsKKyNpZiBTSEFSUE5FU1NfREVGICE9IDAKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKICNlbmRpZgogI2lmIEhGTElQX0RFRiAhPSAwCi0JCXNkLT5oZmxpcCA9IEhGTElQX0RFRjsKKwlzZC0+aGZsaXAgPSBIRkxJUF9ERUY7CiAjZW5kaWYKICNpZiBWRkxJUF9ERUYgIT0gMAotCQlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CisJc2QtPnZmbGlwID0gVkZMSVBfREVGOwogI2VuZGlmCi0JfSBlbHNlIHsKLQkJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTXzk2X0RFRjsKLQkJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfOTZfREVGOwotI2lmIEFVVE9HQUlOXzk2X0RFRiAhPSAwCi0JCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOXzk2X0RFRjsKLQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgRVhQT185Nl9JRFgpOwotI2VuZGlmCi0jaWYgRVhQT185Nl9ERUYgIT0gMAotCQlzZC0+ZXhwb3N1cmUgPSBFWFBPXzk2X0RFRjsKLSNlbmRpZgotI2lmIFNIQVJQTkVTU185Nl9ERUYgIT0gMAotCQlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTXzk2X0RFRjsKLSNlbmRpZgotCQlzZC0+c2F0dXIgPSBTQVRVUl9ERUY7Ci0JCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKLQl9CisKIAlyZXR1cm4gMDsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1MTYgc2Vuc29yX2lkOwotCXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfYWRkclsyXSA9IHsKLQkJMHg0MiwJCQkvKiAwIFNFTlNPUl9PVjc3MlggKi8KLQkJMHg2MCwJCQkvKiAxIFNFTlNPUl9PVjk2NVggKi8KLQl9OwogCiAJLyogcmVzZXQgYnJpZGdlICovCiAJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlNywgMHgzYSk7CkBAIC0xNzAyLDggKzg2MCw3IEBACiAJbXNsZWVwKDEwMCk7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBzZW5zb3IgYWRkcmVzcyAqLwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19BRERSRVNTLAotCQkJCXNlbnNvcl9hZGRyW3NkLT5zZW5zb3JdKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfQUREUkVTUywgMHg0Mik7CiAKIAkvKiByZXNldCBzZW5zb3IgKi8KIAlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTIsIDB4ODApOwpAQCAtMTcxNyw2NCArODc0LDQ2IEBACiAJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgSUQ6ICUwNHgiLCBzZW5zb3JfaWQpOwogCiAJLyogaW5pdGlhbGl6ZSAqLwotCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX09WNzcyWDoKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjc3MngsCi0JCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF9vdjc3MngpKTsKLQkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDEpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjc3MngsCi0JCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdF9vdjc3MngpKTsKLQkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7Ci0JCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKLQkJc2V0X2ZyYW1lX3JhdGUoZ3NwY2FfZGV2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLS8qCWNhc2UgU0VOU09SX09WOTY1WDogKi8KLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjk2NXgsCi0JCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF9vdjk2NXgpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXRfb3Y5NjV4LAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfb3Y5NjV4KSk7Ci0JCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX2luaXRfb3Y5NjV4XzIsCi0JCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF9vdjk2NXhfMikpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjk2NXhfMiwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0X292OTY1eF8yKSk7Ci0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOwotCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKLQkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOwotCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKLQl9CisJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdCwKKwkJCUFSUkFZX1NJWkUoYnJpZGdlX2luaXQpKTsKKwlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7CisJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXQsCisJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0KSk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7CisJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworCXNldF9mcmFtZV9yYXRlKGdzcGNhX2Rldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZF9zdGFydF9vdjc3Mngoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJaW50IG1vZGU7CiAKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJaWYgKG1vZGUgIT0gMCkgewkvKiAzMjB4MjQwICovCi0JCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X292NzcyeF9xdmdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292NzcyeF9xdmdhKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjc3MnhfcXZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjc3MnhfcXZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9xdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3F2Z2EpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X3F2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfcXZnYSkpOwogCX0gZWxzZSB7CQkvKiA2NDB4NDgwICovCi0JCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X292NzcyeF92Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3ZnYSkpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y3NzJ4X3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjc3MnhfdmdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3ZnYSwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF92Z2EpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF92Z2EpKTsKIAl9CiAJc2V0X2ZyYW1lX3JhdGUoZ3NwY2FfZGV2KTsKIAotCXNldGF1dG9nYWluXzc3KGdzcGNhX2Rldik7CisJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKIAlzZXRhd2IoZ3NwY2FfZGV2KTsKIAlzZXRnYWluKGdzcGNhX2Rldik7CiAJc2V0cmVkYmxjKGdzcGNhX2Rldik7CiAJc2V0Ymx1ZWJsYyhnc3BjYV9kZXYpOwogCXNldGh1ZShnc3BjYV9kZXYpOwotCXNldGV4cG9zdXJlXzc3KGdzcGNhX2Rldik7Ci0Jc2V0YnJpZ2h0bmVzc183Nyhnc3BjYV9kZXYpOwotCXNldGNvbnRyYXN0Xzc3KGdzcGNhX2Rldik7Ci0Jc2V0c2hhcnBuZXNzXzc3KGdzcGNhX2Rldik7CisJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKIAlzZXR2ZmxpcChnc3BjYV9kZXYpOwogCXNldGhmbGlwKGdzcGNhX2Rldik7CiAKQEAgLTE3ODMsODEgKzkyMiwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3N0YXJ0X292OTY1eChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0JaW50IG1vZGU7Ci0KLQltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JZGVmYXVsdDoKLS8qCWNhc2UgNDoJCQkgKiAzMjB4MjQwICovCi0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMV92Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfdmdhKSk7Ci0JCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X292OTY1eF9xdmdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF9xdmdhKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMl9xdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8yX3F2Z2EpKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgkJCS8qIDY0MHg0ODAgKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMV92Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3ZnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjk2NXhfdmdhKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMl92Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfdmdhKSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoJCQkvKiA4MDB4NjAwICovCi0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMV9zdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N2Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N2Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N2Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3ZnYSkpOwotCQlicmVhazsKLQljYXNlIDE6CQkJLyogMTAyNHg3NjggKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3hnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMV94Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3hnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjk2NXhfeGdhKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMl9zdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2EpKTsKLQkJYnJlYWs7Ci0JY2FzZSAwOgkJCS8qIDEyODB4MTAyNCAqLwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfc3hnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMV9zeGdhKSk7Ci0JCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X292OTY1eF9zeGdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF9zeGdhKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMl9zeGdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N4Z2EpKTsKLQkJYnJlYWs7Ci0JfQotCXNldGZyZXEoZ3NwY2FfZGV2KTsKLQlzZXRhdXRvZ2Fpbl85Nihnc3BjYV9kZXYpOwotCXNldGJyaWdodG5lc3NfOTYoZ3NwY2FfZGV2KTsKLQlzZXRjb250cmFzdF85Nihnc3BjYV9kZXYpOwotCXNldGV4cG9zdXJlXzk2KGdzcGNhX2Rldik7Ci0Jc2V0c2hhcnBuZXNzXzk2KGdzcGNhX2Rldik7Ci0Jc2V0c2F0dXIoZ3NwY2FfZGV2KTsKLQotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOwotCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2Rfc3RvcE5fb3Y3NzJ4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKIAlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0b3BOX292OTY1eChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMSk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOwotfQotCiAvKiBWYWx1ZXMgZm9yIGJtSGVhZGVySW5mbyAoVmlkZW8gYW5kIFN0aWxsIEltYWdlIFBheWxvYWQgSGVhZGVycywgMi40LjMuMykgKi8KICNkZWZpbmUgVVZDX1NUUkVBTV9FT0gJKDEgPDwgNykKICNkZWZpbmUgVVZDX1NUUkVBTV9FUlIJKDEgPDwgNikKQEAgLTE4NzUsMTEgKzk0NSw5IEBACiAJX191MzIgdGhpc19wdHM7CiAJdTE2IHRoaXNfZmlkOwogCWludCByZW1haW5pbmdfbGVuID0gbGVuOwotCWludCBwYXlsb2FkX2xlbjsKIAotCXBheWxvYWRfbGVuID0gZ3NwY2FfZGV2LT5jYW0uYnVsayA/IDIwNDggOiAyMDQwOwogCWRvIHsKLQkJbGVuID0gbWluKHJlbWFpbmluZ19sZW4sIHBheWxvYWRfbGVuKTsKKwkJbGVuID0gbWluKHJlbWFpbmluZ19sZW4sIDIwNDgpOwogCiAJCS8qIFBheWxvYWRzIGFyZSBwcmVmaXhlZCB3aXRoIGEgVVZDLXN0eWxlIGhlYWRlci4gIFdlCiAJCSAgIGNvbnNpZGVyIGEgZnJhbWUgdG8gc3RhcnQgd2hlbiB0aGUgRklEIHRvZ2dsZXMsIG9yIHRoZSBQVFMKQEAgLTE5MTgsNyArOTg2LDE3IEBACiAJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOwogCQkvKiBJZiB0aGlzIHBhY2tldCBpcyBtYXJrZWQgYXMgRU9GLCBlbmQgdGhlIGZyYW1lICovCiAJCX0gZWxzZSBpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSB7CisJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCiAJCQlzZC0+bGFzdF9wdHMgPSAwOworCQkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOworCQkJaWYgKGZyYW1lID09IE5VTEwpCisJCQkJZ290byBkaXNjYXJkOworCQkJaWYgKGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhICsgKGxlbiAtIDEyKSAhPQorCQkJICAgIGdzcGNhX2Rldi0+d2lkdGggKiBnc3BjYV9kZXYtPmhlaWdodCAqIDIpIHsKKwkJCQlQREVCVUcoRF9QQUNLLCAid3Jvbmcgc2l6ZWQgZnJhbWUiKTsKKwkJCQlnb3RvIGRpc2NhcmQ7CisJCQl9CiAJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKIAkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CiAJCX0gZWxzZSB7CkBAIC0xOTY1LDEyICsxMDQzLDggQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+ZXhwb3N1cmUgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRleHBvc3VyZV83Nyhnc3BjYV9kZXYpOwotCQllbHNlCi0JCQlzZXRleHBvc3VyZV85Nihnc3BjYV9kZXYpOwotCX0KKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5ODcsMTIgKzEwNjEsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5icmlnaHRuZXNzID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewotCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NzJYKQotCQkJc2V0YnJpZ2h0bmVzc183Nyhnc3BjYV9kZXYpOwotCQllbHNlCi0JCQlzZXRicmlnaHRuZXNzXzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDA5LDEyICsxMDc5LDggQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+Y29udHJhc3QgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRjb250cmFzdF83Nyhnc3BjYV9kZXYpOwotCQllbHNlCi0JCQlzZXRjb250cmFzdF85Nihnc3BjYV9kZXYpOwotCX0KKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMjYsNDEgKzEwOTIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5zYXR1ciA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldHNhdHVyKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCSp2YWwgPSBzZC0+c2F0dXI7Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmxpZ2h0ZnJlcSA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldGZyZXEoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQkqdmFsID0gc2QtPmxpZ2h0ZnJlcTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzZF9zZXRyZWRibGMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMjEyMiwyMiArMTE1MywxNCBAQAogCXNkLT5hdXRvZ2FpbiA9IHZhbDsKIAogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewotCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NzJYKSB7CiAKLQkJCS8qIHRoZSBhdXRvIHdoaXRlIGJhbGFuY2UgY29udHJvbCB3b3JrcyBvbmx5Ci0JCQkgKiB3aGVuIGF1dG8gZ2FpbiBpcyBzZXQgKi8KLQkJCWlmICh2YWwpCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgJj0gfigxIDw8IEFXQl83N19JRFgpOwotCQkJZWxzZQotCQkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEFXQl83N19JRFgpOwotCQkJc2V0YXV0b2dhaW5fNzcoZ3NwY2FfZGV2KTsKLQkJfSBlbHNlIHsKLQkJCWlmICh2YWwpCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgRVhQT185Nl9JRFgpOwotCQkJZWxzZQotCQkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjICY9IH4oMSA8PCBFWFBPXzk2X0lEWCk7Ci0JCQlzZXRhdXRvZ2Fpbl85Nihnc3BjYV9kZXYpOwotCQl9CisJCS8qIHRoZSBhdXRvIHdoaXRlIGJhbGFuY2UgY29udHJvbCB3b3JrcyBvbmx5CisJCSAqIHdoZW4gYXV0byBnYWluIGlzIHNldCAqLworCQlpZiAodmFsKQorCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgJj0gfigxIDw8IEFXQl9JRFgpOworCQllbHNlCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBBV0JfSURYKTsKKwkJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTczLDEyICsxMTk2LDggQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+c2hhcnBuZXNzID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewotCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NzJYKQotCQkJc2V0c2hhcnBuZXNzXzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldHNoYXJwbmVzc185Nihnc3BjYV9kZXYpOwotCX0KKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjU3LDcgKzEyNzYsNyBAQAogCiAJLyogU2V0IHJlcXVlc3RlZCBmcmFtZXJhdGUgKi8KIAlzZC0+ZnJhbWVfcmF0ZSA9IHRwZi0+ZGVub21pbmF0b3IgLyB0cGYtPm51bWVyYXRvcjsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcgJiYgc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NzJYKQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0X2ZyYW1lX3JhdGUoZ3NwY2FfZGV2KTsKIAogCS8qIFJldHVybiB0aGUgYWN0dWFsIGZyYW1lcmF0ZSAqLwpAQCAtMjI2Nyw1NyArMTI4NiwyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3F1ZXJ5bWVudShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpCi17Ci0Jc3dpdGNoIChtZW51LT5pZCkgewotCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k6Ci0JCXN3aXRjaCAobWVudS0+aW5kZXgpIHsKLQkJY2FzZSAwOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQgKi8KLQkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiTm9GbGlrZXIiKTsKLQkJCXJldHVybiAwOwotCQljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCi0JCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjUwIEh6Iik7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSAyOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAqLwotCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI2MCBIeiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19vdjc3MnggPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSAgICAgPSBNT0RVTEVfTkFNRSwKLQkuY3RybHMgICAgPSBzZF9jdHJsc19vdjc3MngsCi0JLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJsc19vdjc3MngpLAorCS5jdHJscyAgICA9IHNkX2N0cmxzLAorCS5uY3RybHMgICA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAogCS5jb25maWcgICA9IHNkX2NvbmZpZywKIAkuaW5pdCAgICAgPSBzZF9pbml0LAotCS5zdGFydCAgICA9IHNkX3N0YXJ0X292NzcyeCwKLQkuc3RvcE4gICAgPSBzZF9zdG9wTl9vdjc3MngsCisJLnN0YXJ0ICAgID0gc2Rfc3RhcnQsCisJLnN0b3BOICAgID0gc2Rfc3RvcE4sCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLmdldF9zdHJlYW1wYXJtID0gc2RfZ2V0X3N0cmVhbXBhcm0sCiAJLnNldF9zdHJlYW1wYXJtID0gc2Rfc2V0X3N0cmVhbXBhcm0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19vdjk2NXggPSB7Ci0JLm5hbWUgICAgID0gTU9EVUxFX05BTUUsCi0JLmN0cmxzICAgID0gc2RfY3RybHNfb3Y5NjV4LAotCS5uY3RybHMgICA9IEFSUkFZX1NJWkUoc2RfY3RybHNfb3Y5NjV4KSwKLQkuY29uZmlnICAgPSBzZF9jb25maWcsCi0JLmluaXQgICAgID0gc2RfaW5pdCwKLQkuc3RhcnQgICAgPSBzZF9zdGFydF9vdjk2NXgsCi0JLnN0b3BOICAgID0gc2Rfc3RvcE5fb3Y5NjV4LAotCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAotCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCi19OwotCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewotCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAzKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX09WOTY1WH0sCi0Je1VTQl9ERVZJQ0UoMHgxNDE1LCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfT1Y3NzJYfSwKKwl7VVNCX0RFVklDRSgweDE0MTUsIDB4MjAwMCl9LAogCXt9CiB9OwogCkBAIC0yMzI2LDExICsxMzExLDcgQEAKIC8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCiBzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0JcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwKLQkJCQlpZC0+ZHJpdmVyX2luZm8gPT0gU0VOU09SX09WNzcyWAotCQkJCQk/ICZzZF9kZXNjX292NzcyeAotCQkJCQk6ICZzZF9kZXNjX292OTY1eCwKLQkJCQlzaXplb2Yoc3RydWN0IHNkKSwKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCiAJCQkJVEhJU19NT0RVTEUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0XzkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZTVhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0XzkuYwpAQCAtMCwwICsxLDE0NzcgQEAKKy8qCisgKiBvdjUzNC1vdjk2NXggZ3NwY2EgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgSmVhbi1GcmFuY29pcyBNb2luZSBodHRwOi8vbW9pbmVqZi5mcmVlLmZyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW50b25pbyBPc3BpdGUgPG9zcGl0ZUBzdHVkZW50aS51bmluYS5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhIHByb3RvdHlwZSB3cml0dGVuIGJ5IE1hcmsgRmVycmVsbCA8bWFqb3J0cmlwc0BnbWFpbC5jb20+CisgKiBVU0IgcHJvdG9jb2wgcmV2ZXJzZSBlbmdpbmVlcmVkIGJ5IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgorICogaHR0cHM6Ly9qaW0uc2gvc3ZuL2ppbS9kZXZsL3BsYXlzdGF0aW9uL3BzMy9leWUvdGVzdC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgIm92NTM0XzkiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCisjZGVmaW5lIE9WNTM0X1JFR19BRERSRVNTCTB4ZjEJLyogc2Vuc29yIGFkZHJlc3MgKi8KKyNkZWZpbmUgT1Y1MzRfUkVHX1NVQkFERFIJMHhmMgorI2RlZmluZSBPVjUzNF9SRUdfV1JJVEUJCTB4ZjMKKyNkZWZpbmUgT1Y1MzRfUkVHX1JFQUQJCTB4ZjQKKyNkZWZpbmUgT1Y1MzRfUkVHX09QRVJBVElPTgkweGY1CisjZGVmaW5lIE9WNTM0X1JFR19TVEFUVVMJMHhmNgorCisjZGVmaW5lIE9WNTM0X09QX1dSSVRFXzMJMHgzNworI2RlZmluZSBPVjUzNF9PUF9XUklURV8yCTB4MzMKKyNkZWZpbmUgT1Y1MzRfT1BfUkVBRF8yCQkweGY5CisKKyNkZWZpbmUgQ1RSTF9USU1FT1VUIDUwMAorCitNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxtb2luZWpmQGZyZWUuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBL09WNTM0XzkgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKwlfX3UzMiBsYXN0X3B0czsKKwl1OCBsYXN0X2ZpZDsKKworCXU4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggYXV0b2dhaW47CisJdTggZXhwb3N1cmU7CisJczggc2hhcnBuZXNzOworCXU4IHNhdHVyOworCXU4IGZyZXE7Cit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworICAgIHsJCQkJCQkJLyogMCAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgNworCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAorCX0sCisJLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisgICAgfSwKKyAgICB7CQkJCQkJCS8qIDEgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09OVFJBU1RfREVGIDMKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCisJfSwKKwkuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCisJLmdldCA9IHNkX2dldGNvbnRyYXN0LAorICAgIH0sCisgICAgewkJCQkJCQkvKiAyICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9HQUlOLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lICAgID0gIkF1dG9nYWluIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQVVUT0dBSU5fREVGIDEKKwkJLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl9ERUYsCisJfSwKKwkuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCisJLmdldCA9IHNkX2dldGF1dG9nYWluLAorICAgIH0sCisjZGVmaW5lIEVYUE9fSURYIDMKKyAgICB7CQkJCQkJCS8qIDMgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfRVhQT1NVUkUsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiRXhwb3N1cmUiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMywKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBFWFBPX0RFRiAwCisJCS5kZWZhdWx0X3ZhbHVlID0gRVhQT19ERUYsCisJfSwKKwkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCisJLmdldCA9IHNkX2dldGV4cG9zdXJlLAorICAgIH0sCisgICAgewkJCQkJCQkvKiA0ICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTaGFycG5lc3MiLAorCQkubWluaW11bSA9IC0xLAkJLyogLTEgPSBhdXRvICovCisJCS5tYXhpbXVtID0gNCwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBTSEFSUE5FU1NfREVGIC0xCisJCS5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCisJLmdldCA9IHNkX2dldHNoYXJwbmVzcywKKyAgICB9LAorICAgIHsJCQkJCQkJLyogNSAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNhdHVyYXRpb24iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gNCwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBTQVRVUl9ERUYgMgorCQkuZGVmYXVsdF92YWx1ZSA9IFNBVFVSX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRzYXR1ciwKKwkuZ2V0ID0gc2RfZ2V0c2F0dXIsCisgICAgfSwKKyAgICB7CisJeworCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBGUkVRX0RFRiAwCisJCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCisJfSwKKwkuc2V0ID0gc2Rfc2V0ZnJlcSwKKwkuZ2V0ID0gc2RfZ2V0ZnJlcSwKKyAgICB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y5NjV4X21vZGVbXSA9IHsKKyNkZWZpbmUgUVZHQV9NT0RFIDAKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFZHQV9NT0RFIDEKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFNWR0FfTU9ERSAyCisJezgwMCwgNjAwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gODAwLAorCQkuc2l6ZWltYWdlID0gODAwICogNjAwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorI2RlZmluZSBYR0FfTU9ERSAzCisJezEwMjQsIDc2OCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDEwMjQsCisJCS5zaXplaW1hZ2UgPSAxMDI0ICogNzY4ICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorI2RlZmluZSBTWEdBX01PREUgNAorCXsxMjgwLCAxMDI0LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0ICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0W11bMl0gPSB7CisJezB4ODgsIDB4Zjh9LAorCXsweDg5LCAweGZmfSwKKwl7MHg3NiwgMHgwM30sCisJezB4OTIsIDB4MDN9LAorCXsweDk1LCAweDEwfSwKKwl7MHhlMiwgMHgwMH0sCisJezB4ZTcsIDB4M2V9LAorCXsweDhkLCAweDFjfSwKKwl7MHg4ZSwgMHgwMH0sCisJezB4OGYsIDB4MDB9LAorCXsweDFmLCAweDAwfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ODksIDB4ZmZ9LAorCXsweDg4LCAweGY4fSwKKwl7MHg3NiwgMHgwM30sCisJezB4OTIsIDB4MDF9LAorCXsweDkzLCAweDE4fSwKKwl7MHgxYywgMHgwYX0sCisJezB4MWQsIDB4NDh9LAorCXsweGMwLCAweDUwfSwKKwl7MHhjMSwgMHgzY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDBjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4MzQsIDB4MDV9LAorCXsweGU3LCAweDJlfSwKKwl7MHgzMSwgMHhmOX0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHgyNSwgMHg0Mn0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9pbml0W11bMl0gPSB7CisJezB4MTIsIDB4ODB9LAkvKiBjb203IC0gU1NDQiByZXNldCAqLworCXsweDAwLCAweDAwfSwJLyogZ2FpbiAqLworCXsweDAxLCAweDgwfSwJLyogYmx1ZSAqLworCXsweDAyLCAweDgwfSwJLyogcmVkICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MDQsIDB4MDN9LAkvKiBjb20xIC0gZXhwb3N1cmUgbG93IGJpdHMgKi8KKwl7MHgwYiwgMHg1N30sCS8qIHZlciAqLworCXsweDBlLCAweDYxfSwJLyogY29tNSAqLworCXsweDBmLCAweDQyfSwJLyogY29tNiAqLworCXsweDExLCAweDAwfSwJLyogY2xrcmMgKi8KKwl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgLSAxNWZwcyBWR0EgWVVZViAqLworCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCisJezB4MTYsIDB4MjR9LAkvKiByZWcxNiAqLworCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0Ki8KKwl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AqLworCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLworCXsweDI0LCAweDNjfSwJLyogYWV3ICovCisJezB4MjUsIDB4MzZ9LAkvKiBhZWIgKi8KKwl7MHgyNiwgMHg3MX0sCS8qIHZwdCAqLworCXsweDI3LCAweDA4fSwJLyogYmJpYXMgKi8KKwl7MHgyOCwgMHgwOH0sCS8qIGdiYmlhcyAqLworCXsweDI5LCAweDE1fSwJLyogZ3IgY29tICovCisJezB4MmEsIDB4MDB9LAkvKiBleGhjaCAqLworCXsweDJiLCAweDAwfSwJLyogZXhoY2wgKi8KKwl7MHgyYywgMHgwOH0sCS8qIHJiaWFzICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4MzMsIDB4MDB9LAkvKiBjaGxmICovCisJezB4MzQsIDB4M2Z9LAkvKiBhcmVmMSAqLworCXsweDM1LCAweDAwfSwJLyogYXJlZjIgKi8KKwl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCisJezB4MzgsIDB4NzJ9LAkvKiBhZGMyICovCisJezB4MzksIDB4NTd9LAkvKiBhcmVmNCAqLworCXsweDNhLCAweDgwfSwJLyogdHNsYiAtIHl1eXYgKi8KKwl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLworCXsweDNkLCAweDk5fSwJLyogY29tMTMgKi8KKwl7MHgzZiwgMHhjMX0sCS8qIGVkZ2UgKi8KKwl7MHg0MCwgMHhjMH0sCS8qIGNvbTE1ICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDQyLCAweGMwfSwJLyogY29tMTcgKi8KKwl7MHg0MywgMHgwYX0sCS8qIHJzdmQgKi8KKwl7MHg0NCwgMHhmMH0sCisJezB4NDUsIDB4NDZ9LAorCXsweDQ2LCAweDYyfSwKKwl7MHg0NywgMHgyYX0sCisJezB4NDgsIDB4M2N9LAorCXsweDRhLCAweGZjfSwKKwl7MHg0YiwgMHhmY30sCisJezB4NGMsIDB4N2Z9LAorCXsweDRkLCAweDdmfSwKKwl7MHg0ZSwgMHg3Zn0sCisJezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KKwl7MHg1MCwgMHg5OH0sCisJezB4NTEsIDB4MDB9LAorCXsweDUyLCAweDI4fSwKKwl7MHg1MywgMHg3MH0sCisJezB4NTQsIDB4OTh9LAorCXsweDU4LCAweDFhfSwJLyogbWF0cml4IGNvZWYgc2lnbiAqLworCXsweDU5LCAweDg1fSwJLyogQVdCIGNvbnRyb2wgKi8KKwl7MHg1YSwgMHhhOX0sCisJezB4NWIsIDB4NjR9LAorCXsweDVjLCAweDg0fSwKKwl7MHg1ZCwgMHg1M30sCisJezB4NWUsIDB4MGV9LAorCXsweDVmLCAweGYwfSwJLyogQVdCIGJsdWUgbGltaXQgKi8KKwl7MHg2MCwgMHhmMH0sCS8qIEFXQiByZWQgbGltaXQgKi8KKwl7MHg2MSwgMHhmMH0sCS8qIEFXQiBncmVlbiBsaW1pdCAqLworCXsweDYyLCAweDAwfSwJLyogbGNjMSAqLworCXsweDYzLCAweDAwfSwJLyogbGNjMiAqLworCXsweDY0LCAweDAyfSwJLyogbGNjMyAqLworCXsweDY1LCAweDE2fSwJLyogbGNjNCAqLworCXsweDY2LCAweDAxfSwJLyogbGNjNSAqLworCXsweDY5LCAweDAyfSwJLyogaHYgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRidmwgKi8KKwl7MHg2YywgMHgwNH0sCisJezB4NmQsIDB4NTV9LAorCXsweDZlLCAweDAwfSwKKwl7MHg2ZiwgMHg5ZH0sCisJezB4NzAsIDB4MjF9LAkvKiBkbnN0aCAqLworCXsweDcxLCAweDc4fSwKKwl7MHg3MiwgMHgwMH0sCS8qIHBvaWR4ICovCisJezB4NzMsIDB4MDF9LAkvKiBwY2tkdiAqLworCXsweDc0LCAweDNhfSwJLyogeGluZHggKi8KKwl7MHg3NSwgMHgzNX0sCS8qIHlpbmR4ICovCisJezB4NzYsIDB4MDF9LAorCXsweDc3LCAweDAyfSwKKwl7MHg3YSwgMHgxMn0sCS8qIGdhbW1hIGN1cnZlICovCisJezB4N2IsIDB4MDh9LAorCXsweDdjLCAweDE2fSwKKwl7MHg3ZCwgMHgzMH0sCisJezB4N2UsIDB4NWV9LAorCXsweDdmLCAweDcyfSwKKwl7MHg4MCwgMHg4Mn0sCisJezB4ODEsIDB4OGV9LAorCXsweDgyLCAweDlhfSwKKwl7MHg4MywgMHhhNH0sCisJezB4ODQsIDB4YWN9LAorCXsweDg1LCAweGI4fSwKKwl7MHg4NiwgMHhjM30sCisJezB4ODcsIDB4ZDZ9LAorCXsweDg4LCAweGU2fSwKKwl7MHg4OSwgMHhmMn0sCisJezB4OGEsIDB4MDN9LAorCXsweDhjLCAweDg5fSwJLyogY29tMTkgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHg5MCwgMHg3ZH0sCisJezB4OTEsIDB4N2J9LAorCXsweDlkLCAweDAzfSwJLyogbGNjNiAqLworCXsweDllLCAweDA0fSwJLyogbGNjNyAqLworCXsweDlmLCAweDdhfSwKKwl7MHhhMCwgMHg3OX0sCisJezB4YTEsIDB4NDB9LAkvKiBhZWNobSAqLworCXsweGE0LCAweDUwfSwJLyogY29tMjEgKi8KKwl7MHhhNSwgMHg2OH0sCS8qIGNvbTI2ICovCisJezB4YTYsIDB4NGF9LAkvKiBBV0IgZ3JlZW4gKi8KKwl7MHhhOCwgMHhjMX0sCS8qIHJlZmE4ICovCisJezB4YTksIDB4ZWZ9LAkvKiByZWZhOSAqLworCXsweGFhLCAweDkyfSwKKwl7MHhhYiwgMHgwNH0sCisJezB4YWMsIDB4ODB9LAkvKiBibGFjayBsZXZlbCBjb250cm9sICovCisJezB4YWQsIDB4ODB9LAorCXsweGFlLCAweDgwfSwKKwl7MHhhZiwgMHg4MH0sCisJezB4YjIsIDB4ZjJ9LAorCXsweGIzLCAweDIwfSwKKwl7MHhiNCwgMHgyMH0sCS8qIGN0cmxiNCAqLworCXsweGI1LCAweDAwfSwKKwl7MHhiNiwgMHhhZn0sCisJezB4YmIsIDB4YWV9LAorCXsweGJjLCAweDdmfSwJLyogQURDIGNoYW5uZWwgb2Zmc2V0cyAqLworCXsweGRiLCAweDdmfSwKKwl7MHhiZSwgMHg3Zn0sCisJezB4YmYsIDB4N2Z9LAorCXsweGMwLCAweGUyfSwKKwl7MHhjMSwgMHhjMH0sCisJezB4YzIsIDB4MDF9LAorCXsweGMzLCAweDRlfSwKKwl7MHhjNiwgMHg4NX0sCisJezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLworCXsweGM5LCAweGUwfSwKKwl7MHhjYSwgMHhlOH0sCisJezB4Y2IsIDB4ZjB9LAorCXsweGNjLCAweGQ4fSwKKwl7MHhjZCwgMHhmMX0sCisJezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KKwl7MHg1MCwgMHg5OH0sCisJezB4NTEsIDB4MDB9LAorCXsweDUyLCAweDI4fSwKKwl7MHg1MywgMHg3MH0sCisJezB4NTQsIDB4OTh9LAorCXsweDU4LCAweDFhfSwKKwl7MHhmZiwgMHg0MX0sCS8qIHJlYWQgNDEsIHdyaXRlIGZmIDAwICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCisJezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweDZhLCAweDAyfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKworCXsweDEyLCAweDYyfSwJLyogY29tNyAtIDMwZnBzIFZHQSBZVVYgKi8KKwl7MHgzNiwgMHhmYX0sCS8qIGFyZWYzICovCisJezB4NjksIDB4MGF9LAkvKiBodiAqLworCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgzZSwgMHgwY30sCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMH0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAorCXsweDAzLCAweDEyfSwJLyogdnJlZiAqLworCXsweDE3LCAweDE2fSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHgzZH0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4YWF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0XzJbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHhkYSwgMHgwMX0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweGEwfSwKKwl7MHg1MiwgMHgzY30sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHgwMH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAwfSwKKwl7MHg1YSwgMHhhMH0sCisJezB4NWIsIDB4Nzh9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9pbml0XzJbXVsyXSA9IHsKKwl7MHgzYiwgMHhjNH0sCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAkvKiBnYWluICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwM30sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MDV9LAorCXsweGM1LCAweDA3fSwKKwl7MHhhMiwgMHg0Yn0sCisJezB4YTMsIDB4M2V9LAorCXsweDJkLCAweDAwfSwKKwl7MHhmZiwgMHg0Mn0sCS8qIHJlYWQgNDIsIHdyaXRlIGZmIDAwICovCisJezB4NDIsIDB4YzB9LAkvKiBjb20xNyAqLworCXsweDJkLCAweDAwfSwKKwl7MHhmZiwgMHg0Mn0sCS8qIHJlYWQgNDIsIHdyaXRlIGZmIDAwICovCisJezB4NDIsIDB4YzF9LAkvKiBjb20xNyAqLworLyogc2hhcnBuZXNzICovCisJezB4M2YsIDB4MDF9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCisvKiBzYXR1cmF0aW9uICovCisJezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KKwl7MHg1MCwgMHg5OH0sCisJezB4NTEsIDB4MDB9LAorCXsweDUyLCAweDI4fSwKKwl7MHg1MywgMHg3MH0sCisJezB4NTQsIDB4OTh9LAorCXsweDU4LCAweDFhfSwKKwl7MHhmZiwgMHg0MX0sCS8qIHJlYWQgNDEsIHdyaXRlIGZmIDAwICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworLyogY29udHJhc3QgKi8KKwl7MHg1NiwgMHg0MH0sCisvKiBicmlnaHRuZXNzICovCisJezB4NTUsIDB4OGZ9LAorLyogZXhwbyAqLworCXsweDEwLCAweDI1fSwJLyogYWVjaCAtIGV4cG9zdXJlIGhpZ2ggYml0cyAqLworCXsweGZmLCAweDEzfSwJLyogcmVhZCAxMywgd3JpdGUgZmYgMDAgKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8xX3ZnYVtdWzJdID0gewkvKiBzYW1lIGZvciBxdmdhICovCisJezB4MTIsIDB4NjJ9LAkvKiBjb203IC0gMzBmcHMgVkdBIFlVViAqLworCXsweDM2LCAweGZhfSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwYX0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAwfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4MDMsIDB4MTJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MTZ9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDNkfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhhYX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzFfc3ZnYVtdWzJdID0geworCXsweDEyLCAweDAyfSwJLyogY29tNyAtIFlVWVYgLSBWR0EgMTUgZnVsbCByZXNvbHV0aW9uICovCisJezB4MzYsIDB4Zjh9LAkvKiBhcmVmMyAqLworCXsweDY5LCAweDAyfSwJLyogaHYgKi8KKwl7MHg4YywgMHgwZH0sCS8qIGNvbTIyICovCisJezB4M2UsIDB4MGN9LAkvKiBjb20xNCAqLworCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KKwl7MHg3MiwgMHgwMH0sCisJezB4NzMsIDB4MDF9LAorCXsweDc0LCAweDNhfSwKKwl7MHg3NSwgMHgzNX0sCisJezB4NzYsIDB4MDF9LAorCXsweGM3LCAweDgwfSwJLyogY29tMjQgKi8KKwl7MHgwMywgMHgxYn0sCS8qIHZyZWYgKi8KKwl7MHgxNywgMHgxZH0sCS8qIGhzdGFydCAqLworCXsweDE4LCAweGJkfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4ODF9LAkvKiB2c3RvcCAqLworCXsweDMyLCAweGZmfSwJLyogaHJlZiAqLworCXsweGMwLCAweGUyfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMV94Z2FbXVsyXSA9IHsKKwl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KKwl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMX0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLworCXsweDAzLCAweDFifSwJLyogdnJlZiAqLworCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4YmR9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4ZTJ9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8xX3N4Z2FbXVsyXSA9IHsKKwl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KKwl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMX0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLworCXsweDAzLCAweDFifSwJLyogdnJlZiAqLworCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4ZTJ9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9xdmdhW11bMl0gPSB7CisJezB4OTQsIDB4YWF9LAorCXsweGYxLCAweDYwfSwKKwl7MHhlNSwgMHgwNH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHg4YywgMHgwMH0sCisJezB4OGQsIDB4MWN9LAorCXsweDM0LCAweDA1fSwKKworCXsweGMyLCAweDRjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ZGEsIDB4MDB9LAorCXsweDUwLCAweDAwfSwKKwl7MHg1MSwgMHhhMH0sCisJezB4NTIsIDB4Nzh9LAorCXsweDUzLCAweDAwfSwKKwl7MHg1NCwgMHgwMH0sCisJezB4NTUsIDB4MDB9LAorCXsweDU3LCAweDAwfSwKKwl7MHg1YywgMHgwMH0sCisJezB4NWEsIDB4NTB9LAorCXsweDViLCAweDNjfSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfdmdhW11bMl0gPSB7CisJezB4OTQsIDB4YWF9LAorCXsweGYxLCAweDYwfSwKKwl7MHhlNSwgMHgwNH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHg4YywgMHgwMH0sCisJezB4OGQsIDB4MWN9LAorCXsweDM0LCAweDA1fSwKKwl7MHhjMiwgMHgwY30sCisJezB4YzMsIDB4Zjl9LAorCXsweGRhLCAweDAxfSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4YTB9LAorCXsweDUyLCAweDNjfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDAwfSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGEwfSwKKwl7MHg1YiwgMHg3OH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3N2Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHhhMH0sCisJezB4YzEsIDB4ODB9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDRjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweDQwfSwKKwl7MHg1MiwgMHgwMH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHg4OH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAwfSwKKwl7MHg1YSwgMHhjOH0sCisJezB4NWIsIDB4OTZ9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4ZGEsIDB4MDB9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfeGdhW11bMl0gPSB7CisJezB4OTQsIDB4YWF9LAorCXsweGYxLCAweDYwfSwKKwl7MHhlNSwgMHgwNH0sCisJezB4YzAsIDB4YTB9LAorCXsweGMxLCAweDgwfSwKKwl7MHg4YywgMHgwMH0sCisJezB4OGQsIDB4MWN9LAorCXsweDM0LCAweDA1fSwKKwl7MHhjMiwgMHg0Y30sCisJezB4YzMsIDB4Zjl9LAorCXsweDUwLCAweDAwfSwKKwl7MHg1MSwgMHg0MH0sCisJezB4NTIsIDB4MDB9LAorCXsweDUzLCAweDAwfSwKKwl7MHg1NCwgMHgwMH0sCisJezB4NTUsIDB4ODh9LAorCXsweDU3LCAweDAwfSwKKwl7MHg1YywgMHgwMX0sCisJezB4NWEsIDB4MDB9LAorCXsweDViLCAweGMwfSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweGRhLCAweDAxfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3N4Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHhhMH0sCisJezB4YzEsIDB4ODB9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDBjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ZGEsIDB4MDB9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8yX3F2Z2FbXVsyXSA9IHsKKwl7MHgzYiwgMHhlNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLworCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLworCXsweDEzLCAweGUwfSwJLyogY29tOCAqLworCXsweDAwLCAweDAwfSwKKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAxfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwMn0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGEyLCAweDk2fSwJLyogYmQ1MCAqLworCXsweGEzLCAweDdkfSwJLyogYmQ2MCAqLworCisJezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLworCXsweDEzLCAweGU3fSwKKwl7MHgzYSwgMHg4MH0sCS8qIHRzbGIgLSB5dXl2ICovCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzJfdmdhW11bMl0gPSB7CisJezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwM30sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MDV9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGM1LCAweDA3fSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhhMiwgMHg0Yn0sCS8qIGJkNTAgKi8KKwl7MHhhMywgMHgzZX0sCS8qIGJkNjAgKi8KKworCXsweDJkLCAweDAwfSwJLyogYWR2ZmwgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMl9zdmdhW11bMl0gPSB7CS8qIHNhbWUgZm9yIHhnYSAqLworCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLworCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLworCXsweDZhLCAweDBjfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhjNSwgMHgwZn0sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YTIsIDB4NGV9LAkvKiBiZDUwICovCisJezB4YTMsIDB4NDF9LAkvKiBiZDYwICovCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzJfc3hnYVtdWzJdID0geworCXsweDEzLCAweGUwfSwJLyogY29tOCAqLworCXsweDAwLCAweDAwfSwKKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLworCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLworCXsweDZhLCAweDBjfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhjNSwgMHgwZn0sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YTIsIDB4NGV9LAkvKiBiZDUwICovCisJezB4YTMsIDB4NDF9LAkvKiBiZDYwICovCit9OworCitzdGF0aWMgdm9pZCByZWdfd19pKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywgdTggdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldDsKKworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gdmFsOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgMHgwMSwKKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDB4MDAsIHJlZywgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ193IGZhaWxlZCAlZCIsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywgdTggdmFsKQoreworCVBERUJVRyhEX1VTQk8sICJyZWdfdyBbJTA0eF0gPSAlMDJ4IiwgcmVnLCB2YWwpOworCXJlZ193X2koZ3NwY2FfZGV2LCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyB1OCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybiAwOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgMHgwMSwKKwkJCSAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwMCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7CisJUERFQlVHKERfVVNCSSwgInJlZ19yIFslMDR4XSAtPiAlMDJ4IiwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWZbMF0pOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ19yIGVyciAlZCIsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwl9CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKK30KKworc3RhdGljIGludCBzY2NiX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJdTggZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NUQVRVUyk7CisKKwkJc3dpdGNoIChkYXRhKSB7CisJCWNhc2UgMHgwMDoKKwkJCXJldHVybiAxOworCQljYXNlIDB4MDQ6CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAweDAzOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlQREVCVUcoRF9VU0JJfERfVVNCTywKKwkJCQkic2NjYiBzdGF0dXMgMHglMDJ4LCBhdHRlbXB0ICVkLzUiLAorCQkJCWRhdGEsIGkgKyAxKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2NjYl93cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHJlZywgdTggdmFsKQoreworCVBERUJVRyhEX1VTQk8sICJzY2NiX3dyaXRlIFslMDJ4XSA9ICUwMngiLCByZWcsIHZhbCk7CisJcmVnX3dfaShnc3BjYV9kZXYsIE9WNTM0X1JFR19TVUJBRERSLCByZWcpOworCXJlZ193X2koZ3NwY2FfZGV2LCBPVjUzNF9SRUdfV1JJVEUsIHZhbCk7CisJcmVnX3dfaShnc3BjYV9kZXYsIE9WNTM0X1JFR19PUEVSQVRJT04sIE9WNTM0X09QX1dSSVRFXzMpOworCisJaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQorCQlQREVCVUcoRF9FUlIsICJzY2NiX3dyaXRlIGZhaWxlZCIpOworfQorCitzdGF0aWMgdTggc2NjYl9yZWFkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZykKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIE9WNTM0X1JFR19TVUJBRERSLCByZWcpOworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMik7CisJaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQorCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlYWQgZmFpbGVkIDEiKTsKKworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfUkVBRF8yKTsKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVhZCBmYWlsZWQgMiIpOworCisJcmV0dXJuIHJlZ19yKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1JFQUQpOworfQorCisvKiBvdXRwdXQgYSBicmlkZ2Ugc2VxdWVuY2UgKHJlZyAtIHZhbCkgKi8KK3N0YXRpYyB2b2lkIHJlZ193X2FycmF5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHU4ICgqZGF0YSlbMl0sIGludCBsZW4pCit7CisJd2hpbGUgKC0tbGVuID49IDApIHsKKwkJcmVnX3coZ3NwY2FfZGV2LCAoKmRhdGEpWzBdLCAoKmRhdGEpWzFdKTsKKwkJZGF0YSsrOworCX0KK30KKworLyogb3V0cHV0IGEgc2Vuc29yIHNlcXVlbmNlIChyZWcgLSB2YWwpICovCitzdGF0aWMgdm9pZCBzY2NiX3dfYXJyYXkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3QgdTggKCpkYXRhKVsyXSwgaW50IGxlbikKK3sKKwl3aGlsZSAoLS1sZW4gPj0gMCkgeworCQlpZiAoKCpkYXRhKVswXSAhPSAweGZmKSB7CisJCQlzY2NiX3dyaXRlKGdzcGNhX2RldiwgKCpkYXRhKVswXSwgKCpkYXRhKVsxXSk7CisJCX0gZWxzZSB7CisJCQlzY2NiX3JlYWQoZ3NwY2FfZGV2LCAoKmRhdGEpWzFdKTsKKwkJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwkJfQorCQlkYXRhKys7CisJfQorfQorCisvKiBUd28gYml0cyBjb250cm9sIExFRDogMHgyMSBiaXQgNyBhbmQgMHgyMyBiaXQgNy4KKyAqIChkaXJlY3Rpb24gYW5kIG91dHB1dCk/ICovCitzdGF0aWMgdm9pZCBzZXRfbGVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgaW50IHN0YXR1cykKK3sKKwl1OCBkYXRhOworCisJUERFQlVHKERfQ09ORiwgImxlZCBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKKworCWRhdGEgPSByZWdfcihnc3BjYV9kZXYsIDB4MjEpOworCWRhdGEgfD0gMHg4MDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCisJZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgyMyk7CisJaWYgKHN0YXR1cykKKwkJZGF0YSB8PSAweDgwOworCWVsc2UKKwkJZGF0YSAmPSB+MHg4MDsKKworCXJlZ193KGdzcGNhX2RldiwgMHgyMywgZGF0YSk7CisKKwlpZiAoIXN0YXR1cykgeworCQlkYXRhID0gcmVnX3IoZ3NwY2FfZGV2LCAweDIxKTsKKwkJZGF0YSAmPSB+MHg4MDsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDIxLCBkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCB2YWw7CisKKwl2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlpZiAodmFsIDwgOCkKKwkJdmFsID0gMTUgLSB2YWw7CQkvKiBmIC4uIDggKi8KKwllbHNlCisJCXZhbCA9IHZhbCAtIDg7CQkvKiAwIC4uIDcgKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1NSwJLyogYnJ0biAtIGJyaWdodG5lc3MgYWRqdXN0bWVudCAqLworCQkJMHgwZiB8ICh2YWwgPDwgNCkpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTYsCS8qIGNuc3QxIC0gY29udHJhc3QgMSBjdHJsIGNvZWZmICovCisJCQlzZC0+Y29udHJhc3QgPDwgNCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsOworCisvKmZpeG1lOiBzaG91bGQgYWRqdXN0IGFnYy9hd2IvYWVjIGJ5IGRpZmZlcmVudCBjb250cm9scyAqLworCXZhbCA9IHNkLT5hdXRvZ2FpbjsKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJCS8qIGNvbTggKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJaWYgKHNkLT5hdXRvZ2FpbikKKwkJdmFsIHw9IDB4MDU7CQkvKiBhZ2MgJiBhZWMgKi8KKwllbHNlCisJCXZhbCAmPSAweGZhOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IHZhbDsKKwlzdGF0aWMgY29uc3QgdTggZXhwb1s0XSA9IHsweDAwLCAweDI1LCAweDM4LCAweDVlfTsKKworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDEwLAkJCS8qIGFlY1s5OjJdICovCisJCQlleHBvW3NkLT5leHBvc3VyZV0pOworCisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgxMyk7CQkvKiBjb204ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOworCisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHhhMSk7CQkvKiBhZWNoICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGExLCB2YWwgJiAweGUwKTsJLyogYWVjWzE1OjEwXSA9IDAgKi8KK30KKworc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczggdmFsOworCisJdmFsID0gc2QtPnNoYXJwbmVzczsKKwlpZiAodmFsIDwgMCkgewkJCQkvKiBhdXRvICovCisJCXZhbCA9IHNjY2JfcmVhZChnc3BjYV9kZXYsIDB4NDIpOwkvKiBjb20xNyAqLworCQlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDQyLCB2YWwgfCAweDQwKTsKKwkJCQkvKiBFZGdlIGVuaGFuY2VtZW50IHN0cmVuZ3RoIGF1dG8gYWRqdXN0ICovCisJCXJldHVybjsKKwl9CisJaWYgKHZhbCAhPSAwKQorCQl2YWwgPSAxIDw8ICh2YWwgLSAxKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHgzZiwJLyogZWRnZSAtIGVkZ2UgZW5oYW5jZS4gZmFjdG9yICovCisJCQl2YWwpOworCXZhbCA9IHNjY2JfcmVhZChnc3BjYV9kZXYsIDB4NDIpOwkJLyogY29tMTcgKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCAmIDB4YmYpOworfQorCitzdGF0aWMgdm9pZCBzZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IHZhbDEsIHZhbDIsIHZhbDM7CisJc3RhdGljIGNvbnN0IHU4IG1hdHJpeFs1XVsyXSA9IHsKKwkJezB4MTQsIDB4Mzh9LAorCQl7MHgxZSwgMHg1NH0sCisJCXsweDI4LCAweDcwfSwKKwkJezB4MzIsIDB4OGN9LAorCQl7MHg0OCwgMHg5MH0KKwl9OworCisJdmFsMSA9IG1hdHJpeFtzZC0+c2F0dXJdWzBdOworCXZhbDIgPSBtYXRyaXhbc2QtPnNhdHVyXVsxXTsKKwl2YWwzID0gdmFsMSArIHZhbDI7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NGYsIHZhbDMpOwkvKiBtYXRyaXggY29lZmYgKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1MCwgdmFsMyk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTEsIDB4MDApOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDUyLCB2YWwxKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1MywgdmFsMik7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTQsIHZhbDMpOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDU4LCAweDFhKTsJLyogbXR4cyAtIGNvZWZmIHNpZ25zICovCisKKwl2YWwxID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0MSk7CS8qIGNvbTE2ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDQxLCB2YWwxKTsKK30KKworc3RhdGljIHZvaWQgc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IHZhbDsKKworCXZhbCA9IHNjY2JfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlpZiAoc2QtPmZyZXEgPT0gMCkgeworCQlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsICYgMHhkZik7CisJCXJldHVybjsKKwl9CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCB8IDB4MjApOworCisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0Mik7CQkvKiBjb20xNyAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlpZiAoc2QtPmZyZXEgPT0gMSkKKwkJdmFsIHw9IDB4MDE7CisJZWxzZQorCQl2YWwgJj0gMHhmZTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtOworCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCisJY2FtLT5jYW1fbW9kZSA9IG92OTY1eF9tb2RlOworCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShvdjk2NXhfbW9kZSk7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKyNpZiBBVVRPR0FJTl9ERUYgIT0gMAorCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKKwlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPX0lEWCk7CisjZW5kaWYKKyNpZiBFWFBPX0RFRiAhPSAwCisJc2QtPmV4cG9zdXJlID0gRVhQT19ERUY7CisjZW5kaWYKKyNpZiBTSEFSUE5FU1NfREVGICE9IDAKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKyNlbmRpZgorCXNkLT5zYXR1ciA9IFNBVFVSX0RFRjsKKwlzZC0+ZnJlcSA9IEZSRVFfREVGOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1MTYgc2Vuc29yX2lkOworCisJLyogcmVzZXQgYnJpZGdlICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGU3LCAweDNhKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDgpOworCW1zbGVlcCgxMDApOworCisJLyogaW5pdGlhbGl6ZSB0aGUgc2Vuc29yIGFkZHJlc3MgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIE9WNTM0X1JFR19BRERSRVNTLCAweDYwKTsKKworCS8qIHJlc2V0IHNlbnNvciAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDEyLCAweDgwKTsKKwltc2xlZXAoMTApOworCisJLyogcHJvYmUgdGhlIHNlbnNvciAqLworCXNjY2JfcmVhZChnc3BjYV9kZXYsIDB4MGEpOworCXNlbnNvcl9pZCA9IHNjY2JfcmVhZChnc3BjYV9kZXYsIDB4MGEpIDw8IDg7CisJc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJc2Vuc29yX2lkIHw9IHNjY2JfcmVhZChnc3BjYV9kZXYsIDB4MGIpOworCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIElEOiAlMDR4Iiwgc2Vuc29yX2lkKTsKKworCS8qIGluaXRpYWxpemUgKi8KKwlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0LAorCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdCkpOworCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0LAorCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdCkpOworCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX2luaXRfMiwKKwkJCUFSUkFZX1NJWkUoYnJpZGdlX2luaXRfMikpOworCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0XzIsCisJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0XzIpKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMSk7CisJc2V0X2xlZChnc3BjYV9kZXYsIDApOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzd2l0Y2ggKGdzcGNhX2Rldi0+Y3Vycl9tb2RlKSB7CisJY2FzZSBRVkdBX01PREU6CQkJLyogMzIweDI0MCAqLworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMV92Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMV92Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfcXZnYSwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9xdmdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3F2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl9xdmdhKSk7CisJCWJyZWFrOworCWNhc2UgVkdBX01PREU6CQkJLyogNjQweDQ4MCAqLworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMV92Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMV92Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3ZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMl92Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl92Z2EpKTsKKwkJYnJlYWs7CisJY2FzZSBTVkdBX01PREU6CQkJLyogODAweDYwMCAqLworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMV9zdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0XzFfc3ZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9zdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3N2Z2EpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0XzJfc3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8yX3N2Z2EpKTsKKwkJYnJlYWs7CisJY2FzZSBYR0FfTU9ERToJCQkvKiAxMDI0eDc2OCAqLworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMV94Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMV94Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfeGdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3hnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMl9zdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0XzJfc3ZnYSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTWEdBX01PREU6CQkJICogMTI4MHgxMDI0ICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3N4Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMV9zeGdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3N4Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfc3hnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMl9zeGdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0XzJfc3hnYSkpOworCQlicmVhazsKKwl9CisJc2V0ZnJlcShnc3BjYV9kZXYpOworCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRzYXR1cihnc3BjYV9kZXYpOworCisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCXNldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKKwlzZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKK30KKworLyogVmFsdWVzIGZvciBibUhlYWRlckluZm8gKFZpZGVvIGFuZCBTdGlsbCBJbWFnZSBQYXlsb2FkIEhlYWRlcnMsIDIuNC4zLjMpICovCisjZGVmaW5lIFVWQ19TVFJFQU1fRU9ICSgxIDw8IDcpCisjZGVmaW5lIFVWQ19TVFJFQU1fRVJSCSgxIDw8IDYpCisjZGVmaW5lIFVWQ19TVFJFQU1fU1RJCSgxIDw8IDUpCisjZGVmaW5lIFVWQ19TVFJFQU1fUkVTCSgxIDw8IDQpCisjZGVmaW5lIFVWQ19TVFJFQU1fU0NSCSgxIDw8IDMpCisjZGVmaW5lIFVWQ19TVFJFQU1fUFRTCSgxIDw8IDIpCisjZGVmaW5lIFVWQ19TVFJFQU1fRU9GCSgxIDw8IDEpCisjZGVmaW5lIFVWQ19TVFJFQU1fRklECSgxIDw8IDApCisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3UzMiB0aGlzX3B0czsKKwl1OCB0aGlzX2ZpZDsKKwlpbnQgcmVtYWluaW5nX2xlbiA9IGxlbjsKKworCWRvIHsKKwkJbGVuID0gbWluKHJlbWFpbmluZ19sZW4sIDIwNDApOworCisJCS8qIFBheWxvYWRzIGFyZSBwcmVmaXhlZCB3aXRoIGEgVVZDLXN0eWxlIGhlYWRlci4gIFdlCisJCSAgIGNvbnNpZGVyIGEgZnJhbWUgdG8gc3RhcnQgd2hlbiB0aGUgRklEIHRvZ2dsZXMsIG9yIHRoZSBQVFMKKwkJICAgY2hhbmdlcy4gIEEgZnJhbWUgZW5kcyB3aGVuIEVPRiBpcyBzZXQsIGFuZCB3ZSd2ZSByZWNlaXZlZAorCQkgICB0aGUgY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMuICovCisKKwkJLyogVmVyaWZ5IFVWQyBoZWFkZXIuICBIZWFkZXIgbGVuZ3RoIGlzIGFsd2F5cyAxMiAqLworCQlpZiAoZGF0YVswXSAhPSAxMiB8fCBsZW4gPCAxMikgeworCQkJUERFQlVHKERfUEFDSywgImJhZCBoZWFkZXIiKTsKKwkJCWdvdG8gZGlzY2FyZDsKKwkJfQorCisJCS8qIENoZWNrIGVycm9ycyAqLworCQlpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRVJSKSB7CisJCQlQREVCVUcoRF9QQUNLLCAicGF5bG9hZCBlcnJvciIpOworCQkJZ290byBkaXNjYXJkOworCQl9CisKKwkJLyogRXh0cmFjdCBQVFMgYW5kIEZJRCAqLworCQlpZiAoIShkYXRhWzFdICYgVVZDX1NUUkVBTV9QVFMpKSB7CisJCQlQREVCVUcoRF9QQUNLLCAiUFRTIG5vdCBwcmVzZW50Iik7CisJCQlnb3RvIGRpc2NhcmQ7CisJCX0KKwkJdGhpc19wdHMgPSAoZGF0YVs1XSA8PCAyNCkgfCAoZGF0YVs0XSA8PCAxNikKKwkJCQkJCXwgKGRhdGFbM10gPDwgOCkgfCBkYXRhWzJdOworCQl0aGlzX2ZpZCA9IGRhdGFbMV0gJiBVVkNfU1RSRUFNX0ZJRDsKKworCQkvKiBJZiBQVFMgb3IgRklEIGhhcyBjaGFuZ2VkLCBzdGFydCBhIG5ldyBmcmFtZS4gKi8KKwkJaWYgKHRoaXNfcHRzICE9IHNkLT5sYXN0X3B0cyB8fCB0aGlzX2ZpZCAhPSBzZC0+bGFzdF9maWQpIHsKKwkJCWlmIChnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPT0gSU5URVJfUEFDS0VUKQorCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAorCQkJCQkJTlVMTCwgMCk7CisJCQlzZC0+bGFzdF9wdHMgPSB0aGlzX3B0czsKKwkJCXNkLT5sYXN0X2ZpZCA9IHRoaXNfZmlkOworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULAorCQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKKwkJLyogSWYgdGhpcyBwYWNrZXQgaXMgbWFya2VkIGFzIEVPRiwgZW5kIHRoZSBmcmFtZSAqLworCQl9IGVsc2UgaWYgKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0VPRikgeworCQkJc2QtPmxhc3RfcHRzID0gMDsKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAorCQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKKwkJfSBlbHNlIHsKKworCQkJLyogQWRkIHRoZSBkYXRhIGZyb20gdGhpcyBwYXlsb2FkICovCisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCQl9CisKKwkJLyogRG9uZSB0aGlzIHBheWxvYWQgKi8KKwkJZ290byBzY2FuX25leHQ7CisKK2Rpc2NhcmQ6CisJCS8qIERpc2NhcmQgZGF0YSB1bnRpbCBhIG5ldyBmcmFtZSBzdGFydHMuICovCisJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCitzY2FuX25leHQ6CisJCXJlbWFpbmluZ19sZW4gLT0gbGVuOworCQlkYXRhICs9IGxlbjsKKwl9IHdoaWxlIChyZW1haW5pbmdfbGVuID4gMCk7Cit9CisKKy8qIGNvbnRyb2xzICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmJyaWdodG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbnRyYXN0ID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbnRyYXN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5hdXRvZ2FpbiA9IHZhbDsKKworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlpZiAodmFsKQorCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgRVhQT19JRFgpOworCQllbHNlCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyAmPSB+KDEgPDwgRVhQT19JRFgpOworCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOworCX0KKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmF1dG9nYWluOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5leHBvc3VyZSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5leHBvc3VyZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnNoYXJwbmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnNoYXJwbmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+c2F0dXIgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRzYXR1cihnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+c2F0dXI7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmZyZXEgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRmcmVxKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKK3sKKwlzd2l0Y2ggKG1lbnUtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKKwkJc3dpdGNoIChtZW51LT5pbmRleCkgeworCQljYXNlIDA6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJOb0ZsaWtlciIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMToJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNTAgSHoiKTsKKwkJCXJldHVybiAwOworCQljYXNlIDI6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjYwIEh6Iik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lICAgICA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyAgICA9IHNkX2N0cmxzLAorCS5uY3RybHMgICA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgICA9IHNkX2NvbmZpZywKKwkuaW5pdCAgICAgPSBzZF9pbml0LAorCS5zdGFydCAgICA9IHNkX3N0YXJ0LAorCS5zdG9wTiAgICA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAzKX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgICA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgICAgICA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCAgICA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKaW5kZXggNDcwNmE4Mi4uMGM4N2MzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCkBAIC0yNSw2ICsyNSw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInBhYzIwNyIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAogTU9EVUxFX0FVVEhPUigiSGFucyBkZSBHb2VkZSA8aGRnb2VkZUByZWRoYXQuY29tPiIpOwpAQCAtNzcsNyArNzgsNyBAQAogc3RhdGljIGludCBzZF9zZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogI2RlZmluZSBTRF9CUklHSFRORVNTIDAKIAl7CiAJICAgIHsKQEAgLTQ5NSw2ICs0OTYsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJwdXQgcGFja2V0IGxlbmd0aCAqLworeworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKGxlbiA9PSAyICYmIGRhdGFbMF0gPT0gMHg1YSAmJiBkYXRhWzFdID09IDB4NWEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtNTA2LDYgKzUyNiw5IEBACiAJLnN0b3BOID0gc2Rfc3RvcE4sCiAJLmRxX2NhbGxiYWNrID0gcGFjMjA3X2RvX2F1dG9fZ2FpbiwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkuaW50X3BrdF9zY2FuID0gc2RfaW50X3BrdF9zY2FuLAorI2VuZGlmCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMwMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMKaW5kZXggZGUwYjY2Yy4uMmE2ODIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMKQEAgLTQsNyArNCw5IEBACiAgKgogICogVjRMMiBieSBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgogICoKLSAqIFNlcGFyYXRlZCBmcm9tIFBpeGFydCBQQUM3MzExIGxpYnJhcnkgYnkgTeFydG9uIE7pbWV0aCA8bm0xMjdAZnJlZW1haWwuaHU+CisgKiBTZXBhcmF0ZWQgZnJvbSBQaXhhcnQgUEFDNzMxMSBsaWJyYXJ5IGJ5IE3DoXJ0b24gTsOpbWV0aAorICogQ2FtZXJhIGJ1dHRvbiBpbnB1dCBoYW5kbGluZyBieSBNw6FydG9uIE7DqW1ldGggPG5tMTI3QGZyZWVtYWlsLmh1PgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTcOhcnRvbiBOw6ltZXRoIDxubTEyN0BmcmVlbWFpbC5odT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIyLDMzICsyNCwyNiBAQAogICovCiAKIC8qIFNvbWUgZG9jdW1lbnRhdGlvbiBhYm91dCB2YXJpb3VzIHJlZ2lzdGVycyBhcyBkZXRlcm1pbmVkIGJ5IHRyaWFsIGFuZCBlcnJvci4KLSAgIFdoZW4gdGhlIHJlZ2lzdGVyIGFkZHJlc3NlcyBkaWZmZXIgYmV0d2VlbiB0aGUgNzIwMiBhbmQgdGhlIDczMTEgdGhlIDIKLSAgIGRpZmZlcmVudCBhZGRyZXNzZXMgYXJlIHdyaXR0ZW4gYXMgNzMwMmFkZHIvNzMxMWFkZHIsIHdoZW4gb25lIG9mIHRoZSAyCi0gICBhZGRyZXNzZXMgaXMgYSAtIHNpZ24gdGhhdCByZWdpc3RlciBkZXNjcmlwdGlvbiBpcyBub3QgdmFsaWQgZm9yIHRoZQotICAgbWF0Y2hpbmcgSUMuCiAKICAgIFJlZ2lzdGVyIHBhZ2UgMToKIAogICAgQWRkcmVzcwlEZXNjcmlwdGlvbgotICAgLS8weDA4CVVua25vd24gY29tcHJlc3NvciByZWxhdGVkLCBtdXN0IGFsd2F5cyBiZSA4IGV4Y2VwdCB3aGVuIG5vdAotCQlpbiA2NDB4NDgwIHJlc29sdXRpb24gYW5kIHBhZ2UgNCByZWcgMiA8PSAzIHRoZW4gc2V0IGl0IHRvIDkgIQotICAgLS8weDFiCUF1dG8gd2hpdGUgYmFsYW5jZSByZWxhdGVkLCBiaXQgMCBpcyBBV0IgZW5hYmxlIChpbnZlcnRlZCkKLQkJYml0cyAzNDUgc2VlbSB0byB0b2dnbGUgcGVyIGNvbG9yIGdhaW5zIG9uL29mZiAoaW52ZXJ0ZWQpCiAgICAweDc4CQlHbG9iYWwgY29udHJvbCwgYml0IDYgY29udHJvbHMgdGhlIExFRCAoaW52ZXJ0ZWQpCi0gICAtLzB4ODAJSlBFRyBjb21wcmVzc2lvbiByYXRpbyA/IEJlc3Qgbm90IHRvdWNoZWQKIAotICAgUmVnaXN0ZXIgcGFnZSAzLzQ6CisgICBSZWdpc3RlciBwYWdlIDM6CiAKICAgIEFkZHJlc3MJRGVzY3JpcHRpb24KLSAgIDB4MDIJCUNsb2NrIGRpdmlkZXIgMi02MywgZnBzID1+IDYwIC8gdmFsLiBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgMyBvbgorICAgMHgwMgkJQ2xvY2sgZGl2aWRlciAzLTYzLCBmcHMgPSA5MCAvIHZhbC4gTXVzdCBiZSBhIG11bHRpcGxlIG9mIDMgb24KIAkJdGhlIDczMDIsIHNvIG9uZSBvZiAzLCA2LCA5LCAuLi4sIGV4Y2VwdCB3aGVuIGJldHdlZW4gNiBhbmQgMTI/Ci0gICAtLzB4MGYJTWFzdGVyIGdhaW4gMS0yNDUsIGxvdyB2YWx1ZSA9IGhpZ2ggZ2FpbgotICAgMHgxMC8tCU1hc3RlciBnYWluIDAtMzEKLSAgIC0vMHgxMAlBbm90aGVyIGdhaW4gMC0xNSwgbGltaXRlZCBpbmZsdWVuY2UgKDEtMnggZ2FpbiBJIGd1ZXNzKQorICAgMHgwMwkJVmFyaWFibGUgZnJhbWVyYXRlIGN0cmwgcmVnMj09MzogMCAtPiB+MzAgZnBzLCAyNTUgLT4gfjIyZnBzCisgICAweDA0CQlBbm90aGVyIHZhciBmcmFtZXJhdGUgY3RybCByZWcyPT0zLCByZWczPT0wOiAwIC0+IH4zMCBmcHMsCisJCTYzIC0+IH4yNyBmcHMsIHRoZSAyIG1zYidzIG11c3QgYWx3YXlzIGJlIDEgISEKKyAgIDB4MDUJCUFub3RoZXIgdmFyIGZyYW1lcmF0ZSBjdHJsIHJlZzI9PTMsIHJlZzM9PTAsIHJlZzQ9PTB4YzA6CisJCTEgLT4gfjMwIGZwcywgMiAtPiB+MjAgZnBzCisgICAweDBlCQlFeHBvc3VyZSBiaXRzIDAtNywgMC00NDgsIDAgPSB1c2UgZnVsbCBmcmFtZSB0aW1lCisgICAweDBmCQlFeHBvc3VyZSBiaXQgOCwgMC00NDgsIDQ0OCA9IG5vIGV4cG9zdXJlIGF0IGFsbAorICAgMHgxMAkJTWFzdGVyIGdhaW4gMC0zMQogICAgMHgyMQkJQml0ZmllbGQ6IDAtMSB1bnVzZWQsIDItMyB2ZmxpcC9oZmxpcCwgNC01IHVua25vd24sIDYtNyB1bnVzZWQKLSAgIC0vMHgyNwlTZWVtcyB0byB0b2dnbGUgdmFyaW91cyBnYWlucyBvbiAvIG9mZiwgU2V0dGluZyBiaXQgNyBzZWVtcyB0bwotCQljb21wbGV0ZWx5IGRpc2FibGUgdGhlIGFuYWxvZyBhbXBsaWZpY2F0aW9uIGJsb2NrLiBTZXQgdG8gMHg2OAotCQlmb3IgbWF4IGdhaW4sIDB4MTQgZm9yIG1pbmltYWwgZ2Fpbi4KIAogICAgVGhlIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgaW4gdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKQEAgLTY4LDYgKzYzLDcgQEAKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAicGFjNzMwMiIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKIApAQCAtODYsOCArODIsOCBAQAogCXVuc2lnbmVkIGNoYXIgcmVkX2JhbGFuY2U7CiAJdW5zaWduZWQgY2hhciBibHVlX2JhbGFuY2U7CiAJdW5zaWduZWQgY2hhciBnYWluOwotCXVuc2lnbmVkIGNoYXIgZXhwb3N1cmU7CiAJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKKwl1bnNpZ25lZCBzaG9ydCBleHBvc3VyZTsKIAlfX3U4IGhmbGlwOwogCV9fdTggdmZsaXA7CiAJdTggZmxhZ3M7CkBAIC0xMjQsOCArMTIwLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKLS8qIFRoaXMgY29udHJvbCBpcyBwYWM3MzAyIG9ubHkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xNDEsNyArMTM2LDYgQEAKIAkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAogCX0sCi0vKiBUaGlzIGNvbnRyb2wgaXMgZm9yIGJvdGggdGhlIDczMDIgYW5kIHRoZSA3MzExICovCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCkBAIC0xNTcsNyArMTUxLDYgQEAKIAkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAogCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCiAJfSwKLS8qIFRoaXMgY29udHJvbCBpcyBwYWM3MzAyIG9ubHkgKi8KIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLApAQCAtMjE1LDcgKzIwOCw2IEBACiAJICAgIC5zZXQgPSBzZF9zZXRibHVlYmFsYW5jZSwKIAkgICAgLmdldCA9IHNkX2dldGJsdWViYWxhbmNlLAogCX0sCi0vKiBBbGwgY29udHJvbHMgYmVsb3cgYXJlIGZvciBib3RoIHRoZSA3MzAyIGFuZCB0aGUgNzMxMSAqLwogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBSU4sCkBAIC0yMzgsMTEgKzIzMCwxMCBAQAogCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lICAgID0gIkV4cG9zdXJlIiwKIAkJLm1pbmltdW0gPSAwLAotI2RlZmluZSBFWFBPU1VSRV9NQVggMjU1Ci0JCS5tYXhpbXVtID0gRVhQT1NVUkVfTUFYLAorCQkubWF4aW11bSA9IDEwMjMsCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgRVhQT1NVUkVfREVGICAxNiAvKiAgMzIgbXMgLyAzMCBmcHMgKi8KLSNkZWZpbmUgRVhQT1NVUkVfS05FRSA1MCAvKiAxMDAgbXMgLyAxMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfREVGICA2NiAgLyogIDMzIG1zIC8gMzAgZnBzICovCisjZGVmaW5lIEVYUE9TVVJFX0tORUUgMTMzIC8qICA2NiBtcyAvIDE1IGZwcyAqLwogCQkuZGVmYXVsdF92YWx1ZSA9IEVYUE9TVVJFX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGV4cG9zdXJlLApAQCAtMzAxLDcgKzI5Miw2IEBACiB9OwogCiAjZGVmaW5lIExPQURfUEFHRTMJCTI1NQotI2RlZmluZSBMT0FEX1BBR0U0CQkyNTQKICNkZWZpbmUgRU5EX09GX1NFUVVFTkNFCQkwCiAKIC8qIHBhYyA3MzAyICovCkBAIC0zNzksNyArMzY5LDcgQEAKICNkZWZpbmUgU0tJUAkJMHhhYQogLyogcGFnZSAzIC0gdGhlIHZhbHVlIFNLSVAgc2F5cyBza2lwIHRoZSBpbmRleCAtIHNlZSByZWdfd19wYWdlKCkgKi8KIHN0YXRpYyBjb25zdCBfX3U4IHBhZ2UzXzczMDJbXSA9IHsKLQkweDkwLCAweDQwLCAweDAzLCAweDUwLCAweGMyLCAweDAxLCAweDE0LCAweDE2LAorCTB4OTAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MTQsIDB4MTYsCiAJMHgxNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzMywgMHgwMCwKIAkweDBmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MDEsIDB4YjMsIDB4MDEsIDB4MDAsCkBAIC0zODgsNyArMzc4LDcgQEAKIAkweGE0LCAweGI4LCAweGUwLCAweDJhLCAweGY2LCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHhmYywgMHgwMCwgMHhmMiwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGMwLCAweGMwLCAweDEwLCAweDAwLCAweDAwLAorCVNLSVAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzAsIDB4MTAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweDQwLCAweGZmLCAweDAzLCAweDE5LCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC00MDEsMTIgKzM5MSwxNCBAQAogCTB4MDAKIH07CiAKLXN0YXRpYyBpbnQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X2J1ZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgX191OCBpbmRleCwKIAkJICBjb25zdCBjaGFyICpidWZmZXIsIGludCBsZW4pCiB7CiAJaW50IHJldDsKIAorCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CiAJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgYnVmZmVyLCBsZW4pOwogCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCkBAIC00MTUsMjAgKzQwNywyMyBAQAogCQkJMCwJCS8qIHZhbHVlICovCiAJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193X2J1ZigpOiAiCiAJCSJGYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXJzIHRvIGluZGV4IDB4JXgsIGVycm9yICVpIiwKIAkJaW5kZXgsIHJldCk7Ci0JcmV0dXJuIHJldDsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KIH0KIAogCi1zdGF0aWMgaW50IHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIF9fdTggdmFsdWUpCiB7CiAJaW50IHJldDsKIAorCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gdmFsdWU7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTQzNiwzMiArNDMxLDMyIEBACiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkwLCBpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLAogCQkJNTAwKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgewogCQlQREVCVUcoRF9FUlIsICJyZWdfdygpOiAiCiAJCSJGYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgdG8gaW5kZXggMHgleCwgdmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgdmFsdWUsIHJldCk7Ci0JcmV0dXJuIHJldDsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KIH0KIAotc3RhdGljIGludCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfc2VxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJY29uc3QgX191OCAqc2VxLCBpbnQgbGVuKQogewotCWludCByZXQgPSAwOwogCXdoaWxlICgtLWxlbiA+PSAwKSB7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOworCQlyZWdfdyhnc3BjYV9kZXYsIHNlcVswXSwgc2VxWzFdKTsKIAkJc2VxICs9IDI7CiAJfQotCXJldHVybiByZXQ7CiB9CiAKIC8qIGxvYWQgdGhlIGJlZ2lubmluZyBvZiBhIHBhZ2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfcGFnZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCWNvbnN0IF9fdTggKnBhZ2UsIGludCBsZW4pCiB7CiAJaW50IGluZGV4OwogCWludCByZXQgPSAwOwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW47IGluZGV4KyspIHsKIAkJaWYgKHBhZ2VbaW5kZXhdID09IFNLSVApCQkvKiBza2lwIHRoaXMgaW5kZXggKi8KIAkJCWNvbnRpbnVlOwpAQCAtNDc3LDU2ICs0NzIsNDcgQEAKIAkJCSJGYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgdG8gaW5kZXggMHgleCwgIgogCQkJInZhbHVlIDB4JXgsIGVycm9yICVpIiwKIAkJCWluZGV4LCBwYWdlW2luZGV4XSwgcmV0KTsKKwkJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJldHVybiByZXQ7CiB9CiAKIC8qIG91dHB1dCBhIHZhcmlhYmxlIHNlcXVlbmNlICovCi1zdGF0aWMgaW50IHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd192YXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqc2VxLAotCQkJY29uc3QgX191OCAqcGFnZTMsIHVuc2lnbmVkIGludCBwYWdlM19sZW4sCi0JCQljb25zdCBfX3U4ICpwYWdlNCwgdW5zaWduZWQgaW50IHBhZ2U0X2xlbikKKwkJCWNvbnN0IF9fdTggKnBhZ2UzLCB1bnNpZ25lZCBpbnQgcGFnZTNfbGVuKQogewogCWludCBpbmRleCwgbGVuOwotCWludCByZXQgPSAwOwogCiAJZm9yICg7OykgewogCQlpbmRleCA9ICpzZXErKzsKIAkJbGVuID0gKnNlcSsrOwogCQlzd2l0Y2ggKGxlbikgewogCQljYXNlIEVORF9PRl9TRVFVRU5DRToKLQkJCXJldHVybiByZXQ7Ci0JCWNhc2UgTE9BRF9QQUdFNDoKLQkJCXJldCA9IHJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlNCwgcGFnZTRfbGVuKTsKLQkJCWJyZWFrOworCQkJcmV0dXJuOwogCQljYXNlIExPQURfUEFHRTM6Ci0JCQlyZXQgPSByZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTMsIHBhZ2UzX2xlbik7CisJCQlyZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTMsIHBhZ2UzX2xlbik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWlmIChsZW4gPiBVU0JfQlVGX1NaKSB7CiAJCQkJUERFQlVHKERfRVJSfERfU1RSRUFNLAogCQkJCQkiSW5jb3JyZWN0IHZhcmlhYmxlIHNlcXVlbmNlIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJcmV0dXJuOwogCQkJfQogCQkJd2hpbGUgKGxlbiA+IDApIHsKIAkJCQlpZiAobGVuIDwgOCkgewotCQkJCQlyZXQgPSByZWdfd19idWYoZ3NwY2FfZGV2LAorCQkJCQlyZWdfd19idWYoZ3NwY2FfZGV2LAogCQkJCQkJaW5kZXgsIHNlcSwgbGVuKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwogCQkJCQlzZXEgKz0gbGVuOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJcmV0ID0gcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CisJCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CiAJCQkJc2VxICs9IDg7CiAJCQkJaW5kZXggKz0gODsKIAkJCQlsZW4gLT0gODsKIAkJCX0KIAkJfQotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CiAJfQogCS8qIG5vdCByZWFjaGVkICovCiB9CkBAIC01NjAsMTEgKzU0NiwxMCBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFjNzMwMiBvbmx5ICovCi1zdGF0aWMgaW50IHNldGJyaWdodGNvbnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0YnJpZ2h0Y29udChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBpLCB2OwotCWludCByZXQ7CiAJc3RhdGljIGNvbnN0IF9fdTggbWF4WzEwXSA9CiAJCXsweDI5LCAweDMzLCAweDQyLCAweDVhLCAweDZlLCAweDgwLCAweDlmLCAweGJiLAogCQkgMHhkNCwgMHhlY307CkBAIC01NzIsNyArNTU3LDcgQEAKIAkJezB4MzUsIDB4MzMsIDB4MzMsIDB4MmYsIDB4MmEsIDB4MjUsIDB4MWUsIDB4MTcsCiAJCSAweDExLCAweDBifTsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CS8qIHBhZ2UgMCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkvKiBwYWdlIDAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQl2ID0gbWF4W2ldOwogCQl2ICs9IChzZC0+YnJpZ2h0bmVzcyAtIEJSSUdIVE5FU1NfTUFYKQpAQCAtNTgyLDEzNiArNTY3LDEyMSBAQAogCQkJdiA9IDA7CiAJCWVsc2UgaWYgKHYgPiAweGZmKQogCQkJdiA9IDB4ZmY7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhhMiArIGksIHYpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4YTIgKyBpLCB2KTsKIAl9Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHBhYzczMDIgb25seSAqLwotc3RhdGljIGludCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGksIHY7Ci0JaW50IHJldDsKIAlzdGF0aWMgY29uc3QgaW50IGFbOV0gPQogCQl7MjE3LCAtMjEyLCAwLCAtMTAxLCAxNzAsIC02NywgLTM4LCAtMzE1LCAzNTV9OwogCXN0YXRpYyBjb25zdCBpbnQgYls5XSA9CiAJCXsxOSwgMTA2LCAwLCAxOSwgMTA2LCAxLCAxOSwgMTA2LCAxfTsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CS8qIHBhZ2UgMyAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CS8qIHBhZ2UgMCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkJLyogcGFnZSAzICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwkJCS8qIHBhZ2UgMCAqLwogCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKIAkJdiA9IGFbaV0gKiBzZC0+Y29sb3JzIC8gQ09MT1JfTUFYICsgYltpXTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBmICsgMiAqIGksICh2ID4+IDgpICYgMHgwNyk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwZiArIDIgKiBpICsgMSwgdik7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwZiArIDIgKiBpLCAodiA+PiA4KSAmIDB4MDcpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGYgKyAyICogaSArIDEsIHYpOwogCX0KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAlQREVCVUcoRF9DT05GfERfU1RSRUFNLCAiY29sb3I6ICVpIiwgc2QtPmNvbG9ycyk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0d2hpdGViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CS8qIHBhZ2UgMCAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGM2LCBzZC0+d2hpdGVfYmFsYW5jZSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhjNiwgc2QtPndoaXRlX2JhbGFuY2UpOwogCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CiAJUERFQlVHKERfQ09ORnxEX1NUUkVBTSwgIndoaXRlX2JhbGFuY2U6ICVpIiwgc2QtPndoaXRlX2JhbGFuY2UpOwotCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0cmVkYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRyZWRiYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CS8qIHBhZ2UgMCAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGM1LCBzZC0+cmVkX2JhbGFuY2UpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkvKiBwYWdlIDAgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4YzUsIHNkLT5yZWRfYmFsYW5jZSk7CiAKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAlQREVCVUcoRF9DT05GfERfU1RSRUFNLCAicmVkX2JhbGFuY2U6ICVpIiwgc2QtPnJlZF9iYWxhbmNlKTsKLQlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNldGJsdWViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGJsdWViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CS8qIHBhZ2UgMCAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGM3LCBzZC0+Ymx1ZV9iYWxhbmNlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwkJCS8qIHBhZ2UgMCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhjNywgc2QtPmJsdWVfYmFsYW5jZSk7CiAKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAlQREVCVUcoRF9DT05GfERfU1RSRUFNLCAiYmx1ZV9iYWxhbmNlOiAlaSIsIHNkLT5ibHVlX2JhbGFuY2UpOwotCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkvKiBwYWdlIDMgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4gPj4gMyk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTAsIHNkLT5nYWluID4+IDMpOwogCiAJLyogbG9hZCByZWdpc3RlcnMgdG8gc2Vuc29yIChCaXQgMCwgYXV0byBjbGVhcikgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwogfQogCi1zdGF0aWMgaW50IHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQlfX3U4IHJlZzsKKwlfX3U4IGNsb2NrZGl2OworCV9fdTE2IGV4cG9zdXJlOwogCi0JLyogcmVnaXN0ZXIgMiBvZiBmcmFtZSAzLzQgY29udGFpbnMgdGhlIGNsb2NrIGRpdmlkZXIgY29uZmlndXJpbmcgdGhlCi0JICAgbm8gZnBzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTogNjAgLyByZWcuIHNkLT5leHBvc3VyZSBpcyB0aGUKLQkgICBkZXNpcmVkIGV4cG9zdXJlIHRpbWUgaW4gbXMuICovCi0JcmVnID0gMTIwICogc2QtPmV4cG9zdXJlIC8gMTAwMDsKLQlpZiAocmVnIDwgMikKLQkJcmVnID0gMjsKLQllbHNlIGlmIChyZWcgPiA2MykKLQkJcmVnID0gNjM7CisJLyogcmVnaXN0ZXIgMiBvZiBmcmFtZSAzIGNvbnRhaW5zIHRoZSBjbG9jayBkaXZpZGVyIGNvbmZpZ3VyaW5nIHRoZQorCSAgIG5vIGZwcyBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6IDkwIC8gcmVnLiBzZC0+ZXhwb3N1cmUgaXMgdGhlCisJICAgZGVzaXJlZCBleHBvc3VyZSB0aW1lIGluIDAuNSBtcy4gKi8KKwljbG9ja2RpdiA9ICg5MCAqIHNkLT5leHBvc3VyZSArIDE5OTkpIC8gMjAwMDsKIAotCS8qIE9uIHRoZSBwYWM3MzAyIHJlZzIgTVVTVCBiZSBhIG11bHRpcGxlIG9mIDMsIHNvIHJvdW5kIGl0IHRvCi0JICAgdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgMywgZXhjZXB0IHdoZW4gYmV0d2VlbiA2IGFuZCAxMj8gKi8KLQlpZiAocmVnIDwgNiB8fCByZWcgPiAxMikKLQkJcmVnID0gKChyZWcgKyAxKSAvIDMpICogMzsKLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJLyogcGFnZSAzICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDIsIHJlZyk7CisJLyogTm90ZSBjbG9ja2RpdiA9IDMgYWxzbyB3b3JrcywgYnV0IHdoZW4gcnVubmluZyBhdCAzMCBmcHMsIGRlcGVuZGluZworCSAgIG9uIHRoZSBzY2VuZSBiZWluZyByZWNvcmRlZCwgdGhlIGNhbWVyYSBzd2l0Y2hlcyB0byBhbm90aGVyCisJICAgcXVhbnRpemF0aW9uIHRhYmxlIGZvciBjZXJ0YWluIEpQRUcgYmxvY2tzLCBhbmQgd2UgZG9uJ3Qga25vdyBob3cKKwkgICB0byBkZWNvbXByZXNzIHRoZXNlIGJsb2Nrcy4gU28gd2UgY2FwIHRoZSBmcmFtZXJhdGUgYXQgMTUgZnBzICovCisJaWYgKGNsb2NrZGl2IDwgNikKKwkJY2xvY2tkaXYgPSA2OworCWVsc2UgaWYgKGNsb2NrZGl2ID4gNjMpCisJCWNsb2NrZGl2ID0gNjM7CisKKwkvKiByZWcyIE1VU1QgYmUgYSBtdWx0aXBsZSBvZiAzLCBleGNlcHQgd2hlbiBiZXR3ZWVuIDYgYW5kIDEyPworCSAgIEFsd2F5cyByb3VuZCB1cCwgb3RoZXJ3aXNlIHdlIGNhbm5vdCBnZXQgdGhlIGRlc2lyZWQgZnJhbWV0aW1lCisJICAgdXNpbmcgdGhlIHBhcnRpYWwgZnJhbWUgdGltZSBleHBvc3VyZSBjb250cm9sICovCisJaWYgKGNsb2NrZGl2IDwgNiB8fCBjbG9ja2RpdiA+IDEyKQorCQljbG9ja2RpdiA9ICgoY2xvY2tkaXYgKyAyKSAvIDMpICogMzsKKworCS8qIGZyYW1lIGV4cG9zdXJlIHRpbWUgaW4gbXMgPSAxMDAwICogY2xvY2tkaXYgLyA5MCAgICAtPgorCWV4cG9zdXJlID0gKHNkLT5leHBvc3VyZSAvIDIpICogNDQ4IC8gKDEwMDAgKiBjbG9ja2RpdiAvIDkwKSAqLworCWV4cG9zdXJlID0gKHNkLT5leHBvc3VyZSAqIDQ1ICogNDQ4KSAvICgxMDAwICogY2xvY2tkaXYpOworCS8qIDAgPSB1c2UgZnVsbCBmcmFtZXRpbWUsIDQ0OCA9IG5vIGV4cG9zdXJlLCByZXZlcnNlIGl0ICovCisJZXhwb3N1cmUgPSA0NDggLSBleHBvc3VyZTsKKworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkJLyogcGFnZSAzICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCBjbG9ja2Rpdik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBlLCBleHBvc3VyZSAmIDB4ZmYpOworCXJlZ193KGdzcGNhX2RldiwgMHgwZiwgZXhwb3N1cmUgPj4gOCk7CiAKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0aHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAJdTggZGF0YSwgaGZsaXAsIHZmbGlwOwogCiAJaGZsaXAgPSBzZC0+aGZsaXA7CkBAIC03MjEsNDggKzY5MSwzNyBAQAogCWlmIChzZC0+ZmxhZ3MgJiBGTF9WRkxJUCkKIAkJdmZsaXAgPSAhdmZsaXA7CiAKLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJLyogcGFnZSAzICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KIAlkYXRhID0gKGhmbGlwID8gMHgwOCA6IDB4MDApIHwgKHZmbGlwID8gMHgwNCA6IDB4MDApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDIxLCBkYXRhKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCiAJLyogbG9hZCByZWdpc3RlcnMgdG8gc2Vuc29yIChCaXQgMCwgYXV0byBjbGVhcikgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgZm9yIHBhYzczMDIgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JcmV0dXJuIHJlZ193X3NlcShnc3BjYV9kZXYsIGluaXRfNzMwMiwgc2l6ZW9mKGluaXRfNzMwMikvMik7CisJcmVnX3dfc2VxKGdzcGNhX2RldiwgaW5pdF83MzAyLCBzaXplb2YoaW5pdF83MzAyKS8yKTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+c29mX3JlYWQgPSAwOwogCi0JcmV0ID0gcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMwMiwKLQkJcGFnZTNfNzMwMiwgc2l6ZW9mKHBhZ2UzXzczMDIpLAotCQlOVUxMLCAwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGJyaWdodGNvbnQoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGNvbG9ycyhnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0d2hpdGViYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRyZWRiYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0Z2Fpbihnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGh2ZmxpcChnc3BjYV9kZXYpOworCXJlZ193X3Zhcihnc3BjYV9kZXYsIHN0YXJ0XzczMDIsCisJCXBhZ2UzXzczMDIsIHNpemVvZihwYWdlM183MzAyKSk7CisJc2V0YnJpZ2h0Y29udChnc3BjYV9kZXYpOworCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCXNldHdoaXRlYmFsYW5jZShnc3BjYV9kZXYpOworCXNldHJlZGJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOworCXNldGdhaW4oZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGh2ZmxpcChnc3BjYV9kZXYpOwogCiAJLyogb25seSByZXNvbHV0aW9uIDY0MHg0ODAgaXMgc3VwcG9ydGVkIGZvciBwYWM3MzAyICovCiAKQEAgLTc3MSwzNCArNzMwLDI3IEBACiAJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sIC0xKTsKIAogCS8qIHN0YXJ0IHN0cmVhbSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDEpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JaW50IHJldDsKIAogCS8qIHN0b3Agc3RyZWFtICovCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDApOwogfQogCiAvKiBjYWxsZWQgb24gc3RyZWFtb2ZmIHdpdGggYWx0IDAgYW5kIG9uIGRpc2Nvbm5lY3QgZm9yIHBhYzczMDIgKi8KIHN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgcmV0OwotCiAJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldHVybjsKLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0MCk7CiB9CiAKIC8qIEluY2x1ZGUgcGFjIGNvbW1vbiBzb2YgZGV0ZWN0aW9uIGZ1bmN0aW9ucyAqLwpAQCAtODA4LDIyICs3NjAsMTMgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGF2Z19sdW0gPSBhdG9taWNfcmVhZCgmc2QtPmF2Z19sdW0pOwotCWludCBkZXNpcmVkX2x1bSwgZGVhZHpvbmU7CisJaW50IGRlc2lyZWRfbHVtOworCWNvbnN0IGludCBkZWFkem9uZSA9IDMwOwogCiAJaWYgKGF2Z19sdW0gPT0gLTEpCiAJCXJldHVybjsKIAotCWRlc2lyZWRfbHVtID0gMjcwICsgc2QtPmJyaWdodG5lc3MgKiA0OwotCS8qIEhhY2sgaGFjaywgd2l0aCB0aGUgNzIwMiB0aGUgZmlyc3QgZXhwb3N1cmUgc3RlcCBpcwotCSAgIHByZXR0eSBsYXJnZSwgc28gaWYgd2UncmUgYWJvdXQgdG8gbWFrZSB0aGUgZmlyc3QKLQkgICBleHBvc3VyZSBpbmNyZWFzZSBtYWtlIHRoZSBkZWFkem9uZSBsYXJnZSB0byBhdm9pZAotCSAgIG9zY2lsYXRpbmcgKi8KLQlpZiAoZGVzaXJlZF9sdW0gPiBhdmdfbHVtICYmIHNkLT5nYWluID09IEdBSU5fREVGICYmCi0JCQlzZC0+ZXhwb3N1cmUgPiBFWFBPU1VSRV9ERUYgJiYKLQkJCXNkLT5leHBvc3VyZSA8IDQyKQotCQlkZWFkem9uZSA9IDkwOwotCWVsc2UKLQkJZGVhZHpvbmUgPSAzMDsKKwlkZXNpcmVkX2x1bSA9IDI3MCArIHNkLT5icmlnaHRuZXNzOwogCiAJaWYgKHNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID4gMCkKIAkJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMtLTsKQEAgLTk0Nyw3ICs4OTAsNyBAQAogCXNkLT5icmlnaHRuZXNzID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0YnJpZ2h0Y29udChnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC05NjYsNyArOTA5LDcgQEAKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKIAkJc2V0YnJpZ2h0Y29udChnc3BjYV9kZXYpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTk4NCw3ICs5MjcsNyBAQAogCXNkLT5jb2xvcnMgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC05OTgsMTQgKzk0MSwxMSBAQAogc3RhdGljIGludCBzZF9zZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQgPSAwOwogCiAJc2QtPndoaXRlX2JhbGFuY2UgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXQgPSBzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IDA7Ci0JcmV0dXJuIHJldDsKKwkJc2V0d2hpdGViYWxhbmNlKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTAxOSwxNCArOTU5LDExIEBACiBzdGF0aWMgaW50IHNkX3NldHJlZGJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQgPSAwOwogCiAJc2QtPnJlZF9iYWxhbmNlID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJcmV0ID0gc2V0cmVkYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OworCQlzZXRyZWRiYWxhbmNlKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRyZWRiYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTEwNDAsMTQgKzk3NywxMSBAQAogc3RhdGljIGludCBzZF9zZXRibHVlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+Ymx1ZV9iYWxhbmNlID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJcmV0ID0gc2V0Ymx1ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IDA7Ci0JcmV0dXJuIHJldDsKKwkJc2V0Ymx1ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGJsdWViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTEwNjUsNyArOTk5LDcgQEAKIAlzZC0+Z2FpbiA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGdhaW4oZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTA4Myw3ICsxMDE3LDcgQEAKIAlzZC0+ZXhwb3N1cmUgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRleHBvc3VyZShnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTExNCw3ICsxMDQ4LDcgQEAKIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTEzMiw3ICsxMDY2LDcgQEAKIAlzZC0+aGZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTExNTAsNyArMTA4NCw3IEBACiAJc2QtPnZmbGlwID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMTY1LDcgKzEwOTksNiBAQAogc3RhdGljIGludCBzZF9kYmdfc19yZWdpc3RlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKIHsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKIAlfX3U4IGluZGV4OwogCV9fdTggdmFsdWU7CiAKQEAgLTExODUsMTQgKzExMTgsMTIgQEAKIAkJLyogTm90ZSB0aGF0IHRoZXJlIHNoYWxsIGJlIG5vIGFjY2VzcyB0byBvdGhlciBwYWdlCiAJCSAgIGJ5IGFueSBvdGhlciBmdW5jdGlvbiBiZXR3ZWVuIHRoZSBwYWdlIHN3aXRoIGFuZAogCQkgICB0aGUgYWN0dWFsIHJlZ2lzdGVyIHdyaXRlICovCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CS8qIHBhZ2UgMCAqLwotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIGluZGV4LCB2YWx1ZSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkvKiBwYWdlIDAgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCBpbmRleCwgdmFsdWUpOwogCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CiAJfQotCXJldHVybiByZXQ7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9jaGlwX2lkZW50KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTEyMTAsOCArMTE0MSwzOSBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJycHV0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1OCBkYXRhMCwgZGF0YTE7CisKKwlpZiAobGVuID09IDIpIHsKKwkJZGF0YTAgPSBkYXRhWzBdOworCQlkYXRhMSA9IGRhdGFbMV07CisJCWlmICgoZGF0YTAgPT0gMHgwMCAmJiBkYXRhMSA9PSAweDExKSB8fAorCQkgICAgKGRhdGEwID09IDB4MjIgJiYgZGF0YTEgPT0gMHgzMykgfHwKKwkJICAgIChkYXRhMCA9PSAweDQ0ICYmIGRhdGExID09IDB4NTUpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg2NiAmJiBkYXRhMSA9PSAweDc3KSB8fAorCQkgICAgKGRhdGEwID09IDB4ODggJiYgZGF0YTEgPT0gMHg5OSkgfHwKKwkJICAgIChkYXRhMCA9PSAweGFhICYmIGRhdGExID09IDB4YmIpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhjYyAmJiBkYXRhMSA9PSAweGRkKSB8fAorCQkgICAgKGRhdGEwID09IDB4ZWUgJiYgZGF0YTEgPT0gMHhmZikpIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDEpOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiBmb3IgcGFjNzMwMiAqLwotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyA9IHNkX2N0cmxzLAogCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKQEAgLTEyMjYsNiArMTE4OCw5IEBACiAJLnNldF9yZWdpc3RlciA9IHNkX2RiZ19zX3JlZ2lzdGVyLAogCS5nZXRfY2hpcF9pZGVudCA9IHNkX2NoaXBfaWRlbnQsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkuaW50X3BrdF9zY2FuID0gc2RfaW50X3BrdF9zY2FuLAorI2VuZGlmCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKaW5kZXggNDJjZmNkZi4uNDRmZWQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKQEAgLTUxLDYgKzUxLDcgQEAKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAicGFjNzMxMSIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAogTU9EVUxFX0FVVEhPUigiVGhvbWFzIEthaXNlciB0aG9tYXNAa2Fpc2VyLWxpbnV4LmxpIik7CkBAIC04OCw3ICs4OSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIC8qIFRoaXMgY29udHJvbCBpcyBmb3IgYm90aCB0aGUgNzMwMiBhbmQgdGhlIDczMTEgKi8KIAl7CiAJICAgIHsKQEAgLTIwMCw3ICsyMDEsNiBAQAogCQkucHJpdiA9IDB9LAogfTsKIAotI2RlZmluZSBMT0FEX1BBR0UzCQkyNTUKICNkZWZpbmUgTE9BRF9QQUdFNAkJMjU0CiAjZGVmaW5lIEVORF9PRl9TRVFVRU5DRQkJMAogCkBAIC0yNTksMTIgKzI1OSwxNCBAQAogCTB4MjMsIDB4MjgsIDB4MDQsIDB4MTEsIDB4MDAsIDB4MDAKIH07CiAKLXN0YXRpYyBpbnQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X2J1ZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgX191OCBpbmRleCwKIAkJICBjb25zdCBjaGFyICpidWZmZXIsIGludCBsZW4pCiB7CiAJaW50IHJldDsKIAorCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CiAJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgYnVmZmVyLCBsZW4pOwogCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCkBAIC0yNzMsMjAgKzI3NSwyMyBAQAogCQkJMCwJCS8qIHZhbHVlICovCiAJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193X2J1ZigpOiAiCiAJCSJGYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXJzIHRvIGluZGV4IDB4JXgsIGVycm9yICVpIiwKIAkJaW5kZXgsIHJldCk7Ci0JcmV0dXJuIHJldDsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KIH0KIAogCi1zdGF0aWMgaW50IHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIF9fdTggdmFsdWUpCiB7CiAJaW50IHJldDsKIAorCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gdmFsdWU7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTI5NCwzMiArMjk5LDMyIEBACiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkwLCBpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLAogCQkJNTAwKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgewogCQlQREVCVUcoRF9FUlIsICJyZWdfdygpOiAiCiAJCSJGYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgdG8gaW5kZXggMHgleCwgdmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgdmFsdWUsIHJldCk7Ci0JcmV0dXJuIHJldDsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KIH0KIAotc3RhdGljIGludCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfc2VxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJY29uc3QgX191OCAqc2VxLCBpbnQgbGVuKQogewotCWludCByZXQgPSAwOwogCXdoaWxlICgtLWxlbiA+PSAwKSB7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOworCQlyZWdfdyhnc3BjYV9kZXYsIHNlcVswXSwgc2VxWzFdKTsKIAkJc2VxICs9IDI7CiAJfQotCXJldHVybiByZXQ7CiB9CiAKIC8qIGxvYWQgdGhlIGJlZ2lubmluZyBvZiBhIHBhZ2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfcGFnZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCWNvbnN0IF9fdTggKnBhZ2UsIGludCBsZW4pCiB7CiAJaW50IGluZGV4OwogCWludCByZXQgPSAwOwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW47IGluZGV4KyspIHsKIAkJaWYgKHBhZ2VbaW5kZXhdID09IFNLSVApCQkvKiBza2lwIHRoaXMgaW5kZXggKi8KIAkJCWNvbnRpbnVlOwpAQCAtMzM1LDU2ICszNDAsNDcgQEAKIAkJCSJGYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgdG8gaW5kZXggMHgleCwgIgogCQkJInZhbHVlIDB4JXgsIGVycm9yICVpIiwKIAkJCWluZGV4LCBwYWdlW2luZGV4XSwgcmV0KTsKKwkJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJldHVybiByZXQ7CiB9CiAKIC8qIG91dHB1dCBhIHZhcmlhYmxlIHNlcXVlbmNlICovCi1zdGF0aWMgaW50IHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd192YXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqc2VxLAotCQkJY29uc3QgX191OCAqcGFnZTMsIHVuc2lnbmVkIGludCBwYWdlM19sZW4sCiAJCQljb25zdCBfX3U4ICpwYWdlNCwgdW5zaWduZWQgaW50IHBhZ2U0X2xlbikKIHsKIAlpbnQgaW5kZXgsIGxlbjsKLQlpbnQgcmV0ID0gMDsKIAogCWZvciAoOzspIHsKIAkJaW5kZXggPSAqc2VxKys7CiAJCWxlbiA9ICpzZXErKzsKIAkJc3dpdGNoIChsZW4pIHsKIAkJY2FzZSBFTkRfT0ZfU0VRVUVOQ0U6Ci0JCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuOwogCQljYXNlIExPQURfUEFHRTQ6Ci0JCQlyZXQgPSByZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTQsIHBhZ2U0X2xlbik7Ci0JCQlicmVhazsKLQkJY2FzZSBMT0FEX1BBR0UzOgotCQkJcmV0ID0gcmVnX3dfcGFnZShnc3BjYV9kZXYsIHBhZ2UzLCBwYWdlM19sZW4pOworCQkJcmVnX3dfcGFnZShnc3BjYV9kZXYsIHBhZ2U0LCBwYWdlNF9sZW4pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpZiAobGVuID4gVVNCX0JVRl9TWikgewogCQkJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwKIAkJCQkJIkluY29ycmVjdCB2YXJpYWJsZSBzZXF1ZW5jZSIpOwotCQkJCXJldHVybiAtRUlOVkFMOworCQkJCXJldHVybjsKIAkJCX0KIAkJCXdoaWxlIChsZW4gPiAwKSB7CiAJCQkJaWYgKGxlbiA8IDgpIHsKLQkJCQkJcmV0ID0gcmVnX3dfYnVmKGdzcGNhX2RldiwKKwkJCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwKIAkJCQkJCWluZGV4LCBzZXEsIGxlbik7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKIAkJCQkJc2VxICs9IGxlbjsKIAkJCQkJYnJlYWs7CiAJCQkJfQotCQkJCXJldCA9IHJlZ193X2J1Zihnc3BjYV9kZXYsIGluZGV4LCBzZXEsIDgpOworCQkJCXJlZ193X2J1Zihnc3BjYV9kZXYsIGluZGV4LCBzZXEsIDgpOwogCQkJCXNlcSArPSA4OwogCQkJCWluZGV4ICs9IDg7CiAJCQkJbGVuIC09IDg7CiAJCQl9CiAJCX0KLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwogCX0KIAkvKiBub3QgcmVhY2hlZCAqLwogfQpAQCAtNDEyLDQ2ICs0MDgsMzYgQEAKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHBhYzczMTEgb25seSAqLwotc3RhdGljIGludCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAKLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDEwLCBzZC0+Y29udHJhc3QgPj4gNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTAsIHNkLT5jb250cmFzdCA+PiA0KTsKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGdhaW4gPSBHQUlOX01BWCAtIHNkLT5nYWluOwotCWludCByZXQ7CiAKIAlpZiAoZ2FpbiA8IDEpCiAJCWdhaW4gPSAxOwogCWVsc2UgaWYgKGdhaW4gPiAyNDUpCiAJCWdhaW4gPSAyNDU7Ci0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsJCS8qIHBhZ2UgNCAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBlLCAweDAwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwZiwgZ2Fpbik7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsJCQkvKiBwYWdlIDQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MGUsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwZiwgZ2Fpbik7CiAKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCV9fdTggcmVnOwogCiAJLyogcmVnaXN0ZXIgMiBvZiBmcmFtZSAzLzQgY29udGFpbnMgdGhlIGNsb2NrIGRpdmlkZXIgY29uZmlndXJpbmcgdGhlCkBAIC00NjMsOTQgKzQ0OSw3MiBAQAogCWVsc2UgaWYgKHJlZyA+IDYzKQogCQlyZWcgPSA2MzsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CQkvKiBwYWdlIDQgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwMiwgcmVnKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJCS8qIHBhZ2UgNCAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgcmVnKTsKKwogCS8qIFBhZ2UgMSByZWdpc3RlciA4IG11c3QgYWx3YXlzIGJlIDB4MDggZXhjZXB0IHdoZW4gbm90IGluCiAJICAgNjQweDQ4MCBtb2RlIGFuZCBQYWdlMy80IHJlZyAyIDw9IDMgdGhlbiBpdCBtdXN0IGJlIDkgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKIAlpZiAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludClnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdiAmJgogCQkJcmVnIDw9IDMpIHsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDA4LCAweDA5KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDA4LCAweDA5KTsKIAl9IGVsc2UgewotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDgpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDgpOwogCX0KIAogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0aHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAlfX3U4IGRhdGE7CiAKLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJLyogcGFnZSA0ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsJCQkvKiBwYWdlIDQgKi8KIAlkYXRhID0gKHNkLT5oZmxpcCA/IDB4MDQgOiAweDAwKSB8IChzZC0+dmZsaXAgPyAweDA4IDogMHgwMCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSBmb3IgcGFjNzMxMSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZXR1cm4gcmVnX3dfc2VxKGdzcGNhX2RldiwgaW5pdF83MzExLCBzaXplb2YoaW5pdF83MzExKS8yKTsKKwlyZWdfd19zZXEoZ3NwY2FfZGV2LCBpbml0XzczMTEsIHNpemVvZihpbml0XzczMTEpLzIpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCiAJc2QtPnNvZl9yZWFkID0gMDsKIAotCXJldCA9IHJlZ193X3Zhcihnc3BjYV9kZXYsIHN0YXJ0XzczMTEsCi0JCU5VTEwsIDAsCisJcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMxMSwKIAkJcGFnZTRfNzMxMSwgc2l6ZW9mKHBhZ2U0XzczMTEpKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGNvbnRyYXN0KGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRnYWluKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRleHBvc3VyZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0aHZmbGlwKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlzZXRnYWluKGdzcGNhX2Rldik7CisJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKIAogCS8qIHNldCBjb3JyZWN0IHJlc29sdXRpb24gKi8KIAlzd2l0Y2ggKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KSB7CiAJY2FzZSAyOgkJCQkJLyogMTYweDEyMCBwYWM3MzExICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgyMCk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgyMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMCk7CiAJCWJyZWFrOwogCWNhc2UgMToJCQkJCS8qIDMyMHgyNDAgcGFjNzMxMSAqLwotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTcsIDB4MzApOwotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ODcsIDB4MTEpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MTcsIDB4MzApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODcsIDB4MTEpOwogCQlicmVhazsKIAljYXNlIDA6CQkJCQkvKiA2NDB4NDgwICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgwMCk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMik7CisJCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgwMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMik7CiAJCWJyZWFrOwogCX0KIApAQCAtNTU5LDM3ICs1MjMsMjQgQEAKIAlhdG9taWNfc2V0KCZzZC0+YXZnX2x1bSwgLTEpOwogCiAJLyogc3RhcnQgc3RyZWFtICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDA1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwNSk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyNywgMHg4MCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjgsIDB4Y2EpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDI5LCAweDUzKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyYSwgMHgwZSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDNlLCAweDIwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgyNywgMHg4MCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDI4LCAweGNhKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjksIDB4NTMpOworCXJlZ193KGdzcGNhX2RldiwgMHgyYSwgMHgwZSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4M2UsIDB4MjApOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLwogfQogCiAvKiBjYWxsZWQgb24gc3RyZWFtb2ZmIHdpdGggYWx0IDAgYW5kIG9uIGRpc2Nvbm5lY3QgZm9yIDczMTEgKi8KQEAgLTczNCw3ICs2ODUsNyBAQAogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewogCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTc1Miw3ICs3MDMsNyBAQAogCXNkLT5nYWluID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0Z2Fpbihnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC03NzAsNyArNzIxLDcgQEAKIAlzZC0+ZXhwb3N1cmUgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRleHBvc3VyZShnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtODAxLDcgKzc1Miw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTgxOSw3ICs3NzAsNyBAQAogCXNkLT5oZmxpcCA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGh2ZmxpcChnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtODM3LDcgKzc4OCw3IEBACiAJc2QtPnZmbGlwID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC04NDgsOCArNzk5LDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1OCBkYXRhMCwgZGF0YTE7CisKKwlpZiAobGVuID09IDIpIHsKKwkJZGF0YTAgPSBkYXRhWzBdOworCQlkYXRhMSA9IGRhdGFbMV07CisJCWlmICgoZGF0YTAgPT0gMHgwMCAmJiBkYXRhMSA9PSAweDExKSB8fAorCQkgICAgKGRhdGEwID09IDB4MjIgJiYgZGF0YTEgPT0gMHgzMykgfHwKKwkJICAgIChkYXRhMCA9PSAweDQ0ICYmIGRhdGExID09IDB4NTUpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg2NiAmJiBkYXRhMSA9PSAweDc3KSB8fAorCQkgICAgKGRhdGEwID09IDB4ODggJiYgZGF0YTEgPT0gMHg5OSkgfHwKKwkJICAgIChkYXRhMCA9PSAweGFhICYmIGRhdGExID09IDB4YmIpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhjYyAmJiBkYXRhMSA9PSAweGRkKSB8fAorCQkgICAgKGRhdGEwID09IDB4ZWUgJiYgZGF0YTEgPT0gMHhmZikpIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDEpOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiBmb3IgcGFjNzMxMSAqLwotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyA9IHNkX2N0cmxzLAogCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKQEAgLTg2MCw2ICs4NDIsOSBAQAogCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAogCS5kcV9jYWxsYmFjayA9IGRvX2F1dG9nYWluLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWNfY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhY19jb21tb24uaAppbmRleCAyMGY2N2Q5Li44NDYyYTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhY19jb21tb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhY19jb21tb24uaApAQCAtMjQsMTEgKzI0LDEwIEBACiAgKi8KIAogLyogV2UgY2FsY3VsYXRlIHRoZSBhdXRvZ2FpbiBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciBvZiBhIGZyYW1lLCBhdCB0aGlzCi0gICBtb21lbnQgYSBmcmFtZSB3aXRoIHRoZSBvbGQgc2V0dGluZ3MgaXMgYmVpbmcgdHJhbnNtaXR0ZWQsIGFuZCBhIGZyYW1lIGlzCi0gICBiZWluZyBjYXB0dXJlZCB3aXRoIHRoZSBvbGQgc2V0dGluZ3MuIFNvIGlmIHdlIGFkanVzdCB0aGUgYXV0b2dhaW4gd2UgbXVzdAotICAgaWdub3JlIGF0bGVhc3QgdGhlIDIgbmV4dCBmcmFtZXMgZm9yIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdAotICAgYmVmb3JlIGRvaW5nIGFueSBvdGhlciBhZGp1c3RtZW50cyAqLwotI2RlZmluZSBQQUNfQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUwkzCisgICBtb21lbnQgYSBmcmFtZSB3aXRoIHRoZSBvbGQgc2V0dGluZ3MgaXMgYmVpbmcgY2FwdHVyZWQgYW5kIHRyYW5zbWl0dGVkLiBTbworICAgaWYgd2UgYWRqdXN0IHRoZSBnYWluIG9yIGV4cG9zdXJlIHdlIG11c3QgaWdub3JlIGF0bGVhc3QgdGhlIG5leHQgZnJhbWUgZm9yCisgICB0aGUgbmV3IHNldHRpbmdzIHRvIGNvbWUgaW50byBlZmZlY3QgYmVmb3JlIGRvaW5nIGFueSBvdGhlciBhZGp1c3RtZW50cy4gKi8KKyNkZWZpbmUgUEFDX0FVVE9HQUlOX0lHTk9SRV9GUkFNRVMJMgogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYWNfc29mX21hcmtlcls1XSA9CiAJCXsgMHhmZiwgMHhmZiwgMHgwMCwgMHhmZiwgMHg5NiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjAyOC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjAyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTVmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMKQEAgLTAsMCArMSw3NTcgQEAKKy8qCisgKiBTTjlDMjAyOCBsaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZW9kb3JlIEtpbGdvcmUgPGtpbGdvdGFAYXVidXJuLmVkdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgInNuOWMyMDI4IgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworTU9EVUxFX0FVVEhPUigiVGhlb2RvcmUgS2lsZ29yZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb25peCBTTjlDMjAyOCBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsgIC8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKwl1OCBzb2ZfcmVhZDsKKwl1MTYgbW9kZWw7Cit9OworCitzdHJ1Y3QgaW5pdF9jb21tYW5kIHsKKwl1bnNpZ25lZCBjaGFyIGluc3RydWN0aW9uWzZdOworCXVuc2lnbmVkIGNoYXIgdG9fcmVhZDsgLyogbGVuZ3RoIHRvIHJlYWQuIDAgbWVhbnMgbm8gcmVwbHkgcmVxdWVzdGVkICovCit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK307CisKKy8qIEhvdyB0byBjaGFuZ2UgdGhlIHJlc29sdXRpb24gb2YgYW55IG9mIHRoZSBWR0EgY2FtcyBpcyB1bmtub3duICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZVtdID0geworCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX1NOOUMyMDI4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gNCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKK307CisKKy8qIE5vIHdheSB0byBjaGFuZ2UgdGhlIHJlc29sdXRpb24gb2YgdGhlIENJRiBjYW1zIGlzIGtub3duICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBjaWZfbW9kZVtdID0geworCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX1NOOUMyMDI4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODggKiAzIC8gNCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKK307CisKKy8qIHRoZSBieXRlcyB0byB3cml0ZSBhcmUgaW4gZ3NwY2FfZGV2LT51c2JfYnVmICovCitzdGF0aWMgaW50IHNuOWMyMDI4X2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCAqY29tbWFuZCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoRF9VU0JPLCAic2VuZGluZyBjb21tYW5kICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIsIGNvbW1hbmRbMF0sCisJICAgICAgIGNvbW1hbmRbMV0sIGNvbW1hbmRbMl0sIGNvbW1hbmRbM10sIGNvbW1hbmRbNF0sIGNvbW1hbmRbNV0pOworCisJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgY29tbWFuZCwgNik7CisJcmMgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTiwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTIsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgNiwgNTAwKTsKKwlpZiAocmMgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgImNvbW1hbmQgd3JpdGUgWyUwMnhdIGVycm9yICVkIiwKKwkJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuOWMyMDI4X3JlYWQxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9TVEFUVVMsCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTEsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgNTAwKTsKKwlpZiAocmMgIT0gMSkgeworCQlQREVCVUcoRF9FUlIsICJyZWFkMSBlcnJvciAlZCIsIHJjKTsKKwkJcmV0dXJuIChyYyA8IDApID8gcmMgOiAtRUlPOworCX0KKwlQREVCVUcoRF9VU0JJLCAicmVhZDEgcmVzcG9uc2UgJTAyeCIsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKK30KKworc3RhdGljIGludCBzbjljMjAyOF9yZWFkNChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpyZWFkaW5nKQoreworCWludCByYzsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9TVEFUVVMsCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTQsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgNCwgNTAwKTsKKwlpZiAocmMgIT0gNCkgeworCQlQREVCVUcoRF9FUlIsICJyZWFkNCBlcnJvciAlZCIsIHJjKTsKKwkJcmV0dXJuIChyYyA8IDApID8gcmMgOiAtRUlPOworCX0KKwltZW1jcHkocmVhZGluZywgZ3NwY2FfZGV2LT51c2JfYnVmLCA0KTsKKwlQREVCVUcoRF9VU0JJLCAicmVhZDQgcmVzcG9uc2UgJTAyeCUwMnglMDJ4JTAyeCIsIHJlYWRpbmdbMF0sCisJICAgICAgIHJlYWRpbmdbMV0sIHJlYWRpbmdbMl0sIHJlYWRpbmdbM10pOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzbjljMjAyOF9sb25nX2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCAqY29tbWFuZCkKK3sKKwlpbnQgaSwgc3RhdHVzOworCV9fdTggcmVhZGluZ1s0XTsKKworCXN0YXR1cyA9IHNuOWMyMDI4X2NvbW1hbmQoZ3NwY2FfZGV2LCBjb21tYW5kKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXN0YXR1cyA9IC0xOworCWZvciAoaSA9IDA7IGkgPCAyNTYgJiYgc3RhdHVzIDwgMjsgaSsrKQorCQlzdGF0dXMgPSBzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCWlmIChzdGF0dXMgIT0gMikgeworCQlQREVCVUcoRF9FUlIsICJsb25nIGNvbW1hbmQgc3RhdHVzIHJlYWQgZXJyb3IgJWQiLCBzdGF0dXMpOworCQlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogLUVJTzsKKwl9CisKKwltZW1zZXQocmVhZGluZywgMCwgNCk7CisJc3RhdHVzID0gc245YzIwMjhfcmVhZDQoZ3NwY2FfZGV2LCByZWFkaW5nKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIGluIGdlbmVyYWwsIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXNwb25zZSBpcyB0aGUgZmlyc3QgYnl0ZSBvZgorCSAqIHRoZSBjb21tYW5kLCBvcidlZCB3aXRoIDggKi8KKwlzdGF0dXMgPSBzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc245YzIwMjhfc2hvcnRfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCWludCBlcnJfY29kZTsKKworCWVycl9jb2RlID0gc245YzIwMjhfY29tbWFuZChnc3BjYV9kZXYsIGNvbW1hbmQpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWVycl9jb2RlID0gc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCisJUERFQlVHKERfUFJPQkUsICJTTjlDMjAyOCBjYW1lcmEgZGV0ZWN0ZWQgKHZpZC9waWQgMHglMDRYOjB4JTA0WCkiLAorCSAgICAgICBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCisJc2QtPm1vZGVsID0gaWQtPmlkUHJvZHVjdDsKKworCXN3aXRjaCAoc2QtPm1vZGVsKSB7CisJY2FzZSAweDcwMDU6CisJCVBERUJVRyhEX1BST0JFLCAiR2VuaXVzIFNtYXJ0IDMwMCBjYW1lcmEiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDA6CisJCVBERUJVRyhEX1BST0JFLCAiREMzMVZDIik7CisJCWJyZWFrOworCWNhc2UgMHg4MDAxOgorCQlQREVCVUcoRF9QUk9CRSwgIlNweSBjYW1lcmEiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDM6CisJCVBERUJVRyhEX1BST0JFLCAiQ0lGIGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwODoKKwkJUERFQlVHKERfUFJPQkUsICJNaW5pLVNob3R6IG1zLTM1MCBjYW1lcmEiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMGE6CisJCVBERUJVRyhEX1BST0JFLCAiVml2aXRhciAzMzUwYiB0eXBlIGNhbWVyYSIpOworCQljYW0tPmlucHV0X2ZsYWdzID0gVjRMMl9JTl9TVF9WRkxJUCB8IFY0TDJfSU5fU1RfSEZMSVA7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoc2QtPm1vZGVsKSB7CisJY2FzZSAweDgwMDA6CisJY2FzZSAweDgwMDE6CisJY2FzZSAweDgwMDM6CisJCWNhbS0+Y2FtX21vZGUgPSBjaWZfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKGNpZl9tb2RlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBzdGF0dXMgPSAtMTsKKworCXNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlzdGF0dXMgPSBzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCisJcmV0dXJuIChzdGF0dXMgPCAwKSA/IHN0YXR1cyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3N0YXJ0X2NvbW1hbmRzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgICAgIHN0cnVjdCBpbml0X2NvbW1hbmQgKmNhbV9jb21tYW5kcywgaW50IG4pCit7CisJaW50IGksIGVycl9jb2RlID0gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN3aXRjaCAoY2FtX2NvbW1hbmRzW2ldLnRvX3JlYWQpIHsKKwkJY2FzZSA0OgorCQkJZXJyX2NvZGUgPSBzbjljMjAyOF9sb25nX2NvbW1hbmQoZ3NwY2FfZGV2LAorCQkJCQljYW1fY29tbWFuZHNbaV0uaW5zdHJ1Y3Rpb24pOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWVycl9jb2RlID0gc245YzIwMjhfc2hvcnRfY29tbWFuZChnc3BjYV9kZXYsCisJCQkJCWNhbV9jb21tYW5kc1tpXS5pbnN0cnVjdGlvbik7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJZXJyX2NvZGUgPSBzbjljMjAyOF9jb21tYW5kKGdzcGNhX2RldiwKKwkJCQkJY2FtX2NvbW1hbmRzW2ldLmluc3RydWN0aW9uKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChlcnJfY29kZSA8IDApCisJCQlyZXR1cm4gZXJyX2NvZGU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YXJ0X3NweV9jYW0oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBpbml0X2NvbW1hbmQgc3B5X3N0YXJ0X2NvbW1hbmRzW10gPSB7CisJCXt7MHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMiwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjMsIDB4MDEsIDB4MDMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNSwgMHgwMSwgMHgxNiwgMHgwMCwgMHgwMH0sIDR9LCAvKiB3aWR0aCAgMzUyICovCisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LCAvKiBoZWlnaHQgMjg4ICovCisJCS8qIHt7MHgxMywgMHgyNywgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MTMsIDB4MjcsIDB4MDEsIDB4NjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDA5LCAweDAwLCAweDAwfSwgNH0sIC8qIHJlZCBnYWluID8qLworCQkvKiB7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwgKi8KKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIHt7MHgxMywgMHgyOSwgMHgwMSwgMHgwYywgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MTMsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJiLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIHt7MHgxMywgMHgyYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIHt7MHgxMywgMHgyZSwgMHgwMSwgMHgwOSwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDA3LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDMsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwgLypkb24ndCBtZXNzIHdpdGgqLworCQkvKnt7MHgxMSwgMHgwNCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwgLyogYnJpZ2h0ZXIgKi8KKwkJLyp7ezB4MTEsIDB4MDUsIDB4NjUsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwgb2JzZXJ2ZWQgKi8KKwkJe3sweDExLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sIC8qIGJyaWdodGVyICovCisJCXt7MHgxMSwgMHgwNiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKiBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyp7ezB4MTEsIDB4MDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwgb2JzZXJ2ZWQgKi8KKwkJe3sweDExLCAweDA4LCAweDBiLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBiLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBlLCAweDA0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIHt7MHgxMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQkvKiBicmlnaHRuZXNzIG9yIGdhaW4uIDAgaXMgZGVmYXVsdC4gNCBpcyBnb29kCisJCSAqIGluZG9vcnMgYXQgbmlnaHQgd2l0aCBpbmNhbmRlc2NlbnQgbGlnaHRpbmcgKi8KKwkJe3sweDExLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKmhzdGFydCBvciBob2ZmcyovCisJCXt7MHgxMSwgMHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE0LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKiB7ezB4MWIsIDB4MDIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwgb2JzZXJ2ZWQgKi8KKwkJe3sweDFiLCAweDAyLCAweDExLCAweDAwLCAweDAwLCAweDAwfSwgMX0sIC8qIGJyaWdodGVyICovCisJCS8qIHt7MHgxYiwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LCBvYnNlcnZlZCAqLworCQl7ezB4MWIsIDB4MTMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM0LCAweGExLCAweDAwLCAweDAwLCAweDAwfSwgMX0sIC8qIGNvbXByZXNzZXMgKi8KKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIHNweV9zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUoc3B5X3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfY2lmX2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBjaWZfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIFRoZSBlbnRpcmUgc2VxdWVuY2UgYmVsb3cgc2VlbXMgcmVkdW5kYW50ICovCisJCS8qIHt7MHgxMywgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIyLCAweDAxLCAweDA2LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sIHdpZHRoPworCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MTIsIDB4MDAsIDB4MDB9LCA0fSwgaGVpZ2h0PworCQl7ezB4MTMsIDB4MjcsIDB4MDEsIDB4NjgsIDB4MDAsIDB4MDB9LCA0fSwgc3Vic2FtcGxlPworCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDIwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sKi8KKwkJe3sweDFiLCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwMywgMHg1YSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDQsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMiwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDc3LCAweGEyLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwNiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA4LCAweDBmLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxMywgMHgyNSwgMHgwMSwgMHgxNiwgMHgwMCwgMHgwMH0sIDF9LCAvKiB3aWR0aC84ICovCisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDF9LCAvKiBoZWlnaHQvOCAqLworCQkvKiB7ezB4MTMsIDB4MjcsIDB4MDEsIDB4NjgsIDB4MDAsIDB4MDB9LCA0fSwgc3Vic2FtcGxlPworCQkgKiB7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MWUsIDB4MDAsIDB4MDB9LCA0fSwgZG9lcyBub3RoaW5nCisJCSAqIHt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQkvKiB7ezB4MTMsIDB4MjksIDB4MDEsIDB4MjIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJICogY2F1c2VzIHN1YnNhbXBsaW5nCisJCSAqIGJ1dCBub3QgYSBjaGFuZ2UgaW4gdGhlIHJlc29sdXRpb24gc2V0dGluZyEgKi8KKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDA2LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MWIsIDB4MDQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA1LCAweDAzLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MGUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDEyLCAweDI3LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzYsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEwLCAweDBmLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwMiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM0LCAweGExLCAweDAwLCAweDAwLCAweDAwfSwgMX0sLyogdXNlIGNvbXByZXNzaW9uICovCisJCS8qIENhbWVyYSBzaG91bGQgc3RhcnQgdG8gY2FwdHVyZSBub3cuICovCisJfTsKKworCXJldHVybiBydW5fc3RhcnRfY29tbWFuZHMoZ3NwY2FfZGV2LCBjaWZfc3RhcnRfY29tbWFuZHMsCisJCQkJICBBUlJBWV9TSVpFKGNpZl9zdGFydF9jb21tYW5kcykpOworfQorCitzdGF0aWMgaW50IHN0YXJ0X21zMzUwX2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBtczM1MF9zdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDE2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIyLCAweDAxLCAweDA0LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMywgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjcsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDA5LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJiLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmQsIDB4MDEsIDB4MDMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJlLCAweDAxLCAweDBmLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZiwgMHgwMSwgMHgwYywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTIsIDB4MzQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM0LCAweDAxLCAweGExLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDAxLCAweDcwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDMsIDB4NWQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA0LCAweDA3LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwNSwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA3LCAweDA5LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBkLCAweDBjLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEzLCAweDYzLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNSwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNSwgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LCAvKiB3aWR0aCAgKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sIC8qIGhlaWdodCAqLworCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwgLyogdnN0YXJ0PyAqLworCQl7ezB4MTMsIDB4MjcsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDQwLCAweDAwLCAweDAwfSwgNH0sIC8qIGhzdGFydD8gKi8KKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgwMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwMiwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAwfSwKKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIG1zMzUwX3N0YXJ0X2NvbW1hbmRzLAorCQkJCSAgQVJSQVlfU0laRShtczM1MF9zdGFydF9jb21tYW5kcykpOworfQorCitzdGF0aWMgaW50IHN0YXJ0X2dlbml1c19jYW0oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBpbml0X2NvbW1hbmQgZ2VuaXVzX3N0YXJ0X2NvbW1hbmRzW10gPSB7CisJCXt7MHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNSwgMHgwMSwgMHgxNiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MTIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyogInByZWxpbWluYXJ5IiB3aWR0aCBhbmQgaGVpZ2h0IHNldHRpbmdzICovCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwZSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjcsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDIyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmQsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJlLCAweDAxLCAweDA5LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZiwgMHgwMSwgMHgwNywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIxLCAweDJkLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMSwgMHg2NCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEzLCAweDkxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE2LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIxLCAweDJkLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDI1LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyNiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjcsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDMwLCAweDM4LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgzMSwgMHgyYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MzIsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDMzLCAweDJhLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgzNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4NWIsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sIC8qIHJlYWwgd2lkdGggKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sIC8qIHJlYWwgaGVpZ2h0ICovCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwZSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjcsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDYyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmQsIDB4MDEsIDB4MDMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJlLCAweDAxLCAweDBmLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZiwgMHgwMSwgMHgwYywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIxLCAweDJhLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjMsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEzLCAweDAzLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTUsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE2LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MWMsIDB4MjAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFjLCAweDIwLCAweDAwLCAweDJhLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNCwgMHhhMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDB9CisJCS8qIENhbWVyYSBzaG91bGQgc3RhcnQgdG8gY2FwdHVyZSBub3cuICovCisJfTsKKworCXJldHVybiBydW5fc3RhcnRfY29tbWFuZHMoZ3NwY2FfZGV2LCBnZW5pdXNfc3RhcnRfY29tbWFuZHMsCisJCQkJICBBUlJBWV9TSVpFKGdlbml1c19zdGFydF9jb21tYW5kcykpOworfQorCitzdGF0aWMgaW50IHN0YXJ0X3Zpdml0YXJfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgaW5pdF9jb21tYW5kIHZpdml0YXJfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIyLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMywgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxZSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjcsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDBhLCAweDAwLCAweDAwfSwgNH0sCisJCS8qCisJCSAqIEFib3ZlIGlzIGNoYW5nZWQgZnJvbSBPRU0gMHgwYi4gRml4ZXMgQmF5ZXIgdGlsaW5nLgorCQkgKiBQcmVzdW1hYmx5IGdpdmVzIGEgdmVydGljYWwgc2hpZnQgb2Ygb25lIHJvdy4KKwkJICovCisJCXt7MHgxMywgMHgyOSwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKiBBYm92ZSBzZWVtcyB0byBkbyBob3Jpem9udGFsIHNoaWZ0LiAqLworCQl7ezB4MTMsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJiLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmQsIDB4MDEsIDB4MDMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJlLCAweDAxLCAweDBmLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZiwgMHgwMSwgMHgwYywgMHgwMCwgMHgwMH0sIDR9LAorCQkvKiBBYm92ZSB0aHJlZSBjb21tYW5kcyBzZWVtIHRvIHJlbGF0ZSB0byBicmlnaHRuZXNzLiAqLworCQl7ezB4MTIsIDB4MzQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM0LCAweDAxLCAweGExLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MWIsIDB4MTIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAxLCAweDc3LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwMiwgMHgzYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTIsIDB4NzgsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEzLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTUsIDB4MzQsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDFiLCAweDA0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyMCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjMsIDB4ZWUsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDI2LCAweGEwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyNywgMHg5YSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjgsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDI5LCAweDMwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MmIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDJmLCAweDNkLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgzMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MzIsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDYwLCAweGE5LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg2MSwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDY5LCAweDM4LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg2ZiwgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDcxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3NCwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzUsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDc2LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3ZCwgMHhmMywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTcsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxOSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MWEsIDB4ZjYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJLyoge3sweDEzLCAweDI1LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxZSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MGIsIDB4MDAsIDB4MDB9LCA0fSwgKi8KKwkJe3sweDIwLCAweDM2LCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MTIsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDFiLCAweDc2LCAweDAzLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJLyogQWJvdmUgaXMgYnJpZ2h0bmVzczsgT0VNIGRyaXZlciBzZXR0aW5nIGlzIDB4MTAgKi8KKwkJe3sweDEyLCAweDI3LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgyMCwgMHgyOSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzQsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfQorCX07CisKKwlyZXR1cm4gcnVuX3N0YXJ0X2NvbW1hbmRzKGdzcGNhX2Rldiwgdml2aXRhcl9zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUodml2aXRhcl9zdGFydF9jb21tYW5kcykpOworfQorCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IGVycl9jb2RlOworCisJc2QtPnNvZl9yZWFkID0gMDsKKworCXN3aXRjaCAoc2QtPm1vZGVsKSB7CisJY2FzZSAweDcwMDU6CisJCWVycl9jb2RlID0gc3RhcnRfZ2VuaXVzX2NhbShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIDB4ODAwMToKKwkJZXJyX2NvZGUgPSBzdGFydF9zcHlfY2FtKGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgMHg4MDAzOgorCQllcnJfY29kZSA9IHN0YXJ0X2NpZl9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDg6CisJCWVycl9jb2RlID0gc3RhcnRfbXMzNTBfY2FtKGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgMHg4MDBhOgorCQllcnJfY29kZSA9IHN0YXJ0X3Zpdml0YXJfY2FtKGdzcGNhX2Rldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRyhEX0VSUiwgIlN0YXJ0aW5nIHVua25vd24gY2FtZXJhLCBwbGVhc2UgcmVwb3J0IHRoaXMiKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXR1cm4gZXJyX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmVzdWx0OworCV9fdTggZGF0YVs2XTsKKworCXJlc3VsdCA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJaWYgKHJlc3VsdCA8IDApCisJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIHJlYWQgZmFpbGVkIik7CisKKwltZW1zZXQoZGF0YSwgMCwgNik7CisJZGF0YVswXSA9IDB4MTQ7CisJcmVzdWx0ID0gc245YzIwMjhfY29tbWFuZChnc3BjYV9kZXYsIGRhdGEpOworCWlmIChyZXN1bHQgPCAwKQorCQlQREVCVUcoRF9FUlIsICJDYW1lcmEgU3RvcCBjb21tYW5kIGZhaWxlZCIpOworfQorCisvKiBJbmNsdWRlIHNuOWMyMDI4IHNvZiBkZXRlY3Rpb24gZnVuY3Rpb25zICovCisjaW5jbHVkZSAic245YzIwMjguaCIKKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCXVuc2lnbmVkIGNoYXIgKnNvZjsKKworCXNvZiA9IHNuOWMyMDI4X2ZpbmRfc29mKGdzcGNhX2RldiwgZGF0YSwgbGVuKTsKKwlpZiAoc29mKSB7CisJCWludCBuOworCisJCS8qIGZpbmlzaCBkZWNvZGluZyBjdXJyZW50IGZyYW1lICovCisJCW4gPSBzb2YgLSBkYXRhOworCQlpZiAobiA+IHNpemVvZiBzbjljMjAyOF9zb2ZfbWFya2VyKQorCQkJbiAtPSBzaXplb2Ygc245YzIwMjhfc29mX21hcmtlcjsKKwkJZWxzZQorCQkJbiA9IDA7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBkYXRhLCBuKTsKKwkJLyogU3RhcnQgbmV4dCBmcmFtZS4gKi8KKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULAorCQkJc245YzIwMjhfc29mX21hcmtlciwgc2l6ZW9mIHNuOWMyMDI4X3NvZl9tYXJrZXIpOworCQlsZW4gLT0gc29mIC0gZGF0YTsKKwkJZGF0YSA9IHNvZjsKKwl9CisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ID0gc2RfaW5pdCwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNDU4LCAweDcwMDUpfSwgLyogR2VuaXVzIFNtYXJ0IDMwMCwgdmVyc2lvbiAyICovCisJLyogVGhlIEdlbml1cyBTbWFydCBpcyB1bnRlc3RlZC4gSSBjYW4ndCBmaW5kIGFuIG93bmVyICEgKi8KKwkvKiB7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwMCl9LCBEQzMxVkMsIERvbid0IGtub3cgdGhpcyBjYW1lcmEgKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwMSl9LCAvKiBXaWxkIFBsYW5ldCBkaWdpdGFsIHNweSBjYW0gKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwMyl9LCAvKiBTZXZlcmFsIHNtYWxsIENJRiBjYW1lcmFzICovCisJLyoge1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDgwMDYpfSwgVW5rbm93biBWR0EgY2FtZXJhICovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDgwMDgpfSwgLyogTWluaS1TaG90eiBtcy0zNTAgKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwYSl9LCAvKiBWaXZpY2FtIDMzNTBCICovCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJICAgICAgIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjAyOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjAyOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDFkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFNOOUMyMDI4IGNvbW1vbiBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4sZWR1PgorICoKKyAqIEJhc2VkIGNsb3NlbHkgdXBvbiB0aGUgZmlsZSBnc3BjYS9wYWNfY29tbW9uLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNuOWMyMDI4X3NvZl9tYXJrZXJbNV0gPQorCXsgMHhmZiwgMHhmZiwgMHgwMCwgMHhjNCwgMHhjNCB9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciAqc245YzIwMjhfZmluZF9zb2Yoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCQl1bnNpZ25lZCBjaGFyICptLCBpbnQgbGVuKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgaTsKKworCS8qIFNlYXJjaCBmb3IgdGhlIFNPRiBtYXJrZXIgKGZpeGVkIHBhcnQpIGluIHRoZSBoZWFkZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKG1baV0gPT0gc245YzIwMjhfc29mX21hcmtlcltzZC0+c29mX3JlYWRdKSB7CisJCQlzZC0+c29mX3JlYWQrKzsKKwkJCWlmIChzZC0+c29mX3JlYWQgPT0gc2l6ZW9mKHNuOWMyMDI4X3NvZl9tYXJrZXIpKSB7CisJCQkJUERFQlVHKERfRlJBTSwKKwkJCQkJIlNPRiBmb3VuZCwgYnl0ZXMgdG8gYW5hbHl6ZTogJXUuIgorCQkJCQkiIEZyYW1lIHN0YXJ0cyBhdCBieXRlICMldSIsCisJCQkJCWxlbiwgaSArIDEpOworCQkJCXNkLT5zb2ZfcmVhZCA9IDA7CisJCQkJcmV0dXJuIG0gKyBpICsgMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNkLT5zb2ZfcmVhZCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMKaW5kZXggMGNhMWMwNi4uNGExYmMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMKQEAgLTEyOSw3ICsxMjksNyBAQAogc3RhdGljIGludCBzZF9zZXRhdXRvZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKICNkZWZpbmUgQlJJR0hUTkVTU19JRFggMAogCSAgICB7CkBAIC0xNTA2LDM2ICsxNTA2LDM2IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXMzMiBodWVfY29vcmQsIGh1ZV9pbmRleCA9IDE4MCArIHNkLT5odWU7CiAJdTggY21hdHJpeFsyMV07Ci0JbWVtc2V0KGNtYXRyaXgsIDAsIDIxKTsKIAorCW1lbXNldChjbWF0cml4LCAwLCBzaXplb2YgY21hdHJpeCk7CiAJY21hdHJpeFsyXSA9IChzZC0+Y29udHJhc3QgKiAweDI1IC8gMHgxMDApICsgMHgyNjsKIAljbWF0cml4WzBdID0gMHgxMyArIChjbWF0cml4WzJdIC0gMHgyNikgKiAweDEzIC8gMHgyNTsKIAljbWF0cml4WzRdID0gMHgwNyArIChjbWF0cml4WzJdIC0gMHgyNikgKiAweDA3IC8gMHgyNTsKIAljbWF0cml4WzE4XSA9IHNkLT5icmlnaHRuZXNzIC0gMHg4MDsKIAogCWh1ZV9jb29yZCA9IChoc3ZfcmVkX3hbaHVlX2luZGV4XSAqIHNkLT5zYXR1cmF0aW9uKSA+PiA4OwotCWNtYXRyaXhbNl0gPSAodW5zaWduZWQgY2hhcikoaHVlX2Nvb3JkICYgMHhmZik7Ci0JY21hdHJpeFs3XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFs2XSA9IGh1ZV9jb29yZDsKKwljbWF0cml4WzddID0gKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGY7CiAKIAlodWVfY29vcmQgPSAoaHN2X3JlZF95W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzhdID0gKHVuc2lnbmVkIGNoYXIpKGh1ZV9jb29yZCAmIDB4ZmYpOwotCWNtYXRyaXhbOV0gPSAodW5zaWduZWQgY2hhcikoKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGYpOworCWNtYXRyaXhbOF0gPSBodWVfY29vcmQ7CisJY21hdHJpeFs5XSA9IChodWVfY29vcmQgPj4gOCkgJiAweDBmOwogCiAJaHVlX2Nvb3JkID0gKGhzdl9ncmVlbl94W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzEwXSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzExXSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxMF0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxMV0gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfZ3JlZW5feVtodWVfaW5kZXhdICogc2QtPnNhdHVyYXRpb24pID4+IDg7Ci0JY21hdHJpeFsxMl0gPSAodW5zaWduZWQgY2hhcikoaHVlX2Nvb3JkICYgMHhmZik7Ci0JY21hdHJpeFsxM10gPSAodW5zaWduZWQgY2hhcikoKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGYpOworCWNtYXRyaXhbMTJdID0gaHVlX2Nvb3JkOworCWNtYXRyaXhbMTNdID0gKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGY7CiAKIAlodWVfY29vcmQgPSAoaHN2X2JsdWVfeFtodWVfaW5kZXhdICogc2QtPnNhdHVyYXRpb24pID4+IDg7Ci0JY21hdHJpeFsxNF0gPSAodW5zaWduZWQgY2hhcikoaHVlX2Nvb3JkICYgMHhmZik7Ci0JY21hdHJpeFsxNV0gPSAodW5zaWduZWQgY2hhcikoKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGYpOworCWNtYXRyaXhbMTRdID0gaHVlX2Nvb3JkOworCWNtYXRyaXhbMTVdID0gKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGY7CiAKIAlodWVfY29vcmQgPSAoaHN2X2JsdWVfeVtodWVfaW5kZXhdICogc2QtPnNhdHVyYXRpb24pID4+IDg7Ci0JY21hdHJpeFsxNl0gPSAodW5zaWduZWQgY2hhcikoaHVlX2Nvb3JkICYgMHhmZik7Ci0JY21hdHJpeFsxN10gPSAodW5zaWduZWQgY2hhcikoKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGYpOworCWNtYXRyaXhbMTZdID0gaHVlX2Nvb3JkOworCWNtYXRyaXhbMTddID0gKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGY7CiAKIAlyZXR1cm4gcmVnX3coZ3NwY2FfZGV2LCAweDEwZTEsIGNtYXRyaXgsIDIxKTsKIH0KQEAgLTIwMTUsNiArMjAxNSw3IEBACiAJZGVmYXVsdDoKIAkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCQlicmVhazsKIAl9CiAKIAlzZC0+b2xkX3N0ZXAgPSAwOwpAQCAtMjMxOSw3ICsyMzIwLDcgQEAKIAkJfQogCX0KIAlpZiAoYXZnX2x1bSA+IE1BWF9BVkdfTFVNKSB7Ci0JCWlmIChzZC0+Z2FpbiA+PSAxKSB7CisJCWlmIChzZC0+Z2FpbiA+IDApIHsKIAkJCXNkLT5nYWluLS07CiAJCQlzZXRfZ2Fpbihnc3BjYV9kZXYpOwogCQl9CkBAIC0yMzQ3LDcgKzIzNDgsNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgYXZnX2x1bTsKLQlzdGF0aWMgdW5zaWduZWQgY2hhciBmcmFtZV9oZWFkZXJbXSA9CisJc3RhdGljIHU4IGZyYW1lX2hlYWRlcltdID0KIAkJezB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzQsIDB4YzQsIDB4OTZ9OwogCWlmIChsZW4gPT0gNjQgJiYgbWVtY21wKGRhdGEsIGZyYW1lX2hlYWRlciwgNikgPT0gMCkgewogCQlhdmdfbHVtID0gKChkYXRhWzM1XSA+PiAyKSAmIDMpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCmluZGV4IGRkZmYyYjUuLjc4NWVlYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwpAQCAtNDIsNiArNDIsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJzb25peGIiCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOwpAQCAtNTMsOSArNTQsMTEgQEAKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCWF0b21pY190IGF2Z19sdW07CiAJaW50IHByZXZfYXZnX2x1bTsKKwlpbnQgZXhwX3Rvb19sb3dfY250OworCWludCBleHBfdG9vX2hpZ2hfY250OwogCisJdW5zaWduZWQgc2hvcnQgZXhwb3N1cmU7CiAJdW5zaWduZWQgY2hhciBnYWluOwotCXVuc2lnbmVkIGNoYXIgZXhwb3N1cmU7CiAJdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOwogCXVuc2lnbmVkIGNoYXIgYXV0b2dhaW47CiAJdW5zaWduZWQgY2hhciBhdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzOwpAQCAtNzMsOCArNzYsOSBAQAogI2RlZmluZSBTRU5TT1JfT1Y3NjMwIDIKICNkZWZpbmUgU0VOU09SX1BBUzEwNiAzCiAjZGVmaW5lIFNFTlNPUl9QQVMyMDIgNAotI2RlZmluZSBTRU5TT1JfVEFTNTExMCA1Ci0jZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ1hYIDYKKyNkZWZpbmUgU0VOU09SX1RBUzUxMTBDIDUKKyNkZWZpbmUgU0VOU09SX1RBUzUxMTBEIDYKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggNwogCV9fdTggcmVnMTE7CiB9OwogCkBAIC05NSwxMyArOTksMTUgQEAKIC8qIHNlbnNvcl9kYXRhIGZsYWdzICovCiAjZGVmaW5lIEZfR0FJTiAweDAxCQkvKiBoYXMgZ2FpbiAqLwogI2RlZmluZSBGX1NJRiAgMHgwMgkJLyogc2lmIG9yIHZnYSAqLworI2RlZmluZSBGX0NPQVJTRV9FWFBPIDB4MDQJLyogZXhwb3N1cmUgY29udHJvbCBpcyBjb2Fyc2UgKi8KIAogLyogcHJpdiBmaWVsZCBvZiBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZsYWdzIChkbyBub3QgdXNlIGxvdyBuaWJibGUhKSAqLwogI2RlZmluZSBNT0RFX1JBVyAweDEwCQkvKiByYXcgYmF5ZXIgbW9kZSAqLwogI2RlZmluZSBNT0RFX1JFRFVDRURfU0lGIDB4MjAJLyogdmdhIG1vZGUgKDMyMHgyNDAgLyAxNjB4MTIwKSBvbiBzaWYgY2FtICovCiAKIC8qIGN0cmxfZGlzIGhlbHBlciBtYWNyb3MgKi8KLSNkZWZpbmUgTk9fRVhQTyAoKDEgPDwgRVhQT1NVUkVfSURYKSB8ICgxIDw8IEFVVE9HQUlOX0lEWCkpCisjZGVmaW5lIE5PX0VYUE8gKCgxIDw8IEVYUE9TVVJFX0lEWCkgfCAoMSA8PCBDT0FSU0VfRVhQT1NVUkVfSURYKSB8IFwKKwkJICgxIDw8IEFVVE9HQUlOX0lEWCkpCiAjZGVmaW5lIE5PX0ZSRVEgKDEgPDwgRlJFUV9JRFgpCiAjZGVmaW5lIE5PX0JSSUdIVE5FU1MgKDEgPDwgQlJJR0hUTkVTU19JRFgpCiAKQEAgLTEyNywxMSArMTMzLDEwIEBACiB9CiAKIC8qIFdlIGNhbGN1bGF0ZSB0aGUgYXV0b2dhaW4gYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNmZXIgb2YgYSBmcmFtZSwgYXQgdGhpcwotICAgbW9tZW50IGEgZnJhbWUgd2l0aCB0aGUgb2xkIHNldHRpbmdzIGlzIGJlaW5nIHRyYW5zbWl0dGVkLCBhbmQgYSBmcmFtZSBpcwotICAgYmVpbmcgY2FwdHVyZWQgd2l0aCB0aGUgb2xkIHNldHRpbmdzLiBTbyBpZiB3ZSBhZGp1c3QgdGhlIGF1dG9nYWluIHdlIG11c3QKLSAgIGlnbm9yZSBhdGxlYXN0IHRoZSAyIG5leHQgZnJhbWVzIGZvciB0aGUgbmV3IHNldHRpbmdzIHRvIGNvbWUgaW50byBlZmZlY3QKLSAgIGJlZm9yZSBkb2luZyBhbnkgb3RoZXIgYWRqdXN0bWVudHMgKi8KLSNkZWZpbmUgQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUyAzCisgICBtb21lbnQgYSBmcmFtZSB3aXRoIHRoZSBvbGQgc2V0dGluZ3MgaXMgYmVpbmcgY2FwdHVyZWQgYW5kIHRyYW5zbWl0dGVkLiBTbworICAgaWYgd2UgYWRqdXN0IHRoZSBnYWluIG9yIGV4cG9zdXJlIHdlIG11c3QgaWdub3JlIGF0bGVhc3QgdGhlIG5leHQgZnJhbWUgZm9yCisgICB0aGUgbmV3IHNldHRpbmdzIHRvIGNvbWUgaW50byBlZmZlY3QgYmVmb3JlIGRvaW5nIGFueSBvdGhlciBhZGp1c3RtZW50cy4gKi8KKyNkZWZpbmUgQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUyAxCiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CkBAIC0xNDUsNyArMTUwLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgQlJJR0hUTkVTU19JRFggMAogCXsKIAkgICAgewpAQCAtMTcxLDcgKzE3Niw3IEBACiAJCS5tYXhpbXVtID0gMjU1LAogCQkuc3RlcCAgICA9IDEsCiAjZGVmaW5lIEdBSU5fREVGIDEyNwotI2RlZmluZSBHQUlOX0tORUUgMjAwCisjZGVmaW5lIEdBSU5fS05FRSAyMzAKIAkJLmRlZmF1bHRfdmFsdWUgPSBHQUlOX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGdhaW4sCkBAIC0xODMsMTAgKzE4OCwxMCBAQAogCQkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCiAJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCQkubmFtZSA9ICJFeHBvc3VyZSIsCi0jZGVmaW5lIEVYUE9TVVJFX0RFRiAgMTYgLyogIDMyIG1zIC8gMzAgZnBzICovCi0jZGVmaW5lIEVYUE9TVVJFX0tORUUgNTAgLyogMTAwIG1zIC8gMTAgZnBzICovCisjZGVmaW5lIEVYUE9TVVJFX0RFRiAgNjYgLyogIDMzIG1zIC8gMzAgZnBzIChleGNlcHQgb24gUEFTWFhYKSAqLworI2RlZmluZSBFWFBPU1VSRV9LTkVFIDIwMCAvKiAxMDAgbXMgLyAxMCBmcHMgKGV4Y2VwdCBvbiBQQVNYWFgpICovCiAJCQkubWluaW11bSA9IDAsCi0JCQkubWF4aW11bSA9IDI1NSwKKwkJCS5tYXhpbXVtID0gMTAyMywKIAkJCS5zdGVwID0gMSwKIAkJCS5kZWZhdWx0X3ZhbHVlID0gRVhQT1NVUkVfREVGLAogCQkJLmZsYWdzID0gMCwKQEAgLTE5NCw3ICsxOTksMjMgQEAKIAkJLnNldCA9IHNkX3NldGV4cG9zdXJlLAogCQkuZ2V0ID0gc2RfZ2V0ZXhwb3N1cmUsCiAJfSwKLSNkZWZpbmUgQVVUT0dBSU5fSURYIDMKKyNkZWZpbmUgQ09BUlNFX0VYUE9TVVJFX0lEWCAzCisJeworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkV4cG9zdXJlIiwKKyNkZWZpbmUgQ09BUlNFX0VYUE9TVVJFX0RFRiAgMiAvKiAzMCBmcHMgKi8KKwkJCS5taW5pbXVtID0gMiwKKwkJCS5tYXhpbXVtID0gMTUsCisJCQkuc3RlcCA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IENPQVJTRV9FWFBPU1VSRV9ERUYsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCisJCS5nZXQgPSBzZF9nZXRleHBvc3VyZSwKKwl9LAorI2RlZmluZSBBVVRPR0FJTl9JRFggNAogCXsKIAkJewogCQkJLmlkID0gVjRMMl9DSURfQVVUT0dBSU4sCkBAIC0yMTAsNyArMjMxLDcgQEAKIAkJLnNldCA9IHNkX3NldGF1dG9nYWluLAogCQkuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCiAJfSwKLSNkZWZpbmUgRlJFUV9JRFggNAorI2RlZmluZSBGUkVRX0lEWCA1CiAJewogCQl7CiAJCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0yMTksNyArMjQwLDcgQEAKIAkJCS5taW5pbXVtID0gMCwKIAkJCS5tYXhpbXVtID0gMiwJLyogMDogMCwgMTogNTBIeiwgMjo2MEh6ICovCiAJCQkuc3RlcCAgICA9IDEsCi0jZGVmaW5lIEZSRVFfREVGIDEKKyNkZWZpbmUgRlJFUV9ERUYgMAogCQkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKIAkJfSwKIAkJLnNldCA9IHNkX3NldGZyZXEsCkBAIC0zNDUsNyArMzY2LDcgQEAKIH07CiBzdGF0aWMgY29uc3QgX191OCBpbml0T3Y3NjMwXzNbXSA9IHsKIAkweDQ0LCAweDQ0LCAweDAwLCAweDFhLCAweDIwLCAweDIwLCAweDIwLCAweDgwLAkvKiByMDEgLi4gcjA4ICovCi0JMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwJLyogcjA5IC4uIHIxMCAqLworCTB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCS8qIHIwOSAuLiByMTAgKi8KIAkweDAwLCAweDAyLCAweDAxLCAweDBhLAkJCQkvKiByMTEgLi4gcjE0ICovCiAJMHgyOCwgMHgxZSwJCQkvKiBIICYgViBzaXplcyAgICAgcjE1IC4uIHIxNiAqLwogCTB4NjgsIDB4OGYsIE1DS19JTklUMSwJCQkJLyogcjE3IC4uIHIxOSAqLwpAQCAtMzg3LDYgKzQwOCwzMCBAQAogCTB4MTgsIDB4MTAsIDB4MDIsIDB4MDIsIDB4MDksIDB4MDcKIH07CiAvKiBjb21wcmVzc2lvbiAweDg2IG1ja2luaXQxIDB4MmIgKi8KKworLyogIktub3duIiBQQVMxMDZCIHJlZ2lzdGVyczoKKyAgMHgwMiBjbG9jayBkaXZpZGVyCisgIDB4MDMgVmFyaWFibGUgZnJhbWVyYXRlIGJpdHMgNC0xMQorICAweDA0IFZhciBmcmFtZXJhdGUgYml0cyAwLTMsIG9uZSBtdXN0IGxlYXZlIHRoZSA0IG1zYidzIGF0IDAgISEKKyAgICAgICBUaGUgdmFyaWFibGUgZnJhbWVyYXRlIGNvbnRyb2wgbXVzdCBuZXZlciBiZSBzZXQgbG93ZXIgdGhlbiAzMDAsCisgICAgICAgd2hpY2ggc2V0cyB0aGUgZnJhbWVyYXRlIGF0IDkwIC8gcmVnMDIsIG90aGVyd2lzZSB2c3luYyBpcyBsb3N0LgorICAweDA1IFNodXR0ZXIgVGltZSBMaW5lIE9mZnNldCwgdGhpcyBjYW4gYmUgdXNlZCBhcyBhbiBleHBvc3VyZSBjb250cm9sOgorICAgICAgIDAgPSB1c2UgZnVsbCBmcmFtZSB0aW1lLCAyNTUgPSBubyBleHBvc3VyZSBhdCBhbGwKKyAgICAgICBOb3RlIHRoaXMgbWF5IG5ldmVyIGJlIGxhcmdlciB0aGVuICJ2YXItZnJhbWVyYXRlIGNvbnRyb2wiIC8gMiAtIDIuCisgICAgICAgV2hlbiB2YXItZnJhbWVyYXRlIGNvbnRyb2wgaXMgPCA1MTQsIG5vIGV4cG9zdXJlIGlzIHJlYWNoZWQgYXQgdGhlIG1heAorICAgICAgIGFsbG93ZWQgdmFsdWUgZm9yIHRoZSBmcmFtZXJhdGUgY29udHJvbCB2YWx1ZSwgcmF0aGVyIHRoZW4gYXQgMjU1LgorICAweDA2IFNodXR0ZXIgVGltZSBQaXhlbCBPZmZzZXQsIGxpa2UgcmVnMDUgdGhpcyBpbmZsdWVuY2VzIGV4cG9zdXJlLCBidXQKKyAgICAgICBvbmx5IGEgdmVyeSBsaXR0bGUgYml0LCBsZWF2ZSBhdCAweGNkCisgIDB4MDcgb2Zmc2V0IHNpZ24gYml0IChiaXQwIDEgPiBuZWdhdGl2ZSBvZmZzZXQpCisgIDB4MDggb2Zmc2V0CisgIDB4MDkgQmx1ZSBHYWluCisgIDB4MGEgR3JlZW4xIEdhaW4KKyAgMHgwYiBHcmVlbjIgR2FpbgorICAweDBjIFJlZCBHYWluCisgIDB4MGUgR2xvYmFsIGdhaW4KKyAgMHgxMyBXcml0ZSAxIHRvIGNvbW1pdCBzZXR0aW5ncyB0byBzZW5zb3IKKyovCisKIHN0YXRpYyBjb25zdCBfX3U4IHBhczEwNl9zZW5zb3JfaW5pdFtdWzhdID0gewogCS8qIFBpeGVsIENsb2NrIERpdmlkZXIgNiAqLwogCXsgMHhhMSwgMHg0MCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCB9LApAQCAtNDMzLDM3ICs0NzgsNTUgQEAKIAkweDQ0LCAweDQ0LCAweDIxLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMywgMHgwYSwKLQkweDI4LCAweDFlLCAweDI4LCAweDg5LCAweDIwLAorCTB4MjgsIDB4MWUsIDB4MjAsIDB4ODksIDB4MjAsCiAJMHgwMCwgMHgwMCwgMHgwMiwgMHgwMywgMHgwZiwgMHgwYwogfTsKKworLyogIktub3duIiBQQVMyMDJCQ0IgcmVnaXN0ZXJzOgorICAweDAyIGNsb2NrIGRpdmlkZXIKKyAgMHgwNCBWYXJpYWJsZSBmcmFtZXJhdGUgYml0cyA2LTExICgqKQorICAweDA1IFZhciBmcmFtZXJhdGUgIGJpdHMgMC01LCBvbmUgbXVzdCBsZWF2ZSB0aGUgMiBtc2IncyBhdCAwICEhCisgIDB4MDcgQmx1ZSBHYWluCisgIDB4MDggR3JlZW4gR2FpbgorICAweDA5IFJlZCBHYWluCisgIDB4MGIgb2Zmc2V0IHNpZ24gYml0IChiaXQwIDEgPiBuZWdhdGl2ZSBvZmZzZXQpCisgIDB4MGMgb2Zmc2V0CisgIDB4MGUgVW5rbm93biBpbWFnZSBpcyBzbGlnaHRseSBicmlnaHRlciB3aGVuIGJpdCAwIGlzIDAsIGlmIHJlZzBmIGlzIDAgdG9vLAorICAgICAgIGxlYXZlIGF0IDEgb3RoZXJ3aXNlIHdlIGdldCBhIGp1bXAgaW4gb3VyIGV4cG9zdXJlIGNvbnRyb2wKKyAgMHgwZiBFeHBvc3VyZSAwLTI1NSwgMCA9IHVzZSBmdWxsIGZyYW1lIHRpbWUsIDI1NSA9IG5vIGV4cG9zdXJlIGF0IGFsbAorICAweDEwIE1hc3RlciBnYWluIDAgLSAzMQorICAweDExIHdyaXRlIDEgdG8gYXBwbHkgY2hhbmdlcworICAoKikgVGhlIHZhcmlhYmxlIGZyYW1lcmF0ZSBjb250cm9sIG11c3QgbmV2ZXIgYmUgc2V0IGxvd2VyIHRoZW4gNTAwCisgICAgICB3aGljaCBzZXRzIHRoZSBmcmFtZXJhdGUgYXQgMzAgLyByZWcwMiwgb3RoZXJ3aXNlIHZzeW5jIGlzIGxvc3QuCisqLwogc3RhdGljIGNvbnN0IF9fdTggcGFzMjAyX3NlbnNvcl9pbml0W11bOF0gPSB7Ci0JezB4YTAsIDB4NDAsIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCS8qIFNldCB0aGUgY2xvY2sgZGl2aWRlciB0byA0IC0+IDMwIC8gNCA9IDcuNSBmcHMsIHdlIHdvdWxkIGxpa2UKKwkgICB0byBzZXQgaXQgbG93ZXIsIGJ1dCBmb3Igc29tZSByZWFzb24gdGhlIGJyaWRnZSBzdGFydHMgbWlzc2luZworCSAgIHZzeW5jJ3MgdGhlbiAqLworCXsweGEwLCAweDQwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhkMCwgMHg0MCwgMHgwNCwgMHgwNywgMHgzNCwgMHgwMCwgMHgwOSwgMHgxMH0sCiAJezB4ZDAsIDB4NDAsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTB9LAotCXsweGQwLCAweDQwLCAweDBDLCAweDAwLCAweDBDLCAweDAwLCAweDMyLCAweDEwfSwKKwl7MHhkMCwgMHg0MCwgMHgwQywgMHgwMCwgMHgwQywgMHgwMSwgMHgzMiwgMHgxMH0sCiAJezB4ZDAsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDE1LCAweDcwLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKIAl7MHhhMCwgMHg0MCwgMHgxOCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDAzLCAweDU2LCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKIAl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCi0JezB4YjAsIDB4NDAsIDB4MDQsIDB4MDcsIDB4MmEsIDB4MDAsIDB4NjMsIDB4MTB9LAotCXsweGIwLCAweDQwLCAweDBlLCAweDAwLCAweDNkLCAweDAwLCAweDYzLCAweDEwfSwKLQotCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDNkLCAweDAwLCAweDYzLCAweDE2fSwKLQl7MHhhMCwgMHg0MCwgMHgxMCwgMHgwOCwgMHgzZCwgMHgwMCwgMHg2MywgMHgxNX0sCi0JezB4YTAsIDB4NDAsIDB4MDIsIDB4MDQsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDNkLCAweDAwLCAweDYzLCAweDE2fSwKLQl7MHhiMCwgMHg0MCwgMHgwZSwgMHgwMCwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNn0sCi0JezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGEwLCAweDQwLCAweDEwLCAweDBlLCAweDMxLCAweDAwLCAweDYzLCAweDE1fSwKLQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNn0sCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBpbml0VGFzNTExMFtdID0geworc3RhdGljIGNvbnN0IF9fdTggaW5pdFRhczUxMTBjW10gPSB7CiAJMHg0NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweDAwLAotCTB4MDAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4MDksIDB4MGEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwOSwgMHgwYSwKKwkweDE2LCAweDEyLCAweDYwLCAweDg2LCAweDJiLAorCTB4MTQsIDB4MGEsIDB4MDIsIDB4MDIsIDB4MDksIDB4MDcKK307CisvKiBTYW1lIGFzIGFib3ZlLCBleGNlcHQgYSBkaWZmZXJlbnQgaHN0YXJ0ICovCitzdGF0aWMgY29uc3QgX191OCBpbml0VGFzNTExMGRbXSA9IHsKKwkweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOSwgMHgwYSwKIAkweDE2LCAweDEyLCAweDYwLCAweDg2LCAweDJiLAogCTB4MTQsIDB4MGEsIDB4MDIsIDB4MDIsIDB4MDksIDB4MDcKIH07CkBAIC00NzYsNyArNTM5LDcgQEAKIHN0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTMwW10gPSB7CiAJMHgwNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweDAwLAotCTB4MDAsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MGMsIDB4MGEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwYywgMHgwYSwKIAkweDI4LCAweDFlLCAweDYwLCBDT01QLCBNQ0tfSU5JVCwKIAkweDE4LCAweDEwLCAweDA0LCAweDAzLCAweDExLCAweDBjCiB9OwpAQCAtNDkzLDEyICs1NTYsMTQgQEAKIFNFTlMoaW5pdE92NjY1MCwgTlVMTCwgb3Y2NjUwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCBGX0dBSU58Rl9TSUYsIDAsIDB4NjApLAogU0VOUyhpbml0T3Y3NjMwLCBpbml0T3Y3NjMwXzMsIG92NzYzMF9zZW5zb3JfaW5pdCwgTlVMTCwgb3Y3NjMwX3NlbnNvcl9pbml0XzMsCiAJRl9HQUlOLCAwLCAweDIxKSwKLVNFTlMoaW5pdFBhczEwNiwgTlVMTCwgcGFzMTA2X3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCBGX1NJRiwgTk9fRVhQT3xOT19GUkVRLAorU0VOUyhpbml0UGFzMTA2LCBOVUxMLCBwYXMxMDZfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwgTk9fRlJFUSwKIAkwKSwKLVNFTlMoaW5pdFBhczIwMiwgaW5pdFBhczIwMiwgcGFzMjAyX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCAwLAotCU5PX0VYUE98Tk9fRlJFUSwgMCksCi1TRU5TKGluaXRUYXM1MTEwLCBOVUxMLCB0YXM1MTEwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCBGX0dBSU58Rl9TSUYsCi0JTk9fQlJJR0hUTkVTU3xOT19GUkVRLCAwKSwKK1NFTlMoaW5pdFBhczIwMiwgaW5pdFBhczIwMiwgcGFzMjAyX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCBGX0dBSU4sCisJTk9fRlJFUSwgMCksCitTRU5TKGluaXRUYXM1MTEwYywgTlVMTCwgdGFzNTExMF9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwKKwlGX0dBSU58Rl9TSUZ8Rl9DT0FSU0VfRVhQTywgTk9fQlJJR0hUTkVTU3xOT19GUkVRLCAwKSwKK1NFTlMoaW5pdFRhczUxMTBkLCBOVUxMLCB0YXM1MTEwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLAorCUZfR0FJTnxGX1NJRnxGX0NPQVJTRV9FWFBPLCBOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAogU0VOUyhpbml0VGFzNTEzMCwgTlVMTCwgdGFzNTEzMF9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwgMCwgTk9fRVhQT3xOT19GUkVRLAogCTApLAogfTsKQEAgLTU4Nyw0MiArNjUyLDI4IEBACiAJCQlnb3RvIGVycjsKIAkJYnJlYWs7CiAJICAgIH0KLQljYXNlIFNFTlNPUl9QQVMxMDY6IHsKLQkJX191OCBpMmMxW10gPQotCQkJezB4YTEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTR9OwotCi0JCWkyYzFbM10gPSBzZC0+YnJpZ2h0bmVzcyA+PiAzOwotCQlpMmMxWzJdID0gMHgwZTsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjMSkgPCAwKQotCQkJZ290byBlcnI7Ci0JCWkyYzFbM10gPSAweDAxOwotCQlpMmMxWzJdID0gMHgxMzsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjMSkgPCAwKQotCQkJZ290byBlcnI7Ci0JCWJyZWFrOwotCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMTA2OgogCWNhc2UgU0VOU09SX1BBUzIwMjogewotCQkvKiBfX3U4IGkyY3BleHBvMVtdID0KLQkJCXsweGIwLCAweDQwLCAweDA0LCAweDA3LCAweDJhLCAweDAwLCAweDYzLCAweDE2fTsgKi8KLQkJX191OCBpMmNwZXhwb1tdID0KLQkJCXsweGIwLCAweDQwLCAweDBlLCAweDAxLCAweGFiLCAweDAwLCAweDYzLCAweDE2fTsKLQkJX191OCBpMmNwMjAyW10gPQotCQkJezB4YTAsIDB4NDAsIDB4MTAsIDB4MGUsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTV9OwotCQlzdGF0aWMgX191OCBpMmNwZG9pdFtdID0KLQkJCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDMxLCAweDAwLCAweDYzLCAweDE2fTsKKwkJX191OCBpMmNwYnJpZ2h0W10gPQorCQkJezB4YjAsIDB4NDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTZ9OworCQlfX3U4IGkyY3Bkb2l0W10gPQorCQkJezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTZ9OwogCi0JCS8qIGNoYW5nZSByZWcgMHgxMCAqLwotCQlpMmNwZXhwb1s0XSA9IDB4ZmYgLSBzZC0+YnJpZ2h0bmVzczsKLS8qCQlpZihpMmNfdyhnc3BjYV9kZXYsaTJjcGV4cG8xKSA8IDApCi0JCQlnb3RvIGVycjsgKi8KLS8qCQlpZihpMmNfdyhnc3BjYV9kZXYsaTJjcGRvaXQpIDwgMCkKLQkJCWdvdG8gZXJyOyAqLwotCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZXhwbykgPCAwKQotCQkJZ290byBlcnI7Ci0JCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaTJjcDIwMlszXSA9IHNkLT5icmlnaHRuZXNzID4+IDM7Ci0JCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3AyMDIpIDwgMCkKKwkJLyogUEFTMTA2IHVzZXMgcmVnIDcgYW5kIDggaW5zdGVhZCBvZiBiIGFuZCBjICovCisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpIHsKKwkJCWkyY3BicmlnaHRbMl0gPSA3OworCQkJaTJjcGRvaXRbMl0gPSAweDEzOworCQl9CisKKwkJaWYgKHNkLT5icmlnaHRuZXNzIDwgMTI3KSB7CisJCQkvKiBjaGFuZ2UgcmVnIDB4MGIsIHNpZ25yZWcgKi8KKwkJCWkyY3BicmlnaHRbM10gPSAweDAxOworCQkJLyogc2V0IHJlZyAweDBjLCBvZmZzZXQgKi8KKwkJCWkyY3BicmlnaHRbNF0gPSAxMjcgLSBzZC0+YnJpZ2h0bmVzczsKKwkJfSBlbHNlCisJCQlpMmNwYnJpZ2h0WzRdID0gc2QtPmJyaWdodG5lc3MgLSAxMjc7CisKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGJyaWdodCkgPCAwKQogCQkJZ290byBlcnI7CiAJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCiAJCQlnb3RvIGVycjsKQEAgLTY1Miw3ICs3MDMsOCBAQAogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAKLQljYXNlIFNFTlNPUl9UQVM1MTEwOiB7CisJY2FzZSBTRU5TT1JfVEFTNTExMEM6CisJY2FzZSBTRU5TT1JfVEFTNTExMEQ6IHsKIAkJX191OCBpMmNbXSA9CiAJCQl7MHgzMCwgMHgxMSwgMHgwMiwgMHgyMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgxMH07CiAKQEAgLTY3NCw2ICs3MjYsMzcgQEAKIAkJCWdvdG8gZXJyOwogCQlicmVhazsKIAkgICAgfQorCWNhc2UgU0VOU09SX1BBUzEwNjoKKwljYXNlIFNFTlNPUl9QQVMyMDI6IHsKKwkJX191OCBpMmNwZ2FpbltdID0KKwkJCXsweGEwLCAweDQwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1fTsKKwkJX191OCBpMmNwY29sb3JnYWluW10gPQorCQkJezB4YzAsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTV9OworCQlfX3U4IGkyY3Bkb2l0W10gPQorCQkJezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTZ9OworCisJCS8qIFBBUzEwNiB1c2VzIGRpZmZlcmVudCByZWdzIChhbmQgaGFzIHNwbGl0IGdyZWVuIGdhaW5zKSAqLworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUEFTMTA2KSB7CisJCQlpMmNwZ2FpblsyXSA9IDB4MGU7CisJCQlpMmNwY29sb3JnYWluWzBdID0gMHhkMDsKKwkJCWkyY3Bjb2xvcmdhaW5bMl0gPSAweDA5OworCQkJaTJjcGRvaXRbMl0gPSAweDEzOworCQl9CisKKwkJaTJjcGdhaW5bM10gPSBzZC0+Z2FpbiA+PiAzOworCQlpMmNwY29sb3JnYWluWzNdID0gc2QtPmdhaW4gPj4gNDsKKwkJaTJjcGNvbG9yZ2Fpbls0XSA9IHNkLT5nYWluID4+IDQ7CisJCWkyY3Bjb2xvcmdhaW5bNV0gPSBzZC0+Z2FpbiA+PiA0OworCQlpMmNwY29sb3JnYWluWzZdID0gc2QtPmdhaW4gPj4gNDsKKworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZ2FpbikgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bjb2xvcmdhaW4pIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZG9pdCkgPCAwKQorCQkJZ290byBlcnI7CisJCWJyZWFrOworCSAgICB9CiAJfQogCXJldHVybjsKIGVycjoKQEAgLTY4NCwxOSArNzY3LDIxIEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCV9fdTggZ2FpbjsKLQlfX3U4IHJnYl92YWx1ZTsKKwlfX3U4IGJ1ZlsyXSA9IHsgMCwgMCB9OworCisJaWYgKHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmZsYWdzICYgRl9HQUlOKSB7CisJCS8qIFVzZSB0aGUgc2Vuc29yIGdhaW4gdG8gZG8gdGhlIGFjdHVhbCBnYWluICovCisJCXNldHNlbnNvcmdhaW4oZ3NwY2FfZGV2KTsKKwkJcmV0dXJuOworCX0KIAogCWdhaW4gPSBzZC0+Z2FpbiA+PiA0OwogCiAJLyogcmVkIGFuZCBibHVlIGdhaW4gKi8KLQlyZ2JfdmFsdWUgPSBnYWluIDw8IDQgfCBnYWluOwotCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgJnJnYl92YWx1ZSwgMSk7CisJYnVmWzBdID0gZ2FpbiA8PCA0IHwgZ2FpbjsKIAkvKiBncmVlbiBnYWluICovCi0JcmdiX3ZhbHVlID0gZ2FpbjsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsICZyZ2JfdmFsdWUsIDEpOwotCi0JaWYgKHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmZsYWdzICYgRl9HQUlOKQotCQlzZXRzZW5zb3JnYWluKGdzcGNhX2Rldik7CisJYnVmWzFdID0gZ2FpbjsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTAsIGJ1ZiwgMik7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTcwNCwxNyArNzg5LDEyIEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfVEFTNTExMDogewotCQlfX3U4IHJlZzsKLQorCWNhc2UgU0VOU09SX1RBUzUxMTBDOgorCWNhc2UgU0VOU09SX1RBUzUxMTBEOiB7CiAJCS8qIHJlZ2lzdGVyIDE5J3MgaGlnaCBuaWJibGUgY29udGFpbnMgdGhlIHNuOWMxMHggY2xvY2sgZGl2aWRlcgogCQkgICBUaGUgaGlnaCBuaWJibGUgY29uZmlndXJlcyB0aGUgbm8gZnBzIGFjY29yZGluZyB0byB0aGUKIAkJICAgZm9ybXVsYTogNjAgLyBoaWdoX25pYmJsZS4gV2l0aCBhIG1heGltdW0gb2YgMzAgZnBzICovCi0JCXJlZyA9IDEyMCAqIHNkLT5leHBvc3VyZSAvIDEwMDA7Ci0JCWlmIChyZWcgPCAyKQotCQkJcmVnID0gMjsKLQkJZWxzZSBpZiAocmVnID4gMTUpCi0JCQlyZWcgPSAxNTsKKwkJX191OCByZWcgPSBzZC0+ZXhwb3N1cmU7CiAJCXJlZyA9IChyZWcgPDwgNCkgfCAweDBiOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MTksICZyZWcsIDEpOwogCQlicmVhazsKQEAgLTc1MCwyMCArODMwLDIxIEBACiAJCX0gZWxzZQogCQkJcmVnMTBfbWF4ID0gMHg0MTsKIAotCQlyZWcxMSA9ICg2MCAqIHNkLT5leHBvc3VyZSArIDk5OSkgLyAxMDAwOworCQlyZWcxMSA9ICgxNSAqIHNkLT5leHBvc3VyZSArIDk5OSkgLyAxMDAwOwogCQlpZiAocmVnMTEgPCAxKQogCQkJcmVnMTEgPSAxOwogCQllbHNlIGlmIChyZWcxMSA+IDE2KQogCQkJcmVnMTEgPSAxNjsKIAotCQkvKiBJbiA2NDB4NDgwLCBpZiB0aGUgcmVnMTEgaGFzIGxlc3MgdGhhbiAzLCB0aGUgaW1hZ2UgaXMKLQkJICAgdW5zdGFibGUgKG5vdCBlbm91Z2ggYmFuZHdpZHRoKS4gKi8KLQkJaWYgKGdzcGNhX2Rldi0+d2lkdGggPT0gNjQwICYmIHJlZzExIDwgMykKLQkJCXJlZzExID0gMzsKKwkJLyogSW4gNjQweDQ4MCwgaWYgdGhlIHJlZzExIGhhcyBsZXNzIHRoYW4gNCwgdGhlIGltYWdlIGlzCisJCSAgIHVuc3RhYmxlICh0aGUgYnJpZGdlIGdvZXMgaW50byBhIGhpZ2hlciBjb21wcmVzc2lvbiBtb2RlCisJCSAgIHdoaWNoIHdlIGhhdmUgbm90IHJldmVyc2UgZW5naW5lZXJlZCB5ZXQpLiAqLworCQlpZiAoZ3NwY2FfZGV2LT53aWR0aCA9PSA2NDAgJiYgcmVnMTEgPCA0KQorCQkJcmVnMTEgPSA0OwogCiAJCS8qIGZyYW1lIGV4cG9zdXJlIHRpbWUgaW4gbXMgPSAxMDAwICogcmVnMTEgLyAzMCAgICAtPgotCQlyZWcxMCA9IHNkLT5leHBvc3VyZSAqIDIgKiByZWcxMF9tYXggLyAoMTAwMCAqIHJlZzExIC8gMzApICovCi0JCXJlZzEwID0gKHNkLT5leHBvc3VyZSAqIDYwICogcmVnMTBfbWF4KSAvICgxMDAwICogcmVnMTEpOworCQlyZWcxMCA9IChzZC0+ZXhwb3N1cmUgLyAyKSAqIHJlZzEwX21heCAvICgxMDAwICogcmVnMTEgLyAzMCkgKi8KKwkJcmVnMTAgPSAoc2QtPmV4cG9zdXJlICogMTUgKiByZWcxMF9tYXgpIC8gKDEwMDAgKiByZWcxMSk7CiAKIAkJLyogRG9uJ3QgYWxsb3cgdGhpcyB0byBnZXQgYmVsb3cgMTAgd2hlbiB1c2luZyBhdXRvZ2FpbiwgdGhlCiAJCSAgIHN0ZXBzIGJlY29tZSB2ZXJ5IGxhcmdlIChyZWxhdGl2ZWx5KSB3aGVuIGJlbG93IDEwIGNhdXNpbmcKQEAgLTc4NiwxMCArODY3LDg1IEBACiAJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyYykgPT0gMCkKIAkJCXNkLT5yZWcxMSA9IHJlZzExOwogCQllbHNlCi0JCQlQREVCVUcoRF9FUlIsICJpMmMgZXJyb3IgZXhwb3N1cmUiKTsKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQorCWNhc2UgU0VOU09SX1BBUzIwMjogeworCQlfX3U4IGkyY3BmcmFtZXJhdGVbXSA9CisJCQl7MHhiMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisJCV9fdTggaTJjcGV4cG9bXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisJCWNvbnN0IF9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisJCWludCBmcmFtZXJhdGVfY3RybDsKKworCQkvKiBUaGUgZXhwb3N1cmUga25lZSBmb3IgdGhlIGF1dG9nYWluIGFsZ29yaXRobSBpcyAyMDAKKwkJICAgKDEwMCBtcyAvIDEwIGZwcyBvbiBvdGhlciBzZW5zb3JzKSwgZm9yIHZhbHVlcyBiZWxvdyB0aGlzCisJCSAgIHVzZSB0aGUgY29udHJvbCBmb3Igc2V0dGluZyB0aGUgcGFydGlhbCBmcmFtZSBleHBvc2UgdGltZSwKKwkJICAgYWJvdmUgdGhhdCB1c2UgdmFyaWFibGUgZnJhbWVyYXRlLiBUaGlzIHdheSB3ZSBydW4gYXQgbWF4CisJCSAgIGZyYW1lcmF0ZSAoNjQweDQ4MEA3LjUgZnBzLCAzMjB4MjQwQDEwZnBzKSB1bnRpbCB0aGUga25lZQorCQkgICBpcyByZWFjaGVkLiBVc2luZyB0aGUgdmFyaWFibGUgZnJhbWVyYXRlIGNvbnRyb2wgYWJvdmUgMjAwCisJCSAgIGlzIGJldHRlciB0aGVuIHBsYXlpbmcgYXJvdW5kIHdpdGggYm90aCBjbG9ja2RpdiArIHBhcnRpYWwKKwkJICAgZnJhbWUgZXhwb3N1cmUgdGltZXMgKGxpa2Ugd2UgYXJlIGRvaW5nIHdpdGggdGhlIG92IGNoaXBzKSwKKwkJICAgYXMgdGhhdCBzb21ldGltZXMgbGVhZHMgdG8ganVtcHMgaW4gdGhlIGV4cG9zdXJlIGNvbnRyb2wsCisJCSAgIHdoaWNoIGFyZSBiYWQgZm9yIGF1dG8gZXhwb3N1cmUuICovCisJCWlmIChzZC0+ZXhwb3N1cmUgPCAyMDApIHsKKwkJCWkyY3BleHBvWzNdID0gMjU1IC0gKHNkLT5leHBvc3VyZSAqIDI1NSkgLyAyMDA7CisJCQlmcmFtZXJhdGVfY3RybCA9IDUwMDsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBQQVMyMDIncyBleHBvc3VyZSBjb250cm9sIGdvZXMgZnJvbSAwIC0gNDA5NSwKKwkJCSAgIGJ1dCBhbnl0aGluZyBiZWxvdyA1MDAgY2F1c2VzIHZzeW5jIGlzc3Vlcywgc28gc2NhbGUKKwkJCSAgIG91ciAyMDAtMTAyMyB0byA1MDAtNDA5NSAqLworCQkJZnJhbWVyYXRlX2N0cmwgPSAoc2QtPmV4cG9zdXJlIC0gMjAwKSAqIDEwMDAgLyAyMjkgKworCQkJCQkgNTAwOworCQl9CisKKwkJaTJjcGZyYW1lcmF0ZVszXSA9IGZyYW1lcmF0ZV9jdHJsID4+IDY7CisJCWkyY3BmcmFtZXJhdGVbNF0gPSBmcmFtZXJhdGVfY3RybCAmIDB4M2Y7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BmcmFtZXJhdGUpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZXhwbykgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsKKwkJYnJlYWs7CisJICAgIH0KKwljYXNlIFNFTlNPUl9QQVMxMDY6IHsKKwkJX191OCBpMmNwZnJhbWVyYXRlW10gPQorCQkJezB4YjEsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTR9OworCQlfX3U4IGkyY3BleHBvW10gPQorCQkJezB4YTEsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTR9OworCQljb25zdCBfX3U4IGkyY3Bkb2l0W10gPQorCQkJezB4YTEsIDB4NDAsIDB4MTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTR9OworCQlpbnQgZnJhbWVyYXRlX2N0cmw7CisKKwkJLyogRm9yIHZhbHVlcyBiZWxvdyAxNTAgdXNlIHBhcnRpYWwgZnJhbWUgZXhwb3N1cmUsIGFib3ZlCisJCSAgIHRoYXQgdXNlIGZyYW1lcmF0ZSBjdHJsICovCisJCWlmIChzZC0+ZXhwb3N1cmUgPCAxNTApIHsKKwkJCWkyY3BleHBvWzNdID0gMTUwIC0gc2QtPmV4cG9zdXJlOworCQkJZnJhbWVyYXRlX2N0cmwgPSAzMDA7CisJCX0gZWxzZSB7CisJCQkvKiBUaGUgUEFTMTA2J3MgZXhwb3N1cmUgY29udHJvbCBnb2VzIGZyb20gMCAtIDQwOTUsCisJCQkgICBidXQgYW55dGhpbmcgYmVsb3cgMzAwIGNhdXNlcyB2c3luYyBpc3N1ZXMsIHNvIHNjYWxlCisJCQkgICBvdXIgMTUwLTEwMjMgdG8gMzAwLTQwOTUgKi8KKwkJCWZyYW1lcmF0ZV9jdHJsID0gKHNkLT5leHBvc3VyZSAtIDE1MCkgKiAxMDAwIC8gMjMwICsKKwkJCQkJIDMwMDsKKwkJfQorCisJCWkyY3BmcmFtZXJhdGVbM10gPSBmcmFtZXJhdGVfY3RybCA+PiA0OworCQlpMmNwZnJhbWVyYXRlWzRdID0gZnJhbWVyYXRlX2N0cmwgJiAweDBmOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZnJhbWVyYXRlKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGV4cG8pIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZG9pdCkgPCAwKQorCQkJZ290byBlcnI7CiAJCWJyZWFrOwogCSAgICB9CiAJfQorCXJldHVybjsKK2VycjoKKwlQREVCVUcoRF9FUlIsICJpMmMgZXJyb3IgZXhwb3N1cmUiKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC04MjMsMzAgKzk3OSw0MyBAQAogCX0KIH0KIAorI2luY2x1ZGUgImNvYXJzZV9leHBvX2F1dG9nYWluLmgiCisKIHN0YXRpYyB2b2lkIGRvX2F1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgZGVhZHpvbmUsIGRlc2lyZWRfYXZnX2x1bTsKKwlpbnQgZGVhZHpvbmUsIGRlc2lyZWRfYXZnX2x1bSwgcmVzdWx0OwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgYXZnX2x1bSA9IGF0b21pY19yZWFkKCZzZC0+YXZnX2x1bSk7CiAKLQlpZiAoYXZnX2x1bSA9PSAtMSkKKwlpZiAoYXZnX2x1bSA9PSAtMSB8fCAhc2QtPmF1dG9nYWluKQogCQlyZXR1cm47CiAKKwlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKSB7CisJCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzLS07CisJCXJldHVybjsKKwl9CisKIAkvKiBTSUYgLyBWR0Egc2Vuc29ycyBoYXZlIGEgZGlmZmVyZW50IGF1dG9leHBvc3VyZSBhcmVhIGFuZCB0aHVzCiAJICAgZGlmZmVyZW50IGF2Z19sdW0gdmFsdWVzIGZvciB0aGUgc2FtZSBwaWN0dXJlIGJyaWdodG5lc3MgKi8KIAlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX1NJRikgewotCQlkZWFkem9uZSA9IDEwMDA7Ci0JCWRlc2lyZWRfYXZnX2x1bSA9IDcwMDA7CisJCWRlYWR6b25lID0gNTAwOworCQkvKiBTSUYgc2Vuc29ycyB0ZW5kIHRvIG92ZXJleHBvc2UsIHNvIGtlZXAgdGhpcyBzbWFsbCAqLworCQlkZXNpcmVkX2F2Z19sdW0gPSA1MDAwOwogCX0gZWxzZSB7Ci0JCWRlYWR6b25lID0gMzAwMDsKLQkJZGVzaXJlZF9hdmdfbHVtID0gMjMwMDA7CisJCWRlYWR6b25lID0gMTUwMDsKKwkJZGVzaXJlZF9hdmdfbHVtID0gMTgwMDA7CiAJfQogCi0JaWYgKHNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID4gMCkKLQkJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMtLTsKLQllbHNlIGlmIChnc3BjYV9hdXRvX2dhaW5fbl9leHBvc3VyZShnc3BjYV9kZXYsIGF2Z19sdW0sCi0JCQlzZC0+YnJpZ2h0bmVzcyAqIGRlc2lyZWRfYXZnX2x1bSAvIDEyNywKLQkJCWRlYWR6b25lLCBHQUlOX0tORUUsIEVYUE9TVVJFX0tORUUpKSB7CisJaWYgKHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmZsYWdzICYgRl9DT0FSU0VfRVhQTykKKwkJcmVzdWx0ID0gZ3NwY2FfY29hcnNlX2dyYWluZWRfZXhwb19hdXRvZ2Fpbihnc3BjYV9kZXYsIGF2Z19sdW0sCisJCQkJc2QtPmJyaWdodG5lc3MgKiBkZXNpcmVkX2F2Z19sdW0gLyAxMjcsCisJCQkJZGVhZHpvbmUpOworCWVsc2UKKwkJcmVzdWx0ID0gZ3NwY2FfYXV0b19nYWluX25fZXhwb3N1cmUoZ3NwY2FfZGV2LCBhdmdfbHVtLAorCQkJCXNkLT5icmlnaHRuZXNzICogZGVzaXJlZF9hdmdfbHVtIC8gMTI3LAorCQkJCWRlYWR6b25lLCBHQUlOX0tORUUsIEVYUE9TVVJFX0tORUUpOworCisJaWYgKHJlc3VsdCkgewogCQlQREVCVUcoRF9GUkFNLCAiYXV0b2dhaW46IGdhaW4gY2hhbmdlZDogZ2FpbjogJWQgZXhwbzogJWQiLAogCQkJKGludClzZC0+Z2FpbiwgKGludClzZC0+ZXhwb3N1cmUpOwogCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA9IEFVVE9HQUlOX0lHTk9SRV9GUkFNRVM7CkBAIC04ODEsNyArMTA1MCwxMyBAQAogCiAJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAlzZC0+Z2FpbiA9IEdBSU5fREVGOwotCXNkLT5leHBvc3VyZSA9IEVYUE9TVVJFX0RFRjsKKwlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0NPQVJTRV9FWFBPKSB7CisJCXNkLT5leHBvc3VyZSA9IENPQVJTRV9FWFBPU1VSRV9ERUY7CisJCWdzcGNhX2Rldi0+Y3RybF9kaXMgfD0gKDEgPDwgRVhQT1NVUkVfSURYKTsKKwl9IGVsc2UgeworCQlzZC0+ZXhwb3N1cmUgPSBFWFBPU1VSRV9ERUY7CisJCWdzcGNhX2Rldi0+Y3RybF9kaXMgfD0gKDEgPDwgQ09BUlNFX0VYUE9TVVJFX0lEWCk7CisJfQogCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQVVUT0dBSU5fSURYKSkKIAkJc2QtPmF1dG9nYWluID0gMDsgLyogRGlzYWJsZSBkb19hdXRvZ2FpbiBjYWxsYmFjayAqLwogCWVsc2UKQEAgLTkxNyw5ICsxMDkyLDYgQEAKIAlyZWcxMl8xOVs2XSA9IHNuOWMxMHhbMHgxOCAtIDFdIHwgKG1vZGUgPDwgNCk7CiAJLyogU3BlY2lhbCBjYXNlcyB3aGVyZSByZWcgMTcgYW5kIG9yIDE5IHZhbHVlIGRlcGVuZHMgb24gbW9kZSAqLwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX1BBUzIwMjoKLQkJcmVnMTJfMTlbNV0gPSBtb2RlID8gMHgyNCA6IDB4MjA7Ci0JCWJyZWFrOwogCWNhc2UgU0VOU09SX1RBUzUxMzBDWFg6CiAJCS8qIHByb2JhYmx5IG5vdCBtb2RlIHNwZWNpZmljIGF0IGFsbCBtb3N0IGxpa2VseSB0aGUgdXBwZXIKIAkJICAgbmliYmxlIG9mIDB4MTkgaXMgZXhwb3N1cmUgKGNsb2NrIGRpdmlkZXIpIGp1c3QgYXMgd2l0aApAQCAtOTU1LDYgKzExMjcsMTYgQEAKIAkJCXNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnNlbnNvcl9icmlkZ2VfaW5pdF9zaXplWwogCQkJCXNkLT5icmlkZ2VdKTsKIAorCS8qIE1vZGUgc3BlY2lmaWMgc2Vuc29yIHNldHVwICovCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfUEFTMjAyOiB7CisJCWNvbnN0IF9fdTggaTJjcGNsb2NrZGl2W10gPQorCQkJezB4YTAsIDB4NDAsIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9OworCQkvKiBjbG9ja2RpdiBmcm9tIDQgdG8gMyAoNy41IC0+IDEwIGZwcykgd2hlbiBpbiBsb3cgcmVzIG1vZGUgKi8KKwkJaWYgKG1vZGUpCisJCQlpMmNfdyhnc3BjYV9kZXYsIGkyY3BjbG9ja2Rpdik7CisJICAgIH0KKwl9CiAJLyogSF9zaXplIFZfc2l6ZSAweDI4LCAweDFlIC0+IDY0MHg0ODAuIDB4MTYsIDB4MTIgLT4gMzUyeDI4OCAqLwogCXJlZ193KGdzcGNhX2RldiwgMHgxNSwgJnJlZzEyXzE5WzNdLCAyKTsKIAkvKiBjb21wcmVzc2lvbiByZWdpc3RlciAqLwpAQCAtOTg1LDYgKzExNjcsOCBAQAogCiAJc2QtPmZyYW1lc190b19kcm9wID0gMDsKIAlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA9IDA7CisJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOworCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOwogCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLCAtMSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQzLDExICsxMzI3LDE0IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc2QtPmF1dG9nYWluID0gdmFsOworCXNkLT5leHBfdG9vX2hpZ2hfY250ID0gMDsKKwlzZC0+ZXhwX3Rvb19sb3dfY250ID0gMDsKKwogCS8qIHdoZW4gc3dpdGNoaW5nIHRvIGF1dG9nYWluIHNldCBkZWZhdWx0cyB0byBtYWtlIHN1cmUKIAkgICB3ZSBhcmUgb24gYSB2YWxpZCBwb2ludCBvZiB0aGUgYXV0b2dhaW4gZ2FpbiAvCiAJICAgZXhwb3N1cmUga25lZSBncmFwaCwgYW5kIGdpdmUgdGhpcyBjaGFuZ2UgdGltZSB0bwogCSAgIHRha2UgZWZmZWN0IGJlZm9yZSBkb2luZyBhdXRvZ2Fpbi4gKi8KLQlpZiAoc2QtPmF1dG9nYWluKSB7CisJaWYgKHNkLT5hdXRvZ2FpbiAmJiAhKHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmZsYWdzICYgRl9DT0FSU0VfRVhQTykpIHsKIAkJc2QtPmV4cG9zdXJlID0gRVhQT1NVUkVfREVGOwogCQlzZC0+Z2FpbiA9IEdBSU5fREVGOwogCQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKQEAgLTEyMDcsNiArMTM5NCwyNSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgaW50IHNkX2ludF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGludGVycnVwdCBwYWNrZXQgZGF0YSAqLworCQkJaW50IGxlbikJCS8qIGludGVycnVwdCBwYWNrZXQgbGVuZ3RoICovCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobGVuID09IDEgJiYgZGF0YVswXSA9PSAxKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDEpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMCk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTEyMTksNiArMTQyNSw5IEBACiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKIAkuZHFfY2FsbGJhY2sgPSBkb19hdXRvZ2FpbiwKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkuaW50X3BrdF9zY2FuID0gc2RfaW50X3BrdF9zY2FuLAorI2VuZGlmCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTEyMjcsMjEgKzE0MzYsMjEgQEAKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7Ci0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDEpLCBTQihUQVM1MTEwLCAxMDIpfSwgLyogVEFTNTExMEMxQiAqLwotCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1KSwgU0IoVEFTNTExMCwgMTAxKX0sIC8qIFRBUzUxMTBDMUIgKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIFNCKFRBUzUxMTBDLCAxMDIpfSwgLyogVEFTNTExMEMxQiAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1KSwgU0IoVEFTNTExMEMsIDEwMSl9LCAvKiBUQVM1MTEwQzFCICovCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKLQl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNyksIFNCKFRBUzUxMTAsIDEwMSl9LCAvKiBUQVM1MTEwRCAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA3KSwgU0IoVEFTNTExMEQsIDEwMSl9LCAvKiBUQVM1MTEwRCAqLworI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDkpLCBTQihQQVMxMDYsIDEwMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkKSwgU0IoUEFTMTA2LCAxMDEpfSwKLSNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDExKSwgU0IoT1Y2NjUwLCAxMDEpfSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDE5KSwgU0IoT1Y3NjMwLCAxMDEpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNCksIFNCKFRBUzUxMzBDWFgsIDEwMil9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI1KSwgU0IoVEFTNTEzMENYWCwgMTAyKX0sCisjZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOCksIFNCKFBBUzIwMiwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjkpLCBTQihQQVMxMDYsIDEwMil9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmMpLCBTQihPVjc2MzAsIDEwMil9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJkKSwgU0IoSFY3MTMxUiwgMTAyKX0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCmluZGV4IDBiZDM2YTAuLjgzZDU3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwpAQCAtMjEsNiArMjEsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJzb25peGoiCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAjaW5jbHVkZSAianBlZy5oIgogCkBAIC00NSw2ICs0Niw3IEBACiAJdTggcmVkOwogCXU4IGdhbW1hOwogCXU4IHZmbGlwOwkJCS8qIG92NzYzMC9vdjc2NDggb25seSAqLworCXU4IHNoYXJwbmVzczsKIAl1OCBpbmZyYXJlZDsJCQkvKiBtdDl2MTExIG9ubHkgKi8KIAl1OCBmcmVxOwkJCS8qIG92NzZ4eCBvbmx5ICovCiAJdTggcXVhbGl0eTsJCQkvKiBpbWFnZSBxdWFsaXR5ICovCkBAIC02NCwxNiArNjYsMTcgQEAKICNkZWZpbmUgQlJJREdFX1NOOUMxMTAgMgogI2RlZmluZSBCUklER0VfU045QzEyMCAzCiAJdTggc2Vuc29yOwkJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KLSNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMAotI2RlZmluZSBTRU5TT1JfTUkwMzYwIDEKLSNkZWZpbmUgU0VOU09SX01PNDAwMCAyCi0jZGVmaW5lIFNFTlNPUl9NVDlWMTExIDMKLSNkZWZpbmUgU0VOU09SX09NNjgwMiA0Ci0jZGVmaW5lIFNFTlNPUl9PVjc2MzAgNQotI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDYKLSNkZWZpbmUgU0VOU09SX09WNzY2MCA3Ci0jZGVmaW5lIFNFTlNPUl9QTzEwMzAgOAotI2RlZmluZSBTRU5TT1JfU1A4MDcwOCA5CisjZGVmaW5lIFNFTlNPUl9BRENNMTcwMCAwCisjZGVmaW5lIFNFTlNPUl9IVjcxMzFSIDEKKyNkZWZpbmUgU0VOU09SX01JMDM2MCAyCisjZGVmaW5lIFNFTlNPUl9NTzQwMDAgMworI2RlZmluZSBTRU5TT1JfTVQ5VjExMSA0CisjZGVmaW5lIFNFTlNPUl9PTTY4MDIgNQorI2RlZmluZSBTRU5TT1JfT1Y3NjMwIDYKKyNkZWZpbmUgU0VOU09SX09WNzY0OCA3CisjZGVmaW5lIFNFTlNPUl9PVjc2NjAgOAorI2RlZmluZSBTRU5TT1JfUE8xMDMwIDkKKyNkZWZpbmUgU0VOU09SX1NQODA3MDggMTAKIAl1OCBpMmNfYWRkcjsKIAogCXU4ICpqcGVnX2hkcjsKQEAgLTk2LDEyICs5OSwxNCBAQAogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRpbmZyYXJlZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGluZnJhcmVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKIAl7CiAJICAgIHsKQEAgLTIyNSw4ICsyMzAsMjMgQEAKIAkgICAgLnNldCA9IHNkX3NldHZmbGlwLAogCSAgICAuZ2V0ID0gc2RfZ2V0dmZsaXAsCiAJfSwKKyNkZWZpbmUgU0hBUlBORVNTX0lEWCA4CisJeworCSAgICB7CisJCS5pZAkgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2hhcnBuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBTSEFSUE5FU1NfREVGIDkwCisJCS5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldHNoYXJwbmVzcywKKwkgICAgLmdldCA9IHNkX2dldHNoYXJwbmVzcywKKwl9LAogLyogbXQ5djExMSBvbmx5ICovCi0jZGVmaW5lIElORlJBUkVEX0lEWCA4CisjZGVmaW5lIElORlJBUkVEX0lEWCA5CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfSU5GUkFSRUQsCkBAIC0yNDIsNyArMjYyLDcgQEAKIAkgICAgLmdldCA9IHNkX2dldGluZnJhcmVkLAogCX0sCiAvKiBvdjc2MzAvb3Y3NjQ4L292NzY2MCBvbmx5ICovCi0jZGVmaW5lIEZSRVFfSURYIDkKKyNkZWZpbmUgRlJFUV9JRFggMTAKIAl7CiAJICAgIHsKIAkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLApAQCAtMjYxLDI4ICsyODEsMzcgQEAKIAogLyogdGFibGUgb2YgdGhlIGRpc2FibGVkIGNvbnRyb2xzICovCiBzdGF0aWMgX191MzIgY3RybF9kaXNbXSA9IHsKKwkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IEZSRVFfSURYKSB8CisJCQkoMSA8PCBBVVRPR0FJTl9JRFgpLAkvKiBTRU5TT1JfQURDTTE3MDAgMCAqLworCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCisJCQkJCQkvKiBTRU5TT1JfSFY3MTMxUiAxICovCiAJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfSFY3MTMxUiAwICovCisJCQkJCQkvKiBTRU5TT1JfTUkwMzYwIDIgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IEZSRVFfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9NSTAzNjAgMSAqLwotCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpLAotCQkJCQkJLyogU0VOU09SX01PNDAwMCAyICovCisJCQkJCQkvKiBTRU5TT1JfTU80MDAwIDMgKi8KIAkoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpLAotCQkJCQkJLyogU0VOU09SX01UOVYxMTEgMyAqLworCQkJCQkJLyogU0VOU09SX01UOVYxMTEgNCAqLwogCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpLAotCQkJCQkJLyogU0VOU09SX09NNjgwMiA0ICovCisJCQkJCQkvKiBTRU5TT1JfT002ODAyIDUgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpLAotCQkJCQkJLyogU0VOU09SX09WNzYzMCA1ICovCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDYgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpLAotCQkJCQkJLyogU0VOU09SX09WNzY0OCA2ICovCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDcgKi8KIAkoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjYwIDcgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgOCAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8Ci0JCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9QTzEwMzAgOCAqLworCQkJICAgICAgKDEgPDwgRlJFUV9JRFgpLAkvKiBTRU5TT1JfUE8xMDMwIDkgKi8KIAkoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfAotCQkJICAgICAgKDEgPDwgRlJFUV9JRFgpLAkvKiBTRU5TT1JfU1A4MDcwOCA5ICovCisJCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9TUDgwNzA4IDEwICovCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBjaWZfbW9kZVtdID0geworCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDQgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDB9LAorfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMTYwLApAQCAtMzAyLDYgKzMzMSwxNyBAQAogCQkucHJpdiA9IDB9LAogfTsKIAorc3RhdGljIGNvbnN0IHU4IHNuX2FkY20xNzAwWzB4MWNdID0geworLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCisJMHgwMCwJMHg0MywJMHg2MCwJMHgwMCwJMHgxYSwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLworCTB4ODAsCTB4NTEsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCisvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLworCTB4MDMsCTB4MDAsCTB4MDUsCTB4MDEsCTB4MDUsCTB4MTYsCTB4MTIsCTB4NDIsCisvKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYiAqLworCTB4MDYsCTB4MDAsCTB4MDAsCTB4MDAKK307CisKIC8qRGF0YSBmcm9tIHNuOWMxMDJwK2h2NzEzMXIgKi8KIHN0YXRpYyBjb25zdCB1OCBzbl9odjcxMzFbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KQEAgLTQxNSw2ICs0NTUsNyBAQAogCiAvKiBzZXF1ZW5jZSBzcGVjaWZpYyB0byB0aGUgc2Vuc29ycyAtICEhIGluZGV4ID0gU0VOU09SX3h4eCAqLwogc3RhdGljIGNvbnN0IHU4ICpzbl90YltdID0geworCXNuX2FkY20xNzAwLAogCXNuX2h2NzEzMSwKIAlzbl9taTAzNjAsCiAJc25fbW80MDAwLApAQCAtNDMyLDYgKzQ3MywxMSBAQAogCTB4MDAsIDB4MmQsIDB4NDYsIDB4NWEsIDB4NmMsIDB4N2MsIDB4OGIsIDB4OTksCiAJMHhhNiwgMHhiMiwgMHhiZiwgMHhjYSwgMHhkNSwgMHhlMCwgMHhlYiwgMHhmNSwgMHhmZgogfTsKKy8qIGdhbW1hIGZvciBzZW5zb3IgQURDTTE3MDAgKi8KK3N0YXRpYyBjb25zdCB1OCBnYW1tYV9zcGVjXzBbMTddID0geworCTB4MGYsIDB4MzksIDB4NWEsIDB4NzQsIDB4ODYsIDB4OTUsIDB4YTYsIDB4YjQsCisJMHhiZCwgMHhjNCwgMHhjYywgMHhkNCwgMHhkNSwgMHhkZSwgMHhlNCwgMHhlZCwgMHhmNQorfTsKIC8qIGdhbW1hIGZvciBzZW5zb3JzIEhWNzEzMVIgYW5kIE1UOVYxMTEgKi8KIHN0YXRpYyBjb25zdCB1OCBnYW1tYV9zcGVjXzFbMTddID0gewogCTB4MDgsIDB4M2EsIDB4NTIsIDB4NjUsIDB4NzUsIDB4ODMsIDB4OTEsIDB4OWQsCkBAIC00NTAsNiArNDk2LDQyIEBACiAJMHgzZSwgMHgwMCwgMHhjZCwgMHgwZiwgMHhmNywgMHgwZiwJLyogVlIgVkcgVkIgKi8KIAkweDAwLCAweDAwLCAweDAwCQkJLyogWVVWIG9mZnNldHMgKi8KIH07CitzdGF0aWMgY29uc3QgdTggYWRjbTE3MDBfc2Vuc29yX2luaXRbXVs4XSA9IHsKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MDQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAkvKiByZXNldCAqLworCXsweGRkLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHhiMCwgMHg1MSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweGIwLCAweDUxLCAweDBjLCAweGUwLCAweDJlLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgxMCwgMHgwMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MTQsIDB4MGUsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDFjLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZGQsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweGIwLCAweDUxLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkZCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YjAsIDB4NTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGEwLCAweDUxLCAweGZlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IGFkY20xNzAwX3NlbnNvcl9wYXJhbTFbXVs4XSA9IHsKKwl7MHhiMCwgMHg1MSwgMHgyNiwgMHhmOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCS8qIGV4cG9zdXJlPyAqLworCXsweGQwLCAweDUxLCAweDFlLCAweDhlLCAweDhlLCAweDhlLCAweDhlLCAweDEwfSwKKworCXsweGEwLCAweDUxLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDMyLCAweDAwLCAweDcyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMCwgMHg1MSwgMHgxZSwgMHhiZSwgMHhkNywgMHhlOCwgMHhiZSwgMHgxMH0sCS8qIGV4cG9zdXJlPyAqLworCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MzIsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXt9Cit9Owogc3RhdGljIGNvbnN0IHU4IGh2NzEzMXJfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhjMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YjEsIDB4MTEsIDB4MzQsIDB4MTcsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTB9LApAQCAtOTg2LDE3ICsxMDY4LDE4IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCB1OCAoKnNlbnNvcl9pbml0WzEwXSlbOF0gPSB7Ci0JaHY3MTMxcl9zZW5zb3JfaW5pdCwJLyogSFY3MTMxUiAwICovCi0JbWkwMzYwX3NlbnNvcl9pbml0LAkvKiBNSTAzNjAgMSAqLwotCW1vNDAwMF9zZW5zb3JfaW5pdCwJLyogTU80MDAwIDIgKi8KLQltdDl2MTExX3NlbnNvcl9pbml0LAkvKiBNVDlWMTExIDMgKi8KLQlvbTY4MDJfc2Vuc29yX2luaXQsCS8qIE9NNjgwMiA0ICovCi0Jb3Y3NjMwX3NlbnNvcl9pbml0LAkvKiBPVjc2MzAgNSAqLwotCW92NzY0OF9zZW5zb3JfaW5pdCwJLyogT1Y3NjQ4IDYgKi8KLQlvdjc2NjBfc2Vuc29yX2luaXQsCS8qIE9WNzY2MCA3ICovCi0JcG8xMDMwX3NlbnNvcl9pbml0LAkvKiBQTzEwMzAgOCAqLwotCXNwODA3MDhfc2Vuc29yX2luaXQsCS8qIFNQODA3MDggOSAqLworc3RhdGljIGNvbnN0IHU4ICgqc2Vuc29yX2luaXRbMTFdKVs4XSA9IHsKKwlhZGNtMTcwMF9zZW5zb3JfaW5pdCwJLyogQURDTTE3MDAgMCAqLworCWh2NzEzMXJfc2Vuc29yX2luaXQsCS8qIEhWNzEzMVIgMSAqLworCW1pMDM2MF9zZW5zb3JfaW5pdCwJLyogTUkwMzYwIDIgKi8KKwltbzQwMDBfc2Vuc29yX2luaXQsCS8qIE1PNDAwMCAzICovCisJbXQ5djExMV9zZW5zb3JfaW5pdCwJLyogTVQ5VjExMSA0ICovCisJb202ODAyX3NlbnNvcl9pbml0LAkvKiBPTTY4MDIgNSAqLworCW92NzYzMF9zZW5zb3JfaW5pdCwJLyogT1Y3NjMwIDYgKi8KKwlvdjc2NDhfc2Vuc29yX2luaXQsCS8qIE9WNzY0OCA3ICovCisJb3Y3NjYwX3NlbnNvcl9pbml0LAkvKiBPVjc2NjAgOCAqLworCXBvMTAzMF9zZW5zb3JfaW5pdCwJLyogUE8xMDMwIDkgKi8KKwlzcDgwNzA4X3NlbnNvcl9pbml0LAkvKiBTUDgwNzA4IDEwICovCiB9OwogCiAvKiByZWFkIDxsZW4+IGJ5dGVzIHRvIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLwpAQCAtMTA2NCw2ICsxMTQ3LDcgQEAKIAogCVBERUJVRyhEX1VTQk8sICJpMmNfdzIgWyUwMnhdID0gJTAyeCIsIHJlZywgdmFsKTsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PTTY4MDI6CQkvKiBpMmMgY29tbWFuZCA9IGEwICgxMDAga0h6KSAqLwogCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDgwIHwgKDIgPDwgNCk7CiAJCWJyZWFrOwpAQCAtMTExMCw2ICsxMTk0LDcgQEAKIAl1OCBtb2RlWzhdOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CiAJY2FzZSBTRU5TT1JfT002ODAyOgkJLyogaTJjIGNvbW1hbmQgPSA5MCAoMTAwIGtIeikgKi8KIAkJbW9kZVswXSA9IDB4ODAgfCAweDEwOwogCQlicmVhazsKQEAgLTEyNjAsNyArMTM0NSw4IEBACiAJCXsweDAwLCAweDQwLCAweDM4LCAweDMwLCAweDAwLCAweDIwfTsKIAlzdGF0aWMgY29uc3QgdTggcmVnZDRbXSA9IHsweDYwLCAweDAwLCAweDAwfTsKIAotCXJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOworCS8qIHNlbnNvciBjbG9jayBhbHJlYWR5IGVuYWJsZWQgaW4gc2RfaW5pdCAqLworCS8qIHJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOyAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHNuOWMxeHhbMV0pOwogCiAJLyogY29uZmlndXJlIGdwaW8gKi8KQEAgLTEyODQsNiArMTM3MCwxMiBAQAogCXJlZ193KGdzcGNhX2RldiwgMHgwMywgJnNuOWMxeHhbM10sIDB4MGYpOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDMpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDYyKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDIpOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9NVDlWMTExOgogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDYxKTsKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHg2MSk7CkBAIC0xMzU3LDE0ICsxNDQ5LDE5IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKIAotCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7Ci0JY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKLQljYW0tPm5wa3QgPSAyNDsJCQkvKiAyNCBwYWNrZXRzIHBlciBJU09DIG1lc3NhZ2UgKi8KLQogCXNkLT5icmlkZ2UgPSBpZC0+ZHJpdmVyX2luZm8gPj4gMTY7CiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKIAorCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfQURDTTE3MDApIHsKKwkJY2FtLT5jYW1fbW9kZSA9IGNpZl9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoY2lmX21vZGUpOworCX0gZWxzZSB7CisJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwl9CisJY2FtLT5ucGt0ID0gMjQ7CQkJLyogMjQgcGFja2V0cyBwZXIgSVNPQyBtZXNzYWdlICovCisKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKIAlzZC0+Y29sb3JzID0gQ09MT1JfREVGOwpAQCAtMTM3NCw2ICsxNDcxLDE0IEBACiAJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwogCXNkLT5hZ19jbnQgPSAtMTsKIAlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfT002ODAyOgorCQlzZC0+c2hhcnBuZXNzID0gMHgxMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CisJCWJyZWFrOworCX0KIAlzZC0+aW5mcmFyZWQgPSBJTkZSQVJFRF9ERUY7CiAJc2QtPmZyZXEgPSBGUkVRX0RFRjsKIAlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwpAQCAtMTQzMyw3ICsxNTM4LDkgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMSk7CisJLyogTm90ZSB3ZSBkbyBub3QgZGlzYWJsZSB0aGUgc2Vuc29yIGNsb2NrIGhlcmUgKHBvd2VyIHNhdmluZyBtb2RlKSwKKwkgICBhcyB0aGF0IGFsc28gZGlzYWJsZXMgdGhlIGJ1dHRvbiBvbiB0aGUgY2FtLiAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOwogCiAJLyogc2V0IHRoZSBpMmMgYWRkcmVzcyAqLwogCXNuOWMxeHggPSBzbl90YltzZC0+c2Vuc29yXTsKQEAgLTE1NDMsNiArMTY1MCwxMCBAQAogCiAJazIgPSAoKGludCkgc2QtPmJyaWdodG5lc3MgLSAweDgwMDApID4+IDEwOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgorCQlpZiAoazIgPiAweDFmKQorCQkJazIgPSAwOwkJLyogb25seSBwb3NpdGl2ZSBZIG9mZnNldCAqLworCQlicmVhazsKIAljYXNlIFNFTlNPUl9IVjcxMzFSOgogCQlleHBvID0gc2QtPmJyaWdodG5lc3MgPDwgNDsKIAkJaWYgKGV4cG8gPiAweDAwMmRjNmMwKQpAQCAtMTYyNSw2ICsxNzM2LDkgQEAKIAl9OwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCWdhbW1hX2Jhc2UgPSBnYW1tYV9zcGVjXzA7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJY2FzZSBTRU5TT1JfTVQ5VjExMToKIAkJZ2FtbWFfYmFzZSA9IGdhbW1hX3NwZWNfMTsKQEAgLTE2NzAsMjMgKzE3ODQsMzkgQEAKIAkJc2QtPmFnX2NudCA9IC0xOwogfQogCi0vKiBvdjc2MzAvb3Y3NjQ4IG9ubHkgKi8KKy8qIGh2NzEzMXIvb3Y3NjMwL292NzY0OCBvbmx5ICovCiBzdGF0aWMgdm9pZCBzZXR2ZmxpcChzdHJ1Y3Qgc2QgKnNkKQogewogCXU4IGNvbW47CiAKIAlpZiAoc2QtPmdzcGNhX2Rldi5jdHJsX2RpcyAmICgxIDw8IFZGTElQX0lEWCkpCiAJCXJldHVybjsKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjMwKSB7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKKwkJY29tbiA9IDB4MTg7CQkJLyogY2xrZGl2ID0gMSwgYWJsY2VuID0gMSAqLworCQlpZiAoc2QtPnZmbGlwKQorCQkJY29tbiB8PSAweDAxOworCQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4MDEsIGNvbW4pOwkvKiBzY3RyYSAqLworCQlicmVhazsKKwljYXNlIFNFTlNPUl9PVjc2MzA6CiAJCWNvbW4gPSAweDAyOwogCQlpZiAoIXNkLT52ZmxpcCkKIAkJCWNvbW4gfD0gMHg4MDsKLQl9IGVsc2UgeworCQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4NzUsIGNvbW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfT1Y3NjQ4OiAqLwogCQljb21uID0gMHgwNjsKIAkJaWYgKHNkLT52ZmxpcCkKIAkJCWNvbW4gfD0gMHg4MDsKKwkJaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LCBjb21uKTsKKwkJYnJlYWs7CiAJfQotCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwgY29tbik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3Qgc2QgKnNkKQoreworCXJlZ193MSgmc2QtPmdzcGNhX2RldiwgMHg5OSwgc2QtPnNoYXJwbmVzcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGluZnJhcmVkKHN0cnVjdCBzZCAqc2QpCkBAIC0xODA0LDYgKzE5MzQsOCBAQAogCWludCBtb2RlOwogCXN0YXRpYyBjb25zdCB1OCBDMFtdID0geyAweDJkLCAweDJkLCAweDNhLCAweDA1LCAweDA0LCAweDNmIH07CiAJc3RhdGljIGNvbnN0IHU4IENBW10gPSB7IDB4MjgsIDB4ZDgsIDB4MTQsIDB4ZWMgfTsKKwlzdGF0aWMgY29uc3QgdTggQ0FfYWRjbTE3MDBbXSA9CisJCQkJeyAweDE0LCAweGVjLCAweDBhLCAweGY2IH07CiAJc3RhdGljIGNvbnN0IHU4IENFW10gPSB7IDB4MzIsIDB4ZGQsIDB4MmQsIDB4ZGQgfTsJLyogTUkwMzYwICovCiAJc3RhdGljIGNvbnN0IHU4IENFX292NzZ4eFtdID0KIAkJCQl7IDB4MzIsIDB4ZGQsIDB4MzIsIDB4ZGQgfTsKQEAgLTE4MjQsNiArMTk1Niw5IEBACiAJaTJjX3dfc2VxKGdzcGNhX2Rldiwgc2Vuc29yX2luaXRbc2QtPnNlbnNvcl0pOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCXJlZzIgPSAweDYwOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCXJlZzIgPSAweDcxOwogCQlicmVhazsKQEAgLTE4NDIsMTcgKzE5NzcsMjggQEAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDEyLCBzbjljMXh4WzB4MTJdKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDEzLCBzbjljMXh4WzB4MTNdKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCBzbjljMXh4WzB4MThdKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGQyLCAweDZhKTsJCS8qIERDMjkgKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGQzLCAweDUwKTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfQURDTTE3MDApIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhkMiwgMHgzYSk7CS8qIEFFX0hfU0laRSA9IDExNiAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGQzLCAweDMwKTsJLyogQUVfVl9TSVpFID0gOTYgKi8KKwl9IGVsc2UgeworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGQyLCAweDZhKTsJLyogQUVfSF9TSVpFID0gMjEyICovCisJCXJlZ193MShnc3BjYV9kZXYsIDB4ZDMsIDB4NTApOwkvKiBBRV9WX1NJWkUgPSAxNjAgKi8KKwl9CiAJcmVnX3cxKGdzcGNhX2RldiwgMHhjNiwgMHgwMCk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHhjNywgMHgwMCk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHhjOCwgMHg1MCk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHhjOSwgMHgzYyk7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0FEQ00xNzAwKSB7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4YzgsIDB4MmMpOwkvKiBBV19IX1NUT1AgPSAzNTIgKi8KKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOSwgMHgyNCk7CS8qIEFXX1ZfU1RPUCA9IDI4OCAqLworCX0gZWxzZSB7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4YzgsIDB4NTApOwkvKiBBV19IX1NUT1AgPSA2NDAgKi8KKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOSwgMHgzYyk7CS8qIEFXX1ZfU1RPUCA9IDQ4MCAqLworCX0KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCBzbjljMXh4WzB4MThdKTsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9NVDlWMTExOgogCQlyZWcxNyA9IDB4ZTA7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgogCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJcmVnMTcgPSAweGUyOwogCQlicmVhazsKQEAgLTE4NzAsNDQgKzIwMTYsMzkgQEAKIAkJYnJlYWs7CiAJfQogCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIHJlZzE3KTsKLS8qIHNldCByZWcxIHdhcyBoZXJlICovCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgc245YzF4eFs1XSk7CS8qIHJlZCAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIHNuOWMxeHhbN10pOwkvKiBncmVlbiAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIHNuOWMxeHhbNl0pOwkvKiBibHVlICovCisKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA1LCAweDAwKTsJCS8qIHJlZCAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIDB4MDApOwkJLyogZ3JlZW4gKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA2LCAweDAwKTsJCS8qIGJsdWUgKi8KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE0LCBzbjljMXh4WzB4MTRdKTsKIAogCXNldGdhbW1hKGdzcGNhX2Rldik7CiAKKy8qZml4bWU6IDggdGltZXMgd2l0aCBhbGwgemVyb2VzIGFuZCAxIG9yIDIgdGltZXMgd2l0aCBub3JtYWwgdmFsdWVzICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDg0LCByZWc4NCwgc2l6ZW9mIHJlZzg0KTsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQljYXNlIFNFTlNPUl9NVDlWMTExOgotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA3KTsKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5OSwgMHg1OSk7Ci0JCWJyZWFrOwotCWNhc2UgU0VOU09SX09NNjgwMjoKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwOCk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4MTApOwotCQlicmVhazsKLQljYXNlIFNFTlNPUl9PVjc2NDg6Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MGEpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDYwKTsKLQkJYnJlYWs7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CiAJY2FzZSBTRU5TT1JfT1Y3NjYwOgogCWNhc2UgU0VOU09SX1NQODA3MDg6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDUpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDU5KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTVQ5VjExMToKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNyk7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzY0ODoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwYSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDgpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDU5KTsKIAkJYnJlYWs7CiAJfQorCXNldHNoYXJwbmVzcyhzZCk7CiAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0LCBzaXplb2YgcmVnODQpOwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDUsIHNuOWMxeHhbNV0pOwkvKiByZWQgKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDA3LCBzbjljMXh4WzddKTsJLyogZ3JlZW4gKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDA2LCBzbjljMXh4WzZdKTsJLyogYmx1ZSAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4MDUsIDB4MjApOwkJLyogcmVkICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgMHgyMCk7CQkvKiBncmVlbiAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIDB4MjApOwkJLyogYmx1ZSAqLwogCiAJaW5pdCA9IE5VTEw7CiAJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwpAQCAtMTkxNyw2ICsyMDU4LDExIEBACiAJCXJlZzEgPSAweDA2OwkvKiA2NDB4NDgwOiBjbGsgMjRNaHosIHZpZGVvIHRyZiBlbmFibGUgKi8KIAlyZWcxNyA9IDB4NjE7CQkvKiAweDoyMDogZW5hYmxlIHNlbnNvciBjbG9jayAqLwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgorCQlpbml0ID0gYWRjbTE3MDBfc2Vuc29yX3BhcmFtMTsKKwkJcmVnMSA9IDB4NDY7CisJCXJlZzE3ID0gMHhlMjsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfTU80MDAwOgogCQlpZiAobW9kZSkgewogLyoJCQlyZWcxID0gMHg0NjsJICogMzIwIGNsayA0OE1oeiA2MGZwL3MgKi8KQEAgLTE5NDAsNyArMjA4Niw2IEBACiAJCXJlZzE3ID0gMHg2NDsJCS8qIDY0MCBNQ0tTSVpFICovCiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzYzMDoKLQkJc2V0dmZsaXAoc2QpOwogCQlyZWcxNyA9IDB4ZTI7CiAJCXJlZzEgPSAweDQ0OwogCQlicmVhazsKQEAgLTE5ODYsOCArMjEzMSwxMiBAQAogCX0KIAogCXJlZ193KGdzcGNhX2RldiwgMHhjMCwgQzAsIDYpOwotCXJlZ193KGdzcGNhX2RldiwgMHhjYSwgQ0EsIDQpOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9BRENNMTcwMCkKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQV9hZGNtMTcwMCwgNCk7CisJZWxzZQorCQlyZWdfdyhnc3BjYV9kZXYsIDB4Y2EsIENBLCA0KTsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PVjc2MzA6CiAJY2FzZSBTRU5TT1JfT1Y3NjQ4OgogCWNhc2UgU0VOU09SX09WNzY2MDoKQEAgLTIwMDgsMTEgKzIxNTcsNyBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIHJlZzE3KTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCByZWcxKTsKIAotCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX09WNzYzMDoKLQkJc2V0dmZsaXAoc2QpOwotCQlicmVhazsKLQl9CisJc2V0dmZsaXAoc2QpOwogCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAlzZXRjb250cmFzdChnc3BjYV9kZXYpOwogCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CkBAIC0yMDU2LDcgKzIyMDEsOCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIHNuOWMxeHhbMHgxN10pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHNuOWMxeHhbMV0pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIGRhdGEpOwotCXJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOworCS8qIERvbid0IGRpc2FibGUgc2Vuc29yIGNsb2NrIGFzIHRoYXQgZGlzYWJsZXMgdGhlIGJ1dHRvbiBvbiB0aGUgY2FtICovCisJLyogcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMSk7ICovCiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTIyODgsNiArMjQzNCwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+c2hhcnBuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKHNkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+c2hhcnBuZXNzOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTIzOTEsNiArMjU1NSwyNSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgaW50IHNkX2ludF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGludGVycnVwdCBwYWNrZXQgZGF0YSAqLworCQkJaW50IGxlbikJCS8qIGludGVycnVwdCBwYWNrZXQgbGVuZ3RoICovCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobGVuID09IDEgJiYgZGF0YVswXSA9PSAxKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDEpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMCk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTI0MDYsNiArMjU4OSw5IEBACiAJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKIAkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKKyNlbmRpZgogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC0yNDcyLDYgKzI2NTgsNyBAQAogLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDIpLCBCUyhTTjlDMTIwLCBQTzIwMzBOKX0sCSAqc245YzEyMGIqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTQzKSwgQlMoU045QzEyMCwgU1A4MDcwOCl9LAkvKnNuOWMxMjBiKi8KIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0OCksIEJTKFNOOUMxMjAsIE9NNjgwMil9LAkvKnNuOWMxMjBiKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0YSksIEJTKFNOOUMxMjAsIEFEQ00xNzAwKX0sCS8qc245YzEyMGIqLwogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCmluZGV4IGZlNDY4NjguLmI4NjZjNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCkBAIC02OCw3ICs2OCw3IEBACiBzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xMDQ3LDcgKzEwNDcsNyBAQAogfQogCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwppbmRleCA2NzYxYTMwLi5jOTkzMzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwpAQCAtNTksNyArNTksNyBAQAogc3RhdGljIGludCBzZF9zZXRyZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIE1ZX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwppbmRleCAwZjkyMzJmLi5jNTc2ZWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwpAQCAtNDIsNyArNDIsNyBAQAogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCmluZGV4IDM5MjU3ZTQuLjg5ZmVjNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCkBAIC01MSw3ICs1MSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogI2RlZmluZSBTRF9CUklHSFRORVNTIDAKIAl7CiAJICAgIHsKQEAgLTY3Myw3ICs2NzMsNyBAQAogfQogCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwppbmRleCA0ZDhlNmNmLi4xNWIyZWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwpAQCAtNDUsNyArNDUsNyBAQAogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1NjEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCmluZGV4IDU4YzJmMDAuLmRjN2YyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCkBAIC05MjIsNyArOTIyLDcgQEAKIH0KIAogLyogY29udHJvbCB0YWJsZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc18xMmFbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc18xMmFbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkID0gVjRMMl9DSURfSFVFLApAQCAtOTY0LDcgKzk2NCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc183MmFbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc183MmFbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkID0gVjRMMl9DSURfSFVFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMKaW5kZXggZDcwYjE1Ni4uZTY0NjYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCkBAIC00Nyw2ICs0Nyw3IEBACiAKIC8qIENvbW1hbmRzLiBUaGVzZSBnbyBpbiB0aGUgInZhbHVlIiBzbG90LiAqLwogI2RlZmluZSBTUTkwNUNfQ0xFQVIgICAweGEwCQkvKiBjbGVhciBldmVyeXRoaW5nICovCisjZGVmaW5lIFNROTA1Q19HRVRfSUQgIDB4MTRmNAkJLyogUmVhZCB2ZXJzaW9uIG51bWJlciAqLwogI2RlZmluZSBTUTkwNUNfQ0FQVFVSRV9MT1cgMHhhMDQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDE2MHgxMjAgKi8KICNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfTUVEIDB4MTQ0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCiAjZGVmaW5lIFNROTA1Q19DQVBUVVJFX0hJIDB4Mjg0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCkBAIC0xMDEsNiArMTAyLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3E5MDVjX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgY29tbWFuZCwgdTE2IGluZGV4LAorCQkgICAgICAgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgICBVU0JfUkVRX1NZTkNIX0ZSQU1FLAkJLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICBjb21tYW5kLCBpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBzaXplLAorCQkJICAgICAgU1E5MDVDX0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwKKwkJICAgICAgIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBhbmQgcnVucyB3aGVuZXZlciB0aGUgY2FtZXJhCiAgKiBpcyBzdHJlYW1pbmcgZGF0YS4gQmVjYXVzZSBpdCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBpdCBpcyBhbGxvd2VkIHRvIHNsZWVwCiAgKiBzbyB3ZSBjYW4gdXNlIHN5bmNocm9ub3VzIFVTQiBjYWxscy4gVG8gYXZvaWQgcG9zc2libGUgY29sbGlzaW9ucyB3aXRoIG90aGVyCkBAIC0xODMsMTMgKzIwNCwzNCBAQAogewogCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CiAKIAlQREVCVUcoRF9QUk9CRSwKIAkJIlNROTA1MCBjYW1lcmEgZGV0ZWN0ZWQiCiAJCSIgKHZpZC9waWQgMHglMDRYOjB4JTA0WCkiLCBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCisJcmV0ID0gc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfR0VUX0lELCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJHZXQgdmVyc2lvbiBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNxOTA1Y19yZWFkKGdzcGNhX2RldiwgMHhmNSwgMCwgMjApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIlJlYWRpbmcgdmVyc2lvbiBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBOb3RlIHdlIGxlYXZlIG91dCB0aGUgdXNiIGlkIGFuZCB0aGUgbWFudWZhY3R1cmluZyBkYXRlICovCisJUERFQlVHKERfUFJPQkUsCisJICAgICAgICJTUTkwNTAgSUQgc3RyaW5nOiAlMDJ4IC0gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAorCQlnc3BjYV9kZXYtPnVzYl9idWZbM10sCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxNF0sIGdzcGNhX2Rldi0+dXNiX2J1ZlsxNV0sCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxNl0sIGdzcGNhX2Rldi0+dXNiX2J1ZlsxN10sCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxOF0sIGdzcGNhX2Rldi0+dXNiX2J1ZlsxOV0pOworCiAJY2FtLT5jYW1fbW9kZSA9IHNxOTA1Y19tb2RlOwogCWNhbS0+bm1vZGVzID0gMjsKLQlpZiAoaWQtPmlkUHJvZHVjdCA9PSAweDkwNTApCisJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlsxNV0gPT0gMCkKIAkJY2FtLT5ubW9kZXMgPSAxOwogCS8qIFdlIGRvbid0IHVzZSB0aGUgYnVmZmVyIGdzcGNhIGFsbG9jYXRlcyBzbyBtYWtlIGl0IHNtYWxsLiAqLwogCWNhbS0+YnVsa19zaXplID0gMzI7CkBAIC0yNTgsNiArMzAwLDcgQEAKIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDVjKX0sCiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkwNTApfSwKKwl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1Mil9LAogCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MTNkKX0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwppbmRleCAyZTI5MzU1Li4wZmI1MzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKQEAgLTUzLDcgKzUzLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNjgwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYwppbmRleCAyYTY5ZDdjLi5lNTBkZDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYwpAQCAtNDUsNyArNDUsNyBAQAogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIH07CiAKIHN0YXRpYyBpbnQgc3R2X3NuZGN0cmwoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc2V0LCB1OCByZXEsIHUxNiB2YWwsCkBAIC01MywyNCArNTMsMjggQEAKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVxX3R5cGUgPSAwOworCXVuc2lnbmVkIGludCBwaXBlID0gMDsKIAogCXN3aXRjaCAoc2V0KSB7CiAJY2FzZSAwOiAvKiAgMHhjMSAgKi8KIAkJcmVxX3R5cGUgPSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UOworCQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSAxOiAvKiAgMHg0MSAgKi8KIAkJcmVxX3R5cGUgPSBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVDsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMjoJLyogIDB4ODAgICovCiAJCXJlcV90eXBlID0gVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9ERVZJQ0U7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOwogCQlicmVhazsKIAljYXNlIDM6CS8qICAweDQwICAqLwogCQlyZXFfdHlwZSA9IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCk7CiAJCWJyZWFrOwogCX0KIAotCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKLQkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LCBwaXBlLAogCQkJICAgICAgcmVxLCByZXFfdHlwZSwKIAkJCSAgICAgIHZhbCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBzaXplLCA1MDApOwogCkBAIC0xMzgsNiArMTQyLDEwIEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAorCS8qIEdpdmUgdGhlIGNhbWVyYSBzb21lIHRpbWUgdG8gc2V0dGxlLCBvdGhlcndpc2UgaW5pdGFsaXphdGlvbiB3aWxsCisJICAgZmFpbCBvbiBob3RwbHVnLCBhbmQgeWVzIGl0IHJlYWxseSBuZWVkcyBhIGZ1bGwgc2Vjb25kLiAqLworCW1zbGVlcCgxMDAwKTsKKwogCS8qIHBpbmcgY2FtZXJhIHRvIGJlIHN1cmUgU1RWMDY4MCBpcyBwcmVzZW50ICovCiAJaWYgKHN0dl9zbmRjdHJsKGdzcGNhX2RldiwgMCwgMHg4OCwgMHg1Njc4LCAweDAyKSAhPSAweDAyIHx8CiAJICAgIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAweDU2IHx8IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSAhPSAweDc4KSB7CkBAIC0xNjksNiArMTc3LDggQEAKIAkJUERFQlVHKERfUFJPQkUsICJDYW1lcmEgc3VwcG9ydHMgQ0lGIG1vZGUiKTsKIAlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzddICYgMHgwMikKIAkJUERFQlVHKERfUFJPQkUsICJDYW1lcmEgc3VwcG9ydHMgVkdBIG1vZGUiKTsKKwlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzddICYgMHgwNCkKKwkJUERFQlVHKERfUFJPQkUsICJDYW1lcmEgc3VwcG9ydHMgUUNJRiBtb2RlIik7CiAJaWYgKGdzcGNhX2Rldi0+dXNiX2J1Zls3XSAmIDB4MDgpCiAJCVBERUJVRyhEX1BST0JFLCAiQ2FtZXJhIHN1cHBvcnRzIFFWR0EgbW9kZSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwppbmRleCA1ZDAyNDFiLi5hZjczZGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKQEAgLTI3LDYgKzI3LDcgQEAKICAqIFAvTiA4NjEwNDAtMDAwMDogU2Vuc29yIFNUIFZWNjQxMCAgICAgICBBU0lDIFNUVjA2MTAgICAtIFF1aWNrQ2FtIFdlYgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgInN0djA2eHhfc2Vuc29yLmgiCiAKIE1PRFVMRV9BVVRIT1IoIkVyaWsgQW5kcsOpbiIpOwpAQCAtMjE5LDYgKzIyMCw3IEBACiAJCWluZm8oIlJlYWQgMHgleCBmcm9tIGFkZHJlc3MgMHgleCIsIGRhdGEsIGkpOwogCX0KIAorCWluZm8oIlRlc3Rpbmcgc3R2MDZ4eCBicmlkZ2UgcmVnaXN0ZXJzIGZvciB3cml0YWJpbGl0eSIpOwogCWZvciAoaSA9IDB4MTQwMDsgaSA8IDB4MTYwZjsgaSsrKSB7CiAJCXN0djA2eHhfcmVhZF9icmlkZ2Uoc2QsIGksICZkYXRhKTsKIAkJYnVmID0gZGF0YTsKQEAgLTIyOSw3ICsyMzEsNyBAQAogCQkJaW5mbygiUmVnaXN0ZXIgMHgleCBpcyByZWFkL3dyaXRlIiwgaSk7CiAJCWVsc2UgaWYgKGRhdGEgIT0gYnVmKQogCQkJaW5mbygiUmVnaXN0ZXIgMHgleCBpcyByZWFkL3dyaXRlLCIKLQkJCSAgICAgImJ1dCBvbmx5IHBhcnRpYWxseSIsIGkpOworCQkJICAgICAiIGJ1dCBvbmx5IHBhcnRpYWxseSIsIGkpOwogCQllbHNlCiAJCQlpbmZvKCJSZWdpc3RlciAweCV4IGlzIHJlYWQtb25seSIsIGkpOwogCkBAIC00MjYsNiArNDI4LDI5IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgaW50IHNkX2ludF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGludGVycnVwdCBwYWNrZXQgZGF0YSAqLworCQkJaW50IGxlbikJCS8qIGludGVycnVwdCBwYWNrZXQgbGVuZ3RoICovCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobGVuID09IDEgJiYgZGF0YVswXSA9PSAweDgwKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDEpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlpZiAobGVuID09IDEgJiYgZGF0YVswXSA9PSAweDg4KSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgc3R2MDZ4eF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogCkBAIC00MzYsNyArNDYxLDEwIEBACiAJLmluaXQgPSBzdHYwNnh4X2luaXQsCiAJLnN0YXJ0ID0gc3R2MDZ4eF9zdGFydCwKIAkuc3RvcE4gPSBzdHYwNnh4X3N0b3BOLAotCS5wa3Rfc2NhbiA9IHN0djA2eHhfcGt0X3NjYW4KKwkucGt0X3NjYW4gPSBzdHYwNnh4X3BrdF9zY2FuLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKaW5kZXggMzA2YjdkNy4uMGM3ODZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKQEAgLTY3LDcgKzY3LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0yNjcsMTQyICsyNjcsNiBAQAogCXsweDA2LCAweDAwMDAsIDB4MDAwMH0sCiAJezB4MDAsIDB4MDAwNCwgMHgyODgwfSwKIAl7MHgwMCwgMHgwMDAxLCAweDI4ODF9LAotLyogbG9vayBsaWtlIHNldHRpbmcgYSBxVGFibGUgKi8KLQl7MHgwMCwgMHgwMDA2LCAweDI4MDB9LAotCXsweDAwLCAweDAwMDQsIDB4MjgwMX0sCi0JezB4MDAsIDB4MDAwNCwgMHgyODAyfSwKLQl7MHgwMCwgMHgwMDA2LCAweDI4MDN9LAotCXsweDAwLCAweDAwMGEsIDB4MjgwNH0sCi0JezB4MDAsIDB4MDAxMCwgMHgyODA1fSwKLQl7MHgwMCwgMHgwMDE0LCAweDI4MDZ9LAotCXsweDAwLCAweDAwMTgsIDB4MjgwN30sCi0JezB4MDAsIDB4MDAwNSwgMHgyODA4fSwKLQl7MHgwMCwgMHgwMDA1LCAweDI4MDl9LAotCXsweDAwLCAweDAwMDYsIDB4MjgwYX0sCi0JezB4MDAsIDB4MDAwOCwgMHgyODBifSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4MGN9LAotCXsweDAwLCAweDAwMTcsIDB4MjgwZH0sCi0JezB4MDAsIDB4MDAxOCwgMHgyODBlfSwKLQl7MHgwMCwgMHgwMDE2LCAweDI4MGZ9LAotCi0JezB4MDAsIDB4MDAwNiwgMHgyODEwfSwKLQl7MHgwMCwgMHgwMDA1LCAweDI4MTF9LAotCXsweDAwLCAweDAwMDYsIDB4MjgxMn0sCi0JezB4MDAsIDB4MDAwYSwgMHgyODEzfSwKLQl7MHgwMCwgMHgwMDEwLCAweDI4MTR9LAotCXsweDAwLCAweDAwMTcsIDB4MjgxNX0sCi0JezB4MDAsIDB4MDAxYywgMHgyODE2fSwKLQl7MHgwMCwgMHgwMDE2LCAweDI4MTd9LAotCXsweDAwLCAweDAwMDYsIDB4MjgxOH0sCi0JezB4MDAsIDB4MDAwNywgMHgyODE5fSwKLQl7MHgwMCwgMHgwMDA5LCAweDI4MWF9LAotCXsweDAwLCAweDAwMGMsIDB4MjgxYn0sCi0JezB4MDAsIDB4MDAxNCwgMHgyODFjfSwKLQl7MHgwMCwgMHgwMDIzLCAweDI4MWR9LAotCXsweDAwLCAweDAwMjAsIDB4MjgxZX0sCi0JezB4MDAsIDB4MDAxOSwgMHgyODFmfSwKLQotCXsweDAwLCAweDAwMDcsIDB4MjgyMH0sCi0JezB4MDAsIDB4MDAwOSwgMHgyODIxfSwKLQl7MHgwMCwgMHgwMDBmLCAweDI4MjJ9LAotCXsweDAwLCAweDAwMTYsIDB4MjgyM30sCi0JezB4MDAsIDB4MDAxYiwgMHgyODI0fSwKLQl7MHgwMCwgMHgwMDJjLCAweDI4MjV9LAotCXsweDAwLCAweDAwMjksIDB4MjgyNn0sCi0JezB4MDAsIDB4MDAxZiwgMHgyODI3fSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4Mjh9LAotCXsweDAwLCAweDAwMGUsIDB4MjgyOX0sCi0JezB4MDAsIDB4MDAxNiwgMHgyODJhfSwKLQl7MHgwMCwgMHgwMDFhLCAweDI4MmJ9LAotCXsweDAwLCAweDAwMjAsIDB4MjgyY30sCi0JezB4MDAsIDB4MDAyYSwgMHgyODJkfSwKLQl7MHgwMCwgMHgwMDJkLCAweDI4MmV9LAotCXsweDAwLCAweDAwMjUsIDB4MjgyZn0sCi0KLQl7MHgwMCwgMHgwMDE0LCAweDI4MzB9LAotCXsweDAwLCAweDAwMWEsIDB4MjgzMX0sCi0JezB4MDAsIDB4MDAxZiwgMHgyODMyfSwKLQl7MHgwMCwgMHgwMDIzLCAweDI4MzN9LAotCXsweDAwLCAweDAwMjksIDB4MjgzNH0sCi0JezB4MDAsIDB4MDAzMCwgMHgyODM1fSwKLQl7MHgwMCwgMHgwMDMwLCAweDI4MzZ9LAotCXsweDAwLCAweDAwMjgsIDB4MjgzN30sCi0JezB4MDAsIDB4MDAxZCwgMHgyODM4fSwKLQl7MHgwMCwgMHgwMDI1LCAweDI4Mzl9LAotCXsweDAwLCAweDAwMjYsIDB4MjgzYX0sCi0JezB4MDAsIDB4MDAyNywgMHgyODNifSwKLQl7MHgwMCwgMHgwMDJkLCAweDI4M2N9LAotCXsweDAwLCAweDAwMjgsIDB4MjgzZH0sCi0JezB4MDAsIDB4MDAyOSwgMHgyODNlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4M2Z9LAotCi0JezB4MDAsIDB4MDAwNywgMHgyODQwfSwKLQl7MHgwMCwgMHgwMDA3LCAweDI4NDF9LAotCXsweDAwLCAweDAwMGEsIDB4Mjg0Mn0sCi0JezB4MDAsIDB4MDAxMywgMHgyODQzfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NDR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0NX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODQ2fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NDd9LAotCXsweDAwLCAweDAwMDcsIDB4Mjg0OH0sCi0JezB4MDAsIDB4MDAwOCwgMHgyODQ5fSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4NGF9LAotCXsweDAwLCAweDAwMWEsIDB4Mjg0Yn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODRjfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NGR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0ZX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODRmfSwKLQotCXsweDAwLCAweDAwMGEsIDB4Mjg1MH0sCi0JezB4MDAsIDB4MDAwYSwgMHgyODUxfSwKLQl7MHgwMCwgMHgwMDE2LCAweDI4NTJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1M30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODU0fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NTV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1Nn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODU3fSwKLQl7MHgwMCwgMHgwMDEzLCAweDI4NTh9LAotCXsweDAwLCAweDAwMWEsIDB4Mjg1OX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVhfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1Y30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVkfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1Zn0sCi0KLQl7MHgwMCwgMHgwMDI4LCAweDI4NjB9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2MX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODYyfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2NH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY1fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjZ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2N30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY4fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Njl9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2YX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZifSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2ZH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmZ9LAotCi0JezB4MDAsIDB4MDAyOCwgMHgyODcwfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzF9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3Mn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODczfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3NX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc2fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Nzd9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3OH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc5fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2F9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3Yn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdjfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2R9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3ZX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdmfSwKIAogCXsweGEwLCAweDAwMDAsIDB4MDUwM30sCiB9OwpAQCAtNjIyLDYgKzQ4NiwyMCBAQAogCVBERUJVRyhEX0ZSQU0sICJhZnRlciB3YWl0IDB4JTA0eCIsIG5vdGRvbmUpOwogfQogCitzdGF0aWMgdm9pZCBzcGNhNTA0X3JlYWRfaW5mbyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGk7CisJdTggaW5mb1s2XTsKKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWluZm9baV0gPSByZWdfcl8xKGdzcGNhX2RldiwgaSk7CisJUERFQlVHKERfU1RSRUFNLAorCQkiUmVhZCBpbmZvOiAlZCAlZCAlZCAlZCAlZCAlZC4iCisJCSIgU2hvdWxkIGJlIDEsMCwyLDIsMCwwIiwKKwkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKKwkJaW5mb1szXSwgaW5mb1s0XSwgaW5mb1s1XSk7Cit9CisKIHN0YXRpYyB2b2lkIHNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXU4IHJlcSwKIAkJCXUxNiBpZHgsIHUxNiB2YWwsIHUxNiBlbmRjb2RlLCB1OCBjb3VudCkKQEAgLTg4MSw4ICs3NTksNiBAQAogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IGk7Ci0JdTggaW5mb1s2XTsKIAogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX1NQQ0E1MDRCOgpAQCAtOTI0LDE1ICs4MDAsOCBAQAogLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KIAkJUERFQlVHKERfU1RSRUFNLCAiT3BlbmluZyBTUENBNTA0Iik7CiAJCWlmIChzZC0+c3VidHlwZSA9PSBBaXB0ZWtNaW5pUGVuQ2FtMTMpIHsKLQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQkJaW5mb1tpXSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCBpKTsKLQkJCVBERUJVRyhEX1NUUkVBTSwKLQkJCQkiUmVhZCBpbmZvOiAlZCAlZCAlZCAlZCAlZCAlZC4iCi0JCQkJIiBTaG91bGQgYmUgMSwwLDIsMiwwLDAiLAotCQkJCWluZm9bMF0sIGluZm9bMV0sIGluZm9bMl0sCi0JCQkJaW5mb1szXSwgaW5mb1s0XSwgaW5mb1s1XSk7Ci0JCQkvKiBzcGNhNTA0YSBhaXB0ZWsgKi8KKwkJCXNwY2E1MDRfcmVhZF9pbmZvKGdzcGNhX2Rldik7CisKIAkJCS8qIFNldCBBRSBBV0IgQmFuZGluZyBUeXBlIDMtPiA1MEh6IDItPiA2MEh6ICovCiAJCQlzcGNhNTA0QV9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsCiAJCQkJCQkJOCwgMywgMHg5ZSwgMSk7CkBAIC05NzEsOCArODQwLDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGVuYWJsZTsKLQlpbnQgaTsKLQl1OCBpbmZvWzZdOwogCiAJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLwogCXNkLT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOwpAQCAtMTAwOCwxNCArODc1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU1BDQTUwNDoKIAkJaWYgKHNkLT5zdWJ0eXBlID09IEFpcHRla01pbmlQZW5DYW0xMykgewotCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCQlpbmZvW2ldID0gcmVnX3JfMShnc3BjYV9kZXYsIGkpOwotCQkJUERFQlVHKERfU1RSRUFNLAotCQkJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKLQkJCQkiIFNob3VsZCBiZSAxLDAsMiwyLDAsMCIsCi0JCQkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKLQkJCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKLQkJCS8qIHNwY2E1MDRhIGFpcHRlayAqLworCQkJc3BjYTUwNF9yZWFkX2luZm8oZ3NwY2FfZGV2KTsKKwogCQkJLyogU2V0IEFFIEFXQiBCYW5kaW5nIFR5cGUgMy0+IDUwSHogMi0+IDYwSHogKi8KIAkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKIAkJCQkJCQk4LCAzLCAweDllLCAxKTsKQEAgLTEwMjYsMTMgKzg4Nyw3IEBACiAJCQkJCQkJMCwgMCwgMHg5ZCwgMSk7CiAJCX0gZWxzZSB7CiAJCQlzcGNhNTA0X2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwgOCwgMyk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJCWluZm9baV0gPSByZWdfcl8xKGdzcGNhX2RldiwgaSk7Ci0JCQlQREVCVUcoRF9TVFJFQU0sCi0JCQkJIlJlYWQgaW5mbzogJWQgJWQgJWQgJWQgJWQgJWQuIgotCQkJCSIgU2hvdWxkIGJlIDEsMCwyLDIsMCwwIiwKLQkJCQlpbmZvWzBdLCBpbmZvWzFdLCBpbmZvWzJdLAotCQkJCWluZm9bM10sIGluZm9bNF0sIGluZm9bNV0pOworCQkJc3BjYTUwNF9yZWFkX2luZm8oZ3NwY2FfZGV2KTsKIAkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCA4LCAzKTsKIAkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCAwLCAwKTsKIAkJfQpAQCAtMTMzNiw2ICsxMTkxLDcgQEAKIAl7VVNCX0RFVklDRSgweDA0ZmMsIDB4NTMzMCksIEJTKFNQQ0E1MzMsIDApfSwKIAl7VVNCX0RFVklDRSgweDA0ZmMsIDB4NTM2MCksIEJTKFNQQ0E1MzYsIDApfSwKIAl7VVNCX0RFVklDRSgweDA0ZmMsIDB4ZmZmZiksIEJTKFNQQ0E1MDRCLCAwKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTJiLCAweDE1MDcpLCBCUyhTUENBNTMzLCBNZWdhcGl4VjQpfSwKIAl7VVNCX0RFVklDRSgweDA1MmIsIDB4MTUxMyksIEJTKFNQQ0E1MzMsIE1lZ2FwaXhWNCl9LAogCXtVU0JfREVWSUNFKDB4MDUyYiwgMHgxODAzKSwgQlMoU1BDQTUzMywgTWVnYUltYWdlVkkpfSwKIAl7VVNCX0RFVklDRSgweDA1NDYsIDB4MzE1NSksIEJTKFNQQ0E1MzMsIDApfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKaW5kZXggNTVlZjZhNy4uNjY4YTc1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNkZWZpbmUgU0VOU09SX09NNjgwMiAwCiAjZGVmaW5lIFNFTlNPUl9PVEhFUiAxCiAjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQSAyCisjZGVmaW5lIFNFTlNPUl9MVDE2OEcgMyAgICAgLyogbXVzdCB2ZXJpZnkgaWYgdGhpcyBpcyB0aGUgYWN0dWFsIG1vZGVsICovCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC03OCw3ICs3OSw3IEBACiBzdGF0aWMgaW50IHNkX3F1ZXJ5bWVudShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTMwNiw2ICszMDcsMTcgQEAKIAkweGJlLCAweDM2LCAweGJmLCAweGZmLCAweGMyLCAweDg4LCAweGM1LCAweGM4LAogCTB4YzYsIDB4ZGEKIH07CitzdGF0aWMgY29uc3QgdTggbjRfbHQxNjhnW10gPSB7CisJMHg2NiwgMHgwMSwgMHg3ZiwgMHgwMCwgMHg4MCwgMHg3YywgMHg4MSwgMHgyOCwKKwkweDgzLCAweDQ0LCAweDg0LCAweDIwLCAweDg2LCAweDIwLCAweDhhLCAweDcwLAorCTB4OGIsIDB4NTgsIDB4OGMsIDB4ODgsIDB4OGQsIDB4YTAsIDB4OGUsIDB4YjMsCisJMHg4ZiwgMHgyNCwgMHhhMSwgMHhiMCwgMHhhMiwgMHgzOCwgMHhhNSwgMHgyMCwKKwkweGE2LCAweDRhLCAweGE4LCAweGU4LCAweGFmLCAweDM4LCAweGIwLCAweDY4LAorCTB4YjEsIDB4NDQsIDB4YjIsIDB4ODgsIDB4YmIsIDB4ODYsIDB4YmQsIDB4NDAsCisJMHhiZSwgMHgyNiwgMHhjMSwgMHgwNSwgMHhjMiwgMHg4OCwgMHhjNSwgMHhjMCwKKwkweGRhLCAweDhlLCAweGRiLCAweGNhLCAweGRjLCAweGE4LCAweGRkLCAweDhjLAorCTB4ZGUsIDB4NDQsIDB4ZGYsIDB4MGMsIDB4ZTksIDB4ODAKK307CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSBzZW5zb3JfZGF0YVtdID0gewogICAgIHsJCQkJLyogMDogT002ODAyICovCkBAIC0zODAsNiArMzkyLDIzIEBACiAJLnN0cmVhbSA9CiAJCXsweDBiLCAweDA0LCAweDBhLCAweDQwfSwKICAgICB9LAorICAgIHsJCQkJLyogMzogTFQxNjhHICovCisJLm4zID0gezB4NjEsIDB4YzIsIDB4NjUsIDB4NjgsIDB4NjAsIDB4MDB9LAorCS5uNCA9IG40X2x0MTY4ZywKKwkubjRzeiA9IHNpemVvZiBuNF9sdDE2OGcsCisJLnJlZzgwID0gMHg3YywKKwkucmVnOGUgPSAweGIzLAorCS5uc2V0OCA9IHsweGE4LCAweGYwLCAweGM2LCAweGJhLCAweGMwLCAweDAwfSwKKwkuZGF0YTEgPSB7MHhjMCwgMHgzOCwgMHgwOCwgMHgxMCwgMHhjMCwgMHgzMCwgMHgxMCwgMHg0MCwKKwkJIDB4YjAsIDB4ZjR9LAorCS5kYXRhMiA9IHsweDQwLCAweDgwLCAweGMwLCAweDUwLCAweGEwLCAweGYwLCAweDUzLCAweGE2LAorCQkgMHhmZn0sCisJLmRhdGEzID0gezB4NDAsIDB4ODAsIDB4YzAsIDB4NTAsIDB4YTAsIDB4ZjAsIDB4NTMsIDB4YTYsCisJCSAweGZmfSwKKwkuZGF0YTQgPSB7MHg2NiwgMHg0MSwgMHhhOCwgMHhmMH0sCisJLmRhdGE1ID0gezB4MGMsIDB4MDMsIDB4YWIsIDB4NGIsIDB4ODEsIDB4MmJ9LAorCS5zdHJlYW0gPSB7MHgwYiwgMHgwNCwgMHgwYSwgMHgyOH0sCisgICAgfSwKIH07CiAKICNkZWZpbmUgTUFYX0VGRkVDVFMgNwpAQCAtNzE2LDYgKzc0NSwxMCBAQAogCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciB0YXM1MTMwYSIpOwogCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBBOwogCQlicmVhazsKKwljYXNlIDB4MDgwMjoKKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgbHQxNjhnIik7CisJCXNkLT5zZW5zb3IgPSBTRU5TT1JfTFQxNjhHOworCQlicmVhazsKIAljYXNlIDB4MDgwMzoKIAkJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgJ290aGVyJyIpOwogCQlzZC0+c2Vuc29yID0gU0VOU09SX09USEVSOwpAQCAtNzU4LDYgKzc5MSwxMyBAQAogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+bjMsIHNpemVvZiBzZW5zb3ItPm4zKTsKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3ItPm40LCBzZW5zb3ItPm40c3opOwogCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0xUMTY4RykgeworCQl0ZXN0X2J5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4ODApOworCQlQREVCVUcoRF9TVFJFQU0sICJSZWcgMHglMDJ4ID0gMHglMDJ4IiwgMHg4MCwKKwkJICAgICAgIHRlc3RfYnl0ZSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg2YzgwKTsKKwl9CisKIAlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZDAsIHNlbnNvci0+ZGF0YTEsIHNpemVvZiBzZW5zb3ItPmRhdGExKTsKIAlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4YzcsIHNlbnNvci0+ZGF0YTIsIHNpemVvZiBzZW5zb3ItPmRhdGEyKTsKIAlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZTAsIHNlbnNvci0+ZGF0YTMsIHNpemVvZiBzZW5zb3ItPmRhdGEzKTsKQEAgLTc4Miw2ICs4MjIsMTMgQEAKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3ItPm5zZXQ4LCBzaXplb2Ygc2Vuc29yLT5uc2V0OCk7CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5zdHJlYW0sIHNpemVvZiBzZW5zb3ItPnN0cmVhbSk7CiAKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTFQxNjhHKSB7CisJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHg4MCk7CisJCVBERUJVRyhEX1NUUkVBTSwgIlJlZyAweCUwMnggPSAweCUwMngiLCAweDgwLAorCQkgICAgICAgdGVzdF9ieXRlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDZjODApOworCX0KKwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhkMCwgc2Vuc29yLT5kYXRhMSwgc2l6ZW9mIHNlbnNvci0+ZGF0YTEpOwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhjNywgc2Vuc29yLT5kYXRhMiwgc2l6ZW9mIHNlbnNvci0+ZGF0YTIpOwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhlMCwgc2Vuc29yLT5kYXRhMywgc2l6ZW9mIHNlbnNvci0+ZGF0YTMpOwpAQCAtODg4LDYgKzkzNSw4IEBACiAJY2FzZSBTRU5TT1JfT002ODAyOgogCQlvbTY4MDJfc2Vuc29yX2luaXQoZ3NwY2FfZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTFQxNjhHOgorCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVEhFUjoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCmluZGV4IGI3NGEzYjYuLmM3YjZlYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwpAQCAtMzksNyArMzksNyBAQAogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCmluZGV4IDcxOTIxYzguLjQ5ODlmOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwpAQCAtMzIsMTAgKzMyLDEzIEBACiBzdHJ1Y3Qgc2QgewogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKKwl1OCBicmlnaHRuZXNzOworCXU4IGNvbnRyYXN0OworCXU4IGNvbG9yczsKIAl1OCBoZmxpcDsKIAl1OCB2ZmxpcDsKIAl1OCBsaWdodGZyZXE7Ci0JdTggc2hhcnBuZXNzOworCXM4IHNoYXJwbmVzczsKIAogCXU4IGltYWdlX29mZnNldDsKIApAQCAtNTIsNiArNTUsNyBAQAogI2RlZmluZSBTRU5TT1JfT1Y3NjcwIDYKICNkZWZpbmUgU0VOU09SX1BPMTIwMCA3CiAjZGVmaW5lIFNFTlNPUl9QTzMxMzBOQyA4CisjZGVmaW5lIFNFTlNPUl9QT3h4eHggOQogCXU4IGZsYWdzOwogI2RlZmluZSBGTF9TQU1TVU5HIDB4MDEJCS8qIFNhbXN1bmdRMSAoMiBzZW5zb3JzKSAqLwogI2RlZmluZSBGTF9IRkxJUCAweDAyCQkvKiBtaXJyb3JlZCBieSBkZWZhdWx0ICovCkBAIC01OSw2ICs2MywxMiBAQAogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRoZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTY4LDkgKzc4LDU0IEBACiBzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDI1NSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAxMjgKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisjZGVmaW5lIENPTlRSQVNUX0lEWCAxCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAxMjcKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAorCX0sCisjZGVmaW5lIENPTE9SU19JRFggMgorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAxMjcsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09MT1JfREVGIDYzCisJCS5kZWZhdWx0X3ZhbHVlID0gQ09MT1JfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Y29sb3JzLAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29sb3JzLAorCX0sCiAvKiBuZXh0IDIgY29udHJvbHMgd29yayB3aXRoIHNvbWUgc2Vuc29ycyBvbmx5ICovCi0jZGVmaW5lIEhGTElQX0lEWCAwCisjZGVmaW5lIEhGTElQX0lEWCAzCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfSEZMSVAsCkBAIC04NSw3ICsxNDAsNyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0aGZsaXAsCiAJICAgIC5nZXQgPSBzZF9nZXRoZmxpcCwKIAl9LAotI2RlZmluZSBWRkxJUF9JRFggMQorI2RlZmluZSBWRkxJUF9JRFggNAogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX1ZGTElQLApAQCAtMTAwLDcgKzE1NSw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXR2ZmxpcCwKIAkgICAgLmdldCA9IHNkX2dldHZmbGlwLAogCX0sCi0jZGVmaW5lIExJR0hURlJFUV9JRFggMgorI2RlZmluZSBMSUdIVEZSRVFfSURYIDUKIAl7CiAJICAgIHsKIAkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLApAQCAtMTE1LDE3ICsxNzAsMTYgQEAKIAkgICAgLnNldCA9IHNkX3NldGZyZXEsCiAJICAgIC5nZXQgPSBzZF9nZXRmcmVxLAogCX0sCi0vKiBwbzEyMDAgb25seSAqLwotI2RlZmluZSBTSEFSUE5FU1NfSURYIDMKKyNkZWZpbmUgU0hBUlBORVNTX0lEWCA2CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCiAJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJICAubmFtZSA9ICJTaGFycG5lc3MiLAotCSAgLm1pbmltdW0gPSAwLAorCSAgLm1pbmltdW0gPSAtMSwKIAkgIC5tYXhpbXVtID0gMiwKIAkgIC5zdGVwID0gMSwKLSNkZWZpbmUgU0hBUlBORVNTX0RFRiAxCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgLTEKIAkgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCkBAIC0xMzMsNiArMTg3LDQyIEBACiAJIH0sCiB9OwogCisvKiB0YWJsZSBvZiB0aGUgZGlzYWJsZWQgY29udHJvbHMgKi8KK3N0YXRpYyB1MzIgY3RybF9kaXNbXSA9IHsKKy8qIFNFTlNPUl9IVjcxMzFSIDAgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBIRkxJUF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IExJR0hURlJFUV9JRFgpCisJCXwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisvKiBTRU5TT1JfTUkwMzYwIDEgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBIRkxJUF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IExJR0hURlJFUV9JRFgpCisJCXwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisvKiBTRU5TT1JfTUkxMzEwX1NPQyAyICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTEzMjAgMyAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IExJR0hURlJFUV9JRFgpIHwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisvKiBTRU5TT1JfTUkxMzIwX1NPQyA0ICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9PVjc2NjAgNSAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IExJR0hURlJFUV9JRFgpIHwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisvKiBTRU5TT1JfT1Y3NjcwIDYgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9QTzEyMDAgNyAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IExJR0hURlJFUV9JRFgpLAorLyogU0VOU09SX1BPMzEzME5DIDggKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBIRkxJUF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IExJR0hURlJFUV9JRFgpCisJCXwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisvKiBTRU5TT1JfUE94eHh4IDkgKi8KKwkoMSA8PCBIRkxJUF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IExJR0hURlJFUV9JRFgpLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmMwMzIxX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCkBAIC0yMTUsNyArMzA1LDcgQEAKIAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAogCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAkvKiBpMmMgYWRkOiA1ZCAqLwogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKIAl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCiAJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LApAQCAtNDM1LDcgKzUyNSw3IEBACiAJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAogCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKIAl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwJLyogaTJjIGFkZDogNWQgKi8KIAl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAogCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKQEAgLTg2MCw3ICs5NTAsOCBAQAogCXsweGIwLCAweDE2LCAweDAzLCAweGNjfSwJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAogCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGM4LCAweGNjfSwJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGM4LCAweGNjfSwJLyogaTJjIGFkZDogNDggKi8KKwl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCiAJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MjIsIDB4MDMsIDB4Y2N9LAl7MHhiMywgMHgyMywgMHhjMCwgMHhjY30sCkBAIC05MDEsNyArOTkyLDggQEAKIAl7MHhjMywgMHgwMSwgMHgwMywgMHhiYn0sCXsweGM0LCAweDAwLCAweDA0LCAweGJifSwKIAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCXsweDA1LCAweDAxLCAweDEzLCAweGJifSwKIAl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCXsweDA3LCAweDAwLCAweDg1LCAweGJifSwKLQl7MHgwOCwgMHgwMCwgMHgyNywgMHhiYn0sCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgyNywgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDAsIDB4YmJ9LAkvKiBoL3YgZmxpcHMgLSB3YXMgMDMgKi8KIAl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKIAl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKIAl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM5LCAweDAzLCAweDBkLCAweGJifSwKQEAgLTEwMTIsNyArMTEwNCw3IEBACiAJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAogCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKIAl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGM4LCAweGNjfSwJLyogaTJjIGFkZDogNDggKi8KIAl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAogCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKQEAgLTEzNTksNyArMTQ1MSw4IEBACiAJezB4YjMsIDB4MjMsIDB4ZTgsIDB4Y2N9LAl7MHhiOCwgMHgwOCwgMHhlOCwgMHhjY30sCiAJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCi0JezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgzNSwgMHhmNiwgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGY2LCAweGNjfSwJLyogaTJjIGFkZDogNzYgKi8KIAl7MHhiMywgMHgwMCwgMHgyNywgMHhjY30sCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKIAl7MHhiOCwgMHgwMCwgMHgyMSwgMHhjY30sCXsweGI4LCAweDI3LCAweDIwLCAweGNjfSwKIAl7MHhiOCwgMHgwMSwgMHg3OSwgMHhjY30sCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKQEAgLTE1NjEsNyArMTY1NCw3IEBACiAJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAogCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKIAl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4OTEsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweDkxLCAweGNjfSwJLyogaTJjIGFkZDogMTEgKi8KIAl7MHhiMywgMHgwMCwgMHgyNywgMHhjY30sCiAJezB4YmMsIDB4MDAsIDB4NzMsIDB4Y2N9LAogCXsweGI4LCAweDAwLCAweDIzLCAweGNjfSwKQEAgLTE3NDcsNyArMTg0MCw4IEBACiAJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAl7MHhiMywgMHgxZCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MWYsIDB4MDIsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhhMSwgMHhjY30sCXsweGIzLCAweDAwLCAweDI2LCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhhMSwgMHhjY30sCS8qIGkyYyBhZGQ6IDIxICovCisJezB4YjMsIDB4MDAsIDB4MjYsIDB4Y2N9LAogCXsweGI4LCAweDAwLCAweDMzLCAweGNjfSwgLyogMTMgKi8KIAl7MHhiOCwgMHgwMSwgMHg3ZCwgMHhjY30sCiAJezB4YmMsIDB4MDAsIDB4NzMsIDB4Y2N9LAl7MHhiOCwgMHg4MSwgMHgwOSwgMHhjY30sCkBAIC0xODgzLDcgKzE5NzcsOCBAQAogCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKIAl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKIAl7MHhiMywgMHgwMCwgMHg2NiwgMHhjY30sCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhhMSwgMHhjY30sCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhhMSwgMHhjY30sCS8qIGkyYyBhZGQ6IDIxICovCisJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAogCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAogCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDAyLCAweDAyLCAweGNjfSwJezB4YjMsIDB4MDMsIDB4MWYsIDB4Y2N9LApAQCAtMjE4MSw3ICsyMjc2LDcgQEAKIAl7MHhiMCwgMHg1NCwgMHgxMywgMHhjY30sCiAJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhkYywgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZGMsIDB4Y2N9LAkvKiBpMmMgYWRkOiA1YyAqLwogCXsweDAwLCAweDAzLCAweDAwLCAweGFhfSwKIAl7MHgwMCwgMHgxMiwgMHgwNSwgMHhhYX0sCiAJezB4MDAsIDB4MTMsIDB4MDIsIDB4YWF9LApAQCAtMjQwOCw2ICsyNTAzLDI1MSBAQAogCXsweDAwLCAweGI2LCAweDM5LCAweGFhfSwKIAl7MHgwMCwgMHhiNywgMHgyNCwgMHhhYX0sCiAvKndyaXRlIDg5IDA0MDAgMTQxNSovCisJe30KK307CisKK3N0YXRpYyBjb25zdCB1OCBwb3h4eHhfaW5pdF9jb21tb25bXVs0XSA9IHsKKwl7MHhiMywgMHgwMCwgMHgwNCwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjUsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjAsIDB4MDMsIDB4MDksIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGY2LCAweGNjfSwJLyogaTJjIGFkZDogNzYgKi8KKwl7MHhiMywgMHgwMiwgMHhiMCwgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MTgsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDE1LCAweGNjfSwKKwl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIyLCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4ZmYsIDB4Y2N9LAorCXsweGIzLCAweDJjLCAweDAzLCAweGNjfSwKKwl7MHhiMywgMHgyZCwgMHg1NiwgMHhjY30sCisJezB4YjMsIDB4MmUsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDJmLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHg0MCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4NDEsIDB4MzQsIDB4Y2N9LAorCXsweGIzLCAweDQyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg0MywgMHhlMCwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGJjLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4YjMsIDB4NGQsIDB4MDAsIDB4Y2N9LAorCXsweDAwLCAweDBiLCAweDJhLCAweGFhfSwKKwl7MHgwMCwgMHgwZSwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4MGYsIDB4ZWEsIDB4YWF9LAorCXsweDAwLCAweDEyLCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHgxZSwgMHgwNiwgMHhhYX0sCisJezB4MDAsIDB4MjEsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDMxLCAweDFmLCAweGFhfSwKKwl7MHgwMCwgMHgzMywgMHgzOCwgMHhhYX0sCisJezB4MDAsIDB4MzYsIDB4YzAsIDB4YWF9LAorCXsweDAwLCAweDM3LCAweGM4LCAweGFhfSwKKwl7MHgwMCwgMHgzYiwgMHgzNiwgMHhhYX0sCisJezB4MDAsIDB4NGIsIDB4ZmUsIDB4YWF9LAorCXsweDAwLCAweDRkLCAweDJlLCAweGFhfSwKKwl7MHgwMCwgMHg1MSwgMHgxYywgMHhhYX0sCisJezB4MDAsIDB4NTIsIDB4MDEsIDB4YWF9LAorCXsweDAwLCAweDU1LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg1NiwgMHgwYSwgMHhhYX0sCisJezB4MDAsIDB4NTcsIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweDU4LCAweDA3LCAweGFhfSwKKwl7MHgwMCwgMHg1OSwgMHgwNCwgMHhhYX0sCisJezB4MDAsIDB4NzAsIDB4NjgsIDB4YWF9LAorCXsweDAwLCAweDcxLCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHg3MiwgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4ODAsIDB4NzEsIDB4YWF9LAorCXsweDAwLCAweDgxLCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHg4MiwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4ODMsIDB4NTUsIDB4YWF9LAorCXsweDAwLCAweDg0LCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHg4NSwgMHgwNiwgMHhhYX0sCisJezB4MDAsIDB4OGIsIDB4MjUsIDB4YWF9LAorCXsweDAwLCAweDhjLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg4ZCwgMHg4NiwgMHhhYX0sCisJezB4MDAsIDB4OGUsIDB4ODIsIDB4YWF9LAorCXsweDAwLCAweDhmLCAweDJkLCAweGFhfSwKKwl7MHgwMCwgMHg5MCwgMHg4YiwgMHhhYX0sCisJezB4MDAsIDB4OTEsIDB4ODEsIDB4YWF9LAorCXsweDAwLCAweDkyLCAweDgxLCAweGFhfSwKKwl7MHgwMCwgMHg5MywgMHgyMywgMHhhYX0sCisJezB4MDAsIDB4YTMsIDB4MmEsIDB4YWF9LAorCXsweDAwLCAweGE0LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhhNSwgMHhlYSwgMHhhYX0sCisJezB4MDAsIDB4YjAsIDB4NjgsIDB4YWF9LAorCXsweDAwLCAweGJjLCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHhiZSwgMHgzYiwgMHhhYX0sCisJezB4MDAsIDB4NGUsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweDA2LCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHgwNywgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4Y2QsIDB4MTgsIDB4YWF9LAorCXsweDAwLCAweDI4LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHgyOSwgMHhlZiwgMHhhYX0sCisvKiByZWluaXQgb24gYWx0IDIgKHF2Z2EpIG9yIGFsdDcgKHZnYSkgKi8KKwl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDAxLCAweGNjfSwKKworCXsweDAwLCAweDFkLCAweDg1LCAweGFhfSwKKwl7MHgwMCwgMHgxZSwgMHhjNiwgMHhhYX0sCisJezB4MDAsIDB4MDAsIDB4NDAsIDB4ZGR9LAorCXsweDAwLCAweDFkLCAweDA1LCAweGFhfSwKKworCXsweDAwLCAweGQ2LCAweDIyLCAweGFhfSwJLyogZ2FtbWEgMCAqLworCXsweDAwLCAweDczLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg3NCwgMHgwYSwgMHhhYX0sCisJezB4MDAsIDB4NzUsIDB4MTYsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweDI1LCAweGFhfSwKKwl7MHgwMCwgMHg3NywgMHgzNCwgMHhhYX0sCisJezB4MDAsIDB4NzgsIDB4NDksIDB4YWF9LAorCXsweDAwLCAweDc5LCAweDVhLCAweGFhfSwKKwl7MHgwMCwgMHg3YSwgMHg3ZiwgMHhhYX0sCisJezB4MDAsIDB4N2IsIDB4OWIsIDB4YWF9LAorCXsweDAwLCAweDdjLCAweGJhLCAweGFhfSwKKwl7MHgwMCwgMHg3ZCwgMHhkNCwgMHhhYX0sCisJezB4MDAsIDB4N2UsIDB4ZWEsIDB4YWF9LAorCisJezB4MDAsIDB4ZDYsIDB4NjIsIDB4YWF9LAkvKiBnYW1tYSAxICovCisJezB4MDAsIDB4NzMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg3NSwgMHgxNiwgMHhhYX0sCisJezB4MDAsIDB4NzYsIDB4MjUsIDB4YWF9LAorCXsweDAwLCAweDc3LCAweDM0LCAweGFhfSwKKwl7MHgwMCwgMHg3OCwgMHg0OSwgMHhhYX0sCisJezB4MDAsIDB4NzksIDB4NWEsIDB4YWF9LAorCXsweDAwLCAweDdhLCAweDdmLCAweGFhfSwKKwl7MHgwMCwgMHg3YiwgMHg5YiwgMHhhYX0sCisJezB4MDAsIDB4N2MsIDB4YmEsIDB4YWF9LAorCXsweDAwLCAweDdkLCAweGQ0LCAweGFhfSwKKwl7MHgwMCwgMHg3ZSwgMHhlYSwgMHhhYX0sCisKKwl7MHgwMCwgMHhkNiwgMHhhMiwgMHhhYX0sCS8qIGdhbW1hIDIgKi8KKwl7MHgwMCwgMHg3MywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NzQsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDc1LCAweDE2LCAweGFhfSwKKwl7MHgwMCwgMHg3NiwgMHgyNSwgMHhhYX0sCisJezB4MDAsIDB4NzcsIDB4MzQsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDQ5LCAweGFhfSwKKwl7MHgwMCwgMHg3OSwgMHg1YSwgMHhhYX0sCisJezB4MDAsIDB4N2EsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDdiLCAweDliLCAweGFhfSwKKwl7MHgwMCwgMHg3YywgMHhiYSwgMHhhYX0sCisJezB4MDAsIDB4N2QsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweGVhLCAweGFhfSwKKworCXsweDAwLCAweGFhLCAweGZmLCAweGFhfSwJLyogYmFjayBsaWdodCBjb21wICovCisJezB4MDAsIDB4YzQsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweGM1LCAweDE5LCAweGFhfSwKKwl7MHgwMCwgMHhjNiwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4YzcsIDB4OTEsIDB4YWF9LAorCXsweDAwLCAweGM4LCAweDAxLCAweGFhfSwKKwl7MHgwMCwgMHhjOSwgMHhkZCwgMHhhYX0sCisJezB4MDAsIDB4Y2EsIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweGNiLCAweDM3LCAweGFhfSwKKworLyogcmVhZCBkMSAqLworCXsweDAwLCAweGQxLCAweDNjLCAweGFhfSwKKwl7MHgwMCwgMHhiOCwgMHgyOCwgMHhhYX0sCisJezB4MDAsIDB4YjksIDB4MWUsIDB4YWF9LAorCXsweDAwLCAweGI2LCAweDE0LCAweGFhfSwKKwl7MHgwMCwgMHhiNywgMHgwZiwgMHhhYX0sCisJezB4MDAsIDB4NWMsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDVkLCAweDE4LCAweGFhfSwKKwl7MHgwMCwgMHg1ZSwgMHgyNCwgMHhhYX0sCisJezB4MDAsIDB4NWYsIDB4MjQsIDB4YWF9LAorCXsweDAwLCAweDg2LCAweDFhLCAweGFhfSwKKwl7MHgwMCwgMHg2MCwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NjEsIDB4MWIsIDB4YWF9LAorCXsweDAwLCAweDYyLCAweDMwLCAweGFhfSwKKwl7MHgwMCwgMHg2MywgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4ODcsIDB4MWEsIDB4YWF9LAorCXsweDAwLCAweDY0LCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg2NSwgMHgwOCwgMHhhYX0sCisJezB4MDAsIDB4NjYsIDB4MTAsIDB4YWF9LAorCXsweDAwLCAweDY3LCAweDIwLCAweGFhfSwKKwl7MHgwMCwgMHg4OCwgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4NjgsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDY5LCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHg2YSwgMHgwZiwgMHhhYX0sCisJezB4MDAsIDB4NmIsIDB4MGYsIDB4YWF9LAorCXsweDAwLCAweDg5LCAweDA3LCAweGFhfSwKKwl7MHgwMCwgMHhkNSwgMHg0YywgMHhhYX0sCisJezB4MDAsIDB4MGEsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDBiLCAweDJhLCAweGFhfSwKKwl7MHgwMCwgMHgwZSwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4MGYsIDB4ZWEsIDB4YWF9LAorCXsweDAwLCAweGEyLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHhhMywgMHgyYSwgMHhhYX0sCisJezB4MDAsIDB4YTQsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweGE1LCAweGVhLCAweGFhfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBwb3h4eHhfaW5pdFZHQVtdWzRdID0geworCXsweDAwLCAweDIwLCAweDExLCAweGFhfSwKKwl7MHgwMCwgMHgzMywgMHgzOCwgMHhhYX0sCisJezB4MDAsIDB4YmIsIDB4MGQsIDB4YWF9LAorCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHhiMCwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHgwMCwgMHgwNCwgMHgwNiwgMHhhYX0sCisJezB4MDAsIDB4MDUsIDB4M2YsIDB4YWF9LAorCXsweDAwLCAweDA0LCAweDAwLCAweGRkfSwJLyogZGVsYXkgMXMgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBwb3h4eHhfaW5pdFFWR0FbXVs0XSA9IHsKKwl7MHgwMCwgMHgyMCwgMHgzMywgMHhhYX0sCisJezB4MDAsIDB4MzMsIDB4MzgsIDB4YWF9LAorCXsweDAwLCAweGJiLCAweDBkLCAweGFhfSwKKwl7MHhiMywgMHgyMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZjAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHgzZiwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4YjAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMCwgMHhjY30sCisJezB4MDAsIDB4MDQsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDA1LCAweDNmLCAweGFhfSwKKwl7MHgwMCwgMHgwNCwgMHgwMCwgMHhkZH0sCS8qIGRlbGF5IDFzICovCisJe30KK307CitzdGF0aWMgY29uc3QgdTggcG94eHh4X2luaXRfZW5kXzFbXVs0XSA9IHsKKwl7MHgwMCwgMHg0NywgMHgyNSwgMHhhYX0sCisJezB4MDAsIDB4NDgsIDB4ODAsIDB4YWF9LAorCXsweDAwLCAweDQ5LCAweDFmLCAweGFhfSwKKwl7MHgwMCwgMHg0YSwgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4NDQsIDB4NDAsIDB4YWF9LAorCXsweDAwLCAweGFiLCAweDRhLCAweGFhfSwKKwl7MHgwMCwgMHhiMSwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4YjIsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweGIzLCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHhiNCwgMHgwYiwgMHhhYX0sCisJezB4MDAsIDB4YjUsIDB4MGQsIDB4YWF9LAorCXsweDAwLCAweDU5LCAweDdlLCAweGFhfSwJLyogc2hhcnBuZXNzICovCisJezB4MDAsIDB4MTYsIDB4MDAsIDB4YWF9LAkvKiB3aGl0ZSBiYWxhbmNlICovCisJezB4MDAsIDB4MTgsIDB4MDAsIDB4YWF9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0X2VuZF8yW11bNF0gPSB7CisJezB4MDAsIDB4MWQsIDB4ODUsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHgxZCwgMHgwNSwgMHhhYX0sCisJe30KIH07CiAKIHN0cnVjdCBzZW5zb3JfaW5mbyB7CkBAIC0yNDIwLDMzICsyNzYwLDg5IEBACiAJdTggb3A7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl9pbmZvIHNlbnNvcl9pbmZvX2RhdGFbXSA9IHsKLS8qICAgICAgc2Vuc29ySWQsICAgICAgICAgSTJjQWRkLAlJZEFkZCwgIFZwSWQsICBtMSwgICAgbTIsICBvcCAqLworLyogcHJvYmUgdmFsdWVzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl9pbmZvIHZjMDMyMV9wcm9iZV9kYXRhW10gPSB7CisvKiAgICAgIHNlbnNvcklkLAkgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCisvKiAwIE9WOTY0MCAqLwogCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKy8qIDEgSUNNMTA4VCAobWF5IHJlc3BvbmQgb24gSWRBZGQgPT0gMHg4MyAtIHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLwogCXstMSwJCSAgICAweDgwIHwgMHgyMCwgMHg4MiwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKLS8qICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KLS8qCXstMSwJCSAgICAweDgwIHwgMHgyMCwgMHg4MywgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KLQl7U0VOU09SX1BPMzEzME5DLCAgIDB4ODAgfCAweDc2LCAweDAwLCAweDMxMzAsIDB4MjQsIDB4MjUsIDB4MDF9LAotCXtTRU5TT1JfTUkxMzEwX1NPQywgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MTQzYSwgMHgyNCwgMHgyNSwgMHgwMX0sCi0vKiAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCisvKiAyIFBPMjEzMCAobWF5IGRldGVjdCBQTzMxMzBOQyAtIHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSovCisJey0xLAkJICAgIDB4ODAgfCAweDc2LCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMyBNSTEzMTAgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiA0IE1JMzYwIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IgKi8KIC8qCXtTRU5TT1JfTUkwMzYwLAkgICAgMHg4MCB8IDB4NWQsIDB4MDAsIDB4ODI0MywgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKiA1IDcxMzFSICovCiAJe1NFTlNPUl9IVjcxMzFSLCAgICAweDgwIHwgMHgxMSwgMHgwMCwgMHgwMjA5LCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDYgT1Y3NjQ5ICovCiAJey0xLAkJICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDAwMDAsIDB4MjEsIDB4MjAsIDB4MDV9LAorLyogNyBQQVMzMDJCQ1cgKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4NDAsIDB4MDAsIDB4MDAwMCwgMHgyMCwgMHgyMiwgMHgwNX0sCisvKiA4IE9WNzY2MCAqLwogCXtTRU5TT1JfT1Y3NjYwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY2MCwgMHgyNiwgMHgyNiwgMHgwNX0sCi0vKgl7U0VOU09SX1BPMzEzME5DLCAgIDB4ODAgfCAweDc2LCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworLyogOSBQTzMxMzBOQyAtICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KKy8qCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MzEzMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKiAxMCBQTzEwMzBLQyAqLwogCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKLS8qCXtTRU5TT1JfTUkxMzEwX1NPQywgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCi0vKgl7LTEsCQkgICAgMHg4MCB8IDB4MzAsIDB4MGEsIDB4MDAwMCwgMHgyNSwgMHgyNCwgMHgwNX0sICovCisvKiAxMSBNSTEzMTBfU09DICovCisJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDEyIE9WOTY1MCAqLworCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKy8qIDEzIFM1SzUzMiAqLwogCXstMSwJCSAgICAweDgwIHwgMHgxMSwgMHgzOSwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDE0IE1JMzYwX1NPQyAtID8/PyAqLworLyogMTUgUE8xMjAwTiAqLwogCXtTRU5TT1JfUE8xMjAwLCAgICAgMHg4MCB8IDB4NWMsIDB4MDAsIDB4MTIwMCwgMHg2NywgMHg2NywgMHgwMX0sCi0Jey0xLAkJICAgIDB4ODAgfCAweDJkLCAweDAwLCAweDAwMDAsIDB4NjUsIDB4NjcsIDB4MDF9LAorLyogMTYgUE8zMDMwSyAqLworCXstMSwJCSAgICAweDgwIHwgMHgxOCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDE3IFBPMjAzMCAqLwogCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qID8/ICovCisJey0xLAkJICAgIDB4ODAgfCAweDU2LCAweDAxLCAweDAwMDAsIDB4NjQsIDB4NjcsIDB4MDF9LAorCXtTRU5TT1JfTUkxMzIwLCAgICAgMHg4MCB8IDB4NDgsIDB4MDAsIDB4MTQ4YywgMHg2NCwgMHg2NSwgMHgwMX0sCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzZW5zb3JfaW5mbyB2YzAzMjNfcHJvYmVfZGF0YVtdID0geworLyogICAgICBzZW5zb3JJZCwJICAgSTJjQWRkLAlJZEFkZCwgIFZwSWQsICBtMSwgICAgbTIsICBvcCAqLworLyogMCBPVjk2NDAgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MzAsIDB4MGEsIDB4MDAwMCwgMHgyNSwgMHgyNCwgMHgwNX0sCisvKiAxIElDTTEwOFQgKG1heSByZXNwb25kIG9uIElkQWRkID09IDB4ODMgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MjAsIDB4ODIsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAyIFBPMjEzMCAobWF5IGRldGVjdCBQTzMxMzBOQyAtIHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSovCisJey0xLAkJICAgIDB4ODAgfCAweDc2LCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMyBNSTEzMTAgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiA0IE1JMzYwIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IgKi8KKy8qCXtTRU5TT1JfTUkwMzYwLAkgICAgMHg4MCB8IDB4NWQsIDB4MDAsIDB4ODI0MywgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKiA1IDcxMzFSICovCisJe1NFTlNPUl9IVjcxMzFSLCAgICAweDgwIHwgMHgxMSwgMHgwMCwgMHgwMjA5LCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDYgT1Y3NjQ5ICovCisJey0xLAkJICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDAwMDAsIDB4MjEsIDB4MjAsIDB4MDV9LAorLyogNyBQQVMzMDJCQ1cgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NDAsIDB4MDAsIDB4MDAwMCwgMHgyMCwgMHgyMiwgMHgwNX0sCisvKiA4IE9WNzY2MCAqLworCXtTRU5TT1JfT1Y3NjYwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY2MCwgMHgyNiwgMHgyNiwgMHgwNX0sCisvKiA5IFBPMzEzME5DIC0gKHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLworLyoJe1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgzMTMwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDEwIFBPMTAzMEtDICovCisJey0xLAkJICAgIDB4ODAgfCAweDZlLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTEgTUkxMzEwX1NPQyAqLworCXtTRU5TT1JfTUkxMzEwX1NPQywgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MTQzYSwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAxMiBPVjk2NTAgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MzAsIDB4MGEsIDB4MDAwMCwgMHgyNSwgMHgyNCwgMHgwNX0sCisvKiAxMyBTNUs1MzIgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MTEsIDB4MzksIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAxNCBNSTM2MF9TT0MgLSA/Pz8gKi8KKy8qIDE1IFBPMTIwME4gKi8KKwl7U0VOU09SX1BPMTIwMCwgICAgIDB4ODAgfCAweDVjLCAweDAwLCAweDEyMDAsIDB4NjcsIDB4NjcsIDB4MDF9LAorLyogMTYgPz8gKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MmQsIDB4MDAsIDB4MDAwMCwgMHg2NSwgMHg2NywgMHgwMX0sCisvKiAxNyBQTzIwMzAgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NmUsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiA/PyAqLwogCXstMSwJCSAgICAweDgwIHwgMHg1NiwgMHgwMSwgMHgwMDAwLCAweDY0LCAweDY3LCAweDAxfSwKIAl7U0VOU09SX01JMTMyMF9TT0MsIDB4ODAgfCAweDQ4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjcsIDB4MDF9LAotLypmaXhtZTogcHJldmlvdXNseSBkZXRlY3RlZD8qLwotCXtTRU5TT1JfTUkxMzIwLCAgICAgMHg4MCB8IDB4NDgsIDB4MDAsIDB4MTQ4YywgMHg2NCwgMHg2NSwgMHgwMX0sCi0vKmZpeG1lOiBub3QgaW4gdGhlIG1zLXdpbiBwcm9iZSAtIG1heSBiZSBmb3VuZCBiZWZvcmU/Ki8KKy8qZml4bWU6IG5vdCBpbiB0aGUgbXMtd2luIHByb2JlIC0gbWF5IGJlIGZvdW5kIGJlZm9yZT8gKi8KIAl7U0VOU09SX09WNzY3MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NzMsIDB4NjYsIDB4NjcsIDB4MDV9LAogfTsKIApAQCAtMjUyMCw3ICsyOTE2LDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCBpOworCWludCBpLCBuOwogCXUxNiB2YWx1ZTsKIAljb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gKnB0c2Vuc29yX2luZm87CiAKQEAgLTI1MzEsOSArMjkyNywxNiBAQAogCX0KIAogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiZmNmLCAxKTsKLQlQREVCVUcoRF9QUk9CRSwgImNoZWNrIHNlbnNvciBoZWFkZXIgJTAyeCIsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2Vuc29yX2luZm9fZGF0YSk7IGkrKykgewotCQlwdHNlbnNvcl9pbmZvID0gJnNlbnNvcl9pbmZvX2RhdGFbaV07CisJUERFQlVHKERfUFJPQkUsICJ2YzAzMiVkIGNoZWNrIHNlbnNvciBoZWFkZXIgJTAyeCIsCisJCXNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSA/IDEgOiAzLCBnc3BjYV9kZXYtPnVzYl9idWZbMF0pOworCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKKwkJcHRzZW5zb3JfaW5mbyA9IHZjMDMyMV9wcm9iZV9kYXRhOworCQluID0gQVJSQVlfU0laRSh2YzAzMjFfcHJvYmVfZGF0YSk7CisJfSBlbHNlIHsKKwkJcHRzZW5zb3JfaW5mbyA9IHZjMDMyM19wcm9iZV9kYXRhOworCQluID0gQVJSQVlfU0laRSh2YzAzMjNfcHJvYmVfZGF0YSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAkJcmVnX3coZGV2LCAweGEwLCAweDAyLCAweGIzMzQpOwogCQlyZWdfdyhkZXYsIDB4YTAsIHB0c2Vuc29yX2luZm8tPm0xLCAweGIzMDApOwogCQlyZWdfdyhkZXYsIDB4YTAsIHB0c2Vuc29yX2luZm8tPm0yLCAweGIzMDApOwpAQCAtMjU1MSwxMyArMjk1NCwxNSBAQAogCQkJCXJldHVybiBwdHNlbnNvcl9pbmZvLT5zZW5zb3JJZDsKIAogCQkJc3dpdGNoICh2YWx1ZSkgeworCQkJY2FzZSAweDMxMzA6CisJCQkJcmV0dXJuIFNFTlNPUl9QTzMxMzBOQzsKIAkJCWNhc2UgMHg3NjczOgogCQkJCXJldHVybiBTRU5TT1JfT1Y3NjcwOwogCQkJY2FzZSAweDgyNDM6CiAJCQkJcmV0dXJuIFNFTlNPUl9NSTAzNjA7CiAJCQl9Ci0vKmZpeG1lOiBzaG91bGQgcmV0dXJuIGhlcmUqLwogCQl9CisJCXB0c2Vuc29yX2luZm8rKzsKIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtMjYxOSw3ICszMDI0LDcgQEAKIAkJCWkyY193cml0ZShnc3BjYV9kZXYsIGRhdGFbaV1bMF0sICZkYXRhW2ldWzFdLCAyKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4ZGQ6Ci0JCQltc2xlZXAoZGF0YVtpXVsyXSArIDEwKTsKKwkJCW1zbGVlcChkYXRhW2ldWzFdICogMjU2ICsgZGF0YVtpXVsyXSArIDEwKTsKIAkJCWJyZWFrOwogCQl9CiAJCWkrKzsKQEAgLTI2NDYsMTIgKzMwNTEsMTcgQEAKIAkJNjQsCQkvKiBPVjc2NzAgNiAqLwogCQkxMjgsCQkvKiBQTzEyMDAgNyAqLwogCQkxMjgsCQkvKiBQTzMxMzBOQyA4ICovCisJCTEyOCwJCS8qIFBPeHh4eCA5ICovCiAJfTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAlzZC0+YnJpZGdlID0gaWQtPmRyaXZlcl9pbmZvID4+IDg7CiAJc2QtPmZsYWdzID0gaWQtPmRyaXZlcl9pbmZvICYgMHhmZjsKLQlzZW5zb3IgPSB2YzAzMnhfcHJvYmVfc2Vuc29yKGdzcGNhX2Rldik7CisJaWYgKGlkLT5pZFZlbmRvciA9PSAweDA0NmQgJiYKKwkgICAgKGlkLT5pZFByb2R1Y3QgPT0gMHgwODkyIHx8IGlkLT5pZFByb2R1Y3QgPT0gMHgwODk2KSkKKwkJc2Vuc29yID0gU0VOU09SX1BPeHh4eDsKKwllbHNlCisJCXNlbnNvciA9IHZjMDMyeF9wcm9iZV9zZW5zb3IoZ3NwY2FfZGV2KTsKIAlzd2l0Y2ggKHNlbnNvcikgewogCWNhc2UgLTE6CiAJCVBERUJVRyhEX1BST0JFLCAiVW5rbm93biBzZW5zb3IuLi4iKTsKQEAgLTI2ODQsNiArMzA5NCw5IEBACiAJY2FzZSBTRU5TT1JfUE8zMTMwTkM6CiAJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgUE8zMTMwTkMiKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUE94eHh4OgorCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBQT3h4eHgiKTsKKwkJYnJlYWs7CiAJfQogCXNkLT5zZW5zb3IgPSBzZW5zb3I7CiAKQEAgLTI3MTIsMjcgKzMxMjUsMTggQEAKIAl9CiAJY2FtLT5ucGt0ID0gbnBrdFtzZC0+c2Vuc29yXTsKIAorCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOworCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CiAJc2QtPmhmbGlwID0gSEZMSVBfREVGOwogCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzZC0+bGlnaHRmcmVxID0gRlJFUV9ERUY7CisJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CisKKwlnc3BjYV9kZXYtPmN0cmxfZGlzID0gY3RybF9kaXNbc2QtPnNlbnNvcl07CisKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjcwKQogCQlzZC0+ZmxhZ3MgfD0gRkxfSEZMSVAgfCBGTF9WRkxJUDsKLQlzZC0+bGlnaHRmcmVxID0gRlJFUV9ERUY7Ci0JaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09WNzY3MCkKLQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IExJR0hURlJFUV9JRFgpOwotCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6Ci0JY2FzZSBTRU5TT1JfTUkxMzIwX1NPQzoKLQljYXNlIFNFTlNPUl9PVjc2NjA6Ci0JY2FzZSBTRU5TT1JfT1Y3NjcwOgotCWNhc2UgU0VOU09SX1BPMTIwMDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEhGTElQX0lEWCkKLQkJCQkJfCAoMSA8PCBWRkxJUF9JRFgpOwotCQlicmVhazsKLQl9Ci0KLQlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKIAogCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDhhLCAwLCAzKTsKQEAgLTI3NDcsMTAgKzMxNTEsNTUgQEAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUE94eHh4KSB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzAwLCAxKTsKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAwKSB7CisJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgyNiwgMHhiMzAwKTsKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDA0LCAweGIzMDApOworCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDAsIDB4YjMwMCk7CisJCX0KKwl9CiAJcmV0dXJuIDA7CiB9CiAKLS8qIHNvbWUgc2Vuc29ycyBvbmx5ICovCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZGF0YTsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQlJJR0hUTkVTU19JRFgpKQorCQlyZXR1cm47CisJZGF0YSA9IHNkLT5icmlnaHRuZXNzOworCWlmIChkYXRhID49IDB4ODApCisJCWRhdGEgJj0gMHg3ZjsKKwllbHNlCisJCWRhdGEgPSAweGZmIF4gZGF0YTsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDk4LCAmZGF0YSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IENPTlRSQVNUX0lEWCkpCisJCXJldHVybjsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDk5LCAmc2QtPmNvbnRyYXN0LCAxKTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZGF0YTsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQ09MT1JTX0lEWCkpCisJCXJldHVybjsKKwlkYXRhID0gc2QtPmNvbG9ycyAtIChzZC0+Y29sb3JzID4+IDMpIC0gMTsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDk0LCAmZGF0YSwgMSk7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHg5NSwgJnNkLT5jb2xvcnMsIDEpOworfQorCiBzdGF0aWMgdm9pZCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTI3NjQsNiArMzIxMyw3IEBACiAJCXZmbGlwID0gIXZmbGlwOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6CisJY2FzZSBTRU5TT1JfTUkxMzIwOgogCWNhc2UgU0VOU09SX01JMTMyMF9TT0M6CiAJCWRhdGFbMF0gPSBkYXRhWzFdID0gMDsJCS8qIHNlbGVjdCBwYWdlIDAgKi8KIAkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHhmMCwgZGF0YSwgMik7CkBAIC0yODAxLDE4ICszMjUxLDI5IEBACiAJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjYwX2ZyZXFfdGJbc2QtPmxpZ2h0ZnJlcV0pOwogfQogCi0vKiBwbzEyMDAgb25seSAqLwogc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdTggZGF0YTsKIAotCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9QTzEyMDApCi0JCXJldHVybjsKLQlkYXRhID0gMDsKLQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAzLCAmZGF0YSwgMSk7Ci0JZGF0YSA9IDB4YjUgKyBzZC0+c2hhcnBuZXNzICogMzsKLQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDYxLCAmZGF0YSwgMSk7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfUE8xMjAwOgorCQlkYXRhID0gMDsKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMywgJmRhdGEsIDEpOworCQlpZiAoc2QtPnNoYXJwbmVzcyA8IDApCisJCQlkYXRhID0gMHg2YTsKKwkJZWxzZQorCQkJZGF0YSA9IDB4YjUgKyBzZC0+c2hhcnBuZXNzICogMzsKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHg2MSwgJmRhdGEsIDEpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9QT3h4eHg6CisJCWlmIChzZC0+c2hhcnBuZXNzIDwgMCkKKwkJCWRhdGEgPSAweDdlOwkvKiBkZWYgPSBtYXggKi8KKwkJZWxzZQorCQkJZGF0YSA9IDB4NjAgKyBzZC0+c2hhcnBuZXNzICogMHgwZjsKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHg1OSwgJmRhdGEsIDEpOworCQlicmVhazsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMjkyMiwxMiArMzM4MywyNyBAQAogCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBpbml0KTsKIAkJaW5pdCA9IHBvMzEzMF9ydW5kYXRhOwogCQlicmVhazsKLQlkZWZhdWx0OgotLyoJY2FzZSBTRU5TT1JfUE8xMjAwOiAqLworCWNhc2UgU0VOU09SX1BPMTIwMDoKIAkJR2FtbWFUID0gcG8xMjAwX2dhbW1hOwogCQlNYXRyaXhUID0gcG8xMjAwX21hdHJpeDsKIAkJaW5pdCA9IHBvMTIwMF9pbml0VkdBX2RhdGE7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9QT3h4eHg6ICovCisJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBveHh4eF9pbml0X2NvbW1vbik7CisJCWlmIChtb2RlKQorCQkJaW5pdCA9IHBveHh4eF9pbml0UVZHQTsKKwkJZWxzZQorCQkJaW5pdCA9IHBveHh4eF9pbml0VkdBOworCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBpbml0KTsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDhjLCAweDAwMDAsIDMpOworCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwKKwkJCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gJiAxID8gMCA6IDEsCisJCQkJMHhiMzVjKTsKKwkJbXNsZWVwKDMwMCk7CisvKmZpeG1lOiBpMmMgcmVhZCAwNCBhbmQgMDUqLworCQlpbml0ID0gcG94eHh4X2luaXRfZW5kXzE7CisJCWJyZWFrOwogCX0KIAl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBpbml0KTsKIAlpZiAoR2FtbWFUICYmIE1hdHJpeFQpIHsKQEAgLTI5MzYsNyArMzQxMiw2IEBACiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgR2FtbWFULCAxNywgMHhiODZjKTsKIAkJcHV0X3RhYl90b19yZWcoZ3NwY2FfZGV2LCBNYXRyaXhULCA5LCAweGI4MmMpOwogCi0JCS8qIHNldCB0aGUgbGVkIG9uIDB4MDg5MiAweDA4OTYgKi8KIAkJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJCWNhc2UgU0VOU09SX1BPMTIwMDoKIAkJY2FzZSBTRU5TT1JfSFY3MTMxUjoKQEAgLTI5NDUsMTYgKzM0MjAsMjIgQEAKIAkJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKIAkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweDA1OGMsIDB4MDAwMCk7CiAJCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQotCQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweGZmZmYsIDB4ZmRmZik7Ci0JCQlicmVhazsKIAkJfQogCQltc2xlZXAoMTAwKTsKIAkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CiAJCXNldGh2ZmxpcChnc3BjYV9kZXYpOwogCQlzZXRsaWdodGZyZXEoZ3NwY2FfZGV2KTsKIAl9CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BPeHh4eCkgeworCQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCisJCS8qIGxlZCBvbiAqLworCQltc2xlZXAoODApOworCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOworCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBwb3h4eHhfaW5pdF9lbmRfMik7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yOTYzLDEwICszNDQ0LDE3IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9NSTEzMTBfU09DKQorCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6CiAJCXJlZ193KGRldiwgMHg4OSwgMHgwNThjLCAweDAwZmYpOwotCWVsc2UgaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCi0JCXJlZ193KGRldiwgMHg4OSwgMHhmZmZmLCAweGZmZmYpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9QT3h4eHg6CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlpZiAoIShzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSkKKwkJCXJlZ193KGRldiwgMHg4OSwgMHhmZmZmLCAweGZmZmYpOworCQlicmVhazsKKwl9CiAJcmVnX3coZGV2LCAweGEwLCAweDAxLCAweGIzMDEpOwogCXJlZ193KGRldiwgMHhhMCwgMHgwOSwgMHhiMDAzKTsKIH0KQEAgLTI5ODQsNiArMzQ3MiwxMiBAQAogCQlyZWdfdyhkZXYsIDB4ODksIDB4MDU4YywgMHgwMGZmKTsKIAllbHNlIGlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQogCQlyZWdfdyhkZXYsIDB4ODksIDB4ZmZmZiwgMHhmZmZmKTsKKworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QT3h4eHgpIHsKKwkJcmVnX3coZGV2LCAweGEwLCAweDI2LCAweGIzMDApOworCQlyZWdfdyhkZXYsIDB4YTAsIDB4MDQsIDB4YjMwMCk7CisJCXJlZ193KGRldiwgMHhhMCwgMHgwMCwgMHhiMzAwKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTMwMjAsNiArMzUxNCw2MCBAQAogCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwgbGVuKTsKIH0KIAorc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5icmlnaHRuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbnRyYXN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29sb3JzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmNvbG9yczsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZF9zZXRoZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKaW5kZXggMWE4MDBmYy4uNTA5ODZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwpAQCAtMSw5ICsxLDggQEAKIC8qCi0gKglaLVN0YXIvVmltaWNybyB6YzMwMS96YzMwMnAvdmMzMHggbGlicmFyeQotICoJQ29weXJpZ2h0IChDKSAyMDA0IDIwMDUgMjAwNiBNaWNoZWwgWGhhYXJkCi0gKgkJbXhoYWFyZEBtYWdpYy5mcgorICogWi1TdGFyL1ZpbWljcm8gemMzMDEvemMzMDJwL3ZjMzB4IGxpYnJhcnkKICAqCi0gKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPgorICogQ29weXJpZ2h0IChDKSAyMDA0IDIwMDUgMjAwNiBNaWNoZWwgWGhhYXJkIG14aGFhcmRAbWFnaWMuZnIKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIyLDEwICsyMSwxMSBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJ6YzN4eCIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKICNpbmNsdWRlICJqcGVnLmgiCiAKLU1PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgIgorTU9EVUxFX0FVVEhPUigiSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4sICIKIAkJIlNlcmdlIEEuIFN1Y2hrb3YgPFNlcmdlLkEuU0B0b2Noa2EucnU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBIFpDMDN4eC9WQzN4eCBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMzksMTggKzM5LDE4IEBACiBzdHJ1Y3Qgc2QgewogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKLQlfX3U4IGJyaWdodG5lc3M7Ci0JX191OCBjb250cmFzdDsKLQlfX3U4IGdhbW1hOwotCV9fdTggYXV0b2dhaW47Ci0JX191OCBsaWdodGZyZXE7Ci0JX191OCBzaGFycG5lc3M7CisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBnYW1tYTsKKwl1OCBhdXRvZ2FpbjsKKwl1OCBsaWdodGZyZXE7CisJdTggc2hhcnBuZXNzOwogCXU4IHF1YWxpdHk7CQkJLyogaW1hZ2UgcXVhbGl0eSAqLwogI2RlZmluZSBRVUFMSVRZX01JTiA0MAogI2RlZmluZSBRVUFMSVRZX01BWCA2MAogI2RlZmluZSBRVUFMSVRZX0RFRiA1MAogCi0Jc2lnbmVkIGNoYXIgc2Vuc29yOwkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLworCXU4IHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KIC8qICEhIHZhbHVlcyB1c2VkIGluIGRpZmZlcmVudCB0YWJsZXMgKi8KICNkZWZpbmUgU0VOU09SX0FEQ00yNzAwIDAKICNkZWZpbmUgU0VOU09SX0NTMjEwMiAxCkBAIC05Miw5ICs5Miw4IEBACiBzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCi0jZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xMDMsMjYgKzEwMiwyNiBAQAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMjU1LAogCQkuc3RlcCAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMTI4LAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAxMjgKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAogCX0sCi0jZGVmaW5lIFNEX0NPTlRSQVNUIDEKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKIAkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSAgICA9ICJDb250cmFzdCIsCiAJCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSAyNTYsCisJCS5tYXhpbXVtID0gMjU1LAogCQkuc3RlcCAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMTI4LAorI2RlZmluZSBDT05UUkFTVF9ERUYgMTI4CisJCS5kZWZhdWx0X3ZhbHVlID0gQ09OVFJBU1RfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCiAJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKIAl9LAotI2RlZmluZSBTRF9HQU1NQSAyCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfR0FNTUEsCkBAIC0xMzYsNyArMTM1LDYgQEAKIAkgICAgLnNldCA9IHNkX3NldGdhbW1hLAogCSAgICAuZ2V0ID0gc2RfZ2V0Z2FtbWEsCiAJfSwKLSNkZWZpbmUgU0RfQVVUT0dBSU4gMwogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9HQUlOLApAQCAtMTQ1LDEzICsxNDMsMTMgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGF1dG9nYWluLAogCSAgICAuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCiAJfSwKICNkZWZpbmUgTElHSFRGUkVRX0lEWCA0Ci0jZGVmaW5lIFNEX0ZSRVEgNAogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0xNjAsMTIgKzE1OCwxMiBAQAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMiwJLyogMDogMCwgMTogNTBIeiwgMjo2MEh6ICovCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAorI2RlZmluZSBGUkVRX0RFRiAwCisJCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRmcmVxLAogCSAgICAuZ2V0ID0gc2RfZ2V0ZnJlcSwKIAl9LAotI2RlZmluZSBTRF9TSEFSUE5FU1MgNQogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfU0hBUlBORVNTLApAQCAtMTc0LDcgKzE3Miw4IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAzLAogCQkuc3RlcCAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMiwKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAyCisJCS5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldHNoYXJwbmVzcywKIAkgICAgLmdldCA9IHNkX2dldHNoYXJwbmVzcywKQEAgLTE5NCw2ICsxOTMsMTkgQEAKIAkJLnByaXYgPSAwfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGJyb2tlbl92Z2FfbW9kZVtdID0geworCXszMjAsIDIzMiwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDIzMiAqIDQgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDF9LAorCXs2NDAsIDQ3MiwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ3MiAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDB9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKIAl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNzYsCkBAIC0yMDksOSArMjIxLDkgQEAKIAogLyogdXNiIGV4Y2hhbmdlcyAqLwogc3RydWN0IHVzYl9hY3Rpb24gewotCV9fdTgJcmVxOwotCV9fdTgJdmFsOwotCV9fdTE2CWlkeDsKKwl1OAlyZXE7CisJdTgJdmFsOworCXUxNglpZHg7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gYWRjbTI3MDBfSW5pdGlhbFtdID0gewpAQCAtNDIxLDcgKzQzMyw3IEBACiAJezB4YWEsIDB4ZmUsIDB4MDAxMH0sCQkJCS8qIDAwLGZlLDEwLGFhICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX0luaXRpYWxbXSA9IHsJLyogMzIweDI0MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTQ3Myw3ICs0ODUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX0luaXRpYWxTY2FsZVtdID0gewkvKiA2NDB4NDgwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTUyNCw3ICs1MzYsNyBAQAogCXsweGEwLCAweDAwLCAweDAxYWR9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl81MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzUwSFpTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDF9LAogCXsweGFhLCAweDI0LCAweDAwNWZ9LApAQCAtNTQ2LDcgKzU1OCw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzUwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl81MEhaW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMH0sCiAJezB4YWEsIDB4MjQsIDB4MDBhZn0sCkBAIC01NjgsNyArNTgwLDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNjBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl82MEhaU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAxfSwKIAl7MHhhYSwgMHgyNCwgMHgwMDU1fSwKQEAgLTU5MCw3ICs2MDIsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl82MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNjBIWltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDB9LAogCXsweGFhLCAweDI0LCAweDAwYWF9LApAQCAtNjEyLDcgKzYyNCw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX05vRmxpa2VyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX05vRmxpa2VyU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAxfSwKIAl7MHhhYSwgMHgyNCwgMHgwMDVmfSwKQEAgLTYzNCw3ICs2NDYsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Ob0ZsaWtlclNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX05vRmxpa2VyW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMH0sCiAJezB4YWEsIDB4MjQsIDB4MDBhZn0sCkBAIC02NTgsNyArNjcwLDcgQEAKIH07CiAKIC8qIENTMjEwMl9LT0NPTSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMktfSW5pdGlhbFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMktfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MTEsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC05MTcsNyArOTI5LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMktfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC0xNDk1LDcgKzE1MDcsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaGRjczIwMjB4Yl9Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaGRjczIwMjBiX0luaXRpYWxTY2FsZVtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDExLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiBxdGFibGUgMHgwNSAqLwpAQCAtMTYyNyw3ICsxNjM5LDcgQEAKIAl7MHhhMCwgMHg0MCwgWkMzWFhfUjExOF9CR0FJTn0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaGRjczIwMjB4Yl9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMGJfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LApAQCAtMTgxOSw3ICsxODMxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWJ4eF9Jbml0aWFsW10gPSB7CQkvKiAzMjB4MjQwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYl9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTE4NjYsNyArMTg3OCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFieHhfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDY0MHg0ODAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWJfSW5pdGlhbFtdID0gewkvKiA2NDB4NDgwKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC0yMDYzLDcgKzIwNzUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxY3h4X0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFyX0luaXRpYWxTY2FsZVtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTIxNTcsNyArMjE2OSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFjeHhfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxcl9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCS8qIGRpZmYgKi8KQEAgLTIyNTksNyArMjI3MSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVheHhfSW5pdGlhbFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC0yNDM2LDcgKzI0NDgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YXh4X0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LApAQCAtMjYxNSw3ICsyNjI3LDcgQEAKIAl7MHhhMCwgMHg0MCwgWkMzWFhfUjExOF9CR0FJTn0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV81MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV81MEhaU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDIwfSwgLyogMDAsMGMsMjAsYWEgKi8KQEAgLTI2NDYsNyArMjY1OCw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV81MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDhjfSwgLyogMDAsMGMsOGMsYWEgKi8KQEAgLTI2NzksNyArMjY5MSw3IEBACiAJezB4YTAsIDB4YzAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LCAvKiAwMSxhOCxjMCxjYyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNjBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNjBIWlNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCiAJezB4YWEsIDB4MGQsIDB4MDAwM30sIC8qIDAwLDBkLDAzLGFhICovCiAJezB4YWEsIDB4MGMsIDB4MDAwNH0sIC8qIDAwLDBjLDA0LGFhICovCkBAIC0yNzEwLDcgKzI3MjIsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LCAvKiAwMCwyMCxmZixjYyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNjBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCiAJezB4YWEsIDB4MGQsIDB4MDAwM30sIC8qIDAwLDBkLDAzLGFhICovCiAJezB4YWEsIDB4MGMsIDB4MDAwOH0sIC8qIDAwLDBjLDA4LGFhICovCkBAIC0yNzQzLDcgKzI3NTUsNyBAQAogCXsweGEwLCAweGMwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwgLyogMDEsYTgsYzAsY2MgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhX05vRmxpa2VyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Ob0ZsaWtlclNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCiAJezB4YWEsIDB4MGQsIDB4MDAwM30sIC8qIDAwLDBkLDAzLGFhICovCiAJezB4YWEsIDB4MGMsIDB4MDAwNH0sIC8qIDAwLDBjLDA0LGFhICovCkBAIC0yNzc0LDcgKzI3ODYsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LCAvKiAwMCwyMCxmZixjYyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfTm9GbGlrZXJTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfTm9GbGlrZXJbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA0fSwgLyogMDAsMGMsMDQsYWEgKi8KQEAgLTI4MDgsNyArMjgyMCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwgLyogMDAsMDIsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwgLyogMDAsMTAsMDEsY2MgKi8KQEAgLTI5MjgsNyArMjk0MCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCX0luaXRpYWxbXSA9IHsJIC8qIDMyMHgyNDAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiX0luaXRpYWxTY2FsZVtdID0gewkgLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwgLyogMDAsMDIsMTAsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwgLyogMDAsMTAsMDEsY2MgKi8KQEAgLTMwNDcsNyArMzA1OSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiXzUwSFpTY2FsZVtdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwMWR9LCAvKiAwMCwzNiwxRCxhYSAqLwpAQCAtMzA2NCw3ICszMDc2LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNTBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl81MEhaW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAzYX0sIC8qIDAwLDM2LDNBLGFhICovCkBAIC0zMDgxLDcgKzMwOTMsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl82MEhaU2NhbGVbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDE4fSwgLyogMDAsMzYsMTgsYWEgKi8KQEAgLTMwOTgsNyArMzExMCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCXzYwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfNjBIWltdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwMzB9LCAvKiAwMCwzNiwzMCxhYSAqLwpAQCAtMzExNSw3ICszMTI3LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiX05vRmxpa2VyU2NhbGVbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDE4fSwgLyogMDAsMzYsMTgsYWEgKi8KQEAgLTMxMzIsNyArMzE0NCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCX05vRmxpa2VyU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiX05vRmxpa2VyW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAzMH0sIC8qIDAwLDM2LDMwLGFhICovCkBAIC0zMTQ0LDggKzMxNTYsOCBAQAogCXt9CiB9OwogCi0vKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJSxJbml0aWFsIC0gNjQweDQ4MCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF9tb2RlMFtdID0geworLyogZnJvbSB6czIxMS5pbmYgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MjBfSW5pdGlhbFtdID0gewkvKiA2NDB4NDgwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4NDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LCAvKiAwMCwwMiw0MCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sIC8qIDAwLDA4LDAwLGNjICovCkBAIC0zMjE0LDkgKzMyMjYsNyBAQAogCXsweGEwLCAweDUwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwgLyogMDEsYTgsNTAsY2MgKi8KIAl7fQogfTsKLQotLyogZnJvbSB6czIxMS5pbmYgLSBIS1IsJU9WNzYyMCUsSW5pdGlhbFNjYWxlIC0gMzIweDI0MCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF9tb2RlMVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYyMF9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDUwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJLyogMDAsMDIsNTAsY2MgKi8KIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkvKiAwMCwwOCwwMCxjYyAqLwpAQCAtMzI4Nyw5ICszMjk3LDcgQEAKIAl7MHhhMCwgMHg1MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCS8qIDAxLGE4LDUwLGNjICovCiAJe30KIH07Ci0KLS8qIGZyb20genMyMTEuaW5mIC0gSEtSLCVPVjc2MjAlXEFFLDUwSFogKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBPVjc2MjBfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYyMF81MEhaW10gPSB7CiAJezB4YWEsIDB4MTMsIDB4MDBhM30sCS8qIDAwLDEzLGEzLGFhICovCiAJezB4ZGQsIDB4MDAsIDB4MDEwMH0sCS8qIDAwLDAxLDAwLGRkICovCiAJezB4YWEsIDB4MmIsIDB4MDA5Nn0sCS8qIDAwLDJiLDk2LGFhICovCkBAIC0zMzA3LDkgKzMzMTUsNyBAQAogCQkJCQkJCSBpZiBtb2RlMCAoNjQweDQ4MCkgKi8KIAl7fQogfTsKLQotLyogZnJvbSB6czIxMS5pbmYgLSBIS1IsJU9WNzYyMCVcQUUsNjBIWiAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwXzYwSFpbXSA9IHsKIAl7MHhhYSwgMHgxMywgMHgwMGEzfSwJCQkvKiAwMCwxMyxhMyxhYSAqLwogCQkJCQkJLyogKGJ1ZyBpbiB6czIxMS5pbmYpICovCiAJezB4ZGQsIDB4MDAsIDB4MDEwMH0sCQkJLyogMDAsMDEsMDAsZGQgKi8KQEAgLTMzMzEsOSArMzMzNyw3IEBACiAJezB4YTEsIDB4MDEsIDB4MDAzN30sCQkqLwogCXt9CiB9OwotCi0vKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJVxBRSxOb0ZsaWtlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYyMF9Ob0ZsaWtlcltdID0gewogCXsweGFhLCAweDEzLCAweDAwYTN9LAkJCS8qIDAwLDEzLGEzLGFhICovCiAJCQkJCQkvKiAoYnVnIGluIHpzMjExLmluZikgKi8KIAl7MHhkZCwgMHgwMCwgMHgwMTAwfSwJCQkvKiAwMCwwMSwwMCxkZCAqLwpAQCAtMzM1NCw3ICszMzU4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYzMGNfSW5pdGlhbFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYzMGNfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LApAQCAtMzUxMSw3ICszNTE1LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYzMGNfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC0zNjgyLDcgKzM2ODYsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMTA2Yl9Jbml0aWFsW10gPSB7CS8qIDE3NngxNDQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMxMDZiX0luaXRpYWxTY2FsZVtdID0gewkvKiAxNzZ4MTQ0ICovCiAvKiBKUEVHIGNvbnRyb2wgKi8KIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAogLyogU3JlYW0gYW5kIFNlbnNvciBzcGVjaWZpYyAqLwpAQCAtMzgwMCw3ICszODA0LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDM1MngyODggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMxMDZiX0luaXRpYWxbXSA9IHsJLyogMzUyeDI4OCAqLwogLyogSlBFRyBjb250cm9sICovCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIC8qIFNyZWFtIGFuZCBTZW5zb3Igc3BlY2lmaWMgKi8KQEAgLTM5NzIsMTAgKzM5NzYsMTAgQEAKIAl7fQogfTsKIAotLyogZnJvbSB1c2J2bTMxYi5pbmYgKi8KKy8qIGZyb20gbHZXSU12LmluZiAwNDZkOjA4YTIvOjA4YWEgMjAwNy8wNi8wMyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczIwMmJfSW5pdGlhbFtdID0gewkvKiA2NDB4NDgwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCQkvKiAwMCwwMCwwMSxjYyAqLwotCXsweGEwLCAweDAwLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiAwMCwwOCwwMCxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAJezB4YTAsIDB4MGUsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBlLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkJLyogMDAsMDIsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCS8qIDAwLDAzLDAyLGNjICovCkBAIC00MDAwLDcgKzQwMDQsNyBAQAogCXsweGFhLCAweDA5LCAweDAwMDZ9LAkJCQkvKiAwMCwwOSwwNixhYSAqLwogCXsweGFhLCAweDBhLCAweDAwMDF9LAkJCQkvKiAwMCwwYSwwMSxhYSAqLwogCXsweGFhLCAweDBiLCAweDAwMDF9LAkJCQkvKiAwMCwwYiwwMSxhYSAqLwotCXsweGFhLCAweDBjLCAweDAwMDh9LAkJCQkvKiAwMCwwYywwOCxhYSAqLworCXsweGFhLCAweDBjLCAweDAwMDZ9LAogCXsweGFhLCAweDBkLCAweDAwMDB9LAkJCQkvKiAwMCwwZCwwMCxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwMDB9LAkJCQkvKiAwMCwxMCwwMCxhYSAqLwogCXsweGFhLCAweDEyLCAweDAwMDV9LAkJCQkvKiAwMCwxMiwwNSxhYSAqLwpAQCAtNDAxOSwxMyArNDAyMywxMyBAQAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMyMDJiX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCQkvKiAwMCwwMCwwMSxjYyAqLwotCXsweGEwLCAweDAwLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiAwMCwwOCwwMCxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAJezB4YTAsIDB4MGUsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBlLGNjICovCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkJLyogMDAsMDIsMTAsY2MgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCS8qIDAwLDAzLDAyLGNjICovCiAJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCQkvKiAwMCwwNCw4MCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCS8qIDAwLDA1LDAxLGNjICovCi0JezB4YTAsIDB4ZDAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAkvKiAwMCwwNixkMCxjYyAqLworCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAkvKiAwMCwwMSwwMSxjYyAqLwogCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMyxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMSxjYyAqLwpAQCAtNDAzNSw3ICs0MDM5LDcgQEAKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAkJLyogMDEsMWEsMDgsY2MgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAkJLyogMDEsMWMsMDIsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5Ql9XSU5IRUlHSFRISUdIfSwJCS8qIDAwLDliLDAxLGNjICovCi0JezB4YTAsIDB4ZDgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwJCS8qIDAwLDljLGQ4LGNjICovCisJezB4YTAsIDB4ZTgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwKIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5RF9XSU5XSURUSEhJR0h9LAkJLyogMDAsOWQsMDIsY2MgKi8KIAl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCQkvKiAwMCw5ZSw4OCxjYyAqLwogCXsweGFhLCAweDAyLCAweDAwMDJ9LAkJCQkvKiAwMCwwMiwwMixhYSAqLwpAQCAtNDA0NCw3ICs0MDQ4LDcgQEAKIAl7MHhhYSwgMHgwOSwgMHgwMDA2fSwJCQkJLyogMDAsMDksMDYsYWEgKi8KIAl7MHhhYSwgMHgwYSwgMHgwMDAxfSwJCQkJLyogMDAsMGEsMDEsYWEgKi8KIAl7MHhhYSwgMHgwYiwgMHgwMDAxfSwJCQkJLyogMDAsMGIsMDEsYWEgKi8KLQl7MHhhYSwgMHgwYywgMHgwMDA4fSwJCQkJLyogMDAsMGMsMDgsYWEgKi8KKwl7MHhhYSwgMHgwYywgMHgwMDA2fSwKIAl7MHhhYSwgMHgwZCwgMHgwMDAwfSwJCQkJLyogMDAsMGQsMDAsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMDAwfSwJCQkJLyogMDAsMTAsMDAsYWEgKi8KIAl7MHhhYSwgMHgxMiwgMHgwMDA1fSwJCQkJLyogMDAsMTIsMDUsYWEgKi8KQEAgLTQwNTksNiArNDA2Myw4IEBACiAJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAkvKiAwMiw1MCwwOCxjYyAqLwogCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCQkvKiAwMywwMSwwOCxjYyAqLwogCXsweGEwLCAweDcwLCBaQzNYWF9SMThEX1lUQVJHRVR9LAkJLyogMDEsOGQsNzAsY2MgKi8KKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjA5N19XSU5ZU1RBUlRISUdIfSwKKwl7MHhhMCwgMHhmZSwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAogCXt9CiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczIwMmJfNTBIWltdID0gewpAQCAtNDA2NiwyMiArNDA3MiwyMiBAQAogCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KIAl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCiAJezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCi0JezB4YWEsIDB4MjEsIDB4MDA2OH0sCQkJCS8qIDAwLDIxLDY4LGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAxYn0sCiAJezB4YWEsIDB4MDMsIDB4MDA0NH0sCQkJCS8qIDAwLDAzLDQ0LGFhICovCi0JezB4YWEsIDB4MDQsIDB4MDAwOX0sCQkJCS8qIDAwLDA0LDA5LGFhICovCi0JezB4YWEsIDB4MDUsIDB4MDAyOH0sCQkJCS8qIDAwLDA1LDI4LGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAwOH0sCisJezB4YWEsIDB4MDUsIDB4MDAxYn0sCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDE0LGNjICovCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCiAJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDA3LGNjICovCi0JezB4YTAsIDB4ZDIsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLGQyLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCiAJezB4YTAsIDB4NGQsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5Nyw0ZCxjYyAqLwotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKIAl7MHhhMCwgMHg0NCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJCS8qIDAwLDFkLDQ0LGNjICovCiAJezB4YTAsIDB4NmYsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw2ZixjYyAqLwogCXsweGEwLCAweGFkLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsMWYsYWQsY2MgKi8KQEAgLTQwOTQsMjMgKzQxMDAsMjMgQEAKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJCS8qIDAwLDE5LDAwLGNjICovCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLwogCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KLQl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KLQl7MHhhYSwgMHgyMSwgMHgwMDZjfSwJCQkJLyogMDAsMjEsNmMsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDA0fSwKKwl7MHhhYSwgMHgyMSwgMHgwMDNkfSwKIAl7MHhhYSwgMHgwMywgMHgwMDQxfSwJCQkJLyogMDAsMDMsNDEsYWEgKi8KLQl7MHhhYSwgMHgwNCwgMHgwMDA5fSwJCQkJLyogMDAsMDQsMDksYWEgKi8KLQl7MHhhYSwgMHgwNSwgMHgwMDJjfSwJCQkJLyogMDAsMDUsMmMsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDEwfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDNkfSwKIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgxYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKIAl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMGYsY2MgKi8KLQl7MHhhMCwgMHhiZSwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsYmUsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgzZCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHg5YiwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDliLGNjICovCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAogCXsweGEwLCAweDQxLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDEsY2MgKi8KIAl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDZmLGNjICovCiAJezB4YTAsIDB4YWQsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixhZCxjYyAqLwpAQCAtNDEzMCwxNiArNDEzNiwxNiBAQAogCXsweGFhLCAweDA1LCAweDAwMDB9LAkJCQkvKiAwMCwwNSwwMCxhYSAqLwogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwotCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwxNCxjYyAqLworCXsweGEwLCAweDFjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAogCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwNyxjYyAqLwotCXsweGEwLCAweGMwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixjMCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwogCXsweGEwLCAweDQwLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsNDAsY2MgKi8KLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywxMCxjYyAqLwotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCiAJezB4YTAsIDB4NDUsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0NSxjYyAqLwogCXsweGEwLCAweDhlLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsOGUsY2MgKi8KIAl7MHhhMCwgMHhjMSwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGMxLGNjICovCkBAIC00MTUyLDIzICs0MTU4LDIzIEBACiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCQkvKiAwMCwxOSwwMCxjYyAqLwogCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KIAl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCi0JezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCi0JezB4YWEsIDB4MjEsIDB4MDAwNH0sCQkJCS8qIDAwLDIxLDA0LGFhICovCisJezB4YWEsIDB4MjAsIDB4MDAwNH0sCisJezB4YWEsIDB4MjEsIDB4MDAwOH0sCiAJezB4YWEsIDB4MDMsIDB4MDA0Mn0sCQkJCS8qIDAwLDAzLDQyLGFhICovCi0JezB4YWEsIDB4MDQsIDB4MDAwOH0sCQkJCS8qIDAwLDA0LDA4LGFhICovCi0JezB4YWEsIDB4MDUsIDB4MDAwNH0sCQkJCS8qIDAwLDA1LDA0LGFhICovCisJezB4YWEsIDB4MDQsIDB4MDAxMH0sCisJezB4YWEsIDB4MDUsIDB4MDAwOH0sCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDE0LGNjICovCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCiAJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDBmLGNjICovCi0JezB4YTAsIDB4OWYsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLDlmLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCiAJezB4YTAsIDB4ODEsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5Nyw4MSxjYyAqLwotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKIAl7MHhhMCwgMHg0MiwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJCS8qIDAwLDFkLDQyLGNjICovCiAJezB4YTAsIDB4NmYsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw2ZixjYyAqLwogCXsweGEwLCAweGFmLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsMWYsYWYsY2MgKi8KQEAgLTQxODIsMjIgKzQxODgsMjIgQEAKIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDIwLGNjICovCiAJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwyMSxjYyAqLwogCXsweGFhLCAweDIwLCAweDAwMDJ9LAkJCQkvKiAwMCwyMCwwMixhYSAqLwotCXsweGFhLCAweDIxLCAweDAwMjB9LAkJCQkvKiAwMCwyMSwyMCxhYSAqLworCXsweGFhLCAweDIxLCAweDAwMDZ9LAogCXsweGFhLCAweDAzLCAweDAwNDB9LAkJCQkvKiAwMCwwMyw0MCxhYSAqLwogCXsweGFhLCAweDA0LCAweDAwMDh9LAkJCQkvKiAwMCwwNCwwOCxhYSAqLwotCXsweGFhLCAweDA1LCAweDAwMjB9LAkJCQkvKiAwMCwwNSwyMCxhYSAqLworCXsweGFhLCAweDA1LCAweDAwMDZ9LAogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMDcsY2MgKi8KLQl7MHhhMCwgMHhmMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsZjAsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDAyLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAogCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwwMCxjYyAqLwotCXsweGEwLCAweDAwLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDAwLGNjICovCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKIAl7MHhhMCwgMHg0MCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJCS8qIDAwLDFkLDQwLGNjICovCiAJezB4YTAsIDB4NjAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw2MCxjYyAqLwogCXsweGEwLCAweDkwLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsMWYsOTAsY2MgKi8KQEAgLTQyMTAsMjMgKzQyMTYsMjMgQEAKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJCS8qIDAwLDE5LDAwLGNjICovCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLwogCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KLQl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KLQl7MHhhYSwgMHgyMSwgMHgwMDEwfSwJCQkJLyogMDAsMjEsMTAsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDA0fSwKKwl7MHhhYSwgMHgyMSwgMHgwMDBjfSwKIAl7MHhhYSwgMHgwMywgMHgwMDQwfSwJCQkJLyogMDAsMDMsNDAsYWEgKi8KLQl7MHhhYSwgMHgwNCwgMHgwMDA4fSwJCQkJLyogMDAsMDQsMDgsYWEgKi8KLQl7MHhhYSwgMHgwNSwgMHgwMDEwfSwJCQkJLyogMDAsMDUsMTAsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDEwfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDBjfSwKIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDBmLGNjICovCi0JezB4YTAsIDB4ZjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLGYwLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5NywwMixjYyAqLwogCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwwMCxjYyAqLwotCXsweGEwLCAweDAwLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDAwLGNjICovCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKIAl7MHhhMCwgMHg0MCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJCS8qIDAwLDFkLDQwLGNjICovCiAJezB4YTAsIDB4NjAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw2MCxjYyAqLwogCXsweGEwLCAweDkwLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsMWYsOTAsY2MgKi8KQEAgLTQ3MTMsOCArNDcxOSw4IEBACiAJe30KIH07CiAKLS8qIGZyb20gb2VtOS5pbmYgLSBIS1IsJVBPMjAzMCUsSW5pdGlhbCAtIDY0MHg0ODAgLSAoY2xvc2UgdG8gQ1MyMTAyKSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF9tb2RlMFtdID0geworLyogZnJvbSBvZW05LmluZiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwgLyogMDAsMDAsMDEsY2MgKi8KIAl7MHhhMCwgMHgwNCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCS8qIDAwLDAyLDA0LGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sIC8qIDAwLDEwLDAxLGNjICovCkBAIC00NzkwLDggKzQ3OTYsOCBAQAogCXt9CiB9OwogCi0vKiBmcm9tIG9lbTkuaW5mIC0gSEtSLCVQTzIwMzAlLEluaXRpYWxTY2FsZSAtIDMyMHgyNDAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBQTzIwMzBfbW9kZTFbXSA9IHsKKy8qIGZyb20gb2VtOS5pbmYgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwbzIwMzBfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwgLyogMDAsMDAsMDEsY2MgKi8KIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sIC8qIDAwLDAyLDEwLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sIC8qIDAwLDEwLDAxLGNjICovCkBAIC00ODY3LDcgKzQ4NzMsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwbzIwMzBfNTBIWltdID0gewogCXsweGFhLCAweDhkLCAweDAwMDh9LCAvKiAwMCw4ZCwwOCxhYSAqLwogCXsweGFhLCAweDFhLCAweDAwMDF9LCAvKiAwMCwxYSwwMSxhYSAqLwogCXsweGFhLCAweDFiLCAweDAwMGF9LCAvKiAwMCwxYiwwYSxhYSAqLwpAQCAtNDg4OSw3ICs0ODk1LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcG8yMDMwXzYwSFpbXSA9IHsKIAl7MHhhYSwgMHg4ZCwgMHgwMDA4fSwgLyogMDAsOGQsMDgsYWEgKi8KIAl7MHhhYSwgMHgxYSwgMHgwMDAwfSwgLyogMDAsMWEsMDAsYWEgKi8KIAl7MHhhYSwgMHgxYiwgMHgwMGRlfSwgLyogMDAsMWIsZGUsYWEgKi8KQEAgLTQ5MTIsNyArNDkxOCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBQTzIwMzBfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwbzIwMzBfTm9GbGlrZXJbXSA9IHsKIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sIC8qIDAxLDgwLDAyLGNjICovCiAJezB4YWEsIDB4OGQsIDB4MDAwZH0sIC8qIDAwLDhkLDBkLGFhICovCiAJezB4YWEsIDB4MWEsIDB4MDAwMH0sIC8qIDAwLDFhLDAwLGFhICovCkBAIC00OTI0LDcgKzQ5MzAsNyBAQAogfTsKIAogLyogVEVTVCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBDS19Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNLX0luaXRpYWxTY2FsZVtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAxLCAweDAwM2J9LAogCXsweGEwLCAweDBlLCAweDAwM2F9LApAQCAtNTEyNyw3ICs1MTMzLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBDS19Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY0tfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAxLCAweDAwM2J9LAogCXsweGEwLCAweDBlLCAweDAwM2F9LApAQCAtNTU2MCw3ICs1NTY2LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxTY2FsZVtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MsICovCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAyLGNjLCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYywgKi8KQEAgLTU2MjcsNyArNTYzMyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjLCAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiAwMCwwOCwwMixjYywgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MsICovCkBAIC01NjkyLDggKzU2OTgsNyBAQAogCXsweGEwLCAweDY1LCBaQzNYWF9SMTE4X0JHQUlOfSwJCS8qIDAxLDE4LDY1LGNjICovCiAJe30KIH07Ci0vKiAiNTBIWiIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmlsdGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNTBIWlNjYWxlW10gPSB7CiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDF9LAkJLyogMDAsODMsMDEsYWEgKi8KIAl7MHhhYSwgMHg4NCwgMHgwMGFhfSwJCS8qIDAwLDg0LGFhLGFhICovCkBAIC01NzE3LDggKzU3MjIsNyBAQAogCXt9CiB9OwogCi0vKiAiNTBIWlNjYWxlIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNTBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzUwSFpbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwM30sCQkvKiAwMCw4MywwMyxhYSAqLwogCXsweGFhLCAweDg0LCAweDAwNTR9LAkJLyogMDAsODQsNTQsYWEgKi8KQEAgLTU3NDIsOCArNTc0Niw3IEBACiAJe30KIH07CiAKLS8qICI2MEhaIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNjBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF82MEhaU2NhbGVbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMX0sCQkvKiAwMCw4MywwMSxhYSAqLwogCXsweGFhLCAweDg0LCAweDAwNjJ9LAkJLyogMDAsODQsNjIsYWEgKi8KQEAgLTU3NjcsOCArNTc3MCw3IEBACiAJe30KIH07CiAKLS8qICI2MEhaU2NhbGUiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGlsdGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF82MEhaW10gPSB7CiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDJ9LAkJLyogMDAsODMsMDIsYWEgKi8KIAl7MHhhYSwgMHg4NCwgMHgwMGM0fSwJCS8qIDAwLDg0LGM0LGFhICovCkBAIC01NzkyLDggKzU3OTQsNyBAQAogCXt9CiB9OwogCi0vKiAiTm9GbGlrZXIiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGZsdGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwYywgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwJCS8qIDAxLDAwLDBjLGNjLCAqLwogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAwfSwJCS8qIDAwLDgzLDAwLGFhICovCkBAIC01ODE1LDggKzU4MTYsNyBAQAogCXt9CiB9OwogCi0vKiAiTm9GbGlrZXJTY2FsZSIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmlsdGVyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJbXSA9IHsKIAl7MHhhMCwgMHgwYywgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwJCS8qIDAxLDAwLDBjLGNjLCAqLwogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAwfSwJCS8qIDAwLDgzLDAwLGFhICovCkBAIC01ODM5LDcgKzU4MzksNyBAQAogfTsKIAogc3RhdGljIHU4IHJlZ19yX2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQlfX3UxNiBpbmRleCkKKwkJdTE2IGluZGV4KQogewogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCkBAIC01ODUyLDcgKzU4NTIsNyBAQAogfQogCiBzdGF0aWMgdTggcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQlfX3UxNiBpbmRleCkKKwkJdTE2IGluZGV4KQogewogCXU4IHJldDsKIApAQCAtNTg2Miw4ICs1ODYyLDggQEAKIH0KIAogc3RhdGljIHZvaWQgcmVnX3dfaShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkJX191OCB2YWx1ZSwKLQkJCV9fdTE2IGluZGV4KQorCQkJdTggdmFsdWUsCisJCQl1MTYgaW5kZXgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKGRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShkZXYsIDApLApAQCAtNTg3NCwxOCArNTg3NCwxOCBAQAogfQogCiBzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkJX191OCB2YWx1ZSwKLQkJCV9fdTE2IGluZGV4KQorCQkJdTggdmFsdWUsCisJCQl1MTYgaW5kZXgpCiB7CiAJUERFQlVHKERfVVNCTywgInJlZyB3IFslMDR4XSA9ICUwMngiLCBpbmRleCwgdmFsdWUpOwogCXJlZ193X2koZGV2LCB2YWx1ZSwgaW5kZXgpOwogfQogCi1zdGF0aWMgX191MTYgaTJjX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJX191OCByZWcpCitzdGF0aWMgdTE2IGkyY19yZWFkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4IHJlZykKIHsKLQlfX3U4IHJldGJ5dGU7Ci0JX191MTYgcmV0dmFsOworCXU4IHJldGJ5dGU7CisJdTE2IHJldHZhbDsKIAogCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIHJlZywgMHgwMDkyKTsKIAlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCAweDAyLCAweDAwOTApOwkJLyogPC0gcmVhZCBjb21tYW5kICovCkBAIC01OTAwLDEyICs1OTAwLDEyIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIF9fdTggaTJjX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCV9fdTggcmVnLAotCQkJX191OCB2YWxMLAotCQkJX191OCB2YWxIKQorc3RhdGljIHU4IGkyY193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCByZWcsCisJCQl1OCB2YWxMLAorCQkJdTggdmFsSCkKIHsKLQlfX3U4IHJldGJ5dGU7CisJdTggcmV0Ynl0ZTsKIAogCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIHJlZywgMHg5Mik7CiAJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgdmFsTCwgMHg5Myk7CkBAIC01OTU3LDI0ICs1OTU3LDI0IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBpOwotCWNvbnN0IF9fdTggKm1hdHJpeDsKKwljb25zdCB1OCAqbWF0cml4OwogCXN0YXRpYyBjb25zdCB1OCBhZGNtMjcwMF9tYXRyaXhbOV0gPQogLyoJCXsweDY2LCAweGVkLCAweGVkLCAweGVkLCAweDY2LCAweGVkLCAweGVkLCAweGVkLCAweDY2fTsgKi8KIC8qbXMtd2luKi8KIAkJezB4NzQsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NzQsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NzR9OwotCXN0YXRpYyBjb25zdCBfX3U4IGdjMDMwNV9tYXRyaXhbOV0gPQorCXN0YXRpYyBjb25zdCB1OCBnYzAzMDVfbWF0cml4WzldID0KIAkJezB4NTAsIDB4ZjgsIDB4ZjgsIDB4ZjgsIDB4NTAsIDB4ZjgsIDB4ZjgsIDB4ZjgsIDB4NTB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG92NzYyMF9tYXRyaXhbOV0gPQorCXN0YXRpYyBjb25zdCB1OCBvdjc2MjBfbWF0cml4WzldID0KIAkJezB4NTgsIDB4ZjQsIDB4ZjQsIDB4ZjQsIDB4NTgsIDB4ZjQsIDB4ZjQsIDB4ZjQsIDB4NTh9OwotCXN0YXRpYyBjb25zdCBfX3U4IHBhczIwMmJfbWF0cml4WzldID0KKwlzdGF0aWMgY29uc3QgdTggcGFzMjAyYl9tYXRyaXhbOV0gPQogCQl7MHg0YywgMHhmNSwgMHhmZiwgMHhmOSwgMHg1MSwgMHhmNSwgMHhmYiwgMHhlZCwgMHg1Zn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcG8yMDMwX21hdHJpeFs5XSA9CisJc3RhdGljIGNvbnN0IHU4IHBvMjAzMF9tYXRyaXhbOV0gPQogCQl7MHg2MCwgMHhmMCwgMHhmMCwgMHhmMCwgMHg2MCwgMHhmMCwgMHhmMCwgMHhmMCwgMHg2MH07CiAJc3RhdGljIGNvbnN0IHU4IHRhczUxMzBjX21hdHJpeFs5XSA9CiAJCXsweDY4LCAweGVjLCAweGVjLCAweGVjLCAweDY4LCAweGVjLCAweGVjLCAweGVjLCAweDY4fTsKLQlzdGF0aWMgY29uc3QgX191OCB2ZjAyNTBfbWF0cml4WzldID0KKwlzdGF0aWMgY29uc3QgdTggdmYwMjUwX21hdHJpeFs5XSA9CiAJCXsweDdiLCAweGVhLCAweGVhLCAweGVhLCAweDdiLCAweGVhLCAweGVhLCAweGVhLCAweDdifTsKLQlzdGF0aWMgY29uc3QgX191OCAqbWF0cml4X3RiW1NFTlNPUl9NQVhdID0geworCXN0YXRpYyBjb25zdCB1OCAqbWF0cml4X3RiW1NFTlNPUl9NQVhdID0gewogCQlhZGNtMjcwMF9tYXRyaXgsIC8qIFNFTlNPUl9BRENNMjcwMCAwICovCiAJCW92NzYyMF9tYXRyaXgsCS8qIFNFTlNPUl9DUzIxMDIgMSAqLwogCQlOVUxMLAkJLyogU0VOU09SX0NTMjEwMksgMiAqLwpAQCAtNjAwNiwxMSArNjAwNiwxMiBAQAogc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTggYnJpZ2h0bmVzczsKKwl1OCBicmlnaHRuZXNzOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX09WNzYyMDoKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKIAkJcmV0dXJuOwogCX0KQEAgLTYwMzQsNyArNjAzNSw3IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgc2hhcnBuZXNzOwotCXN0YXRpYyBjb25zdCBfX3U4IHNoYXJwbmVzc190YltdWzJdID0geworCXN0YXRpYyBjb25zdCB1OCBzaGFycG5lc3NfdGJbXVsyXSA9IHsKIAkJezB4MDIsIDB4MDN9LAogCQl7MHgwNCwgMHgwN30sCiAJCXsweDA4LCAweDBmfSwKQEAgLTYwNTMsMTE4ICs2MDU0LDY5IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQljb25zdCBfX3U4ICpUZ2FtbWEsICpUZ3JhZGllbnQ7Ci0JaW50IGcsIGksIGs7Ci0Jc3RhdGljIGNvbnN0IF9fdTgga2dhbW1hX3RiWzE2XSA9CS8qIGRlbHRhIGZvciBjb250cmFzdCAqLworCWNvbnN0IHU4ICpUZ2FtbWE7CisJaW50IGcsIGksIGssIGFkaiwgZ3A7CisJdTggZ3JbMTZdOworCXN0YXRpYyBjb25zdCB1OCBkZWx0YV90YlsxNl0gPQkJLyogZGVsdGEgZm9yIGNvbnRyYXN0ICovCiAJCXsweDE1LCAweDBkLCAweDBhLCAweDA5LCAweDA4LCAweDA4LCAweDA4LCAweDA4LAogCQkgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOH07Ci0Jc3RhdGljIGNvbnN0IF9fdTgga2dyYWRfdGJbMTZdID0KLQkJezB4MWIsIDB4MDYsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCSAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA2LCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ2FtbWFfMVsxNl0gPQorCXN0YXRpYyBjb25zdCB1OCBnYW1tYV90Yls2XVsxNl0gPSB7CiAJCXsweDAwLCAweDAwLCAweDAzLCAweDBkLCAweDFiLCAweDJlLCAweDQ1LCAweDVmLAotCQkgMHg3OSwgMHg5MywgMHhhYiwgMHhjMSwgMHhkNCwgMHhlNSwgMHhmMywgMHhmZn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdyYWRpZW50XzFbMTZdID0KLQkJezB4MDAsIDB4MDEsIDB4MDUsIDB4MGIsIDB4MTAsIDB4MTUsIDB4MTgsIDB4MWEsCi0JCSAweDFhLCAweDE4LCAweDE2LCAweDE0LCAweDEyLCAweDBmLCAweDBkLCAweDA2fTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ2FtbWFfMlsxNl0gPQorCQkgMHg3OSwgMHg5MywgMHhhYiwgMHhjMSwgMHhkNCwgMHhlNSwgMHhmMywgMHhmZn0sCiAJCXsweDAxLCAweDBjLCAweDFmLCAweDNhLCAweDUzLCAweDZkLCAweDg1LCAweDljLAotCQkgMHhiMCwgMHhjMiwgMHhkMSwgMHhkZSwgMHhlOSwgMHhmMiwgMHhmOSwgMHhmZn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdyYWRpZW50XzJbMTZdID0KLQkJezB4MDUsIDB4MGYsIDB4MTYsIDB4MWEsIDB4MTksIDB4MTksIDB4MTcsIDB4MTUsCi0JCSAweDEyLCAweDEwLCAweDBlLCAweDBiLCAweDA5LCAweDA4LCAweDA2LCAweDAzfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ2FtbWFfM1sxNl0gPQorCQkgMHhiMCwgMHhjMiwgMHhkMSwgMHhkZSwgMHhlOSwgMHhmMiwgMHhmOSwgMHhmZn0sCiAJCXsweDA0LCAweDE2LCAweDMwLCAweDRlLCAweDY4LCAweDgxLCAweDk4LCAweGFjLAotCQkgMHhiZSwgMHhjZCwgMHhkYSwgMHhlNCwgMHhlZCwgMHhmNSwgMHhmYiwgMHhmZn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdyYWRpZW50XzNbMTZdID0KLQkJezB4MGMsIDB4MTYsIDB4MWIsIDB4MWMsIDB4MTksIDB4MTgsIDB4MTUsIDB4MTIsCi0JCSAweDEwLCAweDBkLCAweDBiLCAweDA5LCAweDA4LCAweDA2LCAweDA1LCAweDAzfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ2FtbWFfNFsxNl0gPQorCQkgMHhiZSwgMHhjZCwgMHhkYSwgMHhlNCwgMHhlZCwgMHhmNSwgMHhmYiwgMHhmZn0sCiAJCXsweDEzLCAweDM4LCAweDU5LCAweDc5LCAweDkyLCAweGE3LCAweGI5LCAweGM4LAotCQkgMHhkNCwgMHhkZiwgMHhlNywgMHhlZSwgMHhmNCwgMHhmOSwgMHhmYywgMHhmZn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdyYWRpZW50XzRbMTZdID0KLQkJezB4MjYsIDB4MjIsIDB4MjAsIDB4MWMsIDB4MTYsIDB4MTMsIDB4MTAsIDB4MGQsCi0JCSAweDBiLCAweDA5LCAweDA3LCAweDA2LCAweDA1LCAweDA0LCAweDAzLCAweDAyfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ2FtbWFfNVsxNl0gPQorCQkgMHhkNCwgMHhkZiwgMHhlNywgMHhlZSwgMHhmNCwgMHhmOSwgMHhmYywgMHhmZn0sCiAJCXsweDIwLCAweDRiLCAweDZlLCAweDhkLCAweGEzLCAweGI1LCAweGM1LCAweGQyLAotCQkgMHhkYywgMHhlNSwgMHhlYywgMHhmMiwgMHhmNiwgMHhmYSwgMHhmZCwgMHhmZn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdyYWRpZW50XzVbMTZdID0KLQkJezB4MzcsIDB4MjYsIDB4MjAsIDB4MWEsIDB4MTQsIDB4MTAsIDB4MGUsIDB4MGIsCi0JCSAweDA5LCAweDA3LCAweDA2LCAweDA1LCAweDA0LCAweDAzLCAweDAyLCAweDAyfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ2FtbWFfNlsxNl0gPQkJLyogPz8gd2FzIGdhbW1hIDUgKi8KKwkJIDB4ZGMsIDB4ZTUsIDB4ZWMsIDB4ZjIsIDB4ZjYsIDB4ZmEsIDB4ZmQsIDB4ZmZ9LAogCQl7MHgyNCwgMHg0NCwgMHg2NCwgMHg4NCwgMHg5ZCwgMHhiMiwgMHhjNCwgMHhkMywKLQkJIDB4ZTAsIDB4ZWIsIDB4ZjQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRncmFkaWVudF82WzE2XSA9Ci0JCXsweDE4LCAweDIwLCAweDIwLCAweDFjLCAweDE2LCAweDEzLCAweDEwLCAweDBlLAotCQkgMHgwYiwgMHgwOSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX07Ci0Jc3RhdGljIGNvbnN0IF9fdTggKmdhbW1hX3RiW10gPSB7Ci0JCU5VTEwsIFRnYW1tYV8xLCBUZ2FtbWFfMiwKLQkJVGdhbW1hXzMsIFRnYW1tYV80LCBUZ2FtbWFfNSwgVGdhbW1hXzYKKwkJIDB4ZTAsIDB4ZWIsIDB4ZjQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9LAogCX07Ci0Jc3RhdGljIGNvbnN0IF9fdTggKmdyYWRpZW50X3RiW10gPSB7Ci0JCU5VTEwsIFRncmFkaWVudF8xLCBUZ3JhZGllbnRfMiwKLQkJVGdyYWRpZW50XzMsIFRncmFkaWVudF80LCBUZ3JhZGllbnRfNSwgVGdyYWRpZW50XzYKLQl9OwotI2lmZGVmIEdTUENBX0RFQlVHCi0JX191OCB2WzE2XTsKLSNlbmRpZgogCi0JVGdhbW1hID0gZ2FtbWFfdGJbc2QtPmdhbW1hXTsKLQlUZ3JhZGllbnQgPSBncmFkaWVudF90YltzZC0+Z2FtbWFdOworCVRnYW1tYSA9IGdhbW1hX3RiW3NkLT5nYW1tYSAtIDFdOwogCi0JayA9IChzZC0+Y29udHJhc3QgLSAxMjgpCQkvKiAtMTI4IC8gMTI4ICovCi0JCQkqIFRnYW1tYVswXTsKLQlQREVCVUcoRF9DT05GLCAiZ2FtbWE6JWQgY29udHJhc3Q6JWQgZ2FtbWEgY29lZmY6ICVkLzEyOCIsCi0JCXNkLT5nYW1tYSwgc2QtPmNvbnRyYXN0LCBrKTsKKwlrID0gKChpbnQpIHNkLT5jb250cmFzdCAtIDEyOCk7CQkvKiAtMTI4IC8gMTI4ICovCisJYWRqID0gMDsKKwlncCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJZyA9IFRnYW1tYVtpXSArIGtnYW1tYV90YltpXSAqIGsgLyAxMjg7CisJCWcgPSBUZ2FtbWFbaV0gLSBkZWx0YV90YltpXSAqIGsgLyAxMjggLSBhZGogLyAyOwogCQlpZiAoZyA+IDB4ZmYpCiAJCQlnID0gMHhmZjsKIAkJZWxzZSBpZiAoZyA8PSAwKQogCQkJZyA9IDE7CiAJCXJlZ193KGRldiwgZywgMHgwMTIwICsgaSk7CS8qIGdhbW1hICovCi0jaWZkZWYgR1NQQ0FfREVCVUcKLQkJaWYgKGdzcGNhX2RlYnVnICYgRF9DT05GKQotCQkJdltpXSA9IGc7Ci0jZW5kaWYKLQl9Ci0JUERFQlVHKERfQ09ORiwgInRiOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAotCQl2WzBdLCB2WzFdLCB2WzJdLCB2WzNdLCB2WzRdLCB2WzVdLCB2WzZdLCB2WzddKTsKLQlQREVCVUcoRF9DT05GLCAiICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCi0JCXZbOF0sIHZbOV0sIHZbMTBdLCB2WzExXSwgdlsxMl0sIHZbMTNdLCB2WzE0XSwgdlsxNV0pOwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWcgPSBUZ3JhZGllbnRbaV0gLSBrZ3JhZF90YltpXSAqIGsgLyAxMjg7Ci0JCWlmIChnID4gMHhmZikKLQkJCWcgPSAweGZmOwotCQllbHNlIGlmIChnIDw9IDApIHsKLQkJCWlmIChpICE9IDE1KQotCQkJCWcgPSAwOworCQlpZiAoayA+IDApCisJCQlhZGotLTsKKwkJZWxzZQorCQkJYWRqKys7CisKKwkJaWYgKGkgIT0gMCkgeworCQkJaWYgKGdwID09IDApCisJCQkJZ3JbaSAtIDFdID0gMDsKIAkJCWVsc2UKLQkJCQlnID0gMTsKKwkJCQlncltpIC0gMV0gPSBnIC0gZ3A7CiAJCX0KLQkJcmVnX3coZGV2LCBnLCAweDAxMzAgKyBpKTsJLyogZ3JhZGllbnQgKi8KLSNpZmRlZiBHU1BDQV9ERUJVRwotCQlpZiAoZ3NwY2FfZGVidWcgJiBEX0NPTkYpCi0JCQl2W2ldID0gZzsKLSNlbmRpZgorCQlncCA9IGc7CiAJfQotCVBERUJVRyhEX0NPTkYsICIgICAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKLQkJdlswXSwgdlsxXSwgdlsyXSwgdlszXSwgdls0XSwgdls1XSwgdls2XSwgdls3XSk7Ci0JUERFQlVHKERfQ09ORiwgIiAgICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAotCQl2WzhdLCB2WzldLCB2WzEwXSwgdlsxMV0sIHZbMTJdLCB2WzEzXSwgdlsxNF0sIHZbMTVdKTsKKwlnclsxNV0gPSBnclsxNF0gLyAyOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlyZWdfdyhkZXYsIGdyW2ldLCAweDAxMzAgKyBpKTsJLyogZ3JhZGllbnQgKi8KIH0KIAogc3RhdGljIHZvaWQgc2V0cXVhbGl0eShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlfX3U4IGZyeHQ7CisJdTggZnJ4dDsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0FEQ00yNzAwOgogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9IVjcxMzFCOgogCWNhc2UgU0VOU09SX09WNzYyMDoKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKIAkJcmV0dXJuOwogCX0KQEAgLTYyMTgsOSArNjE3MCw5IEBACiAJCSBoZGNzMjAyMGJfNTBIWiwgaGRjczIwMjBiXzUwSFosCiAJCSBoZGNzMjAyMGJfNjBIWiwgaGRjczIwMjBiXzYwSFp9LAogLyogU0VOU09SX0hWNzEzMUIgNSAqLwotCQl7aHY3MTMxYl9Ob0ZsaWtlclNjYWxlLCBodjcxMzFiX05vRmxpa2VyLAotCQkgaHY3MTMxYl81MEhaU2NhbGUsIGh2NzEzMWJfNTBIWiwKLQkJIGh2NzEzMWJfNjBIWlNjYWxlLCBodjcxMzFiXzYwSFp9LAorCQl7aHY3MTMxYl9Ob0ZsaWtlciwgaHY3MTMxYl9Ob0ZsaWtlclNjYWxlLAorCQkgaHY3MTMxYl81MEhaLCBodjcxMzFiXzUwSFpTY2FsZSwKKwkJIGh2NzEzMWJfNjBIWiwgaHY3MTMxYl82MEhaU2NhbGV9LAogLyogU0VOU09SX0hWNzEzMUMgNiAqLwogCQl7TlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEwsCkBAIC02MjMwLDE3ICs2MTgyLDE3IEBACiAJCSBpY20xMDVhXzUwSFosIGljbTEwNWFfNTBIWlNjYWxlLAogCQkgaWNtMTA1YV82MEhaLCBpY20xMDVhXzYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfTUM1MDFDQiA4ICovCi0JCXtNQzUwMUNCX05vRmxpa2VyLCBNQzUwMUNCX05vRmxpa2VyU2NhbGUsCi0JCSBNQzUwMUNCXzUwSFosIE1DNTAxQ0JfNTBIWlNjYWxlLAotCQkgTUM1MDFDQl82MEhaLCBNQzUwMUNCXzYwSFpTY2FsZX0sCisJCXttYzUwMWNiX05vRmxpa2VyLCBtYzUwMWNiX05vRmxpa2VyU2NhbGUsCisJCSBtYzUwMWNiXzUwSFosIG1jNTAxY2JfNTBIWlNjYWxlLAorCQkgbWM1MDFjYl82MEhaLCBtYzUwMWNiXzYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfTUkwMzYwU09DIDkgKi8KLQkJe21pMzYwc29jX0FFTm9GbGlrZXJTY2FsZSwgbWkzNjBzb2NfQUVOb0ZsaWtlciwKLQkJIG1pMzYwc29jX0FFNTBIWlNjYWxlLCBtaTM2MHNvY19BRTUwSFosCi0JCSBtaTM2MHNvY19BRTYwSFpTY2FsZSwgbWkzNjBzb2NfQUU2MEhafSwKKwkJe21pMzYwc29jX0FFTm9GbGlrZXIsIG1pMzYwc29jX0FFTm9GbGlrZXJTY2FsZSwKKwkJIG1pMzYwc29jX0FFNTBIWiwgbWkzNjBzb2NfQUU1MEhaU2NhbGUsCisJCSBtaTM2MHNvY19BRTYwSFosIG1pMzYwc29jX0FFNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9PVjc2MjAgMTAgKi8KLQkJe09WNzYyMF9Ob0ZsaWtlciwgT1Y3NjIwX05vRmxpa2VyLAotCQkgT1Y3NjIwXzUwSFosIE9WNzYyMF81MEhaLAotCQkgT1Y3NjIwXzYwSFosIE9WNzYyMF82MEhafSwKKwkJe292NzYyMF9Ob0ZsaWtlciwgb3Y3NjIwX05vRmxpa2VyLAorCQkgb3Y3NjIwXzUwSFosIG92NzYyMF81MEhaLAorCQkgb3Y3NjIwXzYwSFosIG92NzYyMF82MEhafSwKIC8qIFNFTlNPUl9PVjc2MzBDIDExICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKQEAgLTYyNTgsMTcgKzYyMTAsMTcgQEAKIAkJIHBiMDMzMF81MEhaU2NhbGUsIHBiMDMzMF81MEhaLAogCQkgcGIwMzMwXzYwSFpTY2FsZSwgcGIwMzMwXzYwSFp9LAogLyogU0VOU09SX1BPMjAzMCAxNSAqLwotCQl7UE8yMDMwX05vRmxpa2VyLCBQTzIwMzBfTm9GbGlrZXIsCi0JCSBQTzIwMzBfNTBIWiwgUE8yMDMwXzUwSFosCi0JCSBQTzIwMzBfNjBIWiwgUE8yMDMwXzYwSFp9LAorCQl7cG8yMDMwX05vRmxpa2VyLCBwbzIwMzBfTm9GbGlrZXIsCisJCSBwbzIwMzBfNTBIWiwgcG8yMDMwXzUwSFosCisJCSBwbzIwMzBfNjBIWiwgcG8yMDMwXzYwSFp9LAogLyogU0VOU09SX1RBUzUxMzBDSyAxNiAqLwotCQl7dGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlLCB0YXM1MTMwY3h4X05vRmxpa2VyLAotCQkgdGFzNTEzMGN4eF81MEhaU2NhbGUsIHRhczUxMzBjeHhfNTBIWiwKLQkJIHRhczUxMzBjeHhfNjBIWlNjYWxlLCB0YXM1MTMwY3h4XzYwSFp9LAorCQl7dGFzNTEzMGN4eF9Ob0ZsaWtlciwgdGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlLAorCQkgdGFzNTEzMGN4eF81MEhaLCB0YXM1MTMwY3h4XzUwSFpTY2FsZSwKKwkJIHRhczUxMzBjeHhfNjBIWiwgdGFzNTEzMGN4eF82MEhaU2NhbGV9LAogLyogU0VOU09SX1RBUzUxMzBDWFggMTcgKi8KLQkJe3RhczUxMzBjeHhfTm9GbGlrZXJTY2FsZSwgdGFzNTEzMGN4eF9Ob0ZsaWtlciwKLQkJIHRhczUxMzBjeHhfNTBIWlNjYWxlLCB0YXM1MTMwY3h4XzUwSFosCi0JCSB0YXM1MTMwY3h4XzYwSFpTY2FsZSwgdGFzNTEzMGN4eF82MEhafSwKKwkJe3RhczUxMzBjeHhfTm9GbGlrZXIsIHRhczUxMzBjeHhfTm9GbGlrZXJTY2FsZSwKKwkJIHRhczUxMzBjeHhfNTBIWiwgdGFzNTEzMGN4eF81MEhaU2NhbGUsCisJCSB0YXM1MTMwY3h4XzYwSFosIHRhczUxMzBjeHhfNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTggKi8KIAkJe3RhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlciwgdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyU2NhbGUsCiAJCSB0YXM1MTMwY192ZjAyNTBfNTBIWiwgdGFzNTEzMGNfdmYwMjUwXzUwSFpTY2FsZSwKQEAgLTYyNzcsOSArNjIyOSw5IEBACiAKIAlpID0gc2QtPmxpZ2h0ZnJlcSAqIDI7CiAJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwotCWlmICghbW9kZSkKLQkJaSsrOwkJCS8qIDY0MHg0ODAgKi8KLQl6YzNfZnJlcSA9IGZyZXFfdGJbKGludCkgc2QtPnNlbnNvcl1baV07CisJaWYgKG1vZGUpCisJCWkrKzsJCQkvKiAzMjB4MjQwICovCisJemMzX2ZyZXEgPSBmcmVxX3RiW3NkLT5zZW5zb3JdW2ldOwogCWlmICh6YzNfZnJlcSAhPSBOVUxMKSB7CiAJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHpjM19mcmVxKTsKIAkJc3dpdGNoIChzZC0+c2Vuc29yKSB7CkBAIC02Mjk3LDYgKzYyNDksOSBAQAogCQkJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg0NCwgMHgwMDAyKTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFNFTlNPUl9QQVMyMDJCOgorCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDAsIDB4MDFhNyk7CisJCQlicmVhazsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTYzMDUsNyArNjI2MCw3IEBACiBzdGF0aWMgdm9pZCBzZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTggYXV0b3ZhbDsKKwl1OCBhdXRvdmFsOwogCiAJaWYgKHNkLT5hdXRvZ2FpbikKIAkJYXV0b3ZhbCA9IDB4NDI7CkBAIC02MzMzLDYgKzYyODgsMTIgQEAKIAkJcmVnX3coZGV2LCAweDAyLCAweDAwM2IpOwogCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAzOCk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX1BBUzIwMkI6CisJCXJlZ193KGRldiwgMHgwMywgMHgwMDNiKTsKKwkJcmVnX3coZGV2LCAweDBjLCAweDAwM2EpOworCQlyZWdfdyhkZXYsIDB4MGIsIDB4MDAzOSk7CisJCXJlZ193KGRldiwgMHgwYiwgMHgwMDM4KTsKKwkJYnJlYWs7CiAJfQogfQogCkBAIC02MzQ5LDcgKzYzMTAsNyBAQAogCiBzdGF0aWMgaW50IHNpZl9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JX191MTYgY2hlY2t3b3JkOworCXUxNiBjaGVja3dvcmQ7CiAKIAlzdGFydF8yd3JfcHJvYmUoZ3NwY2FfZGV2LT5kZXYsIDB4MGYpOwkJLyogUEFTMTA2ICovCiAJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDgsIDB4MDA4ZCk7CkBAIC02MzkyLDYgKzYzNTMsNyBAQAogCX0KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDgpOwkJLyogSERDUzIwMjAgKi8KKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDFjLCAweDAwLCAweDAwKTsKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDE1LCAweGFhLCAweDAwKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDE1KTsKIAlpZiAocmV0d29yZCAhPSAwKQpAQCAtNjQyMCw4ICs2MzgyLDEwIEBACiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMywgMHhhYSwgMHgwMCk7CiAJbXNsZWVwKDUwKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAzKTsKLQlpZiAocmV0d29yZCAhPSAwKQorCWlmIChyZXR3b3JkICE9IDApIHsKKwkJc2VuZF91bmtub3duKGRldiwgU0VOU09SX1BBUzIwMkIpOwogCQlyZXR1cm4gMHgwZTsJCQkvKiBQQVMyMDJCQ0IgKi8KKwl9CiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDAyKTsJCS8qIFRBUzUxMzBDICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMSwgMHhhYSwgMHgwMCk7CkBAIC02NDU3LDggKzY0MjEsOCBAQAogfQogCiBzdHJ1Y3Qgc2Vuc29yX2J5X2NoaXBzZXRfcmV2aXNpb24gewotCV9fdTE2IHJldmlzaW9uOwotCV9fdTggaW50ZXJuYWxfc2Vuc29yX2lkOworCXUxNiByZXZpc2lvbjsKKwl1OCBpbnRlcm5hbF9zZW5zb3JfaWQ7CiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBzZW5zb3JfYnlfY2hpcHNldF9yZXZpc2lvbiBjaGlwc2V0X3JldmlzaW9uX3NlbnNvcltdID0gewogCXsweGMwMDAsIDB4MTJ9LAkJLyogVEFTNTEzMEMgKi8KQEAgLTY0NjcsNiArNjQzMSw3IEBACiAJezB4ODAwMSwgMHgxM30sCiAJezB4ODAwMCwgMHgxNH0sCQkvKiBDUzIxMDJLICovCiAJezB4ODQwMCwgMHgxNX0sCQkvKiBUQVM1MTMwSyAqLworCXsweGU0MDAsIDB4MTV9LAogfTsKIAogc3RhdGljIGludCB2Z2FfM3dyX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTY0NzQsNyArNjQzOSw3IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgaTsKLQlfX3U4IHJldGJ5dGU7CisJdTggcmV0Ynl0ZTsKIAl1MTYgcmV0d29yZDsKIAogLypmaXhtZTogbGFjayBvZiA4Yj1iMyAoMTEsMTIpLT4gMTAsIDhiPWUwICgxNCwxNSwxNiktPiAxMiBmb3VuZCBpbiBnc3BjYXYxKi8KQEAgLTY2MjIsOCArNjU4Nyw3IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKIAlpbnQgc2Vuc29yOwotCWludCB2Z2EgPSAxOwkJLyogMTogdmdhLCAwOiBzaWYgKi8KLQlzdGF0aWMgY29uc3QgX191OCBnYW1tYVtTRU5TT1JfTUFYXSA9IHsKKwlzdGF0aWMgY29uc3QgdTggZ2FtbWFbU0VOU09SX01BWF0gPSB7CiAJCTQsCS8qIFNFTlNPUl9BRENNMjcwMCAwICovCiAJCTQsCS8qIFNFTlNPUl9DUzIxMDIgMSAqLwogCQk1LAkvKiBTRU5TT1JfQ1MyMTAySyAyICovCkBAIC02NjQ0LDkgKzY2MDgsMzAgQEAKIAkJMywJLyogU0VOU09SX1RBUzUxMzBDWFggMTcgKi8KIAkJMywJLyogU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxOCAqLwogCX07CisJc3RhdGljIGNvbnN0IHU4IG1vZGVfdGJbU0VOU09SX01BWF0gPSB7CisJCTIsCS8qIFNFTlNPUl9BRENNMjcwMCAwICovCisJCTEsCS8qIFNFTlNPUl9DUzIxMDIgMSAqLworCQkxLAkvKiBTRU5TT1JfQ1MyMTAySyAyICovCisJCTEsCS8qIFNFTlNPUl9HQzAzMDUgMyAqLworCQkxLAkvKiBTRU5TT1JfSERDUzIwMjBiIDQgKi8KKwkJMSwJLyogU0VOU09SX0hWNzEzMUIgNSAqLworCQkxLAkvKiBTRU5TT1JfSFY3MTMxQyA2ICovCisJCTEsCS8qIFNFTlNPUl9JQ00xMDVBIDcgKi8KKwkJMiwJLyogU0VOU09SX01DNTAxQ0IgOCAqLworCQkxLAkvKiBTRU5TT1JfTUkwMzYwU09DIDkgKi8KKwkJMiwJLyogU0VOU09SX09WNzYyMCAxMCAqLworCQkxLAkvKiBTRU5TT1JfT1Y3NjMwQyAxMSAqLworCQkwLAkvKiBTRU5TT1JfUEFTMTA2IDEyICovCisJCTEsCS8qIFNFTlNPUl9QQVMyMDJCIDEzICovCisJCTEsCS8qIFNFTlNPUl9QQjAzMzAgMTQgKi8KKwkJMSwJLyogU0VOU09SX1BPMjAzMCAxNSAqLworCQkxLAkvKiBTRU5TT1JfVEFTNTEzMENLIDE2ICovCisJCTEsCS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE3ICovCisJCTEsCS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTggKi8KKwl9OwogCiAJLyogZGVmaW5lIHNvbWUgc2Vuc29ycyBmcm9tIHRoZSB2ZW5kb3IvcHJvZHVjdCAqLwotCXNkLT5zaGFycG5lc3MgPSAyOworCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOwogCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm87CiAJc2Vuc29yID0gemN4eF9wcm9iZVNlbnNvcihnc3BjYV9kZXYpOwogCWlmIChzZW5zb3IgPj0gMCkKQEAgLTY2NzEsOCArNjY1NiwyMSBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgMDoKLQkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSFY3MTMxQiIpOwotCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9IVjcxMzFCOworCQkJLyogY2hlY2sgdGhlIHNlbnNvciB0eXBlICovCisJCQlzZW5zb3IgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOworCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaHY3MTMxIHR5cGUgJWQiLCBzZW5zb3IpOworCQkJc3dpdGNoIChzZW5zb3IpIHsKKwkJCWNhc2UgMDoJCQkvKiBodjcxMzFiICovCisJCQljYXNlIDE6CQkJLyogaHY3MTMxZSAqLworCQkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSFY3MTMxQiIpOworCQkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSFY3MTMxQjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisvKgkJCWNhc2UgMjoJCQkgKiBodjcxMzFyICovCisJCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFSKGMpIik7CisJCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9IVjcxMzFDOworCQkJCWJyZWFrOworCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMjoKIAkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIFRBUzUxMzBDIik7CkBAIC02Njk5LDEyICs2Njk3LDExIEBACiAJCWNhc2UgMHgwZToKIAkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgUEFTMjAyQiIpOwogCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9QQVMyMDJCOwotCQkJc2QtPnNoYXJwbmVzcyA9IDE7CisvKgkJCXNkLT5zaGFycG5lc3MgPSAxOyAqLwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwZjoKIAkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgUEFTMTA2Iik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX1BBUzEwNjsKLQkJCXZnYSA9IDA7CQkvKiBTSUYgKi8KIAkJCWJyZWFrOwogCQljYXNlIDB4MTA6CiAJCWNhc2UgMHgxMjoKQEAgLTY3NzAsMzEgKzY3NjcsMzggQEAKIAlpZiAoc2Vuc29yIDwgMHgyMCkgewogCQlpZiAoc2Vuc29yID09IC0xIHx8IHNlbnNvciA9PSAweDEwIHx8IHNlbnNvciA9PSAweDEyKQogCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDAxMCk7Ci0JCWVsc2UKLQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCBzZW5zb3IgJiAweDBmLCAweDAwMTApOwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7CiAJfQogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogLypmaXhtZTp0ZXN0Ki8KIAlnc3BjYV9kZXYtPm5iYWx0LS07Ci0JaWYgKHZnYSkgewotCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7Ci0JCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7Ci0JfSBlbHNlIHsKKwlzd2l0Y2ggKG1vZGVfdGJbc2QtPnNlbnNvcl0pIHsKKwljYXNlIDA6CiAJCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKIAkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHNpZl9tb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIDI6ICovCisJCWNhbS0+Y2FtX21vZGUgPSBicm9rZW5fdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShicm9rZW5fdmdhX21vZGUpOworCQlicmVhazsKIAl9Ci0Jc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5nYW1tYSA9IGdhbW1hWyhpbnQpIHNkLT5zZW5zb3JdOwotCXNkLT5hdXRvZ2FpbiA9IHNkX2N0cmxzW1NEX0FVVE9HQUlOXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5saWdodGZyZXEgPSBzZF9jdHJsc1tTRF9GUkVRXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOworCXNkLT5nYW1tYSA9IGdhbW1hW3NkLT5zZW5zb3JdOworCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKKwlzZC0+bGlnaHRmcmVxID0gRlJFUV9ERUY7CiAJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9PVjc2MjA6CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAljYXNlIFNFTlNPUl9QTzIwMzA6CiAJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBCUklHSFRORVNTX0lEWCk7CiAJCWJyZWFrOwpAQCAtNjgwNSwxNCArNjgwOSwxMyBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBzd2l0Y2ggdGhlIGxlZCBvZmYgKi8KLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMSwgMHgwMDAwKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogeworCS8qIHN3aXRjaCBvZmYgdGhlIGxlZCAqLwogCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDAxLCAweDAwMDApOwogCXJldHVybiAwOwogfQpAQCAtNjgyMSwyOCArNjgyNCwyNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKnpjM19pbml0OwogCWludCBtb2RlOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqaW5pdF90YltTRU5TT1JfTUFYXVsyXSA9IHsKIAkJe2FkY20yNzAwX0luaXRpYWwsIGFkY20yNzAwX0luaXRpYWxTY2FsZX0sCS8qIDAgKi8KLQkJe2NzMjEwMl9Jbml0aWFsU2NhbGUsIGNzMjEwMl9Jbml0aWFsfSwJCS8qIDEgKi8KLQkJe2NzMjEwMktfSW5pdGlhbFNjYWxlLCBjczIxMDJLX0luaXRpYWx9LAkvKiAyICovCisJCXtjczIxMDJfSW5pdGlhbCwgY3MyMTAyX0luaXRpYWxTY2FsZX0sCQkvKiAxICovCisJCXtjczIxMDJLX0luaXRpYWwsIGNzMjEwMktfSW5pdGlhbFNjYWxlfSwJLyogMiAqLwogCQl7Z2MwMzA1X0luaXRpYWwsIGdjMDMwNV9Jbml0aWFsU2NhbGV9LAkJLyogMyAqLwotCQl7aGRjczIwMjB4Yl9Jbml0aWFsU2NhbGUsIGhkY3MyMDIweGJfSW5pdGlhbH0sCS8qIDQgKi8KLQkJe2h2NzEzMWJ4eF9Jbml0aWFsU2NhbGUsIGh2NzEzMWJ4eF9Jbml0aWFsfSwJLyogNSAqLwotCQl7aHY3MTMxY3h4X0luaXRpYWxTY2FsZSwgaHY3MTMxY3h4X0luaXRpYWx9LAkvKiA2ICovCi0JCXtpY20xMDVheHhfSW5pdGlhbFNjYWxlLCBpY20xMDVheHhfSW5pdGlhbH0sCS8qIDcgKi8KLQkJe01DNTAxQ0JfSW5pdGlhbFNjYWxlLCBNQzUwMUNCX0luaXRpYWx9LAkvKiA4ICovCisJCXtoZGNzMjAyMGJfSW5pdGlhbCwgaGRjczIwMjBiX0luaXRpYWxTY2FsZX0sCS8qIDQgKi8KKwkJe2h2NzEzMWJfSW5pdGlhbCwgaHY3MTMxYl9Jbml0aWFsU2NhbGV9LAkvKiA1ICovCisJCXtodjcxMzFyX0luaXRpYWwsIGh2NzEzMXJfSW5pdGlhbFNjYWxlfSwJLyogNiAqLworCQl7aWNtMTA1YV9Jbml0aWFsLCBpY20xMDVhX0luaXRpYWxTY2FsZX0sCS8qIDcgKi8KKwkJe21jNTAxY2JfSW5pdGlhbCwgbWM1MDFjYl9Jbml0aWFsU2NhbGV9LAkvKiA4ICovCiAJCXttaTAzNjBzb2NfSW5pdGlhbCwgbWkwMzYwc29jX0luaXRpYWxTY2FsZX0sCS8qIDkgKi8KLQkJe09WNzYyMF9tb2RlMCwgT1Y3NjIwX21vZGUxfSwJCQkvKiAxMCAqLwotCQl7b3Y3NjMwY19Jbml0aWFsU2NhbGUsIG92NzYzMGNfSW5pdGlhbH0sCS8qIDExICovCi0JCXtwYXMxMDZiX0luaXRpYWxTY2FsZSwgcGFzMTA2Yl9Jbml0aWFsfSwJLyogMTIgKi8KKwkJe292NzYyMF9Jbml0aWFsLCBvdjc2MjBfSW5pdGlhbFNjYWxlfSwJCS8qIDEwICovCisJCXtvdjc2MzBjX0luaXRpYWwsIG92NzYzMGNfSW5pdGlhbFNjYWxlfSwJLyogMTEgKi8KKwkJe3BhczEwNmJfSW5pdGlhbCwgcGFzMTA2Yl9Jbml0aWFsU2NhbGV9LAkvKiAxMiAqLwogCQl7cGFzMjAyYl9Jbml0aWFsLCBwYXMyMDJiX0luaXRpYWxTY2FsZX0sCS8qIDEzICovCiAJCXtwYjAzMzBfSW5pdGlhbCwgcGIwMzMwX0luaXRpYWxTY2FsZX0sCQkvKiAxNCAqLwotCQl7UE8yMDMwX21vZGUwLCBQTzIwMzBfbW9kZTF9LAkJCS8qIDE1ICovCi0JCXt0YXM1MTMwQ0tfSW5pdGlhbFNjYWxlLCB0YXM1MTMwQ0tfSW5pdGlhbH0sCS8qIDE2ICovCisJCXtwbzIwMzBfSW5pdGlhbCwgcG8yMDMwX0luaXRpYWxTY2FsZX0sCQkvKiAxNSAqLworCQl7dGFzNTEzMGNLX0luaXRpYWwsIHRhczUxMzBjS19Jbml0aWFsU2NhbGV9LAkvKiAxNiAqLwogCQl7dGFzNTEzMGN4eF9Jbml0aWFsLCB0YXM1MTMwY3h4X0luaXRpYWxTY2FsZX0sCS8qIDE3ICovCi0JCXt0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlLCB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbH0sCisJCXt0YXM1MTMwY192ZjAyNTBfSW5pdGlhbCwgdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxTY2FsZX0sCiAJCQkJCQkJCS8qIDE4ICovCiAJfTsKIApAQCAtNjg1NCw4ICs2ODU2LDcgQEAKIAkJCTB4MjEpOwkJLyogSlBFRyA0MjIgKi8KIAlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwogCi0JbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwotCXpjM19pbml0ID0gaW5pdF90YlsoaW50KSBzZC0+c2Vuc29yXVttb2RlXTsKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfSFY3MTMxQzoKIAkJemN4eF9wcm9iZVNlbnNvcihnc3BjYV9kZXYpOwpAQCAtNjg2NCw3ICs2ODY1LDcgQEAKIAkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcGFzMTA2Yl9Jbml0aWFsX2NvbSk7CiAJCWJyZWFrOwogCX0KLQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCB6YzNfaW5pdCk7CisJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaW5pdF90YltzZC0+c2Vuc29yXVttb2RlXSk7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9BRENNMjcwMDoKQEAgLTY4ODMsNiArNjg4NCwxMSBAQAogCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAzYik7CiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDM4KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKKwkJcmVnX3coZGV2LCAweDAzLCAweDAwM2IpOworCQlyZWdfdyhkZXYsIDB4MGMsIDB4MDAzYSk7CisJCXJlZ193KGRldiwgMHgwYiwgMHgwMDM5KTsKKwkJYnJlYWs7CiAJfQogCiAJc2V0bWF0cml4KGdzcGNhX2Rldik7CkBAIC02OTYxLDEzICs2OTY3LDEzIEBACiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQltc2xlZXAoNTApOwotCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwOCk7Ci0JCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA3KTsKLQkJLypmYWxsIHRocnUqLwotCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDA3KTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KIAkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX1BBUzIwMkI6CisJCXJlZ193KGRldiwgMHgzMiwgMHgwMDA3KTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KKwkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTcxNjUsNiArNzE3MSwyMiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgaW50IHNkX2ludF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGludGVycnVwdCBwYWNrZXQgZGF0YSAqLworCQkJaW50IGxlbikJCS8qIGludGVycnB1dCBwYWNrZXQgbGVuZ3RoICovCit7CisJaWYgKGxlbiA9PSA4ICYmIGRhdGFbNF0gPT0gMSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAxKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyA9IHNkX2N0cmxzLApAQCAtNzE3Nyw2ICs3MTk5LDkgQEAKIAkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAogCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCiAJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkuaW50X3BrdF9zY2FuID0gc2RfaW50X3BrdF9zY2FuLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKaW5kZXggNTFmMzkzZC4uMmZjOTg2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKQEAgLTM5LDEyICszOSwxMiBAQAogbW9kdWxlX3BhcmFtKGhkcHZyX2RlYnVnLCBpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGhkcHZyX2RlYnVnLCAiZW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQiKTsKIAotdWludCBkZWZhdWx0X3ZpZGVvX2lucHV0ID0gSERQVlJfVklERU9fSU5QVVRTOworc3RhdGljIHVpbnQgZGVmYXVsdF92aWRlb19pbnB1dCA9IEhEUFZSX1ZJREVPX0lOUFVUUzsKIG1vZHVsZV9wYXJhbShkZWZhdWx0X3ZpZGVvX2lucHV0LCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X3ZpZGVvX2lucHV0LCAiZGVmYXVsdCB2aWRlbyBpbnB1dDogMD1Db21wb25lbnQgLyAiCiAJCSAiMT1TLVZpZGVvIC8gMj1Db21wb3NpdGUiKTsKIAotdWludCBkZWZhdWx0X2F1ZGlvX2lucHV0ID0gSERQVlJfQVVESU9fSU5QVVRTOworc3RhdGljIHVpbnQgZGVmYXVsdF9hdWRpb19pbnB1dCA9IEhEUFZSX0FVRElPX0lOUFVUUzsKIG1vZHVsZV9wYXJhbShkZWZhdWx0X2F1ZGlvX2lucHV0LCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X2F1ZGlvX2lucHV0LCAiZGVmYXVsdCBhdWRpbyBpbnB1dDogMD1SQ0EgYmFjayAvICIKIAkJICIxPVJDQSBmcm9udCAvIDI9Uy9QRElGIik7CkBAIC01OSw2ICs1OSw3IEBACiAJeyBVU0JfREVWSUNFKEhEX1BWUl9WRU5ET1JfSUQsIEhEX1BWUl9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRDEpIH0sCiAJeyBVU0JfREVWSUNFKEhEX1BWUl9WRU5ET1JfSUQsIEhEX1BWUl9QUk9EVUNUX0lEMikgfSwKKwl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQzKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaGRwdnJfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCmluZGV4IGZkZDc4MjAuLjE5NmY4MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKQEAgLTMwMiw3ICszMDIsOCBAQAogLyogZnVuY3Rpb24gZXhwZWN0cyBkZXYtPmlvX211dGV4IHRvIGJlIGhvbGQgYnkgY2FsbGVyICovCiBzdGF0aWMgaW50IGhkcHZyX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKIHsKLQl1aW50IGFjdHVhbF9sZW5ndGgsIGMgPSAwOworCWludCBhY3R1YWxfbGVuZ3RoOworCXVpbnQgYyA9IDA7CiAJdTggKmJ1ZjsKIAogCWlmIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfSURMRSkKQEAgLTU3Miw3ICs1NzMsNyBAQAogCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzdHJjcHkoY2FwLT5kcml2ZXIsICJoZHB2ciIpOwotCXN0cmNweShjYXAtPmNhcmQsICJIYXVwYXVnZSBIRCBQVlIiKTsKKwlzdHJjcHkoY2FwLT5jYXJkLCAiSGF1cHBhdWdlIEhEIFBWUiIpOwogCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCWNhcC0+dmVyc2lvbiA9IEhEUFZSX1ZFUlNJT047CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSAgICAgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKaW5kZXggMWVkZDg3NS4uNDlhZTI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRAkweDQ5MDAKICNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQxCTB4NDkwMQogI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRDIJMHg0OTAyCisjZGVmaW5lIEhEX1BWUl9QUk9EVUNUX0lEMwkweDQ5ODIKIAogI2RlZmluZSBVTlNFVCAgICAoLTFVKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCmluZGV4IDYwZDk5MmUuLmU2MjBhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCkBAIC0zNTIsOSArMzUyLDEzIEBACiBzdGF0aWMgaW50IGhleGl1bV9hdHRhY2goc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbykKIHsKIAlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCWludCByZXQ7CiAKIAlERUJfRUUoKCIuXG4iKSk7CiAKKwlyZXQgPSBzYWE3MTQ2X3Z2X2RldmluaXQoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCWhleGl1bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZXhpdW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoTlVMTCA9PSBoZXhpdW0pIHsKIAkJcHJpbnRrKCJoZXhpdW1fZ2VtaW5pOiBub3QgZW5vdWdoIGtlcm5lbCBtZW1vcnkgaW4gaGV4aXVtX2F0dGFjaCgpLlxuIik7CkBAIC00MDAsOSArNDA0LDEwIEBACiAJdnZfZGF0YS5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKIAl2dl9kYXRhLm9wcy52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0OwogCXZ2X2RhdGEub3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7Ci0JaWYgKDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmhleGl1bS0+dmlkZW9fZGV2LCBkZXYsICJoZXhpdW0gZ2VtaW5pIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKKwlyZXQgPSBzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmaGV4aXVtLT52aWRlb19kZXYsIGRldiwgImhleGl1bSBnZW1pbmkiLCBWRkxfVFlQRV9HUkFCQkVSKTsKKwlpZiAocmV0IDwgMCkgewogCQlwcmludGsoImhleGl1bV9nZW1pbmk6IGNhbm5vdCByZWdpc3RlciBjYXB0dXJlIHY0bDIgZGV2aWNlLiBza2lwcGluZy5cbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcHJpbnRrKCJoZXhpdW1fZ2VtaW5pOiBmb3VuZCAnaGV4aXVtIGdlbWluaScgZnJhbWUgZ3JhYmJlci0lZC5cbiIsIGhleGl1bV9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKaW5kZXggOTM4YTFmOC4uZmU1OTZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCkBAIC0yMTYsNiArMjE2LDEwIEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAorCWVyciA9IHNhYTcxNDZfdnZfZGV2aW5pdChkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAloZXhpdW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGV4aXVtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKE5VTEwgPT0gaGV4aXVtKSB7CiAJCXByaW50aygiaGV4aXVtX29yaW9uOiBoZXhpdW1fcHJvYmU6IG5vdCBlbm91Z2gga2VybmVsIG1lbW9yeS5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCBiODZlMzUzLi5kYTE4ZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiB7CiAJc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcyA9IE5VTEw7CiAJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7Ci0JaW50IGlyX3R5cGUgPSAwOworCXU2NCBpcl90eXBlID0gMDsKIAlzdHJ1Y3QgSVJfaTJjICppcjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gY2xpZW50LT5hZGFwdGVyOwpAQCAtMzMxLDYgKzMzMSw3IEBACiAJCWlyX2NvZGVzICAgID0gJmlyX2NvZGVzX3B2OTUxX3RhYmxlOwogCQlicmVhazsKIAljYXNlIDB4MTg6CisJY2FzZSAweDFmOgogCWNhc2UgMHgxYToKIAkJbmFtZSAgICAgICAgPSAiSGF1cHBhdWdlIjsKIAkJaXItPmdldF9rZXkgPSBnZXRfa2V5X2hhdXA7CkBAIC00NDYsNyArNDQ3LDcgQEAKIAlpbnB1dF9kZXYtPm5hbWUgICAgICAgPSBpci0+bmFtZTsKIAlpbnB1dF9kZXYtPnBoeXMgICAgICAgPSBpci0+cGh5czsKIAotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXItPmlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGlyLT5pcl9jb2RlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jCmluZGV4IDc5ZDBmZTQuLmNhMWZkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYwpAQCAtMTIxMCw2ICsxMjEwLDUzIEBACiAJLmkyYyA9ICZpdnR2X2kyY19zdGQsCiB9OwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBTb255IEtpa3lvdSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGl2dHZfY2FyZF9wY2lfaW5mbyBpdnR2X3BjaV9raWt5b3VbXSA9IHsKKwl7IFBDSV9ERVZJQ0VfSURfSVZUVjE2LCBJVlRWX1BDSV9JRF9TT05ZLCAweDgxM2QgfSwKKwl7IDAsIDAsIDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpdnR2X2NhcmQgaXZ0dl9jYXJkX2tpa3lvdSA9IHsKKwkudHlwZSA9IElWVFZfQ0FSRF9LSUtZT1UsCisJLm5hbWUgPSAiU29ueSBWQUlPIEdpZ2EgUG9ja2V0IChFTlggS2lreW91KSIsCisJLnY0bDJfY2FwYWJpbGl0aWVzID0gSVZUVl9DQVBfRU5DT0RFUiwKKwkuaHdfdmlkZW8gPSBJVlRWX0hXX1NBQTcxMTUsCisJLmh3X2F1ZGlvID0gSVZUVl9IV19HUElPLAorCS5od19hdWRpb19jdHJsID0gSVZUVl9IV19HUElPLAorCS5od19hbGwgPSBJVlRWX0hXX0dQSU8gfCBJVlRWX0hXX1NBQTcxMTUgfCBJVlRWX0hXX1RVTkVSLAorCS52aWRlb19pbnB1dHMgPSB7CisJeyBJVlRWX0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgSVZUVl9TQUE3MVhYX0NPTVBPU0lURTEgfSwKKwl7IElWVFZfQ0FSRF9JTlBVVF9DT01QT1NJVEUxLCAxLCBJVlRWX1NBQTcxWFhfQ09NUE9TSVRFMSB9LAorCXsgSVZUVl9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsIElWVFZfU0FBNzFYWF9TVklERU8xIH0sCisJfSwKKwkuYXVkaW9faW5wdXRzID0geworCSAgICAgeyBJVlRWX0NBUkRfSU5QVVRfQVVEX1RVTkVSLCAgSVZUVl9HUElPX1RVTkVSIH0sCisJICAgICB7IElWVFZfQ0FSRF9JTlBVVF9MSU5FX0lOMSwgICBJVlRWX0dQSU9fTElORV9JTiB9LAorCSAgICAgeyBJVlRWX0NBUkRfSU5QVVRfTElORV9JTjIsICAgSVZUVl9HUElPX0xJTkVfSU4gfSwKKwl9LAorCS5ncGlvX2luaXQgPSB7IC5kaXJlY3Rpb24gPSAweDAzZTEsIC5pbml0aWFsX3ZhbHVlID0gMHgwMzIwIH0sCisJLmdwaW9fYXVkaW9faW5wdXQgPSB7IC5tYXNrICAgPSAweDAwNjAsCisJCQkgICAgICAudHVuZXIgID0gMHgwMDIwLAorCQkJICAgICAgLmxpbmVpbiA9IDB4MDAwMCwKKwkJCSAgICAgIC5yYWRpbyAgPSAweDAwNjAgfSwKKwkuZ3Bpb19hdWRpb19tdXRlICA9IHsgLm1hc2sgPSAweDAwMDAsCisJCQkgICAgICAubXV0ZSA9IDB4MDAwMCB9LCAvKiAweDIwMD8gRGlzYWJsZSBmb3Igbm93LiAqLworCS5ncGlvX2F1ZGlvX21vZGUgID0geyAubWFzayAgID0gMHgwMDgwLAorCQkJICAgICAgLm1vbm8gICA9IDB4MDAwMCwKKwkJCSAgICAgIC5zdGVyZW8gPSAweDAwMDAsIC8qIFNBUCAqLworCQkJICAgICAgLmxhbmcxICA9IDB4MDA4MCwKKwkJCSAgICAgIC5sYW5nMiAgPSAweDAwMDAsCisJCQkgICAgICAuYm90aCAgID0gMHgwMDgwIH0sCisJLnR1bmVycyA9IHsKKwkgICAgIHsgLnN0ZCA9IFY0TDJfU1REX0FMTCwgLnR1bmVyID0gVFVORVJfU09OWV9CVEZfUFhOMDFaIH0sCisJfSwKKwkucGNpX2xpc3QgPSBpdnR2X3BjaV9raWt5b3UsCisJLmkyYyA9ICZpdnR2X2kyY19zdGQsCit9OworCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkICppdnR2X2NhcmRfbGlzdFtdID0gewogCSZpdnR2X2NhcmRfcHZyMjUwLAogCSZpdnR2X2NhcmRfcHZyMzUwLApAQCAtMTIzOCw2ICsxMjg1LDcgQEAKIAkmaXZ0dl9jYXJkX2F2ZXJfbTEwNCwKIAkmaXZ0dl9jYXJkX2J1ZmZhbG8sCiAJJml2dHZfY2FyZF9hdmVyX3VsdHJhMTUwMG1jZSwKKwkmaXZ0dl9jYXJkX2tpa3lvdSwKIAogCS8qIFZhcmlhdGlvbnMgb2Ygc3RhbmRhcmQgY2FyZHMgYnV0IHdpdGggdGhlIHNhbWUgUENJIElEcy4KIAkgICBUaGVzZSBjYXJkcyBtdXN0IGNvbWUgbGFzdCBpbiB0aGlzIGxpc3QuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaAppbmRleCA2MTQ4ODI3Li43OGVjYTk5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCkBAIC01MSw3ICs1MSw4IEBACiAjZGVmaW5lIElWVFZfQ0FSRF9BVkVSX00xMDQgICAgICAgICAgMjQgLyogQXZlck1lZGlhIE0xMDQgbWluaVBDSSBjYXJkICovCiAjZGVmaW5lIElWVFZfQ0FSRF9CVUZGQUxPX01WNUwgICAgICAgMjUgLyogQnVmZmFsbyBQQy1NVjVML1BDSSBjYXJkICovCiAjZGVmaW5lIElWVFZfQ0FSRF9BVkVSX1VMVFJBMTUwME1DRSAgMjYgLyogQVZlck1lZGlhIFVsdHJhVFYgMTUwMCBNQ0UgKi8KLSNkZWZpbmUgSVZUVl9DQVJEX0xBU1QgCQkgICAgIDI2CisjZGVmaW5lIElWVFZfQ0FSRF9LSUtZT1UgICAgICAgICAgICAgMjcgLyogU29ueSBWQUlPIEdpZ2EgUG9ja2V0IChFTlggS2lreW91KSAqLworI2RlZmluZSBJVlRWX0NBUkRfTEFTVCAJCSAgICAgMjcKIAogLyogVmFyaWFudHMgb2YgZXhpc3RpbmcgY2FyZHMgYnV0IHdpdGggdGhlIHNhbWUgUENJIElEcy4gVGhlIGRyaXZlcgogICAgZGV0ZWN0cyB0aGVzZSBiYXNlZCBvbiBvdGhlciBkZXZpY2UgaW5mb3JtYXRpb24uCkBAIC04Niw2ICs4Nyw3IEBACiAjZGVmaW5lIElWVFZfUENJX0lEX01FTENPIAkJMHgxMTU0CiAjZGVmaW5lIElWVFZfUENJX0lEX0dPVFZJRVcxCQkweGZmYWMKICNkZWZpbmUgSVZUVl9QQ0lfSURfR09UVklFVzIgCQkweGZmYWQKKyNkZWZpbmUgSVZUVl9QQ0lfSURfU09OWSAJCTB4MTA0ZAogCiAvKiBoYXJkd2FyZSBmbGFncywgbm8gZ2FwcyBhbGxvd2VkICovCiAjZGVmaW5lIElWVFZfSFdfQ1gyNTg0MAkJCSgxIDw8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IDM0N2MzMzQuLjlhMjUwNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC0xOTMsNiArMTkzLDcgQEAKIAkJICJcdFx0XHQyNSA9IEF2ZXJNZWRpYSBNMTA0IChub3QgeWV0IHdvcmtpbmcpXG4iCiAJCSAiXHRcdFx0MjYgPSBCdWZmYWxvIFBDLU1WNUwvUENJXG4iCiAJCSAiXHRcdFx0MjcgPSBBVmVyTWVkaWEgVWx0cmFUViAxNTAwIE1DRVxuIgorCQkgIlx0XHRcdDI4ID0gU29ueSBWQUlPIEdpZ2EgUG9ja2V0IChFTlggS2lreW91KVxuIgogCQkgIlx0XHRcdCAwID0gQXV0b2RldGVjdCAoZGVmYXVsdClcbiIKIAkJICJcdFx0XHQtMSA9IElnbm9yZSB0aGlzIGNhcmRcblx0XHQiKTsKIE1PRFVMRV9QQVJNX0RFU0MocGFsLCAiU2V0IFBBTCBzdGFuZGFyZDogQkdILCBESywgSSwgTSwgTiwgTmMsIDYwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwppbmRleCBjMWI3ZWM0Li5hNzFlOGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCQlJVlRWX0VSUigiaXZ0dl9pbml0X21wZWdfZGVjb2RlciBmYWlsZWQgdG8gc3RhcnQgcGxheWJhY2tcbiIpOwogCQlyZXR1cm47CiAJfQotCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmRlY19tYm94LCBJVlRWX01CT1hfRE1BLCBkYXRhKTsKKwlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5kZWNfbWJveCwgSVZUVl9NQk9YX0RNQSwgMiwgZGF0YSk7CiAJbWVtX29mZnNldCA9IGl0di0+ZGVjX21lbSArIGRhdGFbMV07CiAKIAlpZiAoKHJlYWRieXRlcyA9IGxvYWRfZndfZGlyZWN0KElWVFZfREVDT0RFX0lOSVRfTVBFR19GSUxFTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKaW5kZXggY2Q5ZGIwYi4uMTJkMzZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCXUzMiBkYXRhW0NYMjM0MVhfTUJPWF9NQVhfREFUQV07CiAJc3RydWN0IGl2dHZfc3RyZWFtICpzOwogCi0JaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUFfRU5ELCBkYXRhKTsKKwlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5lbmNfbWJveCwgSVZUVl9NQk9YX0RNQV9FTkQsIDIsIGRhdGEpOwogCUlWVFZfREVCVUdfSElfSVJRKCJFTkMgRE1BIENPTVBMRVRFICV4ICVkICglZClcbiIsIGRhdGFbMF0sIGRhdGFbMV0sIGl0di0+Y3VyX2RtYV9zdHJlYW0pOwogCiAJZGVsX3RpbWVyKCZpdHYtPmRtYV90aW1lcik7CkBAIC02MzgsNyArNjM4LDcgQEAKIAl1MzIgZGF0YVtDWDIzNDFYX01CT1hfTUFYX0RBVEFdOwogCiAJZGVsX3RpbWVyKCZpdHYtPmRtYV90aW1lcik7Ci0JaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUFfRU5ELCBkYXRhKTsKKwlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5lbmNfbWJveCwgSVZUVl9NQk9YX0RNQV9FTkQsIDIsIGRhdGEpOwogCUlWVFZfREVCVUdfV0FSTigiRE1BIEVSUk9SICUwOHggJTA4eCAlMDh4ICVkXG4iLCBkYXRhWzBdLCBkYXRhWzFdLAogCQkJCXJlYWRfcmVnKElWVFZfUkVHX0RNQVNUQVRVUyksIGl0di0+Y3VyX2RtYV9zdHJlYW0pOwogCXdyaXRlX3JlZyhyZWFkX3JlZyhJVlRWX1JFR19ETUFTVEFUVVMpICYgMywgSVZUVl9SRUdfRE1BU1RBVFVTKTsKQEAgLTY2OSw3ICs2NjksNyBAQAogCXN0cnVjdCBpdnR2X3N0cmVhbSAqczsKIAogCS8qIEdldCBETUEgZGVzdGluYXRpb24gYW5kIHNpemUgYXJndW1lbnRzIGZyb20gY2FyZCAqLwotCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BLCBkYXRhKTsKKwlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5lbmNfbWJveCwgSVZUVl9NQk9YX0RNQSwgNywgZGF0YSk7CiAJSVZUVl9ERUJVR19ISV9JUlEoIkVOQyBTVEFSVCBDQVAgJWQ6ICUwOHggJTA4eFxuIiwgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSk7CiAKIAlpZiAoZGF0YVswXSA+IDIgfHwgZGF0YVsxXSA9PSAwIHx8IGRhdGFbMl0gPT0gMCkgewpAQCAtNzEzLDkgKzcxMyw5IEBACiAJc3RydWN0IGl2dHZfc3RyZWFtICpzOwogCiAJLyogWVVWIG9yIE1QRyAqLwotCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmRlY19tYm94LCBJVlRWX01CT1hfRE1BLCBkYXRhKTsKIAogCWlmICh0ZXN0X2JpdChJVlRWX0ZfSV9ERUNfWVVWLCAmaXR2LT5pX2ZsYWdzKSkgeworCQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5kZWNfbWJveCwgSVZUVl9NQk9YX0RNQSwgMiwgZGF0YSk7CiAJCWl0di0+ZG1hX2RhdGFfcmVxX3NpemUgPQogCQkJCSAxMDgwICogKChpdHYtPnl1dl9pbmZvLnY0bDJfc3JjX2ggKyAzMSkgJiB+MzEpOwogCQlpdHYtPmRtYV9kYXRhX3JlcV9vZmZzZXQgPSBkYXRhWzFdOwpAQCAtNzI0LDYgKzcyNCw3IEBACiAJCXMgPSAmaXR2LT5zdHJlYW1zW0lWVFZfREVDX1NUUkVBTV9UWVBFX1lVVl07CiAJfQogCWVsc2UgeworCQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5kZWNfbWJveCwgSVZUVl9NQk9YX0RNQSwgMywgZGF0YSk7CiAJCWl0di0+ZG1hX2RhdGFfcmVxX3NpemUgPSBtaW5fdCh1MzIsIGRhdGFbMl0sIDB4MTAwMDApOwogCQlpdHYtPmRtYV9kYXRhX3JlcV9vZmZzZXQgPSBkYXRhWzFdOwogCQlzID0gJml0di0+c3RyZWFtc1tJVlRWX0RFQ19TVFJFQU1fVFlQRV9NUEddOwpAQCAtOTQwLDkgKzk0MSwxMCBAQAogCQkJCWl2dHZfZG1hX2VuY19zdGFydChzKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChpID09IElWVFZfTUFYX1NUUkVBTVMgJiYgdGVzdF9hbmRfY2xlYXJfYml0KElWVFZfRl9JX1VETUFfUEVORElORywgJml0di0+aV9mbGFncykpIHsKKworCQlpZiAoaSA9PSBJVlRWX01BWF9TVFJFQU1TICYmCisJCSAgICB0ZXN0X2JpdChJVlRWX0ZfSV9VRE1BX1BFTkRJTkcsICZpdHYtPmlfZmxhZ3MpKQogCQkJaXZ0dl91ZG1hX3N0YXJ0KGl0dik7Ci0JCX0KIAl9CiAKIAlpZiAoKGNvbWJvICYgSVZUVl9JUlFfRE1BKSAmJiAhdGVzdF9iaXQoSVZUVl9GX0lfUElPLCAmaXR2LT5pX2ZsYWdzKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5jCmluZGV4IDFiNWMwYWMuLjg0NTc3ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmMKQEAgLTM2OSwxMCArMzY5LDExIEBACiB9CiAKIC8qIFRoaXMgb25lIGlzIGZvciBzdHVmZiB0aGF0IGNhbid0IHNsZWVwLi4gaXJxIGhhbmRsZXJzLCBldGMuLiAqLwotdm9pZCBpdnR2X2FwaV9nZXRfZGF0YShzdHJ1Y3QgaXZ0dl9tYWlsYm94X2RhdGEgKm1iZGF0YSwgaW50IG1iLCB1MzIgZGF0YVtdKQordm9pZCBpdnR2X2FwaV9nZXRfZGF0YShzdHJ1Y3QgaXZ0dl9tYWlsYm94X2RhdGEgKm1iZGF0YSwgaW50IG1iLAorCQkgICAgICAgaW50IGFyZ2MsIHUzMiBkYXRhW10pCiB7CisJdm9sYXRpbGUgdTMyIF9faW9tZW0gKnAgPSBtYmRhdGEtPm1ib3hbbWJdLmRhdGE7CiAJaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQ1gyMzQxWF9NQk9YX01BWF9EQVRBOyBpKyspCi0JCWRhdGFbaV0gPSByZWFkbCgmbWJkYXRhLT5tYm94W21iXS5kYXRhW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrLCBwKyspCisJCWRhdGFbaV0gPSByZWFkbChwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guaAppbmRleCA2ZWYxMjA5Li44MjQ3NjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5oCkBAIC0yNCw3ICsyNCw4IEBACiAjZGVmaW5lIElWVFZfTUJPWF9ETUFfRU5EICAgICAgICAgOAogI2RlZmluZSBJVlRWX01CT1hfRE1BICAgICAgICAgICAgIDkKIAotdm9pZCBpdnR2X2FwaV9nZXRfZGF0YShzdHJ1Y3QgaXZ0dl9tYWlsYm94X2RhdGEgKm1ib3gsIGludCBtYiwgdTMyIGRhdGFbXSk7Cit2b2lkIGl2dHZfYXBpX2dldF9kYXRhKHN0cnVjdCBpdnR2X21haWxib3hfZGF0YSAqbWJkYXRhLCBpbnQgbWIsCisJCSAgICAgICBpbnQgYXJnYywgdTMyIGRhdGFbXSk7CiBpbnQgaXZ0dl9hcGkoc3RydWN0IGl2dHYgKml0diwgaW50IGNtZCwgaW50IGFyZ3MsIHUzMiBkYXRhW10pOwogaW50IGl2dHZfdmFwaV9yZXN1bHQoc3RydWN0IGl2dHYgKml0diwgdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXSwgaW50IGNtZCwgaW50IGFyZ3MsIC4uLik7CiBpbnQgaXZ0dl92YXBpKHN0cnVjdCBpdnR2ICppdHYsIGludCBjbWQsIGludCBhcmdzLCAuLi4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCmluZGV4IGUxMmM2MDIuLjFmOTM4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKQEAgLTU3NywxMCArNTc3LDE0IEBACiAJCWNsZWFyX2JpdChJVlRWX0ZfSV9FT1MsICZpdHYtPmlfZmxhZ3MpOwogCiAJCS8qIEluaXRpYWxpemUgRGlnaXRpemVyIGZvciBDYXB0dXJlICovCisJCS8qIEF2b2lkIHRpbm55IGF1ZGlvIHByb2JsZW0gLSBlbnN1cmUgYXVkaW8gY2xvY2tzIGFyZSBnb2luZyAqLworCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfYXVkaW8sIGF1ZGlvLCBzX3N0cmVhbSwgMSk7CisJCS8qIEF2b2lkIHVucHJlZGljdGFibGUgUENJIGJ1cyBoYW5nIC0gZGlzYWJsZSB2aWRlbyBjbG9ja3MgKi8KIAkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19zdHJlYW0sIDApOwotCQlpdnR2X21zbGVlcF90aW1lb3V0KDMwMCwgMSk7CisJCWl2dHZfbXNsZWVwX3RpbWVvdXQoMTUwLCAxKTsKIAkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9FTkNfSU5JVElBTElaRV9JTlBVVCwgMCk7CiAJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfc3RyZWFtLCAxKTsKKwkJaXZ0dl9tc2xlZXBfdGltZW91dCgxNTAsIDEpOwogCX0KIAogCS8qIGJlZ2luX2NhcHR1cmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYwppbmRleCBkMDdhZDZjLi4xZGFmMWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jCkBAIC0yMTMsNiArMjEzLDcgQEAKIAl3cml0ZV9yZWdfc3luYyhyZWFkX3JlZyhJVlRWX1JFR19ETUFYRkVSKSB8IDB4MDEsIElWVFZfUkVHX0RNQVhGRVIpOwogCXNldF9iaXQoSVZUVl9GX0lfRE1BLCAmaXR2LT5pX2ZsYWdzKTsKIAlzZXRfYml0KElWVFZfRl9JX1VETUEsICZpdHYtPmlfZmxhZ3MpOworCWNsZWFyX2JpdChJVlRWX0ZfSV9VRE1BX1BFTkRJTkcsICZpdHYtPmlfZmxhZ3MpOwogfQogCiB2b2lkIGl2dHZfdWRtYV9wcmVwYXJlKHN0cnVjdCBpdnR2ICppdHYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IDkxZGY3ZWMuLjFhMzRkMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC0yNTcsMTkgKzI1NywxOCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5djAyMl9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7Ci0JdW5zaWduZWQgaW50IHdpZHRoX2ZsYWc7Ci0KLQlpZiAoaWNsLT5xdWVyeV9idXNfcGFyYW0pCi0JCXdpZHRoX2ZsYWcgPSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpICYKLQkJCVNPQ0FNX0RBVEFXSURUSF9NQVNLOwotCWVsc2UKLQkJd2lkdGhfZmxhZyA9IFNPQ0FNX0RBVEFXSURUSF8xMDsKLQotCXJldHVybiBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HIHwKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9TTEFWRSB8CisJCVNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcgfAogCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgfAotCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwgU09DQU1fU0xBVkUgfAotCQl3aWR0aF9mbGFnOworCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIOworCisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQlmbGFncyB8PSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpICYgU09DQU1fREFUQVdJRFRIX01BU0s7CisJZWxzZQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CisKKwlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5djAyMl9zX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCmluZGV4IGMxZmM2ZGMuLjlmMDFmMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwpAQCAtMTY5LDcgKzE2OSwxMSBAQAogc3RhdGljIGludCBteGJfcHJvYmUoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYpCiB7CiAJc3RydWN0IG14YiAqbXhiID0gTlVMTDsKKwlpbnQgZXJyOwogCisJZXJyID0gc2FhNzE0Nl92dl9kZXZpbml0KGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAlteGIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXhiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG14YiA9PSBOVUxMKSB7CiAJCURFQl9EKCgibm90IGVub3VnaCBrZXJuZWwgbWVtb3J5LlxuIikpOwpAQCAtMjk0LDcgKzI5OCw3IEBACiAJLyogc2VsZWN0IHR1bmVyLW91dHB1dCBvbiBzYWE3MTExYSAqLwogCWkgPSAwOwogCXNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCVNBQTcxMTFfRk1UX0NDSVIgfCBTQUE3MTExX1ZCSV9CWVBBU1MsIDApOworCQlTQUE3MTExX0ZNVF9DQ0lSLCAwKTsKIAogCS8qIHNlbGVjdCBhIHR1bmVyIHR5cGUgKi8KIAl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFY7CkBAIC01MTgsOCArNTIyLDggQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qIHN3aXRjaCB2aWRlbyBpbiBzYWE3MTExYSAqLwotCWlmIChzYWE3MTExYV9jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgaSwgMCwgMCkpCi0JCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHNhYTcxMTFhICMxLlxuIik7CisJaWYgKHNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCBpLCBTQUE3MTExX0ZNVF9DQ0lSLCAwKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3Mgc2FhNzExMWEuXG4iKTsKIAogCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlIG9ubHkgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKDAgPT0gbXhiLT5jdXJfbXV0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCmluZGV4IDNhNDVlOTQuLjdmOGVjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwpAQCAtNTQ3LDcgKzU0Nyw2IEBACiAJfSwKIH07CiAKLQogLyoKICAqIGdlbmVyYWwgZnVuY3Rpb24KICAqLwpAQCAtNjM0LDcgKzYzMywxMiBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9NQVNURVIgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKLQkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IHByaXYtPmluZm8tPmJ1c3dpZHRoOworCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIOworCisJaWYgKHByaXYtPmluZm8tPmZsYWdzICYgT1Y3NzJYX0ZMQUdfOEJJVCkKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzg7CisJZWxzZQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CiAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CkBAIC0xMDQwLDE1ICsxMDQ0LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKgotCSAqIG92NzcyeCBvbmx5IHVzZSA4IG9yIDEwIGJpdCBidXMgd2lkdGgKLQkgKi8KLQlpZiAoU09DQU1fREFUQVdJRFRIXzEwICE9IHByaXYtPmluZm8tPmJ1c3dpZHRoICYmCi0JICAgIFNPQ0FNX0RBVEFXSURUSF84ICAhPSBwcml2LT5pbmZvLT5idXN3aWR0aCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImJ1cyB3aWR0aCBlcnJvclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qCiAJICogY2hlY2sgYW5kIHNob3cgcHJvZHVjdCBJRCBhbmQgbWFudWZhY3R1cmVyIElECiAJICovCiAJcGlkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgUElEKTsKQEAgLTExMzAsNyArMTEyNSw2IEBACiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQogewogCXN0cnVjdCBvdjc3MnhfcHJpdiAgICAgICAgKnByaXY7Ci0Jc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyAqaW5mbzsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpMmNfYWRhcHRlciAgICAgICAgKmFkYXB0ZXIgPSB0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgICAgKmljbDsKQEAgLTExNDUsOCArMTEzOSw2IEBACiAJaWYgKCFpY2wgfHwgIWljbC0+cHJpdikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbmZvID0gaWNsLT5wcml2OwotCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwKIAkJCSJJMkMtQWRhcHRlciBkb2Vzbid0IHN1cHBvcnQgIgpAQCAtMTE1OCw3ICsxMTUwLDcgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJpdi0+aW5mbyA9IGluZm87CisJcHJpdi0+aW5mbyA9IGljbC0+cHJpdjsKIAogCXY0bDJfaTJjX3N1YmRldl9pbml0KCZwcml2LT5zdWJkZXYsIGNsaWVudCwgJm92NzcyeF9zdWJkZXZfb3BzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAppbmRleCBkZTU0ODVmLi5jYjQwNTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaApAQCAtMjMzLDggKzIzMyw5IEBACiAJaW50IHN0YXRlX2VuY29kZXJfd2FpdG9rOyAgICAgLyogRW5jb2RlciBwcmUtd2FpdCBkb25lICovCiAJaW50IHN0YXRlX2VuY29kZXJfcnVub2s7ICAgICAgLyogRW5jb2RlciBoYXMgcnVuIGZvciA+PSAuMjUgc2VjICovCiAJaW50IHN0YXRlX2RlY29kZXJfcnVuOyAgICAgICAgLyogRGVjb2RlciBpcyBydW5uaW5nICovCisJaW50IHN0YXRlX2RlY29kZXJfcmVhZHk7ICAgICAgLyogRGVjb2RlciBpcyBzdGFiaWxpemVkICYgc3RyZWFtYWJsZSAqLwogCWludCBzdGF0ZV91c2JzdHJlYW1fcnVuOyAgICAgIC8qIEZYMiBpcyBzdHJlYW1pbmcgKi8KLQlpbnQgc3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQ7ICAvKiBEZWNvZGVyIGlkbGUgZm9yID4gNTBtc2VjICovCisJaW50IHN0YXRlX2RlY29kZXJfcXVpZXNjZW50OyAgLyogRGVjb2RlciBpZGxlIGZvciBtaW5pbWFsIGludGVydmFsICovCiAJaW50IHN0YXRlX3BpcGVsaW5lX2NvbmZpZzsgICAgLyogUGlwZWxpbmUgaXMgY29uZmlndXJlZCAqLwogCWludCBzdGF0ZV9waXBlbGluZV9yZXE7ICAgICAgIC8qIFNvbWVib2R5IHdhbnRzIHRvIHN0cmVhbSAqLwogCWludCBzdGF0ZV9waXBlbGluZV9wYXVzZTsgICAgIC8qIFBpcGVsaW5lIG11c3QgYmUgcGF1c2VkICovCkBAIC0yNTUsOSArMjU2LDE2IEBACiAJdm9pZCAoKnN0YXRlX2Z1bmMpKHZvaWQgKik7CiAJdm9pZCAqc3RhdGVfZGF0YTsKIAotCS8qIFRpbWVyIGZvciBtZWFzdXJpbmcgZGVjb2RlciBzZXR0bGluZyB0aW1lICovCisJLyogVGltZXIgZm9yIG1lYXN1cmluZyByZXF1aXJlZCBkZWNvZGVyIHNldHRsaW5nIHRpbWUgYmVmb3JlIHdlJ3JlCisJICAgYWxsb3dlZCB0byBmaXJlIGl0IHVwIGFnYWluLiAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHF1aWVzY2VudF90aW1lcjsKIAorCS8qIFRpbWVyIGZvciBtZWFzdXJpbmcgZGVjb2RlciBzdGFiaWxpemF0aW9uIHRpbWUsIHdoaWNoIGlzIHRoZQorCSAgIGFtb3VudCBvZiB0aW1lIHdlIG5lZWQgdG8gbGV0IHRoZSBkZWNvZGVyIHJ1biBiZWZvcmUgd2UgY2FuCisJICAgdHJ1c3QgaXRzIG91dHB1dCAob3RoZXJ3aXNlIHRoZSBlbmNvZGVyIG1pZ2h0IHNlZSBnYXJiYWdlIGFuZAorCSAgIHRoZW4gZmFpbCB0byBzdGFydCBjb3JyZWN0bHkpLiAqLworCXN0cnVjdCB0aW1lcl9saXN0IGRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcjsKKwogCS8qIFRpbWVyIGZvciBtZWFzdXJpbmcgZW5jb2RlciBwcmUtd2FpdCB0aW1lICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZW5jb2Rlcl93YWl0X3RpbWVyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IDFiYmRhYjAuLjcxMmIzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC00OCwxMSArNDgsMTMgQEAKICAgIGJlZm9yZSB3ZSBhcmUgYWxsb3dlZCB0byBzdGFydCBpdCBydW5uaW5nLiAqLwogI2RlZmluZSBUSU1FX01TRUNfREVDT0RFUl9XQUlUIDUwCiAKKy8qIFRoaXMgZGVmaW5lcyBhIG1pbmltdW0gaW50ZXJ2YWwgdGhhdCB0aGUgZGVjb2RlciBtdXN0IGJlIGFsbG93ZWQgdG8gcnVuCisgICBiZWZvcmUgd2UgY2FuIHNhZmVseSBiZWdpbiB1c2luZyBpdHMgc3RyZWFtaW5nIG91dHB1dC4gKi8KKyNkZWZpbmUgVElNRV9NU0VDX0RFQ09ERVJfU1RBQklMSVpBVElPTl9XQUlUIDMwMAorCiAvKiBUaGlzIGRlZmluZXMgYSBtaW5pbXVtIGludGVydmFsIHRoYXQgdGhlIGVuY29kZXIgbXVzdCByZW1haW4gcXVpZXQKLSAgIGJlZm9yZSB3ZSBhcmUgYWxsb3dlZCB0byBjb25maWd1cmUgaXQuICBJIGhhZCB0aGlzIG9yaWdpbmFsbHkgc2V0IHRvCi0gICA1MG1zZWMsIGJ1dCBNYXJ0aW4gRGF1c2thcmR0IDxtYXJ0aW4uZGF1c2thcmR0QGdteC5kZT4gcmVwb3J0cyB0aGF0Ci0gICB0aGluZ3Mgd29yayBiZXR0ZXIgd2hlbiBpdCdzIHNldCB0byAxMDBtc2VjLiAqLwotI2RlZmluZSBUSU1FX01TRUNfRU5DT0RFUl9XQUlUIDEwMAorICAgYmVmb3JlIHdlIGFyZSBhbGxvd2VkIHRvIGNvbmZpZ3VyZSBpdC4gKi8KKyNkZWZpbmUgVElNRV9NU0VDX0VOQ09ERVJfV0FJVCA1MAogCiAvKiBUaGlzIGRlZmluZXMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgdGhhdCB0aGUgZW5jb2RlciBtdXN0IHN1Y2Nlc3NmdWxseSBydW4KICAgIGJlZm9yZSB3ZSBjb25zaWRlciB0aGF0IHRoZSBlbmNvZGVyIGhhcyBydW4gYXQgbGVhc3Qgb25jZSBzaW5jZSBpdHMKQEAgLTMzNCw2ICszMzYsNyBAQAogc3RhdGljIHZvaWQgcHZyMl9oZHdfaW50ZXJuYWxfZmluZF9zdGRlbnVtKHN0cnVjdCBwdnIyX2hkdyAqaGR3KTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X2ludGVybmFsX3NldF9zdGRfYXZhaWwoc3RydWN0IHB2cjJfaGR3ICpoZHcpOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfcXVpZXNjZW50X3RpbWVvdXQodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgdm9pZCBwdnIyX2hkd19kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZW91dCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X2VuY29kZXJfd2FpdF90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgcHZyMl9oZHdfZW5jb2Rlcl9ydW5fdGltZW91dCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyBpbnQgcHZyMl9pc3N1ZV9zaW1wbGVfY21kKHN0cnVjdCBwdnIyX2hkdyAqLHUzMik7CkBAIC0xNzA1LDYgKzE3MDgsNyBAQAogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHN0cmVhbT0lcyIsCiAJCSAgIChlbmFibGVmbCA/ICJvbiIgOiAib2ZmIikpOwogCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB2aWRlbywgc19zdHJlYW0sIGVuYWJsZWZsKTsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgYXVkaW8sIHNfc3RyZWFtLCBlbmFibGVmbCk7CiAJaWYgKGhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQpIHsKIAkJLyogV2UgZ2V0IGhlcmUgaWYgdGhlIGVuY29kZXIgaGFzIGJlZW4gbm90aWNlZC4gIE90aGVyd2lzZQogCQkgICB3ZSdsbCBpc3N1ZSBhIHdhcm5pbmcgdG8gdGhlIHVzZXIgKHdoaWNoIHNob3VsZApAQCAtMjQ2MSw2ICsyNDY1LDExIEBACiAJaGR3LT5xdWllc2NlbnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhkdzsKIAloZHctPnF1aWVzY2VudF90aW1lci5mdW5jdGlvbiA9IHB2cjJfaGR3X3F1aWVzY2VudF90aW1lb3V0OwogCisJaW5pdF90aW1lcigmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOworCWhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyloZHc7CisJaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIuZnVuY3Rpb24gPQorCQlwdnIyX2hkd19kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZW91dDsKKwogCWluaXRfdGltZXIoJmhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyKTsKIAloZHctPmVuY29kZXJfd2FpdF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGR3OwogCWhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyLmZ1bmN0aW9uID0gcHZyMl9oZHdfZW5jb2Rlcl93YWl0X3RpbWVvdXQ7CkBAIC0yNjc0LDYgKzI2ODMsNyBAQAogIGZhaWw6CiAJaWYgKGhkdykgewogCQlkZWxfdGltZXJfc3luYygmaGR3LT5xdWllc2NlbnRfdGltZXIpOworCQlkZWxfdGltZXJfc3luYygmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOwogCQlkZWxfdGltZXJfc3luYygmaGR3LT5lbmNvZGVyX3J1bl90aW1lcik7CiAJCWRlbF90aW1lcl9zeW5jKCZoZHctPmVuY29kZXJfd2FpdF90aW1lcik7CiAJCWlmIChoZHctPndvcmtxdWV1ZSkgewpAQCAtMjc0MSw2ICsyNzUxLDcgQEAKIAkJaGR3LT53b3JrcXVldWUgPSBOVUxMOwogCX0KIAlkZWxfdGltZXJfc3luYygmaGR3LT5xdWllc2NlbnRfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CiAJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZW5jb2Rlcl9ydW5fdGltZXIpOwogCWRlbF90aW1lcl9zeW5jKCZoZHctPmVuY29kZXJfd2FpdF90aW1lcik7CiAJaWYgKGhkdy0+ZndfYnVmZmVyKSB7CkBAIC00NDUyLDcgKzQ0NjMsNyBAQAogCiAJc3dpdGNoIChoZHctPnBhdGh3YXlfc3RhdGUpIHsKIAljYXNlIFBWUjJfUEFUSFdBWV9BTkFMT0c6Ci0JCWlmIChoZHctPnN0YXRlX2RlY29kZXJfcnVuKSB7CisJCWlmIChoZHctPnN0YXRlX2RlY29kZXJfcnVuICYmIGhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSkgewogCQkJLyogSW4gYW5hbG9nIG1vZGUsIGlmIHRoZSBkZWNvZGVyIGlzIHJ1bm5pbmcsIHRoZW4KIAkJCSAgIHJ1biB0aGUgZW5jb2Rlci4gKi8KIAkJCXJldHVybiAhMDsKQEAgLTQ1MTksNiArNDUzMCwxNyBAQAogfQogCiAKKy8qIFRpbWVvdXQgZnVuY3Rpb24gZm9yIGRlY29kZXIgc3RhYmlsaXphdGlvbiB0aW1lci4gKi8KK3N0YXRpYyB2b2lkIHB2cjJfaGR3X2RlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IChzdHJ1Y3QgcHZyMl9oZHcgKilkYXRhOworCWhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA9ICEwOworCXRyYWNlX3N0Yml0KCJzdGF0ZV9kZWNvZGVyX3JlYWR5IiwgaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5KTsKKwloZHctPnN0YXRlX3N0YWxlID0gITA7CisJcXVldWVfd29yayhoZHctPndvcmtxdWV1ZSwgJmhkdy0+d29ya3BvbGwpOworfQorCisKIC8qIFRpbWVvdXQgZnVuY3Rpb24gZm9yIGVuY29kZXIgd2FpdCB0aW1lci4gKi8KIHN0YXRpYyB2b2lkIHB2cjJfaGR3X2VuY29kZXJfd2FpdF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTQ1NTcsOCArNDU3OSwxMyBAQAogCQl9CiAJCWhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQgPSAwOwogCQloZHctPnN0YXRlX2RlY29kZXJfcnVuID0gMDsKLQkJLyogcGFyYW5vaWEgLSBzb2x2ZSByYWNlIGlmIHRpbWVyIGp1c3QgY29tcGxldGVkICovCisJCS8qIHBhcmFub2lhIC0gc29sdmUgcmFjZSBpZiB0aW1lcihzKSBqdXN0IGNvbXBsZXRlZCAqLwogCQlkZWxfdGltZXJfc3luYygmaGR3LT5xdWllc2NlbnRfdGltZXIpOworCQkvKiBLaWxsIHRoZSBzdGFiaWxpemF0aW9uIHRpbWVyLCBpbiBjYXNlIHdlJ3JlIGtpbGxpbmcgdGhlCisJCSAgIGVuY29kZXIgYmVmb3JlIHRoZSBwcmV2aW91cyBzdGFiaWxpemF0aW9uIGludGVydmFsIGhhcworCQkgICBiZWVuIHByb3Blcmx5IHRpbWVkLiAqLworCQlkZWxfdGltZXJfc3luYygmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOworCQloZHctPnN0YXRlX2RlY29kZXJfcmVhZHkgPSAwOwogCX0gZWxzZSB7CiAJCWlmICghaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCkgewogCQkJaWYgKCF0aW1lcl9wZW5kaW5nKCZoZHctPnF1aWVzY2VudF90aW1lcikpIHsKQEAgLTQ1OTYsMTAgKzQ2MjMsMjEgQEAKIAkJaWYgKGhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCkgcmV0dXJuIDA7CiAJCWlmIChwdnIyX2RlY29kZXJfZW5hYmxlKGhkdywhMCkgPCAwKSByZXR1cm4gMDsKIAkJaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCA9IDA7CisJCWhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA9IDA7CiAJCWhkdy0+c3RhdGVfZGVjb2Rlcl9ydW4gPSAhMDsKKwkJaWYgKGhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQgPT0gUFZSMl9DTElFTlRfSURfU0FBNzExNSkgeworCQkJaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIuZXhwaXJlcyA9CisJCQkJamlmZmllcyArCisJCQkJKEhaICogVElNRV9NU0VDX0RFQ09ERVJfU1RBQklMSVpBVElPTl9XQUlUIC8KKwkJCQkgMTAwMCk7CisJCQlhZGRfdGltZXIoJmhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyKTsKKwkJfSBlbHNlIHsKKwkJCWhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSA9ICEwOworCQl9CiAJfQogCXRyYWNlX3N0Yml0KCJzdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCIsaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCk7CiAJdHJhY2Vfc3RiaXQoInN0YXRlX2RlY29kZXJfcnVuIixoZHctPnN0YXRlX2RlY29kZXJfcnVuKTsKKwl0cmFjZV9zdGJpdCgic3RhdGVfZGVjb2Rlcl9yZWFkeSIsIGhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSk7CiAJcmV0dXJuICEwOwogfQogCkBAIC00Nzk3LDcgKzQ4MzUsOCBAQAogCQkJYnVmLGFjbnQsCiAJCQkid29ya2VyOiVzJXMlcyVzJXMlcyVzIiwKIAkJCShoZHctPnN0YXRlX2RlY29kZXJfcnVuID8KLQkJCSAiIDxkZWNvZGU6cnVuPiIgOgorCQkJIChoZHctPnN0YXRlX2RlY29kZXJfcmVhZHkgPworCQkJICAiPGRlY29kZTpydW4+IiA6ICIgPGRlY29kZTpzdGFydD4iKSA6CiAJCQkgKGhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQgPwogCQkJICAiIiA6ICIgPGRlY29kZTpzdG9wPiIpKSwKIAkJCShoZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50ID8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKaW5kZXggNTZlNzBlYS4uNTFkMzAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKQEAgLTMwNiw2ICszMDYsNyBAQAogCWludCBzdGF0ZV9lbmNvZGVyX29rOwogCWludCBzdGF0ZV9lbmNvZGVyX3J1bjsKIAlpbnQgc3RhdGVfZGVjb2Rlcl9ydW47CisJaW50IHN0YXRlX2RlY29kZXJfcmVhZHk7CiAJaW50IHN0YXRlX3VzYnN0cmVhbV9ydW47CiAJaW50IHN0YXRlX2RlY29kZXJfcXVpZXNjZW50OwogCWludCBzdGF0ZV9waXBlbGluZV9jb25maWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCmluZGV4IDI5NGY4NjAuLjMyMmFjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCkBAIC04OTgsMTggKzg5OCw4IEBACiAKIHN0YXRpYyB2b2lkIHB4YV9jYW1lcmFfYWN0aXZhdGUoc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldikKIHsKLQlzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGNkZXYtPnBkYXRhOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5zb2NfaG9zdC52NGwyX2Rldi5kZXY7CiAJdTMyIGNpY3I0ID0gMDsKIAotCWRldl9kYmcoZGV2LCAiUmVnaXN0ZXJlZCBwbGF0Zm9ybSBkZXZpY2UgYXQgJXAgZGF0YSAlcFxuIiwKLQkJcGNkZXYsIHBkYXRhKTsKLQotCWlmIChwZGF0YSAmJiBwZGF0YS0+aW5pdCkgewotCQlkZXZfZGJnKGRldiwgIiVzOiBJbml0IGdwaW9zXG4iLCBfX2Z1bmNfXyk7Ci0JCXBkYXRhLT5pbml0KGRldik7Ci0JfQotCiAJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCV9fcmF3X3dyaXRlbCgweDNmZiwgcGNkZXYtPmJhc2UgKyBDSUNSMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9yajU0bjFjYjBjLmMKaW5kZXggODA1MjI2ZS4uOTI3NzE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9yajU0bjFjYjBjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9yajU0bjFjYjBjLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXU4IHZhbDsKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua180W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfNFtdID0gewogCXsweDQxNywgMH0sCiAJezB4NDJjLCAwfSwKIAl7MHg0MmQsIDB4ZjB9LApAQCAtMTg2LDcgKzE4Niw3IEBACiAJezB4NGZlLCAyfSwKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua181W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfNVtdID0gewogCXsweDUxNCwgMH0sCiAJezB4NTE2LCAwfSwKIAl7MHg1MTgsIDB9LApAQCAtMjA3LDcgKzIwNyw3IEBACiAJezB4NWZlLCAyfSwKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua183W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfN1tdID0gewogCXsweDcwYSwgMH0sCiAJezB4NzE0LCAweGZmfSwKIAl7MHg3MTUsIDB4ZmZ9LApAQCAtMjE1LDcgKzIxNSw3IEBACiAJezB4N0ZFLCAyfSwKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua184W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfOFtdID0gewogCXsweDgwMCwgMHgwMH0sCiAJezB4ODAxLCAweDAxfSwKIAl7MHg4MDIsIDB4NjF9LApAQCAtNDAzLDEyICs0MDMsMTIgQEAKIAl7MHg4RkUsIDJ9LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzEwW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfMTBbXSA9IHsKIAl7MHgxMGJmLCAweDY5fQogfTsKIAogLyogQ2xvY2sgZGl2aWRlcnMgLSB0aGVzZSBhcmUgZGVmYXVsdCByZWdpc3RlciB2YWx1ZXMsIGRpdmlkZXIgPSByZWdpc3RlciArIDEgKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgcmo1NG4xX2Nsb2NrX2RpdiBjbGtfZGl2ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfY2xvY2tfZGl2IGNsa19kaXYgPSB7CiAJLnJhdGlvX3RnCT0gMyAvKiBkZWZhdWx0OiA1ICovLAogCS5yYXRpb190CT0gNCAvKiBkZWZhdWx0OiAxICovLAogCS5yYXRpb19yCT0gNCAvKiBkZWZhdWx0OiAwICovLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCA0NDg3M2EwLi5jMGE3ZjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtMTA0LDYgKzEwNCwxMCBAQAogCWlmIChpZCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpCiAJCXJldHVybiByZWcgPCAweDIwICYmIHJlZyAhPSAweDAxICYmIHJlZyAhPSAweDBmICYmCiAJCSAgICAgICAocmVnIDwgMHgxMyB8fCByZWcgPiAweDE5KSAmJiByZWcgIT0gMHgxZCAmJiByZWcgIT0gMHgxZTsKKwlpZiAoaWQgPT0gVjRMMl9JREVOVF9TQUE3MTExQSkKKwkJcmV0dXJuIHJlZyA8IDB4MjAgJiYgcmVnICE9IDB4MDEgJiYgcmVnICE9IDB4MGYgJiYKKwkJICAgICAgIHJlZyAhPSAweDE0ICYmIHJlZyAhPSAweDE4ICYmIHJlZyAhPSAweDE5ICYmCisJCSAgICAgICByZWcgIT0gMHgxZCAmJiByZWcgIT0gMHgxZTsKIAogCS8qIGNvbW1vbiBmb3Igc2FhNzExMy80LzUvOCAqLwogCWlmICh1bmxpa2VseSgocmVnID49IDB4M2IgJiYgcmVnIDw9IDB4M2YpIHx8IHJlZyA9PSAweDVjIHx8IHJlZyA9PSAweDVmIHx8CkBAIC05NTQsOCArOTU4LDcgQEAKIAkwMTEgTlRTQyBOICgzLjU4TUh6KSAgICAgICAgICAgIFBBTCBNICgzLjU4TUh6KQogCTEwMCByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgTlRTQy1KYXBhbiAoMy41OE1IeikKIAkqLwotCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExIHx8Ci0JICAgIHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTMpIHsKKwlpZiAoc3RhdGUtPmlkZW50IDw9IFY0TDJfSURFTlRfU0FBNzExMykgewogCQl1OCByZWcgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMEVfQ0hST01BX0NOVExfMSkgJiAweDhmOwogCiAJCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMX00pIHsKQEAgLTEyMzIsMjIgKzEyMzUsMTkgQEAKIAkJCSAgICAgdTMyIGlucHV0LCB1MzIgb3V0cHV0LCB1MzIgY29uZmlnKQogewogCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQl1OCBtYXNrID0gKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpID8gMHhmOCA6IDB4ZjA7CisJdTggbWFzayA9IChzdGF0ZS0+aWRlbnQgPD0gVjRMMl9JREVOVF9TQUE3MTExQSkgPyAweGY4IDogMHhmMDsKIAogCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImRlY29kZXIgc2V0IGlucHV0ICVkIG91dHB1dCAlZFxuIiwKIAkJaW5wdXQsIG91dHB1dCk7CiAKIAkvKiBzYWE3MTExLzMgZG9lcyBub3QgaGF2ZSB0aGVzZSBpbnB1dHMgKi8KLQlpZiAoKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTMgfHwKLQkgICAgIHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpICYmCisJaWYgKHN0YXRlLT5pZGVudCA8PSBWNEwyX0lERU5UX1NBQTcxMTMgJiYKIAkgICAgKGlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNCB8fAogCSAgICAgaW5wdXQgPT0gU0FBNzExNV9DT01QT1NJVEU1KSkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGlucHV0ID4gU0FBNzExNV9TVklERU8zKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAob3V0cHV0ID4gU0FBNzExNV9JUE9SVF9PTikKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHN0YXRlLT5pbnB1dCA9PSBpbnB1dCAmJiBzdGF0ZS0+b3V0cHV0ID09IG91dHB1dCkKIAkJcmV0dXJuIDA7CiAJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibm93IHNldHRpbmcgJXMgaW5wdXQgJXMgb3V0cHV0XG4iLApAQCAtMTI1Niw3ICsxMjU2LDcgQEAKIAlzdGF0ZS0+aW5wdXQgPSBpbnB1dDsKIAogCS8qIHNhYTcxMTEgaGFzIHNsaWdodGx5IGRpZmZlcmVudCBpbnB1dCBudW1iZXJpbmcgKi8KLQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSkgeworCWlmIChzdGF0ZS0+aWRlbnQgPD0gVjRMMl9JREVOVF9TQUE3MTExQSkgewogCQlpZiAoaW5wdXQgPj0gU0FBNzExNV9DT01QT1NJVEU0KQogCQkJaW5wdXQgLT0gMjsKIAkJLyogc2FhNzExMSBzcGVjaWZpYyAqLwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIHsKIAlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKLQlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExMSkKKwlpZiAoc3RhdGUtPmlkZW50ID4gVjRMMl9JREVOVF9TQUE3MTExQSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc2FhNzExeF93cml0ZShzZCwgMHgxMSwgKHNhYTcxMXhfcmVhZChzZCwgMHgxMSkgJiAweDdmKSB8CiAJCSh2YWwgPyAweDgwIDogMCkpOwpAQCAtMTU5Niw2ICsxNTk2LDEwIEBACiAJc3dpdGNoIChjaGlwX2lkKSB7CiAJY2FzZSAnMSc6CiAJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExMTsKKwkJaWYgKHNhYTcxMXhfcmVhZChzZCwgUl8wMF9DSElQX1ZFUlNJT04pICYgMHhmMCkgeworCQkJdjRsX2luZm8oY2xpZW50LCAic2FhNzExMWEgdmFyaWFudCBmb3VuZFxuIik7CisJCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTFBOworCQl9CiAJCWJyZWFrOwogCWNhc2UgJzMnOgogCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTM7CkBAIC0xNjEyLDcgKzE2MTYsNyBAQAogCWRlZmF1bHQ6CiAJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExMTsKIAkJdjRsMl9pbmZvKHNkLCAiV0FSTklORzogQ2hpcCBpcyBub3Qga25vd24gLSBGYWxsaW5nIGJhY2sgdG8gc2FhNzExMVxuIik7Ci0KKwkJYnJlYWs7CiAJfQogCiAJc3RhdGUtPmF1ZGNsa19mcmVxID0gNDgwMDA7CkBAIC0xNjIzLDYgKzE2MjcsNyBAQAogCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBTQUE3MTE1X0ZSRVFfMjRfNTc2X01IWjsKIAlzd2l0Y2ggKHN0YXRlLT5pZGVudCkgewogCWNhc2UgVjRMMl9JREVOVF9TQUE3MTExOgorCWNhc2UgVjRMMl9JREVOVF9TQUE3MTExQToKIAkJc2FhNzExeF93cml0ZXJlZ3Moc2QsIHNhYTcxMTFfaW5pdCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9JREVOVF9TQUE3MTEzOgpAQCAtMTYzMiw3ICsxNjM3LDcgQEAKIAkJc3RhdGUtPmNyeXN0YWxfZnJlcSA9IFNBQTcxMTVfRlJFUV8zMl8xMV9NSFo7CiAJCXNhYTcxMXhfd3JpdGVyZWdzKHNkLCBzYWE3MTE1X2luaXRfYXV0b19pbnB1dCk7CiAJfQotCWlmIChzdGF0ZS0+aWRlbnQgIT0gVjRMMl9JREVOVF9TQUE3MTExKQorCWlmIChzdGF0ZS0+aWRlbnQgPiBWNEwyX0lERU5UX1NBQTcxMTFBKQogCQlzYWE3MTF4X3dyaXRlcmVncyhzZCwgc2FhNzExNV9pbml0X21pc2MpOwogCXNhYTcxMXhfc2V0X3Y0bHN0ZChzZCwgVjRMMl9TVERfTlRTQyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKaW5kZXggMmZlN2E3MC4uMjUwZWY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKQEAgLTE4MSw3ICsxODEsNyBAQAogI2RlZmluZSBTQUE3MTI3XzYwSFpfREFDX0NPTlRST0wgMHgxNQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHNhYTcxMjdfaW5pdF9jb25maWdfNjBoeltdID0gewogCXsgU0FBNzEyN19SRUdfQlVSU1RfU1RBUlQsIAkJCTB4MTkgfSwKLQkvKiBCVVJTVF9FTkQgaXMgYWxzbyB1c2VkIGFzIGEgY2hpcCBJRCBpbiBzYWE3MTI3X2RldGVjdF9jbGllbnQgKi8KKwkvKiBCVVJTVF9FTkQgaXMgYWxzbyB1c2VkIGFzIGEgY2hpcCBJRCBpbiBzYWE3MTI3X3Byb2JlICovCiAJeyBTQUE3MTI3X1JFR19CVVJTVF9FTkQsIAkJCTB4MWQgfSwKIAl7IFNBQTcxMjdfUkVHX0NIUk9NQV9QSEFTRSwgCQkJMHhhMyB9LAogCXsgU0FBNzEyN19SRUdfR0FJTlUsIAkJCQkweDk4IH0sCkBAIC0yMDAsMTAgKzIwMCwxMCBAQAogCXsgMCwgMCB9CiB9OwogCi0jZGVmaW5lIFNBQTcxMjdfNTBIWl9EQUNfQ09OVFJPTCAweDAyCi1zdGF0aWMgc3RydWN0IGkyY19yZWdfdmFsdWUgc2FhNzEyN19pbml0X2NvbmZpZ181MGh6W10gPSB7CisjZGVmaW5lIFNBQTcxMjdfNTBIWl9QQUxfREFDX0NPTlRST0wgMHgwMgorc3RhdGljIHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHNhYTcxMjdfaW5pdF9jb25maWdfNTBoel9wYWxbXSA9IHsKIAl7IFNBQTcxMjdfUkVHX0JVUlNUX1NUQVJULCAJCQkweDIxIH0sCi0JLyogQlVSU1RfRU5EIGlzIGFsc28gdXNlZCBhcyBhIGNoaXAgSUQgaW4gc2FhNzEyN19kZXRlY3RfY2xpZW50ICovCisJLyogQlVSU1RfRU5EIGlzIGFsc28gdXNlZCBhcyBhIGNoaXAgSUQgaW4gc2FhNzEyN19wcm9iZSAqLwogCXsgU0FBNzEyN19SRUdfQlVSU1RfRU5ELCAJCQkweDFkIH0sCiAJeyBTQUE3MTI3X1JFR19DSFJPTUFfUEhBU0UsIAkJCTB4M2YgfSwKIAl7IFNBQTcxMjdfUkVHX0dBSU5VLCAJCQkJMHg3ZCB9LApAQCAtMjIyLDYgKzIyMiwyOCBAQAogCXsgMCwgMCB9CiB9OwogCisjZGVmaW5lIFNBQTcxMjdfNTBIWl9TRUNBTV9EQUNfQ09OVFJPTCAweDA4CitzdGF0aWMgc3RydWN0IGkyY19yZWdfdmFsdWUgc2FhNzEyN19pbml0X2NvbmZpZ181MGh6X3NlY2FtW10gPSB7CisJeyBTQUE3MTI3X1JFR19CVVJTVF9TVEFSVCwgCQkJMHgyMSB9LAorCS8qIEJVUlNUX0VORCBpcyBhbHNvIHVzZWQgYXMgYSBjaGlwIElEIGluIHNhYTcxMjdfcHJvYmUgKi8KKwl7IFNBQTcxMjdfUkVHX0JVUlNUX0VORCwgCQkJMHgxZCB9LAorCXsgU0FBNzEyN19SRUdfQ0hST01BX1BIQVNFLCAJCQkweDNmIH0sCisJeyBTQUE3MTI3X1JFR19HQUlOVSwgCQkJCTB4NmEgfSwKKwl7IFNBQTcxMjdfUkVHX0dBSU5WLCAJCQkJMHg4MSB9LAorCXsgU0FBNzEyN19SRUdfQkxBQ0tfTEVWRUwsIAkJCTB4MzMgfSwKKwl7IFNBQTcxMjdfUkVHX0JMQU5LSU5HX0xFVkVMLCAJCQkweDM1IH0sCisJeyBTQUE3MTI3X1JFR19WQklfQkxBTktJTkcsIAkJCTB4MzUgfSwKKwl7IFNBQTcxMjdfUkVHX0RBQ19DT05UUk9MLCAJCQkweDA4IH0sCisJeyBTQUE3MTI3X1JFR19CVVJTVF9BTVAsIAkJCTB4MmYgfSwKKwl7IFNBQTcxMjdfUkVHX1NVQkMzLCAJCQkJMHhiMiB9LAorCXsgU0FBNzEyN19SRUdfU1VCQzIsIAkJCQkweDNiIH0sCisJeyBTQUE3MTI3X1JFR19TVUJDMSwgCQkJCTB4YTMgfSwKKwl7IFNBQTcxMjdfUkVHX1NVQkMwLCAJCQkJMHgyOCB9LAorCXsgU0FBNzEyN19SRUdfTVVMVEksIAkJCQkweDkwIH0sCisJeyBTQUE3MTI3X1JFR19DTE9TRURfQ0FQVElPTiwgCQkJMHgwMCB9LAorCXsgMCwgMCB9Cit9OworCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC00NjMsMTAgKzQ4NSwyMSBAQAogCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJTZWxlY3RpbmcgNjAgSHogdmlkZW8gU3RhbmRhcmRcbiIpOwogCQlpbml0dGFiID0gc2FhNzEyN19pbml0X2NvbmZpZ182MGh6OwogCQlzdGF0ZS0+cmVnXzYxID0gU0FBNzEyN182MEhaX0RBQ19DT05UUk9MOworCisJfSBlbHNlIGlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTI5ICYmCisJCSAgIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgJiYKKwkJICAgIShzdGQgJiAoVjRMMl9TVERfNjI1XzUwICYgflY0TDJfU1REX1NFQ0FNKSkpIHsKKworCQkvKiBJZiBhbmQgb25seSBpZiBTRUNBTSwgd2l0aCBhIFNBQTcxMls4OV0gKi8KKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJICJTZWxlY3RpbmcgNTAgSHogU0VDQU0gdmlkZW8gU3RhbmRhcmRcbiIpOworCQlpbml0dGFiID0gc2FhNzEyN19pbml0X2NvbmZpZ181MGh6X3NlY2FtOworCQlzdGF0ZS0+cmVnXzYxID0gU0FBNzEyN181MEhaX1NFQ0FNX0RBQ19DT05UUk9MOworCiAJfSBlbHNlIHsKLQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiU2VsZWN0aW5nIDUwIEh6IHZpZGVvIFN0YW5kYXJkXG4iKTsKLQkJaW5pdHRhYiA9IHNhYTcxMjdfaW5pdF9jb25maWdfNTBoejsKLQkJc3RhdGUtPnJlZ182MSA9IFNBQTcxMjdfNTBIWl9EQUNfQ09OVFJPTDsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiU2VsZWN0aW5nIDUwIEh6IFBBTCB2aWRlbyBTdGFuZGFyZFxuIik7CisJCWluaXR0YWIgPSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHpfcGFsOworCQlzdGF0ZS0+cmVnXzYxID0gU0FBNzEyN181MEhaX1BBTF9EQUNfQ09OVFJPTDsKIAl9CiAKIAkvKiBXcml0ZSBUYWJsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggMDNmNTcyNy4uMjk3ODMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC00MTYwLDcgKzQxNjAsNyBAQAogCQkJLmFtdXggPSBMSU5FMiwKIAkJfSwKIAl9LAotCVtTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNdID0geworCVtTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUs1XSA9IHsKIAkJLyogICAgICAgQmVob2xkZXIgSW50bC4gTHRkLiAyMDA4ICAgICAgKi8KIAkJLypEbWl0cnkgQmVsaW1vdiA8ZC5iZWxpbW92QGdtYWlsLmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIDUwNSBSRFMiLApAQCAtNTMyMCw2ICs1MzIwLDQxIEBACiAJCQkudm11eCA9IDgsCiAJCX0gfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszXSA9IHsKKwkJLyogICAgICAgQmVob2xkZXIgSW50bC4gTHRkLiAyMDA4ICAgICAgKi8KKwkJLypEbWl0cnkgQmVsaW1vdiA8ZC5iZWxpbW92QGdtYWlsLmNvbT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIDUwNSBSRFMiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMjAwMDAwLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yZHNfYWRkciAJPSAweDEwLAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDAwMDgwMDAsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUyLAorCQkJLnR2ICAgPSAxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSB9LAorCQkubXV0ZSA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSwKKwl9LAogCiB9OwogCkBAIC02MjM1LDcgKzYyNzAsMTMgQEAKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAogCQkuc3VidmVuZG9yICAgID0gMHgwMDAwLAogCQkuc3ViZGV2aWNlICAgID0gMHg1MDVCLAotCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LNSwKKwl9LCB7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKKwkJLnN1YnZlbmRvciAgICA9IDB4MDAwMCwKKwkJLnN1YmRldmljZSAgICA9IDB4NTA1MSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzMsCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKQEAgLTY3OTIsNyArNjgzMyw4IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDdGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwOToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNUZNOgotCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LNToKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdfOUZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3UkRTX01LMzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzU6CkBAIC02OTUzLDggKzY5OTUsOCBAQAogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1MzNTA6CiAJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0dQSU87Ci0JCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDAwMDA4MDAwLCAweDAwMDA4MDAwKTsKLQkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDApOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHgwMDAwQzAwMCwgMHgwMDAwQzAwMCk7CisJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDAwMDBDMDAwLCAweDAwMDBDMDAwKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggZjhlOTg1OS4uOTQ5OTAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAlpbnQgcG9sbGluZyAgICAgID0gMDsKIAlpbnQgcmM1X2dwaW8JID0gMDsKIAlpbnQgbmVjX2dwaW8JID0gMDsKLQlpbnQgaXJfdHlwZSAgICAgID0gSVJfVFlQRV9PVEhFUjsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVycjsKIAogCWlmIChkZXYtPmhhc19yZW1vdGUgIT0gU0FBNzEzNF9SRU1PVEVfR1BJTykKQEAgLTU2OCw3ICs1NjgsOCBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA3Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVGTToKLQljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEUzoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzU6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3XzlGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUs1OgpAQCAtNzI4LDcgKzcyOSw3IEBACiAJZGV2LT5yZW1vdGUgPSBpcjsKIAlzYWE3MTM0X2lyX3N0YXJ0KGRldiwgaXIpOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmRldiwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5kZXYsIGlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfc3RvcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggY2I3MzI2NC4uMzExMzhkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogI2RlZmluZSBOT1JNXzUyNV82MAkJCVwKIAkJLmhfc3RhcnQgICAgICAgPSAwLAlcCi0JCS5oX3N0b3AgICAgICAgID0gNzAzLAlcCisJCS5oX3N0b3AgICAgICAgID0gNzE5LAlcCiAJCS52aWRlb192X3N0YXJ0ID0gMjMsCVwKIAkJLnZpZGVvX3Zfc3RvcCAgPSAyNjIsCVwKIAkJLnZiaV92X3N0YXJ0XzAgPSAxMCwJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggNTNiN2UwYi4uYmYxMzA5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0yODIsNyArMjgyLDcgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMCAgIDE1NgogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fNTA3VUEgMTU3CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0NBUkRCVVNfNTAxIDE1OAotI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFMgICAgICAgICAxNTkKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LNSAgICAgMTU5CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzMgICAgIDE2MAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUs1ICAgICAxNjEKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNjA3Rk1fTUs1ICAgICAgMTYyCkBAIC0yOTksNiArMjk5LDcgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9aT0xJRF9IWUJSSURfUENJCQkxNzMKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BU1VTX0VVUk9QQV9IWUJSSUQJMTc0CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfTEVBRFRFS19XSU5GQVNUX0RUVjEwMDBTIDE3NQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszICAgICAxNzYKIAogI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyAzMgogI2RlZmluZSBTQUE3MTM0X0lOUFVUX01BWCA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWFwaS5jCmluZGV4IDZmMDk0YTkuLjFkNDg3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWFwaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWFwaS5jCkBAIC01MjMsNyArNTIzLDcgQEAKIAl9CiAKIAlyZWdsZW4gPSBzYWE3MTY0X2kyY2FkZHJfdG9fcmVnbGVuKGJ1cywgYWRkcik7Ci0JaWYgKHVuaXRpZCA8IDApIHsKKwlpZiAocmVnbGVuIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSIlcygpIGVycm9yLCBjYW5ub3QgdHJhbnNsYXRlIHJlZ2FkZHIgdG8gcmVnbGVuXG4iLAogCQkJX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IGYwOWM3MTQuLmZiODhjNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTE3NDgsNiArMTc0OCwyMiBAQAogCQkJCSAgICAgICBpY2QpOwogfQogCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfZ2V0X3Bhcm0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3Bhcm0sIHBhcm0pOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X3Bhcm0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOworCisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3Bhcm0sIHBhcm0pOworfQorCiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfZ2V0X2N0cmwoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewpAQCAtMTgwOCw2ICsxODI0LDggQEAKIAkudHJ5X2ZtdAk9IHNoX21vYmlsZV9jZXVfdHJ5X2ZtdCwKIAkuc2V0X2N0cmwJPSBzaF9tb2JpbGVfY2V1X3NldF9jdHJsLAogCS5nZXRfY3RybAk9IHNoX21vYmlsZV9jZXVfZ2V0X2N0cmwsCisJLnNldF9wYXJtCT0gc2hfbW9iaWxlX2NldV9zZXRfcGFybSwKKwkuZ2V0X3Bhcm0JPSBzaF9tb2JpbGVfY2V1X2dldF9wYXJtLAogCS5yZXFidWZzCT0gc2hfbW9iaWxlX2NldV9yZXFidWZzLAogCS5wb2xsCQk9IHNoX21vYmlsZV9jZXVfcG9sbCwKIAkucXVlcnljYXAJPSBzaF9tb2JpbGVfY2V1X3F1ZXJ5Y2FwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwppbmRleCBmNzFmMjcyLi42ZWJhZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvS2NvbmZpZwpAQCAtMSw3ICsxLDEwIEBACiBjb25maWcgVVNCX1NOOUMxMDIKLQl0cmlzdGF0ZSAiVVNCIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVVNCIFNOOUMxeHggUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyCiAJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSBzb25peGIgYW5kCisJICBzb25peGogbW9kdWxlcyBpbnN0ZWFkLgorCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gU09OaVggU045QzEwMSwKIAkgIFNOOUMxMDIsIFNOOUMxMDMsIFNOOUMxMDUgYW5kIFNOOUMxMjAgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAppbmRleCAzNmVlNDNhLi5jYzQwZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKQEAgLTQ1LDIwICs0NSwyNCBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1LCBCUklER0VfU045QzEwMiksIH0sCiAjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNywgQlJJREdFX1NOOUMxMDIpLCB9LAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkLCBCUklER0VfU045QzEwMiksIH0sCiAvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAxMSwgQlJJREdFX1NOOUMxMDIpLCB9LCBPVjY2NTAgKi8KKyNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDE5LCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjQsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyNSwgQlJJREdFX1NOOUMxMDIpLCB9LAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOCwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI5LCBCUklER0VfU045QzEwMiksIH0sCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJiLCBCUklER0VfU045QzEwMiksIH0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJjLCBCUklER0VfU045QzEwMiksIH0sCi0jZW5kaWYKIC8qCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJkLCBCUklER0VfU045QzEwMiksIH0sIEhWNzEzMVIgKi8KKyNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJlLCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMzAsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAkvKiBTTjlDMTAzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IDZiM2ZiY2MuLjgwZjZiZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC03ODEsNiArNzgxLDMyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBzb2NfY2FtZXJhX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisKKwlpZiAoaWNpLT5vcHMtPmdldF9wYXJtKQorCQlyZXR1cm4gaWNpLT5vcHMtPmdldF9wYXJtKGljZCwgYSk7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IHNvY19jYW1lcmFfc19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCSAgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKworCWlmIChpY2ktPm9wcy0+c2V0X3Bhcm0pCisJCXJldHVybiBpY2ktPm9wcy0+c2V0X3Bhcm0oaWNkLCBhKTsKKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9nX2NoaXBfaWRlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCSAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKIHsKQEAgLTg0NiwxMCArODcyLDggQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoaWNsLT5pMmNfYWRhcHRlcl9pZCk7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXY7Ci0JaW50IHJldDsKIAogCWlmICghYWRhcCkgewotCQlyZXQgPSAtRU5PREVWOwogCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNhbm5vdCBnZXQgSTJDIGFkYXB0ZXIgIyVkLiBObyBkcml2ZXI/XG4iLAogCQkJaWNsLT5pMmNfYWRhcHRlcl9pZCk7CiAJCWdvdG8gZWkyY2dhOwpAQCAtODU5LDEwICs4ODMsOCBAQAogCiAJc3ViZGV2ID0gdjRsMl9pMmNfbmV3X3N1YmRldl9ib2FyZCgmaWNpLT52NGwyX2RldiwgYWRhcCwKIAkJCQlpY2wtPm1vZHVsZV9uYW1lLCBpY2wtPmJvYXJkX2luZm8sIE5VTEwpOwotCWlmICghc3ViZGV2KSB7Ci0JCXJldCA9IC1FTk9NRU07CisJaWYgKCFzdWJkZXYpCiAJCWdvdG8gZWkyY25kOwotCX0KIAogCWNsaWVudCA9IHN1YmRldi0+cHJpdjsKIApAQCAtODczLDcgKzg5NSw3IEBACiBlaTJjbmQ6CiAJaTJjX3B1dF9hZGFwdGVyKGFkYXApOwogZWkyY2dhOgotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyB2b2lkIHNvY19jYW1lcmFfZnJlZV9pMmMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCkBAIC0xMjYwLDYgKzEyODIsOCBAQAogCS52aWRpb2NfY3JvcGNhcAkJID0gc29jX2NhbWVyYV9jcm9wY2FwLAogCS52aWRpb2NfZ19jcm9wCQkgPSBzb2NfY2FtZXJhX2dfY3JvcCwKIAkudmlkaW9jX3NfY3JvcAkJID0gc29jX2NhbWVyYV9zX2Nyb3AsCisJLnZpZGlvY19nX3Bhcm0JCSA9IHNvY19jYW1lcmFfZ19wYXJtLAorCS52aWRpb2Nfc19wYXJtCQkgPSBzb2NfY2FtZXJhX3NfcGFybSwKIAkudmlkaW9jX2dfY2hpcF9pZGVudCAgICAgPSBzb2NfY2FtZXJhX2dfY2hpcF9pZGVudCwKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiAJLnZpZGlvY19nX3JlZ2lzdGVyCSA9IHNvY19jYW1lcmFfZ19yZWdpc3RlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX21lZGlhYnVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19tZWRpYWJ1cy5jCmluZGV4IGY4ZDVjODcuLjhiNjNiNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX21lZGlhYnVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfbWVkaWFidXMuYwpAQCAtMjQsOTEgKzI0LDEwNiBAQAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFlWWVU4XzJYOF9MRSldID0geworCX0sCisJW01CVVNfSURYKFlWWVU4XzJYOF9MRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfWVZZVSwKIAkJLm5hbWUJCQk9ICJZVllVIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChZVVlWOF8yWDhfQkUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChZVVlWOF8yWDhfQkUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1VZVlksCiAJCS5uYW1lCQkJPSAiVVlWWSIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoWVZZVThfMlg4X0JFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoWVZZVThfMlg4X0JFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9WWVVZLAogCQkubmFtZQkJCT0gIlZZVVkiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFJHQjU1NV8yWDhfUEFESElfTEUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChSR0I1NTVfMlg4X1BBREhJX0xFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9SR0I1NTUsCiAJCS5uYW1lCQkJPSAiUkdCNTU1IiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChSR0I1NTVfMlg4X1BBREhJX0JFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoUkdCNTU1XzJYOF9QQURISV9CRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfUkdCNTU1WCwKIAkJLm5hbWUJCQk9ICJSR0I1NTVYIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChSR0I1NjVfMlg4X0xFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoUkdCNTY1XzJYOF9MRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LAogCQkubmFtZQkJCT0gIlJHQjU2NSIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoUkdCNTY1XzJYOF9CRSldID0geworCX0sCisJW01CVVNfSURYKFJHQjU2NV8yWDhfQkUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NVgsCiAJCS5uYW1lCQkJPSAiUkdCNTY1WCIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoU0JHR1I4XzFYOCldID0geworCX0sCisJW01CVVNfSURYKFNCR0dSOF8xWDgpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSOCwKIAkJLm5hbWUJCQk9ICJCYXllciA4IEJHR1IiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19OT05FLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChTQkdHUjEwXzFYMTApXSA9IHsKKwl9LAorCVtNQlVTX0lEWChTQkdHUjEwXzFYMTApXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCiAJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSAxMCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19FWFRFTkQxNiwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoR1JFWThfMVg4KV0gPSB7CisJfSwKKwlbTUJVU19JRFgoR1JFWThfMVg4KV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9HUkVZLAogCQkubmFtZQkJCT0gIkdyZXkiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19OT05FLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChZMTBfMVgxMCldID0geworCX0sCisJW01CVVNfSURYKFkxMF8xWDEwKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9ZMTAsCiAJCS5uYW1lCQkJPSAiR3JleSAxMGJpdCIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSAxMCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR19FWFRFTkQxNiwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFESElfTEUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURISV9MRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwKIAkJLm5hbWUJCQk9ICJCYXllciAxMCBCR0dSIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURMT19MRSldID0geworCX0sCisJW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBRExPX0xFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLAogCQkubmFtZQkJCT0gIkJheWVyIDEwIEJHR1IiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFETE8sCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBREhJX0JFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFESElfQkUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCiAJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9CRSwKLQl9LCBbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFETE9fQkUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURMT19CRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwKIAkJLm5hbWUJCQk9ICJCYXllciAxMCBCR0dSIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCkBAIC0xMzQsNyArMTQ5LDggQEAKIGNvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCAqc29jX21idXNfZ2V0X2ZtdGRlc2MoCiAJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGUpCiB7Ci0JaWYgKCh1bnNpZ25lZCBpbnQpKGNvZGUgLSBWNEwyX01CVVNfRk1UX0ZJWEVEKSA+IEFSUkFZX1NJWkUobWJ1c19mbXQpKQorCWlmIChjb2RlIC0gVjRMMl9NQlVTX0ZNVF9GSVhFRCA+IEFSUkFZX1NJWkUobWJ1c19mbXQpIHx8CisJICAgIGNvZGUgPD0gVjRMMl9NQlVTX0ZNVF9GSVhFRCkKIAkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIG1idXNfZm10ICsgY29kZSAtIFY0TDJfTUJVU19GTVRfRklYRUQgLSAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI5ZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL0tjb25maWcKQEAgLTAsMCArMSwxNiBAQAorY29uZmlnIFZJREVPX1RMRzIzMDAKKwl0cmlzdGF0ZSAiVGVsZWdlbnQgVExHMjMwMCBVU0IgdmlkZW8gY2FwdHVyZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBJTlBVVCAmJiBTTkQgJiYgRFZCX0NPUkUKKwlzZWxlY3QgVklERU9fVFVORVIKKwlzZWxlY3QgVklERU9fVFZFRVBST00KKwlzZWxlY3QgVklERU9fSVIKKwlzZWxlY3QgVklERU9CVUZfVk1BTExPQworCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFZJREVPQlVGX0RWQgorCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgVGVsZWdlbnQgdGxnMjMwMCBiYXNlZCBUViBjYXJkcy4KKwkgIFRoZSBkcml2ZXIgc3VwcG9ydHMgVjRMMiwgRFZCLVQgYW5kIHJhZGlvLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwb3NlaWRvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYmI3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACitwb3NlaWRvbi1vYmpzIDo9IHBkLXZpZGVvLm8gcGQtYWxzYS5vIHBkLWR2Yi5vIHBkLXJhZGlvLm8gcGQtbWFpbi5vCisKK29iai0kKENPTkZJR19WSURFT19UTEcyMzAwKSArPSBwb3NlaWRvbi5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWFsc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQyNjIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWFsc2EuYwpAQCAtMCwwICsxLDMzMiBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgInBkLWNvbW1vbi5oIgorI2luY2x1ZGUgInZlbmRvcmNtZHMuaCIKKworc3RhdGljIHZvaWQgY29tcGxldGVfaGFuZGxlcl9hdWRpbyhzdHJ1Y3QgdXJiICp1cmIpOworI2RlZmluZSBBVURJT19FUAkoMHg4MykKKyNkZWZpbmUgQVVESU9fQlVGX1NJWkUJKDUxMikKKyNkZWZpbmUgUEVSSU9EX1NJWkUJKDEwMjQgKiA4KQorI2RlZmluZSBQRVJJT0RfTUlOCSg0KQorI2RlZmluZSBQRVJJT0RfTUFYIAlQRVJJT0RfTUlOCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfcGRfaHdfY2FwdHVyZSA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUCAgICAgICAgICAgfAorCQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCisKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCisJLnJhdGVfbWluID0gNDgwMDAsCisJLnJhdGVfbWF4ID0gNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSBQRVJJT0RfU0laRSAqIFBFUklPRF9NSU4sCisJLnBlcmlvZF9ieXRlc19taW4gPSBQRVJJT0RfU0laRSwKKwkucGVyaW9kX2J5dGVzX21heCA9IFBFUklPRF9TSVpFLAorCS5wZXJpb2RzX21pbiA9IFBFUklPRF9NSU4sCisJLnBlcmlvZHNfbWF4ID0gUEVSSU9EX01BWCwKKwkvKgorCS5idWZmZXJfYnl0ZXNfbWF4ID0gNjI3MjAgKiA4LAorCS5wZXJpb2RfYnl0ZXNfbWluID0gNjQsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxMjU0NCwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJpb2RzX21heCA9IDk4CisJKi8KK307CisKK3N0YXRpYyBpbnQgc25kX3BkX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJaWYgKCFwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlwYS0+dXNlcnMrKzsKKwlwYS0+Y2FyZF9jbG9zZSAJCT0gMDsKKwlwYS0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtCT0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YQkJPSBwOworCisJcnVudGltZS0+aHcgPSBzbmRfcGRfaHdfY2FwdHVyZTsKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7CisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHAtPmludGVyZmFjZSk7CisJa3JlZl9nZXQoJnAtPmtyZWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wZF9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87CisKKwlwYS0+dXNlcnMtLTsKKwlwYS0+Y2FyZF9jbG9zZSAJCT0gMTsKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocC0+aW50ZXJmYWNlKTsKKwlrcmVmX3B1dCgmcC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcGRfaHdfY2FwdHVyZV9wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwlzaXplID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpOworCWlmIChydW50aW1lLT5kbWFfYXJlYSkgeworCQlpZiAocnVudGltZS0+ZG1hX2J5dGVzID4gc2l6ZSkKKwkJCXJldHVybiAwOworCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7CisJfQorCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIXJ1bnRpbWUtPmRtYV9hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKwllbHNlCisJCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHNpemU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXVkaW9fYnVmX2ZyZWUoc3RydWN0IHBvc2VpZG9uICpwKQoreworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVVESU9fQlVGUzsgaSsrKQorCQlpZiAocGEtPnVyYl9hcnJheVtpXSkKKwkJCXVzYl9raWxsX3VyYihwYS0+dXJiX2FycmF5W2ldKTsKKwlmcmVlX2FsbF91cmJfZ2VuZXJpYyhwYS0+dXJiX2FycmF5LCBBVURJT19CVUZTKTsKKwlsb2dwbSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wZF9od19jYXB0dXJlX2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJbG9ncG0oKTsKKwlhdWRpb19idWZfZnJlZShwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcGRfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBBVURJT19UUkFJTEVSX1NJWkUJKDE2KQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9hdWRpb19kYXRhKHN0cnVjdCB1cmIgKnVyYiwgaW50ICpwZXJpb2RfZWxhcHNlZCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBwYS0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtLT5ydW50aW1lOworCisJaW50IHN0cmlkZQk9IHJ1bnRpbWUtPmZyYW1lX2JpdHMgPj4gMzsKKwlpbnQgbGVuCQk9IHVyYi0+YWN0dWFsX2xlbmd0aCAvIHN0cmlkZTsKKwl1bnNpZ25lZCBjaGFyICpjcAk9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGludCBvbGRwdHIJPSBwYS0+cmN2X3Bvc2l0aW9uOworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSBBVURJT19CVUZfU0laRSAtIDQpCisJCWxlbiAtPSAoQVVESU9fVFJBSUxFUl9TSVpFIC8gc3RyaWRlKTsKKworCS8qIGRvIHRoZSBjb3B5ICovCisJaWYgKG9sZHB0ciArIGxlbiA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQl1bnNpZ25lZCBpbnQgY250ID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBvbGRwdHI7CisKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBjcCwgY250ICogc3RyaWRlKTsKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhLCAoY3AgKyBjbnQgKiBzdHJpZGUpLAorCQkJCQkobGVuICogc3RyaWRlIC0gY250ICogc3RyaWRlKSk7CisJfSBlbHNlCisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgY3AsIGxlbiAqIHN0cmlkZSk7CisKKwkvKiB1cGRhdGUgdGhlIHN0YXRhcyAqLworCXNuZF9wY21fc3RyZWFtX2xvY2socGEtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbSk7CisJcGEtPnJjdl9wb3NpdGlvbgkrPSBsZW47CisJaWYgKHBhLT5yY3ZfcG9zaXRpb24gPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCXBhLT5yY3ZfcG9zaXRpb24gLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisKKwlwYS0+Y29waWVkX3Bvc2l0aW9uICs9IChsZW4pOworCWlmIChwYS0+Y29waWVkX3Bvc2l0aW9uID49IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCXBhLT5jb3BpZWRfcG9zaXRpb24gLT0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJCSpwZXJpb2RfZWxhcHNlZCA9IDE7CisJfQorCXNuZF9wY21fc3RyZWFtX3VubG9jayhwYS0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQgY29tcGxldGVfaGFuZGxlcl9hdWRpbyhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHBhLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW07CisJaW50ICAgIHBlcmlvZF9lbGFwc2VkID0gMDsKKwlpbnQgICAgcmV0OworCisJaWYgKDEgPT0gcGEtPmNhcmRfY2xvc2UgfHwgcGEtPmNhcHR1cmVfc3RyZWFtICE9IFNUUkVBTV9PTikKKwkJcmV0dXJuOworCisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJLyppZiAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikqLworCQkJcmV0dXJuOworCX0KKworCWlmIChzdWJzdHJlYW0pIHsKKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJaGFuZGxlX2F1ZGlvX2RhdGEodXJiLCAmcGVyaW9kX2VsYXBzZWQpOworCQkJaWYgKHBlcmlvZF9lbGFwc2VkKQorCQkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKKwkJfQorCX0KKworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCA8IDApCisJCWxvZygiYXVkaW8gdXJiIGZhaWxlZCAoZXJyY29kID0gJWkpIiwgcmV0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZmlyZV9hdWRpb191cmIoc3RydWN0IHBvc2VpZG9uICpwKQoreworCWludCBpLCByZXQgPSAwOworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87CisKKwlhbGxvY19idWxrX3VyYnNfZ2VuZXJpYyhwYS0+dXJiX2FycmF5LCBBVURJT19CVUZTLAorCQkJcC0+dWRldiwgQVVESU9fRVAsCisJCQlBVURJT19CVUZfU0laRSwgR0ZQX0FUT01JQywKKwkJCWNvbXBsZXRlX2hhbmRsZXJfYXVkaW8sIHBhKTsKKworCWZvciAoaSA9IDA7IGkgPCBBVURJT19CVUZTOyBpKyspIHsKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIocGEtPnVyYl9hcnJheVtpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQpCisJCQlsb2coInVyYiBlcnIgOiAlZCIsIHJldCk7CisJfQorCWxvZygpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BkX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKworCWlmIChkZWJ1Z19tb2RlKQorCQlsb2coImNtZCAlZCwgYXVkaW8gc3RhdCA6ICVkXG4iLCBjbWQsIHBhLT5jYXB0dXJlX3N0cmVhbSk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWlmIChwYS0+Y2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09OKQorCQkJcmV0dXJuIDA7CisKKwkJcGEtPnJjdl9wb3NpdGlvbiA9IHBhLT5jb3BpZWRfcG9zaXRpb24gPSAwOworCQlwYS0+Y2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fT047CisKKwkJaWYgKGluX2hpYmVybmF0aW9uKHApKQorCQkJcmV0dXJuIDA7CisJCWZpcmVfYXVkaW9fdXJiKHApOworCQlyZXR1cm4gMDsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwkJcGEtPmNhcHR1cmVfc3RyZWFtID0gU1RSRUFNX1NVU1BFTkQ7CisJCXJldHVybiAwOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJcGEtPmNhcHR1cmVfc3RyZWFtID0gU1RSRUFNX09GRjsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9wZF9jYXB0dXJlX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87CisJcmV0dXJuIHBhLT5yY3ZfcG9zaXRpb247Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqc25kX3BjbV9wZF9nZXRfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgcGNtX2NhcHR1cmVfb3BzID0geworCS5vcGVuICAgICAgPSBzbmRfcGRfY2FwdHVyZV9vcGVuLAorCS5jbG9zZSAgICAgPSBzbmRfcGRfcGNtX2Nsb3NlLAorCS5pb2N0bCAgICAgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gc25kX3BkX2h3X2NhcHR1cmVfcGFyYW1zLAorCS5od19mcmVlICAgPSBzbmRfcGRfaHdfY2FwdHVyZV9mcmVlLAorCS5wcmVwYXJlICAgPSBzbmRfcGRfcHJlcGFyZSwKKwkudHJpZ2dlciAgID0gc25kX3BkX2NhcHR1cmVfdHJpZ2dlciwKKwkucG9pbnRlciAgID0gc25kX3BkX2NhcHR1cmVfcG9pbnRlciwKKwkucGFnZSAgICAgID0gc25kX3BjbV9wZF9nZXRfcGFnZSwKK307CisKKyNpZmRlZiBDT05GSUdfUE0KK2ludCBwbV9hbHNhX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICpwKQoreworCWxvZ3BtKHApOworCWF1ZGlvX2J1Zl9mcmVlKHApOworCXJldHVybiAwOworfQorCitpbnQgcG1fYWxzYV9yZXN1bWUoc3RydWN0IHBvc2VpZG9uICpwKQoreworCWxvZ3BtKHApOworCWZpcmVfYXVkaW9fdXJiKHApOworCXJldHVybiAwOworfQorI2VuZGlmCisKK2ludCBwb3NlaWRvbl9hdWRpb19pbml0KHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoLTEsICJUZWxlZ2VudCIsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3BjbV9uZXcoY2FyZCwgInBvc2VpZG9uIGF1ZGlvIiwgMCwgMCwgMSwgJnBjbSk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmcGNtX2NhcHR1cmVfb3BzKTsKKwlwY20tPmluZm9fZmxhZ3MgICA9IDA7CisJcGNtLT5wcml2YXRlX2RhdGEgPSBwOworCXN0cmNweShwY20tPm5hbWUsICJwb3NlaWRvbiBhdWRpbyBjYXB0dXJlIik7CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQUxTQSBkcml2ZXIiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAicG9zZWlkb24gQXVkaW8iKTsKKwlzdHJjcHkoY2FyZC0+bG9uZ25hbWUsICJwb3NlaWRvbiBBTFNBIEF1ZGlvIik7CisKKwlpZiAoc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXBhLT5jYXJkID0gY2FyZDsKKwlyZXR1cm4gMDsKK30KKworaW50IHBvc2VpZG9uX2F1ZGlvX2ZyZWUoc3RydWN0IHBvc2VpZG9uICpwKQoreworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87CisKKwlpZiAocGEtPmNhcmQpCisJCXNuZF9jYXJkX2ZyZWUocGEtPmNhcmQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWNvbW1vbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MDY2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtY29tbW9uLmgKQEAgLTAsMCArMSwyODIgQEAKKyNpZm5kZWYgUERfQ09NTU9OX0gKKyNkZWZpbmUgUERfQ09NTU9OX0gKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiZHZiZGV2LmgiCisjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCisjaW5jbHVkZSAiZG14ZGV2LmgiCisKKyNkZWZpbmUgU0JVRl9OVU0JOAorI2RlZmluZSBNQVhfQlVGRkVSX05VTQk2CisjZGVmaW5lIFBLX1BFUl9VUkIJMzIKKyNkZWZpbmUgSVNPX1BLVF9TSVpFCTMwNzIKKworI2RlZmluZSBQT1NFSURPTl9TVEFURV9OT05FCQkoMHgwMDAwKQorI2RlZmluZSBQT1NFSURPTl9TVEFURV9BTkFMT0cJCSgweDAwMDEpCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX0ZNCQkoMHgwMDAyKQorI2RlZmluZSBQT1NFSURPTl9TVEFURV9EVkJUCQkoMHgwMDA0KQorI2RlZmluZSBQT1NFSURPTl9TVEFURV9WQkkJCSgweDAwMDgpCisjZGVmaW5lIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QJKDB4MDA4MCkKKworI2RlZmluZSBQTV9TVVNQRU5EX0RFTEFZCTMKKworI2RlZmluZSBWNExfUEFMX1ZCSV9MSU5FUwkxOAorI2RlZmluZSBWNExfTlRTQ19WQklfTElORVMJMTIKKyNkZWZpbmUgVjRMX1BBTF9WQklfRlJBTUVTSVpFCShWNExfUEFMX1ZCSV9MSU5FUyAqIDE0NDAgKiAyKQorI2RlZmluZSBWNExfTlRTQ19WQklfRlJBTUVTSVpFCShWNExfTlRTQ19WQklfTElORVMgKiAxNDQwICogMikKKworI2RlZmluZSBUVU5FUl9GUkVRX01JTgkJKDQ1MDAwMDAwKQorI2RlZmluZSBUVU5FUl9GUkVRX01BWAkJKDg2MjAwMDAwMCkKKworc3RydWN0IHZiaV9kYXRhIHsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2X2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGF0YQkqdmlkZW87CisJc3RydWN0IGZyb250X2ZhY2UJKmZyb250OworCisJdW5zaWduZWQgaW50CQljb3BpZWQ7CisJdW5zaWduZWQgaW50CQl2Ymlfc2l6ZTsgLyogdGhlIHdob2xlIHNpemUgb2YgdHdvIGZpZWxkcyAqLworCWludCAJCQl1c2VyczsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBydW5uaW5nIGNvbnRleHQgb2YgdGhlIHZpZGVvLCBpdCBpcyB1c2VmdWwgZm9yCisgKiByZXN1bWUoKQorICovCitzdHJ1Y3QgcnVubmluZ19jb250ZXh0IHsKKwl1MzIJCWZyZXE7CQkvKiBWSURJT0NfU19GUkVRVUVOQ1kgKi8KKwlpbnQJCWF1ZGlvX2lkeDsJLyogVklESU9DX1NfVFVORVIgICAgKi8KKwl2NGwyX3N0ZF9pZAl0dm5vcm1pZDsJLyogVklESU9DX1NfU1REICAgICAqLworCWludAkJc2lnX2luZGV4OwkvKiBWSURJT0NfU19JTlBVVCAgKi8KKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHBpeDsJLyogVklESU9DX1NfRk1UICAgKi8KK307CisKK3N0cnVjdCB2aWRlb19kYXRhIHsKKwkvKiB2NGwyIHZpZGVvIGRldmljZSAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UJKnZfZGV2OworCisJLyogdGhlIHdvcmtpbmcgY29udGV4dCAqLworCXN0cnVjdCBydW5uaW5nX2NvbnRleHQJY29udGV4dDsKKworCS8qIGZvciBkYXRhIGNvcHkgKi8KKwlpbnQJCWZpZWxkX2NvdW50OworCisJY2hhcgkJKmRzdDsKKwlpbnQJCWxpbmVzX2NvcGllZDsKKwlpbnQJCXByZXZfbGVmdDsKKworCWludAkJbGluZXNfcGVyX2ZpZWxkOworCWludAkJbGluZXNfc2l6ZTsKKworCS8qIGZvciBjb21tdW5pY2F0aW9uICovCisJdTgJCQllbmRwb2ludF9hZGRyOworCXN0cnVjdCB1cmIgCQkqdXJiX2FycmF5W1NCVUZfTlVNXTsKKwlzdHJ1Y3QgdmJpX2RhdGEJCSp2Ymk7CisJc3RydWN0IHBvc2VpZG9uIAkqcGQ7CisJc3RydWN0IGZyb250X2ZhY2UJKmZyb250OworCisJaW50CQkJaXNfc3RyZWFtaW5nOworCWludAkJCXVzZXJzOworCisJLyogZm9yIGJ1YmJsZSBoYW5kbGVyICovCisJc3RydWN0IHdvcmtfc3RydWN0CWJ1YmJsZV93b3JrOworfTsKKworZW51bSBwY21fc3RyZWFtX3N0YXRlIHsKKwlTVFJFQU1fT0ZGLAorCVNUUkVBTV9PTiwKKwlTVFJFQU1fU1VTUEVORCwKK307CisKKyNkZWZpbmUgQVVESU9fQlVGUyAoMykKKyNkZWZpbmUgQ0FQVFVSRV9TVFJFQU1fRU4gMQorc3RydWN0IHBvc2VpZG9uX2F1ZGlvIHsKKwlzdHJ1Y3QgdXJiCQkqdXJiX2FycmF5W0FVRElPX0JVRlNdOworCXVuc2lnbmVkIGludCAJCWNvcGllZF9wb3NpdGlvbjsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gICAqY2FwdHVyZV9wY21fc3Vic3RyZWFtOworCisJdW5zaWduZWQgaW50IAkJcmN2X3Bvc2l0aW9uOworCXN0cnVjdAlzbmRfY2FyZAkqY2FyZDsKKwlpbnQgCQkJY2FyZF9jbG9zZTsKKworCWludCAJCQl1c2VyczsKKwlpbnQJCQlwbV9zdGF0ZTsKKwllbnVtIHBjbV9zdHJlYW1fc3RhdGUgCWNhcHR1cmVfc3RyZWFtOworfTsKKworc3RydWN0IHJhZGlvX2RhdGEgeworCV9fdTMyCQlmbV9mcmVxOworCWludAkJdXNlcnM7CisJdW5zaWduZWQgaW50CWlzX3JhZGlvX3N0cmVhbWluZzsKKwlpbnQJCXByZV9lbXBoYXNpczsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpmbV9kZXY7Cit9OworCisjZGVmaW5lIERWQl9TQlVGX05VTQkJNAorI2RlZmluZSBEVkJfVVJCX0JVRl9TSVpFCTB4MjAwMAorc3RydWN0IHBkX2R2Yl9hZGFwdGVyIHsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIJZHZiX2FkYXA7CisJc3RydWN0IGR2Yl9mcm9udGVuZAlkdmJfZmU7CisJc3RydWN0IGRteGRldgkJZG14ZGV2OworCXN0cnVjdCBkdmJfZGVtdXgJZGVtdXg7CisKKwlhdG9taWNfdAkJdXNlcnM7CisJYXRvbWljX3QJCWFjdGl2ZV9mZWVkOworCisJLyogZGF0YSB0cmFuc2ZlciAqLworCXMzMgkJCWlzX3N0cmVhbWluZzsKKwlzdHJ1Y3QgdXJiCQkqdXJiX2FycmF5W0RWQl9TQlVGX05VTV07CisJc3RydWN0IHBvc2VpZG9uCQkqcGRfZGV2aWNlOworCXU4CQkJZXBfYWRkcjsKKwl1OAkJCXJlc2VydmVkWzNdOworCisJLyogZGF0YSBmb3IgcG93ZXIgcmVzdW1lKi8KKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgZmVfcGFyYW07CisKKwkvKiBmb3IgY2hhbm5lbCBzY2FubmluZyAqLworCWludAkJcHJldl9mcmVxOworCWludAkJYmFuZHdpZHRoOworCXVuc2lnbmVkIGxvbmcJbGFzdF9qaWZmaWVzOworfTsKKworc3RydWN0IGZyb250X2ZhY2UgeworCS8qIHVzZSB0aGlzIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIFZJREVPIGFuZCBWQkkgKi8KKwllbnVtIHY0bDJfYnVmX3R5cGUJdHlwZTsKKworCS8qIGZvciBob3N0ICovCisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlCXE7CisKKwkvKiB0aGUgYnJpZGdlIGZvciBob3N0IGFuZCBkZXZpY2UgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyCSpjdXJyX2ZyYW1lOworCisJLyogZm9yIGRldmljZSAqLworCXNwaW5sb2NrX3QJCXF1ZXVlX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlhY3RpdmU7CisJc3RydWN0IHBvc2VpZG9uCQkqcGQ7Cit9OworCitzdHJ1Y3QgcG9zZWlkb24geworCXN0cnVjdCBsaXN0X2hlYWQJZGV2aWNlX2xpc3Q7CisKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CisJc3RydWN0IGtyZWYJCWtyZWY7CisKKwkvKiBmb3IgVjRMMiAqLworCXN0cnVjdCB2NGwyX2RldmljZQl2NGwyX2RldjsKKworCS8qIGhhcmR3YXJlIGluZm8gKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOworCWludCAJCQljdXJfdHJhbnNmZXJfbW9kZTsKKworCXN0cnVjdCB2aWRlb19kYXRhCXZpZGVvX2RhdGE7CS8qIHZpZGVvICovCisJc3RydWN0IHZiaV9kYXRhCQl2YmlfZGF0YTsJLyogdmJpCSAqLworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbwlhdWRpbzsJCS8qIGF1ZGlvIChhbHNhKSAqLworCXN0cnVjdCByYWRpb19kYXRhCXJhZGlvX2RhdGE7CS8qIEZNCSAqLworCXN0cnVjdCBwZF9kdmJfYWRhcHRlcglkdmJfZGF0YTsJLyogRFZCCSAqLworCisJdTMyCQkJc3RhdGU7CisJc3RydWN0IGZpbGUJCSpmaWxlX2Zvcl9zdHJlYW07IC8qIHRoZSBhY3RpdmUgc3RyZWFtKi8KKworI2lmZGVmIENPTkZJR19QTQorCWludCAoKnBtX3N1c3BlbmQpKHN0cnVjdCBwb3NlaWRvbiAqKTsKKwlpbnQgKCpwbV9yZXN1bWUpKHN0cnVjdCBwb3NlaWRvbiAqKTsKKwlwbV9tZXNzYWdlX3QJCW1zZzsKKworCXN0cnVjdCB3b3JrX3N0cnVjdAlwbV93b3JrOworCXU4CQkJcG9ydG51bTsKKyNlbmRpZgorfTsKKworc3RydWN0IHBvc2VpZG9uX2Zvcm1hdCB7CisJY2hhciAJKm5hbWU7CisJaW50CWZvdXJjYzsJCSAvKiB2aWRlbzRsaW51eCAyCSAgKi8KKwlpbnQJZGVwdGg7CQkgLyogYml0L3BpeGVsCQkgICovCisJaW50CWZsYWdzOworfTsKKworc3RydWN0IHBvc2VpZG9uX3R2bm9ybSB7CisJdjRsMl9zdGRfaWQJdjRsMl9pZDsKKwljaGFyCQluYW1lWzEyXTsKKwl1MzIJCXRsZ190dm5vcm07Cit9OworCisvKiB2aWRlbyAqLworaW50IHBkX3ZpZGVvX2luaXQoc3RydWN0IHBvc2VpZG9uICopOwordm9pZCBwZF92aWRlb19leGl0KHN0cnVjdCBwb3NlaWRvbiAqKTsKK2ludCBzdG9wX2FsbF92aWRlb19zdHJlYW0oc3RydWN0IHBvc2VpZG9uICopOworCisvKiBhbHNhIGF1ZGlvICovCitpbnQgcG9zZWlkb25fYXVkaW9faW5pdChzdHJ1Y3QgcG9zZWlkb24gKik7CitpbnQgcG9zZWlkb25fYXVkaW9fZnJlZShzdHJ1Y3QgcG9zZWlkb24gKik7CisjaWZkZWYgQ09ORklHX1BNCitpbnQgcG1fYWxzYV9zdXNwZW5kKHN0cnVjdCBwb3NlaWRvbiAqKTsKK2ludCBwbV9hbHNhX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKik7CisjZW5kaWYKKworLyogZHZiICovCitpbnQgcGRfZHZiX3VzYl9kZXZpY2VfaW5pdChzdHJ1Y3QgcG9zZWlkb24gKik7Cit2b2lkIHBkX2R2Yl91c2JfZGV2aWNlX2V4aXQoc3RydWN0IHBvc2VpZG9uICopOwordm9pZCBwZF9kdmJfdXNiX2RldmljZV9jbGVhbnVwKHN0cnVjdCBwb3NlaWRvbiAqKTsKK2ludCBwZF9kdmJfZ2V0X2FkYXB0ZXJfbnVtKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqKTsKK3ZvaWQgZHZiX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqKTsKKworLyogRk0gKi8KK2ludCBwb3NlaWRvbl9mbV9pbml0KHN0cnVjdCBwb3NlaWRvbiAqKTsKK2ludCBwb3NlaWRvbl9mbV9leGl0KHN0cnVjdCBwb3NlaWRvbiAqKTsKK3N0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXZfaW5pdChzdHJ1Y3QgcG9zZWlkb24gKiwgc3RydWN0IHZpZGVvX2RldmljZSAqKTsKKworLyogdmVuZG9yIGNvbW1hbmQgb3BzICovCitpbnQgc2VuZF9zZXRfcmVxKHN0cnVjdCBwb3NlaWRvbiosIHU4LCBzMzIsIHMzMiopOworaW50IHNlbmRfZ2V0X3JlcShzdHJ1Y3QgcG9zZWlkb24qLCB1OCwgczMyLCB2b2lkKiwgczMyKiwgczMyKTsKK3MzMiBzZXRfdHVuZXJfbW9kZShzdHJ1Y3QgcG9zZWlkb24qLCB1bnNpZ25lZCBjaGFyKTsKKworLyogYnVsayB1cmIgYWxsb2MvZnJlZSAqLworaW50IGFsbG9jX2J1bGtfdXJic19nZW5lcmljKHN0cnVjdCB1cmIgKip1cmJfYXJyYXksIGludCBudW0sCisJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggZXBfYWRkciwKKwkJCWludCBidWZfc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLAorCQkJdXNiX2NvbXBsZXRlX3QgY29tcGxldGVfZm4sIHZvaWQgKmNvbnRleHQpOwordm9pZCBmcmVlX2FsbF91cmJfZ2VuZXJpYyhzdHJ1Y3QgdXJiICoqdXJiX2FycmF5LCBpbnQgbnVtKTsKKworLyogbWlzYyAqLwordm9pZCBwb3NlaWRvbl9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpOwordm9pZCBkZXN0cm95X3ZpZGVvX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICoqdl9kZXYpOworZXh0ZXJuIGludCBkZWJ1Z19tb2RlOwordm9pZCBzZXRfZGVidWdfbW9kZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsIGludCBkZWJ1Z19tb2RlKTsKKworI2lmZGVmIENPTkZJR19QTQorI2RlZmluZSBpbl9oaWJlcm5hdGlvbihwZCkgKHBkLT5tc2cuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKQorI2Vsc2UKKyNkZWZpbmUgaW5faGliZXJuYXRpb24ocGQpICgwKQorI2VuZGlmCisjZGVmaW5lIGdldF9wbV9jb3VudChwKSAoYXRvbWljX3JlYWQoJihwKS0+aW50ZXJmYWNlLT5wbV91c2FnZV9jbnQpKQorCisjZGVmaW5lIGxvZyhhLCAuLi4pIHByaW50ayhLRVJOX0RFQlVHICJcdFsgJXMgOiAlLjNkIF0gImEiXG4iLCBcCisJCQkJX19mdW5jX18sIF9fTElORV9fLCAgIyMgX19WQV9BUkdTX18pCisKKy8qIGZvciBwb3dlciBtYW5hZ2VtZW50ICovCisjZGVmaW5lIGxvZ3BtKHBkKSBkbyB7XAorCQkJaWYgKGRlYnVnX21vZGUgJiAweDEwKVwKKwkJCQlsb2coKTtcCisJCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgbG9ncyhmKSBkbyB7IFwKKwkJCWlmICgoZGVidWdfbW9kZSAmIDB4NCkgJiYgXAorCQkJCShmKS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSBcCisJCQkJCWxvZygidHlwZSA6IFZCSSIpO1wKKwkJCQkJCQkJXAorCQkJaWYgKChkZWJ1Z19tb2RlICYgMHg4KSAmJiBcCisJCQkJKGYpLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgXAorCQkJCQlsb2coInR5cGUgOiBWSURFTyIpO1wKKwkJfSB3aGlsZSAoMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWR2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMzNhZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtZHZiLmMKQEAgLTAsMCArMSw1OTMgQEAKKyNpbmNsdWRlICJwZC1jb21tb24uaCIKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9kdmIvZG14Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgInZlbmRvcmNtZHMuaCIKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RhdGljIHZvaWQgZHZiX3VyYl9jbGVhbnVwKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKTsKKworc3RhdGljIGludCBkdmJfYmFuZHdpZHRoW11bMl0gPSB7CisJeyBUTEdfQldfOCwgQkFORFdJRFRIXzhfTUhaIH0sCisJeyBUTEdfQldfNywgQkFORFdJRFRIXzdfTUhaIH0sCisJeyBUTEdfQldfNiwgQkFORFdJRFRIXzZfTUhaIH0KK307CitzdGF0aWMgaW50IGR2Yl9iYW5kd2lkdGhfbGVuZ3RoID0gQVJSQVlfU0laRShkdmJfYmFuZHdpZHRoKTsKKworc3RhdGljIHMzMiBkdmJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKTsKK3N0YXRpYyBpbnQgcG9zZWlkb25fY2hlY2tfbW9kZV9kdmJ0KHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXMgPSAwOworCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KEhaLzQpOworCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UocGQtPnVkZXYsIDAsIEJVTEtfQUxURVJOQVRFX0lGQUNFKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzZXRfdHVuZXJfbW9kZShwZCwgVExHX01PREVfQ0FQU19EVkJfVCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNpZ25hbCBzb3VyY2UgKi8KKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFNHTkxfU1JDX1NFTCwgVExHX1NJR19TUkNfQU5URU5OQSwgJmNtZF9zdGF0dXMpOworCWlmIChyZXR8Y21kX3N0YXR1cykKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCisvKiBhY3F1aXJlIDoKKyAqIAkxID09IG9wZW4KKyAqIAkwID09IHJlbGVhc2UKKyAqLworc3RhdGljIGludCBwb3NlaWRvbl90c19idXNfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGFjcXVpcmUpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiOworCWludCByZXQgPSAwOworCisJaWYgKCFwZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwZF9kdmIgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBwZF9kdmJfYWRhcHRlciwgZHZiX2ZlKTsKKwlpZiAoYWNxdWlyZSkgeworCQltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJCWlmIChwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBvcGVuX291dDsKKwkJfQorCisJCWlmIChwZC0+c3RhdGUgJiYgIShwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9EVkJUKSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBvcGVuX291dDsKKwkJfQorCisJCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwkJaWYgKDAgPT0gcGQtPnN0YXRlKSB7CisJCQlyZXQgPSBwb3NlaWRvbl9jaGVja19tb2RlX2R2YnQocGQpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7CisJCQkJZ290byBvcGVuX291dDsKKwkJCX0KKwkJCXBkLT5zdGF0ZSB8PSBQT1NFSURPTl9TVEFURV9EVkJUOworCQkJcGRfZHZiLT5iYW5kd2lkdGggPSAwOworCQkJcGRfZHZiLT5wcmV2X2ZyZXEgPSAwOworCQl9CisJCWF0b21pY19pbmMoJnBkX2R2Yi0+dXNlcnMpOworCQlrcmVmX2dldCgmcGQtPmtyZWYpOworb3Blbl9vdXQ6CisJCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCX0gZWxzZSB7CisJCWR2Yl9zdG9wX3N0cmVhbWluZyhwZF9kdmIpOworCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwZF9kdmItPnVzZXJzKSkgeworCQkJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCQkJcGQtPnN0YXRlICY9IH5QT1NFSURPTl9TVEFURV9EVkJUOworCQkJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJCX0KKwkJa3JlZl9wdXQoJnBkLT5rcmVmLCBwb3NlaWRvbl9kZWxldGUpOworCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBvc2VpZG9uX2ZlX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisjaWZkZWYgQ09ORklHX1BNCisJcGQtPnBtX3N1c3BlbmQgPSBOVUxMOworCXBkLT5wbV9yZXN1bWUgID0gTlVMTDsKKyNlbmRpZgorfQorCitzdGF0aWMgczMyIHBvc2VpZG9uX2ZlX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXJldHVybiAwOworfQorCisvKgorICogcmV0dXJuIHRydWUgaWYgd2UgY2FuIHNhdGlzZnkgdGhlIGNvbmRpdGlvbnMsIGVsc2UgcmV0dXJuIGZhbHNlLgorICovCitzdGF0aWMgYm9vbCBjaGVja19zY2FuX29rKF9fdTMyIGZyZXEsIGludCBiYW5kd2lkdGgsCisJCQlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGJhbmR3aWR0aCA8IDApCisJCXJldHVybiBmYWxzZTsKKworCWlmIChhZGFwdGVyLT5wcmV2X2ZyZXEgPT0gZnJlcQorCQkmJiBhZGFwdGVyLT5iYW5kd2lkdGggPT0gYmFuZHdpZHRoKSB7CisJCWxvbmcgbmwgPSBqaWZmaWVzIC0gYWRhcHRlci0+bGFzdF9qaWZmaWVzOworCQl1bnNpZ25lZCBpbnQgbXNlYyA7CisKKwkJbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoYWJzKG5sKSk7CisJCXJldHVybiBtc2VjID4gMTUwMDAgPyB0cnVlIDogZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIGZpcm13YXJlIGRlbGF5cyB0b28gbG9uZyBmb3IgYW4gaW52YWxpZCBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyBpbnQgZndfZGVsYXlfb3ZlcmZsb3coc3RydWN0IHBkX2R2Yl9hZGFwdGVyICphZGFwdGVyKQoreworCWxvbmcgbmwgPSBqaWZmaWVzIC0gYWRhcHRlci0+bGFzdF9qaWZmaWVzOworCXVuc2lnbmVkIGludCBtc2VjIDsKKworCW1zZWMgPSBqaWZmaWVzX3RvX21zZWNzKGFicyhubCkpOworCXJldHVybiBtc2VjID4gODAwID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3NldF9mZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQoreworCXMzMiByZXQgPSAwLCBjbWRfc3RhdHVzID0gMDsKKwlzMzIgaSwgYmFuZHdpZHRoID0gLTE7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKworCWlmIChpbl9oaWJlcm5hdGlvbihwZCkpCisJCXJldHVybiAtRUJVU1k7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IGR2Yl9iYW5kd2lkdGhfbGVuZ3RoOyBpKyspCisJCWlmIChmZXAtPnUub2ZkbS5iYW5kd2lkdGggPT0gZHZiX2JhbmR3aWR0aFtpXVsxXSkKKwkJCWJhbmR3aWR0aCA9IGR2Yl9iYW5kd2lkdGhbaV1bMF07CisKKwlpZiAoY2hlY2tfc2Nhbl9vayhmZXAtPmZyZXF1ZW5jeSwgYmFuZHdpZHRoLCBwZF9kdmIpKSB7CisJCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVFVORV9GUkVRX1NFTEVDVCwKKwkJCQkJZmVwLT5mcmVxdWVuY3kgLyAxMDAwLCAmY21kX3N0YXR1cyk7CisJCWlmIChyZXQgfCBjbWRfc3RhdHVzKSB7CisJCQlsb2coImVycm9yIGxpbmUiKTsKKwkJCWdvdG8gZnJvbnRfb3V0OworCQl9CisKKwkJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBEVkJUX0JBTkRXX1NFTCwKKwkJCQkJCWJhbmR3aWR0aCwgJmNtZF9zdGF0dXMpOworCQlpZiAocmV0IHwgY21kX3N0YXR1cykgeworCQkJbG9nKCJlcnJvciBsaW5lIik7CisJCQlnb3RvIGZyb250X291dDsKKwkJfQorCisJCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7CisJCWlmIChyZXQgfCBjbWRfc3RhdHVzKSB7CisJCQlsb2coImVycm9yIGxpbmUiKTsKKwkJCWdvdG8gZnJvbnRfb3V0OworCQl9CisKKwkJLyogc2F2ZSB0aGUgY29udGV4dCBmb3IgZnV0dXJlICovCisJCW1lbWNweSgmcGRfZHZiLT5mZV9wYXJhbSwgZmVwLCBzaXplb2YoKmZlcCkpOworCQlwZF9kdmItPmJhbmR3aWR0aCA9IGJhbmR3aWR0aDsKKwkJcGRfZHZiLT5wcmV2X2ZyZXEgPSBmZXAtPmZyZXF1ZW5jeTsKKwkJcGRfZHZiLT5sYXN0X2ppZmZpZXMgPSBqaWZmaWVzOworCX0KK2Zyb250X291dDoKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBtX2R2Yl9zdXNwZW5kKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCWR2Yl9zdG9wX3N0cmVhbWluZyhwZF9kdmIpOworCWR2Yl91cmJfY2xlYW51cChwZF9kdmIpOworCW1zbGVlcCg1MDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtX2R2Yl9yZXN1bWUoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7CisKKwlwb3NlaWRvbl9jaGVja19tb2RlX2R2YnQocGQpOworCW1zbGVlcCgzMDApOworCXBvc2VpZG9uX3NldF9mZSgmcGRfZHZiLT5kdmJfZmUsICZwZF9kdmItPmZlX3BhcmFtKTsKKworCWR2Yl9zdGFydF9zdHJlYW1pbmcocGRfZHZiKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgczMyIHBvc2VpZG9uX2ZlX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKworI2lmZGVmIENPTkZJR19QTQorCXBkLT5wbV9zdXNwZW5kID0gcG1fZHZiX3N1c3BlbmQ7CisJcGQtPnBtX3Jlc3VtZSAgPSBwbV9kdmJfcmVzdW1lOworI2VuZGlmCisJbWVtc2V0KCZwZF9kdmItPmZlX3BhcmFtLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX2dldF9mZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7CisKKwltZW1jcHkoZmVwLCAmcGRfZHZiLT5mZV9wYXJhbSwgc2l6ZW9mKCpmZXApKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9mZV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCit7CisJdHVuZS0+bWluX2RlbGF5X21zID0gMTAwMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXQpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXMzMiByZXQgPSAtMSwgY21kX3N0YXR1czsKKwlzdHJ1Y3QgdHVuZXJfZHR2X3NpZ19zdGF0X3Mgc3RhdHVzID0ge307CisKKwlpZiAoaW5faGliZXJuYXRpb24ocGQpKQorCQlyZXR1cm4gLUVCVVNZOworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKworCXJldCA9IHNlbmRfZ2V0X3JlcShwZCwgVFVORVJfU1RBVFVTLCBUTEdfTU9ERV9EVkJfVCwKKwkJCQkmc3RhdHVzLCAmY21kX3N0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCWlmIChyZXQgfCBjbWRfc3RhdHVzKSB7CisJCWxvZygiZ2V0IHR1bmVyIHN0YXR1cyBlcnJvciIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGVidWdfbW9kZSkKKwkJbG9nKCJQIDogJWQsIEwgJWQsIExCIDolZCIsIHN0YXR1cy5zaWdfcHJlc2VudCwKKwkJCXN0YXR1cy5zaWdfbG9ja2VkLCBzdGF0dXMuc2lnX2xvY2tfYnVzeSk7CisKKwlpZiAoc3RhdHVzLnNpZ19sb2NrX2J1c3kpIHsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChzdGF0dXMuc2lnX3ByZXNlbnQgfHwgc3RhdHVzLnNpZ19sb2NrZWQpIHsKKwkJKnN0YXQgfD0gRkVfSEFTX0xPQ0sgfCBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVIKKwkJCQl8IEZFX0hBU19TWU5DIHwgRkVfSEFTX1ZJVEVSQkk7CisJfSBlbHNlIHsKKwkJaWYgKGZ3X2RlbGF5X292ZXJmbG93KCZwZC0+ZHZiX2RhdGEpKQorCQkJKnN0YXQgfD0gRkVfVElNRURPVVQ7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgdHVuZXJfYmVyX3JhdGVfcyB0bGdfYmVyID0ge307CisJczMyIHJldCA9IC0xLCBjbWRfc3RhdHVzOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXJldCA9IHNlbmRfZ2V0X3JlcShwZCwgVFVORVJfQkVSX1JBVEUsIDAsCisJCQkJJnRsZ19iZXIsICZjbWRfc3RhdHVzLCBzaXplb2YodGxnX2JlcikpOworCWlmIChyZXQgfCBjbWRfc3RhdHVzKQorCQlnb3RvIG91dDsKKwkqYmVyID0gdGxnX2Jlci5iZXJfcmF0ZTsKK291dDoKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgczMyIHBvc2VpZG9uX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgdHVuZXJfZHR2X3NpZ19zdGF0X3Mgc3RhdHVzID0ge307CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXM7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0RWQl9ULAorCQkJCSZzdGF0dXMsICZjbWRfc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWYgKHJldCB8IGNtZF9zdGF0dXMpCisJCWdvdG8gb3V0OworCWlmICgoc3RhdHVzLnNpZ19wcmVzZW50IHx8IHN0YXR1cy5zaWdfbG9ja2VkKSAmJiAhc3RhdHVzLnNpZ19zdHJlbmd0aCkKKwkJKnN0cmVuZ3RoID0gMHhGRkZGOworCWVsc2UKKwkJKnN0cmVuZ3RoID0gc3RhdHVzLnNpZ19zdHJlbmd0aDsKK291dDoKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9yZWFkX3VuY19ibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdW5jKQoreworCSp1bmMgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgcG9zZWlkb25fZnJvbnRlbmRfb3BzID0geworCS5pbmZvID0geworCQkubmFtZQkJPSAiUG9zZWlkb24gRFZCLVQiLAorCQkudHlwZQkJPSBGRV9PRkRNLAorCQkuZnJlcXVlbmN5X21pbgk9IDE3NDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggID0gODYyMDAwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplCSAgPSA2MjUwMCwvKiBGSVhNRSAqLworCQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8CisJCQlGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkJRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUVBTSyB8IEZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzY0IHwKKwkJCUZFX0NBTl9RQU1fQVVUTyB8IEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwKKwkJCUZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwKKwkJCUZFX0NBTl9SRUNPVkVSIHwKKwkJCUZFX0NBTl9ISUVSQVJDSFlfQVVUTywKKwl9LAorCisJLnJlbGVhc2UgPSBwb3NlaWRvbl9mZV9yZWxlYXNlLAorCisJLmluaXQgPSBwb3NlaWRvbl9mZV9pbml0LAorCS5zbGVlcCA9IHBvc2VpZG9uX2ZlX3NsZWVwLAorCisJLnNldF9mcm9udGVuZCA9IHBvc2VpZG9uX3NldF9mZSwKKwkuZ2V0X2Zyb250ZW5kID0gcG9zZWlkb25fZ2V0X2ZlLAorCS5nZXRfdHVuZV9zZXR0aW5ncyA9IHBvc2VpZG9uX2ZlX2dldF90dW5lX3NldHRpbmdzLAorCisJLnJlYWRfc3RhdHVzCT0gcG9zZWlkb25fcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyCT0gcG9zZWlkb25fcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gcG9zZWlkb25fcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yCT0gcG9zZWlkb25fcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MJPSBwb3NlaWRvbl9yZWFkX3VuY19ibG9ja3MsCisKKwkudHNfYnVzX2N0cmwgPSBwb3NlaWRvbl90c19idXNfY3RybCwKK307CisKK3N0YXRpYyB2b2lkIGR2Yl91cmJfaXJxKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9IHVyYi0+Y29udGV4dDsKKwlpbnQgbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gJnBkX2R2Yi0+ZGVtdXg7CisJczMyIHJldDsKKworCWlmICghcGRfZHZiLT5pc19zdHJlYW1pbmcgfHwgdXJiLT5zdGF0dXMpIHsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FUFJPVE8pCisJCQlnb3RvIHJlc2VuZDsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gbGVuKQorCQlkdmJfZG14X3N3ZmlsdGVyKGRlbXV4LCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgbGVuKTsKKwllbHNlIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gbGVuIC0gNCkgeworCQlpbnQgb2Zmc2V0OworCQl1OCAqYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkJLyoKKwkJICogVGhlIHBhY2tldCBzaXplIGlzIDUxMiwKKwkJICogbGFzdCBwYWNrZXQgY29udGFpbnMgNDU2IGJ5dGVzIHRzcCBkYXRhCisJCSAqLworCQlmb3IgKG9mZnNldCA9IDQ1Njsgb2Zmc2V0IDwgbGVuOyBvZmZzZXQgKz0gNTEyKSB7CisJCQlpZiAoIXN0cm5jbXAoYnVmICsgb2Zmc2V0LCAiRFZIUyIsIDQpKSB7CisJCQkJZHZiX2RteF9zd2ZpbHRlcihkZW11eCwgYnVmLCBvZmZzZXQpOworCQkJCWlmIChsZW4gPiBvZmZzZXQgKyA1MiArIDQpIHsKKwkJCQkJLyoxNiBieXRlcyB0cmFpbGVyICsgMzYgYnl0ZXMgcGFkZGluZyAqLworCQkJCQlidWYgKz0gb2Zmc2V0ICsgNTI7CisJCQkJCWxlbiAtPSBvZmZzZXQgKyA1MiArIDQ7CisJCQkJCWR2Yl9kbXhfc3dmaWx0ZXIoZGVtdXgsIGJ1ZiwgbGVuKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKK3Jlc2VuZDoKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpCisJCWxvZygiIHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOworfQorCitzdGF0aWMgaW50IGR2Yl91cmJfaW5pdChzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YikKK3sKKwlpZiAocGRfZHZiLT51cmJfYXJyYXlbMF0pCisJCXJldHVybiAwOworCisJYWxsb2NfYnVsa191cmJzX2dlbmVyaWMocGRfZHZiLT51cmJfYXJyYXksIERWQl9TQlVGX05VTSwKKwkJCXBkX2R2Yi0+cGRfZGV2aWNlLT51ZGV2LCBwZF9kdmItPmVwX2FkZHIsCisJCQlEVkJfVVJCX0JVRl9TSVpFLCBHRlBfS0VSTkVMLAorCQkJZHZiX3VyYl9pcnEsIHBkX2R2Yik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR2Yl91cmJfY2xlYW51cChzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YikKK3sKKwlmcmVlX2FsbF91cmJfZ2VuZXJpYyhwZF9kdmItPnVyYl9hcnJheSwgRFZCX1NCVUZfTlVNKTsKK30KKworc3RhdGljIHMzMiBkdmJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBwZF9kdmItPnBkX2RldmljZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlpZiAoIXBkX2R2Yi0+aXNfc3RyZWFtaW5nKSB7CisJCXMzMiBpLCBjbWRfc3RhdHVzID0gMDsKKwkJLyoKKwkJICogT25jZSB1cG9uIGEgdGltZSwgdGhlcmUgd2FzIGEgZGlmZmljdWx0IGJ1ZyBseWluZyBoZXJlLgorCQkgKiByZXQgPSBzZW5kX3NldF9yZXEocGQsIFRBS0VfUkVRVUVTVCwgMCwgJmNtZF9zdGF0dXMpOworCQkgKi8KKworCQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFBMQVlfU0VSVklDRSwgMSwgJmNtZF9zdGF0dXMpOworCQlpZiAocmV0IHwgY21kX3N0YXR1cykKKwkJCWdvdG8gb3V0OworCisJCXJldCA9IGR2Yl91cmJfaW5pdChwZF9kdmIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCXBkX2R2Yi0+aXNfc3RyZWFtaW5nID0gMTsKKwkJZm9yIChpID0gMDsgaSA8IERWQl9TQlVGX05VTTsgaSsrKSB7CisJCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihwZF9kdmItPnVyYl9hcnJheVtpXSwKKwkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlsb2coIiBzdWJtaXQgdXJiIGVycm9yICVkIiwgcmV0KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCX0KK291dDoKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGR2Yl9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YikKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gcGRfZHZiLT5wZF9kZXZpY2U7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJaWYgKHBkX2R2Yi0+aXNfc3RyZWFtaW5nKSB7CisJCXMzMiBpLCByZXQsIGNtZF9zdGF0dXMgPSAwOworCisJCXBkX2R2Yi0+aXNfc3RyZWFtaW5nID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgRFZCX1NCVUZfTlVNOyBpKyspCisJCQlpZiAocGRfZHZiLT51cmJfYXJyYXlbaV0pCisJCQkJdXNiX2tpbGxfdXJiKHBkX2R2Yi0+dXJiX2FycmF5W2ldKTsKKworCQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFBMQVlfU0VSVklDRSwgVExHX1RVTkVfUExBWV9TVkNfU1RPUCwKKwkJCQkJJmNtZF9zdGF0dXMpOworCQlpZiAocmV0IHwgY21kX3N0YXR1cykKKwkJCWxvZygiZXJyb3IiKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgcGRfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSBmZWVkLT5kZW11eC0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghcGRfZHZiKQorCQlyZXR1cm4gLTE7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwZF9kdmItPmFjdGl2ZV9mZWVkKSA9PSAxKQorCQlyZXQgPSBkdmJfc3RhcnRfc3RyZWFtaW5nKHBkX2R2Yik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwZF9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gZmVlZC0+ZGVtdXgtPnByaXY7CisKKwlpZiAoIXBkX2R2YikKKwkJcmV0dXJuIC0xOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwZF9kdmItPmFjdGl2ZV9mZWVkKSkKKwkJZHZiX3N0b3Bfc3RyZWFtaW5nKHBkX2R2Yik7CisJcmV0dXJuIDA7Cit9CisKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworaW50IHBkX2R2Yl91c2JfZGV2aWNlX2luaXQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXg7CisJaW50IHJldCA9IDA7CisKKwlwZF9kdmItPmVwX2FkZHIgPSAweDgyOworCWF0b21pY19zZXQoJnBkX2R2Yi0+dXNlcnMsIDApOworCWF0b21pY19zZXQoJnBkX2R2Yi0+YWN0aXZlX2ZlZWQsIDApOworCXBkX2R2Yi0+cGRfZGV2aWNlID0gcGQ7CisKKwlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmcGRfZHZiLT5kdmJfYWRhcCwKKwkJCQkiUG9zZWlkb24gZHZidCBhZGFwdGVyIiwKKwkJCQlUSElTX01PRFVMRSwKKwkJCQlOVUxMIC8qIGZvciBoaWJlcm5hdGlvbiBjb3JyZWN0bHkqLywKKwkJCQlhZGFwdGVyX25yKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjE7CisKKwkvKiByZWdpc3RlciBmcm9udGVuZCAqLworCXBkX2R2Yi0+ZHZiX2ZlLmRlbW9kdWxhdG9yX3ByaXYgPSBwZDsKKwltZW1jcHkoJnBkX2R2Yi0+ZHZiX2ZlLm9wcywgJnBvc2VpZG9uX2Zyb250ZW5kX29wcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXJldCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmcGRfZHZiLT5kdmJfYWRhcCwgJnBkX2R2Yi0+ZHZiX2ZlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjI7CisKKwkvKiByZWdpc3RlciBkZW11eCBkZXZpY2UgKi8KKwlkdmJkZW11eCA9ICZwZF9kdmItPmRlbXV4OworCWR2YmRlbXV4LT5kbXguY2FwYWJpbGl0aWVzID0gRE1YX1RTX0ZJTFRFUklORyB8IERNWF9TRUNUSU9OX0ZJTFRFUklORzsKKwlkdmJkZW11eC0+cHJpdiA9IHBkX2R2YjsKKwlkdmJkZW11eC0+ZmVlZG51bSA9IGR2YmRlbXV4LT5maWx0ZXJudW0gPSA2NDsKKwlkdmJkZW11eC0+c3RhcnRfZmVlZCA9IHBkX3N0YXJ0X2ZlZWQ7CisJZHZiZGVtdXgtPnN0b3BfZmVlZCA9IHBkX3N0b3BfZmVlZDsKKwlkdmJkZW11eC0+d3JpdGVfdG9fZGVjb2RlciA9IE5VTEw7CisKKwlyZXQgPSBkdmJfZG14X2luaXQoZHZiZGVtdXgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yMzsKKworCXBkX2R2Yi0+ZG14ZGV2LmZpbHRlcm51bSA9IHBkX2R2Yi0+ZGVtdXguZmlsdGVybnVtOworCXBkX2R2Yi0+ZG14ZGV2LmRlbXV4ID0gJnBkX2R2Yi0+ZGVtdXguZG14OworCXBkX2R2Yi0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7CisKKwlyZXQgPSBkdmJfZG14ZGV2X2luaXQoJnBkX2R2Yi0+ZG14ZGV2LCAmcGRfZHZiLT5kdmJfYWRhcCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3IzOworCXJldHVybiAwOworCitlcnJvcjM6CisJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoJnBkX2R2Yi0+ZHZiX2ZlKTsKK2Vycm9yMjoKKwlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZwZF9kdmItPmR2Yl9hZGFwKTsKK2Vycm9yMToKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHBkX2R2Yl91c2JfZGV2aWNlX2V4aXQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7CisKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnBkX2R2Yi0+dXNlcnMpICE9IDAKKwkJfHwgYXRvbWljX3JlYWQoJnBkX2R2Yi0+YWN0aXZlX2ZlZWQpICE9IDApIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dChIWik7CisJfQorCWR2Yl9kbXhkZXZfcmVsZWFzZSgmcGRfZHZiLT5kbXhkZXYpOworCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKCZwZF9kdmItPmR2Yl9mZSk7CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmcGRfZHZiLT5kdmJfYWRhcCk7CisJcGRfZHZiX3VzYl9kZXZpY2VfY2xlYW51cChwZCk7Cit9CisKK3ZvaWQgcGRfZHZiX3VzYl9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKworCWR2Yl91cmJfY2xlYW51cChwZF9kdmIpOworfQorCitpbnQgcGRfZHZiX2dldF9hZGFwdGVyX251bShzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YikKK3sKKwlyZXR1cm4gcGRfZHZiLT5kdmJfYWRhcC5udW07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtbWFpbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLW1haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2YwZWJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLW1haW4uYwpAQCAtMCwwICsxLDUzOSBAQAorLyoKKyAqIGRldmljZSBkcml2ZXIgZm9yIFRlbGVnZW50IHRsZzIzMDAgYmFzZWQgVFYgY2FyZHMKKyAqCisgKiBBdXRob3IgOgorICogCUthbmcgWW9uZwk8a2FuZ3lvbmdAdGVsZWdlbnQuY29tPgorICogCVpoYW5nIFhpYW9iaW5nCTx4YnpoYW5nQHRlbGVnZW50LmNvbT4KKyAqIAlIdWFuZyBTaGlqaWUJPHp5emlpaUB0ZWxlZ2VudC5jb20+IG9yIDxzaGlqaWU4QGdtYWlsLmNvbT4KKyAqCisgKgkoYykgMjAwOSBUZWxlZ2VudCBTeXN0ZW1zCisgKgkoYykgMjAxMCBUZWxlZ2VudCBTeXN0ZW1zCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9xdWlya3MuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorCisjaW5jbHVkZSAidmVuZG9yY21kcy5oIgorI2luY2x1ZGUgInBkLWNvbW1vbi5oIgorCisjZGVmaW5lIFZFTkRPUl9JRAkweDFCMjQKKyNkZWZpbmUgUFJPRFVDVF9JRAkweDQwMDEKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVkVORE9SX0lELCBQUk9EVUNUX0lELCAyNTUsIDEsIDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhWRU5ET1JfSUQsIFBST0RVQ1RfSUQsIDI1NSwgMSwgMSkgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworaW50IGRlYnVnX21vZGU7Cittb2R1bGVfcGFyYW0oZGVidWdfbW9kZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfbW9kZSwgIjAgPSBkaXNhYmxlLCAxID0gZW5hYmxlLCAyID0gdmVyYm9zZSIpOworCitjb25zdCBjaGFyICpmaXJtd2FyZV9uYW1lID0gInRsZzIzMDBfZmlybXdhcmUuYmluIjsKK3N0cnVjdCB1c2JfZHJpdmVyIHBvc2VpZG9uX2RyaXZlcjsKK3N0YXRpYyBMSVNUX0hFQUQocGRfZGV2aWNlX2xpc3QpOworCisvKgorICogc2VuZCBzZXQgcmVxdWVzdCB0byBVU0IgZmlybXdhcmUuCisgKi8KK3MzMiBzZW5kX3NldF9yZXEoc3RydWN0IHBvc2VpZG9uICpwZCwgdTggY21kaWQsIHMzMiBwYXJhbSwgczMyICpjbWRfc3RhdHVzKQoreworCXMzMiByZXQ7CisJczggIGRhdGFbMzJdID0ge307CisJdTE2IGxvd2VyXzE2LCB1cHBlcl8xNjsKKworCWlmIChwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1kZWxheSgzMCk7CisKKwlpZiAocGFyYW0gPT0gMCkgeworCQl1cHBlcl8xNiA9IGxvd2VyXzE2ID0gMDsKKwl9IGVsc2UgeworCQkvKiBzZW5kIDMyIGJpdCBwYXJhbSBhcyAgdHdvIDE2IGJpdCBwYXJhbSxsaXR0bGUgZW5kaWFuICovCisJCWxvd2VyXzE2ID0gKHVuc2lnbmVkIHNob3J0KShwYXJhbSAmIDB4ZmZmZik7CisJCXVwcGVyXzE2ID0gKHVuc2lnbmVkIHNob3J0KSgocGFyYW0gPj4gMTYpICYgMHhmZmZmKTsKKwl9CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBkLT51ZGV2LAorCQkJIHVzYl9yY3ZjdHJscGlwZShwZC0+dWRldiwgMCksCisJCQkgUkVRX1NFVF9DTUQgfCBjbWRpZCwKKwkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSBsb3dlcl8xNiwKKwkJCSB1cHBlcl8xNiwKKwkJCSAmZGF0YSwKKwkJCSBzaXplb2YoKmNtZF9zdGF0dXMpLAorCQkJIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKworCWlmICghcmV0KSB7CisJCXJldHVybiAtRU5YSU87CisJfSBlbHNlIHsKKwkJLyogIDFzdCA0IGJ5dGVzIGludG8gY21kX3N0YXR1cyAgICovCisJCW1lbWNweSgoY2hhciAqKWNtZF9zdGF0dXMsICYoZGF0YVswXSksIHNpemVvZigqY21kX3N0YXR1cykpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNlbmQgZ2V0IHJlcXVlc3QgdG8gUG9zZWlkb24gZmlybXdhcmUuCisgKi8KK3MzMiBzZW5kX2dldF9yZXEoc3RydWN0IHBvc2VpZG9uICpwZCwgdTggY21kaWQsIHMzMiBwYXJhbSwKKwkJCXZvaWQgKmJ1ZiwgczMyICpjbWRfc3RhdHVzLCBzMzIgZGF0YWxlbikKK3sKKwlzMzIgcmV0OworCXM4IGRhdGFbMTI4XSA9IHt9OworCXUxNiBsb3dlcl8xNiwgdXBwZXJfMTY7CisKKwlpZiAocGQtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltZGVsYXkoMzApOworCWlmIChwYXJhbSA9PSAwKSB7CisJCXVwcGVyXzE2ID0gbG93ZXJfMTYgPSAwOworCX0gZWxzZSB7CisJCS8qc2VuZCAzMiBiaXQgcGFyYW0gYXMgdHdvIDE2IGJpdCBwYXJhbSwgbGl0dGxlIGVuZGlhbiAqLworCQlsb3dlcl8xNiA9ICh1bnNpZ25lZCBzaG9ydCkocGFyYW0gJiAweGZmZmYpOworCQl1cHBlcl8xNiA9ICh1bnNpZ25lZCBzaG9ydCkoKHBhcmFtID4+IDE2KSAmIDB4ZmZmZik7CisJfQorCXJldCA9IHVzYl9jb250cm9sX21zZyhwZC0+dWRldiwKKwkJCSB1c2JfcmN2Y3RybHBpcGUocGQtPnVkZXYsIDApLAorCQkJIFJFUV9HRVRfQ01EIHwgY21kaWQsCisJCQkgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgbG93ZXJfMTYsCisJCQkgdXBwZXJfMTYsCisJCQkgJmRhdGEsCisJCQkgKGRhdGFsZW4gKyBzaXplb2YoKmNtZF9zdGF0dXMpKSwKKwkJCSBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisKKwlpZiAocmV0IDwgMCkgeworCQlyZXR1cm4gLUVOWElPOworCX0gZWxzZSB7CisJCS8qIDFzdCA0IGJ5dGVzIGludG8gY21kX3N0YXR1cywgcmVtYWluaW5nIGRhdGEgaW50byBjbWRfZGF0YSAqLworCQltZW1jcHkoKGNoYXIgKiljbWRfc3RhdHVzLCAmZGF0YVswXSwgc2l6ZW9mKCpjbWRfc3RhdHVzKSk7CisJCW1lbWNweSgoY2hhciAqKWJ1ZiwgJmRhdGFbc2l6ZW9mKCpjbWRfc3RhdHVzKV0sIGRhdGFsZW4pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbV9ub3RpZmllcl9ibG9jayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCXVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmR1bW15KQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUE1fUE9TVF9ISUJFUk5BVElPTjoKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZwZF9kZXZpY2VfbGlzdCkgeworCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2U7CisJCQlpbnQgcmMgPSAwOworCisJCQlwZCA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgcG9zZWlkb24sIGRldmljZV9saXN0KTsKKwkJCXVkZXYgPSBwZC0+dWRldjsKKwkJCWlmYWNlID0gcGQtPmludGVyZmFjZTsKKworCQkJLyogSXQgd2lsbCBjYXVzZSB0aGUgc3lzdGVtIHRvIHJlbG9hZCB0aGUgZmlybXdhcmUgKi8KKwkJCXJjID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCh1ZGV2LCBpZmFjZSk7CisJCQlpZiAocmMgPj0gMCkgeworCQkJCXVzYl9yZXNldF9kZXZpY2UodWRldik7CisJCQkJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWxvZygiZXZlbnQgOiVsZFxuIiwgZXZlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBtX25vdGlmZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwbV9ub3RpZmllcl9ibG9jaywKK307CisKK2ludCBzZXRfdHVuZXJfbW9kZShzdHJ1Y3QgcG9zZWlkb24gKnBkLCB1bnNpZ25lZCBjaGFyIG1vZGUpCit7CisJczMyIHJldCwgY21kX3N0YXR1czsKKworCWlmIChwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVFVORV9NT0RFX1NFTEVDVCwgbW9kZSwgJmNtZF9zdGF0dXMpOworCWlmIChyZXQgfHwgY21kX3N0YXR1cykKKwkJcmV0dXJuIC1FTlhJTzsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwb3NlaWRvbl9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcG9zZWlkb24sIGtyZWYpOworCisJaWYgKCFwZCkKKwkJcmV0dXJuOworCWxpc3RfZGVsX2luaXQoJnBkLT5kZXZpY2VfbGlzdCk7CisKKwlwZF9kdmJfdXNiX2RldmljZV9jbGVhbnVwKHBkKTsKKwkvKiBjbGVhbl9hdWRpb19kYXRhKCZwZC0+YXVkaW9fZGF0YSk7Ki8KKworCWlmIChwZC0+dWRldikgeworCQl1c2JfcHV0X2RldihwZC0+dWRldik7CisJCXBkLT51ZGV2ID0gTlVMTDsKKwl9CisJaWYgKHBkLT5pbnRlcmZhY2UpIHsKKwkJdXNiX3B1dF9pbnRmKHBkLT5pbnRlcmZhY2UpOworCQlwZC0+aW50ZXJmYWNlID0gTlVMTDsKKwl9CisJa2ZyZWUocGQpOworCWxvZygpOworfQorCitzdGF0aWMgaW50IGZpcm13YXJlX2Rvd25sb2FkKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXQgPSAwLCBhY3R1YWxfbGVuZ3RoOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOworCXZvaWQgKmZ3YnVmID0gTlVMTDsKKwlzaXplX3QgZndsZW5ndGggPSAwLCBvZmZzZXQ7CisJc2l6ZV90IG1heF9wYWNrZXRfc2l6ZTsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaXJtd2FyZV9uYW1lLCAmdWRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCWxvZygiZG93bmxvYWQgZXJyIDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZ3bGVuZ3RoID0gZnctPnNpemU7CisKKwlmd2J1ZiA9IGt6YWxsb2MoZndsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghZndidWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCW1lbWNweShmd2J1ZiwgZnctPmRhdGEsIGZ3bGVuZ3RoKTsKKworCW1heF9wYWNrZXRfc2l6ZSA9IHVkZXYtPmVwX291dFsweDFdLT5kZXNjLndNYXhQYWNrZXRTaXplOworCWxvZygiXHRcdCBkb3dubG9hZCBzaXplIDogJWQiLCAoaW50KW1heF9wYWNrZXRfc2l6ZSk7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3bGVuZ3RoOyBvZmZzZXQgKz0gbWF4X3BhY2tldF9zaXplKSB7CisJCWFjdHVhbF9sZW5ndGggPSAwOworCQlyZXQgPSB1c2JfYnVsa19tc2codWRldiwKKwkJCQl1c2Jfc25kYnVsa3BpcGUodWRldiwgMHgwMSksIC8qIGVwIDEgKi8KKwkJCQlmd2J1ZiArIG9mZnNldCwKKwkJCQltaW4obWF4X3BhY2tldF9zaXplLCBmd2xlbmd0aCAtIG9mZnNldCksCisJCQkJJmFjdHVhbF9sZW5ndGgsCisJCQkJSFogKiAxMCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJa2ZyZWUoZndidWYpOworb3V0OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBvc2VpZG9uICpnZXRfcGQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKy8qIG9uZS10by1vbmUgbWFwIDogcG9zZWlkb257fSA8LS0tLT4gdXNiX2RldmljZXt9J3MgcG9ydCAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9tYXBfZmxhZ3Moc3RydWN0IHBvc2VpZG9uICpwZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcGQtPnBvcnRudW0gPSB1ZGV2LT5wb3J0bnVtOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfYXV0b3BtX3JlZihzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXJldHVybiAgcGQtPnZpZGVvX2RhdGEudXNlcnMgKyBwZC0+dmJpX2RhdGEudXNlcnMgKyBwZC0+YXVkaW8udXNlcnMKKwkJKyBhdG9taWNfcmVhZCgmcGQtPmR2Yl9kYXRhLnVzZXJzKSArIHBkLT5yYWRpb19kYXRhLnVzZXJzOworfQorCisvKiBmaXh1cCBzb21ldGhpbmcgZm9yIHBvc2VpZG9uICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb3NlaWRvbiAqZml4dXAoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlpbnQgY291bnQ7CisKKwkvKiBvbGQgdWRldiBhbmQgaW50ZXJmYWNlIGhhdmUgZ29uZSwgc28gcHV0IGJhY2sgcmVmZXJlbmNlIC4gKi8KKwljb3VudCA9IGdldF9hdXRvcG1fcmVmKHBkKTsKKwlsb2coImNvdW50IDogJWQsIHJlZiBjb3VudCA6ICVkIiwgY291bnQsIGdldF9wbV9jb3VudChwZCkpOworCXdoaWxlIChjb3VudC0tKQorCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7CisJLyp1c2JfYXV0b3BtX3NldF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7ICovCisKKwl1c2JfcHV0X2RldihwZC0+dWRldik7CisJdXNiX3B1dF9pbnRmKHBkLT5pbnRlcmZhY2UpOworCWxvZygiZXZlbnQgOiAlZFxuIiwgcGQtPm1zZy5ldmVudCk7CisJcmV0dXJuIHBkOworfQorCitzdGF0aWMgc3RydWN0IHBvc2VpZG9uICpmaW5kX29sZF9wb3NlaWRvbihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwZCwgJnBkX2RldmljZV9saXN0LCBkZXZpY2VfbGlzdCkgeworCQlpZiAocGQtPnBvcnRudW0gPT0gdWRldi0+cG9ydG51bSAmJiBpbl9oaWJlcm5hdGlvbihwZCkpCisJCQlyZXR1cm4gZml4dXAocGQpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogSXMgdGhlIGNhcmQgd29ya2luZyBub3cgPyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfd29ya2luZyhzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXJldHVybiBnZXRfcG1fY291bnQocGQpID4gMDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBnZXRfcGQoaW50Zik7CisKKwlpZiAoIXBkKQorCQlyZXR1cm4gMDsKKwlpZiAoIWlzX3dvcmtpbmcocGQpKSB7CisJCWlmIChnZXRfcG1fY291bnQocGQpIDw9IDAgJiYgIWluX2hpYmVybmF0aW9uKHBkKSkgeworCQkJcGQtPm1zZy5ldmVudCA9IFBNX0VWRU5UX0FVVE9fU1VTUEVORDsKKwkJCXBkLT5wbV9yZXN1bWUgPSBOVUxMOyAvKiAgYSBnb29kIGd1YXJkICovCisJCQlwcmludGsoS0VSTl9ERUJVRyAiXG5cdCsgVExHMjMwMCBhdXRvIHN1c3BlbmQgK1xuXG4iKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJcGQtPm1zZyA9IG1zZzsgLyogc2F2ZSBpdCBoZXJlICovCisJbG9ncG0ocGQpOworCXJldHVybiBwZC0+cG1fc3VzcGVuZCA/IHBkLT5wbV9zdXNwZW5kKHBkKSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBnZXRfcGQoaW50Zik7CisKKwlpZiAoIXBkKQorCQlyZXR1cm4gMDsKKwlwcmludGsoS0VSTl9ERUJVRyAiXG5cdCArKyBUTEcyMzAwIHJlc3VtZSArK1xuXG4iKTsKKworCWlmICghaXNfd29ya2luZyhwZCkpIHsKKwkJaWYgKFBNX0VWRU5UX0FVVE9fU1VTUEVORCA9PSBwZC0+bXNnLmV2ZW50KQorCQkJcGQtPm1zZyA9IFBNU0dfT047CisJCXJldHVybiAwOworCX0KKwlpZiAoaW5faGliZXJuYXRpb24ocGQpKSB7CisJCWxvZ3BtKHBkKTsKKwkJcmV0dXJuIDA7CisJfQorCWxvZ3BtKHBkKTsKKwlyZXR1cm4gcGQtPnBtX3Jlc3VtZSA/IHBkLT5wbV9yZXN1bWUocGQpIDogMDsKK30KKworc3RhdGljIHZvaWQgaGliZXJuYXRpb25fcmVzdW1lKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBwb3NlaWRvbiwgcG1fd29yayk7CisJaW50IGNvdW50OworCisJcGQtPm1zZy5ldmVudCA9IDA7IC8qIGNsZWFyIGl0IGhlcmUgKi8KKwlwZC0+c3RhdGUgJj0gflBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1Q7CisKKwkvKiBzZXQgdGhlIG5ldyBpbnRlcmZhY2UncyByZWZlcmVuY2UgKi8KKwljb3VudCA9IGdldF9hdXRvcG1fcmVmKHBkKTsKKwl3aGlsZSAoY291bnQtLSkKKwkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCisJLyogcmVzdW1lIHRoZSBjb250ZXh0ICovCisJbG9ncG0ocGQpOworCWlmIChwZC0+cG1fcmVzdW1lKQorCQlwZC0+cG1fcmVzdW1lKHBkKTsKK30KKyNlbHNlIC8qIENPTkZJR19QTSBpcyBub3QgZW5hYmxlZDogKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBvc2VpZG9uICpmaW5kX29sZF9wb3NlaWRvbihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9tYXBfZmxhZ3Moc3RydWN0IHBvc2VpZG9uICpwZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgY2hlY2tfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCAqZG93bl9maXJtd2FyZSkKK3sKKwl2b2lkICpidWY7CisJaW50IHJldDsKKwlzdHJ1Y3QgY21kX2Zpcm13YXJlX3ZlcnNfcyAqY21kX2Zpcm07CisKKwlidWYgPSBremFsbG9jKHNpemVvZigqY21kX2Zpcm0pICsgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKKwkJCSB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgUkVRX0dFVF9DTUQgfCBHRVRfRldfSUQsCisJCQkgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgMCwKKwkJCSAwLAorCQkJIGJ1ZiwKKwkJCSBzaXplb2YoKmNtZF9maXJtKSArIHNpemVvZih1MzIpLAorCQkJIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlrZnJlZShidWYpOworCisJaWYgKHJldCA8IDApIHsKKwkJKmRvd25fZmlybXdhcmUgPSAxOworCQlyZXR1cm4gZmlybXdhcmVfZG93bmxvYWQodWRldik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJaW50IG5ld19vbmUgPSAwOworCisJLyogZG93bmxvYWQgZmlybXdhcmUgKi8KKwljaGVja19maXJtd2FyZSh1ZGV2LCAmcmV0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gMDsKKworCS8qIERvIEkgcmVjb3ZlcnkgZnJvbSB0aGUgaGliZXJuYXRlID8gKi8KKwlwZCA9IGZpbmRfb2xkX3Bvc2VpZG9uKHVkZXYpOworCWlmICghcGQpIHsKKwkJcGQgPSBremFsbG9jKHNpemVvZigqcGQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlrcmVmX2luaXQoJnBkLT5rcmVmKTsKKwkJc2V0X21hcF9mbGFncyhwZCwgdWRldik7CisJCW5ld19vbmUgPSAxOworCX0KKworCXBkLT51ZGV2CT0gdXNiX2dldF9kZXYodWRldik7CisJcGQtPmludGVyZmFjZQk9IHVzYl9nZXRfaW50ZihpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBwZCk7CisKKwlpZiAobmV3X29uZSkgeworCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW50ZXJmYWNlLT5kZXY7CisKKwkJbG9ncG0ocGQpOworCQltdXRleF9pbml0KCZwZC0+bG9jayk7CisKKwkJLyogcmVnaXN0ZXIgdjRsMiBkZXZpY2UgKi8KKwkJc25wcmludGYocGQtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihwZC0+djRsMl9kZXYubmFtZSksICIlcyAlcyIsCisJCQlkZXYtPmRyaXZlci0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CisJCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZwZC0+djRsMl9kZXYpOworCisJCS8qIHJlZ2lzdGVyIGRldmljZXMgaW4gZGlyZWN0b3J5IC9kZXYgKi8KKwkJcmV0ID0gcGRfdmlkZW9faW5pdChwZCk7CisJCXBvc2VpZG9uX2F1ZGlvX2luaXQocGQpOworCQlwb3NlaWRvbl9mbV9pbml0KHBkKTsKKwkJcGRfZHZiX3VzYl9kZXZpY2VfaW5pdChwZCk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJnBkLT5kZXZpY2VfbGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJnBkLT5kZXZpY2VfbGlzdCwgJnBkX2RldmljZV9saXN0KTsKKwl9CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnVkZXYtPmRldiwgMSk7CisjaWZkZWYgQ09ORklHX1BNCisJcGQtPnVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkID0gMDsKKwlwZC0+dWRldi0+YXV0b3N1c3BlbmRfZGVsYXkgPSBIWiAqIFBNX1NVU1BFTkRfREVMQVk7CisKKwlpZiAoaW5faGliZXJuYXRpb24ocGQpKSB7CisJCUlOSVRfV09SSygmcGQtPnBtX3dvcmssIGhpYmVybmF0aW9uX3Jlc3VtZSk7CisJCXNjaGVkdWxlX3dvcmsoJnBkLT5wbV93b3JrKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9zZWlkb25fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBnZXRfcGQoaW50ZXJmYWNlKTsKKworCWlmICghcGQpCisJCXJldHVybjsKKwlsb2dwbShwZCk7CisJaWYgKGluX2hpYmVybmF0aW9uKHBkKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXBkLT5zdGF0ZSB8PSBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCisJLyogc3RvcCB1cmIgdHJhbnNmZXJyaW5nICovCisJc3RvcF9hbGxfdmlkZW9fc3RyZWFtKHBkKTsKKwlkdmJfc3RvcF9zdHJlYW1pbmcoJnBkLT5kdmJfZGF0YSk7CisKKwkvKnVucmVnaXN0ZXIgdjRsMiBkZXZpY2UgKi8KKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZwZC0+djRsMl9kZXYpOworCisJbG9ja19rZXJuZWwoKTsKKwl7CisJCXBkX2R2Yl91c2JfZGV2aWNlX2V4aXQocGQpOworCQlwb3NlaWRvbl9mbV9leGl0KHBkKTsKKworCQlwb3NlaWRvbl9hdWRpb19mcmVlKHBkKTsKKwkJcGRfdmlkZW9fZXhpdChwZCk7CisJfQorCXVubG9ja19rZXJuZWwoKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwlrcmVmX3B1dCgmcGQtPmtyZWYsIHBvc2VpZG9uX2RlbGV0ZSk7Cit9CisKK3N0cnVjdCB1c2JfZHJpdmVyIHBvc2VpZG9uX2RyaXZlciA9IHsKKwkubmFtZQkJPSAicG9zZWlkb24iLAorCS5wcm9iZQkJPSBwb3NlaWRvbl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHBvc2VpZG9uX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gaWRfdGFibGUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBwb3NlaWRvbl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcG9zZWlkb25fcmVzdW1lLAorI2VuZGlmCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBvc2VpZG9uX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZwb3NlaWRvbl9kcml2ZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmVnaXN0ZXJfcG1fbm90aWZpZXIoJnBtX25vdGlmZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwb3NlaWRvbl9leGl0KHZvaWQpCit7CisJbG9nKCk7CisJdW5yZWdpc3Rlcl9wbV9ub3RpZmllcigmcG1fbm90aWZlcik7CisJdXNiX2RlcmVnaXN0ZXIoJnBvc2VpZG9uX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBvc2VpZG9uX2luaXQpOworbW9kdWxlX2V4aXQocG9zZWlkb25fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRlbGVnZW50IFN5c3RlbXMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRm9yIHRsZzIzMDAtYmFzZWQgVVNCIGRldmljZSAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1yYWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXJhZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1NzY2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1yYWRpby5jCkBAIC0wLDAgKzEsNDIwIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlICJwZC1jb21tb24uaCIKKyNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCisKK3N0YXRpYyBpbnQgc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgcG9zZWlkb24gKnAsIF9fdTMyIGZyZXF1ZW5jeSk7CitzdGF0aWMgaW50IHBvc2VpZG9uX2ZtX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgcG9zZWlkb25fZm1fb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCk7CisKKyNkZWZpbmUgVFVORVJfRlJFUV9NSU5fRk0gNzYwMDAwMDAKKyNkZWZpbmUgVFVORVJfRlJFUV9NQVhfRk0gMTA4MDAwMDAwCisKKyNkZWZpbmUgTUFYX1BSRUVNUEhBU0lTIChWNEwyX1BSRUVNUEhBU0lTXzc1X3VTICsgMSkKK3N0YXRpYyBpbnQgcHJlZW1waGFzaXNbTUFYX1BSRUVNUEhBU0lTXSA9IHsKKwlUTEdfVFVORV9BU1REX05PTkUsICAgLyogVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRCAqLworCVRMR19UVU5FX0FTVERfRk1fRVVSLCAvKiBWNEwyX1BSRUVNUEhBU0lTXzUwX3VTICAgICovCisJVExHX1RVTkVfQVNURF9GTV9VUywgIC8qIFY0TDJfUFJFRU1QSEFTSVNfNzVfdVMgICAgKi8KK307CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fY2hlY2tfbW9kZV9yYWRpbyhzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJaW50IHJldDsKKwl1MzIgc3RhdHVzOworCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KEhaLzIpOworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHAtPnVkZXYsIDAsIEJVTEtfQUxURVJOQVRFX0lGQUNFKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBzZXRfdHVuZXJfbW9kZShwLCBUTEdfTU9ERV9GTV9SQURJTyk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHNlbmRfc2V0X3JlcShwLCBTR05MX1NSQ19TRUwsIFRMR19TSUdfU1JDX0FOVEVOTkEsICZzdGF0dXMpOworCXJldCA9IHNlbmRfc2V0X3JlcShwLCBUVU5FUl9BVURfQU5BX1NURCwKKwkJCQlwLT5yYWRpb19kYXRhLnByZV9lbXBoYXNpcywgJnN0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwLCBUVU5FUl9BVURfTU9ERSwKKwkJCQlUTEdfVFVORV9UVkFVRElPX01PREVfU1RFUkVPLCAmc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHAsIEFVRElPX1NBTVBMRV9SQVRFX1NFTCwKKwkJCQlBVFZfQVVESU9fUkFURV80OEssICZzdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocCwgVFVORV9GUkVRX1NFTEVDVCwgVFVORVJfRlJFUV9NSU5fRk0sICZzdGF0dXMpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcG1fZm1fc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJbG9ncG0ocCk7CisJcG1fYWxzYV9zdXNwZW5kKHApOworCXVzYl9zZXRfaW50ZXJmYWNlKHAtPnVkZXYsIDAsIDApOworCW1zbGVlcCgzMDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtX2ZtX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJbG9ncG0ocCk7CisJcG9zZWlkb25fY2hlY2tfbW9kZV9yYWRpbyhwKTsKKwlzZXRfZnJlcXVlbmN5KHAsIHAtPnJhZGlvX2RhdGEuZm1fZnJlcSk7CisJcG1fYWxzYV9yZXN1bWUocCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBwb3NlaWRvbl9mbV9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IHZpZGVvX2RldmRhdGEoZmlscCk7CisJc3RydWN0IHBvc2VpZG9uICpwID0gdmlkZW9fZ2V0X2RydmRhdGEodmZkKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghcCkKKwkJcmV0dXJuIC0xOworCisJbXV0ZXhfbG9jaygmcC0+bG9jayk7CisJaWYgKHAtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocC0+c3RhdGUgJiYgIShwLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0ZNKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOworCWlmICgwID09IHAtPnN0YXRlKSB7CisJCS8qIGRlZmF1bHQgcHJlLWVtcGhhc2lzICovCisJCWlmIChwLT5yYWRpb19kYXRhLnByZV9lbXBoYXNpcyA9PSAwKQorCQkJcC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXMgPSBUTEdfVFVORV9BU1REX0ZNX0VVUjsKKwkJc2V0X2RlYnVnX21vZGUodmZkLCBkZWJ1Z19tb2RlKTsKKworCQlyZXQgPSBwb3NlaWRvbl9jaGVja19tb2RlX3JhZGlvKHApOworCQlpZiAocmV0IDwgMCkgeworCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHAtPmludGVyZmFjZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlwLT5zdGF0ZSB8PSBQT1NFSURPTl9TVEFURV9GTTsKKwl9CisJcC0+cmFkaW9fZGF0YS51c2VycysrOworCWtyZWZfZ2V0KCZwLT5rcmVmKTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBwOworb3V0OgorCW11dGV4X3VubG9jaygmcC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9mbV9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHJhZGlvX2RhdGEgKmZtID0gJnAtPnJhZGlvX2RhdGE7CisJdWludDMyX3Qgc3RhdHVzOworCisJbXV0ZXhfbG9jaygmcC0+bG9jayk7CisJZm0tPnVzZXJzLS07CisJaWYgKDAgPT0gZm0tPnVzZXJzKQorCQlwLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfRk07CisKKwlpZiAoZm0tPmlzX3JhZGlvX3N0cmVhbWluZyAmJiBmaWxwID09IHAtPmZpbGVfZm9yX3N0cmVhbSkgeworCQlmbS0+aXNfcmFkaW9fc3RyZWFtaW5nID0gMDsKKwkJc2VuZF9zZXRfcmVxKHAsIFBMQVlfU0VSVklDRSwgVExHX1RVTkVfUExBWV9TVkNfU1RPUCwgJnN0YXR1cyk7CisJfQorCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOworCW11dGV4X3VubG9jaygmcC0+bG9jayk7CisKKwlrcmVmX3B1dCgmcC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3RybGNweSh2LT5kcml2ZXIsICJ0ZWxlLXJhZGlvIiwgc2l6ZW9mKHYtPmRyaXZlcikpOworCXN0cmxjcHkodi0+Y2FyZCwgIlRlbGVnZW50IFBvc2VpZG9uIiwgc2l6ZW9mKHYtPmNhcmQpKTsKKwl1c2JfbWFrZV9wYXRoKHAtPnVkZXYsIHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKKwl2LT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSk7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBwb3NlaWRvbl9mbV9mb3BzID0geworCS5vd25lciAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAgPSBwb3NlaWRvbl9mbV9vcGVuLAorCS5yZWxlYXNlICAgICAgID0gcG9zZWlkb25fZm1fY2xvc2UsCisJLmlvY3RsCSAgICAgICA9IHZpZGVvX2lvY3RsMiwKK307CisKK2ludCB0bGdfZm1fdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlzdHJ1Y3QgdHVuZXJfZm1fc2lnX3N0YXRfcyBmbV9zdGF0ID0ge307CisJaW50IHJldCwgc3RhdHVzLCBjb3VudCA9IDU7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHZ0LT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZ0LT50eXBlCT0gVjRMMl9UVU5FUl9SQURJTzsKKwl2dC0+Y2FwYWJpbGl0eQk9IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKKwl2dC0+cmFuZ2Vsb3cJPSBUVU5FUl9GUkVRX01JTl9GTSAvIDYyNTAwOworCXZ0LT5yYW5nZWhpZ2gJPSBUVU5FUl9GUkVRX01BWF9GTSAvIDYyNTAwOworCXZ0LT5yeHN1YmNoYW5zCT0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXZ0LT5hdWRtb2RlCT0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwl2dC0+c2lnbmFsCT0gMDsKKwl2dC0+YWZjIAk9IDA7CisKKwltdXRleF9sb2NrKCZwLT5sb2NrKTsKKwlyZXQgPSBzZW5kX2dldF9yZXEocCwgVFVORVJfU1RBVFVTLCBUTEdfTU9ERV9GTV9SQURJTywKKwkJCSAgICAgICZmbV9zdGF0LCAmc3RhdHVzLCBzaXplb2YoZm1fc3RhdCkpOworCisJd2hpbGUgKGZtX3N0YXQuc2lnX2xvY2tfYnVzeSAmJiBjb3VudC0tICYmICFyZXQpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dChIWik7CisKKwkJcmV0ID0gc2VuZF9nZXRfcmVxKHAsIFRVTkVSX1NUQVRVUywgVExHX01PREVfRk1fUkFESU8sCisJCQkJICAmZm1fc3RhdCwgJnN0YXR1cywgc2l6ZW9mKGZtX3N0YXQpKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwLT5sb2NrKTsKKworCWlmIChyZXQgfHwgc3RhdHVzKSB7CisJCXZ0LT5zaWduYWwgPSAwOworCX0gZWxzZSBpZiAoKGZtX3N0YXQuc2lnX3ByZXNlbnQgfHwgZm1fc3RhdC5zaWdfbG9ja2VkKQorCQkJJiYgZm1fc3RhdC5zaWdfc3RyZW5ndGggPT0gMCkgeworCQl2dC0+c2lnbmFsID0gMHhmZmZmOworCX0gZWxzZQorCQl2dC0+c2lnbmFsID0gKGZtX3N0YXQuc2lnX3N0cmVuZ3RoICogMjU1IC8gMTApIDw8IDg7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZtX2dldF9mcmVxKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmFyZ3ApCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJYXJncC0+ZnJlcXVlbmN5ID0gcC0+cmFkaW9fZGF0YS5mbV9mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9mcmVxdWVuY3koc3RydWN0IHBvc2VpZG9uICpwLCBfX3UzMiBmcmVxdWVuY3kpCit7CisJX191MzIgZnJlcSA7CisJaW50IHJldCwgc3RhdHVzOworCisJbXV0ZXhfbG9jaygmcC0+bG9jayk7CisKKwlyZXQgPSBzZW5kX3NldF9yZXEocCwgVFVORVJfQVVEX0FOQV9TVEQsCisJCQkJcC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXMsICZzdGF0dXMpOworCisJZnJlcSA9ICAoZnJlcXVlbmN5ICogMTI1KSAqIDUwMCAvIDEwMDA7Lyoga0haICovCisJaWYgKGZyZXEgPCBUVU5FUl9GUkVRX01JTl9GTS8xMDAwIHx8IGZyZXEgPiBUVU5FUl9GUkVRX01BWF9GTS8xMDAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFRVTkVfRlJFUV9TRUxFQ1QsIGZyZXEsICZzdGF0dXMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yIDsKKwlyZXQgPSBzZW5kX3NldF9yZXEocCwgVEFLRV9SRVFVRVNULCAwLCAmc3RhdHVzKTsKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dChIWi80KTsKKwlpZiAoIXAtPnJhZGlvX2RhdGEuaXNfcmFkaW9fc3RyZWFtaW5nKSB7CisJCXJldCA9IHNlbmRfc2V0X3JlcShwLCBUQUtFX1JFUVVFU1QsIDAsICZzdGF0dXMpOworCQlyZXQgPSBzZW5kX3NldF9yZXEocCwgUExBWV9TRVJWSUNFLAorCQkJCVRMR19UVU5FX1BMQVlfU1ZDX1NUQVJULCAmc3RhdHVzKTsKKwkJcC0+cmFkaW9fZGF0YS5pc19yYWRpb19zdHJlYW1pbmcgPSAxOworCX0KKwlwLT5yYWRpb19kYXRhLmZtX2ZyZXEgPSBmcmVxdWVuY3k7CitlcnJvcjoKKwltdXRleF91bmxvY2soJnAtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK2ludCBmbV9zZXRfZnJlcShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICphcmdwKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXAtPmZpbGVfZm9yX3N0cmVhbSAgPSBmaWxlOworI2lmZGVmIENPTkZJR19QTQorCXAtPnBtX3N1c3BlbmQgPSBwbV9mbV9zdXNwZW5kOworCXAtPnBtX3Jlc3VtZSAgPSBwbV9mbV9yZXN1bWU7CisjZW5kaWYKKwlyZXR1cm4gc2V0X2ZyZXF1ZW5jeShwLCBhcmdwLT5mcmVxdWVuY3kpOworfQorCitpbnQgdGxnX2ZtX3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmFyZykKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHRsZ19mbV92aWRpb2NfZ19leHRzX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBpOworCisJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19GTV9UWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSBjdHJscy0+Y29udHJvbHMgKyBpOworCisJCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTKQorCQkJY29udGludWU7CisKKwkJaWYgKGkgPCBNQVhfUFJFRU1QSEFTSVMpCisJCQljdHJsLT52YWx1ZSA9IHAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHRsZ19mbV92aWRpb2Nfc19leHRzX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlpbnQgaTsKKworCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfRk1fVFgpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsID0gY3RybHMtPmNvbnRyb2xzICsgaTsKKworCQlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUykKKwkJCWNvbnRpbnVlOworCisJCWlmIChjdHJsLT52YWx1ZSA+PSAwICYmIGN0cmwtPnZhbHVlIDwgTUFYX1BSRUVNUEhBU0lTKSB7CisJCQlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCQlpbnQgcHJlX2VtcGhhc2lzID0gcHJlZW1waGFzaXNbY3RybC0+dmFsdWVdOworCQkJdTMyIHN0YXR1czsKKworCQkJc2VuZF9zZXRfcmVxKHAsIFRVTkVSX0FVRF9BTkFfU1RELAorCQkJCQkJcHJlX2VtcGhhc2lzLCAmc3RhdHVzKTsKKwkJCXAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzID0gcHJlX2VtcGhhc2lzOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgdGxnX2ZtX3ZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0bGdfZm1fdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsKQoreworCWlmICghKGN0cmwtPmlkICYgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljdHJsLT5pZCAmPSB+VjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMOworCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTKSB7CisJCS8qIHJldHVybiB0aGUgbmV4dCBzdXBwb3J0ZWQgY29udHJvbCAqLworCQljdHJsLT5pZCA9IFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVM7CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKGN0cmwsIFY0TDJfUFJFRU1QSEFTSVNfRElTQUJMRUQsCisJCQkJCVY0TDJfUFJFRU1QSEFTSVNfNzVfdVMsIDEsCisJCQkJCVY0TDJfUFJFRU1QSEFTSVNfNTBfdVMpOworCQljdHJsLT5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1VQREFURTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgdGxnX2ZtX3ZpZGlvY19xdWVyeW1lbnUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCit7CisJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9tZW51KHFtZW51LCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXJldHVybiB2dC0+aW5kZXggPiAwID8gLUVJTlZBTCA6IDA7Cit9CitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqdmEpCit7CisJcmV0dXJuICh2YS0+aW5kZXggIT0gMCkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggICAgPSAwOworCWEtPm1vZGUgICAgPSAwOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1MzIgaSkKK3sKKwlyZXR1cm4gKGkgIT0gMCkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdTMyICppKQoreworCXJldHVybiAoKmkgIT0gMCkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBwb3NlaWRvbl9mbV9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2dfYXVkaW8gICAgID0gdmlkaW9jX2dfYXVkaW8sCisJLnZpZGlvY19zX2F1ZGlvICAgICA9IHZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfZ19pbnB1dCAgICAgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19xdWVyeWN0cmwgICA9IHRsZ19mbV92aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfcXVlcnltZW51ICAgPSB0bGdfZm1fdmlkaW9jX3F1ZXJ5bWVudSwKKwkudmlkaW9jX2dfY3RybCAgICAgID0gdGxnX2ZtX3ZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICA9IHRsZ19mbV92aWRpb2Nfc19jdHJsLAorCS52aWRpb2Nfc19leHRfY3RybHMgPSB0bGdfZm1fdmlkaW9jX3NfZXh0c19jdHJsLAorCS52aWRpb2NfZ19leHRfY3RybHMgPSB0bGdfZm1fdmlkaW9jX2dfZXh0c19jdHJsLAorCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfdHVuZXIgICAgID0gdGxnX2ZtX3ZpZGlvY19nX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSBmbV9nZXRfZnJlcSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gZm1fc2V0X2ZyZXEsCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBwb3NlaWRvbl9mbV90ZW1wbGF0ZSA9IHsKKwkubmFtZSAgICAgICA9ICJUZWxlZ2VudC1SYWRpbyIsCisJLmZvcHMgICAgICAgPSAmcG9zZWlkb25fZm1fZm9wcywKKwkubWlub3IgICAgICA9IC0xLAorCS5yZWxlYXNlICAgID0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLmlvY3RsX29wcyAgPSAmcG9zZWlkb25fZm1faW9jdGxfb3BzLAorfTsKKworaW50IHBvc2VpZG9uX2ZtX2luaXQoc3RydWN0IHBvc2VpZG9uICpwKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmZtX2RldjsKKworCWZtX2RldiA9IHZkZXZfaW5pdChwLCAmcG9zZWlkb25fZm1fdGVtcGxhdGUpOworCWlmIChmbV9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShmbV9kZXYsIFZGTF9UWVBFX1JBRElPLCAtMSkgPCAwKSB7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGZtX2Rldik7CisJCXJldHVybiAtMTsKKwl9CisJcC0+cmFkaW9fZGF0YS5mbV9kZXYgPSBmbV9kZXY7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwb3NlaWRvbl9mbV9leGl0KHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlkZXN0cm95X3ZpZGVvX2RldmljZSgmcC0+cmFkaW9fZGF0YS5mbV9kZXYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWNmYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXZpZGVvLmMKQEAgLTAsMCArMSwxNjY3IEBACisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CisKKyNpbmNsdWRlICJwZC1jb21tb24uaCIKKyNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCisKK3N0YXRpYyBpbnQgcG1fdmlkZW9fc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnBkKTsKK3N0YXRpYyBpbnQgcG1fdmlkZW9fcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqcGQpOworc3RhdGljIHZvaWQgaXNvX2J1YmJsZV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdyk7CisKK2ludCB1c2JfdHJhbnNmZXJfbW9kZTsKK21vZHVsZV9wYXJhbSh1c2JfdHJhbnNmZXJfbW9kZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModXNiX3RyYW5zZmVyX21vZGUsICIwID0gQnVsaywgMSA9IElzb2Nocm9ub3VzIik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG9zZWlkb25fZm9ybWF0IHBvc2VpZG9uX2Zvcm1hdHNbXSA9IHsKKwl7ICJZVVYgNDIyIiwgVjRMMl9QSVhfRk1UX1lVWVYsIDE2LCAwfSwKKwl7ICJSR0I1NjUiLCBWNEwyX1BJWF9GTVRfUkdCNTY1LCAxNiwgMH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBvc2VpZG9uX3R2bm9ybSBwb3NlaWRvbl90dm5vcm1zW10gPSB7CisJeyBWNEwyX1NURF9QQUxfRCwgIlBBTC1EIiwgIFRMR19UVU5FX1ZTVERfUEFMX0QgfSwKKwl7IFY0TDJfU1REX1BBTF9CLCAiUEFMLUIiLCAgVExHX1RVTkVfVlNURF9QQUxfQiB9LAorCXsgVjRMMl9TVERfUEFMX0csICJQQUwtRyIsICBUTEdfVFVORV9WU1REX1BBTF9HIH0sCisJeyBWNEwyX1NURF9QQUxfSCwgIlBBTC1IIiwgIFRMR19UVU5FX1ZTVERfUEFMX0ggfSwKKwl7IFY0TDJfU1REX1BBTF9JLCAiUEFMLUkiLCAgVExHX1RVTkVfVlNURF9QQUxfSSB9LAorCXsgVjRMMl9TVERfUEFMX00sICJQQUwtTSIsICBUTEdfVFVORV9WU1REX1BBTF9NIH0sCisJeyBWNEwyX1NURF9QQUxfTiwgIlBBTC1OIiwgIFRMR19UVU5FX1ZTVERfUEFMX05fQ09NQk8gfSwKKwl7IFY0TDJfU1REX1BBTF9OYywgIlBBTC1OYyIsIFRMR19UVU5FX1ZTVERfUEFMX05fQ09NQk8gfSwKKwl7IFY0TDJfU1REX05UU0NfTSwgIk5UU0MtTSIsIFRMR19UVU5FX1ZTVERfTlRTQ19NIH0sCisJeyBWNEwyX1NURF9OVFNDX01fSlAsICJOVFNDLUpQIiwgVExHX1RVTkVfVlNURF9OVFNDX01fSiB9LAorCXsgVjRMMl9TVERfU0VDQU1fQiwgIlNFQ0FNLUIiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0IgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0QsICJTRUNBTS1EIiwgVExHX1RVTkVfVlNURF9TRUNBTV9EIH0sCisJeyBWNEwyX1NURF9TRUNBTV9HLCAiU0VDQU0tRyIsIFRMR19UVU5FX1ZTVERfU0VDQU1fRyB9LAorCXsgVjRMMl9TVERfU0VDQU1fSCwgIlNFQ0FNLUgiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0ggfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0ssICJTRUNBTS1LIiwgVExHX1RVTkVfVlNURF9TRUNBTV9LIH0sCisJeyBWNEwyX1NURF9TRUNBTV9LMSwgIlNFQ0FNLUsxIiwgVExHX1RVTkVfVlNURF9TRUNBTV9LMSB9LAorCXsgVjRMMl9TVERfU0VDQU1fTCwgIlNFQ0FNLUwiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0wgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0xDLCAiU0VDQU0tTEMiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0wxIH0sCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBQT1NFSURPTl9UVk5PUk1TID0gQVJSQVlfU0laRShwb3NlaWRvbl90dm5vcm1zKTsKKworc3RydWN0IHBkX2F1ZGlvX21vZGUgeworCXUzMiB0bGdfYXVkaW9fbW9kZTsKKwl1MzIgdjRsMl9hdWRpb19zdWI7CisJdTMyIHY0bDJfYXVkaW9fbW9kZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGRfYXVkaW9fbW9kZSBwZF9hdWRpb19tb2Rlc1tdID0geworCXsgVExHX1RVTkVfVFZBVURJT19NT0RFX01PTk8sIFY0TDJfVFVORVJfU1VCX01PTk8sCisJCVY0TDJfVFVORVJfTU9ERV9NT05PIH0sCisJeyBUTEdfVFVORV9UVkFVRElPX01PREVfU1RFUkVPLCBWNEwyX1RVTkVSX1NVQl9TVEVSRU8sCisJCVY0TDJfVFVORVJfTU9ERV9TVEVSRU8gfSwKKwl7IFRMR19UVU5FX1RWQVVESU9fTU9ERV9MQU5HX0EsIFY0TDJfVFVORVJfU1VCX0xBTkcxLAorCQlWNEwyX1RVTkVSX01PREVfTEFORzEgfSwKKwl7IFRMR19UVU5FX1RWQVVESU9fTU9ERV9MQU5HX0IsIFY0TDJfVFVORVJfU1VCX0xBTkcyLAorCQlWNEwyX1RVTkVSX01PREVfTEFORzIgfSwKKwl7IFRMR19UVU5FX1RWQVVESU9fTU9ERV9MQU5HX0MsIFY0TDJfVFVORVJfU1VCX0xBTkcxLAorCQlWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgfQorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgUE9TRUlET05fQVVESU9NT0RTID0gQVJSQVlfU0laRShwZF9hdWRpb19tb2Rlcyk7CisKK3N0cnVjdCBwZF9pbnB1dCB7CisJY2hhciAqbmFtZTsKKwl1aW50MzJfdCB0bGdfc3JjOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwZF9pbnB1dCBwZF9pbnB1dHNbXSA9IHsKKwl7ICJUViBBbnRlbm5hIiwgVExHX1NJR19TUkNfQU5URU5OQSB9LAorCXsgIlRWIENhYmxlIiwgVExHX1NJR19TUkNfQ0FCTEUgfSwKKwl7ICJUViBTVmlkZW8iLCBUTEdfU0lHX1NSQ19TVklERU8gfSwKKwl7ICJUViBDb21wb3NpdGUiLCBUTEdfU0lHX1NSQ19DT01QT1NJVEUgfQorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgUE9TRUlET05fSU5QVVRTID0gQVJSQVlfU0laRShwZF9pbnB1dHMpOworCitzdHJ1Y3QgcG9zZWlkb25fY29udHJvbCB7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsIHY0bDJfY3RybDsKKwllbnVtIGNtZF9jdXN0b21fcGFyYW1faWQgdmNfaWQ7Cit9OworCitzdGF0aWMgc3RydWN0IHBvc2VpZG9uX2NvbnRyb2wgY29udHJvbHNbXSA9IHsKKwl7CisJCXsgVjRMMl9DSURfQlJJR0hUTkVTUywgVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCSJicmlnaHRuZXNzIiwgMCwgMTAwMDAsIDEsIDEwMCwgMCwgfSwKKwkJQ1VTVF9QQVJNX0lEX0JSSUdIVE5FU1NfQ1RSTAorCX0sIHsKKwkJeyBWNEwyX0NJRF9DT05UUkFTVCwgVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCSJjb250cmFzdCIsIDAsIDEwMDAwLCAxLCAxMDAsIDAsIH0sCisJCUNVU1RfUEFSTV9JRF9DT05UUkFTVF9DVFJMLAorCX0sIHsKKwkJeyBWNEwyX0NJRF9IVUUsIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkiaHVlIiwgMCwgMTAwMDAsIDEsIDEwMCwgMCwgfSwKKwkJQ1VTVF9QQVJNX0lEX0hVRV9DVFJMLAorCX0sIHsKKwkJeyBWNEwyX0NJRF9TQVRVUkFUSU9OLCBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJInNhdHVyYXRpb24iLCAwLCAxMDAwMCwgMSwgMTAwLCAwLCB9LAorCQlDVVNUX1BBUk1fSURfU0FUVVJBVElPTl9DVFJMLAorCX0sCit9OworCitzdHJ1Y3QgdmlkZW9fc3RkX3RvX2F1ZGlvX3N0ZCB7CisJdjRsMl9zdGRfaWQJdmlkZW9fc3RkOworCWludCAJCWF1ZGlvX3N0ZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fc3RkX3RvX2F1ZGlvX3N0ZCB2aWRlb190b19hdWRpb19tYXBbXSA9IHsKKwkvKiBjb3VudHJ5IDogeyAyNywgMzIsIDMzLCAzNCwgMzYsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNjQsCisJCQk2NSwgODYsIDM1MSwgMzUyLCAzNTMsIDM1NCwgMzU4LCAzNzIsIDg1MiwgOTcyIH0gKi8KKwl7IChWNEwyX1NURF9QQUxfSSB8IFY0TDJfU1REX1BBTF9CIHwgVjRMMl9TVERfUEFMX0QgfAorCQlWNEwyX1NURF9TRUNBTV9MIHwgVjRMMl9TVERfU0VDQU1fRCksIFRMR19UVU5FX0FTVERfTklDQU0gfSwKKworCS8qIGNvdW50cnkgOiB7IDEsIDUyLCA1NCwgNTUsIDg4NiB9ICovCisJe1Y0TDJfU1REX05UU0NfTSB8IFY0TDJfU1REX1BBTF9OIHwgVjRMMl9TVERfUEFMX00sIFRMR19UVU5FX0FTVERfQlRTQ30sCisKKwkvKiBjb3VudHJ5IDogeyA4MSB9ICovCisJeyBWNEwyX1NURF9OVFNDX01fSlAsIFRMR19UVU5FX0FTVERfRUlBSiB9LAorCisJLyogb3RoZXIgY291bnRyeSA6IFRMR19UVU5FX0FTVERfQTIgKi8KK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1hcF9zaXplID0gQVJSQVlfU0laRSh2aWRlb190b19hdWRpb19tYXApOworCitzdGF0aWMgaW50IGdldF9hdWRpb19zdGQodjRsMl9zdGRfaWQgdjRsMl9zdGQpCit7CisJaW50IGkgPSAwOworCisJZm9yICg7IGkgPCBtYXBfc2l6ZTsgaSsrKSB7CisJCWlmICh2NGwyX3N0ZCAmIHZpZGVvX3RvX2F1ZGlvX21hcFtpXS52aWRlb19zdGQpCisJCQlyZXR1cm4gdmlkZW9fdG9fYXVkaW9fbWFwW2ldLmF1ZGlvX3N0ZDsKKwl9CisJcmV0dXJuIFRMR19UVU5FX0FTVERfQTI7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmcm9udC0+cGQ7CisKKwlsb2dzKGZyb250KTsKKworCXN0cmNweShjYXAtPmRyaXZlciwgInRlbGUtdmlkZW8iKTsKKwlzdHJjcHkoY2FwLT5jYXJkLCAiVGVsZWdlbnQgUG9zZWlkb24iKTsKKwl1c2JfbWFrZV9wYXRoKHAtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CisJY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSk7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVFVORVIgfAorCQkJCVY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfU1RSRUFNSU5HIHwKKwkJCQlWNEwyX0NBUF9SRUFEV1JJVEUgfCBWNEwyX0NBUF9WQklfQ0FQVFVSRTsKKwlyZXR1cm4gMDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgdm9pZCBpbml0X2NvcHkoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvLCBib29sIGluZGV4KQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHZpZGVvLT5mcm9udDsKKworCXZpZGVvLT5maWVsZF9jb3VudAk9IGluZGV4OworCXZpZGVvLT5saW5lc19jb3BpZWQJPSAwOworCXZpZGVvLT5wcmV2X2xlZnQJPSAwIDsKKwl2aWRlby0+ZHN0IAkJPSAoY2hhciAqKXZpZGVvYnVmX3RvX3ZtYWxsb2MoZnJvbnQtPmN1cnJfZnJhbWUpCisJCQkJCSsgaW5kZXggKiB2aWRlby0+bGluZXNfc2l6ZTsKKwl2aWRlby0+dmJpLT5jb3BpZWQgCT0gMDsgLyogc2V0IGl0IGhlcmUgKi8KK30KKworc3RhdGljIGJvb2wgZ2V0X2ZyYW1lKHN0cnVjdCBmcm9udF9mYWNlICpmcm9udCwgaW50ICpuZWVkX2luaXQpCit7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIgPSBmcm9udC0+Y3Vycl9mcmFtZTsKKworCWlmICh2YikKKwkJcmV0dXJuIHRydWU7CisKKwlzcGluX2xvY2soJmZyb250LT5xdWV1ZV9sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmZyb250LT5hY3RpdmUpKSB7CisJCXZiID0gbGlzdF9lbnRyeShmcm9udC0+YWN0aXZlLm5leHQsCisJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciwgcXVldWUpOworCQlpZiAobmVlZF9pbml0KQorCQkJKm5lZWRfaW5pdCA9IDE7CisJCWZyb250LT5jdXJyX2ZyYW1lID0gdmI7CisJCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisJfQorCXNwaW5fdW5sb2NrKCZmcm9udC0+cXVldWVfbG9jayk7CisKKwlyZXR1cm4gISF2YjsKK30KKworLyogY2hlY2sgaWYgdGhlIHZpZGVvJ3MgYnVmZmVyIGlzIHJlYWR5ICovCitzdGF0aWMgYm9vbCBnZXRfdmlkZW9fZnJhbWUoc3RydWN0IGZyb250X2ZhY2UgKmZyb250LCBzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJaW50IG5lZWRfaW5pdCA9IDA7CisJYm9vbCByZXQgPSB0cnVlOworCisJcmV0ID0gZ2V0X2ZyYW1lKGZyb250LCAmbmVlZF9pbml0KTsKKwlpZiAocmV0ICYmIG5lZWRfaW5pdCkKKwkJaW5pdF9jb3B5KHZpZGVvLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzdWJtaXRfZnJhbWUoc3RydWN0IGZyb250X2ZhY2UgKmZyb250KQoreworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiID0gZnJvbnQtPmN1cnJfZnJhbWU7CisKKwlpZiAodmIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZnJvbnQtPmN1cnJfZnJhbWUJPSBOVUxMOworCXZiLT5zdGF0ZQkJPSBWSURFT0JVRl9ET05FOworCXZiLT5maWVsZF9jb3VudCsrOworCWRvX2dldHRpbWVvZmRheSgmdmItPnRzKTsKKworCXdha2VfdXAoJnZiLT5kb25lKTsKK30KKworLyoKKyAqIEEgZnJhbWUgaXMgY29tcG9zZWQgb2YgdHdvIGZpZWxkcy4gSWYgd2UgcmVjZWl2ZSBhbGwgdGhlIHR3byBmaWVsZHMsCisgKiBjYWxsIHRoZSAgc3VibWl0X2ZyYW1lKCkgdG8gc3VibWl0IHRoZSB3aG9sZSBmcmFtZSB0byBhcHBsaWNhdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIGVuZF9maWVsZChzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJLyogbG9ncyh2aWRlby0+ZnJvbnQpOyAqLworCWlmICgxID09IHZpZGVvLT5maWVsZF9jb3VudCkKKwkJc3VibWl0X2ZyYW1lKHZpZGVvLT5mcm9udCk7CisJZWxzZQorCQlpbml0X2NvcHkodmlkZW8sIDEpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3ZpZGVvX2RhdGEoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvLCBjaGFyICpzcmMsCisJCQkJdW5zaWduZWQgaW50IGNvdW50KQoreworI2RlZmluZSBjb3B5X2RhdGEobGVuKSAgXAorCWRvIHsgXAorCQlpZiAoKyt2aWRlby0+bGluZXNfY29waWVkID4gdmlkZW8tPmxpbmVzX3Blcl9maWVsZCkgXAorCQkJZ290byBvdmVyZmxvdzsgXAorCQltZW1jcHkodmlkZW8tPmRzdCwgc3JjLCBsZW4pO1wKKwkJdmlkZW8tPmRzdCArPSBsZW4gKyB2aWRlby0+bGluZXNfc2l6ZTsgXAorCQlzcmMgKz0gbGVuOyBcCisJCWNvdW50IC09IGxlbjsgXAorCSB9IHdoaWxlICgwKQorCisJd2hpbGUgKGNvdW50ICYmIGNvdW50ID49IHZpZGVvLT5saW5lc19zaXplKSB7CisJCWlmICh2aWRlby0+cHJldl9sZWZ0KSB7CisJCQljb3B5X2RhdGEodmlkZW8tPnByZXZfbGVmdCk7CisJCQl2aWRlby0+cHJldl9sZWZ0ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNvcHlfZGF0YSh2aWRlby0+bGluZXNfc2l6ZSk7CisJfQorCWlmIChjb3VudCAmJiBjb3VudCA8IHZpZGVvLT5saW5lc19zaXplKSB7CisJCW1lbWNweSh2aWRlby0+ZHN0LCBzcmMsIGNvdW50KTsKKworCQl2aWRlby0+cHJldl9sZWZ0ID0gdmlkZW8tPmxpbmVzX3NpemUgLSBjb3VudDsKKwkJdmlkZW8tPmRzdCArPSBjb3VudDsKKwl9CisJcmV0dXJuOworCitvdmVyZmxvdzoKKwllbmRfZmllbGQodmlkZW8pOworfQorCitzdGF0aWMgdm9pZCBjaGVja190cmFpbGVyKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbywgY2hhciAqc3JjLCBpbnQgY291bnQpCit7CisJc3RydWN0IHZiaV9kYXRhICp2YmkgPSB2aWRlby0+dmJpOworCWludCBvZmZzZXQ7IC8qIHRyYWlsZXIncyBvZmZzZXQgKi8KKwljaGFyICpidWY7CisKKwlvZmZzZXQgPSAodmlkZW8tPmNvbnRleHQucGl4LnNpemVpbWFnZSAvIDIgKyB2YmktPnZiaV9zaXplIC8gMikKKwkJLSAodmJpLT5jb3BpZWQgKyB2aWRlby0+bGluZXNfc2l6ZSAqIHZpZGVvLT5saW5lc19jb3BpZWQpOworCWlmICh2aWRlby0+cHJldl9sZWZ0KQorCQlvZmZzZXQgLT0gKHZpZGVvLT5saW5lc19zaXplIC0gdmlkZW8tPnByZXZfbGVmdCk7CisKKwlpZiAob2Zmc2V0ID4gY291bnQgfHwgb2Zmc2V0IDw9IDApCisJCWdvdG8gc2hvcnRfcGFja2FnZTsKKworCWJ1ZiA9IHNyYyArIG9mZnNldDsKKworCS8qIHRyYWlsZXIgOiAoVkZIUykgKyBVMzIgKyBVMzIgKyBmaWVsZF9udW0gKi8KKwlpZiAoIXN0cm5jbXAoYnVmLCAiVkZIUyIsIDQpKSB7CisJCWludCBmaWVsZF9udW0gPSAqKCh1MzIgKikoYnVmICsgMTIpKTsKKworCQlpZiAoKGZpZWxkX251bSAmIDEpIF4gdmlkZW8tPmZpZWxkX2NvdW50KSB7CisJCQlpbml0X2NvcHkodmlkZW8sIHZpZGVvLT5maWVsZF9jb3VudCk7CisJCQlyZXR1cm47CisJCX0KKwkJY29weV92aWRlb19kYXRhKHZpZGVvLCBzcmMsIG9mZnNldCk7CisJfQorc2hvcnRfcGFja2FnZToKKwllbmRfZmllbGQodmlkZW8pOworfQorCisvKiA9PT09PT09PT09ICBDaGVjayB0aGlzIG1vcmUgY2FyZWZ1bGx5ISA9PT09PT09PT09PSAqLworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdmJpX2RhdGEoc3RydWN0IHZiaV9kYXRhICp2YmksCisJCQkJY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdmJpLT5mcm9udDsKKworCWlmIChmcm9udCAmJiBnZXRfZnJhbWUoZnJvbnQsIE5VTEwpKSB7CisJCWNoYXIgKmJ1ZiA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoZnJvbnQtPmN1cnJfZnJhbWUpOworCisJCWlmICh2YmktPnZpZGVvLT5maWVsZF9jb3VudCkKKwkJCWJ1ZiArPSAodmJpLT52Ymlfc2l6ZSAvIDIpOworCQltZW1jcHkoYnVmICsgdmJpLT5jb3BpZWQsIHNyYywgY291bnQpOworCX0KKwl2YmktPmNvcGllZCArPSBjb3VudDsKK30KKworLyoKKyAqIENvcHkgdGhlIG5vcm1hbCBkYXRhIChWQkkgb3IgVklERU8pIHdpdGhvdXQgdGhlIHRyYWlsZXIuCisgKiBWQkkgaXMgbm90IGludGVybGFjZWQsIHdoaWxlIFZJREVPIGlzIGludGVybGFjZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3ZiaV92aWRlb19kYXRhKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbywKKwkJCQljaGFyICpzcmMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdmJpX2RhdGEgKnZiaSA9IHZpZGVvLT52Ymk7CisJdW5zaWduZWQgaW50IHZiaV9kZWx0YSA9ICh2YmktPnZiaV9zaXplIC8gMikgLSB2YmktPmNvcGllZDsKKworCWlmICh2YmlfZGVsdGEgPj0gY291bnQpIHsKKwkJY29weV92YmlfZGF0YSh2YmksIHNyYywgY291bnQpOworCX0gZWxzZSB7CisJCWlmICh2YmlfZGVsdGEpIHsKKwkJCWNvcHlfdmJpX2RhdGEodmJpLCBzcmMsIHZiaV9kZWx0YSk7CisKKwkJCS8qIHdlIHJlY2VpdmUgdGhlIHR3byBmaWVsZHMgb2YgdGhlIFZCSSovCisJCQlpZiAodmJpLT5mcm9udCAmJiB2aWRlby0+ZmllbGRfY291bnQpCisJCQkJc3VibWl0X2ZyYW1lKHZiaS0+ZnJvbnQpOworCQl9CisJCWNvcHlfdmlkZW9fZGF0YSh2aWRlbywgc3JjICsgdmJpX2RlbHRhLCBjb3VudCAtIHZiaV9kZWx0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cmJfY29tcGxldGVfYnVsayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZmcm9udC0+cGQtPnZpZGVvX2RhdGE7CisJY2hhciAqc3JjID0gKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgY291bnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXZpZGVvLT5pc19zdHJlYW1pbmcgfHwgdXJiLT5zdGF0dXMpIHsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FUFJPVE8pCisJCQlnb3RvIHJlc2VuZF9pdDsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWdldF92aWRlb19mcmFtZShmcm9udCwgdmlkZW8pKQorCQlnb3RvIHJlc2VuZF9pdDsKKworCWlmIChjb3VudCA9PSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCWNvcHlfdmJpX3ZpZGVvX2RhdGEodmlkZW8sIHNyYywgY291bnQpOworCWVsc2UKKwkJY2hlY2tfdHJhaWxlcih2aWRlbywgc3JjLCBjb3VudCk7CisKK3Jlc2VuZF9pdDoKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpCisJCWxvZygiIHN1Ym1pdCBmYWlsZWQ6IGVycm9yICVkIiwgcmV0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiogZm9yIElTTyAqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEdFVF9TVUNDRVNTCQkoMCkKKyNkZWZpbmUgR0VUX1RSQUlMRVIJCSgxKQorI2RlZmluZSBHRVRfVE9PX01VQ0hfQlVCQkxFCSgyKQorI2RlZmluZSBHRVRfTk9ORQkJKDMpCitzdGF0aWMgaW50IGdldF9jaHVuayhpbnQgc3RhcnQsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCWludCAqaGVhZCwgaW50ICp0YWlsLCBpbnQgKmJ1YmJsZV9lcnIpCit7CisJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKnBrdCA9IE5VTEw7CisJaW50IHJldCA9IEdFVF9TVUNDRVNTOworCisJZm9yICgqaGVhZCA9ICp0YWlsID0gLTE7IHN0YXJ0IDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgc3RhcnQrKykgeworCQlwa3QgPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tzdGFydF07CisKKwkJLyogaGFuZGxlIHRoZSBidWJibGUgb2YgdGhlIEh1YiAqLworCQlpZiAoLUVPVkVSRkxPVyA9PSBwa3QtPnN0YXR1cykgeworCQkJaWYgKCsrKmJ1YmJsZV9lcnIgPiB1cmItPm51bWJlcl9vZl9wYWNrZXRzIC8gMykKKwkJCQlyZXR1cm4gR0VUX1RPT19NVUNIX0JVQkJMRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogVGhpcyBpcyB0aGUgZ2FwICovCisJCWlmIChwa3QtPnN0YXR1cyB8fCBwa3QtPmFjdHVhbF9sZW5ndGggPD0gMAorCQkJCXx8IHBrdC0+YWN0dWFsX2xlbmd0aCA+IElTT19QS1RfU0laRSkgeworCQkJaWYgKCpoZWFkICE9IC0xKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBhIGdvb2QgaXNvY2hyb25vdXMgcGFja2V0ICovCisJCWlmIChwa3QtPmFjdHVhbF9sZW5ndGggPT0gSVNPX1BLVF9TSVpFKSB7CisJCQlpZiAoKmhlYWQgPT0gLTEpCisJCQkJKmhlYWQgPSBzdGFydDsKKwkJCSp0YWlsID0gc3RhcnQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHRyYWlsZXIgaXMgaGVyZSAqLworCQlpZiAocGt0LT5hY3R1YWxfbGVuZ3RoIDwgSVNPX1BLVF9TSVpFKSB7CisJCQlpZiAoKmhlYWQgPT0gLTEpIHsKKwkJCQkqaGVhZCA9IHN0YXJ0OworCQkJCSp0YWlsID0gc3RhcnQ7CisJCQkJcmV0dXJuIEdFVF9UUkFJTEVSOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoKmhlYWQgPT0gLTEgJiYgKnRhaWwgPT0gLTEpCisJCXJldCA9IEdFVF9OT05FOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB8X198LS0tLS0tfF9fX3wtLS0tLXxfX19fX19ffAorICogICAgICAgXiAgICAgICAgICBeCisgKiAgICAgICB8ICAgICAgICAgIHwKKyAqICAgICAgZ2FwICAgICAgICBnYXAKKyAqLworc3RhdGljIHZvaWQgdXJiX2NvbXBsZXRlX2lzbyhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZmcm9udC0+cGQtPnZpZGVvX2RhdGE7CisJaW50IGJ1YmJsZV9lcnIgPSAwLCBoZWFkID0gMCwgdGFpbCA9IDA7CisJY2hhciAqc3JjID0gKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghdmlkZW8tPmlzX3N0cmVhbWluZykKKwkJcmV0dXJuOworCisJZG8geworCQlpZiAoIWdldF92aWRlb19mcmFtZShmcm9udCwgdmlkZW8pKQorCQkJZ290byBvdXQ7CisKKwkJc3dpdGNoIChnZXRfY2h1bmsoaGVhZCwgdXJiLCAmaGVhZCwgJnRhaWwsICZidWJibGVfZXJyKSkgeworCQljYXNlIEdFVF9TVUNDRVNTOgorCQkJY29weV92YmlfdmlkZW9fZGF0YSh2aWRlbywgc3JjICsgKGhlYWQgKiBJU09fUEtUX1NJWkUpLAorCQkJCQkodGFpbCAtIGhlYWQgKyAxKSAqIElTT19QS1RfU0laRSk7CisJCQlicmVhazsKKwkJY2FzZSBHRVRfVFJBSUxFUjoKKwkJCWNoZWNrX3RyYWlsZXIodmlkZW8sIHNyYyArIChoZWFkICogSVNPX1BLVF9TSVpFKSwKKwkJCQkJSVNPX1BLVF9TSVpFKTsKKwkJCWJyZWFrOworCQljYXNlIEdFVF9OT05FOgorCQkJZ290byBvdXQ7CisJCWNhc2UgR0VUX1RPT19NVUNIX0JVQkJMRToKKwkJCWxvZygiXHQgV2UgZ290IHRvbyBtdWNoIGJ1YmJsZSIpOworCQkJc2NoZWR1bGVfd29yaygmdmlkZW8tPmJ1YmJsZV93b3JrKTsKKwkJCXJldHVybjsKKwkJfQorCX0gd2hpbGUgKGhlYWQgPSB0YWlsICsgMSwgaGVhZCA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCitvdXQ6CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQlsb2coInVzYl9zdWJtaXRfdXJiIGVyciA6ICVkIiwgcmV0KTsKK30KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gWyAgZW5kICBdID09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgcHJlcGFyZV9pc29fdXJiKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHZpZGVvLT5wZC0+dWRldjsKKwlpbnQgaTsKKworCWlmICh2aWRlby0+dXJiX2FycmF5WzBdKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBTQlVGX05VTTsgaSsrKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKwkJdm9pZCAqbWVtOworCQlpbnQgajsKKworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKFBLX1BFUl9VUkIsIEdGUF9LRVJORUwpOworCQlpZiAodXJiID09IE5VTEwpCisJCQlnb3RvIG91dDsKKworCQl2aWRlby0+dXJiX2FycmF5W2ldID0gdXJiOworCQltZW0gPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsCisJCQkJCUlTT19QS1RfU0laRSAqIFBLX1BFUl9VUkIsCisJCQkJCUdGUF9LRVJORUwsCisJCQkJCSZ1cmItPnRyYW5zZmVyX2RtYSk7CisKKwkJdXJiLT5jb21wbGV0ZQk9IHVyYl9jb21wbGV0ZV9pc287CS8qIGhhbmRsZXIgKi8KKwkJdXJiLT5kZXYJPSB1ZGV2OworCQl1cmItPmNvbnRleHQJPSB2aWRlby0+ZnJvbnQ7CisJCXVyYi0+cGlwZQk9IHVzYl9yY3Zpc29jcGlwZSh1ZGV2LAorCQkJCQkJdmlkZW8tPmVuZHBvaW50X2FkZHIpOworCQl1cmItPmludGVydmFsCT0gMTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzCT0gUEtfUEVSX1VSQjsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIJPSBtZW07CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFBLX1BFUl9VUkIgKiBJU09fUEtUX1NJWkU7CisKKwkJZm9yIChqID0gMDsgaiA8IFBLX1BFUl9VUkI7IGorKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBJU09fUEtUX1NJWkUgKiBqOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBJU09fUEtUX1NJWkU7CisJCX0KKwl9CisJcmV0dXJuIDA7CitvdXQ6CisJZm9yICg7IGkgPiAwOyBpLS0pCisJCTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyogcmV0dXJuIHRoZSBzdWNjZWVkZWQgbnVtYmVyIG9mIHRoZSBhbGxvY2F0aW9uICovCitpbnQgYWxsb2NfYnVsa191cmJzX2dlbmVyaWMoc3RydWN0IHVyYiAqKnVyYl9hcnJheSwgaW50IG51bSwKKwkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBlcF9hZGRyLAorCQkJaW50IGJ1Zl9zaXplLCBnZnBfdCBnZnBfZmxhZ3MsCisJCQl1c2JfY29tcGxldGVfdCBjb21wbGV0ZV9mbiwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdm9pZCAqbWVtOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgZ2ZwX2ZsYWdzKTsKKwkJaWYgKHVyYiA9PSBOVUxMKQorCQkJcmV0dXJuIGk7CisKKwkJbWVtID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBidWZfc2l6ZSwgZ2ZwX2ZsYWdzLAorCQkJCQkmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAobWVtID09IE5VTEwpCisJCQlyZXR1cm4gaTsKKworCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVkZXYsIHVzYl9yY3ZidWxrcGlwZSh1ZGV2LCBlcF9hZGRyKSwKKwkJCQltZW0sIGJ1Zl9zaXplLCBjb21wbGV0ZV9mbiwgY29udGV4dCk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCXVyYl9hcnJheVtpXSA9IHVyYjsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3ZvaWQgZnJlZV9hbGxfdXJiX2dlbmVyaWMoc3RydWN0IHVyYiAqKnVyYl9hcnJheSwgaW50IG51bSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJdXJiID0gdXJiX2FycmF5W2ldOworCQlpZiAodXJiKSB7CisJCQl1c2JfYnVmZmVyX2ZyZWUodXJiLT5kZXYsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCXVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJdXJiX2FycmF5W2ldID0gTlVMTDsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwcmVwYXJlX2J1bGtfdXJiKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlpZiAodmlkZW8tPnVyYl9hcnJheVswXSkKKwkJcmV0dXJuIDA7CisKKwlhbGxvY19idWxrX3VyYnNfZ2VuZXJpYyh2aWRlby0+dXJiX2FycmF5LCBTQlVGX05VTSwKKwkJCXZpZGVvLT5wZC0+dWRldiwgdmlkZW8tPmVuZHBvaW50X2FkZHIsCisJCQkweDIwMDAsIEdGUF9LRVJORUwsCisJCQl1cmJfY29tcGxldGVfYnVsaywgdmlkZW8tPmZyb250KTsKKwlyZXR1cm4gMDsKK30KKworLyogZnJlZSB0aGUgVVJCcyAqLworc3RhdGljIHZvaWQgZnJlZV9hbGxfdXJiKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlmcmVlX2FsbF91cmJfZ2VuZXJpYyh2aWRlby0+dXJiX2FycmF5LCBTQlVGX05VTSk7Cit9CisKK3N0YXRpYyB2b2lkIHBkX2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJdmlkZW9idWZfdm1hbGxvY19mcmVlKHZiKTsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgdm9pZCBwZF9idWZfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBxLT5wcml2X2RhdGE7CisJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJmZyb250LT5hY3RpdmUpOworfQorCitzdGF0aWMgaW50IHBkX2J1Zl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gcS0+cHJpdl9kYXRhOworCWludCByYzsKKworCXN3aXRjaCAoZnJvbnQtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gdmItPnN0YXRlKSB7CisJCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXg7CisKKwkJCXBpeCA9ICZmcm9udC0+cGQtPnZpZGVvX2RhdGEuY29udGV4dC5waXg7CisJCQl2Yi0+c2l6ZQk9IHBpeC0+c2l6ZWltYWdlOyAvKiByZWFsIGZyYW1lIHNpemUgKi8KKwkJCXZiLT53aWR0aAk9IHBpeC0+d2lkdGg7CisJCQl2Yi0+aGVpZ2h0CT0gcGl4LT5oZWlnaHQ7CisJCQlyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCB2YiwgTlVMTCk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6CisJCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IHZiLT5zdGF0ZSkgeworCQkJdmItPnNpemUJPSBmcm9udC0+cGQtPnZiaV9kYXRhLnZiaV9zaXplOworCQkJcmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgdmIsIE5VTEwpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlyZXR1cm4gcmM7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXZiLT5maWVsZCA9IGZpZWxkOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCXJldHVybiAwOworfQorCitpbnQgZmlyZV9hbGxfdXJiKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKK3sKKwlpbnQgaSwgcmV0OworCisJdmlkZW8tPmlzX3N0cmVhbWluZyA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0JVRl9OVU07IGkrKykgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih2aWRlby0+dXJiX2FycmF5W2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCkKKwkJCWxvZygiKCVkKSBmYWlsZWQ6IGVycm9yICVkIiwgaSwgcmV0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdGFydF92aWRlb19zdHJlYW0oc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisJczMyIGNtZF9zdGF0dXM7CisKKwlzZW5kX3NldF9yZXEocGQsIFRBS0VfUkVRVUVTVCwgMCwgJmNtZF9zdGF0dXMpOworCXNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCBUTEdfVFVORV9QTEFZX1NWQ19TVEFSVCwgJmNtZF9zdGF0dXMpOworCisJaWYgKHBkLT5jdXJfdHJhbnNmZXJfbW9kZSkgeworCQlwcmVwYXJlX2lzb191cmIodmlkZW8pOworCQlJTklUX1dPUksoJnZpZGVvLT5idWJibGVfd29yaywgaXNvX2J1YmJsZV9oYW5kbGVyKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgYnVsayBtb2RlIGRvZXMgbm90IG5lZWQgYSBidWJibGUgaGFuZGxlciAqLworCQlwcmVwYXJlX2J1bGtfdXJiKHZpZGVvKTsKKwl9CisJZmlyZV9hbGxfdXJiKHZpZGVvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZF9idWZfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAorCQkgICAgICAgdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkCT0gZnJvbnQtPnBkOworCisJc3dpdGNoIChmcm9udC0+dHlwZSkgeworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7CisJCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJnZpZGVvLT5jb250ZXh0LnBpeDsKKworCQkqc2l6ZSA9IFBBR0VfQUxJR04ocGl4LT5zaXplaW1hZ2UpOy8qIHBhZ2UgYWxpZ25lZCBmcmFtZSBzaXplICovCisJCWlmICgqY291bnQgPCA0KQorCQkJKmNvdW50ID0gNDsKKwkJaWYgKDEpIHsKKwkJCS8qIHNhbWUgaW4gZGlmZmVyZW50IGFsdGVyc2V0dGluZyAqLworCQkJdmlkZW8tPmVuZHBvaW50X2FkZHIJPSAweDgyOworCQkJdmlkZW8tPnZiaQkJPSAmcGQtPnZiaV9kYXRhOworCQkJdmlkZW8tPnZiaS0+dmlkZW8JPSB2aWRlbzsKKwkJCXZpZGVvLT5wZAkJPSBwZDsKKwkJCXZpZGVvLT5saW5lc19wZXJfZmllbGQJPSBwaXgtPmhlaWdodCAvIDI7CisJCQl2aWRlby0+bGluZXNfc2l6ZQk9IHBpeC0+d2lkdGggKiAyOworCQkJdmlkZW8tPmZyb250IAkJPSBmcm9udDsKKwkJfQorCQlyZXR1cm4gc3RhcnRfdmlkZW9fc3RyZWFtKHBkKTsKKwl9CisKKwljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6IHsKKwkJc3RydWN0IHZiaV9kYXRhICp2YmkgPSAmcGQtPnZiaV9kYXRhOworCisJCSpzaXplID0gUEFHRV9BTElHTih2YmktPnZiaV9zaXplKTsKKwkJbG9nKCJzaXplIDogJWQiLCAqc2l6ZSk7CisJCWlmICgqY291bnQgPT0gMCkKKwkJCSpjb3VudCA9IDQ7CisJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHBkX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCAgICAgID0gcGRfYnVmX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICA9IHBkX2J1Zl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICA9IHBkX2J1Zl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgICAgPSBwZF9idWZfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCWlmIChBUlJBWV9TSVpFKHBvc2VpZG9uX2Zvcm1hdHMpIDw9IGYtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmLT50eXBlCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlmLT5mbGFncwk9IDA7CisJZi0+cGl4ZWxmb3JtYXQJPSBwb3NlaWRvbl9mb3JtYXRzW2YtPmluZGV4XS5mb3VyY2M7CisJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCBwb3NlaWRvbl9mb3JtYXRzW2YtPmluZGV4XS5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKworCWxvZ3MoZnJvbnQpOworCWYtPmZtdC5waXggPSBwZC0+dmlkZW9fZGF0YS5jb250ZXh0LnBpeDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFZMQyBjYWxscyBWSURJT0NfU19TVEQgYmVmb3JlIFZJRElPQ19TX0ZNVCwgd2hpbGUKKyAqIE1wbGF5ZXIgY2FsbHMgdGhlbSBpbiB0aGUgcmV2ZXJzZSBvcmRlci4KKyAqLworc3RhdGljIGludCBwZF92aWRpb2Nfc19mbXQoc3RydWN0IHBvc2VpZG9uICpwZCwgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4KQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbwk9ICZwZC0+dmlkZW9fZGF0YTsKKwlzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0ID0gJnZpZGVvLT5jb250ZXh0OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeF9kZWYJPSAmY29udGV4dC0+cGl4OworCXMzMiByZXQgPSAwLCBjbWRfc3RhdHVzID0gMCwgdmlkX3Jlc29sOworCisJLyogc2V0IHRoZSBwaXhlbCBmb3JtYXQgdG8gZmlybXdhcmUgKi8KKwlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfUkdCNTY1KSB7CisJCXZpZF9yZXNvbCA9IFRMR19UVU5FUl9WSURfRk9STUFUX1JHQl81NjU7CisJfSBlbHNlIHsKKwkJcGl4LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOworCQl2aWRfcmVzb2wgPSBUTEdfVFVORVJfVklEX0ZPUk1BVF9ZVVY7CisJfQorCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fU1RSRUFNX0ZNVF9TRUwsCisJCQkJdmlkX3Jlc29sLCAmY21kX3N0YXR1cyk7CisKKwkvKiBzZXQgdGhlIHJlc29sdXRpb24gdG8gZmlybXdhcmUgKi8KKwl2aWRfcmVzb2wgPSBUTEdfVFVORV9WSURfUkVTXzcyMDsKKwlzd2l0Y2ggKHBpeC0+d2lkdGgpIHsKKwljYXNlIDcwNDoKKwkJdmlkX3Jlc29sID0gVExHX1RVTkVfVklEX1JFU183MDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBpeC0+d2lkdGggPSA3MjA7CisJY2FzZSA3MjA6CisJCWJyZWFrOworCX0KKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBWSURFT19ST1NPTFVfU0VMLAorCQkJCXZpZF9yZXNvbCwgJmNtZF9zdGF0dXMpOworCWlmIChyZXQgfHwgY21kX3N0YXR1cykgeworCQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlwaXhfZGVmLT5waXhlbGZvcm1hdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7IC8qIHNhdmUgaXQgKi8KKwlwaXgtPmhlaWdodCA9IChjb250ZXh0LT50dm5vcm1pZCAmIFY0TDJfU1REXzUyNV82MCkgPyAgNDgwIDogNTc2OworCisJLyogQ29tcGFyZSB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmcgKi8KKwlpZiAoKHBpeF9kZWYtPndpZHRoICE9IHBpeC0+d2lkdGgpCisJCXx8IChwaXhfZGVmLT5oZWlnaHQgIT0gcGl4LT5oZWlnaHQpKSB7CisJCXBpeF9kZWYtPndpZHRoCQk9IHBpeC0+d2lkdGg7CisJCXBpeF9kZWYtPmhlaWdodAkJPSBwaXgtPmhlaWdodDsKKwkJcGl4X2RlZi0+Ynl0ZXNwZXJsaW5lCT0gcGl4LT53aWR0aCAqIDI7CisJCXBpeF9kZWYtPnNpemVpbWFnZSAJPSBwaXgtPndpZHRoICogcGl4LT5oZWlnaHQgKiAyOworCX0KKwkqcGl4ID0gKnBpeF9kZWY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250CT0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZAkJPSBmcm9udC0+cGQ7CisKKwlsb2dzKGZyb250KTsKKwkvKiBzdG9wIFZCSSBoZXJlICovCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAhPSBmLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlpZiAocGQtPmZpbGVfZm9yX3N0cmVhbSA9PSBOVUxMKQorCQlwZC0+ZmlsZV9mb3Jfc3RyZWFtID0gZmlsZTsKKwllbHNlIGlmIChmaWxlICE9IHBkLT5maWxlX2Zvcl9zdHJlYW0pIHsKKwkJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBkX3ZpZGlvY19zX2ZtdChwZCwgJmYtPmZtdC5waXgpOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92Ymkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqdjRsMl9mKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udAk9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQJCT0gZnJvbnQtPnBkOworCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKnZiaV9mbXQJPSAmdjRsMl9mLT5mbXQudmJpOworCisJdmJpX2ZtdC0+c2FtcGxlc19wZXJfbGluZQk9IDcyMCAqIDI7CisJdmJpX2ZtdC0+c2FtcGxpbmdfcmF0ZQkJPSA2NzUwMDAwICogNDsKKwl2YmlfZm10LT5zYW1wbGVfZm9ybWF0CQk9IFY0TDJfUElYX0ZNVF9HUkVZOworCXZiaV9mbXQtPm9mZnNldAkJCT0gNjQgKiA0OyAgLypGSVhNRTogd2h5IG9mZnNldCAqLworCWlmIChwZC0+dmlkZW9fZGF0YS5jb250ZXh0LnR2bm9ybWlkICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCXZiaV9mbXQtPnN0YXJ0WzBdID0gMTA7CisJCXZiaV9mbXQtPnN0YXJ0WzFdID0gMjY0OworCQl2YmlfZm10LT5jb3VudFswXSA9IFY0TF9OVFNDX1ZCSV9MSU5FUzsKKwkJdmJpX2ZtdC0+Y291bnRbMV0gPSBWNExfTlRTQ19WQklfTElORVM7CisJfSBlbHNlIHsKKwkJdmJpX2ZtdC0+c3RhcnRbMF0gPSA2OworCQl2YmlfZm10LT5zdGFydFsxXSA9IDMxNDsKKwkJdmJpX2ZtdC0+Y291bnRbMF0gPSBWNExfUEFMX1ZCSV9MSU5FUzsKKwkJdmJpX2ZtdC0+Y291bnRbMV0gPSBWNExfUEFMX1ZCSV9MSU5FUzsKKwl9CisJdmJpX2ZtdC0+ZmxhZ3MgPSBWNEwyX1ZCSV9VTlNZTkM7CisJbG9ncyhmcm9udCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3N0ZChzdHJ1Y3QgcG9zZWlkb24gKnBkLCB2NGwyX3N0ZF9pZCAqbm9ybSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisJc3RydWN0IHZiaV9kYXRhICp2YmkJPSAmcGQtPnZiaV9kYXRhOworCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQ7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OworCXMzMiBpLCByZXQgPSAwLCBjbWRfc3RhdHVzLCBwYXJhbTsKKwlpbnQgaGVpZ2h0OworCisJZm9yIChpID0gMDsgaSA8IFBPU0VJRE9OX1RWTk9STVM7IGkrKykgeworCQlpZiAoKm5vcm0gJiBwb3NlaWRvbl90dm5vcm1zW2ldLnY0bDJfaWQpIHsKKwkJCXBhcmFtID0gcG9zZWlkb25fdHZub3Jtc1tpXS50bGdfdHZub3JtOworCQkJbG9nKCJuYW1lIDogJXMiLCBwb3NlaWRvbl90dm5vcm1zW2ldLm5hbWUpOworCQkJZ290byBmb3VuZDsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK2ZvdW5kOgorCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1NURF9TRUwsIHBhcmFtLCAmY21kX3N0YXR1cyk7CisJaWYgKHJldCB8fCBjbWRfc3RhdHVzKQorCQlnb3RvIG91dDsKKworCS8qIFNldCB2Ymkgc2l6ZSBhbmQgY2hlY2sgdGhlIGhlaWdodCBvZiB0aGUgZnJhbWUgKi8KKwljb250ZXh0ID0gJnZpZGVvLT5jb250ZXh0OworCWNvbnRleHQtPnR2bm9ybWlkID0gcG9zZWlkb25fdHZub3Jtc1tpXS52NGwyX2lkOworCWlmIChjb250ZXh0LT50dm5vcm1pZCAmIFY0TDJfU1REXzUyNV82MCkgeworCQl2YmktPnZiaV9zaXplID0gVjRMX05UU0NfVkJJX0ZSQU1FU0laRTsKKwkJaGVpZ2h0ID0gNDgwOworCX0gZWxzZSB7CisJCXZiaS0+dmJpX3NpemUgPSBWNExfUEFMX1ZCSV9GUkFNRVNJWkU7CisJCWhlaWdodCA9IDU3NjsKKwl9CisKKwlwaXggPSAmY29udGV4dC0+cGl4OworCWlmIChwaXgtPmhlaWdodCAhPSBoZWlnaHQpIHsKKwkJcGl4LT5oZWlnaHQJPSBoZWlnaHQ7CisJCXBpeC0+c2l6ZWltYWdlIAk9IHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodCAqIDI7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpub3JtKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCWxvZ3MoZnJvbnQpOworCXJldHVybiBzZXRfc3RkKGZyb250LT5wZCwgbm9ybSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW4pCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisKKwlpZiAoaW4tPmluZGV4IDwgMCB8fCBpbi0+aW5kZXggPj0gUE9TRUlET05fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJjcHkoaW4tPm5hbWUsIHBkX2lucHV0c1tpbi0+aW5kZXhdLm5hbWUpOworCWluLT50eXBlICA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKKworCS8qCisJICogdGhlIGF1ZGlvIGlucHV0IGluZGV4IG1peGVkIHdpdGggdGhpcyB2aWRlbyBpbnB1dCwKKwkgKiBQb3NlaWRvbiBvbmx5IGhhdmUgb25lIGF1ZGlvL3ZpZGVvLCBzZXQgdG8gIjAiCisJICovCisJaW4tPmF1ZGlvc2V0CT0gMDsKKwlpbi0+dHVuZXIJPSAwOworCWluLT5zdGQJCT0gVjRMMl9TVERfQUxMOworCWluLT5zdGF0dXMJPSAwOworCWxvZ3MoZnJvbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7CisJc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCA9ICZwZC0+dmlkZW9fZGF0YS5jb250ZXh0OworCisJbG9ncyhmcm9udCk7CisJKmkgPSBjb250ZXh0LT5zaWdfaW5kZXg7CisJcmV0dXJuIDA7Cit9CisKKy8qIFdlIGNhbiBzdXBwb3J0IHNldmVyYWwgaW5wdXRzICovCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGkpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKwlzMzIgcmV0LCBjbWRfc3RhdHVzOworCisJaWYgKGkgPCAwIHx8IGkgPj0gUE9TRUlET05fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFNHTkxfU1JDX1NFTCwKKwkJCXBkX2lucHV0c1tpXS50bGdfc3JjLCAmY21kX3N0YXR1cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBkLT52aWRlb19kYXRhLmNvbnRleHQuc2lnX2luZGV4ID0gaTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwb3NlaWRvbl9jb250cm9sICpjaGVja19jb250cm9sX2lkKF9fdTMyIGlkKQoreworCXN0cnVjdCBwb3NlaWRvbl9jb250cm9sICpjb250cm9sID0gJmNvbnRyb2xzWzBdOworCWludCBhcnJheV9zaXplID0gQVJSQVlfU0laRShjb250cm9scyk7CisKKwlmb3IgKDsgY29udHJvbCA8ICZjb250cm9sc1thcnJheV9zaXplXTsgY29udHJvbCsrKQorCQlpZiAoY29udHJvbC0+djRsMl9jdHJsLmlkICA9PSBpZCkKKwkJCXJldHVybiBjb250cm9sOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICphKQoreworCXN0cnVjdCBwb3NlaWRvbl9jb250cm9sICpjb250cm9sID0gTlVMTDsKKworCWNvbnRyb2wgPSBjaGVja19jb250cm9sX2lkKGEtPmlkKTsKKwlpZiAoIWNvbnRyb2wpCisJCXJldHVybiAtRUlOVkFMOworCisJKmEgPSBjb250cm9sLT52NGwyX2N0cmw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKwlzdHJ1Y3QgcG9zZWlkb25fY29udHJvbCAqY29udHJvbCA9IE5VTEw7CisJc3RydWN0IHR1bmVyX2N1c3RvbV9wYXJhbWV0ZXJfcyB0dW5lcl9wYXJhbTsKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1czsKKworCWNvbnRyb2wgPSBjaGVja19jb250cm9sX2lkKGN0cmwtPmlkKTsKKwlpZiAoIWNvbnRyb2wpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXJldCA9IHNlbmRfZ2V0X3JlcShwZCwgVFVORVJfQ1VTVE9NX1BBUkFNRVRFUiwgY29udHJvbC0+dmNfaWQsCisJCQkmdHVuZXJfcGFyYW0sICZjbWRfc3RhdHVzLCBzaXplb2YodHVuZXJfcGFyYW0pKTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKworCWlmIChyZXQgfHwgY21kX3N0YXR1cykKKwkJcmV0dXJuIC0xOworCisJY3RybC0+dmFsdWUgPSB0dW5lcl9wYXJhbS5wYXJhbV92YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqYSkKK3sKKwlzdHJ1Y3QgdHVuZXJfY3VzdG9tX3BhcmFtZXRlcl9zIHBhcmFtID0gezB9OworCXN0cnVjdCBwb3NlaWRvbl9jb250cm9sICpjb250cm9sID0gTlVMTDsKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQJPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkCQk9IGZyb250LT5wZDsKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cywgcGFyYW1zOworCisJY29udHJvbCA9IGNoZWNrX2NvbnRyb2xfaWQoYS0+aWQpOworCWlmICghY29udHJvbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJhbS5wYXJhbV92YWx1ZSA9IGEtPnZhbHVlOworCXBhcmFtLnBhcmFtX2lkCT0gY29udHJvbC0+dmNfaWQ7CisJcGFyYW1zID0gKihzMzIgKikmcGFyYW07IC8qIHRlbXAgY29kZSAqLworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVFVORVJfQ1VTVE9NX1BBUkFNRVRFUiwgcGFyYW1zLCAmY21kX3N0YXR1cyk7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUQUtFX1JFUVVFU1QsIDAsICZjbWRfc3RhdHVzKTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dChIWi80KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBBdWRpbyBpb2N0bHMgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWlmICgwICE9IGEtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXN0cmNweShhLT5uYW1lLCAiVVNCIGF1ZGlvIGluIik7CisJLypQb3NlaWRvbiBoYXZlIG5vIEFWTCBmdW5jdGlvbi4qLworCWEtPm1vZGUgPSAwOworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlzdHJjcHkoYS0+bmFtZSwgIlVTQiBhdWRpbyBpbiIpOworCWEtPm1vZGUgPSAwOworCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlyZXR1cm4gKDAgPT0gYS0+aW5kZXgpID8gMCA6IC1FSU5WQUw7Cit9CisKKy8qIFR1bmVyIGlvY3RscyAqLworc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQJPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkCQk9IGZyb250LT5wZDsKKwlzdHJ1Y3QgdHVuZXJfYXR2X3NpZ19zdGF0X3MgYXR2X3N0YXQ7CisJczMyIGNvdW50ID0gNSwgcmV0LCBjbWRfc3RhdHVzOworCWludCBpbmRleDsKKworCWlmICgwICE9IHR1bmVyLT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0FOQUxPR19UViwKKwkJCQkmYXR2X3N0YXQsICZjbWRfc3RhdHVzLCBzaXplb2YoYXR2X3N0YXQpKTsKKworCXdoaWxlIChhdHZfc3RhdC5zaWdfbG9ja19idXN5ICYmIGNvdW50LS0gJiYgIXJldCkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKKworCQlyZXQgPSBzZW5kX2dldF9yZXEocGQsIFRVTkVSX1NUQVRVUywgVExHX01PREVfQU5BTE9HX1RWLAorCQkJCSZhdHZfc3RhdCwgJmNtZF9zdGF0dXMsIHNpemVvZihhdHZfc3RhdCkpOworCX0KKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKworCWlmIChkZWJ1Z19tb2RlKQorCQlsb2coIlA6JWQsUzolZCIsIGF0dl9zdGF0LnNpZ19wcmVzZW50LCBhdHZfc3RhdC5zaWdfc3RyZW5ndGgpOworCisJaWYgKHJldCB8fCBjbWRfc3RhdHVzKQorCQl0dW5lci0+c2lnbmFsID0gMDsKKwllbHNlIGlmIChhdHZfc3RhdC5zaWdfcHJlc2VudCAmJiAhYXR2X3N0YXQuc2lnX3N0cmVuZ3RoKQorCQl0dW5lci0+c2lnbmFsID0gMHhGRkZGOworCWVsc2UKKwkJdHVuZXItPnNpZ25hbCA9IChhdHZfc3RhdC5zaWdfc3RyZW5ndGggKiAyNTUgLyAxMCkgPDwgODsKKworCXN0cmNweSh0dW5lci0+bmFtZSwgIlRlbGVnZW50IFN5c3RlbXMiKTsKKwl0dW5lci0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCXR1bmVyLT5yYW5nZWxvdyA9IFRVTkVSX0ZSRVFfTUlOIC8gNjI1MDA7CisJdHVuZXItPnJhbmdlaGlnaCA9IFRVTkVSX0ZSRVFfTUFYIC8gNjI1MDA7CisJdHVuZXItPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKKwkJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOworCWluZGV4ID0gcGQtPnZpZGVvX2RhdGEuY29udGV4dC5hdWRpb19pZHg7CisJdHVuZXItPnJ4c3ViY2hhbnMgPSBwZF9hdWRpb19tb2Rlc1tpbmRleF0udjRsMl9hdWRpb19zdWI7CisJdHVuZXItPmF1ZG1vZGUgPSBwZF9hdWRpb19tb2Rlc1tpbmRleF0udjRsMl9hdWRpb19tb2RlOworCXR1bmVyLT5hZmMgPSAwOworCWxvZ3MoZnJvbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBkX3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBwb3NlaWRvbiAqcGQsIGludCBpbmRleCkKK3sKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cywgcGFyYW0sIGF1ZGlvbW9kZTsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlwYXJhbSA9IHBkX2F1ZGlvX21vZGVzW2luZGV4XS50bGdfYXVkaW9fbW9kZTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0FVRF9NT0RFLCBwYXJhbSwgJmNtZF9zdGF0dXMpOworCWF1ZGlvbW9kZSA9IGdldF9hdWRpb19zdGQocGQtPnZpZGVvX2RhdGEuY29udGV4dC50dm5vcm1pZCk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVFVORVJfQVVEX0FOQV9TVEQsIGF1ZGlvbW9kZSwKKwkJCQkmY21kX3N0YXR1cyk7CisJaWYgKCFyZXQpCisJCXBkLT52aWRlb19kYXRhLmNvbnRleHQuYXVkaW9faWR4ID0gaW5kZXg7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICphKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udAk9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQJCT0gZnJvbnQtPnBkOworCWludCBpbmRleDsKKworCWlmICgwICE9IGEtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlsb2dzKGZyb250KTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBQT1NFSURPTl9BVURJT01PRFM7IGluZGV4KyspCisJCWlmIChhLT5hdWRtb2RlID09IHBkX2F1ZGlvX21vZGVzW2luZGV4XS52NGwyX2F1ZGlvX21vZGUpCisJCQlyZXR1cm4gcGRfdmlkaW9jX3NfdHVuZXIocGQsIGluZGV4KTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7CisJc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCA9ICZwZC0+dmlkZW9fZGF0YS5jb250ZXh0OworCisJaWYgKDAgIT0gZnJlcS0+dHVuZXIpCisJCXJldHVybiAtRUlOVkFMOworCWZyZXEtPmZyZXF1ZW5jeSA9IGNvbnRleHQtPmZyZXE7CisJZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9mcmVxdWVuY3koc3RydWN0IHBvc2VpZG9uICpwZCwgX191MzIgZnJlcXVlbmN5KQoreworCXMzMiByZXQgPSAwLCBwYXJhbSwgY21kX3N0YXR1czsKKwlzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0ID0gJnBkLT52aWRlb19kYXRhLmNvbnRleHQ7CisKKwlwYXJhbSA9IGZyZXF1ZW5jeSAqIDYyNTAwIC8gMTAwMDsKKwlpZiAocGFyYW0gPCBUVU5FUl9GUkVRX01JTi8xMDAwIHx8IHBhcmFtID4gVFVORVJfRlJFUV9NQVggLyAxMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVfRlJFUV9TRUxFQ1QsIHBhcmFtLCAmY21kX3N0YXR1cyk7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUQUtFX1JFUVVFU1QsIDAsICZjbWRfc3RhdHVzKTsKKworCW1zbGVlcCgyNTApOyAvKiB3YWl0IGZvciBhIHdoaWxlIHVudGlsIHRoZSBoYXJkd2FyZSBpcyByZWFkeS4gKi8KKwljb250ZXh0LT5mcmVxID0gZnJlcXVlbmN5OworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKworCWxvZ3MoZnJvbnQpOworI2lmZGVmIENPTkZJR19QTQorCXBkLT5wbV9zdXNwZW5kID0gcG1fdmlkZW9fc3VzcGVuZDsKKwlwZC0+cG1fcmVzdW1lID0gcG1fdmlkZW9fcmVzdW1lOworI2VuZGlmCisJcmV0dXJuIHNldF9mcmVxdWVuY3kocGQsIGZyZXEtPmZyZXF1ZW5jeSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpiKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlsb2dzKGZyb250KTsKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZnJvbnQtPnEsIGIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJbG9ncyhmcm9udCk7CisJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZmcm9udC0+cSwgYik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmcm9udC0+cSwgYik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZyb250LT5xLCBiLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKKy8qIEp1c3Qgc3RvcCB0aGUgVVJCcywgZG8gbm90IGZyZWUgdGhlIFVSQnMgKi8KK2ludCB1c2JfdHJhbnNmZXJfc3RvcChzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJaWYgKHZpZGVvLT5pc19zdHJlYW1pbmcpIHsKKwkJaW50IGk7CisJCXMzMiBjbWRfc3RhdHVzOworCQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gdmlkZW8tPnBkOworCisJCXZpZGVvLT5pc19zdHJlYW1pbmcgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgU0JVRl9OVU07ICsraSkgeworCQkJaWYgKHZpZGVvLT51cmJfYXJyYXlbaV0pCisJCQkJdXNiX2tpbGxfdXJiKHZpZGVvLT51cmJfYXJyYXlbaV0pOworCQl9CisKKwkJc2VuZF9zZXRfcmVxKHBkLCBQTEFZX1NFUlZJQ0UsIFRMR19UVU5FX1BMQVlfU1ZDX1NUT1AsCisJCQkgICAgICAgJmNtZF9zdGF0dXMpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHN0b3BfYWxsX3ZpZGVvX3N0cmVhbShzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKKwlzdHJ1Y3QgdmJpX2RhdGEgKnZiaQk9ICZwZC0+dmJpX2RhdGE7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJaWYgKHZpZGVvLT5pc19zdHJlYW1pbmcpIHsKKwkJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdmlkZW8tPmZyb250OworCisJCS8qIHN0b3AgdGhlIFVSQnMgKi8KKwkJdXNiX3RyYW5zZmVyX3N0b3AodmlkZW8pOworCQlmcmVlX2FsbF91cmIodmlkZW8pOworCisJCS8qIHN0b3AgdGhlIGhvc3Qgc2lkZSBvZiBWSURFTyAqLworCQl2aWRlb2J1Zl9zdG9wKCZmcm9udC0+cSk7CisJCXZpZGVvYnVmX21tYXBfZnJlZSgmZnJvbnQtPnEpOworCisJCS8qIHN0b3AgdGhlIGhvc3Qgc2lkZSBvZiBWQkkgKi8KKwkJZnJvbnQgPSB2YmktPmZyb250OworCQlpZiAoZnJvbnQpIHsKKwkJCXZpZGVvYnVmX3N0b3AoJmZyb250LT5xKTsKKwkJCXZpZGVvYnVmX21tYXBfZnJlZSgmZnJvbnQtPnEpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGJ1YmJsZXMgY2FuIHNlcmlvdXNseSBkYW1hZ2UgdGhlIHZpZGVvJ3MgcXVhbGl0eSwKKyAqIHRob3VnaCBpdCBvY2N1cnMgaW4gdmVyeSByYXJlIHNpdHVhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgaXNvX2J1YmJsZV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW87CisJc3RydWN0IHBvc2VpZG9uICpwZDsKKworCXZpZGVvID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCB2aWRlb19kYXRhLCBidWJibGVfd29yayk7CisJcGQgPSB2aWRlby0+cGQ7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJdXNiX3RyYW5zZmVyX3N0b3AodmlkZW8pOworCW1zbGVlcCg1MDApOworCXN0YXJ0X3ZpZGVvX3N0cmVhbShwZCk7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Cit9CisKKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCisJbG9ncyhmcm9udCk7CisJaWYgKHVubGlrZWx5KHR5cGUgIT0gZnJvbnQtPnR5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oJmZyb250LT5xKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlsb2dzKGZyb250KTsKKwlpZiAodW5saWtlbHkodHlwZSAhPSBmcm9udC0+dHlwZSkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vZmYoJmZyb250LT5xKTsKK30KKworLyogU2V0IHRoZSBmaXJtd2FyZSdzIGRlZmF1bHQgdmFsdWVzIDogbmVlZCBhbHRlcnNldHRpbmcgKi8KK3N0YXRpYyBpbnQgcGRfdmlkZW9fY2hlY2ttb2RlKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXMsIGF1ZGlvbW9kZTsKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dChIWi8yKTsKKworCS8qIGNob29zZSB0aGUgYWx0ZXJzZXR0aW5nICovCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UocGQtPnVkZXYsIDAsCisJCQkJCShwZC0+Y3VyX3RyYW5zZmVyX21vZGUgPworCQkJCQkgSVNPXzNLX0JVTEtfQUxURVJOQVRFX0lGQUNFIDoKKwkJCQkJIEJVTEtfQUxURVJOQVRFX0lGQUNFKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzZXQgZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciBQQUwtRCAsIHdpdGggdGhlIFZCSSBlbmFibGVkKi8KKwlyZXQgPSBzZXRfdHVuZXJfbW9kZShwZCwgVExHX01PREVfQU5BTE9HX1RWKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBTR05MX1NSQ19TRUwsCisJCQkJVExHX1NJR19TUkNfQU5URU5OQSwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1NURF9TRUwsCisJCQkJVExHX1RVTkVfVlNURF9QQUxfRCwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1NUUkVBTV9GTVRfU0VMLAorCQkJCVRMR19UVU5FUl9WSURfRk9STUFUX1lVViwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1JPU09MVV9TRUwsCisJCQkJVExHX1RVTkVfVklEX1JFU183MjAsICZjbWRfc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FX0ZSRVFfU0VMRUNULCBUVU5FUl9GUkVRX01JTiwgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZCSV9EQVRBX1NFTCwgMSwgJmNtZF9zdGF0dXMpOy8qIGVuYWJsZSB2YmkgKi8KKworCS8qIHNldCB0aGUgYXVkaW8gKi8KKwlhdWRpb21vZGUgPSBnZXRfYXVkaW9fc3RkKHBkLT52aWRlb19kYXRhLmNvbnRleHQudHZub3JtaWQpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0FVRF9BTkFfU1RELCBhdWRpb21vZGUsICZjbWRfc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FUl9BVURfTU9ERSwKKwkJCQlUTEdfVFVORV9UVkFVRElPX01PREVfU1RFUkVPLCAmY21kX3N0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgQVVESU9fU0FNUExFX1JBVEVfU0VMLAorCQkJCUFUVl9BVURJT19SQVRFXzQ4SywgJmNtZF9zdGF0dXMpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbV92aWRlb19zdXNwZW5kKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJLyogc3RvcCBhdWRpbyAqLworCXBtX2Fsc2Ffc3VzcGVuZChwZCk7CisKKwkvKiBzdG9wIGFuZCBmcmVlIGFsbCB0aGUgVVJCcyAqLworCXVzYl90cmFuc2Zlcl9zdG9wKCZwZC0+dmlkZW9fZGF0YSk7CisJZnJlZV9hbGxfdXJiKCZwZC0+dmlkZW9fZGF0YSk7CisKKwkvKiByZXNldCB0aGUgaW50ZXJmYWNlICovCisJdXNiX3NldF9pbnRlcmZhY2UocGQtPnVkZXYsIDAsIDApOworCW1zbGVlcCgzMDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlc3RvcmVfdjRsMl9jb250ZXh0KHN0cnVjdCBwb3NlaWRvbiAqcGQsCisJCQkJc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBwZC0+dmlkZW9fZGF0YS5mcm9udDsKKworCXBkX3ZpZGVvX2NoZWNrbW9kZShwZCk7CisKKwlzZXRfc3RkKHBkLCAmY29udGV4dC0+dHZub3JtaWQpOworCXZpZGlvY19zX2lucHV0KE5VTEwsIGZyb250LCBjb250ZXh0LT5zaWdfaW5kZXgpOworCXBkX3ZpZGlvY19zX3R1bmVyKHBkLCBjb250ZXh0LT5hdWRpb19pZHgpOworCXBkX3ZpZGlvY19zX2ZtdChwZCwgJmNvbnRleHQtPnBpeCk7CisJc2V0X2ZyZXF1ZW5jeShwZCwgY29udGV4dC0+ZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1fdmlkZW9fcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOworCisJLyogcmVzdW1lIHRoZSB2aWRlbyAqLworCS8qIFsxXSByZXN0b3JlIHRoZSBvcmlnaW4gVjRMMiBwYXJhbWV0ZXJzICovCisJcmVzdG9yZV92NGwyX2NvbnRleHQocGQsICZ2aWRlby0+Y29udGV4dCk7CisKKwkvKiBbMl0gaW5pdGlhdGUgdmlkZW8gY29weSB2YXJpYWJsZXMgKi8KKwlpZiAodmlkZW8tPmZyb250LT5jdXJyX2ZyYW1lKQorCQlpbml0X2NvcHkodmlkZW8sIDApOworCisJLyogWzNdIGZpcmUgdXJicwkqLworCXN0YXJ0X3ZpZGVvX3N0cmVhbShwZCk7CisKKwkvKiByZXN1bWUgdGhlIGF1ZGlvICovCisJcG1fYWxzYV9yZXN1bWUocGQpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3ZvaWQgc2V0X2RlYnVnX21vZGUoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLCBpbnQgZGVidWdfbW9kZSkKK3sKKwl2ZmQtPmRlYnVnID0gMDsKKwlpZiAoZGVidWdfbW9kZSAmIDB4MSkKKwkJdmZkLT5kZWJ1ZyA9IFY0TDJfREVCVUdfSU9DVEw7CisJaWYgKGRlYnVnX21vZGUgJiAweDIpCisJCXZmZC0+ZGVidWcgPSBWNEwyX0RFQlVHX0lPQ1RMIHwgVjRMMl9ERUJVR19JT0NUTF9BUkc7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdmlkZW9fY29udGV4dChzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0KQoreworCWNvbnRleHQtPnNpZ19pbmRleAk9IDA7CisJY29udGV4dC0+YXVkaW9faWR4CT0gMTsgLyogc3RlcmVvICovCisJY29udGV4dC0+dHZub3JtaWQgIAk9IFY0TDJfU1REX1BBTF9EOworCWNvbnRleHQtPnBpeCA9IChzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSB7CisJCQkJLndpZHRoCQk9IDcyMCwKKwkJCQkuaGVpZ2h0CQk9IDU3NiwKKwkJCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJCQkuZmllbGQJCT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJCS5ieXRlc3BlcmxpbmUJPSA3MjAgKiAyLAorCQkJCS5zaXplaW1hZ2UJPSA3MjAgKiA1NzYgKiAyLAorCQkJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKKwkJCQkucHJpdgkJPSAwCisJCQl9OworfQorCitzdGF0aWMgaW50IHBkX3ZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gdmlkZW9fZ2V0X2RydmRhdGEodmZkKTsKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBOVUxMOworCWludCByZXQgPSAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKworCWlmICh2ZmQtPnZmbF90eXBlID09IFZGTF9UWVBFX0dSQUJCRVIKKwkJJiYgIShwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9BTkFMT0cpKSB7CisJCWZyb250ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZyb250X2ZhY2UpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmcm9udCkKKwkJCWdvdG8gb3V0OworCisJCXBkLT5jdXJfdHJhbnNmZXJfbW9kZQk9IHVzYl90cmFuc2Zlcl9tb2RlOy8qIGJ1bGsgb3IgaXNvICovCisJCWluaXRfdmlkZW9fY29udGV4dCgmcGQtPnZpZGVvX2RhdGEuY29udGV4dCk7CisKKwkJcmV0ID0gcGRfdmlkZW9fY2hlY2ttb2RlKHBkKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWtmcmVlKGZyb250KTsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKworCQlwZC0+c3RhdGUJCXw9IFBPU0VJRE9OX1NUQVRFX0FOQUxPRzsKKwkJZnJvbnQtPnR5cGUJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlwZC0+dmlkZW9fZGF0YS51c2VycysrOworCQlzZXRfZGVidWdfbW9kZSh2ZmQsIGRlYnVnX21vZGUpOworCisJCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgmZnJvbnQtPnEsICZwZF92aWRlb19xb3BzLAorCQkJCU5VTEwsICZmcm9udC0+cXVldWVfbG9jaywKKwkJCQlWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VELC8qIHZpZGVvIGlzIGludGVybGFjZCAqLworCQkJCXNpemVvZihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyKSwvKml0J3MgZW5vdWdoKi8KKwkJCQlmcm9udCk7CisJfSBlbHNlIGlmICh2ZmQtPnZmbF90eXBlID09IFZGTF9UWVBFX1ZCSQorCQkmJiAhKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX1ZCSSkpIHsKKwkJZnJvbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnJvbnRfZmFjZSksIEdGUF9LRVJORUwpOworCQlpZiAoIWZyb250KQorCQkJZ290byBvdXQ7CisKKwkJcGQtPnN0YXRlCXw9IFBPU0VJRE9OX1NUQVRFX1ZCSTsKKwkJZnJvbnQtPnR5cGUJPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOworCQlwZC0+dmJpX2RhdGEuZnJvbnQgPSBmcm9udDsKKwkJcGQtPnZiaV9kYXRhLnVzZXJzKys7CisKKwkJdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KCZmcm9udC0+cSwgJnBkX3ZpZGVvX3FvcHMsCisJCQkJTlVMTCwgJmZyb250LT5xdWV1ZV9sb2NrLAorCQkJCVY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUsCisJCQkJVjRMMl9GSUVMRF9OT05FLCAvKiB2YmkgaXMgTk9ORSBtb2RlICovCisJCQkJc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIpLAorCQkJCWZyb250KTsKKwl9IGVsc2UgeworCQkvKiBtYXliZSBhZGQgRk0gc3VwcG9ydCBoZXJlICovCisJCWxvZygib3RoZXIgIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWZyb250LT5wZAkJPSBwZDsKKwlmcm9udC0+Y3Vycl9mcmFtZQk9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJmZyb250LT5hY3RpdmUpOworCXNwaW5fbG9ja19pbml0KCZmcm9udC0+cXVldWVfbG9jayk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEJPSBmcm9udDsKKwlrcmVmX2dldCgmcGQtPmtyZWYpOworCisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIDA7CitvdXQ6CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGRfdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGZyb250LT5wZDsKKwlzMzIgY21kX3N0YXR1cyA9IDA7CisKKwlsb2dzKGZyb250KTsKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisKKwlpZiAoZnJvbnQtPnR5cGUJPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCXBkLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfQU5BTE9HOworCisJCS8qIHN0b3AgdGhlIGRldmljZSwgYW5kIGZyZWUgdGhlIFVSQnMgKi8KKwkJdXNiX3RyYW5zZmVyX3N0b3AoJnBkLT52aWRlb19kYXRhKTsKKwkJZnJlZV9hbGxfdXJiKCZwZC0+dmlkZW9fZGF0YSk7CisKKwkJLyogc3RvcCB0aGUgZmlybXdhcmUgKi8KKwkJc2VuZF9zZXRfcmVxKHBkLCBQTEFZX1NFUlZJQ0UsIFRMR19UVU5FX1BMQVlfU1ZDX1NUT1AsCisJCQkgICAgICAgJmNtZF9zdGF0dXMpOworCisJCXBkLT5maWxlX2Zvcl9zdHJlYW0gPSBOVUxMOworCQlwZC0+dmlkZW9fZGF0YS51c2Vycy0tOworCX0gZWxzZSBpZiAoZnJvbnQtPnR5cGUJPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgeworCQlwZC0+c3RhdGUgJj0gflBPU0VJRE9OX1NUQVRFX1ZCSTsKKwkJcGQtPnZiaV9kYXRhLmZyb250ID0gTlVMTDsKKwkJcGQtPnZiaV9kYXRhLnVzZXJzLS07CisJfQorCXZpZGVvYnVmX3N0b3AoJmZyb250LT5xKTsKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZyb250LT5xKTsKKworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKworCWtmcmVlKGZyb250KTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWtyZWZfcHV0KCZwZC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZF92aWRlb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuICB2aWRlb2J1Zl9tbWFwX21hcHBlcigmZnJvbnQtPnEsIHZtYSk7Cit9CisKK3Vuc2lnbmVkIGludCBwZF92aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp0YWJsZSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbGUsICZmcm9udC0+cSwgdGFibGUpOworfQorCitzc2l6ZV90IHBkX3ZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCZmcm9udC0+cSwgYnVmZmVyLCBjb3VudCwgcHBvcywKKwkJCQkwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKKy8qIFRoaXMgc3RydWN0IHdvcmtzIGZvciBib3RoIFZJREVPIGFuZCBWQkkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgcGRfdmlkZW9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcGRfdmlkZW9fb3BlbiwKKwkucmVsZWFzZQk9IHBkX3ZpZGVvX3JlbGVhc2UsCisJLnJlYWQJCT0gcGRfdmlkZW9fcmVhZCwKKwkucG9sbAkJPSBwZF92aWRlb19wb2xsLAorCS5tbWFwCQk9IHBkX3ZpZGVvX21tYXAsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwgLyogbWF5YmUgY2hhbmdlZCBpbiBmdXR1cmUgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgcGRfdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAJPSB2aWRpb2NfcXVlcnljYXAsCisKKwkvKiBWaWRlbyBmb3JtYXQgKi8KKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJPSB2aWRpb2NfZ19mbXQsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gdmlkaW9jX2VudW1fZm10LAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcAk9IHZpZGlvY19zX2ZtdCwKKwkudmlkaW9jX2dfZm10X3ZiaV9jYXAJPSB2aWRpb2NfZ19mbXRfdmJpLCAvKiBWQkkgKi8KKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IHZpZGlvY190cnlfZm10LAorCisJLyogSW5wdXQgKi8KKwkudmlkaW9jX2dfaW5wdXQJCT0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZW51bV9pbnB1dAk9IHZpZGlvY19lbnVtX2lucHV0LAorCisJLyogQXVkaW8gaW9jdGxzICovCisJLnZpZGlvY19lbnVtYXVkaW8JPSB2aWRpb2NfZW51bWF1ZGlvLAorCS52aWRpb2NfZ19hdWRpbwkJPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8JCT0gdmlkaW9jX3NfYXVkaW8sCisKKwkvKiBUdW5lciBpb2N0bHMgKi8KKwkudmlkaW9jX2dfdHVuZXIJCT0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyCQk9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2Nfc19zdGQJCT0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfZ19mcmVxdWVuY3kJPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeQk9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKworCS8qIEJ1ZmZlciBoYW5kbGVycyAqLworCS52aWRpb2NfcmVxYnVmcwkJPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmCT0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmCQk9IHZpZGlvY19kcWJ1ZiwKKworCS8qIFN0cmVhbSBvbi9vZmYgKi8KKwkudmlkaW9jX3N0cmVhbW9uCT0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCT0gdmlkaW9jX3N0cmVhbW9mZiwKKworCS8qIENvbnRyb2wgaGFuZGxpbmcgKi8KKwkudmlkaW9jX3F1ZXJ5Y3RybAk9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwJCT0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybAkJPSB2aWRpb2Nfc19jdHJsLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgcGRfdmlkZW9fdGVtcGxhdGUgPSB7CisJLm5hbWUgPSAiVGVsZWdlbnQtVmlkZW8iLAorCS5mb3BzID0gJnBkX3ZpZGVvX2ZvcHMsCisJLm1pbm9yID0gLTEsCisJLnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkudHZub3JtcyA9IFY0TDJfU1REX0FMTCwKKwkuaW9jdGxfb3BzID0gJnBkX3ZpZGVvX2lvY3RsX29wcywKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXZfaW5pdChzdHJ1Y3QgcG9zZWlkb24gKnBkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0bXApCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCisJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHZmZCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwkqdmZkCQk9ICp0bXA7CisJdmZkLT5taW5vcgk9IC0xOworCXZmZC0+djRsMl9kZXYJPSAmcGQtPnY0bDJfZGV2OworCS8qdmZkLT5wYXJlbnQJPSAmKHBkLT51ZGV2LT5kZXYpOyAqLworCXZmZC0+cmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgcGQpOworCXJldHVybiB2ZmQ7Cit9CisKK3ZvaWQgZGVzdHJveV92aWRlb19kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqKnZfZGV2KQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9ICp2X2RldjsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQoZGV2KSkKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKKwllbHNlCisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldik7CisJKnZfZGV2ID0gTlVMTDsKK30KKwordm9pZCBwZF92aWRlb19leGl0KHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOworCXN0cnVjdCB2YmlfZGF0YSAqdmJpID0gJnBkLT52YmlfZGF0YTsKKworCWRlc3Ryb3lfdmlkZW9fZGV2aWNlKCZ2aWRlby0+dl9kZXYpOworCWRlc3Ryb3lfdmlkZW9fZGV2aWNlKCZ2YmktPnZfZGV2KTsKKwlsb2coKTsKK30KKworaW50IHBkX3ZpZGVvX2luaXQoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisJc3RydWN0IHZiaV9kYXRhICp2YmkJPSAmcGQtPnZiaV9kYXRhOworCWludCByZXQgPSAtRU5PTUVNOworCisJdmlkZW8tPnZfZGV2ID0gdmRldl9pbml0KHBkLCAmcGRfdmlkZW9fdGVtcGxhdGUpOworCWlmICh2aWRlby0+dl9kZXYgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmlkZW8tPnZfZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dDsKKworCS8qIFZCSSB1c2VzIHRoZSBzYW1lIHRlbXBsYXRlIGFzIHZpZGVvICovCisJdmJpLT52X2RldiA9IHZkZXZfaW5pdChwZCwgJnBkX3ZpZGVvX3RlbXBsYXRlKTsKKwlpZiAodmJpLT52X2RldiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmJpLT52X2RldiwgVkZMX1RZUEVfVkJJLCAtMSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIG91dDsKKwlsb2coInJlZ2lzdGVyIFZJREVPL1ZCSSBkZXZpY2VzIik7CisJcmV0dXJuIDA7CitvdXQ6CisJbG9nKCJWSURFTy9WQkkgZGV2aWNlcyByZWdpc3RlciBmYWlsZWQsIDogJWQiLCByZXQpOworCXBkX3ZpZGVvX2V4aXQocGQpOworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC92ZW5kb3JjbWRzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvdmVuZG9yY21kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNmY0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvdmVuZG9yY21kcy5oCkBAIC0wLDAgKzEsMjQzIEBACisjaWZuZGVmIFZFTkRPUl9DTURfSF8KKyNkZWZpbmUgVkVORE9SX0NNRF9IXworCisjZGVmaW5lIEJVTEtfQUxURVJOQVRFX0lGQUNFCQkoMikKKyNkZWZpbmUgSVNPXzNLX0JVTEtfQUxURVJOQVRFX0lGQUNFICAgICAoMSkKKyNkZWZpbmUgUkVRX1NFVF9DTUQJCQkoMFgwMCkKKyNkZWZpbmUgUkVRX0dFVF9DTUQJCQkoMFg4MCkKKworZW51bSB0bGdfX2FuYWxvZ19hdWRpb19zdGFuZGFyZCB7CisJVExHX1RVTkVfQVNURF9OT05FCT0gMHgwMDAwMDAwMCwKKwlUTEdfVFVORV9BU1REX0EyCT0gMHgwMDAwMDAwMSwKKwlUTEdfVFVORV9BU1REX05JQ0FNCT0gMHgwMDAwMDAwMiwKKwlUTEdfVFVORV9BU1REX0VJQUoJPSAweDAwMDAwMDA0LAorCVRMR19UVU5FX0FTVERfQlRTQwk9IDB4MDAwMDAwMDgsCisJVExHX1RVTkVfQVNURF9GTV9VUwk9IDB4MDAwMDAwMTAsCisJVExHX1RVTkVfQVNURF9GTV9FVVIJPSAweDAwMDAwMDIwLAorCVRMR19UVU5FX0FTVERfQUxMCT0gMHgwMDAwMDAzZgorfTsKKworLyoKKyAqIGlkZW50aWZpZXJzIGZvciBDdXN0b20gUGFyYW1ldGVyIG1lc3NhZ2VzLgorICogQHR5cGVkZWYgY21kX2N1c3RvbV9wYXJhbV9pZF90CisgKi8KK2VudW0gY21kX2N1c3RvbV9wYXJhbV9pZCB7CisJQ1VTVF9QQVJNX0lEX05PTkUJCT0gMHgwMCwKKwlDVVNUX1BBUk1fSURfQlJJR0hUTkVTU19DVFJMCT0gMHgwMSwKKwlDVVNUX1BBUk1fSURfQ09OVFJBU1RfQ1RSTAk9IDB4MDIsCisJQ1VTVF9QQVJNX0lEX0hVRV9DVFJMCQk9IDB4MDMsCisJQ1VTVF9QQVJNX0lEX1NBVFVSQVRJT05fQ1RSTAkgID0gMHgwNCwKKwlDVVNUX1BBUk1fSURfQVVESU9fU05SX1RIUkVTSE9MRCAgPSAweDEwLAorCUNVU1RfUEFSTV9JRF9BVURJT19BR0NfVEhSRVNIT0xEICA9IDB4MTEsCisJQ1VTVF9QQVJNX0lEX01BWAorfTsKKworc3RydWN0ICB0dW5lcl9jdXN0b21fcGFyYW1ldGVyX3MgeworCXVpbnQxNl90CXBhcmFtX2lkOwkgLyogIFBhcmFtZXRlciBpZGVudGlmaWVyICAqLworCXVpbnQxNl90CXBhcmFtX3ZhbHVlOwkgLyogIFBhcmFtZXRlciB2YWx1ZQkgICAqLworfTsKKworc3RydWN0ICB0dW5lcl9iZXJfcmF0ZV9zIHsKKwl1aW50MzJfdAliZXJfcmF0ZTsgIC8qICBCRVIgc2FtcGxlIHJhdGUgaW4gc2Vjb25kcyAgICovCit9OworCitzdHJ1Y3QgdHVuZXJfYXR2X3NpZ19zdGF0X3MgeworCXVpbnQzMl90CXNpZ19wcmVzZW50OworCXVpbnQzMl90CXNpZ19sb2NrZWQ7CisJdWludDMyX3QJc2lnX2xvY2tfYnVzeTsKKwl1aW50MzJfdAlzaWdfc3RyZW5ndGg7CSAgIC8qICBtaWxsaURiCSAgKi8KKwl1aW50MzJfdAl0dl9hdWRpb19jaGFuOwkgIC8qICBtb25vL3N0ZXJlby9zYXAqLworCXVpbnQzMl90IAltdmlzaW9uX3N0YXQ7CSAgIC8qICBtYWNyb3Zpc2lvbiBzdGF0dXMgKi8KK307CisKK3N0cnVjdCB0dW5lcl9kdHZfc2lnX3N0YXRfcyB7CisJdWludDMyX3Qgc2lnX3ByZXNlbnQ7ICAgLyogIEJvb2xlYW4qLworCXVpbnQzMl90IHNpZ19sb2NrZWQ7CS8qICBCb29sZWFuICovCisJdWludDMyX3Qgc2lnX2xvY2tfYnVzeTsgLyogIEJvb2xlYW4JKENhbiB0aGlzIHRpbWUtb3V0PykgKi8KKwl1aW50MzJfdCBzaWdfc3RyZW5ndGg7ICAvKiAgbWlsbGlEYiovCit9OworCitzdHJ1Y3QgdHVuZXJfZm1fc2lnX3N0YXRfcyB7CisJdWludDMyX3Qgc2lnX3ByZXNlbnQ7CS8qIEJvb2xlYW4qLworCXVpbnQzMl90IHNpZ19sb2NrZWQ7CSAvKiBCb29sZWFuICovCisJdWludDMyX3Qgc2lnX2xvY2tfYnVzeTsgIC8qIEJvb2xlYW4gKi8KKwl1aW50MzJfdCBzaWdfc3RlcmVvX21vbm87LyogVEJEKi8KKwl1aW50MzJfdCBzaWdfc3RyZW5ndGg7ICAgLyogbWlsbGlEYiovCit9OworCitlbnVtIF90YWdfdGxnX3R1bmVfc3J2X2NtZCB7CisJVExHX1RVTkVfUExBWV9TVkNfU1RBUlQgPSAxLAorCVRMR19UVU5FX1BMQVlfU1ZDX1NUT1AKK307CisKK2VudW0gIF90YWdfdHVuZV9hdHZfYXVkaW9fbW9kZV9jYXBzIHsKKwlUTEdfVFVORV9UVkFVRElPX01PREVfTU9OTwk9IDB4MDAwMDAwMDEsCisJVExHX1RVTkVfVFZBVURJT19NT0RFX1NURVJFTwk9IDB4MDAwMDAwMDIsCisJVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQQk9IDB4MDAwMDAwMTAsLyogUHJpbWFyeSBsYW5ndWFnZSovCisJVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQgk9IDB4MDAwMDAwMjAsLyogMm5kIGF2YWlsIGxhbmd1YWdlKi8KKwlUTEdfVFVORV9UVkFVRElPX01PREVfTEFOR19DCT0gMHgwMDAwMDA0MAorfTsKKworCitlbnVtICAgX3RhZ190dW5lcl9hdHZfYXVkaW9fcmF0ZXMgeworCUFUVl9BVURJT19SQVRFX05PTkUJPSAweDAwLC8qIEF1ZGlvIG5vdCBzdXBwb3J0ZWQqLworCUFUVl9BVURJT19SQVRFXzMySwk9IDB4MDEsLyogQXVkaW8gcmF0ZSA9IDMyIEtIeiovCisJQVRWX0FVRElPX1JBVEVfNDhLCT0gMHgwMiwgLyogQXVkaW8gcmF0ZSA9IDQ4IEtIeiovCisJQVRWX0FVRElPX1JBVEVfMzFfMjVLCT0gMHgwNCAvKiBBdWRpbyByYXRlID0gMzEuMjVLSHogKi8KK307CisKK2VudW0gIF90YWdfdHVuZV9hdHZfdmlkX3Jlc19jYXBzIHsKKwlUTEdfVFVORV9WSURfUkVTX05PTkUJPSAweDAwMDAwMDAwLAorCVRMR19UVU5FX1ZJRF9SRVNfNzIwCT0gMHgwMDAwMDAwMSwKKwlUTEdfVFVORV9WSURfUkVTXzcwNAk9IDB4MDAwMDAwMDIsCisJVExHX1RVTkVfVklEX1JFU18zNjAJPSAweDAwMDAwMDA0Cit9OworCitlbnVtIF90YWdfdHVuZXJfYW5hbG9nX3ZpZGVvX2Zvcm1hdCB7CisJVExHX1RVTkVSX1ZJRF9GT1JNQVRfWVVWCT0gMHgwMDAwMDAwMSwKKwlUTEdfVFVORVJfVklEX0ZPUk1BVF9ZQ1JDQgk9IDB4MDAwMDAwMDIsCisJVExHX1RVTkVSX1ZJRF9GT1JNQVRfUkdCXzU2NQk9IDB4MDAwMDAwMDQsCit9OworCitlbnVtICB0bGdfZXh0X2F1ZGlvX3N1cHBvcnQgeworCVRMR19FWFRfQVVESU9fTk9ORSAJPSAweDAwLC8qICBObyBleHRlcm5hbCBhdWRpbyBpbnB1dCBzdXBwb3J0ZWQgKi8KKwlUTEdfRVhUX0FVRElPX0xSCT0gMHgwMS8qICBMUiBleHRlcm5hbCBhdWRpbyBpbnB1dHMgc3VwcG9ydGVkKi8KK307CisKK2VudW0geworCVRMR19NT0RFX05PTkUJCQk9IDB4MDAsIC8qIE5vIE1vZGUgc3BlY2lmaWVkKi8KKwlUTEdfTU9ERV9BTkFMT0dfVFYJCT0gMHgwMSwgLyogQW5hbG9nIFRlbGV2aXNpb24gbW9kZSovCisJVExHX01PREVfQU5BTE9HX1RWX1VOQ09NUAk9IDB4MDEsIC8qIEFuYWxvZyBUZWxldmlzaW9uIG1vZGUqLworCVRMR19NT0RFX0FOQUxPR19UVl9DT01QICAJPSAweDAyLCAvKiBBbmFsb2cgVFYgbW9kZSAoY29tcHJlc3NlZCkqLworCVRMR19NT0RFX0ZNX1JBRElPCQk9IDB4MDQsIC8qIEZNIFJhZGlvIG1vZGUqLworCVRMR19NT0RFX0RWQl9UCQkJPSAweDA4LCAvKiBEaWdpdGFsIFRWIChEVkItVCkqLworfTsKKworZW51bSAgdGxnX3NpZ25hbF9zb3VyY2VzX3QgeworCVRMR19TSUdfU1JDX05PTkUJPSAweDAwLC8qIFNpZ25hbCBzb3VyY2Ugbm90IHNwZWNpZmllZCAqLworCVRMR19TSUdfU1JDX0FOVEVOTkEJPSAweDAxLC8qIFNpZ25hbCBzcmMgaXM6IEFudGVubmEgKi8KKwlUTEdfU0lHX1NSQ19DQUJMRQk9IDB4MDIsLyogU2lnbmFsIHNyYyBpczogQ29heCBDYWJsZSovCisJVExHX1NJR19TUkNfU1ZJREVPCT0gMHgwNCwvKiBTaWduYWwgc3JjIGlzOiBTX1ZJREVPICAgKi8KKwlUTEdfU0lHX1NSQ19DT01QT1NJVEUgICA9IDB4MDggLyogU2lnbmFsIHNyYyBpczogQ29tcG9zaXRlIFZpZGVvICovCit9OworCitlbnVtIHR1bmVyX2FuYWxvZ192aWRlb19zdGFuZGFyZCB7CisJVExHX1RVTkVfVlNURF9OT05FCT0gMHgwMDAwMDAwMCwKKwlUTEdfVFVORV9WU1REX05UU0NfTQk9IDB4MDAwMDAwMDEsCisJVExHX1RVTkVfVlNURF9OVFNDX01fSgk9IDB4MDAwMDAwMDIsLyogSmFwYW4gICAqLworCVRMR19UVU5FX1ZTVERfUEFMX0IJPSAweDAwMDAwMDEwLAorCVRMR19UVU5FX1ZTVERfUEFMX0QJPSAweDAwMDAwMDIwLAorCVRMR19UVU5FX1ZTVERfUEFMX0cJPSAweDAwMDAwMDQwLAorCVRMR19UVU5FX1ZTVERfUEFMX0gJPSAweDAwMDAwMDgwLAorCVRMR19UVU5FX1ZTVERfUEFMX0kJPSAweDAwMDAwMTAwLAorCVRMR19UVU5FX1ZTVERfUEFMX00JPSAweDAwMDAwMjAwLAorCVRMR19UVU5FX1ZTVERfUEFMX04JPSAweDAwMDAwNDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fQgk9IDB4MDAwMDEwMDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9ECT0gMHgwMDAwMjAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0cJPSAweDAwMDA0MDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fSAk9IDB4MDAwMDgwMDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9LCT0gMHgwMDAxMDAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0sxCT0gMHgwMDAyMDAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0wJPSAweDAwMDQwMDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fTDEJPSAweDAwMDgwMDAwLAorCVRMR19UVU5FX1ZTVERfUEFMX05fQ09NQk8gPSAweDAwMTAwMDAwCit9OworCitlbnVtIHRsZ19tb2RlX2NhcHMgeworCVRMR19NT0RFX0NBUFNfTk9ORQkJPSAweDAwLCAgLyogIE5vIE1vZGUgc3BlY2lmaWVkCSovCisJVExHX01PREVfQ0FQU19BTkFMT0dfVFZfVU5DT01QICA9IDB4MDEsICAvKiAgQW5hbG9nIFRWIG1vZGUgICAgICovCisJVExHX01PREVfQ0FQU19BTkFMT0dfVFZfQ09NUAk9IDB4MDIsICAvKiAgQW5hbG9nIFRWIChjb21wcmVzc2VkKSovCisJVExHX01PREVfQ0FQU19GTV9SQURJTwkJPSAweDA0LCAgLyogIEZNIFJhZGlvIG1vZGUJKi8KKwlUTEdfTU9ERV9DQVBTX0RWQl9UCQk9IDB4MDgsICAvKiAgRGlnaXRhbCBUViAoRFZCLVQpCSovCit9OworCitlbnVtIHBvc2VpZG9uX3ZlbmRvcl9jbWRzIHsKKwlMQVNUX0NNRF9TVEFUCQk9IDB4MDAsCisJR0VUX0NISVBfSUQJCT0gMHgwMSwKKwlHRVRfRldfSUQJCT0gMHgwMiwKKwlQUk9EVUNUX0NBUFMJCT0gMHgwMywKKworCVRVTkVfTU9ERV9DQVBfQVRWCT0gMHgxMCwKKwlUVU5FX01PREVfQ0FQX0FUVkNPTVAJPSAwWDEwLAorCVRVTkVfTU9ERV9DQVBfRFZCVAk9IDB4MTAsCisJVFVORV9NT0RFX0NBUF9GTQk9IDB4MTAsCisJVFVORV9NT0RFX1NFTEVDVAk9IDB4MTEsCisJVFVORV9GUkVRX1NFTEVDVAk9IDB4MTIsCisJU0dOTF9TUkNfU0VMCQk9IDB4MTMsCisKKwlWSURFT19TVERfU0VMCQk9IDB4MTQsCisJVklERU9fU1RSRUFNX0ZNVF9TRUwJPSAweDE1LAorCVZJREVPX1JPU09MVV9BVkFJTAk9IDB4MTYsCisJVklERU9fUk9TT0xVX1NFTAk9IDB4MTcsCisJVklERU9fQ09OVF9QUk9URUNUCT0gMHgyMCwKKworCVZDUl9USU1JTkdfTU9EU0VMCT0gMHgyMSwKKwlFWFRfQVVESU9fQ0FQCQk9IDB4MjIsCisJRVhUX0FVRElPX1NFTAkJPSAweDIzLAorCVRFU1RfUEFUVEVSTl9TRUwJPSAweDI0LAorCVZCSV9EQVRBX1NFTAkJPSAweDI1LAorCUFVRElPX1NBTVBMRV9SQVRFX0NBUCAgID0gMHgyOCwKKwlBVURJT19TQU1QTEVfUkFURV9TRUwgICA9IDB4MjksCisJVFVORVJfQVVEX01PREUJCT0gMHgyYSwKKwlUVU5FUl9BVURfTU9ERV9BVkFJTAk9IDB4MmIsCisJVFVORVJfQVVEX0FOQV9TVEQJPSAweDJjLAorCVRVTkVSX0NVU1RPTV9QQVJBTUVURVIJPSAweDJmLAorCisJRFZCVF9UVU5FX01PREVfU0VMCT0gMHgzMCwKKwlEVkJUX0JBTkRXX0NBUAkJPSAweDMxLAorCURWQlRfQkFORFdfU0VMCQk9IDB4MzIsCisJRFZCVF9HVUFSRF9JTlRFUlZfQ0FQICAgPSAweDMzLAorCURWQlRfR1VBUkRfSU5URVJWX1NFTCAgID0gMHgzNCwKKwlEVkJUX01PRFVMQVRJT05fQ0FQCT0gMHgzNSwKKwlEVkJUX01PRFVMQVRJT05fU0VMCT0gMHgzNiwKKwlEVkJUX0lOTkVSX0ZFQ19SQVRFX0NBUCA9IDB4MzcsCisJRFZCVF9JTk5FUl9GRUNfUkFURV9TRUwgPSAweDM4LAorCURWQlRfVFJBTlNfTU9ERV9DQVAJPSAweDM5LAorCURWQlRfVFJBTlNfTU9ERV9TRUwJPSAweDNhLAorCURWQlRfU0VBUkNIX1JBTkcJPSAweDNjLAorCisJVFVORVJfU0VUVVBfQU5BTE9HCT0gMHg0MCwKKwlUVU5FUl9TRVRVUF9ESUdJVEFMCT0gMHg0MSwKKwlUVU5FUl9TRVRVUF9GTV9SQURJTwk9IDB4NDIsCisJVEFLRV9SRVFVRVNUCQk9IDB4NDMsIC8qIFRha2UgZWZmZWN0IG9mIHRoZSBjb21tYW5kICovCisJUExBWV9TRVJWSUNFCQk9IDB4NDQsIC8qIFBsYXkgc3RhcnQgb3IgUGxheSBzdG9wICovCisJVFVORVJfU1RBVFVTCQk9IDB4NDUsCisJVFVORV9QUk9QX0RWQlQJCT0gMHg0NiwKKwlFUlJfUkFURV9TVEFUUwkJPSAweDQ3LAorCVRVTkVSX0JFUl9SQVRFCQk9IDB4NDgsCisKKwlTQ0FOX0NBUFMJCT0gMHg1MCwKKwlTQ0FOX1NFVFVQCQk9IDB4NTEsCisJU0NBTl9TRVJWSUNFCQk9IDB4NTIsCisJU0NBTl9TVEFUUwkJPSAweDUzLAorCisJUElEX1NFVAkJCT0gMHg1OCwKKwlQSURfVU5TRVQJCT0gMHg1OSwKKwlQSURfTElTVAkJPSAweDVhLAorCisJSVJEX0NBUAkJCT0gMHg2MCwKKwlJUkRfTU9ERV9TRUwJCT0gMHg2MSwKKwlJUkRfU0VUVVAJCT0gMHg2MiwKKworCVBUTV9NT0RFX0NBUAkJPSAweDcwLAorCVBUTV9NT0RFX1NFTAkJPSAweDcxLAorCVBUTV9TRVJWSUNFCQk9IDB4NzIsCisJVFVORVJfUkVHX1NDUklQVAk9IDB4NzMsCisJQ01EX0NISVBfUlNUCQk9IDB4NzQsCit9OworCitlbnVtIHRsZ19idyB7CisJVExHX0JXXzUgPSA1LAorCVRMR19CV182ID0gNiwKKwlUTEdfQldfNyA9IDcsCisJVExHX0JXXzggPSA4LAorCVRMR19CV18xMiA9IDEyLAorCVRMR19CV18xNSA9IDE1Cit9OworCitzdHJ1Y3QgY21kX2Zpcm13YXJlX3ZlcnNfcyB7CisJdWludDhfdAkgZndfcmV2X21ham9yOworCXVpbnQ4X3QJIGZ3X3Jldl9taW5vcjsKKwl1aW50MTZfdCBmd19wYXRjaDsKK307CisjZW5kaWYgLyogVkVORE9SX0NNRF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwppbmRleCA1YjNlYWExLi5jNGRhYjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwpAQCAtMTA3OCw2ICsxMDc4LDcgQEAKIAogCQkJCWdvdG8gcmVnaXN0ZXJfY2xpZW50OwogCQkJfQorCQkJa2ZyZWUodCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJY2FzZSAweDQyOgogCQljYXNlIDB4NDM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKaW5kZXggZDUzM2VhNS4uMGE4Nzc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwpAQCAtNjgwLDEwICs2ODAsNyBAQAogCXR2ZWVwcm9tX2luZm8oIkhhdXBwYXVnZSBtb2RlbCAlZCwgcmV2ICVzLCBzZXJpYWwjICVkXG4iLAogCQl0dmVlLT5tb2RlbCwgdHZlZS0+cmV2X3N0ciwgdHZlZS0+c2VyaWFsX251bWJlcik7CiAJaWYgKHR2ZWUtPmhhc19NQUNfYWRkcmVzcyA9PSAxKQotCQl0dmVlcHJvbV9pbmZvKCJNQUMgYWRkcmVzcyBpcyAlMDJYLSUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWFxuIiwKLQkJCXR2ZWUtPk1BQ19hZGRyZXNzWzBdLCB0dmVlLT5NQUNfYWRkcmVzc1sxXSwKLQkJCXR2ZWUtPk1BQ19hZGRyZXNzWzJdLCB0dmVlLT5NQUNfYWRkcmVzc1szXSwKLQkJCXR2ZWUtPk1BQ19hZGRyZXNzWzRdLCB0dmVlLT5NQUNfYWRkcmVzc1s1XSk7CisJCXR2ZWVwcm9tX2luZm8oIk1BQyBhZGRyZXNzIGlzICVwTVxuIiwgdHZlZS0+TUFDX2FkZHJlc3MpOwogCXR2ZWVwcm9tX2luZm8oInR1bmVyIG1vZGVsIGlzICVzIChpZHggJWQsIHR5cGUgJWQpXG4iLAogCQl0X25hbWUxLCB0dW5lcjEsIHR2ZWUtPnR1bmVyX3R5cGUpOwogCXR2ZWVwcm9tX2luZm8oIlRWIHN0YW5kYXJkcyVzJXMlcyVzJXMlcyVzJXMgKGVlcHJvbSAweCUwMngpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTg3OGJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyLmMKQEAgLTAsMCArMSwxMTg3IEBACisvKiBUZXhhcyBJbnN0cnVtZW50cyBUcmlwbGUgOC0vMTAtQklUIDE2NS0vMTEwLU1TUFMgVmlkZW8gYW5kIEdyYXBoaWNzCisgKiBEaWdpdGl6ZXIgd2l0aCBIb3Jpem9udGFsIFBMTCByZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKiBBdXRob3I6IFNhbnRpYWdvIE51bmV6LUNvcnJhbGVzIDxzYW50aWFnby5udW5lekByaWRnZXJ1bi5jb20+CisgKgorICogVGhpcyBjb2RlIGlzIHBhcnRpYWxseSBiYXNlZCB1cG9uIHRoZSBUVlA1MTUwIGRyaXZlcgorICogd3JpdHRlbiBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgKG1jaGVoYWJAaW5mcmFkZWFkLm9yZyksCisgKiB0aGUgVFZQNTE0eCBkcml2ZXIgd3JpdHRlbiBieSBWYWliaGF2IEhpcmVtYXRoIDxodmFpYmhhdkB0aS5jb20+CisgKiBhbmQgdGhlIFRWUDcwMDIgZHJpdmVyIGluIHRoZSBUSSBMU1AgMi4xMC4wMC4xNC4gUmV2aXNpb25zIGJ5CisgKiBNdXJhbGlkaGFyYW4gS2FyaWNoZXJpIGFuZCBTbmVoYXByYWJoYSBOYXJuYWthamUgKFRJKS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdHZwNzAwMi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlICJ0dnA3MDAyX3JlZy5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIFRWUDcwMDIgVmlkZW8gYW5kIEdyYXBoaWNzIERpZ2l0aXplciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNhbnRpYWdvIE51bmV6LUNvcnJhbGVzIDxzYW50aWFnby5udW5lekByaWRnZXJ1bi5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIE1vZHVsZSBOYW1lICovCisjZGVmaW5lIFRWUDcwMDJfTU9EVUxFX05BTUUJInR2cDcwMDIiCisKKy8qIEkyQyByZXRyeSBhdHRlbXB0cyAqLworI2RlZmluZSBJMkNfUkVUUllfQ09VTlQJCSg1KQorCisvKiBFbmQgb2YgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDcwMDJfRU9SCQkweDVjCisKKy8qIFJlYWQgd3JpdGUgZGVmaW5pdGlvbiBmb3IgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDcwMDJfUkVBRAkJMAorI2RlZmluZSBUVlA3MDAyX1dSSVRFCQkxCisjZGVmaW5lIFRWUDcwMDJfUkVTRVJWRUQJMgorCisvKiBJbnRlcmxhY2VkIHZzIHByb2dyZXNzaXZlIG1hc2sgYW5kIHNoaWZ0ICovCisjZGVmaW5lIFRWUDcwMDJfSVBfU0hJRlQJNQorI2RlZmluZSBUVlA3MDAyX0lOUFJfTUFTSwkoMHgwMSA8PCBUVlA3MDAyX0lQX1NISUZUKQorCisvKiBTaGlmdCBmb3IgQ1BMIGFuZCBMUEYgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDcwMDJfQ0xfU0hJRlQJOAorI2RlZmluZSBUVlA3MDAyX0NMX01BU0sJCTB4MGYKKworLyogRGVidWcgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0yKSIpOworCisvKiBTdHJ1Y3R1cmUgZm9yIHJlZ2lzdGVyIHZhbHVlcyAqLworc3RydWN0IGkyY19yZWdfdmFsdWUgeworCXU4IHJlZzsKKwl1OCB2YWx1ZTsKKwl1OCB0eXBlOworfTsKKworLyoKKyAqIFJlZ2lzdGVyIGRlZmF1bHQgdmFsdWVzIChhY2NvcmRpbmcgdG8gdHZwNzAwMiBkYXRhc2hlZXQpCisgKiBJbiB0aGUgY2FzZSBvZiByZWFkLW9ubHkgcmVnaXN0ZXJzLCB0aGUgdmFsdWUgKDB4ZmYpIGlzCisgKiBuZXZlciB3cml0dGVuLiBSL1cgZnVuY3Rpb25hbGl0eSBpcyBjb250cm9sbGVkIGJ5IHRoZQorICogd3JpdGFibGUgYml0IGluIHRoZSByZWdpc3RlciBzdHJ1Y3QgZGVmaW5pdGlvbi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfaW5pdF9kZWZhdWx0W10gPSB7CisJeyBUVlA3MDAyX0NISVBfUkVWLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDY3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4YTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MzIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IU1lOQ19PVVRfVywgMHg2MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9CX0ZJTkVfR0FJTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9HX0ZJTkVfR0FJTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9SX0ZJTkVfR0FJTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9CX0ZJTkVfT0ZGX01TQlMsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfR19GSU5FX09GRl9NU0JTLCAweDgwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1JfRklORV9PRkZfTVNCUywgMHg4MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX0NUTF8xLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQU5EX0NMQU1QX0NUTCwgMHgyZSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX09OX0dfVEhSUywgMHg1ZCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX1NFUEFSQVRPUl9USFJTLCAweDQ3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX0RFVEVDVF9TVEFULCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfT1VUX0ZPUk1BVFRFUiwgMHg0NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9NSVNDX0NUTF8xLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX01JU0NfQ1RMXzIsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfTUlTQ19DVExfMywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9JTl9NVVhfU0VMXzEsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSU5fTVVYX1NFTF8yLCAweDY3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0JfQU5EX0dfQ09BUlNFX0dBSU4sIDB4NzcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfUl9DT0FSU0VfR0FJTiwgMHgwNywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9GSU5FX09GRl9MU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0JfQ09BUlNFX09GRiwgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9HX0NPQVJTRV9PRkYsIDB4MTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfUl9DT0FSU0VfT0ZGLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hTT1VUX09VVF9TVEFSVCwgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9NSVNDX0NUTF80LCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0JfREdUTF9BTENfT1VUX0xTQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9HX0RHVExfQUxDX09VVF9MU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfUl9ER1RMX0FMQ19PVVRfTFNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0FVVE9fTFZMX0NUTF9FTkFCTEUsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfREdUTF9BTENfT1VUX01TQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9BVVRPX0xWTF9DVExfRklMVEVSLCAweDUzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyAweDI5LCAweDA4LCBUVlA3MDAyX1JFU0VSVkVEIH0sCisJeyBUVlA3MDAyX0ZJTkVfQ0xBTVBfQ1RMLCAweDA3LCBUVlA3MDAyX1dSSVRFIH0sCisJLyogUFdSX0NUTCBpcyBjb250cm9sbGVkIG9ubHkgYnkgdGhlIHByb2JlIGFuZCByZXNldCBmdW5jdGlvbnMgKi8KKwl7IFRWUDcwMDJfUFdSX0NUTCwgMHgwMCwgVFZQNzAwMl9SRVNFUlZFRCB9LAorCXsgVFZQNzAwMl9BRENfU0VUVVAsIDB4NTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ09BUlNFX0NMQU1QX0NUTCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TT0dfQ0xBTVAsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfUkdCX0NPQVJTRV9DTEFNUF9DVEwsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfU09HX0NPQVJTRV9DTEFNUF9DVEwsIDB4MDQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHg1YSwgVFZQNzAwMl9XUklURSB9LAorCXsgMHgzMiwgMHgxOCwgVFZQNzAwMl9SRVNFUlZFRCB9LAorCXsgMHgzMywgMHg2MCwgVFZQNzAwMl9SRVNFUlZFRCB9LAorCXsgVFZQNzAwMl9NVklTX1NUUklQUEVSX1csIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfSwKKwl7IFRWUDcwMDJfVlNZTkNfQUxHTiwgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9TWU5DX0JZUEFTUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9MX0ZSQU1FX1NUQVRfTFNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0xfRlJBTUVfU1RBVF9NU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfQ0xLX0xfU1RBVF9MU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfQ0xLX0xfU1RBVF9NU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfSFNZTkNfVywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX1ZTWU5DX1csIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9MX0xFTkdUSF9UT0wsIDB4MDMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IDB4M2UsIDB4NjAsIFRWUDcwMDJfUkVTRVJWRUQgfSwKKwl7IFRWUDcwMDJfVklERU9fQldUSF9DVEwsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgyYywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgyYywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwNSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgxZSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9GQklUX0ZfMF9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9GQklUX0ZfMV9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9HX0NPRUZfTFNCUywgMHhlMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9HX0NPRUZfTVNCUywgMHgxNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9CX0NPRUZfTFNCUywgMHg0ZiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9CX0NPRUZfTVNCUywgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9SX0NPRUZfTFNCUywgMHhjZSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfWV9SX0NPRUZfTVNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9HX0NPRUZfTFNCUywgMHhhYiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9HX0NPRUZfTVNCUywgMHhmMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9CX0NPRUZfTFNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9CX0NPRUZfTVNCUywgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9SX0NPRUZfTFNCUywgMHg1NSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVV9SX0NPRUZfTVNCUywgMHhmYywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9HX0NPRUZfTFNCUywgMHg3OCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9HX0NPRUZfTVNCUywgMHhmMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9CX0NPRUZfTFNCUywgMHg4OCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9CX0NPRUZfTVNCUywgMHhmZSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9SX0NPRUZfTFNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9ZVVZfVl9SX0NPRUZfTVNCUywgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCS8qIFRoaXMgc2lnbmFscyBlbmQgb2YgcmVnaXN0ZXIgdmFsdWVzICovCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciA0ODBQICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc180ODBQW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHgzNSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MGEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE0LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHg5MSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4MEIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MTMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MTMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHgxOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgNTc2UCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfNTc2UFtdID0geworCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4MzYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHgxOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4OUIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDBGLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDJELCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4MTgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDEwODBJNjAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzEwODBJNjBbXSA9IHsKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDg5LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4OTgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHg4YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgxNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgxNywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDVhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDMyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciAxMDgwUDYwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc18xMDgwUDYwW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHg4OSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MDgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweEUwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE0LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4OGEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MTYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MTcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHg1YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgzMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgMTA4MEk1MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfMTA4MEk1MFtdID0geworCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4YTUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHg5OCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDhhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDA4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDE2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDE3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4NWEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MzIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDcyMFA2MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfNzIwUDYwW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHg2NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweGEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHg0NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4NEIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MkQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHg1YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgzMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgNzIwUDUwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc183MjBQNTBbXSA9IHsKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDdiLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwYywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4OTgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDQ3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHg0QiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwNSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgyRCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDVhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDMyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBTdHJ1Y3QgbGlzdCBmb3IgYXZhaWxhYmxlIGZvcm1hdHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHR2cDcwMDJfZm10X2xpc3RbXSA9IHsKKwl7CisJIC5pbmRleCA9IDAsCisJIC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCSAuZmxhZ3MgPSAwLAorCSAuZGVzY3JpcHRpb24gPSAiOC1iaXQgVVlWWSA0OjI6MiBGb3JtYXQiLAorCSAucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwl9LAorfTsKKworI2RlZmluZSBOVU1fRk9STUFUUwkJQVJSQVlfU0laRSh0dnA3MDAyX2ZtdF9saXN0KQorCisvKiBQcmVzZXQgZGVmaW5pdGlvbiBmb3IgaGFuZGxpbmcgZGV2aWNlIG9wZXJhdGlvbiAqLworc3RydWN0IHR2cDcwMDJfcHJlc2V0X2RlZmluaXRpb24geworCXUzMiBwcmVzZXQ7CisJY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgKnBfc2V0dGluZ3M7CisJZW51bSB2NGwyX2NvbG9yc3BhY2UgY29sb3Jfc3BhY2U7CisJZW51bSB2NGwyX2ZpZWxkIHNjYW5tb2RlOworCXUxNiBwcm9ncmVzc2l2ZTsKKwl1MTYgbGluZXNfcGVyX2ZyYW1lOworCXUxNiBjcGxfbWluOworCXUxNiBjcGxfbWF4OworfTsKKworLyogU3RydWN0IGxpc3QgZm9yIGRpZ2l0YWwgdmlkZW8gcHJlc2V0cyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0dnA3MDAyX3ByZXNldF9kZWZpbml0aW9uIHR2cDcwMDJfcHJlc2V0c1tdID0geworCXsKKwkJVjRMMl9EVl83MjBQNjAsCisJCXR2cDcwMDJfcGFybXNfNzIwUDYwLAorCQlWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCTEsCisJCTB4MkVFLAorCQkxMzUsCisJCTE1MworCX0sCisJeworCQlWNEwyX0RWXzEwODBJNjAsCisJCXR2cDcwMDJfcGFybXNfMTA4MEk2MCwKKwkJVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwKKwkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkwLAorCQkweDQ2NSwKKwkJMTgxLAorCQkyMDUKKwl9LAorCXsKKwkJVjRMMl9EVl8xMDgwSTUwLAorCQl0dnA3MDAyX3Bhcm1zXzEwODBJNTAsCisJCVY0TDJfQ09MT1JTUEFDRV9SRUM3MDksCisJCVY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJMCwKKwkJMHg0NjUsCisJCTIxNywKKwkJMjQ1CisJfSwKKwl7CisJCVY0TDJfRFZfNzIwUDUwLAorCQl0dnA3MDAyX3Bhcm1zXzcyMFA1MCwKKwkJVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkxLAorCQkweDJFRSwKKwkJMTYzLAorCQkxODMKKwl9LAorCXsKKwkJVjRMMl9EVl8xMDgwUDYwLAorCQl0dnA3MDAyX3Bhcm1zXzEwODBQNjAsCisJCVY0TDJfQ09MT1JTUEFDRV9SRUM3MDksCisJCVY0TDJfRklFTERfTk9ORSwKKwkJMSwKKwkJMHg0NjUsCisJCTkwLAorCQkxMDIKKwl9LAorCXsKKwkJVjRMMl9EVl80ODBQNTlfOTQsCisJCXR2cDcwMDJfcGFybXNfNDgwUCwKKwkJVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkxLAorCQkweDIwRCwKKwkJMHhmZmZmLAorCQkweGZmZmYKKwl9LAorCXsKKwkJVjRMMl9EVl81NzZQNTAsCisJCXR2cDcwMDJfcGFybXNfNTc2UCwKKwkJVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkxLAorCQkweDI3MSwKKwkJMHhmZmZmLAorCQkweGZmZmYKKwl9Cit9OworCisjZGVmaW5lIE5VTV9QUkVTRVRTCUFSUkFZX1NJWkUodHZwNzAwMl9wcmVzZXRzKQorCisvKiBEZXZpY2UgZGVmaW5pdGlvbiAqLworc3RydWN0IHR2cDcwMDIgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwljb25zdCBzdHJ1Y3QgdHZwNzAwMl9jb25maWcgKnBkYXRhOworCisJaW50IHZlcjsKKwlpbnQgc3RyZWFtaW5nOworCisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXg7CisJY29uc3Qgc3RydWN0IHR2cDcwMDJfcHJlc2V0X2RlZmluaXRpb24gKmN1cnJlbnRfcHJlc2V0OworCXU4IGdhaW47Cit9OworCisvKgorICogdG9fdHZwNzAwMiAtIE9idGFpbiBkZXZpY2UgaGFuZGxlciBUVlA3MDAyCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIGRldmljZSBoYW5kbGVyIHR2cDcwMDIuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHR2cDcwMDIgKnRvX3R2cDcwMDIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgdHZwNzAwMiwgc2QpOworfQorCisvKgorICogdHZwNzAwMl9yZWFkIC0gUmVhZCBhIHZhbHVlIGZyb20gYSByZWdpc3RlciBpbiBhbiBUVlA3MDAyCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEByZWc6IFRWUDcwMDIgcmVnaXN0ZXIgYWRkcmVzcworICogQGRzdDogcG9pbnRlciB0byA4LWJpdCBkZXN0aW5hdGlvbgorICoKKyAqIFJldHVybnMgdmFsdWUgcmVhZCBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyAoLTEpIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggYWRkciwgdTggKmRzdCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCWludCByZXRyeTsKKwlpbnQgZXJyb3I7CisKKwlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCBJMkNfUkVUUllfQ09VTlQ7IHJldHJ5KyspIHsKKwkJZXJyb3IgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYywgYWRkcik7CisKKwkJaWYgKGVycm9yID49IDApIHsKKwkJCSpkc3QgPSAodTgpZXJyb3I7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwl9CisJdjRsMl9lcnIoc2QsICJUVlA3MDAyIHJlYWQgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB0dnA3MDAyX3JlYWRfZXJyKCkgLSBSZWFkIGEgcmVnaXN0ZXIgdmFsdWUgd2l0aCBlcnJvciBjb2RlCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQHJlZzogZGVzdGluYXRpb24gcmVnaXN0ZXIKKyAqIEB2YWw6IHZhbHVlIHRvIGJlIHJlYWQKKyAqIEBlcnJvcjogcG9pbnRlciB0byBlcnJvciB2YWx1ZQorICoKKyAqIFJlYWQgYSB2YWx1ZSBpbiBhIHJlZ2lzdGVyIGFuZCBzYXZlIGVycm9yIHZhbHVlIGluIHBvaW50ZXIuCisgKiBBbHNvIHVwZGF0ZSB0aGUgcmVnaXN0ZXIgdGFibGUgaWYgc3VjY2Vzc2Z1bAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdHZwNzAwMl9yZWFkX2VycihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsCisJCQkJCQkJdTggKmRzdCwgaW50ICplcnIpCit7CisJaWYgKCEqZXJyKQorCQkqZXJyID0gdHZwNzAwMl9yZWFkKHNkLCByZWcsIGRzdCk7Cit9CisKKy8qCisgKiB0dnA3MDAyX3dyaXRlKCkgLSBXcml0ZSBhIHZhbHVlIHRvIGEgcmVnaXN0ZXIgaW4gVFZQNzAwMgorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAYWRkcjogVFZQNzAwMiByZWdpc3RlciBhZGRyZXNzCisgKiBAdmFsdWU6IHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVyCisgKgorICogV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIGluIGFuIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UuCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggYWRkciwgdTggdmFsdWUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmM7CisJaW50IHJldHJ5OworCWludCBlcnJvcjsKKworCWMgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IEkyQ19SRVRSWV9DT1VOVDsgcmV0cnkrKykgeworCQllcnJvciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoYywgYWRkciwgdmFsdWUpOworCisJCWlmIChlcnJvciA+PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJdjRsMl93YXJuKHNkLCAiV3JpdGU6IHJldHJ5IC4uLiAlZFxuIiwgcmV0cnkpOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJfQorCXY0bDJfZXJyKHNkLCAiVFZQNzAwMiB3cml0ZSBlcnJvciAlZFxuIiwgZXJyb3IpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIHR2cDcwMDJfd3JpdGVfZXJyKCkgLSBXcml0ZSBhIHJlZ2lzdGVyIHZhbHVlIHdpdGggZXJyb3IgY29kZQorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEByZWc6IGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisgKiBAdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuCisgKiBAZXJyb3I6IHBvaW50ZXIgdG8gZXJyb3IgdmFsdWUKKyAqCisgKiBXcml0ZSBhIHZhbHVlIGluIGEgcmVnaXN0ZXIgYW5kIHNhdmUgZXJyb3IgdmFsdWUgaW4gcG9pbnRlci4KKyAqIEFsc28gdXBkYXRlIHRoZSByZWdpc3RlciB0YWJsZSBpZiBzdWNjZXNzZnVsCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0dnA3MDAyX3dyaXRlX2VycihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsCisJCQkJCQkJdTggdmFsLCBpbnQgKmVycikKK3sKKwlpZiAoISplcnIpCisJCSplcnIgPSB0dnA3MDAyX3dyaXRlKHNkLCByZWcsIHZhbCk7Cit9CisKKy8qCisgKiB0dnA3MDAyX2dfY2hpcF9pZGVudCgpIC0gR2V0IGNoaXAgaWRlbnRpZmljYXRpb24gbnVtYmVyCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBjaGlwOiBwdHIgdG8gdjRsMl9kYmdfY2hpcF9pZGVudCBzdHJ1Y3QKKyAqCisgKiBPYnRhaW5zIHRoZSBjaGlwJ3MgaWRlbnRpZmljYXRpb24gbnVtYmVyLgorICogUmV0dXJucyB6ZXJvIG9yIC1FSU5WQUwgaWYgcmVhZCBvcGVyYXRpb24gZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJdTggcmV2OworCWludCBlcnJvcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwllcnJvciA9IHR2cDcwMDJfcmVhZChzZCwgVFZQNzAwMl9DSElQX1JFViwgJnJldik7CisKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1RWUDcwMDIsIHJldik7Cit9CisKKy8qCisgKiB0dnA3MDAyX3dyaXRlX2luaXR0YWIoKSAtIFdyaXRlIGluaXRpYWxpemF0aW9uIHZhbHVlcworICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAcmVnczogcHRyIHRvIGkyY19yZWdfdmFsdWUgc3RydWN0CisgKgorICogV3JpdGUgaW5pdGlhbGl6YXRpb24gdmFsdWVzLgorICogUmV0dXJucyB6ZXJvIG9yIC1FSU5WQUwgaWYgcmVhZCBvcGVyYXRpb24gZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl93cml0ZV9pbml0dGFiKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCWNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlICpyZWdzKQoreworCWludCBlcnJvciA9IDA7CisKKwkvKiBJbml0aWFsaXplIHRoZSBmaXJzdCAoZGVmaW5lZCkgcmVnaXN0ZXJzICovCisJd2hpbGUgKFRWUDcwMDJfRU9SICE9IHJlZ3MtPnJlZykgeworCQlpZiAoVFZQNzAwMl9XUklURSA9PSByZWdzLT50eXBlKQorCQkJdHZwNzAwMl93cml0ZV9lcnIoc2QsIHJlZ3MtPnJlZywgcmVncy0+dmFsdWUsICZlcnJvcik7CisJCXJlZ3MrKzsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB0dnA3MDAyX3NfZHZfcHJlc2V0KCkgLSBTZXQgZGlnaXRhbCB2aWRlbyBwcmVzZXQKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQHN0ZDogcHRyIHRvIHY0bDJfZHZfcHJlc2V0IHN0cnVjdAorICoKKyAqIFNldCB0aGUgZGlnaXRhbCB2aWRlbyBwcmVzZXQgZm9yIGEgVFZQNzAwMiBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwgb3IgLUVJTlZBTCBpZiByZWdpc3RlciBhY2Nlc3MgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9zX2R2X3ByZXNldChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCQlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKmR2X3ByZXNldCkKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisJdTMyIHByZXNldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fUFJFU0VUUzsgaSsrKSB7CisJCXByZXNldCA9IHR2cDcwMDJfcHJlc2V0c1tpXS5wcmVzZXQ7CisJCWlmIChwcmVzZXQgPT0gZHZfcHJlc2V0LT5wcmVzZXQpIHsKKwkJCWRldmljZS0+Y3VycmVudF9wcmVzZXQgPSAmdHZwNzAwMl9wcmVzZXRzW2ldOworCQkJcmV0dXJuIHR2cDcwMDJfd3JpdGVfaW5pdHRhYihzZCwgdHZwNzAwMl9wcmVzZXRzW2ldLnBfc2V0dGluZ3MpOworCQl9CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiB0dnA3MDAyX2dfY3RybCgpIC0gR2V0IGEgY29udHJvbAorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAY3RybDogcHRyIHRvIHY0bDJfY29udHJvbCBzdHJ1Y3QKKyAqCisgKiBHZXQgYSBjb250cm9sIGZvciBhIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UuCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsIG9yIC1FSU5WQUwgaWYgcmVnaXN0ZXIgYWNjZXNzIGZhaWxzLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJY3RybC0+dmFsdWUgPSBkZXZpY2UtPmdhaW47CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqIHR2cDcwMDJfc19jdHJsKCkgLSBTZXQgYSBjb250cm9sCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBjdHJsOiBwdHIgdG8gdjRsMl9jb250cm9sIHN0cnVjdAorICoKKyAqIFNldCBhIGNvbnRyb2wgaW4gVFZQNzAwMiBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwgb3IgLUVJTlZBTCBpZiByZWdpc3RlciBhY2Nlc3MgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisJaW50IGVycm9yID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCXR2cDcwMDJfd3JpdGVfZXJyKHNkLCBUVlA3MDAyX1JfRklORV9HQUlOLAorCQkJCQkJY3RybC0+dmFsdWUgJiAweGZmLCAmZXJyb3IpOworCQl0dnA3MDAyX3dyaXRlX2VycihzZCwgVFZQNzAwMl9HX0ZJTkVfR0FJTiwKKwkJCQkJCWN0cmwtPnZhbHVlICYgMHhmZiwgJmVycm9yKTsKKwkJdHZwNzAwMl93cml0ZV9lcnIoc2QsIFRWUDcwMDJfQl9GSU5FX0dBSU4sCisJCQkJCQljdHJsLT52YWx1ZSAmIDB4ZmYsICZlcnJvcik7CisKKwkJaWYgKGVycm9yIDwgMCkKKwkJCXJldHVybiBlcnJvcjsKKworCQkvKiBTZXQgb25seSBhZnRlciBrbm93aW5nIHRoZXJlIGlzIG5vIGVycm9yICovCisJCWRldmljZS0+Z2FpbiA9IGN0cmwtPnZhbHVlICYgMHhmZjsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICogdHZwNzAwMl9xdWVyeWN0cmwoKSAtIFF1ZXJ5IGEgY29udHJvbAorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAY3RybDogcHRyIHRvIHY0bDJfcXVlcnljdHJsIHN0cnVjdAorICoKKyAqIFF1ZXJ5IGEgY29udHJvbCBvZiBhIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UuCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsIG9yIC1FSU5WQUwgaWYgcmVnaXN0ZXIgcmVhZCBmYWlscy4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQkvKgorCQkgKiBHYWluIGlzIHN1cHBvcnRlZCBbMC0yNTUsIGRlZmF1bHQ9MCwgc3RlcD0xXQorCQkgKi8KKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDApOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqIHR2cDcwMDJfdHJ5X2ZtdF9jYXAoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3IgdHJ5X2ZtdAorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgVklESU9DX1RSWV9GTVQgaW9jdGwgc3RydWN0dXJlCisgKgorICogSW1wbGVtZW50IHRoZSBWSURJT0NfVFJZX0ZNVCBpb2N0bCBmb3IgdGhlIENBUFRVUkUgYnVmZmVyIHR5cGUuIFRoaXMKKyAqIGlvY3RsIGlzIHVzZWQgdG8gbmVnb3RpYXRlIHRoZSBpbWFnZSBjYXB0dXJlIHNpemUgYW5kIHBpeGVsIGZvcm1hdAorICogd2l0aG91dCBhY3R1YWxseSBtYWtpbmcgaXQgdGFrZSBlZmZlY3QuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl90cnlfZm10X2NhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCXN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0IGVfcHJlc2V0OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeDsKKwlpbnQgZXJyb3IgPSAwOworCisJcGl4ID0gJmYtPmZtdC5waXg7CisKKwkvKiBDYWxjdWxhdGUgaGVpZ2h0IGFuZCB3aWR0aCBiYXNlZCBvbiBjdXJyZW50IHN0YW5kYXJkICovCisJZXJyb3IgPSB2NGxfZmlsbF9kdl9wcmVzZXRfaW5mbyhkZXZpY2UtPmN1cnJlbnRfcHJlc2V0LT5wcmVzZXQsICZlX3ByZXNldCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBpeC0+d2lkdGggPSBlX3ByZXNldC53aWR0aDsKKwlwaXgtPmhlaWdodCA9IGVfcHJlc2V0LmhlaWdodDsKKwlwaXgtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJcGl4LT5maWVsZCA9IGRldmljZS0+Y3VycmVudF9wcmVzZXQtPnNjYW5tb2RlOworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gcGl4LT53aWR0aCAqIDI7CisJcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmJ5dGVzcGVybGluZSAqIHBpeC0+aGVpZ2h0OworCXBpeC0+Y29sb3JzcGFjZSA9IGRldmljZS0+Y3VycmVudF9wcmVzZXQtPmNvbG9yX3NwYWNlOworCXBpeC0+cHJpdiA9IDA7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUcnkgRk1UOiBwaXhlbGZvcm1hdCAtICVzLCBieXRlc3BlcmxpbmUgLSAlZCIKKwkJCSJXaWR0aCAtICVkLCBIZWlnaHQgLSAlZCIsICI4LWJpdCBVWVZZIDQ6MjoyIEZvcm1hdCIsCisJCQlwaXgtPmJ5dGVzcGVybGluZSwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIHR2cDcwMDJfc19mbXQoKSAtIFY0TDIgZGVjb2RlciBpbnRlcmZhY2UgaGFuZGxlciBmb3Igc19mbXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAZjogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIFZJRElPQ19TX0ZNVCBpb2N0bCBzdHJ1Y3R1cmUKKyAqCisgKiBJZiB0aGUgcmVxdWVzdGVkIGZvcm1hdCBpcyBzdXBwb3J0ZWQsIGNvbmZpZ3VyZXMgdGhlIEhXIHRvIHVzZSB0aGF0CisgKiBmb3JtYXQsIHJldHVybnMgZXJyb3IgY29kZSBpZiBmb3JtYXQgbm90IHN1cHBvcnRlZCBvciBIVyBjYW4ndCBiZQorICogY29ycmVjdGx5IGNvbmZpZ3VyZWQuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHR2cDcwMDIgKmRlY29kZXIgPSB0b190dnA3MDAyKHNkKTsKKwlpbnQgcnZhbDsKKworCXJ2YWwgPSB0dnA3MDAyX3RyeV9mbXRfY2FwKHNkLCBmKTsKKwlpZiAoIXJ2YWwpCisJCWRlY29kZXItPnBpeCA9IGYtPmZtdC5waXg7CisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qCisgKiB0dnA3MDAyX2dfZm10KCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHR2cDcwMDJfZ19mbXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAZjogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHY0bDJfZm9ybWF0IHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgdGhlIGRlY29kZXIncyBjdXJyZW50IHBpeGVsIGZvcm1hdCBpbiB0aGUgdjRsMl9mb3JtYXQKKyAqIHBhcmFtZXRlci4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdHZwNzAwMiAqZGVjb2RlciA9IHRvX3R2cDcwMDIoc2QpOworCisJZi0+Zm10LnBpeCA9IGRlY29kZXItPnBpeDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkN1cnJlbnQgRk1UOiBieXRlc3BlcmxpbmUgLSAlZCIKKwkJCSJXaWR0aCAtICVkLCBIZWlnaHQgLSAlZCIsCisJCQlkZWNvZGVyLT5waXguYnl0ZXNwZXJsaW5lLAorCQkJZGVjb2Rlci0+cGl4LndpZHRoLCBkZWNvZGVyLT5waXguaGVpZ2h0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHR2cDcwMDJfcXVlcnlfZHZfcHJlc2V0KCkgLSBxdWVyeSBEViBwcmVzZXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAc3RkX2lkOiBzdGFuZGFyZCBWNEwyIHY0bDJfZHZfcHJlc2V0CisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBEViBwcmVzZXQgYnkgVFZQNzAwMi4gSWYgbm8gYWN0aXZlIGlucHV0IGlzCisgKiBkZXRlY3RlZCwgcmV0dXJucyAtRUlOVkFMCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9xdWVyeV9kdl9wcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqcXByZXNldCkKK3sKKwljb25zdCBzdHJ1Y3QgdHZwNzAwMl9wcmVzZXRfZGVmaW5pdGlvbiAqcHJlc2V0cyA9IHR2cDcwMDJfcHJlc2V0czsKKwlzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCBlX3ByZXNldDsKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlOworCXU4IHByb2dyZXNzaXZlOworCXUzMiBscGZyOworCXUzMiBjcGxuOworCWludCBlcnJvciA9IDA7CisJdTggbHBmX2xzYjsKKwl1OCBscGZfbXNiOworCXU4IGNwbF9sc2I7CisJdTggY3BsX21zYjsKKwlpbnQgaW5kZXg7CisKKwlkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKworCS8qIFJlYWQgc3RhbmRhcmRzIGZyb20gZGV2aWNlIHJlZ2lzdGVycyAqLworCXR2cDcwMDJfcmVhZF9lcnIoc2QsIFRWUDcwMDJfTF9GUkFNRV9TVEFUX0xTQlMsICZscGZfbHNiLCAmZXJyb3IpOworCXR2cDcwMDJfcmVhZF9lcnIoc2QsIFRWUDcwMDJfTF9GUkFNRV9TVEFUX01TQlMsICZscGZfbXNiLCAmZXJyb3IpOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJdHZwNzAwMl9yZWFkX2VycihzZCwgVFZQNzAwMl9DTEtfTF9TVEFUX0xTQlMsICZjcGxfbHNiLCAmZXJyb3IpOworCXR2cDcwMDJfcmVhZF9lcnIoc2QsIFRWUDcwMDJfQ0xLX0xfU1RBVF9NU0JTLCAmY3BsX21zYiwgJmVycm9yKTsKKworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKworCS8qIEdldCBsaW5lcyBwZXIgZnJhbWUsIGNsb2NrcyBwZXIgbGluZSBhbmQgaW50ZXJsYWNlZC9wcm9ncmVzaXZlICovCisJbHBmciA9IGxwZl9sc2IgfCAoKFRWUDcwMDJfQ0xfTUFTSyAmIGxwZl9tc2IpIDw8IFRWUDcwMDJfQ0xfU0hJRlQpOworCWNwbG4gPSBjcGxfbHNiIHwgKChUVlA3MDAyX0NMX01BU0sgJiBjcGxfbXNiKSA8PCBUVlA3MDAyX0NMX1NISUZUKTsKKwlwcm9ncmVzc2l2ZSA9IChscGZfbXNiICYgVFZQNzAwMl9JTlBSX01BU0spID4+IFRWUDcwMDJfSVBfU0hJRlQ7CisKKwkvKiBEbyBjaGVja2luZyBvZiB2aWRlbyBtb2RlcyAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9QUkVTRVRTOyBpbmRleCsrLCBwcmVzZXRzKyspCisJCWlmIChscGZyICA9PSBwcmVzZXRzLT5saW5lc19wZXJfZnJhbWUgJiYKKwkJCXByb2dyZXNzaXZlID09IHByZXNldHMtPnByb2dyZXNzaXZlKSB7CisJCQlpZiAocHJlc2V0cy0+Y3BsX21pbiA9PSAweGZmZmYpCisJCQkJYnJlYWs7CisJCQlpZiAoY3BsbiA+PSBwcmVzZXRzLT5jcGxfbWluICYmIGNwbG4gPD0gcHJlc2V0cy0+Y3BsX21heCkKKwkJCQlicmVhazsKKwkJfQorCisJaWYgKGluZGV4ID09IE5VTV9QUkVTRVRTKSB7CisJCXY0bDJfZXJyKHNkLCAicXVlcnlzdGQgZXJyb3IsIGxwZiA9ICV4LCBjcGwgPSAleFxuIiwKKwkJCQkJCQkJbHBmciwgY3Bsbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2NGxfZmlsbF9kdl9wcmVzZXRfaW5mbyhwcmVzZXRzLT5wcmVzZXQsICZlX3ByZXNldCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2V0IHZhbHVlcyBpbiBmb3VuZCBwcmVzZXQgKi8KKwlxcHJlc2V0LT5wcmVzZXQgPSBwcmVzZXRzLT5wcmVzZXQ7CisKKwkvKiBVcGRhdGUgbGluZXMgcGVyIGZyYW1lIGFuZCBjbG9ja3MgcGVyIGxpbmUgaW5mbyAqLworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIkN1cnJlbnQgcHJlc2V0OiAlZCAlZCIsCisJCQkJCWVfcHJlc2V0LndpZHRoLCBlX3ByZXNldC5oZWlnaHQpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworLyoKKyAqIHR2cDcwMDJfZ19yZWdpc3RlcigpIC0gR2V0IHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVyCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEB2cmVnOiBwdHIgdG8gdjRsMl9kYmdfcmVnaXN0ZXIgc3RydWN0CisgKgorICogR2V0IHRoZSB2YWx1ZSBvZiBhIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UgcmVnaXN0ZXIuCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsLCAtRUlOVkFMIGlmIHJlZ2lzdGVyIHJlYWQgZmFpbHMgb3IKKyAqIGFjY2VzcyB0byBJMkMgY2xpZW50IGZhaWxzLCAtRVBFUk0gaWYgdGhlIGNhbGwgaXMgbm90IGFsbG93ZWQKKyAqIGJ5IGRpYWJsZWQgQ0FQX1NZU19BRE1JTi4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2YWw7CisJaW50IHJldDsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCAmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldCA9IHR2cDcwMDJfcmVhZChzZCwgcmVnLT5yZWcgJiAweGZmLCAmdmFsKTsKKwlyZWctPnZhbCA9IHZhbDsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogdHZwNzAwMl9zX3JlZ2lzdGVyKCkgLSBzZXQgYSBjb250cm9sCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBjdHJsOiBwdHIgdG8gdjRsMl9jb250cm9sIHN0cnVjdAorICoKKyAqIEdldCB0aGUgdmFsdWUgb2YgYSBUVlA3MDAyIGRlY29kZXIgZGV2aWNlIHJlZ2lzdGVyLgorICogUmV0dXJucyB6ZXJvIHdoZW4gc3VjY2Vzc2Z1bCwgLUVJTlZBTCBpZiByZWdpc3RlciByZWFkIGZhaWxzIG9yCisgKiAtRVBFUk0gaWYgY2FsbCBub3QgYWxsb3dlZC4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCAmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiB0dnA3MDAyX3dyaXRlKHNkLCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7Cit9CisjZW5kaWYKKworLyoKKyAqIHR2cDcwMDJfZW51bV9mbXQoKSAtIEVudW0gc3VwcG9ydGVkIGZvcm1hdHMKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAZW5hYmxlOiBwb2ludGVyIHRvIGZvcm1hdCBzdHJ1Y3QKKyAqCisgKiBFbnVtZXJhdGUgc3VwcG9ydGVkIGZvcm1hdHMuCisgKi8KKworc3RhdGljIGludCB0dnA3MDAyX2VudW1fZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXRkZXNjKQoreworCS8qIENoZWNrIHJlcXVlc3RlZCBmb3JtYXQgaW5kZXggaXMgd2l0aGluIHJhbmdlICovCisJaWYgKGZtdGRlc2MtPmluZGV4IDwgMCB8fCBmbXRkZXNjLT5pbmRleCA+PSBOVU1fRk9STUFUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmZtdGRlc2MgPSB0dnA3MDAyX2ZtdF9saXN0W2ZtdGRlc2MtPmluZGV4XTsKKworCXJldHVybiAwOworfQorCisvKgorICogdHZwNzAwMl9zX3N0cmVhbSgpIC0gVjRMMiBkZWNvZGVyIGkvZiBoYW5kbGVyIGZvciBzX3N0cmVhbQorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEBlbmFibGU6IHN0cmVhbWluZyBlbmFibGUgb3IgZGlzYWJsZQorICoKKyAqIFNldHMgc3RyZWFtaW5nIHRvIGVuYWJsZSBvciBkaXNhYmxlLCBpZiBwb3NzaWJsZS4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoZGV2aWNlLT5zdHJlYW1pbmcgPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCWlmIChlbmFibGUpIHsKKwkJLyogU2V0IG91dHB1dCBzdGF0ZSBvbiAobG93IGltcGVkYW5jZSBtZWFucyBzdHJlYW0gb24pICovCisJCWVycm9yID0gdHZwNzAwMl93cml0ZShzZCwgVFZQNzAwMl9NSVNDX0NUTF8yLCAweDAwKTsKKwkJZGV2aWNlLT5zdHJlYW1pbmcgPSBlbmFibGU7CisJfSBlbHNlIHsKKwkJLyogU2V0IG91dHB1dCBzdGF0ZSBvZmYgKGhpZ2ggaW1wZWRhbmNlIG1lYW5zIHN0cmVhbSBvZmYpICovCisJCWVycm9yID0gdHZwNzAwMl93cml0ZShzZCwgVFZQNzAwMl9NSVNDX0NUTF8yLCAweDAzKTsKKwkJaWYgKGVycm9yKQorCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVW5hYmxlIHRvIHN0b3Agc3RyZWFtaW5nXG4iKTsKKworCQlkZXZpY2UtPnN0cmVhbWluZyA9IGVuYWJsZTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB0dnA3MDAyX2xvZ19zdGF0dXMoKSAtIFByaW50IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyIHNldHRpbmdzCisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqCisgKiBMb2cgcmVnaXN0ZXIgdmFsdWVzIG9mIGEgVFZQNzAwMiBkZWNvZGVyIGRldmljZS4KKyAqIFJldHVybnMgemVybyBvciAtRUlOVkFMIGlmIHJlYWQgb3BlcmF0aW9uIGZhaWxzLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCWNvbnN0IHN0cnVjdCB0dnA3MDAyX3ByZXNldF9kZWZpbml0aW9uICpwcmVzZXRzID0gdHZwNzAwMl9wcmVzZXRzOworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKwlzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCBlX3ByZXNldDsKKwlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgZGV0ZWN0ZWQ7CisJaW50IGk7CisKKwlkZXRlY3RlZC5wcmVzZXQgPSBWNEwyX0RWX0lOVkFMSUQ7CisJLyogRmluZCBteSBjdXJyZW50IHN0YW5kYXJkKi8KKwl0dnA3MDAyX3F1ZXJ5X2R2X3ByZXNldChzZCwgJmRldGVjdGVkKTsKKworCS8qIFByaW50IHN0YW5kYXJkIHJlbGF0ZWQgY29kZSB2YWx1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1BSRVNFVFM7IGkrKywgcHJlc2V0cysrKQorCQlpZiAocHJlc2V0cy0+cHJlc2V0ID09IGRldGVjdGVkLnByZXNldCkKKwkJCWJyZWFrOworCisJaWYgKHY0bF9maWxsX2R2X3ByZXNldF9pbmZvKGRldmljZS0+Y3VycmVudF9wcmVzZXQtPnByZXNldCwgJmVfcHJlc2V0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2NGwyX2luZm8oc2QsICJTZWxlY3RlZCBEViBQcmVzZXQ6ICVzXG4iLCBlX3ByZXNldC5uYW1lKTsKKwl2NGwyX2luZm8oc2QsICIgICBQaXhlbHMgcGVyIGxpbmU6ICV1XG4iLCBlX3ByZXNldC53aWR0aCk7CisJdjRsMl9pbmZvKHNkLCAiICAgTGluZXMgcGVyIGZyYW1lOiAldVxuXG4iLCBlX3ByZXNldC5oZWlnaHQpOworCWlmIChpID09IE5VTV9QUkVTRVRTKSB7CisJCXY0bDJfaW5mbyhzZCwgIkRldGVjdGVkIERWIFByZXNldDogTm9uZVxuIik7CisJfSBlbHNlIHsKKwkJaWYgKHY0bF9maWxsX2R2X3ByZXNldF9pbmZvKHByZXNldHMtPnByZXNldCwgJmVfcHJlc2V0KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl2NGwyX2luZm8oc2QsICJEZXRlY3RlZCBEViBQcmVzZXQ6ICVzXG4iLCBlX3ByZXNldC5uYW1lKTsKKwkJdjRsMl9pbmZvKHNkLCAiICBQaXhlbHMgcGVyIGxpbmU6ICV1XG4iLCBlX3ByZXNldC53aWR0aCk7CisJCXY0bDJfaW5mbyhzZCwgIiAgTGluZXMgcGVyIGZyYW1lOiAldVxuXG4iLCBlX3ByZXNldC5oZWlnaHQpOworCX0KKwl2NGwyX2luZm8oc2QsICJTdHJlYW1pbmcgZW5hYmxlZDogJXNcbiIsCisJCQkJCWRldmljZS0+c3RyZWFtaW5nID8gInllcyIgOiAibm8iKTsKKworCS8qIFByaW50IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBnYWluIGNvbnRyb2wgKi8KKwl2NGwyX2luZm8oc2QsICJHYWluOiAldVxuIiwgZGV2aWNlLT5nYWluKTsKKworCXJldHVybiAwOworfQorCisvKiBWNEwyIGNvcmUgb3BlcmF0aW9uIGhhbmRsZXJzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHR2cDcwMDJfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHR2cDcwMDJfZ19jaGlwX2lkZW50LAorCS5sb2dfc3RhdHVzID0gdHZwNzAwMl9sb2dfc3RhdHVzLAorCS5nX2N0cmwgPSB0dnA3MDAyX2dfY3RybCwKKwkuc19jdHJsID0gdHZwNzAwMl9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IHR2cDcwMDJfcXVlcnljdHJsLAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IHR2cDcwMDJfZ19yZWdpc3RlciwKKwkuc19yZWdpc3RlciA9IHR2cDcwMDJfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworLyogU3BlY2lmaWMgdmlkZW8gc3Vic3lzdGVtIG9wZXJhdGlvbiBoYW5kbGVycyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgdHZwNzAwMl92aWRlb19vcHMgPSB7CisJLnNfZHZfcHJlc2V0ID0gdHZwNzAwMl9zX2R2X3ByZXNldCwKKwkucXVlcnlfZHZfcHJlc2V0ID0gdHZwNzAwMl9xdWVyeV9kdl9wcmVzZXQsCisJLnNfc3RyZWFtID0gdHZwNzAwMl9zX3N0cmVhbSwKKwkuZ19mbXQgPSB0dnA3MDAyX2dfZm10LAorCS5zX2ZtdCA9IHR2cDcwMDJfc19mbXQsCisJLmVudW1fZm10ID0gdHZwNzAwMl9lbnVtX2ZtdCwKK307CisKKy8qIFY0TDIgdG9wIGxldmVsIG9wZXJhdGlvbiBoYW5kbGVycyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdHZwNzAwMl9vcHMgPSB7CisJLmNvcmUgPSAmdHZwNzAwMl9jb3JlX29wcywKKwkudmlkZW8gPSAmdHZwNzAwMl92aWRlb19vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHR2cDcwMDIgdHZwNzAwMl9kZXYgPSB7CisJLnN0cmVhbWluZyA9IDAsCisKKwkucGl4ID0geworCQkud2lkdGggPSAxMjgwLAorCQkuaGVpZ2h0ID0gNzIwLAorCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwkJLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCAqIDIsCisJCS5zaXplaW1hZ2UgPSAxMjgwICogMiAqIDcyMCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5LAorCQl9LAorCisJLmN1cnJlbnRfcHJlc2V0ID0gdHZwNzAwMl9wcmVzZXRzLAorCS5nYWluID0gMCwKK307CisKKy8qCisgKiB0dnA3MDAyX3Byb2JlIC0gUHJvYmUgYSBUVlA3MDAyIGRldmljZQorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAY3RybDogcHRyIHRvIGkyY19kZXZpY2VfaWQgc3RydWN0CisgKgorICogSW5pdGlhbGl6ZSB0aGUgVFZQNzAwMiBkZXZpY2UKKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwsIC1FSU5WQUwgaWYgcmVnaXN0ZXIgcmVhZCBmYWlscyBvcgorICogLUVJTyBpZiBpMmMgYWNjZXNzIGlzIG5vdCBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZTsKKwlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgcHJlc2V0OworCWludCBwb2xhcml0eV9hOworCWludCBwb2xhcml0eV9iOworCXU4IHJldmlzaW9uOworCisJaW50IGVycm9yOworCisJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYy0+YWRhcHRlciwKKwkJSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoIWMtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXY0bF9lcnIoYywgIk5vIHBsYXRmb3JtIGRhdGEhIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldmljZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0dnA3MDAyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkqZGV2aWNlID0gdHZwNzAwMl9kZXY7CisJc2QgPSAmZGV2aWNlLT5zZDsKKwlkZXZpY2UtPnBkYXRhID0gYy0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwkvKiBUZWxsIHY0bDIgdGhlIGRldmljZSBpcyByZWFkeSAqLworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjLCAmdHZwNzAwMl9vcHMpOworCXY0bF9pbmZvKGMsICJ0dnA3MDAyIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQkJCWMtPmFkZHIsIGMtPmFkYXB0ZXItPm5hbWUpOworCisJZXJyb3IgPSB0dnA3MDAyX3JlYWQoc2QsIFRWUDcwMDJfQ0hJUF9SRVYsICZyZXZpc2lvbik7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBmb3VuZF9lcnJvcjsKKworCS8qIEdldCByZXZpc2lvbiBudW1iZXIgKi8KKwl2NGwyX2luZm8oc2QsICJSZXYuICUwMnggZGV0ZWN0ZWQuXG4iLCByZXZpc2lvbik7CisJaWYgKHJldmlzaW9uICE9IDB4MDIpCisJCXY0bDJfaW5mbyhzZCwgIlVua25vd24gcmV2aXNpb24gZGV0ZWN0ZWQuXG4iKTsKKworCS8qIEluaXRpYWxpemVzIFRWUDcwMDIgdG8gaXRzIGRlZmF1bHQgdmFsdWVzICovCisJZXJyb3IgPSB0dnA3MDAyX3dyaXRlX2luaXR0YWIoc2QsIHR2cDcwMDJfaW5pdF9kZWZhdWx0KTsKKworCWlmIChlcnJvciA8IDApCisJCWdvdG8gZm91bmRfZXJyb3I7CisKKwkvKiBTZXQgcG9sYXJpdHkgaW5mb3JtYXRpb24gYWZ0ZXIgcmVnaXN0ZXJzIGhhdmUgYmVlbiBzZXQgKi8KKwlwb2xhcml0eV9hID0gMHgyMCB8IGRldmljZS0+cGRhdGEtPmhzX3BvbGFyaXR5IDw8IDUKKwkJCXwgZGV2aWNlLT5wZGF0YS0+dnNfcG9sYXJpdHkgPDwgMjsKKwllcnJvciA9IHR2cDcwMDJfd3JpdGUoc2QsIFRWUDcwMDJfU1lOQ19DVExfMSwgcG9sYXJpdHlfYSk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBmb3VuZF9lcnJvcjsKKworCXBvbGFyaXR5X2IgPSAweDAxICB8IGRldmljZS0+cGRhdGEtPmZpZF9wb2xhcml0eSA8PCAyCisJCQl8IGRldmljZS0+cGRhdGEtPnNvZ19wb2xhcml0eSA8PCAxCisJCQl8IGRldmljZS0+cGRhdGEtPmNsa19wb2xhcml0eTsKKwllcnJvciA9IHR2cDcwMDJfd3JpdGUoc2QsIFRWUDcwMDJfTUlTQ19DVExfMywgcG9sYXJpdHlfYik7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBmb3VuZF9lcnJvcjsKKworCS8qIFNldCByZWdpc3RlcnMgYWNjb3JkaW5nIHRvIGRlZmF1bHQgdmlkZW8gbW9kZSAqLworCXByZXNldC5wcmVzZXQgPSBkZXZpY2UtPmN1cnJlbnRfcHJlc2V0LT5wcmVzZXQ7CisJZXJyb3IgPSB0dnA3MDAyX3NfZHZfcHJlc2V0KHNkLCAmcHJlc2V0KTsKKworZm91bmRfZXJyb3I6CisJaWYgKGVycm9yIDwgMCkKKwkJa2ZyZWUoZGV2aWNlKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIHR2cDcwMDJfcmVtb3ZlIC0gUmVtb3ZlIFRWUDcwMDIgZGV2aWNlIHN1cHBvcnQKKyAqIEBjOiBwdHIgdG8gaTJjX2NsaWVudCBzdHJ1Y3QKKyAqCisgKiBSZXNldCB0aGUgVFZQNzAwMiBkZXZpY2UKKyAqIFJldHVybnMgemVyby4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlJlbW92aW5nIHR2cDcwMDIgYWRhcHRlciIKKwkJCQkib24gYWRkcmVzcyAweCV4XG4iLCBjLT5hZGRyKTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZShkZXZpY2UpOworCXJldHVybiAwOworfQorCisvKiBJMkMgRGV2aWNlIElEIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHZwNzAwMl9pZFtdID0geworCXsgInR2cDcwMDIiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR2cDcwMDJfaWQpOworCisvKiBJMkMgZHJpdmVyIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0dnA3MDAyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBUVlA3MDAyX01PRFVMRV9OQU1FLAorCX0sCisJLnByb2JlID0gdHZwNzAwMl9wcm9iZSwKKwkucmVtb3ZlID0gdHZwNzAwMl9yZW1vdmUsCisJLmlkX3RhYmxlID0gdHZwNzAwMl9pZCwKK307CisKKy8qCisgKiB0dnA3MDAyX2luaXQgLSBJbml0aWFsaXplIGRyaXZlciB2aWEgSTJDIGludGVyZmFjZQorICoKKyAqIFJlZ2lzdGVyIHRoZSBUVlA3MDAyIGRyaXZlci4KKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IF9faW5pdCB0dnA3MDAyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnR2cDcwMDJfZHJpdmVyKTsKK30KKworLyoKKyAqIHR2cDcwMDJfZXhpdCAtIFJlbW92ZSBkcml2ZXIgdmlhIEkyQyBpbnRlcmZhY2UKKyAqCisgKiBVbnJlZ2lzdGVyIHRoZSBUVlA3MDAyIGRyaXZlci4KKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgX19leGl0IHR2cDcwMDJfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ0dnA3MDAyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHR2cDcwMDJfaW5pdCk7Cittb2R1bGVfZXhpdCh0dnA3MDAyX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyX3JlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzRjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDJfcmVnLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qIFRleGFzIEluc3RydW1lbnRzIFRyaXBsZSA4LS8xMC1CSVQgMTY1LS8xMTAtTVNQUyBWaWRlbyBhbmQgR3JhcGhpY3MKKyAqIERpZ2l0aXplciB3aXRoIEhvcml6b250YWwgUExMIHJlZ2lzdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqIEF1dGhvcjogU2FudGlhZ28gTnVuZXotQ29ycmFsZXMgPHNhbnRpYWdvLm51bmV6QHJpZGdlcnVuLmNvbT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgcGFydGlhbGx5IGJhc2VkIHVwb24gdGhlIFRWUDUxNTAgZHJpdmVyCisgKiB3cml0dGVuIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiAobWNoZWhhYkBpbmZyYWRlYWQub3JnKSwKKyAqIHRoZSBUVlA1MTR4IGRyaXZlciB3cml0dGVuIGJ5IFZhaWJoYXYgSGlyZW1hdGggPGh2YWliaGF2QHRpLmNvbT4KKyAqIGFuZCB0aGUgVFZQNzAwMiBkcml2ZXIgaW4gdGhlIFRJIExTUCAyLjEwLjAwLjE0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogTmFtaW5nIGNvbnZlbnRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBGREJLOiAgRmVlZGJhY2sKKyAqIERJVjogICBEaXZpZGVyCisgKiBDVEw6ICAgQ29udHJvbAorICogU0VMOiAgIFNlbGVjdAorICogSU46ICAgIElucHV0CisgKiBPVVQ6ICAgT3V0cHV0CisgKiBSOiAgICAgUmVkCisgKiBHOiAgICAgR3JlZW4KKyAqIEI6ICAgICBCbHVlCisgKiBPRkY6ICAgT2Zmc2V0CisgKiBUSFJTOiAgVGhyZXNob2xkCisgKiBER1RMOiAgRGlnaXRhbAorICogTFZMOiAgIExldmVsCisgKiBQV1I6ICAgUG93ZXIKKyAqIE1WSVM6ICBNYWNyb3Zpc2lvbgorICogVzogICAgIFdpZHRoCisgKiBIOiAgICAgSGVpZ2h0CisgKiBBTEdOOiAgQWxpZ25tZW50CisgKiBDTEs6ICAgQ2xvY2tzCisgKiBUT0w6ICAgVG9sZXJhbmNlCisgKiBCV1RIOiAgQmFuZHdpZHRoCisgKiBDT0VGOiAgQ29lZmZpY2llbnQKKyAqIFNUQVQ6ICBTdGF0dXMKKyAqIEFVVE86ICBBdXRvbWF0aWMKKyAqIEZMRDogICBGaWVsZAorICogTDoJICBMaW5lCisgKi8KKworI2RlZmluZSBUVlA3MDAyX0NISVBfUkVWCQkweDAwCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTCTB4MDEKKyNkZWZpbmUgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMJMHgwMgorI2RlZmluZSBUVlA3MDAyX0hQTExfQ1JUTAkJMHgwMworI2RlZmluZSBUVlA3MDAyX0hQTExfUEhBU0VfU0VMCQkweDA0CisjZGVmaW5lIFRWUDcwMDJfQ0xBTVBfU1RBUlQJCTB4MDUKKyNkZWZpbmUgVFZQNzAwMl9DTEFNUF9XCQkJMHgwNgorI2RlZmluZSBUVlA3MDAyX0hTWU5DX09VVF9XCQkweDA3CisjZGVmaW5lIFRWUDcwMDJfQl9GSU5FX0dBSU4JCTB4MDgKKyNkZWZpbmUgVFZQNzAwMl9HX0ZJTkVfR0FJTgkJMHgwOQorI2RlZmluZSBUVlA3MDAyX1JfRklORV9HQUlOCQkweDBhCisjZGVmaW5lIFRWUDcwMDJfQl9GSU5FX09GRl9NU0JTCQkweDBiCisjZGVmaW5lIFRWUDcwMDJfR19GSU5FX09GRl9NU0JTICAgICAgICAgMHgwYworI2RlZmluZSBUVlA3MDAyX1JfRklORV9PRkZfTVNCUyAgICAgICAgIDB4MGQKKyNkZWZpbmUgVFZQNzAwMl9TWU5DX0NUTF8xCQkweDBlCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9BTkRfQ0xBTVBfQ1RMCTB4MGYKKyNkZWZpbmUgVFZQNzAwMl9TWU5DX09OX0dfVEhSUwkJMHgxMAorI2RlZmluZSBUVlA3MDAyX1NZTkNfU0VQQVJBVE9SX1RIUlMJMHgxMQorI2RlZmluZSBUVlA3MDAyX0hQTExfUFJFX0NPQVNUCQkweDEyCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNUCQkweDEzCisjZGVmaW5lIFRWUDcwMDJfU1lOQ19ERVRFQ1RfU1RBVAkweDE0CisjZGVmaW5lIFRWUDcwMDJfT1VUX0ZPUk1BVFRFUgkJMHgxNQorI2RlZmluZSBUVlA3MDAyX01JU0NfQ1RMXzEJCTB4MTYKKyNkZWZpbmUgVFZQNzAwMl9NSVNDX0NUTF8yICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIFRWUDcwMDJfTUlTQ19DVExfMyAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBUVlA3MDAyX0lOX01VWF9TRUxfMQkJMHgxOQorI2RlZmluZSBUVlA3MDAyX0lOX01VWF9TRUxfMiAgICAgICAgICAgIDB4MWEKKyNkZWZpbmUgVFZQNzAwMl9CX0FORF9HX0NPQVJTRV9HQUlOCTB4MWIKKyNkZWZpbmUgVFZQNzAwMl9SX0NPQVJTRV9HQUlOCQkweDFjCisjZGVmaW5lIFRWUDcwMDJfRklORV9PRkZfTFNCUwkJMHgxZAorI2RlZmluZSBUVlA3MDAyX0JfQ09BUlNFX09GRgkJMHgxZQorI2RlZmluZSBUVlA3MDAyX0dfQ09BUlNFX09GRiAgICAgICAgICAgIDB4MWYKKyNkZWZpbmUgVFZQNzAwMl9SX0NPQVJTRV9PRkYgICAgICAgICAgICAweDIwCisjZGVmaW5lIFRWUDcwMDJfSFNPVVRfT1VUX1NUQVJUCQkweDIxCisjZGVmaW5lIFRWUDcwMDJfTUlTQ19DVExfNAkJMHgyMgorI2RlZmluZSBUVlA3MDAyX0JfREdUTF9BTENfT1VUX0xTQlMJMHgyMworI2RlZmluZSBUVlA3MDAyX0dfREdUTF9BTENfT1VUX0xTQlMgICAgIDB4MjQKKyNkZWZpbmUgVFZQNzAwMl9SX0RHVExfQUxDX09VVF9MU0JTICAgICAweDI1CisjZGVmaW5lIFRWUDcwMDJfQVVUT19MVkxfQ1RMX0VOQUJMRQkweDI2CisjZGVmaW5lIFRWUDcwMDJfREdUTF9BTENfT1VUX01TQlMJMHgyNworI2RlZmluZSBUVlA3MDAyX0FVVE9fTFZMX0NUTF9GSUxURVIJMHgyOAorLyogUmVzZXJ2ZWQgMHgyOSovCisjZGVmaW5lIFRWUDcwMDJfRklORV9DTEFNUF9DVEwJCTB4MmEKKyNkZWZpbmUgVFZQNzAwMl9QV1JfQ1RMCQkJMHgyYgorI2RlZmluZSBUVlA3MDAyX0FEQ19TRVRVUAkJMHgyYworI2RlZmluZSBUVlA3MDAyX0NPQVJTRV9DTEFNUF9DVEwJMHgyZAorI2RlZmluZSBUVlA3MDAyX1NPR19DTEFNUAkJMHgyZQorI2RlZmluZSBUVlA3MDAyX1JHQl9DT0FSU0VfQ0xBTVBfQ1RMCTB4MmYKKyNkZWZpbmUgVFZQNzAwMl9TT0dfQ09BUlNFX0NMQU1QX0NUTAkweDMwCisjZGVmaW5lIFRWUDcwMDJfQUxDX1BMQUNFTUVOVAkJMHgzMQorLyogUmVzZXJ2ZWQgMHgzMiAqLworLyogUmVzZXJ2ZWQgMHgzMyAqLworI2RlZmluZSBUVlA3MDAyX01WSVNfU1RSSVBQRVJfVwkJMHgzNAorI2RlZmluZSBUVlA3MDAyX1ZTWU5DX0FMR04JCTB4MzUKKyNkZWZpbmUgVFZQNzAwMl9TWU5DX0JZUEFTUwkJMHgzNgorI2RlZmluZSBUVlA3MDAyX0xfRlJBTUVfU1RBVF9MU0JTCTB4MzcKKyNkZWZpbmUgVFZQNzAwMl9MX0ZSQU1FX1NUQVRfTVNCUwkweDM4CisjZGVmaW5lIFRWUDcwMDJfQ0xLX0xfU1RBVF9MU0JTCQkweDM5CisjZGVmaW5lIFRWUDcwMDJfQ0xLX0xfU1RBVF9NU0JTICAgICAgCTB4M2EKKyNkZWZpbmUgVFZQNzAwMl9IU1lOQ19XCQkJMHgzYgorI2RlZmluZSBUVlA3MDAyX1ZTWU5DX1cgICAgICAgICAgICAgICAgIDB4M2MKKyNkZWZpbmUgVFZQNzAwMl9MX0xFTkdUSF9UT0wgCQkweDNkCisvKiBSZXNlcnZlZCAweDNlICovCisjZGVmaW5lIFRWUDcwMDJfVklERU9fQldUSF9DVEwJCTB4M2YKKyNkZWZpbmUgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMJMHg0MAorI2RlZmluZSBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUyAgIDB4NDEKKyNkZWZpbmUgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUyAgCTB4NDIKKyNkZWZpbmUgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUyAgICAweDQzCisjZGVmaW5lIFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYJMHg0NAorI2RlZmluZSBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGICAgIDB4NDUKKyNkZWZpbmUgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTgkweDQ2CisjZGVmaW5lIFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04gICAgICAgMHg0NworI2RlZmluZSBUVlA3MDAyX0ZCSVRfRl8wX1NUQVJUX0xfT0ZGCTB4NDgKKyNkZWZpbmUgVFZQNzAwMl9GQklUX0ZfMV9TVEFSVF9MX09GRiAgICAweDQ5CisjZGVmaW5lIFRWUDcwMDJfWVVWX1lfR19DT0VGX0xTQlMJMHg0YQorI2RlZmluZSBUVlA3MDAyX1lVVl9ZX0dfQ09FRl9NU0JTICAgICAgIDB4NGIKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfWV9CX0NPRUZfTFNCUyAgICAgICAweDRjCisjZGVmaW5lIFRWUDcwMDJfWVVWX1lfQl9DT0VGX01TQlMgICAgICAgMHg0ZAorI2RlZmluZSBUVlA3MDAyX1lVVl9ZX1JfQ09FRl9MU0JTICAgICAgIDB4NGUKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfWV9SX0NPRUZfTVNCUyAgICAgICAweDRmCisjZGVmaW5lIFRWUDcwMDJfWVVWX1VfR19DT0VGX0xTQlMgICAgICAgMHg1MAorI2RlZmluZSBUVlA3MDAyX1lVVl9VX0dfQ09FRl9NU0JTICAgICAgIDB4NTEKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVV9CX0NPRUZfTFNCUyAgICAgICAweDUyCisjZGVmaW5lIFRWUDcwMDJfWVVWX1VfQl9DT0VGX01TQlMgICAgICAgMHg1MworI2RlZmluZSBUVlA3MDAyX1lVVl9VX1JfQ09FRl9MU0JTICAgICAgIDB4NTQKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVV9SX0NPRUZfTVNCUyAgICAgICAweDU1CisjZGVmaW5lIFRWUDcwMDJfWVVWX1ZfR19DT0VGX0xTQlMgICAgICAgMHg1NgorI2RlZmluZSBUVlA3MDAyX1lVVl9WX0dfQ09FRl9NU0JTICAgICAgIDB4NTcKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVl9CX0NPRUZfTFNCUyAgICAgICAweDU4CisjZGVmaW5lIFRWUDcwMDJfWVVWX1ZfQl9DT0VGX01TQlMgICAgICAgMHg1OQorI2RlZmluZSBUVlA3MDAyX1lVVl9WX1JfQ09FRl9MU0JTICAgICAgIDB4NWEKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVl9SX0NPRUZfTVNCUyAgICAgICAweDViCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCmluZGV4IDViODAxYTYuLjc2YmU3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYwpAQCAtMjMzLDEwICsyMzMsMTAgQEAKIH07CiAKIHN0cnVjdCB0dzk5MTBfcHJpdiB7Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICAgICAgICAgICAgICAgIHN1YmRldjsKLQlzdHJ1Y3QgdHc5OTEwX3ZpZGVvX2luZm8gICAgICAgKmluZm87Ci0JY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKLQl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOworCXN0cnVjdCB2NGwyX3N1YmRldgkJc3ViZGV2OworCXN0cnVjdCB0dzk5MTBfdmlkZW9faW5mbwkqaW5mbzsKKwljb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwJKnNjYWxlOworCXUzMgkJCQlyZXZpc2lvbjsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgdHc5OTEwX250c2Nfc2NhbGVzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCmluZGV4IDEwNTQ1NDYuLjdjMTdlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCkBAIC0xNDg3LDcgKzE0ODcsNyBAQAogCQl1c2J2aXNpb24tPnZiaSA9IHVzYnZpc2lvbl92ZGV2X2luaXQodXNidmlzaW9uLAogCQkJCQkJICAgICAmdXNidmlzaW9uX3ZiaV90ZW1wbGF0ZSwKIAkJCQkJCSAgICAgIlVTQlZpc2lvbiBWQkkiKTsKLQkJaWYgKHVzYnZpc2lvbi0+dmRldiA9PSBOVUxMKSB7CisJCWlmICh1c2J2aXNpb24tPnZiaSA9PSBOVUxMKSB7CiAJCQlnb3RvIGVycl9leGl0OwogCQl9CiAJCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UodXNidmlzaW9uLT52YmksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwppbmRleCBlYzhlZjhjLi4zYjJlNzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKQEAgLTIzLDkgKzIzLDEzIEBACiAKICNpbmNsdWRlICJ1dmN2aWRlby5oIgogCi0jZGVmaW5lIFVWQ19DVFJMX05EQVRBCQkyCiAjZGVmaW5lIFVWQ19DVFJMX0RBVEFfQ1VSUkVOVAkwCiAjZGVmaW5lIFVWQ19DVFJMX0RBVEFfQkFDS1VQCTEKKyNkZWZpbmUgVVZDX0NUUkxfREFUQV9NSU4JMgorI2RlZmluZSBVVkNfQ1RSTF9EQVRBX01BWAkzCisjZGVmaW5lIFVWQ19DVFJMX0RBVEFfUkVTCTQKKyNkZWZpbmUgVVZDX0NUUkxfREFUQV9ERUYJNQorI2RlZmluZSBVVkNfQ1RSTF9EQVRBX0xBU1QJNgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENvbnRyb2xzCkBAIC03NTUsNiArNzU5LDQ5IEBACiAJcmV0dXJuIGN0cmw7CiB9CiAKK3N0YXRpYyBpbnQgdXZjX2N0cmxfcG9wdWxhdGVfY2FjaGUoc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4sCisJc3RydWN0IHV2Y19jb250cm9sICpjdHJsKQoreworCWludCByZXQ7CisKKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfREVGKSB7CisJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfREVGLCBjdHJsLT5lbnRpdHktPmlkLAorCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCisJCQkJICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfREVGKSwKKwkJCQkgICAgIGN0cmwtPmluZm8tPnNpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01JTikgeworCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX01JTiwgY3RybC0+ZW50aXR5LT5pZCwKKwkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAorCQkJCSAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX01JTiksCisJCQkJICAgICBjdHJsLT5pbmZvLT5zaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfTUFYKSB7CisJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfTUFYLCBjdHJsLT5lbnRpdHktPmlkLAorCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCisJCQkJICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfTUFYKSwKKwkJCQkgICAgIGN0cmwtPmluZm8tPnNpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9SRVMpIHsKKwkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9SRVMsIGN0cmwtPmVudGl0eS0+aWQsCisJCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKKwkJCQkgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9SRVMpLAorCQkJCSAgICAgY3RybC0+aW5mby0+c2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwljdHJsLT5jYWNoZWQgPSAxOworCXJldHVybiAwOworfQorCiBpbnQgdXZjX3F1ZXJ5X3Y0bDJfY3RybChzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiwKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnY0bDJfY3RybCkKIHsKQEAgLTc2MiwxNyArODA5LDEyIEBACiAJc3RydWN0IHV2Y19jb250cm9sX21hcHBpbmcgKm1hcHBpbmc7CiAJc3RydWN0IHV2Y19tZW51X2luZm8gKm1lbnU7CiAJdW5zaWduZWQgaW50IGk7Ci0JX191OCAqZGF0YTsKIAlpbnQgcmV0OwogCiAJY3RybCA9IHV2Y19maW5kX2NvbnRyb2woY2hhaW4sIHY0bDJfY3RybC0+aWQsICZtYXBwaW5nKTsKIAlpZiAoY3RybCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRhdGEgPSBrbWFsbG9jKGN0cmwtPmluZm8tPnNpemUsIEdGUF9LRVJORUwpOwotCWlmIChkYXRhID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJbWVtc2V0KHY0bDJfY3RybCwgMCwgc2l6ZW9mICp2NGwyX2N0cmwpOwogCXY0bDJfY3RybC0+aWQgPSBtYXBwaW5nLT5pZDsKIAl2NGwyX2N0cmwtPnR5cGUgPSBtYXBwaW5nLT52NGwyX3R5cGU7CkBAIC03ODIsMTQgKzgyNCwxNSBAQAogCWlmICghKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfU0VUX0NVUikpCiAJCXY0bDJfY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZOwogCi0JaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX0RFRikgewotCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX0RFRiwgY3RybC0+ZW50aXR5LT5pZCwKLQkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAotCQkJCSAgICAgZGF0YSwgY3RybC0+aW5mby0+c2l6ZSk7CisJaWYgKCFjdHJsLT5jYWNoZWQpIHsKKwkJcmV0ID0gdXZjX2N0cmxfcG9wdWxhdGVfY2FjaGUoY2hhaW4sIGN0cmwpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQl2NGwyX2N0cmwtPmRlZmF1bHRfdmFsdWUgPQotCQkJbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfREVGLCBkYXRhKTsKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX0RFRikgeworCQl2NGwyX2N0cmwtPmRlZmF1bHRfdmFsdWUgPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9ERUYsCisJCQkJdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0RFRikpOwogCX0KIAogCXN3aXRjaCAobWFwcGluZy0+djRsMl90eXBlKSB7CkBAIC04MDYsNTYgKzg0OSwzNyBAQAogCQkJfQogCQl9CiAKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCiAJY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgogCQl2NGwyX2N0cmwtPm1pbmltdW0gPSAwOwogCQl2NGwyX2N0cmwtPm1heGltdW0gPSAxOwogCQl2NGwyX2N0cmwtPnN0ZXAgPSAxOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAKIAljYXNlIFY0TDJfQ1RSTF9UWVBFX0JVVFRPTjoKIAkJdjRsMl9jdHJsLT5taW5pbXVtID0gMDsKIAkJdjRsMl9jdHJsLT5tYXhpbXVtID0gMDsKIAkJdjRsMl9jdHJsLT5zdGVwID0gMDsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01JTikgewotCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX01JTiwgY3RybC0+ZW50aXR5LT5pZCwKLQkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAotCQkJCSAgICAgZGF0YSwgY3RybC0+aW5mby0+c2l6ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXY0bDJfY3RybC0+bWluaW11bSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01JTiwgZGF0YSk7Ci0JfQotCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9NQVgpIHsKLQkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9NQVgsIGN0cmwtPmVudGl0eS0+aWQsCi0JCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKLQkJCQkgICAgIGRhdGEsIGN0cmwtPmluZm8tPnNpemUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQl2NGwyX2N0cmwtPm1heGltdW0gPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9NQVgsIGRhdGEpOwotCX0KLQlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfUkVTKSB7Ci0JCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfUkVTLCBjdHJsLT5lbnRpdHktPmlkLAotCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCi0JCQkJICAgICBkYXRhLCBjdHJsLT5pbmZvLT5zaXplKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJdjRsMl9jdHJsLT5zdGVwID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfUkVTLCBkYXRhKTsKLQl9CisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01JTikKKwkJdjRsMl9jdHJsLT5taW5pbXVtID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfTUlOLAorCQkJCSAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX01JTikpOwogCi0JcmV0ID0gMDsKLW91dDoKLQlrZnJlZShkYXRhKTsKLQlyZXR1cm4gcmV0OworCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9NQVgpCisJCXY0bDJfY3RybC0+bWF4aW11bSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01BWCwKKwkJCQkgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9NQVgpKTsKKworCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9SRVMpCisJCXY0bDJfY3RybC0+c3RlcCA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX1JFUywKKwkJCQkgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9SRVMpKTsKKworCXJldHVybiAwOwogfQogCiAKQEAgLTk5NywxOSArMTAyMSw1NyBAQAogewogCXN0cnVjdCB1dmNfY29udHJvbCAqY3RybDsKIAlzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyAqbWFwcGluZzsKLQlzMzIgdmFsdWUgPSB4Y3RybC0+dmFsdWU7CisJczMyIHZhbHVlOworCXUzMiBzdGVwOworCXMzMiBtaW47CisJczMyIG1heDsKIAlpbnQgcmV0OwogCiAJY3RybCA9IHV2Y19maW5kX2NvbnRyb2woY2hhaW4sIHhjdHJsLT5pZCwgJm1hcHBpbmcpOwogCWlmIChjdHJsID09IE5VTEwgfHwgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfU0VUX0NVUikgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobWFwcGluZy0+djRsMl90eXBlID09IFY0TDJfQ1RSTF9UWVBFX01FTlUpIHsKLQkJaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSBtYXBwaW5nLT5tZW51X2NvdW50KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXZhbHVlID0gbWFwcGluZy0+bWVudV9pbmZvW3ZhbHVlXS52YWx1ZTsKKwkvKiBDbGFtcCBvdXQgb2YgcmFuZ2UgdmFsdWVzLiAqLworCXN3aXRjaCAobWFwcGluZy0+djRsMl90eXBlKSB7CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOgorCQlpZiAoIWN0cmwtPmNhY2hlZCkgeworCQkJcmV0ID0gdXZjX2N0cmxfcG9wdWxhdGVfY2FjaGUoY2hhaW4sIGN0cmwpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCW1pbiA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01JTiwKKwkJCQkgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfTUlOKSk7CisJCW1heCA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01BWCwKKwkJCQkgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfTUFYKSk7CisJCXN0ZXAgPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9SRVMsCisJCQkJICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9SRVMpKTsKKworCQl4Y3RybC0+dmFsdWUgPSBtaW4gKyAoeGN0cmwtPnZhbHVlIC0gbWluICsgc3RlcC8yKSAvIHN0ZXAgKiBzdGVwOworCQl4Y3RybC0+dmFsdWUgPSBjbGFtcCh4Y3RybC0+dmFsdWUsIG1pbiwgbWF4KTsKKwkJdmFsdWUgPSB4Y3RybC0+dmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgorCQl4Y3RybC0+dmFsdWUgPSBjbGFtcCh4Y3RybC0+dmFsdWUsIDAsIDEpOworCQl2YWx1ZSA9IHhjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX01FTlU6CisJCWlmICh4Y3RybC0+dmFsdWUgPCAwIHx8IHhjdHJsLT52YWx1ZSA+PSBtYXBwaW5nLT5tZW51X2NvdW50KQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCXZhbHVlID0gbWFwcGluZy0+bWVudV9pbmZvW3hjdHJsLT52YWx1ZV0udmFsdWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdmFsdWUgPSB4Y3RybC0+dmFsdWU7CisJCWJyZWFrOwogCX0KIAorCS8qIElmIHRoZSBtYXBwaW5nIGRvZXNuJ3Qgc3BhbiB0aGUgd2hvbGUgVVZDIGNvbnRyb2wsIHRoZSBjdXJyZW50IHZhbHVlCisJICogbmVlZHMgdG8gYmUgbG9hZGVkIGZyb20gdGhlIGRldmljZSB0byBwZXJmb3JtIHRoZSByZWFkLW1vZGlmeS13cml0ZQorCSAqIG9wZXJhdGlvbi4KKwkgKi8KIAlpZiAoIWN0cmwtPmxvYWRlZCAmJiAoY3RybC0+aW5mby0+c2l6ZSAqIDgpICE9IG1hcHBpbmctPnNpemUpIHsKIAkJaWYgKChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9DVVIpID09IDApIHsKIAkJCW1lbXNldCh1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfQ1VSUkVOVCksCkBAIC0xMDI3LDYgKzEwODksNyBAQAogCQljdHJsLT5sb2FkZWQgPSAxOwogCX0KIAorCS8qIEJhY2t1cCB0aGUgY3VycmVudCB2YWx1ZSBpbiBjYXNlIHdlIG5lZWQgdG8gcm9sbGJhY2sgbGF0ZXIuICovCiAJaWYgKCFjdHJsLT5kaXJ0eSkgewogCQltZW1jcHkodXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0JBQ0tVUCksCiAJCSAgICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfQ1VSUkVOVCksCkBAIC0xMDgwLDEwICsxMTQzLDggQEAKIAl9CiAKIAlpZiAoIWZvdW5kKSB7Ci0JCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKLQkJCSJDb250cm9sICIgVVZDX0dVSURfRk9STUFUICIvJXUgbm90IGZvdW5kLlxuIiwKLQkJCVVWQ19HVUlEX0FSR1MoZW50aXR5LT5leHRlbnNpb24uZ3VpZEV4dGVuc2lvbkNvZGUpLAotCQkJeGN0cmwtPnNlbGVjdG9yKTsKKwkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQ29udHJvbCAlcFVsLyV1IG5vdCBmb3VuZC5cbiIsCisJCQllbnRpdHktPmV4dGVuc2lvbi5ndWlkRXh0ZW5zaW9uQ29kZSwgeGN0cmwtPnNlbGVjdG9yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTU5LDkgKzEyMjAsOSBAQAogCQkJICAgIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX1JFU1RPUkUpID09IDApCiAJCQkJY29udGludWU7CiAKLQkJCXByaW50ayhLRVJOX0lORk8gInJlc3RvcmluZyBjb250cm9sICIgVVZDX0dVSURfRk9STUFUCi0JCQkJIi8ldS8ldVxuIiwgVVZDX0dVSURfQVJHUyhjdHJsLT5pbmZvLT5lbnRpdHkpLAotCQkJCWN0cmwtPmluZm8tPmluZGV4LCBjdHJsLT5pbmZvLT5zZWxlY3Rvcik7CisJCQlwcmludGsoS0VSTl9JTkZPICJyZXN0b3JpbmcgY29udHJvbCAlcFVsLyV1LyV1XG4iLAorCQkJCWN0cmwtPmluZm8tPmVudGl0eSwgY3RybC0+aW5mby0+aW5kZXgsCisJCQkJY3RybC0+aW5mby0+c2VsZWN0b3IpOwogCQkJY3RybC0+ZGlydHkgPSAxOwogCQl9CiAKQEAgLTEyMTUsNDcgKzEyNzYsNDMgQEAKIAkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoZGV2LCBVVkNfR0VUX0xFTiwgY3RybC0+ZW50aXR5LT5pZCwKIAkJCWRldi0+aW50Zm51bSwgaW5mby0+c2VsZWN0b3IsIChfX3U4ICopJnNpemUsIDIpOwogCQlpZiAocmV0IDwgMCkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiR0VUX0xFTiBmYWlsZWQgb24gIgotCQkJCSJjb250cm9sICIgVVZDX0dVSURfRk9STUFUICIvJXUgKCVkKS5cbiIsCi0JCQkJVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLCBpbmZvLT5zZWxlY3RvciwKLQkJCQlyZXQpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJCSJHRVRfTEVOIGZhaWxlZCBvbiBjb250cm9sICVwVWwvJXUgKCVkKS5cbiIsCisJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3RvciwgcmV0KTsKIAkJCXJldHVybjsKIAkJfQogCiAJCWlmIChpbmZvLT5zaXplICE9IGxlMTZfdG9fY3B1KHNpemUpKSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICIgVVZDX0dVSURfRk9STUFUCi0JCQkJIi8ldSBzaXplIGRvZXNuJ3QgbWF0Y2ggdXNlciBzdXBwbGllZCAiCi0JCQkJInZhbHVlLlxuIiwgVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLAotCQkJCWluZm8tPnNlbGVjdG9yKTsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgJXBVbC8ldSBzaXplICIKKwkJCQkiZG9lc24ndCBtYXRjaCB1c2VyIHN1cHBsaWVkIHZhbHVlLlxuIiwKKwkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKIAkJCXJldHVybjsKIAkJfQogCiAJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGRldiwgVVZDX0dFVF9JTkZPLCBjdHJsLT5lbnRpdHktPmlkLAogCQkJZGV2LT5pbnRmbnVtLCBpbmZvLT5zZWxlY3RvciwgJmluZiwgMSk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJHRVRfSU5GTyBmYWlsZWQgb24gIgotCQkJCSJjb250cm9sICIgVVZDX0dVSURfRk9STUFUICIvJXUgKCVkKS5cbiIsCi0JCQkJVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLCBpbmZvLT5zZWxlY3RvciwKLQkJCQlyZXQpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJCSJHRVRfSU5GTyBmYWlsZWQgb24gY29udHJvbCAlcFVsLyV1ICglZCkuXG4iLAorCQkJCWluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IsIHJldCk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlmbGFncyA9IGluZm8tPmZsYWdzOwogCQlpZiAoKChmbGFncyAmIFVWQ19DT05UUk9MX0dFVF9DVVIpICYmICEoaW5mICYgKDEgPDwgMCkpKSB8fAogCQkgICAgKChmbGFncyAmIFVWQ19DT05UUk9MX1NFVF9DVVIpICYmICEoaW5mICYgKDEgPDwgMSkpKSkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQ29udHJvbCAiCi0JCQkJVVZDX0dVSURfRk9STUFUICIvJXUgZmxhZ3MgZG9uJ3QgbWF0Y2ggIgotCQkJCSJzdXBwb3J0ZWQgb3BlcmF0aW9ucy5cbiIsCi0JCQkJVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLCBpbmZvLT5zZWxlY3Rvcik7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICVwVWwvJXUgZmxhZ3MgIgorCQkJCSJkb24ndCBtYXRjaCBzdXBwb3J0ZWQgb3BlcmF0aW9ucy5cbiIsCisJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3Rvcik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAljdHJsLT5pbmZvID0gaW5mbzsKLQljdHJsLT5kYXRhID0ga21hbGxvYyhjdHJsLT5pbmZvLT5zaXplICogVVZDX0NUUkxfTkRBVEEsIEdGUF9LRVJORUwpOwotCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkFkZGVkIGNvbnRyb2wgIiBVVkNfR1VJRF9GT1JNQVQgIi8ldSAiCi0JCSJ0byBkZXZpY2UgJXMgZW50aXR5ICV1XG4iLCBVVkNfR1VJRF9BUkdTKGN0cmwtPmluZm8tPmVudGl0eSksCi0JCWN0cmwtPmluZm8tPnNlbGVjdG9yLCBkZXYtPnVkZXYtPmRldnBhdGgsIGVudGl0eS0+aWQpOworCWN0cmwtPmRhdGEgPSBrbWFsbG9jKGN0cmwtPmluZm8tPnNpemUgKiBVVkNfQ1RSTF9EQVRBX0xBU1QsIEdGUF9LRVJORUwpOworCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkFkZGVkIGNvbnRyb2wgJXBVbC8ldSB0byBkZXZpY2UgJXMgIgorCQkiZW50aXR5ICV1XG4iLCBjdHJsLT5pbmZvLT5lbnRpdHksIGN0cmwtPmluZm8tPnNlbGVjdG9yLAorCQlkZXYtPnVkZXYtPmRldnBhdGgsIGVudGl0eS0+aWQpOwogfQogCiAvKgpAQCAtMTI4MSwxNyArMTMzOCwxNiBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKGN0cmwtPnNlbGVjdG9yID09IGluZm8tPnNlbGVjdG9yKSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICIKLQkJCQlVVkNfR1VJRF9GT1JNQVQgIi8ldSBpcyBhbHJlYWR5IGRlZmluZWQuXG4iLAotCQkJCVVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwgaW5mby0+c2VsZWN0b3IpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJCSJDb250cm9sICVwVWwvJXUgaXMgYWxyZWFkeSBkZWZpbmVkLlxuIiwKKwkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKIAkJCXJldCA9IC1FRVhJU1Q7CiAJCQlnb3RvIGVuZDsKIAkJfQogCQlpZiAoY3RybC0+aW5kZXggPT0gaW5mby0+aW5kZXgpIHsKLQkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgIgotCQkJCVVWQ19HVUlEX0ZPUk1BVCAiLyV1IHdvdWxkIG92ZXJ3cml0ZSBpbmRleCAiCi0JCQkJIiVkLlxuIiwgVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLAotCQkJCWluZm8tPnNlbGVjdG9yLCBpbmZvLT5pbmRleCk7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsCisJCQkJIkNvbnRyb2wgJXBVbC8ldSB3b3VsZCBvdmVyd3JpdGUgaW5kZXggJWQuXG4iLAorCQkJCWluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IsIGluZm8tPmluZGV4KTsKIAkJCXJldCA9IC1FRVhJU1Q7CiAJCQlnb3RvIGVuZDsKIAkJfQpAQCAtMTMzMiwxMCArMTM4OCw5IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoaW5mby0+c2l6ZSAqIDggPCBtYXBwaW5nLT5zaXplICsgbWFwcGluZy0+b2Zmc2V0KSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJNYXBwaW5nICclcycgd291bGQgIgotCQkJCSJvdmVyZmxvdyBjb250cm9sICIgVVZDX0dVSURfRk9STUFUICIvJXVcbiIsCi0JCQkJbWFwcGluZy0+bmFtZSwgVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLAotCQkJCWluZm8tPnNlbGVjdG9yKTsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKKwkJCQkiTWFwcGluZyAnJXMnIHdvdWxkIG92ZXJmbG93IGNvbnRyb2wgJXBVbC8ldVxuIiwKKwkJCQltYXBwaW5nLT5uYW1lLCBpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKIAkJCXJldCA9IC1FT1ZFUkZMT1c7CiAJCQlnb3RvIGVuZDsKIAkJfQpAQCAtMTM1NCw5ICsxNDA5LDkgQEAKIAogCQltYXBwaW5nLT5jdHJsID0gaW5mbzsKIAkJbGlzdF9hZGRfdGFpbCgmbWFwcGluZy0+bGlzdCwgJmluZm8tPm1hcHBpbmdzKTsKLQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQWRkaW5nIG1hcHBpbmcgJXMgdG8gY29udHJvbCAiCi0JCQlVVkNfR1VJRF9GT1JNQVQgIi8ldS5cbiIsIG1hcHBpbmctPm5hbWUsCi0JCQlVVkNfR1VJRF9BUkdTKGluZm8tPmVudGl0eSksIGluZm8tPnNlbGVjdG9yKTsKKwkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJIkFkZGluZyBtYXBwaW5nICVzIHRvIGNvbnRyb2wgJXBVbC8ldS5cbiIsCisJCQltYXBwaW5nLT5uYW1lLCBpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yKTsKIAogCQlyZXQgPSAwOwogCQlicmVhazsKQEAgLTEzNzgsNiArMTQzMyw3IEBACiAJCXN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkOwogCQl1OCBpbmRleDsKIAl9IGJsYWNrbGlzdFtdID0geworCQl7IHsgVVNCX0RFVklDRSgweDEzZDMsIDB4NTA5YikgfSwgOSB9LCAvKiBHYWluICovCiAJCXsgeyBVU0JfREVWSUNFKDB4MWM0ZiwgMHgzMDAwKSB9LCA2IH0sIC8qIFdCIFRlbXBlcmF0dXJlICovCiAJCXsgeyBVU0JfREVWSUNFKDB4NTk4NiwgMHgwMjQxKSB9LCAyIH0sIC8qIEh1ZSAqLwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKaW5kZXggMzkxY2NjYy4uYTgxNDgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwpAQCAtNDMsOCArNDMsOSBAQAogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJInYwLjEuMCIKICNlbmRpZgogCit1bnNpZ25lZCBpbnQgdXZjX2Nsb2NrX3BhcmFtID0gQ0xPQ0tfTU9OT1RPTklDOwogdW5zaWduZWQgaW50IHV2Y19ub19kcm9wX3BhcmFtOwotc3RhdGljIHVuc2lnbmVkIGludCB1dmNfcXVpcmtzX3BhcmFtOworc3RhdGljIHVuc2lnbmVkIGludCB1dmNfcXVpcmtzX3BhcmFtID0gLTE7CiB1bnNpZ25lZCBpbnQgdXZjX3RyYWNlX3BhcmFtOwogdW5zaWduZWQgaW50IHV2Y190aW1lb3V0X3BhcmFtID0gVVZDX0NUUkxfU1RSRUFNSU5HX1RJTUVPVVQ7CiAKQEAgLTU5LDYgKzYwLDExIEBACiAJCS5mY2MJCT0gVjRMMl9QSVhfRk1UX1lVWVYsCiAJfSwKIAl7CisJCS5uYW1lCQk9ICJZVVYgNDoyOjIgKFlVWVYpIiwKKwkJLmd1aWQJCT0gVVZDX0dVSURfRk9STUFUX1lVWTJfSVNJR0hULAorCQkuZmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCX0sCisJewogCQkubmFtZQkJPSAiWVVWIDQ6MjowIChOVjEyKSIsCiAJCS5ndWlkCQk9IFVWQ19HVUlEX0ZPUk1BVF9OVjEyLAogCQkuZmNjCQk9IFY0TDJfUElYX0ZNVF9OVjEyLApAQCAtMzA5LDExICszMTUsMTAgQEAKIAkJCQlzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJCWZvcm1hdC0+ZmNjID0gZm10ZGVzYy0+ZmNjOwogCQl9IGVsc2UgewotCQkJdXZjX3ByaW50ayhLRVJOX0lORk8sICJVbmtub3duIHZpZGVvIGZvcm1hdCAiCi0JCQkJVVZDX0dVSURfRk9STUFUICJcbiIsCi0JCQkJVVZDX0dVSURfQVJHUygmYnVmZmVyWzVdKSk7Ci0JCQlzbnByaW50Zihmb3JtYXQtPm5hbWUsIHNpemVvZiBmb3JtYXQtPm5hbWUsCi0JCQkJVVZDX0dVSURfRk9STUFULCBVVkNfR1VJRF9BUkdTKCZidWZmZXJbNV0pKTsKKwkJCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiVW5rbm93biB2aWRlbyBmb3JtYXQgJXBVbFxuIiwKKwkJCQkmYnVmZmVyWzVdKTsKKwkJCXNucHJpbnRmKGZvcm1hdC0+bmFtZSwgc2l6ZW9mKGZvcm1hdC0+bmFtZSksICIlcFVsXG4iLAorCQkJCSZidWZmZXJbNV0pOwogCQkJZm9ybWF0LT5mY2MgPSAwOwogCQl9CiAKQEAgLTE3NTAsNyArMTc1NSw4IEBACiAJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CiAJZGV2LT5pbnRmID0gdXNiX2dldF9pbnRmKGludGYpOwogCWRldi0+aW50Zm51bSA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0JZGV2LT5xdWlya3MgPSBpZC0+ZHJpdmVyX2luZm8gfCB1dmNfcXVpcmtzX3BhcmFtOworCWRldi0+cXVpcmtzID0gKHV2Y19xdWlya3NfcGFyYW0gPT0gLTEpCisJCSAgICA/IGlkLT5kcml2ZXJfaW5mbyA6IHV2Y19xdWlya3NfcGFyYW07CiAKIAlpZiAodWRldi0+cHJvZHVjdCAhPSBOVUxMKQogCQlzdHJsY3B5KGRldi0+bmFtZSwgdWRldi0+cHJvZHVjdCwgc2l6ZW9mIGRldi0+bmFtZSk7CkBAIC0xNzczLDkgKzE3NzksOSBAQAogCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAotCWlmICh1dmNfcXVpcmtzX3BhcmFtICE9IDApIHsKLQkJdXZjX3ByaW50ayhLRVJOX0lORk8sICJGb3JjaW5nIGRldmljZSBxdWlya3MgMHgleCBieSBtb2R1bGUgIgotCQkJInBhcmFtZXRlciBmb3IgdGVzdGluZyBwdXJwb3NlLlxuIiwgdXZjX3F1aXJrc19wYXJhbSk7CisJaWYgKGRldi0+cXVpcmtzICE9IGlkLT5kcml2ZXJfaW5mbykgeworCQl1dmNfcHJpbnRrKEtFUk5fSU5GTywgIkZvcmNpbmcgZGV2aWNlIHF1aXJrcyB0byAweCV4IGJ5IG1vZHVsZSAiCisJCQkicGFyYW1ldGVyIGZvciB0ZXN0aW5nIHB1cnBvc2UuXG4iLCBkZXYtPnF1aXJrcyk7CiAJCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiUGxlYXNlIHJlcG9ydCByZXF1aXJlZCBxdWlya3MgdG8gdGhlICIKIAkJCSJsaW51eC11dmMtZGV2ZWwgbWFpbGluZyBsaXN0LlxuIik7CiAJfQpAQCAtMTg5Miw2ICsxODk4LDQ1IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTW9kdWxlIHBhcmFtZXRlcnMKKyAqLworCitzdGF0aWMgaW50IHV2Y19jbG9ja19wYXJhbV9nZXQoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpZiAodXZjX2Nsb2NrX3BhcmFtID09IENMT0NLX01PTk9UT05JQykKKwkJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiQ0xPQ0tfTU9OT1RPTklDIik7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWZmZXIsICJDTE9DS19SRUFMVElNRSIpOworfQorCitzdGF0aWMgaW50IHV2Y19jbG9ja19wYXJhbV9zZXQoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpZiAoc3RybmNhc2VjbXAodmFsLCAiY2xvY2tfIiwgc3RybGVuKCJjbG9ja18iKSkgPT0gMCkKKwkJdmFsICs9IHN0cmxlbigiY2xvY2tfIik7CisKKwlpZiAoc3RyY2FzZWNtcCh2YWwsICJtb25vdG9uaWMiKSA9PSAwKQorCQl1dmNfY2xvY2tfcGFyYW0gPSBDTE9DS19NT05PVE9OSUM7CisJZWxzZSBpZiAoc3RyY2FzZWNtcCh2YWwsICJyZWFsdGltZSIpID09IDApCisJCXV2Y19jbG9ja19wYXJhbSA9IENMT0NLX1JFQUxUSU1FOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX3BhcmFtX2NhbGwoY2xvY2ssIHV2Y19jbG9ja19wYXJhbV9zZXQsIHV2Y19jbG9ja19wYXJhbV9nZXQsCisJCSAgJnV2Y19jbG9ja19wYXJhbSwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xvY2ssICJWaWRlbyBidWZmZXJzIHRpbWVzdGFtcCBjbG9jayIpOworbW9kdWxlX3BhcmFtX25hbWVkKG5vZHJvcCwgdXZjX25vX2Ryb3BfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKG5vZHJvcCwgIkRvbid0IGRyb3AgaW5jb21wbGV0ZSBmcmFtZXMiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChxdWlya3MsIHV2Y19xdWlya3NfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHF1aXJrcywgIkZvcmNlZCBkZXZpY2UgcXVpcmtzIik7Cittb2R1bGVfcGFyYW1fbmFtZWQodHJhY2UsIHV2Y190cmFjZV9wYXJhbSwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0ModHJhY2UsICJUcmFjZSBsZXZlbCBiaXRtYXNrIik7Cittb2R1bGVfcGFyYW1fbmFtZWQodGltZW91dCwgdXZjX3RpbWVvdXRfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJTdHJlYW1pbmcgY29udHJvbCByZXF1ZXN0cyB0aW1lb3V0Iik7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRHJpdmVyIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwCiAgKi8KIApAQCAtMjE5NywxNSArMjI0Miw2IEBACiBtb2R1bGVfaW5pdCh1dmNfaW5pdCk7CiBtb2R1bGVfZXhpdCh1dmNfY2xlYW51cCk7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChub2Ryb3AsIHV2Y19ub19kcm9wX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhub2Ryb3AsICJEb24ndCBkcm9wIGluY29tcGxldGUgZnJhbWVzIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQocXVpcmtzLCB1dmNfcXVpcmtzX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyhxdWlya3MsICJGb3JjZWQgZGV2aWNlIHF1aXJrcyIpOwotbW9kdWxlX3BhcmFtX25hbWVkKHRyYWNlLCB1dmNfdHJhY2VfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKHRyYWNlLCAiVHJhY2UgbGV2ZWwgYml0bWFzayIpOwotbW9kdWxlX3BhcmFtX25hbWVkKHRpbWVvdXQsIHV2Y190aW1lb3V0X3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiU3RyZWFtaW5nIGNvbnRyb2wgcmVxdWVzdHMgdGltZW91dCIpOwotCiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMKaW5kZXggZWExMTgzOS4uNGE5MjVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMKQEAgLTUwMiw3ICs1MDIsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5pcnFsb2NrLCBmbGFncyk7CiAKIAlidWYtPmJ1Zi5zZXF1ZW5jZSA9IHF1ZXVlLT5zZXF1ZW5jZSsrOwotCWRvX2dldHRpbWVvZmRheSgmYnVmLT5idWYudGltZXN0YW1wKTsKIAogCXdha2VfdXAoJmJ1Zi0+d2FpdCk7CiAJcmV0dXJuIG5leHRidWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwppbmRleCAyMzIzOWE0Li40MzE1MmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKQEAgLTUzOSw3ICs1MzksNyBAQAogCQl4Y3RybC5pZCA9IGN0cmwtPmlkOwogCQl4Y3RybC52YWx1ZSA9IGN0cmwtPnZhbHVlOwogCi0JCXV2Y19jdHJsX2JlZ2luKGNoYWluKTsKKwkJcmV0ID0gdXZjX2N0cmxfYmVnaW4oY2hhaW4pOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTU0OSw2ICs1NDksOCBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCQlyZXQgPSB1dmNfY3RybF9jb21taXQoY2hhaW4pOworCQlpZiAocmV0ID09IDApCisJCQljdHJsLT52YWx1ZSA9IHhjdHJsLnZhbHVlOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggN2RjZjUzNC4uNmIwNjY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTQxMCw2ICs0MTAsOCBAQAogCSAqIHdoZW4gdGhlIEVPRiBiaXQgaXMgc2V0IHRvIGZvcmNlIHN5bmNocm9uaXNhdGlvbiBvbiB0aGUgbmV4dCBwYWNrZXQuCiAJICovCiAJaWYgKGJ1Zi0+c3RhdGUgIT0gVVZDX0JVRl9TVEFURV9BQ1RJVkUpIHsKKwkJc3RydWN0IHRpbWVzcGVjIHRzOworCiAJCWlmIChmaWQgPT0gc3RyZWFtLT5sYXN0X2ZpZCkgewogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9GUkFNRSwgIkRyb3BwaW5nIHBheWxvYWQgKG91dCBvZiAiCiAJCQkJInN5bmMpLlxuIik7CkBAIC00MTksNiArNDIxLDE0IEBACiAJCQlyZXR1cm4gLUVOT0RBVEE7CiAJCX0KIAorCQlpZiAodXZjX2Nsb2NrX3BhcmFtID09IENMT0NLX01PTk9UT05JQykKKwkJCWt0aW1lX2dldF90cygmdHMpOworCQllbHNlCisJCQlrdGltZV9nZXRfcmVhbF90cygmdHMpOworCisJCWJ1Zi0+YnVmLnRpbWVzdGFtcC50dl9zZWMgPSB0cy50dl9zZWM7CisJCWJ1Zi0+YnVmLnRpbWVzdGFtcC50dl91c2VjID0gdHMudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUM7CisKIAkJLyogVE9ETzogSGFuZGxlIFBUUyBhbmQgU0NSLiAqLwogCQlidWYtPnN0YXRlID0gVVZDX0JVRl9TVEFURV9BQ1RJVkU7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKaW5kZXggMjMzNzU4NS4uMmJiYTA1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCkBAIC0xMTMsNiArMTEzLDkgQEAKICNkZWZpbmUgVVZDX0dVSURfRk9STUFUX1lVWTIgXAogCXsgJ1knLCAgJ1UnLCAgJ1knLCAgJzInLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCBcCiAJIDB4ODAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4MDAsIDB4MzgsIDB4OWIsIDB4NzF9CisjZGVmaW5lIFVWQ19HVUlEX0ZPUk1BVF9ZVVkyX0lTSUdIVCBcCisJeyAnWScsICAnVScsICAnWScsICAnMicsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIFwKKwkgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5YiwgMHg3MX0KICNkZWZpbmUgVVZDX0dVSURfRk9STUFUX05WMTIgXAogCXsgJ04nLCAgJ1YnLCAgJzEnLCAgJzInLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCBcCiAJIDB4ODAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4MDAsIDB4MzgsIDB4OWIsIDB4NzF9CkBAIC0xNDksNyArMTUyLDcgQEAKICNkZWZpbmUgVVZDX01BWF9TVEFUVVNfU0laRQkxNgogCiAjZGVmaW5lIFVWQ19DVFJMX0NPTlRST0xfVElNRU9VVAkzMDAKLSNkZWZpbmUgVVZDX0NUUkxfU1RSRUFNSU5HX1RJTUVPVVQJMzAwMAorI2RlZmluZSBVVkNfQ1RSTF9TVFJFQU1JTkdfVElNRU9VVAk1MDAwCiAKIC8qIERldmljZXMgcXVpcmtzICovCiAjZGVmaW5lIFVWQ19RVUlSS19TVEFUVVNfSU5URVJWQUwJMHgwMDAwMDAwMQpAQCAtMjQyLDcgKzI0NSw4IEBACiAJCQkgICB1dmNfY29udHJvbF9pbmZvLiAqLwogCV9fdTggZGlydHkgOiAxLAogCSAgICAgbG9hZGVkIDogMSwKLQkgICAgIG1vZGlmaWVkIDogMTsKKwkgICAgIG1vZGlmaWVkIDogMSwKKwkgICAgIGNhY2hlZCA6IDE7CiAKIAlfX3U4ICpkYXRhOwogfTsKQEAgLTUzMyw2ICs1MzcsNyBAQAogI2RlZmluZSBVVkNfV0FSTl9NSU5NQVgJCTAKICNkZWZpbmUgVVZDX1dBUk5fUFJPQkVfREVGCTEKIAorZXh0ZXJuIHVuc2lnbmVkIGludCB1dmNfY2xvY2tfcGFyYW07CiBleHRlcm4gdW5zaWduZWQgaW50IHV2Y19ub19kcm9wX3BhcmFtOwogZXh0ZXJuIHVuc2lnbmVkIGludCB1dmNfdHJhY2VfcGFyYW07CiBleHRlcm4gdW5zaWduZWQgaW50IHV2Y190aW1lb3V0X3BhcmFtOwpAQCAtNTUyLDE2ICs1NTcsNiBAQAogI2RlZmluZSB1dmNfcHJpbnRrKGxldmVsLCBtc2cuLi4pIFwKIAlwcmludGsobGV2ZWwgInV2Y3ZpZGVvOiAiIG1zZykKIAotI2RlZmluZSBVVkNfR1VJRF9GT1JNQVQgIiUwMnglMDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtIiBcCi0JCQkiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IgotI2RlZmluZSBVVkNfR1VJRF9BUkdTKGd1aWQpIFwKLQkoZ3VpZClbM10sICAoZ3VpZClbMl0sICAoZ3VpZClbMV0sICAoZ3VpZClbMF0sIFwKLQkoZ3VpZClbNV0sICAoZ3VpZClbNF0sIFwKLQkoZ3VpZClbN10sICAoZ3VpZClbNl0sIFwKLQkoZ3VpZClbOF0sICAoZ3VpZClbOV0sIFwKLQkoZ3VpZClbMTBdLCAoZ3VpZClbMTFdLCAoZ3VpZClbMTJdLCBcCi0JKGd1aWQpWzEzXSwgKGd1aWQpWzE0XSwgKGd1aWQpWzE1XQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogSW50ZXJuYWwgZnVuY3Rpb25zLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCmluZGV4IGM0MTUwYmQuLmY3N2Y4NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAogc3RhdGljIGludCBwdXRfdjRsMl93aW5kb3czMihzdHJ1Y3QgdjRsMl93aW5kb3cgKmtwLCBzdHJ1Y3QgdjRsMl93aW5kb3czMiBfX3VzZXIgKnVwKQogewotCWlmIChjb3B5X3RvX3VzZXIoJnVwLT53LCAma3AtPncsIHNpemVvZih1cC0+dykpIHx8CisJaWYgKGNvcHlfdG9fdXNlcigmdXAtPncsICZrcC0+dywgc2l6ZW9mKGtwLT53KSkgfHwKIAkJcHV0X3VzZXIoa3AtPmZpZWxkLCAmdXAtPmZpZWxkKSB8fAogCQlwdXRfdXNlcihrcC0+Y2hyb21ha2V5LCAmdXAtPmNocm9tYWtleSkgfHwKIAkJcHV0X3VzZXIoa3AtPmNsaXBjb3VudCwgJnVwLT5jbGlwY291bnQpKQpAQCAtNDc1LDYgKzQ3NSw5IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAlzd2l0Y2ggKGtwLT5tZW1vcnkpIHsKIAljYXNlIFY0TDJfTUVNT1JZX01NQVA6CisJCWlmIChnZXRfdXNlcihrcC0+bGVuZ3RoLCAmdXAtPmxlbmd0aCkgfHwKKwkJCWdldF91c2VyKGtwLT5tLm9mZnNldCwgJnVwLT5tLm9mZnNldCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgogCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYwppbmRleCBmYTc4NTU1Li5mY2QwNDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKQEAgLTQxOCw2ICs0MTgsOCBAQAogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOwogCiAJdmIgPSBremFsbG9jKHNpemUrc2l6ZW9mKCptZW0pLEdGUF9LRVJORUwpOworCWlmICghdmIpCisJCXJldHVybiB2YjsKIAogCW1lbSA9IHZiLT5wcml2ID0gKChjaGFyICopdmIpK3NpemU7CiAJbWVtLT5tYWdpYz1NQUdJQ19TR19NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCmluZGV4IGQ2ZTZhMjguLjEzNmUwOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCkBAIC0xMzgsNiArMTM4LDggQEAKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKIAogCXZiID0ga3phbGxvYyhzaXplK3NpemVvZigqbWVtKSxHRlBfS0VSTkVMKTsKKwlpZiAoIXZiKQorCQlyZXR1cm4gdmI7CiAKIAltZW0gPSB2Yi0+cHJpdiA9ICgoY2hhciAqKXZiKStzaXplOwogCW1lbS0+bWFnaWM9TUFHSUNfVk1BTF9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCmluZGV4IDM3NjMyYTAuLmNkYmU3MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCkBAIC0xMzcxLDcgKzEzNzEsNyBAQAogCS8qIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgaXMgZmluZSwgbGV0J3MgYWRkIGl0IHRvIGRldmljZSBsaXN0ICovCiAJbGlzdF9hZGRfdGFpbCgmZGV2LT52aXZpX2Rldmxpc3QsICZ2aXZpX2Rldmxpc3QpOwogCi0JaWYgKHZpZGVvX25yID49IDApCisJaWYgKHZpZGVvX25yICE9IC0xKQogCQl2aWRlb19ucisrOwogCiAJZGV2LT52ZmQgPSB2ZmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvS2NvbmZpZwppbmRleCBlZGIwMDI5Li5hN2U2MTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcKQEAgLTEsNyArMSwxMSBAQAogY29uZmlnIFVTQl9aQzAzMDEKLQl0cmlzdGF0ZSAiVVNCIFpDMDMwMVtQXSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcCBzdXBwb3J0IgorCXRyaXN0YXRlICJVU0IgWkMwMzAxW1BdIHdlYmNhbSBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIHpjM3h4IG1vZHVsZQorCSAgaW5zdGVhZC4KKwogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBaQzAzMDEgb3IKIAkgIFpDMDMwMVAgSW1hZ2UgUHJvY2Vzc29ycyBhbmQgQ29udHJvbCBDaGlwcy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKaW5kZXggZjZjMmZiNC4uZTZhZDRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCkBAIC0xMTk2LDcgKzExOTYsOCBAQAogc3RhdGljIHZvaWQgem9yYW5fcmVzdGFydChzdHJ1Y3Qgem9yYW4gKnpyKQogewogCS8qIE5vdyB0aGUgc3RhdF9jb21tIGJ1ZmZlciBpcyByZWFkeSBmb3IgcmVzdGFydCAqLwotCWludCBzdGF0dXMgPSAwLCBtb2RlOworCXVuc2lnbmVkIGludCBzdGF0dXMgPSAwOworCWludCBtb2RlOwogCiAJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgewogCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgJnN0YXR1cyk7CkBAIC0xMjI4LDcgKzEyMjksNyBAQAogCSAgICAgICB1MzIgICAgICAgICAgIGFzdGF0LAogCSAgICAgICB1MzIgICAgICAgICAgIHN0YXQpCiB7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKIAkvKiBUaGlzIGlzIEpQRUcgZXJyb3IgaGFuZGxpbmcgcGFydCAqLwogCWlmICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MgJiYKQEAgLTEyNzksNiArMTI4MCw3IEBACiAJLyogUmVwb3J0IGVycm9yICovCiAJaWYgKHpyMzYwNjdfZGVidWcgPiAxICYmIHpyLT5udW1fZXJyb3JzIDw9IDgpIHsKIAkJbG9uZyBmcmFtZTsKKwkJaW50IGo7CiAKIAkJZnJhbWUgPSB6ci0+anBnX3BlbmRbenItPmpwZ19kbWFfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKIAkJcHJpbnRrKEtFUk5fRVJSCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwppbmRleCAyZGRmZmVkLi5lYzQxMzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCQkvKiBBbGxvY2F0ZSBmcmFnbWVudCB0YWJsZSBmb3IgdGhpcyBidWZmZXIgKi8KIAogCQltZW0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKG1lbSA9PSAwKSB7CisJCWlmICghbWVtKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKIAkJCQkiJXM6ICVzIC0gZ2V0X3plcm9lZF9wYWdlIChmcmFnX3RhYikgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCkBAIC0xNDQ0LDcgKzE0NDQsNyBAQAogCX0KIAogCWlmIChub3JtID09IFY0TDJfU1REX0FMTCkgewotCQlpbnQgc3RhdHVzID0gMDsKKwkJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CiAJCXY0bDJfc3RkX2lkIHN0ZCA9IDA7CiAKIAkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgcXVlcnlzdGQsICZzdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwppbmRleCBmMGVhZTgzLi4zZDRiYWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwpAQCAtNzgsNiArNzgsNyBAQAogI2RlZmluZSBNRVRIT0QwIDAKICNkZWZpbmUgTUVUSE9EMSAxCiAjZGVmaW5lIE1FVEhPRDIgMgorI2RlZmluZSBNRVRIT0QzIDMKIAogCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwpAQCAtMTE0LDcgKzExNSw3IEBACiAJe1VTQl9ERVZJQ0UoMHgwNmQ2LCAweDAwM2IpLCAuZHJpdmVyX2luZm8gPSBNRVRIT0QwIH0sCiAJe1VTQl9ERVZJQ0UoMHgwYTE3LCAweDAwNGUpLCAuZHJpdmVyX2luZm8gPSBNRVRIT0QyIH0sCiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNWQpLCAuZHJpdmVyX2luZm8gPSBNRVRIT0QyIH0sCi0Je1VTQl9ERVZJQ0UoMHgwOGNhLCAweDIxMDIpLCAuZHJpdmVyX2luZm8gPSBNRVRIT0QyIH0sCisJe1VTQl9ERVZJQ0UoMHgwOGNhLCAweDIxMDIpLCAuZHJpdmVyX2luZm8gPSBNRVRIT0QzIH0sCiAJe1VTQl9ERVZJQ0UoMHgwNmQ2LCAweDAwM2QpLCAuZHJpdmVyX2luZm8gPSBNRVRIT0QwIH0sCiAJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTMwMiw3ICszMDMsNyBAQAogfTsKIAogLyogaW5pdCB0YWJsZSAqLwotc3RhdGljIG1lc3NhZ2UgKmluaXRbM10gPSB7IG0wLCBtMSwgbTIgfTsKK3N0YXRpYyBtZXNzYWdlICppbml0WzRdID0geyBtMCwgbTEsIG0yLCBtMiB9OwogCiAKIC8qIEpQRUcgc3RhdGljIGRhdGEgaW4gaGVhZGVyIChIdWZmbWFuIHRhYmxlLCBldGMpICovCkBAIC05NjcsNiArOTY4LDIyIEBACiAJbTBkMVswXSA9IG1vZGU7CiAJbTFbMl0udmFsdWUgPSAweGYwMDAgKyBtb2RlOwogCW0yWzFdLnZhbHVlID0gMHhmMDAwICsgbW9kZTsKKworCS8qIHNwZWNpYWwgY2FzZSBmb3IgTUVUSE9EMywgdGhlIG1vZGVzIGFyZSBkaWZmZXJlbnQgKi8KKwlpZiAoY2FtLT5tZXRob2QgPT0gTUVUSE9EMykgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSAxOgorCQkJbTJbMV0udmFsdWUgPSAweGYwMDAgKyA0OworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCW0yWzFdLnZhbHVlID0gMHhmMDAwICsgMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbTJbMV0udmFsdWUgPSAweGYwMDAgKyAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKIAloZWFkZXIyWzQzN10gPSBjYW0tPmhlaWdodCAvIDI1NjsKIAloZWFkZXIyWzQzOF0gPSBjYW0tPmhlaWdodCAlIDI1NjsKIAloZWFkZXIyWzQzOV0gPSBjYW0tPndpZHRoIC8gMjU2OwpAQCAtMTU4Miw2ICsxNTk5LDIyIEBACiAJbTBkMVswXSA9IG1vZGU7CiAJbTFbMl0udmFsdWUgPSAweGYwMDAgKyBtb2RlOwogCW0yWzFdLnZhbHVlID0gMHhmMDAwICsgbW9kZTsKKworCS8qIHNwZWNpYWwgY2FzZSBmb3IgTUVUSE9EMywgdGhlIG1vZGVzIGFyZSBkaWZmZXJlbnQgKi8KKwlpZiAoY2FtLT5tZXRob2QgPT0gTUVUSE9EMykgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSAxOgorCQkJbTJbMV0udmFsdWUgPSAweGYwMDAgKyA0OworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCW0yWzFdLnZhbHVlID0gMHhmMDAwICsgMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbTJbMV0udmFsdWUgPSAweGYwMDAgKyAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKIAloZWFkZXIyWzQzN10gPSBjYW0tPmhlaWdodCAvIDI1NjsKIAloZWFkZXIyWzQzOF0gPSBjYW0tPmhlaWdodCAlIDI1NjsKIAloZWFkZXIyWzQzOV0gPSBjYW0tPndpZHRoIC8gMjU2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCA0NGQyMDM3Li41MzgyYjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtMTI2LDggKzEyNiw2IEBACiAgKiAgUHVibGljIGRhdGEuLi4KICAqLwogCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICptcHRfcHJvY19yb290X2RpcjsKLQogI2RlZmluZSBXSE9JTklUX1VOS05PV04JCTB4QUEKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtMTQ2LDYgKzE0NCw5IEBACiBzdGF0aWMgTVBUX1JFU0VUSEFORExFUgkJIE1wdFJlc2V0SGFuZGxlcnNbTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTXTsKIHN0YXRpYyBzdHJ1Y3QgbXB0X3BjaV9kcml2ZXIgCSpNcHREZXZpY2VEcml2ZXJIYW5kbGVyc1tNUFRfTUFYX1BST1RPQ09MX0RSSVZFUlNdOwogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgCSptcHRfcHJvY19yb290X2RpcjsKKyNlbmRpZgogCiAvKgogICogIERyaXZlciBDYWxsYmFjayBJbmRleCdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCmluZGV4IGI0OTQ4NjcuLjk3MThjOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCkBAIC03Niw4ICs3Niw4IEBACiAjZGVmaW5lIENPUFlSSUdIVAkiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggIiBNT0RVTEVBVVRIT1IKICNlbmRpZgogCi0jZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wNC4xMyIKLSNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjA0LjEzIgorI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTQiCisjZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4xNCIKICNkZWZpbmUgV0hBVF9NQUdJQ19TVFJJTkcJCSJAIiAiKCIgIiMiICIpIgogCiAjZGVmaW5lIHNob3dfbXB0bW9kX3ZlcihzLHZlcikgIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCmluZGV4IDM1MmFjZDAuLmNhYThmNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwpAQCAtMzYwLDggKzM2MCw4IEBACiAJdTE2CQkgaW9jc3RhdHVzOwogCiAJLyogYnVzIHJlc2V0IGlzIG9ubHkgZ29vZCBmb3IgU0NTSSBJTywgUkFJRCBQQVNTVEhSVSAqLwotCWlmICghKGZ1bmN0aW9uID09IE1QSV9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpIHx8Ci0JICAgIChmdW5jdGlvbiA9PSBNUElfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUKSkgeworCWlmICghKGZ1bmN0aW9uID09IE1QSV9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0ggfHwKKwkJZnVuY3Rpb24gPT0gTVBJX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCkpIHsKIAkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKIAkJCSJUYXNrTWdtdCwgbm90IFNDU0lfSU8hIVxuIiwgaW9jLT5uYW1lKSk7CiAJCXJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKaW5kZXggZWJmNmFlMC4uNjEyYWIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwpAQCAtMTk1LDI5ICsxOTUsMzQgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlpbnQJCQlyZWFkeTsKIAlNUFRfQURBUFRFUiAJCSppb2M7CisJaW50CQkJbG9vcHMgPSA0MDsJLyogc2Vjb25kcyAqLwogCiAJaGQgPSBzaG9zdF9wcml2KFNDcG50LT5kZXZpY2UtPmhvc3QpOwogCWlvYyA9IGhkLT5pb2M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXdoaWxlICgocmVhZHkgPSBmY19yZW1vdGVfcG9ydF9jaGtyZWFkeShycG9ydCkgPj4gMTYpID09IERJRF9JTU1fUkVUUlkpIHsKKwl3aGlsZSAoKHJlYWR5ID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpID4+IDE2KSA9PSBESURfSU1NX1JFVFJZCisJIHx8IChsb29wcyA+IDAgJiYgaW9jLT5hY3RpdmUgPT0gMCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCWRmY3ByaW50ayAoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKIAkJCSJtcHRmY19ibG9ja19lcnJvcl9oYW5kbGVyLiVkOiAlZDolZCwgcG9ydCBzdGF0dXMgaXMgIgotCQkJIkRJRF9JTU1fUkVUUlksIGRlZmVycmluZyAlcyByZWNvdmVyeS5cbiIsCisJCQkiJXgsIGFjdGl2ZSBmbGFnICVkLCBkZWZlcnJpbmcgJXMgcmVjb3ZlcnkuXG4iLAogCQkJaW9jLT5uYW1lLCBpb2MtPnNoLT5ob3N0X25vLAotCQkJU0NwbnQtPmRldmljZS0+aWQsIFNDcG50LT5kZXZpY2UtPmx1biwgY2FsbGVyKSk7CisJCQlTQ3BudC0+ZGV2aWNlLT5pZCwgU0NwbnQtPmRldmljZS0+bHVuLAorCQkJcmVhZHksIGlvYy0+YWN0aXZlLCBjYWxsZXIpKTsKIAkJbXNsZWVwKDEwMDApOwogCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWxvb3BzIC0tOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAotCWlmIChyZWFkeSA9PSBESURfTk9fQ09OTkVDVCB8fCAhU0NwbnQtPmRldmljZS0+aG9zdGRhdGEpIHsKKwlpZiAocmVhZHkgPT0gRElEX05PX0NPTk5FQ1QgfHwgIVNDcG50LT5kZXZpY2UtPmhvc3RkYXRhCisJIHx8IGlvYy0+YWN0aXZlID09IDApIHsKIAkJZGZjcHJpbnRrIChpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVAogCQkJIiVzLiVkOiAlZDolZCwgZmFpbGluZyByZWNvdmVyeSwgIgotCQkJInBvcnQgc3RhdGUgJWQsIHZkZXZpY2UgJXAuXG4iLCBjYWxsZXIsCisJCQkicG9ydCBzdGF0ZSAleCwgYWN0aXZlICVkLCB2ZGV2aWNlICVwLlxuIiwgY2FsbGVyLAogCQkJaW9jLT5uYW1lLCBpb2MtPnNoLT5ob3N0X25vLAogCQkJU0NwbnQtPmRldmljZS0+aWQsIFNDcG50LT5kZXZpY2UtPmx1biwgcmVhZHksCi0JCQlTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YSkpOworCQkJaW9jLT5hY3RpdmUsIFNDcG50LT5kZXZpY2UtPmhvc3RkYXRhKSk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCWRmY3ByaW50ayAoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCmluZGV4IDgzODczZTMuLmMyMGJiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwpAQCAtMTA3NSw2ICsxMDc1LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCittcHRzYXNfYmxvY2tfaW9fc2RldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHZvaWQgKmRhdGEpCit7CisJc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfQkxPQ0spOworfQorCitzdGF0aWMgdm9pZAorbXB0c2FzX2Jsb2NrX2lvX3N0YXJnZXQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCWlmIChzdGFyZ2V0KQorCQlzdGFyZ2V0X2Zvcl9lYWNoX2RldmljZShzdGFyZ2V0LCBOVUxMLCBtcHRzYXNfYmxvY2tfaW9fc2Rldik7Cit9CisKIC8qKgogICogbXB0c2FzX3RhcmdldF9yZXNldF9xdWV1ZQogICoKQEAgLTEwOTgsMTAgKzExMTEsMTEgQEAKIAlpZCA9IHNhc19ldmVudF9kYXRhLT5UYXJnZXRJRDsKIAljaGFubmVsID0gc2FzX2V2ZW50X2RhdGEtPkJ1czsKIAotCWlmICghKHZ0YXJnZXQgPSBtcHRzYXNfZmluZF92dGFyZ2V0KGlvYywgY2hhbm5lbCwgaWQpKSkKLQkJcmV0dXJuOwotCi0JdnRhcmdldC0+ZGVsZXRlZCA9IDE7IC8qIGJsb2NrIElPICovCisJdnRhcmdldCA9IG1wdHNhc19maW5kX3Z0YXJnZXQoaW9jLCBjaGFubmVsLCBpZCk7CisJaWYgKHZ0YXJnZXQpIHsKKwkJbXB0c2FzX2Jsb2NrX2lvX3N0YXJnZXQodnRhcmdldC0+c3RhcmdldCk7CisJCXZ0YXJnZXQtPmRlbGV0ZWQgPSAxOyAvKiBibG9jayBJTyAqLworCX0KIAogCXRhcmdldF9yZXNldF9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1wdHNhc190YXJnZXRfcmVzZXRfZXZlbnQpLAogCSAgICBHRlBfQVRPTUlDKTsKQEAgLTE4NjgsNyArMTg4Miw4IEBACiAJaWYgKGlvYy0+c2FzX2Rpc2NvdmVyeV9xdWllc2NlX2lvKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAotLy8Jc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKKwlpZiAoaW9jLT5kZWJ1Z19sZXZlbCAmIE1QVF9ERUJVR19TQ1NJKQorCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOwogCiAJcmV0dXJuIG1wdHNjc2loX3FjbWQoU0NwbnQsZG9uZSk7CiB9CkBAIC0yNjg2LDYgKzI3MDEsMTg3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdHsKKwl1OCBzbXBfZnJhbWVfdHlwZTsKKwl1OCBmdW5jdGlvbjsKKwl1OCByZXNlcnZlZDsKKwl1OCByZXF1ZXN0X2xlbmd0aDsKK307CisKK3N0cnVjdCByZXBfbWFudV9yZXBseXsKKwl1OCBzbXBfZnJhbWVfdHlwZTsgLyogMHg0MSAqLworCXU4IGZ1bmN0aW9uOyAvKiAweDAxICovCisJdTggZnVuY3Rpb25fcmVzdWx0OworCXU4IHJlc3BvbnNlX2xlbmd0aDsKKwl1MTYgZXhwYW5kZXJfY2hhbmdlX2NvdW50OworCXU4IHJlc2VydmVkMFsyXTsKKwl1OCBzYXNfZm9ybWF0OjE7CisJdTggcmVzZXJ2ZWQxOjc7CisJdTggcmVzZXJ2ZWQyWzNdOworCXU4IHZlbmRvcl9pZFtTQVNfRVhQQU5ERVJfVkVORE9SX0lEX0xFTl07CisJdTggcHJvZHVjdF9pZFtTQVNfRVhQQU5ERVJfUFJPRFVDVF9JRF9MRU5dOworCXU4IHByb2R1Y3RfcmV2W1NBU19FWFBBTkRFUl9QUk9EVUNUX1JFVl9MRU5dOworCXU4IGNvbXBvbmVudF92ZW5kb3JfaWRbU0FTX0VYUEFOREVSX0NPTVBPTkVOVF9WRU5ET1JfSURfTEVOXTsKKwl1MTYgY29tcG9uZW50X2lkOworCXU4IGNvbXBvbmVudF9yZXZpc2lvbl9pZDsKKwl1OCByZXNlcnZlZDM7CisJdTggdmVuZG9yX3NwZWNpZmljWzhdOworfTsKKworLyoqCisgICogbXB0c2FzX2V4cF9yZXBtYW51ZmFjdHVyZV9pbmZvIC0KKyAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAgKiBAc2FzX2FkZHJlc3M6IGV4cGFuZGVyIHNhcyBhZGRyZXNzCisgICogQGVkZXY6IHRoZSBzYXNfZXhwYW5kZXJfZGV2aWNlIG9iamVjdAorICAqCisgICogRmlsbHMgaW4gdGhlIHNhc19leHBhbmRlcl9kZXZpY2Ugb2JqZWN0IHdoZW4gU01QIHBvcnQgaXMgY3JlYXRlZC4KKyAgKgorICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgICovCitzdGF0aWMgaW50CittcHRzYXNfZXhwX3JlcG1hbnVmYWN0dXJlX2luZm8oTVBUX0FEQVBURVIgKmlvYywKKwl1NjQgc2FzX2FkZHJlc3MsIHN0cnVjdCBzYXNfZXhwYW5kZXJfZGV2aWNlICplZGV2KQoreworCU1QVF9GUkFNRV9IRFIgKm1mOworCVNtcFBhc3N0aHJvdWdoUmVxdWVzdF90ICpzbXByZXE7CisJU21wUGFzc3Rocm91Z2hSZXBseV90ICpzbXByZXA7CisJc3RydWN0IHJlcF9tYW51X3JlcGx5ICptYW51ZmFjdHVyZV9yZXBseTsKKwlzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCAqbWFudWZhY3R1cmVfcmVxdWVzdDsKKwlpbnQgcmV0OworCWludCBmbGFnc0xlbmd0aDsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCWNoYXIgKnBzZ2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICpkYXRhX291dCA9IE5VTEw7CisJZG1hX2FkZHJfdCBkYXRhX291dF9kbWEgPSAwOworCXUzMiBzejsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnRhc2ttZ210X2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT50YXNrbWdtdF9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCisJCQlfX2Z1bmNfXywgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+dGFza21nbXRfbG9jaywgZmxhZ3MpOworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpb2MtPnNhc19tZ210Lm11dGV4KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCW1mID0gbXB0X2dldF9tc2dfZnJhbWUobXB0c2FzTWdtdEN0eCwgaW9jKTsKKwlpZiAoIW1mKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlzbXByZXEgPSAoU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QgKiltZjsKKwltZW1zZXQoc21wcmVxLCAwLCBzaXplb2YoKnNtcHJlcSkpOworCisJc3ogPSBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXBseSk7CisKKwlkYXRhX291dCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBzeiwgJmRhdGFfb3V0X2RtYSk7CisJaWYgKCFkYXRhX291dCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwdXRfbWY7CisJfQorCisJbWFudWZhY3R1cmVfcmVxdWVzdCA9IGRhdGFfb3V0OworCW1hbnVmYWN0dXJlX3JlcXVlc3QtPnNtcF9mcmFtZV90eXBlID0gMHg0MDsKKwltYW51ZmFjdHVyZV9yZXF1ZXN0LT5mdW5jdGlvbiA9IDE7CisJbWFudWZhY3R1cmVfcmVxdWVzdC0+cmVzZXJ2ZWQgPSAwOworCW1hbnVmYWN0dXJlX3JlcXVlc3QtPnJlcXVlc3RfbGVuZ3RoID0gMDsKKworCXNtcHJlcS0+RnVuY3Rpb24gPSBNUElfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOworCXNtcHJlcS0+UGh5c2ljYWxQb3J0ID0gMHhGRjsKKwkqKCh1NjQgKikmc21wcmVxLT5TQVNBZGRyZXNzKSA9IGNwdV90b19sZTY0KHNhc19hZGRyZXNzKTsKKwlzbXByZXEtPlJlcXVlc3REYXRhTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KTsKKworCXBzZ2UgPSAoY2hhciAqKQorCQkoKChpbnQgKikgbWYpICsgKG9mZnNldG9mKFNtcFBhc3N0aHJvdWdoUmVxdWVzdF90LCBTR0wpIC8gNCkpOworCisJZmxhZ3NMZW5ndGggPSBNUElfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkJTVBJX1NHRV9GTEFHU19TWVNURU1fQUREUkVTUyB8CisJCU1QSV9TR0VfRkxBR1NfSE9TVF9UT19JT0MgfAorCQlNUElfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVI7CisJZmxhZ3NMZW5ndGggPSBmbGFnc0xlbmd0aCA8PCBNUElfU0dFX0ZMQUdTX1NISUZUOworCWZsYWdzTGVuZ3RoIHw9IHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCk7CisKKwlpb2MtPmFkZF9zZ2UocHNnZSwgZmxhZ3NMZW5ndGgsIGRhdGFfb3V0X2RtYSk7CisJcHNnZSArPSBpb2MtPlNHRV9zaXplOworCisJZmxhZ3NMZW5ndGggPSBNUElfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkJTVBJX1NHRV9GTEFHU19TWVNURU1fQUREUkVTUyB8CisJCU1QSV9TR0VfRkxBR1NfSU9DX1RPX0hPU1QgfAorCQlNUElfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVI7CisJZmxhZ3NMZW5ndGggPSBmbGFnc0xlbmd0aCA8PCBNUElfU0dFX0ZMQUdTX1NISUZUOworCWZsYWdzTGVuZ3RoIHw9IHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVwbHkpOworCWlvYy0+YWRkX3NnZShwc2dlLCBmbGFnc0xlbmd0aCwgZGF0YV9vdXRfZG1hICsKKwlzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpKTsKKworCUlOSVRJQUxJWkVfTUdNVF9TVEFUVVMoaW9jLT5zYXNfbWdtdC5zdGF0dXMpCisJbXB0X3B1dF9tc2dfZnJhbWUobXB0c2FzTWdtdEN0eCwgaW9jLCBtZik7CisKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5zYXNfbWdtdC5kb25lLCAxMCAqIEhaKTsKKwlpZiAoIShpb2MtPnNhc19tZ210LnN0YXR1cyAmIE1QVF9NR01UX1NUQVRVU19DT01NQU5EX0dPT0QpKSB7CisJCXJldCA9IC1FVElNRTsKKwkJbXB0X2ZyZWVfbXNnX2ZyYW1lKGlvYywgbWYpOworCQltZiA9IE5VTEw7CisJCWlmIChpb2MtPnNhc19tZ210LnN0YXR1cyAmIE1QVF9NR01UX1NUQVRVU19ESURfSU9DUkVTRVQpCisJCQlnb3RvIG91dF9mcmVlOworCQlpZiAoIXRpbWVsZWZ0KQorCQkJbXB0X0hhcmRSZXNldEhhbmRsZXIoaW9jLCBDQU5fU0xFRVApOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCW1mID0gTlVMTDsKKworCWlmIChpb2MtPnNhc19tZ210LnN0YXR1cyAmIE1QVF9NR01UX1NUQVRVU19SRl9WQUxJRCkgeworCQl1OCAqdG1wOworCisJc21wcmVwID0gKFNtcFBhc3N0aHJvdWdoUmVwbHlfdCAqKWlvYy0+c2FzX21nbXQucmVwbHk7CisJaWYgKGxlMTZfdG9fY3B1KHNtcHJlcC0+UmVzcG9uc2VEYXRhTGVuZ3RoKSAhPQorCQlzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcGx5KSkKKwkJCWdvdG8gb3V0X2ZyZWU7CisKKwltYW51ZmFjdHVyZV9yZXBseSA9IGRhdGFfb3V0ICsgc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KTsKKwlzdHJuY3B5KGVkZXYtPnZlbmRvcl9pZCwgbWFudWZhY3R1cmVfcmVwbHktPnZlbmRvcl9pZCwKKwkJU0FTX0VYUEFOREVSX1ZFTkRPUl9JRF9MRU4pOworCXN0cm5jcHkoZWRldi0+cHJvZHVjdF9pZCwgbWFudWZhY3R1cmVfcmVwbHktPnByb2R1Y3RfaWQsCisJCVNBU19FWFBBTkRFUl9QUk9EVUNUX0lEX0xFTik7CisJc3RybmNweShlZGV2LT5wcm9kdWN0X3JldiwgbWFudWZhY3R1cmVfcmVwbHktPnByb2R1Y3RfcmV2LAorCQlTQVNfRVhQQU5ERVJfUFJPRFVDVF9SRVZfTEVOKTsKKwllZGV2LT5sZXZlbCA9IG1hbnVmYWN0dXJlX3JlcGx5LT5zYXNfZm9ybWF0OworCWlmIChtYW51ZmFjdHVyZV9yZXBseS0+c2FzX2Zvcm1hdCkgeworCQlzdHJuY3B5KGVkZXYtPmNvbXBvbmVudF92ZW5kb3JfaWQsCisJCQltYW51ZmFjdHVyZV9yZXBseS0+Y29tcG9uZW50X3ZlbmRvcl9pZCwKKwkJCQlTQVNfRVhQQU5ERVJfQ09NUE9ORU5UX1ZFTkRPUl9JRF9MRU4pOworCQl0bXAgPSAodTggKikmbWFudWZhY3R1cmVfcmVwbHktPmNvbXBvbmVudF9pZDsKKwkJZWRldi0+Y29tcG9uZW50X2lkID0gdG1wWzBdIDw8IDggfCB0bXBbMV07CisJCWVkZXYtPmNvbXBvbmVudF9yZXZpc2lvbl9pZCA9CisJCQltYW51ZmFjdHVyZV9yZXBseS0+Y29tcG9uZW50X3JldmlzaW9uX2lkOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKE1ZSU9DX3NfRVJSX0ZNVAorCQkJIiVzOiBzbXAgcGFzc3RocnUgcmVwbHkgZmFpbGVkIHRvIGJlIHJldHVybmVkXG4iLAorCQkJaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTlhJTzsKKwl9CitvdXRfZnJlZToKKwlpZiAoZGF0YV9vdXRfZG1hKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBzeiwgZGF0YV9vdXQsIGRhdGFfb3V0X2RtYSk7CitwdXRfbWY6CisJaWYgKG1mKQorCQltcHRfZnJlZV9tc2dfZnJhbWUoaW9jLCBtZik7CitvdXRfdW5sb2NrOgorCUNMRUFSX01HTVRfU1RBVFVTKGlvYy0+c2FzX21nbXQuc3RhdHVzKQorCW11dGV4X3VubG9jaygmaW9jLT5zYXNfbWdtdC5tdXRleCk7CitvdXQ6CisJcmV0dXJuIHJldDsKKyB9CisKIHN0YXRpYyB2b2lkCiBtcHRzYXNfcGFyc2VfZGV2aWNlX2luZm8oc3RydWN0IHNhc19pZGVudGlmeSAqaWRlbnRpZnksCiAJCXN0cnVjdCBtcHRzYXNfZGV2aW5mbyAqZGV2aWNlX2luZm8pCkBAIC0yOTY3LDYgKzMxNjMsMTEgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCW1wdHNhc19zZXRfcnBoeShpb2MsIHBoeV9pbmZvLCBycGh5KTsKKwkJaWYgKGlkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19FREdFX0VYUEFOREVSX0RFVklDRSB8fAorCQkJaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0gU0FTX0ZBTk9VVF9FWFBBTkRFUl9ERVZJQ0UpCisJCQkJbXB0c2FzX2V4cF9yZXBtYW51ZmFjdHVyZV9pbmZvKGlvYywKKwkJCQkJaWRlbnRpZnkuc2FzX2FkZHJlc3MsCisJCQkJCXJwaHlfdG9fZXhwYW5kZXJfZGV2aWNlKHJwaHkpKTsKIAl9CiAKICBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKaW5kZXggODEyNzliMy4uNGE3ZDFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtMTQzOCw5ICsxNDM4LDE0IEBACiAJICAgICYmICh2ZGV2aWNlLT52dGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTKQogCSAgICAmJiAoU0NwbnQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkpIHsKIAkJc2NzaWN0bCA9IHNjc2lkaXIgfCBNUElfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQl9IGVsc2UgeworCQlpZiAoU0NwbnQtPnJlcXVlc3QgJiYgU0NwbnQtPnJlcXVlc3QtPmlvcHJpbykgeworCQkJaWYgKCgoU0NwbnQtPnJlcXVlc3QtPmlvcHJpbyAmIDB4NykgPT0gMSkgfHwKKwkJCQkhKFNDcG50LT5yZXF1ZXN0LT5pb3ByaW8gJiAweDcpKQorCQkJCXNjc2ljdGwgfD0gTVBJX1NDU0lJT19DT05UUk9MX0hFQURPRlE7CisJCX0KKwl9IGVsc2UKIAkJc2NzaWN0bCA9IHNjc2lkaXIgfCBNUElfU0NTSUlPX0NPTlRST0xfVU5UQUdHRUQ7Ci0JfQorCiAKIAkvKiBVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIHRvIHNldCB1cCB0aGUgbWVzc2FnZSBmcmFtZQogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKaW5kZXggODc4Mjk3OC4uNDEzNTc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCkBAIC0zNDgsNiArMzQ4LDE2IEBACiAJICByZWFkL3dyaXRlIGZ1bmN0aW9ucyBmb3IgdGhlIGRldmljZXMgdG8gZ2V0IGFjY2VzcyB0byB0aGlzIGNoaXAuCiAJICBUaGlzIGNoaXAgZW1iZWRzIHZhcmlvdXMgb3RoZXIgbXVsdGltZWRpYSBmdW50aW9uYWxpdGllcyBhcyB3ZWxsLgogCitjb25maWcgTUZEX1RJTUJFUkRBTEUKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgdGhlIFRpbWJlcmRhbGUgRlBHQSIKKwlzZWxlY3QgTUZEX0NPUkUKKwlkZXBlbmRzIG9uIFBDSSAmJiBHUElPTElCCisJLS0taGVscC0tLQorCVRoaXMgaXMgdGhlIGNvcmUgZHJpdmVyIGZvciB0aGUgdGltYmVyZGFsZSBGUEdBLiBUaGlzIGRldmljZSBpcyBhCisJbXVsdGlmdW5jdGlvbiBkZXZpY2Ugd2hpY2ggZXhwb3NlcyBudW1lcm91cyBwbGF0Zm9ybSBkZXZpY2VzLgorCisJVGhlIHRpbWJlcmRhbGUgRlBHQSBjYW4gYmUgZm91bmQgb24gdGhlIEludGVsIEF0b20gZGV2ZWxvcG1lbnQgYm9hcmQKKwlmb3IgaW4tdmVoaWNsZSBpbmZvbnRhaW5tZW50LCBjYWxsZWQgUnVzc2VsbHZpbGxlLgogZW5kbWVudQogCiBtZW51ICJNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IGUwOWViNDguLjc4Mjk1ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC01NCw1ICs1NCw2IEBACiBvYmotJChDT05GSUdfQUIzMTAwX0NPUkUpCSs9IGFiMzEwMC1jb3JlLm8KIG9iai0kKENPTkZJR19BQjMxMDBfT1RQKQkrPSBhYjMxMDAtb3RwLm8KIG9iai0kKENPTkZJR19BQjQ1MDBfQ09SRSkJKz0gYWI0NTAwLWNvcmUubworb2JqLSQoQ09ORklHX01GRF9USU1CRVJEQUxFKSAgICArPSB0aW1iZXJkYWxlLm8KIG9iai0kKENPTkZJR19NRkRfODhQTTg2MDcpCSs9IDg4cG04NjA3Lm8KLW9iai0kKENPTkZJR19QTUlDX0FEUDU1MjApCSs9IGFkcDU1MjAubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19QTUlDX0FEUDU1MjApCSs9IGFkcDU1MjAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5jIGIvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZDQ0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmMKQEAgLTAsMCArMSw3MjcgQEAKKy8qCisgKiB0aW1iZXJkYWxlLmMgdGltYmVyZGFsZSBGUEdBIE1GRCBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN1cHBvcnRzOgorICogVGltYmVyZGFsZSBGUEdBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisKKyNpbmNsdWRlIDxsaW51eC90aW1iX2dwaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1vY29yZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHNjMjAwNy5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS94aWxpbnhfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL21heDczMDEuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbWMzMzg4MC5oPgorCisjaW5jbHVkZSA8bWVkaWEvdGltYl9yYWRpby5oPgorCisjaW5jbHVkZSAidGltYmVyZGFsZS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ0aW1iZXJkYWxlIgorCitzdHJ1Y3QgdGltYmVyZGFsZV9kZXZpY2UgeworCXJlc291cmNlX3NpemVfdAkJY3RsX21hcGJhc2U7CisJdW5zaWduZWQgY2hhciBfX2lvbWVtICAgKmN0bF9tZW1iYXNlOworCXN0cnVjdCB7CisJCXUzMiBtYWpvcjsKKwkJdTMyIG1pbm9yOworCQl1MzIgY29uZmlnOworCX0gZnc7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB0c2MyMDA3X3BsYXRmb3JtX2RhdGEgdGltYmVyZGFsZV90c2MyMDA3X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1vZGVsID0gMjAwMywKKwkueF9wbGF0ZV9vaG1zID0gMTAwCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHRpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0c2MyMDA3IiwgMHg0OCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfdHNjMjAwN19wbGF0Zm9ybV9kYXRhLAorCQkuaXJxID0gSVJRX1RJTUJFUkRBTEVfVFNDX0lOVAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3Qgb2NvcmVzX2kyY19wbGF0Zm9ybV9kYXRhCit0aW1iZXJkYWxlX29jb3Jlc19wbGF0Zm9ybV9kYXRhID0geworCS5yZWdzdGVwID0gNCwKKwkuY2xvY2tfa2h6ID0gNjI1MDAsCisJLmRldmljZXMgPSB0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvLAorCS5udW1fZGV2aWNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9pMmNfYm9hcmRfaW5mbykKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9vY29yZXNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPQ09SRVNPRkZTRVQsCisJCS5lbmQJPSBPQ09SRVNFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgCT0gSVJRX1RJTUJFUkRBTEVfSTJDLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfSTJDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworY29uc3Qgc3RydWN0IG1heDczMDFfcGxhdGZvcm1fZGF0YSB0aW1iZXJkYWxlX21heDczMDFfcGxhdGZvcm1fZGF0YSA9IHsKKwkuYmFzZSA9IDIwMAorfTsKKworY29uc3Qgc3RydWN0IG1jMzM4ODBfcGxhdGZvcm1fZGF0YSB0aW1iZXJkYWxlX21jMzM4ODBfcGxhdGZvcm1fZGF0YSA9IHsKKwkuYmFzZSA9IDEwMAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyB0aW1iZXJkYWxlX3NwaV8xNmJpdF9ib2FyZF9pbmZvW10gPSB7CisJeworCQkubW9kYWxpYXMgPSAibWF4NzMwMSIsCisJCS5tYXhfc3BlZWRfaHogPSAyNjAwMCwKKwkJLmNoaXBfc2VsZWN0ID0gMiwKKwkJLm1vZGUgPSBTUElfTU9ERV8wLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX21heDczMDFfcGxhdGZvcm1fZGF0YQorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHRpbWJlcmRhbGVfc3BpXzhiaXRfYm9hcmRfaW5mb1tdID0geworCXsKKwkJLm1vZGFsaWFzID0gIm1jMzM4ODAiLAorCQkubWF4X3NwZWVkX2h6ID0gNDAwMCwKKwkJLmNoaXBfc2VsZWN0ID0gMSwKKwkJLm1vZGUgPSBTUElfTU9ERV8xLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX21jMzM4ODBfcGxhdGZvcm1fZGF0YQorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgeHNwaV9wbGF0Zm9ybV9kYXRhIHRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhID0geworCS5udW1fY2hpcHNlbGVjdCA9IDMsCisJLmxpdHRsZV9lbmRpYW4gPSB0cnVlLAorCS8qIGJpdHMgcGVyIHdvcmQgYW5kIGRldmljZXMgd2lsbCBiZSBmaWxsZWQgaW4gcnVudGltZSBkZXBlbmRpbmcKKwkgKiBvbiB0aGUgSFcgY29uZmlnCisJICovCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0IAk9IFNQSU9GRlNFVCwKKwkJLmVuZAk9IFNQSUVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX1NQSSwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1NQSSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBFVEhPRkZTRVQsCisJCS5lbmQJPSBFVEhFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9FVEhTV19JRiwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX0VUSFNXX0lGLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHRpbWJncGlvX3BsYXRmb3JtX2RhdGEKKwl0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlID0gMCwKKwkubnJfcGlucyA9IEdQSU9fTlJfUElOUywKKwkuaXJxX2Jhc2UgPSAyMDAsCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEdQSU9PRkZTRVQsCisJCS5lbmQJPSBHUElPRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfR1BJTywKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX0dQSU8sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfbWxvZ2ljb3JlX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTUxDT1JFT0ZGU0VULAorCQkuZW5kCT0gTUxDT1JFRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfTUxDT1JFLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfTUxDT1JFLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfTUxDT1JFX0JVRiwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX01MQ09SRV9CVUYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFVBUlRPRkZTRVQsCisJCS5lbmQJPSBVQVJURU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfVUFSVCwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1VBUlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdGF0aWMgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfdWFydGxpdGVfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBVQVJUTElURU9GRlNFVCwKKwkJLmVuZAk9IFVBUlRMSVRFRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfVUFSVExJVEUsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9VQVJUTElURSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFJEU09GRlNFVCwKKwkJLmVuZAk9IFJEU0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX1JEUywKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1JEUywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB0aW1iZXJkYWxlX3RlZjY4NjhfaTJjX2JvYXJkX2luZm8gPSB7CisJSTJDX0JPQVJEX0lORk8oInRlZjY4NjIiLCAweDYwKQorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IGkyY19ib2FyZF9pbmZvIHRpbWJlcmRhbGVfc2FhNzcwNl9pMmNfYm9hcmRfaW5mbyA9IHsKKwlJMkNfQk9BUkRfSU5GTygic2FhNzcwNmgiLCAweDFDKQorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHRpbWJfcmFkaW9fcGxhdGZvcm1fZGF0YQorCXRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSA9IHsKKwkuaTJjX2FkYXB0ZXIgPSAwLAorCS50dW5lciA9IHsKKwkJLm1vZHVsZV9uYW1lID0gInRlZjY4NjIiLAorCQkuaW5mbyA9ICZ0aW1iZXJkYWxlX3RlZjY4NjhfaTJjX2JvYXJkX2luZm8KKwl9LAorCS5kc3AgPSB7CisJCS5tb2R1bGVfbmFtZSA9ICJzYWE3NzA2aCIsCisJCS5pbmZvID0gJnRpbWJlcmRhbGVfc2FhNzcwNl9pMmNfYm9hcmRfaW5mbworCX0KK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBETUFPRkZTRVQsCisJCS5lbmQJPSBETUFFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9ETUEsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzBbXSA9IHsKKwl7CisJCS5uYW1lID0gInRpbWItdWFydCIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZ3BpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1yYWRpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInhpbGlueF9zcGkiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJrczg4NDIiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1kbWEiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcywKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IG1mZF9jZWxsIHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcxW10gPSB7CisJeworCQkubmFtZSA9ICJ0aW1iLXVhcnQiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ1YXJ0bGl0ZSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRsaXRlX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3VhcnRsaXRlX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1ncGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLW1sb2dpY29yZSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX21sb2dpY29yZV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9tbG9naWNvcmVfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLXJhZGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAieGlsaW54X3NwaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gImtzODg0MiIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWRtYSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzJbXSA9IHsKKwl7CisJCS5uYW1lID0gInRpbWItdWFydCIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZ3BpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1yYWRpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInhpbGlueF9zcGkiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWRtYSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzNbXSA9IHsKKwl7CisJCS5uYW1lID0gInRpbWItdWFydCIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gIm9jb3Jlcy1pMmMiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9vY29yZXNfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfb2NvcmVzX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9vY29yZXNfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX29jb3Jlc19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1ncGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLXJhZGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAieGlsaW54X3NwaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gImtzODg0MiIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWRtYSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgY29uc3QgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfc2RoY19yZXNvdXJjZXNbXSA9IHsKKwkvKiBsb2NhdGVkIGluIGJhciAxIGFuZCBiYXIgMiAqLworCXsKKwkJLnN0YXJ0CT0gU0RIQzBPRkZTRVQsCisJCS5lbmQJPSBTREhDMEVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX1NESEMsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9TREhDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IG1mZF9jZWxsIHRpbWJlcmRhbGVfY2VsbHNfYmFyMVtdID0geworCXsKKwkJLm5hbWUgPSAic2RoY2kiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9zZGhjX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3NkaGNfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIyW10gPSB7CisJeworCQkubmFtZSA9ICJzZGhjaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NkaGNfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc2RoY19yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZndfdmVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCB0aW1iZXJkYWxlX2RldmljZSAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkLiVkXG4iLCBwcml2LT5mdy5tYWpvciwgcHJpdi0+ZncubWlub3IsCisJCXByaXYtPmZ3LmNvbmZpZyk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihmd192ZXIsIFNfSVJVR08sIHNob3dfZndfdmVyLCBOVUxMKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbWJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHRpbWJlcmRhbGVfZGV2aWNlICpwcml2OworCWludCBlcnIsIGk7CisJcmVzb3VyY2Vfc2l6ZV90IG1hcGJhc2U7CisJc3RydWN0IG1zaXhfZW50cnkgKm1zaXhfZW50cmllcyA9IE5VTEw7CisJdTggaXBfc2V0dXA7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcGNpX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2VuYWJsZTsKKworCW1hcGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlpZiAoIW1hcGJhc2UpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJObyByZXNvdXJjZVxuIik7CisJCWdvdG8gZXJyX3N0YXJ0OworCX0KKworCS8qIGNyZWF0ZSBhIHJlc291cmNlIGZvciB0aGUgUENJIG1hc3RlciByZWdpc3RlciAqLworCXByaXYtPmN0bF9tYXBiYXNlID0gbWFwYmFzZSArIENISVBDVExPRkZTRVQ7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocHJpdi0+Y3RsX21hcGJhc2UsIENISVBDVExTSVpFLCAidGltYi1jdGwiKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGN0bCBtZW1cbiIpOworCQlnb3RvIGVycl9yZXF1ZXN0OworCX0KKworCXByaXYtPmN0bF9tZW1iYXNlID0gaW9yZW1hcChwcml2LT5jdGxfbWFwYmFzZSwgQ0hJUENUTFNJWkUpOworCWlmICghcHJpdi0+Y3RsX21lbWJhc2UpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZCBmb3IgY3RsIG1lbVxuIik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJLyogcmVhZCB0aGUgSFcgY29uZmlnICovCisJcHJpdi0+ZncubWFqb3IgPSBpb3JlYWQzMihwcml2LT5jdGxfbWVtYmFzZSArIFRJTUJfUkVWX01BSk9SKTsKKwlwcml2LT5mdy5taW5vciA9IGlvcmVhZDMyKHByaXYtPmN0bF9tZW1iYXNlICsgVElNQl9SRVZfTUlOT1IpOworCXByaXYtPmZ3LmNvbmZpZyA9IGlvcmVhZDMyKHByaXYtPmN0bF9tZW1iYXNlICsgVElNQl9IV19DT05GSUcpOworCisJaWYgKHByaXYtPmZ3Lm1ham9yID4gVElNQl9TVVBQT1JURURfTUFKT1IpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJUaGUgZHJpdmVyIHN1cHBvcnRzIGFuIG9sZGVyICIKKwkJCSJ2ZXJzaW9uIG9mIHRoZSBGUEdBLCBwbGVhc2UgdXBkYXRlIHRoZSBkcml2ZXIgdG8gIgorCQkJInN1cHBvcnQgJWQuJWRcbiIsIHByaXYtPmZ3Lm1ham9yLCBwcml2LT5mdy5taW5vcik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCWlmIChwcml2LT5mdy5tYWpvciA8IFRJTUJfU1VQUE9SVEVEX01BSk9SIHx8CisJCXByaXYtPmZ3Lm1pbm9yIDwgVElNQl9SRVFVSVJFRF9NSU5PUikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIlRoZSBGUEdBIGltYWdlIGlzIHRvbyBvbGQgKCVkLiVkKSwgIgorCQkJInBsZWFzZSB1cGdyYWRlIHRoZSBGUEdBIHRvIGF0IGxlYXN0OiAlZC4lZFxuIiwKKwkJCXByaXYtPmZ3Lm1ham9yLCBwcml2LT5mdy5taW5vciwKKwkJCVRJTUJfU1VQUE9SVEVEX01BSk9SLCBUSU1CX1JFUVVJUkVEX01JTk9SKTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwltc2l4X2VudHJpZXMgPSBremFsbG9jKFRJTUJFUkRBTEVfTlJfSVJRUyAqIHNpemVvZigqbXNpeF9lbnRyaWVzKSwKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2l4X2VudHJpZXMpCisJCWdvdG8gZXJyX2lvcmVtYXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgVElNQkVSREFMRV9OUl9JUlFTOyBpKyspCisJCW1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7CisKKwllcnIgPSBwY2lfZW5hYmxlX21zaXgoZGV2LCBtc2l4X2VudHJpZXMsIFRJTUJFUkRBTEVfTlJfSVJRUyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCSJNU0ktWCBpbml0IGZhaWxlZDogJWQsIGV4cGVjdGVkIGVudHJpZXM6ICVkXG4iLAorCQkJZXJyLCBUSU1CRVJEQUxFX05SX0lSUVMpOworCQlnb3RvIGVycl9tc2l4OworCX0KKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9md192ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2NyZWF0ZV9maWxlOworCisJLyogUmVzZXQgYWxsIEZQR0EgUExCIHBlcmlwaGVyYWxzICovCisJaW93cml0ZTMyKDB4MSwgcHJpdi0+Y3RsX21lbWJhc2UgKyBUSU1CX1NXX1JTVCk7CisKKwkvKiB1cGRhdGUgSVJRIG9mZnNldHMgaW4gSTJDIGJvYXJkIGluZm8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvKTsgaSsrKQorCQl0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvW2ldLmlycSA9CisJCQltc2l4X2VudHJpZXNbdGltYmVyZGFsZV9pMmNfYm9hcmRfaW5mb1tpXS5pcnFdLnZlY3RvcjsKKworCS8qIFVwZGF0ZSB0aGUgU1BJIGNvbmZpZ3VyYXRpb24gZGVwZW5kaW5nIG9uIHRoZSBIVyAoOCBvciAxNiBiaXQpICovCisJaWYgKHByaXYtPmZ3LmNvbmZpZyAmIFRJTUJfSFdfQ09ORklHX1NQSV84QklUKSB7CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLmJpdHNfcGVyX3dvcmQgPSA4OworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5kZXZpY2VzID0KKwkJCXRpbWJlcmRhbGVfc3BpXzhiaXRfYm9hcmRfaW5mbzsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEubnVtX2RldmljZXMgPQorCQkJQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV84Yml0X2JvYXJkX2luZm8pOworCX0gZWxzZSB7CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLmJpdHNfcGVyX3dvcmQgPSAxNjsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEuZGV2aWNlcyA9CisJCQl0aW1iZXJkYWxlX3NwaV8xNmJpdF9ib2FyZF9pbmZvOworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5udW1fZGV2aWNlcyA9CisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpXzE2Yml0X2JvYXJkX2luZm8pOworCX0KKworCWlwX3NldHVwID0gcHJpdi0+ZncuY29uZmlnICYgVElNQl9IV19WRVJfTUFTSzsKKwlzd2l0Y2ggKGlwX3NldHVwKSB7CisJY2FzZSBUSU1CX0hXX1ZFUjA6CisJCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIC0xLAorCQkJdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzAsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcwKSwKKwkJCSZkZXYtPnJlc291cmNlWzBdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwkJYnJlYWs7CisJY2FzZSBUSU1CX0hXX1ZFUjE6CisJCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIC0xLAorCQkJdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzEsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcxKSwKKwkJCSZkZXYtPnJlc291cmNlWzBdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwkJYnJlYWs7CisJY2FzZSBUSU1CX0hXX1ZFUjI6CisJCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIC0xLAorCQkJdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzIsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmcyKSwKKwkJCSZkZXYtPnJlc291cmNlWzBdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwkJYnJlYWs7CisJY2FzZSBUSU1CX0hXX1ZFUjM6CisJCWVyciA9IG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIC0xLAorCQkJdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzMsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMF9jZmczKSwKKwkJCSZkZXYtPnJlc291cmNlWzBdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmZGV2LT5kZXYsICJVa25vd24gSVAgc2V0dXA6ICVkLiVkLiVkXG4iLAorCQkJcHJpdi0+ZncubWFqb3IsIHByaXYtPmZ3Lm1pbm9yLCBpcF9zZXR1cCk7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX21mZDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm1mZF9hZGRfZGV2aWNlcyBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9tZmQ7CisJfQorCisJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgMCwKKwkJdGltYmVyZGFsZV9jZWxsc19iYXIxLCBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMSksCisJCSZkZXYtPnJlc291cmNlWzFdLCBtc2l4X2VudHJpZXNbMF0udmVjdG9yKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibWZkX2FkZF9kZXZpY2VzIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX21mZDI7CisJfQorCisJLyogb25seSB2ZXJzaW9uIDAgYW5kIDMgaGF2ZSB0aGUgaU5hbmQgcm91dGVkIHRvIFNESENJICovCisJaWYgKCgocHJpdi0+ZncuY29uZmlnICYgVElNQl9IV19WRVJfTUFTSykgPT0gVElNQl9IV19WRVIwKSB8fAorCQkoKHByaXYtPmZ3LmNvbmZpZyAmIFRJTUJfSFdfVkVSX01BU0spID09IFRJTUJfSFdfVkVSMykpIHsKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgMSwgdGltYmVyZGFsZV9jZWxsc19iYXIyLAorCQkJQVJSQVlfU0laRSh0aW1iZXJkYWxlX2NlbGxzX2JhcjIpLAorCQkJJmRldi0+cmVzb3VyY2VbMl0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIm1mZF9hZGRfZGV2aWNlcyBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQkJZ290byBlcnJfbWZkMjsKKwkJfQorCX0KKworCWtmcmVlKG1zaXhfZW50cmllcyk7CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsCisJCSJGb3VuZCBUaW1iZXJkYWxlIENhcmQuIFJldjogJWQuJWQsIEhXIGNvbmZpZzogMHglMDJ4XG4iLAorCQlwcml2LT5mdy5tYWpvciwgcHJpdi0+ZncubWlub3IsIHByaXYtPmZ3LmNvbmZpZyk7CisKKwlyZXR1cm4gMDsKKworZXJyX21mZDI6CisJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7CitlcnJfbWZkOgorCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9md192ZXIpOworZXJyX2NyZWF0ZV9maWxlOgorCXBjaV9kaXNhYmxlX21zaXgoZGV2KTsKK2Vycl9tc2l4OgorCWlvdW5tYXAocHJpdi0+Y3RsX21lbWJhc2UpOworZXJyX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHByaXYtPmN0bF9tYXBiYXNlLCBDSElQQ1RMU0laRSk7CitlcnJfcmVxdWVzdDoKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKK2Vycl9zdGFydDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK2Vycl9lbmFibGU6CisJa2ZyZWUobXNpeF9lbnRyaWVzKTsKKwlrZnJlZShwcml2KTsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHRpbWJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHRpbWJlcmRhbGVfZGV2aWNlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisKKwltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9md192ZXIpOworCisJaW91bm1hcChwcml2LT5jdGxfbWVtYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHByaXYtPmN0bF9tYXBiYXNlLCBDSElQQ1RMU0laRSk7CisKKwlwY2lfZGlzYWJsZV9tc2l4KGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJa2ZyZWUocHJpdik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0aW1iZXJkYWxlX3BjaV90YmxbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9USU1CLCBQQ0lfREVWSUNFX0lEX1RJTUIpIH0sCisJeyAwIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdGltYmVyZGFsZV9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHRpbWJlcmRhbGVfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IHRpbWJlcmRhbGVfcGNpX3RibCwKKwkucHJvYmUgPSB0aW1iX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0aW1iX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0aW1iZXJkYWxlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdGltYmVyZGFsZV9wY2lfZHJpdmVyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgUENJIGRyaXZlciBmb3IgJXMgZGV2aWNlLlxuIiwKKwkJCXRpbWJlcmRhbGVfcGNpX2RyaXZlci5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiRHJpdmVyIGZvciAlcyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZC5cbiIsCisJCXRpbWJlcmRhbGVfcGNpX2RyaXZlci5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGltYmVyZGFsZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0aW1iZXJkYWxlX3BjaV9kcml2ZXIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRHJpdmVyIGZvciAlcyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdW5yZWdpc3RlcmVkLlxuIiwKKwkJdGltYmVyZGFsZV9wY2lfZHJpdmVyLm5hbWUpOworfQorCittb2R1bGVfaW5pdCh0aW1iZXJkYWxlX2luaXQpOworbW9kdWxlX2V4aXQodGltYmVyZGFsZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTW9jZWFuIExhYm9yYXRvcmllcyA8aW5mb0Btb2NlYW4tbGFicy5jb20+Iik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmggYi9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyN2ZmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuaApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIHRpbWJlcmRhbGUuaCB0aW1iZXJkYWxlIEZQR0EgTUZEIGRyaXZlciBkZWZpbmVzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKiBTdXBwb3J0czoKKyAqIFRpbWJlcmRhbGUgRlBHQQorICovCisKKyNpZm5kZWYgTUZEX1RJTUJFUkRBTEVfSAorI2RlZmluZSBNRkRfVElNQkVSREFMRV9ICisKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIwLjEiCisKKy8qIFRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydCB2ZXJzaW9ucyA+PSAzLjggYW5kIDwgNC4wICAqLworI2RlZmluZSBUSU1CX1NVUFBPUlRFRF9NQUpPUgkzCisKKy8qIFRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydCBtaW5vciA+PSA4ICovCisjZGVmaW5lIFRJTUJfUkVRVUlSRURfTUlOT1IJOAorCisvKiBSZWdpc3RlcnMgb2YgdGhlIGNvbnRyb2wgYXJlYSAqLworI2RlZmluZSBUSU1CX1JFVl9NQUpPUgkweDAwCisjZGVmaW5lIFRJTUJfUkVWX01JTk9SCTB4MDQKKyNkZWZpbmUgVElNQl9IV19DT05GSUcJMHgwOAorI2RlZmluZSBUSU1CX1NXX1JTVAkweDQwCisKKy8qIGJpdHMgaW4gdGhlIFRJTUJfSFdfQ09ORklHIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJTUJfSFdfQ09ORklHX1NQSV84QklUCTB4ODAKKworI2RlZmluZSBUSU1CX0hXX1ZFUl9NQVNLCTB4MGYKKyNkZWZpbmUgVElNQl9IV19WRVIwCQkweDAwCisjZGVmaW5lIFRJTUJfSFdfVkVSMQkJMHgwMQorI2RlZmluZSBUSU1CX0hXX1ZFUjIJCTB4MDIKKyNkZWZpbmUgVElNQl9IV19WRVIzCQkweDAzCisKKyNkZWZpbmUgT0NPUkVTT0ZGU0VUCTB4MAorI2RlZmluZSBPQ09SRVNFTkQJMHgxZgorCisjZGVmaW5lIFNQSU9GRlNFVAkweDgwCisjZGVmaW5lIFNQSUVORAkJMHhmZgorCisjZGVmaW5lIFVBUlRMSVRFT0ZGU0VUCTB4MTAwCisjZGVmaW5lIFVBUlRMSVRFRU5ECTB4MTBmCisKKyNkZWZpbmUgUkRTT0ZGU0VUCTB4MTgwCisjZGVmaW5lIFJEU0VORAkJMHgxODMKKworI2RlZmluZSBFVEhPRkZTRVQJMHgzMDAKKyNkZWZpbmUgRVRIRU5ECQkweDNmZgorCisjZGVmaW5lIEdQSU9PRkZTRVQJMHg0MDAKKyNkZWZpbmUgR1BJT0VORAkJMHg3ZmYKKworI2RlZmluZSBDSElQQ1RMT0ZGU0VUCTB4ODAwCisjZGVmaW5lIENISVBDVExFTkQJMHg4ZmYKKyNkZWZpbmUgQ0hJUENUTFNJWkUJKENISVBDVExFTkQgLSBDSElQQ1RMT0ZGU0VUKQorCisjZGVmaW5lIElOVENPRkZTRVQJMHhjMDAKKyNkZWZpbmUgSU5UQ0VORAkJMHhmZmYKKyNkZWZpbmUgSU5UQ1NJWkUJKElOVENFTkQgLSBJTlRDT0ZGU0VUKQorCisjZGVmaW5lIE1PU1RPRkZTRVQJMHgxMDAwCisjZGVmaW5lIE1PU1RFTkQJCTB4MTNmZgorCisjZGVmaW5lIFVBUlRPRkZTRVQJMHgxNDAwCisjZGVmaW5lIFVBUlRFTkQJCTB4MTdmZgorCisjZGVmaW5lIFhJSUNPRkZTRVQJMHgxODAwCisjZGVmaW5lIFhJSUNFTkQJCTB4MTlmZgorCisjZGVmaW5lIEkyU09GRlNFVAkweDFDMDAKKyNkZWZpbmUgSTJTRU5ECQkweDFmZmYKKworI2RlZmluZSBMT0dJV09GRlNFVAkweDMwMDAwCisjZGVmaW5lIExPR0lXRU5ECTB4MzdmZmYKKworI2RlZmluZSBNTENPUkVPRkZTRVQJMHg0MDAwMAorI2RlZmluZSBNTENPUkVFTkQJMHg0M2ZmZgorCisjZGVmaW5lIERNQU9GRlNFVAkweDAxMDAwMDAwCisjZGVmaW5lIERNQUVORAkJMHgwMTNmZmZmZgorCisvKiBTREhDMCBpcyBwbGFjZWQgaW4gUENJIGJhciAxICovCisjZGVmaW5lIFNESEMwT0ZGU0VUCTB4MDAKKyNkZWZpbmUgU0RIQzBFTkQJMHhmZgorCisvKiBTREhDMSBpcyBwbGFjZWQgaW4gUENJIGJhciAyICovCisjZGVmaW5lIFNESEMxT0ZGU0VUCTB4MDAKKyNkZWZpbmUgU0RIQzFFTkQJMHhmZgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVElNQgkweDEwZWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USU1CCTB4YTEyMworCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0lOSUMJCTAKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfTUxCCQkxCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0dQSU8JCTIKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfSTJDCQkzCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1VBUlQJCTQKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfRE1BCQk1CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0kyUwkJNgorI2RlZmluZSBJUlFfVElNQkVSREFMRV9UU0NfSU5UCQk3CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1NESEMJCTgKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfQURWNzE4MAkJOQorI2RlZmluZSBJUlFfVElNQkVSREFMRV9FVEhTV19JRgkJMTAKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfU1BJCQkxMQorI2RlZmluZSBJUlFfVElNQkVSREFMRV9VQVJUTElURQkJMTIKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfTUxDT1JFCQkxMworI2RlZmluZSBJUlFfVElNQkVSREFMRV9NTENPUkVfQlVGCTE0CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1JEUwkJMTUKKyNkZWZpbmUgVElNQkVSREFMRV9OUl9JUlFTCQkxNgorCisjZGVmaW5lIEdQSU9fUElOX0FTQ0IJCTgKKyNkZWZpbmUgR1BJT19QSU5fSU5JQ19SU1QJMTQKKyNkZWZpbmUgR1BJT19QSU5fQlRfUlNUCQkxNQorI2RlZmluZSBHUElPX05SX1BJTlMJCTE2CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMKaW5kZXggMmE3NjA2NS4uMTlhOTMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC90d2wtY29yZS5jCkBAIC0xMTUsNyArMTE1LDggQEAKICNkZWZpbmUgdHdsX2hhc193YXRjaGRvZygpICAgICAgICBmYWxzZQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPREVDKSB8fCBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPREVDX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPREVDKSB8fCBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0NPREVDX01PRFVMRSkgfHxcCisJZGVmaW5lZChDT05GSUdfU05EX1NPQ19UV0w2MDMwKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfU09DX1RXTDYwMzBfTU9EVUxFKQogI2RlZmluZSB0d2xfaGFzX2NvZGVjKCkJdHJ1ZQogI2Vsc2UKICNkZWZpbmUgdHdsX2hhc19jb2RlYygpCWZhbHNlCkBAIC03MTEsOCArNzEyLDE5IEBACiAJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CiAJfQogCi0JaWYgKHR3bF9oYXNfY29kZWMoKSAmJiBwZGF0YS0+Y29kZWMpIHsKLQkJY2hpbGQgPSBhZGRfY2hpbGQoMSwgInR3bDQwMzBfY29kZWMiLAorCWlmICh0d2xfaGFzX2NvZGVjKCkgJiYgcGRhdGEtPmNvZGVjICYmIHR3bF9jbGFzc19pc180MDMwKCkpIHsKKwkJc3ViX2NoaXBfaWQgPSB0d2xfbWFwW1RXTF9NT0RVTEVfQVVESU9fVk9JQ0VdLnNpZDsKKwkJY2hpbGQgPSBhZGRfY2hpbGQoc3ViX2NoaXBfaWQsICJ0d2w0MDMwX2NvZGVjIiwKKwkJCQlwZGF0YS0+Y29kZWMsIHNpemVvZigqcGRhdGEtPmNvZGVjKSwKKwkJCQlmYWxzZSwgMCwgMCk7CisJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCX0KKworCS8qIFBob2VuaXgqLworCWlmICh0d2xfaGFzX2NvZGVjKCkgJiYgcGRhdGEtPmNvZGVjICYmIHR3bF9jbGFzc19pc182MDMwKCkpIHsKKwkJc3ViX2NoaXBfaWQgPSB0d2xfbWFwW1RXTF9NT0RVTEVfQVVESU9fVk9JQ0VdLnNpZDsKKwkJY2hpbGQgPSBhZGRfY2hpbGQoc3ViX2NoaXBfaWQsICJ0d2w2MDMwX2NvZGVjIiwKIAkJCQlwZGF0YS0+Y29kZWMsIHNpemVvZigqcGRhdGEtPmNvZGVjKSwKIAkJCQlmYWxzZSwgMCwgMCk7CiAJCWlmIChJU19FUlIoY2hpbGQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYwppbmRleCBkM2Y1NTYxLi41N2IyMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYwpAQCAtNjUwLDExICs2NTAsMTEgQEAKIAkJCQlmbGFncyA9IERETUFfRkxBR1NfSUU7CiAKIAkJCWlmIChob3N0LT5mbGFncyAmIEhPU1RfRl9YTUlUKSB7Ci0JCQkJcmV0ID0gYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2VfZmxhZ3MoY2hhbm5lbCwKLQkJCQkJKHZvaWQgKilzZ192aXJ0KHNnKSwgbGVuLCBmbGFncyk7CisJCQkJcmV0ID0gYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoY2hhbm5lbCwKKwkJCQkJc2dfcGh5cyhzZyksIGxlbiwgZmxhZ3MpOwogCQkJfSBlbHNlIHsKLQkJCQlyZXQgPSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3RfZmxhZ3MoY2hhbm5lbCwKLQkJCQkJKHZvaWQgKilzZ192aXJ0KHNnKSwgbGVuLCBmbGFncyk7CisJCQkJcmV0ID0gYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGNoYW5uZWwsCisJCQkJCXNnX3BoeXMoc2cpLCBsZW4sIGZsYWdzKTsKIAkJCX0KIAogCQkJaWYgKCFyZXQpCkBAIC0xMDE3LDYgKzEwMTcsMTAgQEAKIAl9IGVsc2UKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKIAorCS8qIHBsYXRmb3JtIG1heSBub3QgYmUgYWJsZSB0byB1c2UgYWxsIGFkdmVydGlzZWQgY2FwcyAqLworCWlmIChob3N0LT5wbGF0ZGF0YSkKKwkJbW1jLT5jYXBzICY9IH4oaG9zdC0+cGxhdGRhdGEtPm1hc2tfaG9zdF9jYXBzKTsKKwogCXRhc2tsZXRfaW5pdCgmaG9zdC0+ZGF0YV90YXNrLCBhdTF4bW1jX3Rhc2tsZXRfZGF0YSwKIAkJCSh1bnNpZ25lZCBsb25nKWhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggMmRlMGNjOC4uMmJiMDNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtMjUxLDEyICsyNTEsNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGZsYXNoIGNoaXBzIG9uIE5FVHRlbC9TZWN1cmVFZGdlL1NuYXBHZWFyIGJvYXJkcy4KIAotY29uZmlnIE1URF9BTENIRU1ZCi0JdHJpc3RhdGUgIkFNRCBBbGNoZW15IFBiMXh4eC9EYjF4eHgvUkRLIE1URCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09DX0FVMVgwMCAmJiBNVERfUEFSVElUSU9OUyAmJiBNVERfQ0ZJCi0JaGVscAotCSAgRmxhc2ggbWVtb3J5IGFjY2VzcyBvbiBBTUQgQWxjaGVteSBQYi9EYi9SREsgUmVmZXJlbmNlIEJvYXJkcwotCiBjb25maWcgTVREX0RJTE5FVFBDCiAJdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIERJTC9OZXQgUEMiCiAJZGVwZW5kcyBvbiBYODYgJiYgTVREX0NPTkNBVCAmJiBNVERfUEFSVElUSU9OUyAmJiBNVERfQ0ZJX0lOVEVMRVhUICYmIEJST0tFTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKaW5kZXggY2UzMTUyMS4uYTQ0OTE5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCkBAIC00MCw3ICs0MCw2IEBACiBvYmotJChDT05GSUdfTVREX0RCT1gyKQkJKz0gZGJveDItZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9TT0xVVElPTkVOR0lORSkrPSBzb2x1dGlvbmVuZ2luZS5vCiBvYmotJChDT05GSUdfTVREX1BDSSkJCSs9IHBjaS5vCi1vYmotJChDT05GSUdfTVREX0FMQ0hFTVkpICAgICAgICs9IGFsY2hlbXktZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9BVVRDUFUxMikJKz0gYXV0Y3B1MTItbnZyYW0ubwogb2JqLSQoQ09ORklHX01URF9FREI3MzEyKQkrPSBlZGI3MzEyLm8KIG9iai0kKENPTkZJR19NVERfSU1QQTcpCQkrPSBpbXBhNy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2FsY2hlbXktZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvYWxjaGVteS1mbGFzaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDVhZDRmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL21hcHMvYWxjaGVteS1mbGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBGbGFzaCBtZW1vcnkgYWNjZXNzIG9uIEFNRCBBbGNoZW15IGV2YWx1YXRpb24gYm9hcmRzCi0gKgotICogKEMpIDIwMDMsIDIwMDQgUGV0ZSBQb3BvdiA8cHBvcG92QGVtYmVkZGVkYWxsZXkuY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMDAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJQYjEwMDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwMDgwMDAwMCAvKiA4TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTUwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiUGIxNTAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDQwMDAwMDAgLyogNjRNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMTAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJQYjExMDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwNDAwMDAwMCAvKiA2NE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjE1NTAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIlBiMTU1MCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDA4MDAwMDAwIC8qIDEyOE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjEyMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIlBiMTIwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDA4MDAwMDAwIC8qIDEyOE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDIgLyogMTYtYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjEwMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkRiMTAwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDAyMDAwMDAwIC8qIDMyTUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTUwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxNTAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDIwMDAwMDAgLyogMzJNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMTAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJEYjExMDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwMjAwMDAwMCAvKiAzMk1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkRiMTU1MCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDA4MDAwMDAwIC8qIDEyOE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjEyMDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkRiMTIwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDA0MDAwMDAwIC8qIDY0TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggMiAvKiAxNi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJCb3Nwb3J1cyBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDAxMDAwMDAwIC8qIDE2TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggMiAvKiAxNi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiTWlyYWdlIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDQwMDAwMDAgLyogNjRNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNkZWZpbmUgVVNFX0xPQ0FMX0FDQ0VTU09SUyAvKiB3aHk/ICovCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBhbGNoZW15X21hcCA9IHsKLQkubmFtZSA9CUJPQVJEX01BUF9OQU1FLAotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGFsY2hlbXlfcGFydGl0aW9uc1tdID0gewotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLm5hbWUgPSAiVXNlciBGUyIsCi0gICAgICAgICAgICAgICAgLnNpemUgPSBCT0FSRF9GTEFTSF9TSVpFIC0gMHgwMDQwMDAwMCwKLSAgICAgICAgICAgICAgICAub2Zmc2V0ID0gMHgwMDAwMDAwCi0gICAgICAgIH0sewotICAgICAgICAgICAgICAgIC5uYW1lID0gIllBTU9OIiwKLSAgICAgICAgICAgICAgICAuc2l6ZSA9IDB4MDEwMDAwMCwKLQkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKLSAgICAgICAgICAgICAgICAubWFza19mbGFncyA9IE1URF9XUklURUFCTEUKLSAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAgLm5hbWUgPSAicmF3IGtlcm5lbCIsCi0JCS5zaXplID0gKDB4MzAwMDAwIC0gMHg0MDAwMCksIC8qIGxhc3QgMjU2S0IgaXMgeWFtb24gZW52ICovCi0JCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0gICAgICAgIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKm15bXRkOwotCi1zdGF0aWMgaW50IF9faW5pdCBhbGNoZW15X210ZF9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCWludCBuYl9wYXJ0cyA9IDA7Ci0JdW5zaWduZWQgbG9uZyB3aW5kb3dfYWRkcjsKLQl1bnNpZ25lZCBsb25nIHdpbmRvd19zaXplOwotCi0JLyogRGVmYXVsdCBmbGFzaCBidXN3aWR0aCAqLwotCWFsY2hlbXlfbWFwLmJhbmt3aWR0aCA9IEJPQVJEX0ZMQVNIX1dJRFRIOwotCi0Jd2luZG93X2FkZHIgPSAweDIwMDAwMDAwIC0gQk9BUkRfRkxBU0hfU0laRTsKLQl3aW5kb3dfc2l6ZSA9IEJPQVJEX0ZMQVNIX1NJWkU7Ci0KLQkvKgotCSAqIFN0YXRpYyBwYXJ0aXRpb24gZGVmaW5pdGlvbiBzZWxlY3Rpb24KLQkgKi8KLQlwYXJ0cyA9IGFsY2hlbXlfcGFydGl0aW9uczsKLQluYl9wYXJ0cyA9IEFSUkFZX1NJWkUoYWxjaGVteV9wYXJ0aXRpb25zKTsKLQlhbGNoZW15X21hcC5zaXplID0gd2luZG93X3NpemU7Ci0KLQkvKgotCSAqIE5vdyBsZXQncyBwcm9iZSBmb3IgdGhlIGFjdHVhbCBmbGFzaC4gIERvIGl0IGhlcmUgc2luY2UKLQkgKiBzcGVjaWZpYyBtYWNoaW5lIHNldHRpbmdzIG1pZ2h0IGhhdmUgYmVlbiBzZXQgYWJvdmUuCi0JICovCi0JcHJpbnRrKEtFUk5fTk9USUNFIEJPQVJEX01BUF9OQU1FICI6IHByb2JpbmcgJWQtYml0IGZsYXNoIGJ1c1xuIiwKLQkJCWFsY2hlbXlfbWFwLmJhbmt3aWR0aCo4KTsKLQlhbGNoZW15X21hcC52aXJ0ID0gaW9yZW1hcCh3aW5kb3dfYWRkciwgd2luZG93X3NpemUpOwotCW15bXRkID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmYWxjaGVteV9tYXApOwotCWlmICghbXltdGQpIHsKLQkJaW91bm1hcChhbGNoZW15X21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0JbXltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlhZGRfbXRkX3BhcnRpdGlvbnMobXltdGQsIHBhcnRzLCBuYl9wYXJ0cyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhbGNoZW15X210ZF9jbGVhbnVwKHZvaWQpCi17Ci0JaWYgKG15bXRkKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhteW10ZCk7Ci0JCW1hcF9kZXN0cm95KG15bXRkKTsKLQkJaW91bm1hcChhbGNoZW15X21hcC52aXJ0KTsKLQl9Ci19Ci0KLW1vZHVsZV9pbml0KGFsY2hlbXlfbXRkX2luaXQpOwotbW9kdWxlX2V4aXQoYWxjaGVteV9tdGRfY2xlYW51cCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkVtYmVkZGVkIEFsbGV5IFNvbHV0aW9ucywgSW5jIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oQk9BUkRfTUFQX05BTUUgIiBNVEQgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKaW5kZXggNjc3Y2Q1My4uYmI2NDY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwpAQCAtNDU3LDEwICs0NTcsMTAgQEAKIAogY29uZmlnIE1URF9OQU5EX1NIX0ZMQ1RMCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgb24gUmVuZXNhcyBTdXBlckggRkxDVEwiCi0JZGVwZW5kcyBvbiBNVERfTkFORCAmJiBTVVBFUkggJiYgQ1BVX1NVQlRZUEVfU0g3NzIzCisJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBTVVBFUkgKIAloZWxwCiAJICBTZXZlcmFsIFJlbmVzYXMgU3VwZXJIIENQVSBoYXMgRkxDVEwuIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydAotCSAgZm9yIE5BTkQgRmxhc2ggdXNpbmcgRkxDVEwuIFRoaXMgZHJpdmVyIHN1cHBvcnQgU0g3NzIzLgorCSAgZm9yIE5BTkQgRmxhc2ggdXNpbmcgRkxDVEwuCiAKIGNvbmZpZyBNVERfTkFORF9EQVZJTkNJCiAgICAgICAgIHRyaXN0YXRlICJTdXBwb3J0IE5BTkQgb24gRGFWaW5jaSBTb0MiCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKaW5kZXggOTJjMzM0Zi4uNDNkNDZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAKIC8qCiAgKiBNVEQgc3RydWN0dXJlIGZvciBOQU5EIGNvbnRyb2xsZXIKQEAgLTQ3NSw3ICs0NzYsOCBAQAogCS8qIHNldCBncGlvMjA2IGhpZ2ggKi8KIAlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfRElSKSAmIH4oMSA8PCA2KSwgR1BJTzJfRElSKTsKIAotCWJvb3Rfc3dhcGJvb3QgPSAoYXVfcmVhZGwoTUVNX1NUU1RBVCkgJiAoMHg3IDw8IDEpKSB8ICgoYmNzci0+c3RhdHVzID4+IDYpICYgMHgxKTsKKwlib290X3N3YXBib290ID0gKGF1X3JlYWRsKE1FTV9TVFNUQVQpICYgKDB4NyA8PCAxKSkgfCAoKGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgPj4gNikgJiAweDEpOworCiAJc3dpdGNoIChib290X3N3YXBib290KSB7CiAJY2FzZSAwOgogCWNhc2UgMjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYyBiL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYwppbmRleCAwMmJlZjIxLi4xODQyZGY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogU3VwZXJIIEZMQ1RMIG5hbmQgY29udHJvbGxlcgogICoKLSAqIENvcHlyaWdodCDCqSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCi0gKiBDb3B5cmlnaHQgwqkgMjAwOCBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IChjKSAyMDA4IEF0b20gQ3JlYXRlIEVuZ2luZWVyaW5nIENvLiwgTHRkLgogICoKLSAqIEJhc2VkIG9uIGZzbF9lbGJjX25hbmQuYywgQ29weXJpZ2h0IMKpIDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvcgorICogQmFzZWQgb24gZnNsX2VsYmNfbmFuZC5jLCBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNzUsNiArNzUsMTEgQEAKIAl3cml0ZWIoVFJTVFJULCBGTFRSQ1IoZmxjdGwpKTsKIH0KIAorc3RhdGljIHZvaWQgdGltZW91dF9lcnJvcihzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCBjb25zdCBjaGFyICpzdHIpCit7CisJZGV2X2VycigmZmxjdGwtPnBkZXYtPmRldiwgIlRpbWVvdXQgb2NjdXJlZCBpbiAlc1xuIiwgc3RyKTsKK30KKwogc3RhdGljIHZvaWQgd2FpdF9jb21wbGV0aW9uKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCiB7CiAJdWludDMyX3QgdGltZW91dCA9IExPT1BfVElNRU9VVF9NQVg7CkBAIC04Nyw3ICs5Miw3IEBACiAJCXVkZWxheSgxKTsKIAl9CiAKLQlwcmludGsoS0VSTl9FUlIgIndhaXRfY29tcGxldGlvbigpOiBUaW1lb3V0IG9jY3VyZWQgXG4iKTsKKwl0aW1lb3V0X2Vycm9yKGZsY3RsLCBfX2Z1bmNfXyk7CiAJd3JpdGViKDB4MCwgRkxUUkNSKGZsY3RsKSk7CiB9CiAKQEAgLTEwMCw2ICsxMDUsOCBAQAogCQlhZGRyID0gcGFnZV9hZGRyOwkvKiBFUkFTRTEgKi8KIAl9IGVsc2UgaWYgKHBhZ2VfYWRkciAhPSAtMSkgewogCQkvKiBTRVFJTiwgUkVBRDAsIGV0Yy4uICovCisJCWlmIChmbGN0bC0+Y2hpcC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCWNvbHVtbiA+Pj0gMTsKIAkJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKIAkJCWFkZHIgPSBjb2x1bW4gJiAweDBGRkY7CiAJCQlhZGRyIHw9IChwYWdlX2FkZHIgJiAweGZmKSA8PCAxNjsKQEAgLTEzMiw3ICsxMzksNyBAQAogCQkJcmV0dXJuOwogCQl1ZGVsYXkoMSk7CiAJfQotCXByaW50ayhLRVJOX0VSUiAid2FpdF9yZmlmb19yZWFkeSgpOiBUaW1lb3V0IG9jY3VyZWQgXG4iKTsKKwl0aW1lb3V0X2Vycm9yKGZsY3RsLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkIHdhaXRfd2ZpZm9fcmVhZHkoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKQEAgLTE0Niw3ICsxNTMsNyBAQAogCQkJcmV0dXJuOwogCQl1ZGVsYXkoMSk7CiAJfQotCXByaW50ayhLRVJOX0VSUiAid2FpdF93Zmlmb19yZWFkeSgpOiBUaW1lb3V0IG9jY3VyZWQgXG4iKTsKKwl0aW1lb3V0X2Vycm9yKGZsY3RsLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyBpbnQgd2FpdF9yZWNmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGludCBzZWN0b3JfbnVtYmVyKQpAQCAtMTk4LDcgKzIwNSw3IEBACiAJCXdyaXRlbCgwLCBGTDRFQ0NDUihmbGN0bCkpOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAid2FpdF9yZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXRpbWVvdXRfZXJyb3IoZmxjdGwsIF9fZnVuY19fKTsKIAlyZXR1cm4gMTsJLyogdGltZW91dCAqLwogfQogCkBAIC0yMTQsNyArMjIxLDcgQEAKIAkJCXJldHVybjsKIAkJdWRlbGF5KDEpOwogCX0KLQlwcmludGsoS0VSTl9FUlIgIndhaXRfd2VjZmlmb19yZWFkeSgpOiBUaW1lb3V0IG9jY3VyZWQgXG4iKTsKKwl0aW1lb3V0X2Vycm9yKGZsY3RsLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRfZGF0YXJlZyhzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCBpbnQgb2Zmc2V0KQpAQCAtMjc1LDcgKzI4Miw3IEBACiBzdGF0aWMgdm9pZCBzZXRfY21kX3JlZ3Moc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQzMl90IGNtZCwgdWludDMyX3QgZmxjbWNkcl92YWwpCiB7CiAJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOwotCXVpbnQzMl90IGZsY21uY3JfdmFsID0gcmVhZGwoRkxDTU5DUihmbGN0bCkpOworCXVpbnQzMl90IGZsY21uY3JfdmFsID0gcmVhZGwoRkxDTU5DUihmbGN0bCkpICYgflNFTF8xNkJJVDsKIAl1aW50MzJfdCBmbGNtZGNyX3ZhbCwgYWRkcl9sZW5fYnl0ZXMgPSAwOwogCiAJLyogU2V0IFNOQU5EIGJpdCBpZiBwYWdlIHNpemUgaXMgMjA0OGJ5dGUgKi8KQEAgLTI5Nyw2ICszMDQsOCBAQAogCWNhc2UgTkFORF9DTURfUkVBRE9PQjoKIAkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+cndfQURSQ05UOwogCQlmbGNtZGNyX3ZhbCB8PSBDRFNSQ19FOworCQlpZiAoZmxjdGwtPmNoaXAub3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCQlmbGNtbmNyX3ZhbCB8PSBTRUxfMTZCSVQ7CiAJCWJyZWFrOwogCWNhc2UgTkFORF9DTURfU0VRSU46CiAJCS8qIFRoaXMgY2FzZSBpcyB0aGF0IGNtZCBpcyBSRUFEMCBvciBSRUFEMSBvciBSRUFEMDAgKi8KQEAgLTMwNSw2ICszMTQsOCBAQAogCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CiAJCWFkZHJfbGVuX2J5dGVzID0gZmxjdGwtPnJ3X0FEUkNOVDsKIAkJZmxjbWRjcl92YWwgfD0gRE9DTUQyX0UgfCBDRFNSQ19FIHwgU0VMUlc7CisJCWlmIChmbGN0bC0+Y2hpcC5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCWZsY21uY3JfdmFsIHw9IFNFTF8xNkJJVDsKIAkJYnJlYWs7CiAJY2FzZSBOQU5EX0NNRF9SRUFESUQ6CiAJCWZsY21uY3JfdmFsICY9IH5TTkFORF9FOwpAQCAtNTIzLDYgKzUzNCw4IEBACiAJCXNldF9hZGRyKG10ZCwgMCwgcGFnZV9hZGRyKTsKIAogCQlmbGN0bC0+cmVhZF9ieXRlcyA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplOworCQlpZiAoZmxjdGwtPmNoaXAub3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCQljb2x1bW4gPj49IDE7CiAJCWZsY3RsLT5pbmRleCArPSBjb2x1bW47CiAJCWdvdG8gcmVhZF9ub3JtYWxfZXhpdDsKIApAQCAtNjg2LDYgKzY5OSwxOCBAQAogCXJldHVybiBkYXRhOwogfQogCitzdGF0aWMgdWludDE2X3QgZmxjdGxfcmVhZF93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworICAgICAgIHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKyAgICAgICBpbnQgaW5kZXggPSBmbGN0bC0+aW5kZXg7CisgICAgICAgdWludDE2X3QgZGF0YTsKKyAgICAgICB1aW50MTZfdCAqYnVmID0gKHVpbnQxNl90ICopJmZsY3RsLT5kb25lX2J1ZmZbaW5kZXhdOworCisgICAgICAgZGF0YSA9ICpidWY7CisgICAgICAgZmxjdGwtPmluZGV4ICs9IDI7CisgICAgICAgcmV0dXJuIGRhdGE7Cit9CisKIHN0YXRpYyB2b2lkIGZsY3RsX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7CkBAIC03NjksMzggKzc5NCwzNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBmbGN0bF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZmxjdGxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsOwogCXN0cnVjdCBtdGRfaW5mbyAqZmxjdGxfbXRkOwogCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmQ7CiAJc3RydWN0IHNoX2ZsY3RsX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCWludCByZXQ7CisJaW50IHJldCA9IC1FTlhJTzsKIAogCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaWYgKHBkYXRhID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzaF9mbGN0bCBwbGF0Zm9ybV9kYXRhIG5vdCBmb3VuZC5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZmxjdGwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hfZmxjdGwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZsY3RsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIE5BTkQgTVREIGRldiBzdHJ1Y3R1cmUuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRyaXZlciBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNvdXJjZSBub3QgZm91bmQuXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FTk9ERVY7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSS9PIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyOwogCX0KIAotCWZsY3RsLT5yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWZsY3RsLT5yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKGZsY3RsLT5yZWcgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpb3JlbWFwIGVycm9yLlxuIiwgX19mdW5jX18pOwotCQlyZXQgPSAtRU5PTUVNOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtODA4LDYgKzgzMSw3IEBACiAJZmxjdGxfbXRkID0gJmZsY3RsLT5tdGQ7CiAJbmFuZCA9ICZmbGN0bC0+Y2hpcDsKIAlmbGN0bF9tdGQtPnByaXYgPSBuYW5kOworCWZsY3RsLT5wZGV2ID0gcGRldjsKIAlmbGN0bC0+aHdlY2MgPSBwZGF0YS0+aGFzX2h3ZWNjOwogCiAJZmxjdGxfcmVnaXN0ZXJfaW5pdChmbGN0bCwgcGRhdGEtPmZsY21uY3JfdmFsKTsKQEAgLTgyNSw2ICs4NDksMTEgQEAKIAluYW5kLT5zZWxlY3RfY2hpcCA9IGZsY3RsX3NlbGVjdF9jaGlwOwogCW5hbmQtPmNtZGZ1bmMgPSBmbGN0bF9jbWRmdW5jOwogCisJaWYgKHBkYXRhLT5mbGNtbmNyX3ZhbCAmIFNFTF8xNkJJVCkgeworCQluYW5kLT5vcHRpb25zIHw9IE5BTkRfQlVTV0lEVEhfMTY7CisJCW5hbmQtPnJlYWRfd29yZCA9IGZsY3RsX3JlYWRfd29yZDsKKwl9CisKIAlyZXQgPSBuYW5kX3NjYW5faWRlbnQoZmxjdGxfbXRkLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKQEAgLTg0Niw3ICs4NzUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IGZsY3RsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgZmxjdGxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggNmJhYzA0Ni4uNmU1YTY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KQEAgLTYzLDYgKzY0LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKICNpbmNsdWRlIDxhdTEwMDAuaD4KKyNpbmNsdWRlIDxhdTF4eHhfZXRoLmg+CiAjaW5jbHVkZSA8cHJvbS5oPgogCiAjaW5jbHVkZSAiYXUxMDAwX2V0aC5oIgpAQCAtMTEyLDE1ICsxMTQsMTUgQEAKICAqCiAgKiBQSFkgZGV0ZWN0aW9uIGFsZ29yaXRobQogICoKLSAqIElmIEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRyBpcyB1bmRlZmluZWQsIHRoZSBQSFkgc2V0dXAgaXMKKyAqIElmIHBoeV9zdGF0aWNfY29uZmlnIGlzIHVuZGVmaW5lZCwgdGhlIFBIWSBzZXR1cCBpcwogICogYXV0b2RldGVjdGVkOgogICoKICAqIG1paV9wcm9iZSgpIGZpcnN0IHNlYXJjaGVzIHRoZSBjdXJyZW50IE1BQydzIE1JSSBidXMgZm9yIGEgUEhZLAotICogc2VsZWN0aW5nIHRoZSBmaXJzdCAob3IgbGFzdCwgaWYgQVUxWFhYX1BIWV9TRUFSQ0hfSElHSEVTVF9BRERSIGlzCisgKiBzZWxlY3RpbmcgdGhlIGZpcnN0IChvciBsYXN0LCBpZiBwaHlfc2VhcmNoX2hpZ2hlc3RfYWRkciBpcwogICogZGVmaW5lZCkgUEhZIGFkZHJlc3Mgbm90IGFscmVhZHkgY2xhaW1lZCBieSBhbm90aGVyIG5ldGRldi4KICAqCiAgKiBJZiBub3RoaW5nIHdhcyBmb3VuZCB0aGF0IHdheSB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIDJuZCBldGhlcm5ldAotICogY29udHJvbGxlcidzIFBIWSBhbmQgQVUxWFhYX1BIWTFfU0VBUkNIX09OX01BQzAgaXMgZGVmaW5lZCwgdGhlbgorICogY29udHJvbGxlcidzIFBIWSBhbmQgcGh5MV9zZWFyY2hfbWFjMCBpcyBkZWZpbmVkLCB0aGVuCiAgKiB0aGUgZmlyc3QgTUlJIGJ1cyBpcyBzZWFyY2hlZCBhcyB3ZWxsIGZvciBhbiB1bmNsYWltZWQgUEhZOyB0aGlzIGlzCiAgKiBuZWVkZWQgaW4gY2FzZSBvZiBhIGR1YWwtUEhZIGFjY2Vzc2libGUgb25seSB0aHJvdWdoIHRoZSBNQUMwJ3MgTUlJCiAgKiBidXMuCkBAIC0xMjksOSArMTMxLDcgQEAKICAqIGNvbnRyb2xsZXIgaXMgbm90IHJlZ2lzdGVyZWQgdG8gdGhlIG5ldHdvcmsgc3Vic3lzdGVtLgogICovCiAKLS8qIGF1dG9kZXRlY3Rpb24gZGVmYXVsdHMgKi8KLSN1bmRlZiAgQVUxWFhYX1BIWV9TRUFSQ0hfSElHSEVTVF9BRERSCi0jZGVmaW5lIEFVMVhYWF9QSFkxX1NFQVJDSF9PTl9NQUMwCisvKiBhdXRvZGV0ZWN0aW9uIGRlZmF1bHRzOiBwaHkxX3NlYXJjaF9tYWMwICovCiAKIC8qIHN0YXRpYyBQSFkgc2V0dXAKICAqCkBAIC0xNDgsMjkgKzE0OCw2IEBACiAgKiBzcGVjaWZpYyBpcnEtbWFwCiAgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfQk9TUE9SVVMpCi0vKgotICogTWljcmVsL0tlbmRpbiA1IHBvcnQgc3dpdGNoIGF0dGFjaGVkIHRvIE1BQzAsCi0gKiBNQUMwIGlzIGFzc29jaWF0ZWQgd2l0aCBQSFkgYWRkcmVzcyA1ICg9PSBXQU4gcG9ydCkKLSAqIE1BQzEgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgUEhZLCBzaW5jZSBpdCdzIGNvbm5lY3RlZCBkaXJlY3RseQotICogdG8gdGhlIHN3aXRjaC4KLSAqIG5vIGludGVycnVwdHMgYXJlIHVzZWQKLSAqLwotIyBkZWZpbmUgQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHCi0KLSMgZGVmaW5lIEFVMVhYWF9QSFkwX0FERFIgIDUKLSMgZGVmaW5lIEFVMVhYWF9QSFkwX0JVU0lEIDAKLSMgIHVuZGVmIEFVMVhYWF9QSFkwX0lSUQotCi0jICB1bmRlZiBBVTFYWFhfUEhZMV9BRERSCi0jICB1bmRlZiBBVTFYWFhfUEhZMV9CVVNJRAotIyAgdW5kZWYgQVUxWFhYX1BIWTFfSVJRCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQVUxWFhYX1BIWTBfQlVTSUQpICYmIChBVTFYWFhfUEhZMF9CVVNJRCA+IDApCi0jIGVycm9yIE1BQzAtYXNzb2NpYXRlZCBQSFkgYXR0YWNoZWQgMm5kIE1BQ3MgTUlJIGJ1cyBub3Qgc3VwcG9ydGVkIHlldAotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlX3Jlc2V0KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zOTAsNjcgKzM2Nyw1NSBAQAogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gTlVMTDsKIAotI2lmIGRlZmluZWQoQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHKQotCUJVR19PTihhdXAtPm1hY19pZCA8IDAgfHwgYXVwLT5tYWNfaWQgPiAxKTsKKwlpZiAoYXVwLT5waHlfc3RhdGljX2NvbmZpZykgeworCQlCVUdfT04oYXVwLT5tYWNfaWQgPCAwIHx8IGF1cC0+bWFjX2lkID4gMSk7CiAKLQlpZihhdXAtPm1hY19pZCA9PSAwKSB7IC8qIGdldCBQSFkwICovCi0jIGlmIGRlZmluZWQoQVUxWFhYX1BIWTBfQUREUikKLQkJcGh5ZGV2ID0gYXVfbWFjc1tBVTFYWFhfUEhZMF9CVVNJRF0tPm1paV9idXMtPnBoeV9tYXBbQVUxWFhYX1BIWTBfQUREUl07Ci0jIGVsc2UKLQkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjolczogdXNpbmcgUEhZLWxlc3Mgc2V0dXBcbiIsCi0JCQlkZXYtPm5hbWUpOworCQlpZiAoYXVwLT5waHlfYWRkcikKKwkJCXBoeWRldiA9IGF1cC0+bWlpX2J1cy0+cGh5X21hcFthdXAtPnBoeV9hZGRyXTsKKwkJZWxzZQorCQkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjolczogdXNpbmcgUEhZLWxlc3Mgc2V0dXBcbiIsCisJCQkJZGV2LT5uYW1lKTsKIAkJcmV0dXJuIDA7Ci0jIGVuZGlmIC8qIGRlZmluZWQoQVUxWFhYX1BIWTBfQUREUikgKi8KLQl9IGVsc2UgaWYgKGF1cC0+bWFjX2lkID09IDEpIHsgLyogZ2V0IFBIWTEgKi8KLSMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMV9BRERSKQotCQlwaHlkZXYgPSBhdV9tYWNzW0FVMVhYWF9QSFkxX0JVU0lEXS0+bWlpX2J1cy0+cGh5X21hcFtBVTFYWFhfUEhZMV9BRERSXTsKLSMgZWxzZQotCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiVzOiB1c2luZyBQSFktbGVzcyBzZXR1cFxuIiwKLQkJCWRldi0+bmFtZSk7Ci0JCXJldHVybiAwOwotIyBlbmRpZiAvKiBkZWZpbmVkKEFVMVhYWF9QSFkxX0FERFIpICovCi0JfQorCX0gZWxzZSB7CisJCWludCBwaHlfYWRkcjsKIAotI2Vsc2UgLyogZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpICovCi0JaW50IHBoeV9hZGRyOworCQkvKiBmaW5kIHRoZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIFBIWSBvbiB0aGUgY3VycmVudCBNQUMncyBNSUkgYnVzICovCisJCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykKKwkJCWlmIChhdXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdKSB7CisJCQkJcGh5ZGV2ID0gYXVwLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXTsKKwkJCQlpZiAoIWF1cC0+cGh5X3NlYXJjaF9oaWdoZXN0X2FkZHIpCisJCQkJCWJyZWFrOyAvKiBicmVhayBvdXQgd2l0aCBmaXJzdCBvbmUgZm91bmQgKi8KKwkJCX0KIAotCS8qIGZpbmQgdGhlIGZpcnN0IChsb3dlc3QgYWRkcmVzcykgUEhZIG9uIHRoZSBjdXJyZW50IE1BQydzIE1JSSBidXMgKi8KLQlmb3IgKHBoeV9hZGRyID0gMDsgcGh5X2FkZHIgPCBQSFlfTUFYX0FERFI7IHBoeV9hZGRyKyspCi0JCWlmIChhdXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdKSB7Ci0JCQlwaHlkZXYgPSBhdXAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOwotIyBpZiAhZGVmaW5lZChBVTFYWFhfUEhZX1NFQVJDSF9ISUdIRVNUX0FERFIpCi0JCQlicmVhazsgLyogYnJlYWsgb3V0IHdpdGggZmlyc3Qgb25lIGZvdW5kICovCi0jIGVuZGlmCi0JCX0KKwkJaWYgKGF1cC0+cGh5MV9zZWFyY2hfbWFjMCkgeworCQkJLyogdHJ5IGhhcmRlciB0byBmaW5kIGEgUEhZICovCisJCQlpZiAoIXBoeWRldiAmJiAoYXVwLT5tYWNfaWQgPT0gMSkpIHsKKwkJCQkvKiBubyBQSFkgZm91bmQsIG1heWJlIHdlIGhhdmUgYSBkdWFsIFBIWT8gKi8KKwkJCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBubyBQSFkgZm91bmQgb24gTUFDMSwgIgorCQkJCQkibGV0J3Mgc2VlIGlmIGl0J3MgYXR0YWNoZWQgdG8gTUFDMC4uLlxuIik7CiAKLSMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMV9TRUFSQ0hfT05fTUFDMCkKLQkvKiB0cnkgaGFyZGVyIHRvIGZpbmQgYSBQSFkgKi8KLQlpZiAoIXBoeWRldiAmJiAoYXVwLT5tYWNfaWQgPT0gMSkpIHsKLQkJLyogbm8gUEhZIGZvdW5kLCBtYXliZSB3ZSBoYXZlIGEgZHVhbCBQSFk/ICovCi0JCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6IG5vIFBIWSBmb3VuZCBvbiBNQUMxLCAiCi0JCQkibGV0J3Mgc2VlIGlmIGl0J3MgYXR0YWNoZWQgdG8gTUFDMC4uLlxuIik7CisJCQkJLyogZmluZCB0aGUgZmlyc3QgKGxvd2VzdCBhZGRyZXNzKSBub24tYXR0YWNoZWQgUEhZIG9uCisJCQkJICogdGhlIE1BQzAgTUlJIGJ1cyAqLworCQkJCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykgeworCQkJCQlzdHJ1Y3QgcGh5X2RldmljZSAqY29uc3QgdG1wX3BoeWRldiA9CisJCQkJCQkJYXVwLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXTsKIAotCQlCVUdfT04oIWF1X21hY3NbMF0pOworCQkJCQlpZiAoYXVwLT5tYWNfaWQgPT0gMSkKKwkJCQkJCWJyZWFrOwogCi0JCS8qIGZpbmQgdGhlIGZpcnN0IChsb3dlc3QgYWRkcmVzcykgbm9uLWF0dGFjaGVkIFBIWSBvbgotCQkgKiB0aGUgTUFDMCBNSUkgYnVzICovCi0JCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykgewotCQkJc3RydWN0IHBoeV9kZXZpY2UgKmNvbnN0IHRtcF9waHlkZXYgPQotCQkJCWF1X21hY3NbMF0tPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOworCQkJCQlpZiAoIXRtcF9waHlkZXYpCisJCQkJCQljb250aW51ZTsgLyogbm8gUEhZIGhlcmUuLi4gKi8KIAotCQkJaWYgKCF0bXBfcGh5ZGV2KQotCQkJCWNvbnRpbnVlOyAvKiBubyBQSFkgaGVyZS4uLiAqLworCQkJCQlpZiAodG1wX3BoeWRldi0+YXR0YWNoZWRfZGV2KQorCQkJCQkJY29udGludWU7IC8qIGFscmVhZHkgY2xhaW1lZCBieSBNQUMwICovCiAKLQkJCWlmICh0bXBfcGh5ZGV2LT5hdHRhY2hlZF9kZXYpCi0JCQkJY29udGludWU7IC8qIGFscmVhZHkgY2xhaW1lZCBieSBNQUMwICovCi0KLQkJCXBoeWRldiA9IHRtcF9waHlkZXY7Ci0JCQlicmVhazsgLyogZm91bmQgaXQgKi8KKwkJCQkJcGh5ZGV2ID0gdG1wX3BoeWRldjsKKwkJCQkJYnJlYWs7IC8qIGZvdW5kIGl0ICovCisJCQkJfQorCQkJfQogCQl9CiAJfQotIyBlbmRpZiAvKiBkZWZpbmVkKEFVMVhYWF9QSFkxX1NFQVJDSF9PVEhFUl9CVVMpICovCiAKLSNlbmRpZiAvKiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykgKi8KIAlpZiAoIXBoeWRldikgewogCQlwcmludGsgKEtFUk5fRVJSIERSVl9OQU1FICI6JXM6IG5vIFBIWSBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwpAQCAtNTc4LDMxICs1NDMsNiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB7Ci0JdTMyIGJhc2VfYWRkcjsKLQl1MzIgbWFjZW5fYWRkcjsKLQlpbnQgaXJxOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci19IGlmbGlzdFsyXSA9IHsKLSNpZmRlZiBDT05GSUdfU09DX0FVMTAwMAotCXtBVTEwMDBfRVRIMF9CQVNFLCBBVTEwMDBfTUFDMF9FTkFCTEUsIEFVMTAwMF9NQUMwX0RNQV9JTlR9LAotCXtBVTEwMDBfRVRIMV9CQVNFLCBBVTEwMDBfTUFDMV9FTkFCTEUsIEFVMTAwMF9NQUMxX0RNQV9JTlR9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU09DX0FVMTEwMAotCXtBVTExMDBfRVRIMF9CQVNFLCBBVTExMDBfTUFDMF9FTkFCTEUsIEFVMTEwMF9NQUMwX0RNQV9JTlR9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU09DX0FVMTUwMAotCXtBVTE1MDBfRVRIMF9CQVNFLCBBVTE1MDBfTUFDMF9FTkFCTEUsIEFVMTUwMF9NQUMwX0RNQV9JTlR9LAotCXtBVTE1MDBfRVRIMV9CQVNFLCBBVTE1MDBfTUFDMV9FTkFCTEUsIEFVMTUwMF9NQUMxX0RNQV9JTlR9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU09DX0FVMTU1MAotCXtBVTE1NTBfRVRIMF9CQVNFLCBBVTE1NTBfTUFDMF9FTkFCTEUsIEFVMTU1MF9NQUMwX0RNQV9JTlR9LAotCXtBVTE1NTBfRVRIMV9CQVNFLCBBVTE1NTBfTUFDMV9FTkFCTEUsIEFVMTU1MF9NQUMxX0RNQV9JTlR9Ci0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgbnVtX2lmczsKLQogLyoKICAqIGV0aHRvb2wgb3BlcmF0aW9ucwogICovCkBAIC03MTEsNyArNjUxLDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdHVzKQogewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKIAogCXBzLT5yeF9wYWNrZXRzKys7CkBAIC05NjksNyArOTA4LDcgQEAKIAl9CiAKIAlwREIgPSBhdXAtPnR4X2RiX2ludXNlW2F1cC0+dHhfaGVhZF07Ci0Jc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHBEQi0+dmFkZHIsIHNrYi0+bGVuKTsKKwlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgKHZvaWQgKilwREItPnZhZGRyLCBza2ItPmxlbik7CiAJaWYgKHNrYi0+bGVuIDwgRVRIX1pMRU4pIHsKIAkJZm9yIChpPXNrYi0+bGVuOyBpPEVUSF9aTEVOOyBpKyspIHsKIAkJCSgoY2hhciAqKXBEQi0+dmFkZHIpW2ldID0gMDsKQEAgLTEwNTgsNTMgKzk5Nyw1OSBAQAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqIGF1MTAwMF9wcm9iZShpbnQgcG9ydF9udW0pCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdTEwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdGF0aWMgdW5zaWduZWQgdmVyc2lvbl9wcmludGVkID0gMDsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IE5VTEw7CisJc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSAqcGQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJZGJfZGVzdF90ICpwREIsICpwREJmcmVlOworCWludCBpcnEsIGksIGVyciA9IDA7CisJc3RydWN0IHJlc291cmNlICpiYXNlLCAqbWFjZW47CiAJY2hhciBldGhhZGRyWzZdOwotCWludCBpcnEsIGksIGVycjsKLQl1MzIgYmFzZSwgbWFjZW47CiAKLQlpZiAocG9ydF9udW0gPj0gTlVNX0VUSF9JTlRFUkZBQ0VTKQotCQlyZXR1cm4gTlVMTDsKKwliYXNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIWJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byByZXRyaWV2ZSBiYXNlIHJlZ2lzdGVyXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCi0JYmFzZSAgPSBDUEhZU0FERFIoaWZsaXN0W3BvcnRfbnVtXS5iYXNlX2FkZHIgKTsKLQltYWNlbiA9IENQSFlTQUREUihpZmxpc3RbcG9ydF9udW1dLm1hY2VuX2FkZHIpOwotCWlycSA9IGlmbGlzdFtwb3J0X251bV0uaXJxOworCW1hY2VuID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlpZiAoIW1hY2VuKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gcmV0cmlldmUgTUFDIEVuYWJsZSByZWdpc3RlclxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKCBiYXNlLCBNQUNfSU9TSVpFLCAiQXUxeDAwIEVORVQiKSB8fAotCSAgICAhcmVxdWVzdF9tZW1fcmVnaW9uKG1hY2VuLCA0LCAiQXUxeDAwIEVORVQiKSkKLQkJcmV0dXJuIE5VTEw7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIHJldHJpZXZlIElSUVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KIAotCWlmICh2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQotCQlwcmludGsoIiVzIHZlcnNpb24gJXMgJXNcbiIsIERSVl9OQU1FLCBEUlZfVkVSU0lPTiwgRFJWX0FVVEhPUik7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYmFzZS0+c3RhcnQsIHJlc291cmNlX3NpemUoYmFzZSksIHBkZXYtPm5hbWUpKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVnaW9uIGZvciBiYXNlIHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24obWFjZW4tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1hY2VuKSwgcGRldi0+bmFtZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZWdpb24gZm9yIE1BQyBlbmFibGUgcmVnaXN0ZXJcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX3JlcXVlc3Q7CisJfQogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSkpOwogCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFsbG9jX2V0aGVyZGV2IGZhaWxlZFxuIiwgRFJWX05BTUUpOwotCQlyZXR1cm4gTlVMTDsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2M7CiAJfQogCi0JZGV2LT5iYXNlX2FkZHIgPSBiYXNlOwotCWRldi0+aXJxID0gaXJxOwotCWRldi0+bmV0ZGV2X29wcyA9ICZhdTEwMDBfbmV0ZGV2X29wczsKLQlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmYXUxMDAwX2V0aHRvb2xfb3BzKTsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gRVRIX1RYX1RJTUVPVVQ7Ci0KLQllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGVycm9yICVkXG4iLAotCQkJCURSVl9OQU1FLCBlcnIpOwotCQlmcmVlX25ldGRldihkZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlwcmludGsoIiVzOiBBdTF4eDAgRXRoZXJuZXQgZm91bmQgYXQgMHgleCwgaXJxICVkXG4iLAotCQlkZXYtPm5hbWUsIGJhc2UsIGlycSk7Ci0KKwlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNwaW5fbG9ja19pbml0KCZhdXAtPmxvY2spOwpAQCAtMTExNSwyMSArMTA2MCwyOSBAQAogCQkJCQkJKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCiAJCQkJCQkmYXVwLT5kbWFfYWRkciwJMCk7CiAJaWYgKCFhdXAtPnZhZGRyKSB7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbiggYmFzZSwgTUFDX0lPU0laRSk7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihtYWNlbiwgNCk7Ci0JCXJldHVybiBOVUxMOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIGFsbG9jYXRlIGRhdGEgYnVmZmVyc1xuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3ZhZGRyOwogCX0KIAogCS8qIGF1cC0+bWFjIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIE1BQydzIHJlZ2lzdGVycyAqLwotCWF1cC0+bWFjID0gKHZvbGF0aWxlIG1hY19yZWdfdCAqKWlmbGlzdFtwb3J0X251bV0uYmFzZV9hZGRyOworCWF1cC0+bWFjID0gKHZvbGF0aWxlIG1hY19yZWdfdCAqKWlvcmVtYXBfbm9jYWNoZShiYXNlLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShiYXNlKSk7CisJaWYgKCFhdXAtPm1hYykgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIGlvcmVtYXAgTUFDIHJlZ2lzdGVyc1xuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfcmVtYXAxOworCX0KIAotCS8qIFNldHVwIHNvbWUgdmFyaWFibGVzIGZvciBxdWljayByZWdpc3RlciBhZGRyZXNzIGFjY2VzcyAqLwotCWF1cC0+ZW5hYmxlID0gKHZvbGF0aWxlIHUzMiAqKWlmbGlzdFtwb3J0X251bV0ubWFjZW5fYWRkcjsKLQlhdXAtPm1hY19pZCA9IHBvcnRfbnVtOwotCWF1X21hY3NbcG9ydF9udW1dID0gYXVwOworICAgICAgICAvKiBTZXR1cCBzb21lIHZhcmlhYmxlcyBmb3IgcXVpY2sgcmVnaXN0ZXIgYWRkcmVzcyBhY2Nlc3MgKi8KKwlhdXAtPmVuYWJsZSA9ICh2b2xhdGlsZSB1MzIgKilpb3JlbWFwX25vY2FjaGUobWFjZW4tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1hY2VuKSk7CisJaWYgKCFhdXAtPmVuYWJsZSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIGlvcmVtYXAgTUFDIGVuYWJsZSByZWdpc3RlclxuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfcmVtYXAyOworCX0KKwlhdXAtPm1hY19pZCA9IHBkZXYtPmlkOwogCi0JaWYgKHBvcnRfbnVtID09IDApIHsKKwlpZiAocGRldi0+aWQgPT0gMCkgewogCQlpZiAocHJvbV9nZXRfZXRoZXJuZXRfYWRkcihldGhhZGRyKSA9PSAwKQogCQkJbWVtY3B5KGF1MTAwMF9tYWNfYWRkciwgZXRoYWRkciwgc2l6ZW9mKGF1MTAwMF9tYWNfYWRkcikpOwogCQllbHNlIHsKQEAgLTExMzksNyArMTA5Miw3IEBACiAJCX0KIAogCQlzZXR1cF9od19yaW5ncyhhdXAsIE1BQzBfUlhfRE1BX0FERFIsIE1BQzBfVFhfRE1BX0FERFIpOwotCX0gZWxzZSBpZiAocG9ydF9udW0gPT0gMSkKKwl9IGVsc2UgaWYgKHBkZXYtPmlkID09IDEpCiAJCXNldHVwX2h3X3JpbmdzKGF1cCwgTUFDMV9SWF9ETUFfQUREUiwgTUFDMV9UWF9ETUFfQUREUik7CiAKIAkvKgpAQCAtMTE0NywxNCArMTEwMCwzNyBAQAogCSAqIHRvIG1hdGNoIHRob3NlIHRoYXQgYXJlIHByaW50ZWQgb24gdGhlaXIgc3RpY2tlcnMKIAkgKi8KIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgYXUxMDAwX21hY19hZGRyLCBzaXplb2YoYXUxMDAwX21hY19hZGRyKSk7Ci0JZGV2LT5kZXZfYWRkcls1XSArPSBwb3J0X251bTsKKwlkZXYtPmRldl9hZGRyWzVdICs9IHBkZXYtPmlkOwogCiAJKmF1cC0+ZW5hYmxlID0gMDsKIAlhdXAtPm1hY19lbmFibGVkID0gMDsKIAorCXBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZCkgeworCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IG5vIHBsYXRmb3JtX2RhdGEgcGFzc2VkLCBQSFkgc2VhcmNoIG9uIE1BQzBcbiIpOworCQlhdXAtPnBoeTFfc2VhcmNoX21hYzAgPSAxOworCX0gZWxzZSB7CisJCWF1cC0+cGh5X3N0YXRpY19jb25maWcgPSBwZC0+cGh5X3N0YXRpY19jb25maWc7CisJCWF1cC0+cGh5X3NlYXJjaF9oaWdoZXN0X2FkZHIgPSBwZC0+cGh5X3NlYXJjaF9oaWdoZXN0X2FkZHI7CisJCWF1cC0+cGh5MV9zZWFyY2hfbWFjMCA9IHBkLT5waHkxX3NlYXJjaF9tYWMwOworCQlhdXAtPnBoeV9hZGRyID0gcGQtPnBoeV9hZGRyOworCQlhdXAtPnBoeV9idXNpZCA9IHBkLT5waHlfYnVzaWQ7CisJCWF1cC0+cGh5X2lycSA9IHBkLT5waHlfaXJxOworCX0KKworCWlmIChhdXAtPnBoeV9idXNpZCAmJiBhdXAtPnBoeV9idXNpZCA+IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IE1BQzAtYXNzb2NpYXRlZCBQSFkgYXR0YWNoZWQgMm5kIE1BQ3MgTUlJIgorCQkJCSJidXMgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9tZGlvYnVzX2FsbG9jOworCX0KKwogCWF1cC0+bWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKLQlpZiAoYXVwLT5taWlfYnVzID09IE5VTEwpCi0JCWdvdG8gZXJyX291dDsKKwlpZiAoYXVwLT5taWlfYnVzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZGlvYnVzIHN0cnVjdHVyZVxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX21kaW9idXNfYWxsb2M7CisJfQogCiAJYXVwLT5taWlfYnVzLT5wcml2ID0gZGV2OwogCWF1cC0+bWlpX2J1cy0+cmVhZCA9IGF1MTAwMF9tZGlvYnVzX3JlYWQ7CkBAIC0xMTY4LDI0ICsxMTQ0LDIwIEBACiAKIAlmb3IoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7ICsraSkKIAkJYXVwLT5taWlfYnVzLT5pcnFbaV0gPSBQSFlfUE9MTDsKLQogCS8qIGlmIGtub3duLCBzZXQgY29ycmVzcG9uZGluZyBQSFkgSVJRcyAqLwotI2lmIGRlZmluZWQoQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHKQotIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkwX0lSUSkKLQlpZiAoQVUxWFhYX1BIWTBfQlVTSUQgPT0gYXVwLT5tYWNfaWQpCi0JCWF1cC0+bWlpX2J1cy0+aXJxW0FVMVhYWF9QSFkwX0FERFJdID0gQVUxWFhYX1BIWTBfSVJROwotIyBlbmRpZgotIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkxX0lSUSkKLQlpZiAoQVUxWFhYX1BIWTFfQlVTSUQgPT0gYXVwLT5tYWNfaWQpCi0JCWF1cC0+bWlpX2J1cy0+aXJxW0FVMVhYWF9QSFkxX0FERFJdID0gQVUxWFhYX1BIWTFfSVJROwotIyBlbmRpZgotI2VuZGlmCi0JbWRpb2J1c19yZWdpc3RlcihhdXAtPm1paV9idXMpOworCWlmIChhdXAtPnBoeV9zdGF0aWNfY29uZmlnKQorCQlpZiAoYXVwLT5waHlfaXJxICYmIGF1cC0+cGh5X2J1c2lkID09IGF1cC0+bWFjX2lkKQorCQkJYXVwLT5taWlfYnVzLT5pcnFbYXVwLT5waHlfYWRkcl0gPSBhdXAtPnBoeV9pcnE7CiAKLQlpZiAobWlpX3Byb2JlKGRldikgIT0gMCkgewotCQlnb3RvIGVycl9vdXQ7CisJZXJyID0gbWRpb2J1c19yZWdpc3RlcihhdXAtPm1paV9idXMpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIgZmFpbGVkIHRvIHJlZ2lzdGVyIE1ESU8gYnVzXG4iKTsKKwkJZ290byBlcnJfbWRpb2J1c19yZWc7CiAJfQogCisJaWYgKG1paV9wcm9iZShkZXYpICE9IDApCisJCWdvdG8gZXJyX291dDsKKwogCXBEQmZyZWUgPSBOVUxMOwogCS8qIHNldHVwIHRoZSBkYXRhIGJ1ZmZlciBkZXNjcmlwdG9ycyBhbmQgYXR0YWNoIGEgYnVmZmVyIHRvIGVhY2ggb25lICovCiAJcERCID0gYXVwLT5kYjsKQEAgLTEyMTYsMTkgKzExODgsMzUgQEAKIAkJYXVwLT50eF9kYl9pbnVzZVtpXSA9IHBEQjsKIAl9CiAKKwlkZXYtPmJhc2VfYWRkciA9IGJhc2UtPnN0YXJ0OworCWRldi0+aXJxID0gaXJxOworCWRldi0+bmV0ZGV2X29wcyA9ICZhdTEwMDBfbmV0ZGV2X29wczsKKwlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmYXUxMDAwX2V0aHRvb2xfb3BzKTsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gRVRIX1RYX1RJTUVPVVQ7CisKIAkvKgogCSAqIFRoZSBib290IGNvZGUgdXNlcyB0aGUgZXRoZXJuZXQgY29udHJvbGxlciwgc28gcmVzZXQgaXQgdG8gc3RhcnQKIAkgKiBmcmVzaC4gIGF1MTAwMF9pbml0KCkgZXhwZWN0cyB0aGF0IHRoZSBkZXZpY2UgaXMgaW4gcmVzZXQgc3RhdGUuCiAJICovCiAJcmVzZXRfbWFjKGRldik7CiAKLQlyZXR1cm4gZGV2OworCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLlxuIiwKKwkJCQkJZGV2LT5uYW1lKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXByaW50aygiJXM6IEF1MXh4MCBFdGhlcm5ldCBmb3VuZCBhdCAweCVseCwgaXJxICVkXG4iLAorCQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyliYXNlLT5zdGFydCwgaXJxKTsKKwlpZiAodmVyc2lvbl9wcmludGVkKysgPT0gMCkKKwkJcHJpbnRrKCIlcyB2ZXJzaW9uICVzICVzXG4iLCBEUlZfTkFNRSwgRFJWX1ZFUlNJT04sIERSVl9BVVRIT1IpOworCisJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0JaWYgKGF1cC0+bWlpX2J1cyAhPSBOVUxMKSB7CisJaWYgKGF1cC0+bWlpX2J1cyAhPSBOVUxMKQogCQltZGlvYnVzX3VucmVnaXN0ZXIoYXVwLT5taWlfYnVzKTsKLQkJbWRpb2J1c19mcmVlKGF1cC0+bWlpX2J1cyk7Ci0JfQogCiAJLyogaGVyZSB3ZSBzaG91bGQgaGF2ZSBhIHZhbGlkIGRldiBwbHVzIGF1cC0+IHJlZ2lzdGVyIGFkZHJlc3NlcwogCSAqIHNvIHdlIGNhbiByZXNldCB0aGUgbWFjIHByb3Blcmx5LiovCkBAIC0xMjQyLDY3ICsxMjMwLDg0IEBACiAJCWlmIChhdXAtPnR4X2RiX2ludXNlW2ldKQogCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtpXSk7CiAJfQorZXJyX21kaW9idXNfcmVnOgorCW1kaW9idXNfZnJlZShhdXAtPm1paV9idXMpOworZXJyX21kaW9idXNfYWxsb2M6CisJaW91bm1hcChhdXAtPmVuYWJsZSk7CitlcnJfcmVtYXAyOgorCWlvdW5tYXAoYXVwLT5tYWMpOworZXJyX3JlbWFwMToKIAlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKiAoTlVNX1RYX0JVRkZTICsgTlVNX1JYX0JVRkZTKSwKIAkJCSAgICAgKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKLQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworZXJyX3ZhZGRyOgogCWZyZWVfbmV0ZGV2KGRldik7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKCBiYXNlLCBNQUNfSU9TSVpFKTsKLQlyZWxlYXNlX21lbV9yZWdpb24obWFjZW4sIDQpOwotCXJldHVybiBOVUxMOworZXJyX2FsbG9jOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtYWNlbi0+c3RhcnQsIHJlc291cmNlX3NpemUobWFjZW4pKTsKK2Vycl9yZXF1ZXN0OgorCXJlbGVhc2VfbWVtX3JlZ2lvbihiYXNlLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShiYXNlKSk7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAotLyoKLSAqIFNldHVwIHRoZSBiYXNlIGFkZHJlc3MgYW5kIGludGVycnVwdCBvZiB0aGUgQXUxeHh4IGV0aGVybmV0IG1hY3MKLSAqIGJhc2VkIG9uIGNwdSB0eXBlIGFuZCB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZCBpbiBzeXNfcGluZnVuYwotICogcmVnaXN0ZXIuIFRoZSBsYXN0IGludGVyZmFjZSBpcyBlbmFibGVkIGlmIFNZU19QRl9OSTIgKGJpdCA0KSBpcyAwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGF1MTAwMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpbnQgbmkgPSAoaW50KSgoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMikoU1lTX1BGX05JMikpID4+IDQpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JaW50IGksIGZvdW5kX29uZSA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmJhc2UsICptYWNlbjsKIAotCW51bV9pZnMgPSBOVU1fRVRIX0lOVEVSRkFDRVMgLSBuaTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAotCWZvcihpID0gMDsgaSA8IG51bV9pZnM7IGkrKykgewotCQlkZXYgPSBhdTEwMDBfcHJvYmUoaSk7Ci0JCWlmbGlzdFtpXS5kZXYgPSBkZXY7Ci0JCWlmIChkZXYpCi0JCQlmb3VuZF9vbmUrKzsKLQl9Ci0JaWYgKCFmb3VuZF9vbmUpCi0JCXJldHVybiAtRU5PREVWOworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJbWRpb2J1c191bnJlZ2lzdGVyKGF1cC0+bWlpX2J1cyk7CisJbWRpb2J1c19mcmVlKGF1cC0+bWlpX2J1cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0RNQTsgaSsrKQorCQlpZiAoYXVwLT5yeF9kYl9pbnVzZVtpXSkKKwkJCVJlbGVhc2VEQihhdXAsIGF1cC0+cnhfZGJfaW51c2VbaV0pOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9UWF9ETUE7IGkrKykKKwkJaWYgKGF1cC0+dHhfZGJfaW51c2VbaV0pCisJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnR4X2RiX2ludXNlW2ldKTsKKworCWRtYV9mcmVlX25vbmNvaGVyZW50KE5VTEwsIE1BWF9CVUZfU0laRSAqCisJCQkoTlVNX1RYX0JVRkZTICsgTlVNX1JYX0JVRkZTKSwKKwkJCSh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7CisKKwlpb3VubWFwKGF1cC0+bWFjKTsKKwlpb3VubWFwKGF1cC0+ZW5hYmxlKTsKKworCWJhc2UgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihiYXNlLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShiYXNlKSk7CisKKwltYWNlbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1hY2VuLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtYWNlbikpOworCisJZnJlZV9uZXRkZXYoZGV2KTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXUxMDAwX2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JaW50IGksIGo7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cDsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MTAwMF9ldGhfZHJpdmVyID0geworCS5wcm9iZSAgPSBhdTEwMDBfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGF1MTAwMF9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lICAgPSAiYXUxMDAwLWV0aCIsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YXUxMDAwLWV0aCIpOwogCi0JZm9yIChpID0gMDsgaSA8IG51bV9pZnM7IGkrKykgewotCQlkZXYgPSBpZmxpc3RbaV0uZGV2OwotCQlpZiAoZGV2KSB7Ci0JCQlhdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQkJCW1kaW9idXNfdW5yZWdpc3RlcihhdXAtPm1paV9idXMpOwotCQkJbWRpb2J1c19mcmVlKGF1cC0+bWlpX2J1cyk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgTlVNX1JYX0RNQTsgaisrKQotCQkJCWlmIChhdXAtPnJ4X2RiX2ludXNlW2pdKQotCQkJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnJ4X2RiX2ludXNlW2pdKTsKLQkJCWZvciAoaiA9IDA7IGogPCBOVU1fVFhfRE1BOyBqKyspCi0JCQkJaWYgKGF1cC0+dHhfZGJfaW51c2Vbal0pCi0JCQkJCVJlbGVhc2VEQihhdXAsIGF1cC0+dHhfZGJfaW51c2Vbal0pOwotCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICoKLQkJCQkJICAgICAoTlVNX1RYX0JVRkZTICsgTlVNX1JYX0JVRkZTKSwKLQkJCQkJICAgICAodm9pZCAqKWF1cC0+dmFkZHIsIGF1cC0+ZG1hX2FkZHIpOwotCQkJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBNQUNfSU9TSVpFKTsKLQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihDUEhZU0FERFIoaWZsaXN0W2ldLm1hY2VuX2FkZHIpLCA0KTsKLQkJCWZyZWVfbmV0ZGV2KGRldik7Ci0JCX0KLQl9CisKK3N0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTAwMF9ldGhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF1MTAwMF9leGl0X21vZHVsZSh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTEwMDBfZXRoX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MTAwMF9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChhdTEwMDBfY2xlYW51cF9tb2R1bGUpOworbW9kdWxlX2V4aXQoYXUxMDAwX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaCBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaAppbmRleCA4MjRlY2Q1Li5mOWQyOWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oCkBAIC0xMDgsNiArMTA4LDE1IEBACiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXY7CiAJc3RydWN0IG1paV9idXMgKm1paV9idXM7CiAKKwkvKiBQSFkgY29uZmlndXJhdGlvbiAqLworCWludCBwaHlfc3RhdGljX2NvbmZpZzsKKwlpbnQgcGh5X3NlYXJjaF9oaWdoZXN0X2FkZHI7CisJaW50IHBoeTFfc2VhcmNoX21hYzA7CisKKwlpbnQgcGh5X2FkZHI7CisJaW50IHBoeV9idXNpZDsKKwlpbnQgcGh5X2lycTsKKwogCS8qIFRoZXNlIHZhcmlhYmxlcyBhcmUganVzdCBmb3IgcXVpY2sgYWNjZXNzIHRvIGNlcnRhaW4gcmVncyBhZGRyZXNzZXMuICovCiAJdm9sYXRpbGUgbWFjX3JlZ190ICptYWM7ICAvKiBtYWMgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICovCiAJdm9sYXRpbGUgdTMyICplbmFibGU7ICAgICAvKiBhZGRyZXNzIG9mIE1BQyBFbmFibGUgUmVnaXN0ZXIgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcG1hYy5jIGIvZHJpdmVycy9uZXQvY3BtYWMuYwppbmRleCA4ZDBiZTI2Li5iZjIwNzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jcG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NwbWFjLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9waHlfZml4ZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCkBAIC0yOTQsOSArMjk1LDE2IEBACiAKIHN0YXRpYyBpbnQgY3BtYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogeworCXN0cnVjdCBjbGsgKmNwbWFjX2NsazsKKworCWNwbWFjX2NsayA9IGNsa19nZXQoJmJ1cy0+ZGV2LCAiY3BtYWMiKTsKKwlpZiAoSVNfRVJSKGNwbWFjX2NsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ2V0IGNwbWFjIGNsb2NrXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAlhcjdfZGV2aWNlX3Jlc2V0KEFSN19SRVNFVF9CSVRfTURJTyk7CiAJY3BtYWNfd3JpdGUoYnVzLT5wcml2LCBDUE1BQ19NRElPX0NPTlRST0wsIE1ESU9DX0VOQUJMRSB8Ci0JCSAgICBNRElPQ19DTEtESVYoYXI3X2NwbWFjX2ZyZXEoKSAvIDIyMDAwMDAgLSAxKSk7CisJCSAgICBNRElPQ19DTEtESVYoY2xrX2dldF9yYXRlKGNwbWFjX2NsaykgLyAyMjAwMDAwIC0gMSkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2F1MWtfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jCmluZGV4IDliMmVlYmQuLmI1Y2JkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL3BiMTAwMC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQogI2luY2x1ZGUgPGFzbS9kYjF4MDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgogI2Vsc2UgCiAjZXJyb3IgYXUxa19pcjogdW5zdXBwb3J0ZWQgYm9hcmQKICNlbmRpZgpAQCAtNjYsMTAgKzY3LDYgQEAKIAogI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCi1zdGF0aWMgQkNTUiAqIGNvbnN0IGJjc3IgPSAoQkNTUiAqKTB4QUUwMDAwMDA7Ci0jZW5kaWYKLQogc3RhdGljIERFRklORV9TUElOTE9DSyhpcl9sb2NrKTsKIAogLyoKQEAgLTI4Miw5ICsyNzksOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQogCS8qIHBvd2VyIG9uICovCi0JYmNzci0+cmVzZXRzICY9IH5CQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSzsKLQliY3NyLT5yZXNldHMgfD0gQkNTUl9SRVNFVFNfSVJEQV9NT0RFX0ZVTEw7Ci0JYXVfc3luYygpOworCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSywKKwkJCSAgICAgIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9GVUxMKTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CkBAIC03MjAsMTQgKzcxNiwxNCBAQAogCiAJaWYgKHNwZWVkID09IDQwMDAwMDApIHsKICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCi0JCWJjc3ItPnJlc2V0cyB8PSBCQ1NSX1JFU0VUU19GSVJfU0VMOworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgMCwgQkNTUl9SRVNFVFNfRklSX1NFTCk7CiAjZWxzZSAvKiBQYjEwMDAgYW5kIFBiMTEwMCAqLwogCQl3cml0ZWwoMTw8MTMsIENQTERfQVVYMSk7CiAjZW5kaWYKIAl9CiAJZWxzZSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQotCQliY3NyLT5yZXNldHMgJj0gfkJDU1JfUkVTRVRTX0ZJUl9TRUw7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19GSVJfU0VMLCAwKTsKICNlbHNlIC8qIFBiMTAwMCBhbmQgUGIxMTAwICovCiAJCXdyaXRlbChyZWFkbChDUExEX0FVWDEpICYgfigxPDwxMyksIENQTERfQVVYMSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2UuYyBiL2RyaXZlcnMvbmV0L21hY2UuYwppbmRleCBkOWZiYWQzLi40M2FlYTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjZS5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJbXAtPnBvcnRfYWF1aSA9IHBvcnRfYWF1aTsKIAllbHNlIHsKIAkJLyogQXBwbGUgTmV0d29yayBTZXJ2ZXIgdXNlcyB0aGUgQUFVSSBwb3J0ICovCi0JCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsU2hpbmVyRVNCIikpCisJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsU2hpbmVyRVNCIikpCiAJCQltcC0+cG9ydF9hYXVpID0gMTsKIAkJZWxzZSB7CiAjaWZkZWYgQ09ORklHX01BQ0VfQUFVSV9QT1JUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNtYWNlLmMgYi9kcml2ZXJzL25ldC9tYWNtYWNlLmMKaW5kZXggNDRmM2MyOC4uNzk0MDhjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjbWFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L21hY21hY2UuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIm1hY2UuaCIKIAogc3RhdGljIGNoYXIgbWFjX21hY2Vfc3RyaW5nW10gPSAibWFjbWFjZSI7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFjX21hY2VfZGV2aWNlOwogCiAjZGVmaW5lIE5fVFhfQlVGRl9PUkRFUgkwCiAjZGVmaW5lIE5fVFhfUklORwkoMSA8PCBOX1RYX0JVRkZfT1JERVIpCkBAIC03NTIsNiArNzUxLDcgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYWNpbnRvc2ggTUFDRSBldGhlcm5ldCBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bWFjbWFjZSIpOwogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYWNfbWFjZV9kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtNzc3LDQ3ICs3NzcsMjIgQEAKIAkucHJvYmUgID0gbWFjZV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AobWFjX21hY2VfZGV2aWNlX3JlbW92ZSksCiAJLmRyaXZlcgk9IHsKLQkJLm5hbWUgPSBtYWNfbWFjZV9zdHJpbmcsCisJCS5uYW1lCT0gbWFjX21hY2Vfc3RyaW5nLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjX21hY2VfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlpbnQgZXJyOwotCiAJaWYgKCFNQUNIX0lTX01BQykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWFjX21hY2VfZHJpdmVyKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJEcml2ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbWFjX21hY2VfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG1hY19tYWNlX3N0cmluZywgMCk7Ci0JaWYgKCFtYWNfbWFjZV9kZXZpY2UpCi0JCWdvdG8gb3V0X3VucmVnaXN0ZXI7Ci0KLQlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZChtYWNfbWFjZV9kZXZpY2UpKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQobWFjX21hY2VfZGV2aWNlKTsKLQkJbWFjX21hY2VfZGV2aWNlID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X3VucmVnaXN0ZXI6Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19tYWNlX2RyaXZlcik7Ci0KLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYWNfbWFjZV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWFjX21hY2VfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWFjX21hY2VfZHJpdmVyKTsKLQotCWlmIChtYWNfbWFjZV9kZXZpY2UpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWFjX21hY2VfZGV2aWNlKTsKLQkJbWFjX21hY2VfZGV2aWNlID0gTlVMTDsKLQl9CiB9CiAKIG1vZHVsZV9pbml0KG1hY19tYWNlX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCmluZGV4IDg3NWQzNjEuLjI0MTA5YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwpAQCAtNjIsNyArNjIsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNfdmlhLmg+CiAKIHN0YXRpYyBjaGFyIG1hY19zb25pY19zdHJpbmdbXSA9ICJtYWNzb25pYyI7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFjX3NvbmljX2RldmljZTsKIAogI2luY2x1ZGUgInNvbmljLmgiCiAKQEAgLTYwNyw2ICs2MDYsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYWNpbnRvc2ggU09OSUMgZXRoZXJuZXQgZHJpdmVyIik7CiBtb2R1bGVfcGFyYW0oc29uaWNfZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNvbmljX2RlYnVnLCAibWFjc29uaWMgZGVidWcgbGV2ZWwgKDEtNCkiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bWFjc29uaWMiKTsKIAogI2luY2x1ZGUgInNvbmljLmMiCiAKQEAgLTYyNyw0NCArNjI3LDE5IEBACiAJLnByb2JlICA9IG1hY19zb25pY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AobWFjX3NvbmljX2RldmljZV9yZW1vdmUpLAogCS5kcml2ZXIJPSB7Ci0JCS5uYW1lID0gbWFjX3NvbmljX3N0cmluZywKKwkJLm5hbWUJPSBtYWNfc29uaWNfc3RyaW5nLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjX3NvbmljX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JaW50IGVycjsKLQotCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJEcml2ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbWFjX3NvbmljX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhtYWNfc29uaWNfc3RyaW5nLCAwKTsKLQlpZiAoIW1hY19zb25pY19kZXZpY2UpCi0JCWdvdG8gb3V0X3VucmVnaXN0ZXI7Ci0KLQlpZiAocGxhdGZvcm1fZGV2aWNlX2FkZChtYWNfc29uaWNfZGV2aWNlKSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG1hY19zb25pY19kZXZpY2UpOwotCQltYWNfc29uaWNfZGV2aWNlID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X3VucmVnaXN0ZXI6Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpOwotCi0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYWNfc29uaWNfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcik7Ci0KLQlpZiAobWFjX3NvbmljX2RldmljZSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtYWNfc29uaWNfZGV2aWNlKTsKLQkJbWFjX3NvbmljX2RldmljZSA9IE5VTEw7Ci0JfQogfQogCiBtb2R1bGVfaW5pdChtYWNfc29uaWNfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCA2ZGQ0ODZkLi5hYTU3Y2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwpAQCAtNDUzLDggKzQ1Myw3IEBACiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKICAgICBsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0KLQlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CisgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDg7CkBAIC02NTIsOCArNjUxLDcgQEAKIAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwogICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0gICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPQotCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOworICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDY0OwogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvS2NvbmZpZyBiL2RyaXZlcnMvb2YvS2NvbmZpZwppbmRleCBkMmZhMjdjLi43Y2VjYzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL0tjb25maWcKKysrIGIvZHJpdmVycy9vZi9LY29uZmlnCkBAIC0xLDMgKzEsMTEgQEAKK2NvbmZpZyBPRl9GTEFUVFJFRQorCWJvb2wKKwlkZXBlbmRzIG9uIE9GCisKK2NvbmZpZyBPRl9EWU5BTUlDCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gT0YgJiYgUFBDX09GCisKIGNvbmZpZyBPRl9ERVZJQ0UKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBPRiAmJiAoU1BBUkMgfHwgUFBDX09GIHx8IE1JQ1JPQkxBWkUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL01ha2VmaWxlIGIvZHJpdmVycy9vZi9NYWtlZmlsZQppbmRleCBiZGZiNWY1Li5mMjMyY2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvb2YvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiBvYmoteSA9IGJhc2Uubworb2JqLSQoQ09ORklHX09GX0ZMQVRUUkVFKSArPSBmZHQubwogb2JqLSQoQ09ORklHX09GX0RFVklDRSkgKz0gZGV2aWNlLm8gcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX09GX0dQSU8pICAgKz0gZ3Bpby5vCiBvYmotJChDT05GSUdfT0ZfSTJDKQkrPSBvZl9pMmMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNlLmMgYi9kcml2ZXJzL29mL2Jhc2UuYwppbmRleCBlNjYyN2IyLi5jYjk2ODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2Jhc2UuYworKysgYi9kcml2ZXJzL29mL2Jhc2UuYwpAQCAtMjAsOCArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOworc3RydWN0IGRldmljZV9ub2RlICpvZl9jaG9zZW47CiAKIC8qIHVzZSB3aGVuIHRyYXZlcnNpbmcgdHJlZSB0aHJvdWdoIHRoZSBhbGxuZXh0LCBjaGlsZCwgc2libGluZywKICAqIG9yIHBhcmVudCBtZW1iZXJzIG9mIHN0cnVjdCBkZXZpY2Vfbm9kZS4KQEAgLTM3LDcgKzM5LDcgQEAKIAkJCW5wID0gbnAtPnBhcmVudDsKIAkJaXAgPSBvZl9nZXRfcHJvcGVydHkobnAsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOwogCQlpZiAoaXApCi0JCQlyZXR1cm4gKmlwOworCQkJcmV0dXJuIGJlMzJfdG9fY3B1cChpcCk7CiAJfSB3aGlsZSAobnAtPnBhcmVudCk7CiAJLyogTm8gI2FkZHJlc3MtY2VsbHMgcHJvcGVydHkgZm9yIHRoZSByb290IG5vZGUgKi8KIAlyZXR1cm4gT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVDsKQEAgLTUzLDEzICs1NSw4OCBAQAogCQkJbnAgPSBucC0+cGFyZW50OwogCQlpcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIiNzaXplLWNlbGxzIiwgTlVMTCk7CiAJCWlmIChpcCkKLQkJCXJldHVybiAqaXA7CisJCQlyZXR1cm4gYmUzMl90b19jcHVwKGlwKTsKIAl9IHdoaWxlIChucC0+cGFyZW50KTsKIAkvKiBObyAjc2l6ZS1jZWxscyBwcm9wZXJ0eSBmb3IgdGhlIHJvb3Qgbm9kZSAqLwogCXJldHVybiBPRl9ST09UX05PREVfU0laRV9DRUxMU19ERUZBVUxUOwogfQogRVhQT1JUX1NZTUJPTChvZl9uX3NpemVfY2VsbHMpOwogCisjaWYgIWRlZmluZWQoQ09ORklHX1NQQVJDKSAgIC8qIFNQQVJDIGRvZXNuJ3QgZG8gcmVmIGNvdW50aW5nICh5ZXQpICovCisvKioKKyAqCW9mX25vZGVfZ2V0IC0gSW5jcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQorICoJQG5vZGU6CU5vZGUgdG8gaW5jIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bworICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycworICoKKyAqCVJldHVybnMgbm9kZS4KKyAqLworc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJaWYgKG5vZGUpCisJCWtyZWZfZ2V0KCZub2RlLT5rcmVmKTsKKwlyZXR1cm4gbm9kZTsKK30KK0VYUE9SVF9TWU1CT0wob2Zfbm9kZV9nZXQpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqa3JlZl90b19kZXZpY2Vfbm9kZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkZXZpY2Vfbm9kZSwga3JlZik7Cit9CisKKy8qKgorICoJb2Zfbm9kZV9yZWxlYXNlIC0gcmVsZWFzZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBub2RlCisgKglAa3JlZjogIGtyZWYgZWxlbWVudCBvZiB0aGUgbm9kZSB0byBiZSByZWxlYXNlZAorICoKKyAqCUluIG9mX25vZGVfcHV0KCkgdGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQgdG8ga3JlZl9wdXQoKQorICoJYXMgdGhlIGRlc3RydWN0b3IuCisgKi8KK3N0YXRpYyB2b2lkIG9mX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBrcmVmX3RvX2RldmljZV9ub2RlKGtyZWYpOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9IG5vZGUtPnByb3BlcnRpZXM7CisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgcmVsZWFzaW5nIG5vZGVzIHRoYXQgaGF2ZW4ndCBiZWVuIGRldGFjaGVkLiAqLworCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RFVEFDSEVEKSkgeworCQlwcl9lcnIoIkVSUk9SOiBCYWQgb2Zfbm9kZV9wdXQoKSBvbiAlc1xuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJZHVtcF9zdGFjaygpOworCQlrcmVmX2luaXQoJm5vZGUtPmtyZWYpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfRFlOQU1JQykpCisJCXJldHVybjsKKworCXdoaWxlIChwcm9wKSB7CisJCXN0cnVjdCBwcm9wZXJ0eSAqbmV4dCA9IHByb3AtPm5leHQ7CisJCWtmcmVlKHByb3AtPm5hbWUpOworCQlrZnJlZShwcm9wLT52YWx1ZSk7CisJCWtmcmVlKHByb3ApOworCQlwcm9wID0gbmV4dDsKKworCQlpZiAoIXByb3ApIHsKKwkJCXByb3AgPSBub2RlLT5kZWFkcHJvcHM7CisJCQlub2RlLT5kZWFkcHJvcHMgPSBOVUxMOworCQl9CisJfQorCWtmcmVlKG5vZGUtPmZ1bGxfbmFtZSk7CisJa2ZyZWUobm9kZS0+ZGF0YSk7CisJa2ZyZWUobm9kZSk7Cit9CisKKy8qKgorICoJb2Zfbm9kZV9wdXQgLSBEZWNyZW1lbnQgcmVmY291bnQgb2YgYSBub2RlCisgKglAbm9kZToJTm9kZSB0byBkZWMgcmVmY291bnQsIE5VTEwgaXMgc3VwcG9ydGVkIHRvCisgKgkJc2ltcGxpZnkgd3JpdGluZyBvZiBjYWxsZXJzCisgKgorICovCit2b2lkIG9mX25vZGVfcHV0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlpZiAobm9kZSkKKwkJa3JlZl9wdXQoJm5vZGUtPmtyZWYsIG9mX25vZGVfcmVsZWFzZSk7Cit9CitFWFBPUlRfU1lNQk9MKG9mX25vZGVfcHV0KTsKKyNlbmRpZiAvKiAhQ09ORklHX1NQQVJDICovCisKIHN0cnVjdCBwcm9wZXJ0eSAqb2ZfZmluZF9wcm9wZXJ0eShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgIGludCAqbGVucCkKQEAgLTE0NCw2ICsyMjEsMjcgQEAKIEVYUE9SVF9TWU1CT0wob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUpOwogCiAvKioKKyAqIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSAtIFRlc3Qgcm9vdCBvZiBkZXZpY2UgdHJlZSBmb3IgYSBnaXZlbiBjb21wYXRpYmxlIHZhbHVlCisgKiBAY29tcGF0OiBjb21wYXRpYmxlIHN0cmluZyB0byBsb29rIGZvciBpbiByb290IG5vZGUncyBjb21wYXRpYmxlIHByb3BlcnR5LgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCBub2RlIGhhcyB0aGUgZ2l2ZW4gdmFsdWUgaW4gaXRzCisgKiBjb21wYXRpYmxlIHByb3BlcnR5LgorICovCitpbnQgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKGNvbnN0IGNoYXIgKmNvbXBhdCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7CisJaW50IHJjID0gMDsKKworCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOworCWlmIChyb290KSB7CisJCXJjID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocm9vdCwgY29tcGF0KTsKKwkJb2Zfbm9kZV9wdXQocm9vdCk7CisJfQorCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0wob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKTsKKworLyoqCiAgKiAgb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZSAtIGNoZWNrIGlmIGEgZGV2aWNlIGlzIGF2YWlsYWJsZSBmb3IgdXNlCiAgKgogICogIEBkZXZpY2U6IE5vZGUgdG8gY2hlY2sgZm9yIGF2YWlsYWJpbGl0eQpAQCAtNTE5LDYgKzYxNywyNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwob2ZfbW9kYWxpYXNfbm9kZSk7CiAKIC8qKgorICogb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUgLSBGaW5kIGEgbm9kZSBnaXZlbiBhIHBoYW5kbGUKKyAqIEBoYW5kbGU6CXBoYW5kbGUgb2YgdGhlIG5vZGUgdG8gZmluZAorICoKKyAqIFJldHVybnMgYSBub2RlIHBvaW50ZXIgd2l0aCByZWZjb3VudCBpbmNyZW1lbnRlZCwgdXNlCisgKiBvZl9ub2RlX3B1dCgpIG9uIGl0IHdoZW4gZG9uZS4KKyAqLworc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfcGhhbmRsZShwaGFuZGxlIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJcmVhZF9sb2NrKCZkZXZ0cmVlX2xvY2spOworCWZvciAobnAgPSBhbGxub2RlczsgbnA7IG5wID0gbnAtPmFsbG5leHQpCisJCWlmIChucC0+cGhhbmRsZSA9PSBoYW5kbGUpCisJCQlicmVhazsKKwlvZl9ub2RlX2dldChucCk7CisJcmVhZF91bmxvY2soJmRldnRyZWVfbG9jayk7CisJcmV0dXJuIG5wOworfQorRVhQT1JUX1NZTUJPTChvZl9maW5kX25vZGVfYnlfcGhhbmRsZSk7CisKKy8qKgogICogb2ZfcGFyc2VfcGhhbmRsZSAtIFJlc29sdmUgYSBwaGFuZGxlIHByb3BlcnR5IHRvIGEgZGV2aWNlX25vZGUgcG9pbnRlcgogICogQG5wOiBQb2ludGVyIHRvIGRldmljZSBub2RlIGhvbGRpbmcgcGhhbmRsZSBwcm9wZXJ0eQogICogQHBoYW5kbGVfbmFtZTogTmFtZSBvZiBwcm9wZXJ0eSBob2xkaW5nIGEgcGhhbmRsZSB2YWx1ZQpAQCAtNTc4LDggKzY5Nyw4IEBACiAJCQkJY29uc3Qgdm9pZCAqKm91dF9hcmdzKQogewogCWludCByZXQgPSAtRUlOVkFMOwotCWNvbnN0IHUzMiAqbGlzdDsKLQljb25zdCB1MzIgKmxpc3RfZW5kOworCWNvbnN0IF9fYmUzMiAqbGlzdDsKKwljb25zdCBfX2JlMzIgKmxpc3RfZW5kOwogCWludCBzaXplOwogCWludCBjdXJfaW5kZXggPSAwOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IE5VTEw7CkBAIC01OTMsNyArNzEyLDcgQEAKIAlsaXN0X2VuZCA9IGxpc3QgKyBzaXplIC8gc2l6ZW9mKCpsaXN0KTsKIAogCXdoaWxlIChsaXN0IDwgbGlzdF9lbmQpIHsKLQkJY29uc3QgdTMyICpjZWxsczsKKwkJY29uc3QgX19iZTMyICpjZWxsczsKIAkJY29uc3QgcGhhbmRsZSAqcGhhbmRsZTsKIAogCQlwaGFuZGxlID0gbGlzdCsrOwpAQCAtNjE3LDcgKzczNiw3IEBACiAJCQlnb3RvIGVycjE7CiAJCX0KIAotCQlsaXN0ICs9ICpjZWxsczsKKwkJbGlzdCArPSBiZTMyX3RvX2NwdXAoY2VsbHMpOwogCQlpZiAobGlzdCA+IGxpc3RfZW5kKSB7CiAJCQlwcl9kZWJ1ZygiJXM6IGluc3VmZmljaWVudCBhcmd1bWVudHMgbGVuZ3RoXG4iLAogCQkJCSBucC0+ZnVsbF9uYW1lKTsKQEAgLTY1OCwzICs3NzcsMTkwIEBACiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wob2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKTsKKworLyoqCisgKiBwcm9tX2FkZF9wcm9wZXJ0eSAtIEFkZCBhIHByb3BlcnR5IHRvIGEgbm9kZQorICovCitpbnQgcHJvbV9hZGRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByb3AtPm5leHQgPSBOVUxMOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbmV4dCA9ICZucC0+cHJvcGVydGllczsKKwl3aGlsZSAoKm5leHQpIHsKKwkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAoKm5leHQpLT5uYW1lKSA9PSAwKSB7CisJCQkvKiBkdXBsaWNhdGUgISBkb24ndCBpbnNlcnQgaXQgKi8KKwkJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQluZXh0ID0gJigqbmV4dCktPm5leHQ7CisJfQorCSpuZXh0ID0gcHJvcDsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCisJLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCisJaWYgKG5wLT5wZGUpCisJCXByb2NfZGV2aWNlX3RyZWVfYWRkX3Byb3AobnAtPnBkZSwgcHJvcCk7CisjZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHJvbV9yZW1vdmVfcHJvcGVydHkgLSBSZW1vdmUgYSBwcm9wZXJ0eSBmcm9tIGEgbm9kZS4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgcmVtb3ZlIGl0LCBzaW5jZSB3ZSBoYXZlIGdpdmVuIG91dAorICogd2hvLWtub3dzLWhvdy1tYW55IHBvaW50ZXJzIHRvIHRoZSBkYXRhIHVzaW5nIGdldC1wcm9wZXJ0eS4KKyAqIEluc3RlYWQgd2UganVzdCBtb3ZlIHRoZSBwcm9wZXJ0eSB0byB0aGUgImRlYWQgcHJvcGVydGllcyIKKyAqIGxpc3QsIHNvIGl0IHdvbid0IGJlIGZvdW5kIGFueSBtb3JlLgorICovCitpbnQgcHJvbV9yZW1vdmVfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZm91bmQgPSAwOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKwluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOworCXdoaWxlICgqbmV4dCkgeworCQlpZiAoKm5leHQgPT0gcHJvcCkgeworCQkJLyogZm91bmQgdGhlIG5vZGUgKi8KKwkJCSpuZXh0ID0gcHJvcC0+bmV4dDsKKwkJCXByb3AtPm5leHQgPSBucC0+ZGVhZHByb3BzOworCQkJbnAtPmRlYWRwcm9wcyA9IHByb3A7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQluZXh0ID0gJigqbmV4dCktPm5leHQ7CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKworCWlmICghZm91bmQpCisJCXJldHVybiAtRU5PREVWOworCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQorCS8qIHRyeSB0byByZW1vdmUgdGhlIHByb2Mgbm9kZSBhcyB3ZWxsICovCisJaWYgKG5wLT5wZGUpCisJCXByb2NfZGV2aWNlX3RyZWVfcmVtb3ZlX3Byb3AobnAtPnBkZSwgcHJvcCk7CisjZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwcm9tX3VwZGF0ZV9wcm9wZXJ0eSAtIFVwZGF0ZSBhIHByb3BlcnR5IGluIGEgbm9kZS4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgcmVtb3ZlIGl0LCBzaW5jZSB3ZSBoYXZlIGdpdmVuIG91dAorICogd2hvLWtub3dzLWhvdy1tYW55IHBvaW50ZXJzIHRvIHRoZSBkYXRhIHVzaW5nIGdldC1wcm9wZXJ0eS4KKyAqIEluc3RlYWQgd2UganVzdCBtb3ZlIHRoZSBwcm9wZXJ0eSB0byB0aGUgImRlYWQgcHJvcGVydGllcyIgbGlzdCwKKyAqIGFuZCBhZGQgdGhlIG5ldyBwcm9wZXJ0eSB0byB0aGUgcHJvcGVydHkgbGlzdAorICovCitpbnQgcHJvbV91cGRhdGVfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCSBzdHJ1Y3QgcHJvcGVydHkgKm5ld3Byb3AsCisJCQkgc3RydWN0IHByb3BlcnR5ICpvbGRwcm9wKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZm91bmQgPSAwOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKwluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOworCXdoaWxlICgqbmV4dCkgeworCQlpZiAoKm5leHQgPT0gb2xkcHJvcCkgeworCQkJLyogZm91bmQgdGhlIG5vZGUgKi8KKwkJCW5ld3Byb3AtPm5leHQgPSBvbGRwcm9wLT5uZXh0OworCQkJKm5leHQgPSBuZXdwcm9wOworCQkJb2xkcHJvcC0+bmV4dCA9IG5wLT5kZWFkcHJvcHM7CisJCQlucC0+ZGVhZHByb3BzID0gb2xkcHJvcDsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKKwl9CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOworCisJaWYgKCFmb3VuZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCisJLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCisJaWYgKG5wLT5wZGUpCisJCXByb2NfZGV2aWNlX3RyZWVfdXBkYXRlX3Byb3AobnAtPnBkZSwgbmV3cHJvcCwgb2xkcHJvcCk7CisjZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLworCisJcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9EWU5BTUlDKQorLyoKKyAqIFN1cHBvcnQgZm9yIGR5bmFtaWMgZGV2aWNlIHRyZWVzLgorICoKKyAqIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgZGV2aWNlIHRyZWUgY2FuIGJlIG1hbmlwdWxhdGVkIGF0IHJ1bnRpbWUuCisgKiBUaGUgcm91dGluZXMgaW4gdGhpcyBzZWN0aW9uIHN1cHBvcnQgYWRkaW5nLCByZW1vdmluZyBhbmQgY2hhbmdpbmcKKyAqIGRldmljZSB0cmVlIG5vZGVzLgorICovCisKKy8qKgorICogb2ZfYXR0YWNoX25vZGUgLSBQbHVnIGEgZGV2aWNlIG5vZGUgaW50byB0aGUgdHJlZSBhbmQgZ2xvYmFsIGxpc3QuCisgKi8KK3ZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKwlucC0+c2libGluZyA9IG5wLT5wYXJlbnQtPmNoaWxkOworCW5wLT5hbGxuZXh0ID0gYWxsbm9kZXM7CisJbnAtPnBhcmVudC0+Y2hpbGQgPSBucDsKKwlhbGxub2RlcyA9IG5wOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBvZl9kZXRhY2hfbm9kZSAtICJVbnBsdWciIGEgbm9kZSBmcm9tIHRoZSBkZXZpY2UgdHJlZS4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgbm9kZS4gIFRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgbm9kZSBpcyBub3QgZnJlZWQgdW50aWwgaXRzIHJlZmNvdW50IGdvZXMgdG8gemVyby4KKyAqLwordm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOworCisJcGFyZW50ID0gbnAtPnBhcmVudDsKKwlpZiAoIXBhcmVudCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJaWYgKGFsbG5vZGVzID09IG5wKQorCQlhbGxub2RlcyA9IG5wLT5hbGxuZXh0OworCWVsc2UgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXY7CisJCWZvciAocHJldiA9IGFsbG5vZGVzOworCQkgICAgIHByZXYtPmFsbG5leHQgIT0gbnA7CisJCSAgICAgcHJldiA9IHByZXYtPmFsbG5leHQpCisJCQk7CisJCXByZXYtPmFsbG5leHQgPSBucC0+YWxsbmV4dDsKKwl9CisKKwlpZiAocGFyZW50LT5jaGlsZCA9PSBucCkKKwkJcGFyZW50LT5jaGlsZCA9IG5wLT5zaWJsaW5nOworCWVsc2UgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXZzaWI7CisJCWZvciAocHJldnNpYiA9IG5wLT5wYXJlbnQtPmNoaWxkOworCQkgICAgIHByZXZzaWItPnNpYmxpbmcgIT0gbnA7CisJCSAgICAgcHJldnNpYiA9IHByZXZzaWItPnNpYmxpbmcpCisJCQk7CisJCXByZXZzaWItPnNpYmxpbmcgPSBucC0+c2libGluZzsKKwl9CisKKwlvZl9ub2RlX3NldF9mbGFnKG5wLCBPRl9ERVRBQ0hFRCk7CisKK291dF91bmxvY2s6CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOworfQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX09GX0RZTkFNSUMpICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvZmR0LmMgYi9kcml2ZXJzL29mL2ZkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNjc1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL29mL2ZkdC5jCkBAIC0wLDAgKzEsNTkwIEBACisvKgorICogRnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggdGhlIEZsYXR0ZW5lZCBEZXZpY2UgVHJlZSBkYXRhIGZvcm1hdAorICoKKyAqIENvcHlyaWdodCAyMDA5IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwCisgKiBiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2ZkdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpZmRlZiBDT05GSUdfUFBDCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNlbmRpZiAvKiBDT05GSUdfUFBDICovCisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitpbnQgX19pbml0ZGF0YSBkdF9yb290X2FkZHJfY2VsbHM7CitpbnQgX19pbml0ZGF0YSBkdF9yb290X3NpemVfY2VsbHM7CisKK3N0cnVjdCBib290X3BhcmFtX2hlYWRlciAqaW5pdGlhbF9ib290X3BhcmFtczsKKworY2hhciAqZmluZF9mbGF0X2R0X3N0cmluZyh1MzIgb2Zmc2V0KQoreworCXJldHVybiAoKGNoYXIgKilpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJpbmdzKSArIG9mZnNldDsKK30KKworLyoqCisgKiBvZl9zY2FuX2ZsYXRfZHQgLSBzY2FuIGZsYXR0ZW5lZCB0cmVlIGJsb2IgYW5kIGNhbGwgY2FsbGJhY2sgb24gZWFjaC4KKyAqIEBpdDogY2FsbGJhY2sgZnVuY3Rpb24KKyAqIEBkYXRhOiBjb250ZXh0IGRhdGEgcG9pbnRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzY2FuIHRoZSBmbGF0dGVuZWQgZGV2aWNlLXRyZWUsIGl0IGlzCisgKiB1c2VkIHRvIGV4dHJhY3QgdGhlIG1lbW9yeSBpbmZvcm1hdGlvbiBhdCBib290IGJlZm9yZSB3ZSBjYW4KKyAqIHVuZmxhdHRlbiB0aGUgdHJlZQorICovCitpbnQgX19pbml0IG9mX3NjYW5fZmxhdF9kdChpbnQgKCppdCkodW5zaWduZWQgbG9uZyBub2RlLAorCQkJCSAgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKKwkJCQkgICAgIHZvaWQgKmRhdGEpLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIHAgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKworCQliZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0KTsKKwlpbnQgcmMgPSAwOworCWludCBkZXB0aCA9IC0xOworCisJZG8geworCQl1MzIgdGFnID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilwKTsKKwkJY2hhciAqcGF0aHA7CisKKwkJcCArPSA0OworCQlpZiAodGFnID09IE9GX0RUX0VORF9OT0RFKSB7CisJCQlkZXB0aC0tOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApCisJCQljb250aW51ZTsKKwkJaWYgKHRhZyA9PSBPRl9EVF9FTkQpCisJCQlicmVhazsKKwkJaWYgKHRhZyA9PSBPRl9EVF9QUk9QKSB7CisJCQl1MzIgc3ogPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKXApOworCQkJcCArPSA4OworCQkJaWYgKGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24pIDwgMHgxMCkKKwkJCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7CisJCQlwICs9IHN6OworCQkJcCA9IF9BTElHTihwLCA0KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkgeworCQkJcHJfZXJyKCJJbnZhbGlkIHRhZyAleCBpbiBmbGF0IGRldmljZSB0cmVlIVxuIiwgdGFnKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRlcHRoKys7CisJCXBhdGhwID0gKGNoYXIgKilwOworCQlwID0gX0FMSUdOKHAgKyBzdHJsZW4ocGF0aHApICsgMSwgNCk7CisJCWlmICgoKnBhdGhwKSA9PSAnLycpIHsKKwkJCWNoYXIgKmxwLCAqbnA7CisJCQlmb3IgKGxwID0gTlVMTCwgbnAgPSBwYXRocDsgKm5wOyBucCsrKQorCQkJCWlmICgoKm5wKSA9PSAnLycpCisJCQkJCWxwID0gbnArMTsKKwkJCWlmIChscCAhPSBOVUxMKQorCQkJCXBhdGhwID0gbHA7CisJCX0KKwkJcmMgPSBpdChwLCBwYXRocCwgZGVwdGgsIGRhdGEpOworCQlpZiAocmMgIT0gMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKDEpOworCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIG9mX2dldF9mbGF0X2R0X3Jvb3QgLSBmaW5kIHRoZSByb290IG5vZGUgaW4gdGhlIGZsYXQgYmxvYgorICovCit1bnNpZ25lZCBsb25nIF9faW5pdCBvZl9nZXRfZmxhdF9kdF9yb290KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKKwkJYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdCk7CisKKwl3aGlsZSAoYmUzMl90b19jcHVwKChfX2JlMzIgKilwKSA9PSBPRl9EVF9OT1ApCisJCXAgKz0gNDsKKwlCVUdfT04oYmUzMl90b19jcHVwKChfX2JlMzIgKilwKSAhPSBPRl9EVF9CRUdJTl9OT0RFKTsKKwlwICs9IDQ7CisJcmV0dXJuIF9BTElHTihwICsgc3RybGVuKChjaGFyICopcCkgKyAxLCA0KTsKK30KKworLyoqCisgKiBvZl9nZXRfZmxhdF9kdF9wcm9wIC0gR2l2ZW4gYSBub2RlIGluIHRoZSBmbGF0IGJsb2IsIHJldHVybiB0aGUgcHJvcGVydHkgcHRyCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB3aXRoaW4gc2Nhbl9mbGF0dGVuZWRfZHQgY2FsbGJhY2sgdG8gZ2V0CisgKiBhY2Nlc3MgdG8gcHJvcGVydGllcworICovCit2b2lkICpfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcHJvcCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJdW5zaWduZWQgbG9uZyBwID0gbm9kZTsKKworCWRvIHsKKwkJdTMyIHRhZyA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCk7CisJCXUzMiBzeiwgbm9mZjsKKwkJY29uc3QgY2hhciAqbnN0cjsKKworCQlwICs9IDQ7CisJCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQorCQkJY29udGludWU7CisJCWlmICh0YWcgIT0gT0ZfRFRfUFJPUCkKKwkJCXJldHVybiBOVUxMOworCisJCXN6ID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilwKTsKKwkJbm9mZiA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopKHAgKyA0KSk7CisJCXAgKz0gODsKKwkJaWYgKGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24pIDwgMHgxMCkKKwkJCXAgPSBfQUxJR04ocCwgc3ogPj0gOCA/IDggOiA0KTsKKworCQluc3RyID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKKwkJaWYgKG5zdHIgPT0gTlVMTCkgeworCQkJcHJfd2FybmluZygiQ2FuJ3QgZmluZCBwcm9wZXJ0eSBpbmRleCBuYW1lICFcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaWYgKHN0cmNtcChuYW1lLCBuc3RyKSA9PSAwKSB7CisJCQlpZiAoc2l6ZSkKKwkJCQkqc2l6ZSA9IHN6OworCQkJcmV0dXJuICh2b2lkICopcDsKKwkJfQorCQlwICs9IHN6OworCQlwID0gX0FMSUdOKHAsIDQpOworCX0gd2hpbGUgKDEpOworfQorCisvKioKKyAqIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZSAtIFJldHVybiB0cnVlIGlmIGdpdmVuIG5vZGUgaGFzIGNvbXBhdCBpbiBjb21wYXRpYmxlIGxpc3QKKyAqIEBub2RlOiBub2RlIHRvIHRlc3QKKyAqIEBjb21wYXQ6IGNvbXBhdGlibGUgc3RyaW5nIHRvIGNvbXBhcmUgd2l0aCBjb21wYXRpYmxlIGxpc3QuCisgKi8KK2ludCBfX2luaXQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqY29tcGF0KQoreworCWNvbnN0IGNoYXIgKmNwOworCXVuc2lnbmVkIGxvbmcgY3BsZW4sIGw7CisKKwljcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImNvbXBhdGlibGUiLCAmY3BsZW4pOworCWlmIChjcCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoY3BsZW4gPiAwKSB7CisJCWlmIChzdHJuY2FzZWNtcChjcCwgY29tcGF0LCBzdHJsZW4oY29tcGF0KSkgPT0gMCkKKwkJCXJldHVybiAxOworCQlsID0gc3RybGVuKGNwKSArIDE7CisJCWNwICs9IGw7CisJCWNwbGVuIC09IGw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpfX2luaXQgdW5mbGF0dGVuX2R0X2FsbG9jKHVuc2lnbmVkIGxvbmcgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduKQoreworCXZvaWQgKnJlczsKKworCSptZW0gPSBfQUxJR04oKm1lbSwgYWxpZ24pOworCXJlcyA9ICh2b2lkICopKm1lbTsKKwkqbWVtICs9IHNpemU7CisKKwlyZXR1cm4gcmVzOworfQorCisvKioKKyAqIHVuZmxhdHRlbl9kdF9ub2RlIC0gQWxsb2MgYW5kIHBvcHVsYXRlIGEgZGV2aWNlX25vZGUgZnJvbSB0aGUgZmxhdCB0cmVlCisgKiBAcDogcG9pbnRlciB0byBub2RlIGluIGZsYXQgdHJlZQorICogQGRhZDogUGFyZW50IHN0cnVjdCBkZXZpY2Vfbm9kZQorICogQGFsbG5leHRwcDogcG9pbnRlciB0byAtPmFsbG5leHQgZnJvbSBsYXN0IGFsbG9jYXRlZCBkZXZpY2Vfbm9kZQorICogQGZwc2l6ZTogU2l6ZSBvZiB0aGUgbm9kZSBwYXRoIHVwIGF0IHRoZSBjdXJyZW50IGRlcHRoLgorICovCit1bnNpZ25lZCBsb25nIF9faW5pdCB1bmZsYXR0ZW5fZHRfbm9kZSh1bnNpZ25lZCBsb25nIG1lbSwKKwkJCQkJdW5zaWduZWQgbG9uZyAqcCwKKwkJCQkJc3RydWN0IGRldmljZV9ub2RlICpkYWQsCisJCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKiphbGxuZXh0cHAsCisJCQkJCXVuc2lnbmVkIGxvbmcgZnBzaXplKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IHByb3BlcnR5ICpwcCwgKipwcmV2X3BwID0gTlVMTDsKKwljaGFyICpwYXRocDsKKwl1MzIgdGFnOworCXVuc2lnbmVkIGludCBsLCBhbGxvY2w7CisJaW50IGhhc19uYW1lID0gMDsKKwlpbnQgbmV3X2Zvcm1hdCA9IDA7CisKKwl0YWcgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSgqcCkpOworCWlmICh0YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkgeworCQlwcl9lcnIoIldlaXJkIHRhZyBhdCBzdGFydCBvZiBub2RlOiAleFxuIiwgdGFnKTsKKwkJcmV0dXJuIG1lbTsKKwl9CisJKnAgKz0gNDsKKwlwYXRocCA9IChjaGFyICopKnA7CisJbCA9IGFsbG9jbCA9IHN0cmxlbihwYXRocCkgKyAxOworCSpwID0gX0FMSUdOKCpwICsgbCwgNCk7CisKKwkvKiB2ZXJzaW9uIDB4MTAgaGFzIGEgbW9yZSBjb21wYWN0IHVuaXQgbmFtZSBoZXJlIGluc3RlYWQgb2YgdGhlIGZ1bGwKKwkgKiBwYXRoLiB3ZSBhY2N1bXVsYXRlIHRoZSBmdWxsIHBhdGggc2l6ZSB1c2luZyAiZnBzaXplIiwgd2UnbGwgcmVidWlsZAorCSAqIGl0IGxhdGVyLiBXZSBkZXRlY3QgdGhpcyBiZWNhdXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG5hbWUgaXMKKwkgKiBub3QgJy8nLgorCSAqLworCWlmICgoKnBhdGhwKSAhPSAnLycpIHsKKwkJbmV3X2Zvcm1hdCA9IDE7CisJCWlmIChmcHNpemUgPT0gMCkgeworCQkJLyogcm9vdCBub2RlOiBzcGVjaWFsIGNhc2UuIGZwc2l6ZSBhY2NvdW50cyBmb3IgcGF0aAorCQkJICogcGx1cyB0ZXJtaW5hdGluZyB6ZXJvLiByb290IG5vZGUgb25seSBoYXMgJy8nLCBzbworCQkJICogZnBzaXplIHNob3VsZCBiZSAyLCBidXQgd2Ugd2FudCB0byBhdm9pZCB0aGUgZmlyc3QKKwkJCSAqIGxldmVsIG5vZGVzIHRvIGhhdmUgdHdvICcvJyBzbyB3ZSB1c2UgZnBzaXplIDEgaGVyZQorCQkJICovCisJCQlmcHNpemUgPSAxOworCQkJYWxsb2NsID0gMjsKKwkJfSBlbHNlIHsKKwkJCS8qIGFjY291bnQgZm9yICcvJyBhbmQgcGF0aCBzaXplIG1pbnVzIHRlcm1pbmFsIDAKKwkJCSAqIGFscmVhZHkgaW4gJ2wnCisJCQkgKi8KKwkJCWZwc2l6ZSArPSBsOworCQkJYWxsb2NsID0gZnBzaXplOworCQl9CisJfQorCisJbnAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBkZXZpY2Vfbm9kZSkgKyBhbGxvY2wsCisJCQkJX19hbGlnbm9mX18oc3RydWN0IGRldmljZV9ub2RlKSk7CisJaWYgKGFsbG5leHRwcCkgeworCQltZW1zZXQobnAsIDAsIHNpemVvZigqbnApKTsKKwkJbnAtPmZ1bGxfbmFtZSA9ICgoY2hhciAqKW5wKSArIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpOworCQlpZiAobmV3X2Zvcm1hdCkgeworCQkJY2hhciAqZm4gPSBucC0+ZnVsbF9uYW1lOworCQkJLyogcmVidWlsZCBmdWxsIHBhdGggZm9yIG5ldyBmb3JtYXQgKi8KKwkJCWlmIChkYWQgJiYgZGFkLT5wYXJlbnQpIHsKKwkJCQlzdHJjcHkoZm4sIGRhZC0+ZnVsbF9uYW1lKTsKKyNpZmRlZiBERUJVRworCQkJCWlmICgoc3RybGVuKGZuKSArIGwgKyAxKSAhPSBhbGxvY2wpIHsKKwkJCQkJcHJfZGVidWcoIiVzOiBwOiAlZCwgbDogJWQsIGE6ICVkXG4iLAorCQkJCQkJcGF0aHAsIChpbnQpc3RybGVuKGZuKSwKKwkJCQkJCWwsIGFsbG9jbCk7CisJCQkJfQorI2VuZGlmCisJCQkJZm4gKz0gc3RybGVuKGZuKTsKKwkJCX0KKwkJCSooZm4rKykgPSAnLyc7CisJCQltZW1jcHkoZm4sIHBhdGhwLCBsKTsKKwkJfSBlbHNlCisJCQltZW1jcHkobnAtPmZ1bGxfbmFtZSwgcGF0aHAsIGwpOworCQlwcmV2X3BwID0gJm5wLT5wcm9wZXJ0aWVzOworCQkqKmFsbG5leHRwcCA9IG5wOworCQkqYWxsbmV4dHBwID0gJm5wLT5hbGxuZXh0OworCQlpZiAoZGFkICE9IE5VTEwpIHsKKwkJCW5wLT5wYXJlbnQgPSBkYWQ7CisJCQkvKiB3ZSB0ZW1wb3JhcmlseSB1c2UgdGhlIG5leHQgZmllbGQgYXMgYGxhc3RfY2hpbGQnKi8KKwkJCWlmIChkYWQtPm5leHQgPT0gTlVMTCkKKwkJCQlkYWQtPmNoaWxkID0gbnA7CisJCQllbHNlCisJCQkJZGFkLT5uZXh0LT5zaWJsaW5nID0gbnA7CisJCQlkYWQtPm5leHQgPSBucDsKKwkJfQorCQlrcmVmX2luaXQoJm5wLT5rcmVmKTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJdTMyIHN6LCBub2ZmOworCQljaGFyICpwbmFtZTsKKworCQl0YWcgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSgqcCkpOworCQlpZiAodGFnID09IE9GX0RUX05PUCkgeworCQkJKnAgKz0gNDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0YWcgIT0gT0ZfRFRfUFJPUCkKKwkJCWJyZWFrOworCQkqcCArPSA0OworCQlzeiA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopKCpwKSk7CisJCW5vZmYgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSgoKnApICsgNCkpOworCQkqcCArPSA4OworCQlpZiAoYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbikgPCAweDEwKQorCQkJKnAgPSBfQUxJR04oKnAsIHN6ID49IDggPyA4IDogNCk7CisKKwkJcG5hbWUgPSBmaW5kX2ZsYXRfZHRfc3RyaW5nKG5vZmYpOworCQlpZiAocG5hbWUgPT0gTlVMTCkgeworCQkJcHJfaW5mbygiQ2FuJ3QgZmluZCBwcm9wZXJ0eSBuYW1lIGluIGxpc3QgIVxuIik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc3RyY21wKHBuYW1lLCAibmFtZSIpID09IDApCisJCQloYXNfbmFtZSA9IDE7CisJCWwgPSBzdHJsZW4ocG5hbWUpICsgMTsKKwkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSksCisJCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBwcm9wZXJ0eSkpOworCQlpZiAoYWxsbmV4dHBwKSB7CisJCQkvKiBXZSBhY2NlcHQgZmxhdHRlbmVkIHRyZWUgcGhhbmRsZXMgZWl0aGVyIGluCisJCQkgKiBlUEFQUi1zdHlsZSAicGhhbmRsZSIgcHJvcGVydGllcywgb3IgdGhlCisJCQkgKiBsZWdhY3kgImxpbnV4LHBoYW5kbGUiIHByb3BlcnRpZXMuICBJZiBib3RoCisJCQkgKiBhcHBlYXIgYW5kIGhhdmUgZGlmZmVyZW50IHZhbHVlcywgdGhpbmdzCisJCQkgKiB3aWxsIGdldCB3ZWlyZC4gIERvbid0IGRvIHRoYXQuICovCisJCQlpZiAoKHN0cmNtcChwbmFtZSwgInBoYW5kbGUiKSA9PSAwKSB8fAorCQkJICAgIChzdHJjbXAocG5hbWUsICJsaW51eCxwaGFuZGxlIikgPT0gMCkpIHsKKwkJCQlpZiAobnAtPnBoYW5kbGUgPT0gMCkKKwkJCQkJbnAtPnBoYW5kbGUgPSAqKCh1MzIgKikqcCk7CisJCQl9CisJCQkvKiBBbmQgd2UgcHJvY2VzcyB0aGUgImlibSxwaGFuZGxlIiBwcm9wZXJ0eQorCQkJICogdXNlZCBpbiBwU2VyaWVzIGR5bmFtaWMgZGV2aWNlIHRyZWUKKwkJCSAqIHN0dWZmICovCisJCQlpZiAoc3RyY21wKHBuYW1lLCAiaWJtLHBoYW5kbGUiKSA9PSAwKQorCQkJCW5wLT5waGFuZGxlID0gKigodTMyICopKnApOworCQkJcHAtPm5hbWUgPSBwbmFtZTsKKwkJCXBwLT5sZW5ndGggPSBzejsKKwkJCXBwLT52YWx1ZSA9ICh2b2lkICopKnA7CisJCQkqcHJldl9wcCA9IHBwOworCQkJcHJldl9wcCA9ICZwcC0+bmV4dDsKKwkJfQorCQkqcCA9IF9BTElHTigoKnApICsgc3osIDQpOworCX0KKwkvKiB3aXRoIHZlcnNpb24gMHgxMCB3ZSBtYXkgbm90IGhhdmUgdGhlIG5hbWUgcHJvcGVydHksIHJlY3JlYXRlCisJICogaXQgaGVyZSBmcm9tIHRoZSB1bml0IG5hbWUgaWYgYWJzZW50CisJICovCisJaWYgKCFoYXNfbmFtZSkgeworCQljaGFyICpwMSA9IHBhdGhwLCAqcHMgPSBwYXRocCwgKnBhID0gTlVMTDsKKwkJaW50IHN6OworCisJCXdoaWxlICgqcDEpIHsKKwkJCWlmICgoKnAxKSA9PSAnQCcpCisJCQkJcGEgPSBwMTsKKwkJCWlmICgoKnAxKSA9PSAnLycpCisJCQkJcHMgPSBwMSArIDE7CisJCQlwMSsrOworCQl9CisJCWlmIChwYSA8IHBzKQorCQkJcGEgPSBwMTsKKwkJc3ogPSAocGEgLSBwcykgKyAxOworCQlwcCA9IHVuZmxhdHRlbl9kdF9hbGxvYygmbWVtLCBzaXplb2Yoc3RydWN0IHByb3BlcnR5KSArIHN6LAorCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKKwkJaWYgKGFsbG5leHRwcCkgeworCQkJcHAtPm5hbWUgPSAibmFtZSI7CisJCQlwcC0+bGVuZ3RoID0gc3o7CisJCQlwcC0+dmFsdWUgPSBwcCArIDE7CisJCQkqcHJldl9wcCA9IHBwOworCQkJcHJldl9wcCA9ICZwcC0+bmV4dDsKKwkJCW1lbWNweShwcC0+dmFsdWUsIHBzLCBzeiAtIDEpOworCQkJKChjaGFyICopcHAtPnZhbHVlKVtzeiAtIDFdID0gMDsKKwkJCXByX2RlYnVnKCJmaXhlZCB1cCBuYW1lIGZvciAlcyAtPiAlc1xuIiwgcGF0aHAsCisJCQkJKGNoYXIgKilwcC0+dmFsdWUpOworCQl9CisJfQorCWlmIChhbGxuZXh0cHApIHsKKwkJKnByZXZfcHAgPSBOVUxMOworCQlucC0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm5hbWUiLCBOVUxMKTsKKwkJbnAtPnR5cGUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2VfdHlwZSIsIE5VTEwpOworCisJCWlmICghbnAtPm5hbWUpCisJCQlucC0+bmFtZSA9ICI8TlVMTD4iOworCQlpZiAoIW5wLT50eXBlKQorCQkJbnAtPnR5cGUgPSAiPE5VTEw+IjsKKwl9CisJd2hpbGUgKHRhZyA9PSBPRl9EVF9CRUdJTl9OT0RFKSB7CisJCW1lbSA9IHVuZmxhdHRlbl9kdF9ub2RlKG1lbSwgcCwgbnAsIGFsbG5leHRwcCwgZnBzaXplKTsKKwkJdGFnID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKnApKTsKKwl9CisJaWYgKHRhZyAhPSBPRl9EVF9FTkRfTk9ERSkgeworCQlwcl9lcnIoIldlaXJkIHRhZyBhdCBlbmQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7CisJCXJldHVybiBtZW07CisJfQorCSpwICs9IDQ7CisJcmV0dXJuIG1lbTsKK30KKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorLyoqCisgKiBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQgLSBEZWNvZGUgaW5pdHJkIGxvY2F0aW9uIGZyb20gZmxhdCB0cmVlCisgKiBAbm9kZTogcmVmZXJlbmNlIHRvIG5vZGUgY29udGFpbmluZyBpbml0cmQgbG9jYXRpb24gKCdjaG9zZW4nKQorICovCit2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgbGVuOworCV9fYmUzMiAqcHJvcDsKKworCXByX2RlYnVnKCJMb29raW5nIGZvciBpbml0cmQgcHJvcGVydGllcy4uLiAiKTsKKworCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtc3RhcnQiLCAmbGVuKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKwlzdGFydCA9IG9mX3JlYWRfdWxvbmcocHJvcCwgbGVuLzQpOworCisJcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGluaXRyZC1lbmQiLCAmbGVuKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKwllbmQgPSBvZl9yZWFkX3Vsb25nKHByb3AsIGxlbi80KTsKKworCWVhcmx5X2luaXRfZHRfc2V0dXBfaW5pdHJkX2FyY2goc3RhcnQsIGVuZCk7CisJcHJfZGVidWcoImluaXRyZF9zdGFydD0weCVseCAgaW5pdHJkX2VuZD0weCVseFxuIiwgc3RhcnQsIGVuZCk7Cit9CisjZWxzZQoraW5saW5lIHZvaWQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgKi8KKworLyoqCisgKiBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCAtIGZldGNoIHRoZSB0b3AgbGV2ZWwgYWRkcmVzcyBhbmQgc2l6ZSBjZWxscworICovCitpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9yb290KHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgaW50IGRlcHRoLCB2b2lkICpkYXRhKQoreworCV9fYmUzMiAqcHJvcDsKKworCWlmIChkZXB0aCAhPSAwKQorCQlyZXR1cm4gMDsKKworCWR0X3Jvb3Rfc2l6ZV9jZWxscyA9IE9GX1JPT1RfTk9ERV9TSVpFX0NFTExTX0RFRkFVTFQ7CisJZHRfcm9vdF9hZGRyX2NlbGxzID0gT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVDsKKworCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjc2l6ZS1jZWxscyIsIE5VTEwpOworCWlmIChwcm9wKQorCQlkdF9yb290X3NpemVfY2VsbHMgPSBiZTMyX3RvX2NwdXAocHJvcCk7CisJcHJfZGVidWcoImR0X3Jvb3Rfc2l6ZV9jZWxscyA9ICV4XG4iLCBkdF9yb290X3NpemVfY2VsbHMpOworCisJcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7CisJaWYgKHByb3ApCisJCWR0X3Jvb3RfYWRkcl9jZWxscyA9IGJlMzJfdG9fY3B1cChwcm9wKTsKKwlwcl9kZWJ1ZygiZHRfcm9vdF9hZGRyX2NlbGxzID0gJXhcbiIsIGR0X3Jvb3RfYWRkcl9jZWxscyk7CisKKwkvKiBicmVhayBub3cgKi8KKwlyZXR1cm4gMTsKK30KKwordTY0IF9faW5pdCBkdF9tZW1fbmV4dF9jZWxsKGludCBzLCBfX2JlMzIgKipjZWxscCkKK3sKKwlfX2JlMzIgKnAgPSAqY2VsbHA7CisKKwkqY2VsbHAgPSBwICsgczsKKwlyZXR1cm4gb2ZfcmVhZF9udW1iZXIocCwgcyk7Cit9CisKKy8qKgorICogZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSAtIExvb2sgZm9yIGFuIHBhcnNlIG1lbW9yeSBub2RlcworICovCitpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnkodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSwKKwkJCQkgICAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKK3sKKwljaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKKwlfX2JlMzIgKnJlZywgKmVuZHA7CisJdW5zaWduZWQgbG9uZyBsOworCisJLyogV2UgYXJlIHNjYW5uaW5nICJtZW1vcnkiIG5vZGVzIG9ubHkgKi8KKwlpZiAodHlwZSA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRoZSBsb25ndHJhaWwgZG9lc24ndCBoYXZlIGEgZGV2aWNlX3R5cGUgb24gdGhlCisJCSAqIC9tZW1vcnkgbm9kZSwgc28gbG9vayBmb3IgdGhlIG5vZGUgY2FsbGVkIC9tZW1vcnlAMC4KKwkJICovCisJCWlmIChkZXB0aCAhPSAxIHx8IHN0cmNtcCh1bmFtZSwgIm1lbW9yeUAwIikgIT0gMCkKKwkJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc3RyY21wKHR5cGUsICJtZW1vcnkiKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCXJlZyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHVzYWJsZS1tZW1vcnkiLCAmbCk7CisJaWYgKHJlZyA9PSBOVUxMKQorCQlyZWcgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJyZWciLCAmbCk7CisJaWYgKHJlZyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWVuZHAgPSByZWcgKyAobCAvIHNpemVvZihfX2JlMzIpKTsKKworCXByX2RlYnVnKCJtZW1vcnkgc2NhbiBub2RlICVzLCByZWcgc2l6ZSAlbGQsIGRhdGE6ICV4ICV4ICV4ICV4LFxuIiwKKwkgICAgdW5hbWUsIGwsIHJlZ1swXSwgcmVnWzFdLCByZWdbMl0sIHJlZ1szXSk7CisKKwl3aGlsZSAoKGVuZHAgLSByZWcpID49IChkdF9yb290X2FkZHJfY2VsbHMgKyBkdF9yb290X3NpemVfY2VsbHMpKSB7CisJCXU2NCBiYXNlLCBzaXplOworCisJCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywgJnJlZyk7CisJCXNpemUgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJnJlZyk7CisKKwkJaWYgKHNpemUgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlwcl9kZWJ1ZygiIC0gJWxseCAsICAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJhc2UsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNpemUpOworCisJCWVhcmx5X2luaXRfZHRfYWRkX21lbW9yeV9hcmNoKGJhc2UsIHNpemUpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW4odW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSwKKwkJCQkgICAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGw7CisJY2hhciAqcDsKKworCXByX2RlYnVnKCJzZWFyY2ggXCJjaG9zZW5cIiwgZGVwdGg6ICVkLCB1bmFtZTogJXNcbiIsIGRlcHRoLCB1bmFtZSk7CisKKwlpZiAoZGVwdGggIT0gMSB8fAorCSAgICAoc3RyY21wKHVuYW1lLCAiY2hvc2VuIikgIT0gMCAmJiBzdHJjbXAodW5hbWUsICJjaG9zZW5AMCIpICE9IDApKQorCQlyZXR1cm4gMDsKKworCWVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZChub2RlKTsKKworCS8qIFJldHJlaXZlIGNvbW1hbmQgbGluZSAqLworCXAgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJib290YXJncyIsICZsKTsKKwlpZiAocCAhPSBOVUxMICYmIGwgPiAwKQorCQlzdHJsY3B5KGNtZF9saW5lLCBwLCBtaW4oKGludClsLCBDT01NQU5EX0xJTkVfU0laRSkpOworCisjaWZkZWYgQ09ORklHX0NNRExJTkUKKyNpZm5kZWYgQ09ORklHX0NNRExJTkVfRk9SQ0UKKwlpZiAocCA9PSBOVUxMIHx8IGwgPT0gMCB8fCAobCA9PSAxICYmICgqcCkgPT0gMCkpCisjZW5kaWYKKwkJc3RybGNweShjbWRfbGluZSwgQ09ORklHX0NNRExJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKKyNlbmRpZiAvKiBDT05GSUdfQ01ETElORSAqLworCisJZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbl9hcmNoKG5vZGUpOworCisJcHJfZGVidWcoIkNvbW1hbmQgbGluZSBpczogJXNcbiIsIGNtZF9saW5lKTsKKworCS8qIGJyZWFrIG5vdyAqLworCXJldHVybiAxOworfQorCisvKioKKyAqIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSAtIGNyZWF0ZSB0cmVlIG9mIGRldmljZV9ub2RlcyBmcm9tIGZsYXQgYmxvYgorICoKKyAqIHVuZmxhdHRlbnMgdGhlIGRldmljZS10cmVlIHBhc3NlZCBieSB0aGUgZmlybXdhcmUsIGNyZWF0aW5nIHRoZQorICogdHJlZSBvZiBzdHJ1Y3QgZGV2aWNlX25vZGUuIEl0IGFsc28gZmlsbHMgdGhlICJuYW1lIiBhbmQgInR5cGUiCisgKiBwb2ludGVycyBvZiB0aGUgbm9kZXMgc28gdGhlIG5vcm1hbCBkZXZpY2UtdHJlZSB3YWxraW5nIGZ1bmN0aW9ucworICogY2FuIGJlIHVzZWQuCisgKi8KK3ZvaWQgX19pbml0IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIG1lbSwgc2l6ZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKiphbGxuZXh0cCA9ICZhbGxub2RlczsKKworCXByX2RlYnVnKCIgLT4gdW5mbGF0dGVuX2RldmljZV90cmVlKClcbiIpOworCisJLyogRmlyc3QgcGFzcywgc2NhbiBmb3Igc2l6ZSAqLworCXN0YXJ0ID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKKwkJYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdCk7CisJc2l6ZSA9IHVuZmxhdHRlbl9kdF9ub2RlKDAsICZzdGFydCwgTlVMTCwgTlVMTCwgMCk7CisJc2l6ZSA9IChzaXplIHwgMykgKyAxOworCisJcHJfZGVidWcoIiAgc2l6ZSBpcyAlbHgsIGFsbG9jYXRpbmcuLi5cbiIsIHNpemUpOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZXhwYW5kZWQgZGV2aWNlIHRyZWUgKi8KKwltZW0gPSBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHNpemUgKyA0LAorCQkJX19hbGlnbm9mX18oc3RydWN0IGRldmljZV9ub2RlKSk7CisJbWVtID0gKHVuc2lnbmVkIGxvbmcpIF9fdmEobWVtKTsKKworCSgoX19iZTMyICopbWVtKVtzaXplIC8gNF0gPSBjcHVfdG9fYmUzMigweGRlYWRiZWVmKTsKKworCXByX2RlYnVnKCIgIHVuZmxhdHRlbmluZyAlbHguLi5cbiIsIG1lbSk7CisKKwkvKiBTZWNvbmQgcGFzcywgZG8gYWN0dWFsIHVuZmxhdHRlbmluZyAqLworCXN0YXJ0ID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKKwkJYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdCk7CisJdW5mbGF0dGVuX2R0X25vZGUobWVtLCAmc3RhcnQsIE5VTEwsICZhbGxuZXh0cCwgMCk7CisJaWYgKGJlMzJfdG9fY3B1cCgoX19iZTMyICopc3RhcnQpICE9IE9GX0RUX0VORCkKKwkJcHJfd2FybmluZygiV2VpcmQgdGFnIGF0IGVuZCBvZiB0cmVlOiAlMDh4XG4iLCAqKCh1MzIgKilzdGFydCkpOworCWlmIChiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKW1lbSlbc2l6ZSAvIDRdKSAhPSAweGRlYWRiZWVmKQorCQlwcl93YXJuaW5nKCJFbmQgb2YgdHJlZSBtYXJrZXIgb3ZlcndyaXR0ZW46ICUwOHhcbiIsCisJCQkgICBiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKW1lbSlbc2l6ZSAvIDRdKSk7CisJKmFsbG5leHRwID0gTlVMTDsKKworCS8qIEdldCBwb2ludGVyIHRvIE9GICIvY2hvc2VuIiBub2RlIGZvciB1c2UgZXZlcnl3aGVyZSAqLworCW9mX2Nob3NlbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY2hvc2VuIik7CisJaWYgKG9mX2Nob3NlbiA9PSBOVUxMKQorCQlvZl9jaG9zZW4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2Nob3NlbkAwIik7CisKKwlwcl9kZWJ1ZygiIDwtIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvZ3Bpby5jIGIvZHJpdmVycy9vZi9ncGlvLmMKaW5kZXggNmVlYTYwMS4uMjRjMzYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9ncGlvLmMKKysrIGIvZHJpdmVycy9vZi9ncGlvLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYyA9IE5VTEw7CiAJaW50IHNpemU7CiAJY29uc3Qgdm9pZCAqZ3Bpb19zcGVjOwotCWNvbnN0IHUzMiAqZ3Bpb19jZWxsczsKKwljb25zdCBfX2JlMzIgKmdwaW9fY2VsbHM7CiAKIAlyZXQgPSBvZl9wYXJzZV9waGFuZGxlc193aXRoX2FyZ3MobnAsICJncGlvcyIsICIjZ3Bpby1jZWxscyIsIGluZGV4LAogCQkJCQkgICZnYywgJmdwaW9fc3BlYyk7CkBAIC01NSw3ICs1NSw3IEBACiAKIAlncGlvX2NlbGxzID0gb2ZfZ2V0X3Byb3BlcnR5KGdjLCAiI2dwaW8tY2VsbHMiLCAmc2l6ZSk7CiAJaWYgKCFncGlvX2NlbGxzIHx8IHNpemUgIT0gc2l6ZW9mKCpncGlvX2NlbGxzKSB8fAotCQkJKmdwaW9fY2VsbHMgIT0gb2ZfZ2MtPmdwaW9fY2VsbHMpIHsKKwkJCWJlMzJfdG9fY3B1cChncGlvX2NlbGxzKSAhPSBvZl9nYy0+Z3Bpb19jZWxscykgewogCQlwcl9kZWJ1ZygiJXM6IHdyb25nICNncGlvLWNlbGxzIGZvciAlc1xuIiwKIAkJCSBucC0+ZnVsbF9uYW1lLCBnYy0+ZnVsbF9uYW1lKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEyNyw3ICsxMjcsOCBAQAogaW50IG9mX2dwaW9fc2ltcGxlX3hsYXRlKHN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJIGNvbnN0IHZvaWQgKmdwaW9fc3BlYywgZW51bSBvZl9ncGlvX2ZsYWdzICpmbGFncykKIHsKLQljb25zdCB1MzIgKmdwaW8gPSBncGlvX3NwZWM7CisJY29uc3QgX19iZTMyICpncGlvID0gZ3Bpb19zcGVjOworCWNvbnN0IHUzMiBuID0gYmUzMl90b19jcHVwKGdwaW8pOwogCiAJLyoKIAkgKiBXZSdyZSBkaXNjb3VyYWdpbmcgZ3Bpb19jZWxscyA8IDIsIHNpbmNlIHRoYXQgd2F5IHlvdSdsbCBoYXZlIHRvCkBAIC0xNDAsMTMgKzE0MSwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoKmdwaW8gPiBvZl9nYy0+Z2MubmdwaW8pCisJaWYgKG4gPiBvZl9nYy0+Z2MubmdwaW8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZsYWdzKQotCQkqZmxhZ3MgPSBncGlvWzFdOworCQkqZmxhZ3MgPSBiZTMyX3RvX2NwdShncGlvWzFdKTsKIAotCXJldHVybiAqZ3BpbzsKKwlyZXR1cm4gbjsKIH0KIEVYUE9SVF9TWU1CT0wob2ZfZ3Bpb19zaW1wbGVfeGxhdGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX2kyYy5jIGIvZHJpdmVycy9vZi9vZl9pMmMuYwppbmRleCBmYTY1YTJiLi5hM2E3MDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX2kyYy5jCisrKyBiL2RyaXZlcnMvb2Yvb2ZfaTJjLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGFkYXBfbm9kZSwgbm9kZSkgewogCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbyA9IHt9OwogCQlzdHJ1Y3QgZGV2X2FyY2hkYXRhIGRldl9hZCA9IHt9OwotCQljb25zdCB1MzIgKmFkZHI7CisJCWNvbnN0IF9fYmUzMiAqYWRkcjsKIAkJaW50IGxlbjsKIAogCQlpZiAob2ZfbW9kYWxpYXNfbm9kZShub2RlLCBpbmZvLnR5cGUsIHNpemVvZihpbmZvLnR5cGUpKSA8IDApCkBAIC00MCw3ICs0MCw3IEBACiAKIAkJaW5mby5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsKIAotCQlpbmZvLmFkZHIgPSAqYWRkcjsKKwkJaW5mby5hZGRyID0gYmUzMl90b19jcHVwKGFkZHIpOwogCiAJCWRldl9hcmNoZGF0YV9zZXRfbm9kZSgmZGV2X2FkLCBub2RlKTsKIAkJaW5mby5hcmNoZGF0YSA9ICZkZXZfYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX21kaW8uYyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCmluZGV4IDRiMjJiYTUuLjE4ZWNhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCisrKyBiL2RyaXZlcnMvb2Yvb2ZfbWRpby5jCkBAIC01MSw3ICs1MSw3IEBACiAKIAkvKiBMb29wIG92ZXIgdGhlIGNoaWxkIG5vZGVzIGFuZCByZWdpc3RlciBhIHBoeV9kZXZpY2UgZm9yIGVhY2ggb25lICovCiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKLQkJY29uc3QgdTMyICphZGRyOworCQljb25zdCBfX2JlMzIgKmFkZHI7CiAJCWludCBsZW47CiAKIAkJLyogQSBQSFkgbXVzdCBoYXZlIGEgcmVnIHByb3BlcnR5IGluIHRoZSByYW5nZSBbMC0zMV0gKi8KQEAgLTY4LDcgKzY4LDcgQEAKIAkJCQltZGlvLT5pcnFbKmFkZHJdID0gUEhZX1BPTEw7CiAJCX0KIAotCQlwaHkgPSBnZXRfcGh5X2RldmljZShtZGlvLCAqYWRkcik7CisJCXBoeSA9IGdldF9waHlfZGV2aWNlKG1kaW8sIGJlMzJfdG9fY3B1cChhZGRyKSk7CiAJCWlmICghcGh5KSB7CiAJCQlkZXZfZXJyKCZtZGlvLT5kZXYsICJlcnJvciBwcm9iaW5nIFBIWSBhdCBhZGRyZXNzICVpXG4iLAogCQkJCSphZGRyKTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbmV0X25wOwogCWNoYXIgYnVzX2lkW01JSV9CVVNfSURfU0laRSArIDNdOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHk7Ci0JY29uc3QgdTMyICpwaHlfaWQ7CisJY29uc3QgX19iZTMyICpwaHlfaWQ7CiAJaW50IHN6OwogCiAJaWYgKCFkZXYtPmRldi5wYXJlbnQpCkBAIC0xNzQsNyArMTc0LDcgQEAKIAlpZiAoIXBoeV9pZCB8fCBzeiA8IHNpemVvZigqcGh5X2lkKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzcHJpbnRmKGJ1c19pZCwgUEhZX0lEX0ZNVCwgIjAiLCBwaHlfaWRbMF0pOworCXNwcmludGYoYnVzX2lkLCBQSFlfSURfRk1ULCAiMCIsIGJlMzJfdG9fY3B1KHBoeV9pZFswXSkpOwogCiAJcGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBidXNfaWQsIGhuZGxyLCAwLCBpZmFjZSk7CiAJcmV0dXJuIElTX0VSUihwaHkpID8gTlVMTCA6IHBoeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2Zfc3BpLmMgYi9kcml2ZXJzL29mL29mX3NwaS5jCmluZGV4IGJlZDBlZDYuLmY2NWY0OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yvb2Zfc3BpLmMKKysrIGIvZHJpdmVycy9vZi9vZl9zcGkuYwpAQCAtMjMsNyArMjMsNyBAQAogewogCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CiAJc3RydWN0IGRldmljZV9ub2RlICpuYzsKLQljb25zdCB1MzIgKnByb3A7CisJY29uc3QgX19iZTMyICpwcm9wOwogCWludCByYzsKIAlpbnQgbGVuOwogCkBAIC01NCw3ICs1NCw3IEBACiAJCQlzcGlfZGV2X3B1dChzcGkpOwogCQkJY29udGludWU7CiAJCX0KLQkJc3BpLT5jaGlwX3NlbGVjdCA9ICpwcm9wOworCQlzcGktPmNoaXBfc2VsZWN0ID0gYmUzMl90b19jcHVwKHByb3ApOwogCiAJCS8qIE1vZGUgKGNsb2NrIHBoYXNlL3BvbGFyaXR5L2V0Yy4pICovCiAJCWlmIChvZl9maW5kX3Byb3BlcnR5KG5jLCAic3BpLWNwaGEiLCBOVUxMKSkKQEAgLTcyLDcgKzcyLDcgQEAKIAkJCXNwaV9kZXZfcHV0KHNwaSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlzcGktPm1heF9zcGVlZF9oeiA9ICpwcm9wOworCQlzcGktPm1heF9zcGVlZF9oeiA9IGJlMzJfdG9fY3B1cChwcm9wKTsKIAogCQkvKiBJUlEgKi8KIAkJc3BpLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChuYywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9LY29uZmlnIGIvZHJpdmVycy9wY2kvS2NvbmZpZwppbmRleCBiMWVjZWZhLi43ODU4YTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL0tjb25maWcKQEAgLTIxLDE3ICsyMSw2IEBACiAKIAkgICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgogCi1jb25maWcgUENJX0xFR0FDWQotCWJvb2wgIkVuYWJsZSBkZXByZWNhdGVkIHBjaV9maW5kXyogQVBJIgotCWRlcGVuZHMgb24gUENJCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBkZXByZWNhdGVkCi0JICBwY2lfZmluZF9kZXZpY2UoKSBBUEkuICBNb3N0IGRyaXZlcnMgaGF2ZSBiZWVuIGNvbnZlcnRlZCBvdmVyCi0JICB0byB1c2luZyB0aGUgcHJvcGVyIGhvdHBsdWcgQVBJcywgc28gdGhpcyBvcHRpb24gc2VydmVzIHRvCi0JICBpbmNsdWRlL2V4Y2x1ZGUgb25seSBhIGZldyBkcml2ZXJzIHRoYXQgYXJlIHN0aWxsIHVzaW5nIHRoaXMKLQkgIEFQSS4KLQogY29uZmlnIFBDSV9ERUJVRwogCWJvb2wgIlBDSSBEZWJ1Z2dpbmciCiAJZGVwZW5kcyBvbiBQQ0kgJiYgREVCVUdfS0VSTkVMCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCmluZGV4IDRkZjQ4ZDUuLjg2NzRjMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCkBAIC0yLDE0ICsyLDEzIEBACiAjIE1ha2VmaWxlIGZvciB0aGUgUENJIGJ1cyBzcGVjaWZpYyBkcml2ZXJzLgogIwogCi1vYmoteQkJKz0gYWNjZXNzLm8gYnVzLm8gcHJvYmUubyByZW1vdmUubyBwY2kubyBxdWlya3MubyBcCitvYmoteQkJKz0gYWNjZXNzLm8gYnVzLm8gcHJvYmUubyByZW1vdmUubyBwY2kubyBcCiAJCQlwY2ktZHJpdmVyLm8gc2VhcmNoLm8gcGNpLXN5c2ZzLm8gcm9tLm8gc2V0dXAtcmVzLm8gXAogCQkJaXJxLm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIG9iai0kKENPTkZJR19TWVNGUykgKz0gc2xvdC5vCiAKLW9iai0kKENPTkZJR19QQ0lfTEVHQUNZKSArPSBsZWdhY3kubwotQ0ZMQUdTX2xlZ2FjeS5vICs9IC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMKK29iai0kKENPTkZJR19QQ0lfUVVJUktTKSArPSBxdWlya3MubwogCiAjIEJ1aWxkIFBDSSBFeHByZXNzIHN0dWZmIGlmIG5lZWRlZAogb2JqLSQoQ09ORklHX1BDSUVQT1JUQlVTKSArPSBwY2llLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvYnVzLmMgYi9kcml2ZXJzL3BjaS9idXMuYwppbmRleCBjZWYyOGE3Li43MTIyNTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9idXMuYworKysgYi9kcml2ZXJzL3BjaS9idXMuYwpAQCAtMTcsNiArMTcsNTIgQEAKIAogI2luY2x1ZGUgInBjaS5oIgogCit2b2lkIHBjaV9idXNfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBjaV9idXNfcmVzb3VyY2UgKmJ1c19yZXM7CisKKwlidXNfcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9idXNfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1c19yZXMpIHsKKwkJZGV2X2VycigmYnVzLT5kZXYsICJjYW4ndCBhZGQgJXBSIHJlc291cmNlXG4iLCByZXMpOworCQlyZXR1cm47CisJfQorCisJYnVzX3Jlcy0+cmVzID0gcmVzOworCWJ1c19yZXMtPmZsYWdzID0gZmxhZ3M7CisJbGlzdF9hZGRfdGFpbCgmYnVzX3Jlcy0+bGlzdCwgJmJ1cy0+cmVzb3VyY2VzKTsKK30KKworc3RydWN0IHJlc291cmNlICpwY2lfYnVzX3Jlc291cmNlX24oY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IG4pCit7CisJc3RydWN0IHBjaV9idXNfcmVzb3VyY2UgKmJ1c19yZXM7CisKKwlpZiAobiA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNKQorCQlyZXR1cm4gYnVzLT5yZXNvdXJjZVtuXTsKKworCW4gLT0gUENJX0JSSURHRV9SRVNPVVJDRV9OVU07CisJbGlzdF9mb3JfZWFjaF9lbnRyeShidXNfcmVzLCAmYnVzLT5yZXNvdXJjZXMsIGxpc3QpIHsKKwkJaWYgKG4tLSA9PSAwKQorCQkJcmV0dXJuIGJ1c19yZXMtPnJlczsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfYnVzX3Jlc291cmNlX24pOworCit2b2lkIHBjaV9idXNfcmVtb3ZlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfYnVzX3Jlc291cmNlICpidXNfcmVzLCAqdG1wOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBpKyspCisJCWJ1cy0+cmVzb3VyY2VbaV0gPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1c19yZXMsIHRtcCwgJmJ1cy0+cmVzb3VyY2VzLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZidXNfcmVzLT5saXN0KTsKKwkJa2ZyZWUoYnVzX3Jlcyk7CisJfQorfQorCiAvKioKICAqIHBjaV9idXNfYWxsb2NfcmVzb3VyY2UgLSBhbGxvY2F0ZSBhIHJlc291cmNlIGZyb20gYSBwYXJlbnQgYnVzCiAgKiBAYnVzOiBQQ0kgYnVzCkBAIC0zNiwxMSArODIsMTQgQEAKIHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24sCiAJCXJlc291cmNlX3NpemVfdCBtaW4sIHVuc2lnbmVkIGludCB0eXBlX21hc2ssCi0JCXZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosIHJlc291cmNlX3NpemVfdCwKLQkJCQlyZXNvdXJjZV9zaXplX3QpLAorCQlyZXNvdXJjZV9zaXplX3QgKCphbGlnbmYpKHZvaWQgKiwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJICByZXNvdXJjZV9zaXplX3QsCisJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90KSwKIAkJdm9pZCAqYWxpZ25mX2RhdGEpCiB7CiAJaW50IGksIHJldCA9IC1FTk9NRU07CisJc3RydWN0IHJlc291cmNlICpyOwogCXJlc291cmNlX3NpemVfdCBtYXggPSAtMTsKIAogCXR5cGVfbWFzayB8PSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU07CkBAIC00OSw4ICs5OCw3IEBACiAJaWYgKCEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNXzY0KSkKIAkJbWF4ID0gUENJQklPU19NQVhfTUVNXzMyOwogCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqciA9IGJ1cy0+cmVzb3VyY2VbaV07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHIsIGkpIHsKIAkJaWYgKCFyKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCmluZGV4IDRkZDcxMTQuLmVmYTlmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwpAQCAtMzMyLDggKzMzMiw2IEBACiAJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5hdHRlbnRpb25fc3RhdHVzID0gMDsKIAlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPmxhdGNoX3N0YXR1cyA9IGFjcGlwaHBfZ2V0X2xhdGNoX3N0YXR1cyhzbG90LT5hY3BpX3Nsb3QpOwogCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+YWRhcHRlcl9zdGF0dXMgPSBhY3BpcGhwX2dldF9hZGFwdGVyX3N0YXR1cyhzbG90LT5hY3BpX3Nsb3QpOwotCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwotCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+Y3VyX2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwogCiAJYWNwaXBocF9zbG90LT5zbG90ID0gc2xvdDsKIAlzbnByaW50ZihuYW1lLCBTTE9UX05BTUVfU0laRSwgIiVsbHUiLCBzbG90LT5hY3BpX3Nsb3QtPnN1bik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMKaW5kZXggMTQ4ZmI0Ni4uZmIzZjg0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX2dlbmVyaWMuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAJZGV2ID0gcGNpX2dldF9zbG90KGJ1cywgUENJX0RFVkZOKGJyaWRnZV9zbG90LCAwKSk7CiAJaWYoIWRldiB8fCBkZXYtPmhkcl90eXBlICE9IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKIAkJZXJyKCJJbnZhbGlkIGJyaWRnZSBkZXZpY2UgJXMiLCBicmlkZ2UpOworCQlwY2lfZGV2X3B1dChkZXYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJYnVzID0gZGV2LT5zdWJvcmRpbmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCmluZGV4IDljNmE5ZmQuLmQ4ZmZjNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaApAQCAtMzEwLDggKzMxMCw2IEBACiAJdTggZmlyc3Rfc2xvdDsKIAl1OCBhZGRfc3VwcG9ydDsKIAl1OCBwdXNoX2ZsYWc7Ci0JZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkOwotCWVudW0gcGNpX2J1c19zcGVlZCBzcGVlZF9jYXBhYmlsaXR5OwogCXU4IHB1c2hfYnV0dG9uOwkJCS8qIDAgPSBubyBwdXNoYnV0dG9uLCAxID0gcHVzaGJ1dHRvbiBwcmVzZW50ICovCiAJdTggc2xvdF9zd2l0Y2hfdHlwZTsJCS8qIDAgPSBubyBzd2l0Y2gsIDEgPSBzd2l0Y2ggcHJlc2VudCAqLwogCXU4IGRlZmVhdHVyZV9QSFA7CQkvKiAwID0gUEhQIG5vdCBzdXBwb3J0ZWQsIDEgPSBQSFAgc3VwcG9ydGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKaW5kZXggMDc1YjRmNC4uZjE4NGQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYwpAQCAtNTgzLDMwICs1ODMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkIChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwotCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQkqdmFsdWUgPSBjdHJsLT5zcGVlZF9jYXBhYmlsaXR5OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7Ci0KLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCSp2YWx1ZSA9IGN0cmwtPnNwZWVkOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaG90cGx1Z19zbG90X29wcyBjcHFwaHBfaG90cGx1Z19zbG90X29wcyA9IHsKIAkuc2V0X2F0dGVudGlvbl9zdGF0dXMgPQlzZXRfYXR0ZW50aW9uX3N0YXR1cywKIAkuZW5hYmxlX3Nsb3QgPQkJcHJvY2Vzc19TSSwKQEAgLTYxNiw4ICs1OTIsNiBAQAogCS5nZXRfYXR0ZW50aW9uX3N0YXR1cyA9CWdldF9hdHRlbnRpb25fc3RhdHVzLAogCS5nZXRfbGF0Y2hfc3RhdHVzID0JZ2V0X2xhdGNoX3N0YXR1cywKIAkuZ2V0X2FkYXB0ZXJfc3RhdHVzID0JZ2V0X2FkYXB0ZXJfc3RhdHVzLAotCS5nZXRfbWF4X2J1c19zcGVlZCA9CWdldF9tYXhfYnVzX3NwZWVkLAotCS5nZXRfY3VyX2J1c19zcGVlZCA9CWdldF9jdXJfYnVzX3NwZWVkLAogfTsKIAogI2RlZmluZSBTTE9UX05BTUVfU0laRSAxMApAQCAtNjI5LDYgKzYwMyw3IEBACiAJc3RydWN0IHNsb3QgKnNsb3Q7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OwogCXN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaG90cGx1Z19zbG90X2luZm87CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9idXM7CiAJdTggbnVtYmVyX29mX3Nsb3RzOwogCXU4IHNsb3RfZGV2aWNlOwogCXU4IHNsb3RfbnVtYmVyOwpAQCAtNjk0LDcgKzY2OSw3IEBACiAJCQlzbG90LT5jYXBhYmlsaXRpZXMgfD0gUENJU0xPVF82NF9CSVRfU1VQUE9SVEVEOwogCQlpZiAoaXNfc2xvdDY2bWh6KHNsb3QpKQogCQkJc2xvdC0+Y2FwYWJpbGl0aWVzIHw9IFBDSVNMT1RfNjZfTUhaX1NVUFBPUlRFRDsKLQkJaWYgKGN0cmwtPnNwZWVkID09IFBDSV9TUEVFRF82Nk1IeikKKwkJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopCiAJCQlzbG90LT5jYXBhYmlsaXRpZXMgfD0gUENJU0xPVF82Nl9NSFpfT1BFUkFUSU9OOwogCiAJCWN0cmxfc2xvdCA9CkBAIC04NDQsNiArODE5LDcgQEAKIAl1MzIgcmM7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7CiAJc3RydWN0IHBjaV9mdW5jICpmdW5jOworCXN0cnVjdCBwY2lfYnVzICpidXM7CiAJaW50IGVycjsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtODUyLDYgKzgyOCw3IEBACiAJCQlwY2lfbmFtZShwZGV2KSwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CisJYnVzID0gcGRldi0+c3Vib3JkaW5hdGU7CiAKIAkvKiBOZWVkIHRvIHJlYWQgVklEIGVhcmx5IGIvYyBpdCdzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBDUFEgYW5kIElOVEMKIAkgKiBkaXNjb3ZlcnkKQEAgLTkyOSwyMiArOTA2LDIyIEBACiAJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDQxLCAmYnVzX2NhcCk7CiAJCQlpZiAoYnVzX2NhcCAmIDB4ODApIHsKIAkJCQlkYmcoImJ1cyBtYXggc3VwcG9ydHMgMTMzTUh6IFBDSS1YXG4iKTsKLQkJCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOworCQkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChidXNfY2FwICYgMHg0MCkgewogCQkJCWRiZygiYnVzIG1heCBzdXBwb3J0cyAxMDBNSHogUENJLVhcbiIpOwotCQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CisJCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGJ1c19jYXAgJiAyMCkgewogCQkJCWRiZygiYnVzIG1heCBzdXBwb3J0cyA2Nk1IeiBQQ0ktWFxuIik7Ci0JCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOworCQkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGJ1c19jYXAgJiAxMCkgewogCQkJCWRiZygiYnVzIG1heCBzdXBwb3J0cyA2Nk1IeiBQQ0lcbiIpOwotCQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfNjZNSHo7CisJCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6OwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC05NTUsNyArOTMyLDcgQEAKIAkJY2FzZSBQQ0lfU1VCX0hQQ19JRDoKIAkJCS8qIE9yaWdpbmFsIDY1MDAvNzAwMCBpbXBsZW1lbnRhdGlvbiAqLwogCQkJY3RybC0+c2xvdF9zd2l0Y2hfdHlwZSA9IDE7Ci0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzMzTUh6OworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzMzTUh6OwogCQkJY3RybC0+cHVzaF9idXR0b24gPSAwOwogCQkJY3RybC0+cGNpX2NvbmZpZ19zcGFjZSA9IDE7CiAJCQljdHJsLT5kZWZlYXR1cmVfUEhQID0gMTsKQEAgLTk2Niw3ICs5NDMsNyBAQAogCQkJLyogRmlyc3QgUHVzaGJ1dHRvbiBpbXBsZW1lbnRhdGlvbiAqLwogCQkJY3RybC0+cHVzaF9mbGFnID0gMTsKIAkJCWN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPSAxOwotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8zM01IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKIAkJCWN0cmwtPnB1c2hfYnV0dG9uID0gMTsKIAkJCWN0cmwtPnBjaV9jb25maWdfc3BhY2UgPSAxOwogCQkJY3RybC0+ZGVmZWF0dXJlX1BIUCA9IDE7CkBAIC05NzYsNyArOTUzLDcgQEAKIAkJY2FzZSBQQ0lfU1VCX0hQQ19JRF9JTlRDOgogCQkJLyogVGhpcmQgcGFydHkgKDY1MDAvNzAwMCkgKi8KIAkJCWN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPSAxOwotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8zM01IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKIAkJCWN0cmwtPnB1c2hfYnV0dG9uID0gMDsKIAkJCWN0cmwtPnBjaV9jb25maWdfc3BhY2UgPSAxOwogCQkJY3RybC0+ZGVmZWF0dXJlX1BIUCA9IDE7CkBAIC05ODcsNyArOTY0LDcgQEAKIAkJCS8qIEZpcnN0IDY2IE1oeiBpbXBsZW1lbnRhdGlvbiAqLwogCQkJY3RybC0+cHVzaF9mbGFnID0gMTsKIAkJCWN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPSAxOwotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF82Nk1IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKIAkJCWN0cmwtPnB1c2hfYnV0dG9uID0gMTsKIAkJCWN0cmwtPnBjaV9jb25maWdfc3BhY2UgPSAxOwogCQkJY3RybC0+ZGVmZWF0dXJlX1BIUCA9IDE7CkBAIC05OTgsNyArOTc1LDcgQEAKIAkJCS8qIEZpcnN0IFBDSS1YIGltcGxlbWVudGF0aW9uLCAxMDBNSHogKi8KIAkJCWN0cmwtPnB1c2hfZmxhZyA9IDE7CiAJCQljdHJsLT5zbG90X3N3aXRjaF90eXBlID0gMTsKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CiAJCQljdHJsLT5wdXNoX2J1dHRvbiA9IDE7CiAJCQljdHJsLT5wY2lfY29uZmlnX3NwYWNlID0gMTsKIAkJCWN0cmwtPmRlZmVhdHVyZV9QSFAgPSAxOwpAQCAtMTAxNSw5ICs5OTIsOSBAQAogCWNhc2UgUENJX1ZFTkRPUl9JRF9JTlRFTDoKIAkJLyogQ2hlY2sgZm9yIHNwZWVkIGNhcGFiaWxpdHkgKDA9MzMsIDE9NjYpICovCiAJCWlmIChzdWJzeXN0ZW1fZGV2aWNlaWQgJiAweDAwMDEpCi0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzY2TUh6OworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6OwogCQllbHNlCi0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzMzTUh6OworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzMzTUh6OwogCiAJCS8qIENoZWNrIGZvciBwdXNoIGJ1dHRvbiAqLwogCQlpZiAoc3Vic3lzdGVtX2RldmljZWlkICYgMHgwMDAyKQpAQCAtMTA3OSw3ICsxMDU2LDcgQEAKIAkJCQkJcGRldi0+YnVzLT5udW1iZXIpOwogCiAJZGJnKCJIb3RwbHVnIGNvbnRyb2xsZXIgY2FwYWJpbGl0aWVzOlxuIik7Ci0JZGJnKCIgICAgc3BlZWRfY2FwYWJpbGl0eSAgICAgICAlZFxuIiwgY3RybC0+c3BlZWRfY2FwYWJpbGl0eSk7CisJZGJnKCIgICAgc3BlZWRfY2FwYWJpbGl0eSAgICAgICAlZFxuIiwgYnVzLT5tYXhfYnVzX3NwZWVkKTsKIAlkYmcoIiAgICBzbG90X3N3aXRjaF90eXBlICAgICAgICVzXG4iLCBjdHJsLT5zbG90X3N3aXRjaF90eXBlID8KIAkJCQkJInN3aXRjaCBwcmVzZW50IiA6ICJubyBzd2l0Y2giKTsKIAlkYmcoIiAgICBkZWZlYXR1cmVfUEhQICAgICAgICAgICVzXG4iLCBjdHJsLT5kZWZlYXR1cmVfUEhQID8KQEAgLTExNDIsNyArMTExOSw3IEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIDY2TWh6IG9wZXJhdGlvbiAqLwotCWN0cmwtPnNwZWVkID0gZ2V0X2NvbnRyb2xsZXJfc3BlZWQoY3RybCk7CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gZ2V0X2NvbnRyb2xsZXJfc3BlZWQoY3RybCk7CiAKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCmluZGV4IDBmZjY4OWEuLmU0MzkwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKQEAgLTExMzAsMTIgKzExMzAsMTMgQEAKIHN0YXRpYyB1OCBzZXRfY29udHJvbGxlcl9zcGVlZChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgdTggYWRhcHRlcl9zcGVlZCwgdTggaHBfc2xvdCkKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2J1czsKIAl1OCByZWc7CiAJdTggc2xvdF9wb3dlciA9IHJlYWRiKGN0cmwtPmhwY19yZWcgKyBTTE9UX1BPV0VSKTsKIAl1MTYgcmVnMTY7CiAJdTMyIGxlZHMgPSByZWFkbChjdHJsLT5ocGNfcmVnICsgTEVEX0NPTlRST0wpOwogCi0JaWYgKGN0cmwtPnNwZWVkID09IGFkYXB0ZXJfc3BlZWQpCisJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCA9PSBhZGFwdGVyX3NwZWVkKQogCQlyZXR1cm4gMDsKIAogCS8qIFdlIGRvbid0IGFsbG93IGZyZXEvbW9kZSBjaGFuZ2VzIGlmIHdlIGZpbmQgYW5vdGhlciBhZGFwdGVyIHJ1bm5pbmcKQEAgLTExNTIsNyArMTE1Myw3IEBACiAJCSAqIGxvd2VyIHNwZWVkL21vZGUsIHdlIGFsbG93IHRoZSBuZXcgYWRhcHRlciB0byBmdW5jdGlvbiBhdAogCQkgKiB0aGlzIHJhdGUgaWYgc3VwcG9ydGVkCiAJCSAqLwotCQlpZiAoY3RybC0+c3BlZWQgPCBhZGFwdGVyX3NwZWVkKQorCQlpZiAoYnVzLT5jdXJfYnVzX3NwZWVkIDwgYWRhcHRlcl9zcGVlZCkKIAkJCXJldHVybiAwOwogCiAJCXJldHVybiAxOwpAQCAtMTE2MSwyMCArMTE2MiwyMCBAQAogCS8qIElmIHRoZSBjb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydCBmcmVxL21vZGUgY2hhbmdlcyBhbmQgdGhlCiAJICogY29udHJvbGxlciBpcyBydW5uaW5nIGF0IGEgaGlnaGVyIG1vZGUsIHdlIGJhaWwKIAkgKi8KLQlpZiAoKGN0cmwtPnNwZWVkID4gYWRhcHRlcl9zcGVlZCkgJiYgKCFjdHJsLT5wY2l4X3NwZWVkX2NhcGFiaWxpdHkpKQorCWlmICgoYnVzLT5jdXJfYnVzX3NwZWVkID4gYWRhcHRlcl9zcGVlZCkgJiYgKCFjdHJsLT5wY2l4X3NwZWVkX2NhcGFiaWxpdHkpKQogCQlyZXR1cm4gMTsKIAogCS8qIEJ1dCB3ZSBhbGxvdyB0aGUgYWRhcHRlciB0byBydW4gYXQgYSBsb3dlciByYXRlIGlmIHBvc3NpYmxlICovCi0JaWYgKChjdHJsLT5zcGVlZCA8IGFkYXB0ZXJfc3BlZWQpICYmICghY3RybC0+cGNpeF9zcGVlZF9jYXBhYmlsaXR5KSkKKwlpZiAoKGJ1cy0+Y3VyX2J1c19zcGVlZCA8IGFkYXB0ZXJfc3BlZWQpICYmICghY3RybC0+cGNpeF9zcGVlZF9jYXBhYmlsaXR5KSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBXZSB0cnkgdG8gc2V0IHRoZSBtYXggc3BlZWQgc3VwcG9ydGVkIGJ5IGJvdGggdGhlIGFkYXB0ZXIgYW5kCiAJICogY29udHJvbGxlcgogCSAqLwotCWlmIChjdHJsLT5zcGVlZF9jYXBhYmlsaXR5IDwgYWRhcHRlcl9zcGVlZCkgewotCQlpZiAoY3RybC0+c3BlZWQgPT0gY3RybC0+c3BlZWRfY2FwYWJpbGl0eSkKKwlpZiAoYnVzLT5tYXhfYnVzX3NwZWVkIDwgYWRhcHRlcl9zcGVlZCkgeworCQlpZiAoYnVzLT5jdXJfYnVzX3NwZWVkID09IGJ1cy0+bWF4X2J1c19zcGVlZCkKIAkJCXJldHVybiAwOwotCQlhZGFwdGVyX3NwZWVkID0gY3RybC0+c3BlZWRfY2FwYWJpbGl0eTsKKwkJYWRhcHRlcl9zcGVlZCA9IGJ1cy0+bWF4X2J1c19zcGVlZDsKIAl9CiAKIAl3cml0ZWwoMHgwTCwgY3RybC0+aHBjX3JlZyArIExFRF9DT05UUk9MKTsKQEAgLTEyMjksOCArMTIzMCw4IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGN0cmwtPnBjaV9kZXYsIDB4NDMsIHJlZyk7CiAKIAkvKiBPbmx5IGlmIG1vZGUgY2hhbmdlLi4uKi8KLQlpZiAoKChjdHJsLT5zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopICYmIChhZGFwdGVyX3NwZWVkID09IFBDSV9TUEVFRF82Nk1Iel9QQ0lYKSkgfHwKLQkJKChjdHJsLT5zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHpfUENJWCkgJiYgKGFkYXB0ZXJfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KSkpIAorCWlmICgoKGJ1cy0+Y3VyX2J1c19zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopICYmIChhZGFwdGVyX3NwZWVkID09IFBDSV9TUEVFRF82Nk1Iel9QQ0lYKSkgfHwKKwkJKChidXMtPmN1cl9idXNfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6X1BDSVgpICYmIChhZGFwdGVyX3NwZWVkID09IFBDSV9TUEVFRF82Nk1IeikpKSAKIAkJCXNldF9TT0dPKGN0cmwpOwogCiAJd2FpdF9mb3JfY3RybF9pcnEoY3RybCk7CkBAIC0xMjQzLDcgKzEyNDQsNyBAQAogCXNldF9TT0dPKGN0cmwpOwogCXdhaXRfZm9yX2N0cmxfaXJxKGN0cmwpOwogCi0JY3RybC0+c3BlZWQgPSBhZGFwdGVyX3NwZWVkOworCWJ1cy0+Y3VyX2J1c19zcGVlZCA9IGFkYXB0ZXJfc3BlZWQ7CiAJc2xvdCA9IGNwcWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAogCWluZm8oIlN1Y2Nlc3NmdWxseSBjaGFuZ2VkIGZyZXF1ZW5jeS9tb2RlIGZvciBhZGFwdGVyIGluIHNsb3QgJWRcbiIsCkBAIC0xMjY5LDYgKzEyNzAsNyBAQAogICovCiBzdGF0aWMgdTMyIGJvYXJkX3JlcGxhY2VkKHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9idXM7CiAJdTggaHBfc2xvdDsKIAl1OCB0ZW1wX2J5dGU7CiAJdTggYWRhcHRlcl9zcGVlZDsKQEAgLTEzMDksNyArMTMxMSw3IEBACiAJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKIAogCQlhZGFwdGVyX3NwZWVkID0gZ2V0X2FkYXB0ZXJfc3BlZWQoY3RybCwgaHBfc2xvdCk7Ci0JCWlmIChjdHJsLT5zcGVlZCAhPSBhZGFwdGVyX3NwZWVkKQorCQlpZiAoYnVzLT5jdXJfYnVzX3NwZWVkICE9IGFkYXB0ZXJfc3BlZWQpCiAJCQlpZiAoc2V0X2NvbnRyb2xsZXJfc3BlZWQoY3RybCwgYWRhcHRlcl9zcGVlZCwgaHBfc2xvdCkpCiAJCQkJcmMgPSBXUk9OR19CVVNfRlJFUVVFTkNZOwogCkBAIC0xNDI2LDYgKzE0MjgsNyBAQAogCXUzMiB0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKIAl1MzIgcmMgPSAwOwogCXN0cnVjdCBwY2lfZnVuYyAqbmV3X3Nsb3QgPSBOVUxMOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfYnVzOwogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7CiAJc3RydWN0IHJlc291cmNlX2xpc3RzIHJlc19saXN0czsKIApAQCAtMTQ1Niw3ICsxNDU5LDcgQEAKIAl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7CiAKIAlhZGFwdGVyX3NwZWVkID0gZ2V0X2FkYXB0ZXJfc3BlZWQoY3RybCwgaHBfc2xvdCk7Ci0JaWYgKGN0cmwtPnNwZWVkICE9IGFkYXB0ZXJfc3BlZWQpCisJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCAhPSBhZGFwdGVyX3NwZWVkKQogCQlpZiAoc2V0X2NvbnRyb2xsZXJfc3BlZWQoY3RybCwgYWRhcHRlcl9zcGVlZCwgaHBfc2xvdCkpCiAJCQlyYyA9IFdST05HX0JVU19GUkVRVUVOQ1k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYwppbmRleCA3NDg1ZmZkLi5kOTM0ZGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jCkBAIC0zOTUsODkgKzM5NSw0MCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCitzdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBzbG90ICpzbG90KQogewotCWludCByYyA9IC1FTk9ERVY7Ci0Jc3RydWN0IHNsb3QgKnBzbG90OworCWludCByYzsKIAl1OCBtb2RlID0gMDsKKwllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQ7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHNsb3QtPmhvdHBsdWdfc2xvdC0+cGNpX3Nsb3QtPmJ1czsKIAotCWRlYnVnKCIlcyAtIEVudHJ5IGhvdHBsdWdfc2xvdFslcF0gcHZhbHVlWyVwXVxuIiwgX19mdW5jX18sCi0JCWhvdHBsdWdfc2xvdCwgdmFsdWUpOworCWRlYnVnKCIlcyAtIEVudHJ5IHNsb3RbJXBdXG4iLCBfX2Z1bmNfXywgc2xvdCk7CiAKIAlpYm1waHBfbG9ja19vcGVyYXRpb25zKCk7CisJbW9kZSA9IHNsb3QtPnN1cHBvcnRlZF9idXNfbW9kZTsKKwlzcGVlZCA9IHNsb3QtPnN1cHBvcnRlZF9zcGVlZDsgCisJaWJtcGhwX3VubG9ja19vcGVyYXRpb25zKCk7CiAKLQlpZiAoaG90cGx1Z19zbG90KSB7Ci0JCXBzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCQlpZiAocHNsb3QpIHsKLQkJCXJjID0gMDsKLQkJCW1vZGUgPSBwc2xvdC0+c3VwcG9ydGVkX2J1c19tb2RlOwotCQkJKnZhbHVlID0gcHNsb3QtPnN1cHBvcnRlZF9zcGVlZDsgCi0JCQlzd2l0Y2ggKCp2YWx1ZSkgewotCQkJY2FzZSBCVVNfU1BFRURfMzM6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJVU19TUEVFRF82NjoKLQkJCQlpZiAobW9kZSA9PSBCVVNfTU9ERV9QQ0lYKSAKLQkJCQkJKnZhbHVlICs9IDB4MDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEJVU19TUEVFRF8xMDA6Ci0JCQljYXNlIEJVU19TUEVFRF8xMzM6Ci0JCQkJKnZhbHVlID0gcHNsb3QtPnN1cHBvcnRlZF9zcGVlZCArIDB4MDE7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIE5vdGUgKHdpbGwgbmVlZCB0byBjaGFuZ2UpOiB0aGVyZSB3b3VsZCBiZSBzb29uIDI1NiwgNTEyIGFsc28gKi8KLQkJCQlyYyA9IC1FTk9ERVY7Ci0JCQl9Ci0JCX0KKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBCVVNfU1BFRURfMzM6CisJCWJyZWFrOworCWNhc2UgQlVTX1NQRUVEXzY2OgorCQlpZiAobW9kZSA9PSBCVVNfTU9ERV9QQ0lYKSAKKwkJCXNwZWVkICs9IDB4MDE7CisJCWJyZWFrOworCWNhc2UgQlVTX1NQRUVEXzEwMDoKKwljYXNlIEJVU19TUEVFRF8xMzM6CisJCXNwZWVkICs9IDB4MDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5vdGUgKHdpbGwgbmVlZCB0byBjaGFuZ2UpOiB0aGVyZSB3b3VsZCBiZSBzb29uIDI1NiwgNTEyIGFsc28gKi8KKwkJcmMgPSAtRU5PREVWOwogCX0KIAotCWlibXBocF91bmxvY2tfb3BlcmF0aW9ucygpOwotCWRlYnVnKCIlcyAtIEV4aXQgcmNbJWRdIHZhbHVlWyV4XVxuIiwgX19mdW5jX18sIHJjLCAqdmFsdWUpOwotCXJldHVybiByYzsKLX0KKwlpZiAoIXJjKQorCQlidXMtPm1heF9idXNfc3BlZWQgPSBzcGVlZDsKIAotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0JaW50IHJjID0gLUVOT0RFVjsKLQlzdHJ1Y3Qgc2xvdCAqcHNsb3Q7Ci0JdTggbW9kZSA9IDA7Ci0KLQlkZWJ1ZygiJXMgLSBFbnRyeSBob3RwbHVnX3Nsb3RbJXBdIHB2YWx1ZVslcF1cbiIsIF9fZnVuY19fLAotCQlob3RwbHVnX3Nsb3QsIHZhbHVlKTsKLQotCWlibXBocF9sb2NrX29wZXJhdGlvbnMoKTsKLQotCWlmIChob3RwbHVnX3Nsb3QpIHsKLQkJcHNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0JCWlmIChwc2xvdCkgewotCQkJcmMgPSBnZXRfY3VyX2J1c19pbmZvKCZwc2xvdCk7Ci0JCQlpZiAoIXJjKSB7Ci0JCQkJbW9kZSA9IHBzbG90LT5idXNfb24tPmN1cnJlbnRfYnVzX21vZGU7Ci0JCQkJKnZhbHVlID0gcHNsb3QtPmJ1c19vbi0+Y3VycmVudF9zcGVlZDsKLQkJCQlzd2l0Y2ggKCp2YWx1ZSkgewotCQkJCWNhc2UgQlVTX1NQRUVEXzMzOgotCQkJCQlicmVhazsKLQkJCQljYXNlIEJVU19TUEVFRF82NjoKLQkJCQkJaWYgKG1vZGUgPT0gQlVTX01PREVfUENJWCkgCi0JCQkJCQkqdmFsdWUgKz0gMHgwMTsKLQkJCQkJZWxzZSBpZiAobW9kZSA9PSBCVVNfTU9ERV9QQ0kpCi0JCQkJCQk7Ci0JCQkJCWVsc2UKLQkJCQkJCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwotCQkJCQlicmVhazsKLQkJCQljYXNlIEJVU19TUEVFRF8xMDA6Ci0JCQkJY2FzZSBCVVNfU1BFRURfMTMzOgotCQkJCQkqdmFsdWUgKz0gMHgwMTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJLyogTm90ZSBvZiBjaGFuZ2U6IHRoZXJlIHdvdWxkIGFsc28gYmUgMjU2LCA1MTIgc29vbiAqLwotCQkJCQlyYyA9IC1FTk9ERVY7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JaWJtcGhwX3VubG9ja19vcGVyYXRpb25zKCk7Ci0JZGVidWcoIiVzIC0gRXhpdCByY1slZF0gdmFsdWVbJXhdXG4iLCBfX2Z1bmNfXywgcmMsICp2YWx1ZSk7CisJZGVidWcoIiVzIC0gRXhpdCByY1slZF0gc3BlZWRbJXhdXG4iLCBfX2Z1bmNfXywgcmMsIHNwZWVkKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTU3Miw2ICs1MjMsNyBAQAogCQlpZiAoc2xvdF9jdXItPmJ1c19vbi0+Y3VycmVudF9zcGVlZCA9PSAweEZGKSAKIAkJCWlmIChnZXRfY3VyX2J1c19pbmZvKCZzbG90X2N1cikpIAogCQkJCXJldHVybiAtMTsKKwkJZ2V0X21heF9idXNfc3BlZWQoc2xvdF9jdXIpOwogCiAJCWlmIChzbG90X2N1ci0+Y3RybC0+b3B0aW9ucyA9PSAweEZGKQogCQkJaWYgKGdldF9ocGNfb3B0aW9ucyhzbG90X2N1ciwgJnNsb3RfY3VyLT5jdHJsLT5vcHRpb25zKSkKQEAgLTY1NSw2ICs2MDcsNyBAQAogaW50IGlibXBocF91cGRhdGVfc2xvdF9pbmZvKHN0cnVjdCBzbG90ICpzbG90X2N1cikKIHsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8gKmluZm87CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHNsb3RfY3VyLT5ob3RwbHVnX3Nsb3QtPnBjaV9zbG90LT5idXM7CiAJaW50IHJjOwogCXU4IGJ1c19zcGVlZDsKIAl1OCBtb2RlOwpAQCAtNzAwLDggKzY1Myw3IEBACiAJCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKIAl9CiAKLQlpbmZvLT5jdXJfYnVzX3NwZWVkID0gYnVzX3NwZWVkOwotCWluZm8tPm1heF9idXNfc3BlZWQgPSBzbG90X2N1ci0+aG90cGx1Z19zbG90LT5pbmZvLT5tYXhfYnVzX3NwZWVkOworCWJ1cy0+Y3VyX2J1c19zcGVlZCA9IGJ1c19zcGVlZDsKIAkvLyBUbyBkbzogYnVzX25hbWVzIAogCQogCXJjID0gcGNpX2hwX2NoYW5nZV9zbG90X2luZm8oc2xvdF9jdXItPmhvdHBsdWdfc2xvdCwgaW5mbyk7CkBAIC0xMzI2LDggKzEyNzgsNiBAQAogCS5nZXRfYXR0ZW50aW9uX3N0YXR1cyA9CQlnZXRfYXR0ZW50aW9uX3N0YXR1cywKIAkuZ2V0X2xhdGNoX3N0YXR1cyA9CQlnZXRfbGF0Y2hfc3RhdHVzLAogCS5nZXRfYWRhcHRlcl9zdGF0dXMgPQkJZ2V0X2FkYXB0ZXJfcHJlc2VudCwKLQkuZ2V0X21heF9idXNfc3BlZWQgPQkJZ2V0X21heF9idXNfc3BlZWQsCi0JLmdldF9jdXJfYnVzX3NwZWVkID0JCWdldF9jdXJfYnVzX3NwZWVkLAogLyoJLmdldF9tYXhfYWRhcHRlcl9zcGVlZCA9CWdldF9tYXhfYWRhcHRlcl9zcGVlZCwKIAkuZ2V0X2J1c19uYW1lX3N0YXR1cyA9CQlnZXRfYnVzX25hbWUsCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCmluZGV4IGMxYWJhYzguLjViZWNiZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiBpbnQgX19pbml0IGlibXBocF9hY2Nlc3NfZWJkYSAodm9pZCkKIHsKLQl1OCBmb3JtYXQsIG51bV9jdGxycywgcmlvX2NvbXBsZXRlLCBoc19jb21wbGV0ZTsKKwl1OCBmb3JtYXQsIG51bV9jdGxycywgcmlvX2NvbXBsZXRlLCBoc19jb21wbGV0ZSwgZWJkYV9zejsKIAl1MTYgZWJkYV9zZWcsIG51bV9lbnRyaWVzLCBuZXh0X29mZnNldCwgb2Zmc2V0LCBibGtfaWQsIHN1Yl9hZGRyLCByZSwgcmNfaWQsIHJlX2lkLCBiYXNlOwogCWludCByYyA9IDA7CiAKQEAgLTI2MCw3ICsyNjAsMTYgQEAKIAlpb3VubWFwIChpb19tZW0pOwogCWRlYnVnICgicmV0dXJuZWQgZWJkYSBzZWdtZW50OiAleFxuIiwgZWJkYV9zZWcpOwogCQotCWlvX21lbSA9IGlvcmVtYXAoZWJkYV9zZWc8PDQsIDEwMjQpOworCWlvX21lbSA9IGlvcmVtYXAoZWJkYV9zZWc8PDQsIDEpOworCWlmICghaW9fbWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKwllYmRhX3N6ID0gcmVhZGIoaW9fbWVtKTsKKwlpb3VubWFwKGlvX21lbSk7CisJZGVidWcoImViZGEgc2l6ZTogJWQoS2lCKVxuIiwgZWJkYV9zeik7CisJaWYgKGViZGFfc3ogPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpb19tZW0gPSBpb3JlbWFwKGViZGFfc2VnPDw0LCAoZWJkYV9zeiAqIDEwMjQpKTsKIAlpZiAoIWlvX21lbSApCiAJCXJldHVybiAtRU5PTUVNOwogCW5leHRfb2Zmc2V0ID0gMHgxODA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jCmluZGV4IGM3MDg0ZjAuLjFhYWYzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSAiaWJtcGhwLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMKaW5kZXggMzgxODNhNS4uNzI4YjExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMKQEAgLTY0LDMyICs2NCw2IEBACiBzdGF0aWMgTElTVF9IRUFEKHBjaV9ob3RwbHVnX3Nsb3RfbGlzdCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9ocF9tdXRleCk7CiAKLS8qIHRoZXNlIHN0cmluZ3MgbWF0Y2ggdXAgd2l0aCB0aGUgdmFsdWVzIGluIHBjaV9idXNfc3BlZWQgKi8KLXN0YXRpYyBjaGFyICpwY2lfYnVzX3NwZWVkX3N0cmluZ3NbXSA9IHsKLQkiMzMgTUh6IFBDSSIsCQkvKiAweDAwICovCi0JIjY2IE1IeiBQQ0kiLAkJLyogMHgwMSAqLwotCSI2NiBNSHogUENJLVgiLAkJLyogMHgwMiAqLwotCSIxMDAgTUh6IFBDSS1YIiwJLyogMHgwMyAqLwotCSIxMzMgTUh6IFBDSS1YIiwJLyogMHgwNCAqLwotCU5VTEwsCQkJLyogMHgwNSAqLwotCU5VTEwsCQkJLyogMHgwNiAqLwotCU5VTEwsCQkJLyogMHgwNyAqLwotCU5VTEwsCQkJLyogMHgwOCAqLwotCSI2NiBNSHogUENJLVggMjY2IiwJLyogMHgwOSAqLwotCSIxMDAgTUh6IFBDSS1YIDI2NiIsCS8qIDB4MGEgKi8KLQkiMTMzIE1IeiBQQ0ktWCAyNjYiLAkvKiAweDBiICovCi0JTlVMTCwJCQkvKiAweDBjICovCi0JTlVMTCwJCQkvKiAweDBkICovCi0JTlVMTCwJCQkvKiAweDBlICovCi0JTlVMTCwJCQkvKiAweDBmICovCi0JTlVMTCwJCQkvKiAweDEwICovCi0JIjY2IE1IeiBQQ0ktWCA1MzMiLAkvKiAweDExICovCi0JIjEwMCBNSHogUENJLVggNTMzIiwJLyogMHgxMiAqLwotCSIxMzMgTUh6IFBDSS1YIDUzMyIsCS8qIDB4MTMgKi8KLQkiMi41IEdUL3MgUENJZSIsCS8qIDB4MTQgKi8KLQkiNS4wIEdUL3MgUENJZSIsCS8qIDB4MTUgKi8KLX07Ci0KICNpZmRlZiBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSQogZXh0ZXJuIGludCBjcGNpX2hvdHBsdWdfaW5pdChpbnQgZGVidWcpOwogZXh0ZXJuIHZvaWQgY3BjaV9ob3RwbHVnX2V4aXQodm9pZCk7CkBAIC0xMTgsOCArOTIsNiBAQAogR0VUX1NUQVRVUyhhdHRlbnRpb25fc3RhdHVzLCB1OCkKIEdFVF9TVEFUVVMobGF0Y2hfc3RhdHVzLCB1OCkKIEdFVF9TVEFUVVMoYWRhcHRlcl9zdGF0dXMsIHU4KQotR0VUX1NUQVRVUyhtYXhfYnVzX3NwZWVkLCBlbnVtIHBjaV9idXNfc3BlZWQpCi1HRVRfU1RBVFVTKGN1cl9idXNfc3BlZWQsIGVudW0gcGNpX2J1c19zcGVlZCkKIAogc3RhdGljIHNzaXplX3QgcG93ZXJfcmVhZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwgY2hhciAqYnVmKQogewpAQCAtMjYzLDYwICsyMzUsNiBAQAogCS5zaG93ID0gcHJlc2VuY2VfcmVhZF9maWxlLAogfTsKIAotc3RhdGljIGNoYXIgKnVua25vd25fc3BlZWQgPSAiVW5rbm93biBidXMgc3BlZWQiOwotCi1zdGF0aWMgc3NpemVfdCBtYXhfYnVzX3NwZWVkX3JlYWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsIGNoYXIgKmJ1ZikKLXsKLQljaGFyICpzcGVlZF9zdHJpbmc7Ci0JaW50IHJldHZhbDsKLQllbnVtIHBjaV9idXNfc3BlZWQgdmFsdWU7Ci0JCi0JcmV0dmFsID0gZ2V0X21heF9idXNfc3BlZWQoc2xvdC0+aG90cGx1ZywgJnZhbHVlKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXQ7Ci0KLQlpZiAodmFsdWUgPT0gUENJX1NQRUVEX1VOS05PV04pCi0JCXNwZWVkX3N0cmluZyA9IHVua25vd25fc3BlZWQ7Ci0JZWxzZQotCQlzcGVlZF9zdHJpbmcgPSBwY2lfYnVzX3NwZWVkX3N0cmluZ3NbdmFsdWVdOwotCQotCXJldHZhbCA9IHNwcmludGYgKGJ1ZiwgIiVzXG4iLCBzcGVlZF9zdHJpbmcpOwotCi1leGl0OgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Nsb3RfYXR0cmlidXRlIGhvdHBsdWdfc2xvdF9hdHRyX21heF9idXNfc3BlZWQgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAibWF4X2J1c19zcGVlZCIsIC5tb2RlID0gU19JRlJFRyB8IFNfSVJVR099LAotCS5zaG93ID0gbWF4X2J1c19zcGVlZF9yZWFkX2ZpbGUsCi19OwotCi1zdGF0aWMgc3NpemVfdCBjdXJfYnVzX3NwZWVkX3JlYWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsIGNoYXIgKmJ1ZikKLXsKLQljaGFyICpzcGVlZF9zdHJpbmc7Ci0JaW50IHJldHZhbDsKLQllbnVtIHBjaV9idXNfc3BlZWQgdmFsdWU7Ci0KLQlyZXR2YWwgPSBnZXRfY3VyX2J1c19zcGVlZChzbG90LT5ob3RwbHVnLCAmdmFsdWUpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXhpdDsKLQotCWlmICh2YWx1ZSA9PSBQQ0lfU1BFRURfVU5LTk9XTikKLQkJc3BlZWRfc3RyaW5nID0gdW5rbm93bl9zcGVlZDsKLQllbHNlCi0JCXNwZWVkX3N0cmluZyA9IHBjaV9idXNfc3BlZWRfc3RyaW5nc1t2YWx1ZV07Ci0JCi0JcmV0dmFsID0gc3ByaW50ZiAoYnVmLCAiJXNcbiIsIHNwZWVkX3N0cmluZyk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUgaG90cGx1Z19zbG90X2F0dHJfY3VyX2J1c19zcGVlZCA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJjdXJfYnVzX3NwZWVkIiwgLm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHT30sCi0JLnNob3cgPSBjdXJfYnVzX3NwZWVkX3JlYWRfZmlsZSwKLX07Ci0KIHN0YXRpYyBzc2l6ZV90IHRlc3Rfd3JpdGVfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9zbG90LCBjb25zdCBjaGFyICpidWYsCiAJCXNpemVfdCBjb3VudCkKIHsKQEAgLTM5MSwyNiArMzA5LDYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGhhc19tYXhfYnVzX3NwZWVkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpwY2lfc2xvdCkKLXsKLQlzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90ID0gcGNpX3Nsb3QtPmhvdHBsdWc7Ci0JaWYgKCghc2xvdCkgfHwgKCFzbG90LT5vcHMpKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHNsb3QtPm9wcy0+Z2V0X21heF9idXNfc3BlZWQpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgaGFzX2N1cl9idXNfc3BlZWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9zbG90KQotewotCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QgPSBwY2lfc2xvdC0+aG90cGx1ZzsKLQlpZiAoKCFzbG90KSB8fCAoIXNsb3QtPm9wcykpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoc2xvdC0+b3BzLT5nZXRfY3VyX2J1c19zcGVlZCkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgYm9vbCBoYXNfdGVzdF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqcGNpX3Nsb3QpCiB7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCA9IHBjaV9zbG90LT5ob3RwbHVnOwpAQCAtNDU2LDIwICszNTQsNiBAQAogCQkJZ290byBleGl0X2FkYXB0ZXI7CiAJfQogCi0JaWYgKGhhc19tYXhfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpIHsKLQkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJCSZob3RwbHVnX3Nsb3RfYXR0cl9tYXhfYnVzX3NwZWVkLmF0dHIpOwotCQlpZiAocmV0dmFsKQotCQkJZ290byBleGl0X21heF9zcGVlZDsKLQl9Ci0KLQlpZiAoaGFzX2N1cl9idXNfc3BlZWRfZmlsZShzbG90KSkgewotCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZmlsZSgmc2xvdC0+a29iaiwKLQkJCQkJJmhvdHBsdWdfc2xvdF9hdHRyX2N1cl9idXNfc3BlZWQuYXR0cik7Ci0JCWlmIChyZXR2YWwpCi0JCQlnb3RvIGV4aXRfY3VyX3NwZWVkOwotCX0KLQogCWlmIChoYXNfdGVzdF9maWxlKHNsb3QpKSB7CiAJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLAogCQkJCQkgICAmaG90cGx1Z19zbG90X2F0dHJfdGVzdC5hdHRyKTsKQEAgLTQ4MCwxNCArMzY0LDYgQEAKIAlnb3RvIGV4aXQ7CiAKIGV4aXRfdGVzdDoKLQlpZiAoaGFzX2N1cl9idXNfc3BlZWRfZmlsZShzbG90KSkKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJICAmaG90cGx1Z19zbG90X2F0dHJfY3VyX2J1c19zcGVlZC5hdHRyKTsKLWV4aXRfY3VyX3NwZWVkOgotCWlmIChoYXNfbWF4X2J1c19zcGVlZF9maWxlKHNsb3QpKQotCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwKLQkJCQkgICZob3RwbHVnX3Nsb3RfYXR0cl9tYXhfYnVzX3NwZWVkLmF0dHIpOwotZXhpdF9tYXhfc3BlZWQ6CiAJaWYgKGhhc19hZGFwdGVyX2ZpbGUoc2xvdCkpCiAJCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAogCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX3ByZXNlbmNlLmF0dHIpOwpAQCAtNTIzLDE0ICszOTksNiBAQAogCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwKIAkJCQkgICZob3RwbHVnX3Nsb3RfYXR0cl9wcmVzZW5jZS5hdHRyKTsKIAotCWlmIChoYXNfbWF4X2J1c19zcGVlZF9maWxlKHNsb3QpKQotCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwKLQkJCQkgICZob3RwbHVnX3Nsb3RfYXR0cl9tYXhfYnVzX3NwZWVkLmF0dHIpOwotCi0JaWYgKGhhc19jdXJfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX2N1cl9idXNfc3BlZWQuYXR0cik7Ci0KIAlpZiAoaGFzX3Rlc3RfZmlsZShzbG90KSkKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl90ZXN0LmF0dHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKaW5kZXggNTY3NGIyMC4uOTIwZjgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwpAQCAtNjksOCArNjksNiBAQAogc3RhdGljIGludCBnZXRfYXR0ZW50aW9uX3N0YXR1cwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKIHN0YXRpYyBpbnQgZ2V0X2xhdGNoX3N0YXR1cwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKIHN0YXRpYyBpbnQgZ2V0X2FkYXB0ZXJfc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZAkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7Ci1zdGF0aWMgaW50IGdldF9jdXJfYnVzX3NwZWVkCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKTsKIAogLyoqCiAgKiByZWxlYXNlX3Nsb3QgLSBmcmVlIHVwIHRoZSBtZW1vcnkgdXNlZCBieSBhIHNsb3QKQEAgLTExMyw4ICsxMTEsNiBAQAogCW9wcy0+ZGlzYWJsZV9zbG90ID0gZGlzYWJsZV9zbG90OwogCW9wcy0+Z2V0X3Bvd2VyX3N0YXR1cyA9IGdldF9wb3dlcl9zdGF0dXM7CiAJb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMgPSBnZXRfYWRhcHRlcl9zdGF0dXM7Ci0Jb3BzLT5nZXRfbWF4X2J1c19zcGVlZCA9IGdldF9tYXhfYnVzX3NwZWVkOwotCW9wcy0+Z2V0X2N1cl9idXNfc3BlZWQgPSBnZXRfY3VyX2J1c19zcGVlZDsKIAlpZiAoTVJMX1NFTlMoY3RybCkpCiAJCW9wcy0+Z2V0X2xhdGNoX3N0YXR1cyA9IGdldF9sYXRjaF9zdGF0dXM7CiAJaWYgKEFUVE5fTEVEKGN0cmwpKSB7CkBAIC0yMjcsMjcgKzIyMyw2IEBACiAJcmV0dXJuIHBjaWVocF9nZXRfYWRhcHRlcl9zdGF0dXMoc2xvdCwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwKLQkJCQllbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCi0JY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzOiBwaHlzaWNhbF9zbG90ID0gJXNcbiIsCi0JCSBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCXJldHVybiBwY2llaHBfZ2V0X21heF9saW5rX3NwZWVkKHNsb3QsIHZhbHVlKTsKLX0KLQotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0KLQljdHJsX2RiZyhzbG90LT5jdHJsLCAiJXM6IHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwKLQkJIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwotCi0JcmV0dXJuIHBjaWVocF9nZXRfY3VyX2xpbmtfc3BlZWQoc2xvdCwgdmFsdWUpOwotfQotCiBzdGF0aWMgaW50IHBjaWVocF9wcm9iZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKaW5kZXggZDZhYzFiMi4uOWE3ZjI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwpAQCAtMzQxLDYgKzM0MSw3IEBACiAJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9OX1NUQVRFOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlrZnJlZShpbmZvKTsKIAkJZ290byBvdXQ7CiAJfQogCXF1ZXVlX3dvcmsocGNpZWhwX3dxLCAmaW5mby0+d29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCmluZGV4IDEwMDQwZDUuLjQwYjQ4ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCkBAIC00OTIsNiArNDkyLDcgQEAKIAl1MTYgc2xvdF9jbWQ7CiAJdTE2IGNtZF9tYXNrOwogCXUxNiBzbG90X3N0YXR1czsKKwl1MTYgbG5rX3N0YXR1czsKIAlpbnQgcmV0dmFsID0gMDsKIAogCS8qIENsZWFyIHN0aWNreSBwb3dlci1mYXVsdCBiaXQgZnJvbSBwcmV2aW91cyBwb3dlciBmYWlsdXJlcyAqLwpAQCAtNTIzLDYgKzUyNCwxNCBAQAogCWN0cmxfZGJnKGN0cmwsICIlczogU0xPVENUUkwgJXggd3JpdGUgY21kICV4XG4iLCBfX2Z1bmNfXywKIAkJIHBjaV9wY2llX2NhcChjdHJsLT5wY2llLT5wb3J0KSArIFBDSV9FWFBfU0xUQ1RMLCBzbG90X2NtZCk7CiAKKwlyZXR2YWwgPSBwY2llaHBfcmVhZHcoY3RybCwgUENJX0VYUF9MTktTVEEsICZsbmtfc3RhdHVzKTsKKwlpZiAocmV0dmFsKSB7CisJCWN0cmxfZXJyKGN0cmwsICIlczogQ2Fubm90IHJlYWQgTE5LU1RBIHJlZ2lzdGVyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJcGNpZV91cGRhdGVfbGlua19zcGVlZChjdHJsLT5wY2llLT5wb3J0LT5zdWJvcmRpbmF0ZSwgbG5rX3N0YXR1cyk7CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC02MTAsMzcgKzYxOSw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgcGNpZWhwX2dldF9tYXhfbGlua19zcGVlZChzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7Ci0JZW51bSBwY2llX2xpbmtfc3BlZWQgbG5rX3NwZWVkOwotCXUzMglsbmtfY2FwOwotCWludCByZXR2YWwgPSAwOwotCi0JcmV0dmFsID0gcGNpZWhwX3JlYWRsKGN0cmwsIFBDSV9FWFBfTE5LQ0FQLCAmbG5rX2NhcCk7Ci0JaWYgKHJldHZhbCkgewotCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIExOS0NBUCByZWdpc3RlclxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCXN3aXRjaCAobG5rX2NhcCAmIDB4MDAwRikgewotCWNhc2UgMToKLQkJbG5rX3NwZWVkID0gUENJRV8yXzVHQjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlsbmtfc3BlZWQgPSBQQ0lFXzVfMEdCOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlsbmtfc3BlZWQgPSBQQ0lFX0xOS19TUEVFRF9VTktOT1dOOwotCQlicmVhazsKLQl9Ci0KLQkqdmFsdWUgPSBsbmtfc3BlZWQ7Ci0JY3RybF9kYmcoY3RybCwgIk1heCBsaW5rIHNwZWVkID0gJWRcbiIsIGxua19zcGVlZCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCiBpbnQgcGNpZWhwX2dldF9tYXhfbG5rX3dpZHRoKHN0cnVjdCBzbG90ICpzbG90LAogCQkJCSBlbnVtIHBjaWVfbGlua193aWR0aCAqdmFsdWUpCiB7CkBAIC02OTEsMzggKzY2OSw2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotaW50IHBjaWVocF9nZXRfY3VyX2xpbmtfc3BlZWQoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwotCWVudW0gcGNpZV9saW5rX3NwZWVkIGxua19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwotCWludCByZXR2YWwgPSAwOwotCXUxNiBsbmtfc3RhdHVzOwotCi0JcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFBDSV9FWFBfTE5LU1RBLCAmbG5rX3N0YXR1cyk7Ci0JaWYgKHJldHZhbCkgewotCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIExOS1NUQVRVUyByZWdpc3RlclxuIiwKLQkJCSBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0Jc3dpdGNoIChsbmtfc3RhdHVzICYgUENJX0VYUF9MTktTVEFfQ0xTKSB7Ci0JY2FzZSAxOgotCQlsbmtfc3BlZWQgPSBQQ0lFXzJfNUdCOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWxua19zcGVlZCA9IFBDSUVfNV8wR0I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWxua19zcGVlZCA9IFBDSUVfTE5LX1NQRUVEX1VOS05PV047Ci0JCWJyZWFrOwotCX0KLQotCSp2YWx1ZSA9IGxua19zcGVlZDsKLQljdHJsX2RiZyhjdHJsLCAiQ3VycmVudCBsaW5rIHNwZWVkID0gJWRcbiIsIGxua19zcGVlZCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCiBpbnQgcGNpZWhwX2dldF9jdXJfbG5rX3dpZHRoKHN0cnVjdCBzbG90ICpzbG90LAogCQkJCSBlbnVtIHBjaWVfbGlua193aWR0aCAqdmFsdWUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCmluZGV4IDIxNzMzMTAuLjBhMTY0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCkBAIC01MywxNyArNTMsMTUgQEAKIAkJYnVzbnIgPSBwY2lfc2Nhbl9icmlkZ2UocGFyZW50LCBkZXYsIGJ1c25yLCBwYXNzKTsKIAlpZiAoIWRldi0+c3Vib3JkaW5hdGUpCiAJCXJldHVybiAtMTsKLQlwY2lfYnVzX3NpemVfYnJpZGdlcyhkZXYtPnN1Ym9yZGluYXRlKTsKLQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMocGFyZW50KTsKLQlwY2lfZW5hYmxlX2JyaWRnZXMocGFyZW50KTsKLQlwY2lfYnVzX2FkZF9kZXZpY2VzKHBhcmVudCk7CisKIAlyZXR1cm4gMDsKIH0KIAogaW50IHBjaWVocF9jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKLQlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gcF9zbG90LT5jdHJsLT5wY2llLT5wb3J0LT5zdWJvcmRpbmF0ZTsKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gcF9zbG90LT5jdHJsLT5wY2llLT5wb3J0OworCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQgPSBicmlkZ2UtPnN1Ym9yZGluYXRlOwogCWludCBudW0sIGZuOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCkBAIC05NiwxMiArOTQsMjUgQEAKIAkJCQkoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykpIHsKIAkJCXBjaWVocF9hZGRfYnJpZGdlKGRldik7CiAJCX0KKwkJcGNpX2Rldl9wdXQoZGV2KTsKKwl9CisKKwlwY2lfYXNzaWduX3VuYXNzaWduZWRfYnJpZGdlX3Jlc291cmNlcyhicmlkZ2UpOworCisJZm9yIChmbiA9IDA7IGZuIDwgODsgZm4rKykgeworCQlkZXYgPSBwY2lfZ2V0X3Nsb3QocGFyZW50LCBQQ0lfREVWRk4oMCwgZm4pKTsKKwkJaWYgKCFkZXYpCisJCQljb250aW51ZTsKKwkJaWYgKChkZXYtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSB7CisJCQlwY2lfZGV2X3B1dChkZXYpOworCQkJY29udGludWU7CisJCX0KIAkJcGNpX2NvbmZpZ3VyZV9zbG90KGRldik7CiAJCXBjaV9kZXZfcHV0KGRldik7CiAJfQogCi0JcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKHBhcmVudCk7CiAJcGNpX2J1c19hZGRfZGV2aWNlcyhwYXJlbnQpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwppbmRleCBjMTU5MjIzLi5kY2FhZTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCkBAIC0xMzAsMTAgKzEzMCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQorc3RhdGljIGVudW0gcGNpX2J1c19zcGVlZCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3Qgc2xvdCAqc2xvdCkKIHsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IChzdHJ1Y3Qgc2xvdCAqKWhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQorCWVudW0gcGNpX2J1c19zcGVlZCBzcGVlZDsKIAlzd2l0Y2ggKHNsb3QtPnR5cGUpIHsKIAljYXNlIDE6CiAJY2FzZSAyOgpAQCAtMTQxLDMwICsxNDAsMzAgQEAKIAljYXNlIDQ6CiAJY2FzZSA1OgogCWNhc2UgNjoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzMzTUh6OwkvKiBzcGVlZCBmb3IgY2FzZSAxLTYgKi8KKwkJc3BlZWQgPSBQQ0lfU1BFRURfMzNNSHo7CS8qIHNwZWVkIGZvciBjYXNlIDEtNiAqLwogCQlicmVhazsKIAljYXNlIDc6CiAJY2FzZSA4OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHo7CisJCXNwZWVkID0gUENJX1NQRUVEXzY2TUh6OwogCQlicmVhazsKIAljYXNlIDExOgogCWNhc2UgMTQ6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOworCQlzcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOwogCQlicmVhazsKIAljYXNlIDEyOgogCWNhc2UgMTU6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKKwkJc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CiAJCWJyZWFrOwogCWNhc2UgMTM6CiAJY2FzZSAxNjoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOworCQlzcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047CisJCXNwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAJCWJyZWFrOwotCiAJfQotCXJldHVybiAwOworCisJcmV0dXJuIHNwZWVkOwogfQogCiBzdGF0aWMgaW50IGdldF9jaGlsZHJlbl9wcm9wcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBjb25zdCBpbnQgKipkcmNfaW5kZXhlcywKQEAgLTQwOCw2ICs0MDcsOCBAQAogCQlzbG90LT5zdGF0ZSA9IE5PVF9WQUxJRDsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJc2xvdC0+YnVzLT5tYXhfYnVzX3NwZWVkID0gZ2V0X21heF9idXNfc3BlZWQoc2xvdCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyOSw3ICs0MzAsNiBAQAogCS5nZXRfcG93ZXJfc3RhdHVzID0gZ2V0X3Bvd2VyX3N0YXR1cywKIAkuZ2V0X2F0dGVudGlvbl9zdGF0dXMgPSBnZXRfYXR0ZW50aW9uX3N0YXR1cywKIAkuZ2V0X2FkYXB0ZXJfc3RhdHVzID0gZ2V0X2FkYXB0ZXJfc3RhdHVzLAotCS5nZXRfbWF4X2J1c19zcGVlZCA9IGdldF9tYXhfYnVzX3NwZWVkLAogfTsKIAogbW9kdWxlX2luaXQocnBhcGhwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKaW5kZXggOGUyMTBjZDcuLmQyNjI3ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaApAQCAtMzMzLDggKzMzMyw2IEBACiAJaW50ICgqc2V0X2F0dGVudGlvbl9zdGF0dXMpKHN0cnVjdCBzbG90ICpzbG90LCB1OCBzdGF0dXMpOwogCWludCAoKmdldF9sYXRjaF9zdGF0dXMpKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqc3RhdHVzKTsKIAlpbnQgKCpnZXRfYWRhcHRlcl9zdGF0dXMpKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqc3RhdHVzKTsKLQlpbnQgKCpnZXRfbWF4X2J1c19zcGVlZCkoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQpOwotCWludCAoKmdldF9jdXJfYnVzX3NwZWVkKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICpzcGVlZCk7CiAJaW50ICgqZ2V0X2FkYXB0ZXJfc3BlZWQpKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnNwZWVkKTsKIAlpbnQgKCpnZXRfbW9kZTFfRUNDX2NhcCkoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICptb2RlKTsKIAlpbnQgKCpnZXRfcHJvZ19pbnQpKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqcHJvZ19pbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jCmluZGV4IDhhNTIwYTMuLmE1MDYyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKQEAgLTY1LDggKzY1LDYgQEAKIHN0YXRpYyBpbnQgZ2V0X2F0dGVudGlvbl9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiBzdGF0aWMgaW50IGdldF9sYXRjaF9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiBzdGF0aWMgaW50IGdldF9hZGFwdGVyX3N0YXR1cwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZAkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgaG90cGx1Z19zbG90X29wcyBzaHBjaHBfaG90cGx1Z19zbG90X29wcyA9IHsKIAkuc2V0X2F0dGVudGlvbl9zdGF0dXMgPQlzZXRfYXR0ZW50aW9uX3N0YXR1cywKQEAgLTc2LDggKzc0LDYgQEAKIAkuZ2V0X2F0dGVudGlvbl9zdGF0dXMgPQlnZXRfYXR0ZW50aW9uX3N0YXR1cywKIAkuZ2V0X2xhdGNoX3N0YXR1cyA9CWdldF9sYXRjaF9zdGF0dXMsCiAJLmdldF9hZGFwdGVyX3N0YXR1cyA9CWdldF9hZGFwdGVyX3N0YXR1cywKLQkuZ2V0X21heF9idXNfc3BlZWQgPQlnZXRfbWF4X2J1c19zcGVlZCwKLQkuZ2V0X2N1cl9idXNfc3BlZWQgPQlnZXRfY3VyX2J1c19zcGVlZCwKIH07CiAKIC8qKgpAQCAtMjc5LDM3ICsyNzUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwKLQkJCQllbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKLQlpbnQgcmV0dmFsOwotCi0JY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzOiBwaHlzaWNhbF9zbG90ID0gJXNcbiIsCi0JCSBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9tYXhfYnVzX3NwZWVkKHNsb3QsIHZhbHVlKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZCAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKLQlpbnQgcmV0dmFsOwotCi0JY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzOiBwaHlzaWNhbF9zbG90ID0gJXNcbiIsCi0JCSBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCXJldHZhbCA9IHNsb3QtPmhwY19vcHMtPmdldF9jdXJfYnVzX3NwZWVkKHNsb3QsIHZhbHVlKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBpc19zaHBjX2NhcGFibGUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlpZiAoKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1EKSB8fCAoZGV2LT5kZXZpY2UgPT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYwppbmRleCBiOGFiMjc5Li4zYmJhMGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCkBAIC0yODUsMTcgKzI4NSw4IEBACiAJCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwogCX0KIAotCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfY3VyX2J1c19zcGVlZChwX3Nsb3QsICZic3ApOwotCWlmIChyYykgewotCQljdHJsX2VycihjdHJsLCAiQ2FuJ3QgZ2V0IGJ1cyBvcGVyYXRpb24gc3BlZWRcbiIpOwotCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKLQl9Ci0KLQlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X21heF9idXNfc3BlZWQocF9zbG90LCAmbXNwKTsKLQlpZiAocmMpIHsKLQkJY3RybF9lcnIoY3RybCwgIkNhbid0IGdldCBtYXggYnVzIG9wZXJhdGlvbiBzcGVlZFxuIik7Ci0JCW1zcCA9IGJzcDsKLQl9CisJYnNwID0gY3RybC0+cGNpX2Rldi0+YnVzLT5jdXJfYnVzX3NwZWVkOworCW1zcCA9IGN0cmwtPnBjaV9kZXYtPmJ1cy0+bWF4X2J1c19zcGVlZDsKIAogCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBzbG90cyBvciBkZXZpY2VzIG9uIHRoZSBzYW1lIGJ1cyAqLwogCWlmICghbGlzdF9lbXB0eSgmY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUtPmRldmljZXMpKQpAQCAtNDYyLDYgKzQ1Myw3IEBACiAJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9OX1NUQVRFOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlrZnJlZShpbmZvKTsKIAkJZ290byBvdXQ7CiAJfQogCXF1ZXVlX3dvcmsoc2hwY2hwX3dxLCAmaW5mby0+d29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jCmluZGV4IDg2ZGMzOTguLjVmNWU4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jCkBAIC02NjAsNiArNjYwLDc1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIGludCBzaHBjX2dldF9jdXJfYnVzX3NwZWVkKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQoreworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKKwllbnVtIHBjaV9idXNfc3BlZWQgYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CisJdTE2IHNlY19idXNfcmVnID0gc2hwY19yZWFkdyhjdHJsLCBTRUNfQlVTX0NPTkZJRyk7CisJdTggcGkgPSBzaHBjX3JlYWRiKGN0cmwsIFBST0dfSU5URVJGQUNFKTsKKwl1OCBzcGVlZF9tb2RlID0gKHBpID09IDIpID8gKHNlY19idXNfcmVnICYgMHhGKSA6IChzZWNfYnVzX3JlZyAmIDB4Nyk7CisKKwlpZiAoKHBpID09IDEpICYmIChzcGVlZF9tb2RlID4gNCkpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChzcGVlZF9tb2RlKSB7CisJY2FzZSAweDA6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKKwkJYnJlYWs7CisJY2FzZSAweDE6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKKwkJYnJlYWs7CisJY2FzZSAweDI6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOworCQlicmVhazsKKwljYXNlIDB4NDoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOworCQlicmVhazsKKwljYXNlIDB4NToKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDOworCQlicmVhazsKKwljYXNlIDB4NjoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQzsKKwkJYnJlYWs7CisJY2FzZSAweDc6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0M7CisJCWJyZWFrOworCWNhc2UgMHg4OgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjY7CisJCWJyZWFrOworCWNhc2UgMHg5OgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2OworCQlicmVhazsKKwljYXNlIDB4YToKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NjsKKwkJYnJlYWs7CisJY2FzZSAweGI6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMzsKKwkJYnJlYWs7CisJY2FzZSAweGM6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzM7CisJCWJyZWFrOworCWNhc2UgMHhkOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRU5PREVWOworCQlicmVhazsKKwl9CisKKyBvdXQ6CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gYnVzX3NwZWVkOworCWRiZygiQ3VycmVudCBidXMgc3BlZWQgPSAlZFxuIiwgYnVzX3NwZWVkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKIHN0YXRpYyBpbnQgaHBjX3NldF9idXNfc3BlZWRfbW9kZShzdHJ1Y3Qgc2xvdCAqIHNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCB2YWx1ZSkKIHsKIAlpbnQgcmV0dmFsOwpAQCAtNzIwLDYgKzc4OSw4IEBACiAJcmV0dmFsID0gc2hwY193cml0ZV9jbWQoc2xvdCwgMCwgY21kKTsKIAlpZiAocmV0dmFsKQogCQljdHJsX2VycihjdHJsLCAiJXM6IFdyaXRlIGNvbW1hbmQgZmFpbGVkIVxuIiwgX19mdW5jX18pOworCWVsc2UKKwkJc2hwY19nZXRfY3VyX2J1c19zcGVlZChjdHJsKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC04MDMsMTAgKzg3NCwxMCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBocGNfZ2V0X21heF9idXNfc3BlZWQgKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQorc3RhdGljIGludCBzaHBjX2dldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogewogCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CiAJZW51bSBwY2lfYnVzX3NwZWVkIGJ1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwogCXU4IHBpID0gc2hwY19yZWFkYihjdHJsLCBQUk9HX0lOVEVSRkFDRSk7CiAJdTMyIHNsb3RfYXZhaWwxID0gc2hwY19yZWFkbChjdHJsLCBTTE9UX0FWQUlMMSk7CkBAIC04NDIsNzkgKzkxMywxMiBAQAogCQkJcmV0dmFsID0gLUVOT0RFVjsKIAl9CiAKLQkqdmFsdWUgPSBidXNfc3BlZWQ7CisJYnVzLT5tYXhfYnVzX3NwZWVkID0gYnVzX3NwZWVkOwogCWN0cmxfZGJnKGN0cmwsICJNYXggYnVzIHNwZWVkID0gJWRcbiIsIGJ1c19zcGVlZCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGhwY19nZXRfY3VyX2J1c19zcGVlZCAoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwotCWVudW0gcGNpX2J1c19zcGVlZCBidXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQl1MTYgc2VjX2J1c19yZWcgPSBzaHBjX3JlYWR3KGN0cmwsIFNFQ19CVVNfQ09ORklHKTsKLQl1OCBwaSA9IHNocGNfcmVhZGIoY3RybCwgUFJPR19JTlRFUkZBQ0UpOwotCXU4IHNwZWVkX21vZGUgPSAocGkgPT0gMikgPyAoc2VjX2J1c19yZWcgJiAweEYpIDogKHNlY19idXNfcmVnICYgMHg3KTsKLQotCWlmICgocGkgPT0gMSkgJiYgKHNwZWVkX21vZGUgPiA0KSkgewotCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jc3dpdGNoIChzcGVlZF9tb2RlKSB7Ci0JY2FzZSAweDA6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8zM01IejsKLQkJYnJlYWs7Ci0JY2FzZSAweDE6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1IejsKLQkJYnJlYWs7Ci0JY2FzZSAweDI6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOwotCQlicmVhazsKLQljYXNlIDB4MzoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOwotCQlicmVhazsKLQljYXNlIDB4NDoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOwotCQlicmVhazsKLQljYXNlIDB4NToKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDOwotCQlicmVhazsKLQljYXNlIDB4NjoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQzsKLQkJYnJlYWs7Ci0JY2FzZSAweDc6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0M7Ci0JCWJyZWFrOwotCWNhc2UgMHg4OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjY7Ci0JCWJyZWFrOwotCWNhc2UgMHg5OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2OwotCQlicmVhazsKLQljYXNlIDB4YToKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NjsKLQkJYnJlYWs7Ci0JY2FzZSAweGI6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMzsKLQkJYnJlYWs7Ci0JY2FzZSAweGM6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzM7Ci0JCWJyZWFrOwotCWNhc2UgMHhkOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0JfQotCi0JY3RybF9kYmcoY3RybCwgIkN1cnJlbnQgYnVzIHNwZWVkID0gJWRcbiIsIGJ1c19zcGVlZCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogc3RhdGljIHN0cnVjdCBocGNfb3BzIHNocGNocF9ocGNfb3BzID0gewogCS5wb3dlcl9vbl9zbG90CQkJPSBocGNfcG93ZXJfb25fc2xvdCwKIAkuc2xvdF9lbmFibGUJCQk9IGhwY19zbG90X2VuYWJsZSwKQEAgLTkyNiw4ICs5MzAsNiBAQAogCS5nZXRfbGF0Y2hfc3RhdHVzCQk9IGhwY19nZXRfbGF0Y2hfc3RhdHVzLAogCS5nZXRfYWRhcHRlcl9zdGF0dXMJCT0gaHBjX2dldF9hZGFwdGVyX3N0YXR1cywKIAotCS5nZXRfbWF4X2J1c19zcGVlZAkJPSBocGNfZ2V0X21heF9idXNfc3BlZWQsCi0JLmdldF9jdXJfYnVzX3NwZWVkCQk9IGhwY19nZXRfY3VyX2J1c19zcGVlZCwKIAkuZ2V0X2FkYXB0ZXJfc3BlZWQJCT0gaHBjX2dldF9hZGFwdGVyX3NwZWVkLAogCS5nZXRfbW9kZTFfRUNDX2NhcAkJPSBocGNfZ2V0X21vZGUxX0VDQ19jYXAsCiAJLmdldF9wcm9nX2ludAkJCT0gaHBjX2dldF9wcm9nX2ludCwKQEAgLTEwODYsNiArMTA4OCw5IEBACiAJfQogCWN0cmxfZGJnKGN0cmwsICJIUEMgYXQgJXMgaXJxPSV4XG4iLCBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxKTsKIAorCXNocGNfZ2V0X21heF9idXNfc3BlZWQoY3RybCk7CisJc2hwY19nZXRfY3VyX2J1c19zcGVlZChjdHJsKTsKKwogCS8qCiAJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgY29udHJvbGxlciB0byBiZSBpbml0aWFsaXplZCwKIAkgKiBpbml0aWFsaXplIHRoZSBzaHBjaHBkIHdvcmsgcXVldWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jCmluZGV4IDI5ZmE5ZDIuLjA3MWI3ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfc3lzZnMuYwpAQCAtNDcsOCArNDcsNyBAQAogCWJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlOwogCiAJb3V0ICs9IHNwcmludGYoYnVmLCAiRnJlZSByZXNvdXJjZXM6IG1lbW9yeVxuIik7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpbmRleCsrKSB7Ci0JCXJlcyA9IGJ1cy0+cmVzb3VyY2VbaW5kZXhdOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGluZGV4KSB7CiAJCWlmIChyZXMgJiYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKIAkJCQkhKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKSkgewogCQkJb3V0ICs9IHNwcmludGYob3V0LCAic3RhcnQgPSAlOC44bGx4LCAiCkBAIC01OCw4ICs1Nyw3IEBACiAJCX0KIAl9CiAJb3V0ICs9IHNwcmludGYob3V0LCAiRnJlZSByZXNvdXJjZXM6IHByZWZldGNoYWJsZSBtZW1vcnlcbiIpOwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaW5kZXgrKykgewotCQlyZXMgPSBidXMtPnJlc291cmNlW2luZGV4XTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpbmRleCkgewogCQlpZiAocmVzICYmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCiAJCQkgICAgICAgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKSkgewogCQkJb3V0ICs9IHNwcmludGYob3V0LCAic3RhcnQgPSAlOC44bGx4LCAiCkBAIC02OSw4ICs2Nyw3IEBACiAJCX0KIAl9CiAJb3V0ICs9IHNwcmludGYob3V0LCAiRnJlZSByZXNvdXJjZXM6IElPXG4iKTsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGluZGV4KyspIHsKLQkJcmVzID0gYnVzLT5yZXNvdXJjZVtpbmRleF07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaW5kZXgpIHsKIAkJaWYgKHJlcyAmJiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pKSB7CiAJCQlvdXQgKz0gc3ByaW50ZihvdXQsICJzdGFydCA9ICU4LjhsbHgsICIKIAkJCQkJImxlbmd0aCA9ICU4LjhsbHhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9sZWdhY3kuYyBiL2RyaXZlcnMvcGNpL2xlZ2FjeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzFmNjVjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNpL2xlZ2FjeS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlICJwY2kuaCIKLQotLyoqCi0gKiBwY2lfZmluZF9kZXZpY2UgLSBiZWdpbiBvciBjb250aW51ZSBzZWFyY2hpbmcgZm9yIGEgUENJIGRldmljZSBieSB2ZW5kb3IvZGV2aWNlIGlkCi0gKiBAdmVuZG9yOiBQQ0kgdmVuZG9yIGlkIHRvIG1hdGNoLCBvciAlUENJX0FOWV9JRCB0byBtYXRjaCBhbGwgdmVuZG9yIGlkcwotICogQGRldmljZTogUENJIGRldmljZSBpZCB0byBtYXRjaCwgb3IgJVBDSV9BTllfSUQgdG8gbWF0Y2ggYWxsIGRldmljZSBpZHMKLSAqIEBmcm9tOiBQcmV2aW91cyBQQ0kgZGV2aWNlIGZvdW5kIGluIHNlYXJjaCwgb3IgJU5VTEwgZm9yIG5ldyBzZWFyY2guCi0gKgotICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBrbm93biBQQ0kgZGV2aWNlcy4gIElmIGEgUENJIGRldmljZSBpcyBmb3VuZAotICogd2l0aCBhIG1hdGNoaW5nIEB2ZW5kb3IgYW5kIEBkZXZpY2UsIGEgcG9pbnRlciB0byBpdHMgZGV2aWNlIHN0cnVjdHVyZSBpcwotICogcmV0dXJuZWQuICBPdGhlcndpc2UsICVOVUxMIGlzIHJldHVybmVkLgotICogQSBuZXcgc2VhcmNoIGlzIGluaXRpYXRlZCBieSBwYXNzaW5nICVOVUxMIGFzIHRoZSBAZnJvbSBhcmd1bWVudC4KLSAqIE90aGVyd2lzZSBpZiBAZnJvbSBpcyBub3QgJU5VTEwsIHNlYXJjaGVzIGNvbnRpbnVlIGZyb20gbmV4dCBkZXZpY2UKLSAqIG9uIHRoZSBnbG9iYWwgbGlzdC4KLSAqCi0gKiBOT1RFOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gYW55IG1vcmU7IHVzZSBwY2lfZ2V0X2RldmljZSgpIGluc3RlYWQsIGFzCi0gKiB0aGUgUENJIGRldmljZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBkaXNhcHBlYXIgYXQgYW55IG1vbWVudCBpbgotICogdGltZS4KLSAqLwotc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLAotCQkJCXN0cnVjdCBwY2lfZGV2ICpmcm9tKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCi0JcGNpX2Rldl9nZXQoZnJvbSk7Ci0JcGRldiA9IHBjaV9nZXRfc3Vic3lzKHZlbmRvciwgZGV2aWNlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBmcm9tKTsKLQlwY2lfZGV2X3B1dChwZGV2KTsKLQlyZXR1cm4gcGRldjsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IDdlMjgyOTUuLmMwYzczOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtMTYsOCArMTYsMTQ0IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogCiAjaW5jbHVkZSA8bGludXgvcGNpLWFjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKK3N0YXRpYyBERUZJTkVfTVVURVgocGNpX2FjcGlfcG1fbm90aWZ5X210eCk7CisKKy8qKgorICogcGNpX2FjcGlfd2FrZV9idXMgLSBXYWtlLXVwIG5vdGlmaWNhdGlvbiBoYW5kbGVyIGZvciByb290IGJ1c2VzLgorICogQGhhbmRsZTogQUNQSSBoYW5kbGUgb2YgYSBkZXZpY2UgdGhlIG5vdGlmaWNhdGlvbiBpcyBmb3IuCisgKiBAZXZlbnQ6IFR5cGUgb2YgdGhlIHNpZ25hbGVkIGV2ZW50LgorICogQGNvbnRleHQ6IFBDSSByb290IGJ1cyB0byB3YWtlIHVwIGRldmljZXMgb24uCisgKi8KK3N0YXRpYyB2b2lkIHBjaV9hY3BpX3dha2VfYnVzKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBwY2lfYnVzICpwY2lfYnVzID0gY29udGV4dDsKKworCWlmIChldmVudCA9PSBBQ1BJX05PVElGWV9ERVZJQ0VfV0FLRSAmJiBwY2lfYnVzKQorCQlwY2lfcG1lX3dha2V1cF9idXMocGNpX2J1cyk7Cit9CisKKy8qKgorICogcGNpX2FjcGlfd2FrZV9kZXYgLSBXYWtlLXVwIG5vdGlmaWNhdGlvbiBoYW5kbGVyIGZvciBQQ0kgZGV2aWNlcy4KKyAqIEBoYW5kbGU6IEFDUEkgaGFuZGxlIG9mIGEgZGV2aWNlIHRoZSBub3RpZmljYXRpb24gaXMgZm9yLgorICogQGV2ZW50OiBUeXBlIG9mIHRoZSBzaWduYWxlZCBldmVudC4KKyAqIEBjb250ZXh0OiBQQ0kgZGV2aWNlIG9iamVjdCB0byB3YWtlIHVwLgorICovCitzdGF0aWMgdm9pZCBwY2lfYWNwaV93YWtlX2RldihhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IGNvbnRleHQ7CisKKwlpZiAoZXZlbnQgPT0gQUNQSV9OT1RJRllfREVWSUNFX1dBS0UgJiYgcGNpX2RldikgeworCQlwY2lfY2hlY2tfcG1lX3N0YXR1cyhwY2lfZGV2KTsKKwkJcG1fcnVudGltZV9yZXN1bWUoJnBjaV9kZXYtPmRldik7CisJCWlmIChwY2lfZGV2LT5zdWJvcmRpbmF0ZSkKKwkJCXBjaV9wbWVfd2FrZXVwX2J1cyhwY2lfZGV2LT5zdWJvcmRpbmF0ZSk7CisJfQorfQorCisvKioKKyAqIGFkZF9wbV9ub3RpZmllciAtIFJlZ2lzdGVyIFBNIG5vdGlmaWVyIGZvciBnaXZlbiBBQ1BJIGRldmljZS4KKyAqIEBkZXY6IEFDUEkgZGV2aWNlIHRvIGFkZCB0aGUgbm90aWZpZXIgZm9yLgorICogQGNvbnRleHQ6IFBDSSBkZXZpY2Ugb3IgYnVzIHRvIGNoZWNrIGZvciBQTUUgc3RhdHVzIGlmIGFuIGV2ZW50IGlzIHNpZ25hbGVkLgorICoKKyAqIE5PVEU6IEBkZXYgbmVlZCBub3QgYmUgYSBydW4td2FrZSBvciB3YWtlLXVwIGRldmljZSB0byBiZSBhIHZhbGlkIHNvdXJjZSBvZgorICogUE0gd2FrZS11cCBldmVudHMuICBGb3IgZXhhbXBsZSwgd2FrZS11cCBldmVudHMgbWF5IGJlIGdlbmVyYXRlZCBmb3IgYnJpZGdlcworICogaWYgb25lIG9mIHRoZSBkZXZpY2VzIGJlbG93IHRoZSBicmlkZ2UgaXMgc2lnbmFsaW5nIFBNRSwgZXZlbiBpZiB0aGUgYnJpZGdlCisgKiBpdHNlbGYgZG9lc24ndCBoYXZlIGEgd2FrZS11cCBHUEUgYXNzb2NpYXRlZCB3aXRoIGl0LgorICovCitzdGF0aWMgYWNwaV9zdGF0dXMgYWRkX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCSAgIGFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlciwKKwkJCQkgICB2b2lkICpjb250ZXh0KQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX0FMUkVBRFlfRVhJU1RTOworCisJbXV0ZXhfbG9jaygmcGNpX2FjcGlfcG1fbm90aWZ5X210eCk7CisKKwlpZiAoZGV2LT53YWtldXAuZmxhZ3Mubm90aWZpZXJfcHJlc2VudCkKKwkJZ290byBvdXQ7CisKKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZGV2LT5oYW5kbGUsCisJCQkJCSAgICAgQUNQSV9TWVNURU1fTk9USUZZLAorCQkJCQkgICAgIGhhbmRsZXIsIGNvbnRleHQpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJZ290byBvdXQ7CisKKwlkZXYtPndha2V1cC5mbGFncy5ub3RpZmllcl9wcmVzZW50ID0gdHJ1ZTsKKworIG91dDoKKwltdXRleF91bmxvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogcmVtb3ZlX3BtX25vdGlmaWVyIC0gVW5yZWdpc3RlciBQTSBub3RpZmllciBmcm9tIGdpdmVuIEFDUEkgZGV2aWNlLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gcmVtb3ZlIHRoZSBub3RpZmllciBmcm9tLgorICovCitzdGF0aWMgYWNwaV9zdGF0dXMgcmVtb3ZlX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIGFjcGlfbm90aWZ5X2hhbmRsZXIgaGFuZGxlcikKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOworCisJbXV0ZXhfbG9jaygmcGNpX2FjcGlfcG1fbm90aWZ5X210eCk7CisKKwlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQpCisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZGV2LT5oYW5kbGUsCisJCQkJCSAgICBBQ1BJX1NZU1RFTV9OT1RJRlksCisJCQkJCSAgICBoYW5kbGVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCWdvdG8gb3V0OworCisJZGV2LT53YWtldXAuZmxhZ3Mubm90aWZpZXJfcHJlc2VudCA9IGZhbHNlOworCisgb3V0OgorCW11dGV4X3VubG9jaygmcGNpX2FjcGlfcG1fbm90aWZ5X210eCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwY2lfYWNwaV9hZGRfYnVzX3BtX25vdGlmaWVyIC0gUmVnaXN0ZXIgUE0gbm90aWZpZXIgZm9yIGdpdmVuIFBDSSBidXMuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byBhZGQgdGhlIG5vdGlmaWVyIGZvci4KKyAqIEBwY2lfYnVzOiBQQ0kgYnVzIHRvIHdhbGsgY2hlY2tpbmcgZm9yIFBNRSBzdGF0dXMgaWYgYW4gZXZlbnQgaXMgc2lnbmFsZWQuCisgKi8KK2FjcGlfc3RhdHVzIHBjaV9hY3BpX2FkZF9idXNfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cykKK3sKKwlyZXR1cm4gYWRkX3BtX25vdGlmaWVyKGRldiwgcGNpX2FjcGlfd2FrZV9idXMsIHBjaV9idXMpOworfQorCisvKioKKyAqIHBjaV9hY3BpX3JlbW92ZV9idXNfcG1fbm90aWZpZXIgLSBVbnJlZ2lzdGVyIFBDSSBidXMgUE0gbm90aWZpZXIuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byByZW1vdmUgdGhlIG5vdGlmaWVyIGZyb20uCisgKi8KK2FjcGlfc3RhdHVzIHBjaV9hY3BpX3JlbW92ZV9idXNfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHJlbW92ZV9wbV9ub3RpZmllcihkZXYsIHBjaV9hY3BpX3dha2VfYnVzKTsKK30KKworLyoqCisgKiBwY2lfYWNwaV9hZGRfcG1fbm90aWZpZXIgLSBSZWdpc3RlciBQTSBub3RpZmllciBmb3IgZ2l2ZW4gUENJIGRldmljZS4KKyAqIEBkZXY6IEFDUEkgZGV2aWNlIHRvIGFkZCB0aGUgbm90aWZpZXIgZm9yLgorICogQHBjaV9kZXY6IFBDSSBkZXZpY2UgdG8gY2hlY2sgZm9yIHRoZSBQTUUgc3RhdHVzIGlmIGFuIGV2ZW50IGlzIHNpZ25hbGVkLgorICovCithY3BpX3N0YXR1cyBwY2lfYWNwaV9hZGRfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3sKKwlyZXR1cm4gYWRkX3BtX25vdGlmaWVyKGRldiwgcGNpX2FjcGlfd2FrZV9kZXYsIHBjaV9kZXYpOworfQorCisvKioKKyAqIHBjaV9hY3BpX3JlbW92ZV9wbV9ub3RpZmllciAtIFVucmVnaXN0ZXIgUENJIGRldmljZSBQTSBub3RpZmllci4KKyAqIEBkZXY6IEFDUEkgZGV2aWNlIHRvIHJlbW92ZSB0aGUgbm90aWZpZXIgZnJvbS4KKyAqLworYWNwaV9zdGF0dXMgcGNpX2FjcGlfcmVtb3ZlX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KQoreworCXJldHVybiByZW1vdmVfcG1fbm90aWZpZXIoZGV2LCBwY2lfYWNwaV93YWtlX2Rldik7Cit9CisKIC8qCiAgKiBfU3hEIHJldHVybnMgdGhlIEQtc3RhdGUgd2l0aCB0aGUgaGlnaGVzdCBwb3dlcgogICogKGxvd2VzdCBELXN0YXRlIG51bWJlcikgc3VwcG9ydGVkIGluIHRoZSBTLXN0YXRlICJ4Ii4KQEAgLTEzMSwxMiArMjY3LDg3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogYWNwaV9kZXZfcnVuX3dha2UgLSBFbmFibGUvZGlzYWJsZSB3YWtlLXVwIGZvciBnaXZlbiBkZXZpY2UuCisgKiBAcGh5c19kZXY6IERldmljZSB0byBlbmFibGUvZGlzYWJsZSB0aGUgcGxhdGZvcm0gdG8gd2FrZS11cCB0aGUgc3lzdGVtIGZvci4KKyAqIEBlbmFibGU6IFdoZXRoZXIgZW5hYmxlIG9yIGRpc2FibGUgdGhlIHdha2UtdXAgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBGaW5kIHRoZSBBQ1BJIGRldmljZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byBAcGNpX2RldiBhbmQgdHJ5IHRvCisgKiBlbmFibGUvZGlzYWJsZSB0aGUgR1BFIGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqLworc3RhdGljIGludCBhY3BpX2Rldl9ydW5fd2FrZShzdHJ1Y3QgZGV2aWNlICpwaHlzX2RldiwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXY7CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCWludCBlcnJvciA9IC1FTk9ERVY7CisKKwlpZiAoIWRldmljZV9ydW5fd2FrZShwaHlzX2RldikpCisJCXJldHVybiAtRUlOVkFMOworCisJaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKHBoeXNfZGV2KTsKKwlpZiAoIWhhbmRsZSB8fCBBQ1BJX0ZBSUxVUkUoYWNwaV9idXNfZ2V0X2RldmljZShoYW5kbGUsICZkZXYpKSkgeworCQlkZXZfZGJnKHBoeXNfZGV2LCAiQUNQSSBoYW5kbGUgaGFzIG5vIGNvbnRleHQgaW4gJXMhXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoZW5hYmxlKSB7CisJCWlmICghZGV2LT53YWtldXAucnVuX3dha2VfY291bnQrKykgeworCQkJYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihkZXYsIEFDUElfU1RBVEVfUzApOworCQkJYWNwaV9lbmFibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCisJCQkJCWRldi0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJCUFDUElfR1BFX1RZUEVfUlVOVElNRSk7CisJCX0KKwl9IGVsc2UgaWYgKGRldi0+d2FrZXVwLnJ1bl93YWtlX2NvdW50ID4gMCkgeworCQlpZiAoIS0tZGV2LT53YWtldXAucnVuX3dha2VfY291bnQpIHsKKwkJCWFjcGlfZGlzYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQkJIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJCSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCQkJYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2KTsKKwkJfQorCX0gZWxzZSB7CisJCWVycm9yID0gLUVBTFJFQURZOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgYWNwaV9wY2lfcHJvcGFnYXRlX3J1bl93YWtlKHN0cnVjdCBwY2lfYnVzICpidXMsIGJvb2wgZW5hYmxlKQoreworCXdoaWxlIChidXMtPnBhcmVudCkgeworCQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOworCisJCWlmIChicmlkZ2UtPnBtZV9pbnRlcnJ1cHQpCisJCQlyZXR1cm47CisJCWlmICghYWNwaV9kZXZfcnVuX3dha2UoJmJyaWRnZS0+ZGV2LCBlbmFibGUpKQorCQkJcmV0dXJuOworCQlidXMgPSBidXMtPnBhcmVudDsKKwl9CisKKwkvKiBXZSBoYXZlIHJlYWNoZWQgdGhlIHJvb3QgYnVzLiAqLworCWlmIChidXMtPmJyaWRnZSkKKwkJYWNwaV9kZXZfcnVuX3dha2UoYnVzLT5icmlkZ2UsIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wY2lfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpCit7CisJaWYgKGRldi0+cG1lX2ludGVycnVwdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFjcGlfZGV2X3J1bl93YWtlKCZkZXYtPmRldiwgZW5hYmxlKSkKKwkJcmV0dXJuIDA7CisKKwlhY3BpX3BjaV9wcm9wYWdhdGVfcnVuX3dha2UoZGV2LT5idXMsIGVuYWJsZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX3BsYXRmb3JtX3BtX29wcyBhY3BpX3BjaV9wbGF0Zm9ybV9wbSA9IHsKIAkuaXNfbWFuYWdlYWJsZSA9IGFjcGlfcGNpX3Bvd2VyX21hbmFnZWFibGUsCiAJLnNldF9zdGF0ZSA9IGFjcGlfcGNpX3NldF9wb3dlcl9zdGF0ZSwKIAkuY2hvb3NlX3N0YXRlID0gYWNwaV9wY2lfY2hvb3NlX3N0YXRlLAogCS5jYW5fd2FrZXVwID0gYWNwaV9wY2lfY2FuX3dha2V1cCwKIAkuc2xlZXBfd2FrZSA9IGFjcGlfcGNpX3NsZWVwX3dha2UsCisJLnJ1bl93YWtlID0gYWNwaV9wY2lfcnVuX3dha2UsCiB9OwogCiAvKiBBQ1BJIGJ1cyB0eXBlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZTVkNDdiZS4uZjlhMGFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlICJwY2kuaCIKIAogc3RydWN0IHBjaV9keW5pZCB7CkBAIC00MDQsNiArNDA1LDM1IEBACiAJcGNpX21zaXhfc2h1dGRvd24ocGNpX2Rldik7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE1fT1BTCisKKy8qIEF1eGlsaWFyeSBmdW5jdGlvbnMgdXNlZCBmb3Igc3lzdGVtIHJlc3VtZSBhbmQgcnVuLXRpbWUgcmVzdW1lLiAqLworCisvKioKKyAqIHBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyAtIHJlc3RvcmUgc3RhbmRhcmQgY29uZmlnIHJlZ2lzdGVycyBvZiBQQ0kgZGV2aWNlCisgKiBAcGNpX2RldjogUENJIGRldmljZSB0byBoYW5kbGUKKyAqLworc3RhdGljIGludCBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKHBjaV9kZXYsIFBDSV9VTktOT1dOKTsKKworCWlmIChwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMCkgeworCQlpbnQgZXJyb3IgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EMCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gcGNpX3Jlc3RvcmVfc3RhdGUocGNpX2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9lYXJseShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3sKKwlwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcocGNpX2Rldik7CisJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfcmVzdW1lX2Vhcmx5LCBwY2lfZGV2KTsKK30KKworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIAogLyoKQEAgLTUyMCwyOSArNTUwLDYgQEAKIAogLyogQXV4aWxpYXJ5IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBuZXcgcG93ZXIgbWFuYWdlbWVudCBmcmFtZXdvcmsgKi8KIAotLyoqCi0gKiBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcgLSByZXN0b3JlIHN0YW5kYXJkIGNvbmZpZyByZWdpc3RlcnMgb2YgUENJIGRldmljZQotICogQHBjaV9kZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlCi0gKi8KLXN0YXRpYyBpbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQotewotCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShwY2lfZGV2LCBQQ0lfVU5LTk9XTik7Ci0KLQlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApIHsKLQkJaW50IGVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JcmV0dXJuIHBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOwotfQotCi1zdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWVfbm9pcnEoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCi17Ci0JcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHBjaV9kZXYpOwotCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3VtZV9lYXJseSwgcGNpX2Rldik7Ci19Ci0KIHN0YXRpYyB2b2lkIHBjaV9wbV9kZWZhdWx0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKIAlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWUsIHBjaV9kZXYpOwpAQCAtNTgxLDYgKzU4OCwxNyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCisJLyoKKwkgKiBQQ0kgZGV2aWNlcyBzdXNwZW5kZWQgYXQgcnVuIHRpbWUgbmVlZCB0byBiZSByZXN1bWVkIGF0IHRoaXMKKwkgKiBwb2ludCwgYmVjYXVzZSBpbiBnZW5lcmFsIGl0IGlzIG5lY2Vzc2FyeSB0byByZWNvbmZpZ3VyZSB0aGVtIGZvcgorCSAqIHN5c3RlbSBzdXNwZW5kLiAgTmFtZWx5LCBpZiB0aGUgZGV2aWNlIGlzIHN1cHBvc2VkIHRvIHdha2UgdXAgdGhlCisJICogc3lzdGVtIGZyb20gdGhlIHNsZWVwIHN0YXRlLCB3ZSBtYXkgbmVlZCB0byByZWNvbmZpZ3VyZSBpdCBmb3IgdGhpcworCSAqIHB1cnBvc2UuICBJbiB0dXJuLCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBzdXBwb3NlZCB0byB3YWtlIHVwIHRoZQorCSAqIHN5c3RlbSBmcm9tIHRoZSBzbGVlcCBzdGF0ZSwgd2UnbGwgaGF2ZSB0byBwcmV2ZW50IGl0IGZyb20gc2lnbmFsaW5nCisJICogd2FrZS11cC4KKwkgKi8KKwlwbV9ydW50aW1lX3Jlc3VtZShkZXYpOworCiAJaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnByZXBhcmUpCiAJCWVycm9yID0gZHJ2LT5wbS0+cHJlcGFyZShkZXYpOwogCkBAIC01OTUsNiArNjEzLDEzIEBACiAJCWRydi0+cG0tPmNvbXBsZXRlKGRldik7CiB9CiAKKyNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KKworI2RlZmluZSBwY2lfcG1fcHJlcGFyZQlOVUxMCisjZGVmaW5lIHBjaV9wbV9jb21wbGV0ZQlOVUxMCisKKyNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKICNpZmRlZiBDT05GSUdfU1VTUEVORAogCiBzdGF0aWMgaW50IHBjaV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTY4MSw3ICs3MDYsNyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcGNpX3BtX2RlZmF1bHRfcmVzdW1lX25vaXJxKHBjaV9kZXYpOworCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9lYXJseShwY2lfZGV2KTsKIAogCWlmIChwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKQogCQlyZXR1cm4gcGNpX2xlZ2FjeV9yZXN1bWVfZWFybHkoZGV2KTsKQEAgLTg3OSw3ICs5MDQsNyBAQAogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcGNpX3BtX2RlZmF1bHRfcmVzdW1lX25vaXJxKHBjaV9kZXYpOworCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9lYXJseShwY2lfZGV2KTsKIAogCWlmIChwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKQogCQlyZXR1cm4gcGNpX2xlZ2FjeV9yZXN1bWVfZWFybHkoZGV2KTsKQEAgLTkzMSw2ICs5NTYsODQgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KIAorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisKK3N0YXRpYyBpbnQgcGNpX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCXBjaV9wb3dlcl90IHByZXYgPSBwY2lfZGV2LT5jdXJyZW50X3N0YXRlOworCWludCBlcnJvcjsKKworCWlmICghcG0gfHwgIXBtLT5ydW50aW1lX3N1c3BlbmQpCisJCXJldHVybiAtRU5PU1lTOworCisJZXJyb3IgPSBwbS0+cnVudGltZV9zdXNwZW5kKGRldik7CisJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KHBtLT5ydW50aW1lX3N1c3BlbmQsIGVycm9yKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3N1c3BlbmQsIHBjaV9kZXYpOworCisJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMAorCSAgICAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9VTktOT1dOKSB7CisJCVdBUk5fT05DRShwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IHByZXYsCisJCQkiUENJIFBNOiBTdGF0ZSBvZiBkZXZpY2Ugbm90IHNhdmVkIGJ5ICVwRlxuIiwKKwkJCXBtLT5ydW50aW1lX3N1c3BlbmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKQorCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKworCXBjaV9maW5pc2hfcnVudGltZV9zdXNwZW5kKHBjaV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CisKKwlpZiAoIXBtIHx8ICFwbS0+cnVudGltZV9yZXN1bWUpCisJCXJldHVybiAtRU5PU1lTOworCisJcGNpX3BtX2RlZmF1bHRfcmVzdW1lX2Vhcmx5KHBjaV9kZXYpOworCV9fcGNpX2VuYWJsZV93YWtlKHBjaV9kZXYsIFBDSV9EMCwgdHJ1ZSwgZmFsc2UpOworCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3VtZSwgcGNpX2Rldik7CisKKwlyZXR1cm4gcG0tPnJ1bnRpbWVfcmVzdW1lKGRldik7Cit9CisKK3N0YXRpYyBpbnQgcGNpX3BtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCisJaWYgKCFwbSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlpZiAocG0tPnJ1bnRpbWVfaWRsZSkgeworCQlpbnQgcmV0ID0gcG0tPnJ1bnRpbWVfaWRsZShkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlwbV9ydW50aW1lX3N1c3BlbmQoZGV2KTsKKworCXJldHVybiAwOworfQorCisjZWxzZSAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKworI2RlZmluZSBwY2lfcG1fcnVudGltZV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfcmVzdW1lCU5VTEwKKyNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfaWRsZQlOVUxMCisKKyNlbmRpZiAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKworI2lmZGVmIENPTkZJR19QTV9PUFMKKwogY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcGNpX2Rldl9wbV9vcHMgPSB7CiAJLnByZXBhcmUgPSBwY2lfcG1fcHJlcGFyZSwKIAkuY29tcGxldGUgPSBwY2lfcG1fY29tcGxldGUsCkBAIC05NDYsMTUgKzEwNDksMTggQEAKIAkudGhhd19ub2lycSA9IHBjaV9wbV90aGF3X25vaXJxLAogCS5wb3dlcm9mZl9ub2lycSA9IHBjaV9wbV9wb3dlcm9mZl9ub2lycSwKIAkucmVzdG9yZV9ub2lycSA9IHBjaV9wbV9yZXN0b3JlX25vaXJxLAorCS5ydW50aW1lX3N1c3BlbmQgPSBwY2lfcG1fcnVudGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZSA9IHBjaV9wbV9ydW50aW1lX3Jlc3VtZSwKKwkucnVudGltZV9pZGxlID0gcGNpX3BtX3J1bnRpbWVfaWRsZSwKIH07CiAKICNkZWZpbmUgUENJX1BNX09QU19QVFIJKCZwY2lfZGV2X3BtX29wcykKIAotI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2Vsc2UgLyogIUNPTUZJR19QTV9PUFMgKi8KIAogI2RlZmluZSBQQ0lfUE1fT1BTX1BUUglOVUxMCiAKLSNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCisjZW5kaWYgLyogIUNPTUZJR19QTV9PUFMgKi8KIAogLyoqCiAgKiBfX3BjaV9yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIG5ldyBwY2kgZHJpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDMxNWZlYTQuLjViNTQ4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLWFzcG0uaD4KICNpbmNsdWRlIDxsaW51eC9wbV93YWtldXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+CS8qIGlzYV9kbWFfYnJpZGdlX2J1Z2d5ICovCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgInBjaS5oIgogCkBAIC0yOSw2ICsyOSwxMiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wb3dlcl9uYW1lcyk7CiAKK2ludCBpc2FfZG1hX2JyaWRnZV9idWdneTsKK0VYUE9SVF9TWU1CT0woaXNhX2RtYV9icmlkZ2VfYnVnZ3kpOworCitpbnQgcGNpX3BjaV9wcm9ibGVtczsKK0VYUE9SVF9TWU1CT0wocGNpX3BjaV9wcm9ibGVtcyk7CisKIHVuc2lnbmVkIGludCBwY2lfcG1fZDNfZGVsYXk7CiAKIHN0YXRpYyB2b2lkIHBjaV9kZXZfZDNfc2xlZXAoc3RydWN0IHBjaV9kZXYgKmRldikKQEAgLTM4MCwxMCArMzg2LDkgQEAKIHsKIAljb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gZGV2LT5idXM7CiAJaW50IGk7Ci0Jc3RydWN0IHJlc291cmNlICpiZXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmJlc3QgPSBOVUxMLCAqcjsKIAotCWZvcihpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqciA9IGJ1cy0+cmVzb3VyY2VbaV07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHIsIGkpIHsKIAkJaWYgKCFyKQogCQkJY29udGludWU7CiAJCWlmIChyZXMtPnN0YXJ0ICYmICEocmVzLT5zdGFydCA+PSByLT5zdGFydCAmJiByZXMtPmVuZCA8PSByLT5lbmQpKQpAQCAtNDU3LDYgKzQ2MiwxMiBAQAogCQkJcGNpX3BsYXRmb3JtX3BtLT5zbGVlcF93YWtlKGRldiwgZW5hYmxlKSA6IC1FTk9ERVY7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBsYXRmb3JtX3BjaV9ydW5fd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlyZXR1cm4gcGNpX3BsYXRmb3JtX3BtID8KKwkJCXBjaV9wbGF0Zm9ybV9wbS0+cnVuX3dha2UoZGV2LCBlbmFibGUpIDogLUVOT0RFVjsKK30KKwogLyoqCiAgKiBwY2lfcmF3X3NldF9wb3dlcl9zdGF0ZSAtIFVzZSBQQ0kgUE0gcmVnaXN0ZXJzIHRvIHNldCB0aGUgcG93ZXIgc3RhdGUgb2YKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gUENJIGRldmljZQpAQCAtMTE5MCw2ICsxMjAxLDY2IEBACiB9CiAKIC8qKgorICogcGNpX2NoZWNrX3BtZV9zdGF0dXMgLSBDaGVjayBpZiBnaXZlbiBkZXZpY2UgaGFzIGdlbmVyYXRlZCBQTUUuCisgKiBAZGV2OiBEZXZpY2UgdG8gY2hlY2suCisgKgorICogQ2hlY2sgdGhlIFBNRSBzdGF0dXMgb2YgdGhlIGRldmljZSBhbmQgaWYgc2V0LCBjbGVhciBpdCBhbmQgY2xlYXIgUE1FIGVuYWJsZQorICogKGlmIHNldCkuICBSZXR1cm4gJ3RydWUnIGlmIFBNRSBzdGF0dXMgYW5kIFBNRSBlbmFibGUgd2VyZSBib3RoIHNldCBvcgorICogJ2ZhbHNlJyBvdGhlcndpc2UuCisgKi8KK2Jvb2wgcGNpX2NoZWNrX3BtZV9zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcG1jc3JfcG9zOworCXUxNiBwbWNzcjsKKwlib29sIHJldCA9IGZhbHNlOworCisJaWYgKCFkZXYtPnBtX2NhcCkKKwkJcmV0dXJuIGZhbHNlOworCisJcG1jc3JfcG9zID0gZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBtY3NyX3BvcywgJnBtY3NyKTsKKwlpZiAoIShwbWNzciAmIFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDbGVhciBQTUUgc3RhdHVzLiAqLworCXBtY3NyIHw9IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVM7CisJaWYgKHBtY3NyICYgUENJX1BNX0NUUkxfUE1FX0VOQUJMRSkgeworCQkvKiBEaXNhYmxlIFBNRSB0byBhdm9pZCBpbnRlcnJ1cHQgZmxvb2QuICovCisJCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFOworCQlyZXQgPSB0cnVlOworCX0KKworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBtY3NyX3BvcywgcG1jc3IpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2lfcG1lX3dha2V1cCAtIFdha2UgdXAgYSBQQ0kgZGV2aWNlIGlmIGl0cyBQTUUgU3RhdHVzIGJpdCBpcyBzZXQuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQGlnbjogSWdub3JlZC4KKyAqCisgKiBDaGVjayBpZiBAZGV2IGhhcyBnZW5lcmF0ZWQgUE1FIGFuZCBxdWV1ZSBhIHJlc3VtZSByZXF1ZXN0IGZvciBpdCBpbiB0aGF0CisgKiBjYXNlLgorICovCitzdGF0aWMgaW50IHBjaV9wbWVfd2FrZXVwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmlnbikKK3sKKwlpZiAocGNpX2NoZWNrX3BtZV9zdGF0dXMoZGV2KSkKKwkJcG1fcmVxdWVzdF9yZXN1bWUoJmRldi0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY2lfcG1lX3dha2V1cF9idXMgLSBXYWxrIGdpdmVuIGJ1cyBhbmQgd2FrZSB1cCBkZXZpY2VzIG9uIGl0LCBpZiBuZWNlc3NhcnkuCisgKiBAYnVzOiBUb3AgYnVzIG9mIHRoZSBzdWJ0cmVlIHRvIHdhbGsuCisgKi8KK3ZvaWQgcGNpX3BtZV93YWtldXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJaWYgKGJ1cykKKwkJcGNpX3dhbGtfYnVzKGJ1cywgcGNpX3BtZV93YWtldXAsIE5VTEwpOworfQorCisvKioKICAqIHBjaV9wbWVfY2FwYWJsZSAtIGNoZWNrIHRoZSBjYXBhYmlsaXR5IG9mIFBDSSBkZXZpY2UgdG8gZ2VuZXJhdGUgUE1FIwogICogQGRldjogUENJIGRldmljZSB0byBoYW5kbGUuCiAgKiBAc3RhdGU6IFBDSSBzdGF0ZSBmcm9tIHdoaWNoIGRldmljZSB3aWxsIGlzc3VlIFBNRSMuCkBAIC0xMjMwLDkgKzEzMDEsMTAgQEAKIH0KIAogLyoqCi0gKiBwY2lfZW5hYmxlX3dha2UgLSBlbmFibGUgUENJIGRldmljZSBhcyB3YWtldXAgZXZlbnQgc291cmNlCisgKiBfX3BjaV9lbmFibGVfd2FrZSAtIGVuYWJsZSBQQ0kgZGV2aWNlIGFzIHdha2V1cCBldmVudCBzb3VyY2UKICAqIEBkZXY6IFBDSSBkZXZpY2UgYWZmZWN0ZWQKICAqIEBzdGF0ZTogUENJIHN0YXRlIGZyb20gd2hpY2ggZGV2aWNlIHdpbGwgaXNzdWUgd2FrZXVwIGV2ZW50cworICogQHJ1bnRpbWU6IFRydWUgaWYgdGhlIGV2ZW50cyBhcmUgdG8gYmUgZ2VuZXJhdGVkIGF0IHJ1biB0aW1lCiAgKiBAZW5hYmxlOiBUcnVlIHRvIGVuYWJsZSBldmVudCBnZW5lcmF0aW9uOyBmYWxzZSB0byBkaXNhYmxlCiAgKgogICogVGhpcyBlbmFibGVzIHRoZSBkZXZpY2UgYXMgYSB3YWtldXAgZXZlbnQgc291cmNlLCBvciBkaXNhYmxlcyBpdC4KQEAgLTEyNDgsMTEgKzEzMjAsMTIgQEAKICAqIEVycm9yIGNvZGUgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBpcyByZXR1cm5lZCBpZiBib3RoIHRoZSBwbGF0Zm9ybSBhbmQKICAqIHRoZSBuYXRpdmUgbWVjaGFuaXNtIGZhaWwgdG8gZW5hYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHdha2UtdXAgZXZlbnRzCiAgKi8KLWludCBwY2lfZW5hYmxlX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsIGJvb2wgZW5hYmxlKQoraW50IF9fcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLAorCQkgICAgICBib29sIHJ1bnRpbWUsIGJvb2wgZW5hYmxlKQogewogCWludCByZXQgPSAwOwogCi0JaWYgKGVuYWJsZSAmJiAhZGV2aWNlX21heV93YWtldXAoJmRldi0+ZGV2KSkKKwlpZiAoZW5hYmxlICYmICFydW50aW1lICYmICFkZXZpY2VfbWF5X3dha2V1cCgmZGV2LT5kZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIERvbid0IGRvIHRoZSBzYW1lIHRoaW5nIHR3aWNlIGluIGEgcm93IGZvciBvbmUgZGV2aWNlLiAqLwpAQCAtMTI3MiwxOSArMTM0NSwyNCBAQAogCQkJcGNpX3BtZV9hY3RpdmUoZGV2LCB0cnVlKTsKIAkJZWxzZQogCQkJcmV0ID0gMTsKLQkJZXJyb3IgPSBwbGF0Zm9ybV9wY2lfc2xlZXBfd2FrZShkZXYsIHRydWUpOworCQllcnJvciA9IHJ1bnRpbWUgPyBwbGF0Zm9ybV9wY2lfcnVuX3dha2UoZGV2LCB0cnVlKSA6CisJCQkJCXBsYXRmb3JtX3BjaV9zbGVlcF93YWtlKGRldiwgdHJ1ZSk7CiAJCWlmIChyZXQpCiAJCQlyZXQgPSBlcnJvcjsKIAkJaWYgKCFyZXQpCiAJCQlkZXYtPndha2V1cF9wcmVwYXJlZCA9IHRydWU7CiAJfSBlbHNlIHsKLQkJcGxhdGZvcm1fcGNpX3NsZWVwX3dha2UoZGV2LCBmYWxzZSk7CisJCWlmIChydW50aW1lKQorCQkJcGxhdGZvcm1fcGNpX3J1bl93YWtlKGRldiwgZmFsc2UpOworCQllbHNlCisJCQlwbGF0Zm9ybV9wY2lfc2xlZXBfd2FrZShkZXYsIGZhbHNlKTsKIAkJcGNpX3BtZV9hY3RpdmUoZGV2LCBmYWxzZSk7CiAJCWRldi0+d2FrZXVwX3ByZXBhcmVkID0gZmFsc2U7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woX19wY2lfZW5hYmxlX3dha2UpOwogCiAvKioKICAqIHBjaV93YWtlX2Zyb21fZDMgLSBlbmFibGUvZGlzYWJsZSBkZXZpY2UgdG8gd2FrZSB1cCBmcm9tIEQzX2hvdCBvciBEM19jb2xkCkBAIC0xMzk0LDYgKzE0NzIsNjYgQEAKIH0KIAogLyoqCisgKiBwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZCAtIENhcnJ5IG91dCBQQ0ktc3BlY2lmaWMgcGFydCBvZiBydW50aW1lIHN1c3BlbmQuCisgKiBAZGV2OiBQQ0kgZGV2aWNlIGJlaW5nIHN1c3BlbmRlZC4KKyAqCisgKiBQcmVwYXJlIEBkZXYgdG8gZ2VuZXJhdGUgd2FrZS11cCBldmVudHMgYXQgcnVuIHRpbWUgYW5kIHB1dCBpdCBpbnRvIGEgbG93CisgKiBwb3dlciBzdGF0ZS4KKyAqLworaW50IHBjaV9maW5pc2hfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGNpX3Bvd2VyX3QgdGFyZ2V0X3N0YXRlID0gcGNpX3RhcmdldF9zdGF0ZShkZXYpOworCWludCBlcnJvcjsKKworCWlmICh0YXJnZXRfc3RhdGUgPT0gUENJX1BPV0VSX0VSUk9SKQorCQlyZXR1cm4gLUVJTzsKKworCV9fcGNpX2VuYWJsZV93YWtlKGRldiwgdGFyZ2V0X3N0YXRlLCB0cnVlLCBwY2lfZGV2X3J1bl93YWtlKGRldikpOworCisJZXJyb3IgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgdGFyZ2V0X3N0YXRlKTsKKworCWlmIChlcnJvcikKKwkJX19wY2lfZW5hYmxlX3dha2UoZGV2LCB0YXJnZXRfc3RhdGUsIHRydWUsIGZhbHNlKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBwY2lfZGV2X3J1bl93YWtlIC0gQ2hlY2sgaWYgZGV2aWNlIGNhbiBnZW5lcmF0ZSBydW4tdGltZSB3YWtlLXVwIGV2ZW50cy4KKyAqIEBkZXY6IERldmljZSB0byBjaGVjay4KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGV2aWNlIGl0c2VsZiBpcyBjYWJhYmxlIG9mIGdlbmVyYXRpbmcgd2FrZS11cCBldmVudHMKKyAqICh0aHJvdWdoIHRoZSBwbGF0Zm9ybSBvciB1c2luZyB0aGUgbmF0aXZlIFBDSWUgUE1FKSBvciBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzCisgKiBQTUUgYW5kIG9uZSBvZiBpdHMgdXBzdHJlYW0gYnJpZGdlcyBjYW4gZ2VuZXJhdGUgd2FrZS11cCBldmVudHMuCisgKi8KK2Jvb2wgcGNpX2Rldl9ydW5fd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBkZXYtPmJ1czsKKworCWlmIChkZXZpY2VfcnVuX3dha2UoJmRldi0+ZGV2KSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoIWRldi0+cG1lX3N1cHBvcnQpCisJCXJldHVybiBmYWxzZTsKKworCXdoaWxlIChidXMtPnBhcmVudCkgeworCQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOworCisJCWlmIChkZXZpY2VfcnVuX3dha2UoJmJyaWRnZS0+ZGV2KSkKKwkJCXJldHVybiB0cnVlOworCisJCWJ1cyA9IGJ1cy0+cGFyZW50OworCX0KKworCS8qIFdlIGhhdmUgcmVhY2hlZCB0aGUgcm9vdCBidXMuICovCisJaWYgKGJ1cy0+YnJpZGdlKQorCQlyZXR1cm4gZGV2aWNlX3J1bl93YWtlKGJ1cy0+YnJpZGdlKTsKKworCXJldHVybiBmYWxzZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9kZXZfcnVuX3dha2UpOworCisvKioKICAqIHBjaV9wbV9pbml0IC0gSW5pdGlhbGl6ZSBQTSBmdW5jdGlvbnMgb2YgZ2l2ZW4gUENJIGRldmljZQogICogQGRldjogUENJIGRldmljZSB0byBoYW5kbGUuCiAgKi8KQEAgLTE0MDIsNiArMTU0MCw3IEBACiAJaW50IHBtOwogCXUxNiBwbWM7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmRldi0+ZGV2KTsKIAlkZXYtPndha2V1cF9wcmVwYXJlZCA9IGZhbHNlOwogCWRldi0+cG1fY2FwID0gMDsKIApAQCAtMjYxNSw2ICsyNzU0LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFNvbWUgYXJjaGl0ZWN0dXJlcyByZXF1aXJlIGFkZGl0aW9uYWwgcHJvZ3JhbW1pbmcgdG8gZW5hYmxlIFZHQSAqLworc3RhdGljIGFyY2hfc2V0X3ZnYV9zdGF0ZV90IGFyY2hfc2V0X3ZnYV9zdGF0ZTsKKwordm9pZCBfX2luaXQgcGNpX3JlZ2lzdGVyX3NldF92Z2Ffc3RhdGUoYXJjaF9zZXRfdmdhX3N0YXRlX3QgZnVuYykKK3sKKwlhcmNoX3NldF92Z2Ffc3RhdGUgPSBmdW5jOwkvKiBOVUxMIGRpc2FibGVzICovCit9CisKK3N0YXRpYyBpbnQgcGNpX3NldF92Z2Ffc3RhdGVfYXJjaChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGRlY29kZSwKKwkJICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmRfYml0cywgYm9vbCBjaGFuZ2VfYnJpZGdlKQoreworCWlmIChhcmNoX3NldF92Z2Ffc3RhdGUpCisJCXJldHVybiBhcmNoX3NldF92Z2Ffc3RhdGUoZGV2LCBkZWNvZGUsIGNvbW1hbmRfYml0cywKKwkJCQkJCWNoYW5nZV9icmlkZ2UpOworCXJldHVybiAwOworfQorCiAvKioKICAqIHBjaV9zZXRfdmdhX3N0YXRlIC0gc2V0IFZHQSBkZWNvZGUgc3RhdGUgb24gZGV2aWNlIGFuZCBwYXJlbnRzIGlmIHJlcXVlc3RlZAogICogQGRldjogdGhlIFBDSSBkZXZpY2UKQEAgLTI2MjgsOSArMjc4NCwxNSBAQAogCXN0cnVjdCBwY2lfYnVzICpidXM7CiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZTsKIAl1MTYgY21kOworCWludCByYzsKIAogCVdBUk5fT04oY29tbWFuZF9iaXRzICYgfihQQ0lfQ09NTUFORF9JT3xQQ0lfQ09NTUFORF9NRU1PUlkpKTsKIAorCS8qIEFSQ0ggc3BlY2lmaWMgVkdBIGVuYWJsZXMgKi8KKwlyYyA9IHBjaV9zZXRfdmdhX3N0YXRlX2FyY2goZGV2LCBkZWNvZGUsIGNvbW1hbmRfYml0cywgY2hhbmdlX2JyaWRnZSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKIAlpZiAoZGVjb2RlID09IHRydWUpCiAJCWNtZCB8PSBjb21tYW5kX2JpdHM7CkBAIC0yODQ1LDYgKzMwMDcsNyBAQAogRVhQT1JUX1NZTUJPTChwY2lfZGlzYWJsZV9kZXZpY2UpOwogRVhQT1JUX1NZTUJPTChwY2lfZmluZF9jYXBhYmlsaXR5KTsKIEVYUE9SVF9TWU1CT0wocGNpX2J1c19maW5kX2NhcGFiaWxpdHkpOworRVhQT1JUX1NZTUJPTChwY2lfcmVnaXN0ZXJfc2V0X3ZnYV9zdGF0ZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9yZWxlYXNlX3JlZ2lvbnMpOwogRVhQT1JUX1NZTUJPTChwY2lfcmVxdWVzdF9yZWdpb25zKTsKIEVYUE9SVF9TWU1CT0wocGNpX3JlcXVlc3RfcmVnaW9uc19leGNsdXNpdmUpOwpAQCAtMjg3MSwxMCArMzAzNCw4IEBACiBFWFBPUlRfU1lNQk9MKHBjaV9yZXN0b3JlX3N0YXRlKTsKIEVYUE9SVF9TWU1CT0wocGNpX3BtZV9jYXBhYmxlKTsKIEVYUE9SVF9TWU1CT0wocGNpX3BtZV9hY3RpdmUpOwotRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX3dha2UpOwogRVhQT1JUX1NZTUJPTChwY2lfd2FrZV9mcm9tX2QzKTsKIEVYUE9SVF9TWU1CT0wocGNpX3RhcmdldF9zdGF0ZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9wcmVwYXJlX3RvX3NsZWVwKTsKIEVYUE9SVF9TWU1CT0wocGNpX2JhY2tfZnJvbV9zbGVlcCk7CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfc2V0X3BjaWVfcmVzZXRfc3RhdGUpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IGZiZDBlM2EuLjRlYjEwZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC0zNSw2ICszNSwxMCBAQAogICoKICAqIEBzbGVlcF93YWtlOiBlbmFibGVzL2Rpc2FibGVzIHRoZSBzeXN0ZW0gd2FrZSB1cCBjYXBhYmlsaXR5IG9mIGdpdmVuIGRldmljZQogICoKKyAqIEBydW5fd2FrZTogZW5hYmxlcy9kaXNhYmxlcyB0aGUgcGxhdGZvcm0gdG8gZ2VuZXJhdGUgcnVuLXRpbWUgd2FrZS11cCBldmVudHMKKyAqCQlmb3IgZ2l2ZW4gZGV2aWNlICh0aGUgZGV2aWNlJ3Mgd2FrZS11cCBjYXBhYmlsaXR5IGhhcyB0byBiZQorICoJCWVuYWJsZWQgYnkgQHNsZWVwX3dha2UgZm9yIHRoaXMgZmVhdHVyZSB0byB3b3JrKQorICoKICAqIElmIGdpdmVuIHBsYXRmb3JtIGlzIGdlbmVyYWxseSBjYXBhYmxlIG9mIHBvd2VyIG1hbmFnaW5nIFBDSSBkZXZpY2VzLCBhbGwgb2YKICAqIHRoZXNlIGNhbGxiYWNrcyBhcmUgbWFuZGF0b3J5LgogICovCkBAIC00NCwxMSArNDgsMTYgQEAKIAlwY2lfcG93ZXJfdCAoKmNob29zZV9zdGF0ZSkoc3RydWN0IHBjaV9kZXYgKmRldik7CiAJYm9vbCAoKmNhbl93YWtldXApKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCWludCAoKnNsZWVwX3dha2UpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKKwlpbnQgKCpydW5fd2FrZSkoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpOwogfTsKIAogZXh0ZXJuIGludCBwY2lfc2V0X3BsYXRmb3JtX3BtKHN0cnVjdCBwY2lfcGxhdGZvcm1fcG1fb3BzICpvcHMpOwogZXh0ZXJuIHZvaWQgcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlKTsKIGV4dGVybiB2b2lkIHBjaV9kaXNhYmxlX2VuYWJsZWRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGJvb2wgcGNpX2NoZWNrX3BtZV9zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaW50IHBjaV9maW5pc2hfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGludCBfX3BjaV9wbWVfd2FrZXVwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmlnbik7CitleHRlcm4gdm9pZCBwY2lfcG1lX3dha2V1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiBleHRlcm4gdm9pZCBwY2lfcG1faW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiB2b2lkIHBsYXRmb3JtX3BjaV93YWtldXBfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiB2b2lkIHBjaV9hbGxvY2F0ZV9jYXBfc2F2ZV9idWZmZXJzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpAQCAtMzE5LDYgKzMyOCwxMyBAQAogCWludCAoKnJlc2V0KShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHJvYmUpOwogfTsKIAorI2lmZGVmIENPTkZJR19QQ0lfUVVJUktTCiBleHRlcm4gaW50IHBjaV9kZXZfc3BlY2lmaWNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkKK3sKKwlyZXR1cm4gLUVOT1RUWTsKK30KKyNlbmRpZgogCiAjZW5kaWYgLyogRFJJVkVSU19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnIGIvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCmluZGV4IDVhMGM2YWQuLmI4YjQ5NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKQEAgLTQ2LDMgKzQ2LDcgQEAKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgUENJIEV4cHJlc3MgQVNQTSBkZWJ1ZyBzdXBwb3J0LiBJdCB3aWxsIGFkZCBwZXItZGV2aWNlCiAJICBpbnRlcmZhY2UgdG8gY29udHJvbCBBU1BNLgorCitjb25maWcgUENJRV9QTUUKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBQQ0lFUE9SVEJVUyAmJiBQTV9SVU5USU1FICYmIEVYUEVSSU1FTlRBTCAmJiBBQ1BJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZQppbmRleCAxMWY2YmIxZS4uZWE2NTQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9wY2llL01ha2VmaWxlCkBAIC0xMSwzICsxMSw1IEBACiAKICMgQnVpbGQgUENJIEV4cHJlc3MgQUVSIGlmIG5lZWRlZAogb2JqLSQoQ09ORklHX1BDSUVBRVIpCQkrPSBhZXIvCisKK29iai0kKENPTkZJR19QQ0lFX1BNRSkgKz0gcG1lLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wbWUvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9wY2llL3BtZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjkyMzgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciBQQ0ktRXhwcmVzcyBSb290IFBvcnQgUE1FIHNpZ25hbGluZyBkcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX1BDSUVfUE1FKSArPSBwbWVkcml2ZXIubworCitwbWVkcml2ZXItb2JqcyA6PSBwY2llX3BtZS5vCitwbWVkcml2ZXItJChDT05GSUdfQUNQSSkgKz0gcGNpZV9wbWVfYWNwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjNjYmZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuYwpAQCAtMCwwICsxLDUwNSBAQAorLyoKKyAqIFBDSWUgTmF0aXZlIFBNRSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3JwCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5IFNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4sIE5vdmVsbCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVjIuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAiLi4vLi4vcGNpLmgiCisjaW5jbHVkZSAicGNpZV9wbWUuaCIKKworI2RlZmluZSBQQ0lfRVhQX1JUU1RBX1BNRQkweDEwMDAwIC8qIFBNRSBzdGF0dXMgKi8KKyNkZWZpbmUgUENJX0VYUF9SVFNUQV9QRU5ESU5HCTB4MjAwMDAgLyogUE1FIHBlbmRpbmcgKi8KKworLyoKKyAqIElmIHNldCwgdGhpcyBzd2l0Y2ggd2lsbCBwcmV2ZW50IHRoZSBQQ0llIHJvb3QgcG9ydCBQTUUgc2VydmljZSBkcml2ZXIgZnJvbQorICogYmVpbmcgcmVnaXN0ZXJlZC4gIENvbnNlcXVlbnRseSwgdGhlIGludGVycnVwdC1iYXNlZCBQQ0llIFBNRSBzaWduYWxpbmcgd2lsbAorICogbm90IGJlIHVzZWQgYnkgYW55IFBDSWUgcm9vdCBwb3J0cyBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX2Rpc2FibGVkOworCisvKgorICogVGhlIFBDSSBFeHByZXNzIEJhc2UgU3BlY2lmaWNhdGlvbiAyLjAsIFNlY3Rpb24gNi4xLjgsIHN0YXRlcyB0aGUgZm9sbG93aW5nOgorICogIkluIG9yZGVyIHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBub24tUENJIEV4cHJlc3MtYXdhcmUgc3lzdGVtCisgKiBzb2Z0d2FyZSwgc3lzdGVtIHBvd2VyIG1hbmFnZW1lbnQgbG9naWMgbXVzdCBiZSBjb25maWd1cmVkIGJ5IGZpcm13YXJlIHRvIHVzZQorICogdGhlIGxlZ2FjeSBtZWNoYW5pc20gb2Ygc2lnbmFsaW5nIFBNRSBieSBkZWZhdWx0LiAgUENJIEV4cHJlc3MtYXdhcmUgc3lzdGVtCisgKiBzb2Z0d2FyZSBtdXN0IG5vdGlmeSB0aGUgZmlybXdhcmUgcHJpb3IgdG8gZW5hYmxpbmcgbmF0aXZlLCBpbnRlcnJ1cHQtYmFzZWQKKyAqIFBNRSBzaWduYWxpbmcuIiAgSG93ZXZlciwgaWYgdGhlIHBsYXRmb3JtIGRvZXNuJ3QgcHJvdmlkZSB1cyB3aXRoIGEgc3VpdGFibGUKKyAqIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gb3IgdGhlIG5vdGlmaWNhdGlvbiBmYWlscywgaXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgb3IKKyAqIG5vdCB3ZSBhcmUgc3VwcG9zZWQgdG8gdXNlIHRoZSBpbnRlcnJ1cHQtYmFzZWQgUENJZSBQTUUgc2lnbmFsaW5nLiAgVGhlCisgKiBzd2l0Y2ggYmVsb3cgY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGRlc2lyZWQgYmVoYXZpb3VyLiAgV2hlbiBzZXQsIGl0CisgKiB3aWxsIG1ha2UgdGhlIGtlcm5lbCB1c2UgdGhlIGludGVycnVwdC1iYXNlZCBQQ0llIFBNRSBzaWduYWxpbmcgcmVnYXJkbGVzcyBvZgorICogdGhlIHBsYXRmb3JtIG5vdGlmaWNhdGlvbiBzdGF0dXMsIGFsdGhvdWdoIHRoZSBrZXJuZWwgd2lsbCBhdHRlbXB0IHRvIG5vdGlmeQorICogdGhlIHBsYXRmb3JtIGFueXdheS4gIFdoZW4gdW5zZXQsIGl0IHdpbGwgcHJldmVudCB0aGUga2VybmVsIGZyb20gdXNpbmcgdGhlCisgKiB0aGUgaW50ZXJydXB0LWJhc2VkIFBDSWUgUE1FIHNpZ25hbGluZyBpZiB0aGUgcGxhdGZvcm0gbm90aWZpY2F0aW9uIGZhaWxzLAorICogd2hpY2ggaXMgdGhlIGRlZmF1bHQuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX2ZvcmNlX2VuYWJsZTsKKworLyoKKyAqIElmIHRoaXMgc3dpdGNoIGlzIHNldCwgTVNJIHdpbGwgbm90IGJlIHVzZWQgZm9yIFBDSWUgUE1FIHNpZ25hbGluZy4gIFRoaXMKKyAqIGNhdXNlcyB0aGUgUENJZSBwb3J0IGRyaXZlciB0byB1c2UgSU5UeCBpbnRlcnJ1cHRzIG9ubHksIGJ1dCBpdCB0dXJucyBvdXQKKyAqIHRoYXQgdXNpbmcgTVNJIGZvciBQQ0llIFBNRSBzaWduYWxpbmcgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQQ0llIFBNRS1iYXNlZAorICogd2FrZS11cCBmcm9tIHN5c3RlbSBzbGVlcCBzdGF0ZXMuCisgKi8KK2Jvb2wgcGNpZV9wbWVfbXNpX2Rpc2FibGVkOworCitzdGF0aWMgaW50IF9faW5pdCBwY2llX3BtZV9zZXR1cChjaGFyICpzdHIpCit7CisJaWYgKCFzdHJjbXAoc3RyLCAib2ZmIikpCisJCXBjaWVfcG1lX2Rpc2FibGVkID0gdHJ1ZTsKKwllbHNlIGlmICghc3RyY21wKHN0ciwgImZvcmNlIikpCisJCXBjaWVfcG1lX2ZvcmNlX2VuYWJsZSA9IHRydWU7CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJub21zaSIpKQorCQlwY2llX3BtZV9tc2lfZGlzYWJsZWQgPSB0cnVlOworCXJldHVybiAxOworfQorX19zZXR1cCgicGNpZV9wbWU9IiwgcGNpZV9wbWVfc2V0dXApOworCisvKioKKyAqIHBjaWVfcG1lX3BsYXRmb3JtX3NldHVwIC0gRW5zdXJlIHRoYXQgdGhlIGtlcm5lbCBjb250cm9scyB0aGUgUENJZSBQTUUuCisgKiBAc3J2OiBQQ0llIFBNRSByb290IHBvcnQgc2VydmljZSB0byB1c2UgZm9yIGNhcnJ5aW5nIG91dCB0aGUgY2hlY2suCisgKgorICogTm90aWZ5IHRoZSBwbGF0Zm9ybSB0aGF0IHRoZSBuYXRpdmUgUENJZSBQTUUgaXMgZ29pbmcgdG8gYmUgdXNlZCBhbmQgcmV0dXJuCisgKiAndHJ1ZScgaWYgdGhlIGNvbnRyb2wgb2YgdGhlIFBDSWUgUE1FIHJlZ2lzdGVycyBoYXMgYmVlbiBhY3F1aXJlZCBmcm9tIHRoZQorICogcGxhdGZvcm0uCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX3BsYXRmb3JtX3NldHVwKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCWlmICghcGNpZV9wbWVfcGxhdGZvcm1fbm90aWZ5KHNydikpCisJCXJldHVybiB0cnVlOworCXJldHVybiBwY2llX3BtZV9mb3JjZV9lbmFibGU7Cit9CisKK3N0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgeworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlib29sIG5vaXJxOyAvKiBEb24ndCBlbmFibGUgdGhlIFBNRSBpbnRlcnJ1cHQgdXNlZCBieSB0aGlzIHNlcnZpY2UuICovCit9OworCisvKioKKyAqIHBjaWVfcG1lX2ludGVycnVwdF9lbmFibGUgLSBFbmFibGUvZGlzYWJsZSBQQ0llIFBNRSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbi4KKyAqIEBkZXY6IFBDSWUgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3Rvci4KKyAqIEBlbmFibGU6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgKi8KK3N0YXRpYyB2b2lkIHBjaWVfcG1lX2ludGVycnVwdF9lbmFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpCit7CisJaW50IHJ0Y3RsX3BvczsKKwl1MTYgcnRjdGw7CisKKwlydGN0bF9wb3MgPSBwY2lfcGNpZV9jYXAoZGV2KSArIFBDSV9FWFBfUlRDVEw7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHJ0Y3RsX3BvcywgJnJ0Y3RsKTsKKwlpZiAoZW5hYmxlKQorCQlydGN0bCB8PSBQQ0lfRVhQX1JUQ1RMX1BNRUlFOworCWVsc2UKKwkJcnRjdGwgJj0gflBDSV9FWFBfUlRDVExfUE1FSUU7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcnRjdGxfcG9zLCBydGN0bCk7Cit9CisKKy8qKgorICogcGNpZV9wbWVfY2xlYXJfc3RhdHVzIC0gQ2xlYXIgcm9vdCBwb3J0IFBNRSBpbnRlcnJ1cHQgc3RhdHVzLgorICogQGRldjogUENJZSByb290IHBvcnQgb3IgZXZlbnQgY29sbGVjdG9yLgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9jbGVhcl9zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcnRzdGFfcG9zOworCXUzMiBydHN0YTsKKworCXJ0c3RhX3BvcyA9IHBjaV9wY2llX2NhcChkZXYpICsgUENJX0VYUF9SVFNUQTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHJ0c3RhX3BvcywgJnJ0c3RhKTsKKwlydHN0YSB8PSBQQ0lfRVhQX1JUU1RBX1BNRTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcnRzdGFfcG9zLCBydHN0YSk7Cit9CisKKy8qKgorICogcGNpZV9wbWVfd2Fsa19idXMgLSBTY2FuIGEgUENJIGJ1cyBmb3IgZGV2aWNlcyBhc3NlcnRpbmcgUE1FIy4KKyAqIEBidXM6IFBDSSBidXMgdG8gc2Nhbi4KKyAqCisgKiBTY2FuIGdpdmVuIFBDSSBidXMgYW5kIGFsbCBidXNlcyB1bmRlciBpdCBmb3IgZGV2aWNlcyBhc3NlcnRpbmcgUE1FIy4KKyAqLworc3RhdGljIGJvb2wgcGNpZV9wbWVfd2Fsa19idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJLyogU2tpcCBQQ0llIGRldmljZXMgaW4gY2FzZSB3ZSBzdGFydGVkIGZyb20gYSByb290IHBvcnQuICovCisJCWlmICghcGNpX2lzX3BjaWUoZGV2KSAmJiBwY2lfY2hlY2tfcG1lX3N0YXR1cyhkZXYpKSB7CisJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmZGV2LT5kZXYpOworCQkJcmV0ID0gdHJ1ZTsKKwkJfQorCisJCWlmIChkZXYtPnN1Ym9yZGluYXRlICYmIHBjaWVfcG1lX3dhbGtfYnVzKGRldi0+c3Vib3JkaW5hdGUpKQorCQkJcmV0ID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZSAtIENoZWNrIGlmIFBDSWUtUENJIGJyaWRnZSBnZW5lcmF0ZWQgYSBQTUUuCisgKiBAYnVzOiBTZWNvbmRhcnkgYnVzIG9mIHRoZSBicmlkZ2UuCisgKiBAZGV2Zm46IERldmljZS9mdW5jdGlvbiBudW1iZXIgdG8gY2hlY2suCisgKgorICogUE1FIGZyb20gUENJIGRldmljZXMgdW5kZXIgYSBQQ0llLVBDSSBicmlkZ2UgbWF5IGJlIGNvbnZlcnRlZCB0byBhbiBpbi1iYW5kCisgKiBQQ0llIFBNRSBtZXNzYWdlLiAgSW4gc3VjaCB0aGF0IGNhc2UgdGhlIGJyaWRnZSBzaG91bGQgdXNlIHRoZSBSZXF1ZXN0ZXIgSUQKKyAqIG9mIGRldmljZS9mdW5jdGlvbiBudW1iZXIgMCBvbiBpdHMgc2Vjb25kYXJ5IGJ1cy4KKyAqLworc3RhdGljIGJvb2wgcGNpZV9wbWVfZnJvbV9wY2lfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpidXMsIHU4IGRldmZuKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJaWYgKGRldmZuKQorCQlyZXR1cm4gZmFsc2U7CisKKwlkZXYgPSBwY2lfZGV2X2dldChidXMtPnNlbGYpOworCWlmICghZGV2KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocGNpX2lzX3BjaWUoZGV2KSAmJiBkZXYtPnBjaWVfdHlwZSA9PSBQQ0lfRVhQX1RZUEVfUENJX0JSSURHRSkgeworCQlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKKwkJaWYgKHBjaWVfcG1lX3dhbGtfYnVzKGJ1cykpCisJCQlmb3VuZCA9IHRydWU7CisJCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKwl9CisKKwlwY2lfZGV2X3B1dChkZXYpOworCXJldHVybiBmb3VuZDsKK30KKworLyoqCisgKiBwY2llX3BtZV9oYW5kbGVfcmVxdWVzdCAtIEZpbmQgZGV2aWNlIHRoYXQgZ2VuZXJhdGVkIFBNRSBhbmQgaGFuZGxlIGl0LgorICogQHBvcnQ6IFJvb3QgcG9ydCBvciBldmVudCBjb2xsZWN0b3IgdGhhdCBnZW5lcmF0ZWQgdGhlIFBNRSBpbnRlcnJ1cHQuCisgKiBAcmVxX2lkOiBQQ0llIFJlcXVlc3RlciBJRCBvZiB0aGUgZGV2aWNlIHRoYXQgZ2VuZXJhdGVkIHRoZSBQTUUuCisgKi8KK3N0YXRpYyB2b2lkIHBjaWVfcG1lX2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCBwY2lfZGV2ICpwb3J0LCB1MTYgcmVxX2lkKQoreworCXU4IGJ1c25yID0gcmVxX2lkID4+IDgsIGRldmZuID0gcmVxX2lkICYgMHhmZjsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJLyogRmlyc3QsIGNoZWNrIGlmIHRoZSBQTUUgaXMgZnJvbSB0aGUgcm9vdCBwb3J0IGl0c2VsZi4gKi8KKwlpZiAocG9ydC0+ZGV2Zm4gPT0gZGV2Zm4gJiYgcG9ydC0+YnVzLT5udW1iZXIgPT0gYnVzbnIpIHsKKwkJaWYgKHBjaV9jaGVja19wbWVfc3RhdHVzKHBvcnQpKSB7CisJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmcG9ydC0+ZGV2KTsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBBcHBhcmVudGx5LCB0aGUgcm9vdCBwb3J0IGdlbmVyYXRlZCB0aGUgUE1FIG9uIGJlaGFsZgorCQkJICogb2YgYSBub24tUENJZSBkZXZpY2UgZG93bnN0cmVhbS4gIElmIHRoaXMgaXMgZG9uZSBieQorCQkJICogYSByb290IHBvcnQsIHRoZSBSZXF1ZXN0ZXIgSUQgZmllbGQgaW4gaXRzIHN0YXR1cworCQkJICogcmVnaXN0ZXIgbWF5IGNvbnRhaW4gZWl0aGVyIHRoZSByb290IHBvcnQncywgb3IgdGhlCisJCQkgKiBzb3VyY2UgZGV2aWNlJ3MgaW5mb3JtYXRpb24gKFBDSSBFeHByZXNzIEJhc2UKKwkJCSAqIFNwZWNpZmljYXRpb24sIFJldi4gMi4wLCBTZWN0aW9uIDYuMS45KS4KKwkJCSAqLworCQkJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCQlmb3VuZCA9IHBjaWVfcG1lX3dhbGtfYnVzKHBvcnQtPnN1Ym9yZGluYXRlKTsKKwkJCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiBTZWNvbmQsIGZpbmQgdGhlIGJ1cyB0aGUgc291cmNlIGRldmljZSBpcyBvbi4gKi8KKwlidXMgPSBwY2lfZmluZF9idXMocGNpX2RvbWFpbl9ucihwb3J0LT5idXMpLCBidXNucik7CisJaWYgKCFidXMpCisJCWdvdG8gb3V0OworCisJLyogTmV4dCwgY2hlY2sgaWYgdGhlIFBNRSBpcyBmcm9tIGEgUENJZS1QQ0kgYnJpZGdlLiAqLworCWZvdW5kID0gcGNpZV9wbWVfZnJvbV9wY2lfYnJpZGdlKGJ1cywgZGV2Zm4pOworCWlmIChmb3VuZCkKKwkJZ290byBvdXQ7CisKKwkvKiBGaW5hbGx5LCB0cnkgdG8gZmluZCB0aGUgUE1FIHNvdXJjZSBvbiB0aGUgYnVzLiAqLworCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlwY2lfZGV2X2dldChkZXYpOworCQlpZiAoZGV2LT5kZXZmbiA9PSBkZXZmbikgeworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2KTsKKwl9CisJdXBfcmVhZCgmcGNpX2J1c19zZW0pOworCisJaWYgKGZvdW5kKSB7CisJCS8qIFRoZSBkZXZpY2UgaXMgdGhlcmUsIGJ1dCB3ZSBoYXZlIHRvIGNoZWNrIGl0cyBQTUUgc3RhdHVzLiAqLworCQlmb3VuZCA9IHBjaV9jaGVja19wbWVfc3RhdHVzKGRldik7CisJCWlmIChmb3VuZCkKKwkJCXBtX3JlcXVlc3RfcmVzdW1lKCZkZXYtPmRldik7CisJCXBjaV9kZXZfcHV0KGRldik7CisJfSBlbHNlIGlmIChkZXZmbikgeworCQkvKgorCQkgKiBUaGUgZGV2aWNlIGlzIG5vdCB0aGVyZSwgYnV0IHdlIGNhbiBzdGlsbCB0cnkgdG8gcmVjb3ZlciBieQorCQkgKiBhc3N1bWluZyB0aGF0IHRoZSBQTUUgd2FzIHJlcG9ydGVkIGJ5IGEgUENJZS1QQ0kgYnJpZGdlIHRoYXQKKwkJICogdXNlZCBkZXZmbiBkaWZmZXJlbnQgZnJvbSB6ZXJvLgorCQkgKi8KKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiUE1FIGludGVycnVwdCBnZW5lcmF0ZWQgZm9yICIKKwkJCSJub24tZXhpc3RlbnQgZGV2aWNlICUwMng6JTAyeC4lZFxuIiwKKwkJCWJ1c25yLCBQQ0lfU0xPVChkZXZmbiksIFBDSV9GVU5DKGRldmZuKSk7CisJCWZvdW5kID0gcGNpZV9wbWVfZnJvbV9wY2lfYnJpZGdlKGJ1cywgMCk7CisJfQorCisgb3V0OgorCWlmICghZm91bmQpCisJCWRldl9kYmcoJnBvcnQtPmRldiwgIlNwdXJpb3VzIG5hdGl2ZSBQTUUgaW50ZXJydXB0IVxuIik7Cit9CisKKy8qKgorICogcGNpZV9wbWVfd29ya19mbiAtIFdvcmsgaGFuZGxlciBmb3IgUENJZSBQTUUgaW50ZXJydXB0LgorICogQHdvcms6IFdvcmsgc3RydWN0dXJlIGdpdmluZyBhY2Nlc3MgdG8gc2VydmljZSBkYXRhLgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhICpkYXRhID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhLCB3b3JrKTsKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydCA9IGRhdGEtPnNydi0+cG9ydDsKKwlpbnQgcnRzdGFfcG9zOworCXUzMiBydHN0YTsKKworCXJ0c3RhX3BvcyA9IHBjaV9wY2llX2NhcChwb3J0KSArIFBDSV9FWFBfUlRTVEE7CisKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKworCWZvciAoOzspIHsKKwkJaWYgKGRhdGEtPm5vaXJxKQorCQkJYnJlYWs7CisKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBvcnQsIHJ0c3RhX3BvcywgJnJ0c3RhKTsKKwkJaWYgKHJ0c3RhICYgUENJX0VYUF9SVFNUQV9QTUUpIHsKKwkJCS8qCisJCQkgKiBDbGVhciBQTUUgc3RhdHVzIG9mIHRoZSBwb3J0LiAgSWYgdGhlcmUgYXJlIG90aGVyCisJCQkgKiBwZW5kaW5nIFBNRXMsIHRoZSBzdGF0dXMgd2lsbCBiZSBzZXQgYWdhaW4uCisJCQkgKi8KKwkJCXBjaWVfcG1lX2NsZWFyX3N0YXR1cyhwb3J0KTsKKworCQkJc3Bpbl91bmxvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKwkJCXBjaWVfcG1lX2hhbmRsZV9yZXF1ZXN0KHBvcnQsIHJ0c3RhICYgMHhmZmZmKTsKKwkJCXNwaW5fbG9ja19pcnEoJmRhdGEtPmxvY2spOworCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5vIG5lZWQgdG8gbG9vcCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBQTUVzIHBlbmRpbmcuICovCisJCWlmICghKHJ0c3RhICYgUENJX0VYUF9SVFNUQV9QRU5ESU5HKSkKKwkJCWJyZWFrOworCisJCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJCWNwdV9yZWxheCgpOworCQlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKwl9CisKKwlpZiAoIWRhdGEtPm5vaXJxKQorCQlwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHBvcnQsIHRydWUpOworCisJc3Bpbl91bmxvY2tfaXJxKCZkYXRhLT5sb2NrKTsKK30KKworLyoqCisgKiBwY2llX3BtZV9pcnEgLSBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgUENJZSByb290IHBvcnQgUE1FIGludGVycnVwdC4KKyAqIEBpcnE6IEludGVycnVwdCB2ZWN0b3IuCisgKiBAY29udGV4dDogSW50ZXJydXB0IGNvbnRleHQgcG9pbnRlci4KKyAqLworc3RhdGljIGlycXJldHVybl90IHBjaWVfcG1lX2lycShpbnQgaXJxLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwb3J0OworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGE7CisJaW50IHJ0c3RhX3BvczsKKwl1MzIgcnRzdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBvcnQgPSAoKHN0cnVjdCBwY2llX2RldmljZSAqKWNvbnRleHQpLT5wb3J0OworCWRhdGEgPSBnZXRfc2VydmljZV9kYXRhKChzdHJ1Y3QgcGNpZV9kZXZpY2UgKiljb250ZXh0KTsKKworCXJ0c3RhX3BvcyA9IHBjaV9wY2llX2NhcChwb3J0KSArIFBDSV9FWFBfUlRTVEE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwb3J0LCBydHN0YV9wb3MsICZydHN0YSk7CisKKwlpZiAoIShydHN0YSAmIFBDSV9FWFBfUlRTVEFfUE1FKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHBvcnQsIGZhbHNlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CisKKwkvKiBXZSBkb24ndCB1c2UgcG1fd3EsIGJlY2F1c2UgaXQncyBmcmVlemFibGUuICovCisJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogcGNpZV9wbWVfc2V0X25hdGl2ZSAtIFNldCB0aGUgUE1FIGludGVycnVwdCBmbGFnIGZvciBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBpZ246IElnbm9yZWQuCisgKi8KK3N0YXRpYyBpbnQgcGNpZV9wbWVfc2V0X25hdGl2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICppZ24pCit7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiU2lnbmFsaW5nIFBNRSB0aHJvdWdoIFBDSWUgUE1FIGludGVycnVwdFxuIik7CisKKwlkZXZpY2Vfc2V0X3J1bl93YWtlKCZkZXYtPmRldiwgdHJ1ZSk7CisJZGV2LT5wbWVfaW50ZXJydXB0ID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY2llX3BtZV9tYXJrX2RldmljZXMgLSBTZXQgdGhlIFBNRSBpbnRlcnJ1cHQgZmxhZyBmb3IgZGV2aWNlcyBiZWxvdyBhIHBvcnQuCisgKiBAcG9ydDogUENJZSByb290IHBvcnQgb3IgZXZlbnQgY29sbGVjdG9yIHRvIGhhbmRsZS4KKyAqCisgKiBGb3IgZWFjaCBkZXZpY2UgYmVsb3cgZ2l2ZW4gcm9vdCBwb3J0LCBpbmNsdWRpbmcgdGhlIHBvcnQgaXRzZWxmIChvciBmb3IgZWFjaAorICogcm9vdCBjb21wbGV4IGludGVncmF0ZWQgZW5kcG9pbnQgaWYgQHBvcnQgaXMgYSByb290IGNvbXBsZXggZXZlbnQgY29sbGVjdG9yKQorICogc2V0IHRoZSBmbGFnIGluZGljYXRpbmcgdGhhdCBpdCBjYW4gc2lnbmFsIHJ1bi10aW1lIHdha2UtdXAgZXZlbnRzIHZpYSBQQ0llCisgKiBQTUUgaW50ZXJydXB0cy4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfbWFya19kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwb3J0KQoreworCXBjaWVfcG1lX3NldF9uYXRpdmUocG9ydCwgTlVMTCk7CisJaWYgKHBvcnQtPnN1Ym9yZGluYXRlKSB7CisJCXBjaV93YWxrX2J1cyhwb3J0LT5zdWJvcmRpbmF0ZSwgcGNpZV9wbWVfc2V0X25hdGl2ZSwgTlVMTCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHBvcnQtPmJ1czsKKwkJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCQkvKiBDaGVjayBpZiB0aGlzIGlzIGEgcm9vdCBwb3J0IGV2ZW50IGNvbGxlY3Rvci4gKi8KKwkJaWYgKHBvcnQtPnBjaWVfdHlwZSAhPSBQQ0lfRVhQX1RZUEVfUkNfRUMgfHwgIWJ1cykKKwkJCXJldHVybjsKKworCQlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQorCQkJaWYgKHBjaV9pc19wY2llKGRldikKKwkJCSAgICAmJiBkZXYtPnBjaWVfdHlwZSA9PSBQQ0lfRVhQX1RZUEVfUkNfRU5EKQorCQkJCXBjaWVfcG1lX3NldF9uYXRpdmUoZGV2LCBOVUxMKTsKKwkJdXBfcmVhZCgmcGNpX2J1c19zZW0pOworCX0KK30KKworLyoqCisgKiBwY2llX3BtZV9wcm9iZSAtIEluaXRpYWxpemUgUENJZSBQTUUgc2VydmljZSBmb3IgZ2l2ZW4gcm9vdCBwb3J0LgorICogQHNydjogUENJZSBzZXJ2aWNlIHRvIGluaXRpYWxpemUuCisgKi8KK3N0YXRpYyBpbnQgcGNpZV9wbWVfcHJvYmUoc3RydWN0IHBjaWVfZGV2aWNlICpzcnYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQ7CisJc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSAqZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFwY2llX3BtZV9wbGF0Zm9ybV9zZXR1cChzcnYpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmZGF0YS0+bG9jayk7CisJSU5JVF9XT1JLKCZkYXRhLT53b3JrLCBwY2llX3BtZV93b3JrX2ZuKTsKKwlkYXRhLT5zcnYgPSBzcnY7CisJc2V0X3NlcnZpY2VfZGF0YShzcnYsIGRhdGEpOworCisJcG9ydCA9IHNydi0+cG9ydDsKKwlwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHBvcnQsIGZhbHNlKTsKKwlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShzcnYtPmlycSwgcGNpZV9wbWVfaXJxLCBJUlFGX1NIQVJFRCwgIlBDSWUgUE1FIiwgc3J2KTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKGRhdGEpOworCX0gZWxzZSB7CisJCXBjaWVfcG1lX21hcmtfZGV2aWNlcyhwb3J0KTsKKwkJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCB0cnVlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHBjaWVfcG1lX3N1c3BlbmQgLSBTdXNwZW5kIFBDSWUgUE1FIHNlcnZpY2UgZGV2aWNlLgorICogQHNydjogUENJZSBzZXJ2aWNlIGRldmljZSB0byBzdXNwZW5kLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3N1c3BlbmQoc3RydWN0IHBjaWVfZGV2aWNlICpzcnYpCit7CisJc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSAqZGF0YSA9IGdldF9zZXJ2aWNlX2RhdGEoc3J2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydCA9IHNydi0+cG9ydDsKKworCXNwaW5fbG9ja19pcnEoJmRhdGEtPmxvY2spOworCXBjaWVfcG1lX2ludGVycnVwdF9lbmFibGUocG9ydCwgZmFsc2UpOworCXBjaWVfcG1lX2NsZWFyX3N0YXR1cyhwb3J0KTsKKwlkYXRhLT5ub2lycSA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKworCXN5bmNocm9uaXplX2lycShzcnYtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY2llX3BtZV9yZXN1bWUgLSBSZXN1bWUgUENJZSBQTUUgc2VydmljZSBkZXZpY2UuCisgKiBAc3J2IC0gUENJZSBzZXJ2aWNlIGRldmljZSB0byByZXN1bWUuCisgKi8KK3N0YXRpYyBpbnQgcGNpZV9wbWVfcmVzdW1lKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGEgPSBnZXRfc2VydmljZV9kYXRhKHNydik7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQgPSBzcnYtPnBvcnQ7CisKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKwlkYXRhLT5ub2lycSA9IGZhbHNlOworCXBjaWVfcG1lX2NsZWFyX3N0YXR1cyhwb3J0KTsKKwlwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHBvcnQsIHRydWUpOworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY2llX3BtZV9yZW1vdmUgLSBQcmVwYXJlIFBDSWUgUE1FIHNlcnZpY2UgZGV2aWNlIGZvciByZW1vdmFsLgorICogQHNydiAtIFBDSWUgc2VydmljZSBkZXZpY2UgdG8gcmVzdW1lLgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9yZW1vdmUoc3RydWN0IHBjaWVfZGV2aWNlICpzcnYpCit7CisJcGNpZV9wbWVfc3VzcGVuZChzcnYpOworCWZyZWVfaXJxKHNydi0+aXJxLCBzcnYpOworCWtmcmVlKGdldF9zZXJ2aWNlX2RhdGEoc3J2KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyIHBjaWVfcG1lX2RyaXZlciA9IHsKKwkubmFtZQkJPSAicGNpZV9wbWUiLAorCS5wb3J0X3R5cGUgCT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCwKKwkuc2VydmljZSAJPSBQQ0lFX1BPUlRfU0VSVklDRV9QTUUsCisKKwkucHJvYmUJCT0gcGNpZV9wbWVfcHJvYmUsCisJLnN1c3BlbmQJPSBwY2llX3BtZV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcGNpZV9wbWVfcmVzdW1lLAorCS5yZW1vdmUJCT0gcGNpZV9wbWVfcmVtb3ZlLAorfTsKKworLyoqCisgKiBwY2llX3BtZV9zZXJ2aWNlX2luaXQgLSBSZWdpc3RlciB0aGUgUENJZSBQTUUgc2VydmljZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHBjaWVfcG1lX3NlcnZpY2VfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2llX3BtZV9kaXNhYmxlZCA/CisJCS1FTk9ERVYgOiBwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlcigmcGNpZV9wbWVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGNpZV9wbWVfc2VydmljZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmggYi9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGQyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBkcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5oCisgKgorICogUENJIEV4cHJlc3MgUm9vdCBQb3J0IFBNRSBzaWduYWxpbmcgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICovCisKKyNpZm5kZWYgX1BDSUVfUE1FX0hfCisjZGVmaW5lIF9QQ0lFX1BNRV9IXworCitzdHJ1Y3QgcGNpZV9kZXZpY2U7CisKKyNpZmRlZiBDT05GSUdfQUNQSQorZXh0ZXJuIGludCBwY2llX3BtZV9hY3BpX3NldHVwKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KTsKKworc3RhdGljIGlubGluZSBpbnQgcGNpZV9wbWVfcGxhdGZvcm1fbm90aWZ5KHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXJldHVybiBwY2llX3BtZV9hY3BpX3NldHVwKHNydik7Cit9CisjZWxzZSAvKiAhQ09ORklHX0FDUEkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfcG1lX3BsYXRmb3JtX25vdGlmeShzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiAhQ09ORklHX0FDUEkgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZV9hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZV9hY3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhYjIyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lX2FjcGkuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogUENJZSBOYXRpdmUgUE1FIHN1cHBvcnQsIEFDUEktcmVsYXRlZCBwYXJ0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4sIE5vdmVsbCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVjIuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvcGNpZXBvcnRfaWYuaD4KKworLyoqCisgKiBwY2llX3BtZV9hY3BpX3NldHVwIC0gUmVxdWVzdCB0aGUgQUNQSSBCSU9TIHRvIHJlbGVhc2UgY29udHJvbCBvdmVyIFBDSWUgUE1FLgorICogQHNydiAtIFBDSWUgUE1FIHNlcnZpY2UgZm9yIGEgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3Rvci4KKyAqCisgKiBJbnZva2VkIHdoZW4gdGhlIFBDSWUgYnVzIHR5cGUgbG9hZHMgUENJZSBQTUUgc2VydmljZSBkcml2ZXIuICBUbyBhdm9pZAorICogY29uZmxpY3Qgd2l0aCB0aGUgQklPUyBQQ0llIHN1cHBvcnQgcmVxdWlyZXMgdGhlIEJJT1MgdG8geWllbGQgUENJZSBQTUUKKyAqIGNvbnRyb2wgdG8gdGhlIGtlcm5lbC4KKyAqLworaW50IHBjaWVfcG1lX2FjcGlfc2V0dXAoc3RydWN0IHBjaWVfZGV2aWNlICpzcnYpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfTk9UX0ZPVU5EOworCXN0cnVjdCBwY2lfZGV2ICpwb3J0ID0gc3J2LT5wb3J0OworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGFjcGlfcGNpX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWRldl9pbmZvKCZwb3J0LT5kZXYsICJSZXF1ZXN0aW5nIGNvbnRyb2wgb2YgUENJZSBQTUUgZnJvbSBBQ1BJIEJJT1NcbiIpOworCisJaGFuZGxlID0gYWNwaV9maW5kX3Jvb3RfYnJpZGdlX2hhbmRsZShwb3J0KTsKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBhY3BpX3BjaV9vc2NfY29udHJvbF9zZXQoaGFuZGxlLAorCQkJT1NDX1BDSV9FWFBSRVNTX1BNRV9DT05UUk9MIHwKKwkJCU9TQ19QQ0lfRVhQUkVTU19DQVBfU1RSVUNUVVJFX0NPTlRST0wpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlkZXZfaW5mbygmcG9ydC0+ZGV2LAorCQkJIkZhaWxlZCB0byByZWNlaXZlIGNvbnRyb2wgb2YgUENJZSBQTUUgc2VydmljZTogJXNcbiIsCisJCQkoc3RhdHVzID09IEFFX1NVUFBPUlQgfHwgc3RhdHVzID09IEFFX05PVF9GT1VORCkgPworCQkJIm5vIF9PU0Mgc3VwcG9ydCIgOiAiQUNQSSBfT1NDIGZhaWxlZCIpOworCQllcnJvciA9IC1FTk9ERVY7CisJfQorCisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmggYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaAppbmRleCBhYWViOWQyLi44MTNhNWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaAorKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaApAQCAtMzAsNCArMzAsMjEgQEAKIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIHBjaWVfcG9ydF9idXNfcmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBwY2llX3BvcnRfYnVzX3VucmVnaXN0ZXIodm9pZCk7CiAKKyNpZmRlZiBDT05GSUdfUENJRV9QTUUKK2V4dGVybiBib29sIHBjaWVfcG1lX21zaV9kaXNhYmxlZDsKKworc3RhdGljIGlubGluZSB2b2lkIHBjaWVfcG1lX2Rpc2FibGVfbXNpKHZvaWQpCit7CisJcGNpZV9wbWVfbXNpX2Rpc2FibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHBjaWVfcG1lX25vX21zaSh2b2lkKQoreworCXJldHVybiBwY2llX3BtZV9tc2lfZGlzYWJsZWQ7Cit9CisjZWxzZSAvKiAhQ09ORklHX1BDSUVfUE1FICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9wbWVfZGlzYWJsZV9tc2kodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2llX3BtZV9ub19tc2kodm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZiAvKiAhQ09ORklHX1BDSUVfUE1FICovCisKICNlbmRpZiAvKiBfUE9SVERSVl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKaW5kZXggYjE3NDE4OC4uZTczZWZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCkBAIC0xODYsMTYgKzE4NiwyNCBAQAogICovCiBzdGF0aWMgaW50IGluaXRfc2VydmljZV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCAqaXJxcywgaW50IG1hc2spCiB7Ci0JaW50IGksIGlycTsKKwlpbnQgaSwgaXJxID0gLTE7CisKKwkvKiBXZSBoYXZlIHRvIHVzZSBJTlR4IGlmIE1TSSBjYW5ub3QgYmUgdXNlZCBmb3IgUENJZSBQTUUuICovCisJaWYgKChtYXNrICYgUENJRV9QT1JUX1NFUlZJQ0VfUE1FKSAmJiBwY2llX3BtZV9ub19tc2koKSkgeworCQlpZiAoZGV2LT5waW4pCisJCQlpcnEgPSBkZXYtPmlycTsKKwkJZ290byBub19tc2k7CisJfQogCiAJLyogVHJ5IHRvIHVzZSBNU0ktWCBpZiBzdXBwb3J0ZWQgKi8KIAlpZiAoIXBjaWVfcG9ydF9lbmFibGVfbXNpeChkZXYsIGlycXMsIG1hc2spKQogCQlyZXR1cm4gMDsKKwogCS8qIFdlJ3JlIG5vdCBnb2luZyB0byB1c2UgTVNJLVgsIHNvIHRyeSBNU0kgYW5kIGZhbGwgYmFjayB0byBJTlR4ICovCi0JaXJxID0gLTE7CiAJaWYgKCFwY2lfZW5hYmxlX21zaShkZXYpIHx8IGRldi0+cGluKQogCQlpcnEgPSBkZXYtPmlycTsKIAorIG5vX21zaToKIAlmb3IgKGkgPSAwOyBpIDwgUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFUzsgaSsrKQogCQlpcnFzW2ldID0gaXJxOwogCWlycXNbUENJRV9QT1JUX1NFUlZJQ0VfVkNfU0hJRlRdID0gLTE7CkBAIC0yNzcsNiArMjg1LDcgQEAKIAkJICAgICBwY2lfbmFtZShwZGV2KSwKIAkJICAgICBnZXRfZGVzY3JpcHRvcl9pZChwZGV2LT5wY2llX3R5cGUsIHNlcnZpY2UpKTsKIAlkZXZpY2UtPnBhcmVudCA9ICZwZGV2LT5kZXY7CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKGRldmljZSk7CiAKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2aWNlKTsKIAlpZiAocmV0dmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCmluZGV4IDEzYzg5NzIuLjEyN2U4ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpZXBvcnRfaWYuaD4KICNpbmNsdWRlIDxsaW51eC9hZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2luY2x1ZGUgInBvcnRkcnYuaCIKICNpbmNsdWRlICJhZXIvYWVyZHJ2LmgiCkBAIC0yNzMsMTAgKzI3NCwzNiBAQAogCS5kcml2ZXIucG0gCT0gUENJRV9QT1JURFJWX1BNX09QUywKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IGRtaV9wY2llX3BtZV9kaXNhYmxlX21zaShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKK3sKKwlwcl9ub3RpY2UoIiVzIGRldGVjdGVkOiB3aWxsIG5vdCB1c2UgTVNJIGZvciBQQ0llIFBNRSBzaWduYWxpbmdcbiIsCisJCQlkLT5pZGVudCk7CisJcGNpZV9wbWVfZGlzYWJsZV9tc2koKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgcGNpZV9wb3J0ZHJ2X2RtaV90YWJsZVtdID0geworCS8qCisJICogQm94ZXMgdGhhdCBzaG91bGQgbm90IHVzZSBNU0kgZm9yIFBDSWUgUE1FIHNpZ25hbGluZy4KKwkgKi8KKwl7CisJIC5jYWxsYmFjayA9IGRtaV9wY2llX3BtZV9kaXNhYmxlX21zaSwKKwkgLmlkZW50ID0gIk1TSSBXaW5kIFUtMTAwIiwKKwkgLm1hdGNoZXMgPSB7CisJCSAgICAgRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAorCQkgICAgIAkJIk1JQ1JPLVNUQVIgSU5URVJOQVRJT05BTCBDTy4sIExURCIpLAorCQkgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVS0xMDAiKSwKKwkJICAgICB9LAorCSB9LAorCSB7fQorfTsKKwogc3RhdGljIGludCBfX2luaXQgcGNpZV9wb3J0ZHJ2X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCisJZG1pX2NoZWNrX3N5c3RlbShwY2llX3BvcnRkcnZfZG1pX3RhYmxlKTsKKwogCXJldHZhbCA9IHBjaWVfcG9ydF9idXNfcmVnaXN0ZXIoKTsKIAlpZiAocmV0dmFsKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSUU6IGJ1c19yZWdpc3RlciBlcnJvcjogJWRcbiIsIHJldHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCA0NDZlNGE5Li4yYTk0MzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTg5LDYgKzg5LDcgQEAKIAogCWlmIChwY2lfYnVzLT5icmlkZ2UpCiAJCXB1dF9kZXZpY2UocGNpX2J1cy0+YnJpZGdlKTsKKwlwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMocGNpX2J1cyk7CiAJa2ZyZWUocGNpX2J1cyk7CiB9CiAKQEAgLTI4MSwyNiArMjgyLDEyIEBACiAJfQogfQogCi12b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfYmFzZXMoc3RydWN0IHBjaV9idXMgKmNoaWxkKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9yZWFkX2JyaWRnZV9pbyhzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGNoaWxkLT5zZWxmOwogCXU4IGlvX2Jhc2VfbG8sIGlvX2xpbWl0X2xvOwotCXUxNiBtZW1fYmFzZV9sbywgbWVtX2xpbWl0X2xvOwogCXVuc2lnbmVkIGxvbmcgYmFzZSwgbGltaXQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IGk7Ci0KLQlpZiAocGNpX2lzX3Jvb3RfYnVzKGNoaWxkKSkJLyogSXQncyBhIGhvc3QgYnVzLCBub3RoaW5nIHRvIHJlYWQgKi8KLQkJcmV0dXJuOwotCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiUENJIGJyaWRnZSB0byBbYnVzICUwMngtJTAyeF0lc1xuIiwKLQkJIGNoaWxkLT5zZWNvbmRhcnksIGNoaWxkLT5zdWJvcmRpbmF0ZSwKLQkJIGRldi0+dHJhbnNwYXJlbnQgPyAiIChzdWJ0cmFjdGl2ZSBkZWNvZGUpIjogIiIpOwotCi0JaWYgKGRldi0+dHJhbnNwYXJlbnQpIHsKLQkJZm9yKGkgPSAzOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspCi0JCQljaGlsZC0+cmVzb3VyY2VbaV0gPSBjaGlsZC0+cGFyZW50LT5yZXNvdXJjZVtpIC0gM107Ci0JfQogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzBdOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lPX0JBU0UsICZpb19iYXNlX2xvKTsKQEAgLTMxNiwyNiArMzAzLDUwIEBACiAJCWxpbWl0IHw9IChpb19saW1pdF9oaSA8PCAxNik7CiAJfQogCi0JaWYgKGJhc2UgPD0gbGltaXQpIHsKKwlpZiAoYmFzZSAmJiBiYXNlIDw9IGxpbWl0KSB7CiAJCXJlcy0+ZmxhZ3MgPSAoaW9fYmFzZV9sbyAmIFBDSV9JT19SQU5HRV9UWVBFX01BU0spIHwgSU9SRVNPVVJDRV9JTzsKIAkJaWYgKCFyZXMtPnN0YXJ0KQogCQkJcmVzLT5zdGFydCA9IGJhc2U7CiAJCWlmICghcmVzLT5lbmQpCiAJCQlyZXMtPmVuZCA9IGxpbWl0ICsgMHhmZmY7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJCSAiICBicmlkZ2Ugd2luZG93IFtpbyAgJTA0bHggLSAlMDRseF0gcmVnIHJlYWRpbmdcbiIsCisJCQkJIGJhc2UsIGxpbWl0KTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfbW1pbyhzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGNoaWxkLT5zZWxmOworCXUxNiBtZW1fYmFzZV9sbywgbWVtX2xpbWl0X2xvOworCXVuc2lnbmVkIGxvbmcgYmFzZSwgbGltaXQ7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlyZXMgPSBjaGlsZC0+cmVzb3VyY2VbMV07CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfTUVNT1JZX0JBU0UsICZtZW1fYmFzZV9sbyk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfTUVNT1JZX0xJTUlULCAmbWVtX2xpbWl0X2xvKTsKIAliYXNlID0gKG1lbV9iYXNlX2xvICYgUENJX01FTU9SWV9SQU5HRV9NQVNLKSA8PCAxNjsKIAlsaW1pdCA9IChtZW1fbGltaXRfbG8gJiBQQ0lfTUVNT1JZX1JBTkdFX01BU0spIDw8IDE2OwotCWlmIChiYXNlIDw9IGxpbWl0KSB7CisJaWYgKGJhc2UgJiYgYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKG1lbV9iYXNlX2xvICYgUENJX01FTU9SWV9SQU5HRV9UWVBFX01BU0spIHwgSU9SRVNPVVJDRV9NRU07CiAJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlyZXMtPmVuZCA9IGxpbWl0ICsgMHhmZmZmZjsKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOworCX0gZWxzZSB7CisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LAorCQkJIiAgYnJpZGdlIHdpbmRvdyBbbWVtIDB4JTA4bHggLSAweCUwOGx4XSByZWcgcmVhZGluZ1xuIiwKKwkJCQkJIGJhc2UsIGxpbWl0ICsgMHhmZmZmZik7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX3JlYWRfYnJpZGdlX21taW9fcHJlZihzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGNoaWxkLT5zZWxmOworCXUxNiBtZW1fYmFzZV9sbywgbWVtX2xpbWl0X2xvOworCXVuc2lnbmVkIGxvbmcgYmFzZSwgbGltaXQ7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlyZXMgPSBjaGlsZC0+cmVzb3VyY2VbMl07CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfUFJFRl9NRU1PUllfQkFTRSwgJm1lbV9iYXNlX2xvKTsKQEAgLTM2Niw3ICszNzcsNyBAQAogI2VuZGlmCiAJCX0KIAl9Ci0JaWYgKGJhc2UgPD0gbGltaXQpIHsKKwlpZiAoYmFzZSAmJiBiYXNlIDw9IGxpbWl0KSB7CiAJCXJlcy0+ZmxhZ3MgPSAobWVtX2Jhc2VfbG8gJiBQQ0lfUFJFRl9SQU5HRV9UWVBFX01BU0spIHwKIAkJCQkJIElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAkJaWYgKHJlcy0+ZmxhZ3MgJiBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KQpAQCAtMzc0LDYgKzM4NSw0NCBAQAogCQlyZXMtPnN0YXJ0ID0gYmFzZTsKIAkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmZmY7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJICAgICAiICBicmlkZ2Ugd2luZG93IFttZW0gMHglMDhseCAtICUwOGx4IHByZWZdIHJlZyByZWFkaW5nXG4iLAorCQkJCQkgYmFzZSwgbGltaXQgKyAweGZmZmZmKTsKKwl9Cit9CisKK3ZvaWQgX19kZXZpbml0IHBjaV9yZWFkX2JyaWRnZV9iYXNlcyhzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGNoaWxkLT5zZWxmOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpOworCisJaWYgKHBjaV9pc19yb290X2J1cyhjaGlsZCkpCS8qIEl0J3MgYSBob3N0IGJ1cywgbm90aGluZyB0byByZWFkICovCisJCXJldHVybjsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIlBDSSBicmlkZ2UgdG8gW2J1cyAlMDJ4LSUwMnhdJXNcbiIsCisJCSBjaGlsZC0+c2Vjb25kYXJ5LCBjaGlsZC0+c3Vib3JkaW5hdGUsCisJCSBkZXYtPnRyYW5zcGFyZW50ID8gIiAoc3VidHJhY3RpdmUgZGVjb2RlKSIgOiAiIik7CisKKwlwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMoY2hpbGQpOworCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTTsgaSsrKQorCQljaGlsZC0+cmVzb3VyY2VbaV0gPSAmZGV2LT5yZXNvdXJjZVtQQ0lfQlJJREdFX1JFU09VUkNFUytpXTsKKworCXBjaV9yZWFkX2JyaWRnZV9pbyhjaGlsZCk7CisJcGNpX3JlYWRfYnJpZGdlX21taW8oY2hpbGQpOworCXBjaV9yZWFkX2JyaWRnZV9tbWlvX3ByZWYoY2hpbGQpOworCisJaWYgKGRldi0+dHJhbnNwYXJlbnQpIHsKKwkJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShjaGlsZC0+cGFyZW50LCByZXMsIGkpIHsKKwkJCWlmIChyZXMpIHsKKwkJCQlwY2lfYnVzX2FkZF9yZXNvdXJjZShjaGlsZCwgcmVzLAorCQkJCQkJICAgICBQQ0lfU1VCVFJBQ1RJVkVfREVDT0RFKTsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJCQkJICAgIiAgYnJpZGdlIHdpbmRvdyAlcFIgKHN1YnRyYWN0aXZlIGRlY29kZSlcbiIsCisJCQkJCSAgIHJlcyk7CisJCQl9CisJCX0KIAl9CiB9CiAKQEAgLTM4NywxMCArNDM2LDE0NyBAQAogCQlJTklUX0xJU1RfSEVBRCgmYi0+Y2hpbGRyZW4pOwogCQlJTklUX0xJU1RfSEVBRCgmYi0+ZGV2aWNlcyk7CiAJCUlOSVRfTElTVF9IRUFEKCZiLT5zbG90cyk7CisJCUlOSVRfTElTVF9IRUFEKCZiLT5yZXNvdXJjZXMpOworCQliLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CisJCWItPmN1cl9idXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKIAl9CiAJcmV0dXJuIGI7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBjaXhfYnVzX3NwZWVkW10gPSB7CisJUENJX1NQRUVEX1VOS05PV04sCQkvKiAwICovCisJUENJX1NQRUVEXzY2TUh6X1BDSVgsCQkvKiAxICovCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYLAkJLyogMiAqLworCVBDSV9TUEVFRF8xMzNNSHpfUENJWCwJCS8qIDMgKi8KKwlQQ0lfU1BFRURfVU5LTk9XTiwJCS8qIDQgKi8KKwlQQ0lfU1BFRURfNjZNSHpfUENJWF9FQ0MsCS8qIDUgKi8KKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfRUNDLAkvKiA2ICovCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYX0VDQywJLyogNyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogOCAqLworCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzI2NiwJLyogOSAqLworCVBDSV9TUEVFRF8xMDBNSHpfUENJWF8yNjYsCS8qIEEgKi8KKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2LAkvKiBCICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiBDICovCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfNTMzLAkvKiBEICovCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYXzUzMywJLyogRSAqLworCVBDSV9TUEVFRF8xMzNNSHpfUENJWF81MzMJLyogRiAqLworfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcGNpZV9saW5rX3NwZWVkW10gPSB7CisJUENJX1NQRUVEX1VOS05PV04sCQkvKiAwICovCisJUENJRV9TUEVFRF8yXzVHVCwJCS8qIDEgKi8KKwlQQ0lFX1NQRUVEXzVfMEdULAkJLyogMiAqLworCVBDSUVfU1BFRURfOF8wR1QsCQkvKiAzICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA0ICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA1ICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA2ICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA3ICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA4ICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA5ICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiBBICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiBCICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiBDICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiBEICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiBFICovCisJUENJX1NQRUVEX1VOS05PV04JCS8qIEYgKi8KK307CisKK3ZvaWQgcGNpZV91cGRhdGVfbGlua19zcGVlZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1MTYgbGlua3N0YSkKK3sKKwlidXMtPmN1cl9idXNfc3BlZWQgPSBwY2llX2xpbmtfc3BlZWRbbGlua3N0YSAmIDB4Zl07Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2llX3VwZGF0ZV9saW5rX3NwZWVkKTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYWdwX3NwZWVkc1tdID0geworCUFHUF9VTktOT1dOLAorCUFHUF8xWCwKKwlBR1BfMlgsCisJQUdQXzRYLAorCUFHUF84WAorfTsKKworc3RhdGljIGVudW0gcGNpX2J1c19zcGVlZCBhZ3Bfc3BlZWQoaW50IGFncDMsIGludCBhZ3BzdGF0KQoreworCWludCBpbmRleCA9IDA7CisKKwlpZiAoYWdwc3RhdCAmIDQpCisJCWluZGV4ID0gMzsKKwllbHNlIGlmIChhZ3BzdGF0ICYgMikKKwkJaW5kZXggPSAyOworCWVsc2UgaWYgKGFncHN0YXQgJiAxKQorCQlpbmRleCA9IDE7CisJZWxzZQorCQlnb3RvIG91dDsKKwkKKwlpZiAoYWdwMykgeworCQlpbmRleCArPSAyOworCQlpZiAoaW5kZXggPT0gNSkKKwkJCWluZGV4ID0gMDsKKwl9CisKKyBvdXQ6CisJcmV0dXJuIGFncF9zcGVlZHNbaW5kZXhdOworfQorCisKK3N0YXRpYyB2b2lkIHBjaV9zZXRfYnVzX3NwZWVkKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKwlpbnQgcG9zOworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShicmlkZ2UsIFBDSV9DQVBfSURfQUdQKTsKKwlpZiAoIXBvcykKKwkJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShicmlkZ2UsIFBDSV9DQVBfSURfQUdQMyk7CisJaWYgKHBvcykgeworCQl1MzIgYWdwc3RhdCwgYWdwY21kOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2UsIHBvcyArIFBDSV9BR1BfU1RBVFVTLCAmYWdwc3RhdCk7CisJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IGFncF9zcGVlZChhZ3BzdGF0ICYgOCwgYWdwc3RhdCAmIDcpOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2UsIHBvcyArIFBDSV9BR1BfQ09NTUFORCwgJmFncGNtZCk7CisJCWJ1cy0+Y3VyX2J1c19zcGVlZCA9IGFncF9zcGVlZChhZ3BzdGF0ICYgOCwgYWdwY21kICYgNyk7CisJfQorCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShicmlkZ2UsIFBDSV9DQVBfSURfUENJWCk7CisJaWYgKHBvcykgeworCQl1MTYgc3RhdHVzOworCQllbnVtIHBjaV9idXNfc3BlZWQgbWF4OworCQlwY2lfcmVhZF9jb25maWdfd29yZChicmlkZ2UsIHBvcyArIDIsICZzdGF0dXMpOworCisJCWlmIChzdGF0dXMgJiAweDgwMDApIHsKKwkJCW1heCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF81MzM7CisJCX0gZWxzZSBpZiAoc3RhdHVzICYgMHg0MDAwKSB7CisJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2OworCQl9IGVsc2UgaWYgKHN0YXR1cyAmIDB4MDAwMikgeworCQkJaWYgKCgoc3RhdHVzID4+IDEyKSAmIDB4MykgPT0gMikgeworCQkJCW1heCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0M7CisJCQl9IGVsc2UgeworCQkJCW1heCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1heCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOworCQl9CisKKwkJYnVzLT5tYXhfYnVzX3NwZWVkID0gbWF4OworCQlidXMtPmN1cl9idXNfc3BlZWQgPSBwY2l4X2J1c19zcGVlZFsoc3RhdHVzID4+IDYpICYgMHhmXTsKKworCQlyZXR1cm47CisJfQorCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShicmlkZ2UsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAocG9zKSB7CisJCXUzMiBsaW5rY2FwOworCQl1MTYgbGlua3N0YTsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfRVhQX0xOS0NBUCwgJmxpbmtjYXApOworCQlidXMtPm1heF9idXNfc3BlZWQgPSBwY2llX2xpbmtfc3BlZWRbbGlua2NhcCAmIDB4Zl07CisKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfRVhQX0xOS1NUQSwgJmxpbmtzdGEpOworCQlwY2llX3VwZGF0ZV9saW5rX3NwZWVkKGJ1cywgbGlua3N0YSk7CisJfQorfQorCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2FsbG9jX2NoaWxkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LAogCQkJCQkgICBzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLCBpbnQgYnVzbnIpCiB7CkBAIC00MzAsNiArNjE2LDggQEAKIAljaGlsZC0+c2VsZiA9IGJyaWRnZTsKIAljaGlsZC0+YnJpZGdlID0gZ2V0X2RldmljZSgmYnJpZGdlLT5kZXYpOwogCisJcGNpX3NldF9idXNfc3BlZWQoY2hpbGQpOworCiAJLyogU2V0IHVwIGRlZmF1bHQgcmVzb3VyY2UgcG9pbnRlcnMgYW5kIG5hbWVzLi4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgUENJX0JSSURHRV9SRVNPVVJDRV9OVU07IGkrKykgewogCQljaGlsZC0+cmVzb3VyY2VbaV0gPSAmYnJpZGdlLT5yZXNvdXJjZVtQQ0lfQlJJREdFX1JFU09VUkNFUytpXTsKQEAgLTEwODEsNiArMTI2OSw0NSBAQAogfQogRVhQT1JUX1NZTUJPTChwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKTsKIAorc3RhdGljIHVuc2lnbmVkIG5leHRfYXJpX2ZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGZuKQoreworCXUxNiBjYXA7CisJdW5zaWduZWQgcG9zLCBuZXh0X2ZuOworCisJaWYgKCFkZXYpCisJCXJldHVybiAwOworCisJcG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9BUkkpOworCWlmICghcG9zKQorCQlyZXR1cm4gMDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIDQsICZjYXApOworCW5leHRfZm4gPSBjYXAgPj4gODsKKwlpZiAobmV4dF9mbiA8PSBmbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG5leHRfZm47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuZXh0X3RyYWRfZm4oc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgZm4pCit7CisJcmV0dXJuIChmbiArIDEpICUgODsKK30KKworc3RhdGljIHVuc2lnbmVkIG5vX25leHRfZm4oc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgZm4pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb25seV9vbmVfY2hpbGQoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGFyZW50ID0gYnVzLT5zZWxmOworCWlmICghcGFyZW50IHx8ICFwY2lfaXNfcGNpZShwYXJlbnQpKQorCQlyZXR1cm4gMDsKKwlpZiAocGFyZW50LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCB8fAorCSAgICBwYXJlbnQtPnBjaWVfdHlwZSA9PSBQQ0lfRVhQX1RZUEVfRE9XTlNUUkVBTSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogcGNpX3NjYW5fc2xvdCAtIHNjYW4gYSBQQ0kgc2xvdCBvbiBhIGJ1cyBmb3IgZGV2aWNlcy4KICAqIEBidXM6IFBDSSBidXMgdG8gc2NhbgpAQCAtMTA5NCwyMSArMTMyMSwzMCBAQAogICovCiBpbnQgcGNpX3NjYW5fc2xvdChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCiB7Ci0JaW50IGZuLCBuciA9IDA7CisJdW5zaWduZWQgZm4sIG5yID0gMDsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXVuc2lnbmVkICgqbmV4dF9mbikoc3RydWN0IHBjaV9kZXYgKiwgdW5zaWduZWQpID0gbm9fbmV4dF9mbjsKKworCWlmIChvbmx5X29uZV9jaGlsZChidXMpICYmIChkZXZmbiA+IDApKQorCQlyZXR1cm4gMDsgLyogQWxyZWFkeSBzY2FubmVkIHRoZSBlbnRpcmUgc2xvdCAqLwogCiAJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuKTsKLQlpZiAoZGV2ICYmICFkZXYtPmlzX2FkZGVkKQkvKiBuZXcgZGV2aWNlPyAqLworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKwlpZiAoIWRldi0+aXNfYWRkZWQpCiAJCW5yKys7CiAKLQlpZiAoZGV2ICYmIGRldi0+bXVsdGlmdW5jdGlvbikgewotCQlmb3IgKGZuID0gMTsgZm4gPCA4OyBmbisrKSB7Ci0JCQlkZXYgPSBwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKGJ1cywgZGV2Zm4gKyBmbik7Ci0JCQlpZiAoZGV2KSB7Ci0JCQkJaWYgKCFkZXYtPmlzX2FkZGVkKQotCQkJCQlucisrOwotCQkJCWRldi0+bXVsdGlmdW5jdGlvbiA9IDE7Ci0JCQl9CisJaWYgKHBjaV9hcmlfZW5hYmxlZChidXMpKQorCQluZXh0X2ZuID0gbmV4dF9hcmlfZm47CisJZWxzZSBpZiAoZGV2LT5tdWx0aWZ1bmN0aW9uKQorCQluZXh0X2ZuID0gbmV4dF90cmFkX2ZuOworCisJZm9yIChmbiA9IG5leHRfZm4oZGV2LCAwKTsgZm4gPiAwOyBmbiA9IG5leHRfZm4oZGV2LCBmbikpIHsKKwkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuICsgZm4pOworCQlpZiAoZGV2KSB7CisJCQlpZiAoIWRldi0+aXNfYWRkZWQpCisJCQkJbnIrKzsKKwkJCWRldi0+bXVsdGlmdW5jdGlvbiA9IDE7CiAJCX0KIAl9CiAKQEAgLTEyMDAsNiArMTQzNiw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGRldl9yZWdfZXJyOwogCWItPmJyaWRnZSA9IGdldF9kZXZpY2UoZGV2KTsKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoYi0+YnJpZGdlKTsKIAogCWlmICghcGFyZW50KQogCQlzZXRfZGV2X25vZGUoYi0+YnJpZGdlLCBwY2lidXNfdG9fbm9kZShiKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGQ1OGI5NDAuLjc5MGViNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yNSwxNCArMjUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgkvKiBpc2FfZG1hX2JyaWRnZV9idWdneSAqLwogI2luY2x1ZGUgInBjaS5oIgogCi1pbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7Ci1FWFBPUlRfU1lNQk9MKGlzYV9kbWFfYnJpZGdlX2J1Z2d5KTsKLWludCBwY2lfcGNpX3Byb2JsZW1zOwotRVhQT1JUX1NZTUJPTChwY2lfcGNpX3Byb2JsZW1zKTsKLQotI2lmZGVmIENPTkZJR19QQ0lfUVVJUktTCiAvKgogICogVGhpcyBxdWlyayBmdW5jdGlvbiBkaXNhYmxlcyBtZW1vcnkgZGVjb2RpbmcgYW5kIHJlbGVhc2VzIG1lbW9yeSByZXNvdXJjZXMKICAqIG9mIHRoZSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IGtlcm5lbCdzIGJvb3QgcGFyYW1ldGVyICdwY2k9cmVzb3VyY2VfYWxpZ25tZW50PScuCkBAIC0yNjEyLDYgKzI2MDcsNyBAQAogCX0KIAlwY2lfZG9fZml4dXBzKGRldiwgc3RhcnQsIGVuZCk7CiB9CitFWFBPUlRfU1lNQk9MKHBjaV9maXh1cF9kZXZpY2UpOwogCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfYXBwbHlfZmluYWxfcXVpcmtzKHZvaWQpCiB7CkBAIC0yNzIzLDkgKzI3MTksMyBAQAogCiAJcmV0dXJuIC1FTk9UVFk7CiB9Ci0KLSNlbHNlCi12b2lkIHBjaV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQotaW50IHBjaV9kZXZfc3BlY2lmaWNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKSB7IHJldHVybiAtRU5PVFRZOyB9Ci0jZW5kaWYKLUVYUE9SVF9TWU1CT0wocGNpX2ZpeHVwX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IGM0OGNkMzcuLjRmZTM2ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCkBAIC0yNywzNyArMjcsOTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKLXN0YXRpYyB2b2lkIHBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2Oworc3RydWN0IHJlc291cmNlX2xpc3RfeCB7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbmV4dDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCBoZWFkLCAqbGlzdCwgKnRtcDsKLQlpbnQgaWR4OworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0OworCXJlc291cmNlX3NpemVfdCBlbmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CiAKLQloZWFkLm5leHQgPSBOVUxMOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewotCQl1MTYgY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7CitzdGF0aWMgdm9pZCBhZGRfdG9fZmFpbGVkX2xpc3Qoc3RydWN0IHJlc291cmNlX2xpc3RfeCAqaGVhZCwKKwkJCQkgc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbGlzdCA9IGhlYWQ7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbG4gPSBsaXN0LT5uZXh0OworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKnRtcDsKIAotCQkvKiBEb24ndCB0b3VjaCBjbGFzc2xlc3MgZGV2aWNlcyBvciBob3N0IGJyaWRnZXMgb3IgaW9hcGljcy4gICovCi0JCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORUQgfHwKLQkJICAgIGNsYXNzID09IFBDSV9DTEFTU19CUklER0VfSE9TVCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIERvbid0IHRvdWNoIGlvYXBpYyBkZXZpY2VzIGFscmVhZHkgZW5hYmxlZCBieSBmaXJtd2FyZSAqLwotCQlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX1NZU1RFTV9QSUMpIHsKLQkJCXUxNiBjb21tYW5kOwotCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOwotCQkJaWYgKGNvbW1hbmQgJiAoUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkpKQotCQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcGRldl9zb3J0X3Jlc291cmNlcyhkZXYsICZoZWFkKTsKKwl0bXAgPSBrbWFsbG9jKHNpemVvZigqdG1wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXApIHsKKwkJcHJfd2FybmluZygiYWRkX3RvX2ZhaWxlZF9saXN0OiBrbWFsbG9jKCkgZmFpbGVkIVxuIik7CisJCXJldHVybjsKIAl9CiAKLQlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJdG1wLT5uZXh0ID0gbG47CisJdG1wLT5yZXMgPSByZXM7CisJdG1wLT5kZXYgPSBkZXY7CisJdG1wLT5zdGFydCA9IHJlcy0+c3RhcnQ7CisJdG1wLT5lbmQgPSByZXMtPmVuZDsKKwl0bXAtPmZsYWdzID0gcmVzLT5mbGFnczsKKwlsaXN0LT5uZXh0ID0gdG1wOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2ZhaWxlZF9saXN0KHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmhlYWQpCit7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqbGlzdCwgKnRtcDsKKworCWZvciAobGlzdCA9IGhlYWQtPm5leHQ7IGxpc3Q7KSB7CisJCXRtcCA9IGxpc3Q7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlrZnJlZSh0bXApOworCX0KKworCWhlYWQtPm5leHQgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBfX2Rldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCkKK3sKKwl1MTYgY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7CisKKwkvKiBEb24ndCB0b3VjaCBjbGFzc2xlc3MgZGV2aWNlcyBvciBob3N0IGJyaWRnZXMgb3IgaW9hcGljcy4gICovCisJaWYgKGNsYXNzID09IFBDSV9DTEFTU19OT1RfREVGSU5FRCB8fCBjbGFzcyA9PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpCisJCXJldHVybjsKKworCS8qIERvbid0IHRvdWNoIGlvYXBpYyBkZXZpY2VzIGFscmVhZHkgZW5hYmxlZCBieSBmaXJtd2FyZSAqLworCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfU1lTVEVNX1BJQykgeworCQl1MTYgY29tbWFuZDsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCQlpZiAoY29tbWFuZCAmIChQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSkpCisJCQlyZXR1cm47CisJfQorCisJcGRldl9zb3J0X3Jlc291cmNlcyhkZXYsIGhlYWQpOworfQorCitzdGF0aWMgdm9pZCBfX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKHN0cnVjdCByZXNvdXJjZV9saXN0ICpoZWFkLAorCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHJlc291cmNlX2xpc3QgKmxpc3QsICp0bXA7CisJaW50IGlkeDsKKworCWZvciAobGlzdCA9IGhlYWQtPm5leHQ7IGxpc3Q7KSB7CiAJCXJlcyA9IGxpc3QtPnJlczsKIAkJaWR4ID0gcmVzIC0gJmxpc3QtPmRldi0+cmVzb3VyY2VbMF07CisKIAkJaWYgKHBjaV9hc3NpZ25fcmVzb3VyY2UobGlzdC0+ZGV2LCBpZHgpKSB7CisJCQlpZiAoZmFpbF9oZWFkICYmICFwY2lfaXNfcm9vdF9idXMobGlzdC0+ZGV2LT5idXMpKSB7CisJCQkJLyoKKwkJCQkgKiBpZiB0aGUgZmFpbGVkIHJlcyBpcyBmb3IgUk9NIEJBUiwgYW5kIGl0IHdpbGwKKwkJCQkgKiBiZSBlbmFibGVkIGxhdGVyLCBkb24ndCBhZGQgaXQgdG8gdGhlIGxpc3QKKwkJCQkgKi8KKwkJCQlpZiAoISgoaWR4ID09IFBDSV9ST01fUkVTT1VSQ0UpICYmCisJCQkJICAgICAgKCEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX0VOQUJMRSkpKSkKKwkJCQkJYWRkX3RvX2ZhaWxlZF9saXN0KGZhaWxfaGVhZCwgbGlzdC0+ZGV2LCByZXMpOworCQkJfQogCQkJcmVzLT5zdGFydCA9IDA7CiAJCQlyZXMtPmVuZCA9IDA7CiAJCQlyZXMtPmZsYWdzID0gMDsKQEAgLTY4LDYgKzEyMiwzMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcGRldl9hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHJlc291cmNlX2xpc3QgaGVhZDsKKworCWhlYWQubmV4dCA9IE5VTEw7CisJX19kZXZfc29ydF9yZXNvdXJjZXMoZGV2LCAmaGVhZCk7CisJX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZCgmaGVhZCwgZmFpbF9oZWFkKTsKKworfQorCitzdGF0aWMgdm9pZCBwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCBoZWFkOworCisJaGVhZC5uZXh0ID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCisJCV9fZGV2X3NvcnRfcmVzb3VyY2VzKGRldiwgJmhlYWQpOworCisJX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZCgmaGVhZCwgZmFpbF9oZWFkKTsKK30KKwogdm9pZCBwY2lfc2V0dXBfY2FyZGJ1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CkBAIC0xMzQsMTggKzIxMiwxMiBAQAogICAgY29uZmlnIHNwYWNlIHdyaXRlcywgc28gaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0IGFuIEkvTyB3aW5kb3cgb2YKICAgIHRoZSBicmlkZ2Ugd2lsbCBoYXZlIHNvbWUgdW5kZXNpcmFibGUgYWRkcmVzcyAoZS5nLiAwKSBhZnRlciB0aGUKICAgIGZpcnN0IHdyaXRlLiBEaXR0byA2NC1iaXQgcHJlZmV0Y2hhYmxlIE1NSU8uICAqLwotc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9pbyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKLQl1MzIgbCwgYnUsIGx1LCBpb191cHBlcjE2OwotCi0JaWYgKHBjaV9pc19lbmFibGVkKGJyaWRnZSkpCi0JCXJldHVybjsKLQotCWRldl9pbmZvKCZicmlkZ2UtPmRldiwgIlBDSSBicmlkZ2UgdG8gW2J1cyAlMDJ4LSUwMnhdXG4iLAotCQkgYnVzLT5zZWNvbmRhcnksIGJ1cy0+c3Vib3JkaW5hdGUpOworCXUzMiBsLCBpb191cHBlcjE2OwogCiAJLyogU2V0IHVwIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgUENJIEkvTyBzZWdtZW50IGZvciB0aGlzIGJ1cy4gKi8KIAlyZXMgPSBidXMtPnJlc291cmNlWzBdOwpAQCAtMTU4LDggKzIzMCw3IEBACiAJCS8qIFNldCB1cCB1cHBlciAxNiBiaXRzIG9mIEkvTyBiYXNlL2xpbWl0LiAqLwogCQlpb191cHBlcjE2ID0gKHJlZ2lvbi5lbmQgJiAweGZmZmYwMDAwKSB8IChyZWdpb24uc3RhcnQgPj4gMTYpOwogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQkvKiBDbGVhciB1cHBlciAxNiBiaXRzIG9mIEkvTyBiYXNlL2xpbWl0LiAqLwogCQlpb191cHBlcjE2ID0gMDsKIAkJbCA9IDB4MDBmMDsKQEAgLTE3MSwyMSArMjQyLDM1IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9JT19CQVNFLCBsKTsKIAkvKiBVcGRhdGUgdXBwZXIgMTYgYml0cyBvZiBJL08gYmFzZS9saW1pdC4gKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX0lPX0JBU0VfVVBQRVIxNiwgaW9fdXBwZXIxNik7Cit9CiAKLQkvKiBTZXQgdXAgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBQQ0kgTWVtb3J5IHNlZ21lbnQKLQkgICBmb3IgdGhpcyBidXMuICovCitzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW8oc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247CisJdTMyIGw7CisKKwkvKiBTZXQgdXAgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBQQ0kgTWVtb3J5IHNlZ21lbnQgZm9yIHRoaXMgYnVzLiAqLwogCXJlcyA9IGJ1cy0+cmVzb3VyY2VbMV07CiAJcGNpYmlvc19yZXNvdXJjZV90b19idXMoYnJpZGdlLCAmcmVnaW9uLCByZXMpOwogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJbCA9IChyZWdpb24uc3RhcnQgPj4gMTYpICYgMHhmZmYwOwogCQlsIHw9IHJlZ2lvbi5lbmQgJiAweGZmZjAwMDAwOwogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlsID0gMHgwMDAwZmZmMDsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93IFttZW0gZGlzYWJsZWRdXG4iKTsKIAl9CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9NRU1PUllfQkFTRSwgbCk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOworCXUzMiBsLCBidSwgbHU7CiAKIAkvKiBDbGVhciBvdXQgdGhlIHVwcGVyIDMyIGJpdHMgb2YgUFJFRiBsaW1pdC4KIAkgICBJZiBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIgd2FzIG5vbi16ZXJvLCB0aGlzIHRlbXBvcmFyaWx5CkBAIC0yMDQsOCArMjg5LDcgQEAKIAkJCWx1ID0gdXBwZXJfMzJfYml0cyhyZWdpb24uZW5kKTsKIAkJfQogCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlsID0gMHgwMDAwZmZmMDsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93IFttZW0gcHJlZiBkaXNhYmxlZF1cbiIpOwogCX0KQEAgLTIxNCwxMCArMjk4LDM1IEBACiAJLyogU2V0IHRoZSB1cHBlciAzMiBiaXRzIG9mIFBSRUYgYmFzZSAmIGxpbWl0LiAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIsIGJ1KTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX1BSRUZfTElNSVRfVVBQRVIzMiwgbHUpOworfQorCitzdGF0aWMgdm9pZCBfX3BjaV9zZXR1cF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisKKwlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICJQQ0kgYnJpZGdlIHRvIFtidXMgJTAyeC0lMDJ4XVxuIiwKKwkJIGJ1cy0+c2Vjb25kYXJ5LCBidXMtPnN1Ym9yZGluYXRlKTsKKworCWlmICh0eXBlICYgSU9SRVNPVVJDRV9JTykKKwkJcGNpX3NldHVwX2JyaWRnZV9pbyhidXMpOworCisJaWYgKHR5cGUgJiBJT1JFU09VUkNFX01FTSkKKwkJcGNpX3NldHVwX2JyaWRnZV9tbWlvKGJ1cyk7CisKKwlpZiAodHlwZSAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpCisJCXBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKGJ1cyk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYnJpZGdlLCBQQ0lfQlJJREdFX0NPTlRST0wsIGJ1cy0+YnJpZGdlX2N0bCk7CiB9CiAKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwl1bnNpZ25lZCBsb25nIHR5cGUgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfAorCQkJCSAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKKworCV9fcGNpX3NldHVwX2JyaWRnZShidXMsIHR5cGUpOworfQorCiAvKiBDaGVjayB3aGV0aGVyIHRoZSBicmlkZ2Ugc3VwcG9ydHMgb3B0aW9uYWwgSS9PIGFuZAogICAgcHJlZmV0Y2hhYmxlIG1lbW9yeSByYW5nZXMuIElmIG5vdCwgdGhlIHJlc3BlY3RpdmUKICAgIGJhc2UvbGltaXQgcmVnaXN0ZXJzIG11c3QgYmUgcmVhZC1vbmx5IGFuZCByZWFkIGFzIDAuICovCkBAIC0yNTMsOCArMzYyLDExIEBACiAJfQogCWlmIChwbWVtKSB7CiAJCWJfcmVzWzJdLmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKLQkJaWYgKChwbWVtICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSA9PSBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KQorCQlpZiAoKHBtZW0gJiBQQ0lfUFJFRl9SQU5HRV9UWVBFX01BU0spID09CisJCSAgICBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSB7CiAJCQliX3Jlc1syXS5mbGFncyB8PSBJT1JFU09VUkNFX01FTV82NDsKKwkJCWJfcmVzWzJdLmZsYWdzIHw9IFBDSV9QUkVGX1JBTkdFX1RZUEVfNjQ7CisJCX0KIAl9CiAKIAkvKiBkb3VibGUgY2hlY2sgaWYgYnJpZGdlIGRvZXMgc3VwcG9ydCA2NCBiaXQgcHJlZiAqLwpAQCAtMjgzLDggKzM5NSw3IEBACiAJdW5zaWduZWQgbG9uZyB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfAogCQkJCSAgSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlyID0gYnVzLT5yZXNvdXJjZVtpXTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgciwgaSkgewogCQlpZiAociA9PSAmaW9wb3J0X3Jlc291cmNlIHx8IHIgPT0gJmlvbWVtX3Jlc291cmNlKQogCQkJY29udGludWU7CiAJCWlmIChyICYmIChyLT5mbGFncyAmIHR5cGVfbWFzaykgPT0gdHlwZSAmJiAhci0+cGFyZW50KQpAQCAtMzAxLDcgKzQxMiw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmJfcmVzID0gZmluZF9mcmVlX2J1c19yZXNvdXJjZShidXMsIElPUkVTT1VSQ0VfSU8pOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDAsIHNpemUxID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAwLCBzaXplMSA9IDAsIG9sZF9zaXplOwogCiAJaWYgKCFiX3JlcykKICAJCXJldHVybjsKQEAgLTMyNiwxMiArNDM3LDE3IEBACiAJfQogCWlmIChzaXplIDwgbWluX3NpemUpCiAJCXNpemUgPSBtaW5fc2l6ZTsKKwlvbGRfc2l6ZSA9IHJlc291cmNlX3NpemUoYl9yZXMpOworCWlmIChvbGRfc2l6ZSA9PSAxKQorCQlvbGRfc2l6ZSA9IDA7CiAvKiBUbyBiZSBmaXhlZCBpbiAyLjU6IHdlIHNob3VsZCBoYXZlIHNvcnQgb2YgSEFWRV9JU0EKICAgIGZsYWcgaW4gdGhlIHN0cnVjdCBwY2lfYnVzLiAqLwogI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgZGVmaW5lZChDT05GSUdfRUlTQSkKIAlzaXplID0gKHNpemUgJiAweGZmKSArICgoc2l6ZSAmIH4weGZmVUwpIDw8IDIpOwogI2VuZGlmCiAJc2l6ZSA9IEFMSUdOKHNpemUgKyBzaXplMSwgNDA5Nik7CisJaWYgKHNpemUgPCBvbGRfc2l6ZSkKKwkJc2l6ZSA9IG9sZF9zaXplOwogCWlmICghc2l6ZSkgewogCQlpZiAoYl9yZXMtPnN0YXJ0IHx8IGJfcmVzLT5lbmQpCiAJCQlkZXZfaW5mbygmYnVzLT5zZWxmLT5kZXYsICJkaXNhYmxpbmcgYnJpZGdlIHdpbmRvdyAiCkBAIC0zNTIsNyArNDY4LDcgQEAKIAkJCSB1bnNpZ25lZCBsb25nIHR5cGUsIHJlc291cmNlX3NpemVfdCBtaW5fc2l6ZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXJlc291cmNlX3NpemVfdCBtaW5fYWxpZ24sIGFsaWduLCBzaXplOworCXJlc291cmNlX3NpemVfdCBtaW5fYWxpZ24sIGFsaWduLCBzaXplLCBvbGRfc2l6ZTsKIAlyZXNvdXJjZV9zaXplX3QgYWxpZ25zWzEyXTsJLyogQWxpZ25tZW50cyBmcm9tIDFNYiB0byAyR2IgKi8KIAlpbnQgb3JkZXIsIG1heF9vcmRlcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmJfcmVzID0gZmluZF9mcmVlX2J1c19yZXNvdXJjZShidXMsIHR5cGUpOwpAQCAtNDAyLDYgKzUxOCwxMSBAQAogCX0KIAlpZiAoc2l6ZSA8IG1pbl9zaXplKQogCQlzaXplID0gbWluX3NpemU7CisJb2xkX3NpemUgPSByZXNvdXJjZV9zaXplKGJfcmVzKTsKKwlpZiAob2xkX3NpemUgPT0gMSkKKwkJb2xkX3NpemUgPSAwOworCWlmIChzaXplIDwgb2xkX3NpemUpCisJCXNpemUgPSBvbGRfc2l6ZTsKIAogCWFsaWduID0gMDsKIAltaW5fYWxpZ24gPSAwOwpAQCAtNTM4LDIzICs2NTksMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19zaXplX2JyaWRnZXMpOwogCi12b2lkIF9fcmVmIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgX19yZWYgX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmZhaWxfaGVhZCkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCi0JcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChidXMpOworCXBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoYnVzLCBmYWlsX2hlYWQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CiAJCWIgPSBkZXYtPnN1Ym9yZGluYXRlOwogCQlpZiAoIWIpCiAJCQljb250aW51ZTsKIAotCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYik7CisJCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGIsIGZhaWxfaGVhZCk7CiAKIAkJc3dpdGNoIChkZXYtPmNsYXNzID4+IDgpIHsKIAkJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSToKLQkJCXBjaV9zZXR1cF9icmlkZ2UoYik7CisJCQlpZiAoIXBjaV9pc19lbmFibGVkKGRldikpCisJCQkJcGNpX3NldHVwX2JyaWRnZShiKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTOgpAQCAtNTY4LDE1ICs2OTEsMTMwIEBACiAJCX0KIAl9CiB9CisKK3ZvaWQgX19yZWYgcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzLCBOVUxMKTsKK30KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKTsKIAorc3RhdGljIHZvaWQgX19yZWYgX19wY2lfYnJpZGdlX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwKKwkJCQkJIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmZhaWxfaGVhZCkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYjsKKworCXBkZXZfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoKHN0cnVjdCBwY2lfZGV2ICopYnJpZGdlLCBmYWlsX2hlYWQpOworCisJYiA9IGJyaWRnZS0+c3Vib3JkaW5hdGU7CisJaWYgKCFiKQorCQlyZXR1cm47CisKKwlfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhiLCBmYWlsX2hlYWQpOworCisJc3dpdGNoIChicmlkZ2UtPmNsYXNzID4+IDgpIHsKKwljYXNlIFBDSV9DTEFTU19CUklER0VfUENJOgorCQlwY2lfc2V0dXBfYnJpZGdlKGIpOworCQlicmVhazsKKworCWNhc2UgUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTOgorCQlwY2lfc2V0dXBfY2FyZGJ1cyhiKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICJub3Qgc2V0dGluZyB1cCBicmlkZ2UgZm9yIGJ1cyAiCisJCQkgIiUwNHg6JTAyeFxuIiwgcGNpX2RvbWFpbl9ucihiKSwgYi0+bnVtYmVyKTsKKwkJYnJlYWs7CisJfQorfQorc3RhdGljIHZvaWQgcGNpX2JyaWRnZV9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKwlpbnQgaWR4OworCWJvb2wgY2hhbmdlZCA9IGZhbHNlOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJc3RydWN0IHJlc291cmNlICpyOworCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisKKwlkZXYgPSBidXMtPnNlbGY7CisJZm9yIChpZHggPSBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaWR4IDw9IFBDSV9CUklER0VfUkVTT1VSQ0VfRU5EOworCSAgICAgaWR4KyspIHsKKwkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07CisJCWlmICgoci0+ZmxhZ3MgJiB0eXBlX21hc2spICE9IHR5cGUpCisJCQljb250aW51ZTsKKwkJaWYgKCFyLT5wYXJlbnQpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogaWYgdGhlcmUgYXJlIGNoaWxkcmVuIHVuZGVyIHRoYXQsIHdlIHNob3VsZCByZWxlYXNlIHRoZW0KKwkJICogIGFsbAorCQkgKi8KKwkJcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMocik7CisJCWlmICghcmVsZWFzZV9yZXNvdXJjZShyKSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkJICJyZXNvdXJjZSAlZCAlcFIgcmVsZWFzZWRcbiIsIGlkeCwgcik7CisJCQkvKiBrZWVwIHRoZSBvbGQgc2l6ZSAqLworCQkJci0+ZW5kID0gcmVzb3VyY2Vfc2l6ZShyKSAtIDE7CisJCQlyLT5zdGFydCA9IDA7CisJCQlyLT5mbGFncyA9IDA7CisJCQljaGFuZ2VkID0gdHJ1ZTsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkKSB7CisJCS8qIGF2b2lkaW5nIHRvdWNoIHRoZSBvbmUgd2l0aG91dCBQUkVGICovCisJCWlmICh0eXBlICYgSU9SRVNPVVJDRV9QUkVGRVRDSCkKKwkJCXR5cGUgPSBJT1JFU09VUkNFX1BSRUZFVENIOworCQlfX3BjaV9zZXR1cF9icmlkZ2UoYnVzLCB0eXBlKTsKKwl9Cit9CisKK2VudW0gcmVsZWFzZV90eXBlIHsKKwlsZWFmX29ubHksCisJd2hvbGVfc3VidHJlZSwKK307CisvKgorICogdHJ5IHRvIHJlbGVhc2UgcGNpIGJyaWRnZSByZXNvdXJjZXMgdGhhdCBpcyBmcm9tIGxlYWYgYnJpZGdlLAorICogc28gd2UgY2FuIGFsbG9jYXRlIGJpZyBuZXcgb25lIGxhdGVyCisgKi8KK3N0YXRpYyB2b2lkIF9fcmVmIHBjaV9idXNfcmVsZWFzZV9icmlkZ2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkJCQkgICBlbnVtIHJlbGVhc2VfdHlwZSByZWxfdHlwZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgaXNfbGVhZl9icmlkZ2UgPSB0cnVlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCXN0cnVjdCBwY2lfYnVzICpiID0gZGV2LT5zdWJvcmRpbmF0ZTsKKwkJaWYgKCFiKQorCQkJY29udGludWU7CisKKwkJaXNfbGVhZl9icmlkZ2UgPSBmYWxzZTsKKworCQlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpCisJCQljb250aW51ZTsKKworCQlpZiAocmVsX3R5cGUgPT0gd2hvbGVfc3VidHJlZSkKKwkJCXBjaV9idXNfcmVsZWFzZV9icmlkZ2VfcmVzb3VyY2VzKGIsIHR5cGUsCisJCQkJCQkgd2hvbGVfc3VidHJlZSk7CisJfQorCisJaWYgKHBjaV9pc19yb290X2J1cyhidXMpKQorCQlyZXR1cm47CisKKwlpZiAoKGJ1cy0+c2VsZi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpCisJCXJldHVybjsKKworCWlmICgocmVsX3R5cGUgPT0gd2hvbGVfc3VidHJlZSkgfHwgaXNfbGVhZl9icmlkZ2UpCisJCXBjaV9icmlkZ2VfcmVsZWFzZV9yZXNvdXJjZXMoYnVzLCB0eXBlKTsKK30KKwogc3RhdGljIHZvaWQgcGNpX2J1c19kdW1wX3JlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewotICAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGJ1cy0+cmVzb3VyY2VbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXMgfHwgIXJlcy0+ZW5kKQorCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpIHsKKwkJaWYgKCFyZXMgfHwgIXJlcy0+ZW5kIHx8ICFyZXMtPmZsYWdzKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmYnVzLT5kZXYsICJyZXNvdXJjZSAlZCAlcFJcbiIsIGksIHJlcyk7CkBAIC02MDAsMTEgKzgzOCw2NSBAQAogCX0KIH0KIAorc3RhdGljIGludCBfX2luaXQgcGNpX2J1c19nZXRfZGVwdGgoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlpbnQgZGVwdGggPSAwOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHBjaV9idXMgKmIgPSBkZXYtPnN1Ym9yZGluYXRlOworCQlpZiAoIWIpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBwY2lfYnVzX2dldF9kZXB0aChiKTsKKwkJaWYgKHJldCArIDEgPiBkZXB0aCkKKwkJCWRlcHRoID0gcmV0ICsgMTsKKwl9CisKKwlyZXR1cm4gZGVwdGg7Cit9CitzdGF0aWMgaW50IF9faW5pdCBwY2lfZ2V0X21heF9kZXB0aCh2b2lkKQoreworCWludCBkZXB0aCA9IDA7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSBwY2lfYnVzX2dldF9kZXB0aChidXMpOworCQlpZiAocmV0ID4gZGVwdGgpCisJCQlkZXB0aCA9IHJldDsKKwl9CisKKwlyZXR1cm4gZGVwdGg7Cit9CisKKy8qCisgKiBmaXJzdCB0cnkgd2lsbCBub3QgdG91Y2ggcGNpIGJyaWRnZSByZXMKKyAqIHNlY29uZCAgYW5kIGxhdGVyIHRyeSB3aWxsIGNsZWFyIHNtYWxsIGxlYWYgYnJpZGdlIHJlcworICogd2lsbCBzdG9wIHRpbGwgdG8gdGhlIG1heCAgZGVlcHRoIGlmIGNhbiBub3QgZmluZCBnb29kIG9uZQorICovCiB2b2lkIF9faW5pdAogcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcyh2b2lkKQogewogCXN0cnVjdCBwY2lfYnVzICpidXM7CisJaW50IHRyaWVkX3RpbWVzID0gMDsKKwllbnVtIHJlbGVhc2VfdHlwZSByZWxfdHlwZSA9IGxlYWZfb25seTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94IGhlYWQsICpsaXN0OworCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisJdW5zaWduZWQgbG9uZyBmYWlsZWRfdHlwZTsKKwlpbnQgbWF4X2RlcHRoID0gcGNpX2dldF9tYXhfZGVwdGgoKTsKKwlpbnQgcGNpX3RyeV9udW07CiAKKwloZWFkLm5leHQgPSBOVUxMOworCisJcGNpX3RyeV9udW0gPSBtYXhfZGVwdGggKyAxOworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IG1heCBidXMgZGVwdGg6ICVkIHBjaV90cnlfbnVtOiAlZFxuIiwKKwkJIG1heF9kZXB0aCwgcGNpX3RyeV9udW0pOworCithZ2FpbjoKIAkvKiBEZXB0aCBmaXJzdCwgY2FsY3VsYXRlIHNpemVzIGFuZCBhbGlnbm1lbnRzIG9mIGFsbAogCSAgIHN1Ym9yZGluYXRlIGJ1c2VzLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKQEAgLTYxMiwxMiArOTA0LDEzMCBAQAogCX0KIAkvKiBEZXB0aCBsYXN0LCBhbGxvY2F0ZSByZXNvdXJjZXMgYW5kIHVwZGF0ZSB0aGUgaGFyZHdhcmUuICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZwY2lfcm9vdF9idXNlcywgbm9kZSkgewotCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKLQkJcGNpX2VuYWJsZV9icmlkZ2VzKGJ1cyk7CisJCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cywgJmhlYWQpOwogCX0KKwl0cmllZF90aW1lcysrOworCisJLyogYW55IGRldmljZSBjb21wbGFpbj8gKi8KKwlpZiAoIWhlYWQubmV4dCkKKwkJZ290byBlbmFibGVfYW5kX2R1bXA7CisJZmFpbGVkX3R5cGUgPSAwOworCWZvciAobGlzdCA9IGhlYWQubmV4dDsgbGlzdDspIHsKKwkJZmFpbGVkX3R5cGUgfD0gbGlzdC0+ZmxhZ3M7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwkvKgorCSAqIGlvIHBvcnQgYXJlIHRpZ2h0LCBkb24ndCB0cnkgZXh0cmEKKwkgKiBvciBpZiByZWFjaCB0aGUgbGltaXQsIGRvbid0IHdhbnQgdG8gdHJ5IG1vcmUKKwkgKi8KKwlmYWlsZWRfdHlwZSAmPSB0eXBlX21hc2s7CisJaWYgKChmYWlsZWRfdHlwZSA9PSBJT1JFU09VUkNFX0lPKSB8fCAodHJpZWRfdGltZXMgPj0gcGNpX3RyeV9udW0pKSB7CisJCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOworCQlnb3RvIGVuYWJsZV9hbmRfZHVtcDsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBOby4gJWQgdHJ5IHRvIGFzc2lnbiB1bmFzc2lnbmVkIHJlc1xuIiwKKwkJCSB0cmllZF90aW1lcyArIDEpOworCisJLyogdGhpcmQgdGltZXMgYW5kIGxhdGVyIHdpbGwgbm90IGNoZWNrIGlmIGl0IGlzIGxlYWYgKi8KKwlpZiAoKHRyaWVkX3RpbWVzICsgMSkgPiAyKQorCQlyZWxfdHlwZSA9IHdob2xlX3N1YnRyZWU7CisKKwkvKgorCSAqIFRyeSB0byByZWxlYXNlIGxlYWYgYnJpZGdlJ3MgcmVzb3VyY2VzIHRoYXQgZG9lc24ndCBmaXQgcmVzb3VyY2Ugb2YKKwkgKiBjaGlsZCBkZXZpY2UgdW5kZXIgdGhhdCBicmlkZ2UKKwkgKi8KKwlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJCWJ1cyA9IGxpc3QtPmRldi0+YnVzOworCQlwY2lfYnVzX3JlbGVhc2VfYnJpZGdlX3Jlc291cmNlcyhidXMsIGxpc3QtPmZsYWdzICYgdHlwZV9tYXNrLAorCQkJCQkJICByZWxfdHlwZSk7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwkvKiByZXN0b3JlIHNpemUgYW5kIGZsYWdzICovCisJZm9yIChsaXN0ID0gaGVhZC5uZXh0OyBsaXN0OykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGxpc3QtPnJlczsKKworCQlyZXMtPnN0YXJ0ID0gbGlzdC0+c3RhcnQ7CisJCXJlcy0+ZW5kID0gbGlzdC0+ZW5kOworCQlyZXMtPmZsYWdzID0gbGlzdC0+ZmxhZ3M7CisJCWlmIChsaXN0LT5kZXYtPnN1Ym9yZGluYXRlKQorCQkJcmVzLT5mbGFncyA9IDA7CisKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOworCisJZ290byBhZ2FpbjsKKworZW5hYmxlX2FuZF9kdW1wOgorCS8qIERlcHRoIGxhc3QsIHVwZGF0ZSB0aGUgaGFyZHdhcmUuICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZwY2lfcm9vdF9idXNlcywgbm9kZSkKKwkJcGNpX2VuYWJsZV9icmlkZ2VzKGJ1cyk7CiAKIAkvKiBkdW1wIHRoZSByZXNvdXJjZSBvbiBidXNlcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKIAkJcGNpX2J1c19kdW1wX3Jlc291cmNlcyhidXMpOwogCX0KIH0KKwordm9pZCBwY2lfYXNzaWduX3VuYXNzaWduZWRfYnJpZGdlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKQoreworCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQgPSBicmlkZ2UtPnN1Ym9yZGluYXRlOworCWludCB0cmllZF90aW1lcyA9IDA7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCBoZWFkLCAqbGlzdDsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisKKwloZWFkLm5leHQgPSBOVUxMOworCithZ2FpbjoKKwlwY2lfYnVzX3NpemVfYnJpZGdlcyhwYXJlbnQpOworCV9fcGNpX2JyaWRnZV9hc3NpZ25fcmVzb3VyY2VzKGJyaWRnZSwgJmhlYWQpOworCXJldHZhbCA9IHBjaV9yZWVuYWJsZV9kZXZpY2UoYnJpZGdlKTsKKwlwY2lfc2V0X21hc3RlcihicmlkZ2UpOworCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOworCisJdHJpZWRfdGltZXMrKzsKKworCWlmICghaGVhZC5uZXh0KQorCQlyZXR1cm47CisKKwlpZiAodHJpZWRfdGltZXMgPj0gMikgeworCQkvKiBzdGlsbCBmYWlsLCBkb24ndCBuZWVkIHRvIHRyeSBtb3JlICovCisJCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogTm8uICVkIHRyeSB0byBhc3NpZ24gdW5hc3NpZ25lZCByZXNcbiIsCisJCQkgdHJpZWRfdGltZXMgKyAxKTsKKworCS8qCisJICogVHJ5IHRvIHJlbGVhc2UgbGVhZiBicmlkZ2UncyByZXNvdXJjZXMgdGhhdCBkb2Vzbid0IGZpdCByZXNvdXJjZSBvZgorCSAqIGNoaWxkIGRldmljZSB1bmRlciB0aGF0IGJyaWRnZQorCSAqLworCWZvciAobGlzdCA9IGhlYWQubmV4dDsgbGlzdDspIHsKKwkJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGxpc3QtPmRldi0+YnVzOworCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gbGlzdC0+ZmxhZ3M7CisKKwkJcGNpX2J1c19yZWxlYXNlX2JyaWRnZV9yZXNvdXJjZXMoYnVzLCBmbGFncyAmIHR5cGVfbWFzaywKKwkJCQkJCSB3aG9sZV9zdWJ0cmVlKTsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCS8qIHJlc3RvcmUgc2l6ZSBhbmQgZmxhZ3MgKi8KKwlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gbGlzdC0+cmVzOworCisJCXJlcy0+c3RhcnQgPSBsaXN0LT5zdGFydDsKKwkJcmVzLT5lbmQgPSBsaXN0LT5lbmQ7CisJCXJlcy0+ZmxhZ3MgPSBsaXN0LT5mbGFnczsKKwkJaWYgKGxpc3QtPmRldi0+c3Vib3JkaW5hdGUpCisJCQlyZXMtPmZsYWdzID0gMDsKKworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9CisJZnJlZV9mYWlsZWRfbGlzdCgmaGVhZCk7CisKKwlnb3RvIGFnYWluOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2Fzc2lnbl91bmFzc2lnbmVkX2JyaWRnZV9yZXNvdXJjZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2xvdC5jIGIvZHJpdmVycy9wY2kvc2xvdC5jCmluZGV4IDhjMDJiNmMuLjQ5YzllNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Nsb3QuYworKysgYi9kcml2ZXJzL3BjaS9zbG90LmMKQEAgLTQ3LDYgKzQ3LDU1IEBACiAJCQkJc2xvdC0+bnVtYmVyKTsKIH0KIAorLyogdGhlc2Ugc3RyaW5ncyBtYXRjaCB1cCB3aXRoIHRoZSB2YWx1ZXMgaW4gcGNpX2J1c19zcGVlZCAqLworc3RhdGljIGNoYXIgKnBjaV9idXNfc3BlZWRfc3RyaW5nc1tdID0geworCSIzMyBNSHogUENJIiwJCS8qIDB4MDAgKi8KKwkiNjYgTUh6IFBDSSIsCQkvKiAweDAxICovCisJIjY2IE1IeiBQQ0ktWCIsIAkvKiAweDAyICovCisJIjEwMCBNSHogUENJLVgiLAkvKiAweDAzICovCisJIjEzMyBNSHogUENJLVgiLAkvKiAweDA0ICovCisJTlVMTCwJCQkvKiAweDA1ICovCisJTlVMTCwJCQkvKiAweDA2ICovCisJTlVMTCwJCQkvKiAweDA3ICovCisJTlVMTCwJCQkvKiAweDA4ICovCisJIjY2IE1IeiBQQ0ktWCAyNjYiLAkvKiAweDA5ICovCisJIjEwMCBNSHogUENJLVggMjY2IiwJLyogMHgwYSAqLworCSIxMzMgTUh6IFBDSS1YIDI2NiIsCS8qIDB4MGIgKi8KKwkiVW5rbm93biBBR1AiLAkJLyogMHgwYyAqLworCSIxeCBBR1AiLAkJLyogMHgwZCAqLworCSIyeCBBR1AiLAkJLyogMHgwZSAqLworCSI0eCBBR1AiLAkJLyogMHgwZiAqLworCSI4eCBBR1AiLAkJLyogMHgxMCAqLworCSI2NiBNSHogUENJLVggNTMzIiwJLyogMHgxMSAqLworCSIxMDAgTUh6IFBDSS1YIDUzMyIsCS8qIDB4MTIgKi8KKwkiMTMzIE1IeiBQQ0ktWCA1MzMiLAkvKiAweDEzICovCisJIjIuNSBHVC9zIFBDSWUiLAkvKiAweDE0ICovCisJIjUuMCBHVC9zIFBDSWUiLAkvKiAweDE1ICovCisJIjguMCBHVC9zIFBDSWUiLAkvKiAweDE2ICovCit9OworCitzdGF0aWMgc3NpemVfdCBidXNfc3BlZWRfcmVhZChlbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQsIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBjaGFyICpzcGVlZF9zdHJpbmc7CisKKwlpZiAoc3BlZWQgPCBBUlJBWV9TSVpFKHBjaV9idXNfc3BlZWRfc3RyaW5ncykpCisJCXNwZWVkX3N0cmluZyA9IHBjaV9idXNfc3BlZWRfc3RyaW5nc1tzcGVlZF07CisJZWxzZQorCQlzcGVlZF9zdHJpbmcgPSAiVW5rbm93biI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3BlZWRfc3RyaW5nKTsKK30KKworc3RhdGljIHNzaXplX3QgbWF4X3NwZWVkX3JlYWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYnVzX3NwZWVkX3JlYWQoc2xvdC0+YnVzLT5tYXhfYnVzX3NwZWVkLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBjdXJfc3BlZWRfcmVhZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwgY2hhciAqYnVmKQoreworCXJldHVybiBidXNfc3BlZWRfcmVhZChzbG90LT5idXMtPmN1cl9idXNfc3BlZWQsIGJ1Zik7Cit9CisKIHN0YXRpYyB2b2lkIHBjaV9zbG90X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKQEAgLTY2LDkgKzExNSwxNSBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9zbG90X2F0dHJpYnV0ZSBwY2lfc2xvdF9hdHRyX2FkZHJlc3MgPQogCV9fQVRUUihhZGRyZXNzLCAoU19JRlJFRyB8IFNfSVJVR08pLCBhZGRyZXNzX3JlYWRfZmlsZSwgTlVMTCk7CitzdGF0aWMgc3RydWN0IHBjaV9zbG90X2F0dHJpYnV0ZSBwY2lfc2xvdF9hdHRyX21heF9zcGVlZCA9CisJX19BVFRSKG1heF9idXNfc3BlZWQsIChTX0lGUkVHIHwgU19JUlVHTyksIG1heF9zcGVlZF9yZWFkX2ZpbGUsIE5VTEwpOworc3RhdGljIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUgcGNpX3Nsb3RfYXR0cl9jdXJfc3BlZWQgPQorCV9fQVRUUihjdXJfYnVzX3NwZWVkLCAoU19JRlJFRyB8IFNfSVJVR08pLCBjdXJfc3BlZWRfcmVhZF9maWxlLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBjaV9zbG90X2RlZmF1bHRfYXR0cnNbXSA9IHsKIAkmcGNpX3Nsb3RfYXR0cl9hZGRyZXNzLmF0dHIsCisJJnBjaV9zbG90X2F0dHJfbWF4X3NwZWVkLmF0dHIsCisJJnBjaV9zbG90X2F0dHJfY3VyX3NwZWVkLmF0dHIsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCmluZGV4IDlmM2FkYmQuLjBhNjYwMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwpAQCAtODQsNyArODQsNyBAQAogCXRyaXN0YXRlICJDYXJkQnVzIHllbnRhLWNvbXBhdGlibGUgYnJpZGdlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgQ0FSREJVUyBpZiAhRU1CRURERUQKLQlzZWxlY3QgUENDQVJEX05PTlNUQVRJQworCXNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDIGlmIFBDTUNJQSAhPSBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBDYXJkQnVzIGhvc3QgYnJpZGdlcy4gIFZpcnR1YWxseQogCSAgYWxsIG1vZGVybiBQQ01DSUEgYnJpZGdlcyBhcmUgQ2FyZEJ1cyBjb21wYXRpYmxlLiAgQSAiYnJpZGdlIiBpcwpAQCAtMTYxLDkgKzE2MSw4IEBACiAKIGNvbmZpZyBQQ01DSUFfTThYWAogCXRyaXN0YXRlICJNUEM4eHggUENNQ0lBIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ01DSUEgJiYgUFBDICYmIDh4eAotCXNlbGVjdCBQQ0NBUkRfSU9EWU4KLQlzZWxlY3QgUENDQVJEX05PTlNUQVRJQworCWRlcGVuZHMgb24gUENDQVJEICYmIFBQQyAmJiA4eHgKKwlzZWxlY3QgUENDQVJEX0lPRFlOIGlmIFBDTUNJQSAhPSBuCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFBvd2VyUEMgOHh4IHNlcmllcyBQQ01DSUEKIAkgIGNvbnRyb2xsZXIuCkBAIC0xNzQsNiArMTczLDI3IEBACiAJdHJpc3RhdGUgIkF1MXgwMCBwY21jaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgUENNQ0lBCiAKK2NvbmZpZyBQQ01DSUFfQUxDSEVNWV9ERVZCT0FSRAorCXRyaXN0YXRlICJBbGNoZW15IERiL1BiMXh4eCBQQ01DSUEgc29ja2V0IHNlcnZpY2VzIgorCWRlcGVuZHMgb24gU09DX0FVMVgwMCAmJiBQQ01DSUEKKwlzZWxlY3QgNjRCSVRfUEhZU19BRERSCisJaGVscAorCSAgRW5hYmxlIHRoaXMgZHJpdmVyIG9mIHlvdSB3YW50IFBDTUNJQSBzdXBwb3J0IG9uIHlvdXIgQWxjaGVteQorCSAgRGIxMDAwLCBEYi9QYjExMDAsIERiL1BiMTUwMCwgRGIvUGIxNTUwLCBEYi9QYjEyMDAgYm9hcmQuCisJICBOT1Qgc3VpdGFibGUgZm9yIHRoZSBQQjEwMDAhCisKKwkgIFRoaXMgZHJpdmVyIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlIGNhbGxlZCBkYjF4eHhfc3Mua28KKworY29uZmlnIFBDTUNJQV9YWFMxNTAwCisJdHJpc3RhdGUgIk15Q2FibGUgWFhTMTUwMCBQQ01DSUEgc29ja2V0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ01DSUEgJiYgTUlQU19YWFMxNTAwCisJc2VsZWN0IDY0QklUX1BIWVNfQUREUgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBQQ01DSUEvQ0Ygc29ja2V0IGludGVyZmFjZSBvbiBNeUNhYmxlIFhYUzE1MDAKKwkgIHN5c3RlbXMuCisKKwkgIFRoaXMgZHJpdmVyIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlIGNhbGxlZCB4eHMxNTAwX3NzLmtvCisKIGNvbmZpZyBQQ01DSUFfQkNNNjNYWAogCXRyaXN0YXRlICJiY202M3h4IHBjbWNpYSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQkNNNjNYWCAmJiBQQ01DSUEKQEAgLTIzOCwxNCArMjU4LDEyIEBACiBjb25maWcgTTMyUl9QQ0MKIAlib29sICJNMzJSIFBDTUNJQSBJL0YiCiAJZGVwZW5kcyBvbiBNMzJSICYmIENISVBfTTMyNzAwICYmIFBDTUNJQQotCXNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byB1c2UgdGhlIE0zMlIgUENNQ0lBIGNvbnRyb2xsZXIuCiAKIGNvbmZpZyBNMzJSX0NGQwogCWJvb2wgIk0zMlIgQ0YgSS9GIENvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBNMzJSICYmIChQTEFUX1VTUlYgfHwgUExBVF9NMzI3MDBVVCB8fCBQTEFUX01BUFBJMiB8fCBQTEFUX01BUFBJMyB8fCBQTEFUX09QU1BVVCkKLQlzZWxlY3QgUENDQVJEX05PTlNUQVRJQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gdXNlIHRoZSBNMzJSIENvbXBhY3RGbGFzaCBjb250cm9sbGVyLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IDgzZmY4MDIuLjM4MWIwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCkBAIC0yLDExICsyLDExIEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIHBjbWNpYSBzdWJzeXN0ZW0gKGMvbyBEYXZpZCBIaW5kcykKICMKIAotcGNtY2lhX2NvcmUteQkJCQkJKz0gY3MubyBjaXN0cGwubyByc3JjX21nci5vIHNvY2tldF9zeXNmcy5vCitwY21jaWFfY29yZS15CQkJCQkrPSBjcy5vIHJzcmNfbWdyLm8gc29ja2V0X3N5c2ZzLm8KIHBjbWNpYV9jb3JlLSQoQ09ORklHX0NBUkRCVVMpCQkJKz0gY2FyZGJ1cy5vCiBvYmotJChDT05GSUdfUENDQVJEKQkJCQkrPSBwY21jaWFfY29yZS5vCiAKLXBjbWNpYS15CQkJCQkrPSBkcy5vIHBjbWNpYV9yZXNvdXJjZS5vCitwY21jaWEteQkJCQkJKz0gZHMubyBwY21jaWFfcmVzb3VyY2UubyBjaXN0cGwubwogcGNtY2lhLSQoQ09ORklHX1BDTUNJQV9JT0NUTCkJCQkrPSBwY21jaWFfaW9jdGwubwogb2JqLSQoQ09ORklHX1BDTUNJQSkJCQkJKz0gcGNtY2lhLm8KIApAQCAtMzUsMTggKzM1LDEwIEBACiBvYmotJChDT05GSUdfQkZJTl9DRlBDTUNJQSkJCQkrPSBiZmluX2NmX3BjbWNpYS5vCiBvYmotJChDT05GSUdfQVQ5MV9DRikJCQkJKz0gYXQ5MV9jZi5vCiBvYmotJChDT05GSUdfRUxFQ1RSQV9DRikJCQkrPSBlbGVjdHJhX2NmLm8KK29iai0kKENPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRCkJCSs9IGRiMXh4eF9zcy5vCiAKIGF1MXgwMF9zcy15CQkJCQkrPSBhdTEwMDBfZ2VuZXJpYy5vCiBhdTF4MDBfc3MtJChDT05GSUdfTUlQU19QQjEwMDApCQkJKz0gYXUxMDAwX3BiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19QQjExMDApCQkJKz0gYXUxMDAwX3BiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19QQjEyMDApCQkJKz0gYXUxMDAwX2RiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19QQjE1MDApCQkJKz0gYXUxMDAwX3BiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19EQjEwMDApCQkJKz0gYXUxMDAwX2RiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19EQjExMDApCQkJKz0gYXUxMDAwX2RiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19EQjEyMDApCQkJKz0gYXUxMDAwX2RiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19EQjE1MDApCQkJKz0gYXUxMDAwX2RiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19EQjE1NTApCQkJKz0gYXUxMDAwX2RiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19YWFMxNTAwKQkJKz0gYXUxMDAwX3h4czE1MDAubwogCiBzYTExMTFfY3MteQkJCQkJKz0gc2ExMTExX2dlbmVyaWMubwogc2ExMTExX2NzLSQoQ09ORklHX0FTU0FCRVRfTkVQT05TRVQpCQkrPSBzYTExMDBfbmVwb25zZXQubwpAQCAtNzYsMyArNjgsNSBAQAogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1NUQVJHQVRFMikJCSs9IHB4YTJ4eF9zdGFyZ2F0ZTIubwogCiBvYmotJChDT05GSUdfUENNQ0lBX1BYQTJYWCkJCQkrPSBweGEyeHhfYmFzZS5vICQocHhhMnh4LW9iai15KQorCitvYmotJChDT05GSUdfUENNQ0lBX1hYUzE1MDApCQkJKz0geHhzMTUwMF9zcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKaW5kZXggZTFkY2NlZC4uNWQyMjgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwpAQCAtNTIsOCArNTIsNiBAQAogCXVuc2lnbmVkIGxvbmcJCXBoeXNfYmFzZWFkZHI7CiB9OwogCi0jZGVmaW5lCVNaXzJLCQkJKDIgKiBTWl8xSykKLQogc3RhdGljIGlubGluZSBpbnQgYXQ5MV9jZl9wcmVzZW50KHN0cnVjdCBhdDkxX2NmX3NvY2tldCAqY2YpCiB7CiAJcmV0dXJuICFncGlvX2dldF92YWx1ZShjZi0+Ym9hcmQtPmRldF9waW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzhkNzdmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNSArMCwwIEBACi0vKgotICoKLSAqIEFsY2hlbXkgU2VtaSBEYjF4MDAgYm9hcmRzIHNwZWNpZmljIHBjbWNpYSByb3V0aW5lcy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNCBQZXRlIFBvcG92LCB1cGRhdGVkIHRoZSBkcml2ZXIgdG8gMi42LgotICogRm9sbG93ZWQgdGhlIHNhMTF4eCBBUEkgYW5kIGxhcmdlbHkgY29waWVkIG1hbnkgb2YgdGhlIGhhcmR3YXJlCi0gKiBpbmRlcGVuZGVudCBmdW5jdGlvbnMuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMjAwKQotCSNpbmNsdWRlIDxkYjEyMDAuaD4KLSNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfUEIxMjAwKQotCSNpbmNsdWRlIDxwYjEyMDAuaD4KLSNlbHNlCi0JI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9kYjF4MDAuaD4KLQlzdGF0aWMgQkNTUiAqIGNvbnN0IGJjc3IgPSAoQkNTUiAqKUJDU1JfS1NFRzFfQUREUjsKLSNlbmRpZgotCi0jaW5jbHVkZSAiYXUxMDAwX2dlbmVyaWMuaCIKLQotI2lmIDAKLSNkZWZpbmUgZGVidWcoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgeCwgX19mdW5jX18gLCAjI2FyZ3MpCi0jZWxzZQotI2RlZmluZSBkZWJ1Zyh4LGFyZ3MuLi4pCi0jZW5kaWYKLQotCi1zdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgYXUxMDAwX3BjbWNpYV9zb2NrZXRbUENNQ0lBX05VTV9TT0NLU107Ci1leHRlcm4gaW50IGF1MXgwMF9wY21jaWFfc29ja2V0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKiwgaW50LCBpbnQpOwotCi1zdGF0aWMgaW50IGRiMXgwMF9wY21jaWFfaHdfaW5pdChzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKLQlza3QtPmlycSA9IHNrdC0+bnIgPyBBVTEwMDBfR1BJT181IDogQVUxMDAwX0dQSU9fMzsKLSNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMjAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQlza3QtPmlycSA9IHNrdC0+bnIgPyBCT0FSRF9QQzFfSU5UIDogQk9BUkRfUEMwX0lOVDsKLSNlbHNlCi0Jc2t0LT5pcnEgPSBza3QtPm5yID8gQVUxMDAwX0dQSU9fNSA6IEFVMTAwMF9HUElPXzI7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZGIxeDAwX3BjbWNpYV9zaHV0ZG93bihzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQliY3NyLT5wY21jaWEgPSAwOyAvKiB0dXJuIG9mZiBwb3dlciAqLwotCWF1X3N5bmNfZGVsYXkoMik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYjF4MDBfcGNtY2lhX3NvY2tldF9zdGF0ZShzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCwgc3RydWN0IHBjbWNpYV9zdGF0ZSAqc3RhdGUpCi17Ci0JdTMyIGluc2VydGVkOwotCXVuc2lnbmVkIGNoYXIgdnM7Ci0KLQlzdGF0ZS0+cmVhZHkgPSAwOwotCXN0YXRlLT52c19YdiA9IDA7Ci0Jc3RhdGUtPnZzXzN2ID0gMDsKLQlzdGF0ZS0+ZGV0ZWN0ID0gMDsKLQotCXN3aXRjaCAoc2t0LT5ucikgewotCWNhc2UgMDoKLQkJdnMgPSBiY3NyLT5zdGF0dXMgJiAweDM7Ci0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEyMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfUEIxMjAwKQotCQlpbnNlcnRlZCA9IEJPQVJEX0NBUkRfSU5TRVJURUQoMCk7Ci0jZWxzZQotCQlpbnNlcnRlZCA9ICEoYmNzci0+c3RhdHVzICYgKDE8PDQpKTsKLSNlbmRpZgotCQlicmVhazsKLQljYXNlIDE6Ci0JCXZzID0gKGJjc3ItPnN0YXR1cyAmIDB4Qyk+PjI7Ci0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEyMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfUEIxMjAwKQotCQlpbnNlcnRlZCA9IEJPQVJEX0NBUkRfSU5TRVJURUQoMSk7Ci0jZWxzZQotCQlpbnNlcnRlZCA9ICEoYmNzci0+c3RhdHVzICYgKDE8PDUpKTsKLSNlbmRpZgotCQlicmVhazsKLQlkZWZhdWx0Oi8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQkJcmV0dXJuOwotCX0KLQotCWlmIChpbnNlcnRlZCkKLQkJZGVidWcoImRiMXgwMCBzb2NrZXQgJWQ6IGluc2VydGVkICVkLCB2cyAlZCBwY21jaWEgJXhcbiIsCi0JCQkJc2t0LT5uciwgaW5zZXJ0ZWQsIHZzLCBiY3NyLT5wY21jaWEpOwotCi0JaWYgKGluc2VydGVkKSB7Ci0JCXN3aXRjaCAodnMpIHsKLQkJCWNhc2UgMDoKLQkJCWNhc2UgMjoKLQkJCQlzdGF0ZS0+dnNfM3Y9MTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMzogLyogNVYgKi8KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJLyogcmV0dXJuIHdpdGhvdXQgc2V0dGluZyAnZGV0ZWN0JyAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiZGIxeDAwIGJhZCBWUyAoJWQpXG4iLAotCQkJCQkJdnMpOwotCQl9Ci0JCXN0YXRlLT5kZXRlY3QgPSAxOwotCQlzdGF0ZS0+cmVhZHkgPSAxOwotCX0KLQllbHNlIHsKLQkJLyogaWYgdGhlIGNhcmQgd2FzIHByZXZpb3VzbHkgaW5zZXJ0ZWQgYW5kIHRoZW4gZWplY3RlZCwKLQkJICogd2Ugc2hvdWxkIHR1cm4gb2ZmIHBvd2VyIHRvIGl0Ci0JCSAqLwotCQlpZiAoKHNrdC0+bnIgPT0gMCkgJiYgKGJjc3ItPnBjbWNpYSAmIEJDU1JfUENNQ0lBX1BDMFJTVCkpIHsKLQkJCWJjc3ItPnBjbWNpYSAmPSB+KEJDU1JfUENNQ0lBX1BDMFJTVCB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMERSVkVOIHwKLQkJCQkJQkNTUl9QQ01DSUFfUEMwVlBQIHwKLQkJCQkJQkNTUl9QQ01DSUFfUEMwVkNDKTsKLQkJCWF1X3N5bmNfZGVsYXkoMTApOwotCQl9Ci0JCWVsc2UgaWYgKChza3QtPm5yID09IDEpICYmIGJjc3ItPnBjbWNpYSAmIEJDU1JfUENNQ0lBX1BDMVJTVCkgewotCQkJYmNzci0+cGNtY2lhICY9IH4oQkNTUl9QQ01DSUFfUEMxUlNUIHwKLQkJCQkJQkNTUl9QQ01DSUFfUEMxRFJWRU4gfAotCQkJCQlCQ1NSX1BDTUNJQV9QQzFWUFAgfAotCQkJCQlCQ1NSX1BDTUNJQV9QQzFWQ0MpOwotCQkJYXVfc3luY19kZWxheSgxMCk7Ci0JCX0KLQl9Ci0KLQlzdGF0ZS0+YnZkMT0xOwotCXN0YXRlLT5idmQyPTE7Ci0Jc3RhdGUtPndycHJvdD0wOwotfQotCi1zdGF0aWMgaW50Ci1kYjF4MDBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QsIHN0cnVjdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCi17Ci0JdTE2IHB3cjsKLQlpbnQgc29jayA9IHNrdC0+bnI7Ci0KLQlkZWJ1ZygiY29uZmlnX3NrdCAlZCBWY2MgJWRWIFZwcCAlZFYsIHJlc2V0ICVkXG4iLAotCQkJc29jaywgc3RhdGUtPlZjYywgc3RhdGUtPlZwcCwKLQkJCXN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKTsKLQotCS8qIHBjbWNpYSByZWcgd2FzIHNldCB0byB6ZXJvIGF0IGluaXQgdGltZS4gQmUgY2FyZWZ1bCB3aGVuCi0JICogaW5pdGlhbGl6aW5nIGEgc29ja2V0IG5vdCB0byB3aXBlIG91dCB0aGUgc2V0dGluZ3Mgb2YgdGhlCi0JICogb3RoZXIgc29ja2V0LgotCSAqLwotCXB3ciA9IGJjc3ItPnBjbWNpYTsKLQlwd3IgJj0gfigweGYgPDwgc29jayo4KTsgLyogY2xlYXIgdm9sdGFnZSBzZXR0aW5ncyAqLwotCi0Jc3RhdGUtPlZwcCA9IDA7Ci0Jc3dpdGNoKHN0YXRlLT5WY2MpewotCQljYXNlIDA6ICAvKiBWY2MgMCAqLwotCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDAsMCxzb2NrKTsKLQkJCWJyZWFrOwotCQljYXNlIDUwOiAvKiBWY2MgNVYgKi8KLQkJCXN3aXRjaChzdGF0ZS0+VnBwKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMiwwLHNvY2spOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDUwOgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMiwxLHNvY2spOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDEyOgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMiwyLHNvY2spOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDMzOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXB3ciB8PSBTRVRfVkNDX1ZQUCgwLDAsc29jayk7Ci0JCQkJCXByaW50aygiJXM6IGJhZCBWY2MvVnBwICglZDolZClcbiIsCi0JCQkJCQkJX19mdW5jX18sCi0JCQkJCQkJc3RhdGUtPlZjYywKLQkJCQkJCQlzdGF0ZS0+VnBwKTsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAzMzogLyogVmNjIDMuM1YgKi8KLQkJCXN3aXRjaChzdGF0ZS0+VnBwKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMSwwLHNvY2spOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDEyOgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMSwyLHNvY2spOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDMzOgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMSwxLHNvY2spOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDUwOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXB3ciB8PSBTRVRfVkNDX1ZQUCgwLDAsc29jayk7Ci0JCQkJCXByaW50aygiJXM6IGJhZCBWY2MvVnBwICglZDolZClcbiIsCi0JCQkJCQkJX19mdW5jX18sCi0JCQkJCQkJc3RhdGUtPlZjYywKLQkJCQkJCQlzdGF0ZS0+VnBwKTsKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDogLyogd2hhdCdzIHRoaXMgPyAqLwotCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDAsMCxzb2NrKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBWY2MgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCBzdGF0ZS0+VmNjKTsKLQkJCWJyZWFrOwotCX0KLQotCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQlhdV9zeW5jX2RlbGF5KDMwMCk7Ci0KLQlpZiAoc29jayA9PSAwKSB7Ci0JCWlmICghKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSkgewotCQkJcHdyIHw9IEJDU1JfUENNQ0lBX1BDMERSVkVOOwotCQkJYmNzci0+cGNtY2lhID0gcHdyOwotCQkJYXVfc3luY19kZWxheSgzMDApOwotCQkJcHdyIHw9IEJDU1JfUENNQ0lBX1BDMFJTVDsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJfQotCQllbHNlIHsKLQkJCXB3ciAmPSB+KEJDU1JfUENNQ0lBX1BDMFJTVCB8IEJDU1JfUENNQ0lBX1BDMERSVkVOKTsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJfQotCX0KLQllbHNlIHsKLQkJaWYgKCEoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpKSB7Ci0JCQlwd3IgfD0gQkNTUl9QQ01DSUFfUEMxRFJWRU47Ci0JCQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JCQlhdV9zeW5jX2RlbGF5KDMwMCk7Ci0JCQlwd3IgfD0gQkNTUl9QQ01DSUFfUEMxUlNUOwotCQkJYmNzci0+cGNtY2lhID0gcHdyOwotCQkJYXVfc3luY19kZWxheSgxMDApOwotCQl9Ci0JCWVsc2UgewotCQkJcHdyICY9IH4oQkNTUl9QQ01DSUFfUEMxUlNUIHwgQkNTUl9QQ01DSUFfUEMxRFJWRU4pOwotCQkJYmNzci0+cGNtY2lhID0gcHdyOwotCQkJYXVfc3luY19kZWxheSgxMDApOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogRW5hYmxlIGNhcmQgc3RhdHVzIElSUXMgb24gKHJlLSlpbml0aWFsaXNhdGlvbi4gIFRoaXMgY2FuCi0gKiBiZSBjYWxsZWQgYXQgaW5pdGlhbGlzYXRpb24sIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnQsIG9yCi0gKiBwY21jaWEgZXZlbnQuCi0gKi8KLXZvaWQgZGIxeDAwX3NvY2tldF9pbml0KHN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0KQotewotCS8qIG5vdGhpbmcgdG8gZG8gZm9yIG5vdyAqLwotfQotCi0vKgotICogRGlzYWJsZSBjYXJkIHN0YXR1cyBJUlFzIGFuZCBQQ01DSUEgYnVzIG9uIHN1c3BlbmQuCi0gKi8KLXZvaWQgZGIxeDAwX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0KQotewotCS8qIG5vdGhpbmcgdG8gZG8gZm9yIG5vdyAqLwotfQotCi1zdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCBkYjF4MDBfcGNtY2lhX29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCi0JLmh3X2luaXQgCQk9IGRiMXgwMF9wY21jaWFfaHdfaW5pdCwKLQkuaHdfc2h1dGRvd24JCT0gZGIxeDAwX3BjbWNpYV9zaHV0ZG93biwKLQotCS5zb2NrZXRfc3RhdGUJCT0gZGIxeDAwX3BjbWNpYV9zb2NrZXRfc3RhdGUsCi0JLmNvbmZpZ3VyZV9zb2NrZXQJPSBkYjF4MDBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCi0KLQkuc29ja2V0X2luaXQJCT0gZGIxeDAwX3NvY2tldF9pbml0LAotCS5zb2NrZXRfc3VzcGVuZAkJPSBkYjF4MDBfc29ja2V0X3N1c3BlbmQKLX07Ci0KLWludCBhdTF4X2JvYXJkX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQgPSAtRU5PREVWOwotCWJjc3ItPnBjbWNpYSA9IDA7IC8qIHR1cm4gb2ZmIHBvd2VyLCBpZiBpdCdzIG5vdCBhbHJlYWR5IG9mZiAqLwotCWF1X3N5bmNfZGVsYXkoMik7Ci0JcmV0ID0gYXUxeDAwX3BjbWNpYV9zb2NrZXRfcHJvYmUoZGV2LCAmZGIxeDAwX3BjbWNpYV9vcHMsIDAsIDIpOwotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwppbmRleCAwMjA4ODcwLi4xNzFjOGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKQEAgLTQwNSwxOCArNDA1LDE2IEBACiAJCQlza3QtPnZpcnRfaW8gPSAodm9pZCAqKQogCQkJCShpb3JlbWFwKChwaHlzX3QpQVUxWF9TT0NLMF9JTywgMHgxMDAwKSAtCiAJCQkJKHUzMiltaXBzX2lvX3BvcnRfYmFzZSk7Ci0JCQlza3QtPnBoeXNfYXR0ciA9IEFVMVhfU09DSzBfUFNFVURPX1BIWVNfQVRUUjsKLQkJCXNrdC0+cGh5c19tZW0gPSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX01FTTsKKwkJCXNrdC0+cGh5c19hdHRyID0gQVUxWF9TT0NLMF9QSFlTX0FUVFI7CisJCQlza3QtPnBoeXNfbWVtID0gQVUxWF9TT0NLMF9QSFlTX01FTTsKIAkJfQotI2lmbmRlZiBDT05GSUdfTUlQU19YWFMxNTAwCiAJCWVsc2UgIHsKIAkJCXNrdC0+dmlydF9pbyA9ICh2b2lkICopCiAJCQkJKGlvcmVtYXAoKHBoeXNfdClBVTFYX1NPQ0sxX0lPLCAweDEwMDApIC0KIAkJCQkodTMyKW1pcHNfaW9fcG9ydF9iYXNlKTsKLQkJCXNrdC0+cGh5c19hdHRyID0gQVUxWF9TT0NLMV9QU0VVRE9fUEhZU19BVFRSOwotCQkJc2t0LT5waHlzX21lbSA9IEFVMVhfU09DSzFfUFNFVURPX1BIWVNfTUVNOworCQkJc2t0LT5waHlzX2F0dHIgPSBBVTFYX1NPQ0sxX1BIWVNfQVRUUjsKKwkJCXNrdC0+cGh5c19tZW0gPSBBVTFYX1NPQ0sxX1BIWVNfTUVNOwogCQl9Ci0jZW5kaWYKIAkJcGNtY2lhX2Jhc2VfdmFkZHJzW2ldID0gKHUzMiAqKXNrdC0+dmlydF9pbzsKIAkJcmV0ID0gb3BzLT5od19pbml0KHNrdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmggYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCmluZGV4IDEzYTRmYmMuLmEzMjRkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaApAQCAtMzYsMzAgKzM2LDE0IEBACiAjZGVmaW5lIEFVMVhfU09DSzBfSU8gICAgICAgIDB4RjAwMDAwMDAwVUxMCiAjZGVmaW5lIEFVMVhfU09DSzBfUEhZU19BVFRSIDB4RjQwMDAwMDAwVUxMCiAjZGVmaW5lIEFVMVhfU09DSzBfUEhZU19NRU0gIDB4RjgwMDAwMDAwVUxMCi0vKiBwc2V1ZG8gMzIgYml0IHBoeXMgYWRkcmVzc2VzLCB3aGljaCBnZXQgZml4ZWQgdXAgdG8gdGhlCi0gKiByZWFsIDM2IGJpdCBhZGRyZXNzIGluIGZpeHVwX2JpZ3BoeXNfYWRkcigpICovCi0jZGVmaW5lIEFVMVhfU09DSzBfUFNFVURPX1BIWVNfQVRUUiAweEY0MDAwMDAwCi0jZGVmaW5lIEFVMVhfU09DSzBfUFNFVURPX1BIWVNfTUVNICAweEY4MDAwMDAwCiAKIC8qIHBjbWNpYSBzb2NrZXQgMSBuZWVkcyBleHRlcm5hbCBnbHVlIGxvZ2ljIHNvIHRoZSBtZW1vcnkgbWFwCiAgKiBkaWZmZXJzIGZyb20gYm9hcmQgdG8gYm9hcmQuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19QQjExMDApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTUwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19QQjE1NTApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTAwMCkKICNkZWZpbmUgQVUxWF9TT0NLMV9JTyAgICAgICAgMHhGMDgwMDAwMDBVTEwKICNkZWZpbmUgQVUxWF9TT0NLMV9QSFlTX0FUVFIgMHhGNDgwMDAwMDBVTEwKICNkZWZpbmUgQVUxWF9TT0NLMV9QSFlTX01FTSAgMHhGODgwMDAwMDBVTEwKLSNkZWZpbmUgQVUxWF9TT0NLMV9QU0VVRE9fUEhZU19BVFRSIDB4RjQ4MDAwMDAKLSNkZWZpbmUgQVUxWF9TT0NLMV9QU0VVRE9fUEhZU19NRU0gIDB4Rjg4MDAwMDAKLSNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1MDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxNTUwKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTIwMCkKLSNkZWZpbmUgQVUxWF9TT0NLMV9JTyAgICAgICAgMHhGMDQwMDAwMDBVTEwKLSNkZWZpbmUgQVUxWF9TT0NLMV9QSFlTX0FUVFIgMHhGNDQwMDAwMDBVTEwKLSNkZWZpbmUgQVUxWF9TT0NLMV9QSFlTX01FTSAgMHhGODQwMDAwMDBVTEwKLSNkZWZpbmUgQVUxWF9TT0NLMV9QU0VVRE9fUEhZU19BVFRSIDB4RjQ0MDAwMDAKLSNkZWZpbmUgQVUxWF9TT0NLMV9QU0VVRE9fUEhZU19NRU0gIDB4Rjg0MDAwMDAKICNlbmRpZgogCiBzdHJ1Y3QgcGNtY2lhX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwppbmRleCBiMTk4NGVkLi41YTk3OWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCi0gKiBBbGNoZW15IFNlbWkgUGIxeDAwIGJvYXJkcyBzcGVjaWZpYyBwY21jaWEgcm91dGluZXMuCisgKiBBbGNoZW15IFNlbWkgUGIxMDAwIGJvYXJkcyBzcGVjaWZpYyBwY21jaWEgcm91dGluZXMuCiAgKgogICogQ29weXJpZ2h0IDIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCiAgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KQEAgLTQ2LDIwICs0NiwxMSBAQAogCiAjZGVmaW5lIGRlYnVnKGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAKLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKICNpbmNsdWRlIDxhc20vcGIxMDAwLmg+CiAjZGVmaW5lIFBDTUNJQV9JUlEgQVUxMDAwX0dQSU9fMTUKLSNlbGlmIGRlZmluZWQgKENPTkZJR19NSVBTX1BCMTUwMCkKLSNpbmNsdWRlIDxhc20vcGIxNTAwLmg+Ci0jZGVmaW5lIFBDTUNJQV9JUlEgQVUxNTAwX0dQSU9fMjAzCi0jZWxpZiBkZWZpbmVkIChDT05GSUdfTUlQU19QQjExMDApCi0jaW5jbHVkZSA8YXNtL3BiMTEwMC5oPgotI2RlZmluZSBQQ01DSUFfSVJRIEFVMTAwMF9HUElPXzExCi0jZW5kaWYKIAogc3RhdGljIGludCBwYjF4MDBfcGNtY2lhX2luaXQoc3RydWN0IHBjbWNpYV9pbml0ICppbml0KQogewotI2lmZGVmIENPTkZJR19NSVBTX1BCMTAwMAogCXUxNiBwY3I7CiAJcGNyID0gUENSX1NMT1RfMF9SU1QgfCBQQ1JfU0xPVF8xX1JTVDsKIApAQCAtNzQsMjEgKzY1LDEwIEBACiAJYXVfc3luY19kZWxheSgyMCk7CiAJICAKIAlyZXR1cm4gUENNQ0lBX05VTV9TT0NLUzsKLQotI2Vsc2UgLyogZml4bWUgLS0gdGFrZSBjYXJlIG9mIHRoZSBQYjE1MDAgYXQgc29tZSBwb2ludCAqLwotCi0JdTE2IHBjcjsKLQlwY3IgPSBhdV9yZWFkdyhQQ01DSUFfQk9BUkRfUkVHKSAmIH4weGY7IC8qIHR1cm4gb2ZmIHBvd2VyICovCi0JcGNyICY9IH4oUENfREVBU1NFUlRfUlNUIHwgUENfRFJWX0VOKTsKLQlhdV93cml0ZXcocGNyLCBQQ01DSUFfQk9BUkRfUkVHKTsKLQlhdV9zeW5jX2RlbGF5KDUwMCk7Ci0JcmV0dXJuIFBDTUNJQV9OVU1fU09DS1M7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGludCBwYjF4MDBfcGNtY2lhX3NodXRkb3duKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX01JUFNfUEIxMDAwCiAJdTE2IHBjcjsKIAlwY3IgPSBQQ1JfU0xPVF8wX1JTVCB8IFBDUl9TTE9UXzFfUlNUOwogCXBjciB8PSBTRVRfVkNDX1ZQUChWQ0NfSElaLFZQUF9ISVosMCk7CkBAIC05NiwxNCArNzYsNiBAQAogCWF1X3dyaXRlbChwY3IsIFBCMTAwMF9QQ1IpOwogCWF1X3N5bmNfZGVsYXkoMjApOwogCXJldHVybiAwOwotI2Vsc2UKLQl1MTYgcGNyOwotCXBjciA9IGF1X3JlYWR3KFBDTUNJQV9CT0FSRF9SRUcpICYgfjB4ZjsgLyogdHVybiBvZmYgcG93ZXIgKi8KLQlwY3IgJj0gfihQQ19ERUFTU0VSVF9SU1QgfCBQQ19EUlZfRU4pOwotCWF1X3dyaXRldyhwY3IsIFBDTUNJQV9CT0FSRF9SRUcpOwotCWF1X3N5bmNfZGVsYXkoMik7Ci0JcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGludCAKQEAgLTExMiwyMSArODQsMTEgQEAKIAl1MzIgaW5zZXJ0ZWQwLCBpbnNlcnRlZDE7CiAJdTE2IHZzMCwgdnMxOwogCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMDAwCiAJdnMwID0gdnMxID0gKHUxNilhdV9yZWFkbChQQjEwMDBfQUNSMSk7CiAJaW5zZXJ0ZWQwID0gISh2czAgJiAoQUNSMV9TTE9UXzBfQ0QxIHwgQUNSMV9TTE9UXzBfQ0QyKSk7CiAJaW5zZXJ0ZWQxID0gISh2czEgJiAoQUNSMV9TTE9UXzFfQ0QxIHwgQUNSMV9TTE9UXzFfQ0QyKSk7CiAJdnMwID0gKHZzMCA+PiA0KSAmIDB4MzsKIAl2czEgPSAodnMxID4+IDEyKSAmIDB4MzsKLSNlbHNlCi0JdnMwID0gKGF1X3JlYWR3KEJPQVJEX1NUQVRVU19SRUcpID4+IDQpICYgMHgzOwotI2lmZGVmIENPTkZJR19NSVBTX1BCMTUwMAotCWluc2VydGVkMCA9ICEoKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSA+PiAxKSAmIDB4MSk7IC8qIGdwaW8gMjAxICovCi0jZWxzZSAvKiBQYjExMDAgKi8KLQlpbnNlcnRlZDAgPSAhKChhdV9yZWFkbChTWVNfUElOU1RBVEVSRCkgPj4gOSkgJiAweDEpOyAvKiBncGlvIDkgKi8KLSNlbmRpZgotCWluc2VydGVkMSA9IDA7Ci0jZW5kaWYKIAogCXN0YXRlLT5yZWFkeSA9IDA7CiAJc3RhdGUtPnZzX1h2ID0gMDsKQEAgLTIwMyw3ICsxNjUsNiBAQAogCiAJaWYoY29uZmlndXJlLT5zb2NrID4gUENNQ0lBX01BWF9TT0NLKSByZXR1cm4gLTE7CiAKLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKIAlwY3IgPSBhdV9yZWFkbChQQjEwMDBfUENSKTsKIAogCWlmIChjb25maWd1cmUtPnNvY2sgPT0gMCkgewpAQCAtMzIzLDg0ICsyODQsNiBAQAogCWF1X3dyaXRlbChwY3IsIFBCMTAwMF9QQ1IpOwogCWF1X3N5bmNfZGVsYXkoMzAwKTsKIAotI2Vsc2UKLQotCXBjciA9IGF1X3JlYWR3KFBDTUNJQV9CT0FSRF9SRUcpICYgfjB4ZjsKLQotCWRlYnVnKCJWY2MgJWRWIFZwcCAlZFYsIHBjciAleCwgcmVzZXQgJWRcbiIsIAotCQkJY29uZmlndXJlLT52Y2MsIGNvbmZpZ3VyZS0+dnBwLCBwY3IsIGNvbmZpZ3VyZS0+cmVzZXQpOwotCi0KLQlzd2l0Y2goY29uZmlndXJlLT52Y2MpewotCQljYXNlIDA6ICAvKiBWY2MgMCAqLwotCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDAsMCk7Ci0JCQlicmVhazsKLQkJY2FzZSA1MDogLyogVmNjIDVWICovCi0JCQlzd2l0Y2goY29uZmlndXJlLT52cHApIHsKLQkJCQljYXNlIDA6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgyLDApOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDUwOgotCQkJCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMiwxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDIsMik7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMzM6Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDAsMCk7Ci0JCQkJCXByaW50aygiJXM6IGJhZCBWY2MvVnBwICglZDolZClcbiIsIAotCQkJCQkJCV9fZnVuY19fLAotCQkJCQkJCWNvbmZpZ3VyZS0+dmNjLCAKLQkJCQkJCQljb25maWd1cmUtPnZwcCk7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgMzM6IC8qIFZjYyAzLjNWICovCi0JCQlzd2l0Y2goY29uZmlndXJlLT52cHApIHsKLQkJCQljYXNlIDA6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgxLDApOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDEyOgotCQkJCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMSwyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzMzoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDEsMSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNTA6Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDAsMCk7Ci0JCQkJCXByaW50aygiJXM6IGJhZCBWY2MvVnBwICglZDolZClcbiIsIAotCQkJCQkJCV9fZnVuY19fLAotCQkJCQkJCWNvbmZpZ3VyZS0+dmNjLCAKLQkJCQkJCQljb25maWd1cmUtPnZwcCk7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IC8qIHdoYXQncyB0aGlzID8gKi8KLQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIFZjYyAlZFxuIiwgCi0JCQkJCV9fZnVuY19fLCBjb25maWd1cmUtPnZjYyk7Ci0JCQlicmVhazsKLQl9Ci0KLQlhdV93cml0ZXcocGNyLCBQQ01DSUFfQk9BUkRfUkVHKTsKLQlhdV9zeW5jX2RlbGF5KDMwMCk7Ci0KLQlpZiAoIWNvbmZpZ3VyZS0+cmVzZXQpIHsKLQkJcGNyIHw9IFBDX0RSVl9FTjsKLQkJYXVfd3JpdGV3KHBjciwgUENNQ0lBX0JPQVJEX1JFRyk7Ci0JCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJcGNyIHw9IFBDX0RFQVNTRVJUX1JTVDsKLQkJYXVfd3JpdGV3KHBjciwgUENNQ0lBX0JPQVJEX1JFRyk7Ci0JCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQl9Ci0JZWxzZSB7Ci0JCXBjciAmPSB+KFBDX0RFQVNTRVJUX1JTVCB8IFBDX0RSVl9FTik7Ci0JCWF1X3dyaXRldyhwY3IsIFBDTUNJQV9CT0FSRF9SRUcpOwotCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDNkNDdiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoKLSAqCi0gKiBNeUNhYmxlIGJvYXJkIHNwZWNpZmljIHBjbWNpYSByb3V0aW5lcy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogUGV0ZSBQb3BvdiwgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2NzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL3NzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgotI2luY2x1ZGUgPHBjbWNpYS9idXNfb3BzLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi0jaW5jbHVkZSA8YXNtL2F1MTAwMC5oPgotI2luY2x1ZGUgPGFzbS9hdTEwMDBfcGNtY2lhLmg+Ci0KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLCQkwCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MJKFBDTUNJQV9NQVhfU09DSyArIDEpCi0jZGVmaW5lIFBDTUNJQV9JUlEJCUFVMTAwMF9HUElPXzQKLQotI2lmIDAKLSNkZWZpbmUgREVCVUcoeCwgYXJncy4uLikJcHJpbnRrKF9fZnVuY19fICI6ICIgeCwgIyNhcmdzKQotI2Vsc2UKLSNkZWZpbmUgREVCVUcoeCxhcmdzLi4uKQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfaW5pdChzdHJ1Y3QgcGNtY2lhX2luaXQgKmluaXQpCi17Ci0JcmV0dXJuIFBDTUNJQV9OVU1fU09DS1M7Ci19Ci0KLXN0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfc2h1dGRvd24odm9pZCkKLXsKLQkvKiB0dXJuIG9mZiBwb3dlciAqLwotCWF1X3dyaXRlbChhdV9yZWFkbChHUElPMl9QSU5TVEFURSkgfCAoMTw8MTQpfCgxPDwzMCksCi0JCQlHUElPMl9PVVRQVVQpOwotCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQotCS8qIGFzc2VydCByZXNldCAqLwotCWF1X3dyaXRlbChhdV9yZWFkbChHUElPMl9QSU5TVEFURSkgfCAoMTw8NCl8KDE8PDIwKSwKLQkJCUdQSU8yX09VVFBVVCk7Ci0JYXVfc3luY19kZWxheSgxMDApOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLXh4czE1MDBfcGNtY2lhX3NvY2tldF9zdGF0ZSh1bnNpZ25lZCBzb2NrLCBzdHJ1Y3QgcGNtY2lhX3N0YXRlICpzdGF0ZSkKLXsKLQl1MzIgaW5zZXJ0ZWQ7IHUzMiB2czsKLQl1bnNpZ25lZCBsb25nIGdwaW8sIGdwaW8yOwotCi0JaWYoc29jayA+IFBDTUNJQV9NQVhfU09DSykgcmV0dXJuIC0xOwotCi0JZ3BpbyA9IGF1X3JlYWRsKFNZU19QSU5TVEFURVJEKTsKLQlncGlvMiA9IGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKTsKLQotCXZzID0gZ3BpbzIgJiAoKDE8PDgpIHwgKDE8PDkpKTsKLQlpbnNlcnRlZCA9ICghKGdwaW8gJiAweDEpICYmICEoZ3BpbyAmIDB4MikpOwotCi0Jc3RhdGUtPnJlYWR5ID0gMDsKLQlzdGF0ZS0+dnNfWHYgPSAwOwotCXN0YXRlLT52c18zdiA9IDA7Ci0Jc3RhdGUtPmRldGVjdCA9IDA7Ci0KLQlpZiAoaW5zZXJ0ZWQpIHsKLQkJc3dpdGNoICh2cykgewotCQkJY2FzZSAwOgotCQkJY2FzZSAxOgotCQkJY2FzZSAyOgotCQkJCXN0YXRlLT52c18zdj0xOwotCQkJCWJyZWFrOwotCQkJY2FzZSAzOiAvKiA1ViAqLwotCQkJZGVmYXVsdDoKLQkJCQkvKiByZXR1cm4gd2l0aG91dCBzZXR0aW5nICdkZXRlY3QnICovCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJhdTF4MDBfY3M6IHVuc3VwcG9ydGVkIFZTXG4iLAotCQkJCQkJdnMpOwotCQkJCXJldHVybjsKLQkJfQotCQlzdGF0ZS0+ZGV0ZWN0ID0gMTsKLQl9Ci0KLQlpZiAoc3RhdGUtPmRldGVjdCkgewotCQlzdGF0ZS0+cmVhZHkgPSAxOwotCX0KLQotCXN0YXRlLT5idmQxPSBncGlvMiAmICgxPDwxMCk7Ci0Jc3RhdGUtPmJ2ZDIgPSBncGlvMiAmICgxPDwxMSk7Ci0Jc3RhdGUtPndycHJvdD0wOwotCXJldHVybiAxOwotfQotCi0KLXN0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfZ2V0X2lycV9pbmZvKHN0cnVjdCBwY21jaWFfaXJxX2luZm8gKmluZm8pCi17Ci0KLQlpZihpbmZvLT5zb2NrID4gUENNQ0lBX01BWF9TT0NLKSByZXR1cm4gLTE7Ci0JaW5mby0+aXJxID0gUENNQ0lBX0lSUTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci14eHMxNTAwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KGNvbnN0IHN0cnVjdCBwY21jaWFfY29uZmlndXJlICpjb25maWd1cmUpCi17Ci0KLQlpZihjb25maWd1cmUtPnNvY2sgPiBQQ01DSUFfTUFYX1NPQ0spIHJldHVybiAtMTsKLQotCURFQlVHKCJWY2MgJWRWIFZwcCAlZFYsIHJlc2V0ICVkXG4iLAotCQkJY29uZmlndXJlLT52Y2MsIGNvbmZpZ3VyZS0+dnBwLCBjb25maWd1cmUtPnJlc2V0KTsKLQotCXN3aXRjaChjb25maWd1cmUtPnZjYyl7Ci0JCWNhc2UgMzM6IC8qIFZjYyAzLjNWICovCi0JCQkvKiB0dXJuIG9uIHBvd2VyICovCi0JCQlERUJVRygidHVybiBvbiBwb3dlclxuIik7Ci0JCQlhdV93cml0ZWwoKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSAmIH4oMTw8MTQpKXwoMTw8MzApLAotCQkJCQlHUElPMl9PVVRQVVQpOwotCQkJYXVfc3luY19kZWxheSgxMDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgNTA6IC8qIFZjYyA1ViAqLwotCQlkZWZhdWx0OiAvKiB3aGF0J3MgdGhpcyA/ICovCi0JCQlwcmludGsoS0VSTl9FUlIgImF1MXgwMF9jczogdW5zdXBwb3J0ZWQgVkNDXG4iKTsKLQkJY2FzZSAwOiAgLyogVmNjIDAgKi8KLQkJCS8qIHR1cm4gb2ZmIHBvd2VyICovCi0JCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDE0KXwoMTw8MzApLAotCQkJCQlHUElPMl9PVVRQVVQpOwotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCFjb25maWd1cmUtPnJlc2V0KSB7Ci0JCURFQlVHKCJkZWFzc2VydCByZXNldFxuIik7Ci0JCWF1X3dyaXRlbCgoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpICYgfigxPDw0KSl8KDE8PDIwKSwKLQkJCQlHUElPMl9PVVRQVVQpOwotCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCWF1X3dyaXRlbCgoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpICYgfigxPDw1KSl8KDE8PDIxKSwKLQkJCQlHUElPMl9PVVRQVVQpOwotCX0KLQllbHNlIHsKLQkJREVCVUcoImFzc2VydCByZXNldFxuIik7Ci0JCWF1X3dyaXRlbChhdV9yZWFkbChHUElPMl9QSU5TVEFURSkgfCAoMTw8NCl8KDE8PDIwKSwKLQkJCQlHUElPMl9PVVRQVVQpOwotCX0KLQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBwY21jaWFfbG93X2xldmVsIHh4czE1MDBfcGNtY2lhX29wcyA9IHsKLQl4eHMxNTAwX3BjbWNpYV9pbml0LAotCXh4czE1MDBfcGNtY2lhX3NodXRkb3duLAotCXh4czE1MDBfcGNtY2lhX3NvY2tldF9zdGF0ZSwKLQl4eHMxNTAwX3BjbWNpYV9nZXRfaXJxX2luZm8sCi0JeHhzMTUwMF9wY21jaWFfY29uZmlndXJlX3NvY2tldAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jCmluZGV4IDMwMGIzNjguLjI0ODJjZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkJsYWNrZmluIENvbXBhY3RGbGFzaC9QQ01DSUEgU29ja2V0IERyaXZlclxuIik7CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghaXJxKQorCWlmIChpcnEgPD0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljZF9wZnggPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwkvKkNhcmQgRGV0ZWN0IEdQSU8gUElOICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKaW5kZXggZDk5Zjg0Ni4uYWMwNjg2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwpAQCAtMjAsMTcwICsyMCwxMiBAQAogICovCiAKIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2NzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgotI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKiBPZmZzZXRzIGluIHRoZSBFeHBhbnNpb24gUk9NIEltYWdlIEhlYWRlciAqLwotI2RlZmluZSBST01fU0lHTkFUVVJFCQkweDAwMDAJLyogMiBieXRlcyAqLwotI2RlZmluZSBST01fREFUQV9QVFIJCTB4MDAxOAkvKiAyIGJ5dGVzICovCi0KLS8qIE9mZnNldHMgaW4gdGhlIENhcmRCdXMgUEMgQ2FyZCBEYXRhIFN0cnVjdHVyZSAqLwotI2RlZmluZSBQQ0RBVEFfU0lHTkFUVVJFCTB4MDAwMAkvKiA0IGJ5dGVzICovCi0jZGVmaW5lIFBDREFUQV9WUERfUFRSCQkweDAwMDgJLyogMiBieXRlcyAqLwotI2RlZmluZSBQQ0RBVEFfTEVOR1RICQkweDAwMGEJLyogMiBieXRlcyAqLwotI2RlZmluZSBQQ0RBVEFfUkVWSVNJT04JCTB4MDAwYwotI2RlZmluZSBQQ0RBVEFfSU1BR0VfU1oJCTB4MDAxMAkvKiAyIGJ5dGVzICovCi0jZGVmaW5lIFBDREFUQV9ST01fTEVWRUwJMHgwMDEyCS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUENEQVRBX0NPREVfVFlQRQkweDAwMTQKLSNkZWZpbmUgUENEQVRBX0lORElDQVRPUgkweDAwMTUKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIEV4cGFuc2lvbiBST00ncyBoYXZlIGEgc3BlY2lhbCBsYXlvdXQsIGFuZCBwb2ludGVycyBzcGVjaWZ5IGFuCi0gICAgaW1hZ2UgbnVtYmVyIGFuZCBhbiBvZmZzZXQgd2l0aGluIHRoYXQgaW1hZ2UuICB4bGF0ZV9yb21fYWRkcigpCi0gICAgY29udmVydHMgYW4gaW1hZ2Uvb2Zmc2V0IGFkZHJlc3MgdG8gYW4gYWJzb2x1dGUgb2Zmc2V0IGZyb20gdGhlCi0gICAgUk9NJ3MgYmFzZSBhZGRyZXNzLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdV9pbnQgeGxhdGVfcm9tX2FkZHIodm9pZCBfX2lvbWVtICpiLCB1X2ludCBhZGRyKQotewotCXVfaW50IGltZyA9IDAsIG9mcyA9IDAsIHN6OwotCXVfc2hvcnQgZGF0YTsKLQl3aGlsZSAoKHJlYWRiKGIpID09IDB4NTUpICYmIChyZWFkYihiICsgMSkgPT0gMHhhYSkpIHsKLQkJaWYgKGltZyA9PSAoYWRkciA+PiAyOCkpCi0JCQlyZXR1cm4gKGFkZHIgJiAweDBmZmZmZmZmKSArIG9mczsKLQkJZGF0YSA9IHJlYWRiKGIgKyBST01fREFUQV9QVFIpICsgKHJlYWRiKGIgKyBST01fREFUQV9QVFIgKyAxKSA8PCA4KTsKLQkJc3ogPSA1MTIgKiAocmVhZGIoYiArIGRhdGEgKyBQQ0RBVEFfSU1BR0VfU1opICsKLQkJCSAgICAocmVhZGIoYiArIGRhdGEgKyBQQ0RBVEFfSU1BR0VfU1ogKyAxKSA8PCA4KSk7Ci0JCWlmICgoc3ogPT0gMCkgfHwgKHJlYWRiKGIgKyBkYXRhICsgUENEQVRBX0lORElDQVRPUikgJiAweDgwKSkKLQkJCWJyZWFrOwotCQliICs9IHN6OwotCQlvZnMgKz0gc3o7Ci0JCWltZysrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoZXNlIGFyZSBzaW1pbGFyIHRvIHNldHVwX2Npc19tZW0gYW5kIHJlbGVhc2VfY2lzX21lbSBmb3IgMTYtYml0Ci0gICAgY2FyZHMuICBUaGUgInJlc3VsdCIgdGhhdCBpcyB1c2VkIGV4dGVybmFsbHkgaXMgdGhlIGNiX2Npc192aXJ0Ci0gICAgcG9pbnRlciBpbiB0aGUgc3RydWN0IHBjbWNpYV9zb2NrZXQgc3RydWN0dXJlLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdm9pZCBjYl9yZWxlYXNlX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCi17Ci0JaWYgKHMtPmNiX2Npc192aXJ0KSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgImNiX3JlbGVhc2VfY2lzX21lbSgpXG4iKTsKLQkJaW91bm1hcChzLT5jYl9jaXNfdmlydCk7Ci0JCXMtPmNiX2Npc192aXJ0ID0gTlVMTDsKLQkJcy0+Y2JfY2lzX3JlcyA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgaW50IGNiX3NldHVwX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQotewotCXVuc2lnbmVkIGludCBzdGFydCwgc2l6ZTsKLQotCWlmIChyZXMgPT0gcy0+Y2JfY2lzX3JlcykKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocy0+Y2JfY2lzX3JlcykKLQkJY2JfcmVsZWFzZV9jaXNfbWVtKHMpOwotCi0Jc3RhcnQgPSByZXMtPnN0YXJ0OwotCXNpemUgPSByZXMtPmVuZCAtIHN0YXJ0ICsgMTsKLQlzLT5jYl9jaXNfdmlydCA9IGlvcmVtYXAoc3RhcnQsIHNpemUpOwotCi0JaWYgKCFzLT5jYl9jaXNfdmlydCkKLQkJcmV0dXJuIC0xOwotCi0Jcy0+Y2JfY2lzX3JlcyA9IHJlczsKLQotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgVGhpcyBpcyB1c2VkIGJ5IHRoZSBDSVMgcHJvY2Vzc2luZyBjb2RlIHRvIHJlYWQgQ0lTIGluZm9ybWF0aW9uCi0gICAgZnJvbSBhIENhcmRCdXMgZGV2aWNlLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1pbnQgcmVhZF9jYl9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBzcGFjZSwgdV9pbnQgYWRkciwgdV9pbnQgbGVuLAotCQl2b2lkICpwdHIpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQotCWRldl9kYmcoJnMtPmRldiwgInJlYWRfY2JfbWVtKCVkLCAlI3gsICV1KVxuIiwgc3BhY2UsIGFkZHIsIGxlbik7Ci0KLQlkZXYgPSBwY2lfZ2V0X3Nsb3Qocy0+Y2JfZGV2LT5zdWJvcmRpbmF0ZSwgMCk7Ci0JaWYgKCFkZXYpCi0JCWdvdG8gZmFpbDsKLQotCS8qIENvbmZpZyBzcGFjZT8gKi8KLQlpZiAoc3BhY2UgPT0gMCkgewotCQlpZiAoYWRkciArIGxlbiA+IDB4MTAwKQotCQkJZ290byBmYWlscHV0OwotCQlmb3IgKDsgbGVuOyBhZGRyKyssIHB0cisrLCBsZW4tLSkKLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgYWRkciwgcHRyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmVzID0gZGV2LT5yZXNvdXJjZSArIHNwYWNlIC0gMTsKLQotCXBjaV9kZXZfcHV0KGRldik7Ci0KLQlpZiAoIXJlcy0+ZmxhZ3MpCi0JCWdvdG8gZmFpbDsKLQotCWlmIChjYl9zZXR1cF9jaXNfbWVtKHMsIHJlcykgIT0gMCkKLQkJZ290byBmYWlsOwotCi0JaWYgKHNwYWNlID09IDcpIHsKLQkJYWRkciA9IHhsYXRlX3JvbV9hZGRyKHMtPmNiX2Npc192aXJ0LCBhZGRyKTsKLQkJaWYgKGFkZHIgPT0gMCkKLQkJCWdvdG8gZmFpbDsKLQl9Ci0KLQlpZiAoYWRkciArIGxlbiA+IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkKLQkJZ290byBmYWlsOwotCi0JbWVtY3B5X2Zyb21pbyhwdHIsIHMtPmNiX2Npc192aXJ0ICsgYWRkciwgbGVuKTsKLQlyZXR1cm4gMDsKLQotZmFpbHB1dDoKLQlwY2lfZGV2X3B1dChkZXYpOwotZmFpbDoKLQltZW1zZXQocHRyLCAweGZmLCBsZW4pOwotCXJldHVybiAtMTsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIGNiX2FsbG9jKCkgYW5kIGNiX2ZyZWUoKSBhbGxvY2F0ZSBhbmQgZnJlZSB0aGUga2VybmVsIGRhdGEKLSAgICBzdHJ1Y3R1cmVzIGZvciBhIENhcmRidXMgZGV2aWNlLCBhbmQgaGFuZGxlIHRoZSBsb3dlc3QgbGV2ZWwgUENJCi0gICAgZGV2aWNlIHNldHVwIGlzc3Vlcy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgY2FyZGJ1c19jb25maWdfaXJxX2FuZF9jbHMoc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGlycSkKIHsKQEAgLTIxNSw2ICs1NywxMyBAQAogCX0KIH0KIAorLyoqCisgKiBjYl9hbGxvYygpIC0gYWRkIENhcmRCdXMgZGV2aWNlCisgKiBAczoJCXRoZSBwY21jaWFfc29ja2V0IHdoZXJlIHRoZSBDYXJkQnVzIGRldmljZSBpcyBsb2NhdGVkCisgKgorICogY2JfYWxsb2MoKSBhbGxvY2F0ZXMgdGhlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgZm9yIGEgQ2FyZGJ1cyBkZXZpY2UKKyAqIGFuZCBoYW5kbGVzIHRoZSBsb3dlc3QgbGV2ZWwgUENJIGRldmljZSBzZXR1cCBpc3N1ZXMuCisgKi8KIGludCBfX3JlZiBjYl9hbGxvYyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gcy0+Y2JfZGV2LT5zdWJvcmRpbmF0ZTsKQEAgLTI0OSwxMiArOTgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBjYl9mcmVlKCkgLSByZW1vdmUgQ2FyZEJ1cyBkZXZpY2UKKyAqIEBzOgkJdGhlIHBjbWNpYV9zb2NrZXQgd2hlcmUgdGhlIENhcmRCdXMgZGV2aWNlIHdhcyBsb2NhdGVkCisgKgorICogY2JfZnJlZSgpIGhhbmRsZXMgdGhlIGxvd2VzdCBsZXZlbCBQQ0kgZGV2aWNlIGNsZWFudXAuCisgKi8KIHZvaWQgY2JfZnJlZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gcy0+Y2JfZGV2OwogCi0JY2JfcmVsZWFzZV9jaXNfbWVtKHMpOwotCiAJaWYgKGJyaWRnZSkKIAkJcGNpX3JlbW92ZV9iZWhpbmRfYnJpZGdlKGJyaWRnZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDI1YjFjZDIuLjJmMzYyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCkBAIC02NCw2ICs2NCw3IEBACiAKIHZvaWQgcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogeworICAgIG11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAgICAgaWYgKHMtPmNpc19tZW0uZmxhZ3MgJiBNQVBfQUNUSVZFKSB7CiAJcy0+Y2lzX21lbS5mbGFncyAmPSB+TUFQX0FDVElWRTsKIAlzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZzLT5jaXNfbWVtKTsKQEAgLTc1LDEzICs3NiwxNSBAQAogCWlvdW5tYXAocy0+Y2lzX3ZpcnQpOwogCXMtPmNpc192aXJ0ID0gTlVMTDsKICAgICB9CisgICAgbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogfQotRVhQT1JUX1NZTUJPTChyZWxlYXNlX2Npc19tZW0pOwogCiAvKgogICogTWFwIHRoZSBjYXJkIG1lbW9yeSBhdCAiY2FyZF9vZmZzZXQiIGludG8gdmlydHVhbCBzcGFjZS4KICAqIElmIGZsYWdzICYgTUFQX0FUVFJJQiwgbWFwIHRoZSBhdHRyaWJ1dGUgc3BhY2UsIG90aGVyd2lzZQogICogbWFwIHRoZSBtZW1vcnkgc3BhY2UuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBvcHNfbXV0ZXggaGVsZC4KICAqLwogc3RhdGljIHZvaWQgX19pb21lbSAqCiBzZXRfY2lzX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGNhcmRfb2Zmc2V0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC0xNDAsNiArMTQzLDcgQEAKIAogICAgIGRldl9kYmcoJnMtPmRldiwgInBjbWNpYV9yZWFkX2Npc19tZW0oJWQsICUjeCwgJXUpXG4iLCBhdHRyLCBhZGRyLCBsZW4pOwogCisgICAgbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKICAgICBpZiAoYXR0ciAmIElTX0lORElSRUNUKSB7CiAJLyogSW5kaXJlY3QgYWNjZXNzZXMgdXNlIGEgYnVuY2ggb2Ygc3BlY2lhbCByZWdpc3RlcnMgYXQgZml4ZWQKIAkgICBsb2NhdGlvbnMgaW4gY29tbW9uIG1lbW9yeSAqLwpAQCAtMTUxLDcgKzE1NSw5IEBACiAKIAlzeXMgPSBzZXRfY2lzX21hcChzLCAwLCBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCkpOwogCWlmICghc3lzKSB7CisJICAgIGRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKIAkgICAgbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKKwkgICAgbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCSAgICByZXR1cm4gLTE7CiAJfQogCkBAIC0xNjUsNiArMTcxLDkgQEAKICAgICB9IGVsc2UgewogCXVfaW50IGluYyA9IDEsIGNhcmRfb2Zmc2V0LCBmbGFnczsKIAorCWlmIChhZGRyID4gQ0lTVFBMX01BWF9DSVNfU0laRSkKKwkJZGV2X2RiZygmcy0+ZGV2LCAiYXR0ZW1wdCB0byByZWFkIENJUyBtZW0gYXQgYWRkciAlI3giLCBhZGRyKTsKKwogCWZsYWdzID0gTUFQX0FDVElWRSB8ICgoY2lzX3dpZHRoKSA/IE1BUF8xNkJJVCA6IDApOwogCWlmIChhdHRyKSB7CiAJICAgIGZsYWdzIHw9IE1BUF9BVFRSSUI7CkBAIC0xNzYsNyArMTg1LDkgQEAKIAl3aGlsZSAobGVuKSB7CiAJICAgIHN5cyA9IHNldF9jaXNfbWFwKHMsIGNhcmRfb2Zmc2V0LCBmbGFncyk7CiAJICAgIGlmICghc3lzKSB7CisJCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKIAkJbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLTE7CiAJICAgIH0KIAkgICAgZW5kID0gc3lzICsgcy0+bWFwX3NpemU7CkBAIC0xOTAsMTIgKzIwMSwxMiBAQAogCSAgICBhZGRyID0gMDsKIAl9CiAgICAgfQorICAgIG11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKICAgICBkZXZfZGJnKCZzLT5kZXYsICIgICUjMi4yeCAlIzIuMnggJSMyLjJ4ICUjMi4yeCAuLi5cbiIsCiAJICAqKHVfY2hhciAqKShwdHIrMCksICoodV9jaGFyICopKHB0cisxKSwKIAkgICoodV9jaGFyICopKHB0cisyKSwgKih1X2NoYXIgKikocHRyKzMpKTsKICAgICByZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3JlYWRfY2lzX21lbSk7CiAKIAogdm9pZCBwY21jaWFfd3JpdGVfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsIHVfaW50IGFkZHIsCkBAIC0yMDYsNiArMjE3LDcgQEAKIAogICAgIGRldl9kYmcoJnMtPmRldiwgInBjbWNpYV93cml0ZV9jaXNfbWVtKCVkLCAlI3gsICV1KVxuIiwgYXR0ciwgYWRkciwgbGVuKTsKIAorICAgIG11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAgICAgaWYgKGF0dHIgJiBJU19JTkRJUkVDVCkgewogCS8qIEluZGlyZWN0IGFjY2Vzc2VzIHVzZSBhIGJ1bmNoIG9mIHNwZWNpYWwgcmVnaXN0ZXJzIGF0IGZpeGVkCiAJICAgbG9jYXRpb25zIGluIGNvbW1vbiBtZW1vcnkgKi8KQEAgLTIxNiw4ICsyMjgsMTEgQEAKIAl9CiAKIAlzeXMgPSBzZXRfY2lzX21hcChzLCAwLCBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCkpOwotCWlmICghc3lzKQorCWlmICghc3lzKSB7CisJCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm47IC8qIEZJWE1FOiBFcnJvciAqLworCX0KIAogCXdyaXRlYihmbGFncywgc3lzK0NJU1JFR19JQ1RSTDApOwogCXdyaXRlYihhZGRyICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjApOwpAQCAtMjM5LDggKzI1NCwxMSBAQAogCWNhcmRfb2Zmc2V0ID0gYWRkciAmIH4ocy0+bWFwX3NpemUtMSk7CiAJd2hpbGUgKGxlbikgewogCSAgICBzeXMgPSBzZXRfY2lzX21hcChzLCBjYXJkX29mZnNldCwgZmxhZ3MpOwotCSAgICBpZiAoIXN5cykKKwkgICAgaWYgKCFzeXMpIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiY291bGQgbm90IG1hcCBtZW1vcnlcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybjsgLyogRklYTUU6IGVycm9yICovCisJICAgIH0KIAogCSAgICBlbmQgPSBzeXMgKyBzLT5tYXBfc2l6ZTsKIAkgICAgc3lzID0gc3lzICsgKGFkZHIgJiAocy0+bWFwX3NpemUtMSkpOwpAQCAtMjUzLDggKzI3MSw4IEBACiAJICAgIGFkZHIgPSAwOwogCX0KICAgICB9CisgICAgbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogfQotRVhQT1JUX1NZTUJPTChwY21jaWFfd3JpdGVfY2lzX21lbSk7CiAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNjUsMzIgKzI4MywzNiBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHZvaWQgcmVhZF9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLCB1X2ludCBhZGRyLAotCQkJICAgc2l6ZV90IGxlbiwgdm9pZCAqcHRyKQorc3RhdGljIGludCByZWFkX2Npc19jYWNoZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsIHVfaW50IGFkZHIsCisJCQlzaXplX3QgbGVuLCB2b2lkICpwdHIpCiB7Ci0gICAgc3RydWN0IGNpc19jYWNoZV9lbnRyeSAqY2lzOwotICAgIGludCByZXQ7CisJc3RydWN0IGNpc19jYWNoZV9lbnRyeSAqY2lzOworCWludCByZXQgPSAwOwogCi0gICAgaWYgKHMtPmZha2VfY2lzKSB7Ci0JaWYgKHMtPmZha2VfY2lzX2xlbiA+PSBhZGRyK2xlbikKLQkgICAgbWVtY3B5KHB0ciwgcy0+ZmFrZV9jaXMrYWRkciwgbGVuKTsKLQllbHNlCi0JICAgIG1lbXNldChwdHIsIDB4ZmYsIGxlbik7Ci0JcmV0dXJuOwotICAgIH0KKwlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGNpcywgJnMtPmNpc19jYWNoZSwgbm9kZSkgewotCWlmIChjaXMtPmFkZHIgPT0gYWRkciAmJiBjaXMtPmxlbiA9PSBsZW4gJiYgY2lzLT5hdHRyID09IGF0dHIpIHsKLQkgICAgbWVtY3B5KHB0ciwgY2lzLT5jYWNoZSwgbGVuKTsKLQkgICAgcmV0dXJuOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJaWYgKHMtPmZha2VfY2lzKSB7CisJCWlmIChzLT5mYWtlX2Npc19sZW4gPj0gYWRkcitsZW4pCisJCQltZW1jcHkocHRyLCBzLT5mYWtlX2NpcythZGRyLCBsZW4pOworCQllbHNlIHsKKwkJCW1lbXNldChwdHIsIDB4ZmYsIGxlbik7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwkJcmV0dXJuIHJldDsKIAl9Ci0gICAgfQogCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLSAgICBpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKLQlyZXQgPSByZWFkX2NiX21lbShzLCBhdHRyLCBhZGRyLCBsZW4sIHB0cik7Ci0gICAgZWxzZQotI2VuZGlmCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaXMsICZzLT5jaXNfY2FjaGUsIG5vZGUpIHsKKwkJaWYgKGNpcy0+YWRkciA9PSBhZGRyICYmIGNpcy0+bGVuID09IGxlbiAmJiBjaXMtPmF0dHIgPT0gYXR0cikgeworCQkJbWVtY3B5KHB0ciwgY2lzLT5jYWNoZSwgbGVuKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwogCXJldCA9IHBjbWNpYV9yZWFkX2Npc19tZW0ocywgYXR0ciwgYWRkciwgbGVuLCBwdHIpOwogCiAJaWYgKHJldCA9PSAwKSB7CkBAIC0zMDEsOSArMzIzLDEyIEBACiAJCQljaXMtPmxlbiA9IGxlbjsKIAkJCWNpcy0+YXR0ciA9IGF0dHI7CiAJCQltZW1jcHkoY2lzLT5jYWNoZSwgcHRyLCBsZW4pOworCQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJCWxpc3RfYWRkKCZjaXMtPm5vZGUsICZzLT5jaXNfY2FjaGUpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQl9CiAJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zMTEsMzIgKzMzNiwzNSBAQAogewogCXN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaXMsICZzLT5jaXNfY2FjaGUsIG5vZGUpCiAJCWlmIChjaXMtPmFkZHIgPT0gYWRkciAmJiBjaXMtPmxlbiA9PSBsZW4gJiYgY2lzLT5hdHRyID09IGF0dHIpIHsKIAkJCWxpc3RfZGVsKCZjaXMtPm5vZGUpOwogCQkJa2ZyZWUoY2lzKTsKIAkJCWJyZWFrOwogCQl9CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogfQogCisvKioKKyAqIGRlc3Ryb3lfY2lzX2NhY2hlKCkgLSBkZXN0cm95IHRoZSBDSVMgY2FjaGUKKyAqIEBzOgkJcGNtY2lhX3NvY2tldCBmb3Igd2hpY2ggQ0lTIGNhY2hlIHNoYWxsIGJlIGRlc3Ryb3llZAorICoKKyAqIFRoaXMgZGVzdHJveXMgdGhlIENJUyBjYWNoZSBidXQga2VlcHMgYW55IGZha2UgQ0lTIGFsaXZlLiBNdXN0IGJlCisgKiBjYWxsZWQgd2l0aCBvcHNfbXV0ZXggaGVsZC4KKyAqLworCiB2b2lkIGRlc3Ryb3lfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpuOworCXN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBuLCAmcy0+Y2lzX2NhY2hlKSB7Ci0JCXN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpcyA9IGxpc3RfZW50cnkobCwgc3RydWN0IGNpc19jYWNoZV9lbnRyeSwgbm9kZSk7Ci0KKwkJY2lzID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5LCBub2RlKTsKIAkJbGlzdF9kZWwoJmNpcy0+bm9kZSk7CiAJCWtmcmVlKGNpcyk7CiAJfQotCi0JLyoKLQkgKiBJZiB0aGVyZSB3YXMgYSBmYWtlIENJUywgZGVzdHJveSB0aGF0IGFzIHdlbGwuCi0JICovCi0Ja2ZyZWUocy0+ZmFrZV9jaXMpOwotCXMtPmZha2VfY2lzID0gTlVMTDsKIH0KLUVYUE9SVF9TWU1CT0woZGVzdHJveV9jaXNfY2FjaGUpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMzQ5LDYgKzM3NywxMCBAQAogewogCXN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKIAljaGFyICpidWY7CisJaW50IHJldDsKKworCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWJ1ZiA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpIHsKQEAgLTM2MSwxNCArMzkzLDkgQEAKIAogCQlpZiAobGVuID4gMjU2KQogCQkJbGVuID0gMjU2OwotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0JCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKQotCQkJcmVhZF9jYl9tZW0ocywgY2lzLT5hdHRyLCBjaXMtPmFkZHIsIGxlbiwgYnVmKTsKLQkJZWxzZQotI2VuZGlmCi0JCQlwY21jaWFfcmVhZF9jaXNfbWVtKHMsIGNpcy0+YXR0ciwgY2lzLT5hZGRyLCBsZW4sIGJ1Zik7CiAKLQkJaWYgKG1lbWNtcChidWYsIGNpcy0+Y2FjaGUsIGxlbikgIT0gMCkgeworCQlyZXQgPSBwY21jaWFfcmVhZF9jaXNfbWVtKHMsIGNpcy0+YXR0ciwgY2lzLT5hZGRyLCBsZW4sIGJ1Zik7CisJCWlmIChyZXQgfHwgbWVtY21wKGJ1ZiwgY2lzLT5jYWNoZSwgbGVuKSAhPSAwKSB7CiAJCQlrZnJlZShidWYpOwogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC0zOTEsMTcgKzQxOCwyMCBAQAogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgInJlcGxhY2VtZW50IENJUyB0b28gYmlnXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJa2ZyZWUocy0+ZmFrZV9jaXMpOwogCXMtPmZha2VfY2lzID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmIChzLT5mYWtlX2NpcyA9PSBOVUxMKSB7CiAJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHJlcGxhY2UgQ0lTXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcy0+ZmFrZV9jaXNfbGVuID0gbGVuOwogCW1lbWNweShzLT5mYWtlX2NpcywgZGF0YSwgbGVuKTsKKwlkZXZfaW5mbygmcy0+ZGV2LCAiVXNpbmcgcmVwbGFjZW1lbnQgQ0lTXG4iKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXBsYWNlX2Npcyk7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC00MjUsMjUgKzQ1NSwxNiBAQAogewogICAgIGlmICghcykKIAlyZXR1cm4gLUVJTlZBTDsKLSAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKKworICAgIGlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpIHx8IChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkKIAlyZXR1cm4gLUVOT0RFVjsKICAgICB0dXBsZS0+VHVwbGVMaW5rID0gdHVwbGUtPkZsYWdzID0gMDsKLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotICAgIGlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHMtPmNiX2RldjsKLQl1X2ludCBwdHI7Ci0JcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChkZXYtPnN1Ym9yZGluYXRlLCAwLCBQQ0lfQ0FSREJVU19DSVMsICZwdHIpOwotCXR1cGxlLT5DSVNPZmZzZXQgPSBwdHIgJiB+NzsKLQlTUEFDRSh0dXBsZS0+RmxhZ3MpID0gKHB0ciAmIDcpOwotICAgIH0gZWxzZQotI2VuZGlmCi0gICAgewotCS8qIEFzc3VtZSBwcmVzZW5jZSBvZiBhIExPTkdMSU5LX0MgdG8gYWRkcmVzcyAwICovCi0JdHVwbGUtPkNJU09mZnNldCA9IHR1cGxlLT5MaW5rT2Zmc2V0ID0gMDsKLQlTUEFDRSh0dXBsZS0+RmxhZ3MpID0gSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDE7Ci0gICAgfQotICAgIGlmICghKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpICYmIChzLT5mdW5jdGlvbnMgPiAxKSAmJgotCSEodHVwbGUtPkF0dHJpYnV0ZXMgJiBUVVBMRV9SRVRVUk5fQ09NTU9OKSkgeworCisgICAgLyogQXNzdW1lIHByZXNlbmNlIG9mIGEgTE9OR0xJTktfQyB0byBhZGRyZXNzIDAgKi8KKyAgICB0dXBsZS0+Q0lTT2Zmc2V0ID0gdHVwbGUtPkxpbmtPZmZzZXQgPSAwOworICAgIFNQQUNFKHR1cGxlLT5GbGFncykgPSBIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKKworICAgIGlmICgocy0+ZnVuY3Rpb25zID4gMSkgJiYgISh0dXBsZS0+QXR0cmlidXRlcyAmIFRVUExFX1JFVFVSTl9DT01NT04pKSB7CiAJY2lzZGF0YV90IHJlcSA9IHR1cGxlLT5EZXNpcmVkVHVwbGU7CiAJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9MT05HTElOS19NRkM7CiAJaWYgKHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpID09IDApIHsKQEAgLTQ1NiwxNyArNDc3LDE5IEBACiAgICAgfQogICAgIHJldHVybiBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKTsKIH0KLUVYUE9SVF9TWU1CT0wocGNjYXJkX2dldF9maXJzdF90dXBsZSk7CiAKIHN0YXRpYyBpbnQgZm9sbG93X2xpbmsoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKQogewogICAgIHVfY2hhciBsaW5rWzVdOwogICAgIHVfaW50IG9mczsKKyAgICBpbnQgcmV0OwogCiAgICAgaWYgKE1GQ19GTih0dXBsZS0+RmxhZ3MpKSB7CiAJLyogR2V0IGluZGlyZWN0IGxpbmsgZnJvbSB0aGUgTUZDIHR1cGxlICovCi0JcmVhZF9jaXNfY2FjaGUocywgTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpLAorCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIExJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSwKIAkJICAgICAgIHR1cGxlLT5MaW5rT2Zmc2V0LCA1LCBsaW5rKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CiAJb2ZzID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGxpbmsgKyAxKTsKIAlTUEFDRSh0dXBsZS0+RmxhZ3MpID0gKGxpbmtbMF0gPT0gQ0lTVFBMX01GQ19BVFRSKTsKIAkvKiBNb3ZlIHRvIHRoZSBuZXh0IGluZGlyZWN0IGxpbmsgKi8KQEAgLTQ3OSwxMCArNTAyLDEyIEBACiAgICAgfSBlbHNlIHsKIAlyZXR1cm4gLTE7CiAgICAgfQotICAgIGlmICghKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpICYmIFNQQUNFKHR1cGxlLT5GbGFncykpIHsKKyAgICBpZiAoU1BBQ0UodHVwbGUtPkZsYWdzKSkgewogCS8qIFRoaXMgaXMgdWdseSwgYnV0IGEgY29tbW9uIENJUyBlcnJvciBpcyB0byBjb2RlIHRoZSBsb25nCiAJICAgbGluayBvZmZzZXQgaW5jb3JyZWN0bHksIHNvIHdlIGNoZWNrIHRoZSByaWdodCBzcG90Li4uICovCi0JcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwgb2ZzLCA1LCBsaW5rKTsKKwlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLCBvZnMsIDUsIGxpbmspOworCWlmIChyZXQpCisJCXJldHVybiAtMTsKIAlpZiAoKGxpbmtbMF0gPT0gQ0lTVFBMX0xJTktUQVJHRVQpICYmIChsaW5rWzFdID49IDMpICYmCiAJICAgIChzdHJuY21wKGxpbmsrMiwgIkNJUyIsIDMpID09IDApKQogCSAgICByZXR1cm4gb2ZzOwpAQCAtNDkwLDcgKzUxNSw5IEBACiAJLyogVGhlbiwgd2UgdHJ5IHRoZSB3cm9uZyBzcG90Li4uICovCiAJb2ZzID0gb2ZzID4+IDE7CiAgICAgfQotICAgIHJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSwgbGluayk7CisgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwgb2ZzLCA1LCBsaW5rKTsKKyAgICBpZiAocmV0KQorCSAgICByZXR1cm4gLTE7CiAgICAgaWYgKChsaW5rWzBdID09IENJU1RQTF9MSU5LVEFSR0VUKSAmJiAobGlua1sxXSA+PSAzKSAmJgogCShzdHJuY21wKGxpbmsrMiwgIkNJUyIsIDMpID09IDApKQogCXJldHVybiBvZnM7CkBAIC01MDIsMTAgKzUyOSwxMSBAQAogewogICAgIHVfY2hhciBsaW5rWzJdLCB0bXA7CiAgICAgaW50IG9mcywgaSwgYXR0cjsKKyAgICBpbnQgcmV0OwogCiAgICAgaWYgKCFzKQogCXJldHVybiAtRUlOVkFMOwotICAgIGlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorICAgIGlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpIHx8IChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkKIAlyZXR1cm4gLUVOT0RFVjsKIAogICAgIGxpbmtbMV0gPSB0dXBsZS0+VHVwbGVMaW5rOwpAQCAtNTE2LDcgKzU0NCw5IEBACiAJaWYgKGxpbmtbMV0gPT0gMHhmZikgewogCSAgICBsaW5rWzBdID0gQ0lTVFBMX0VORDsKIAl9IGVsc2UgewotCSAgICByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMsIDIsIGxpbmspOworCSAgICByZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMsIDIsIGxpbmspOworCSAgICBpZiAocmV0KQorCQkgICAgcmV0dXJuIC0xOwogCSAgICBpZiAobGlua1swXSA9PSBDSVNUUExfTlVMTCkgewogCQlvZnMrKzsgY29udGludWU7CiAJICAgIH0KQEAgLTUyOCw3ICs1NTgsOSBAQAogCSAgICBpZiAob2ZzIDwgMCkKIAkJcmV0dXJuIC1FTk9TUEM7CiAJICAgIGF0dHIgPSBTUEFDRSh0dXBsZS0+RmxhZ3MpOwotCSAgICByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMsIDIsIGxpbmspOworCSAgICByZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMsIDIsIGxpbmspOworCSAgICBpZiAocmV0KQorCQkgICAgcmV0dXJuIC0xOwogCX0KIAogCS8qIElzIHRoaXMgYSBsaW5rIHR1cGxlPyAgTWFrZSBhIG5vdGUgb2YgaXQgKi8KQEAgLTU0MiwxMiArNTc0LDE2IEBACiAJICAgIGNhc2UgQ0lTVFBMX0xPTkdMSU5LX0E6CiAJCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOwogCQlMSU5LX1NQQUNFKHR1cGxlLT5GbGFncykgPSBhdHRyIHwgSVNfQVRUUjsKLQkJcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzKzIsIDQsICZ0dXBsZS0+TGlua09mZnNldCk7CisJCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLCA0LCAmdHVwbGUtPkxpbmtPZmZzZXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC0xOwogCQlicmVhazsKIAkgICAgY2FzZSBDSVNUUExfTE9OR0xJTktfQzoKIAkJSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDE7CiAJCUxJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSA9IGF0dHIgJiB+SVNfQVRUUjsKLQkJcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzKzIsIDQsICZ0dXBsZS0+TGlua09mZnNldCk7CisJCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLCA0LCAmdHVwbGUtPkxpbmtPZmZzZXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC0xOwogCQlicmVhazsKIAkgICAgY2FzZSBDSVNUUExfSU5ESVJFQ1Q6CiAJCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOwpAQCAtNTU5LDcgKzU5NSw5IEBACiAJCUxJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSA9IGF0dHI7CiAJCWlmIChmdW5jdGlvbiA9PSBCSU5EX0ZOX0FMTCkgewogCQkgICAgLyogRm9sbG93IGFsbCB0aGUgTUZDIGxpbmtzICovCi0JCSAgICByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgMSwgJnRtcCk7CisJCSAgICByZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgMSwgJnRtcCk7CisJCSAgICBpZiAocmV0KQorCQkJICAgIHJldHVybiAtMTsKIAkJICAgIE1GQ19GTih0dXBsZS0+RmxhZ3MpID0gdG1wOwogCQl9IGVsc2UgewogCQkgICAgLyogRm9sbG93IGV4YWN0bHkgb25lIG9mIHRoZSBsaW5rcyAqLwpAQCAtNTkyLDcgKzYzMCw2IEBACiAgICAgdHVwbGUtPkNJU09mZnNldCA9IG9mcyArIDI7CiAgICAgcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF9nZXRfbmV4dF90dXBsZSk7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC02MDEsNiArNjM4LDcgQEAKIGludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKQogewogICAgIHVfaW50IGxlbjsKKyAgICBpbnQgcmV0OwogCiAgICAgaWYgKCFzKQogCXJldHVybiAtRUlOVkFMOwpAQCAtNjExLDEyICs2NDksMTMgQEAKICAgICB0dXBsZS0+VHVwbGVEYXRhTGVuID0gdHVwbGUtPlR1cGxlTGluazsKICAgICBpZiAobGVuID09IDApCiAJcmV0dXJuIDA7Ci0gICAgcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwKKyAgICByZXQgPSByZWFkX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLAogCQkgICB0dXBsZS0+Q0lTT2Zmc2V0ICsgdHVwbGUtPlR1cGxlT2Zmc2V0LAogCQkgICBfTUlOKGxlbiwgdHVwbGUtPlR1cGxlRGF0YU1heCksIHR1cGxlLT5UdXBsZURhdGEpOworICAgIGlmIChyZXQpCisJICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wocGNjYXJkX2dldF90dXBsZV9kYXRhKTsKIAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTExOTAsMTE5ICsxMjI5LDYgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotCi1zdGF0aWMgaW50IHBhcnNlX2Jhcih0dXBsZV90ICp0dXBsZSwgY2lzdHBsX2Jhcl90ICpiYXIpCi17Ci0gICAgdV9jaGFyICpwOwotICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgNikKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7Ci0gICAgYmFyLT5hdHRyID0gKnA7Ci0gICAgcCArPSAyOwotICAgIGJhci0+c2l6ZSA9IGdldF91bmFsaWduZWRfbGUzMihwKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwYXJzZV9jb25maWdfY2IodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9jb25maWdfdCAqY29uZmlnKQotewotICAgIHVfY2hhciAqcDsKLQotICAgIHAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKLSAgICBpZiAoKCpwICE9IDMpIHx8ICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgNikpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgY29uZmlnLT5sYXN0X2lkeCA9ICooKytwKTsKLSAgICBwKys7Ci0gICAgY29uZmlnLT5iYXNlID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHApOwotICAgIGNvbmZpZy0+c3VidHVwbGVzID0gdHVwbGUtPlR1cGxlRGF0YUxlbiAtIDY7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2VfY2Z0YWJsZV9lbnRyeV9jYih0dXBsZV90ICp0dXBsZSwKLQkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X2NiX3QgKmVudHJ5KQotewotICAgIHVfY2hhciAqcCwgKnEsIGZlYXR1cmVzOwotCi0gICAgcCA9IHR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwotICAgIGVudHJ5LT5pbmRleCA9ICpwICYgMHgzZjsKLSAgICBlbnRyeS0+ZmxhZ3MgPSAwOwotICAgIGlmICgqcCAmIDB4NDApCi0JZW50cnktPmZsYWdzIHw9IENJU1RQTF9DRlRBQkxFX0RFRkFVTFQ7Ci0KLSAgICAvKiBQcm9jZXNzIG9wdGlvbmFsIGZlYXR1cmVzICovCi0gICAgaWYgKCsrcCA9PSBxKQotCSAgICByZXR1cm4gLUVJTlZBTDsKLSAgICBmZWF0dXJlcyA9ICpwOyBwKys7Ci0KLSAgICAvKiBQb3dlciBvcHRpb25zICovCi0gICAgaWYgKChmZWF0dXJlcyAmIDMpID4gMCkgewotCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZjYyk7Ci0JaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAgfSBlbHNlCi0JZW50cnktPnZjYy5wcmVzZW50ID0gMDsKLSAgICBpZiAoKGZlYXR1cmVzICYgMykgPiAxKSB7Ci0JcCA9IHBhcnNlX3Bvd2VyKHAsIHEsICZlbnRyeS0+dnBwMSk7Ci0JaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAgfSBlbHNlCi0JZW50cnktPnZwcDEucHJlc2VudCA9IDA7Ci0gICAgaWYgKChmZWF0dXJlcyAmIDMpID4gMikgewotCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZwcDIpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT52cHAyLnByZXNlbnQgPSAwOwotCi0gICAgLyogSS9PIHdpbmRvdyBvcHRpb25zICovCi0gICAgaWYgKGZlYXR1cmVzICYgMHgwOCkgewotCWlmIChwID09IHEpCi0JCXJldHVybiAtRUlOVkFMOwotCWVudHJ5LT5pbyA9ICpwOyBwKys7Ci0gICAgfSBlbHNlCi0JZW50cnktPmlvID0gMDsKLQotICAgIC8qIEludGVycnVwdCBvcHRpb25zICovCi0gICAgaWYgKGZlYXR1cmVzICYgMHgxMCkgewotCXAgPSBwYXJzZV9pcnEocCwgcSwgJmVudHJ5LT5pcnEpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT5pcnEuSVJRSW5mbzEgPSAwOwotCi0gICAgaWYgKGZlYXR1cmVzICYgMHgyMCkgewotCWlmIChwID09IHEpCi0JCXJldHVybiAtRUlOVkFMOwotCWVudHJ5LT5tZW0gPSAqcDsgcCsrOwotICAgIH0gZWxzZQotCWVudHJ5LT5tZW0gPSAwOwotCi0gICAgLyogTWlzYyBmZWF0dXJlcyAqLwotICAgIGlmIChmZWF0dXJlcyAmIDB4ODApIHsKLQlpZiAocCA9PSBxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbnRyeS0+ZmxhZ3MgfD0gKCpwIDw8IDgpOwotCWlmICgqcCAmIDB4ODApIHsKLQkgICAgaWYgKCsrcCA9PSBxKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0JICAgIGVudHJ5LT5mbGFncyB8PSAoKnAgPDwgMTYpOwotCX0KLQl3aGlsZSAoKnAgJiAweDgwKQotCSAgICBpZiAoKytwID09IHEpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKLQlwKys7Ci0gICAgfQotCi0gICAgZW50cnktPnN1YnR1cGxlcyA9IHEtcDsKLQotICAgIHJldHVybiAwOwotfQotCi0jZW5kaWYKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KIHN0YXRpYyBpbnQgcGFyc2VfZGV2aWNlX2dlbyh0dXBsZV90ICp0dXBsZSwgY2lzdHBsX2RldmljZV9nZW9fdCAqZ2VvKQogewogICAgIHVfY2hhciAqcCwgKnE7CkBAIC0xNDA0LDE3ICsxMzMwLDYgQEAKICAgICBjYXNlIENJU1RQTF9ERVZJQ0VfQToKIAlyZXQgPSBwYXJzZV9kZXZpY2UodHVwbGUsICZwYXJzZS0+ZGV2aWNlKTsKIAlicmVhazsKLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotICAgIGNhc2UgQ0lTVFBMX0JBUjoKLQlyZXQgPSBwYXJzZV9iYXIodHVwbGUsICZwYXJzZS0+YmFyKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9DT05GSUdfQ0I6Ci0JcmV0ID0gcGFyc2VfY29uZmlnX2NiKHR1cGxlLCAmcGFyc2UtPmNvbmZpZyk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQjoKLQlyZXQgPSBwYXJzZV9jZnRhYmxlX2VudHJ5X2NiKHR1cGxlLCAmcGFyc2UtPmNmdGFibGVfZW50cnlfY2IpOwotCWJyZWFrOwotI2VuZGlmCiAgICAgY2FzZSBDSVNUUExfQ0hFQ0tTVU06CiAJcmV0ID0gcGFyc2VfY2hlY2tzdW0odHVwbGUsICZwYXJzZS0+Y2hlY2tzdW0pOwogCWJyZWFrOwpAQCAtMTUxMyw3ICsxNDI4LDYgQEAKICAgICBrZnJlZShidWYpOwogICAgIHJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF9yZWFkX3R1cGxlKTsKIAogCiAvKioKQEAgLTE1NzMsODQgKzE0ODcsMjM4IEBACiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChwY2NhcmRfbG9vcF90dXBsZSk7CiAKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBUaGlzIHRyaWVzIHRvIGRldGVybWluZSBpZiBhIGNhcmQgaGFzIGEgc2Vuc2libGUgQ0lTLiAgSXQgcmV0dXJucwotICAgIHRoZSBudW1iZXIgb2YgdHVwbGVzIGluIHRoZSBDSVMsIG9yIDAgaWYgdGhlIENJUyBsb29rcyBiYWQuICBUaGUKLSAgICBjaGVja3MgaW5jbHVkZSBtYWtpbmcgc3VyZSBzZXZlcmFsIGNyaXRpY2FsIHR1cGxlcyBhcmUgcHJlc2VudCBhbmQKLSAgICB2YWxpZDsgc2VlaW5nIGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgdHVwbGVzIGlzIHJlYXNvbmFibGU7IGFuZAotICAgIGxvb2tpbmcgZm9yIHR1cGxlcyB0aGF0IHVzZSByZXNlcnZlZCBjb2Rlcy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KKy8qKgorICogcGNjYXJkX3ZhbGlkYXRlX2NpcygpIC0gY2hlY2sgd2hldGhlciBjYXJkIGhhcyBhIHNlbnNpYmxlIENJUworICogQHM6CQl0aGUgc3RydWN0IHBjbWNpYV9zb2NrZXQgd2UgYXJlIHRvIGNoZWNrCisgKiBAaW5mbzoJcmV0dXJucyB0aGUgbnVtYmVyIG9mIHR1cGxlcyBpbiB0aGUgKHZhbGlkKSBDSVMsIG9yIDAKKyAqCisgKiBUaGlzIHRyaWVzIHRvIGRldGVybWluZSBpZiBhIGNhcmQgaGFzIGEgc2Vuc2libGUgQ0lTLiAgSW4gQGluZm8sIGl0CisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgdHVwbGVzIGluIHRoZSBDSVMsIG9yIDAgaWYgdGhlIENJUyBsb29rcyBiYWQuIFRoZQorICogY2hlY2tzIGluY2x1ZGUgbWFraW5nIHN1cmUgc2V2ZXJhbCBjcml0aWNhbCB0dXBsZXMgYXJlIHByZXNlbnQgYW5kCisgKiB2YWxpZDsgc2VlaW5nIGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgdHVwbGVzIGlzIHJlYXNvbmFibGU7IGFuZAorICogbG9va2luZyBmb3IgdHVwbGVzIHRoYXQgdXNlIHJlc2VydmVkIGNvZGVzLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLwogaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqaW5mbykKIHsKLSAgICB0dXBsZV90ICp0dXBsZTsKLSAgICBjaXNwYXJzZV90ICpwOwotICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7Ci0gICAgaW50IHJldCwgcmVzZXJ2ZWQsIGRldl9vayA9IDAsIGlkZW50X29rID0gMDsKKwl0dXBsZV90ICp0dXBsZTsKKwljaXNwYXJzZV90ICpwOworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJaW50IHJldCwgcmVzZXJ2ZWQsIGRldl9vayA9IDAsIGlkZW50X29rID0gMDsKIAotICAgIGlmICghcykKLQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXMpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgdHVwbGUgPSBrbWFsbG9jKHNpemVvZigqdHVwbGUpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAodHVwbGUgPT0gTlVMTCkgewotCSAgICBkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byB2YWxpZGF0ZSBDSVNcbiIpOwotCSAgICByZXR1cm4gLUVOT01FTTsKLSAgICB9Ci0gICAgcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKHAgPT0gTlVMTCkgewotCSAgICBrZnJlZSh0dXBsZSk7Ci0JICAgIGRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHZhbGlkYXRlIENJU1xuIik7Ci0JICAgIHJldHVybiAtRU5PTUVNOwotICAgIH0KKwkvKiBXZSBkbyBub3Qgd2FudCB0byB2YWxpZGF0ZSB0aGUgQ0lTIGNhY2hlLi4uICovCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlkZXN0cm95X2Npc19jYWNoZShzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKLSAgICBjb3VudCA9IHJlc2VydmVkID0gMDsKLSAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOwotICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7Ci0gICAgaWYgKHJldCAhPSAwKQotCWdvdG8gZG9uZTsKKwl0dXBsZSA9IGttYWxsb2Moc2l6ZW9mKCp0dXBsZSksIEdGUF9LRVJORUwpOworCWlmICh0dXBsZSA9PSBOVUxMKSB7CisJCWRldl93YXJuKCZzLT5kZXYsICJubyBtZW1vcnkgdG8gdmFsaWRhdGUgQ0lTXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCWlmIChwID09IE5VTEwpIHsKKwkJa2ZyZWUodHVwbGUpOworCQlkZXZfd2Fybigmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHZhbGlkYXRlIENJU1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAotICAgIC8qIEZpcnN0IHR1cGxlIHNob3VsZCBiZSBERVZJQ0U7IHdlIHNob3VsZCByZWFsbHkgaGF2ZSBlaXRoZXIgdGhhdAotICAgICAgIG9yIGEgQ0ZUQUJMRV9FTlRSWSBvZiBzb21lIHNvcnQgKi8KLSAgICBpZiAoKHR1cGxlLT5UdXBsZUNvZGUgPT0gQ0lTVFBMX0RFVklDRSkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZLCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0IsIHApID09IDApKQotCWRldl9vaysrOwotCi0gICAgLyogQWxsIGNhcmRzIHNob3VsZCBoYXZlIGEgTUFORklEIHR1cGxlLCBhbmQvb3IgYSBWRVJTXzEgb3IgVkVSU18yCi0gICAgICAgdHVwbGUsIGZvciBjYXJkIGlkZW50aWZpY2F0aW9uLiAgQ2VydGFpbiBvbGQgRC1MaW5rIGFuZCBMaW5rc3lzCi0gICAgICAgY2FyZHMgaGF2ZSBvbmx5IGEgYnJva2VuIFZFUlNfMiB0dXBsZTsgaGVuY2UgdGhlIGJvZ3VzIHRlc3QuICovCi0gICAgaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKLQlpZGVudF9vaysrOwotCi0gICAgaWYgKCFkZXZfb2sgJiYgIWlkZW50X29rKQotCWdvdG8gZG9uZTsKLQotICAgIGZvciAoY291bnQgPSAxOyBjb3VudCA8IE1BWF9UVVBMRVM7IGNvdW50KyspIHsKLQlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgQklORF9GTl9BTEwsIHR1cGxlKTsKKwljb3VudCA9IHJlc2VydmVkID0gMDsKKwl0dXBsZS0+RGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOworCXR1cGxlLT5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKKwlyZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7CiAJaWYgKHJldCAhPSAwKQotCQlicmVhazsKLQlpZiAoKCh0dXBsZS0+VHVwbGVDb2RlID4gMHgyMykgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweDQwKSkgfHwKLQkgICAgKCh0dXBsZS0+VHVwbGVDb2RlID4gMHg0NykgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweDgwKSkgfHwKLQkgICAgKCh0dXBsZS0+VHVwbGVDb2RlID4gMHg5MCkgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweGZmKSkpCi0JICAgIHJlc2VydmVkKys7Ci0gICAgfQotICAgIGlmICgoY291bnQgPT0gTUFYX1RVUExFUykgfHwgKHJlc2VydmVkID4gNSkgfHwKLQkoKCFkZXZfb2sgfHwgIWlkZW50X29rKSAmJiAoY291bnQgPiAxMCkpKQotCWNvdW50ID0gMDsKKwkJZ290byBkb25lOworCisJLyogRmlyc3QgdHVwbGUgc2hvdWxkIGJlIERFVklDRTsgd2Ugc2hvdWxkIHJlYWxseSBoYXZlIGVpdGhlciB0aGF0CisJICAgb3IgYSBDRlRBQkxFX0VOVFJZIG9mIHNvbWUgc29ydCAqLworCWlmICgodHVwbGUtPlR1cGxlQ29kZSA9PSBDSVNUUExfREVWSUNFKSB8fAorCSAgICAoIXBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkpIHx8CisJICAgICghcGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSkpCisJCWRldl9vaysrOworCisJLyogQWxsIGNhcmRzIHNob3VsZCBoYXZlIGEgTUFORklEIHR1cGxlLCBhbmQvb3IgYSBWRVJTXzEgb3IgVkVSU18yCisJICAgdHVwbGUsIGZvciBjYXJkIGlkZW50aWZpY2F0aW9uLiAgQ2VydGFpbiBvbGQgRC1MaW5rIGFuZCBMaW5rc3lzCisJICAgY2FyZHMgaGF2ZSBvbmx5IGEgYnJva2VuIFZFUlNfMiB0dXBsZTsgaGVuY2UgdGhlIGJvZ3VzIHRlc3QuICovCisJaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKKwkgICAgKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLCBwKSA9PSAwKSB8fAorCSAgICAocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzIsIHApICE9IC1FTk9TUEMpKQorCQlpZGVudF9vaysrOworCisJaWYgKCFkZXZfb2sgJiYgIWlkZW50X29rKQorCQlnb3RvIGRvbmU7CisKKwlmb3IgKGNvdW50ID0gMTsgY291bnQgPCBNQVhfVFVQTEVTOyBjb3VudCsrKSB7CisJCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKwkJaWYgKCgodHVwbGUtPlR1cGxlQ29kZSA+IDB4MjMpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg0MCkpIHx8CisJCSAgICAoKHR1cGxlLT5UdXBsZUNvZGUgPiAweDQ3KSAmJiAodHVwbGUtPlR1cGxlQ29kZSA8IDB4ODApKSB8fAorCQkgICAgKCh0dXBsZS0+VHVwbGVDb2RlID4gMHg5MCkgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweGZmKSkpCisJCQlyZXNlcnZlZCsrOworCX0KKwlpZiAoKGNvdW50ID09IE1BWF9UVVBMRVMpIHx8IChyZXNlcnZlZCA+IDUpIHx8CisJCSgoIWRldl9vayB8fCAhaWRlbnRfb2spICYmIChjb3VudCA+IDEwKSkpCisJCWNvdW50ID0gMDsKKworCXJldCA9IDA7CiAKIGRvbmU6Ci0gICAgaWYgKGluZm8pCi0JICAgICppbmZvID0gY291bnQ7Ci0gICAga2ZyZWUodHVwbGUpOwotICAgIGtmcmVlKHApOwotICAgIHJldHVybiAwOworCS8qIGludmFsaWRhdGUgQ0lTIGNhY2hlIG9uIGZhaWx1cmUgKi8KKwlpZiAoIWRldl9vayB8fCAhaWRlbnRfb2sgfHwgIWNvdW50KSB7CisJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJCWRlc3Ryb3lfY2lzX2NhY2hlKHMpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCXJldCA9IC1FSU87CisJfQorCisJaWYgKGluZm8pCisJCSppbmZvID0gY291bnQ7CisJa2ZyZWUodHVwbGUpOworCWtmcmVlKHApOworCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF92YWxpZGF0ZV9jaXMpOworCisKKyNkZWZpbmUgdG9fc29ja2V0KF9kZXYpIGNvbnRhaW5lcl9vZihfZGV2LCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCwgZGV2KQorCitzdGF0aWMgc3NpemVfdCBwY2NhcmRfZXh0cmFjdF9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGNoYXIgKmJ1ZiwKKwkJCQkgIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwl0dXBsZV90IHR1cGxlOworCWludCBzdGF0dXMsIGk7CisJbG9mZl90IHBvaW50ZXIgPSAwOworCXNzaXplX3QgcmV0ID0gMDsKKwl1X2NoYXIgKnR1cGxlYnVmZmVyOworCXVfY2hhciAqdGVtcGJ1ZmZlcjsKKworCXR1cGxlYnVmZmVyID0ga21hbGxvYyhzaXplb2YodV9jaGFyKSAqIDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0dXBsZWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0ZW1wYnVmZmVyID0ga21hbGxvYyhzaXplb2YodV9jaGFyKSAqIDI1OCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZW1wYnVmZmVyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV90dXBsZTsKKwl9CisKKwltZW1zZXQoJnR1cGxlLCAwLCBzaXplb2YodHVwbGVfdCkpOworCisJdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9MSU5LIHwgVFVQTEVfUkVUVVJOX0NPTU1PTjsKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCisJc3RhdHVzID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJnR1cGxlKTsKKwl3aGlsZSAoIXN0YXR1cykgeworCQl0dXBsZS5UdXBsZURhdGEgPSB0dXBsZWJ1ZmZlcjsKKwkJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OworCQltZW1zZXQodHVwbGVidWZmZXIsIDAsIHNpemVvZih1X2NoYXIpICogMjU1KTsKKworCQlzdGF0dXMgPSBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocywgJnR1cGxlKTsKKwkJaWYgKHN0YXR1cykKKwkJCWJyZWFrOworCisJCWlmIChvZmYgPCAocG9pbnRlciArIDIgKyB0dXBsZS5UdXBsZURhdGFMZW4pKSB7CisJCQl0ZW1wYnVmZmVyWzBdID0gdHVwbGUuVHVwbGVDb2RlICYgMHhmZjsKKwkJCXRlbXBidWZmZXJbMV0gPSB0dXBsZS5UdXBsZUxpbmsgJiAweGZmOworCQkJZm9yIChpID0gMDsgaSA8IHR1cGxlLlR1cGxlRGF0YUxlbjsgaSsrKQorCQkJCXRlbXBidWZmZXJbaSArIDJdID0gdHVwbGVidWZmZXJbaV0gJiAweGZmOworCisJCQlmb3IgKGkgPSAwOyBpIDwgKDIgKyB0dXBsZS5UdXBsZURhdGFMZW4pOyBpKyspIHsKKwkJCQlpZiAoKChpICsgcG9pbnRlcikgPj0gb2ZmKSAmJgorCQkJCSAgICAoaSArIHBvaW50ZXIpIDwgKG9mZiArIGNvdW50KSkgeworCQkJCQlidWZbcmV0XSA9IHRlbXBidWZmZXJbaV07CisJCQkJCXJldCsrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXBvaW50ZXIgKz0gMiArIHR1cGxlLlR1cGxlRGF0YUxlbjsKKworCQlpZiAocG9pbnRlciA+PSAob2ZmICsgY291bnQpKQorCQkJYnJlYWs7CisKKwkJaWYgKHR1cGxlLlR1cGxlQ29kZSA9PSBDSVNUUExfRU5EKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJnR1cGxlKTsKKwl9CisKKwlrZnJlZSh0ZW1wYnVmZmVyKTsKKyBmcmVlX3R1cGxlOgorCWtmcmVlKHR1cGxlYnVmZmVyKTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHNzaXplX3QgcGNjYXJkX3Nob3dfY2lzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IDB4MjAwOworCisJaWYgKG9mZiA+PSBzaXplKQorCQljb3VudCA9IDA7CisJZWxzZSB7CisJCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOworCQl1bnNpZ25lZCBpbnQgY2hhaW5zOworCisJCWlmIChvZmYgKyBjb3VudCA+IHNpemUpCisJCQljb3VudCA9IHNpemUgLSBvZmY7CisKKwkJcyA9IHRvX3NvY2tldChjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOworCisJCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZjaGFpbnMpKQorCQkJcmV0dXJuIC1FSU87CisJCWlmICghY2hhaW5zKQorCQkJcmV0dXJuIC1FTk9EQVRBOworCisJCWNvdW50ID0gcGNjYXJkX2V4dHJhY3RfY2lzKHMsIGJ1Ziwgb2ZmLCBjb3VudCk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9jaXMoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQkJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOworCWludCBlcnJvcjsKKworCXMgPSB0b19zb2NrZXQoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKKworCWlmIChvZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvdW50ID49IENJU1RQTF9NQVhfQ0lTX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyb3IgPSBwY21jaWFfcmVwbGFjZV9jaXMocywgYnVmLCBjb3VudCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gLUVJTzsKKworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RydWN0IGJpbl9hdHRyaWJ1dGUgcGNjYXJkX2Npc19hdHRyID0geworCS5hdHRyID0geyAubmFtZSA9ICJjaXMiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCisJLnNpemUgPSAweDIwMCwKKwkucmVhZCA9IHBjY2FyZF9zaG93X2NpcywKKwkud3JpdGUgPSBwY2NhcmRfc3RvcmVfY2lzLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzLmMgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCmluZGV4IDZkNmY4MmIuLmU2NzllNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY3MuYwpAQCAtMTQwLDE5ICsxNDAsMTMgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBnZXRfZGV2aWNlKCZza3QtPmRldik7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwotCXNrdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmICghdHJ5X21vZHVsZV9nZXQoc2t0LT5vd25lcikpIHsKLQkJcHV0X2RldmljZSgmc2t0LT5kZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIHNrdDsKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfc29ja2V0KTsKIAogCiB2b2lkIHBjbWNpYV9wdXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7Ci0JbW9kdWxlX3B1dChza3QtPm93bmVyKTsKIAlwdXRfZGV2aWNlKCZza3QtPmRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9wdXRfc29ja2V0KTsKQEAgLTE4MSw4ICsxNzUsNiBAQAogCiAJZGV2X2RiZygmc29ja2V0LT5kZXYsICJwY21jaWFfcmVnaXN0ZXJfc29ja2V0KDB4JXApXG4iLCBzb2NrZXQtPm9wcyk7CiAKLQlzcGluX2xvY2tfaW5pdCgmc29ja2V0LT5sb2NrKTsKLQogCS8qIHRyeSB0byBvYnRhaW4gYSBzb2NrZXQgbnVtYmVyIFt5ZXMsIGl0IGdldHMgdWdseSBpZiB3ZQogCSAqIHJlZ2lzdGVyIG1vcmUgdGhhbiAyXnNpemVvZih1bnNpZ25lZCBpbnQpIHBjbWNpYQogCSAqIHNvY2tldHMuLi4gYnV0IHRoZSBzb2NrZXQgbnVtYmVyIGlzIGRlcHJlY2F0ZWQKQEAgLTIyOCwxMCArMjIwLDEzIEBACiAJaW5pdF9jb21wbGV0aW9uKCZzb2NrZXQtPnNvY2tldF9yZWxlYXNlZCk7CiAJaW5pdF9jb21wbGV0aW9uKCZzb2NrZXQtPnRocmVhZF9kb25lKTsKIAltdXRleF9pbml0KCZzb2NrZXQtPnNrdF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmc29ja2V0LT5vcHNfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZzb2NrZXQtPnRocmVhZF9sb2NrKTsKIAogCWlmIChzb2NrZXQtPnJlc291cmNlX29wcy0+aW5pdCkgeworCQltdXRleF9sb2NrKCZzb2NrZXQtPm9wc19tdXRleCk7CiAJCXJldCA9IHNvY2tldC0+cmVzb3VyY2Vfb3BzLT5pbml0KHNvY2tldCk7CisJCW11dGV4X3VubG9jaygmc29ja2V0LT5vcHNfbXV0ZXgpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAJfQpAQCAtMjgzLDE1ICsyNzgsMTcgQEAKIAlpZiAoc29ja2V0LT50aHJlYWQpCiAJCWt0aHJlYWRfc3RvcChzb2NrZXQtPnRocmVhZCk7CiAKLQlyZWxlYXNlX2Npc19tZW0oc29ja2V0KTsKLQogCS8qIHJlbW92ZSBmcm9tIG91ciBvd24gbGlzdCAqLwogCWRvd25fd3JpdGUoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7CiAJbGlzdF9kZWwoJnNvY2tldC0+c29ja2V0X2xpc3QpOwogCXVwX3dyaXRlKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwogCiAJLyogd2FpdCBmb3Igc3lzZnMgdG8gZHJvcCBhbGwgcmVmZXJlbmNlcyAqLwotCXJlbGVhc2VfcmVzb3VyY2VfZGIoc29ja2V0KTsKKwlpZiAoc29ja2V0LT5yZXNvdXJjZV9vcHMtPmV4aXQpIHsKKwkJbXV0ZXhfbG9jaygmc29ja2V0LT5vcHNfbXV0ZXgpOworCQlzb2NrZXQtPnJlc291cmNlX29wcy0+ZXhpdChzb2NrZXQpOworCQltdXRleF91bmxvY2soJnNvY2tldC0+b3BzX211dGV4KTsKKwl9CiAJd2FpdF9mb3JfY29tcGxldGlvbigmc29ja2V0LT5zb2NrZXRfcmVsZWFzZWQpOwogfSAvKiBwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KTsKQEAgLTMyOCw3ICszMjUsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKKwlpZiAoKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpICYmIChldmVudCAhPSBDU19FVkVOVF9DQVJEX1JFTU9WQUwpKQogCQlyZXR1cm4gMDsKIAogCWRldl9kYmcoJnMtPmRldiwgInNlbmRfZXZlbnQoZXZlbnQgJWQsIHByaSAlZCwgY2FsbGJhY2sgMHglcClcbiIsCkBAIC0zNDYsMTMgKzM0Myw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgc29ja2V0X3JlbW92ZV9kcml2ZXJzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JZGV2X2RiZygmc2t0LT5kZXYsICJyZW1vdmVfZHJpdmVyc1xuIik7Ci0KLQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMLCBDU19FVkVOVF9QUklfSElHSCk7Ci19Ci0KIHN0YXRpYyBpbnQgc29ja2V0X3Jlc2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7CiAJaW50IHN0YXR1cywgaTsKQEAgLTM5NSw3ICszODUsOSBAQAogCiAJZGV2X2RiZygmcy0+ZGV2LCAic2h1dGRvd25cbiIpOwogCi0Jc29ja2V0X3JlbW92ZV9kcml2ZXJzKHMpOworCXNlbmRfZXZlbnQocywgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMLCBDU19FVkVOVF9QUklfSElHSCk7CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXMtPnN0YXRlICY9IFNPQ0tFVF9JTlVTRSB8IFNPQ0tFVF9QUkVTRU5UOwogCW1zbGVlcChzaHV0ZG93bl9kZWxheSAqIDEwKTsKIAlzLT5zdGF0ZSAmPSBTT0NLRVRfSU5VU0U7CkBAIC00MDYsMTEgKzM5OCwyMSBAQAogCXMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KTsKIAlzLT5pcnEuQXNzaWduZWRJUlEgPSBzLT5pcnEuQ29uZmlnID0gMDsKIAlzLT5sb2NrX2NvdW50ID0gMDsKLQlkZXN0cm95X2Npc19jYWNoZShzKTsKKwlrZnJlZShzLT5mYWtlX2Npcyk7CisJcy0+ZmFrZV9jaXMgPSBOVUxMOworCXMtPmZ1bmN0aW9ucyA9IDA7CisKKwkvKiBGcm9tIGhlcmUgb24gd2UgY2FuIGJlIHN1cmUgdGhhdCBvbmx5IHdlICh0aGF0IGlzLCB0aGUKKwkgKiBwY2NhcmRkIHRocmVhZCkgYWNjZXNzZXMgdGhpcyBzb2NrZXQsIGFuZCBhbGwgKDE2LWJpdCkKKwkgKiBQQ01DSUEgaW50ZXJhY3Rpb25zIGFyZSBnb25lLiBUaGVyZWZvcmUsIHJlbGVhc2UKKwkgKiBvcHNfbXV0ZXggc28gdGhhdCB3ZSBkb24ndCBnZXQgYSBzeXNmcy1yZWxhdGVkIGxvY2tkZXAKKwkgKiB3YXJuaW5nLgorCSAqLworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwogI2lmZGVmIENPTkZJR19DQVJEQlVTCiAJY2JfZnJlZShzKTsKICNlbmRpZgotCXMtPmZ1bmN0aW9ucyA9IDA7CiAKIAkvKiBnaXZlIHNvY2tldCBzb21lIHRpbWUgdG8gcG93ZXIgZG93biAqLwogCW1zbGVlcCgxMDApOwpAQCAtNDIxLDcgKzQyMyw3IEBACiAJCQkgICAiKioqIERBTkdFUiAqKiogdW5hYmxlIHRvIHJlbW92ZSBzb2NrZXQgcG93ZXJcbiIpOwogCX0KIAotCWNzX3NvY2tldF9wdXQocyk7CisJcy0+c3RhdGUgJj0gflNPQ0tFVF9JTlVTRTsKIH0KIAogc3RhdGljIGludCBzb2NrZXRfc2V0dXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwgaW50IGluaXRpYWxfZGVsYXkpCkBAIC00NjAsNyArNDYyLDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXNrdC0+c3RhdGUgfD0gU09DS0VUX0NBUkRCVVM7Ci0JfQorCX0gZWxzZQorCQlza3QtPnN0YXRlICY9IH5TT0NLRVRfQ0FSREJVUzsKIAogCS8qCiAJICogRGVjb2RlIHRoZSBjYXJkIHZvbHRhZ2UgcmVxdWlyZW1lbnRzLCBhbmQgYXBwbHkgcG93ZXIgdG8gdGhlIGNhcmQuCkBAIC01MDksOCArNTEyLDEyIEBACiAKIAlkZXZfZGJnKCZza3QtPmRldiwgImluc2VydFxuIik7CiAKLQlpZiAoIWNzX3NvY2tldF9nZXQoc2t0KSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0lOVVNFKSB7CisJCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc2t0LT5zdGF0ZSB8PSBTT0NLRVRfSU5VU0U7CiAKIAlyZXQgPSBzb2NrZXRfc2V0dXAoc2t0LCBzZXR1cF9kZWxheSk7CiAJaWYgKHJldCA9PSAwKSB7CkBAIC01MjgsOSArNTM1LDExIEBACiAJCX0KICNlbmRpZgogCQlkZXZfZGJnKCZza3QtPmRldiwgImluc2VydCBkb25lXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAKIAkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLCBDU19FVkVOVF9QUklfTE9XKTsKIAl9IGVsc2UgeworCQltdXRleF91bmxvY2soJnNrdC0+b3BzX211dGV4KTsKIAkJc29ja2V0X3NodXRkb3duKHNrdCk7CiAJfQogCkBAIC01NDIsNTggKzU1MSw2NiBAQAogCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpCiAJCXJldHVybiAtRUJVU1k7CiAKKwltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CisJc2t0LT5zdXNwZW5kZWRfc3RhdGUgPSBza3QtPnN0YXRlOworCiAJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1BNX1NVU1BFTkQsIENTX0VWRU5UX1BSSV9MT1cpOwogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPnNldF9zb2NrZXQoc2t0LCAmc2t0LT5zb2NrZXQpOwogCWlmIChza3QtPm9wcy0+c3VzcGVuZCkKIAkJc2t0LT5vcHMtPnN1c3BlbmQoc2t0KTsKIAlza3QtPnN0YXRlIHw9IFNPQ0tFVF9TVVNQRU5EOwotCisJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc29ja2V0X2Vhcmx5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogeworCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKIAlza3QtPnNvY2tldCA9IGRlYWRfc29ja2V0OwogCXNrdC0+b3BzLT5pbml0KHNrdCk7CiAJc2t0LT5vcHMtPnNldF9zb2NrZXQoc2t0LCAmc2t0LT5zb2NrZXQpOwogCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpCiAJCXNrdC0+cmVzdW1lX3N0YXR1cyA9IHNvY2tldF9zZXR1cChza3QsIHJlc3VtZV9kZWxheSk7CisJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc29ja2V0X2xhdGVfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7Ci0JaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQlza3QtPnN0YXRlICY9IH5TT0NLRVRfU1VTUEVORDsKKwltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CisJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX1NVU1BFTkQ7CisJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CisKKwlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorCQlyZXR1cm4gc29ja2V0X2luc2VydChza3QpOworCisJaWYgKHNrdC0+cmVzdW1lX3N0YXR1cykgeworCQlzb2NrZXRfc2h1dGRvd24oc2t0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNrdC0+c3VzcGVuZGVkX3N0YXRlICE9IHNrdC0+c3RhdGUpIHsKKwkJZGV2X2RiZygmc2t0LT5kZXYsCisJCQkic3VzcGVuZCBzdGF0ZSAweCV4ICE9IHJlc3VtZSBzdGF0ZSAweCV4XG4iLAorCQkJc2t0LT5zdXNwZW5kZWRfc3RhdGUsIHNrdC0+c3RhdGUpOworCisJCXNvY2tldF9zaHV0ZG93bihza3QpOwogCQlyZXR1cm4gc29ja2V0X2luc2VydChza3QpOwogCX0KIAotCWlmIChza3QtPnJlc3VtZV9zdGF0dXMgPT0gMCkgewotCQkvKgotCQkgKiBGSVhNRTogbmVlZCBhIGJldHRlciBjaGVjayBoZXJlIGZvciBjYXJkYnVzIGNhcmRzLgotCQkgKi8KLQkJaWYgKHZlcmlmeV9jaXNfY2FjaGUoc2t0KSAhPSAwKSB7Ci0JCQlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtaXNtYXRjaCAtIGRpZmZlcmVudCBjYXJkXG4iKTsKLQkJCXNvY2tldF9yZW1vdmVfZHJpdmVycyhza3QpOwotCQkJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsKLQkJCS8qCi0JCQkgKiBXb3JrYXJvdW5kOiBnaXZlIERTIHRpbWUgdG8gc2NoZWR1bGUgcmVtb3ZhbC4KLQkJCSAqIFJlbW92ZSBtZSBvbmNlIHRoZSAxMDBtcyBkZWxheSBpcyBlbGltaW5hdGVkCi0JCQkgKiBpbiBkcy5jCi0JCQkgKi8KLQkJCW1zbGVlcCgyMDApOwotCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLCBDU19FVkVOVF9QUklfTE9XKTsKLQkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJnNrdC0+ZGV2LCAiY2lzIG1hdGNoZXMgY2FjaGVcbiIpOwotCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1BNX1JFU1VNRSwgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCX0KLQl9IGVsc2UgewotCQlzb2NrZXRfc2h1dGRvd24oc2t0KTsKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKKwkJLyogV2UgY2FuJ3QgYmUgc3VyZSB0aGUgQ2FyZEJ1cyBjYXJkIGlzIHRoZSBzYW1lCisJCSAqIGFzIHRoZSBvbmUgcHJldmlvdXNseSBpbnNlcnRlZC4gVGhlcmVmb3JlLCByZW1vdmUKKwkJICogYW5kIHJlLWFkZC4uLiAqLworCQljYl9mcmVlKHNrdCk7CisJCWNiX2FsbG9jKHNrdCk7CisJCXJldHVybiAwOwogCX0KKyNlbmRpZgogCi0Jc2t0LT5zdGF0ZSAmPSB+U09DS0VUX1NVU1BFTkQ7Ci0KKwlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfUE1fUkVTVU1FLCBDU19FVkVOVF9QUklfTE9XKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjcyLDIwICs2ODksMjYgQEAKIAogCWNvbXBsZXRlKCZza3QtPnRocmVhZF9kb25lKTsKIAorCS8qIHdhaXQgZm9yIHVzZXJzcGFjZSB0byBjYXRjaCB1cCAqLworCW1zbGVlcCgyNTApOworCiAJc2V0X2ZyZWV6YWJsZSgpOwogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdW5zaWduZWQgaW50IGV2ZW50czsKKwkJdW5zaWduZWQgaW50IHN5c2ZzX2V2ZW50czsKIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZza3QtPnRocmVhZF9sb2NrLCBmbGFncyk7CiAJCWV2ZW50cyA9IHNrdC0+dGhyZWFkX2V2ZW50czsKIAkJc2t0LT50aHJlYWRfZXZlbnRzID0gMDsKKwkJc3lzZnNfZXZlbnRzID0gc2t0LT5zeXNmc19ldmVudHM7CisJCXNrdC0+c3lzZnNfZXZlbnRzID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2t0LT50aHJlYWRfbG9jaywgZmxhZ3MpOwogCisJCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAkJaWYgKGV2ZW50cykgewotCQkJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCQkJaWYgKGV2ZW50cyAmIFNTX0RFVEVDVCkKIAkJCQlzb2NrZXRfZGV0ZWN0X2NoYW5nZShza3QpOwogCQkJaWYgKGV2ZW50cyAmIFNTX0JBVERFQUQpCkBAIC02OTQsMTAgKzcxNywzOSBAQAogCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9CQVRURVJZX0xPVywgQ1NfRVZFTlRfUFJJX0xPVyk7CiAJCQlpZiAoZXZlbnRzICYgU1NfUkVBRFkpCiAJCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1JFQURZX0NIQU5HRSwgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCQltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKLQkJCWNvbnRpbnVlOwogCQl9CiAKKwkJaWYgKHN5c2ZzX2V2ZW50cykgeworCQkJaWYgKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfRUpFQ1QpCisJCQkJc29ja2V0X3JlbW92ZShza3QpOworCQkJaWYgKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfSU5TRVJUKQorCQkJCXNvY2tldF9pbnNlcnQoc2t0KTsKKwkJCWlmICgoc3lzZnNfZXZlbnRzICYgUENNQ0lBX1VFVkVOVF9SRVNVTUUpICYmCisJCQkJIShza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7CisJCQkJcmV0ID0gc29ja2V0X3Jlc3VtZShza3QpOworCQkJCWlmICghcmV0ICYmIHNrdC0+Y2FsbGJhY2spCisJCQkJCXNrdC0+Y2FsbGJhY2stPnJlc3VtZShza3QpOworCQkJfQorCQkJaWYgKChzeXNmc19ldmVudHMgJiBQQ01DSUFfVUVWRU5UX1NVU1BFTkQpICYmCisJCQkJIShza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7CisJCQkJaWYgKHNrdC0+Y2FsbGJhY2spCisJCQkJCXJldCA9IHNrdC0+Y2FsbGJhY2stPnN1c3BlbmQoc2t0KTsKKwkJCQllbHNlCisJCQkJCXJldCA9IDA7CisJCQkJaWYgKCFyZXQpCisJCQkJCXNvY2tldF9zdXNwZW5kKHNrdCk7CisJCQl9CisJCQlpZiAoKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSkgJiYKKwkJCQkhKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpIHsKKwkJCQlpZiAoIXJldCAmJiBza3QtPmNhbGxiYWNrKQorCQkJCQlza3QtPmNhbGxiYWNrLT5yZXF1ZXJ5KHNrdCk7CisJCQl9CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7CisKKwkJaWYgKGV2ZW50cyB8fCBzeXNmc19ldmVudHMpCisJCQljb250aW51ZTsKKwogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CiAKQEAgLTcwNyw2ICs3NTksMTMgQEAKIAkvKiBtYWtlIHN1cmUgd2UgYXJlIHJ1bm5pbmcgYmVmb3JlIHdlIGV4aXQgKi8KIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCisJLyogc2h1dCBkb3duIHNvY2tldCwgaWYgYSBkZXZpY2UgaXMgc3RpbGwgcHJlc2VudCAqLworCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpIHsKKwkJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOworCQlzb2NrZXRfcmVtb3ZlKHNrdCk7CisJCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOworCX0KKwogCS8qIHJlbW92ZSBmcm9tIHRoZSBkZXZpY2UgY29yZSAqLwogCXBjY2FyZF9zeXNmc19yZW1vdmVfc29ja2V0KCZza3QtPmRldik7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnNrdC0+ZGV2KTsKQEAgLTczMiw2ICs3OTEsMzEgQEAKIH0gLyogcGNtY2lhX3BhcnNlX2V2ZW50cyAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcGFyc2VfZXZlbnRzKTsKIAorLyoqCisgKiBwY21jaWFfcGFyc2VfdWV2ZW50cygpIC0gdGVsbCBwY2NhcmRkIHRvIGlzc3VlIG1hbnVhbCBjb21tYW5kcworICogQHM6CQl0aGUgUENNQ0lBIHNvY2tldCB3ZSB3YW4ndCB0byBjb21tYW5kCisgKiBAZXZlbnRzOglldmVudHMgdG8gcGFzcyB0byBwY2NhcmRkCisgKgorICogdXNlcnNwYWNlLWlzc3VlZCBpbnNlcnQsIGVqZWN0LCBzdXNwZW5kIGFuZCByZXN1bWUgY29tbWFuZHMgbXVzdCBiZQorICogaGFuZGxlZCBieSBwY2NhcmRkIHRvIGF2b2lkIGFueSBzeXNmcy1yZWxhdGVkIGRlYWRsb2Nrcy4gVmFsaWQgZXZlbnRzCisgKiBhcmUgUENNQ0lBX1VFVkVOVF9FSkVDVCAoZm9yIGVqZWN0KSwgUENNQ0lBX1VFVkVOVF9fSU5TRVJUIChmb3IgaW5zZXJ0KSwKKyAqIFBDTUNJQV9VRVZFTlRfUkVTVU1FIChmb3IgcmVzdW1lKSwgUENNQ0lBX1VFVkVOVF9TVVNQRU5EIChmb3Igc3VzcGVuZCkKKyAqIGFuZCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkgKGZvciByZS1xdWVyeWluZyB0aGUgUENNQ0lBIGNhcmQpLgorICovCit2b2lkIHBjbWNpYV9wYXJzZV91ZXZlbnRzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1X2ludCBldmVudHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkZXZfZGJnKCZzLT5kZXYsICJwYXJzZV91ZXZlbnRzOiBldmVudHMgJTA4eFxuIiwgZXZlbnRzKTsKKwlpZiAocy0+dGhyZWFkKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT50aHJlYWRfbG9jaywgZmxhZ3MpOworCQlzLT5zeXNmc19ldmVudHMgfD0gZXZlbnRzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT50aHJlYWRfbG9jaywgZmxhZ3MpOworCisJCXdha2VfdXBfcHJvY2VzcyhzLT50aHJlYWQpOworCX0KK30KK0VYUE9SVF9TWU1CT0wocGNtY2lhX3BhcnNlX3VldmVudHMpOworCiAKIC8qIHJlZ2lzdGVyIHBjbWNpYV9jYWxsYmFjayAqLwogaW50IHBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfY2FsbGJhY2sgKmMpCkBAIC03OTYsNyArODgwLDEwIEBACiAJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwsIENTX0VWRU5UX1BSSV9MT1cpOwogCQkJaWYgKHNrdC0+Y2FsbGJhY2spCiAJCQkJc2t0LT5jYWxsYmFjay0+c3VzcGVuZChza3QpOwotCQkJaWYgKHNvY2tldF9yZXNldChza3QpID09IDApIHsKKwkJCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKKwkJCXJldCA9IHNvY2tldF9yZXNldChza3QpOworCQkJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CisJCQlpZiAocmV0ID09IDApIHsKIAkJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQ0FSRF9SRVNFVCwgQ1NfRVZFTlRfUFJJX0xPVyk7CiAJCQkJaWYgKHNrdC0+Y2FsbGJhY2spCiAJCQkJCXNrdC0+Y2FsbGJhY2stPnJlc3VtZShza3QpOwpAQCAtODEyLDEyMSArODk5LDYgQEAKIEVYUE9SVF9TWU1CT0wocGNtY2lhX3Jlc2V0X2NhcmQpOwogCiAKLS8qIFRoZXNlIHNodXQgZG93biBvciB3YWtlIHVwIGEgc29ja2V0LiAgVGhleSBhcmUgc29ydCBvZiB1c2VyCi0gKiBpbml0aWF0ZWQgdmVyc2lvbnMgb2YgdGhlIEFQTSBzdXNwZW5kIGFuZCByZXN1bWUgYWN0aW9ucy4KLSAqLwotaW50IHBjbWNpYV9zdXNwZW5kX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZygmc2t0LT5kZXYsICJzdXNwZW5kaW5nIHNvY2tldFxuIik7Ci0KLQltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0JZG8gewotCQlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCQkJcmV0ID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNrdC0+Y2FsbGJhY2spIHsKLQkJCXJldCA9IHNrdC0+Y2FsbGJhY2stPnN1c3BlbmQoc2t0KTsKLQkJCWlmIChyZXQpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJcmV0ID0gc29ja2V0X3N1c3BlbmQoc2t0KTsKLQl9IHdoaWxlICgwKTsKLQltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19IC8qIHN1c3BlbmRfY2FyZCAqLwotRVhQT1JUX1NZTUJPTChwY21jaWFfc3VzcGVuZF9jYXJkKTsKLQotCi1pbnQgcGNtY2lhX3Jlc3VtZV9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaW50IHJldDsKLQotCWRldl9kYmcoJnNrdC0+ZGV2LCAid2FraW5nIHVwIHNvY2tldFxuIik7Ci0KLQltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0JZG8gewotCQlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCQkJcmV0ID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0ID0gc29ja2V0X3Jlc3VtZShza3QpOwotCQlpZiAoIXJldCAmJiBza3QtPmNhbGxiYWNrKQotCQkJc2t0LT5jYWxsYmFjay0+cmVzdW1lKHNrdCk7Ci0JfSB3aGlsZSAoMCk7Ci0JbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfSAvKiByZXN1bWVfY2FyZCAqLwotRVhQT1JUX1NZTUJPTChwY21jaWFfcmVzdW1lX2NhcmQpOwotCi0KLS8qIFRoZXNlIGhhbmRsZSB1c2VyIHJlcXVlc3RzIHRvIGVqZWN0IG9yIGluc2VydCBhIGNhcmQuICovCi1pbnQgcGNtY2lhX2VqZWN0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZygmc2t0LT5kZXYsICJ1c2VyIGVqZWN0IHJlcXVlc3RcbiIpOwotCi0JbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCWRvIHsKLQkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0ID0gc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0VKRUNUSU9OX1JFUVVFU1QsIENTX0VWRU5UX1BSSV9MT1cpOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCi0JCXNvY2tldF9yZW1vdmUoc2t0KTsKLQkJcmV0ID0gMDsKLQl9IHdoaWxlICgwKTsKLQltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19IC8qIGVqZWN0X2NhcmQgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2VqZWN0X2NhcmQpOwotCi0KLWludCBwY21jaWFfaW5zZXJ0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpbnQgcmV0OwotCi0JZGV2X2RiZygmc2t0LT5kZXYsICJ1c2VyIGluc2VydCByZXF1ZXN0XG4iKTsKLQotCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKLQlkbyB7Ci0JCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzb2NrZXRfaW5zZXJ0KHNrdCkgPT0gLUVOT0RFVikgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldCA9IDA7Ci0JfSB3aGlsZSAoMCk7Ci0JbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfSAvKiBpbnNlcnRfY2FyZCAqLwotRVhQT1JUX1NZTUJPTChwY21jaWFfaW5zZXJ0X2NhcmQpOwotCi0KIHN0YXRpYyBpbnQgcGNtY2lhX3NvY2tldF91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmggYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCmluZGV4IDNiYzAyZDUuLmY5NTg2NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaApAQCAtODcsMzcgKzg3LDExIEBACiAjZGVmaW5lIFNPQ0tFVF9DQVJEQlVTCQkweDgwMDAKICNkZWZpbmUgU09DS0VUX0NBUkRCVVNfQ09ORklHCTB4MTAwMDAKIAotc3RhdGljIGlubGluZSBpbnQgY3Nfc29ja2V0X2dldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQotewotCWludCByZXQ7Ci0KLQlXQVJOX09OKHNrdC0+c3RhdGUgJiBTT0NLRVRfSU5VU0UpOwotCi0JcmV0ID0gdHJ5X21vZHVsZV9nZXQoc2t0LT5vd25lcik7Ci0JaWYgKHJldCkKLQkJc2t0LT5zdGF0ZSB8PSBTT0NLRVRfSU5VU0U7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNzX3NvY2tldF9wdXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9JTlVTRSkgewotCQlza3QtPnN0YXRlICY9IH5TT0NLRVRfSU5VU0U7Ci0JCW1vZHVsZV9wdXQoc2t0LT5vd25lcik7Ci0JfQotfQotCiAKIC8qCiAgKiBTdHVmZiBpbnRlcm5hbCB0byBtb2R1bGUgInBjbWNpYV9jb3JlIjoKICAqLwogCi0vKiBjaXN0cGwuYyAqLwotaW50IHZlcmlmeV9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCi0vKiByc3JjX21nci5jICovCi12b2lkIHJlbGVhc2VfcmVzb3VyY2VfZGIoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCiAvKiBzb2NrZXRfc3lzZnMuYyAqLwogZXh0ZXJuIGludCBwY2NhcmRfc3lzZnNfYWRkX3NvY2tldChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcGNjYXJkX3N5c2ZzX3JlbW92ZV9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KTsKQEAgLTEyNSw4ICs5OSw2IEBACiAvKiBjYXJkYnVzLmMgKi8KIGludCBjYl9hbGxvYyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiB2b2lkIGNiX2ZyZWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotaW50IHJlYWRfY2JfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgc3BhY2UsIHVfaW50IGFkZHIsIHVfaW50IGxlbiwKLQkJdm9pZCAqcHRyKTsKIAogCiAKQEAgLTEzOCw3ICsxMTAsOCBAQAogCXN0cnVjdCBtb2R1bGUJKm93bmVyOwogCWludAkJKCpldmVudCkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkJCSAgZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5KTsKLQl2b2lkCQkoKnJlcXVlcnkpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IG5ld19jaXMpOworCXZvaWQJCSgqcmVxdWVyeSkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlpbnQJCSgqdmFsaWRhdGUpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50ICppKTsKIAlpbnQJCSgqc3VzcGVuZCkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIAlpbnQJCSgqcmVzdW1lKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogfTsKQEAgLTE1MSwxNiArMTI0LDM1IEBACiBpbnQgcGNjYXJkX3JlZ2lzdGVyX3BjbWNpYShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjbWNpYV9jYWxsYmFjayAqYyk7CiBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcGNtY2lhX2dldF9zb2NrZXRfYnlfbnIodW5zaWduZWQgaW50IG5yKTsKIAotaW50IHBjbWNpYV9zdXNwZW5kX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Ci1pbnQgcGNtY2lhX3Jlc3VtZV9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotCi1pbnQgcGNtY2lhX2VqZWN0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Ci1pbnQgcGNtY2lhX2luc2VydF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwordm9pZCBwY21jaWFfcGFyc2VfdWV2ZW50cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0LCB1bnNpZ25lZCBpbnQgZXZlbnRzKTsKKyNkZWZpbmUgUENNQ0lBX1VFVkVOVF9FSkVDVAkweDAwMDEKKyNkZWZpbmUgUENNQ0lBX1VFVkVOVF9JTlNFUlQJMHgwMDAyCisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfU1VTUEVORAkweDAwMDQKKyNkZWZpbmUgUENNQ0lBX1VFVkVOVF9SRVNVTUUJMHgwMDA4CisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfUkVRVUVSWQkweDAwMTAKIAogc3RydWN0IHBjbWNpYV9zb2NrZXQgKnBjbWNpYV9nZXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogdm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIAorLyoKKyAqIFN0dWZmIGludGVybmFsIHRvIG1vZHVsZSAicGNtY2lhIi4KKyAqLworLyogZHMuYyAqLworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwY21jaWFfYnVzX3R5cGU7CisKKy8qIHBjbWNpYV9yZXNvdXJjZS5jICovCitleHRlcm4gaW50IHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKK2V4dGVybiBpbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CitleHRlcm4gc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9tZW1fcmVnaW9uKHVfbG9uZyBiYXNlLAorCQkJCQkgICAgICAgdV9sb25nIG51bSwKKwkJCQkJICAgICAgIHVfbG9uZyBhbGlnbiwKKwkJCQkJICAgICAgIGludCBsb3csCisJCQkJCSAgICAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisKKwogLyogY2lzdHBsLmMgKi8KK2V4dGVybiBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBwY2NhcmRfY2lzX2F0dHI7CisKIGludCBwY21jaWFfcmVhZF9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKIAkJCXVfaW50IGFkZHIsIHVfaW50IGxlbiwgdm9pZCAqcHRyKTsKIHZvaWQgcGNtY2lhX3dyaXRlX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLApAQCAtMTcyLDggKzE2NCw4IEBACiBpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwogaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqY291bnQpOworaW50IHZlcmlmeV9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogCi0vKiBsb29wIG92ZXIgQ0lTIGVudHJpZXMgKi8KIGludCBwY2NhcmRfbG9vcF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAogCQkgICAgICBjaXNkYXRhX3QgY29kZSwgY2lzcGFyc2VfdCAqcGFyc2UsIHZvaWQgKnByaXZfZGF0YSwKIAkJICAgICAgaW50ICgqbG9vcF90dXBsZSkgKHR1cGxlX3QgKnR1cGxlLApAQCAtMTg5LDM1ICsxODEsOCBAQAogaW50IHBjY2FyZF9nZXRfdHVwbGVfZGF0YShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdHVwbGVfdCAqdHVwbGUpOwogCiAKLS8qIHJzcmNfbWdyLmMgKi8KLWludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLXN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfaW9fcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJCQkgICAgICAgaW50IG51bSwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKLQkJCQkgICAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotaW50IHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIHJfZW5kLAotCQkJICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLXN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwKLQkJCQkJdV9sb25nIG51bSwKLQkJCQkJdV9sb25nIGFsaWduLAotCQkJCQlpbnQgbG93LAotCQkJCQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci0KLS8qCi0gKiBTdHVmZiBpbnRlcm5hbCB0byBtb2R1bGUgInBjbWNpYSIuCi0gKi8KLS8qIGRzLmMgKi8KLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOwotCi0vKiBwY21jaWFfcmVzb3VyY2UuYyAqLwotZXh0ZXJuIGludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci0KICNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCiAvKiBkcy5jICovCi1leHRlcm4gc3BpbmxvY2tfdCBwY21jaWFfZGV2X2xpc3RfbG9jazsKLQogZXh0ZXJuIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZ2V0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogZXh0ZXJuIHZvaWQgcGNtY2lhX3B1dF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMgYi9kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODg5Y2YwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jCkBAIC0wLDAgKzEsNjIzIEBACisvKgorICogUENNQ0lBIHNvY2tldCBjb2RlIGZvciB0aGUgQWxjaGVteSBEYjF4eHgvUGIxeHh4IGJvYXJkcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTWFudWVsIExhdXNzIDxtYW51ZWwubGF1c3NAZ21haWwuY29tPgorICoKKyAqLworCisvKiBUaGlzIGlzIGEgZmFpcmx5IGdlbmVyaWMgUENNQ0lBIHNvY2tldCBkcml2ZXIgc3VpdGFibGUgZm9yIHRoZQorICogZm9sbG93aW5nIEFsY2hlbXkgRGV2ZWxvcG1lbnQgYm9hcmRzOgorICogIERiMTAwMCwgRGIvUGIxNTAwLCBEYi9QYjExMDAsIERiL1BiMTU1MCwgRGIvUGIxMjAwLgorICoKKyAqIFRoZSBEYjEwMDAgaXMgdXNlZCBhcyBhIHJlZmVyZW5jZTogIFBlci1zb2NrZXQgY2FyZC0sIGNhcmRkZXRlY3QtIGFuZAorICogIHN0YXR1c2NoYW5nZSBJUlFzIGNvbm5lY3RlZCB0byBTb0MgR1BJT3MsIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgorICogIGJpdHMgYXJyYW5nZWQgaW4gcGVyLXNvY2tldCBncm91cHMgaW4gYW4gZXh0ZXJuYWwgUExELiAgQWxsIGJvYXJkcworICogIGxpc3RlZCBoZXJlIHVzZSB0aGlzIGxheW91dCwgaW5jbHVkaW5nIGJpdCBwb3NpdGlvbnMgYW5kIG1lYW5pbmdzLgorICogIE9mIGNvdXJzZSB0aGVyZSBhcmUgZXhjZXB0aW9ucyBpbiBsYXRlciBib2FyZHM6CisgKgorICoJLSBQYjExMDAvUGIxNTAwOiAgc2luZ2xlIHNvY2tldCBvbmx5OyB2b2x0YWdlIGtleSBiaXRzIFZTIGFyZQorICoJCQkgIGF0IFNUQVRVU1s1OjRdIChpbnN0ZWFkIG9mIFNUQVRVU1sxOjBdKS4KKyAqCS0gQXUxMjAwLWJhc2VkOgkgIGFkZGl0aW9uYWwgY2FyZC1lamVjdCBpcnFzLCBpcnFzIG5vdCBncGlvcyEKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCisjZGVmaW5lIE1FTV9NQVBfU0laRQkweDQwMDAwMAorI2RlZmluZSBJT19NQVBfU0laRQkweDEwMDAKKworc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgeworCXN0cnVjdCBwY21jaWFfc29ja2V0CXNvY2tldDsKKwlpbnQJCW5yOwkJLyogc29ja2V0IG51bWJlciAqLworCXZvaWQJCSp2aXJ0X2lvOworCisJLyogdGhlICJwc2V1ZG8iIGFkZHJlc3NlcyBvZiB0aGUgUENNQ0lBIHNwYWNlLiAqLworCXBoeXNfYWRkcl90CXBoeXNfaW87CisJcGh5c19hZGRyX3QJcGh5c19hdHRyOworCXBoeXNfYWRkcl90CXBoeXNfbWVtOworCisJLyogcHJldmlvdXMgZmxhZ3MgZm9yIHNldF9zb2NrZXQoKSAqLworCXVuc2lnbmVkIGludCBvbGRfZmxhZ3M7CisKKwkvKiBpbnRlcnJ1cHQgc291cmNlczogbGludXggaXJxIG51bWJlcnMhICovCisJaW50CWluc2VydF9pcnE7CS8qIGRlZmF1bHQgY2FyZGRldGVjdCBpcnEgKi8KKwlpbnQJc3RzY2hnX2lycTsJLyogY2FyZC1zdGF0dXMtY2hhbmdlIGlycSAqLworCWludAljYXJkX2lycTsJLyogY2FyZCBpcnEgKi8KKwlpbnQJZWplY3RfaXJxOwkvKiBkYjEyMDAvcGIxMjAwIGhhdmUgdGhlc2UgKi8KKworI2RlZmluZSBCT0FSRF9UWVBFX0RFRkFVTFQJMAkvKiBtb3N0IGJvYXJkcyAqLworI2RlZmluZSBCT0FSRF9UWVBFX0RCMTIwMAkxCS8qIElSUXMgYXJlbid0IGdwaW9zICovCisjZGVmaW5lIEJPQVJEX1RZUEVfUEIxMTAwCTIJLyogVlMgYml0cyBzbGlnaHRseSBkaWZmZXJlbnQgKi8KKwlpbnQJYm9hcmRfdHlwZTsKK307CisKKyNkZWZpbmUgdG9fZGIxeF9zb2NrZXQoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrLCBzb2NrZXQpCisKKy8qIERCL1BCMTIwMDogY2hlY2sgQ1BMRCBTSUdTVEFUVVMgcmVnaXN0ZXIgYml0IDEwLzEyICovCitzdGF0aWMgaW50IGRiMTIwMF9jYXJkX2luc2VydGVkKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrKQoreworCXVuc2lnbmVkIHNob3J0IHNpZ3N0YXQ7CisKKwlzaWdzdGF0ID0gYmNzcl9yZWFkKEJDU1JfU0lHU1RBVCk7CisJcmV0dXJuIHNpZ3N0YXQgJiAxIDw8ICg4ICsgMiAqIHNvY2stPm5yKTsKK30KKworLyogY2FyZGRldGVjdCBncGlvOiBsb3ctYWN0aXZlICovCitzdGF0aWMgaW50IGRiMTAwMF9jYXJkX2luc2VydGVkKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoaXJxX3RvX2dwaW8oc29jay0+aW5zZXJ0X2lycSkpOworfQorCitzdGF0aWMgaW50IGRiMXhfY2FyZF9pbnNlcnRlZChzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaykKK3sKKwlzd2l0Y2ggKHNvY2stPmJvYXJkX3R5cGUpIHsKKwljYXNlIEJPQVJEX1RZUEVfREIxMjAwOgorCQlyZXR1cm4gZGIxMjAwX2NhcmRfaW5zZXJ0ZWQoc29jayk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGRiMTAwMF9jYXJkX2luc2VydGVkKHNvY2spOworCX0KK30KKworLyogU1RTQ0hHIHRlbmRzIHRvIGJvdW5jZSBoZWF2aWx5IHdoZW4gY2FyZHMgYXJlIGluc2VydGVkL2VqZWN0ZWQuCisgKiBUbyBhdm9pZCB0aGlzLCB0aGUgaW50ZXJydXB0IGlzIG5vcm1hbGx5IGRpc2FibGVkIGFuZCBvbmx5IGVuYWJsZWQKKyAqIGFmdGVyIHJlc2V0IHRvIGEgY2FyZCBoYXMgYmVlbiBkZS1hc3NlcnRlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9zdHNjaGcoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2ssIGludCBlbikKK3sKKwlpZiAoc29jay0+c3RzY2hnX2lycSAhPSAtMSkgeworCQlpZiAoZW4pCisJCQllbmFibGVfaXJxKHNvY2stPnN0c2NoZ19pcnEpOworCQllbHNlCisJCQlkaXNhYmxlX2lycShzb2NrLT5zdHNjaGdfaXJxKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYjEwMDBfcGNtY2lhX2NkaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSBkYXRhOworCisJcGNtY2lhX3BhcnNlX2V2ZW50cygmc29jay0+c29ja2V0LCBTU19ERVRFQ1QpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGIxMDAwX3BjbWNpYV9zdHNjaGdpcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IGRhdGE7CisKKwlwY21jaWFfcGFyc2VfZXZlbnRzKCZzb2NrLT5zb2NrZXQsIFNTX1NUU0NIRyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYjEyMDBfcGNtY2lhX2NkaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSBkYXRhOworCisJLyogRGIvUGIxMjAwIGhhdmUgc2VwYXJhdGUgcGVyLXNvY2tldCBpbnNlcnRpb24gYW5kIGVqZWN0aW9uCisJICogaW50ZXJydXB0cyB3aGljaCBzdGF5IGFzc2VydGVkIGFzIGxvbmcgYXMgdGhlIGNhcmQgaXMKKwkgKiBpbnNlcnRlZC9taXNzaW5nLiAgVGhlIG9uZSB3aGljaCBjYXVzZWQgdXMgdG8gYmUgY2FsbGVkCisJICogbmVlZHMgdG8gYmUgZGlzYWJsZWQgYW5kIHRoZSBvdGhlciBvbmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAoaXJxID09IHNvY2stPmluc2VydF9pcnEpIHsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKHNvY2stPmluc2VydF9pcnEpOworCQllbmFibGVfaXJxKHNvY2stPmVqZWN0X2lycSk7CisJfSBlbHNlIHsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKHNvY2stPmVqZWN0X2lycSk7CisJCWVuYWJsZV9pcnEoc29jay0+aW5zZXJ0X2lycSk7CisJfQorCisJcGNtY2lhX3BhcnNlX2V2ZW50cygmc29jay0+c29ja2V0LCBTU19ERVRFQ1QpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX3NldHVwX2lycXMoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2spCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHNvY2stPnN0c2NoZ19pcnEgIT0gLTEpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc29jay0+c3RzY2hnX2lycSwgZGIxMDAwX3BjbWNpYV9zdHNjaGdpcnEsCisJCQkJICAwLCAicGNtY2lhX3N0c2NoZyIsIHNvY2spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEYi9QYjEyMDAgaGF2ZSBzZXBhcmF0ZSBwZXItc29ja2V0IGluc2VydGlvbiBhbmQgZWplY3Rpb24KKwkgKiBpbnRlcnJ1cHRzLCB3aGljaCBzaG91bGQgc2hvdyBlZGdlIGJlaGF2aW91ciBidXQgZG9uJ3QuCisJICogU28gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdW50aWwgYm90aCBpbnNlcnRpb24gYW5kCisJICogZWplY3Rpb24gaGFuZGxlciBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhbmQgdGhlIGN1cnJlbnRseQorCSAqIGFjdGl2ZSBvbmUgZGlzYWJsZWQuCisJICovCisJaWYgKHNvY2stPmJvYXJkX3R5cGUgPT0gQk9BUkRfVFlQRV9EQjEyMDApIHsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCXJldCA9IHJlcXVlc3RfaXJxKHNvY2stPmluc2VydF9pcnEsIGRiMTIwMF9wY21jaWFfY2RpcnEsCisJCQkJICBJUlFGX0RJU0FCTEVELCAicGNtY2lhX2luc2VydCIsIHNvY2spOworCQlpZiAocmV0KQorCQkJZ290byBvdXQxOworCisJCXJldCA9IHJlcXVlc3RfaXJxKHNvY2stPmVqZWN0X2lycSwgZGIxMjAwX3BjbWNpYV9jZGlycSwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJwY21jaWFfZWplY3QiLCBzb2NrKTsKKwkJaWYgKHJldCkgeworCQkJZnJlZV9pcnEoc29jay0+aW5zZXJ0X2lycSwgc29jayk7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQlnb3RvIG91dDE7CisJCX0KKworCQkvKiBkaXNhYmxlIHRoZSBjdXJyZW50bHkgYWN0aXZlIG9uZSAqLworCQlpZiAoZGIxMjAwX2NhcmRfaW5zZXJ0ZWQoc29jaykpCisJCQlkaXNhYmxlX2lycV9ub3N5bmMoc29jay0+aW5zZXJ0X2lycSk7CisJCWVsc2UKKwkJCWRpc2FibGVfaXJxX25vc3luYyhzb2NrLT5lamVjdF9pcnEpOworCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9IGVsc2UgeworCQkvKiBhbGwgb3RoZXIgKG9sZGVyKSBEYjF4MDAgYm9hcmRzIHVzZSBhIEdQSU8gdG8gc2hvdworCQkgKiBjYXJkIGRldGVjdGlvbiBzdGF0dXM6ICB1c2UgYm90aC1lZGdlIHRyaWdnZXJzLgorCQkgKi8KKwkJc2V0X2lycV90eXBlKHNvY2stPmluc2VydF9pcnEsIElSUV9UWVBFX0VER0VfQk9USCk7CisJCXJldCA9IHJlcXVlc3RfaXJxKHNvY2stPmluc2VydF9pcnEsIGRiMTAwMF9wY21jaWFfY2RpcnEsCisJCQkJICAwLCAicGNtY2lhX2NhcmRkZXRlY3QiLCBzb2NrKTsKKworCQlpZiAocmV0KQorCQkJZ290byBvdXQxOworCX0KKworCXJldHVybiAwOwkvKiBhbGwgZG9uZSAqLworCitvdXQxOgorCWlmIChzb2NrLT5zdHNjaGdfaXJxICE9IC0xKQorCQlmcmVlX2lycShzb2NrLT5zdHNjaGdfaXJxLCBzb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRiMXhfcGNtY2lhX2ZyZWVfaXJxcyhzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaykKK3sKKwlpZiAoc29jay0+c3RzY2hnX2lycSAhPSAtMSkKKwkJZnJlZV9pcnEoc29jay0+c3RzY2hnX2lycSwgc29jayk7CisKKwlmcmVlX2lycShzb2NrLT5pbnNlcnRfaXJxLCBzb2NrKTsKKwlpZiAoc29jay0+ZWplY3RfaXJxICE9IC0xKQorCQlmcmVlX2lycShzb2NrLT5lamVjdF9pcnEsIHNvY2spOworfQorCisvKgorICogY29uZmlndXJlIGEgUENNQ0lBIHNvY2tldCBvbiB0aGUgRGIxeDAwIHNlcmllcyBvZiBib2FyZHMgKGFuZAorICogY29tcGF0aWJsZXMpLgorICoKKyAqIDIgZXh0ZXJuYWwgcmVnaXN0ZXJzIGFyZSBpbnZvbHZlZDoKKyAqICAgcGNtY2lhX3N0YXR1cyAob2Zmc2V0IDB4MDQpOiBiaXRzIFswOjEvMjozXTogcmVhZCBjYXJkIHZvbHRhZ2UgaWQKKyAqICAgcGNtY2lhX2NvbnRyb2wob2Zmc2V0IDB4MTApOgorICoJYml0c1swOjFdIHNldCB2Y2MgZm9yIGNhcmQKKyAqCWJpdHNbMjozXSBzZXQgdnBwIGZvciBjYXJkCisgKgliaXQgNDoJZW5hYmxlIGRhdGEgYnVmZmVycworICoJYml0IDc6CXJlc2V0IyBmb3IgY2FyZAorICoJYWRkIDggZm9yIHNlY29uZCBzb2NrZXQuCisgKi8KK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfY29uZmlndXJlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJIHN0cnVjdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b19kYjF4X3NvY2tldChza3QpOworCXVuc2lnbmVkIHNob3J0IGNyX2NsciwgY3Jfc2V0OworCXVuc2lnbmVkIGludCBjaGFuZ2VkOworCWludCB2LCBwLCByZXQ7CisKKwkvKiBjYXJkIHZvbHRhZ2Ugc2V0dXAgKi8KKwljcl9jbHIgPSAoMHhmIDw8IChzb2NrLT5uciAqIDgpKTsgLyogY2xlYXIgdm9sdGFnZSBzZXR0aW5ncyAqLworCWNyX3NldCA9IDA7CisJdiA9IHAgPSByZXQgPSAwOworCisJc3dpdGNoIChzdGF0ZS0+VmNjKSB7CisJY2FzZSA1MDoKKwkJKyt2OworCWNhc2UgMzM6CisJCSsrdjsKKwljYXNlIDA6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYSVkIHVuc3VwcG9ydGVkIFZjYyAlZFxuIiwKKwkJCXNvY2stPm5yLCBzdGF0ZS0+VmNjKTsKKwl9CisKKwlzd2l0Y2ggKHN0YXRlLT5WcHApIHsKKwljYXNlIDEyOgorCQkrK3A7CisJY2FzZSAzMzoKKwljYXNlIDUwOgorCQkrK3A7CisJY2FzZSAwOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWElZCB1bnN1cHBvcnRlZCBWcHAgJWRcbiIsCisJCQlzb2NrLT5uciwgc3RhdGUtPlZwcCk7CisJfQorCisJLyogc2FuaXR5IGNoZWNrOiBWcHAgbXVzdCBiZSAwLCAxMiwgb3IgVmNjICovCisJaWYgKCgoc3RhdGUtPlZjYyA9PSAzMykgJiYgKHN0YXRlLT5WcHAgPT0gNTApKSB8fAorCSAgICAoKHN0YXRlLT5WY2MgPT0gNTApICYmIChzdGF0ZS0+VnBwID09IDMzKSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhJWQgYmFkIFZjYy9WcHAgY29tYm8gKCVkICVkKVxuIiwKKwkJCXNvY2stPm5yLCBzdGF0ZS0+VmNjLCBzdGF0ZS0+VnBwKTsKKwkJdiA9IHAgPSAwOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCS8qIGNyZWF0ZSBuZXcgdm9sdGFnZSBjb2RlICovCisJY3Jfc2V0IHw9ICgodiA8PCAyKSB8IHApIDw8IChzb2NrLT5uciAqIDgpOworCisJY2hhbmdlZCA9IHN0YXRlLT5mbGFncyBeIHNvY2stPm9sZF9mbGFnczsKKworCWlmIChjaGFuZ2VkICYgU1NfUkVTRVQpIHsKKwkJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSB7CisJCQlzZXRfc3RzY2hnKHNvY2ssIDApOworCQkJLyogYXNzZXJ0IHJlc2V0LCBkaXNhYmxlIGlvIGJ1ZmZlcnMgKi8KKwkJCWNyX2NsciB8PSAoMSA8PCAoNyArIChzb2NrLT5uciAqIDgpKSk7CisJCQljcl9jbHIgfD0gKDEgPDwgKDQgKyAoc29jay0+bnIgKiA4KSkpOworCQl9IGVsc2UgeworCQkJLyogZGUtYXNzZXJ0IHJlc2V0LCBlbmFibGUgaW8gYnVmZmVycyAqLworCQkJY3Jfc2V0IHw9IDEgPDwgKDcgKyAoc29jay0+bnIgKiA4KSk7CisJCQljcl9zZXQgfD0gMSA8PCAoNCArIChzb2NrLT5uciAqIDgpKTsKKwkJfQorCX0KKworCS8qIHVwZGF0ZSBQQ01DSUEgY29uZmlndXJhdGlvbiAqLworCWJjc3JfbW9kKEJDU1JfUENNQ0lBLCBjcl9jbHIsIGNyX3NldCk7CisKKwlzb2NrLT5vbGRfZmxhZ3MgPSBzdGF0ZS0+ZmxhZ3M7CisKKwkvKiByZXNldCB3YXMgdGFrZW4gYXdheTogZ2l2ZSBjYXJkIHRpbWUgdG8gaW5pdGlhbGl6ZSBwcm9wZXJseSAqLworCWlmICgoY2hhbmdlZCAmIFNTX1JFU0VUKSAmJiAhKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSkgeworCQltc2xlZXAoNTAwKTsKKwkJc2V0X3N0c2NoZyhzb2NrLCAxKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBWQ0MgYml0cyBhdCBbMzoyXS9bMTE6MTBdICovCisjZGVmaW5lIEdFVF9WQ0MoY3IsIHNvY2tucikJCVwKKwkoKCgoY3IpID4+IDIpID4+ICgoc29ja25yKSAqIDgpKSAmIDMpCisKKy8qIFZTIGJpdHMgYXQgWzA6MV0vWzM6Ml0gKi8KKyNkZWZpbmUgR0VUX1ZTKHNyLCBzb2NrbnIpCQlcCisJKCgoc3IpID4+ICgyICogKHNvY2tucikpKSAmIDMpCisKKy8qIHJlc2V0IGJpdHMgYXQgWzddL1sxNV0gKi8KKyNkZWZpbmUgR0VUX1JFU0VUKGNyLCBzb2NrbnIpCQlcCisJKChjcikgJiAoMSA8PCAoNyArICg4ICogKHNvY2tucikpKSkpCisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IHRvX2RiMXhfc29ja2V0KHNrdCk7CisJdW5zaWduZWQgc2hvcnQgY3IsIHNyOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBkYjF4X2NhcmRfaW5zZXJ0ZWQoc29jaykgPyBTU19ERVRFQ1QgOiAwOworCisJY3IgPSBiY3NyX3JlYWQoQkNTUl9QQ01DSUEpOworCXNyID0gYmNzcl9yZWFkKEJDU1JfU1RBVFVTKTsKKworCS8qIFBCMTEwMC9QQjE1MDA6IHZvbHRhZ2Uga2V5IGJpdHMgYXJlIGF0IFs1OjRdICovCisJaWYgKHNvY2stPmJvYXJkX3R5cGUgPT0gQk9BUkRfVFlQRV9QQjExMDApCisJCXNyID4+PSA0OworCisJLyogZGV0ZXJtaW5lIGNhcmQgdHlwZSAqLworCXN3aXRjaCAoR0VUX1ZTKHNyLCBzb2NrLT5ucikpIHsKKwljYXNlIDA6CisJY2FzZSAyOgorCQlzdGF0dXMgfD0gU1NfM1ZDQVJEOwkvKiAzViBjYXJkICovCisJY2FzZSAzOgorCQlicmVhazsJCQkvKiA1ViBjYXJkOiBzZXQgbm90aGluZyAqLworCWRlZmF1bHQ6CisJCXN0YXR1cyB8PSBTU19YVkNBUkQ7CS8qIHRyZWF0ZWQgYXMgdW5zdXBwb3J0ZWQgaW4gY29yZSAqLworCX0KKworCS8qIGlmIFZjYyBpcyBub3QgemVybywgd2UgaGF2ZSBhcHBsaWVkIHBvd2VyIHRvIGEgY2FyZCAqLworCXN0YXR1cyB8PSBHRVRfVkNDKGNyLCBzb2NrLT5ucikgPyBTU19QT1dFUk9OIDogMDsKKworCS8qIHJlc2V0IGRlLWFzc2VydGVkPyB0aGVuIHdlJ3JlIHJlYWR5ICovCisJc3RhdHVzIHw9IChHRVRfUkVTRVQoY3IsIHNvY2stPm5yKSkgPyBTU19SRUFEWSA6IFNTX1JFU0VUOworCisJKnZhbHVlID0gc3RhdHVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfc29ja19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfc29ja19zdXNwZW5kKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXUxeDAwX3BjbWNpYV9zZXRfaW9fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgIHN0cnVjdCBwY2NhcmRfaW9fbWFwICptYXApCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b19kYjF4X3NvY2tldChza3QpOworCisJbWFwLT5zdGFydCA9ICh1MzIpc29jay0+dmlydF9pbzsKKwltYXAtPnN0b3AgPSBtYXAtPnN0YXJ0ICsgSU9fTUFQX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTF4MDBfcGNtY2lhX3NldF9tZW1fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgICBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IHRvX2RiMXhfc29ja2V0KHNrdCk7CisKKwlpZiAobWFwLT5mbGFncyAmIE1BUF9BVFRSSUIpCisJCW1hcC0+c3RhdGljX3N0YXJ0ID0gc29jay0+cGh5c19hdHRyICsgbWFwLT5jYXJkX3N0YXJ0OworCWVsc2UKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBzb2NrLT5waHlzX21lbSArIG1hcC0+Y2FyZF9zdGFydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIGRiMXhfcGNtY2lhX29wZXJhdGlvbnMgPSB7CisJLmluaXQJCQk9IGRiMXhfcGNtY2lhX3NvY2tfaW5pdCwKKwkuc3VzcGVuZAkJPSBkYjF4X3BjbWNpYV9zb2NrX3N1c3BlbmQsCisJLmdldF9zdGF0dXMJCT0gZGIxeF9wY21jaWFfZ2V0X3N0YXR1cywKKwkuc2V0X3NvY2tldAkJPSBkYjF4X3BjbWNpYV9jb25maWd1cmUsCisJLnNldF9pb19tYXAJCT0gYXUxeDAwX3BjbWNpYV9zZXRfaW9fbWFwLAorCS5zZXRfbWVtX21hcAkJPSBhdTF4MDBfcGNtY2lhX3NldF9tZW1fbWFwLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZGIxeF9wY21jaWFfc29ja2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2s7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCByZXQsIGJpZDsKKworCXNvY2sgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayksIEdGUF9LRVJORUwpOworCWlmICghc29jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzb2NrLT5uciA9IHBkZXYtPmlkOworCisJYmlkID0gQkNTUl9XSE9BTUlfQk9BUkQoYmNzcl9yZWFkKEJDU1JfV0hPQU1JKSk7CisJc3dpdGNoIChiaWQpIHsKKwljYXNlIEJDU1JfV0hPQU1JX1BCMTUwMDoKKwljYXNlIEJDU1JfV0hPQU1JX1BCMTUwMFIyOgorCWNhc2UgQkNTUl9XSE9BTUlfUEIxMTAwOgorCQlzb2NrLT5ib2FyZF90eXBlID0gQk9BUkRfVFlQRV9QQjExMDA7CisJCWJyZWFrOworCWNhc2UgQkNTUl9XSE9BTUlfREIxMDAwIC4uLiBCQ1NSX1dIT0FNSV9QQjE1NTBfU0RSOgorCQlzb2NrLT5ib2FyZF90eXBlID0gQk9BUkRfVFlQRV9ERUZBVUxUOworCQlicmVhazsKKwljYXNlIEJDU1JfV0hPQU1JX1BCMTIwMCAuLi4gQkNTUl9XSE9BTUlfREIxMjAwOgorCQlzb2NrLT5ib2FyZF90eXBlID0gQk9BUkRfVFlQRV9EQjEyMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gImRiMXh4eC1zczogdW5rbm93biBib2FyZCAlZCFcbiIsIGJpZCk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0MDsKKwl9OworCisJLyoKKwkgKiBnYXRoZXIgcmVzb3VyY2VzIG5lY2Vzc2FyeSBhbmQgb3B0aW9uYWwgbmljZS10by1oYXZlcyB0bworCSAqIG9wZXJhdGUgYSBzb2NrZXQ6CisJICogVGhpcyBpbmNsdWRlcyBJUlFzIGZvciBDYXJkZGV0ZWN0aW9uL2VqZWN0aW9uLCB0aGUgY2FyZAorCSAqICBpdHNlbGYgYW5kIG9wdGlvbmFsIHN0YXR1cyBjaGFuZ2UgZGV0ZWN0aW9uLgorCSAqIEFsc28sIHRoZSBtZW1vcnkgYXJlYXMgY292ZXJlZCBieSBhIHNvY2tldC4gIEZvciB0aGVzZQorCSAqICB3ZSByZXF1aXJlIHRoZSAzMmJpdCAicHNldWRvIiBhZGRyZXNzZXMgKHNlZSB0aGUgYXUxMDAwLmgKKwkgKiAgaGVhZGVyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKwkgKi8KKworCS8qIGNhcmQ6IGlycSBhc3NpZ25lZCB0byB0aGUgY2FyZCBpdHNlbGYuICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsICJjYXJkIik7CisJc29jay0+Y2FyZF9pcnEgPSByID8gci0+c3RhcnQgOiAwOworCisJLyogaW5zZXJ0OiBpcnEgd2hpY2ggdHJpZ2dlcnMgb24gY2FyZCBpbnNlcnRpb24vZWplY3Rpb24gKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgImluc2VydCIpOworCXNvY2stPmluc2VydF9pcnEgPSByID8gci0+c3RhcnQgOiAtMTsKKworCS8qIHN0c2NoZzogaXJxIHdoaWNoIHRyaWdnZXIgb24gY2FyZCBzdGF0dXMgY2hhbmdlIChvcHRpb25hbCkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgInN0c2NoZyIpOworCXNvY2stPnN0c2NoZ19pcnEgPSByID8gci0+c3RhcnQgOiAtMTsKKworCS8qIGVqZWN0OiBpcnEgd2hpY2ggdHJpZ2dlcnMgb24gZWplY3Rpb24gKERCMTIwMC9QQjEyMDAgb25seSkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgImVqZWN0Iik7CisJc29jay0+ZWplY3RfaXJxID0gciA/IHItPnN0YXJ0IDogLTE7CisKKwlyZXQgPSAtRU5PREVWOworCisJLyoKKwkgKiBwc2V1ZG8tYXR0cjogIFRoZSAzMmJpdCBhZGRyZXNzIG9mIHRoZSBQQ01DSUEgYXR0cmlidXRlIHNwYWNlCisJICogZm9yIHRoaXMgc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUKKwkgKiByaWdodCkuCisJICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtYXR0ciIpOworCWlmICghcikgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGhhcyBubyAncHNldWRvLWF0dHInIHJlc291cmNlIVxuIiwKKwkJCXNvY2stPm5yKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX2F0dHIgPSByLT5zdGFydDsKKworCS8qCisJICogcHNldWRvLW1lbTogIFRoZSAzMmJpdCBhZGRyZXNzIG9mIHRoZSBQQ01DSUEgbWVtb3J5IHNwYWNlIGZvcgorCSAqIHRoaXMgc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUgcmlnaHQpCisJICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtbWVtIik7CisJaWYgKCFyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhJWQgaGFzIG5vICdwc2V1ZG8tbWVtJyByZXNvdXJjZSFcbiIsCisJCQlzb2NrLT5ucik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19tZW0gPSByLT5zdGFydDsKKworCS8qCisJICogcHNldWRvLWlvOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBJTyBzcGFjZSBmb3IgdGhpcworCSAqIHNvY2tldCAodXN1YWxseSB0aGUgMzZiaXQgYWRkcmVzcyBzaGlmdGVkIDQgdG8gdGhlIHJpZ2h0KS4KKwkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1pbyIpOworCWlmICghcikgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGhhcyBubyAncHNldWRvLWlvJyByZXNvdXJjZSFcbiIsCisJCQlzb2NrLT5ucik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19pbyA9IHItPnN0YXJ0OworCisJLyoKKwkgKiBQQ01DSUEgY2xpZW50IGRyaXZlcnMgdXNlIHRoZSBpbmIvb3V0YiBtYWNyb3MgdG8gYWNjZXNzCisJICogdGhlIElPIHJlZ2lzdGVycy4gIFNpbmNlIG1pcHNfaW9fcG9ydF9iYXNlIGlzIGFkZGVkCisJICogdG8gdGhlIGFjY2VzcyBhZGRyZXNzIG9mIHRoZSBtaXBzIGltcGxlbWVudGF0aW9uIG9mCisJICogaW5iL291dGIsIHdlIG5lZWQgdG8gc3VidHJhY3QgaXQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKKwkgKiB0byBhY2Nlc3MgdGhlIEkvTyBvciBNRU0gYWRkcmVzcyBkaXJlY3RseSwgd2l0aG91dAorCSAqIGdvaW5nIHRocm91Z2ggdGhpcyAibWlwc19pb19wb3J0X2Jhc2UiIG1lY2hhbmlzbS4KKwkgKi8KKwlzb2NrLT52aXJ0X2lvID0gKHZvaWQgKikoaW9yZW1hcChzb2NrLT5waHlzX2lvLCBJT19NQVBfU0laRSkgLQorCQkJCSBtaXBzX2lvX3BvcnRfYmFzZSk7CisKKwlpZiAoIXNvY2stPnZpcnRfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZDogY2Fubm90IHJlbWFwIElPIGFyZWFcbiIsCisJCQlzb2NrLT5ucik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MDsKKwl9CisKKwlzb2NrLT5zb2NrZXQub3BzCT0gJmRiMXhfcGNtY2lhX29wZXJhdGlvbnM7CisJc29jay0+c29ja2V0Lm93bmVyCT0gVEhJU19NT0RVTEU7CisJc29jay0+c29ja2V0LnBjaV9pcnEJPSBzb2NrLT5jYXJkX2lycTsKKwlzb2NrLT5zb2NrZXQuZmVhdHVyZXMJPSBTU19DQVBfU1RBVElDX01BUCB8IFNTX0NBUF9QQ0NBUkQ7CisJc29jay0+c29ja2V0Lm1hcF9zaXplCT0gTUVNX01BUF9TSVpFOworCXNvY2stPnNvY2tldC5pb19vZmZzZXQJPSAodW5zaWduZWQgbG9uZylzb2NrLT52aXJ0X2lvOworCXNvY2stPnNvY2tldC5kZXYucGFyZW50CT0gJnBkZXYtPmRldjsKKwlzb2NrLT5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9zdGF0aWNfb3BzOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc29jayk7CisKKwlyZXQgPSBkYjF4X3BjbWNpYV9zZXR1cF9pcnFzKHNvY2spOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBjYW5ub3Qgc2V0dXAgaW50ZXJydXB0c1xuIiwKKwkJCXNvY2stPm5yKTsKKwkJZ290byBvdXQxOworCX0KKworCXNldF9zdHNjaGcoc29jaywgMCk7CisKKwlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KCZzb2NrLT5zb2NrZXQpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIsIHNvY2stPm5yKTsKKwkJZ290byBvdXQyOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIkFsY2hlbXkgRGIvUGIxeHh4IHBjbWNpYSVkIEAgaW8vYXR0ci9tZW0gJTA5bGx4IgorCQkiKCVwKSAlMDlsbHggJTA5bGx4ICBjYXJkL2luc2VydC9zdHNjaGcvZWplY3QgaXJxcyBAICVkICIKKwkJIiVkICVkICVkXG4iLCBzb2NrLT5uciwgc29jay0+cGh5c19pbywgc29jay0+dmlydF9pbywKKwkJc29jay0+cGh5c19hdHRyLCBzb2NrLT5waHlzX21lbSwgc29jay0+Y2FyZF9pcnEsCisJCXNvY2stPmluc2VydF9pcnEsIHNvY2stPnN0c2NoZ19pcnEsIHNvY2stPmVqZWN0X2lycSk7CisKKwlyZXR1cm4gMDsKKworb3V0MjoKKwlkYjF4X3BjbWNpYV9mcmVlX2lycXMoc29jayk7CitvdXQxOgorCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKK291dDA6CisJa2ZyZWUoc29jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZGIxeF9wY21jaWFfc29ja2V0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkYjF4X3BjbWNpYV9mcmVlX2lycXMoc29jayk7CisJcGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KCZzb2NrLT5zb2NrZXQpOworCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKKwlrZnJlZShzb2NrKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKGRldik7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBkYjF4X3BjbWNpYV9wbW9wcyA9IHsKKwkucmVzdW1lCQk9IGRiMXhfcGNtY2lhX3Jlc3VtZSwKKwkuc3VzcGVuZAk9IGRiMXhfcGNtY2lhX3N1c3BlbmQsCisJLnRoYXcJCT0gZGIxeF9wY21jaWFfcmVzdW1lLAorCS5mcmVlemUJCT0gZGIxeF9wY21jaWFfc3VzcGVuZCwKK307CisKKyNkZWZpbmUgREIxWFhYX1NTX1BNT1BTICZkYjF4X3BjbWNpYV9wbW9wcworCisjZWxzZQorCisjZGVmaW5lIERCMVhYWF9TU19QTU9QUyBOVUxMCisKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYjF4X3BjbWNpYV9zb2NrZXRfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImRiMXh4eF9wY21jaWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gREIxWFhYX1NTX1BNT1BTCisJfSwKKwkucHJvYmUJCT0gZGIxeF9wY21jaWFfc29ja2V0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZGIxeF9wY21jaWFfc29ja2V0X3JlbW92ZSksCit9OworCitpbnQgX19pbml0IGRiMXhfcGNtY2lhX3NvY2tldF9sb2FkKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGIxeF9wY21jaWFfc29ja2V0X2RyaXZlcik7Cit9CisKK3ZvaWQgIF9fZXhpdCBkYjF4X3BjbWNpYV9zb2NrZXRfdW5sb2FkKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRiMXhfcGNtY2lhX3NvY2tldF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChkYjF4X3BjbWNpYV9zb2NrZXRfbG9hZCk7Cittb2R1bGVfZXhpdChkYjF4X3BjbWNpYV9zb2NrZXRfdW5sb2FkKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ01DSUEgU29ja2V0IFNlcnZpY2VzIGZvciBBbGNoZW15IERiL1BiMXgwMCBib2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIk1hbnVlbCBMYXVzcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggMWE0YTNjNC4uMGY5OGJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC00Miw4ICs0Miw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIAotc3BpbmxvY2tfdCBwY21jaWFfZGV2X2xpc3RfbG9jazsKLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIHBjbWNpYV9jaGVja19kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2KQpAQCAtMTI2LDkgKzEyNCw5IEBACiAJZHluaWQtPmlkLmRldmljZV9ubyA9IGRldmljZV9ubzsKIAltZW1jcHkoZHluaWQtPmlkLnByb2RfaWRfaGFzaCwgcHJvZF9pZF9oYXNoLCBzaXplb2YoX191MzIpICogNCk7CiAKLQlzcGluX2xvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF9sb2NrKCZwZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZHluaWQtPm5vZGUsICZwZHJ2LT5keW5pZHMubGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF91bmxvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKIAogCWlmIChnZXRfZHJpdmVyKCZwZHJ2LT5kcnYpKSB7CiAJCXJldHZhbCA9IGRyaXZlcl9hdHRhY2goJnBkcnYtPmRydik7CkBAIC0xNDYsMTIgKzE0NCwxMiBAQAogewogCXN0cnVjdCBwY21jaWFfZHluaWQgKmR5bmlkLCAqbjsKIAotCXNwaW5fbG9jaygmZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfbG9jaygmZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGR5bmlkLCBuLCAmZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgewogCQlsaXN0X2RlbCgmZHluaWQtPm5vZGUpOwogCQlrZnJlZShkeW5pZCk7CiAJfQotCXNwaW5fdW5sb2NrKCZkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF91bmxvY2soJmRydi0+ZHluaWRzLmxvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0xODIsNyArMTgwLDcgQEAKIAkvKiBpbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi8KIAlkcml2ZXItPmRydi5idXMgPSAmcGNtY2lhX2J1c190eXBlOwogCWRyaXZlci0+ZHJ2Lm93bmVyID0gZHJpdmVyLT5vd25lcjsKLQlzcGluX2xvY2tfaW5pdCgmZHJpdmVyLT5keW5pZHMubG9jayk7CisJbXV0ZXhfaW5pdCgmZHJpdmVyLT5keW5pZHMubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRyaXZlci0+ZHluaWRzLmxpc3QpOwogCiAJcHJfZGVidWcoInJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwgZHJpdmVyLT5kcnYubmFtZSk7CkBAIC0yMzksMzAgKzIzNywyMSBAQAogc3RhdGljIHZvaWQgcGNtY2lhX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CisJaW50IGk7CiAJZGV2X2RiZyhkZXYsICJyZWxlYXNpbmcgZGV2aWNlXG4iKTsKIAlwY21jaWFfcHV0X3NvY2tldChwX2Rldi0+c29ja2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlrZnJlZShwX2Rldi0+cHJvZF9pZFtpXSk7CiAJa2ZyZWUocF9kZXYtPmRldm5hbWUpOwogCWtyZWZfcHV0KCZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5yZWYsIHBjbWNpYV9yZWxlYXNlX2Z1bmN0aW9uKTsKIAlrZnJlZShwX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHBjbWNpYV9hZGRfZGV2aWNlX2xhdGVyKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgbWZjKQotewotCWlmICghcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZykgewotCQlkZXZfZGJnKCZzLT5kZXYsICJzY2hlZHVsaW5nIHRvIGFkZCAlcyBzZWNvbmRhcnkiCi0JCSAgICAgICAiIGRldmljZSB0byAlZFxuIiwgbWZjID8gIm1mYyIgOiAicGZjIiwgcy0+c29jayk7Ci0JCXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcgPSAxOwotCQlzLT5wY21jaWFfc3RhdGUubWZjX3BmYyA9IG1mYzsKLQkJc2NoZWR1bGVfd29yaygmcy0+ZGV2aWNlX2FkZCk7Ci0JfQotCXJldHVybjsKLX0KIAogc3RhdGljIGludCBwY21jaWFfZGV2aWNlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwotCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQ7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJY2lzdHBsX2NvbmZpZ190IGNpc19jb25maWc7CiAJaW50IHJldCA9IDA7CkBAIC0yNzUsMTggKzI2NCw2IEBACiAJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKIAlzID0gcF9kZXYtPnNvY2tldDsKIAotCS8qIFRoZSBQQ01DSUEgY29kZSBwYXNzZXMgdGhlIG1hdGNoIGRhdGEgaW4gdmlhIGRldl9zZXRfZHJ2ZGF0YShkZXYpCi0JICogd2hpY2ggaXMgYW4gdWdseSBoYWNrLiBPbmNlIHRoZSBkcml2ZXIgcHJvYmUgaXMgY2FsbGVkIGl0IG1heQotCSAqIGFuZCBvZnRlbiB3aWxsIG92ZXJ3cml0ZSB0aGUgbWF0Y2ggZGF0YSBzbyB3ZSBtdXN0IHNhdmUgaXQgZmlyc3QKLQkgKgotCSAqIGhhbmRsZSBwc2V1ZG8gbXVsdGlmdW5jdGlvbiBkZXZpY2VzOgotCSAqIHRoZXJlIGFyZSBhdCBtb3N0IHR3byBwc2V1ZG8gbXVsdGlmdW5jdGlvbiBkZXZpY2VzLgotCSAqIGlmIHdlJ3JlIG1hdGNoaW5nIGFnYWluc3QgdGhlIGZpcnN0LCBzY2hlZHVsZSBhCi0JICogY2FsbCB3aGljaCB3aWxsIHRoZW4gY2hlY2sgd2hldGhlciB0aGVyZSBhcmUgdHdvCi0JICogcHNldWRvIGRldmljZXMsIGFuZCBpZiBub3QsIGFkZCB0aGUgc2Vjb25kIG9uZS4KLQkgKi8KLQlkaWQgPSBkZXZfZ2V0X2RydmRhdGEoJnBfZGV2LT5kZXYpOwotCiAJZGV2X2RiZyhkZXYsICJ0cnlpbmcgdG8gYmluZCB0byAlc1xuIiwgcF9kcnYtPmRydi5uYW1lKTsKIAogCWlmICgoIXBfZHJ2LT5wcm9iZSkgfHwgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB8fApAQCAtMzE1LDkgKzI5MiwxMSBAQAogCQlnb3RvIHB1dF9tb2R1bGU7CiAJfQogCi0JaWYgKGRpZCAmJiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PKSAmJgorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJaWYgKChzLT5wY21jaWFfc3RhdGUuaGFzX3BmYykgJiYKIAkgICAgKHBfZGV2LT5zb2NrZXQtPmRldmljZV9jb3VudCA9PSAxKSAmJiAocF9kZXYtPmRldmljZV9ubyA9PSAwKSkKLQkJcGNtY2lhX2FkZF9kZXZpY2VfbGF0ZXIocF9kZXYtPnNvY2tldCwgMCk7CisJCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiBwdXRfbW9kdWxlOgogCWlmIChyZXQpCkBAIC0zMzYsMjYgKzMxNSwyNyBAQAogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqdG1wOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAJZGV2X2RiZyhsZWZ0b3ZlciA/ICZsZWZ0b3Zlci0+ZGV2IDogJnMtPmRldiwKIAkJICAgInBjbWNpYV9jYXJkX3JlbW92ZSglZCkgJXNcbiIsIHMtPnNvY2ssCiAJCSAgIGxlZnRvdmVyID8gbGVmdG92ZXItPmRldm5hbWUgOiAiIik7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWlmICghbGVmdG92ZXIpCiAJCXMtPmRldmljZV9jb3VudCA9IDA7CiAJZWxzZQogCQlzLT5kZXZpY2VfY291bnQgPSAxOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCS8qIHVucmVnaXN0ZXIgYWxsIHBjbWNpYV9kZXZpY2VzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIHNvY2tldCwgZXhjZXB0IGxlZnRvdmVyICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBfZGV2LCB0bXAsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewogCQlpZiAocF9kZXYgPT0gbGVmdG92ZXIpCiAJCQljb250aW51ZTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwogCQlwX2Rldi0+X3JlbW92ZWQgPSAxOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAkJZGV2X2RiZygmcF9kZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJnBfZGV2LT5kZXYpOwpAQCAtMzY4LDcgKzM0OCw2IEBACiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCAqZGlkOwogCWludCBpOwogCiAJcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CkBAIC0zODAsOSArMzU5LDggQEAKIAkgKiBwc2V1ZG8gbXVsdGktZnVuY3Rpb24gY2FyZCwgd2UgbmVlZCB0byB1bmJpbmQKIAkgKiBhbGwgZGV2aWNlcwogCSAqLwotCWRpZCA9IGRldl9nZXRfZHJ2ZGF0YSgmcF9kZXYtPmRldik7Ci0JaWYgKGRpZCAmJiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PKSAmJgotCSAgICAocF9kZXYtPnNvY2tldC0+ZGV2aWNlX2NvdW50ICE9IDApICYmCisJaWYgKChwX2Rldi0+c29ja2V0LT5wY21jaWFfc3RhdGUuaGFzX3BmYykgJiYKKwkgICAgKHBfZGV2LT5zb2NrZXQtPmRldmljZV9jb3VudCA+IDApICYmCiAJICAgIChwX2Rldi0+ZGV2aWNlX25vID09IDApKQogCQlwY21jaWFfY2FyZF9yZW1vdmUocF9kZXYtPnNvY2tldCwgcF9kZXYpOwogCkBAIC00MzEsMTYgKzQwOSwyMCBAQAogCiAJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBCSU5EX0ZOX0FMTCwKIAkJCSAgICAgICBDSVNUUExfTUFORklELCAmbWFuZl9pZCkpIHsKKwkJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcF9kZXYtPm1hbmZfaWQgPSBtYW5mX2lkLm1hbmY7CiAJCXBfZGV2LT5jYXJkX2lkID0gbWFuZl9pZC5jYXJkOwogCQlwX2Rldi0+aGFzX21hbmZfaWQgPSAxOwogCQlwX2Rldi0+aGFzX2NhcmRfaWQgPSAxOworCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJfQogCiAJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKIAkJCSAgICAgICBDSVNUUExfRlVOQ0lELCAmZnVuY19pZCkpIHsKKwkJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcF9kZXYtPmZ1bmNfaWQgPSBmdW5jX2lkLmZ1bmM7CiAJCXBfZGV2LT5oYXNfZnVuY19pZCA9IDE7CisJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAl9IGVsc2UgewogCQkvKiBydWxlIG9mIHRodW1iOiBjYXJkcyB3aXRoIG5vIEZVTkNJRCwgYnV0IHdpdGgKIAkJICogY29tbW9uIG1lbW9yeSBkZXZpY2UgZ2VvbWV0cnkgaW5mb3JtYXRpb24sIGFyZQpAQCAtNDU3LDE3ICs0MzksMjEgQEAKIAkJCWRldl9kYmcoJnBfZGV2LT5kZXYsCiAJCQkJICAgIm1lbSBkZXZpY2UgZ2VvbWV0cnkgcHJvYmFibHkgbWVhbnMgIgogCQkJCSAgICJGVU5DSURfTUVNT1JZXG4iKTsKKwkJCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCQlwX2Rldi0+ZnVuY19pZCA9IENJU1RQTF9GVU5DSURfTUVNT1JZOwogCQkJcF9kZXYtPmhhc19mdW5jX2lkID0gMTsKKwkJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJfQogCQlrZnJlZShkZXZnZW8pOwogCX0KIAogCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsCiAJCQkgICAgICAgdmVyczEpKSB7CisJCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCWZvciAoaSA9IDA7IGkgPCBtaW5fdCh1bnNpZ25lZCBpbnQsIDQsIHZlcnMxLT5ucyk7IGkrKykgewogCQkJY2hhciAqdG1wOwogCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKKwkJCWNoYXIgKm5ldzsKIAogCQkJdG1wID0gdmVyczEtPnN0ciArIHZlcnMxLT5vZnNbaV07CiAKQEAgLTQ3NSwxNCArNDYxLDE3IEBACiAJCQlpZiAoKGxlbmd0aCA8IDIpIHx8IChsZW5ndGggPiAyNTUpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlwX2Rldi0+cHJvZF9pZFtpXSA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuZ3RoLAotCQkJCQkJICAgIEdGUF9LRVJORUwpOwotCQkJaWYgKCFwX2Rldi0+cHJvZF9pZFtpXSkKKwkJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghbmV3KQogCQkJCWNvbnRpbnVlOwogCi0JCQlwX2Rldi0+cHJvZF9pZFtpXSA9IHN0cm5jcHkocF9kZXYtPnByb2RfaWRbaV0sCi0JCQkJCQkgICAgdG1wLCBsZW5ndGgpOworCQkJbmV3ID0gc3RybmNweShuZXcsIHRtcCwgbGVuZ3RoKTsKKworCQkJdG1wID0gcF9kZXYtPnByb2RfaWRbaV07CisJCQlwX2Rldi0+cHJvZF9pZFtpXSA9IG5ldzsKKwkJCWtmcmVlKHRtcCk7CiAJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCX0KIAogCWtmcmVlKHZlcnMxKTsKQEAgLTUwMiw3ICs0OTEsNyBAQAogc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCAqdG1wX2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOwogCiAJcyA9IHBjbWNpYV9nZXRfc29ja2V0KHMpOwogCWlmICghcykKQEAgLTUxMiwxNiArNTAxLDE5IEBACiAKIAlwcl9kZWJ1ZygiYWRkaW5nIGRldmljZSB0byAlZCwgZnVuY3Rpb24gJWRcbiIsIHMtPnNvY2ssIGZ1bmN0aW9uKTsKIAotCS8qIG1heCBvZiA0IGRldmljZXMgcGVyIGNhcmQgKi8KLQlpZiAocy0+ZGV2aWNlX2NvdW50ID09IDQpCi0JCWdvdG8gZXJyX3B1dDsKLQogCXBfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjbWNpYV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBfZGV2KQogCQlnb3RvIGVycl9wdXQ7CiAKLQlwX2Rldi0+c29ja2V0ID0gczsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXBfZGV2LT5kZXZpY2Vfbm8gPSAocy0+ZGV2aWNlX2NvdW50KyspOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCS8qIG1heCBvZiAyIGRldmljZXMgcGVyIGNhcmQgKi8KKwlpZiAocF9kZXYtPmRldmljZV9ubyA+PSAyKQorCQlnb3RvIGVycl9mcmVlOworCisJcF9kZXYtPnNvY2tldCA9IHM7CiAJcF9kZXYtPmZ1bmMgICA9IGZ1bmN0aW9uOwogCiAJcF9kZXYtPmRldi5idXMgPSAmcGNtY2lhX2J1c190eXBlOwpAQCAtNTM4LDcgKzUzMCw3IEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJZGV2X2RiZygmcF9kZXYtPmRldiwgImRldm5hbWUgaXMgJXNcbiIsIHBfZGV2LT5kZXZuYW1lKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAKIAkvKgogCSAqIHBfZGV2LT5mdW5jdGlvbl9jb25maWcgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYWxsIGNhcmQgZnVuY3Rpb25zLgpAQCAtNTU2LDcgKzU0OCw3IEBACiAJLyogQWRkIHRvIHRoZSBsaXN0IGluIHBjbWNpYV9idXNfc29ja2V0ICovCiAJbGlzdF9hZGQoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QsICZzLT5kZXZpY2VzX2xpc3QpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHsKIAkJZGV2X2RiZygmcF9kZXYtPmRldiwgImNyZWF0aW5nIGNvbmZpZ190XG4iKTsKQEAgLTU4MSwxNCArNTczLDE5IEBACiAJcmV0dXJuIHBfZGV2OwogCiAgZXJyX3VucmVnOgotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAgZXJyX2ZyZWU6CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlzLT5kZXZpY2VfY291bnQtLTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlrZnJlZShwX2Rldi0+cHJvZF9pZFtpXSk7CiAJa2ZyZWUocF9kZXYtPmRldm5hbWUpOwogCWtmcmVlKHBfZGV2KTsKLQlzLT5kZXZpY2VfY291bnQtLTsKICBlcnJfcHV0OgogCW11dGV4X3VubG9jaygmZGV2aWNlX2FkZF9sb2NrKTsKIAlwY21jaWFfcHV0X3NvY2tldChzKTsKQEAgLTYwMSwxOSArNTk4LDIzIEBACiB7CiAJY2lzdHBsX2xvbmdsaW5rX21mY190IG1mYzsKIAl1bnNpZ25lZCBpbnQgbm9fZnVuY3MsIGksIG5vX2NoYWluczsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gLUVBR0FJTjsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJaWYgKCEocy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LAogCQkJICAgIm5vIHJlc291cmNlcyBhdmFpbGFibGUsIGRlbGF5aW5nIGNhcmRfYWRkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBR0FJTjsgLyogdHJ5IGFnYWluLCBidXQgbGF0ZXIuLi4gKi8KIAl9CiAKIAlpZiAocGNtY2lhX3ZhbGlkYXRlX21lbShzKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJ2YWxpZGF0aW5nIG1lbSByZXNvdXJjZXMgZmFpbGVkLCAiCiAJCSAgICAgICAiZGVsYXlpbmcgY2FyZF9hZGRcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZub19jaGFpbnMpOwogCWlmIChyZXQgfHwgIW5vX2NoYWlucykgewpAQCAtNjM0LDE3ICs2MzUsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHBjbWNpYV9kZWxheWVkX2FkZF9kZXZpY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwY21jaWFfc29ja2V0LCBkZXZpY2VfYWRkKTsKLQlkZXZfZGJnKCZzLT5kZXYsICJhZGRpbmcgYWRkaXRpb25hbCBkZXZpY2UgdG8gJWRcbiIsIHMtPnNvY2spOwotCXBjbWNpYV9kZXZpY2VfYWRkKHMsIHMtPnBjbWNpYV9zdGF0ZS5tZmNfcGZjKTsKLQlzLT5wY21jaWFfc3RhdGUuZGV2aWNlX2FkZF9wZW5kaW5nID0gMDsKLQlzLT5wY21jaWFfc3RhdGUubWZjX3BmYyA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNtY2lhX3JlcXVlcnkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICogX2RhdGEpCitzdGF0aWMgaW50IHBjbWNpYV9yZXF1ZXJ5X2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqIF9kYXRhKQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKIAlpZiAoIXBfZGV2LT5kZXYuZHJpdmVyKSB7CkBAIC02NTUsNDUgKzY0Niw2NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwY21jaWFfYnVzX3Jlc2NhbihzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LCBpbnQgbmV3X2NpcykKKworc3RhdGljIHZvaWQgcGNtY2lhX3JlcXVlcnkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7Ci0JaW50IG5vX2RldmljZXMgPSAwOwotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHByZXNlbnQsIGhhc19wZmM7CiAKLQkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNrdF9tdXRleCBoZWxkICovCi0JZGV2X2RiZygmc2t0LT5kZXYsICJyZS1zY2FubmluZyBzb2NrZXQgJWRcbiIsIHNrdC0+c29jayk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlwcmVzZW50ID0gcy0+cGNtY2lhX3N0YXRlLnByZXNlbnQ7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpc3RfZW1wdHkoJnNrdC0+ZGV2aWNlc19saXN0KSkKLQkJbm9fZGV2aWNlcyA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXByZXNlbnQpCisJCXJldHVybjsKIAotCS8qIElmIHRoaXMgaXMgYmVjYXVzZSBvZiBhIENJUyBvdmVycmlkZSwgc3RhcnQgb3ZlciAqLwotCWlmIChuZXdfY2lzICYmICFub19kZXZpY2VzKQotCQlwY21jaWFfY2FyZF9yZW1vdmUoc2t0LCBOVUxMKTsKLQotCS8qIGlmIG5vIGRldmljZXMgd2VyZSBhZGRlZCBmb3IgdGhpcyBzb2NrZXQgeWV0IGJlY2F1c2Ugb2YKLQkgKiBtaXNzaW5nIHJlc291cmNlIGluZm9ybWF0aW9uIG9yIG90aGVyIHRyb3VibGUsIHdlIG5lZWQgdG8KLQkgKiBkbyB0aGlzIG5vdy4gKi8KLQlpZiAobm9fZGV2aWNlcyB8fCBuZXdfY2lzKSB7Ci0JCXJldCA9IHBjbWNpYV9jYXJkX2FkZChza3QpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuOworCWlmIChzLT5mdW5jdGlvbnMgPT0gMCkgeworCQlwY21jaWFfY2FyZF9hZGQocyk7CisJCXJldHVybjsKIAl9CiAKIAkvKiBzb21lIGRldmljZSBpbmZvcm1hdGlvbiBtaWdodCBoYXZlIGNoYW5nZWQgYmVjYXVzZSBvZiBhIENJUwogCSAqIHVwZGF0ZSBvciBiZWNhdXNlIHdlIGNhbiBmaW5hbGx5IHJlYWQgaXQgY29ycmVjdGx5Li4uIHNvCiAJICogZGV0ZXJtaW5lIGl0IGFnYWluLCBvdmVyd3JpdGluZyBvbGQgdmFsdWVzIGlmIG5lY2Vzc2FyeS4gKi8KLQlidXNfZm9yX2VhY2hfZGV2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIHBjbWNpYV9yZXF1ZXJ5KTsKKwlidXNfZm9yX2VhY2hfZGV2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIHBjbWNpYV9yZXF1ZXJ5X2NhbGxiYWNrKTsKKworCS8qIGlmIHRoZSBDSVMgY2hhbmdlZCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBudW1iZXIgb2YKKwkgKiBmdW5jdGlvbnMgY2hhbmdlZC4gKi8KKwlpZiAocy0+ZmFrZV9jaXMpIHsKKwkJaW50IG9sZF9mdW5jcywgbmV3X2Z1bmNzOworCQljaXN0cGxfbG9uZ2xpbmtfbWZjX3QgbWZjOworCisJCS8qIGRvZXMgdGhpcyBjaXMgb3ZlcnJpZGUgYWRkIG9yIHJlbW92ZSBmdW5jdGlvbnM/ICovCisJCW9sZF9mdW5jcyA9IHMtPmZ1bmN0aW9uczsKKworCQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfTE9OR0xJTktfTUZDLAorCQkJCQkmbWZjKSkKKwkJCW5ld19mdW5jcyA9IG1mYy5uZm47CisJCWVsc2UKKwkJCW5ld19mdW5jcyA9IDE7CisJCWlmIChvbGRfZnVuY3MgPiBuZXdfZnVuY3MpIHsKKwkJCXBjbWNpYV9jYXJkX3JlbW92ZShzLCBOVUxMKTsKKwkJCXBjbWNpYV9jYXJkX2FkZChzKTsKKwkJfSBlbHNlIGlmIChuZXdfZnVuY3MgPiBvbGRfZnVuY3MpIHsKKwkJCXMtPmZ1bmN0aW9ucyA9IG5ld19mdW5jczsKKwkJCXBjbWNpYV9kZXZpY2VfYWRkKHMsIDEpOworCQl9CisJfQorCisJLyogSWYgdGhlIFBDTUNJQSBkZXZpY2UgY29uc2lzdHMgb2YgdHdvIHBzZXVkbyBkZXZpY2VzLAorCSAqIGNhbGwgcGNtY2lhX2RldmljZV9hZGQoKSAtLSB3aGljaCB3aWxsIGZhaWwgaWYgYm90aAorCSAqIGRldmljZXMgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZC4gKi8KKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWhhc19wZmMgPSBzLT5wY21jaWFfc3RhdGUuaGFzX3BmYzsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJaWYgKGhhc19wZmMpCisJCXBjbWNpYV9kZXZpY2VfYWRkKHMsIDApOwogCiAJLyogd2UgcmUtc2NhbiBhbGwgZGV2aWNlcywgbm90IGp1c3QgdGhlIG9uZXMgY29ubmVjdGVkIHRvIHRoaXMKIAkgKiBzb2NrZXQuIFRoaXMgZG9lcyBub3QgbWF0dGVyLCB0aG91Z2guICovCi0JcmV0ID0gYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogYnVzX3Jlc2Nhbl9kZXZpY2VzIGZhaWxlZFxuIik7CisJaWYgKGJ1c19yZXNjYW5fZGV2aWNlcygmcGNtY2lhX2J1c190eXBlKSkKKwkJZGV2X3dhcm4oJnMtPmRldiwgInJlc2Nhbm5pbmcgdGhlIGJ1cyBmYWlsZWRcbiIpOwogfQogCisKICNpZmRlZiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTCiAKIC8qKgpAQCAtNzEwLDkgKzcyMyw2IEBACiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBkZXYtPnNvY2tldDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCByZXQgPSAtRU5PTUVNOwotCWludCBub19mdW5jczsKLQlpbnQgb2xkX2Z1bmNzOwotCWNpc3RwbF9sb25nbGlua19tZmNfdCBtZmM7CiAKIAlpZiAoIWZpbGVuYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTczOSwxOSArNzQ5LDggQEAKIAkJLyogdXBkYXRlIGluZm9ybWF0aW9uICovCiAJCXBjbWNpYV9kZXZpY2VfcXVlcnkoZGV2KTsKIAotCQkvKiBkb2VzIHRoaXMgY2lzIG92ZXJyaWRlIGFkZCBvciByZW1vdmUgZnVuY3Rpb25zPyAqLwotCQlvbGRfZnVuY3MgPSBzLT5mdW5jdGlvbnM7Ci0KLQkJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0xPTkdMSU5LX01GQywgJm1mYykpCi0JCQlub19mdW5jcyA9IG1mYy5uZm47Ci0JCWVsc2UKLQkJCW5vX2Z1bmNzID0gMTsKLQkJcy0+ZnVuY3Rpb25zID0gbm9fZnVuY3M7Ci0KLQkJaWYgKG9sZF9mdW5jcyA+IG5vX2Z1bmNzKQotCQkJcGNtY2lhX2NhcmRfcmVtb3ZlKHMsIGRldik7Ci0JCWVsc2UgaWYgKG5vX2Z1bmNzID4gb2xkX2Z1bmNzKQotCQkJcGNtY2lhX2FkZF9kZXZpY2VfbGF0ZXIocywgMSk7CisJCS8qIHJlcXVlcnkgKGFzIG51bWJlciBvZiBmdW5jdGlvbnMgbWlnaHQgaGF2ZSBjaGFuZ2VkKSAqLworCQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpOwogCX0KICByZWxlYXNlOgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwpAQCAtODE4LDkgKzgxNywxNCBAQAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pIHsKIAkJaWYgKGRldi0+ZGV2aWNlX25vICE9IGRpZC0+ZGV2aWNlX25vKQogCQkJcmV0dXJuIDA7CisJCW11dGV4X2xvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCQlkZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLmhhc19wZmMgPSAxOworCQltdXRleF91bmxvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCX0KIAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9GVU5DX0lEKSB7CisJCWludCByZXQ7CisKIAkJaWYgKCghZGV2LT5oYXNfZnVuY19pZCkgfHwgKGRldi0+ZnVuY19pZCAhPSBkaWQtPmZ1bmNfaWQpKQogCQkJcmV0dXJuIDA7CiAKQEAgLTgzNSwxMCArODM5LDE1IEBACiAJCSAqIGFmdGVyIGl0IGhhcyByZS1jaGVja2VkIHRoYXQgdGhlcmUgaXMgbm8gcG9zc2libGUgbW9kdWxlCiAJCSAqIHdpdGggYSBwcm9kX2lkL21hbmZfaWQvY2FyZF9pZCBtYXRjaC4KIAkJICovCi0JCWRldl9kYmcoJmRldi0+ZGV2LAotCQkJInNraXBwaW5nIEZVTkNfSUQgbWF0Y2ggdW50aWwgdXNlcnNwYWNlIGludGVyYWN0aW9uXG4iKTsKLQkJaWYgKCFkZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2gpCisJCW11dGV4X2xvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCQlyZXQgPSBkZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2g7CisJCW11dGV4X3VubG9jaygmZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisKKwkJaWYgKCFyZXQpIHsKKwkJCWRldl9kYmcoJmRldi0+ZGV2LAorCQkJCSJza2lwcGluZyBGVU5DX0lEIG1hdGNoIHVudGlsIHVzZXJzcGFjZSBBQ0tcbiIpOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfRkFLRV9DSVMpIHsKQEAgLTg1OSw4ICs4NjgsNiBAQAogCQkJcmV0dXJuIDA7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgZGlkKTsKLQogCXJldHVybiAxOwogfQogCkBAIC04NzMsMTYgKzg4MCwxNiBAQAogCXN0cnVjdCBwY21jaWFfZHluaWQgKmR5bmlkOwogCiAJLyogbWF0Y2ggZHluYW1pYyBkZXZpY2VzIGZpcnN0ICovCi0Jc3Bpbl9sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOworCW11dGV4X2xvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgJnBfZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgewogCQlkZXZfZGJnKGRldiwgInRyeWluZyB0byBtYXRjaCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJaWYgKHBjbWNpYV9kZXZtYXRjaChwX2RldiwgJmR5bmlkLT5pZCkpIHsKIAkJCWRldl9kYmcoZGV2LCAibWF0Y2hlZCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKLQkJCXNwaW5fdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCS8qIG1hdGNoaW5nIGJ5IGNhcmRtZ3IgKi8KQEAgLTk3MCwxMyArOTc3LDE0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmM7CiAKIAlkb3duKCZkZXYtPnNlbSk7CiAJcmMgPSBwY21jaWFfZGV2X3Jlc3VtZShkZXYpOwogCXVwKCZkZXYtPnNlbSk7CisJcmV0dXJuIHJjOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIHBlci1kZXZpY2Ugc3lzZnMgb3V0cHV0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEwMjcsNyArMTAzNSw3IEBACiAJaWYgKCghcF9kZXYtPnN1c3BlbmRlZCkgJiYgIXN0cm5jbXAoYnVmLCAib2ZmIiwgMykpCiAJCXJldCA9IHJ1bnRpbWVfc3VzcGVuZChkZXYpOwogCWVsc2UgaWYgKHBfZGV2LT5zdXNwZW5kZWQgJiYgIXN0cm5jbXAoYnVmLCAib24iLCAyKSkKLQkJcnVudGltZV9yZXN1bWUoZGV2KTsKKwkJcmV0ID0gcnVudGltZV9yZXN1bWUoZGV2KTsKIAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KQEAgLTEwNTksMTkgKzEwNjcsMTQgQEAKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKLQlpbnQgcmV0OwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5za3RfbXV0ZXgpOworCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJcF9kZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2ggPSAxOwotCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+c2t0X211dGV4KTsKLQotCXJldCA9IGJ1c19yZXNjYW5fZGV2aWNlcygmcGNtY2lhX2J1c190eXBlKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IGJ1c19yZXNjYW5fZGV2aWNlcyBmYWlsZWQgYWZ0ZXIgIgotCQkgICAgICAgImFsbG93aW5nIGZ1bmNfaWQgbWF0Y2hlc1xuIik7CisJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHBfZGV2LT5zb2NrZXQsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xMDk5LDggKzExMDIsMTMgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnYgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JaWYgKHBfZGV2LT5zdXNwZW5kZWQpCisJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKKwlpZiAocF9kZXYtPnN1c3BlbmRlZCkgeworCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCXJldHVybiAwOworCX0KKwlwX2Rldi0+c3VzcGVuZGVkID0gMTsKKwltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAKIAlkZXZfZGJnKGRldiwgInN1c3BlbmRpbmdcbiIpOwogCkBAIC0xMTE3LDYgKzExMjUsOSBAQAogCQkJCSAgICJwY21jaWE6IGRldmljZSAlcyAoZHJpdmVyICVzKSBkaWQgIgogCQkJCSAgICJub3Qgd2FudCB0byBnbyB0byBzbGVlcCAoJWQpXG4iLAogCQkJCSAgIHBfZGV2LT5kZXZuYW1lLCBwX2Rydi0+ZHJ2Lm5hbWUsIHJldCk7CisJCQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCQkJcF9kZXYtPnN1c3BlbmRlZCA9IDA7CisJCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTExMjcsOCArMTEzOCw2IEBACiAJfQogCiAgb3V0OgotCWlmICghcmV0KQotCQlwX2Rldi0+c3VzcGVuZGVkID0gMTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTM5LDggKzExNDgsMTMgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnYgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JaWYgKCFwX2Rldi0+c3VzcGVuZGVkKQorCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisJaWYgKCFwX2Rldi0+c3VzcGVuZGVkKSB7CisJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcmV0dXJuIDA7CisJfQorCXBfZGV2LT5zdXNwZW5kZWQgPSAwOworCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAogCWRldl9kYmcoZGV2LCAicmVzdW1pbmdcbiIpOwogCkBAIC0xMTYxLDggKzExNzUsNiBAQAogCQlyZXQgPSBwX2Rydi0+cmVzdW1lKHBfZGV2KTsKIAogIG91dDoKLQlpZiAoIXJldCkKLQkJcF9kZXYtPnN1c3BlbmRlZCA9IDA7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIzNywxMyArMTI0OSwyMiBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMOgorCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlzLT5wY21jaWFfc3RhdGUucHJlc2VudCA9IDA7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcGNtY2lhX2NhcmRfcmVtb3ZlKHNrdCwgTlVMTCk7CiAJCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwkJZGVzdHJveV9jaXNfY2FjaGUocyk7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJYnJlYWs7CiAKIAljYXNlIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OOgorCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQlzLT5wY21jaWFfc3RhdGUuaGFzX3BmYyA9IDA7CiAJCXMtPnBjbWNpYV9zdGF0ZS5wcmVzZW50ID0gMTsKKwkJZGVzdHJveV9jaXNfY2FjaGUocyk7IC8qIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuLi4gKi8KKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlwY21jaWFfY2FyZF9hZGQoc2t0KTsKIAkJaGFuZGxlX2V2ZW50KHNrdCwgZXZlbnQpOwogCQlicmVhazsKQEAgLTEyNTEsOCArMTI3MiwyNCBAQAogCWNhc2UgQ1NfRVZFTlRfRUpFQ1RJT05fUkVRVUVTVDoKIAkJYnJlYWs7CiAKLQljYXNlIENTX0VWRU5UX1BNX1NVU1BFTkQ6CiAJY2FzZSBDU19FVkVOVF9QTV9SRVNVTUU6CisJCWlmICh2ZXJpZnlfY2lzX2NhY2hlKHNrdCkgIT0gMCkgeworCQkJZGV2X2RiZygmc2t0LT5kZXYsICJjaXMgbWlzbWF0Y2ggLSBkaWZmZXJlbnQgY2FyZFxuIik7CisJCQkvKiBmaXJzdCwgcmVtb3ZlIHRoZSBjYXJkICovCisJCQlkc19ldmVudChza3QsIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCwgQ1NfRVZFTlRfUFJJX0hJR0gpOworCQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwkJCWRlc3Ryb3lfY2lzX2NhY2hlKHNrdCk7CisJCQlrZnJlZShza3QtPmZha2VfY2lzKTsKKwkJCXNrdC0+ZmFrZV9jaXMgPSBOVUxMOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQkJLyogbm93LCBhZGQgdGhlIG5ldyBjYXJkICovCisJCQlkc19ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLAorCQkJCSBDU19FVkVOVF9QUklfTE9XKTsKKwkJfQorCQloYW5kbGVfZXZlbnQoc2t0LCBldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBDU19FVkVOVF9QTV9TVVNQRU5EOgogCWNhc2UgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUw6CiAJY2FzZSBDU19FVkVOVF9DQVJEX1JFU0VUOgogCWRlZmF1bHQ6CkBAIC0xMjc1LDkgKzEzMTIsMTMgQEAKIAlpZiAoIXBfZGV2KQogCQlyZXR1cm4gTlVMTDsKIAorCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJaWYgKCFwX2Rldi0+c29ja2V0LT5wY21jaWFfc3RhdGUucHJlc2VudCkKIAkJZ290byBvdXQ7CiAKKwlpZiAocF9kZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLmRlYWQpCisJCWdvdG8gb3V0OworCiAJaWYgKHBfZGV2LT5fcmVtb3ZlZCkKIAkJZ290byBvdXQ7CiAKQEAgLTEyODYsNiArMTMyNyw3IEBACiAKIAlyZXQgPSBwX2RldjsKICBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI5NSw3ICsxMzM3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrIHBjbWNpYV9idXNfY2FsbGJhY2sgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmV2ZW50ID0gZHNfZXZlbnQsCi0JLnJlcXVlcnkgPSBwY21jaWFfYnVzX3Jlc2NhbiwKKwkucmVxdWVyeSA9IHBjbWNpYV9yZXF1ZXJ5LAorCS52YWxpZGF0ZSA9IHBjY2FyZF92YWxpZGF0ZV9jaXMsCiAJLnN1c3BlbmQgPSBwY21jaWFfYnVzX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHBjbWNpYV9idXNfcmVzdW1lLAogfTsKQEAgLTEzMTMsMTcgKzEzNTYsMTcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyoKLQkgKiBVZ2x5LiBCdXQgd2Ugd2FudCB0byB3YWl0IGZvciB0aGUgc29ja2V0IHRocmVhZHMgdG8gaGF2ZSBzdGFydGVkIHVwLgotCSAqIFdlIHJlYWxseSBzaG91bGQgbGV0IHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMgZHJpdmUgc29tZSBvZiB0aGlzLi4KLQkgKi8KLQltc2xlZXAoMjUwKTsKKwlyZXQgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmRldi0+a29iaiwgJnBjY2FyZF9jaXNfYXR0cik7CisJaWYgKHJldCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsICJQQ01DSUEgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCXBjbWNpYV9wdXRfc29ja2V0KHNvY2tldCk7CisJCXJldHVybiByZXQ7CisJfQogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvY2tldC0+cXVldWUpOwogI2VuZGlmCiAJSU5JVF9MSVNUX0hFQUQoJnNvY2tldC0+ZGV2aWNlc19saXN0KTsKLQlJTklUX1dPUksoJnNvY2tldC0+ZGV2aWNlX2FkZCwgcGNtY2lhX2RlbGF5ZWRfYWRkX2RldmljZSk7CiAJbWVtc2V0KCZzb2NrZXQtPnBjbWNpYV9zdGF0ZSwgMCwgc2l6ZW9mKHU4KSk7CiAJc29ja2V0LT5kZXZpY2VfY291bnQgPSAwOwogCkBAIC0xMzQ1LDE0ICsxMzg4LDIwIEBACiAJaWYgKCFzb2NrZXQpCiAJCXJldHVybjsKIAorCW11dGV4X2xvY2soJnNvY2tldC0+b3BzX211dGV4KTsKIAlzb2NrZXQtPnBjbWNpYV9zdGF0ZS5kZWFkID0gMTsKKwltdXRleF91bmxvY2soJnNvY2tldC0+b3BzX211dGV4KTsKKwogCXBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc29ja2V0LCBOVUxMKTsKIAogCS8qIHVucmVnaXN0ZXIgYW55IHVuYm91bmQgZGV2aWNlcyAqLwogCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAlwY21jaWFfY2FyZF9yZW1vdmUoc29ja2V0LCBOVUxMKTsKKwlyZWxlYXNlX2Npc19tZW0oc29ja2V0KTsKIAltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAorCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCAmcGNjYXJkX2Npc19hdHRyKTsKKwogCXBjbWNpYV9wdXRfc29ja2V0KHNvY2tldCk7CiAKIAlyZXR1cm47CkBAIC0xMzgzLDggKzE0MzIsNiBAQAogewogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaW5pdCgmcGNtY2lhX2Rldl9saXN0X2xvY2spOwotCiAJcmV0ID0gYnVzX3JlZ2lzdGVyKCZwY21jaWFfYnVzX3R5cGUpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBjbWNpYTogYnVzX3JlZ2lzdGVyIGVycm9yOiAlZFxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYwppbmRleCBkMTg3YmE0Li44OWNmZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZWxlY3RyYV9jZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZWxlY3RyYV9jZl9tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgICA9ICJlbGVjdHJhLWNmIiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmggYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaAppbmRleCA2MjI4NjBjLi44NDllZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaApAQCAtNzcsOCArNzcsOCBAQAogI2RlZmluZSBJMzY1X1ZQUDJfNVYJMHgwNAkvKiBWcHAyID0gNS4wdiAqLwogI2RlZmluZSBJMzY1X1ZQUDJfMTJWCTB4MDgJLyogVnBwMiA9IDEyLjB2ICovCiAjZGVmaW5lIEkzNjVfVlBQMV9NQVNLCTB4MDMJLyogTWFzayBmb3IgdHVybmluZyBvZmYgVnBwMSAqLwotI2RlZmluZSBJMzY1X1ZQUDFfNVYJMHgwMQkvKiBWcHAyID0gNS4wdiAqLwotI2RlZmluZSBJMzY1X1ZQUDFfMTJWCTB4MDIJLyogVnBwMiA9IDEyLjB2ICovCisjZGVmaW5lIEkzNjVfVlBQMV81VgkweDAxCS8qIFZwcDEgPSA1LjB2ICovCisjZGVmaW5lIEkzNjVfVlBQMV8xMlYJMHgwMgkvKiBWcHAxID0gMTIuMHYgKi8KIAogLyogRmxhZ3MgZm9yIEkzNjVfSU5UQ1RMICovCiAjZGVmaW5lIEkzNjVfUklOR19FTkEJMHg4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKaW5kZXggMjZhNjIxYy4uMGVjZTJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCkBAIC03NjQsNyArNzY0LDcgQEAKIAlmb3IgKGkgPSAwIDsgaSA8IHBjY19zb2NrZXRzIDsgaSsrKSB7CiAJCXNvY2tldFtpXS5zb2NrZXQuZGV2LnBhcmVudCA9ICZwY2NfZGV2aWNlLmRldjsKIAkJc29ja2V0W2ldLnNvY2tldC5vcHMgPSAmcGNjX29wZXJhdGlvbnM7Ci0JCXNvY2tldFtpXS5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9ub25zdGF0aWNfb3BzOworCQlzb2NrZXRbaV0uc29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfc3RhdGljX29wczsKIAkJc29ja2V0W2ldLnNvY2tldC5vd25lciA9IFRISVNfTU9EVUxFOwogCQlzb2NrZXRbaV0ubnVtYmVyID0gaTsKIAkJcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCgmc29ja2V0W2ldLnNvY2tldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCA3Zjc5YzRlLi42MWMyMTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTEyMzMsNyArMTIzMyw3IEBACiAJCXNvY2tldFtpXS5zb2NrZXQuaW9fb2Zmc2V0ID0gMDsKIAkJc29ja2V0W2ldLnNvY2tldC5wY2lfaXJxID0gcGNtY2lhX3NjaGx2bDsKIAkJc29ja2V0W2ldLnNvY2tldC5vcHMgPSAmbTh4eF9zZXJ2aWNlczsKLQkJc29ja2V0W2ldLnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX25vbnN0YXRpY19vcHM7CisJCXNvY2tldFtpXS5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9pb2R5bl9vcHM7CiAJCXNvY2tldFtpXS5zb2NrZXQuY2JfZGV2ID0gTlVMTDsKIAkJc29ja2V0W2ldLnNvY2tldC5kZXYucGFyZW50ID0gJm9mZGV2LT5kZXY7CiAJCXNvY2tldFtpXS5wY21jaWEgPSBwY21jaWE7CkBAIC0xMzAzLDcgKzEzMDMsNyBAQAogI2RlZmluZSBtOHh4X3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbTh4eF9wY21jaWFfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG04eHhfcGNtY2lhX21hdGNoW10gPSB7CiAJewogCSAudHlwZSA9ICJwY21jaWEiLAogCSAuY29tcGF0aWJsZSA9ICJmc2wscHEtcGNtY2lhIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaCBiL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaAppbmRleCA2MjQ0NDJmLi5lNzRiZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmgKKysrIGIvZHJpdmVycy9wY21jaWEvbzJtaWNyby5oCkBAIC0xMTYsMTMgKzExNiwxMiBAQAogCSAqIGZyb20gRXJpYyBTdGlsbCwgMDJNaWNyby4KIAkgKi8KIAl1OCBhLCBiOworCWJvb2wgdXNlX3NwZWVkdXA7CiAKIAlpZiAoUENJX0ZVTkMoc29ja2V0LT5kZXYtPmRldmZuKSA9PSAwKSB7CiAJCWEgPSBjb25maWdfcmVhZGIoc29ja2V0LCBPMl9SRVNFUlZFRDEpOwogCQliID0gY29uZmlnX3JlYWRiKHNvY2tldCwgTzJfUkVTRVJWRUQyKTsKLQotCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCi0JCQkgICAiTzI6IHJlcyBhdCAweDk0LzB4RDQ6ICUwMngvJTAyeFxuIiwgYSwgYik7CisJCWRldl9kYmcoJnNvY2tldC0+ZGV2LT5kZXYsICJPMjogMHg5NC8weEQ0OiAlMDJ4LyUwMnhcbiIsIGEsIGIpOwogCiAJCXN3aXRjaCAoc29ja2V0LT5kZXYtPmRldmljZSkgewogCQkvKgpAQCAtMTM1LDIzICsxMzQsMzcgQEAKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY4MTI6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82ODMyOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjgzNjoKLSAJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82OTMzOgotCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAotCQkJCSAgICJZZW50YSBPMjogb2xkIGJyaWRnZSwgZGlzYWJsaW5nIHJlYWQgIgotCQkJCSAgICJwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7Ci0JCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQxLAotCQkJICAgICAgICAgICAgICBhICYgfihPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCkpOwotCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMiwKLQkJCSAgICAgICAgICAgICAgYiAmIH4oTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpKTsKKwkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY5MzM6CisJCQl1c2Vfc3BlZWR1cCA9IGZhbHNlOwogCQkJYnJlYWs7Ci0KIAkJZGVmYXVsdDoKLQkJCWRldl9wcmludGsoS0VSTl9JTkZPICwgJnNvY2tldC0+ZGV2LT5kZXYsCi0JCQkJICAgIk8yOiBlbmFibGluZyByZWFkIHByZWZldGNoL3dyaXRlIGJ1cnN0XG4iKTsKKwkJCXVzZV9zcGVlZHVwID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogdGhlIHVzZXIgbWF5IG92ZXJyaWRlIG91ciBkZWNpc2lvbiAqLworCQlpZiAoc3RyY2FzZWNtcChvMl9zcGVlZHVwLCAib24iKSA9PSAwKQorCQkJdXNlX3NwZWVkdXAgPSB0cnVlOworCQllbHNlIGlmIChzdHJjYXNlY21wKG8yX3NwZWVkdXAsICJvZmYiKSA9PSAwKQorCQkJdXNlX3NwZWVkdXAgPSBmYWxzZTsKKwkJZWxzZSBpZiAoc3RyY2FzZWNtcChvMl9zcGVlZHVwLCAiZGVmYXVsdCIpICE9IDApCisJCQlkZXZfd2Fybigmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkiTzI6IFVua25vd24gcGFyYW1ldGVyLCB1c2luZyAnZGVmYXVsdCciKTsKKworCQlpZiAodXNlX3NwZWVkdXApIHsKKwkJCWRldl9pbmZvKCZzb2NrZXQtPmRldi0+ZGV2LAorCQkJCSJPMjogZW5hYmxpbmcgcmVhZCBwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7CiAJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQxLAotCQkJICAgICAgICAgICAgICBhIHwgTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpOworCQkJCSAgICAgIGEgfCBPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCk7CiAJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQyLAotCQkJICAgICAgICAgICAgICBiIHwgTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpOworCQkJCSAgICAgIGIgfCBPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCk7CisJCX0gZWxzZSB7CisJCQlkZXZfaW5mbygmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkiTzI6IGRpc2FibGluZyByZWFkIHByZWZldGNoL3dyaXRlIGJ1cnN0XG4iKTsKKwkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDEsCisJCQkJICAgICAgYSAmIH4oTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpKTsKKwkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDIsCisJCQkJICAgICAgYiAmIH4oTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCmluZGV4IDY2Mzc4MWQuLjNlZjk5MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKQEAgLTcxLDggKzcxLDYgQEAKIAogI2RlZmluZQlQT0xMX0lOVEVSVkFMCQkoMiAqIEhaKQogCi0jZGVmaW5lCVNaXzJLCQkJKDIgKiBTWl8xSykKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgb21hcF9jZl9zc19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCBmNzNmZDViLi4xM2E3MTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtNjIsMTYgKzYyLDE1IEBACiAJCQkJCQl1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKIAkJaWYgKHBfZGV2LT5mdW5jID09IGZ1bmN0aW9uKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJcmV0dXJuIHBjbWNpYV9nZXRfZGV2KHBfZGV2KTsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTY5LDcgKzE2OCw2IEBACiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJaW50IHJldCA9IC1FTk9TWVM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRvd25fcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7CkBAIC0xODIsMTQgKzE4MCwxMyBAQAogCiAJCQkvKiB5b3UgY2FuJ3QgdXNlIHRoZSBvbGQgaW50ZXJmYWNlIGlmIHRoZSBuZXcKIAkJCSAqIG9uZSB3YXMgdXNlZCBiZWZvcmUgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CisJCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJaWYgKChzLT5yZXNvdXJjZV9zZXR1cF9uZXcpICYmCiAJCQkgICAgIShzLT5yZXNvdXJjZV9zZXR1cF9vbGQpKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOworCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZSBpZiAoIShzLT5yZXNvdXJjZV9zZXR1cF9vbGQpKQogCQkJCXMtPnJlc291cmNlX3NldHVwX29sZCA9IDE7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAKIAkJCXN3aXRjaCAoYWRqLT5SZXNvdXJjZSkgewogCQkJY2FzZSBSRVNfTUVNT1JZX1JBTkdFOgpAQCAtMjA4LDEwICsyMDUsOSBAQAogCQkJCSAqIGxhc3QgY2FsbCB0byBhZGp1c3RfcmVzb3VyY2VfaW5mbywgd2UKIAkJCQkgKiBhbHdheXMgbmVlZCB0byBhc3N1bWUgdGhpcyBpcyB0aGUgbGF0ZXN0CiAJCQkJICogb25lLi4uICovCi0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJCQlzLT5yZXNvdXJjZV9zZXR1cF9kb25lID0gMTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJCQl9CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCX0KIAl9CiAJdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKQEAgLTQ3MCw3ICs0NjYsNiBAQAogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXMgPSBwY21jaWFfZ2V0X3NvY2tldChzKTsKIAlpZiAoIXMpCkBAIC00OTAsNyArNDg1LDcgQEAKIAkJZ290byBlcnJfcHV0X2RyaXZlcjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewogCQlpZiAocF9kZXYtPmZ1bmMgPT0gYmluZF9pbmZvLT5mdW5jdGlvbikgewogCQkJaWYgKChwX2Rldi0+ZGV2LmRyaXZlciA9PSAmcF9kcnYtPmRydikpIHsKQEAgLTQ5OSw3ICs0OTQsNyBAQAogCQkJCQkgKiByZWdpc3RlcmVkLCBhbmQgaXQgd2FzIHJlZ2lzdGVyZWQKIAkJCQkJICogYnkgdXNlcnNwYWNlIGJlZm9yZSwgd2UgbmVlZCB0bwogCQkJCQkgKiByZXR1cm4gdGhlICJpbnN0YW5jZSIuICovCi0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCQkJYmluZF9pbmZvLT5pbnN0YW5jZSA9IHBfZGV2OwogCQkJCQlyZXQgPSAtRUJVU1k7CiAJCQkJCWdvdG8gZXJyX3B1dF9tb2R1bGU7CkBAIC01MDcsNyArNTAyLDcgQEAKIAkJCQkJLyogdGhlIGNvcnJlY3QgZHJpdmVyIG1hbmFnZWQgdG8gYmluZAogCQkJCQkgKiBpdHNlbGYgbWFnaWNhbGx5IHRvIHRoZSBjb3JyZWN0CiAJCQkJCSAqIGRldmljZS4gKi8KLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJCQlwX2Rldi0+Y2FyZG1nciA9IHBfZHJ2OwogCQkJCQlyZXQgPSAwOwogCQkJCQlnb3RvIGVycl9wdXRfbW9kdWxlOwpAQCAtNTE2LDEyICs1MTEsMTIgQEAKIAkJCQkvKiB0aGVyZSdzIGFscmVhZHkgYSBkZXZpY2UgYXZhaWxhYmxlIHdoZXJlCiAJCQkJICogbm8gZGV2aWNlIGhhcyBiZWVuIGJvdW5kIHRvIHlldC4gU28gd2UgZG9uJ3QKIAkJCQkgKiBuZWVkIHRvIHJlZ2lzdGVyIGEgZGV2aWNlISAqLwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJCWdvdG8gcmVzY2FuOwogCQkJfQogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcF9kZXYgPSBwY21jaWFfZGV2aWNlX2FkZChzLCBiaW5kX2luZm8tPmZ1bmN0aW9uKTsKIAlpZiAoIXBfZGV2KSB7CkBAIC01NzgsNyArNTczLDYgQEAKIAlkZXZfbm9kZV90ICpub2RlOwogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIENPTkZJR19DQVJEQlVTCkBAIC02MTcsNyArNjExLDcgQEAKIAl9CiAjZW5kaWYKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwX2RldiwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KSB7CiAJCWlmIChwX2Rldi0+ZnVuYyA9PSBiaW5kX2luZm8tPmZ1bmN0aW9uKSB7CiAJCQlwX2RldiA9IHBjbWNpYV9nZXRfZGV2KHBfZGV2KTsKQEAgLTYyNiwxMSArNjIwLDExIEBACiAJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiAtRU5PREVWOwogCiAgZm91bmQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlwX2RydiA9IHRvX3BjbWNpYV9kcnYocF9kZXYtPmRldi5kcml2ZXIpOwogCWlmIChwX2RydiAmJiAhcF9kZXYtPl9sb2NrZWQpIHsKQEAgLTkzMSwxNiArOTI1LDE2IEBACiAJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19TVVNQRU5EX0NBUkQ6Ci0JcmV0ID0gcGNtY2lhX3N1c3BlbmRfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1NVU1BFTkQpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfUkVTVU1FX0NBUkQ6Ci0JcmV0ID0gcGNtY2lhX3Jlc3VtZV9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVTVU1FKTsKIAlicmVhazsKICAgICBjYXNlIERTX0VKRUNUX0NBUkQ6Ci0JZXJyID0gcGNtY2lhX2VqZWN0X2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9FSkVDVCk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19JTlNFUlRfQ0FSRDoKLQllcnIgPSBwY21jaWFfaW5zZXJ0X2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9JTlNFUlQpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfQUNDRVNTX0NPTkZJR1VSQVRJT05fUkVHSVNURVI6CiAJaWYgKChidWYtPmNvbmZfcmVnLkFjdGlvbiA9PSBDU19XUklURSkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKaW5kZXggZDVkYjk1Ni4uYjJkZjA0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTQzLDYgKzQzLDM5IEBACiBzdGF0aWMgdTggcGNtY2lhX3VzZWRfaXJxW05SX0lSUVNdOwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgcGNtY2lhX2FkanVzdF9pb19yZWdpb24oc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQoreworCWlmIChzLT5yZXNvdXJjZV9vcHMtPmFkanVzdF9pb19yZWdpb24pCisJCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmFkanVzdF9pb19yZWdpb24ocmVzLCBzdGFydCwgZW5kLCBzKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfaW9fcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IG51bSwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkJICAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJaWYgKHMtPnJlc291cmNlX29wcy0+ZmluZF9pbykKKwkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+ZmluZF9pbyhiYXNlLCBudW0sIGFsaWduLCBzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJaWYgKHMtPnJlc291cmNlX29wcy0+dmFsaWRhdGVfbWVtKQorCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT52YWxpZGF0ZV9tZW0ocyk7CisJLyogaWYgdGhlcmUgaXMgbm8gY2FsbGJhY2ssIHdlIGNhbiBhc3N1bWUgdGhhdCBldmVyeXRoaW5nIGlzIE9LICovCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwgdV9sb25nIG51bSwgdV9sb25nIGFsaWduLAorCQkJCSBpbnQgbG93LCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKK3sKKwlpZiAocy0+cmVzb3VyY2Vfb3BzLT5maW5kX21lbSkKKwkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+ZmluZF9tZW0oYmFzZSwgbnVtLCBhbGlnbiwgbG93LCBzKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogCiAvKiogYWxsb2NfaW9fc3BhY2UKICAqCkBAIC0xNTgsMTQgKzE5MSwxOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXMgPSBwX2Rldi0+c29ja2V0OworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpc250J3QgbG9ja2VkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKIAlhZGRyID0gKGMtPkNvbmZpZ0Jhc2UgKyByZWctPk9mZnNldCkgPj4gMTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlzd2l0Y2ggKHJlZy0+QWN0aW9uKSB7CiAJY2FzZSBDU19SRUFEOgpAQCAtMTkwLDYgKzIyNyw3IEBACiAJCQltZW1yZXFfdCAqcmVxKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKKwlpbnQgcmV0OwogCiAJd2gtLTsKIAlpZiAod2ggPj0gTUFYX1dJTikKQEAgLTE5OCwxMiArMjM2LDEzIEBACiAJCWRldl9kYmcoJnMtPmRldiwgImZhaWx1cmU6IHJlcXVlc3RlZCBwYWdlIGlzIHplcm9cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlzLT53aW5bd2hdLmNhcmRfc3RhcnQgPSByZXEtPkNhcmRPZmZzZXQ7Ci0JaWYgKHMtPm9wcy0+c2V0X21lbV9tYXAocywgJnMtPndpblt3aF0pICE9IDApIHsKLQkJZGV2X2RiZygmcy0+ZGV2LCAiZmFpbGVkIHRvIHNldF9tZW1fbWFwXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXJldHVybiAwOworCXJldCA9IHMtPm9wcy0+c2V0X21lbV9tYXAocywgJnMtPndpblt3aF0pOworCWlmIChyZXQpCisJCWRldl93YXJuKCZzLT5kZXYsICJmYWlsZWQgdG8gc2V0X21lbV9tYXBcbiIpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwlyZXR1cm4gcmV0OwogfSAvKiBwY21jaWFfbWFwX21lbV9wYWdlICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9tYXBfbWVtX3BhZ2UpOwogCkBAIC0yMTksMTQgKzI1OCwxOCBAQAogCWNvbmZpZ190ICpjOwogCiAJcyA9IHBfZGV2LT5zb2NrZXQ7CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiTm8gY2FyZCBwcmVzZW50XG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKCEoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzbnQndCBsb2NrZWRcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIApAQCAtMjUxLDEwICsyOTQsMTIgQEAKIAkgICAgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMl9DSEFOR0VfVkFMSUQpKSB7CiAJCWlmIChtb2QtPlZwcDEgIT0gbW9kLT5WcHAyKSB7CiAJCQlkZXZfZGJnKCZzLT5kZXYsICJWcHAxIGFuZCBWcHAyIG11c3QgYmUgdGhlIHNhbWVcbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJcy0+c29ja2V0LlZwcCA9IG1vZC0+VnBwMTsKIAkJaWYgKHMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KSkgeworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsCiAJCQkJICAgIlVuYWJsZSB0byBzZXQgVlBQXG4iKTsKIAkJCXJldHVybiAtRUlPOwpAQCAtMjYyLDYgKzMwNyw3IEBACiAJfSBlbHNlIGlmICgobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WUFAxX0NIQU5HRV9WQUxJRCkgfHwKIAkJICAgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMl9DSEFOR0VfVkFMSUQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImNoYW5naW5nIFZjYyBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIHRpbWVcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjg2LDYgKzMzMiw3IEBACiAJCQlzLT5vcHMtPnNldF9pb19tYXAocywgJmlvX29uKTsKIAkJfQogCX0KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0gLyogbW9kaWZ5X2NvbmZpZ3VyYXRpb24gKi8KQEAgLTI5Niw5ICszNDMsMTEgQEAKIHsKIAlwY2NhcmRfaW9fbWFwIGlvID0geyAwLCAwLCAwLCAwLCAxIH07CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwotCWNvbmZpZ190ICpjID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKKwljb25maWdfdCAqYzsKIAlpbnQgaTsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKHBfZGV2LT5fbG9ja2VkKSB7CiAJCXBfZGV2LT5fbG9ja2VkID0gMDsKIAkJaWYgKC0tKHMtPmxvY2tfY291bnQpID09IDApIHsKQEAgLTMyMSw2ICszNzAsNyBAQAogCQkJCXMtPm9wcy0+c2V0X2lvX21hcChzLCAmaW8pOwogCQkJfQogCX0KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbiAqLwpAQCAtMzM3LDEwICszODcsMTQgQEAKIHN0YXRpYyBpbnQgcGNtY2lhX3JlbGVhc2VfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpb19yZXFfdCAqcmVxKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKLQljb25maWdfdCAqYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisJaW50IHJldCA9IC1FSU5WQUw7CisJY29uZmlnX3QgKmM7CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCFwX2Rldi0+X2lvKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAKIAlwX2Rldi0+X2lvID0gMDsKIApAQCAtMzQ4LDcgKzQwMiw3IEBACiAJICAgIChjLT5pby5OdW1Qb3J0czEgIT0gcmVxLT5OdW1Qb3J0czEpIHx8CiAJICAgIChjLT5pby5CYXNlUG9ydDIgIT0gcmVxLT5CYXNlUG9ydDIpIHx8CiAJICAgIChjLT5pby5OdW1Qb3J0czIgIT0gcmVxLT5OdW1Qb3J0czIpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAKIAljLT5zdGF0ZSAmPSB+Q09ORklHX0lPX1JFUTsKIApAQCAtMzU2LDI4ICs0MTAsMzggQEAKIAlpZiAocmVxLT5OdW1Qb3J0czIpCiAJCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDIsIHJlcS0+TnVtUG9ydHMyKTsKIAotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2lvICovCiAKIAogc3RhdGljIGludCBwY21jaWFfcmVsZWFzZV9pcnEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpcnFfcmVxX3QgKnJlcSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7Ci0JY29uZmlnX3QgKmMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOworCWNvbmZpZ190ICpjOworCWludCByZXQgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKworCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCFwX2Rldi0+X2lycSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OworCiAJcF9kZXYtPl9pcnEgPSAwOwogCiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKLQkJcmV0dXJuIC1FQUNDRVM7CisJCWdvdG8gb3V0OworCiAJaWYgKGMtPmlycS5BdHRyaWJ1dGVzICE9IHJlcS0+QXR0cmlidXRlcykgewogCQlkZXZfZGJnKCZzLT5kZXYsICJJUlEgYXR0cmlidXRlcyBtdXN0IG1hdGNoIGFzc2lnbmVkIG9uZXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCWlmIChzLT5pcnEuQXNzaWduZWRJUlEgIT0gcmVxLT5Bc3NpZ25lZElSUSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJJUlEgbXVzdCBtYXRjaCBhc3NpZ25lZCBvbmVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCWlmICgtLXMtPmlycS5Db25maWcgPT0gMCkgewogCQljLT5zdGF0ZSAmPSB+Q09ORklHX0lSUV9SRVE7CkBAIC0zOTAsOCArNDU0LDEyIEBACiAjaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRQogCXBjbWNpYV91c2VkX2lycVtyZXEtPkFzc2lnbmVkSVJRXS0tOwogI2VuZGlmCisJcmV0ID0gMDsKIAotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2lycSAqLwogCiAKQEAgLTQwNCwxMCArNDcyLDEyIEBACiAJaWYgKHdoID49IE1BWF9XSU4pCiAJCXJldHVybiAtRUlOVkFMOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAl3aW4gPSAmcy0+d2luW3doXTsKIAogCWlmICghKHBfZGV2LT5fd2luICYgQ0xJRU5UX1dJTl9SRVEod2gpKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJub3QgcmVsZWFzaW5nIHVua25vd24gd2luZG93XG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQyMyw2ICs0OTMsNyBAQAogCQl3aW4tPnJlcyA9IE5VTEw7CiAJfQogCXBfZGV2LT5fd2luICY9IH5DTElFTlRfV0lOX1JFUSh3aCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX3dpbmRvdyAqLwpAQCAtNDQ1LDggKzUxNiwxMSBAQAogCQlkZXZfZGJnKCZzLT5kZXYsICJJbnRUeXBlIG1heSBub3QgYmUgSU5UX0NBUkRCVVNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzIGxvY2tlZFxuIik7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KQEAgLTQ1NCw2ICs1MjgsNyBAQAogCS8qIERvIHBvd2VyIGNvbnRyb2wuICBXZSBkb24ndCBhbGxvdyBjaGFuZ2VzIGluIFZjYy4gKi8KIAlzLT5zb2NrZXQuVnBwID0gcmVxLT5WcHA7CiAJaWYgKHMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KSkgeworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LAogCQkJICAgIlVuYWJsZSB0byBzZXQgc29ja2V0IHN0YXRlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NzYsNiArNTUxLDcgQEAKIAkJcy0+c29ja2V0LmlvX2lycSA9IDA7CiAJcy0+b3BzLT5zZXRfc29ja2V0KHMsICZzLT5zb2NrZXQpOwogCXMtPmxvY2tfY291bnQrKzsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAkvKiBTZXQgdXAgQ0lTIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCiAJYmFzZSA9IGMtPkNvbmZpZ0Jhc2UgPSByZXEtPkNvbmZpZ0Jhc2U7CkBAIC01MjQsNiArNjAwLDcgQEAKIAogCS8qIENvbmZpZ3VyZSBJL08gd2luZG93cyAqLwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JT19SRVEpIHsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJaW9tYXAuc3BlZWQgPSBpb19zcGVlZDsKIAkJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykKIAkJCWlmIChzLT5pb1tpXS5yZXMpIHsKQEAgLTU0Miw2ICs2MTksNyBAQAogCQkJCXMtPm9wcy0+c2V0X2lvX21hcChzLCAmaW9tYXApOwogCQkJCXMtPmlvW2ldLkNvbmZpZysrOwogCQkJfQorCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJfQogCiAJYy0+c3RhdGUgfD0gQ09ORklHX0xPQ0tFRDsKQEAgLTU2MCw1NCArNjM4LDY1IEBACiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwogCWNvbmZpZ190ICpjOworCWludCByZXQgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIk5vIGNhcmQgcHJlc2VudFxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OworCiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzIGxvY2tlZFxuIik7Ci0JCXJldHVybiAtRUFDQ0VTOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lPX1JFUSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJJTyBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKHJlcS0+QXR0cmlidXRlczEgJiAoSU9fU0hBUkVEIHwgSU9fRk9SQ0VfQUxJQVNfQUNDRVNTKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJiYWQgYXR0cmlidXRlIHNldHRpbmcgZm9yIElPIHJlZ2lvbiAxXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoKHJlcS0+TnVtUG9ydHMyID4gMCkgJiYKIAkgICAgKHJlcS0+QXR0cmlidXRlczIgJiAoSU9fU0hBUkVEIHwgSU9fRk9SQ0VfQUxJQVNfQUNDRVNTKSkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBJTyByZWdpb24gMlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAlkZXZfZGJnKCZzLT5kZXYsICJ0cnlpbmcgdG8gYWxsb2NhdGUgcmVzb3VyY2UgMVxuIik7Ci0JaWYgKGFsbG9jX2lvX3NwYWNlKHMsIHJlcS0+QXR0cmlidXRlczEsICZyZXEtPkJhc2VQb3J0MSwKLQkJCSAgIHJlcS0+TnVtUG9ydHMxLCByZXEtPklPQWRkckxpbmVzKSkgeworCXJldCA9IGFsbG9jX2lvX3NwYWNlKHMsIHJlcS0+QXR0cmlidXRlczEsICZyZXEtPkJhc2VQb3J0MSwKKwkJCSAgICAgcmVxLT5OdW1Qb3J0czEsIHJlcS0+SU9BZGRyTGluZXMpOworCWlmIChyZXQpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NhdGlvbiBvZiByZXNvdXJjZSAxIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChyZXEtPk51bVBvcnRzMikgewogCQlkZXZfZGJnKCZzLT5kZXYsICJ0cnlpbmcgdG8gYWxsb2NhdGUgcmVzb3VyY2UgMlxuIik7Ci0JCWlmIChhbGxvY19pb19zcGFjZShzLCByZXEtPkF0dHJpYnV0ZXMyLCAmcmVxLT5CYXNlUG9ydDIsCi0JCQkJICAgcmVxLT5OdW1Qb3J0czIsIHJlcS0+SU9BZGRyTGluZXMpKSB7CisJCXJldCA9IGFsbG9jX2lvX3NwYWNlKHMsIHJlcS0+QXR0cmlidXRlczIsICZyZXEtPkJhc2VQb3J0MiwKKwkJCQkgICAgIHJlcS0+TnVtUG9ydHMyLCByZXEtPklPQWRkckxpbmVzKTsKKwkJaWYgKHJldCkgewogCQkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NhdGlvbiBvZiByZXNvdXJjZSAyIGZhaWxlZFxuIik7CiAJCQlyZWxlYXNlX2lvX3NwYWNlKHMsIHJlcS0+QmFzZVBvcnQxLCByZXEtPk51bVBvcnRzMSk7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKIAljLT5pbyA9ICpyZXE7CiAJYy0+c3RhdGUgfD0gQ09ORklHX0lPX1JFUTsKIAlwX2Rldi0+X2lvID0gMTsKLQlyZXR1cm4gMDsKKwlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW5nIHJlc291cmNlcyBzdWNjZWVkZWQ6ICVkXG4iLCByZXQpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0gLyogcGNtY2lhX3JlcXVlc3RfaW8gKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfaW8pOwogCkBAIC02MzYsMTggKzcyNSwyMCBAQAogCWludCByZXQgPSAtRUlOVkFMLCBpcnEgPSAwOwogCWludCB0eXBlOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIk5vIGNhcmQgcHJlc2VudFxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIG91dDsKIAl9CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzIGxvY2tlZFxuIik7Ci0JCXJldHVybiAtRUFDQ0VTOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lSUV9SRVEpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSVJRIGFscmVhZHkgY29uZmlndXJlZFxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIERlY2lkZSB3aGF0IHR5cGUgb2YgaW50ZXJydXB0IHdlIGFyZSByZWdpc3RlcmluZyAqLwpAQCAtNzA4LDcgKzc5OSw3IEBACiAJaWYgKHJldCAmJiAhcy0+aXJxLkFzc2lnbmVkSVJRKSB7CiAJCWlmICghcy0+cGNpX2lycSkgewogCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5kZXYsICJubyBJUlEgZm91bmRcbiIpOwotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0OwogCQl9CiAJCXR5cGUgPSBJUlFGX1NIQVJFRDsKIAkJaXJxID0gcy0+cGNpX2lycTsKQEAgLTcyMCw3ICs4MTEsNyBAQAogCQlpZiAocmV0KSB7CiAJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnMtPmRldiwKIAkJCQkicmVxdWVzdF9pcnEoKSBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCkBAIC03NDMsNyArODM0LDEwIEBACiAJcGNtY2lhX3VzZWRfaXJxW2lycV0rKzsKICNlbmRpZgogCi0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK291dDoKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJcmV0dXJuIHJldDsKIH0gLyogcGNtY2lhX3JlcXVlc3RfaXJxICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X2lycSk7CiAKQEAgLTc5Niw2ICs4OTAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXdpbiA9ICZzLT53aW5bd107CiAKIAlpZiAoIShzLT5mZWF0dXJlcyAmIFNTX0NBUF9TVEFUSUNfTUFQKSkgewpAQCAtODAzLDYgKzg5OCw3IEBACiAJCQkJCQkgICAgICAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX01BUF9CRUxPV18xTUIpLCBzKTsKIAkJaWYgKCF3aW4tPnJlcykgewogCQkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NhdGluZyBtZW0gcmVnaW9uIGZhaWxlZFxuIik7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTgyMSw4ICs5MTcsMTAgQEAKIAlpZiAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX1VTRV9XQUlUKQogCQl3aW4tPmZsYWdzIHw9IE1BUF9VU0VfV0FJVDsKIAl3aW4tPmNhcmRfc3RhcnQgPSAwOworCiAJaWYgKHMtPm9wcy0+c2V0X21lbV9tYXAocywgd2luKSAhPSAwKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImZhaWxlZCB0byBzZXQgbWVtb3J5IG1hcHBpbmdcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlzLT5zdGF0ZSB8PSBTT0NLRVRfV0lOX1JFUSh3KTsKQEAgLTgzMyw2ICs5MzEsNyBAQAogCWVsc2UKIAkJcmVxLT5CYXNlID0gd2luLT5yZXMtPnN0YXJ0OwogCisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCSp3aCA9IHcgKyAxOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYwppbmRleCA1MmRiMTcyLi5lNmY3ZDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKQEAgLTIxLDYwICsyMSwxMiBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCi0KLWludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5yZXNvdXJjZV9vcHMtPnZhbGlkYXRlX21lbSkKLQkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+dmFsaWRhdGVfbWVtKHMpOwotCS8qIGlmIHRoZXJlIGlzIG5vIGNhbGxiYWNrLCB3ZSBjYW4gYXNzdW1lIHRoYXQgZXZlcnl0aGluZyBpcyBPSyAqLwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfdmFsaWRhdGVfbWVtKTsKLQotaW50IHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCi0JCSAgICAgdW5zaWduZWQgbG9uZyByX2VuZCwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCi17Ci0JaWYgKHMtPnJlc291cmNlX29wcy0+YWRqdXN0X2lvX3JlZ2lvbikKLQkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+YWRqdXN0X2lvX3JlZ2lvbihyZXMsIHJfc3RhcnQsIHJfZW5kLCBzKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2FkanVzdF9pb19yZWdpb24pOwotCi1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX2lvX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsIGludCBudW0sCi0JCSAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8pCi0JCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8oYmFzZSwgbnVtLCBhbGlnbiwgcyk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9maW5kX2lvX3JlZ2lvbik7Ci0KLXN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwgdV9sb25nIG51bSwgdV9sb25nIGFsaWduLAotCQkJCSBpbnQgbG93LCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAocy0+cmVzb3VyY2Vfb3BzLT5maW5kX21lbSkKLQkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+ZmluZF9tZW0oYmFzZSwgbnVtLCBhbGlnbiwgbG93LCBzKTsKLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbik7Ci0KLXZvaWQgcmVsZWFzZV9yZXNvdXJjZV9kYihzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAocy0+cmVzb3VyY2Vfb3BzLT5leGl0KQotCQlzLT5yZXNvdXJjZV9vcHMtPmV4aXQocyk7Ci19Ci0KLQogc3RhdGljIGludCBzdGF0aWNfaW5pdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJLyogdGhlIGdvb2QgdGhpbmcgYWJvdXQgU1NfQ0FQX1NUQVRJQ19NQVAgc29ja2V0cyBpcwogCSAqIHRoYXQgdGhleSBkb24ndCBuZWVkIGEgcmVzb3VyY2UgZGF0YWJhc2UgKi8KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJcy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQsMjIgKzY2LDIxIEBACiAJdW5zaWduZWQgbG9uZwlvZmZzZXQ7CiB9OwogCi1zdGF0aWMgdm9pZCBwY21jaWFfYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCitzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IHBjbWNpYV9hbGlnbih2b2lkICphbGlnbl9kYXRhLAorCQkJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhICpkYXRhID0gYWxpZ25fZGF0YTsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXJlc291cmNlX3NpemVfdCBzdGFydDsKIAogCXN0YXJ0ID0gKHJlcy0+c3RhcnQgJiB+ZGF0YS0+bWFzaykgKyBkYXRhLT5vZmZzZXQ7CiAJaWYgKHN0YXJ0IDwgcmVzLT5zdGFydCkKIAkJc3RhcnQgKz0gZGF0YS0+bWFzayArIDE7Ci0JcmVzLT5zdGFydCA9IHN0YXJ0OwogCiAjaWZkZWYgQ09ORklHX1g4NgogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewogCQlpZiAoc3RhcnQgJiAweDMwMCkgewogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTEzNyw5ICs4OCwxMSBAQAogI2lmZGVmIENPTkZJR19NNjhLCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CiAJCWlmICgocmVzLT5zdGFydCArIHNpemUgLSAxKSA+PSAxMDI0KQotCQkJcmVzLT5zdGFydCA9IHJlcy0+ZW5kOworCQkJc3RhcnQgPSByZXMtPmVuZDsKIAl9CiAjZW5kaWYKKworCXJldHVybiBzdGFydDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwppbmRleCA5YjBkYzQzLi40NjYzYjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKQEAgLTU1LDExICs1NSwxMCBAQAogCiBzdHJ1Y3Qgc29ja2V0X2RhdGEgewogCXN0cnVjdCByZXNvdXJjZV9tYXAJCW1lbV9kYjsKKwlzdHJ1Y3QgcmVzb3VyY2VfbWFwCQltZW1fZGJfdmFsaWQ7CiAJc3RydWN0IHJlc291cmNlX21hcAkJaW9fZGI7Ci0JdW5zaWduZWQgaW50CQkJcnNyY19tZW1fcHJvYmU7CiB9OwogCi1zdGF0aWMgREVGSU5FX01VVEVYKHJzcmNfbXV0ZXgpOwogI2RlZmluZSBNRU1fUFJPQkVfTE9XCSgxIDw8IDApCiAjZGVmaW5lIE1FTV9QUk9CRV9ISUdICSgxIDw8IDEpCiAKQEAgLTEyNSw4ICsxMjQsMTAgQEAKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICpwLCAqcTsKIAogCWZvciAocCA9IG1hcDsgOyBwID0gcC0+bmV4dCkgewotCQlpZiAoKHAgIT0gbWFwKSAmJiAocC0+YmFzZStwLT5udW0tMSA+PSBiYXNlKSkKLQkJCXJldHVybiAtMTsKKwkJaWYgKChwICE9IG1hcCkgJiYgKHAtPmJhc2UrcC0+bnVtID49IGJhc2UpKSB7CisJCQlwLT5udW0gPSBtYXgobnVtICsgYmFzZSAtIHAtPmJhc2UsIHAtPm51bSk7CisJCQlyZXR1cm4gMDsKKwkJfQogCQlpZiAoKHAtPm5leHQgPT0gbWFwKSB8fCAocC0+bmV4dC0+YmFzZSA+IGJhc2UrbnVtLTEpKQogCQkJYnJlYWs7CiAJfQpAQCAtMjY0LDM2ICsyNjUsNDQgQEAKIH0KICNlbmRpZgogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSAgICBUaGlzIGlzIHRyaWNreS4uLiB3aGVuIHdlIHNldCB1cCBDSVMgbWVtb3J5LCB3ZSB0cnkgdG8gdmFsaWRhdGUKLSAgICB0aGUgbWVtb3J5IHdpbmRvdyBzcGFjZSBhbGxvY2F0aW9ucy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGNhcmRzIHdpdGggYSB2YWxpZCBDSVMgKi8KKy8qKgorICogcmVhZGFibGUoKSAtIGlvbWVtIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGNhcmRzIHdpdGggYSB2YWxpZCBDSVMKKyAqLwogc3RhdGljIGludCByZWFkYWJsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCSAgICB1bnNpZ25lZCBpbnQgKmNvdW50KQogewotCWludCByZXQgPSAtMTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChzLT5mYWtlX2NpcykgeworCQlkZXZfZGJnKCZzLT5kZXYsICJmYWtlIENJUyBpcyBiZWluZyB1c2VkOiBjYW4ndCB2YWxpZGF0ZSBtZW1cbiIpOworCQlyZXR1cm4gMDsKKwl9CiAKIAlzLT5jaXNfbWVtLnJlcyA9IHJlczsKIAlzLT5jaXNfdmlydCA9IGlvcmVtYXAocmVzLT5zdGFydCwgcy0+bWFwX3NpemUpOwogCWlmIChzLT5jaXNfdmlydCkgewotCQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIGNvdW50KTsKLQkJLyogaW52YWxpZGF0ZSBtYXBwaW5nIGFuZCBDSVMgY2FjaGUgKi8KKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQkvKiBhcyB3ZSdyZSBvbmx5IGNhbGxlZCBmcm9tIHBjbWNpYS5jLCB3ZSdyZSBzYWZlICovCisJCWlmIChzLT5jYWxsYmFjay0+dmFsaWRhdGUpCisJCQlyZXQgPSBzLT5jYWxsYmFjay0+dmFsaWRhdGUocywgY291bnQpOworCQkvKiBpbnZhbGlkYXRlIG1hcHBpbmcgKi8KKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJaW91bm1hcChzLT5jaXNfdmlydCk7CiAJCXMtPmNpc192aXJ0ID0gTlVMTDsKLQkJZGVzdHJveV9jaXNfY2FjaGUocyk7CiAJfQogCXMtPmNpc19tZW0ucmVzID0gTlVMTDsKLQlpZiAoKHJldCAhPSAwKSB8fCAoKmNvdW50ID09IDApKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKKwlpZiAoKHJldCkgfHwgKCpjb3VudCA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKLS8qIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIHNpbXBsZSBtZW1vcnkgY2FyZHMgKi8KLXN0YXRpYyBpbnQgY2hlY2tzdW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQorLyoqCisgKiBjaGVja3N1bSgpIC0gaW9tZW0gdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3Igc2ltcGxlIG1lbW9yeSBjYXJkcworICovCitzdGF0aWMgaW50IGNoZWNrc3VtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJICAgIHVuc2lnbmVkIGludCAqdmFsdWUpCiB7CiAJcGNjYXJkX21lbV9tYXAgbWFwOwogCWludCBpLCBhID0gMCwgYiA9IC0xLCBkOwpAQCAtMzIxLDYxICszMzAsOTAgQEAKIAkJaW91bm1hcCh2aXJ0KTsKIAl9CiAKLQlyZXR1cm4gKGIgPT0gLTEpID8gLTEgOiAoYT4+MSk7CisJaWYgKGIgPT0gLTEpCisJCXJldHVybiAtRUlOVkFMOworCisJKnZhbHVlID0gYTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jaXNfcmVhZGFibGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQorLyoqCisgKiBkb192YWxpZGF0ZV9tZW0oKSAtIGxvdyBsZXZlbCB2YWxpZGF0ZSBhIG1lbW9yeSByZWdpb24gZm9yIFBDTUNJQSB1c2UKKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICogQGJhc2U6CXN0YXJ0IGFkZHJlc3Mgb2YgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEBzaXplOglzaXplIG9mIHJlc291cmNlIHRvIGNoZWNrCisgKiBAdmFsaWRhdGU6CXZhbGlkYXRpb24gZnVuY3Rpb24gdG8gdXNlCisgKgorICogZG9fdmFsaWRhdGVfbWVtKCkgc3BsaXRzIHVwIHRoZSBtZW1vcnkgcmVnaW9uIHdoaWNoIGlzIHRvIGJlIGNoZWNrZWQKKyAqIGludG8gdHdvIHBhcnRzLiBCb3RoIGFyZSBwYXNzZWQgdG8gdGhlIEB2YWxpZGF0ZSgpIGZ1bmN0aW9uLiBJZgorICogQHZhbGlkYXRlKCkgcmV0dXJucyBub24temVybywgb3IgdGhlIHZhbHVlIHBhcmFtZXRlciB0byBAdmFsaWRhdGUoKQorICogaXMgemVybywgb3IgdGhlIHZhbHVlIHBhcmFtZXRlciBpcyBkaWZmZXJlbnQgYmV0d2VlbiBib3RoIGNhbGxzLAorICogdGhlIGNoZWNrIGZhaWxzLCBhbmQgLUVJTlZBTCBpcyByZXR1cm5lZC4gRWxzZSwgMCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCBkb192YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkgICB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgIGludCB2YWxpZGF0ZSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkJIHVuc2lnbmVkIGludCAqdmFsdWUpKQogeworCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczEsICpyZXMyOwotCXVuc2lnbmVkIGludCBpbmZvMSwgaW5mbzI7Ci0JaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGluZm8xID0gMSwgaW5mbzIgPSAxOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJcmVzMSA9IGNsYWltX3JlZ2lvbihzLCBiYXNlLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLCAiUENNQ0lBIG1lbXByb2JlIik7CiAJcmVzMiA9IGNsYWltX3JlZ2lvbihzLCBiYXNlICsgc2l6ZS8yLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLAogCQkJIlBDTUNJQSBtZW1wcm9iZSIpOwogCiAJaWYgKHJlczEgJiYgcmVzMikgewotCQlyZXQgPSByZWFkYWJsZShzLCByZXMxLCAmaW5mbzEpOwotCQlyZXQgKz0gcmVhZGFibGUocywgcmVzMiwgJmluZm8yKTsKKwkJcmV0ID0gMDsKKwkJaWYgKHZhbGlkYXRlKSB7CisJCQlyZXQgPSB2YWxpZGF0ZShzLCByZXMxLCAmaW5mbzEpOworCQkJcmV0ICs9IHZhbGlkYXRlKHMsIHJlczIsICZpbmZvMik7CisJCX0KIAl9CiAKIAlmcmVlX3JlZ2lvbihyZXMyKTsKIAlmcmVlX3JlZ2lvbihyZXMxKTsKIAotCXJldHVybiAocmV0ID09IDIpICYmIChpbmZvMSA9PSBpbmZvMik7Ci19CisJZGV2X2RiZygmcy0+ZGV2LCAiY3M6IG1lbW9yeSBwcm9iZSAweCUwNmx4LTB4JTA2bHg6ICVwICVwICV1ICV1ICV1IiwKKwkJYmFzZSwgYmFzZStzaXplLTEsIHJlczEsIHJlczIsIHJldCwgaW5mbzEsIGluZm8yKTsKIAotc3RhdGljIGludAotY2hlY2tzdW1fbWF0Y2goc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXN0cnVjdCByZXNvdXJjZSAqcmVzMSwgKnJlczI7Ci0JaW50IGEgPSAtMSwgYiA9IC0xOworCWlmICgocmV0KSB8fCAoaW5mbzEgIT0gaW5mbzIpIHx8IChpbmZvMSA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXMxID0gY2xhaW1fcmVnaW9uKHMsIGJhc2UsIHNpemUvMiwgSU9SRVNPVVJDRV9NRU0sICJQQ01DSUEgbWVtcHJvYmUiKTsKLQlyZXMyID0gY2xhaW1fcmVnaW9uKHMsIGJhc2UgKyBzaXplLzIsIHNpemUvMiwgSU9SRVNPVVJDRV9NRU0sCi0JCQkiUENNQ0lBIG1lbXByb2JlIik7Ci0KLQlpZiAocmVzMSAmJiByZXMyKSB7Ci0JCWEgPSBjaGVja3N1bShzLCByZXMxKTsKLQkJYiA9IGNoZWNrc3VtKHMsIHJlczIpOworCWlmICh2YWxpZGF0ZSAmJiAhcy0+ZmFrZV9jaXMpIHsKKwkJLyogbW92ZSBpdCB0byB0aGUgdmFsaWRhdGVkIGRhdGEgc2V0ICovCisJCWFkZF9pbnRlcnZhbCgmc19kYXRhLT5tZW1fZGJfdmFsaWQsIGJhc2UsIHNpemUpOworCQlzdWJfaW50ZXJ2YWwoJnNfZGF0YS0+bWVtX2RiLCBiYXNlLCBzaXplKTsKIAl9CiAKLQlmcmVlX3JlZ2lvbihyZXMyKTsKLQlmcmVlX3JlZ2lvbihyZXMxKTsKLQotCXJldHVybiAoYSA9PSBiKSAmJiAoYSA+PSAwKTsKKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICBUaGUgbWVtb3J5IHByb2JlLiAgSWYgdGhlIG1lbW9yeSBsaXN0IGluY2x1ZGVzIGEgNjRLLWFsaWduZWQgYmxvY2sKLSAgICBiZWxvdyAxTUIsIHdlIHByb2JlIGluIDY0SyBjaHVua3MsIGFuZCBhcyBzb29uIGFzIHdlIGFjY3VtdWxhdGUgYXQKLSAgICBsZWFzdCBtZW1fbGltaXQgZnJlZSBzcGFjZSwgd2UgcXVpdC4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgZG9fbWVtX3Byb2JlKHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKKy8qKgorICogZG9fbWVtX3Byb2JlKCkgLSB2YWxpZGF0ZSBhIG1lbW9yeSByZWdpb24gZm9yIFBDTUNJQSB1c2UKKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICogQGJhc2U6CXN0YXJ0IGFkZHJlc3Mgb2YgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEBudW06CXNpemUgb2YgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEB2YWxpZGF0ZToJdmFsaWRhdGlvbiBmdW5jdGlvbiB0byB1c2UKKyAqIEBmYWxsYmFjazoJdmFsaWRhdGlvbiBmdW5jdGlvbiB0byB1c2UgaWYgdmFsaWRhdGUgZmFpbHMKKyAqCisgKiBkb19tZW1fcHJvYmUoKSBjaGVja3MgYSBtZW1vcnkgcmVnaW9uIGZvciB1c2UgYnkgdGhlIFBDTUNJQSBzdWJzeXN0ZW0uCisgKiBUbyBkbyBzbywgdGhlIGFyZWEgaXMgc3BsaXQgdXAgaW50byBzZW5zaWJsZSBwYXJ0cywgYW5kIHRoZW4gcGFzc2VkCisgKiBpbnRvIHRoZSBAdmFsaWRhdGUoKSBmdW5jdGlvbi4gT25seSBpZiBAdmFsaWRhdGUoKSBhbmQgQGZhbGxiYWNrKCkgZmFpbCwKKyAqIHRoZSBhcmVhIGlzIG1hcmtlZCBhcyB1bmF2YWliYWxlIGZvciB1c2UgYnkgdGhlIFBDTUNJQSBzdWJzeXN0ZW0uIFRoZQorICogZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdXNhYmxlIG1lbW9yeSBhcmVhLgorICovCitzdGF0aWMgaW50IGRvX21lbV9wcm9iZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdV9sb25nIGJhc2UsIHVfbG9uZyBudW0sCisJCQlpbnQgdmFsaWRhdGUgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCSAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqdmFsdWUpLAorCQkJaW50IGZhbGxiYWNrIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnZhbHVlKSkKIHsKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJdV9sb25nIGksIGosIGJhZCwgZmFpbCwgc3RlcDsKQEAgLTM5MywxNSArNDMxLDE0IEBACiAJZm9yIChpID0gaiA9IGJhc2U7IGkgPCBiYXNlK251bTsgaSA9IGogKyBzdGVwKSB7CiAJCWlmICghZmFpbCkgewogCQkJZm9yIChqID0gaTsgaiA8IGJhc2UrbnVtOyBqICs9IHN0ZXApIHsKLQkJCQlpZiAoY2lzX3JlYWRhYmxlKHMsIGosIHN0ZXApKQorCQkJCWlmICghZG9fdmFsaWRhdGVfbWVtKHMsIGosIHN0ZXAsIHZhbGlkYXRlKSkKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCQlmYWlsID0gKChpID09IGJhc2UpICYmIChqID09IGJhc2UrbnVtKSk7CiAJCX0KLQkJaWYgKGZhaWwpIHsKLQkJCWZvciAoaiA9IGk7IGogPCBiYXNlK251bTsgaiArPSAyKnN0ZXApCi0JCQkJaWYgKGNoZWNrc3VtX21hdGNoKHMsIGosIHN0ZXApICYmCi0JCQkJCWNoZWNrc3VtX21hdGNoKHMsIGogKyBzdGVwLCBzdGVwKSkKKwkJaWYgKChmYWlsKSAmJiAoZmFsbGJhY2spKSB7CisJCQlmb3IgKGogPSBpOyBqIDwgYmFzZStudW07IGogKz0gc3RlcCkKKwkJCQlpZiAoIWRvX3ZhbGlkYXRlX21lbShzLCBqLCBzdGVwLCBmYWxsYmFjaykpCiAJCQkJCWJyZWFrOwogCQl9CiAJCWlmIChpICE9IGopIHsKQEAgLTQxNiw4ICs0NTMsMTQgQEAKIAlyZXR1cm4gbnVtIC0gYmFkOwogfQogCisKICNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFCiAKKy8qKgorICogaW52X3Byb2JlKCkgLSB0b3AtdG8tYm90dG9tIHNlYXJjaCBmb3Igb25lIHVzdWFibGUgaGlnaCBtZW1vcnkgYXJlYQorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKiBAbToJCXJlc291cmNlX21hcCB0byBjaGVjaworICovCiBzdGF0aWMgdV9sb25nIGludl9wcm9iZShzdHJ1Y3QgcmVzb3VyY2VfbWFwICptLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CkBAIC00MzIsOSArNDc1LDE4IEBACiAJfQogCWlmIChtLT5iYXNlIDwgMHgxMDAwMDApCiAJCXJldHVybiAwOwotCXJldHVybiBkb19tZW1fcHJvYmUobS0+YmFzZSwgbS0+bnVtLCBzKTsKKwlyZXR1cm4gZG9fbWVtX3Byb2JlKHMsIG0tPmJhc2UsIG0tPm51bSwgcmVhZGFibGUsIGNoZWNrc3VtKTsKIH0KIAorLyoqCisgKiB2YWxpZGF0ZV9tZW0oKSAtIG1lbW9yeSBwcm9iZSBmdW5jdGlvbgorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKiBAcHJvYmVfbWFzazogTUVNX1BST0JFX0xPVyB8IE1FTV9QUk9CRV9ISUdICisgKgorICogVGhlIG1lbW9yeSBwcm9iZS4gIElmIHRoZSBtZW1vcnkgbGlzdCBpbmNsdWRlcyBhIDY0Sy1hbGlnbmVkIGJsb2NrCisgKiBiZWxvdyAxTUIsIHdlIHByb2JlIGluIDY0SyBjaHVua3MsIGFuZCBhcyBzb29uIGFzIHdlIGFjY3VtdWxhdGUgYXQKKyAqIGxlYXN0IG1lbV9saW1pdCBmcmVlIHNwYWNlLCB3ZSBxdWl0LiBSZXR1cm5zIDAgb24gdXN1YWJsZSBwb3J0cy4KKyAqLwogc3RhdGljIGludCB2YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBwcm9iZV9tYXNrKQogewogCXN0cnVjdCByZXNvdXJjZV9tYXAgKm0sIG1tOwpAQCAtNDQ2LDYgKzQ5OCw4IEBACiAJaWYgKHByb2JlX21hc2sgJiBNRU1fUFJPQkVfSElHSCkgewogCQlpZiAoaW52X3Byb2JlKHNfZGF0YS0+bWVtX2RiLm5leHQsIHMpID4gMCkKIAkJCXJldHVybiAwOworCQlpZiAoc19kYXRhLT5tZW1fZGJfdmFsaWQubmV4dCAhPSAmc19kYXRhLT5tZW1fZGJfdmFsaWQpCisJCQlyZXR1cm4gMDsKIAkJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnMtPmRldiwKIAkJCSAgICJjczogd2FybmluZzogbm8gaGlnaCBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNDU3LDcgKzUxMSw4IEBACiAJCWlmIChtbS5iYXNlID49IDB4MTAwMDAwKQogCQkJY29udGludWU7CiAJCWlmICgobW0uYmFzZSB8IG1tLm51bSkgJiAweGZmZmYpIHsKLQkJCW9rICs9IGRvX21lbV9wcm9iZShtbS5iYXNlLCBtbS5udW0sIHMpOworCQkJb2sgKz0gZG9fbWVtX3Byb2JlKHMsIG1tLmJhc2UsIG1tLm51bSwgcmVhZGFibGUsCisJCQkJCSAgIGNoZWNrc3VtKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCS8qIFNwZWNpYWwgcHJvYmUgZm9yIDY0Sy1hbGlnbmVkIGJsb2NrICovCkBAIC00NjcsNyArNTIyLDggQEAKIAkJCQlpZiAob2sgPj0gbWVtX2xpbWl0KQogCQkJCQlzdWJfaW50ZXJ2YWwoJnNfZGF0YS0+bWVtX2RiLCBiLCAweDEwMDAwKTsKIAkJCQllbHNlCi0JCQkJCW9rICs9IGRvX21lbV9wcm9iZShiLCAweDEwMDAwLCBzKTsKKwkJCQkJb2sgKz0gZG9fbWVtX3Byb2JlKHMsIGIsIDB4MTAwMDAsCisJCQkJCQkJICAgcmVhZGFibGUsIGNoZWNrc3VtKTsKIAkJCX0KIAkJfQogCX0KQEAgLTQ4MCw2ICs1MzYsMTMgQEAKIAogI2Vsc2UgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqLwogCisvKioKKyAqIHZhbGlkYXRlX21lbSgpIC0gbWVtb3J5IHByb2JlIGZ1bmN0aW9uCisgKiBAczoJCVBDTUNJQSBzb2NrZXQgdG8gdmFsaWRhdGUKKyAqIEBwcm9iZV9tYXNrOiBpZ25vcmVkCisgKgorICogUmV0dXJucyAwIG9uIHVzdWFibGUgcG9ydHMuCisgKi8KIHN0YXRpYyBpbnQgdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgcHJvYmVfbWFzaykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICptLCBtbTsKQEAgLTQ4OCw3ICs1NTEsNyBAQAogCiAJZm9yIChtID0gc19kYXRhLT5tZW1fZGIubmV4dDsgbSAhPSAmc19kYXRhLT5tZW1fZGI7IG0gPSBtbS5uZXh0KSB7CiAJCW1tID0gKm07Ci0JCW9rICs9IGRvX21lbV9wcm9iZShtbS5iYXNlLCBtbS5udW0sIHMpOworCQlvayArPSBkb19tZW1fcHJvYmUocywgbW0uYmFzZSwgbW0ubnVtLCByZWFkYWJsZSwgY2hlY2tzdW0pOwogCX0KIAlpZiAob2sgPiAwKQogCQlyZXR1cm4gMDsKQEAgLTQ5OCwzMSArNTYxLDMxIEBACiAjZW5kaWYgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqLwogCiAKLS8qCisvKioKKyAqIHBjbWNpYV9ub25zdGF0aWNfdmFsaWRhdGVfbWVtKCkgLSB0cnkgdG8gdmFsaWRhdGUgaW9tZW0gZm9yIFBDTUNJQSB1c2UKKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICoKKyAqIFRoaXMgaXMgdHJpY2t5Li4uIHdoZW4gd2Ugc2V0IHVwIENJUyBtZW1vcnksIHdlIHRyeSB0byB2YWxpZGF0ZQorICogdGhlIG1lbW9yeSB3aW5kb3cgc3BhY2UgYWxsb2NhdGlvbnMuCisgKgogICogTG9ja2luZyBub3RlOiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNrdF9tdXRleCBoZWxkIQogICovCiBzdGF0aWMgaW50IHBjbWNpYV9ub25zdGF0aWNfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAl1bnNpZ25lZCBpbnQgcHJvYmVfbWFzayA9IE1FTV9QUk9CRV9MT1c7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAotCWlmICghcHJvYmVfbWVtKQorCWlmICghcHJvYmVfbWVtIHx8ICEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7Ci0KIAlpZiAocy0+ZmVhdHVyZXMgJiBTU19DQVBfUEFHRV9SRUdTKQogCQlwcm9iZV9tYXNrID0gTUVNX1BST0JFX0hJR0g7CiAKLQlpZiAocHJvYmVfbWFzayAmIH5zX2RhdGEtPnJzcmNfbWVtX3Byb2JlKSB7Ci0JCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKQotCQkJcmV0ID0gdmFsaWRhdGVfbWVtKHMsIHByb2JlX21hc2spOwotCQlpZiAoIXJldCkKLQkJCXNfZGF0YS0+cnNyY19tZW1fcHJvYmUgfD0gcHJvYmVfbWFzazsKLQl9CisJcmV0ID0gdmFsaWRhdGVfbWVtKHMsIHByb2JlX21hc2spOwogCi0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKKwlpZiAoc19kYXRhLT5tZW1fZGJfdmFsaWQubmV4dCAhPSAmc19kYXRhLT5tZW1fZGJfdmFsaWQpCisJCXJldHVybiAwOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTUzMyw4ICs1OTYsOCBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAJKm1hcDsKIH07CiAKLXN0YXRpYyB2b2lkCi1wY21jaWFfY29tbW9uX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorc3RhdGljIHJlc291cmNlX3NpemVfdAorcGNtY2lhX2NvbW1vbl9hbGlnbih2b2lkICphbGlnbl9kYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhICpkYXRhID0gYWxpZ25fZGF0YTsKQEAgLTU0NSwxNyArNjA4LDE4IEBACiAJc3RhcnQgPSAocmVzLT5zdGFydCAmIH5kYXRhLT5tYXNrKSArIGRhdGEtPm9mZnNldDsKIAlpZiAoc3RhcnQgPCByZXMtPnN0YXJ0KQogCQlzdGFydCArPSBkYXRhLT5tYXNrICsgMTsKLQlyZXMtPnN0YXJ0ID0gc3RhcnQ7CisJcmV0dXJuIHN0YXJ0OwogfQogCi1zdGF0aWMgdm9pZAotcGNtY2lhX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKLQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorc3RhdGljIHJlc291cmNlX3NpemVfdAorcGNtY2lhX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhICpkYXRhID0gYWxpZ25fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICptOworCXJlc291cmNlX3NpemVfdCBzdGFydDsKIAotCXBjbWNpYV9jb21tb25fYWxpZ24oZGF0YSwgcmVzLCBzaXplLCBhbGlnbik7CisJc3RhcnQgPSBwY21jaWFfY29tbW9uX2FsaWduKGRhdGEsIHJlcywgc2l6ZSwgYWxpZ24pOwogCiAJZm9yIChtID0gZGF0YS0+bWFwLT5uZXh0OyBtICE9IGRhdGEtPm1hcDsgbSA9IG0tPm5leHQpIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCA9IG0tPmJhc2U7CkBAIC01NjcsOCArNjMxLDcgQEAKIAkJICogZml0IGhlcmUuCiAJCSAqLwogCQlpZiAocmVzLT5zdGFydCA8IHN0YXJ0KSB7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCQlwY21jaWFfY29tbW9uX2FsaWduKGRhdGEsIHJlcywgc2l6ZSwgYWxpZ24pOworCQkJc3RhcnQgPSBwY21jaWFfY29tbW9uX2FsaWduKGRhdGEsIHJlcywgc2l6ZSwgYWxpZ24pOwogCQl9CiAKIAkJLyoKQEAgLTU4Niw3ICs2NDksOSBAQAogCSAqIElmIHdlIGZhaWxlZCB0byBmaW5kIHNvbWV0aGluZyBzdWl0YWJsZSwgZW5zdXJlIHdlIGZhaWwuCiAJICovCiAJaWYgKG0gPT0gZGF0YS0+bWFwKQotCQlyZXMtPnN0YXJ0ID0gcmVzLT5lbmQ7CisJCXN0YXJ0ID0gcmVzLT5lbmQ7CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIC8qCkBAIC02MDAsNyArNjY1LDYgQEAKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJaW50IHJldCA9IC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKIAlmb3IgKG0gPSBzX2RhdGEtPmlvX2RiLm5leHQ7IG0gIT0gJnNfZGF0YS0+aW9fZGI7IG0gPSBtLT5uZXh0KSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBtLT5iYXNlOwogCQl1bnNpZ25lZCBsb25nIGVuZCA9IG0tPmJhc2UgKyBtLT5udW0gLSAxOwpAQCAtNjExLDcgKzY3NSw2IEBACiAJCXJldCA9IGFkanVzdF9yZXNvdXJjZShyZXMsIHJfc3RhcnQsIHJfZW5kIC0gcl9zdGFydCArIDEpOwogCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02NDUsNyArNzA4LDYgQEAKIAlkYXRhLm9mZnNldCA9IGJhc2UgJiBkYXRhLm1hc2s7CiAJZGF0YS5tYXAgPSAmc19kYXRhLT5pb19kYjsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogI2lmZGVmIENPTkZJR19QQ0kKIAlpZiAocy0+Y2JfZGV2KSB7CiAJCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uocy0+Y2JfZGV2LT5idXMsIHJlcywgbnVtLCAxLApAQCAtNjU0LDcgKzcxNiw2IEBACiAjZW5kaWYKIAkJcmV0ID0gYWxsb2NhdGVfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgcmVzLCBudW0sIG1pbiwgfjBVTCwKIAkJCQkJMSwgcGNtY2lhX2FsaWduLCAmZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCWlmIChyZXQgIT0gMCkgewogCQlrZnJlZShyZXMpOwpAQCAtNjcwLDE1ICs3MzEsMTUgQEAKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBtaW4sIG1heDsKLQlpbnQgcmV0LCBpOworCWludCByZXQsIGksIGo7CiAKIAlsb3cgPSBsb3cgfHwgIShzLT5mZWF0dXJlcyAmIFNTX0NBUF9QQUdFX1JFR1MpOwogCiAJZGF0YS5tYXNrID0gYWxpZ24gLSAxOwogCWRhdGEub2Zmc2V0ID0gYmFzZSAmIGRhdGEubWFzazsKLQlkYXRhLm1hcCA9ICZzX2RhdGEtPm1lbV9kYjsKIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJZGF0YS5tYXAgPSAmc19kYXRhLT5tZW1fZGJfdmFsaWQ7CiAJCWlmIChsb3cpIHsKIAkJCW1heCA9IDB4MTAwMDAwVUw7CiAJCQltaW4gPSBiYXNlIDwgbWF4ID8gYmFzZSA6IDA7CkBAIC02ODcsMTcgKzc0OCwyMyBAQAogCQkJbWluID0gMHgxMDAwMDBVTCArIGJhc2U7CiAJCX0KIAotCQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewogI2lmZGVmIENPTkZJR19QQ0kKLQkJaWYgKHMtPmNiX2RldikgewotCQkJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShzLT5jYl9kZXYtPmJ1cywgcmVzLCBudW0sCi0JCQkJCQkgICAgIDEsIG1pbiwgMCwKLQkJCQkJCSAgICAgcGNtY2lhX2FsaWduLCAmZGF0YSk7Ci0JCX0gZWxzZQorCQkJaWYgKHMtPmNiX2RldikgeworCQkJCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uocy0+Y2JfZGV2LT5idXMsCisJCQkJCQkJcmVzLCBudW0sIDEsIG1pbiwgMCwKKwkJCQkJCQlwY21jaWFfYWxpZ24sICZkYXRhKTsKKwkJCX0gZWxzZQogI2VuZGlmCi0JCQlyZXQgPSBhbGxvY2F0ZV9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcywgbnVtLCBtaW4sCi0JCQkJCQltYXgsIDEsIHBjbWNpYV9hbGlnbiwgJmRhdGEpOwotCQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOworCQkJeworCQkJCXJldCA9IGFsbG9jYXRlX3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwKKwkJCQkJCQlyZXMsIG51bSwgbWluLCBtYXgsIDEsCisJCQkJCQkJcGNtY2lhX2FsaWduLCAmZGF0YSk7CisJCQl9CisJCQlpZiAocmV0ID09IDApCisJCQkJYnJlYWs7CisJCQlkYXRhLm1hcCA9ICZzX2RhdGEtPm1lbV9kYjsKKwkJfQogCQlpZiAocmV0ID09IDAgfHwgbG93KQogCQkJYnJlYWs7CiAJCWxvdyA9IDE7CkBAIC03MjAsMjUgKzc4NywxOCBAQAogCWlmIChlbmQgPCBzdGFydCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQUREX01BTkFHRURfUkVTT1VSQ0U6CiAJCXJldCA9IGFkZF9pbnRlcnZhbCgmZGF0YS0+bWVtX2RiLCBzdGFydCwgc2l6ZSk7CisJCWlmICghcmV0KQorCQkJZG9fbWVtX3Byb2JlKHMsIHN0YXJ0LCBzaXplLCBOVUxMLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBSRU1PVkVfTUFOQUdFRF9SRVNPVVJDRToKIAkJcmV0ID0gc3ViX2ludGVydmFsKCZkYXRhLT5tZW1fZGIsIHN0YXJ0LCBzaXplKTsKLQkJaWYgKCFyZXQpIHsKLQkJCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQ7Ci0JCQlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNvY2tldCwgJnBjbWNpYV9zb2NrZXRfbGlzdCwgc29ja2V0X2xpc3QpCi0JCQkJcmVsZWFzZV9jaXNfbWVtKHNvY2tldCk7Ci0JCQl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzU2LDcgKzgxNiw2IEBACiAJaWYgKGVuZCA+IElPX1NQQUNFX0xJTUlUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBBRERfTUFOQUdFRF9SRVNPVVJDRToKIAkJaWYgKGFkZF9pbnRlcnZhbCgmZGF0YS0+aW9fZGIsIHN0YXJ0LCBzaXplKSAhPSAwKSB7CkBAIC03NzUsNyArODM0LDYgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODAxLDggKzg1OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJcmVzID0gcy0+Y2JfZGV2LT5idXMtPnJlc291cmNlW2ldOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2Uocy0+Y2JfZGV2LT5idXMsIHJlcywgaSkgewogCQlpZiAoIXJlcykKIAkJCWNvbnRpbnVlOwogCkBAIC04NTksNiArOTE2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkYXRhLT5tZW1fZGIubmV4dCA9ICZkYXRhLT5tZW1fZGI7CisJZGF0YS0+bWVtX2RiX3ZhbGlkLm5leHQgPSAmZGF0YS0+bWVtX2RiX3ZhbGlkOwogCWRhdGEtPmlvX2RiLm5leHQgPSAmZGF0YS0+aW9fZGI7CiAKIAlzLT5yZXNvdXJjZV9kYXRhID0gKHZvaWQgKikgZGF0YTsKQEAgLTg3Myw3ICs5MzEsMTAgQEAKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKmRhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnAsICpxOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CisJZm9yIChwID0gZGF0YS0+bWVtX2RiX3ZhbGlkLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYl92YWxpZDsgcCA9IHEpIHsKKwkJcSA9IHAtPm5leHQ7CisJCWtmcmVlKHApOworCX0KIAlmb3IgKHAgPSBkYXRhLT5tZW1fZGIubmV4dDsgcCAhPSAmZGF0YS0+bWVtX2RiOyBwID0gcSkgewogCQlxID0gcC0+bmV4dDsKIAkJa2ZyZWUocCk7CkBAIC04ODIsNyArOTQzLDYgQEAKIAkJcSA9IHAtPm5leHQ7CiAJCWtmcmVlKHApOwogCX0KLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogfQogCiAKQEAgLTkwOSw3ICs5NjksNyBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnA7CiAJc3NpemVfdCByZXQgPSAwOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlkYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAogCWZvciAocCA9IGRhdGEtPmlvX2RiLm5leHQ7IHAgIT0gJmRhdGEtPmlvX2RiOyBwID0gcC0+bmV4dCkgewpAQCAtOTIxLDcgKzk4MSw3IEBACiAJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlICsgcC0+bnVtIC0gMSkpOwogCX0KIAotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk0OSw5ICsxMDA5LDExIEBACiAJaWYgKGVuZF9hZGRyIDwgc3RhcnRfYWRkcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldCA9IGFkanVzdF9pbyhzLCBhZGQsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKIAlpZiAoIXJldCkKIAkJcy0+cmVzb3VyY2Vfc2V0dXBfbmV3ID0gMTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiB9CkBAIC05NjUsOSArMTAyNywxOSBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnA7CiAJc3NpemVfdCByZXQgPSAwOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlkYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAorCWZvciAocCA9IGRhdGEtPm1lbV9kYl92YWxpZC5uZXh0OyBwICE9ICZkYXRhLT5tZW1fZGJfdmFsaWQ7CisJICAgICBwID0gcC0+bmV4dCkgeworCQlpZiAocmV0ID4gKFBBR0VfU0laRSAtIDEwKSkKKwkJCWNvbnRpbnVlOworCQlyZXQgKz0gc25wcmludGYoJmJ1ZltyZXRdLCAoUEFHRV9TSVpFIC0gcmV0IC0gMSksCisJCQkJIjB4JTA4bHggLSAweCUwOGx4XG4iLAorCQkJCSgodW5zaWduZWQgbG9uZykgcC0+YmFzZSksCisJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlICsgcC0+bnVtIC0gMSkpOworCX0KKwogCWZvciAocCA9IGRhdGEtPm1lbV9kYi5uZXh0OyBwICE9ICZkYXRhLT5tZW1fZGI7IHAgPSBwLT5uZXh0KSB7CiAJCWlmIChyZXQgPiAoUEFHRV9TSVpFIC0gMTApKQogCQkJY29udGludWU7CkBAIC05NzcsNyArMTA0OSw3IEBACiAJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlICsgcC0+bnVtIC0gMSkpOwogCX0KIAotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMDUsOSArMTA3NywxMSBAQAogCWlmIChlbmRfYWRkciA8IHN0YXJ0X2FkZHIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXQgPSBhZGp1c3RfbWVtb3J5KHMsIGFkZCwgc3RhcnRfYWRkciwgZW5kX2FkZHIpOwogCWlmICghcmV0KQogCQlzLT5yZXNvdXJjZV9zZXR1cF9uZXcgPSAxOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKaW5kZXggN2E0NTYwMC4uMDgyNzgwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKQEAgLTg4LDE1ICs4OCwxNCBAQAogc3RhdGljIHNzaXplX3QgcGNjYXJkX3N0b3JlX2luc2VydChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXNzaXplX3QgcmV0OwogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gdG9fc29ja2V0KGRldik7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IHBjbWNpYV9pbnNlcnRfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX0lOU0VSVCk7CiAKLQlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CisJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKGNhcmRfaW5zZXJ0LCAwMjAwLCBOVUxMLCBwY2NhcmRfc3RvcmVfaW5zZXJ0KTsKIApAQCAtMTEzLDE4ICsxMTIsMjIgQEAKIAkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoZGV2KTsKKwlzc2l6ZV90IHJldCA9IGNvdW50OwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSAmJiAhc3RybmNtcChidWYsICJvZmYiLCAzKSkKLQkJcmV0ID0gcGNtY2lhX3N1c3BlbmRfY2FyZChzKTsKLQllbHNlIGlmICgocy0+c3RhdGUgJiBTT0NLRVRfU1VTUEVORCkgJiYgIXN0cm5jbXAoYnVmLCAib24iLCAyKSkKLQkJcmV0ID0gcGNtY2lhX3Jlc3VtZV9jYXJkKHMpOworCWlmICghc3RybmNtcChidWYsICJvZmYiLCAzKSkKKwkJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9TVVNQRU5EKTsKKwllbHNlIHsKKwkJaWYgKCFzdHJuY21wKGJ1ZiwgIm9uIiwgMikpCisJCQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFU1VNRSk7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJfQogCi0JcmV0dXJuIHJldCA/IC1FTk9ERVYgOiBjb3VudDsKKwlyZXR1cm4gcmV0OwogfQogc3RhdGljIERFVklDRV9BVFRSKGNhcmRfcG1fc3RhdGUsIDA2NDQsIHBjY2FyZF9zaG93X2NhcmRfcG1fc3RhdGUsIHBjY2FyZF9zdG9yZV9jYXJkX3BtX3N0YXRlKTsKIApAQCAtMTMyLDE1ICsxMzUsMTQgQEAKIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3NpemVfdCByZXQ7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoZGV2KTsKIAogCWlmICghY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gcGNtY2lhX2VqZWN0X2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9FSkVDVCk7CiAKLQlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CisJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKGNhcmRfZWplY3QsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9lamVjdCk7CiAKQEAgLTE2Nyw3ICsxNjksOSBAQAogCXJldCA9IHNzY2FuZihidWYsICIweCV4XG4iLCAmbWFzayk7CiAKIAlpZiAocmV0ID09IDEpIHsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJcy0+aXJxX21hc2sgJj0gbWFzazsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXQgPSAwOwogCX0KIApAQCAtMTg3LDE2NCArMTkxLDIyIEBACiAJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoZGV2KTsKIAogCWlmICghY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWlmICghcy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSkKIAkJcy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAotCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7Ci0JaWYgKChzLT5jYWxsYmFjaykgJiYKLQkgICAgKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpICYmCi0JICAgICEocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpIHsKLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KHMtPmNhbGxiYWNrLT5vd25lcikpIHsKLQkJCXMtPmNhbGxiYWNrLT5yZXF1ZXJ5KHMsIDApOwotCQkJbW9kdWxlX3B1dChzLT5jYWxsYmFjay0+b3duZXIpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpOwogCiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKGF2YWlsYWJsZV9yZXNvdXJjZXNfc2V0dXBfZG9uZSwgMDYwMCwgcGNjYXJkX3Nob3dfcmVzb3VyY2UsIHBjY2FyZF9zdG9yZV9yZXNvdXJjZSk7CiAKLQotc3RhdGljIHNzaXplX3QgcGNjYXJkX2V4dHJhY3RfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQl0dXBsZV90IHR1cGxlOwotCWludCBzdGF0dXMsIGk7Ci0JbG9mZl90IHBvaW50ZXIgPSAwOwotCXNzaXplX3QgcmV0ID0gMDsKLQl1X2NoYXIgKnR1cGxlYnVmZmVyOwotCXVfY2hhciAqdGVtcGJ1ZmZlcjsKLQotCXR1cGxlYnVmZmVyID0ga21hbGxvYyhzaXplb2YodV9jaGFyKSAqIDI1NiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0dXBsZWJ1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0ZW1wYnVmZmVyID0ga21hbGxvYyhzaXplb2YodV9jaGFyKSAqIDI1OCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0ZW1wYnVmZmVyKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV90dXBsZTsKLQl9Ci0KLQltZW1zZXQoJnR1cGxlLCAwLCBzaXplb2YodHVwbGVfdCkpOwotCi0JdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9MSU5LIHwgVFVQTEVfUkVUVVJOX0NPTU1PTjsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCi0Jc3RhdHVzID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJnR1cGxlKTsKLQl3aGlsZSAoIXN0YXR1cykgewotCQl0dXBsZS5UdXBsZURhdGEgPSB0dXBsZWJ1ZmZlcjsKLQkJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotCQltZW1zZXQodHVwbGVidWZmZXIsIDAsIHNpemVvZih1X2NoYXIpICogMjU1KTsKLQotCQlzdGF0dXMgPSBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocywgJnR1cGxlKTsKLQkJaWYgKHN0YXR1cykKLQkJCWJyZWFrOwotCi0JCWlmIChvZmYgPCAocG9pbnRlciArIDIgKyB0dXBsZS5UdXBsZURhdGFMZW4pKSB7Ci0JCQl0ZW1wYnVmZmVyWzBdID0gdHVwbGUuVHVwbGVDb2RlICYgMHhmZjsKLQkJCXRlbXBidWZmZXJbMV0gPSB0dXBsZS5UdXBsZUxpbmsgJiAweGZmOwotCQkJZm9yIChpID0gMDsgaSA8IHR1cGxlLlR1cGxlRGF0YUxlbjsgaSsrKQotCQkJCXRlbXBidWZmZXJbaSArIDJdID0gdHVwbGVidWZmZXJbaV0gJiAweGZmOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgKDIgKyB0dXBsZS5UdXBsZURhdGFMZW4pOyBpKyspIHsKLQkJCQlpZiAoKChpICsgcG9pbnRlcikgPj0gb2ZmKSAmJgotCQkJCSAgICAoaSArIHBvaW50ZXIpIDwgKG9mZiArIGNvdW50KSkgewotCQkJCQlidWZbcmV0XSA9IHRlbXBidWZmZXJbaV07Ci0JCQkJCXJldCsrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXBvaW50ZXIgKz0gMiArIHR1cGxlLlR1cGxlRGF0YUxlbjsKLQotCQlpZiAocG9pbnRlciA+PSAob2ZmICsgY291bnQpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHR1cGxlLlR1cGxlQ29kZSA9PSBDSVNUUExfRU5EKQotCQkJYnJlYWs7Ci0JCXN0YXR1cyA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJnR1cGxlKTsKLQl9Ci0KLQlrZnJlZSh0ZW1wYnVmZmVyKTsKLSBmcmVlX3R1cGxlOgotCWtmcmVlKHR1cGxlYnVmZmVyKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X2NpcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkgICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0JdW5zaWduZWQgaW50IHNpemUgPSAweDIwMDsKLQotCWlmIChvZmYgPj0gc2l6ZSkKLQkJY291bnQgPSAwOwotCWVsc2UgewotCQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLQkJdW5zaWduZWQgaW50IGNoYWluczsKLQotCQlpZiAob2ZmICsgY291bnQgPiBzaXplKQotCQkJY291bnQgPSBzaXplIC0gb2ZmOwotCi0JCXMgPSB0b19zb2NrZXQoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQotCQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlpZiAocGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmY2hhaW5zKSkKLQkJCXJldHVybiAtRUlPOwotCQlpZiAoIWNoYWlucykKLQkJCXJldHVybiAtRU5PREFUQTsKLQotCQljb3VudCA9IHBjY2FyZF9leHRyYWN0X2NpcyhzLCBidWYsIG9mZiwgY291bnQpOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QgcGNjYXJkX3N0b3JlX2NpcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAob2ZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjb3VudCA+PSBDSVNUUExfTUFYX0NJU19TSVpFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVycm9yID0gcGNtY2lhX3JlcGxhY2VfY2lzKHMsIGJ1ZiwgY291bnQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIC1FSU87Ci0KLQltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwotCWlmICgocy0+Y2FsbGJhY2spICYmIChzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSAmJgotCSAgICAhKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7Ci0JCWlmICh0cnlfbW9kdWxlX2dldChzLT5jYWxsYmFjay0+b3duZXIpKSB7Ci0JCQlzLT5jYWxsYmFjay0+cmVxdWVyeShzLCAxKTsKLQkJCW1vZHVsZV9wdXQocy0+Y2FsbGJhY2stPm93bmVyKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJnMtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBjY2FyZF9zb2NrZXRfYXR0cmlidXRlc1tdID0gewogCSZkZXZfYXR0cl9jYXJkX3R5cGUuYXR0ciwKIAkmZGV2X2F0dHJfY2FyZF92b2x0YWdlLmF0dHIsCkBAIC0zNjIsMjggKzIyNCwxMiBAQAogCS5hdHRycyA9IHBjY2FyZF9zb2NrZXRfYXR0cmlidXRlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBwY2NhcmRfY2lzX2F0dHIgPSB7Ci0JLmF0dHIgPSB7IC5uYW1lID0gImNpcyIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2l6ZSA9IDB4MjAwLAotCS5yZWFkID0gcGNjYXJkX3Nob3dfY2lzLAotCS53cml0ZSA9IHBjY2FyZF9zdG9yZV9jaXMsCi19OwotCiBpbnQgcGNjYXJkX3N5c2ZzX2FkZF9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KQogewotCWludCByZXQgPSAwOwotCi0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZzb2NrZXRfYXR0cnMpOwotCWlmICghcmV0KSB7Ci0JCXJldCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCAmcGNjYXJkX2Npc19hdHRyKTsKLQkJaWYgKHJldCkKLQkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmc29ja2V0X2F0dHJzKTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZzb2NrZXRfYXR0cnMpOwogfQogCiB2b2lkIHBjY2FyZF9zeXNmc19yZW1vdmVfc29ja2V0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmRldi0+a29iaiwgJnBjY2FyZF9jaXNfYXR0cik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZzb2NrZXRfYXR0cnMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jIGIvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNTYwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmMKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBQQ01DSUEgc29ja2V0IGNvZGUgZm9yIHRoZSBNeUNhYmxlIFhYUzE1MDAgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBNYW51ZWwgTGF1c3MgPG1hbnVlbC5sYXVzc0BnbWFpbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKworI2RlZmluZSBNRU1fTUFQX1NJWkUJMHg0MDAwMDAKKyNkZWZpbmUgSU9fTUFQX1NJWkUJMHgxMDAwCisKKworLyoKKyAqIDMuM1YgY2FyZHMgb25seTsgYWxsIGludGVyZmFjaW5nIGlzIGRvbmUgdmlhIGdwaW9zOgorICoKKyAqIDAvMTogIGNhcmRkZXRlY3QgKDAwID0gY2FyZCBwcmVzZW50LCB4eCA9IGh1aCkKKyAqIDQ6CSBjYXJkIGlycQorICogMjA0OiAgcmVzZXQgKGhpZ2gtYWN0KQorICogMjA1OiAgYnVmZmVyIGVuYWJsZSAobG93LWFjdCkKKyAqIDIwOC8yMDk6IGNhcmQgdm9sdGFnZSBrZXkgKDAwLDAxLDEwLDExKQorICogMjEwOiAgYmF0dHdhcm4KKyAqIDIxMTogIGJhdGRlYWQKKyAqIDIxNDogIHBvd2VyIChsb3ctYWN0KQorICovCisjZGVmaW5lIEdQSU9fQ0RBCTAKKyNkZWZpbmUgR1BJT19DREIJMQorI2RlZmluZSBHUElPX0NBUkRJUlEJNAorI2RlZmluZSBHUElPX1JFU0VUCTIwNAorI2RlZmluZSBHUElPX09VVEVOCTIwNQorI2RlZmluZSBHUElPX1ZTTAkyMDgKKyNkZWZpbmUgR1BJT19WU0gJMjA5CisjZGVmaW5lIEdQSU9fQkFUVERFQUQJMjEwCisjZGVmaW5lIEdQSU9fQkFUVFdBUk4JMjExCisjZGVmaW5lIEdQSU9fUE9XRVIJMjE0CisKK3N0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrIHsKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldAlzb2NrZXQ7CisJdm9pZAkJKnZpcnRfaW87CisKKwlwaHlzX2FkZHJfdAlwaHlzX2lvOworCXBoeXNfYWRkcl90CXBoeXNfYXR0cjsKKwlwaHlzX2FkZHJfdAlwaHlzX21lbTsKKworCS8qIHByZXZpb3VzIGZsYWdzIGZvciBzZXRfc29ja2V0KCkgKi8KKwl1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzOworfTsKKworI2RlZmluZSB0b194eHNfc29ja2V0KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jaywgc29ja2V0KQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY2RpcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jayA9IGRhdGE7CisKKwlwY21jaWFfcGFyc2VfZXZlbnRzKCZzb2NrLT5zb2NrZXQsIFNTX0RFVEVDVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfY29uZmlndXJlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgIHN0cnVjdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b194eHNfc29ja2V0KHNrdCk7CisJdW5zaWduZWQgaW50IGNoYW5nZWQ7CisKKwkvKiBwb3dlciBjb250cm9sICovCisJc3dpdGNoIChzdGF0ZS0+VmNjKSB7CisJY2FzZSAwOgorCQlncGlvX3NldF92YWx1ZShHUElPX1BPV0VSLCAxKTsJLyogcG93ZXIgb2ZmICovCisJCWJyZWFrOworCWNhc2UgMzM6CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9XRVIsIDApOwkvKiBwb3dlciBvbiAqLworCQlicmVhazsKKwljYXNlIDUwOgorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNoYW5nZWQgPSBzdGF0ZS0+ZmxhZ3MgXiBzb2NrLT5vbGRfZmxhZ3M7CisKKwlpZiAoY2hhbmdlZCAmIFNTX1JFU0VUKSB7CisJCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkgeworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19SRVNFVCwgMSk7CS8qIGFzc2VydCByZXNldCAqLworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19PVVRFTiwgMSk7CS8qIGJ1ZmZlcnMgb2ZmICovCisJCX0gZWxzZSB7CisJCQlncGlvX3NldF92YWx1ZShHUElPX1JFU0VULCAwKTsJLyogZGVhc3NlcnQgcmVzZXQgKi8KKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fT1VURU4sIDApOwkvKiBidWZmZXJzIG9uICovCisJCQltc2xlZXAoNTAwKTsKKwkJfQorCX0KKworCXNvY2stPm9sZF9mbGFncyA9IHN0YXRlLT5mbGFnczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX2dldF9zdGF0dXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwlpbnQgaTsKKworCXN0YXR1cyA9IDA7CisKKwkvKiBjaGVjayBjYXJkZGV0ZWN0czogR1BJT1swOjFdIG11c3QgYm90aCBiZSBsb3cgKi8KKwlpZiAoIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fQ0RBKSAmJiAhZ3Bpb19nZXRfdmFsdWUoR1BJT19DREIpKQorCQlzdGF0dXMgfD0gU1NfREVURUNUOworCisJLyogZGV0ZXJtaW5lIGNhcmQgdm9sdGFnZTogR1BJT1syMDg6MjA5XSBiaW5hcnkgdmFsdWUgKi8KKwlpID0gKCEhZ3Bpb19nZXRfdmFsdWUoR1BJT19WU0wpKSB8ICgoISFncGlvX2dldF92YWx1ZShHUElPX1ZTSCkpIDw8IDEpOworCisJc3dpdGNoIChpKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwljYXNlIDI6CisJCXN0YXR1cyB8PSBTU18zVkNBUkQ7CS8qIDNWIGNhcmQgKi8KKwkJYnJlYWs7CisJY2FzZSAzOgkJCQkvKiA1ViBjYXJkLCB1bnN1cHBvcnRlZCAqLworCWRlZmF1bHQ6CisJCXN0YXR1cyB8PSBTU19YVkNBUkQ7CS8qIHRyZWF0ZWQgYXMgdW5zdXBwb3J0ZWQgaW4gY29yZSAqLworCX0KKworCS8qIEdQSU8yMTQ6IGxvdyBhY3RpdmUgcG93ZXIgc3dpdGNoICovCisJc3RhdHVzIHw9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUE9XRVIpID8gMCA6IFNTX1BPV0VST047CisKKwkvKiBHUElPMjA0OiBoaWdoLWFjdGl2ZSByZXNldCBsaW5lICovCisJc3RhdHVzIHw9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUkVTRVQpID8gU1NfUkVTRVQgOiBTU19SRUFEWTsKKworCS8qIG90aGVyIHN0dWZmICovCisJc3RhdHVzIHw9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fQkFUVERFQUQpID8gMCA6IFNTX0JBVERFQUQ7CisJc3RhdHVzIHw9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fQkFUVFdBUk4pID8gMCA6IFNTX0JBVFdBUk47CisKKwkqdmFsdWUgPSBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4eHMxNTAwX3BjbWNpYV9zb2NrX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0NEQSk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19DREIpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fVlNMKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1ZTSCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19CQVRUREVBRCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19CQVRUV0FSTik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUkVTRVQsIDEpOwkvKiBhc3NlcnQgcmVzZXQgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19PVVRFTiwgMSk7CS8qIGRpc2FibGUgYnVmZmVycyAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPV0VSLCAxKTsJLyogcG93ZXIgb2ZmICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4eHMxNTAwX3BjbWNpYV9zb2NrX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTF4MDBfcGNtY2lhX3NldF9pb19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgc3RydWN0IHBjY2FyZF9pb19tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jayA9IHRvX3h4c19zb2NrZXQoc2t0KTsKKworCW1hcC0+c3RhcnQgPSAodTMyKXNvY2stPnZpcnRfaW87CisJbWFwLT5zdG9wID0gbWFwLT5zdGFydCArIElPX01BUF9TSVpFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXUxeDAwX3BjbWNpYV9zZXRfbWVtX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICAgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptYXApCit7CisJc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b194eHNfc29ja2V0KHNrdCk7CisKKwlpZiAobWFwLT5mbGFncyAmIE1BUF9BVFRSSUIpCisJCW1hcC0+c3RhdGljX3N0YXJ0ID0gc29jay0+cGh5c19hdHRyICsgbWFwLT5jYXJkX3N0YXJ0OworCWVsc2UKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBzb2NrLT5waHlzX21lbSArIG1hcC0+Y2FyZF9zdGFydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIHh4czE1MDBfcGNtY2lhX29wZXJhdGlvbnMgPSB7CisJLmluaXQJCQk9IHh4czE1MDBfcGNtY2lhX3NvY2tfaW5pdCwKKwkuc3VzcGVuZAkJPSB4eHMxNTAwX3BjbWNpYV9zb2NrX3N1c3BlbmQsCisJLmdldF9zdGF0dXMJCT0geHhzMTUwMF9wY21jaWFfZ2V0X3N0YXR1cywKKwkuc2V0X3NvY2tldAkJPSB4eHMxNTAwX3BjbWNpYV9jb25maWd1cmUsCisJLnNldF9pb19tYXAJCT0gYXUxeDAwX3BjbWNpYV9zZXRfaW9fbWFwLAorCS5zZXRfbWVtX21hcAkJPSBhdTF4MDBfcGNtY2lhX3NldF9tZW1fbWFwLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgeHhzMTUwMF9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jazsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IHJldCwgaXJxOworCisJc29jayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IC1FTk9ERVY7CisKKwkvKgorCSAqIHBzZXVkby1hdHRyOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBhdHRyaWJ1dGUgc3BhY2UKKwkgKiBmb3IgdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZQorCSAqIHJpZ2h0KS4KKwkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1hdHRyIik7CisJaWYgKCFyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgJ3BjbWNpYS1hdHRyJyByZXNvdXJjZSFcbiIpOworCQlnb3RvIG91dDA7CisJfQorCXNvY2stPnBoeXNfYXR0ciA9IHItPnN0YXJ0OworCisJLyoKKwkgKiBwc2V1ZG8tbWVtOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBtZW1vcnkgc3BhY2UgZm9yCisJICogdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZSByaWdodCkKKwkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1tZW0iKTsKKwlpZiAoIXIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyAncGNtY2lhLW1lbScgcmVzb3VyY2UhXG4iKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX21lbSA9IHItPnN0YXJ0OworCisJLyoKKwkgKiBwc2V1ZG8taW86ICBUaGUgMzJiaXQgYWRkcmVzcyBvZiB0aGUgUENNQ0lBIElPIHNwYWNlIGZvciB0aGlzCisJICogc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUgcmlnaHQpLgorCSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLWlvIik7CisJaWYgKCFyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgJ3BjbWNpYS1pbycgcmVzb3VyY2UhXG4iKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX2lvID0gci0+c3RhcnQ7CisKKworCS8qCisJICogUENNQ0lBIGNsaWVudCBkcml2ZXJzIHVzZSB0aGUgaW5iL291dGIgbWFjcm9zIHRvIGFjY2VzcworCSAqIHRoZSBJTyByZWdpc3RlcnMuICBTaW5jZSBtaXBzX2lvX3BvcnRfYmFzZSBpcyBhZGRlZAorCSAqIHRvIHRoZSBhY2Nlc3MgYWRkcmVzcyBvZiB0aGUgbWlwcyBpbXBsZW1lbnRhdGlvbiBvZgorCSAqIGluYi9vdXRiLCB3ZSBuZWVkIHRvIHN1YnRyYWN0IGl0IGhlcmUgYmVjYXVzZSB3ZSB3YW50CisJICogdG8gYWNjZXNzIHRoZSBJL08gb3IgTUVNIGFkZHJlc3MgZGlyZWN0bHksIHdpdGhvdXQKKwkgKiBnb2luZyB0aHJvdWdoIHRoaXMgIm1pcHNfaW9fcG9ydF9iYXNlIiBtZWNoYW5pc20uCisJICovCisJc29jay0+dmlydF9pbyA9ICh2b2lkICopKGlvcmVtYXAoc29jay0+cGh5c19pbywgSU9fTUFQX1NJWkUpIC0KKwkJCQkgbWlwc19pb19wb3J0X2Jhc2UpOworCisJaWYgKCFzb2NrLT52aXJ0X2lvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBJTyBhcmVhXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQwOworCX0KKworCXNvY2stPnNvY2tldC5vcHMJPSAmeHhzMTUwMF9wY21jaWFfb3BlcmF0aW9uczsKKwlzb2NrLT5zb2NrZXQub3duZXIJPSBUSElTX01PRFVMRTsKKwlzb2NrLT5zb2NrZXQucGNpX2lycQk9IGdwaW9fdG9faXJxKEdQSU9fQ0FSRElSUSk7CisJc29jay0+c29ja2V0LmZlYXR1cmVzCT0gU1NfQ0FQX1NUQVRJQ19NQVAgfCBTU19DQVBfUENDQVJEOworCXNvY2stPnNvY2tldC5tYXBfc2l6ZQk9IE1FTV9NQVBfU0laRTsKKwlzb2NrLT5zb2NrZXQuaW9fb2Zmc2V0CT0gKHVuc2lnbmVkIGxvbmcpc29jay0+dmlydF9pbzsKKwlzb2NrLT5zb2NrZXQuZGV2LnBhcmVudAk9ICZwZGV2LT5kZXY7CisJc29jay0+c29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfc3RhdGljX29wczsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNvY2spOworCisJLyogc2V0dXAgY2FyZGRldGVjdCBpcnE6IHVzZSBvbmUgb2YgdGhlIDIgR1BJT3MgYXMgYW4KKwkgKiBlZGdlIGRldGVjdG9yLgorCSAqLworCWlycSA9IGdwaW9fdG9faXJxKEdQSU9fQ0RBKTsKKwlzZXRfaXJxX3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgY2RpcnEsIDAsICJwY21jaWFfY2FyZGRldGVjdCIsIHNvY2spOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHNldHVwIGNkIGlycVxuIik7CisJCWdvdG8gb3V0MTsKKwl9CisKKwlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KCZzb2NrLT5zb2NrZXQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyXG4iKTsKKwkJZ290byBvdXQyOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIk15Q2FibGUgWFhTMTUwMCBQQ01DSUEgc29ja2V0IHNlcnZpY2VzXG4iKTsKKworCXJldHVybiAwOworCitvdXQyOgorCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fQ0RBKSwgc29jayk7CitvdXQxOgorCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKK291dDA6CisJa2ZyZWUoc29jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgeHhzMTUwMF9wY21jaWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgKnNvY2sgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgmc29jay0+c29ja2V0KTsKKwlmcmVlX2lycShncGlvX3RvX2lycShHUElPX0NEQSksIHNvY2spOworCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKKwlrZnJlZShzb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4eHMxNTAwX3BjbWNpYV9zb2NrZXRfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInh4czE1MDBfcGNtY2lhIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0geHhzMTUwMF9wY21jaWFfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh4eHMxNTAwX3BjbWNpYV9yZW1vdmUpLAorfTsKKworaW50IF9faW5pdCB4eHMxNTAwX3BjbWNpYV9zb2NrZXRfbG9hZCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnh4czE1MDBfcGNtY2lhX3NvY2tldF9kcml2ZXIpOworfQorCit2b2lkICBfX2V4aXQgeHhzMTUwMF9wY21jaWFfc29ja2V0X3VubG9hZCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ4eHMxNTAwX3BjbWNpYV9zb2NrZXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoeHhzMTUwMF9wY21jaWFfc29ja2V0X2xvYWQpOworbW9kdWxlX2V4aXQoeHhzMTUwMF9wY21jaWFfc29ja2V0X3VubG9hZCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENNQ0lBIFNvY2tldCBTZXJ2aWNlcyBmb3IgTXlDYWJsZSBYWFMxNTAwIHN5c3RlbXMiKTsKK01PRFVMRV9BVVRIT1IoIk1hbnVlbCBMYXVzcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwppbmRleCBlNGQxMmFjLi5iODUzNzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwpAQCAtMzcsNiArMzcsMTEgQEAKIG1vZHVsZV9wYXJhbShwd3JfaXJxc19vZmYsIGJvb2wsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwd3JfaXJxc19vZmYsICJGb3JjZSBJUlFzIG9mZiBkdXJpbmcgcG93ZXItb24gb2Ygc2xvdC4gVXNlIG9ubHkgd2hlbiBzZWVpbmcgSVJRIHN0b3JtcyEiKTsKIAorc3RhdGljIGNoYXIgbzJfc3BlZWR1cFtdID0gImRlZmF1bHQiOworbW9kdWxlX3BhcmFtX3N0cmluZyhvMl9zcGVlZHVwLCBvMl9zcGVlZHVwLCBzaXplb2YobzJfc3BlZWR1cCksIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhvMl9zcGVlZHVwLCAiVXNlIHByZWZldGNoL2J1cnN0IGZvciBPMi1icmlkZ2VzOiAnb24nLCAnb2ZmJyAiCisJIm9yICdkZWZhdWx0JyAodXNlcyByZWNvbW1lbmRlZCBiZWhhdmlvdXIgZm9yIHRoZSBkZXRlY3RlZCBicmlkZ2UpIik7CisKICNkZWZpbmUgZGVidWcoeCwgcywgYXJncy4uLikgZGV2X2RiZygmcy0+ZGV2LT5kZXYsIHgsICMjYXJncykKIAogLyogRG9uJ3QgYXNrLi4gKi8KQEAgLTY0OSw5ICs2NTQsMTAgQEAKIHN0YXRpYyBpbnQgeWVudGFfc2VhcmNoX3JlcyhzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJICAgIHUzMiBtaW4pCiB7CisJc3RydWN0IHJlc291cmNlICpyb290OwogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QgPSBzb2NrZXQtPmRldi0+YnVzLT5yZXNvdXJjZVtpXTsKKworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2Uoc29ja2V0LT5kZXYtPmJ1cywgcm9vdCwgaSkgewogCQlpZiAoIXJvb3QpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggZjUyNmU3My4uNjg0OGYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC03OSw2ICs3OSw3IEBACiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAJZGVwZW5kcyBvbiBSRktJTEwgfHwgUkZLSUxMID0gbgogCWRlcGVuZHMgb24gUE9XRVJfU1VQUExZCisJZGVwZW5kcyBvbiBTRVJJT19JODA0MgogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAlUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHJma2lsbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wgdG8gRGVsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCmluZGV4IGVkOTAwODIuLjhjYjIwZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKQEAgLTM0LDYgKzM0LDExIEBACiAjZGVmaW5lIENNUENfQUNDRUxfU0VOU0lUSVZJVFlfREVGQVVMVAkJNQogCiAKKyNkZWZpbmUgQ01QQ19BQ0NFTF9ISUQJCSJBQ0NFMDAwMCIKKyNkZWZpbmUgQ01QQ19UQUJMRVRfSElECQkiVEJMVDAwMDAiCisjZGVmaW5lIENNUENfQkxfSElECQkiSVBNTDIwMCIKKyNkZWZpbmUgQ01QQ19LRVlTX0hJRAkJIkZuQlQwMDAwIgorCiAvKgogICogR2VuZXJpYyBpbnB1dCBkZXZpY2UgY29kZS4KICAqLwpAQCAtMjgyLDEwICsyODcsOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfYWNjZWxfZGV2aWNlX2lkc1tdID0gewotCXsiQUNDRTAwMDAiLCAwfSwKKwl7Q01QQ19BQ0NFTF9ISUQsIDB9LAogCXsiIiwgMH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfYWNjZWxfZGV2aWNlX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19hY2NlbF9hY3BpX2RyaXZlciA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTM2NiwxMCArMzcwLDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX3RhYmxldF9kZXZpY2VfaWRzW10gPSB7Ci0JeyJUQkxUMDAwMCIsIDB9LAorCXtDTVBDX1RBQkxFVF9ISUQsIDB9LAogCXsiIiwgMH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfdGFibGV0X2RldmljZV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfdGFibGV0X2FjcGlfZHJpdmVyID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNDc3LDE3ICs0ODAsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2RldmljZV9pZHNbXSA9IHsKLQl7IklQTUwyMDAiLCAwfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY19ibF9kZXZpY2VfaWRzW10gPSB7CisJe0NNUENfQkxfSElELCAwfSwKIAl7IiIsIDB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2RldmljZV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfYmxfYWNwaV9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgPSAiY21wYyIsCiAJLmNsYXNzID0gImNtcGMiLAotCS5pZHMgPSBjbXBjX2RldmljZV9pZHMsCisJLmlkcyA9IGNtcGNfYmxfZGV2aWNlX2lkcywKIAkub3BzID0gewogCQkuYWRkID0gY21wY19ibF9hZGQsCiAJCS5yZW1vdmUgPSBjbXBjX2JsX3JlbW92ZQpAQCAtNTQwLDEwICs1NDIsOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfa2V5c19kZXZpY2VfaWRzW10gPSB7Ci0JeyJGbkJUMDAwMCIsIDB9LAorCXtDTVBDX0tFWVNfSElELCAwfSwKIAl7IiIsIDB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2tleXNfZGV2aWNlX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19rZXlzX2FjcGlfZHJpdmVyID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNjA3LDMgKzYwOCwxMyBAQAogCiBtb2R1bGVfaW5pdChjbXBjX2luaXQpOwogbW9kdWxlX2V4aXQoY21wY19leGl0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2RldmljZV9pZHNbXSA9IHsKKwl7Q01QQ19BQ0NFTF9ISUQsIDB9LAorCXtDTVBDX1RBQkxFVF9ISUQsIDB9LAorCXtDTVBDX0JMX0hJRCwgMH0sCisJe0NNUENfS0VZU19ISUQsIDB9LAorCXsiIiwgMH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgY21wY19kZXZpY2VfaWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwppbmRleCAxYTM4N2U3Li4yNzQwYjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCkBAIC0yNiwxNyArMjYsOCBAQAogLyoKICAqIGNvbWFwbC1sYXB0b3AuYyAtIENvbXBhbCBsYXB0b3Agc3VwcG9ydC4KICAqCi0gKiBUaGlzIGRyaXZlciBleHBvcnRzIGEgZmV3IGZpbGVzIGluIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9jb21wYWwtbGFwdG9wLzoKLSAqCi0gKiAgIHdsYW4gLSB3bGFuIHN1YnN5c3RlbSBzdGF0ZTogY29udGFpbnMgMCBvciAxIChydykKLSAqCi0gKiAgIGJsdWV0b290aCAtIEJsdWV0b290aCBzdWJzeXN0ZW0gc3RhdGU6IGNvbnRhaW5zIDAgb3IgMSAocncpCi0gKgotICogICByYXcgLSByYXcgdmFsdWUgdGFrZW4gZnJvbSBlbWJlZGRlZCBjb250cm9sbGVyIHJlZ2lzdGVyIChybykKLSAqCi0gKiBJbiBhZGRpdGlvbiB0byB0aGVzZSBwbGF0Zm9ybSBkZXZpY2UgYXR0cmlidXRlcyB0aGUgZHJpdmVyCi0gKiByZWdpc3RlcnMgaXRzZWxmIGluIHRoZSBMaW51eCBiYWNrbGlnaHQgY29udHJvbCBzdWJzeXN0ZW0gYW5kIGlzCi0gKiBhdmFpbGFibGUgdG8gdXNlcnNwYWNlIHVuZGVyIC9zeXMvY2xhc3MvYmFja2xpZ2h0L2NvbXBhbC1sYXB0b3AvLgorICogVGhlIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIHdpdGggdGhlIHJma2lsbCBzdWJzeXN0ZW0gYW5kCisgKiB0aGUgTGludXggYmFja2xpZ2h0IGNvbnRyb2wgc3Vic3lzdGVtLgogICoKICAqIFRoaXMgZHJpdmVyIG1pZ2h0IHdvcmsgb24gb3RoZXIgbGFwdG9wcyBwcm9kdWNlZCBieSBDb21wYWwuIElmIHlvdQogICogd2FudCB0byB0cnkgaXQgeW91IGNhbiBwYXNzIGZvcmNlPTEgYXMgYXJndW1lbnQgdG8gdGhlIG1vZHVsZSB3aGljaApAQCAtNTEsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogCiAjZGVmaW5lIENPTVBBTF9EUklWRVJfVkVSU0lPTiAiMC4yLjYiCiAKQEAgLTYzLDYgKzU1LDEwIEBACiAjZGVmaW5lIFdMQU5fTUFTSwkweDAxCiAjZGVmaW5lIEJUX01BU0sgCTB4MDIKIAorc3RhdGljIHN0cnVjdCByZmtpbGwgKndpZmlfcmZraWxsOworc3RhdGljIHN0cnVjdCByZmtpbGwgKmJ0X3Jma2lsbDsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb21wYWxfZGV2aWNlOworCiBzdGF0aWMgaW50IGZvcmNlOwogbW9kdWxlX3BhcmFtKGZvcmNlLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2UsICJGb3JjZSBkcml2ZXIgbG9hZCwgaWdub3JlIERNSSBkYXRhIik7CkBAIC04OCw2NSArODQsNzUgQEAKIAlyZXR1cm4gKGludCkgcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IHNldF93bGFuX3N0YXRlKGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgY29tcGFsX3Jma2lsbF9zZXQodm9pZCAqZGF0YSwgYm9vbCBibG9ja2VkKQogeworCXVuc2lnbmVkIGxvbmcgcmFkaW8gPSAodW5zaWduZWQgbG9uZykgZGF0YTsKIAl1OCByZXN1bHQsIHZhbHVlOwogCiAJZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7CiAKLQlpZiAoKHJlc3VsdCAmIEtJTExTV0lUQ0hfTUFTSykgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCWlmIChzdGF0ZSkKLQkJCXZhbHVlID0gKHU4KSAocmVzdWx0IHwgV0xBTl9NQVNLKTsKLQkJZWxzZQotCQkJdmFsdWUgPSAodTgpIChyZXN1bHQgJiB+V0xBTl9NQVNLKTsKLQkJZWNfd3JpdGUoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsIHZhbHVlKTsKLQl9CisJaWYgKCFibG9ja2VkKQorCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCB8IHJhZGlvKTsKKwllbHNlCisJCXZhbHVlID0gKHU4KSAocmVzdWx0ICYgfnJhZGlvKTsKKwllY193cml0ZShDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgdmFsdWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2JsdWV0b290aF9zdGF0ZShpbnQgc3RhdGUpCi17Ci0JdTggcmVzdWx0LCB2YWx1ZTsKLQotCWVjX3JlYWQoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsICZyZXN1bHQpOwotCi0JaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UgewotCQlpZiAoc3RhdGUpCi0JCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCB8IEJUX01BU0spOwotCQllbHNlCi0JCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCAmIH5CVF9NQVNLKTsKLQkJZWNfd3JpdGUoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsIHZhbHVlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnZXRfd2lyZWxlc3Nfc3RhdGUoaW50ICp3bGFuLCBpbnQgKmJsdWV0b290aCkKK3N0YXRpYyB2b2lkIGNvbXBhbF9yZmtpbGxfcG9sbChzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIHZvaWQgKmRhdGEpCiB7CiAJdTggcmVzdWx0OworCWJvb2wgaHdfYmxvY2tlZDsKIAogCWVjX3JlYWQoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsICZyZXN1bHQpOwogCi0JaWYgKHdsYW4pIHsKLQkJaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCQkqd2xhbiA9IDA7Ci0JCWVsc2UKLQkJCSp3bGFuID0gcmVzdWx0ICYgV0xBTl9NQVNLOwotCX0KKwlod19ibG9ja2VkID0gIShyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spOworCXJma2lsbF9zZXRfaHdfc3RhdGUocmZraWxsLCBod19ibG9ja2VkKTsKK30KIAotCWlmIChibHVldG9vdGgpIHsKLQkJaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCQkqYmx1ZXRvb3RoID0gMDsKLQkJZWxzZQotCQkJKmJsdWV0b290aCA9IChyZXN1bHQgJiBCVF9NQVNLKSA+PiAxOworc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGNvbXBhbF9yZmtpbGxfb3BzID0geworCS5wb2xsID0gY29tcGFsX3Jma2lsbF9wb2xsLAorCS5zZXRfYmxvY2sgPSBjb21wYWxfcmZraWxsX3NldCwKK307CisKK3N0YXRpYyBpbnQgc2V0dXBfcmZraWxsKHZvaWQpCit7CisJaW50IHJldDsKKworCXdpZmlfcmZraWxsID0gcmZraWxsX2FsbG9jKCJjb21wYWwtd2lmaSIsICZjb21wYWxfZGV2aWNlLT5kZXYsCisJCQkJUkZLSUxMX1RZUEVfV0xBTiwgJmNvbXBhbF9yZmtpbGxfb3BzLAorCQkJCSh2b2lkICopIFdMQU5fTUFTSyk7CisJaWYgKCF3aWZpX3Jma2lsbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIod2lmaV9yZmtpbGwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3dpZmk7CisKKwlidF9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImNvbXBhbC1ibHVldG9vdGgiLCAmY29tcGFsX2RldmljZS0+ZGV2LAorCQkJCVJGS0lMTF9UWVBFX0JMVUVUT09USCwgJmNvbXBhbF9yZmtpbGxfb3BzLAorCQkJCSh2b2lkICopIEJUX01BU0spOworCWlmICghYnRfcmZraWxsKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jYXRlX2J0OwogCX0KKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIoYnRfcmZraWxsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWdpc3Rlcl9idDsKIAogCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXJfYnQ6CisJcmZraWxsX2Rlc3Ryb3koYnRfcmZraWxsKTsKKworZXJyX2FsbG9jYXRlX2J0OgorCXJma2lsbF91bnJlZ2lzdGVyKHdpZmlfcmZraWxsKTsKKworZXJyX3dpZmk6CisJcmZraWxsX2Rlc3Ryb3kod2lmaV9yZmtpbGwpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyogQmFja2xpZ2h0IGRldmljZSBzdHVmZiAqLwpAQCAtMTY5LDg2ICsxNzUsNiBAQAogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmNvbXBhbGJsX2RldmljZTsKIAotLyogUGxhdGZvcm0gZGV2aWNlICovCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfd2xhbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0LCBlbmFibGVkOwotCi0JcmV0ID0gZ2V0X3dpcmVsZXNzX3N0YXRlKCZlbmFibGVkLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBlbmFibGVkKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19yYXcoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JdTggcmVzdWx0OwotCi0JZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcmVzdWx0KTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19ibHVldG9vdGgoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JaW50IHJldCwgZW5hYmxlZDsKLQotCXJldCA9IGdldF93aXJlbGVzc19zdGF0ZShOVUxMLCAmZW5hYmxlZCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgZW5hYmxlZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3dsYW5fc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgc3RhdGUsIHJldDsKLQotCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmc3RhdGUpICE9IDEgfHwgKHN0YXRlIDwgMCB8fCBzdGF0ZSA+IDEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IHNldF93bGFuX3N0YXRlKHN0YXRlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfYmx1ZXRvb3RoX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JaW50IHN0YXRlLCByZXQ7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnN0YXRlKSAhPSAxIHx8IChzdGF0ZSA8IDAgfHwgc3RhdGUgPiAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBzZXRfYmx1ZXRvb3RoX3N0YXRlKHN0YXRlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGJsdWV0b290aCwgMDY0NCwgc2hvd19ibHVldG9vdGgsIHN0b3JlX2JsdWV0b290aF9zdGF0ZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIod2xhbiwgMDY0NCwgc2hvd193bGFuLCBzdG9yZV93bGFuX3N0YXRlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihyYXcsIDA0NDQsIHNob3dfcmF3LCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmNvbXBhbF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX2JsdWV0b290aC5hdHRyLAotCSZkZXZfYXR0cl93bGFuLmF0dHIsCi0JJmRldl9hdHRyX3Jhdy5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gY29tcGFsX2F0dHJpYnV0ZXMKLX07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvbXBhbF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKQEAgLTI1Nyw4ICsxODMsNiBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb21wYWxfZGV2aWNlOwotCiAvKiBJbml0aWFsaXphdGlvbiAqLwogCiBzdGF0aWMgaW50IGRtaV9jaGVja19jYihjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCkBAIC0zMTAsNiArMjM0LDQ3IEBACiAJCX0sCiAJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgogCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDkiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiA5MTAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMDEwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDEwdiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEwMTEiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIEluc3Bpcm9uIDExeiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDExMTAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTIiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMjEwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCisKIAl7IH0KIH07CiAKQEAgLTM0OCwyMyArMzEzLDIxIEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGNvbXBhbF9kZXZpY2UpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOworCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlOwogCi0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjb21wYWxfZGV2aWNlLT5kZXYua29iaiwKLQkJJmNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXApOworCXJldCA9IHNldHVwX3Jma2lsbCgpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOworCQlnb3RvIGZhaWxfcmZraWxsOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiY29tcGFsLWxhcHRvcDogZHJpdmVyICJDT01QQUxfRFJJVkVSX1ZFUlNJT04KIAkJIiBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuIik7CiAKIAlyZXR1cm4gMDsKIAotZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOgotCitmYWlsX3Jma2lsbDoKIAlwbGF0Zm9ybV9kZXZpY2VfZGVsKGNvbXBhbF9kZXZpY2UpOwogCi1mYWlsX3BsYXRmb3JtX2RldmljZTE6CitmYWlsX3BsYXRmb3JtX2RldmljZToKIAogCXBsYXRmb3JtX2RldmljZV9wdXQoY29tcGFsX2RldmljZSk7CiAKQEAgLTM4MiwxMCArMzQ1LDEzIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgY29tcGFsX2NsZWFudXAodm9pZCkKIHsKIAotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY29tcGFsX2RldmljZS0+ZGV2LmtvYmosICZjb21wYWxfYXR0cmlidXRlX2dyb3VwKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihjb21wYWxfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29tcGFsX2RyaXZlcik7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGNvbXBhbGJsX2RldmljZSk7CisJcmZraWxsX3VucmVnaXN0ZXIod2lmaV9yZmtpbGwpOworCXJma2lsbF9kZXN0cm95KHdpZmlfcmZraWxsKTsKKwlyZmtpbGxfdW5yZWdpc3RlcihidF9yZmtpbGwpOworCXJma2lsbF9kZXN0cm95KGJ0X3Jma2lsbCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJjb21wYWwtbGFwdG9wOiBkcml2ZXIgdW5sb2FkZWQuXG4iKTsKIH0KQEAgLTQwMywzICszNjksOCBAQAogTU9EVUxFX0FMSUFTKCJkbWk6KjpybklGTDkxOnJ2cklGVDAwOioiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6cm5KRkw5MjpydnJJRlQwMDoqIik7CiBNT0RVTEVfQUxJQVMoImRtaToqOnJuSUZUMDA6cnZySUZUMDA6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uOTEwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjEwMTA6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uMTAxMToqIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2bkRlbGxJbmMuOnBuSW5zcGlyb24xMTEwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjEyMTA6KiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKaW5kZXggMzc4MDk5NC4uYjdmNGQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaTgwNDIuaD4KICNpbmNsdWRlICIuLi8uLi9maXJtd2FyZS9kY2RiYXMuaCIKIAogI2RlZmluZSBCUklHSFRORVNTX1RPS0VOIDB4N2QKQEAgLTc5LDkgKzgxLDczIEBACiAJCQlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVFlQRSwgIjgiKSwKIAkJfSwKIAl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgQ29tcHV0ZXIgQ29ycG9yYXRpb24iLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgQ29tcHV0ZXIgQ29ycG9yYXRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19UWVBFLCAiOCIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0ZGF0YSBkZWxsX2JsYWNrbGlzdFtdID0geworCS8qIFN1cHBvcnRlZCBieSBjb21wYWwtbGFwdG9wICovCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDkiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiA5MTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEwMTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMHYiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMDExIiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIEluc3Bpcm9uIDExeiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDExMTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEyMTAiKSwKKwkJfSwKKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciAqYnVmZmVyOworc3RydWN0IHBhZ2UgKmJ1ZmZlcnBhZ2U7CitERUZJTkVfTVVURVgoYnVmZmVyX211dGV4KTsKKworc3RhdGljIGludCBod3N3aXRjaF9zdGF0ZTsKKworc3RhdGljIHZvaWQgZ2V0X2J1ZmZlcih2b2lkKQoreworCW11dGV4X2xvY2soJmJ1ZmZlcl9tdXRleCk7CisJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9idWZmZXIodm9pZCkKK3sKKwltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9kYV90YWJsZShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0pCiB7CiAJLyogRmluYWwgdG9rZW4gaXMgYSB0ZXJtaW5hdG9yLCBzbyB3ZSBkb24ndCB3YW50IHRvIGNvcHkgaXQgKi8KQEAgLTE2MCw2ICsyMjYsOCBAQAogLyogRGVyaXZlZCBmcm9tIGluZm9ybWF0aW9uIGluIERlbGxXaXJlbGVzc0N0bC5jcHA6CiAgICBDbGFzcyAxNywgc2VsZWN0IDExIGlzIHJhZGlvIGNvbnRyb2wuIEl0IHJldHVybnMgYW4gYXJyYXkgb2YgMzItYml0IHZhbHVlcy4KIAorICAgSW5wdXQgYnl0ZSAwID0gMDogV2lyZWxlc3MgaW5mb3JtYXRpb24KKwogICAgcmVzdWx0WzBdOiByZXR1cm4gY29kZQogICAgcmVzdWx0WzFdOgogICAgICBCaXQgMDogICAgICBIYXJkd2FyZSBzd2l0Y2ggc3VwcG9ydGVkCkBAIC0xODAsMzMgKzI0OCw2MiBAQAogICAgICBCaXRzIDIwLTMxOiBSZXNlcnZlZAogICAgcmVzdWx0WzJdOiBOVlJBTSBzaXplIGluIGJ5dGVzCiAgICByZXN1bHRbM106IE5WUkFNIGZvcm1hdCB2ZXJzaW9uIG51bWJlcgorCisgICBJbnB1dCBieXRlIDAgPSAyOiBXaXJlbGVzcyBzd2l0Y2ggY29uZmlndXJhdGlvbgorICAgcmVzdWx0WzBdOiByZXR1cm4gY29kZQorICAgcmVzdWx0WzFdOgorICAgICBCaXQgMDogICAgICBXaWZpIGNvbnRyb2xsZWQgYnkgc3dpdGNoCisgICAgIEJpdCAxOiAgICAgIEJsdWV0b290aCBjb250cm9sbGVkIGJ5IHN3aXRjaAorICAgICBCaXQgMjogICAgICBXV0FOIGNvbnRyb2xsZWQgYnkgc3dpdGNoCisgICAgIEJpdHMgMy02OiAgIFJlc2VydmVkCisgICAgIEJpdCA3OiAgICAgIFdpcmVsZXNzIHN3aXRjaCBjb25maWcgbG9ja2VkCisgICAgIEJpdCA4OiAgICAgIFdpZmkgbG9jYXRvciBlbmFibGVkCisgICAgIEJpdHMgOS0xNDogIFJlc2VydmVkCisgICAgIEJpdCAxNTogICAgIFdpZmkgbG9jYXRvciBzZXR0aW5nIGxvY2tlZAorICAgICBCaXRzIDE2LTMxOiBSZXNlcnZlZAogKi8KIAogc3RhdGljIGludCBkZWxsX3Jma2lsbF9zZXQodm9pZCAqZGF0YSwgYm9vbCBibG9ja2VkKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOwogCWludCBkaXNhYmxlID0gYmxvY2tlZCA/IDEgOiAwOwogCXVuc2lnbmVkIGxvbmcgcmFkaW8gPSAodW5zaWduZWQgbG9uZylkYXRhOworCWludCBod3N3aXRjaF9iaXQgPSAodW5zaWduZWQgbG9uZylkYXRhIC0gMTsKKwlpbnQgcmV0ID0gMDsKIAotCW1lbXNldCgmYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOwotCWJ1ZmZlci5pbnB1dFswXSA9ICgxIHwgKHJhZGlvPDw4KSB8IChkaXNhYmxlIDw8IDE2KSk7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMTcsIDExKTsKKwlnZXRfYnVmZmVyKCk7CisJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxNywgMTEpOwogCi0JcmV0dXJuIDA7CisJLyogSWYgdGhlIGhhcmR3YXJlIHN3aXRjaCBjb250cm9scyB0aGlzIHJhZGlvLCBhbmQgdGhlIGhhcmR3YXJlCisJICAgc3dpdGNoIGlzIGRpc2FibGVkLCBkb24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgc29mdHdhcmUgc3RhdGUgKi8KKwlpZiAoKGh3c3dpdGNoX3N0YXRlICYgQklUKGh3c3dpdGNoX2JpdCkpICYmCisJICAgICEoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMTYpKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlidWZmZXItPmlucHV0WzBdID0gKDEgfCAocmFkaW88PDgpIHwgKGRpc2FibGUgPDwgMTYpKTsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CisKK291dDoKKwlyZWxlYXNlX2J1ZmZlcigpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGRlbGxfcmZraWxsX3F1ZXJ5KHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKIAlpbnQgc3RhdHVzOwogCWludCBiaXQgPSAodW5zaWduZWQgbG9uZylkYXRhICsgMTY7CisJaW50IGh3c3dpdGNoX2JpdCA9ICh1bnNpZ25lZCBsb25nKWRhdGEgLSAxOwogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMTcsIDExKTsKLQlzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdOworCWdldF9idWZmZXIoKTsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CisJc3RhdHVzID0gYnVmZmVyLT5vdXRwdXRbMV07CisJcmVsZWFzZV9idWZmZXIoKTsKIAogCXJma2lsbF9zZXRfc3dfc3RhdGUocmZraWxsLCAhIShzdGF0dXMgJiBCSVQoYml0KSkpOwotCXJma2lsbF9zZXRfaHdfc3RhdGUocmZraWxsLCAhKHN0YXR1cyAmIEJJVCgxNikpKTsKKworCWlmIChod3N3aXRjaF9zdGF0ZSAmIChCSVQoaHdzd2l0Y2hfYml0KSkpCisJCXJma2lsbF9zZXRfaHdfc3RhdGUocmZraWxsLCAhKHN0YXR1cyAmIEJJVCgxNikpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGRlbGxfcmZraWxsX29wcyA9IHsKQEAgLTIxNCwxNSArMzExLDM2IEBACiAJLnF1ZXJ5ID0gZGVsbF9yZmtpbGxfcXVlcnksCiB9OwogCitzdGF0aWMgdm9pZCBkZWxsX3VwZGF0ZV9yZmtpbGwoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQoreworCWlmICh3aWZpX3Jma2lsbCkKKwkJZGVsbF9yZmtpbGxfcXVlcnkod2lmaV9yZmtpbGwsICh2b2lkICopMSk7CisJaWYgKGJsdWV0b290aF9yZmtpbGwpCisJCWRlbGxfcmZraWxsX3F1ZXJ5KGJsdWV0b290aF9yZmtpbGwsICh2b2lkICopMik7CisJaWYgKHd3YW5fcmZraWxsKQorCQlkZWxsX3Jma2lsbF9xdWVyeSh3d2FuX3Jma2lsbCwgKHZvaWQgKikzKTsKK30KK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhkZWxsX3Jma2lsbF93b3JrLCBkZWxsX3VwZGF0ZV9yZmtpbGwpOworCisKIHN0YXRpYyBpbnQgX19pbml0IGRlbGxfc2V0dXBfcmZraWxsKHZvaWQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CiAJaW50IHN0YXR1czsKIAlpbnQgcmV0OwogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMTcsIDExKTsKLQlzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdOworCWlmIChkbWlfY2hlY2tfc3lzdGVtKGRlbGxfYmxhY2tsaXN0KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJkZWxsLWxhcHRvcDogQmxhY2tsaXN0ZWQgaGFyZHdhcmUgZGV0ZWN0ZWQgLSAiCisJCQkJIm5vdCBlbmFibGluZyByZmtpbGxcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlnZXRfYnVmZmVyKCk7CisJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxNywgMTEpOworCXN0YXR1cyA9IGJ1ZmZlci0+b3V0cHV0WzFdOworCWJ1ZmZlci0+aW5wdXRbMF0gPSAweDI7CisJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxNywgMTEpOworCWh3c3dpdGNoX3N0YXRlID0gYnVmZmVyLT5vdXRwdXRbMV07CisJcmVsZWFzZV9idWZmZXIoKTsKIAogCWlmICgoc3RhdHVzICYgKDE8PDJ8MTw8OCkpID09ICgxPDwyfDE8PDgpKSB7CiAJCXdpZmlfcmZraWxsID0gcmZraWxsX2FsbG9jKCJkZWxsLXdpZmkiLCAmcGxhdGZvcm1fZGV2aWNlLT5kZXYsCkBAIC0yOTgsMzkgKzQxNiw0OSBAQAogCiBzdGF0aWMgaW50IGRlbGxfc2VuZF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOworCWludCByZXQgPSAwOwogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JYnVmZmVyLmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKLQlidWZmZXIuaW5wdXRbMV0gPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlnZXRfYnVmZmVyKCk7CisJYnVmZmVyLT5pbnB1dFswXSA9IGZpbmRfdG9rZW5fbG9jYXRpb24oQlJJR0hUTkVTU19UT0tFTik7CisJYnVmZmVyLT5pbnB1dFsxXSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwogCi0JaWYgKGJ1ZmZlci5pbnB1dFswXSA9PSAtMSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGJ1ZmZlci0+aW5wdXRbMF0gPT0gLTEpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQoKSA+IDApCi0JCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDEsIDIpOworCQlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDEsIDIpOwogCWVsc2UKLQkJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMSwgMSk7CisJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMSwgMSk7CiAKK291dDoKKwlyZWxlYXNlX2J1ZmZlcigpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRlbGxfZ2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CisJaW50IHJldCA9IDA7CiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlidWZmZXIuaW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOworCWdldF9idWZmZXIoKTsKKwlidWZmZXItPmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKIAotCWlmIChidWZmZXIuaW5wdXRbMF0gPT0gLTEpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChidWZmZXItPmlucHV0WzBdID09IC0xKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KIAogCWlmIChwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKCkgPiAwKQotCQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAwLCAyKTsKKwkJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAwLCAyKTsKIAllbHNlCi0JCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDAsIDEpOworCQlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDAsIDEpOwogCi0JcmV0dXJuIGJ1ZmZlci5vdXRwdXRbMV07CitvdXQ6CisJcmVsZWFzZV9idWZmZXIoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBidWZmZXItPm91dHB1dFsxXTsKIH0KIAogc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGRlbGxfb3BzID0gewpAQCAtMzM4LDkgKzQ2NiwzMiBAQAogCS51cGRhdGVfc3RhdHVzICA9IGRlbGxfc2VuZF9pbnRlbnNpdHksCiB9OwogCitib29sIGRlbGxfbGFwdG9wX2k4MDQyX2ZpbHRlcih1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGNoYXIgc3RyLAorCQkJICAgICAgc3RydWN0IHNlcmlvICpwb3J0KQoreworCXN0YXRpYyBib29sIGV4dGVuZGVkOworCisJaWYgKHN0ciAmIDB4MjApCisJCXJldHVybiBmYWxzZTsKKworCWlmICh1bmxpa2VseShkYXRhID09IDB4ZTApKSB7CisJCWV4dGVuZGVkID0gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAodW5saWtlbHkoZXh0ZW5kZWQpKSB7CisJCXN3aXRjaCAoZGF0YSkgeworCQljYXNlIDB4ODoKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGVsbF9yZmtpbGxfd29yaywKKwkJCQkJICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikpOworCQkJYnJlYWs7CisJCX0KKwkJZXh0ZW5kZWQgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGRlbGxfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOwogCWludCBtYXhfaW50ZW5zaXR5ID0gMDsKIAlpbnQgcmV0OwogCkBAIC0zNjYsNiArNTE3LDE3IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsX3BsYXRmb3JtX2RldmljZTI7CiAKKwkvKgorCSAqIEFsbG9jYXRlIGJ1ZmZlciBiZWxvdyA0R0IgZm9yIFNNSSBkYXRhLS1vbmx5IDMyLWJpdCBwaHlzaWNhbCBhZGRyCisJICogaXMgcGFzc2VkIHRvIFNNSSBoYW5kbGVyLgorCSAqLworCWJ1ZmZlcnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIpOworCisJaWYgKCFidWZmZXJwYWdlKQorCQlnb3RvIGZhaWxfYnVmZmVyOworCWJ1ZmZlciA9IHBhZ2VfYWRkcmVzcyhidWZmZXJwYWdlKTsKKwltdXRleF9pbml0KCZidWZmZXJfbXV0ZXgpOworCiAJcmV0ID0gZGVsbF9zZXR1cF9yZmtpbGwoKTsKIAogCWlmIChyZXQpIHsKQEAgLTM3Myw2ICs1MzUsMTMgQEAKIAkJZ290byBmYWlsX3Jma2lsbDsKIAl9CiAKKwlyZXQgPSBpODA0Ml9pbnN0YWxsX2ZpbHRlcihkZWxsX2xhcHRvcF9pODA0Ml9maWx0ZXIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImRlbGwtbGFwdG9wOiBVbmFibGUgdG8gaW5zdGFsbCBrZXkgZmlsdGVyXG4iKTsKKwkJZ290byBmYWlsX2ZpbHRlcjsKKwl9CisKICNpZmRlZiBDT05GSUdfQUNQSQogCS8qIEluIHRoZSBldmVudCBvZiBhbiBBQ1BJIGJhY2tsaWdodCBiZWluZyBhdmFpbGFibGUsIGRvbid0CiAJICogcmVnaXN0ZXIgdGhlIHBsYXRmb3JtIGNvbnRyb2xsZXIuCkBAIC0zODEsMTMgKzU1MCwxMyBAQAogCQlyZXR1cm4gMDsKICNlbmRpZgogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JYnVmZmVyLmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKLQotCWlmIChidWZmZXIuaW5wdXRbMF0gIT0gLTEpIHsKLQkJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMCwgMik7Ci0JCW1heF9pbnRlbnNpdHkgPSBidWZmZXIub3V0cHV0WzNdOworCWdldF9idWZmZXIoKTsKKwlidWZmZXItPmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKKwlpZiAoYnVmZmVyLT5pbnB1dFswXSAhPSAtMSkgeworCQlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDAsIDIpOworCQltYXhfaW50ZW5zaXR5ID0gYnVmZmVyLT5vdXRwdXRbM107CiAJfQorCXJlbGVhc2VfYnVmZmVyKCk7CiAKIAlpZiAobWF4X2ludGVuc2l0eSkgewogCQlkZWxsX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKApAQCAtNDEwLDggKzU3OSwxMiBAQAogCXJldHVybiAwOwogCiBmYWlsX2JhY2tsaWdodDoKKwlpODA0Ml9yZW1vdmVfZmlsdGVyKGRlbGxfbGFwdG9wX2k4MDQyX2ZpbHRlcik7CitmYWlsX2ZpbHRlcjoKIAlkZWxsX2NsZWFudXBfcmZraWxsKCk7CiBmYWlsX3Jma2lsbDoKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVycGFnZSk7CitmYWlsX2J1ZmZlcjoKIAlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBsYXRmb3JtX2RldmljZSk7CiBmYWlsX3BsYXRmb3JtX2RldmljZTI6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwbGF0Zm9ybV9kZXZpY2UpOwpAQCAtNDI0LDggKzU5NywxNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGVsbF9leGl0KHZvaWQpCiB7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZWxsX3Jma2lsbF93b3JrKTsKKwlpODA0Ml9yZW1vdmVfZmlsdGVyKGRlbGxfbGFwdG9wX2k4MDQyX2ZpbHRlcik7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGRlbGxfYmFja2xpZ2h0X2RldmljZSk7CiAJZGVsbF9jbGVhbnVwX3Jma2lsbCgpOworCWlmIChwbGF0Zm9ybV9kZXZpY2UpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX2RlbChwbGF0Zm9ybV9kZXZpY2UpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGxhdGZvcm1fZHJpdmVyKTsKKwl9CisJa2ZyZWUoZGFfdG9rZW5zKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZGVsbF9pbml0KTsKQEAgLTQzNSwzICs2MTYsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZWxsIGxhcHRvcCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygiZG1pOipzdm5EZWxsSW5jLjoqOmN0ODoqIik7CitNT0RVTEVfQUxJQVMoImRtaToqc3ZuRGVsbENvbXB1dGVyQ29ycG9yYXRpb24uOio6Y3Q4OioiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggYWQ0YzQxNGQuLjNhYTU3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCkBAIC04OSw2ICs4OSw3IEBACiAJe0tFX0tFWSwgMHgyMGU2LCBLRVlfUFJPRzF9LAogCXtLRV9LRVksIDB4MjE0MiwgS0VZX01FRElBfSwKIAl7S0VfS0VZLCAweDIxM2IsIEtFWV9JTkZPfSwKKwl7S0VfS0VZLCAweDIxNjksIEtFWV9ESVJFQ1RJT059LAogCXtLRV9LRVksIDB4MjMxYiwgS0VZX0hFTFB9LAogCXtLRV9FTkQsIDB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwppbmRleCA3N2JmNWQ4Li4yNmMyMTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC02Miw5ICs2MywxMCBAQAogCiAvKiBUb3NoaWJhIEFDUEkgbWV0aG9kIHBhdGhzICovCiAjZGVmaW5lIE1FVEhPRF9MQ0RfQlJJR0hUTkVTUwkiXFxfU0JfLlBDSTAuVkdBXy5MQ0RfLl9CQ00iCi0jZGVmaW5lIE1FVEhPRF9IQ0lfMQkJIlxcX1NCXy5WQUxELkdIQ0kiCi0jZGVmaW5lIE1FVEhPRF9IQ0lfMgkJIlxcX1NCXy5WQUxaLkdIQ0kiCisjZGVmaW5lIFRPU0hfSU5URVJGQUNFXzEJIlxcX1NCXy5WQUxEIgorI2RlZmluZSBUT1NIX0lOVEVSRkFDRV8yCSJcXF9TQl8uVkFMWiIKICNkZWZpbmUgTUVUSE9EX1ZJREVPX09VVAkiXFxfU0JfLlZBTFguRFNTWCIKKyNkZWZpbmUgR0hDSV9NRVRIT0QJCSIuR0hDSSIKIAogLyogVG9zaGliYSBIQ0kgaW50ZXJmYWNlIGRlZmluaXRpb25zCiAgKgpAQCAtMTE2LDYgKzExOCwzNiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgdG9zaGliYV9kZXZpY2VfaWRzKTsKIAorc3RydWN0IGtleV9lbnRyeSB7CisJY2hhciB0eXBlOworCXUxNiBjb2RlOworCXUxNiBrZXljb2RlOworfTsKKworZW51bSB7S0VfS0VZLCBLRV9FTkR9OworCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSB0b3NoaWJhX2FjcGlfa2V5bWFwW10gID0geworCXtLRV9LRVksIDB4MTAxLCBLRVlfTVVURX0sCisJe0tFX0tFWSwgMHgxM2IsIEtFWV9DT0ZGRUV9LAorCXtLRV9LRVksIDB4MTNjLCBLRVlfQkFUVEVSWX0sCisJe0tFX0tFWSwgMHgxM2QsIEtFWV9TTEVFUH0sCisJe0tFX0tFWSwgMHgxM2UsIEtFWV9TVVNQRU5EfSwKKwl7S0VfS0VZLCAweDEzZiwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCisJe0tFX0tFWSwgMHgxNDAsIEtFWV9CUklHSFRORVNTRE9XTn0sCisJe0tFX0tFWSwgMHgxNDEsIEtFWV9CUklHSFRORVNTVVB9LAorCXtLRV9LRVksIDB4MTQyLCBLRVlfV0xBTn0sCisJe0tFX0tFWSwgMHgxNDMsIEtFWV9QUk9HMX0sCisJe0tFX0tFWSwgMHhiMDUsIEtFWV9QUk9HMn0sCisJe0tFX0tFWSwgMHhiMDYsIEtFWV9XV1d9LAorCXtLRV9LRVksIDB4YjA3LCBLRVlfTUFJTH0sCisJe0tFX0tFWSwgMHhiMzAsIEtFWV9TVE9QfSwKKwl7S0VfS0VZLCAweGIzMSwgS0VZX1BSRVZJT1VTU09OR30sCisJe0tFX0tFWSwgMHhiMzIsIEtFWV9ORVhUU09OR30sCisJe0tFX0tFWSwgMHhiMzMsIEtFWV9QTEFZUEFVU0V9LAorCXtLRV9LRVksIDB4YjVhLCBLRVlfTUVESUF9LAorCXtLRV9FTkQsIDAsIDB9LAorfTsKKwogLyogdXRpbGl0eQogICovCiAKQEAgLTI1MSw2ICsyODMsOCBAQAogc3RydWN0IHRvc2hpYmFfYWNwaV9kZXYgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCByZmtpbGwgKmJ0X3JmazsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpob3RrZXlfZGV2OworCWFjcGlfaGFuZGxlIGhhbmRsZTsKIAogCWNvbnN0IGNoYXIgKmJ0X25hbWU7CiAKQEAgLTcxMSw4ICs3NDUsMTU5IEBACiAgICAgICAgIC51cGRhdGVfc3RhdHVzICA9IHNldF9sY2Rfc3RhdHVzLAogfTsKIAorc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKnRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfc2NhbmNvZGUoaW50IGNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCisJZm9yIChrZXkgPSB0b3NoaWJhX2FjcGlfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKKwkJaWYgKGNvZGUgPT0ga2V5LT5jb2RlKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9rZXljb2RlKGludCBjb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWZvciAoa2V5ID0gdG9zaGliYV9hY3BpX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspCisJCWlmIChjb2RlID09IGtleS0+a2V5Y29kZSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfYWNwaV9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLAorCQkJCSAgIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXkgPSB0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHNjYW5jb2RlKTsKKworCWlmIChrZXkgJiYga2V5LT50eXBlID09IEtFX0tFWSkgeworCQkqa2V5Y29kZSA9IGtleS0+a2V5Y29kZTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdG9zaGliYV9hY3BpX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsCisJCQkJICAgaW50IGtleWNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCWludCBvbGRfa2V5Y29kZTsKKworCWlmIChrZXljb2RlIDwgMCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXkgPSB0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHNjYW5jb2RlKTsKKwlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKKwkJb2xkX2tleWNvZGUgPSBrZXktPmtleWNvZGU7CisJCWtleS0+a2V5Y29kZSA9IGtleWNvZGU7CisJCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlpZiAoIXRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfa2V5Y29kZShvbGRfa2V5Y29kZSkpCisJCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hpYmFfYWNwaV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmNvbnRleHQpCit7CisJdTMyIGhjaV9yZXN1bHQsIHZhbHVlOworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWlmIChldmVudCAhPSAweDgwKQorCQlyZXR1cm47CisJZG8geworCQloY2lfcmVhZDEoSENJX1NZU1RFTV9FVkVOVCwgJnZhbHVlLCAmaGNpX3Jlc3VsdCk7CisJCWlmIChoY2lfcmVzdWx0ID09IEhDSV9TVUNDRVNTKSB7CisJCQlpZiAodmFsdWUgPT0gMHgxMDApCisJCQkJY29udGludWU7CisJCQllbHNlIGlmICh2YWx1ZSAmIDB4ODApIHsKKwkJCQlrZXkgPSB0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlCisJCQkJCSh2YWx1ZSAmIH4weDgwKTsKKwkJCQlpZiAoIWtleSkgeworCQkJCQlwcmludGsoTVlfSU5GTyAiVW5rbm93biBrZXkgJXhcbiIsCisJCQkJCSAgICAgICB2YWx1ZSAmIH4weDgwKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlucHV0X3JlcG9ydF9rZXkodG9zaGliYV9hY3BpLmhvdGtleV9kZXYsCisJCQkJCQkga2V5LT5rZXljb2RlLCAxKTsKKwkJCQlpbnB1dF9zeW5jKHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2KTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LAorCQkJCQkJIGtleS0+a2V5Y29kZSwgMCk7CisJCQkJaW5wdXRfc3luYyh0b3NoaWJhX2FjcGkuaG90a2V5X2Rldik7CisJCQl9CisJCX0gZWxzZSBpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfTk9UX1NVUFBPUlRFRCkgeworCQkJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGFuIHVucmVzb2x2ZWQgaXNzdWUgb24KKwkJCSAqIHNvbWUgbWFjaGluZXMgd2hlcmUgc3lzdGVtIGV2ZW50cyBzcG9yYWRpY2FsbHkKKwkJCSAqIGJlY29tZSBkaXNhYmxlZC4gKi8KKwkJCWhjaV93cml0ZTEoSENJX1NZU1RFTV9FVkVOVCwgMSwgJmhjaV9yZXN1bHQpOworCQkJcHJpbnRrKE1ZX05PVElDRSAiUmUtZW5hYmxlZCBob3RrZXlzXG4iKTsKKwkJfQorCX0gd2hpbGUgKGhjaV9yZXN1bHQgIT0gSENJX0VNUFRZKTsKK30KKworc3RhdGljIGludCB0b3NoaWJhX2FjcGlfc2V0dXBfa2V5Ym9hcmQoY2hhciAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IHJlc3VsdDsKKwljb25zdCBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgZGV2aWNlLCAmaGFuZGxlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byBnZXQgbm90aWZpY2F0aW9uIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXRvc2hpYmFfYWNwaS5oYW5kbGUgPSBoYW5kbGU7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJFTkFCIiwgTlVMTCwgTlVMTCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gZW5hYmxlIGhvdGtleXNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoaGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCSAgICAgIHRvc2hpYmFfYWNwaV9ub3RpZnksIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGluc3RhbGwgaG90a2V5IG5vdGlmaWNhdGlvblxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF0b3NoaWJhX2FjcGkuaG90a2V5X2RldikgeworCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5uYW1lID0gIlRvc2hpYmEgaW5wdXQgZGV2aWNlIjsKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+cGh5cyA9IGRldmljZTsKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5nZXRrZXljb2RlID0gdG9zaGliYV9hY3BpX2dldGtleWNvZGU7CisJdG9zaGliYV9hY3BpLmhvdGtleV9kZXYtPnNldGtleWNvZGUgPSB0b3NoaWJhX2FjcGlfc2V0a2V5Y29kZTsKKworCWZvciAoa2V5ID0gdG9zaGliYV9hY3BpX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspIHsKKwkJc2V0X2JpdChFVl9LRVksIHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5ldmJpdCk7CisJCXNldF9iaXQoa2V5LT5rZXljb2RlLCB0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+a2V5Yml0KTsKKwl9CisKKwlyZXN1bHQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB0b3NoaWJhX2FjcGlfZXhpdCh2b2lkKQogeworCWlmICh0b3NoaWJhX2FjcGkuaG90a2V5X2RldikKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOworCiAJaWYgKHRvc2hpYmFfYWNwaS5idF9yZmspIHsKIAkJcmZraWxsX3VucmVnaXN0ZXIodG9zaGliYV9hY3BpLmJ0X3Jmayk7CiAJCXJma2lsbF9kZXN0cm95KHRvc2hpYmFfYWNwaS5idF9yZmspOwpAQCAtNzI2LDYgKzkxMSw5IEBACiAJaWYgKHRvc2hpYmFfcHJvY19kaXIpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfVE9TSElCQSwgYWNwaV9yb290X2Rpcik7CiAKKwlhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcih0b3NoaWJhX2FjcGkuaGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJICAgdG9zaGliYV9hY3BpX25vdGlmeSk7CisKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b3NoaWJhX2FjcGkucF9kZXYpOwogCiAJcmV0dXJuOwpAQCAtNzQyLDExICs5MzAsMTUgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBzaW1wbGUgZGV2aWNlIGRldGVjdGlvbjogbG9vayBmb3IgSENJIG1ldGhvZCAqLwotCWlmIChpc192YWxpZF9hY3BpX3BhdGgoTUVUSE9EX0hDSV8xKSkKLQkJbWV0aG9kX2hjaSA9IE1FVEhPRF9IQ0lfMTsKLQllbHNlIGlmIChpc192YWxpZF9hY3BpX3BhdGgoTUVUSE9EX0hDSV8yKSkKLQkJbWV0aG9kX2hjaSA9IE1FVEhPRF9IQ0lfMjsKLQllbHNlCisJaWYgKGlzX3ZhbGlkX2FjcGlfcGF0aChUT1NIX0lOVEVSRkFDRV8xIEdIQ0lfTUVUSE9EKSkgeworCQltZXRob2RfaGNpID0gVE9TSF9JTlRFUkZBQ0VfMSBHSENJX01FVEhPRDsKKwkJaWYgKHRvc2hpYmFfYWNwaV9zZXR1cF9rZXlib2FyZChUT1NIX0lOVEVSRkFDRV8xKSkKKwkJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gYWN0aXZhdGUgaG90a2V5c1xuIik7CisJfSBlbHNlIGlmIChpc192YWxpZF9hY3BpX3BhdGgoVE9TSF9JTlRFUkZBQ0VfMiBHSENJX01FVEhPRCkpIHsKKwkJbWV0aG9kX2hjaSA9IFRPU0hfSU5URVJGQUNFXzIgR0hDSV9NRVRIT0Q7CisJCWlmICh0b3NoaWJhX2FjcGlfc2V0dXBfa2V5Ym9hcmQoVE9TSF9JTlRFUkZBQ0VfMikpCisJCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGFjdGl2YXRlIGhvdGtleXNcbiIpOworCX0gZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByaW50ayhNWV9JTkZPICJUb3NoaWJhIExhcHRvcCBBQ1BJIEV4dHJhcyB2ZXJzaW9uICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzYXYuYyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKaW5kZXggZTgyZDhjOS4uOTVhNjg5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvcHMzYXYuYworKysgYi9kcml2ZXJzL3BzMy9wczNhdi5jCkBAIC01MzIsNyArNTMyLDcgQEAKIAlyZXMgPSBwczNhdl9jbWRfYXZiX3BhcmFtKCZhdmJfcGFyYW0sIGxlbik7CiAJaWYgKHJlcyA9PSBQUzNBVl9TVEFUVVNfTk9fU1lOQ19IRUFEKQogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXM6IENvbW1hbmQgZmFpbGVkLiBQbGVhc2UgdHJ5IHlvdXIgcmVxdWVzdCBhZ2Fpbi4gXG4iLAorCQkgICAgICAgIiVzOiBDb21tYW5kIGZhaWxlZC4gUGxlYXNlIHRyeSB5b3VyIHJlcXVlc3QgYWdhaW4uXG4iLAogCQkgICAgICAgX19mdW5jX18pOwogCWVsc2UgaWYgKHJlcykKIAkJZGV2X2RiZygmcHMzYXYtPmRldi0+Y29yZSwgInBzM2F2X2NtZF9hdmJfcGFyYW0gZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDgxNjdlOWUuLjJiYjhhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtODY4LDQgKzg2OCwxNCBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1DMTM3ODMgUE1JQyBSVEMKIAorY29uZmlnIFJUQ19EUlZfTVBDNTEyMQorCXRyaXN0YXRlICJGcmVlc2NhbGUgTVBDNTEyMSBidWlsdC1pbiBSVEMiCisJZGVwZW5kcyBvbiBQUENfTVBDNTEyeCAmJiBSVENfQ0xBU1MKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUKKwkgIGJ1aWx0LWluIFJUQyBNUEM1MTIxLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tcGM1MTIxLgorCiBlbmRpZiAjIFJUQ19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCBlNTE2MGZkLi5iNzE0OGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtNTUsNiArNTUsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfTUFYNjkwMikJKz0gcnRjLW1heDY5MDIubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTUMxMzc4MykJKz0gcnRjLW1jMTM3ODMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTVNNNjI0MikJKz0gcnRjLW1zbTYyNDIubworb2JqLSQoQ09ORklHX1JUQ19EUlZfTVBDNTEyMSkJKz0gcnRjLW1wYzUxMjEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTVYpCSs9IHJ0Yy1tdi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9OVUM5MDApCSs9IHJ0Yy1udWM5MDAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfT01BUCkJKz0gcnRjLW9tYXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1wYzUxMjEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tcGM1MTIxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxM2NhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tcGM1MTIxLmMKQEAgLTAsMCArMSwzODcgQEAKKy8qCisgKiBSZWFsLXRpbWUgY2xvY2sgZHJpdmVyIGZvciBNUEM1MTIxCisgKgorICogQ29weXJpZ2h0IDIwMDcsIERvbWVuIFB1bmNlciA8ZG9tZW4ucHVuY2VyQHRlbGFyZ28uY29tPgorICogQ29weXJpZ2h0IDIwMDgsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgeworCXU4IHNldF90aW1lOwkJLyogUlRDICsgMHgwMCAqLworCXU4IGhvdXJfc2V0OwkJLyogUlRDICsgMHgwMSAqLworCXU4IG1pbnV0ZV9zZXQ7CQkvKiBSVEMgKyAweDAyICovCisJdTggc2Vjb25kX3NldDsJCS8qIFJUQyArIDB4MDMgKi8KKworCXU4IHNldF9kYXRlOwkJLyogUlRDICsgMHgwNCAqLworCXU4IG1vbnRoX3NldDsJCS8qIFJUQyArIDB4MDUgKi8KKwl1OCB3ZWVrZGF5X3NldDsJCS8qIFJUQyArIDB4MDYgKi8KKwl1OCBkYXRlX3NldDsJCS8qIFJUQyArIDB4MDcgKi8KKworCXU4IHdyaXRlX3N3OwkJLyogUlRDICsgMHgwOCAqLworCXU4IHN3X3NldDsJCS8qIFJUQyArIDB4MDkgKi8KKwl1MTYgeWVhcl9zZXQ7CQkvKiBSVEMgKyAweDBhICovCisKKwl1OCBhbG1fZW5hYmxlOwkJLyogUlRDICsgMHgwYyAqLworCXU4IGFsbV9ob3VyX3NldDsJLyogUlRDICsgMHgwZCAqLworCXU4IGFsbV9taW5fc2V0OwkJLyogUlRDICsgMHgwZSAqLworCXU4IGludF9lbmFibGU7CQkvKiBSVEMgKyAweDBmICovCisKKwl1OCByZXNlcnZlZDE7CisJdTggaG91cjsJCS8qIFJUQyArIDB4MTEgKi8KKwl1OCBtaW51dGU7CQkvKiBSVEMgKyAweDEyICovCisJdTggc2Vjb25kOwkJLyogUlRDICsgMHgxMyAqLworCisJdTggbW9udGg7CQkvKiBSVEMgKyAweDE0ICovCisJdTggd2RheV9tZGF5OwkJLyogUlRDICsgMHgxNSAqLworCXUxNiB5ZWFyOwkJLyogUlRDICsgMHgxNiAqLworCisJdTggaW50X2FsbTsJCS8qIFJUQyArIDB4MTggKi8KKwl1OCBpbnRfc3c7CQkvKiBSVEMgKyAweDE5ICovCisJdTggYWxtX3N0YXR1czsJCS8qIFJUQyArIDB4MWEgKi8KKwl1OCBzd19taW51dGU7CQkvKiBSVEMgKyAweDFiICovCisKKwl1OCBidXNfZXJyb3JfMTsJCS8qIFJUQyArIDB4MWMgKi8KKwl1OCBpbnRfZGF5OwkJLyogUlRDICsgMHgxZCAqLworCXU4IGludF9taW47CQkvKiBSVEMgKyAweDFlICovCisJdTggaW50X3NlYzsJCS8qIFJUQyArIDB4MWYgKi8KKworCS8qCisJICogdGFyZ2V0X3RpbWU6CisJICoJaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgaGliZXJuYXRpb24gYnV0IGhpYmVybmF0aW9uCisJICoJZG9lcyBub3Qgd29yayBvbiBzaWxpY29uIHJldiAxLjUgc28gdXNlIGl0IGZvciBub24tdm9sYXRpbGUKKwkgKglzdG9yYWdlIG9mIG9mZnNldCBiZXR3ZWVuIHRoZSBhY3R1YWxfdGltZSByZWdpc3RlciBhbmQgbGludXgKKwkgKgl0aW1lCisJICovCisJdTMyIHRhcmdldF90aW1lOwkvKiBSVEMgKyAweDIwICovCisJLyoKKwkgKiBhY3R1YWxfdGltZToKKwkgKiAJcmVhZG9ubHkgdGltZSBzaW5jZSBWQkFUX1JUQyB3YXMgbGFzdCBjb25uZWN0ZWQKKwkgKi8KKwl1MzIgYWN0dWFsX3RpbWU7CS8qIFJUQyArIDB4MjQgKi8KKwl1MzIga2VlcF9hbGl2ZTsJCS8qIFJUQyArIDB4MjggKi8KK307CisKK3N0cnVjdCBtcGM1MTIxX3J0Y19kYXRhIHsKKwl1bnNpZ25lZCBpcnE7CisJdW5zaWduZWQgaXJxX3BlcmlvZGljOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgcnRjX3drYWxybSB3a2FsYXJtOworfTsKKworLyoKKyAqIFVwZGF0ZSBzZWNvbmQvbWludXRlL2hvdXIgcmVnaXN0ZXJzLgorICoKKyAqIFRoaXMgaXMganVzdCBzbyBhbGFybSB3aWxsIHdvcmsuCisgKi8KK3N0YXRpYyB2b2lkIG1wYzUxMjFfcnRjX3VwZGF0ZV9zbWgoc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncywKKwkJCQkgICBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCW91dF84KCZyZWdzLT5zZWNvbmRfc2V0LCB0bS0+dG1fc2VjKTsKKwlvdXRfOCgmcmVncy0+bWludXRlX3NldCwgdG0tPnRtX21pbik7CisJb3V0XzgoJnJlZ3MtPmhvdXJfc2V0LCB0bS0+dG1faG91cik7CisKKwkvKiBzZXQgdGltZSBzZXF1ZW5jZSAqLworCW91dF84KCZyZWdzLT5zZXRfdGltZSwgMHgxKTsKKwlvdXRfOCgmcmVncy0+c2V0X3RpbWUsIDB4Myk7CisJb3V0XzgoJnJlZ3MtPnNldF90aW1lLCAweDEpOworCW91dF84KCZyZWdzLT5zZXRfdGltZSwgMHgwKTsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCXVuc2lnbmVkIGxvbmcgbm93OworCisJLyoKKwkgKiBsaW51eCB0aW1lIGlzIGFjdHVhbF90aW1lIHBsdXMgdGhlIG9mZnNldCBzYXZlZCBpbiB0YXJnZXRfdGltZQorCSAqLworCW5vdyA9IGluX2JlMzIoJnJlZ3MtPmFjdHVhbF90aW1lKSArIGluX2JlMzIoJnJlZ3MtPnRhcmdldF90aW1lKTsKKworCXJ0Y190aW1lX3RvX3RtKG5vdywgdG0pOworCisJLyoKKwkgKiB1cGRhdGUgc2Vjb25kIG1pbnV0ZSBob3VyIHJlZ2lzdGVycworCSAqIHNvIGFsYXJtcyB3aWxsIHdvcmsKKwkgKi8KKwltcGM1MTIxX3J0Y191cGRhdGVfc21oKHJlZ3MsIHRtKTsKKworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworfQorCitzdGF0aWMgaW50IG1wYzUxMjFfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgbm93OworCisJLyoKKwkgKiBUaGUgYWN0dWFsX3RpbWUgcmVnaXN0ZXIgaXMgcmVhZCBvbmx5IHNvIHdlIHdyaXRlIHRoZSBvZmZzZXQKKwkgKiBiZXR3ZWVuIGl0IGFuZCBsaW51eCB0aW1lIHRvIHRoZSB0YXJnZXRfdGltZSByZWdpc3Rlci4KKwkgKi8KKwlyZXQgPSBydGNfdG1fdG9fdGltZSh0bSwgJm5vdyk7CisJaWYgKHJldCA9PSAwKQorCQlvdXRfYmUzMigmcmVncy0+dGFyZ2V0X3RpbWUsIG5vdyAtIGluX2JlMzIoJnJlZ3MtPmFjdHVhbF90aW1lKSk7CisKKwkvKgorCSAqIHVwZGF0ZSBzZWNvbmQgbWludXRlIGhvdXIgcmVnaXN0ZXJzCisJICogc28gYWxhcm1zIHdpbGwgd29yaworCSAqLworCW1wYzUxMjFfcnRjX3VwZGF0ZV9zbWgocmVncywgdG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyMV9ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKworCSphbGFybSA9IHJ0Yy0+d2thbGFybTsKKworCWFsYXJtLT5wZW5kaW5nID0gaW5fOCgmcmVncy0+YWxtX3N0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0pCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwkvKgorCSAqIHRoZSBhbGFybSBoYXMgbm8gc2Vjb25kcyBzbyBkZWFsIHdpdGggaXQKKwkgKi8KKwlpZiAoYWxhcm0tPnRpbWUudG1fc2VjKSB7CisJCWFsYXJtLT50aW1lLnRtX3NlYyA9IDA7CisJCWFsYXJtLT50aW1lLnRtX21pbisrOworCQlpZiAoYWxhcm0tPnRpbWUudG1fbWluID49IDYwKSB7CisJCQlhbGFybS0+dGltZS50bV9taW4gPSAwOworCQkJYWxhcm0tPnRpbWUudG1faG91cisrOworCQkJaWYgKGFsYXJtLT50aW1lLnRtX2hvdXIgPj0gMjQpCisJCQkJYWxhcm0tPnRpbWUudG1faG91ciA9IDA7CisJCX0KKwl9CisKKwlhbGFybS0+dGltZS50bV9tZGF5ID0gLTE7CisJYWxhcm0tPnRpbWUudG1fbW9uID0gLTE7CisJYWxhcm0tPnRpbWUudG1feWVhciA9IC0xOworCisJb3V0XzgoJnJlZ3MtPmFsbV9taW5fc2V0LCBhbGFybS0+dGltZS50bV9taW4pOworCW91dF84KCZyZWdzLT5hbG1faG91cl9zZXQsIGFsYXJtLT50aW1lLnRtX2hvdXIpOworCisJb3V0XzgoJnJlZ3MtPmFsbV9lbmFibGUsIGFsYXJtLT5lbmFibGVkKTsKKworCXJ0Yy0+d2thbGFybSA9ICphbGFybTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1wYzUxMjFfcnRjX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoKHN0cnVjdCBkZXZpY2UgKilkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwlpZiAoaW5fOCgmcmVncy0+aW50X2FsbSkpIHsKKwkJLyogYWNrbm93bGVkZ2UgYW5kIGNsZWFyIHN0YXR1cyAqLworCQlvdXRfOCgmcmVncy0+aW50X2FsbSwgMSk7CisJCW91dF84KCZyZWdzLT5hbG1fc3RhdHVzLCAxKTsKKworCQlydGNfdXBkYXRlX2lycShydGMtPnJ0YywgMSwgUlRDX0lSUUYgfCBSVENfQUYpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTEyMV9ydGNfaGFuZGxlcl91cGQoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoKHN0cnVjdCBkZXZpY2UgKilkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwlpZiAoaW5fOCgmcmVncy0+aW50X3NlYykgJiYgKGluXzgoJnJlZ3MtPmludF9lbmFibGUpICYgMHgxKSkgeworCQkvKiBhY2tub3dsZWRnZSAqLworCQlvdXRfOCgmcmVncy0+aW50X3NlYywgMSk7CisKKwkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGMsIDEsIFJUQ19JUlFGIHwgUlRDX1VGKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisJaW50IHZhbDsKKworCWlmIChlbmFibGVkKQorCQl2YWwgPSAxOworCWVsc2UKKwkJdmFsID0gMDsKKworCW91dF84KCZyZWdzLT5hbG1fZW5hYmxlLCB2YWwpOworCXJ0Yy0+d2thbGFybS5lbmFibGVkID0gdmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyMV9ydGNfdXBkYXRlX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisJaW50IHZhbDsKKworCXZhbCA9IGluXzgoJnJlZ3MtPmludF9lbmFibGUpOworCisJaWYgKGVuYWJsZWQpCisJCXZhbCA9ICh2YWwgJiB+MHg4KSB8IDB4MTsKKwllbHNlCisJCXZhbCAmPSB+MHgxOworCisJb3V0XzgoJnJlZ3MtPmludF9lbmFibGUsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1wYzUxMjFfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lID0gbXBjNTEyMV9ydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZSA9IG1wYzUxMjFfcnRjX3NldF90aW1lLAorCS5yZWFkX2FsYXJtID0gbXBjNTEyMV9ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtID0gbXBjNTEyMV9ydGNfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gbXBjNTEyMV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUgPSBtcGM1MTIxX3J0Y191cGRhdGVfaXJxX2VuYWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUxMjFfcnRjX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjOworCWludCBlcnIgPSAwOworCXUzMiBrYTsKKworCXJ0YyA9IGt6YWxsb2Moc2l6ZW9mKCpydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ0YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydGMtPnJlZ3MgPSBvZl9pb21hcChvcC0+bm9kZSwgMCk7CisJaWYgKCFydGMtPnJlZ3MpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIiVzOiBjb3VsZG4ndCBtYXAgaW8gc3BhY2VcbiIsIF9fZnVuY19fKTsKKwkJZXJyID0gLUVOT1NZUzsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJm9wLT5kZXYsIDEpOworCisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBydGMpOworCisJcnRjLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvcC0+bm9kZSwgMSk7CisJZXJyID0gcmVxdWVzdF9pcnEocnRjLT5pcnEsIG1wYzUxMjFfcnRjX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsCisJCQkJCQkibXBjNTEyMS1ydGMiLCAmb3AtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiJXM6IGNvdWxkIG5vdCByZXF1ZXN0IGlycTogJWlcbiIsCisJCQkJCQkJX19mdW5jX18sIHJ0Yy0+aXJxKTsKKwkJZ290byBvdXRfZGlzcG9zZTsKKwl9CisKKwlydGMtPmlycV9wZXJpb2RpYyA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKKwllcnIgPSByZXF1ZXN0X2lycShydGMtPmlycV9wZXJpb2RpYywgbXBjNTEyMV9ydGNfaGFuZGxlcl91cGQsCisJCQkJSVJRRl9ESVNBQkxFRCwgIm1wYzUxMjEtcnRjX3VwZCIsICZvcC0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICIlczogY291bGQgbm90IHJlcXVlc3QgaXJxOiAlaVxuIiwKKwkJCQkJCV9fZnVuY19fLCBydGMtPmlycV9wZXJpb2RpYyk7CisJCWdvdG8gb3V0X2Rpc3Bvc2UyOworCX0KKworCWthID0gaW5fYmUzMigmcnRjLT5yZWdzLT5rZWVwX2FsaXZlKTsKKwlpZiAoa2EgJiAweDAyKSB7CisJCWRldl93YXJuKCZvcC0+ZGV2LAorCQkJIm1wYzUxMjEtcnRjOiBCYXR0ZXJ5IG9yIG9zY2lsbGF0b3IgZmFpbHVyZSFcbiIpOworCQlvdXRfYmUzMigmcnRjLT5yZWdzLT5rZWVwX2FsaXZlLCBrYSk7CisJfQorCisJcnRjLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtcGM1MTIxLXJ0YyIsICZvcC0+ZGV2LAorCQkJCQkmbXBjNTEyMV9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMtPnJ0YykpIHsKKwkJZXJyID0gUFRSX0VSUihydGMtPnJ0Yyk7CisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCX0KKworCXJldHVybiAwOworCitvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocnRjLT5pcnFfcGVyaW9kaWMsICZvcC0+ZGV2KTsKK291dF9kaXNwb3NlMjoKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHJ0Yy0+aXJxX3BlcmlvZGljKTsKKwlmcmVlX2lycShydGMtPmlycSwgJm9wLT5kZXYpOworb3V0X2Rpc3Bvc2U6CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhydGMtPmlycSk7CisJaW91bm1hcChydGMtPnJlZ3MpOworb3V0X2ZyZWU6CisJa2ZyZWUocnRjKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1wYzUxMjFfcnRjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHQsIHNvIHRoZXJlIGFyZSBubyBuYXN0eSBzdXJwcmlzZXMgKi8KKwlvdXRfOCgmcmVncy0+YWxtX2VuYWJsZSwgMCk7CisJb3V0XzgoJnJlZ3MtPmludF9lbmFibGUsIGluXzgoJnJlZ3MtPmludF9lbmFibGUpICYgfjB4MSk7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjLT5ydGMpOworCWlvdW5tYXAocnRjLT5yZWdzKTsKKwlmcmVlX2lycShydGMtPmlycSwgJm9wLT5kZXYpOworCWZyZWVfaXJxKHJ0Yy0+aXJxX3BlcmlvZGljLCAmb3AtPmRldik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhydGMtPmlycSk7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhydGMtPmlycV9wZXJpb2RpYyk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKKwlrZnJlZShydGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUxMjFfcnRjX21hdGNoW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXJ0YyIsIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtcGM1MTIxX3J0Y19kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibXBjNTEyMS1ydGMiLAorCS5tYXRjaF90YWJsZSA9IG1wYzUxMjFfcnRjX21hdGNoLAorCS5wcm9iZSA9IG1wYzUxMjFfcnRjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtcGM1MTIxX3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjNTEyMV9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUxMjFfcnRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChtcGM1MTIxX3J0Y19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1wYzUxMjFfcnRjX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTEyMV9ydGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1wYzUxMjFfcnRjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKb2huIFJpZ2J5IDxqY3JpZ2J5QGdtYWlsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDg4MzFlOTMuLjQ5NTFhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgpAQCAtMTEyLDYgKzExMyw3IEBACiAJSU5JVF9XT1JLKCZkZXZpY2UtPnJlc3RvcmVfZGV2aWNlLCBkb19yZXN0b3JlX2RldmljZSk7CiAJZGV2aWNlLT5zdGF0ZSA9IERBU0RfU1RBVEVfTkVXOwogCWRldmljZS0+dGFyZ2V0ID0gREFTRF9TVEFURV9ORVc7CisJbXV0ZXhfaW5pdCgmZGV2aWNlLT5zdGF0ZV9tdXRleCk7CiAKIAlyZXR1cm4gZGV2aWNlOwogfQpAQCAtMzIxLDggKzMyMyw4IEBACiAJCQlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9SRUFEWTsKIAkJCXJldHVybiByYzsKIAkJfQotCQlkYXNkX2Rlc3Ryb3lfcGFydGl0aW9ucyhibG9jayk7CiAJCWRhc2RfZmx1c2hfcmVxdWVzdF9xdWV1ZShibG9jayk7CisJCWRhc2RfZGVzdHJveV9wYXJ0aXRpb25zKGJsb2NrKTsKIAkJYmxvY2stPmJsb2NrcyA9IDA7CiAJCWJsb2NrLT5icF9ibG9jayA9IDA7CiAJCWJsb2NrLT5zMmJfc2hpZnQgPSAwOwpAQCAtNDg0LDEwICs0ODYsOCBAQAogCWlmIChyYykKIAkJZGV2aWNlLT50YXJnZXQgPSBkZXZpY2UtPnN0YXRlOwogCi0JaWYgKGRldmljZS0+c3RhdGUgPT0gZGV2aWNlLT50YXJnZXQpIHsKKwlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBkZXZpY2UtPnRhcmdldCkKIAkJd2FrZV91cCgmZGFzZF9pbml0X3dhaXRxKTsKLQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Ci0JfQogCiAJLyogbGV0IHVzZXItc3BhY2Uga25vdyB0aGF0IHRoZSBkZXZpY2Ugc3RhdHVzIGNoYW5nZWQgKi8KIAlrb2JqZWN0X3VldmVudCgmZGV2aWNlLT5jZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UpOwpAQCAtNTAyLDcgKzUwMiw5IEBACiBzdGF0aWMgdm9pZCBkb19raWNrX2RldmljZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRhc2RfZGV2aWNlLCBraWNrX3dvcmspOworCW11dGV4X2xvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOwogCWRhc2RfY2hhbmdlX3N0YXRlKGRldmljZSk7CisJbXV0ZXhfdW5sb2NrKCZkZXZpY2UtPnN0YXRlX211dGV4KTsKIAlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogfQpAQCAtNTM5LDE4ICs1NDEsMTkgQEAKIHZvaWQgZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBpbnQgdGFyZ2V0KQogewogCWRhc2RfZ2V0X2RldmljZShkZXZpY2UpOworCW11dGV4X2xvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOwogCS8qIElmIHdlIGFyZSBpbiBwcm9iZW9ubHkgbW9kZSBzdG9wIGF0IERBU0RfU1RBVEVfUkVBRFkuICovCiAJaWYgKGRhc2RfcHJvYmVvbmx5ICYmIHRhcmdldCA+IERBU0RfU1RBVEVfUkVBRFkpCiAJCXRhcmdldCA9IERBU0RfU1RBVEVfUkVBRFk7CiAJaWYgKGRldmljZS0+dGFyZ2V0ICE9IHRhcmdldCkgewotCQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSB0YXJnZXQpIHsKKwkJaWYgKGRldmljZS0+c3RhdGUgPT0gdGFyZ2V0KQogCQkJd2FrZV91cCgmZGFzZF9pbml0X3dhaXRxKTsKLQkJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwotCQl9CiAJCWRldmljZS0+dGFyZ2V0ID0gdGFyZ2V0OwogCX0KIAlpZiAoZGV2aWNlLT5zdGF0ZSAhPSBkZXZpY2UtPnRhcmdldCkKIAkJZGFzZF9jaGFuZ2Vfc3RhdGUoZGV2aWNlKTsKKwltdXRleF91bmxvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOworCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogfQogCiAvKgpAQCAtMTAwMCwxMiArMTAwMywyMCBAQAogCQlyZXR1cm47CiAJfQogCi0JZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwotCWlmIChkZXZpY2UgPT0gTlVMTCB8fAotCSAgICBkZXZpY2UgIT0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KSB8fAotCSAgICBzdHJuY21wKGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7CisJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KTsKKwlpZiAoSVNfRVJSKGRldmljZSkpIHsKKwkJREJGX0VWRU5UX0RFVklEKERCRl9ERUJVRywgY2RldiwgIiVzIiwKKwkJCQkidW5hYmxlIHRvIGdldCBkZXZpY2UgZnJvbSBjZGV2Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWNxci0+c3RhcnRkZXYgfHwKKwkgICAgZGV2aWNlICE9IGNxci0+c3RhcnRkZXYgfHwKKwkgICAgc3RybmNtcChjcXItPnN0YXJ0ZGV2LT5kaXNjaXBsaW5lLT5lYmNuYW1lLAorCQkgICAgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7CiAJCURCRl9FVkVOVF9ERVZJRChEQkZfREVCVUcsIGNkZXYsICIlcyIsCiAJCQkJImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3QiKTsKKwkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2OTIsNyArMTcwMyw2IEBACiAJCQkJY3FyLCByYyk7CiAJCX0gZWxzZSB7CiAJCQljcXItPnN0b3BjbGsgPSBnZXRfY2xvY2soKTsKLQkJCXJjID0gMTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OiAvKiBhbHJlYWR5IGZpbmlzaGVkIG9yIGNsZWFyIHBlbmRpbmcgLSBkbyBub3RoaW5nICovCkBAIC0yMTY5LDkgKzIxNzksMTMgQEAKIHN0YXRpYyBpbnQgZGFzZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlID0gYmxvY2stPmJhc2U7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlOwogCWludCByYzsKIAorCWlmICghYmxvY2spCisJCXJldHVybiAtRU5PREVWOworCisJYmFzZSA9IGJsb2NrLT5iYXNlOwogCWF0b21pY19pbmMoJmJsb2NrLT5vcGVuX2NvdW50KTsKIAlpZiAodGVzdF9iaXQoREFTRF9GTEFHX09GRkxJTkUsICZiYXNlLT5mbGFncykpIHsKIAkJcmMgPSAtRU5PREVWOwpAQCAtMjI4NCwxMSArMjI5OCw2IEBACiAJaWYgKHJldCkKIAkJcHJfd2FybmluZygiJXM6IFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAogCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldiksIHJldCk7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2KGNkZXYpOwotCQl3YWl0X2V2ZW50KGRhc2RfaW5pdF93YWl0cSwgX3dhaXRfZm9yX2RldmljZShkZXZpY2UpKTsKLQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Ci0JfQogfQogCiAvKgpAQCAtMjQyMyw2ICsyNDMyLDkgQEAKIAl9IGVsc2UKIAkJcHJfZGVidWcoImRhc2RfZ2VuZXJpYyBkZXZpY2UgJXMgZm91bmRcbiIsCiAJCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCisJd2FpdF9ldmVudChkYXNkX2luaXRfd2FpdHEsIF93YWl0X2Zvcl9kZXZpY2UoZGV2aWNlKSk7CisKIAlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDRjYWM1YjUuLmQ0OTc2NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC04NzQsMTIgKzg3NCwxOSBAQAogCXNzaXplX3QgbGVuOwogCiAJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2KHRvX2Njd2RldihkZXYpKTsKLQlpZiAoIUlTX0VSUihkZXZpY2UpICYmIGRldmljZS0+ZGlzY2lwbGluZSkgeworCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJZ290byBvdXQ7CisJZWxzZSBpZiAoIWRldmljZS0+ZGlzY2lwbGluZSkgeworCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKIAkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKIAkJCSAgICAgICBkZXZpY2UtPmRpc2NpcGxpbmUtPm5hbWUpOwogCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKLQl9IGVsc2UKLQkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJub25lXG4iKTsKKwkJcmV0dXJuIGxlbjsKKwl9CitvdXQ6CisJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJub25lXG4iKTsKIAlyZXR1cm4gbGVuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwppbmRleCBkMzE5ODMwLi45NGY5MmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKQEAgLTg4LDYgKzg4LDcgQEAKIAlpZiAoYmxvY2stPmdkcCkgewogCQlkZWxfZ2VuZGlzayhibG9jay0+Z2RwKTsKIAkJYmxvY2stPmdkcC0+cXVldWUgPSBOVUxMOworCQlibG9jay0+Z2RwLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCQlwdXRfZGlzayhibG9jay0+Z2RwKTsKIAkJYmxvY2stPmdkcCA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCBlNGMyMTQzLi5lZDczY2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtMzY4LDYgKzM2OCw3IEBACiAKIAkvKiBEZXZpY2Ugc3RhdGUgYW5kIHRhcmdldCBzdGF0ZS4gKi8KIAlpbnQgc3RhdGUsIHRhcmdldDsKKwlzdHJ1Y3QgbXV0ZXggc3RhdGVfbXV0ZXg7CiAJaW50IHN0b3BwZWQ7CQkvKiBkZXZpY2UgKGNjd19kZXZpY2Vfc3RhcnQpIHdhcyBzdG9wcGVkICovCiAKIAkvKiByZWZlcmVuY2UgY291bnQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggNzFmOTVmNS4uZjEzYTBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtMTY1LDUxICsxNjUsMzIgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKIAotc3RhdGljIGludAotZGFzZF9jYWxjX21ldHJpY3MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgaW50IGxlbikKLXsKLQlsZW4gPSAobGVuID4gb2ZmKSA/IGxlbiAtIG9mZiA6IDA7Ci0JaWYgKGxlbiA+IGNvdW50KQotCQlsZW4gPSBjb3VudDsKLQlpZiAobGVuIDwgY291bnQpCi0JCSplb2YgPSAxOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JcmV0dXJuIGxlbjsKLX0KLQogI2lmZGVmIENPTkZJR19EQVNEX1BST0ZJTEUKLXN0YXRpYyBjaGFyICoKLWRhc2Rfc3RhdGlzdGljc19hcnJheShjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqYXJyYXksIGludCBmYWN0b3IpCitzdGF0aWMgdm9pZCBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBpbnQgKmFycmF5LCBpbnQgZmFjdG9yKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJc3RyICs9IHNwcmludGYoc3RyLCAiJTdkICIsIGFycmF5W2ldIC8gZmFjdG9yKTsKKwkJc2VxX3ByaW50ZihtLCAiJTdkICIsIGFycmF5W2ldIC8gZmFjdG9yKTsKIAkJaWYgKGkgPT0gMTUpCi0JCQlzdHIgKz0gc3ByaW50ZihzdHIsICJcbiIpOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJfQotCXN0ciArPSBzcHJpbnRmKHN0ciwiXG4iKTsKLQlyZXR1cm4gc3RyOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogI2VuZGlmIC8qIENPTkZJR19EQVNEX1BST0ZJTEUgKi8KIAotc3RhdGljIGludAotZGFzZF9zdGF0aXN0aWNzX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCSAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgZGFzZF9zdGF0c19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXVuc2lnbmVkIGxvbmcgbGVuOwogI2lmZGVmIENPTkZJR19EQVNEX1BST0ZJTEUKIAlzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCAqcHJvZjsKLQljaGFyICpzdHI7CiAJaW50IGZhY3RvcjsKIAogCS8qIGNoZWNrIGZvciBhY3RpdmUgcHJvZmlsaW5nICovCiAJaWYgKGRhc2RfcHJvZmlsZV9sZXZlbCA9PSBEQVNEX1BST0ZJTEVfT0ZGKSB7Ci0JCWxlbiA9IHNwcmludGYocGFnZSwgIlN0YXRpc3RpY3MgYXJlIG9mZiAtIHRoZXkgbWlnaHQgYmUgIgorCQlzZXFfcHJpbnRmKG0sICJTdGF0aXN0aWNzIGFyZSBvZmYgLSB0aGV5IG1pZ2h0IGJlICIKIAkJCQkgICAgInN3aXRjaGVkIG9uIHVzaW5nICdlY2hvIHNldCBvbiA+ICIKIAkJCQkgICAgIi9wcm9jL2Rhc2Qvc3RhdGlzdGljcydcbiIpOwotCQlyZXR1cm4gZGFzZF9jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJcHJvZiA9ICZkYXNkX2dsb2JhbF9wcm9maWxlOwpAQCAtMjE3LDQ3ICsxOTgsNDkgQEAKIAlmb3IgKGZhY3RvciA9IDE7IChwcm9mLT5kYXNkX2lvX3JlcXMgLyBmYWN0b3IpID4gOTk5OTk5OTsKIAkgICAgIGZhY3RvciAqPSAxMCk7CiAKLQlzdHIgPSBwYWdlOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkIGRhc2QgSS9PIHJlcXVlc3RzXG4iLCBwcm9mLT5kYXNkX2lvX3JlcXMpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIndpdGggJXUgc2VjdG9ycyg1MTJCIGVhY2gpXG4iLAorCXNlcV9wcmludGYobSwgIiVkIGRhc2QgSS9PIHJlcXVlc3RzXG4iLCBwcm9mLT5kYXNkX2lvX3JlcXMpOworCXNlcV9wcmludGYobSwgIndpdGggJXUgc2VjdG9ycyg1MTJCIGVhY2gpXG4iLAogCQkgICAgICAgcHJvZi0+ZGFzZF9pb19zZWN0cyk7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiU2NhbGUgRmFjdG9yIGlzICAlZFxuIiwgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsCisJc2VxX3ByaW50ZihtLCAiU2NhbGUgRmFjdG9yIGlzICAlZFxuIiwgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sCiAJCSAgICAgICAiICAgX188NAkgICBfX184CSAgIF9fMTYJICAgX18zMgkgICBfXzY0CSAgIF8xMjgJIgogCQkgICAgICAgIiAgIF8yNTYJICAgXzUxMgkgICBfXzFrCSAgIF9fMmsJICAgX180awkgICBfXzhrCSIKIAkJICAgICAgICIgICBfMTZrCSAgIF8zMmsJICAgXzY0awkgICAxMjhrXG4iKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsCisJc2VxX3ByaW50ZihtLAogCQkgICAgICAgIiAgIF8yNTYJICAgXzUxMgkgICBfXzFNCSAgIF9fMk0JICAgX180TQkgICBfXzhNCSIKIAkJICAgICAgICIgICBfMTZNCSAgIF8zMk0JICAgXzY0TQkgICAxMjhNCSAgIDI1Nk0JICAgNTEyTQkiCiAJCSAgICAgICAiICAgX18xRwkgICBfXzJHCSAgIF9fNEcgIiAiICAgXz40R1xuIik7CiAKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2Ygc2l6ZXMgKDUxMkIgc2VjcylcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fc2VjcywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWVzIChtaWNyb3NlY29uZHMpXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3RpbWVzLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZXMgcGVyIHNlY3RvclxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1wcywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgdGlsbCBzc2NoXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3RpbWUxLCBmYWN0b3IpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSBiZXR3ZWVuIHNzY2ggYW5kIGlycVxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1lMiwgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBzc2NoICIKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2Ygc2l6ZXMgKDUxMkIgc2VjcylcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3NlY3MsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lcyAobWljcm9zZWNvbmRzKVxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltZXMsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lcyBwZXIgc2VjdG9yXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb190aW1wcywgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgdGlsbCBzc2NoXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb190aW1lMSwgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBzc2NoIGFuZCBpcnFcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWUyLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZSBiZXR3ZWVuIHNzY2ggIgogCQkJICAgICJhbmQgaXJxIHBlciBzZWN0b3JcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltZTJwcywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBpcnEgYW5kIGVuZFxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1lMywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICIjIG9mIHJlcSBpbiBjaGFucSBhdCBlbnF1ZXVpbmcgKDEuLjMyKSBcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fbnJfcmVxLCBmYWN0b3IpOwotCWxlbiA9IHN0ciAtIHBhZ2U7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltZTJwcywgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBpcnEgYW5kIGVuZFxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltZTMsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiIyBvZiByZXEgaW4gY2hhbnEgYXQgZW5xdWV1aW5nICgxLi4zMikgXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb19ucl9yZXEsIGZhY3Rvcik7CiAjZWxzZQotCWxlbiA9IHNwcmludGYocGFnZSwgIlN0YXRpc3RpY3MgYXJlIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWxcbiIpOworCXNlcV9wcmludGYobSwgIlN0YXRpc3RpY3MgYXJlIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWxcbiIpOwogI2VuZGlmCi0JcmV0dXJuIGRhc2RfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWRhc2Rfc3RhdGlzdGljc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkgICAgICB1bnNpZ25lZCBsb25nIHVzZXJfbGVuLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBkYXNkX3N0YXRzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGFzZF9zdGF0c19wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgc3NpemVfdCBkYXNkX3N0YXRzX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKnBvcykKIHsKICNpZmRlZiBDT05GSUdfREFTRF9QUk9GSUxFCiAJY2hhciAqYnVmZmVyLCAqc3RyOwpAQCAtMzA4LDYgKzI5MSwxNSBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19EQVNEX1BST0ZJTEUgKi8KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFzZF9zdGF0c19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRhc2Rfc3RhdHNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGRhc2Rfc3RhdHNfcHJvY193cml0ZSwKK307CisKIC8qCiAgKiBDcmVhdGUgZGFzZCBwcm9jLWZzIGVudHJpZXMuCiAgKiBJbiBjYXNlIGNyZWF0aW9uIGZhaWxlZCwgY2xlYW51cCBhbmQgcmV0dXJuIC1FTk9FTlQuCkBAIC0zMjQsMTMgKzMxNiwxMiBAQAogCQkJCQkgJmRhc2RfZGV2aWNlc19maWxlX29wcyk7CiAJaWYgKCFkYXNkX2RldmljZXNfZW50cnkpCiAJCWdvdG8gb3V0X25vZGV2aWNlczsKLQlkYXNkX3N0YXRpc3RpY3NfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic3RhdGlzdGljcyIsCi0JCQkJCQkgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCQkJCSAgZGFzZF9wcm9jX3Jvb3RfZW50cnkpOworCWRhc2Rfc3RhdGlzdGljc19lbnRyeSA9IHByb2NfY3JlYXRlKCJzdGF0aXN0aWNzIiwKKwkJCQkJICAgIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQkJICAgIGRhc2RfcHJvY19yb290X2VudHJ5LAorCQkJCQkgICAgJmRhc2Rfc3RhdHNfcHJvY19mb3BzKTsKIAlpZiAoIWRhc2Rfc3RhdGlzdGljc19lbnRyeSkKIAkJZ290byBvdXRfbm9zdGF0aXN0aWNzOwotCWRhc2Rfc3RhdGlzdGljc19lbnRyeS0+cmVhZF9wcm9jID0gZGFzZF9zdGF0aXN0aWNzX3JlYWQ7Ci0JZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT53cml0ZV9wcm9jID0gZGFzZF9zdGF0aXN0aWNzX3dyaXRlOwogCXJldHVybiAwOwogCiAgb3V0X25vc3RhdGlzdGljczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCmluZGV4IDgyZGFhM2MuLjM0Mzg2NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9pcGwuaD4KICNpbmNsdWRlIDxhc20vc2NscC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNDAsMTIgKzQxLDEyIEBACiAvKiBkdW1wIHN5c3RlbSBpbmZvICovCiAKIHN0cnVjdCBzeXNfaW5mbyB7Ci0JZW51bSBhcmNoX2lkCWFyY2g7Ci0JdW5zaWduZWQgbG9uZwlzYV9iYXNlOwotCXUzMgkJc2Ffc2l6ZTsKLQlpbnQJCWNwdV9tYXBbTlJfQ1BVU107Ci0JdW5zaWduZWQgbG9uZwltZW1fc2l6ZTsKLQl1bmlvbiBzYXZlX2FyZWEJbGNfbWFzazsKKwllbnVtIGFyY2hfaWQJIGFyY2g7CisJdW5zaWduZWQgbG9uZwkgc2FfYmFzZTsKKwl1MzIJCSBzYV9zaXplOworCWludAkJIGNwdV9tYXBbTlJfQ1BVU107CisJdW5zaWduZWQgbG9uZwkgbWVtX3NpemU7CisJc3RydWN0IHNhdmVfYXJlYSBsY19tYXNrOwogfTsKIAogc3RydWN0IGlwaWJfaW5mbyB7CkBAIC0xODMsNTIgKzE4NCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBfX3MzOTB4X18KLS8qCi0gKiBDb252ZXJ0IHMzOTB4ICg2NCBiaXQpIGNwdSBpbmZvIHRvIHMzOTAgKDMyIGJpdCkgY3B1IGluZm8KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHMzOTB4X3RvX3MzOTBfcmVncyh1bmlvbiBzYXZlX2FyZWEgKm91dCwgdW5pb24gc2F2ZV9hcmVhICppbiwKLQkJCQkgICAgICBpbnQgY3B1KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJb3V0LT5zMzkwLmdwX3JlZ3NbaV0gPSBpbi0+czM5MHguZ3BfcmVnc1tpXSAmIDB4MDAwMDAwMDBmZmZmZmZmZjsKLQkJb3V0LT5zMzkwLmFjY19yZWdzW2ldID0gaW4tPnMzOTB4LmFjY19yZWdzW2ldOwotCQlvdXQtPnMzOTAuY3RybF9yZWdzW2ldID0KLQkJCWluLT5zMzkweC5jdHJsX3JlZ3NbaV0gJiAweDAwMDAwMDAwZmZmZmZmZmY7Ci0JfQotCS8qIGxvY29yZSBmb3IgMzEgYml0IGhhcyBvbmx5IHNwYWNlIGZvciBmcHJlZ3MgMCwyLDQsNiAqLwotCW91dC0+czM5MC5mcF9yZWdzWzBdID0gaW4tPnMzOTB4LmZwX3JlZ3NbMF07Ci0Jb3V0LT5zMzkwLmZwX3JlZ3NbMV0gPSBpbi0+czM5MHguZnBfcmVnc1syXTsKLQlvdXQtPnMzOTAuZnBfcmVnc1syXSA9IGluLT5zMzkweC5mcF9yZWdzWzRdOwotCW91dC0+czM5MC5mcF9yZWdzWzNdID0gaW4tPnMzOTB4LmZwX3JlZ3NbNl07Ci0JbWVtY3B5KCYob3V0LT5zMzkwLnBzd1swXSksICYoaW4tPnMzOTB4LnBzd1swXSksIDQpOwotCW91dC0+czM5MC5wc3dbMV0gfD0gMHg4OyAvKiBzZXQgYml0IDEyICovCi0JbWVtY3B5KCYob3V0LT5zMzkwLnBzd1s0XSksJihpbi0+czM5MHgucHN3WzEyXSksIDQpOwotCW91dC0+czM5MC5wc3dbNF0gfD0gMHg4MDsgLyogc2V0ICgzMWJpdCkgYWRkcmVzc2luZyBiaXQgKi8KLQlvdXQtPnMzOTAucHJlZl9yZWcgPSBpbi0+czM5MHgucHJlZl9yZWc7Ci0Jb3V0LT5zMzkwLnRpbWVyID0gaW4tPnMzOTB4LnRpbWVyOwotCW91dC0+czM5MC5jbGtfY21wID0gaW4tPnMzOTB4LmNsa19jbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzMzkweF90b19zMzkwX3NhdmVfYXJlYXModm9pZCkKLXsKLQlpbnQgaSA9IDE7Ci0Jc3RhdGljIHVuaW9uIHNhdmVfYXJlYSB0bXA7Ci0KLQl3aGlsZSAoemZjcGR1bXBfc2F2ZV9hcmVhc1tpXSkgewotCQlzMzkweF90b19zMzkwX3JlZ3MoJnRtcCwgemZjcGR1bXBfc2F2ZV9hcmVhc1tpXSwgaSk7Ci0JCW1lbWNweSh6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLCAmdG1wLCBzaXplb2YodG1wKSk7Ci0JCWkrKzsKLQl9Ci19Ci0KLSNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQogc3RhdGljIGludCBfX2luaXQgaW5pdF9jcHVfaW5mbyhlbnVtIGFyY2hfaWQgYXJjaCkKIHsKLQl1bmlvbiBzYXZlX2FyZWEgKnNhOworCXN0cnVjdCBzYXZlX2FyZWEgKnNhOwogCiAJLyogZ2V0IGluZm8gZm9yIGJvb3QgY3B1IGZyb20gbG93Y29yZSwgc3RvcmVkIGluIHRoZSBIU0EgKi8KIApAQCAtMjQxLDIwICsxOTksMTIgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCXpmY3BkdW1wX3NhdmVfYXJlYXNbMF0gPSBzYTsKLQotI2lmZGVmIF9fczM5MHhfXwotCS8qIGNvbnZlcnQgczM5MHggcmVncyB0byBzMzkwLCBpZiB3ZSBhcmUgZHVtcGluZyBhbiBzMzkwIExpbnV4ICovCi0KLQlpZiAoYXJjaCA9PSBBUkNIX1MzOTApCi0JCXMzOTB4X3RvX3MzOTBfc2F2ZV9hcmVhcygpOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIERFRklORV9NVVRFWCh6Y29yZV9tdXRleCk7CiAKLSNkZWZpbmUgRFVNUF9WRVJTSU9OCTB4MworI2RlZmluZSBEVU1QX1ZFUlNJT04JMHg1CiAjZGVmaW5lIERVTVBfTUFHSUMJMHhhODE5MDE3MzYxOGYyM2ZkVUxMCiAjZGVmaW5lIERVTVBfQVJDSF9TMzkwWAkyCiAjZGVmaW5lIERVTVBfQVJDSF9TMzkwCTEKQEAgLTI3OSw3ICsyMjksMTQgQEAKIAl1MzIgdm9sbnI7CiAJdTMyIGJ1aWxkX2FyY2g7CiAJdTY0IHJtZW1fc2l6ZTsKLQljaGFyIHBhZDJbNDAxNl07CisJdTggbXZkdW1wOworCXUxNiBjcHVfY250OworCXUxNiByZWFsX2NwdV9jbnQ7CisJdTggZW5kX3BhZDFbMHgyMDAtMHgwNjFdOworCXU2NCBtdmR1bXBfc2lnbjsKKwl1NjQgbXZkdW1wX3ppcGxfdGltZTsKKwl1OCBlbmRfcGFkMlsweDgwMC0weDIxMF07CisJdTMyIGxjX3ZlY1s1MTJdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsX19hbGlnbmVkX18oMTYpKSk7CiAKIHN0YXRpYyBzdHJ1Y3QgemNvcmVfaGVhZGVyIHpjb3JlX2hlYWRlciA9IHsKQEAgLTI4OSw3ICsyNDYsNyBAQAogCS5kdW1wX2xldmVsCT0gMCwKIAkucGFnZV9zaXplCT0gUEFHRV9TSVpFLAogCS5tZW1fc3RhcnQJPSAwLAotI2lmZGVmIF9fczM5MHhfXworI2lmZGVmIENPTkZJR182NEJJVAogCS5idWlsZF9hcmNoCT0gRFVNUF9BUkNIX1MzOTBYLAogI2Vsc2UKIAkuYnVpbGRfYXJjaAk9IERVTVBfQVJDSF9TMzkwLApAQCAtMzQwLDExICsyOTcsNyBAQAogCQl1bnNpZ25lZCBsb25nIHByZWZpeDsKIAkJdW5zaWduZWQgbG9uZyBzYV9vZmYsIGxlbiwgYnVmX29mZjsKIAotCQlpZiAoc3lzX2luZm8uYXJjaCA9PSBBUkNIX1MzOTApCi0JCQlwcmVmaXggPSB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLT5zMzkwLnByZWZfcmVnOwotCQllbHNlCi0JCQlwcmVmaXggPSB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLT5zMzkweC5wcmVmX3JlZzsKLQorCQlwcmVmaXggPSB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLT5wcmVmX3JlZzsKIAkJc2Ffc3RhcnQgPSBwcmVmaXggKyBzeXNfaW5mby5zYV9iYXNlOwogCQlzYV9lbmQgPSBwcmVmaXggKyBzeXNfaW5mby5zYV9iYXNlICsgc3lzX2luZm8uc2Ffc2l6ZTsKIApAQCAtNTYxLDM0ICs1MTQsMzkgQEAKIAkucmVsZWFzZQk9IHpjb3JlX3JlaXBsX3JlbGVhc2UsCiB9OwogCisjaWZkZWYgQ09ORklHXzMyQklUCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfczM5MF9sY19tYXNrKHVuaW9uIHNhdmVfYXJlYSAqbWFwKQorc3RhdGljIHZvaWQgX19pbml0IHNldF9sY19tYXNrKHN0cnVjdCBzYXZlX2FyZWEgKm1hcCkKIHsKLQltZW1zZXQoJm1hcC0+czM5MC5leHRfc2F2ZSwgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5leHRfc2F2ZSkpOwotCW1lbXNldCgmbWFwLT5zMzkwLnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLnRpbWVyKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAuY2xrX2NtcCwgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5jbGtfY21wKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAucHN3LCAweGZmLCBzaXplb2YobWFwLT5zMzkwLnBzdykpOwotCW1lbXNldCgmbWFwLT5zMzkwLnByZWZfcmVnLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLnByZWZfcmVnKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAuYWNjX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuYWNjX3JlZ3MpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5mcF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmZwX3JlZ3MpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5ncF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmdwX3JlZ3MpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5jdHJsX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuY3RybF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmV4dF9zYXZlLCAweGZmLCBzaXplb2YobWFwLT5leHRfc2F2ZSkpOworCW1lbXNldCgmbWFwLT50aW1lciwgMHhmZiwgc2l6ZW9mKG1hcC0+dGltZXIpKTsKKwltZW1zZXQoJm1hcC0+Y2xrX2NtcCwgMHhmZiwgc2l6ZW9mKG1hcC0+Y2xrX2NtcCkpOworCW1lbXNldCgmbWFwLT5wc3csIDB4ZmYsIHNpemVvZihtYXAtPnBzdykpOworCW1lbXNldCgmbWFwLT5wcmVmX3JlZywgMHhmZiwgc2l6ZW9mKG1hcC0+cHJlZl9yZWcpKTsKKwltZW1zZXQoJm1hcC0+YWNjX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmFjY19yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmZwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmZwX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+Z3BfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+Z3BfcmVncykpOworCW1lbXNldCgmbWFwLT5jdHJsX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmN0cmxfcmVncykpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X3MzOTB4X2xjX21hc2sodW5pb24gc2F2ZV9hcmVhICptYXApCisjZWxzZSAvKiBDT05GSUdfMzJCSVQgKi8KKworc3RhdGljIHZvaWQgX19pbml0IHNldF9sY19tYXNrKHN0cnVjdCBzYXZlX2FyZWEgKm1hcCkKIHsKLQltZW1zZXQoJm1hcC0+czM5MHguZnBfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHguZnBfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkweC5ncF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5ncF9yZWdzKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LnBzdywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHgucHN3KSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LnByZWZfcmVnLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5wcmVmX3JlZykpOwotCW1lbXNldCgmbWFwLT5zMzkweC5mcF9jdHJsX3JlZywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHguZnBfY3RybF9yZWcpKTsKLQltZW1zZXQoJm1hcC0+czM5MHgudG9kX3JlZywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHgudG9kX3JlZykpOwotCW1lbXNldCgmbWFwLT5zMzkweC50aW1lciwgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHgudGltZXIpKTsKLQltZW1zZXQoJm1hcC0+czM5MHguY2xrX2NtcCwgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHguY2xrX2NtcCkpOwotCW1lbXNldCgmbWFwLT5zMzkweC5hY2NfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MHguYWNjX3JlZ3MpKTsKLQltZW1zZXQoJm1hcC0+czM5MHguY3RybF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5jdHJsX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+ZnBfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+ZnBfcmVncykpOworCW1lbXNldCgmbWFwLT5ncF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5ncF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPnBzdywgMHhmZiwgc2l6ZW9mKG1hcC0+cHN3KSk7CisJbWVtc2V0KCZtYXAtPnByZWZfcmVnLCAweGZmLCBzaXplb2YobWFwLT5wcmVmX3JlZykpOworCW1lbXNldCgmbWFwLT5mcF9jdHJsX3JlZywgMHhmZiwgc2l6ZW9mKG1hcC0+ZnBfY3RybF9yZWcpKTsKKwltZW1zZXQoJm1hcC0+dG9kX3JlZywgMHhmZiwgc2l6ZW9mKG1hcC0+dG9kX3JlZykpOworCW1lbXNldCgmbWFwLT50aW1lciwgMHhmZiwgc2l6ZW9mKG1hcC0+dGltZXIpKTsKKwltZW1zZXQoJm1hcC0+Y2xrX2NtcCwgMHhmZiwgc2l6ZW9mKG1hcC0+Y2xrX2NtcCkpOworCW1lbXNldCgmbWFwLT5hY2NfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+YWNjX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+Y3RybF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5jdHJsX3JlZ3MpKTsKIH0KIAorI2VuZGlmIC8qIENPTkZJR18zMkJJVCAqLworCiAvKgogICogSW5pdGlhbGl6ZSBkdW1wIGdsb2JhbHMgZm9yIGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlCiAgKi8KQEAgLTU5OSwyMSArNTU3LDE4IEBACiAJc3dpdGNoIChhcmNoKSB7CiAJY2FzZSBBUkNIX1MzOTBYOgogCQlwcl9hbGVydCgiREVURUNURUQgJ1MzOTBYICg2NCBiaXQpIE9TJ1xuIik7Ci0JCXN5c19pbmZvLnNhX2Jhc2UgPSBTQVZFX0FSRUFfQkFTRV9TMzkwWDsKLQkJc3lzX2luZm8uc2Ffc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4KTsKLQkJc2V0X3MzOTB4X2xjX21hc2soJnN5c19pbmZvLmxjX21hc2spOwogCQlicmVhazsKIAljYXNlIEFSQ0hfUzM5MDoKIAkJcHJfYWxlcnQoIkRFVEVDVEVEICdTMzkwICgzMiBiaXQpIE9TJ1xuIik7Ci0JCXN5c19pbmZvLnNhX2Jhc2UgPSBTQVZFX0FSRUFfQkFTRV9TMzkwOwotCQlzeXNfaW5mby5zYV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MCk7Ci0JCXNldF9zMzkwX2xjX21hc2soJnN5c19pbmZvLmxjX21hc2spOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9hbGVydCgiMHgleCBpcyBhbiB1bmtub3duIGFyY2hpdGVjdHVyZS5cbiIsYXJjaCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlzeXNfaW5mby5zYV9iYXNlID0gU0FWRV9BUkVBX0JBU0U7CisJc3lzX2luZm8uc2Ffc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2F2ZV9hcmVhKTsKIAlzeXNfaW5mby5hcmNoID0gYXJjaDsKKwlzZXRfbGNfbWFzaygmc3lzX2luZm8ubGNfbWFzayk7CiAJcmMgPSBpbml0X2NwdV9pbmZvKGFyY2gpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtNjYwLDggKzYxNSw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHpjb3JlX2hlYWRlcl9pbml0KGludCBhcmNoLCBzdHJ1Y3QgemNvcmVfaGVhZGVyICpoZHIpCiB7Ci0JaW50IHJjOworCWludCByYywgaTsKIAl1bnNpZ25lZCBsb25nIG1lbW9yeSA9IDA7CisJdTMyIHByZWZpeDsKIAogCWlmIChhcmNoID09IEFSQ0hfUzM5MFgpCiAJCWhkci0+YXJjaF9pZCA9IERVTVBfQVJDSF9TMzkwWDsKQEAgLTY3Niw2ICs2MzIsMTQgQEAKIAloZHItPm51bV9wYWdlcyA9IG1lbW9yeSAvIFBBR0VfU0laRTsKIAloZHItPnRvZCA9IGdldF9jbG9jaygpOwogCWdldF9jcHVfaWQoJmhkci0+Y3B1X2lkKTsKKwlmb3IgKGkgPSAwOyB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldOyBpKyspIHsKKwkJcHJlZml4ID0gemZjcGR1bXBfc2F2ZV9hcmVhc1tpXS0+cHJlZl9yZWc7CisJCWhkci0+cmVhbF9jcHVfY250Kys7CisJCWlmICghcHJlZml4KQorCQkJY29udGludWU7CisJCWhkci0+bGNfdmVjW2hkci0+Y3B1X2NudF0gPSBwcmVmaXg7CisJCWhkci0+Y3B1X2NudCsrOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQxLDE0ICs3MDUsMjEgQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbDsKIAotI2lmbmRlZiBfX3MzOTB4X18KKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlpZiAoYXJjaCA9PSBBUkNIX1MzOTApIHsKKwkJcHJfYWxlcnQoIlRoZSA2NC1iaXQgZHVtcCB0b29sIGNhbm5vdCBiZSB1c2VkIGZvciBhICIKKwkJCSAiMzItYml0IHN5c3RlbVxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKyNlbHNlIC8qIENPTkZJR182NEJJVCAqLwogCWlmIChhcmNoID09IEFSQ0hfUzM5MFgpIHsKIAkJcHJfYWxlcnQoIlRoZSAzMi1iaXQgZHVtcCB0b29sIGNhbm5vdCBiZSB1c2VkIGZvciBhICIKIAkJCSAiNjQtYml0IHN5c3RlbVxuIik7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBmYWlsOwogCX0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCiAJcmMgPSBzeXNfaW5mb19pbml0KGFyY2gpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCmluZGV4IDdhMjhhMzAuLjM3ZGY0MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYwpAQCAtMjI0LDggKzIyNCw4IEBACiAgKi8KIHZvaWQgY2N3X3JlcXVlc3RfaGFuZGxlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKKwlzdHJ1Y3QgaXJiICppcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOwogCXN0cnVjdCBjY3dfcmVxdWVzdCAqcmVxID0gJmNkZXYtPnByaXZhdGUtPnJlcTsKLQlzdHJ1Y3QgaXJiICppcmIgPSAoc3RydWN0IGlyYiAqKSBfX0xDX0lSQjsKIAllbnVtIGlvX3N0YXR1cyBzdGF0dXM7CiAJaW50IHJjID0gLUVPUE5PVFNVUFA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggMWVjZDNlNS4uNDAzOGY1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAlzZWNtX2FyZWEtPnJlcXVlc3QubGVuZ3RoID0gMHgwMDUwOwogCXNlY21fYXJlYS0+cmVxdWVzdC5jb2RlID0gMHgwMDE2OwogCi0Jc2VjbV9hcmVhLT5rZXkgPSBQQUdFX0RFRkFVTFRfS0VZOworCXNlY21fYXJlYS0+a2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OwogCXNlY21fYXJlYS0+Y3ViX2FkZHIxID0gKHU2NCkodW5zaWduZWQgbG9uZyljc3MtPmN1Yl9hZGRyMTsKIAlzZWNtX2FyZWEtPmN1Yl9hZGRyMiA9ICh1NjQpKHVuc2lnbmVkIGxvbmcpY3NzLT5jdWJfYWRkcjI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYwppbmRleCBjODRhYzk0Li44NTI2MTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCkBAIC01MSw3ICs1MSw3IEBACiB7CiAJc3RydWN0IGNoc2NfcHJpdmF0ZSAqcHJpdmF0ZSA9IHNjaC0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY2hzY19yZXF1ZXN0ICpyZXF1ZXN0ID0gcHJpdmF0ZS0+cmVxdWVzdDsKLQlzdHJ1Y3QgaXJiICppcmIgPSAoc3RydWN0IGlyYiAqKV9fTENfSVJCOworCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAKIAlDSFNDX0xPRyg0LCAiaXJiIik7CiAJQ0hTQ19MT0dfSEVYKDQsIGlyYiwgc2l6ZW9mKCppcmIpKTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCWludCByZXQgPSAtRU5PREVWOwogCWNoYXIgZGJmWzEwXTsKIAotCWNoc2NfYXJlYS0+aGVhZGVyLmtleSA9IFBBR0VfREVGQVVMVF9LRVk7CisJY2hzY19hcmVhLT5oZWFkZXIua2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OwogCXdoaWxlICgoc2NoID0gY2hzY19nZXRfbmV4dF9zdWJjaGFubmVsKHNjaCkpKSB7CiAJCXNwaW5fbG9jayhzY2gtPmxvY2spOwogCQlwcml2YXRlID0gc2NoLT5wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggMTI2ZjI0MC4uZjczNmNkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC02MjUsOCArNjI1LDggQEAKIAkvKgogCSAqIEdldCBpbnRlcnJ1cHQgaW5mb3JtYXRpb24gZnJvbSBsb3djb3JlCiAJICovCi0JdHBpX2luZm8gPSAoc3RydWN0IHRwaV9pbmZvICopIF9fTENfU1VCQ0hBTk5FTF9JRDsKLQlpcmIgPSAoc3RydWN0IGlyYiAqKSBfX0xDX0lSQjsKKwl0cGlfaW5mbyA9IChzdHJ1Y3QgdHBpX2luZm8gKikmUzM5MF9sb3djb3JlLnN1YmNoYW5uZWxfaWQ7CisJaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAlkbyB7CiAJCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbSU9fSU5URVJSVVBUXSsrOwogCQkvKgpAQCAtNjYxLDcgKzY2MSw3IEBACiAJCSAqIFdlIGRvbid0IGRvIHRoaXMgZm9yIFZNIGJlY2F1c2UgYSB0cGkgZHJvcHMgdGhlIGNwdQogCQkgKiBvdXQgb2YgdGhlIHNpZSB3aGljaCBjb3N0cyBtb3JlIGN5Y2xlcyB0aGFuIGl0IHNhdmVzLgogCQkgKi8KLQl9IHdoaWxlICghTUFDSElORV9JU19WTSAmJiB0cGkgKE5VTEwpICE9IDApOworCX0gd2hpbGUgKE1BQ0hJTkVfSVNfTFBBUiAmJiB0cGkoTlVMTCkgIT0gMCk7CiAJaXJxX2V4aXQoKTsKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogfQpAQCAtNjgyLDEwICs2ODIsMTAgQEAKIAlzdHJ1Y3QgaXJiICppcmI7CiAJaW50IGlycV9jb250ZXh0OwogCi0JdHBpX2luZm8gPSAoc3RydWN0IHRwaV9pbmZvICopIF9fTENfU1VCQ0hBTk5FTF9JRDsKKwl0cGlfaW5mbyA9IChzdHJ1Y3QgdHBpX2luZm8gKikmUzM5MF9sb3djb3JlLnN1YmNoYW5uZWxfaWQ7CiAJaWYgKHRwaShOVUxMKSAhPSAxKQogCQlyZXR1cm4gMDsKLQlpcmIgPSAoc3RydWN0IGlyYiAqKSBfX0xDX0lSQjsKKwlpcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOwogCS8qIFN0b3JlIGludGVycnVwdCByZXNwb25zZSBibG9jayB0byBsb3djb3JlLiAqLwogCWlmICh0c2NoKHRwaV9pbmZvLT5zY2hpZCwgaXJiKSAhPSAwKQogCQkvKiBOb3Qgc3RhdHVzIHBlbmRpbmcgb3Igbm90IG9wZXJhdGlvbmFsLiAqLwpAQCAtODg1LDcgKzg4NSw3IEBACiAJCXN0cnVjdCB0cGlfaW5mbyB0aTsKIAogCQlpZiAodHBpKCZ0aSkpIHsKLQkJCXRzY2godGkuc2NoaWQsIChzdHJ1Y3QgaXJiICopX19MQ19JUkIpOworCQkJdHNjaCh0aS5zY2hpZCwgKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYik7CiAJCQlpZiAoc2NoaWRfZXF1YWwoJnRpLnNjaGlkLCAmc2NoaWQpKQogCQkJCXJldHVybiAwOwogCQl9CkBAIC0xMDgzLDcgKzEwODMsNyBAQAogCXN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkOwogCXN0cnVjdCBzY2hpYiBzY2hpYjsKIAotCXNjaGlkID0gKihzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCAqKV9fTENfU1VCQ0hBTk5FTF9JRDsKKwlzY2hpZCA9ICooc3RydWN0IHN1YmNoYW5uZWxfaWQgKikmUzM5MF9sb3djb3JlLnN1YmNoYW5uZWxfaWQ7CiAJaWYgKCFzY2hpZC5vbmUpCiAJCXJldHVybiAtRU5PREVWOwogCWlmIChzdHNjaChzY2hpZCwgJnNjaGliKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jCmluZGV4IGQxNTc2NjUuLjQyNWY3NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jcncuYwpAQCAtOCwxNSArOCwxNiBAQAogICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4sCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL2Nydy5oPgogCi1zdGF0aWMgc3RydWN0IHNlbWFwaG9yZSBjcndfc2VtYXBob3JlOwogc3RhdGljIERFRklORV9NVVRFWChjcndfaGFuZGxlcl9tdXRleCk7CiBzdGF0aWMgY3J3X2hhbmRsZXJfdCBjcndfaGFuZGxlcnNbTlJfUlNDU107CitzdGF0aWMgYXRvbWljX3QgY3J3X25yX3JlcSA9IEFUT01JQ19JTklUKDApOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGNyd19oYW5kbGVyX3dhaXRfcSk7CiAKIC8qKgogICogY3J3X3JlZ2lzdGVyX2hhbmRsZXIoKSAtIHJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCkBAIC01OSwxMiArNjAsMTQgQEAKIHN0YXRpYyBpbnQgY3J3X2NvbGxlY3RfaW5mbyh2b2lkICp1bnVzZWQpCiB7CiAJc3RydWN0IGNydyBjcndbMl07Ci0JaW50IGNjb2RlOworCWludCBjY29kZSwgc2lnbmFsOwogCXVuc2lnbmVkIGludCBjaGFpbjsKLQlpbnQgaWdub3JlOwogCiByZXBlYXQ6Ci0JaWdub3JlID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZjcndfc2VtYXBob3JlKTsKKwlzaWduYWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY3J3X2hhbmRsZXJfd2FpdF9xLAorCQkJCQkgIGF0b21pY19yZWFkKCZjcndfbnJfcmVxKSA+IDApOworCWlmICh1bmxpa2VseShzaWduYWwpKQorCQlhdG9taWNfaW5jKCZjcndfbnJfcmVxKTsKIAljaGFpbiA9IDA7CiAJd2hpbGUgKDEpIHsKIAkJY3J3X2hhbmRsZXJfdCBoYW5kbGVyOwpAQCAtMTIyLDI1ICsxMjUsMjMgQEAKIAkJLyogY2hhaW4gaXMgYWx3YXlzIDAgb3IgMSBoZXJlLiAqLwogCQljaGFpbiA9IGNyd1tjaGFpbl0uY2huID8gY2hhaW4gKyAxIDogMDsKIAl9CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNyd19ucl9yZXEpKQorCQl3YWtlX3VwKCZjcndfaGFuZGxlcl93YWl0X3EpOwogCWdvdG8gcmVwZWF0OwogCXJldHVybiAwOwogfQogCiB2b2lkIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQodm9pZCkKIHsKLQl1cCgmY3J3X3NlbWFwaG9yZSk7CisJYXRvbWljX2luYygmY3J3X25yX3JlcSk7CisJd2FrZV91cCgmY3J3X2hhbmRsZXJfd2FpdF9xKTsKIH0KIAotLyoKLSAqIFNlcGFyYXRlIGluaXRjYWxsIG5lZWRlZCBmb3Igc2VtYXBob3JlIGluaXRpYWxpemF0aW9uIHNpbmNlCi0gKiBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0IG1pZ2h0IGJlIGNhbGxlZCBiZWZvcmUgY3J3X21hY2hpbmVfY2hlY2tfaW5pdC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgY3J3X2luaXRfc2VtYXBob3JlKHZvaWQpCit2b2lkIGNyd193YWl0X2Zvcl9jaGFubmVsX3JlcG9ydCh2b2lkKQogewotCWluaXRfTVVURVhfTE9DS0VEKCZjcndfc2VtYXBob3JlKTsKLQlyZXR1cm4gMDsKKwljcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KCk7CisJd2FpdF9ldmVudChjcndfaGFuZGxlcl93YWl0X3EsIGF0b21pY19yZWFkKCZjcndfbnJfcmVxKSA9PSAwKTsKIH0KLXB1cmVfaW5pdGNhbGwoY3J3X2luaXRfc2VtYXBob3JlKTsKIAogLyoKICAqIE1hY2hpbmUgY2hlY2tzIGZvciB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0gbXVzdCBiZSBlbmFibGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwppbmRleCA3Njc5YWVlLi4yNzY5ZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxhc20vaXNjLmg+CiAjaW5jbHVkZSA8YXNtL2Nydy5oPgogCkBAIC0yMzIsNyArMjMzLDcgQEAKIAlpZiAoIWdldF9kZXZpY2UoJnNjaC0+ZGV2KSkKIAkJcmV0dXJuOwogCXNjaC0+dG9kbyA9IHRvZG87Ci0JaWYgKCFxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJnNjaC0+dG9kb193b3JrKSkgeworCWlmICghcXVldWVfd29yayhjaW9fd29ya19xLCAmc2NoLT50b2RvX3dvcmspKSB7CiAJCS8qIEFscmVhZHkgcXVldWVkLCByZWxlYXNlIHdvcmtxdWV1ZSByZWYuICovCiAJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKIAl9CkBAIC01NDMsNyArNTQ0LDcgQEAKIH0KIAogc3RhdGljIERFQ0xBUkVfV09SSyhzbG93X3BhdGhfd29yaywgY3NzX3Nsb3dfcGF0aF9mdW5jKTsKLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzbG93X3BhdGhfd3E7CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2lvX3dvcmtfcTsKIAogdm9pZCBjc3Nfc2NoZWR1bGVfZXZhbChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCkKIHsKQEAgLTU1Miw3ICs1NTMsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlkc2V0X3NjaF9hZGQoc2xvd19zdWJjaGFubmVsX3NldCwgc2NoaWQpOwogCWF0b21pY19zZXQoJmNzc19ldmFsX3NjaGVkdWxlZCwgMSk7Ci0JcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZzbG93X3BhdGhfd29yayk7CisJcXVldWVfd29yayhjaW9fd29ya19xLCAmc2xvd19wYXRoX3dvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTU2Myw3ICs1NjQsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlkc2V0X2ZpbGwoc2xvd19zdWJjaGFubmVsX3NldCk7CiAJYXRvbWljX3NldCgmY3NzX2V2YWxfc2NoZWR1bGVkLCAxKTsKLQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJnNsb3dfcGF0aF93b3JrKTsKKwlxdWV1ZV93b3JrKGNpb193b3JrX3EsICZzbG93X3BhdGhfd29yayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtNTk0LDE0ICs1OTUsMTQgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIAlpZHNldF9hZGRfc2V0KHNsb3dfc3ViY2hhbm5lbF9zZXQsIHVucmVnX3NldCk7CiAJYXRvbWljX3NldCgmY3NzX2V2YWxfc2NoZWR1bGVkLCAxKTsKLQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJnNsb3dfcGF0aF93b3JrKTsKKwlxdWV1ZV93b3JrKGNpb193b3JrX3EsICZzbG93X3BhdGhfd29yayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIAlpZHNldF9mcmVlKHVucmVnX3NldCk7CiB9CiAKIHZvaWQgY3NzX3dhaXRfZm9yX3Nsb3dfcGF0aCh2b2lkKQogewotCWZsdXNoX3dvcmtxdWV1ZShzbG93X3BhdGhfd3EpOworCWZsdXNoX3dvcmtxdWV1ZShjaW9fd29ya19xKTsKIH0KIAogLyogU2NoZWR1bGUgcmVwcm9iaW5nIG9mIGFsbCB1bnJlZ2lzdGVyZWQgc3ViY2hhbm5lbHMuICovCkBAIC05OTIsMTIgKzk5MywyMSBAQAogCXJldCA9IGNzc19idXNfaW5pdCgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0KKwljaW9fd29ya19xID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImNpbyIpOworCWlmICghY2lvX3dvcmtfcSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9idXM7CisJfQogCXJldCA9IGlvX3N1YmNoYW5uZWxfaW5pdCgpOwogCWlmIChyZXQpCi0JCWNzc19idXNfY2xlYW51cCgpOworCQlnb3RvIG91dF93cTsKIAogCXJldHVybiByZXQ7CitvdXRfd3E6CisJZGVzdHJveV93b3JrcXVldWUoY2lvX3dvcmtfcSk7CitvdXRfYnVzOgorCWNzc19idXNfY2xlYW51cCgpOworCXJldHVybiByZXQ7CiB9CiBzdWJzeXNfaW5pdGNhbGwoY2hhbm5lbF9zdWJzeXN0ZW1faW5pdCk7CiAKQEAgLTEwMDYsMTAgKzEwMTYsMjUgQEAKIAlzdHJ1Y3QgY3NzX2RyaXZlciAqY3NzZHJ2ID0gdG9fY3NzZHJpdmVyKGRydik7CiAKIAlpZiAoY3NzZHJ2LT5zZXR0bGUpCi0JCWNzc2Rydi0+c2V0dGxlKCk7CisJCXJldHVybiBjc3NkcnYtPnNldHRsZSgpOwogCXJldHVybiAwOwogfQogCitpbnQgY3NzX2NvbXBsZXRlX3dvcmsodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogV2FpdCBmb3IgdGhlIGV2YWx1YXRpb24gb2Ygc3ViY2hhbm5lbHMgdG8gZmluaXNoLiAqLworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjc3NfZXZhbF93cSwKKwkJCQkgICAgICAgYXRvbWljX3JlYWQoJmNzc19ldmFsX3NjaGVkdWxlZCkgPT0gMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5UUjsKKwlmbHVzaF93b3JrcXVldWUoY2lvX3dvcmtfcSk7CisJLyogV2FpdCBmb3IgdGhlIHN1YmNoYW5uZWwgdHlwZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0byBmaW5pc2ggKi8KKwlyZXR1cm4gYnVzX2Zvcl9lYWNoX2RydigmY3NzX2J1c190eXBlLCBOVUxMLCBOVUxMLCBjc3Nfc2V0dGxlKTsKK30KKworCiAvKgogICogV2FpdCBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGRldmljZXMgdG8gZmluaXNoLCB0byBtYWtlIHN1cmUgd2UgYXJlCiAgKiBkb25lIHdpdGggb3VyIHNldHVwIGlmIHRoZSBzZWFyY2ggZm9yIHRoZSByb290IGRldmljZSBzdGFydHMuCkBAIC0xMDE4LDEzICsxMDQzLDQxIEBACiB7CiAJLyogU3RhcnQgaW5pdGlhbCBzdWJjaGFubmVsIGV2YWx1YXRpb24uICovCiAJY3NzX3NjaGVkdWxlX2V2YWxfYWxsKCk7Ci0JLyogV2FpdCBmb3IgdGhlIGV2YWx1YXRpb24gb2Ygc3ViY2hhbm5lbHMgdG8gZmluaXNoLiAqLwotCXdhaXRfZXZlbnQoY3NzX2V2YWxfd3EsIGF0b21pY19yZWFkKCZjc3NfZXZhbF9zY2hlZHVsZWQpID09IDApOwotCS8qIFdhaXQgZm9yIHRoZSBzdWJjaGFubmVsIHR5cGUgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gdG8gZmluaXNoICovCi0JcmV0dXJuIGJ1c19mb3JfZWFjaF9kcnYoJmNzc19idXNfdHlwZSwgTlVMTCwgTlVMTCwgY3NzX3NldHRsZSk7CisJY3NzX2NvbXBsZXRlX3dvcmsoKTsKKwlyZXR1cm4gMDsKIH0KIHN1YnN5c19pbml0Y2FsbF9zeW5jKGNoYW5uZWxfc3Vic3lzdGVtX2luaXRfc3luYyk7CiAKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIHNzaXplX3QgY2lvX3NldHRsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmV0OworCisJLyogSGFuZGxlIHBlbmRpbmcgQ1JXJ3MuICovCisJY3J3X3dhaXRfZm9yX2NoYW5uZWxfcmVwb3J0KCk7CisJcmV0ID0gY3NzX2NvbXBsZXRlX3dvcmsoKTsKKworCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lvX3NldHRsZV9wcm9jX2ZvcHMgPSB7CisJLndyaXRlID0gY2lvX3NldHRsZV93cml0ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNpb19zZXR0bGVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IHByb2NfY3JlYXRlKCJjaW9fc2V0dGxlIiwgU19JV1VTUiwgTlVMTCwKKwkJCSAgICAmY2lvX3NldHRsZV9wcm9jX2ZvcHMpOworCWlmICghZW50cnkpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKGNpb19zZXR0bGVfaW5pdCk7CisjZW5kaWYgLypDT05GSUdfUFJPQ19GUyovCisKIGludCBzY2hfaXNfcHNldWRvX3NjaChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKQogewogCXJldHVybiBzY2ggPT0gdG9fY3NzKHNjaC0+ZGV2LnBhcmVudCktPnBzZXVkb19zdWJjaGFubmVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaCBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKaW5kZXggZmU4NGI5Mi4uN2UzNzg4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCkBAIC05NSw3ICs5NSw3IEBACiAJaW50ICgqZnJlZXplKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIAlpbnQgKCp0aGF3KSAoc3RydWN0IHN1YmNoYW5uZWwgKik7CiAJaW50ICgqcmVzdG9yZSkoc3RydWN0IHN1YmNoYW5uZWwgKik7Ci0Jdm9pZCAoKnNldHRsZSkodm9pZCk7CisJaW50ICgqc2V0dGxlKSh2b2lkKTsKIAljb25zdCBjaGFyICpuYW1lOwogfTsKIApAQCAtMTQ2LDEyICsxNDYsMTMgQEAKIC8qIEhlbHBlciBmdW5jdGlvbnMgdG8gYnVpbGQgbGlzdHMgZm9yIHRoZSBzbG93IHBhdGguICovCiB2b2lkIGNzc19zY2hlZHVsZV9ldmFsKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkKTsKIHZvaWQgY3NzX3NjaGVkdWxlX2V2YWxfYWxsKHZvaWQpOworaW50IGNzc19jb21wbGV0ZV93b3JrKHZvaWQpOwogCiBpbnQgc2NoX2lzX3BzZXVkb19zY2goc3RydWN0IHN1YmNoYW5uZWwgKik7CiBzdHJ1Y3Qgc2NoaWI7CiBpbnQgY3NzX3NjaF9pc192YWxpZChzdHJ1Y3Qgc2NoaWIgKik7CiAKLWV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2xvd19wYXRoX3dxOworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjaW9fd29ya19xOwogdm9pZCBjc3Nfd2FpdF9mb3Jfc2xvd19wYXRoKHZvaWQpOwogdm9pZCBjc3Nfc2NoZWRfc2NoX3RvZG8oc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgZW51bSBzY2hfdG9kbyB0b2RvKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggYTZjN2Q1NC4uYzZhYmI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xMzYsNyArMTM2LDYgQEAKIHN0YXRpYyBpbnQgaW9fc3ViY2hhbm5lbF9jaHBfZXZlbnQoc3RydWN0IHN1YmNoYW5uZWwgKiwgc3RydWN0IGNocF9saW5rICosCiAJCQkJICAgaW50KTsKIHN0YXRpYyB2b2lkIHJlY292ZXJ5X2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKTsKLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjY3dfZGV2aWNlX3dvcms7CiB3YWl0X3F1ZXVlX2hlYWRfdCBjY3dfZGV2aWNlX2luaXRfd3E7CiBhdG9taWNfdCBjY3dfZGV2aWNlX2luaXRfY291bnQ7CiAKQEAgLTE1OSwxMSArMTU4LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlvX3N1YmNoYW5uZWxfc2V0dGxlKHZvaWQpCitzdGF0aWMgaW50IGlvX3N1YmNoYW5uZWxfc2V0dGxlKHZvaWQpCiB7Ci0Jd2FpdF9ldmVudChjY3dfZGV2aWNlX2luaXRfd3EsCi0JCSAgIGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOwotCWZsdXNoX3dvcmtxdWV1ZShjY3dfZGV2aWNlX3dvcmspOworCWludCByZXQ7CisKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2N3X2RldmljZV9pbml0X3dxLAorCQkJCWF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVFI7CisJZmx1c2hfd29ya3F1ZXVlKGNpb193b3JrX3EpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGNzc19kcml2ZXIgaW9fc3ViY2hhbm5lbF9kcml2ZXIgPSB7CkBAIC0xODgsMjcgKzE5MiwxMyBAQAogCWF0b21pY19zZXQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCwgMCk7CiAJc2V0dXBfdGltZXIoJnJlY292ZXJ5X3RpbWVyLCByZWNvdmVyeV9mdW5jLCAwKTsKIAotCWNjd19kZXZpY2Vfd29yayA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjaW8iKTsKLQlpZiAoIWNjd19kZXZpY2Vfd29yaykKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jc2xvd19wYXRoX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtzbG93Y3J3Iik7Ci0JaWYgKCFzbG93X3BhdGhfd3EpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZXJyOwotCX0KLQlpZiAoKHJldCA9IGJ1c19yZWdpc3RlciAoJmNjd19idXNfdHlwZSkpKQotCQlnb3RvIG91dF9lcnI7Ci0KKwlyZXQgPSBidXNfcmVnaXN0ZXIoJmNjd19idXNfdHlwZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAlyZXQgPSBjc3NfZHJpdmVyX3JlZ2lzdGVyKCZpb19zdWJjaGFubmVsX2RyaXZlcik7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfZXJyOworCQlidXNfdW5yZWdpc3RlcigmY2N3X2J1c190eXBlKTsKIAotCXJldHVybiAwOwotb3V0X2VycjoKLQlpZiAoY2N3X2RldmljZV93b3JrKQotCQlkZXN0cm95X3dvcmtxdWV1ZShjY3dfZGV2aWNlX3dvcmspOwotCWlmIChzbG93X3BhdGhfd3EpCi0JCWRlc3Ryb3lfd29ya3F1ZXVlKHNsb3dfcGF0aF93cSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTM0OCw3ICsxMzM4LDcgQEAKIAkJLyogTm90IG9wZXJhdGlvbmFsLiAqLwogCQlpZiAoIWNkZXYpCiAJCQlyZXR1cm4gSU9fU0NIX1VOUkVHOwotCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwkJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSAhPSBOT1RJRllfT0spCiAJCQlyZXR1cm4gSU9fU0NIX1VOUkVHOwogCQlyZXR1cm4gSU9fU0NIX09SUEhfVU5SRUc7CiAJfQpAQCAtMTM1NiwxMiArMTM0NiwxMiBAQAogCWlmICghY2RldikKIAkJcmV0dXJuIElPX1NDSF9BVFRBQ0g7CiAJaWYgKHNjaC0+c2NoaWIucG1jdy5kZXYgIT0gY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vKSB7Ci0JCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpICE9IE5PVElGWV9PSykKIAkJCXJldHVybiBJT19TQ0hfVU5SRUdfQVRUQUNIOwogCQlyZXR1cm4gSU9fU0NIX09SUEhfQVRUQUNIOwogCX0KIAlpZiAoKHNjaC0+c2NoaWIucG1jdy5wYW0gJiBzY2gtPm9wbSkgPT0gMCkgewotCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSkKKwkJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSAhPSBOT1RJRllfT0spCiAJCQlyZXR1cm4gSU9fU0NIX1VOUkVHOwogCQlyZXR1cm4gSU9fU0NIX0RJU0M7CiAJfQpAQCAtMTQxMCw2ICsxNDAwLDEyIEBACiAJCXJjID0gMDsKIAkJZ290byBvdXRfdW5sb2NrOwogCWNhc2UgSU9fU0NIX1ZFUklGWToKKwkJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLnJlc3VtaW5nID09IDEpIHsKKwkJCWlmIChjaW9fZW5hYmxlX3N1YmNoYW5uZWwoc2NoLCAodTMyKShhZGRyX3Qpc2NoKSkgeworCQkJCWNjd19kZXZpY2Vfc2V0X25vdG9wZXIoY2Rldik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAkJLyogVHJpZ2dlciBwYXRoIHZlcmlmaWNhdGlvbi4gKi8KIAkJaW9fc3ViY2hhbm5lbF92ZXJpZnkoc2NoKTsKIAkJcmMgPSAwOwpAQCAtMTQ0OCw3ICsxNDQ0LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBJT19TQ0hfVU5SRUdfQVRUQUNIOgogCQkvKiBVbnJlZ2lzdGVyIGNjdyBkZXZpY2UuICovCi0JCWNjd19kZXZpY2VfdW5yZWdpc3RlcihjZGV2KTsKKwkJaWYgKCFjZGV2LT5wcml2YXRlLT5mbGFncy5yZXN1bWluZykKKwkJCWNjd19kZXZpY2VfdW5yZWdpc3RlcihjZGV2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xNDU3LDcgKzE0NTQsOCBAQAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBJT19TQ0hfT1JQSF9VTlJFRzoKIAljYXNlIElPX1NDSF9VTlJFRzoKLQkJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOworCQlpZiAoIWNkZXYgfHwgIWNkZXYtPnByaXZhdGUtPmZsYWdzLnJlc3VtaW5nKQorCQkJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOwogCQlicmVhazsKIAljYXNlIElPX1NDSF9PUlBIX0FUVEFDSDoKIAljYXNlIElPX1NDSF9VTlJFR19BVFRBQ0g6CkBAIC0xNzc5LDI2ICsxNzc3LDQyIEBACiB7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAKLQlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpCi0JCWdvdG8gb3V0OworCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKwlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpIHsKKwkJY2lvX2VuYWJsZV9zdWJjaGFubmVsKHNjaCwgKHUzMikoYWRkcl90KXNjaCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAJLyoKIAkgKiBXaGlsZSB3ZSB3ZXJlIHNsZWVwaW5nLCBkZXZpY2VzIG1heSBoYXZlIGdvbmUgb3IgYmVjb21lCiAJICogYXZhaWxhYmxlIGFnYWluLiBLaWNrIHJlLWRldGVjdGlvbi4KIAkgKi8KLQlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CiAJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVzdW1pbmcgPSAxOworCWNzc19zY2hlZHVsZV9ldmFsKHNjaC0+c2NoaWQpOworCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOworCWNzc19jb21wbGV0ZV93b3JrKCk7CisKKwkvKiBjZGV2IG1heSBoYXZlIGJlZW4gbW92ZWQgdG8gYSBkaWZmZXJlbnQgc3ViY2hhbm5lbC4gKi8KKwlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOworCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKwlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09OTElORSAmJgorCSAgICBjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT0ZGTElORSkKKwkJZ290byBvdXRfdW5sb2NrOworCiAJY2N3X2RldmljZV9yZWNvZ25pdGlvbihjZGV2KTsKIAlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwgZGV2X2ZzbV9maW5hbF9zdGF0ZShjZGV2KSB8fAogCQkgICBjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfRElTQ09OTkVDVEVEKTsKLW91dDoKKwlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CisKK291dF91bmxvY2s6CiAJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVzdW1pbmcgPSAwOworCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogfQogCiBzdGF0aWMgaW50IHJlc3VtZV9oYW5kbGVfYm94ZWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfQk9YRUQ7Ci0JaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19CT1hFRCkpCisJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19CT1hFRCkgPT0gTk9USUZZX09LKQogCQlyZXR1cm4gMDsKIAljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTE4MDcsNyArMTgyMSw3IEBACiBzdGF0aWMgaW50IHJlc3VtZV9oYW5kbGVfZGlzYyhzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9ESVNDT05ORUNURUQ7Ci0JaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpID09IE5PVElGWV9PSykKIAkJcmV0dXJuIDA7CiAJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC0xODE2LDQwICsxODMwLDMxIEBACiBzdGF0aWMgaW50IGNjd19kZXZpY2VfcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSB0b19jY3dkZXYoZGV2KTsKLQlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKLQlpbnQgcmV0ID0gMCwgY21fZW5hYmxlZDsKKwlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCWludCByZXQgPSAwOwogCiAJX19jY3dfZGV2aWNlX3BtX3Jlc3RvcmUoY2Rldik7CisJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7Ci0JaWYgKGNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKSB7Ci0JCWNpb19lbmFibGVfc3ViY2hhbm5lbChzY2gsICh1MzIpKGFkZHJfdClzY2gpOwotCQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKKwlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpCiAJCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JfQotCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKKwogCS8qIGNoZWNrIHJlY29nbml0aW9uIHJlc3VsdHMgKi8KIAlzd2l0Y2ggKGNkZXYtPnByaXZhdGUtPnN0YXRlKSB7CiAJY2FzZSBERVZfU1RBVEVfT0ZGTElORToKKwljYXNlIERFVl9TVEFURV9PTkxJTkU6CisJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBERVZfU1RBVEVfQk9YRUQ6CiAJCXJldCA9IHJlc3VtZV9oYW5kbGVfYm94ZWQoY2Rldik7Ci0JCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JY2FzZSBERVZfU1RBVEVfRElTQ09OTkVDVEVEOgotCQlnb3RvIG91dF9kaXNjX3VubG9jazsKIAlkZWZhdWx0OgotCQlnb3RvIG91dF91bnJlZ191bmxvY2s7Ci0JfQotCS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaWQgaGFzIGNoYW5nZWQgKi8KLQlpZiAoc2NoLT5zY2hpYi5wbWN3LmRldiAhPSBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8pIHsKLQkJQ0lPX01TR19FVkVOVCgwLCAicmVzdW1lOiBzY2ggMC4leC4lMDR4OiBmYWlsZWQgKGRldm5vICIKLQkJCSAgICAgICJjaGFuZ2VkIGZyb20gJTA0eCB0byAlMDR4KVxuIiwKLQkJCSAgICAgIHNjaC0+c2NoaWQuc3NpZCwgc2NoLT5zY2hpZC5zY2hfbm8sCi0JCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sCi0JCQkgICAgICBzY2gtPnNjaGliLnBtY3cuZGV2KTsKLQkJZ290byBvdXRfdW5yZWdfdW5sb2NrOworCQlyZXQgPSByZXN1bWVfaGFuZGxlX2Rpc2MoY2Rldik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0X3Jlc3RvcmU7CiAJfQogCS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgdHlwZSBoYXMgY2hhbmdlZCAqLwogCWlmICghY2N3X2RldmljZV90ZXN0X3NlbnNlX2RhdGEoY2RldikpIHsKQEAgLTE4NTgsMjQgKzE4NjMsMzAgQEAKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlpZiAoIWNkZXYtPm9ubGluZSkgewotCQlyZXQgPSAwOworCWlmICghY2Rldi0+b25saW5lKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlpZiAoY2N3X2RldmljZV9vbmxpbmUoY2RldikpIHsKKwkJcmV0ID0gcmVzdW1lX2hhbmRsZV9kaXNjKGNkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF9yZXN0b3JlOworCX0KKwlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKKwl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwgZGV2X2ZzbV9maW5hbF9zdGF0ZShjZGV2KSk7CisJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOworCisJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19PUEVSKSA9PSBOT1RJRllfQkFEKSB7CisJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCXJldCA9IGNjd19kZXZpY2Vfb25saW5lKGNkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2Rpc2NfdW5sb2NrOwogCi0JY21fZW5hYmxlZCA9IGNkZXYtPnByaXZhdGUtPmNtYiAhPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwotCi0Jd2FpdF9ldmVudChjZGV2LT5wcml2YXRlLT53YWl0X3EsIGRldl9mc21fZmluYWxfc3RhdGUoY2RldikpOwotCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT05MSU5FKSB7Ci0JCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKLQkJZ290byBvdXRfZGlzY191bmxvY2s7Ci0JfQotCWlmIChjbV9lbmFibGVkKSB7CisJLyogcmVlbmFibGUgY21mLCBpZiBuZWVkZWQgKi8KKwlpZiAoY2Rldi0+cHJpdmF0ZS0+Y21iKSB7CisJCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCQlyZXQgPSBjY3dfc2V0X2NtZihjZGV2LCAxKTsKKwkJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwogCQlpZiAocmV0KSB7CiAJCQlDSU9fTVNHX0VWRU5UKDIsICJyZXN1bWU6IGNkZXYgMC4leC4lMDR4OiBjbWYgZmFpbGVkICIKIAkJCQkgICAgICAiKHJjPSVkKVxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCkBAIC0xODg1LDIxICsxODk2LDExIEBACiAJfQogCiBvdXRfcmVzdG9yZToKKwlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAlpZiAoY2Rldi0+b25saW5lICYmIGNkZXYtPmRydiAmJiBjZGV2LT5kcnYtPnJlc3RvcmUpCiAJCXJldCA9IGNkZXYtPmRydi0+cmVzdG9yZShjZGV2KTsKLW91dDoKIAlyZXR1cm4gcmV0OwogCi1vdXRfZGlzY191bmxvY2s6Ci0JcmV0ID0gcmVzdW1lX2hhbmRsZV9kaXNjKGNkZXYpOwotCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JZ290byBvdXRfcmVzdG9yZTsKLQotb3V0X3VucmVnX3VubG9jazoKLQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHX0VWQUwpOwotCXJldCA9IC1FTk9ERVY7CiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCXJldHVybiByZXQ7CkBAIC0yMDI4LDcgKzIwMjksNyBAQAogCS8qIEdldCB3b3JrcXVldWUgcmVmLiAqLwogCWlmICghZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkKIAkJcmV0dXJuOwotCWlmICghcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjZGV2LT5wcml2YXRlLT50b2RvX3dvcmspKSB7CisJaWYgKCFxdWV1ZV93b3JrKGNpb193b3JrX3EsICZjZGV2LT5wcml2YXRlLT50b2RvX3dvcmspKSB7CiAJCS8qIEFscmVhZHkgcXVldWVkLCByZWxlYXNlIHdvcmtxdWV1ZSByZWYuICovCiAJCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7CiAJfQpAQCAtMjA0MSw1ICsyMDQyLDQgQEAKIEVYUE9SVF9TWU1CT0woY2N3X2RyaXZlcl91bnJlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0woZ2V0X2Njd2Rldl9ieV9idXNpZCk7CiBFWFBPUlRfU1lNQk9MKGNjd19idXNfdHlwZSk7Ci1FWFBPUlRfU1lNQk9MKGNjd19kZXZpY2Vfd29yayk7CiBFWFBPUlRfU1lNQk9MX0dQTChjY3dfZGV2aWNlX2dldF9zdWJjaGFubmVsX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IGJjZmUxM2UuLjM3OWRlMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtNCw3ICs0LDcgQEAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSAiaW9fc2NoLmgiCiAKIC8qCkBAIC03MSw3ICs3MSw2IEBACiAJCWNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9CT1hFRCk7CiB9CiAKLWV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2N3X2RldmljZV93b3JrOwogZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGNjd19kZXZpY2VfaW5pdF93cTsKIGV4dGVybiBhdG9taWNfdCBjY3dfZGV2aWNlX2luaXRfY291bnQ7CiBpbnQgX19pbml0IGlvX3N1YmNoYW5uZWxfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggYWU3NjA2NS4uYzU2YWI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTMxMywyMSArMzEzLDQzIEBACiAJfQogfQogCisvKioKKyAgKiBjY3dfZGV2aWNlX25vdGlmeSgpIC0gaW5mb3JtIHRoZSBkZXZpY2UncyBkcml2ZXIgYWJvdXQgYW4gZXZlbnQKKyAgKiBAY2RldjogZGV2aWNlIGZvciB3aGljaCBhbiBldmVudCBvY2N1cmVkCisgICogQGV2ZW50OiBldmVudCB0aGF0IG9jY3VycmVkCisgICoKKyAgKiBSZXR1cm5zOgorICAqICAgLSVFSU5WQUwgaWYgdGhlIGRldmljZSBpcyBvZmZsaW5lIG9yIGhhcyBubyBkcml2ZXIuCisgICogICAtJUVPUE5PVFNVUFAgaWYgdGhlIGRldmljZSdzIGRyaXZlciBoYXMgbm8gbm90aWZpZXIgcmVnaXN0ZXJlZC4KKyAgKiAgICVOT1RJRllfT0sgaWYgdGhlIGRyaXZlciB3YW50cyB0byBrZWVwIHRoZSBkZXZpY2UuCisgICogICAlTk9USUZZX0JBRCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgd2FudCB0byBrZWVwIHRoZSBkZXZpY2UuCisgICovCiBpbnQgY2N3X2RldmljZV9ub3RpZnkoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIGludCBldmVudCkKIHsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwogCWlmICghY2Rldi0+ZHJ2KQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAJaWYgKCFjZGV2LT5vbmxpbmUpCi0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAlDSU9fTVNHX0VWRU5UKDIsICJub3RpZnkgY2FsbGVkIGZvciAwLiV4LiUwNHgsIGV2ZW50PSVkXG4iLAogCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLAogCQkgICAgICBldmVudCk7Ci0JcmV0dXJuIGNkZXYtPmRydi0+bm90aWZ5ID8gY2Rldi0+ZHJ2LT5ub3RpZnkoY2RldiwgZXZlbnQpIDogMDsKKwlpZiAoIWNkZXYtPmRydi0+bm90aWZ5KSB7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGNkZXYtPmRydi0+bm90aWZ5KGNkZXYsIGV2ZW50KSkKKwkJcmV0ID0gTk9USUZZX09LOworCWVsc2UKKwkJcmV0ID0gTk9USUZZX0JBRDsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBjY3dfZGV2aWNlX29wZXJfbm90aWZ5KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewotCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fT1BFUikpIHsKKwlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX09QRVIpID09IE5PVElGWV9PSykgewogCQkvKiBSZWVuYWJsZSBjaGFubmVsIG1lYXN1cmVtZW50cywgaWYgbmVlZGVkLiAqLwogCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX0VOQUJMRV9DTUYpOwogCQlyZXR1cm47CkBAIC0zNjEsMTQgKzM4MywxNSBAQAogCWNhc2UgREVWX1NUQVRFX0JPWEVEOgogCQlDSU9fTVNHX0VWRU5UKDAsICJCb3hlZCBkZXZpY2UgJTA0eCBvbiBzdWJjaGFubmVsICUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKLQkJaWYgKGNkZXYtPm9ubGluZSAmJiAhY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSkKKwkJaWYgKGNkZXYtPm9ubGluZSAmJgorCQkgICAgY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSAhPSBOT1RJRllfT0spCiAJCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOwogCQlicmVhazsKIAljYXNlIERFVl9TVEFURV9OT1RfT1BFUjoKIAkJQ0lPX01TR19FVkVOVCgwLCAiRGV2aWNlICUwNHggZ29uZSBvbiBzdWJjaGFubmVsICUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKLQkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkgIT0gTk9USUZZX09LKQogCQkJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CiAJCWVsc2UKIAkJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKQEAgLTM3OCw3ICs0MDEsNyBAQAogCQlDSU9fTVNHX0VWRU5UKDAsICJEaXNjb25uZWN0ZWQgZGV2aWNlICUwNHggb24gc3ViY2hhbm5lbCAiCiAJCQkgICAgICAiJTA0eFxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLAogCQkJICAgICAgc2NoLT5zY2hpZC5zY2hfbm8pOwotCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSkKKwkJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSAhPSBOT1RJRllfT0spCiAJCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAkJZWxzZQogCQkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwpAQCAtNTg2LDcgKzYwOSw3IEBACiBzdGF0aWMgdm9pZCBjY3dfZGV2aWNlX2dlbmVyaWNfbm90b3BlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKIAkJCQkgICAgICAgZW51bSBkZXZfZXZlbnQgZGV2X2V2ZW50KQogewotCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkgIT0gTk9USUZZX09LKQogCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAllbHNlCiAJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKQEAgLTY2Nyw3ICs2OTAsNyBAQAogCXN0cnVjdCBpcmIgKmlyYjsKIAlpbnQgaXNfY21kOwogCi0JaXJiID0gKHN0cnVjdCBpcmIgKikgX19MQ19JUkI7CisJaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAlpc19jbWQgPSAhc2Nzd19pc190bSgmaXJiLT5zY3N3KTsKIAkvKiBDaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0LiAqLwogCWlmICghc2Nzd19pc19zb2xpY2l0ZWQoJmlyYi0+c2NzdykpIHsKQEAgLTczMiw3ICs3NTUsNyBAQAogewogCXN0cnVjdCBpcmIgKmlyYjsKIAotCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOworCWlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJLyogQ2hlY2sgZm9yIHVuc29saWNpdGVkIGludGVycnVwdC4gKi8KIAlpZiAoc2Nzd19zdGN0bCgmaXJiLT5zY3N3KSA9PQogCSAgICAoU0NTV19TVENUTF9TVEFUVVNfUEVORCB8IFNDU1dfU1RDVExfQUxFUlRfU1RBVFVTKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA0NGYyZjZhLi40OGFhMDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMjA4LDE4ICsyMDgsMjcgQEAKIAl1bnNpZ25lZCBpbnQgZXFic19wYXJ0aWFsOwogCXVuc2lnbmVkIGludCBzcWJzOwogCXVuc2lnbmVkIGludCBzcWJzX3BhcnRpYWw7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RydWN0IHFkaW9fcXVldWVfcGVyZl9zdGF0IHsKKwkvKgorCSAqIFNvcnRlZCBpbnRvIG9yZGVyLTIgYnVja2V0czogMSwgMi0zLCA0LTcsIC4uLiA2NC0xMjcsIDEyOC4KKwkgKiBTaW5jZSBtYXguIDEyNyBTQkFMcyBhcmUgc2Nhbm5lZCByZXVzZSBlbnRyeSBmb3IgMTI4IGFzIHF1ZXVlIGZ1bGwKKwkgKiBha2EgMTI3IFNCQUxzIGZvdW5kLgorCSAqLworCXVuc2lnbmVkIGludCBucl9zYmFsc1s4XTsKKwl1bnNpZ25lZCBpbnQgbnJfc2JhbF9lcnJvcjsKKwl1bnNpZ25lZCBpbnQgbnJfc2JhbF9ub3A7CisJdW5zaWduZWQgaW50IG5yX3NiYWxfdG90YWw7CiB9OwogCiBzdHJ1Y3QgcWRpb19pbnB1dF9xIHsKIAkvKiBpbnB1dCBidWZmZXIgYWNrbm93bGVkZ2VtZW50IGZsYWcgKi8KIAlpbnQgcG9sbGluZzsKLQogCS8qIGZpcnN0IEFDSydlZCBidWZmZXIgKi8KIAlpbnQgYWNrX3N0YXJ0OwotCiAJLyogaG93IG11Y2ggc2JhbHMgYXJlIGFja25vd2xlZGdlZCB3aXRoIHFlYnNtICovCiAJaW50IGFja19jb3VudDsKLQogCS8qIGxhc3QgdGltZSBvZiBub3RpY2luZyBpbmNvbWluZyBkYXRhICovCiAJdTY0IHRpbWVzdGFtcDsKIH07CkBAIC0yMjcsMjEgKzIzNiw0NyBAQAogc3RydWN0IHFkaW9fb3V0cHV0X3EgewogCS8qIFBDSXMgYXJlIGVuYWJsZWQgZm9yIHRoZSBxdWV1ZSAqLwogCWludCBwY2lfb3V0X2VuYWJsZWQ7Ci0KIAkvKiBJUURJTzogb3V0cHV0IG11bHRpcGxlIGJ1ZmZlcnMgKGVuaGFuY2VkIFNJR0EpICovCiAJaW50IHVzZV9lbmhfc2lnYTsKLQogCS8qIHRpbWVyIHRvIGNoZWNrIGZvciBtb3JlIG91dGJvdW5kIHdvcmsgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIH07CiAKKy8qCisgKiBOb3RlIG9uIGNhY2hlIGFsaWdubWVudDogZ3JvdXBlZCBzbHNiIGFuZCB3cml0ZSBtb3N0bHkgZGF0YSBhdCB0aGUgYmVnaW5uaW5nCisgKiBzYmFsW10gaXMgcmVhZC1vbmx5IGFuZCBzdGFydHMgb24gYSBuZXcgY2FjaGVsaW5lIGZvbGxvd2VkIGJ5IHJlYWQgbW9zdGx5LgorICovCiBzdHJ1Y3QgcWRpb19xIHsKIAlzdHJ1Y3Qgc2xzYiBzbHNiOworCiAJdW5pb24gewogCQlzdHJ1Y3QgcWRpb19pbnB1dF9xIGluOwogCQlzdHJ1Y3QgcWRpb19vdXRwdXRfcSBvdXQ7CiAJfSB1OwogCisJLyoKKwkgKiBpbmJvdW5kOiBuZXh0IGJ1ZmZlciB0aGUgcHJvZ3JhbSBzaG91bGQgY2hlY2sgZm9yCisJICogb3V0Ym91bmQ6IG5leHQgYnVmZmVyIHRvIGNoZWNrIGlmIGFkYXB0ZXIgcHJvY2Vzc2VkIGl0CisJICovCisJaW50IGZpcnN0X3RvX2NoZWNrOworCisJLyogZmlyc3RfdG9fY2hlY2sgb2YgdGhlIGxhc3QgdGltZSAqLworCWludCBsYXN0X21vdmU7CisKKwkvKiBiZWdpbm5pbmcgcG9zaXRpb24gZm9yIGNhbGxpbmcgdGhlIHByb2dyYW0gKi8KKwlpbnQgZmlyc3RfdG9fa2ljazsKKworCS8qIG51bWJlciBvZiBidWZmZXJzIGluIHVzZSBieSB0aGUgYWRhcHRlciAqLworCWF0b21pY190IG5yX2J1Zl91c2VkOworCisJLyogZXJyb3IgY29uZGl0aW9uIGR1cmluZyBhIGRhdGEgdHJhbnNmZXIgKi8KKwl1bnNpZ25lZCBpbnQgcWRpb19lcnJvcjsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OworCXN0cnVjdCBxZGlvX3F1ZXVlX3BlcmZfc3RhdCBxX3N0YXRzOworCisJc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwogCS8qIHF1ZXVlIG51bWJlciAqLwogCWludCBucjsKIApAQCAtMjU3LDMyICsyOTIsOSBAQAogCS8qIHVwcGVyLWxheWVyIHByb2dyYW0gaGFuZGxlciAqLwogCXFkaW9faGFuZGxlcl90ICgqaGFuZGxlcik7CiAKLQkvKgotCSAqIGluYm91bmQ6IG5leHQgYnVmZmVyIHRoZSBwcm9ncmFtIHNob3VsZCBjaGVjayBmb3IKLQkgKiBvdXRib3VuZDogbmV4dCBidWZmZXIgdG8gY2hlY2sgZm9yIGhhdmluZyBiZWVuIHByb2Nlc3NlZAotCSAqIGJ5IHRoZSBjYXJkCi0JICovCi0JaW50IGZpcnN0X3RvX2NoZWNrOwotCi0JLyogZmlyc3RfdG9fY2hlY2sgb2YgdGhlIGxhc3QgdGltZSAqLwotCWludCBsYXN0X21vdmU7Ci0KLQkvKiBiZWdpbm5pbmcgcG9zaXRpb24gZm9yIGNhbGxpbmcgdGhlIHByb2dyYW0gKi8KLQlpbnQgZmlyc3RfdG9fa2ljazsKLQotCS8qIG51bWJlciBvZiBidWZmZXJzIGluIHVzZSBieSB0aGUgYWRhcHRlciAqLwotCWF0b21pY190IG5yX2J1Zl91c2VkOwotCi0Jc3RydWN0IHFkaW9faXJxICppcnFfcHRyOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcTsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKLQotCS8qIGVycm9yIGNvbmRpdGlvbiBkdXJpbmcgYSBkYXRhIHRyYW5zZmVyICovCi0JdW5zaWduZWQgaW50IHFkaW9fZXJyb3I7Ci0KKwlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHI7CiAJc3RydWN0IHNsICpzbDsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgKnNiYWxbUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0KIAkvKgogCSAqIFdhcm5pbmc6IExlYXZlIHRoaXMgbWVtYmVyIGF0IHRoZSBlbmQgc28gaXQgd29uJ3QgYmUgY2xlYXJlZCBpbgogCSAqIHFkaW9fZmlsbF9xcy4gQSBwYWdlIGlzIGFsbG9jYXRlZCB1bmRlciB0aGlzIHBvaW50ZXIgYW5kIHVzZWQgZm9yCkBAIC0zMTcsMTIgKzMyOSw4IEBACiAJc3RydWN0IHFkaW9fc3NxZF9kZXNjIHNzcWRfZGVzYzsKIAl2b2lkICgqb3JpZ19oYW5kbGVyKSAoc3RydWN0IGNjd19kZXZpY2UgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGlyYiAqKTsKIAotCXN0cnVjdCBxZGlvX2Rldl9wZXJmX3N0YXQgcGVyZl9zdGF0OwogCWludCBwZXJmX3N0YXRfZW5hYmxlZDsKLQkvKgotCSAqIFdhcm5pbmc6IExlYXZlIHRoZXNlIG1lbWJlcnMgdG9nZXRoZXIgYXQgdGhlIGVuZCBzbyB0aGV5IHdvbid0IGJlCi0JICogY2xlYXJlZCBpbiBxZGlvX3NldHVwX2lycS4KLQkgKi8KKwogCXN0cnVjdCBxZHIgKnFkcjsKIAl1bnNpZ25lZCBsb25nIGNoc2NfcGFnZTsKIApAQCAtMzMxLDYgKzMzOSw3IEBACiAKIAlkZWJ1Z19pbmZvX3QgKmRlYnVnX2FyZWE7CiAJc3RydWN0IG11dGV4IHNldHVwX211dGV4OworCXN0cnVjdCBxZGlvX2Rldl9wZXJmX3N0YXQgcGVyZl9zdGF0OwogfTsKIAogLyogaGVscGVyIGZ1bmN0aW9ucyAqLwpAQCAtMzQxLDkgKzM1MCwyMCBAQAogCShpcnEtPnFpYi5xZm10ID09IFFESU9fSVFESU9fUUZNVCB8fCBcCiAJIGNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljcy5haWZfb3NhKQogCi0jZGVmaW5lIHFwZXJmKHFkZXYsYXR0cikJcWRldi0+cGVyZl9zdGF0LmF0dHIKLSNkZWZpbmUgcXBlcmZfaW5jKHEsYXR0cikJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKSBcCi0JCQkJCXEtPmlycV9wdHItPnBlcmZfc3RhdC5hdHRyKysKKyNkZWZpbmUgcXBlcmYoX19xZGV2LCBfX2F0dHIpCSgoX19xZGV2KS0+cGVyZl9zdGF0LihfX2F0dHIpKQorCisjZGVmaW5lIHFwZXJmX2luYyhfX3EsIF9fYXR0cikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlzdHJ1Y3QgcWRpb19pcnEgKnFkZXYgPSAoX19xKS0+aXJxX3B0cjsJCQkJXAorCWlmIChxZGV2LT5wZXJmX3N0YXRfZW5hYmxlZCkJCQkJCVwKKwkJKHFkZXYtPnBlcmZfc3RhdC5fX2F0dHIpKys7CQkJCVwKK30pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NiYWxzX2Vycm9yKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKK3sKKwlxLT5xX3N0YXRzLm5yX3NiYWxfZXJyb3IgKz0gY291bnQ7CisJcS0+cV9zdGF0cy5ucl9zYmFsX3RvdGFsICs9IGNvdW50OworfQogCiAvKiB0aGUgaGlnaGVzdCBpcWRpbyBxdWV1ZSBpcyB1c2VkIGZvciBtdWx0aWNhc3QgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG11bHRpY2FzdF9vdXRib3VuZChzdHJ1Y3QgcWRpb19xICpxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwppbmRleCBmNDk3NjFmLi5jOTRlYjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwpAQCAtNjAsNyArNjAsNyBAQAogCXNlcV9wcmludGYobSwgImZ0YzogJWQgIGxhc3RfbW92ZTogJWRcbiIsIHEtPmZpcnN0X3RvX2NoZWNrLCBxLT5sYXN0X21vdmUpOwogCXNlcV9wcmludGYobSwgInBvbGxpbmc6ICVkICBhY2sgc3RhcnQ6ICVkICBhY2sgY291bnQ6ICVkXG4iLAogCQkgICBxLT51LmluLnBvbGxpbmcsIHEtPnUuaW4uYWNrX3N0YXJ0LCBxLT51LmluLmFja19jb3VudCk7Ci0Jc2VxX3ByaW50ZihtLCAic2xzYiBidWZmZXIgc3RhdGVzOlxuIik7CisJc2VxX3ByaW50ZihtLCAiU0JBTCBzdGF0ZXM6XG4iKTsKIAlzZXFfcHJpbnRmKG0sICJ8MCAgICAgIHw4ICAgICAgfDE2ICAgICB8MjQgICAgIHwzMiAgICAgfDQwICAgICB8NDggICAgIHw1NiAgNjN8XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyBpKyspIHsKQEAgLTk3LDYgKzk3LDIwIEBACiAJfQogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAifDY0ICAgICB8NzIgICAgIHw4MCAgICAgfDg4ICAgICB8OTYgICAgIHwxMDQgICAgfDExMiAgICB8ICAgMTI3fFxuIik7CisKKwlzZXFfcHJpbnRmKG0sICJcblNCQUwgc3RhdGlzdGljczoiKTsKKwlpZiAoIXEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKSB7CisJCXNlcV9wcmludGYobSwgIiBkaXNhYmxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXNlcV9wcmludGYobSwgIlxuMSAgICAgICAgICAyLi4gICAgICAgIDQuLiAgICAgICAgOC4uICAgICAgICAiCisJCSAgICIxNi4uICAgICAgIDMyLi4gICAgICAgNjQuLiAgICAgICAxMjdcbiIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHEtPnFfc3RhdHMubnJfc2JhbHMpOyBpKyspCisJCXNlcV9wcmludGYobSwgIiUtMTB1ICIsIHEtPnFfc3RhdHMubnJfc2JhbHNbaV0pOworCXNlcV9wcmludGYobSwgIlxuRXJyb3IgICAgICBOT1AgICAgICAgIFRvdGFsXG4lLTEwdSAlLTEwdSAlLTEwdVxuXG4iLAorCQkgICBxLT5xX3N0YXRzLm5yX3NiYWxfZXJyb3IsIHEtPnFfc3RhdHMubnJfc2JhbF9ub3AsCisJCSAgIHEtPnFfc3RhdHMubnJfc2JhbF90b3RhbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MSw5ICsxOTUsMTAgQEAKIHsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IHFkaW9fcSAqcTsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAljaGFyIGJ1Zls4XTsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAKIAlpZiAoIWlycV9wdHIpCiAJCXJldHVybiAwOwpAQCAtMjAxLDYgKzIxNiwxMCBAQAogCWNhc2UgMDoKIAkJaXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQgPSAwOwogCQltZW1zZXQoJmlycV9wdHItPnBlcmZfc3RhdCwgMCwgc2l6ZW9mKGlycV9wdHItPnBlcmZfc3RhdCkpOworCQlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQorCQkJbWVtc2V0KCZxLT5xX3N0YXRzLCAwLCBzaXplb2YocS0+cV9zdGF0cykpOworCQlmb3JfZWFjaF9vdXRwdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKKwkJCW1lbXNldCgmcS0+cV9zdGF0cywgMCwgc2l6ZW9mKHEtPnFfc3RhdHMpKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlpcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCA2MmI2NTRhLi4yMzJlZjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTM5Miw2ICszOTIsMjAgQEAKIAkJc2V0X2J1Zl9zdGF0ZShxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2JhbHMoc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQoreworCWludCBwb3MgPSAwOworCisJcS0+cV9zdGF0cy5ucl9zYmFsX3RvdGFsICs9IGNvdW50OworCWlmIChjb3VudCA9PSBRRElPX01BWF9CVUZGRVJTX01BU0spIHsKKwkJcS0+cV9zdGF0cy5ucl9zYmFsc1s3XSsrOworCQlyZXR1cm47CisJfQorCXdoaWxlIChjb3VudCA+Pj0gMSkKKwkJcG9zKys7CisJcS0+cV9zdGF0cy5ucl9zYmFsc1twb3NdKys7Cit9CisKIHN0YXRpYyB2b2lkIGFubm91bmNlX2J1ZmZlcl9lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCiB7CiAJcS0+cWRpb19lcnJvciB8PSBRRElPX0VSUk9SX1NMU0JfU1RBVEU7CkBAIC00ODcsMTYgKzUwMSwyMiBAQAogCQlxLT5maXJzdF90b19jaGVjayA9IGFkZF9idWYocS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKIAkJaWYgKGF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCkgPT0gMCkKIAkJCXFwZXJmX2luYyhxLCBpbmJvdW5kX3F1ZXVlX2Z1bGwpOworCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCisJCQlhY2NvdW50X3NiYWxzKHEsIGNvdW50KTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX1BfSU5QVVRfRVJST1I6CiAJCWFubm91bmNlX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7CiAJCS8qIHByb2Nlc3MgdGhlIGJ1ZmZlciwgdGhlIHVwcGVyIGxheWVyIHdpbGwgdGFrZSBjYXJlIG9mIGl0ICovCiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOworCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCisJCQlhY2NvdW50X3NiYWxzX2Vycm9yKHEsIGNvdW50KTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX0NVX0lOUFVUX0VNUFRZOgogCWNhc2UgU0xTQl9QX0lOUFVUX05PVF9JTklUOgogCWNhc2UgU0xTQl9QX0lOUFVUX0FDSzoKKwkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQorCQkJcS0+cV9zdGF0cy5ucl9zYmFsX25vcCsrOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiaW4gbm9wIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC01MTQsNyArNTM0LDcgQEAKIAogCWlmICgoYnVmbnIgIT0gcS0+bGFzdF9tb3ZlKSB8fCBxLT5xZGlvX2Vycm9yKSB7CiAJCXEtPmxhc3RfbW92ZSA9IGJ1Zm5yOwotCQlpZiAoIWlzX3RoaW5pbnRfaXJxKHEtPmlycV9wdHIpICYmICFNQUNISU5FX0lTX1ZNKQorCQlpZiAoIWlzX3RoaW5pbnRfaXJxKHEtPmlycV9wdHIpICYmIE1BQ0hJTkVfSVNfTFBBUikKIAkJCXEtPnUuaW4udGltZXN0YW1wID0gZ2V0X3VzZWNzKCk7CiAJCXJldHVybiAxOwogCX0gZWxzZQpAQCAtNjQzLDE1ICs2NjMsMjEgQEAKIAogCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOwogCQlxLT5maXJzdF90b19jaGVjayA9IGFkZF9idWYocS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKKwkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQorCQkJYWNjb3VudF9zYmFscyhxLCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX09VVFBVVF9FUlJPUjoKIAkJYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKIAkJLyogcHJvY2VzcyB0aGUgYnVmZmVyLCB0aGUgdXBwZXIgbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQgKi8KIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCWFjY291bnRfc2JhbHNfZXJyb3IocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfQ1VfT1VUUFVUX1BSSU1FRDoKIAkJLyogdGhlIGFkYXB0ZXIgaGFzIG5vdCBmZXRjaGVkIHRoZSBvdXRwdXQgeWV0ICovCisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCXEtPnFfc3RhdHMubnJfc2JhbF9ub3ArKzsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgIm91dCBwcmltZWQ6JTFkIiwgcS0+bnIpOwogCQlicmVhazsKIAljYXNlIFNMU0JfUF9PVVRQVVRfTk9UX0lOSVQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCmluZGV4IDhjMmRlYTUuLjdmNGE3NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCkBAIC0zMzMsMTAgKzMzMywxMCBAQAogCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLnNsc2JhID0KIAkJKHVuc2lnbmVkIGxvbmcpJmlycV9wdHJfcXNbaV0tPnNsc2IudmFsWzBdOwogCi0JaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uYWtleSA9IFBBR0VfREVGQVVMVF9LRVk7Ci0JaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uYmtleSA9IFBBR0VfREVGQVVMVF9LRVk7Ci0JaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uY2tleSA9IFBBR0VfREVGQVVMVF9LRVk7Ci0JaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uZGtleSA9IFBBR0VfREVGQVVMVF9LRVk7CisJaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uYWtleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKKwlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ia2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OworCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmNrZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CisJaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uZGtleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfcWRyKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwKQEAgLTM1MCw3ICszNTAsNyBAQAogCWlycV9wdHItPnFkci0+aXFkc3ogPSBzaXplb2Yoc3RydWN0IHFkZXNmbXQwKSAvIDQ7IC8qIHNpemUgaW4gd29yZHMgKi8KIAlpcnFfcHRyLT5xZHItPm9xZHN6ID0gc2l6ZW9mKHN0cnVjdCBxZGVzZm10MCkgLyA0OwogCWlycV9wdHItPnFkci0+cWliYSA9ICh1bnNpZ25lZCBsb25nKSZpcnFfcHRyLT5xaWI7Ci0JaXJxX3B0ci0+cWRyLT5xa2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKKwlpcnFfcHRyLT5xZHItPnFrZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcWRpb19pbml0LT5ub19pbnB1dF9xczsgaSsrKQogCQlfX3FkaW9fYWxsb2NhdGVfZmlsbF9xZHIoaXJxX3B0ciwgaXJxX3B0ci0+aW5wdXRfcXMsIGksIDApOwpAQCAtMzgyLDcgKzM4MiwxNSBAQAogCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciA9IGluaXRfZGF0YS0+Y2Rldi0+cHJpdmF0ZS0+cWRpb19kYXRhOwogCWludCByYzsKIAotCW1lbXNldChpcnFfcHRyLCAwLCAoKGNoYXIgKikmaXJxX3B0ci0+cWRyKSAtICgoY2hhciAqKWlycV9wdHIpKTsKKwltZW1zZXQoJmlycV9wdHItPnFpYiwgMCwgc2l6ZW9mKGlycV9wdHItPnFpYikpOworCW1lbXNldCgmaXJxX3B0ci0+c2lnYV9mbGFnLCAwLCBzaXplb2YoaXJxX3B0ci0+c2lnYV9mbGFnKSk7CisJbWVtc2V0KCZpcnFfcHRyLT5jY3csIDAsIHNpemVvZihpcnFfcHRyLT5jY3cpKTsKKwltZW1zZXQoJmlycV9wdHItPnNzcWRfZGVzYywgMCwgc2l6ZW9mKGlycV9wdHItPnNzcWRfZGVzYykpOworCW1lbXNldCgmaXJxX3B0ci0+cGVyZl9zdGF0LCAwLCBzaXplb2YoaXJxX3B0ci0+cGVyZl9zdGF0KSk7CisKKwlpcnFfcHRyLT5kZWJ1Z2ZzX2RldiA9IGlycV9wdHItPmRlYnVnZnNfcGVyZiA9IE5VTEw7CisJaXJxX3B0ci0+c2NoX3Rva2VuID0gaXJxX3B0ci0+c3RhdGUgPSBpcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCA9IDA7CisKIAkvKiB3aXBlcyBxaWIuYWMsIHJlcXVpcmVkIGJ5IGFyNzA2MyAqLwogCW1lbXNldChpcnFfcHRyLT5xZHIsIDAsIHNpemVvZihzdHJ1Y3QgcWRyKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCmluZGV4IDA5MWQ5MDQuLjk5NDJjMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwpAQCAtMTk4LDggKzE5OCw4IEBACiAJCS5jb2RlCT0gMHgwMDIxLAogCX07CiAJc2Nzc2NfYXJlYS0+b3BlcmF0aW9uX2NvZGUgPSAwOwotCXNjc3NjX2FyZWEtPmtzID0gUEFHRV9ERUZBVUxUX0tFWTsKLQlzY3NzY19hcmVhLT5rYyA9IFBBR0VfREVGQVVMVF9LRVk7CisJc2Nzc2NfYXJlYS0+a3MgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CisJc2Nzc2NfYXJlYS0+a2MgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAJc2Nzc2NfYXJlYS0+aXNjID0gUURJT19BSVJRX0lTQzsKIAlzY3NzY19hcmVhLT5zY2hpZCA9IGlycV9wdHItPnNjaGlkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCmluZGV4IGM2OGJlMjQuLmJhNTBmZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC05MTIsMTI2ICs5MTMsMTA1IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnpjcnlwdF9lbnRyeTsKIAotc3RhdGljIGludCBzcHJpbnRjbCh1bnNpZ25lZCBjaGFyICpvdXRhZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkgICAgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIHNwcmludGNsKHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpbnQgaGwsIGk7CisJaW50IGk7CiAKLQlobCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIlMDF4IiwgKHVuc2lnbmVkIGludCkgYWRkcltpXSk7Ci0JaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiICIpOwotCXJldHVybiBobDsKKwkJc2VxX3ByaW50ZihtLCAiJTAxeCIsICh1bnNpZ25lZCBpbnQpIGFkZHJbaV0pOworCXNlcV9wdXRjKG0sICcgJyk7CiB9CiAKLXN0YXRpYyBpbnQgc3ByaW50cncodW5zaWduZWQgY2hhciAqb3V0YWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKLQkJICAgIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgdm9pZCBzcHJpbnRydyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaW50IGhsLCBpbmwsIGMsIGN4OworCWludCBpbmwsIGMsIGN4OwogCi0JaGwgPSBzcHJpbnRmKG91dGFkZHIsICIJICAgIik7CisJc2VxX3ByaW50ZihtLCAiCSAgICIpOwogCWlubCA9IDA7CiAJZm9yIChjID0gMDsgYyA8IChsZW4gLyAxNik7IGMrKykgewotCQlobCArPSBzcHJpbnRjbChvdXRhZGRyK2hsLCBhZGRyK2lubCwgMTYpOworCQlzcHJpbnRjbChtLCBhZGRyK2lubCwgMTYpOwogCQlpbmwgKz0gMTY7CiAJfQogCWN4ID0gbGVuJTE2OwogCWlmIChjeCkgewotCQlobCArPSBzcHJpbnRjbChvdXRhZGRyK2hsLCBhZGRyK2lubCwgY3gpOworCQlzcHJpbnRjbChtLCBhZGRyK2lubCwgY3gpOwogCQlpbmwgKz0gY3g7CiAJfQotCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIlxuIik7Ci0JcmV0dXJuIGhsOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCi1zdGF0aWMgaW50IHNwcmludGh4KHVuc2lnbmVkIGNoYXIgKnRpdGxlLCB1bnNpZ25lZCBjaGFyICpvdXRhZGRyLAotCQkgICAgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIHNwcmludGh4KHVuc2lnbmVkIGNoYXIgKnRpdGxlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCisJCSAgICAgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpbnQgaGwsIGlubCwgciwgcng7CisJaW50IGlubCwgciwgcng7CiAKLQlobCA9IHNwcmludGYob3V0YWRkciwgIlxuJXNcbiIsIHRpdGxlKTsKKwlzZXFfcHJpbnRmKG0sICJcbiVzXG4iLCB0aXRsZSk7CiAJaW5sID0gMDsKIAlmb3IgKHIgPSAwOyByIDwgKGxlbiAvIDY0KTsgcisrKSB7Ci0JCWhsICs9IHNwcmludHJ3KG91dGFkZHIraGwsIGFkZHIraW5sLCA2NCk7CisJCXNwcmludHJ3KG0sIGFkZHIraW5sLCA2NCk7CiAJCWlubCArPSA2NDsKIAl9CiAJcnggPSBsZW4gJSA2NDsKIAlpZiAocngpIHsKLQkJaGwgKz0gc3ByaW50cncob3V0YWRkcitobCwgYWRkcitpbmwsIHJ4KTsKKwkJc3ByaW50cncobSwgYWRkcitpbmwsIHJ4KTsKIAkJaW5sICs9IHJ4OwogCX0KLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOwotCXJldHVybiBobDsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAotc3RhdGljIGludCBzcHJpbnRoeDQodW5zaWduZWQgY2hhciAqdGl0bGUsIHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsCi0JCSAgICAgdW5zaWduZWQgaW50ICphcnJheSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIHNwcmludGh4NCh1bnNpZ25lZCBjaGFyICp0aXRsZSwgc3RydWN0IHNlcV9maWxlICptLAorCQkgICAgICB1bnNpZ25lZCBpbnQgKmFycmF5LCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludCBobCwgcjsKKwlpbnQgcjsKIAotCWhsID0gc3ByaW50ZihvdXRhZGRyLCAiXG4lc1xuIiwgdGl0bGUpOworCXNlcV9wcmludGYobSwgIlxuJXNcbiIsIHRpdGxlKTsKIAlmb3IgKHIgPSAwOyByIDwgbGVuOyByKyspIHsKIAkJaWYgKChyICUgOCkgPT0gMCkKLQkJCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIiAgICAiKTsKLQkJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiJTA4WCAiLCBhcnJheVtyXSk7CisJCQlzZXFfcHJpbnRmKG0sICIgICAgIik7CisJCXNlcV9wcmludGYobSwgIiUwOFggIiwgYXJyYXlbcl0pOwogCQlpZiAoKHIgJSA4KSA9PSA3KQotCQkJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiXG4iKTsKKwkJCXNlcV9wdXRjKG0sICdcbicpOwogCX0KLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOwotCXJldHVybiBobDsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAotc3RhdGljIGludCB6Y3J5cHRfc3RhdHVzX3JlYWQoY2hhciAqcmVzcF9idWZmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHpjcnlwdF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXVuc2lnbmVkIGNoYXIgKndvcmthcmVhOwotCWludCBsZW47CisJY2hhciB3b3JrYXJlYVtzaXplb2YoaW50KSAqIEFQX0RFVklDRVNdOwogCi0JbGVuID0gMDsKLQotCS8qIHJlc3BfYnVmZiBpcyBhIHBhZ2UuIFVzZSB0aGUgcmlnaHQgaGFsZiBmb3IgYSB3b3JrIGFyZWEgKi8KLQl3b3JrYXJlYSA9IHJlc3BfYnVmZiArIDIwMDA7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiXG56Y3J5cHQgdmVyc2lvbjogJWQuJWQuJWRcbiIsCi0JCVpDUllQVF9WRVJTSU9OLCBaQ1JZUFRfUkVMRUFTRSwgWkNSWVBUX1ZBUklBTlQpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNyeXB0b2dyYXBoaWMgZG9tYWluOiAlZFxuIiwKLQkJICAgICAgIGFwX2RvbWFpbl9pbmRleCk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiVG90YWwgZGV2aWNlIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9kZXZpY2VfY291bnQpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlBDSUNBIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lDQSkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlBDSUNDIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lDQykpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlBDSVhDQyBNQ0wyIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMikpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlBDSVhDQyBNQ0wzIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMykpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNFWDJDIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgyQykpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNFWDJBIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgyQSkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNFWDNDIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgzQykpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIkNFWDNBIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgzQSkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgInJlcXVlc3RxIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9yZXF1ZXN0cV9jb3VudCgpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJwZW5kaW5ncSBjb3VudDogJWRcbiIsCi0JCSAgICAgICB6Y3J5cHRfcGVuZGluZ3FfY291bnQoKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiVG90YWwgb3BlbiBoYW5kbGVzOiAlZFxuXG4iLAotCQkgICAgICAgYXRvbWljX3JlYWQoJnpjcnlwdF9vcGVuX2NvdW50KSk7CisJc2VxX3ByaW50ZihtLCAiXG56Y3J5cHQgdmVyc2lvbjogJWQuJWQuJWRcbiIsCisJCSAgIFpDUllQVF9WRVJTSU9OLCBaQ1JZUFRfUkVMRUFTRSwgWkNSWVBUX1ZBUklBTlQpOworCXNlcV9wcmludGYobSwgIkNyeXB0b2dyYXBoaWMgZG9tYWluOiAlZFxuIiwgYXBfZG9tYWluX2luZGV4KTsKKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBkZXZpY2UgY291bnQ6ICVkXG4iLCB6Y3J5cHRfZGV2aWNlX2NvdW50KTsKKwlzZXFfcHJpbnRmKG0sICJQQ0lDQSBjb3VudDogJWRcbiIsIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lDQSkpOworCXNlcV9wcmludGYobSwgIlBDSUNDIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSUNDKSk7CisJc2VxX3ByaW50ZihtLCAiUENJWENDIE1DTDIgY291bnQ6ICVkXG4iLAorCQkgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJWENDX01DTDIpKTsKKwlzZXFfcHJpbnRmKG0sICJQQ0lYQ0MgTUNMMyBjb3VudDogJWRcbiIsCisJCSAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMykpOworCXNlcV9wcmludGYobSwgIkNFWDJDIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDJDKSk7CisJc2VxX3ByaW50ZihtLCAiQ0VYMkEgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYMkEpKTsKKwlzZXFfcHJpbnRmKG0sICJDRVgzQyBjb3VudDogJWRcbiIsIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgzQykpOworCXNlcV9wcmludGYobSwgIkNFWDNBIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDNBKSk7CisJc2VxX3ByaW50ZihtLCAicmVxdWVzdHEgY291bnQ6ICVkXG4iLCB6Y3J5cHRfcmVxdWVzdHFfY291bnQoKSk7CisJc2VxX3ByaW50ZihtLCAicGVuZGluZ3EgY291bnQ6ICVkXG4iLCB6Y3J5cHRfcGVuZGluZ3FfY291bnQoKSk7CisJc2VxX3ByaW50ZihtLCAiVG90YWwgb3BlbiBoYW5kbGVzOiAlZFxuXG4iLAorCQkgICBhdG9taWNfcmVhZCgmemNyeXB0X29wZW5fY291bnQpKTsKIAl6Y3J5cHRfc3RhdHVzX21hc2sod29ya2FyZWEpOwotCWxlbiArPSBzcHJpbnRoeCgiT25saW5lIGRldmljZXM6IDE9UENJQ0EgMj1QQ0lDQyAzPVBDSVhDQyhNQ0wyKSAiCi0JCQkiND1QQ0lYQ0MoTUNMMykgNT1DRVgyQyA2PUNFWDJBIDc9Q0VYM0MgOD1DRVgzQSIsCi0JCQlyZXNwX2J1ZmYrbGVuLCB3b3JrYXJlYSwgQVBfREVWSUNFUyk7CisJc3ByaW50aHgoIk9ubGluZSBkZXZpY2VzOiAxPVBDSUNBIDI9UENJQ0MgMz1QQ0lYQ0MoTUNMMikgIgorCQkgIjQ9UENJWENDKE1DTDMpIDU9Q0VYMkMgNj1DRVgyQSA3PUNFWDNDIDg9Q0VYM0EiLAorCQkgbSwgd29ya2FyZWEsIEFQX0RFVklDRVMpOwogCXpjcnlwdF9xZGVwdGhfbWFzayh3b3JrYXJlYSk7Ci0JbGVuICs9IHNwcmludGh4KCJXYWl0aW5nIHdvcmsgZWxlbWVudCBjb3VudHMiLAotCQkJcmVzcF9idWZmK2xlbiwgd29ya2FyZWEsIEFQX0RFVklDRVMpOworCXNwcmludGh4KCJXYWl0aW5nIHdvcmsgZWxlbWVudCBjb3VudHMiLCBtLCB3b3JrYXJlYSwgQVBfREVWSUNFUyk7CiAJemNyeXB0X3BlcmRldl9yZXFjbnQoKGludCAqKSB3b3JrYXJlYSk7Ci0JbGVuICs9IHNwcmludGh4NCgiUGVyLWRldmljZSBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHJlcXVlc3QgY291bnRzIiwKLQkJCSByZXNwX2J1ZmYrbGVuLCh1bnNpZ25lZCBpbnQgKikgd29ya2FyZWEsIEFQX0RFVklDRVMpOwotCSplb2YgPSAxOwotCW1lbXNldCgodm9pZCAqKSB3b3JrYXJlYSwgMHgwMCwgQVBfREVWSUNFUyAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKLQlyZXR1cm4gbGVuOworCXNwcmludGh4NCgiUGVyLWRldmljZSBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHJlcXVlc3QgY291bnRzIiwKKwkJICBtLCAodW5zaWduZWQgaW50ICopIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6Y3J5cHRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB6Y3J5cHRfcHJvY19zaG93LCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgemNyeXB0X2Rpc2FibGVfY2FyZChpbnQgaW5kZXgpCkBAIC0xMDYxLDExICsxMDQxLDExIEBACiAJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgemNyeXB0X3N0YXR1c193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3QgemNyeXB0X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJdW5zaWduZWQgY2hhciAqbGJ1ZiwgKnB0cjsKLQl1bnNpZ25lZCBsb25nIGxvY2FsX2NvdW50OworCXNpemVfdCBsb2NhbF9jb3VudDsKIAlpbnQgajsKIAogCWlmIChjb3VudCA8PSAwKQpAQCAtMTExNSw2ICsxMDk1LDE1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6Y3J5cHRfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB6Y3J5cHRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IHpjcnlwdF9wcm9jX3dyaXRlLAorfTsKKwogc3RhdGljIGludCB6Y3J5cHRfcm5nX2RldmljZV9jb3VudDsKIHN0YXRpYyB1MzIgKnpjcnlwdF9ybmdfYnVmZmVyOwogc3RhdGljIGludCB6Y3J5cHRfcm5nX2J1ZmZlcl9pbmRleDsKQEAgLTExOTcsMTQgKzExODYsMTEgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBTZXQgdXAgdGhlIHByb2MgZmlsZSBzeXN0ZW0gKi8KLQl6Y3J5cHRfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHJpdmVyL3o5MGNyeXB0IiwgMDY0NCwgTlVMTCk7CisJemNyeXB0X2VudHJ5ID0gcHJvY19jcmVhdGUoImRyaXZlci96OTBjcnlwdCIsIDA2NDQsIE5VTEwsICZ6Y3J5cHRfcHJvY19mb3BzKTsKIAlpZiAoIXpjcnlwdF9lbnRyeSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X21pc2M7CiAJfQotCXpjcnlwdF9lbnRyeS0+ZGF0YSA9IE5VTEw7Ci0JemNyeXB0X2VudHJ5LT5yZWFkX3Byb2MgPSB6Y3J5cHRfc3RhdHVzX3JlYWQ7Ci0JemNyeXB0X2VudHJ5LT53cml0ZV9wcm9jID0gemNyeXB0X3N0YXR1c193cml0ZTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYyBiL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCmluZGV4IDI5MzBmYzcuLmIyZmM0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCkBAIC0zNDAsMTEgKzM0MCwxMSBAQAogCQlyZXR1cm47CiAKIAkvKiBUaGUgTFNCIG1pZ2h0IGJlIG92ZXJsb2FkZWQsIHdlIGhhdmUgdG8gbWFzayBpdCAqLwotCXZxID0gKHN0cnVjdCB2aXJ0cXVldWUgKikgKCgqKGxvbmcgKikgX19MQ19QRkFVTFRfSU5UUEFSTSkgJiB+MVVMKTsKKwl2cSA9IChzdHJ1Y3QgdmlydHF1ZXVlICopKFMzOTBfbG93Y29yZS5leHRfcGFyYW1zMiAmIH4xVUwpOwogCiAJLyogV2UgdXNlIHRoZSBMU0Igb2YgZXh0cGFyYW0sIHRvIGRlY2lkZSwgaWYgdGhpcyBpbnRlcnJ1cHQgaXMgYSBjb25maWcKIAkgKiBjaGFuZ2Ugb3IgYSAic3RhbmRhcmQiIGludGVycnVwdCAqLwotCWNvbmZpZ19jaGFuZ2VkID0gICgqKGludCAqKSAgX19MQ19FWFRfUEFSQU1TICYgMSk7CisJY29uZmlnX2NoYW5nZWQgPSBTMzkwX2xvd2NvcmUuZXh0X3BhcmFtcyAmIDE7CiAKIAlpZiAoY29uZmlnX2NoYW5nZWQpIHsKIAkJc3RydWN0IHZpcnRpb19kcml2ZXIgKmRydjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCmluZGV4IDlkMGM5NDEuLjY2ZDZjMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBNb2R1bGUgaW50ZXJmYWNlIGFuZCBoYW5kbGluZyBvZiB6ZmNwIGRhdGEgc3RydWN0dXJlcy4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAxMAogICovCiAKIC8qCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgogI2luY2x1ZGUgInpmY3BfZmMuaCIKKyNpbmNsdWRlICJ6ZmNwX3JlcWxpc3QuaCIKIAogI2RlZmluZSBaRkNQX0JVU19JRF9TSVpFCTIwCiAKQEAgLTQ5LDM2ICs1MCw2IEBACiAJcmV0dXJuIGttZW1fY2FjaGVfY3JlYXRlKG5hbWUsIHNpemUsIHJvdW5kdXBfcG93X29mX3R3byhzaXplKSwgMCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgemZjcF9yZXFsaXN0X2FsbG9jKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGlkeDsKLQotCWFkYXB0ZXItPnJlcV9saXN0ID0ga2NhbGxvYyhSRVFVRVNUX0xJU1RfU0laRSwgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWFkYXB0ZXItPnJlcV9saXN0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgUkVRVUVTVF9MSVNUX1NJWkU7IGlkeCsrKQotCQlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogemZjcF9yZXFsaXN0X2lzZW1wdHkgLSBpcyB0aGUgcmVxdWVzdCBsaXN0IGVtcHR5Ci0gKiBAYWRhcHRlcjogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9hZGFwdGVyCi0gKgotICogUmV0dXJuczogdHJ1ZSBpZiBsaXN0IGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UKLSAqLwotaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgUkVRVUVTVF9MSVNUX1NJWkU7IGlkeCsrKQotCQlpZiAoIWxpc3RfZW1wdHkoJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pKQotCQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCB6ZmNwX2luaXRfZGV2aWNlX2NvbmZpZ3VyZShjaGFyICpidXNpZCwgdTY0IHd3cG4sIHU2NCBsdW4pCiB7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CkBAIC0xMTAsNyArODEsNyBAQAogCWZsdXNoX3dvcmsoJnVuaXQtPnNjc2lfd29yayk7CiAKIG91dF91bml0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIG91dF9wb3J0OgogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwogb3V0X2Njd19kZXZpY2U6CkBAIC0yNTUsNyArMjI2LDcgQEAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmcG9ydC0+dW5pdF9saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVuaXQsICZwb3J0LT51bml0X2xpc3QsIGxpc3QpCiAJCWlmICh1bml0LT5mY3BfbHVuID09IGZjcF9sdW4pIHsKLQkJCWlmICghZ2V0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKSkKKwkJCWlmICghZ2V0X2RldmljZSgmdW5pdC0+ZGV2KSkKIAkJCQl1bml0ID0gTlVMTDsKIAkJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnVuaXRfbGlzdF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gdW5pdDsKQEAgLTI4MCw3ICsyNTEsNyBAQAogCXJlYWRfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5wb3J0X2xpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFkYXB0ZXItPnBvcnRfbGlzdCwgbGlzdCkKIAkJaWYgKHBvcnQtPnd3cG4gPT0gd3dwbikgewotCQkJaWYgKCFnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpKQorCQkJaWYgKCFnZXRfZGV2aWNlKCZwb3J0LT5kZXYpKQogCQkJCXBvcnQgPSBOVUxMOwogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiBwb3J0OwpAQCAtMjk4LDEwICsyNjksOSBAQAogICovCiBzdGF0aWMgdm9pZCB6ZmNwX3VuaXRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3VuaXQsCi0JCQkJCSAgICAgIHN5c2ZzX2RldmljZSk7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3VuaXQsIGRldik7CiAKLQlwdXRfZGV2aWNlKCZ1bml0LT5wb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnVuaXQtPnBvcnQtPmRldik7CiAJa2ZyZWUodW5pdCk7CiB9CiAKQEAgLTMxOCwxMSArMjg4LDExIEBACiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAogCXVuaXQgPSB6ZmNwX2dldF91bml0X2J5X2x1bihwb3J0LCBmY3BfbHVuKTsKIAlpZiAodW5pdCkgewotCQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCQlyZXR2YWwgPSAtRUVYSVNUOwogCQlnb3RvIGVycl9vdXQ7CiAJfQpAQCAtMzMzLDEwICszMDMsMTAgQEAKIAogCXVuaXQtPnBvcnQgPSBwb3J0OwogCXVuaXQtPmZjcF9sdW4gPSBmY3BfbHVuOwotCXVuaXQtPnN5c2ZzX2RldmljZS5wYXJlbnQgPSAmcG9ydC0+c3lzZnNfZGV2aWNlOwotCXVuaXQtPnN5c2ZzX2RldmljZS5yZWxlYXNlID0gemZjcF91bml0X3JlbGVhc2U7CisJdW5pdC0+ZGV2LnBhcmVudCA9ICZwb3J0LT5kZXY7CisJdW5pdC0+ZGV2LnJlbGVhc2UgPSB6ZmNwX3VuaXRfcmVsZWFzZTsKIAotCWlmIChkZXZfc2V0X25hbWUoJnVuaXQtPnN5c2ZzX2RldmljZSwgIjB4JTAxNmxseCIsCisJaWYgKGRldl9zZXRfbmFtZSgmdW5pdC0+ZGV2LCAiMHglMDE2bGx4IiwKIAkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBmY3BfbHVuKSkgewogCQlrZnJlZSh1bml0KTsKIAkJZ290byBlcnJfb3V0OwpAQCAtMzUzLDEzICszMjMsMTIgQEAKIAl1bml0LT5sYXRlbmNpZXMuY21kLmNoYW5uZWwubWluID0gMHhGRkZGRkZGRjsKIAl1bml0LT5sYXRlbmNpZXMuY21kLmZhYnJpYy5taW4gPSAweEZGRkZGRkZGOwogCi0JaWYgKGRldmljZV9yZWdpc3RlcigmdW5pdC0+c3lzZnNfZGV2aWNlKSkgewotCQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnVuaXQtPmRldikpIHsKKwkJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnVuaXQtPnN5c2ZzX2RldmljZS5rb2JqLAotCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpKQorCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnVuaXQtPmRldi5rb2JqLCAmemZjcF9zeXNmc191bml0X2F0dHJzKSkKIAkJZ290byBlcnJfb3V0X3B1dDsKIAogCXdyaXRlX2xvY2tfaXJxKCZwb3J0LT51bml0X2xpc3RfbG9jayk7CkBAIC0zNzEsOSArMzQwLDkgQEAKIAlyZXR1cm4gdW5pdDsKIAogZXJyX291dF9wdXQ6Ci0JZGV2aWNlX3VucmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJZGV2aWNlX3VucmVnaXN0ZXIoJnVuaXQtPmRldik7CiBlcnJfb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwogfQogCkBAIC01MzksNyArNTA4LDggQEAKIAlpZiAoemZjcF9hbGxvY2F0ZV9sb3dfbWVtX2J1ZmZlcnMoYWRhcHRlcikpCiAJCWdvdG8gZmFpbGVkOwogCi0JaWYgKHpmY3BfcmVxbGlzdF9hbGxvYyhhZGFwdGVyKSkKKwlhZGFwdGVyLT5yZXFfbGlzdCA9IHpmY3BfcmVxbGlzdF9hbGxvYygpOworCWlmICghYWRhcHRlci0+cmVxX2xpc3QpCiAJCWdvdG8gZmFpbGVkOwogCiAJaWYgKHpmY3BfZGJmX2FkYXB0ZXJfcmVnaXN0ZXIoYWRhcHRlcikpCkBAIC01NjAsOCArNTMwLDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpOwogCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5lcnBfcnVubmluZ19oZWFkKTsKIAotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKLQogCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5lcnBfbG9jayk7CiAJcndsb2NrX2luaXQoJmFkYXB0ZXItPmFib3J0X2xvY2spOwogCkBAIC02NDAsOCArNjA4LDcgQEAKIAogc3RhdGljIHZvaWQgemZjcF9wb3J0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF9wb3J0LAotCQkJCQkgICAgICBzeXNmc19kZXZpY2UpOworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF9wb3J0LCBkZXYpOwogCiAJemZjcF9jY3dfYWRhcHRlcl9wdXQocG9ydC0+YWRhcHRlcik7CiAJa2ZyZWUocG9ydCk7CkBAIC02NjksNyArNjM2LDcgQEAKIAogCXBvcnQgPSB6ZmNwX2dldF9wb3J0X2J5X3d3cG4oYWRhcHRlciwgd3dwbik7CiAJaWYgKHBvcnQpIHsKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAkJcmV0dmFsID0gLUVFWElTVDsKIAkJZ290byBlcnJfb3V0OwogCX0KQEAgLTY4OSwyMiArNjU2LDIxIEBACiAJcG9ydC0+ZF9pZCA9IGRfaWQ7CiAJcG9ydC0+d3dwbiA9IHd3cG47CiAJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX05PTkU7Ci0JcG9ydC0+c3lzZnNfZGV2aWNlLnBhcmVudCA9ICZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXY7Ci0JcG9ydC0+c3lzZnNfZGV2aWNlLnJlbGVhc2UgPSB6ZmNwX3BvcnRfcmVsZWFzZTsKKwlwb3J0LT5kZXYucGFyZW50ID0gJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldjsKKwlwb3J0LT5kZXYucmVsZWFzZSA9IHpmY3BfcG9ydF9yZWxlYXNlOwogCi0JaWYgKGRldl9zZXRfbmFtZSgmcG9ydC0+c3lzZnNfZGV2aWNlLCAiMHglMDE2bGx4IiwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXd3cG4pKSB7CisJaWYgKGRldl9zZXRfbmFtZSgmcG9ydC0+ZGV2LCAiMHglMDE2bGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl3d3BuKSkgewogCQlrZnJlZShwb3J0KTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAlyZXR2YWwgPSAtRUlOVkFMOwogCi0JaWYgKGRldmljZV9yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlKSkgewotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnBvcnQtPmRldikpIHsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnBvcnQtPnN5c2ZzX2RldmljZS5rb2JqLAorCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnBvcnQtPmRldi5rb2JqLAogCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpKQogCQlnb3RvIGVycl9vdXRfcHV0OwogCkBAIC03MTcsNyArNjgzLDcgQEAKIAlyZXR1cm4gcG9ydDsKIAogZXJyX291dF9wdXQ6Ci0JZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPmRldik7CiBlcnJfb3V0OgogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwogCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwppbmRleCBjMjJjYjcyLi5jZTFjYzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKQEAgLTMsMTMgKzMsMTQgQEAKICAqCiAgKiBSZWdpc3RyYXRpb24gYW5kIGNhbGxiYWNrIGZvciB0aGUgczM5MCBjb21tb24gSS9PIGxheWVyLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKICNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAogI2luY2x1ZGUgInpmY3BfZXh0LmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKICNkZWZpbmUgWkZDUF9NT0RFTF9QUklWIDB4NAogCkBAIC0xMjIsMTIgKzEyMywxMCBAQAogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOyAvKiBwdXQgZnJvbSB6ZmNwX2Njd19hZGFwdGVyX2J5X2NkZXYgKi8KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bml0LCB1LCAmdW5pdF9yZW1vdmVfbGgsIGxpc3QpCi0JCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSwKLQkJCQkgICAgICAgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycyk7CisJCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnVuaXQtPmRldiwgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9ydCwgcCwgJnBvcnRfcmVtb3ZlX2xoLCBsaXN0KQotCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UsCi0JCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOworCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYsICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOwogCiAJemZjcF9hZGFwdGVyX3VucmVnaXN0ZXIoYWRhcHRlcik7CiB9CkBAIC0xNjIsNyArMTYxLDcgQEAKIAl9CiAKIAkvKiBpbml0aWFsaXplIHJlcXVlc3QgY291bnRlciAqLwotCUJVR19PTighemZjcF9yZXFsaXN0X2lzZW1wdHkoYWRhcHRlcikpOworCUJVR19PTighemZjcF9yZXFsaXN0X2lzZW1wdHkoYWRhcHRlci0+cmVxX2xpc3QpKTsKIAlhZGFwdGVyLT5yZXFfbm8gPSAwOwogCiAJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsICJjY3NvbmwxIiwgTlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCmluZGV4IDczNjljODkuLjdhMTQ5ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwpAQCAtMTQwLDkgKzE0MCw5IEBACiAJbWVtY3B5KHJlc3BvbnNlLT5mc2Zfc3RhdHVzX3F1YWwsCiAJICAgICAgIGZzZl9zdGF0dXNfcXVhbCwgRlNGX1NUQVRVU19RVUFMSUZJRVJfU0laRSk7CiAJcmVzcG9uc2UtPmZzZl9yZXFfc3RhdHVzID0gZnNmX3JlcS0+c3RhdHVzOwotCXJlc3BvbnNlLT5zYmFsX2ZpcnN0ID0gZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfZmlyc3Q7Ci0JcmVzcG9uc2UtPnNiYWxfbGFzdCA9IGZzZl9yZXEtPnF1ZXVlX3JlcS5zYmFsX2xhc3Q7Ci0JcmVzcG9uc2UtPnNiYWxfcmVzcG9uc2UgPSBmc2ZfcmVxLT5xdWV1ZV9yZXEuc2JhbF9yZXNwb25zZTsKKwlyZXNwb25zZS0+c2JhbF9maXJzdCA9IGZzZl9yZXEtPnFkaW9fcmVxLnNiYWxfZmlyc3Q7CisJcmVzcG9uc2UtPnNiYWxfbGFzdCA9IGZzZl9yZXEtPnFkaW9fcmVxLnNiYWxfbGFzdDsKKwlyZXNwb25zZS0+c2JhbF9yZXNwb25zZSA9IGZzZl9yZXEtPnFkaW9fcmVxLnNiYWxfcmVzcG9uc2U7CiAJcmVzcG9uc2UtPnBvb2wgPSBmc2ZfcmVxLT5wb29sICE9IE5VTEw7CiAJcmVzcG9uc2UtPmVycF9hY3Rpb24gPSAodW5zaWduZWQgbG9uZylmc2ZfcmVxLT5lcnBfYWN0aW9uOwogCkBAIC01NzYsNyArNTc2LDggQEAKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZGJmLT5hZGFwdGVyOwogCiAJemZjcF9kYmZfcmVjX3RhcmdldChpZCwgcmVmLCBkYmYsICZhZGFwdGVyLT5zdGF0dXMsCi0JCQkJICAmYWRhcHRlci0+ZXJwX2NvdW50ZXIsIDAsIDAsIDApOworCQkJICAgICZhZGFwdGVyLT5lcnBfY291bnRlciwgMCwgMCwKKwkJCSAgICBaRkNQX0RCRl9JTlZBTElEX0xVTik7CiB9CiAKIC8qKgpAQCAtNTkwLDggKzU5MSw4IEBACiAJc3RydWN0IHpmY3BfZGJmICpkYmYgPSBwb3J0LT5hZGFwdGVyLT5kYmY7CiAKIAl6ZmNwX2RiZl9yZWNfdGFyZ2V0KGlkLCByZWYsIGRiZiwgJnBvcnQtPnN0YXR1cywKLQkJCQkgICZwb3J0LT5lcnBfY291bnRlciwgcG9ydC0+d3dwbiwgcG9ydC0+ZF9pZCwKLQkJCQkgIDApOworCQkJICAgICZwb3J0LT5lcnBfY291bnRlciwgcG9ydC0+d3dwbiwgcG9ydC0+ZF9pZCwKKwkJCSAgICBaRkNQX0RCRl9JTlZBTElEX0xVTik7CiB9CiAKIC8qKgpAQCAtNjQyLDEwICs2NDMsOSBAQAogCQlyLT51LnRyaWdnZXIucHMgPSBhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKTsKIAkJci0+dS50cmlnZ2VyLnd3cG4gPSBwb3J0LT53d3BuOwogCX0KLQlpZiAodW5pdCkgeworCWlmICh1bml0KQogCQlyLT51LnRyaWdnZXIudXMgPSBhdG9taWNfcmVhZCgmdW5pdC0+c3RhdHVzKTsKLQkJci0+dS50cmlnZ2VyLmZjcF9sdW4gPSB1bml0LT5mY3BfbHVuOwotCX0KKwlyLT51LnRyaWdnZXIuZmNwX2x1biA9IHVuaXQgPyB1bml0LT5mY3BfbHVuIDogWkZDUF9EQkZfSU5WQUxJRF9MVU47CiAJZGVidWdfZXZlbnQoZGJmLT5yZWMsIGFjdGlvbiA/IDEgOiA0LCByLCBzaXplb2YoKnIpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7CiB9CkBAIC02NjgsNyArNjY4LDcgQEAKIAlyLT51LmFjdGlvbi5hY3Rpb24gPSAodW5zaWduZWQgbG9uZyllcnBfYWN0aW9uOwogCXItPnUuYWN0aW9uLnN0YXR1cyA9IGVycF9hY3Rpb24tPnN0YXR1czsKIAlyLT51LmFjdGlvbi5zdGVwID0gZXJwX2FjdGlvbi0+c3RlcDsKLQlyLT51LmFjdGlvbi5mc2ZfcmVxID0gKHVuc2lnbmVkIGxvbmcpZXJwX2FjdGlvbi0+ZnNmX3JlcTsKKwlyLT51LmFjdGlvbi5mc2ZfcmVxID0gZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZDsKIAlkZWJ1Z19ldmVudChkYmYtPnJlYywgNSwgciwgc2l6ZW9mKCpyKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKaW5kZXggOGI3ZmQ5YS4uNDU3ZTA0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCkBAIC0zMCw2ICszMCw4IEBACiAjZGVmaW5lIFpGQ1BfREJGX1RBR19TSVpFICAgICAgNAogI2RlZmluZSBaRkNQX0RCRl9JRF9TSVpFICAgICAgIDcKIAorI2RlZmluZSBaRkNQX0RCRl9JTlZBTElEX0xVTgkweEZGRkZGRkZGRkZGRkZGRkZ1bGwKKwogc3RydWN0IHpmY3BfZGJmX2R1bXAgewogCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CiAJdTMyIHRvdGFsX3NpemU7CQkvKiBzaXplIG9mIHRvdGFsIGR1bXAgZGF0YSAqLwpAQCAtMTkyLDEwICsxOTQsMTAgQEAKIAkJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfY3RfcmVzcG9uc2UgY3RfcmVzcDsKIAkJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfZWxzIGVsczsKIAl9IHU7Ci0jZGVmaW5lIFpGQ1BfREJGX1NBTl9NQVhfUEFZTE9BRCAxMDI0Ci0JdTggcGF5bG9hZFszMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBaRkNQX0RCRl9TQU5fTUFYX1BBWUxPQUQgMTAyNAorCiBzdHJ1Y3QgemZjcF9kYmZfc2NzaV9yZWNvcmQgewogCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CiAJdTggdGFnMltaRkNQX0RCRl9UQUdfU0laRV07CkBAIC0zMDEsMTcgKzMwMywzMSBAQAogCiAvKioKICAqIHpmY3BfZGJmX3Njc2lfcmVzdWx0IC0gdHJhY2UgZXZlbnQgZm9yIFNDU0kgY29tbWFuZCBjb21wbGV0aW9uCi0gKiBAdGFnOiB0YWcgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgU0NTSSBjb21tYW5kCi0gKiBAbGV2ZWw6IHRyYWNlIGxldmVsIGFwcGxpY2FibGUgZm9yIHRoaXMgZXZlbnQKLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoYXQgaGFzIGJlZW4gdXNlZCB0byBpc3N1ZSB0aGUgU0NTSSBjb21tYW5kCisgKiBAZGJmOiBhZGFwdGVyIGRiZiB0cmFjZQogICogQHNjbWQ6IFNDU0kgY29tbWFuZCBwb2ludGVyCi0gKiBAZnNmX3JlcTogcmVxdWVzdCB1c2VkIHRvIGlzc3VlIFNDU0kgY29tbWFuZCAobWlnaHQgYmUgTlVMTCkKKyAqIEByZXE6IEZTRiByZXF1ZXN0IHVzZWQgdG8gaXNzdWUgU0NTSSBjb21tYW5kCiAgKi8KIHN0YXRpYyBpbmxpbmUKLXZvaWQgemZjcF9kYmZfc2NzaV9yZXN1bHQoY29uc3QgY2hhciAqdGFnLCBpbnQgbGV2ZWwsIHN0cnVjdCB6ZmNwX2RiZiAqZGJmLAotCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQordm9pZCB6ZmNwX2RiZl9zY3NpX3Jlc3VsdChzdHJ1Y3QgemZjcF9kYmYgKmRiZiwgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKKwkJCSAgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQogewotCXpmY3BfZGJmX3Njc2koInJzbHQiLCB0YWcsIGxldmVsLCBkYmYsIHNjbWQsIGZzZl9yZXEsIDApOworCWlmIChzY21kLT5yZXN1bHQgIT0gMCkKKwkJemZjcF9kYmZfc2NzaSgicnNsdCIsICJlcnJvIiwgMywgZGJmLCBzY21kLCByZXEsIDApOworCWVsc2UgaWYgKHNjbWQtPnJldHJpZXMgPiAwKQorCQl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgInJldHIiLCA0LCBkYmYsIHNjbWQsIHJlcSwgMCk7CisJZWxzZQorCQl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgIm5vcm0iLCA2LCBkYmYsIHNjbWQsIHJlcSwgMCk7Cit9CisKKy8qKgorICogemZjcF9kYmZfc2NzaV9mYWlsX3NlbmQgLSB0cmFjZSBldmVudCBmb3IgZmFpbHVyZSB0byBzZW5kIFNDU0kgY29tbWFuZAorICogQGRiZjogYWRhcHRlciBkYmYgdHJhY2UKKyAqIEBzY21kOiBTQ1NJIGNvbW1hbmQgcG9pbnRlcgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIHpmY3BfZGJmX3Njc2lfZmFpbF9zZW5kKHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXpmY3BfZGJmX3Njc2koInJzbHQiLCAiZmFpbCIsIDQsIGRiZiwgc2NtZCwgTlVMTCwgMCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKaW5kZXggZTFiNWI4OC4uNzEzMWM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEdsb2JhbCBkZWZpbml0aW9ucyBmb3IgdGhlIHpmY3AgZGV2aWNlIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAxMAogICovCiAKICNpZm5kZWYgWkZDUF9ERUZfSApAQCAtMzMsMTUgKzMzLDEzIEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ic2dfZmMuaD4KICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+Ci0jaW5jbHVkZSA8YXNtL3FkaW8uaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2luZm8uaD4KICNpbmNsdWRlICJ6ZmNwX2ZzZi5oIgorI2luY2x1ZGUgInpmY3BfcWRpby5oIgogCi0vKioqKioqKioqKioqKioqKioqKioqIEdFTkVSQUwgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgUkVRVUVTVF9MSVNUX1NJWkUgMTI4CitzdHJ1Y3QgemZjcF9yZXFsaXN0OwogCiAvKioqKioqKioqKioqKioqKioqKioqIFNDU0kgU1BFQ0lGSUMgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIFpGQ1BfU0NTSV9FUl9USU1FT1VUICAgICAgICAgICAgICAgICAgICAoMTAqSFopCkBAIC0xMjksMTIgKzEyNyw2IEBACiAJbWVtcG9vbF90ICpxdGNiX3Bvb2w7CiB9OwogCi1zdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlIHsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgKnNiYWxbUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0JdTgJCSAgIGZpcnN0OwkvKiBpbmRleCBvZiBuZXh0IGZyZWUgYmZyIGluIHF1ZXVlICovCi0JYXRvbWljX3QgICAgICAgICAgIGNvdW50OwkvKiBudW1iZXIgb2YgZnJlZSBidWZmZXJzIGluIHF1ZXVlICovCi19OwotCiBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50IGFjdGlvbjsJICAgICAgICAgICAgICAvKiByZXF1ZXN0ZWQgYWN0aW9uIGNvZGUgKi8KQEAgLTE0Myw4ICsxMzUsNyBAQAogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAJdTMyCQlzdGF0dXM7CSAgICAgIC8qIHJlY292ZXJ5IHN0YXR1cyAqLwogCXUzMiBzdGVwOwkgICAgICAgICAgICAgIC8qIGFjdGl2ZSBzdGVwIG9mIHRoaXMgZXJwIGFjdGlvbiAqLwotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7IC8qIGZzZiByZXF1ZXN0IGN1cnJlbnRseSBwZW5kaW5nCi0JCQkJCSBmb3IgdGhpcyBhY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nCQlmc2ZfcmVxX2lkOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogfTsKIApAQCAtMTY3LDI5ICsxNTgsNiBAQAogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKLS8qKiBzdHJ1Y3QgemZjcF9xZGlvIC0gYmFzaWMgUURJTyBkYXRhIHN0cnVjdHVyZQotICogQHJlc3BfcTogcmVzcG9uc2UgcXVldWUKLSAqIEByZXFfcTogcmVxdWVzdCBxdWV1ZQotICogQHN0YXRfbG9jazogbG9jayB0byBwcm90ZWN0IHJlcV9xX3V0aWwgYW5kIHJlcV9xX3RpbWUKLSAqIEByZXFfcV9sb2NrOyBsb2NrIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gcmVxdWVzdCBxdWV1ZQotICogQHJlcV9xX3RpbWU6IHRpbWUgb2YgbGFzdCBmaWxsIGxldmVsIGNoYW5nZQotICogQHJlcV9xX3V0aWw6IHVzZWQgZm9yIGFjY291bnRpbmcKLSAqIEByZXFfcV9mdWxsOiBxdWV1ZSBmdWxsIGluY2lkZW50cwotICogQHJlcV9xX3dxOiB1c2VkIHRvIHdhaXQgZm9yIFNCQUwgYXZhaWxhYmlsaXR5Ci0gKiBAYWRhcHRlcjogYWRhcHRlciB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBRRElPIHN0cnVjdHVyZQotICovCi1zdHJ1Y3QgemZjcF9xZGlvIHsKLQlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlCXJlc3BfcTsKLQlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlCXJlcV9xOwotCXNwaW5sb2NrX3QJCXN0YXRfbG9jazsKLQlzcGlubG9ja190CQlyZXFfcV9sb2NrOwotCXVuc2lnbmVkIGxvbmcgbG9uZwlyZXFfcV90aW1lOwotCXU2NAkJCXJlcV9xX3V0aWw7Ci0JYXRvbWljX3QJCXJlcV9xX2Z1bGw7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJcmVxX3Ffd3E7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlcgkqYWRhcHRlcjsKLX07Ci0KIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgewogCXN0cnVjdCBrcmVmCQlyZWY7CiAJdTY0CQkJcGVlcl93d25uOwkgICAvKiBQMlAgcGVlciBXV05OICovCkBAIC0yMDcsOCArMTc1LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXBvcnRfbGlzdDsJICAgLyogcmVtb3RlIHBvcnQgbGlzdCAqLwogCXJ3bG9ja190CQlwb3J0X2xpc3RfbG9jazsgICAgLyogcG9ydCBsaXN0IGxvY2sgKi8KIAl1bnNpZ25lZCBsb25nCQlyZXFfbm87CQkgICAvKiB1bmlxdWUgRlNGIHJlcSBudW1iZXIgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCSpyZXFfbGlzdDsJICAgLyogbGlzdCBvZiBwZW5kaW5nIHJlcXMgKi8KLQlzcGlubG9ja190CQlyZXFfbGlzdF9sb2NrOwkgICAvKiByZXF1ZXN0IGxpc3QgbG9jayAqLworCXN0cnVjdCB6ZmNwX3JlcWxpc3QJKnJlcV9saXN0OwogCXUzMgkJCWZzZl9yZXFfc2VxX25vOwkgICAvKiBGU0YgY21uZCBzZXEgbnVtYmVyICovCiAJcndsb2NrX3QJCWFib3J0X2xvY2s7ICAgICAgICAvKiBQcm90ZWN0cyBhZ2FpbnN0IFNDU0kKIAkJCQkJCSAgICAgIHN0YWNrIGFib3J0L2NvbW1hbmQKQEAgLTI0MSw3ICsyMDgsNyBAQAogfTsKIAogc3RydWN0IHpmY3BfcG9ydCB7Ci0Jc3RydWN0IGRldmljZSAgICAgICAgICBzeXNmc19kZXZpY2U7ICAgLyogc3lzZnMgZGV2aWNlICovCisJc3RydWN0IGRldmljZSAgICAgICAgICBkZXY7CiAJc3RydWN0IGZjX3Jwb3J0ICAgICAgICAqcnBvcnQ7ICAgICAgICAgLyogcnBvcnQgb2YgZmMgdHJhbnNwb3J0IGNsYXNzICovCiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICBsaXN0OwkgICAgICAgLyogbGlzdCBvZiByZW1vdGUgcG9ydHMgKi8KIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICAgICphZGFwdGVyOyAgICAgICAvKiBhZGFwdGVyIHVzZWQgdG8gYWNjZXNzIHBvcnQgKi8KQEAgLTI2Myw3ICsyMzAsNyBAQAogfTsKIAogc3RydWN0IHpmY3BfdW5pdCB7Ci0Jc3RydWN0IGRldmljZSAgICAgICAgICBzeXNmc19kZXZpY2U7ICAgLyogc3lzZnMgZGV2aWNlICovCisJc3RydWN0IGRldmljZSAgICAgICAgICBkZXY7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICBsaXN0OwkgICAgICAgLyogbGlzdCBvZiBsb2dpY2FsIHVuaXRzICovCiAJc3RydWN0IHpmY3BfcG9ydCAgICAgICAqcG9ydDsJICAgICAgIC8qIHJlbW90ZSBwb3J0IG9mIHVuaXQgKi8KIAlhdG9taWNfdAkgICAgICAgc3RhdHVzOwkgICAgICAgLyogc3RhdHVzIG9mIHRoaXMgbG9naWNhbCB1bml0ICovCkBAIC0yNzcsMzMgKzI0NCwxMSBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgLSBxdWV1ZSByZWxhdGVkIHZhbHVlcyBmb3IgYSByZXF1ZXN0Ci0gKiBAc2JhbF9udW1iZXI6IG51bWJlciBvZiBmcmVlIFNCQUxzCi0gKiBAc2JhbF9maXJzdDogZmlyc3QgU0JBTCBmb3IgdGhpcyByZXF1ZXN0Ci0gKiBAc2JhbF9sYXN0OiBsYXN0IFNCQUwgZm9yIHRoaXMgcmVxdWVzdAotICogQHNiYWxfbGltaXQ6IGxhc3QgcG9zc2libGUgU0JBTCBmb3IgdGhpcyByZXF1ZXN0Ci0gKiBAc2JhbGVfY3VycjogY3VycmVudCBTQkFMRSBhdCBjcmVhdGlvbiBvZiB0aGlzIHJlcXVlc3QKLSAqIEBzYmFsX3Jlc3BvbnNlOiBTQkFMIHVzZWQgaW4gaW50ZXJydXB0Ci0gKiBAcWRpb19vdXRiX3VzYWdlOiB1c2FnZSBvZiBvdXRib3VuZCBxdWV1ZQotICogQHFkaW9faW5iX3VzYWdlOiB1c2FnZSBvZiBpbmJvdW5kIHF1ZXVlCi0gKi8KLXN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSB7Ci0JdTgJCSAgICAgICBzYmFsX251bWJlcjsKLQl1OAkJICAgICAgIHNiYWxfZmlyc3Q7Ci0JdTgJCSAgICAgICBzYmFsX2xhc3Q7Ci0JdTgJCSAgICAgICBzYmFsX2xpbWl0OwotCXU4CQkgICAgICAgc2JhbGVfY3VycjsKLQl1OAkJICAgICAgIHNiYWxfcmVzcG9uc2U7Ci0JdTE2CQkgICAgICAgcWRpb19vdXRiX3VzYWdlOwotCXUxNgkJICAgICAgIHFkaW9faW5iX3VzYWdlOwotfTsKLQotLyoqCiAgKiBzdHJ1Y3QgemZjcF9mc2ZfcmVxIC0gYmFzaWMgRlNGIHJlcXVlc3Qgc3RydWN0dXJlCiAgKiBAbGlzdDogbGlzdCBvZiBGU0YgcmVxdWVzdHMKICAqIEByZXFfaWQ6IHVuaXF1ZSByZXF1ZXN0IElECiAgKiBAYWRhcHRlcjogYWRhcHRlciB0aGlzIHJlcXVlc3QgYmVsb25ncyB0bwotICogQHF1ZXVlX3JlcTogcXVldWUgcmVsYXRlZCB2YWx1ZXMKKyAqIEBxZGlvX3JlcTogcWRpbyBxdWV1ZSByZWxhdGVkIHZhbHVlcwogICogQGNvbXBsZXRpb246IHVzZWQgdG8gc2lnbmFsIHRoZSBjb21wbGV0aW9uIG9mIHRoZSByZXF1ZXN0CiAgKiBAc3RhdHVzOiBzdGF0dXMgb2YgdGhlIHJlcXVlc3QKICAqIEBmc2ZfY29tbWFuZDogRlNGIGNvbW1hbmQgaXNzdWVkCkBAIC0zMjEsNyArMjY2LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJdW5zaWduZWQgbG9uZwkJcmVxX2lkOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIJKmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3BfcXVldWVfcmVxCXF1ZXVlX3JlcTsKKwlzdHJ1Y3QgemZjcF9xZGlvX3JlcQlxZGlvX3JlcTsKIAlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0aW9uOwogCXUzMgkJCXN0YXR1czsKIAl1MzIJCQlmc2ZfY29tbWFuZDsKQEAgLTM1Miw0NSArMjk3LDQgQEAKICNkZWZpbmUgWkZDUF9TRVQgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAogI2RlZmluZSBaRkNQX0NMRUFSICAgICAgICAgICAgICAweDAwMDAwMjAwCiAKLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciByZXF1ZXN0IElEIG1hbmFnZW1lbnQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHpmY3BfcmVxbGlzdF9oYXNoKHVuc2lnbmVkIGxvbmcgcmVxX2lkKQotewotCXJldHVybiByZXFfaWQgJSBSRVFVRVNUX0xJU1RfU0laRTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHpmY3BfcmVxbGlzdF9yZW1vdmUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKLXsKLQlsaXN0X2RlbCgmZnNmX3JlcS0+bGlzdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHpmY3BfZnNmX3JlcSAqCi16ZmNwX3JlcWxpc3RfZmluZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBsb25nIHJlcV9pZCkKLXsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXF1ZXN0OwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlpZHggPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXFfaWQpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxdWVzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0sIGxpc3QpCi0JCWlmIChyZXF1ZXN0LT5yZXFfaWQgPT0gcmVxX2lkKQotCQkJcmV0dXJuIHJlcXVlc3Q7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHpmY3BfZnNmX3JlcSAqCi16ZmNwX3JlcWxpc3RfZmluZF9zYWZlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKLXsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXF1ZXN0OwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IFJFUVVFU1RfTElTVF9TSVpFOyBpZHgrKykgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcXVlc3QsICZhZGFwdGVyLT5yZXFfbGlzdFtpZHhdLCBsaXN0KQotCQkJaWYgKHJlcXVlc3QgPT0gcmVxKQotCQkJCXJldHVybiByZXF1ZXN0OwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQogI2VuZGlmIC8qIFpGQ1BfREVGX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCmluZGV4IGI1MWExMWEuLjBiZTVlN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBFcnJvciBSZWNvdmVyeSBQcm9jZWR1cmVzIChFUlApLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgorI2luY2x1ZGUgInpmY3BfcmVxbGlzdC5oIgogCiAjZGVmaW5lIFpGQ1BfTUFYX0VSUFMgICAgICAgICAgICAgICAgICAgMwogCkBAIC0xNzQsNyArMTc1LDcgQEAKIAogCXN3aXRjaCAobmVlZCkgewogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9VTklUOgotCQlpZiAoIWdldF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSkpCisJCWlmICghZ2V0X2RldmljZSgmdW5pdC0+ZGV2KSkKIAkJCXJldHVybiBOVUxMOwogCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9JTlVTRSwgJnVuaXQtPnN0YXR1cyk7CiAJCWVycF9hY3Rpb24gPSAmdW5pdC0+ZXJwX2FjdGlvbjsKQEAgLTE4NCw3ICsxODUsNyBAQAogCiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlQ6CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlRfRk9SQ0VEOgotCQlpZiAoIWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSkpCisJCWlmICghZ2V0X2RldmljZSgmcG9ydC0+ZGV2KSkKIAkJCXJldHVybiBOVUxMOwogCQl6ZmNwX2VycF9hY3Rpb25fZGlzbWlzc19wb3J0KHBvcnQpOwogCQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9JTlVTRSwgJnBvcnQtPnN0YXR1cyk7CkBAIC00NzgsMjYgKzQ3OSwyNyBAQAogc3RhdGljIHZvaWQgemZjcF9lcnBfc3RyYXRlZ3lfY2hlY2tfZnNmcmVxKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gYWN0LT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAotCWlmICghYWN0LT5mc2ZfcmVxKQorCWlmICghYWN0LT5mc2ZfcmVxX2lkKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwotCWlmICh6ZmNwX3JlcWxpc3RfZmluZF9zYWZlKGFkYXB0ZXIsIGFjdC0+ZnNmX3JlcSkgJiYKLQkgICAgYWN0LT5mc2ZfcmVxLT5lcnBfYWN0aW9uID09IGFjdCkgeworCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX2xpc3QtPmxvY2spOworCXJlcSA9IF96ZmNwX3JlcWxpc3RfZmluZChhZGFwdGVyLT5yZXFfbGlzdCwgYWN0LT5mc2ZfcmVxX2lkKTsKKwlpZiAocmVxICYmIHJlcS0+ZXJwX2FjdGlvbiA9PSBhY3QpIHsKIAkJaWYgKGFjdC0+c3RhdHVzICYgKFpGQ1BfU1RBVFVTX0VSUF9ESVNNSVNTRUQgfAogCQkJCSAgIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkpIHsKLQkJCWFjdC0+ZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7CisJCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEOwogCQkJemZjcF9kYmZfcmVjX2FjdGlvbigiZXJzY2ZfMSIsIGFjdCk7Ci0JCQlhY3QtPmZzZl9yZXEtPmVycF9hY3Rpb24gPSBOVUxMOworCQkJcmVxLT5lcnBfYWN0aW9uID0gTlVMTDsKIAkJfQogCQlpZiAoYWN0LT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpCiAJCQl6ZmNwX2RiZl9yZWNfYWN0aW9uKCJlcnNjZl8yIiwgYWN0KTsKLQkJaWYgKGFjdC0+ZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRCkKLQkJCWFjdC0+ZnNmX3JlcSA9IE5VTEw7CisJCWlmIChyZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQpCisJCQlhY3QtPmZzZl9yZXFfaWQgPSAwOwogCX0gZWxzZQotCQlhY3QtPmZzZl9yZXEgPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKKwkJYWN0LT5mc2ZfcmVxX2lkID0gMDsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+cmVxX2xpc3QtPmxvY2spOwogfQogCiAvKioKQEAgLTExNzksMTkgKzExODEsMTkgQEAKIAlzd2l0Y2ggKGFjdC0+YWN0aW9uKSB7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQ6CiAJCWlmICgocmVzdWx0ID09IFpGQ1BfRVJQX1NVQ0NFRURFRCkgJiYgIXVuaXQtPmRldmljZSkgewotCQkJZ2V0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwkJCWdldF9kZXZpY2UoJnVuaXQtPmRldik7CiAJCQlpZiAoc2NzaV9xdWV1ZV93b3JrKHVuaXQtPnBvcnQtPmFkYXB0ZXItPnNjc2lfaG9zdCwKIAkJCQkJICAgICZ1bml0LT5zY3NpX3dvcmspIDw9IDApCi0JCQkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwkJCQlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCQl9Ci0JCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlRfRk9SQ0VEOgogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9QT1JUOgogCQlpZiAocmVzdWx0ID09IFpGQ1BfRVJQX1NVQ0NFRURFRCkKIAkJCXpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9yZWdpc3Rlcihwb3J0KTsKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fQURBUFRFUjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCmluZGV4IDY2YmRiMzQuLjg3ODZhNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaApAQCAtMjEsNyArMjEsNiBAQAogZXh0ZXJuIHN0cnVjdCB6ZmNwX3BvcnQgKnpmY3BfcG9ydF9lbnF1ZXVlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgdTY0LCB1MzIsCiAJCQkJCSAgIHUzMik7CiBleHRlcm4gc3RydWN0IHpmY3BfdW5pdCAqemZjcF91bml0X2VucXVldWUoc3RydWN0IHpmY3BfcG9ydCAqLCB1NjQpOwotZXh0ZXJuIGludCB6ZmNwX3JlcWxpc3RfaXNlbXB0eShzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgemZjcF9zZ19mcmVlX3RhYmxlKHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQpOwogZXh0ZXJuIGludCB6ZmNwX3NnX3NldHVwX3RhYmxlKHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgemZjcF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICosCkBAIC0xNDQsMTMgKzE0Myw5IEBACiAvKiB6ZmNwX3FkaW8uYyAqLwogZXh0ZXJuIGludCB6ZmNwX3FkaW9fc2V0dXAoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIGV4dGVybiB2b2lkIHpmY3BfcWRpb19kZXN0cm95KHN0cnVjdCB6ZmNwX3FkaW8gKik7Ci1leHRlcm4gaW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX3FkaW8gKiwgc3RydWN0IHpmY3BfcXVldWVfcmVxICopOwotZXh0ZXJuIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50Ci0JKnpmY3BfcWRpb19zYmFsZV9yZXEoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKik7Ci1leHRlcm4gc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQKLQkqemZjcF9xZGlvX3NiYWxlX2N1cnIoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKik7CitleHRlcm4gaW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX3FkaW8gKiwgc3RydWN0IHpmY3BfcWRpb19yZXEgKik7CiBleHRlcm4gaW50IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHN0cnVjdCB6ZmNwX3FkaW8gKiwKLQkJCQkgICBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKiwgdW5zaWduZWQgbG9uZywKKwkJCQkgICBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqLCB1bnNpZ25lZCBsb25nLAogCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQpOwogZXh0ZXJuIGludCB6ZmNwX3FkaW9fb3BlbihzdHJ1Y3QgemZjcF9xZGlvICopOwogZXh0ZXJuIHZvaWQgemZjcF9xZGlvX2Nsb3NlKHN0cnVjdCB6ZmNwX3FkaW8gKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKaW5kZXggMjcxMzk5Zi4uNTIxOTY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBGaWJyZSBDaGFubmVsIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciB0aGUgemZjcCBkZXZpY2UgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOCwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA4LCAyMDEwCiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTMxNiw3ICszMTYsNyBAQAogCiAJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgImZjZ3BuXzMiLCBOVUxMKTsKIG91dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIC8qKgpAQCAtMzI1LDkgKzMyNSw5IEBACiAgKi8KIHZvaWQgemZjcF9mY190cmlnZ2VyX2RpZF9sb29rdXAoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAJaWYgKCFxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsICZwb3J0LT5naWRfcG5fd29yaykpCi0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIC8qKgpAQCAtMzg5LDcgKzM4OSw3IEBACiAJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHBvcnQpOwogIG91dDoKIAlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19QT1JUX0xJTktfVEVTVCwgJnBvcnQtPnN0YXR1cyk7Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCWttZW1fY2FjaGVfZnJlZSh6ZmNwX2RhdGEuYWRpc2NfY2FjaGUsIGFkaXNjKTsKIH0KIApAQCAtNDM2LDcgKzQzNiw3IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgemZjcF9wb3J0LCB0ZXN0X2xpbmtfd29yayk7CiAJaW50IHJldHZhbDsKIAotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfREVMOwogCXpmY3Bfc2NzaV9ycG9ydF93b3JrKCZwb3J0LT5ycG9ydF93b3JrKTsKIApAQCAtNDU1LDcgKzQ1NSw3IEBACiAJemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDAsICJmY2x0d2sxIiwgTlVMTCk7CiAKIG91dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIC8qKgpAQCAtNDY4LDkgKzQ2OCw5IEBACiAgKi8KIHZvaWQgemZjcF9mY190ZXN0X2xpbmsoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAJaWYgKCFxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsICZwb3J0LT50ZXN0X2xpbmtfd29yaykpCi0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZnJlZV9zZ19lbnYoc3RydWN0IHpmY3BfZmNfZ3BuX2Z0ICpncG5fZnQsIGludCBidWZfbnVtKQpAQCAtNjE3LDggKzYxNyw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9ydCwgdG1wLCAmcmVtb3ZlX2xoLCBsaXN0KSB7CiAJCXpmY3BfZXJwX3BvcnRfc2h1dGRvd24ocG9ydCwgMCwgImZjZWdwZjIiLCBOVUxMKTsKLQkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlLAotCQkJCSAgICAgICAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKKwkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+ZGV2LCAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzMxLDcgKzczMCw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlkX2lkID0gcG9ydC0+ZF9pZDsKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAl9IGVsc2UKIAkJZF9pZCA9IG50b2gyNChqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5wb3J0X2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggZThmYjRkOS4uNjUzODc0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEltcGxlbWVudGF0aW9uIG9mIEZTRiBjb21tYW5kcy4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAxMAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0xNCw2ICsxNCw4IEBACiAjaW5jbHVkZSAiemZjcF9leHQuaCIKICNpbmNsdWRlICJ6ZmNwX2ZjLmgiCiAjaW5jbHVkZSAiemZjcF9kYmYuaCIKKyNpbmNsdWRlICJ6ZmNwX3FkaW8uaCIKKyNpbmNsdWRlICJ6ZmNwX3JlcWxpc3QuaCIKIAogc3RhdGljIHZvaWQgemZjcF9mc2ZfcmVxdWVzdF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtMzkzLDcgKzM5NSw3IEBACiAJY2FzZSBGU0ZfUFJPVF9MSU5LX0RPV046CiAJCXpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwocmVxLCAiZnNwc2VfNSIsCiAJCQkJCSAgICAgJnBzcS0+bGlua19kb3duX2luZm8pOwotCQkvKiBGSVhNRTogcmVvcGVuaW5nIGFkYXB0ZXIgbm93PyBiZXR0ZXIgd2FpdCBmb3IgbGluayB1cCAqLworCQkvKiBnbyB0aHJvdWdoIHJlb3BlbiB0byBmbHVzaCBwZW5kaW5nIHJlcXVlc3RzICovCiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJmc3BzZV82IiwgcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfUFJPVF9SRUVTVF9RVUVVRToKQEAgLTQ1NywxNSArNDU5LDEwIEBACiB2b2lkIHpmY3BfZnNmX3JlcV9kaXNtaXNzX2FsbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSwgKnRtcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCUxJU1RfSEVBRChyZW1vdmVfcXVldWUpOwotCXVuc2lnbmVkIGludCBpOwogCiAJQlVHX09OKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApOwotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IFJFUVVFU1RfTElTVF9TSVpFOyBpKyspCi0JCWxpc3Rfc3BsaWNlX2luaXQoJmFkYXB0ZXItPnJlcV9saXN0W2ldLCAmcmVtb3ZlX3F1ZXVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisJemZjcF9yZXFsaXN0X21vdmUoYWRhcHRlci0+cmVxX2xpc3QsICZyZW1vdmVfcXVldWUpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmcmVtb3ZlX3F1ZXVlLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwpAQCAtNDk1LDggKzQ5Miw2IEBACiAJZmNfaG9zdF9wb3J0X2lkKHNob3N0KSA9IG50b2gyNChib3R0b20tPnNfaWQpOwogCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gYm90dG9tLT5mY19saW5rX3NwZWVkOwogCWZjX2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMoc2hvc3QpID0gRkNfQ09TX0NMQVNTMiB8IEZDX0NPU19DTEFTUzM7Ci0JZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhzaG9zdClbMl0gPSAxOyAvKiBGQ1AgKi8KLQlmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KVsyXSA9IDE7IC8qIEZDUCAqLwogCiAJYWRhcHRlci0+aHlkcmFfdmVyc2lvbiA9IGJvdHRvbS0+YWRhcHRlcl90eXBlOwogCWFkYXB0ZXItPnRpbWVyX3RpY2tzID0gYm90dG9tLT50aW1lcl9pbnRlcnZhbDsKQEAgLTYxOSw2ICs2MTQsMTAgQEAKIAkJZmNfaG9zdF9wZXJtYW5lbnRfcG9ydF9uYW1lKHNob3N0KSA9IGZjX2hvc3RfcG9ydF9uYW1lKHNob3N0KTsKIAlmY19ob3N0X21heGZyYW1lX3NpemUoc2hvc3QpID0gYm90dG9tLT5tYXhpbXVtX2ZyYW1lX3NpemU7CiAJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHNob3N0KSA9IGJvdHRvbS0+c3VwcG9ydGVkX3NwZWVkOworCW1lbWNweShmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHNob3N0KSwgYm90dG9tLT5zdXBwb3J0ZWRfZmM0X3R5cGVzLAorCSAgICAgICBGQ19GQzRfTElTVF9TSVpFKTsKKwltZW1jcHkoZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdCksIGJvdHRvbS0+YWN0aXZlX2ZjNF90eXBlcywKKwkgICAgICAgRkNfRkM0X0xJU1RfU0laRSk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKQEAgLTcyNSwxMiArNzI0LDEyIEBACiAJcmVxLT5hZGFwdGVyID0gYWRhcHRlcjsKIAlyZXEtPmZzZl9jb21tYW5kID0gZnNmX2NtZDsKIAlyZXEtPnJlcV9pZCA9IGFkYXB0ZXItPnJlcV9ubzsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsX251bWJlciA9IDE7Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbF9maXJzdCA9IHJlcV9xLT5maXJzdDsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsX2xhc3QgPSByZXFfcS0+Zmlyc3Q7Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbGVfY3VyciA9IDE7CisJcmVxLT5xZGlvX3JlcS5zYmFsX251bWJlciA9IDE7CisJcmVxLT5xZGlvX3JlcS5zYmFsX2ZpcnN0ID0gcmVxX3EtPmZpcnN0OworCXJlcS0+cWRpb19yZXEuc2JhbF9sYXN0ID0gcmVxX3EtPmZpcnN0OworCXJlcS0+cWRpb19yZXEuc2JhbGVfY3VyciA9IDE7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmFkZHIgPSAodm9pZCAqKSByZXEtPnJlcV9pZDsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9DT01NQU5EOwogCkBAIC03NDUsNiArNzQ0LDcgQEAKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCQl9CiAKKwkJcmVxLT5zZXFfbm8gPSBhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKIAkJcmVxLT5xdGNiLT5wcmVmaXgucmVxX3NlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwogCQlyZXEtPnF0Y2ItPnByZWZpeC5yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAkJcmVxLT5xdGNiLT5wcmVmaXgudWxwX2luZm8gPSAyNjsKQEAgLTc1Miw4ICs3NTIsNiBAQAogCQlyZXEtPnF0Y2ItPnByZWZpeC5xdGNiX3ZlcnNpb24gPSBGU0ZfUVRDQl9DVVJSRU5UX1ZFUlNJT047CiAJCXJlcS0+cXRjYi0+aGVhZGVyLnJlcV9oYW5kbGUgPSByZXEtPnJlcV9pZDsKIAkJcmVxLT5xdGNiLT5oZWFkZXIuZnNmX2NvbW1hbmQgPSByZXEtPmZzZl9jb21tYW5kOwotCQlyZXEtPnNlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwotCQlyZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87CiAJCXNiYWxlWzFdLmFkZHIgPSAodm9pZCAqKSByZXEtPnF0Y2I7CiAJCXNiYWxlWzFdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpOwogCX0KQEAgLTc3MCwyNSArNzY4LDE3IEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHJlcS0+YWRhcHRlcjsKIAlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gYWRhcHRlci0+cWRpbzsKLQl1bnNpZ25lZCBsb25nCSAgICAgZmxhZ3M7Ci0JaW50CQkgICAgIGlkeDsKLQlpbnQJCSAgICAgd2l0aF9xdGNiID0gKHJlcS0+cXRjYiAhPSBOVUxMKTsKKwlpbnQgd2l0aF9xdGNiID0gKHJlcS0+cXRjYiAhPSBOVUxMKTsKKwlpbnQgcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKLQkvKiBwdXQgYWxsb2NhdGVkIEZTRiByZXF1ZXN0IGludG8gaGFzaCB0YWJsZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWR4ID0gemZjcF9yZXFsaXN0X2hhc2gocmVxLT5yZXFfaWQpOwotCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwl6ZmNwX3JlcWxpc3RfYWRkKGFkYXB0ZXItPnJlcV9saXN0LCByZXEpOwogCi0JcmVxLT5xdWV1ZV9yZXEucWRpb19vdXRiX3VzYWdlID0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KTsKKwlyZXEtPnFkaW9fcmVxLnFkaW9fb3V0Yl91c2FnZSA9IGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcS5jb3VudCk7CiAJcmVxLT5pc3N1ZWQgPSBnZXRfY2xvY2soKTsKLQlpZiAoemZjcF9xZGlvX3NlbmQocWRpbywgJnJlcS0+cXVldWVfcmVxKSkgeworCWlmICh6ZmNwX3FkaW9fc2VuZChxZGlvLCAmcmVxLT5xZGlvX3JlcSkpIHsKIAkJZGVsX3RpbWVyKCZyZXEtPnRpbWVyKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAkJLyogbG9va3VwIHJlcXVlc3QgYWdhaW4sIGxpc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkICovCi0JCWlmICh6ZmNwX3JlcWxpc3RfZmluZF9zYWZlKGFkYXB0ZXIsIHJlcSkpCi0JCQl6ZmNwX3JlcWxpc3RfcmVtb3ZlKGFkYXB0ZXIsIHJlcSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwkJemZjcF9yZXFsaXN0X2ZpbmRfcm0oYWRhcHRlci0+cmVxX2xpc3QsIHJlcV9pZCk7CiAJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDAsICJmc3JzX18xIiwgcmVxKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtODI2LDkgKzgxNiw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMl0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwotCXJlcS0+cXVldWVfcmVxLnNiYWxlX2N1cnIgPSAyOworCXJlcS0+cWRpb19yZXEuc2JhbGVfY3VyciA9IDI7CiAKIAlzcl9idWYgPSBtZW1wb29sX2FsbG9jKGFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfZGF0YSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFzcl9idWYpIHsKQEAgLTgzNyw3ICs4MjcsNyBAQAogCX0KIAltZW1zZXQoc3JfYnVmLCAwLCBzaXplb2YoKnNyX2J1ZikpOwogCXJlcS0+ZGF0YSA9IHNyX2J1ZjsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGUtPmFkZHIgPSAodm9pZCAqKSBzcl9idWY7CiAJc2JhbGUtPmxlbmd0aCA9IHNpemVvZigqc3JfYnVmKTsKIApAQCAtOTM0LDcgKzkyNCw3IEBACiAJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEKSkpCiAJCWdvdG8gb3V0X2Vycm9yX2ZyZWU7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTEwMjksNyArMTAxOSw3IEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHJlcS0+YWRhcHRlcjsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKGFkYXB0ZXItPnFkaW8sCi0JCQkJCQkJICAgICAgICZyZXEtPnF1ZXVlX3JlcSk7CisJCQkJCQkJICAgICAgICZyZXEtPnFkaW9fcmVxKTsKIAl1MzIgZmVhdCA9IGFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXM7CiAJaW50IGJ5dGVzOwogCkBAIC0xMDQ3LDE1ICsxMDM3LDE1IEBACiAJCXJldHVybiAwOwogCX0KIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cXVldWVfcmVxLAorCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cWRpb19yZXEsCiAJCQkJCVNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwKIAkJCQkJc2dfcmVxLCBtYXhfc2JhbHMpOwogCWlmIChieXRlcyA8PSAwKQogCQlyZXR1cm4gLUVJTzsKIAlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlcV9idWZfbGVuZ3RoID0gYnl0ZXM7Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbGVfY3VyciA9IFpGQ1BfTEFTVF9TQkFMRV9QRVJfU0JBTDsKKwlyZXEtPnFkaW9fcmVxLnNiYWxlX2N1cnIgPSBaRkNQX0xBU1RfU0JBTEVfUEVSX1NCQUw7CiAKLQlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnF1ZXVlX3JlcSwKKwlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnFkaW9fcmVxLAogCQkJCQlTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsCiAJCQkJCXNnX3Jlc3AsIG1heF9zYmFscyk7CiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5yZXNwX2J1Zl9sZW5ndGggPSBieXRlczsKQEAgLTEyNTEsNyArMTI0MSw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xMjYyLDEzICsxMjUyLDEzIEBACiAJCQlGU0ZfRkVBVFVSRV9VUERBVEVfQUxFUlQ7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YV9oYW5kbGVyOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMTI5Myw3ICsxMjgzLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YV9oYW5kbGVyOwpAQCAtMTM0OSwxOSArMTMzOSwxOSBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIAogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9oYW5kbGVyOwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0xMzk4LDcgKzEzODgsNyBAQAogCWlmIChkYXRhKQogCQlyZXEtPmRhdGEgPSBkYXRhOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNDg0LDcgKzE0NzQsNyBAQAogCX0KIAogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0xNTEzLDcgKzE1MDMsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAgICAgICAgIHNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKICAgICAgICAgc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNTIxLDE1ICsxNTExLDE1IEBACiAJaHRvbjI0KHJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZF9pZCwgcG9ydC0+ZF9pZCk7CiAJcmVxLT5kYXRhID0gcG9ydDsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7Ci0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAogCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTE1ODMsNyArMTU3Myw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNTkxLDEzICsxNTgxLDEzIEBACiAJcmVxLT5kYXRhID0gZXJwX2FjdGlvbi0+cG9ydDsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwogCXJlcS0+cXRjYi0+aGVhZGVyLnBvcnRfaGFuZGxlID0gZXJwX2FjdGlvbi0+cG9ydC0+aGFuZGxlOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMTY2MCw3ICsxNjUwLDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE3MTUsNyArMTcwNSw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xODA5LDcgKzE3OTksNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTgxNywxMyArMTgwNywxMyBAQAogCXJlcS0+cXRjYi0+aGVhZGVyLnBvcnRfaGFuZGxlID0gZXJwX2FjdGlvbi0+cG9ydC0+aGFuZGxlOwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfY2xvc2VfcGh5c2ljYWxfcG9ydF9oYW5kbGVyOwotCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7CisJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IHJlcS0+cmVxX2lkOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMTk4Miw3ICsxOTcyLDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogICAgICAgICBzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAgICAgICAgIHNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTk5MSw3ICsxOTgxLDcgQEAKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9vcGVuX3VuaXRfaGFuZGxlcjsKIAlyZXEtPmRhdGEgPSBlcnBfYWN0aW9uLT51bml0OwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAlpZiAoIShhZGFwdGVyLT5jb25uZWN0aW9uX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTlBJVl9NT0RFKSkKIAkJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5vcHRpb24gPSBGU0ZfT1BFTl9MVU5fU1VQUFJFU1NfQk9YSU5HOwpAQCAtMjAwMCw3ICsxOTkwLDcgQEAKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0yMDY4LDcgKzIwNTgsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMjA3NywxMyArMjA2NywxMyBAQAogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2Nsb3NlX3VuaXRfaGFuZGxlcjsKIAlyZXEtPmRhdGEgPSBlcnBfYWN0aW9uLT51bml0OwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0yMTExLDggKzIxMDEsOCBAQAogCWJsa3RyYy5tYWdpYyA9IFpGQ1BfQkxLX0RSVl9EQVRBX01BR0lDOwogCWlmIChyZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUikKIAkJYmxrdHJjLmZsYWdzIHw9IFpGQ1BfQkxLX1JFUV9FUlJPUjsKLQlibGt0cmMuaW5iX3VzYWdlID0gcmVxLT5xdWV1ZV9yZXEucWRpb19pbmJfdXNhZ2U7Ci0JYmxrdHJjLm91dGJfdXNhZ2UgPSByZXEtPnF1ZXVlX3JlcS5xZGlvX291dGJfdXNhZ2U7CisJYmxrdHJjLmluYl91c2FnZSA9IHJlcS0+cWRpb19yZXEucWRpb19pbmJfdXNhZ2U7CisJYmxrdHJjLm91dGJfdXNhZ2UgPSByZXEtPnFkaW9fcmVxLnFkaW9fb3V0Yl91c2FnZTsKIAogCWlmIChyZXEtPmFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9NRUFTVVJFTUVOVF9EQVRBKSB7CiAJCWJsa3RyYy5mbGFncyB8PSBaRkNQX0JMS19MQVRfVkFMSUQ7CkBAIC0yMTY5LDEyICsyMTU5LDcgQEAKIAl6ZmNwX2ZzZl9yZXFfdHJhY2UocmVxLCBzY3BudCk7CiAKIHNraXBfZnNmc3RhdHVzOgotCWlmIChzY3BudC0+cmVzdWx0ICE9IDApCi0JCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJlcnJvIiwgMywgcmVxLT5hZGFwdGVyLT5kYmYsIHNjcG50LCByZXEpOwotCWVsc2UgaWYgKHNjcG50LT5yZXRyaWVzID4gMCkKLQkJemZjcF9kYmZfc2NzaV9yZXN1bHQoInJldHIiLCA0LCByZXEtPmFkYXB0ZXItPmRiZiwgc2NwbnQsIHJlcSk7Ci0JZWxzZQotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgibm9ybSIsIDYsIHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKKwl6ZmNwX2RiZl9zY3NpX3Jlc3VsdChyZXEtPmFkYXB0ZXItPmRiZiwgc2NwbnQsIHJlcSk7CiAKIAlzY3BudC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJKHNjcG50LT5zY3NpX2RvbmUpIChzY3BudCk7CkBAIC0yMjc0LDcgKzIyNTksNyBAQAogCWVsc2UgewogCQl6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfaGFuZGxlcihyZXEpOwogCQlyZXEtPnVuaXQgPSBOVUxMOwotCQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCX0KIH0KIApAQCAtMjMxMiw3ICsyMjk3LDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlnZXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnVuaXQtPmRldik7CiAJcmVxLT51bml0ID0gdW5pdDsKIAlyZXEtPmRhdGEgPSBzY3NpX2NtbmQ7CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF9oYW5kbGVyOwpAQCAtMjM0NiwxMSArMjMzMSwxMSBAQAogCWZjcF9jbW5kID0gKHN0cnVjdCBmY3BfY21uZCAqKSAmcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX2NtbmQ7CiAJemZjcF9mY19zY3NpX3RvX2ZjcChmY3BfY21uZCwgc2NzaV9jbW5kKTsKIAotCXJlYWxfYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xdWV1ZV9yZXEsIHNidHlwZSwKKwlyZWFsX2J5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocWRpbywgJnJlcS0+cWRpb19yZXEsIHNidHlwZSwKIAkJCQkJICAgICBzY3NpX3NnbGlzdChzY3NpX2NtbmQpLAogCQkJCQkgICAgIEZTRl9NQVhfU0JBTFNfUEVSX1JFUSk7CiAJaWYgKHVubGlrZWx5KHJlYWxfYnl0ZXMgPCAwKSkgewotCQlpZiAocmVxLT5xdWV1ZV9yZXEuc2JhbF9udW1iZXIgPj0gRlNGX01BWF9TQkFMU19QRVJfUkVRKSB7CisJCWlmIChyZXEtPnFkaW9fcmVxLnNiYWxfbnVtYmVyID49IEZTRl9NQVhfU0JBTFNfUEVSX1JFUSkgewogCQkJZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJCSJPdmVyc2l6ZSBkYXRhIHBhY2thZ2UsIHVuaXQgMHglMDE2THggIgogCQkJCSJvbiBwb3J0IDB4JTAxNkx4IGNsb3NlZFxuIiwKQEAgLTIzNjksNyArMjM1NCw3IEBACiAJZ290byBvdXQ7CiAKIGZhaWxlZF9zY3NpX2NtbmQ6Ci0JcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAJc2NzaV9jbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIG91dDoKQEAgLTI0MTUsNyArMjQwMCw3IEBACiAJcmVxLT5xdGNiLT5ib3R0b20uaW8uc2VydmljZV9jbGFzcyA9IEZTRl9DTEFTU18zOwogCXJlcS0+cXRjYi0+Ym90dG9tLmlvLmZjcF9jbW5kX2xlbmd0aCA9IEZDUF9DTU5EX0xFTjsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9XUklURTsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTI0NzgsMTQgKzI0NjMsMTQgQEAKIAogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2NvbnRyb2xfZmlsZV9oYW5kbGVyOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBkaXJlY3Rpb247CiAKIAlib3R0b20gPSAmcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydDsKIAlib3R0b20tPm9wZXJhdGlvbl9zdWJ0eXBlID0gRlNGX0NGRENfT1BFUkFUSU9OX1NVQlRZUEU7CiAJYm90dG9tLT5vcHRpb24gPSBmc2ZfY2ZkYy0+b3B0aW9uOwogCi0JYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xdWV1ZV9yZXEsCisJYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xZGlvX3JlcSwKIAkJCQkJZGlyZWN0aW9uLCBmc2ZfY2ZkYy0+c2csCiAJCQkJCUZTRl9NQVhfU0JBTFNfUEVSX1JFUSk7CiAJaWYgKGJ5dGVzICE9IFpGQ1BfQ0ZEQ19NQVhfU0laRSkgewpAQCAtMjUxNiwxNSArMjUwMSwxNCBAQAogCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbCA9IHFkaW8tPnJlc3BfcS5zYmFsW3NiYWxfaWR4XTsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCByZXFfaWQ7CisJdW5zaWduZWQgbG9uZyByZXFfaWQ7CiAJaW50IGlkeDsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgUURJT19NQVhfRUxFTUVOVFNfUEVSX0JVRkZFUjsgaWR4KyspIHsKIAogCQlzYmFsZSA9ICZzYmFsLT5lbGVtZW50W2lkeF07CiAJCXJlcV9pZCA9ICh1bnNpZ25lZCBsb25nKSBzYmFsZS0+YWRkcjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQkJZnNmX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXIsIHJlcV9pZCk7CisJCWZzZl9yZXEgPSB6ZmNwX3JlcWxpc3RfZmluZF9ybShhZGFwdGVyLT5yZXFfbGlzdCwgcmVxX2lkKTsKIAogCQlpZiAoIWZzZl9yZXEpCiAJCQkvKgpAQCAtMjUzNCwxMSArMjUxOCw4IEBACiAJCQlwYW5pYygiZXJyb3I6IHVua25vd24gcmVxX2lkICglbHgpIG9uIGFkYXB0ZXIgJXMuXG4iLAogCQkJICAgICAgcmVxX2lkLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7CiAKLQkJbGlzdF9kZWwoJmZzZl9yZXEtPmxpc3QpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQkJZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKLQkJZnNmX3JlcS0+cXVldWVfcmVxLnFkaW9faW5iX3VzYWdlID0KKwkJZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9yZXNwb25zZSA9IHNiYWxfaWR4OworCQlmc2ZfcmVxLT5xZGlvX3JlcS5xZGlvX2luYl91c2FnZSA9CiAJCQlhdG9taWNfcmVhZCgmcWRpby0+cmVzcF9xLmNvdW50KTsKIAkJemZjcF9mc2ZfcmVxX2NvbXBsZXRlKGZzZl9yZXEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCmluZGV4IDZjNTIyOGIuLjcxYjk3ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgorI2luY2x1ZGUgInpmY3BfcWRpby5oIgogCiAjZGVmaW5lIFFCVUZGX1BFUl9QQUdFCQkoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBxZGlvX2J1ZmZlcikpCiAKQEAgLTI4LDEyICsyOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCi16ZmNwX3FkaW9fc2JhbGUoc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcSwgaW50IHNiYWxfaWR4LCBpbnQgc2JhbGVfaWR4KQotewotCXJldHVybiAmcS0+c2JhbFtzYmFsX2lkeF0tPmVsZW1lbnRbc2JhbGVfaWR4XTsKLX0KLQogc3RhdGljIHZvaWQgemZjcF9xZGlvX2hhbmRsZXJfZXJyb3Ioc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgY2hhciAqaWQpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CkBAIC0xMDYsNyArMTAxLDcgQEAKIAogCWlmICh1bmxpa2VseShyZXR2YWwpKSB7CiAJCWF0b21pY19zZXQoJnF1ZXVlLT5jb3VudCwgY291bnQpOwotCQkvKiBGSVhNRTogUmVjb3ZlciB0aGlzIHdpdGggYW4gYWRhcHRlciByZW9wZW4/ICovCisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHFkaW8tPmFkYXB0ZXIsIDAsICJxZHJwYl8xIiwgTlVMTCk7CiAJfSBlbHNlIHsKIAkJcXVldWUtPmZpcnN0ICs9IGNvdW50OwogCQlxdWV1ZS0+Zmlyc3QgJT0gUURJT19NQVhfQlVGRkVSU19QRVJfUTsKQEAgLTE0NSwzMiArMTQwLDggQEAKIAl6ZmNwX3FkaW9fcmVzcF9wdXRfYmFjayhxZGlvLCBjb3VudCk7CiB9CiAKLS8qKgotICogemZjcF9xZGlvX3NiYWxlX3JlcSAtIHJldHVybiBwdHIgdG8gU0JBTEUgb2YgcmVxX3EgZm9yIGEgc3RydWN0IHpmY3BfZnNmX3JlcQotICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbwotICogQHFfcmVjOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlYwotICogUmV0dXJuczogcG9pbnRlciB0byBxZGlvX2J1ZmZlcl9lbGVtZW50IChTQkFMRSkgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICp6ZmNwX3FkaW9fc2JhbGVfcmVxKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJCQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQotewotCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LCAwKTsKLX0KLQotLyoqCi0gKiB6ZmNwX3FkaW9fc2JhbGVfY3VyciAtIHJldHVybiBjdXJyIFNCQUxFIG9uIHJlcV9xIGZvciBhIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKLSAqIEBmc2ZfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCBmc2ZfcmVxCi0gKiBSZXR1cm5zOiBwb2ludGVyIHRvIHFkaW9fYnVmZmVyX2VsZW1lbnQgKFNCQUxFKSBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9jdXJyKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJCQkgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKLXsKLQlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwKLQkJCSAgICAgICBxX3JlcS0+c2JhbGVfY3Vycik7Ci19Ci0KIHN0YXRpYyB2b2lkIHpmY3BfcWRpb19zYmFsX2xpbWl0KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEsIGludCBtYXhfc2JhbHMpCisJCQkJIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwgaW50IG1heF9zYmFscykKIHsKIAlpbnQgY291bnQgPSBhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpOwogCWNvdW50ID0gbWluKGNvdW50LCBtYXhfc2JhbHMpOwpAQCAtMTc5LDcgKzE1MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCi16ZmNwX3FkaW9fc2JhbF9jaGFpbihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAoremZjcF9xZGlvX3NiYWxfY2hhaW4oc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgc2J0eXBlKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKQEAgLTIxNCw3ICsxODUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgotemZjcF9xZGlvX3NiYWxlX25leHQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKK3pmY3BfcWRpb19zYmFsZV9uZXh0KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwKIAkJICAgICB1bnNpZ25lZCBpbnQgc2J0eXBlKQogewogCWlmIChxX3JlcS0+c2JhbGVfY3VyciA9PSBaRkNQX0xBU1RfU0JBTEVfUEVSX1NCQUwpCkBAIC0yMjQsNyArMTk1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgemZjcF9xZGlvX3VuZG9fc2JhbHMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQkgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKKwkJCQkgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlciAqKnNiYWwgPSBxZGlvLT5yZXFfcS5zYmFsOwogCWludCBmaXJzdCA9IHFfcmVxLT5zYmFsX2ZpcnN0OwpAQCAtMjM1LDcgKzIwNiw3IEBACiB9CiAKIHN0YXRpYyBpbnQgemZjcF9xZGlvX2ZpbGxfc2JhbHMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAorCQkJCXN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwKIAkJCQl1bnNpZ25lZCBpbnQgc2J0eXBlLCB2b2lkICpzdGFydF9hZGRyLAogCQkJCXVuc2lnbmVkIGludCB0b3RhbF9sZW5ndGgpCiB7CkBAIC0yNzEsOCArMjQyLDcgQEAKICAqIEBtYXhfc2JhbHM6IHVwcGVyIGJvdW5kIGZvciBudW1iZXIgb2YgU0JBTHMgdG8gYmUgdXNlZAogICogUmV0dXJuczogbnVtYmVyIG9mIGJ5dGVzLCBvciBlcnJvciAobmVnYXRpdikKICAqLwotaW50IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkgICAgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKK2ludCB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBzYnR5cGUsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCiAJCQkgICAgaW50IG1heF9zYmFscykKIHsKQEAgLTMwNCwxMCArMjc0LDEwIEBACiAvKioKICAqIHpmY3BfcWRpb19zZW5kIC0gc2V0IFBDSSBmbGFnIGluIGZpcnN0IFNCQUxFIGFuZCBzZW5kIHJlcSB0byBRRElPCiAgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCi0gKiBAcV9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcXVldWVfcmVxCisgKiBAcV9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpb19yZXEKICAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgZXJyb3Igb3RoZXJ3aXNlCiAgKi8KLWludCB6ZmNwX3FkaW9fc2VuZChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQoraW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSkKIHsKIAlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcSA9ICZxZGlvLT5yZXFfcTsKIAlpbnQgZmlyc3QgPSBxX3JlcS0+c2JhbF9maXJzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjYTU0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogemZjcCBkZXZpY2UgZHJpdmVyCisgKgorICogSGVhZGVyIGZpbGUgZm9yIHpmY3AgcWRpbyBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMTAKKyAqLworCisjaWZuZGVmIFpGQ1BfUURJT19ICisjZGVmaW5lIFpGQ1BfUURJT19ICisKKyNpbmNsdWRlIDxhc20vcWRpby5oPgorCisvKioKKyAqIHN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgLSBxZGlvIHF1ZXVlIGJ1ZmZlciwgemZjcCBpbmRleCBhbmQgZnJlZSBjb3VudAorICogQHNiYWw6IHFkaW8gYnVmZmVycworICogQGZpcnN0OiBpbmRleCBvZiBuZXh0IGZyZWUgYnVmZmVyIGluIHF1ZXVlCisgKiBAY291bnQ6IG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgaW4gcXVldWUKKyAqLworc3RydWN0IHpmY3BfcWRpb19xdWV1ZSB7CisJc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOworCXU4CQkgICBmaXJzdDsKKwlhdG9taWNfdCAgICAgICAgICAgY291bnQ7Cit9OworCisvKioKKyAqIHN0cnVjdCB6ZmNwX3FkaW8gLSBiYXNpYyBxZGlvIGRhdGEgc3RydWN0dXJlCisgKiBAcmVzcF9xOiByZXNwb25zZSBxdWV1ZQorICogQHJlcV9xOiByZXF1ZXN0IHF1ZXVlCisgKiBAc3RhdF9sb2NrOiBsb2NrIHRvIHByb3RlY3QgcmVxX3FfdXRpbCBhbmQgcmVxX3FfdGltZQorICogQHJlcV9xX2xvY2s6IGxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byByZXF1ZXN0IHF1ZXVlCisgKiBAcmVxX3FfdGltZTogdGltZSBvZiBsYXN0IGZpbGwgbGV2ZWwgY2hhbmdlCisgKiBAcmVxX3FfdXRpbDogdXNlZCBmb3IgYWNjb3VudGluZworICogQHJlcV9xX2Z1bGw6IHF1ZXVlIGZ1bGwgaW5jaWRlbnRzCisgKiBAcmVxX3Ffd3E6IHVzZWQgdG8gd2FpdCBmb3IgU0JBTCBhdmFpbGFiaWxpdHkKKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGlzIHFkaW8gc3RydWN0dXJlCisgKi8KK3N0cnVjdCB6ZmNwX3FkaW8geworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVzcF9xOworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxX3E7CisJc3BpbmxvY2tfdAkJc3RhdF9sb2NrOworCXNwaW5sb2NrX3QJCXJlcV9xX2xvY2s7CisJdW5zaWduZWQgbG9uZyBsb25nCXJlcV9xX3RpbWU7CisJdTY0CQkJcmVxX3FfdXRpbDsKKwlhdG9taWNfdAkJcmVxX3FfZnVsbDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZXFfcV93cTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyCSphZGFwdGVyOworfTsKKworLyoqCisgKiBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAtIHFkaW8gcXVldWUgcmVsYXRlZCB2YWx1ZXMgZm9yIGEgcmVxdWVzdAorICogQHNiYWxfbnVtYmVyOiBudW1iZXIgb2YgZnJlZSBzYmFscworICogQHNiYWxfZmlyc3Q6IGZpcnN0IHNiYWwgZm9yIHRoaXMgcmVxdWVzdAorICogQHNiYWxfbGFzdDogbGFzdCBzYmFsIGZvciB0aGlzIHJlcXVlc3QKKyAqIEBzYmFsX2xpbWl0OiBsYXN0IHBvc3NpYmxlIHNiYWwgZm9yIHRoaXMgcmVxdWVzdAorICogQHNiYWxlX2N1cnI6IGN1cnJlbnQgc2JhbGUgYXQgY3JlYXRpb24gb2YgdGhpcyByZXF1ZXN0CisgKiBAc2JhbF9yZXNwb25zZTogc2JhbCB1c2VkIGluIGludGVycnVwdAorICogQHFkaW9fb3V0Yl91c2FnZTogdXNhZ2Ugb2Ygb3V0Ym91bmQgcXVldWUKKyAqIEBxZGlvX2luYl91c2FnZTogdXNhZ2Ugb2YgaW5ib3VuZCBxdWV1ZQorICovCitzdHJ1Y3QgemZjcF9xZGlvX3JlcSB7CisJdTgJc2JhbF9udW1iZXI7CisJdTgJc2JhbF9maXJzdDsKKwl1OAlzYmFsX2xhc3Q7CisJdTgJc2JhbF9saW1pdDsKKwl1OAlzYmFsZV9jdXJyOworCXU4CXNiYWxfcmVzcG9uc2U7CisJdTE2CXFkaW9fb3V0Yl91c2FnZTsKKwl1MTYJcWRpb19pbmJfdXNhZ2U7Cit9OworCisvKioKKyAqIHpmY3BfcWRpb19zYmFsZSAtIHJldHVybiBwb2ludGVyIHRvIHNiYWxlIGluIHFkaW8gcXVldWUKKyAqIEBxOiBxdWV1ZSB3aGVyZSB0byBmaW5kIHNiYWwKKyAqIEBzYmFsX2lkeDogc2JhbCBpbmRleCBpbiBxdWV1ZQorICogQHNiYWxlX2lkeDogc2JhbGUgaW5kZXggaW4gc2JhbAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKK3pmY3BfcWRpb19zYmFsZShzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpxLCBpbnQgc2JhbF9pZHgsIGludCBzYmFsZV9pZHgpCit7CisJcmV0dXJuICZxLT5zYmFsW3NiYWxfaWR4XS0+ZWxlbWVudFtzYmFsZV9pZHhdOworfQorCisvKioKKyAqIHpmY3BfcWRpb19zYmFsZV9yZXEgLSByZXR1cm4gcG9pbnRlciB0byBzYmFsZSBvbiByZXFfcSBmb3IgYSByZXF1ZXN0CisgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCisgKiBAcV9yZWM6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpb19yZXEKKyAqIFJldHVybnM6IHBvaW50ZXIgdG8gcWRpb19idWZmZXJfZWxlbWVudCAoc2JhbGUpIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKK3pmY3BfcWRpb19zYmFsZV9yZXEoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxKQoreworCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LCAwKTsKK30KKworLyoqCisgKiB6ZmNwX3FkaW9fc2JhbGVfY3VyciAtIHJldHVybiBjdXJyZW50IHNiYWxlIG9uIHJlcV9xIGZvciBhIHJlcXVlc3QKKyAqIEBxZGlvOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW8KKyAqIEBmc2ZfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKKyAqIFJldHVybnM6IHBvaW50ZXIgdG8gcWRpb19idWZmZXJfZWxlbWVudCAoc2JhbGUpIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKK3pmY3BfcWRpb19zYmFsZV9jdXJyKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSkKK3sKKwlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwKKwkJCSAgICAgICBxX3JlcS0+c2JhbGVfY3Vycik7Cit9CisKKyNlbmRpZiAvKiBaRkNQX1FESU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9yZXFsaXN0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3JlcWxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzJkMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9yZXFsaXN0LmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiB6ZmNwIGRldmljZSBkcml2ZXIKKyAqCisgKiBEYXRhIHN0cnVjdHVyZSBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgcGVuZGluZyBGU0YKKyAqIHJlcXVlc3RzLgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOQorICovCisKKyNpZm5kZWYgWkZDUF9SRVFMSVNUX0gKKyNkZWZpbmUgWkZDUF9SRVFMSVNUX0gKKworLyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLworI2RlZmluZSBaRkNQX1JFUV9MSVNUX0JVQ0tFVFMgMTI4CisKKy8qKgorICogc3RydWN0IHpmY3BfcmVxbGlzdCAtIENvbnRhaW5lciBmb3IgcmVxdWVzdCBsaXN0IChyZXFsaXN0KQorICogQGxvY2s6IFNwaW5sb2NrIGZvciBwcm90ZWN0aW5nIHRoZSBoYXNoIGxpc3QKKyAqIEBsaXN0OiBBcnJheSBvZiBoYXNoYnVja2V0cywgZWFjaCBpcyBhIGxpc3Qgb2YgcmVxdWVzdHMgaW4gdGhpcyBidWNrZXQKKyAqLworc3RydWN0IHpmY3BfcmVxbGlzdCB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgYnVja2V0c1taRkNQX1JFUV9MSVNUX0JVQ0tFVFNdOworfTsKKworc3RhdGljIGlubGluZSBpbnQgemZjcF9yZXFsaXN0X2hhc2godW5zaWduZWQgbG9uZyByZXFfaWQpCit7CisJcmV0dXJuIHJlcV9pZCAlIFpGQ1BfUkVRX0xJU1RfQlVDS0VUUzsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfYWxsb2MgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSByZXFsaXN0CisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYXRlZCByZXFsaXN0IG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24KKyAqIGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9yZXFsaXN0ICp6ZmNwX3JlcWxpc3RfYWxsb2Modm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybDsKKworCXJsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpmY3BfcmVxbGlzdCksIEdGUF9LRVJORUwpOworCWlmICghcmwpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2luaXQoJnJsLT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBaRkNQX1JFUV9MSVNUX0JVQ0tFVFM7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJnJsLT5idWNrZXRzW2ldKTsKKworCXJldHVybiBybDsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfaXNlbXB0eSAtIENoZWNrIHdoZXRoZXIgdGhlIHJlcXVlc3QgbGlzdCBlbXB0eQorICogQHJsOiBwb2ludGVyIHRvIHJlcWxpc3QKKyAqCisgKiBSZXR1cm5zOiAxIGlmIGxpc3QgaXMgZW1wdHksIDAgaWYgbm90CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IFpGQ1BfUkVRX0xJU1RfQlVDS0VUUzsgaSsrKQorCQlpZiAoIWxpc3RfZW1wdHkoJnJsLT5idWNrZXRzW2ldKSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9mcmVlIC0gRnJlZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciByZXFsaXN0CisgKiBAcmw6IFRoZSByZXFsaXN0IHdoZXJlIHRvIGZyZWUgbWVtb3J5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3JlcWxpc3RfZnJlZShzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybCkKK3sKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlCVUdfT04oIXpmY3BfcmVxbGlzdF9pc2VtcHR5KHJsKSk7CisKKwlrZnJlZShybCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHpmY3BfZnNmX3JlcSAqCitfemZjcF9yZXFsaXN0X2ZpbmQoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQoreworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWkgPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXFfaWQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmcmwtPmJ1Y2tldHNbaV0sIGxpc3QpCisJCWlmIChyZXEtPnJlcV9pZCA9PSByZXFfaWQpCisJCQlyZXR1cm4gcmVxOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9maW5kIC0gTG9va3VwIEZTRiByZXF1ZXN0IGJ5IGl0cyByZXF1ZXN0IGlkCisgKiBAcmw6IFRoZSByZXFsaXN0IHdoZXJlIHRvIGxvb2t1cCB0aGUgRlNGIHJlcXVlc3QKKyAqIEByZXFfaWQ6IFRoZSByZXF1ZXN0IGlkIHRvIGxvb2sgZm9yCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEZTRiByZXF1ZXN0IHdpdGggdGhlIHNwZWNpZmllZCByZXF1ZXN0IGlkCisgKiBvciBOVUxMIGlmIHRoZXJlIGlzIG5vIGtub3duIEZTRiByZXF1ZXN0IHdpdGggdGhpcyBpZC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKK3pmY3BfcmVxbGlzdF9maW5kKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsLCB1bnNpZ25lZCBsb25nIHJlcV9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZybC0+bG9jaywgZmxhZ3MpOworCXJlcSA9IF96ZmNwX3JlcWxpc3RfZmluZChybCwgcmVxX2lkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlcTsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfZmluZF9ybSAtIExvb2t1cCByZXF1ZXN0IGJ5IGlkIGFuZCByZW1vdmUgaXQgZnJvbSByZXFsaXN0CisgKiBAcmw6IHJlcWxpc3Qgd2hlcmUgdG8gc2VhcmNoIGFuZCByZW1vdmUgZW50cnkKKyAqIEByZXFfaWQ6IFRoZSByZXF1ZXN0IGlkIG9mIHRoZSByZXF1ZXN0IHRvIGxvb2sgZm9yCisgKgorICogVGhpcyBmdW5jdGlvbnMgdHJpZXMgdG8gZmluZCB0aGUgRlNGIHJlcXVlc3Qgd2l0aCB0aGUgc3BlY2lmaWVkCisgKiBpZCBhbmQgdGhlbiByZW1vdmVzIGl0IGZyb20gdGhlIHJlcWxpc3QuIFRoZSByZXFsaXN0IGxvY2sgaXMgaGVsZAorICogZHVyaW5nIGJvdGggc3RlcHMgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBQb2ludGVyIHRvIHRoZSBGU0YgcmVxdWVzdCBpZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBmb3VuZCwKKyAqIE5VTEwgaWYgaXQgaGFzIG5vdCBiZWVuIGZvdW5kLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKgoremZjcF9yZXFsaXN0X2ZpbmRfcm0oc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJsLT5sb2NrLCBmbGFncyk7CisJcmVxID0gX3pmY3BfcmVxbGlzdF9maW5kKHJsLCByZXFfaWQpOworCWlmIChyZXEpCisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJsLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVxOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9hZGQgLSBBZGQgZW50cnkgdG8gcmVxbGlzdAorICogQHJsOiByZXFsaXN0IHdoZXJlIHRvIGFkZCB0aGUgZW50cnkKKyAqIEByZXE6IFRoZSBlbnRyeSB0byBhZGQKKyAqCisgKiBUaGUgcmVxdWVzdCBpZCBhbHdheXMgaW5jcmVhc2VzLiBBcyBhbiBvcHRpbWl6YXRpb24gbmV3IHJlcXVlc3RzCisgKiBhcmUgYWRkZWQgaGVyZSB3aXRoIGxpc3RfYWRkX3RhaWwgYXQgdGhlIGVuZCBvZiB0aGUgYnVja2V0IGxpc3RzCisgKiB3aGlsZSBvbGQgcmVxdWVzdHMgYXJlIGxvb2tlZCB1cCBzdGFydGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICogbGlzdHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3JlcWxpc3RfYWRkKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsLAorCQkJCSAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWkgPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXEtPnJlcV9pZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmwtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZybC0+YnVja2V0c1tpXSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmwtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiB6ZmNwX3JlcWxpc3RfbW92ZSAtIE1vdmUgYWxsIGVudHJpZXMgZnJvbSByZXFsaXN0IHRvIHNpbXBsZSBsaXN0CisgKiBAcmw6IFRoZSB6ZmNwX3JlcWxpc3Qgd2hlcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzCisgKiBAbGlzdDogVGhlIGxpc3Qgd2hlcmUgdG8gbW92ZSBhbGwgZW50cmllcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgemZjcF9yZXFsaXN0X21vdmUoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsCisJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmwtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgWkZDUF9SRVFfTElTVF9CVUNLRVRTOyBpKyspCisJCWxpc3Rfc3BsaWNlX2luaXQoJnJsLT5idWNrZXRzW2ldLCBsaXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybC0+bG9jaywgZmxhZ3MpOworfQorCisjZW5kaWYgLyogWkZDUF9SRVFMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKaW5kZXggOGU2ZmM2OC4uYzNjNDE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogSW50ZXJmYWNlIHRvIExpbnV4IFNDU0kgbWlkbGF5ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAjaW5jbHVkZSAiemZjcF9kYmYuaCIKICNpbmNsdWRlICJ6ZmNwX2ZjLmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9kZXB0aCA9IDMyOwogbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlX2RlcHRoLCBkZWZhdWx0X2RlcHRoLCB1aW50LCAwNjAwKTsKQEAgLTQzLDcgKzQ0LDcgQEAKIHsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQgKikgc2RwbnQtPmhvc3RkYXRhOwogCXVuaXQtPmRldmljZSA9IE5VTEw7Ci0JcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCkBAIC01OSwxMCArNjAsOSBAQAogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPQogCQkoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKKwogCXNldF9ob3N0X2J5dGUoc2NwbnQsIHJlc3VsdCk7Ci0JaWYgKChzY3BudC0+ZGV2aWNlICE9IE5VTEwpICYmIChzY3BudC0+ZGV2aWNlLT5ob3N0ICE9IE5VTEwpKQotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgiZmFpbCIsIDQsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwpOwotCS8qIHJldHVybiBkaXJlY3RseSAqLworCXpmY3BfZGJmX3Njc2lfZmFpbF9zZW5kKGFkYXB0ZXItPmRiZiwgc2NwbnQpOwogCXNjcG50LT5zY3NpX2RvbmUoc2NwbnQpOwogfQogCkBAIC04NiwxOCArODYsMTAgQEAKIAlhZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CiAJdW5pdCA9IHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCi0JQlVHX09OKCFhZGFwdGVyIHx8IChhZGFwdGVyICE9IHVuaXQtPnBvcnQtPmFkYXB0ZXIpKTsKLQlCVUdfT04oIXNjcG50LT5zY3NpX2RvbmUpOwotCi0JaWYgKHVubGlrZWx5KCF1bml0KSkgewotCQl6ZmNwX3Njc2lfY29tbWFuZF9mYWlsKHNjcG50LCBESURfTk9fQ09OTkVDVCk7Ci0JCXJldHVybiAwOwotCX0KLQogCXNjc2lfcmVzdWx0ID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpOwogCWlmICh1bmxpa2VseShzY3NpX3Jlc3VsdCkpIHsKIAkJc2NwbnQtPnJlc3VsdCA9IHNjc2lfcmVzdWx0OwotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgiZmFpbCIsIDQsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwpOworCQl6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZChhZGFwdGVyLT5kYmYsIHNjcG50KTsKIAkJc2NwbnQtPnNjc2lfZG9uZShzY3BudCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE4OSw5ICsxODEsNyBAQAogCS8qIGF2b2lkIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gbGF0ZSBub3JtYWwgY29tcGxldGlvbiBhbmQgYWJvcnQgKi8KIAl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKIAotCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7Ci0Jb2xkX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXIsIG9sZF9yZXFpZCk7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOworCW9sZF9yZXEgPSB6ZmNwX3JlcWxpc3RfZmluZChhZGFwdGVyLT5yZXFfbGlzdCwgb2xkX3JlcWlkKTsKIAlpZiAoIW9sZF9yZXEpIHsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFib3J0X2xvY2ssIGZsYWdzKTsKIAkJemZjcF9kYmZfc2NzaV9hYm9ydCgibHRlMSIsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwsCkBAIC01MjEsNyArNTExLDcgQEAKIAogCWlmIChwb3J0KSB7CiAJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJzY3RycGkxIiwgTlVMTCk7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJfQogfQogCkBAIC01NjMsMjMgKzU1MywyMyBAQAogCiB2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9yZWdpc3RlcihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfQUREOwogCiAJaWYgKCFxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsICZwb3J0LT5ycG9ydF93b3JrKSkKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogdm9pZCB6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfYmxvY2soc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWdldF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX0RFTDsKIAogCWlmIChwb3J0LT5ycG9ydCAmJiBxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsCiAJCQkJICAgICAgJnBvcnQtPnJwb3J0X3dvcmspKQogCQlyZXR1cm47CiAKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIHZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0c19ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQpAQCAtNjA4LDcgKzU5OCw3IEBACiAJCX0KIAl9CiAKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiB9CiAKIApAQCAtNjI2LDcgKzYxNiw3IEBACiAJCQkJIHNjc2lsdW5fdG9faW50KChzdHJ1Y3Qgc2NzaV9sdW4gKikKIAkJCQkJCSZ1bml0LT5mY3BfbHVuKSwgMCk7CiAKLQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiB9CiAKIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSB6ZmNwX3RyYW5zcG9ydF9mdW5jdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKaW5kZXggZjUzOWUwMC4uYTQzMDM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBzeXNmcyBhdHRyaWJ1dGVzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOCwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA4LCAyMDEwCiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTE5LDggKzE5LDcgQEAKIAkJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdCxcCiAJCQkJCQkgICBjaGFyICpidWYpCQkgICAgICAgXAogewkJCQkJCQkJCSAgICAgICBcCi0Jc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLAkgICAgICAgXAotCQkJCQkgICAgICAgc3lzZnNfZGV2aWNlKTsJCSAgICAgICBcCisJc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLCBkZXYpOyAgICBcCiAJCQkJCQkJCQkgICAgICAgXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgX2Zvcm1hdCwgX3ZhbHVlKTsJCQkJICAgICAgIFwKIH0JCQkJCQkJCQkgICAgICAgXApAQCAtODcsOCArODYsNyBAQAogCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKIAkJCQkJCWNoYXIgKmJ1ZikJCSAgICAgICBcCiB7CQkJCQkJCQkJICAgICAgIFwKLQlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsCSAgICAgICBcCi0JCQkJCSAgICAgICBzeXNmc19kZXZpY2UpOwkJICAgICAgIFwKKwlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsIGRldik7ICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCiAJaWYgKGF0b21pY19yZWFkKCZfZmVhdC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKSAgICAgICBcCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOwkJCQkgICAgICAgXApAQCAtOTksMTIgKzk3LDExIEBACiAJCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXAogCQkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVwKIHsJCQkJCQkJCQkgICAgICAgXAotCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwJICAgICAgIFwKLQkJCQkJICAgICAgIHN5c2ZzX2RldmljZSk7CQkgICAgICAgXAorCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwgZGV2KTsgICAgXAogCXVuc2lnbmVkIGxvbmcgdmFsOwkJCQkJCSAgICAgICBcCiAJaW50IHJldHZhbCA9IDA7CQkJCQkJCSAgICAgICBcCiAJCQkJCQkJCQkgICAgICAgXAotCWlmICghKF9mZWF0ICYmIGdldF9kZXZpY2UoJl9mZWF0LT5zeXNmc19kZXZpY2UpKSkJCSAgICAgICBcCisJaWYgKCEoX2ZlYXQgJiYgZ2V0X2RldmljZSgmX2ZlYXQtPmRldikpKQkJCSAgICAgICBcCiAJCXJldHVybiAtRUJVU1k7CQkJCQkJICAgICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCiAJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkgfHwgdmFsICE9IDApIHsJCQkgICAgICAgXApAQCAtMTE4LDcgKzExNSw3IEBACiAJCQkJICBfcmVvcGVuX2lkLCBOVUxMKTsJCQkgICAgICAgXAogCXpmY3BfZXJwX3dhaXQoX2FkYXB0ZXIpOwkJCQkJICAgICAgIFwKIG91dDoJCQkJCQkJCQkgICAgICAgXAotCXB1dF9kZXZpY2UoJl9mZWF0LT5zeXNmc19kZXZpY2UpOwkJCQkgICAgICAgXAorCXB1dF9kZXZpY2UoJl9mZWF0LT5kZXYpOwkJCQkJICAgICAgIFwKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwkJCSAgICAgICBcCiB9CQkJCQkJCQkJICAgICAgIFwKIHN0YXRpYyBaRkNQX0RFVl9BVFRSKF9mZWF0LCBmYWlsZWQsIFNfSVdVU1IgfCBTX0lSVUdPLAkJCSAgICAgICBcCkBAIC0yMjQsMTAgKzIyMSwxMCBAQAogCWxpc3RfZGVsKCZwb3J0LT5saXN0KTsKIAl3cml0ZV91bmxvY2tfaXJxKCZhZGFwdGVyLT5wb3J0X2xpc3RfbG9jayk7CiAKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAKIAl6ZmNwX2VycF9wb3J0X3NodXRkb3duKHBvcnQsIDAsICJzeXByc18xIiwgTlVMTCk7Ci0JemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlLCAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKKwl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYsICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOwogIG91dDoKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChhZGFwdGVyKTsKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwpAQCAtMjU4LDEzICsyNTUsMTIgQEAKIAkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsCi0JCQkJCSAgICAgIHN5c2ZzX2RldmljZSk7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsIGRldik7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAl1NjQgZmNwX2x1bjsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAotCWlmICghKHBvcnQgJiYgZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKSkpCisJaWYgKCEocG9ydCAmJiBnZXRfZGV2aWNlKCZwb3J0LT5kZXYpKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAwLCAodW5zaWduZWQgbG9uZyBsb25nICopICZmY3BfbHVuKSkKQEAgLTI4MCw3ICsyNzYsNyBAQAogCXpmY3BfZXJwX3dhaXQodW5pdC0+cG9ydC0+YWRhcHRlcik7CiAJZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKIG91dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1bml0X2FkZCwgU19JV1VTUiwgTlVMTCwgemZjcF9zeXNmc191bml0X2FkZF9zdG9yZSk7CkBAIC0yODksMTMgKzI4NSwxMiBAQAogCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwKLQkJCQkJICAgICAgc3lzZnNfZGV2aWNlKTsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwgZGV2KTsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCXU2NCBmY3BfbHVuOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCi0JaWYgKCEocG9ydCAmJiBnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpKSkKKwlpZiAoIShwb3J0ICYmIGdldF9kZXZpY2UoJnBvcnQtPmRldikpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKHN0cmljdF9zdHJ0b3VsbChidWYsIDAsICh1bnNpZ25lZCBsb25nIGxvbmcgKikgJmZjcF9sdW4pKQpAQCAtMzE0LDEyICszMDksMTIgQEAKIAlsaXN0X2RlbCgmdW5pdC0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycSgmcG9ydC0+dW5pdF9saXN0X2xvY2spOwogCi0JcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCiAJemZjcF9lcnBfdW5pdF9zaHV0ZG93bih1bml0LCAwLCAic3l1cnNfMSIsIE5VTEwpOwotCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSwgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycyk7CisJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+ZGV2LCAmemZjcF9zeXNmc191bml0X2F0dHJzKTsKIG91dDoKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1bml0X3JlbW92ZSwgU19JV1VTUiwgTlVMTCwgemZjcF9zeXNmc191bml0X3JlbW92ZV9zdG9yZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwppbmRleCA3NWFjMTliLi5mYzJmNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCiAJcGggPSAwOwogCWlmIChkcCkKLQkJcGggPSBkcC0+bm9kZTsKKwkJcGggPSBkcC0+cGhhbmRsZTsKIAogCWRhdGEtPmN1cnJlbnRfbm9kZSA9IGRwOwogCSooKGludCAqKSBvcC0+b3Byb21fYXJyYXkpID0gcGg7CkBAIC0yNTYsNyArMjU2LDcgQEAKIAogCQlkcCA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKIAkJZGF0YS0+Y3VycmVudF9ub2RlID0gZHA7Ci0JCSooKGludCAqKW9wLT5vcHJvbV9hcnJheSkgPSBkcC0+bm9kZTsKKwkJKigoaW50ICopb3AtPm9wcm9tX2FycmF5KSA9IGRwLT5waGFuZGxlOwogCQlvcC0+b3Byb21fc2l6ZSA9IHNpemVvZihpbnQpOwogCQllcnIgPSBjb3B5b3V0KGFyZ3AsIG9wLCBidWZzaXplICsgc2l6ZW9mKGludCkpOwogCkBAIC0yNzMsNyArMjczLDcgQEAKIAogCWRwID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgob3AtPm9wcm9tX2FycmF5KTsKIAlpZiAoZHApCi0JCXBoID0gZHAtPm5vZGU7CisJCXBoID0gZHAtPnBoYW5kbGU7CiAJZGF0YS0+Y3VycmVudF9ub2RlID0gZHA7CiAJKigoaW50ICopb3AtPm9wcm9tX2FycmF5KSA9IHBoOwogCW9wLT5vcHJvbV9zaXplID0gc2l6ZW9mKGludCk7CkBAIC01NDAsNyArNTQwLDcgQEAKIAkJfQogCX0KIAlpZiAoZHApCi0JCW5kID0gZHAtPm5vZGU7CisJCW5kID0gZHAtPnBoYW5kbGU7CiAJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbmQsIHNpemVvZihwaGFuZGxlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC01NzAsNyArNTcwLDcgQEAKIAljYXNlIE9QSU9DR0VUT1BUTk9ERToKIAkJQlVJTERfQlVHX09OKHNpemVvZihwaGFuZGxlKSAhPSBzaXplb2YoaW50KSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmb3B0aW9uc19ub2RlLT5ub2RlLCBzaXplb2YocGhhbmRsZSkpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZvcHRpb25zX25vZGUtPnBoYW5kbGUsIHNpemVvZihwaGFuZGxlKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMgYi9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCmluZGV4IGI4OThkMzguLmU0MGNkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKKysrIGIvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYwpAQCAtMzkyNCw3ICszOTI0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotCWlmICgocF9zY2NiLT5UYXJnSUQgPiBNQVhfU0NTSV9UQVIpIHx8IChwX3NjY2ItPkx1biA+IE1BWF9MVU4pKSB7CisJaWYgKChwX3NjY2ItPlRhcmdJRCA+PSBNQVhfU0NTSV9UQVIpIHx8IChwX3NjY2ItPkx1biA+PSBNQVhfTFVOKSkgewogCQlyZXR1cm47CiAJfQogCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Bfc2NjYi0+VGFyZ0lEXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKaW5kZXggYTkzYTUwNC4uMTM2YjQ5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDYgKzI0LDEwIEBACiAjZGVmaW5lIEZXX1ZFUl9MRU4JMzIKICNkZWZpbmUgTUNDX1FfTEVOCTEyOAogI2RlZmluZSBNQ0NfQ1FfTEVOCTI1NgorI2RlZmluZSBNQVhfTUNDX0NNRAkxNgorLyogQmxhZGVFbmdpbmUgR2VuZXJhdGlvbiBudW1iZXJzICovCisjZGVmaW5lIEJFX0dFTjIgMgorI2RlZmluZSBCRV9HRU4zIDMKIAogc3RydWN0IGJlX2RtYV9tZW0gewogCXZvaWQgKnZhOwpAQCAtNTcsNiArNjEsMTEgQEAKIAlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHEtPmhlYWQgKiBxLT5lbnRyeV9zaXplOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgKnF1ZXVlX2dldF93cmIoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsIHVuc2lnbmVkIGludCB3cmJfbnVtKQoreworCXJldHVybiBxLT5kbWFfbWVtLnZhICsgd3JiX251bSAqIHEtPmVudHJ5X3NpemU7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCAqcXVldWVfdGFpbF9ub2RlKHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxKQogewogCXJldHVybiBxLT5kbWFfbWVtLnZhICsgcS0+dGFpbCAqIHEtPmVudHJ5X3NpemU7CkBAIC0xMDQsMTUgKzExMywxOSBAQAogCXNwaW5sb2NrX3QgbWNjX2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtY2MgY21kcyB0byBCRSBjYXJkICovCiAJc3BpbmxvY2tfdCBtY2NfY3FfbG9jazsKIAotCS8qIE1DQyBBc3luYyBjYWxsYmFjayAqLwotCXZvaWQgKCphc3luY19jYikgKHZvaWQgKmFkYXB0ZXIsIGJvb2wgbGlua191cCk7Ci0Jdm9pZCAqYWRhcHRlcl9jdHh0OworCXdhaXRfcXVldWVfaGVhZF90IG1jY193YWl0W01BWF9NQ0NfQ01EICsgMV07CisJdW5zaWduZWQgaW50IG1jY190YWdbTUFYX01DQ19DTURdOworCXVuc2lnbmVkIGludCBtY2NfbnVtdGFnW01BWF9NQ0NfQ01EICsgMV07CisJdW5zaWduZWQgc2hvcnQgbWNjX2FsbG9jX2luZGV4OworCXVuc2lnbmVkIHNob3J0IG1jY19mcmVlX2luZGV4OworCXVuc2lnbmVkIGludCBtY2NfdGFnX2F2YWlsYWJsZTsKIH07CiAKICNpbmNsdWRlICJiZV9jbWRzLmgiCiAKICNkZWZpbmUgUEFHRV9TSElGVF80SyAxMgogI2RlZmluZSBQQUdFX1NJWkVfNEsgKDEgPDwgUEFHRV9TSElGVF80SykKKyNkZWZpbmUgbWNjX3RpbWVvdXQJCTEyMDAwMCAvKiA1cyB0aW1lb3V0ICovCiAKIC8qIFJldHVybnMgbnVtYmVyIG9mIHBhZ2VzIHNwYW5uZWQgYnkgdGhlIGRhdGEgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGFkZHIgKi8KICNkZWZpbmUgUEFHRVNfNEtfU1BBTk5FRChfYWRkcmVzcywgc2l6ZSkgCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCmluZGV4IGYwMDg3MDguLjY3MDk4NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgImJlX21nbXQuaCIKICNpbmNsdWRlICJiZV9tYWluLmgiCiAKLXN0YXRpYyB2b2lkIGJlX21jY19ub3RpZnkoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQordm9pZCBiZV9tY2Nfbm90aWZ5KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZwaGJhLT5jdHJsLm1jY19vYmoucTsKIAl1MzIgdmFsID0gMDsKQEAgLTI5LDYgKzI5LDUyIEBACiAJaW93cml0ZTMyKHZhbCwgcGhiYS0+ZGJfdmEgKyBEQl9NQ0NRX09GRlNFVCk7CiB9CiAKK3Vuc2lnbmVkIGludCBhbGxvY19tY2NfdGFnKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKKwl1bnNpZ25lZCBpbnQgbnVtID0gMDsKKworbWNjX3RhZ19yZHk6CisJaWYgKHBoYmEtPmN0cmwubWNjX3RhZ19hdmFpbGFibGUpIHsKKwkJdGFnID0gcGhiYS0+Y3RybC5tY2NfdGFnW3BoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4XTsKKwkJcGhiYS0+Y3RybC5tY2NfdGFnW3BoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4XSA9IDA7CisJCXBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddID0gMDsKKwl9IGVsc2UgeworCQl1ZGVsYXkoMTAwKTsKKwkJbnVtKys7CisJCWlmIChudW0gPCBtY2NfdGltZW91dCkKKwkJCWdvdG8gbWNjX3RhZ19yZHk7CisJfQorCWlmICh0YWcpIHsKKwkJcGhiYS0+Y3RybC5tY2NfdGFnX2F2YWlsYWJsZS0tOworCQlpZiAocGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXggPT0gKE1BWF9NQ0NfQ01EIC0gMSkpCisJCQlwaGJhLT5jdHJsLm1jY19hbGxvY19pbmRleCA9IDA7CisJCWVsc2UKKwkJCXBoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4Kys7CisJfQorCXJldHVybiB0YWc7Cit9CisKK3ZvaWQgZnJlZV9tY2NfdGFnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHVuc2lnbmVkIGludCB0YWcpCit7CisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXRhZyA9IHRhZyAmIDB4MDAwMDAwRkY7CisJY3RybC0+bWNjX3RhZ1tjdHJsLT5tY2NfZnJlZV9pbmRleF0gPSB0YWc7CisJaWYgKGN0cmwtPm1jY19mcmVlX2luZGV4ID09IChNQVhfTUNDX0NNRCAtIDEpKQorCQljdHJsLT5tY2NfZnJlZV9pbmRleCA9IDA7CisJZWxzZQorCQljdHJsLT5tY2NfZnJlZV9pbmRleCsrOworCWN0cmwtPm1jY190YWdfYXZhaWxhYmxlKys7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7Cit9CisKK2Jvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpCit7CisJcmV0dXJuICgoKHRyYWlsZXIgPj4gQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX1NISUZUKSAmCisJCSAgQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX01BU0spID09CisJCSAgQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGJlX21jY19jb21wbF9pc19uZXcoc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpCiB7CiAJaWYgKGNvbXBsLT5mbGFncyAhPSAwKSB7CkBAIC02NCwxMiArMTEwLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGlubGluZSBib29sIGlzX2xpbmtfc3RhdGVfZXZ0KHUzMiB0cmFpbGVyKQoraW50IGJlX21jY19jb21wbF9wcm9jZXNzX2lzcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSAgICBzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKIHsKLQlyZXR1cm4gKCgodHJhaWxlciA+PiBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfU0hJRlQpICYKLQkJICBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfTUFTSykgPT0KLQkJICBBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUpOworCXUxNiBjb21wbF9zdGF0dXMsIGV4dGRfc3RhdHVzOworCXVuc2lnbmVkIHNob3J0IHRhZzsKKworCWJlX2R3c19sZV90b19jcHUoY29tcGwsIDQpOworCisJY29tcGxfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19DT01QTF9TSElGVCkgJgorCQkJCQlDUUVfU1RBVFVTX0NPTVBMX01BU0s7CisJLyogVGhlIGN0cmwubWNjX251bXRhZ1t0YWddIGlzIGZpbGxlZCB3aXRoCisJICogWzMxXSA9IHZhbGlkLCBbMzA6MjRdID0gUnN2ZCwgWzIzOjE2XSA9IHdyYiwgWzE1OjhdID0gZXh0ZF9zdGF0dXMsCisJICogWzc6MF0gPSBjb21wbF9zdGF0dXMKKwkgKi8KKwl0YWcgPSAoY29tcGwtPnRhZzAgJiAweDAwMDAwMEZGKTsKKwlleHRkX3N0YXR1cyA9IChjb21wbC0+c3RhdHVzID4+IENRRV9TVEFUVVNfRVhURF9TSElGVCkgJgorCQkJCQlDUUVfU1RBVFVTX0VYVERfTUFTSzsKKworCWN0cmwtPm1jY19udW10YWdbdGFnXSAgPSAweDgwMDAwMDAwOworCWN0cmwtPm1jY19udW10YWdbdGFnXSB8PSAoY29tcGwtPnRhZzAgJiAweDAwRkYwMDAwKTsKKwljdHJsLT5tY2NfbnVtdGFnW3RhZ10gfD0gKGV4dGRfc3RhdHVzICYgMHgwMDAwMDBGRikgPDwgODsKKwljdHJsLT5tY2NfbnVtdGFnW3RhZ10gfD0gKGNvbXBsX3N0YXR1cyAmIDB4MDAwMDAwRkYpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3RybC0+bWNjX3dhaXRbdGFnXSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmVfbWNjX2NvbXBsICpiZV9tY2NfY29tcGxfZ2V0KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKQEAgLTg5LDcgKzE1Myw3IEBACiAJaXNjc2lfc2Vzc2lvbl9mYWlsdXJlKGNsc19zZXNzaW9uLT5kZF9kYXRhLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogfQogCi1zdGF0aWMgdm9pZCBiZWlzY3NpX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCit2b2lkIGJlaXNjc2lfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKIAkJc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgKmV2dCkKIHsKIAlzd2l0Y2ggKGV2dC0+cG9ydF9saW5rX3N0YXR1cykgewpAQCAtOTcsMTMgKzE2MSwxMyBAQAogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJMaW5rIERvd24gb24gUGh5c2ljYWwgUG9ydCAlZCBcbiIsCiAJCQkJCQlldnQtPnBoeXNpY2FsX3BvcnQpOwogCQlwaGJhLT5zdGF0ZSB8PSBCRV9BREFQVEVSX0xJTktfRE9XTjsKKwkJaXNjc2lfaG9zdF9mb3JfZWFjaF9zZXNzaW9uKHBoYmEtPnNob3N0LAorCQkJCQkgICAgYmUyaXNjc2lfZmFpbF9zZXNzaW9uKTsKIAkJYnJlYWs7CiAJY2FzZSBBU1lOQ19FVkVOVF9MSU5LX1VQOgogCQlwaGJhLT5zdGF0ZSA9IEJFX0FEQVBURVJfVVA7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIkxpbmsgVVAgb24gUGh5c2ljYWwgUG9ydCAlZCBcbiIsCiAJCQkJCQlldnQtPnBoeXNpY2FsX3BvcnQpOwotCQlpc2NzaV9ob3N0X2Zvcl9lYWNoX3Nlc3Npb24ocGhiYS0+c2hvc3QsCi0JCQkJCSAgICBiZTJpc2NzaV9mYWlsX3Nlc3Npb24pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJVbmV4cGVjdGVkIEFzeW5jIE5vdGlmaWNhdGlvbiAlZCBvbiIKQEAgLTE2Miw3ICsyMjYsNiBAQAogLyogV2FpdCB0aWxsIG5vIG1vcmUgcGVuZGluZyBtY2MgcmVxdWVzdHMgYXJlIHByZXNlbnQgKi8KIHN0YXRpYyBpbnQgYmVfbWNjX3dhaXRfY29tcGwoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQogewotI2RlZmluZSBtY2NfdGltZW91dAkJMTIwMDAwIC8qIDVzIHRpbWVvdXQgKi8KIAlpbnQgaSwgc3RhdHVzOwogCWZvciAoaSA9IDA7IGkgPCBtY2NfdGltZW91dDsgaSsrKSB7CiAJCXN0YXR1cyA9IGJlaXNjc2lfcHJvY2Vzc19tY2MocGhiYSk7CkBAIC0zNzIsOSArNDM1LDEwIEBACiAKIAlCVUdfT04oYXRvbWljX3JlYWQoJm1jY3EtPnVzZWQpID49IG1jY3EtPmxlbik7CiAJd3JiID0gcXVldWVfaGVhZF9ub2RlKG1jY3EpOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJd3JiLT50YWcwID0gKG1jY3EtPmhlYWQgJiAweDAwMDAwMEZGKSA8PCAxNjsKIAlxdWV1ZV9oZWFkX2luYyhtY2NxKTsKIAlhdG9taWNfaW5jKCZtY2NxLT51c2VkKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCXJldHVybiB3cmI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCmluZGV4IDVkZThhY2IuLjQ5ZmNjNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDI1LDE0ICs0MjUsMjAgQEAKIGludCBiZV9wb2xsX21jYyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKIHVuc2lnbmVkIGNoYXIgbWdtdF9jaGVja19zdXBwb3J0ZWRfZncoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKIAkJCQkgICAgICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwotaW50IGJlX2NtZF9nZXRfbWFjX2FkZHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1OCAqbWFjX2FkZHIpOwotCit1bnNpZ25lZCBpbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwordm9pZCBmcmVlX21jY190YWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdW5zaWduZWQgaW50IHRhZyk7CiAvKklTQ1NJIEZ1bmN0dWlvbnMgKi8KIGludCBiZV9jbWRfZndfaW5pdGlhbGl6ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKIAogc3RydWN0IGJlX21jY193cmIgKndyYl9mcm9tX21ib3goc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtKTsKIHN0cnVjdCBiZV9tY2Nfd3JiICp3cmJfZnJvbV9tY2NxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7CiBpbnQgYmVfbWNjX25vdGlmeV93YWl0KHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7Cit2b2lkIGJlX21jY19ub3RpZnkoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKK3Vuc2lnbmVkIGludCBhbGxvY19tY2NfdGFnKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7Cit2b2lkIGJlaXNjc2lfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgKmV2dCk7CitpbnQgYmVfbWNjX2NvbXBsX3Byb2Nlc3NfaXNyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJICAgIHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKTsKIAogaW50IGJlX21ib3hfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOwogCkBAIC00NDgsNiArNDU0LDggQEAKIGludCBiZV9jbWRfd3JicV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtLAogCQkgICAgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKndyYnEpOwogCitib29sIGlzX2xpbmtfc3RhdGVfZXZ0KHUzMiB0cmFpbGVyKTsKKwogc3RydWN0IGJlX2RlZmF1bHRfcGR1X2NvbnRleHQgewogCXUzMiBkd1s0XTsKIH0gX19wYWNrZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCmluZGV4IGQ1ODdiMDMuLjI5YTNhYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMDEsNiArMTAxLDcgQEAKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2VzcyA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwogCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzcyA9IHNlc3MtPmRkX2RhdGE7CiAKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX3Nlc3Npb25fZGVzdHJveVxuIik7CiAJcGNpX3Bvb2xfZGVzdHJveShiZWlzY3NpX3Nlc3MtPmJoc19wb29sKTsKIAlpc2NzaV9zZXNzaW9uX3RlYXJkb3duKGNsc19zZXNzaW9uKTsKIH0KQEAgLTIyNCw2ICsyMjUsNyBAQAogCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CiAJaW50IGxlbiA9IDA7CiAKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtLCBwYXJhbT0gJWRcbiIsIHBhcmFtKTsKIAliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKIAlpZiAoIWJlaXNjc2lfZXApIHsKIAkJU0VfREVCVUcoREJHX0xWTF8xLApAQCAtMjU0LDYgKzI1Niw3IEBACiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCWludCByZXQ7CiAKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc2V0X3BhcmFtLCBwYXJhbT0gJWRcbiIsIHBhcmFtKTsKIAlyZXQgPSBpc2NzaV9zZXRfcGFyYW0oY2xzX2Nvbm4sIHBhcmFtLCBidWYsIGJ1Zmxlbik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTI3MSw4ICsyNzQsOCBAQAogCQkJY29ubi0+bWF4X3JlY3ZfZGxlbmd0aCA9IDY1NTM2OwogCQlicmVhazsKIAljYXNlIElTQ1NJX1BBUkFNX01BWF9CVVJTVDoKLQkJaWYgKHNlc3Npb24tPmZpcnN0X2J1cnN0ID4gMjYyMTQ0KQotCQkJc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPSAyNjIxNDQ7CisJCWlmIChzZXNzaW9uLT5tYXhfYnVyc3QgPiAyNjIxNDQpCisJCQlzZXNzaW9uLT5tYXhfYnVyc3QgPSAyNjIxNDQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwpAQCAtMjkzLDEyICsyOTYsNDEgQEAKIAkJCSAgIGVudW0gaXNjc2lfaG9zdF9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IChzdHJ1Y3QgYmVpc2NzaV9oYmEgKilpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfbWFjX2FkZHIgKnJlc3A7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwl1bnNpZ25lZCBpbnQgdGFnLCB3cmJfbnVtOwogCWludCBsZW4gPSAwOworCXVuc2lnbmVkIHNob3J0IHN0YXR1cywgZXh0ZF9zdGF0dXM7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY3EgPSAmcGhiYS0+Y3RybC5tY2Nfb2JqLnE7CiAKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2dldF9ob3N0X3BhcmFtLCBwYXJhbT0gJWRcbiIsIHBhcmFtKTsKIAlzd2l0Y2ggKHBhcmFtKSB7CiAJY2FzZSBJU0NTSV9IT1NUX1BBUkFNX0hXQUREUkVTUzoKLQkJYmVfY21kX2dldF9tYWNfYWRkcihwaGJhLCBwaGJhLT5tYWNfYWRkcmVzcyk7Ci0JCWxlbiA9IHN5c2ZzX2Zvcm1hdF9tYWMoYnVmLCBwaGJhLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCQl0YWcgPSBiZV9jbWRfZ2V0X21hY19hZGRyKHBoYmEpOworCQlpZiAoIXRhZykgeworCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiYmVfY21kX2dldF9tYWNfYWRkciBGYWlsZWQgXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlCisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAorCQkJCQkJIHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddKTsKKworCQl3cmJfbnVtID0gKHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMEZGMDAwMCkgPj4gMTY7CisJCWV4dGRfc3RhdHVzID0gKHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMDAwRkYwMCkgPj4gODsKKwkJc3RhdHVzID0gcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwMDAwMEZGOworCQlpZiAoc3RhdHVzIHx8IGV4dGRfc3RhdHVzKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJiZV9jbWRfZ2V0X21hY19hZGRyIEZhaWxlZCIKKwkJCQkJICAgICIgc3RhdHVzID0gJWQgZXh0ZF9zdGF0dXMgPSAlZCBcbiIsCisJCQkJCSAgICBzdGF0dXMsIGV4dGRfc3RhdHVzKTsKKwkJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCXdyYiA9IHF1ZXVlX2dldF93cmIobWNjcSwgd3JiX251bSk7CisJCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisJCQlyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQkJbWVtY3B5KHBoYmEtPm1hY19hZGRyZXNzLCByZXNwLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCQkJbGVuID0gc3lzZnNfZm9ybWF0X21hYyhidWYsIHBoYmEtPm1hY19hZGRyZXNzLAorCQkJCQkgICAgICAgRVRIX0FMRU4pOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBpc2NzaV9ob3N0X2dldF9wYXJhbShzaG9zdCwgcGFyYW0sIGJ1Zik7CkBAIC0zNzgsNiArNDEwLDcgQEAKIAlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKIAlzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyBwYXJhbXM7CiAKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc3RhcnRcbiIpOwogCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMpKTsKIAliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKIAlpZiAoIWJlaXNjc2lfZXApCkBAIC00MjIsOCArNDU1LDE0IEBACiB7CiAJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NxID0gJnBoYmEtPmN0cmwubWNjX29iai5xOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX291dCAqcHRjcGNuY3Rfb3V0OworCXVuc2lnbmVkIHNob3J0IHN0YXR1cywgZXh0ZF9zdGF0dXM7CisJdW5zaWduZWQgaW50IHRhZywgd3JiX251bTsKIAlpbnQgcmV0ID0gLTE7CiAKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX29wZW5fY29ublxuIik7CiAJYmVpc2NzaV9lcC0+ZXBfY2lkID0gYmVpc2NzaV9nZXRfY2lkKHBoYmEpOwogCWlmIChiZWlzY3NpX2VwLT5lcF9jaWQgPT0gMHhGRkZGKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIk5vIGZyZWUgY2lkIGF2YWlsYWJsZVxuIik7CkBAIC00MzEsMTUgKzQ3MCw0NCBAQAogCX0KIAlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX29wZW5fY29ubiwgZXBfY2lkPSVkICIsCiAJCSBiZWlzY3NpX2VwLT5lcF9jaWQpOwotCXBoYmEtPmVwX2FycmF5W2JlaXNjc2lfZXAtPmVwX2NpZF0gPSBlcDsKLQlpZiAoYmVpc2NzaV9lcC0+ZXBfY2lkID4KLQkgICAgKHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQgKyBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCkpIHsKKwlwaGJhLT5lcF9hcnJheVtiZWlzY3NpX2VwLT5lcF9jaWQgLQorCQkgICAgICAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF0gPSBlcDsKKwlpZiAoYmVpc2NzaV9lcC0+ZXBfY2lkID4gKHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQgKworCQkJCSAgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiAyKSkgewogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJGYWlsZWQgaW4gYWxsb2NhdGUgaXNjc2kgY2lkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAliZWlzY3NpX2VwLT5jaWRfdmxkID0gMDsKLQlyZXR1cm4gbWdtdF9vcGVuX2Nvbm5lY3Rpb24ocGhiYSwgZHN0X2FkZHIsIGJlaXNjc2lfZXApOworCXRhZyA9IG1nbXRfb3Blbl9jb25uZWN0aW9uKHBoYmEsIGRzdF9hZGRyLCBiZWlzY3NpX2VwKTsKKwlpZiAoIXRhZykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIm1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uIEZhaWxlZCBmb3IgY2lkPSVkIFxuIiwKKwkJCSBiZWlzY3NpX2VwLT5lcF9jaWQpOworCX0gZWxzZSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCisJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CisJfQorCXdyYl9udW0gPSAocGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwRkYwMDAwKSA+PiAxNjsKKwlleHRkX3N0YXR1cyA9IChwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMEZGMDApID4+IDg7CisJc3RhdHVzID0gcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwMDAwMEZGOworCWlmIChzdGF0dXMgfHwgZXh0ZF9zdGF0dXMpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gRmFpbGVkIgorCQkJCSAgICAiIHN0YXR1cyA9ICVkIGV4dGRfc3RhdHVzID0gJWQgXG4iLAorCQkJCSAgICBzdGF0dXMsIGV4dGRfc3RhdHVzKTsKKwkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJd3JiID0gcXVldWVfZ2V0X3dyYihtY2NxLCB3cmJfbnVtKTsKKwkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOworCisJCXB0Y3BjbmN0X291dCA9IAllbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwkJYmVpc2NzaV9lcC0+ZndfaGFuZGxlID0gcHRjcGNuY3Rfb3V0LT5jb25uZWN0aW9uX2hhbmRsZTsKKwkJYmVpc2NzaV9lcC0+Y2lkX3ZsZCA9IDE7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIm1nbXRfb3Blbl9jb25uZWN0aW9uIFN1Y2Nlc3NcbiIpOworCX0KKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC00NTksMTQgKzUyNywxMiBAQAogICogYmVpc2NzaV9mcmVlX2VwIC0gZnJlZSBlbmRwb2ludAogICogQGVwOglwb2ludGVyIHRvIGlzY3NpIGVuZHBvaW50IHN0cnVjdHVyZQogICovCi1zdGF0aWMgdm9pZCBiZWlzY3NpX2ZyZWVfZXAoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCkKK3N0YXRpYyB2b2lkIGJlaXNjc2lfZnJlZV9lcChzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCkKIHsKLQlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CiAKIAliZWlzY3NpX3B1dF9jaWQocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKIAliZWlzY3NpX2VwLT5waGJhID0gTlVMTDsKLQlpc2NzaV9kZXN0cm95X2VuZHBvaW50KGVwKTsKIH0KIAogLyoqCkBAIC00OTUsOSArNTYxLDkgQEAKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKLQlpZiAocGhiYS0+c3RhdGUpIHsKKwlpZiAocGhiYS0+c3RhdGUgIT0gQkVfQURBUFRFUl9VUCkgewogCQlyZXQgPSAtRUJVU1k7Ci0JCVNFX0RFQlVHKERCR19MVkxfMSwgIlRoZSBBZGFwZXQgc3RhdGUgaXMgTm90IFVQIFxuIik7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIlRoZSBBZGFwdGVyIHN0YXRlIGlzIE5vdCBVUCBcbiIpOwogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIApAQCAtNTA5LDkgKzU3NSw5IEBACiAKIAliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CiAJYmVpc2NzaV9lcC0+cGhiYSA9IHBoYmE7Ci0KKwliZWlzY3NpX2VwLT5vcGVuaXNjc2lfZXAgPSBlcDsKIAlpZiAoYmVpc2NzaV9vcGVuX2Nvbm4oZXAsIE5VTEwsIGRzdF9hZGRyLCBub25fYmxvY2tpbmcpKSB7Ci0JCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBhbGxvY2F0ZSBpc2NzaSBjaWRcbiIpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJGYWlsZWQgaW4gYmVpc2NzaV9vcGVuX2Nvbm4gXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmcmVlX2VwOwogCX0KQEAgLTUxOSw3ICs1ODUsNyBAQAogCXJldHVybiBlcDsKIAogZnJlZV9lcDoKLQliZWlzY3NpX2ZyZWVfZXAoZXApOworCWJlaXNjc2lfZnJlZV9lcChiZWlzY3NpX2VwKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCkBAIC01NDYsMjAgKzYxMiwyMiBAQAogICogQGVwOiBUaGUgaXNjc2kgZW5kcG9pbnQKICAqIEBmbGFnOiBUaGUgdHlwZSBvZiBjb25uZWN0aW9uIGNsb3N1cmUKICAqLwotc3RhdGljIGludCBiZWlzY3NpX2Nsb3NlX2Nvbm4oc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwgaW50IGZsYWcpCitzdGF0aWMgaW50IGJlaXNjc2lfY2xvc2VfY29ubihzdHJ1Y3QgIGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAsIGludCBmbGFnKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJdW5zaWduZWQgaW50IHRhZzsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOwogCi0JaWYgKE1HTVRfU1RBVFVTX1NVQ0NFU1MgIT0KLQkgICAgbWdtdF91cGxvYWRfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQsCi0JCUNPTk5FQ1RJT05fVVBMT0FEX0dSQUNFRlVMKSkgeworCXRhZyA9IG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24ocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkLCBmbGFnKTsKKwlpZiAoIXRhZykgewogCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJ1cGxvYWQgZmFpbGVkIGZvciBjaWQgMHgleCIsCiAJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKIAkJcmV0ID0gLTE7CisJfSBlbHNlIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJIHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddKTsKKwkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOwogCX0KLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU3NCwxOSArNjQyLDE3IEBACiAJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uOwogCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKLQlpbnQgZmxhZyA9IDA7CiAKIAliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CiAJcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7Ci0JU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9lcF9kaXNjb25uZWN0XG4iKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3QgZm9yIGVwX2NpZCA9ICVkXG4iLAorCQkJICAgICBiZWlzY3NpX2VwLT5lcF9jaWQpOwogCiAJaWYgKGJlaXNjc2lfZXAtPmNvbm4pIHsKIAkJYmVpc2NzaV9jb25uID0gYmVpc2NzaV9lcC0+Y29ubjsKIAkJaXNjc2lfc3VzcGVuZF9xdWV1ZShiZWlzY3NpX2Nvbm4tPmNvbm4pOwotCQliZWlzY3NpX2Nsb3NlX2Nvbm4oZXAsIGZsYWcpOwogCX0KIAotCWJlaXNjc2lfZnJlZV9lcChlcCk7CiB9CiAKIC8qKgpAQCAtNjE5LDIzICs2ODUsMzEgQEAKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KHNlc3Npb24tPmNsc19zZXNzaW9uKTsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOwotCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHRhZzsKIAl1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcgPSBDTURfSVNDU0lfU0VTU0lPTl9TQVZFX0NGR19PTl9GTEFTSDsKIAotCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdG9wXG4iKTsKIAliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKIAlpZiAoIWJlaXNjc2lfZXApIHsKIAkJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3AgLCBubyBiZWlzY3NpX2VwXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlzdGF0dXMgPSBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdG9wICBlcF9jaWQgPSAlZFxuIiwKKwkJCSAgICAgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwl0YWcgPSBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLAogCQkJCQkgICAgYmVpc2NzaV9lcC0+ZXBfY2lkLCAxLAogCQkJCQkgICAgc2F2ZWNmZ19mbGFnKTsKLQlpZiAoc3RhdHVzICE9IE1HTVRfU1RBVFVTX1NVQ0NFU1MpIHsKKwlpZiAoIXRhZykgewogCQlTRV9ERUJVRyhEQkdfTFZMXzEsCiAJCQkgIm1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uIEZhaWxlZCBmb3IgY2lkPSVkIFxuIiwKIAkJCSBiZWlzY3NpX2VwLT5lcF9jaWQpOworCX0gZWxzZSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCisJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CisJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKIAl9CisJYmVpc2NzaV9jbG9zZV9jb25uKGJlaXNjc2lfZXAsIENPTk5FQ1RJT05fVVBMT0FEX0dSQUNFRlVMKTsKKwliZWlzY3NpX2ZyZWVfZXAoYmVpc2NzaV9lcCk7CisJaXNjc2lfZGVzdHJveV9lbmRwb2ludChiZWlzY3NpX2VwLT5vcGVuaXNjc2lfZXApOwogCWJlaXNjc2lfdW5iaW5kX2Nvbm5fdG9fY2lkKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCk7CiAJaXNjc2lfY29ubl9zdG9wKGNsc19jb25uLCBmbGFnKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmgKaW5kZXggZjkyZmZjNS4uMWY1MTJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCmluZGV4IDFhNTU3ZmEuLjdjMjI2MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDAsNyArNDAsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCBiZV9pb3BvbGxfYnVkZ2V0ID0gMTA7CiBzdGF0aWMgdW5zaWduZWQgaW50IGJlX21heF9waHlzX3NpemUgPSA2NDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZW5hYmxlX21zaXggPSAxOwotc3RhdGljIHVuc2lnbmVkIGludCByaW5nX21vZGU7CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZWlzY3NpX3BjaV9pZF90YWJsZSk7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0MgIiAiIEJVSUxEX1NUUik7CkBAIC02MiwxMCArNjEsMTAgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLSBQQ0kgRHJpdmVyIG9wZXJhdGlvbnMgYW5kIGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShiZWlzY3NpX3BjaV9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgQkVfREVWSUNFX0lEMSkgfSwKKwl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBCRV9ERVZJQ0VfSUQyKSB9LAogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDEpIH0sCiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMikgfSwKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQzKSB9LAotCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDQpIH0sCiAJeyAwIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYmVpc2NzaV9wY2lfaWRfdGFibGUpOwpAQCAtMTEyLDYgKzExMSw3IEBACiAJbWVtc2V0KHBoYmEsIDAsIHNpemVvZigqcGhiYSkpOwogCXBoYmEtPnNob3N0ID0gc2hvc3Q7CiAJcGhiYS0+cGNpZGV2ID0gcGNpX2Rldl9nZXQocGNpZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBwaGJhKTsKIAogCWlmIChpc2NzaV9ob3N0X2FkZChzaG9zdCwgJnBoYmEtPnBjaWRldi0+ZGV2KSkKIAkJZ290byBmcmVlX2RldmljZXM7CkBAIC0xNDMsNiArMTQzLDcgQEAKIAkJCQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQogewogCXU4IF9faW9tZW0gKmFkZHI7CisJaW50IHBjaWNmZ19yZWc7CiAKIAlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpLAogCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAyKSk7CkBAIC0xNTksMTMgKzE2MCwxOSBAQAogCXBoYmEtPmRiX3ZhID0gYWRkcjsKIAlwaGJhLT5kYl9wYS51LmE2NC5hZGRyZXNzID0gIHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDQpOwogCi0JYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAxKSwKLQkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMSkpOworCWlmIChwaGJhLT5nZW5lcmF0aW9uID09IEJFX0dFTjIpCisJCXBjaWNmZ19yZWcgPSAxOworCWVsc2UKKwkJcGNpY2ZnX3JlZyA9IDA7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIHBjaWNmZ19yZWcpLAorCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBwY2ljZmdfcmVnKSk7CisKIAlpZiAoYWRkciA9PSBOVUxMKQogCQlnb3RvIHBjaV9tYXBfZXJyOwogCXBoYmEtPmN0cmwucGNpY2ZnID0gYWRkcjsKIAlwaGJhLT5wY2lfdmEgPSBhZGRyOwotCXBoYmEtPnBjaV9wYS51LmE2NC5hZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMSk7CisJcGhiYS0+cGNpX3BhLnUuYTY0LmFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCBwY2ljZmdfcmVnKTsKIAlyZXR1cm4gMDsKIAogcGNpX21hcF9lcnI6CkBAIC0yMzAsMjkgKzIzNywyNyBAQAogCiBzdGF0aWMgdm9pZCBiZWlzY3NpX2dldF9wYXJhbXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQogewotCXBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgPSBCRTJfSU9fREVQVEg7Ci0JcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgPSBCRTJfTUFYX1NFU1NJT05TOwotCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgPSBCRTJfQVNZTkNQRFVTOwotCXBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsID0gQkUyX01BWF9JQ0RTIC8gMjsKKwlwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsID0gKHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2RfY291bnQKKwkJCQkgICAgLSAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudAorCQkJCSAgICArIEJFMl9UTUZTCisJCQkJICAgICsgQkUyX05PUE9VVF9SRVEpKTsKKwlwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQ7CisJcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQ7OworCXBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9jb3VudDs7CiAJcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvID0gQkUyX1NHRTsKIAlwaGJhLT5wYXJhbXMuZGVmcGR1X2hkcl9zeiA9IEJFMl9ERUZQRFVfSERSX1NaOwogCXBoYmEtPnBhcmFtcy5kZWZwZHVfZGF0YV9zeiA9IEJFMl9ERUZQRFVfREFUQV9TWjsKIAlwaGJhLT5wYXJhbXMuZXFfdGltZXIgPSA2NDsKIAlwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPQotCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArIEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfQVNZTkNQRFVTKSAvCi0JCQkJCQkJCTUxMikgKyAxKSAqIDUxMjsKKwkgICAgKCgoQkUyX0NNRFNfUEVSX0NYTiAqIDIgKyBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50ICogMgorCQkJCSAgICArIEJFMl9UTUZTKSAvIDUxMikgKyAxKSAqIDUxMjsKIAlwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPSAocGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzIDwgMTAyNCkKIAkJCQk/IDEwMjQgOiBwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXM7CiAJU0VfREVCVUcoREJHX0xWTF84LCAicGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzPSVkIFxuIiwKLQkJIHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyk7CisJCQkgICAgIHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyk7CiAJcGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzID0KLQkgICAgKCgoQkUyX0NNRFNfUEVSX0NYTiAqIDIgKyBCRTJfTE9HT1VUUyArIEJFMl9UTUZTICsgQkUyX0FTWU5DUERVUykgLwotCQkJCQkJCQk1MTIpICsgMSkgKiA1MTI7Ci0JU0VfREVCVUcoREJHX0xWTF84LAotCQkicGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzPSVkIEJFMl9DTURTX1BFUl9DWE49JWQiCi0JCSJCRTJfTE9HT1VUUz0lZCBCRTJfVE1GUz0lZCBCRTJfQVNZTkNQRFVTPSVkIFxuIiwKLQkJcGhiYS0+cGFyYW1zLm51bV9jcV9lbnRyaWVzLCBCRTJfQ01EU19QRVJfQ1hOLAotCQlCRTJfTE9HT1VUUywgQkUyX1RNRlMsIEJFMl9BU1lOQ1BEVVMpOworCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50ICogMgorCQkJCSAgICArIEJFMl9UTUZTKSAvIDUxMikgKyAxKSAqIDUxMjsKIAlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huID0gMjU2OwogfQogCkBAIC00NDMsNyArNDQ4LDcgQEAKIAkJCWlmIChwaGJhLT50b2RvX21jY19jcSkKIAkJCQlxdWV1ZV93b3JrKHBoYmEtPndxLCAmcGhiYS0+d29ya19jcXMpOwogCi0JCWlmICgobnVtX21jY2VxX3Byb2Nlc3NlZCkgJiYgKCFudW1faW9lcV9wcm9jZXNzZWQpKQorCQkJaWYgKChudW1fbWNjZXFfcHJvY2Vzc2VkKSAmJiAoIW51bV9pb2VxX3Byb2Nlc3NlZCkpCiAJCQkJaHdpX3JpbmdfZXFfZGIocGhiYSwgZXEtPmlkLCAwLAogCQkJCQkgICAgICAobnVtX2lvZXFfcHJvY2Vzc2VkICsKIAkJCQkJICAgICAgIG51bV9tY2NlcV9wcm9jZXNzZWQpICwgMSwgMSk7CkBAIC01NjEsNiArNTY2LDcgQEAKIAkJU0VfREVCVUcoREJHX0xWTF8xLCAiSW4gSVNDU0lfT1BfUkVKRUNUXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9MT0dJTl9SU1A6CisJY2FzZSBJU0NTSV9PUF9URVhUX1JTUDoKIAkJdGFzayA9IGNvbm4tPmxvZ2luX3Rhc2s7CiAJCWlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCQlsb2dpbl9oZHIgPSAoc3RydWN0IGlzY3NpX2hkciAqKXBwZHU7CkBAIC02MzEsMjkgKzYzNywyOSBAQAogICogYWxsb2Nfd3JiX2hhbmRsZSAtIFRvIGFsbG9jYXRlIGEgd3JiIGhhbmRsZQogICogQHBoYmE6IFRoZSBoYmEgcG9pbnRlcgogICogQGNpZDogVGhlIGNpZCB0byB1c2UgZm9yIGFsbG9jYXRpb24KLSAqIEBpbmRleDogaW5kZXggYWxsb2NhdGlvbiBhbmQgd3JiIGluZGV4CiAgKgogICogVGhpcyBoYXBwZW5zIHVuZGVyIHNlc3Npb25fbG9jayB1bnRpbCBzdWJtaXNzaW9uIHRvIGNoaXAKICAqLwotc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkLAotCQkJCSAgICBpbnQgaW5kZXgpCitzdHJ1Y3Qgd3JiX2hhbmRsZSAqYWxsb2Nfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIGludCBjaWQpCiB7CiAJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OwogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKLQlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlLCAqcHdyYl9oYW5kbGVfdG1wOwogCiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CiAJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2NpZF07Ci0JaWYgKHB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlKSB7CisJaWYgKHB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlID49IDIpIHsKIAkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VbCiAJCQkJCSAgICBwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4XTsKIAkJcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUtLTsKLQkJcHdyYl9oYW5kbGUtPm54dF93cmJfaW5kZXggPSBwd3JiX2hhbmRsZS0+d3JiX2luZGV4OwogCQlpZiAocHdyYl9jb250ZXh0LT5hbGxvY19pbmRleCA9PQogCQkJCQkJKHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4gLSAxKSkKIAkJCXB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXggPSAwOwogCQllbHNlCiAJCQlwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4Kys7CisJCXB3cmJfaGFuZGxlX3RtcCA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVsKKwkJCQkJCXB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXhdOworCQlwd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCA9IHB3cmJfaGFuZGxlX3RtcC0+d3JiX2luZGV4OwogCX0gZWxzZQogCQlwd3JiX2hhbmRsZSA9IE5VTEw7CiAJcmV0dXJuIHB3cmJfaGFuZGxlOwpAQCAtNjcxLDkgKzY3Nyw3IEBACiBmcmVlX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQsCiAJCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZSkKIHsKLQlpZiAoIXJpbmdfbW9kZSkKLQkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW3B3cmJfY29udGV4dC0+ZnJlZV9pbmRleF0gPQotCQkJCQkgICAgICAgcHdyYl9oYW5kbGU7CisJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW3B3cmJfY29udGV4dC0+ZnJlZV9pbmRleF0gPSBwd3JiX2hhbmRsZTsKIAlwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSsrOwogCWlmIChwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXggPT0gKHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4gLSAxKSkKIAkJcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4ID0gMDsKQEAgLTc5MCw2ICs3OTQsNyBAQAogCQltZW1jcHkodGFzay0+c2MtPnNlbnNlX2J1ZmZlciwgc2Vuc2UsCiAJCSAgICAgICBtaW5fdCh1MTYsIHNlbnNlX2xlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7CiAJfQorCiAJaWYgKGlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5mbGFncyAmIElTQ1NJX0ZMQUdfQ01EX1JFQUQpIHsKIAkJaWYgKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfcmVzX2NudCkgLyAzMl0KIAkJCQkJCQkmIFNPTF9SRVNfQ05UX01BU0spCkBAIC04MTEsNiArODE2LDcgQEAKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGJlaXNjc2lfY29ubi0+Y29ubjsKIAogCWhkciA9IChzdHJ1Y3QgaXNjc2lfbG9nb3V0X3JzcCAqKXRhc2stPmhkcjsKKwloZHItPm9wY29kZSA9IElTQ1NJX09QX0xPR09VVF9SU1A7CiAJaGRyLT50MndhaXQgPSA1OwogCWhkci0+dDJyZXRhaW4gPSAwOwogCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCkBAIC04MjUsNiArODMxLDkgQEAKIAkJCQkJJiBTT0xfRVhQX0NNRF9TTl9NQVNLKSArCiAJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfY21kX3duZCkKIAkJCQkJLyAzMl0gJiBTT0xfQ01EX1dORF9NQVNLKSA+PiAyNCkgLSAxKTsKKwloZHItPmRsZW5ndGhbMF0gPSAwOworCWhkci0+ZGxlbmd0aFsxXSA9IDA7CisJaGRyLT5kbGVuZ3RoWzJdID0gMDsKIAloZHItPmhsZW5ndGggPSAwOwogCWhkci0+aXR0ID0gaW9fdGFzay0+bGliaXNjc2lfaXR0OwogCV9faXNjc2lfY29tcGxldGVfcGR1KGNvbm4sIChzdHJ1Y3QgaXNjc2lfaGRyICopaGRyLCBOVUxMLCAwKTsKQEAgLTgzOSw2ICs4NDgsNyBAQAogCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCiAJaGRyID0gKHN0cnVjdCBpc2NzaV90bV9yc3AgKil0YXNrLT5oZHI7CisJaGRyLT5vcGNvZGUgPSBJU0NTSV9PUF9TQ1NJX1RNRlVOQ19SU1A7CiAJaGRyLT5mbGFncyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9mbGFncykgLyAzMl0KIAkJCQkJJiBTT0xfRkxBR1NfTUFTSykgPj4gMjQpIHwgMHg4MDsKIAloZHItPnJlc3BvbnNlID0gKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfcmVzcCkgLwpAQCAtODU5LDcgKzg2OSw2IEBACiB7CiAJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OwogCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZSA9IE5VTEw7Ci0Jc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlID0gTlVMTDsKIAlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CiAJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2s7CiAJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzazsKQEAgLTg2NywyMiArODc2LDE0IEBACiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7Ci0JaWYgKHJpbmdfbW9kZSkgewotCQlwc2dsX2hhbmRsZSA9IHBoYmEtPnNnbF9obmRsX2FycmF5WygocHNvbC0+Ci0JCQkgICAgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlX3JpbmcsIGljZF9pbmRleCkgLwotCQkJCTMyXSAmIFNPTF9JQ0RfSU5ERVhfTUFTSykgPj4gNildOwotCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbcHNnbF9oYW5kbGUtPmNpZF07Ci0JCXRhc2sgPSBwc2dsX2hhbmRsZS0+dGFzazsKLQkJcHdyYl9oYW5kbGUgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFsoKHBzb2wtPgorCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFsoKHBzb2wtPgogCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0gJgotCQkJCVNPTF9DSURfTUFTSykgPj4gNildOwotCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgorCQkJCVNPTF9DSURfTUFTSykgPj4gNikgLQorCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOworCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkWygocHNvbC0+CiAJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgd3JiX2luZGV4KSAvCiAJCQkJMzJdICYgU09MX1dSQl9JTkRFWF9NQVNLKSA+PiAxNildOwotCQl0YXNrID0gcHdyYl9oYW5kbGUtPnBpb19oYW5kbGU7Ci0JfQorCXRhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKIAogCWlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCXNwaW5fbG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CkBAIC05MjMsMzEgKzkyNCwyMyBAQAogCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOwogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKIAlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKLQlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUgPSBOVUxMOwogCXVuc2lnbmVkIGludCB0eXBlOwogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOwogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwotCWlmIChyaW5nX21vZGUpIHsKLQkJcHNnbF9oYW5kbGUgPSBwaGJhLT5zZ2xfaG5kbF9hcnJheVsoKHBzb2wtPgotCQkJICAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZV9yaW5nLCBpY2RfaW5kZXgpIC8KLQkJCSAgICAgIDMyXSAmIFNPTF9JQ0RfSU5ERVhfTUFTSykgPj4gNildOwotCQl0YXNrID0gcHNnbF9oYW5kbGUtPnRhc2s7Ci0JCXR5cGUgPSBwc2dsX2hhbmRsZS0+dHlwZTsKLQl9IGVsc2UgewotCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+Ci0JCQkJd3JiX2NvbnRleHRbKChwc29sLT5kd1tvZmZzZXRvZgorCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFsoKHBzb2wtPmR3W29mZnNldG9mCiAJCQkJKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0KLQkJCQkmIFNPTF9DSURfTUFTSykgPj4gNildOwotCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgorCQkJCSYgU09MX0NJRF9NQVNLKSA+PiA2KSAtCisJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF07CisJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KIAkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCB3cmJfaW5kZXgpIC8KIAkJCQkzMl0gJiBTT0xfV1JCX0lOREVYX01BU0spID4+IDE2KV07Ci0JCXRhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKLQkJcHdyYiA9IHB3cmJfaGFuZGxlLT5wd3JiOwotCQl0eXBlID0gKHB3cmItPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSkgLyAzMl0gJgotCQkJIFdSQl9UWVBFX01BU0spID4+IDI4OwotCX0KKwl0YXNrID0gcHdyYl9oYW5kbGUtPnBpb19oYW5kbGU7CisJcHdyYiA9IHB3cmJfaGFuZGxlLT5wd3JiOworCXR5cGUgPSAocHdyYi0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlKSAvIDMyXSAmCisJCQkJIFdSQl9UWVBFX01BU0spID4+IDI4OworCiAJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEhXSF9UWVBFX0lPOgpAQCAtOTc4LDE1ICs5NzEsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKLQkJCQkiSW4gaHdpX2NvbXBsZXRlX2NtZCwgdW5rbm93biB0eXBlID0gJWQiCi0JCQkJImljZF9pbmRleCAweCV4IENJRCAweCV4XG4iLCB0eXBlLAotCQkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZV9yaW5nLAotCQkJCWljZF9pbmRleCkgLyAzMl0gJiBTT0xfSUNEX0lOREVYX01BU0spID4+IDYpLAotCQkJCXBzZ2xfaGFuZGxlLT5jaWQpOwotCQllbHNlCi0JCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCiAJCQkJIkluIGh3aV9jb21wbGV0ZV9jbWQsIHVua25vd24gdHlwZSA9ICVkIgogCQkJCSJ3cmJfaW5kZXggMHgleCBDSUQgMHgleFxuIiwgdHlwZSwKIAkJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwKQEAgLTEwNzcsNyArMTA2Miw4IEBACiAKIAlXQVJOX09OKCFwYXN5bmNfaGFuZGxlKTsKIAotCXBhc3luY19oYW5kbGUtPmNyaSA9ICh1bnNpZ25lZCBzaG9ydCliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQ7CisJcGFzeW5jX2hhbmRsZS0+Y3JpID0gKHVuc2lnbmVkIHNob3J0KWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQkJCSAgICAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydDsKIAlwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIgPSBpc19oZWFkZXI7CiAJcGFzeW5jX2hhbmRsZS0+YnVmZmVyX2xlbiA9ICgocGRwZHVfY3FlLT4KIAkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwgZHBsKSAvIDMyXQpAQCAtMTMyNyw5ICsxMzEzLDEwIEBACiAJfQogCiAJc3RhdHVzID0gYmVpc2NzaV9wcm9jZXNzX2FzeW5jX3BkdShiZWlzY3NpX2Nvbm4sIHBoYmEsCi0JCQkJCSAgIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwKLQkJCQkJICAgcGhkciwgaGRyX2xlbiwgcGZpcnN0X2J1ZmZlciwKLQkJCQkJICAgYnVmX2xlbik7CisJCQkJCSAgIChiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgLQorCQkJCQkgICAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCksCisJCQkJCSAgICBwaGRyLCBoZHJfbGVuLCBwZmlyc3RfYnVmZmVyLAorCQkJCQkgICAgYnVmX2xlbik7CiAKIAlpZiAoc3RhdHVzID09IDApCiAJCWh3aV9mcmVlX2FzeW5jX21zZyhwaGJhLCBjcmkpOwpAQCAtMTQyMiw2ICsxNDA5LDQ4IEBACiAJaHdpX3Bvc3RfYXN5bmNfYnVmZmVycyhwaGJhLCBwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIpOwogfQogCitzdGF0aWMgdm9pZCAgYmVpc2NzaV9wcm9jZXNzX21jY19pc3Ioc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NfY3E7CisJc3RydWN0ICBiZV9tY2NfY29tcGwgKm1jY19jb21wbDsKKwl1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZCA9IDA7CisKKwltY2NfY3EgPSAmcGhiYS0+Y3RybC5tY2Nfb2JqLmNxOworCW1jY19jb21wbCA9IHF1ZXVlX3RhaWxfbm9kZShtY2NfY3EpOworCW1jY19jb21wbC0+ZmxhZ3MgPSBsZTMyX3RvX2NwdShtY2NfY29tcGwtPmZsYWdzKTsKKwl3aGlsZSAobWNjX2NvbXBsLT5mbGFncyAmIENRRV9GTEFHU19WQUxJRF9NQVNLKSB7CisKKwkJaWYgKG51bV9wcm9jZXNzZWQgPj0gMzIpIHsKKwkJCWh3aV9yaW5nX2NxX2RiKHBoYmEsIG1jY19jcS0+aWQsCisJCQkJCW51bV9wcm9jZXNzZWQsIDAsIDApOworCQkJbnVtX3Byb2Nlc3NlZCA9IDA7CisJCX0KKwkJaWYgKG1jY19jb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfQVNZTkNfTUFTSykgeworCQkJLyogSW50ZXJwcmV0IGZsYWdzIGFzIGFuIGFzeW5jIHRyYWlsZXIgKi8KKwkJCWlmIChpc19saW5rX3N0YXRlX2V2dChtY2NfY29tcGwtPmZsYWdzKSkKKwkJCQkvKiBJbnRlcnByZXQgY29tcGwgYXMgYSBhc3luYyBsaW5rIGV2dCAqLworCQkJCWJlaXNjc2lfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKHBoYmEsCisJCQkJKHN0cnVjdCBiZV9hc3luY19ldmVudF9saW5rX3N0YXRlICopIG1jY19jb21wbCk7CisJCQllbHNlCisJCQkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJCQkiIFVuc3VwcG9ydGVkIEFzeW5jIEV2ZW50LCBmbGFncyIKKwkJCQkJIiA9IDB4JTA4eCBcbiIsIG1jY19jb21wbC0+ZmxhZ3MpOworCQl9IGVsc2UgaWYgKG1jY19jb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfQ09NUExFVEVEX01BU0spIHsKKwkJCWJlX21jY19jb21wbF9wcm9jZXNzX2lzcigmcGhiYS0+Y3RybCwgbWNjX2NvbXBsKTsKKwkJCWF0b21pY19kZWMoJnBoYmEtPmN0cmwubWNjX29iai5xLnVzZWQpOworCQl9CisKKwkJbWNjX2NvbXBsLT5mbGFncyA9IDA7CisJCXF1ZXVlX3RhaWxfaW5jKG1jY19jcSk7CisJCW1jY19jb21wbCA9IHF1ZXVlX3RhaWxfbm9kZShtY2NfY3EpOworCQltY2NfY29tcGwtPmZsYWdzID0gbGUzMl90b19jcHUobWNjX2NvbXBsLT5mbGFncyk7CisJCW51bV9wcm9jZXNzZWQrKzsKKwl9CisKKwlpZiAobnVtX3Byb2Nlc3NlZCA+IDApCisJCWh3aV9yaW5nX2NxX2RiKHBoYmEsIG1jY19jcS0+aWQsIG51bV9wcm9jZXNzZWQsIDEsIDApOworCit9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmVpc2NzaV9wcm9jZXNzX2NxKHN0cnVjdCBiZV9lcV9vYmogKnBiZV9lcSkKIHsKQEAgLTE0MzEsNyArMTQ2MCw4IEBACiAJdW5zaWduZWQgaW50IG51bV9wcm9jZXNzZWQgPSAwOwogCXVuc2lnbmVkIGludCB0b3RfbnVtcCA9IDA7CiAJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uOwotCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSA9IE5VTEw7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcDsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CiAKIAljcSA9IHBiZV9lcS0+Y3E7CkBAIC0xNDQyLDMyICsxNDcyLDEzIEBACiAJICAgICAgIENRRV9WQUxJRF9NQVNLKSB7CiAJCWJlX2R3c19sZV90b19jcHUoc29sLCBzaXplb2Yoc3RydWN0IHNvbF9jcWUpKTsKIAotCQlpZiAocmluZ19tb2RlKSB7Ci0JCQlwc2dsX2hhbmRsZSA9IHBoYmEtPnNnbF9obmRsX2FycmF5Wygoc29sLT4KLQkJCQkgICAgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlX3JpbmcsCi0JCQkJICAgICAgaWNkX2luZGV4KSAvIDMyXSAmIFNPTF9JQ0RfSU5ERVhfTUFTSykKLQkJCQkgICAgICA+PiA2KV07Ci0JCQliZWlzY3NpX2Nvbm4gPSBwaGJhLT5jb25uX3RhYmxlW3BzZ2xfaGFuZGxlLT5jaWRdOwotCQkJaWYgKCFiZWlzY3NpX2Nvbm4gfHwgIWJlaXNjc2lfY29ubi0+ZXApIHsKLQkJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKLQkJCQkgICAgICJDb25uZWN0aW9uIHRhYmxlIGVtcHR5IGZvciBjaWQgPSAlZFxuIiwKLQkJCQkgICAgICBwc2dsX2hhbmRsZS0+Y2lkKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KKwkJZXAgPSBwaGJhLT5lcF9hcnJheVsodTMyKSAoKHNvbC0+CisJCQkJICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXSAmCisJCQkJICAgU09MX0NJRF9NQVNLKSA+PiA2KSAtCisJCQkJICAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF07CiAKLQkJfSBlbHNlIHsKLQkJCWJlaXNjc2lfY29ubiA9IHBoYmEtPmNvbm5fdGFibGVbKHUzMikgKHNvbC0+Ci0JCQkJIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0gJgotCQkJCSBTT0xfQ0lEX01BU0spID4+IDZdOwotCi0JCQlpZiAoIWJlaXNjc2lfY29ubiB8fCAhYmVpc2NzaV9jb25uLT5lcCkgewotCQkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAotCQkJCSAgICAgIkNvbm5lY3Rpb24gdGFibGUgZW1wdHkgZm9yIGNpZCA9ICVkXG4iLAotCQkJCSAgICAgKHUzMikoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAotCQkJCSAgICAgY2lkKSAvIDMyXSAmIFNPTF9DSURfTUFTSykgPj4gNik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KKwkJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCQliZWlzY3NpX2Nvbm4gPSBiZWlzY3NpX2VwLT5jb25uOwogCiAJCWlmIChudW1fcHJvY2Vzc2VkID49IDMyKSB7CiAJCQlod2lfcmluZ19jcV9kYihwaGJhLCBjcS0+aWQsCkBAIC0xNTExLDIxICsxNTIyLDEzIEBACiAJCWNhc2UgQ01EX0NYTl9LSUxMRURfSVRUX0lOVkFMSUQ6CiAJCWNhc2UgQ01EX0NYTl9LSUxMRURfU0VRX09VVE9GT1JERVI6CiAJCWNhc2UgQ01EX0NYTl9LSUxMRURfSU5WQUxJRF9EQVRBU05fUkNWRDoKLQkJCWlmIChyaW5nX21vZGUpIHsKLQkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCi0JCQkJICJDUSBFcnJvciBub3RpZmljYXRpb24gZm9yIGNtZC4uICIKLQkJCQkgImNvZGUgJWQgY2lkIDB4JXhcbiIsCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLwotCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLCBwc2dsX2hhbmRsZS0+Y2lkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJU0VfREVCVUcoREJHX0xWTF8xLAogCQkJCSAiQ1EgRXJyb3Igbm90aWZpY2F0aW9uIGZvciBjbWQuLiAiCiAJCQkJICJjb2RlICVkIGNpZCAweCV4XG4iLAogCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KIAkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywKIAkJCQkgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCiAJCQkJIDMyXSAmIFNPTF9DSURfTUFTSykpOwotCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVU5TT0xfREFUQV9ESUdFU1RfRVJST1JfTk9USUZZOgogCQkJU0VfREVCVUcoREJHX0xWTF8xLApAQCAtMTU0NywzNyArMTU1MCwyMyBAQAogCQljYXNlIENYTl9LSUxMRURfT1ZFUl9SVU5fUkVTSURVQUw6CiAJCWNhc2UgQ1hOX0tJTExFRF9VTkRFUl9SVU5fUkVTSURVQUw6CiAJCWNhc2UgQ1hOX0tJTExFRF9DTU5EX0RBVEFfTk9UX09OX1NBTUVfQ09OTjoKLQkJCWlmIChyaW5nX21vZGUpIHsKLQkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXQgQ0lEICIKLQkJCQkgIjB4JXguLi5cbiIsCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLwotCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLCBwc2dsX2hhbmRsZS0+Y2lkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IENJRCAiCisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXQgQ0lEICIKIAkJCQkgIjB4JXguLi5cbiIsCiAJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLwogCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAotCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLwotCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spOwotCQkJfQorCQkJCSAoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KKwkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKSk7CiAJCQlpc2NzaV9jb25uX2ZhaWx1cmUoYmVpc2NzaV9jb25uLT5jb25uLAogCQkJCQkgICBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ1hOX0tJTExFRF9SU1RfU0VOVDoKIAkJY2FzZSBDWE5fS0lMTEVEX1JTVF9SQ1ZEOgotCQkJaWYgKHJpbmdfbW9kZSkgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCIKLQkJCQkicmVjZWl2ZWQvc2VudCBvbiBDSUQgMHgleC4uLlxuIiwKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCi0JCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssIHBzZ2xfaGFuZGxlLT5jaWQpOwotCQkJfSBlbHNlIHsKLQkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXQiCisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXQiCiAJCQkJInJlY2VpdmVkL3NlbnQgb24gQ0lEIDB4JXguLi5cbiIsCiAJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLwogCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAotCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLwotCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spOwotCQkJfQorCQkJCSAoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KKwkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKSk7CiAJCQlpc2NzaV9jb25uX2ZhaWx1cmUoYmVpc2NzaV9jb25uLT5jb25uLAogCQkJCQkgICBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCQkJYnJlYWs7CkBAIC0xNTg2LDggKzE1NzUsOCBAQAogCQkJCSAicmVjZWl2ZWQgb24gQ0lEIDB4JXguLi5cbiIsCiAJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLwogCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAotCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLwotCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spOworCQkJCSAoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KKwkJCQkgMzJdICYgQ1FFX0NJRF9NQVNLKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xNjA0LDcgKzE1OTMsNyBAQAogCXJldHVybiB0b3RfbnVtcDsKIH0KIAotc3RhdGljIHZvaWQgYmVpc2NzaV9wcm9jZXNzX2FsbF9jcXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQordm9pZCBiZWlzY3NpX3Byb2Nlc3NfYWxsX2NxcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CkBAIC0xNjI0LDYgKzE2MTMsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKIAkJcGhiYS0+dG9kb19tY2NfY3EgPSAwOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQliZWlzY3NpX3Byb2Nlc3NfbWNjX2lzcihwaGJhKTsKIAl9CiAKIAlpZiAocGhiYS0+dG9kb19jcSkgewpAQCAtMTY2OCw3ICsxNjU4LDggQEAKIAkJCQkgICAgICBpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19oaSk7CiAKIAlsX3NnID0gc2c7Ci0JZm9yIChpbmRleCA9IDA7IChpbmRleCA8IG51bV9zZykgJiYgKGluZGV4IDwgMik7IGluZGV4KyssIHNnX25leHQoc2cpKSB7CisJZm9yIChpbmRleCA9IDA7IChpbmRleCA8IG51bV9zZykgJiYgKGluZGV4IDwgMik7IGluZGV4KyssCisJCQkJCQkJIHNnID0gc2dfbmV4dChzZykpIHsKIAkJaWYgKGluZGV4ID09IDApIHsKIAkJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOwogCQkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKQEAgLTE2NzksMTEgKzE2NzAsNyBAQAogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGVuLCBwd3JiLAogCQkJCQkJCXNnX2xlbik7CiAJCQlzZ2VfbGVuID0gc2dfbGVuOwotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKLQkJCQkJCQkxKTsKIAkJfSBlbHNlIHsKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCi0JCQkJCQkJMCk7CiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9yMnRfb2Zmc2V0LAogCQkJCQkJCXB3cmIsIHNnZV9sZW4pOwogCQkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CkBAIC0xNzA2LDEzICsxNjkzLDI3IEBACiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCiAJCQlpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19sbyk7CiAKLQlpZiAobnVtX3NnID09IDIpCi0JCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2xhc3QsIHB3cmIsIDEpOworCWlmIChudW1fc2cgPT0gMSkgeworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAorCQkJCQkJCQkxKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfbGFzdCwgcHdyYiwKKwkJCQkJCQkJMCk7CisJfSBlbHNlIGlmIChudW1fc2cgPT0gMikgeworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAorCQkJCQkJCQkwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfbGFzdCwgcHdyYiwKKwkJCQkJCQkJMSk7CisJfSBlbHNlIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKKwkJCQkJCQkJMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2xhc3QsIHB3cmIsCisJCQkJCQkJCTApOworCX0KIAlzZyA9IGxfc2c7CiAJcHNnbCsrOwogCXBzZ2wrKzsKIAlvZmZzZXQgPSAwOwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bV9zZzsgaW5kZXgrKywgc2dfbmV4dChzZyksIHBzZ2wrKykgeworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bV9zZzsgaW5kZXgrKywgc2cgPSBzZ19uZXh0KHNnKSwgcHNnbCsrKSB7CiAJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOwogCQlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwKQEAgLTIwNDgsMTAgKzIwNDksOSBAQAogCX0KIAlpZHggPSAwOwogCXB3cmIgPSBtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7Ci0JbnVtX2N4bl93cmIgPQotCSAgICAoKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8gKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSkgKgotCSAgICAgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bik7Ci0KKwludW1fY3huX3dyYiA9IChtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCisJCSAgICAgICgoc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpICoKKwkJCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pKTsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsgaW5kZXggKz0gMikgewogCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbaW5kZXhdOwogCQlpZiAobnVtX2N4bl93cmIpIHsKQEAgLTIwNjQsOSArMjA2NCw5IEBACiAJCX0gZWxzZSB7CiAJCQlpZHgrKzsKIAkJCXB3cmIgPSBtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7Ci0JCQludW1fY3huX3dyYiA9ICgobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLwotCQkJCQkoc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKSAqCi0JCQkJCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOworCQkJbnVtX2N4bl93cmIgPSAobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLworCQkJCSAgICAgICgoc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpICoKKwkJCQkJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikpOwogCQkJZm9yIChqID0gMDsgaiA8IHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47IGorKykgewogCQkJCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2pdOwogCQkJCXB3cmJfaGFuZGxlLT5wd3JiID0gcHdyYjsKQEAgLTIzODMsNyArMjM4Myw3IEBACiAJCQkJCQkgICAgICZwYWRkcik7CiAJCWlmICghY3FfdmFkZHJlc3MpCiAJCQlnb3RvIGNyZWF0ZV9jcV9lcnJvcjsKLQkJcmV0ID0gYmVfZmlsbF9xdWV1ZShjcSwgcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgLyAyLAorCQlyZXQgPSBiZV9maWxsX3F1ZXVlKGNxLCBwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc29sX2NxZSksIGNxX3ZhZGRyZXNzKTsKIAkJaWYgKHJldCkgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKQEAgLTI2MzQsNyArMjYzNCw4IEBACiAJCQkJICAgICAid3JicSBjcmVhdGUgZmFpbGVkLiIpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQotCQlwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpXS5jaWQgPSBwaHdpX2NvbnRleHQtPmJlX3dyYnFbaV0uaWQ7CisJCXBod2lfY3RybHItPndyYl9jb250ZXh0W2kgKiAyXS5jaWQgPSBwaHdpX2NvbnRleHQtPmJlX3dyYnFbaV0uCisJCQkJCQkJCSAgIGlkOwogCX0KIAlrZnJlZShwd3JiX2Fycik7CiAJcmV0dXJuIDA7CkBAIC0yODAzLDE3ICsyODA0LDYgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2ZlYXR1cmVzID09IDB4MSkKLQkJcmluZ19tb2RlID0gMTsKLQllbHNlCi0JCXJpbmdfbW9kZSA9IDA7Ci0Jc3RhdHVzID0gbWdtdF9nZXRfZndfY29uZmlnKGN0cmwsIHBoYmEpOwotCWlmIChzdGF0dXMgIT0gMCkgewotCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAotCQkJICAgICAiRXJyb3IgZ2V0dGluZyBmdyBjb25maWdcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQogCXN0YXR1cyA9IGJlaXNjc2lfY3JlYXRlX2NxcyhwaGJhLCBwaHdpX2NvbnRleHQpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiQ1Egbm90IGNyZWF0ZWRcbiIpOwpAQCAtMjk0MSwxNyArMjkzMSw2IEBACiAJcGhiYS0+aW9fc2dsX2huZGxfYXZibCA9IDA7CiAJcGhiYS0+ZWhfc2dsX2huZGxfYXZibCA9IDA7CiAKLQlpZiAocmluZ19tb2RlKSB7Ci0JCXBoYmEtPnNnbF9obmRsX2FycmF5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUgKikgKgotCQkJCQkgICAgICBwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCwKLQkJCQkJCSBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwaGJhLT5zZ2xfaG5kbF9hcnJheSkgewotCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKLQkJCSAgICAgIk1lbSBBbGxvYyBGYWlsZWQuIEZhaWxpbmcgdG8gbG9hZFxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQogCW1lbV9kZXNjcl9zZ2xoID0gcGhiYS0+aW5pdF9tZW07CiAJbWVtX2Rlc2NyX3NnbGggKz0gSFdJX01FTV9TR0xIOwogCWlmICgxID09IG1lbV9kZXNjcl9zZ2xoLT5udW1fZWxlbWVudHMpIHsKQEAgLTI5NTksOCArMjkzOCw2IEBACiAJCQkJCQkgcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCwKIAkJCQkJCSBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKSB7Ci0JCQlpZiAocmluZ19tb2RlKQotCQkJCWtmcmVlKHBoYmEtPnNnbF9obmRsX2FycmF5KTsKIAkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCiAJCQkJICAgICAiTWVtIEFsbG9jIEZhaWxlZC4gRmFpbGluZyB0byBsb2FkXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMzAzMiw3ICszMDA5LDcgQEAKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwZnJhZywgMCk7CiAJCQlwZnJhZyArPSBwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW87CiAJCQlwc2dsX2hhbmRsZS0+c2dsX2luZGV4ID0KLQkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsgYXJyX2luZGV4Kys7CisJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydCArIGFycl9pbmRleCsrOwogCQl9CiAJCWlkeCsrOwogCX0KQEAgLTMwNDcsNyArMzAyNCw3IEBACiB7CiAJaW50IGksIG5ld19jaWQ7CiAKLQlwaGJhLT5jaWRfYXJyYXkgPSBrbWFsbG9jKHNpemVvZih2b2lkICopICogcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwsCisJcGhiYS0+Y2lkX2FycmF5ID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSAqIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsLAogCQkJCSAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwaGJhLT5jaWRfYXJyYXkpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKQEAgLTMwNTUsNyArMzAzMiw3IEBACiAJCQkgICAgICJoYmFfc2V0dXBfY2lkX3RibHNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcGhiYS0+ZXBfYXJyYXkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKikgKgorCXBoYmEtPmVwX2FycmF5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX2VuZHBvaW50ICopICoKIAkJCQkgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiAyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBoYmEtPmVwX2FycmF5KSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCkBAIC0zMDY0LDcgKzMwNDEsNyBAQAogCQlrZnJlZShwaGJhLT5jaWRfYXJyYXkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbmV3X2NpZCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2Rfc3RhcnQ7CisJbmV3X2NpZCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQ7CiAJZm9yIChpID0gMDsgaSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpKyspIHsKIAkJcGhiYS0+Y2lkX2FycmF5W2ldID0gbmV3X2NpZDsKIAkJbmV3X2NpZCArPSAyOwpAQCAtMzE0NSw4ICszMTIyLDYgQEAKIAlpZiAoaGJhX3NldHVwX2NpZF90YmxzKHBoYmEpKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCiAJCQkgICAgICJGYWlsZWQgaW4gaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWtmcmVlKHBoYmEtPnNnbF9obmRsX2FycmF5KTsKIAkJa2ZyZWUocGhiYS0+aW9fc2dsX2huZGxfYmFzZSk7CiAJCWtmcmVlKHBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpOwogCQlnb3RvIGRvX2NsZWFudXBfY3RybHI7CkBAIC0zMTY2LDYgKzMxNDEsNyBAQAogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcTsKIAlzdHJ1Y3QgYmVfZXFfZW50cnkgKmVxZSA9IE5VTEw7CiAJaW50IGksIGVxX21zaXg7CisJdW5zaWduZWQgaW50IG51bV9wcm9jZXNzZWQ7CiAKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKIAlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CkBAIC0zMTc3LDEzICszMTUzLDE3IEBACiAJZm9yIChpID0gMDsgaSA8IChwaGJhLT5udW1fY3B1cyArIGVxX21zaXgpOyBpKyspIHsKIAkJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcVtpXS5xOwogCQllcWUgPSBxdWV1ZV90YWlsX25vZGUoZXEpOwotCisJCW51bV9wcm9jZXNzZWQgPSAwOwogCQl3aGlsZSAoZXFlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQpIC8gMzJdCiAJCQkJCSYgRVFFX1ZBTElEX01BU0spIHsKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkLCBlcWUsIDApOwogCQkJcXVldWVfdGFpbF9pbmMoZXEpOwogCQkJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKwkJCW51bV9wcm9jZXNzZWQrKzsKIAkJfQorCisJCWlmIChudW1fcHJvY2Vzc2VkKQorCQkJaHdpX3JpbmdfZXFfZGIocGhiYSwgZXEtPmlkLCAxLAludW1fcHJvY2Vzc2VkLCAxLCAxKTsKIAl9CiB9CiAKQEAgLTMxOTUsMTAgKzMxNzUsOSBAQAogCWlmIChtZ210X3N0YXR1cykKIAkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCiAJCQkgICAgICJtZ210X2VwZndfY2xlYW51cCBGQUlMRUQgXG4iKTsKLQlod2lfY2xlYW51cChwaGJhKTsKKwogCWh3aV9wdXJnZV9lcShwaGJhKTsKLQlpZiAocmluZ19tb2RlKQotCQlrZnJlZShwaGJhLT5zZ2xfaG5kbF9hcnJheSk7CisJaHdpX2NsZWFudXAocGhiYSk7CiAJa2ZyZWUocGhiYS0+aW9fc2dsX2huZGxfYmFzZSk7CiAJa2ZyZWUocGhiYS0+ZWhfc2dsX2huZGxfYmFzZSk7CiAJa2ZyZWUocGhiYS0+Y2lkX2FycmF5KTsKQEAgLTMyMTksNyArMzE5OCw4IEBACiAJICogV2UgY2FuIGFsd2F5cyB1c2UgMCBoZXJlIGJlY2F1c2UgaXQgaXMgcmVzZXJ2ZWQgYnkgbGliaXNjc2kgZm9yCiAJICogbG9naW4vc3RhcnR1cCByZWxhdGVkIHRhc2tzLgogCSAqLwotCXB3cmJfaGFuZGxlID0gYWxsb2Nfd3JiX2hhbmRsZShwaGJhLCBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQsIDApOworCXB3cmJfaGFuZGxlID0gYWxsb2Nfd3JiX2hhbmRsZShwaGJhLCAoYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCQkgICAgICAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCkpOwogCXB3cmIgPSAoc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgKilwd3JiX2hhbmRsZS0+cHdyYjsKIAltZW1zZXQocHdyYiwgMCwgc2l6ZW9mKCpwd3JiKSk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLApAQCAtMzI4Myw4ICszMjYzLDcgQEAKIAliZV9kd3NfbGVfdG9fY3B1KHB3cmIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYikpOwogCiAJZG9vcmJlbGwgfD0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7Ci0JaWYgKCFyaW5nX21vZGUpCi0JCWRvb3JiZWxsIHw9IChwd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykKKwlkb29yYmVsbCB8PSAocHdyYl9oYW5kbGUtPndyYl9pbmRleCAmIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spCiAJCQkgICAgIDw8IERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOwogCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOwogCkBAIC0zMzI4LDggKzMzMDcsOSBAQAogCWlvX3Rhc2stPmJoc19wYS51LmE2NC5hZGRyZXNzID0gcGFkZHI7CiAJaW9fdGFzay0+bGliaXNjc2lfaXR0ID0gKGl0dF90KXRhc2stPml0dDsKIAlpb190YXNrLT5wd3JiX2hhbmRsZSA9IGFsbG9jX3dyYl9oYW5kbGUocGhiYSwKLQkJCQkJCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwKLQkJCQkJCXRhc2stPml0dCk7CisJCQkJCQliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgLQorCQkJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydAorCQkJCQkJKTsKIAlpb190YXNrLT5jb25uID0gYmVpc2NzaV9jb25uOwogCiAJdGFzay0+aGRyID0gKHN0cnVjdCBpc2NzaV9oZHIgKikmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyOwpAQCAtMzM0Myw3ICszMzIzLDcgQEAKIAkJCWdvdG8gZnJlZV9obmRsczsKIAl9IGVsc2UgewogCQlpb190YXNrLT5zY3NpX2NtbmQgPSBOVUxMOwotCQlpZiAoKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09IElTQ1NJX09QX0xPR0lOKSB7CisJCWlmICgob3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09IElTQ1NJX09QX0xPR0lOKSB7CiAJCQlpZiAoIWJlaXNjc2lfY29ubi0+bG9naW5faW5fcHJvZ3Jlc3MpIHsKIAkJCQlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOwogCQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlID0gKHN0cnVjdCBzZ2xfaGFuZGxlICopCkBAIC0zMzcwLDIxICszMzUwLDE2IEBACiAJaXR0ID0gKGl0dF90KSBjcHVfdG9fYmUzMigoKHVuc2lnbmVkIGludClpb190YXNrLT5wd3JiX2hhbmRsZS0+CiAJCQkJIHdyYl9pbmRleCA8PCAxNikgfCAodW5zaWduZWQgaW50KQogCQkJCShpb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4KSk7Ci0JaWYgKHJpbmdfbW9kZSkgewotCQlwaGJhLT5zZ2xfaG5kbF9hcnJheVtpb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4IC0KLQkJCQkgICAgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdID0KLQkJCQkgICAgIGlvX3Rhc2stPnBzZ2xfaGFuZGxlOwotCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dGFzayA9IHRhc2s7Ci0JCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5jaWQgPSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQ7Ci0JfSBlbHNlCi0JCWlvX3Rhc2stPnB3cmJfaGFuZGxlLT5waW9faGFuZGxlID0gdGFzazsKKwlpb190YXNrLT5wd3JiX2hhbmRsZS0+cGlvX2hhbmRsZSA9IHRhc2s7CiAKIAlpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuaXR0ID0gaXR0OwogCXJldHVybiAwOwogCiBmcmVlX2huZGxzOgogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwotCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWRdOworCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFsKKwkJCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKIAlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBpb190YXNrLT5wd3JiX2hhbmRsZSk7CiAJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOwogCXBjaV9wb29sX2ZyZWUoYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCwgaW9fdGFzay0+Y21kX2JocywKQEAgLTM0MDQsNyArMzM3OSw4IEBACiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwogCiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7Ci0JcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2JlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZF07CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2JlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZAorCQkJLSBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKIAlpZiAoaW9fdGFzay0+cHdyYl9oYW5kbGUpIHsKIAkJZnJlZV93cmJfaGFuZGxlKHBoYmEsIHB3cmJfY29udGV4dCwgaW9fdGFzay0+cHdyYl9oYW5kbGUpOwogCQlpb190YXNrLT5wd3JiX2hhbmRsZSA9IE5VTEw7CkBAIC0zNDYwLDE4ICszNDM2LDEyIEBACiAJCQkgICAgICBJU0NTSV9PUENPREVfU0NTSV9EQVRBX09VVCk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBmaW5hbF9iaXQsCiAJCQkgICAgICAmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsIDEpOwotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBJTklfV1JfQ01EOwotCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBJTklfV1JfQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBJTklfV1JfQ01EKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMSk7CiAJfSBlbHNlIHsKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSU5JX1JEX0NNRDsKLQkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgSU5JX1JEX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJICAgICAgSU5JX1JEX0NNRCk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDApOwogCX0KIAltZW1jcHkoJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LgpAQCAtMzQ5Niw4ICszNDY2LDcgQEAKIAliZV9kd3NfbGVfdG9fY3B1KHB3cmIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CiAKIAlkb29yYmVsbCB8PSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgJiBEQl9XUkJfUE9TVF9DSURfTUFTSzsKLQlpZiAoIXJpbmdfbW9kZSkKLQkJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgorCWRvb3JiZWxsIHw9IChpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYKIAkJICAgICBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLKSA8PCBEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVDsKIAlkb29yYmVsbCB8PSAxIDw8IERCX0RFRl9QRFVfTlVNX1BPU1RFRF9TSElGVDsKIApAQCAtMzUxOSw0OSArMzQ4OCw0NiBAQAogCXVuc2lnbmVkIGludCBkb29yYmVsbCA9IDA7CiAJdW5zaWduZWQgaW50IGksIGNpZDsKIAlzdHJ1Y3QgaXNjc2lfdGFzayAqYWJvcnRlZF90YXNrOworCXVuc2lnbmVkIGludCB0YWc7CiAKIAljaWQgPSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQ7CiAJcHdyYiA9IGlvX3Rhc2stPnB3cmJfaGFuZGxlLT5wd3JiOworCW1lbXNldChwd3JiLCAwLCBzaXplb2YoKnB3cmIpKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLAogCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5jbWRzbikpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB3cmJfaWR4LCBwd3JiLAogCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dsX2ljZF9pZHgsIHB3cmIsCiAJCSAgICAgIGlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgpOwotCiAJc3dpdGNoICh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSB7CiAJY2FzZSBJU0NTSV9PUF9MT0dJTjoKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gVEdUX0RNX0NNRDsKLQkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgVEdUX0RNX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJICAgICAgVEdUX0RNX0NNRCk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGNtZHNuX2l0dCwgcHdyYiwgMSk7CiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfTk9PUF9PVVQ6Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IElOSV9SRF9DTUQ7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJICAgICAgSU5JX1JEX0NNRCk7CisJCWlmICh0YXNrLT5oZHItPnR0dCA9PSBJU0NTSV9SRVNFUlZFRF9UQUcpCisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CiAJCWVsc2UKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJCSAgICAgIElOSV9SRF9DTUQpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDEpOwogCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX1RFWFQ6Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IElOSV9XUl9DTUQ7Ci0JCWVsc2UKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJCSAgICAgIElOSV9XUl9DTUQpOwotCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBUR1RfRE1fQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOwogCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX1NDU0lfVE1GVU5DOgogCQlzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAkJaSA9ICgoc3RydWN0IGlzY3NpX3RtICopdGFzay0+aGRyKS0+cnR0OwogCQlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKLQkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2NpZF07CisJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtjaWQgLQorCQkJCQkgICAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF07CiAJCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkW2JlMzJfdG9fY3B1KGkpCiAJCQkJCQkJCT4+IDE2XTsKIAkJYWJvcnRlZF90YXNrID0gcHdyYl9oYW5kbGUtPnBpb19oYW5kbGU7CkBAIC0zNTcyLDIyICszNTM4LDI1IEBACiAJCWlmICghYWJvcnRlZF9pb190YXNrLT5zY3NpX2NtbmQpCiAJCQlyZXR1cm4gMDsKIAotCQltZ210X2ludmFsaWRhdGVfaWNkcyhwaGJhLAorCQl0YWcgPSBtZ210X2ludmFsaWRhdGVfaWNkcyhwaGJhLAogCQkJCSAgICAgYWJvcnRlZF9pb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4LAogCQkJCSAgICAgY2lkKTsKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSU5JX1RNRl9DTUQ7Ci0JCWVsc2UKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJCSAgICAgIElOSV9UTUZfQ01EKTsKKwkJaWYgKCF0YWcpIHsKKwkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJCSAgICAgIm1nbXRfaW52YWxpZGF0ZV9pY2RzIGNvdWxkIG5vdCBiZSIKKwkJCQkgICAgICIgc3VibWl0dGVkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCisJCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOworCQkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOworCQl9CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJICAgICAgSU5JX1RNRl9DTUQpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfTE9HT1VUOgogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IEhXSF9UWVBFX0xPR09VVDsKLQkJZWxzZQogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKIAkJCQlIV0hfVFlQRV9MT0dPVVQpOwogCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOwpAQCAtMzYwMCwxNCArMzU2OSwxMyBAQAogCX0KIAogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCByMnRfZXhwX2R0bCwgcHdyYiwKLQkJICAgICAgYmUzMl90b19jcHUodGFzay0+ZGF0YV9jb3VudCkpOworCQkgICAgICB0YXNrLT5kYXRhX2NvdW50KTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcHRyMm5leHR3cmIsIHB3cmIsCiAJCSAgICAgIGlvX3Rhc2stPnB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4KTsKIAliZV9kd3NfbGVfdG9fY3B1KHB3cmIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CiAKIAlkb29yYmVsbCB8PSBjaWQgJiBEQl9XUkJfUE9TVF9DSURfTUFTSzsKLQlpZiAoIXJpbmdfbW9kZSkKLQkJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgorCWRvb3JiZWxsIHw9IChpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYKIAkJICAgICBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLKSA8PCBEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVDsKIAlkb29yYmVsbCB8PSAxIDw8IERCX0RFRl9QRFVfTlVNX1BPU1RFRF9TSElGVDsKIAlpb3dyaXRlMzIoZG9vcmJlbGwsIHBoYmEtPmRiX3ZhICsgREJfVFhVTFAwX09GRlNFVCk7CkBAIC0zNjQ5LDcgKzM2MTcsNiBAQAogCXJldHVybiBiZWlzY3NpX2lvdGFzayh0YXNrLCBzZywgbnVtX3NnLCB4ZmVybGVuLCB3cml0ZWRpcik7CiB9CiAKLQogc3RhdGljIHZvaWQgYmVpc2NzaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldikKIHsKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBOVUxMOwpAQCAtMzczNCw3ICszNzAxLDIwIEBACiAJfQogCVNFX0RFQlVHKERCR19MVkxfOCwgIiBwaGJhID0gJXAgXG4iLCBwaGJhKTsKIAotCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIHBoYmEpOworCXN3aXRjaCAocGNpZGV2LT5kZXZpY2UpIHsKKwljYXNlIEJFX0RFVklDRV9JRDE6CisJY2FzZSBPQ19ERVZJQ0VfSUQxOgorCWNhc2UgT0NfREVWSUNFX0lEMjoKKwkJcGhiYS0+Z2VuZXJhdGlvbiA9IEJFX0dFTjI7CisJCWJyZWFrOworCWNhc2UgQkVfREVWSUNFX0lEMjoKKwljYXNlIE9DX0RFVklDRV9JRDM6CisJCXBoYmEtPmdlbmVyYXRpb24gPSBCRV9HRU4zOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaGJhLT5nZW5lcmF0aW9uID0gMDsKKwl9CisKIAlpZiAoZW5hYmxlX21zaXgpCiAJCW51bV9jcHVzID0gZmluZF9udW1fY3B1cygpOwogCWVsc2UKQEAgLTM3NTQsNyArMzczNCwxNSBAQAogCXNwaW5fbG9ja19pbml0KCZwaGJhLT5pb19zZ2xfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPm1nbXRfc2dsX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwaGJhLT5pc3JfbG9jayk7CisJcmV0ID0gbWdtdF9nZXRfZndfY29uZmlnKCZwaGJhLT5jdHJsLCBwaGJhKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkVycm9yIGdldHRpbmcgZncgY29uZmlnXG4iKTsKKwkJZ290byBmcmVlX3BvcnQ7CisJfQorCXBoYmEtPnNob3N0LT5tYXhfaWQgPSBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50OwogCWJlaXNjc2lfZ2V0X3BhcmFtcyhwaGJhKTsKKwlwaGJhLT5zaG9zdC0+Y2FuX3F1ZXVlID0gcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybDsKIAlyZXQgPSBiZWlzY3NpX2luaXRfcG9ydChwaGJhKTsKIAlpZiAocmV0IDwgMCkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgpAQCAtMzc2Miw2ICszNzUwLDE1IEBACiAJCWdvdG8gZnJlZV9wb3J0OwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBNQVhfTUNDX0NNRCA7IGkrKykgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwaGJhLT5jdHJsLm1jY193YWl0W2kgKyAxXSk7CisJCXBoYmEtPmN0cmwubWNjX3RhZ1tpXSA9IGkgKyAxOworCQlwaGJhLT5jdHJsLm1jY19udW10YWdbaSArIDFdID0gMDsKKwkJcGhiYS0+Y3RybC5tY2NfdGFnX2F2YWlsYWJsZSsrOworCX0KKworCXBoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4ID0gcGhiYS0+Y3RybC5tY2NfZnJlZV9pbmRleCA9IDA7CisKIAlzbnByaW50ZihwaGJhLT53cV9uYW1lLCBzaXplb2YocGhiYS0+d3FfbmFtZSksICJiZWlzY3NpX3FfaXJxJXUiLAogCQkgcGhiYS0+c2hvc3QtPmhvc3Rfbm8pOwogCXBoYmEtPndxID0gY3JlYXRlX3dvcmtxdWV1ZShwaGJhLT53cV9uYW1lKTsKQEAgLTM4MzYsNyArMzgzMyw3IEBACiBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0ID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5uYW1lID0gRFJWX05BTUUsCi0JLmNhcHMgPSBDQVBfUkVDT1ZFUllfTDAgfCBDQVBfSERSREdTVCB8CisJLmNhcHMgPSBDQVBfUkVDT1ZFUllfTDAgfCBDQVBfSERSREdTVCB8IENBUF9URVhUX05FR08gfAogCQlDQVBfTVVMVElfUjJUIHwgQ0FQX0RBVEFER1NUIHwgQ0FQX0RBVEFfUEFUSF9PRkZMT0FELAogCS5wYXJhbV9tYXNrID0gSVNDU0lfTUFYX1JFQ1ZfRExFTkdUSCB8CiAJCUlTQ1NJX01BWF9YTUlUX0RMRU5HVEggfApAQCAtMzg1OSw3ICszODU2LDcgQEAKIAkJSVNDU0lfVVNFUk5BTUUgfCBJU0NTSV9QQVNTV09SRCB8CiAJCUlTQ1NJX1VTRVJOQU1FX0lOIHwgSVNDU0lfUEFTU1dPUkRfSU4gfAogCQlJU0NTSV9GQVNUX0FCT1JUIHwgSVNDU0lfQUJPUlRfVE1PIHwKLQkJSVNDU0lfTFVfUkVTRVRfVE1PIHwgSVNDU0lfVEdUX1JFU0VUX1RNTyB8CisJCUlTQ1NJX0xVX1JFU0VUX1RNTyB8CiAJCUlTQ1NJX1BJTkdfVE1PIHwgSVNDU0lfUkVDVl9UTU8gfAogCQlJU0NTSV9JRkFDRV9OQU1FIHwgSVNDU0lfSU5JVElBVE9SX05BTUUsCiAJLmhvc3RfcGFyYW1fbWFzayA9IElTQ1NJX0hPU1RfSFdBRERSRVNTIHwgSVNDU0lfSE9TVF9JUEFERFJFU1MgfApAQCAtMzkwNSw3ICszOTAyLDcgQEAKIAkJU0VfREVCVUcoREJHX0xWTF8xLAogCQkJICJiZWlzY3NpX21vZHVsZV9pbml0IC0gVW5hYmxlIHRvICByZWdpc3RlciBiZWlzY3NpIgogCQkJICJ0cmFuc3BvcnQuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfbW9kdWxlX2luaXQsIHR0PSVwIFxuIiwKIAkJICZiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCk7CkBAIC0zOTE3LDcgKzM5MTQsNiBAQAogCQkJICJiZWlzY3NpIHBjaSBkcml2ZXIuXG4iKTsKIAkJZ290byB1bnJlZ2lzdGVyX2lzY3NpX3RyYW5zcG9ydDsKIAl9Ci0JcmluZ19tb2RlID0gMDsKIAlyZXR1cm4gMDsKIAogdW5yZWdpc3Rlcl9pc2NzaV90cmFuc3BvcnQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaAppbmRleCAyNWU2YjIwLi5jNTNhODBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQwLDMxICs0MCwyOSBAQAogI2RlZmluZSBEUlZfREVTQwkJQkVfTkFNRSAiICIgIkRyaXZlciIKIAogI2RlZmluZSBCRV9WRU5ET1JfSUQgCQkweDE5QTIKKy8qIERFVklDRSBJRCdzIGZvciBCRTIgKi8KICNkZWZpbmUgQkVfREVWSUNFX0lEMQkJMHgyMTIKICNkZWZpbmUgT0NfREVWSUNFX0lEMQkJMHg3MDIKICNkZWZpbmUgT0NfREVWSUNFX0lEMgkJMHg3MDMKLSNkZWZpbmUgT0NfREVWSUNFX0lEMwkJMHg3MTIKLSNkZWZpbmUgT0NfREVWSUNFX0lENAkJMHgyMjIKIAotI2RlZmluZSBCRTJfTUFYX1NFU1NJT05TCTY0CisvKiBERVZJQ0UgSUQncyBmb3IgQkUzICovCisjZGVmaW5lIEJFX0RFVklDRV9JRDIJCTB4MjIyCisjZGVmaW5lIE9DX0RFVklDRV9JRDMJCTB4NzEyCisKKyNkZWZpbmUgQkUyX0lPX0RFUFRICQkxMDI0CisjZGVmaW5lIEJFMl9NQVhfU0VTU0lPTlMJMjU2CiAjZGVmaW5lIEJFMl9DTURTX1BFUl9DWE4JMTI4Ci0jZGVmaW5lIEJFMl9MT0dPVVRTCQlCRTJfTUFYX1NFU1NJT05TCiAjZGVmaW5lIEJFMl9UTUZTCQkxNgogI2RlZmluZSBCRTJfTk9QT1VUX1JFUQkJMTYKLSNkZWZpbmUgQkUyX0FTWU5DUERVUwkJQkUyX01BWF9TRVNTSU9OUwotI2RlZmluZSBCRTJfTUFYX0lDRFMJCTIwNDgKICNkZWZpbmUgQkUyX1NHRQkJCTMyCiAjZGVmaW5lIEJFMl9ERUZQRFVfSERSX1NaCTY0CiAjZGVmaW5lIEJFMl9ERUZQRFVfREFUQV9TWgk4MTkyCi0jZGVmaW5lIEJFMl9JT19ERVBUSCBcCi0JKEJFMl9NQVhfSUNEUyAvIDIgLSAoQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9OT1BPVVRfUkVRKSkKIAogI2RlZmluZSBNQVhfQ1BVUwkJMzEKLSNkZWZpbmUgQkVJU0NTSV9TR0xJU1RfRUxFTUVOVFMJQkUyX1NHRQorI2RlZmluZSBCRUlTQ1NJX1NHTElTVF9FTEVNRU5UUwkzMAogCi0jZGVmaW5lIEJFSVNDU0lfTUFYX0NNTkRTCTEwMjQJLyogTWF4IElPJ3MgcGVyIEN0cmxyIHNodC0+Y2FuX3F1ZXVlICovCiAjZGVmaW5lIEJFSVNDU0lfQ01EX1BFUl9MVU4JMTI4CS8qIHNjc2lfaG9zdC0+Y21kX3Blcl9sdW4gKi8KLSNkZWZpbmUgQkVJU0NTSV9NQVhfU0VDVE9SUwkyMDQ4CS8qIHNjc2lfaG9zdC0+bWF4X3NlY3RvcnMgKi8KKyNkZWZpbmUgQkVJU0NTSV9NQVhfU0VDVE9SUwkyNTYJLyogc2NzaV9ob3N0LT5tYXhfc2VjdG9ycyAqLwogCiAjZGVmaW5lIEJFSVNDU0lfTUFYX0NNRF9MRU4JMTYJLyogc2NzaV9ob3N0LT5tYXhfY21kX2xlbiAqLwogI2RlZmluZSBCRUlTQ1NJX05VTV9NQVhfTFVOCTI1NgkvKiBzY3NpX2hvc3QtPm1heF9sdW4gKi8KQEAgLTMzMCw2ICszMjgsNyBAQAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsJLyogVGhlIGFjdHVhayB3b3JrIHF1ZXVlICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfY3FzOwkvKiBUaGUgd29yayBiZWluZyBxdWV1ZWQgKi8KIAlzdHJ1Y3QgYmVfY3RybF9pbmZvIGN0cmw7CisJdW5zaWduZWQgaW50IGdlbmVyYXRpb247CiB9OwogCiBzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uIHsKQEAgLTY1NiwxMSArNjU1LDEyIEBACiAKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCwKLQkJCQkgICAgaW50IGluZGV4KTsKK3N0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCk7CiB2b2lkCiBmcmVlX21nbXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSk7CiAKK3ZvaWQgYmVpc2NzaV9wcm9jZXNzX2FsbF9jcXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwogc3RydWN0IHBkdV9ub3Bfb3V0IHsKIAl1MzIgZHdbMTJdOwogfTsKQEAgLTgwMiw3ICs4MDIsNiBAQAogCXN0cnVjdCBiZV9yaW5nIGRlZmF1bHRfcGR1X2hkcjsKIAlzdHJ1Y3QgYmVfcmluZyBkZWZhdWx0X3BkdV9kYXRhOwogCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY3R4dDsKLQl1bnNpZ25lZCBzaG9ydCBjcV9lcnJvcnNbQ1hOX0tJTExFRF9DTU5EX0RBVEFfTk9UX09OX1NBTUVfQ09OTl07CiB9OwogCiBlbnVtIGh3aF90eXBlX2VudW0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKaW5kZXggNzljMmJkNS4uMzE3YmNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00OCw2ICs0OCwxNCBAQAogCQkJCQlwZndfY2ZnLT51bHBbMF0uc3FfYmFzZTsKIAkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCA9CiAJCQkJCXBmd19jZmctPnVscFswXS5zcV9jb3VudDsKKwkJaWYgKHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgPiAoQkUyX01BWF9TRVNTSU9OUyAvIDIpKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkJIkZXIHJlcG9ydGVkIE1BWCBDWE5TIGFzICVkIFx0IgorCQkJCSJNYXggU3VwcG9ydGVkID0gJWQuXG4iLAorCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQsCisJCQkJQkUyX01BWF9TRVNTSU9OUyk7CisJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50ID0gQkUyX01BWF9TRVNTSU9OUyAvIDI7CisJCX0KIAl9IGVsc2UgewogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKIAkJCSAgICAgIkZhaWxlZCBpbiBtZ210X2dldF9md19jb25maWcgXG4iKTsKQEAgLTc3LDYgKzg1LDcgQEAKIAl9CiAJbm9uZW1iX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyk7CiAJcmVxID0gbm9uZW1iX2NtZC52YTsKKwltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOwogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgZmFsc2UsIDEpOwpAQCAtMTQwLDEwICsxNDksMTcgQEAKIHsKIAlzdHJ1Y3QgYmVfZG1hX21lbSBub25lbWJfY21kOwogCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKLQlzdHJ1Y3QgYmVfc2dlICpzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBiZV9zZ2UgKnNnZTsKIAlzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4gKnJlcTsKLQlpbnQgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwl0YWcgPSBhbGxvY19tY2NfdGFnKHBoYmEpOworCWlmICghdGFnKSB7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gdGFnOworCX0KIAogCW5vbmVtYl9jbWQudmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChjdHJsLT5wZGV2LAogCQkJCXNpemVvZihzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4pLApAQCAtMTU2LDggKzE3MiwxMCBAQAogCX0KIAlub25lbWJfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX2luKTsKIAlyZXEgPSBub25lbWJfY21kLnZhOwotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CisJd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKKwlzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKKwl3cmItPnRhZzAgfD0gdGFnOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCBmYWxzZSwgMSk7CiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKQEAgLTE3MiwxNCArMTkwLDEyIEBACiAJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQuZG1hICYgMHhGRkZGRkZGRik7CiAJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLnNpemUpOwogCi0Jc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwotCWlmIChzdGF0dXMpCi0JCVNFX0RFQlVHKERCR19MVkxfMSwgIklDRFMgSW52YWxpZGF0aW9uIEZhaWxlZFxuIik7CisJYmVfbWNjX25vdGlmeShwaGJhKTsKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKIAlpZiAobm9uZW1iX2NtZC52YSkKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChjdHJsLT5wZGV2LCBub25lbWJfY21kLnNpemUsCiAJCQkJICAgIG5vbmVtYl9jbWQudmEsIG5vbmVtYl9jbWQuZG1hKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0YWc7CiB9CiAKIHVuc2lnbmVkIGNoYXIgbWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLApAQCAtMTg5LDEzICsyMDUsMTkgQEAKIAkJCQkJIHVuc2lnbmVkIHNob3J0IHNhdmVjZmdfZmxhZykKIHsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7Ci0Jc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4gKnJlcSA9Ci0JCQkJCQllbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0JaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgaXNjc2lfaW52YWxpZGF0ZV9jb25uZWN0aW9uX3BhcmFtc19pbiAqcmVxOworCXVuc2lnbmVkIGludCB0YWcgPSAwOwogCiAJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJdGFnID0gYWxsb2NfbWNjX3RhZyhwaGJhKTsKKwlpZiAoIXRhZykgeworCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJcmV0dXJuIHRhZzsKKwl9CisJd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKKwl3cmItPnRhZzAgfD0gdGFnOworCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSV9JTkksCkBAIC0yMDgsMzUgKzIzMCwzNyBAQAogCWVsc2UKIAkJcmVxLT5jbGVhbnVwX3R5cGUgPSBDTURfSVNDU0lfQ09OTkVDVElPTl9JTlZBTElEQVRFOwogCXJlcS0+c2F2ZV9jZmcgPSBzYXZlY2ZnX2ZsYWc7Ci0Jc3RhdHVzID0gIGJlX21jY19ub3RpZnlfd2FpdChwaGJhKTsKLQlpZiAoc3RhdHVzKQotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbnZhbGlkYXRpb24gRmFpbGVkXG4iKTsKLQorCWJlX21jY19ub3RpZnkocGhiYSk7CiAJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gdGFnOwogfQogCiB1bnNpZ25lZCBjaGFyIG1nbXRfdXBsb2FkX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAogCQkJCXVuc2lnbmVkIHNob3J0IGNpZCwgdW5zaWduZWQgaW50IHVwbG9hZF9mbGFnKQogewogCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKLQlzdHJ1Y3QgdGNwX3VwbG9hZF9wYXJhbXNfaW4gKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKLQlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19pbiAqcmVxOworCXVuc2lnbmVkIGludCB0YWcgPSAwOwogCiAJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJdGFnID0gYWxsb2NfbWNjX3RhZyhwaGJhKTsKKwlpZiAoIXRhZykgeworCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJcmV0dXJuIHRhZzsKKwl9CisJd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJd3JiLT50YWcwIHw9IHRhZzsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX0NPTU1PTl9UQ1BfVVBMT0FELAogCQkJICAgT1BDT0RFX0NPTU1PTl9UQ1BfVVBMT0FELCBzaXplb2YoKnJlcSkpOwogCXJlcS0+aWQgPSAodW5zaWduZWQgc2hvcnQpY2lkOwogCXJlcS0+dXBsb2FkX3R5cGUgPSAodW5zaWduZWQgY2hhcil1cGxvYWRfZmxhZzsKLQlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7Ci0JaWYgKHN0YXR1cykKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAibWdtdF91cGxvYWRfY29ubmVjdGlvbiBGYWlsZWRcbiIpOworCWJlX21jY19ub3RpZnkocGhiYSk7CiAJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gdGFnOwogfQogCiBpbnQgbWdtdF9vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLApAQCAtMjQ4LDEzICsyNzIsMTMgQEAKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRhZGRyX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWRzdF9hZGRyOwogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmRhZGRyX2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopZHN0X2FkZHI7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwotCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbiAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luICpyZXE7CiAJdW5zaWduZWQgc2hvcnQgZGVmX2hkcl9pZDsKIAl1bnNpZ25lZCBzaG9ydCBkZWZfZGF0YV9pZDsKIAlzdHJ1Y3QgcGh5c19hZGRyIHRlbXBsYXRlX2FkZHJlc3MgPSB7IDAsIDAgfTsKIAlzdHJ1Y3QgcGh5c19hZGRyICpwdGVtcGxhdGVfYWRkcmVzczsKLQlpbnQgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBzaG9ydCBjaWQgPSBiZWlzY3NpX2VwLT5lcF9jaWQ7CiAKQEAgLTI2Niw3ICsyOTAsMTQgQEAKIAlwdGVtcGxhdGVfYWRkcmVzcyA9ICZ0ZW1wbGF0ZV9hZGRyZXNzOwogCUlTQ1NJX0dFVF9QRFVfVEVNUExBVEVfQUREUkVTUyhwaGJhLCBwdGVtcGxhdGVfYWRkcmVzcyk7CiAJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJdGFnID0gYWxsb2NfbWNjX3RhZyhwaGJhKTsKKwlpZiAoIXRhZykgeworCQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwkJcmV0dXJuIHRhZzsKKwl9CisJd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJd3JiLT50YWcwIHw9IHRhZzsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKQEAgLTMxMSw0NiArMzQyLDM2IEBACiAJcmVxLT5kb19vZmZsb2FkID0gMTsKIAlyZXEtPmRhdGFvdXRfdGVtcGxhdGVfcGEubG8gPSBwdGVtcGxhdGVfYWRkcmVzcy0+bG87CiAJcmVxLT5kYXRhb3V0X3RlbXBsYXRlX3BhLmhpID0gcHRlbXBsYXRlX2FkZHJlc3MtPmhpOwotCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChwaGJhKTsKLQlpZiAoIXN0YXR1cykgewotCQlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOwotCQlzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0ICpwdGNwY25jdF9vdXQgPQotCQkJCQkJCWVtYmVkZGVkX3BheWxvYWQod3JiKTsKLQotCQllcCA9IHBoYmEtPmVwX2FycmF5W3B0Y3BjbmN0X291dC0+Y2lkXTsKLQkJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOwotCQliZWlzY3NpX2VwLT5md19oYW5kbGUgPSBwdGNwY25jdF9vdXQtPmNvbm5lY3Rpb25faGFuZGxlOwotCQliZWlzY3NpX2VwLT5jaWRfdmxkID0gMTsKLQkJU0VfREVCVUcoREJHX0xWTF84LCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gU3VjY2Vzc1xuIik7Ci0JfSBlbHNlCi0JCVNFX0RFQlVHKERCR19MVkxfMSwgIm1nbXRfb3Blbl9jb25uZWN0aW9uIEZhaWxlZFxuIik7CisJYmVfbWNjX25vdGlmeShwaGJhKTsKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0YWc7CiB9CiAKLWludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdTggKm1hY19hZGRyKQordW5zaWduZWQgaW50IGJlX2NtZF9nZXRfbWFjX2FkZHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQogewogCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKLQlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfbWFjX2FkZHIgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKLQlpbnQgc3RhdHVzOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGJlX2NtZF9yZXFfZ2V0X21hY19hZGRyICpyZXE7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CiAKIAlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZV9jbWRfZ2V0X21hY19hZGRyXG4iKTsKIAlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwl0YWcgPSBhbGxvY19tY2NfdGFnKHBoYmEpOworCWlmICghdGFnKSB7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gdGFnOworCX0KKworCXdyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7CisJcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXdyYi0+dGFnMCB8PSB0YWc7CiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAogCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9OVFdLX0dFVF9OSUNfQ09ORklHLAogCQkJICAgc2l6ZW9mKCpyZXEpKTsKIAotCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChwaGJhKTsKLQlpZiAoIXN0YXR1cykgewotCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X21hY19hZGRyICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwotCi0JCW1lbWNweShtYWNfYWRkciwgcmVzcC0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKLQl9Ci0KKwliZV9tY2Nfbm90aWZ5KHBoYmEpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRhZzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKaW5kZXggMjRlYWZmOS4uZWNlYWQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMzEsNiArMjMxLDcgQEAKIAlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CiAJc3RydWN0IGJlaXNjc2lfc2VzcyAqc2VzczsKIAlzdHJ1Y3QgYmVpc2NzaV9jb25uICpjb25uOworCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqb3BlbmlzY3NpX2VwOwogCXVuc2lnbmVkIHNob3J0IGlwX3R5cGU7CiAJY2hhciBkc3Q2X2FkZHJbSVNDU0lfQUREUkVTU19CVUZfTEVOXTsKIAl1bnNpZ25lZCBsb25nIGRzdF9hZGRyOwpAQCAtMjQ5LDcgKzI1MCw0IEBACiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBpc3N1ZV9yZXNldCwKIAkJCQkJIHVuc2lnbmVkIHNob3J0IHNhdmVjZmdfZmxhZyk7CiAKLXVuc2lnbmVkIGNoYXIgbWdtdF9md19jbWQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKLQkJCSAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAotCQkJICBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCmluZGV4IDMzYjIyOTQuLjFjNGQxMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCkBAIC0xNDI2LDggKzE0MjYsOCBAQAogCQlicmVhazsKIAljYXNlIElTQ1NJX1BBUkFNX0NPTk5fQUREUkVTUzoKIAkJaWYgKGJueDJpX2Nvbm4tPmVwKQotCQkJbGVuID0gc3ByaW50ZihidWYsIE5JUFFVQURfRk1UICJcbiIsCi0JCQkJICAgICAgTklQUVVBRChibngyaV9jb25uLT5lcC0+Y21fc2stPmRzdF9pcCkpOworCQkJbGVuID0gc3ByaW50ZihidWYsICIlcEk0XG4iLAorCQkJCSAgICAgICZibngyaV9jb25uLT5lcC0+Y21fc2stPmRzdF9pcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBpc2NzaV9jb25uX2dldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1Zik7CkBAIC0xOTkwLDYgKzE5OTAsNyBAQAogCS5laF9hYm9ydF9oYW5kbGVyCT0gaXNjc2lfZWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAogCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX3RhcmdldF9yZXNldCwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gaXNjc2lfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS5jYW5fcXVldWUJCT0gMTAyNCwKIAkubWF4X3NlY3RvcnMJCT0gMTI3LAogCS5jbWRfcGVyX2x1bgkJPSAzMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwppbmRleCA5MTI5YmNmLi5jZDA1ZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKKysrIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCkBAIC0yMTksMTggKzIxOSwxNSBAQAogCQkJYnJlYWs7CiAJCX0KIAkJc2EgPSAoY2RicFs4XSA8PCA4KSArIGNkYnBbOV07Ci0JCW5hbWUgPSBnZXRfc2FfbmFtZShtYWludF9pbl9hcnIsIE1BSU5UX0lOX1NaLCBzYSk7Ci0JCWlmIChuYW1lKSB7CisJCW5hbWUgPSBnZXRfc2FfbmFtZSh2YXJpYWJsZV9sZW5ndGhfYXJyLCBWQVJJQUJMRV9MRU5HVEhfU1osIHNhKTsKKwkJaWYgKG5hbWUpCiAJCQlwcmludGsoIiVzIiwgbmFtZSk7Ci0JCQlpZiAoKGNkYl9sZW4gPiAwKSAmJiAobGVuICE9IGNkYl9sZW4pKQotCQkJCXByaW50aygiLCBpbl9jZGJfbGVuPSVkLCBleHRfbGVuPSVkIiwKLQkJCQkgICAgICAgbGVuLCBjZGJfbGVuKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcHJpbnRrKCJjZGJbMF09MHgleCwgc2E9MHgleCIsIGNkYjAsIHNhKTsKLQkJCWlmICgoY2RiX2xlbiA+IDApICYmIChsZW4gIT0gY2RiX2xlbikpCi0JCQkJcHJpbnRrKCIsIGluX2NkYl9sZW49JWQsIGV4dF9sZW49JWQiLAotCQkJCSAgICAgICBsZW4sIGNkYl9sZW4pOwotCQl9CisKKwkJaWYgKChjZGJfbGVuID4gMCkgJiYgKGxlbiAhPSBjZGJfbGVuKSkKKwkJCXByaW50aygiLCBpbl9jZGJfbGVuPSVkLCBleHRfbGVuPSVkIiwgbGVuLCBjZGJfbGVuKTsKKwogCQlicmVhazsKIAljYXNlIE1BSU5URU5BTkNFX0lOOgogCQlzYSA9IGNkYnBbMV0gJiAweDFmOwpAQCAtMzQ5LDYgKzM0Niw5IEBACiB7CiAJaW50IGs7CiAKKwlpZiAoY21kLT5jbW5kID09IE5VTEwpCisJCXJldHVybjsKKwogCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLCAiQ0RCOiAiKTsKIAlwcmludF9vcGNvZGVfbmFtZShjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCmluZGV4IDk2OWM4MzEuLjQxMjg1M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYwpAQCAtNTkxLDggKzU5MSw3IEBACiAJY3hnYjNpX2Nvbm5fbWF4X3JlY3ZfZGxlbmd0aChjb25uKTsKIAogCXNwaW5fbG9ja19iaCgmY29ubi0+c2Vzc2lvbi0+bG9jayk7Ci0Jc3ByaW50Zihjb25uLT5wb3J0YWxfYWRkcmVzcywgTklQUVVBRF9GTVQsCi0JCU5JUFFVQUQoYzNjbi0+ZGFkZHIuc2luX2FkZHIuc19hZGRyKSk7CisJc3ByaW50Zihjb25uLT5wb3J0YWxfYWRkcmVzcywgIiVwSTQiLCAmYzNjbi0+ZGFkZHIuc2luX2FkZHIuc19hZGRyKTsKIAljb25uLT5wb3J0YWxfcG9ydCA9IG50b2hzKGMzY24tPmRhZGRyLnNpbl9wb3J0KTsKIAlzcGluX3VubG9ja19iaCgmY29ubi0+c2Vzc2lvbi0+bG9jayk7CiAKQEAgLTcwOSw2ICs3MDgsMTIgQEAKIHsKIAlzdHJ1Y3QgY3hnYjNpX2hiYSAqaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKIAorCWlmICghaGJhLT5uZGV2KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgc2hvc3QsICJDb3VsZCBub3Qgc2V0IGhvc3QgcGFyYW0uICIKKwkJCSAgICAgIk5ldGRldiBmb3IgaG9zdCBub3Qgc2V0LlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCWN4Z2IzaV9hcGlfZGVidWcoInBhcmFtICVkLCBidWYgJXMuXG4iLCBwYXJhbSwgYnVmKTsKIAogCXN3aXRjaCAocGFyYW0pIHsKQEAgLTczOSw2ICs3NDQsMTIgQEAKIAlzdHJ1Y3QgY3hnYjNpX2hiYSAqaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKIAlpbnQgbGVuID0gMDsKIAorCWlmICghaGJhLT5uZGV2KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgc2hvc3QsICJDb3VsZCBub3Qgc2V0IGhvc3QgcGFyYW0uICIKKwkJCSAgICAgIk5ldGRldiBmb3IgaG9zdCBub3Qgc2V0LlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCWN4Z2IzaV9hcGlfZGVidWcoImhiYSAlcywgcGFyYW0gJWQuXG4iLCBoYmEtPm5kZXYtPm5hbWUsIHBhcmFtKTsKIAogCXN3aXRjaCAocGFyYW0pIHsKQEAgLTc1Myw3ICs3NjQsNyBAQAogCQlfX2JlMzIgYWRkcjsKIAogCQlhZGRyID0gY3hnYjNpX2dldF9wcml2YXRlX2lwdjRhZGRyKGhiYS0+bmRldik7Ci0JCWxlbiA9IHNwcmludGYoYnVmLCBOSVBRVUFEX0ZNVCwgTklQUVVBRChhZGRyKSk7CisJCWxlbiA9IHNwcmludGYoYnVmLCAiJXBJNCIsICZhZGRyKTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKaW5kZXggMTVhMDBlOC4uM2UwOGM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYwpAQCAtMTY3NSwxMCArMTY3NSwxMSBAQAogCX0gZWxzZQogCQljM2NuLT5zYWRkci5zaW5fYWRkci5zX2FkZHIgPSBzaXB2NDsKIAotCWMzY25fY29ubl9kZWJ1ZygiYzNjbiAweCVwLCAldS4ldS4ldS4ldSwldS0ldS4ldS4ldS4ldSwldSBTWU5fU0VOVC5cbiIsCi0JCQljM2NuLCBOSVBRVUFEKGMzY24tPnNhZGRyLnNpbl9hZGRyLnNfYWRkciksCisJYzNjbl9jb25uX2RlYnVnKCJjM2NuIDB4JXAsICVwSTQsJXUtJXBJNCwldSBTWU5fU0VOVC5cbiIsCisJCQljM2NuLAorCQkJJmMzY24tPnNhZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCW50b2hzKGMzY24tPnNhZGRyLnNpbl9wb3J0KSwKLQkJCU5JUFFVQUQoYzNjbi0+ZGFkZHIuc2luX2FkZHIuc19hZGRyKSwKKwkJCSZjM2NuLT5kYWRkci5zaW5fYWRkci5zX2FkZHIsCiAJCQludG9ocyhjM2NuLT5kYWRkci5zaW5fcG9ydCkpOwogCiAJYzNjbl9zZXRfc3RhdGUoYzNjbiwgQzNDTl9TVEFURV9DT05ORUNUSU5HKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX3BkdS5jIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKaW5kZXggMWZlM2IwZi4uOWMzODUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMKQEAgLTQ2MSwxMCArNDYxLDggQEAKIAkJc2tiID0gc2tiX3BlZWsoJmMzY24tPnJlY2VpdmVfcXVldWUpOwogCX0KIAlyZWFkX3VubG9jaygmYzNjbi0+Y2FsbGJhY2tfbG9jayk7Ci0JaWYgKGMzY24pIHsKLQkJYzNjbi0+Y29waWVkX3NlcSArPSByZWFkOwotCQljeGdiM2lfYzNjbl9yeF9jcmVkaXRzKGMzY24sIHJlYWQpOwotCX0KKwljM2NuLT5jb3BpZWRfc2VxICs9IHJlYWQ7CisJY3hnYjNpX2MzY25fcnhfY3JlZGl0cyhjM2NuLCByZWFkKTsKIAljb25uLT5yeGRhdGFfb2N0ZXRzICs9IHJlYWQ7CiAKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKaW5kZXggNGYwZDAxMy4uYmM5ZTk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwpAQCAtNzE3LDYgKzcxNyw4IEBACiAJeyJJQk0iLCAiMjE0NSIgfSwKIAl7IlBpbGxhciIsICJBeGlvbSIgfSwKIAl7IkludGVsIiwgIk11bHRpLUZsZXgifSwKKwl7Ik5FVEFQUCIsICJMVU4ifSwKKwl7IkFJWCIsICJOVkRJU0sifSwKIAl7TlVMTCwgTlVMTH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9lYXRhLmMgYi9kcml2ZXJzL3Njc2kvZWF0YS5jCmluZGV4IGM3MDc2Y2UuLjNjNWFiZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lYXRhLmMKKysrIGIvZHJpdmVycy9zY3NpL2VhdGEuYwpAQCAtMTUwOSw3ICsxNTA5LDcgQEAKIAljaGFyICpjdXIgPSBzdHI7CiAJaW50IGkgPSAxOwogCi0Jd2hpbGUgKGN1ciAmJiBpc2RpZ2l0KCpjdXIpICYmIGkgPD0gTUFYX0lOVF9QQVJBTSkgeworCXdoaWxlIChjdXIgJiYgaXNkaWdpdCgqY3VyKSAmJiBpIDwgTUFYX0lOVF9QQVJBTSkgewogCQlpbnRzW2krK10gPSBzaW1wbGVfc3RydG91bChjdXIsIE5VTEwsIDApOwogCiAJCWlmICgoY3VyID0gc3RyY2hyKGN1ciwgJywnKSkgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMKaW5kZXggYTY4MGUxOC4uZTJiYzc3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMKQEAgLTE0NDksOSArMTQ0OSw2IEBACiAJaWYgKG9mZnNldCA+IDE1KQogCQlnb3RvIGRvX3JlamVjdDsKIAotCWlmIChlc3AtPmZsYWdzICYgRVNQX0ZMQUdfRElTQUJMRV9TWU5DKQotCQlvZmZzZXQgPSAwOwotCiAJaWYgKG9mZnNldCkgewogCQlpbnQgb25lX2Nsb2NrOwogCkBAIC0yNDA1LDEyICsyNDAyLDYgQEAKIAlzdHJ1Y3QgZXNwX3RhcmdldF9kYXRhICp0cCA9ICZlc3AtPnRhcmdldFtkZXYtPmlkXTsKIAlpbnQgZ29hbF90YWdzLCBxdWV1ZV9kZXB0aDsKIAotCWlmIChlc3AtPmZsYWdzICYgRVNQX0ZMQUdfRElTQUJMRV9TWU5DKSB7Ci0JCS8qIEJ5cGFzcyBhc3luYyBkb21haW4gdmFsaWRhdGlvbiAqLwotCQlkZXYtPnBwciAgPSAwOwotCQlkZXYtPnNkdHIgPSAwOwotCX0KLQogCWdvYWxfdGFncyA9IDA7CiAKIAlpZiAoZGV2LT50YWdnZWRfc3VwcG9ydGVkKSB7CkBAIC0yNjYwLDcgKzI2NTEsMTAgQEAKIAlzdHJ1Y3QgZXNwICplc3AgPSBzaG9zdF9wcml2KGhvc3QpOwogCXN0cnVjdCBlc3BfdGFyZ2V0X2RhdGEgKnRwID0gJmVzcC0+dGFyZ2V0W3RhcmdldC0+aWRdOwogCi0JdHAtPm5lZ29fZ29hbF9vZmZzZXQgPSBvZmZzZXQ7CisJaWYgKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ESVNBQkxFX1NZTkMpCisJCXRwLT5uZWdvX2dvYWxfb2Zmc2V0ID0gMDsKKwllbHNlCisJCXRwLT5uZWdvX2dvYWxfb2Zmc2V0ID0gb2Zmc2V0OwogCXRwLT5mbGFncyB8PSBFU1BfVEdUX0NIRUNLX05FR087CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaCBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaAppbmRleCBiYjIwOGE2Li4zOTY2YzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCkBAIC0zNiw3ICszNiw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJmbmljIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJDaXNjbyBGQ29FIEhCQSBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wLjAuMTEyMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjQuMC45OCIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIjogIgogI2RlZmluZSBERlggICAgICAgICAgICAgICAgICAgICBEUlZfTkFNRSAiJWQ6ICIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYwppbmRleCBmZTFiMTAzMS4uNTA3ZTI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMKQEAgLTYyMCw2ICs2MjAsOCBAQAogCWlmIChmbmljLT5jb25maWcuZmxhZ3MgJiBWRkNGX0ZJUF9DQVBBQkxFKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIGZuaWMtPmxwb3J0LT5ob3N0LAogCQkJICAgICAiZmlybXdhcmUgc3VwcG9ydHMgRklQXG4iKTsKKwkJLyogZW5hYmxlIGRpcmVjdGVkIGFuZCBtdWx0aWNhc3QgKi8KKwkJdm5pY19kZXZfcGFja2V0X2ZpbHRlcihmbmljLT52ZGV2LCAxLCAxLCAwLCAwLCAwKTsKIAkJdm5pY19kZXZfYWRkX2FkZHIoZm5pYy0+dmRldiwgRklQX0FMTF9FTk9ERV9NQUNTKTsKIAkJdm5pY19kZXZfYWRkX2FkZHIoZm5pYy0+dmRldiwgZm5pYy0+Y3Rsci5jdGxfc3JjX2FkZHIpOwogCX0gZWxzZSB7CkBAIC02OTgsNiArNzAwLDggQEAKIAkJZ290byBlcnJfb3V0X3JlbW92ZV9zY3NpX2hvc3Q7CiAJfQogCisJZmNfbHBvcnRfaW5pdF9zdGF0cyhscCk7CisKIAlmY19scG9ydF9jb25maWcobHApOwogCiAJaWYgKGZjX3NldF9tZnMobHAsIGZuaWMtPmNvbmZpZy5tYXhkYXRhZmllbGRzaXplICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL3ZuaWNfZGV2Y21kLmggYi9kcml2ZXJzL3Njc2kvZm5pYy92bmljX2RldmNtZC5oCmluZGV4IGQ2MmI5MDYuLjdjOWNjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL3ZuaWNfZGV2Y21kLmgKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvdm5pY19kZXZjbWQuaApAQCAtOTQsNyArOTQsNyBAQAogCUNNRF9TVEFUU19EVU1QICAgICAgICAgID0gX0NNREMoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfQUxMLCA0KSwKIAogCS8qIHNldCBSeCBwYWNrZXQgZmlsdGVyOiAodTMyKWEwPWZpbHRlcnMgKHNlZSBDTURfUEZJTFRFUl8qKSAqLwotCUNNRF9QQUNLRVRfRklMVEVSCT0gX0NNRENOVyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9FTkVULCA3KSwKKwlDTURfUEFDS0VUX0ZJTFRFUiAgICAgICA9IF9DTURDTlcoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfQUxMLCA3KSwKIAogCS8qIGhhbmcgZGV0ZWN0aW9uIG5vdGlmaWNhdGlvbiAqLwogCUNNRF9IQU5HX05PVElGWSAgICAgICAgID0gX0NNREMoX0NNRF9ESVJfTk9ORSwgX0NNRF9WVFlQRV9BTEwsIDgpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGguYyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKaW5kZXggOWU4ZmNlMC4uYmEzYzk0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGguYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCkBAIC0xNDAsNDAgKzE0MCw0MCBAQAogI2luY2x1ZGUgImdkdGguaCIKIAogc3RhdGljIHZvaWQgZ2R0aF9kZWxheShpbnQgbWlsbGlzZWNvbmRzKTsKLXN0YXRpYyB2b2lkIGdkdGhfZXZhbF9tYXBwaW5nKHVsb25nMzIgc2l6ZSwgdWxvbmczMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKTsKK3N0YXRpYyB2b2lkIGdkdGhfZXZhbF9tYXBwaW5nKHUzMiBzaXplLCB1MzIgKmN5bHMsIGludCAqaGVhZHMsIGludCAqc2Vjcyk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZ2R0aF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBfX2dkdGhfaW50ZXJydXB0KGdkdGhfaGFfc3RyICpoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnZHRoX2Zyb21fd2FpdCwgaW50KiBwSW5kZXgpOwotc3RhdGljIGludCBnZHRoX3N5bmNfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2VydmljZSwgdW5jaGFyIGluZGV4LAorc3RhdGljIGludCBnZHRoX3N5bmNfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2VydmljZSwgdTggaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3NpX0NtbmQgKnNjcCk7CiBzdGF0aWMgaW50IGdkdGhfYXN5bmNfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhKTsKIHN0YXRpYyB2b2lkIGdkdGhfbG9nX2V2ZW50KGdkdGhfZXZ0X2RhdGEgKmR2ciwgY2hhciAqYnVmZmVyKTsKIAotc3RhdGljIHZvaWQgZ2R0aF9wdXRxKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVuY2hhciBwcmlvcml0eSk7CitzdGF0aWMgdm9pZCBnZHRoX3B1dHEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdTggcHJpb3JpdHkpOwogc3RhdGljIHZvaWQgZ2R0aF9uZXh0KGdkdGhfaGFfc3RyICpoYSk7Ci1zdGF0aWMgaW50IGdkdGhfZmlsbF9yYXdfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVuY2hhciBiKTsKK3N0YXRpYyBpbnQgZ2R0aF9maWxsX3Jhd19jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdTggYik7CiBzdGF0aWMgaW50IGdkdGhfc3BlY2lhbF9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCk7Ci1zdGF0aWMgZ2R0aF9ldnRfc3RyICpnZHRoX3N0b3JlX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0IGlkeCwgZ2R0aF9ldnRfZGF0YSAqZXZ0KTsKK3N0YXRpYyBnZHRoX2V2dF9zdHIgKmdkdGhfc3RvcmVfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgaWR4LCBnZHRoX2V2dF9kYXRhICpldnQpOwogc3RhdGljIGludCBnZHRoX3JlYWRfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgaGFuZGxlLCBnZHRoX2V2dF9zdHIgKmVzdHIpOwotc3RhdGljIHZvaWQgZ2R0aF9yZWFkYXBwX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgdW5jaGFyIGFwcGxpY2F0aW9uLCAKK3N0YXRpYyB2b2lkIGdkdGhfcmVhZGFwcF9ldmVudChnZHRoX2hhX3N0ciAqaGEsIHU4IGFwcGxpY2F0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZHRoX2V2dF9zdHIgKmVzdHIpOwogc3RhdGljIHZvaWQgZ2R0aF9jbGVhcl9ldmVudHModm9pZCk7CiAKIHN0YXRpYyB2b2lkIGdkdGhfY29weV9pbnRlcm5hbF9kYXRhKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHVzaG9ydCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHUxNiBjb3VudCk7CiBzdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY2FjaGVfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3ApOwotc3RhdGljIGludCBnZHRoX2ZpbGxfY2FjaGVfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVzaG9ydCBoZHJpdmUpOworc3RhdGljIGludCBnZHRoX2ZpbGxfY2FjaGVfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHUxNiBoZHJpdmUpOwogCiBzdGF0aWMgdm9pZCBnZHRoX2VuYWJsZV9pbnQoZ2R0aF9oYV9zdHIgKmhhKTsKIHN0YXRpYyBpbnQgZ2R0aF90ZXN0X2J1c3koZ2R0aF9oYV9zdHIgKmhhKTsKIHN0YXRpYyBpbnQgZ2R0aF9nZXRfY21kX2luZGV4KGdkdGhfaGFfc3RyICpoYSk7CiBzdGF0aWMgdm9pZCBnZHRoX3JlbGVhc2VfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhKTsKLXN0YXRpYyBpbnQgZ2R0aF93YWl0KGdkdGhfaGFfc3RyICpoYSwgaW50IGluZGV4LHVsb25nMzIgdGltZSk7Ci1zdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdW5jaGFyIHNlcnZpY2UsIHVzaG9ydCBvcGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZzMyIHAxLCB1bG9uZzY0IHAyLHVsb25nNjQgcDMpOworc3RhdGljIGludCBnZHRoX3dhaXQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgaW5kZXgsdTMyIHRpbWUpOworc3RhdGljIGludCBnZHRoX2ludGVybmFsX2NtZChnZHRoX2hhX3N0ciAqaGEsIHU4IHNlcnZpY2UsIHUxNiBvcGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcDEsIHU2NCBwMix1NjQgcDMpOwogc3RhdGljIGludCBnZHRoX3NlYXJjaF9kcml2ZXMoZ2R0aF9oYV9zdHIgKmhhKTsKLXN0YXRpYyBpbnQgZ2R0aF9hbmFseXNlX2hkcml2ZShnZHRoX2hhX3N0ciAqaGEsIHVzaG9ydCBoZHJpdmUpOworc3RhdGljIGludCBnZHRoX2FuYWx5c2VfaGRyaXZlKGdkdGhfaGFfc3RyICpoYSwgdTE2IGhkcml2ZSk7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpnZHRoX2N0cl9uYW1lKGdkdGhfaGFfc3RyICpoYSk7CiAKQEAgLTE4OSw3ICsxODksNyBAQAogc3RhdGljIHZvaWQgZ2R0aF9zY3NpX2RvbmUoc3RydWN0IHNjc2lfY21uZCAqc2NwKTsKIAogI2lmZGVmIERFQlVHX0dEVEgKLXN0YXRpYyB1bmNoYXIgICBEZWJ1Z1N0YXRlID0gREVCVUdfR0RUSDsKK3N0YXRpYyB1OCAgIERlYnVnU3RhdGUgPSBERUJVR19HRFRIOwogCiAjaWZkZWYgX19TRVJJQUxfXwogI2RlZmluZSBNQVhfU0VSQlVGIDE2MApAQCAtMjcwLDMwICsyNzAsMzAgQEAKICNlbmRpZgogCiAjaWZkZWYgR0RUSF9TVEFUSVNUSUNTCi1zdGF0aWMgdWxvbmczMiBtYXhfcnE9MCwgbWF4X2luZGV4PTAsIG1heF9zZz0wOworc3RhdGljIHUzMiBtYXhfcnE9MCwgbWF4X2luZGV4PTAsIG1heF9zZz0wOwogI2lmZGVmIElOVF9DT0FMCi1zdGF0aWMgdWxvbmczMiBtYXhfaW50X2NvYWw9MDsKK3N0YXRpYyB1MzIgbWF4X2ludF9jb2FsPTA7CiAjZW5kaWYKLXN0YXRpYyB1bG9uZzMyIGFjdF9pbnRzPTAsIGFjdF9pb3M9MCwgYWN0X3N0YXRzPTAsIGFjdF9ycT0wOworc3RhdGljIHUzMiBhY3RfaW50cz0wLCBhY3RfaW9zPTAsIGFjdF9zdGF0cz0wLCBhY3RfcnE9MDsKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBnZHRoX3RpbWVyOwogI2VuZGlmCiAKLSNkZWZpbmUgUFRSMlVTSE9SVChhKSAgICh1c2hvcnQpKHVsb25nKShhKQorI2RlZmluZSBQVFIyVVNIT1JUKGEpICAgKHUxNikodW5zaWduZWQgbG9uZykoYSkKICNkZWZpbmUgR0RUT0ZGU09GKGEsYikgIChzaXplX3QpJigoKGEqKTApLT5iKQogI2RlZmluZSBJTkRFWF9PSyhpLHQpICAgKChpKTxBUlJBWV9TSVpFKHQpKQogCiAjZGVmaW5lIEJVU19MMlAoYSxiKSAgICAoKGIpPihhKS0+dmlydF9idXMgPyAoYi0xKTooYikpCiAKICNpZmRlZiBDT05GSUdfSVNBCi1zdGF0aWMgdW5jaGFyICAgZ2R0aF9kcnFfdGFiWzRdID0gezUsNiw3LDd9OyAgICAgICAgICAgIC8qIERSUSB0YWJsZSAqLworc3RhdGljIHU4ICAgZ2R0aF9kcnFfdGFiWzRdID0gezUsNiw3LDd9OyAgICAgICAgICAgIC8qIERSUSB0YWJsZSAqLwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfSVNBKQotc3RhdGljIHVuY2hhciAgIGdkdGhfaXJxX3RhYls2XSA9IHswLDEwLDExLDEyLDE0LDB9OyAgICAvKiBJUlEgdGFibGUgKi8KK3N0YXRpYyB1OCAgIGdkdGhfaXJxX3RhYls2XSA9IHswLDEwLDExLDEyLDE0LDB9OyAgICAvKiBJUlEgdGFibGUgKi8KICNlbmRpZgotc3RhdGljIHVuY2hhciAgIGdkdGhfcG9sbGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2xsaW5nIGlmIFRSVUUgKi8KK3N0YXRpYyB1OCAgIGdkdGhfcG9sbGluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2xsaW5nIGlmIFRSVUUgKi8KIHN0YXRpYyBpbnQgICAgICBnZHRoX2N0cl9jb3VudCAgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBjb3VudCAqLwogc3RhdGljIExJU1RfSEVBRChnZHRoX2luc3RhbmNlcyk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGxpc3QgKi8KLXN0YXRpYyB1bmNoYXIgICBnZHRoX3dyaXRlX3Rocm91Z2ggPSBGQUxTRTsgICAgICAgICAgICAgLyogd3JpdGUgdGhyb3VnaCAqLworc3RhdGljIHU4ICAgZ2R0aF93cml0ZV90aHJvdWdoID0gRkFMU0U7ICAgICAgICAgICAgIC8qIHdyaXRlIHRocm91Z2ggKi8KIHN0YXRpYyBnZHRoX2V2dF9zdHIgZWJ1ZmZlcltNQVhfRVZFTlRTXTsgICAgICAgICAgICAgICAgLyogZXZlbnQgYnVmZmVyICovCiBzdGF0aWMgaW50IGVsYXN0aWR4Owogc3RhdGljIGludCBlb2xkaWR4OwpAQCAtMzAzLDcgKzMwMyw3IEBACiAjZGVmaW5lIERPVSAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPVVQgZGF0YSBkaXJlY3Rpb24gKi8KICNkZWZpbmUgRE5PICAgICBESU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGRhdGEgdHJhbnNmZXIgKi8KICNkZWZpbmUgRFVOICAgICBESU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVua25vd24gZGF0YSBkaXJlY3Rpb24gKi8KLXN0YXRpYyB1bmNoYXIgZ2R0aF9kaXJlY3Rpb25fdGFiWzB4MTAwXSA9IHsKK3N0YXRpYyB1OCBnZHRoX2RpcmVjdGlvbl90YWJbMHgxMDBdID0gewogICAgIEROTyxETk8sRElOLERJTixET1UsRElOLERJTixET1UsRElOLERVTixET1UsRE9VLERVTixEVU4sRFVOLERJTiwKICAgICBETk8sRElOLERJTixET1UsRElOLERPVSxETk8sRE5PLERPVSxETk8sRElOLEROTyxESU4sRE9VLEROTyxEVU4sCiAgICAgRElOLERVTixESU4sRFVOLERPVSxESU4sRFVOLERVTixESU4sRElOLERPVSxETk8sRFVOLERJTixET1UsRE9VLApAQCAtMzkwLDcgKzM5MCw3IEBACiBzdGF0aWMgc3RydWN0IGdkdGhfY21uZGluZm8gKmdkdGhfZ2V0X2NtbmRpbmZvKGdkdGhfaGFfc3RyICpoYSkKIHsKIAlzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqcHJpdiA9IE5VTEw7Ci0JdWxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQAogICAgIHJldHVybiBydmFsOwogfQogCi1zdGF0aWMgdm9pZCBnZHRoX2V2YWxfbWFwcGluZyh1bG9uZzMyIHNpemUsIHVsb25nMzIgKmN5bHMsIGludCAqaGVhZHMsIGludCAqc2VjcykKK3N0YXRpYyB2b2lkIGdkdGhfZXZhbF9tYXBwaW5nKHUzMiBzaXplLCB1MzIgKmN5bHMsIGludCAqaGVhZHMsIGludCAqc2VjcykKIHsKICAgICAqY3lscyA9IHNpemUgL0hFQURTL1NFQ1M7CiAgICAgaWYgKCpjeWxzIDw9IE1BWENZTFMpIHsKQEAgLTUxNCw5ICs1MTQsOSBAQAogCiAvKiBjb250cm9sbGVyIHNlYXJjaCBhbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfc2VhcmNoX2Vpc2EodXNob3J0IGVpc2FfYWRyKQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9zZWFyY2hfZWlzYSh1MTYgZWlzYV9hZHIpCiB7Ci0gICAgdWxvbmczMiBpZDsKKyAgICB1MzIgaWQ7CiAgICAgCiAgICAgVFJBQ0UoKCJnZHRoX3NlYXJjaF9laXNhKCkgYWRyLiAleFxuIixlaXNhX2FkcikpOwogICAgIGlkID0gaW5sKGVpc2FfYWRyK0lEMFJFRyk7CkBAIC01MzMsMTMgKzUzMywxMyBAQAogI2VuZGlmIC8qIENPTkZJR19FSVNBICovCiAKICNpZmRlZiBDT05GSUdfSVNBCi1zdGF0aWMgaW50IF9faW5pdCBnZHRoX3NlYXJjaF9pc2EodWxvbmczMiBiaW9zX2FkcikKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfc2VhcmNoX2lzYSh1MzIgYmlvc19hZHIpCiB7CiAgICAgdm9pZCBfX2lvbWVtICphZGRyOwotICAgIHVsb25nMzIgaWQ7CisgICAgdTMyIGlkOwogCiAgICAgVFJBQ0UoKCJnZHRoX3NlYXJjaF9pc2EoKSBiaW9zIGFkci4gJXhcbiIsYmlvc19hZHIpKTsKLSAgICBpZiAoKGFkZHIgPSBpb3JlbWFwKGJpb3NfYWRyK0JJT1NfSURfT0ZGUywgc2l6ZW9mKHVsb25nMzIpKSkgIT0gTlVMTCkgeworICAgIGlmICgoYWRkciA9IGlvcmVtYXAoYmlvc19hZHIrQklPU19JRF9PRkZTLCBzaXplb2YodTMyKSkpICE9IE5VTEwpIHsKICAgICAgICAgaWQgPSByZWFkbChhZGRyKTsKICAgICAgICAgaW91bm1hcChhZGRyKTsKICAgICAgICAgaWYgKGlkID09IEdEVDJfSUQpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHRFQyMDAwICovCkBAIC01NTEsNyArNTUxLDcgQEAKIAogI2lmZGVmIENPTkZJR19QQ0kKIAotc3RhdGljIGJvb2wgZ2R0aF9zZWFyY2hfdm9ydGV4KHVzaG9ydCBkZXZpY2UpCitzdGF0aWMgYm9vbCBnZHRoX3NlYXJjaF92b3J0ZXgodTE2IGRldmljZSkKIHsKIAlpZiAoZGV2aWNlIDw9IFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1NTUpCiAJCXJldHVybiB0cnVlOwpAQCAtNjAzLDkgKzYwMyw5IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBnZHRoX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQl1c2hvcnQgdmVuZG9yID0gcGRldi0+dmVuZG9yOwotCXVzaG9ydCBkZXZpY2UgPSBwZGV2LT5kZXZpY2U7Ci0JdWxvbmcgYmFzZTAsIGJhc2UxLCBiYXNlMjsKKwl1MTYgdmVuZG9yID0gcGRldi0+dmVuZG9yOworCXUxNiBkZXZpY2UgPSBwZGV2LT5kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBiYXNlMCwgYmFzZTEsIGJhc2UyOwogCWludCByYzsKIAlnZHRoX3BjaV9zdHIgZ2R0aF9wY2lzdHI7CiAJZ2R0aF9oYV9zdHIgKmhhID0gTlVMTDsKQEAgLTY1OCwxMCArNjU4LDEwIEBACiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfaW5pdF9laXNhKHVzaG9ydCBlaXNhX2FkcixnZHRoX2hhX3N0ciAqaGEpCitzdGF0aWMgaW50IF9faW5pdCBnZHRoX2luaXRfZWlzYSh1MTYgZWlzYV9hZHIsZ2R0aF9oYV9zdHIgKmhhKQogewotICAgIHVsb25nMzIgcmV0cmllcyxpZDsKLSAgICB1bmNoYXIgcHJvdF92ZXIsZWlzYWNmLGksaXJxX2ZvdW5kOworICAgIHUzMiByZXRyaWVzLGlkOworICAgIHU4IHByb3RfdmVyLGVpc2FjZixpLGlycV9mb3VuZDsKIAogICAgIFRSQUNFKCgiZ2R0aF9pbml0X2Vpc2EoKSBhZHIuICV4XG4iLGVpc2FfYWRyKSk7CiAgICAgCkBAIC02ODgsNyArNjg4LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGhhLT5ibWljID0gZWlzYV9hZHI7Ci0gICAgaGEtPmJyZF9waHlzID0gKHVsb25nMzIpZWlzYV9hZHIgPj4gMTI7CisgICAgaGEtPmJyZF9waHlzID0gKHUzMillaXNhX2FkciA+PiAxMjsKIAogICAgIG91dGwoMCxlaXNhX2FkcitNQUlMQk9YUkVHKTsKICAgICBvdXRsKDAsZWlzYV9hZHIrTUFJTEJPWFJFRys0KTsKQEAgLTc1MiwxMiArNzUyLDEyIEBACiAjZW5kaWYgLyogQ09ORklHX0VJU0EgKi8KIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfaW5pdF9pc2EodWxvbmczMiBiaW9zX2FkcixnZHRoX2hhX3N0ciAqaGEpCitzdGF0aWMgaW50IF9faW5pdCBnZHRoX2luaXRfaXNhKHUzMiBiaW9zX2FkcixnZHRoX2hhX3N0ciAqaGEpCiB7CiAgICAgcmVnaXN0ZXIgZ2R0Ml9kcHJhbV9zdHIgX19pb21lbSAqZHAyX3B0cjsKICAgICBpbnQgaTsKLSAgICB1bmNoYXIgaXJxX2RycSxwcm90X3ZlcjsKLSAgICB1bG9uZzMyIHJldHJpZXM7CisgICAgdTggaXJxX2RycSxwcm90X3ZlcjsKKyAgICB1MzIgcmV0cmllczsKIAogICAgIFRSQUNFKCgiZ2R0aF9pbml0X2lzYSgpIGJpb3MgYWRyLiAleFxuIixiaW9zX2FkcikpOwogCkBAIC04MTIsNyArODEyLDcgQEAKICAgICAgICAgfQogICAgICAgICBnZHRoX2RlbGF5KDEpOwogICAgIH0KLSAgICBwcm90X3ZlciA9ICh1bmNoYXIpcmVhZGwoJmRwMl9wdHItPnUuaWMuU19JbmZvWzBdKTsKKyAgICBwcm90X3ZlciA9ICh1OClyZWFkbCgmZHAyX3B0ci0+dS5pYy5TX0luZm9bMF0pOwogICAgIHdyaXRlYigwLCAmZHAyX3B0ci0+dS5pYy5TdGF0dXMpOwogICAgIHdyaXRlYigweGZmLCAmZHAyX3B0ci0+aW8uaXJxZGVsKTsKICAgICBpZiAocHJvdF92ZXIgIT0gUFJPVE9DT0xfVkVSU0lPTikgewpAQCAtODU5LDkgKzg1OSw5IEBACiAgICAgcmVnaXN0ZXIgZ2R0Nl9kcHJhbV9zdHIgX19pb21lbSAqZHA2X3B0cjsKICAgICByZWdpc3RlciBnZHQ2Y19kcHJhbV9zdHIgX19pb21lbSAqZHA2Y19wdHI7CiAgICAgcmVnaXN0ZXIgZ2R0Nm1fZHByYW1fc3RyIF9faW9tZW0gKmRwNm1fcHRyOwotICAgIHVsb25nMzIgcmV0cmllczsKLSAgICB1bmNoYXIgcHJvdF92ZXI7Ci0gICAgdXNob3J0IGNvbW1hbmQ7CisgICAgdTMyIHJldHJpZXM7CisgICAgdTggcHJvdF92ZXI7CisgICAgdTE2IGNvbW1hbmQ7CiAgICAgaW50IGksIGZvdW5kID0gRkFMU0U7CiAKICAgICBUUkFDRSgoImdkdGhfaW5pdF9wY2koKVxuIikpOwpAQCAtODcxLDcgKzg3MSw3IEBACiAgICAgZWxzZQogICAgICAgICBoYS0+b2VtX2lkID0gT0VNX0lEX0lDUDsKICAgICBoYS0+YnJkX3BoeXMgPSAocGRldi0+YnVzLT5udW1iZXIgPDwgOCkgfCAocGRldi0+ZGV2Zm4gJiAweGY4KTsKLSAgICBoYS0+c3R5cGUgPSAodWxvbmczMilwZGV2LT5kZXZpY2U7CisgICAgaGEtPnN0eXBlID0gKHUzMilwZGV2LT5kZXZpY2U7CiAgICAgaGEtPmlycSA9IHBkZXYtPmlycTsKICAgICBoYS0+cGRldiA9IHBkZXY7CiAgICAgCkBAIC04OTEsNyArODkxLDcgQEAKICAgICAgICAgICAgIGZvdW5kID0gRkFMU0U7CiAgICAgICAgICAgICBmb3IgKGkgPSAweEM4MDAwOyBpIDwgMHhFODAwMDsgaSArPSAweDQwMDApIHsKICAgICAgICAgICAgICAgICBpb3VubWFwKGhhLT5icmQpOwotICAgICAgICAgICAgICAgIGhhLT5icmQgPSBpb3JlbWFwKGksIHNpemVvZih1c2hvcnQpKTsgCisgICAgICAgICAgICAgICAgaGEtPmJyZCA9IGlvcmVtYXAoaSwgc2l6ZW9mKHUxNikpOyAKICAgICAgICAgICAgICAgICBpZiAoaGEtPmJyZCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIHByaW50aygiR0RULVBDSTogSW5pdGlhbGl6YXRpb24gZXJyb3IgKERQTUVNIHJlbWFwIGVycm9yKVxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnZHRoX2RlbGF5KDEpOwogICAgICAgICB9Ci0gICAgICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHA2X3B0ci0+dS5pYy5TX0luZm9bMF0pOworICAgICAgICBwcm90X3ZlciA9ICh1OClyZWFkbCgmZHA2X3B0ci0+dS5pYy5TX0luZm9bMF0pOwogICAgICAgICB3cml0ZWIoMCwgJmRwNl9wdHItPnUuaWMuU19TdGF0dXMpOwogICAgICAgICB3cml0ZWIoMHhmZiwgJmRwNl9wdHItPmlvLmlycWRlbCk7CiAgICAgICAgIGlmIChwcm90X3ZlciAhPSBQUk9UT0NPTF9WRVJTSU9OKSB7CkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogICAgICAgICAgICAgZm91bmQgPSBGQUxTRTsKICAgICAgICAgICAgIGZvciAoaSA9IDB4QzgwMDA7IGkgPCAweEU4MDAwOyBpICs9IDB4NDAwMCkgewogICAgICAgICAgICAgICAgIGlvdW5tYXAoaGEtPmJyZCk7Ci0gICAgICAgICAgICAgICAgaGEtPmJyZCA9IGlvcmVtYXAoaSwgc2l6ZW9mKHVzaG9ydCkpOyAKKyAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodTE2KSk7IAogICAgICAgICAgICAgICAgIGlmIChoYS0+YnJkID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbml0aWFsaXphdGlvbiBlcnJvciAoRFBNRU0gcmVtYXAgZXJyb3IpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDU5LDcgKzEwNTksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ2R0aF9kZWxheSgxKTsKICAgICAgICAgfQotICAgICAgICBwcm90X3ZlciA9ICh1bmNoYXIpcmVhZGwoJmRwNmNfcHRyLT51LmljLlNfSW5mb1swXSk7CisgICAgICAgIHByb3RfdmVyID0gKHU4KXJlYWRsKCZkcDZjX3B0ci0+dS5pYy5TX0luZm9bMF0pOwogICAgICAgICB3cml0ZWIoMCwgJmRwNmNfcHRyLT51LmljLlN0YXR1cyk7CiAgICAgICAgIGlmIChwcm90X3ZlciAhPSBQUk9UT0NPTF9WRVJTSU9OKSB7CiAgICAgICAgICAgICBwcmludGsoIkdEVC1QQ0k6IElsbGVnYWwgcHJvdG9jb2wgdmVyc2lvblxuIik7CkBAIC0xMTI4LDcgKzExMjgsNyBAQAogICAgICAgICAgICAgZm91bmQgPSBGQUxTRTsKICAgICAgICAgICAgIGZvciAoaSA9IDB4QzgwMDA7IGkgPCAweEU4MDAwOyBpICs9IDB4NDAwMCkgewogICAgICAgICAgICAgICAgIGlvdW5tYXAoaGEtPmJyZCk7Ci0gICAgICAgICAgICAgICAgaGEtPmJyZCA9IGlvcmVtYXAoaSwgc2l6ZW9mKHVzaG9ydCkpOyAKKyAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodTE2KSk7IAogICAgICAgICAgICAgICAgIGlmIChoYS0+YnJkID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbml0aWFsaXphdGlvbiBlcnJvciAoRFBNRU0gcmVtYXAgZXJyb3IpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTgwLDcgKzExODAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ2R0aF9kZWxheSgxKTsKICAgICAgICAgfQotICAgICAgICBwcm90X3ZlciA9ICh1bmNoYXIpcmVhZGwoJmRwNm1fcHRyLT51LmljLlNfSW5mb1swXSk7CisgICAgICAgIHByb3RfdmVyID0gKHU4KXJlYWRsKCZkcDZtX3B0ci0+dS5pYy5TX0luZm9bMF0pOwogICAgICAgICB3cml0ZWIoMCwgJmRwNm1fcHRyLT51LmljLlNfU3RhdHVzKTsKICAgICAgICAgaWYgKHByb3RfdmVyICE9IFBST1RPQ09MX1ZFUlNJT04pIHsKICAgICAgICAgICAgIHByaW50aygiR0RULVBDSTogSWxsZWdhbCBwcm90b2NvbCB2ZXJzaW9uXG4iKTsKQEAgLTEyMjMsNyArMTIyMyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnZHRoX2RlbGF5KDEpOwogICAgICAgICB9Ci0gICAgICAgIHByb3RfdmVyID0gKHVuY2hhcikocmVhZGwoJmRwNm1fcHRyLT51LmljLlNfSW5mb1swXSkgPj4gMTYpOworICAgICAgICBwcm90X3ZlciA9ICh1OCkocmVhZGwoJmRwNm1fcHRyLT51LmljLlNfSW5mb1swXSkgPj4gMTYpOwogICAgICAgICB3cml0ZWIoMCwgJmRwNm1fcHRyLT51LmljLlNfU3RhdHVzKTsKICAgICAgICAgaWYgKHByb3RfdmVyIDwgMHgyYikgICAgICAvKiBGVyA8IHguNDM6IG5vIDY0LWJpdCBETUEgc3VwcG9ydCAqLwogICAgICAgICAgICAgaGEtPmRtYTY0X3N1cHBvcnQgPSAwOwpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGdkdGhfZW5hYmxlX2ludChnZHRoX2hhX3N0ciAqaGEpCiB7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBnZHQyX2RwcmFtX3N0ciBfX2lvbWVtICpkcDJfcHRyOwogICAgIGdkdDZfZHByYW1fc3RyIF9faW9tZW0gKmRwNl9wdHI7CiAgICAgZ2R0Nm1fZHByYW1fc3RyIF9faW9tZW0gKmRwNm1fcHRyOwpAQCAtMTI3NCwxNCArMTI3NCwxNCBAQAogfQogCiAvKiByZXR1cm4gSVN0YXR1cyBpZiBpbnRlcnJ1cHQgd2FzIGZyb20gdGhpcyBjYXJkIGVsc2UgMCAqLwotc3RhdGljIHVuY2hhciBnZHRoX2dldF9zdGF0dXMoZ2R0aF9oYV9zdHIgKmhhKQorc3RhdGljIHU4IGdkdGhfZ2V0X3N0YXR1cyhnZHRoX2hhX3N0ciAqaGEpCiB7Ci0gICAgdW5jaGFyIElTdGF0dXMgPSAwOworICAgIHU4IElTdGF0dXMgPSAwOwogCiAgICAgVFJBQ0UoKCJnZHRoX2dldF9zdGF0dXMoKSBpcnEgJWQgY3RyX2NvdW50ICVkXG4iLCBoYS0+aXJxLCBnZHRoX2N0cl9jb3VudCkpOwogCiAgICAgICAgIGlmIChoYS0+dHlwZSA9PSBHRFRfRUlTQSkKLSAgICAgICAgICAgIElTdGF0dXMgPSBpbmIoKHVzaG9ydCloYS0+Ym1pYyArIEVET09SUkVHKTsKKyAgICAgICAgICAgIElTdGF0dXMgPSBpbmIoKHUxNiloYS0+Ym1pYyArIEVET09SUkVHKTsKICAgICAgICAgZWxzZSBpZiAoaGEtPnR5cGUgPT0gR0RUX0lTQSkKICAgICAgICAgICAgIElTdGF0dXMgPQogICAgICAgICAgICAgICAgIHJlYWRiKCYoKGdkdDJfZHByYW1fc3RyIF9faW9tZW0gKiloYS0+YnJkKS0+dS5pYy5DbWRfSW5kZXgpOwpAQCAtMTMyOSw3ICsxMzI5LDcgQEAKICAgICAgICAgaWYgKGhhLT5jbWRfdGFiW2ldLmNtbmQgPT0gVU5VU0VEX0NNTkQpIHsKICAgICAgICAgICAgIGhhLT5jbWRfdGFiW2ldLmNtbmQgPSBoYS0+cGNjYi0+UmVxdWVzdEJ1ZmZlcjsKICAgICAgICAgICAgIGhhLT5jbWRfdGFiW2ldLnNlcnZpY2UgPSBoYS0+cGNjYi0+U2VydmljZTsKLSAgICAgICAgICAgIGhhLT5wY2NiLT5Db21tYW5kSW5kZXggPSAodWxvbmczMilpKzI7CisgICAgICAgICAgICBoYS0+cGNjYi0+Q29tbWFuZEluZGV4ID0gKHUzMilpKzI7CiAgICAgICAgICAgICByZXR1cm4gKGkrMik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzYyLDcgKzEzNjIsNyBAQAogICAgIHJlZ2lzdGVyIGdkdDZjX2RwcmFtX3N0ciBfX2lvbWVtICpkcDZjX3B0cjsKICAgICBnZHQ2X2RwcmFtX3N0ciBfX2lvbWVtICpkcDZfcHRyOwogICAgIGdkdDJfZHByYW1fc3RyIF9faW9tZW0gKmRwMl9wdHI7Ci0gICAgdXNob3J0IGNwX2NvdW50LGRwX29mZnNldCxjbWRfbm87CisgICAgdTE2IGNwX2NvdW50LGRwX29mZnNldCxjbWRfbm87CiAgICAgCiAgICAgVFJBQ0UoKCJnZHRoX2NvcHlfY29tbWFuZCgpIGhhbnVtICVkXG4iLCBoYS0+aGFudW0pKTsKIApAQCAtMTM4NiwyOCArMTM4NiwyOCBAQAogICAgICAgICBkcDJfcHRyID0gaGEtPmJyZDsKICAgICAgICAgd3JpdGV3KGRwX29mZnNldCArIERQTUVNX0NPTU1BTkRfT0ZGU0VULAogICAgICAgICAgICAgICAgICAgICAmZHAyX3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10ub2Zmc2V0KTsKLSAgICAgICAgd3JpdGV3KCh1c2hvcnQpY21kX3B0ci0+U2VydmljZSwKKyAgICAgICAgd3JpdGV3KCh1MTYpY21kX3B0ci0+U2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgJmRwMl9wdHItPnUuaWMuY29tbV9xdWV1ZVtjbWRfbm9dLnNlcnZfaWQpOwogICAgICAgICBtZW1jcHlfdG9pbygmZHAyX3B0ci0+dS5pYy5nZHRfZHByX2NtZFtkcF9vZmZzZXRdLGNtZF9wdHIsY3BfY291bnQpOwogICAgIH0gZWxzZSBpZiAoaGEtPnR5cGUgPT0gR0RUX1BDSSkgewogICAgICAgICBkcDZfcHRyID0gaGEtPmJyZDsKICAgICAgICAgd3JpdGV3KGRwX29mZnNldCArIERQTUVNX0NPTU1BTkRfT0ZGU0VULAogICAgICAgICAgICAgICAgICAgICAmZHA2X3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10ub2Zmc2V0KTsKLSAgICAgICAgd3JpdGV3KCh1c2hvcnQpY21kX3B0ci0+U2VydmljZSwKKyAgICAgICAgd3JpdGV3KCh1MTYpY21kX3B0ci0+U2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgJmRwNl9wdHItPnUuaWMuY29tbV9xdWV1ZVtjbWRfbm9dLnNlcnZfaWQpOwogICAgICAgICBtZW1jcHlfdG9pbygmZHA2X3B0ci0+dS5pYy5nZHRfZHByX2NtZFtkcF9vZmZzZXRdLGNtZF9wdHIsY3BfY291bnQpOwogICAgIH0gZWxzZSBpZiAoaGEtPnR5cGUgPT0gR0RUX1BDSU5FVykgewogICAgICAgICBkcDZjX3B0ciA9IGhhLT5icmQ7CiAgICAgICAgIHdyaXRldyhkcF9vZmZzZXQgKyBEUE1FTV9DT01NQU5EX09GRlNFVCwKICAgICAgICAgICAgICAgICAgICAgJmRwNmNfcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHA2Y19wdHItPnUuaWMuY29tbV9xdWV1ZVtjbWRfbm9dLnNlcnZfaWQpOwogICAgICAgICBtZW1jcHlfdG9pbygmZHA2Y19wdHItPnUuaWMuZ2R0X2Rwcl9jbWRbZHBfb2Zmc2V0XSxjbWRfcHRyLGNwX2NvdW50KTsKICAgICB9IGVsc2UgaWYgKGhhLT50eXBlID09IEdEVF9QQ0lNUFIpIHsKICAgICAgICAgZHA2bV9wdHIgPSBoYS0+YnJkOwogICAgICAgICB3cml0ZXcoZHBfb2Zmc2V0ICsgRFBNRU1fQ09NTUFORF9PRkZTRVQsCiAgICAgICAgICAgICAgICAgICAgICZkcDZtX3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10ub2Zmc2V0KTsKLSAgICAgICAgd3JpdGV3KCh1c2hvcnQpY21kX3B0ci0+U2VydmljZSwKKyAgICAgICAgd3JpdGV3KCh1MTYpY21kX3B0ci0+U2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgJmRwNm1fcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5zZXJ2X2lkKTsKICAgICAgICAgbWVtY3B5X3RvaW8oJmRwNm1fcHRyLT51LmljLmdkdF9kcHJfY21kW2RwX29mZnNldF0sY21kX3B0cixjcF9jb3VudCk7CiAgICAgfQpAQCAtMTQyMCwxNCArMTQyMCwxNCBAQAogCiAjaWZkZWYgR0RUSF9TVEFUSVNUSUNTCiAgICAgewotICAgICAgICB1bG9uZzMyIGksajsKKyAgICAgICAgdTMyIGksajsKICAgICAgICAgZm9yIChpPTAsaj0wOyBqPEdEVEhfTUFYQ01EUzsgKytqKSB7CiAgICAgICAgICAgICBpZiAoaGEtPmNtZF90YWJbal0uY21uZCAhPSBVTlVTRURfQ01ORCkKICAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1heF9pbmRleCA8IGkpIHsKICAgICAgICAgICAgIG1heF9pbmRleCA9IGk7Ci0gICAgICAgICAgICBUUkFDRTMoKCJHRFQ6IG1heF9pbmRleCA9ICVkXG4iLCh1c2hvcnQpaSkpOworICAgICAgICAgICAgVFJBQ0UzKCgiR0RUOiBtYXhfaW5kZXggPSAlZFxuIiwodTE2KWkpKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtMTQ1MCw3ICsxNDUwLDcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgZ2R0aF93YWl0KGdkdGhfaGFfc3RyICpoYSwgaW50IGluZGV4LCB1bG9uZzMyIHRpbWUpCitzdGF0aWMgaW50IGdkdGhfd2FpdChnZHRoX2hhX3N0ciAqaGEsIGludCBpbmRleCwgdTMyIHRpbWUpCiB7CiAgICAgaW50IGFuc3dlcl9mb3VuZCA9IEZBTFNFOwogICAgIGludCB3YWl0X2luZGV4ID0gMDsKQEAgLTE0NzYsOCArMTQ3Niw4IEBACiB9CiAKIAotc3RhdGljIGludCBnZHRoX2ludGVybmFsX2NtZChnZHRoX2hhX3N0ciAqaGEsIHVuY2hhciBzZXJ2aWNlLCB1c2hvcnQgb3Bjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZzMyIHAxLCB1bG9uZzY0IHAyLCB1bG9uZzY0IHAzKQorc3RhdGljIGludCBnZHRoX2ludGVybmFsX2NtZChnZHRoX2hhX3N0ciAqaGEsIHU4IHNlcnZpY2UsIHUxNiBvcGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBwMSwgdTY0IHAyLCB1NjQgcDMpCiB7CiAgICAgcmVnaXN0ZXIgZ2R0aF9jbWRfc3RyICpjbWRfcHRyOwogICAgIGludCByZXRyaWVzLGluZGV4OwpAQCAtMTUwMSwzNSArMTUwMSwzNSBAQAogICAgICAgICBpZiAoc2VydmljZSA9PSBDQUNIRVNFUlZJQ0UpIHsKICAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gR0RUX0lPQ1RMKSB7CiAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5pb2N0bC5zdWJmdW5jID0gcDE7Ci0gICAgICAgICAgICAgICAgY21kX3B0ci0+dS5pb2N0bC5jaGFubmVsID0gKHVsb25nMzIpcDI7Ci0gICAgICAgICAgICAgICAgY21kX3B0ci0+dS5pb2N0bC5wYXJhbV9zaXplID0gKHVzaG9ydClwMzsKKyAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLmNoYW5uZWwgPSAodTMyKXAyOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuaW9jdGwucGFyYW1fc2l6ZSA9ICh1MTYpcDM7CiAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5pb2N0bC5wX3BhcmFtID0gaGEtPnNjcmF0Y2hfcGh5czsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGhhLT5jYWNoZV9mZWF0ICYgR0RUXzY0QklUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGU2NC5EZXZpY2VObyA9ICh1c2hvcnQpcDE7CisgICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGU2NC5EZXZpY2VObyA9ICh1MTYpcDE7CiAgICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGU2NC5CbG9ja05vICA9IHAyOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGUuRGV2aWNlTm8gPSAodXNob3J0KXAxOwotICAgICAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmNhY2hlLkJsb2NrTm8gID0gKHVsb25nMzIpcDI7CisgICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGUuRGV2aWNlTm8gPSAodTE2KXAxOworICAgICAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmNhY2hlLkJsb2NrTm8gID0gKHUzMilwMjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZSA9PSBTQ1NJUkFXU0VSVklDRSkgewogICAgICAgICAgICAgaWYgKGhhLT5yYXdfZmVhdCAmIEdEVF82NEJJVCkgewogICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3NjQuZGlyZWN0aW9uICA9IHAxOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3NjQuYnVzICAgICAgICA9ICh1bmNoYXIpcDI7Ci0gICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC50YXJnZXQgICAgID0gKHVuY2hhcilwMzsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdzY0Lmx1biAgICAgICAgPSAodW5jaGFyKShwMyA+PiA4KTsKKyAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdzY0LmJ1cyAgICAgICAgPSAodTgpcDI7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC50YXJnZXQgICAgID0gKHU4KXAzOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3NjQubHVuICAgICAgICA9ICh1OCkocDMgPj4gOCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LmRpcmVjdGlvbiAgPSBwMTsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdy5idXMgICAgICAgID0gKHVuY2hhcilwMjsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdy50YXJnZXQgICAgID0gKHVuY2hhcilwMzsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdy5sdW4gICAgICAgID0gKHVuY2hhcikocDMgPj4gOCk7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXcuYnVzICAgICAgICA9ICh1OClwMjsKKyAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdy50YXJnZXQgICAgID0gKHU4KXAzOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3Lmx1biAgICAgICAgPSAodTgpKHAzID4+IDgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHNlcnZpY2UgPT0gU0NSRUVOU0VSVklDRSkgewogICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBHRFRfUkVBTFRJTUUpIHsKLSAgICAgICAgICAgICAgICAqKHVsb25nMzIgKikmY21kX3B0ci0+dS5zY3JlZW4uc3UuZGF0YVswXSA9IHAxOwotICAgICAgICAgICAgICAgICoodWxvbmczMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzRdID0gKHVsb25nMzIpcDI7Ci0gICAgICAgICAgICAgICAgKih1bG9uZzMyICopJmNtZF9wdHItPnUuc2NyZWVuLnN1LmRhdGFbOF0gPSAodWxvbmczMilwMzsKKyAgICAgICAgICAgICAgICAqKHUzMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzBdID0gcDE7CisgICAgICAgICAgICAgICAgKih1MzIgKikmY21kX3B0ci0+dS5zY3JlZW4uc3UuZGF0YVs0XSA9ICh1MzIpcDI7CisgICAgICAgICAgICAgICAgKih1MzIgKikmY21kX3B0ci0+dS5zY3JlZW4uc3UuZGF0YVs4XSA9ICh1MzIpcDM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaGEtPmNtZF9sZW4gICAgICAgICAgPSBzaXplb2YoZ2R0aF9jbWRfc3RyKTsKQEAgLTE1NTUsOSArMTU1NSw5IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdkdGhfc2VhcmNoX2RyaXZlcyhnZHRoX2hhX3N0ciAqaGEpCiB7Ci0gICAgdXNob3J0IGNkZXZfY250LCBpOworICAgIHUxNiBjZGV2X2NudCwgaTsKICAgICBpbnQgb2s7Ci0gICAgdWxvbmczMiBidXNfbm8sIGRydl9jbnQsIGRydl9ubywgajsKKyAgICB1MzIgYnVzX25vLCBkcnZfY250LCBkcnZfbm8sIGo7CiAgICAgZ2R0aF9nZXRjaF9zdHIgKmNobjsKICAgICBnZHRoX2RybGlzdF9zdHIgKmRybDsKICAgICBnZHRoX2lvY2hhbl9zdHIgKmlvYzsKQEAgLTE1NzAsOCArMTU3MCw4IEBACiAjZW5kaWYKIAogI2lmZGVmIEdEVEhfUlRDCi0gICAgdW5jaGFyIHJ0Y1sxMl07Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdTggcnRjWzEyXTsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogI2VuZGlmICAgICAKICAgIAogICAgIFRSQUNFKCgiZ2R0aF9zZWFyY2hfZHJpdmVzKCkgaGFudW0gJWRcbiIsIGhhLT5oYW51bSkpOwpAQCAtMTU4NCw3ICsxNTg0LDcgQEAKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgaGEtPnNjcmVlbl9mZWF0ID0gR0RUXzY0QklUOwogICAgIH0KLSAgICBpZiAoZm9yY2VfZG1hMzIgfHwgKCFvayAmJiBoYS0+c3RhdHVzID09ICh1c2hvcnQpU19OT0ZVTkMpKQorICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHUxNilTX05PRlVOQykpCiAgICAgICAgIG9rID0gZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIFNDUkVFTlNFUlZJQ0UsIEdEVF9JTklULCAwLCAwLCAwKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIHByaW50aygiR0RULUhBICVkOiBJbml0aWFsaXphdGlvbiBlcnJvciBzY3JlZW4gc2VydmljZSAoY29kZSAlZClcbiIsCkBAIC0xNjA5LDExICsxNjA5LDExIEBACiAgICAgICAgICAgICBydGNbal0gPSBDTU9TX1JFQUQoaik7CiAgICAgfSB3aGlsZSAocnRjWzBdICE9IENNT1NfUkVBRCgwKSk7CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKLSAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKTogUlRDOiAleC8leC8leFxuIiwqKHVsb25nMzIgKikmcnRjWzBdLAotICAgICAgICAgICAgKih1bG9uZzMyICopJnJ0Y1s0XSwgKih1bG9uZzMyICopJnJ0Y1s4XSkpOworICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyaXZlcygpOiBSVEM6ICV4LyV4LyV4XG4iLCoodTMyICopJnJ0Y1swXSwKKyAgICAgICAgICAgICoodTMyICopJnJ0Y1s0XSwgKih1MzIgKikmcnRjWzhdKSk7CiAgICAgLyogMy4gc2VuZCB0byBjb250cm9sbGVyIGZpcm13YXJlICovCi0gICAgZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIFNDUkVFTlNFUlZJQ0UsIEdEVF9SRUFMVElNRSwgKih1bG9uZzMyICopJnJ0Y1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAqKHVsb25nMzIgKikmcnRjWzRdLCAqKHVsb25nMzIgKikmcnRjWzhdKTsKKyAgICBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NSRUVOU0VSVklDRSwgR0RUX1JFQUxUSU1FLCAqKHUzMiAqKSZydGNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgKih1MzIgKikmcnRjWzRdLCAqKHUzMiAqKSZydGNbOF0pOwogI2VuZGlmICAKICAKICAgICAvKiB1bmZyZWV6ZSBhbGwgSU9zICovCkBAIC0xNjI3LDcgKzE2MjcsNyBAQAogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICBoYS0+Y2FjaGVfZmVhdCA9IEdEVF82NEJJVDsKICAgICB9Ci0gICAgaWYgKGZvcmNlX2RtYTMyIHx8ICghb2sgJiYgaGEtPnN0YXR1cyA9PSAodXNob3J0KVNfTk9GVU5DKSkKKyAgICBpZiAoZm9yY2VfZG1hMzIgfHwgKCFvayAmJiBoYS0+c3RhdHVzID09ICh1MTYpU19OT0ZVTkMpKQogICAgICAgICBvayA9IGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9JTklULCBMSU5VWF9PUywgMCwgMCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBwcmludGsoIkdEVC1IQSAlZDogSW5pdGlhbGl6YXRpb24gZXJyb3IgY2FjaGUgc2VydmljZSAoY29kZSAlZClcbiIsCkBAIC0xNjM1LDcgKzE2MzUsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHJpdmVzKCk6IENBQ0hFU0VSVklDRSBpbml0aWFsaXplZFxuIikpOwotICAgIGNkZXZfY250ID0gKHVzaG9ydCloYS0+aW5mbzsKKyAgICBjZGV2X2NudCA9ICh1MTYpaGEtPmluZm87CiAgICAgaGEtPmZ3X3ZlcnMgPSBoYS0+c2VydmljZTsKIAogI2lmZGVmIElOVF9DT0FMCkBAIC0xNjQ0LDcgKzE2NDQsNyBAQAogICAgICAgICBwbW9kID0gKGdkdGhfcGVyZl9tb2RlcyAqKWhhLT5wc2NyYXRjaDsKICAgICAgICAgcG1vZC0+dmVyc2lvbiAgICAgICAgICA9IDE7CiAgICAgICAgIHBtb2QtPnN0X21vZGUgICAgICAgICAgPSAxOyAgICAvKiBlbmFibGUgb25lIHN0YXR1cyBidWZmZXIgKi8KLSAgICAgICAgKigodWxvbmc2NCAqKSZwbW9kLT5zdF9idWZmX2FkZHIxKSA9IGhhLT5jb2FsX3N0YXRfcGh5czsKKyAgICAgICAgKigodTY0ICopJnBtb2QtPnN0X2J1ZmZfYWRkcjEpID0gaGEtPmNvYWxfc3RhdF9waHlzOwogICAgICAgICBwbW9kLT5zdF9idWZmX2luZHgxICAgID0gQ09BTElOREVYOwogICAgICAgICBwbW9kLT5zdF9idWZmX2FkZHIyICAgID0gMDsKICAgICAgICAgcG1vZC0+c3RfYnVmZl91X2FkZHIyICA9IDA7CkBAIC0xNzA1LDcgKzE3MDUsNyBAQAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGhhLT5idXNfaWRbYnVzX25vXSA9IDB4ZmY7CiAgICAgICAgIH0gICAgICAgCi0gICAgICAgIGhhLT5idXNfY250ID0gKHVuY2hhcilidXNfbm87CisgICAgICAgIGhhLT5idXNfY250ID0gKHU4KWJ1c19ubzsKICAgICB9CiAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHJpdmVzKCkgJWQgY2hhbm5lbHNcbiIsaGEtPmJ1c19jbnQpKTsKIApAQCAtMTc4OSwxMiArMTc4OSwxMiBAQAogCiAgICAgICAgIC8qIGxvZ2ljYWwgZHJpdmVzICovCiAgICAgICAgIGlmIChnZHRoX2ludGVybmFsX2NtZChoYSwgQ0FDSEVTRVJWSUNFLCBHRFRfSU9DVEwsIENBQ0hFX0RSVl9DTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlZBTElEX0NIQU5ORUwsc2l6ZW9mKHVsb25nMzIpKSkgewotICAgICAgICAgICAgZHJ2X2NudCA9ICoodWxvbmczMiAqKWhhLT5wc2NyYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBTk5FTCxzaXplb2YodTMyKSkpIHsKKyAgICAgICAgICAgIGRydl9jbnQgPSAqKHUzMiAqKWhhLT5wc2NyYXRjaDsKICAgICAgICAgICAgIGlmIChnZHRoX2ludGVybmFsX2NtZChoYSwgQ0FDSEVTRVJWSUNFLCBHRFRfSU9DVEwsIENBQ0hFX0RSVl9MSVNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBTk5FTCxkcnZfY250ICogc2l6ZW9mKHVsb25nMzIpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBTk5FTCxkcnZfY250ICogc2l6ZW9mKHUzMikpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGRydl9jbnQ7ICsraikgewotICAgICAgICAgICAgICAgICAgICBkcnZfbm8gPSAoKHVsb25nMzIgKiloYS0+cHNjcmF0Y2gpW2pdOworICAgICAgICAgICAgICAgICAgICBkcnZfbm8gPSAoKHUzMiAqKWhhLT5wc2NyYXRjaClbal07CiAgICAgICAgICAgICAgICAgICAgIGlmIChkcnZfbm8gPCBNQVhfTERSSVZFUykgewogICAgICAgICAgICAgICAgICAgICAgICAgaGEtPmhkcltkcnZfbm9dLmlzX2xvZ2RydiA9IFRSVUU7CiAgICAgICAgICAgICAgICAgICAgICAgICBUUkFDRTIoKCJEcml2ZSAlZCBpcyBsb2cuIGRyaXZlXG4iLGRydl9ubykpOwpAQCAtMTgzOCw3ICsxODM4LDcgQEAKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgaGEtPnJhd19mZWF0ID0gR0RUXzY0QklUOwogICAgIH0KLSAgICBpZiAoZm9yY2VfZG1hMzIgfHwgKCFvayAmJiBoYS0+c3RhdHVzID09ICh1c2hvcnQpU19OT0ZVTkMpKQorICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHUxNilTX05PRlVOQykpCiAgICAgICAgIG9rID0gZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIFNDU0lSQVdTRVJWSUNFLCBHRFRfSU5JVCwgMCwgMCwgMCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBwcmludGsoIkdEVC1IQSAlZDogSW5pdGlhbGl6YXRpb24gZXJyb3IgcmF3IHNlcnZpY2UgKGNvZGUgJWQpXG4iLApAQCAtMTg1NCw3ICsxODU0LDcgQEAKICAgICAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBTQ1NJUkFXU0VSVklDRSwgR0RUX0dFVF9GRUFULCAwLCAwLCAwKSkgewogICAgICAgICAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHIoKTogZ2V0IGZlYXQgUkFXU0VSVklDRSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgaGEtPmluZm8pKTsKLSAgICAgICAgICAgIGhhLT5yYXdfZmVhdCB8PSAodXNob3J0KWhhLT5pbmZvOworICAgICAgICAgICAgaGEtPnJhd19mZWF0IHw9ICh1MTYpaGEtPmluZm87CiAgICAgICAgIH0KICAgICB9IAogCkBAIC0xODY1LDcgKzE4NjUsNyBAQAogICAgICAgICBpZiAoZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIENBQ0hFU0VSVklDRSwgR0RUX0dFVF9GRUFULCAwLCAwLCAwKSkgewogICAgICAgICAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHIoKTogZ2V0IGZlYXQgQ0FDSEVTRVJWLiAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgaGEtPmluZm8pKTsKLSAgICAgICAgICAgIGhhLT5jYWNoZV9mZWF0IHw9ICh1c2hvcnQpaGEtPmluZm87CisgICAgICAgICAgICBoYS0+Y2FjaGVfZmVhdCB8PSAodTE2KWhhLT5pbmZvOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xOTIzLDkgKzE5MjMsOSBAQAogICAgIHJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGdkdGhfYW5hbHlzZV9oZHJpdmUoZ2R0aF9oYV9zdHIgKmhhLCB1c2hvcnQgaGRyaXZlKQorc3RhdGljIGludCBnZHRoX2FuYWx5c2VfaGRyaXZlKGdkdGhfaGFfc3RyICpoYSwgdTE2IGhkcml2ZSkKIHsKLSAgICB1bG9uZzMyIGRydl9jeWxzOworICAgIHUzMiBkcnZfY3lsczsKICAgICBpbnQgZHJ2X2hkcywgZHJ2X3NlY3M7CiAKICAgICBUUkFDRSgoImdkdGhfYW5hbHlzZV9oZHJpdmUoKSBoYW51bSAlZCBkcml2ZSAlZFxuIiwgaGEtPmhhbnVtLCBoZHJpdmUpKTsKQEAgLTE5NDQsMTcgKzE5NDQsMTcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBkcnZfaGRzID0gaGEtPmluZm8yICYgMHhmZjsKICAgICAgICAgZHJ2X3NlY3MgPSAoaGEtPmluZm8yID4+IDgpICYgMHhmZjsKLSAgICAgICAgZHJ2X2N5bHMgPSAodWxvbmczMiloYS0+aGRyW2hkcml2ZV0uc2l6ZSAvIGRydl9oZHMgLyBkcnZfc2VjczsKKyAgICAgICAgZHJ2X2N5bHMgPSAodTMyKWhhLT5oZHJbaGRyaXZlXS5zaXplIC8gZHJ2X2hkcyAvIGRydl9zZWNzOwogICAgIH0KLSAgICBoYS0+aGRyW2hkcml2ZV0uaGVhZHMgPSAodW5jaGFyKWRydl9oZHM7Ci0gICAgaGEtPmhkcltoZHJpdmVdLnNlY3MgID0gKHVuY2hhcilkcnZfc2VjczsKKyAgICBoYS0+aGRyW2hkcml2ZV0uaGVhZHMgPSAodTgpZHJ2X2hkczsKKyAgICBoYS0+aGRyW2hkcml2ZV0uc2VjcyAgPSAodTgpZHJ2X3NlY3M7CiAgICAgLyogcm91bmQgc2l6ZSAqLwogICAgIGhhLT5oZHJbaGRyaXZlXS5zaXplICA9IGRydl9jeWxzICogZHJ2X2hkcyAqIGRydl9zZWNzOwogICAgIAogICAgIGlmIChoYS0+Y2FjaGVfZmVhdCAmIEdEVF82NEJJVCkgewogICAgICAgICBpZiAoZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIENBQ0hFU0VSVklDRSwgR0RUX1hfSU5GTywgaGRyaXZlLCAwLCAwKQogICAgICAgICAgICAgJiYgaGEtPmluZm8yICE9IDApIHsKLSAgICAgICAgICAgIGhhLT5oZHJbaGRyaXZlXS5zaXplID0gKCh1bG9uZzY0KWhhLT5pbmZvMiA8PCAzMikgfCBoYS0+aW5mbzsKKyAgICAgICAgICAgIGhhLT5oZHJbaGRyaXZlXS5zaXplID0gKCh1NjQpaGEtPmluZm8yIDw8IDMyKSB8IGhhLT5pbmZvOwogICAgICAgICB9CiAgICAgfQogICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyKCkgY2RyLiAlZCBzaXplICVkIGhkcyAlZCBzY3MgJWRcbiIsCkBAIC0xOTY0LDcgKzE5NjQsNyBAQAogICAgIGlmIChnZHRoX2ludGVybmFsX2NtZChoYSwgQ0FDSEVTRVJWSUNFLCBHRFRfREVWVFlQRSwgaGRyaXZlLCAwLCAwKSkgewogICAgICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcigpIGNhY2hlIGRyaXZlICVkIGRldnR5cGUgJWRcbiIsCiAgICAgICAgICAgICAgICAgaGRyaXZlLGhhLT5pbmZvKSk7Ci0gICAgICAgIGhhLT5oZHJbaGRyaXZlXS5kZXZ0eXBlID0gKHVzaG9ydCloYS0+aW5mbzsKKyAgICAgICAgaGEtPmhkcltoZHJpdmVdLmRldnR5cGUgPSAodTE2KWhhLT5pbmZvOwogICAgIH0KIAogICAgIC8qIGNsdXN0ZXIgaW5mbyAqLwpAQCAtMTk3MiwxNCArMTk3MiwxNCBAQAogICAgICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcigpIGNhY2hlIGRyaXZlICVkIGNsdXN0ZXIgaW5mbyAlZFxuIiwKICAgICAgICAgICAgICAgICBoZHJpdmUsaGEtPmluZm8pKTsKICAgICAgICAgaWYgKCFzaGFyZWRfYWNjZXNzKQotICAgICAgICAgICAgaGEtPmhkcltoZHJpdmVdLmNsdXN0ZXJfdHlwZSA9ICh1bmNoYXIpaGEtPmluZm87CisgICAgICAgICAgICBoYS0+aGRyW2hkcml2ZV0uY2x1c3Rlcl90eXBlID0gKHU4KWhhLT5pbmZvOwogICAgIH0KIAogICAgIC8qIFIvVyBhdHRyaWJ1dGVzICovCiAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9SV19BVFRSSUJTLCBoZHJpdmUsIDAsIDApKSB7CiAgICAgICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyKCkgY2FjaGUgZHJpdmUgJWQgci93IGF0dHJpYi4gJWRcbiIsCiAgICAgICAgICAgICAgICAgaGRyaXZlLGhhLT5pbmZvKSk7Ci0gICAgICAgIGhhLT5oZHJbaGRyaXZlXS5yd19hdHRyaWJzID0gKHVuY2hhciloYS0+aW5mbzsKKyAgICAgICAgaGEtPmhkcltoZHJpdmVdLnJ3X2F0dHJpYnMgPSAodTgpaGEtPmluZm87CiAgICAgfQogCiAgICAgcmV0dXJuIDE7CkBAIC0xOTg4LDEyICsxOTg4LDEyIEBACiAKIC8qIGNvbW1hbmQgcXVldWVpbmcvc2VuZGluZyBmdW5jdGlvbnMgKi8KIAotc3RhdGljIHZvaWQgZ2R0aF9wdXRxKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVuY2hhciBwcmlvcml0eSkKK3N0YXRpYyB2b2lkIGdkdGhfcHV0cShnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBwcmlvcml0eSkKIHsKICAgICBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqY21uZGluZm8gPSBnZHRoX2NtbmRfcHJpdihzY3ApOwogICAgIHJlZ2lzdGVyIFNjc2lfQ21uZCAqcHNjcDsKICAgICByZWdpc3RlciBTY3NpX0NtbmQgKm5zY3A7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIFRSQUNFKCgiZ2R0aF9wdXRxKCkgcHJpb3JpdHkgJWRcbiIscHJpb3JpdHkpKTsKICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC0yMDIzLDcgKzIwMjMsNyBAQAogICAgICAgICArK2ZsYWdzOwogICAgIGlmIChtYXhfcnEgPCBmbGFncykgewogICAgICAgICBtYXhfcnEgPSBmbGFnczsKLSAgICAgICAgVFJBQ0UzKCgiR0RUOiBtYXhfcnEgPSAlZFxuIiwodXNob3J0KW1heF9ycSkpOworICAgICAgICBUUkFDRTMoKCJHRFQ6IG1heF9ycSA9ICVkXG4iLCh1MTYpbWF4X3JxKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0yMDMyLDkgKzIwMzIsOSBAQAogewogICAgIHJlZ2lzdGVyIFNjc2lfQ21uZCAqcHNjcDsKICAgICByZWdpc3RlciBTY3NpX0NtbmQgKm5zY3A7Ci0gICAgdW5jaGFyIGIsIHQsIGwsIGZpcnN0dGltZTsKLSAgICB1bmNoYXIgdGhpc19jbWQsIG5leHRfY21kOwotICAgIHVsb25nIGZsYWdzID0gMDsKKyAgICB1OCBiLCB0LCBsLCBmaXJzdHRpbWU7CisgICAgdTggdGhpc19jbWQsIG5leHRfY21kOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogICAgIGludCBjbWRfaW5kZXg7CiAKICAgICBUUkFDRSgoImdkdGhfbmV4dCgpIGhhbnVtICVkXG4iLCBoYS0+aGFudW0pKTsKQEAgLTIyODIsMjAgKzIyODIsMjAgQEAKICAqIGJ1ZmZlcnMsIGttYXBfYXRvbWljKCkgYXMgbmVlZGVkLgogICovCiBzdGF0aWMgdm9pZCBnZHRoX2NvcHlfaW50ZXJuYWxfZGF0YShnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCB1c2hvcnQgY291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHUxNiBjb3VudCkKIHsKLSAgICB1c2hvcnQgY3Bjb3VudCxpLCBtYXhfc2cgPSBzY3NpX3NnX2NvdW50KHNjcCk7Ci0gICAgdXNob3J0IGNwc3VtLGNwbm93OworICAgIHUxNiBjcGNvdW50LGksIG1heF9zZyA9IHNjc2lfc2dfY291bnQoc2NwKTsKKyAgICB1MTYgY3BzdW0sY3Bub3c7CiAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzbDsKICAgICBjaGFyICphZGRyZXNzOwogCi0gICAgY3Bjb3VudCA9IG1pbl90KHVzaG9ydCwgY291bnQsIHNjc2lfYnVmZmxlbihzY3ApKTsKKyAgICBjcGNvdW50ID0gbWluX3QodTE2LCBjb3VudCwgc2NzaV9idWZmbGVuKHNjcCkpOwogCiAgICAgaWYgKGNwY291bnQpIHsKICAgICAgICAgY3BzdW09MDsKICAgICAgICAgc2NzaV9mb3JfZWFjaF9zZyhzY3AsIHNsLCBtYXhfc2csIGkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgICAgICAgICBjcG5vdyA9ICh1c2hvcnQpc2wtPmxlbmd0aDsKKyAgICAgICAgICAgIGNwbm93ID0gKHUxNilzbC0+bGVuZ3RoOwogICAgICAgICAgICAgVFJBQ0UoKCJjb3B5X2ludGVybmFsKCkgbm93ICVkIHN1bSAlZCBjb3VudCAlZCAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Bub3csIGNwc3VtLCBjcGNvdW50LCBzY3NpX2J1ZmZsZW4oc2NwKSkpOwogICAgICAgICAgICAgaWYgKGNwc3VtK2Nwbm93ID4gY3Bjb3VudCkgCkBAIC0yMzI1LDcgKzIzMjUsNyBAQAogCiBzdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY2FjaGVfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3ApCiB7Ci0gICAgdW5jaGFyIHQ7CisgICAgdTggdDsKICAgICBnZHRoX2lucV9kYXRhIGlucTsKICAgICBnZHRoX3JkY2FwX2RhdGEgcmRjOwogICAgIGdkdGhfc2Vuc2VfZGF0YSBzZDsKQEAgLTIzODksNyArMjM4OSw3IEBACiAKICAgICAgIGNhc2UgUkVBRF9DQVBBQ0lUWToKICAgICAgICAgVFJBQ0UyKCgiUmVhZCBjYXBhY2l0eSBoZHJpdmUgJWRcbiIsdCkpOwotICAgICAgICBpZiAoaGEtPmhkclt0XS5zaXplID4gKHVsb25nNjQpMHhmZmZmZmZmZikKKyAgICAgICAgaWYgKGhhLT5oZHJbdF0uc2l6ZSA+ICh1NjQpMHhmZmZmZmZmZikKICAgICAgICAgICAgIHJkYy5sYXN0X2Jsb2NrX25vID0gMHhmZmZmZmZmZjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmRjLmxhc3RfYmxvY2tfbm8gPSBjcHVfdG9fYmUzMihoYS0+aGRyW3RdLnNpemUtMSk7CkBAIC0yNDI1LDEyICsyNDI1LDEyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2R0aF9maWxsX2NhY2hlX2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1c2hvcnQgaGRyaXZlKQorc3RhdGljIGludCBnZHRoX2ZpbGxfY2FjaGVfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHUxNiBoZHJpdmUpCiB7CiAgICAgcmVnaXN0ZXIgZ2R0aF9jbWRfc3RyICpjbWRwOwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbyA9IGdkdGhfY21uZF9wcml2KHNjcCk7Ci0gICAgdWxvbmczMiBjbnQsIGJsb2NrY250OwotICAgIHVsb25nNjQgbm8sIGJsb2Nrbm87CisgICAgdTMyIGNudCwgYmxvY2tjbnQ7CisgICAgdTY0IG5vLCBibG9ja25vOwogICAgIGludCBpLCBjbWRfaW5kZXgsIHJlYWRfd3JpdGUsIHNnY250LCBtb2RlNjQ7CiAKICAgICBjbWRwID0gaGEtPnBjY2I7CkBAIC0yNDk4LDE3ICsyNDk4LDE3IEBACiAKICAgICBpZiAocmVhZF93cml0ZSkgewogICAgICAgICBpZiAoc2NwLT5jbWRfbGVuID09IDE2KSB7Ci0gICAgICAgICAgICBtZW1jcHkoJm5vLCAmc2NwLT5jbW5kWzJdLCBzaXplb2YodWxvbmc2NCkpOworICAgICAgICAgICAgbWVtY3B5KCZubywgJnNjcC0+Y21uZFsyXSwgc2l6ZW9mKHU2NCkpOwogICAgICAgICAgICAgYmxvY2tubyA9IGJlNjRfdG9fY3B1KG5vKTsKLSAgICAgICAgICAgIG1lbWNweSgmY250LCAmc2NwLT5jbW5kWzEwXSwgc2l6ZW9mKHVsb25nMzIpKTsKKyAgICAgICAgICAgIG1lbWNweSgmY250LCAmc2NwLT5jbW5kWzEwXSwgc2l6ZW9mKHUzMikpOwogICAgICAgICAgICAgYmxvY2tjbnQgPSBiZTMyX3RvX2NwdShjbnQpOwogICAgICAgICB9IGVsc2UgaWYgKHNjcC0+Y21kX2xlbiA9PSAxMCkgewotICAgICAgICAgICAgbWVtY3B5KCZubywgJnNjcC0+Y21uZFsyXSwgc2l6ZW9mKHVsb25nMzIpKTsKKyAgICAgICAgICAgIG1lbWNweSgmbm8sICZzY3AtPmNtbmRbMl0sIHNpemVvZih1MzIpKTsKICAgICAgICAgICAgIGJsb2Nrbm8gPSBiZTMyX3RvX2NwdShubyk7Ci0gICAgICAgICAgICBtZW1jcHkoJmNudCwgJnNjcC0+Y21uZFs3XSwgc2l6ZW9mKHVzaG9ydCkpOworICAgICAgICAgICAgbWVtY3B5KCZjbnQsICZzY3AtPmNtbmRbN10sIHNpemVvZih1MTYpKTsKICAgICAgICAgICAgIGJsb2NrY250ID0gYmUxNl90b19jcHUoY250KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbWNweSgmbm8sICZzY3AtPmNtbmRbMF0sIHNpemVvZih1bG9uZzMyKSk7CisgICAgICAgICAgICBtZW1jcHkoJm5vLCAmc2NwLT5jbW5kWzBdLCBzaXplb2YodTMyKSk7CiAgICAgICAgICAgICBibG9ja25vID0gYmUzMl90b19jcHUobm8pICYgMHgwMDFmZmZmZlVMOwogICAgICAgICAgICAgYmxvY2tjbnQ9IHNjcC0+Y21uZFs0XT09MCA/IDB4MTAwIDogc2NwLT5jbW5kWzRdOwogICAgICAgICB9CkBAIC0yNTE2LDcgKzI1MTYsNyBAQAogICAgICAgICAgICAgY21kcC0+dS5jYWNoZTY0LkJsb2NrTm8gPSBibG9ja25vOwogICAgICAgICAgICAgY21kcC0+dS5jYWNoZTY0LkJsb2NrQ250ID0gYmxvY2tjbnQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjbWRwLT51LmNhY2hlLkJsb2NrTm8gPSAodWxvbmczMilibG9ja25vOworICAgICAgICAgICAgY21kcC0+dS5jYWNoZS5CbG9ja05vID0gKHUzMilibG9ja25vOwogICAgICAgICAgICAgY21kcC0+dS5jYWNoZS5CbG9ja0NudCA9IGJsb2NrY250OwogICAgICAgICB9CiAKQEAgLTI1MjgsMTIgKzI1MjgsMTIgQEAKICAgICAgICAgICAgIGlmIChtb2RlNjQpIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNsOwogCi0gICAgICAgICAgICAgICAgY21kcC0+dS5jYWNoZTY0LkRlc3RBZGRyPSAodWxvbmc2NCktMTsKKyAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuRGVzdEFkZHI9ICh1NjQpLTE7CiAgICAgICAgICAgICAgICAgY21kcC0+dS5jYWNoZTY0LnNnX2NhbnogPSBzZ2NudDsKICAgICAgICAgICAgICAgICBzY3NpX2Zvcl9lYWNoX3NnKHNjcCwgc2wsIHNnY250LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNtZHAtPnUuY2FjaGU2NC5zZ19sc3RbaV0uc2dfcHRyID0gc2dfZG1hX2FkZHJlc3Moc2wpOwogI2lmZGVmIEdEVEhfRE1BX1NUQVRJU1RJQ1MKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNtZHAtPnUuY2FjaGU2NC5zZ19sc3RbaV0uc2dfcHRyID4gKHVsb25nNjQpMHhmZmZmZmZmZikKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNtZHAtPnUuY2FjaGU2NC5zZ19sc3RbaV0uc2dfcHRyID4gKHU2NCkweGZmZmZmZmZmKQogICAgICAgICAgICAgICAgICAgICAgICAgaGEtPmRtYTY0X2NudCsrOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+ZG1hMzJfY250Kys7CkBAIC0yNTU1LDggKzI1NTUsOCBAQAogICAgICAgICAgICAgfQogCiAjaWZkZWYgR0RUSF9TVEFUSVNUSUNTCi0gICAgICAgICAgICBpZiAobWF4X3NnIDwgKHVsb25nMzIpc2djbnQpIHsKLSAgICAgICAgICAgICAgICBtYXhfc2cgPSAodWxvbmczMilzZ2NudDsKKyAgICAgICAgICAgIGlmIChtYXhfc2cgPCAodTMyKXNnY250KSB7CisgICAgICAgICAgICAgICAgbWF4X3NnID0gKHUzMilzZ2NudDsKICAgICAgICAgICAgICAgICBUUkFDRTMoKCJHRFQ6IG1heF9zZyA9ICVkXG4iLG1heF9zZykpOwogICAgICAgICAgICAgfQogI2VuZGlmCkBAIC0yNTcyLDcgKzI1NzIsNyBAQAogICAgICAgICBUUkFDRSgoImNhY2hlIGNtZDogY21kICVkIGJsb2Nrbm8uICVkLCBibG9ja2NudCAlZFxuIiwKICAgICAgICAgICAgICAgIGNtZHAtPk9wQ29kZSxjbWRwLT51LmNhY2hlNjQuQmxvY2tObyxjbWRwLT51LmNhY2hlNjQuQmxvY2tDbnQpKTsKICAgICAgICAgaGEtPmNtZF9sZW4gPSBHRFRPRkZTT0YoZ2R0aF9jbWRfc3RyLHUuY2FjaGU2NC5zZ19sc3QpICsKLSAgICAgICAgICAgICh1c2hvcnQpY21kcC0+dS5jYWNoZTY0LnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZzY0X3N0cik7CisgICAgICAgICAgICAodTE2KWNtZHAtPnUuY2FjaGU2NC5zZ19jYW56ICogc2l6ZW9mKGdkdGhfc2c2NF9zdHIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFRSQUNFKCgiY2FjaGUgY21kOiBhZGRyLiAleCBzZ2FueiAleCBzZ3B0cjAgJXggc2dsZW4wICV4XG4iLAogICAgICAgICAgICAgICAgY21kcC0+dS5jYWNoZS5EZXN0QWRkcixjbWRwLT51LmNhY2hlLnNnX2NhbnosCkBAIC0yNTgxLDcgKzI1ODEsNyBAQAogICAgICAgICBUUkFDRSgoImNhY2hlIGNtZDogY21kICVkIGJsb2Nrbm8uICVkLCBibG9ja2NudCAlZFxuIiwKICAgICAgICAgICAgICAgIGNtZHAtPk9wQ29kZSxjbWRwLT51LmNhY2hlLkJsb2NrTm8sY21kcC0+dS5jYWNoZS5CbG9ja0NudCkpOwogICAgICAgICBoYS0+Y21kX2xlbiA9IEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5jYWNoZS5zZ19sc3QpICsKLSAgICAgICAgICAgICh1c2hvcnQpY21kcC0+dS5jYWNoZS5zZ19jYW56ICogc2l6ZW9mKGdkdGhfc2dfc3RyKTsKKyAgICAgICAgICAgICh1MTYpY21kcC0+dS5jYWNoZS5zZ19jYW56ICogc2l6ZW9mKGdkdGhfc2dfc3RyKTsKICAgICB9CiAgICAgaWYgKGhhLT5jbWRfbGVuICYgMykKICAgICAgICAgaGEtPmNtZF9sZW4gKz0gKDQgLSAoaGEtPmNtZF9sZW4gJiAzKSk7CkBAIC0yNjAwLDE1ICsyNjAwLDE1IEBACiAgICAgcmV0dXJuIGNtZF9pbmRleDsKIH0KIAotc3RhdGljIGludCBnZHRoX2ZpbGxfcmF3X2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1bmNoYXIgYikKK3N0YXRpYyBpbnQgZ2R0aF9maWxsX3Jhd19jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdTggYikKIHsKICAgICByZWdpc3RlciBnZHRoX2NtZF9zdHIgKmNtZHA7Ci0gICAgdXNob3J0IGk7CisgICAgdTE2IGk7CiAgICAgZG1hX2FkZHJfdCBzZW5zZV9wYWRkcjsKICAgICBpbnQgY21kX2luZGV4LCBzZ2NudCwgbW9kZTY0OwotICAgIHVuY2hhciB0LGw7CisgICAgdTggdCxsOwogICAgIHN0cnVjdCBwYWdlICpwYWdlOwotICAgIHVsb25nIG9mZnNldDsKKyAgICB1bnNpZ25lZCBsb25nIG9mZnNldDsKICAgICBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqY21uZGluZm87CiAKICAgICB0ID0gc2NwLT5kZXZpY2UtPmlkOwpAQCAtMjY1NCw3ICsyNjU0LDcgQEAKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIHBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoc2NwLT5zZW5zZV9idWZmZXIpOwotICAgICAgICBvZmZzZXQgPSAodWxvbmcpc2NwLT5zZW5zZV9idWZmZXIgJiB+UEFHRV9NQVNLOworICAgICAgICBvZmZzZXQgPSAodW5zaWduZWQgbG9uZylzY3AtPnNlbnNlX2J1ZmZlciAmIH5QQUdFX01BU0s7CiAgICAgICAgIHNlbnNlX3BhZGRyID0gcGNpX21hcF9wYWdlKGhhLT5wZGV2LHBhZ2Usb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNixQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCkBAIC0yNzAzLDEyICsyNzAzLDEyIEBACiAgICAgICAgICAgICBpZiAobW9kZTY0KSB7CiAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzbDsKIAotICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2RhdGEgPSAodWxvbmc2NCktMTsKKyAgICAgICAgICAgICAgICBjbWRwLT51LnJhdzY0LnNkYXRhID0gKHU2NCktMTsKICAgICAgICAgICAgICAgICBjbWRwLT51LnJhdzY0LnNnX3JhbnogPSBzZ2NudDsKICAgICAgICAgICAgICAgICBzY3NpX2Zvcl9lYWNoX3NnKHNjcCwgc2wsIHNnY250LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2dfbHN0W2ldLnNnX3B0ciA9IHNnX2RtYV9hZGRyZXNzKHNsKTsKICNpZmRlZiBHRFRIX0RNQV9TVEFUSVNUSUNTCi0gICAgICAgICAgICAgICAgICAgIGlmIChjbWRwLT51LnJhdzY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodWxvbmc2NCkweGZmZmZmZmZmKQorICAgICAgICAgICAgICAgICAgICBpZiAoY21kcC0+dS5yYXc2NC5zZ19sc3RbaV0uc2dfcHRyID4gKHU2NCkweGZmZmZmZmZmKQogICAgICAgICAgICAgICAgICAgICAgICAgaGEtPmRtYTY0X2NudCsrOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+ZG1hMzJfY250Kys7CkBAIC0yNzQ0LDcgKzI3NDQsNyBAQAogICAgICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2dfbHN0WzBdLnNnX2xlbikpOwogICAgICAgICAgICAgLyogZXZhbHVhdGUgY29tbWFuZCBzaXplICovCiAgICAgICAgICAgICBoYS0+Y21kX2xlbiA9IEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5yYXc2NC5zZ19sc3QpICsKLSAgICAgICAgICAgICAgICAodXNob3J0KWNtZHAtPnUucmF3NjQuc2dfcmFueiAqIHNpemVvZihnZHRoX3NnNjRfc3RyKTsKKyAgICAgICAgICAgICAgICAodTE2KWNtZHAtPnUucmF3NjQuc2dfcmFueiAqIHNpemVvZihnZHRoX3NnNjRfc3RyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFRSQUNFKCgicmF3IGNtZDogYWRkci4gJXggc2dhbnogJXggc2dwdHIwICV4IHNnbGVuMCAleFxuIiwKICAgICAgICAgICAgICAgICAgICBjbWRwLT51LnJhdy5zZGF0YSxjbWRwLT51LnJhdy5zZ19yYW56LApAQCAtMjc1Miw3ICsyNzUyLDcgQEAKICAgICAgICAgICAgICAgICAgICBjbWRwLT51LnJhdy5zZ19sc3RbMF0uc2dfbGVuKSk7CiAgICAgICAgICAgICAvKiBldmFsdWF0ZSBjb21tYW5kIHNpemUgKi8KICAgICAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LnJhdy5zZ19sc3QpICsKLSAgICAgICAgICAgICAgICAodXNob3J0KWNtZHAtPnUucmF3LnNnX3JhbnogKiBzaXplb2YoZ2R0aF9zZ19zdHIpOworICAgICAgICAgICAgICAgICh1MTYpY21kcC0+dS5yYXcuc2dfcmFueiAqIHNpemVvZihnZHRoX3NnX3N0cik7CiAgICAgICAgIH0KICAgICB9CiAgICAgLyogY2hlY2sgc3BhY2UgKi8KQEAgLTI4MDIsNyArMjgwMiw3IEBACiAgICAgaWYgKGNtZHAtPk9wQ29kZSA9PSBHRFRfSU9DVEwpIHsKICAgICAgICAgVFJBQ0UyKCgiSU9DVExcbiIpKTsKICAgICAgICAgaGEtPmNtZF9sZW4gPSAKLSAgICAgICAgICAgIEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5pb2N0bC5wX3BhcmFtKSArIHNpemVvZih1bG9uZzY0KTsKKyAgICAgICAgICAgIEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5pb2N0bC5wX3BhcmFtKSArIHNpemVvZih1NjQpOwogICAgIH0gZWxzZSBpZiAoY21kcC0+U2VydmljZSA9PSBDQUNIRVNFUlZJQ0UpIHsKICAgICAgICAgVFJBQ0UyKCgiY2FjaGUgY29tbWFuZCAlZFxuIixjbWRwLT5PcENvZGUpKTsKICAgICAgICAgaWYgKGhhLT5jYWNoZV9mZWF0ICYgR0RUXzY0QklUKQpAQCAtMjg0MCw4ICsyODQwLDggQEAKIAogCiAvKiBDb250cm9sbGVyIGV2ZW50IGhhbmRsaW5nIGZ1bmN0aW9ucyAqLwotc3RhdGljIGdkdGhfZXZ0X3N0ciAqZ2R0aF9zdG9yZV9ldmVudChnZHRoX2hhX3N0ciAqaGEsIHVzaG9ydCBzb3VyY2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQgaWR4LCBnZHRoX2V2dF9kYXRhICpldnQpCitzdGF0aWMgZ2R0aF9ldnRfc3RyICpnZHRoX3N0b3JlX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgdTE2IHNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBpZHgsIGdkdGhfZXZ0X2RhdGEgKmV2dCkKIHsKICAgICBnZHRoX2V2dF9zdHIgKmU7CiAgICAgc3RydWN0IHRpbWV2YWwgdHY7CkBAIC0yODkwLDcgKzI4OTAsNyBAQAogewogICAgIGdkdGhfZXZ0X3N0ciAqZTsKICAgICBpbnQgZWluZGV4OwotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICAgICBUUkFDRTIoKCJnZHRoX3JlYWRfZXZlbnQoKSBoYW5kbGUgJWRcbiIsIGhhbmRsZSkpOwogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKQEAgLTI5MTksMTIgKzI5MTksMTIgQEAKIH0KIAogc3RhdGljIHZvaWQgZ2R0aF9yZWFkYXBwX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNoYXIgYXBwbGljYXRpb24sIGdkdGhfZXZ0X3N0ciAqZXN0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBhcHBsaWNhdGlvbiwgZ2R0aF9ldnRfc3RyICplc3RyKQogewogICAgIGdkdGhfZXZ0X3N0ciAqZTsKICAgICBpbnQgZWluZGV4OwotICAgIHVsb25nIGZsYWdzOwotICAgIHVuY2hhciBmb3VuZCA9IEZBTFNFOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgdTggZm91bmQgPSBGQUxTRTsKIAogICAgIFRSQUNFMigoImdkdGhfcmVhZGFwcF9ldmVudCgpIGFwcC4gJWRcbiIsIGFwcGxpY2F0aW9uKSk7CiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwpAQCAtMjk2OSw5ICsyOTY5LDkgQEAKICAgICBnZHQyX2RwcmFtX3N0ciBfX2lvbWVtICpkcDJfcHRyOwogICAgIFNjc2lfQ21uZCAqc2NwOwogICAgIGludCBydmFsLCBpOwotICAgIHVuY2hhciBJU3RhdHVzOwotICAgIHVzaG9ydCBTZXJ2aWNlOwotICAgIHVsb25nIGZsYWdzID0gMDsKKyAgICB1OCBJU3RhdHVzOworICAgIHUxNiBTZXJ2aWNlOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogI2lmZGVmIElOVF9DT0FMCiAgICAgaW50IGNvYWxlc2NlZCA9IEZBTFNFOwogICAgIGludCBuZXh0ID0gRkFMU0U7CkBAIC0zMDE4LDcgKzMwMTgsNyBAQAogICAgICAgICBpZiAoY29hbGVzY2VkKSB7CiAgICAgICAgICAgICAvKiBGb3IgY29hbGVzY2VkIHJlcXVlc3RzIGFsbCBzdGF0dXMKICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGlzIGZvdW5kIGluIHRoZSBzdGF0dXMgYnVmZmVyICovCi0gICAgICAgICAgICBJU3RhdHVzID0gKHVuY2hhcikocGNzLT5zdGF0dXMgJiAweGZmKTsKKyAgICAgICAgICAgIElTdGF0dXMgPSAodTgpKHBjcy0+c3RhdHVzICYgMHhmZik7CiAgICAgICAgIH0KICNlbmRpZgogICAgIApAQCAtMzE5Nyw3ICszMTk3LDcgQEAKICAgICAgICAgICAgICsrYWN0X2ludF9jb2FsOwogICAgICAgICAgICAgaWYgKGFjdF9pbnRfY29hbCA+IG1heF9pbnRfY29hbCkgewogICAgICAgICAgICAgICAgIG1heF9pbnRfY29hbCA9IGFjdF9pbnRfY29hbDsKLSAgICAgICAgICAgICAgICBwcmludGsoIkdEVDogbWF4X2ludF9jb2FsID0gJWRcbiIsKHVzaG9ydCltYXhfaW50X2NvYWwpOworICAgICAgICAgICAgICAgIHByaW50aygiR0RUOiBtYXhfaW50X2NvYWwgPSAlZFxuIiwodTE2KW1heF9pbnRfY29hbCk7CiAgICAgICAgICAgICB9CiAjZW5kaWYgICAgICAKICAgICAgICAgICAgIC8qIHNlZSBpZiB0aGVyZSBpcyBhbm90aGVyIHN0YXR1cyAqLwpAQCAtMzIyNSwxMiArMzIyNSwxMiBAQAogCXJldHVybiBfX2dkdGhfaW50ZXJydXB0KGhhLCBmYWxzZSwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgZ2R0aF9zeW5jX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgaW50IHNlcnZpY2UsIHVuY2hhciBpbmRleCwKK3N0YXRpYyBpbnQgZ2R0aF9zeW5jX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgaW50IHNlcnZpY2UsIHU4IGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3NpX0NtbmQgKnNjcCkKIHsKICAgICBnZHRoX21zZ19zdHIgKm1zZzsKICAgICBnZHRoX2NtZF9zdHIgKmNtZHA7Ci0gICAgdW5jaGFyIGIsIHQ7CisgICAgdTggYiwgdDsKICAgICBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqY21uZGluZm8gPSBnZHRoX2NtbmRfcHJpdihzY3ApOwogCiAgICAgY21kcCA9IGhhLT5wY2NiOwpAQCAtMzI2Myw3ICszMjYzLDcgQEAKICAgICAgICAgICAgIGNtZHAtPnUuc2NyZWVuLnN1Lm1zZy5tc2dfYWRkciAgPSBoYS0+bXNnX3BoeXM7CiAgICAgICAgICAgICBoYS0+Y21kX29mZnNfZHBtZW0gPSAwOwogICAgICAgICAgICAgaGEtPmNtZF9sZW4gPSBHRFRPRkZTT0YoZ2R0aF9jbWRfc3RyLHUuc2NyZWVuLnN1Lm1zZy5tc2dfYWRkcikgCi0gICAgICAgICAgICAgICAgKyBzaXplb2YodWxvbmc2NCk7CisgICAgICAgICAgICAgICAgKyBzaXplb2YodTY0KTsKICAgICAgICAgICAgIGhhLT5jbWRfY250ID0gMDsKICAgICAgICAgICAgIGdkdGhfY29weV9jb21tYW5kKGhhKTsKICAgICAgICAgICAgIGdkdGhfcmVsZWFzZV9ldmVudChoYSk7CkBAIC0zMjk3LDcgKzMyOTcsNyBAQAogICAgICAgICAgICAgY21kcC0+dS5zY3JlZW4uc3UubXNnLm1zZ19hZGRyICA9IGhhLT5tc2dfcGh5czsKICAgICAgICAgICAgIGhhLT5jbWRfb2Zmc19kcG1lbSA9IDA7CiAgICAgICAgICAgICBoYS0+Y21kX2xlbiA9IEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5zY3JlZW4uc3UubXNnLm1zZ19hZGRyKSAKLSAgICAgICAgICAgICAgICArIHNpemVvZih1bG9uZzY0KTsKKyAgICAgICAgICAgICAgICArIHNpemVvZih1NjQpOwogICAgICAgICAgICAgaGEtPmNtZF9jbnQgPSAwOwogICAgICAgICAgICAgZ2R0aF9jb3B5X2NvbW1hbmQoaGEpOwogICAgICAgICAgICAgZ2R0aF9yZWxlYXNlX2V2ZW50KGhhKTsKQEAgLTMzMzUsNyArMzMzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjbW5kaW5mby0+T3BDb2RlKSk7CiAgICAgICAgICAgICAgICAgLyogc3BlY2lhbCBjb21tYW5kcyBHRFRfQ0xVU1RfSU5GTy9HRFRfTU9VTlQgPyAqLwogICAgICAgICAgICAgICAgIGlmIChjbW5kaW5mby0+T3BDb2RlID09IEdEVF9DTFVTVF9JTkZPKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhLT5oZHJbdF0uY2x1c3Rlcl90eXBlID0gKHVuY2hhciloYS0+aW5mbzsKKyAgICAgICAgICAgICAgICAgICAgaGEtPmhkclt0XS5jbHVzdGVyX3R5cGUgPSAodTgpaGEtPmluZm87CiAgICAgICAgICAgICAgICAgICAgIGlmICghKGhhLT5oZHJbdF0uY2x1c3Rlcl90eXBlICYgCiAgICAgICAgICAgICAgICAgICAgICAgICBDTFVTVEVSX01PVU5URUQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1QgTU9VTlRFRCAtPiBNT1VOVCAqLwpAQCAtMzM5Nyw3ICszMzk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaGEtPmhkclt0XS5jbHVzdGVyX3R5cGUgJj0gfkNMVVNURVJfUkVTRVJWRUQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1lbXNldCgoY2hhciopc2NwLT5zZW5zZV9idWZmZXIsMCwxNik7Ci0gICAgICAgICAgICAgICAgaWYgKGhhLT5zdGF0dXMgPT0gKHVzaG9ydClTX0NBQ0hFX1JFU0VSVikgeworICAgICAgICAgICAgICAgIGlmIChoYS0+c3RhdHVzID09ICh1MTYpU19DQUNIRV9SRVNFUlYpIHsKICAgICAgICAgICAgICAgICAgICAgc2NwLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IChSRVNFUlZBVElPTl9DT05GTElDVCA8PCAxKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzY3AtPnNlbnNlX2J1ZmZlclswXSA9IDB4NzA7CkBAIC0zNjE0LDE2ICszNjE0LDE2IEBACiAgICAgICAgICAgICBjbWRwLT51LnNjcmVlbi5zdS5tc2cubXNnX2FkZHIgID0gaGEtPm1zZ19waHlzOwogICAgICAgICAgICAgaGEtPmNtZF9vZmZzX2RwbWVtID0gMDsKICAgICAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LnNjcmVlbi5zdS5tc2cubXNnX2FkZHIpIAotICAgICAgICAgICAgICAgICsgc2l6ZW9mKHVsb25nNjQpOworICAgICAgICAgICAgICAgICsgc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICBoYS0+Y21kX2NudCA9IDA7CiAgICAgICAgICAgICBnZHRoX2NvcHlfY29tbWFuZChoYSk7CiAgICAgICAgICAgICBpZiAoaGEtPnR5cGUgPT0gR0RUX0VJU0EpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJbRUlTQSBzbG90ICVkXSAiLCh1c2hvcnQpaGEtPmJyZF9waHlzKTsKKyAgICAgICAgICAgICAgICBwcmludGsoIltFSVNBIHNsb3QgJWRdICIsKHUxNiloYS0+YnJkX3BoeXMpOwogICAgICAgICAgICAgZWxzZSBpZiAoaGEtPnR5cGUgPT0gR0RUX0lTQSkKLSAgICAgICAgICAgICAgICBwcmludGsoIltEUE1FTSAweCU0WF0gIiwodXNob3J0KWhhLT5icmRfcGh5cyk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJbRFBNRU0gMHglNFhdICIsKHUxNiloYS0+YnJkX3BoeXMpOwogICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICBwcmludGsoIltQQ0kgJWQvJWRdICIsKHVzaG9ydCkoaGEtPmJyZF9waHlzPj44KSwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVzaG9ydCkoKGhhLT5icmRfcGh5cz4+MykmMHgxZikpOworICAgICAgICAgICAgICAgIHByaW50aygiW1BDSSAlZC8lZF0gIiwodTE2KShoYS0+YnJkX3BoeXM+PjgpLAorICAgICAgICAgICAgICAgICAgICAgICAodTE2KSgoaGEtPmJyZF9waHlzPj4zKSYweDFmKSk7CiAgICAgICAgICAgICBnZHRoX3JlbGVhc2VfZXZlbnQoaGEpOwogICAgICAgICB9CiAKQEAgLTM2NDAsNyArMzY0MCw3IEBACiAgICAgICAgICAgICBoYS0+ZHZyLmV1LmFzeW5jLnNlcnZpY2UgPSBoYS0+c2VydmljZTsKICAgICAgICAgICAgIGhhLT5kdnIuZXUuYXN5bmMuc3RhdHVzICA9IGhhLT5zdGF0dXM7CiAgICAgICAgICAgICBoYS0+ZHZyLmV1LmFzeW5jLmluZm8gICAgPSBoYS0+aW5mbzsKLSAgICAgICAgICAgICoodWxvbmczMiAqKWhhLT5kdnIuZXUuYXN5bmMuc2NzaV9jb29yZCAgPSBoYS0+aW5mbzI7CisgICAgICAgICAgICAqKHUzMiAqKWhhLT5kdnIuZXUuYXN5bmMuc2NzaV9jb29yZCAgPSBoYS0+aW5mbzI7CiAgICAgICAgIH0KICAgICAgICAgZ2R0aF9zdG9yZV9ldmVudCggaGEsIEVTX0FTWU5DLCBoYS0+c2VydmljZSwgJmhhLT5kdnIgKTsKICAgICAgICAgZ2R0aF9sb2dfZXZlbnQoICZoYS0+ZHZyLCBOVUxMICk7CkBAIC0zNjQ4LDggKzM2NDgsOCBAQAogICAgICAgICAvKiBuZXcgaG9zdCBkcml2ZSBmcm9tIGV4cGFuZD8gKi8KICAgICAgICAgaWYgKGhhLT5zZXJ2aWNlID09IENBQ0hFU0VSVklDRSAmJiBoYS0+c3RhdHVzID09IDU2KSB7CiAgICAgICAgICAgICBUUkFDRTIoKCJnZHRoX2FzeW5jX2V2ZW50KCk6IG5ldyBob3N0IGRyaXZlICVkIGNyZWF0ZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICh1c2hvcnQpaGEtPmluZm8pKTsKLSAgICAgICAgICAgIC8qIGdkdGhfYW5hbHlzZV9oZHJpdmUoaGFudW0sICh1c2hvcnQpaGEtPmluZm8pOyAqLworICAgICAgICAgICAgICAgICAgICAodTE2KWhhLT5pbmZvKSk7CisgICAgICAgICAgICAvKiBnZHRoX2FuYWx5c2VfaGRyaXZlKGhhbnVtLCAodTE2KWhhLT5pbmZvKTsgKi8KICAgICAgICAgfSAgIAogICAgIH0KICAgICByZXR1cm4gMTsKQEAgLTM2ODAsMTMgKzM2ODAsMTMgQEAKICAgICAgICAgZm9yIChqPTAsaT0xOyBpIDwgZlswXTsgaSs9MikgewogICAgICAgICAgICAgc3dpdGNoIChmW2krMV0pIHsKICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIHN0YWNrLmJbaisrXSA9ICoodWxvbmczMiopJmR2ci0+ZXUuc3RyZWFtWyhpbnQpZltpXV07CisgICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1MzIqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1c2hvcnQqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOworICAgICAgICAgICAgICAgIHN0YWNrLmJbaisrXSA9ICoodTE2KikmZHZyLT5ldS5zdHJlYW1bKGludClmW2ldXTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHN0YWNrLmJbaisrXSA9ICoodW5jaGFyKikmZHZyLT5ldS5zdHJlYW1bKGludClmW2ldXTsKKyAgICAgICAgICAgICAgICBzdGFjay5iW2orK10gPSAqKHU4KikmZHZyLT5ldS5zdHJlYW1bKGludClmW2ldXTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM3MTIsMTQgKzM3MTIsMTQgQEAKIH0KIAogI2lmZGVmIEdEVEhfU1RBVElTVElDUwotc3RhdGljIHVuY2hhcglnZHRoX3RpbWVyX3J1bm5pbmc7CitzdGF0aWMgdTgJZ2R0aF90aW1lcl9ydW5uaW5nOwogCi1zdGF0aWMgdm9pZCBnZHRoX3RpbWVvdXQodWxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGdkdGhfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0gICAgdWxvbmczMiBpOworICAgIHUzMiBpOwogICAgIFNjc2lfQ21uZCAqbnNjcDsKICAgICBnZHRoX2hhX3N0ciAqaGE7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIGlmKHVubGlrZWx5KGxpc3RfZW1wdHkoJmdkdGhfaW5zdGFuY2VzKSkpIHsKIAkgICAgZ2R0aF90aW1lcl9ydW5uaW5nID0gMDsKQEAgLTM4OTEsOCArMzg5MSw4IEBACiB7CiAJZ2R0aF9oYV9zdHIgKmhhID0gc2hvc3RfcHJpdihzY3AtPmRldmljZS0+aG9zdCk7CiAJc3RydWN0IGdkdGhfY21uZGluZm8gKmNtbmRpbmZvID0gZ2R0aF9jbW5kX3ByaXYoc2NwKTsKLQl1bmNoYXIgYiwgdDsKLQl1bG9uZyBmbGFnczsKKwl1OCBiLCB0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJZW51bSBibGtfZWhfdGltZXJfcmV0dXJuIHJldHZhbCA9IEJMS19FSF9OT1RfSEFORExFRDsKIAogCVRSQUNFKCgiJXMoKSBjbWQgMHgleFxuIiwgc2NwLT5jbW5kWzBdLCBfX2Z1bmNfXykpOwpAQCAtMzkyNCw5ICszOTI0LDkgQEAKIHsKICAgICBnZHRoX2hhX3N0ciAqaGEgPSBzaG9zdF9wcml2KHNjcC0+ZGV2aWNlLT5ob3N0KTsKICAgICBpbnQgaTsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIFNjc2lfQ21uZCAqY21uZDsKLSAgICB1bmNoYXIgYjsKKyAgICB1OCBiOwogCiAgICAgVFJBQ0UyKCgiZ2R0aF9laF9idXNfcmVzZXQoKVxuIikpOwogCkBAIC0zOTc0LDcgKzM5NzQsNyBAQAogCiBzdGF0aWMgaW50IGdkdGhfYmlvc19wYXJhbShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixzZWN0b3JfdCBjYXAsaW50ICppcCkKIHsKLSAgICB1bmNoYXIgYiwgdDsKKyAgICB1OCBiLCB0OwogICAgIGdkdGhfaGFfc3RyICpoYSA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7CiAgICAgc3RydWN0IHNjc2lfZGV2aWNlICpzZDsKICAgICB1bnNpZ25lZCBjYXBhY2l0eTsKQEAgLTQwNjIsNyArNDA2Miw3IEBACiB7CiAgICAgZ2R0aF9pb2N0bF9ldmVudCBldnQ7CiAgICAgZ2R0aF9oYV9zdHIgKmhhOwotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmV2dCwgYXJnLCBzaXplb2YoZ2R0aF9pb2N0bF9ldmVudCkpKQogICAgICAgICByZXR1cm4gLUVGQVVMVDsKQEAgLTQwOTgsOCArNDA5OCw4IEBACiBzdGF0aWMgaW50IGlvY19sb2NrZHJ2KHZvaWQgX191c2VyICphcmcpCiB7CiAgICAgZ2R0aF9pb2N0bF9sb2NrZHJ2IGxkcnY7Ci0gICAgdW5jaGFyIGksIGo7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdTggaSwgajsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGdkdGhfaGFfc3RyICpoYTsKIAogICAgIGlmIChjb3B5X2Zyb21fdXNlcigmbGRydiwgYXJnLCBzaXplb2YoZ2R0aF9pb2N0bF9sb2NrZHJ2KSkpCkBAIC00MTY1LDcgKzQxNjUsNyBAQAogewogICAgIGdkdGhfaW9jdGxfZ2VuZXJhbCBnZW47CiAgICAgY2hhciAqYnVmID0gTlVMTDsKLSAgICB1bG9uZzY0IHBhZGRyOyAKKyAgICB1NjQgcGFkZHI7IAogICAgIGdkdGhfaGFfc3RyICpoYTsKICAgICBpbnQgcnZhbDsKIApAQCAtNDE5NCw3ICs0MTk0LDcgQEAKICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlNjQuRGV2aWNlTm8gPSBnZW4uY29tbWFuZC51LmNhY2hlLkRldmljZU5vOwogICAgICAgICAgICAgICAgIC8qIGFkZHJlc3NlcyAqLwogICAgICAgICAgICAgICAgIGlmIChoYS0+Y2FjaGVfZmVhdCAmIFNDQVRURVJfR0FUSEVSKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5EZXN0QWRkciA9ICh1bG9uZzY0KS0xOworICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlNjQuRGVzdEFkZHIgPSAodTY0KS0xOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlNjQuc2dfY2FueiA9IDE7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5zZ19sc3RbMF0uc2dfcHRyID0gcGFkZHI7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwpAQCAtNDIwNyw3ICs0MjA3LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoaGEtPmNhY2hlX2ZlYXQgJiBTQ0FUVEVSX0dBVEhFUikgewogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLkRlc3RBZGRyID0gMHhmZmZmZmZmZjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZS5zZ19jYW56ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZS5zZ19sc3RbMF0uc2dfcHRyID0gKHVsb25nMzIpcGFkZHI7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGUuc2dfbHN0WzBdLnNnX3B0ciA9ICh1MzIpcGFkZHI7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGUuc2dfbHN0WzBdLnNnX2xlbiA9IGdlbi5kYXRhX2xlbjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZS5zZ19sc3RbMV0uc2dfbGVuID0gMDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDIzMCw3ICs0MjMwLDcgQEAKICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LmRpcmVjdGlvbiA9IGdlbi5jb21tYW5kLnUucmF3LmRpcmVjdGlvbjsKICAgICAgICAgICAgICAgICAvKiBhZGRyZXNzZXMgKi8KICAgICAgICAgICAgICAgICBpZiAoaGEtPnJhd19mZWF0ICYgU0NBVFRFUl9HQVRIRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXc2NC5zZGF0YSA9ICh1bG9uZzY0KS0xOworICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNkYXRhID0gKHU2NCktMTsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXc2NC5zZ19yYW56ID0gMTsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXc2NC5zZ19sc3RbMF0uc2dfcHRyID0gcGFkZHI7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3NjQuc2dfbHN0WzBdLnNnX2xlbiA9IGdlbi5kYXRhX2xlbjsKQEAgLTQyNDQsMTQgKzQyNDQsMTQgQEAKICAgICAgICAgICAgICAgICBpZiAoaGEtPnJhd19mZWF0ICYgU0NBVFRFUl9HQVRIRVIpIHsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXcuc2RhdGEgPSAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19yYW56ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXcuc2dfbHN0WzBdLnNnX3B0ciA9ICh1bG9uZzMyKXBhZGRyOworICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMF0uc2dfcHRyID0gKHUzMilwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXcuc2dfbHN0WzBdLnNnX2xlbiA9IGdlbi5kYXRhX2xlbjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXcuc2dfbHN0WzFdLnNnX2xlbiA9IDA7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXcuc2RhdGEgPSBwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXcuc2dfcmFueiA9IDA7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNlbnNlX2RhdGEgPSAodWxvbmczMilwYWRkciArIGdlbi5kYXRhX2xlbjsKKyAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZW5zZV9kYXRhID0gKHUzMilwYWRkciArIGdlbi5kYXRhX2xlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGdkdGhfaW9jdGxfZnJlZShoYSwgZ2VuLmRhdGFfbGVuK2dlbi5zZW5zZV9sZW4sIGJ1ZiwgcGFkZHIpOwpAQCAtNDI4Myw3ICs0MjgzLDcgQEAKICAgICBnZHRoX2lvY3RsX3Jlc2NhbiAqcnNjOwogICAgIGdkdGhfY21kX3N0ciAqY21kOwogICAgIGdkdGhfaGFfc3RyICpoYTsKLSAgICB1bmNoYXIgaTsKKyAgICB1OCBpOwogICAgIGludCByYyA9IC1FTk9NRU07CiAgICAgdTMyIGNsdXN0ZXJfdHlwZSA9IDA7CiAKQEAgLTQzMzUsMTEgKzQzMzUsMTEgQEAKIHsKICAgICBnZHRoX2lvY3RsX3Jlc2NhbiAqcnNjOwogICAgIGdkdGhfY21kX3N0ciAqY21kOwotICAgIHVzaG9ydCBpLCBzdGF0dXMsIGhkcl9jbnQ7Ci0gICAgdWxvbmczMiBpbmZvOworICAgIHUxNiBpLCBzdGF0dXMsIGhkcl9jbnQ7CisgICAgdTMyIGluZm87CiAgICAgaW50IGN5bHMsIGhkcywgc2VjczsKICAgICBpbnQgcmMgPSAtRU5PTUVNOwotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgZ2R0aF9oYV9zdHIgKmhhOyAKIAogICAgIHJzYyA9IGttYWxsb2Moc2l6ZW9mKCpyc2MpLCBHRlBfS0VSTkVMKTsKQEAgLTQzNjcsNyArNDM2Nyw3IEBACiAKICAgICAgICAgc3RhdHVzID0gX19nZHRoX2V4ZWN1dGUoaGEtPnNkZXYsIGNtZCwgY21uZCwgMzAsICZpbmZvKTsKICAgICAgICAgaSA9IDA7Ci0gICAgICAgIGhkcl9jbnQgPSAoc3RhdHVzID09IFNfT0sgPyAodXNob3J0KWluZm8gOiAwKTsKKyAgICAgICAgaGRyX2NudCA9IChzdGF0dXMgPT0gU19PSyA/ICh1MTYpaW5mbyA6IDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGkgPSByc2MtPmhkcl9ubzsKICAgICAgICAgaGRyX2NudCA9IGkgKyAxOwpAQCAtNDQxOCw3ICs0NDE4LDcgQEAKICAgICAgICAgc3RhdHVzID0gX19nZHRoX2V4ZWN1dGUoaGEtPnNkZXYsIGNtZCwgY21uZCwgMzAsICZpbmZvKTsKIAogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGhhLT5oZHJbaV0uZGV2dHlwZSA9IChzdGF0dXMgPT0gU19PSyA/ICh1c2hvcnQpaW5mbyA6IDApOworICAgICAgICBoYS0+aGRyW2ldLmRldnR5cGUgPSAoc3RhdHVzID09IFNfT0sgPyAodTE2KWluZm8gOiAwKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAKICAgICAgICAgY21kLT5TZXJ2aWNlID0gQ0FDSEVTRVJWSUNFOwpAQCAtNDQzMiw3ICs0NDMyLDcgQEAKIAogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgICAgIGhhLT5oZHJbaV0uY2x1c3Rlcl90eXBlID0gCi0gICAgICAgICAgICAoKHN0YXR1cyA9PSBTX09LICYmICFzaGFyZWRfYWNjZXNzKSA/ICh1c2hvcnQpaW5mbyA6IDApOworICAgICAgICAgICAgKChzdGF0dXMgPT0gU19PSyAmJiAhc2hhcmVkX2FjY2VzcykgPyAodTE2KWluZm8gOiAwKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgICAgIHJzYy0+aGRyX2xpc3RbaV0uY2x1c3Rlcl90eXBlID0gaGEtPmhkcltpXS5jbHVzdGVyX3R5cGU7CiAKQEAgLTQ0NDYsNyArNDQ0Niw3IEBACiAgICAgICAgIHN0YXR1cyA9IF9fZ2R0aF9leGVjdXRlKGhhLT5zZGV2LCBjbWQsIGNtbmQsIDMwLCAmaW5mbyk7CiAKICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwotICAgICAgICBoYS0+aGRyW2ldLnJ3X2F0dHJpYnMgPSAoc3RhdHVzID09IFNfT0sgPyAodXNob3J0KWluZm8gOiAwKTsKKyAgICAgICAgaGEtPmhkcltpXS5yd19hdHRyaWJzID0gKHN0YXR1cyA9PSBTX09LID8gKHUxNilpbmZvIDogMCk7CiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwogICAgIH0KICAKQEAgLTQ0NjYsNyArNDQ2Niw3IEBACiB7CiAgICAgZ2R0aF9oYV9zdHIgKmhhOyAKICAgICBTY3NpX0NtbmQgKnNjcDsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGNoYXIgY21uZFtNQVhfQ09NTUFORF9TSVpFXTsgICAKICAgICB2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIApAQCAtNDQ5NSw5ICs0NDk1LDkgQEAKICAgICAgIHsgCiAgICAgICAgIGdkdGhfaW9jdGxfb3N2ZXJzIG9zdjsgCiAKLSAgICAgICAgb3N2LnZlcnNpb24gPSAodW5jaGFyKShMSU5VWF9WRVJTSU9OX0NPREUgPj4gMTYpOwotICAgICAgICBvc3Yuc3VidmVyc2lvbiA9ICh1bmNoYXIpKExJTlVYX1ZFUlNJT05fQ09ERSA+PiA4KTsKLSAgICAgICAgb3N2LnJldmlzaW9uID0gKHVzaG9ydCkoTElOVVhfVkVSU0lPTl9DT0RFICYgMHhmZik7CisgICAgICAgIG9zdi52ZXJzaW9uID0gKHU4KShMSU5VWF9WRVJTSU9OX0NPREUgPj4gMTYpOworICAgICAgICBvc3Yuc3VidmVyc2lvbiA9ICh1OCkoTElOVVhfVkVSU0lPTl9DT0RFID4+IDgpOworICAgICAgICBvc3YucmV2aXNpb24gPSAodTE2KShMSU5VWF9WRVJTSU9OX0NPREUgJiAweGZmKTsKICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmb3N2LCBzaXplb2YoZ2R0aF9pb2N0bF9vc3ZlcnMpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKICAgICAgICAgYnJlYWs7CkBAIC00NTEyLDEwICs0NTEyLDEwIEBACiAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKIAogICAgICAgICBpZiAoaGEtPnR5cGUgPT0gR0RUX0lTQSB8fCBoYS0+dHlwZSA9PSBHRFRfRUlTQSkgewotICAgICAgICAgICAgY3RydC50eXBlID0gKHVuY2hhcikoKGhhLT5zdHlwZT4+MjApIC0gMHgxMCk7CisgICAgICAgICAgICBjdHJ0LnR5cGUgPSAodTgpKChoYS0+c3R5cGU+PjIwKSAtIDB4MTApOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGhhLT50eXBlICE9IEdEVF9QQ0lNUFIpIHsKLSAgICAgICAgICAgICAgICBjdHJ0LnR5cGUgPSAodW5jaGFyKSgoaGEtPnN0eXBlPDw0KSArIDYpOworICAgICAgICAgICAgICAgIGN0cnQudHlwZSA9ICh1OCkoKGhhLT5zdHlwZTw8NCkgKyA2KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY3RydC50eXBlID0gCiAgICAgICAgICAgICAgICAgICAgIChoYS0+b2VtX2lkID09IE9FTV9JRF9JTlRFTCA/IDB4ZmQgOiAweGZlKTsKQEAgLTQ1NDYsNyArNDU0Niw3IEBACiAgICAgICBjYXNlIEdEVElPQ1RMX0xPQ0tDSE46CiAgICAgICB7CiAgICAgICAgIGdkdGhfaW9jdGxfbG9ja2NobiBsY2huOwotICAgICAgICB1bmNoYXIgaSwgajsKKyAgICAgICAgdTggaSwgajsKIAogICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmxjaG4sIGFyZ3AsIHNpemVvZihnZHRoX2lvY3RsX2xvY2tjaG4pKSB8fAogICAgICAgICAgICAgKE5VTEwgPT0gKGhhID0gZ2R0aF9maW5kX2hhKGxjaG4uaW9ub2RlKSkpKQpAQCAtNDY3MCw3ICs0NjcwLDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfSVNBCi1zdGF0aWMgaW50IF9faW5pdCBnZHRoX2lzYV9wcm9iZV9vbmUodWxvbmczMiBpc2FfYmlvcykKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfaXNhX3Byb2JlX29uZSh1MzIgaXNhX2Jpb3MpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hwOwogCWdkdGhfaGFfc3RyICpoYTsKQEAgLTQ4MDIsNyArNDgwMiw3IEBACiAjZW5kaWYgLyogQ09ORklHX0lTQSAqLwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfZWlzYV9wcm9iZV9vbmUodXNob3J0IGVpc2Ffc2xvdCkKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfZWlzYV9wcm9iZV9vbmUodTE2IGVpc2Ffc2xvdCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHA7CiAJZ2R0aF9oYV9zdHIgKmhhOwpAQCAtNTEyMCw3ICs1MTIwLDcgQEAKIAlzY3NpX2hvc3RfcHV0KHNocCk7CiB9CiAKLXN0YXRpYyBpbnQgZ2R0aF9oYWx0KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVsb25nIGV2ZW50LCB2b2lkICpidWYpCitzdGF0aWMgaW50IGdkdGhfaGFsdChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpidWYpCiB7CiAJZ2R0aF9oYV9zdHIgKmhhOwogCkBAIC01MTU4LDE0ICs1MTU4LDE0IEBACiAJaWYgKHByb2JlX2Vpc2FfaXNhKSB7CiAJCS8qIHNjYW5uaW5nIGZvciBjb250cm9sbGVycywgYXQgZmlyc3Q6IElTQSBjb250cm9sbGVyICovCiAjaWZkZWYgQ09ORklHX0lTQQotCQl1bG9uZzMyIGlzYV9iaW9zOworCQl1MzIgaXNhX2Jpb3M7CiAJCWZvciAoaXNhX2Jpb3MgPSAweGM4MDAwVUw7IGlzYV9iaW9zIDw9IDB4ZDgwMDBVTDsKIAkJICAgICAgICAgICAgICAgIGlzYV9iaW9zICs9IDB4ODAwMFVMKQogCQkJZ2R0aF9pc2FfcHJvYmVfb25lKGlzYV9iaW9zKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FSVNBCiAJCXsKLQkJCXVzaG9ydCBlaXNhX3Nsb3Q7CisJCQl1MTYgZWlzYV9zbG90OwogCQkJZm9yIChlaXNhX3Nsb3QgPSAweDEwMDA7IGVpc2Ffc2xvdCA8PSAweDgwMDA7CiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgZWlzYV9zbG90ICs9IDB4MTAwMCkKIAkJCQlnZHRoX2Vpc2FfcHJvYmVfb25lKGVpc2Ffc2xvdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5oIGIvZHJpdmVycy9zY3NpL2dkdGguaAppbmRleCAxNjQ2NDQ0Li4xMjBhMDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmgKQEAgLTMyMSw1MjQgKzMyMSw1MjQgQEAKIAogLyogc2NyZWVuc2VydmljZSBtZXNzYWdlICovCiB0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHVsb25nMzIgICAgIG1zZ19oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgLyogbWVzc2FnZSBoYW5kbGUgKi8KLSAgICB1bG9uZzMyICAgICBtc2dfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgbWVzc2FnZSAqLwotICAgIHVsb25nMzIgICAgIG1zZ19hbGVuOyAgICAgICAgICAgICAgICAgICAgICAgLyogYW5zd2VyIGxlbmd0aCAqLwotICAgIHVuY2hhciAgICAgIG1zZ19hbnN3ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogYW5zd2VyIGZsYWcgKi8KLSAgICB1bmNoYXIgICAgICBtc2dfZXh0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vcmUgbWVzc2FnZXMgKi8KLSAgICB1bmNoYXIgICAgICBtc2dfcmVzZXJ2ZWRbMl07CisgICAgdTMyICAgICBtc2dfaGFuZGxlOyAgICAgICAgICAgICAgICAgICAgIC8qIG1lc3NhZ2UgaGFuZGxlICovCisgICAgdTMyICAgICBtc2dfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgbWVzc2FnZSAqLworICAgIHUzMiAgICAgbXNnX2FsZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiBhbnN3ZXIgbGVuZ3RoICovCisgICAgdTggICAgICBtc2dfYW5zd2VyOyAgICAgICAgICAgICAgICAgICAgIC8qIGFuc3dlciBmbGFnICovCisgICAgdTggICAgICBtc2dfZXh0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vcmUgbWVzc2FnZXMgKi8KKyAgICB1OCAgICAgIG1zZ19yZXNlcnZlZFsyXTsKICAgICBjaGFyICAgICAgICBtc2dfdGV4dFtNU0dMRU4rMl07ICAgICAgICAgICAgIC8qIHRoZSBtZXNzYWdlIHRleHQgKi8KLX0gUEFDS0VEIGdkdGhfbXNnX3N0cjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9tc2dfc3RyOwogCiAKIC8qIElPQ1RMIGRhdGEgc3RydWN0dXJlcyAqLwogCiAvKiBTdGF0dXMgY29hbGVzY2luZyBidWZmZXIgZm9yIHJldHVybmluZyBtdWx0aXBsZSByZXF1ZXN0cyBwZXIgaW50ZXJydXB0ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgc3RhdHVzOwotICAgIHVsb25nMzIgICAgIGV4dF9zdGF0dXM7Ci0gICAgdWxvbmczMiAgICAgaW5mbzA7Ci0gICAgdWxvbmczMiAgICAgaW5mbzE7Ci19IFBBQ0tFRCBnZHRoX2NvYWxfc3RhdHVzOworICAgIHUzMiAgICAgc3RhdHVzOworICAgIHUzMiAgICAgZXh0X3N0YXR1czsKKyAgICB1MzIgICAgIGluZm8wOworICAgIHUzMiAgICAgaW5mbzE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfY29hbF9zdGF0dXM7CiAKIC8qIHBlcmZvcm1hbmNlIG1vZGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIFRoZSB2ZXJzaW9uIG9mIHRoaXMgSU9DVEwgc3RydWN0dXJlLiAqLwotICAgIHVsb25nMzIgICAgIHN0X21vZGU7ICAgICAgICAgICAgLyogMD1kaXMuLCAxPXN0X2J1Zl9hZGRyMSB2YWxpZCwgMj1ib3RoICAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfYWRkcjE7ICAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBzdGF0dXMgYnVmZmVyIDEgKi8KLSAgICB1bG9uZzMyICAgICBzdF9idWZmX3VfYWRkcjE7ICAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfaW5keDE7ICAgICAgLyogcmVzZXJ2ZWQgY29tbWFuZCBpZHguIGZvciB0aGlzIGJ1ZmZlciAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfYWRkcjI7ICAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBzdGF0dXMgYnVmZmVyIDEgKi8KLSAgICB1bG9uZzMyICAgICBzdF9idWZmX3VfYWRkcjI7ICAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfaW5keDI7ICAgICAgLyogcmVzZXJ2ZWQgY29tbWFuZCBpZHguIGZvciB0aGlzIGJ1ZmZlciAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfc2l6ZTsgICAgICAgLyogc2l6ZSBvZiBlYWNoIGJ1ZmZlciBpbiBieXRlcyAqLwotICAgIHVsb25nMzIgICAgIGNtZF9tb2RlOyAgICAgICAgICAgLyogMCA9IG1vZGUgZGlzYWJsZWQsIDEgPSBjbWRfYnVmZl9hZGRyMSAqLyAKLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl9hZGRyMTsgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kIGJ1ZmZlciAxICovICAgCi0gICAgdWxvbmczMiAgICAgY21kX2J1ZmZfdV9hZGRyMTsgICAvKiByZXNlcnZlZCBmb3IgNjQgYml0IGFkZHJlc3NpbmcgKi8KLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl9pbmR4MTsgICAgIC8qIGNtZCBidWYgYWRkcjEgdW5pcXVlIGlkZW50aWZpZXIgKi8KLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl9hZGRyMjsgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kIGJ1ZmZlciAxICovICAgCi0gICAgdWxvbmczMiAgICAgY21kX2J1ZmZfdV9hZGRyMjsgICAvKiByZXNlcnZlZCBmb3IgNjQgYml0IGFkZHJlc3NpbmcgKi8KLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl9pbmR4MjsgICAgIC8qIGNtZCBidWYgYWRkcjEgdW5pcXVlIGlkZW50aWZpZXIgKi8KLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl9zaXplOyAgICAgIC8qIHNpemUgb2YgZWFjaCBjbWQgYnVmZXIgaW4gYnl0ZXMgKi8KLSAgICB1bG9uZzMyICAgICByZXNlcnZlZDE7Ci0gICAgdWxvbmczMiAgICAgcmVzZXJ2ZWQyOwotfSBQQUNLRUQgZ2R0aF9wZXJmX21vZGVzOworICAgIHUzMiAgICAgdmVyc2lvbjsgICAgICAgICAgICAvKiBUaGUgdmVyc2lvbiBvZiB0aGlzIElPQ1RMIHN0cnVjdHVyZS4gKi8KKyAgICB1MzIgICAgIHN0X21vZGU7ICAgICAgICAgICAgLyogMD1kaXMuLCAxPXN0X2J1Zl9hZGRyMSB2YWxpZCwgMj1ib3RoICAqLworICAgIHUzMiAgICAgc3RfYnVmZl9hZGRyMTsgICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHN0YXR1cyBidWZmZXIgMSAqLworICAgIHUzMiAgICAgc3RfYnVmZl91X2FkZHIxOyAgICAvKiByZXNlcnZlZCBmb3IgNjQgYml0IGFkZHJlc3NpbmcgKi8KKyAgICB1MzIgICAgIHN0X2J1ZmZfaW5keDE7ICAgICAgLyogcmVzZXJ2ZWQgY29tbWFuZCBpZHguIGZvciB0aGlzIGJ1ZmZlciAqLworICAgIHUzMiAgICAgc3RfYnVmZl9hZGRyMjsgICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHN0YXR1cyBidWZmZXIgMSAqLworICAgIHUzMiAgICAgc3RfYnVmZl91X2FkZHIyOyAgICAvKiByZXNlcnZlZCBmb3IgNjQgYml0IGFkZHJlc3NpbmcgKi8KKyAgICB1MzIgICAgIHN0X2J1ZmZfaW5keDI7ICAgICAgLyogcmVzZXJ2ZWQgY29tbWFuZCBpZHguIGZvciB0aGlzIGJ1ZmZlciAqLworICAgIHUzMiAgICAgc3RfYnVmZl9zaXplOyAgICAgICAvKiBzaXplIG9mIGVhY2ggYnVmZmVyIGluIGJ5dGVzICovCisgICAgdTMyICAgICBjbWRfbW9kZTsgICAgICAgICAgIC8qIDAgPSBtb2RlIGRpc2FibGVkLCAxID0gY21kX2J1ZmZfYWRkcjEgKi8gCisgICAgdTMyICAgICBjbWRfYnVmZl9hZGRyMTsgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kIGJ1ZmZlciAxICovICAgCisgICAgdTMyICAgICBjbWRfYnVmZl91X2FkZHIxOyAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLworICAgIHUzMiAgICAgY21kX2J1ZmZfaW5keDE7ICAgICAvKiBjbWQgYnVmIGFkZHIxIHVuaXF1ZSBpZGVudGlmaWVyICovCisgICAgdTMyICAgICBjbWRfYnVmZl9hZGRyMjsgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgY21kIGJ1ZmZlciAxICovICAgCisgICAgdTMyICAgICBjbWRfYnVmZl91X2FkZHIyOyAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLworICAgIHUzMiAgICAgY21kX2J1ZmZfaW5keDI7ICAgICAvKiBjbWQgYnVmIGFkZHIxIHVuaXF1ZSBpZGVudGlmaWVyICovCisgICAgdTMyICAgICBjbWRfYnVmZl9zaXplOyAgICAgIC8qIHNpemUgb2YgZWFjaCBjbWQgYnVmZXIgaW4gYnl0ZXMgKi8KKyAgICB1MzIgICAgIHJlc2VydmVkMTsKKyAgICB1MzIgICAgIHJlc2VydmVkMjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9wZXJmX21vZGVzOwogCiAvKiBTQ1NJIGRyaXZlIGluZm8gKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICB2ZW5kb3JbOF07ICAgICAgICAgICAgICAgICAgICAgIC8qIHZlbmRvciBzdHJpbmcgKi8KLSAgICB1bmNoYXIgICAgICBwcm9kdWN0WzE2XTsgICAgICAgICAgICAgICAgICAgIC8qIHByb2R1Y3Qgc3RyaW5nICovCi0gICAgdW5jaGFyICAgICAgcmV2aXNpb25bNF07ICAgICAgICAgICAgICAgICAgICAvKiByZXZpc2lvbiAqLwotICAgIHVsb25nMzIgICAgIHN5X3JhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCByYXRlIGZvciBzeW5jLiB0ci4gKi8KLSAgICB1bG9uZzMyICAgICBzeV9tYXhfcmF0ZTsgICAgICAgICAgICAgICAgICAgIC8qIG1heC4gcmF0ZSBmb3Igc3luYy4gdHIuICovCi0gICAgdWxvbmczMiAgICAgbm9fbGRyaXZlOyAgICAgICAgICAgICAgICAgICAgICAvKiBiZWxvbmdzIHRvIHRoaXMgbG9nLiBkcnYuKi8KLSAgICB1bG9uZzMyICAgICBibGtjbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgKi8KLSAgICB1c2hvcnQgICAgICBibGtzaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgYmxvY2sgaW4gYnl0ZXMgKi8KLSAgICB1bmNoYXIgICAgICBhdmFpbGFibGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGFjY2VzcyBpcyBhdmFpbGFibGUgKi8KLSAgICB1bmNoYXIgICAgICBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyBpbml0aWFsaXplZCAqLwotICAgIHVuY2hhciAgICAgIGRldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBkZXZpY2V0eXBlICovCi0gICAgdW5jaGFyICAgICAgcm1fbWVkaXVtOyAgICAgICAgICAgICAgICAgICAgICAvKiBtZWRpdW0gaXMgcmVtb3ZhYmxlICovCi0gICAgdW5jaGFyICAgICAgd3BfbWVkaXVtOyAgICAgICAgICAgICAgICAgICAgICAvKiBtZWRpdW0gaXMgd3JpdGUgcHJvdGVjdGVkICovCi0gICAgdW5jaGFyICAgICAgYW5zaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIEkvSUkgb3IgSUlJPyAqLwotICAgIHVuY2hhciAgICAgIHByb3RvY29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogc2FtZSBhcyBhbnNpICovCi0gICAgdW5jaGFyICAgICAgc3luYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBzeW5jLiB0cmFuc2ZlciBlbmFiLiAqLwotICAgIHVuY2hhciAgICAgIGRpc2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogZGlzY29ubmVjdCBlbmFibGVkICovCi0gICAgdW5jaGFyICAgICAgcXVldWVpbmc7ICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBjb21tYW5kIHF1ZWluZyBlbmFiLiAqLwotICAgIHVuY2hhciAgICAgIGNhY2hlZDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogY2FjaGluZyBlbmFibGVkICovCi0gICAgdW5jaGFyICAgICAgdGFyZ2V0X2lkOyAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgb2YgZGV2aWNlICovCi0gICAgdW5jaGFyICAgICAgbHVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMVU4gaWQgb2YgZGV2aWNlICovCi0gICAgdW5jaGFyICAgICAgb3JwaGFuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBkcml2ZSBmcmFnbWVudCAqLwotICAgIHVsb25nMzIgICAgIGxhc3RfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgLyogc2Vuc2Uga2V5IG9yIGRyaXZlIHN0YXRlICovCi0gICAgdWxvbmczMiAgICAgbGFzdF9yZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAvKiByZXN1bHQgb2YgbGFzdCBjb21tYW5kICovCi0gICAgdWxvbmczMiAgICAgY2hlY2tfZXJyb3JzOyAgICAgICAgICAgICAgICAgICAvKiBlcnIuIGluIGxhc3Qgc3VyZmFjZSBjaGVjayAqLwotICAgIHVuY2hhciAgICAgIHBlcmNlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvZ3Jlc3MgZm9yIHN1cmZhY2UgY2hlY2sgKi8KLSAgICB1bmNoYXIgICAgICBsYXN0X2NoZWNrOyAgICAgICAgICAgICAgICAgICAgIC8qIElPQ1RSTCBvcGVyYXRpb24gKi8KLSAgICB1bmNoYXIgICAgICByZXNbMl07Ci0gICAgdWxvbmczMiAgICAgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcm9tIDEuMTkvMi4xOTogcmF3IHJlc2Vydi4qLwotICAgIHVuY2hhciAgICAgIG11bHRpX2J1czsgICAgICAgICAgICAgICAgICAgICAgLyogbXVsdGkgYnVzIGRldj8gKGZpYnJlIGNoLikgKi8KLSAgICB1bmNoYXIgICAgICBtYl9zdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1czogYXZhaWxhYmxlPyAqLwotICAgIHVuY2hhciAgICAgIHJlczJbMl07Ci0gICAgdW5jaGFyICAgICAgbWJfYWx0X3N0YXR1czsgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgb24gc2Vjb25kIGJ1cyAqLwotICAgIHVuY2hhciAgICAgIG1iX2FsdF9iaWQ7ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHNlY29uZCBidXMgKi8KLSAgICB1bmNoYXIgICAgICBtYl9hbHRfdGlkOyAgICAgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBpZCBvbiBzZWNvbmQgYnVzICovCi0gICAgdW5jaGFyICAgICAgcmVzMzsKLSAgICB1bmNoYXIgICAgICBmY19mbGFnOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyb20gMS4yMi8yLjIyOiBpbmZvIHZhbGlkPyovCi0gICAgdW5jaGFyICAgICAgcmVzNDsKLSAgICB1c2hvcnQgICAgICBmY19mcmFtZV9zaXplOyAgICAgICAgICAgICAgICAgIC8qIGZyYW1lIHNpemUgKGJ5dGVzKSAqLworICAgIHU4ICAgICAgdmVuZG9yWzhdOyAgICAgICAgICAgICAgICAgICAgICAvKiB2ZW5kb3Igc3RyaW5nICovCisgICAgdTggICAgICBwcm9kdWN0WzE2XTsgICAgICAgICAgICAgICAgICAgIC8qIHByb2R1Y3Qgc3RyaW5nICovCisgICAgdTggICAgICByZXZpc2lvbls0XTsgICAgICAgICAgICAgICAgICAgIC8qIHJldmlzaW9uICovCisgICAgdTMyICAgICBzeV9yYXRlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgcmF0ZSBmb3Igc3luYy4gdHIuICovCisgICAgdTMyICAgICBzeV9tYXhfcmF0ZTsgICAgICAgICAgICAgICAgICAgIC8qIG1heC4gcmF0ZSBmb3Igc3luYy4gdHIuICovCisgICAgdTMyICAgICBub19sZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGJlbG9uZ3MgdG8gdGhpcyBsb2cuIGRydi4qLworICAgIHUzMiAgICAgYmxrY250OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYmxvY2tzICovCisgICAgdTE2ICAgICAgYmxrc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplIG9mIGJsb2NrIGluIGJ5dGVzICovCisgICAgdTggICAgICBhdmFpbGFibGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGFjY2VzcyBpcyBhdmFpbGFibGUgKi8KKyAgICB1OCAgICAgIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVkaXVtIGlzIGluaXRpYWxpemVkICovCisgICAgdTggICAgICBkZXZ0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgZGV2aWNldHlwZSAqLworICAgIHU4ICAgICAgcm1fbWVkaXVtOyAgICAgICAgICAgICAgICAgICAgICAvKiBtZWRpdW0gaXMgcmVtb3ZhYmxlICovCisgICAgdTggICAgICB3cF9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KKyAgICB1OCAgICAgIGFuc2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBJL0lJIG9yIElJST8gKi8KKyAgICB1OCAgICAgIHByb3RvY29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogc2FtZSBhcyBhbnNpICovCisgICAgdTggICAgICBzeW5jOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IHN5bmMuIHRyYW5zZmVyIGVuYWIuICovCisgICAgdTggICAgICBkaXNjOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGRpc2Nvbm5lY3QgZW5hYmxlZCAqLworICAgIHU4ICAgICAgcXVldWVpbmc7ICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBjb21tYW5kIHF1ZWluZyBlbmFiLiAqLworICAgIHU4ICAgICAgY2FjaGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBjYWNoaW5nIGVuYWJsZWQgKi8KKyAgICB1OCAgICAgIHRhcmdldF9pZDsgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEIG9mIGRldmljZSAqLworICAgIHU4ICAgICAgbHVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMVU4gaWQgb2YgZGV2aWNlICovCisgICAgdTggICAgICBvcnBoYW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGRyaXZlIGZyYWdtZW50ICovCisgICAgdTMyICAgICBsYXN0X2Vycm9yOyAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnNlIGtleSBvciBkcml2ZSBzdGF0ZSAqLworICAgIHUzMiAgICAgbGFzdF9yZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAvKiByZXN1bHQgb2YgbGFzdCBjb21tYW5kICovCisgICAgdTMyICAgICBjaGVja19lcnJvcnM7ICAgICAgICAgICAgICAgICAgIC8qIGVyci4gaW4gbGFzdCBzdXJmYWNlIGNoZWNrICovCisgICAgdTggICAgICBwZXJjZW50OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2dyZXNzIGZvciBzdXJmYWNlIGNoZWNrICovCisgICAgdTggICAgICBsYXN0X2NoZWNrOyAgICAgICAgICAgICAgICAgICAgIC8qIElPQ1RSTCBvcGVyYXRpb24gKi8KKyAgICB1OCAgICAgIHJlc1syXTsKKyAgICB1MzIgICAgIGZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJvbSAxLjE5LzIuMTk6IHJhdyByZXNlcnYuKi8KKyAgICB1OCAgICAgIG11bHRpX2J1czsgICAgICAgICAgICAgICAgICAgICAgLyogbXVsdGkgYnVzIGRldj8gKGZpYnJlIGNoLikgKi8KKyAgICB1OCAgICAgIG1iX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdHVzOiBhdmFpbGFibGU/ICovCisgICAgdTggICAgICByZXMyWzJdOworICAgIHU4ICAgICAgbWJfYWx0X3N0YXR1czsgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgb24gc2Vjb25kIGJ1cyAqLworICAgIHU4ICAgICAgbWJfYWx0X2JpZDsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygc2Vjb25kIGJ1cyAqLworICAgIHU4ICAgICAgbWJfYWx0X3RpZDsgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgaWQgb24gc2Vjb25kIGJ1cyAqLworICAgIHU4ICAgICAgcmVzMzsKKyAgICB1OCAgICAgIGZjX2ZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJvbSAxLjIyLzIuMjI6IGluZm8gdmFsaWQ/Ki8KKyAgICB1OCAgICAgIHJlczQ7CisgICAgdTE2ICAgICAgZmNfZnJhbWVfc2l6ZTsgICAgICAgICAgICAgICAgICAvKiBmcmFtZSBzaXplIChieXRlcykgKi8KICAgICBjaGFyICAgICAgICB3d25bOF07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdvcmxkIHdpZGUgbmFtZSAqLwotfSBQQUNLRUQgZ2R0aF9kaXNraW5mb19zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZGlza2luZm9fc3RyOwogCiAvKiBnZXQgU0NTSSBjaGFubmVsIGNvdW50ICAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIGNoYW5uZWxfbm87ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNoYW5uZWwgKi8KLSAgICB1bG9uZzMyICAgICBkcml2ZV9jbnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCi0gICAgdW5jaGFyICAgICAgc2lvcF9pZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBJRCAqLwotICAgIHVuY2hhciAgICAgIHNpb3Bfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBwcm9jZXNzb3Igc3RhdGUgKi8gCi19IFBBQ0tFRCBnZHRoX2dldGNoX3N0cjsKKyAgICB1MzIgICAgIGNoYW5uZWxfbm87ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNoYW5uZWwgKi8KKyAgICB1MzIgICAgIGRyaXZlX2NudDsgICAgICAgICAgICAgICAgICAgICAgLyogZHJpdmUgY291bnQgKi8KKyAgICB1OCAgICAgIHNpb3BfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBwcm9jZXNzb3IgSUQgKi8KKyAgICB1OCAgICAgIHNpb3Bfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBwcm9jZXNzb3Igc3RhdGUgKi8gCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZ2V0Y2hfc3RyOwogCiAvKiBnZXQgU0NTSSBkcml2ZSBudW1iZXJzICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgc2Nfbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNoYW5uZWwgKi8KLSAgICB1bG9uZzMyICAgICBzY19jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjX2xpc3RbXSBlbGVtZW50cyAqLwotICAgIHVsb25nMzIgICAgIHNjX2xpc3RbTUFYSURdOyAgICAgICAgICAgICAgICAgLyogbWlub3IgZGV2aWNlIG51bWJlcnMgKi8KLX0gUEFDS0VEIGdkdGhfZHJsaXN0X3N0cjsKKyAgICB1MzIgICAgIHNjX25vOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBjaGFubmVsICovCisgICAgdTMyICAgICBzY19jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjX2xpc3RbXSBlbGVtZW50cyAqLworICAgIHUzMiAgICAgc2NfbGlzdFtNQVhJRF07ICAgICAgICAgICAgICAgICAvKiBtaW5vciBkZXZpY2UgbnVtYmVycyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2RybGlzdF9zdHI7CiAKIC8qIGdldCBncm93bi9wcmltYXJ5IGRlZmVjdCBjb3VudCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIHNkZGNfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwODogZ3Jvd24sIDB4MTA6IHByaW0uICovCi0gICAgdW5jaGFyICAgICAgc2RkY19mb3JtYXQ7ICAgICAgICAgICAgICAgICAgICAvKiBsaXN0IGVudHJ5IGZvcm1hdCAqLwotICAgIHVuY2hhciAgICAgIHNkZGNfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgLyogbGlzdCBlbnRyeSBsZW5ndGggKi8KLSAgICB1bmNoYXIgICAgICBzZGRjX3JlczsKLSAgICB1bG9uZzMyICAgICBzZGRjX2NudDsgICAgICAgICAgICAgICAgICAgICAgIC8qIGVudHJ5IGNvdW50ICovCi19IFBBQ0tFRCBnZHRoX2RlZmNudF9zdHI7CisgICAgdTggICAgICBzZGRjX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDg6IGdyb3duLCAweDEwOiBwcmltLiAqLworICAgIHU4ICAgICAgc2RkY19mb3JtYXQ7ICAgICAgICAgICAgICAgICAgICAvKiBsaXN0IGVudHJ5IGZvcm1hdCAqLworICAgIHU4ICAgICAgc2RkY19sZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXN0IGVudHJ5IGxlbmd0aCAqLworICAgIHU4ICAgICAgc2RkY19yZXM7CisgICAgdTMyICAgICBzZGRjX2NudDsgICAgICAgICAgICAgICAgICAgICAgIC8qIGVudHJ5IGNvdW50ICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZGVmY250X3N0cjsKIAogLyogZGlzayBzdGF0aXN0aWNzICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgYmlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNoYW5uZWwgKi8KLSAgICB1bG9uZzMyICAgICBmaXJzdDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IFNDU0kgZGlzayAqLwotICAgIHVsb25nMzIgICAgIGVudHJpZXM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzICovCi0gICAgdWxvbmczMiAgICAgY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoUikgbnVtYmVyIG9mIGluaXQuIGVsLiAqLwotICAgIHVsb25nMzIgICAgIG1vbl90aW1lOyAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZSBzdGFtcCAqLworICAgIHUzMiAgICAgYmlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNoYW5uZWwgKi8KKyAgICB1MzIgICAgIGZpcnN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgU0NTSSBkaXNrICovCisgICAgdTMyICAgICBlbnRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBlbGVtZW50cyAqLworICAgIHUzMiAgICAgY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoUikgbnVtYmVyIG9mIGluaXQuIGVsLiAqLworICAgIHUzMiAgICAgbW9uX3RpbWU7ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lIHN0YW1wICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICB0aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLwotICAgICAgICB1bmNoYXIgIGx1bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCi0gICAgICAgIHVuY2hhciAgcmVzWzJdOwotICAgICAgICB1bG9uZzMyIGJsa19zaXplOyAgICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2sgc2l6ZSBpbiBieXRlcyAqLwotICAgICAgICB1bG9uZzMyIHJkX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgLyogYnl0ZXMgcmVhZCAqLwotICAgICAgICB1bG9uZzMyIHdyX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgLyogYnl0ZXMgd3JpdHRlbiAqLwotICAgICAgICB1bG9uZzMyIHJkX2Jsa19jb3VudDsgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzIHJlYWQgKi8KLSAgICAgICAgdWxvbmczMiB3cl9ibGtfY291bnQ7ICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrcyB3cml0dGVuICovCi0gICAgICAgIHVsb25nMzIgcmV0cmllczsgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXRyaWVzICovCi0gICAgICAgIHVsb25nMzIgcmVhc3NpZ25zOyAgICAgICAgICAgICAgICAgICAgICAvKiByZWFzc2lnbnMgKi8KLSAgICB9IFBBQ0tFRCBsaXN0WzFdOwotfSBQQUNLRUQgZ2R0aF9kc2tzdGF0X3N0cjsKKyAgICAgICAgdTggIHRpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCisgICAgICAgIHU4ICBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExVTiAqLworICAgICAgICB1OCAgcmVzWzJdOworICAgICAgICB1MzIgYmxrX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBibG9jayBzaXplIGluIGJ5dGVzICovCisgICAgICAgIHUzMiByZF9jb3VudDsgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ5dGVzIHJlYWQgKi8KKyAgICAgICAgdTMyIHdyX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgLyogYnl0ZXMgd3JpdHRlbiAqLworICAgICAgICB1MzIgcmRfYmxrX2NvdW50OyAgICAgICAgICAgICAgICAgICAvKiBibG9ja3MgcmVhZCAqLworICAgICAgICB1MzIgd3JfYmxrX2NvdW50OyAgICAgICAgICAgICAgICAgICAvKiBibG9ja3Mgd3JpdHRlbiAqLworICAgICAgICB1MzIgcmV0cmllczsgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXRyaWVzICovCisgICAgICAgIHUzMiByZWFzc2lnbnM7ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYXNzaWducyAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbGlzdFsxXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9kc2tzdGF0X3N0cjsKIAogLyogSU8gY2hhbm5lbCBoZWFkZXIgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICB2ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZlcnNpb24gKC0xVUw6IG5ld2VzdCkgKi8KLSAgICB1bmNoYXIgICAgICBsaXN0X2VudHJpZXM7ICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICBmaXJzdF9jaGFuOyAgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IGNoYW5uZWwgbnVtYmVyICovCi0gICAgdW5jaGFyICAgICAgbGFzdF9jaGFuOyAgICAgICAgICAgICAgICAgICAgICAvKiBsYXN0IGNoYW5uZWwgbnVtYmVyICovCi0gICAgdW5jaGFyICAgICAgY2hhbl9jb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiAoUikgY2hhbm5lbCBjb3VudCAqLwotICAgIHVsb25nMzIgICAgIGxpc3Rfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IG9mIGxpc3RbMF0gKi8KLX0gUEFDS0VEIGdkdGhfaW9jaGFuX2hlYWRlcjsKKyAgICB1MzIgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiAoLTFVTDogbmV3ZXN0KSAqLworICAgIHU4ICAgICAgbGlzdF9lbnRyaWVzOyAgICAgICAgICAgICAgICAgICAvKiBsaXN0IGVudHJ5IGNvdW50ICovCisgICAgdTggICAgICBmaXJzdF9jaGFuOyAgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IGNoYW5uZWwgbnVtYmVyICovCisgICAgdTggICAgICBsYXN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgIC8qIGxhc3QgY2hhbm5lbCBudW1iZXIgKi8KKyAgICB1OCAgICAgIGNoYW5fY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyogKFIpIGNoYW5uZWwgY291bnQgKi8KKyAgICB1MzIgICAgIGxpc3Rfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IG9mIGxpc3RbMF0gKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9pb2NoYW5faGVhZGVyOwogCiAvKiBnZXQgSU8gY2hhbm5lbCBkZXNjcmlwdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdGhfaW9jaGFuX2hlYWRlciAgaGRyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVsb25nMzIgICAgICAgICBhZGRyZXNzOyAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGFkZHJlc3MgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgKFNDU0ksIEZDQUwpICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBsb2NhbF9ubzsgICAgICAgICAgICAgICAvKiBsb2NhbCBudW1iZXIgKi8KLSAgICAgICAgdXNob3J0ICAgICAgICAgIGZlYXR1cmVzOyAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgZmVhdHVyZXMgKi8KLSAgICB9IFBBQ0tFRCBsaXN0W01BWEJVU107Ci19IFBBQ0tFRCBnZHRoX2lvY2hhbl9zdHI7CisgICAgICAgIHUzMiAgICAgICAgIGFkZHJlc3M7ICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgYWRkcmVzcyAqLworICAgICAgICB1OCAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgICAgICAvKiB0eXBlIChTQ1NJLCBGQ0FMKSAqLworICAgICAgICB1OCAgICAgICAgICBsb2NhbF9ubzsgICAgICAgICAgICAgICAvKiBsb2NhbCBudW1iZXIgKi8KKyAgICAgICAgdTE2ICAgICAgICAgIGZlYXR1cmVzOyAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgZmVhdHVyZXMgKi8KKyAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGxpc3RbTUFYQlVTXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9pb2NoYW5fc3RyOwogCiAvKiBnZXQgcmF3IElPIGNoYW5uZWwgZGVzY3JpcHRpb24gKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICBnZHRoX2lvY2hhbl9oZWFkZXIgIGhkcjsKICAgICBzdHJ1Y3QgewotICAgICAgICB1bmNoYXIgICAgICBwcm9jX2lkOyAgICAgICAgICAgICAgICAgICAgLyogcHJvY2Vzc29yIGlkICovCi0gICAgICAgIHVuY2hhciAgICAgIHByb2NfZGVmZWN0OyAgICAgICAgICAgICAgICAvKiBkZWZlY3QgPyAqLwotICAgICAgICB1bmNoYXIgICAgICByZXNlcnZlZFsyXTsKLSAgICB9IFBBQ0tFRCBsaXN0W01BWEJVU107Ci19IFBBQ0tFRCBnZHRoX3Jhd19pb2NoYW5fc3RyOworICAgICAgICB1OCAgICAgIHByb2NfaWQ7ICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZXNzb3IgaWQgKi8KKyAgICAgICAgdTggICAgICBwcm9jX2RlZmVjdDsgICAgICAgICAgICAgICAgLyogZGVmZWN0ID8gKi8KKyAgICAgICAgdTggICAgICByZXNlcnZlZFsyXTsKKyAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGxpc3RbTUFYQlVTXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9yYXdfaW9jaGFuX3N0cjsKIAogLyogYXJyYXkgZHJpdmUgY29tcG9uZW50ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgYWxfY29udHJvbGxlcjsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIElEICovCi0gICAgdW5jaGFyICAgICAgYWxfY2FjaGVfZHJpdmU7ICAgICAgICAgICAgICAgICAvKiBjYWNoZSBkcml2ZSBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBhbF9zdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGRyaXZlIHN0YXRlICovCi0gICAgdW5jaGFyICAgICAgYWxfcmVzWzJdOyAgICAgCi19IFBBQ0tFRCBnZHRoX2FycmF5Y29tcF9zdHI7CisgICAgdTMyICAgICBhbF9jb250cm9sbGVyOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgSUQgKi8KKyAgICB1OCAgICAgIGFsX2NhY2hlX2RyaXZlOyAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgbnVtYmVyICovCisgICAgdTggICAgICBhbF9zdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGRyaXZlIHN0YXRlICovCisgICAgdTggICAgICBhbF9yZXNbMl07ICAgICAKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9hcnJheWNvbXBfc3RyOwogCiAvKiBhcnJheSBkcml2ZSBpbmZvcm1hdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIGFpX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJyYXkgdHlwZSAoUkFJRDAsNCw1KSAqLwotICAgIHVuY2hhciAgICAgIGFpX2NhY2hlX2RyaXZlX2NudDsgICAgICAgICAgICAgLyogYWN0aXZlIGNhY2hlZHJpdmVzICovCi0gICAgdW5jaGFyICAgICAgYWlfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBhcnJheSBkcml2ZSBzdGF0ZSAqLwotICAgIHVuY2hhciAgICAgIGFpX21hc3Rlcl9jZDsgICAgICAgICAgICAgICAgICAgLyogbWFzdGVyIGNhY2hlZHJpdmUgKi8KLSAgICB1bG9uZzMyICAgICBhaV9tYXN0ZXJfY29udHJvbGxlcjsgICAgICAgICAgIC8qIElEIG9mIG1hc3RlciBjb250cm9sbGVyICovCi0gICAgdWxvbmczMiAgICAgYWlfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2VyIGNhcGFjaXR5IFtzZWN0b3JzXSAqLwotICAgIHVsb25nMzIgICAgIGFpX3N0cmlwaW5nX3NpemU7ICAgICAgICAgICAgICAgLyogc3RyaXBpbmcgc2l6ZSBbc2VjdG9yc10gKi8KLSAgICB1bG9uZzMyICAgICBhaV9zZWNzaXplOyAgICAgICAgICAgICAgICAgICAgIC8qIHNlY3RvciBzaXplIFtieXRlc10gKi8KLSAgICB1bG9uZzMyICAgICBhaV9lcnJfaW5mbzsgICAgICAgICAgICAgICAgICAgIC8qIGZhaWxlZCBjYWNoZSBkcml2ZSAqLwotICAgIHVuY2hhciAgICAgIGFpX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogbmFtZSBvZiB0aGUgYXJyYXkgZHJpdmUgKi8KLSAgICB1bmNoYXIgICAgICBhaV9jb250cm9sbGVyX2NudDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb250cm9sbGVycyAqLwotICAgIHVuY2hhciAgICAgIGFpX3JlbW92YWJsZTsgICAgICAgICAgICAgICAgICAgLyogZmxhZzogcmVtb3ZhYmxlICovCi0gICAgdW5jaGFyICAgICAgYWlfd3JpdGVfcHJvdGVjdGVkOyAgICAgICAgICAgICAvKiBmbGFnOiB3cml0ZSBwcm90ZWN0ZWQgKi8KLSAgICB1bmNoYXIgICAgICBhaV9kZXZ0eXBlOyAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGU6IGFsd2F5cyBkaXJlY3QgYWNjZXNzICovCisgICAgdTggICAgICBhaV90eXBlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFycmF5IHR5cGUgKFJBSUQwLDQsNSkgKi8KKyAgICB1OCAgICAgIGFpX2NhY2hlX2RyaXZlX2NudDsgICAgICAgICAgICAgLyogYWN0aXZlIGNhY2hlZHJpdmVzICovCisgICAgdTggICAgICBhaV9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFycmF5IGRyaXZlIHN0YXRlICovCisgICAgdTggICAgICBhaV9tYXN0ZXJfY2Q7ICAgICAgICAgICAgICAgICAgIC8qIG1hc3RlciBjYWNoZWRyaXZlICovCisgICAgdTMyICAgICBhaV9tYXN0ZXJfY29udHJvbGxlcjsgICAgICAgICAgIC8qIElEIG9mIG1hc3RlciBjb250cm9sbGVyICovCisgICAgdTMyICAgICBhaV9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZXIgY2FwYWNpdHkgW3NlY3RvcnNdICovCisgICAgdTMyICAgICBhaV9zdHJpcGluZ19zaXplOyAgICAgICAgICAgICAgIC8qIHN0cmlwaW5nIHNpemUgW3NlY3RvcnNdICovCisgICAgdTMyICAgICBhaV9zZWNzaXplOyAgICAgICAgICAgICAgICAgICAgIC8qIHNlY3RvciBzaXplIFtieXRlc10gKi8KKyAgICB1MzIgICAgIGFpX2Vycl9pbmZvOyAgICAgICAgICAgICAgICAgICAgLyogZmFpbGVkIGNhY2hlIGRyaXZlICovCisgICAgdTggICAgICBhaV9uYW1lWzhdOyAgICAgICAgICAgICAgICAgICAgIC8qIG5hbWUgb2YgdGhlIGFycmF5IGRyaXZlICovCisgICAgdTggICAgICBhaV9jb250cm9sbGVyX2NudDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb250cm9sbGVycyAqLworICAgIHU4ICAgICAgYWlfcmVtb3ZhYmxlOyAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiByZW1vdmFibGUgKi8KKyAgICB1OCAgICAgIGFpX3dyaXRlX3Byb3RlY3RlZDsgICAgICAgICAgICAgLyogZmxhZzogd3JpdGUgcHJvdGVjdGVkICovCisgICAgdTggICAgICBhaV9kZXZ0eXBlOyAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGU6IGFsd2F5cyBkaXJlY3QgYWNjZXNzICovCiAgICAgZ2R0aF9hcnJheWNvbXBfc3RyICBhaV9kcml2ZXNbMzVdOyAgICAgICAgICAvKiBkcml2ZSBjb21wb25lbnRzOiAqLwotICAgIHVuY2hhciAgICAgIGFpX2RyaXZlX2VudHJpZXM7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGRyaXZlIGNvbXBvbmVudHMgKi8KLSAgICB1bmNoYXIgICAgICBhaV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIHByb3RlY3Rpb24gZmxhZyAqLwotICAgIHVuY2hhciAgICAgIGFpX3ZlcmlmeV9zdGF0ZTsgICAgICAgICAgICAgICAgLyogc3RhdGUgb2YgYSBwYXJpdHkgdmVyaWZ5ICovCi0gICAgdW5jaGFyICAgICAgYWlfZXh0X3N0YXRlOyAgICAgICAgICAgICAgICAgICAvKiBleHRlbmRlZCBhcnJheSBkcml2ZSBzdGF0ZSAqLwotICAgIHVuY2hhciAgICAgIGFpX2V4cGFuZF9zdGF0ZTsgICAgICAgICAgICAgICAgLyogYXJyYXkgZXhwYW5kIHN0YXRlICg+PTIuMTgpKi8KLSAgICB1bmNoYXIgICAgICBhaV9yZXNlcnZlZFszXTsKLX0gUEFDS0VEIGdkdGhfYXJyYXlpbmZfc3RyOworICAgIHU4ICAgICAgYWlfZHJpdmVfZW50cmllczsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZHJpdmUgY29tcG9uZW50cyAqLworICAgIHU4ICAgICAgYWlfcHJvdGVjdGVkOyAgICAgICAgICAgICAgICAgICAvKiBwcm90ZWN0aW9uIGZsYWcgKi8KKyAgICB1OCAgICAgIGFpX3ZlcmlmeV9zdGF0ZTsgICAgICAgICAgICAgICAgLyogc3RhdGUgb2YgYSBwYXJpdHkgdmVyaWZ5ICovCisgICAgdTggICAgICBhaV9leHRfc3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qIGV4dGVuZGVkIGFycmF5IGRyaXZlIHN0YXRlICovCisgICAgdTggICAgICBhaV9leHBhbmRfc3RhdGU7ICAgICAgICAgICAgICAgIC8qIGFycmF5IGV4cGFuZCBzdGF0ZSAoPj0yLjE4KSovCisgICAgdTggICAgICBhaV9yZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9hcnJheWluZl9zdHI7CiAKIC8qIGdldCBhcnJheSBkcml2ZSBsaXN0ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgY29udHJvbGxlcl9ubzsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG5vLiAqLwotICAgIHVuY2hhciAgICAgIGNkX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgLyogbWFzdGVyIGNhY2hlZHJpdmUgKi8KLSAgICB1bmNoYXIgICAgICBpc19hcnJheWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWc6IGlzIGFycmF5IGRyaXZlPyAqLwotICAgIHVuY2hhciAgICAgIGlzX21hc3RlcjsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgYXJyYXkgbWFzdGVyPyAqLwotICAgIHVuY2hhciAgICAgIGlzX3Bhcml0eTsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgcGFyaXR5IGRyaXZlPyAqLwotICAgIHVuY2hhciAgICAgIGlzX2hvdGZpeDsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgaG90Zml4IGRyaXZlPyAqLwotICAgIHVuY2hhciAgICAgIHJlc1szXTsKLX0gUEFDS0VEIGdkdGhfYWxpc3Rfc3RyOworICAgIHUzMiAgICAgY29udHJvbGxlcl9ubzsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG5vLiAqLworICAgIHU4ICAgICAgY2RfaGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiBtYXN0ZXIgY2FjaGVkcml2ZSAqLworICAgIHU4ICAgICAgaXNfYXJyYXlkOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBhcnJheSBkcml2ZT8gKi8KKyAgICB1OCAgICAgIGlzX21hc3RlcjsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgYXJyYXkgbWFzdGVyPyAqLworICAgIHU4ICAgICAgaXNfcGFyaXR5OyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBwYXJpdHkgZHJpdmU/ICovCisgICAgdTggICAgICBpc19ob3RmaXg7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWc6IGlzIGhvdGZpeCBkcml2ZT8gKi8KKyAgICB1OCAgICAgIHJlc1szXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9hbGlzdF9zdHI7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBlbnRyaWVzX2F2YWlsOyAgICAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBlbnRyaWVzICovCi0gICAgdWxvbmczMiAgICAgZW50cmllc19pbml0OyAgICAgICAgICAgICAgICAgICAvKiByZXR1cm5lZCBlbnRyaWVzICovCi0gICAgdWxvbmczMiAgICAgZmlyc3RfZW50cnk7ICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBlbnRyeSBudW1iZXIgKi8KLSAgICB1bG9uZzMyICAgICBsaXN0X29mZnNldDsgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCBvZiBmb2xsb3dpbmcgbGlzdCAqLworICAgIHUzMiAgICAgZW50cmllc19hdmFpbDsgICAgICAgICAgICAgICAgICAvKiBhbGxvY2F0ZWQgZW50cmllcyAqLworICAgIHUzMiAgICAgZW50cmllc19pbml0OyAgICAgICAgICAgICAgICAgICAvKiByZXR1cm5lZCBlbnRyaWVzICovCisgICAgdTMyICAgICBmaXJzdF9lbnRyeTsgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IGVudHJ5IG51bWJlciAqLworICAgIHUzMiAgICAgbGlzdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgZm9sbG93aW5nIGxpc3QgKi8KICAgICBnZHRoX2FsaXN0X3N0ciBsaXN0WzFdOyAgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgKi8KLX0gUEFDS0VEIGdkdGhfYXJjZGxfc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FyY2RsX3N0cjsKIAogLyogY2FjaGUgaW5mby9jb25maWcgSU9DVEwgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICB2ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpcm13YXJlIHZlcnNpb24gKi8KLSAgICB1c2hvcnQgICAgICBzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIHN0YXRlIChvbi9vZmYpICovCi0gICAgdXNob3J0ICAgICAgc3RyYXRlZ3k7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzdHJhdGVneSAqLwotICAgIHVzaG9ydCAgICAgIHdyaXRlX2JhY2s7ICAgICAgICAgICAgICAgICAgICAgLyogd3JpdGUgYmFjayBzdGF0ZSAob24vb2ZmKSAqLwotICAgIHVzaG9ydCAgICAgIGJsb2NrX3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgYmxvY2sgc2l6ZSAqLwotfSBQQUNLRUQgZ2R0aF9jcGFyX3N0cjsKKyAgICB1MzIgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlybXdhcmUgdmVyc2lvbiAqLworICAgIHUxNiAgICAgIHN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc3RhdGUgKG9uL29mZikgKi8KKyAgICB1MTYgICAgICBzdHJhdGVneTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIHN0cmF0ZWd5ICovCisgICAgdTE2ICAgICAgd3JpdGVfYmFjazsgICAgICAgICAgICAgICAgICAgICAvKiB3cml0ZSBiYWNrIHN0YXRlIChvbi9vZmYpICovCisgICAgdTE2ICAgICAgYmxvY2tfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBibG9jayBzaXplICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfY3Bhcl9zdHI7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBjc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIHNpemUgKi8KLSAgICB1bG9uZzMyICAgICByZWFkX2NudDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWQvd3JpdGUgY291bnRlciAqLwotICAgIHVsb25nMzIgICAgIHdyaXRlX2NudDsKLSAgICB1bG9uZzMyICAgICB0cl9oaXRzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhpdHMgKi8KLSAgICB1bG9uZzMyICAgICBzZWNfaGl0czsKLSAgICB1bG9uZzMyICAgICBzZWNfbWlzczsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pc3NlcyAqLwotfSBQQUNLRUQgZ2R0aF9jc3RhdF9zdHI7CisgICAgdTMyICAgICBjc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIHNpemUgKi8KKyAgICB1MzIgICAgIHJlYWRfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZC93cml0ZSBjb3VudGVyICovCisgICAgdTMyICAgICB3cml0ZV9jbnQ7CisgICAgdTMyICAgICB0cl9oaXRzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhpdHMgKi8KKyAgICB1MzIgICAgIHNlY19oaXRzOworICAgIHUzMiAgICAgc2VjX21pc3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtaXNzZXMgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jc3RhdF9zdHI7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBnZHRoX2NwYXJfc3RyICAgY3BhcjsKICAgICBnZHRoX2NzdGF0X3N0ciAgY3N0YXQ7Ci19IFBBQ0tFRCBnZHRoX2NpbmZvX3N0cjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jaW5mb19zdHI7CiAKIC8qIGNhY2hlIGRyaXZlIGluZm8gKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICBjZF9uYW1lWzhdOyAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGRyaXZlIG5hbWUgKi8KLSAgICB1bG9uZzMyICAgICBjZF9kZXZ0eXBlOyAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgZGV2aWNldHlwZSAqLwotICAgIHVsb25nMzIgICAgIGNkX2xkY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGxvZy4gZHJpdmVzICovCi0gICAgdWxvbmczMiAgICAgY2RfbGFzdF9lcnJvcjsgICAgICAgICAgICAgICAgICAvKiBsYXN0IGVycm9yICovCi0gICAgdW5jaGFyICAgICAgY2RfaW5pdGlhbGl6ZWQ7ICAgICAgICAgICAgICAgICAvKiBkcml2ZSBpcyBpbml0aWFsaXplZCAqLwotICAgIHVuY2hhciAgICAgIGNkX3JlbW92YWJsZTsgICAgICAgICAgICAgICAgICAgLyogbWVkaWEgaXMgcmVtb3ZhYmxlICovCi0gICAgdW5jaGFyICAgICAgY2Rfd3JpdGVfcHJvdGVjdGVkOyAgICAgICAgICAgICAvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KLSAgICB1bmNoYXIgICAgICBjZF9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvb2wgSG90IEZpeD8gKi8KLSAgICB1bG9uZzMyICAgICBsZF9ibGtjbnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgKi8KLSAgICB1bG9uZzMyICAgICBsZF9ibGtzaXplOyAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2Nrc2l6ZSAqLwotICAgIHVsb25nMzIgICAgIGxkX2RjbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGRpc2tzICovCi0gICAgdWxvbmczMiAgICAgbGRfc2xhdmU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIGluZGV4ICovCi0gICAgdWxvbmczMiAgICAgbGRfZHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiB0eXBlIG9mIGxvZ2ljYWwgZHJpdmUgKi8KLSAgICB1bG9uZzMyICAgICBsZF9sYXN0X2Vycm9yOyAgICAgICAgICAgICAgICAgIC8qIGxhc3QgZXJyb3IgKi8KLSAgICB1bmNoYXIgICAgICBsZF9uYW1lWzhdOyAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgbmFtZSAqLwotICAgIHVuY2hhciAgICAgIGxkX2Vycm9yOyAgICAgICAgICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KLX0gUEFDS0VEIGdkdGhfY2RyaW5mb19zdHI7CisgICAgdTggICAgICBjZF9uYW1lWzhdOyAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGRyaXZlIG5hbWUgKi8KKyAgICB1MzIgICAgIGNkX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBkZXZpY2V0eXBlICovCisgICAgdTMyICAgICBjZF9sZGNudDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBsb2cuIGRyaXZlcyAqLworICAgIHUzMiAgICAgY2RfbGFzdF9lcnJvcjsgICAgICAgICAgICAgICAgICAvKiBsYXN0IGVycm9yICovCisgICAgdTggICAgICBjZF9pbml0aWFsaXplZDsgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGlzIGluaXRpYWxpemVkICovCisgICAgdTggICAgICBjZF9yZW1vdmFibGU7ICAgICAgICAgICAgICAgICAgIC8qIG1lZGlhIGlzIHJlbW92YWJsZSAqLworICAgIHU4ICAgICAgY2Rfd3JpdGVfcHJvdGVjdGVkOyAgICAgICAgICAgICAvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyAgICB1OCAgICAgIGNkX2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogUG9vbCBIb3QgRml4PyAqLworICAgIHUzMiAgICAgbGRfYmxrY250OyAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYmxvY2tzICovCisgICAgdTMyICAgICBsZF9ibGtzaXplOyAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2Nrc2l6ZSAqLworICAgIHUzMiAgICAgbGRfZGNudDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlza3MgKi8KKyAgICB1MzIgICAgIGxkX3NsYXZlOyAgICAgICAgICAgICAgICAgICAgICAgLyogbG9nLiBkcml2ZSBpbmRleCAqLworICAgIHUzMiAgICAgbGRfZHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAvKiB0eXBlIG9mIGxvZ2ljYWwgZHJpdmUgKi8KKyAgICB1MzIgICAgIGxkX2xhc3RfZXJyb3I7ICAgICAgICAgICAgICAgICAgLyogbGFzdCBlcnJvciAqLworICAgIHU4ICAgICAgbGRfbmFtZVs4XTsgICAgICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIG5hbWUgKi8KKyAgICB1OCAgICAgIGxkX2Vycm9yOyAgICAgICAgICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jZHJpbmZvX3N0cjsKIAogLyogT0VNIHN0cmluZyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIGN0bF92ZXJzaW9uOwotICAgIHVsb25nMzIgICAgIGZpbGVfbWFqb3JfdmVyc2lvbjsKLSAgICB1bG9uZzMyICAgICBmaWxlX21pbm9yX3ZlcnNpb247Ci0gICAgdWxvbmczMiAgICAgYnVmZmVyX3NpemU7Ci0gICAgdWxvbmczMiAgICAgY3B5X2NvdW50OwotICAgIHVsb25nMzIgICAgIGV4dF9lcnJvcjsKLSAgICB1bG9uZzMyICAgICBvZW1faWQ7Ci0gICAgdWxvbmczMiAgICAgYm9hcmRfaWQ7Ci19IFBBQ0tFRCBnZHRoX29lbV9zdHJfcGFyYW1zOworICAgIHUzMiAgICAgY3RsX3ZlcnNpb247CisgICAgdTMyICAgICBmaWxlX21ham9yX3ZlcnNpb247CisgICAgdTMyICAgICBmaWxlX21pbm9yX3ZlcnNpb247CisgICAgdTMyICAgICBidWZmZXJfc2l6ZTsKKyAgICB1MzIgICAgIGNweV9jb3VudDsKKyAgICB1MzIgICAgIGV4dF9lcnJvcjsKKyAgICB1MzIgICAgIG9lbV9pZDsKKyAgICB1MzIgICAgIGJvYXJkX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX29lbV9zdHJfcGFyYW1zOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgcHJvZHVjdF8wXzFfbmFtZVsxNl07Ci0gICAgdW5jaGFyICAgICAgcHJvZHVjdF80XzVfbmFtZVsxNl07Ci0gICAgdW5jaGFyICAgICAgcHJvZHVjdF9jbHVzdGVyX25hbWVbMTZdOwotICAgIHVuY2hhciAgICAgIHByb2R1Y3RfcmVzZXJ2ZWRbMTZdOwotICAgIHVuY2hhciAgICAgIHNjc2lfY2x1c3Rlcl90YXJnZXRfdmVuZG9yX2lkWzE2XTsKLSAgICB1bmNoYXIgICAgICBjbHVzdGVyX3JhaWRfZndfbmFtZVsxNl07Ci0gICAgdW5jaGFyICAgICAgb2VtX2JyYW5kX25hbWVbMTZdOwotICAgIHVuY2hhciAgICAgIG9lbV9yYWlkX3R5cGVbMTZdOwotICAgIHVuY2hhciAgICAgIGJpb3NfdHlwZVsxM107Ci0gICAgdW5jaGFyICAgICAgYmlvc190aXRsZVs1MF07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbXBhbnlfbmFtZVszN107Ci0gICAgdWxvbmczMiAgICAgcGNpX2lkXzE7Ci0gICAgdWxvbmczMiAgICAgcGNpX2lkXzI7Ci0gICAgdW5jaGFyICAgICAgdmFsaWRhdGlvbl9zdGF0dXNbODBdOwotICAgIHVuY2hhciAgICAgIHJlc2VydmVkXzFbNF07Ci0gICAgdW5jaGFyICAgICAgc2NzaV9ob3N0X2RyaXZlX2lucXVpcnlfdmVuZG9yX2lkWzE2XTsKLSAgICB1bmNoYXIgICAgICBsaWJyYXJ5X2ZpbGVfdGVtcGxhdGVbMTZdOwotICAgIHVuY2hhciAgICAgIHJlc2VydmVkXzJbMTZdOwotICAgIHVuY2hhciAgICAgIHRvb2xfbmFtZV8xWzMyXTsKLSAgICB1bmNoYXIgICAgICB0b29sX25hbWVfMlszMl07Ci0gICAgdW5jaGFyICAgICAgdG9vbF9uYW1lXzNbMzJdOwotICAgIHVuY2hhciAgICAgIG9lbV9jb250YWN0XzFbODRdOwotICAgIHVuY2hhciAgICAgIG9lbV9jb250YWN0XzJbODRdOwotICAgIHVuY2hhciAgICAgIG9lbV9jb250YWN0XzNbODRdOwotfSBQQUNLRUQgZ2R0aF9vZW1fc3RyOworICAgIHU4ICAgICAgcHJvZHVjdF8wXzFfbmFtZVsxNl07CisgICAgdTggICAgICBwcm9kdWN0XzRfNV9uYW1lWzE2XTsKKyAgICB1OCAgICAgIHByb2R1Y3RfY2x1c3Rlcl9uYW1lWzE2XTsKKyAgICB1OCAgICAgIHByb2R1Y3RfcmVzZXJ2ZWRbMTZdOworICAgIHU4ICAgICAgc2NzaV9jbHVzdGVyX3RhcmdldF92ZW5kb3JfaWRbMTZdOworICAgIHU4ICAgICAgY2x1c3Rlcl9yYWlkX2Z3X25hbWVbMTZdOworICAgIHU4ICAgICAgb2VtX2JyYW5kX25hbWVbMTZdOworICAgIHU4ICAgICAgb2VtX3JhaWRfdHlwZVsxNl07CisgICAgdTggICAgICBiaW9zX3R5cGVbMTNdOworICAgIHU4ICAgICAgYmlvc190aXRsZVs1MF07CisgICAgdTggICAgICBvZW1fY29tcGFueV9uYW1lWzM3XTsKKyAgICB1MzIgICAgIHBjaV9pZF8xOworICAgIHUzMiAgICAgcGNpX2lkXzI7CisgICAgdTggICAgICB2YWxpZGF0aW9uX3N0YXR1c1s4MF07CisgICAgdTggICAgICByZXNlcnZlZF8xWzRdOworICAgIHU4ICAgICAgc2NzaV9ob3N0X2RyaXZlX2lucXVpcnlfdmVuZG9yX2lkWzE2XTsKKyAgICB1OCAgICAgIGxpYnJhcnlfZmlsZV90ZW1wbGF0ZVsxNl07CisgICAgdTggICAgICByZXNlcnZlZF8yWzE2XTsKKyAgICB1OCAgICAgIHRvb2xfbmFtZV8xWzMyXTsKKyAgICB1OCAgICAgIHRvb2xfbmFtZV8yWzMyXTsKKyAgICB1OCAgICAgIHRvb2xfbmFtZV8zWzMyXTsKKyAgICB1OCAgICAgIG9lbV9jb250YWN0XzFbODRdOworICAgIHU4ICAgICAgb2VtX2NvbnRhY3RfMls4NF07CisgICAgdTggICAgICBvZW1fY29udGFjdF8zWzg0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9vZW1fc3RyOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgZ2R0aF9vZW1fc3RyX3BhcmFtcyBwYXJhbXM7CiAgICAgZ2R0aF9vZW1fc3RyICAgICAgICB0ZXh0OwotfSBQQUNLRUQgZ2R0aF9vZW1fc3RyX2lvY3RsOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX29lbV9zdHJfaW9jdGw7CiAKIC8qIGJvYXJkIGZlYXR1cmVzICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgY2hhaW5pbmc7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFpbmluZyBzdXBwb3J0ZWQgKi8KLSAgICB1bmNoYXIgICAgICBzdHJpcGluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwaW5nIChSQUlELTApIHN1cHAuICovCi0gICAgdW5jaGFyICAgICAgbWlycm9yaW5nOyAgICAgICAgICAgICAgICAgICAgICAvKiBNaXJyb3JpbmcgKFJBSUQtMSkgc3VwcC4gKi8KLSAgICB1bmNoYXIgICAgICByYWlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJBSUQtNC81LzEwIHN1cHBvcnRlZCAqLwotfSBQQUNLRUQgZ2R0aF9iZmVhdF9zdHI7CisgICAgdTggICAgICBjaGFpbmluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYWluaW5nIHN1cHBvcnRlZCAqLworICAgIHU4ICAgICAgc3RyaXBpbmc7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcGluZyAoUkFJRC0wKSBzdXBwLiAqLworICAgIHU4ICAgICAgbWlycm9yaW5nOyAgICAgICAgICAgICAgICAgICAgICAvKiBNaXJyb3JpbmcgKFJBSUQtMSkgc3VwcC4gKi8KKyAgICB1OCAgICAgIHJhaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkFJRC00LzUvMTAgc3VwcG9ydGVkICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfYmZlYXRfc3RyOwogCiAvKiBib2FyZCBpbmZvIElPQ1RMICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgc2VyX25vOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXJpYWwgbm8uICovCi0gICAgdW5jaGFyICAgICAgb2VtX2lkWzJdOyAgICAgICAgICAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KLSAgICB1c2hvcnQgICAgICBlcF9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGVwcm9tIGZsYWdzICovCi0gICAgdWxvbmczMiAgICAgcHJvY19pZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZXNzb3IgSUQgKi8KLSAgICB1bG9uZzMyICAgICBtZW1zaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBzaXplIChieXRlcykgKi8KLSAgICB1bmNoYXIgICAgICBtZW1fYmFua3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBiYW5rcyAqLwotICAgIHVuY2hhciAgICAgIGNoYW5fdHlwZTsgICAgICAgICAgICAgICAgICAgICAgLyogY2hhbm5lbCB0eXBlICovCi0gICAgdW5jaGFyICAgICAgY2hhbl9jb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGNvdW50ICovCi0gICAgdW5jaGFyICAgICAgcmRvbmdsZV9wcmVzOyAgICAgICAgICAgICAgICAgICAvKiBkb25nbGUgcHJlc2VudD8gKi8KLSAgICB1bG9uZzMyICAgICBlcHJfZndfdmVyOyAgICAgICAgICAgICAgICAgICAgIC8qIChlcHJvbSkgZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHVsb25nMzIgICAgIHVwZF9md192ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogKHVwZGF0ZSkgZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHVsb25nMzIgICAgIHVwZF9yZXZpc2lvbjsgICAgICAgICAgICAgICAgICAgLyogdXBkYXRlIHJldmlzaW9uICovCisgICAgdTMyICAgICBzZXJfbm87ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlcmlhbCBuby4gKi8KKyAgICB1OCAgICAgIG9lbV9pZFsyXTsgICAgICAgICAgICAgICAgICAgICAgLyogT0VNIElEICovCisgICAgdTE2ICAgICAgZXBfZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBlcHJvbSBmbGFncyAqLworICAgIHUzMiAgICAgcHJvY19pZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZXNzb3IgSUQgKi8KKyAgICB1MzIgICAgIG1lbXNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IHNpemUgKGJ5dGVzKSAqLworICAgIHU4ICAgICAgbWVtX2JhbmtzOyAgICAgICAgICAgICAgICAgICAgICAvKiBtZW1vcnkgYmFua3MgKi8KKyAgICB1OCAgICAgIGNoYW5fdHlwZTsgICAgICAgICAgICAgICAgICAgICAgLyogY2hhbm5lbCB0eXBlICovCisgICAgdTggICAgICBjaGFuX2NvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgY291bnQgKi8KKyAgICB1OCAgICAgIHJkb25nbGVfcHJlczsgICAgICAgICAgICAgICAgICAgLyogZG9uZ2xlIHByZXNlbnQ/ICovCisgICAgdTMyICAgICBlcHJfZndfdmVyOyAgICAgICAgICAgICAgICAgICAgIC8qIChlcHJvbSkgZmlybXdhcmUgdmVyc2lvbiAqLworICAgIHUzMiAgICAgdXBkX2Z3X3ZlcjsgICAgICAgICAgICAgICAgICAgICAvKiAodXBkYXRlKSBmaXJtd2FyZSB2ZXJzaW9uICovCisgICAgdTMyICAgICB1cGRfcmV2aXNpb247ICAgICAgICAgICAgICAgICAgIC8qIHVwZGF0ZSByZXZpc2lvbiAqLwogICAgIGNoYXIgICAgICAgIHR5cGVfc3RyaW5nWzE2XTsgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBuYW1lICovCiAgICAgY2hhciAgICAgICAgcmFpZF9zdHJpbmdbMTZdOyAgICAgICAgICAgICAgICAvKiBSQUlEIGZpcm13YXJlIG5hbWUgKi8KLSAgICB1bmNoYXIgICAgICB1cGRhdGVfcHJlczsgICAgICAgICAgICAgICAgICAgIC8qIHVwZGF0ZSBwcmVzZW50PyAqLwotICAgIHVuY2hhciAgICAgIHhvcl9wcmVzOyAgICAgICAgICAgICAgICAgICAgICAgLyogWE9SIGVuZ2luZSBwcmVzZW50PyAqLwotICAgIHVuY2hhciAgICAgIHByb21fdHlwZTsgICAgICAgICAgICAgICAgICAgICAgLyogUk9NIHR5cGUgKGVwcm9tL2ZsYXNoKSAqLwotICAgIHVuY2hhciAgICAgIHByb21fY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIFJPTSBkZXZpY2VzICovCi0gICAgdWxvbmczMiAgICAgZHVwX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBkdXBsZXhpbmcgbW9kdWxlIHByZXNlbnQ/ICovCi0gICAgdWxvbmczMiAgICAgY2hhbl9wcmVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXhwYW5zaW9uIGNobi4gKi8KLSAgICB1bG9uZzMyICAgICBtZW1fcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBleHBhbnNpb24gaW5zdC4gPyAqLwotICAgIHVuY2hhciAgICAgIGZ0X2J1c19zeXN0ZW07ICAgICAgICAgICAgICAgICAgLyogZmF1bHQgYnVzIHN1cHBvcnRlZD8gKi8KLSAgICB1bmNoYXIgICAgICBzdWJ0eXBlX3ZhbGlkOyAgICAgICAgICAgICAgICAgIC8qIGJvYXJkX3N1YnR5cGUgdmFsaWQ/ICovCi0gICAgdW5jaGFyICAgICAgYm9hcmRfc3VidHlwZTsgICAgICAgICAgICAgICAgICAvKiBzdWJ0eXBlL2hhcmR3YXJlIGxldmVsICovCi0gICAgdW5jaGFyICAgICAgcmFtcGFyaXR5X3ByZXM7ICAgICAgICAgICAgICAgICAvKiBSQU0gcGFyaXR5IGNoZWNrIGhhcmR3YXJlPyAqLwotfSBQQUNLRUQgZ2R0aF9iaW5mb19zdHI7IAorICAgIHU4ICAgICAgdXBkYXRlX3ByZXM7ICAgICAgICAgICAgICAgICAgICAvKiB1cGRhdGUgcHJlc2VudD8gKi8KKyAgICB1OCAgICAgIHhvcl9wcmVzOyAgICAgICAgICAgICAgICAgICAgICAgLyogWE9SIGVuZ2luZSBwcmVzZW50PyAqLworICAgIHU4ICAgICAgcHJvbV90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBST00gdHlwZSAoZXByb20vZmxhc2gpICovCisgICAgdTggICAgICBwcm9tX2NvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBST00gZGV2aWNlcyAqLworICAgIHUzMiAgICAgZHVwX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBkdXBsZXhpbmcgbW9kdWxlIHByZXNlbnQ/ICovCisgICAgdTMyICAgICBjaGFuX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBleHBhbnNpb24gY2huLiAqLworICAgIHUzMiAgICAgbWVtX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtZW1vcnkgZXhwYW5zaW9uIGluc3QuID8gKi8KKyAgICB1OCAgICAgIGZ0X2J1c19zeXN0ZW07ICAgICAgICAgICAgICAgICAgLyogZmF1bHQgYnVzIHN1cHBvcnRlZD8gKi8KKyAgICB1OCAgICAgIHN1YnR5cGVfdmFsaWQ7ICAgICAgICAgICAgICAgICAgLyogYm9hcmRfc3VidHlwZSB2YWxpZD8gKi8KKyAgICB1OCAgICAgIGJvYXJkX3N1YnR5cGU7ICAgICAgICAgICAgICAgICAgLyogc3VidHlwZS9oYXJkd2FyZSBsZXZlbCAqLworICAgIHU4ICAgICAgcmFtcGFyaXR5X3ByZXM7ICAgICAgICAgICAgICAgICAvKiBSQU0gcGFyaXR5IGNoZWNrIGhhcmR3YXJlPyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2JpbmZvX3N0cjsgCiAKIC8qIGdldCBob3N0IGRyaXZlIGluZm8gKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICBjaGFyICAgICAgICBuYW1lWzhdOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgZHJpdmUgbmFtZSAqLwotICAgIHVsb25nMzIgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSAoc2VjdG9ycykgKi8KLSAgICB1bmNoYXIgICAgICBob3N0X2RyaXZlOyAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgZHJpdmUgbnVtYmVyICovCi0gICAgdW5jaGFyICAgICAgbG9nX2RyaXZlOyAgICAgICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIChtYXN0ZXIpICovCi0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWQ7Ci0gICAgdW5jaGFyICAgICAgcndfYXR0cmliczsgICAgICAgICAgICAgICAgICAgICAvKiByL3cgYXR0cmlicyAqLwotICAgIHVsb25nMzIgICAgIHN0YXJ0X3NlYzsgICAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgc2VjdG9yICovCi19IFBBQ0tFRCBnZHRoX2hlbnRyeV9zdHI7CisgICAgdTMyICAgICBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgKHNlY3RvcnMpICovCisgICAgdTggICAgICBob3N0X2RyaXZlOyAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgZHJpdmUgbnVtYmVyICovCisgICAgdTggICAgICBsb2dfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgKG1hc3RlcikgKi8KKyAgICB1OCAgICAgIHJlc2VydmVkOworICAgIHU4ICAgICAgcndfYXR0cmliczsgICAgICAgICAgICAgICAgICAgICAvKiByL3cgYXR0cmlicyAqLworICAgIHUzMiAgICAgc3RhcnRfc2VjOyAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBzZWN0b3IgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9oZW50cnlfc3RyOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgZW50cmllczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbnRyeSBjb3VudCAqLwotICAgIHVsb25nMzIgICAgIG9mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IG9mIGVudHJpZXMgKi8KLSAgICB1bmNoYXIgICAgICBzZWNzX3BfaGVhZDsgICAgICAgICAgICAgICAgICAgIC8qIHNlY3RvcnMvaGVhZCAqLwotICAgIHVuY2hhciAgICAgIGhlYWRzX3BfY3lsOyAgICAgICAgICAgICAgICAgICAgLyogaGVhZHMvY3lsaW5kZXIgKi8KLSAgICB1bmNoYXIgICAgICByZXNlcnZlZDsKLSAgICB1bmNoYXIgICAgICBjbHVzdF9kcnZ0eXBlOyAgICAgICAgICAgICAgICAgIC8qIGNsdXN0ZXIgZHJpdmUgdHlwZSAqLwotICAgIHVsb25nMzIgICAgIGxvY2F0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1MzIgICAgIGVudHJpZXM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZW50cnkgY291bnQgKi8KKyAgICB1MzIgICAgIG9mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IG9mIGVudHJpZXMgKi8KKyAgICB1OCAgICAgIHNlY3NfcF9oZWFkOyAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9ycy9oZWFkICovCisgICAgdTggICAgICBoZWFkc19wX2N5bDsgICAgICAgICAgICAgICAgICAgIC8qIGhlYWRzL2N5bGluZGVyICovCisgICAgdTggICAgICByZXNlcnZlZDsKKyAgICB1OCAgICAgIGNsdXN0X2RydnR5cGU7ICAgICAgICAgICAgICAgICAgLyogY2x1c3RlciBkcml2ZSB0eXBlICovCisgICAgdTMyICAgICBsb2NhdGlvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCiAgICAgZ2R0aF9oZW50cnlfc3RyIGVudHJ5W01BWF9IRFJJVkVTXTsgICAgICAgICAvKiBlbnRyaWVzICovCi19IFBBQ0tFRCBnZHRoX2hnZXRfc3RyOyAgICAKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9oZ2V0X3N0cjsgICAgCiAKIAogLyogRFBSQU0gc3RydWN0dXJlcyAqLwogCiAvKiBpbnRlcmZhY2UgYXJlYSBJU0EvUENJICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgICAgICAgICBTX0NtZF9JbmR4OyAgICAgICAgICAgICAvKiBzcGVjaWFsIGNvbW1hbmQgKi8KLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIFNfU3RhdHVzOyAgICAgICAgICAgICAgIC8qIHN0YXR1cyBzcGVjaWFsIGNvbW1hbmQgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIHJlc2VydmVkMTsKLSAgICB1bG9uZzMyICAgICAgICAgICAgIFNfSW5mb1s0XTsgICAgICAgICAgICAgIC8qIGFkZC4gaW5mbyBzcGVjaWFsIGNvbW1hbmQgKi8KLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIFNlbWEwOyAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc2VtYXBob3JlICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICByZXNlcnZlZDJbM107Ci0gICAgdW5jaGFyICAgICAgICAgICAgICBDbWRfSW5kZXg7ICAgICAgICAgICAgICAvKiBjb21tYW5kIG51bWJlciAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgcmVzZXJ2ZWQzWzNdOwotICAgIHVzaG9ydCB2b2xhdGlsZSAgICAgU3RhdHVzOyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzdGF0dXMgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIFNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UoZm9yIGFzeW5jLmV2ZW50cykgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIEluZm9bMl07ICAgICAgICAgICAgICAgIC8qIGFkZGl0aW9uYWwgaW5mbyAqLworICAgIHU4ICAgICAgICAgICAgICBTX0NtZF9JbmR4OyAgICAgICAgICAgICAvKiBzcGVjaWFsIGNvbW1hbmQgKi8KKyAgICB1OCB2b2xhdGlsZSAgICAgU19TdGF0dXM7ICAgICAgICAgICAgICAgLyogc3RhdHVzIHNwZWNpYWwgY29tbWFuZCAqLworICAgIHUxNiAgICAgICAgICAgICAgcmVzZXJ2ZWQxOworICAgIHUzMiAgICAgICAgICAgICBTX0luZm9bNF07ICAgICAgICAgICAgICAvKiBhZGQuIGluZm8gc3BlY2lhbCBjb21tYW5kICovCisgICAgdTggdm9sYXRpbGUgICAgIFNlbWEwOyAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc2VtYXBob3JlICovCisgICAgdTggICAgICAgICAgICAgIHJlc2VydmVkMlszXTsKKyAgICB1OCAgICAgICAgICAgICAgQ21kX0luZGV4OyAgICAgICAgICAgICAgLyogY29tbWFuZCBudW1iZXIgKi8KKyAgICB1OCAgICAgICAgICAgICAgcmVzZXJ2ZWQzWzNdOworICAgIHUxNiB2b2xhdGlsZSAgICAgU3RhdHVzOyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzdGF0dXMgKi8KKyAgICB1MTYgICAgICAgICAgICAgIFNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UoZm9yIGFzeW5jLmV2ZW50cykgKi8KKyAgICB1MzIgICAgICAgICAgICAgSW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdXNob3J0ICAgICAgICAgIG9mZnNldDsgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgb2Zmcy4gaW4gdGhlIERQUkFNKi8KLSAgICAgICAgdXNob3J0ICAgICAgICAgIHNlcnZfaWQ7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UgKi8KLSAgICB9IFBBQ0tFRCBjb21tX3F1ZXVlW01BWE9GRlNFVFNdOyAgICAgICAgICAgIC8qIGNvbW1hbmQgcXVldWUgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIGJpb3NfcmVzZXJ2ZWRbMl07Ci0gICAgdW5jaGFyICAgICAgICAgICAgICBnZHRfZHByX2NtZFsxXTsgICAgICAgICAvKiBjb21tYW5kcyAqLwotfSBQQUNLRUQgZ2R0X2Rwcl9pZjsKKyAgICAgICAgdTE2ICAgICAgICAgIG9mZnNldDsgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgb2Zmcy4gaW4gdGhlIERQUkFNKi8KKyAgICAgICAgdTE2ICAgICAgICAgIHNlcnZfaWQ7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UgKi8KKyAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGNvbW1fcXVldWVbTUFYT0ZGU0VUU107ICAgICAgICAgICAgLyogY29tbWFuZCBxdWV1ZSAqLworICAgIHUzMiAgICAgICAgICAgICBiaW9zX3Jlc2VydmVkWzJdOworICAgIHU4ICAgICAgICAgICAgICBnZHRfZHByX2NtZFsxXTsgICAgICAgICAvKiBjb21tYW5kcyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRfZHByX2lmOwogCiAvKiBTUkFNIHN0cnVjdHVyZSBQQ0kgY29udHJvbGxlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBtYWdpYzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgSUQgZnJvbSBCSU9TICovCi0gICAgdXNob3J0ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KLSAgICB1bmNoYXIgICAgICBzd2l0Y2hfc3VwcG9ydDsgICAgICAgICAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLwotICAgIHVuY2hhciAgICAgIHBhZGRpbmdbOV07Ci0gICAgdW5jaGFyICAgICAgb3NfdXNlZFsxNl07ICAgICAgICAgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCi0gICAgdW5jaGFyICAgICAgdW51c2VkWzI4XTsKLSAgICB1bmNoYXIgICAgICBmd19tYWdpYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyLiBJRCBmcm9tIGZpcm13YXJlICovCi19IFBBQ0tFRCBnZHRfcGNpX3NyYW07CisgICAgdTMyICAgICBtYWdpYzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgSUQgZnJvbSBCSU9TICovCisgICAgdTE2ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KKyAgICB1OCAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgICAgICAgICAgLyogc2VlIG5lZWRfZGVpbml0ICovCisgICAgdTggICAgICBwYWRkaW5nWzldOworICAgIHU4ICAgICAgb3NfdXNlZFsxNl07ICAgICAgICAgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCisgICAgdTggICAgICB1bnVzZWRbMjhdOworICAgIHU4ICAgICAgZndfbWFnaWM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250ci4gSUQgZnJvbSBmaXJtd2FyZSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRfcGNpX3NyYW07CiAKIC8qIFNSQU0gc3RydWN0dXJlIEVJU0EgY29udHJvbGxlcnMgKGJ1dCBOT1QgR0RUMzAwMC8zMDIwKSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIG9zX3VzZWRbMTZdOyAgICAgICAgICAgICAgICAgICAgLyogT1MgY29kZSBwZXIgc2VydmljZSAqLwotICAgIHVzaG9ydCAgICAgIG5lZWRfZGVpbml0OyAgICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGJldHcuIEJJT1MvZHJpdmVyICovCi0gICAgdW5jaGFyICAgICAgc3dpdGNoX3N1cHBvcnQ7ICAgICAgICAgICAgICAgICAvKiBzZWUgbmVlZF9kZWluaXQgKi8KLSAgICB1bmNoYXIgICAgICBwYWRkaW5nOwotfSBQQUNLRUQgZ2R0X2Vpc2Ffc3JhbTsKKyAgICB1OCAgICAgIG9zX3VzZWRbMTZdOyAgICAgICAgICAgICAgICAgICAgLyogT1MgY29kZSBwZXIgc2VydmljZSAqLworICAgIHUxNiAgICAgIG5lZWRfZGVpbml0OyAgICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGJldHcuIEJJT1MvZHJpdmVyICovCisgICAgdTggICAgICBzd2l0Y2hfc3VwcG9ydDsgICAgICAgICAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLworICAgIHU4ICAgICAgcGFkZGluZzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0X2Vpc2Ffc3JhbTsKIAogCiAvKiBEUFJBTSBJU0EgY29udHJvbGxlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICBiaW9zX3VzZWRbMHgzYzAwLTMyXTsgICAvKiAxNUtCIC0gMzJCeXRlcyBCSU9TICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBtYWdpYzsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIChFSVNBKSBJRCAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgLyogc3dpdGNoIGJldHcuIEJJT1MvZHJpdmVyICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBzd2l0Y2hfc3VwcG9ydDsgICAgICAgICAvKiBzZWUgbmVlZF9kZWluaXQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHBhZGRpbmdbOV07Ci0gICAgICAgICAgICB1bmNoYXIgICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCi0gICAgICAgIH0gUEFDS0VEIGRwX3NyYW07Ci0gICAgICAgIHVuY2hhciAgICAgICAgICBiaW9zX2FyZWFbMHg0MDAwXTsgICAgICAvKiAxNktCIHJlc2VydmVkIGZvciBCSU9TICovCisgICAgICAgICAgICB1OCAgICAgIGJpb3NfdXNlZFsweDNjMDAtMzJdOyAgIC8qIDE1S0IgLSAzMkJ5dGVzIEJJT1MgKi8KKyAgICAgICAgICAgIHUzMiAgICAgbWFnaWM7ICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciAoRUlTQSkgSUQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIG5lZWRfZGVpbml0OyAgICAgICAgICAgIC8qIHN3aXRjaCBiZXR3LiBCSU9TL2RyaXZlciAqLworICAgICAgICAgICAgdTggICAgICBzd2l0Y2hfc3VwcG9ydDsgICAgICAgICAvKiBzZWUgbmVlZF9kZWluaXQgKi8KKyAgICAgICAgICAgIHU4ICAgICAgcGFkZGluZ1s5XTsKKyAgICAgICAgICAgIHU4ICAgICAgb3NfdXNlZFsxNl07ICAgICAgICAgICAgLyogT1MgY29kZSBwZXIgc2VydmljZSAqLworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGRwX3NyYW07CisgICAgICAgIHU4ICAgICAgICAgIGJpb3NfYXJlYVsweDQwMDBdOyAgICAgIC8qIDE2S0IgcmVzZXJ2ZWQgZm9yIEJJT1MgKi8KICAgICB9IGJ1OwogICAgIHVuaW9uIHsKICAgICAgICAgZ2R0X2Rwcl9pZiAgICAgIGljOyAgICAgICAgICAgICAgICAgICAgIC8qIGludGVyZmFjZSBhcmVhICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpZl9hcmVhWzB4MzAwMF07ICAgICAgICAvKiAxMktCIGZvciBpbnRlcmZhY2UgKi8KKyAgICAgICAgdTggICAgICAgICAgaWZfYXJlYVsweDMwMDBdOyAgICAgICAgLyogMTJLQiBmb3IgaW50ZXJmYWNlICovCiAgICAgfSB1OwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgICAgICAgICBtZW1sb2NrOyAgICAgICAgICAgICAgICAvKiB3cml0ZSBwcm90ZWN0aW9uIERQUkFNICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBldmVudDsgICAgICAgICAgICAgICAgICAvKiByZWxlYXNlIGV2ZW50ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpcnFlbjsgICAgICAgICAgICAgICAgICAvKiBib2FyZCBpbnRlcnJ1cHRzIGVuYWJsZSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgaXJxZGVsOyAgICAgICAgICAgICAgICAgLyogYWNrbm93bGVkZ2UgYm9hcmQgaW50LiAqLwotICAgICAgICB1bmNoYXIgdm9sYXRpbGUgU2VtYTE7ICAgICAgICAgICAgICAgICAgLyogc3RhdHVzIHNlbWFwaG9yZSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgcnE7ICAgICAgICAgICAgICAgICAgICAgLyogSVJRL0RSUSBjb25maWd1cmF0aW9uICovCi0gICAgfSBQQUNLRUQgaW87Ci19IFBBQ0tFRCBnZHQyX2RwcmFtX3N0cjsKKyAgICAgICAgdTggICAgICAgICAgbWVtbG9jazsgICAgICAgICAgICAgICAgLyogd3JpdGUgcHJvdGVjdGlvbiBEUFJBTSAqLworICAgICAgICB1OCAgICAgICAgICBldmVudDsgICAgICAgICAgICAgICAgICAvKiByZWxlYXNlIGV2ZW50ICovCisgICAgICAgIHU4ICAgICAgICAgIGlycWVuOyAgICAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCisgICAgICAgIHU4ICAgICAgICAgIGlycWRlbDsgICAgICAgICAgICAgICAgIC8qIGFja25vd2xlZGdlIGJvYXJkIGludC4gKi8KKyAgICAgICAgdTggdm9sYXRpbGUgU2VtYTE7ICAgICAgICAgICAgICAgICAgLyogc3RhdHVzIHNlbWFwaG9yZSAqLworICAgICAgICB1OCAgICAgICAgICBycTsgICAgICAgICAgICAgICAgICAgICAvKiBJUlEvRFJRIGNvbmZpZ3VyYXRpb24gKi8KKyAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGlvOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHQyX2RwcmFtX3N0cjsKIAogLyogRFBSQU0gUENJIGNvbnRyb2xsZXJzICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHhmZjAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOworICAgICAgICB1OCAgICAgICAgICBpZl9hcmVhWzB4ZmYwLXNpemVvZihnZHRfcGNpX3NyYW0pXTsKICAgICB9IHU7CiAgICAgZ2R0X3BjaV9zcmFtICAgICAgICBnZHQ2c3I7ICAgICAgICAgICAgICAgICAvKiBTUkFNIHN0cnVjdHVyZSAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgICAgICAgICB1bnVzZWQwWzFdOwotICAgICAgICB1bmNoYXIgdm9sYXRpbGUgU2VtYTE7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIHVudXNlZDFbM107Ci0gICAgICAgIHVuY2hhciAgICAgICAgICBpcnFlbjsgICAgICAgICAgICAgICAgICAvKiBib2FyZCBpbnRlcnJ1cHRzIGVuYWJsZSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdW51c2VkMlsyXTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGV2ZW50OyAgICAgICAgICAgICAgICAgIC8qIHJlbGVhc2UgZXZlbnQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIHVudXNlZDNbM107Ci0gICAgICAgIHVuY2hhciAgICAgICAgICBpcnFkZWw7ICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSBib2FyZCBpbnQuICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICB1bnVzZWQ0WzNdOwotICAgIH0gUEFDS0VEIGlvOwotfSBQQUNLRUQgZ2R0Nl9kcHJhbV9zdHI7CisgICAgICAgIHU4ICAgICAgICAgIHVudXNlZDBbMV07CisgICAgICAgIHU4IHZvbGF0aWxlIFNlbWExOyAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc2VtYXBob3JlICovCisgICAgICAgIHU4ICAgICAgICAgIHVudXNlZDFbM107CisgICAgICAgIHU4ICAgICAgICAgIGlycWVuOyAgICAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCisgICAgICAgIHU4ICAgICAgICAgIHVudXNlZDJbMl07CisgICAgICAgIHU4ICAgICAgICAgIGV2ZW50OyAgICAgICAgICAgICAgICAgIC8qIHJlbGVhc2UgZXZlbnQgKi8KKyAgICAgICAgdTggICAgICAgICAgdW51c2VkM1szXTsKKyAgICAgICAgdTggICAgICAgICAgaXJxZGVsOyAgICAgICAgICAgICAgICAgLyogYWNrbm93bGVkZ2UgYm9hcmQgaW50LiAqLworICAgICAgICB1OCAgICAgICAgICB1bnVzZWQ0WzNdOworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZfZHByYW1fc3RyOwogCiAvKiBQTFggcmVnaXN0ZXIgc3RydWN0dXJlIChuZXcgUENJIGNvbnRyb2xsZXJzKSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgICAgICAgICAgY2ZnX3JlZzsgICAgICAgIC8qIERQUkFNIGNmZy4oMjpiZWxvdyAxTUIsMDphbnl3aGVyZSkqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkMVsweDNmXTsKLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIHNlbWEwX3JlZzsgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc2VtYXBob3JlICovCi0gICAgdW5jaGFyIHZvbGF0aWxlICAgICBzZW1hMV9yZWc7ICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQyWzJdOwotICAgIHVzaG9ydCB2b2xhdGlsZSAgICAgc3RhdHVzOyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzdGF0dXMgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIGluZm9bMl07ICAgICAgICAgICAgICAgIC8qIGFkZGl0aW9uYWwgaW5mbyAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkM1sweDEwXTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIGxkb29yX3JlZzsgICAgICAgICAgICAgIC8qIFBDSSB0byBsb2NhbCBkb29yYmVsbCAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkNFszXTsKLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIGVkb29yX3JlZzsgICAgICAgICAgICAgIC8qIGxvY2FsIHRvIFBDSSBkb29yYmVsbCAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkNVszXTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIGNvbnRyb2wwOyAgICAgICAgICAgICAgIC8qIGNvbnRyb2wwIHJlZ2lzdGVyKHVudXNlZCkgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGNvbnRyb2wxOyAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQ2WzB4MTZdOwotfSBQQUNLRUQgZ2R0NmNfcGx4X3JlZ3M7CisgICAgdTggICAgICAgICAgICAgIGNmZ19yZWc7ICAgICAgICAvKiBEUFJBTSBjZmcuKDI6YmVsb3cgMU1CLDA6YW55d2hlcmUpKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkMVsweDNmXTsKKyAgICB1OCB2b2xhdGlsZSAgICAgc2VtYTBfcmVnOyAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KKyAgICB1OCB2b2xhdGlsZSAgICAgc2VtYTFfcmVnOyAgICAgICAgICAgICAgLyogc3RhdHVzIHNlbWFwaG9yZSAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQyWzJdOworICAgIHUxNiB2b2xhdGlsZSAgICAgc3RhdHVzOyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzdGF0dXMgKi8KKyAgICB1MTYgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UgKi8KKyAgICB1MzIgICAgICAgICAgICAgaW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDNbMHgxMF07CisgICAgdTggICAgICAgICAgICAgIGxkb29yX3JlZzsgICAgICAgICAgICAgIC8qIFBDSSB0byBsb2NhbCBkb29yYmVsbCAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQ0WzNdOworICAgIHU4IHZvbGF0aWxlICAgICBlZG9vcl9yZWc7ICAgICAgICAgICAgICAvKiBsb2NhbCB0byBQQ0kgZG9vcmJlbGwgKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkNVszXTsKKyAgICB1OCAgICAgICAgICAgICAgY29udHJvbDA7ICAgICAgICAgICAgICAgLyogY29udHJvbDAgcmVnaXN0ZXIodW51c2VkKSAqLworICAgIHU4ICAgICAgICAgICAgICBjb250cm9sMTsgICAgICAgICAgICAgICAvKiBib2FyZCBpbnRlcnJ1cHRzIGVuYWJsZSAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQ2WzB4MTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHQ2Y19wbHhfcmVnczsKIAogLyogRFBSQU0gbmV3IFBDSSBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHVuaW9uIHsKICAgICAgICAgZ2R0X2Rwcl9pZiAgICAgIGljOyAgICAgICAgICAgICAgICAgICAgIC8qIGludGVyZmFjZSBhcmVhICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpZl9hcmVhWzB4NDAwMC1zaXplb2YoZ2R0X3BjaV9zcmFtKV07CisgICAgICAgIHU4ICAgICAgICAgIGlmX2FyZWFbMHg0MDAwLXNpemVvZihnZHRfcGNpX3NyYW0pXTsKICAgICB9IHU7CiAgICAgZ2R0X3BjaV9zcmFtICAgICAgICBnZHQ2c3I7ICAgICAgICAgICAgICAgICAvKiBTUkFNIHN0cnVjdHVyZSAqLwotfSBQQUNLRUQgZ2R0NmNfZHByYW1fc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHQ2Y19kcHJhbV9zdHI7CiAKIC8qIGk5NjAgcmVnaXN0ZXIgc3RydWN0dXJlIChQQ0kgTVBSIGNvbnRyb2xsZXJzKSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkMVsxNl07Ci0gICAgdW5jaGFyIHZvbGF0aWxlICAgICBzZW1hMF9yZWc7ICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkMjsKLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIHNlbWExX3JlZzsgICAgICAgICAgICAgIC8qIHN0YXR1cyBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDM7Ci0gICAgdXNob3J0IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgaW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICBsZG9vcl9yZWc7ICAgICAgICAgICAgICAvKiBQQ0kgdG8gbG9jYWwgZG9vcmJlbGwgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDRbMTFdOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgZWRvb3JfcmVnOyAgICAgICAgICAgICAgLyogbG9jYWwgdG8gUENJIGRvb3JiZWxsICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQ1WzddOwotICAgIHVuY2hhciAgICAgICAgICAgICAgZWRvb3JfZW5fcmVnOyAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDZbMjddOwotICAgIHVsb25nMzIgICAgICAgICAgICAgdW51c2VkN1s5MzldOyAgICAgICAgIAotICAgIHVsb25nMzIgICAgICAgICAgICAgc2V2ZXJpdHk7ICAgICAgIAorICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQxWzE2XTsKKyAgICB1OCB2b2xhdGlsZSAgICAgc2VtYTBfcmVnOyAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkMjsKKyAgICB1OCB2b2xhdGlsZSAgICAgc2VtYTFfcmVnOyAgICAgICAgICAgICAgLyogc3RhdHVzIHNlbWFwaG9yZSAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQzOworICAgIHUxNiB2b2xhdGlsZSAgICAgc3RhdHVzOyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzdGF0dXMgKi8KKyAgICB1MTYgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UgKi8KKyAgICB1MzIgICAgICAgICAgICAgaW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCisgICAgdTggICAgICAgICAgICAgIGxkb29yX3JlZzsgICAgICAgICAgICAgIC8qIFBDSSB0byBsb2NhbCBkb29yYmVsbCAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQ0WzExXTsKKyAgICB1OCB2b2xhdGlsZSAgICAgZWRvb3JfcmVnOyAgICAgICAgICAgICAgLyogbG9jYWwgdG8gUENJIGRvb3JiZWxsICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDVbN107CisgICAgdTggICAgICAgICAgICAgIGVkb29yX2VuX3JlZzsgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDZbMjddOworICAgIHUzMiAgICAgICAgICAgICB1bnVzZWQ3WzkzOV07ICAgICAgICAgCisgICAgdTMyICAgICAgICAgICAgIHNldmVyaXR5OyAgICAgICAKICAgICBjaGFyICAgICAgICAgICAgICAgIGV2dF9zdHJbMjU2XTsgICAgICAgICAgIC8qIGV2ZW50IHN0cmluZyAqLwotfSBQQUNLRUQgZ2R0Nm1faTk2MF9yZWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHQ2bV9pOTYwX3JlZ3M7CiAKIC8qIERQUkFNIFBDSSBNUFIgY29udHJvbGxlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICBnZHQ2bV9pOTYwX3JlZ3MgICAgIGk5NjByOyAgICAgICAgICAgICAgICAgIC8qIDRLQiBpOTYwIHJlZ2lzdGVycyAqLwogICAgIHVuaW9uIHsKICAgICAgICAgZ2R0X2Rwcl9pZiAgICAgIGljOyAgICAgICAgICAgICAgICAgICAgIC8qIGludGVyZmFjZSBhcmVhICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpZl9hcmVhWzB4MzAwMC1zaXplb2YoZ2R0X3BjaV9zcmFtKV07CisgICAgICAgIHU4ICAgICAgICAgIGlmX2FyZWFbMHgzMDAwLXNpemVvZihnZHRfcGNpX3NyYW0pXTsKICAgICB9IHU7CiAgICAgZ2R0X3BjaV9zcmFtICAgICAgICBnZHQ2c3I7ICAgICAgICAgICAgICAgICAvKiBTUkFNIHN0cnVjdHVyZSAqLwotfSBQQUNLRUQgZ2R0Nm1fZHByYW1fc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHQ2bV9kcHJhbV9zdHI7CiAKIAogLyogUENJIHJlc291cmNlcyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHN0cnVjdCBwY2lfZGV2ICAgICAgKnBkZXY7Ci0gICAgdWxvbmcgICAgICAgICAgICAgICBkcG1lbTsgICAgICAgICAgICAgICAgICAvKiBEUFJBTSBhZGRyZXNzICovCi0gICAgdWxvbmcgICAgICAgICAgICAgICBpbzsgICAgICAgICAgICAgICAgICAgICAvKiBJTyBhZGRyZXNzICovCisgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIGRwbWVtOyAgICAgICAgICAgICAgICAgIC8qIERQUkFNIGFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgaW87ICAgICAgICAgICAgICAgICAgICAgLyogSU8gYWRkcmVzcyAqLwogfSBnZHRoX3BjaV9zdHI7CiAKIApAQCAtODQ2LDkzICs4NDYsOTMgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBzdHJ1Y3QgU2NzaV9Ib3N0ICAgICpzaG9zdDsKICAgICBzdHJ1Y3QgbGlzdF9oZWFkICAgIGxpc3Q7Ci0gICAgdXNob3J0ICAgICAgCWhhbnVtOwotICAgIHVzaG9ydCAgICAgICAgICAgICAgb2VtX2lkOyAgICAgICAgICAgICAgICAgLyogT0VNICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNsYXNzICovCi0gICAgdWxvbmczMiAgICAgICAgICAgICBzdHlwZTsgICAgICAgICAgICAgICAgICAvKiBzdWJ0eXBlIChQQ0k6IGRldmljZSBJRCkgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIGZ3X3ZlcnM7ICAgICAgICAgICAgICAgIC8qIGZpcm13YXJlIHZlcnNpb24gKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIGNhY2hlX2ZlYXQ7ICAgICAgICAgICAgIC8qIGZlYXQuIGNhY2hlIHNlcnYuIChzL2csLi4pKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIHJhd19mZWF0OyAgICAgICAgICAgICAgIC8qIGZlYXQuIHJhdyBzZXJ2aWNlIChzL2csLi4pKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIHNjcmVlbl9mZWF0OyAgICAgICAgICAgIC8qIGZlYXQuIHJhdyBzZXJ2aWNlIChzL2csLi4pKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIGJtaWM7ICAgICAgICAgICAgICAgICAgIC8qIEJNSUMgYWRkcmVzcyAoRUlTQSkgKi8KKyAgICB1MTYgICAgICAJaGFudW07CisgICAgdTE2ICAgICAgICAgICAgICBvZW1faWQ7ICAgICAgICAgICAgICAgICAvKiBPRU0gKi8KKyAgICB1MTYgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgY2xhc3MgKi8KKyAgICB1MzIgICAgICAgICAgICAgc3R5cGU7ICAgICAgICAgICAgICAgICAgLyogc3VidHlwZSAoUENJOiBkZXZpY2UgSUQpICovCisgICAgdTE2ICAgICAgICAgICAgICBmd192ZXJzOyAgICAgICAgICAgICAgICAvKiBmaXJtd2FyZSB2ZXJzaW9uICovCisgICAgdTE2ICAgICAgICAgICAgICBjYWNoZV9mZWF0OyAgICAgICAgICAgICAvKiBmZWF0LiBjYWNoZSBzZXJ2LiAocy9nLC4uKSovCisgICAgdTE2ICAgICAgICAgICAgICByYXdfZmVhdDsgICAgICAgICAgICAgICAvKiBmZWF0LiByYXcgc2VydmljZSAocy9nLC4uKSovCisgICAgdTE2ICAgICAgICAgICAgICBzY3JlZW5fZmVhdDsgICAgICAgICAgICAvKiBmZWF0LiByYXcgc2VydmljZSAocy9nLC4uKSovCisgICAgdTE2ICAgICAgICAgICAgICBibWljOyAgICAgICAgICAgICAgICAgICAvKiBCTUlDIGFkZHJlc3MgKEVJU0EpICovCiAgICAgdm9pZCBfX2lvbWVtICAgICAgICAqYnJkOyAgICAgICAgICAgICAgICAgICAvKiBEUFJBTSBhZGRyZXNzICovCi0gICAgdWxvbmczMiAgICAgICAgICAgICBicmRfcGh5czsgICAgICAgICAgICAgICAvKiBzbG90IG51bWJlci9CSU9TIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgICAgICAgICAgYnJkX3BoeXM7ICAgICAgICAgICAgICAgLyogc2xvdCBudW1iZXIvQklPUyBhZGRyZXNzICovCiAgICAgZ2R0NmNfcGx4X3JlZ3MgICAgICAqcGx4OyAgICAgICAgICAgICAgICAgICAvKiBQTFggcmVncyAobmV3IFBDSSBjb250ci4pICovCiAgICAgZ2R0aF9jbWRfc3RyICAgICAgICBjbWRleHQ7CiAgICAgZ2R0aF9jbWRfc3RyICAgICAgICAqcGNjYjsgICAgICAgICAgICAgICAgICAvKiBhZGRyZXNzIGNvbW1hbmQgc3RydWN0dXJlICovCi0gICAgdWxvbmczMiAgICAgICAgICAgICBjY2JfcGh5czsgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCisgICAgdTMyICAgICAgICAgICAgIGNjYl9waHlzOyAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KICNpZmRlZiBJTlRfQ09BTAogICAgIGdkdGhfY29hbF9zdGF0dXMgICAgKmNvYWxfc3RhdDsgICAgICAgICAgICAgLyogYnVmZmVyIGZvciBjb2FsZXNjaW5nIGludC4qLwotICAgIHVsb25nNjQgICAgICAgICAgICAgY29hbF9zdGF0X3BoeXM7ICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyAqLworICAgIHU2NCAgICAgICAgICAgICBjb2FsX3N0YXRfcGh5czsgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCiAjZW5kaWYKICAgICBjaGFyICAgICAgICAgICAgICAgICpwc2NyYXRjaDsgICAgICAgICAgICAgIC8qIHNjcmF0Y2ggKERNQSkgYnVmZmVyICovCi0gICAgdWxvbmc2NCAgICAgICAgICAgICBzY3JhdGNoX3BoeXM7ICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICBzY3JhdGNoX2J1c3k7ICAgICAgICAgICAvKiBpbiB1c2U/ICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICBkbWE2NF9zdXBwb3J0OyAgICAgICAgICAvKiA2NC1iaXQgRE1BIHN1cHBvcnRlZD8gKi8KKyAgICB1NjQgICAgICAgICAgICAgc2NyYXRjaF9waHlzOyAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyAqLworICAgIHU4ICAgICAgICAgICAgICBzY3JhdGNoX2J1c3k7ICAgICAgICAgICAvKiBpbiB1c2U/ICovCisgICAgdTggICAgICAgICAgICAgIGRtYTY0X3N1cHBvcnQ7ICAgICAgICAgIC8qIDY0LWJpdCBETUEgc3VwcG9ydGVkPyAqLwogICAgIGdkdGhfbXNnX3N0ciAgICAgICAgKnBtc2c7ICAgICAgICAgICAgICAgICAgLyogbWVzc2FnZSBidWZmZXIgKi8KLSAgICB1bG9uZzY0ICAgICAgICAgICAgIG1zZ19waHlzOyAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHNjYW5fbW9kZTsgICAgICAgICAgICAgIC8qIGN1cnJlbnQgc2NhbiBtb2RlICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICBpcnE7ICAgICAgICAgICAgICAgICAgICAvKiBJUlEgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGRycTsgICAgICAgICAgICAgICAgICAgIC8qIERSUSAoSVNBIGNvbnRyb2xsZXJzKSAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc3RhdHVzOyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzdGF0dXMgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UvZmlybXdhcmUgdmVyLi8uLiAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgaW5mbzsKLSAgICB1bG9uZzMyICAgICAgICAgICAgIGluZm8yOyAgICAgICAgICAgICAgICAgIC8qIGFkZGl0aW9uYWwgaW5mbyAqLworICAgIHU2NCAgICAgICAgICAgICBtc2dfcGh5czsgICAgICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCisgICAgdTggICAgICAgICAgICAgIHNjYW5fbW9kZTsgICAgICAgICAgICAgIC8qIGN1cnJlbnQgc2NhbiBtb2RlICovCisgICAgdTggICAgICAgICAgICAgIGlycTsgICAgICAgICAgICAgICAgICAgIC8qIElSUSAqLworICAgIHU4ICAgICAgICAgICAgICBkcnE7ICAgICAgICAgICAgICAgICAgICAvKiBEUlEgKElTQSBjb250cm9sbGVycykgKi8KKyAgICB1MTYgICAgICAgICAgICAgIHN0YXR1czsgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc3RhdHVzICovCisgICAgdTE2ICAgICAgICAgICAgICBzZXJ2aWNlOyAgICAgICAgICAgICAgICAvKiBzZXJ2aWNlL2Zpcm13YXJlIHZlci4vLi4gKi8KKyAgICB1MzIgICAgICAgICAgICAgaW5mbzsKKyAgICB1MzIgICAgICAgICAgICAgaW5mbzI7ICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCiAgICAgU2NzaV9DbW5kICAgICAgICAgICAqcmVxX2ZpcnN0OyAgICAgICAgICAgICAvKiB0b3Agb2YgcmVxdWVzdCBxdWV1ZSAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgICAgICAgICBwcmVzZW50OyAgICAgICAgICAgICAgICAvKiBGbGFnOiBob3N0IGRyaXZlIHByZXNlbnQ/ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpc19sb2dkcnY7ICAgICAgICAgICAgICAvKiBGbGFnOiBsb2cuIGRyaXZlIChtYXN0ZXIpPyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgaXNfYXJyYXlkcnY7ICAgICAgICAgICAgLyogRmxhZzogYXJyYXkgZHJpdmU/ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpc19tYXN0ZXI7ICAgICAgICAgICAgICAvKiBGbGFnOiBhcnJheSBkcml2ZSBtYXN0ZXI/ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpc19wYXJpdHk7ICAgICAgICAgICAgICAvKiBGbGFnOiBwYXJpdHkgZHJpdmU/ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpc19ob3RmaXg7ICAgICAgICAgICAgICAvKiBGbGFnOiBob3RmaXggZHJpdmU/ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBtYXN0ZXJfbm87ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbWFzdGVyIGRyaXZlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBsb2NrOyAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBsb2NrZWQ/IChob3QgcGx1ZykgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGhlYWRzOyAgICAgICAgICAgICAgICAgIC8qIG1hcHBpbmcgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIHNlY3M7Ci0gICAgICAgIHVzaG9ydCAgICAgICAgICBkZXZ0eXBlOyAgICAgICAgICAgICAgICAvKiBmdXJ0aGVyIGluZm9ybWF0aW9uICovCi0gICAgICAgIHVsb25nNjQgICAgICAgICBzaXplOyAgICAgICAgICAgICAgICAgICAvKiBjYXBhY2l0eSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgbGRyX25vOyAgICAgICAgICAgICAgICAgLyogbG9nLiBkcml2ZSBuby4gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIHJ3X2F0dHJpYnM7ICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJ1dGVzICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBjbHVzdGVyX3R5cGU7ICAgICAgICAgICAvKiBjbHVzdGVyIHByb3BlcnRpZXMgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIG1lZGlhX2NoYW5nZWQ7ICAgICAgICAgIC8qIEZsYWc6TU9VTlQvVU5NT1VOVCBvY2N1cmVkICovCi0gICAgICAgIHVsb25nMzIgICAgICAgICBzdGFydF9zZWM7ICAgICAgICAgICAgICAvKiBzdGFydCBzZWN0b3IgKi8KKyAgICAgICAgdTggICAgICAgICAgcHJlc2VudDsgICAgICAgICAgICAgICAgLyogRmxhZzogaG9zdCBkcml2ZSBwcmVzZW50PyAqLworICAgICAgICB1OCAgICAgICAgICBpc19sb2dkcnY7ICAgICAgICAgICAgICAvKiBGbGFnOiBsb2cuIGRyaXZlIChtYXN0ZXIpPyAqLworICAgICAgICB1OCAgICAgICAgICBpc19hcnJheWRydjsgICAgICAgICAgICAvKiBGbGFnOiBhcnJheSBkcml2ZT8gKi8KKyAgICAgICAgdTggICAgICAgICAgaXNfbWFzdGVyOyAgICAgICAgICAgICAgLyogRmxhZzogYXJyYXkgZHJpdmUgbWFzdGVyPyAqLworICAgICAgICB1OCAgICAgICAgICBpc19wYXJpdHk7ICAgICAgICAgICAgICAvKiBGbGFnOiBwYXJpdHkgZHJpdmU/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX2hvdGZpeDsgICAgICAgICAgICAgIC8qIEZsYWc6IGhvdGZpeCBkcml2ZT8gKi8KKyAgICAgICAgdTggICAgICAgICAgbWFzdGVyX25vOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIG1hc3RlciBkcml2ZSAqLworICAgICAgICB1OCAgICAgICAgICBsb2NrOyAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBsb2NrZWQ/IChob3QgcGx1ZykgKi8KKyAgICAgICAgdTggICAgICAgICAgaGVhZHM7ICAgICAgICAgICAgICAgICAgLyogbWFwcGluZyAqLworICAgICAgICB1OCAgICAgICAgICBzZWNzOworICAgICAgICB1MTYgICAgICAgICAgZGV2dHlwZTsgICAgICAgICAgICAgICAgLyogZnVydGhlciBpbmZvcm1hdGlvbiAqLworICAgICAgICB1NjQgICAgICAgICBzaXplOyAgICAgICAgICAgICAgICAgICAvKiBjYXBhY2l0eSAqLworICAgICAgICB1OCAgICAgICAgICBsZHJfbm87ICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIG5vLiAqLworICAgICAgICB1OCAgICAgICAgICByd19hdHRyaWJzOyAgICAgICAgICAgICAvKiByL3cgYXR0cmlidXRlcyAqLworICAgICAgICB1OCAgICAgICAgICBjbHVzdGVyX3R5cGU7ICAgICAgICAgICAvKiBjbHVzdGVyIHByb3BlcnRpZXMgKi8KKyAgICAgICAgdTggICAgICAgICAgbWVkaWFfY2hhbmdlZDsgICAgICAgICAgLyogRmxhZzpNT1VOVC9VTk1PVU5UIG9jY3VyZWQgKi8KKyAgICAgICAgdTMyICAgICAgICAgc3RhcnRfc2VjOyAgICAgICAgICAgICAgLyogc3RhcnQgc2VjdG9yICovCiAgICAgfSBoZHJbTUFYX0xEUklWRVNdOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBob3N0IGRyaXZlcyAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgICAgICAgICBsb2NrOyAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGxvY2tlZD8gKGhvdCBwbHVnKSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgcGRldl9jbnQ7ICAgICAgICAgICAgICAgLyogcGh5c2ljYWwgZGV2aWNlIGNvdW50ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBsb2NhbF9ubzsgICAgICAgICAgICAgICAvKiBsb2NhbCBjaGFubmVsIG51bWJlciAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgaW9fY250W01BWElEXTsgICAgICAgICAgLyogY3VycmVudCBJTyBjb3VudCAqLwotICAgICAgICB1bG9uZzMyICAgICAgICAgYWRkcmVzczsgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBhZGRyZXNzICovCi0gICAgICAgIHVsb25nMzIgICAgICAgICBpZF9saXN0W01BWElEXTsgICAgICAgICAvKiBJRHMgb2YgdGhlIHBoeXMuIGRldmljZXMgKi8KKyAgICAgICAgdTggICAgICAgICAgbG9jazsgICAgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBsb2NrZWQ/IChob3QgcGx1ZykgKi8KKyAgICAgICAgdTggICAgICAgICAgcGRldl9jbnQ7ICAgICAgICAgICAgICAgLyogcGh5c2ljYWwgZGV2aWNlIGNvdW50ICovCisgICAgICAgIHU4ICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIGNoYW5uZWwgbnVtYmVyICovCisgICAgICAgIHU4ICAgICAgICAgIGlvX2NudFtNQVhJRF07ICAgICAgICAgIC8qIGN1cnJlbnQgSU8gY291bnQgKi8KKyAgICAgICAgdTMyICAgICAgICAgYWRkcmVzczsgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBhZGRyZXNzICovCisgICAgICAgIHUzMiAgICAgICAgIGlkX2xpc3RbTUFYSURdOyAgICAgICAgIC8qIElEcyBvZiB0aGUgcGh5cy4gZGV2aWNlcyAqLwogICAgIH0gcmF3W01BWEJVU107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBjaGFubmVscyAqLwogICAgIHN0cnVjdCB7CiAgICAgICAgIFNjc2lfQ21uZCAgICAgICAqY21uZDsgICAgICAgICAgICAgICAgICAvKiBwZW5kaW5nIHJlcXVlc3QgKi8KLSAgICAgICAgdXNob3J0ICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UgKi8KKyAgICAgICAgdTE2ICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UgKi8KICAgICB9IGNtZF90YWJbR0RUSF9NQVhDTURTXTsgICAgICAgICAgICAgICAgICAgIC8qIHRhYmxlIG9mIHBlbmQuIHJlcXVlc3RzICovCiAgICAgc3RydWN0IGdkdGhfY21uZGluZm8geyAgICAgICAgICAgICAgICAgICAgICAvKiBwZXItY29tbWFuZCBwcml2YXRlIGluZm8gKi8KICAgICAgICAgaW50IGluZGV4OwogICAgICAgICBpbnQgaW50ZXJuYWxfY29tbWFuZDsgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgY2FsbCBzY3NpX2RvbmUgKi8KICAgICAgICAgZ2R0aF9jbWRfc3RyICppbnRlcm5hbF9jbWRfc3RyOyAgICAgICAgIC8qIGNyaWVyIGZvciBpbnRlcm5hbCBtZXNzYWdlcyovCiAgICAgICAgIGRtYV9hZGRyX3Qgc2Vuc2VfcGFkZHI7ICAgICAgICAgICAgICAgICAvKiBzZW5zZSBkbWEtYWRkciAqLwotICAgICAgICB1bmNoYXIgcHJpb3JpdHk7CisgICAgICAgIHU4IHByaW9yaXR5OwogCWludCB0aW1lb3V0X2NvdW50OwkJCS8qICMgb2YgdGltZW91dCBjYWxscyAqLwogICAgICAgICB2b2xhdGlsZSBpbnQgd2FpdF9mb3JfY29tcGxldGlvbjsKLSAgICAgICAgdXNob3J0IHN0YXR1czsKLSAgICAgICAgdWxvbmczMiBpbmZvOworICAgICAgICB1MTYgc3RhdHVzOworICAgICAgICB1MzIgaW5mbzsKICAgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcjsKICAgICAgICAgaW50IHBoYXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qID8/Pz8gKi8KICAgICAgICAgaW50IE9wQ29kZTsKICAgICB9IGNtbmRpbmZvW0dEVEhfTUFYQ01EU107ICAgICAgICAgICAgICAgICAgIC8qIGluZGV4PT0wIGlzIGZyZWUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGJ1c19jbnQ7ICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzIGNvdW50ICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB0aWRfY250OyAgICAgICAgICAgICAgICAvKiBUYXJnZXQgSUQgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGJ1c19pZFtNQVhCVVNdOyAgICAgICAgIC8qIElPUCBJRHMgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHZpcnRfYnVzOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiB2aXJ0dWFsIGJ1cyAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgbW9yZV9wcm9jOyAgICAgICAgICAgICAgLyogbW9yZSAvcHJvYyBpbmZvIHN1cHBvcnRlZCAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgY21kX2NudDsgICAgICAgICAgICAgICAgLyogY29tbWFuZCBjb3VudCBpbiBEUFJBTSAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgY21kX2xlbjsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGFjdHVhbCBjb21tYW5kICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBjbWRfb2Zmc19kcG1lbTsgICAgICAgICAvKiBhY3R1YWwgb2Zmc2V0IGluIERQUkFNICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBpY19hbGxfc2l6ZTsgICAgICAgICAgICAvKiBzaXplb2YgRFBSQU0gaW50ZXJmLiBhcmVhICovCisgICAgdTggICAgICAgICAgICAgIGJ1c19jbnQ7ICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzIGNvdW50ICovCisgICAgdTggICAgICAgICAgICAgIHRpZF9jbnQ7ICAgICAgICAgICAgICAgIC8qIFRhcmdldCBJRCBjb3VudCAqLworICAgIHU4ICAgICAgICAgICAgICBidXNfaWRbTUFYQlVTXTsgICAgICAgICAvKiBJT1AgSURzICovCisgICAgdTggICAgICAgICAgICAgIHZpcnRfYnVzOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiB2aXJ0dWFsIGJ1cyAqLworICAgIHU4ICAgICAgICAgICAgICBtb3JlX3Byb2M7ICAgICAgICAgICAgICAvKiBtb3JlIC9wcm9jIGluZm8gc3VwcG9ydGVkICovCisgICAgdTE2ICAgICAgICAgICAgICBjbWRfY250OyAgICAgICAgICAgICAgICAvKiBjb21tYW5kIGNvdW50IGluIERQUkFNICovCisgICAgdTE2ICAgICAgICAgICAgICBjbWRfbGVuOyAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgYWN0dWFsIGNvbW1hbmQgKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNtZF9vZmZzX2RwbWVtOyAgICAgICAgIC8qIGFjdHVhbCBvZmZzZXQgaW4gRFBSQU0gKi8KKyAgICB1MTYgICAgICAgICAgICAgIGljX2FsbF9zaXplOyAgICAgICAgICAgIC8qIHNpemVvZiBEUFJBTSBpbnRlcmYuIGFyZWEgKi8KICAgICBnZHRoX2NwYXJfc3RyICAgICAgIGNwYXI7ICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgY2FjaGUgcGFyLiAqLwogICAgIGdkdGhfYmZlYXRfc3RyICAgICAgYmZlYXQ7ICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBmZWF0dXJlcyAqLwogICAgIGdkdGhfYmluZm9fc3RyICAgICAgYmluZm87ICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBpbmZvICovCkBAIC05NDEsNyArOTQxLDcgQEAKICAgICBzdHJ1Y3QgcGNpX2RldiAgICAgICpwZGV2OwogICAgIGNoYXIgICAgICAgICAgICAgICAgb2VtX25hbWVbOF07CiAjaWZkZWYgR0RUSF9ETUFfU1RBVElTVElDUwotICAgIHVsb25nICAgICAgICAgICAgICAgZG1hMzJfY250LCBkbWE2NF9jbnQ7ICAgLyogc3RhdGlzdGljczogRE1BIGJ1ZmZlciAqLworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICBkbWEzMl9jbnQsIGRtYTY0X2NudDsgICAvKiBzdGF0aXN0aWNzOiBETUEgYnVmZmVyICovCiAjZW5kaWYKICAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgICAgICAgICAqc2RldjsKIH0gZ2R0aF9oYV9zdHI7CkBAIC05NTMsNjUgKzk1Myw2NSBAQAogCiAvKiBJTlFVSVJZIGRhdGEgZm9ybWF0ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgdHlwZV9xdWFsOwotICAgIHVuY2hhciAgICAgIG1vZGlmX3JtYjsKLSAgICB1bmNoYXIgICAgICB2ZXJzaW9uOwotICAgIHVuY2hhciAgICAgIHJlc3BfYWVuYzsKLSAgICB1bmNoYXIgICAgICBhZGRfbGVuZ3RoOwotICAgIHVuY2hhciAgICAgIHJlc2VydmVkMTsKLSAgICB1bmNoYXIgICAgICByZXNlcnZlZDI7Ci0gICAgdW5jaGFyICAgICAgbWlzYzsKLSAgICB1bmNoYXIgICAgICB2ZW5kb3JbOF07Ci0gICAgdW5jaGFyICAgICAgcHJvZHVjdFsxNl07Ci0gICAgdW5jaGFyICAgICAgcmV2aXNpb25bNF07Ci19IFBBQ0tFRCBnZHRoX2lucV9kYXRhOworICAgIHU4ICAgICAgdHlwZV9xdWFsOworICAgIHU4ICAgICAgbW9kaWZfcm1iOworICAgIHU4ICAgICAgdmVyc2lvbjsKKyAgICB1OCAgICAgIHJlc3BfYWVuYzsKKyAgICB1OCAgICAgIGFkZF9sZW5ndGg7CisgICAgdTggICAgICByZXNlcnZlZDE7CisgICAgdTggICAgICByZXNlcnZlZDI7CisgICAgdTggICAgICBtaXNjOworICAgIHU4ICAgICAgdmVuZG9yWzhdOworICAgIHU4ICAgICAgcHJvZHVjdFsxNl07CisgICAgdTggICAgICByZXZpc2lvbls0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9pbnFfZGF0YTsKIAogLyogUkVBRF9DQVBBQ0lUWSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIGxhc3RfYmxvY2tfbm87Ci0gICAgdWxvbmczMiAgICAgYmxvY2tfbGVuZ3RoOwotfSBQQUNLRUQgZ2R0aF9yZGNhcF9kYXRhOworICAgIHUzMiAgICAgbGFzdF9ibG9ja19ubzsKKyAgICB1MzIgICAgIGJsb2NrX2xlbmd0aDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9yZGNhcF9kYXRhOwogCiAvKiBSRUFEX0NBUEFDSVRZICgxNikgZGF0YSBmb3JtYXQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzY0ICAgICBsYXN0X2Jsb2NrX25vOwotICAgIHVsb25nMzIgICAgIGJsb2NrX2xlbmd0aDsKLX0gUEFDS0VEIGdkdGhfcmRjYXAxNl9kYXRhOworICAgIHU2NCAgICAgbGFzdF9ibG9ja19ubzsKKyAgICB1MzIgICAgIGJsb2NrX2xlbmd0aDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9yZGNhcDE2X2RhdGE7CiAKIC8qIFJFUVVFU1RfU0VOU0UgZGF0YSBmb3JtYXQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICBlcnJvcmNvZGU7Ci0gICAgdW5jaGFyICAgICAgc2Vnbm87Ci0gICAgdW5jaGFyICAgICAga2V5OwotICAgIHVsb25nMzIgICAgIGluZm87Ci0gICAgdW5jaGFyICAgICAgYWRkX2xlbmd0aDsKLSAgICB1bG9uZzMyICAgICBjbWRfaW5mbzsKLSAgICB1bmNoYXIgICAgICBhZHNjOwotICAgIHVuY2hhciAgICAgIGFkc3E7Ci0gICAgdW5jaGFyICAgICAgZnJ1YzsKLSAgICB1bmNoYXIgICAgICBrZXlfc3BlY1szXTsKLX0gUEFDS0VEIGdkdGhfc2Vuc2VfZGF0YTsKKyAgICB1OCAgICAgIGVycm9yY29kZTsKKyAgICB1OCAgICAgIHNlZ25vOworICAgIHU4ICAgICAga2V5OworICAgIHUzMiAgICAgaW5mbzsKKyAgICB1OCAgICAgIGFkZF9sZW5ndGg7CisgICAgdTMyICAgICBjbWRfaW5mbzsKKyAgICB1OCAgICAgIGFkc2M7CisgICAgdTggICAgICBhZHNxOworICAgIHU4ICAgICAgZnJ1YzsKKyAgICB1OCAgICAgIGtleV9zcGVjWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3NlbnNlX2RhdGE7CiAKIC8qIE1PREVfU0VOU0UgZGF0YSBmb3JtYXQgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICBzdHJ1Y3QgewotICAgICAgICB1bmNoYXIgIGRhdGFfbGVuZ3RoOwotICAgICAgICB1bmNoYXIgIG1lZF90eXBlOwotICAgICAgICB1bmNoYXIgIGRldl9wYXI7Ci0gICAgICAgIHVuY2hhciAgYmRfbGVuZ3RoOwotICAgIH0gUEFDS0VEIGhkOworICAgICAgICB1OCAgZGF0YV9sZW5ndGg7CisgICAgICAgIHU4ICBtZWRfdHlwZTsKKyAgICAgICAgdTggIGRldl9wYXI7CisgICAgICAgIHU4ICBiZF9sZW5ndGg7CisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBoZDsKICAgICBzdHJ1Y3QgewotICAgICAgICB1bmNoYXIgIGRlbnNfY29kZTsKLSAgICAgICAgdW5jaGFyICBibG9ja19jb3VudFszXTsKLSAgICAgICAgdW5jaGFyICByZXNlcnZlZDsKLSAgICAgICAgdW5jaGFyICBibG9ja19sZW5ndGhbM107Ci0gICAgfSBQQUNLRUQgYmQ7Ci19IFBBQ0tFRCBnZHRoX21vZGVwX2RhdGE7CisgICAgICAgIHU4ICBkZW5zX2NvZGU7CisgICAgICAgIHU4ICBibG9ja19jb3VudFszXTsKKyAgICAgICAgdTggIHJlc2VydmVkOworICAgICAgICB1OCAgYmxvY2tfbGVuZ3RoWzNdOworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYmQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfbW9kZXBfZGF0YTsKIAogLyogc3RhY2sgZnJhbWUgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZyAgICAgICBiWzEwXTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMyLzY0IGJpdCBjb21waWxlciAhICovCi19IFBBQ0tFRCBnZHRoX3N0YWNrZnJhbWU7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICBiWzEwXTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMyLzY0IGJpdCBjb21waWxlciAhICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc3RhY2tmcmFtZTsKIAogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfaW9jdGwuaCBiL2RyaXZlcnMvc2NzaS9nZHRoX2lvY3RsLmgKaW5kZXggNzgzZmFlNy4uYjAwNGM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGhfaW9jdGwuaAorKysgYi9kcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oCkBAIC0zMiwxMDkgKzMyLDEwMSBAQAogI2RlZmluZSBNQVhfSERSSVZFUyAgICAgTUFYX0xEUklWRVMgICAgICAgICAgICAgLyogbWF4LiBob3N0IGRyaXZlIGNvdW50ICovCiAjZW5kaWYKIAotLyogdHlwZWRlZnMgKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi10eXBlZGVmIHUzMiAgICAgdWxvbmczMjsKLXR5cGVkZWYgdTY0ICAgICB1bG9uZzY0OwotI2VuZGlmCi0KLSNkZWZpbmUgUEFDS0VEICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQotCiAvKiBzY2F0dGVyL2dhdGhlciBlbGVtZW50ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgc2dfcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRyZXNzICovCi0gICAgdWxvbmczMiAgICAgc2dfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggKi8KLX0gUEFDS0VEIGdkdGhfc2dfc3RyOworICAgIHUzMiAgICAgc2dfcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRyZXNzICovCisgICAgdTMyICAgICBzZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3NnX3N0cjsKIAogLyogc2NhdHRlci9nYXRoZXIgZWxlbWVudCAtIDY0Yml0IGFkZHJlc3NlcyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nNjQgICAgIHNnX3B0cjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkcmVzcyAqLwotICAgIHVsb25nMzIgICAgIHNnX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoICovCi19IFBBQ0tFRCBnZHRoX3NnNjRfc3RyOworICAgIHU2NCAgICAgc2dfcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRyZXNzICovCisgICAgdTMyICAgICBzZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3NnNjRfc3RyOwogCiAvKiBjb21tYW5kIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIEJvYXJkTm9kZTsgICAgICAgICAgICAgICAgICAgICAgLyogYm9hcmQgbm9kZSAoYWx3YXlzIDApICovCi0gICAgdWxvbmczMiAgICAgQ29tbWFuZEluZGV4OyAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIG51bWJlciAqLwotICAgIHVzaG9ydCAgICAgIE9wQ29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbW1hbmQgKFJFQUQsLi4pICovCisgICAgdTMyICAgICBCb2FyZE5vZGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGJvYXJkIG5vZGUgKGFsd2F5cyAwKSAqLworICAgIHUzMiAgICAgQ29tbWFuZEluZGV4OyAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIG51bWJlciAqLworICAgIHUxNiAgICAgIE9wQ29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbW1hbmQgKFJFQUQsLi4pICovCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgRGV2aWNlTm87ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNhY2hlIGRyaXZlICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBCbG9ja05vOyAgICAgICAgICAgICAgICAvKiBibG9jayBudW1iZXIgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIEJsb2NrQ250OyAgICAgICAgICAgICAgIC8qIGJsb2NrIGNvdW50ICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBEZXN0QWRkcjsgICAgICAgICAgICAgICAvKiBkZXN0LiBhZGRyLiAoaWYgcy9nOiAtMSkgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHNnX2Nhbno7ICAgICAgICAgICAgICAgIC8qIHMvZyBlbGVtZW50IGNvdW50ICovCisgICAgICAgICAgICB1MTYgICAgICBEZXZpY2VObzsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2FjaGUgZHJpdmUgKi8KKyAgICAgICAgICAgIHUzMiAgICAgQmxvY2tObzsgICAgICAgICAgICAgICAgLyogYmxvY2sgbnVtYmVyICovCisgICAgICAgICAgICB1MzIgICAgIEJsb2NrQ250OyAgICAgICAgICAgICAgIC8qIGJsb2NrIGNvdW50ICovCisgICAgICAgICAgICB1MzIgICAgIERlc3RBZGRyOyAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLworICAgICAgICAgICAgdTMyICAgICBzZ19jYW56OyAgICAgICAgICAgICAgICAvKiBzL2cgZWxlbWVudCBjb3VudCAqLwogICAgICAgICAgICAgZ2R0aF9zZ19zdHIgc2dfbHN0W0dEVEhfTUFYU0ddOyAgICAgLyogcy9nIGxpc3QgKi8KLSAgICAgICAgfSBQQUNLRUQgY2FjaGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIHNlcnZpY2UgY21kLiBzdHIuICovCisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgY2FjaGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIHNlcnZpY2UgY21kLiBzdHIuICovCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICBEZXZpY2VObzsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2FjaGUgZHJpdmUgKi8KLSAgICAgICAgICAgIHVsb25nNjQgICAgIEJsb2NrTm87ICAgICAgICAgICAgICAgIC8qIGJsb2NrIG51bWJlciAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgQmxvY2tDbnQ7ICAgICAgICAgICAgICAgLyogYmxvY2sgY291bnQgKi8KLSAgICAgICAgICAgIHVsb25nNjQgICAgIERlc3RBZGRyOyAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfY2FuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIERldmljZU5vOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjYWNoZSBkcml2ZSAqLworICAgICAgICAgICAgdTY0ICAgICBCbG9ja05vOyAgICAgICAgICAgICAgICAvKiBibG9jayBudW1iZXIgKi8KKyAgICAgICAgICAgIHUzMiAgICAgQmxvY2tDbnQ7ICAgICAgICAgICAgICAgLyogYmxvY2sgY291bnQgKi8KKyAgICAgICAgICAgIHU2NCAgICAgRGVzdEFkZHI7ICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCisgICAgICAgICAgICB1MzIgICAgIHNnX2Nhbno7ICAgICAgICAgICAgICAgIC8qIHMvZyBlbGVtZW50IGNvdW50ICovCiAgICAgICAgICAgICBnZHRoX3NnNjRfc3RyIHNnX2xzdFtHRFRIX01BWFNHXTsgICAvKiBzL2cgbGlzdCAqLwotICAgICAgICB9IFBBQ0tFRCBjYWNoZTY0OyAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2VydmljZSBjbWQuIHN0ci4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBjYWNoZTY0OyAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2VydmljZSBjbWQuIHN0ci4gKi8KICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgIHBhcmFtX3NpemU7ICAgICAgICAgICAgIC8qIHNpemUgb2YgcF9wYXJhbSBidWZmZXIgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHN1YmZ1bmM7ICAgICAgICAgICAgICAgIC8qIElPQ1RMIGZ1bmN0aW9uICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBjaGFubmVsOyAgICAgICAgICAgICAgICAvKiBkZXZpY2UgKi8KLSAgICAgICAgICAgIHVsb25nNjQgICAgIHBfcGFyYW07ICAgICAgICAgICAgICAgIC8qIGJ1ZmZlciAqLwotICAgICAgICB9IFBBQ0tFRCBpb2N0bDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU9DVEwgY29tbWFuZCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIHBhcmFtX3NpemU7ICAgICAgICAgICAgIC8qIHNpemUgb2YgcF9wYXJhbSBidWZmZXIgKi8KKyAgICAgICAgICAgIHUzMiAgICAgc3ViZnVuYzsgICAgICAgICAgICAgICAgLyogSU9DVEwgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgIHUzMiAgICAgY2hhbm5lbDsgICAgICAgICAgICAgICAgLyogZGV2aWNlICovCisgICAgICAgICAgICB1NjQgICAgIHBfcGFyYW07ICAgICAgICAgICAgICAgIC8qIGJ1ZmZlciAqLworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGlvY3RsOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJT0NUTCBjb21tYW5kIHN0cnVjdHVyZSAqLwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgcmVzZXJ2ZWQ7CisgICAgICAgICAgICB1MTYgICAgICByZXNlcnZlZDsKICAgICAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgICAgICAgICB1bG9uZzMyICBtc2dfaGFuZGxlOyAgICAgICAgLyogbWVzc2FnZSBoYW5kbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgdWxvbmc2NCAgbXNnX2FkZHI7ICAgICAgICAgIC8qIG1lc3NhZ2UgYnVmZmVyIGFkZHJlc3MgKi8KLSAgICAgICAgICAgICAgICB9IFBBQ0tFRCBtc2c7Ci0gICAgICAgICAgICAgICAgdW5jaGFyICAgICAgIGRhdGFbMTJdOyAgICAgICAgICAvKiBidWZmZXIgZm9yIHJ0YyBkYXRhLCAuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgdTMyICBtc2dfaGFuZGxlOyAgICAgICAgLyogbWVzc2FnZSBoYW5kbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgdTY0ICBtc2dfYWRkcjsgICAgICAgICAgLyogbWVzc2FnZSBidWZmZXIgYWRkcmVzcyAqLworICAgICAgICAgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbXNnOworICAgICAgICAgICAgICAgIHU4ICAgICAgIGRhdGFbMTJdOyAgICAgICAgICAvKiBidWZmZXIgZm9yIHJ0YyBkYXRhLCAuLi4gKi8KICAgICAgICAgICAgIH0gc3U7Ci0gICAgICAgIH0gUEFDS0VEIHNjcmVlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY3JlZW4gc2VydmljZSBjbWQuIHN0ci4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3JlZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NyZWVuIHNlcnZpY2UgY21kLiBzdHIuICovCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICByZXNlcnZlZDsKLSAgICAgICAgICAgIHVsb25nMzIgICAgIGRpcmVjdGlvbjsgICAgICAgICAgICAgIC8qIGRhdGEgZGlyZWN0aW9uICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBtY29uX3RpbWU7ICAgICAgICAgICAgICAvKiBjb25uZWN0IHRpbWUoMDogbm8gdG8uKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2RhdGE7ICAgICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBjbGVuOyAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNtZC4gbGVuZ3RoKDYsMTAsMTIpICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBjbWRbMTJdOyAgICAgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgbHVuOyAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBidXM7ICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyBudW1iZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZW5zZV9sZW47ICAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGxlbmd0aCAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2Vuc2VfZGF0YTsgICAgICAgICAgICAgLyogc2Vuc2UgZGF0YSBhZGRyLiAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgbGlua19wOyAgICAgICAgICAgICAgICAgLyogbGlua2VkIGNtZHMgKG5vdCBzdXBwLikgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHNnX3Jhbno7ICAgICAgICAgICAgICAgIC8qIHMvZyBlbGVtZW50IGNvdW50ICovCisgICAgICAgICAgICB1MTYgICAgICByZXNlcnZlZDsKKyAgICAgICAgICAgIHUzMiAgICAgZGlyZWN0aW9uOyAgICAgICAgICAgICAgLyogZGF0YSBkaXJlY3Rpb24gKi8KKyAgICAgICAgICAgIHUzMiAgICAgbWRpc2NfdGltZTsgICAgICAgICAgICAgLyogZGlzYy4gdGltZSAoMDogbm8gdGltZW91dCkqLworICAgICAgICAgICAgdTMyICAgICBtY29uX3RpbWU7ICAgICAgICAgICAgICAvKiBjb25uZWN0IHRpbWUoMDogbm8gdG8uKSAqLworICAgICAgICAgICAgdTMyICAgICBzZGF0YTsgICAgICAgICAgICAgICAgICAvKiBkZXN0LiBhZGRyLiAoaWYgcy9nOiAtMSkgKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2RsZW47ICAgICAgICAgICAgICAgICAgLyogZGF0YSBsZW5ndGggKGJ5dGVzKSAqLworICAgICAgICAgICAgdTMyICAgICBjbGVuOyAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNtZC4gbGVuZ3RoKDYsMTAsMTIpICovCisgICAgICAgICAgICB1OCAgICAgIGNtZFsxMl07ICAgICAgICAgICAgICAgIC8qIFNDU0kgY29tbWFuZCAqLworICAgICAgICAgICAgdTggICAgICB0YXJnZXQ7ICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KKyAgICAgICAgICAgIHU4ICAgICAgbHVuOyAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCisgICAgICAgICAgICB1OCAgICAgIGJ1czsgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzIG51bWJlciAqLworICAgICAgICAgICAgdTggICAgICBwcmlvcml0eTsgICAgICAgICAgICAgICAvKiBvbmx5IDAgdXNlZCAqLworICAgICAgICAgICAgdTMyICAgICBzZW5zZV9sZW47ICAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGxlbmd0aCAqLworICAgICAgICAgICAgdTMyICAgICBzZW5zZV9kYXRhOyAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGFkZHIuICovCisgICAgICAgICAgICB1MzIgICAgIGxpbmtfcDsgICAgICAgICAgICAgICAgIC8qIGxpbmtlZCBjbWRzIChub3Qgc3VwcC4pICovCisgICAgICAgICAgICB1MzIgICAgIHNnX3Jhbno7ICAgICAgICAgICAgICAgIC8qIHMvZyBlbGVtZW50IGNvdW50ICovCiAgICAgICAgICAgICBnZHRoX3NnX3N0ciBzZ19sc3RbR0RUSF9NQVhTR107ICAgICAvKiBzL2cgbGlzdCAqLwotICAgICAgICB9IFBBQ0tFRCByYXc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IHNlcnZpY2UgY21kLiBzdHJ1Y3QuICovCisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgcmF3OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJhdyBzZXJ2aWNlIGNtZC4gc3RydWN0LiAqLwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgcmVzZXJ2ZWQ7Ci0gICAgICAgICAgICB1bG9uZzMyICAgICBkaXJlY3Rpb247ICAgICAgICAgICAgICAvKiBkYXRhIGRpcmVjdGlvbiAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgbWRpc2NfdGltZTsgICAgICAgICAgICAgLyogZGlzYy4gdGltZSAoMDogbm8gdGltZW91dCkqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgbWNvbl90aW1lOyAgICAgICAgICAgICAgLyogY29ubmVjdCB0aW1lKDA6IG5vIHRvLikgKi8KLSAgICAgICAgICAgIHVsb25nNjQgICAgIHNkYXRhOyAgICAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2RsZW47ICAgICAgICAgICAgICAgICAgLyogZGF0YSBsZW5ndGggKGJ5dGVzKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgY2xlbjsgICAgICAgICAgICAgICAgICAgLyogU0NTSSBjbWQuIGxlbmd0aCg2LC4uLDE2KSAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgY21kWzE2XTsgICAgICAgICAgICAgICAgLyogU0NTSSBjb21tYW5kICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICB0YXJnZXQ7ICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIGx1bjsgICAgICAgICAgICAgICAgICAgIC8qIExVTiAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgYnVzOyAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgbnVtYmVyICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBwcmlvcml0eTsgICAgICAgICAgICAgICAvKiBvbmx5IDAgdXNlZCAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2Vuc2VfbGVuOyAgICAgICAgICAgICAgLyogc2Vuc2UgZGF0YSBsZW5ndGggKi8KLSAgICAgICAgICAgIHVsb25nNjQgICAgIHNlbnNlX2RhdGE7ICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgYWRkci4gKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHNnX3Jhbno7ICAgICAgICAgICAgICAgIC8qIHMvZyBlbGVtZW50IGNvdW50ICovCisgICAgICAgICAgICB1MTYgICAgICByZXNlcnZlZDsKKyAgICAgICAgICAgIHUzMiAgICAgZGlyZWN0aW9uOyAgICAgICAgICAgICAgLyogZGF0YSBkaXJlY3Rpb24gKi8KKyAgICAgICAgICAgIHUzMiAgICAgbWRpc2NfdGltZTsgICAgICAgICAgICAgLyogZGlzYy4gdGltZSAoMDogbm8gdGltZW91dCkqLworICAgICAgICAgICAgdTMyICAgICBtY29uX3RpbWU7ICAgICAgICAgICAgICAvKiBjb25uZWN0IHRpbWUoMDogbm8gdG8uKSAqLworICAgICAgICAgICAgdTY0ICAgICBzZGF0YTsgICAgICAgICAgICAgICAgICAvKiBkZXN0LiBhZGRyLiAoaWYgcy9nOiAtMSkgKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2RsZW47ICAgICAgICAgICAgICAgICAgLyogZGF0YSBsZW5ndGggKGJ5dGVzKSAqLworICAgICAgICAgICAgdTMyICAgICBjbGVuOyAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNtZC4gbGVuZ3RoKDYsLi4sMTYpICovCisgICAgICAgICAgICB1OCAgICAgIGNtZFsxNl07ICAgICAgICAgICAgICAgIC8qIFNDU0kgY29tbWFuZCAqLworICAgICAgICAgICAgdTggICAgICB0YXJnZXQ7ICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KKyAgICAgICAgICAgIHU4ICAgICAgbHVuOyAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCisgICAgICAgICAgICB1OCAgICAgIGJ1czsgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzIG51bWJlciAqLworICAgICAgICAgICAgdTggICAgICBwcmlvcml0eTsgICAgICAgICAgICAgICAvKiBvbmx5IDAgdXNlZCAqLworICAgICAgICAgICAgdTMyICAgICBzZW5zZV9sZW47ICAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGxlbmd0aCAqLworICAgICAgICAgICAgdTY0ICAgICBzZW5zZV9kYXRhOyAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGFkZHIuICovCisgICAgICAgICAgICB1MzIgICAgIHNnX3Jhbno7ICAgICAgICAgICAgICAgIC8qIHMvZyBlbGVtZW50IGNvdW50ICovCiAgICAgICAgICAgICBnZHRoX3NnNjRfc3RyIHNnX2xzdFtHRFRIX01BWFNHXTsgICAvKiBzL2cgbGlzdCAqLwotICAgICAgICB9IFBBQ0tFRCByYXc2NDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IHNlcnZpY2UgY21kLiBzdHJ1Y3QuICovCisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgcmF3NjQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJhdyBzZXJ2aWNlIGNtZC4gc3RydWN0LiAqLwogICAgIH0gdTsKICAgICAvKiBhZGRpdGlvbmFsIHZhcmlhYmxlcyAqLwotICAgIHVuY2hhciAgICAgIFNlcnZpY2U7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBzZXJ2aWNlICovCi0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWQ7Ci0gICAgdXNob3J0ICAgICAgU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHJlc3VsdCAqLwotICAgIHVsb25nMzIgICAgIEluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvcm1hdGlvbiAqLworICAgIHU4ICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIHNlcnZpY2UgKi8KKyAgICB1OCAgICAgIHJlc2VydmVkOworICAgIHUxNiAgICAgIFN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCByZXN1bHQgKi8KKyAgICB1MzIgICAgIEluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvcm1hdGlvbiAqLwogICAgIHZvaWQgICAgICAgICpSZXF1ZXN0QnVmZmVyOyAgICAgICAgICAgICAgICAgLyogcmVxdWVzdCBidWZmZXIgKi8KLX0gUEFDS0VEIGdkdGhfY21kX3N0cjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jbWRfc3RyOwogCiAvKiBjb250cm9sbGVyIGV2ZW50IHN0cnVjdHVyZSAqLwogI2RlZmluZSBFU19BU1lOQyAgICAxCkBAIC0xNDIsMTI5ICsxMzQsMTI5IEBACiAjZGVmaW5lIEVTX1RFU1QgICAgIDMKICNkZWZpbmUgRVNfU1lOQyAgICAgNAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBzdHJ1Y3R1cmUgKi8KKyAgICB1MTYgICAgICAgICAgICAgICAgICBzaXplOyAgICAgICAgICAgICAgIC8qIHNpemUgb2Ygc3RydWN0dXJlICovCiAgICAgdW5pb24gewogICAgICAgICBjaGFyICAgICAgICAgICAgICAgIHN0cmVhbVsxNl07CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgaW9ub2RlOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIHNlcnZpY2U7Ci0gICAgICAgICAgICB1bG9uZzMyICAgICAgICAgaW5kZXg7Ci0gICAgICAgIH0gUEFDS0VEIGRyaXZlcjsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBpb25vZGU7CisgICAgICAgICAgICB1MTYgICAgICAgICAgc2VydmljZTsKKyAgICAgICAgICAgIHUzMiAgICAgICAgIGluZGV4OworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGRyaXZlcjsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBpb25vZGU7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgc2VydmljZTsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBzdGF0dXM7Ci0gICAgICAgICAgICB1bG9uZzMyICAgICAgICAgaW5mbzsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBzY3NpX2Nvb3JkWzNdOwotICAgICAgICB9IFBBQ0tFRCBhc3luYzsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBpb25vZGU7CisgICAgICAgICAgICB1MTYgICAgICAgICAgc2VydmljZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzdGF0dXM7CisgICAgICAgICAgICB1MzIgICAgICAgICBpbmZvOworICAgICAgICAgICAgdTggICAgICAgICAgc2NzaV9jb29yZFszXTsKKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhc3luYzsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBpb25vZGU7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgc2VydmljZTsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBzdGF0dXM7Ci0gICAgICAgICAgICB1bG9uZzMyICAgICAgICAgaW5mbzsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBob3N0ZHJpdmU7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgc2NzaV9jb29yZFszXTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBzZW5zZV9rZXk7Ci0gICAgICAgIH0gUEFDS0VEIHN5bmM7CisgICAgICAgICAgICB1MTYgICAgICAgICAgaW9ub2RlOworICAgICAgICAgICAgdTE2ICAgICAgICAgIHNlcnZpY2U7CisgICAgICAgICAgICB1MTYgICAgICAgICAgc3RhdHVzOworICAgICAgICAgICAgdTMyICAgICAgICAgaW5mbzsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBob3N0ZHJpdmU7CisgICAgICAgICAgICB1OCAgICAgICAgICBzY3NpX2Nvb3JkWzNdOworICAgICAgICAgICAgdTggICAgICAgICAgc2Vuc2Vfa2V5OworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHN5bmM7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bG9uZzMyICAgICAgICAgbDEsIGwyLCBsMywgbDQ7Ci0gICAgICAgIH0gUEFDS0VEIHRlc3Q7CisgICAgICAgICAgICB1MzIgICAgICAgICBsMSwgbDIsIGwzLCBsNDsKKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0ZXN0OwogICAgIH0gZXU7Ci0gICAgdWxvbmczMiAgICAgICAgICAgICAgICAgc2V2ZXJpdHk7Ci0gICAgdW5jaGFyICAgICAgICAgICAgICAgICAgZXZlbnRfc3RyaW5nWzI1Nl07ICAgICAgICAgIAotfSBQQUNLRUQgZ2R0aF9ldnRfZGF0YTsKKyAgICB1MzIgICAgICAgICAgICAgICAgIHNldmVyaXR5OworICAgIHU4ICAgICAgICAgICAgICAgICAgZXZlbnRfc3RyaW5nWzI1Nl07ICAgICAgICAgIAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2V2dF9kYXRhOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgICAgIGZpcnN0X3N0YW1wOwotICAgIHVsb25nMzIgICAgICAgICBsYXN0X3N0YW1wOwotICAgIHVzaG9ydCAgICAgICAgICBzYW1lX2NvdW50OwotICAgIHVzaG9ydCAgICAgICAgICBldmVudF9zb3VyY2U7Ci0gICAgdXNob3J0ICAgICAgICAgIGV2ZW50X2lkeDsKLSAgICB1bmNoYXIgICAgICAgICAgYXBwbGljYXRpb247Ci0gICAgdW5jaGFyICAgICAgICAgIHJlc2VydmVkOworICAgIHUzMiAgICAgICAgIGZpcnN0X3N0YW1wOworICAgIHUzMiAgICAgICAgIGxhc3Rfc3RhbXA7CisgICAgdTE2ICAgICAgICAgIHNhbWVfY291bnQ7CisgICAgdTE2ICAgICAgICAgIGV2ZW50X3NvdXJjZTsKKyAgICB1MTYgICAgICAgICAgZXZlbnRfaWR4OworICAgIHU4ICAgICAgICAgIGFwcGxpY2F0aW9uOworICAgIHU4ICAgICAgICAgIHJlc2VydmVkOwogICAgIGdkdGhfZXZ0X2RhdGEgICBldmVudF9kYXRhOwotfSBQQUNLRUQgZ2R0aF9ldnRfc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2V2dF9zdHI7CiAKIAogI2lmZGVmIEdEVEhfSU9DVExfUFJPQwogLyogSU9DVEwgc3RydWN0dXJlICh3cml0ZSkgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICAgICAgICAgICAgICBtYWdpYzsgICAgICAgICAgICAgIC8qIElPQ1RMIG1hZ2ljICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgaW9jdGw7ICAgICAgICAgICAgICAvKiBJT0NUTCAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgIGlvbm9kZTsgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgICAgICBzZXJ2aWNlOyAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgc2VydmljZSAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7ICAgICAgICAgICAgLyogdGltZW91dCAqLworICAgIHUzMiAgICAgICAgICAgICAgICAgbWFnaWM7ICAgICAgICAgICAgICAvKiBJT0NUTCBtYWdpYyAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIGlvY3RsOyAgICAgICAgICAgICAgLyogSU9DVEwgKi8KKyAgICB1MTYgICAgICAgICAgICAgICAgICBpb25vZGU7ICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTE2ICAgICAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAvKiBjb250cm9sbGVyIHNlcnZpY2UgKi8KKyAgICB1MTYgICAgICAgICAgICAgICAgICB0aW1lb3V0OyAgICAgICAgICAgIC8qIHRpbWVvdXQgKi8KICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgY29tbWFuZFs1MTJdOyAgICAgICAvKiBjb250cm9sbGVyIGNvbW1hbmQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBkYXRhWzFdOyAgICAgICAgICAgIC8qIGFkZC4gZGF0YSAqLworICAgICAgICAgICAgdTggICAgICAgICAgY29tbWFuZFs1MTJdOyAgICAgICAvKiBjb250cm9sbGVyIGNvbW1hbmQgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgICAgLyogYWRkLiBkYXRhICovCiAgICAgICAgIH0gZ2VuZXJhbDsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBsb2NrOyAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgZHJpdmVfY250OyAgICAgICAgICAvKiBkcml2ZSBjb3VudCAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGRyaXZlc1tNQVhfSERSSVZFU107LyogZHJpdmVzICovCisgICAgICAgICAgICB1OCAgICAgICAgICBsb2NrOyAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCisgICAgICAgICAgICB1OCAgICAgICAgICBkcml2ZV9jbnQ7ICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgZHJpdmVzW01BWF9IRFJJVkVTXTsvKiBkcml2ZXMgKi8KICAgICAgICAgfSBsb2NrZHJ2OwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBjaGFubmVsOyAgICAgICAgICAgIC8qIGNoYW5uZWwgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGNoYW5uZWw7ICAgICAgICAgICAgLyogY2hhbm5lbCAqLwogICAgICAgICB9IGxvY2tjaG47CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgZXJhc2U7ICAgICAgICAgICAgICAvKiBlcmFzZSBldmVudCA/ICovCiAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgaGFuZGxlOwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGV2dFtFVkVOVF9TSVpFXTsgICAgLyogZXZlbnQgc3RydWN0dXJlICovCisgICAgICAgICAgICB1OCAgICAgICAgICBldnRbRVZFTlRfU0laRV07ICAgIC8qIGV2ZW50IHN0cnVjdHVyZSAqLwogICAgICAgICB9IGV2ZW50OwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGJ1czsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICB0YXJnZXQ7ICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGx1bjsgICAgICAgICAgICAgICAgLyogTFVOICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgY21kX2xlbjsgICAgICAgICAgICAvKiBjb21tYW5kIGxlbmd0aCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGNtZFsxMl07ICAgICAgICAgICAgLyogU0NTSSBjb21tYW5kICovCisgICAgICAgICAgICB1OCAgICAgICAgICBidXM7ICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzICovCisgICAgICAgICAgICB1OCAgICAgICAgICB0YXJnZXQ7ICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICAgICAgbHVuOyAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGNtZF9sZW47ICAgICAgICAgICAgLyogY29tbWFuZCBsZW5ndGggKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGNtZFsxMl07ICAgICAgICAgICAgLyogU0NTSSBjb21tYW5kICovCiAgICAgICAgIH0gc2NzaTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBoZHJfbm87ICAgICAgICAgICAgIC8qIGhvc3QgZHJpdmUgbnVtYmVyICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgZmxhZzsgICAgICAgICAgICAgICAvKiBvbGQgbWV0aC4vYWRkL3JlbW92ZSAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGhkcl9ubzsgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGZsYWc7ICAgICAgICAgICAgICAgLyogb2xkIG1ldGguL2FkZC9yZW1vdmUgKi8KICAgICAgICAgfSByZXNjYW47CiAgICAgfSBpdTsKIH0gZ2R0aF9pb3dyX3N0cjsKIAogLyogSU9DVEwgc3RydWN0dXJlIChyZWFkKSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgICAgICAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgLyogYnVmZmVyIHNpemUgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgICAgICBzdGF0dXM7ICAgICAgICAgICAgIC8qIElPQ1RMIGVycm9yIGNvZGUgKi8KKyAgICB1MzIgICAgICAgICAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgLyogYnVmZmVyIHNpemUgKi8KKyAgICB1MzIgICAgICAgICAgICAgICAgIHN0YXR1czsgICAgICAgICAgICAgLyogSU9DVEwgZXJyb3IgY29kZSAqLwogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBkYXRhWzFdOyAgICAgICAgICAgIC8qIGRhdGEgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgICAgLyogZGF0YSAqLwogICAgICAgICB9IGdlbmVyYWw7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgdmVyc2lvbjsgICAgICAgICAgICAvKiBkcml2ZXIgdmVyc2lvbiAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIHZlcnNpb247ICAgICAgICAgICAgLyogZHJpdmVyIHZlcnNpb24gKi8KICAgICAgICAgfSBkcnZlcnM7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIHR5cGUgKi8KLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBpbmZvOyAgICAgICAgICAgICAgIC8qIHNsb3QgZXRjLiAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIG9lbV9pZDsgICAgICAgICAgICAgLyogT0VNIElEICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgYmlvc192ZXI7ICAgICAgICAgICAvKiBub3QgdXNlZCAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGFjY2VzczsgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBleHRfdHlwZTsgICAgICAgICAgIC8qIGV4dGVuZGVkIHR5cGUgKi8KLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBkZXZpY2VfaWQ7ICAgICAgICAgIC8qIGRldmljZSBJRCAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIHN1Yl9kZXZpY2VfaWQ7ICAgICAgLyogc3ViIGRldmljZSBJRCAqLworICAgICAgICAgICAgdTggICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIHR5cGUgKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICBpbmZvOyAgICAgICAgICAgICAgIC8qIHNsb3QgZXRjLiAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIG9lbV9pZDsgICAgICAgICAgICAgLyogT0VNIElEICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgYmlvc192ZXI7ICAgICAgICAgICAvKiBub3QgdXNlZCAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGFjY2VzczsgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICBleHRfdHlwZTsgICAgICAgICAgIC8qIGV4dGVuZGVkIHR5cGUgKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICBkZXZpY2VfaWQ7ICAgICAgICAgIC8qIGRldmljZSBJRCAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIHN1Yl9kZXZpY2VfaWQ7ICAgICAgLyogc3ViIGRldmljZSBJRCAqLwogICAgICAgICB9IGN0cnR5cGU7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgdmVyc2lvbjsgICAgICAgICAgICAvKiBPUyB2ZXJzaW9uICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgc3VidmVyc2lvbjsgICAgICAgICAvKiBPUyBzdWJ2ZXJzaW9uICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgcmV2aXNpb247ICAgICAgICAgICAvKiByZXZpc2lvbiAqLworICAgICAgICAgICAgdTggICAgICAgICAgdmVyc2lvbjsgICAgICAgICAgICAvKiBPUyB2ZXJzaW9uICovCisgICAgICAgICAgICB1OCAgICAgICAgICBzdWJ2ZXJzaW9uOyAgICAgICAgIC8qIE9TIHN1YnZlcnNpb24gKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICByZXZpc2lvbjsgICAgICAgICAgIC8qIHJldmlzaW9uICovCiAgICAgICAgIH0gb3N2ZXJzOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGNvdW50OyAgICAgICAgICAgICAgLyogY29udHJvbGxlciBjb3VudCAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGNvdW50OyAgICAgICAgICAgICAgLyogY29udHJvbGxlciBjb3VudCAqLwogICAgICAgICB9IGN0cmNudDsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBoYW5kbGU7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgZXZ0W0VWRU5UX1NJWkVdOyAgICAvKiBldmVudCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGV2dFtFVkVOVF9TSVpFXTsgICAgLyogZXZlbnQgc3RydWN0dXJlICovCiAgICAgICAgIH0gZXZlbnQ7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgYnVzOyAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cywgMHhmZjogaW52YWxpZCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHRhcmdldDsgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgbHVuOyAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBjbHVzdGVyX3R5cGU7ICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLworICAgICAgICAgICAgdTggICAgICAgICAgYnVzOyAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cywgMHhmZjogaW52YWxpZCAqLworICAgICAgICAgICAgdTggICAgICAgICAgdGFyZ2V0OyAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGx1bjsgICAgICAgICAgICAgICAgLyogTFVOICovCisgICAgICAgICAgICB1OCAgICAgICAgICBjbHVzdGVyX3R5cGU7ICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLwogICAgICAgICB9IGhkcl9saXN0W01BWF9IRFJJVkVTXTsgICAgICAgICAgICAgICAgLyogaW5kZXggaXMgaG9zdCBkcml2ZSBudW1iZXIgKi8KICAgICB9IGl1OwogfSBnZHRoX2lvcmRfc3RyOwpAQCAtMjcyLDUzICsyNjQsNTMgQEAKIAogLyogR0RUSU9DVExfR0VORVJBTCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVzaG9ydCBpb25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KLSAgICB1c2hvcnQgdGltZW91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWVvdXQgKi8KLSAgICB1bG9uZzMyIGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVycm9yIGluZm8gKi8gCi0gICAgdXNob3J0IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgKi8KLSAgICB1bG9uZyBkYXRhX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRhdGEgYnVmZmVyIHNpemUgKi8KLSAgICB1bG9uZyBzZW5zZV9sZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnNlIGJ1ZmZlciBzaXplICovCisgICAgdTE2IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLworICAgIHUxNiB0aW1lb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZW91dCAqLworICAgIHUzMiBpbmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciBpbmZvICovIAorICAgIHUxNiBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdHVzICovCisgICAgdW5zaWduZWQgbG9uZyBkYXRhX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRhdGEgYnVmZmVyIHNpemUgKi8KKyAgICB1bnNpZ25lZCBsb25nIHNlbnNlX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2Vuc2UgYnVmZmVyIHNpemUgKi8KICAgICBnZHRoX2NtZF9zdHIgY29tbWFuZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgKi8gICAgICAgICAgICAgICAgICAgCiB9IGdkdGhfaW9jdGxfZ2VuZXJhbDsKIAogLyogR0RUSU9DVExfTE9DS0RSViAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVzaG9ydCBpb25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KLSAgICB1bmNoYXIgbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCi0gICAgdW5jaGFyIGRyaXZlX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBjb3VudCAqLwotICAgIHVzaG9ydCBkcml2ZXNbTUFYX0hEUklWRVNdOyAgICAgICAgICAgICAgICAgLyogZHJpdmVzICovCisgICAgdTE2IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLworICAgIHU4IGxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2NrL3VubG9jayAqLworICAgIHU4IGRyaXZlX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBjb3VudCAqLworICAgIHUxNiBkcml2ZXNbTUFYX0hEUklWRVNdOyAgICAgICAgICAgICAgICAgLyogZHJpdmVzICovCiB9IGdkdGhfaW9jdGxfbG9ja2RydjsKIAogLyogR0RUSU9DVExfTE9DS0NITiAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVzaG9ydCBpb25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KLSAgICB1bmNoYXIgbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCi0gICAgdW5jaGFyIGNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsICovCisgICAgdTE2IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLworICAgIHU4IGxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2NrL3VubG9jayAqLworICAgIHU4IGNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsICovCiB9IGdkdGhfaW9jdGxfbG9ja2NobjsKIAogLyogR0RUSU9DVExfT1NWRVJTICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyIHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUyB2ZXJzaW9uICovCi0gICAgdW5jaGFyIHN1YnZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUyBzdWJ2ZXJzaW9uICovCi0gICAgdXNob3J0IHJldmlzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXZpc2lvbiAqLworICAgIHU4IHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUyB2ZXJzaW9uICovCisgICAgdTggc3VidmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHN1YnZlcnNpb24gKi8KKyAgICB1MTYgcmV2aXNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldmlzaW9uICovCiB9IGdkdGhfaW9jdGxfb3N2ZXJzOwogCiAvKiBHRFRJT0NUTF9DVFJUWVBFICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVuY2hhciB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciB0eXBlICovCi0gICAgdXNob3J0IGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzbG90IGV0Yy4gKi8KLSAgICB1c2hvcnQgb2VtX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9FTSBJRCAqLwotICAgIHVzaG9ydCBiaW9zX3ZlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KLSAgICB1c2hvcnQgYWNjZXNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCB1c2VkICovCi0gICAgdXNob3J0IGV4dF90eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlbmRlZCB0eXBlICovCi0gICAgdXNob3J0IGRldmljZV9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXZpY2UgSUQgKi8KLSAgICB1c2hvcnQgc3ViX2RldmljZV9pZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1YiBkZXZpY2UgSUQgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgdHlwZSAqLworICAgIHUxNiBpbmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2xvdCBldGMuICovCisgICAgdTE2IG9lbV9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KKyAgICB1MTYgYmlvc192ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCB1c2VkICovCisgICAgdTE2IGFjY2VzczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLworICAgIHUxNiBleHRfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXh0ZW5kZWQgdHlwZSAqLworICAgIHUxNiBkZXZpY2VfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGV2aWNlIElEICovCisgICAgdTE2IHN1Yl9kZXZpY2VfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzdWIgZGV2aWNlIElEICovCiB9IGdkdGhfaW9jdGxfY3RydHlwZTsKIAogLyogR0RUSU9DVExfRVZFTlQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOworICAgIHUxNiBpb25vZGU7CiAgICAgaW50IGVyYXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlcmFzZSBldmVudD8gKi8KICAgICBpbnQgaGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV2ZW50IGhhbmRsZSAqLwogICAgIGdkdGhfZXZ0X3N0ciBldmVudDsKQEAgLTMyNiwyMiArMzE4LDIyIEBACiAKIC8qIEdEVElPQ1RMX1JFU0NBTi9HRFRJT0NUTF9IRFJMSVNUICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVuY2hhciBmbGFnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkL3JlbW92ZSAqLwotICAgIHVzaG9ydCBoZHJfbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHJpdmUgbm8uICovCisgICAgdTE2IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLworICAgIHU4IGZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGQvcmVtb3ZlICovCisgICAgdTE2IGhkcl9ubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBuby4gKi8KICAgICBzdHJ1Y3QgewotICAgICAgICB1bmNoYXIgYnVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgKi8KLSAgICAgICAgdW5jaGFyIHRhcmdldDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLwotICAgICAgICB1bmNoYXIgbHVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCi0gICAgICAgIHVuY2hhciBjbHVzdGVyX3R5cGU7ICAgICAgICAgICAgICAgICAgICAvKiBjbHVzdGVyIHByb3BlcnRpZXMgKi8KKyAgICAgICAgdTggYnVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgKi8KKyAgICAgICAgdTggdGFyZ2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCisgICAgICAgIHU4IGx1bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExVTiAqLworICAgICAgICB1OCBjbHVzdGVyX3R5cGU7ICAgICAgICAgICAgICAgICAgICAvKiBjbHVzdGVyIHByb3BlcnRpZXMgKi8KICAgICB9IGhkcl9saXN0W01BWF9IRFJJVkVTXTsgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4IGlzIGhvc3QgZHJpdmUgbnVtYmVyICovCiB9IGdkdGhfaW9jdGxfcmVzY2FuOwogCiAvKiBHRFRJT0NUTF9SRVNFVF9CVVMvR0RUSU9DVExfUkVTRVRfRFJWICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVzaG9ydCBudW1iZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYnVzL2hvc3QgZHJpdmUgbnVtYmVyICovCi0gICAgdXNob3J0IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTE2IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBidXMvaG9zdCBkcml2ZSBudW1iZXIgKi8KKyAgICB1MTYgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyAqLwogfSBnZHRoX2lvY3RsX3Jlc2V0OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuYyBiL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuYwppbmRleCAxMjU4ZGEzLi5mZmIyYjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmMKKysrIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jCkBAIC00Myw3ICs0Myw3IEBACiAgICAgaW50IGksIGZvdW5kOwogICAgIGdkdGhfY21kX3N0ciAgICBnZHRjbWQ7CiAgICAgZ2R0aF9jcGFyX3N0ciAgICpwY3BhcjsKLSAgICB1bG9uZzY0ICAgICAgICAgcGFkZHI7CisgICAgdTY0ICAgICAgICAgcGFkZHI7CiAKICAgICBjaGFyICAgICAgICAgICAgY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKICAgICBtZW1zZXQoY21uZCwgMHhmZiwgMTIpOwpAQCAtMTU2LDggKzE1Niw4IEBACiAgICAgb2ZmX3QgYmVnaW4gPSAwLHBvcyA9IDA7CiAgICAgaW50IGlkLCBpLCBqLCBrLCBzZWMsIGZsYWc7CiAgICAgaW50IG5vX21kcnYgPSAwLCBkcnZfbm8sIGlzX21pcnI7Ci0gICAgdWxvbmczMiBjbnQ7Ci0gICAgdWxvbmc2NCBwYWRkcjsKKyAgICB1MzIgY250OworICAgIHU2NCBwYWRkcjsKICAgICBpbnQgcmMgPSAtRU5PTUVNOwogCiAgICAgZ2R0aF9jbWRfc3RyICpnZHRjbWQ7CkBAIC0yMjAsMTQgKzIyMCwxNCBAQAogCiAgICAgaWYgKGhhLT5tb3JlX3Byb2MpCiAgICAgICAgIHNwcmludGYoaHJlYywgIiVkLiUwMmQuJTAyZC0lYyUwM1giLCAKLSAgICAgICAgICAgICAgICAodW5jaGFyKShoYS0+YmluZm8udXBkX2Z3X3Zlcj4+MjQpLAotICAgICAgICAgICAgICAgICh1bmNoYXIpKGhhLT5iaW5mby51cGRfZndfdmVyPj4xNiksCi0gICAgICAgICAgICAgICAgKHVuY2hhcikoaGEtPmJpbmZvLnVwZF9md192ZXIpLAorICAgICAgICAgICAgICAgICh1OCkoaGEtPmJpbmZvLnVwZF9md192ZXI+PjI0KSwKKyAgICAgICAgICAgICAgICAodTgpKGhhLT5iaW5mby51cGRfZndfdmVyPj4xNiksCisgICAgICAgICAgICAgICAgKHU4KShoYS0+YmluZm8udXBkX2Z3X3ZlciksCiAgICAgICAgICAgICAgICAgaGEtPmJmZWF0LnJhaWQgPyAnUic6J04nLAogICAgICAgICAgICAgICAgIGhhLT5iaW5mby51cGRfcmV2aXNpb24pOwogICAgIGVsc2UKLSAgICAgICAgc3ByaW50ZihocmVjLCAiJWQuJTAyZCIsICh1bmNoYXIpKGhhLT5jcGFyLnZlcnNpb24+PjgpLAotICAgICAgICAgICAgICAgICh1bmNoYXIpKGhhLT5jcGFyLnZlcnNpb24pKTsKKyAgICAgICAgc3ByaW50ZihocmVjLCAiJWQuJTAyZCIsICh1OCkoaGEtPmNwYXIudmVyc2lvbj4+OCksCisgICAgICAgICAgICAgICAgKHU4KShoYS0+Y3Bhci52ZXJzaW9uKSk7CiAKICAgICBzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLAogICAgICAgICAgICAgICAgICAgICIgRHJpdmVyIFZlci46ICBcdCUtMTBzXHRGaXJtd2FyZSBWZXIuOiBcdCVzXG4iLApAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgICAgICAgICBwZHMtPmJpZCA9IGhhLT5yYXdbaV0ubG9jYWxfbm87CiAgICAgICAgICAgICBwZHMtPmZpcnN0ID0gMDsKICAgICAgICAgICAgIHBkcy0+ZW50cmllcyA9IGhhLT5yYXdbaV0ucGRldl9jbnQ7Ci0gICAgICAgICAgICBjbnQgPSAoMypHRFRIX1NDUkFUQ0gvNCAtIDUgKiBzaXplb2YodWxvbmczMikpIC8KKyAgICAgICAgICAgIGNudCA9ICgzKkdEVEhfU0NSQVRDSC80IC0gNSAqIHNpemVvZih1MzIpKSAvCiAgICAgICAgICAgICAgICAgc2l6ZW9mKHBkcy0+bGlzdFswXSk7CiAgICAgICAgICAgICBpZiAocGRzLT5lbnRyaWVzID4gY250KQogICAgICAgICAgICAgICAgIHBkcy0+ZW50cmllcyA9IGNudDsKQEAgLTYwNCw3ICs2MDQsNyBAQAogCiAgICAgICAgICAgICBzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBDYXBhY2l0eSBbTUJdOlx0JS02ZCAgICBcdFN0YXJ0IFNlY3RvcjogIFx0JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodWxvbmczMikoaGEtPmhkcltpXS5zaXplLzIwNDgpLCBoYS0+aGRyW2ldLnN0YXJ0X3NlYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyKShoYS0+aGRyW2ldLnNpemUvMjA0OCksIGhhLT5oZHJbaV0uc3RhcnRfc2VjKTsKICAgICAgICAgICAgIGxlbiArPSBzaXplOyAgcG9zID0gYmVnaW4gKyBsZW47CiAgICAgICAgICAgICBpZiAocG9zIDwgb2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgbGVuID0gMDsKQEAgLTY2NCw5ICs2NjQsOSBAQAogfQogCiBzdGF0aWMgY2hhciAqZ2R0aF9pb2N0bF9hbGxvYyhnZHRoX2hhX3N0ciAqaGEsIGludCBzaXplLCBpbnQgc2NyYXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nNjQgKnBhZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0ICpwYWRkcikKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGNoYXIgKnJldF92YWw7CiAKICAgICBpZiAoc2l6ZSA9PSAwKQpAQCAtNjkxLDkgKzY5MSw5IEBACiAgICAgcmV0dXJuIHJldF92YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGdkdGhfaW9jdGxfZnJlZShnZHRoX2hhX3N0ciAqaGEsIGludCBzaXplLCBjaGFyICpidWYsIHVsb25nNjQgcGFkZHIpCitzdGF0aWMgdm9pZCBnZHRoX2lvY3RsX2ZyZWUoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2l6ZSwgY2hhciAqYnVmLCB1NjQgcGFkZHIpCiB7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIGlmIChidWYgPT0gaGEtPnBzY3JhdGNoKSB7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwpAQCAtNzA1LDE2ICs3MDUsMTYgQEAKIH0KIAogI2lmZGVmIEdEVEhfSU9DVExfUFJPQwotc3RhdGljIGludCBnZHRoX2lvY3RsX2NoZWNrX2JpbihnZHRoX2hhX3N0ciAqaGEsIHVzaG9ydCBzaXplKQorc3RhdGljIGludCBnZHRoX2lvY3RsX2NoZWNrX2JpbihnZHRoX2hhX3N0ciAqaGEsIHUxNiBzaXplKQogewotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgaW50IHJldF92YWw7CiAKICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAKICAgICByZXRfdmFsID0gRkFMU0U7CiAgICAgaWYgKGhhLT5zY3JhdGNoX2J1c3kpIHsKLSAgICAgICAgaWYgKCgoZ2R0aF9pb3JkX3N0ciAqKWhhLT5wc2NyYXRjaCktPnNpemUgPT0gKHVsb25nMzIpc2l6ZSkKKyAgICAgICAgaWYgKCgoZ2R0aF9pb3JkX3N0ciAqKWhhLT5wc2NyYXRjaCktPnNpemUgPT0gKHUzMilzaXplKQogICAgICAgICAgICAgcmV0X3ZhbCA9IFRSVUU7CiAgICAgfQogICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwpAQCAtNzI0LDExICs3MjQsMTEgQEAKIAogc3RhdGljIHZvaWQgZ2R0aF93YWl0X2NvbXBsZXRpb24oZ2R0aF9oYV9zdHIgKmhhLCBpbnQgYnVzbnVtLCBpbnQgaWQpCiB7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBpbnQgaTsKICAgICBTY3NpX0NtbmQgKnNjcDsKICAgICBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqY21uZGluZm87Ci0gICAgdW5jaGFyIGIsIHQ7CisgICAgdTggYiwgdDsKIAogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKIApAQCAtNzM4LDggKzczOCw4IEBACiAKICAgICAgICAgYiA9IHNjcC0+ZGV2aWNlLT5jaGFubmVsOwogICAgICAgICB0ID0gc2NwLT5kZXZpY2UtPmlkOwotICAgICAgICBpZiAoIVNQRUNJQUxfU0NQKHNjcCkgJiYgdCA9PSAodW5jaGFyKWlkICYmIAotICAgICAgICAgICAgYiA9PSAodW5jaGFyKWJ1c251bSkgeworICAgICAgICBpZiAoIVNQRUNJQUxfU0NQKHNjcCkgJiYgdCA9PSAodTgpaWQgJiYgCisgICAgICAgICAgICBiID09ICh1OClidXNudW0pIHsKICAgICAgICAgICAgIGNtbmRpbmZvLT53YWl0X2Zvcl9jb21wbGV0aW9uID0gMDsKICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwogICAgICAgICAgICAgd2hpbGUgKCFjbW5kaW5mby0+d2FpdF9mb3JfY29tcGxldGlvbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuaCBiL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuaAppbmRleCA5YjkwMGNjLi5kYWIxNWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmgKKysrIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5oCkBAIC0xNyw4ICsxNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsIGdkdGhfaGFfc3RyICpoYSk7CiAKIHN0YXRpYyBjaGFyICpnZHRoX2lvY3RsX2FsbG9jKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGludCBzY3JhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmc2NCAqcGFkZHIpOwotc3RhdGljIHZvaWQgZ2R0aF9pb2N0bF9mcmVlKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGNoYXIgKmJ1ZiwgdWxvbmc2NCBwYWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgKnBhZGRyKTsKK3N0YXRpYyB2b2lkIGdkdGhfaW9jdGxfZnJlZShnZHRoX2hhX3N0ciAqaGEsIGludCBzaXplLCBjaGFyICpidWYsIHU2NCBwYWRkcik7CiBzdGF0aWMgdm9pZCBnZHRoX3dhaXRfY29tcGxldGlvbihnZHRoX2hhX3N0ciAqaGEsIGludCBidXNudW0sIGludCBpZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hvc3RzLmMgYi9kcml2ZXJzL3Njc2kvaG9zdHMuYwppbmRleCA1NTQ2MjZlLi4wOWRiY2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaG9zdHMuYworKysgYi9kcml2ZXJzL3Njc2kvaG9zdHMuYwpAQCAtMjE1LDYgKzIxNSw4IEBACiAJCXNob3N0LT5zaG9zdF9nZW5kZXYucGFyZW50ID0gZGV2ID8gZGV2IDogJnBsYXRmb3JtX2J1czsKIAlzaG9zdC0+ZG1hX2RldiA9IGRtYV9kZXY7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnNob3N0LT5zaG9zdF9nZW5kZXYpOworCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzaG9zdC0+c2hvc3RfZ2VuZGV2KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwpAQCAtMjIyLDYgKzIyNCw4IEBACiAJc2NzaV9ob3N0X3NldF9zdGF0ZShzaG9zdCwgU0hPU1RfUlVOTklORyk7CiAJZ2V0X2RldmljZShzaG9zdC0+c2hvc3RfZ2VuZGV2LnBhcmVudCk7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnNob3N0LT5zaG9zdF9kZXYpOworCiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzaG9zdC0+c2hvc3RfZGV2KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2RlbF9nZW5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5jIGIvZHJpdmVycy9zY3NpL2hwc2EuYwppbmRleCBiYjk2ZmRkLi4wMzY5N2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJocHNhLmgiCiAKIC8qIEhQU0FfRFJJVkVSX1ZFUlNJT04gbXVzdCBiZSAzIGJ5dGUgdmFsdWVzICgwLTI1NSkgc2VwYXJhdGVkIGJ5ICcuJyAqLwotI2RlZmluZSBIUFNBX0RSSVZFUl9WRVJTSU9OICIxLjAuMCIKKyNkZWZpbmUgSFBTQV9EUklWRVJfVkVSU0lPTiAiMi4wLjEtMyIKICNkZWZpbmUgRFJJVkVSX05BTUUgIkhQIEhQU0EgRHJpdmVyICh2ICIgSFBTQV9EUklWRVJfVkVSU0lPTiAiKSIKIAogLyogSG93IGxvbmcgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3IgYm9hcmQgdG8gZ28gaW50byBzaW1wbGUgbW9kZSAqLwpAQCAtNzcsOSArNzcsNiBAQAogCiAvKiBkZWZpbmUgdGhlIFBDSSBpbmZvIGZvciB0aGUgY2FyZHMgd2UgY2FuIGNvbnRyb2wgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBocHNhX3BjaV9kZXZpY2VfaWRbXSA9IHsKLQl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0MsICAgICAweDEwM0MsIDB4MzIyM30sCi0Je1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NDLCAgICAgMHgxMDNDLCAweDMyMzR9LAotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTQywgICAgIDB4MTAzQywgMHgzMjNEfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0MX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNDN9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQ1fSwKQEAgLTg3LDYgKzg0LDkgQEAKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0OX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNGF9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjRifSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzIzM30sCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0YgMHgzMzNmCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NGLCAgICAgMHgxMDNDLCAweDMzM0Z9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0FOWV9JRCwgICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmYgPDwgOCwgMH0sCiAJezAsfQpAQCAtOTksOSArOTksNiBAQAogICogIGFjY2VzcyA9IEFkZHJlc3Mgb2YgdGhlIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycwogICovCiBzdGF0aWMgc3RydWN0IGJvYXJkX3R5cGUgcHJvZHVjdHNbXSA9IHsKLQl7MHgzMjIzMTAzQywgIlNtYXJ0IEFycmF5IFA4MDAiLCAmU0E1X2FjY2Vzc30sCi0JezB4MzIzNDEwM0MsICJTbWFydCBBcnJheSBQNDAwIiwgJlNBNV9hY2Nlc3N9LAotCXsweDMyM2QxMDNjLCAiU21hcnQgQXJyYXkgUDcwME0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0MTEwM0MsICJTbWFydCBBcnJheSBQMjEyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNDMxMDNDLCAiU21hcnQgQXJyYXkgUDQxMCIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjQ1MTAzQywgIlNtYXJ0IEFycmF5IFA0MTBpIiwgJlNBNV9hY2Nlc3N9LApAQCAtMTA5LDYgKzEwNiw4IEBACiAJezB4MzI0OTEwM0MsICJTbWFydCBBcnJheSBQODEyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNGExMDNDLCAiU21hcnQgQXJyYXkgUDcxMm0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0YjEwM0MsICJTbWFydCBBcnJheSBQNzExbSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjMzMTAzQywgIlN0b3JhZ2VXb3JrcyBQMTIxMG0iLCAmU0E1X2FjY2Vzc30sCisJezB4MzMzRjEwM0MsICJTdG9yYWdlV29ya3MgUDEyMTBtIiwgJlNBNV9hY2Nlc3N9LAogCXsweEZGRkYxMDNDLCAiVW5rbm93biBTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKIH07CiAKQEAgLTEyNiwxMiArMTI1LDE1IEBACiBzdGF0aWMgdm9pZCBjbWRfc3BlY2lhbF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CiBzdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpjbWRfYWxsb2Moc3RydWN0IGN0bHJfaW5mbyAqaCk7CiBzdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpjbWRfc3BlY2lhbF9hbGxvYyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKLXN0YXRpYyB2b2lkIGZpbGxfY21kKHN0cnVjdCBDb21tYW5kTGlzdCAqYywgX191OCBjbWQsIHN0cnVjdCBjdGxyX2luZm8gKmgsCi0Jdm9pZCAqYnVmZiwgc2l6ZV90IHNpemUsIF9fdTggcGFnZV9jb2RlLCB1bnNpZ25lZCBjaGFyICpzY3NpM2FkZHIsCitzdGF0aWMgdm9pZCBmaWxsX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIHU4IGNtZCwgc3RydWN0IGN0bHJfaW5mbyAqaCwKKwl2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwgdTggcGFnZV9jb2RlLCB1bnNpZ25lZCBjaGFyICpzY3NpM2FkZHIsCiAJaW50IGNtZF90eXBlKTsKIAogc3RhdGljIGludCBocHNhX3Njc2lfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCiAJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKTsKK3N0YXRpYyB2b2lkIGhwc2Ffc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICopOworc3RhdGljIGludCBocHNhX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2gsCisJdW5zaWduZWQgbG9uZyBlbGFwc2VkX3RpbWUpOwogCiBzdGF0aWMgaW50IGhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NzaWNtZCk7CiBzdGF0aWMgaW50IGhwc2Ffc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKQEAgLTE1MCw2ICsxNTIsMTEgQEAKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpOwogc3RhdGljIHZvaWQgY2hlY2tfaW9jdGxfdW5pdF9hdHRlbnRpb24oc3RydWN0IGN0bHJfaW5mbyAqaCwKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpOworLyogcGVyZm9ybWFudCBtb2RlIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIGNhbGNfYnVja2V0X21hcChpbnQgKmJ1Y2tldCwgaW50IG51bV9idWNrZXRzLAorCWludCBuc2dzLCBpbnQgKmJ1Y2tldF9tYXApOworc3RhdGljIHZvaWQgaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKK3N0YXRpYyBpbmxpbmUgdTMyIG5leHRfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIAogc3RhdGljIERFVklDRV9BVFRSKHJhaWRfbGV2ZWwsIFNfSVJVR08sIHJhaWRfbGV2ZWxfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobHVuaWQsIFNfSVJVR08sIGx1bmlkX3Nob3csIE5VTEwpOwpAQCAtMTczLDEwICsxODAsMTAgQEAKIAkubmFtZQkJCT0gImhwc2EiLAogCS5wcm9jX25hbWUJCT0gImhwc2EiLAogCS5xdWV1ZWNvbW1hbmQJCT0gaHBzYV9zY3NpX3F1ZXVlX2NvbW1hbmQsCi0JLmNhbl9xdWV1ZQkJPSA1MTIsCisJLnNjYW5fc3RhcnQJCT0gaHBzYV9zY2FuX3N0YXJ0LAorCS5zY2FuX2ZpbmlzaGVkCQk9IGhwc2Ffc2Nhbl9maW5pc2hlZCwKIAkudGhpc19pZAkJPSAtMSwKIAkuc2dfdGFibGVzaXplCQk9IE1BWFNHRU5UUklFUywKLQkuY21kX3Blcl9sdW4JCT0gNTEyLAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBocHNhX2VoX2RldmljZV9yZXNldF9oYW5kbGVyLAogCS5pb2N0bAkJCT0gaHBzYV9pb2N0bCwKQEAgLTE5NSw2ICsyMDIsMTIgQEAKIAlyZXR1cm4gKHN0cnVjdCBjdGxyX2luZm8gKikgKnByaXY7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN0bHJfaW5mbyAqc2hvc3RfdG9faGJhKHN0cnVjdCBTY3NpX0hvc3QgKnNoKQoreworCXVuc2lnbmVkIGxvbmcgKnByaXYgPSBzaG9zdF9wcml2KHNoKTsKKwlyZXR1cm4gKHN0cnVjdCBjdGxyX2luZm8gKikgKnByaXY7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmhwc2Ffc2Nhbl90aHJlYWQ7CiBzdGF0aWMgREVGSU5FX01VVEVYKGhwc2Ffc2Nhbl9tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGhwc2Ffc2Nhbl9xKTsKQEAgLTMxMiw3ICszMjUsNyBAQAogCQkJaC0+YnVzeV9zY2FubmluZyA9IDE7CiAJCQltdXRleF91bmxvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CiAJCQlob3N0X25vID0gaC0+c2NzaV9ob3N0ID8gIGgtPnNjc2lfaG9zdC0+aG9zdF9ubyA6IC0xOwotCQkJaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKGgsIGhvc3Rfbm8pOworCQkJaHBzYV9zY2FuX3N0YXJ0KGgtPnNjc2lfaG9zdCk7CiAJCQljb21wbGV0ZV9hbGwoJmgtPnNjYW5fd2FpdCk7CiAJCQltdXRleF9sb2NrKCZocHNhX3NjYW5fbXV0ZXgpOwogCQkJaC0+YnVzeV9zY2FubmluZyA9IDA7CkBAIC0zNzksOCArMzkyLDcgQEAKIHsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKLQl1bnNpZ25lZCBsb25nICpwcml2ID0gc2hvc3RfcHJpdihzaG9zdCk7Ci0JaCA9IChzdHJ1Y3QgY3Rscl9pbmZvICopICpwcml2OworCWggPSBzaG9zdF90b19oYmEoc2hvc3QpOwogCWlmIChhZGRfdG9fc2Nhbl9saXN0KGgpKSB7CiAJCXdha2VfdXBfcHJvY2VzcyhocHNhX3NjYW5fdGhyZWFkKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZoLT5zY2FuX3dhaXQpOwpAQCAtMzk0LDEwICs0MDYsNDQgQEAKIAlobGlzdF9hZGRfaGVhZCgmYy0+bGlzdCwgbGlzdCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIG5leHRfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXUzMiBhOworCisJaWYgKHVubGlrZWx5KGgtPnRyYW5zTWV0aG9kICE9IENGR1RCTF9UcmFuc19QZXJmb3JtYW50KSkKKwkJcmV0dXJuIGgtPmFjY2Vzcy5jb21tYW5kX2NvbXBsZXRlZChoKTsKKworCWlmICgoKihoLT5yZXBseV9wb29sX2hlYWQpICYgMSkgPT0gKGgtPnJlcGx5X3Bvb2xfd3JhcGFyb3VuZCkpIHsKKwkJYSA9ICooaC0+cmVwbHlfcG9vbF9oZWFkKTsgLyogTmV4dCBjbWQgaW4gcmluZyBidWZmZXIgKi8KKwkJKGgtPnJlcGx5X3Bvb2xfaGVhZCkrKzsKKwkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKKwl9IGVsc2UgeworCQlhID0gRklGT19FTVBUWTsKKwl9CisJLyogQ2hlY2sgZm9yIHdyYXBhcm91bmQgKi8KKwlpZiAoaC0+cmVwbHlfcG9vbF9oZWFkID09IChoLT5yZXBseV9wb29sICsgaC0+bWF4X2NvbW1hbmRzKSkgeworCQloLT5yZXBseV9wb29sX2hlYWQgPSBoLT5yZXBseV9wb29sOworCQloLT5yZXBseV9wb29sX3dyYXBhcm91bmQgXj0gMTsKKwl9CisJcmV0dXJuIGE7Cit9CisKKy8qIHNldF9wZXJmb3JtYW50X21vZGU6IE1vZGlmeSB0aGUgdGFnIGZvciBjY2lzcyBwZXJmb3JtYW50CisgKiBzZXQgYml0IDAgZm9yIHB1bGwgbW9kZWwsIGJpdHMgMy0xIGZvciBibG9jayBmZXRjaAorICogcmVnaXN0ZXIgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIHNldF9wZXJmb3JtYW50X21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKQoreworCWlmIChsaWtlbHkoaC0+dHJhbnNNZXRob2QgPT0gQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQpKQorCQljLT5idXNhZGRyIHw9IDEgfCAoaC0+YmxvY2tGZXRjaFRhYmxlW2MtPkhlYWRlci5TR0xpc3RdIDw8IDEpOworfQorCiBzdGF0aWMgdm9pZCBlbnF1ZXVlX2NtZF9hbmRfc3RhcnRfaW8oc3RydWN0IGN0bHJfaW5mbyAqaCwKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNldF9wZXJmb3JtYW50X21vZGUoaCwgYyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKIAlhZGRRKCZoLT5yZXFRLCBjKTsKIAloLT5RZGVwdGgrKzsKQEAgLTQyMiw2ICs0NjgsMTUgQEAKIAlyZXR1cm4gKHNjc2kzYWRkclszXSAmIDB4QzApID09IDB4NDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3Njc2lfcmV2XzUoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlpZiAoIWgtPmhiYV9pbnF1aXJ5X2RhdGEpCisJCXJldHVybiAwOworCWlmICgoaC0+aGJhX2lucXVpcnlfZGF0YVsyXSAmIDB4MDcpID09IDUpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqcmFpZF9sYWJlbFtdID0geyAiMCIsICI0IiwgIjEoMSswKSIsICI1IiwgIjUrMSIsICJBREciLAogCSJVTktOT1dOIgogfTsKQEAgLTQzMSw3ICs0ODYsNyBAQAogCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IGwgPSAwOwotCWludCBybGV2ZWw7CisJdW5zaWduZWQgY2hhciBybGV2ZWw7CiAJc3RydWN0IGN0bHJfaW5mbyAqaDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqaGRldjsKQEAgLTQ1NSw3ICs1MTAsNyBAQAogCiAJcmxldmVsID0gaGRldi0+cmFpZF9sZXZlbDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHJsZXZlbCA8IDAgfHwgcmxldmVsID4gUkFJRF9VTktOT1dOKQorCWlmIChybGV2ZWwgPiBSQUlEX1VOS05PV04pCiAJCXJsZXZlbCA9IFJBSURfVU5LTk9XTjsKIAlsID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJSQUlEICVzXG4iLCByYWlkX2xhYmVsW3JsZXZlbF0pOwogCXJldHVybiBsOwpAQCAtNjIwLDYgKzY3NSwyNCBAQAogCXJldHVybiAwOwogfQogCisvKiBSZXBsYWNlIGFuIGVudHJ5IGZyb20gaC0+ZGV2W10gYXJyYXkuICovCitzdGF0aWMgdm9pZCBocHNhX3Njc2lfcmVwbGFjZV9lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLAorCWludCBlbnRyeSwgc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqbmV3X2VudHJ5LAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmFkZGVkW10sIGludCAqbmFkZGVkLAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnJlbW92ZWRbXSwgaW50ICpucmVtb3ZlZCkKK3sKKwkvKiBhc3N1bWVzIGgtPmRldmxvY2sgaXMgaGVsZCAqLworCUJVR19PTihlbnRyeSA8IDAgfHwgZW50cnkgPj0gSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEpOworCXJlbW92ZWRbKm5yZW1vdmVkXSA9IGgtPmRldltlbnRyeV07CisJKCpucmVtb3ZlZCkrKzsKKwloLT5kZXZbZW50cnldID0gbmV3X2VudHJ5OworCWFkZGVkWypuYWRkZWRdID0gbmV3X2VudHJ5OworCSgqbmFkZGVkKSsrOworCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICIlcyBkZXZpY2UgYyVkYiVkdCVkbCVkIGNoYW5nZWQuXG4iLAorCQlzY3NpX2RldmljZV90eXBlKG5ld19lbnRyeS0+ZGV2dHlwZSksIGhvc3RubywgbmV3X2VudHJ5LT5idXMsCisJCQluZXdfZW50cnktPnRhcmdldCwgbmV3X2VudHJ5LT5sdW4pOworfQorCiAvKiBSZW1vdmUgYW4gZW50cnkgZnJvbSBoLT5kZXZbXSBhcnJheS4gKi8KIHN0YXRpYyB2b2lkIGhwc2Ffc2NzaV9yZW1vdmVfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGhvc3RubywgaW50IGVudHJ5LAogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnJlbW92ZWRbXSwgaW50ICpucmVtb3ZlZCkKQEAgLTYyOCw4ICs3MDEsNyBAQAogCWludCBpOwogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnNkOwogCi0JaWYgKGVudHJ5IDwgMCB8fCBlbnRyeSA+PSBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSkKLQkJQlVHKCk7CisJQlVHX09OKGVudHJ5IDwgMCB8fCBlbnRyeSA+PSBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSk7CiAKIAlzZCA9IGgtPmRldltlbnRyeV07CiAJcmVtb3ZlZFsqbnJlbW92ZWRdID0gaC0+ZGV2W2VudHJ5XTsKQEAgLTcyMiw2ICs3OTQsOCBAQAogI2RlZmluZSBERVZJQ0VfQ0hBTkdFRCAxCiAjZGVmaW5lIERFVklDRV9TQU1FIDIKIAlmb3IgKGkgPSAwOyBpIDwgaGF5c3RhY2tfc2l6ZTsgaSsrKSB7CisJCWlmIChoYXlzdGFja1tpXSA9PSBOVUxMKSAvKiBwcmV2aW91c2x5IHJlbW92ZWQuICovCisJCQljb250aW51ZTsKIAkJaWYgKFNDU0kzQUREUl9FUShuZWVkbGUtPnNjc2kzYWRkciwgaGF5c3RhY2tbaV0tPnNjc2kzYWRkcikpIHsKIAkJCSppbmRleCA9IGk7CiAJCQlpZiAoZGV2aWNlX2lzX3RoZV9zYW1lKG5lZWRsZSwgaGF5c3RhY2tbaV0pKQpAQCAtNzM0LDcgKzgwOCw3IEBACiAJcmV0dXJuIERFVklDRV9OT1RfRk9VTkQ7CiB9CiAKLXN0YXRpYyBpbnQgYWRqdXN0X2hwc2Ffc2NzaV90YWJsZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLAorc3RhdGljIHZvaWQgYWRqdXN0X2hwc2Ffc2NzaV90YWJsZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLAogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnNkW10sIGludCBuc2RzKQogewogCS8qIHNkIGNvbnRhaW5zIHNjc2kzIGFkZHJlc3NlcyBhbmQgZGV2dHlwZXMsIGFuZCBpbnF1aXJ5CkBAIC03NzksMTIgKzg1MywxMiBAQAogCQkJY29udGludWU7IC8qIHJlbW92ZSBeXl4sIGhlbmNlIGkgbm90IGluY3JlbWVudGVkICovCiAJCX0gZWxzZSBpZiAoZGV2aWNlX2NoYW5nZSA9PSBERVZJQ0VfQ0hBTkdFRCkgewogCQkJY2hhbmdlcysrOwotCQkJaHBzYV9zY3NpX3JlbW92ZV9lbnRyeShoLCBob3N0bm8sIGksCi0JCQkJcmVtb3ZlZCwgJm5yZW1vdmVkKTsKLQkJCSh2b2lkKSBocHNhX3Njc2lfYWRkX2VudHJ5KGgsIGhvc3Rubywgc2RbZW50cnldLAotCQkJCWFkZGVkLCAmbmFkZGVkKTsKLQkJCS8qIGFkZCBjYW4ndCBmYWlsLCB3ZSBqdXN0IHJlbW92ZWQgb25lLiAqLwotCQkJc2RbZW50cnldID0gTlVMTDsgLyogcHJldmVudCBpdCBmcm9tIGJlaW5nIGZyZWVkICovCisJCQlocHNhX3Njc2lfcmVwbGFjZV9lbnRyeShoLCBob3N0bm8sIGksIHNkW2VudHJ5XSwKKwkJCQlhZGRlZCwgJm5hZGRlZCwgcmVtb3ZlZCwgJm5yZW1vdmVkKTsKKwkJCS8qIFNldCBpdCB0byBOVUxMIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBmcmVlZAorCQkJICogYXQgdGhlIGJvdHRvbSBvZiBocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoKQorCQkJICovCisJCQlzZFtlbnRyeV0gPSBOVUxMOwogCQl9CiAJCWkrKzsKIAl9CkBAIC04NjAsNyArOTM0LDYgQEAKIGZyZWVfYW5kX291dDoKIAlrZnJlZShhZGRlZCk7CiAJa2ZyZWUocmVtb3ZlZCk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC05MDAsNyArOTczLDcgQEAKIAogc3RhdGljIHZvaWQgaHBzYV9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlyZXR1cm47IC8qIG5vdGhpbmcgdG8gZG8uICovCisJLyogbm90aGluZyB0byBkby4gKi8KIH0KIAogc3RhdGljIHZvaWQgaHBzYV9zY3NpX3NldHVwKHN0cnVjdCBjdGxyX2luZm8gKmgpCkBAIC05MDgsMTEgKzk4MSwxMCBAQAogCWgtPm5kZXZpY2VzID0gMDsKIAloLT5zY3NpX2hvc3QgPSBOVUxMOwogCXNwaW5fbG9ja19pbml0KCZoLT5kZXZsb2NrKTsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXBsZXRlX3Njc2lfY29tbWFuZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmNwLAotCWludCB0aW1lb3V0LCBfX3UzMiB0YWcpCisJaW50IHRpbWVvdXQsIHUzMiB0YWcpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwogCXN0cnVjdCBjdGxyX2luZm8gKmg7CkBAIC05ODcsNyArMTA1OSw2IEBACiAJCQkJICogcmVxdWlyZWQKIAkJCQkgKi8KIAkJCQlpZiAoKGFzYyA9PSAweDA0KSAmJiAoYXNjcSA9PSAweDAzKSkgewotCQkJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgogCQkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IHVuaXQgIgogCQkJCQkJIm5vdCByZWFkeSwgbWFudWFsICIKQEAgLTk5NSwxNCArMTA2NiwyMiBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0KLQorCQkJaWYgKHNlbnNlX2tleSA9PSBBQk9SVEVEX0NPTU1BTkQpIHsKKwkJCQkvKiBBYm9ydGVkIGNvbW1hbmQgaXMgcmV0cnlhYmxlICovCisJCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwICIKKwkJCQkJImhhcyBjaGVjayBjb25kaXRpb246IGFib3J0ZWQgY29tbWFuZDogIgorCQkJCQkiQVNDOiAweCV4LCBBU0NROiAweCV4XG4iLAorCQkJCQljcCwgYXNjLCBhc2NxKTsKKwkJCQljbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OworCQkJCWJyZWFrOworCQkJfQogCQkJLyogTXVzdCBiZSBzb21lIG90aGVyIHR5cGUgb2YgY2hlY2sgY29uZGl0aW9uICovCiAJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFzIGNoZWNrIGNvbmRpdGlvbjogIgogCQkJCQkidW5rbm93biB0eXBlOiAiCiAJCQkJCSJTZW5zZTogMHgleCwgQVNDOiAweCV4LCBBU0NROiAweCV4LCAiCiAJCQkJCSJSZXR1cm5pbmcgcmVzdWx0OiAweCV4LCAiCiAJCQkJCSJjbWQ9WyUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCisJCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCiAJCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhdXG4iLAogCQkJCQljcCwgc2Vuc2Vfa2V5LCBhc2MsIGFzY3EsCiAJCQkJCWNtZC0+cmVzdWx0LApAQCAtMTAxMCw3ICsxMDg5LDEwIEBACiAJCQkJCWNtZC0+Y21uZFsyXSwgY21kLT5jbW5kWzNdLAogCQkJCQljbWQtPmNtbmRbNF0sIGNtZC0+Y21uZFs1XSwKIAkJCQkJY21kLT5jbW5kWzZdLCBjbWQtPmNtbmRbN10sCi0JCQkJCWNtZC0+Y21uZFs4XSwgY21kLT5jbW5kWzldKTsKKwkJCQkJY21kLT5jbW5kWzhdLCBjbWQtPmNtbmRbOV0sCisJCQkJCWNtZC0+Y21uZFsxMF0sIGNtZC0+Y21uZFsxMV0sCisJCQkJCWNtZC0+Y21uZFsxMl0sIGNtZC0+Y21uZFsxM10sCisJCQkJCWNtZC0+Y21uZFsxNF0sIGNtZC0+Y21uZFsxNV0pOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTA4Niw3ICsxMTY4LDcgQEAKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIHJlcG9ydHMgYWJvcnQgZmFpbGVkXG4iLCBjcCk7CiAJCWJyZWFrOwogCWNhc2UgQ01EX1VOU09MSUNJVEVEX0FCT1JUOgotCQljbWQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKKwkJY21kLT5yZXN1bHQgPSBESURfUkVTRVQgPDwgMTY7CiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBhYm9ydGVkIGRvIHRvIGFuIHVuc29saWNpdGVkICIKIAkJCSJhYm9ydFxuIiwgY3ApOwogCQlicmVhazsKQEAgLTExMTksOSArMTIwMSwxMSBAQAogCXNoLT5tYXhfY21kX2xlbiA9IE1BWF9DT01NQU5EX1NJWkU7CiAJc2gtPm1heF9sdW4gPSBIUFNBX01BWF9MVU47CiAJc2gtPm1heF9pZCA9IEhQU0FfTUFYX0xVTjsKKwlzaC0+Y2FuX3F1ZXVlID0gaC0+bnJfY21kczsKKwlzaC0+Y21kX3Blcl9sdW4gPSBoLT5ucl9jbWRzOwogCWgtPnNjc2lfaG9zdCA9IHNoOwogCXNoLT5ob3N0ZGF0YVswXSA9ICh1bnNpZ25lZCBsb25nKSBoOwotCXNoLT5pcnEgPSBoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF07CisJc2gtPmlycSA9IGgtPmludHJbUEVSRl9NT0RFX0lOVF07CiAJc2gtPnVuaXF1ZV9pZCA9IHNoLT5pcnE7CiAJZXJyb3IgPSBzY3NpX2FkZF9ob3N0KHNoLCAmaC0+cGRldi0+ZGV2KTsKIAlpZiAoZXJyb3IpCkBAIC0xMTMzLDExICsxMjE3LDExIEBACiAJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiaHBzYV9zY3NpX2RldGVjdDogc2NzaV9hZGRfaG9zdCIKIAkJIiBmYWlsZWQgZm9yIGNvbnRyb2xsZXIgJWRcbiIsIGgtPmN0bHIpOwogCXNjc2lfaG9zdF9wdXQoc2gpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gZXJyb3I7CiAgZmFpbDoKIAlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX3Njc2lfZGV0ZWN0OiBzY3NpX2hvc3RfYWxsb2MiCiAJCSIgZmFpbGVkIGZvciBjb250cm9sbGVyICVkXG4iLCBoLT5jdGxyKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIGhwc2FfcGNpX3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMTE2MCw3ICsxMjQ0LDcgQEAKIAkJc2l6ZV90IGJ1ZmxlbiwKIAkJaW50IGRhdGFfZGlyZWN0aW9uKQogewotCV9fdTY0IGFkZHI2NDsKKwl1NjQgYWRkcjY0OwogCiAJaWYgKGJ1ZmxlbiA9PSAwIHx8IGRhdGFfZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkgewogCQljcC0+SGVhZGVyLlNHTGlzdCA9IDA7CkBAIC0xMTY4LDE0ICsxMjUyLDE0IEBACiAJCXJldHVybjsKIAl9CiAKLQlhZGRyNjQgPSAoX191NjQpIHBjaV9tYXBfc2luZ2xlKHBkZXYsIGJ1ZiwgYnVmbGVuLCBkYXRhX2RpcmVjdGlvbik7CisJYWRkcjY0ID0gKHU2NCkgcGNpX21hcF9zaW5nbGUocGRldiwgYnVmLCBidWZsZW4sIGRhdGFfZGlyZWN0aW9uKTsKIAljcC0+U0dbMF0uQWRkci5sb3dlciA9Ci0JICAoX191MzIpIChhZGRyNjQgJiAoX191NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7CisJICAodTMyKSAoYWRkcjY0ICYgKHU2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKIAljcC0+U0dbMF0uQWRkci51cHBlciA9Ci0JICAoX191MzIpICgoYWRkcjY0ID4+IDMyKSAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkgICh1MzIpICgoYWRkcjY0ID4+IDMyKSAmICh1NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7CiAJY3AtPlNHWzBdLkxlbiA9IGJ1ZmxlbjsKLQljcC0+SGVhZGVyLlNHTGlzdCA9IChfX3U4KSAxOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCi0JY3AtPkhlYWRlci5TR1RvdGFsID0gKF9fdTE2KSAxOyAvKiB0b3RhbCBzZ3MgaW4gdGhpcyBjbWQgbGlzdCAqLworCWNwLT5IZWFkZXIuU0dMaXN0ID0gKHU4KSAxOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCisJY3AtPkhlYWRlci5TR1RvdGFsID0gKHUxNikgMTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhwc2Ffc2NzaV9kb19zaW1wbGVfY21kX2NvcmUoc3RydWN0IGN0bHJfaW5mbyAqaCwKQEAgLTEyNzQsNyArMTM1OCw3IEBACiAKIAlpZiAoYyA9PSBOVUxMKSB7CQkJLyogdHJvdWJsZS4uLiAqLwogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY21kX3NwZWNpYWxfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWZpbGxfY21kKGMsIEhQU0FfSU5RVUlSWSwgaCwgYnVmLCBidWZzaXplLCBwYWdlLCBzY3NpM2FkZHIsIFRZUEVfQ01EKTsKQEAgLTEzNjYsOSArMTQ1MCw4IEBACiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImNtZF9zcGVjaWFsX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQotCW1lbXNldCgmc2NzaTNhZGRyWzBdLCAwLCA4KTsgLyogYWRkcmVzcyB0aGUgY29udHJvbGxlciAqLwotCisJLyogYWRkcmVzcyB0aGUgY29udHJvbGxlciAqLworCW1lbXNldChzY3NpM2FkZHIsIDAsIHNpemVvZihzY3NpM2FkZHIpKTsKIAlmaWxsX2NtZChjLCBsb2dpY2FsID8gSFBTQV9SRVBPUlRfTE9HIDogSFBTQV9SRVBPUlRfUEhZUywgaCwKIAkJYnVmLCBidWZzaXplLCAwLCBzY3NpM2FkZHIsIFRZUEVfQ01EKTsKIAlpZiAoZXh0ZW5kZWRfcmVzcG9uc2UpCkBAIC0xNDA5LDEzICsxNDkyLDEyIEBACiAJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSwgc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqdGhpc19kZXZpY2UpCiB7CiAjZGVmaW5lIE9CRFJfVEFQRV9JTlFfU0laRSA0OQotCXVuc2lnbmVkIGNoYXIgKmlucV9idWZmID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICppbnFfYnVmZjsKIAotCWlucV9idWZmID0ga21hbGxvYyhPQkRSX1RBUEVfSU5RX1NJWkUsIEdGUF9LRVJORUwpOworCWlucV9idWZmID0ga3phbGxvYyhPQkRSX1RBUEVfSU5RX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghaW5xX2J1ZmYpCiAJCWdvdG8gYmFpbF9vdXQ7CiAKLQltZW1zZXQoaW5xX2J1ZmYsIDAsIE9CRFJfVEFQRV9JTlFfU0laRSk7CiAJLyogRG8gYW4gaW5xdWlyeSB0byB0aGUgZGV2aWNlIHRvIHNlZSB3aGF0IGl0IGlzLiAqLwogCWlmIChocHNhX3Njc2lfZG9faW5xdWlyeShoLCBzY3NpM2FkZHIsIDAsIGlucV9idWZmLAogCQkodW5zaWduZWQgY2hhcikgT0JEUl9UQVBFX0lOUV9TSVpFKSAhPSAwKSB7CkBAIC0xNDg1LDMyICsxNTY3LDUxIEBACiAgKiBpbiBocHNhX2ZpbmRfdGFyZ2V0X2x1biwgY2FsbGVkIGJ5IGhwc2Ffc2NzaV9hZGRfZW50cnkuKQogICovCiBzdGF0aWMgdm9pZCBmaWd1cmVfYnVzX3RhcmdldF9sdW4oc3RydWN0IGN0bHJfaW5mbyAqaCwKLQlfX3U4ICpsdW5hZGRyYnl0ZXMsIGludCAqYnVzLCBpbnQgKnRhcmdldCwgaW50ICpsdW4sCisJdTggKmx1bmFkZHJieXRlcywgaW50ICpidXMsIGludCAqdGFyZ2V0LCBpbnQgKmx1biwKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXZpY2UpCiB7Ci0KLQlfX3UzMiBsdW5pZDsKKwl1MzIgbHVuaWQ7CiAKIAlpZiAoaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKGx1bmFkZHJieXRlcykpIHsKIAkJLyogbG9naWNhbCBkZXZpY2UgKi8KLQkJbWVtY3B5KCZsdW5pZCwgbHVuYWRkcmJ5dGVzLCBzaXplb2YobHVuaWQpKTsKLQkJbHVuaWQgPSBsZTMyX3RvX2NwdShsdW5pZCk7Ci0KLQkJaWYgKGlzX21zYTJ4eHgoaCwgZGV2aWNlKSkgewotCQkJKmJ1cyA9IDE7Ci0JCQkqdGFyZ2V0ID0gKGx1bmlkID4+IDE2KSAmIDB4M2ZmZjsKLQkJCSpsdW4gPSBsdW5pZCAmIDB4MDBmZjsKLQkJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KGlzX3Njc2lfcmV2XzUoaCkpKSB7CisJCQkvKiBwMTIxMG0sIGxvZ2ljYWwgZHJpdmVzIGx1biBhc3NpZ25tZW50cworCQkJICogbWF0Y2ggU0NTSSBSRVBPUlQgTFVOUyBkYXRhLgorCQkJICovCisJCQlsdW5pZCA9IGxlMzJfdG9fY3B1KCooKF9fbGUzMiAqKSBsdW5hZGRyYnl0ZXMpKTsKIAkJCSpidXMgPSAwOwotCQkJKmx1biA9IDA7Ci0JCQkqdGFyZ2V0ID0gbHVuaWQgJiAweDNmZmY7CisJCQkqdGFyZ2V0ID0gMDsKKwkJCSpsdW4gPSAobHVuaWQgJiAweDNmZmYpICsgMTsKKwkJfSBlbHNlIHsKKwkJCS8qIG5vdCBwMTIxMG0uLi4gKi8KKwkJCWx1bmlkID0gbGUzMl90b19jcHUoKigoX19sZTMyICopIGx1bmFkZHJieXRlcykpOworCQkJaWYgKGlzX21zYTJ4eHgoaCwgZGV2aWNlKSkgeworCQkJCS8qIG1zYTJ4eHggd2F5LCBwdXQgbG9naWNhbHMgb24gYnVzIDEKKwkJCQkgKiBhbmQgbWF0Y2ggdGFyZ2V0L2x1biBudW1iZXJzIGJveAorCQkJCSAqIHJlcG9ydHMuCisJCQkJICovCisJCQkJKmJ1cyA9IDE7CisJCQkJKnRhcmdldCA9IChsdW5pZCA+PiAxNikgJiAweDNmZmY7CisJCQkJKmx1biA9IGx1bmlkICYgMHgwMGZmOworCQkJfSBlbHNlIHsKKwkJCQkvKiBUcmFkaXRpb25hbCBzbWFydCBhcnJheSB3YXkuICovCisJCQkJKmJ1cyA9IDA7CisJCQkJKmx1biA9IDA7CisJCQkJKnRhcmdldCA9IGx1bmlkICYgMHgzZmZmOworCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJLyogcGh5c2ljYWwgZGV2aWNlICovCiAJCWlmIChpc19oYmFfbHVuaWQobHVuYWRkcmJ5dGVzKSkKLQkJCSpidXMgPSAzOworCQkJaWYgKHVubGlrZWx5KGlzX3Njc2lfcmV2XzUoaCkpKSB7CisJCQkJKmJ1cyA9IDA7IC8qIHB1dCBwMTIxMG0gY3RsciBhdCAwLDAsMCAqLworCQkJCSp0YXJnZXQgPSAwOworCQkJCSpsdW4gPSAwOworCQkJCXJldHVybjsKKwkJCX0gZWxzZQorCQkJCSpidXMgPSAzOyAvKiB0cmFkaXRpb25hbCBzbWFydGFycmF5ICovCiAJCWVsc2UKLQkJCSpidXMgPSAyOworCQkJKmJ1cyA9IDI7IC8qIHBoeXNpY2FsIGRpc2sgKi8KIAkJKnRhcmdldCA9IC0xOwogCQkqbHVuID0gLTE7IC8qIHdlIHdpbGwgZmlsbCB0aGVzZSBpbiBsYXRlci4gKi8KIAl9CkBAIC0xNTI5LDcgKzE2MzAsNyBAQAogICovCiBzdGF0aWMgaW50IGFkZF9tc2EyeHh4X2VuY2xvc3VyZV9kZXZpY2Uoc3RydWN0IGN0bHJfaW5mbyAqaCwKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0bXBkZXZpY2UsCi0Jc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqdGhpc19kZXZpY2UsIF9fdTggKmx1bmFkZHJieXRlcywKKwlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0aGlzX2RldmljZSwgdTggKmx1bmFkZHJieXRlcywKIAlpbnQgYnVzLCBpbnQgdGFyZ2V0LCBpbnQgbHVuLCB1bnNpZ25lZCBsb25nIGx1bnplcm9iaXRzW10sCiAJaW50ICpubXNhMnh4eF9lbmNsb3N1cmVzKQogewpAQCAtMTU1MCw2ICsxNjUxLDkgQEAKIAlpZiAoaXNfaGJhX2x1bmlkKHNjc2kzYWRkcikpCiAJCXJldHVybiAwOyAvKiBEb24ndCBhZGQgdGhlIFJBSUQgY29udHJvbGxlciBoZXJlLiAqLwogCisJaWYgKGlzX3Njc2lfcmV2XzUoaCkpCisJCXJldHVybiAwOyAvKiBwMTIxMG0gZG9lc24ndCBuZWVkIHRvIGRvIHRoaXMuICovCisKICNkZWZpbmUgTUFYX01TQTJYWFhfRU5DTE9TVVJFUyAzMgogCWlmICgqbm1zYTJ4eHhfZW5jbG9zdXJlcyA+PSBNQVhfTVNBMlhYWF9FTkNMT1NVUkVTKSB7CiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJNYXhpbXVtIG51bWJlciBvZiBNU0EyWFhYICIKQEAgLTE1NzYsMTggKzE2ODAsMTQgQEAKICAqLwogc3RhdGljIGludCBocHNhX2dhdGhlcl9sdW5faW5mbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCWludCByZXBvcnRsdW5zaXplLAotCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpwaHlzZGV2LCBfX3UzMiAqbnBoeXNpY2FscywKLQlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqbG9nZGV2LCBfX3UzMiAqbmxvZ2ljYWxzKQorCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpwaHlzZGV2LCB1MzIgKm5waHlzaWNhbHMsCisJc3RydWN0IFJlcG9ydExVTmRhdGEgKmxvZ2RldiwgdTMyICpubG9naWNhbHMpCiB7CiAJaWYgKGhwc2Ffc2NzaV9kb19yZXBvcnRfcGh5c19sdW5zKGgsIHBoeXNkZXYsIHJlcG9ydGx1bnNpemUsIDApKSB7CiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgInJlcG9ydCBwaHlzaWNhbCBMVU5zIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCW1lbWNweShucGh5c2ljYWxzLCAmcGh5c2Rldi0+TFVOTGlzdExlbmd0aFswXSwgc2l6ZW9mKCpucGh5c2ljYWxzKSk7Ci0JKm5waHlzaWNhbHMgPSBiZTMyX3RvX2NwdSgqbnBoeXNpY2FscykgLyA4OwotI2lmZGVmIERFQlVHCi0JZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIm51bWJlciBvZiBwaHlzaWNhbCBsdW5zIGlzICVkXG4iLCAqbnBoeXNpY2Fscyk7Ci0jZW5kaWYKKwkqbnBoeXNpY2FscyA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKXBoeXNkZXYtPkxVTkxpc3RMZW5ndGgpKSAvIDg7CiAJaWYgKCpucGh5c2ljYWxzID4gSFBTQV9NQVhfUEhZU19MVU4pIHsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIm1heGltdW0gcGh5c2ljYWwgTFVOcyAoJWQpIGV4Y2VlZGVkLiIKIAkJCSIgICVkIExVTnMgaWdub3JlZC5cbiIsIEhQU0FfTUFYX1BIWVNfTFVOLApAQCAtMTU5OCwxMSArMTY5OCw3IEBACiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgInJlcG9ydCBsb2dpY2FsIExVTnMgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JbWVtY3B5KG5sb2dpY2FscywgJmxvZ2Rldi0+TFVOTGlzdExlbmd0aFswXSwgc2l6ZW9mKCpubG9naWNhbHMpKTsKLQkqbmxvZ2ljYWxzID0gYmUzMl90b19jcHUoKm5sb2dpY2FscykgLyA4OwotI2lmZGVmIERFQlVHCi0JZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIm51bWJlciBvZiBsb2dpY2FsIGx1bnMgaXMgJWRcbiIsICpubG9naWNhbHMpOwotI2VuZGlmCisJKm5sb2dpY2FscyA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSBsb2dkZXYtPkxVTkxpc3RMZW5ndGgpKSAvIDg7CiAJLyogUmVqZWN0IExvZ2ljYWxzIGluIGV4Y2VzcyBvZiBvdXIgbWF4IGNhcGFiaWxpdHkuICovCiAJaWYgKCpubG9naWNhbHMgPiBIUFNBX01BWF9MVU4pIHsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKQEAgLTE2MjEsNiArMTcxNywzMSBAQAogCXJldHVybiAwOwogfQogCit1OCAqZmlndXJlX2x1bmFkZHJieXRlcyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgcmFpZF9jdGxyX3Bvc2l0aW9uLCBpbnQgaSwKKwlpbnQgbnBoeXNpY2FscywgaW50IG5sb2dpY2Fscywgc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXZfbGlzdCwKKwlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqbG9nZGV2X2xpc3QpCit7CisJLyogSGVscGVyIGZ1bmN0aW9uLCBmaWd1cmUgb3V0IHdoZXJlIHRoZSBMVU4gSUQgaW5mbyBpcyBjb21pbmcgZnJvbQorCSAqIGdpdmVuIGluZGV4IGksIGxpc3RzIG9mIHBoeXNpY2FsIGFuZCBsb2dpY2FsIGRldmljZXMsIHdoZXJlIGluCisJICogdGhlIGxpc3QgdGhlIHJhaWQgY29udHJvbGxlciBpcyBzdXBwb3NlZCB0byBhcHBlYXIgKGZpcnN0IG9yIGxhc3QpCisJICovCisKKwlpbnQgbG9naWNhbHNfc3RhcnQgPSBucGh5c2ljYWxzICsgKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKTsKKwlpbnQgbGFzdF9kZXZpY2UgPSBucGh5c2ljYWxzICsgbmxvZ2ljYWxzICsgKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKTsKKworCWlmIChpID09IHJhaWRfY3Rscl9wb3NpdGlvbikKKwkJcmV0dXJuIFJBSURfQ1RMUl9MVU5JRDsKKworCWlmIChpIDwgbG9naWNhbHNfc3RhcnQpCisJCXJldHVybiAmcGh5c2Rldl9saXN0LT5MVU5baSAtIChyYWlkX2N0bHJfcG9zaXRpb24gPT0gMCldWzBdOworCisJaWYgKGkgPCBsYXN0X2RldmljZSkKKwkJcmV0dXJuICZsb2dkZXZfbGlzdC0+TFVOW2kgLSBucGh5c2ljYWxzIC0KKwkJCShyYWlkX2N0bHJfcG9zaXRpb24gPT0gMCldWzBdOworCUJVRygpOworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9pZCBocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGhvc3RubykKIHsKIAkvKiB0aGUgaWRlYSBoZXJlIGlzIHdlIGNvdWxkIGdldCBub3RpZmllZApAQCAtMTYzNiwxNCArMTc1NywxNSBAQAogCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpwaHlzZGV2X2xpc3QgPSBOVUxMOwogCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXZfbGlzdCA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqaW5xX2J1ZmYgPSBOVUxMOwotCV9fdTMyIG5waHlzaWNhbHMgPSAwOwotCV9fdTMyIG5sb2dpY2FscyA9IDA7Ci0JX191MzIgbmRldl9hbGxvY2F0ZWQgPSAwOworCXUzMiBucGh5c2ljYWxzID0gMDsKKwl1MzIgbmxvZ2ljYWxzID0gMDsKKwl1MzIgbmRldl9hbGxvY2F0ZWQgPSAwOwogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKipjdXJyZW50c2QsICp0aGlzX2RldmljZSwgKnRtcGRldmljZTsKIAlpbnQgbmN1cnJlbnQgPSAwOwogCWludCByZXBvcnRsdW5zaXplID0gc2l6ZW9mKCpwaHlzZGV2X2xpc3QpICsgSFBTQV9NQVhfUEhZU19MVU4gKiA4OwogCWludCBpLCBubXNhMnh4eF9lbmNsb3N1cmVzLCBuZGV2c190b19hbGxvY2F0ZTsKIAlpbnQgYnVzLCB0YXJnZXQsIGx1bjsKKwlpbnQgcmFpZF9jdGxyX3Bvc2l0aW9uOwogCURFQ0xBUkVfQklUTUFQKGx1bnplcm9iaXRzLCBIUFNBX01BWF9UQVJHRVRTX1BFUl9DVExSKTsKIAogCWN1cnJlbnRzZCA9IGt6YWxsb2Moc2l6ZW9mKCpjdXJyZW50c2QpICogSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEsCkBAIC0xNjgxLDIzICsxODAzLDIyIEBACiAJCW5kZXZfYWxsb2NhdGVkKys7CiAJfQogCisJaWYgKHVubGlrZWx5KGlzX3Njc2lfcmV2XzUoaCkpKQorCQlyYWlkX2N0bHJfcG9zaXRpb24gPSAwOworCWVsc2UKKwkJcmFpZF9jdGxyX3Bvc2l0aW9uID0gbnBoeXNpY2FscyArIG5sb2dpY2FsczsKKwogCS8qIGFkanVzdCBvdXIgdGFibGUgb2YgZGV2aWNlcyAqLwogCW5tc2EyeHh4X2VuY2xvc3VyZXMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBucGh5c2ljYWxzICsgbmxvZ2ljYWxzICsgMTsgaSsrKSB7Ci0JCV9fdTggKmx1bmFkZHJieXRlczsKKwkJdTggKmx1bmFkZHJieXRlczsKIAogCQkvKiBGaWd1cmUgb3V0IHdoZXJlIHRoZSBMVU4gSUQgaW5mbyBpcyBjb21pbmcgZnJvbSAqLwotCQlpZiAoaSA8IG5waHlzaWNhbHMpCi0JCQlsdW5hZGRyYnl0ZXMgPSAmcGh5c2Rldl9saXN0LT5MVU5baV1bMF07Ci0JCWVsc2UKLQkJCWlmIChpIDwgbnBoeXNpY2FscyArIG5sb2dpY2FscykKLQkJCQlsdW5hZGRyYnl0ZXMgPQotCQkJCQkmbG9nZGV2X2xpc3QtPkxVTltpLW5waHlzaWNhbHNdWzBdOwotCQkJZWxzZSAvKiBqYW0gaW4gdGhlIFJBSUQgY29udHJvbGxlciBhdCB0aGUgZW5kICovCi0JCQkJbHVuYWRkcmJ5dGVzID0gUkFJRF9DVExSX0xVTklEOwotCisJCWx1bmFkZHJieXRlcyA9IGZpZ3VyZV9sdW5hZGRyYnl0ZXMoaCwgcmFpZF9jdGxyX3Bvc2l0aW9uLAorCQkJaSwgbnBoeXNpY2FscywgbmxvZ2ljYWxzLCBwaHlzZGV2X2xpc3QsIGxvZ2Rldl9saXN0KTsKIAkJLyogc2tpcCBtYXNrZWQgcGh5c2ljYWwgZGV2aWNlcy4gKi8KLQkJaWYgKGx1bmFkZHJieXRlc1szXSAmIDB4QzAgJiYgaSA8IG5waHlzaWNhbHMpCisJCWlmIChsdW5hZGRyYnl0ZXNbM10gJiAweEMwICYmCisJCQlpIDwgbnBoeXNpY2FscyArIChyYWlkX2N0bHJfcG9zaXRpb24gPT0gMCkpCiAJCQljb250aW51ZTsKIAogCQkvKiBHZXQgZGV2aWNlIHR5cGUsIHZlbmRvciwgbW9kZWwsIGRldmljZSBpZCAqLwpAQCAtMTc3Nyw3ICsxODk4LDYgQEAKIAlrZnJlZShpbnFfYnVmZik7CiAJa2ZyZWUocGh5c2Rldl9saXN0KTsKIAlrZnJlZShsb2dkZXZfbGlzdCk7Ci0JcmV0dXJuOwogfQogCiAvKiBocHNhX3NjYXR0ZXJfZ2F0aGVyIHRha2VzIGEgc3RydWN0IHNjc2lfY21uZCwgKGNtZCksIGFuZCBkb2VzIHRoZSBwY2kKQEAgLTE3OTAsNyArMTkxMCw3IEBACiB7CiAJdW5zaWduZWQgaW50IGxlbjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCV9fdTY0IGFkZHI2NDsKKwl1NjQgYWRkcjY0OwogCWludCB1c2Vfc2csIGk7CiAKIAlCVUdfT04oc2NzaV9zZ19jb3VudChjbWQpID4gTUFYU0dFTlRSSUVTKTsKQEAgLTE4MDMsMjAgKzE5MjMsMjAgQEAKIAkJZ290byBzZ2xpc3RfZmluaXNoZWQ7CiAKIAlzY3NpX2Zvcl9lYWNoX3NnKGNtZCwgc2csIHVzZV9zZywgaSkgewotCQlhZGRyNjQgPSAoX191NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJYWRkcjY0ID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCQlsZW4gID0gc2dfZG1hX2xlbihzZyk7CiAJCWNwLT5TR1tpXS5BZGRyLmxvd2VyID0KLQkJCShfX3UzMikgKGFkZHI2NCAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkJCSh1MzIpIChhZGRyNjQgJiAodTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwogCQljcC0+U0dbaV0uQWRkci51cHBlciA9Ci0JCQkoX191MzIpICgoYWRkcjY0ID4+IDMyKSAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkJCSh1MzIpICgoYWRkcjY0ID4+IDMyKSAmICh1NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7CiAJCWNwLT5TR1tpXS5MZW4gPSBsZW47CiAJCWNwLT5TR1tpXS5FeHQgPSAwOyAgLyogd2UgYXJlIG5vdCBjaGFpbmluZyAqLwogCX0KIAogc2dsaXN0X2ZpbmlzaGVkOgogCi0JY3AtPkhlYWRlci5TR0xpc3QgPSAoX191OCkgdXNlX3NnOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCi0JY3AtPkhlYWRlci5TR1RvdGFsID0gKF9fdTE2KSB1c2Vfc2c7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCisJY3AtPkhlYWRlci5TR0xpc3QgPSAodTgpIHVzZV9zZzsgICAvKiBuby4gU0dzIGNvbnRpZyBpbiB0aGlzIGNtZCAqLworCWNwLT5IZWFkZXIuU0dUb3RhbCA9ICh1MTYpIHVzZV9zZzsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg2MCw3ICsxOTgwLDggQEAKIAljLT5zY3NpX2NtZCA9IGNtZDsKIAljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7ICAvKiB1bnVzZWQgaW4gc2ltcGxlIG1vZGUgKi8KIAltZW1jcHkoJmMtPkhlYWRlci5MVU4uTHVuQWRkckJ5dGVzWzBdLCAmc2NzaTNhZGRyWzBdLCA4KTsKLQljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsgIC8qIFVzZSBrLiBhZGRyZXNzIG9mIGNtZCBhcyB0YWcgKi8KKwljLT5IZWFkZXIuVGFnLmxvd2VyID0gKGMtPmNtZGluZGV4IDw8IERJUkVDVF9MT09LVVBfU0hJRlQpOworCWMtPkhlYWRlci5UYWcubG93ZXIgfD0gRElSRUNUX0xPT0tVUF9CSVQ7CiAKIAkvKiBGaWxsIGluIHRoZSByZXF1ZXN0IGJsb2NrLi4uICovCiAKQEAgLTE5MTQsNiArMjAzNSw0OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBocHNhX3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqc2gpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHNob3N0X3RvX2hiYShzaCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHdhaXQgdW50aWwgYW55IHNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcyBpcyBmaW5pc2hlZC4gKi8KKwl3aGlsZSAoMSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7CisJCWlmIChoLT5zY2FuX2ZpbmlzaGVkKQorCQkJYnJlYWs7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCQl3YWl0X2V2ZW50KGgtPnNjYW5fd2FpdF9xdWV1ZSwgaC0+c2Nhbl9maW5pc2hlZCk7CisJCS8qIE5vdGU6IFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgYSByYWNlIGJldHdlZW4gdGhpcworCQkgKiB0aHJlYWQgYW5kIGRyaXZlciB1bmxvYWQgYmVjYXVzZSB0aGUgbWlkbGF5ZXIgd2lsbAorCQkgKiBoYXZlIGluY3JlbWVudGVkIHRoZSByZWZlcmVuY2UgY291bnQsIHNvIHVubG9hZCB3b24ndAorCQkgKiBoYXBwZW4gaWYgd2UncmUgaW4gaGVyZS4KKwkJICovCisJfQorCWgtPnNjYW5fZmluaXNoZWQgPSAwOyAvKiBtYXJrIHNjYW4gYXMgaW4gcHJvZ3Jlc3MgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5zY2FuX2xvY2ssIGZsYWdzKTsKKworCWhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhoLCBoLT5zY3NpX2hvc3QtPmhvc3Rfbm8pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCWgtPnNjYW5fZmluaXNoZWQgPSAxOyAvKiBtYXJrIHNjYW4gYXMgZmluaXNoZWQuICovCisJd2FrZV91cF9hbGwoJmgtPnNjYW5fd2FpdF9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaHBzYV9zY2FuX2ZpbmlzaGVkKHN0cnVjdCBTY3NpX0hvc3QgKnNoLAorCXVuc2lnbmVkIGxvbmcgZWxhcHNlZF90aW1lKQoreworCXN0cnVjdCBjdGxyX2luZm8gKmggPSBzaG9zdF90b19oYmEoc2gpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZpbmlzaGVkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCWZpbmlzaGVkID0gaC0+c2Nhbl9maW5pc2hlZDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5zY2FuX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZmluaXNoZWQ7Cit9CisKIHN0YXRpYyB2b2lkIGhwc2FfdW5yZWdpc3Rlcl9zY3NpKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJLyogd2UgYXJlIGJlaW5nIGZvcmNpYmx5IHVubG9hZGVkLCBhbmQgbWF5IG5vdCByZWZ1c2UuICovCkBAIC0xOTI2LDcgKzIwODksNiBAQAogewogCWludCByYzsKIAotCWhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhoLCAtMSk7CiAJcmMgPSBocHNhX3Njc2lfZGV0ZWN0KGgpOwogCWlmIChyYyAhPSAwKQogCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX3JlZ2lzdGVyX3Njc2k6IGZhaWxlZCIKQEAgLTIwMDMsMTQgKzIxNjUsMTQgQEAKIAloID0gc2Rldl90b19oYmEoc2NzaWNtZC0+ZGV2aWNlKTsKIAlpZiAoaCA9PSBOVUxMKSAvKiBwYXJhbm9pYSAqLwogCQlyZXR1cm4gRkFJTEVEOwotCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJyZXNldHRpbmcgZHJpdmVcbiIpOwotCiAJZGV2ID0gc2NzaWNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlpZiAoIWRldikgewogCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX2VoX2RldmljZV9yZXNldF9oYW5kbGVyOiAiCiAJCQkiZGV2aWNlIGxvb2t1cCBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIEZBSUxFRDsKIAl9CisJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJlc2V0dGluZyBkZXZpY2UgJWQ6JWQ6JWQ6JWRcbiIsCisJCWgtPnNjc2lfaG9zdC0+aG9zdF9ubywgZGV2LT5idXMsIGRldi0+dGFyZ2V0LCBkZXYtPmx1bik7CiAJLyogc2VuZCBhIHJlc2V0IHRvIHRoZSBTQ1NJIExVTiB3aGljaCB0aGUgY29tbWFuZCB3YXMgc2VudCB0byAqLwogCXJjID0gaHBzYV9zZW5kX3Jlc2V0KGgsIGRldi0+c2NzaTNhZGRyKTsKIAlpZiAocmMgPT0gMCAmJiB3YWl0X2Zvcl9kZXZpY2VfdG9fYmVjb21lX3JlYWR5KGgsIGRldi0+c2NzaTNhZGRyKSA9PSAwKQpAQCAtMjA1Myw4ICsyMjE1LDggQEAKIAljLT5jbWRpbmRleCA9IGk7CiAKIAlJTklUX0hMSVNUX05PREUoJmMtPmxpc3QpOwotCWMtPmJ1c2FkZHIgPSAoX191MzIpIGNtZF9kbWFfaGFuZGxlOwotCXRlbXA2NC52YWwgPSAoX191NjQpIGVycl9kbWFfaGFuZGxlOworCWMtPmJ1c2FkZHIgPSAodTMyKSBjbWRfZG1hX2hhbmRsZTsKKwl0ZW1wNjQudmFsID0gKHU2NCkgZXJyX2RtYV9oYW5kbGU7CiAJYy0+RXJyRGVzYy5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwogCWMtPkVyckRlc2MuQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKIAljLT5FcnJEZXNjLkxlbiA9IHNpemVvZigqYy0+ZXJyX2luZm8pOwpAQCAtMjA5MSw4ICsyMjUzLDggQEAKIAltZW1zZXQoYy0+ZXJyX2luZm8sIDAsIHNpemVvZigqYy0+ZXJyX2luZm8pKTsKIAogCUlOSVRfSExJU1RfTk9ERSgmYy0+bGlzdCk7Ci0JYy0+YnVzYWRkciA9IChfX3UzMikgY21kX2RtYV9oYW5kbGU7Ci0JdGVtcDY0LnZhbCA9IChfX3U2NCkgZXJyX2RtYV9oYW5kbGU7CisJYy0+YnVzYWRkciA9ICh1MzIpIGNtZF9kbWFfaGFuZGxlOworCXRlbXA2NC52YWwgPSAodTY0KSBlcnJfZG1hX2hhbmRsZTsKIAljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CiAJYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwogCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKCpjLT5lcnJfaW5mbyk7CkBAIC0yMTI1LDUwICsyMjg3LDYgQEAKIAogI2lmZGVmIENPTkZJR19DT01QQVQKIAotc3RhdGljIGludCBkb19pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWludCByZXQ7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IGhwc2FfaW9jdGwoZGV2LCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpOwotc3RhdGljIGludCBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LAotCWludCBjbWQsIHZvaWQgKmFyZyk7Ci0KLXN0YXRpYyBpbnQgaHBzYV9jb21wYXRfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQ0NJU1NfR0VUUENJSU5GTzoKLQljYXNlIENDSVNTX0dFVElOVElORk86Ci0JY2FzZSBDQ0lTU19TRVRJTlRJTkZPOgotCWNhc2UgQ0NJU1NfR0VUTk9ERU5BTUU6Ci0JY2FzZSBDQ0lTU19TRVROT0RFTkFNRToKLQljYXNlIENDSVNTX0dFVEhFQVJUQkVBVDoKLQljYXNlIENDSVNTX0dFVEJVU1RZUEVTOgotCWNhc2UgQ0NJU1NfR0VURklSTVZFUjoKLQljYXNlIENDSVNTX0dFVERSSVZWRVI6Ci0JY2FzZSBDQ0lTU19SRVZBTElEVk9MUzoKLQljYXNlIENDSVNTX0RFUkVHRElTSzoKLQljYXNlIENDSVNTX1JFR05FV0RJU0s6Ci0JY2FzZSBDQ0lTU19SRUdORVdEOgotCWNhc2UgQ0NJU1NfUkVTQ0FORElTSzoKLQljYXNlIENDSVNTX0dFVExVTklORk86Ci0JCXJldHVybiBkb19pb2N0bChkZXYsIGNtZCwgYXJnKTsKLQotCWNhc2UgQ0NJU1NfUEFTU1RIUlUzMjoKLQkJcmV0dXJuIGhwc2FfaW9jdGwzMl9wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKLQljYXNlIENDSVNTX0JJR19QQVNTVEhSVTMyOgotCQlyZXR1cm4gaHBzYV9pb2N0bDMyX2JpZ19wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotfQotCiBzdGF0aWMgaW50IGhwc2FfaW9jdGwzMl9wYXNzdGhydShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCUlPQ1RMMzJfQ29tbWFuZF9zdHJ1Y3QgX191c2VyICphcmczMiA9CkBAIC0yMTkzLDcgKzIzMTEsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZG9faW9jdGwoZGV2LCBDQ0lTU19QQVNTVEhSVSwgKHZvaWQgKilwKTsKKwllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfUEFTU1RIUlUsICh2b2lkICopcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAllcnIgfD0gY29weV9pbl91c2VyKCZhcmczMi0+ZXJyb3JfaW5mbywgJnAtPmVycm9yX2luZm8sCkBAIC0yMjMwLDcgKzIzNDgsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZG9faW9jdGwoZGV2LCBDQ0lTU19CSUdfUEFTU1RIUlUsICh2b2lkICopcCk7CisJZXJyID0gaHBzYV9pb2N0bChkZXYsIENDSVNTX0JJR19QQVNTVEhSVSwgKHZvaWQgKilwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWVyciB8PSBjb3B5X2luX3VzZXIoJmFyZzMyLT5lcnJvcl9pbmZvLCAmcC0+ZXJyb3JfaW5mbywKQEAgLTIyMzksNiArMjM1NywzNiBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gZXJyOwogfQorCitzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENDSVNTX0dFVFBDSUlORk86CisJY2FzZSBDQ0lTU19HRVRJTlRJTkZPOgorCWNhc2UgQ0NJU1NfU0VUSU5USU5GTzoKKwljYXNlIENDSVNTX0dFVE5PREVOQU1FOgorCWNhc2UgQ0NJU1NfU0VUTk9ERU5BTUU6CisJY2FzZSBDQ0lTU19HRVRIRUFSVEJFQVQ6CisJY2FzZSBDQ0lTU19HRVRCVVNUWVBFUzoKKwljYXNlIENDSVNTX0dFVEZJUk1WRVI6CisJY2FzZSBDQ0lTU19HRVREUklWVkVSOgorCWNhc2UgQ0NJU1NfUkVWQUxJRFZPTFM6CisJY2FzZSBDQ0lTU19ERVJFR0RJU0s6CisJY2FzZSBDQ0lTU19SRUdORVdESVNLOgorCWNhc2UgQ0NJU1NfUkVHTkVXRDoKKwljYXNlIENDSVNTX1JFU0NBTkRJU0s6CisJY2FzZSBDQ0lTU19HRVRMVU5JTkZPOgorCQlyZXR1cm4gaHBzYV9pb2N0bChkZXYsIGNtZCwgYXJnKTsKKworCWNhc2UgQ0NJU1NfUEFTU1RIUlUzMjoKKwkJcmV0dXJuIGhwc2FfaW9jdGwzMl9wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKKwljYXNlIENDSVNTX0JJR19QQVNTVEhSVTMyOgorCQlyZXR1cm4gaHBzYV9pb2N0bDMyX2JpZ19wYXNzdGhydShkZXYsIGNtZCwgYXJnKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgaHBzYV9nZXRwY2lpbmZvX2lvY3RsKHN0cnVjdCBjdGxyX2luZm8gKmgsIHZvaWQgX191c2VyICphcmdwKQpAQCAtMjM3OCw4ICsyNTI2LDggQEAKIAlCWVRFIHNnX3VzZWQgPSAwOwogCWludCBzdGF0dXMgPSAwOwogCWludCBpOwotCV9fdTMyIGxlZnQ7Ci0JX191MzIgc3o7CisJdTMyIGxlZnQ7CisJdTMyIHN6OwogCUJZVEUgX191c2VyICpkYXRhX3B0cjsKIAogCWlmICghYXJncCkKQEAgLTI1MjcsNyArMjY3NSw3IEBACiAJY2FzZSBDQ0lTU19ERVJFR0RJU0s6CiAJY2FzZSBDQ0lTU19SRUdORVdESVNLOgogCWNhc2UgQ0NJU1NfUkVHTkVXRDoKLQkJaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKGgsIGRldi0+aG9zdC0+aG9zdF9ubyk7CisJCWhwc2Ffc2Nhbl9zdGFydChoLT5zY3NpX2hvc3QpOwogCQlyZXR1cm4gMDsKIAljYXNlIENDSVNTX0dFVFBDSUlORk86CiAJCXJldHVybiBocHNhX2dldHBjaWluZm9faW9jdGwoaCwgYXJncCk7CkBAIC0yNTQyLDggKzI2OTAsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZmlsbF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX3U4IGNtZCwgc3RydWN0IGN0bHJfaW5mbyAqaCwKLQl2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwgX191OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKK3N0YXRpYyB2b2lkIGZpbGxfY21kKHN0cnVjdCBDb21tYW5kTGlzdCAqYywgdTggY21kLCBzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLCB1OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKIAlpbnQgY21kX3R5cGUpCiB7CiAJaW50IHBjaV9kaXIgPSBYRkVSX05PTkU7CkBAIC0yNzEwLDE5ICsyODU4LDIwIEBACiAJcmV0dXJuIGgtPmFjY2Vzcy5jb21tYW5kX2NvbXBsZXRlZChoKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaW50ZXJydXB0X3BlbmRpbmcoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlcnJ1cHRfcGVuZGluZyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewogCXJldHVybiBoLT5hY2Nlc3MuaW50cl9wZW5kaW5nKGgpOwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgaW50ZXJydXB0X25vdF9mb3JfdXMoc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKLQlyZXR1cm4gKChoLT5hY2Nlc3MuaW50cl9wZW5kaW5nKGgpID09IDApIHx8Ci0JCSAoaC0+aW50ZXJydXB0c19lbmFibGVkID09IDApKTsKKwlyZXR1cm4gIShoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKSAmJgorCQkoKGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCkgPT0gMCkgfHwKKwkJKGgtPmludGVycnVwdHNfZW5hYmxlZCA9PSAwKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJhZF90YWcoc3RydWN0IGN0bHJfaW5mbyAqaCwgX191MzIgdGFnX2luZGV4LAotCV9fdTMyIHJhd190YWcpCitzdGF0aWMgaW5saW5lIGludCBiYWRfdGFnKHN0cnVjdCBjdGxyX2luZm8gKmgsIHUzMiB0YWdfaW5kZXgsCisJdTMyIHJhd190YWcpCiB7CiAJaWYgKHVubGlrZWx5KHRhZ19pbmRleCA+PSBoLT5ucl9jbWRzKSkgewogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiYmFkIHRhZyAweCUwOHggaWdub3JlZC5cbiIsIHJhd190YWcpOwpAQCAtMjczMSw3ICsyODgwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZpbmlzaF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX3UzMiByYXdfdGFnKQorc3RhdGljIGlubGluZSB2b2lkIGZpbmlzaF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCB1MzIgcmF3X3RhZykKIHsKIAlyZW1vdmVRKGMpOwogCWlmIChsaWtlbHkoYy0+Y21kX3R5cGUgPT0gQ01EX1NDU0kpKQpAQCAtMjc0MCw0MiArMjg4OSw3OSBAQAogCQljb21wbGV0ZShjLT53YWl0aW5nKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgaHBzYV90YWdfY29udGFpbnNfaW5kZXgodTMyIHRhZykKK3sKKyNkZWZpbmUgRElSRUNUX0xPT0tVUF9CSVQgMHgxMAorCXJldHVybiB0YWcgJiBESVJFQ1RfTE9PS1VQX0JJVDsKK30KKworc3RhdGljIGlubGluZSB1MzIgaHBzYV90YWdfdG9faW5kZXgodTMyIHRhZykKK3sKKyNkZWZpbmUgRElSRUNUX0xPT0tVUF9TSElGVCA1CisJcmV0dXJuIHRhZyA+PiBESVJFQ1RfTE9PS1VQX1NISUZUOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBocHNhX3RhZ19kaXNjYXJkX2Vycm9yX2JpdHModTMyIHRhZykKK3sKKyNkZWZpbmUgSFBTQV9FUlJPUl9CSVRTIDB4MDMKKwlyZXR1cm4gdGFnICYgfkhQU0FfRVJST1JfQklUUzsKK30KKworLyogcHJvY2VzcyBjb21wbGV0aW9uIG9mIGFuIGluZGV4ZWQgKCJkaXJlY3QgbG9va3VwIikgY29tbWFuZCAqLworc3RhdGljIGlubGluZSB1MzIgcHJvY2Vzc19pbmRleGVkX2NtZChzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXUzMiByYXdfdGFnKQoreworCXUzMiB0YWdfaW5kZXg7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCisJdGFnX2luZGV4ID0gaHBzYV90YWdfdG9faW5kZXgocmF3X3RhZyk7CisJaWYgKGJhZF90YWcoaCwgdGFnX2luZGV4LCByYXdfdGFnKSkKKwkJcmV0dXJuIG5leHRfY29tbWFuZChoKTsKKwljID0gaC0+Y21kX3Bvb2wgKyB0YWdfaW5kZXg7CisJZmluaXNoX2NtZChjLCByYXdfdGFnKTsKKwlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOworfQorCisvKiBwcm9jZXNzIGNvbXBsZXRpb24gb2YgYSBub24taW5kZXhlZCBjb21tYW5kICovCitzdGF0aWMgaW5saW5lIHUzMiBwcm9jZXNzX25vbmluZGV4ZWRfY21kKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdTMyIHJhd190YWcpCit7CisJdTMyIHRhZzsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMgPSBOVUxMOworCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CisKKwl0YWcgPSBocHNhX3RhZ19kaXNjYXJkX2Vycm9yX2JpdHMocmF3X3RhZyk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoYywgdG1wLCAmaC0+Y21wUSwgbGlzdCkgeworCQlpZiAoKGMtPmJ1c2FkZHIgJiAweEZGRkZGRkUwKSA9PSAodGFnICYgMHhGRkZGRkZFMCkpIHsKKwkJCWZpbmlzaF9jbWQoYywgcmF3X3RhZyk7CisJCQlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOworCQl9CisJfQorCWJhZF90YWcoaCwgaC0+bnJfY21kcyArIDEsIHJhd190YWcpOworCXJldHVybiBuZXh0X2NvbW1hbmQoaCk7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBjdGxyX2luZm8gKmggPSBkZXZfaWQ7Ci0Jc3RydWN0IENvbW1hbmRMaXN0ICpjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JX191MzIgcmF3X3RhZywgdGFnLCB0YWdfaW5kZXg7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKwl1MzIgcmF3X3RhZzsKIAogCWlmIChpbnRlcnJ1cHRfbm90X2Zvcl91cyhoKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKGludGVycnVwdF9wZW5kaW5nKGgpKSB7Ci0JCXdoaWxlICgocmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCkpICE9IEZJRk9fRU1QVFkpIHsKLQkJCWlmIChsaWtlbHkoSFBTQV9UQUdfQ09OVEFJTlNfSU5ERVgocmF3X3RhZykpKSB7Ci0JCQkJdGFnX2luZGV4ID0gSFBTQV9UQUdfVE9fSU5ERVgocmF3X3RhZyk7Ci0JCQkJaWYgKGJhZF90YWcoaCwgdGFnX2luZGV4LCByYXdfdGFnKSkKLQkJCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJCWMgPSBoLT5jbWRfcG9vbCArIHRhZ19pbmRleDsKLQkJCQlmaW5pc2hfY21kKGMsIHJhd190YWcpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJdGFnID0gSFBTQV9UQUdfRElTQ0FSRF9FUlJPUl9CSVRTKHJhd190YWcpOwotCQkJYyA9IE5VTEw7Ci0JCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjLCB0bXAsICZoLT5jbXBRLCBsaXN0KSB7Ci0JCQkJaWYgKGMtPmJ1c2FkZHIgPT0gdGFnKSB7Ci0JCQkJCWZpbmlzaF9jbWQoYywgcmF3X3RhZyk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQorCXJhd190YWcgPSBnZXRfbmV4dF9jb21wbGV0aW9uKGgpOworCXdoaWxlIChyYXdfdGFnICE9IEZJRk9fRU1QVFkpIHsKKwkJaWYgKGhwc2FfdGFnX2NvbnRhaW5zX2luZGV4KHJhd190YWcpKQorCQkJcmF3X3RhZyA9IHByb2Nlc3NfaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CisJCWVsc2UKKwkJCXJhd190YWcgPSBwcm9jZXNzX25vbmluZGV4ZWRfY21kKGgsIHJhd190YWcpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKiBTZW5kIGEgbWVzc2FnZSBDREIgdG8gdGhlIGZpcm13YXJlLiAqLworLyogU2VuZCBhIG1lc3NhZ2UgQ0RCIHRvIHRoZSBmaXJtd2FydC4gKi8KIHN0YXRpYyBfX2RldmluaXQgaW50IGhwc2FfbWVzc2FnZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgY2hhciBvcGNvZGUsCiAJCQkJCQl1bnNpZ25lZCBjaGFyIHR5cGUpCiB7CkBAIC0yODQxLDcgKzMwMjcsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IEhQU0FfTVNHX1NFTkRfUkVUUllfTElNSVQ7IGkrKykgewogCQl0YWcgPSByZWFkbCh2YWRkciArIFNBNV9SRVBMWV9QT1JUX09GRlNFVCk7Ci0JCWlmIChIUFNBX1RBR19ESVNDQVJEX0VSUk9SX0JJVFModGFnKSA9PSBwYWRkcjMyKQorCQlpZiAoaHBzYV90YWdfZGlzY2FyZF9lcnJvcl9iaXRzKHRhZykgPT0gcGFkZHIzMikKIAkJCWJyZWFrOwogCQltc2xlZXAoSFBTQV9NU0dfU0VORF9SRVRSWV9JTlRFUlZBTF9NU0VDUyk7CiAJfQpAQCAtMzA2Myw3ICszMjQ5LDcgQEAKICAqLwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaHBzYV9pbnRlcnJ1cHRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCQkJCQkgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgX191MzIgYm9hcmRfaWQpCisJCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgYm9hcmRfaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlpbnQgZXJyOwpAQCAtMzEwNywyMiArMzI5MywyMiBAQAogZGVmYXVsdF9pbnRfbW9kZToKICNlbmRpZgkJCQkvKiBDT05GSUdfUENJX01TSSAqLwogCS8qIGlmIHdlIGdldCBoZXJlIHdlJ3JlIGdvaW5nIHRvIHVzZSB0aGUgZGVmYXVsdCBpbnRlcnJ1cHQgbW9kZSAqLwotCWgtPmludHJbU0lNUExFX01PREVfSU5UXSA9IHBkZXYtPmlycTsKLQlyZXR1cm47CisJaC0+aW50cltQRVJGX01PREVfSU5UXSA9IHBkZXYtPmlycTsKIH0KIAogc3RhdGljIGludCBocHNhX3BjaV9pbml0KHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXVzaG9ydCBzdWJzeXN0ZW1fdmVuZG9yX2lkLCBzdWJzeXN0ZW1fZGV2aWNlX2lkLCBjb21tYW5kOwotCV9fdTMyIGJvYXJkX2lkLCBzY3JhdGNocGFkID0gMDsKLQlfX3U2NCBjZmdfb2Zmc2V0OwotCV9fdTMyIGNmZ19iYXNlX2FkZHI7Ci0JX191NjQgY2ZnX2Jhc2VfYWRkcl9pbmRleDsKKwl1MzIgYm9hcmRfaWQsIHNjcmF0Y2hwYWQgPSAwOworCXU2NCBjZmdfb2Zmc2V0OworCXUzMiBjZmdfYmFzZV9hZGRyOworCXU2NCBjZmdfYmFzZV9hZGRyX2luZGV4OworCXUzMiB0cmFuc19vZmZzZXQ7CiAJaW50IGksIHByb2RfaW5kZXgsIGVycjsKIAogCXN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOwogCXN1YnN5c3RlbV9kZXZpY2VfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwotCWJvYXJkX2lkID0gKCgoX191MzIpIChzdWJzeXN0ZW1fZGV2aWNlX2lkIDw8IDE2KSAmIDB4ZmZmZjAwMDApIHwKKwlib2FyZF9pZCA9ICgoKHUzMikgKHN1YnN5c3RlbV9kZXZpY2VfaWQgPDwgMTYpICYgMHhmZmZmMDAwMCkgfAogCQkgICAgc3Vic3lzdGVtX3ZlbmRvcl9pZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm9kdWN0cyk7IGkrKykKQEAgLTMxOTksNyArMzM4NSw3IEBACiAKIAkvKiBnZXQgdGhlIGFkZHJlc3MgaW5kZXggbnVtYmVyICovCiAJY2ZnX2Jhc2VfYWRkciA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X0NUQ0ZHX09GRlNFVCk7Ci0JY2ZnX2Jhc2VfYWRkciAmPSAoX191MzIpIDB4MDAwMGZmZmY7CisJY2ZnX2Jhc2VfYWRkciAmPSAodTMyKSAweDAwMDBmZmZmOwogCWNmZ19iYXNlX2FkZHJfaW5kZXggPSBmaW5kX1BDSV9CQVJfaW5kZXgocGRldiwgY2ZnX2Jhc2VfYWRkcik7CiAJaWYgKGNmZ19iYXNlX2FkZHJfaW5kZXggPT0gLTEpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImNhbm5vdCBmaW5kIGNmZ19iYXNlX2FkZHJfaW5kZXhcbiIpOwpAQCAtMzIxMSwxMSArMzM5NywxNCBAQAogCWgtPmNmZ3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwKIAkJCSAgICAgICBjZmdfYmFzZV9hZGRyX2luZGV4KSArIGNmZ19vZmZzZXQsCiAJCQkJc2l6ZW9mKGgtPmNmZ3RhYmxlKSk7CisJLyogRmluZCBwZXJmb3JtYW50IG1vZGUgdGFibGUuICovCisJdHJhbnNfb2Zmc2V0ID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNNZXRob2RPZmZzZXQpKTsKKwloLT50cmFuc3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwKKwkJCQljZmdfYmFzZV9hZGRyX2luZGV4KStjZmdfb2Zmc2V0K3RyYW5zX29mZnNldCwKKwkJCQlzaXplb2YoKmgtPnRyYW5zdGFibGUpKTsKKwogCWgtPmJvYXJkX2lkID0gYm9hcmRfaWQ7Ci0KLQkvKiBRdWVyeSBjb250cm9sbGVyIGZvciBtYXggc3VwcG9ydGVkIGNvbW1hbmRzOiAqLwotCWgtPm1heF9jb21tYW5kcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPkNtZHNPdXRNYXgpKTsKLQorCWgtPm1heF9jb21tYW5kcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPk1heFBlcmZvcm1hbnRNb2RlQ29tbWFuZHMpKTsKIAloLT5wcm9kdWN0X25hbWUgPSBwcm9kdWN0c1twcm9kX2luZGV4XS5wcm9kdWN0X25hbWU7CiAJaC0+YWNjZXNzID0gKihwcm9kdWN0c1twcm9kX2luZGV4XS5hY2Nlc3MpOwogCS8qIEFsbG93IHJvb20gZm9yIHNvbWUgaW9jdGxzICovCkBAIC0zMjMyLDcgKzM0MjEsNyBAQAogI2lmZGVmIENPTkZJR19YODYKIAl7CiAJCS8qIE5lZWQgdG8gZW5hYmxlIHByZWZldGNoIGluIHRoZSBTQ1NJIGNvcmUgZm9yIDY0MDAgaW4geDg2ICovCi0JCV9fdTMyIHByZWZldGNoOworCQl1MzIgcHJlZmV0Y2g7CiAJCXByZWZldGNoID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+U0NTSV9QcmVmZXRjaCkpOwogCQlwcmVmZXRjaCB8PSAweDEwMDsKIAkJd3JpdGVsKHByZWZldGNoLCAmKGgtPmNmZ3RhYmxlLT5TQ1NJX1ByZWZldGNoKSk7CkBAIC0zMjQ0LDcgKzM0MzMsNyBAQAogCSAqIHBoeXNpY2FsIG1lbW9yeS4KIAkgKi8KIAlpZiAoYm9hcmRfaWQgPT0gMHgzMjI1MTAzQykgewotCQlfX3UzMiBkbWFfcHJlZmV0Y2g7CisJCXUzMiBkbWFfcHJlZmV0Y2g7CiAJCWRtYV9wcmVmZXRjaCA9IHJlYWRsKGgtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKIAkJZG1hX3ByZWZldGNoIHw9IDB4ODAwMDsKIAkJd3JpdGVsKGRtYV9wcmVmZXRjaCwgaC0+dmFkZHIgKyBJMk9fRE1BMV9DRkcpOwpAQCAtMzI4NiwxMCArMzQ3NSwyNiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBocHNhX2hiYV9pbnF1aXJ5KHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJaW50IHJjOworCisjZGVmaW5lIEhCQV9JTlFVSVJZX0JZVEVfQ09VTlQgNjQKKwloLT5oYmFfaW5xdWlyeV9kYXRhID0ga21hbGxvYyhIQkFfSU5RVUlSWV9CWVRFX0NPVU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWgtPmhiYV9pbnF1aXJ5X2RhdGEpCisJCXJldHVybjsKKwlyYyA9IGhwc2Ffc2NzaV9kb19pbnF1aXJ5KGgsIFJBSURfQ1RMUl9MVU5JRCwgMCwKKwkJaC0+aGJhX2lucXVpcnlfZGF0YSwgSEJBX0lOUVVJUllfQllURV9DT1VOVCk7CisJaWYgKHJjICE9IDApIHsKKwkJa2ZyZWUoaC0+aGJhX2lucXVpcnlfZGF0YSk7CisJCWgtPmhiYV9pbnF1aXJ5X2RhdGEgPSBOVUxMOworCX0KK30KKwogc3RhdGljIGludCBfX2RldmluaXQgaHBzYV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgcmM7CiAJaW50IGRhYzsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCkBAIC0zMzE0LDE3ICszNTE5LDIzIEBACiAJCX0KIAl9CiAKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBDb21tYW5kTGlzdCkgJSA4KTsKKwkvKiBDb21tYW5kIHN0cnVjdHVyZXMgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMzItYnl0ZSBib3VuZGFyeSBiZWNhdXNlCisJICogdGhlIDUgbG93ZXIgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgdXNlZCBieSB0aGUgaGFyZHdhcmUuIGFuZCBieQorCSAqIHRoZSBkcml2ZXIuICBTZWUgY29tbWVudHMgaW4gaHBzYS5oIGZvciBtb3JlIGluZm8uCisJICovCisjZGVmaW5lIENPTU1BTkRMSVNUX0FMSUdOTUVOVCAzMgorCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IENvbW1hbmRMaXN0KSAlIENPTU1BTkRMSVNUX0FMSUdOTUVOVCk7CiAJaCA9IGt6YWxsb2Moc2l6ZW9mKCpoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJaC0+YnVzeV9pbml0aWFsaXppbmcgPSAxOwogCUlOSVRfSExJU1RfSEVBRCgmaC0+Y21wUSk7CiAJSU5JVF9ITElTVF9IRUFEKCZoLT5yZXFRKTsKIAltdXRleF9pbml0KCZoLT5idXN5X3NodXR0aW5nX2Rvd24pOwogCWluaXRfY29tcGxldGlvbigmaC0+c2Nhbl93YWl0KTsKLQlpZiAoaHBzYV9wY2lfaW5pdChoLCBwZGV2KSAhPSAwKQorCXJjID0gaHBzYV9wY2lfaW5pdChoLCBwZGV2KTsKKwlpZiAocmMgIT0gMCkKIAkJZ290byBjbGVhbjE7CiAKIAlzcHJpbnRmKGgtPmRldm5hbWUsICJocHNhJWQiLCBudW1iZXJfb2ZfY29udHJvbGxlcnMpOwpAQCAtMzMzMywyNyArMzU0NCwzMiBAQAogCWgtPnBkZXYgPSBwZGV2OwogCiAJLyogY29uZmlndXJlIFBDSSBETUEgc3R1ZmYgKi8KLQlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpCisJcmMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpOworCWlmIChyYyA9PSAwKSB7CiAJCWRhYyA9IDE7Ci0JZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpCi0JCWRhYyA9IDA7Ci0JZWxzZSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGVcbiIpOwotCQlnb3RvIGNsZWFuMTsKKwl9IGVsc2UgeworCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJCWlmIChyYyA9PSAwKSB7CisJCQlkYWMgPSAwOworCQl9IGVsc2UgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7CisJCQlnb3RvIGNsZWFuMTsKKwkJfQogCX0KIAogCS8qIG1ha2Ugc3VyZSB0aGUgYm9hcmQgaW50ZXJydXB0cyBhcmUgb2ZmICovCiAJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09GRik7Ci0JaWYgKHJlcXVlc3RfaXJxKGgtPmludHJbU0lNUExFX01PREVfSU5UXSwgZG9faHBzYV9pbnRyLAotCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBoLT5kZXZuYW1lLCBoKSkgeworCXJjID0gcmVxdWVzdF9pcnEoaC0+aW50cltQRVJGX01PREVfSU5UXSwgZG9faHBzYV9pbnRyLAorCQkJSVJRRl9ESVNBQkxFRCwgaC0+ZGV2bmFtZSwgaCk7CisJaWYgKHJjKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgaXJxICVkIGZvciAlc1xuIiwKLQkJICAgICAgIGgtPmludHJbU0lNUExFX01PREVfSU5UXSwgaC0+ZGV2bmFtZSk7CisJCSAgICAgICBoLT5pbnRyW1BFUkZfTU9ERV9JTlRdLCBoLT5kZXZuYW1lKTsKIAkJZ290byBjbGVhbjI7CiAJfQogCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiA8MHgleD4gYXQgUENJICVzIElSUSAlZCVzIHVzaW5nIERBQ1xuIiwKLQkgICAgICAgaC0+ZGV2bmFtZSwgcGRldi0+ZGV2aWNlLCBwY2lfbmFtZShwZGV2KSwKLQkgICAgICAgaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBkYWMgPyAiIiA6ICIgbm90Iik7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiA8MHgleD4gYXQgSVJRICVkJXMgdXNpbmcgREFDXG4iLAorCSAgICAgICBoLT5kZXZuYW1lLCBwZGV2LT5kZXZpY2UsCisJICAgICAgIGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGRhYyA/ICIiIDogIiBub3QiKTsKIAogCWgtPmNtZF9wb29sX2JpdHMgPQogCSAgICBrbWFsbG9jKCgoaC0+bnJfY21kcyArIEJJVFNfUEVSX0xPTkcgLQpAQCAtMzM2OCw5ICszNTg0LDEzIEBACiAJICAgIHx8IChoLT5jbWRfcG9vbCA9PSBOVUxMKQogCSAgICB8fCAoaC0+ZXJyaW5mb19wb29sID09IE5VTEwpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkiKTsKKwkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGNsZWFuNDsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJmgtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZoLT5zY2FuX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmgtPnNjYW5fd2FpdF9xdWV1ZSk7CisJaC0+c2Nhbl9maW5pc2hlZCA9IDE7IC8qIG5vIHNjYW4gY3VycmVudGx5IGluIHByb2dyZXNzICovCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaCk7CiAJbWVtc2V0KGgtPmNtZF9wb29sX2JpdHMsIDAsCkBAIC0zMzgyLDYgKzM2MDIsOCBAQAogCS8qIFR1cm4gdGhlIGludGVycnVwdHMgb24gc28gd2UgY2FuIHNlcnZpY2UgcmVxdWVzdHMgKi8KIAloLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoLCBIUFNBX0lOVFJfT04pOwogCisJaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShoKTsKKwlocHNhX2hiYV9pbnF1aXJ5KGgpOwogCWhwc2FfcmVnaXN0ZXJfc2NzaShoKTsJLyogaG9vayBvdXJzZWx2ZXMgaW50byBTQ1NJIHN1YnN5c3RlbSAqLwogCWgtPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKIAlyZXR1cm4gMTsKQEAgLTMzOTcsMTIgKzM2MTksMTIgQEAKIAkJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pLAogCQkJICAgIGgtPmVycmluZm9fcG9vbCwKIAkJCSAgICBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSk7Ci0JZnJlZV9pcnEoaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBoKTsKKwlmcmVlX2lycShoLT5pbnRyW1BFUkZfTU9ERV9JTlRdLCBoKTsKIGNsZWFuMjoKIGNsZWFuMToKIAloLT5idXN5X2luaXRpYWxpemluZyA9IDA7CiAJa2ZyZWUoaCk7Ci0JcmV0dXJuIC0xOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgaHBzYV9mbHVzaF9jYWNoZShzdHJ1Y3QgY3Rscl9pbmZvICpoKQpAQCAtMzQ0MSw3ICszNjYzLDcgQEAKIAkgKi8KIAlocHNhX2ZsdXNoX2NhY2hlKGgpOwogCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PRkYpOwotCWZyZWVfaXJxKGgtPmludHJbMl0sIGgpOworCWZyZWVfaXJxKGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGgpOwogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJaWYgKGgtPm1zaXhfdmVjdG9yKQogCQlwY2lfZGlzYWJsZV9tc2l4KGgtPnBkZXYpOwpAQCAtMzQ3MCw3ICszNjkyLDExIEBACiAJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LAogCQloLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pLAogCQloLT5lcnJpbmZvX3Bvb2wsIGgtPmVycmluZm9fcG9vbF9kaGFuZGxlKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIGgtPnJlcGx5X3Bvb2xfc2l6ZSwKKwkJaC0+cmVwbHlfcG9vbCwgaC0+cmVwbHlfcG9vbF9kaGFuZGxlKTsKIAlrZnJlZShoLT5jbWRfcG9vbF9iaXRzKTsKKwlrZnJlZShoLT5ibG9ja0ZldGNoVGFibGUpOworCWtmcmVlKGgtPmhiYV9pbnF1aXJ5X2RhdGEpOwogCS8qCiAJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCiAJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCkBAIC0zNTAyLDYgKzM3MjgsMTI5IEBACiAJLnJlc3VtZSA9IGhwc2FfcmVzdW1lLAogfTsKIAorLyogRmlsbCBpbiBidWNrZXRfbWFwW10sIGdpdmVuIG5zZ3MgKHRoZSBtYXggbnVtYmVyIG9mCisgKiBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyBzdXBwb3J0ZWQpIGFuZCBidWNrZXRbXSwKKyAqIHdoaWNoIGlzIGFuIGFycmF5IG9mIDggaW50ZWdlcnMuICBUaGUgYnVja2V0W10gYXJyYXkKKyAqIGNvbnRhaW5zIDggZGlmZmVyZW50IERNQSB0cmFuc2ZlciBzaXplcyAoaW4gMTYKKyAqIGJ5dGUgaW5jcmVtZW50cykgd2hpY2ggdGhlIGNvbnRyb2xsZXIgdXNlcyB0byBmZXRjaAorICogY29tbWFuZHMuICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGluIGJ1Y2tldF9tYXBbXSwgd2hpY2gKKyAqIG1hcHMgYSBnaXZlbiBudW1iZXIgb2Ygc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgdG8gb25lIG9mCisgKiB0aGUgOCBETUEgdHJhbnNmZXIgc2l6ZXMuICBUaGUgcG9pbnQgb2YgaXQgaXMgdG8gYWxsb3cgdGhlCisgKiBjb250cm9sbGVyIHRvIG9ubHkgZG8gYXMgbXVjaCBETUEgYXMgbmVlZGVkIHRvIGZldGNoIHRoZQorICogY29tbWFuZCwgd2l0aCB0aGUgRE1BIHRyYW5zZmVyIHNpemUgZW5jb2RlZCBpbiB0aGUgbG93ZXIKKyAqIGJpdHMgb2YgdGhlIGNvbW1hbmQgYWRkcmVzcy4KKyAqLworc3RhdGljIHZvaWQgIGNhbGNfYnVja2V0X21hcChpbnQgYnVja2V0W10sIGludCBudW1fYnVja2V0cywKKwlpbnQgbnNncywgaW50ICpidWNrZXRfbWFwKQoreworCWludCBpLCBqLCBiLCBzaXplOworCisJLyogZXZlbiBhIGNvbW1hbmQgd2l0aCAwIFNHcyByZXF1aXJlcyA0IGJsb2NrcyAqLworI2RlZmluZSBNSU5JTVVNX1RSQU5TRkVSX0JMT0NLUyA0CisjZGVmaW5lIE5VTV9CVUNLRVRTIDgKKwkvKiBOb3RlLCBidWNrZXRfbWFwIG11c3QgaGF2ZSBuc2dzKzEgZW50cmllcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDw9IG5zZ3M7IGkrKykgeworCQkvKiBDb21wdXRlIHNpemUgb2YgYSBjb21tYW5kIHdpdGggaSBTRyBlbnRyaWVzICovCisJCXNpemUgPSBpICsgTUlOSU1VTV9UUkFOU0ZFUl9CTE9DS1M7CisJCWIgPSBudW1fYnVja2V0czsgLyogQXNzdW1lIHRoZSBiaWdnZXN0IGJ1Y2tldCAqLworCQkvKiBGaW5kIHRoZSBidWNrZXQgdGhhdCBpcyBqdXN0IGJpZyBlbm91Z2ggKi8KKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQkJaWYgKGJ1Y2tldFtqXSA+PSBzaXplKSB7CisJCQkJYiA9IGo7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyogZm9yIGEgY29tbWFuZCB3aXRoIGkgU0cgZW50cmllcywgdXNlIGJ1Y2tldCBiLiAqLworCQlidWNrZXRfbWFwW2ldID0gYjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhwc2FfcHV0X2N0bHJfaW50b19wZXJmb3JtYW50X21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwl1MzIgdHJhbnNfc3VwcG9ydDsKKwl1NjQgdHJhbnNfb2Zmc2V0OworCS8qICA1ID0gMSBzL2cgZW50cnkgb3IgNGsKKwkgKiAgNiA9IDIgcy9nIGVudHJ5IG9yIDhrCisJICogIDggPSA0IHMvZyBlbnRyeSBvciAxNmsKKwkgKiAxMCA9IDYgcy9nIGVudHJ5IG9yIDI0aworCSAqLworCWludCBiZnRbOF0gPSB7NSwgNiwgOCwgMTAsIDEyLCAyMCwgMjgsIDM1fTsgLyogZm9yIHNjYXR0ZXIvZ2F0aGVycyAqLworCWludCBpID0gMDsKKwlpbnQgbCA9IDA7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZTsKKworCXRyYW5zX3N1cHBvcnQgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc3BvcnRTdXBwb3J0KSk7CisJaWYgKCEodHJhbnNfc3VwcG9ydCAmIFBFUkZPUk1BTlRfTU9ERSkpCisJCXJldHVybjsKKworCWgtPm1heF9jb21tYW5kcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPk1heFBlcmZvcm1hbnRNb2RlQ29tbWFuZHMpKTsKKwloLT5tYXhfc2dfZW50cmllcyA9IDMyOworCS8qIFBlcmZvcm1hbnQgbW9kZSByaW5nIGJ1ZmZlciBhbmQgc3VwcG9ydGluZyBkYXRhIHN0cnVjdHVyZXMgKi8KKwloLT5yZXBseV9wb29sX3NpemUgPSBoLT5tYXhfY29tbWFuZHMgKiBzaXplb2YodTY0KTsKKwloLT5yZXBseV9wb29sID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwgaC0+cmVwbHlfcG9vbF9zaXplLAorCQkJCSYoaC0+cmVwbHlfcG9vbF9kaGFuZGxlKSk7CisKKwkvKiBOZWVkIGEgYmxvY2sgZmV0Y2ggdGFibGUgZm9yIHBlcmZvcm1hbnQgbW9kZSAqLworCWgtPmJsb2NrRmV0Y2hUYWJsZSA9IGttYWxsb2MoKChoLT5tYXhfc2dfZW50cmllcysxKSAqCisJCQkJc2l6ZW9mKHUzMikpLCBHRlBfS0VSTkVMKTsKKworCWlmICgoaC0+cmVwbHlfcG9vbCA9PSBOVUxMKQorCQl8fCAoaC0+YmxvY2tGZXRjaFRhYmxlID09IE5VTEwpKQorCQlnb3RvIGNsZWFuX3VwOworCisJaC0+cmVwbHlfcG9vbF93cmFwYXJvdW5kID0gMTsgLyogc3BlYzogaW5pdCB0byAxICovCisKKwkvKiBDb250cm9sbGVyIHNwZWM6IHplcm8gb3V0IHRoaXMgYnVmZmVyLiAqLworCW1lbXNldChoLT5yZXBseV9wb29sLCAwLCBoLT5yZXBseV9wb29sX3NpemUpOworCWgtPnJlcGx5X3Bvb2xfaGVhZCA9IGgtPnJlcGx5X3Bvb2w7CisKKwl0cmFuc19vZmZzZXQgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc01ldGhvZE9mZnNldCkpOworCWJmdFs3XSA9IGgtPm1heF9zZ19lbnRyaWVzICsgNDsKKwljYWxjX2J1Y2tldF9tYXAoYmZ0LCBBUlJBWV9TSVpFKGJmdCksIDMyLCBoLT5ibG9ja0ZldGNoVGFibGUpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXdyaXRlbChiZnRbaV0sICZoLT50cmFuc3RhYmxlLT5CbG9ja0ZldGNoW2ldKTsKKworCS8qIHNpemUgb2YgY29udHJvbGxlciByaW5nIGJ1ZmZlciAqLworCXdyaXRlbChoLT5tYXhfY29tbWFuZHMsICZoLT50cmFuc3RhYmxlLT5SZXBRU2l6ZSk7CisJd3JpdGVsKDEsICZoLT50cmFuc3RhYmxlLT5SZXBRQ291bnQpOworCXdyaXRlbCgwLCAmaC0+dHJhbnN0YWJsZS0+UmVwUUN0ckFkZHJMb3czMik7CisJd3JpdGVsKDAsICZoLT50cmFuc3RhYmxlLT5SZXBRQ3RyQWRkckhpZ2gzMik7CisJd3JpdGVsKGgtPnJlcGx5X3Bvb2xfZGhhbmRsZSwgJmgtPnRyYW5zdGFibGUtPlJlcFFBZGRyMExvdzMyKTsKKwl3cml0ZWwoMCwgJmgtPnRyYW5zdGFibGUtPlJlcFFBZGRyMEhpZ2gzMik7CisJd3JpdGVsKENGR1RCTF9UcmFuc19QZXJmb3JtYW50LAorCQkmKGgtPmNmZ3RhYmxlLT5Ib3N0V3JpdGUuVHJhbnNwb3J0UmVxdWVzdCkpOworCXdyaXRlbChDRkdUQkxfQ2hhbmdlUmVxLCBoLT52YWRkciArIFNBNV9ET09SQkVMTCk7CisJLyogdW5kZXIgY2VydGFpbiB2ZXJ5IHJhcmUgY29uZGl0aW9ucywgdGhpcyBjYW4gdGFrZSBhd2hpbGUuCisJICogKGUuZy46IGhvdCByZXBsYWNlIGEgZmFpbGVkIDE0NEdCIGRyaXZlIGluIGEgUkFJRCA1IHNldCByaWdodAorCSAqIGFzIHdlIGVudGVyIHRoaXMgY29kZS4pICovCisJZm9yIChsID0gMDsgbCA8IE1BWF9DT05GSUdfV0FJVDsgbCsrKSB7CisJCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpOworCQlpZiAoIShyZWdpc3Rlcl92YWx1ZSAmIENGR1RCTF9DaGFuZ2VSZXEpKQorCQkJYnJlYWs7CisJCS8qIGRlbGF5IGFuZCB0cnkgYWdhaW4gKi8KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CisJfQorCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKSk7CisJaWYgKCEocmVnaXN0ZXJfdmFsdWUgJiBDRkdUQkxfVHJhbnNfUGVyZm9ybWFudCkpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgYm9hcmQgaW50byIKKwkJCQkJIiBwZXJmb3JtYW50IG1vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogQ2hhbmdlIHRoZSBhY2Nlc3MgbWV0aG9kcyB0byB0aGUgcGVyZm9ybWFudCBhY2Nlc3MgbWV0aG9kcyAqLworCWgtPmFjY2VzcyA9IFNBNV9wZXJmb3JtYW50X2FjY2VzczsKKwloLT50cmFuc01ldGhvZCA9IENGR1RCTF9UcmFuc19QZXJmb3JtYW50OworCisJcmV0dXJuOworCitjbGVhbl91cDoKKwlpZiAoaC0+cmVwbHlfcG9vbCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LCBoLT5yZXBseV9wb29sX3NpemUsCisJCQloLT5yZXBseV9wb29sLCBoLT5yZXBseV9wb29sX2RoYW5kbGUpOworCWtmcmVlKGgtPmJsb2NrRmV0Y2hUYWJsZSk7Cit9CisKIC8qCiAgKiAgVGhpcyBpcyBpdC4gIFJlZ2lzdGVyIHRoZSBQQ0kgZHJpdmVyIGluZm9ybWF0aW9uIGZvciB0aGUgY2FyZHMgd2UgY29udHJvbAogICogIHRoZSBPUyB3aWxsIGNhbGwgb3VyIHJlZ2lzdGVyZWQgcm91dGluZXMgd2hlbiBpdCBmaW5kcyBvbmUgb2Ygb3VyIGNhcmRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuaCBiL2RyaXZlcnMvc2NzaS9ocHNhLmgKaW5kZXggNmJkMTk0OS4uYTA1MDJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2EuaAorKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5oCkBAIC0zMyw3ICszMyw3IEBACiAJCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CiAJdm9pZCAoKnNldF9pbnRyX21hc2spKHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGxvbmcgdmFsKTsKIAl1bnNpZ25lZCBsb25nICgqZmlmb19mdWxsKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKLQl1bnNpZ25lZCBsb25nICgqaW50cl9wZW5kaW5nKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKKwlib29sICgqaW50cl9wZW5kaW5nKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIAl1bnNpZ25lZCBsb25nICgqY29tbWFuZF9jb21wbGV0ZWQpKHN0cnVjdCBjdGxyX2luZm8gKmgpOwogfTsKIApAQCAtNTUsMTkgKzU1LDIwIEBACiAJY2hhciAgICAqcHJvZHVjdF9uYW1lOwogCWNoYXIJZmlybV92ZXJbNF07IC8qIEZpcm13YXJlIHZlcnNpb24gKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQlfX3UzMglib2FyZF9pZDsKKwl1MzIJYm9hcmRfaWQ7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKIAl1bnNpZ25lZCBsb25nIHBhZGRyOwogCWludCAJbnJfY21kczsgLyogTnVtYmVyIG9mIGNvbW1hbmRzIGFsbG93ZWQgb24gdGhpcyBjb250cm9sbGVyICovCiAJc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKmNmZ3RhYmxlOworCWludCAgICAgbWF4X3NnX2VudHJpZXM7CiAJaW50CWludGVycnVwdHNfZW5hYmxlZDsKIAlpbnQJbWFqb3I7CiAJaW50IAltYXhfY29tbWFuZHM7CiAJaW50CWNvbW1hbmRzX291dHN0YW5kaW5nOwogCWludCAJbWF4X291dHN0YW5kaW5nOyAvKiBEZWJ1ZyAqLwogCWludAl1c2FnZV9jb3VudDsgIC8qIG51bWJlciBvZiBvcGVucyBhbGwgYWxsIG1pbm9yIGRldmljZXMgKi8KLSMJZGVmaW5lIERPT1JCRUxMX0lOVAkwCi0jCWRlZmluZSBQRVJGX01PREVfSU5UCTEKKyMJZGVmaW5lIFBFUkZfTU9ERV9JTlQJMAorIwlkZWZpbmUgRE9PUkJFTExfSU5UCTEKICMJZGVmaW5lIFNJTVBMRV9NT0RFX0lOVAkyCiAjCWRlZmluZSBNRU1RX01PREVfSU5UCTMKIAl1bnNpZ25lZCBpbnQgaW50cls0XTsKQEAgLTkzLDYgKzk0LDkgQEAKIAlpbnQJCQlucl9mcmVlczsKIAlpbnQJCQlidXN5X2luaXRpYWxpemluZzsKIAlpbnQJCQlidXN5X3NjYW5uaW5nOworCWludAkJCXNjYW5fZmluaXNoZWQ7CisJc3BpbmxvY2tfdAkJc2Nhbl9sb2NrOworCXdhaXRfcXVldWVfaGVhZF90CXNjYW5fd2FpdF9xdWV1ZTsKIAlzdHJ1Y3QgbXV0ZXgJCWJ1c3lfc2h1dHRpbmdfZG93bjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNjYW5fbGlzdDsKIAlzdHJ1Y3QgY29tcGxldGlvbglzY2FuX3dhaXQ7CkBAIC0xMDIsNiArMTA2LDI0IEBACiAJaW50IG5kZXZpY2VzOyAvKiBudW1iZXIgb2YgdXNlZCBlbGVtZW50cyBpbiAuZGV2W10gYXJyYXkuICovCiAjZGVmaW5lIEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBIDI1NgogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldltIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQV07CisJLyoKKwkgKiBQZXJmb3JtYW50IG1vZGUgdGFibGVzLgorCSAqLworCXUzMiB0cmFuc19zdXBwb3J0OworCXUzMiB0cmFuc19vZmZzZXQ7CisJc3RydWN0IFRyYW5zVGFibGVfc3RydWN0ICp0cmFuc3RhYmxlOworCXVuc2lnbmVkIGxvbmcgdHJhbnNNZXRob2Q7CisKKwkvKgorCSAqIFBlcmZvcm1hbnQgbW9kZSBjb21wbGV0aW9uIGJ1ZmZlcgorCSAqLworCXU2NCAqcmVwbHlfcG9vbDsKKwlkbWFfYWRkcl90IHJlcGx5X3Bvb2xfZGhhbmRsZTsKKwl1NjQgKnJlcGx5X3Bvb2xfaGVhZDsKKwlzaXplX3QgcmVwbHlfcG9vbF9zaXplOworCXVuc2lnbmVkIGNoYXIgcmVwbHlfcG9vbF93cmFwYXJvdW5kOworCXUzMiAqYmxvY2tGZXRjaFRhYmxlOworCXVuc2lnbmVkIGNoYXIgKmhiYV9pbnF1aXJ5X2RhdGE7CiB9OwogI2RlZmluZSBIUFNBX0FCT1JUX01TRyAwCiAjZGVmaW5lIEhQU0FfREVWSUNFX1JFU0VUX01TRyAxCkBAIC0xNjQsOSArMTg2LDE2IEBACiAjZGVmaW5lIEhQU0FfRklSTVdBUkVfUkVBRFkJMHhmZmZmMDAwMCAvKiB2YWx1ZSBpbiBzY3JhdGNocGFkIHJlZ2lzdGVyICovCiAKICNkZWZpbmUgSFBTQV9FUlJPUl9CSVQJCTB4MDIKLSNkZWZpbmUgSFBTQV9UQUdfQ09OVEFJTlNfSU5ERVgodGFnKSAoKHRhZykgJiAweDA0KQotI2RlZmluZSBIUFNBX1RBR19UT19JTkRFWCh0YWcpICgodGFnKSA+PiAzKQotI2RlZmluZSBIUFNBX1RBR19ESVNDQVJEX0VSUk9SX0JJVFModGFnKSAoKHRhZykgJiB+MykKKworLyogUGVyZm9ybWFudCBtb2RlIGZsYWdzICovCisjZGVmaW5lIFNBNV9QRVJGX0lOVFJfUEVORElORyAgIDB4MDQKKyNkZWZpbmUgU0E1X1BFUkZfSU5UUl9PRkYgICAgICAgMHgwNQorI2RlZmluZSBTQTVfT1VUREJfU1RBVFVTX1BFUkZfQklUICAgICAgIDB4MDEKKyNkZWZpbmUgU0E1X09VVERCX0NMRUFSX1BFUkZfQklUICAgICAgICAweDAxCisjZGVmaW5lIFNBNV9PVVREQl9DTEVBUiAgICAgICAgIDB4QTAKKyNkZWZpbmUgU0E1X09VVERCX0NMRUFSX1BFUkZfQklUICAgICAgICAweDAxCisjZGVmaW5lIFNBNV9PVVREQl9TVEFUVVMgICAgICAgIDB4OUMKKwogCiAjZGVmaW5lIEhQU0FfSU5UUl9PTiAJMQogI2RlZmluZSBIUFNBX0lOVFJfT0ZGCTAKQEAgLTE3NiwxMCArMjA1LDggQEAKIHN0YXRpYyB2b2lkIFNBNV9zdWJtaXRfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYykKIHsKLSNpZmRlZiBIUFNBX0RFQlVHCi0JIHByaW50ayhLRVJOX1dBUk5JTkcgImhwc2E6IFNlbmRpbmcgJXggLSBkb3duIHRvIGNvbnRyb2xsZXJcbiIsCi0JCWMtPmJ1c2FkZHIpOwotI2VuZGlmIC8qIEhQU0FfREVCVUcgKi8KKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJTZW5kaW5nICV4LCB0YWcgPSAleFxuIiwgYy0+YnVzYWRkciwKKwkJYy0+SGVhZGVyLlRhZy5sb3dlcik7CiAJd3JpdGVsKGMtPmJ1c2FkZHIsIGgtPnZhZGRyICsgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQpOwogCWgtPmNvbW1hbmRzX291dHN0YW5kaW5nKys7CiAJaWYgKGgtPmNvbW1hbmRzX291dHN0YW5kaW5nID4gaC0+bWF4X291dHN0YW5kaW5nKQpAQCAtMjAyLDYgKzIyOSw1MiBAQAogCQkJaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CiAJfQogfQorCitzdGF0aWMgdm9pZCBTQTVfcGVyZm9ybWFudF9pbnRyX21hc2soc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJaWYgKHZhbCkgeyAvKiB0dXJuIG9uIGludGVycnVwdHMgKi8KKwkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMTsKKwkJd3JpdGVsKDAsIGgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCX0gZWxzZSB7CisJCWgtPmludGVycnVwdHNfZW5hYmxlZCA9IDA7CisJCXdyaXRlbChTQTVfUEVSRl9JTlRSX09GRiwKKwkJCWgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgU0E1X3BlcmZvcm1hbnRfY29tcGxldGVkKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CisKKwkvKiBmbHVzaCB0aGUgY29udHJvbGxlciB3cml0ZSBvZiB0aGUgcmVwbHkgcXVldWUgYnkgcmVhZGluZworCSAqIG91dGJvdW5kIGRvb3JiZWxsIHN0YXR1cyByZWdpc3Rlci4KKwkgKi8KKwlyZWdpc3Rlcl92YWx1ZSA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X09VVERCX1NUQVRVUyk7CisJLyogbXNpIGF1dG8gY2xlYXJzIHRoZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQuICovCisJaWYgKCEoaC0+bXNpX3ZlY3RvciB8fCBoLT5tc2l4X3ZlY3RvcikpIHsKKwkJd3JpdGVsKFNBNV9PVVREQl9DTEVBUl9QRVJGX0JJVCwgaC0+dmFkZHIgKyBTQTVfT1VUREJfQ0xFQVIpOworCQkvKiBEbyBhIHJlYWQgaW4gb3JkZXIgdG8gZmx1c2ggdGhlIHdyaXRlIHRvIHRoZSBjb250cm9sbGVyCisJCSAqIChhcyBwZXIgc3BlYy4pCisJCSAqLworCQlyZWdpc3Rlcl92YWx1ZSA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X09VVERCX1NUQVRVUyk7CisJfQorCisJaWYgKCgqKGgtPnJlcGx5X3Bvb2xfaGVhZCkgJiAxKSA9PSAoaC0+cmVwbHlfcG9vbF93cmFwYXJvdW5kKSkgeworCQlyZWdpc3Rlcl92YWx1ZSA9ICooaC0+cmVwbHlfcG9vbF9oZWFkKTsKKwkJKGgtPnJlcGx5X3Bvb2xfaGVhZCkrKzsKKwkJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmctLTsKKwl9IGVsc2UgeworCQlyZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CisJfQorCS8qIENoZWNrIGZvciB3cmFwYXJvdW5kICovCisJaWYgKGgtPnJlcGx5X3Bvb2xfaGVhZCA9PSAoaC0+cmVwbHlfcG9vbCArIGgtPm1heF9jb21tYW5kcykpIHsKKwkJaC0+cmVwbHlfcG9vbF9oZWFkID0gaC0+cmVwbHlfcG9vbDsKKwkJaC0+cmVwbHlfcG9vbF93cmFwYXJvdW5kIF49IDE7CisJfQorCisJcmV0dXJuIHJlZ2lzdGVyX3ZhbHVlOworfQorCiAvKgogICogIFJldHVybnMgdHJ1ZSBpZiBmaWZvIGlzIGZ1bGwuCiAgKgpAQCAtMjI4LDEwICszMDEsMTAgQEAKIAogI2lmZGVmIEhQU0FfREVCVUcKIAlpZiAocmVnaXN0ZXJfdmFsdWUgIT0gRklGT19FTVBUWSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaHBzYTogIFJlYWQgJWx4IGJhY2sgZnJvbSBib2FyZFxuIiwKKwkJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiUmVhZCAlbHggYmFjayBmcm9tIGJvYXJkXG4iLAogCQkJcmVnaXN0ZXJfdmFsdWUpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaHBzYTogIEZJRk8gRW1wdHkgcmVhZFxuIik7CisJCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgImhwc2E6IEZJRk8gRW1wdHkgcmVhZFxuIik7CiAjZW5kaWYKIAogCXJldHVybiByZWdpc3Rlcl92YWx1ZTsKQEAgLTIzOSwxOCArMzEyLDI4IEBACiAvKgogICoJUmV0dXJucyB0cnVlIGlmIGFuIGludGVycnVwdCBpcyBwZW5kaW5nLi4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgU0E1X2ludHJfcGVuZGluZyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQorc3RhdGljIGJvb2wgU0E1X2ludHJfcGVuZGluZyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewogCXVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJfdmFsdWUgID0KIAkJcmVhZGwoaC0+dmFkZHIgKyBTQTVfSU5UUl9TVEFUVVMpOwotI2lmZGVmIEhQU0FfREVCVUcKLQlwcmludGsoS0VSTl9JTkZPICJocHNhOiBpbnRyX3BlbmRpbmcgJWx4XG4iLCByZWdpc3Rlcl92YWx1ZSk7Ci0jZW5kaWYgIC8qIEhQU0FfREVCVUcgKi8KLQlpZiAocmVnaXN0ZXJfdmFsdWUgJiAgU0E1X0lOVFJfUEVORElORykKLQkJcmV0dXJuICAxOwotCXJldHVybiAwIDsKKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJpbnRyX3BlbmRpbmcgJWx4XG4iLCByZWdpc3Rlcl92YWx1ZSk7CisJcmV0dXJuIHJlZ2lzdGVyX3ZhbHVlICYgU0E1X0lOVFJfUEVORElORzsKIH0KIAorc3RhdGljIGJvb2wgU0E1X3BlcmZvcm1hbnRfaW50cl9wZW5kaW5nKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X0lOVFJfU1RBVFVTKTsKKworCWlmICghcmVnaXN0ZXJfdmFsdWUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIFJlYWQgb3V0Ym91bmQgZG9vcmJlbGwgdG8gZmx1c2ggKi8KKwlyZWdpc3Rlcl92YWx1ZSA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X09VVERCX1NUQVRVUyk7CisJcmV0dXJuIHJlZ2lzdGVyX3ZhbHVlICYgU0E1X09VVERCX1NUQVRVU19QRVJGX0JJVDsKK30KIAogc3RhdGljIHN0cnVjdCBhY2Nlc3NfbWV0aG9kIFNBNV9hY2Nlc3MgPSB7CiAJU0E1X3N1Ym1pdF9jb21tYW5kLApAQCAtMjYwLDE0ICszNDMsMTkgQEAKIAlTQTVfY29tcGxldGVkLAogfTsKIAorc3RhdGljIHN0cnVjdCBhY2Nlc3NfbWV0aG9kIFNBNV9wZXJmb3JtYW50X2FjY2VzcyA9IHsKKwlTQTVfc3VibWl0X2NvbW1hbmQsCisJU0E1X3BlcmZvcm1hbnRfaW50cl9tYXNrLAorCVNBNV9maWZvX2Z1bGwsCisJU0E1X3BlcmZvcm1hbnRfaW50cl9wZW5kaW5nLAorCVNBNV9wZXJmb3JtYW50X2NvbXBsZXRlZCwKK307CisKIHN0cnVjdCBib2FyZF90eXBlIHsKLQlfX3UzMglib2FyZF9pZDsKKwl1MzIJYm9hcmRfaWQ7CiAJY2hhcgkqcHJvZHVjdF9uYW1lOwogCXN0cnVjdCBhY2Nlc3NfbWV0aG9kICphY2Nlc3M7CiB9OwogCi0KLS8qIGVuZCBvZiBvbGQgaHBzYV9zY3NpLmggZmlsZSAqLwotCiAjZW5kaWYgLyogSFBTQV9IICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKaW5kZXggMTJkNzEzOC4uM2UwYWJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKQEAgLTEwMSwxOSArMTAxLDIwIEBACiAjZGVmaW5lIENGR1RCTF9BY2NDbWRzICAgICAgICAgIDB4MDAwMDAwMDFsCiAKICNkZWZpbmUgQ0ZHVEJMX1RyYW5zX1NpbXBsZSAgICAgMHgwMDAwMDAwMmwKKyNkZWZpbmUgQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQgMHgwMDAwMDAwNGwKIAogI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9VbHRyYTIgICAweDAwMDAwMDAxbAogI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9VbHRyYTMgICAweDAwMDAwMDAybAogI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9GaWJyZTFHICAweDAwMDAwMTAwbAogI2RlZmluZSBDRkdUQkxfQnVzVHlwZV9GaWJyZTJHICAweDAwMDAwMjAwbAogc3RydWN0IHZhbHMzMiB7Ci0JX191MzIgICBsb3dlcjsKLQlfX3UzMiAgIHVwcGVyOworCXUzMiAgIGxvd2VyOworCXUzMiAgIHVwcGVyOwogfTsKIAogdW5pb24gdTY0Yml0IHsKIAlzdHJ1Y3QgdmFsczMyIHZhbDMyOwotCV9fdTY0IHZhbDsKKwl1NjQgdmFsOwogfTsKIAogLyogRklYTUUgdGhpcyBpcyBhIHBlciBjb250cm9sbGVyIHZhbHVlIChiYXJmISkgKi8KQEAgLTEyNiwzNCArMTI3LDM0IEBACiAKICNkZWZpbmUgSFBTQV9JTlFVSVJZIDB4MTIKIHN0cnVjdCBJbnF1aXJ5RGF0YSB7Ci0JX191OCBkYXRhX2J5dGVbMzZdOworCXU4IGRhdGFfYnl0ZVszNl07CiB9OwogCiAjZGVmaW5lIEhQU0FfUkVQT1JUX0xPRyAweGMyICAgIC8qIFJlcG9ydCBMb2dpY2FsIExVTnMgKi8KICNkZWZpbmUgSFBTQV9SRVBPUlRfUEhZUyAweGMzICAgLyogUmVwb3J0IFBoeXNpY2FsIExVTnMgKi8KIHN0cnVjdCBSZXBvcnRMVU5kYXRhIHsKLQlfX3U4IExVTkxpc3RMZW5ndGhbNF07Ci0JX191MzIgcmVzZXJ2ZWQ7Ci0JX191OCBMVU5bSFBTQV9NQVhfTFVOXVs4XTsKKwl1OCBMVU5MaXN0TGVuZ3RoWzRdOworCXUzMiByZXNlcnZlZDsKKwl1OCBMVU5bSFBTQV9NQVhfTFVOXVs4XTsKIH07CiAKIHN0cnVjdCBSZXBvcnRFeHRlbmRlZExVTmRhdGEgewotCV9fdTggTFVOTGlzdExlbmd0aFs0XTsKLQlfX3U4IGV4dGVuZGVkX3Jlc3BvbnNlX2ZsYWc7Ci0JX191OCByZXNlcnZlZFszXTsKLQlfX3U4IExVTltIUFNBX01BWF9MVU5dWzI0XTsKKwl1OCBMVU5MaXN0TGVuZ3RoWzRdOworCXU4IGV4dGVuZGVkX3Jlc3BvbnNlX2ZsYWc7CisJdTggcmVzZXJ2ZWRbM107CisJdTggTFVOW0hQU0FfTUFYX0xVTl1bMjRdOwogfTsKIAogc3RydWN0IFNlbnNlU3Vic3lzdGVtX2luZm8gewotCV9fdTggcmVzZXJ2ZWRbMzZdOwotCV9fdTggcG9ydG5hbWVbOF07Ci0JX191OCByZXNlcnZlZDFbMTEwOF07CisJdTggcmVzZXJ2ZWRbMzZdOworCXU4IHBvcnRuYW1lWzhdOworCXU4IHJlc2VydmVkMVsxMTA4XTsKIH07CiAKICNkZWZpbmUgSFBTQV9SRUFEX0NBUEFDSVRZIDB4MjUgLyogUmVhZCBDYXBhY2l0eSAqLwogc3RydWN0IFJlYWRDYXBkYXRhIHsKLQlfX3U4IHRvdGFsX3NpemVbNF07CS8qIFRvdGFsIHNpemUgaW4gYmxvY2tzICovCi0JX191OCBibG9ja19zaXplWzRdOwkvKiBTaXplIG9mIGJsb2NrcyBpbiBieXRlcyAqLworCXU4IHRvdGFsX3NpemVbNF07CS8qIFRvdGFsIHNpemUgaW4gYmxvY2tzICovCisJdTggYmxvY2tfc2l6ZVs0XTsJLyogU2l6ZSBvZiBibG9ja3MgaW4gYnl0ZXMgKi8KIH07CiAKICNpZiAwCkBAIC0xNzQsMTEyICsxNzUsMTMxIEBACiAvKiBDb21tYW5kIExpc3QgU3RydWN0dXJlICovCiB1bmlvbiBTQ1NJM0FkZHIgewogCXN0cnVjdCB7Ci0JCV9fdTggRGV2OwotCQlfX3U4IEJ1czo2OwotCQlfX3U4IE1vZGU6MjsgICAgICAgIC8qIGIwMCAqLworCQl1OCBEZXY7CisJCXU4IEJ1czo2OworCQl1OCBNb2RlOjI7ICAgICAgICAvKiBiMDAgKi8KIAl9IFBlcmlwRGV2OwogCXN0cnVjdCB7Ci0JCV9fdTggRGV2TFNCOwotCQlfX3U4IERldk1TQjo2OwotCQlfX3U4IE1vZGU6MjsgICAgICAgIC8qIGIwMSAqLworCQl1OCBEZXZMU0I7CisJCXU4IERldk1TQjo2OworCQl1OCBNb2RlOjI7ICAgICAgICAvKiBiMDEgKi8KIAl9IExvZ0RldjsKIAlzdHJ1Y3QgewotCQlfX3U4IERldjo1OwotCQlfX3U4IEJ1czozOwotCQlfX3U4IFRhcmc6NjsKLQkJX191OCBNb2RlOjI7ICAgICAgICAvKiBiMTAgKi8KKwkJdTggRGV2OjU7CisJCXU4IEJ1czozOworCQl1OCBUYXJnOjY7CisJCXU4IE1vZGU6MjsgICAgICAgIC8qIGIxMCAqLwogCX0gTG9nVW5pdDsKIH07CiAKIHN0cnVjdCBQaHlzRGV2QWRkciB7Ci0JX191MzIgICAgICAgICAgICAgVGFyZ2V0SWQ6MjQ7Ci0JX191MzIgICAgICAgICAgICAgQnVzOjY7Ci0JX191MzIgICAgICAgICAgICAgTW9kZToyOworCXUzMiAgICAgICAgICAgICBUYXJnZXRJZDoyNDsKKwl1MzIgICAgICAgICAgICAgQnVzOjY7CisJdTMyICAgICAgICAgICAgIE1vZGU6MjsKIAkvKiAyIGxldmVsIHRhcmdldCBkZXZpY2UgYWRkciAqLwogCXVuaW9uIFNDU0kzQWRkciAgVGFyZ2V0WzJdOwogfTsKIAogc3RydWN0IExvZ0RldkFkZHIgewotCV9fdTMyICAgICAgICAgICAgVm9sSWQ6MzA7Ci0JX191MzIgICAgICAgICAgICBNb2RlOjI7Ci0JX191OCAgICAgICAgICAgICByZXNlcnZlZFs0XTsKKwl1MzIgICAgICAgICAgICBWb2xJZDozMDsKKwl1MzIgICAgICAgICAgICBNb2RlOjI7CisJdTggICAgICAgICAgICAgcmVzZXJ2ZWRbNF07CiB9OwogCiB1bmlvbiBMVU5BZGRyIHsKLQlfX3U4ICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOworCXU4ICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOwogCXVuaW9uIFNDU0kzQWRkciAgICBTQ1NJM0x1bls0XTsKIAlzdHJ1Y3QgUGh5c0RldkFkZHIgUGh5c0RldjsKIAlzdHJ1Y3QgTG9nRGV2QWRkciAgTG9nRGV2OwogfTsKIAogc3RydWN0IENvbW1hbmRMaXN0SGVhZGVyIHsKLQlfX3U4ICAgICAgICAgICAgICBSZXBseVF1ZXVlOwotCV9fdTggICAgICAgICAgICAgIFNHTGlzdDsKLQlfX3UxNiAgICAgICAgICAgICBTR1RvdGFsOworCXU4ICAgICAgICAgICAgICBSZXBseVF1ZXVlOworCXU4ICAgICAgICAgICAgICBTR0xpc3Q7CisJdTE2ICAgICAgICAgICAgIFNHVG90YWw7CiAJc3RydWN0IHZhbHMzMiAgICAgVGFnOwogCXVuaW9uIExVTkFkZHIgICAgIExVTjsKIH07CiAKIHN0cnVjdCBSZXF1ZXN0QmxvY2sgewotCV9fdTggICBDREJMZW47CisJdTggICBDREJMZW47CiAJc3RydWN0IHsKLQkJX191OCBUeXBlOjM7Ci0JCV9fdTggQXR0cmlidXRlOjM7Ci0JCV9fdTggRGlyZWN0aW9uOjI7CisJCXU4IFR5cGU6MzsKKwkJdTggQXR0cmlidXRlOjM7CisJCXU4IERpcmVjdGlvbjoyOwogCX0gVHlwZTsKLQlfX3UxNiAgVGltZW91dDsKLQlfX3U4ICAgQ0RCWzE2XTsKKwl1MTYgIFRpbWVvdXQ7CisJdTggICBDREJbMTZdOwogfTsKIAogc3RydWN0IEVyckRlc2NyaXB0b3IgewogCXN0cnVjdCB2YWxzMzIgQWRkcjsKLQlfX3UzMiAgTGVuOworCXUzMiAgTGVuOwogfTsKIAogc3RydWN0IFNHRGVzY3JpcHRvciB7CiAJc3RydWN0IHZhbHMzMiBBZGRyOwotCV9fdTMyICBMZW47Ci0JX191MzIgIEV4dDsKKwl1MzIgIExlbjsKKwl1MzIgIEV4dDsKIH07CiAKIHVuaW9uIE1vcmVFcnJJbmZvIHsKIAlzdHJ1Y3QgewotCQlfX3U4ICBSZXNlcnZlZFszXTsKLQkJX191OCAgVHlwZTsKLQkJX191MzIgRXJyb3JJbmZvOworCQl1OCAgUmVzZXJ2ZWRbM107CisJCXU4ICBUeXBlOworCQl1MzIgRXJyb3JJbmZvOwogCX0gQ29tbW9uX0luZm87CiAJc3RydWN0IHsKLQkJX191OCAgUmVzZXJ2ZWRbMl07Ci0JCV9fdTggIG9mZmVuc2Vfc2l6ZTsgLyogc2l6ZSBvZiBvZmZlbmRpbmcgZW50cnkgKi8KLQkJX191OCAgb2ZmZW5zZV9udW07ICAvKiBieXRlICMgb2Ygb2ZmZW5zZSAwLWJhc2UgKi8KLQkJX191MzIgb2ZmZW5zZV92YWx1ZTsKKwkJdTggIFJlc2VydmVkWzJdOworCQl1OCAgb2ZmZW5zZV9zaXplOyAvKiBzaXplIG9mIG9mZmVuZGluZyBlbnRyeSAqLworCQl1OCAgb2ZmZW5zZV9udW07ICAvKiBieXRlICMgb2Ygb2ZmZW5zZSAwLWJhc2UgKi8KKwkJdTMyIG9mZmVuc2VfdmFsdWU7CiAJfSBJbnZhbGlkX0NtZDsKIH07CiBzdHJ1Y3QgRXJyb3JJbmZvIHsKLQlfX3U4ICAgICAgICAgICAgICAgU2NzaVN0YXR1czsKLQlfX3U4ICAgICAgICAgICAgICAgU2Vuc2VMZW47Ci0JX191MTYgICAgICAgICAgICAgIENvbW1hbmRTdGF0dXM7Ci0JX191MzIgICAgICAgICAgICAgIFJlc2lkdWFsQ250OworCXU4ICAgICAgICAgICAgICAgU2NzaVN0YXR1czsKKwl1OCAgICAgICAgICAgICAgIFNlbnNlTGVuOworCXUxNiAgICAgICAgICAgICAgQ29tbWFuZFN0YXR1czsKKwl1MzIgICAgICAgICAgICAgIFJlc2lkdWFsQ250OwogCXVuaW9uIE1vcmVFcnJJbmZvICBNb3JlRXJySW5mbzsKLQlfX3U4ICAgICAgICAgICAgICAgU2Vuc2VJbmZvW1NFTlNFSU5GT0JZVEVTXTsKKwl1OCAgICAgICAgICAgICAgIFNlbnNlSW5mb1tTRU5TRUlORk9CWVRFU107CiB9OwogLyogQ29tbWFuZCB0eXBlcyAqLwogI2RlZmluZSBDTURfSU9DVExfUEVORCAgMHgwMQogI2RlZmluZSBDTURfU0NTSQkweDAzCiAKLXN0cnVjdCBjdGxyX2luZm87IC8qIGRlZmluZWQgaW4gaHBzYS5oICovCi0vKiBUaGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgOAotICogb2Qgb24gYWxsIGFyY2hpdGVjdHVyZXMsIGJlY2F1c2UgdGhlIGNvbnRyb2xsZXIgdXNlcyAyCi0gKiBsb3dlciBiaXRzIG9mIHRoZSBhZGRyZXNzLCBhbmQgdGhlIGRyaXZlciB1c2VzIDEgbG93ZXIKLSAqIGJpdCAoMyBiaXRzIHRvdGFsLikKKy8qIFRoaXMgc3RydWN0dXJlIG5lZWRzIHRvIGJlIGRpdmlzaWJsZSBieSAzMiBmb3IgbmV3CisgKiBpbmRleGluZyBtZXRob2QgYW5kIHBlcmZvcm1hbnQgbW9kZS4KICAqLworI2RlZmluZSBQQUQzMiAzMgorI2RlZmluZSBQQUQ2NERJRkYgMAorI2RlZmluZSBVU0VFWFRSQSAoKHNpemVvZih2b2lkICopIC0gNCkvNCkKKyNkZWZpbmUgUEFEU0laRSAoUEFEMzIgKyBQQUQ2NERJRkYgKiBVU0VFWFRSQSkKKworI2RlZmluZSBESVJFQ1RfTE9PS1VQX1NISUZUIDUKKyNkZWZpbmUgRElSRUNUX0xPT0tVUF9CSVQgMHgxMAorCisjZGVmaW5lIEhQU0FfRVJST1JfQklUICAgICAgICAgIDB4MDIKK3N0cnVjdCBjdGxyX2luZm87IC8qIGRlZmluZWQgaW4gaHBzYS5oICovCisvKiBUaGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgMzIKKyAqIG9uIGFsbCBhcmNoaXRlY3R1cmVzIGJlY2F1c2UgbG93IDUgYml0cyBvZiB0aGUgYWRkcmVzc2VzCisgKiBhcmUgdXNlZCBhcyBmb2xsb3dzOgorICoKKyAqIGJpdCAwOiB0byBkZXZpY2UsIHVzZWQgdG8gaW5kaWNhdGUgInBlcmZvcm1hbnQgbW9kZSIgY29tbWFuZAorICogICAgICAgIGZyb20gZGV2aWNlLCBpbmRpZGNhdGVzIGVycm9yIHN0YXR1cy4KKyAqIGJpdCAxLTM6IHRvIGRldmljZSwgaW5kaWNhdGVzIGJsb2NrIGZldGNoIHRhYmxlIGVudHJ5IGZvcgorICogICAgICAgICAgcmVkdWNpbmcgRE1BIGluIGZldGNoaW5nIGNvbW1hbmRzIGZyb20gaG9zdCBtZW1vcnkuCisgKiBiaXQgNDogdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRhZyBpcyAiZGlyZWN0IGxvb2t1cCIgKGluZGV4KSwKKyAqICAgICAgICBvciBhIGJ1cyBhZGRyZXNzLgorICovCisKIHN0cnVjdCBDb21tYW5kTGlzdCB7CiAJc3RydWN0IENvbW1hbmRMaXN0SGVhZGVyIEhlYWRlcjsKIAlzdHJ1Y3QgUmVxdWVzdEJsb2NrICAgICAgUmVxdWVzdDsKIAlzdHJ1Y3QgRXJyRGVzY3JpcHRvciAgICAgRXJyRGVzYzsKIAlzdHJ1Y3QgU0dEZXNjcmlwdG9yICAgICAgU0dbTUFYU0dFTlRSSUVTXTsKIAkvKiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1hbmQgKi8KLQlfX3UzMgkJCSAgIGJ1c2FkZHI7IC8qIHBoeXNpY2FsIGFkZHIgb2YgdGhpcyByZWNvcmQgKi8KKwl1MzIJCQkgICBidXNhZGRyOyAvKiBwaHlzaWNhbCBhZGRyIG9mIHRoaXMgcmVjb3JkICovCiAJc3RydWN0IEVycm9ySW5mbyAqZXJyX2luZm87IC8qIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBtZW0gKi8KIAlzdHJ1Y3QgY3Rscl9pbmZvCSAgICpoOwogCWludAkJCSAgIGNtZF90eXBlOwpAQCAtMjkxLDM1ICszMTEsNjMgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZzsKIAlpbnQJIHJldHJ5X2NvdW50OwogCXZvaWQgICAqc2NzaV9jbWQ7CisKKy8qIG9uIDY0IGJpdCBhcmNoaXRlY3R1cmVzLCB0byBnZXQgdGhpcyB0byBiZSAzMi1ieXRlLWFsaWduZWQKKyAqIGl0IHNvIGhhcHBlbnMgd2UgbmVlZCBubyBwYWRkaW5nLCBvbiAzMiBiaXQgc3lzdGVtcywKKyAqIHdlIG5lZWQgOCBieXRlcyBvZiBwYWRkaW5nLiAgIFRoaXMgZG9lcyB0aGF0LgorICovCisjZGVmaW5lIENPTU1BTkRMSVNUX1BBRCAoKDggLSBzaXplb2YobG9uZykpLzQgKiA4KQorCXU4IHBhZFtDT01NQU5ETElTVF9QQURdOworCiB9OwogCiAvKiBDb25maWd1cmF0aW9uIFRhYmxlIFN0cnVjdHVyZSAqLwogc3RydWN0IEhvc3RXcml0ZSB7Ci0JX191MzIgVHJhbnNwb3J0UmVxdWVzdDsKLQlfX3UzMiBSZXNlcnZlZDsKLQlfX3UzMiBDb2FsSW50RGVsYXk7Ci0JX191MzIgQ29hbEludENvdW50OworCXUzMiBUcmFuc3BvcnRSZXF1ZXN0OworCXUzMiBSZXNlcnZlZDsKKwl1MzIgQ29hbEludERlbGF5OworCXUzMiBDb2FsSW50Q291bnQ7CiB9OwogCisjZGVmaW5lIFNJTVBMRV9NT0RFICAgICAweDAyCisjZGVmaW5lIFBFUkZPUk1BTlRfTU9ERSAweDA0CisjZGVmaW5lIE1FTVFfTU9ERSAgICAgICAweDA4CisKIHN0cnVjdCBDZmdUYWJsZSB7Ci0JX191OCAgICAgICAgICAgICBTaWduYXR1cmVbNF07Ci0JX191MzIgICAgICAgICAgICBTcGVjVmFsZW5jZTsKLQlfX3UzMiAgICAgICAgICAgIFRyYW5zcG9ydFN1cHBvcnQ7Ci0JX191MzIgICAgICAgICAgICBUcmFuc3BvcnRBY3RpdmU7Ci0Jc3RydWN0IEhvc3RXcml0ZSBIb3N0V3JpdGU7Ci0JX191MzIgICAgICAgICAgICBDbWRzT3V0TWF4OwotCV9fdTMyICAgICAgICAgICAgQnVzVHlwZXM7Ci0JX191MzIgICAgICAgICAgICBSZXNlcnZlZDsKLQlfX3U4ICAgICAgICAgICAgIFNlcnZlck5hbWVbMTZdOwotCV9fdTMyICAgICAgICAgICAgSGVhcnRCZWF0OwotCV9fdTMyICAgICAgICAgICAgU0NTSV9QcmVmZXRjaDsKKwl1OCAgICAgICAgICAgIFNpZ25hdHVyZVs0XTsKKwl1MzIJCVNwZWNWYWxlbmNlOworCXUzMiAgICAgICAgICAgVHJhbnNwb3J0U3VwcG9ydDsKKwl1MzIgICAgICAgICAgIFRyYW5zcG9ydEFjdGl2ZTsKKwlzdHJ1Y3QgCQlIb3N0V3JpdGUgSG9zdFdyaXRlOworCXUzMiAgICAgICAgICAgQ21kc091dE1heDsKKwl1MzIgICAgICAgICAgIEJ1c1R5cGVzOworCXUzMiAgICAgICAgICAgVHJhbnNNZXRob2RPZmZzZXQ7CisJdTggICAgICAgICAgICBTZXJ2ZXJOYW1lWzE2XTsKKwl1MzIgICAgICAgICAgIEhlYXJ0QmVhdDsKKwl1MzIgICAgICAgICAgIFNDU0lfUHJlZmV0Y2g7CisJdTMyCSAJTWF4U2NhdHRlckdhdGhlckVsZW1lbnRzOworCXUzMgkJTWF4TG9naWNhbFVuaXRzOworCXUzMgkJTWF4UGh5c2ljYWxEZXZpY2VzOworCXUzMgkJTWF4UGh5c2ljYWxEcml2ZXNQZXJMb2dpY2FsVW5pdDsKKwl1MzIJCU1heFBlcmZvcm1hbnRNb2RlQ29tbWFuZHM7Cit9OworCisjZGVmaW5lIE5VTV9CTE9DS0ZFVENIX0VOVFJJRVMgOAorc3RydWN0IFRyYW5zVGFibGVfc3RydWN0IHsKKwl1MzIgICAgICAgICAgICBCbG9ja0ZldGNoW05VTV9CTE9DS0ZFVENIX0VOVFJJRVNdOworCXUzMiAgICAgICAgICAgIFJlcFFTaXplOworCXUzMiAgICAgICAgICAgIFJlcFFDb3VudDsKKwl1MzIgICAgICAgICAgICBSZXBRQ3RyQWRkckxvdzMyOworCXUzMiAgICAgICAgICAgIFJlcFFDdHJBZGRySGlnaDMyOworCXUzMiAgICAgICAgICAgIFJlcFFBZGRyMExvdzMyOworCXUzMiAgICAgICAgICAgIFJlcFFBZGRyMEhpZ2gzMjsKIH07CiAKIHN0cnVjdCBocHNhX3BjaV9pbmZvIHsKIAl1bnNpZ25lZCBjaGFyCWJ1czsKIAl1bnNpZ25lZCBjaGFyCWRldl9mbjsKIAl1bnNpZ25lZCBzaG9ydAlkb21haW47Ci0JX191MzIJCWJvYXJkX2lkOworCXUzMgkJYm9hcmRfaWQ7CiB9OwogCiAjcHJhZ21hIHBhY2soKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libW1jYS5jIGIvZHJpdmVycy9zY3NpL2libW1jYS5jCmluZGV4IDljMWU2YTUuLjlhNGI2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm1tY2EuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKQEAgLTIzMzYsNyArMjMzNiw3IEBACiAJY2hhciAqY3VyID0gc3RyOwogCWludCBpID0gMTsKIAotCXdoaWxlIChjdXIgJiYgaXNkaWdpdCgqY3VyKSAmJiBpIDw9IElNX01BWF9IT1NUUykgeworCXdoaWxlIChjdXIgJiYgaXNkaWdpdCgqY3VyKSAmJiBpIDwgSU1fTUFYX0hPU1RTKSB7CiAJCWludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKGN1ciwgTlVMTCwgMCk7CiAJCWlmICgoY3VyID0gc3RyY2hyKGN1ciwgJywnKSkgIT0gTlVMTCkKIAkJCWN1cisrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCBlNDc1Yjc5Li5lM2ExOGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtNDAsNyArNDAsNyBAQAogICogKENSUSksIHdoaWNoIGlzIGp1c3QgYSBidWZmZXIgb2YgMTYgYnl0ZSBlbnRyaWVzIGluIHRoZSByZWNlaXZlcidzIAogICogU2VuZGVycyBjYW5ub3QgYWNjZXNzIHRoZSBidWZmZXIgZGlyZWN0bHksIGJ1dCBzZW5kIG1lc3NhZ2VzIGJ5CiAgKiBtYWtpbmcgYSBoeXBlcnZpc29yIGNhbGwgYW5kIHBhc3NpbmcgaW4gdGhlIDE2IGJ5dGVzLiAgVGhlIGh5cGVydmlzb3IKLSAqIHB1dHMgdGhlIG1lc3NhZ2UgaW4gdGhlIG5leHQgMTYgYnl0ZSBzcGFjZSBpbiByb3VuZC1yb2JiaW4gZmFzaGlvbiwKKyAqIHB1dHMgdGhlIG1lc3NhZ2UgaW4gdGhlIG5leHQgMTYgYnl0ZSBzcGFjZSBpbiByb3VuZC1yb2JpbiBmYXNoaW9uLAogICogdHVybnMgb24gdGhlIGhpZ2ggb3JkZXIgYml0IG9mIHRoZSBtZXNzYWdlICh0aGUgdmFsaWQgYml0KSwgYW5kIAogICogZ2VuZXJhdGVzIGFuIGludGVycnVwdCB0byB0aGUgcmVjZWl2ZXIgKGlmIGludGVycnVwdHMgYXJlIHR1cm5lZCBvbi4pIAogICogVGhlIHJlY2VpdmVyIGp1c3QgdHVybnMgb2ZmIHRoZSB2YWxpZCBiaXQgd2hlbiB0aGV5IGhhdmUgY29waWVkIG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDUxN2RhM2YuLjhhODliYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTU4NCw5ICs1ODQsMTAgQEAKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGNsc19jb25uLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV9zd190Y3BfY29ubiAqdGNwX3N3X2Nvbm4gPSB0Y3BfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdGNwX3N3X2Nvbm4tPnNvY2s7CiAKIAkvKiB1c2Vyc3BhY2UgbWF5IGhhdmUgZ29vZmVkIHVwIGFuZCBub3QgYm91bmQgdXMgKi8KLQlpZiAoIXRjcF9zd19jb25uLT5zb2NrKQorCWlmICghc29jaykKIAkJcmV0dXJuOwogCS8qCiAJICogTWFrZSBzdXJlIG91ciByZWN2IHNpZGUgaXMgc3RvcHBlZC4KQEAgLTU5Nyw2ICs1OTgsMTEgQEAKIAlzZXRfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF9yeCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZ0Y3Bfc3dfY29ubi0+c29jay0+c2stPnNrX2NhbGxiYWNrX2xvY2spOwogCisJaWYgKHNvY2stPnNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNvY2stPnNrLT5za19zbGVlcCkpIHsKKwkJc29jay0+c2stPnNrX2VyciA9IEVJTzsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHNvY2stPnNrLT5za19zbGVlcCk7CisJfQorCiAJaXNjc2lfY29ubl9zdG9wKGNsc19jb25uLCBmbGFnKTsKIAlpc2NzaV9zd190Y3BfcmVsZWFzZV9jb25uKGNvbm4pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCBjMjhhNzEyLi43MDNlYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtMTkxOSwxMCArMTkxOSwxMSBAQAogc3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBpc2NzaV9laF9jbWRfdGltZWRfb3V0KHN0cnVjdCBzY3NpX2NtbmQgKnNjKQogewogCWVudW0gYmxrX2VoX3RpbWVyX3JldHVybiByYyA9IEJMS19FSF9OT1RfSEFORExFRDsKLQlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IE5VTEw7CisJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBOVUxMLCAqcnVubmluZ190YXNrOwogCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb247CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm47CisJaW50IGk7CiAKIAljbHNfc2Vzc2lvbiA9IHN0YXJnZXRfdG9fc2Vzc2lvbihzY3NpX3RhcmdldChzYy0+ZGV2aWNlKSk7CiAJc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwpAQCAtMTk0Nyw4ICsxOTQ4LDE1IEBACiAJfQogCiAJdGFzayA9IChzdHJ1Y3QgaXNjc2lfdGFzayAqKXNjLT5TQ3AucHRyOwotCWlmICghdGFzaykKKwlpZiAoIXRhc2spIHsKKwkJLyoKKwkJICogUmFjZWQgd2l0aCBjb21wbGV0aW9uLiBKdXN0IHJlc2V0IHRpbWVyLCBhbmQgbGV0IGl0CisJCSAqIGNvbXBsZXRlIG5vcm1hbGx5CisJCSAqLworCQlyYyA9IEJMS19FSF9SRVNFVF9USU1FUjsKIAkJZ290byBkb25lOworCX0KKwogCS8qCiAJICogSWYgd2UgaGF2ZSBzZW50IChhdCBsZWFzdCBxdWV1ZWQgdG8gdGhlIG5ldHdvcmsgbGF5ZXIpIGEgcGR1IG9yCiAJICogcmVjdmQgb25lIGZvciB0aGUgdGFzayBzaW5jZSB0aGUgbGFzdCB0aW1lb3V0IGFzayBmb3IKQEAgLTE5NTYsMTAgKzE5NjQsMTAgQEAKIAkgKiB3ZSBjYW4gY2hlY2sgaWYgaXQgaXMgdGhlIHRhc2sgb3IgY29ubmVjdGlvbiB3aGVuIHdlIHNlbmQgdGhlCiAJICogbm9wIGFzIGEgcGluZy4KIAkgKi8KLQlpZiAodGltZV9hZnRlcl9lcSh0YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCkpIHsKKwlpZiAodGltZV9hZnRlcih0YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCkpIHsKIAkJSVNDU0lfREJHX0VIKHNlc3Npb24sICJDb21tYW5kIG1ha2luZyBwcm9ncmVzcy4gQXNraW5nICIKIAkJCSAgICAgInNjc2ktbWwgZm9yIG1vcmUgdGltZSB0byBjb21wbGV0ZS4gIgotCQkJICAgICAiTGFzdCBkYXRhIHJlY3YgYXQgJWx1LiBMYXN0IHRpbWVvdXQgd2FzIGF0ICIKKwkJCSAgICAgIkxhc3QgZGF0YSB4ZmVyIGF0ICVsdS4gTGFzdCB0aW1lb3V0IHdhcyBhdCAiCiAJCQkgICAgICIlbHVcbi4iLCB0YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCk7CiAJCXRhc2stPmhhdmVfY2hlY2tlZF9jb25uID0gZmFsc2U7CiAJCXJjID0gQkxLX0VIX1JFU0VUX1RJTUVSOwpAQCAtMTk3Nyw2ICsxOTg1LDQzIEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgY29ubi0+c2Vzc2lvbi0+Y21kc19tYXg7IGkrKykgeworCQlydW5uaW5nX3Rhc2sgPSBjb25uLT5zZXNzaW9uLT5jbWRzW2ldOworCQlpZiAoIXJ1bm5pbmdfdGFzay0+c2MgfHwgcnVubmluZ190YXNrID09IHRhc2sgfHwKKwkJICAgICBydW5uaW5nX3Rhc2stPnN0YXRlICE9IElTQ1NJX1RBU0tfUlVOTklORykKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE9ubHkgY2hlY2sgaWYgY21kcyBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIG1hZGUKKwkJICogcHJvZ3Jlc3MsIG9yIHRoaXMgY291bGQgbmV2ZXIgZmFpbAorCQkgKi8KKwkJaWYgKHRpbWVfYWZ0ZXIocnVubmluZ190YXNrLT5zYy0+amlmZmllc19hdF9hbGxvYywKKwkJCSAgICAgICB0YXNrLT5zYy0+amlmZmllc19hdF9hbGxvYykpCisJCQljb250aW51ZTsKKworCQlpZiAodGltZV9hZnRlcihydW5uaW5nX3Rhc2stPmxhc3RfeGZlciwgdGFzay0+bGFzdF90aW1lb3V0KSkgeworCQkJLyoKKwkJCSAqIFRoaXMgdGFzayBoYXMgbm90IG1hZGUgcHJvZ3Jlc3MsIGJ1dCBhIHRhc2sKKwkJCSAqIHN0YXJ0ZWQgYmVmb3JlIHVzIGhhcyB0cmFuc2ZlcnJlZCBkYXRhIHNpbmNlCisJCQkgKiB3ZSBzdGFydGVkL2xhc3QtY2hlY2tlZC4gV2UgY291bGQgYmUgcXVldWVpbmcKKwkJCSAqIHRvbyBtYW55IHRhc2tzIG9yIHRoZSBMVSBpcyBiYWQuCisJCQkgKgorCQkJICogSWYgdGhlIGRldmljZSBpcyBiYWQgdGhlIGNtZHMgYWhlYWQgb2YgdXMgb24KKwkJCSAqIG90aGVyIGRldnMgd2lsbCBjb21wbGV0ZSwgYW5kIHRoaXMgbG9vcCB3aWxsCisJCQkgKiBldmVudHVhbGx5IGZhaWwgc3RhcnRpbmcgdGhlIHNjc2kgZWguCisJCQkgKi8KKwkJCUlTQ1NJX0RCR19FSChzZXNzaW9uLCAiQ29tbWFuZCBoYXMgbm90IG1hZGUgcHJvZ3Jlc3MgIgorCQkJCSAgICAgImJ1dCBjb21tYW5kcyBhaGVhZCBvZiBpdCBoYXZlLiAiCisJCQkJICAgICAiQXNraW5nIHNjc2ktbWwgZm9yIG1vcmUgdGltZSB0byAiCisJCQkJICAgICAiY29tcGxldGUuIE91ciBsYXN0IHhmZXIgdnMgcnVubmluZyB0YXNrICIKKwkJCQkgICAgICJsYXN0IHhmZXIgJWx1LyVsdS4gTGFzdCBjaGVjayAlbHUuXG4iLAorCQkJCSAgICAgdGFzay0+bGFzdF94ZmVyLCBydW5uaW5nX3Rhc2stPmxhc3RfeGZlciwKKwkJCQkgICAgIHRhc2stPmxhc3RfdGltZW91dCk7CisJCQlyYyA9IEJMS19FSF9SRVNFVF9USU1FUjsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwogCS8qIEFzc3VtZXMgbm9wIHRpbWVvdXQgaXMgc2hvcnRlciB0aGFuIHNjc2kgY21kIHRpbWVvdXQgKi8KIAlpZiAodGFzay0+aGF2ZV9jaGVja2VkX2Nvbm4pCiAJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzcnAuYyBiL2RyaXZlcnMvc2NzaS9saWJzcnAuYwppbmRleCBhYjE5YjNiLi4yMjc3NTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic3JwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNycC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFNDU0kgUkRBTSBQcm90b2NvbCBsaWIgZnVuY3Rpb25zCisgKiBTQ1NJIFJETUEgUHJvdG9jb2wgbGliIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBGVUpJVEEgVG9tb25vcmkgPHRvbW9mQGFjbS5vcmc+CiAgKgpAQCAtMzI4LDcgKzMyOCw3IEBACiAJaW50IG9mZnNldCwgZXJyID0gMDsKIAl1OCBmb3JtYXQ7CiAKLQlvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICogNDsKKwlvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICYgfjM7CiAKIAlkaXIgPSBzcnBfY21kX2RpcmVjdGlvbihjbWQpOwogCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQpAQCAtMzY2LDcgKzM2Niw3IEBACiB7CiAJc3RydWN0IHNycF9kaXJlY3RfYnVmICptZDsKIAlzdHJ1Y3Qgc3JwX2luZGlyZWN0X2J1ZiAqaWQ7Ci0JaW50IGxlbiA9IDAsIG9mZnNldCA9IGNtZC0+YWRkX2NkYl9sZW4gKiA0OworCWludCBsZW4gPSAwLCBvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICYgfjM7CiAJdTggZm10OwogCiAJaWYgKGRpciA9PSBETUFfVE9fREVWSUNFKQpAQCAtNDQwLDYgKzQ0MCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcnBfY21kX3F1ZXVlKTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIFJEQU0gUHJvdG9jb2wgbGliIGZ1bmN0aW9ucyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIFJETUEgUHJvdG9jb2wgbGliIGZ1bmN0aW9ucyIpOwogTU9EVUxFX0FVVEhPUigiRlVKSVRBIFRvbW9ub3JpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKaW5kZXggMWNjMjNhNi4uODRiNjk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMzE1LDYgKzMxNSw5IEBACiAjZGVmaW5lIEZDX1ZQT1JUX05FRURTX1JFR19WUEkJMHg4MDAwMCAgLyogTmVlZHMgdG8gaGF2ZSBpdHMgdnBpIHJlZ2lzdGVyZWQgKi8KICNkZWZpbmUgRkNfUlNDTl9ERUZFUlJFRAkweDEwMDAwMCAvKiBBIGRlZmVycmVkIFJTQ04gYmVpbmcgcHJvY2Vzc2VkICovCiAjZGVmaW5lIEZDX1ZQT1JUX05FRURTX0lOSVRfVlBJIDB4MjAwMDAwIC8qIE5lZWQgdG8gSU5JVF9WUEkgYmVmb3JlIEZESVNDICovCisjZGVmaW5lIEZDX1ZQT1JUX0NWTF9SQ1ZECTB4NDAwMDAwIC8qIFZMaW5rIGZhaWxlZCBkdWUgdG8gQ1ZMCSAqLworI2RlZmluZSBGQ19WRklfUkVHSVNURVJFRAkweDgwMDAwMCAvKiBWRkkgaXMgcmVnaXN0ZXJlZCAqLworI2RlZmluZSBGQ19GRElTQ19DT01QTEVURUQJMHgxMDAwMDAwLyogRkRJU0MgY29tcGxldGVkICovCiAKIAl1aW50MzJfdCBjdF9mbGFnczsKICNkZWZpbmUgRkNfQ1RfUkZGX0lECQkweDEJIC8qIFJGRl9JRCBhY2NlcHRlZCBieSBzd2l0Y2ggKi8KQEAgLTQ0OCw2ICs0NTEsOCBAQAogCXVpbnQzMl90IGN0eHRfaWQ7CiAJdWludDMyX3QgU0lEOwogCXVpbnQzMl90IG94aWQ7CisJdWludDMyX3QgZmxhZ3M7CisjZGVmaW5lIFVOU09MX1ZBTElECTB4MDAwMDAwMDEKIH07CiAKIHN0cnVjdCBscGZjX2hiYSB7CkBAIC00OTksNiArNTA0LDEwIEBACiAJCShzdHJ1Y3QgbHBmY19oYmEgKik7CiAJdm9pZCAoKmxwZmNfc3RvcF9wb3J0KQogCQkoc3RydWN0IGxwZmNfaGJhICopOworCWludCAoKmxwZmNfaGJhX2luaXRfbGluaykKKwkJKHN0cnVjdCBscGZjX2hiYSAqKTsKKwlpbnQgKCpscGZjX2hiYV9kb3duX2xpbmspCisJCShzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIAogCS8qIFNMSTQgc3BlY2lmaWMgSEJBIGRhdGEgc3RydWN0dXJlICovCkBAIC02MTMsNiArNjIyLDcgQEAKIAl1aW50MzJfdCBjZmdfZW5hYmxlX2JnOwogCXVpbnQzMl90IGNmZ19sb2dfdmVyYm9zZTsKIAl1aW50MzJfdCBjZmdfYWVyX3N1cHBvcnQ7CisJdWludDMyX3QgY2ZnX3N1cHByZXNzX2xpbmtfdXA7CiAKIAlscGZjX3ZwZF90IHZwZDsJCS8qIHZpdGFsIHByb2R1Y3QgZGF0YSAqLwogCkBAIC03OTAsNyArODAwLDcgQEAKIAl1aW50MTZfdCB2bGFuX2lkOwogCXN0cnVjdCBsaXN0X2hlYWQgZmNmX2Nvbm5fcmVjX2xpc3Q7CiAKLQlzdHJ1Y3QgbXV0ZXggY3RfZXZlbnRfbXV0ZXg7IC8qIHN5bmNocm9uaXplIGFjY2VzcyB0byBjdF9ldl93YWl0ZXJzICovCisJc3BpbmxvY2tfdCBjdF9ldl9sb2NrOyAvKiBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gY3RfZXZfd2FpdGVycyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY3RfZXZfd2FpdGVyczsKIAlzdHJ1Y3QgdW5zb2xfcmN2X2N0X2N0eCBjdF9jdHhbNjRdOwogCXVpbnQzMl90IGN0eF9pZHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDkxNTQyZjcuLmM5OTJlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC00ODIsNiArNDgyLDQxIEBACiB9CiAKIC8qKgorICogbHBmY19saW5rX3N0YXRlX3N0b3JlIC0gVHJhbnNpdGlvbiB0aGUgbGlua19zdGF0ZSBvbiBhbiBIQkEgcG9ydAorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbmUgb3IgbW9yZSBscGZjX3BvbGxpbmdfZmxhZ3MgdmFsdWVzLgorICogQGNvdW50OiBub3QgdXNlZC4KKyAqCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBpZiB0aGUgYnVmZmVyIGlzIG5vdCAidXAiIG9yICJkb3duIgorICogcmV0dXJuIGZyb20gbGluayBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gaWYgbm9uLXplcm8KKyAqIGxlbmd0aCBvZiB0aGUgYnVmIG9uIHN1Y2Nlc3MKKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX2xpbmtfc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CisKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICgoc3RybmNtcChidWYsICJ1cCIsIHNpemVvZigidXAiKSAtIDEpID09IDApICYmCisJCQkocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0xJTktfRE9XTikpCisJCXN0YXR1cyA9IHBoYmEtPmxwZmNfaGJhX2luaXRfbGluayhwaGJhKTsKKwllbHNlIGlmICgoc3RybmNtcChidWYsICJkb3duIiwgc2l6ZW9mKCJkb3duIikgLSAxKSA9PSAwKSAmJgorCQkJKHBoYmEtPmxpbmtfc3RhdGUgPj0gTFBGQ19MSU5LX1VQKSkKKwkJc3RhdHVzID0gcGhiYS0+bHBmY19oYmFfZG93bl9saW5rKHBoYmEpOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJZWxzZQorCQlyZXR1cm4gc3RhdHVzOworfQorCisvKioKICAqIGxwZmNfbnVtX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdyAtIFJldHVybiBzdW0gb2YgbWFwcGVkIGFuZCB1bm1hcHBlZCB2cG9ydHMKICAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgogICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgpAQCAtMTIxOSw3ICsxMjU0LDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpO1wKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhO1wKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhO1wKLQlpbnQgdmFsID0gMDtcCisJdWludCB2YWwgPSAwO1wKIAl2YWwgPSBwaGJhLT5jZmdfIyNhdHRyO1wKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIixcCiAJCQlwaGJhLT5jZmdfIyNhdHRyKTtcCkBAIC0xMjQ3LDcgKzEyODIsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7XAotCWludCB2YWwgPSAwO1wKKwl1aW50IHZhbCA9IDA7XAogCXZhbCA9IHBoYmEtPmNmZ18jI2F0dHI7XAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIixcCiAJCQlwaGJhLT5jZmdfIyNhdHRyKTtcCkBAIC0xMjc0LDcgKzEzMDksNyBAQAogICoqLwogI2RlZmluZSBscGZjX3BhcmFtX2luaXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkgXAorbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludCB2YWwpIFwKIHsgXAogCWlmICh2YWwgPj0gbWludmFsICYmIHZhbCA8PSBtYXh2YWwpIHtcCiAJCXBoYmEtPmNmZ18jI2F0dHIgPSB2YWw7XApAQCAtMTMwOSw3ICsxMzQ0LDcgQEAKICAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9zZXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgdmFsKSBcCitscGZjXyMjYXR0ciMjX3NldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQgdmFsKSBcCiB7IFwKIAlpZiAodmFsID49IG1pbnZhbCAmJiB2YWwgPD0gbWF4dmFsKSB7XAogCQlwaGJhLT5jZmdfIyNhdHRyID0gdmFsO1wKQEAgLTEzNTAsNyArMTM4NSw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTtcCi0JaW50IHZhbD0wO1wKKwl1aW50IHZhbCA9IDA7XAogCWlmICghaXNkaWdpdChidWZbMF0pKVwKIAkJcmV0dXJuIC1FSU5WQUw7XAogCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmdmFsKSAhPSAxKVwKQEAgLTEzODIsNyArMTQxNyw3IEBACiB7IFwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpO1wKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhO1wKLQlpbnQgdmFsID0gMDtcCisJdWludCB2YWwgPSAwO1wKIAl2YWwgPSB2cG9ydC0+Y2ZnXyMjYXR0cjtcCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZwb3J0LT5jZmdfIyNhdHRyKTtcCiB9CkBAIC0xNDA5LDcgKzE0NDQsNyBAQAogeyBcCiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCi0JaW50IHZhbCA9IDA7XAorCXVpbnQgdmFsID0gMDtcCiAJdmFsID0gdnBvcnQtPmNmZ18jI2F0dHI7XAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIiwgdnBvcnQtPmNmZ18jI2F0dHIpO1wKIH0KQEAgLTE0MzQsNyArMTQ2OSw3IEBACiAgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1faW5pdChhdHRyLCBkZWZhdWx0LCBtaW52YWwsIG1heHZhbCkJXAogc3RhdGljIGludCBcCi1scGZjXyMjYXR0ciMjX2luaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKSBcCitscGZjXyMjYXR0ciMjX2luaXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50IHZhbCkgXAogeyBcCiAJaWYgKHZhbCA+PSBtaW52YWwgJiYgdmFsIDw9IG1heHZhbCkge1wKIAkJdnBvcnQtPmNmZ18jI2F0dHIgPSB2YWw7XApAQCAtMTQ2Niw3ICsxNTAxLDcgQEAKICAqKi8KICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9zZXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKSBcCitscGZjXyMjYXR0ciMjX3NldChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQgdmFsKSBcCiB7IFwKIAlpZiAodmFsID49IG1pbnZhbCAmJiB2YWwgPD0gbWF4dmFsKSB7XAogCQl2cG9ydC0+Y2ZnXyMjYXR0ciA9IHZhbDtcCkBAIC0xNTAyLDcgKzE1MzcsNyBAQAogeyBcCiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCi0JaW50IHZhbD0wO1wKKwl1aW50IHZhbCA9IDA7XAogCWlmICghaXNkaWdpdChidWZbMF0pKVwKIAkJcmV0dXJuIC1FSU5WQUw7XAogCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmdmFsKSAhPSAxKVwKQEAgLTE1MTUsMjIgKzE1NTAsMjIgQEAKIAogCiAjZGVmaW5lIExQRkNfQVRUUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKQogCiAjZGVmaW5lIExQRkNfQVRUUl9SKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY19wYXJhbV9zaG93KG5hbWUpXAogbHBmY19wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQogCiAjZGVmaW5lIExQRkNfQVRUUl9SVyhuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1fc2hvdyhuYW1lKVwKIGxwZmNfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKQEAgLTE1NDAsMTYgKzE1NzUsMTYgQEAKIAkJICAgbHBmY18jI25hbWUjI19zaG93LCBscGZjXyMjbmFtZSMjX3N0b3JlKQogCiAjZGVmaW5lIExQRkNfQVRUUl9IRVhfUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1faGV4X3Nob3cobmFtZSlcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gLCBscGZjXyMjbmFtZSMjX3Nob3csIE5VTEwpCiAKICNkZWZpbmUgTFBGQ19BVFRSX0hFWF9SVyhuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1faGV4X3Nob3cobmFtZSlcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCkBAIC0xNTU5LDIyICsxNTk0LDIyIEBACiAJCSAgIGxwZmNfIyNuYW1lIyNfc2hvdywgbHBmY18jI25hbWUjI19zdG9yZSkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFIobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfdnBvcnRfcGFyYW1fc2hvdyhuYW1lKVwKIGxwZmNfdnBvcnRfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjXyMjbmFtZSwgU19JUlVHTyAsIGxwZmNfIyNuYW1lIyNfc2hvdywgTlVMTCkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX3Nob3cobmFtZSlcCiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCkBAIC0xNTg0LDE2ICsxNjE5LDE2IEBACiAJCSAgIGxwZmNfIyNuYW1lIyNfc2hvdywgbHBmY18jI25hbWUjI19zdG9yZSkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfSEVYX1IobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQogCiAjZGVmaW5lIExQRkNfVlBPUlRfQVRUUl9IRVhfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXApAQCAtMTYxNCw3ICsxNjQ5LDggQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihwb3J0bnVtLCBTX0lSVUdPLCBscGZjX3Zwb3J0bnVtX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGZ3cmV2LCBTX0lSVUdPLCBscGZjX2Z3cmV2X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGhkdywgU19JUlVHTywgbHBmY19oZHdfc2hvdywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIobGlua19zdGF0ZSwgU19JUlVHTywgbHBmY19saW5rX3N0YXRlX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVJVR08gfCBTX0lXVVNSLCBscGZjX2xpbmtfc3RhdGVfc2hvdywKKwkJbHBmY19saW5rX3N0YXRlX3N0b3JlKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihvcHRpb25fcm9tX3ZlcnNpb24sIFNfSVJVR08sCiAJCSAgIGxwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG51bV9kaXNjb3ZlcmVkX3BvcnRzLCBTX0lSVUdPLApAQCAtMTg5Nyw2ICsxOTMzLDE1IEBACiAJCQkgbHBmY19lbmFibGVfbnBpdl9zaG93LCBOVUxMKTsKIAogLyoKKyMgbHBmY19zdXBwcmVzc19saW5rX3VwOiAgQnJpbmcgbGluayB1cCBhdCBpbml0aWFsaXphdGlvbgorIyAgICAgICAgICAgIDB4MCAgPSBicmluZyBsaW5rIHVwIChpc3N1ZSBNQlhfSU5JVF9MSU5LKQorIyAgICAgICAgICAgIDB4MSAgPSBkbyBOT1QgYnJpbmcgbGluayB1cCBhdCBpbml0aWFsaXphdGlvbihNQlhfSU5JVF9MSU5LKQorIyAgICAgICAgICAgIDB4MiAgPSBuZXZlciBicmluZyB1cCBsaW5rCisjIERlZmF1bHQgdmFsdWUgaXMgMC4KKyovCitMUEZDX0FUVFJfUihzdXBwcmVzc19saW5rX3VwLCAwLCAwLCAyLCAiU3VwcHJlc3MgTGluayBVcCBhdCBpbml0aWFsaXphdGlvbiIpOworCisvKgogIyBscGZjX25vZGV2X3RtbzogSWYgc2V0LCBpdCB3aWxsIGhvbGQgYWxsIEkvTyBlcnJvcnMgb24gZGV2aWNlcyB0aGF0IGRpc2FwcGVhcgogIyB1bnRpbCB0aGUgdGltZXIgZXhwaXJlcy4gVmFsdWUgcmFuZ2UgaXMgWzAsMjU1XS4gRGVmYXVsdCB2YWx1ZSBpcyAzMC4KICovCkBAIC0zMTE0LDEyICszMTU5LDEyIEBACiAvKgogIyBscGZjX3VzZV9tc2k6IFVzZSBNU0kgKE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cykgaW4gc3lzdGVtcyB0aGF0CiAjCQlzdXBwb3J0IHRoaXMgZmVhdHVyZQotIyAgICAgICAwICA9IE1TSSBkaXNhYmxlZCAoZGVmYXVsdCkKKyMgICAgICAgMCAgPSBNU0kgZGlzYWJsZWQKICMgICAgICAgMSAgPSBNU0kgZW5hYmxlZAotIyAgICAgICAyICA9IE1TSS1YIGVuYWJsZWQKLSMgVmFsdWUgcmFuZ2UgaXMgWzAsMl0uIERlZmF1bHQgdmFsdWUgaXMgMC4KKyMgICAgICAgMiAgPSBNU0ktWCBlbmFibGVkIChkZWZhdWx0KQorIyBWYWx1ZSByYW5nZSBpcyBbMCwyXS4gRGVmYXVsdCB2YWx1ZSBpcyAyLgogKi8KLUxQRkNfQVRUUl9SKHVzZV9tc2ksIDAsIDAsIDIsICJVc2UgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzICgxKSBvciAiCitMUEZDX0FUVFJfUih1c2VfbXNpLCAyLCAwLCAyLCAiVXNlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyAoMSkgb3IgIgogCSAgICAiTVNJLVggKDIpLCBpZiBwb3NzaWJsZSIpOwogCiAvKgpAQCAtMzI3OCw2ICszMzIzLDcgQEAKIAkmZGV2X2F0dHJfbHBmY19wcm90X3NnX3NlZ19jbnQsCiAJJmRldl9hdHRyX2xwZmNfYWVyX3N1cHBvcnQsCiAJJmRldl9hdHRyX2xwZmNfYWVyX3N0YXRlX2NsZWFudXAsCisJJmRldl9hdHRyX2xwZmNfc3VwcHJlc3NfbGlua191cCwKIAlOVUxMLAogfTsKIApAQCAtNDQ1Niw3ICs0NTAyLDcgQEAKIAlscGZjX2hiYV9xdWV1ZV9kZXB0aF9pbml0KHBoYmEsIGxwZmNfaGJhX3F1ZXVlX2RlcHRoKTsKIAlscGZjX2hiYV9sb2dfdmVyYm9zZV9pbml0KHBoYmEsIGxwZmNfbG9nX3ZlcmJvc2UpOwogCWxwZmNfYWVyX3N1cHBvcnRfaW5pdChwaGJhLCBscGZjX2Flcl9zdXBwb3J0KTsKLQorCWxwZmNfc3VwcHJlc3NfbGlua191cF9pbml0KHBoYmEsIGxwZmNfc3VwcHJlc3NfbGlua191cCk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwppbmRleCBhNWQ5MDQ4Li5mM2YxYmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlICJscGZjX3NsaS5oIgogI2luY2x1ZGUgImxwZmNfc2xpNC5oIgogI2luY2x1ZGUgImxwZmNfbmwuaCIKKyNpbmNsdWRlICJscGZjX2JzZy5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTQxLDE0ICs0MywxODMgQEAKICNpbmNsdWRlICJscGZjX3Zwb3J0LmgiCiAjaW5jbHVkZSAibHBmY192ZXJzaW9uLmgiCiAKK3N0cnVjdCBscGZjX2JzZ19ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBrcmVmIGtyZWY7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisKKwkvKiBFdmVudCB0eXBlIGFuZCB3YWl0ZXIgaWRlbnRpZmllcnMgKi8KKwl1aW50MzJfdCB0eXBlX21hc2s7CisJdWludDMyX3QgcmVxX2lkOworCXVpbnQzMl90IHJlZ19pZDsKKworCS8qIG5leHQgdHdvIGZsYWdzIGFyZSBoZXJlIGZvciB0aGUgYXV0by1kZWxldGUgbG9naWMgKi8KKwl1bnNpZ25lZCBsb25nIHdhaXRfdGltZV9zdGFtcDsKKwlpbnQgd2FpdGluZzsKKworCS8qIHNlZW4gYW5kIG5vdCBzZWVuIGV2ZW50cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRzX3RvX2dldDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19zZWU7CisKKwkvKiBqb2Igd2FpdGluZyBmb3IgdGhpcyBldmVudCB0byBmaW5pc2ggKi8KKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqc2V0X2pvYjsKK307CisKK3N0cnVjdCBscGZjX2JzZ19pb2NiIHsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnE7CisJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYm1wOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCisJLyogam9iIHdhaXRpbmcgZm9yIHRoaXMgaW9jYiB0byBmaW5pc2ggKi8KKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqc2V0X2pvYjsKK307CisKK3N0cnVjdCBscGZjX2JzZ19tYm94IHsKKwlMUEZDX01CT1hRX3QgKnBtYm94cTsKKwlNQUlMQk9YX3QgKm1iOworCisJLyogam9iIHdhaXRpbmcgZm9yIHRoaXMgbWJveCBjb21tYW5kIHRvIGZpbmlzaCAqLworCXN0cnVjdCBmY19ic2dfam9iICpzZXRfam9iOworfTsKKworI2RlZmluZSBUWVBFX0VWVCAJMQorI2RlZmluZSBUWVBFX0lPQ0IJMgorI2RlZmluZSBUWVBFX01CT1gJMworc3RydWN0IGJzZ19qb2JfZGF0YSB7CisJdWludDMyX3QgdHlwZTsKKwl1bmlvbiB7CisJCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OworCQlzdHJ1Y3QgbHBmY19ic2dfaW9jYiBpb2NiOworCQlzdHJ1Y3QgbHBmY19ic2dfbWJveCBtYm94OworCX0gY29udGV4dF91bjsKK307CisKK3N0cnVjdCBldmVudF9kYXRhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJdWludDMyX3QgdHlwZTsKKwl1aW50MzJfdCBpbW1lZF9kYXQ7CisJdm9pZCAqZGF0YTsKKwl1aW50MzJfdCBsZW47Cit9OworCisjZGVmaW5lIEJVRl9TWl80SyA0MDk2CisjZGVmaW5lIFNMSV9DVF9FTFhfTE9PUEJBQ0sgMHgxMAorCitlbnVtIEVMWF9MT09QQkFDS19DTUQgeworCUVMWF9MT09QQkFDS19YUklfU0VUVVAsCisJRUxYX0xPT1BCQUNLX0RBVEEsCit9OworCisjZGVmaW5lIEVMWF9MT09QQkFDS19IRUFERVJfU1ogXAorCShzaXplX3QpKCYoKHN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICopTlVMTCktPnVuKQorCitzdHJ1Y3QgbHBmY19kbWFidWZleHQgeworCXN0cnVjdCBscGZjX2RtYWJ1ZiBkbWE7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBmbGFnOworfTsKKwogLyoqCi0gKiBscGZjX2JzZ19ycG9ydF9jdCAtIHNlbmQgYSBDVCBjb21tYW5kIGZyb20gYSBic2cgcmVxdWVzdAotICogQGpvYjogZmNfYnNnX2pvYiB0byBoYW5kbGUKLSAqLwotc3RhdGljIGludAotbHBmY19ic2dfcnBvcnRfY3Qoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKKyAqIGxwZmNfYnNnX3NlbmRfbWdtdF9jbWRfY21wIC0gbHBmY19ic2dfc2VuZF9tZ210X2NtZCdzIGNvbXBsZXRpb24gaGFuZGxlcgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2JxOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEByc3Bpb2NicTogUG9pbnRlciB0byByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgaW9jYnMgaXNzdWVkIHVzaW5nCisgKiBscGZjX2JzZ19zZW5kX21nbXRfY21kIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkIHdoaWNoCisgKiBjbGVhbnMgdXAgdGhlIFNMSSBsYXllciBvYmplY3RzLgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSBpb2NiIHRvIHRoZQorICogcmVzcG9uc2UgaW9jYiBtZW1vcnkgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgb2YKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdCBhbmQgdGhlbiB3YWtlcyB1cCB0aGUgdGhyZWFkIHdoaWNoCisgKiBzbGVlcHMgZm9yIHRoZSBpb2NiIGNvbXBsZXRpb24uCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19ic2dfc2VuZF9tZ210X2NtZF9jbXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQogewotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gam9iLT5zaG9zdDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXN0cnVjdCBmY19ic2dfam9iICpqb2I7CisJSU9DQl90ICpyc3A7CisJc3RydWN0IGxwZmNfZG1hYnVmICpibXA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJc3RydWN0IGxwZmNfYnNnX2lvY2IgKmlvY2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gY21kaW9jYnEtPmNvbnRleHQxOworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlpb2NiID0gJmRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYjsKKwlqb2IgPSBpb2NiLT5zZXRfam9iOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7IC8qIHNvIHRpbWVvdXQgaGFuZGxlciBkb2VzIG5vdCByZXBseSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX1dBS0U7CisJaWYgKGNtZGlvY2JxLT5jb250ZXh0MiAmJiByc3Bpb2NicSkKKwkJbWVtY3B5KCYoKHN0cnVjdCBscGZjX2lvY2JxICopY21kaW9jYnEtPmNvbnRleHQyKS0+aW9jYiwKKwkJICAgICAgICZyc3Bpb2NicS0+aW9jYiwgc2l6ZW9mKElPQ0JfdCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisKKwlibXAgPSBpb2NiLT5ibXA7CisJcnNwaW9jYnEgPSBpb2NiLT5yc3Bpb2NicTsKKwlyc3AgPSAmcnNwaW9jYnEtPmlvY2I7CisJbmRscCA9IGlvY2ItPm5kbHA7CisKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKworCWlmIChyc3AtPnVscFN0YXR1cykgeworCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgeworCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7CisJCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6CisJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCWJyZWFrOworCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKKwkJCQlyYyA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJjID0gLUVBQ0NFUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlCisJCQlyYyA9IC1FQUNDRVM7CisJfSBlbHNlCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQlyc3AtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplOworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCWxwZmNfbmxwX3B1dChuZGxwKTsKKwlrZnJlZShibXApOworCWtmcmVlKGRkX2RhdGEpOworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+am9iX2RvbmUoam9iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfYnNnX3NlbmRfbWdtdF9jbWQgLSBzZW5kIGEgQ1QgY29tbWFuZCBmcm9tIGEgYnNnIHJlcXVlc3QKKyAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCisgKiovCitzdGF0aWMgaW50CitscGZjX2JzZ19zZW5kX21nbXRfY21kKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBqb2ItPnJwb3J0LT5kZF9kYXRhOwpAQCAtNjUsNTcgKzIzNiw2MCBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbCA9IE5VTEw7CiAJaW50IG51bWJkZTsKIAlkbWFfYWRkcl90IGJ1c2FkZHI7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwl1aW50MzJfdCBjcmVnX3ZhbDsKIAlpbnQgcmMgPSAwOwogCiAJLyogaW4gY2FzZSBubyBkYXRhIGlzIHRyYW5zZmVycmVkICovCiAJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAorCS8qIGFsbG9jYXRlIG91ciBic2cgdHJhY2tpbmcgc3RydWN0dXJlICovCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjczMyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBkZF9kYXRhXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG5vX2RkX2RhdGE7CisJfQorCiAJaWYgKCFscGZjX25scF9nZXQobmRscCkpIHsKLQkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVOT0RFVjsKLQkJcmV0dXJuIDA7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBub19uZGxwOworCX0KKworCWJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghYm1wKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmcmVlX25kbHA7CiAJfQogCiAJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0VMU19TTkRfTUFTSykgewogCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9uZGxwX2V4aXQ7CisJCWdvdG8gZnJlZV9ibXA7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAljbWRpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKIAlpZiAoIWNtZGlvY2JxKSB7CiAJCXJjID0gLUVOT01FTTsKLQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQlnb3RvIGZyZWVfbmRscF9leGl0OworCQlnb3RvIGZyZWVfYm1wOwogCX0KLQljbWQgPSAmY21kaW9jYnEtPmlvY2I7CiAKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CiAJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CiAJaWYgKCFyc3Bpb2NicSkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9jbWRpb2NicTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJcnNwID0gJnJzcGlvY2JxLT5pb2NiOwotCi0JYm1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFibXApIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQlnb3RvIGZyZWVfcnNwaW9jYnE7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAlibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJmJtcC0+cGh5cyk7CiAJaWYgKCFibXAtPnZpcnQpIHsKIAkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfYm1wOworCQlnb3RvIGZyZWVfcnNwaW9jYnE7CiAJfQotCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCUlOSVRfTElTVF9IRUFEKCZibXAtPmxpc3QpOwogCWJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIGJtcC0+dmlydDsKLQogCXJlcXVlc3RfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAogCQkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKIAlmb3JfZWFjaF9zZyhqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LCBzZ2VsLCByZXF1ZXN0X25zZWcsIG51bWJkZSkgewpAQCAtMTU3LDc4ICszMzEsMTUyIEBACiAJY21kLT51bHBDb250ZXh0ID0gbmRscC0+bmxwX3JwaTsKIAljbWQtPnVscE93bmVyID0gT1dOX0NISVA7CiAJY21kaW9jYnEtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7Ci0JY21kaW9jYnEtPmNvbnRleHQxID0gTlVMTDsKLQljbWRpb2NicS0+Y29udGV4dDIgPSBOVUxMOworCWNtZGlvY2JxLT5jb250ZXh0MyA9IGJtcDsKIAljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOwotCiAJdGltZW91dCA9IHBoYmEtPmZjX3JhdG92ICogMjsKLQlqb2ItPmRkX2RhdGEgPSBjbWRpb2NicTsKKwljbWQtPnVscFRpbWVvdXQgPSB0aW1lb3V0OwogCi0JcmMgPSBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIHJzcGlvY2JxLAotCQkJCQl0aW1lb3V0ICsgTFBGQ19EUlZSX1RJTUVPVVQpOworCWNtZGlvY2JxLT5pb2NiX2NtcGwgPSBscGZjX2JzZ19zZW5kX21nbXRfY21kX2NtcDsKKwljbWRpb2NicS0+Y29udGV4dDEgPSBkZF9kYXRhOworCWNtZGlvY2JxLT5jb250ZXh0MiA9IHJzcGlvY2JxOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX0lPQ0I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmNtZGlvY2JxID0gY21kaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnJzcGlvY2JxID0gcnNwaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2IgPSBqb2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmJtcCA9IGJtcDsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscCA9IG5kbHA7CiAKLQlpZiAocmMgIT0gSU9DQl9USU1FRE9VVCkgewotCQlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAotCQkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOwotCQlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKLQkJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgeworCQljcmVnX3ZhbCA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CisJCWNyZWdfdmFsIHw9IChIQ19SMElOVF9FTkEgPDwgTFBGQ19GQ1BfUklORyk7CisJCXdyaXRlbChjcmVnX3ZhbCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KIAl9CiAKLQlpZiAocmMgPT0gSU9DQl9USU1FRE9VVCkgewotCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKLQkJcmMgPSAtRUFDQ0VTOwotCQlnb3RvIGZyZWVfbmRscF9leGl0OwotCX0KKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIDApOwogCi0JaWYgKHJjICE9IElPQ0JfU1VDQ0VTUykgewotCQlyYyA9IC1FQUNDRVM7Ci0JCWdvdG8gZnJlZV9vdXRkbXA7Ci0JfQorCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KIAotCWlmIChyc3AtPnVscFN0YXR1cykgewotCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgewotCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7Ci0JCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6Ci0JCQkJcmMgPSAtRVRJTUVET1VUOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKLQkJCQlyYyA9IC1FRkFVTFQ7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJjID0gLUVBQ0NFUzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWdvdG8gZnJlZV9vdXRkbXA7Ci0JCX0KLQl9IGVsc2UKLQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KLQkJCXJzcC0+dW4uZ2VucmVxNjQuYmRsLmJkZVNpemU7CisJLyogaW9jYiBmYWlsZWQgc28gY2xlYW51cCAqLworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOwogCi1mcmVlX291dGRtcDoKLQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGJtcC0+dmlydCwgYm1wLT5waHlzKTsKLWZyZWVfYm1wOgotCWtmcmVlKGJtcCk7CisKIGZyZWVfcnNwaW9jYnE6CiAJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CiBmcmVlX2NtZGlvY2JxOgogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOwotCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLWZyZWVfbmRscF9leGl0OgorZnJlZV9ibXA6CisJa2ZyZWUoYm1wKTsKK2ZyZWVfbmRscDoKIAlscGZjX25scF9wdXQobmRscCk7Ci0KK25vX25kbHA6CisJa2ZyZWUoZGRfZGF0YSk7Citub19kZF9kYXRhOgogCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfcnBvcnRfZWxzX2NtcCAtIGxwZmNfYnNnX3Jwb3J0X2VscydzIGNvbXBsZXRpb24gaGFuZGxlcgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2JxOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEByc3Bpb2NicTogUG9pbnRlciB0byByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgaW9jYnMgaXNzdWVkIHVzaW5nCisgKiBscGZjX2JzZ19ycG9ydF9lbHNfY21wIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIHRocmVhZCB3aGljaAorICogY2xlYW5zIHVwIHRoZSBTTEkgbGF5ZXIgb2JqZWN0cy4KKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UgaW9jYiB0byB0aGUKKyAqIHJlc3BvbnNlIGlvY2IgbWVtb3J5IG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyIG9mCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQgYW5kIHRoZW4gd2FrZXMgdXAgdGhlIHRocmVhZCB3aGljaAorICogc2xlZXBzIGZvciB0aGUgaW9jYiBjb21wbGV0aW9uLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfYnNnX3Jwb3J0X2Vsc19jbXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQoreworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYjsKKwlJT0NCX3QgKnJzcDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnBidWZsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZmNfYnNnX2N0ZWxzX3JlcGx5ICplbHNfcmVwbHk7CisJdWludDhfdCAqcmp0X2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gY21kaW9jYnEtPmNvbnRleHQxOworCS8qIG5vcm1hbCBjb21wbGV0aW9uIGFuZCB0aW1lb3V0IGNyb3NzZWQgcGF0aHMsIGFscmVhZHkgZG9uZSAqLworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fV0FLRTsKKwlpZiAoY21kaW9jYnEtPmNvbnRleHQyICYmIHJzcGlvY2JxKQorCQltZW1jcHkoJigoc3RydWN0IGxwZmNfaW9jYnEgKiljbWRpb2NicS0+Y29udGV4dDIpLT5pb2NiLAorCQkgICAgICAgJnJzcGlvY2JxLT5pb2NiLCBzaXplb2YoSU9DQl90KSk7CisKKwlqb2IgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYjsKKwljbWRpb2NicSA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5jbWRpb2NicTsKKwlyc3Bpb2NicSA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5yc3Bpb2NicTsKKwlyc3AgPSAmcnNwaW9jYnEtPmlvY2I7CisJbmRscCA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5uZGxwOworCisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisKKwlpZiAoam9iLT5yZXBseS0+cmVzdWx0ID09IC1FQUdBSU4pCisJCXJjID0gLUVBR0FJTjsKKwllbHNlIGlmIChyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfU1VDQ0VTUykKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCXJzcC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemU7CisJZWxzZSBpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xTX1JKVCkgeworCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJc2l6ZW9mKHN0cnVjdCBmY19ic2dfY3RlbHNfcmVwbHkpOworCQkvKiBMU19SSlQgZGF0YSByZXR1cm5lZCBpbiB3b3JkIDQgKi8KKwkJcmp0X2RhdGEgPSAodWludDhfdCAqKSZyc3AtPnVuLnVscFdvcmRbNF07CisJCWVsc19yZXBseSA9ICZqb2ItPnJlcGx5LT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5OworCQllbHNfcmVwbHktPnN0YXR1cyA9IEZDX0NURUxTX1NUQVRVU19SRUpFQ1Q7CisJCWVsc19yZXBseS0+cmp0X2RhdGEuYWN0aW9uID0gcmp0X2RhdGFbM107CisJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2NvZGUgPSByanRfZGF0YVsyXTsKKwkJZWxzX3JlcGx5LT5yanRfZGF0YS5yZWFzb25fZXhwbGFuYXRpb24gPSByanRfZGF0YVsxXTsKKwkJZWxzX3JlcGx5LT5yanRfZGF0YS52ZW5kb3JfdW5pcXVlID0gcmp0X2RhdGFbMF07CisJfSBlbHNlCisJCXJjID0gLUVJTzsKKworCXBidWZsaXN0ID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NicS0+Y29udGV4dDM7CisJbHBmY19tYnVmX2ZyZWUocGhiYSwgcGJ1Zmxpc3QtPnZpcnQsIHBidWZsaXN0LT5waHlzKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlscGZjX25scF9wdXQobmRscCk7CisJa2ZyZWUoZGRfZGF0YSk7CisJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOwogCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KIAlqb2ItPmpvYl9kb25lKGpvYik7Ci0KLQlyZXR1cm4gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuOwogfQogCiAvKioKICAqIGxwZmNfYnNnX3Jwb3J0X2VscyAtIHNlbmQgYW4gRUxTIGNvbW1hbmQgZnJvbSBhIGJzZyByZXF1ZXN0CiAgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQotICovCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2JzZ19ycG9ydF9lbHMoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKQEAgLTIzNiw3ICs0ODQsNiBAQAogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gam9iLT5ycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IHJkYXRhLT5wbm9kZTsKLQogCXVpbnQzMl90IGVsc2NtZDsKIAl1aW50MzJfdCBjbWRzaXplOwogCXVpbnQzMl90IHJzcHNpemU7CkBAIC0yNDgsMjAgKzQ5NSwzMCBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcHJzcDsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKnBidWZsaXN0ID0gTlVMTDsKIAlzdHJ1Y3QgdWxwX2JkZTY0ICpicGw7Ci0JaW50IGlvY2Jfc3RhdHVzOwogCWludCByZXF1ZXN0X25zZWc7CiAJaW50IHJlcGx5X25zZWc7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2VsID0gTlVMTDsKIAlpbnQgbnVtYmRlOwogCWRtYV9hZGRyX3QgYnVzYWRkcjsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVpbnQzMl90IGNyZWdfdmFsOwogCWludCByYyA9IDA7CiAKIAkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgdHJhbnNmZXJyZWQgKi8KIAlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCisJLyogYWxsb2NhdGUgb3VyIGJzZyB0cmFja2luZyBzdHJ1Y3R1cmUgKi8KKwlkZF9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJzZ19qb2JfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGRfZGF0YSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM1IEZhaWxlZCBhbGxvY2F0aW9uIG9mIGRkX2RhdGFcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbm9fZGRfZGF0YTsKKwl9CisKIAlpZiAoIWxwZmNfbmxwX2dldChuZGxwKSkgewogCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfZGRfZGF0YTsKIAl9CiAKIAllbHNjbWQgPSBqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5yX2Vscy5lbHNfY29kZTsKQEAgLTI3MSwyNCArNTI4LDI0IEBACiAJaWYgKCFyc3Bpb2NicSkgewogCQlscGZjX25scF9wdXQobmRscCk7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZnJlZV9kZF9kYXRhOwogCX0KIAogCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKIAlycGkgPSBuZGxwLT5ubHBfcnBpOwogCi0JY21kaW9jYnEgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYS0+cHBvcnQsIDEsIGNtZHNpemUsIDAsIG5kbHAsCisJY21kaW9jYnEgPSBscGZjX3ByZXBfZWxzX2lvY2IodnBvcnQsIDEsIGNtZHNpemUsIDAsIG5kbHAsCiAJCQkJICAgICAgbmRscC0+bmxwX0RJRCwgZWxzY21kKTsKLQogCWlmICghY21kaW9jYnEpIHsKLQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7Ci0JCXJldHVybiAtRUlPOworCQlyYyA9IC1FSU87CisJCWdvdG8gZnJlZV9yc3Bpb2NicTsKIAl9CiAKLQlqb2ItPmRkX2RhdGEgPSBjbWRpb2NicTsKKwkvKiBwcmVwIGVscyBpb2NiIHNldCBjb250ZXh0MSB0byB0aGUgbmRscCwgY29udGV4dDIgdG8gdGhlIGNvbW1hbmQKKwkgKiBkbWFidWYsIGNvbnRleHQzIGhvbGRzIHRoZSBkYXRhIGRtYWJ1ZgorCSAqLwogCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2JxLT5jb250ZXh0MjsKIAlwcnNwID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBwY21kLT5saXN0Lm5leHQ7Ci0KIAlscGZjX21idWZfZnJlZShwaGJhLCBwY21kLT52aXJ0LCBwY21kLT5waHlzKTsKIAlrZnJlZShwY21kKTsKIAlscGZjX21idWZfZnJlZShwaGJhLCBwcnNwLT52aXJ0LCBwcnNwLT5waHlzKTsKQEAgLTMwMCw3ICs1NTcsNiBAQAogCiAJcmVxdWVzdF9uc2VnID0gcGNpX21hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCiAJCQkJICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOwotCiAJZm9yX2VhY2hfc2coam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwgc2dlbCwgcmVxdWVzdF9uc2VnLCBudW1iZGUpIHsKIAkJYnVzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOwogCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKQEAgLTMyMiw3ICs1NzgsNiBAQAogCQlicGwtPmFkZHJIaWdoID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKGJ1c2FkZHIpKTsKIAkJYnBsKys7CiAJfQotCiAJY21kaW9jYnEtPmlvY2IudW4uZWxzcmVxNjQuYmRsLmJkZVNpemUgPQogCQkocmVxdWVzdF9uc2VnICsgcmVwbHlfbnNlZykgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCk7CiAJY21kaW9jYnEtPmlvY2IudWxwQ29udGV4dCA9IHJwaTsKQEAgLTMzMCwxMDIgKzU4NSw2MiBAQAogCWNtZGlvY2JxLT5jb250ZXh0MSA9IE5VTEw7CiAJY21kaW9jYnEtPmNvbnRleHQyID0gTlVMTDsKIAotCWlvY2Jfc3RhdHVzID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLAotCQkJCQlyc3Bpb2NicSwgKHBoYmEtPmZjX3JhdG92ICogMikKLQkJCQkJICAgICAgICsgTFBGQ19EUlZSX1RJTUVPVVQpOworCWNtZGlvY2JxLT5pb2NiX2NtcGwgPSBscGZjX2JzZ19ycG9ydF9lbHNfY21wOworCWNtZGlvY2JxLT5jb250ZXh0MSA9IGRkX2RhdGE7CisJY21kaW9jYnEtPmNvbnRleHQyID0gcnNwaW9jYnE7CisJZGRfZGF0YS0+dHlwZSA9IFRZUEVfSU9DQjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuY21kaW9jYnEgPSBjbWRpb2NicTsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IucnNwaW9jYnEgPSByc3Bpb2NicTsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYiA9IGpvYjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuYm1wID0gTlVMTDs7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLm5kbHAgPSBuZGxwOwogCi0JLyogcmVsZWFzZSB0aGUgbmV3IG5kbHAgb25jZSB0aGUgaW9jYiBjb21wbGV0ZXMgKi8KLQlscGZjX25scF9wdXQobmRscCk7Ci0JaWYgKGlvY2Jfc3RhdHVzICE9IElPQ0JfVElNRURPVVQpIHsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKLQkJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCi0JCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpIHsKKwkJY3JlZ192YWwgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOworCQljcmVnX3ZhbCB8PSAoSENfUjBJTlRfRU5BIDw8IExQRkNfRkNQX1JJTkcpOworCQl3cml0ZWwoY3JlZ192YWwsIHBoYmEtPkhDcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCiAJfQorCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwgMCk7CisJbHBmY19ubHBfcHV0KG5kbHApOworCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KIAotCWlmIChpb2NiX3N0YXR1cyA9PSBJT0NCX1NVQ0NFU1MpIHsKLQkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9TVUNDRVNTKSB7Ci0JCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQotCQkJCXJzcC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemU7Ci0JCQlyYyA9IDA7Ci0JCX0gZWxzZSBpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xTX1JKVCkgewotCQkJc3RydWN0IGZjX2JzZ19jdGVsc19yZXBseSAqZWxzX3JlcGx5OwotCQkJLyogTFNfUkpUIGRhdGEgcmV0dXJuZWQgaW4gd29yZCA0ICovCi0JCQl1aW50OF90ICpyanRfZGF0YSA9ICh1aW50OF90ICopJnJzcC0+dW4udWxwV29yZFs0XTsKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKIAotCQkJZWxzX3JlcGx5ID0gJmpvYi0+cmVwbHktPnJlcGx5X2RhdGEuY3RlbHNfcmVwbHk7Ci0JCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSAwOwotCQkJZWxzX3JlcGx5LT5zdGF0dXMgPSBGQ19DVEVMU19TVEFUVVNfUkVKRUNUOwotCQkJZWxzX3JlcGx5LT5yanRfZGF0YS5hY3Rpb24gPSByanRfZGF0YVswXTsKLQkJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2NvZGUgPSByanRfZGF0YVsxXTsKLQkJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2V4cGxhbmF0aW9uID0gcmp0X2RhdGFbMl07Ci0JCQllbHNfcmVwbHktPnJqdF9kYXRhLnZlbmRvcl91bmlxdWUgPSByanRfZGF0YVszXTsKLQkJfSBlbHNlCi0JCQlyYyA9IC1FSU87Ci0JfSBlbHNlCi0JCXJjID0gLUVJTzsKKwlscGZjX21idWZfZnJlZShwaGJhLCBwYnVmbGlzdC0+dmlydCwgcGJ1Zmxpc3QtPnBoeXMpOwogCi0JaWYgKGlvY2Jfc3RhdHVzICE9IElPQ0JfVElNRURPVVQpCi0JCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBjbWRpb2NicSk7CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CiAKK2ZyZWVfcnNwaW9jYnE6CiAJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CiAKLW91dDoKK2ZyZWVfZGRfZGF0YToKKwlrZnJlZShkZF9kYXRhKTsKKworbm9fZGRfZGF0YToKIAkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwogCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOwotCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KLQlqb2ItPmpvYl9kb25lKGpvYik7Ci0KLQlyZXR1cm4gMDsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCXJldHVybiByYzsKIH0KIAotc3RydWN0IGxwZmNfY3RfZXZlbnQgewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlpbnQgcmVmOwotCXdhaXRfcXVldWVfaGVhZF90IHdxOwotCi0JLyogRXZlbnQgdHlwZSBhbmQgd2FpdGVyIGlkZW50aWZpZXJzICovCi0JdWludDMyX3QgdHlwZV9tYXNrOwotCXVpbnQzMl90IHJlcV9pZDsKLQl1aW50MzJfdCByZWdfaWQ7Ci0KLQkvKiBuZXh0IHR3byBmbGFncyBhcmUgaGVyZSBmb3IgdGhlIGF1dG8tZGVsZXRlIGxvZ2ljICovCi0JdW5zaWduZWQgbG9uZyB3YWl0X3RpbWVfc3RhbXA7Ci0JaW50IHdhaXRpbmc7Ci0KLQkvKiBzZWVuIGFuZCBub3Qgc2VlbiBldmVudHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19nZXQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBldmVudHNfdG9fc2VlOwotfTsKLQotc3RydWN0IGV2ZW50X2RhdGEgewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQl1aW50MzJfdCB0eXBlOwotCXVpbnQzMl90IGltbWVkX2RhdDsKLQl2b2lkICpkYXRhOwotCXVpbnQzMl90IGxlbjsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbHBmY19jdF9ldmVudCAqCi1scGZjX2N0X2V2ZW50X25ldyhpbnQgZXZfcmVnX2lkLCB1aW50MzJfdCBldl9yZXFfaWQpCi17Ci0Jc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCA9IGt6YWxsb2Moc2l6ZW9mKCpldnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWV2dCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKLQlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fc2VlKTsKLQlldnQtPnJlcV9pZCA9IGV2X3JlcV9pZDsKLQlldnQtPnJlZ19pZCA9IGV2X3JlZ19pZDsKLQlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZXZ0LT53cSk7Ci0KLQlyZXR1cm4gZXZ0OwotfQotCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X2ZyZWUgLSBmcmVlcyBhbiBhbGxvY2F0ZWQgZXZlbnQgc3RydWN0dXJlCisgKiBAa3JlZjogUG9pbnRlciB0byBhIGtyZWYuCisgKgorICogQ2FsbGVkIGZyb20ga3JlZl9wdXQuIEJhY2sgY2FzdCB0aGUga3JlZiBpbnRvIGFuIGV2ZW50IHN0cnVjdHVyZSBhZGRyZXNzLgorICogRnJlZSBhbnkgZXZlbnRzIHRvIGdldCwgZGVsZXRlIGFzc29jaWF0ZWQgbm9kZXMsIGZyZWUgYW55IGV2ZW50cyB0byBzZWUsCisgKiBmcmVlIGFueSBkYXRhIHRoZW4gZnJlZSB0aGUgZXZlbnQgaXRzZWxmLgorICoqLwogc3RhdGljIHZvaWQKLWxwZmNfY3RfZXZlbnRfZnJlZShzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0KQorbHBmY19ic2dfZXZlbnRfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgbHBmY19ic2dfZXZlbnQsCisJCQkJCQkgIGtyZWYpOwogCXN0cnVjdCBldmVudF9kYXRhICplZDsKIAogCWxpc3RfZGVsKCZldnQtPm5vZGUpOwpAQCAtNDQ3LDI1ICs2NjIsODIgQEAKIAlrZnJlZShldnQpOwogfQogCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X3JlZiAtIGluY3JlbWVudHMgdGhlIGtyZWYgZm9yIGFuIGV2ZW50CisgKiBAZXZ0OiBQb2ludGVyIHRvIGFuIGV2ZW50IHN0cnVjdHVyZS4KKyAqKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotbHBmY19jdF9ldmVudF9yZWYoc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCkKK2xwZmNfYnNnX2V2ZW50X3JlZihzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCkKIHsKLQlldnQtPnJlZisrOworCWtyZWZfZ2V0KCZldnQtPmtyZWYpOwogfQogCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X3VucmVmIC0gVXNlcyBrcmVmX3B1dCB0byBmcmVlIGFuIGV2ZW50IHN0cnVjdHVyZQorICogQGV2dDogUG9pbnRlciB0byBhbiBldmVudCBzdHJ1Y3R1cmUuCisgKiovCiBzdGF0aWMgaW5saW5lIHZvaWQKLWxwZmNfY3RfZXZlbnRfdW5yZWYoc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCkKK2xwZmNfYnNnX2V2ZW50X3VucmVmKHN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0KQogewotCWlmICgtLWV2dC0+cmVmIDwgMCkKLQkJbHBmY19jdF9ldmVudF9mcmVlKGV2dCk7CisJa3JlZl9wdXQoJmV2dC0+a3JlZiwgbHBmY19ic2dfZXZlbnRfZnJlZSk7CiB9CiAKLSNkZWZpbmUgU0xJX0NUX0VMWF9MT09QQkFDSyAweDEwCisvKioKKyAqIGxwZmNfYnNnX2V2ZW50X25ldyAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgZXZlbnQgc3RydWN0dXJlCisgKiBAZXZfbWFzazogTWFzayBvZiBldmVudHMuCisgKiBAZXZfcmVnX2lkOiBFdmVudCByZWcgaWQuCisgKiBAZXZfcmVxX2lkOiBFdmVudCByZXF1ZXN0IGlkLgorICoqLworc3RhdGljIHN0cnVjdCBscGZjX2JzZ19ldmVudCAqCitscGZjX2JzZ19ldmVudF9uZXcodWludDMyX3QgZXZfbWFzaywgaW50IGV2X3JlZ19pZCwgdWludDMyX3QgZXZfcmVxX2lkKQoreworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0ID0ga3phbGxvYyhzaXplb2YoKmV2dCksIEdGUF9LRVJORUwpOwogCi1lbnVtIEVMWF9MT09QQkFDS19DTUQgewotCUVMWF9MT09QQkFDS19YUklfU0VUVVAsCi0JRUxYX0xPT1BCQUNLX0RBVEEsCi19OworCWlmICghZXZ0KQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZldnQtPmV2ZW50c190b19nZXQpOworCUlOSVRfTElTVF9IRUFEKCZldnQtPmV2ZW50c190b19zZWUpOworCWV2dC0+dHlwZV9tYXNrID0gZXZfbWFzazsKKwlldnQtPnJlcV9pZCA9IGV2X3JlcV9pZDsKKwlldnQtPnJlZ19pZCA9IGV2X3JlZ19pZDsKKwlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXZ0LT53cSk7CisJa3JlZl9pbml0KCZldnQtPmtyZWYpOworCXJldHVybiBldnQ7Cit9CisKKy8qKgorICogZGlhZ19jbWRfZGF0YV9mcmVlIC0gRnJlZXMgYW4gbHBmYyBkbWEgYnVmZmVyIGV4dGVuc2lvbgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1saXN0OiBQb2ludGVyIHRvIGFuIGxwZmMgZG1hIGJ1ZmZlciBleHRlbnNpb24uCisgKiovCitzdGF0aWMgaW50CitkaWFnX2NtZF9kYXRhX2ZyZWUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19kbWFidWZleHQgKm1saXN0KQoreworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqbWxhc3Q7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQsICpjdXJyLCAqbmV4dDsKKworCWlmICgoIW1saXN0KSB8fCAoIWxwZmNfaXNfbGlua191cChwaGJhKSAmJgorCQkocGhiYS0+bGlua19mbGFnICYgTFNfTE9PUEJBQ0tfTU9ERSkpKSB7CisJCXJldHVybiAwOworCX0KKworCXBjaWRldiA9IHBoYmEtPnBjaWRldjsKKwlsaXN0X2FkZF90YWlsKCZoZWFkLCAmbWxpc3QtPmRtYS5saXN0KTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShjdXJyLCBuZXh0LCAmaGVhZCkgeworCQltbGFzdCA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IGxwZmNfZG1hYnVmZXh0ICwgZG1hLmxpc3QpOworCQlpZiAobWxhc3QtPmRtYS52aXJ0KQorCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnBjaWRldi0+ZGV2LAorCQkJCQkgIG1sYXN0LT5zaXplLAorCQkJCQkgIG1sYXN0LT5kbWEudmlydCwKKwkJCQkJICBtbGFzdC0+ZG1hLnBoeXMpOworCQlrZnJlZShtbGFzdCk7CisJfQorCXJldHVybiAwOworfQogCiAvKioKICAqIGxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50IC0gcHJvY2VzcyBhbiB1bnNvbGljaXRlZCBDVCBjb21tYW5kCkBAIC00NzQsOSArNzQ2LDkgQEAKICAqIEBwaW9jYnE6CiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiB1bnNvbGljaXRlZCBDVCBjb21tYW5kIGlzIHJlY2VpdmVkLiAgSXQKLSAqIGZvcndhcmRzIHRoZSBldmVudCB0byBhbnkgcHJvY2Vzc2VzIHJlZ2lzdGVyZCB0byByZWNlaXZlIENUIGV2ZW50cy4KLSAqLwotdm9pZAorICogZm9yd2FyZHMgdGhlIGV2ZW50IHRvIGFueSBwcm9jZXNzZXMgcmVnaXN0ZXJlZCB0byByZWNlaXZlIENUIGV2ZW50cy4KKyAqKi8KK2ludAogbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2JxKQogewpAQCAtNDg0LDcgKzc1Niw3IEBACiAJdWludDMyX3QgY21kOwogCXVpbnQzMl90IGxlbjsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZiA9IE5VTEw7Ci0Jc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKIAlzdHJ1Y3QgZXZlbnRfZGF0YSAqZXZ0X2RhdCA9IE5VTEw7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxOwogCXNpemVfdCBvZmZzZXQgPSAwOwpAQCAtNDk2LDYgKzc2OCw5IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICpiZGVCdWYyID0gcGlvY2JxLT5jb250ZXh0MzsKIAlzdHJ1Y3QgbHBmY19oYnFfZW50cnkgKmhicWU7CiAJc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKmN0X3JlcTsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzaXplID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZoZWFkKTsKIAlsaXN0X2FkZF90YWlsKCZoZWFkLCAmcGlvY2JxLT5saXN0KTsKQEAgLTUwNCw2ICs3NzksMTAgQEAKIAkgICAgcGlvY2JxLT5pb2NiLnVuLmNvbnQ2NFswXS50dXMuZi5iZGVTaXplID09IDApCiAJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAorCWlmIChwaGJhLT5saW5rX3N0YXRlID09IExQRkNfSEJBX0VSUk9SIHx8CisJCSghKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkpKQorCQlnb3RvIGVycm9yX2N0X3Vuc29sX2V4aXQ7CisKIAlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKQogCQlkbWFidWYgPSBiZGVCdWYxOwogCWVsc2UgewpAQCAtNTExLDcgKzc5MCw4IEBACiAJCQkJICAgIHBpb2NicS0+aW9jYi51bi5jb250NjRbMF0uYWRkckxvdyk7CiAJCWRtYWJ1ZiA9IGxwZmNfc2xpX3Jpbmdwb3N0YnVmX2dldChwaGJhLCBwcmluZywgZG1hX2FkZHIpOwogCX0KLQorCWlmIChkbWFidWYgPT0gTlVMTCkKKwkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OwogCWN0X3JlcSA9IChzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqKWRtYWJ1Zi0+dmlydDsKIAlldnRfcmVxX2lkID0gY3RfcmVxLT5Gc1R5cGU7CiAJY21kID0gY3RfcmVxLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3A7CkBAIC01MTksMjQgKzc5OSwyNCBAQAogCWlmICghKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkpCiAJCWxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChwaGJhLCBwcmluZywgZG1hYnVmKTsKIAotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgewotCQlpZiAoZXZ0LT5yZXFfaWQgIT0gZXZ0X3JlcV9pZCkKKwkJaWYgKCEoZXZ0LT50eXBlX21hc2sgJiBGQ19SRUdfQ1RfRVZFTlQpIHx8CisJCQlldnQtPnJlcV9pZCAhPSBldnRfcmVxX2lkKQogCQkJY29udGludWU7CiAKLQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKLQorCQlscGZjX2JzZ19ldmVudF9yZWYoZXZ0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCQlldnRfZGF0ID0ga3phbGxvYyhzaXplb2YoKmV2dF9kYXQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFldnRfZGF0KSB7Ci0JCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7CisJCWlmIChldnRfZGF0ID09IE5VTEwpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCQlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOwogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKIAkJCQkJIjI2MTQgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciAiCiAJCQkJCSJDVCBldmVudFxuIik7CiAJCQlicmVhazsKIAkJfQogCi0JCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCiAJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKIAkJCS8qIHRha2UgYWNjdW11bGF0ZWQgYnl0ZSBjb3VudCBmcm9tIHRoZSBsYXN0IGlvY2JxICovCiAJCQlpb2NicSA9IGxpc3RfZW50cnkoaGVhZC5wcmV2LCB0eXBlb2YoKmlvY2JxKSwgbGlzdCk7CkBAIC01NTAsMjUgKzgzMCwyNSBAQAogCQl9CiAKIAkJZXZ0X2RhdC0+ZGF0YSA9IGt6YWxsb2MoZXZ0X2RhdC0+bGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFldnRfZGF0LT5kYXRhKSB7CisJCWlmIChldnRfZGF0LT5kYXRhID09IE5VTEwpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJCSIyNjE1IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgIgogCQkJCQkiQ1QgZXZlbnQgZGF0YSwgc2l6ZSAlZFxuIiwKIAkJCQkJZXZ0X2RhdC0+bGVuKTsKIAkJCWtmcmVlKGV2dF9kYXQpOwotCQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOwotCQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAkJfQogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW9jYnEsICZoZWFkLCBsaXN0KSB7CisJCQlzaXplID0gMDsKIAkJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKIAkJCQliZGVCdWYxID0gaW9jYnEtPmNvbnRleHQyOwogCQkJCWJkZUJ1ZjIgPSBpb2NicS0+Y29udGV4dDM7CiAJCQl9CiAJCQlmb3IgKGkgPSAwOyBpIDwgaW9jYnEtPmlvY2IudWxwQmRlQ291bnQ7IGkrKykgewotCQkJCWludCBzaXplID0gMDsKIAkJCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYKIAkJCQkgICAgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CiAJCQkJCWlmIChpID09IDApIHsKQEAgLTYwMSw5ICs4ODEsMTEgQEAKIAkJCQkJCWlvY2JxKTsKIAkJCQkJa2ZyZWUoZXZ0X2RhdC0+ZGF0YSk7CiAJCQkJCWtmcmVlKGV2dF9kYXQpOwotCQkJCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7Ci0JCQkJCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKLQkJCQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLAorCQkJCQkJZmxhZ3MpOworCQkJCQlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAorCQkJCQkJJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJCQkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OwogCQkJCX0KIAkJCQltZW1jcHkoKGNoYXIgKikoZXZ0X2RhdC0+ZGF0YSkgKyBvZmZzZXQsCkBAIC02MTYsMTUgKzg5OCwyNCBAQAogCQkJCQkJCQkgZG1hYnVmKTsKIAkJCQl9IGVsc2UgewogCQkJCQlzd2l0Y2ggKGNtZCkgeworCQkJCQljYXNlIEVMWF9MT09QQkFDS19EQVRBOgorCQkJCQkJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsCisJCQkJCQkoc3RydWN0IGxwZmNfZG1hYnVmZXh0ICopCisJCQkJCQkJZG1hYnVmKTsKKwkJCQkJCWJyZWFrOwogCQkJCQljYXNlIEVMWF9MT09QQkFDS19YUklfU0VUVVA6Ci0JCQkJCQlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJgotCQkJCQkJICAgICAgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSkKKwkJCQkJCWlmICgocGhiYS0+c2xpX3JldiA9PQorCQkJCQkJCUxQRkNfU0xJX1JFVjIpIHx8CisJCQkJCQkJKHBoYmEtPnNsaTNfb3B0aW9ucyAmCisJCQkJCQkJTFBGQ19TTEkzX0hCUV9FTkFCTEVECisJCQkJCQkJKSkgeworCQkJCQkJCWxwZmNfaW5fYnVmX2ZyZWUocGhiYSwKKwkJCQkJCQkJCWRtYWJ1Zik7CisJCQkJCQl9IGVsc2UgewogCQkJCQkJCWxwZmNfcG9zdF9idWZmZXIocGhiYSwKIAkJCQkJCQkJCSBwcmluZywKIAkJCQkJCQkJCSAxKTsKLQkJCQkJCWVsc2UKLQkJCQkJCQlscGZjX2luX2J1Zl9mcmVlKHBoYmEsCi0JCQkJCQkJCQlkbWFidWYpOworCQkJCQkJfQogCQkJCQkJYnJlYWs7CiAJCQkJCWRlZmF1bHQ6CiAJCQkJCQlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJgpAQCAtNjM4LDcgKzkyOSw3IEBACiAJCQl9CiAJCX0KIAotCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKIAkJCWV2dF9kYXQtPmltbWVkX2RhdCA9IHBoYmEtPmN0eF9pZHg7CiAJCQlwaGJhLT5jdHhfaWR4ID0gKHBoYmEtPmN0eF9pZHggKyAxKSAlIDY0OwpAQCAtNjUxLDEyMiArOTQyLDE0NCBAQAogCiAJCWV2dF9kYXQtPnR5cGUgPSBGQ19SRUdfQ1RfRVZFTlQ7CiAJCWxpc3RfYWRkKCZldnRfZGF0LT5ub2RlLCAmZXZ0LT5ldmVudHNfdG9fc2VlKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZldnQtPndxKTsKLQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOwotCQlpZiAoZXZ0X3JlcV9pZCA9PSBTTElfQ1RfRUxYX0xPT1BCQUNLKQorCQlpZiAoZXZ0X3JlcV9pZCA9PSBTTElfQ1RfRUxYX0xPT1BCQUNLKSB7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmV2dC0+d3EpOworCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKIAkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9tb3ZlKGV2dC0+ZXZlbnRzX3RvX3NlZS5wcmV2LCAmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKKwkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKworCQlqb2IgPSBldnQtPnNldF9qb2I7CisJCWV2dC0+c2V0X2pvYiA9IE5VTEw7CisJCWlmIChqb2IpIHsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IHNpemU7CisJCQkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCQkJam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKKwkJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCQkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCQlqb2ItPmpvYl9kb25lKGpvYik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQl9CiAJfQotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAogZXJyb3JfY3RfdW5zb2xfZXhpdDoKIAlpZiAoIWxpc3RfZW1wdHkoJmhlYWQpKQogCQlsaXN0X2RlbCgmaGVhZCk7Ci0KLQlyZXR1cm47CisJaWYgKGV2dF9yZXFfaWQgPT0gU0xJX0NUX0VMWF9MT09QQkFDSykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgotICogbHBmY19ic2dfc2V0X2V2ZW50IC0gcHJvY2VzcyBhIFNFVF9FVkVOVCBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIGxwZmNfYnNnX2hiYV9zZXRfZXZlbnQgLSBwcm9jZXNzIGEgU0VUX0VWRU5UIGJzZyB2ZW5kb3IgY29tbWFuZAogICogQGpvYjogU0VUX0VWRU5UIGZjX2JzZ19qb2IKLSAqLworICoqLwogc3RhdGljIGludAotbHBmY19ic2dfc2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCitscGZjX2JzZ19oYmFfc2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IHNldF9jdF9ldmVudCAqZXZlbnRfcmVxOwotCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQ7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CiAJaW50IHJjID0gMDsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhID0gTlVMTDsKKwl1aW50MzJfdCBldl9tYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8CiAJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBzZXRfY3RfZXZlbnQpKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJIjI2MTIgUmVjZWl2ZWQgU0VUX0NUX0VWRU5UIGJlbG93IG1pbmltdW0gIgogCQkJCSJzaXplXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGRfZGF0YSA9PSBOVUxMKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzQgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBqb2JfZXJyb3I7CiAJfQogCiAJZXZlbnRfcmVxID0gKHN0cnVjdCBzZXRfY3RfZXZlbnQgKikKIAkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKLQotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlldl9tYXNrID0gKCh1aW50MzJfdCkodW5zaWduZWQgbG9uZylldmVudF9yZXEtPnR5cGVfbWFzayAmCisJCQkJRkNfUkVHX0VWRU5UX01BU0spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShldnQsICZwaGJhLT5jdF9ldl93YWl0ZXJzLCBub2RlKSB7CiAJCWlmIChldnQtPnJlZ19pZCA9PSBldmVudF9yZXEtPmV2X3JlZ19pZCkgewotCQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKwkJCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOwogCQkJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCZldnQtPm5vZGUgPT0gJnBoYmEtPmN0X2V2X3dhaXRlcnMpIHsKIAkJLyogbm8gZXZlbnQgd2FpdGluZyBzdHJ1Y3QgeWV0IC0gZmlyc3QgY2FsbCAqLwotCQlldnQgPSBscGZjX2N0X2V2ZW50X25ldyhldmVudF9yZXEtPmV2X3JlZ19pZCwKKwkJZXZ0ID0gbHBmY19ic2dfZXZlbnRfbmV3KGV2X21hc2ssIGV2ZW50X3JlcS0+ZXZfcmVnX2lkLAogCQkJCQlldmVudF9yZXEtPmV2X3JlcV9pZCk7CiAJCWlmICghZXZ0KSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAogCQkJCQkiMjYxNyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBldmVudCAiCiAJCQkJCSJ3YWl0ZXJcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGpvYl9lcnJvcjsKIAkJfQogCi0JCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGQoJmV2dC0+bm9kZSwgJnBoYmEtPmN0X2V2X3dhaXRlcnMpOwotCQlscGZjX2N0X2V2ZW50X3JlZihldnQpOwotCQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwkJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCX0KIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJZXZ0LT53YWl0aW5nID0gMTsKLQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGV2dC0+d3EsCi0JCQkJICAgICAhbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkpIHsKLQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7IC8qIHJlbGVhc2UgcmVmICovCi0JCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsgLyogZGVsZXRlICovCi0JCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQlyYyA9IC1FSU5UUjsKLQkJZ290byBzZXRfZXZlbnRfb3V0OwotCX0KKwlkZF9kYXRhLT50eXBlID0gVFlQRV9FVlQ7CisJZGRfZGF0YS0+Y29udGV4dF91bi5ldnQgPSBldnQ7CisJZXZ0LT5zZXRfam9iID0gam9iOyAvKiBmb3IgdW5zb2xpY2l0ZWQgY29tbWFuZCAqLworCWpvYi0+ZGRfZGF0YSA9IGRkX2RhdGE7IC8qIGZvciBmYyB0cmFuc3BvcnQgdGltZW91dCBjYWxsYmFjayovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOyAvKiBjYWxsIGpvYiBkb25lIGxhdGVyICovCiAKLQlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JZXZ0LT53YWl0aW5nID0gMDsKK2pvYl9lcnJvcjoKKwlpZiAoZGRfZGF0YSAhPSBOVUxMKQorCQlrZnJlZShkZF9kYXRhKTsKIAotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQlsaXN0X21vdmUoZXZ0LT5ldmVudHNfdG9fc2VlLnByZXYsICZldnQtPmV2ZW50c190b19nZXQpOwotCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsgLyogcmVsZWFzZSByZWYgKi8KLQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQotc2V0X2V2ZW50X291dDoKLQkvKiBzZXRfZXZlbnQgY2FycmllcyBubyByZXBseSBwYXlsb2FkICovCi0Jam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKLQkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwotCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOwotCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KLQlqb2ItPmpvYl9kb25lKGpvYik7Ci0KLQlyZXR1cm4gMDsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCXJldHVybiByYzsKIH0KIAogLyoqCi0gKiBscGZjX2JzZ19nZXRfZXZlbnQgLSBwcm9jZXNzIGEgR0VUX0VWRU5UIGJzZyB2ZW5kb3IgY29tbWFuZAorICogbHBmY19ic2dfaGJhX2dldF9ldmVudCAtIHByb2Nlc3MgYSBHRVRfRVZFTlQgYnNnIHZlbmRvciBjb21tYW5kCiAgKiBAam9iOiBHRVRfRVZFTlQgZmNfYnNnX2pvYgotICovCisgKiovCiBzdGF0aWMgaW50Ci1scGZjX2JzZ19nZXRfZXZlbnQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK2xwZmNfYnNnX2hiYV9nZXRfZXZlbnQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlzdHJ1Y3QgZ2V0X2N0X2V2ZW50ICpldmVudF9yZXE7CiAJc3RydWN0IGdldF9jdF9ldmVudF9yZXBseSAqZXZlbnRfcmVwbHk7Ci0Jc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKIAlzdHJ1Y3QgZXZlbnRfZGF0YSAqZXZ0X2RhdCA9IE5VTEw7Ci0JaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQzMl90IHJjID0gMDsKIAogCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKIAkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGdldF9jdF9ldmVudCkpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKIAkJCQkiMjYxMyBSZWNlaXZlZCBHRVRfQ1RfRVZFTlQgcmVxdWVzdCBiZWxvdyAiCiAJCQkJIm1pbmltdW0gc2l6ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOwogCX0KIAogCWV2ZW50X3JlcSA9IChzdHJ1Y3QgZ2V0X2N0X2V2ZW50ICopCkBAIC03NzQsMTMgKzEwODcsMTIgQEAKIAogCWV2ZW50X3JlcGx5ID0gKHN0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgKikKIAkJam9iLT5yZXBseS0+cmVwbHlfZGF0YS52ZW5kb3JfcmVwbHkudmVuZG9yX3JzcDsKLQotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgewogCQlpZiAoZXZ0LT5yZWdfaWQgPT0gZXZlbnRfcmVxLT5ldl9yZWdfaWQpIHsKIAkJCWlmIChsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19nZXQpKQogCQkJCWJyZWFrOwotCQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKwkJCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOwogCQkJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQkJZXZ0X2RhdCA9IGxpc3RfZW50cnkoZXZ0LT5ldmVudHNfdG9fZ2V0LnByZXYsCiAJCQkJCSAgICAgc3RydWN0IGV2ZW50X2RhdGEsIG5vZGUpOwpAQCAtNzg4LDQ1ICsxMTAwLDE1MzkgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAotCWlmICghZXZ0X2RhdCkgeworCS8qIFRoZSBhcHAgbWF5IGNvbnRpbnVlIHRvIGFzayBmb3IgZXZlbnQgZGF0YSB1bnRpbCBpdCBnZXRzCisJICogYW4gZXJyb3IgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGlzbid0IGFueW1vcmUKKwkgKi8KKwlpZiAoZXZ0X2RhdCA9PSBOVUxMKSB7CiAJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJCXJjID0gLUVOT0VOVDsKLQkJZ290byBlcnJvcl9nZXRfZXZlbnRfZXhpdDsKKwkJZ290byBqb2JfZXJyb3I7CiAJfQogCi0JaWYgKGV2dF9kYXQtPmxlbiA+IGpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbikgewotCQlldnRfZGF0LT5sZW4gPSBqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW47Ci0JCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAotCQkJCQkiMjYxOCBUcnVuY2F0ZWQgZXZlbnQgZGF0YSBhdCAlZCAiCi0JCQkJCSJieXRlc1xuIiwKLQkJCQkJam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKwlpZiAoZXZ0X2RhdC0+bGVuID4gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4pIHsKKwkJZXZ0X2RhdC0+bGVuID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI2MTggVHJ1bmNhdGVkIGV2ZW50IGRhdGEgYXQgJWQgIgorCQkJCSJieXRlc1xuIiwKKwkJCQlqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbik7CiAJfQogCisJZXZlbnRfcmVwbHktPnR5cGUgPSBldnRfZGF0LT50eXBlOwogCWV2ZW50X3JlcGx5LT5pbW1lZF9kYXRhID0gZXZ0X2RhdC0+aW1tZWRfZGF0OwotCiAJaWYgKGV2dF9kYXQtPmxlbiA+IDApCiAJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9Ci0JCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAotCQkJCQkgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKKwkJCXNnX2NvcHlfZnJvbV9idWZmZXIoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkJICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwKIAkJCQkJICAgIGV2dF9kYXQtPmRhdGEsIGV2dF9kYXQtPmxlbik7CiAJZWxzZQogCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwotCXJjID0gMDsKIAotCWlmIChldnRfZGF0KQorCWlmIChldnRfZGF0KSB7CiAJCWtmcmVlKGV2dF9kYXQtPmRhdGEpOwotCWtmcmVlKGV2dF9kYXQpOwotCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7Ci0JbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCWtmcmVlKGV2dF9kYXQpOworCX0KIAotZXJyb3JfZ2V0X2V2ZW50X2V4aXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJam9iLT5qb2JfZG9uZShqb2IpOworCXJldHVybiAwOworCitqb2JfZXJyb3I6CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19pc3N1ZV9jdF9yc3BfY21wIC0gbHBmY19pc3N1ZV9jdF9yc3AncyBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NicTogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYnE6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGlvY2JzIGlzc3VlZCB1c2luZworICogbHBmY19pc3N1ZV9jdF9yc3BfY21wIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIHRocmVhZCB3aGljaAorICogY2xlYW5zIHVwIHRoZSBTTEkgbGF5ZXIgb2JqZWN0cy4KKyAqIFRoaXMgZnVuY3Rpb24gY29weSB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlIGlvY2IgdG8gdGhlCisgKiByZXNwb25zZSBpb2NiIG1lbW9yeSBvYmplY3QgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciBvZgorICogbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0IGFuZCB0aGVuIHdha2VzIHVwIHRoZSB0aHJlYWQgd2hpY2gKKyAqIHNsZWVwcyBmb3IgdGhlIGlvY2IgY29tcGxldGlvbi4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX2lzc3VlX2N0X3JzcF9jbXAoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxKQoreworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYjsKKwlJT0NCX3QgKnJzcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmJtcDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWRkX2RhdGEgPSBjbWRpb2NicS0+Y29udGV4dDE7CisJLyogbm9ybWFsIGNvbXBsZXRpb24gYW5kIHRpbWVvdXQgY3Jvc3NlZCBwYXRocywgYWxyZWFkeSBkb25lICovCisJaWYgKCFkZF9kYXRhKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWpvYiA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5zZXRfam9iOworCWJtcCA9IGRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5ibXA7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCW5kbHAgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscDsKKworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKworCWlmIChyc3AtPnVscFN0YXR1cykgeworCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgeworCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7CisJCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6CisJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCWJyZWFrOworCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKKwkJCQlyYyA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJjID0gLUVBQ0NFUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlCisJCQlyYyA9IC1FQUNDRVM7CisJfSBlbHNlCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQlyc3AtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplOworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCWxwZmNfbmxwX3B1dChuZGxwKTsKKwlrZnJlZShibXApOworCWtmcmVlKGRkX2RhdGEpOwogCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCiAJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKIAkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCiAJam9iLT5qb2JfZG9uZShqb2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19pc3N1ZV9jdF9yc3AgLSBpc3N1ZSBhIGN0IHJlc3BvbnNlCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAam9iOiBQb2ludGVyIHRvIHRoZSBqb2Igb2JqZWN0LgorICogQHRhZzogdGFnIGluZGV4IHZhbHVlIGludG8gdGhlIHBvcnRzIGNvbnRleHQgZXhjaGFuZ2UgYXJyYXkuCisgKiBAYm1wOiBQb2ludGVyIHRvIGEgZG1hIGJ1ZmZlciBkZXNjcmlwdG9yLgorICogQG51bV9lbnRyeTogTnVtYmVyIG9mIGVudGllcyBpbiB0aGUgYmRlLgorICoqLworc3RhdGljIGludAorbHBmY19pc3N1ZV9jdF9yc3Aoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iLCB1aW50MzJfdCB0YWcsCisJCSAgc3RydWN0IGxwZmNfZG1hYnVmICpibXAsIGludCBudW1fZW50cnkpCit7CisJSU9DQl90ICppY21kOworCXN0cnVjdCBscGZjX2lvY2JxICpjdGlvY2IgPSBOVUxMOworCWludCByYyA9IDA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJdWludDMyX3QgY3JlZ192YWw7CisKKwkvKiBhbGxvY2F0ZSBvdXIgYnNnIHRyYWNraW5nIHN0cnVjdHVyZSAqLworCWRkX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnNnX2pvYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZF9kYXRhKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzYgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBub19kZF9kYXRhOworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgIGNvbW1hbmQgaW9jYiAqLworCWN0aW9jYiA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwlpZiAoIWN0aW9jYikgeworCQlyYyA9IEVOT01FTTsKKwkJZ290byBub19jdGlvY2I7CisJfQorCisJaWNtZCA9ICZjdGlvY2ItPmlvY2I7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC51bHBJb1RhZzMyID0gMDsKKwlpY21kLT51bi54c2VxNjQuYmRsLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKGJtcC0+cGh5cyk7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3coYm1wLT5waHlzKTsKKwlpY21kLT51bi54c2VxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwlpY21kLT51bi54c2VxNjQuYmRsLmJkZVNpemUgPSAobnVtX2VudHJ5ICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5GY3RsID0gKExTIHwgTEEpOworCWljbWQtPnVuLnhzZXE2NC53NS5oY3N3LkRmY3RsID0gMDsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5SY3RsID0gRkNfUkNUTF9ERF9TT0xfQ1RMOworCWljbWQtPnVuLnhzZXE2NC53NS5oY3N3LlR5cGUgPSBGQ19UWVBFX0NUOworCisJLyogRmlsbCBpbiByZXN0IG9mIGlvY2IgKi8KKwlpY21kLT51bHBDb21tYW5kID0gQ01EX1hNSVRfU0VRVUVOQ0U2NF9DWDsKKwlpY21kLT51bHBCZGVDb3VudCA9IDE7CisJaWNtZC0+dWxwTGUgPSAxOworCWljbWQtPnVscENsYXNzID0gQ0xBU1MzOworCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwkJLyogRG8gbm90IGlzc3VlIHVuc29sIHJlc3BvbnNlIGlmIG94aWQgbm90IG1hcmtlZCBhcyB2YWxpZCAqLworCQlpZiAoIShwaGJhLT5jdF9jdHhbdGFnXS5mbGFncyAmIFVOU09MX1ZBTElEKSkgeworCQkJcmMgPSBJT0NCX0VSUk9SOworCQkJZ290byBpc3N1ZV9jdF9yc3BfZXhpdDsKKwkJfQorCQlpY21kLT51bHBDb250ZXh0ID0gcGhiYS0+Y3RfY3R4W3RhZ10ub3hpZDsKKwkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEtPnBwb3J0LCBwaGJhLT5jdF9jdHhbdGFnXS5TSUQpOworCQlpZiAoIW5kbHApIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19FTFMsCisJCQkJICIyNzIxIG5kbHAgbnVsbCBmb3Igb3hpZCAleCBTSUQgJXhcbiIsCisJCQkJCWljbWQtPnVscENvbnRleHQsCisJCQkJCXBoYmEtPmN0X2N0eFt0YWddLlNJRCk7CisJCQlyYyA9IElPQ0JfRVJST1I7CisJCQlnb3RvIGlzc3VlX2N0X3JzcF9leGl0OworCQl9CisJCWljbWQtPnVuLnVscFdvcmRbM10gPSBuZGxwLT5ubHBfcnBpOworCQkvKiBUaGUgZXhjaGFuZ2UgaXMgZG9uZSwgbWFyayB0aGUgZW50cnkgYXMgaW52YWxpZCAqLworCQlwaGJhLT5jdF9jdHhbdGFnXS5mbGFncyAmPSB+VU5TT0xfVkFMSUQ7CisJfSBlbHNlCisJCWljbWQtPnVscENvbnRleHQgPSAodXNob3J0KSB0YWc7CisKKwlpY21kLT51bHBUaW1lb3V0ID0gcGhiYS0+ZmNfcmF0b3YgKiAyOworCisJLyogWG1pdCBDVCByZXNwb25zZSBvbiBleGNoYW5nZSA8eGlkPiAqLworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCisJCQkiMjcyMiBYbWl0IENUIHJlc3BvbnNlIG9uIGV4Y2hhbmdlIHgleCBEYXRhOiB4JXggeCV4XG4iLAorCQkJaWNtZC0+dWxwQ29udGV4dCwgaWNtZC0+dWxwSW9UYWcsIHBoYmEtPmxpbmtfc3RhdGUpOworCisJY3Rpb2NiLT5pb2NiX2NtcGwgPSBOVUxMOworCWN0aW9jYi0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOworCWN0aW9jYi0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwljdGlvY2ItPmNvbnRleHQzID0gYm1wOworCisJY3Rpb2NiLT5pb2NiX2NtcGwgPSBscGZjX2lzc3VlX2N0X3JzcF9jbXA7CisJY3Rpb2NiLT5jb250ZXh0MSA9IGRkX2RhdGE7CisJY3Rpb2NiLT5jb250ZXh0MiA9IE5VTEw7CisJZGRfZGF0YS0+dHlwZSA9IFRZUEVfSU9DQjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuY21kaW9jYnEgPSBjdGlvY2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnJzcGlvY2JxID0gTlVMTDsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYiA9IGpvYjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuYm1wID0gYm1wOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5uZGxwID0gbmRscDsKKworCWlmIChwaGJhLT5jZmdfcG9sbCAmIERJU0FCTEVfRkNQX1JJTkdfSU5UKSB7CisJCWNyZWdfdmFsID0gcmVhZGwocGhiYS0+SENyZWdhZGRyKTsKKwkJY3JlZ192YWwgfD0gKEhDX1IwSU5UX0VOQSA8PCBMUEZDX0ZDUF9SSU5HKTsKKwkJd3JpdGVsKGNyZWdfdmFsLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLworCX0KKworCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBMUEZDX0VMU19SSU5HLCBjdGlvY2IsIDApOworCisJaWYgKHJjID09IElPQ0JfU1VDQ0VTUykKKwkJcmV0dXJuIDA7IC8qIGRvbmUgZm9yIG5vdyAqLworCitpc3N1ZV9jdF9yc3BfZXhpdDoKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGN0aW9jYik7Citub19jdGlvY2I6CisJa2ZyZWUoZGRfZGF0YSk7Citub19kZF9kYXRhOgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjX2JzZ19zZW5kX21nbXRfcnNwIC0gcHJvY2VzcyBhIFNFTkRfTUdNVF9SRVNQIGJzZyB2ZW5kb3IgY29tbWFuZAorICogQGpvYjogU0VORF9NR01UX1JFU1AgZmNfYnNnX2pvYgorICoqLworc3RhdGljIGludAorbHBmY19ic2dfc2VuZF9tZ210X3JzcChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBzZW5kX21nbXRfcmVzcCAqbWdtdF9yZXNwID0gKHN0cnVjdCBzZW5kX21nbXRfcmVzcCAqKQorCQlqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kOworCXN0cnVjdCB1bHBfYmRlNjQgKmJwbDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmJtcCA9IE5VTEw7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2VsID0gTlVMTDsKKwlpbnQgcmVxdWVzdF9uc2VnOworCWludCBudW1iZGU7CisJZG1hX2FkZHJfdCBidXNhZGRyOworCXVpbnQzMl90IHRhZyA9IG1nbXRfcmVzcC0+dGFnOworCXVuc2lnbmVkIGxvbmcgcmVxYmZyY250ID0KKwkJCSh1bnNpZ25lZCBsb25nKWpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCWludCByYyA9IDA7CisKKwkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgdHJhbnNmZXJyZWQgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCisJaWYgKCFyZXFiZnJjbnQgfHwgKHJlcWJmcmNudCA+ICg4MCAqIEJVRl9TWl80SykpKSB7CisJCXJjID0gLUVSQU5HRTsKKwkJZ290byBzZW5kX21nbXRfcnNwX2V4aXQ7CisJfQorCisJYm1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibXApIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHNlbmRfbWdtdF9yc3BfZXhpdDsKKwl9CisKKwlibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJmJtcC0+cGh5cyk7CisJaWYgKCFibXAtPnZpcnQpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHNlbmRfbWdtdF9yc3BfZnJlZV9ibXA7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmJtcC0+bGlzdCk7CisJYnBsID0gKHN0cnVjdCB1bHBfYmRlNjQgKikgYm1wLT52aXJ0OworCXJlcXVlc3RfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlmb3JfZWFjaF9zZyhqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LCBzZ2VsLCByZXF1ZXN0X25zZWcsIG51bWJkZSkgeworCQlidXNhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2dlbCk7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OworCQlicGwtPnR1cy5mLmJkZVNpemUgPSBzZ19kbWFfbGVuKHNnZWwpOworCQlicGwtPnR1cy53ID0gY3B1X3RvX2xlMzIoYnBsLT50dXMudyk7CisJCWJwbC0+YWRkckxvdyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KGJ1c2FkZHIpKTsKKwkJYnBsLT5hZGRySGlnaCA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChidXNhZGRyKSk7CisJCWJwbCsrOworCX0KKworCXJjID0gbHBmY19pc3N1ZV9jdF9yc3AocGhiYSwgam9iLCB0YWcsIGJtcCwgcmVxdWVzdF9uc2VnKTsKKworCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KKworCS8qIFRCRCBuZWVkIHRvIGhhbmRsZSBhIHRpbWVvdXQgKi8KKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkJICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXJjID0gLUVBQ0NFUzsKKwlscGZjX21idWZfZnJlZShwaGJhLCBibXAtPnZpcnQsIGJtcC0+cGh5cyk7CisKK3NlbmRfbWdtdF9yc3BfZnJlZV9ibXA6CisJa2ZyZWUoYm1wKTsKK3NlbmRfbWdtdF9yc3BfZXhpdDoKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX2RpYWdfbW9kZSAtIHByb2Nlc3MgYSBMUEZDX0JTR19WRU5ET1JfRElBR19NT0RFIGJzZyB2ZW5kb3IgY29tbWFuZAorICogQGpvYjogTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgYSBwb3J0IGludG8gZGlhZ25vc3RpYyBsb29wYmFjaworICogbW9kZSBpbiBvcmRlciB0byBwZXJmb3JtIGEgZGlhZ25vc3RpYyBsb29wYmFjayB0ZXN0LgorICogQWxsIG5ldyBzY3NpIHJlcXVlc3RzIGFyZSBibG9ja2VkLCBhIHNtYWxsIGRlbGF5IGlzIHVzZWQgdG8gYWxsb3cgdGhlCisgKiBzY3NpIHJlcXVlc3RzIHRvIGNvbXBsZXRlIHRoZW4gdGhlIGxpbmsgaXMgYnJvdWdodCBkb3duLiBJZiB0aGUgbGluayBpcworICogaXMgcGxhY2VkIGluIGxvb3BiYWNrIG1vZGUgdGhlbiBzY3NpIHJlcXVlc3RzIGFyZSBhZ2FpbiBhbGxvd2VkCisgKiBzbyB0aGUgc2NzaSBtaWQtbGF5ZXIgZG9lc24ndCBnaXZlIHVwIG9uIHRoZSBwb3J0LgorICogQWxsIG9mIHRoaXMgaXMgZG9uZSBpbi1saW5lLgorICovCitzdGF0aWMgaW50CitscGZjX2JzZ19kaWFnX21vZGUoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGpvYi0+c2hvc3Q7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJc3RydWN0IGRpYWdfbW9kZV9zZXQgKmxvb3BiYWNrX21vZGU7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcHNsaS0+cmluZ1tMUEZDX0ZDUF9SSU5HXTsKKwl1aW50MzJfdCBsaW5rX2ZsYWdzOworCXVpbnQzMl90IHRpbWVvdXQ7CisJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJTFBGQ19NQk9YUV90ICpwbWJveHE7CisJaW50IG1ieHN0YXR1czsKKwlpbnQgaSA9IDA7CisJaW50IHJjID0gMDsKKworCS8qIG5vIGRhdGEgdG8gcmV0dXJuIGp1c3QgdGhlIHJldHVybiBjb2RlICovCisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGRpYWdfbW9kZV9zZXQpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzggUmVjZWl2ZWQgRElBRyBNT0RFIHJlcXVlc3QgYmVsb3cgbWluaW11bSAiCisJCQkJInNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWxvb3BiYWNrX21vZGUgPSAoc3RydWN0IGRpYWdfbW9kZV9zZXQgKikKKwkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKKwlsaW5rX2ZsYWdzID0gbG9vcGJhY2tfbW9kZS0+dHlwZTsKKwl0aW1lb3V0ID0gbG9vcGJhY2tfbW9kZS0+dGltZW91dDsKKworCWlmICgocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0hCQV9FUlJPUikgfHwKKwkgICAgKHBzbGktPnNsaV9mbGFnICYgTFBGQ19CTE9DS19NR01UX0lPKSB8fAorCSAgICAoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJX0FDVElWRSkpKSB7CisJCXJjID0gLUVBQ0NFUzsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJcG1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYm94cSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJaWYgKHZwb3J0cykgeworCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cGkgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJCXNjc2lfYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCQl9CisKKwkJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKwl9IGVsc2UgeworCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydChwaGJhLT5wcG9ydCk7CisJCXNjc2lfYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCX0KKworCXdoaWxlIChwcmluZy0+dHhjbXBscV9jbnQpIHsKKwkJaWYgKGkrKyA+IDUwMCkJLyogd2FpdCB1cCB0byA1IHNlY29uZHMgKi8KKwkJCWJyZWFrOworCisJCW1zbGVlcCgxMCk7CisJfQorCisJbWVtc2V0KCh2b2lkICopcG1ib3hxLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJcG1ib3hxLT51Lm1iLm1ieENvbW1hbmQgPSBNQlhfRE9XTl9MSU5LOworCXBtYm94cS0+dS5tYi5tYnhPd25lciA9IE9XTl9IT1NUOworCisJbWJ4c3RhdHVzID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIHBtYm94cSwgTFBGQ19NQk9YX1RNTyk7CisKKwlpZiAoKG1ieHN0YXR1cyA9PSBNQlhfU1VDQ0VTUykgJiYgKHBtYm94cS0+dS5tYi5tYnhTdGF0dXMgPT0gMCkpIHsKKwkJLyogd2FpdCBmb3IgbGluayBkb3duIGJlZm9yZSBwcm9jZWVkaW5nICovCisJCWkgPSAwOworCQl3aGlsZSAocGhiYS0+bGlua19zdGF0ZSAhPSBMUEZDX0xJTktfRE9XTikgeworCQkJaWYgKGkrKyA+IHRpbWVvdXQpIHsKKwkJCQlyYyA9IC1FVElNRURPVVQ7CisJCQkJZ290byBsb29wYmFja19tb2RlX2V4aXQ7CisJCQl9CisKKwkJCW1zbGVlcCgxMCk7CisJCX0KKworCQltZW1zZXQoKHZvaWQgKilwbWJveHEsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKKwkJaWYgKGxpbmtfZmxhZ3MgPT0gSU5URVJOQUxfTE9PUF9CQUNLKQorCQkJcG1ib3hxLT51Lm1iLnVuLnZhckluaXRMbmsubGlua19mbGFncyA9IEZMQUdTX0xPQ0FMX0xCOworCQllbHNlCisJCQlwbWJveHEtPnUubWIudW4udmFySW5pdExuay5saW5rX2ZsYWdzID0KKwkJCQlGTEFHU19UT1BPTE9HWV9NT0RFX0xPT1A7CisKKwkJcG1ib3hxLT51Lm1iLm1ieENvbW1hbmQgPSBNQlhfSU5JVF9MSU5LOworCQlwbWJveHEtPnUubWIubWJ4T3duZXIgPSBPV05fSE9TVDsKKworCQltYnhzdGF0dXMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgcG1ib3hxLAorCQkJCQkJICAgICBMUEZDX01CT1hfVE1PKTsKKworCQlpZiAoKG1ieHN0YXR1cyAhPSBNQlhfU1VDQ0VTUykgfHwgKHBtYm94cS0+dS5tYi5tYnhTdGF0dXMpKQorCQkJcmMgPSAtRU5PREVWOworCQllbHNlIHsKKwkJCXBoYmEtPmxpbmtfZmxhZyB8PSBMU19MT09QQkFDS19NT0RFOworCQkJLyogd2FpdCBmb3IgdGhlIGxpbmsgYXR0ZW50aW9uIGludGVycnVwdCAqLworCQkJbXNsZWVwKDEwMCk7CisKKwkJCWkgPSAwOworCQkJd2hpbGUgKHBoYmEtPmxpbmtfc3RhdGUgIT0gTFBGQ19IQkFfUkVBRFkpIHsKKwkJCQlpZiAoaSsrID4gdGltZW91dCkgeworCQkJCQlyYyA9IC1FVElNRURPVVQ7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCW1zbGVlcCgxMCk7CisJCQl9CisJCX0KKworCX0gZWxzZQorCQlyYyA9IC1FTk9ERVY7CisKK2xvb3BiYWNrX21vZGVfZXhpdDoKKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCWlmICh2cG9ydHMpIHsKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCQl9CisJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJfSBlbHNlIHsKKwkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpOworCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc2hvc3QpOworCX0KKworCS8qCisJICogTGV0IFNMSSBsYXllciByZWxlYXNlIG1ib3hxIGlmIG1ib3ggY29tbWFuZCBjb21wbGV0ZWQgYWZ0ZXIgdGltZW91dC4KKwkgKi8KKwlpZiAobWJ4c3RhdHVzICE9IE1CWF9USU1FT1VUKQorCQltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKworam9iX2Vycm9yOgorCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSBpZiBubyBlcnJvciAqLworCWlmIChyYyA9PSAwKQorCQlqb2ItPmpvYl9kb25lKGpvYik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3Bfc2VsZl9yZWcgLSBvYnRhaW5zIGEgcmVtb3RlIHBvcnQgbG9naW4gaWQKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJwaTogUG9pbnRlciB0byBhIHJlbW90ZSBwb3J0IGxvZ2luIGlkCisgKgorICogVGhpcyBmdW5jdGlvbiBvYnRhaW5zIGEgcmVtb3RlIHBvcnQgbG9naW4gaWQgc28gdGhlIGRpYWcgbG9vcGJhY2sgdGVzdAorICogY2FuIHNlbmQgYW5kIHJlY2VpdmUgaXRzIG93biB1bnNvbGljaXRlZCBDVCBjb21tYW5kLgorICoqLworc3RhdGljIGludCBscGZjZGlhZ19sb29wX3NlbGZfcmVnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgKiBycGkpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1hYnVmZjsKKwlpbnQgc3RhdHVzOworCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KQorCQlyZXR1cm4gRU5PTUVNOworCisJc3RhdHVzID0gbHBmY19yZWdfcnBpKHBoYmEsIDAsIHBoYmEtPnBwb3J0LT5mY19teURJRCwKKwkJCQkodWludDhfdCAqKSZwaGJhLT5wcG9ydC0+ZmNfc3BhcmFtLCBtYm94LCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisKKwlkbWFidWZmID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBtYm94LT5jb250ZXh0MTsKKwltYm94LT5jb250ZXh0MSA9IE5VTEw7CisJc3RhdHVzID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIG1ib3gsIExQRkNfTUJPWF9UTU8pOworCisJaWYgKChzdGF0dXMgIT0gTUJYX1NVQ0NFU1MpIHx8IChtYm94LT51Lm1iLm1ieFN0YXR1cykpIHsKKwkJbHBmY19tYnVmX2ZyZWUocGhiYSwgZG1hYnVmZi0+dmlydCwgZG1hYnVmZi0+cGh5cyk7CisJCWtmcmVlKGRtYWJ1ZmYpOworCQlpZiAoc3RhdHVzICE9IE1CWF9USU1FT1VUKQorCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gRU5PREVWOworCX0KKworCSpycGkgPSBtYm94LT51Lm1iLnVuLnZhcldvcmRzWzBdOworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgZG1hYnVmZi0+dmlydCwgZG1hYnVmZi0+cGh5cyk7CisJa2ZyZWUoZG1hYnVmZik7CisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3Bfc2VsZl91bnJlZyAtIHVucmVncyBmcm9tIHRoZSBycGkKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJwaTogUmVtb3RlIHBvcnQgbG9naW4gaWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIHRoZSBycGkgb2J0YWluZWQgaW4gbHBmY2RpYWdfbG9vcF9zZWxmX3JlZworICoqLworc3RhdGljIGludCBscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCBycGkpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCWludCBzdGF0dXM7CisKKwkvKiBBbGxvY2F0ZSBtYm94cSBzdHJ1Y3R1cmUgKi8KKwltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAobWJveCA9PSBOVUxMKQorCQlyZXR1cm4gRU5PTUVNOworCisJbHBmY191bnJlZ19sb2dpbihwaGJhLCAwLCBycGksIG1ib3gpOworCXN0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBtYm94LCBMUEZDX01CT1hfVE1PKTsKKworCWlmICgoc3RhdHVzICE9IE1CWF9TVUNDRVNTKSB8fCAobWJveC0+dS5tYi5tYnhTdGF0dXMpKSB7CisJCWlmIChzdGF0dXMgIT0gTUJYX1RJTUVPVVQpCisJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiBFSU87CisJfQorCisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3BfZ2V0X3hyaSAtIG9idGFpbnMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGlkcworICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0CisgKiBAcnBpOiBSZW1vdGUgcG9ydCBsb2dpbiBpZAorICogQHR4eHJpOiBQb2ludGVyIHRvIHRyYW5zbWl0IGV4Y2hhbmdlIGlkCisgKiBAcnh4cmk6IFBvaW50ZXIgdG8gcmVzcG9uc2UgZXhjaGFiZ2UgaWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG9idGFpbnMgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGlkcyByZXF1aXJlZCB0byBzZW5kCisgKiBhbiB1bnNvbGljaXRlZCBjdCBjb21tYW5kIHdpdGggYSBwYXlsb2FkLiBBIHNwZWNpYWwgbHBmYyBGc1R5cGUgYW5kIENtZFJzcAorICogZmxhZ3MgYXJlIHVzZWQgdG8gdGhlIHVuc29saWN0ZWQgcmVzcG9uc2UgaGFuZGxlciBpcyBhYmxlIHRvIHByb2Nlc3MKKyAqIHRoZSBjdCBjb21tYW5kIHNlbnQgb24gdGhlIHNhbWUgcG9ydC4KKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9nZXRfeHJpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgcnBpLAorCQkJIHVpbnQxNl90ICp0eHhyaSwgdWludDE2X3QgKiByeHhyaSkKK3sKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEsICpyc3Bpb2NicTsKKwlJT0NCX3QgKmNtZCwgKnJzcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZjsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICpicGwgPSBOVUxMOworCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdHJlcSA9IE5VTEw7CisJaW50IHJldF92YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkqdHh4cmkgPSAwOworCSpyeHhyaSA9IDA7CisJZXZ0ID0gbHBmY19ic2dfZXZlbnRfbmV3KEZDX1JFR19DVF9FVkVOVCwgY3VycmVudC0+cGlkLAorCQkJCVNMSV9DVF9FTFhfTE9PUEJBQ0spOworCWlmICghZXZ0KQorCQlyZXR1cm4gRU5PTUVNOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZXZ0LT5ub2RlLCAmcGhiYS0+Y3RfZXZfd2FpdGVycyk7CisJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCisJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisKKwlkbWFidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZG1hYnVmKSB7CisJCWRtYWJ1Zi0+dmlydCA9IGxwZmNfbWJ1Zl9hbGxvYyhwaGJhLCAwLCAmZG1hYnVmLT5waHlzKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRtYWJ1Zi0+bGlzdCk7CisJCWJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIGRtYWJ1Zi0+dmlydDsKKwkJbWVtc2V0KGJwbCwgMCwgc2l6ZW9mKCpicGwpKTsKKwkJY3RyZXEgPSAoc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKikoYnBsICsgMSk7CisJCWJwbC0+YWRkckhpZ2ggPQorCQkJbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKGRtYWJ1Zi0+cGh5cyArIHNpemVvZigqYnBsKSkpOworCQlicGwtPmFkZHJMb3cgPQorCQkJbGUzMl90b19jcHUocHV0UGFkZHJMb3coZG1hYnVmLT5waHlzICsgc2l6ZW9mKCpicGwpKSk7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSAwOworCQlicGwtPnR1cy5mLmJkZVNpemUgPSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOworCQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJfQorCisJaWYgKGNtZGlvY2JxID09IE5VTEwgfHwgcnNwaW9jYnEgPT0gTlVMTCB8fAorCSAgICBkbWFidWYgPT0gTlVMTCB8fCBicGwgPT0gTlVMTCB8fCBjdHJlcSA9PSBOVUxMKSB7CisJCXJldF92YWwgPSBFTk9NRU07CisJCWdvdG8gZXJyX2dldF94cmlfZXhpdDsKKwl9CisKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCisJbWVtc2V0KGN0cmVxLCAwLCBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaKTsKKworCWN0cmVxLT5SZXZpc2lvbklkLmJpdHMuUmV2aXNpb24gPSBTTElfQ1RfUkVWSVNJT047CisJY3RyZXEtPlJldmlzaW9uSWQuYml0cy5JbklkID0gMDsKKwljdHJlcS0+RnNUeXBlID0gU0xJX0NUX0VMWF9MT09QQkFDSzsKKwljdHJlcS0+RnNTdWJUeXBlID0gMDsKKwljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwID0gRUxYX0xPT1BCQUNLX1hSSV9TRVRVUDsKKwljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuU2l6ZSA9IDA7CisKKworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChkbWFidWYtPnBoeXMpOworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3coZG1hYnVmLT5waHlzKTsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkxQXzY0OworCWNtZC0+dW4ueHNlcTY0LmJkbC5iZGVTaXplID0gc2l6ZW9mKCpicGwpOworCisJY21kLT51bi54c2VxNjQudzUuaGNzdy5GY3RsID0gTEE7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5EZmN0bCA9IDA7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5SY3RsID0gRkNfUkNUTF9ERF9VTlNPTF9DVEw7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5UeXBlID0gRkNfVFlQRV9DVDsKKworCWNtZC0+dWxwQ29tbWFuZCA9IENNRF9YTUlUX1NFUVVFTkNFNjRfQ1I7CisJY21kLT51bHBCZGVDb3VudCA9IDE7CisJY21kLT51bHBMZSA9IDE7CisJY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwljbWQtPnVscENvbnRleHQgPSBycGk7CisKKwljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOworCWNtZGlvY2JxLT52cG9ydCA9IHBoYmEtPnBwb3J0OworCisJcmV0X3ZhbCA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwKKwkJCQlyc3Bpb2NicSwKKwkJCQkocGhiYS0+ZmNfcmF0b3YgKiAyKQorCQkJCSsgTFBGQ19EUlZSX1RJTUVPVVQpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIGVycl9nZXRfeHJpX2V4aXQ7CisKKwkqdHh4cmkgPSAgcnNwLT51bHBDb250ZXh0OworCisJZXZ0LT53YWl0aW5nID0gMTsKKwlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJcmV0X3ZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQlldnQtPndxLCAhbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSwKKwkJKChwaGJhLT5mY19yYXRvdiAqIDIpICsgTFBGQ19EUlZSX1RJTUVPVVQpICogSFopOworCWlmIChsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19zZWUpKQorCQlyZXRfdmFsID0gKHJldF92YWwpID8gRUlOVFIgOiBFVElNRURPVVQ7CisJZWxzZSB7CisJCXJldF92YWwgPSBJT0NCX1NVQ0NFU1M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCWxpc3RfbW92ZShldnQtPmV2ZW50c190b19zZWUucHJldiwgJmV2dC0+ZXZlbnRzX3RvX2dldCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJKnJ4eHJpID0gKGxpc3RfZW50cnkoZXZ0LT5ldmVudHNfdG9fZ2V0LnByZXYsCisJCQkJICAgICB0eXBlb2Yoc3RydWN0IGV2ZW50X2RhdGEpLAorCQkJCSAgICAgbm9kZSkpLT5pbW1lZF9kYXQ7CisJfQorCWV2dC0+d2FpdGluZyA9IDA7CisKK2Vycl9nZXRfeHJpX2V4aXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOyAvKiByZWxlYXNlIHJlZiAqLworCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7IC8qIGRlbGV0ZSAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKworCWlmIChkbWFidWYpIHsKKwkJaWYgKGRtYWJ1Zi0+dmlydCkKKwkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGRtYWJ1Zi0+dmlydCwgZG1hYnVmLT5waHlzKTsKKwkJa2ZyZWUoZG1hYnVmKTsKKwl9CisKKwlpZiAoY21kaW9jYnEgJiYgKHJldF92YWwgIT0gSU9DQl9USU1FRE9VVCkpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCWlmIChyc3Bpb2NicSkKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogZGlhZ19jbWRfZGF0YV9hbGxvYyAtIGZpbGxzIGluIGEgYmRlIHN0cnVjdCB3aXRoIGRtYSBidWZmZXJzCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QKKyAqIEBicGw6IFBvaW50ZXIgdG8gNjQgYml0IGJkZSBzdHJ1Y3R1cmUKKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gcHJvY2VzcworICogQG5vY29weWRhdGE6IEZsYWcgdG8gY29weSB1c2VyIGRhdGEgaW50byB0aGUgYWxsb2NhdGVkIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHBhZ2Ugc2l6ZSBidWZmZXJzIGFuZCBwb3B1bGF0ZXMgYW4gbHBmY19kbWFidWZleHQuCisgKiBJZiBhbGxvd2VkIHRoZSB1c2VyIGRhdGEgcG9pbnRlZCB0byB3aXRoIGluZGF0YXB0ciBpcyBjb3BpZWQgaW50byB0aGUga2VybmVsCisgKiBtZW1vcnkuIFRoZSBjaGFpbmVkIGxpc3Qgb2YgcGFnZSBzaXplIGJ1ZmZlcnMgaXMgcmV0dXJuZWQuCisgKiovCitzdGF0aWMgc3RydWN0IGxwZmNfZG1hYnVmZXh0ICoKK2RpYWdfY21kX2RhdGFfYWxsb2Moc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkgICBzdHJ1Y3QgdWxwX2JkZTY0ICpicGwsIHVpbnQzMl90IHNpemUsCisJCSAgIGludCBub2NvcHlkYXRhKQoreworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqbWxpc3QgPSBOVUxMOworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqZG1wOworCWludCBjbnQsIG9mZnNldCA9IDAsIGkgPSAwOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisKKwlwY2lkZXYgPSBwaGJhLT5wY2lkZXY7CisKKwl3aGlsZSAoc2l6ZSkgeworCQkvKiBXZSBnZXQgY2h1bmtzIG9mIDRLICovCisJCWlmIChzaXplID4gQlVGX1NaXzRLKQorCQkJY250ID0gQlVGX1NaXzRLOworCQllbHNlCisJCQljbnQgPSBzaXplOworCisJCS8qIGFsbG9jYXRlIHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCBidWZmZXIgaGVhZGVyICovCisJCWRtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCksIEdGUF9LRVJORUwpOworCQlpZiAoIWRtcCkKKwkJCWdvdG8gb3V0OworCisJCUlOSVRfTElTVF9IRUFEKCZkbXAtPmRtYS5saXN0KTsKKworCQkvKiBRdWV1ZSBpdCB0byBhIGxpbmtlZCBsaXN0ICovCisJCWlmIChtbGlzdCkKKwkJCWxpc3RfYWRkX3RhaWwoJmRtcC0+ZG1hLmxpc3QsICZtbGlzdC0+ZG1hLmxpc3QpOworCQllbHNlCisJCQltbGlzdCA9IGRtcDsKKworCQkvKiBhbGxvY2F0ZSBidWZmZXIgKi8KKwkJZG1wLT5kbWEudmlydCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGNpZGV2LT5kZXYsCisJCQkJCQkgICBjbnQsCisJCQkJCQkgICAmKGRtcC0+ZG1hLnBoeXMpLAorCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFkbXAtPmRtYS52aXJ0KQorCQkJZ290byBvdXQ7CisKKwkJZG1wLT5zaXplID0gY250OworCisJCWlmIChub2NvcHlkYXRhKSB7CisJCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gMDsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShwaGJhLT5wY2lkZXYsCisJCQkJZG1wLT5kbWEucGh5cywgTFBGQ19CUExfU0laRSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJfSBlbHNlIHsKKwkJCW1lbXNldCgodWludDhfdCAqKWRtcC0+ZG1hLnZpcnQsIDAsIGNudCk7CisJCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NEk7CisJCX0KKworCQkvKiBidWlsZCBidWZmZXIgcHRyIGxpc3QgZm9yIElPQ0IgKi8KKwkJYnBsLT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3coZG1wLT5kbWEucGh5cykpOworCQlicGwtPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKGRtcC0+ZG1hLnBoeXMpKTsKKwkJYnBsLT50dXMuZi5iZGVTaXplID0gKHVzaG9ydCkgY250OworCQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJCWJwbCsrOworCisJCWkrKzsKKwkJb2Zmc2V0ICs9IGNudDsKKwkJc2l6ZSAtPSBjbnQ7CisJfQorCisJbWxpc3QtPmZsYWcgPSBpOworCXJldHVybiBtbGlzdDsKK291dDoKKwlkaWFnX2NtZF9kYXRhX2ZyZWUocGhiYSwgbWxpc3QpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGxwZmNkaWFnX2xvb3BfcG9zdF9yeGJ1ZnMgLSBwb3N0IHRoZSByZWNlaXZlIGJ1ZmZlcnMgZm9yIGFuIHVuc29sIENUIGNtZAorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0CisgKiBAcnh4cmk6IFJlY2VpdmUgZXhjaGFuZ2UgaWQKKyAqIEBsZW46IE51bWJlciBvZiBkYXRhIGJ5dGVzCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYW5kIHBvc3RzIGEgZGF0YSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIHRvIHJlY2lldmUKKyAqIGFuIHVuc29saWN0ZWQgQ1QgY29tbWFuZC4KKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9wb3N0X3J4YnVmcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHJ4eHJpLAorCQkJICAgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxOworCUlPQ0JfdCAqY21kID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQsICpjdXJyLCAqbmV4dDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnJ4Ym1wOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1wOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXBbMl0gPSB7TlVMTCwgTlVMTH07CisJc3RydWN0IHVscF9iZGU2NCAqcnhicGwgPSBOVUxMOworCXVpbnQzMl90IG51bV9iZGU7CisJc3RydWN0IGxwZmNfZG1hYnVmZXh0ICpyeGJ1ZmZlciA9IE5VTEw7CisJaW50IHJldF92YWwgPSAwOworCWludCBpID0gMDsKKworCWNtZGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCXJ4Ym1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJ4Ym1wICE9IE5VTEwpIHsKKwkJcnhibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJnJ4Ym1wLT5waHlzKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnJ4Ym1wLT5saXN0KTsKKwkJcnhicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSByeGJtcC0+dmlydDsKKwkJcnhidWZmZXIgPSBkaWFnX2NtZF9kYXRhX2FsbG9jKHBoYmEsIHJ4YnBsLCBsZW4sIDApOworCX0KKworCWlmICghY21kaW9jYnEgfHwgIXJ4Ym1wIHx8ICFyeGJwbCB8fCAhcnhidWZmZXIpIHsKKwkJcmV0X3ZhbCA9IEVOT01FTTsKKwkJZ290byBlcnJfcG9zdF9yeGJ1ZnNfZXhpdDsKKwl9CisKKwkvKiBRdWV1ZSBidWZmZXJzIGZvciB0aGUgcmVjZWl2ZSBleGNoYW5nZSAqLworCW51bV9iZGUgPSAodWludDMyX3QpcnhidWZmZXItPmZsYWc7CisJZG1wID0gJnJ4YnVmZmVyLT5kbWE7CisKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJaSA9IDA7CisKKwlJTklUX0xJU1RfSEVBRCgmaGVhZCk7CisJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJmRtcC0+bGlzdCk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnIsIG5leHQsICZoZWFkKSB7CisJCW1wW2ldID0gbGlzdF9lbnRyeShjdXJyLCBzdHJ1Y3QgbHBmY19kbWFidWYsIGxpc3QpOworCQlsaXN0X2RlbChjdXJyKTsKKworCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CisJCQltcFtpXS0+YnVmZmVyX3RhZyA9IGxwZmNfc2xpX2dldF9idWZmZXJfdGFnKHBoYmEpOworCQkJY21kLT51bi5xdWV4cmk2NGN4LmJ1ZmYuYmRlLmFkZHJIaWdoID0KKwkJCQlwdXRQYWRkckhpZ2gobXBbaV0tPnBoeXMpOworCQkJY21kLT51bi5xdWV4cmk2NGN4LmJ1ZmYuYmRlLmFkZHJMb3cgPQorCQkJCXB1dFBhZGRyTG93KG1wW2ldLT5waHlzKTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJkZS50dXMuZi5iZGVTaXplID0KKwkJCQkoKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKW1wW2ldKS0+c2l6ZTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJ1ZmZlcl90YWcgPSBtcFtpXS0+YnVmZmVyX3RhZzsKKwkJCWNtZC0+dWxwQ29tbWFuZCA9IENNRF9RVUVfWFJJNjRfQ1g7CisJCQljbWQtPnVscFBVID0gMDsKKwkJCWNtZC0+dWxwTGUgPSAxOworCQkJY21kLT51bHBCZGVDb3VudCA9IDE7CisJCQljbWQtPnVuc2xpMy5xdWVfeHJpNjRjeF9leHRfd29yZHMuZWJkZV9jb3VudCA9IDA7CisKKwkJfSBlbHNlIHsKKwkJCWNtZC0+dW4uY29udDY0W2ldLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKG1wW2ldLT5waHlzKTsKKwkJCWNtZC0+dW4uY29udDY0W2ldLmFkZHJMb3cgPSBwdXRQYWRkckxvdyhtcFtpXS0+cGh5cyk7CisJCQljbWQtPnVuLmNvbnQ2NFtpXS50dXMuZi5iZGVTaXplID0KKwkJCQkoKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKW1wW2ldKS0+c2l6ZTsKKwkJCQkJY21kLT51bHBCZGVDb3VudCA9ICsraTsKKworCQkJaWYgKCgtLW51bV9iZGUgPiAwKSAmJiAoaSA8IDIpKQorCQkJCWNvbnRpbnVlOworCisJCQljbWQtPnVscENvbW1hbmQgPSBDTURfUVVFX1hSSV9CVUY2NF9DWDsKKwkJCWNtZC0+dWxwTGUgPSAxOworCQl9CisKKwkJY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwkJY21kLT51bHBDb250ZXh0ID0gcnh4cmk7CisKKwkJcmV0X3ZhbCA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIDApOworCisJCWlmIChyZXRfdmFsID09IElPQ0JfRVJST1IpIHsKKwkJCWRpYWdfY21kX2RhdGFfZnJlZShwaGJhLAorCQkJCShzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiltcFswXSk7CisJCQlpZiAobXBbMV0pCisJCQkJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsCisJCQkJCSAgKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKW1wWzFdKTsKKwkJCWRtcCA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGxwZmNfZG1hYnVmLCBsaXN0KTsKKwkJCXJldF92YWwgPSBFSU87CisJCQlnb3RvIGVycl9wb3N0X3J4YnVmc19leGl0OworCQl9CisKKwkJbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHBoYmEsIHByaW5nLCBtcFswXSk7CisJCWlmIChtcFsxXSkgeworCQkJbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHBoYmEsIHByaW5nLCBtcFsxXSk7CisJCQltcFsxXSA9IE5VTEw7CisJCX0KKworCQkvKiBUaGUgaW9jYiB3YXMgZnJlZWQgYnkgbHBmY19zbGlfaXNzdWVfaW9jYiAqLworCQljbWRpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwkJaWYgKCFjbWRpb2NicSkgeworCQkJZG1wID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgbHBmY19kbWFidWYsIGxpc3QpOworCQkJcmV0X3ZhbCA9IEVJTzsKKwkJCWdvdG8gZXJyX3Bvc3RfcnhidWZzX2V4aXQ7CisJCX0KKworCQljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJCWkgPSAwOworCX0KKwlsaXN0X2RlbCgmaGVhZCk7CisKK2Vycl9wb3N0X3J4YnVmc19leGl0OgorCisJaWYgKHJ4Ym1wKSB7CisJCWlmIChyeGJtcC0+dmlydCkKKwkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIHJ4Ym1wLT52aXJ0LCByeGJtcC0+cGh5cyk7CisJCWtmcmVlKHJ4Ym1wKTsKKwl9CisKKwlpZiAoY21kaW9jYnEpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqIGxwZmNfYnNnX2RpYWdfdGVzdCAtIHdpdGggYSBwb3J0IGluIGxvb3BiYWNrIGlzc3VlcyBhIEN0IGNtZCB0byBpdHNlbGYKKyAqIEBqb2I6IExQRkNfQlNHX1ZFTkRPUl9ESUFHX1RFU1QgZmNfYnNnX2pvYgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgYSB1c2VyIGRhdGEgYnVmZmVyIHRvIGJlIHRyYW5zbWl0dGVkIGFuZCByZWNlaXZlZCBvbgorICogdGhlIHNhbWUgcG9ydCwgdGhlIGxpbmsgbXVzdCBiZSB1cCBhbmQgaW4gbG9vcGJhY2sgbW9kZSBwcmlvcgorICogdG8gYmVpbmcgY2FsbGVkLgorICogMS4gQSBrZXJuZWwgYnVmZmVyIGlzIGFsbG9jYXRlZCB0byBjb3B5IHRoZSB1c2VyIGRhdGEgaW50by4KKyAqIDIuIFRoZSBwb3J0IHJlZ2lzdGVycyB3aXRoICJpdHNlbGYiLgorICogMy4gVGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGV4Y2hhbmdlIGlkcyBhcmUgb2J0YWluZWQuCisgKiA0LiBUaGUgcmVjZWl2ZSBleGNoYW5nZSBpZCBpcyBwb3N0ZWQuCisgKiA1LiBBIG5ldyBlbHMgbG9vcGJhY2sgZXZlbnQgaXMgY3JlYXRlZC4KKyAqIDYuIFRoZSBjb21tYW5kIGFuZCByZXNwb25zZSBpb2NicyBhcmUgYWxsb2NhdGVkLgorICogNy4gVGhlIGNtZCBpb2NiIEZzVHlwZSBpcyBzZXQgdG8gZWx4IGxvb3BiYWNrIGFuZCB0aGUgQ21kUnNwIHRvIGxvb3BwYmFjay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBuIHRpbWVzIHdoaWxlIHRoZSBwb3J0IGlzIGluIGxvb3BiYWNrCisgKiBzbyBpdCBpcyB0aGUgYXBwcyByZXNwb25zaWJpbGl0eSB0byBpc3N1ZSBhIHJlc2V0IHRvIHRha2UgdGhlIHBvcnQgb3V0CisgKiBvZiBsb29wYmFjayBtb2RlLgorICoqLworc3RhdGljIGludAorbHBmY19ic2dfZGlhZ190ZXN0KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJc3RydWN0IGRpYWdfbW9kZV90ZXN0ICpkaWFnX21vZGU7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CisJc3RydWN0IGV2ZW50X2RhdGEgKmV2ZGF0OworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBmdWxsX3NpemU7CisJc2l6ZV90IHNlZ21lbnRfbGVuID0gMCwgc2VnbWVudF9vZmZzZXQgPSAwLCBjdXJyZW50X29mZnNldCA9IDA7CisJdWludDE2X3QgcnBpOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwgKnJzcGlvY2JxOworCUlPQ0JfdCAqY21kLCAqcnNwOworCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdHJlcTsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnR4Ym1wOworCXN0cnVjdCB1bHBfYmRlNjQgKnR4YnBsID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19kbWFidWZleHQgKnR4YnVmZmVyID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJc3RydWN0IGxwZmNfZG1hYnVmICAqY3VycjsKKwl1aW50MTZfdCB0eHhyaSwgcnh4cmk7CisJdWludDMyX3QgbnVtX2JkZTsKKwl1aW50OF90ICpwdHIgPSBOVUxMLCAqcnhfZGF0YWJ1ZiA9IE5VTEw7CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmRhdGFvdXQgPSBOVUxMOworCXVpbnQzMl90IHRvdGFsX21lbTsKKworCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyByZXR1cm5lZCByZXR1cm4ganVzdCB0aGUgcmV0dXJuIGNvZGUgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZGlhZ19tb2RlX3Rlc3QpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzkgUmVjZWl2ZWQgRElBRyBURVNUIHJlcXVlc3QgYmVsb3cgbWluaW11bSAiCisJCQkJInNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCWlmIChqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbiAhPQorCQlqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlkaWFnX21vZGUgPSAoc3RydWN0IGRpYWdfbW9kZV90ZXN0ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisKKwlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPT0gTFBGQ19IQkFfRVJST1IpIHx8CisJICAgIChwc2xpLT5zbGlfZmxhZyAmIExQRkNfQkxPQ0tfTUdNVF9JTykgfHwKKwkgICAgKCEocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkgeworCQlyYyA9IC1FQUNDRVM7CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCWlmICghbHBmY19pc19saW5rX3VwKHBoYmEpIHx8ICEocGhiYS0+bGlua19mbGFnICYgTFNfTE9PUEJBQ0tfTU9ERSkpIHsKKwkJcmMgPSAtRUFDQ0VTOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlzaXplID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJZnVsbF9zaXplID0gc2l6ZSArIEVMWF9MT09QQkFDS19IRUFERVJfU1o7IC8qIHBsdXMgdGhlIGhlYWRlciAqLworCisJaWYgKChzaXplID09IDApIHx8IChzaXplID4gODAgKiBCVUZfU1pfNEspKSB7CisJCXJjID0gLUVSQU5HRTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJaWYgKHNpemUgPj0gQlVGX1NaXzRLKSB7CisJCS8qCisJCSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW9jdGwgZGF0YS4gSWYgYnVmZmVyIGlzIGJpZ2dlciB0aGFuIDY0aywKKwkJICogdGhlbiB3ZSBhbGxvY2F0ZSA2NGsgYW5kIHJlLXVzZSB0aGF0IGJ1ZmZlciBvdmVyIGFuZCBvdmVyIHRvCisJCSAqIHhmZXIgdGhlIHdob2xlIGJsb2NrLiBUaGlzIGlzIGJlY2F1c2UgTGludXgga2VybmVsIGhhcyBhCisJCSAqIHByb2JsZW0gYWxsb2NhdGluZyBtb3JlIHRoYW4gMTIwayBvZiBrZXJuZWwgc3BhY2UgbWVtb3J5LiBTYXcKKwkJICogcHJvYmxlbSB3aXRoIEdFVF9GQ1BUQVJHRVRNQVBQSU5HLi4uCisJCSAqLworCQlpZiAoc2l6ZSA8PSAoNjQgKiAxMDI0KSkKKwkJCXRvdGFsX21lbSA9IHNpemU7CisJCWVsc2UKKwkJCXRvdGFsX21lbSA9IDY0ICogMTAyNDsKKwl9IGVsc2UKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBpb2N0bCBkYXRhICovCisJCXRvdGFsX21lbSA9IEJVRl9TWl80SzsKKworCWRhdGFvdXQgPSBrbWFsbG9jKHRvdGFsX21lbSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGFvdXQgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCXB0ciA9IGRhdGFvdXQ7CisJcHRyICs9IEVMWF9MT09QQkFDS19IRUFERVJfU1o7CisJc2dfY29weV90b19idWZmZXIoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCisJCQkJcHRyLCBzaXplKTsKKworCXJjID0gbHBmY2RpYWdfbG9vcF9zZWxmX3JlZyhwaGJhLCAmcnBpKTsKKwlpZiAocmMpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlyYyA9IGxwZmNkaWFnX2xvb3BfZ2V0X3hyaShwaGJhLCBycGksICZ0eHhyaSwgJnJ4eHJpKTsKKwlpZiAocmMpIHsKKwkJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJcmMgPSBscGZjZGlhZ19sb29wX3Bvc3RfcnhidWZzKHBoYmEsIHJ4eHJpLCBmdWxsX3NpemUpOworCWlmIChyYykgeworCQlscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcocGhiYSwgcnBpKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlldnQgPSBscGZjX2JzZ19ldmVudF9uZXcoRkNfUkVHX0NUX0VWRU5ULCBjdXJyZW50LT5waWQsCisJCQkJU0xJX0NUX0VMWF9MT09QQkFDSyk7CisJaWYgKCFldnQpIHsKKwkJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZXZ0LT5ub2RlLCAmcGhiYS0+Y3RfZXZfd2FpdGVycyk7CisJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCisJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJdHhibXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKworCWlmICh0eGJtcCkgeworCQl0eGJtcC0+dmlydCA9IGxwZmNfbWJ1Zl9hbGxvYyhwaGJhLCAwLCAmdHhibXAtPnBoeXMpOworCQlJTklUX0xJU1RfSEVBRCgmdHhibXAtPmxpc3QpOworCQl0eGJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIHR4Ym1wLT52aXJ0OworCQlpZiAodHhicGwpCisJCQl0eGJ1ZmZlciA9IGRpYWdfY21kX2RhdGFfYWxsb2MocGhiYSwKKwkJCQkJCQl0eGJwbCwgZnVsbF9zaXplLCAwKTsKKwl9CisKKwlpZiAoIWNtZGlvY2JxIHx8ICFyc3Bpb2NicSB8fCAhdHhibXAgfHwgIXR4YnBsIHx8ICF0eGJ1ZmZlcikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2xvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwljbWQgPSAmY21kaW9jYnEtPmlvY2I7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCisJSU5JVF9MSVNUX0hFQUQoJmhlYWQpOworCWxpc3RfYWRkX3RhaWwoJmhlYWQsICZ0eGJ1ZmZlci0+ZG1hLmxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyciwgJmhlYWQsIGxpc3QpIHsKKwkJc2VnbWVudF9sZW4gPSAoKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKWN1cnIpLT5zaXplOworCQlpZiAoY3VycmVudF9vZmZzZXQgPT0gMCkgeworCQkJY3RyZXEgPSBjdXJyLT52aXJ0OworCQkJbWVtc2V0KGN0cmVxLCAwLCBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaKTsKKwkJCWN0cmVxLT5SZXZpc2lvbklkLmJpdHMuUmV2aXNpb24gPSBTTElfQ1RfUkVWSVNJT047CisJCQljdHJlcS0+UmV2aXNpb25JZC5iaXRzLkluSWQgPSAwOworCQkJY3RyZXEtPkZzVHlwZSA9IFNMSV9DVF9FTFhfTE9PUEJBQ0s7CisJCQljdHJlcS0+RnNTdWJUeXBlID0gMDsKKwkJCWN0cmVxLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3AgPSBFTFhfTE9PUEJBQ0tfREFUQTsKKwkJCWN0cmVxLT5Db21tYW5kUmVzcG9uc2UuYml0cy5TaXplICAgPSBzaXplOworCQkJc2VnbWVudF9vZmZzZXQgPSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOworCQl9IGVsc2UKKwkJCXNlZ21lbnRfb2Zmc2V0ID0gMDsKKworCQlCVUdfT04oc2VnbWVudF9vZmZzZXQgPj0gc2VnbWVudF9sZW4pOworCQltZW1jcHkoY3Vyci0+dmlydCArIHNlZ21lbnRfb2Zmc2V0LAorCQkJcHRyICsgY3VycmVudF9vZmZzZXQsCisJCQlzZWdtZW50X2xlbiAtIHNlZ21lbnRfb2Zmc2V0KTsKKworCQljdXJyZW50X29mZnNldCArPSBzZWdtZW50X2xlbiAtIHNlZ21lbnRfb2Zmc2V0OworCQlCVUdfT04oY3VycmVudF9vZmZzZXQgPiBzaXplKTsKKwl9CisJbGlzdF9kZWwoJmhlYWQpOworCisJLyogQnVpbGQgdGhlIFhNSVRfU0VRVUVOQ0UgaW9jYiAqLworCisJbnVtX2JkZSA9ICh1aW50MzJfdCl0eGJ1ZmZlci0+ZmxhZzsKKworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaCh0eGJtcC0+cGh5cyk7CisJY21kLT51bi54c2VxNjQuYmRsLmFkZHJMb3cgPSBwdXRQYWRkckxvdyh0eGJtcC0+cGh5cyk7CisJY21kLT51bi54c2VxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYmRlU2l6ZSA9IChudW1fYmRlICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKKworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuRmN0bCA9IChMUyB8IExBKTsKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LkRmY3RsID0gMDsKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LlJjdGwgPSBGQ19SQ1RMX0REX1VOU09MX0NUTDsKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LlR5cGUgPSBGQ19UWVBFX0NUOworCisJY21kLT51bHBDb21tYW5kID0gQ01EX1hNSVRfU0VRVUVOQ0U2NF9DWDsKKwljbWQtPnVscEJkZUNvdW50ID0gMTsKKwljbWQtPnVscExlID0gMTsKKwljbWQtPnVscENsYXNzID0gQ0xBU1MzOworCWNtZC0+dWxwQ29udGV4dCA9IHR4eHJpOworCisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKKwljbWRpb2NicS0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKworCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCByc3Bpb2NicSwKKwkJCQkgICAgICAocGhiYS0+ZmNfcmF0b3YgKiAyKSArIExQRkNfRFJWUl9USU1FT1VUKTsKKworCWlmICgocmMgIT0gSU9DQl9TVUNDRVNTKSB8fCAocnNwLT51bHBTdGF0dXMgIT0gSU9DQl9TVUNDRVNTKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gZXJyX2xvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlldnQtPndhaXRpbmcgPSAxOworCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCWV2dC0+d3EsICFsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19zZWUpLAorCQkoKHBoYmEtPmZjX3JhdG92ICogMikgKyBMUEZDX0RSVlJfVElNRU9VVCkgKiBIWik7CisJZXZ0LT53YWl0aW5nID0gMDsKKwlpZiAobGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkKKwkJcmMgPSAocmMpID8gLUVJTlRSIDogLUVUSU1FRE9VVDsKKwllbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9tb3ZlKGV2dC0+ZXZlbnRzX3RvX3NlZS5wcmV2LCAmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKKwkJZXZkYXQgPSBsaXN0X2VudHJ5KGV2dC0+ZXZlbnRzX3RvX2dldC5wcmV2LAorCQkJCSAgIHR5cGVvZigqZXZkYXQpLCBub2RlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlyeF9kYXRhYnVmID0gZXZkYXQtPmRhdGE7CisJCWlmIChldmRhdC0+bGVuICE9IGZ1bGxfc2l6ZSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElCREZDLAorCQkJCSIxNjAzIExvb3BiYWNrIHRlc3QgZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkICIKKwkJCQkiZGF0YSBsZW5ndGguIGFjdHVhbCBsZW5ndGggMHgleCBleHBlY3RlZCAiCisJCQkJImxlbmd0aCAweCV4XG4iLAorCQkJCWV2ZGF0LT5sZW4sIGZ1bGxfc2l6ZSk7CisJCQlyYyA9IC1FSU87CisJCX0gZWxzZSBpZiAocnhfZGF0YWJ1ZiA9PSBOVUxMKQorCQkJcmMgPSAtRUlPOworCQllbHNlIHsKKwkJCXJjID0gSU9DQl9TVUNDRVNTOworCQkJLyogc2tpcCBvdmVyIGVseCBsb29wYmFjayBoZWFkZXIgKi8KKwkJCXJ4X2RhdGFidWYgKz0gRUxYX0xPT1BCQUNLX0hFQURFUl9TWjsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkJCSAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LAorCQkJCQkJICAgIHJ4X2RhdGFidWYsIHNpemUpOworCQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gc2l6ZTsKKwkJfQorCX0KKworZXJyX2xvb3BiYWNrX3Rlc3RfZXhpdDoKKwlscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcocGhiYSwgcnBpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsgLyogcmVsZWFzZSByZWYgKi8KKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOyAvKiBkZWxldGUgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisKKwlpZiAoY21kaW9jYnEgIT0gTlVMTCkKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CisKKwlpZiAocnNwaW9jYnEgIT0gTlVMTCkKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisKKwlpZiAodHhibXAgIT0gTlVMTCkgeworCQlpZiAodHhicGwgIT0gTlVMTCkgeworCQkJaWYgKHR4YnVmZmVyICE9IE5VTEwpCisJCQkJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsIHR4YnVmZmVyKTsKKwkJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIHR4Ym1wLT52aXJ0LCB0eGJtcC0+cGh5cyk7CisJCX0KKwkJa2ZyZWUodHhibXApOworCX0KKworbG9vcGJhY2tfdGVzdF9leGl0OgorCWtmcmVlKGRhdGFvdXQpOworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlIGlmIG5vIGVycm9yICovCisJaWYgKHJjID09IDApCisJCWpvYi0+am9iX2RvbmUoam9iKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfZ2V0X2RmY19yZXYgLSBwcm9jZXNzIGEgR0VUX0RGQ19SRVYgYnNnIHZlbmRvciBjb21tYW5kCisgKiBAam9iOiBHRVRfREZDX1JFViBmY19ic2dfam9iCisgKiovCitzdGF0aWMgaW50CitscGZjX2JzZ19nZXRfZGZjX3JldihzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBnZXRfbWdtdF9yZXYgKmV2ZW50X3JlcTsKKwlzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5ICpldmVudF9yZXBseTsKKwlpbnQgcmMgPSAwOworCisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZ2V0X21nbXRfcmV2KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzQwIFJlY2VpdmVkIEdFVF9ERkNfUkVWIHJlcXVlc3QgYmVsb3cgIgorCQkJCSJtaW5pbXVtIHNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWV2ZW50X3JlcSA9IChzdHJ1Y3QgZ2V0X21nbXRfcmV2ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisKKwlldmVudF9yZXBseSA9IChzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5ICopCisJCWpvYi0+cmVwbHktPnJlcGx5X2RhdGEudmVuZG9yX3JlcGx5LnZlbmRvcl9yc3A7CisKKwlpZiAoam9iLT5yZXBseV9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzQxIFJlY2VpdmVkIEdFVF9ERkNfUkVWIHJlcGx5IGJlbG93ICIKKwkJCQkibWluaW11bSBzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlldmVudF9yZXBseS0+aW5mby5hX01ham9yID0gTUFOQUdFTUVOVF9NQUpPUl9SRVY7CisJZXZlbnRfcmVwbHktPmluZm8uYV9NaW5vciA9IE1BTkFHRU1FTlRfTUlOT1JfUkVWOworam9iX2Vycm9yOgorCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWlmIChyYyA9PSAwKQorCQlqb2ItPmpvYl9kb25lKGpvYik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX3dha2VfbWJveF93YWl0IC0gbHBmY19ic2dfaXNzdWVfbWJveCBtYm94IGNvbXBsZXRpb24gaGFuZGxlcgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHBtYm94cTogUG9pbnRlciB0byBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyBpcyBjb21wbGV0aW9uIGhhbmRsZXIgZnVuY3Rpb24gZm9yIG1haWxib3ggY29tbWFuZHMgaXNzdWVkIGZyb20KKyAqIGxwZmNfYnNnX2lzc3VlX21ib3ggZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZQorICogbWFpbGJveCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uIHdpdGggbm8gbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiB3aWxsIHdha2UgdXAgdGhyZWFkIHdhaXRpbmcgb24gdGhlIHdhaXQgcXVldWUgcG9pbnRlZCBieSBjb250ZXh0MQorICogb2YgdGhlIG1haWxib3guCisgKiovCit2b2lkCitscGZjX2JzZ193YWtlX21ib3hfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1ib3hxKQoreworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJTUFJTEJPWF90ICpwbWI7CisJTUFJTEJPWF90ICptYjsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iOworCXVpbnQzMl90IHNpemU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJZGRfZGF0YSA9IHBtYm94cS0+Y29udGV4dDE7CisJaWYgKCFkZF9kYXRhKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXBtYiA9ICZkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3gucG1ib3hxLT51Lm1iOworCW1iID0gZGRfZGF0YS0+Y29udGV4dF91bi5tYm94Lm1iOworCWpvYiA9IGRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5zZXRfam9iOworCW1lbWNweShtYiwgcG1iLCBzaXplb2YoKnBtYikpOworCXNpemUgPSBqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkJCWpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsCisJCQkJbWIsIHNpemUpOworCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnNldF9qb2IgPSBOVUxMOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJam9iLT5qb2JfZG9uZShqb2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwltZW1wb29sX2ZyZWUoZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJa2ZyZWUobWIpOworCWtmcmVlKGRkX2RhdGEpOworCXJldHVybjsKK30KKworLyoqCisgKiBscGZjX2JzZ19jaGVja19jbWRfYWNjZXNzIC0gdGVzdCBmb3IgYSBzdXBwb3J0ZWQgbWFpbGJveCBjb21tYW5kCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWI6IFBvaW50ZXIgdG8gYSBtYWlsYm94IG9iamVjdC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byBhIHZwb3J0IG9iamVjdC4KKyAqCisgKiBTb21lIGNvbW1hbmRzIHJlcXVpcmUgdGhlIHBvcnQgdG8gYmUgb2ZmbGluZSwgc29tZSBtYXkgbm90IGJlIGNhbGxlZCBmcm9tCisgKiB0aGUgYXBwbGljYXRpb24uCisgKiovCitzdGF0aWMgaW50IGxwZmNfYnNnX2NoZWNrX2NtZF9hY2Nlc3Moc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCU1BSUxCT1hfdCAqbWIsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwkvKiByZXR1cm4gbmVnYXRpdmUgZXJyb3IgdmFsdWVzIGZvciBic2cgam9iICovCisJc3dpdGNoIChtYi0+bWJ4Q29tbWFuZCkgeworCS8qIE9mZmxpbmUgb25seSAqLworCWNhc2UgTUJYX0lOSVRfTElOSzoKKwljYXNlIE1CWF9ET1dOX0xJTks6CisJY2FzZSBNQlhfQ09ORklHX0xJTks6CisJY2FzZSBNQlhfQ09ORklHX1JJTkc6CisJY2FzZSBNQlhfUkVTRVRfUklORzoKKwljYXNlIE1CWF9VTlJFR19MT0dJTjoKKwljYXNlIE1CWF9DTEVBUl9MQToKKwljYXNlIE1CWF9EVU1QX0NPTlRFWFQ6CisJY2FzZSBNQlhfUlVOX0RJQUdTOgorCWNhc2UgTUJYX1JFU1RBUlQ6CisJY2FzZSBNQlhfU0VUX01BU0s6CisJCWlmICghKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjc0MyBDb21tYW5kIDB4JXggaXMgaWxsZWdhbCBpbiBvbi1saW5lICIKKwkJCQkic3RhdGVcbiIsCisJCQkJbWItPm1ieENvbW1hbmQpOworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCWNhc2UgTUJYX1dSSVRFX05WOgorCWNhc2UgTUJYX1dSSVRFX1ZQQVJNUzoKKwljYXNlIE1CWF9MT0FEX1NNOgorCWNhc2UgTUJYX1JFQURfTlY6CisJY2FzZSBNQlhfUkVBRF9DT05GSUc6CisJY2FzZSBNQlhfUkVBRF9SQ09ORklHOgorCWNhc2UgTUJYX1JFQURfU1RBVFVTOgorCWNhc2UgTUJYX1JFQURfWFJJOgorCWNhc2UgTUJYX1JFQURfUkVWOgorCWNhc2UgTUJYX1JFQURfTE5LX1NUQVQ6CisJY2FzZSBNQlhfRFVNUF9NRU1PUlk6CisJY2FzZSBNQlhfRE9XTl9MT0FEOgorCWNhc2UgTUJYX1VQREFURV9DRkc6CisJY2FzZSBNQlhfS0lMTF9CT0FSRDoKKwljYXNlIE1CWF9MT0FEX0FSRUE6CisJY2FzZSBNQlhfTE9BRF9FWFBfUk9NOgorCWNhc2UgTUJYX0JFQUNPTjoKKwljYXNlIE1CWF9ERUxfTERfRU5UUlk6CisJY2FzZSBNQlhfU0VUX0RFQlVHOgorCWNhc2UgTUJYX1dSSVRFX1dXTjoKKwljYXNlIE1CWF9TTEk0X0NPTkZJRzoKKwljYXNlIE1CWF9SRUFEX0VWRU5UX0xPR19TVEFUVVM6CisJY2FzZSBNQlhfV1JJVEVfRVZFTlRfTE9HOgorCWNhc2UgTUJYX1BPUlRfQ0FQQUJJTElUSUVTOgorCWNhc2UgTUJYX1BPUlRfSU9WX0NPTlRST0w6CisJCWJyZWFrOworCWNhc2UgTUJYX1NFVF9WQVJJQUJMRToKKwljYXNlIE1CWF9SVU5fQklVX0RJQUc2NDoKKwljYXNlIE1CWF9SRUFEX0VWRU5UX0xPRzoKKwljYXNlIE1CWF9SRUFEX1NQQVJNNjQ6CisJY2FzZSBNQlhfUkVBRF9MQToKKwljYXNlIE1CWF9SRUFEX0xBNjQ6CisJY2FzZSBNQlhfUkVHX0xPR0lOOgorCWNhc2UgTUJYX1JFR19MT0dJTjY0OgorCWNhc2UgTUJYX0NPTkZJR19QT1JUOgorCWNhc2UgTUJYX1JVTl9CSVVfRElBRzoKKwlkZWZhdWx0OgorCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJIjI3NDIgVW5rbm93biBDb21tYW5kIDB4JXhcbiIsCisJCQltYi0+bWJ4Q29tbWFuZCk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJcmV0dXJuIDA7IC8qIG9rICovCit9CisKKy8qKgorICogbHBmY19ic2dfaXNzdWVfbWJveCAtIGlzc3VlcyBhIG1haWxib3ggY29tbWFuZCBvbiBiZWhhbGYgb2YgYW4gYXBwCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWI6IFBvaW50ZXIgdG8gYSBtYWlsYm94IG9iamVjdC4KKyAqIEB2cG9ydDogUG9pbnRlciB0byBhIHZwb3J0IG9iamVjdC4KKyAqCisgKiBBbGxvY2F0ZSBhIHRyYWNraW5nIG9iamVjdCwgbWFpbGJveCBjb21tYW5kIG1lbW9yeSwgZ2V0IGEgbWFpbGJveAorICogZnJvbSB0aGUgbWFpbGJveCBwb29sLCBjb3B5IHRoZSBjYWxsZXIgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIElmIG9mZmxpbmUgYW5kIHRoZSBzbGkgaXMgYWN0aXZlIHdlIG5lZWQgdG8gcG9sbCBmb3IgdGhlIGNvbW1hbmQgKHBvcnQgaXMKKyAqIGJlaW5nIHJlc2V0KSBhbmQgY29tLXBsZXRlIHRoZSBqb2IsIG90aGVyd2lzZSBpc3N1ZSB0aGUgbWFpbGJveCBjb21tYW5kIGFuZAorICogbGV0IG91ciBjb21wbGV0aW9uIGhhbmRsZXIgZmluaXNoIHRoZSBjb21tYW5kLgorICoqLworc3RhdGljIHVpbnQzMl90CitscGZjX2JzZ19pc3N1ZV9tYm94KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGZjX2JzZ19qb2IgKmpvYiwKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJTFBGQ19NQk9YUV90ICpwbWJveHE7CisJTUFJTEJPWF90ICpwbWI7CisJTUFJTEJPWF90ICptYjsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVpbnQzMl90IHNpemU7CisJaW50IHJjID0gMDsKKworCS8qIGFsbG9jYXRlIG91ciBic2cgdHJhY2tpbmcgc3RydWN0dXJlICovCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjcyNyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBkZF9kYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYikgeworCQlrZnJlZShkZF9kYXRhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYm94cSkgeworCQlrZnJlZShkZF9kYXRhKTsKKwkJa2ZyZWUobWIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzaXplID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJc2dfY29weV90b19idWZmZXIoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCisJCQkJbWIsIHNpemUpOworCisJcmMgPSBscGZjX2JzZ19jaGVja19jbWRfYWNjZXNzKHBoYmEsIG1iLCB2cG9ydCk7CisJaWYgKHJjICE9IDApIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiByYzsgLyogbXVzdCBiZSBuZWdhdGl2ZSAqLworCX0KKworCW1lbXNldChwbWJveHEsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKKwlwbWIgPSAmcG1ib3hxLT51Lm1iOworCW1lbWNweShwbWIsIG1iLCBzaXplb2YoKnBtYikpOworCXBtYi0+bWJ4T3duZXIgPSBPV05fSE9TVDsKKwlwbWJveHEtPmNvbnRleHQxID0gTlVMTDsKKwlwbWJveHEtPnZwb3J0ID0gdnBvcnQ7CisKKwlpZiAoKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSB8fAorCSAgICAoIShwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkgeworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1ib3hxLCBNQlhfUE9MTCk7CisJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgeworCQkJaWYgKHJjICE9IE1CWF9USU1FT1VUKSB7CisJCQkJa2ZyZWUoZGRfZGF0YSk7CisJCQkJa2ZyZWUobWIpOworCQkJCW1lbXBvb2xfZnJlZShwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJfQorCQkJcmV0dXJuICAocmMgPT0gTUJYX1RJTUVPVVQpID8gLUVUSU1FIDogLUVOT0RFVjsKKwkJfQorCisJCW1lbWNweShtYiwgcG1iLCBzaXplb2YoKnBtYikpOworCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkJam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKKwkJCQkJbWIsIHNpemUpOworCQlrZnJlZShkZF9kYXRhKTsKKwkJa2ZyZWUobWIpOworCQltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJLyogbm90IHdhaXRpbmcgbWJveCBhbHJlYWR5IGRvbmUgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJLyogc2V0dXAgd2FrZSBjYWxsIGFzIElPQ0IgY2FsbGJhY2sgKi8KKwlwbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfYnNnX3dha2VfbWJveF93YWl0OworCS8qIHNldHVwIGNvbnRleHQgZmllbGQgdG8gcGFzcyB3YWl0X3F1ZXVlIHBvaW50ZXIgdG8gd2FrZSBmdW5jdGlvbiAqLworCXBtYm94cS0+Y29udGV4dDEgPSBkZF9kYXRhOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX01CT1g7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnBtYm94cSA9IHBtYm94cTsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3gubWIgPSBtYjsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3guc2V0X2pvYiA9IGpvYjsKKwlqb2ItPmRkX2RhdGEgPSBkZF9kYXRhOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWJveHEsIE1CWF9OT1dBSVQpOworCWlmICgocmMgIT0gTUJYX1NVQ0NFU1MpICYmIChyYyAhPSBNQlhfQlVTWSkpIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAxOworfQorCisvKioKKyAqIGxwZmNfYnNnX21ib3hfY21kIC0gcHJvY2VzcyBhbiBmYyBic2cgTFBGQ19CU0dfVkVORE9SX01CT1ggY29tbWFuZAorICogQGpvYjogTUJPWCBmY19ic2dfam9iIGZvciBMUEZDX0JTR19WRU5ET1JfTUJPWC4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX21ib3hfY21kKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJaW50IHJjID0gMDsKKworCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyB0cmFuc2ZlcnJlZCAqLworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3QgZGZjX21ib3hfcmVxKSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM3IFJlY2VpdmVkIE1CT1hfUkVRIHJlcXVlc3QgYmVsb3cgIgorCQkJCSJtaW5pbXVtIHNpemVcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWlmIChqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbiAhPSBQQUdFX1NJWkUpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlpZiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19CTE9DS19NR01UX0lPKSB7CisJCXJjID0gLUVBR0FJTjsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJcmMgPSBscGZjX2JzZ19pc3N1ZV9tYm94KHBoYmEsIGpvYiwgdnBvcnQpOworCitqb2JfZXJyb3I6CisJaWYgKHJjID09IDApIHsKKwkJLyogam9iIGRvbmUgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKKwkJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCX0gZWxzZSBpZiAocmMgPT0gMSkKKwkJLyogam9iIHN1Ym1pdHRlZCwgd2lsbCBjb21wbGV0ZSBsYXRlciovCisJCXJjID0gMDsgLyogcmV0dXJuIHplcm8sIG5vIGVycm9yICovCisJZWxzZSB7CisJCS8qIHNvbWUgZXJyb3Igb2NjdXJyZWQgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJfQogCiAJcmV0dXJuIHJjOwogfQpAQCAtODM0LDM4ICsyNjQwLDU3IEBACiAvKioKICAqIGxwZmNfYnNnX2hzdF92ZW5kb3IgLSBwcm9jZXNzIGEgdmVuZG9yLXNwZWNpZmljIGZjX2JzZ19qb2IKICAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCi0gKi8KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfYnNnX2hzdF92ZW5kb3Ioc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAlpbnQgY29tbWFuZCA9IGpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWRbMF07CisJaW50IHJjOwogCiAJc3dpdGNoIChjb21tYW5kKSB7CiAJY2FzZSBMUEZDX0JTR19WRU5ET1JfU0VUX0NUX0VWRU5UOgotCQlyZXR1cm4gbHBmY19ic2dfc2V0X2V2ZW50KGpvYik7CisJCXJjID0gbHBmY19ic2dfaGJhX3NldF9ldmVudChqb2IpOwogCQlicmVhazsKLQogCWNhc2UgTFBGQ19CU0dfVkVORE9SX0dFVF9DVF9FVkVOVDoKLQkJcmV0dXJuIGxwZmNfYnNnX2dldF9ldmVudChqb2IpOworCQlyYyA9IGxwZmNfYnNnX2hiYV9nZXRfZXZlbnQoam9iKTsKIAkJYnJlYWs7Ci0KKwljYXNlIExQRkNfQlNHX1ZFTkRPUl9TRU5EX01HTVRfUkVTUDoKKwkJcmMgPSBscGZjX2JzZ19zZW5kX21nbXRfcnNwKGpvYik7CisJCWJyZWFrOworCWNhc2UgTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERToKKwkJcmMgPSBscGZjX2JzZ19kaWFnX21vZGUoam9iKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0JTR19WRU5ET1JfRElBR19URVNUOgorCQlyYyA9IGxwZmNfYnNnX2RpYWdfdGVzdChqb2IpOworCQlicmVhazsKKwljYXNlIExQRkNfQlNHX1ZFTkRPUl9HRVRfTUdNVF9SRVY6CisJCXJjID0gbHBmY19ic2dfZ2V0X2RmY19yZXYoam9iKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0JTR19WRU5ET1JfTUJPWDoKKwkJcmMgPSBscGZjX2JzZ19tYm94X2NtZChqb2IpOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmMgPSAtRUlOVkFMOworCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCQkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwkJYnJlYWs7CiAJfQorCisJcmV0dXJuIHJjOwogfQogCiAvKioKICAqIGxwZmNfYnNnX3JlcXVlc3QgLSBoYW5kbGUgYSBic2cgcmVxdWVzdCBmcm9tIHRoZSBGQyB0cmFuc3BvcnQKICAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCi0gKi8KKyAqKi8KIGludAogbHBmY19ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQogewogCXVpbnQzMl90IG1zZ2NvZGU7Ci0JaW50IHJjID0gLUVJTlZBTDsKKwlpbnQgcmM7CiAKIAltc2djb2RlID0gam9iLT5yZXF1ZXN0LT5tc2djb2RlOwotCiAJc3dpdGNoIChtc2djb2RlKSB7CiAJY2FzZSBGQ19CU0dfSFNUX1ZFTkRPUjoKIAkJcmMgPSBscGZjX2JzZ19oc3RfdmVuZG9yKGpvYik7CkBAIC04NzQsOSArMjY5OSwxMyBAQAogCQlyYyA9IGxwZmNfYnNnX3Jwb3J0X2Vscyhqb2IpOwogCQlicmVhazsKIAljYXNlIEZDX0JTR19SUFRfQ1Q6Ci0JCXJjID0gbHBmY19ic2dfcnBvcnRfY3Qoam9iKTsKKwkJcmMgPSBscGZjX2JzZ19zZW5kX21nbXRfY21kKGpvYik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCXJjID0gLUVJTlZBTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CiAJCWJyZWFrOwogCX0KIApAQCAtODg5LDE3ICsyNzE4LDcxIEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBqdXN0IGFib3J0cyB0aGUgam9iJ3MgSU9DQi4gIFRoZSBhYm9ydGVkIElPQ0Igd2lsbCByZXR1cm4gdG8KICAqIHRoZSB3YWl0aW5nIGZ1bmN0aW9uIHdoaWNoIHdpbGwgaGFuZGxlIHBhc3NpbmcgdGhlIGVycm9yIGJhY2sgdG8gdXNlcnNwYWNlCi0gKi8KKyAqKi8KIGludAogbHBmY19ic2dfdGltZW91dChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwotCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopam9iLT5kZF9kYXRhOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiOworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OworCXN0cnVjdCBscGZjX2JzZ19pb2NiICppb2NiOworCXN0cnVjdCBscGZjX2JzZ19tYm94ICptYm94OwogCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXTsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoY21kaW9jYikKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWRkX2RhdGEgPSAoc3RydWN0IGJzZ19qb2JfZGF0YSAqKWpvYi0+ZGRfZGF0YTsKKwkvKiB0aW1lb3V0IGFuZCBjb21wbGV0aW9uIGNyb3NzZWQgcGF0aHMgaWYgbm8gZGRfZGF0YSAqLworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoZGRfZGF0YS0+dHlwZSkgeworCWNhc2UgVFlQRV9JT0NCOgorCQlpb2NiID0gJmRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYjsKKwkJY21kaW9jYiA9IGlvY2ItPmNtZGlvY2JxOworCQkvKiBoaW50IHRvIGNvbXBsZXRpb24gaGFuZGxlciB0aGF0IHRoZSBqb2IgdGltZWQgb3V0ICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FQUdBSU47CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJLyogdGhpcyB3aWxsIGNhbGwgb3VyIGNvbXBsZXRpb24gaGFuZGxlciAqLworCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcocGhiYSwgcHJpbmcsIGNtZGlvY2IpOworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlicmVhazsKKwljYXNlIFRZUEVfRVZUOgorCQlldnQgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmV2dDsKKwkJLyogdGhpcyBldmVudCBoYXMgbm8gam9iIGFueW1vcmUgKi8KKwkJZXZ0LT5zZXRfam9iID0gTlVMTDsKKwkJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJLyogUmV0dXJuIC1FQUdBSU4gd2hpY2ggaXMgb3VyIHdheSBvZiBzaWduYWxseWluZyB0aGUKKwkJICogYXBwIHRvIHJldHJ5LgorCQkgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVBR0FJTjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlqb2ItPmpvYl9kb25lKGpvYik7CisJCWJyZWFrOworCWNhc2UgVFlQRV9NQk9YOgorCQltYm94ID0gJmRkX2RhdGEtPmNvbnRleHRfdW4ubWJveDsKKwkJLyogdGhpcyBtYm94IGhhcyBubyBqb2IgYW55bW9yZSAqLworCQltYm94LT5zZXRfam9iID0gTlVMTDsKKwkJam9iLT5kZF9kYXRhID0gTlVMTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVBR0FJTjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlqb2ItPmpvYl9kb25lKGpvYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJfQogCisJLyogc2NzaSB0cmFuc3BvcnQgZmMgZmNfYnNnX2pvYl90aW1lb3V0IGV4cGVjdHMgYSB6ZXJvIHJldHVybiBjb2RlLAorCSAqIG90aGVyd2lzZSBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSBjb25zb2xlCisJICogc28gYWx3YXlzIHJldHVybiBzdWNjZXNzICh6ZXJvKQorCSAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4Zjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmgKQEAgLTAsMCArMSw5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCisgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAqCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgICAgICAgKgorICogUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLiAqCisgKiBBTEwgRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgICAgICAgICAgKgorICogV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgICoKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgICAgICAqCisgKiBESVNDTEFJTUVELCBFWENFUFQgVE8gVEhFIEVYVEVOVCBUSEFUIFNVQ0ggRElTQ0xBSU1FUlMgQVJFIEhFTEQgKgorICogVE8gQkUgTEVHQUxMWSBJTlZBTElELiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgICoKKyAqIG1vcmUgZGV0YWlscywgYSBjb3B5IG9mIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSBDT1BZSU5HICAqCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBic2cgZGVmaW5pdGlvbnMKKyAqIE5vIHBvaW50ZXJzIHRvIHVzZXIgZGF0YSBhcmUgYWxsb3dlZCwgYWxsIGFwcGxpY2F0aW9uIGJ1ZmZlcnMgYW5kIHNpemVzIHdpbGwKKyAqIGRlcml2ZWQgdGhyb3VnaCB0aGUgYnNnIGludGVyZmFjZS4KKyAqCisgKiBUaGVzZSBhcmUgdGhlIHZlbmRvciB1bmlxdWUgc3RydWN0dXJlcyBwYXNzZWQgaW4gdXNpbmcgdGhlIGJzZworICogRkNfQlNHX0hTVF9WRU5ET1IgbWVzc2FnZSBjb2RlIHR5cGUuCisgKi8KKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX1NFVF9DVF9FVkVOVAkxCisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9HRVRfQ1RfRVZFTlQJMgorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfU0VORF9NR01UX1JFU1AJMworI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfRElBR19NT0RFCTQKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX0RJQUdfVEVTVAk1CisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9HRVRfTUdNVF9SRVYJNgorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfTUJPWAkJNworCitzdHJ1Y3Qgc2V0X2N0X2V2ZW50IHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IHR5cGVfbWFzazsKKwl1aW50MzJfdCBldl9yZXFfaWQ7CisJdWludDMyX3QgZXZfcmVnX2lkOworfTsKKworc3RydWN0IGdldF9jdF9ldmVudCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCBldl9yZWdfaWQ7CisJdWludDMyX3QgZXZfcmVxX2lkOworfTsKKworc3RydWN0IGdldF9jdF9ldmVudF9yZXBseSB7CisJdWludDMyX3QgaW1tZWRfZGF0YTsKKwl1aW50MzJfdCB0eXBlOworfTsKKworc3RydWN0IHNlbmRfbWdtdF9yZXNwIHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IHRhZzsKK307CisKKworI2RlZmluZSBJTlRFUk5BTF9MT09QX0JBQ0sgMHgxIC8qIGFkYXB0ZXIgc2hvcnQgY3V0cyB0aGUgbG9vcCBpbnRlcm5hbGx5ICovCisjZGVmaW5lIEVYVEVSTkFMX0xPT1BfQkFDSyAweDIgLyogcmVxdWlyZXMgYW4gZXh0ZXJuYWwgbG9vcGJhY2sgcGx1ZyAqLworCitzdHJ1Y3QgZGlhZ19tb2RlX3NldCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCB0eXBlOworCXVpbnQzMl90IHRpbWVvdXQ7Cit9OworCitzdHJ1Y3QgZGlhZ19tb2RlX3Rlc3QgeworCXVpbnQzMl90IGNvbW1hbmQ7Cit9OworCisjZGVmaW5lIExQRkNfV1dOTl9UWVBFCQkwCisjZGVmaW5lIExQRkNfV1dQTl9UWVBFCQkxCisKK3N0cnVjdCBnZXRfbWdtdF9yZXYgeworCXVpbnQzMl90IGNvbW1hbmQ7Cit9OworCisjZGVmaW5lIE1BTkFHRU1FTlRfTUFKT1JfUkVWICAgMQorI2RlZmluZSBNQU5BR0VNRU5UX01JTk9SX1JFViAgIDAKKworLyogdGhlIE1nbXRSZXZJbmZvIHN0cnVjdHVyZSAqLworc3RydWN0IE1nbXRSZXZJbmZvIHsKKwl1aW50MzJfdCBhX01ham9yOworCXVpbnQzMl90IGFfTWlub3I7Cit9OworCitzdHJ1Y3QgZ2V0X21nbXRfcmV2X3JlcGx5IHsKKwlzdHJ1Y3QgTWdtdFJldkluZm8gaW5mbzsKK307CisKK3N0cnVjdCBkZmNfbWJveF9yZXEgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgaW5FeHRXTGVuOworCXVpbnQzMl90IG91dEV4dFdMZW47CisJdWludDhfdCBtYk9mZnNldDsKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKaW5kZXggNjUwNDk0ZC4uNmYwZmI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTQ0LDE4ICs0NCwyNiBAQAogdm9pZCBscGZjX3VucmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCwgdWludDMyX3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY191bnJlZ19kaWQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQxNl90LCB1aW50MzJfdCwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX3JlZ192cGkoc3RydWN0IGxwZmNfdnBvcnQgKiwgTFBGQ19NQk9YUV90ICopOwordm9pZCBscGZjX3JlZ2lzdGVyX25ld192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfdnBvcnQgKiwKKwkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX3VucmVnX3ZwaShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19pbml0X2xpbmsoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpOwogdm9pZCBscGZjX3JlcXVlc3RfZmVhdHVyZXMoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKik7Cit2b2lkIGxwZmNfc3VwcG9ydGVkX3BhZ2VzKHN0cnVjdCBscGZjTWJveHEgKik7Cit2b2lkIGxwZmNfc2xpNF9wYXJhbXMoc3RydWN0IGxwZmNNYm94cSAqKTsKK2ludCBscGZjX3BjX3NsaTRfcGFyYW1zX2dldChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogCiBzdHJ1Y3QgbHBmY192cG9ydCAqbHBmY19maW5kX3Zwb3J0X2J5X2RpZChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QpOwogdm9pZCBscGZjX2NsZWFudXBfcmN2X2J1ZmZlcnMoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfcmN2X3NlcV9jaGVja19lZHRvdihzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19jbGVhbnVwX3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKiwgaW50KTsKK3ZvaWQgbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveChzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIGludCBscGZjX2xpbmtkb3duKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19saW5rZG93bl9wb3J0KHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX3BvcnRfbGlua19mYWlsdXJlKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX21ieF9jbXBsX3JlYWRfbGEoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKK3ZvaWQgbHBmY19pbml0X3ZwaV9jbXBsKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Cit2b2lkIGxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHN0cnVjdCBscGZjX2hiYSAqKTsKIAogdm9pZCBscGZjX21ieF9jbXBsX3JlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX21ieF9jbXBsX2RmbHRfcnBpKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CkBAIC03Myw2ICs4MSw3IEBACiBpbnQgIGxwZmNfY2FuX2Rpc2N0bW8oc3RydWN0IGxwZmNfdnBvcnQgKik7CiBpbnQgIGxwZmNfdW5yZWdfcnBpKHN0cnVjdCBscGZjX3Zwb3J0ICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX3VucmVnX2FsbF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICopOwordm9pZCBscGZjX3VucmVnX2hiYV9ycGlzKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY191bnJlZ19kZWZhdWx0X3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfaXNzdWVfcmVnX3ZwaShzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfdnBvcnQgKik7CiAKQEAgLTk5LDcgKzEwOCw3IEBACiAKIHZvaWQgbHBmY19kb19zY3JfbnNfcGxvZ2koc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Zwb3J0ICopOwogaW50IGxwZmNfY2hlY2tfc3Bhcm0oc3RydWN0IGxwZmNfdnBvcnQgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwKLQkJICAgICBzdHJ1Y3Qgc2Vydl9wYXJtICosIHVpbnQzMl90KTsKKwkJICAgICBzdHJ1Y3Qgc2Vydl9wYXJtICosIHVpbnQzMl90LCBpbnQpOwogaW50IGxwZmNfZWxzX2Fib3J0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY19tb3JlX3Bsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX21vcmVfYWRpc2Moc3RydWN0IGxwZmNfdnBvcnQgKik7CkBAIC0xOTcsNiArMjA2LDcgQEAKIHZvaWQgbHBmY191bnJlZ19mY2ZpKHN0cnVjdCBscGZjTWJveHEgKiwgdWludDE2X3QpOwogdm9pZCBscGZjX3Jlc3VtZV9ycGkoc3RydWN0IGxwZmNNYm94cSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIGludCBscGZjX2NoZWNrX3BlbmRpbmdfZmNvZV9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDhfdCk7Cit2b2lkIGxwZmNfaXNzdWVfaW5pdF92cGkoc3RydWN0IGxwZmNfdnBvcnQgKik7CiAKIHZvaWQgbHBmY19jb25maWdfaGJxKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwgc3RydWN0IGxwZmNfaGJxX2luaXQgKiwKIAl1aW50MzJfdCAsIExQRkNfTUJPWFFfdCAqKTsKQEAgLTIwNiw3ICsyMTYsMTEgQEAKIHZvaWQgbHBmY19zbGk0X3JiX2ZyZWUoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBoYnFfZG1hYnVmICopOwogdm9pZCBscGZjX3NsaTRfYnVpbGRfZGZsdF9mY2ZfcmVjb3JkKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgZmNmX3JlY29yZCAqLAogCQkJdWludDE2X3QpOwordm9pZCBscGZjX3VucmVnaXN0ZXJfZmNmKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY191bnJlZ2lzdGVyX2ZjZl9yZXNjYW4oc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3VucmVnaXN0ZXJfdW51c2VkX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKik7CitpbnQgbHBmY19zbGk0X3JlZGlzY19mY2ZfdGFibGUoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIGludCBscGZjX21lbV9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKiwgaW50IGFsaWduKTsKIHZvaWQgbHBmY19tZW1fZnJlZShzdHJ1Y3QgbHBmY19oYmEgKik7CkBAIC0zNjUsNiArMzc5LDggQEAKIHZvaWQgbHBmY19jcmVhdGVfc3RhdGljX3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zdG9wX2hiYV90aW1lcnMoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3N0b3BfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIF9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19wYXJzZV9mY29lX2NvbmYoc3RydWN0IGxwZmNfaGJhICosIHVpbnQ4X3QgKiwgdWludDMyX3QpOwogaW50IGxwZmNfcGFyc2VfdnBkKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50OF90ICosIGludCk7CiB2b2lkIGxwZmNfc3RhcnRfZmRpc2NzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSk7CkBAIC0zNzgsNSArMzk0LDUgQEAKIC8qIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFNHSU92NC9ic2cgaW50ZXJmYWNlICovCiBpbnQgbHBmY19ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKIGludCBscGZjX2JzZ190aW1lb3V0KHN0cnVjdCBmY19ic2dfam9iICopOwotdm9pZCBscGZjX2JzZ19jdF91bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKK2ludCBscGZjX2JzZ19jdF91bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKIAkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKaW5kZXggMGViY2Q5Yi4uYzdlOTIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtOTcsNyArOTcsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmJkZUJ1ZjsKIAotCWxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHBoYmEsIHByaW5nLCBwaW9jYnEpOworCWlmIChscGZjX2JzZ19jdF91bnNvbF9ldmVudChwaGJhLCBwcmluZywgcGlvY2JxKSA9PSAwKQorCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkoaWNtZC0+dWxwU3RhdHVzID09IElPU1RBVF9ORUVEX0JVRkZFUikpIHsKIAkJbHBmY19zbGlfaGJxYnVmX2FkZF9oYnFzKHBoYmEsIExQRkNfRUxTX0hCUSk7CkBAIC0xODEsNyArMTgyLDggQEAKIAl1aW50MzJfdCBzaXplOwogCiAJLyogRm9yd2FyZCBhYm9ydCBldmVudCB0byBhbnkgcHJvY2VzcyByZWdpc3RlcmVkIHRvIHJlY2VpdmUgY3QgZXZlbnQgKi8KLQlscGZjX2JzZ19jdF91bnNvbF9ldmVudChwaGJhLCBwcmluZywgcGlvY2JxKTsKKwlpZiAobHBmY19ic2dfY3RfdW5zb2xfZXZlbnQocGhiYSwgcHJpbmcsIHBpb2NicSkgPT0gMCkKKwkJcmV0dXJuOwogCiAJLyogSWYgdGhlcmUgaXMgbm8gQkRFIGFzc29jaWF0ZWQgd2l0aCBJT0NCLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvICovCiAJaWYgKGljbWQtPnVscEJkZUNvdW50ID09IDApCkBAIC0xODQzLDEyICsxODQ1LDcgQEAKIAkJYyAgPSAocmV2ICYgMHgwMDAwZmYwMCkgPj4gODsKIAkJYjQgPSAocmV2ICYgMHgwMDAwMDBmZik7CiAKLQkJaWYgKGZsYWcpCi0JCQlzcHJpbnRmKGZ3cmV2aXNpb24sICIlZC4lZCVkJWMlZCAiLCBiMSwKLQkJCQliMiwgYjMsIGMsIGI0KTsKLQkJZWxzZQotCQkJc3ByaW50Zihmd3JldmlzaW9uLCAiJWQuJWQlZCVjJWQgIiwgYjEsCi0JCQkJYjIsIGIzLCBjLCBiNCk7CisJCXNwcmludGYoZndyZXZpc2lvbiwgIiVkLiVkJWQlYyVkIiwgYjEsIGIyLCBiMywgYywgYjQpOwogCX0KIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCAyY2MzOTY4Li4wOGI2NjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTUwLDkgKzUwLDYgQEAKIAkJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgdWludDhfdCByZXRyeSk7CiBzdGF0aWMgaW50IGxwZmNfaXNzdWVfZmFicmljX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLAogCQkJCSAgc3RydWN0IGxwZmNfaW9jYnEgKmlvY2IpOwotc3RhdGljIHZvaWQgbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAotCQkJCSAgICBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCi0JCQkJICAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKTsKIAogc3RhdGljIGludCBscGZjX21heF9lbHNfdHJpZXMgPSAzOwogCkBAIC01OTIsNiArNTg5LDE1IEBACiAJCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOwogCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQl9CisJCS8qCisJCSAqIElmIFZQSSBpcyB1bnJlZ2VkLCBkcml2ZXIgbmVlZCB0byBkbyBJTklUX1ZQSQorCQkgKiBiZWZvcmUgcmUtcmVnaXN0ZXJpbmcKKwkJICovCisJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKKwkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJfQogCX0KIAogCWlmIChwaGJhLT5zbGlfcmV2IDwgTFBGQ19TTElfUkVWNCkgewpAQCAtNjA0LDEwICs2MTAsMTMgQEAKIAl9IGVsc2UgewogCQluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwogCQlscGZjX25scF9zZXRfc3RhdGUodnBvcnQsIG5kbHAsIE5MUF9TVEVfVU5NQVBQRURfTk9ERSk7Ci0JCWlmICh2cG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkgeworCQlpZiAoKCEodnBvcnQtPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19SRUdfVlBJKSkgJiYKKwkJCSh2cG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkpIHsKIAkJCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOwogCQkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOwotCQl9IGVsc2UKKwkJfSBlbHNlIGlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZGSV9SRUdJU1RFUkVEKQorCQkJbHBmY19pc3N1ZV9pbml0X3ZwaSh2cG9ydCk7CisJCWVsc2UKIAkJCWxwZmNfaXNzdWVfcmVnX3ZmaSh2cG9ydCk7CiAJfQogCXJldHVybiAwOwpAQCAtODA0LDYgKzgxMyw5IEBACiAJCQkJIGlyc3AtPnVscFRpbWVvdXQpOwogCQlnb3RvIGZsb2dpZmFpbDsKIAl9CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfQ1ZMX1JDVkQ7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJLyoKIAkgKiBUaGUgRkxvZ0kgc3VjY2VlZGVkLiAgU3luYyB0aGUgZGF0YSBmb3IgdGhlIENQVSBiZWZvcmUKQEAgLTI3MjAsNyArMjczMiw3IEBACiAJaWYgKGRpZCA9PSBGRE1JX0RJRCkKIAkJcmV0cnkgPSAxOwogCi0JaWYgKChjbWQgPT0gRUxTX0NNRF9GTE9HSSkgJiYKKwlpZiAoKChjbWQgPT0gRUxTX0NNRF9GTE9HSSkgfHwgKGNtZCA9PSBFTFNfQ01EX0ZESVNDKSkgJiYKIAkgICAgKHBoYmEtPmZjX3RvcG9sb2d5ICE9IFRPUE9MT0dZX0xPT1ApICYmCiAJICAgICFscGZjX2Vycm9yX2xvc3RfbGluayhpcnNwKSkgewogCQkvKiBGTE9HSSByZXRyeSBwb2xpY3kgKi8KQEAgLTQzODUsNyArNDM5Nyw3IEBACiAKIAlkaWQgPSBGYWJyaWNfRElEOwogCi0JaWYgKChscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzKSkpIHsKKwlpZiAoKGxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMsIDEpKSkgewogCQkvKiBGb3IgYSBGTE9HSSB3ZSBhY2NlcHQsIHRoZW4gaWYgb3VyIHBvcnRuYW1lIGlzIGdyZWF0ZXIKIAkJICogdGhlbiB0aGUgcmVtb3RlIHBvcnRuYW1lIHdlIGluaXRpYXRlIE5wb3J0IGxvZ2luLgogCQkgKi8KQEAgLTU5MTUsNiArNTkyNyw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKSBwbWItPmNvbnRleHQyOwogCU1BSUxCT1hfdCAqbWIgPSAmcG1iLT51Lm1iOworCWludCByYzsKIAogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX1JFR19WUEk7CkBAIC01OTM2LDYgKzU5NDksMjYgQEAKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOwogCQkJYnJlYWs7CisJCS8qIElmIHJlZ192cGkgZmFpbCB3aXRoIGludmFsaWQgVlBJIHN0YXR1cywgcmUtaW5pdCBWUEkgKi8KKwkJY2FzZSAweDIwOgorCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQlscGZjX2luaXRfdnBpKHBoYmEsIHBtYiwgdnBvcnQtPnZwaSk7CisJCQlwbWItPnZwb3J0ID0gdnBvcnQ7CisJCQlwbWItPm1ib3hfY21wbCA9IGxwZmNfaW5pdF92cGlfY21wbDsKKwkJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsCisJCQkJTUJYX05PV0FJVCk7CisJCQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsCisJCQkJCUtFUk5fRVJSLCBMT0dfTUJPWCwKKwkJCQkJIjI3MzIgRmFpbGVkIHRvIGlzc3VlIElOSVRfVlBJIgorCQkJCQkiIG1haWxib3ggY29tbWFuZFxuIik7CisJCQl9IGVsc2UgeworCQkJCWxwZmNfbmxwX3B1dChuZGxwKTsKKwkJCQlyZXR1cm47CisJCQl9CisKIAkJZGVmYXVsdDoKIAkJCS8qIFRyeSB0byByZWNvdmVyIGZyb20gdGhpcyBlcnJvciAqLwogCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KTsKQEAgLTU5NDksMTMgKzU5ODIsMTcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJdnBvcnQtPnZwaV9zdGF0ZSB8PSBMUEZDX1ZQSV9SRUdJU1RFUkVEOwotCQlpZiAodnBvcnQgPT0gcGhiYS0+cHBvcnQpCisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJaWYgKHZwb3J0ID09IHBoYmEtPnBwb3J0KSB7CiAJCQlpZiAocGhiYS0+c2xpX3JldiA8IExQRkNfU0xJX1JFVjQpCiAJCQkJbHBmY19pc3N1ZV9mYWJyaWNfcmVnbG9naW4odnBvcnQpOwotCQkJZWxzZQotCQkJCWxwZmNfaXNzdWVfcmVnX3ZmaSh2cG9ydCk7Ci0JCWVsc2UKKwkJCWVsc2UgeworCQkJCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOworCQkJCWxwZmNfZG9fc2NyX25zX3Bsb2dpKHBoYmEsIHZwb3J0KTsKKwkJCX0KKwkJfSBlbHNlCiAJCQlscGZjX2RvX3Njcl9uc19wbG9naShwaGJhLCB2cG9ydCk7CiAJfQogCkBAIC01OTc3LDcgKzYwMTQsNyBAQAogICogVGhpcyByb3V0aW5lIHJlZ2lzdGVycyB0aGUgQHZwb3J0IGFzIGEgbmV3IHZpcnR1YWwgcG9ydCB3aXRoIGEgSEJBLgogICogSXQgaXMgZG9uZSB0aHJvdWdoIGEgcmVnaXN0ZXJpbmcgdnBpIG1haWxib3ggY29tbWFuZC4KICAqKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBscGZjX3JlZ2lzdGVyX25ld192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwKIAkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogewpAQCAtNjAxOCw2ICs2MDU1LDc4IEBACiB9CiAKIC8qKgorICogbHBmY19yZXRyeV9wcG9ydF9kaXNjb3ZlcnkgLSBTdGFydCB0aW1lciB0byByZXRyeSBGTE9HSS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBhYm9ydCBhbGwgcGVuZGluZyBkaXNjb3ZlcnkgY29tbWFuZHMgYW5kCisgKiBzdGFydCBhIHRpbWVyIHRvIHJldHJ5IEZMT0dJIGZvciB0aGUgcGh5c2ljYWwgcG9ydAorICogZGlzY292ZXJ5LgorICoqLwordm9pZAorbHBmY19yZXRyeV9wcG9ydF9kaXNjb3Zlcnkoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKKwlpbnQgaTsKKwl1aW50MzJfdCBsaW5rX3N0YXRlOworCisJLyogVHJlYXQgdGhpcyBmYWlsdXJlIGFzIGxpbmtkb3duIGZvciBhbGwgdnBvcnRzICovCisJbGlua19zdGF0ZSA9IHBoYmEtPmxpbmtfc3RhdGU7CisJbHBmY19saW5rZG93bihwaGJhKTsKKwlwaGJhLT5saW5rX3N0YXRlID0gbGlua19zdGF0ZTsKKworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisKKwlpZiAodnBvcnRzKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnRzW2ldLCBGYWJyaWNfRElEKTsKKwkJCWlmIChuZGxwKQorCQkJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3Rtbyh2cG9ydHNbaV0sIG5kbHApOworCQkJbHBmY19lbHNfZmx1c2hfY21kKHZwb3J0c1tpXSk7CisJCX0KKwkJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKwl9CisKKwkvKiBJZiBmYWJyaWMgcmVxdWlyZSBGTE9HSSwgdGhlbiByZS1pbnN0YW50aWF0ZSBwaHlzaWNhbCBsb2dpbiAqLworCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLT5wcG9ydCwgRmFicmljX0RJRCk7CisJaWYgKCFuZGxwKQorCQlyZXR1cm47CisKKworCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHBoYmEtPnBwb3J0KTsKKwltb2RfdGltZXIoJm5kbHAtPm5scF9kZWxheWZ1bmMsIGppZmZpZXMgKyBIWik7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwluZGxwLT5ubHBfZmxhZyB8PSBOTFBfREVMQVlfVE1POworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX0ZMT0dJOworCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19GTE9HSTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19mYWJyaWNfbG9naW5fcmVxZCAtIENoZWNrIGlmIEZMT0dJIHJlcXVpcmVkLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBGRElTQyBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBGRElTQyByZXNwb25zZSBpb2NiLgorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgaWYgYSBGTE9HSSBpcyByZWd1aXJlZCBmb3IgRkRJU0MKKyAqIHRvIHN1Y2NlZWQuCisgKiovCitzdGF0aWMgaW50CitscGZjX2ZhYnJpY19sb2dpbl9yZXFkKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCisJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQoreworCisJaWYgKChyc3Bpb2NiLT5pb2NiLnVscFN0YXR1cyAhPSBJT1NUQVRfRkFCUklDX1JKVCkgfHwKKwkJKHJzcGlvY2ItPmlvY2IudW4udWxwV29yZFs0XSAhPSBSSlRfTE9HSU5fUkVRVUlSRUQpKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCisvKioKICAqIGxwZmNfY21wbF9lbHNfZmRpc2MgLSBDb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBmZGlzYyBpb2NiIGNvbW1hbmQKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCkBAIC02MDY2LDYgKzYxNzUsMTIgQEAKIAkJaXJzcC0+dWxwU3RhdHVzLCBpcnNwLT51bi51bHBXb3JkWzRdLCB2cG9ydC0+ZmNfcHJldkRJRCk7CiAKIAlpZiAoaXJzcC0+dWxwU3RhdHVzKSB7CisKKwkJaWYgKGxwZmNfZmFicmljX2xvZ2luX3JlcWQocGhiYSwgY21kaW9jYiwgcnNwaW9jYikpIHsKKwkJCWxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHBoYmEpOworCQkJZ290byBvdXQ7CisJCX0KKwogCQkvKiBDaGVjayBmb3IgcmV0cnkgKi8KIAkJaWYgKGxwZmNfZWxzX3JldHJ5KHBoYmEsIGNtZGlvY2IsIHJzcGlvY2IpKQogCQkJZ290byBvdXQ7CkBAIC02MDc2LDYgKzYxOTEsNyBAQAogCQlnb3RvIGZkaXNjX2ZhaWxlZDsKIAl9CiAJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfQ1ZMX1JDVkQ7CiAJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfRkFCUklDOwogCWlmICh2cG9ydC0+cGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkKIAkJdnBvcnQtPmZjX2ZsYWcgfD0gIEZDX1BVQkxJQ19MT09QOwpAQCAtNjEwMywxMCArNjIxOSwxMyBAQAogCQlscGZjX21ieF91bnJlZ192cGkodnBvcnQpOwogCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKIAkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCX0KIAotCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX1JFR19WUEkpCisJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEkpCisJCWxwZmNfaXNzdWVfaW5pdF92cGkodnBvcnQpOworCWVsc2UgaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSSkKIAkJbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQocGhiYSwgdnBvcnQsIG5kbHApOwogCWVsc2UKIAkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCAyNDQ1ZTM5Li4yMzU5ZDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtNTI1LDYgKzUyNSw4IEBACiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJbHBmY19zbGlfaGJxYnVmX2FkZF9oYnFzKHBoYmEsIExQRkNfRUxTX0hCUSk7CiAJCX0KKwkJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRVZUKQorCQkJbHBmY19zbGk0X2ZjZl9yZWRpc2NfZXZlbnRfcHJvYyhwaGJhKTsKIAl9CiAKIAl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwpAQCAtNzA2LDYgKzcwOCw4IEBACiB2b2lkCiBscGZjX3BvcnRfbGlua19mYWlsdXJlKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKKwlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfTElOS0RPV04pOworCiAJLyogQ2xlYW51cCBhbnkgb3V0c3RhbmRpbmcgcmVjZWl2ZWQgYnVmZmVycyAqLwogCWxwZmNfY2xlYW51cF9yY3ZfYnVmZmVycyh2cG9ydCk7CiAKQEAgLTc1MiwxMiArNzU2LDE0IEBACiAJbHBmY19zY3NpX2Rldl9ibG9jayhwaGJhKTsKIAogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfRElTQ09WRVJFRCk7CisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX0FWQUlMQUJMRSB8IEZDRl9TQ0FOX0RPTkUpOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJaWYgKHBoYmEtPmxpbmtfc3RhdGUgPiBMUEZDX0xJTktfRE9XTikgewogCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19MSU5LX0RPV047CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCXBoYmEtPnBwb3J0LT5mY19mbGFnICY9IH5GQ19MQklUOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAlpZiAodnBvcnRzICE9IE5VTEwpCiAJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CkBAIC0xMDIzLDcgKzEwMjksNyBAQAogCQlyZXR1cm47CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IChGQ0ZfRElTQ09WRVJFRCB8IEZDRl9JTl9VU0UpOworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX1NDQU5fRE9ORSB8IEZDRl9JTl9VU0UpOwogCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAlpZiAodnBvcnQtPnBvcnRfc3RhdGUgIT0gTFBGQ19GTE9HSSkKQEAgLTEwNDUsMjUgKzEwNTEsMjMgQEAKIHN0YXRpYyB1aW50MzJfdAogbHBmY19mYWJfbmFtZV9tYXRjaCh1aW50OF90ICpmYWJfbmFtZSwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCWlmICgoZmFiX25hbWVbMF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVsxXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzJdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbM10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVs0XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzVdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbNl0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVs3XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKSkpCi0JCXJldHVybiAxOwotCWVsc2UKKwlpZiAoZmFiX25hbWVbMF0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpCiAJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVsxXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzJdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbM10gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVs0XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzVdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbNl0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVs3XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMTA3OCwzMCArMTA4MiwyOCBAQAogc3RhdGljIHVpbnQzMl90CiBscGZjX3N3X25hbWVfbWF0Y2godWludDhfdCAqc3dfbmFtZSwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCWlmICgoc3dfbmFtZVswXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzAsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbMV0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzJdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVszXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzMsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbNF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV80LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzVdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVs2XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzYsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbN10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV83LCBuZXdfZmNmX3JlY29yZCkpKQotCQlyZXR1cm4gMTsKLQllbHNlCisJaWYgKHN3X25hbWVbMF0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpCiAJCXJldHVybiAwOworCWlmIChzd19uYW1lWzFdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMSwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVsyXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbM10gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzRdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNCwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVs1XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbNl0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzddICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNywgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCiAgKiBscGZjX21hY19hZGRyX21hdGNoIC0gQ2hlY2sgaWYgdGhlIGZjZiBtYWMgYWRkcmVzcyBtYXRjaC4KLSAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQG1hY19hZGRyOiBwb2ludGVyIHRvIG1hYyBhZGRyZXNzLgogICogQG5ld19mY2ZfcmVjb3JkOiBwb2ludGVyIHRvIGZjZiByZWNvcmQuCiAgKgogICogVGhpcyByb3V0aW5lIGNvbXBhcmUgdGhlIGZjZiByZWNvcmQncyBtYWMgYWRkcmVzcyB3aXRoIEhCQSdzCkBAIC0xMTA5LDg1ICsxMTExLDExNSBAQAogICogcmV0dXJucyAxIGVsc2UgcmV0dXJuIDAuCiAgKiovCiBzdGF0aWMgdWludDMyX3QKLWxwZmNfbWFjX2FkZHJfbWF0Y2goc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCitscGZjX21hY19hZGRyX21hdGNoKHVpbnQ4X3QgKm1hY19hZGRyLCBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCiB7Ci0JaWYgKChwaGJhLT5mY2YubWFjX2FkZHJbMF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMCwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAocGhiYS0+ZmNmLm1hY19hZGRyWzFdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkclsyXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18yLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChwaGJhLT5mY2YubWFjX2FkZHJbM10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMywgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAocGhiYS0+ZmNmLm1hY19hZGRyWzRdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkcls1XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY181LCBuZXdfZmNmX3JlY29yZCkpKQotCQlyZXR1cm4gMTsKLQllbHNlCisJaWYgKG1hY19hZGRyWzBdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzAsIG5ld19mY2ZfcmVjb3JkKSkKIAkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzFdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzJdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzIsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzNdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzMsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzRdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hY19hZGRyWzVdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzUsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBib29sCitscGZjX3ZsYW5faWRfbWF0Y2godWludDE2X3QgY3Vycl92bGFuX2lkLCB1aW50MTZfdCBuZXdfdmxhbl9pZCkKK3sKKwlyZXR1cm4gKGN1cnJfdmxhbl9pZCA9PSBuZXdfdmxhbl9pZCk7CiB9CiAKIC8qKgogICogbHBmY19jb3B5X2ZjZl9yZWNvcmQgLSBDb3B5IGZjZiBpbmZvcm1hdGlvbiB0byBscGZjX2hiYS4KLSAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZjogcG9pbnRlciB0byBkcml2ZXIgZmNmIHJlY29yZC4KICAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgogICoKICAqIFRoaXMgcm91dGluZSBjb3BpZXMgdGhlIEZDRiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBGQ0YKICAqIHJlY29yZCB0byBscGZjX2hiYSBkYXRhIHN0cnVjdHVyZS4KICAqKi8KIHN0YXRpYyB2b2lkCi1scGZjX2NvcHlfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCkKK2xwZmNfY29weV9mY2ZfcmVjb3JkKHN0cnVjdCBscGZjX2ZjZl9yZWMgKmZjZl9yZWMsCisJCSAgICAgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVswXSA9CisJLyogRmFicmljIG5hbWUgKi8KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVswXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVsxXSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbMV0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbMl0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzJdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8yLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzNdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVszXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVs0XSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbNF0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbNV0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzVdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV81LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzZdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVs2XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVs3XSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbN10gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbMF0gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18wLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzFdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkclsyXSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzIsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbM10gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18zLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzRdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkcls1XSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzUsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmNmX2luZHggPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5wcmlvcml0eSA9IG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzBdID0KKwkvKiBNYWMgYWRkcmVzcyAqLworCWZjZl9yZWMtPm1hY19hZGRyWzBdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMCwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzFdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMSwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzJdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMiwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzNdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMywgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzRdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNCwgbmV3X2ZjZl9yZWNvcmQpOworCWZjZl9yZWMtPm1hY19hZGRyWzVdID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNSwgbmV3X2ZjZl9yZWNvcmQpOworCS8qIEZDRiByZWNvcmQgaW5kZXggKi8KKwlmY2ZfcmVjLT5mY2ZfaW5keCA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmNmX2luZGV4LCBuZXdfZmNmX3JlY29yZCk7CisJLyogRkNGIHJlY29yZCBwcmlvcml0eSAqLworCWZjZl9yZWMtPnByaW9yaXR5ID0gbmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eTsKKwkvKiBTd2l0Y2ggbmFtZSAqLworCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzBdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzFdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVsxXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVsyXSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbMl0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbM10gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzNdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzRdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVs0XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs1XSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbNV0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbNl0gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzZdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzddID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVs3XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNywgbmV3X2ZjZl9yZWNvcmQpOwogfQogCiAvKioKKyAqIGxwZmNfdXBkYXRlX2ZjZl9yZWNvcmQgLSBVcGRhdGUgZHJpdmVyIGZjZiByZWNvcmQKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZl9yZWM6IHBvaW50ZXIgdG8gZHJpdmVyIGZjZiByZWNvcmQuCisgKiBAbmV3X2ZjZl9yZWNvcmQ6IHBvaW50ZXIgdG8gaGJhIGZjZiByZWNvcmQuCisgKiBAYWRkcl9tb2RlOiBhZGRyZXNzIG1vZGUgdG8gYmUgc2V0IHRvIHRoZSBkcml2ZXIgZmNmIHJlY29yZC4KKyAqIEB2bGFuX2lkOiB2bGFuIHRhZyB0byBiZSBzZXQgdG8gdGhlIGRyaXZlciBmY2YgcmVjb3JkLgorICogQGZsYWc6IGZsYWcgYml0cyB0byBiZSBzZXQgdG8gdGhlIGRyaXZlciBmY2YgcmVjb3JkLgorICoKKyAqIFRoaXMgcm91dGluZSB1cGRhdGVzIHRoZSBkcml2ZXIgRkNGIHJlY29yZCBmcm9tIHRoZSBuZXcgSEJBIEZDRiByZWNvcmQKKyAqIHRvZ2V0aGVyIHdpdGggdGhlIGFkZHJlc3MgbW9kZSwgdmxhbl9pZCwgYW5kIG90aGVyIGluZm9ybWF0aW9ucy4gVGhpcworICogcm91dGluZSBpcyBjYWxsZWQgd2l0aCB0aGUgaG9zdCBsb2NrIGhlbGQuCisgKiovCitzdGF0aWMgdm9pZAorX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfZmNmX3JlYyAqZmNmX3JlYywKKwkJICAgICAgIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCwgdWludDMyX3QgYWRkcl9tb2RlLAorCQkgICAgICAgdWludDE2X3Qgdmxhbl9pZCwgdWludDMyX3QgZmxhZykKK3sKKwkvKiBDb3B5IHRoZSBmaWVsZHMgZnJvbSB0aGUgSEJBJ3MgRkNGIHJlY29yZCAqLworCWxwZmNfY29weV9mY2ZfcmVjb3JkKGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkKTsKKwkvKiBVcGRhdGUgb3RoZXIgZmllbGRzIG9mIGRyaXZlciBGQ0YgcmVjb3JkICovCisJZmNmX3JlYy0+YWRkcl9tb2RlID0gYWRkcl9tb2RlOworCWZjZl9yZWMtPnZsYW5faWQgPSB2bGFuX2lkOworCWZjZl9yZWMtPmZsYWcgfD0gKGZsYWcgfCBSRUNPUkRfVkFMSUQpOworfQorCisvKioKICAqIGxwZmNfcmVnaXN0ZXJfZmNmIC0gUmVnaXN0ZXIgdGhlIEZDRiB3aXRoIGhiYS4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTEyMTIsNyArMTI0NCw3IEBACiAKIAkvKiBUaGUgRkNGIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCwgc3RhcnQgZGlzY292ZXJ5ICovCiAJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRUdJU1RFUkVEKSB7Ci0JCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfSU5fVVNFKTsKKwkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IChGQ0ZfU0NBTl9ET05FIHwgRkNGX0lOX1VTRSk7CiAJCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCWlmIChwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSAhPSBMUEZDX0ZMT0dJKQpAQCAtMTI1MCw2ICsxMjgyLDcgQEAKICAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgogICogQGJvb3RfZmxhZzogSW5kaWNhdGVzIGlmIHRoaXMgcmVjb3JkIHVzZWQgYnkgYm9vdCBiaW9zLgogICogQGFkZHJfbW9kZTogVGhlIGFkZHJlc3MgbW9kZSB0byBiZSB1c2VkIGJ5IHRoaXMgRkNGCisgKiBAdmxhbl9pZDogVGhlIHZsYW4gaWQgdG8gYmUgdXNlZCBhcyB2bGFuIHRhZ2dpbmcgYnkgdGhpcyBGQ0YuCiAgKgogICogVGhpcyByb3V0aW5lIGNvbXBhcmUgdGhlIGZjZiByZWNvcmQgd2l0aCBjb25uZWN0IGxpc3Qgb2J0YWluZWQgZnJvbSB0aGUKICAqIGNvbmZpZyByZWdpb24gdG8gZGVjaWRlIGlmIHRoaXMgRkNGIGNhbiBiZSB1c2VkIGZvciBTQU4gZGlzY292ZXJ5LiBJdCByZXR1cm5zCkBAIC0xMzIzLDcgKzEzNTYsOCBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5fZW50cnksICZwaGJhLT5mY2ZfY29ubl9yZWNfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubl9lbnRyeSwKKwkJCSAgICAmcGhiYS0+ZmNmX2Nvbm5fcmVjX2xpc3QsIGxpc3QpIHsKIAkJaWYgKCEoY29ubl9lbnRyeS0+Y29ubl9yZWMuZmxhZ3MgJiBGQ0ZDTkNUX1ZBTElEKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0xNDcwLDYgKzE1MDQsNyBAQAogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOworCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfRk9WOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCX0KIApAQCAtMTUyNCwxMSArMTU1OSwxMiBAQAogCXVpbnQzMl90IHNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXM7CiAJdW5pb24gbHBmY19zbGk0X2NmZ19zaGRyICpzaGRyOwogCXN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZDsKLQlpbnQgcmM7CiAJdWludDMyX3QgYm9vdF9mbGFnLCBhZGRyX21vZGU7CiAJdWludDMyX3QgbmV4dF9mY2ZfaW5kZXg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbHBmY19mY2ZfcmVjICpmY2ZfcmVjID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAl1aW50MTZfdCB2bGFuX2lkOworCWludCByYzsKIAogCS8qIElmIHRoZXJlIGlzIHBlbmRpbmcgRkNvRSBldmVudCByZXN0YXJ0IEZDRiB0YWJsZSBzY2FuICovCiAJaWYgKGxwZmNfY2hlY2tfcGVuZGluZ19mY29lX2V2ZW50KHBoYmEsIDApKSB7CkBAIC0xNTgzLDkgKzE2MTksOCBAQAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBmY2ZfcmVjb3JkKSk7CiAJYnl0ZXAgPSB2aXJ0X2FkZHIgKyBzaXplb2YodW5pb24gbHBmY19zbGk0X2NmZ19zaGRyKTsKIAotCXJjID0gbHBmY19tYXRjaF9mY2ZfY29ubl9saXN0KHBoYmEsIG5ld19mY2ZfcmVjb3JkLAotCQkJCSAgICAgICZib290X2ZsYWcsICZhZGRyX21vZGUsCi0JCQkJCSZ2bGFuX2lkKTsKKwlyYyA9IGxwZmNfbWF0Y2hfZmNmX2Nvbm5fbGlzdChwaGJhLCBuZXdfZmNmX3JlY29yZCwgJmJvb3RfZmxhZywKKwkJCQkgICAgICAmYWRkcl9tb2RlLCAmdmxhbl9pZCk7CiAJLyoKIAkgKiBJZiB0aGUgZmNmIHJlY29yZCBkb2VzIG5vdCBtYXRjaCB3aXRoIGNvbm5lY3QgbGlzdCBlbnRyaWVzCiAJICogcmVhZCB0aGUgbmV4dCBlbnRyeS4KQEAgLTE1OTQsOTAgKzE2MjksMTU5IEBACiAJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAkvKgogCSAqIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBGQ0YgZGlzY292ZXJ5IG9mIHRoZSBIQkEsIHVzZSBsYXN0Ci0JICogRkNGIHJlY29yZCBmb3IgdGhlIGRpc2NvdmVyeS4KKwkgKiBGQ0YgcmVjb3JkIGZvciB0aGUgZGlzY292ZXJ5LiBUaGUgY29uZGl0aW9uIHRoYXQgYSByZXNjYW4KKwkgKiBtYXRjaGVzIHRoZSBpbi11c2UgRkNGIHJlY29yZDogZmFicmljIG5hbWUsIHN3aXRjaCBuYW1lLCBtYWMKKwkgKiBhZGRyZXNzLCBhbmQgdmxhbl9pZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfSU5fVVNFKSB7Ci0JCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5mYWJyaWNfbmFtZSwKKwkJaWYgKGxwZmNfZmFiX25hbWVfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZhYnJpY19uYW1lLAogCQkJCQluZXdfZmNmX3JlY29yZCkgJiYKLQkJICAgIGxwZmNfc3dfbmFtZV9tYXRjaChwaGJhLT5mY2Yuc3dpdGNoX25hbWUsCisJCSAgICBscGZjX3N3X25hbWVfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnN3aXRjaF9uYW1lLAogCQkJCQluZXdfZmNmX3JlY29yZCkgJiYKLQkJICAgIGxwZmNfbWFjX2FkZHJfbWF0Y2gocGhiYSwgbmV3X2ZjZl9yZWNvcmQpKSB7CisJCSAgICBscGZjX21hY19hZGRyX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5tYWNfYWRkciwKKwkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCisJCSAgICBscGZjX3ZsYW5faWRfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnZsYW5faWQsCisJCQkJCXZsYW5faWQpKSB7CiAJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpCisJCQkJLyogU3RvcCBGQ0YgcmVkaXNjIHdhaXQgdGltZXIgaWYgcGVuZGluZyAqLworCQkJCV9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHBoYmEpOworCQkJZWxzZSBpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpCisJCQkJLyogSWYgaW4gZmFzdCBmYWlsb3ZlciwgbWFyayBpdCdzIGNvbXBsZXRlZCAqLworCQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19GT1Y7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CisJCS8qCisJCSAqIFJlYWQgbmV4dCBGQ0YgcmVjb3JkIGZyb20gSEJBIHNlYXJjaGluZyBmb3IgdGhlIG1hdGNoaW5nCisJCSAqIHdpdGggaW4tdXNlIHJlY29yZCBvbmx5IGlmIG5vdCBkdXJpbmcgdGhlIGZhc3QgZmFpbG92ZXIKKwkJICogcGVyaW9kLiBJbiBjYXNlIG9mIGZhc3QgZmFpbG92ZXIgcGVyaW9kLCBpdCBzaGFsbCB0cnkgdG8KKwkJICogZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEZDRiByZWNvcmQganVzdCByZWFkIHNob3VsZCBiZSB0aGUKKwkJICogbmV4dCBjYW5kaWRhdGUuCisJCSAqLworCQlpZiAoIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0ZPVikpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CisJCX0KIAl9CisJLyoKKwkgKiBVcGRhdGUgb24gZmFpbG92ZXIgRkNGIHJlY29yZCBvbmx5IGlmIGl0J3MgaW4gRkNGIGZhc3QtZmFpbG92ZXIKKwkgKiBwZXJpb2Q7IG90aGVyd2lzZSwgdXBkYXRlIG9uIGN1cnJlbnQgRkNGIHJlY29yZC4KKwkgKi8KKwlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpIHsKKwkJLyogRmFzdCBGQ0YgZmFpbG92ZXIgb25seSB0byB0aGUgc2FtZSBmYWJyaWMgbmFtZSAqLworCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuY3VycmVudF9yZWMuZmFicmljX25hbWUsCisJCQkJCW5ld19mY2ZfcmVjb3JkKSkKKwkJCWZjZl9yZWMgPSAmcGhiYS0+ZmNmLmZhaWxvdmVyX3JlYzsKKwkJZWxzZQorCQkJZ290byByZWFkX25leHRfZmNmOworCX0gZWxzZQorCQlmY2ZfcmVjID0gJnBoYmEtPmZjZi5jdXJyZW50X3JlYzsKKwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfQVZBSUxBQkxFKSB7CiAJCS8qCi0JCSAqIElmIHRoZSBjdXJyZW50IEZDRiByZWNvcmQgZG9lcyBub3QgaGF2ZSBib290IGZsYWcKLQkJICogc2V0IGFuZCBuZXcgZmNmIHJlY29yZCBoYXMgYm9vdCBmbGFnIHNldCwgdXNlIHRoZQotCQkgKiBuZXcgZmNmIHJlY29yZC4KKwkJICogSWYgdGhlIGRyaXZlciBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnCisJCSAqIHNldCBhbmQgbmV3IGhiYSBmY2YgcmVjb3JkIGhhcyBib290IGZsYWcgc2V0LCB1c2UKKwkJICogdGhlIG5ldyBoYmEgZmNmIHJlY29yZC4KIAkJICovCi0JCWlmIChib290X2ZsYWcgJiYgIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfQk9PVF9FTkFCTEUpKSB7Ci0JCQkvKiBVc2UgdGhpcyBGQ0YgcmVjb3JkICovCi0JCQlscGZjX2NvcHlfZmNmX3JlY29yZChwaGJhLCBuZXdfZmNmX3JlY29yZCk7Ci0JCQlwaGJhLT5mY2YuYWRkcl9tb2RlID0gYWRkcl9tb2RlOwotCQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9CT09UX0VOQUJMRTsKLQkJCWlmICh2bGFuX2lkICE9IDB4RkZGRikgewotCQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfVkFMSURfVkxBTjsKLQkJCQlwaGJhLT5mY2Yudmxhbl9pZCA9IHZsYW5faWQ7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCWlmIChib290X2ZsYWcgJiYgIShmY2ZfcmVjLT5mbGFnICYgQk9PVF9FTkFCTEUpKSB7CisJCQkvKiBDaG9vc2UgdGhpcyBGQ0YgcmVjb3JkICovCisJCQlfX2xwZmNfdXBkYXRlX2ZjZl9yZWNvcmQocGhiYSwgZmNmX3JlYywgbmV3X2ZjZl9yZWNvcmQsCisJCQkJCWFkZHJfbW9kZSwgdmxhbl9pZCwgQk9PVF9FTkFCTEUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAkJfQogCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgcmVjb3JkIGhhcyBib290IGZsYWcgc2V0IGFuZCB0aGUKLQkJICogbmV3IEZDRiByZWNvcmQgZG9lcyBub3QgaGF2ZSBib290IGZsYWcsIHJlYWQgdGhlIG5leHQKLQkJICogRkNGIHJlY29yZC4KKwkJICogSWYgdGhlIGRyaXZlciBGQ0YgcmVjb3JkIGhhcyBib290IGZsYWcgc2V0IGFuZCB0aGUKKwkJICogbmV3IGhiYSBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnLCByZWFkCisJCSAqIHRoZSBuZXh0IEZDRiByZWNvcmQuCiAJCSAqLwotCQlpZiAoIWJvb3RfZmxhZyAmJiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0JPT1RfRU5BQkxFKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCQlpZiAoIWJvb3RfZmxhZyAmJiAoZmNmX3JlYy0+ZmxhZyAmIEJPT1RfRU5BQkxFKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAkJfQogCQkvKgotCQkgKiBJZiB0aGVyZSBpcyBhIHJlY29yZCB3aXRoIGxvd2VyIHByaW9yaXR5IHZhbHVlIGZvcgotCQkgKiB0aGUgY3VycmVudCBGQ0YsIHVzZSB0aGF0IHJlY29yZC4KKwkJICogSWYgdGhlIG5ldyBoYmEgRkNGIHJlY29yZCBoYXMgbG93ZXIgcHJpb3JpdHkgdmFsdWUKKwkJICogdGhhbiB0aGUgZHJpdmVyIEZDRiByZWNvcmQsIHVzZSB0aGUgbmV3IHJlY29yZC4KIAkJICovCi0JCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5mYWJyaWNfbmFtZSwKLQkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCi0JCSAgICAobmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eSA8IHBoYmEtPmZjZi5wcmlvcml0eSkpIHsKLQkJCS8qIFVzZSB0aGlzIEZDRiByZWNvcmQgKi8KLQkJCWxwZmNfY29weV9mY2ZfcmVjb3JkKHBoYmEsIG5ld19mY2ZfcmVjb3JkKTsKLQkJCXBoYmEtPmZjZi5hZGRyX21vZGUgPSBhZGRyX21vZGU7Ci0JCQlpZiAodmxhbl9pZCAhPSAweEZGRkYpIHsKLQkJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1ZBTElEX1ZMQU47Ci0JCQkJcGhiYS0+ZmNmLnZsYW5faWQgPSB2bGFuX2lkOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCQkJZ290byByZWFkX25leHRfZmNmOworCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChmY2ZfcmVjLT5mYWJyaWNfbmFtZSwgbmV3X2ZjZl9yZWNvcmQpICYmCisJCSAgICAobmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eSA8IGZjZl9yZWMtPnByaW9yaXR5KSkgeworCQkJLyogQ2hvb3NlIHRoaXMgRkNGIHJlY29yZCAqLworCQkJX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHBoYmEsIGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkLAorCQkJCQlhZGRyX21vZGUsIHZsYW5faWQsIDApOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJZ290byByZWFkX25leHRfZmNmOwogCX0KIAkvKgotCSAqIFRoaXMgaXMgdGhlIGZpcnN0IGF2YWlsYWJsZSBGQ0YgcmVjb3JkLCB1c2UgdGhpcwotCSAqIHJlY29yZC4KKwkgKiBUaGlzIGlzIHRoZSBmaXJzdCBzdWl0YWJsZSBGQ0YgcmVjb3JkLCBjaG9vc2UgdGhpcyByZWNvcmQgZm9yCisJICogaW5pdGlhbCBiZXN0LWZpdCBGQ0YuCiAJICovCi0JbHBmY19jb3B5X2ZjZl9yZWNvcmQocGhiYSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5hZGRyX21vZGUgPSBhZGRyX21vZGU7Ci0JaWYgKGJvb3RfZmxhZykKLQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9CT09UX0VOQUJMRTsKLQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKLQlpZiAodmxhbl9pZCAhPSAweEZGRkYpIHsKLQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9WQUxJRF9WTEFOOwotCQlwaGJhLT5mY2Yudmxhbl9pZCA9IHZsYW5faWQ7CisJaWYgKGZjZl9yZWMpIHsKKwkJX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHBoYmEsIGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkLAorCQkJCQkgYWRkcl9tb2RlLCB2bGFuX2lkLCAoYm9vdF9mbGFnID8KKwkJCQkJIEJPT1RfRU5BQkxFIDogMCkpOworCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX0FWQUlMQUJMRTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiAJZ290byByZWFkX25leHRfZmNmOwogCiByZWFkX25leHRfZmNmOgogCWxwZmNfc2xpNF9tYm94X2NtZF9mcmVlKHBoYmEsIG1ib3hxKTsKLQlpZiAobmV4dF9mY2ZfaW5kZXggPT0gTFBGQ19GQ09FX0ZDRl9ORVhUX05PTkUgfHwgbmV4dF9mY2ZfaW5kZXggPT0gMCkKLQkJbHBmY19yZWdpc3Rlcl9mY2YocGhiYSk7Ci0JZWxzZQorCWlmIChuZXh0X2ZjZl9pbmRleCA9PSBMUEZDX0ZDT0VfRkNGX05FWFRfTk9ORSB8fCBuZXh0X2ZjZl9pbmRleCA9PSAwKSB7CisJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0ZPVikgeworCQkJLyoKKwkJCSAqIENhc2Ugb2YgRkNGIGZhc3QgZmFpbG92ZXIgc2NhbgorCQkJICovCisKKwkJCS8qCisJCQkgKiBJdCBoYXMgbm90IGZvdW5kIGFueSBzdWl0YWJsZSBGQ0YgcmVjb3JkLCBjYW5jZWwKKwkJCSAqIEZDRiBzY2FuIGlucHJvZ3Jlc3MsIGFuZCBkbyBub3RoaW5nCisJCQkgKi8KKwkJCWlmICghKHBoYmEtPmZjZi5mYWlsb3Zlcl9yZWMuZmxhZyAmIFJFQ09SRF9WQUxJRCkpIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwkJCQlwaGJhLT5oYmFfZmxhZyAmPSB+RkNGX0RJU0NfSU5QUk9HUkVTUzsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qCisJCQkgKiBJdCBoYXMgZm91bmQgYSBzdWl0YWJsZSBGQ0YgcmVjb3JkIHRoYXQgaXMgbm90CisJCQkgKiB0aGUgc2FtZSBhcyBpbi11c2UgRkNGIHJlY29yZCwgdW5yZWdpc3RlciB0aGUKKwkJCSAqIGluLXVzZSBGQ0YgcmVjb3JkLCByZXBsYWNlIHRoZSBpbi11c2UgRkNGIHJlY29yZAorCQkJICogd2l0aCB0aGUgbmV3IEZDRiByZWNvcmQsIG1hcmsgRkNGIGZhc3QgZmFpbG92ZXIKKwkJCSAqIGNvbXBsZXRlZCwgYW5kIHRoZW4gc3RhcnQgcmVnaXN0ZXIgdGhlIG5ldyBGQ0YKKwkJCSAqIHJlY29yZC4KKwkJCSAqLworCisJCQkvKiB1bnJlZ2lzdGVyIHRoZSBjdXJyZW50IGluLXVzZSBGQ0YgcmVjb3JkICovCisJCQlscGZjX3VucmVnaXN0ZXJfZmNmKHBoYmEpOworCQkJLyogcmVwbGFjZSBpbi11c2UgcmVjb3JkIHdpdGggdGhlIG5ldyByZWNvcmQgKi8KKwkJCW1lbWNweSgmcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLAorCQkJICAgICAgICZwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbHBmY19mY2ZfcmVjKSk7CisJCQkvKiBtYXJrIHRoZSBGQ0YgZmFzdCBmYWlsb3ZlciBjb21wbGV0ZWQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX0ZPVjsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQkvKiBSZWdpc3RlciB0byB0aGUgbmV3IEZDRiByZWNvcmQgKi8KKwkJCWxwZmNfcmVnaXN0ZXJfZmNmKHBoYmEpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gcGVyaW9kIHRvIGZhc3QgRkNGIGZhaWxvdmVyLAorCQkJICogZG8gbm90aGluZyB3aGVuIHNlYXJjaCB0byB0aGUgZW5kIG9mIHRoZSBGQ0YgdGFibGUuCisJCQkgKi8KKwkJCWlmICgocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19FVlQpIHx8CisJCQkgICAgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfUEVORCkpCisJCQkJcmV0dXJuOworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSwgaW5pdGlhbCBzY2FuIG9yIHBvc3QgbGlua2Rvd24gcmVzY2FuLAorCQkJICogcmVnaXN0ZXIgd2l0aCB0aGUgYmVzdCBmaXQgRkNGIHJlY29yZCBmb3VuZCBzbworCQkJICogZmFyIHRocm91Z2ggdGhlIHNjYW5uaW5nIHByb2Nlc3MuCisJCQkgKi8KKwkJCWxwZmNfcmVnaXN0ZXJfZmNmKHBoYmEpOworCQl9CisJfSBlbHNlCiAJCWxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwgbmV4dF9mY2ZfaW5kZXgpOwogCXJldHVybjsKIApAQCAtMTY5NSwxMCArMTc5OSwxMyBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjb21wbGV0aW9uIG9mIGluaXQgdnBpIG1haWxib3ggY29tbWFuZC4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGxwZmNfaW5pdF92cGlfY21wbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveHEpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gbWJveHEtPnZwb3J0OworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKKwogCWlmIChtYm94cS0+dS5tYi5tYnhTdGF0dXMpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCiAJCQkJTE9HX01CT1gsCkBAIC0xNzA4LDkgKzE4MTUsMjMgQEAKIAkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0ZBSUxFRCk7CiAJCXJldHVybjsKIAl9Ci0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisKKwkvKiBJZiB0aGlzIHBvcnQgaXMgcGh5c2ljYWwgcG9ydCBvciBGRElTQyBpcyBkb25lLCBkbyByZWdfdnBpICovCisJaWYgKChwaGJhLT5wcG9ydCA9PSB2cG9ydCkgfHwgKHZwb3J0LT5wb3J0X3N0YXRlID09IExQRkNfRkRJU0MpKSB7CisJCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnQsIEZhYnJpY19ESUQpOworCQkJaWYgKCFuZGxwKQorCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJCQlMT0dfRElTQ09WRVJZLAorCQkJCQkiMjczMSBDYW5ub3QgZmluZCBmYWJyaWMgIgorCQkJCQkiY29udHJvbGxlciBub2RlXG4iKTsKKwkJCWVsc2UKKwkJCQlscGZjX3JlZ2lzdGVyX25ld192cG9ydChwaGJhLCB2cG9ydCwgbmRscCk7CisJCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJcmV0dXJuOworCX0KIAogCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19OUElWX0ZBQl9TVVBQT1JURUQpCiAJCWxwZmNfaW5pdGlhbF9mZGlzYyh2cG9ydCk7CkBAIC0xNzE5LDEwICsxODQwLDQyIEBACiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRUxTLAogCQkJCSAiMjYwNiBObyBOUElWIEZhYnJpYyBzdXBwb3J0XG4iKTsKIAl9CisJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm47CiB9CiAKIC8qKgorICogbHBmY19pc3N1ZV9pbml0X3ZwaSAtIElzc3VlIGluaXRfdnBpIG1haWxib3ggY29tbWFuZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBscGZjX3Zwb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWUgYSBpbml0X3ZwaSBtYWlsYm94IGNvbW1hbmQgdG8gaW5pdGlhbGl6ZQorICogVlBJIGZvciB0aGUgdnBvcnQuCisgKi8KK3ZvaWQKK2xwZmNfaXNzdWVfaW5pdF92cGkoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCUxQRkNfTUJPWFFfdCAqbWJveHE7CisJaW50IHJjOworCisJbWJveHEgPSBtZW1wb29sX2FsbG9jKHZwb3J0LT5waGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3hxKSB7CisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJTE9HX01CT1gsICIyNjA3IEZhaWxlZCB0byBhbGxvY2F0ZSAiCisJCQkiaW5pdF92cGkgbWFpbGJveFxuIik7CisJCXJldHVybjsKKwl9CisJbHBmY19pbml0X3ZwaSh2cG9ydC0+cGhiYSwgbWJveHEsIHZwb3J0LT52cGkpOworCW1ib3hxLT52cG9ydCA9IHZwb3J0OworCW1ib3hxLT5tYm94X2NtcGwgPSBscGZjX2luaXRfdnBpX2NtcGw7CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHZwb3J0LT5waGJhLCBtYm94cSwgTUJYX05PV0FJVCk7CisJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCisJCQlMT0dfTUJPWCwgIjI2MDggRmFpbGVkIHRvIGlzc3VlIGluaXRfdnBpIG1haWxib3hcbiIpOworCQltZW1wb29sX2ZyZWUobWJveHEsIHZwb3J0LT5waGJhLT5tYm94X21lbV9wb29sKTsKKwl9Cit9CisKKy8qKgogICogbHBmY19zdGFydF9mZGlzY3MgLSBzZW5kIGZkaXNjcyBmb3IgZWFjaCB2cG9ydHMgb24gdGhpcyBwb3J0LgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMTczNCw4ICsxODg3LDYgQEAKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKIAlpbnQgaTsKLQlMUEZDX01CT1hRX3QgKm1ib3hxOwotCWludCByYzsKIAogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CiAJaWYgKHZwb3J0cyAhPSBOVUxMKSB7CkBAIC0xNzU0LDI2ICsxOTA1LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICh2cG9ydHNbaV0tPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSSkgewotCQkJCW1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIW1ib3hxKSB7Ci0JCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnRzW2ldLCBLRVJOX0VSUiwKLQkJCQkJTE9HX01CT1gsICIyNjA3IEZhaWxlZCB0byBhbGxvY2F0ZSAiCi0JCQkJCSJpbml0X3ZwaSBtYWlsYm94XG4iKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWxwZmNfaW5pdF92cGkocGhiYSwgbWJveHEsIHZwb3J0c1tpXS0+dnBpKTsKLQkJCQltYm94cS0+dnBvcnQgPSB2cG9ydHNbaV07Ci0JCQkJbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfaW5pdF92cGlfY21wbDsKLQkJCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsCi0JCQkJCU1CWF9OT1dBSVQpOwotCQkJCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7Ci0JCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnRzW2ldLCBLRVJOX0VSUiwKLQkJCQkJTE9HX01CT1gsICIyNjA4IEZhaWxlZCB0byBpc3N1ZSAiCi0JCQkJCSJpbml0X3ZwaSBtYWlsYm94XG4iKTsKLQkJCQkJbWVtcG9vbF9mcmVlKG1ib3hxLAotCQkJCQkJcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCQkJfQorCQkJCWxwZmNfaXNzdWVfaW5pdF92cGkodnBvcnRzW2ldKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19OUElWX0ZBQl9TVVBQT1JURUQpCkBAIC0xNzk2LDYgKzE5MjgsNyBAQAogewogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1hYnVmID0gbWJveHEtPmNvbnRleHQxOwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IG1ib3hxLT52cG9ydDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKIAlpZiAobWJveHEtPnUubWIubWJ4U3RhdHVzKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfTUJPWCwKQEAgLTE4MTMsNyArMTk0NiwxMSBAQAogCQlnb3RvIGZhaWxfZnJlZV9tZW07CiAJfQogCS8qIFRoZSBWUEkgaXMgaW1wbGljaXRseSByZWdpc3RlcmVkIHdoZW4gdGhlIFZGSSBpcyByZWdpc3RlcmVkICovCisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+dnBpX3N0YXRlIHw9IExQRkNfVlBJX1JFR0lTVEVSRUQ7CisJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVkZJX1JFR0lTVEVSRUQ7CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJaWYgKHZwb3J0LT5wb3J0X3N0YXRlID09IExQRkNfRkFCUklDX0NGR19MSU5LKSB7CiAJCWxwZmNfc3RhcnRfZmRpc2NzKHBoYmEpOwpAQCAtMjA1MCw4ICsyMTg3LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQlyYyA9IGxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwKLQkJCQkJTFBGQ19GQ09FX0ZDRl9HRVRfRklSU1QpOworCQlyYyA9IGxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwgTFBGQ19GQ09FX0ZDRl9HRVRfRklSU1QpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0yMTM5LDEwICsyMjc1LDEyIEBACiAJfQogCiAJcGhiYS0+ZmNfZXZlbnRUYWcgPSBsYS0+ZXZlbnRUYWc7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJaWYgKGxhLT5tbSkKIAkJcGhiYS0+c2xpLnNsaV9mbGFnIHw9IExQRkNfTUVOTE9fTUFJTlQ7CiAJZWxzZQogCQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfTUVOTE9fTUFJTlQ7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCXBoYmEtPmxpbmtfZXZlbnRzKys7CiAJaWYgKGxhLT5hdHRUeXBlID09IEFUX0xJTktfVVAgJiYgKCFsYS0+bW0pKSB7CkBAIC0yMjcxLDEwICsyNDA5LDEwIEBACiAJCQkJIG1iLT5tYnhTdGF0dXMpOwogCQlicmVhazsKIAl9Ci0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPnVucmVnX3ZwaV9jbXBsID0gVlBPUlRfT0s7CiAJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJLyoKQEAgLTIzMzIsNyArMjQ3MCwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCXZwb3J0LT52cGlfc3RhdGUgfD0gTFBGQ19WUElfUkVHSVNURVJFRDsKKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPm51bV9kaXNjX25vZGVzID0gMDsKIAkvKiBnbyB0aHJ1IE5QUiBsaXN0IGFuZCBpc3N1ZSBFTFMgUExPR0lzICovCiAJaWYgKHZwb3J0LT5mY19ucHJfY250KQpAQCAtMzIxOCw2ICszMzU5LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY191bnJlZ19oYmFfcnBpcyAtIFVucmVnaXN0ZXIgcnBpcyByZWdpc3RlcmVkIHRvIHRoZSBoYmEuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byB1bnJlZ2lzdGVyIGFsbCB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgUlBJcworICogdG8gdGhlIEhCQS4KKyAqKi8KK3ZvaWQKK2xwZmNfdW5yZWdfaGJhX3JwaXMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCWludCBpOworCisJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5kbHAsICZ2cG9ydHNbaV0tPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9SUElfVkFMSUQpCisJCQkJbHBmY191bnJlZ19ycGkodnBvcnRzW2ldLCBuZGxwKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJfQorCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7Cit9CisKIHZvaWQKIGxwZmNfdW5yZWdfYWxsX3JwaXMoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtNDQ0OCw2ICs0NjE3LDE5NSBAQAogfQogCiAvKioKKyAqIGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcHJlcCAtIFVucmVnaXN0ZXIgZmNmIHJlY29yZCBwcmVwYXJhdGlvbgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZSB0aGUgSEJBIGZvciB1bnJlZ2lzdGVyaW5nIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZAorICogRkNGIGZyb20gdGhlIEhCQS4gSXQgcGVyZm9ybXMgdW5yZWdpc3RlcmluZywgaW4gb3JkZXIsIFJQSXMsIFZQSXMsIGFuZAorICogVkZJcy4KKyAqLworaW50CitscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlpbnQgaSwgcmM7CisKKwkvKiBVbnJlZ2lzdGVyIFJQSXMgKi8KKwlpZiAobHBmY19mY2ZfaW51c2UocGhiYSkpCisJCWxwZmNfdW5yZWdfaGJhX3JwaXMocGhiYSk7CisKKwkvKiBBdCB0aGlzIHBvaW50LCBhbGwgZGlzY292ZXJ5IGlzIGFib3J0ZWQgKi8KKwlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfVlBPUlRfVU5LTk9XTjsKKworCS8qIFVucmVnaXN0ZXIgVlBJcyAqLworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJaWYgKHZwb3J0cyAmJiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX05QSVZfRU5BQkxFRCkpCisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQkvKiBTdG9wIEZMT0dJL0ZESVNDIHJldHJpZXMgKi8KKwkJCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZCh2cG9ydHNbaV0sIEZhYnJpY19ESUQpOworCQkJaWYgKG5kbHApCisJCQkJbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHZwb3J0c1tpXSwgbmRscCk7CisJCQlscGZjX21ieF91bnJlZ192cGkodnBvcnRzW2ldKTsKKwkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJdnBvcnRzW2ldLT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX0lOSVRfVlBJOworCQkJdnBvcnRzW2ldLT52cGlfc3RhdGUgJj0gfkxQRkNfVlBJX1JFR0lTVEVSRUQ7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCX0KKwlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCisJLyogQ2xlYW51cCBhbnkgb3V0c3RhbmRpbmcgRUxTIGNvbW1hbmRzICovCisJbHBmY19lbHNfZmx1c2hfYWxsX2NtZChwaGJhKTsKKworCS8qIFVucmVnaXN0ZXIgVkZJICovCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1NiBVTlJFR19WRkkgbWJveCBhbGxvY2F0aW9uIGZhaWxlZCIKKwkJCQkiSEJBIHN0YXRlIHgleFxuIiwgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlscGZjX3VucmVnX3ZmaShtYm94LCBwaGJhLT5wcG9ydCk7CisJbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfdmZpX2NtcGw7CisKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveCwgTUJYX05PV0FJVCk7CisJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAorCQkJCSIyNTU3IFVOUkVHX1ZGSSBpc3N1ZSBtYm94IGZhaWxlZCByYyB4JXggIgorCQkJCSJIQkEgc3RhdGUgeCV4XG4iLAorCQkJCXJjLCBwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7CisJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJcGhiYS0+cHBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZGSV9SRUdJU1RFUkVEOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfc2xpNF91bnJlZ2lzdGVyX2ZjZiAtIFVucmVnaXN0ZXIgY3VycmVudGx5IHJlZ2lzdGVyZWQgRkNGIHJlY29yZAorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIHN5bmNocm9ub3VzIHVucmVnaXN0ZXIgRkNGIG1haWxib3ggY29tbWFuZCB0byBIQkEgdG8KKyAqIHVucmVnaXN0ZXIgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIEZDRiByZWNvcmQuIFRoZSBkcml2ZXIgZG9lcyBub3QgcmVzZXQKKyAqIHRoZSBkcml2ZXIgRkNGIHVzYWdlIHN0YXRlIGZsYWdzLgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWxseSBpc3N1ZWQsIG5vbmUtemVybyBvdGhlcndpc2UuCisgKi8KK2ludAorbHBmY19zbGk0X3VucmVnaXN0ZXJfZmNmKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlMUEZDX01CT1hRX3QgKm1ib3g7CisJaW50IHJjOworCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94KSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1MSBVTlJFR19GQ0ZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCisJCQkJIkhCQSBzdGF0ZSB4JXhcbiIsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWxwZmNfdW5yZWdfZmNmaShtYm94LCBwaGJhLT5mY2YuZmNmaSk7CisJbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfZmNmaV9jbXBsOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKKworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKKwkJCQkiMjU1MiBVbnJlZ2lzdGVyIEZDRkkgY29tbWFuZCBmYWlsZWQgcmMgeCV4ICIKKwkJCQkiSEJBIHN0YXRlIHgleFxuIiwKKwkJCQlyYywgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY191bnJlZ2lzdGVyX2ZjZl9yZXNjYW4gLSBVbnJlZ2lzdGVyIGN1cnJlbnRseSByZWdpc3RlcmVkIGZjZiBhbmQgcmVzY2FuCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyB0aGUgY3VycmVudGx5IHJlaWdzdGVyZWQgRkNGLiBUaGlzIGZ1bmN0aW9uCisgKiBhbHNvIHRyaWVzIHRvIGZpbmQgYW5vdGhlciBGQ0YgZm9yIGRpc2NvdmVyeSBieSByZXNjYW4gdGhlIEhCQSBGQ0YgdGFibGUuCisgKi8KK3ZvaWQKK2xwZmNfdW5yZWdpc3Rlcl9mY2ZfcmVzY2FuKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlpbnQgcmM7CisKKwkvKiBQcmVwYXJhdGlvbiBmb3IgdW5yZWdpc3RlcmluZyBmY2YgKi8KKwlyYyA9IGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcHJlcChwaGJhKTsKKwlpZiAocmMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAorCQkJCSIyNzQ4IEZhaWxlZCB0byBwcmVwYXJlIGZvciB1bnJlZ2lzdGVyaW5nICIKKwkJCQkiSEJBJ3MgRkNGIHJlY29yZDogcmM9JWRcbiIsIHJjKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE5vdywgdW5yZWdpc3RlciBGQ0YgcmVjb3JkIGFuZCByZXNldCBIQkEgRkNGIHN0YXRlICovCisJcmMgPSBscGZjX3NsaTRfdW5yZWdpc3Rlcl9mY2YocGhiYSk7CisJaWYgKHJjKQorCQlyZXR1cm47CisJLyogUmVzZXQgSEJBIEZDRiBzdGF0ZXMgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnJlZ2lzdGVyIEZDRiAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyA9IDA7CisKKwkvKgorCSAqIElmIGRyaXZlciBpcyBub3QgdW5sb2FkaW5nLCBjaGVjayBpZiB0aGVyZSBpcyBhbnkgb3RoZXIKKwkgKiBGQ0YgcmVjb3JkIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRpc2NvdmVyeS4KKwkgKi8KKwlpZiAoKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpIHx8CisJICAgIChwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX1VQKSkKKwkJcmV0dXJuOworCisJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKworCWlmIChyYykKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAorCQkJCSIyNTUzIGxwZmNfdW5yZWdpc3Rlcl91bnVzZWRfZmNmIGZhaWxlZCAiCisJCQkJInRvIHJlYWQgRkNGIHJlY29yZCBIQkEgc3RhdGUgeCV4XG4iLAorCQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKK30KKworLyoqCisgKiBscGZjX3VucmVnaXN0ZXJfZmNmIC0gVW5yZWdpc3RlciB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgZmNmIHJlY29yZAorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24ganVzdCB1bnJlZ2lzdGVycyB0aGUgY3VycmVudGx5IHJlaWdzdGVyZWQgRkNGLiBJdCBkb2VzIG5vdAorICogdHJ5IHRvIGZpbmQgYW5vdGhlciBGQ0YgZm9yIGRpc2NvdmVyeS4KKyAqLwordm9pZAorbHBmY191bnJlZ2lzdGVyX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJaW50IHJjOworCisJLyogUHJlcGFyYXRpb24gZm9yIHVucmVnaXN0ZXJpbmcgZmNmICovCisJcmMgPSBscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAocGhiYSk7CisJaWYgKHJjKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKKwkJCQkiMjc0OSBGYWlsZWQgdG8gcHJlcGFyZSBmb3IgdW5yZWdpc3RlcmluZyAiCisJCQkJIkhCQSdzIEZDRiByZWNvcmQ6IHJjPSVkXG4iLCByYyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3csIHVucmVnaXN0ZXIgRkNGIHJlY29yZCBhbmQgcmVzZXQgSEJBIEZDRiBzdGF0ZSAqLworCXJjID0gbHBmY19zbGk0X3VucmVnaXN0ZXJfZmNmKHBoYmEpOworCWlmIChyYykKKwkJcmV0dXJuOworCS8qIFNldCBwcm9wZXIgSEJBIEZDRiBzdGF0ZXMgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnJlZ2lzdGVyIEZDRiAqLworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFR0lTVEVSRUQ7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKworLyoqCiAgKiBscGZjX3VucmVnaXN0ZXJfdW51c2VkX2ZjZiAtIFVucmVnaXN0ZXIgRkNGIGlmIGFsbCBkZXZpY2VzIGFyZSBkaXNjb25uZWN0ZWQuCiAgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCiAgKgpAQCAtNDQ1OCwyMSArNDgxNiwxNCBAQAogdm9pZAogbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2Yoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCUxQRkNfTUJPWFFfdCAqbWJveDsKLQlpbnQgcmM7Ci0Jc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7Ci0JaW50IGk7Ci0KLQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkvKgotCSAqIElmIEhCQSBpcyBub3QgcnVubmluZyBpbiBGSVAgbW9kZSBvcgotCSAqIElmIEhCQSBkb2VzIG5vdCBzdXBwb3J0IEZDb0Ugb3IKLQkgKiBJZiBGQ0YgaXMgbm90IHJlZ2lzdGVyZWQuCi0JICogZG8gbm90aGluZy4KKwkgKiBJZiBIQkEgaXMgbm90IHJ1bm5pbmcgaW4gRklQIG1vZGUgb3IgaWYgSEJBIGRvZXMgbm90IHN1cHBvcnQKKwkgKiBGQ29FIG9yIGlmIEZDRiBpcyBub3QgcmVnaXN0ZXJlZCwgZG8gbm90aGluZy4KIAkgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlpZiAoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX1NVUFBPUlQpIHx8Ci0JCSEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFR0lTVEVSRUQpIHx8Ci0JCSghKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZJUF9TVVBQT1JUKSkpIHsKKwkgICAgIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVHSVNURVJFRCkgfHwKKwkgICAgIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ0ODEsOTEgKzQ4MzIsNyBAQAogCWlmIChscGZjX2ZjZl9pbnVzZShwaGJhKSkKIAkJcmV0dXJuOwogCi0JLyogQXQgdGhpcyBwb2ludCwgYWxsIGRpc2NvdmVyeSBpcyBhYm9ydGVkICovCi0JcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX1ZQT1JUX1VOS05PV047Ci0KLQkvKiBVbnJlZ2lzdGVyIFZQSXMgKi8KLQl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwotCWlmICh2cG9ydHMgJiYKLQkJKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpKQotCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgewotCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0c1tpXSk7Ci0JCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKLQkJCXZwb3J0c1tpXS0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJfQotCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7Ci0KLQkvKiBVbnJlZ2lzdGVyIFZGSSAqLwotCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwotCWlmICghbWJveCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1NiBVTlJFR19WRkkgbWJveCBhbGxvY2F0aW9uIGZhaWxlZCIKLQkJCSJIQkEgc3RhdGUgeCV4XG4iLAotCQkJcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOwotCQlyZXR1cm47Ci0JfQotCi0JbHBmY191bnJlZ192ZmkobWJveCwgcGhiYS0+cHBvcnQpOwotCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7Ci0JbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX3ZmaV9jbXBsOwotCi0JcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsIE1CWF9OT1dBSVQpOwotCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKLQkJCSIyNTU3IFVOUkVHX1ZGSSBpc3N1ZSBtYm94IGZhaWxlZCByYyB4JXggIgotCQkJIkhCQSBzdGF0ZSB4JXhcbiIsCi0JCQlyYywgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOwotCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBVbnJlZ2lzdGVyIEZDRiAqLwotCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwotCWlmICghbWJveCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1MSBVTlJFR19GQ0ZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCi0JCQkiSEJBIHN0YXRlIHgleFxuIiwKLQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJcmV0dXJuOwotCX0KLQotCWxwZmNfdW5yZWdfZmNmaShtYm94LCBwaGJhLT5mY2YuZmNmaSk7Ci0JbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKLQltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfZmNmaV9jbXBsOwotCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKLQotCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKLQkJCSIyNTUyIFVOUkVHX0ZDRkkgaXNzdWUgbWJveCBmYWlsZWQgcmMgeCV4ICIKLQkJCSJIQkEgc3RhdGUgeCV4XG4iLAotCQkJcmMsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX0FWQUlMQUJMRSB8IEZDRl9SRUdJU1RFUkVEIHwKLQkJRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfQk9PVF9FTkFCTEUgfCBGQ0ZfSU5fVVNFIHwKLQkJRkNGX1ZBTElEX1ZMQU4pOwotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0KLQkvKgotCSAqIElmIGRyaXZlciBpcyBub3QgdW5sb2FkaW5nLCBjaGVjayBpZiB0aGVyZSBpcyBhbnkgb3RoZXIKLQkgKiBGQ0YgcmVjb3JkIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRpc2NvdmVyeS4KLQkgKi8KLQlpZiAoKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpIHx8Ci0JCShwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX1VQKSkKLQkJcmV0dXJuOwotCi0JcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKLQotCWlmIChyYykKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAotCQkJIjI1NTMgbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2YgZmFpbGVkIHRvIHJlYWQgRkNGIgotCQkJIiByZWNvcmQgSEJBIHN0YXRlIHgleFxuIiwKLQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwlscGZjX3VucmVnaXN0ZXJfZmNmX3Jlc2NhbihwaGJhKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKaW5kZXggYzlmYWExZC4uODlmZjdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTM0Niw2ICsxMzQ2LDkgQEAKICNkZWZpbmUgTUJYX0hFQVJUQkVBVCAgICAgICAweDMxCiAjZGVmaW5lIE1CWF9XUklURV9WUEFSTVMgICAgMHgzMgogI2RlZmluZSBNQlhfQVNZTkNFVlRfRU5BQkxFIDB4MzMKKyNkZWZpbmUgTUJYX1JFQURfRVZFTlRfTE9HX1NUQVRVUyAweDM3CisjZGVmaW5lIE1CWF9SRUFEX0VWRU5UX0xPRyAgMHgzOAorI2RlZmluZSBNQlhfV1JJVEVfRVZFTlRfTE9HIDB4MzkKIAogI2RlZmluZSBNQlhfUE9SVF9DQVBBQklMSVRJRVMgMHgzQgogI2RlZmluZSBNQlhfUE9SVF9JT1ZfQ09OVFJPTCAweDNDCkBAIC0xNDY1LDE3ICsxNDY4LDEzIEBACiAjZGVmaW5lIENNRF9JT0NCX0xPR0VOVFJZX0NOCQkweDk0CiAjZGVmaW5lIENNRF9JT0NCX0xPR0VOVFJZX0FTWU5DX0NOCTB4OTYKIAotLyogVW5oYW5kbGVkIERhdGEgU2VjdXJpdHkgU0xJIENvbW1hbmRzICovCi0jZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DUiAJCTB4RDgKLSNkZWZpbmUgRFNTQ01EX0lXUklURTY0X0NYCQkweEQ5Ci0jZGVmaW5lIERTU0NNRF9JUkVBRDY0X0NSCQkweERBCi0jZGVmaW5lIERTU0NNRF9JUkVBRDY0X0NYCQkweERCCi0jZGVmaW5lIERTU0NNRF9JTlZBTElEQVRFX0RFSwkJMHhEQwotI2RlZmluZSBEU1NDTURfU0VUX0tFSwkJCTB4REQKLSNkZWZpbmUgRFNTQ01EX0dFVF9LRUtfSUQJCTB4REUKLSNkZWZpbmUgRFNTQ01EX0dFTl9YRkVSCQkJMHhERgorLyogRGF0YSBTZWN1cml0eSBTTEkgQ29tbWFuZHMgKi8KKyNkZWZpbmUgRFNTQ01EX0lXUklURTY0X0NSCQkweEY4CisjZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DWAkJMHhGOQorI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DUgkJMHhGQQorI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DWAkJMHhGQgogCi0jZGVmaW5lIENNRF9NQVhfSU9DQl9DTUQgICAgICAgIDB4RTYKKyNkZWZpbmUgQ01EX01BWF9JT0NCX0NNRCAgICAgICAgMHhGQgogI2RlZmluZSBDTURfSU9DQl9NQVNLICAgICAgICAgICAweGZmCiAKICNkZWZpbmUgTUFYX01TR19EQVRBICAgICAgICAgICAgMjgJLyogbWF4IG1zZyBkYXRhIGluIENNRF9BREFQVEVSX01TRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKaW5kZXggOGEyYTFjNS4uODIwMDE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCkBAIC01MiwzNSArNTIsMzcgQEAKIAl1aW50MzJfdCBhZGRyX2hpOwogfTsKIAotI2RlZmluZSBMUEZDX1NMSVJFVl9DT05GX1dPUkQJMHg1OAogc3RydWN0IGxwZmNfc2xpX2ludGYgewogCXVpbnQzMl90IHdvcmQwOwotI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmdHlwZV9NQVNLIAkweDAwMDAwMDA3Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZ0eXBlX1NISUZUCTAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZnR5cGVfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9NQVNLIAkJMHgwMDAwMDAwZgotI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9TSElGVAkJNAotI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9XT1JECQl3b3JkMAotI2RlZmluZSBMUEZDX1NMSVJFVl9DT05GX1NMSTQJNAotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZhbWlseV9NQVNLIAkweDAwMDAwMGZmCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmFtaWx5X1NISUZUCTgKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mYW1pbHlfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQxX01BU0sgCTB4MDAwMDAwZmYKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0MV9TSElGVAkxNgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQxX1dPUkQJd29yZDAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0Ml9NQVNLIAkweDAwMDAwMDFmCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDJfU0hJRlQJMjQKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0Ml9XT1JECXdvcmQwCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfTUFTSyAJMHgwMDAwMDAwNwotI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX1NISUZUCTI5Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX1NISUZUCQkyOQorI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX01BU0sJCTB4MDAwMDAwMDcKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9XT1JECQl3b3JkMAogI2RlZmluZSBMUEZDX1NMSV9JTlRGX1ZBTElECQk2CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMl9TSElGVAkyNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDJfTUFTSwkweDAwMDAwMDFGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMl9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMV9TSElGVAkxNgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDFfTUFTSwkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMV9XT1JECXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8xCTEKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9GRUFUVVJFTEVWRUwxXzIJMgorI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaV9mYW1pbHlfU0hJRlQJCTgKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5X01BU0sJCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5X1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkFNSUxZX0JFMgkwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkFNSUxZX0JFMwkxCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X1NISUZUCQk0CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X01BU0sJCTB4MDAwMDAwMEYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlyZXZfV09SRAkJd29yZDAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9SRVZfU0xJMwkJMworI2RlZmluZSBMUEZDX1NMSV9JTlRGX1JFVl9TTEk0CQk0CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZfdHlwZV9TSElGVAkJMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfTUFTSwkJMHgwMDAwMDAwNworI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfV09SRAkJd29yZDAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9JRl9UWVBFXzAJCTAKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9JRl9UWVBFXzEJCTEKIH07CiAKLSNkZWZpbmUgTFBGQ19TTEk0X0JBUjAJCTEKLSNkZWZpbmUgTFBGQ19TTEk0X0JBUjEJCTIKLSNkZWZpbmUgTFBGQ19TTEk0X0JBUjIJCTQKLQogI2RlZmluZSBMUEZDX1NMSTRfTUJYX0VNQkVECXRydWUKICNkZWZpbmUgTFBGQ19TTEk0X01CWF9ORU1CRUQJZmFsc2UKIApAQCAtMTYxLDYgKzE2Myw5IEBACiAjZGVmaW5lIExQRkNfRlBfREVGX0lNQVggICAgICAgMTAwMDAKICNkZWZpbmUgTFBGQ19TUF9ERUZfSU1BWCAgICAgICAxMDAwMAogCisvKiBQT1JUX0NBUEFCSUxJVElFUyBjb25zdGFudHMuICovCisjZGVmaW5lIExQRkNfTUFYX1NVUFBPUlRFRF9QQUdFUwk4CisKIHN0cnVjdCB1bHBfYmRlNjQgewogCXVuaW9uIFVMUF9CREVfVFVTIHsKIAkJdWludDMyX3QgdzsKQEAgLTUxNiw3ICs1MjEsNyBAQAogI2RlZmluZSBMUEZDX1VFUlJfU1RBVFVTX0xPCQkweDAwQTAKICNkZWZpbmUgTFBGQ19VRV9NQVNLX0hJCQkJMHgwMEFDCiAjZGVmaW5lIExQRkNfVUVfTUFTS19MTwkJCTB4MDBBOAotI2RlZmluZSBMUEZDX1NDUkFUQ0hQQUQJCQkweDAwNTgKKyNkZWZpbmUgTFBGQ19TTElfSU5URgkJCTB4MDA1OAogCiAvKiBCQVIwIFJlZ2lzdGVycyAqLwogI2RlZmluZSBMUEZDX0hTVF9TVEFURQkJCTB4MDBBQwpAQCAtNTc2LDE5ICs1ODEsNiBAQAogI2RlZmluZSBMUEZDX1BPU1RfU1RBR0VfQVJNRldfUkVBRFkJCQkweEMwMDAKICNkZWZpbmUgTFBGQ19QT1NUX1NUQUdFX0FSTUZXX1VFIAkJCTB4RjAwMAogCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9zbGlyZXZfU0hJRlQJCQk0Ci0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9zbGlyZXZfTUFTSwkJCTB4RgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfc2xpcmV2X1dPUkQJCQl3b3JkMAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfY2hpcHR5cGVfU0hJRlQJCQk4Ci0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9jaGlwdHlwZV9NQVNLCQkJMHhGRgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfY2hpcHR5cGVfV09SRAkJCXdvcmQwCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxX1NISUZUCQkxNgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMV9NQVNLCQkweEZGCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxX1dPUkQJCXdvcmQwCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwyX1NISUZUCQkyNAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMl9NQVNLCQkweEZGCi0jZGVmaW5lIGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwyX1dPUkQJCXdvcmQwCi0KIC8qIEJBUjEgUmVnaXN0ZXJzICovCiAjZGVmaW5lIExQRkNfSU1SX01BU0tfQUxMCTB4RkZGRkZGRkYKICNkZWZpbmUgTFBGQ19JU0NSX0NMRUFSX0FMTAkweEZGRkZGRkZGCkBAIC04MDEsNiArNzkzLDcgQEAKICNkZWZpbmUgTFBGQ19NQk9YX09QQ09ERV9GQ09FX0FERF9GQ0YJCQkweDA5CiAjZGVmaW5lIExQRkNfTUJPWF9PUENPREVfRkNPRV9ERUxFVEVfRkNGCQkweDBBCiAjZGVmaW5lIExQRkNfTUJPWF9PUENPREVfRkNPRV9QT1NUX0hEUl9URU1QTEFURQkJMHgwQgorI2RlZmluZSBMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUkVESVNDT1ZFUl9GQ0YJCTB4MTAKIAogLyogTWFpbGJveCBjb21tYW5kIHN0cnVjdHVyZXMgKi8KIHN0cnVjdCBlcV9jb250ZXh0IHsKQEAgLTExNDksMTAgKzExNDIsNyBAQAogCQkJCQkJdGhpcyAgZmxhZyAhISAqLwogI2RlZmluZSBscGZjX3NsaTRfc2dlX2xhc3RfTUFTSwkJMHgwMDAwMDAwMQogI2RlZmluZSBscGZjX3NsaTRfc2dlX2xhc3RfV09SRAkJd29yZDIKLQl1aW50MzJfdCB3b3JkMzsKLSNkZWZpbmUgbHBmY19zbGk0X3NnZV9sZW5fU0hJRlQJCTAKLSNkZWZpbmUgbHBmY19zbGk0X3NnZV9sZW5fTUFTSwkJMHgwMDAxRkZGRgotI2RlZmluZSBscGZjX3NsaTRfc2dlX2xlbl9XT1JECQl3b3JkMworCXVpbnQzMl90IHNnZV9sZW47CiB9OwogCiBzdHJ1Y3QgZmNmX3JlY29yZCB7CkBAIC0xMzAxLDYgKzEyOTEsMTkgQEAKICNkZWZpbmUgbHBmY19tYnhfZGVsX2ZjZl90YmxfaW5kZXhfV09SRAkJd29yZDEwCiB9OwogCitzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgeworCXN0cnVjdCBtYm94X2hlYWRlciBoZWFkZXI7CisJdWludDMyX3Qgd29yZDEwOworI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2NvdW50X1NISUZUCQkwCisjZGVmaW5lIGxwZmNfbWJ4X3JlZGlzY19mY2ZfY291bnRfTUFTSwkJMHgwMDAwRkZGRgorI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2NvdW50X1dPUkQJCXdvcmQxMAorCXVpbnQzMl90IHJlc3ZkOworCXVpbnQzMl90IHdvcmQxMjsKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9pbmRleF9TSElGVAkJMAorI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2luZGV4X01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9pbmRleF9XT1JECQl3b3JkMTIKK307CisKIHN0cnVjdCBscGZjX21ieF9xdWVyeV9md19jZmcgewogCXN0cnVjdCBtYm94X2hlYWRlciBoZWFkZXI7CiAJdWludDMyX3QgY29uZmlnX251bWJlcjsKQEAgLTE4MzQsNiArMTgzNywxNzcgQEAKICNkZWZpbmUgbHBmY19tYnhfcnFfZnRyX3JzcF9pZmlwX1dPUkQJCXdvcmQzCiB9OwogCitzdHJ1Y3QgbHBmY19tYnhfc3VwcF9wYWdlcyB7CisJdWludDMyX3Qgd29yZDE7CisjZGVmaW5lIHFzX1NISUZUIAkJCQkwCisjZGVmaW5lIHFzX01BU0sJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgcXNfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgd3JfU0hJRlQJCQkJMQorI2RlZmluZSB3cl9NQVNLIAkJCQkweDAwMDAwMDAxCisjZGVmaW5lIHdyX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIHBmX1NISUZUCQkJCTgKKyNkZWZpbmUgcGZfTUFTSwkJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwZl9XT1JECQkJCQl3b3JkMQorI2RlZmluZSBjcG5fU0hJRlQJCQkJMTYKKyNkZWZpbmUgY3BuX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBjcG5fV09SRAkJCQl3b3JkMQorCXVpbnQzMl90IHdvcmQyOworI2RlZmluZSBsaXN0X29mZnNldF9TSElGVCAJCQkwCisjZGVmaW5lIGxpc3Rfb2Zmc2V0X01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIGxpc3Rfb2Zmc2V0X1dPUkQJCQl3b3JkMgorI2RlZmluZSBuZXh0X29mZnNldF9TSElGVAkJCTgKKyNkZWZpbmUgbmV4dF9vZmZzZXRfTUFTSwkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgbmV4dF9vZmZzZXRfV09SRAkJCXdvcmQyCisjZGVmaW5lIGVsZW1fY250X1NISUZUCQkJCTE2CisjZGVmaW5lIGVsZW1fY250X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBlbGVtX2NudF9XT1JECQkJCXdvcmQyCisJdWludDMyX3Qgd29yZDM7CisjZGVmaW5lIHBuXzBfU0hJRlQJCQkJMjQKKyNkZWZpbmUgcG5fMF9NQVNLICAJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl8wX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgcG5fMV9TSElGVAkJCQkxNgorI2RlZmluZSBwbl8xX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl8xX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgcG5fMl9TSElGVAkJCQk4CisjZGVmaW5lIHBuXzJfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzJfV09SRAkJCQl3b3JkMworI2RlZmluZSBwbl8zX1NISUZUCQkJCTAKKyNkZWZpbmUgcG5fM19NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fM19XT1JECQkJCXdvcmQzCisJdWludDMyX3Qgd29yZDQ7CisjZGVmaW5lIHBuXzRfU0hJRlQJCQkJMjQKKyNkZWZpbmUgcG5fNF9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fNF9XT1JECQkJCXdvcmQ0CisjZGVmaW5lIHBuXzVfU0hJRlQJCQkJMTYKKyNkZWZpbmUgcG5fNV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fNV9XT1JECQkJCXdvcmQ0CisjZGVmaW5lIHBuXzZfU0hJRlQJCQkJOAorI2RlZmluZSBwbl82X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl82X1dPUkQJCQkJd29yZDQKKyNkZWZpbmUgcG5fN19TSElGVAkJCQkwCisjZGVmaW5lIHBuXzdfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzdfV09SRAkJCQl3b3JkNAorCXVpbnQzMl90IHJzdmRbMjddOworI2RlZmluZSBMUEZDX1NVUFBfUEFHRVMJCQkwCisjZGVmaW5lIExQRkNfQkxPQ0tfR1VBUkRfUFJPRklMRVMJMQorI2RlZmluZSBMUEZDX1NMSTRfUEFSQU1FVEVSUwkJMgorfTsKKworc3RydWN0IGxwZmNfbWJ4X3NsaTRfcGFyYW1zIHsKKwl1aW50MzJfdCB3b3JkMTsKKyNkZWZpbmUgcXNfU0hJRlQJCQkJMAorI2RlZmluZSBxc19NQVNLCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIHFzX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIHdyX1NISUZUCQkJCTEKKyNkZWZpbmUgd3JfTUFTSwkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSB3cl9XT1JECQkJCQl3b3JkMQorI2RlZmluZSBwZl9TSElGVAkJCQk4CisjZGVmaW5lIHBmX01BU0sJCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcGZfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgY3BuX1NISUZUCQkJCTE2CisjZGVmaW5lIGNwbl9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgY3BuX1dPUkQJCQkJd29yZDEKKwl1aW50MzJfdCB3b3JkMjsKKyNkZWZpbmUgaWZfdHlwZV9TSElGVAkJCQkwCisjZGVmaW5lIGlmX3R5cGVfTUFTSwkJCQkweDAwMDAwMDA3CisjZGVmaW5lIGlmX3R5cGVfV09SRAkJCQl3b3JkMgorI2RlZmluZSBzbGlfcmV2X1NISUZUCQkJCTQKKyNkZWZpbmUgc2xpX3Jldl9NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgc2xpX3Jldl9XT1JECQkJCXdvcmQyCisjZGVmaW5lIHNsaV9mYW1pbHlfU0hJRlQJCQk4CisjZGVmaW5lIHNsaV9mYW1pbHlfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHNsaV9mYW1pbHlfV09SRAkJCQl3b3JkMgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMV9TSElGVAkJCTE2CisjZGVmaW5lIGZlYXR1cmVsZXZlbF8xX01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIGZlYXR1cmVsZXZlbF8xX1dPUkQJCQl3b3JkMgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMl9TSElGVAkJCTI0CisjZGVmaW5lIGZlYXR1cmVsZXZlbF8yX01BU0sJCQkweDAwMDAwMDFmCisjZGVmaW5lIGZlYXR1cmVsZXZlbF8yX1dPUkQJCQl3b3JkMgorCXVpbnQzMl90IHdvcmQzOworI2RlZmluZSBmY29lX1NISUZUIAkJCQkwCisjZGVmaW5lIGZjb2VfTUFTSwkJCQkweDAwMDAwMDAxCisjZGVmaW5lIGZjb2VfV09SRAkJCQl3b3JkMworI2RlZmluZSBmY19TSElGVAkJCQkxCisjZGVmaW5lIGZjX01BU0sJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgZmNfV09SRAkJCQkJd29yZDMKKyNkZWZpbmUgbmljX1NISUZUCQkJCTIKKyNkZWZpbmUgbmljX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBuaWNfV09SRAkJCQl3b3JkMworI2RlZmluZSBpc2NzaV9TSElGVAkJCQkzCisjZGVmaW5lIGlzY3NpX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBpc2NzaV9XT1JECQkJCXdvcmQzCisjZGVmaW5lIHJkbWFfU0hJRlQJCQkJNAorI2RlZmluZSByZG1hX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSByZG1hX1dPUkQJCQkJd29yZDMKKwl1aW50MzJfdCBzZ2Vfc3VwcF9sZW47CisJdWludDMyX3Qgd29yZDU7CisjZGVmaW5lIGlmX3BhZ2Vfc3pfU0hJRlQJCQkwCisjZGVmaW5lIGlmX3BhZ2Vfc3pfTUFTSwkJCQkweDAwMDBmZmZmCisjZGVmaW5lIGlmX3BhZ2Vfc3pfV09SRAkJCQl3b3JkNQorI2RlZmluZSBsb29wYmtfc2NvcGVfU0hJRlQJCQkyNAorI2RlZmluZSBsb29wYmtfc2NvcGVfTUFTSwkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgbG9vcGJrX3Njb3BlX1dPUkQJCQl3b3JkNQorI2RlZmluZSBycV9kYl93aW5kb3dfU0hJRlQJCQkyOAorI2RlZmluZSBycV9kYl93aW5kb3dfTUFTSwkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgcnFfZGJfd2luZG93X1dPUkQJCQl3b3JkNQorCXVpbnQzMl90IHdvcmQ2OworI2RlZmluZSBlcV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIGVxX3BhZ2VzX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBlcV9wYWdlc19XT1JECQkJCXdvcmQ2CisjZGVmaW5lIGVxZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgZXFlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIGVxZV9zaXplX1dPUkQJCQkJd29yZDYKKwl1aW50MzJfdCB3b3JkNzsKKyNkZWZpbmUgY3FfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBjcV9wYWdlc19NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgY3FfcGFnZXNfV09SRAkJCQl3b3JkNworI2RlZmluZSBjcWVfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIGNxZV9zaXplX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBjcWVfc2l6ZV9XT1JECQkJCXdvcmQ3CisJdWludDMyX3Qgd29yZDg7CisjZGVmaW5lIG1xX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgbXFfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIG1xX3BhZ2VzX1dPUkQJCQkJd29yZDgKKyNkZWZpbmUgbXFlX3NpemVfU0hJRlQJCQkJOAorI2RlZmluZSBtcWVfc2l6ZV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgbXFlX3NpemVfV09SRAkJCQl3b3JkOAorI2RlZmluZSBtcV9lbGVtX2NudF9TSElGVAkJCTE2CisjZGVmaW5lIG1xX2VsZW1fY250X01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIG1xX2VsZW1fY250X1dPUkQJCQl3b3JkOAorCXVpbnQzMl90IHdvcmQ5OworI2RlZmluZSB3cV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIHdxX3BhZ2VzX01BU0sJCQkJMHgwMDAwZmZmZgorI2RlZmluZSB3cV9wYWdlc19XT1JECQkJCXdvcmQ5CisjZGVmaW5lIHdxZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgd3FlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHdxZV9zaXplX1dPUkQJCQkJd29yZDkKKwl1aW50MzJfdCB3b3JkMTA7CisjZGVmaW5lIHJxX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgcnFfcGFnZXNfTUFTSwkJCQkweDAwMDBmZmZmCisjZGVmaW5lIHJxX3BhZ2VzX1dPUkQJCQkJd29yZDEwCisjZGVmaW5lIHJxZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgcnFlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHJxZV9zaXplX1dPUkQJCQkJd29yZDEwCisJdWludDMyX3Qgd29yZDExOworI2RlZmluZSBoZHJfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBoZHJfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIGhkcl9wYWdlc19XT1JECQkJCXdvcmQxMQorI2RlZmluZSBoZHJfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIGhkcl9zaXplX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBoZHJfc2l6ZV9XT1JECQkJCXdvcmQxMQorI2RlZmluZSBoZHJfcHBfYWxpZ25fU0hJRlQJCQkxNgorI2RlZmluZSBoZHJfcHBfYWxpZ25fTUFTSwkJCTB4MDAwMGZmZmYKKyNkZWZpbmUgaGRyX3BwX2FsaWduX1dPUkQJCQl3b3JkMTEKKwl1aW50MzJfdCB3b3JkMTI7CisjZGVmaW5lIHNnbF9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIHNnbF9wYWdlc19NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgc2dsX3BhZ2VzX1dPUkQJCQkJd29yZDEyCisjZGVmaW5lIHNnbF9wcF9hbGlnbl9TSElGVAkJCTE2CisjZGVmaW5lIHNnbF9wcF9hbGlnbl9NQVNLCQkJMHgwMDAwZmZmZgorI2RlZmluZSBzZ2xfcHBfYWxpZ25fV09SRAkJCXdvcmQxMgorCXVpbnQzMl90IHJzdmRfMTNfNjNbNTFdOworfTsKKwogLyogTWFpbGJveCBDb21wbGV0aW9uIFF1ZXVlIEVycm9yIE1lc3NhZ2VzICovCiAjZGVmaW5lIE1CX0NRRV9TVEFUVVNfU1VDQ0VTUyAJCQkweDAKICNkZWZpbmUgTUJfQ1FFX1NUQVRVU19JTlNVRkZJQ0lFTlRfUFJJVklMRUdFUwkweDEKQEAgLTE4NjMsNiArMjAzNyw3IEBACiAJCXN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgcmVhZF9mY2ZfdGJsOwogCQlzdHJ1Y3QgbHBmY19tYnhfYWRkX2ZjZl90YmxfZW50cnkgYWRkX2ZjZl9lbnRyeTsKIAkJc3RydWN0IGxwZmNfbWJ4X2RlbF9mY2ZfdGJsX2VudHJ5IGRlbF9mY2ZfZW50cnk7CisJCXN0cnVjdCBscGZjX21ieF9yZWRpc2NfZmNmX3RibCByZWRpc2NfZmNmX3RibDsKIAkJc3RydWN0IGxwZmNfbWJ4X3JlZ19mY2ZpIHJlZ19mY2ZpOwogCQlzdHJ1Y3QgbHBmY19tYnhfdW5yZWdfZmNmaSB1bnJlZ19mY2ZpOwogCQlzdHJ1Y3QgbHBmY19tYnhfbXFfY3JlYXRlIG1xX2NyZWF0ZTsKQEAgLTE4ODMsNiArMjA1OCw4IEBACiAJCXN0cnVjdCBscGZjX21ieF9yZXF1ZXN0X2ZlYXR1cmVzIHJlcV9mdHJzOwogCQlzdHJ1Y3QgbHBmY19tYnhfcG9zdF9oZHJfdG1wbCBoZHJfdG1wbDsKIAkJc3RydWN0IGxwZmNfbWJ4X3F1ZXJ5X2Z3X2NmZyBxdWVyeV9md19jZmc7CisJCXN0cnVjdCBscGZjX21ieF9zdXBwX3BhZ2VzIHN1cHBfcGFnZXM7CisJCXN0cnVjdCBscGZjX21ieF9zbGk0X3BhcmFtcyBzbGk0X3BhcmFtczsKIAkJc3RydWN0IGxwZmNfbWJ4X25vcCBub3A7CiAJfSB1bjsKIH07CkBAIC0xOTU5LDYgKzIxMzYsOSBAQAogI2RlZmluZSBMUEZDX0FTWU5DX0xJTktfRkFVTFRfTk9ORQkweDAKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX0ZBVUxUX0xPQ0FMCTB4MQogI2RlZmluZSBMUEZDX0FTWU5DX0xJTktfRkFVTFRfUkVNT1RFCTB4MgorI2RlZmluZSBscGZjX2FjcWVfcW9zX2xpbmtfc3BlZWRfU0hJRlQJMTYKKyNkZWZpbmUgbHBmY19hY3FlX3Fvc19saW5rX3NwZWVkX01BU0sJMHgwMDAwRkZGRgorI2RlZmluZSBscGZjX2FjcWVfcW9zX2xpbmtfc3BlZWRfV09SRAl3b3JkMQogCXVpbnQzMl90IGV2ZW50X3RhZzsKIAl1aW50MzJfdCB0cmFpbGVyOwogfTsKQEAgLTE5NzYsNiArMjE1Niw3IEBACiAjZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9UQUJMRV9GVUxMCTB4MgogI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfREVBRAkJMHgzCiAjZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX0NWTAkJMHg0CisjZGVmaW5lIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9QQVJBTV9NT0QJMHg1CiAJdWludDMyX3QgZXZlbnRfdGFnOwogCXVpbnQzMl90IHRyYWlsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCBiOGViMWI2Li5kMjlhYzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKHBoYmEtPmNmZ19zdXBwcmVzc19saW5rX3VwID09IDApIHsKIAkJbHBmY19pbml0X2xpbmsocGhiYSwgcG1iLCBwaGJhLT5jZmdfdG9wb2xvZ3ksCiAJCQlwaGJhLT5jZmdfbGlua19zcGVlZCk7CiAJCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKQEAgLTYwMyw2ICs2MDMsMTAyIEBACiB9CiAKIC8qKgorICogbHBmY19oYmFfaW5pdF9saW5rIC0gSW5pdGlhbGl6ZSB0aGUgRkMgbGluaworICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgaXNzdWUgdGhlIElOSVRfTElOSyBtYWlsYm94IGNvbW1hbmQgY2FsbC4KKyAqIEl0IGlzIGF2YWlsYWJsZSB0byBvdGhlciBkcml2ZXJzIHRocm91Z2ggdGhlIGxwZmNfaGJhIGRhdGEKKyAqIHN0cnVjdHVyZSBmb3IgdXNlIGFzIGEgZGVsYXllZCBsaW5rIHVwIG1lY2hhbmlzbSB3aXRoIHRoZQorICogbW9kdWxlIHBhcmFtZXRlciBscGZjX3N1cHByZXNzX2xpbmtfdXAuCisgKgorICogUmV0dXJuIGNvZGUKKyAqCQkwIC0gc3VjY2VzcworICoJCUFueSBvdGhlciB2YWx1ZSAtIGVycm9yCisgKiovCitpbnQKK2xwZmNfaGJhX2luaXRfbGluayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJTFBGQ19NQk9YUV90ICpwbWI7CisJTUFJTEJPWF90ICptYjsKKwlpbnQgcmM7CisKKwlwbWIgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghcG1iKSB7CisJCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1iID0gJnBtYi0+dS5tYjsKKwlwbWItPnZwb3J0ID0gdnBvcnQ7CisKKwlscGZjX2luaXRfbGluayhwaGJhLCBwbWIsIHBoYmEtPmNmZ190b3BvbG9neSwKKwkJcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOworCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwlscGZjX3NldF9sb29wYmFja19mbGFnKHBoYmEpOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOworCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJIjA0OTggQWRhcHRlciBmYWlsZWQgdG8gaW5pdCwgbWJ4Q21kIHgleCAiCisJCQkiSU5JVF9MSU5LLCBtYnhTdGF0dXMgeCV4XG4iLAorCQkJbWItPm1ieENvbW1hbmQsIG1iLT5tYnhTdGF0dXMpOworCQkvKiBDbGVhciBhbGwgaW50ZXJydXB0IGVuYWJsZSBjb25kaXRpb25zICovCisJCXdyaXRlbCgwLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLworCQkvKiBDbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCXdyaXRlbCgweGZmZmZmZmZmLCBwaGJhLT5IQXJlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJCWlmIChyYyAhPSBNQlhfQlVTWSkKKwkJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcGhiYS0+Y2ZnX3N1cHByZXNzX2xpbmtfdXAgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY19oYmFfZG93bl9saW5rIC0gdGhpcyByb3V0aW5lIGRvd25zIHRoZSBGQyBsaW5rCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgaXNzdWUgdGhlIERPV05fTElOSyBtYWlsYm94IGNvbW1hbmQgY2FsbC4KKyAqIEl0IGlzIGF2YWlsYWJsZSB0byBvdGhlciBkcml2ZXJzIHRocm91Z2ggdGhlIGxwZmNfaGJhIGRhdGEKKyAqIHN0cnVjdHVyZSBmb3IgdXNlIHRvIHN0b3AgdGhlIGxpbmsuCisgKgorICogUmV0dXJuIGNvZGUKKyAqCQkwIC0gc3VjY2VzcworICoJCUFueSBvdGhlciB2YWx1ZSAtIGVycm9yCisgKiovCitpbnQKK2xwZmNfaGJhX2Rvd25fbGluayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJTFBGQ19NQk9YUV90ICpwbWI7CisJaW50IHJjOworCisJcG1iID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYikgeworCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAorCQlLRVJOX0VSUiwgTE9HX0lOSVQsCisJCSIwNDkxIEFkYXB0ZXIgTGluayBpcyBkaXNhYmxlZC5cbiIpOworCWxwZmNfZG93bl9saW5rKHBoYmEsIHBtYik7CisJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOworCWlmICgocmMgIT0gTUJYX1NVQ0NFU1MpICYmIChyYyAhPSBNQlhfQlVTWSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsCisJCUtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJIjI1MjIgQWRhcHRlciBmYWlsZWQgdG8gaXNzdWUgRE9XTl9MSU5LIgorCQkiIG1ib3ggY29tbWFuZCByYyAweCV4XG4iLCByYyk7CisKKwkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBscGZjX2hiYV9kb3duX3ByZXAgLSBQZXJmb3JtIGxwZmMgdW5pbml0aWFsaXphdGlvbiBwcmlvciB0byBIQkEgcmVzZXQKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgSEJBIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTIwNzMsNiArMjE2OSw0NCBAQAogfQogCiAvKioKKyAqIF9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyIC0gU3RvcCBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lcgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIHRoZSBTTEk0IEZDRiByZWRpc2NvdmVyIHdhaXQgdGltZXIgaWYgaXQncyBvbi4gVGhlCisgKiBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHNob3VsZCBhbHJlYWR5IGhvbGQgdGhlIGhvc3QgbG9jay4KKyAqKi8KK3ZvaWQKK19fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwkvKiBDbGVhciBwZW5kaW5nIEZDRiByZWRpc2NvdmVyeSB3YWl0IHRpbWVyICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX1BFTkQ7CisJLyogTm93LCB0cnkgdG8gc3RvcCB0aGUgdGltZXIgKi8KKwlkZWxfdGltZXIoJnBoYmEtPmZjZi5yZWRpc2Nfd2FpdCk7Cit9CisKKy8qKgorICogbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyIC0gU3RvcCBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lcgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIHRoZSBTTEk0IEZDRiByZWRpc2NvdmVyIHdhaXQgdGltZXIgaWYgaXQncyBvbi4gSXQKKyAqIGNoZWNrcyB3aGV0aGVyIHRoZSBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lciBpcyBwZW5kaW5nIHdpdGggdGhlIGhvc3QKKyAqIGxvY2sgaGVsZCBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGRpc2FibGluZyB0aGUgdGltZXIgYW5kIGNsZWFyaW5nIHRoZQorICogd2FpdCB0aW1lciBwZW5kaWcgZmxhZy4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJaWYgKCEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19QRU5EKSkgeworCQkvKiBGQ0YgcmVkaXNjb3ZlcnkgdGltZXIgYWxyZWFkeSBmaXJlZCBvciBzdG9wcGVkICovCisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXJldHVybjsKKwl9CisJX19scGZjX3NsaTRfc3RvcF9mY2ZfcmVkaXNjX3dhaXRfdGltZXIocGhiYSk7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKworLyoqCiAgKiBscGZjX3N0b3BfaGJhX3RpbWVycyAtIFN0b3AgYWxsIHRoZSB0aW1lcnMgYXNzb2NpYXRlZCB3aXRoIGFuIEhCQQogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMjA5Niw2ICsyMjMwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBMUEZDX1BDSV9ERVZfT0M6CiAJCS8qIFN0b3AgYW55IE9uZUNvbm5lY3QgZGV2aWNlIHNlcGNpZmljIGRyaXZlciB0aW1lcnMgKi8KKwkJbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHBoYmEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULApAQCAtMjIyOCw2ICsyMzYzLDcgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBwaGJhLT5wcG9ydDsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAgKm5kbHAsICpuZXh0X25kbHA7CiAJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJaW50IGk7CiAKIAlpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19PRkZMSU5FX01PREUpCkBAIC0yMjQxLDExICsyMzc3LDE1IEBACiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAlpZiAodnBvcnRzICE9IE5VTEwpIHsKIAkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKLQkJCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwotCiAJCQlpZiAodnBvcnRzW2ldLT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpCiAJCQkJY29udGludWU7CisJCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCXZwb3J0c1tpXS0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOworCQkJdnBvcnRzW2ldLT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJCQl2cG9ydHNbaV0tPmZjX2ZsYWcgJj0gfkZDX1ZGSV9SRUdJU1RFUkVEOworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCiAJCQlzaG9zdCA9CWxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwKIAkJCQkJCSAmdnBvcnRzW2ldLT5mY19ub2RlcywKQEAgLTI0MDEsNyArMjU0MSw4IEBACiAJc2hvc3QtPnRoaXNfaWQgPSAtMTsKIAlzaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKIAlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7Ci0JCXNob3N0LT5kbWFfYm91bmRhcnkgPSBMUEZDX1NMSTRfTUFYX1NFR01FTlRfU0laRTsKKwkJc2hvc3QtPmRtYV9ib3VuZGFyeSA9CisJCQlwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtcy5zZ2Vfc3VwcF9sZW47CiAJCXNob3N0LT5zZ190YWJsZXNpemUgPSBwaGJhLT5jZmdfc2dfc2VnX2NudDsKIAl9CiAKQEAgLTI2NTAsOCArMjc5MSw2IEBACiAJbHBmY19zdG9wX2hiYV90aW1lcnMocGhiYSk7CiAJcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgPSAwOwogCXBoYmEtPnNsaTRfaGJhLmludHJfZW5hYmxlID0gMDsKLQkvKiBIYXJkIGNsZWFyIGl0IGZvciBub3csIHNoYWxsIGhhdmUgbW9yZSBncmFjZWZ1bCB3YXkgdG8gd2FpdCBsYXRlciAqLwotCXBoYmEtPnNsaS5zbGlfZmxhZyAmPSB+TFBGQ19TTElfTUJPWF9BQ1RJVkU7CiB9CiAKIC8qKgpAQCAtMjcwMyw3ICsyODQyLDcgQEAKIAlkZWxfZmNmX3JlY29yZCA9ICZtYm94cS0+dS5tcWUudW4uZGVsX2ZjZl9lbnRyeTsKIAliZl9zZXQobHBmY19tYnhfZGVsX2ZjZl90YmxfY291bnQsIGRlbF9mY2ZfcmVjb3JkLCAxKTsKIAliZl9zZXQobHBmY19tYnhfZGVsX2ZjZl90YmxfaW5kZXgsIGRlbF9mY2ZfcmVjb3JkLAotCSAgICAgICBwaGJhLT5mY2YuZmNmX2luZHgpOworCSAgICAgICBwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHgpOwogCiAJaWYgKCFwaGJhLT5zbGk0X2hiYS5pbnRyX2VuYWJsZSkKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfUE9MTCk7CkBAIC0yNzI3LDYgKzI4NjYsNTcgQEAKIH0KIAogLyoqCisgKiBscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lciAtIFN0YXJ0IGZjZiByZWRpc2NvdmVyIHdhaXQgdGltZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgorICoKKyAqIFRoaXMgcm91dGluZSBzdGFydHMgdGhlIHRpbWVyIHdhaXRpbmcgZm9yIHRoZSBGQ0YgcmVkaXNjb3ZlcnkgdG8gY29tcGxldGUuCisgKiovCit2b2lkCitscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgbG9uZyBmY2ZfcmVkaXNjX3dhaXRfdG1vID0KKwkJKGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKExQRkNfRkNGX1JFRElTQ09WRVJfV0FJVF9UTU8pKTsKKwkvKiBTdGFydCBmY2YgcmVkaXNjb3Zlcnkgd2FpdCBwZXJpb2QgdGltZXIgKi8KKwltb2RfdGltZXIoJnBoYmEtPmZjZi5yZWRpc2Nfd2FpdCwgZmNmX3JlZGlzY193YWl0X3Rtbyk7CisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogQWxsb3cgYWN0aW9uIHRvIG5ldyBmY2YgYXN5bmNocm9ub3VzIGV2ZW50ICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH4oRkNGX0FWQUlMQUJMRSB8IEZDRl9TQ0FOX0RPTkUpOworCS8qIE1hcmsgdGhlIEZDRiByZWRpc2NvdmVyeSBwZW5kaW5nIHN0YXRlICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9SRURJU0NfUEVORDsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworfQorCisvKioKKyAqIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX3dhaXRfdG1vIC0gRkNGIHRhYmxlIHJlZGlzY292ZXIgd2FpdCB0aW1lb3V0CisgKiBAcHRyOiBNYXAgdG8gbHBmY19oYmEgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB3aGVuIHdhaXRpbmcgZm9yIEZDRiB0YWJsZSByZWRpc2NvdmVyIGhhcyBiZWVuCisgKiB0aW1lZCBvdXQuIElmIG5ldyBGQ0YgcmVjb3JkKHMpIGhhcyAoaGF2ZSkgYmVlbiBkaXNjb3ZlcmVkIGR1cmluZyB0aGUKKyAqIHdhaXQgcGVyaW9kLCBhIG5ldyBGQ0YgZXZlbnQgc2hhbGwgYmUgYWRkZWQgdG8gdGhlIEZDT0UgYXN5bmMgZXZlbnQKKyAqIGxpc3QsIGFuZCB0aGVuIHdvcmtlciB0aHJlYWQgc2hhbGwgYmUgd2FrZWQgdXAgZm9yIHByb2Nlc3NpbmcgZnJvbSB0aGUKKyAqIHdvcmtlciB0aHJlYWQgY29udGV4dC4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9mY2ZfcmVkaXNjX3dhaXRfdG1vKHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilwdHI7CisKKwkvKiBEb24ndCBzZW5kIEZDRiByZWRpc2NvdmVyeSBldmVudCBpZiB0aW1lciBjYW5jZWxsZWQgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlpZiAoIShwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXJldHVybjsKKwl9CisJLyogQ2xlYXIgRkNGIHJlZGlzY292ZXJ5IHRpbWVyIHBlbmRpbmcgZmxhZyAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19QRU5EOworCS8qIEZDRiByZWRpc2NvdmVyeSBldmVudCB0byB3b3JrZXIgdGhyZWFkICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9SRURJU0NfRVZUOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogd2FrZSB1cCB3b3JrZXIgdGhyZWFkICovCisJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKK30KKworLyoqCiAgKiBscGZjX3NsaTRfZndfY2ZnX2NoZWNrIC0gUmVhZCB0aGUgZmlybXdhcmUgY29uZmlnIGFuZCB2ZXJpZnkgRkNvRSBzdXBwb3J0CiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqCkBAIC0yOTc4LDYgKzMxNjgsOCBAQAogCQkJCWJmX2dldChscGZjX2FjcWVfbGlua19waHlzaWNhbCwgYWNxZV9saW5rKTsKIAlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmZhdWx0ID0KIAkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfZmF1bHQsIGFjcWVfbGluayk7CisJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5sb2dpY2FsX3NwZWVkID0KKwkJCQliZl9nZXQobHBmY19hY3FlX3Fvc19saW5rX3NwZWVkLCBhY3FlX2xpbmspOwogCiAJLyogSW52b2tlIHRoZSBscGZjX2hhbmRsZV9sYXR0IG1haWxib3ggY29tbWFuZCBjYWxsYmFjayBmdW5jdGlvbiAqLwogCWxwZmNfbWJ4X2NtcGxfcmVhZF9sYShwaGJhLCBwbWIpOwpAQCAtMzAwNywyMiArMzE5OSwzNCBAQAogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKIAl1aW50MzJfdCBsaW5rX3N0YXRlOworCWludCBhY3RpdmVfdmxpbmtfcHJlc2VudDsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlpbnQgaTsKIAogCXBoYmEtPmZjX2V2ZW50VGFnID0gYWNxZV9mY29lLT5ldmVudF90YWc7CiAJcGhiYS0+ZmNvZV9ldmVudHRhZyA9IGFjcWVfZmNvZS0+ZXZlbnRfdGFnOwogCXN3aXRjaCAoZXZlbnRfdHlwZSkgewogCWNhc2UgTFBGQ19GQ09FX0VWRU5UX1RZUEVfTkVXX0ZDRjoKKwljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9QQVJBTV9NT0Q6CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKIAkJCSIyNTQ2IE5ldyBGQ0YgZm91bmQgaW5kZXggMHgleCB0YWcgMHgleFxuIiwKIAkJCWFjcWVfZmNvZS0+aW5kZXgsCiAJCQlhY3FlX2Zjb2UtPmV2ZW50X3RhZyk7Ci0JCS8qCi0JCSAqIElmIHRoZSBjdXJyZW50IEZDRiBpcyBpbiBkaXNjb3ZlcmVkIHN0YXRlLCBvcgotCQkgKiBGQ0YgZGlzY292ZXJ5IGlzIGluIHByb2dyZXNzIGRvIG5vdGhpbmcuCi0JCSAqLwogCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJaWYgKChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfRElTQ09WRVJFRCkgfHwKLQkJICAgKHBoYmEtPmhiYV9mbGFnICYgRkNGX0RJU0NfSU5QUk9HUkVTUykpIHsKKwkJaWYgKChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfU0NBTl9ET05FKSB8fAorCQkgICAgKHBoYmEtPmhiYV9mbGFnICYgRkNGX0RJU0NfSU5QUk9HUkVTUykpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgaXMgaW4gZGlzY292ZXJlZCBzdGF0ZSBvcgorCQkJICogRkNGIGRpc2NvdmVyeSBpcyBpbiBwcm9ncmVzcywgZG8gbm90aGluZy4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0VWVCkgeworCQkJLyoKKwkJCSAqIElmIGZhc3QgRkNGIGZhaWxvdmVyIHJlc2NhbiBldmVudCBpcyBwZW5kaW5nLAorCQkJICogZG8gbm90aGluZy4KKwkJCSAqLwogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMDQ5LDcgKzMyNTMsNyBAQAogCQkJIiB0YWcgMHgleFxuIiwgYWNxZV9mY29lLT5pbmRleCwKIAkJCWFjcWVfZmNvZS0+ZXZlbnRfdGFnKTsKIAkJLyogSWYgdGhlIGV2ZW50IGlzIG5vdCBmb3IgY3VycmVudGx5IHVzZWQgZmNmIGRvIG5vdGhpbmcgKi8KLQkJaWYgKHBoYmEtPmZjZi5mY2ZfaW5keCAhPSBhY3FlX2Zjb2UtPmluZGV4KQorCQlpZiAocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4ICE9IGFjcWVfZmNvZS0+aW5kZXgpCiAJCQlicmVhazsKIAkJLyoKIAkJICogQ3VycmVudGx5LCBkcml2ZXIgc3VwcG9ydCBvbmx5IG9uZSBGQ0YgLSBzbyB0cmVhdCB0aGlzIGFzCkBAIC0zMDc0LDE0ICszMjc4LDU4IEBACiAJCWlmICghbmRscCkKIAkJCWJyZWFrOwogCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisJCWlmIChwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZMT0dJKQorCQkJYnJlYWs7CisJCS8qIElmIHZpcnR1YWwgbGluayBpcyBub3QgeWV0IGluc3RhbnRpYXRlZCBpZ25vcmUgQ1ZMICovCisJCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZESVNDKQorCQkJYnJlYWs7CisKIAkJbHBmY19saW5rZG93bl9wb3J0KHZwb3J0KTsKLQkJaWYgKHZwb3J0LT5wb3J0X3R5cGUgIT0gTFBGQ19OUElWX1BPUlQpIHsKKwkJbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveCh2cG9ydCk7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX0NWTF9SQ1ZEOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCWFjdGl2ZV92bGlua19wcmVzZW50ID0gMDsKKworCQl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCQlpZiAodnBvcnRzKSB7CisJCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7CisJCQkJCWkrKykgeworCQkJCWlmICgoISh2cG9ydHNbaV0tPmZjX2ZsYWcgJgorCQkJCQlGQ19WUE9SVF9DVkxfUkNWRCkpICYmCisJCQkJCSh2cG9ydHNbaV0tPnBvcnRfc3RhdGUgPiBMUEZDX0ZESVNDKSkgeworCQkJCQlhY3RpdmVfdmxpbmtfcHJlc2VudCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJCX0KKworCQlpZiAoYWN0aXZlX3ZsaW5rX3ByZXNlbnQpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBhcmUgb3RoZXIgYWN0aXZlIFZMaW5rcyBwcmVzZW50LAorCQkJICogcmUtaW5zdGFudGlhdGUgdGhlIFZsaW5rIHVzaW5nIEZESVNDLgorCQkJICovCiAJCQltb2RfdGltZXIoJm5kbHAtPm5scF9kZWxheWZ1bmMsIGppZmZpZXMgKyBIWik7CiAJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCW5kbHAtPm5scF9sYXN0X2Vsc2NtZCA9IEVMU19DTURfRkxPR0k7Ci0JCQl2cG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfRkxPR0k7CisJCQluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX0ZESVNDOworCQkJdnBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX0ZESVNDOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSwgd2UgcmVxdWVzdCBwb3J0IHRvIHJlZGlzY292ZXIKKwkJCSAqIHRoZSBlbnRpcmUgRkNGIHRhYmxlIGZvciBhIGZhc3QgcmVjb3ZlcnkKKwkJCSAqIGZyb20gcG9zc2libGUgY2FzZSB0aGF0IHRoZSBjdXJyZW50IEZDRgorCQkJICogaXMgbm8gbG9uZ2VyIHZhbGlkLgorCQkJICovCisJCQlyYyA9IGxwZmNfc2xpNF9yZWRpc2NfZmNmX3RhYmxlKHBoYmEpOworCQkJaWYgKHJjKQorCQkJCS8qCisJCQkJICogTGFzdCByZXNvcnQgd2lsbCBiZSByZS10cnkgb24gdGhlCisJCQkJICogdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCBGQ0YgZW50cnkuCisJCQkJICovCisJCQkJbHBmY19yZXRyeV9wcG9ydF9kaXNjb3ZlcnkocGhiYSk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMxNTgsNiArMzQwNiwzNCBAQAogfQogCiAvKioKKyAqIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX2V2ZW50X3Byb2MgLSBQcm9jZXNzIGZjZiB0YWJsZSByZWRpc2NvdmVyeSBldmVudAorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQgdG8gcHJvY2VzcyBGQ0YgdGFibGUKKyAqIHJlZGlzY292ZXJ5IHBlbmRpbmcgY29tcGxldGlvbiBldmVudC4KKyAqKi8KK3ZvaWQgbHBmY19zbGk0X2ZjZl9yZWRpc2NfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJLyogQ2xlYXIgRkNGIHJlZGlzY292ZXJ5IHRpbWVvdXQgZXZlbnQgKi8KKwlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfRVZUOworCS8qIENsZWFyIGRyaXZlciBmYXN0IGZhaWxvdmVyIEZDRiByZWNvcmQgZmxhZyAqLworCXBoYmEtPmZjZi5mYWlsb3Zlcl9yZWMuZmxhZyA9IDA7CisJLyogU2V0IHN0YXRlIGZvciBGQ0YgZmFzdCBmYWlsb3ZlciAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfUkVESVNDX0ZPVjsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCisJLyogU2NhbiBGQ0YgdGFibGUgZnJvbSB0aGUgZmlyc3QgZW50cnkgdG8gcmUtZGlzY292ZXIgU0FOICovCisJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKwlpZiAocmMpCisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKKwkJCQkiMjc0NyBQb3N0IEZDRiByZWRpc2NvdmVyeSByZWFkIEZDRiByZWNvcmQgIgorCQkJCSJmYWlsZWQgMHgleFxuIiwgcmMpOworfQorCisvKioKICAqIGxwZmNfYXBpX3RhYmxlX3NldHVwIC0gU2V0IHVwIHBlciBoYmEgcGNpLWRldmljZSBncm91cCBmdW5jIGFwaSBqdW1wIHRhYmxlCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBkZXZfZ3JwOiBUaGUgSEJBIFBDSS1EZXZpY2UgZ3JvdXAgbnVtYmVyLgpAQCAtMzQ0Miw4ICszNzE4LDEwIEBACiBscGZjX3NsaTRfZHJpdmVyX3Jlc291cmNlX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7Ci0JaW50IHJjOwotCWludCBpLCBoYnFfY291bnQ7CisJTFBGQ19NQk9YUV90ICptYm94cTsKKwlpbnQgcmMsIGksIGhicV9jb3VudCwgYnVmX3NpemUsIGRtYV9idWZfc2l6ZSwgbWF4X2J1Zl9zaXplOworCXVpbnQ4X3QgcG5fcGFnZVtMUEZDX01BWF9TVVBQT1JURURfUEFHRVNdID0gezB9OworCXN0cnVjdCBscGZjX21xZSAqbXFlOwogCiAJLyogQmVmb3JlIHByb2NlZWQsIHdhaXQgZm9yIFBPU1QgZG9uZSBhbmQgZGV2aWNlIHJlYWR5ICovCiAJcmMgPSBscGZjX3NsaTRfcG9zdF9zdGF0dXNfY2hlY2socGhiYSk7CkBAIC0zNDcyLDYgKzM3NTAsMTEgQEAKIAlpbml0X3RpbWVyKCZwaGJhLT5lcmF0dF9wb2xsKTsKIAlwaGJhLT5lcmF0dF9wb2xsLmZ1bmN0aW9uID0gbHBmY19wb2xsX2VyYXR0OwogCXBoYmEtPmVyYXR0X3BvbGwuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwaGJhOworCS8qIEZDRiByZWRpc2NvdmVyIHRpbWVyICovCisJaW5pdF90aW1lcigmcGhiYS0+ZmNmLnJlZGlzY193YWl0KTsKKwlwaGJhLT5mY2YucmVkaXNjX3dhaXQuZnVuY3Rpb24gPSBscGZjX3NsaTRfZmNmX3JlZGlzY193YWl0X3RtbzsKKwlwaGJhLT5mY2YucmVkaXNjX3dhaXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBoYmE7CisKIAkvKgogCSAqIFdlIG5lZWQgdG8gZG8gYSBSRUFEX0NPTkZJRyBtYWlsYm94IGNvbW1hbmQgaGVyZSBiZWZvcmUKIAkgKiBjYWxsaW5nIGxwZmNfZ2V0X2NmZ3BhcmFtLiBGb3IgVkZzIHRoaXMgd2lsbCByZXBvcnQgdGhlCkBAIC0zNDk2LDMxICszNzc5LDI2IEBACiAJICogdXNlZCB0byBjcmVhdGUgdGhlIHNnX2RtYV9idWZfcG9vbCBtdXN0IGJlIGR5bmFtaWNhbGx5IGNhbGN1bGF0ZWQuCiAJICogMiBzZWdtZW50cyBhcmUgYWRkZWQgc2luY2UgdGhlIElPQ0IgbmVlZHMgYSBjb21tYW5kIGFuZCByZXNwb25zZSBiZGUuCiAJICogVG8gaW5zdXJlIHRoYXQgdGhlIHNjc2kgc2dsIGRvZXMgbm90IGNyb3NzIGEgNGsgcGFnZSBib3VuZGFyeSBvbmx5Ci0JICogc2dsIHNpemVzIG9mIDFrLCAyaywgNGssIGFuZCA4ayBhcmUgc3VwcG9ydGVkLgotCSAqIFRhYmxlIG9mIHNnbCBzaXplcyBhbmQgc2VnX2NudDoKLQkgKiBzZ2wgc2l6ZSwgCXNnX3NlZ19jbnQJdG90YWwgc2VnCi0JICogMWsJCTUwCQk1MgotCSAqIDJrCQkxMTQJCTExNgotCSAqIDRrCQkyNDIJCTI0NAotCSAqIDhrCQk0OTgJCTUwMAotCSAqIGNtZCgzMikgKyByc3AoMTYwKSArICg1MiAqIHNpemVvZihzbGk0X3NnZSkpID0gMTAyNAotCSAqIGNtZCgzMikgKyByc3AoMTYwKSArICgxMTYgKiBzaXplb2Yoc2xpNF9zZ2UpKSA9IDIwNDgKLQkgKiBjbWQoMzIpICsgcnNwKDE2MCkgKyAoMjQ0ICogc2l6ZW9mKHNsaTRfc2dlKSkgPSA0MDk2Ci0JICogY21kKDMyKSArIHJzcCgxNjApICsgKDUwMCAqIHNpemVvZihzbGk0X3NnZSkpID0gODE5MgorCSAqIHNnbCBzaXplcyBvZiBtdXN0IGJlIGEgcG93ZXIgb2YgMi4KIAkgKi8KLQlpZiAocGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPD0gTFBGQ19ERUZBVUxUX1NHX1NFR19DTlQpCi0JCXBoYmEtPmNmZ19zZ19zZWdfY250ID0gNTA7Ci0JZWxzZSBpZiAocGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPD0gMTE0KQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDExNDsKLQllbHNlIGlmIChwaGJhLT5jZmdfc2dfc2VnX2NudCA8PSAyNDIpCi0JCXBoYmEtPmNmZ19zZ19zZWdfY250ID0gMjQyOworCWJ1Zl9zaXplID0gKHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpICsgc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSArCisJCSAgICAoKHBoYmEtPmNmZ19zZ19zZWdfY250ICsgMikgKiBzaXplb2Yoc3RydWN0IHNsaTRfc2dlKSkpOworCS8qIEZlYXR1cmUgTGV2ZWwgMSBoYXJkd2FyZSBpcyBsaW1pdGVkIHRvIDIgcGFnZXMgKi8KKwlpZiAoKGJmX2dldChscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDEsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0KKwkgICAgIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8xKSkKKwkJbWF4X2J1Zl9zaXplID0gTFBGQ19TTEk0X0ZMMV9NQVhfQlVGX1NJWkU7CiAJZWxzZQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDQ5ODsKLQotCXBoYmEtPmNmZ19zZ19kbWFfYnVmX3NpemUgPSBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKQotCQkJCQkrIHNpemVvZihzdHJ1Y3QgZmNwX3JzcCk7Ci0JcGhiYS0+Y2ZnX3NnX2RtYV9idWZfc2l6ZSArPQotCQkoKHBoYmEtPmNmZ19zZ19zZWdfY250ICsgMikgKiBzaXplb2Yoc3RydWN0IHNsaTRfc2dlKSk7CisJCW1heF9idWZfc2l6ZSA9IExQRkNfU0xJNF9NQVhfQlVGX1NJWkU7CisJZm9yIChkbWFfYnVmX3NpemUgPSBMUEZDX1NMSTRfTUlOX0JVRl9TSVpFOworCSAgICAgZG1hX2J1Zl9zaXplIDwgbWF4X2J1Zl9zaXplICYmIGJ1Zl9zaXplID4gZG1hX2J1Zl9zaXplOworCSAgICAgZG1hX2J1Zl9zaXplID0gZG1hX2J1Zl9zaXplIDw8IDEpCisJCTsKKwlpZiAoZG1hX2J1Zl9zaXplID09IG1heF9idWZfc2l6ZSkKKwkJcGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPSAoZG1hX2J1Zl9zaXplIC0KKwkJCXNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpIC0gc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSAtCisJCQkoMiAqIHNpemVvZihzdHJ1Y3Qgc2xpNF9zZ2UpKSkgLworCQkJCXNpemVvZihzdHJ1Y3Qgc2xpNF9zZ2UpOworCXBoYmEtPmNmZ19zZ19kbWFfYnVmX3NpemUgPSBkbWFfYnVmX3NpemU7CiAKIAkvKiBJbml0aWFsaXplIGJ1ZmZlciBxdWV1ZSBtYW5hZ2VtZW50IGZpZWxkcyAqLwogCWhicV9jb3VudCA9IGxwZmNfc2xpX2hicV9jb3VudCgpOwpAQCAtMzYzOCw2ICszOTE2LDQzIEBACiAJCWdvdG8gb3V0X2ZyZWVfZmNwX2VxX2hkbDsKIAl9CiAKKwltYm94cSA9IChMUEZDX01CT1hRX3QgKikgbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghbWJveHEpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2ZjcF9lcV9oZGw7CisJfQorCisJLyogR2V0IHRoZSBTdXBwb3J0ZWQgUGFnZXMuIEl0IGlzIGFsd2F5cyBhdmFpbGFibGUuICovCisJbHBmY19zdXBwb3J0ZWRfcGFnZXMobWJveHEpOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOworCWlmICh1bmxpa2VseShyYykpIHsKKwkJcmMgPSAtRUlPOworCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlnb3RvIG91dF9mcmVlX2ZjcF9lcV9oZGw7CisJfQorCisJbXFlID0gJm1ib3hxLT51Lm1xZTsKKwltZW1jcHkoJnBuX3BhZ2VbMF0sICgodWludDhfdCAqKSZtcWUtPnVuLnN1cHBfcGFnZXMud29yZDMpLAorCSAgICAgICBMUEZDX01BWF9TVVBQT1JURURfUEFHRVMpOworCWZvciAoaSA9IDA7IGkgPCBMUEZDX01BWF9TVVBQT1JURURfUEFHRVM7IGkrKykgeworCQlzd2l0Y2ggKHBuX3BhZ2VbaV0pIHsKKwkJY2FzZSBMUEZDX1NMSTRfUEFSQU1FVEVSUzoKKwkJCXBoYmEtPnNsaTRfaGJhLnBjX3NsaTRfcGFyYW1zLnN1cHBvcnRlZCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogUmVhZCB0aGUgcG9ydCdzIFNMSTQgUGFyYW1ldGVycyBjYXBhYmlsaXRpZXMgaWYgc3VwcG9ydGVkLiAqLworCWlmIChwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtcy5zdXBwb3J0ZWQpCisJCXJjID0gbHBmY19wY19zbGk0X3BhcmFtc19nZXQocGhiYSwgbWJveHEpOworCW1lbXBvb2xfZnJlZShtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJaWYgKHJjKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXRfZnJlZV9mY3BfZXFfaGRsOworCX0KIAlyZXR1cm4gcmM7CiAKIG91dF9mcmVlX2ZjcF9lcV9oZGw6CkBAIC0zNzMzLDYgKzQwNDgsOCBAQAogaW50CiBscGZjX2luaXRfYXBpX3RhYmxlX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDhfdCBkZXZfZ3JwKQogeworCXBoYmEtPmxwZmNfaGJhX2luaXRfbGluayA9IGxwZmNfaGJhX2luaXRfbGluazsKKwlwaGJhLT5scGZjX2hiYV9kb3duX2xpbmsgPSBscGZjX2hiYV9kb3duX2xpbms7CiAJc3dpdGNoIChkZXZfZ3JwKSB7CiAJY2FzZSBMUEZDX1BDSV9ERVZfTFA6CiAJCXBoYmEtPmxwZmNfaGJhX2Rvd25fcG9zdCA9IGxwZmNfaGJhX2Rvd25fcG9zdF9zMzsKQEAgLTQyOTEsNyArNDYwOCw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCW11dGV4X2luaXQoJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX2xvY2tfaW5pdCgmcGhiYS0+Y3RfZXZfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmN0X2V2X3dhaXRlcnMpOwogCiAJcmV0dXJuIHBoYmE7CkBAIC00NjQxLDcgKzQ5NTgsNyBAQAogaW50CiBscGZjX3NsaTRfcG9zdF9zdGF0dXNfY2hlY2soc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHN0YV9yZWcsIHVlcnJsb19yZWcsIHVlcnJoaV9yZWcsIHNjcmF0Y2hwYWQ7CisJc3RydWN0IGxwZmNfcmVnaXN0ZXIgc3RhX3JlZywgdWVycmxvX3JlZywgdWVycmhpX3JlZzsKIAlpbnQgaSwgcG9ydF9lcnJvciA9IC1FTk9ERVY7CiAKIAlpZiAoIXBoYmEtPnNsaTRfaGJhLlNUQXJlZ2FkZHIpCkBAIC00Njc3LDE0ICs0OTk0LDIxIEBACiAJCQliZl9nZXQobHBmY19oc3Rfc3RhdGVfcG9ydF9zdGF0dXMsICZzdGFfcmVnKSk7CiAKIAkvKiBMb2cgZGV2aWNlIGluZm9ybWF0aW9uICovCi0Jc2NyYXRjaHBhZC53b3JkMCA9ICByZWFkbChwaGJhLT5zbGk0X2hiYS5TQ1JBVENIUEFEcmVnYWRkcik7Ci0JbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCi0JCQkiMjUzNCBEZXZpY2UgSW5mbzogQ2hpcFR5cGU9MHgleCwgU2xpUmV2PTB4JXgsICIKLQkJCSJGZWF0dXJlTDE9MHgleCwgRmVhdHVyZUwyPTB4JXhcbiIsCi0JCQliZl9nZXQobHBmY19zY3JhdGNocGFkX2NoaXB0eXBlLCAmc2NyYXRjaHBhZCksCi0JCQliZl9nZXQobHBmY19zY3JhdGNocGFkX3NsaXJldiwgJnNjcmF0Y2hwYWQpLAotCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxLCAmc2NyYXRjaHBhZCksCi0JCQliZl9nZXQobHBmY19zY3JhdGNocGFkX2ZlYXR1cmVsZXZlbDIsICZzY3JhdGNocGFkKSk7CisJcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5TTElJTlRGcmVnYWRkcik7CisJaWYgKGJmX2dldChscGZjX3NsaV9pbnRmX3ZhbGlkLAorCQkgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpID09IExQRkNfU0xJX0lOVEZfVkFMSUQpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJIjI1MzQgRGV2aWNlIEluZm86IENoaXBUeXBlPTB4JXgsIFNsaVJldj0weCV4LCAiCisJCQkJIkZlYXR1cmVMMT0weCV4LCBGZWF0dXJlTDI9MHgleFxuIiwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5LAorCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpLAorCQkJCWJmX2dldChscGZjX3NsaV9pbnRmX3NsaXJldiwKKwkJCQkgICAgICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwxLAorCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpLAorCQkJCWJmX2dldChscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDIsCisJCQkJICAgICAgICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikpOworCX0KIAlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2xvID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVNQVNLTE9yZWdhZGRyKTsKIAlwaGJhLT5zbGk0X2hiYS51ZV9tYXNrX2hpID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVNQVNLSElyZWdhZGRyKTsKIAkvKiBXaXRoIHVuY292ZXJhYmxlIGVycm9yLCBsb2cgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBlcnJvciAqLwpAQCAtNDcyMyw4ICs1MDQ3LDggQEAKIAkJCQkJTFBGQ19VRV9NQVNLX0xPOwogCXBoYmEtPnNsaTRfaGJhLlVFTUFTS0hJcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCiAJCQkJCUxQRkNfVUVfTUFTS19ISTsKLQlwaGJhLT5zbGk0X2hiYS5TQ1JBVENIUEFEcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCi0JCQkJCUxQRkNfU0NSQVRDSFBBRDsKKwlwaGJhLT5zbGk0X2hiYS5TTElJTlRGcmVnYWRkciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCUxQRkNfU0xJX0lOVEY7CiB9CiAKIC8qKgpAQCAtNTk5OSw3ICs2MzIzLDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAkJLyogTWFyayB0aGUgRkNGSSBpcyBubyBsb25nZXIgcmVnaXN0ZXJlZCAqLwogCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0KLQkJCX4oRkNGX0FWQUlMQUJMRSB8IEZDRl9SRUdJU1RFUkVEIHwgRkNGX0RJU0NPVkVSRUQpOworCQkJfihGQ0ZfQVZBSUxBQkxFIHwgRkNGX1JFR0lTVEVSRUQgfCBGQ0ZfU0NBTl9ET05FKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCX0KIH0KQEAgLTYwMzksMTYgKzYzNjMsMjAgQEAKIAogCS8qIEdldCB0aGUgYnVzIGFkZHJlc3Mgb2YgU0xJNCBkZXZpY2UgQmFyMCwgQmFyMSwgYW5kIEJhcjIgYW5kIHRoZQogCSAqIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCBieSBlYWNoIG1hcHBpbmcuIFRoZXkgYXJlIGFjdHVhbGx5Ci0JICogbWFwcGluZyB0byB0aGUgUENJIEJBUiByZWdpb25zIDEsIDIsIGFuZCA0IGJ5IHRoZSBTTEk0IGRldmljZS4KKwkgKiBtYXBwaW5nIHRvIHRoZSBQQ0kgQkFSIHJlZ2lvbnMgMCBvciAxLCAyLCBhbmQgNCBieSB0aGUgU0xJNCBkZXZpY2UuCiAJICovCi0JcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIExQRkNfU0xJNF9CQVIwKTsKLQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgTFBGQ19TTEk0X0JBUjApOworCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpIHsKKwkJcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJfSBlbHNlIHsKKwkJcGhiYS0+cGNpX2JhcjBfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCQliYXIwbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CisJfQorCXBoYmEtPnBjaV9iYXIxX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwliYXIxbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMik7CiAKLQlwaGJhLT5wY2lfYmFyMV9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgTFBGQ19TTEk0X0JBUjEpOwotCWJhcjFtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBMUEZDX1NMSTRfQkFSMSk7Ci0KLQlwaGJhLT5wY2lfYmFyMl9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgTFBGQ19TTEk0X0JBUjIpOwotCWJhcjJtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBMUEZDX1NMSTRfQkFSMik7CisJcGhiYS0+cGNpX2JhcjJfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOworCWJhcjJtYXBfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCA0KTsKIAogCS8qIE1hcCBTTEk0IFBDSSBDb25maWcgU3BhY2UgUmVnaXN0ZXIgYmFzZSB0byBhIGtlcm5lbCB2aXJ0dWFsIGFkZHIgKi8KIAlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgPQpAQCAtNjc5Myw2ICs3MTIxLDczIEBACiAJcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgPSAwOwogfQogCisgLyoqCisgKiBscGZjX3BjX3NsaTRfcGFyYW1zX2dldCAtIEdldCB0aGUgU0xJNF9QQVJBTVMgcG9ydCBjYXBhYmlsaXRpZXMuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAbWJveHE6IFBvaW50ZXIgdG8gdGhlIG1haWxib3hxIG1lbW9yeSBmb3IgdGhlIG1haWxib3ggY29tbWFuZCByZXNwb25zZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgU0xJNCBjb2RlIHBhdGggdG8gcmVhZCB0aGUgcG9ydCdzCisgKiBzbGk0IGNhcGFiaWxpdGllcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dCB0aGF0IGNhbiBibG9jay13YWl0CisgKiBmb3IgdGhlIGNvbXBsZXRpb24uICBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkCisgKiB0eXBpY2FsbHkgZnJvbSBwcm9iZV9vbmUgb3IgZnJvbSB0aGUgb25saW5lIHJvdXRpbmUuCisgKiovCitpbnQKK2xwZmNfcGNfc2xpNF9wYXJhbXNfZ2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICptYm94cSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IGxwZmNfbXFlICptcWU7CisJc3RydWN0IGxwZmNfcGNfc2xpNF9wYXJhbXMgKnNsaTRfcGFyYW1zOworCXVpbnQzMl90IG1ib3hfdG1vOworCisJcmMgPSAwOworCW1xZSA9ICZtYm94cS0+dS5tcWU7CisKKwkvKiBSZWFkIHRoZSBwb3J0J3MgU0xJNCBQYXJhbWV0ZXJzIHBvcnQgY2FwYWJpbGl0aWVzICovCisJbHBmY19zbGk0X3BhcmFtcyhtYm94cSk7CisJaWYgKCFwaGJhLT5zbGk0X2hiYS5pbnRyX2VuYWJsZSkKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfUE9MTCk7CisJZWxzZSB7CisJCW1ib3hfdG1vID0gbHBmY19tYm94X3Rtb192YWwocGhiYSwgTUJYX1BPUlRfQ0FQQUJJTElUSUVTKTsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgbWJveHEsIG1ib3hfdG1vKTsKKwl9CisKKwlpZiAodW5saWtlbHkocmMpKQorCQlyZXR1cm4gMTsKKworCXNsaTRfcGFyYW1zID0gJnBoYmEtPnNsaTRfaGJhLnBjX3NsaTRfcGFyYW1zOworCXNsaTRfcGFyYW1zLT5pZl90eXBlID0gYmZfZ2V0KGlmX3R5cGUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+c2xpX3JldiA9IGJmX2dldChzbGlfcmV2LCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnNsaV9mYW1pbHkgPSBiZl9nZXQoc2xpX2ZhbWlseSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5mZWF0dXJlbGV2ZWxfMSA9IGJmX2dldChmZWF0dXJlbGV2ZWxfMSwKKwkJCQkJICAgICAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmZlYXR1cmVsZXZlbF8yID0gYmZfZ2V0KGZlYXR1cmVsZXZlbF8yLAorCQkJCQkgICAgICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+cHJvdG9fdHlwZXMgPSBtcWUtPnVuLnNsaTRfcGFyYW1zLndvcmQzOworCXNsaTRfcGFyYW1zLT5zZ2Vfc3VwcF9sZW4gPSBtcWUtPnVuLnNsaTRfcGFyYW1zLnNnZV9zdXBwX2xlbjsKKwlzbGk0X3BhcmFtcy0+aWZfcGFnZV9zeiA9IGJmX2dldChpZl9wYWdlX3N6LCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnJxX2RiX3dpbmRvdyA9IGJmX2dldChycV9kYl93aW5kb3csICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+bG9vcGJrX3Njb3BlID0gYmZfZ2V0KGxvb3Bia19zY29wZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5lcV9wYWdlc19tYXggPSBiZl9nZXQoZXFfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+ZXFlX3NpemUgPSBiZl9nZXQoZXFlX3NpemUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+Y3FfcGFnZXNfbWF4ID0gYmZfZ2V0KGNxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmNxZV9zaXplID0gYmZfZ2V0KGNxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPm1xX3BhZ2VzX21heCA9IGJmX2dldChtcV9wYWdlcywgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5tcWVfc2l6ZSA9IGJmX2dldChtcWVfc2l6ZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5tcV9lbGVtX2NudCA9IGJmX2dldChtcV9lbGVtX2NudCwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT53cV9wYWdlc19tYXggPSBiZl9nZXQod3FfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+d3FlX3NpemUgPSBiZl9nZXQod3FlX3NpemUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+cnFfcGFnZXNfbWF4ID0gYmZfZ2V0KHJxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnJxZV9zaXplID0gYmZfZ2V0KHJxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmhkcl9wYWdlc19tYXggPSBiZl9nZXQoaGRyX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmhkcl9zaXplID0gYmZfZ2V0KGhkcl9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmhkcl9wcF9hbGlnbiA9IGJmX2dldChoZHJfcHBfYWxpZ24sICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+c2dsX3BhZ2VzX21heCA9IGJmX2dldChzZ2xfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+c2dsX3BwX2FsaWduID0gYmZfZ2V0KHNnbF9wcF9hbGlnbiwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXJldHVybiByYzsKK30KKwogLyoqCiAgKiBscGZjX3BjaV9wcm9iZV9vbmVfczMgLSBQQ0kgcHJvYmUgZnVuYyB0byByZWcgU0xJLTMgZGV2aWNlIHRvIFBDSSBzdWJzeXN0ZW0uCiAgKiBAcGRldjogcG9pbnRlciB0byBQQ0kgZGV2aWNlCkBAIC03MTM0LDYgKzc1MjksMTIgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKKwkvKgorCSAqIEFzIHRoZSBuZXcga2VybmVsIGJlaGF2aW9yIG9mIHBjaV9yZXN0b3JlX3N0YXRlKCkgQVBJIGNhbGwgY2xlYXJzCisJICogZGV2aWNlIHNhdmVkX3N0YXRlIGZsYWcsIG5lZWQgdG8gc2F2ZSB0aGUgcmVzdG9yZWQgc3RhdGUgYWdhaW4uCisJICovCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKIAlpZiAocGRldi0+aXNfYnVzbWFzdGVyKQogCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtNzMxNyw2ICs3NzE4LDEzIEBACiAJfQogCiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkvKgorCSAqIEFzIHRoZSBuZXcga2VybmVsIGJlaGF2aW9yIG9mIHBjaV9yZXN0b3JlX3N0YXRlKCkgQVBJIGNhbGwgY2xlYXJzCisJICogZGV2aWNlIHNhdmVkX3N0YXRlIGZsYWcsIG5lZWQgdG8gc2F2ZSB0aGUgcmVzdG9yZWQgc3RhdGUgYWdhaW4uCisJICovCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKIAlpZiAocGRldi0+aXNfYnVzbWFzdGVyKQogCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtNzcyNiw2ICs4MTM0LDEzIEBACiAJLyogUmVzdG9yZSBkZXZpY2Ugc3RhdGUgZnJvbSBQQ0kgY29uZmlnIHNwYWNlICovCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJLyoKKwkgKiBBcyB0aGUgbmV3IGtlcm5lbCBiZWhhdmlvciBvZiBwY2lfcmVzdG9yZV9zdGF0ZSgpIEFQSSBjYWxsIGNsZWFycworCSAqIGRldmljZSBzYXZlZF9zdGF0ZSBmbGFnLCBuZWVkIHRvIHNhdmUgdGhlIHJlc3RvcmVkIHN0YXRlIGFnYWluLgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJaWYgKHBkZXYtPmlzX2J1c21hc3RlcikKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTc4NDUsMTEgKzgyNjAsMTEgQEAKIAlpbnQgcmM7CiAJc3RydWN0IGxwZmNfc2xpX2ludGYgaW50ZjsKIAotCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTFBGQ19TTElSRVZfQ09ORl9XT1JELCAmaW50Zi53b3JkMCkpCisJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBMUEZDX1NMSV9JTlRGLCAmaW50Zi53b3JkMCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKChiZl9nZXQobHBmY19zbGlfaW50Zl92YWxpZCwgJmludGYpID09IExQRkNfU0xJX0lOVEZfVkFMSUQpICYmCi0JCShiZl9nZXQobHBmY19zbGlfaW50Zl9yZXYsICZpbnRmKSA9PSBMUEZDX1NMSVJFVl9DT05GX1NMSTQpKQorCSAgICAoYmZfZ2V0KGxwZmNfc2xpX2ludGZfc2xpcmV2LCAmaW50ZikgPT0gTFBGQ19TTElfSU5URl9SRVZfU0xJNCkpCiAJCXJjID0gbHBmY19wY2lfcHJvYmVfb25lX3M0KHBkZXYsIHBpZCk7CiAJZWxzZQogCQlyYyA9IGxwZmNfcGNpX3Byb2JlX29uZV9zMyhwZGV2LCBwaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwppbmRleCBhOWFmZDhiLi42YzRkY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwpAQCAtMTcwNyw3ICsxNzA3LDggQEAKIAkJCQlhbGxvY19sZW4gLSBzaXplb2YodW5pb24gIGxwZmNfc2xpNF9jZmdfc2hkcik7CiAJfQogCS8qIFRoZSBzdWItaGVhZGVyIGlzIGluIERNQSBtZW1vcnksIHdoaWNoIG5lZWRzIGVuZGlhbiBjb252ZXJzdGlvbiAqLwotCWxwZmNfc2xpX3BjaW1lbV9iY29weShjZmdfc2hkciwgY2ZnX3NoZHIsCisJaWYgKGNmZ19zaGRyKQorCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoY2ZnX3NoZHIsIGNmZ19zaGRyLAogCQkJICAgICAgc2l6ZW9mKHVuaW9uICBscGZjX3NsaTRfY2ZnX3NoZHIpKTsKIAogCXJldHVybiBhbGxvY19sZW47CkBAIC0xNzQ3LDYgKzE3NDgsNjUgQEAKIH0KIAogLyoqCisgKiBscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZCAtIEFsbG9jYXRlIGFuZCBjb25zdHJ1Y3QgcmVhZCBmY2YgbWJveCBjbWQKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZl9pbmRleDogaW5kZXggdG8gZmNmIHRhYmxlLgorICoKKyAqIFRoaXMgcm91dGluZSByb3V0aW5lIGFsbG9jYXRlcyBhbmQgY29uc3RydWN0cyBub24tZW1iZWRkZWQgbWFpbGJveCBjb21tYW5kCisgKiBmb3IgcmVhZGluZyBhIEZDRiB0YWJsZSBlbnRyeSByZWZlcmVkIGJ5IEBmY2ZfaW5kZXguCisgKgorICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBtYWlsYm94IGNvbW1hbmQgY29uc3RydWN0ZWQgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlCisgKiBOVUxMLgorICoqLworaW50CitscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCQkgICAgICBzdHJ1Y3QgbHBmY01ib3hxICptYm94cSwKKwkJCSAgICAgIHVpbnQxNl90IGZjZl9pbmRleCkKK3sKKwl2b2lkICp2aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CisJdWludDhfdCAqYnl0ZXA7CisJc3RydWN0IGxwZmNfbWJ4X3NnZSBzZ2U7CisJdWludDMyX3QgYWxsb2NfbGVuLCByZXFfbGVuOworCXN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgKnJlYWRfZmNmOworCisJaWYgKCFtYm94cSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXFfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY2ZfcmVjb3JkKSArCisJCSAgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcikgKyAyICogc2l6ZW9mKHVpbnQzMl90KTsKKworCS8qIFNldCB1cCBSRUFEX0ZDRiBTTEk0X0NPTkZJRyBtYWlsYm94LWlvY3RsIGNvbW1hbmQgKi8KKwlhbGxvY19sZW4gPSBscGZjX3NsaTRfY29uZmlnKHBoYmEsIG1ib3hxLCBMUEZDX01CT1hfU1VCU1lTVEVNX0ZDT0UsCisJCQlMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUkVBRF9GQ0ZfVEFCTEUsIHJlcV9sZW4sCisJCQlMUEZDX1NMSTRfTUJYX05FTUJFRCk7CisKKwlpZiAoYWxsb2NfbGVuIDwgcmVxX2xlbikgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YLAorCQkJCSIwMjkxIEFsbG9jYXRlZCBETUEgbWVtb3J5IHNpemUgKHgleCkgaXMgIgorCQkJCSJsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBETUEgbWVtb3J5ICIKKwkJCQkic2l6ZSAoeCV4KVxuIiwgYWxsb2NfbGVuLCByZXFfbGVuKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogR2V0IHRoZSBmaXJzdCBTR0UgZW50cnkgZnJvbSB0aGUgbm9uLWVtYmVkZGVkIERNQSBtZW1vcnkuIFRoaXMKKwkgKiByb3V0aW5lIG9ubHkgdXNlcyBhIHNpbmdsZSBTR0UuCisJICovCisJbHBmY19zbGk0X21ieF9zZ2VfZ2V0KG1ib3hxLCAwLCAmc2dlKTsKKwlwaHlzX2FkZHIgPSBnZXRQYWRkcihzZ2UucGFfaGksIHNnZS5wYV9sbyk7CisJdmlydF9hZGRyID0gbWJveHEtPnNnZV9hcnJheS0+YWRkclswXTsKKwlyZWFkX2ZjZiA9IChzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsICopdmlydF9hZGRyOworCisJLyogU2V0IHVwIGNvbW1hbmQgZmllbGRzICovCisJYmZfc2V0KGxwZmNfbWJ4X3JlYWRfZmNmX3RibF9pbmR4LCAmcmVhZF9mY2YtPnUucmVxdWVzdCwgZmNmX2luZGV4KTsKKwkvKiBQZXJmb3JtIG5lY2Vzc2FyeSBlbmRpYW4gY29udmVyc2lvbiAqLworCWJ5dGVwID0gdmlydF9hZGRyICsgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcik7CisJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KGJ5dGVwLCBieXRlcCwgc2l6ZW9mKHVpbnQzMl90KSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBscGZjX3JlcXVlc3RfZmVhdHVyZXM6IENvbmZpZ3VyZSBTTEk0IFJFUVVFU1RfRkVBVFVSRVMgbWFpbGJveAogICogQG1ib3hxOiBwb2ludGVyIHRvIGxwZmMgbWJveCBjb21tYW5kLgogICoKQEAgLTE5NDYsMTMgKzIwMDYsMTQgQEAKIAliZl9zZXQobHBmY19yZWdfZmNmaV9ycV9pZDEsIHJlZ19mY2ZpLCBSRUdfRkNGX0lOVkFMSURfUUlEKTsKIAliZl9zZXQobHBmY19yZWdfZmNmaV9ycV9pZDIsIHJlZ19mY2ZpLCBSRUdfRkNGX0lOVkFMSURfUUlEKTsKIAliZl9zZXQobHBmY19yZWdfZmNmaV9ycV9pZDMsIHJlZ19mY2ZpLCBSRUdfRkNGX0lOVkFMSURfUUlEKTsKLQliZl9zZXQobHBmY19yZWdfZmNmaV9pbmZvX2luZGV4LCByZWdfZmNmaSwgcGhiYS0+ZmNmLmZjZl9pbmR4KTsKKwliZl9zZXQobHBmY19yZWdfZmNmaV9pbmZvX2luZGV4LCByZWdfZmNmaSwKKwkgICAgICAgcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4KTsKIAkvKiByZWdfZmNmIGFkZHIgbW9kZSBpcyBiaXQgd2lzZSBpbnZlcnRlZCB2YWx1ZSBvZiBmY2YgYWRkcl9tb2RlICovCi0JYmZfc2V0KGxwZmNfcmVnX2ZjZmlfbWFtLCByZWdfZmNmaSwKLQkJKH5waGJhLT5mY2YuYWRkcl9tb2RlKSAmIDB4Myk7Ci0JaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9WQUxJRF9WTEFOKSB7CisJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfbWFtLCByZWdfZmNmaSwgKH5waGJhLT5mY2YuYWRkcl9tb2RlKSAmIDB4Myk7CisJaWYgKHBoYmEtPmZjZi5jdXJyZW50X3JlYy52bGFuX2lkICE9IDB4RkZGRikgewogCQliZl9zZXQobHBmY19yZWdfZmNmaV92diwgcmVnX2ZjZmksIDEpOwotCQliZl9zZXQobHBmY19yZWdfZmNmaV92bGFuX3RhZywgcmVnX2ZjZmksIHBoYmEtPmZjZi52bGFuX2lkKTsKKwkJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfdmxhbl90YWcsIHJlZ19mY2ZpLAorCQkgICAgICAgcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLnZsYW5faWQpOwogCX0KIH0KIApAQCAtMTk5MiwzICsyMDUzLDQxIEBACiAJYmZfc2V0KGxwZmNfcmVzdW1lX3JwaV9paSwgcmVzdW1lX3JwaSwgUkVTVU1FX0lOREVYX1JQSSk7CiAJcmVzdW1lX3JwaS0+ZXZlbnRfdGFnID0gbmRscC0+cGhiYS0+ZmNfZXZlbnRUYWc7CiB9CisKKy8qKgorICogbHBmY19zdXBwb3J0ZWRfcGFnZXMgLSBJbml0aWFsaXplIHRoZSBQT1JUX0NBUEFCSUxJVElFUyBzdXBwb3J0ZWQgcGFnZXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kLgorICogQG1ib3g6IHBvaW50ZXIgdG8gbHBmYyBtYm94IGNvbW1hbmQgdG8gaW5pdGlhbGl6ZS4KKyAqCisgKiBUaGUgUE9SVF9DQVBBQklMSVRJRVMgc3VwcG9ydGVkIHBhZ2VzIG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQgdG8KKyAqIHJldHJpZXZlIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUgcGFnZXMgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0LgorICoqLwordm9pZAorbHBmY19zdXBwb3J0ZWRfcGFnZXMoc3RydWN0IGxwZmNNYm94cSAqbWJveCkKK3sKKwlzdHJ1Y3QgbHBmY19tYnhfc3VwcF9wYWdlcyAqc3VwcF9wYWdlczsKKworCW1lbXNldChtYm94LCAwLCBzaXplb2YoKm1ib3gpKTsKKwlzdXBwX3BhZ2VzID0gJm1ib3gtPnUubXFlLnVuLnN1cHBfcGFnZXM7CisJYmZfc2V0KGxwZmNfbXFlX2NvbW1hbmQsICZtYm94LT51Lm1xZSwgTUJYX1BPUlRfQ0FQQUJJTElUSUVTKTsKKwliZl9zZXQoY3BuLCBzdXBwX3BhZ2VzLCBMUEZDX1NVUFBfUEFHRVMpOworfQorCisvKioKKyAqIGxwZmNfc2xpNF9wYXJhbXMgLSBJbml0aWFsaXplIHRoZSBQT1JUX0NBUEFCSUxJVElFUyBTTEk0IFBhcmFtcworICogICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZC4KKyAqIEBtYm94OiBwb2ludGVyIHRvIGxwZmMgbWJveCBjb21tYW5kIHRvIGluaXRpYWxpemUuCisgKgorICogVGhlIFBPUlRfQ0FQQUJJTElUSUVTIFNMSTQgcGFyYW1ldGVycyBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkIHRvCisgKiByZXRyaWV2ZSB0aGUgcGFydGljdWxhciBTTEk0IGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgcG9ydC4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9wYXJhbXMoc3RydWN0IGxwZmNNYm94cSAqbWJveCkKK3sKKwlzdHJ1Y3QgbHBmY19tYnhfc2xpNF9wYXJhbXMgKnNsaTRfcGFyYW1zOworCisJbWVtc2V0KG1ib3gsIDAsIHNpemVvZigqbWJveCkpOworCXNsaTRfcGFyYW1zID0gJm1ib3gtPnUubXFlLnVuLnNsaTRfcGFyYW1zOworCWJmX3NldChscGZjX21xZV9jb21tYW5kLCAmbWJveC0+dS5tcWUsIE1CWF9QT1JUX0NBUEFCSUxJVElFUyk7CisJYmZfc2V0KGNwbiwgc2xpNF9wYXJhbXMsIExQRkNfU0xJNF9QQVJBTUVURVJTKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaAppbmRleCBkNjU1ZWQzLi5mM2NmYmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0xNzcsMjMgKzE3NywzIEBACiAJdWludDMyX3QgZGF0YTsKIH07CiAKLS8qIGJzZyBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfU0VUX0NUX0VWRU5UCTEKLSNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX0dFVF9DVF9FVkVOVAkyCi0KLXN0cnVjdCBzZXRfY3RfZXZlbnQgewotCXVpbnQzMl90IGNvbW1hbmQ7Ci0JdWludDMyX3QgZXZfcmVxX2lkOwotCXVpbnQzMl90IGV2X3JlZ19pZDsKLX07Ci0KLXN0cnVjdCBnZXRfY3RfZXZlbnQgewotCXVpbnQzMl90IGNvbW1hbmQ7Ci0JdWludDMyX3QgZXZfcmVnX2lkOwotCXVpbnQzMl90IGV2X3JlcV9pZDsKLX07Ci0KLXN0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgewotCXVpbnQzMl90IGltbWVkX2RhdGE7Ci0JdWludDMyX3QgdHlwZTsKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwppbmRleCAyZWQ2YWYxLi5kMjBhZTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAogaW50CiBscGZjX2NoZWNrX3NwYXJtKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCi0JCSBzdHJ1Y3Qgc2Vydl9wYXJtICogc3AsIHVpbnQzMl90IGNsYXNzKQorCQkgc3RydWN0IHNlcnZfcGFybSAqc3AsIHVpbnQzMl90IGNsYXNzLCBpbnQgZmxvZ2kpCiB7CiAJdm9sYXRpbGUgc3RydWN0IHNlcnZfcGFybSAqaHNwID0gJnZwb3J0LT5mY19zcGFyYW07CiAJdWludDE2X3QgaHNwX3ZhbHVlLCBzc3BfdmFsdWUgPSAwOwpAQCAtNzUsNDkgKzc1LDU2IEBACiAJICogY29ycmVjdGluZyB0aGUgYnl0ZSB2YWx1ZXMuCiAJICovCiAJaWYgKHNwLT5jbHMxLmNsYXNzVmFsaWQpIHsKLQkJaHNwX3ZhbHVlID0gKGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOwotCQlzc3BfdmFsdWUgPSAoc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOwotCQlpZiAoIXNzcF92YWx1ZSkKLQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKLQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTHNiID0gaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOwotCQkJc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPSBoc3AtPmNsczEucmN2RGF0YVNpemVNc2I7CisJCWlmICghZmxvZ2kpIHsKKwkJCWhzcF92YWx1ZSA9ICgoaHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYik7CisJCQlzc3BfdmFsdWUgPSAoKHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiKTsKKwkJCWlmICghc3NwX3ZhbHVlKQorCQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07CisJCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7CisJCQkJc3AtPmNsczEucmN2RGF0YVNpemVMc2IgPQorCQkJCQloc3AtPmNsczEucmN2RGF0YVNpemVMc2I7CisJCQkJc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPQorCQkJCQloc3AtPmNsczEucmN2RGF0YVNpemVNc2I7CisJCQl9CiAJCX0KLQl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMSkgeworCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MxKQogCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCX0KLQogCWlmIChzcC0+Y2xzMi5jbGFzc1ZhbGlkKSB7Ci0JCWhzcF92YWx1ZSA9IChoc3AtPmNsczIucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCWhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKLQkJc3NwX3ZhbHVlID0gKHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKLQkJaWYgKCFzc3BfdmFsdWUpCi0JCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7Ci0JCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYiA9IGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKLQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTXNiID0gaHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiOworCQlpZiAoIWZsb2dpKSB7CisJCQloc3BfdmFsdWUgPSAoKGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBoc3AtPmNsczIucmN2RGF0YVNpemVMc2IpOworCQkJc3NwX3ZhbHVlID0gKChzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYik7CisJCQlpZiAoIXNzcF92YWx1ZSkKKwkJCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOworCQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgeworCQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTHNiID0KKwkJCQkJaHNwLT5jbHMyLnJjdkRhdGFTaXplTHNiOworCQkJCXNwLT5jbHMyLnJjdkRhdGFTaXplTXNiID0KKwkJCQkJaHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiOworCQkJfQogCQl9Ci0JfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzIpIHsKKwl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMikKIAkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQl9Ci0KIAlpZiAoc3AtPmNsczMuY2xhc3NWYWxpZCkgewotCQloc3BfdmFsdWUgPSAoaHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQloc3AtPmNsczMucmN2RGF0YVNpemVMc2I7Ci0JCXNzcF92YWx1ZSA9IChzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJc3AtPmNsczMucmN2RGF0YVNpemVMc2I7Ci0JCWlmICghc3NwX3ZhbHVlKQotCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgewotCQkJc3AtPmNsczMucmN2RGF0YVNpemVMc2IgPSBoc3AtPmNsczMucmN2RGF0YVNpemVMc2I7Ci0JCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA9IGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYjsKKwkJaWYgKCFmbG9naSkgeworCQkJaHNwX3ZhbHVlID0gKChoc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgaHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiKTsKKwkJCXNzcF92YWx1ZSA9ICgoc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgc3AtPmNsczMucmN2RGF0YVNpemVMc2IpOworCQkJaWYgKCFzc3BfdmFsdWUpCisJCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKKwkJCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKKwkJCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYiA9CisJCQkJCWhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYjsKKwkJCQlzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA9CisJCQkJCWhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYjsKKwkJCX0KIAkJfQotCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MzKSB7CisJfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzMpCiAJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JfQogCiAJLyoKIAkgKiBQcmVzZXJ2ZSB0aGUgdXBwZXIgZm91ciBiaXRzIG9mIHRoZSBNU0IgZnJvbSB0aGUgUExPR0kgcmVzcG9uc2UuCkBAIC0yNDcsNyArMjU0LDcgQEAKIAlpbnQgcmM7CiAKIAltZW1zZXQoJnN0YXQsIDAsIHNpemVvZiAoc3RydWN0IGxzX3JqdCkpOwotCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZMT0dJKSB7CisJaWYgKHZwb3J0LT5wb3J0X3N0YXRlIDw9IExQRkNfRkRJU0MpIHsKIAkJLyogQmVmb3JlIHJlc3BvbmRpbmcgdG8gUExPR0ksIGNoZWNrIGZvciBwdDJwdCBtb2RlLgogCQkgKiBJZiB3ZSBhcmUgcHQycHQsIHdpdGggYW4gb3V0c3RhbmRpbmcgRkxPR0ksIGFib3J0CiAJCSAqIHRoZSBGTE9HSSBhbmQgcmVzZW5kIGl0IGZpcnN0LgpAQCAtMjk1LDcgKzMwMiw3IEBACiAJCQlOVUxMKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICgobHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMykgPT0gMCkpIHsKKwlpZiAoKGxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMsIDApID09IDApKSB7CiAJCS8qIFJlamVjdCB0aGlzIHJlcXVlc3QgYmVjYXVzZSBpbnZhbGlkIHBhcmFtZXRlcnMgKi8KIAkJc3RhdC51bi5iLmxzUmp0UnNuQ29kZSA9IExTUkpUX1VOQUJMRV9UUEM7CiAJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPSBMU0VYUF9TUEFSTV9PUFRJT05TOwpAQCAtODMxLDcgKzgzOCw3IEBACiAJCQkJICIwMTQyIFBMT0dJIFJTUDogSW52YWxpZCBXV04uXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCWlmICghbHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMykpCisJaWYgKCFscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzLCAwKSkKIAkJZ290byBvdXQ7CiAJLyogUExPR0kgY2hrcGFybSBPSyAqLwogCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0VMUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggYTI0NjQxMC4uN2YyMWI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTYyNiw2ICs2MjYsNyBAQAogCQkmcGhiYS0+c2xpNF9oYmEubHBmY19hYnRzX3Njc2lfYnVmX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHBzYi0+Y3VyX2lvY2JxLnNsaTRfeHJpdGFnID09IHhyaSkgewogCQkJbGlzdF9kZWwoJnBzYi0+bGlzdCk7CisJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKIAkJCQkmcGhiYS0+c2xpNF9oYmEuYWJ0c19zY3NpX2J1Zl9saXN0X2xvY2ssCkBAIC02ODgsMTEgKzY4OSwxMiBAQAogCQkJCQkgbGlzdCk7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJLyogUHV0IHRoaXMgYmFjayBvbiB0aGUgYWJvcnQgc2NzaSBsaXN0ICovCi0JCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwotCQkJCXBzYi0+cmVzdWx0ID0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEOworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMTsKIAkJCQlyYysrOwotCQkJfSBlbHNlCisJCQl9IGVsc2UgeworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMDsKIAkJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOworCQkJfQogCQkJLyogUHV0IGl0IGJhY2sgaW50byB0aGUgU0NTSSBidWZmZXIgbGlzdCAqLwogCQkJbHBmY19yZWxlYXNlX3Njc2lfYnVmX3M0KHBoYmEsIHBzYik7CiAJCX0KQEAgLTc5NiwxOSArNzk4LDE3IEBACiAJCSAqLwogCQlzZ2wtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihwdXRQYWRkckhpZ2gocGRtYV9waHlzX2ZjcF9jbWQpKTsKIAkJc2dsLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIocHV0UGFkZHJMb3cocGRtYV9waHlzX2ZjcF9jbWQpKTsKLQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsIHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpKTsKIAkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAwKTsKIAkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQlzZ2wtPndvcmQzID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMyk7CisJCXNnbC0+c2dlX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgZmNwX2NtbmQpKTsKIAkJc2dsKys7CiAKIAkJLyogU2V0dXAgdGhlIHBoeXNpY2FsIHJlZ2lvbiBmb3IgdGhlIEZDUCBSU1AgKi8KIAkJc2dsLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKHBkbWFfcGh5c19mY3BfcnNwKSk7CiAJCXNnbC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KHBkbWFfcGh5c19mY3BfcnNwKSk7Ci0JCWJmX3NldChscGZjX3NsaTRfc2dlX2xlbiwgc2dsLCBzaXplb2Yoc3RydWN0IGZjcF9yc3ApKTsKIAkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAxKTsKIAkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQlzZ2wtPndvcmQzID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMyk7CisJCXNnbC0+c2dlX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgZmNwX3JzcCkpOwogCiAJCS8qCiAJCSAqIFNpbmNlIHRoZSBJT0NCIGZvciB0aGUgRkNQIEkvTyBpcyBidWlsdCBpbnRvIHRoaXMKQEAgLTgzOSwxMSArODM5LDEyIEBACiAJCQkJCQlwc2ItPmN1cl9pb2NicS5zbGk0X3hyaXRhZyk7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJLyogUHV0IHRoaXMgYmFjayBvbiB0aGUgYWJvcnQgc2NzaSBsaXN0ICovCi0JCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwotCQkJCXBzYi0+cmVzdWx0ID0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEOworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMTsKIAkJCQlyYysrOwotCQkJfSBlbHNlCisJCQl9IGVsc2UgeworCQkJCXBzYi0+ZXhjaF9idXN5ID0gMDsKIAkJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOworCQkJfQogCQkJLyogUHV0IGl0IGJhY2sgaW50byB0aGUgU0NTSSBidWZmZXIgbGlzdCAqLwogCQkJbHBmY19yZWxlYXNlX3Njc2lfYnVmX3M0KHBoYmEsIHBzYik7CiAJCQlicmVhazsKQEAgLTg1NywxMSArODU4LDEyIEBACiAJCQkJIGxpc3QpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCS8qIFB1dCB0aGlzIGJhY2sgb24gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwotCQkJCXBzYi0+c3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCQlwc2ItPnJlc3VsdCA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDE7CiAJCQkJcmMrKzsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKKwkJCX0KIAkJCS8qIFB1dCBpdCBiYWNrIGludG8gdGhlIFNDU0kgYnVmZmVyIGxpc3QgKi8KIAkJCWxwZmNfcmVsZWFzZV9zY3NpX2J1Zl9zNChwaGJhLCBwc2IpOwogCQl9CkBAIC05NTEsOCArOTUzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGlmbGFnID0gMDsKIAotCWlmIChwc2ItPnN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUCi0JCSYmIHBzYi0+cmVzdWx0ID09IElPRVJSX0FCT1JUX1JFUVVFU1RFRCkgeworCWlmIChwc2ItPmV4Y2hfYnVzeSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+c2xpNF9oYmEuYWJ0c19zY3NpX2J1Zl9saXN0X2xvY2ssCiAJCQkJCWlmbGFnKTsKIAkJcHNiLT5wQ21kID0gTlVMTDsKQEAgLTE4NjksNyArMTg3MCw2IEBACiAJCXNjc2lfZm9yX2VhY2hfc2coc2NzaV9jbW5kLCBzZ2VsLCBuc2VnLCBudW1fYmRlKSB7CiAJCQlwaHlzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOwogCQkJZG1hX2xlbiA9IHNnX2RtYV9sZW4oc2dlbCk7Ci0JCQliZl9zZXQobHBmY19zbGk0X3NnZV9sZW4sIHNnbCwgc2dfZG1hX2xlbihzZ2VsKSk7CiAJCQlzZ2wtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihwdXRQYWRkckxvdyhwaHlzYWRkcikpOwogCQkJc2dsLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKHBoeXNhZGRyKSk7CiAJCQlpZiAoKG51bV9iZGUgKyAxKSA9PSBuc2VnKQpAQCAtMTg3OCw3ICsxODc4LDcgQEAKIAkJCQliZl9zZXQobHBmY19zbGk0X3NnZV9sYXN0LCBzZ2wsIDApOwogCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2Vfb2Zmc2V0LCBzZ2wsIGRtYV9vZmZzZXQpOwogCQkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQkJc2dsLT53b3JkMyA9IGNwdV90b19sZTMyKHNnbC0+d29yZDMpOworCQkJc2dsLT5zZ2VfbGVuID0gY3B1X3RvX2xlMzIoZG1hX2xlbik7CiAJCQlkbWFfb2Zmc2V0ICs9IGRtYV9sZW47CiAJCQlzZ2wrKzsKIAkJfQpAQCAtMjIyMSw2ICsyMjIxLDkgQEAKIAogCWxwZmNfY21kLT5yZXN1bHQgPSBwSW9jYk91dC0+aW9jYi51bi51bHBXb3JkWzRdOwogCWxwZmNfY21kLT5zdGF0dXMgPSBwSW9jYk91dC0+aW9jYi51bHBTdGF0dXM7CisJLyogcGljayB1cCBTTEk0IGV4aGFuZ2UgYnVzeSBzdGF0dXMgZnJvbSBIQkEgKi8KKwlscGZjX2NtZC0+ZXhjaF9idXN5ID0gcElvY2JPdXQtPmlvY2JfZmxhZyAmIExQRkNfRVhDSEFOR0VfQlVTWTsKKwogCWlmIChwbm9kZSAmJiBOTFBfQ0hLX05PREVfQUNUKHBub2RlKSkKIAkJYXRvbWljX2RlYygmcG5vZGUtPmNtZF9wZW5kaW5nKTsKIApAQCAtMjYzNyw2ICsyNjQwLDcgQEAKIAl9CiAJcGhiYS0+bHBmY19nZXRfc2NzaV9idWYgPSBscGZjX2dldF9zY3NpX2J1ZjsKIAlwaGJhLT5scGZjX3JhbXBkb3duX3F1ZXVlX2RlcHRoID0gbHBmY19yYW1wZG93bl9xdWV1ZV9kZXB0aDsKKwlwaGJhLT5scGZjX3Njc2lfY21kX2lvY2JfY21wbCA9IGxwZmNfc2NzaV9jbWRfaW9jYl9jbXBsOwogCXJldHVybiAwOwogfQogCkBAIC0yNjk1LDYgKzI2OTksMTMgQEAKIAkJCQkgIiBwb3J0ICVzIiwKIAkJCQkgcGhiYS0+UG9ydCk7CiAJCX0KKwkJbGVuID0gc3RybGVuKGxwZmNpbmZvYnVmKTsKKwkJaWYgKHBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubG9naWNhbF9zcGVlZCkgeworCQkJc25wcmludGYobHBmY2luZm9idWYgKyBsZW4sCisJCQkJIDM4NC1sZW4sCisJCQkJICIgTG9naWNhbCBMaW5rIFNwZWVkOiAlZCBNYnBzIiwKKwkJCQkgcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5sb2dpY2FsX3NwZWVkICogMTApOworCQl9CiAJfQogCXJldHVybiBscGZjaW5mb2J1ZjsKIH0KQEAgLTI5OTAsNiArMzAwMSw3IEBACiAKIAkvKiBBQlRTIFdRRSBtdXN0IGdvIHRvIHRoZSBzYW1lIFdRIGFzIHRoZSBXUUUgdG8gYmUgYWJvcnRlZCAqLwogCWFidHNpb2NiLT5mY3Bfd3FpZHggPSBpb2NiLT5mY3Bfd3FpZHg7CisJYWJ0c2lvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX1VTRV9GQ1BXUUlEWDsKIAogCWlmIChscGZjX2lzX2xpbmtfdXAocGhiYSkpCiAJCWljbWQtPnVscENvbW1hbmQgPSBDTURfQUJPUlRfWFJJX0NOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaAppbmRleCA2NWRmYzhiLi41OTMyMjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaApAQCAtMTE4LDYgKzExOCw3IEBACiAKIAl1aW50MzJfdCB0aW1lb3V0OwogCisJdWludDE2X3QgZXhjaF9idXN5OyAgICAgLyogU0xJNCBoYmEgcmVwb3J0ZWQgWEIgb24gY29tcGxldGUgV0NRRSAqLwogCXVpbnQxNl90IHN0YXR1czsJLyogRnJvbSBJT0NCIFdvcmQgNy0gdWxwU3RhdHVzICovCiAJdWludDMyX3QgcmVzdWx0OwkvKiBGcm9tIElPQ0IgV29yZCA0LiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwppbmRleCA1ODk1NDliLi4zNWUzYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKQEAgLTU4MCwxMCArNTgwLDcgQEAKIAllbHNlCiAJCXNnbHEgPSBfX2xwZmNfY2xlYXJfYWN0aXZlX3NnbHEocGhiYSwgaW9jYnEtPnNsaTRfeHJpdGFnKTsKIAlpZiAoc2dscSkgIHsKLQkJaWYgKGlvY2JxLT5pb2NiX2ZsYWcgJiBMUEZDX0RSSVZFUl9BQk9SVEVECi0JCQkmJiAoKGlvY2JxLT5pb2NiLnVscFN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUKQotCQkJJiYgKGlvY2JxLT5pb2NiLnVuLnVscFdvcmRbNF0KLQkJCQk9PSBJT0VSUl9BQk9SVF9SRVFVRVNURUQpKSkgeworCQlpZiAoaW9jYnEtPmlvY2JfZmxhZyAmIExQRkNfRVhDSEFOR0VfQlVTWSkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPnNsaTRfaGJhLmFidHNfc2dsX2xpc3RfbG9jaywKIAkJCQkJaWZsYWcpOwogCQkJbGlzdF9hZGQoJnNnbHEtPmxpc3QsCkBAIC03NjQsMTAgKzc2MSw2IEBACiAJY2FzZSBEU1NDTURfSVdSSVRFNjRfQ1g6CiAJY2FzZSBEU1NDTURfSVJFQUQ2NF9DUjoKIAljYXNlIERTU0NNRF9JUkVBRDY0X0NYOgotCWNhc2UgRFNTQ01EX0lOVkFMSURBVEVfREVLOgotCWNhc2UgRFNTQ01EX1NFVF9LRUs6Ci0JY2FzZSBEU1NDTURfR0VUX0tFS19JRDoKLQljYXNlIERTU0NNRF9HRU5fWEZFUjoKIAkJdHlwZSA9IExQRkNfU09MX0lPQ0I7CiAJCWJyZWFrOwogCWNhc2UgQ01EX0FCT1JUX1hSSV9DTjoKQEAgLTE3MTcsNiArMTcxMCw3IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICptcDsKIAl1aW50MTZfdCBycGksIHZwaTsKIAlpbnQgcmM7CisJc3RydWN0IGxwZmNfdnBvcnQgICp2cG9ydCA9IHBtYi0+dnBvcnQ7CiAKIAltcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgKHBtYi0+Y29udGV4dDEpOwogCkBAIC0xNzQ1LDYgKzE3MzksMTggQEAKIAkJCXJldHVybjsKIAl9CiAKKwkvKiBVbnJlZyBWUEksIGlmIHRoZSBSRUdfVlBJIHN1Y2NlZWQgYWZ0ZXIgVkxpbmsgZmFpbHVyZSAqLworCWlmICgocG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19WUEkpICYmCisJCSEocGhiYS0+cHBvcnQtPmxvYWRfZmxhZyAmIEZDX1VOTE9BRElORykgJiYKKwkJIXBtYi0+dS5tYi5tYnhTdGF0dXMpIHsKKwkJbHBmY191bnJlZ192cGkocGhiYSwgcG1iLT51Lm1iLnVuLnZhclJlZ1ZwaS52cGksIHBtYik7CisJCXBtYi0+dnBvcnQgPSB2cG9ydDsKKwkJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwkJaWYgKHJjICE9IE1CWF9OT1RfRklOSVNIRUQpCisJCQlyZXR1cm47CisJfQorCiAJaWYgKGJmX2dldChscGZjX21xZV9jb21tYW5kLCAmcG1iLT51Lm1xZSkgPT0gTUJYX1NMSTRfQ09ORklHKQogCQlscGZjX3NsaTRfbWJveF9jbWRfZnJlZShwaGJhLCBwbWIpOwogCWVsc2UKQEAgLTIyMjgsOSArMjIzNCwxNSBAQAogCQkJICogQWxsIG90aGVyIGFyZSBwYXNzZWQgdG8gdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCiAJCQkgKi8KIAkJCWlmIChwcmluZy0+cmluZ25vID09IExQRkNfRUxTX1JJTkcpIHsKLQkJCQlpZiAoY21kaW9jYnAtPmlvY2JfZmxhZyAmIExQRkNfRFJJVkVSX0FCT1JURUQpIHsKKwkJCQlpZiAoKHBoYmEtPnNsaV9yZXYgPCBMUEZDX1NMSV9SRVY0KSAmJgorCQkJCSAgICAoY21kaW9jYnAtPmlvY2JfZmxhZyAmCisJCQkJCQkJTFBGQ19EUklWRVJfQUJPUlRFRCkpIHsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICBpZmxhZyk7CiAJCQkJCWNtZGlvY2JwLT5pb2NiX2ZsYWcgJj0KIAkJCQkJCX5MUEZDX0RSSVZFUl9BQk9SVEVEOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgICAgICBpZmxhZyk7CiAJCQkJCXNhdmVxLT5pb2NiLnVscFN0YXR1cyA9CiAJCQkJCQlJT1NUQVRfTE9DQUxfUkVKRUNUOwogCQkJCQlzYXZlcS0+aW9jYi51bi51bHBXb3JkWzRdID0KQEAgLTIyNDAsNyArMjI1Miw0NyBAQAogCQkJCQkgKiBvZiBETUFpbmcgcGF5bG9hZCwgc28gZG9uJ3QgZnJlZSBkYXRhCiAJCQkJCSAqIGJ1ZmZlciB0aWxsIGFmdGVyIGEgaGJlYXQuCiAJCQkJCSAqLworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgIGlmbGFnKTsKIAkJCQkJc2F2ZXEtPmlvY2JfZmxhZyB8PSBMUEZDX0RFTEFZX01FTV9GUkVFOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgICAgICBpZmxhZyk7CisJCQkJfQorCQkJCWlmICgocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSAmJgorCQkJCSAgICAoc2F2ZXEtPmlvY2JfZmxhZyAmIExQRkNfRVhDSEFOR0VfQlVTWSkpIHsKKwkJCQkJLyogU2V0IGNtZGlvY2IgZmxhZyBmb3IgdGhlIGV4Y2hhbmdlCisJCQkJCSAqIGJ1c3kgc28gc2dsICh4cmkpIHdpbGwgbm90IGJlCisJCQkJCSAqIHJlbGVhc2VkIHVudGlsIHRoZSBhYm9ydCB4cmkgaXMKKwkJCQkJICogcmVjZWl2ZWQgZnJvbSBoYmEsIGNsZWFyIHRoZQorCQkJCQkgKiBMUEZDX0RSSVZFUl9BQk9SVEVEIGJpdCBpbiBjYXNlCisJCQkJCSAqIGl0IHdhcyBkcml2ZXIgaW5pdGlhdGVkIGFib3J0LgorCQkJCQkgKi8KKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICBpZmxhZyk7CisJCQkJCWNtZGlvY2JwLT5pb2NiX2ZsYWcgJj0KKwkJCQkJCX5MUEZDX0RSSVZFUl9BQk9SVEVEOworCQkJCQljbWRpb2NicC0+aW9jYl9mbGFnIHw9CisJCQkJCQlMUEZDX0VYQ0hBTkdFX0JVU1k7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICAgICAgIGlmbGFnKTsKKwkJCQkJY21kaW9jYnAtPmlvY2IudWxwU3RhdHVzID0KKwkJCQkJCUlPU1RBVF9MT0NBTF9SRUpFQ1Q7CisJCQkJCWNtZGlvY2JwLT5pb2NiLnVuLnVscFdvcmRbNF0gPQorCQkJCQkJSU9FUlJfQUJPUlRfUkVRVUVTVEVEOworCQkJCQkvKgorCQkJCQkgKiBGb3IgU0xJNCwgaXJzaW9jYiBjb250YWlucyBOT19YUkkKKwkJCQkJICogaW4gc2xpX3hyaXRhZywgaXQgc2hhbGwgbm90IGFmZmVjdAorCQkJCQkgKiByZWxlYXNpbmcgc2dsICh4cmkpIHByb2Nlc3MuCisJCQkJCSAqLworCQkJCQlzYXZlcS0+aW9jYi51bHBTdGF0dXMgPQorCQkJCQkJSU9TVEFUX0xPQ0FMX1JFSkVDVDsKKwkJCQkJc2F2ZXEtPmlvY2IudW4udWxwV29yZFs0XSA9CisJCQkJCQlJT0VSUl9TTElfQUJPUlRFRDsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICBpZmxhZyk7CisJCQkJCXNhdmVxLT5pb2NiX2ZsYWcgfD0gTFBGQ19ERUxBWV9NRU1fRlJFRTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgICAgICAgaWZsYWcpOwogCQkJCX0KIAkJCX0KIAkJCShjbWRpb2NicC0+aW9jYl9jbXBsKSAocGhiYSwgY21kaW9jYnAsIHNhdmVxKTsKQEAgLTU2ODcsMTkgKzU3MzksMTkgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtQmRlczsgaSsrKSB7CiAJCQkvKiBTaG91bGQgYWxyZWFkeSBiZSBieXRlIHN3YXBwZWQuICovCi0JCQlzZ2wtPmFkZHJfaGkgPSAgYnBsLT5hZGRySGlnaDsKLQkJCXNnbC0+YWRkcl9sbyA9ICBicGwtPmFkZHJMb3c7Ci0JCQkvKiBzd2FwIHRoZSBzaXplIGZpZWxkIGJhY2sgdG8gdGhlIGNwdSBzbyB3ZQotCQkJICogY2FuIGFzc2lnbiBpdCB0byB0aGUgc2dsLgotCQkJICovCi0JCQliZGUudHVzLncgID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7Ci0JCQliZl9zZXQobHBmY19zbGk0X3NnZV9sZW4sIHNnbCwgYmRlLnR1cy5mLmJkZVNpemUpOworCQkJc2dsLT5hZGRyX2hpID0gYnBsLT5hZGRySGlnaDsKKwkJCXNnbC0+YWRkcl9sbyA9IGJwbC0+YWRkckxvdzsKKwogCQkJaWYgKChpKzEpID09IG51bUJkZXMpCiAJCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAxKTsKIAkJCWVsc2UKIAkJCQliZl9zZXQobHBmY19zbGk0X3NnZV9sYXN0LCBzZ2wsIDApOwogCQkJc2dsLT53b3JkMiA9IGNwdV90b19sZTMyKHNnbC0+d29yZDIpOwotCQkJc2dsLT53b3JkMyA9IGNwdV90b19sZTMyKHNnbC0+d29yZDMpOworCQkJLyogc3dhcCB0aGUgc2l6ZSBmaWVsZCBiYWNrIHRvIHRoZSBjcHUgc28gd2UKKwkJCSAqIGNhbiBhc3NpZ24gaXQgdG8gdGhlIHNnbC4KKwkJCSAqLworCQkJYmRlLnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJCQlzZ2wtPnNnZV9sZW4gPSBjcHVfdG9fbGUzMihiZGUudHVzLmYuYmRlU2l6ZSk7CiAJCQlicGwrKzsKIAkJCXNnbCsrOwogCQl9CkBAIC01NzEyLDExICs1NzY0LDEwIEBACiAJCQkJY3B1X3RvX2xlMzIoaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmFkZHJIaWdoKTsKIAkJCXNnbC0+YWRkcl9sbyA9CiAJCQkJY3B1X3RvX2xlMzIoaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmFkZHJMb3cpOwotCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsCi0JCQkJaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmJkZVNpemUpOwogCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAxKTsKIAkJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJCXNnbC0+d29yZDMgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQzKTsKKwkJCXNnbC0+c2dlX2xlbiA9CisJCQkJY3B1X3RvX2xlMzIoaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmJkZVNpemUpOwogCX0KIAlyZXR1cm4gc2dscS0+c2xpNF94cml0YWc7CiB9CkBAIC01OTg3LDEyICs2MDM4LDEwIEBACiAJCWVsc2UKIAkJCWJmX3NldChhYm9ydF9jbWRfaWEsICZ3cWUtPmFib3J0X2NtZCwgMCk7CiAJCWJmX3NldChhYm9ydF9jbWRfY3JpdGVyaWEsICZ3cWUtPmFib3J0X2NtZCwgVF9YUklfVEFHKTsKLQkJYWJvcnRfdGFnID0gaW9jYnEtPmlvY2IudW4uYWN4cmkuYWJvcnRJb1RhZzsKIAkJd3FlLT53b3Jkc1s1XSA9IDA7CiAJCWJmX3NldChscGZjX3dxZV9nZW5fY3QsICZ3cWUtPmdlbmVyaWMsCiAJCQkoKGlvY2JxLT5pb2NiLnVscEN0X2ggPDwgMSkgfCBpb2NicS0+aW9jYi51bHBDdF9sKSk7CiAJCWFib3J0X3RhZyA9IGlvY2JxLT5pb2NiLnVuLmFjeHJpLmFib3J0SW9UYWc7Ci0JCXdxZS0+Z2VuZXJpYy5hYm9ydF90YWcgPSBhYm9ydF90YWc7CiAJCS8qCiAJCSAqIFRoZSBhYm9ydCBoYW5kbGVyIHdpbGwgc2VuZCB1cyBDTURfQUJPUlRfWFJJX0NOIG9yCiAJCSAqIENNRF9DTE9TRV9YUklfQ04gYW5kIHRoZSBmdyBvbmx5IGFjY2VwdHMgQ01EX0FCT1JUX1hSSV9DWApAQCAtNjEyMSwxNSArNjE3MCwxNSBAQAogCWlmIChscGZjX3NsaTRfaW9jYjJ3cWUocGhiYSwgcGlvY2IsICZ3cWUpKQogCQlyZXR1cm4gSU9DQl9FUlJPUjsKIAotCWlmIChwaW9jYi0+aW9jYl9mbGFnICYgIExQRkNfSU9fRkNQKSB7CisJaWYgKChwaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19JT19GQ1ApIHx8CisJCShwaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19VU0VfRkNQV1FJRFgpKSB7CiAJCS8qCiAJCSAqIEZvciBGQ1AgY29tbWFuZCBJT0NCLCBnZXQgYSBuZXcgV1EgaW5kZXggdG8gZGlzdHJpYnV0ZQogCQkgKiBXUUUgYWNyb3NzIHRoZSBXUXNyLiBPbiB0aGUgb3RoZXIgaGFuZCwgZm9yIGFib3J0IElPQ0IsCiAJCSAqIGl0IGNhcnJpZXMgdGhlIHNhbWUgV1EgaW5kZXggdG8gdGhlIG9yaWdpbmFsIGNvbW1hbmQKIAkJICogSU9DQi4KIAkJICovCi0JCWlmICgocGlvY2ItPmlvY2IudWxwQ29tbWFuZCAhPSBDTURfQUJPUlRfWFJJX0NOKSAmJgotCQkgICAgKHBpb2NiLT5pb2NiLnVscENvbW1hbmQgIT0gQ01EX0NMT1NFX1hSSV9DTikpCisJCWlmIChwaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19JT19GQ1ApCiAJCQlwaW9jYi0+ZmNwX3dxaWR4ID0gbHBmY19zbGk0X3NjbWRfdG9fd3FpZHhfZGlzdHIocGhiYSk7CiAJCWlmIChscGZjX3NsaTRfd3FfcHV0KHBoYmEtPnNsaTRfaGJhLmZjcF93cVtwaW9jYi0+ZmNwX3dxaWR4XSwKIAkJCQkgICAgICZ3cWUpKQpAQCAtNzAwNCw3ICs3MDUzLDE0IEBACiAJCSAgICBhYm9ydF9pb2NiLT5pb2NiLnVscENvbnRleHQgIT0gYWJvcnRfY29udGV4dCB8fAogCQkgICAgKGFib3J0X2lvY2ItPmlvY2JfZmxhZyAmIExQRkNfRFJJVkVSX0FCT1JURUQpID09IDApCiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQllbHNlIHsKKwkJZWxzZSBpZiAocGhiYS0+c2xpX3JldiA8IExQRkNfU0xJX1JFVjQpIHsKKwkJCS8qCisJCQkgKiBsZWF2ZSB0aGUgU0xJNCBhYm9ydGVkIGNvbW1hbmQgb24gdGhlIHR4Y21wbHEKKwkJCSAqIGxpc3QgYW5kIHRoZSBjb21tYW5kIGNvbXBsZXRlIFdDUUUncyBYQiBiaXQKKwkJCSAqIHdpbGwgdGVsbCB3aGV0aGVyIHRoZSBTR0wgKFhSSSkgY2FuIGJlIHJlbGVhc2VkCisJCQkgKiBpbW1lZGlhdGVseSBvciB0byB0aGUgYWJvcnRlZCBTR0wgbGlzdCBmb3IgdGhlCisJCQkgKiBmb2xsb3dpbmcgYWJvcnQgWFJJIGZyb20gdGhlIEhCQS4KKwkJCSAqLwogCQkJbGlzdF9kZWxfaW5pdCgmYWJvcnRfaW9jYi0+bGlzdCk7CiAJCQlwcmluZy0+dHhjbXBscV9jbnQtLTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CkBAIC03MDEzLDExICs3MDY5LDEzIEBACiAJCQkgKiBwYXlsb2FkLCBzbyBkb24ndCBmcmVlIGRhdGEgYnVmZmVyIHRpbGwgYWZ0ZXIKIAkJCSAqIGEgaGJlYXQuCiAJCQkgKi8KKwkJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJYWJvcnRfaW9jYi0+aW9jYl9mbGFnIHw9IExQRkNfREVMQVlfTUVNX0ZSRUU7Ci0KIAkJCWFib3J0X2lvY2ItPmlvY2JfZmxhZyAmPSB+TFBGQ19EUklWRVJfQUJPUlRFRDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisKIAkJCWFib3J0X2lvY2ItPmlvY2IudWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCWFib3J0X2lvY2ItPmlvY2IudW4udWxwV29yZFs0XSA9IElPRVJSX1NMSV9BQk9SVEVEOworCQkJYWJvcnRfaW9jYi0+aW9jYi51bi51bHBXb3JkWzRdID0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEOwogCQkJKGFib3J0X2lvY2ItPmlvY2JfY21wbCkocGhiYSwgYWJvcnRfaW9jYiwgYWJvcnRfaW9jYik7CiAJCX0KIAl9CkBAIC03MTA2LDcgKzcxNjQsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIFRoaXMgc2lnbmFscyB0aGUgcmVzcG9uc2UgdG8gc2V0IHRoZSBjb3JyZWN0IHN0YXR1cwotCSAqIGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIuCisJICogYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBsZXRpb24gaGFuZGxlcgogCSAqLwogCWNtZGlvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX0RSSVZFUl9BQk9SVEVEOwogCkBAIC03MTI0LDYgKzcxODIsOCBAQAogCiAJLyogQUJUUyBXUUUgbXVzdCBnbyB0byB0aGUgc2FtZSBXUSBhcyB0aGUgV1FFIHRvIGJlIGFib3J0ZWQgKi8KIAlhYnRzaW9jYnAtPmZjcF93cWlkeCA9IGNtZGlvY2ItPmZjcF93cWlkeDsKKwlpZiAoY21kaW9jYi0+aW9jYl9mbGFnICYgTFBGQ19JT19GQ1ApCisJCWFidHNpb2NicC0+aW9jYl9mbGFnIHw9IExQRkNfVVNFX0ZDUFdRSURYOwogCiAJaWYgKHBoYmEtPmxpbmtfc3RhdGUgPj0gTFBGQ19MSU5LX1VQKQogCQlpYWJ0LT51bHBDb21tYW5kID0gQ01EX0FCT1JUX1hSSV9DTjsKQEAgLTczMzAsNiArNzM5MCw4IEBACiAKIAkJLyogQUJUUyBXUUUgbXVzdCBnbyB0byB0aGUgc2FtZSBXUSBhcyB0aGUgV1FFIHRvIGJlIGFib3J0ZWQgKi8KIAkJYWJ0c2lvY2ItPmZjcF93cWlkeCA9IGlvY2JxLT5mY3Bfd3FpZHg7CisJCWlmIChpb2NicS0+aW9jYl9mbGFnICYgTFBGQ19JT19GQ1ApCisJCQlhYnRzaW9jYi0+aW9jYl9mbGFnIHw9IExQRkNfVVNFX0ZDUFdRSURYOwogCiAJCWlmIChscGZjX2lzX2xpbmtfdXAocGhiYSkpCiAJCQlhYnRzaW9jYi0+aW9jYi51bHBDb21tYW5kID0gQ01EX0FCT1JUX1hSSV9DTjsKQEAgLTgzNTksMTEgKzg0MjEsMjQgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19zbGk0X2lvY2JfcGFyYW1fdHJhbnNmZXIgLSBUcmFuc2ZlciBwSW9jYk91dCBhbmQgY21wbCBzdGF0dXMgdG8gcElvY2JJbgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBwSW9jYkluOiBwb2ludGVyIHRvIHRoZSByc3Bpb2NicQorICogQHBJb2NiT3V0OiBwb2ludGVyIHRvIHRoZSBjbWRpb2NicQorICogQHdjcWU6IHBvaW50ZXIgdG8gdGhlIGNvbXBsZXRlIHdjcWUKKyAqCisgKiBUaGlzIHJvdXRpbmUgdHJhbnNmZXJzIHRoZSBmaWVsZHMgb2YgYSBjb21tYW5kIGlvY2JxIHRvIGEgcmVzcG9uc2UgaW9jYnEKKyAqIGJ5IGNvcHlpbmcgYWxsIHRoZSBJT0NCIGZpZWxkcyBmcm9tIGNvbW1hbmQgaW9jYnEgYW5kIHRyYW5zZmVycmluZyB0aGUKKyAqIGNvbXBsZXRpb24gc3RhdHVzIGluZm9ybWF0aW9uIGZyb20gdGhlIGNvbXBsZXRlIHdjcWUuCisgKiovCiBzdGF0aWMgdm9pZAotbHBmY19zbGk0X2lvY2JfcGFyYW1fdHJhbnNmZXIoc3RydWN0IGxwZmNfaW9jYnEgKnBJb2NiSW4sCitscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcElvY2JJbiwKIAkJCSAgICAgIHN0cnVjdCBscGZjX2lvY2JxICpwSW9jYk91dCwKIAkJCSAgICAgIHN0cnVjdCBscGZjX3djcWVfY29tcGxldGUgKndjcWUpCiB7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJc2l6ZV90IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBscGZjX2lvY2JxLCBpb2NiKTsKIAogCW1lbWNweSgoY2hhciAqKXBJb2NiSW4gKyBvZmZzZXQsIChjaGFyICopcElvY2JPdXQgKyBvZmZzZXQsCkBAIC04Mzc3LDggKzg0NTIsMTcgQEAKIAkJCQkJd2NxZS0+dG90YWxfZGF0YV9wbGFjZWQ7CiAJCWVsc2UKIAkJCXBJb2NiSW4tPmlvY2IudW4udWxwV29yZFs0XSA9IHdjcWUtPnBhcmFtZXRlcjsKLQllbHNlCisJZWxzZSB7CiAJCXBJb2NiSW4tPmlvY2IudW4udWxwV29yZFs0XSA9IHdjcWUtPnBhcmFtZXRlcjsKKwkJcElvY2JJbi0+aW9jYi51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZSA9IHdjcWUtPnRvdGFsX2RhdGFfcGxhY2VkOworCX0KKworCS8qIFBpY2sgdXAgSEJBIGV4Y2hhbmdlIGJ1c3kgY29uZGl0aW9uICovCisJaWYgKGJmX2dldChscGZjX3djcWVfY194Yiwgd2NxZSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCXBJb2NiSW4tPmlvY2JfZmxhZyB8PSBMUEZDX0VYQ0hBTkdFX0JVU1k7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJfQogfQogCiAvKioKQEAgLTg0MTksNyArODUwMyw3IEBACiAJfQogCiAJLyogRmFrZSB0aGUgaXJzcGlvY2JxIGFuZCBjb3B5IG5lY2Vzc2FyeSByZXNwb25zZSBpbmZvcm1hdGlvbiAqLwotCWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKGlyc3Bpb2NicSwgY21kaW9jYnEsIHdjcWUpOworCWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKHBoYmEsIGlyc3Bpb2NicSwgY21kaW9jYnEsIHdjcWUpOwogCiAJcmV0dXJuIGlyc3Bpb2NicTsKIH0KQEAgLTg4NDksOCArODkzMyw3IEBACiAJaW50IGVjb3VudCA9IDA7CiAJdWludDE2X3QgY3FpZDsKIAotCWlmIChiZl9nZXQobHBmY19lcWVfbWFqb3JfY29kZSwgZXFlKSAhPSAwIHx8Ci0JICAgIGJmX2dldChscGZjX2VxZV9taW5vcl9jb2RlLCBlcWUpICE9IDApIHsKKwlpZiAoYmZfZ2V0KGxwZmNfZXFlX21ham9yX2NvZGUsIGVxZSkgIT0gMCkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCiAJCQkJIjAzNTkgTm90IGEgdmFsaWQgc2xvdy1wYXRoIGNvbXBsZXRpb24gIgogCQkJCSJldmVudDogbWFqb3Jjb2RlPXgleCwgbWlub3Jjb2RlPXgleFxuIiwKQEAgLTg5NzYsNyArOTA1OSw3IEBACiAJfQogCiAJLyogRmFrZSB0aGUgaXJzcGlvY2IgYW5kIGNvcHkgbmVjZXNzYXJ5IHJlc3BvbnNlIGluZm9ybWF0aW9uICovCi0JbHBmY19zbGk0X2lvY2JfcGFyYW1fdHJhbnNmZXIoJmlyc3Bpb2NicSwgY21kaW9jYnEsIHdjcWUpOworCWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKHBoYmEsICZpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKIAogCS8qIFBhc3MgdGhlIGNtZF9pb2NiIGFuZCB0aGUgcnNwIHN0YXRlIHRvIHRoZSB1cHBlciBsYXllciAqLwogCShjbWRpb2NicS0+aW9jYl9jbXBsKShwaGJhLCBjbWRpb2NicSwgJmlyc3Bpb2NicSk7CkBAIC05MDgyLDggKzkxNjUsNyBAQAogCXVpbnQxNl90IGNxaWQ7CiAJaW50IGVjb3VudCA9IDA7CiAKLQlpZiAodW5saWtlbHkoYmZfZ2V0KGxwZmNfZXFlX21ham9yX2NvZGUsIGVxZSkgIT0gMCkgfHwKLQkgICAgdW5saWtlbHkoYmZfZ2V0KGxwZmNfZXFlX21pbm9yX2NvZGUsIGVxZSkgIT0gMCkpIHsKKwlpZiAodW5saWtlbHkoYmZfZ2V0KGxwZmNfZXFlX21ham9yX2NvZGUsIGVxZSkgIT0gMCkpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAogCQkJCSIwMzY2IE5vdCBhIHZhbGlkIGZhc3QtcGF0aCBjb21wbGV0aW9uICIKIAkJCQkiZXZlbnQ6IG1ham9yY29kZT14JXgsIG1pbm9yY29kZT14JXhcbiIsCkBAIC0xMTg3MSwxMiArMTE5NTMsNiBAQAogewogCWludCByYyA9IDAsIGVycm9yOwogCUxQRkNfTUJPWFFfdCAqbWJveHE7Ci0Jdm9pZCAqdmlydF9hZGRyOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOwotCXVpbnQ4X3QgKmJ5dGVwOwotCXN0cnVjdCBscGZjX21ieF9zZ2Ugc2dlOwotCXVpbnQzMl90IGFsbG9jX2xlbiwgcmVxX2xlbjsKLQlzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsICpyZWFkX2ZjZjsKIAogCXBoYmEtPmZjb2VfZXZlbnR0YWdfYXRfZmNmX3NjYW4gPSBwaGJhLT5mY29lX2V2ZW50dGFnOwogCW1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKQEAgLTExODg3LDQzICsxMTk2MywxOSBAQAogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF9mY2ZzY2FuOwogCX0KLQotCXJlcV9sZW4gPSBzaXplb2Yoc3RydWN0IGZjZl9yZWNvcmQpICsKLQkJICBzaXplb2YodW5pb24gbHBmY19zbGk0X2NmZ19zaGRyKSArIDIgKiBzaXplb2YodWludDMyX3QpOwotCi0JLyogU2V0IHVwIFJFQURfRkNGIFNMSTRfQ09ORklHIG1haWxib3gtaW9jdGwgY29tbWFuZCAqLwotCWFsbG9jX2xlbiA9IGxwZmNfc2xpNF9jb25maWcocGhiYSwgbWJveHEsIExQRkNfTUJPWF9TVUJTWVNURU1fRkNPRSwKLQkJCSBMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUkVBRF9GQ0ZfVEFCTEUsIHJlcV9sZW4sCi0JCQkgTFBGQ19TTEk0X01CWF9ORU1CRUQpOwotCi0JaWYgKGFsbG9jX2xlbiA8IHJlcV9sZW4pIHsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkiMDI5MSBBbGxvY2F0ZWQgRE1BIG1lbW9yeSBzaXplICh4JXgpIGlzICIKLQkJCQkibGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgRE1BIG1lbW9yeSAiCi0JCQkJInNpemUgKHgleClcbiIsIGFsbG9jX2xlbiwgcmVxX2xlbik7Ci0JCWVycm9yID0gLUVOT01FTTsKKwkvKiBDb25zdHJ1Y3QgdGhlIHJlYWQgRkNGIHJlY29yZCBtYWlsYm94IGNvbW1hbmQgKi8KKwlyYyA9IGxwZmNfc2xpNF9tYnhfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIG1ib3hxLCBmY2ZfaW5kZXgpOworCWlmIChyYykgeworCQllcnJvciA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbF9mY2ZzY2FuOwogCX0KLQotCS8qIEdldCB0aGUgZmlyc3QgU0dFIGVudHJ5IGZyb20gdGhlIG5vbi1lbWJlZGRlZCBETUEgbWVtb3J5LiBUaGlzCi0JICogcm91dGluZSBvbmx5IHVzZXMgYSBzaW5nbGUgU0dFLgotCSAqLwotCWxwZmNfc2xpNF9tYnhfc2dlX2dldChtYm94cSwgMCwgJnNnZSk7Ci0JcGh5c19hZGRyID0gZ2V0UGFkZHIoc2dlLnBhX2hpLCBzZ2UucGFfbG8pOwotCXZpcnRfYWRkciA9IG1ib3hxLT5zZ2VfYXJyYXktPmFkZHJbMF07Ci0JcmVhZF9mY2YgPSAoc3RydWN0IGxwZmNfbWJ4X3JlYWRfZmNmX3RibCAqKXZpcnRfYWRkcjsKLQotCS8qIFNldCB1cCBjb21tYW5kIGZpZWxkcyAqLwotCWJmX3NldChscGZjX21ieF9yZWFkX2ZjZl90YmxfaW5keCwgJnJlYWRfZmNmLT51LnJlcXVlc3QsIGZjZl9pbmRleCk7Ci0JLyogUGVyZm9ybSBuZWNlc3NhcnkgZW5kaWFuIGNvbnZlcnNpb24gKi8KLQlieXRlcCA9IHZpcnRfYWRkciArIHNpemVvZih1bmlvbiBscGZjX3NsaTRfY2ZnX3NoZHIpOwotCWxwZmNfc2xpX3BjaW1lbV9iY29weShieXRlcCwgYnl0ZXAsIHNpemVvZih1aW50MzJfdCkpOworCS8qIElzc3VlIHRoZSBtYWlsYm94IGNvbW1hbmQgYXN5bmNocm9ub3VzbHkgKi8KIAltYm94cS0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKIAltYm94cS0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9yZWFkX2ZjZl9yZWNvcmQ7CiAJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLCBNQlhfTk9XQUlUKTsKLQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKQogCQllcnJvciA9IC1FSU87Ci0JfSBlbHNlIHsKKwllbHNlIHsKIAkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCXBoYmEtPmhiYV9mbGFnIHw9IEZDRl9ESVNDX0lOUFJPR1JFU1M7CiAJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CkBAIC0xMTk0Miw2ICsxMTk5NCw5MCBAQAogfQogCiAvKioKKyAqIGxwZmNfbWJ4X2NtcGxfcmVkaXNjX2ZjZl90YWJsZSAtIGNvbXBsZXRpb24gcm91dGluZSBmb3IgcmVkaXNjb3ZlciBGQ0YgdGFibGUKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiByb3V0aW5lIGZvciB0aGUgcmVkaXNjb3ZlciBGQ0YgdGFibGUgbWFpbGJveAorICogY29tbWFuZC4gSWYgdGhlIG1haWxib3ggY29tbWFuZCByZXR1cm5lZCBmYWlsdXJlLCBpdCB3aWxsIHRyeSB0byBzdG9wIHRoZQorICogRkNGIHJlZGlzY292ZXIgd2FpdCB0aW1lci4KKyAqKi8KK3ZvaWQKK2xwZmNfbWJ4X2NtcGxfcmVkaXNjX2ZjZl90YWJsZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveCkKK3sKKwlzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgKnJlZGlzY19mY2Y7CisJdWludDMyX3Qgc2hkcl9zdGF0dXMsIHNoZHJfYWRkX3N0YXR1czsKKworCXJlZGlzY19mY2YgPSAmbWJveC0+dS5tcWUudW4ucmVkaXNjX2ZjZl90Ymw7CisKKwlzaGRyX3N0YXR1cyA9IGJmX2dldChscGZjX21ib3hfaGRyX3N0YXR1cywKKwkJCSAgICAgJnJlZGlzY19mY2YtPmhlYWRlci5jZmdfc2hkci5yZXNwb25zZSk7CisJc2hkcl9hZGRfc3RhdHVzID0gYmZfZ2V0KGxwZmNfbWJveF9oZHJfYWRkX3N0YXR1cywKKwkJCSAgICAgJnJlZGlzY19mY2YtPmhlYWRlci5jZmdfc2hkci5yZXNwb25zZSk7CisJaWYgKHNoZHJfc3RhdHVzIHx8IHNoZHJfYWRkX3N0YXR1cykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCisJCQkJIjI3NDYgUmVxdWVzdGluZyBmb3IgRkNGIHJlZGlzY292ZXJ5IGZhaWxlZCAiCisJCQkJInN0YXR1cyB4JXggYWRkX3N0YXR1cyB4JXhcbiIsCisJCQkJc2hkcl9zdGF0dXMsIHNoZHJfYWRkX3N0YXR1cyk7CisJCS8qCisJCSAqIFJlcXVlc3QgZmFpbGVkLCBsYXN0IHJlc29ydCB0byByZS10cnkgY3VycmVudAorCQkgKiByZWdpc3RlcmVkIEZDRiBlbnRyeQorCQkgKi8KKwkJbHBmY19yZXRyeV9wcG9ydF9kaXNjb3ZlcnkocGhiYSk7CisJfSBlbHNlCisJCS8qCisJCSAqIFN0YXJ0IEZDRiByZWRpc2NvdmVyeSB3YWl0IHRpbWVyIGZvciBwZW5kaW5nIEZDRgorCQkgKiBiZWZvcmUgcmVzY2FuIEZDRiByZWNvcmQgdGFibGUuCisJCSAqLworCQlscGZjX2ZjZl9yZWRpc2Nfd2FpdF9zdGFydF90aW1lcihwaGJhKTsKKworCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKK30KKworLyoqCisgKiBscGZjX3NsaTRfcmVkaXNjX2FsbF9mY2YgLSBSZXF1ZXN0IHRvIHJlZGlzY292ZXIgZW50aXJlIEZDRiB0YWJsZSBieSBwb3J0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gcmVxdWVzdCBmb3IgcmVkaXNjb3Zlcnkgb2YgdGhlIGVudGlyZSBGQ0YgdGFibGUKKyAqIGJ5IHRoZSBwb3J0LgorICoqLworaW50CitscGZjX3NsaTRfcmVkaXNjX2ZjZl90YWJsZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCXN0cnVjdCBscGZjX21ieF9yZWRpc2NfZmNmX3RibCAqcmVkaXNjX2ZjZjsKKwlpbnQgcmMsIGxlbmd0aDsKKworCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbWJveCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCisJCQkJIjI3NDUgRmFpbGVkIHRvIGFsbG9jYXRlIG1ib3ggZm9yICIKKwkJCQkicmVxdWVzdGluZyBGQ0YgcmVkaXNjb3Zlci5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlsZW5ndGggPSAoc2l6ZW9mKHN0cnVjdCBscGZjX21ieF9yZWRpc2NfZmNmX3RibCkgLQorCQkgIHNpemVvZihzdHJ1Y3QgbHBmY19zbGk0X2NmZ19taGRyKSk7CisJbHBmY19zbGk0X2NvbmZpZyhwaGJhLCBtYm94LCBMUEZDX01CT1hfU1VCU1lTVEVNX0ZDT0UsCisJCQkgTFBGQ19NQk9YX09QQ09ERV9GQ09FX1JFRElTQ09WRVJfRkNGLAorCQkJIGxlbmd0aCwgTFBGQ19TTEk0X01CWF9FTUJFRCk7CisKKwlyZWRpc2NfZmNmID0gJm1ib3gtPnUubXFlLnVuLnJlZGlzY19mY2ZfdGJsOworCS8qIFNldCBjb3VudCB0byAwIGZvciBpbnZhbGlkYXRpbmcgdGhlIGVudGlyZSBGQ0YgZGF0YWJhc2UgKi8KKwliZl9zZXQobHBmY19tYnhfcmVkaXNjX2ZjZl9jb3VudCwgcmVkaXNjX2ZjZiwgMCk7CisKKwkvKiBJc3N1ZSB0aGUgbWFpbGJveCBjb21tYW5kIGFzeW5jaHJvbm91c2x5ICovCisJbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwltYm94LT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX3JlZGlzY19mY2ZfdGFibGU7CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsIE1CWF9OT1dBSVQpOworCisJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogbHBmY19zbGlfcmVhZF9saW5rX3N0ZSAtIFJlYWQgcmVnaW9uIDIzIHRvIGRlY2lkZSBpZiBsaW5rIGlzIGRpc2FibGVkLgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMTIwNjksMyArMTIyMDUsNDggQEAKIAlrZnJlZShyZ24yM19kYXRhKTsKIAlyZXR1cm47CiB9CisKKy8qKgorICogbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveCAtIEZyZWUgdXAgdnBvcnQgZGlzY292ZXJ5IG1haWxib3ggY29tbWFuZHMuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gdnBvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlIHRocm91Z2ggdGhlIG1haWxib3hxIGFuZCBjbGVhbiB1cCBhbGwgUkVHX0xPR0lOCisgKiBhbmQgUkVHX1ZQSSBtYWlsYm94IGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdnBvcnQuIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCB3aGVuIGRyaXZlciB3YW50IHRvIHJlc3RhcnQgZGlzY292ZXJ5IG9mIHRoZSB2cG9ydCBkdWUgdG8KKyAqIGEgQ2xlYXIgVmlydHVhbCBMaW5rIGV2ZW50LgorICoqLwordm9pZAorbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJTFBGQ19NQk9YUV90ICptYiwgKm5leHRtYjsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKm1wOworCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1iLCBuZXh0bWIsICZwaGJhLT5zbGkubWJveHEsIGxpc3QpIHsKKwkJaWYgKG1iLT52cG9ydCAhPSB2cG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgobWItPnUubWIubWJ4Q29tbWFuZCAhPSBNQlhfUkVHX0xPR0lONjQpICYmCisJCQkobWItPnUubWIubWJ4Q29tbWFuZCAhPSBNQlhfUkVHX1ZQSSkpCisJCQljb250aW51ZTsKKworCQlpZiAobWItPnUubWIubWJ4Q29tbWFuZCA9PSBNQlhfUkVHX0xPR0lONjQpIHsKKwkJCW1wID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSAobWItPmNvbnRleHQxKTsKKwkJCWlmIChtcCkgeworCQkJCV9fbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKKwkJCQlrZnJlZShtcCk7CisJCQl9CisJCX0KKwkJbGlzdF9kZWwoJm1iLT5saXN0KTsKKwkJbWVtcG9vbF9mcmVlKG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwl9CisJbWIgPSBwaGJhLT5zbGkubWJveF9hY3RpdmU7CisJaWYgKG1iICYmIChtYi0+dnBvcnQgPT0gdnBvcnQpKSB7CisJCWlmICgobWItPnUubWIubWJ4Q29tbWFuZCA9PSBNQlhfUkVHX0xPR0lONjQpIHx8CisJCQkobWItPnUubWIubWJ4Q29tbWFuZCA9PSBNQlhfUkVHX1ZQSSkpCisJCQltYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKaW5kZXggYmEzOGRlMy4uZGZjZjU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCkBAIC01MywxNyArNTMsMTkgQEAKIAogCUlPQ0JfdCBpb2NiOwkJLyogSU9DQiBjbWQgKi8KIAl1aW50OF90IHJldHJ5OwkJLyogcmV0cnkgY291bnRlciBmb3IgSU9DQiBjbWQgLSBpZiBuZWVkZWQgKi8KLQl1aW50OF90IGlvY2JfZmxhZzsKKwl1aW50MTZfdCBpb2NiX2ZsYWc7CiAjZGVmaW5lIExQRkNfSU9fTElCREZDCQkxCS8qIGxpYmRmYyBpb2NiICovCiAjZGVmaW5lIExQRkNfSU9fV0FLRQkJMgkvKiBIaWdoIFByaW9yaXR5IFF1ZXVlIHNpZ25hbCBmbGFnICovCiAjZGVmaW5lIExQRkNfSU9fRkNQCQk0CS8qIEZDUCBjb21tYW5kIC0tIGlvY2JxIGluIHNjc2lfYnVmICovCiAjZGVmaW5lIExQRkNfRFJJVkVSX0FCT1JURUQJOAkvKiBkcml2ZXIgYWJvcnRlZCB0aGlzIHJlcXVlc3QgKi8KICNkZWZpbmUgTFBGQ19JT19GQUJSSUMJCTB4MTAJLyogSW9jYiBzZW5kIHVzaW5nIGZhYnJpYyBzY2hlZHVsZXIgKi8KICNkZWZpbmUgTFBGQ19ERUxBWV9NRU1fRlJFRQkweDIwICAgIC8qIERlZmVyIGZyZWUnaW5nIG9mIEZDIGRhdGEgKi8KLSNkZWZpbmUgTFBGQ19GSVBfRUxTX0lEX01BU0sJMHhjMAkvKiBFTFNfSUQgcmFuZ2UgMC0zICovCi0jZGVmaW5lIExQRkNfRklQX0VMU19JRF9TSElGVAk2CisjZGVmaW5lIExQRkNfRVhDSEFOR0VfQlVTWQkweDQwICAgIC8qIFNMSTQgaGJhIHJlcG9ydGVkIFhCIGluIHJlc3BvbnNlICovCisjZGVmaW5lIExQRkNfVVNFX0ZDUFdRSURYCTB4ODAgICAgLyogU3VibWl0IHRvIHNwZWNpZmllZCBGQ1BXUSBpbmRleCAqLwogCi0JdWludDhfdCBhYm9ydF9jb3VudDsKKyNkZWZpbmUgTFBGQ19GSVBfRUxTX0lEX01BU0sJMHhjMDAwCS8qIEVMU19JRCByYW5nZSAwLTMsIG5vbi1zaGlmdGVkIG1hc2sgKi8KKyNkZWZpbmUgTFBGQ19GSVBfRUxTX0lEX1NISUZUCTE0CisKIAl1aW50OF90IHJzdmQyOwogCXVpbnQzMl90IGRydnJUaW1lb3V0OwkvKiBkcml2ZXIgdGltZW91dCBpbiBzZWNvbmRzICovCiAJdWludDMyX3QgZmNwX3dxaWR4OwkvKiBpbmRleCB0byBGQ1Agd29yayBxdWV1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaAppbmRleCA0NGU1ZjU3Li44NjMwODgzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKQEAgLTIyLDYgKzIyLDEwIEBACiAjZGVmaW5lIExQRkNfUkVMRUFTRV9OT1RJRklDQVRJT05fSU5URVJWQUwJMzIKICNkZWZpbmUgTFBGQ19HRVRfUUVfUkVMX0lOVAkJCTMyCiAjZGVmaW5lIExQRkNfUlBJX0xPV19XQVRFUl9NQVJLCQkJMTAKKworLyogQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBmb3Igd2FpdGluZyBGQ0YgcmVkaXNjb3ZlcnkgdG8gY29tcGxldGUgKi8KKyNkZWZpbmUgTFBGQ19GQ0ZfUkVESVNDT1ZFUl9XQUlUX1RNTwkJMjAwMCAvKiBtc2VjICovCisKIC8qIE51bWJlciBvZiBTR0wgZW50cmllcyBjYW4gYmUgcG9zdGVkIGluIGEgNEtCIG5vbmVtYmVkZGVkIG1ib3ggY29tbWFuZCAqLwogI2RlZmluZSBMUEZDX05FTUJFRF9NQk9YX1NHTF9DTlQJCTI1NAogCkBAIC0xMjYsMjQgKzEzMCwzNiBAQAogCXVpbnQ4X3Qgc3RhdHVzOwogCXVpbnQ4X3QgcGh5c2ljYWw7CiAJdWludDhfdCBmYXVsdDsKKwl1aW50MTZfdCBsb2dpY2FsX3NwZWVkOworfTsKKworc3RydWN0IGxwZmNfZmNmX3JlYyB7CisJdWludDhfdCAgZmFicmljX25hbWVbOF07CisJdWludDhfdCAgc3dpdGNoX25hbWVbOF07CisJdWludDhfdCAgbWFjX2FkZHJbNl07CisJdWludDE2X3QgZmNmX2luZHg7CisJdWludDMyX3QgcHJpb3JpdHk7CisJdWludDE2X3Qgdmxhbl9pZDsKKwl1aW50MzJfdCBhZGRyX21vZGU7CisJdWludDMyX3QgZmxhZzsKKyNkZWZpbmUgQk9PVF9FTkFCTEUJMHgwMQorI2RlZmluZSBSRUNPUkRfVkFMSUQJMHgwMgogfTsKIAogc3RydWN0IGxwZmNfZmNmIHsKLQl1aW50OF90CSBmYWJyaWNfbmFtZVs4XTsKLQl1aW50OF90CSBzd2l0Y2hfbmFtZVs4XTsKLQl1aW50OF90ICBtYWNfYWRkcls2XTsKLQl1aW50MTZfdCBmY2ZfaW5keDsKIAl1aW50MTZfdCBmY2ZpOwogCXVpbnQzMl90IGZjZl9mbGFnOwogI2RlZmluZSBGQ0ZfQVZBSUxBQkxFCTB4MDEgLyogRkNGIGF2YWlsYWJsZSBmb3IgZGlzY292ZXJ5ICovCiAjZGVmaW5lIEZDRl9SRUdJU1RFUkVECTB4MDIgLyogRkNGIHJlZ2lzdGVyZWQgd2l0aCBGVyAqLwotI2RlZmluZSBGQ0ZfRElTQ09WRVJFRAkweDA0IC8qIEZDRiBkaXNjb3Zlcnkgc3RhcnRlZCAgKi8KLSNkZWZpbmUgRkNGX0JPT1RfRU5BQkxFIDB4MDggLyogQm9vdCBiaW9zIHVzZSB0aGlzIEZDRiAqLwotI2RlZmluZSBGQ0ZfSU5fVVNFCTB4MTAgLyogQXRsZWFzdCBvbmUgZGlzY292ZXJ5IGNvbXBsZXRlZCAqLwotI2RlZmluZSBGQ0ZfVkFMSURfVkxBTgkweDIwIC8qIFVzZSB0aGUgdmxhbiBpZCBzcGVjaWZpZWQgKi8KLQl1aW50MzJfdCBwcmlvcml0eTsKKyNkZWZpbmUgRkNGX1NDQU5fRE9ORQkweDA0IC8qIEZDRiB0YWJsZSBzY2FuIGRvbmUgKi8KKyNkZWZpbmUgRkNGX0lOX1VTRQkweDA4IC8qIEF0bGVhc3Qgb25lIGRpc2NvdmVyeSBjb21wbGV0ZWQgKi8KKyNkZWZpbmUgRkNGX1JFRElTQ19QRU5ECTB4MTAgLyogRkNGIHJlZGlzY292ZXJ5IHBlbmRpbmcgKi8KKyNkZWZpbmUgRkNGX1JFRElTQ19FVlQJMHgyMCAvKiBGQ0YgcmVkaXNjb3ZlcnkgZXZlbnQgdG8gd29ya2VyIHRocmVhZCAqLworI2RlZmluZSBGQ0ZfUkVESVNDX0ZPVgkweDQwIC8qIFBvc3QgRkNGIHJlZGlzY292ZXJ5IGZhc3QgZmFpbG92ZXIgKi8KIAl1aW50MzJfdCBhZGRyX21vZGU7Ci0JdWludDE2X3Qgdmxhbl9pZDsKKwlzdHJ1Y3QgbHBmY19mY2ZfcmVjIGN1cnJlbnRfcmVjOworCXN0cnVjdCBscGZjX2ZjZl9yZWMgZmFpbG92ZXJfcmVjOworCXN0cnVjdCB0aW1lcl9saXN0IHJlZGlzY193YWl0OwogfTsKIAogI2RlZmluZSBMUEZDX1JFR0lPTjIzX1NJR05BVFVSRSAiUkcyMyIKQEAgLTI0OCw3ICsyNjQsMTAgQEAKICNkZWZpbmUgU0xJNF9DVF9WRkkgMgogI2RlZmluZSBTTEk0X0NUX0ZDRkkgMwogCi0jZGVmaW5lIExQRkNfU0xJNF9NQVhfU0VHTUVOVF9TSVpFIDB4MTAwMDAKKyNkZWZpbmUgTFBGQ19TTEk0X0ZMMV9NQVhfU0VHTUVOVF9TSVpFCTB4MTAwMDAKKyNkZWZpbmUgTFBGQ19TTEk0X0ZMMV9NQVhfQlVGX1NJWkUJMFgyMDAwCisjZGVmaW5lIExQRkNfU0xJNF9NSU5fQlVGX1NJWkUJCTB4NDAwCisjZGVmaW5lIExQRkNfU0xJNF9NQVhfQlVGX1NJWkUJCTB4MjAwMDAKIAogLyoKICAqIFNMSTQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzCkBAIC0yODIsNiArMzAxLDQyIEBACiAJc3RydWN0IGxwZmNfaGJhICpwaGJhOwogfTsKIAorLyogUG9ydCBDYXBhYmlsaXRpZXMgZm9yIFNMSTQgUGFyYW1ldGVycyAqLworc3RydWN0IGxwZmNfcGNfc2xpNF9wYXJhbXMgeworCXVpbnQzMl90IHN1cHBvcnRlZDsKKwl1aW50MzJfdCBpZl90eXBlOworCXVpbnQzMl90IHNsaV9yZXY7CisJdWludDMyX3Qgc2xpX2ZhbWlseTsKKwl1aW50MzJfdCBmZWF0dXJlbGV2ZWxfMTsKKwl1aW50MzJfdCBmZWF0dXJlbGV2ZWxfMjsKKwl1aW50MzJfdCBwcm90b190eXBlczsKKyNkZWZpbmUgTFBGQ19TTEk0X1BST1RPX0ZDT0UJMHgwMDAwMDAxCisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19GQwkweDAwMDAwMDIKKyNkZWZpbmUgTFBGQ19TTEk0X1BST1RPX05JQwkweDAwMDAwMDQKKyNkZWZpbmUgTFBGQ19TTEk0X1BST1RPX0lTQ1NJCTB4MDAwMDAwOAorI2RlZmluZSBMUEZDX1NMSTRfUFJPVE9fUkRNQQkweDAwMDAwMTAKKwl1aW50MzJfdCBzZ2Vfc3VwcF9sZW47CisJdWludDMyX3QgaWZfcGFnZV9zejsKKwl1aW50MzJfdCBycV9kYl93aW5kb3c7CisJdWludDMyX3QgbG9vcGJrX3Njb3BlOworCXVpbnQzMl90IGVxX3BhZ2VzX21heDsKKwl1aW50MzJfdCBlcWVfc2l6ZTsKKwl1aW50MzJfdCBjcV9wYWdlc19tYXg7CisJdWludDMyX3QgY3FlX3NpemU7CisJdWludDMyX3QgbXFfcGFnZXNfbWF4OworCXVpbnQzMl90IG1xZV9zaXplOworCXVpbnQzMl90IG1xX2VsZW1fY250OworCXVpbnQzMl90IHdxX3BhZ2VzX21heDsKKwl1aW50MzJfdCB3cWVfc2l6ZTsKKwl1aW50MzJfdCBycV9wYWdlc19tYXg7CisJdWludDMyX3QgcnFlX3NpemU7CisJdWludDMyX3QgaGRyX3BhZ2VzX21heDsKKwl1aW50MzJfdCBoZHJfc2l6ZTsKKwl1aW50MzJfdCBoZHJfcHBfYWxpZ247CisJdWludDMyX3Qgc2dsX3BhZ2VzX21heDsKKwl1aW50MzJfdCBzZ2xfcHBfYWxpZ247Cit9OworCiAvKiBTTEk0IEhCQSBkYXRhIHN0cnVjdHVyZSBlbnRyaWVzICovCiBzdHJ1Y3QgbHBmY19zbGk0X2hiYSB7CiAJdm9pZCBfX2lvbWVtICpjb25mX3JlZ3NfbWVtbWFwX3A7IC8qIEtlcm5lbCBtZW1vcnkgbWFwcGVkIGFkZHJlc3MgZm9yCkBAIC0yOTUsNyArMzUwLDcgQEAKIAl2b2lkIF9faW9tZW0gKlVFUlJISXJlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gVUVSUl9TVEFUVVNfSEkgcmVnaXN0ZXIgKi8KIAl2b2lkIF9faW9tZW0gKlVFTUFTS0xPcmVnYWRkcjsgLyogQWRkcmVzcyB0byBVRV9NQVNLX0xPIHJlZ2lzdGVyICovCiAJdm9pZCBfX2lvbWVtICpVRU1BU0tISXJlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gVUVfTUFTS19ISSByZWdpc3RlciAqLwotCXZvaWQgX19pb21lbSAqU0NSQVRDSFBBRHJlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gc2NyYXRjaHBhZCByZWdpc3RlciAqLworCXZvaWQgX19pb21lbSAqU0xJSU5URnJlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gU0xJX0lOVEYgcmVnaXN0ZXIgKi8KIAkvKiBCQVIxIEZDb0UgZnVuY3Rpb24gQ1NSIHJlZ2lzdGVyIG1lbW9yeSBtYXAgKi8KIAl2b2lkIF9faW9tZW0gKlNUQXJlZ2FkZHI7ICAgIC8qIEFkZHJlc3MgdG8gSFNUX1NUQVRFIHJlZ2lzdGVyICovCiAJdm9pZCBfX2lvbWVtICpJU1JyZWdhZGRyOyAgICAvKiBBZGRyZXNzIHRvIEhTVF9JU1IgcmVnaXN0ZXIgKi8KQEAgLTMxMCw2ICszNjUsOCBAQAogCiAJdWludDMyX3QgdWVfbWFza19sbzsKIAl1aW50MzJfdCB1ZV9tYXNrX2hpOworCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHNsaV9pbnRmOworCXN0cnVjdCBscGZjX3BjX3NsaTRfcGFyYW1zIHBjX3NsaTRfcGFyYW1zOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CiAJdWludDMyX3QgY2ZnX2VxbjsKIAlzdHJ1Y3QgbHBmY19mY3BfZXFfaGRsICpmY3BfZXFfaGRsOyAvKiBGQ1AgcGVyLVdRIGhhbmRsZSAqLwpAQCAtNDA2LDYgKzQ2Myw4IEBACiB2b2lkIGxwZmNfc2xpNF9tYnhfc2dlX3NldChzdHJ1Y3QgbHBmY01ib3hxICosIHVpbnQzMl90LCBkbWFfYWRkcl90LCB1aW50MzJfdCk7CiB2b2lkIGxwZmNfc2xpNF9tYnhfc2dlX2dldChzdHJ1Y3QgbHBmY01ib3hxICosIHVpbnQzMl90LAogCQkJICAgc3RydWN0IGxwZmNfbWJ4X3NnZSAqKTsKK2ludCBscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNNYm94cSAqLAorCQkJCSAgdWludDE2X3QpOwogCiB2b2lkIGxwZmNfc2xpNF9oYmFfcmVzZXQoc3RydWN0IGxwZmNfaGJhICopOwogc3RydWN0IGxwZmNfcXVldWUgKmxwZmNfc2xpNF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsCkBAIC00NDgsNiArNTA3LDcgQEAKIHZvaWQgbHBmY19zbGk0X2ZyZWVfcnBpKHN0cnVjdCBscGZjX2hiYSAqLCBpbnQpOwogdm9pZCBscGZjX3NsaTRfcmVtb3ZlX3JwaXMoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3NsaTRfYXN5bmNfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfc2xpNF9yZXN1bWVfcnBpKHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogdm9pZCBscGZjX3NsaTRfZmNwX3hyaV9hYm9ydF9ldmVudF9wcm9jKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zbGk0X2Vsc194cmlfYWJvcnRfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCmluZGV4IDc5MmY3MjIuLmFjMjc2YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4zLjciCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy45IgogI2RlZmluZSBMUEZDX0RSSVZFUl9OQU1FCQkibHBmYyIKICNkZWZpbmUgTFBGQ19TUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOnNwIgogI2RlZmluZSBMUEZDX0ZQX0RSSVZFUl9IQU5ETEVSX05BTUUJImxwZmM6ZnAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKaW5kZXggZTNjN2ZhNi4uZGM4NmU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwpAQCAtMzg5LDcgKzM4OSw3IEBACiAJICogYnkgdGhlIHBvcnQuCiAJICovCiAJaWYgKChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpICYmCi0JICAgIChwcG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkpIHsKKwkJKHBwb3J0LT5mY19mbGFnICYgRkNfVkZJX1JFR0lTVEVSRUQpKSB7CiAJCXJjID0gbHBmY19zbGk0X2luaXRfdnBpKHBoYmEsIHZwaSk7CiAJCWlmIChyYykgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfVlBPUlQsCkBAIC01MDUsNiArNTA1LDcgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAqKHN0cnVjdCBscGZjX3Zwb3J0ICoqKWZjX3Zwb3J0LT5kZF9kYXRhOwogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKIAogCWlmICgocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19VUCkgfHwKIAkgICAgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApKSB7CkBAIC01MTIsMTAgKzUxMywxMCBAQAogCQlyZXR1cm4gVlBPUlRfT0s7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+bG9hZF9mbGFnIHw9IEZDX0xPQURJTkc7CiAJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKLQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCS8qIFVzZSB0aGUgUGh5c2ljYWwgbm9kZXMgRmFicmljIE5ETFAgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsaW5rIGlzCiAJICogdXAgYW5kIHJlYWR5IHRvIEZESVNDLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21hY19lc3AuYyBiL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMKaW5kZXggYzI0ZTg2Zi4uNGE5MGVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21hY19lc3AuYworKysgYi9kcml2ZXJzL3Njc2kvbWFjX2VzcC5jCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KICNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CiAKQEAgLTUzLDcgKzUyLDYgQEAKIAl2b2lkIF9faW9tZW0gKnBkbWFfaW87CiAJaW50IGVycm9yOwogfTsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbnRlcm5hbF9wZGV2LCAqZXh0ZXJuYWxfcGRldjsKIHN0YXRpYyBzdHJ1Y3QgZXNwICplc3BfY2hpcHNbMl07CiAKICNkZWZpbmUgTUFDX0VTUF9HRVRfUFJJVihlc3ApICgoc3RydWN0IG1hY19lc3BfcHJpdiAqKSBcCkBAIC0yNzksMjQgKzI3NywyNyBAQAogICogUHJvZ3JhbW1lZCBJTyByb3V0aW5lcyBmb2xsb3cuCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbWFjX2VzcF93YWl0X2Zvcl9maWZvKHN0cnVjdCBlc3AgKmVzcCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1hY19lc3Bfd2FpdF9mb3JfZmlmbyhzdHJ1Y3QgZXNwICplc3ApCiB7CiAJaW50IGkgPSA1MDAwMDA7CiAKIAlkbyB7Ci0JCWlmIChlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTKQotCQkJcmV0dXJuIDA7CisJCXVuc2lnbmVkIGludCBmYnl0ZXMgPSBlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTOworCisJCWlmIChmYnl0ZXMpCisJCQlyZXR1cm4gZmJ5dGVzOwogCiAJCXVkZWxheSgyKTsKIAl9IHdoaWxlICgtLWkpOwogCiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRklGTyBpcyBlbXB0eSAoc3JlZyAlMDJ4KVxuIiwKIAkgICAgICAgZXNwX3JlYWQ4KEVTUF9TVEFUVVMpKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbWFjX2VzcF93YWl0X2Zvcl9pbnRyKHN0cnVjdCBlc3AgKmVzcCkKIHsKKwlzdHJ1Y3QgbWFjX2VzcF9wcml2ICptZXAgPSBNQUNfRVNQX0dFVF9QUklWKGVzcCk7CiAJaW50IGkgPSA1MDAwMDA7CiAKIAlkbyB7CkBAIC0zMDgsNiArMzA5LDcgQEAKIAl9IHdoaWxlICgtLWkpOwogCiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSVJRIHRpbWVvdXQgKHNyZWcgJTAyeClcbiIsIGVzcC0+c3JlZyk7CisJbWVwLT5lcnJvciA9IDE7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTM0NywxMSArMzQ5LDEwIEBACiBzdGF0aWMgdm9pZCBtYWNfZXNwX3NlbmRfcGlvX2NtZChzdHJ1Y3QgZXNwICplc3AsIHUzMiBhZGRyLCB1MzIgZXNwX2NvdW50LAogCQkJCSB1MzIgZG1hX2NvdW50LCBpbnQgd3JpdGUsIHU4IGNtZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtYWNfZXNwX3ByaXYgKm1lcCA9IE1BQ19FU1BfR0VUX1BSSVYoZXNwKTsKIAl1OCAqZmlmbyA9IGVzcC0+cmVncyArIEVTUF9GREFUQSAqIDE2OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWRpc2FibGVfaXJxKGVzcC0+aG9zdC0+aXJxKTsKIAogCWNtZCAmPSB+RVNQX0NNRF9ETUE7CiAJbWVwLT5lcnJvciA9IDA7CkBAIC0zNTksMTEgKzM2MCwzNSBAQAogCWlmICh3cml0ZSkgewogCQlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOwogCi0JCWlmICghbWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpIHsKLQkJCWlmIChtYWNfZXNwX3dhaXRfZm9yX2ZpZm8oZXNwKSkKLQkJCQllc3BfY291bnQgPSAwOwotCQl9IGVsc2UgewotCQkJZXNwX2NvdW50ID0gMDsKKwkJd2hpbGUgKDEpIHsKKwkJCXVuc2lnbmVkIGludCBuOworCisJCQluID0gbWFjX2VzcF93YWl0X2Zvcl9maWZvKGVzcCk7CisJCQlpZiAoIW4pCisJCQkJYnJlYWs7CisKKwkJCWlmIChuID4gZXNwX2NvdW50KQorCQkJCW4gPSBlc3BfY291bnQ7CisJCQllc3BfY291bnQgLT0gbjsKKworCQkJTUFDX0VTUF9QSU9fTE9PUCgiJTJALCUwQCsiLCBuKTsKKworCQkJaWYgKCFlc3BfY291bnQpCisJCQkJYnJlYWs7CisKKwkJCWlmIChtYWNfZXNwX3dhaXRfZm9yX2ludHIoZXNwKSkKKwkJCQlicmVhazsKKworCQkJaWYgKCgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9ESVApICYmCisJCQkgICAgKChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgIT0gRVNQX01JUCkpCisJCQkJYnJlYWs7CisKKwkJCWVzcC0+aXJlZyA9IGVzcF9yZWFkOChFU1BfSU5UUlBUKTsKKwkJCWlmICgoZXNwLT5pcmVnICYgKEVTUF9JTlRSX0RDIHwgRVNQX0lOVFJfQlNFUlYpKSAhPQorCQkJICAgIEVTUF9JTlRSX0JTRVJWKQorCQkJCWJyZWFrOworCisJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX1RJKTsKIAkJfQogCX0gZWxzZSB7CiAJCXNjc2lfZXNwX2NtZChlc3AsIEVTUF9DTURfRkxVU0gpOwpAQCAtMzc0LDQ3ICszOTksMjQgQEAKIAkJCU1BQ19FU1BfUElPX0xPT1AoIiUwQCssJTJAIiwgZXNwX2NvdW50KTsKIAogCQlzY3NpX2VzcF9jbWQoZXNwLCBjbWQpOwotCX0KIAotCXdoaWxlIChlc3BfY291bnQpIHsKLQkJdW5zaWduZWQgaW50IG47CisJCXdoaWxlIChlc3BfY291bnQpIHsKKwkJCXVuc2lnbmVkIGludCBuOwogCi0JCWlmIChtYWNfZXNwX3dhaXRfZm9yX2ludHIoZXNwKSkgewotCQkJbWVwLT5lcnJvciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChlc3AtPnNyZWcgJiBFU1BfU1RBVF9TUEFNKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJncm9zcyBlcnJvclxuIik7Ci0JCQltZXAtPmVycm9yID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJbiA9IGVzcF9yZWFkOChFU1BfRkZMQUdTKSAmIEVTUF9GRl9GQllURVM7Ci0KLQkJaWYgKHdyaXRlKSB7Ci0JCQlpZiAobiA+IGVzcF9jb3VudCkKLQkJCQluID0gZXNwX2NvdW50OwotCQkJZXNwX2NvdW50IC09IG47Ci0KLQkJCU1BQ19FU1BfUElPX0xPT1AoIiUyQCwlMEArIiwgbik7Ci0KLQkJCWlmICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spID09IEVTUF9TVEFUUCkKKwkJCWlmIChtYWNfZXNwX3dhaXRfZm9yX2ludHIoZXNwKSkKIAkJCQlicmVhazsKIAotCQkJaWYgKGVzcF9jb3VudCkgewotCQkJCWVzcC0+aXJlZyA9IGVzcF9yZWFkOChFU1BfSU5UUlBUKTsKLQkJCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfREMpCi0JCQkJCWJyZWFrOworCQkJaWYgKCgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9ET1ApICYmCisJCQkgICAgKChlc3AtPnNyZWcgJiBFU1BfU1RBVF9QTUFTSykgIT0gRVNQX01PUCkpCisJCQkJYnJlYWs7CiAKLQkJCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX1RJKTsKLQkJCX0KLQkJfSBlbHNlIHsKIAkJCWVzcC0+aXJlZyA9IGVzcF9yZWFkOChFU1BfSU5UUlBUKTsKLQkJCWlmIChlc3AtPmlyZWcgJiBFU1BfSU5UUl9EQykKKwkJCWlmICgoZXNwLT5pcmVnICYgKEVTUF9JTlRSX0RDIHwgRVNQX0lOVFJfQlNFUlYpKSAhPQorCQkJICAgIEVTUF9JTlRSX0JTRVJWKQogCQkJCWJyZWFrOwogCi0JCQluID0gTUFDX0VTUF9GSUZPX1NJWkUgLSBuOworCQkJbiA9IE1BQ19FU1BfRklGT19TSVpFIC0KKwkJCSAgICAoZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUyk7CiAJCQlpZiAobiA+IGVzcF9jb3VudCkKIAkJCQluID0gZXNwX2NvdW50OwogCkBAIC00MjksNyArNDMxLDcgQEAKIAkJfQogCX0KIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwllbmFibGVfaXJxKGVzcC0+aG9zdC0+aXJxKTsKIH0KIAogc3RhdGljIGludCBtYWNfZXNwX2lycV9wZW5kaW5nKHN0cnVjdCBlc3AgKmVzcCkKQEAgLTQ5MiwyOSArNDk0LDEyIEBACiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgZXNwICplc3A7CiAJaW50IGVycjsKLQlpbnQgY2hpcHNfcHJlc2VudDsKIAlzdHJ1Y3QgbWFjX2VzcF9wcml2ICptZXA7CiAKIAlpZiAoIU1BQ0hfSVNfTUFDKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+c2NzaV90eXBlKSB7Ci0JY2FzZSBNQUNfU0NTSV9RVUFEUkE6Ci0JY2FzZSBNQUNfU0NTSV9RVUFEUkEzOgotCQljaGlwc19wcmVzZW50ID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBNQUNfU0NTSV9RVUFEUkEyOgotCQlpZiAoKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9ROTAwKSB8fAotCQkgICAgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9ROTUwKSkKLQkJCWNoaXBzX3ByZXNlbnQgPSAyOwotCQllbHNlCi0JCQljaGlwc19wcmVzZW50ID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJY2hpcHNfcHJlc2VudCA9IDA7Ci0JfQotCi0JaWYgKGRldi0+aWQgKyAxID4gY2hpcHNfcHJlc2VudCkKKwlpZiAoZGV2LT5pZCA+IDEpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyh0cG50LCBzaXplb2Yoc3RydWN0IGVzcCkpOwpAQCAtNjM5LDU1ICs2MjQsMjYgQEAKIAkucHJvYmUgICAgPSBlc3BfbWFjX3Byb2JlLAogCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGVzcF9tYWNfcmVtb3ZlKSwKIAkuZHJpdmVyICAgPSB7Ci0JCS5uYW1lICAgICA9IERSVl9NT0RVTEVfTkFNRSwKKwkJLm5hbWUJPSBEUlZfTU9EVUxFX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYWNfZXNwX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlc3BfbWFjX2RyaXZlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWludGVybmFsX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJWX01PRFVMRV9OQU1FLCAwKTsKLQlpZiAoaW50ZXJuYWxfcGRldiAmJiBwbGF0Zm9ybV9kZXZpY2VfYWRkKGludGVybmFsX3BkZXYpKSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQoaW50ZXJuYWxfcGRldik7Ci0JCWludGVybmFsX3BkZXYgPSBOVUxMOwotCX0KLQlleHRlcm5hbF9wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVl9NT0RVTEVfTkFNRSwgMSk7Ci0JaWYgKGV4dGVybmFsX3BkZXYgJiYgcGxhdGZvcm1fZGV2aWNlX2FkZChleHRlcm5hbF9wZGV2KSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGV4dGVybmFsX3BkZXYpOwotCQlleHRlcm5hbF9wZGV2ID0gTlVMTDsKLQl9Ci0KLQlpZiAoaW50ZXJuYWxfcGRldiB8fCBleHRlcm5hbF9wZGV2KSB7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlc3BfbWFjX2RyaXZlcik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlc3BfbWFjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYWNfZXNwX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwotCi0JaWYgKGludGVybmFsX3BkZXYpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaW50ZXJuYWxfcGRldik7Ci0JCWludGVybmFsX3BkZXYgPSBOVUxMOwotCX0KLQlpZiAoZXh0ZXJuYWxfcGRldikgewotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihleHRlcm5hbF9wZGV2KTsKLQkJZXh0ZXJuYWxfcGRldiA9IE5VTEw7Ci0JfQogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1hYyBFU1AgU0NTSSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkZpbm4gVGhhaW4gPGZ0aGFpbkB0ZWxlZ3JhcGhpY3MuY29tLmF1PiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9NT0RVTEVfTkFNRSk7CiAKIG1vZHVsZV9pbml0KG1hY19lc3BfaW5pdCk7CiBtb2R1bGVfZXhpdChtYWNfZXNwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCmluZGV4IGQ5YjhjYTUuLjQwOTY0OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqCSAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogRklMRQkJOiBtZWdhcmFpZF9zYXMuYwotICogVmVyc2lvbiAgICAgOiB2MDAuMDAuMDQuMTItcmMxCisgKiBWZXJzaW9uICAgICA6IHYwMC4wMC4wNC4xNy4xLXJjMQogICoKICAqIEF1dGhvcnM6CiAgKgkoZW1haWwtaWQgOiBtZWdhcmFpZGxpbnV4QGxzaS5jb20pCkBAIC04NDMsNiArODQzLDcgQEAKIAlwdGhydS0+bHVuID0gc2NwLT5kZXZpY2UtPmx1bjsKIAlwdGhydS0+Y2RiX2xlbiA9IHNjcC0+Y21kX2xlbjsKIAlwdGhydS0+dGltZW91dCA9IDA7CisJcHRocnUtPnBhZF8wID0gMDsKIAlwdGhydS0+ZmxhZ3MgPSBmbGFnczsKIAlwdGhydS0+ZGF0YV94ZmVyX2xlbiA9IHNjc2lfYnVmZmxlbihzY3ApOwogCkBAIC04NzQsNiArODc1LDEyIEBACiAJCXB0aHJ1LT5zZ2VfY291bnQgPSBtZWdhc2FzX21ha2Vfc2dsMzIoaW5zdGFuY2UsIHNjcCwKIAkJCQkJCSAgICAgICZwdGhydS0+c2dsKTsKIAorCWlmIChwdGhydS0+c2dlX2NvdW50ID4gaW5zdGFuY2UtPm1heF9udW1fc2dlKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogRENEQiB0d28gbWFueSBTR0UgTlVNPSV4XG4iLAorCQkJcHRocnUtPnNnZV9jb3VudCk7CisJCXJldHVybiAwOworCX0KKwogCS8qCiAJICogU2Vuc2UgaW5mbyBzcGVjaWZpYwogCSAqLwpAQCAtMTAwMCw2ICsxMDA3LDEyIEBACiAJfSBlbHNlCiAJCWxkaW8tPnNnZV9jb3VudCA9IG1lZ2FzYXNfbWFrZV9zZ2wzMihpbnN0YW5jZSwgc2NwLCAmbGRpby0+c2dsKTsKIAorCWlmIChsZGlvLT5zZ2VfY291bnQgPiBpbnN0YW5jZS0+bWF4X251bV9zZ2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBidWlsZF9sZF9pbzogc2dlX2NvdW50ID0gJXhcbiIsCisJCQlsZGlvLT5zZ2VfY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIFNlbnNlIGluZm8gc3BlY2lmaWMKIAkgKi8KQEAgLTIyNTAsNiArMjI2Myw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMTsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IE1FR0FTQVNfTUFYX1BEICogc2l6ZW9mKHN0cnVjdCBNUl9QRF9MSVNUKTsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX1BEX0xJU1RfUVVFUlk7CiAJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGNpX2g7CkBAIC0yMjk0LDYgKzIzMDgsODYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogbWVnYXNhc19nZXRfbGRfbGlzdF9pbmZvIC0JUmV0dXJucyBGVydzIGxkX2xpc3Qgc3RydWN0dXJlCisgKiBAaW5zdGFuY2U6CQkJCUFkYXB0ZXIgc29mdCBzdGF0ZQorICogQGxkX2xpc3Q6CQkJCWxkX2xpc3Qgc3RydWN0dXJlCisgKgorICogSXNzdWVzIGFuIGludGVybmFsIGNvbW1hbmQgKERDTUQpIHRvIGdldCB0aGUgRlcncyBjb250cm9sbGVyIFBECisgKiBsaXN0IHN0cnVjdHVyZS4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbWFpbmx5IHVzZWQgdG8gZmluZCBvdXQgU1lTVEVNCisgKiBzdXBwb3J0ZWQgYnkgdGhlIEZXLgorICovCitzdGF0aWMgaW50CittZWdhc2FzX2dldF9sZF9saXN0KHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgcmV0ID0gMCwgbGRfaW5kZXggPSAwLCBpZHMgPSAwOworCXN0cnVjdCBtZWdhc2FzX2NtZCAqY21kOworCXN0cnVjdCBtZWdhc2FzX2RjbWRfZnJhbWUgKmRjbWQ7CisJc3RydWN0IE1SX0xEX0xJU1QgKmNpOworCWRtYV9hZGRyX3QgY2lfaCA9IDA7CisKKwljbWQgPSBtZWdhc2FzX2dldF9jbWQoaW5zdGFuY2UpOworCisJaWYgKCFjbWQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1lZ2FzYXNfZ2V0X2xkX2xpc3Q6IEZhaWxlZCB0byBnZXQgY21kXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGNtZCA9ICZjbWQtPmZyYW1lLT5kY21kOworCisJY2kgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpbnN0YW5jZS0+cGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IE1SX0xEX0xJU1QpLAorCQkJCSZjaV9oKTsKKworCWlmICghY2kpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBhbGxvYyBtZW0gaW4gZ2V0X2xkX2xpc3RcbiIpOworCQltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChjaSwgMCwgc2l6ZW9mKCpjaSkpOworCW1lbXNldChkY21kLT5tYm94LmIsIDAsIE1GSV9NQk9YX1NJWkUpOworCisJZGNtZC0+Y21kID0gTUZJX0NNRF9EQ01EOworCWRjbWQtPmNtZF9zdGF0dXMgPSAweEZGOworCWRjbWQtPnNnZV9jb3VudCA9IDE7CisJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CisJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCk7CisJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9MRF9HRVRfTElTVDsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY2lfaDsKKwlkY21kLT5zZ2wuc2dlMzJbMF0ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBNUl9MRF9MSVNUKTsKKwlkY21kLT5wYWRfMCAgPSAwOworCisJaWYgKCFtZWdhc2FzX2lzc3VlX3BvbGxlZChpbnN0YW5jZSwgY21kKSkgeworCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCXJldCA9IC0xOworCX0KKworCS8qIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIGluc3RhbmNlIFBEIExJU1QgKi8KKworCWlmICgocmV0ID09IDApICYmIChjaS0+bGRDb3VudCA8IE1BWF9MT0dJQ0FMX0RSSVZFUykpIHsKKwkJbWVtc2V0KGluc3RhbmNlLT5sZF9pZHMsIDB4ZmYsIE1FR0FTQVNfTUFYX0xEX0lEUyk7CisKKwkJZm9yIChsZF9pbmRleCA9IDA7IGxkX2luZGV4IDwgY2ktPmxkQ291bnQ7IGxkX2luZGV4KyspIHsKKwkJCWlmIChjaS0+bGRMaXN0W2xkX2luZGV4XS5zdGF0ZSAhPSAwKSB7CisJCQkJaWRzID0gY2ktPmxkTGlzdFtsZF9pbmRleF0ucmVmLnRhcmdldElkOworCQkJCWluc3RhbmNlLT5sZF9pZHNbaWRzXSA9CisJCQkJCWNpLT5sZExpc3RbbGRfaW5kZXhdLnJlZi50YXJnZXRJZDsKKwkJCX0KKwkJfQorCX0KKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBNUl9MRF9MSVNUKSwKKwkJCQljaSwKKwkJCQljaV9oKTsKKworCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgY21kKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKioKICAqIG1lZ2FzYXNfZ2V0X2NvbnRyb2xsZXJfaW5mbyAtCVJldHVybnMgRlcncyBjb250cm9sbGVyIHN0cnVjdHVyZQogICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKQEAgLTIzMzksNiArMjQzMyw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMTsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pOwogCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfQ1RSTF9HRVRfSU5GTzsKIAlkY21kLT5zZ2wuc2dlMzJbMF0ucGh5c19hZGRyID0gY2lfaDsKQEAgLTI1OTAsNiArMjY4NSw5IEBACiAJCShNRUdBU0FTX01BWF9QRCAqIHNpemVvZihzdHJ1Y3QgbWVnYXNhc19wZF9saXN0KSkpOwogCW1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpOwogCisJbWVtc2V0KGluc3RhbmNlLT5sZF9pZHMsIDB4ZmYsIE1FR0FTQVNfTUFYX0xEX0lEUyk7CisJbWVnYXNhc19nZXRfbGRfbGlzdChpbnN0YW5jZSk7CisKIAljdHJsX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVnYXNhc19jdHJsX2luZm8pLCBHRlBfS0VSTkVMKTsKIAogCS8qCkBAIC0yNzE0LDYgKzI4MTIsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDE7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2xvZ19pbmZvKTsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfRVZFTlRfR0VUX0lORk87CiAJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGVsX2luZm9faDsKQEAgLTI4MjgsNiArMjkyNyw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMTsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfUkVBRDsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbWVnYXNhc19ldnRfZGV0YWlsKTsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfRVZFTlRfV0FJVDsKIAlkY21kLT5tYm94LndbMF0gPSBzZXFfbnVtOwpAQCAtMzE2Niw2ICszMjY2LDcgQEAKIAlkY21kLT5zZ2VfY291bnQgPSAwOwogCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9OT05FOwogCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKIAlkY21kLT5kYXRhX3hmZXJfbGVuID0gMDsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfQ0FDSEVfRkxVU0g7CiAJZGNtZC0+bWJveC5iWzBdID0gTVJfRkxVU0hfQ1RSTF9DQUNIRSB8IE1SX0ZMVVNIX0RJU0tfQ0FDSEU7CkBAIC0zMjA1LDYgKzMzMDYsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDA7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX05PTkU7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSAwOwogCWRjbWQtPm9wY29kZSA9IG9wY29kZTsKIApAQCAtMzk4NCw2ICs0MDg2LDcgQEAKIAlzdHJ1Y3QgIFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgIHNjc2lfZGV2aWNlICpzZGV2MTsKIAl1MTYgICAgIHBkX2luZGV4ID0gMDsKKwl1MTYJbGRfaW5kZXggPSAwOwogCWludCAgICAgaSwgaiwgZG9zY2FuID0gMDsKIAl1MzIgc2VxX251bTsKIAlpbnQgZXJyb3I7CkBAIC0zOTk5LDggKzQxMDIsMTI0IEBACiAKIAkJc3dpdGNoIChpbnN0YW5jZS0+ZXZ0X2RldGFpbC0+Y29kZSkgewogCQljYXNlIE1SX0VWVF9QRF9JTlNFUlRFRDoKKwkJCWlmIChtZWdhc2FzX2dldF9wZF9saXN0KGluc3RhbmNlKSA9PSAwKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfUERfQ0hBTk5FTFM7IGkrKykgeworCQkJCWZvciAoaiA9IDA7CisJCQkJaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKKwkJCQlqKyspIHsKKworCQkJCXBkX2luZGV4ID0KKwkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJc2RldjEgPQorCQkJCXNjc2lfZGV2aWNlX2xvb2t1cChob3N0LCBpLCBqLCAwKTsKKworCQkJCWlmIChpbnN0YW5jZS0+cGRfbGlzdFtwZF9pbmRleF0uZHJpdmVTdGF0ZQorCQkJCQkJPT0gTVJfUERfU1RBVEVfU1lTVEVNKSB7CisJCQkJCQlpZiAoIXNkZXYxKSB7CisJCQkJCQlzY3NpX2FkZF9kZXZpY2UoaG9zdCwgaSwgaiwgMCk7CisJCQkJCQl9CisKKwkJCQkJaWYgKHNkZXYxKQorCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCX0KKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKKwogCQljYXNlIE1SX0VWVF9QRF9SRU1PVkVEOgorCQkJaWYgKG1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpID09IDApIHsKKwkJCW1lZ2FzYXNfZ2V0X3BkX2xpc3QoaW5zdGFuY2UpOworCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTOyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCWogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJCQkJaisrKSB7CisKKwkJCQlwZF9pbmRleCA9CisJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCXNkZXYxID0KKwkJCQlzY3NpX2RldmljZV9sb29rdXAoaG9zdCwgaSwgaiwgMCk7CisKKwkJCQlpZiAoaW5zdGFuY2UtPnBkX2xpc3RbcGRfaW5kZXhdLmRyaXZlU3RhdGUKKwkJCQkJPT0gTVJfUERfU1RBVEVfU1lTVEVNKSB7CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYxKTsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9CisJCQkJfQorCQkJfQorCQkJfQorCQkJZG9zY2FuID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgTVJfRVZUX0xEX09GRkxJTkU6CisJCWNhc2UgTVJfRVZUX0xEX0RFTEVURUQ6CisJCQltZWdhc2FzX2dldF9sZF9saXN0KGluc3RhbmNlKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUzsgaSsrKSB7CisJCQkJZm9yIChqID0gMDsKKwkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCQkJCWorKykgeworCisJCQkJbGRfaW5kZXggPQorCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7CisKKwkJCQlzZGV2MSA9IHNjc2lfZGV2aWNlX2xvb2t1cChob3N0LAorCQkJCQlpICsgTUVHQVNBU19NQVhfTERfQ0hBTk5FTFMsCisJCQkJCWosCisJCQkJCTApOworCisJCQkJaWYgKGluc3RhbmNlLT5sZF9pZHNbbGRfaW5kZXhdICE9IDB4ZmYpIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2RldjEpOworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0KKwkJCQl9CisJCQl9CisJCQlkb3NjYW4gPSAwOworCQkJYnJlYWs7CisJCWNhc2UgTVJfRVZUX0xEX0NSRUFURUQ6CisJCQltZWdhc2FzX2dldF9sZF9saXN0KGluc3RhbmNlKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUzsgaSsrKSB7CisJCQkJZm9yIChqID0gMDsKKwkJCQkJaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKKwkJCQkJaisrKSB7CisJCQkJCWxkX2luZGV4ID0KKwkJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCQlzZGV2MSA9IHNjc2lfZGV2aWNlX2xvb2t1cChob3N0LAorCQkJCQkJaStNRUdBU0FTX01BWF9MRF9DSEFOTkVMUywKKwkJCQkJCWosIDApOworCisJCQkJCWlmIChpbnN0YW5jZS0+bGRfaWRzW2xkX2luZGV4XSAhPQorCQkJCQkJCQkweGZmKSB7CisJCQkJCQlpZiAoIXNkZXYxKSB7CisJCQkJCQkJc2NzaV9hZGRfZGV2aWNlKGhvc3QsCisJCQkJCQkJCWkgKyAyLAorCQkJCQkJCQlqLCAwKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlkb3NjYW4gPSAwOworCQkJYnJlYWs7CiAJCWNhc2UgTVJfRVZUX0NUUkxfSE9TVF9CVVNfU0NBTl9SRVFVRVNURUQ6CisJCWNhc2UgTVJfRVZUX0ZPUkVJR05fQ0ZHX0lNUE9SVEVEOgogCQkJZG9zY2FuID0gMTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNDAzNSw2ICs0MjU0LDMxIEBACiAJCQkJfQogCQkJfQogCQl9CisKKwkJbWVnYXNhc19nZXRfbGRfbGlzdChpbnN0YW5jZSk7CisJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9MRF9DSEFOTkVMUzsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOyBqKyspIHsKKwkJCQlsZF9pbmRleCA9CisJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCXNkZXYxID0gc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsCisJCQkJCWkrTUVHQVNBU19NQVhfTERfQ0hBTk5FTFMsIGosIDApOworCQkJCWlmIChpbnN0YW5jZS0+bGRfaWRzW2xkX2luZGV4XSAhPSAweGZmKSB7CisJCQkJCWlmICghc2RldjEpIHsKKwkJCQkJCXNjc2lfYWRkX2RldmljZShob3N0LAorCQkJCQkJCQlpKzIsCisJCQkJCQkJCWosIDApOworCQkJCQl9IGVsc2UgeworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYxKTsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KIAl9CiAKIAlpZiAoIGluc3RhbmNlLT5hZW5fY21kICE9IE5VTEwgKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKaW5kZXggNzJiMjhlNC4uOWQ4YjZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaApAQCAtMTgsOSArMTgsOSBAQAogLyoKICAqIE1lZ2FSQUlEIFNBUyBEcml2ZXIgbWV0YSBkYXRhCiAgKi8KLSNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwMC4wMC4wNC4xMi1yYzEiCi0jZGVmaW5lIE1FR0FTQVNfUkVMREFURQkJCQkiU2VwLiAxNywgMjAwOSIKLSNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJCSJUaHUgU2VwLiAxNyAxMTo0MTo1MSBQU1QgMjAwOSIKKyNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJIjAwLjAwLjA0LjE3LjEtcmMxIgorI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkiT2N0LiAyOSwgMjAwOSIKKyNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJIlRodS4gT2N0LiAyOSwgMTE6NDE6NTEgUFNUIDIwMDkiCiAKIC8qCiAgKiBEZXZpY2UgSURzCkBAIC0xMTcsNiArMTE3LDcgQEAKICNkZWZpbmUgTUZJX0NNRF9TVFAJCQkJMHgwOAogCiAjZGVmaW5lIE1SX0RDTURfQ1RSTF9HRVRfSU5GTwkJCTB4MDEwMTAwMDAKKyNkZWZpbmUgTVJfRENNRF9MRF9HRVRfTElTVAkJCTB4MDMwMTAwMDAKIAogI2RlZmluZSBNUl9EQ01EX0NUUkxfQ0FDSEVfRkxVU0gJCTB4MDExMDEwMDAKICNkZWZpbmUgTVJfRkxVU0hfQ1RSTF9DQUNIRQkJCTB4MDEKQEAgLTM0OSw2ICszNTAsMzIgQEAKIAl1OCAgICAgICAgICAgICBkcml2ZVN0YXRlOwogfSBfX3BhY2tlZDsKIAorIC8qCisgKiBkZWZpbmVzIHRoZSBsb2dpY2FsIGRyaXZlIHJlZmVyZW5jZSBzdHJ1Y3R1cmUKKyAqLwordW5pb24gIE1SX0xEX1JFRiB7CisJc3RydWN0IHsKKwkJdTggICAgICB0YXJnZXRJZDsKKwkJdTggICAgICByZXNlcnZlZDsKKwkJdTE2ICAgICBzZXFOdW07CisJfTsKKwl1MzIgICAgIHJlZjsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBkZWZpbmVzIHRoZSBsb2dpY2FsIGRyaXZlIGxpc3Qgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBNUl9MRF9MSVNUIHsKKwl1MzIgICAgIGxkQ291bnQ7CisJdTMyICAgICByZXNlcnZlZDsKKwlzdHJ1Y3QgeworCQl1bmlvbiBNUl9MRF9SRUYgICByZWY7CisJCXU4ICAgICAgICAgIHN0YXRlOworCQl1OCAgICAgICAgICByZXNlcnZlZFszXTsKKwkJdTY0ICAgICAgICAgc2l6ZTsKKwl9IGxkTGlzdFtNQVhfTE9HSUNBTF9EUklWRVNdOworfSBfX3BhY2tlZDsKKwogLyoKICAqIFNBUyBjb250cm9sbGVyIHByb3BlcnRpZXMKICAqLwpAQCAtNjM3LDYgKzY2NCw4IEBACiAjZGVmaW5lIE1FR0FTQVNfTUFYX0xECQkJCTY0CiAjZGVmaW5lIE1FR0FTQVNfTUFYX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAoTUVHQVNBU19NQVhfUERfQ0hBTk5FTFMgKiBcCiAJCQkJCQlNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpCisjZGVmaW5lIE1FR0FTQVNfTUFYX0xEX0lEUwkJCShNRUdBU0FTX01BWF9MRF9DSEFOTkVMUyAqIFwKKwkJCQkJCU1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkKIAogI2RlZmluZSBNRUdBU0FTX0RCR19MVkwJCQkJMQogCkBAIC0xMTg3LDYgKzEyMTYsNyBAQAogCXN0cnVjdCBtZWdhc2FzX3JlZ2lzdGVyX3NldCBfX2lvbWVtICpyZWdfc2V0OwogCiAJc3RydWN0IG1lZ2FzYXNfcGRfbGlzdCAgICAgICAgICBwZF9saXN0W01FR0FTQVNfTUFYX1BEXTsKKwl1OCAgICAgbGRfaWRzW01FR0FTQVNfTUFYX0xEX0lEU107CiAJczggaW5pdF9pZDsKIAogCXUxNiBtYXhfbnVtX3NnZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCmluZGV4IDcwYzRjMjQuLmJhOGUxMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZwpAQCAtNDQsNiArNDQsNyBAQAogCXRyaXN0YXRlICJMU0kgTVBUIEZ1c2lvbiBTQVMgMi4wIERldmljZSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQogCXNlbGVjdCBTQ1NJX1NBU19BVFRSUworCXNlbGVjdCBSQUlEX0FUVFJTCiAJLS0taGVscC0tLQogCVRoaXMgZHJpdmVyIHN1cHBvcnRzIFBDSS1FeHByZXNzIFNBUyA2R2IvcyBIb3N0IEFkYXB0ZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaAppbmRleCA5MTQxNjgxLi45OTU4ZDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKQEAgLTgsNyArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgIHNjYXR0ZXIvZ2F0aGVyIGZvcm1hdHMuCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjEsIDIwMDYKICAqCi0gKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xMworICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMTQKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC01Myw2ICs1MywxMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSQUlEIEFjY2VsZXJhdG9yIGZ1bmN0aW9uYWxpdHkuCiAgKiAgMDctMzAtMDkgIDAyLjAwLjEzICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDEwLTI4LTA5ICAwMi4wMC4xNCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1TSS14IGluZGV4IG1hc2sgYW5kIHNoaWZ0IGZvciBSZXBseSBQb3N0IEhvc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIEluZGV4IHJlZ2lzdGVyLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZnVuY3Rpb24gY29kZSBmb3IgSG9zdCBCYXNlZCBEaXNjb3ZlcnkgQWN0aW9uLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtNzgsNyArODIsNyBAQAogI2RlZmluZSBNUEkyX1ZFUlNJT05fMDJfMDAgICAgICAgICAgICAgICAgICAoMHgwMjAwKQogCiAvKiB2ZXJzaW9uaW5nIGZvciB0aGlzIE1QSSBoZWFkZXIgc2V0ICovCi0jZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICgweDBEKQorI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAoMHgwRSkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9ERVYgICAgICAgICAgICAgKDB4MDApCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9NQVNLICAgICAgICgweEZGMDApCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVF9TSElGVCAgICAgICg4KQpAQCAtMjMyLDkgKzIzNiwxMiBAQAogI2RlZmluZSBNUEkyX1JFUExZX0ZSRUVfSE9TVF9JTkRFWF9PRkZTRVQgICAgICAgKDB4MDAwMDAwNDgpCiAKIC8qCi0gKiBPZmZzZXQgZm9yIHRoZSBSZXBseSBEZXNjcmlwdG9yIFBvc3QgUXVldWUKKyAqIERlZmluZXMgZm9yIHRoZSBSZXBseSBEZXNjcmlwdG9yIFBvc3QgUXVldWUKICAqLwogI2RlZmluZSBNUEkyX1JFUExZX1BPU1RfSE9TVF9JTkRFWF9PRkZTRVQgICAgICAgKDB4MDAwMDAwNkMpCisjZGVmaW5lIE1QSTJfUkVQTFlfUE9TVF9IT1NUX0lOREVYX01BU0sgICAgICAgICAoMHgwMEZGRkZGRikKKyNkZWZpbmUgTVBJMl9SUEhJX01TSVhfSU5ERVhfTUFTSyAgICAgICAgICAgICAgICgweEZGMDAwMDAwKQorI2RlZmluZSBNUEkyX1JQSElfTVNJWF9JTkRFWF9TSElGVCAgICAgICAgICAgICAgKDI0KQogCiAvKgogICogRGVmaW5lcyBmb3IgdGhlIEhDQlNpemUgYW5kIGFkZHJlc3MKQEAgLTQ5NywxMiArNTA0LDEzIEBACiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVEFSR0VUX0NNRF9CVUZfQkFTRV9QT1NUICAgICAgKDB4MjQpIC8qIFRhcmdldCBDb21tYW5kIEJ1ZmZlciBQb3N0IEJhc2UgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9UQVJHRVRfQ01EX0JVRl9MSVNUX1BPU1QgICAgICAoMHgyNSkgLyogVGFyZ2V0IENvbW1hbmQgQnVmZmVyIFBvc3QgTGlzdCAqLwogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1JBSURfQUNDRUxFUkFUT1IgICAgICAgICAgICAgICgweDJDKSAvKiBSQUlEIEFjY2VsZXJhdG9yKi8KKy8qIEhvc3QgQmFzZWQgRGlzY292ZXJ5IEFjdGlvbiAqLworI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0hPU1RfQkFTRURfRElTQ09WRVJZX0FDVElPTiAgICgweDJGKQogCiAKIAogLyogRG9vcmJlbGwgZnVuY3Rpb25zICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSU9DX01FU1NBR0VfVU5JVF9SRVNFVCAgICAgICAgKDB4NDApCi0vKiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSU9fVU5JVF9SRVNFVCAgICAgICAgICAgICAgICAgKDB4NDEpICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fSEFORFNIQUtFICAgICAgICAgICAgICAgICAgICAgKDB4NDIpCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCmluZGV4IDE2MTFjNTcuLmNmMGFjOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBDb25maWd1cmF0aW9uIG1lc3NhZ2VzIGFuZCBwYWdlcwogICogIENyZWF0aW9uIERhdGU6ICBOb3ZlbWJlciAxMCwgMjAwNgogICoKLSAqICAgIG1waTJfY25mZy5oIFZlcnNpb246ICAwMi4wMC4xMgorICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjEzCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMTA3LDYgKzEwNyw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICB0byBTQVMgRGV2aWNlIFBhZ2UgMCBGbGFncyBmaWVsZC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBoeUluZm8gZGVmaW5lcyBmb3IgcG93ZXIgY29uZGl0aW9uLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgRXRoZXJuZXQgY29uZmlndXJhdGlvbiBwYWdlcy4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTMgIEFkZGVkIE1QSTJfSU9VTklUUEFHRTFfRU5BQkxFX0hPU1RfQkFTRURfRElTQ09WRVJZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBIWSBQYWdlIDQgc3RydWN0dXJlIGFuZCBkZWZpbmVzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtNzEyLDYgKzcxNCw3IEBACiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDA0KQogCiAvKiBJTyBVbml0IFBhZ2UgMSBGbGFncyBkZWZpbmVzICovCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfRU5BQkxFX0hPU1RfQkFTRURfRElTQ09WRVJZICAgICgweDAwMDAwODAwKQogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX01BU0tfU0FUQV9XUklURV9DQUNIRSAgICAgICAgICAoMHgwMDAwMDYwMCkKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9FTkFCTEVfU0FUQV9XUklURV9DQUNIRSAgICAgICAgKDB4MDAwMDAwMDApCiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfRElTQUJMRV9TQVRBX1dSSVRFX0NBQ0hFICAgICAgICgweDAwMDAwMjAwKQpAQCAtMjI5MSw2ICsyMjk0LDI2IEBACiAjZGVmaW5lIE1QSTJfU0FTUEhZM19QQUdFVkVSU0lPTiAgICAgICAgICAgICgweDAwKQogCiAKKy8qIFNBUyBQSFkgUGFnZSA0ICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfNCB7CisgICAgTVBJMl9DT05GSUdfRVhURU5ERURfUEFHRV9IRUFERVIgICAgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwOCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsRnJhbWVbMjhdOyAgICAgICAgICAgLyogMHgwQyAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfNCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfNCwKKyAgTXBpMlNhc1BoeVBhZ2U0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeVBhZ2U0X3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNQSFk0X1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDApCisKKy8qIHZhbHVlcyBmb3IgdGhlIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZNF9GTEFHU19GUkFNRV9WQUxJRCAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZNF9GTEFHU19TQVRBX0ZSQU1FICAgICAgICAgKDB4MDEpCisKKworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgU0FTIFBvcnQgQ29uZmlnIFBhZ2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dAppbmRleCA2NWZjYWEzLi5jNGFkZjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dApAQCAtNSwyMyArNSwyNCBAQAogIENvcHlyaWdodCAoYykgMjAwMC0yMDA5IExTSSBDb3Jwb3JhdGlvbi4KIAogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEhlYWRlciBTZXQgUmVsZWFzZSBWZXJzaW9uOiAgICAwMi4wMC4xMgotIEhlYWRlciBTZXQgUmVsZWFzZSBEYXRlOiAgICAgICAwNS0wNi0wOQorIEhlYWRlciBTZXQgUmVsZWFzZSBWZXJzaW9uOiAgICAwMi4wMC4xNAorIEhlYWRlciBTZXQgUmVsZWFzZSBEYXRlOiAgICAgICAxMC0yOC0wOQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgRmlsZW5hbWUgICAgICAgICAgICAgICBDdXJyZW50IHZlcnNpb24gICAgIFByaW9yIHZlcnNpb24KICAtLS0tLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLSAgICAgLS0tLS0tLS0tLS0tLQotIG1waTIuaCAgICAgICAgICAgICAgICAgMDIuMDAuMTIgICAgICAgICAgICAwMi4wMC4xMQotIG1waTJfY25mZy5oICAgICAgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMAotIG1waTJfaW5pdC5oICAgICAgICAgICAgMDIuMDAuMDcgICAgICAgICAgICAwMi4wMC4wNgotIG1waTJfaW9jLmggICAgICAgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMAotIG1waTJfcmFpZC5oICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMwotIG1waTJfc2FzLmggICAgICAgICAgICAgMDIuMDAuMDIgICAgICAgICAgICAwMi4wMC4wMgorIG1waTIuaCAgICAgICAgICAgICAgICAgMDIuMDAuMTQgICAgICAgICAgICAwMi4wMC4xMworIG1waTJfY25mZy5oICAgICAgICAgICAgMDIuMDAuMTMgICAgICAgICAgICAwMi4wMC4xMgorIG1waTJfaW5pdC5oICAgICAgICAgICAgMDIuMDAuMDggICAgICAgICAgICAwMi4wMC4wNworIG1waTJfaW9jLmggICAgICAgICAgICAgMDIuMDAuMTMgICAgICAgICAgICAwMi4wMC4xMgorIG1waTJfcmFpZC5oICAgICAgICAgICAgMDIuMDAuMDQgICAgICAgICAgICAwMi4wMC4wNAorIG1waTJfc2FzLmggICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMgogIG1waTJfdGFyZy5oICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMwotIG1waTJfdG9vbC5oICAgICAgICAgICAgMDIuMDAuMDMgICAgICAgICAgICAwMi4wMC4wMgorIG1waTJfdG9vbC5oICAgICAgICAgICAgMDIuMDAuMDQgICAgICAgICAgICAwMi4wMC4wNAogIG1waTJfdHlwZS5oICAgICAgICAgICAgMDIuMDAuMDAgICAgICAgICAgICAwMi4wMC4wMAotIG1waTJfcmEuaCAgICAgICAgICAgICAgMDIuMDAuMDAKLSBtcGkyX2hpc3RvcnkudHh0ICAgICAgIDAyLjAwLjExICAgICAgICAgICAgMDIuMDAuMTIKKyBtcGkyX3JhLmggICAgICAgICAgICAgIDAyLjAwLjAwICAgICAgICAgICAgMDIuMDAuMDAKKyBtcGkyX2hiZC5oICAgICAgICAgICAgIDAyLjAwLjAwCisgbXBpMl9oaXN0b3J5LnR4dCAgICAgICAwMi4wMC4xNCAgICAgICAgICAgIDAyLjAwLjEzCiAKIAogICogIERhdGUgICAgICBWZXJzaW9uICAgRGVzY3JpcHRpb24KQEAgLTY1LDYgKzY2LDExIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SIGFuZCBtYWRlIHRob3NlCiAgKiAgICAgICAgICAgICAgICAgICAgICBieXRlcyByZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJBSUQgQWNjZWxlcmF0b3IgZnVuY3Rpb25hbGl0eS4KKyAqICAwNy0zMC0wOSAgMDIuMDAuMTMgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjE0ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVNJLXggaW5kZXggbWFzayBhbmQgc2hpZnQgZm9yIFJlcGx5IFBvc3QgSG9zdAorICogICAgICAgICAgICAgICAgICAgICAgSW5kZXggcmVnaXN0ZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBmdW5jdGlvbiBjb2RlIGZvciBIb3N0IEJhc2VkIERpc2NvdmVyeSBBY3Rpb24uCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl9jbmZnLmgKQEAgLTE1NSw2ICsxNjEsMTUgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGV4cGFuZGVyIHJlZHVjZWQgZnVuY3Rpb25hbGl0eSBkYXRhIHRvIFNBUwogICogICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXIgUGFnZSAwLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBIWSBQYWdlIDIgYW5kIFNBUyBQSFkgUGFnZSAzLgorICogIDA3LTMwLTA5ICAwMi4wMC4xMiAgQWRkZWQgSU8gVW5pdCBQYWdlIDcuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgZGV2aWNlIGlkcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBJTyBVbml0IFBhZ2UgNS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHBhcnRpYWwgYW5kIHNsdW1iZXIgcG93ZXIgbWFuYWdlbWVudCBjYXBhYmxlIGZsYWdzCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBTQVMgRGV2aWNlIFBhZ2UgMCBGbGFncyBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBoeUluZm8gZGVmaW5lcyBmb3IgcG93ZXIgY29uZGl0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgRXRoZXJuZXQgY29uZmlndXJhdGlvbiBwYWdlcy4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTMgIEFkZGVkIE1QSTJfSU9VTklUUEFHRTFfRU5BQkxFX0hPU1RfQkFTRURfRElTQ09WRVJZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBIWSBQYWdlIDQgc3RydWN0dXJlIGFuZCBkZWZpbmVzLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfaW5pdC5oCkBAIC0xNzIsNiArMTg3LDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBRdWVyeSBBc3luY2hyb25vdXMgRXZlbnQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkIHR3byBuZXcgYml0cyBpbiB0aGUgU2xvdFN0YXR1cyBmaWVsZCBvZiB0aGUgU0NTSQogICogICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlIFByb2Nlc3NvciBSZXF1ZXN0IGFuZCBSZXBseS4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMDggIEFkZGVkIGRlZmluZXMgZm9yIGRlY29kaW5nIHRoZSBSZXNwb25zZUluZm8gYnl0ZXMgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBib3RoIFNDU0kgSU8gRXJyb3IgUmVwbHkgYW5kIFNDU0kgVGFzayBNYW5hZ2VtZW50IFJlcGx5LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUmVzcG9uc2VJbmZvIGZpZWxkIHRvIE1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9PVkVSTEFQUEVEX1RBRyBkZWZpbmUuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl9pb2MuaApAQCAtMjQ2LDYgKzI2NSwyMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyByZWFzb24gY29kZXMgZm9yIFNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZQogICogICAgICAgICAgICAgICAgICAgICAgRXZlbnQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgZXZlbnQ6IFNBUyBQSFkgQ291bnRlci4KKyAqICAwNy0zMC0wOSAgMDIuMDAuMTIgIEFkZGVkIEdQSU8gSW50ZXJydXB0IGV2ZW50IGRlZmluZSBhbmQgc3RydWN0dXJlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VYVEVOREVEX0JVRkZFUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgcHJvZHVjdCBpZCBmYW1pbHkgZm9yIDIyMDguCisgKiAgMTAtMjgtMDkgIDAyLjAwLjEzICBBZGRlZCBIb3N0TVNJeFZlY3RvcnMgZmllbGQgdG8gTVBJMl9JT0NfSU5JVF9SRVFVRVNULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWF4TVNJeFZlY3RvcnMgZmllbGQgdG8gTVBJMl9JT0NfRkFDVFNfUkVQTFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNaW5EZXZIYW5kbGUgZmllbGQgdG8gTVBJMl9JT0NfRkFDVFNfUkVQTFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSE9TVF9CQVNFRF9ESVNDT1ZFUlkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX0hPU1RfQkFTRURfRElTQ09WRVJZX1BIWSBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PX0VYUEFOREVSIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEhvc3QgQmFzZWQgRGlzY292ZXJ5IFBoeSBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lcyBmb3IgUHJvZHVjdElEIFByb2R1Y3QgZmllbGQKKyAqICAgICAgICAgICAgICAgICAgICAgIChNUEkyX0ZXX0hFQURFUl9QSURfKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIHZhbHVlcyBmb3IgU0FTIFByb2R1Y3RJRCBGYW1pbHkKKyAqICAgICAgICAgICAgICAgICAgICAgIChNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXykuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl9yYWlkLmgKQEAgLTI1Niw2ICsyODksOCBAQAogICogIDA1LTIxLTA4ICAwMi4wMC4wMyAgQWRkZWQgTVBJMl9SQUlEX1ZPTF9DUkVBVElPTl9OVU1fUEhZU0RJU0tTIHNvIHRoYXQKICAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBQaHlzRGlzayBhcnJheSBpbiBNUEkyX1JBSURfVk9MVU1FX0NSRUFUSU9OX1NUUlVDVAogICogICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHNpemVkIGJ5IHRoZSBidWlsZCBlbnZpcm9ubWVudC4KKyAqICAwNy0zMC0wOSAgMDIuMDAuMDQgIEFkZGVkIHByb3BlciBkZWZpbmUgZm9yIHRoZSBVc2UgRGVmYXVsdCBTZXR0aW5ncyBiaXQgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgIFZvbHVtZUNyZWF0aW9uRmxhZ3MgYW5kIG1hcmtlZCB0aGUgb2xkIG9uZSBhcyBvYnNvbGV0ZS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX3Nhcy5oCkBAIC0yNjQsNiArMjk5LDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgUmVxdWVzdC4KICAqICAxMC0wMi0wOCAgMDIuMDAuMDIgIEFkZGVkIFNldCBJT0MgUGFyYW1ldGVyIE9wZXJhdGlvbiB0byBTQVMgSU8gVW5pdCBDb250cm9sCiAgKiAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LgorICogIDEwLTI4LTA5ICAwMi4wMC4wMyAgQ2hhbmdlZCB0aGUgdHlwZSBvZiBTR0wgaW4gTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUVVFU1QKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIE1QSTJfU0dFX0lPX1VOSU9OIHNpbmNlIGl0IHN1cHBvcnRzIGNoYWluZWQgU0dMcy4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX3RhcmcuaApAQCAtMjgzLDYgKzMyMCwxMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcyBhbmQgZGVmaW5lcy4KICAqICAwMi0yOS0wOCAgMDIuMDAuMDIgIE1vZGlmaWVkIHZhcmlvdXMgbmFtZXMgdG8gbWFrZSB0aGVtIDMyLWNoYXJhY3RlciB1bmlxdWUuCiAgKiAgMDUtMDYtMDkgIDAyLjAwLjAzICBBZGRlZCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wgYW5kIERpYWdub3N0aWMgQ0xJIFRvb2wuCisgKiAgMDctMzAtMDkgIDAyLjAwLjA0ICBBZGRlZCBFeHRlbmRlZFR5cGUgZmllbGQgdG8gRGlhZ25vc3RpY0J1ZmZlclBvc3QgcmVxdWVzdAorICogICAgICAgICAgICAgICAgICAgICAgYW5kIHJlcGx5IG1lc3NhZ2VzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9ESUFHX0JVRl9UWVBFX0VYVEVOREVELgorICogICAgICAgICAgICAgICAgICAgICAgSW5jcmVtZW50ZWQgTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5ULgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfdHlwZS5oCkBAIC0yOTMsMjAgKzMzNCwyNiBAQAogICogIDA1LTA2LTA5ICAwMi4wMC4wMCAgSW5pdGlhbCB2ZXJzaW9uLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK21waTJfaGJkLmgKKyAqICAxMC0yOC0wOSAgMDIuMDAuMDAgIEluaXRpYWwgdmVyc2lvbi4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKIG1waTJfaGlzdG9yeS50eHQgICAgICAgICBQYXJ0cyBsaXN0IGhpc3RvcnkKIAotRmlsZW5hbWUgICAgIDAyLjAwLjEyCi0tLS0tLS0tLS0tICAgLS0tLS0tLS0KLW1waTIuaCAgICAgICAwMi4wMC4xMgotbXBpMl9jbmZnLmggIDAyLjAwLjExCi1tcGkyX2luaXQuaCAgMDIuMDAuMDcKLW1waTJfaW9jLmggICAwMi4wMC4xMQotbXBpMl9yYWlkLmggIDAyLjAwLjAzCi1tcGkyX3Nhcy5oICAgMDIuMDAuMDIKLW1waTJfdGFyZy5oICAwMi4wMC4wMwotbXBpMl90b29sLmggIDAyLjAwLjAzCi1tcGkyX3R5cGUuaCAgMDIuMDAuMDAKLW1waTJfcmEuaCAgICAwMi4wMC4wMAorRmlsZW5hbWUgICAgIDAyLjAwLjE0ICAwMi4wMC4xMyAgMDIuMDAuMTIKKy0tLS0tLS0tLS0gICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tCittcGkyLmggICAgICAgMDIuMDAuMTQgIDAyLjAwLjEzICAwMi4wMC4xMgorbXBpMl9jbmZnLmggIDAyLjAwLjEzICAwMi4wMC4xMiAgMDIuMDAuMTEKK21waTJfaW5pdC5oICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA3CittcGkyX2lvYy5oICAgMDIuMDAuMTMgIDAyLjAwLjEyICAwMi4wMC4xMQorbXBpMl9yYWlkLmggIDAyLjAwLjA0ICAwMi4wMC4wNCAgMDIuMDAuMDMKK21waTJfc2FzLmggICAwMi4wMC4wMyAgMDIuMDAuMDIgIDAyLjAwLjAyCittcGkyX3RhcmcuaCAgMDIuMDAuMDMgIDAyLjAwLjAzICAwMi4wMC4wMworbXBpMl90b29sLmggIDAyLjAwLjA0ICAwMi4wMC4wNCAgMDIuMDAuMDMKK21waTJfdHlwZS5oICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX3JhLmggICAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl9oYmQuaCAgIDAyLjAwLjAwCiAKIEZpbGVuYW1lICAgICAwMi4wMC4xMSAgMDIuMDAuMTAgIDAyLjAwLjA5ICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA2CiAtLS0tLS0tLS0tICAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCmluZGV4IDU2M2U1NmQuLjY1NDE5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBTQ1NJIGluaXRpYXRvciBtb2RlIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjMsIDIwMDYKICAqCi0gKiAgICBtcGkyX2luaXQuaCBWZXJzaW9uOiAgMDIuMDAuMDcKKyAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4wOAogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTI3LDYgKzI3LDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBRdWVyeSBBc3luY2hyb25vdXMgRXZlbnQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkIHR3byBuZXcgYml0cyBpbiB0aGUgU2xvdFN0YXR1cyBmaWVsZCBvZiB0aGUgU0NTSQogICogICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlIFByb2Nlc3NvciBSZXF1ZXN0IGFuZCBSZXBseS4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMDggIEFkZGVkIGRlZmluZXMgZm9yIGRlY29kaW5nIHRoZSBSZXNwb25zZUluZm8gYnl0ZXMgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBib3RoIFNDU0kgSU8gRXJyb3IgUmVwbHkgYW5kIFNDU0kgVGFzayBNYW5hZ2VtZW50IFJlcGx5LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUmVzcG9uc2VJbmZvIGZpZWxkIHRvIE1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9PVkVSTEFQUEVEX1RBRyBkZWZpbmUuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0yNTQsNiArMjU4LDExIEBACiAjZGVmaW5lIE1QSTJfU0NTSV9TVEFURV9BVVRPU0VOU0VfRkFJTEVEICAgICAgICAoMHgwMikKICNkZWZpbmUgTVBJMl9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9WQUxJRCAgICAgICAgICgweDAxKQogCisvKiBtYXNrcyBhbmQgc2hpZnRzIGZvciB0aGUgUmVzcG9uc2VJbmZvIGZpZWxkICovCisKKyNkZWZpbmUgTVBJMl9TQ1NJX1JJX01BU0tfUkVBU09OQ09ERSAgICAgICAgICAgICgweDAwMDAwMEZGKQorI2RlZmluZSBNUEkyX1NDU0lfUklfU0hJRlRfUkVBU09OQ09ERSAgICAgICAgICAgKDApCisKICNkZWZpbmUgTVBJMl9TQ1NJX1RBU0tUQUdfVU5LTk9XTiAgICAgICAgICAgICAgICgweEZGRkYpCiAKIApAQCAtMzI3LDYgKzMzNiw3IEBACiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBFICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgSU9DTG9nSW5mbzsgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgVGVybWluYXRpb25Db3VudDsgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VJbmZvOyAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCiB9IE1QSTJfU0NTSV9UQVNLX01BTkFHRV9SRVBMWSwKICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFksCiAgIE1waTJTQ1NJVGFza01hbmFnZW1lbnRSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJTQ1NJTWFuYWdlbWVudFJlcGx5X3Q7CkBAIC0zMzksOCArMzQ5LDIwIEBACiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9GQUlMRUQgICAgICAgICAgICAgICAgICgweDA1KQogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fU1VDQ0VFREVEICAgICAgICAgICAgICAoMHgwOCkKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX0lOVkFMSURfTFVOICAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9PVkVSTEFQUEVEX1RBRyAgICAgICAgICgweDBBKQogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU9fUVVFVUVEX09OX0lPQyAgICAgICAgICAoMHg4MCkKIAorLyogbWFza3MgYW5kIHNoaWZ0cyBmb3IgdGhlIFJlc3BvbnNlSW5mbyBmaWVsZCAqLworCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX01BU0tfUkVBU09OQ09ERSAgICAgICAgICAgICgweDAwMDAwMEZGKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9TSElGVF9SRUFTT05DT0RFICAgICAgICAgICAoMCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfTUFTS19BUkkyICAgICAgICAgICAgICAgICAgKDB4MDAwMEZGMDApCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX1NISUZUX0FSSTIgICAgICAgICAgICAgICAgICg4KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9NQVNLX0FSSTEgICAgICAgICAgICAgICAgICAoMHgwMEZGMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfU0hJRlRfQVJJMSAgICAgICAgICAgICAgICAgKDE2KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9NQVNLX0FSSTAgICAgICAgICAgICAgICAgICAoMHhGRjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfU0hJRlRfQVJJMCAgICAgICAgICAgICAgICAgKDI0KQorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBTQ1NJIEVuY2xvc3VyZSBQcm9jZXNzb3IgbWVzc2FnZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKaW5kZXggZWE1MWNlOC4uNzU0OTM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBJT0MsIFBvcnQsIEV2ZW50LCBGVyBEb3dubG9hZCwgYW5kIEZXIFVwbG9hZCBtZXNzYWdlcwogICogIENyZWF0aW9uIERhdGU6ICBPY3RvYmVyIDExLCAyMDA2CiAgKgotICogIG1waTJfaW9jLmggVmVyc2lvbjogIDAyLjAwLjEyCisgKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTMKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC04Nyw2ICs4NywxNyBAQAogICogIDA3LTMwLTA5ICAwMi4wMC4xMiAgQWRkZWQgR1BJTyBJbnRlcnJ1cHQgZXZlbnQgZGVmaW5lIGFuZCBzdHJ1Y3R1cmUuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVhURU5ERURfQlVGRkVSIGRlZmluZS4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBwcm9kdWN0IGlkIGZhbWlseSBmb3IgMjIwOC4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTMgIEFkZGVkIEhvc3RNU0l4VmVjdG9ycyBmaWVsZCB0byBNUEkyX0lPQ19JTklUX1JFUVVFU1QuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYXhNU0l4VmVjdG9ycyBmaWVsZCB0byBNUEkyX0lPQ19GQUNUU19SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1pbkRldkhhbmRsZSBmaWVsZCB0byBNUEkyX0lPQ19GQUNUU19SRVBMWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9IT1NUX0JBU0VEX0RJU0NPVkVSWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfSE9TVF9CQVNFRF9ESVNDT1ZFUllfUEhZIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9fRVhQQU5ERVIgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgSG9zdCBCYXNlZCBEaXNjb3ZlcnkgUGh5IEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmVzIGZvciBQcm9kdWN0SUQgUHJvZHVjdCBmaWVsZAorICogICAgICAgICAgICAgICAgICAgICAgKE1QSTJfRldfSEVBREVSX1BJRF8pLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgdmFsdWVzIGZvciBTQVMgUHJvZHVjdElEIEZhbWlseQorICogICAgICAgICAgICAgICAgICAgICAgKE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfKS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTExOSw4ICsxMzAsMTAgQEAKICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBNc2dWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBIZWFkZXJWZXJzaW9uOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KLSAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDc7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDc7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBIb3N0TVNJeFZlY3RvcnM7ICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDg7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1SZXF1ZXN0RnJhbWVTaXplOyAgICAgICAgIC8qIDB4MUEgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aDsgIC8qIDB4MUMgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXBseUZyZWVRdWV1ZURlcHRoOyAgICAgICAgICAgIC8qIDB4MUUgKi8KQEAgLTIxNSw3ICsyMjgsNyBAQAogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1heENoYWluRGVwdGg7ICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFdob0luaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNSAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mUG9ydHM7ICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLwotICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1heE1TSXhWZWN0b3JzOyAgICAgICAgICAgICAgICAgLyogMHgxNyAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RDcmVkaXQ7ICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RJRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgxQSAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0NhcGFiaWxpdGllczsgICAgICAgICAgICAgICAgLyogMHgxQyAqLwpAQCAtMjMzLDcgKzI0Niw4IEBACiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgTWF4Vm9sdW1lczsgICAgICAgICAgICAgICAgICAgICAvKiAweDM3ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4RGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiAweDM4ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWF4UGVyc2lzdGVudEVudHJpZXM7ICAgICAgICAgICAvKiAweDNBICovCi0gICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDNDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTWluRGV2SGFuZGxlOyAgICAgICAgICAgICAgICAgICAvKiAweDNDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDNFICovCiB9IE1QSTJfSU9DX0ZBQ1RTX1JFUExZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfSU9DX0ZBQ1RTX1JFUExZLAogICBNcGkySU9DRmFjdHNSZXBseV90LCBNUEkyX1BPSU5URVIgcE1waTJJT0NGYWN0c1JlcGx5X3Q7CiAKQEAgLTI2OSw2ICsyODMsNyBAQAogLyogUHJvZHVjdElEIGZpZWxkIHVzZXMgTVBJMl9GV19IRUFERVJfUElEXyAqLwogCiAvKiBJT0NDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0hPU1RfQkFTRURfRElTQ09WRVJZICAgKDB4MDAwMTAwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9NU0lfWF9JTkRFWCAgICAgICAgICAgICgweDAwMDA4MDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfUkFJRF9BQ0NFTEVSQVRPUiAgICAgICAoMHgwMDAwNDAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VWRU5UX1JFUExBWSAgICAgICAgICAgKDB4MDAwMDIwMDApCkBAIC00NTMsNiArNDY4LDcgQEAKICNkZWZpbmUgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQgICAgICAgICAgICAgICAgICAoMHgwMDIxKQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19QSFlfQ09VTlRFUiAgICAgICAgICAgICAgICAgICgweDAwMjIpCiAjZGVmaW5lIE1QSTJfRVZFTlRfR1BJT19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgKDB4MDAyMykKKyNkZWZpbmUgTVBJMl9FVkVOVF9IT1NUX0JBU0VEX0RJU0NPVkVSWV9QSFkgICAgICAgICAoMHgwMDI0KQogCiAKIC8qIExvZyBFbnRyeSBBZGRlZCBFdmVudCBkYXRhICovCkBAIC03OTMsNiArODA5LDcgQEAKICAgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3Q7CiAKIC8qIHZhbHVlcyBmb3IgdGhlIEV4cFN0YXR1cyBmaWVsZCAqLworI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PX0VYUEFOREVSICAgICAgICAgICAgICAgICAgKDB4MDApCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfQURERUQgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMSkKICNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT1RfUkVTUE9ORElORyAgICAgICAgICAgICAgICgweDAyKQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX1JFU1BPTkRJTkcgICAgICAgICAgICAgICAgICAgKDB4MDMpCkBAIC04NzgsNiArODk1LDQ0IEBACiAgKiAqLwogCiAKKy8qIEhvc3QgQmFzZWQgRGlzY292ZXJ5IFBoeSBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0hCRF9QSFlfU0FTIHsKKyAgICBVOCAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgIE5lZ290aWF0ZWRMaW5rUmF0ZTsgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgUGh5TnVtOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICBQaHlzaWNhbFBvcnQ7ICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUzMiAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgSW5pdGlhbEZyYW1lWzI4XTsgICAgICAgICAgIC8qIDB4MDggKi8KK30gTVBJMl9FVkVOVF9IQkRfUEhZX1NBUywgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0hCRF9QSFlfU0FTLAorICBNcGkyRXZlbnRIYmRQaHlTYXNfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnRIYmRQaHlTYXNfdDsKKworLyogdmFsdWVzIGZvciB0aGUgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9IQkRfU0FTX0ZMQUdTX0ZSQU1FX1ZBTElEICAgICAgICAoMHgwMikKKyNkZWZpbmUgTVBJMl9FVkVOVF9IQkRfU0FTX0ZMQUdTX1NBVEFfRlJBTUUgICAgICAgICAoMHgwMSkKKworLyogdXNlIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfIGRlZmluZXMgZnJvbSBtcGkyX2NuZmcuaCBmb3IKKyAqIHRoZSBOZWdvdGlhdGVkTGlua1JhdGUgZmllbGQgKi8KKwordHlwZWRlZiB1bmlvbiBfTVBJMl9FVkVOVF9IQkRfREVTQ1JJUFRPUiB7CisgICAgTVBJMl9FVkVOVF9IQkRfUEhZX1NBUyAgICAgIFNhczsKK30gTVBJMl9FVkVOVF9IQkRfREVTQ1JJUFRPUiwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0hCRF9ERVNDUklQVE9SLAorICBNcGkyRXZlbnRIYmREZXNjcmlwdG9yX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50SGJkRGVzY3JpcHRvcl90OworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9EQVRBX0hCRF9QSFkgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yVHlwZTsgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBNUEkyX0VWRU5UX0hCRF9ERVNDUklQVE9SICAgRGVzY3JpcHRvcjsgICAgICAgICAvKiAweDA4ICovCit9IE1QSTJfRVZFTlRfREFUQV9IQkRfUEhZLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfRVZFTlRfREFUQV9IQkRfUEhZLAorICBNcGkyRXZlbnREYXRhSGJkUGh5X3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YU1waTJFdmVudERhdGFIYmRQaHlfdDsKKworLyogdmFsdWVzIGZvciB0aGUgRGVzY3JpcHRvclR5cGUgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9IQkRfRFRfU0FTICAgICAgICAgICAgICAgKDB4MDEpCisKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgRXZlbnRBY2sgbWVzc2FnZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExMjYsMTMgKzExODEsMTcgQEAKICNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1RZUEVfTUFTSyAgICAgICAgICAgICgweEYwMDApCiAjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9UWVBFX1NBUyAgICAgICAgICAgICAoMHgyMDAwKQogCi0jZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX01BU0sgICAgICAgICAgICAoMHgwRjAwKQotI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9BICAgICAgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MEYwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfQSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfTUFTSyAgICAgICAgICAgICAgICAgICAgKDB4MEYwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfVEFSR0VUX0lOSVRJQVRPUl9TQ1NJICAgKDB4MDIwMCkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfSVJfU0NTSSAgICAgICAgICAgICAgICAgKDB4MDcwMCkKKwogCiAjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfTUFTSyAgICAgICAgICAoMHgwMEZGKQogLyogU0FTICovCi0jZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfMjEwOF9TQVMgICAgICAoMHgwMDEwKQotI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXzIyMDhfU0FTICAgICAgKDB4MDAxMSkKKyNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8yMTA4X1NBUyAgICAgICgweDAwMTMpCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfMjIwOF9TQVMgICAgICAoMHgwMDE0KQogCiAvKiB1c2UgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF8gZGVmaW5lcyBmb3IgUHJvdG9jb2xGbGFncyBmaWVsZCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Nhcy5oCmluZGV4IDhhNDJiMTMuLjJkOGFlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Nhcy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgU2VyaWFsIEF0dGFjaGVkIFNDU0kgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKICAqICBDcmVhdGlvbiBEYXRlOiAgRmVicnVhcnkgOSwgMjAwNwogICoKLSAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjAyCisgKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4wMwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTE4LDYgKzE4LDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgUmVxdWVzdC4KICAqICAxMC0wMi0wOCAgMDIuMDAuMDIgIEFkZGVkIFNldCBJT0MgUGFyYW1ldGVyIE9wZXJhdGlvbiB0byBTQVMgSU8gVW5pdCBDb250cm9sCiAgKiAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0LgorICogIDEwLTI4LTA5ICAwMi4wMC4wMyAgQ2hhbmdlZCB0aGUgdHlwZSBvZiBTR0wgaW4gTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUVVFU1QKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIE1QSTJfU0dFX0lPX1VOSU9OIHNpbmNlIGl0IHN1cHBvcnRzIGNoYWluZWQgU0dMcy4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTE2MCw3ICsxNjIsNyBAQAogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgLyogMHgxNCAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGg7ICAgICAgICAgLyogMHgxOCAqLwogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRGSVNbMjBdOyAgICAgLyogMHgxQyAqLwotICAgIE1QSTJfU0lNUExFX1NHRV9VTklPTiAgIFNHTDsgICAgICAgICAgICAgICAgLyogMHgyMCAqLworICAgIE1QSTJfU0dFX0lPX1VOSU9OICAgICAgIFNHTDsgICAgICAgICAgICAgICAgLyogMHgyMCAqLwogfSBNUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVCwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX1NBVEFfUEFTU1RIUk9VR0hfUkVRVUVTVCwKICAgTXBpMlNhdGFQYXNzdGhyb3VnaFJlcXVlc3RfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2F0YVBhc3N0aHJvdWdoUmVxdWVzdF90OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IDg5ZDAyNDAuLjg4ZTZlZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0xMDcsOCArMTA3LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAic2V0dGluZyBsb2dnaW5nX2xldmVsKDB4JTA4eClcbiIsCi0JCQkJbXB0MnNhc19md2ZhdWx0X2RlYnVnKTsKKwlwcmludGsoS0VSTl9JTkZPICJzZXR0aW5nIGZ3ZmF1bHRfZGVidWcoJWQpXG4iLCBtcHQyc2FzX2Z3ZmF1bHRfZGVidWcpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW9jLCAmbXB0MnNhc19pb2NfbGlzdCwgbGlzdCkKIAkJaW9jLT5md2ZhdWx0X2RlYnVnID0gbXB0MnNhc19md2ZhdWx0X2RlYnVnOwogCXJldHVybiAwOwpAQCAtMTIyMiw2ICsxMjIxLDggQEAKIAl1MzIgbWVtYXBfc3o7CiAJdTMyIHBpb19zejsKIAlpbnQgaSwgciA9IDA7CisJdTY0IHBpb19jaGlwID0gMDsKKwl1NjQgY2hpcF9waHlzID0gMDsKIAogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwKIAkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwpAQCAtMTI1NSwxMiArMTI1NiwxMyBAQAogCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykgewogCQkJaWYgKHBpb19zeikKIAkJCQljb250aW51ZTsKLQkJCWlvYy0+cGlvX2NoaXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisJCQlwaW9fY2hpcCA9ICh1NjQpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOwogCQkJcGlvX3N6ID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChtZW1hcF9zeikKIAkJCQljb250aW51ZTsKIAkJCWlvYy0+Y2hpcF9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOworCQkJY2hpcF9waHlzID0gKHU2NClpb2MtPmNoaXBfcGh5czsKIAkJCW1lbWFwX3N6ID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKTsKIAkJCWlvYy0+Y2hpcCA9IGlvcmVtYXAoaW9jLT5jaGlwX3BoeXMsIG1lbWFwX3N6KTsKIAkJCWlmIChpb2MtPmNoaXAgPT0gTlVMTCkgewpAQCAtMTI4MCwxMCArMTI4MiwxMCBAQAogCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogSVJRICVkXG4iLAogCSAgICBpb2MtPm5hbWUsICAoKGlvYy0+bXNpeF9lbmFibGUpID8gIlBDSS1NU0ktWCBlbmFibGVkIiA6CiAJICAgICJJTy1BUElDIGVuYWJsZWQiKSwgaW9jLT5wY2lfaXJxKTsKLQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9tZW0oMHglbHgpLCBtYXBwZWQoMHglcCksIHNpemUoJWQpXG4iLAotCSAgICBpb2MtPm5hbWUsIGlvYy0+Y2hpcF9waHlzLCBpb2MtPmNoaXAsIG1lbWFwX3N6KTsKLQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9wb3J0KDB4JWx4KSwgc2l6ZSglZClcbiIsCi0JICAgIGlvYy0+bmFtZSwgaW9jLT5waW9fY2hpcCwgcGlvX3N6KTsKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW9tZW0oMHglMDE2bGx4KSwgbWFwcGVkKDB4JXApLCBzaXplKCVkKVxuIiwKKwkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWNoaXBfcGh5cywgaW9jLT5jaGlwLCBtZW1hcF9zeik7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlvcG9ydCgweCUwMTZsbHgpLCBzaXplKCVkKVxuIiwKKwkgICAgaW9jLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXBpb19jaGlwLCBwaW9fc3opOwogCiAJcmV0dXJuIDA7CiAKQEAgLTM1NzMsNiArMzU3NSw4IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpb2MtPnJlc2V0X3dxKTsKIAorCWlvYy0+ZndmYXVsdF9kZWJ1ZyA9IG1wdDJzYXNfZndmYXVsdF9kZWJ1ZzsKKwogCS8qIGJhc2UgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCiAJbXV0ZXhfaW5pdCgmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOwogCWlvYy0+YmFzZV9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKaW5kZXggYmI0ZjE0Ni4uZTE4YjA1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKQEAgLTY5LDEwICs2OSwxMCBAQAogI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9OQU1FCQkibXB0MnNhcyIKICNkZWZpbmUgTVBUMlNBU19BVVRIT1IJIkxTSSBDb3Jwb3JhdGlvbiA8REwtTVBURnVzaW9uTGludXhAbHNpLmNvbT4iCiAjZGVmaW5lIE1QVDJTQVNfREVTQ1JJUFRJT04JIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKLSNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjAzLjEwMC4wMy4wMCIKLSNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwMworI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDQuMTAwLjAxLjAwIgorI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTA0CiAjZGVmaW5lIE1QVDJTQVNfTUlOT1JfVkVSU0lPTgkJMTAwCi0jZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDMKKyNkZWZpbmUgTVBUMlNBU19CVUlMRF9WRVJTSU9OCQkwMQogI2RlZmluZSBNUFQyU0FTX1JFTEVBU0VfVkVSU0lPTgkJMDAKIAogLyoKQEAgLTMyMyw2ICszMjMsNyBAQAogICogQGRldmljZV9pbmZvOiBiaXRmaWVsZCBwcm92aWRlcyBkZXRhaWxlZCBpbmZvIGFib3V0IHRoZSBoaWRkZW4gY29tcG9uZW50cwogICogQG51bV9wZHM6IG51bWJlciBvZiBoaWRkZW4gcmFpZCBjb21wb25lbnRzCiAgKiBAcmVzcG9uZGluZzogdXNlZCBpbiBfc2NzaWhfcmFpZF9kZXZpY2VfbWFya19yZXNwb25kaW5nCisgKiBAcGVyY2VudF9jb21wbGV0ZTogcmVzeW5jIHBlcmNlbnQgY29tcGxldGUKICAqLwogc3RydWN0IF9yYWlkX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMzM2LDYgKzMzNyw3IEBACiAJdTMyCWRldmljZV9pbmZvOwogCXU4CW51bV9wZHM7CiAJdTgJcmVzcG9uZGluZzsKKwl1OAlwZXJjZW50X2NvbXBsZXRlOwogfTsKIAogLyoqCkBAIC00NjQsNyArNDY2LDYgQEAKICAqIEBwZGV2OiBwY2kgcGRldiBvYmplY3QKICAqIEBjaGlwOiBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVyIHNwYWNlCiAgKiBAY2hpcF9waHlzOiBwaHlzaWNhbCBhZGRyc3MgcHJpb3IgdG8gbWFwcGluZwotICogQHBpb19jaGlwOiBJL08gbWFwcGVkIHJlZ2lzdGVyIHNwYWNlCiAgKiBAbG9nZ2luZ19sZXZlbDogc2VlIG1wdDJzYXNfZGVidWcuaAogICogQGZ3ZmF1bHRfZGVidWc6IGRlYnVnaW5nIEZXIHRpbWVvdXRzCiAgKiBAaXJfZmlybXdhcmU6IElSIGZpcm13YXJlIHByZXNlbnQKQEAgLTU4Nyw4ICs1ODgsNyBAQAogCWNoYXIJCXRtcF9zdHJpbmdbTVBUX1NUUklOR19MRU5HVEhdOwogCXN0cnVjdCBwY2lfZGV2CSpwZGV2OwogCU1waTJTeXN0ZW1JbnRlcmZhY2VSZWdzX3QgX19pb21lbSAqY2hpcDsKLQl1bnNpZ25lZCBsb25nCWNoaXBfcGh5czsKLQl1bnNpZ25lZCBsb25nCXBpb19jaGlwOworCXJlc291cmNlX3NpemVfdAljaGlwX3BoeXM7CiAJaW50CQlsb2dnaW5nX2xldmVsOwogCWludAkJZndmYXVsdF9kZWJ1ZzsKIAl1OAkJaXJfZmlybXdhcmU7CkBAIC04NTMsNiArODUzLDggQEAKICAgICAqbXBpX3JlcGx5LCBNcGkySU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UpOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CiAgICAgKm1waV9yZXBseSwgTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MTYgc3opOworaW50IG1wdDJzYXNfY29uZmlnX3NldF9zYXNfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MTYgc3opOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9pb2NfcGc4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKICAgICAqbXBpX3JlcGx5LCBNcGkySU9DUGFnZThfdCAqY29uZmlnX3BhZ2UpOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggNTk0YTM4OS4uNDExYzI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC0zMjQsNyArMzI0LDkgQEAKIAkJaWYgKHIgIT0gMCkKIAkJCWdvdG8gb3V0OwogCQlpZiAobXBpX3JlcXVlc3QtPkFjdGlvbiA9PQotCQkgICAgTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfQ1VSUkVOVCkgeworCQkgICAgTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfQ1VSUkVOVCB8fAorCQkgICAgbXBpX3JlcXVlc3QtPkFjdGlvbiA9PQorCQkgICAgTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfTlZSQU0pIHsKIAkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC0+UGFnZUJ1ZmZlclNHRSwKIAkJCSAgICBNUFQyX0NPTkZJR19DT01NT05fV1JJVEVfU0dMRkxBR1MgfCBtZW0uc3osCiAJCQkgICAgbWVtLnBhZ2VfZG1hKTsKQEAgLTg4Miw3ICs4ODQsNyBAQAogfQogCiAvKioKLSAqIG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMSAtIG9idGFpbiBzYXMgaW91bml0IHBhZ2UgMAorICogbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxIC0gb2J0YWluIHNhcyBpb3VuaXQgcGFnZSAxCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQogICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKQEAgLTkwNyw3ICs5MDksNyBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOwogCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0lPX1VOSVQ7CiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTBfUEFHRVZFUlNJT047CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMV9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKIAkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwpAQCAtOTIyLDYgKzkyNCw0OSBAQAogfQogCiAvKioKKyAqIG1wdDJzYXNfY29uZmlnX3NldF9zYXNfaW91bml0X3BnMSAtIHNlbmQgc2FzIGlvdW5pdCBwYWdlIDEKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQHN6OiBzaXplIG9mIGJ1ZmZlciBwYXNzZWQgaW4gY29uZmlnX3BhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIENhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGNhbGwgY29uZmlnX2dldF9udW1iZXJfaGJhX3BoeXMgcHJpb3IgdG8KKyAqIHRoaXMgZnVuY3Rpb24sIHNvIGVub3VnaCBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBjb25maWdfcGFnZS4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX3NldF9zYXNfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CisgICAgKm1waV9yZXBseSwgTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MTYgc3opCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKKworCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBNUEkyX0NPTkZJR19FWFRQQUdFVFlQRV9TQVNfSU9fVU5JVDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDE7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMV9QQUdFVkVSU0lPTjsKKwltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOworCWlmIChyKQorCQlnb3RvIG91dDsKKworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQ7CisJX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwgc3opOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX05WUkFNOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLCBzeik7Cisgb3V0OgorCXJldHVybiByOworfQorCisvKioKICAqIG1wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAgLSBvYnRhaW4gZXhwYW5kZXIgcGFnZSAwCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKaW5kZXggODRhMTI0Zi4uZmE5YmY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCkBAIC04OTEsNiArODkxLDcgQEAKIAogIGlzc3VlX2hvc3RfcmVzZXQ6CiAJaWYgKGlzc3VlX3Jlc2V0KSB7CisJCXJldCA9IC1FTk9EQVRBOwogCQlpZiAoKG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCB8fAogCQkgICAgbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID09CiAJCSAgICBNUEkyX0ZVTkNUSU9OX1JBSURfU0NTSV9JT19QQVNTVEhST1VHSCkpIHsKQEAgLTIyMDIsMTQgKzIyMDMsMTAgQEAKIAlrYXJnLmRhdGFfb3V0X3NpemUgPSBrYXJnMzIuZGF0YV9vdXRfc2l6ZTsKIAlrYXJnLm1heF9zZW5zZV9ieXRlcyA9IGthcmczMi5tYXhfc2Vuc2VfYnl0ZXM7CiAJa2FyZy5kYXRhX3NnZV9vZmZzZXQgPSBrYXJnMzIuZGF0YV9zZ2Vfb2Zmc2V0OwotCW1lbWNweSgma2FyZy5yZXBseV9mcmFtZV9idWZfcHRyLCAma2FyZzMyLnJlcGx5X2ZyYW1lX2J1Zl9wdHIsCi0JICAgIHNpemVvZih1aW50MzJfdCkpOwotCW1lbWNweSgma2FyZy5kYXRhX2luX2J1Zl9wdHIsICZrYXJnMzIuZGF0YV9pbl9idWZfcHRyLAotCSAgICBzaXplb2YodWludDMyX3QpKTsKLQltZW1jcHkoJmthcmcuZGF0YV9vdXRfYnVmX3B0ciwgJmthcmczMi5kYXRhX291dF9idWZfcHRyLAotCSAgICBzaXplb2YodWludDMyX3QpKTsKLQltZW1jcHkoJmthcmcuc2Vuc2VfZGF0YV9wdHIsICZrYXJnMzIuc2Vuc2VfZGF0YV9wdHIsCi0JICAgIHNpemVvZih1aW50MzJfdCkpOworCWthcmcucmVwbHlfZnJhbWVfYnVmX3B0ciA9IGNvbXBhdF9wdHIoa2FyZzMyLnJlcGx5X2ZyYW1lX2J1Zl9wdHIpOworCWthcmcuZGF0YV9pbl9idWZfcHRyID0gY29tcGF0X3B0cihrYXJnMzIuZGF0YV9pbl9idWZfcHRyKTsKKwlrYXJnLmRhdGFfb3V0X2J1Zl9wdHIgPSBjb21wYXRfcHRyKGthcmczMi5kYXRhX291dF9idWZfcHRyKTsKKwlrYXJnLnNlbnNlX2RhdGFfcHRyID0gY29tcGF0X3B0cihrYXJnMzIuc2Vuc2VfZGF0YV9wdHIpOwogCXN0YXRlID0gKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSA/IE5PTl9CTE9DS0lORyA6IEJMT0NLSU5HOwogCXJldHVybiBfY3RsX2RvX21wdF9jb21tYW5kKGlvYywga2FyZywgJnVhcmctPm1mLCBzdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggZWZhYmVhMS4uYzdlYzNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcmFpZF9jbGFzcy5oPgogCiAjaW5jbHVkZSAibXB0MnNhc19iYXNlLmgiCiAKQEAgLTEzMyw2ICsxMzQsOSBAQAogCXZvaWQJCQkqZXZlbnRfZGF0YTsKIH07CiAKKy8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmFpZF90ZW1wbGF0ZSAqbXB0MnNhc19yYWlkX3RlbXBsYXRlOworCiAvKioKICAqIHN0cnVjdCBfc2NzaV9pb190cmFuc2ZlciAtIHNjc2kgaW8gdHJhbnNmZXIKICAqIEBoYW5kbGU6IHNhcyBkZXZpY2UgaGFuZGxlIChhc3NpZ25lZCBieSBmaXJtd2FyZSkKQEAgLTEzMDUsNyArMTMwOSw2IEBACiAJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CiAJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7Ci0Jc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3NpX2RldmljZSksIEdGUF9LRVJORUwpOwpAQCAtMTMzMiwyMSArMTMzNSw4IEBACiAJCWlmIChyYWlkX2RldmljZSkKIAkJCXJhaWRfZGV2aWNlLT5zZGV2ID0gc2RldjsgLyogcmFpZCBpcyBzaW5nbGUgbHVuICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCS8qIHNldCBUTFIgYml0IGZvciBTU1AgZGV2aWNlcyAqLwotCQlpZiAoIShpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCi0JCSAgICAgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RMUikpCi0JCQlnb3RvIG91dDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7Ci0JCXNhc19kZXZpY2UgPSBtcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCi0JCSAgIHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5zYXNfYWRkcmVzcyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7Ci0JCWlmIChzYXNfZGV2aWNlICYmIHNhc19kZXZpY2UtPmRldmljZV9pbmZvICYKLQkJICAgIE1QSTJfU0FTX0RFVklDRV9JTkZPX1NTUF9UQVJHRVQpCi0JCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgfD0gTVBUX0RFVklDRV9UTFJfT047CiAJfQogCi0gb3V0OgogCXJldHVybiAwOwogfQogCkBAIC0xNDE5LDYgKzE0MDksMTQwIEBACiB9CiAKIC8qKgorICogX3Njc2loX2lzX3JhaWQgLSByZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIGRldmljZSBpcyByYWlkIHZvbHVtZQorICogQGRldiB0aGUgZGV2aWNlIHN0cnVjdCBvYmplY3QKKyAqLworc3RhdGljIGludAorX3Njc2loX2lzX3JhaWQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisKKwlyZXR1cm4gKHNkZXYtPmNoYW5uZWwgPT0gUkFJRF9DSEFOTkVMKSA/IDEgOiAwOworfQorCisvKioKKyAqIF9zY3NpaF9nZXRfcmVzeW5jIC0gZ2V0IHJhaWQgdm9sdW1lIHJlc3luYyBwZXJjZW50IGNvbXBsZXRlCisgKiBAZGV2IHRoZSBkZXZpY2Ugc3RydWN0IG9iamVjdAorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2dldF9yZXN5bmMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKKwlzdGF0aWMgc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlNcGkyUmFpZFZvbFBhZ2UwX3Qgdm9sX3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTMyIHZvbHVtZV9zdGF0dXNfZmxhZ3M7CisJdTggcGVyY2VudF9jb21wbGV0ZSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9pZChpb2MsIHNkZXYtPmlkLAorCSAgICBzZGV2LT5jaGFubmVsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmICghcmFpZF9kZXZpY2UpCisJCWdvdG8gb3V0OworCisJaWYgKG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmdm9sX3BnMCwKKwkgICAgIE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0hBTkRMRSwgcmFpZF9kZXZpY2UtPmhhbmRsZSwKKwkgICAgIHNpemVvZihNcGkyUmFpZFZvbFBhZ2UwX3QpKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCisJdm9sdW1lX3N0YXR1c19mbGFncyA9IGxlMzJfdG9fY3B1KHZvbF9wZzAuVm9sdW1lU3RhdHVzRmxhZ3MpOworCWlmICh2b2x1bWVfc3RhdHVzX2ZsYWdzICYgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19SRVNZTkNfSU5fUFJPR1JFU1MpCisJCXBlcmNlbnRfY29tcGxldGUgPSByYWlkX2RldmljZS0+cGVyY2VudF9jb21wbGV0ZTsKKyBvdXQ6CisJcmFpZF9zZXRfcmVzeW5jKG1wdDJzYXNfcmFpZF90ZW1wbGF0ZSwgZGV2LCBwZXJjZW50X2NvbXBsZXRlKTsKK30KKworLyoqCisgKiBfc2NzaWhfZ2V0X3N0YXRlIC0gZ2V0IHJhaWQgdm9sdW1lIGxldmVsCisgKiBAZGV2IHRoZSBkZXZpY2Ugc3RydWN0IG9iamVjdAorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2dldF9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBzaG9zdF9wcml2KHNkZXYtPmhvc3QpOworCXN0YXRpYyBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCU1waTJSYWlkVm9sUGFnZTBfdCB2b2xfcGcwOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MzIgdm9sc3RhdGU7CisJZW51bSByYWlkX3N0YXRlIHN0YXRlID0gUkFJRF9TVEFURV9VTktOT1dOOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaWQoaW9jLCBzZGV2LT5pZCwKKwkgICAgc2Rldi0+Y2hhbm5lbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIXJhaWRfZGV2aWNlKQorCQlnb3RvIG91dDsKKworCWlmIChtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwKGlvYywgJm1waV9yZXBseSwgJnZvbF9wZzAsCisJICAgICBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJICAgICBzaXplb2YoTXBpMlJhaWRWb2xQYWdlMF90KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCXZvbHN0YXRlID0gbGUzMl90b19jcHUodm9sX3BnMC5Wb2x1bWVTdGF0dXNGbGFncyk7CisJaWYgKHZvbHN0YXRlICYgTVBJMl9SQUlEVk9MMF9TVEFUVVNfRkxBR19SRVNZTkNfSU5fUFJPR1JFU1MpIHsKKwkJc3RhdGUgPSBSQUlEX1NUQVRFX1JFU1lOQ0lORzsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoICh2b2xfcGcwLlZvbHVtZVN0YXRlKSB7CisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX09QVElNQUw6CisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX09OTElORToKKwkJc3RhdGUgPSBSQUlEX1NUQVRFX0FDVElWRTsKKwkJYnJlYWs7CisJY2FzZSAgTVBJMl9SQUlEX1ZPTF9TVEFURV9ERUdSQURFRDoKKwkJc3RhdGUgPSBSQUlEX1NUQVRFX0RFR1JBREVEOworCQlicmVhazsKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfRkFJTEVEOgorCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9NSVNTSU5HOgorCQlzdGF0ZSA9IFJBSURfU1RBVEVfT0ZGTElORTsKKwkJYnJlYWs7CisJfQorIG91dDoKKwlyYWlkX3NldF9zdGF0ZShtcHQyc2FzX3JhaWRfdGVtcGxhdGUsIGRldiwgc3RhdGUpOworfQorCisvKioKKyAqIF9zY3NpaF9zZXRfbGV2ZWwgLSBzZXQgcmFpZCBsZXZlbAorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHJhaWRfZGV2aWNlOiByYWlkX2RldmljZSBvYmplY3QKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9zZXRfbGV2ZWwoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZSkKK3sKKwllbnVtIHJhaWRfbGV2ZWwgbGV2ZWwgPSBSQUlEX0xFVkVMX1VOS05PV047CisKKwlzd2l0Y2ggKHJhaWRfZGV2aWNlLT52b2x1bWVfdHlwZSkgeworCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQwOgorCQlsZXZlbCA9IFJBSURfTEVWRUxfMDsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDEwOgorCQlsZXZlbCA9IFJBSURfTEVWRUxfMTA7CisJCWJyZWFrOworCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxRToKKwkJbGV2ZWwgPSBSQUlEX0xFVkVMXzFFOworCQlicmVhazsKKwljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMToKKwkJbGV2ZWwgPSBSQUlEX0xFVkVMXzE7CisJCWJyZWFrOworCX0KKworCXJhaWRfc2V0X2xldmVsKG1wdDJzYXNfcmFpZF90ZW1wbGF0ZSwgJnNkZXYtPnNkZXZfZ2VuZGV2LCBsZXZlbCk7Cit9CisKKy8qKgogICogX3Njc2loX2dldF92b2x1bWVfY2FwYWJpbGl0aWVzIC0gdm9sdW1lIGNhcGFiaWxpdGllcwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc2FzX2RldmljZTogdGhlIHJhaWRfZGV2aWNlIG9iamVjdApAQCAtMTQ3OSw2ICsxNjAzLDMyIEBACiB9CiAKIC8qKgorICogX3Njc2loX2VuYWJsZV90bHIgLSBzZXR0aW5nIFRMUiBmbGFncworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogRW5hYmxpbmcgVHJhbnNhY3Rpb24gTGF5ZXIgUmV0cmllcyBmb3IgdGFwZSBkZXZpY2VzIHdoZW4KKyAqIHZwZCBwYWdlIDB4OTAgaXMgcHJlc2VudAorICoKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9lbmFibGVfdGxyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCS8qIG9ubHkgZm9yIFRBUEUgKi8KKwlpZiAoc2Rldi0+dHlwZSAhPSBUWVBFX1RBUEUpCisJCXJldHVybjsKKworCWlmICghKGlvYy0+ZmFjdHMuSU9DQ2FwYWJpbGl0aWVzICYgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1RMUikpCisJCXJldHVybjsKKworCXNhc19lbmFibGVfdGxyKHNkZXYpOworCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIlRMUiAlc1xuIiwKKwkgICAgc2FzX2lzX3Rscl9lbmFibGVkKHNkZXYpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CisJcmV0dXJuOworCit9CisKKy8qKgogICogX3Njc2loX3NsYXZlX2NvbmZpZ3VyZSAtIGRldmljZSBjb25maWd1cmUgcm91dGluZS4KICAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKICAqCkBAIC0xNTc0LDYgKzE3MjQsOCBAQAogCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCwKIAkJICAgIHJhaWRfZGV2aWNlLT5udW1fcGRzLCBkcyk7CiAJCV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoLCBTQ1NJX1FERVBUSF9ERUZBVUxUKTsKKwkJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworCQlfc2NzaWhfc2V0X2xldmVsKHNkZXYsIHJhaWRfZGV2aWNlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjIxLDggKzE3NzMsMTAgQEAKIAogCV9zY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgcWRlcHRoLCBTQ1NJX1FERVBUSF9ERUZBVUxUKTsKIAotCWlmIChzc3BfdGFyZ2V0KQorCWlmIChzc3BfdGFyZ2V0KSB7CiAJCXNhc19yZWFkX3BvcnRfbW9kZV9wYWdlKHNkZXYpOworCQlfc2NzaWhfZW5hYmxlX3Rscihpb2MsIHNkZXYpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkwOCw4ICszMDYyLDkgQEAKIAogCX0gZWxzZQogCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1NJTVBMRVE7Ci0KLQlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSkKKwkvKiBNYWtlIHN1cmUgRGV2aWNlIGlzIG5vdCByYWlkIHZvbHVtZSAqLworCWlmICghX3Njc2loX2lzX3JhaWQoJnNjbWQtPmRldmljZS0+c2Rldl9nZW5kZXYpICYmCisJICAgIHNhc19pc190bHJfZW5hYmxlZChzY21kLT5kZXZpY2UpKQogCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1RMUl9PTjsKIAogCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKGlvYywgaW9jLT5zY3NpX2lvX2NiX2lkeCwgc2NtZCk7CkBAIC0zMjk4LDEwICszNDUzLDEyIEBACiAJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlJlc3BvbnNlSW5mbykgJiAweEZGOwogCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEtPnRscl9zbm9vcF9jaGVjaykgewogCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+dGxyX3Nub29wX2NoZWNrKys7Ci0JCWlmICgoc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICYgTVBUX0RFVklDRV9UTFJfT04pICYmCi0JCSAgICByZXNwb25zZV9jb2RlID09IE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JTlZBTElEX0ZSQU1FKQotCQkJc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICY9Ci0JCQkgICAgfk1QVF9ERVZJQ0VfVExSX09OOworCWlmICghX3Njc2loX2lzX3JhaWQoJnNjbWQtPmRldmljZS0+c2Rldl9nZW5kZXYpICYmCisJCXNhc19pc190bHJfZW5hYmxlZChzY21kLT5kZXZpY2UpICYmCisJCSAgICByZXNwb25zZV9jb2RlID09IE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JTlZBTElEX0ZSQU1FKSB7CisJCQlzYXNfZGlzYWJsZV90bHIoc2NtZC0+ZGV2aWNlKTsKKwkJCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2NtZC0+ZGV2aWNlLCAiVExSIGRpc2FibGVkXG4iKTsKKwkJfQogCX0KIAogCXhmZXJfY250ID0gbGUzMl90b19jcHUobXBpX3JlcGx5LT5UcmFuc2ZlckNvdW50KTsKQEAgLTUxNzAsMTEgKzUzMjcsMzMgQEAKIF9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogeworCU1waTJFdmVudERhdGFJck9wZXJhdGlvblN0YXR1c190ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CisJc3RhdGljIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZTsKKwogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQogCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnRfZGVidWcoaW9jLAotCQkgICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJICAgICBldmVudF9kYXRhKTsKICNlbmRpZgorCisJLyogY29kZSBhZGRlZCBmb3IgcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworCWlmIChldmVudF9kYXRhLT5SQUlET3BlcmF0aW9uID09IE1QSTJfRVZFTlRfSVJfUkFJRE9QX1JFU1lOQykgeworCisJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlZvbERldkhhbmRsZSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJCWlmICghcmFpZF9kZXZpY2UpCisJCQlyZXR1cm47CisKKwkJaWYgKGV2ZW50X2RhdGEtPlJBSURPcGVyYXRpb24gPT0gTVBJMl9FVkVOVF9JUl9SQUlET1BfUkVTWU5DKQorCQkJcmFpZF9kZXZpY2UtPnBlcmNlbnRfY29tcGxldGUgPQorCQkJICAgIGV2ZW50X2RhdGEtPlBlcmNlbnRDb21wbGV0ZTsKKwl9CiB9CiAKIC8qKgpAQCAtNTk5OCw2ICs2MTc3LDggQEAKIAlzdHJ1Y3QgX3Nhc19wb3J0ICptcHQyc2FzX3BvcnQ7CiAJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOwogCXN0cnVjdCBfc2FzX25vZGUgKmV4cGFuZGVyX3NpYmxpbmc7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UsICpuZXh0OworCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTYwMTEsNiArNjE5MiwyMSBAQAogCWlmICh3cSkKIAkJZGVzdHJveV93b3JrcXVldWUod3EpOwogCisJLyogcmVsZWFzZSBhbGwgdGhlIHZvbHVtZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmFpZF9kZXZpY2UsIG5leHQsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsCisJICAgIGxpc3QpIHsKKwkJaWYgKHJhaWRfZGV2aWNlLT5zdGFyZ2V0KSB7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9CisJCQkgICAgcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhOworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmRlbGV0ZWQgPSAxOworCQkJc2NzaV9yZW1vdmVfdGFyZ2V0KCZyYWlkX2RldmljZS0+c3RhcmdldC0+ZGV2KTsKKwkJfQorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicmVtb3ZpbmcgaGFuZGxlKDB4JTA0eCksIHd3aWQiCisJCSAgICAiKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwgIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSByYWlkX2RldmljZS0+d3dpZCk7CisJCV9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoaW9jLCByYWlkX2RldmljZSk7CisJfQorCiAJLyogZnJlZSBwb3J0cyBhdHRhY2hlZCB0byB0aGUgc2FzX2hvc3QgKi8KICByZXRyeV9hZ2FpbjoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1wdDJzYXNfcG9ydCwKQEAgLTYzNzMsNiArNjU2OSwxMyBAQAogI2VuZGlmCiB9OwogCisvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCitzdGF0aWMgc3RydWN0IHJhaWRfZnVuY3Rpb25fdGVtcGxhdGUgbXB0MnNhc19yYWlkX2Z1bmN0aW9ucyA9IHsKKwkuY29va2llCQk9ICZzY3NpaF9kcml2ZXJfdGVtcGxhdGUsCisJLmlzX3JhaWQJPSBfc2NzaWhfaXNfcmFpZCwKKwkuZ2V0X3Jlc3luYwk9IF9zY3NpaF9nZXRfcmVzeW5jLAorCS5nZXRfc3RhdGUJPSBfc2NzaWhfZ2V0X3N0YXRlLAorfTsKIAogLyoqCiAgKiBfc2NzaWhfaW5pdCAtIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoaXMgZHJpdmVyLgpAQCAtNjM5Miw2ICs2NTk1LDEyIEBACiAJICAgIHNhc19hdHRhY2hfdHJhbnNwb3J0KCZtcHQyc2FzX3RyYW5zcG9ydF9mdW5jdGlvbnMpOwogCWlmICghbXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpCiAJCXJldHVybiAtRU5PREVWOworCS8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KKwltcHQyc2FzX3JhaWRfdGVtcGxhdGUgPSByYWlkX2NsYXNzX2F0dGFjaCgmbXB0MnNhc19yYWlkX2Z1bmN0aW9ucyk7CisJaWYgKCFtcHQyc2FzX3JhaWRfdGVtcGxhdGUpIHsKKwkJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJbXB0MnNhc19iYXNlX2luaXRpYWxpemVfY2FsbGJhY2tfaGFuZGxlcigpOwogCkBAIC02NDI2LDggKzY2MzUsMTEgQEAKIAltcHQyc2FzX2N0bF9pbml0KCk7CiAKIAllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNjc2loX2RyaXZlcik7Ci0JaWYgKGVycm9yKQorCWlmIChlcnJvcikgeworCQkvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCisJCXJhaWRfY2xhc3NfcmVsZWFzZShtcHQyc2FzX3JhaWRfdGVtcGxhdGUpOwogCQlzYXNfcmVsZWFzZV90cmFuc3BvcnQobXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpOworCX0KIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTY0NDUsNyArNjY1Nyw4IEBACiAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNjc2loX2RyaXZlcik7CiAKLQlzYXNfcmVsZWFzZV90cmFuc3BvcnQobXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpOworCW1wdDJzYXNfY3RsX2V4aXQoKTsKKwogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIoc2NzaV9pb19jYl9pZHgpOwogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGJhc2VfY2JfaWR4KTsKQEAgLTY0NTcsNyArNjY3MCwxMCBAQAogCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fdHJfY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRtX3Nhc19jb250cm9sX2NiX2lkeCk7CiAKLQltcHQyc2FzX2N0bF9leGl0KCk7CisJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworCXJhaWRfY2xhc3NfcmVsZWFzZShtcHQyc2FzX3JhaWRfdGVtcGxhdGUpOworCXNhc19yZWxlYXNlX3RyYW5zcG9ydChtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisKIH0KIAogbW9kdWxlX2luaXQoX3Njc2loX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKaW5kZXggM2E4Mjg3Mi4uNzg5ZjllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCkBAIC04NTUsNiArODU1LDE3IEBACiAJcmV0dXJuIHNob3N0X3ByaXYoc2hvc3QpOwogfQogCitzdGF0aWMgc3RydWN0IF9zYXNfcGh5ICoKK190cmFuc3BvcnRfZmluZF9sb2NhbF9waHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5czsgaSsrKQorCQlpZiAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHkgPT0gcGh5KQorCQkJcmV0dXJuKCZpb2MtPnNhc19oYmEucGh5W2ldKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogLyoqCiAgKiBfdHJhbnNwb3J0X2dldF9saW5rZXJyb3JzIC0KICAqIEBwaHk6IFRoZSBzYXMgcGh5IG9iamVjdApAQCAtODcwLDE0ICs4ODEsOCBAQAogCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CiAJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OwogCU1waTJTYXNQaHlQYWdlMV90IHBoeV9wZzE7Ci0JaW50IGk7CiAKLQlmb3IgKGkgPSAwLCBtcHQyc2FzX3BoeSA9IE5VTEw7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMgJiYKLQkgICAgIW1wdDJzYXNfcGh5OyBpKyspIHsKLQkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5ICE9IHBoeSkKLQkJCWNvbnRpbnVlOwotCQltcHQyc2FzX3BoeSA9ICZpb2MtPnNhc19oYmEucGh5W2ldOwotCX0KKwltcHQyc2FzX3BoeSA9IF90cmFuc3BvcnRfZmluZF9sb2NhbF9waHkoaW9jLCBwaHkpOwogCiAJaWYgKCFtcHQyc2FzX3BoeSkgLyogdGhpcyBwaHkgbm90IG9uIHNhc19ob3N0ICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTcxLDE0ICs5NzYsOCBAQAogCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CiAJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXBseV90IG1waV9yZXBseTsKIAlNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCBtcGlfcmVxdWVzdDsKLQlpbnQgaTsKIAotCWZvciAoaSA9IDAsIG1wdDJzYXNfcGh5ID0gTlVMTDsgaSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cyAmJgotCSAgICAhbXB0MnNhc19waHk7IGkrKykgewotCQlpZiAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHkgIT0gcGh5KQotCQkJY29udGludWU7Ci0JCW1wdDJzYXNfcGh5ID0gJmlvYy0+c2FzX2hiYS5waHlbaV07Ci0JfQorCW1wdDJzYXNfcGh5ID0gX3RyYW5zcG9ydF9maW5kX2xvY2FsX3BoeShpb2MsIHBoeSk7CiAKIAlpZiAoIW1wdDJzYXNfcGh5KSAvKiB0aGlzIHBoeSBub3Qgb24gc2FzX2hvc3QgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDA2LDYgKzEwMDUsMTczIEBACiB9CiAKIC8qKgorICogX3RyYW5zcG9ydF9waHlfZW5hYmxlIC0gZW5hYmxlL2Rpc2FibGUgcGh5cworICogQHBoeTogVGhlIHNhcyBwaHkgb2JqZWN0CisgKiBAZW5hYmxlOiBlbmFibGUgcGh5IHdoZW4gdHJ1ZQorICoKKyAqIE9ubHkgc3VwcG9ydCBzYXNfaG9zdCBkaXJlY3QgYXR0YWNoZWQgcGh5cy4KKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK190cmFuc3BvcnRfcGh5X2VuYWJsZShzdHJ1Y3Qgc2FzX3BoeSAqcGh5LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHBoeV90b19pb2MocGh5KTsKKwlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OworCU1waTJTYXNJT1VuaXRQYWdlMV90ICpzYXNfaW91bml0X3BnMSA9IE5VTEw7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUxNiBpb2Nfc3RhdHVzOworCXUxNiBzejsKKwlpbnQgcmMgPSAwOworCisJbXB0MnNhc19waHkgPSBfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KGlvYywgcGh5KTsKKworCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHNhc19pb3VuaXQgcGFnZSAxICovCisJc3ogPSBvZmZzZXRvZihNcGkyU2FzSU9Vbml0UGFnZTFfdCwgUGh5RGF0YSkgKyAoaW9jLT5zYXNfaGJhLm51bV9waHlzICoKKwkgICAgc2l6ZW9mKE1waTJTYXNJT1VuaXQxUGh5RGF0YV90KSk7CisJc2FzX2lvdW5pdF9wZzEgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19pb3VuaXRfcGcxKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksCisJICAgIHNhc19pb3VuaXRfcGcxLCBzeikpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZW5hYmxlKQorCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVttcHQyc2FzX3BoeS0+cGh5X2lkXS5QaHlGbGFncworCQkgICAgJj0gfk1QSTJfU0FTSU9VTklUMV9QSFlGTEFHU19QSFlfRElTQUJMRTsKKwllbHNlCisJCXNhc19pb3VuaXRfcGcxLT5QaHlEYXRhW21wdDJzYXNfcGh5LT5waHlfaWRdLlBoeUZsYWdzCisJCSAgICB8PSBNUEkyX1NBU0lPVU5JVDFfUEhZRkxBR1NfUEhZX0RJU0FCTEU7CisKKwltcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LCBzYXNfaW91bml0X3BnMSwgc3opOworCisgb3V0OgorCWtmcmVlKHNhc19pb3VuaXRfcGcxKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX3RyYW5zcG9ydF9waHlfc3BlZWQgLSBzZXQgcGh5IG1pbi9tYXggbGluayByYXRlcworICogQHBoeTogVGhlIHNhcyBwaHkgb2JqZWN0CisgKiBAcmF0ZXM6IHJhdGVzIGRlZmluZWQgaW4gc2FzX3BoeV9saW5rcmF0ZXMKKyAqCisgKiBPbmx5IHN1cHBvcnQgc2FzX2hvc3QgZGlyZWN0IGF0dGFjaGVkIHBoeXMuCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfdHJhbnNwb3J0X3BoeV9zcGVlZChzdHJ1Y3Qgc2FzX3BoeSAqcGh5LCBzdHJ1Y3Qgc2FzX3BoeV9saW5rcmF0ZXMgKnJhdGVzKQoreworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHBoeV90b19pb2MocGh5KTsKKwlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OworCU1waTJTYXNJT1VuaXRQYWdlMV90ICpzYXNfaW91bml0X3BnMSA9IE5VTEw7CisJTXBpMlNhc1BoeVBhZ2UwX3QgcGh5X3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTE2IGlvY19zdGF0dXM7CisJdTE2IHN6OworCWludCBpOworCWludCByYyA9IDA7CisKKwltcHQyc2FzX3BoeSA9IF90cmFuc3BvcnRfZmluZF9sb2NhbF9waHkoaW9jLCBwaHkpOworCisJaWYgKCFtcHQyc2FzX3BoeSkgLyogdGhpcyBwaHkgbm90IG9uIHNhc19ob3N0ICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFyYXRlcy0+bWluaW11bV9saW5rcmF0ZSkKKwkJcmF0ZXMtPm1pbmltdW1fbGlua3JhdGUgPSBwaHktPm1pbmltdW1fbGlua3JhdGU7CisJZWxzZSBpZiAocmF0ZXMtPm1pbmltdW1fbGlua3JhdGUgPCBwaHktPm1pbmltdW1fbGlua3JhdGVfaHcpCisJCXJhdGVzLT5taW5pbXVtX2xpbmtyYXRlID0gcGh5LT5taW5pbXVtX2xpbmtyYXRlX2h3OworCisJaWYgKCFyYXRlcy0+bWF4aW11bV9saW5rcmF0ZSkKKwkJcmF0ZXMtPm1heGltdW1fbGlua3JhdGUgPSBwaHktPm1heGltdW1fbGlua3JhdGU7CisJZWxzZSBpZiAocmF0ZXMtPm1heGltdW1fbGlua3JhdGUgPiBwaHktPm1heGltdW1fbGlua3JhdGVfaHcpCisJCXJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlID0gcGh5LT5tYXhpbXVtX2xpbmtyYXRlX2h3OworCisJLyogc2FzX2lvdW5pdCBwYWdlIDEgKi8KKwlzeiA9IG9mZnNldG9mKE1waTJTYXNJT1VuaXRQYWdlMV90LCBQaHlEYXRhKSArIChpb2MtPnNhc19oYmEubnVtX3BoeXMgKgorCSAgICBzaXplb2YoTXBpMlNhc0lPVW5pdDFQaHlEYXRhX3QpKTsKKwlzYXNfaW91bml0X3BnMSA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghc2FzX2lvdW5pdF9wZzEpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgobXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwKKwkgICAgc2FzX2lvdW5pdF9wZzEsIHN6KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKKwkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXM7IGkrKykgeworCQlpZiAobXB0MnNhc19waHktPnBoeV9pZCAhPSBpKSB7CisJCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVtpXS5NYXhNaW5MaW5rUmF0ZSA9CisJCQkgICAgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5LT5taW5pbXVtX2xpbmtyYXRlICsKKwkJCSAgICAoaW9jLT5zYXNfaGJhLnBoeVtpXS5waHktPm1heGltdW1fbGlua3JhdGUgPDwgNCkpOworCQl9IGVsc2UgeworCQkJc2FzX2lvdW5pdF9wZzEtPlBoeURhdGFbaV0uTWF4TWluTGlua1JhdGUgPQorCQkJICAgIChyYXRlcy0+bWluaW11bV9saW5rcmF0ZSArCisJCQkgICAgKHJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlIDw8IDQpKTsKKwkJfQorCX0KKworCWlmIChtcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LCBzYXNfaW91bml0X3BnMSwKKwkgICAgc3opKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbGluayByZXNldCAqLworCV90cmFuc3BvcnRfcGh5X3Jlc2V0KHBoeSwgMCk7CisKKwkvKiByZWFkIHBoeSBwYWdlIDAsIHRoZW4gdXBkYXRlIHRoZSByYXRlcyBpbiB0aGUgc2FzIHRyYW5zcG9ydCBwaHkgKi8KKwlpZiAoIW1wdDJzYXNfY29uZmlnX2dldF9waHlfcGcwKGlvYywgJm1waV9yZXBseSwgJnBoeV9wZzAsCisJICAgIG1wdDJzYXNfcGh5LT5waHlfaWQpKSB7CisJCXBoeS0+bWluaW11bV9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCQkgICAgcGh5X3BnMC5Qcm9ncmFtbWVkTGlua1JhdGUgJiBNUEkyX1NBU19QUkFURV9NSU5fUkFURV9NQVNLKTsKKwkJcGh5LT5tYXhpbXVtX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJCSAgICBwaHlfcGcwLlByb2dyYW1tZWRMaW5rUmF0ZSA+PiA0KTsKKwkJcGh5LT5uZWdvdGlhdGVkX2xpbmtyYXRlID0gX3RyYW5zcG9ydF9jb252ZXJ0X3BoeV9saW5rX3JhdGUoCisJCSAgICBwaHlfcGcwLk5lZ290aWF0ZWRMaW5rUmF0ZSAmCisJCSAgICBNUEkyX1NBU19ORUdfTElOS19SQVRFX01BU0tfUEhZU0lDQUwpOworCX0KKworIG91dDoKKwlrZnJlZShzYXNfaW91bml0X3BnMSk7CisJcmV0dXJuIHJjOworfQorCisKKy8qKgogICogX3RyYW5zcG9ydF9zbXBfaGFuZGxlciAtIHRyYW5zcG9ydCBwb3J0YWwgZm9yIHNtcCBwYXNzdGhydQogICogQHNob3N0OiBzaG9zdCBvYmplY3QKICAqIEBycGh5OiBzYXMgdHJhbnNwb3J0IHJwaHkgb2JqZWN0CkBAIC0xMjA3LDYgKzEzNzMsOCBAQAogCS5nZXRfZW5jbG9zdXJlX2lkZW50aWZpZXIgPSBfdHJhbnNwb3J0X2dldF9lbmNsb3N1cmVfaWRlbnRpZmllciwKIAkuZ2V0X2JheV9pZGVudGlmaWVyCT0gX3RyYW5zcG9ydF9nZXRfYmF5X2lkZW50aWZpZXIsCiAJLnBoeV9yZXNldAkJPSBfdHJhbnNwb3J0X3BoeV9yZXNldCwKKwkucGh5X2VuYWJsZQkJPSBfdHJhbnNwb3J0X3BoeV9lbmFibGUsCisJLnNldF9waHlfc3BlZWQJCT0gX3RyYW5zcG9ydF9waHlfc3BlZWQsCiAJLnNtcF9oYW5kbGVyCQk9IF90cmFuc3BvcnRfc21wX2hhbmRsZXIsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKaW5kZXggYzJmMTAzMi4uZjgwYzFkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKQEAgLTY1NCw3ICs2NTQsNyBAQAogCX0KIAljaGlwID0gJnBtODAwMV9jaGlwc1tlbnQtPmRyaXZlcl9kYXRhXTsKIAlTSE9TVF9UT19TQVNfSEEoc2hvc3QpID0KLQkJa2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHNhc19oYV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHNhc19oYV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIVNIT1NUX1RPX1NBU19IQShzaG9zdCkpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfZnJlZV9ob3N0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggODM3MWQ5MS4uNDlhYzQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC0xNjQwLDggKzE2NDAsMTAgQEAKIAl1aW50MTZfdCBtYltNQUlMQk9YX1JFR0lTVEVSX0NPVU5UXSwgaTsKIAlpbnQgZXJyOwogCisJc3Bpbl91bmxvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwogCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBxbDEyODBfYm9hcmRfdGJsW2hhLT5kZXZudW1dLmZ3bmFtZSwKIAkJCSAgICAgICAmaGEtPnBkZXYtPmRldik7CisJc3Bpbl9sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGxvYWQgaW1hZ2UgXCIlc1wiIGVyciAlZFxuIiwKIAkJICAgICAgIHFsMTI4MF9ib2FyZF90YmxbaGEtPmRldm51bV0uZnduYW1lLCBlcnIpOwpAQCAtMTY5OSw4ICsxNzAxLDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogI2VuZGlmCiAKKwlzcGluX3VubG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIHFsMTI4MF9ib2FyZF90YmxbaGEtPmRldm51bV0uZnduYW1lLAogCQkJICAgICAgICZoYS0+cGRldi0+ZGV2KTsKKwlzcGluX2xvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbG9hZCBpbWFnZSBcIiVzXCIgZXJyICVkXG4iLAogCQkgICAgICAgcWwxMjgwX2JvYXJkX3RibFtoYS0+ZGV2bnVtXS5md25hbWUsIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCAzYTlmNWIyLi45MGQxZTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTExLDcgKzExLDkgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiBzdGF0aWMgaW50IHFsYTI0eHhfdnBvcnRfZGlzYWJsZShzdHJ1Y3QgZmNfdnBvcnQgKiwgYm9vbCk7Ci0KK3N0YXRpYyBpbnQgcWxhODR4eF9yZXNldChzY3NpX3FsYV9ob3N0X3QgKiwgc3RydWN0IG1zZ19lY2hvX2xiICosIHN0cnVjdCBmY19ic2dfam9iICopOworaW50IHFsYTg0eHhfcmVzZXRfY2hpcChzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QsIHVpbnQxNl90ICopOworc3RhdGljIGludCBxbGE4NHh4X21nbXRfY21kKHNjc2lfcWxhX2hvc3RfdCAqLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKiwgc3RydWN0IGZjX2JzZ19qb2IgKik7CiAvKiBTWVNGUyBhdHRyaWJ1dGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3NpemVfdApAQCAtMTE2OCw2ICsxMTcwLDI4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90CitxbGEyNHh4Xzg0eHhfZndfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWludCBydmFsID0gUUxBX1NVQ0NFU1M7CisJdWludDE2X3Qgc3RhdHVzWzJdID0gezAsIDB9OworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihjbGFzc190b19zaG9zdChkZXYpKTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCWlmIChJU19RTEE4NFhYKGhhKSAmJiBoYS0+Y3M4NHh4KSB7CisJCWlmIChoYS0+Y3M4NHh4LT5vcF9md192ZXJzaW9uID09IDApIHsKKwkJCXJ2YWwgPSBxbGE4NHh4X3ZlcmlmeV9jaGlwKHZoYSwgc3RhdHVzKTsKKwl9CisKKwlpZiAoKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpICYmIChzdGF0dXNbMF0gPT0gMCkpCisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJKHVpbnQzMl90KWhhLT5jczg0eHgtPm9wX2Z3X3ZlcnNpb24pOworCX0KKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlxuIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CiBxbGEyeDAwX21waV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKICAgICBjaGFyICpidWYpCiB7CkBAIC0xMjgxLDYgKzEzMDUsOCBAQAogCQkgICBxbGEyeDAwX29wdHJvbV9mY29kZV92ZXJzaW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG9wdHJvbV9md192ZXJzaW9uLCBTX0lSVUdPLCBxbGEyeDAwX29wdHJvbV9md192ZXJzaW9uX3Nob3csCiAJCSAgIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKDg0eHhfZndfdmVyc2lvbiwgU19JUlVHTywgcWxhMjR4eF84NHh4X2Z3X3ZlcnNpb25fc2hvdywKKwkJICAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIodG90YWxfaXNwX2Fib3J0cywgU19JUlVHTywgcWxhMngwMF90b3RhbF9pc3BfYWJvcnRzX3Nob3csCiAJCSAgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG1waV92ZXJzaW9uLCBTX0lSVUdPLCBxbGEyeDAwX21waV92ZXJzaW9uX3Nob3csIE5VTEwpOwpAQCAtMTMxMCw2ICsxMzM2LDcgQEAKIAkmZGV2X2F0dHJfb3B0cm9tX2VmaV92ZXJzaW9uLAogCSZkZXZfYXR0cl9vcHRyb21fZmNvZGVfdmVyc2lvbiwKIAkmZGV2X2F0dHJfb3B0cm9tX2Z3X3ZlcnNpb24sCisJJmRldl9hdHRyXzg0eHhfZndfdmVyc2lvbiwKIAkmZGV2X2F0dHJfdG90YWxfaXNwX2Fib3J0cywKIAkmZGV2X2F0dHJfbXBpX3ZlcnNpb24sCiAJJmRldl9hdHRyX3BoeV92ZXJzaW9uLApAQCAtMTUwNCw4ICsxNTMxLDYgQEAKIAkJZmNwb3J0LT52aGEtPmh3LT5pc3Bfb3BzLT5mYWJyaWNfbG9nb3V0KGZjcG9ydC0+dmhhLAogCQkJZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sCiAJCQlmY3BvcnQtPmRfaWQuYi5hcmVhLCBmY3BvcnQtPmRfaWQuYi5hbF9wYSk7Ci0KLQlxbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjcG9ydCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE3OTUsNiArMTgyMCw1ODEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogQlNHIHN1cHBvcnQgZm9yIEVMUy9DVCBwYXNzIHRocm91Z2ggKi8KK2lubGluZSBzcmJfdCAqCitxbGEyeDAwX2dldF9jdHhfYnNnX3NwKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBmY19wb3J0X3QgKmZjcG9ydCwgc2l6ZV90IHNpemUpCit7CisJc3JiX3QgKnNwOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXN0cnVjdCBzcmJfYnNnX2N0eCAqY3R4OworCisJc3AgPSBtZW1wb29sX2FsbG9jKGhhLT5zcmJfbWVtcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcCkKKwkJZ290byBkb25lOworCWN0eCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpIHsKKwkJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCQlnb3RvIGRvbmU7CisJfQorCisJbWVtc2V0KHNwLCAwLCBzaXplb2YoKnNwKSk7CisJc3AtPmZjcG9ydCA9IGZjcG9ydDsKKwlzcC0+Y3R4ID0gY3R4OworZG9uZToKKwlyZXR1cm4gc3A7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTJ4MDBfcHJvY2Vzc19lbHMoc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKKwlmY19wb3J0X3QgKmZjcG9ydDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OworCXNjc2lfcWxhX2hvc3RfdCAqdmhhOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGE7CisJc3JiX3QgKnNwOworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IHJlcV9zZ19jbnQsIHJzcF9zZ19jbnQ7CisJaW50IHJ2YWwgPSAgKERSSVZFUl9FUlJPUiA8PCAxNik7CisJdWludDE2X3QgbmV4dGxpZCA9IDA7CisJc3RydWN0IHNyYl9ic2cgKmVsczsKKworCS8qICBNdWx0aXBsZSBTRydzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBFTFMgcmVxdWVzdHMgKi8KKyAgICAgICAgaWYgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQgPiAxIHx8CisJCWJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250ID4gMSkgeworCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTworCQkgICAgIm11bHRpcGxlIFNHJ3MgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIEVMUyByZXF1ZXN0cyIKKwkJICAgICIgW3JlcXVlc3Rfc2dfY250OiAleCByZXBseV9zZ19jbnQ6ICV4XVxuIiwKKwkJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCisJCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCkpOworCQlydmFsID0gLUVQRVJNOworCQlnb3RvIGRvbmU7CisgICAgICAgIH0KKworCS8qIEVMUyByZXF1ZXN0IGZvciBycG9ydCAqLworCWlmIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19SUFRfRUxTKSB7CisJCXJwb3J0ID0gYnNnX2pvYi0+cnBvcnQ7CisJCWZjcG9ydCA9ICooZmNfcG9ydF90ICoqKSBycG9ydC0+ZGRfZGF0YTsKKwkJaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKKwkJdmhhID0gc2hvc3RfcHJpdihob3N0KTsKKwkJaGEgPSB2aGEtPmh3OworCQl0eXBlID0gIkZDX0JTR19SUFRfRUxTIjsKKworCQkvKiBtYWtlIHN1cmUgdGhlIHJwb3J0IGlzIGxvZ2dlZCBpbiwKKwkJICogaWYgbm90IHBlcmZvcm0gZmFicmljIGxvZ2luCisJCSAqLworCQlpZiAocWxhMngwMF9mYWJyaWNfbG9naW4odmhhLCBmY3BvcnQsICZuZXh0bGlkKSkgeworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAiZmFpbGVkIHRvIGxvZ2luIHBvcnQgJTA2WCBmb3IgRUxTIHBhc3N0aHJ1XG4iLAorCQkJICAgIGZjcG9ydC0+ZF9pZC5iMjQpKTsKKwkJCXJ2YWwgPSAtRUlPOworCQkJZ290byBkb25lOworCQl9CisJfSBlbHNlIHsKKwkJaG9zdCA9IGJzZ19qb2ItPnNob3N0OworCQl2aGEgPSBzaG9zdF9wcml2KGhvc3QpOworCQloYSA9IHZoYS0+aHc7CisJCXR5cGUgPSAiRkNfQlNHX0hTVF9FTFNfTk9MT0dJTiI7CisKKwkJLyogQWxsb2NhdGUgYSBkdW1teSBmY3BvcnQgc3RydWN0dXJlLCBzaW5jZSBmdW5jdGlvbnMKKwkJICogcHJlcGFyaW5nIHRoZSBJT0NCIGFuZCBtYWlsYm94IGNvbW1hbmQgcmV0cmlldmVzIHBvcnQKKwkJICogc3BlY2lmaWMgaW5mb3JtYXRpb24gZnJvbSBmY3BvcnQgc3RydWN0dXJlLiBGb3IgSG9zdCBiYXNlZAorCQkgKiBFTFMgY29tbWFuZHMgdGhlcmUgd2lsbCBiZSBubyBmY3BvcnQgc3RydWN0dXJlIGFsbG9jYXRlZAorCQkgKi8KKwkJZmNwb3J0ID0gcWxhMngwMF9hbGxvY19mY3BvcnQodmhhLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmY3BvcnQpIHsKKwkJCXJ2YWwgPSAtRU5PTUVNOworCQkJZ290byBkb25lOworCQl9CisKKwkJLyogSW5pdGlhbGl6ZSBhbGwgcmVxdWlyZWQgIGZpZWxkcyBvZiBmY3BvcnQgKi8KKwkJZmNwb3J0LT52aGEgPSB2aGE7CisJCWZjcG9ydC0+dnBfaWR4ID0gdmhhLT52cF9pZHg7CisJCWZjcG9ydC0+ZF9pZC5iLmFsX3BhID0KKwkJICAgIGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5wb3J0X2lkWzBdOworCQlmY3BvcnQtPmRfaWQuYi5hcmVhID0KKwkJICAgIGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5wb3J0X2lkWzFdOworCQlmY3BvcnQtPmRfaWQuYi5kb21haW4gPQorCQkgICAgYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLnBvcnRfaWRbMl07CisJCWZjcG9ydC0+bG9vcF9pZCA9CisJCSAgICAoZmNwb3J0LT5kX2lkLmIuYWxfcGEgPT0gMHhGRCkgPworCQkgICAgTlBIX0ZBQlJJQ19DT05UUk9MTEVSIDogTlBIX0ZfUE9SVDsKKwl9CisKKwlpZiAoIXZoYS0+ZmxhZ3Mub25saW5lKSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiaG9zdCBub3Qgb25saW5lXG4iKSk7CisJCXJ2YWwgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisgICAgICAgIHJlcV9zZ19jbnQgPQorCSAgICBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisgICAgICAgIGlmICghcmVxX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lX2ZyZWVfZmNwb3J0OworCX0KKyAgICAgICAgcnNwX3NnX2NudCA9IGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisgICAgICAgIGlmICghcnNwX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmVfZnJlZV9mY3BvcnQ7CisJfQorCisJaWYgKChyZXFfc2dfY250ICE9ICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KSB8fAorCSAgICAocnNwX3NnX2NudCAhPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCkpCisJeworCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTworCQkgICAgImRtYSBtYXBwaW5nIHJlc3VsdGVkIGluIGRpZmZlcmVudCBzZyBjb3VudHMgXAorCQkgICAgW3JlcXVlc3Rfc2dfY250OiAleCBkbWFfcmVxdWVzdF9zZ19jbnQ6ICV4XAorCQkgICAgcmVwbHlfc2dfY250OiAleCBkbWFfcmVwbHlfc2dfY250OiAleF1cbiIsCisJCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCByZXFfc2dfY250LAorCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIHJzcF9zZ19jbnQpKTsKKwkJcnZhbCA9IC1FQUdBSU47CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKworCS8qIEFsbG9jIFNSQiBzdHJ1Y3R1cmUgKi8KKwlzcCA9IHFsYTJ4MDBfZ2V0X2N0eF9ic2dfc3AodmhhLCBmY3BvcnQsIHNpemVvZihzdHJ1Y3Qgc3JiX2JzZykpOworCWlmICghc3ApIHsKKwkJcnZhbCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKworCWVscyA9IHNwLT5jdHg7CisJZWxzLT5jdHgudHlwZSA9CisJICAgIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19SUFRfRUxTID8KKwkgICAgU1JCX0VMU19DTURfUlBUIDogU1JCX0VMU19DTURfSFNUKTsKKwllbHMtPmJzZ19qb2IgPSBic2dfam9iOworCisJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkgICAgInNjc2koJWxkOiV4KTogYnNnIHJxc3QgdHlwZTogJXMgZWxzIHR5cGU6ICV4IC0gbG9vcC1pZD0leCAiCisJICAgICJwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwgdmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAorCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMuY29tbWFuZF9jb2RlLAorCSAgICBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKKworCXJ2YWwgPSBxbGEyeDAwX3N0YXJ0X3NwKHNwKTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlrZnJlZShzcC0+Y3R4KTsKKwkJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCQlydmFsID0gLUVJTzsKKwkJZ290byBkb25lX3VubWFwX3NnOworCX0KKwlyZXR1cm4gcnZhbDsKKworZG9uZV91bm1hcF9zZzoKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQlic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJZ290byBkb25lX2ZyZWVfZmNwb3J0OworCitkb25lX2ZyZWVfZmNwb3J0OgorCWlmIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19IU1RfRUxTX05PTE9HSU4pCisJCWtmcmVlKGZjcG9ydCk7Citkb25lOgorCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50CitxbGEyeDAwX3Byb2Nlc3NfY3Qoc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisJc3JiX3QgKnNwOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBic2dfam9iLT5zaG9zdDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoaG9zdCk7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJaW50IHJ2YWwgPSAoRFJJVkVSX0VSUk9SIDw8IDE2KTsKKwlpbnQgcmVxX3NnX2NudCwgcnNwX3NnX2NudDsKKwl1aW50MTZfdCBsb29wX2lkOworCXN0cnVjdCBmY19wb3J0ICpmY3BvcnQ7CisJY2hhciAgKnR5cGUgPSAiRkNfQlNHX0hTVF9DVCI7CisJc3RydWN0IHNyYl9ic2cgKmN0OworCisJLyogcGFzcyB0aHJvdWdoIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBJU1AgNEdiIG9yIGhpZ2hlciAqLworICAgICAgICBpZiAoIUlTX0ZXSTJfQ0FQQUJMRShoYSkpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJICAgICJzY3NpKCVsZCk6RmlybXdhcmUgaXMgbm90IGNhcGFibGUgdG8gc3VwcG9ydCBGQyAiCisJCSAgICAiQ1QgcGFzcyB0aHJ1XG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcnZhbCA9IC1FUEVSTTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCisgICAgICAgIHJlcV9zZ19jbnQgPQorCSAgICBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisgICAgICAgIGlmICghcmVxX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworICAgICAgICByc3Bfc2dfY250ID0gZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorICAgICAgICAgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisgICAgICAgIGlmICghcnNwX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCisJaWYgKChyZXFfc2dfY250ICE9ICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KSB8fAorCQkocnNwX3NnX2NudCAhPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCkpCisJeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgImRtYSBtYXBwaW5nIHJlc3VsdGVkIGluIGRpZmZlcmVudCBzZyBjb3VudHMgXAorCQkgICAgW3JlcXVlc3Rfc2dfY250OiAleCBkbWFfcmVxdWVzdF9zZ19jbnQ6ICV4XAorCQkgICAgcmVwbHlfc2dfY250OiAleCBkbWFfcmVwbHlfc2dfY250OiAleF1cbiIsCisJCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCByZXFfc2dfY250LAorCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIHJzcF9zZ19jbnQpKTsKKwkJcnZhbCA9IC1FQUdBSU47CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKworCWlmICghdmhhLT5mbGFncy5vbmxpbmUpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJob3N0IG5vdCBvbmxpbmVcbiIpKTsKKwkJcnZhbCA9IC1FSU87CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKworCWxvb3BfaWQgPQorCSAgICAoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucHJlYW1ibGVfd29yZDEgJiAweEZGMDAwMDAwKQorCSAgICA+PiAyNDsKKwlzd2l0Y2ggKGxvb3BfaWQpIHsKKwkJY2FzZSAweEZDOgorCQkJbG9vcF9pZCA9IGNwdV90b19sZTE2KE5QSF9TTlMpOworCQkJYnJlYWs7CisJCWNhc2UgMHhGQToKKwkJCWxvb3BfaWQgPSB2aGEtPm1nbXRfc3ZyX2xvb3BfaWQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkgICAgIlVua25vd24gbG9vcCBpZDogJXhcbiIsIGxvb3BfaWQpKTsKKwkJCXJ2YWwgPSAtRUlOVkFMOworCQkJZ290byBkb25lX3VubWFwX3NnOworCX0KKworCS8qIEFsbG9jYXRlIGEgZHVtbXkgZmNwb3J0IHN0cnVjdHVyZSwgc2luY2UgZnVuY3Rpb25zIHByZXBhcmluZyB0aGUKKwkgKiBJT0NCIGFuZCBtYWlsYm94IGNvbW1hbmQgcmV0cmlldmVzIHBvcnQgc3BlY2lmaWMgaW5mb3JtYXRpb24KKwkgKiBmcm9tIGZjcG9ydCBzdHJ1Y3R1cmUuIEZvciBIb3N0IGJhc2VkIEVMUyBjb21tYW5kcyB0aGVyZSB3aWxsIGJlCisJICogbm8gZmNwb3J0IHN0cnVjdHVyZSBhbGxvY2F0ZWQKKwkgKi8KKwlmY3BvcnQgPSBxbGEyeDAwX2FsbG9jX2ZjcG9ydCh2aGEsIEdGUF9LRVJORUwpOworCWlmICghZmNwb3J0KQorCXsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gIGRvbmVfdW5tYXBfc2c7CisJfQorCisJLyogSW5pdGlhbGl6ZSBhbGwgcmVxdWlyZWQgIGZpZWxkcyBvZiBmY3BvcnQgKi8KKwlmY3BvcnQtPnZoYSA9IHZoYTsKKwlmY3BvcnQtPnZwX2lkeCA9IHZoYS0+dnBfaWR4OworCWZjcG9ydC0+ZF9pZC5iLmFsX3BhID0gYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucG9ydF9pZFswXTsKKwlmY3BvcnQtPmRfaWQuYi5hcmVhID0gYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucG9ydF9pZFsxXTsKKwlmY3BvcnQtPmRfaWQuYi5kb21haW4gPSBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9jdC5wb3J0X2lkWzJdOworCWZjcG9ydC0+bG9vcF9pZCA9IGxvb3BfaWQ7CisKKwkvKiBBbGxvYyBTUkIgc3RydWN0dXJlICovCisJc3AgPSBxbGEyeDAwX2dldF9jdHhfYnNnX3NwKHZoYSwgZmNwb3J0LCBzaXplb2Yoc3RydWN0IHNyYl9ic2cpKTsKKwlpZiAoIXNwKSB7CisJCXJ2YWwgPSAtRU5PTUVNOworCQlnb3RvIGRvbmVfZnJlZV9mY3BvcnQ7CisJfQorCisJY3QgPSBzcC0+Y3R4OworCWN0LT5jdHgudHlwZSA9IFNSQl9DVF9DTUQ7CisJY3QtPmJzZ19qb2IgPSBic2dfam9iOworCisJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkgICAgInNjc2koJWxkOiV4KTogYnNnIHJxc3QgdHlwZTogJXMgZWxzIHR5cGU6ICV4IC0gbG9vcC1pZD0leCAiCisJICAgICJwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwgdmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAorCSAgICAoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucHJlYW1ibGVfd29yZDIgPj4gMTYpLAorCSAgICBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKKworCXJ2YWwgPSBxbGEyeDAwX3N0YXJ0X3NwKHNwKTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlrZnJlZShzcC0+Y3R4KTsKKwkJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCQlydmFsID0gLUVJTzsKKwkJZ290byBkb25lX2ZyZWVfZmNwb3J0OworCX0KKwlyZXR1cm4gcnZhbDsKKworZG9uZV9mcmVlX2ZjcG9ydDoKKwlrZnJlZShmY3BvcnQpOworZG9uZV91bm1hcF9zZzoKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7Citkb25lOgorCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50CitxbGEyeDAwX3Byb2Nlc3NfdmVuZG9yX3NwZWNpZmljKHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBic2dfam9iLT5zaG9zdDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoaG9zdCk7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJaW50IHJ2YWw7CisJdWludDhfdCBjb21tYW5kX3NlbnQ7CisJdWludDMyX3QgdmVuZG9yX2NtZDsKKwljaGFyICp0eXBlOworCXN0cnVjdCBtc2dfZWNob19sYiBlbHJlcTsKKwl1aW50MTZfdCByZXNwb25zZVtNQUlMQk9YX1JFR0lTVEVSX0NPVU5UXTsKKwl1aW50OF90KiBmd19zdHNfcHRyOworCXVpbnQ4X3QgKnJlcV9kYXRhOworCWRtYV9hZGRyX3QgcmVxX2RhdGFfZG1hOworCXVpbnQzMl90IHJlcV9kYXRhX2xlbjsKKwl1aW50OF90ICpyc3BfZGF0YTsKKwlkbWFfYWRkcl90IHJzcF9kYXRhX2RtYTsKKwl1aW50MzJfdCByc3BfZGF0YV9sZW47CisKKwlpZiAodGVzdF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgeworCQlydmFsID0gLUVCVVNZOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCF2aGEtPmZsYWdzLm9ubGluZSkgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgImhvc3Qgbm90IG9ubGluZVxuIikpOworCQlydmFsID0gLUVJTzsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCisgICAgICAgIGVscmVxLnJlcV9zZ19jbnQgPQorCSAgICBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisgICAgICAgIGlmICghZWxyZXEucmVxX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKyAgICAgICAgZWxyZXEucnNwX3NnX2NudCA9CisJICAgIGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisgICAgICAgIGlmICghZWxyZXEucnNwX3NnX2NudCkgeworCQlydmFsID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCisJaWYgKChlbHJlcS5yZXFfc2dfY250ICE9ICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KSB8fAorCSAgICAoZWxyZXEucnNwX3NnX2NudCAhPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCkpCisJeworCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTworCQkgICAgImRtYSBtYXBwaW5nIHJlc3VsdGVkIGluIGRpZmZlcmVudCBzZyBjb3VudHMgXAorCQkgICAgW3JlcXVlc3Rfc2dfY250OiAleCBkbWFfcmVxdWVzdF9zZ19jbnQ6ICV4XAorCQkgICAgcmVwbHlfc2dfY250OiAleCBkbWFfcmVwbHlfc2dfY250OiAleF1cbiIsCisJCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBlbHJlcS5yZXFfc2dfY250LAorCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIGVscmVxLnJzcF9zZ19jbnQpKTsKKwkJcnZhbCA9IC1FQUdBSU47CisgICAgICAgICAgICAgICAgZ290byBkb25lX3VubWFwX3NnOworCX0KKwlyZXFfZGF0YV9sZW4gPSByc3BfZGF0YV9sZW4gPSBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJcmVxX2RhdGEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHJlcV9kYXRhX2xlbiwKKwkgICAgJnJlcV9kYXRhX2RtYSwgR0ZQX0tFUk5FTCk7CisKKwlyc3BfZGF0YSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgcnNwX2RhdGFfbGVuLAorCSAgICAmcnNwX2RhdGFfZG1hLCBHRlBfS0VSTkVMKTsKKworCS8qIENvcHkgdGhlIHJlcXVlc3QgYnVmZmVyIGluIHJlcV9kYXRhIG5vdyAqLworCXNnX2NvcHlfdG9fYnVmZmVyKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCByZXFfZGF0YSwKKwkgICAgcmVxX2RhdGFfbGVuKTsKKworCWVscmVxLnNlbmRfZG1hID0gcmVxX2RhdGFfZG1hOworCWVscmVxLnJjdl9kbWEgPSByc3BfZGF0YV9kbWE7CisJZWxyZXEudHJhbnNmZXJfc2l6ZSA9IHJlcV9kYXRhX2xlbjsKKworCS8qIFZlbmRvciBjbWQgOiBsb29wYmFjayBvciBFQ0hPIGRpYWdub3N0aWMKKwkgKiBPcHRpb25zOgorCSAqIAlMb29wYmFjayA6IEVpdGhlciBpbnRlcm5hbCBvciBleHRlcm5hbCBsb29wYmFjaworCSAqIAlFQ0hPOiBFQ0hPIEVMUyBvciBWZW5kb3Igc3BlY2lmaWMgRkM0ICBsaW5rIGRhdGEKKwkgKi8KKwl2ZW5kb3JfY21kID0gYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWRbMF07CisJZWxyZXEub3B0aW9ucyA9CisJICAgICooKCh1aW50MzJfdCAqKWJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kKQorCSAgICArIDEpOworCisJc3dpdGNoIChic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZFswXSkgeworCWNhc2UgUUxfVk5EX0xPT1BCQUNLOgorCQlpZiAoaGEtPmN1cnJlbnRfdG9wb2xvZ3kgIT0gSVNQX0NGR19GKSB7CisJCQl0eXBlID0gIkZDX0JTR19IU1RfVkVORE9SX0xPT1BCQUNLIjsKKworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkic2NzaSglbGQpIGJzZyBycXN0IHR5cGU6ICVzIHZlbmRvciBycXN0IHR5cGU6ICV4IG9wdGlvbnM6ICV4LlxuIiwKKwkJCQl2aGEtPmhvc3Rfbm8sIHR5cGUsIHZlbmRvcl9jbWQsIGVscmVxLm9wdGlvbnMpKTsKKworCQkJY29tbWFuZF9zZW50ID0gSU5UX0RFRl9MQl9MT09QQkFDS19DTUQ7CisJCQlydmFsID0gcWxhMngwMF9sb29wYmFja190ZXN0KHZoYSwgJmVscmVxLCByZXNwb25zZSk7CisJCQlpZiAoSVNfUUxBODFYWChoYSkpIHsKKwkJCQlpZiAocmVzcG9uc2VbMF0gPT0gTUJTX0NPTU1BTkRfRVJST1IgJiYgcmVzcG9uc2VbMV0gPT0gTUJTX0xCX1JFU0VUKSB7CisJCQkJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzKCVsZCk6IEFCT1JUaW5nICIKKwkJCQkJCSJJU1BcbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQkJCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CisJCQkJIH0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXR5cGUgPSAiRkNfQlNHX0hTVF9WRU5ET1JfRUNIT19ESUFHIjsKKwkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJInNjc2koJWxkKSBic2cgcnFzdCB0eXBlOiAlcyB2ZW5kb3IgcnFzdCB0eXBlOiAleCBvcHRpb25zOiAleC5cbiIsCisJCQkJdmhhLT5ob3N0X25vLCB0eXBlLCB2ZW5kb3JfY21kLCBlbHJlcS5vcHRpb25zKSk7CisKKwkJCWNvbW1hbmRfc2VudCA9IElOVF9ERUZfTEJfRUNIT19DTUQ7CisJCQlydmFsID0gcWxhMngwMF9lY2hvX3Rlc3QodmhhLCAmZWxyZXEsIHJlc3BvbnNlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFFMQTg0X1JFU0VUOgorCQlpZiAoIUlTX1FMQTg0WFgodmhhLT5odykpIHsKKwkJCXJ2YWwgPSAtRUlOVkFMOworCQkJREVCVUcxNihwcmludGsoCisJCQkJIiVzKCVsZCk6IDh4eHggZXhpdGluZy5cbiIsCisJCQkJX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJcmV0dXJuIHJ2YWw7CisJCX0KKwkJcnZhbCA9IHFsYTg0eHhfcmVzZXQodmhhLCAmZWxyZXEsIGJzZ19qb2IpOworCQlicmVhazsKKwljYXNlIFFMQTg0X01HTVRfQ01EOgorCQlpZiAoIUlTX1FMQTg0WFgodmhhLT5odykpIHsKKwkJCXJ2YWwgPSAtRUlOVkFMOworCQkJREVCVUcxNihwcmludGsoCisJCQkJIiVzKCVsZCk6IDh4eHggZXhpdGluZy5cbiIsCisJCQkJX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJcmV0dXJuIHJ2YWw7CisJCX0KKwkJcnZhbCA9IHFsYTg0eHhfbWdtdF9jbWQodmhhLCAmZWxyZXEsIGJzZ19qb2IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydmFsID0gLUVOT1NZUzsKKwl9CisKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJInNjc2koJWxkKSBWZW5kb3IgcmVxdWVzdCAlcyBmYWlsZWRcbiIsIHZoYS0+aG9zdF9ubywgdHlwZSkpOworCQlydmFsID0gMDsKKwkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOworCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJZndfc3RzX3B0ciA9ICgodWludDhfdCopYnNnX2pvYi0+cmVxLT5zZW5zZSkgKyBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSk7CisJCW1lbWNweSggZndfc3RzX3B0ciwgcmVzcG9uc2UsIHNpemVvZihyZXNwb25zZSkpOworCQlmd19zdHNfcHRyICs9IHNpemVvZihyZXNwb25zZSk7CisgICAgICAgICAgICAgICAgKmZ3X3N0c19wdHIgPSBjb21tYW5kX3NlbnQ7CisJfSBlbHNlIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSJzY3NpKCVsZCkgVmVuZG9yIHJlcXVlc3QgJXMgY29tcGxldGVkXG4iLCB2aGEtPmhvc3Rfbm8sIHR5cGUpKTsKKwkJcnZhbCA9IGJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAwOworCQlic2dfam9iLT5yZXBseV9sZW4gPSBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSkgKyBzaXplb2YocmVzcG9uc2UpICsgc2l6ZW9mKHVpbnQ4X3QpOworCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwkJZndfc3RzX3B0ciA9ICgodWludDhfdCopYnNnX2pvYi0+cmVxLT5zZW5zZSkgKyBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSk7CisJCW1lbWNweShmd19zdHNfcHRyLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CisJCWZ3X3N0c19wdHIgKz0gc2l6ZW9mKHJlc3BvbnNlKTsKKwkJKmZ3X3N0c19wdHIgPSBjb21tYW5kX3NlbnQ7CisJCXNnX2NvcHlfZnJvbV9idWZmZXIoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQlic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgcnNwX2RhdGEsCisJCXJzcF9kYXRhX2xlbik7CisJfQorCWJzZ19qb2ItPmpvYl9kb25lKGJzZ19qb2IpOworCitkb25lX3VubWFwX3NnOgorCisJaWYocmVxX2RhdGEpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCByZXFfZGF0YV9sZW4sCisJCQlyZXFfZGF0YSwgcmVxX2RhdGFfZG1hKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisKK2RvbmU6CisgICAgICAgIHJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50CitxbGEyNHh4X2JzZ19yZXF1ZXN0KHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworICAgICAgICBpbnQgcmV0ID0gLUVJTlZBTDsKKworICAgICAgICBzd2l0Y2ggKGJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUpIHsKKwkJY2FzZSBGQ19CU0dfUlBUX0VMUzoKKwkJY2FzZSBGQ19CU0dfSFNUX0VMU19OT0xPR0lOOgorCQkJcmV0ID0gcWxhMngwMF9wcm9jZXNzX2Vscyhic2dfam9iKTsKKwkJCWJyZWFrOworCQljYXNlIEZDX0JTR19IU1RfQ1Q6CisJCQlyZXQgPSBxbGEyeDAwX3Byb2Nlc3NfY3QoYnNnX2pvYik7CisJCQlicmVhazsKKwkJY2FzZSBGQ19CU0dfSFNUX1ZFTkRPUjoKKwkJCXJldCA9IHFsYTJ4MDBfcHJvY2Vzc192ZW5kb3Jfc3BlY2lmaWMoYnNnX2pvYik7CisJCQlicmVhazsKKwkJY2FzZSBGQ19CU0dfSFNUX0FERF9SUE9SVDoKKwkJY2FzZSBGQ19CU0dfSFNUX0RFTF9SUE9SVDoKKwkJY2FzZSBGQ19CU0dfUlBUX0NUOgorCQlkZWZhdWx0OgorCQkJREVCVUcyKHByaW50aygicWxhMnh4eDogdW5zdXBwb3J0ZWQgQlNHIHJlcXVlc3RcbiIpKTsKKwkJCWJyZWFrOworICAgICAgICB9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcWxhMjR4eF9ic2dfdGltZW91dChzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKyAgICAgICAgc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGJzZ19qb2ItPnNob3N0KTsKKyAgICAgICAgc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisgICAgICAgIHNyYl90ICpzcDsKKyAgICAgICAgaW50IGNudCwgcXVlOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBzdHJ1Y3QgcmVxX3F1ZSAqcmVxOworCXN0cnVjdCBzcmJfYnNnICpzcF9ic2c7CisKKwkvKiBmaW5kIHRoZSBic2cgam9iIGZyb20gdGhlIGFjdGl2ZSBsaXN0IG9mIGNvbW1hbmRzICovCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCWZvciAocXVlID0gMDsgcXVlIDwgaGEtPm1heF9yZXFfcXVldWVzOyBxdWUrKykgeworCQlyZXEgPSBoYS0+cmVxX3FfbWFwW3F1ZV07CisJCWlmICghcmVxKQorCQkJY29udGludWU7CisKKwkJZm9yIChjbnQgPSAxOyBjbnQgPCBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFM7IGNudCsrICkgeworCQkJc3AgPSByZXEtPm91dHN0YW5kaW5nX2NtZHNbY250XTsKKworCQkJaWYgKHNwKSB7CisJCQkJc3BfYnNnID0gKHN0cnVjdCBzcmJfYnNnKilzcC0+Y3R4OworCisJCQkJaWYgKCgoc3BfYnNnLT5jdHgudHlwZSA9PSBTUkJfQ1RfQ01EKSB8fAorCQkJCSAgICAoc3BfYnNnLT5jdHgudHlwZSA9PSBTUkJfRUxTX0NNRF9SUFQpCisJCQkJICAgIHx8ICggc3BfYnNnLT5jdHgudHlwZSA9PSBTUkJfRUxTX0NNRF9IU1QpKSAmJgorCQkJCSAgICAoc3BfYnNnLT5ic2dfam9iID09IGJzZ19qb2IpKSB7CisJCQkJCWlmIChoYS0+aXNwX29wcy0+YWJvcnRfY29tbWFuZChzcCkpIHsKKwkJCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJCQkic2NzaSglbGQpOiBtYnggYWJvcnRfY29tbWFuZCBmYWlsZWRcbiIsIHZoYS0+aG9zdF9ubykpOworCQkJCQkJYnNnX2pvYi0+cmVxLT5lcnJvcnMgPSBic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gLUVJTzsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJCQkic2NzaSglbGQpOiBtYnggYWJvcnRfY29tbWFuZCBzdWNjZXNzXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQkJCWJzZ19qb2ItPnJlcS0+ZXJyb3JzID0gYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJCQkJCX0KKwkJCQkJZ290byBkb25lOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCSJzY3NpKCVsZCkgU1JCIG5vdCBmb3VuZCB0byBhYm9ydFxuIiwgdmhhLT5ob3N0X25vKSk7CisJYnNnX2pvYi0+cmVxLT5lcnJvcnMgPSBic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gLUVOWElPOworCXJldHVybiAwOworCitkb25lOgorCWlmIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19IU1RfQ1QpCisJCWtmcmVlKHNwLT5mY3BvcnQpOworCWtmcmVlKHNwLT5jdHgpOworCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHFsYTJ4eHhfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKIAogCS5zaG93X2hvc3Rfbm9kZV9uYW1lID0gMSwKQEAgLTE4MzgsNiArMjQzOCw4IEBACiAJLnZwb3J0X2NyZWF0ZSA9IHFsYTI0eHhfdnBvcnRfY3JlYXRlLAogCS52cG9ydF9kaXNhYmxlID0gcWxhMjR4eF92cG9ydF9kaXNhYmxlLAogCS52cG9ydF9kZWxldGUgPSBxbGEyNHh4X3Zwb3J0X2RlbGV0ZSwKKwkuYnNnX3JlcXVlc3QgPSBxbGEyNHh4X2JzZ19yZXF1ZXN0LAorCS5ic2dfdGltZW91dCA9IHFsYTI0eHhfYnNnX3RpbWVvdXQsCiB9OwogCiBzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgcWxhMnh4eF90cmFuc3BvcnRfdnBvcnRfZnVuY3Rpb25zID0gewpAQCAtMTg3OCw2ICsyNDgwLDggQEAKIAkuZGV2X2xvc3NfdG1vX2NhbGxiayA9IHFsYTJ4MDBfZGV2X2xvc3NfdG1vX2NhbGxiaywKIAkudGVybWluYXRlX3Jwb3J0X2lvID0gcWxhMngwMF90ZXJtaW5hdGVfcnBvcnRfaW8sCiAJLmdldF9mY19ob3N0X3N0YXRzID0gcWxhMngwMF9nZXRfZmNfaG9zdF9zdGF0cywKKwkuYnNnX3JlcXVlc3QgPSBxbGEyNHh4X2JzZ19yZXF1ZXN0LAorCS5ic2dfdGltZW91dCA9IHFsYTI0eHhfYnNnX3RpbWVvdXQsCiB9OwogCiB2b2lkCkBAIC0xOTA2LDMgKzI1MTAsMTI1IEBACiAJCXNwZWVkID0gRkNfUE9SVFNQRUVEXzFHQklUOwogCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyh2aGEtPmhvc3QpID0gc3BlZWQ7CiB9CitzdGF0aWMgaW50CitxbGE4NHh4X3Jlc2V0KHNjc2lfcWxhX2hvc3RfdCAqaGEsIHN0cnVjdCBtc2dfZWNob19sYiAqbXJlcSwgc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisJaW50ICAgICAgICAgICAgIHJldCA9IDA7CisJaW50ICAgICAgICAgICAgIGNtZDsKKwl1aW50MTZfdCAgICAgICAgY21kX3N0YXR1czsKKworCURFQlVHMTYocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisKKwljbWQgPSAoKigoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQpICsgMikpCisJCQk9PSBBODRfUkVTRVRfRkxBR19FTkFCTEVfRElBR19GVyA/CisJCQkJQTg0X0lTU1VFX1JFU0VUX0RJQUdfRlcgOiBBODRfSVNTVUVfUkVTRVRfT1BfRlc7CisJcmV0ID0gcWxhODR4eF9yZXNldF9jaGlwKGhhLCBjbWQgPT0gQTg0X0lTU1VFX1JFU0VUX0RJQUdfRlcsCisJJmNtZF9zdGF0dXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTg0eHhfbWdtdF9jbWQoc2NzaV9xbGFfaG9zdF90ICpoYSwgc3RydWN0IG1zZ19lY2hvX2xiICptcmVxLCBzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKwlzdHJ1Y3QgYWNjZXNzX2NoaXBfODR4eCAqbW47CisJZG1hX2FkZHJfdCBtbl9kbWEsIG1nbXRfZG1hOworCXZvaWQgKm1nbXRfYiA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJaW50IHJzcF9oZHJfbGVuLCBsZW4gPSAwOworCXN0cnVjdCBxbGE4NF9tc2dfbWdtdCAqcWw4NF9tZ210OworCisJcWw4NF9tZ210ID0gKHN0cnVjdCBxbGE4NF9tc2dfbWdtdCAqKSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcWxhODRfbXNnX21nbXQpKTsKKwlxbDg0X21nbXQtPmNtZCA9CisJCSooKHVpbnQxNl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgMikpOworCXFsODRfbWdtdC0+bWdtdHAudS5tZW0uc3RhcnRfYWRkciA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgMykpOworCXFsODRfbWdtdC0+bGVuID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA0KSk7CisJcWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5pZCA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgNSkpOworCXFsODRfbWdtdC0+bWdtdHAudS5jb25maWcucGFyYW0wID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA2KSk7CisJcWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5wYXJhbTEgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDcpKTsKKwlxbDg0X21nbXQtPm1nbXRwLnUuaW5mby50eXBlID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA4KSk7CisJcWw4NF9tZ210LT5tZ210cC51LmluZm8uY29udGV4dCA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgOSkpOworCisJcnNwX2hkcl9sZW4gPSBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisKKwltbiA9IGRtYV9wb29sX2FsbG9jKGhhLT5ody0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJm1uX2RtYSk7CisJaWYgKG1uID09IE5VTEwpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiJXM6IGRtYSBhbGxvYyBmb3IgZncgYnVmZmVyICIKKwkJImZhaWxlZCVsdVxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChtbiwgMCwgc2l6ZW9mIChzdHJ1Y3QgYWNjZXNzX2NoaXBfODR4eCkpOworCisJbW4tPmVudHJ5X3R5cGUgPSBBQ0NFU1NfQ0hJUF9JT0NCX1RZUEU7CisJbW4tPmVudHJ5X2NvdW50ID0gMTsKKworCXN3aXRjaCAocWw4NF9tZ210LT5jbWQpIHsKKwljYXNlIFFMQTg0X01HTVRfUkVBRF9NRU06CisJCW1uLT5vcHRpb25zID0gY3B1X3RvX2xlMTYoQUNPX0RVTVBfTUVNT1JZKTsKKwkJbW4tPnBhcmFtZXRlcjEgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUubWVtLnN0YXJ0X2FkZHIpOworCQlicmVhazsKKwljYXNlIFFMQTg0X01HTVRfV1JJVEVfTUVNOgorCQltbi0+b3B0aW9ucyA9IGNwdV90b19sZTE2KEFDT19MT0FEX01FTU9SWSk7CisJCW1uLT5wYXJhbWV0ZXIxID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51Lm1lbS5zdGFydF9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBRTEE4NF9NR01UX0NITkdfQ09ORklHOgorCQltbi0+b3B0aW9ucyA9IGNwdV90b19sZTE2KEFDT19DSEFOR0VfQ09ORklHX1BBUkFNKTsKKwkJbW4tPnBhcmFtZXRlcjEgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUuY29uZmlnLmlkKTsKKwkJbW4tPnBhcmFtZXRlcjIgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUuY29uZmlnLnBhcmFtMCk7CisJCW1uLT5wYXJhbWV0ZXIzID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5wYXJhbTEpOworCQlicmVhazsKKwljYXNlIFFMQTg0X01HTVRfR0VUX0lORk86CisJCW1uLT5vcHRpb25zID0gY3B1X3RvX2xlMTYoQUNPX1JFUVVFU1RfSU5GTyk7CisJCW1uLT5wYXJhbWV0ZXIxID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmluZm8udHlwZSk7CisJCW1uLT5wYXJhbWV0ZXIyID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5tZ210cC51LmluZm8uY29udGV4dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdF9tZ210MDsKKwl9CisKKwlpZiAoKGxlbiA9PSBxbDg0X21nbXQtPmxlbikgJiYKKwkJcWw4NF9tZ210LT5jbWQgIT0gUUxBODRfTUdNVF9DSE5HX0NPTkZJRykgeworCQltZ210X2IgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5ody0+cGRldi0+ZGV2LCBsZW4sCisJCQkJJm1nbXRfZG1hLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG1nbXRfYiA9PSBOVUxMKSB7CisJCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlczogZG1hIGFsbG9jIG1nbXRfYiAiCisJCQkiZmFpbGVkJWx1XG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfbWdtdDA7CisJCX0KKwkJbW4tPnRvdGFsX2J5dGVfY250ID0gY3B1X3RvX2xlMzIocWw4NF9tZ210LT5sZW4pOworCQltbi0+ZHNlZ19jb3VudCA9IGNwdV90b19sZTE2KDEpOworCQltbi0+ZHNlZ19hZGRyZXNzWzBdID0gY3B1X3RvX2xlMzIoTFNEKG1nbXRfZG1hKSk7CisJCW1uLT5kc2VnX2FkZHJlc3NbMV0gPSBjcHVfdG9fbGUzMihNU0QobWdtdF9kbWEpKTsKKwkJbW4tPmRzZWdfbGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuKTsKKworCQlpZiAocWw4NF9tZ210LT5jbWQgPT0gUUxBODRfTUdNVF9XUklURV9NRU0pIHsKKwkJCW1lbWNweShtZ210X2IsIHFsODRfbWdtdC0+cGF5bG9hZCwgbGVuKTsKKwkJfQorCX0KKworCXJldCA9IHFsYTJ4MDBfaXNzdWVfaW9jYihoYSwgbW4sIG1uX2RtYSwgMCk7CisJaWYgKChyZXQgIT0gUUxBX1NVQ0NFU1MpIHx8IChxbDg0X21nbXQtPmNtZCA9PSBRTEE4NF9NR01UX1dSSVRFX01FTSkKKwkJfHwgKHFsODRfbWdtdC0+Y21kID09IFFMQTg0X01HTVRfQ0hOR19DT05GSUcpKSB7CisJCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKQorCQkJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzKCVsdSk6IGZhaWxlZFxuIiwKKwkJCQkJX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJfSBlbHNlIGlmICgocWw4NF9tZ210LT5jbWQgPT0gUUxBODRfTUdNVF9SRUFEX01FTSkgfHwKKwkJCShxbDg0X21nbXQtPmNtZCA9PSBRTEE4NF9NR01UX0dFVF9JTkZPKSkgeworCX0KKworCWlmIChtZ210X2IpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+aHctPnBkZXYtPmRldiwgbGVuLCBtZ210X2IsIG1nbXRfZG1hKTsKKworZXhpdF9tZ210MDoKKwlkbWFfcG9vbF9mcmVlKGhhLT5ody0+c19kbWFfcG9vbCwgbW4sIG1uX2RtYSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCAxMjYzZDk3Li5hZmE5NTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ic2dfZmMuaD4KIAogI2RlZmluZSBRTEEyWFhYX0RSSVZFUl9OQU1FICAicWxhMnh4eCIKIApAQCAtMjI4LDYgKzIyOSwyNyBAQAogCXVpbnQxNl90IGZsYWdzOwogfTsKIAorc3RydWN0IHNyYl9ic2dfY3R4IHsKKyNkZWZpbmUgU1JCX0VMU19DTURfUlBUIDMKKyNkZWZpbmUgU1JCX0VMU19DTURfSFNUIDQKKyNkZWZpbmUgU1JCX0NUX0NNRCA1CisJdWludDE2X3QgdHlwZTsKK307CisKK3N0cnVjdCBzcmJfYnNnIHsKKwlzdHJ1Y3Qgc3JiX2JzZ19jdHggY3R4OworCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iOworfTsKKworc3RydWN0IG1zZ19lY2hvX2xiIHsKKwlkbWFfYWRkcl90IHNlbmRfZG1hOworCWRtYV9hZGRyX3QgcmN2X2RtYTsKKwl1aW50MTZfdCByZXFfc2dfY250OworCXVpbnQxNl90IHJzcF9zZ19jbnQ7CisJdWludDE2X3Qgb3B0aW9uczsKKwl1aW50MzJfdCB0cmFuc2Zlcl9zaXplOworfTsKKwogLyoKICAqIElTUCBJL08gUmVnaXN0ZXIgU2V0IHN0cnVjdHVyZSBkZWZpbml0aW9ucy4KICAqLwpAQCAtNTIyLDYgKzU0NCw4IEBACiAjZGVmaW5lIE1CQV9ESVNDQVJEX1JORF9GUkFNRQkweDgwNDgJLyogZGlzY2FyZCBSTkQgZnJhbWUgZHVlIHRvIGVycm9yLiAqLwogI2RlZmluZSBNQkFfUkVKRUNURURfRkNQX0NNRAkweDgwNDkJLyogcmVqZWN0ZWQgRkNQX0NNRC4gKi8KIAorLyogSVNQIG1haWxib3ggbG9vcGJhY2sgZWNobyBkaWFnbm9zdGljIGVycm9yIGNvZGUgKi8KKyNkZWZpbmUgTUJTX0xCX1JFU0VUCTB4MTcKIC8qCiAgKiBGaXJtd2FyZSBvcHRpb25zIDEsIDIsIDMuCiAgKi8KQEAgLTIyMzAsNiArMjI1NCwxMyBAQAogCWludCBtYXhfcV9kZXB0aDsKIH07CiAKKy8qIFBsYWNlIGhvbGRlciBmb3IgRlcgYnVmZmVyIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBxbGZjX2Z3IHsKKwl2b2lkICpmd19idWY7CisJZG1hX2FkZHJfdCBmd19kbWE7CisJdWludDMyX3QgbGVuOworfTsKKwogLyoKICAqIFFsb2dpYyBob3N0IGFkYXB0ZXIgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUuCiAqLwpAQCAtMjU5NCw2ICsyNjI1LDcgQEAKIAlzdHJ1Y3QgcWxhX3N0YXRpc3RpY3MgcWxhX3N0YXRzOwogCXN0cnVjdCBpc3Bfb3BlcmF0aW9ucyAqaXNwX29wczsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisJc3RydWN0IHFsZmNfZncgZndfYnVmOwogfTsKIAogLyoKQEAgLTI3NjYsNCArMjc5OCwxMjcgQEAKIAogI2RlZmluZSBDTURfU1AoQ21uZCkJCSgoQ21uZCktPlNDcC5wdHIpCiAKKy8qCisgKiBCU0cgVmVuZG9yIHNwZWNpZmljIGNvbW1hbmRzCisgKi8KKworI2RlZmluZSBRTF9WTkRfTE9PUEJBQ0sJCTB4MDEKKyNkZWZpbmUgUUxBODRfUkVTRVQJCTB4MDIKKyNkZWZpbmUgUUxBODRfVVBEQVRFX0ZXCQkweDAzCisjZGVmaW5lIFFMQTg0X01HTVRfQ01ECQkweDA0CisKKy8qIEJTRyBkZWZpbmF0aW9ucyBmb3IgaW50ZXJwcmV0aW5nIENvbW1hbmRTZW50IGZpZWxkICovCisjZGVmaW5lIElOVF9ERUZfTEJfTE9PUEJBQ0tfQ01EICAgICAgICAgMAorI2RlZmluZSBJTlRfREVGX0xCX0VDSE9fQ01EICAgICAgICAgICAgIDEKKworLyogQlNHIFZlbmRvciBzcGVjaWZpYyBkZWZpbmF0aW9ucyAqLwordHlwZWRlZiBzdHJ1Y3QgX0E4NF9SRVNFVCB7CisJdWludDE2X3QgRmxhZ3M7CisJdWludDE2X3QgUmVzZXJ2ZWQ7CisjZGVmaW5lIEE4NF9SRVNFVF9GTEFHX0VOQUJMRV9ESUFHX0ZXICAgMQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBBODRfUkVTRVQsICpQQTg0X1JFU0VUOworCisjZGVmaW5lIEE4NF9JU1NVRV9XUklURV9UWVBFX0NNRCAgICAgICAgMAorI2RlZmluZSBBODRfSVNTVUVfUkVBRF9UWVBFX0NNRCAgICAgICAgIDEKKyNkZWZpbmUgQTg0X0NMRUFOVVBfQ01EICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEE4NF9JU1NVRV9SRVNFVF9PUF9GVyAgICAgICAgICAgMworI2RlZmluZSBBODRfSVNTVUVfUkVTRVRfRElBR19GVyAgICAgICAgIDQKKyNkZWZpbmUgQTg0X0lTU1VFX1VQREFURV9PUEZXX0NNRCAgICAgICA1CisjZGVmaW5lIEE4NF9JU1NVRV9VUERBVEVfRElBR0ZXX0NNRCAgICAgNgorCitzdHJ1Y3QgcWxhODRfbWdtdF9wYXJhbSB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3Qgc3RhcnRfYWRkcjsKKwkJfSBtZW07IC8qIGZvciBRTEE4NF9NR01UX1JFQUQvV1JJVEVfTUVNICovCisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBpZDsKKyNkZWZpbmUgUUxBODRfTUdNVF9DT05GSUdfSURfVUlGICAgICAgICAxCisjZGVmaW5lIFFMQTg0X01HTVRfQ09ORklHX0lEX0ZDT0VfQ09TICAgMgorI2RlZmluZSBRTEE4NF9NR01UX0NPTkZJR19JRF9QQVVTRSAgICAgIDMKKyNkZWZpbmUgUUxBODRfTUdNVF9DT05GSUdfSURfVElNRU9VVFMgICA0CisKKwkJdWludDMyX3QgcGFyYW0wOworCQl1aW50MzJfdCBwYXJhbTE7CisJfSBjb25maWc7IC8qIGZvciBRTEE4NF9NR01UX0NITkdfQ09ORklHICovCisKKwlzdHJ1Y3QgeworCQl1aW50MzJfdCB0eXBlOworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fQ09ORklHX0xPR19EQVRBICAgICAgICAgMSAvKiBHZXQgQ29uZmlnIExvZyBEYXRhICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19MT0dfREFUQSAgICAgICAgICAgICAgICAyIC8qIEdldCBMb2cgRGF0YSAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fUE9SVF9TVEFUICAgICAgICAgICAgICAgMyAvKiBHZXQgUG9ydCBTdGF0aXN0aWNzICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19MSUZfU1RBVCAgICAgICAgICAgICAgICA0IC8qIEdldCBMSUYgU3RhdGlzdGljcyAgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX0FTSUNfU1RBVCAgICAgICAgICAgICAgIDUgLyogR2V0IEFTSUMgU3RhdGlzdGljcyAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fQ09ORklHX1BBUkFNUyAgICAgICAgICAgNiAvKiBHZXQgQ29uZmlnIFBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX1BBTklDX0xPRyAgICAgICAgICAgICAgIDcgLyogR2V0IFBhbmljIExvZyAqLworCisJCXVpbnQzMl90IGNvbnRleHQ7CisvKgorKiBjb250ZXh0IGRlZmluaXRpb25zIGZvciBRTEE4NF9NR01UX0lORk9fQ09ORklHX0xPR19EQVRBCisqLworI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfREVCVUdfTE9HICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9MRUFSTl9MT0cgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0ZDX0FDTF9JTkdSRVNTX0xPRyAgICAgICAgICAgMgorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfRkNfQUNMX0VHUkVTU19MT0cgICAgICAgICAgICAzCisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9FVEhFUk5FVF9BQ0xfSU5HUkVTU19MT0cgICAgIDQKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0VUSEVSTkVUX0FDTF9FR1JFU1NfTE9HICAgICAgNQorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfTUVTU0FHRV9UUkFOU01JVF9MT0cgICAgICAgICA2CisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9NRVNTQUdFX1JFQ0VJVkVfTE9HICAgICAgICAgIDcKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0xJTktfRVZFTlRfTE9HICAgICAgICAgICAgICAgOAorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfRENYX0xPRyAgICAgICAgICAgICAgICAgICAgICA5CisKKy8qCisqIGNvbnRleHQgZGVmaW5pdGlvbnMgZm9yIFFMQTg0X01HTVRfSU5GT19QT1JUX1NUQVQKKyovCisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9FVEhFUk5FVF9QT1JUMCAgIDAKKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX0VUSEVSTkVUX1BPUlQxICAgMQorI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfTlNMX1BPUlQwICAgICAgICAyCisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9OU0xfUE9SVDEgICAgICAgIDMKKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX0ZDX1BPUlQwICAgICAgICAgNAorI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfRkNfUE9SVDEgICAgICAgICA1CisKKworLyoKKyogY29udGV4dCBkZWZpbml0aW9ucyBmb3IgUUxBODRfTUdNVF9JTkZPX0xJRl9TVEFUCisqLworI2RlZmluZSBJQ19MSUZfU1RBVElTVElDU19MSUZfTlVNQkVSX0VUSEVSTkVUX1BPUlQwICAgICAwCisjZGVmaW5lIElDX0xJRl9TVEFUSVNUSUNTX0xJRl9OVU1CRVJfRVRIRVJORVRfUE9SVDEgICAgIDEKKyNkZWZpbmUgSUNfTElGX1NUQVRJU1RJQ1NfTElGX05VTUJFUl9GQ19QT1JUMCAgICAgICAgICAgMgorI2RlZmluZSBJQ19MSUZfU1RBVElTVElDU19MSUZfTlVNQkVSX0ZDX1BPUlQxICAgICAgICAgICAzCisjZGVmaW5lIElDX0xJRl9TVEFUSVNUSUNTX0xJRl9OVU1CRVJfQ1BVICAgICAgICAgICAgICAgIDYKKworCQl9IGluZm87IC8qIGZvciBRTEE4NF9NR01UX0dFVF9JTkZPICovCisJfSB1OworfTsKKworc3RydWN0IHFsYTg0X21zZ19tZ210IHsKKwl1aW50MTZfdCBjbWQ7CisjZGVmaW5lIFFMQTg0X01HTVRfUkVBRF9NRU0gICAgIDB4MDAKKyNkZWZpbmUgUUxBODRfTUdNVF9XUklURV9NRU0gICAgMHgwMQorI2RlZmluZSBRTEE4NF9NR01UX0NITkdfQ09ORklHICAweDAyCisjZGVmaW5lIFFMQTg0X01HTVRfR0VUX0lORk8gICAgIDB4MDMKKwl1aW50MTZfdCByc3J2ZDsKKwlzdHJ1Y3QgcWxhODRfbWdtdF9wYXJhbSBtZ210cDsvKiBwYXJhbWV0ZXJzIGZvciBjbWQgKi8KKwl1aW50MzJfdCBsZW47IC8qIGJ5dGVzIGluIHBheWxvYWQgZm9sbG93aW5nIHRoaXMgc3RydWN0ICovCisJdWludDhfdCBwYXlsb2FkWzBdOyAvKiBwYXlsb2FkIGZvciBjbWQgKi8KK307CisKK3N0cnVjdCBtc2dfdXBkYXRlX2Z3IHsKKwkvKgorCSogZGlhZ19mdyA9IDAgIG9wZXJhdGlvbmFsIGZ3CisJKiAgICAgIG90aGVyd2lzZSBkaWFnbm9zdGljIGZ3CisJKiBvZmZzZXQsIGxlbiwgZndfbGVuIGFyZSBwcmVzZW50IHRvIG92ZXJjb21lIHRoZSBjdXJyZW50IGxpbWl0YXRpb24KKwkqIG9mIDEyOEtiIHhmZXIgc2l6ZS4gVGhlIGZ3IGlzIHNlbnQgaW4gc21hbGxlciBjaHVua3MuIEVhY2ggY2h1bmsKKwkqIHNwZWNpZmllcyB0aGUgYnl0ZSAib2Zmc2V0IiB3aGVyZSBpdCBmaXRzIGluIHRoZSBmdyBidWZmZXIuIFRoZQorCSogbnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggY2h1bmsgaXMgc3BlY2lmaWVkIGluICJsZW4iLiAiZndfbGVuIgorCSogaXMgdGhlIHRvdGFsIHNpemUgb2YgZncuIFRoZSBmaXJzdCBjaHVuayBzaG91bGQgc3RhcnQgYXQgb2Zmc2V0ID0gMC4KKwkqIFdoZW4gb2Zmc2V0K2xlbiA9PSBmd19sZW4sIHRoZSBmdyBpcyB3cml0dGVuIHRvIHRoZSBIQkEuCisJKi8KKwl1aW50MzJfdCBkaWFnX2Z3OworCXVpbnQzMl90IG9mZnNldDsvKiBzdGFydCBvZmZzZXQgKi8KKwl1aW50MzJfdCBsZW47ICAgLyogbnVtIGJ5dGVzIGluIGN1ciB4ZmVyICovCisJdWludDMyX3QgZndfbGVuOyAvKiBzaXplIG9mIGZ3IGluIGJ5dGVzICovCisJdWludDhfdCBmd19ieXRlc1swXTsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAppbmRleCA2NmE4ZGE1Li5jZWJmNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaApAQCAtNjI3LDYgKzYyNywzOSBAQAogCXVpbnQzMl90IHJ4X2xlbjsJCS8qIERhdGEgc2VnbWVudCAxIGxlbmd0aC4gKi8KIH07CiAKK3N0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHggeworCXVpbnQ4X3QgZW50cnlfdHlwZTsJCS8qIEVudHJ5IHR5cGUuICovCisJdWludDhfdCBlbnRyeV9jb3VudDsJCS8qIEVudHJ5IGNvdW50LiAqLworCXVpbnQ4X3Qgc3lzX2RlZmluZTsJCS8qIFN5c3RlbSBEZWZpbmVkLiAqLworCXVpbnQ4X3QgZW50cnlfc3RhdHVzOwkJLyogRW50cnkgU3RhdHVzLiAqLworCisJdWludDMyX3QgaGFuZGxlOwkJLyogU3lzdGVtIGhhbmRsZS4gKi8KKworCXVpbnQxNl90IGNvbXBfc3RhdHVzOworCisJdWludDE2X3QgbnBvcnRfaGFuZGxlOwkJLyogTl9QT1JUIGhhbmRsZS4gKi8KKworCXVpbnQxNl90IHJlc2VydmVkXzE7CisKKwl1aW50OF90IHZwX2luZGV4OworCXVpbnQ4X3Qgc29mX3R5cGU7CisKKwl1aW50MzJfdCByeF94Y2hnX2FkZHJlc3M7CS8qIFJlY2VpdmUgZXhjaGFuZ2UgYWRkcmVzcy4gKi8KKwl1aW50MTZfdCByZXNlcnZlZF8yOworCisJdWludDhfdCBvcGNvZGU7CisJdWludDhfdCByZXNlcnZlZF8zOworCisJdWludDhfdCBwb3J0X2lkWzNdOworCXVpbnQ4X3QgcmVzZXJ2ZWRfNDsKKworCXVpbnQxNl90IHJlc2VydmVkXzU7CisKKwl1aW50MTZfdCBjb250cm9sX2ZsYWdzOwkJLyogQ29udHJvbCBmbGFncy4gKi8KKwl1aW50MzJfdCB0b3RhbF9ieXRlX2NvdW50OworCXVpbnQzMl90IGVycm9yX3N1YmNvZGVfMTsKKwl1aW50MzJfdCBlcnJvcl9zdWJjb2RlXzI7Cit9OwogLyoKICAqIElTUCBxdWV1ZSAtIE1haWxib3ggQ29tbWFuZCBlbnRyeSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IDhiYzZmNTMuLjNhODliYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTYwLDYgKzYwLDggQEAKIGV4dGVybiBpbnQgcWxhMngwMF9hc3luY19sb2dvdXRfZG9uZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBmY19wb3J0X3QgKiwKICAgICB1aW50MTZfdCAqKTsKIAorZXh0ZXJuIGZjX3BvcnRfdCAqCitxbGEyeDAwX2FsbG9jX2ZjcG9ydChzY3NpX3FsYV9ob3N0X3QgKiwgZ2ZwX3QgKTsKIC8qCiAgKiBHbG9iYWwgRGF0YSBpbiBxbGFfb3MuYyBzb3VyY2UgZmlsZS4KICAqLwpAQCAtNzYsNiArNzgsNyBAQAogZXh0ZXJuIGludCBxbDJ4bWF4cXVldWVzOwogZXh0ZXJuIGludCBxbDJ4bXVsdGlxdWVfdGFnOwogZXh0ZXJuIGludCBxbDJ4Zndsb2FkYmluOworZXh0ZXJuIGludCBxbDJ4ZXRzZW5hYmxlOwogCiBleHRlcm4gaW50IHFsYTJ4MDBfbG9vcF9yZXNldChzY3NpX3FsYV9ob3N0X3QgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2Fib3J0X2FsbF9jbWRzKHNjc2lfcWxhX2hvc3RfdCAqLCBpbnQpOwpAQCAtOTQsNyArOTcsNiBAQAogCiBleHRlcm4gaW50IHFsYTgxeHhfcmVzdGFydF9tcGlfZmlybXdhcmUoc2NzaV9xbGFfaG9zdF90ICopOwogCi1leHRlcm4gdm9pZCBxbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjX3BvcnRfdCAqKTsKIGV4dGVybiBzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqcWxhMngwMF9jcmVhdGVfaG9zdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICosCiAJc3RydWN0IHFsYV9od19kYXRhICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9mcmVlX2hvc3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CkBAIC0xNTQsNiArMTU2LDcgQEAKIGludCBfX3FsYTJ4MDBfbWFya2VyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHN0cnVjdCByZXFfcXVlICosIHN0cnVjdCByc3BfcXVlICosCiAJCQkJCQl1aW50MTZfdCwgdWludDE2X3QsIHVpbnQ4X3QpOwogZXh0ZXJuIGludCBxbGEyeDAwX3N0YXJ0X3NwKHNyYl90ICopOworZXh0ZXJuIHZvaWQgcWxhMngwMF9jdHhfc3BfZnJlZShzcmJfdCAqKTsKIAogLyoKICAqIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzIGluIHFsYV9tYnguYyBzb3VyY2UgZmlsZS4KQEAgLTQyNiw2ICs0MjksOCBAQAogZXh0ZXJuIHZvaWQgcWxhMngwMF9pbml0X2hvc3RfYXR0cihzY3NpX3FsYV9ob3N0X3QgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2FsbG9jX3N5c2ZzX2F0dHIoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9mcmVlX3N5c2ZzX2F0dHIoc2NzaV9xbGFfaG9zdF90ICopOworZXh0ZXJuIGludCBxbGEyeDAwX2xvb3BiYWNrX3Rlc3Qoc2NzaV9xbGFfaG9zdF90ICosIHN0cnVjdCBtc2dfZWNob19sYiAqLCB1aW50MTZfdCAqKTsKK2V4dGVybiBpbnQgcWxhMngwMF9lY2hvX3Rlc3Qoc2NzaV9xbGFfaG9zdF90ICosIHN0cnVjdCBtc2dfZWNob19sYiAqLCB1aW50MTZfdCAqKTsKIAogLyoKICAqIEdsb2JhbCBGdW5jdGlvbiBQcm90b3R5cGVzIGluIHFsYV9kZnMuYyBzb3VyY2UgZmlsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IDNmOGU4NDkuLmE2N2IyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtNjIsNyArNjIsNyBAQAogCWN0eC0+ZnJlZShzcCk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBxbGEyeDAwX2N0eF9zcF9mcmVlKHNyYl90ICpzcCkKIHsKIAlzdHJ1Y3Qgc3JiX2N0eCAqY3R4ID0gc3AtPmN0eDsKQEAgLTMzOCw2ICszMzgsMTYgQEAKIAlydmFsID0gcWxhMngwMF9pbml0X3JpbmdzKHZoYSk7CiAJaGEtPmZsYWdzLmNoaXBfcmVzZXRfZG9uZSA9IDE7CiAKKwlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUyAmJiBJU19RTEE4NFhYKGhhKSkgeworCS8qIElzc3VlIHZlcmlmeSA4NHh4IEZXIElPQ0IgdG8gY29tcGxldGUgODR4eCBpbml0aWFsaXphdGlvbiAqLworCQlydmFsID0gcWxhODR4eF9pbml0X2NoaXAodmhhKTsKKwkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkJCSJVbmFibGUgdG8gaW5pdGlhbGl6ZSBJU1A4NFhYLlxuIik7CisJCXFsYTg0eHhfcHV0X2NoaXAodmhhKTsKKwkJfQorCX0KKwogCXJldHVybiAocnZhbCk7CiB9CiAKQEAgLTIyMTYsNyArMjIyNiw3IEBACiAgKgogICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBmY3BvcnQsIG9yIE5VTEwsIGlmIG5vbmUgYXZhaWxhYmxlLgogICovCi1zdGF0aWMgZmNfcG9ydF90ICoKK2ZjX3BvcnRfdCAqCiBxbGEyeDAwX2FsbG9jX2ZjcG9ydChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJZmNfcG9ydF90ICpmY3BvcnQ7CkBAIC0yOTAwLDggKzI5MTAsMTMgQEAKIAkJaWYgKHFsYTJ4MDBfaXNfcmVzZXJ2ZWRfaWQodmhhLCBsb29wX2lkKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX2Rvd25fdGltZXIpIHx8IExPT1BfVFJBTlNJVElPTih2aGEpKQorCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSB8fAorCQkgICAgTE9PUF9UUkFOU0lUSU9OKHZoYSkpIHsKKwkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9kb3duX3RpbWVyLCAwKTsKKwkJCXNldF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQkJc2V0X2JpdChMT0NBTF9MT09QX1VQREFURSwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCWJyZWFrOworCQl9CiAKIAkJaWYgKHN3bCAhPSBOVUxMKSB7CiAJCQlpZiAobGFzdF9kZXYpIHsKQEAgLTQ4NzcsNiArNDg5MiwxNSBAQAogfQogCiB2b2lkCi1xbGE4MXh4X3VwZGF0ZV9md19vcHRpb25zKHNjc2lfcWxhX2hvc3RfdCAqaGEpCitxbGE4MXh4X3VwZGF0ZV9md19vcHRpb25zKHNjc2lfcWxhX2hvc3RfdCAqdmhhKQogeworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJaWYgKCFxbDJ4ZXRzZW5hYmxlKQorCQlyZXR1cm47CisKKwkvKiBFbmFibGUgRVRTIEJ1cnN0LiAqLworCW1lbXNldChoYS0+Zndfb3B0aW9ucywgMCwgc2l6ZW9mKGhhLT5md19vcHRpb25zKSk7CisJaGEtPmZ3X29wdGlvbnNbMl0gfD0gQklUXzk7CisJcWxhMngwMF9zZXRfZndfb3B0aW9ucyh2aGEsIGhhLT5md19vcHRpb25zKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCmluZGV4IGM1Y2NhYzAuLjgyOTlhOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwpAQCAtMTAyNSw2ICsxMDI1LDExOSBAQAogCS8qIEltcGxpY2l0OiBtYngtPm1ieDEwID0gMC4gKi8KIH0KIAorc3RhdGljIHZvaWQKK3FsYTI0eHhfZWxzX2lvY2Ioc3JiX3QgKnNwLCBzdHJ1Y3QgZWxzX2VudHJ5XzI0eHggKmVsc19pb2NiKQoreworCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iID0gKChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eCktPmJzZ19qb2I7CisKKyAgICAgICAgZWxzX2lvY2ItPmVudHJ5X3R5cGUgPSBFTFNfSU9DQl9UWVBFOworICAgICAgICBlbHNfaW9jYi0+ZW50cnlfY291bnQgPSAxOworICAgICAgICBlbHNfaW9jYi0+c3lzX2RlZmluZSA9IDA7CisgICAgICAgIGVsc19pb2NiLT5lbnRyeV9zdGF0dXMgPSAwOworICAgICAgICBlbHNfaW9jYi0+aGFuZGxlID0gc3AtPmhhbmRsZTsKKyAgICAgICAgZWxzX2lvY2ItPm5wb3J0X2hhbmRsZSA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmxvb3BfaWQpOworICAgICAgICBlbHNfaW9jYi0+dHhfZHNkX2NvdW50ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KTsKKyAgICAgICAgZWxzX2lvY2ItPnZwX2luZGV4ID0gc3AtPmZjcG9ydC0+dnBfaWR4OworICAgICAgICBlbHNfaW9jYi0+c29mX3R5cGUgPSBFU1RfU09GSTM7CisgICAgICAgIGVsc19pb2NiLT5yeF9kc2RfY291bnQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KTsKKworICAgICAgICBlbHNfaW9jYi0+b3Bjb2RlID0oKChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eCktPmN0eC50eXBlID09IFNSQl9FTFNfQ01EX1JQVCkgPworCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEucl9lbHMuZWxzX2NvZGUgOiBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMuY29tbWFuZF9jb2RlOworICAgICAgICBlbHNfaW9jYi0+cG9ydF9pZFswXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5hbF9wYTsKKyAgICAgICAgZWxzX2lvY2ItPnBvcnRfaWRbMV0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuYXJlYTsKKyAgICAgICAgZWxzX2lvY2ItPnBvcnRfaWRbMl0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuZG9tYWluOworICAgICAgICBlbHNfaW9jYi0+Y29udHJvbF9mbGFncyA9IDA7CisgICAgICAgIGVsc19pb2NiLT5yeF9ieXRlX2NvdW50ID0KKyAgICAgICAgICAgIGNwdV90b19sZTMyKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pOworICAgICAgICBlbHNfaW9jYi0+dHhfYnl0ZV9jb3VudCA9CisgICAgICAgICAgICBjcHVfdG9fbGUzMihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4pOworCisgICAgICAgIGVsc19pb2NiLT50eF9hZGRyZXNzWzBdID0gY3B1X3RvX2xlMzIoTFNEKHNnX2RtYV9hZGRyZXNzCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGVsc19pb2NiLT50eF9hZGRyZXNzWzFdID0gY3B1X3RvX2xlMzIoTVNEKHNnX2RtYV9hZGRyZXNzCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGVsc19pb2NiLT50eF9sZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKTsKKworICAgICAgICBlbHNfaW9jYi0+cnhfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAgKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCkpKTsKKyAgICAgICAgZWxzX2lvY2ItPnJ4X2FkZHJlc3NbMV0gPSBjcHVfdG9fbGUzMihNU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgIChic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGVsc19pb2NiLT5yeF9sZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkCitxbGEyNHh4X2N0X2lvY2Ioc3JiX3QgKnNwLCBzdHJ1Y3QgY3RfZW50cnlfMjR4eCAqY3RfaW9jYikKK3sKKwl1aW50MTZfdCAgICAgICAgYXZhaWxfZHNkczsKKwl1aW50MzJfdCAgICAgICAgKmN1cl9kc2Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaW5kZXg7CisJdWludDE2X3QgdG90X2RzZHM7CisgICAgICAgIHNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc3AtPmZjcG9ydC0+dmhhOworCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iID0gKChzdHJ1Y3Qgc3JiX2JzZyopc3AtPmN0eCktPmJzZ19qb2I7CisJaW50IGxvb3BfaXRlcmFydGlvbiA9IDA7CisJaW50IGNvbnRfaW9jYl9wcnNudCA9IDA7CisJaW50IGVudHJ5X2NvdW50ID0gMTsKKworCWN0X2lvY2ItPmVudHJ5X3R5cGUgPSBDVF9JT0NCX1RZUEU7CisgICAgICAgIGN0X2lvY2ItPmVudHJ5X3N0YXR1cyA9IDA7CisgICAgICAgIGN0X2lvY2ItPnN5c19kZWZpbmUgPSAwOworICAgICAgICBjdF9pb2NiLT5oYW5kbGUgPSBzcC0+aGFuZGxlOworCisJY3RfaW9jYi0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+bG9vcF9pZCk7CisJY3RfaW9jYi0+dnBfaW5kZXggPSBzcC0+ZmNwb3J0LT52cF9pZHg7CisgICAgICAgIGN0X2lvY2ItPmNvbXBfc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKworCWN0X2lvY2ItPmNtZF9kc2RfY291bnQgPQorICAgICAgICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KTsKKyAgICAgICAgY3RfaW9jYi0+dGltZW91dCA9IDA7CisgICAgICAgIGN0X2lvY2ItPnJzcF9kc2RfY291bnQgPQorICAgICAgICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCk7CisgICAgICAgIGN0X2lvY2ItPnJzcF9ieXRlX2NvdW50ID0KKyAgICAgICAgICAgIGNwdV90b19sZTMyKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pOworICAgICAgICBjdF9pb2NiLT5jbWRfYnl0ZV9jb3VudCA9CisgICAgICAgICAgICBjcHVfdG9fbGUzMihic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4pOworICAgICAgICBjdF9pb2NiLT5kc2VnXzBfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAgKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBjdF9pb2NiLT5kc2VnXzBfYWRkcmVzc1sxXSA9IGNwdV90b19sZTMyKE1TRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGN0X2lvY2ItPmRzZWdfMF9sZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKTsKKworCWF2YWlsX2RzZHMgPSAxOworCWN1cl9kc2QgPSAodWludDMyX3QgKiljdF9pb2NiLT5kc2VnXzFfYWRkcmVzczsKKwlpbmRleCA9IDA7CisJdG90X2RzZHMgPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudDsKKworCWZvcl9lYWNoX3NnKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwgc2csIHRvdF9kc2RzLCBpbmRleCkgeworCQlkbWFfYWRkcl90ICAgICAgIHNsZV9kbWE7CisJCWNvbnRfYTY0X2VudHJ5X3QgKmNvbnRfcGt0OworCisJCS8qIEFsbG9jYXRlIGFkZGl0aW9uYWwgY29udGludWF0aW9uIHBhY2tldHM/ICovCisJCWlmIChhdmFpbF9kc2RzID09IDApIHsKKwkJCS8qCisJCQkqIEZpdmUgRFNEcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBDb250LgorCQkJKiBUeXBlIDEgSU9DQi4KKwkJCSAgICAgICAqLworCQkJY29udF9wa3QgPSBxbGEyeDAwX3ByZXBfY29udF90eXBlMV9pb2NiKHZoYSk7CisJCQljdXJfZHNkID0gKHVpbnQzMl90ICopIGNvbnRfcGt0LT5kc2VnXzBfYWRkcmVzczsKKwkJCWF2YWlsX2RzZHMgPSA1OworCQkJY29udF9pb2NiX3Byc250ID0gMTsKKwkJCWVudHJ5X2NvdW50Kys7CisJCX0KKworCQlzbGVfZG1hID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQkqY3VyX2RzZCsrICAgPSBjcHVfdG9fbGUzMihMU0Qoc2xlX2RtYSkpOworCQkqY3VyX2RzZCsrICAgPSBjcHVfdG9fbGUzMihNU0Qoc2xlX2RtYSkpOworCQkqY3VyX2RzZCsrICAgPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7CisJCWxvb3BfaXRlcmFydGlvbisrOworCQlhdmFpbF9kc2RzLS07CisJfQorICAgICAgICBjdF9pb2NiLT5lbnRyeV9jb3VudCA9IGVudHJ5X2NvdW50OworfQorCiBpbnQKIHFsYTJ4MDBfc3RhcnRfc3Aoc3JiX3QgKnNwKQogewpAQCAtMTA1Miw2ICsxMTY1LDEzIEBACiAJCSAgICBxbGEyNHh4X2xvZ291dF9pb2NiKHNwLCBwa3QpOgogCQkgICAgcWxhMngwMF9sb2dvdXRfaW9jYihzcCwgcGt0KTsKIAkJYnJlYWs7CisJY2FzZSBTUkJfRUxTX0NNRF9SUFQ6CisJY2FzZSBTUkJfRUxTX0NNRF9IU1Q6CisJCXFsYTI0eHhfZWxzX2lvY2Ioc3AsIHBrdCk7CisJCWJyZWFrOworCWNhc2UgU1JCX0NUX0NNRDoKKwkJcWxhMjR4eF9jdF9pb2NiKHNwLCBwa3QpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggNmZjNjNiOS4uYWI5MDMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ic2dfZmMuaD4KIAogc3RhdGljIHZvaWQgcWxhMngwMF9tYnhfY29tcGxldGlvbihzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QpOwogc3RhdGljIHZvaWQgcWxhMngwMF9wcm9jZXNzX2NvbXBsZXRlZF9yZXF1ZXN0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosCkBAIC04ODEsNyArODgyLDkgQEAKIAkJICAgIGluZGV4KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCiAJcmVxLT5vdXRzdGFuZGluZ19jbWRzW2luZGV4XSA9IE5VTEw7CisKIGRvbmU6CiAJcmV0dXJuIHNwOwogfQpAQCAtOTgyLDYgKzk4NSwxMDAgQEAKIH0KIAogc3RhdGljIHZvaWQKK3FsYTI0eHhfZWxzX2N0X2VudHJ5KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgcmVxX3F1ZSAqcmVxLAorICAgIHN0cnVjdCBzdHNfZW50cnlfMjR4eCAqcGt0LCBpbnQgaW9jYl90eXBlKQoreworCWNvbnN0IGNoYXIgZnVuY1tdID0gIkVMU19DVF9JT0NCIjsKKwljb25zdCBjaGFyICp0eXBlOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXNyYl90ICpzcDsKKwlzdHJ1Y3Qgc3JiX2JzZyAqc3BfYnNnOworCXN0cnVjdCBmY19ic2dfam9iICpic2dfam9iOworCXVpbnQxNl90IGNvbXBfc3RhdHVzOworCXVpbnQzMl90IGZ3X3N0YXR1c1szXTsKKwl1aW50OF90KiBmd19zdHNfcHRyOworCisJc3AgPSBxbGEyeDAwX2dldF9zcF9mcm9tX2hhbmRsZSh2aGEsIGZ1bmMsIHJlcSwgcGt0KTsKKwlpZiAoIXNwKQorCQlyZXR1cm47CisJc3BfYnNnID0gKHN0cnVjdCBzcmJfYnNnKilzcC0+Y3R4OworCWJzZ19qb2IgPSBzcF9ic2ctPmJzZ19qb2I7CisKKwl0eXBlID0gTlVMTDsKKwlzd2l0Y2ggKHNwX2JzZy0+Y3R4LnR5cGUpIHsKKwljYXNlIFNSQl9FTFNfQ01EX1JQVDoKKwljYXNlIFNSQl9FTFNfQ01EX0hTVDoKKwkJdHlwZSA9ICJlbHMiOworCQlicmVhazsKKwljYXNlIFNSQl9DVF9DTUQ6CisJCXR5cGUgPSAiY3QgcGFzcy10aHJvdWdoIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgIiVzOiBVbnJlY29nbml6ZWQgU1JCOiAoJXApIHR5cGU9JWQuXG4iLCBmdW5jLCBzcCwKKwkJICAgIHNwX2JzZy0+Y3R4LnR5cGUpOworCQlyZXR1cm47CisJfQorCisJY29tcF9zdGF0dXMgPSBmd19zdGF0dXNbMF0gPSBsZTE2X3RvX2NwdShwa3QtPmNvbXBfc3RhdHVzKTsKKwlmd19zdGF0dXNbMV0gPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPmVycm9yX3N1YmNvZGVfMSk7CisJZndfc3RhdHVzWzJdID0gbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT5lcnJvcl9zdWJjb2RlXzIpOworCisJLyogcmV0dXJuIEZDX0NURUxTX1NUQVRVU19PSyBhbmQgbGVhdmUgdGhlIGRlY29kaW5nIG9mIHRoZSBFTFMvQ1QKKwkgKiBmYyBwYXlsb2FkICB0byB0aGUgY2FsbGVyCisJICovCisJYnNnX2pvYi0+cmVwbHktPnJlcGx5X2RhdGEuY3RlbHNfcmVwbHkuc3RhdHVzID0gRkNfQ1RFTFNfU1RBVFVTX09LOworCWJzZ19qb2ItPnJlcGx5X2xlbiA9IHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KSArIHNpemVvZihmd19zdGF0dXMpOworCisJaWYgKGNvbXBfc3RhdHVzICE9IENTX0NPTVBMRVRFKSB7CisJCWlmIChjb21wX3N0YXR1cyA9PSBDU19EQVRBX1VOREVSUlVOKSB7CisJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gRElEX09LIDw8IDE2OworCQkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT50b3RhbF9ieXRlX2NvdW50KTsKKworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAic2NzaSglbGQ6MHgleCk6IEVMUy1DVCBwYXNzLXRocm91Z2gtJXMgZXJyb3IgY29tcF9zdGF0dXMtc3RhdHVzPTB4JXggIgorCQkJICAgICJlcnJvciBzdWJjb2RlIDE9MHgleCBlcnJvciBzdWJjb2RlIDI9MHgleCB0b3RhbF9ieXRlID0gMHgleC5cbiIsCisJCQkJdmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLCBjb21wX3N0YXR1cywgZndfc3RhdHVzWzFdLCBmd19zdGF0dXNbMl0sCisJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT50b3RhbF9ieXRlX2NvdW50KSkpOworCQkJZndfc3RzX3B0ciA9ICgodWludDhfdCopYnNnX2pvYi0+cmVxLT5zZW5zZSkgKyBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXBseSk7CisJCQltZW1jcHkoIGZ3X3N0c19wdHIsIGZ3X3N0YXR1cywgc2l6ZW9mKGZ3X3N0YXR1cykpOworCQl9CisJCWVsc2UgeworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICAic2NzaSglbGQ6MHgleCk6IEVMUy1DVCBwYXNzLXRocm91Z2gtJXMgZXJyb3IgY29tcF9zdGF0dXMtc3RhdHVzPTB4JXggIgorCQkJICAgICJlcnJvciBzdWJjb2RlIDE9MHgleCBlcnJvciBzdWJjb2RlIDI9MHgleC5cbiIsCisJCQkJdmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLCBjb21wX3N0YXR1cywKKwkJCQlsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPmVycm9yX3N1YmNvZGVfMSksCisJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT5lcnJvcl9zdWJjb2RlXzIpKSk7CisJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCQlmd19zdHNfcHRyID0gKCh1aW50OF90Kilic2dfam9iLT5yZXEtPnNlbnNlKSArIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KTsKKwkJCW1lbWNweSggZndfc3RzX3B0ciwgZndfc3RhdHVzLCBzaXplb2YoZndfc3RhdHVzKSk7CisJCX0KKwkJREVCVUcyKHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilwa3QsIHNpemVvZigqcGt0KSkpOworCX0KKwllbHNlIHsKKwkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9ICBESURfT0sgPDwgMTY7OworCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwkJYnNnX2pvYi0+cmVwbHlfbGVuID0gMDsKKwl9CisKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfdW5tYXBfc2coJmhhLT5wZGV2LT5kZXYsCisJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKChzcF9ic2ctPmN0eC50eXBlID09IFNSQl9FTFNfQ01EX0hTVCkgfHwKKwkgICAgKHNwX2JzZy0+Y3R4LnR5cGUgPT0gU1JCX0NUX0NNRCkpCisJCWtmcmVlKHNwLT5mY3BvcnQpOworCWtmcmVlKHNwLT5jdHgpOworCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwlic2dfam9iLT5qb2JfZG9uZShic2dfam9iKTsKK30KKworc3RhdGljIHZvaWQKIHFsYTI0eHhfbG9naW9fZW50cnkoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCByZXFfcXVlICpyZXEsCiAgICAgc3RydWN0IGxvZ2lvX2VudHJ5XzI0eHggKmxvZ2lvKQogewpAQCAtMTc0OSw2ICsxODQ2LDEzIEBACiAJCQlxbGEyNHh4X2xvZ2lvX2VudHJ5KHZoYSwgcnNwLT5yZXEsCiAJCQkgICAgKHN0cnVjdCBsb2dpb19lbnRyeV8yNHh4ICopcGt0KTsKIAkJCWJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1RfSU9DQl9UWVBFOgorCQkJcWxhMjR4eF9lbHNfY3RfZW50cnkodmhhLCByc3AtPnJlcSwgcGt0LCBDVF9JT0NCX1RZUEUpOworCQkJY2xlYXJfYml0KE1CWF9JTlRFUlJVUFQsICZ2aGEtPmh3LT5tYnhfY21kX2ZsYWdzKTsKKwkJCWJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRUxTX0lPQ0JfVFlQRToKKwkJCXFsYTI0eHhfZWxzX2N0X2VudHJ5KHZoYSwgcnNwLT5yZXEsIHBrdCwgRUxTX0lPQ0JfVFlQRSk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIFR5cGUgTm90IFN1cHBvcnRlZC4gKi8KIAkJCURFQlVHNChwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0yMDQ5LDcgKzIxNTMsNiBAQAogCQlzZXRfYml0KE1CWF9JTlRFUlJVUFQsICZoYS0+bWJ4X2NtZF9mbGFncyk7CiAJCWNvbXBsZXRlKCZoYS0+bWJ4X2ludHJfY29tcCk7CiAJfQotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0yMjU1LDEwICsyMzU4LDExIEBACiAKIAlpZiAoaGEtPmZsYWdzLm1zaXhfZW5hYmxlZCkKIAkJcWxhMjR4eF9kaXNhYmxlX21zaXgoaGEpOwotCWVsc2UgaWYgKGhhLT5mbGFncy5pbnRhX2VuYWJsZWQpIHsKKwllbHNlIGlmIChoYS0+ZmxhZ3MubXNpX2VuYWJsZWQpIHsKIAkJZnJlZV9pcnEoaGEtPnBkZXYtPmlycSwgcnNwKTsKIAkJcGNpX2Rpc2FibGVfbXNpKGhhLT5wZGV2KTsKLQl9CisJfSBlbHNlCisJCWZyZWVfaXJxKGhhLT5wZGV2LT5pcnEsIHJzcCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCmluZGV4IDA1NmU0ZDQuLjZlNTNiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKQEAgLTM2MzYsNiArMzYzNiwxNTcgQEAKIH0KIAogaW50CitxbGEyeDAwX2xvb3BiYWNrX3Rlc3Qoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCBtc2dfZWNob19sYiAqbXJlcSwgdWludDE2X3QgKm1yZXNwKQoreworCWludCBydmFsOworCW1ieF9jbWRfdCBtYzsKKwltYnhfY21kX3QgKm1jcCA9ICZtYzsKKwl1aW50MzJfdCBpdGVyX2NudCA9IDB4MTsKKworCURFQlVHMTEocHJpbnRrKCJzY3NpKCVsZCk6IGVudGVyZWQuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKworCW1lbXNldChtY3AtPm1iLCAwICwgc2l6ZW9mKG1jcC0+bWIpKTsKKwltY3AtPm1iWzBdID0gTUJDX0RJQUdOT1NUSUNfTE9PUF9CQUNLOworCW1jcC0+bWJbMV0gPSBtcmVxLT5vcHRpb25zIHwgQklUXzY7CS8vIEJJVF82IHNwZWNpZmllcyA2NCBiaXQgYWRkcmVzc2luZworCisJLyogdHJhbnNmZXIgY291bnQgKi8KKwltY3AtPm1iWzEwXSA9IExTVyhtcmVxLT50cmFuc2Zlcl9zaXplKTsKKwltY3AtPm1iWzExXSA9IE1TVyhtcmVxLT50cmFuc2Zlcl9zaXplKTsKKworCS8qIHNlbmQgZGF0YSBhZGRyZXNzICovCisJbWNwLT5tYlsxNF0gPSBMU1cobXJlcS0+c2VuZF9kbWEpOworCW1jcC0+bWJbMTVdID0gTVNXKG1yZXEtPnNlbmRfZG1hKTsKKwltY3AtPm1iWzIwXSA9IExTVyhNU0QobXJlcS0+c2VuZF9kbWEpKTsKKwltY3AtPm1iWzIxXSA9IE1TVyhNU0QobXJlcS0+c2VuZF9kbWEpKTsKKworCS8qIHJlY2lldmUgZGF0YSBhZGRyZXNzICovCisJbWNwLT5tYlsxNl0gPSBMU1cobXJlcS0+cmN2X2RtYSk7CisJbWNwLT5tYlsxN10gPSBNU1cobXJlcS0+cmN2X2RtYSk7CisJbWNwLT5tYls2XSA9IExTVyhNU0QobXJlcS0+cmN2X2RtYSkpOworCW1jcC0+bWJbN10gPSBNU1coTVNEKG1yZXEtPnJjdl9kbWEpKTsKKworCS8qIEl0ZXJhdGlvbiBjb3VudCAqLworCW1jcC0+bWJbMThdID0gTFNXKGl0ZXJfY250KTsKKwltY3AtPm1iWzE5XSA9IE1TVyhpdGVyX2NudCk7CisKKwltY3AtPm91dF9tYiA9IE1CWF8yMXxNQlhfMjB8TUJYXzE5fE1CWF8xOHxNQlhfMTd8TUJYXzE2fE1CWF8xNXwKKwkgICAgTUJYXzE0fE1CWF8xM3xNQlhfMTJ8TUJYXzExfE1CWF8xMHxNQlhfN3xNQlhfNnxNQlhfMXxNQlhfMDsKKwlpZiAoSVNfUUxBODFYWCh2aGEtPmh3KSkKKwkJbWNwLT5vdXRfbWIgfD0gTUJYXzI7CisJbWNwLT5pbl9tYiA9IE1CWF8xOXxNQlhfMTh8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CisKKwltY3AtPmJ1Zl9zaXplID0gbXJlcS0+dHJhbnNmZXJfc2l6ZTsKKwltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKKwltY3AtPmZsYWdzID0gTUJYX0RNQV9PVVR8TUJYX0RNQV9JTnxJT0NUTF9DTUQ7CisKKwlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOworCisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICIoJWxkKTogZmFpbGVkPSV4IG1iWzBdPTB4JXggIgorCQkJIm1iWzFdPTB4JXggbWJbMl09MHgleCBtYlszXT0weCV4IG1iWzE4XT0weCV4IG1iWzE5XT0weCV4LiBcbiIsIHZoYS0+aG9zdF9ubywgcnZhbCwKKwkJCW1jcC0+bWJbMF0sIG1jcC0+bWJbMV0sIG1jcC0+bWJbMl0sIG1jcC0+bWJbM10sIG1jcC0+bWJbMThdLCBtY3AtPm1iWzE5XSkpOworCX0gZWxzZSB7CisJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAic2NzaSglbGQpOiBkb25lLlxuIiwgdmhhLT5ob3N0X25vKSk7CisJfQorCisJLyogQ29weSBtYWlsYm94IGluZm9ybWF0aW9uICovCisJbWVtY3B5KCBtcmVzcCwgbWNwLT5tYiwgNjQpOworCW1yZXNwWzNdID0gbWNwLT5tYlsxOF07CisJbXJlc3BbNF0gPSBtY3AtPm1iWzE5XTsKKwlyZXR1cm4gcnZhbDsKK30KKworaW50CitxbGEyeDAwX2VjaG9fdGVzdChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3RydWN0IG1zZ19lY2hvX2xiICptcmVxLCB1aW50MTZfdCAqbXJlc3ApCit7CisJaW50IHJ2YWw7CisJbWJ4X2NtZF90IG1jOworCW1ieF9jbWRfdCAqbWNwID0gJm1jOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJREVCVUcxMShwcmludGsoInNjc2koJWxkKTogZW50ZXJlZC5cbiIsIHZoYS0+aG9zdF9ubykpOworCisJbWVtc2V0KG1jcC0+bWIsIDAgLCBzaXplb2YobWNwLT5tYikpOworCW1jcC0+bWJbMF0gPSBNQkNfRElBR05PU1RJQ19FQ0hPOworCW1jcC0+bWJbMV0gPSBtcmVxLT5vcHRpb25zIHwgQklUXzY7CS8qIEJJVF82IHNwZWNpZmllcyA2NGJpdCBhZGRyZXNzICovCisJaWYgKElTX1FMQTgxWFgoaGEpKQorCQltY3AtPm1iWzFdIHw9IEJJVF8xNTsKKwltY3AtPm1iWzJdID0gSVNfUUxBODFYWChoYSkgPyB2aGEtPmZjb2VfZmNmX2lkeCA6IDA7CisJbWNwLT5tYlsxNl0gPSBMU1cobXJlcS0+cmN2X2RtYSk7CisJbWNwLT5tYlsxN10gPSBNU1cobXJlcS0+cmN2X2RtYSk7CisJbWNwLT5tYls2XSA9IExTVyhNU0QobXJlcS0+cmN2X2RtYSkpOworCW1jcC0+bWJbN10gPSBNU1coTVNEKG1yZXEtPnJjdl9kbWEpKTsKKworCW1jcC0+bWJbMTBdID0gTFNXKG1yZXEtPnRyYW5zZmVyX3NpemUpOworCisJbWNwLT5tYlsxNF0gPSBMU1cobXJlcS0+c2VuZF9kbWEpOworCW1jcC0+bWJbMTVdID0gTVNXKG1yZXEtPnNlbmRfZG1hKTsKKwltY3AtPm1iWzIwXSA9IExTVyhNU0QobXJlcS0+c2VuZF9kbWEpKTsKKwltY3AtPm1iWzIxXSA9IE1TVyhNU0QobXJlcS0+c2VuZF9kbWEpKTsKKworCW1jcC0+b3V0X21iID0gTUJYXzIxfE1CWF8yMHxNQlhfMTd8TUJYXzE2fE1CWF8xNXwKKwkgICAgTUJYXzE0fE1CWF8xMHxNQlhfN3xNQlhfNnxNQlhfMXxNQlhfMDsKKwlpZiAoSVNfUUxBODFYWChoYSkpCisJCW1jcC0+b3V0X21iIHw9IE1CWF8yOworCisJbWNwLT5pbl9tYiA9IE1CWF8wOworCWlmIChJU19RTEEyNFhYX1RZUEUoaGEpIHx8IElTX1FMQTI1WFgoaGEpIHx8IElTX1FMQTgxWFgoaGEpKQorCQltY3AtPmluX21iIHw9IE1CWF8xOworCWlmIChJU19RTEE4MVhYKGhhKSkKKwkJbWNwLT5pbl9tYiB8PSBNQlhfMzsKKworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOworCW1jcC0+ZmxhZ3MgPSBNQlhfRE1BX09VVHxNQlhfRE1BX0lOfElPQ1RMX0NNRDsKKwltY3AtPmJ1Zl9zaXplID0gbXJlcS0+dHJhbnNmZXJfc2l6ZTsKKworCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CisKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgIiglbGQpOiBmYWlsZWQ9JXggbWJbMF09MHgleCBtYlsxXT0weCV4LlxuIiwKKwkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOworCX0gZWxzZSB7CisJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAic2NzaSglbGQpOiBkb25lLlxuIiwgdmhhLT5ob3N0X25vKSk7CisJfQorCisJLyogQ29weSBtYWlsYm94IGluZm9ybWF0aW9uICovCisJbWVtY3B5KCBtcmVzcCwgbWNwLT5tYiwgMzIpOworCXJldHVybiBydmFsOworfQoraW50CitxbGE4NHh4X3Jlc2V0X2NoaXAoc2NzaV9xbGFfaG9zdF90ICpoYSwgdWludDE2X3QgZW5hYmxlX2RpYWdub3N0aWMsCisgICAgdWludDE2X3QgKmNtZF9zdGF0dXMpCit7CisJaW50IHJ2YWw7CisJbWJ4X2NtZF90IG1jOworCW1ieF9jbWRfdCAqbWNwID0gJm1jOworCisJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IGVuYWJsZV9kaWFnPSVkIGVudGVyZWQuXG4iLCBfX2Z1bmNfXywKKwkJaGEtPmhvc3Rfbm8sIGVuYWJsZV9kaWFnbm9zdGljKSk7CisKKwltY3AtPm1iWzBdID0gTUJDX0lTUDg0WFhfUkVTRVQ7CisJbWNwLT5tYlsxXSA9IGVuYWJsZV9kaWFnbm9zdGljOworCW1jcC0+b3V0X21iID0gTUJYXzF8TUJYXzA7CisJbWNwLT5pbl9tYiA9IE1CWF8xfE1CWF8wOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOworCW1jcC0+ZmxhZ3MgPSBNQlhfRE1BX09VVHxNQlhfRE1BX0lOfElPQ1RMX0NNRDsKKwlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQoaGEsIG1jcCk7CisKKwkvKiBSZXR1cm4gbWFpbGJveCBzdGF0dXNlcy4gKi8KKwkqY21kX3N0YXR1cyA9IG1jcC0+bWJbMF07CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCURFQlVHMTYocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8sCisJCQlydmFsKSk7CisJZWxzZQorCQlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCisJcmV0dXJuIHJ2YWw7Cit9CisKK2ludAogcWxhMngwMF93cml0ZV9yYW1fd29yZChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdWludDMyX3QgcmlzY19hZGRyLCB1aW50MzJfdCBkYXRhKQogewogCWludCBydmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCA4NTI5ZWIxLi40NjcyMGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMTA3LDYgKzEwNywxMiBAQAogCQkiIDEgLS0gbG9hZCBmaXJtd2FyZSBmcm9tIGZsYXNoLlxuIgogCQkiIDAgLS0gdXNlIGRlZmF1bHQgc2VtYW50aWNzLlxuIik7CiAKK2ludCBxbDJ4ZXRzZW5hYmxlOworbW9kdWxlX3BhcmFtKHFsMnhldHNlbmFibGUsIGludCwgU19JUlVHT3xTX0lSVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocWwyeGV0c2VuYWJsZSwKKwkJIkVuYWJsZXMgZmlybXdhcmUgRVRTIGJ1cnN0LiIKKwkJIkRlZmF1bHQgaXMgMCAtIHNraXAgRVRTIGVuYWJsZW1lbnQuIik7CisKIC8qCiAgKiBTQ1NJIGhvc3QgdGVtcGxhdGUgZW50cnkgcG9pbnRzCiAgKi8KQEAgLTY4Miw0NCArNjg4LDYgQEAKIAlyZXR1cm4gKHJldHVybl9zdGF0dXMpOwogfQogCi12b2lkCi1xbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjX3BvcnRfdCAqZmNwb3J0KQotewotCWludCBjbnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcmJfdCAqc3A7Ci0Jc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBmY3BvcnQtPnZoYTsKLQlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKLQlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0JcmVxID0gdmhhLT5yZXE7Ci0JZm9yIChjbnQgPSAxOyBjbnQgPCBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFM7IGNudCsrKSB7Ci0JCXNwID0gcmVxLT5vdXRzdGFuZGluZ19jbWRzW2NudF07Ci0JCWlmICghc3ApCi0JCQljb250aW51ZTsKLQkJaWYgKHNwLT5mY3BvcnQgIT0gZmNwb3J0KQotCQkJY29udGludWU7Ci0JCWlmIChzcC0+Y3R4KQotCQkJY29udGludWU7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQkJaWYgKGhhLT5pc3Bfb3BzLT5hYm9ydF9jb21tYW5kKHNwKSkgewotCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSJBYm9ydCBmYWlsZWQgLS0gICVseFxuIiwKLQkJCXNwLT5jbWQtPnNlcmlhbF9udW1iZXIpKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChxbGEyeDAwX2VoX3dhaXRfb25fY29tbWFuZChzcC0+Y21kKSAhPQotCQkJCVFMQV9TVUNDRVNTKQotCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJIkFib3J0IGZhaWxlZCB3aGlsZSB3YWl0aW5nIC0tICAlbHhcbiIsCi0JCQkJc3AtPmNtZC0+c2VyaWFsX251bWJlcikpOwotCQl9Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogcWxhMnh4eF9laF9hYm9ydAogKgpAQCAtMTA5NSw2ICsxMDYzLDIwIEBACiAJc3RydWN0IGZjX3BvcnQgKmZjcG9ydDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAorCWlmIChoYS0+ZmxhZ3MuZW5hYmxlX3RhcmdldF9yZXNldCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjcG9ydCwgJnZoYS0+dnBfZmNwb3J0cywgbGlzdCkgeworCQkJaWYgKGZjcG9ydC0+cG9ydF90eXBlICE9IEZDVF9UQVJHRVQpCisJCQkJY29udGludWU7CisKKwkJCXJldCA9IGhhLT5pc3Bfb3BzLT50YXJnZXRfcmVzZXQoZmNwb3J0LCAwLCAwKTsKKwkJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJCQlERUJVRzJfMyhwcmludGsoIiVzKCVsZCk6IGJ1c19yZXNldCBmYWlsZWQ6ICIKKwkJCQkgICAgInRhcmdldF9yZXNldD0lZCBkX2lkPSV4LlxuIiwgX19mdW5jX18sCisJCQkJICAgIHZoYS0+aG9zdF9ubywgcmV0LCBmY3BvcnQtPmRfaWQuYjI0KSk7CisJCQl9CisJCX0KKwl9CisKIAlpZiAoaGEtPmZsYWdzLmVuYWJsZV9saXBfZnVsbF9sb2dpbiAmJiAhSVNfUUxBODFYWChoYSkpIHsKIAkJcmV0ID0gcWxhMngwMF9mdWxsX2xvZ2luX2xpcCh2aGEpOwogCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7CkBAIC0xMTE3LDE5ICsxMDk5LDYgQEAKIAkJCXFsYTJ4MDBfd2FpdF9mb3JfbG9vcF9yZWFkeSh2aGEpOwogCX0KIAotCWlmIChoYS0+ZmxhZ3MuZW5hYmxlX3RhcmdldF9yZXNldCkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjcG9ydCwgJnZoYS0+dnBfZmNwb3J0cywgbGlzdCkgewotCQkJaWYgKGZjcG9ydC0+cG9ydF90eXBlICE9IEZDVF9UQVJHRVQpCi0JCQkJY29udGludWU7Ci0KLQkJCXJldCA9IGhhLT5pc3Bfb3BzLT50YXJnZXRfcmVzZXQoZmNwb3J0LCAwLCAwKTsKLQkJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJCQlERUJVRzJfMyhwcmludGsoIiVzKCVsZCk6IGJ1c19yZXNldCBmYWlsZWQ6ICIKLQkJCQkgICAgInRhcmdldF9yZXNldD0lZCBkX2lkPSV4LlxuIiwgX19mdW5jX18sCi0JCQkJICAgIHZoYS0+aG9zdF9ubywgcmV0LCBmY3BvcnQtPmRfaWQuYjI0KSk7Ci0JCQl9Ci0JCX0KLQl9CiAJLyogSXNzdWUgbWFya2VyIGNvbW1hbmQgb25seSB3aGVuIHdlIGFyZSBnb2luZyB0byBzdGFydCB0aGUgSS9PICovCiAJdmhhLT5tYXJrZXJfbmVlZGVkID0gMTsKIApAQCAtMTE2MCw4ICsxMTI5LDE5IEBACiAJCQkJCXFsYTJ4MDBfc3BfY29tcGwoaGEsIHNwKTsKIAkJCQl9IGVsc2UgewogCQkJCQljdHggPSBzcC0+Y3R4OwotCQkJCQlkZWxfdGltZXJfc3luYygmY3R4LT50aW1lcik7Ci0JCQkJCWN0eC0+ZnJlZShzcCk7CisJCQkJCWlmIChjdHgtPnR5cGUgPT0gU1JCX0xPR0lOX0NNRCB8fCBjdHgtPnR5cGUgPT0gU1JCX0xPR09VVF9DTUQpIHsKKwkJCQkJCWRlbF90aW1lcl9zeW5jKCZjdHgtPnRpbWVyKTsKKwkJCQkJCWN0eC0+ZnJlZShzcCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzdHJ1Y3Qgc3JiX2JzZyogc3BfYnNnID0gKHN0cnVjdCBzcmJfYnNnKilzcC0+Y3R4OworCQkJCQkJaWYgKHNwX2JzZy0+YnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSA9PSBGQ19CU0dfSFNUX0NUKQorCQkJCQkJCWtmcmVlKHNwLT5mY3BvcnQpOworCQkJCQkJc3BfYnNnLT5ic2dfam9iLT5yZXEtPmVycm9ycyA9IDA7CisJCQkJCQlzcF9ic2ctPmJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSByZXM7CisJCQkJCQlzcF9ic2ctPmJzZ19qb2ItPmpvYl9kb25lKHNwX2JzZy0+YnNnX2pvYik7CisJCQkJCQlrZnJlZShzcC0+Y3R4KTsKKwkJCQkJCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMTI1OCw3ICsxMjM4LDcgQEAKIAkJcWxhMngwMF9hZGp1c3Rfc2Rldl9xZGVwdGhfdXAoc2RldiwgcWRlcHRoKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIEVPUE5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKIAlyZXR1cm4gc2Rldi0+cXVldWVfZGVwdGg7CkBAIC0xODE4LDcgKzE3OTgsNiBAQAogCS8qIFNldCBFRUggcmVzZXQgdHlwZSB0byBmdW5kYW1lbnRhbCBpZiByZXF1aXJlZCBieSBoYmEgKi8KIAlpZiAoIElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTI1WFgoaGEpIHx8IElTX1FMQTgxWFgoaGEpKSB7CiAJCXBkZXYtPm5lZWRzX2ZyZXNldCA9IDE7Ci0JCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCX0KIAogCS8qIENvbmZpZ3VyZSBQQ0kgSS9PIHNwYWNlICovCkBAIC0xOTcwLDExICsxOTQ5LDE1IEBACiAJaG9zdC0+bWF4X2NoYW5uZWwgPSBNQVhfQlVTRVMgLSAxOwogCWhvc3QtPm1heF9sdW4gPSBNQVhfTFVOUzsKIAlob3N0LT50cmFuc3BvcnR0ID0gcWxhMnh4eF90cmFuc3BvcnRfdGVtcGxhdGU7CisJc2h0LT52ZW5kb3JfaWQgPSAoU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX1FMT0dJQyk7CiAKIAkvKiBTZXQgdXAgdGhlIGlycXMgKi8KIAlyZXQgPSBxbGEyeDAwX3JlcXVlc3RfaXJxcyhoYSwgcnNwKTsKIAlpZiAocmV0KQogCQlnb3RvIHByb2JlX2luaXRfZmFpbGVkOworCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKIAkvKiBBbGxvYyBhcnJheXMgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmluZyBwdHJzICovCiBxdWVfaW5pdDoKIAlpZiAoIXFsYTJ4MDBfYWxsb2NfcXVldWVzKGhhKSkgewpAQCAtMjE3Niw2ICsyMTU5LDggQEAKIAlrZnJlZShoYSk7CiAJaGEgPSBOVUxMOwogCisJcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogfQpAQCAtMzMxMCw2ICszMjk1LDcgQEAKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOwogCWNhc2UgcGNpX2NoYW5uZWxfaW9fZnJvemVuOgogCQloYS0+ZmxhZ3MuZWVoX2J1c3kgPSAxOworCQlxbGEyeDAwX2ZyZWVfaXJxcyh2aGEpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwogCWNhc2UgcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlOgpAQCAtMzM2MywxMCArMzM0OSwyNCBAQAogCXBjaV9lcnNfcmVzdWx0X3QgcmV0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKIAlzY3NpX3FsYV9ob3N0X3QgKmJhc2VfdmhhID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSBiYXNlX3ZoYS0+aHc7Ci0JaW50IHJjOworCXN0cnVjdCByc3BfcXVlICpyc3A7CisJaW50IHJjLCByZXRyaWVzID0gMTA7CiAKIAlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgInNsb3RfcmVzZXRcbiIpKTsKIAorCS8qIFdvcmthcm91bmQ6IHFsYTJ4eHggZHJpdmVyIHdoaWNoIGFjY2VzcyBoYXJkd2FyZSBlYXJsaWVyCisJICogbmVlZHMgZXJyb3Igc3RhdGUgdG8gYmUgcGNpX2NoYW5uZWxfaW9fb25saW5lLgorCSAqIE90aGVyd2lzZSBtYWlsYm94IGNvbW1hbmQgdGltZXNvdXQuCisJICovCisJcGRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCS8qIHBjaV9yZXN0b3JlX3N0YXRlKCkgY2xlYXJzIHRoZSBzYXZlZF9zdGF0ZSBmbGFnIG9mIHRoZSBkZXZpY2UKKwkgKiBzYXZlIHJlc3RvcmVkIHN0YXRlIHdoaWNoIHJlc2V0cyBzYXZlZF9zdGF0ZSBmbGFnCisJICovCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKIAlpZiAoaGEtPm1lbV9vbmx5KQogCQlyYyA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKIAllbHNlCkBAIC0zMzc4LDI3ICszMzc4LDIzIEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJcnNwID0gaGEtPnJzcF9xX21hcFswXTsKKwlpZiAocWxhMngwMF9yZXF1ZXN0X2lycXMoaGEsIHJzcCkpCisJCXJldHVybiByZXQ7CisKIAlpZiAoaGEtPmlzcF9vcHMtPnBjaV9jb25maWcoYmFzZV92aGEpKQogCQlyZXR1cm4gcmV0OwogCi0jaWZkZWYgUUxfREVCVUdfTEVWRUxfMTcKLQl7Ci0JCXVpbnQ4X3QgYjsKLQkJdWludDMyX3QgaTsKKwl3aGlsZSAoaGEtPmZsYWdzLm1ib3hfYnVzeSAmJiByZXRyaWVzLS0pCisJCW1zbGVlcCgxMDAwKTsKIAotCQlwcmludGsoInNsb3RfcmVzZXRfMTogIik7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoaGEtPnBkZXYsIGksICZiKTsKLQkJCXByaW50aygiJXMlMDJ4IiwgKGklMTYpID8gIiAiIDogIlxuIiwgYik7Ci0JCX0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLSNlbmRpZgogCXNldF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCWlmIChxbGEyeDAwX2Fib3J0X2lzcChiYXNlX3ZoYSkgPT0gUUxBX1NVQ0NFU1MpCiAJCXJldCA9ICBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiAJY2xlYXJfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKTsKIAorCXBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOworCiAJREVCVUcxNyhxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJICAgICJzbG90X3Jlc2V0LXJldHVybjpyZXQ9JXhcbiIsIHJldCkpOwogCkBAIC0zNDIyLDggKzM0MTgsNiBAQAogCX0KIAogCWhhLT5mbGFncy5lZWhfYnVzeSA9IDA7Ci0KLQlwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhwZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgcWxhMnh4eF9lcnJfaGFuZGxlciA9IHsKQEAgLTM1MzYsNCArMzUzMCwzIEBACiBNT0RVTEVfRklSTVdBUkUoRldfRklMRV9JU1AyMzIyKTsKIE1PRFVMRV9GSVJNV0FSRShGV19GSUxFX0lTUDI0WFgpOwogTU9EVUxFX0ZJUk1XQVJFKEZXX0ZJTEVfSVNQMjVYWCk7Ci1NT0RVTEVfRklSTVdBUkUoRldfRklMRV9JU1A4MVhYKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCmluZGV4IGVkMzYyNzkuLjhkMmZjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaApAQCAtNyw5ICs3LDkgQEAKIC8qCiAgKiBEcml2ZXIgdmVyc2lvbgogICovCi0jZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAzLjAxLWsxMCIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDItazEiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkzCi0jZGVmaW5lIFFMQV9EUklWRVJfUEFUQ0hfVkVSCTEKLSNkZWZpbmUgUUxBX0RSSVZFUl9CRVRBX1ZFUgkwCisjZGVmaW5lIFFMQV9EUklWRVJfUEFUQ0hfVkVSCTIKKyNkZWZpbmUgUUxBX0RSSVZFUl9CRVRBX1ZFUgkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYwppbmRleCBhZjhjMzIzLi45MjMyOWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKQEAgLTg0NCwxMCArODQ0LDEwIEBACiAJREVCVUcyKHByaW50aygic2NzaSVsZDogJXM6IEdldCBFRVByb20gcGFyYW1ldGVycyBcbiIsIGhhLT5ob3N0X25vLAogCQkgICAgICBfX2Z1bmNfXykpOwogCWlmIChxbDR4eHhfbG9ja19mbGFzaChoYSkgIT0gUUxBX1NVQ0NFU1MpCi0JCXJldHVybiAoUUxBX0VSUk9SKTsKKwkJcmV0dXJuIFFMQV9FUlJPUjsKIAlpZiAocWw0eHh4X2xvY2tfbnZyYW0oaGEpICE9IFFMQV9TVUNDRVNTKSB7CiAJCXFsNHh4eF91bmxvY2tfZmxhc2goaGEpOwotCQlyZXR1cm4gKFFMQV9FUlJPUik7CisJCXJldHVybiBRTEFfRVJST1I7CiAJfQogCiAJLyogR2V0IEVFUFJvbSBQYXJhbWV0ZXJzIGZyb20gTlZSQU0gYW5kIHZhbGlkYXRlICovCkBAIC04NTgsMjAgKzg1OCwxOCBAQAogCQkJcmRfbnZyYW1fd29yZChoYSwgZWVwcm9tX2V4dF9od19jb25mX29mZnNldChoYSkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFFMb2dpYyBhZGFwdGVycyBzaG91bGQgYWx3YXlzIGhhdmUgYSB2YWxpZCBOVlJBTS4KLQkJICogSWYgbm90IHZhbGlkLCBkbyBub3QgbG9hZC4KLQkJICovCiAJCWRldl93YXJuKCZoYS0+cGRldi0+ZGV2LAogCQkJICAgInNjc2klbGQ6ICVzOiBFRVByb20gY2hlY2tzdW0gaW52YWxpZC4gICIKIAkJCSAgICJQbGVhc2UgdXBkYXRlIHlvdXIgRUVQUk9NXG4iLCBoYS0+aG9zdF9ubywKIAkJCSAgIF9fZnVuY19fKTsKIAotCQkvKiBzZXQgZGVmYXVsdHMgKi8KKwkJLyogQXR0ZW1wdCB0byBzZXQgZGVmYXVsdHMgKi8KIAkJaWYgKGlzX3FsYTQwMTAoaGEpKQogCQkJZXh0SHdDb25maWcuQXN1aW50MzJfdCA9IDB4MTkxMjsKIAkJZWxzZSBpZiAoaXNfcWxhNDAyMihoYSkgfCBpc19xbGE0MDMyKGhhKSkKIAkJCWV4dEh3Q29uZmlnLkFzdWludDMyX3QgPSAweDAwMjM7CisJCWVsc2UKKwkJCXJldHVybiBRTEFfRVJST1I7CiAJfQogCURFQlVHKHByaW50aygic2NzaSVsZDogJXM6IFNldHRpbmcgZXh0SHdDb25maWcgdG8gMHhGRkZGJTA0eFxuIiwKIAkJICAgICBoYS0+aG9zdF9ubywgX19mdW5jX18sIGV4dEh3Q29uZmlnLkFzdWludDMyX3QpKTsKQEAgLTg4NCw3ICs4ODIsNyBAQAogCXFsNHh4eF91bmxvY2tfbnZyYW0oaGEpOwogCXFsNHh4eF91bmxvY2tfZmxhc2goaGEpOwogCi0JcmV0dXJuIChRTEFfU1VDQ0VTUyk7CisJcmV0dXJuIFFMQV9TVUNDRVNTOwogfQogCiBzdGF0aWMgdm9pZCBxbGE0eDAwX3BjaV9jb25maWcoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYyBiL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMKaW5kZXggOGU1YzE2OS4uYmQ4ODM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYworKysgYi9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jCkBAIC0xNDksNiArMTQ5LDcgQEAKIAl7IFJBSURfTEVWRUxfMCwgInJhaWQwIiB9LAogCXsgUkFJRF9MRVZFTF8xLCAicmFpZDEiIH0sCiAJeyBSQUlEX0xFVkVMXzEwLCAicmFpZDEwIiB9LAorCXsgUkFJRF9MRVZFTF8xRSwgInJhaWQxZSIgfSwKIAl7IFJBSURfTEVWRUxfMywgInJhaWQzIiB9LAogCXsgUkFJRF9MRVZFTF80LCAicmFpZDQiIH0sCiAJeyBSQUlEX0xFVkVMXzUsICJyYWlkNSIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IGE2MGRhNTUuLjFjMDhmNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtMTAxOCw2ICsxMDE4LDggQEAKICAqIHNjc2lfZ2V0X3ZwZF9wYWdlIC0gR2V0IFZpdGFsIFByb2R1Y3QgRGF0YSBmcm9tIGEgU0NTSSBkZXZpY2UKICAqIEBzZGV2OiBUaGUgZGV2aWNlIHRvIGFzawogICogQHBhZ2U6IFdoaWNoIFZpdGFsIFByb2R1Y3QgRGF0YSB0byByZXR1cm4KKyAqIEBidWY6IHdoZXJlIHRvIHN0b3JlIHRoZSBWUEQKKyAqIEBidWZfbGVuOiBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIFZQRCBidWZmZXIgYXJlYQogICoKICAqIFNDU0kgZGV2aWNlcyBtYXkgb3B0aW9uYWxseSBzdXBwbHkgVml0YWwgUHJvZHVjdCBEYXRhLiAgRWFjaCAncGFnZScKICAqIG9mIFZQRCBpcyBkZWZpbmVkIGluIHRoZSBhcHByb3ByaWF0ZSBTQ1NJIGRvY3VtZW50IChlZyBTUEMsIFNCQykuCkBAIC0xMDI2LDU1ICsxMDI4LDM5IEBACiAgKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBrZnJlZSgpIG9uIHRoaXMgcG9pbnRlciB3aGVuIGl0IGlzIG5vIGxvbmdlcgogICogbmVlZGVkLiAgSWYgd2UgY2Fubm90IHJldHJpZXZlIHRoZSBWUEQgcGFnZSB0aGlzIHJvdXRpbmUgcmV0dXJucyAlTlVMTC4KICAqLwotdW5zaWduZWQgY2hhciAqc2NzaV9nZXRfdnBkX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1OCBwYWdlKQoraW50IHNjc2lfZ2V0X3ZwZF9wYWdlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgdTggcGFnZSwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICBpbnQgYnVmX2xlbikKIHsKIAlpbnQgaSwgcmVzdWx0OwotCXVuc2lnbmVkIGludCBsZW47Ci0JY29uc3QgdW5zaWduZWQgaW50IGluaXRfdnBkX2xlbiA9IDI1NTsKLQl1bnNpZ25lZCBjaGFyICpidWYgPSBrbWFsbG9jKGluaXRfdnBkX2xlbiwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIE5VTEw7CiAKIAkvKiBBc2sgZm9yIGFsbCB0aGUgcGFnZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlICovCi0JcmVzdWx0ID0gc2NzaV92cGRfaW5xdWlyeShzZGV2LCBidWYsIDAsIGluaXRfdnBkX2xlbik7CisJcmVzdWx0ID0gc2NzaV92cGRfaW5xdWlyeShzZGV2LCBidWYsIDAsIGJ1Zl9sZW4pOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZmFpbDsKIAogCS8qIElmIHRoZSB1c2VyIGFjdHVhbGx5IHdhbnRlZCB0aGlzIHBhZ2UsIHdlIGNhbiBza2lwIHRoZSByZXN0ICovCiAJaWYgKHBhZ2UgPT0gMCkKLQkJcmV0dXJuIGJ1ZjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYnVmWzNdOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG1pbigoaW50KWJ1ZlszXSwgYnVmX2xlbiAtIDQpOyBpKyspCiAJCWlmIChidWZbaSArIDRdID09IHBhZ2UpCiAJCQlnb3RvIGZvdW5kOworCisJaWYgKGkgPCBidWZbM10gJiYgaSA+IGJ1Zl9sZW4pCisJCS8qIHJhbiBvZmYgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBnaXZlIHVzIGJlbmVmaXQgb2YgZG91YnQgKi8KKwkJZ290byBmb3VuZDsKIAkvKiBUaGUgZGV2aWNlIGNsYWltcyBpdCBkb2Vzbid0IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBwYWdlICovCiAJZ290byBmYWlsOwogCiAgZm91bmQ6Ci0JcmVzdWx0ID0gc2NzaV92cGRfaW5xdWlyeShzZGV2LCBidWYsIHBhZ2UsIDI1NSk7CisJcmVzdWx0ID0gc2NzaV92cGRfaW5xdWlyeShzZGV2LCBidWYsIHBhZ2UsIGJ1Zl9sZW4pOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZmFpbDsKIAotCS8qCi0JICogU29tZSBwYWdlcyBhcmUgbG9uZ2VyIHRoYW4gMjU1IGJ5dGVzLiAgVGhlIGFjdHVhbCBsZW5ndGggb2YKLQkgKiB0aGUgcGFnZSBpcyByZXR1cm5lZCBpbiB0aGUgaGVhZGVyLgotCSAqLwotCWxlbiA9ICgoYnVmWzJdIDw8IDgpIHwgYnVmWzNdKSArIDQ7Ci0JaWYgKGxlbiA8PSBpbml0X3ZwZF9sZW4pCi0JCXJldHVybiBidWY7Ci0KLQlrZnJlZShidWYpOwotCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgcGFnZSwgbGVuKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIGZhaWw7Ci0KLQlyZXR1cm4gYnVmOworCXJldHVybiAwOwogCiAgZmFpbDoKLQlrZnJlZShidWYpOwotCXJldHVybiBOVUxMOworCXJldHVybiAtRUlOVkFMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9nZXRfdnBkX3BhZ2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IGY4ZmJmNDcuLjE2NDZmZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC03NzMsOCArNzczLDE0IEBACiAJICogd2UgYWxyZWFkeSB0b29rIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgaW50byBycS0+ZXJyb3JzIHdoaWNoCiAJICogaXMgd2hhdCBnZXRzIHJldHVybmVkIHRvIHRoZSB1c2VyCiAJICovCi0JaWYgKHNlbnNlX3ZhbGlkICYmIHNzaGRyLnNlbnNlX2tleSA9PSBSRUNPVkVSRURfRVJST1IpIHsKLQkJaWYgKCEocmVxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQorCWlmIChzZW5zZV92YWxpZCAmJiAoc3NoZHIuc2Vuc2Vfa2V5ID09IFJFQ09WRVJFRF9FUlJPUikpIHsKKwkJLyogaWYgQVRBIFBBU1MtVEhST1VHSCBJTkZPUk1BVElPTiBBVkFJTEFCTEUgc2tpcAorCQkgKiBwcmludCBzaW5jZSBjYWxsZXIgd2FudHMgQVRBIHJlZ2lzdGVycy4gT25seSBvY2N1cnMgb24KKwkJICogU0NTSSBBVEEgUEFTU19USFJPVUdIIGNvbW1hbmRzIHdoZW4gQ0tfQ09ORD0xCisJCSAqLworCQlpZiAoKHNzaGRyLmFzYyA9PSAweDApICYmIChzc2hkci5hc2NxID09IDB4MWQpKQorCQkJOworCQllbHNlIGlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkKIAkJCXNjc2lfcHJpbnRfc2Vuc2UoIiIsIGNtZCk7CiAJCXJlc3VsdCA9IDA7CiAJCS8qIEJMT0NLX1BDIG1heSBoYXZlIHNldCBlcnJvciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2FzX2ludGVybmFsLmggYi9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaAppbmRleCA5OThjYjViLi42MjY2YTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaApAQCAtNSw3ICs1LDcgQEAKICNkZWZpbmUgU0FTX1BIWV9BVFRSUwkJMTcKICNkZWZpbmUgU0FTX1BPUlRfQVRUUlMJCTEKICNkZWZpbmUgU0FTX1JQT1JUX0FUVFJTCQk3Ci0jZGVmaW5lIFNBU19FTkRfREVWX0FUVFJTCTMKKyNkZWZpbmUgU0FTX0VORF9ERVZfQVRUUlMJNQogI2RlZmluZSBTQVNfRVhQQU5ERVJfQVRUUlMJNwogCiBzdHJ1Y3Qgc2FzX2ludGVybmFsIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCA1ZDliNTEzLi40YmM4Yjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC0xMzM5LDggKzEzMzksMTAgQEAKIAkJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCAwLCBOVUxMKTsKIAkJaWYgKCFzZGV2KQogCQkJcmV0dXJuIDA7Ci0JCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpCisJCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpIHsKKwkJCV9fc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYpOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlzcHJpbnRmKGRldm5hbWUsICJob3N0ICVkIGNoYW5uZWwgJWQgaWQgJWQiLApAQCAtMTkwNywxMCArMTkwOSw5IEBACiAJCWdvdG8gb3V0OwogCiAJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCAwLCBOVUxMKTsKLQlpZiAoc2RldikgewotCQlzZGV2LT5zZGV2X2dlbmRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCWlmIChzZGV2KQogCQlzZGV2LT5ib3JrZW4gPSAwOwotCX0gZWxzZQorCWVsc2UKIAkJc2NzaV90YXJnZXRfcmVhcChzdGFyZ2V0KTsKIAlwdXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IDVhMDY1MDUuLjE5ZWM5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtODQ3LDYgKzg0Nyw4IEBACiAJaWYgKHN0YXJnZXQtPnN0YXRlICE9IFNUQVJHRVRfQ1JFQVRFRCkKIAkJcmV0dXJuIDA7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnN0YXJnZXQtPmRldik7CisKIAllcnJvciA9IGRldmljZV9hZGQoJnN0YXJnZXQtPmRldik7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnN0YXJnZXQtPmRldiwgInRhcmdldCBkZXZpY2VfYWRkIGZhaWxlZCwgZXJyb3IgJWRcbiIsIGVycm9yKTsKQEAgLTg3OCw3ICs4ODAsOCBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpycSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2Rldi0+c2Rldl90YXJnZXQ7CiAKLQlpZiAoKGVycm9yID0gc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfUlVOTklORykpICE9IDApCisJZXJyb3IgPSBzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9SVU5OSU5HKTsKKwlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc2NzaV90YXJnZXRfYWRkKHN0YXJnZXQpOwpAQCAtODg2LDE2ICs4ODksMTggQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJdHJhbnNwb3J0X2NvbmZpZ3VyZV9kZXZpY2UoJnN0YXJnZXQtPmRldik7CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDFcbiIpOwotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAl9CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzZGV2LT5zZGV2X2Rldik7CiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2Rldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDJcbiIpOwogCQlkZXZpY2VfZGVsKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0JCWdvdG8gb3V0X3JlbW92ZTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAl0cmFuc3BvcnRfYWRkX2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXNkZXYtPmlzX3Zpc2libGUgPSAxOwpAQCAtOTEwLDE0ICs5MTUsMTQgQEAKIAllbHNlCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJmRldl9hdHRyX3F1ZXVlX2RlcHRoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JlbW92ZTsKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5jaGFuZ2VfcXVldWVfdHlwZSkKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmc2Rldl9hdHRyX3F1ZXVlX3R5cGVfcncpOwogCWVsc2UKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmZGV2X2F0dHJfcXVldWVfdHlwZSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gYnNnX3JlZ2lzdGVyX3F1ZXVlKHJxLCAmc2Rldi0+c2Rldl9nZW5kZXYsIE5VTEwsIE5VTEwpOwogCkBAIC05MzMsMTYgKzkzOCwxMSBAQAogCQkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LAogCQkJCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2Rldl9hdHRyc1tpXSk7CiAJCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXRfcmVtb3ZlOworCQkJCXJldHVybiBlcnJvcjsKIAkJfQogCX0KIAotCXJldHVybiAwOwotCi0gb3V0X3JlbW92ZToKLQlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKIAlyZXR1cm4gZXJyb3I7Ci0KIH0KIAogdm9pZCBfX3Njc2lfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDY1M2YyMmEuLjc5NjYwZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC00NzUsNyArNDc1LDggQEAKIAkJICJNYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgdGhlIEZDIHRyYW5zcG9ydCBzaG91bGQiCiAJCSAiIGluc3VsYXRlIHRoZSBsb3NzIG9mIGEgcmVtb3RlIHBvcnQuIE9uY2UgdGhpcyB2YWx1ZSBpcyIKIAkJICIgZXhjZWVkZWQsIHRoZSBzY3NpIHRhcmdldCBpcyByZW1vdmVkLiBWYWx1ZSBzaG91bGQgYmUiCi0JCSAiIGJldHdlZW4gMSBhbmQgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQuIik7CisJCSAiIGJldHdlZW4gMSBhbmQgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQgaWYiCisJCSAiIGZhc3RfaW9fZmFpbF90bW8gaXMgbm90IHNldC4iKTsKIAogLyoKICAqIE5ldGxpbmsgSW5mcmFzdHJ1Y3R1cmUKQEAgLTg0Miw5ICs4NDMsMTcgQEAKIAkgICAgKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9OT1RQUkVTRU5UKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsICZjcCwgMCk7Ci0JaWYgKCgqY3AgJiYgKCpjcCAhPSAnXG4nKSkgfHwKLQkgICAgKHZhbCA8IDApIHx8ICh2YWwgPiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVCkpCisJaWYgKCgqY3AgJiYgKCpjcCAhPSAnXG4nKSkgfHwgKHZhbCA8IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogSWYgZmFzdF9pb19mYWlsIGlzIG9mZiB3ZSBoYXZlIHRvIGNhcAorCSAqIGRldl9sb3NzX3RtbyBhdCBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVAorCSAqLworCWlmIChycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyA9PSAtMSAmJgorCSAgICB2YWwgPiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpLT5mLT5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vKHJwb3J0LCB2YWwpOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTkyNSw5ICs5MzQsMTYgQEAKIAkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPSAtMTsKIAllbHNlIHsKIAkJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmY3AsIDApOwotCQlpZiAoKCpjcCAmJiAoKmNwICE9ICdcbicpKSB8fAotCQkgICAgKHZhbCA8IDApIHx8ICh2YWwgPj0gcnBvcnQtPmRldl9sb3NzX3RtbykpCisJCWlmICgoKmNwICYmICgqY3AgIT0gJ1xuJykpIHx8ICh2YWwgPCAwKSkKIAkJCXJldHVybiAtRUlOVkFMOworCQkvKgorCQkgKiBDYXAgZmFzdF9pb19mYWlsIGJ5IGRldl9sb3NzX3RtbyBvcgorCQkgKiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVC4KKwkJICovCisJCWlmICgodmFsID49IHJwb3J0LT5kZXZfbG9zc190bW8pIHx8CisJCSAgICAodmFsID4gU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPSB2YWw7CiAJfQogCXJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCBmMjdlNTJkLi45MjdlOTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC0xNTUsNiArMTU1LDE3IEBACiBzYXNfYml0ZmllbGRfbmFtZV9zZWFyY2gobGlua3NwZWVkLCBzYXNfbGlua3NwZWVkX25hbWVzKQogc2FzX2JpdGZpZWxkX25hbWVfc2V0KGxpbmtzcGVlZCwgc2FzX2xpbmtzcGVlZF9uYW1lcykKIAorc3RhdGljIHN0cnVjdCBzYXNfZW5kX2RldmljZSAqc2FzX3NkZXZfdG9fcmRldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdGFyZ2V0X3RvX3JwaHkoc2Rldi0+c2Rldl90YXJnZXQpOworCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKKworCUJVR19PTihycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSAhPSBTQVNfRU5EX0RFVklDRSk7CisKKwlyZGV2ID0gcnBoeV90b19lbmRfZGV2aWNlKHJwaHkpOworCXJldHVybiByZGV2OworfQorCiBzdGF0aWMgdm9pZCBzYXNfc21wX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAogCQkJICAgIHN0cnVjdCBzYXNfcnBoeSAqcnBoeSkKIHsKQEAgLTM1OCw2ICszNjksODUgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3JlbW92ZV9ob3N0KTsKIAorLyoqCisgKiBzYXNfdGxyX3N1cHBvcnRlZCAtIGNoZWNraW5nIFRMUiBiaXQgaW4gdnBkIDB4OTAKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBDaGVjayBUcmFuc3BvcnQgTGF5ZXIgUmV0cmllcyBhcmUgc3VwcG9ydGVkIG9yIG5vdC4KKyAqIElmIHZwZCBwYWdlIDB4OTAgaXMgcHJlc2VudCwgVFJMIGlzIHN1cHBvcnRlZC4KKyAqCisgKi8KK3Vuc2lnbmVkIGludAorc2FzX3Rscl9zdXBwb3J0ZWQoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWNvbnN0IGludCB2cGRfbGVuID0gMzI7CisJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKwljaGFyICpidWZmZXIgPSBremFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOworCWludCByZXQgPSAwOworCisJaWYgKHNjc2lfZ2V0X3ZwZF9wYWdlKHNkZXYsIDB4OTAsIGJ1ZmZlciwgdnBkX2xlbikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBNYWdpYyBudW1iZXJzOiB0aGUgVlBEIFByb3RvY29sIHBhZ2UgKDB4OTApCisJICogaGFzIGEgNCBieXRlIGhlYWRlciBhbmQgdGhlbiBvbmUgZW50cnkgcGVyIGRldmljZSBwb3J0CisJICogdGhlIFRMUiBiaXQgaXMgYXQgb2Zmc2V0IDggb24gZWFjaCBwb3J0IGVudHJ5CisJICogaWYgd2UgdGFrZSB0aGUgZmlyc3QgcG9ydCwgdGhhdCdzIGF0IHRvdGFsIG9mZnNldCAxMgorCSAqLworCXJldCA9IGJ1ZmZlclsxMl0gJiAweDAxOworCisgb3V0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmRldi0+dGxyX3N1cHBvcnRlZCA9IHJldDsKKwlyZXR1cm4gcmV0OworCit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXNfdGxyX3N1cHBvcnRlZCk7CisKKy8qKgorICogc2FzX2Rpc2FibGVfdGxyIC0gc2V0dGluZyBUTFIgZmxhZ3MKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBTZXRpbmcgdGxyX2VuYWJsZWQgZmxhZyB0byAwLgorICoKKyAqLwordm9pZAorc2FzX2Rpc2FibGVfdGxyKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOworCisJcmRldi0+dGxyX2VuYWJsZWQgPSAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FzX2Rpc2FibGVfdGxyKTsKKworLyoqCisgKiBzYXNfZW5hYmxlX3RsciAtIHNldHRpbmcgVExSIGZsYWdzCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogU2V0aW5nIHRscl9lbmFibGVkIGZsYWcgMS4KKyAqCisgKi8KK3ZvaWQgc2FzX2VuYWJsZV90bHIoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGludCB0bHJfc3VwcG9ydGVkID0gMDsKKwl0bHJfc3VwcG9ydGVkICA9IHNhc190bHJfc3VwcG9ydGVkKHNkZXYpOworCisJaWYgKHRscl9zdXBwb3J0ZWQpIHsKKwkJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKworCQlyZGV2LT50bHJfZW5hYmxlZCA9IDE7CisJfQorCisJcmV0dXJuOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FzX2VuYWJsZV90bHIpOworCit1bnNpZ25lZCBpbnQgc2FzX2lzX3Rscl9lbmFibGVkKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOworCXJldHVybiByZGV2LT50bHJfZW5hYmxlZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhc19pc190bHJfZW5hYmxlZCk7CiAKIC8qCiAgKiBTQVMgUGh5IGF0dHJpYnV0ZXMKQEAgLTExNDYsMTUgKzEyMzYsMTAgQEAKIGludCBzYXNfcmVhZF9wb3J0X21vZGVfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJY2hhciAqYnVmZmVyID0ga3phbGxvYyhCVUZfU0laRSwgR0ZQX0tFUk5FTCksICptc2RhdGE7Ci0Jc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdGFyZ2V0X3RvX3JwaHkoc2Rldi0+c2Rldl90YXJnZXQpOwotCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOwogCXN0cnVjdCBzY3NpX21vZGVfZGF0YSBtb2RlX2RhdGE7CiAJaW50IHJlcywgZXJyb3I7CiAKLQlCVUdfT04ocnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgIT0gU0FTX0VORF9ERVZJQ0UpOwotCi0JcmRldiA9IHJwaHlfdG9fZW5kX2RldmljZShycGh5KTsKLQogCWlmICghYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTIwNyw2ICsxMjkyLDEwIEBACiAJCQkiJWRcbiIsIGludCk7CiBzYXNfZW5kX2Rldl9zaW1wbGVfYXR0cihpbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dCwgaW5pdGlhdG9yX3Jlc3BvbnNlX3RpbWVvdXQsCiAJCQkiJWRcbiIsIGludCk7CitzYXNfZW5kX2Rldl9zaW1wbGVfYXR0cih0bHJfc3VwcG9ydGVkLCB0bHJfc3VwcG9ydGVkLAorCQkJIiVkXG4iLCBpbnQpOworc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIodGxyX2VuYWJsZWQsIHRscl9lbmFibGVkLAorCQkJIiVkXG4iLCBpbnQpOwogCiBzdGF0aWMgREVDTEFSRV9UUkFOU1BPUlRfQ0xBU1Moc2FzX2V4cGFuZGVyX2NsYXNzLAogCQkJICAgICAgICJzYXNfZXhwYW5kZXIiLCBOVUxMLCBOVUxMLCBOVUxMKTsKQEAgLTE3MzMsNiArMTgyMiw4IEBACiAJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl9yZWFkeV9sZWRfbWVhbmluZyk7CiAJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl9JX1RfbmV4dXNfbG9zc190aW1lb3V0KTsKIAlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X2luaXRpYXRvcl9yZXNwb25zZV90aW1lb3V0KTsKKwlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X3Rscl9zdXBwb3J0ZWQpOworCVNFVFVQX0VORF9ERVZfQVRUUklCVVRFKGVuZF9kZXZfdGxyX2VuYWJsZWQpOwogCWktPmVuZF9kZXZfYXR0cnNbY291bnRdID0gTlVMTDsKIAogCWNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggMjU1ZGE1My4uMWRkNGQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTExOTYsMTkgKzExOTYsMTAgQEAKIAkJU0NwbnQtPnJlc3VsdCA9IDA7CiAJCW1lbXNldChTQ3BudC0+c2Vuc2VfYnVmZmVyLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQlicmVhazsKLQljYXNlIEFCT1JURURfQ09NTUFORDoKLQkJaWYgKHNzaGRyLmFzYyA9PSAweDEwKSB7IC8qIERJRjogRGlzayBkZXRlY3RlZCBjb3JydXB0aW9uICovCi0JCQlzY3NpX3ByaW50X3Jlc3VsdChTQ3BudCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlKCJzZCIsIFNDcG50KTsKKwljYXNlIEFCT1JURURfQ09NTUFORDogLyogRElGOiBUYXJnZXQgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLworCWNhc2UgSUxMRUdBTF9SRVFVRVNUOiAvKiBESVg6IEhvc3QgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLworCQlpZiAoc3NoZHIuYXNjID09IDB4MTApCiAJCQlnb29kX2J5dGVzID0gc2RfY29tcGxldGVkX2J5dGVzKFNDcG50KTsKLQkJfQotCQlicmVhazsKLQljYXNlIElMTEVHQUxfUkVRVUVTVDoKLQkJaWYgKHNzaGRyLmFzYyA9PSAweDEwKSB7IC8qIERJWDogSEJBIGRldGVjdGVkIGNvcnJ1cHRpb24gKi8KLQkJCXNjc2lfcHJpbnRfcmVzdWx0KFNDcG50KTsKLQkJCXNjc2lfcHJpbnRfc2Vuc2UoInNkIiwgU0NwbnQpOwotCQkJZ29vZF9ieXRlcyA9IHNkX2NvbXBsZXRlZF9ieXRlcyhTQ3BudCk7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMjE4LDggKzEyMDksMTkgQEAKIAkJc2RfZGlmX2NvbXBsZXRlKFNDcG50LCBnb29kX2J5dGVzKTsKIAogCWlmIChzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RrcC0+ZGV2aWNlLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpCi0JICAgID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmIFNDcG50LT5jbW5kICE9IFNDcG50LT5yZXF1ZXN0LT5jbWQpCisJICAgID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmIFNDcG50LT5jbW5kICE9IFNDcG50LT5yZXF1ZXN0LT5jbWQpIHsKKworCQkvKiBXZSBoYXZlIHRvIHByaW50IGEgZmFpbGVkIGNvbW1hbmQgaGVyZSBhcyB0aGUKKwkJICogZXh0ZW5kZWQgQ0RCIGdldHMgZnJlZWQgYmVmb3JlIHNjc2lfaW9fY29tcGxldGlvbigpCisJCSAqIGlzIGNhbGxlZC4KKwkJICovCisJCWlmIChyZXN1bHQpCisJCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOworCiAJCW1lbXBvb2xfZnJlZShTQ3BudC0+Y21uZCwgc2RfY2RiX3Bvb2wpOworCQlTQ3BudC0+Y21uZCA9IE5VTEw7CisJCVNDcG50LT5jbWRfbGVuID0gMDsKKwl9CiAKIAlyZXR1cm4gZ29vZF9ieXRlczsKIH0KQEAgLTE5NDYsMTMgKzE5NDgsMTMgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNka3AtPmRpc2stPnF1ZXVlOwogCXVuc2lnbmVkIGludCBzZWN0b3Jfc3ogPSBzZGtwLT5kZXZpY2UtPnNlY3Rvcl9zaXplOwotCWNoYXIgKmJ1ZmZlcjsKKwljb25zdCBpbnQgdnBkX2xlbiA9IDMyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7CiAKLQkvKiBCbG9jayBMaW1pdHMgVlBEICovCi0JYnVmZmVyID0gc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIwKTsKLQotCWlmIChidWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuOworCWlmICghYnVmZmVyIHx8CisJICAgIC8qIEJsb2NrIExpbWl0cyBWUEQgKi8KKwkgICAgc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIwLCBidWZmZXIsIHZwZF9sZW4pKQorCQlnb3RvIG91dDsKIAogCWJsa19xdWV1ZV9pb19taW4oc2RrcC0+ZGlzay0+cXVldWUsCiAJCQkgZ2V0X3VuYWxpZ25lZF9iZTE2KCZidWZmZXJbNl0pICogc2VjdG9yX3N6KTsKQEAgLTE5ODQsNiArMTk4Niw3IEBACiAJCQkJZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbMzJdKSAmIH4oMSA8PCAzMSk7CiAJfQogCisgb3V0OgogCWtmcmVlKGJ1ZmZlcik7CiB9CiAKQEAgLTE5OTMsMjAgKzE5OTYsMjMgQEAKICAqLwogc3RhdGljIHZvaWQgc2RfcmVhZF9ibG9ja19jaGFyYWN0ZXJpc3RpY3Moc3RydWN0IHNjc2lfZGlzayAqc2RrcCkKIHsKLQljaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCXUxNiByb3Q7CisJY29uc3QgaW50IHZwZF9sZW4gPSAzMjsKIAotCS8qIEJsb2NrIERldmljZSBDaGFyYWN0ZXJpc3RpY3MgVlBEICovCi0JYnVmZmVyID0gc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIxKTsKKwlidWZmZXIgPSBrbWFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOwogCi0JaWYgKGJ1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm47CisJaWYgKCFidWZmZXIgfHwKKwkgICAgLyogQmxvY2sgRGV2aWNlIENoYXJhY3RlcmlzdGljcyBWUEQgKi8KKwkgICAgc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIxLCBidWZmZXIsIHZwZF9sZW4pKQorCQlnb3RvIG91dDsKIAogCXJvdCA9IGdldF91bmFsaWduZWRfYmUxNigmYnVmZmVyWzRdKTsKIAogCWlmIChyb3QgPT0gMSkKIAkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIHNka3AtPmRpc2stPnF1ZXVlKTsKIAorIG91dDoKIAlrZnJlZShidWZmZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2VzLmMgYi9kcml2ZXJzL3Njc2kvc2VzLmMKaW5kZXggNTViMDM0Yi4uMWQ3YTg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Nlcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZXMuYwpAQCAtNDQ4LDEzICs0NDgsMTcgQEAKIAkJLmFkZHIgPSAwLAogCX07CiAKLQlidWYgPSBzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuOworCWJ1ZiA9IGttYWxsb2MoSU5JVF9BTExPQ19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZiB8fCBzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzLCBidWYsIElOSVRfQUxMT0NfU0laRSkpCisJCWdvdG8gZnJlZTsKIAogCXNlc19lbmNsb3N1cmVfZGF0YV9wcm9jZXNzKGVkZXYsIHRvX3Njc2lfZGV2aWNlKGVkZXYtPmVkZXYucGFyZW50KSwgMCk7CiAKIAl2cGRfbGVuID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10pICsgNDsKKwlrZnJlZShidWYpOworCWJ1ZiA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYgfHxzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzLCBidWYsIHZwZF9sZW4pKQorCQlnb3RvIGZyZWU7CiAKIAlkZXNjID0gYnVmICsgNDsKIAl3aGlsZSAoZGVzYyA8IGJ1ZiArIHZwZF9sZW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCmluZGV4IDU0MDIzZDQxLi4yNmU4ZTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCisrKyBiL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMKQEAgLTEwNzAsNyArMTA3MCw3IEBACiAgICBjaGFyICpjdXIgPSBzdHI7CiAgICBpbnQgaSA9IDE7CiAKLSAgIHdoaWxlIChjdXIgJiYgaXNkaWdpdCgqY3VyKSAmJiBpIDw9IE1BWF9JTlRfUEFSQU0pIHsKKyAgIHdoaWxlIChjdXIgJiYgaXNkaWdpdCgqY3VyKSAmJiBpIDwgTUFYX0lOVF9QQVJBTSkgewogICAgICAgaW50c1tpKytdID0gc2ltcGxlX3N0cnRvdWwoY3VyLCBOVUxMLCAwKTsKIAogICAgICAgaWYgKChjdXIgPSBzdHJjaHIoY3VyLCAnLCcpKSAhPSBOVUxMKSBjdXIrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jCmluZGV4IGQyNjA0YzguLmU0YWM1ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Ztd19wdnNjc2kuYwpAQCAtMTA2OSw3ICsxMDY5LDggQEAKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyljdHgtPnNnbCwgZ2V0X29yZGVyKFNHTF9TSVpFKSk7CiB9CiAKLXN0YXRpYyBpbnQgcHZzY3NpX3NldHVwX21zaXgoY29uc3Qgc3RydWN0IHB2c2NzaV9hZGFwdGVyICphZGFwdGVyLCBpbnQgKmlycSkKK3N0YXRpYyBpbnQgcHZzY3NpX3NldHVwX21zaXgoY29uc3Qgc3RydWN0IHB2c2NzaV9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICB1bnNpZ25lZCBpbnQgKmlycSkKIHsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSBlbnRyeSA9IHsgMCwgUFZTQ1NJX1ZFQ1RPUl9DT01QTEVUSU9OIH07CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCBlOWIxNWMzLi5hODFmZjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC0xMjE3LDEyICsxMjE3LDYgQEAKIAl9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDAKLQkvKiBpZiBhY2Nlc3MgbWV0aG9kIGlzIEFVLCBpdCBpcyBhIDE2NTUwIHdpdGggYSBxdWlyayAqLwotCWlmICh1cC0+cG9ydC50eXBlID09IFBPUlRfMTY1NTBBICYmIHVwLT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQotCQl1cC0+YnVncyB8PSBVQVJUX0JVR19OT01TUjsKLSNlbmRpZgotCiAJc2VyaWFsX291dHAodXAsIFVBUlRfTENSLCBzYXZlX2xjcik7CiAKIAlpZiAodXAtPmNhcGFiaWxpdGllcyAhPSB1YXJ0X2NvbmZpZ1t1cC0+cG9ydC50eXBlXS5mbGFncykgewpAQCAtMjQyOCw3ICsyNDIyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsODI1MF9wb3J0X3NpemUoc3RydWN0IHVhcnRfODI1MF9wb3J0ICpwdCkKIHsKIAlpZiAocHQtPnBvcnQuaW90eXBlID09IFVQSU9fQVUpCi0JCXJldHVybiAweDEwMDAwMDsKKwkJcmV0dXJuIDB4MTAwMDsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQCiAJaWYgKGlzX29tYXBfcG9ydChwdCkpCiAJCXJldHVybiAweDE2IDw8IHB0LT5wb3J0LnJlZ3NoaWZ0OwpAQCAtMjU4NSw2ICsyNTc5LDEzIEBACiAKIAlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFKQogCQlhdXRvY29uZmlnKHVwLCBwcm9iZWZsYWdzKTsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDAKKwkvKiBpZiBhY2Nlc3MgbWV0aG9kIGlzIEFVLCBpdCBpcyBhIDE2NTUwIHdpdGggYSBxdWlyayAqLworCWlmICh1cC0+cG9ydC50eXBlID09IFBPUlRfMTY1NTBBICYmIHVwLT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQorCQl1cC0+YnVncyB8PSBVQVJUX0JVR19OT01TUjsKKyNlbmRpZgorCiAJaWYgKHVwLT5wb3J0LnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIGZsYWdzICYgVUFSVF9DT05GSUdfSVJRKQogCQlhdXRvY29uZmlnX2lycSh1cCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IDlmZjQ3ZGIwLi44ODhhMGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTEwODYsMTIgKzEwODYsMTIgQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIFNFUklBTF9QTUFDWklMT0cKLQl0cmlzdGF0ZSAiUG93ZXJNYWMgejg1YzMwIEVTQ0Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBQQ19PRiAmJiBQUENfUE1BQworCXRyaXN0YXRlICJNYWMgb3IgUG93ZXJNYWMgejg1YzMwIEVTQ0Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIChNNjhLICYmIE1BQykgfHwgKFBQQ19PRiAmJiBQUENfUE1BQykKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgWmlsb2cgejg1QzMwIHNlcmlhbCBwb3J0cyBmb3VuZCBvbgotCSAgUG93ZXJNYWMgbWFjaGluZXMuCisJICAoUG93ZXIpTWFjIG1hY2hpbmVzLgogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHRoZXNlIHNlcmlhbCBwb3J0cy4KIAogY29uZmlnIFNFUklBTF9QTUFDWklMT0dfVFRZUwpAQCAtMTExNiwxNiArMTExNiwxNiBAQAogCSAgdW5hYmxlIHRvIHVzZSB0aGUgODI1MCBtb2R1bGUgZm9yIFBDTUNJQSBvciBvdGhlciAxNkM1NTAtc3R5bGUKIAkgIFVBUlRzLgogCi0JICBTYXkgTiB1bmxlc3MgeW91IG5lZWQgdGhlIHo4NWMzMCBwb3J0cyBvbiB5b3VyIHBvd2VybWFjCisJICBTYXkgTiB1bmxlc3MgeW91IG5lZWQgdGhlIHo4NWMzMCBwb3J0cyBvbiB5b3VyIChQb3dlcilNYWMKIAkgIHRvIGFwcGVhciBhcyAvZGV2L3R0eVNuLgogCiBjb25maWcgU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFCi0JYm9vbCAiQ29uc29sZSBvbiBQb3dlck1hYyB6ODVjMzAgc2VyaWFsIHBvcnQiCisJYm9vbCAiQ29uc29sZSBvbiBNYWMgb3IgUG93ZXJNYWMgejg1YzMwIHNlcmlhbCBwb3J0IgogCWRlcGVuZHMgb24gU0VSSUFMX1BNQUNaSUxPRz15CiAJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKIAloZWxwCiAJICBJZiB5b3Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIHVzZSB0aGUgejg1YzMwIHNlcmlhbCBwb3J0Ci0JICBvbiB5b3VyIFBvd2VyTWFjIGFzIHRoZSBjb25zb2xlLCB5b3UgY2FuIGRvIHNvIGJ5IGFuc3dlcmluZworCSAgb24geW91ciAoUG93ZXIpTWFjIGFzIHRoZSBjb25zb2xlLCB5b3UgY2FuIGRvIHNvIGJ5IGFuc3dlcmluZwogCSAgWSB0byB0aGlzIG9wdGlvbi4KIAogY29uZmlnIFNFUklBTF9MSDdBNDBYCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IDdjZTllOWYuLjMxMTlmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4X3BzYy5oPgpAQCAtMTEzLDYgKzExNCw3IEBACiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIGludGVycnVwdGlvbiBoYW5kbGluZyByb3V0aW5lICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTJ4eF91YXJ0X2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworc3RhdGljIGlycXJldHVybl90IG1wYzV4eHhfdWFydF9wcm9jZXNzX2ludChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKIAogCiAvKiBTaW1wbGUgbWFjcm8gdG8gdGVzdCBpZiBhIHBvcnQgaXMgY29uc29sZSBvciBub3QuIFRoaXMgb25lIGlzIHRha2VuCkBAIC0xNDUsNiArMTQ3LDExIEBACiAJdm9pZAkJKCpjd19kaXNhYmxlX2ludHMpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogCXZvaWQJCSgqY3dfcmVzdG9yZV9pbnRzKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKIAl1bnNpZ25lZCBsb25nCSgqZ2V0dWFydGNsaykodm9pZCAqcCk7CisJaW50CQkoKmNsb2NrKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgZW5hYmxlKTsKKwlpbnQJCSgqZmlmb2NfaW5pdCkodm9pZCk7CisJdm9pZAkJKCpmaWZvY191bmluaXQpKHZvaWQpOworCXZvaWQJCSgqZ2V0X2lycSkoc3RydWN0IHVhcnRfcG9ydCAqLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVfaXJxKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKIH07CiAKICNpZmRlZiBDT05GSUdfUFBDX01QQzUyeHgKQEAgLTI1Niw2ICsyNjMsMTggQEAKIAlyZXR1cm4gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShwKSAvIDI7CiB9CiAKK3N0YXRpYyB2b2lkIG1wYzUyeHhfcHNjX2dldF9pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlwb3J0LT5pcnFmbGFncyA9IElSUUZfRElTQUJMRUQ7CisJcG9ydC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworfQorCisvKiA1Mnh4IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyLiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwb3J0IGxvY2sgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGM1Mnh4X3BzY19oYW5kbGVfaXJxKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIG1wYzV4eHhfdWFydF9wcm9jZXNzX2ludChwb3J0KTsKK30KKwogc3RhdGljIHN0cnVjdCBwc2Nfb3BzIG1wYzUyeHhfcHNjX29wcyA9IHsKIAkuZmlmb19pbml0ID0gbXBjNTJ4eF9wc2NfZmlmb19pbml0LAogCS5yYXdfcnhfcmR5ID0gbXBjNTJ4eF9wc2NfcmF3X3J4X3JkeSwKQEAgLTI3MywxNCArMjkyLDMyIEBACiAJLmN3X2Rpc2FibGVfaW50cyA9IG1wYzUyeHhfcHNjX2N3X2Rpc2FibGVfaW50cywKIAkuY3dfcmVzdG9yZV9pbnRzID0gbXBjNTJ4eF9wc2NfY3dfcmVzdG9yZV9pbnRzLAogCS5nZXR1YXJ0Y2xrID0gbXBjNTJ4eF9nZXR1YXJ0Y2xrLAorCS5nZXRfaXJxID0gbXBjNTJ4eF9wc2NfZ2V0X2lycSwKKwkuaGFuZGxlX2lycSA9IG1wYzUyeHhfcHNjX2hhbmRsZV9pcnEsCiB9OwogCiAjZW5kaWYgLyogQ09ORklHX01QQzUyeHggKi8KIAogI2lmZGVmIENPTkZJR19QUENfTVBDNTEyeAogI2RlZmluZSBGSUZPXzUxMngocG9ydCkgKChzdHJ1Y3QgbXBjNTEyeF9wc2NfZmlmbyBfX2lvbWVtICopKFBTQyhwb3J0KSsxKSkKKworLyogUFNDIEZJRk8gQ29udHJvbGxlciBmb3IgbXBjNTEyeCAqLworc3RydWN0IHBzY19maWZvYyB7CisJdTMyIGZpZm9jX2NtZDsKKwl1MzIgZmlmb2NfaW50OworCXUzMiBmaWZvY19kbWE7CisJdTMyIGZpZm9jX2F4ZTsKKwl1MzIgZmlmb2NfZGVidWc7Cit9OworCitzdGF0aWMgc3RydWN0IHBzY19maWZvYyBfX2lvbWVtICpwc2NfZmlmb2M7CitzdGF0aWMgdW5zaWduZWQgaW50IHBzY19maWZvY19pcnE7CisKIHN0YXRpYyB2b2lkIG1wYzUxMnhfcHNjX2ZpZm9faW5pdChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogeworCS8qIC8zMiBwcmVzY2FsZXIgKi8KKwlvdXRfYmUxNigmUFNDKHBvcnQpLT5tcGM1Mnh4X3BzY19jbG9ja19zZWxlY3QsIDB4ZGQwMCk7CisKIAlvdXRfYmUzMigmRklGT181MTJ4KHBvcnQpLT50eGNtZCwgTVBDNTEyeF9QU0NfRklGT19SRVNFVF9TTElDRSk7CiAJb3V0X2JlMzIoJkZJRk9fNTEyeChwb3J0KS0+dHhjbWQsIE1QQzUxMnhfUFNDX0ZJRk9fRU5BQkxFX1NMSUNFKTsKIAlvdXRfYmUzMigmRklGT181MTJ4KHBvcnQpLT50eGFsYXJtLCAxKTsKQEAgLTM5Myw2ICs0MzAsMTYwIEBACiAJcmV0dXJuIG1wYzV4eHhfZ2V0X2J1c19mcmVxdWVuY3kocCk7CiB9CiAKKyNkZWZpbmUgREVGQVVMVF9GSUZPX1NJWkUgMTYKKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgZ2V0X2ZpZm9fc2l6ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgY2hhciAqZmlmb19uYW1lKQoreworCWNvbnN0IHVuc2lnbmVkIGludCAqZnA7CisKKwlmcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgZmlmb19uYW1lLCBOVUxMKTsKKwlpZiAoZnApCisJCXJldHVybiAqZnA7CisKKwlwcl93YXJuaW5nKCJubyAlcyBwcm9wZXJ0eSBpbiAlcyBub2RlLCBkZWZhdWx0aW5nIHRvICVkXG4iLAorCQkgICBmaWZvX25hbWUsIG5wLT5mdWxsX25hbWUsIERFRkFVTFRfRklGT19TSVpFKTsKKworCXJldHVybiBERUZBVUxUX0ZJRk9fU0laRTsKK30KKworI2RlZmluZSBGSUZPQyhfYmFzZSkgKChzdHJ1Y3QgbXBjNTEyeF9wc2NfZmlmbyBfX2lvbWVtICopIFwKKwkJICAgICgodTMyKShfYmFzZSkgKyBzaXplb2Yoc3RydWN0IG1wYzUyeHhfcHNjKSkpCisKKy8qIEluaXQgUFNDIEZJRk8gQ29udHJvbGxlciAqLworc3RhdGljIGludCBfX2luaXQgbXBjNTEyeF9wc2NfZmlmb2NfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdm9pZCBfX2lvbWVtICpwc2M7CisJdW5zaWduZWQgaW50IHR4X2ZpZm9fc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnhfZmlmb19zaXplOworCWludCBmaWZvYmFzZSA9IDA7IC8qIGN1cnJlbnQgZmlmbyBhZGRyZXNzIGluIDMyIGJpdCB3b3JkcyAqLworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJCSAgICAgImZzbCxtcGM1MTIxLXBzYy1maWZvIik7CisJaWYgKCFucCkgeworCQlwcl9lcnIoIiVzOiBDYW4ndCBmaW5kIEZJRk9DIG5vZGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHNjX2ZpZm9jID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghcHNjX2ZpZm9jKSB7CisJCXByX2VycigiJXM6IENhbid0IG1hcCBGSUZPQ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwc2NfZmlmb2NfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCW9mX25vZGVfcHV0KG5wKTsKKwlpZiAocHNjX2ZpZm9jX2lycSA9PSBOT19JUlEpIHsKKwkJcHJfZXJyKCIlczogQ2FuJ3QgZ2V0IEZJRk9DIGlycVxuIiwgX19mdW5jX18pOworCQlpb3VubWFwKHBzY19maWZvYyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxtcGM1MTIxLXBzYy11YXJ0IikgeworCQl0eF9maWZvX3NpemUgPSBnZXRfZmlmb19zaXplKG5wLCAiZnNsLHR4LWZpZm8tc2l6ZSIpOworCQlyeF9maWZvX3NpemUgPSBnZXRfZmlmb19zaXplKG5wLCAiZnNsLHJ4LWZpZm8tc2l6ZSIpOworCisJCS8qIHNpemUgaW4gcmVnaXN0ZXIgaXMgaW4gNCBieXRlIHVuaXRzICovCisJCXR4X2ZpZm9fc2l6ZSAvPSA0OworCQlyeF9maWZvX3NpemUgLz0gNDsKKwkJaWYgKCF0eF9maWZvX3NpemUpCisJCQl0eF9maWZvX3NpemUgPSAxOworCQlpZiAoIXJ4X2ZpZm9fc2l6ZSkKKwkJCXJ4X2ZpZm9fc2l6ZSA9IDE7CisKKwkJcHNjID0gb2ZfaW9tYXAobnAsIDApOworCQlpZiAoIXBzYykgeworCQkJcHJfZXJyKCIlczogQ2FuJ3QgbWFwICVzIGRldmljZVxuIiwKKwkJCQlfX2Z1bmNfXywgbnAtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEZJRk8gc3BhY2UgaXMgNEtpQiwgY2hlY2sgaWYgcmVxdWVzdGVkIHNpemUgaXMgYXZhaWxhYmxlICovCisJCWlmICgoZmlmb2Jhc2UgKyB0eF9maWZvX3NpemUgKyByeF9maWZvX3NpemUpID4gMHgxMDAwKSB7CisJCQlwcl9lcnIoIiVzOiBubyBmaWZvIHNwYWNlIGF2YWlsYWJsZSBmb3IgJXNcbiIsCisJCQkJX19mdW5jX18sIG5wLT5mdWxsX25hbWUpOworCQkJaW91bm1hcChwc2MpOworCQkJLyoKKwkJCSAqIGNoYW5jZXMgYXJlIHRoYXQgYW5vdGhlciBkZXZpY2UgcmVxdWVzdHMgbGVzcworCQkJICogZmlmbyBzcGFjZSwgc28gd2UgY29udGludWUuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIHNldCB0eCBhbmQgcnggZmlmbyBzaXplIHJlZ2lzdGVycyAqLworCQlvdXRfYmUzMigmRklGT0MocHNjKS0+dHhzeiwgKGZpZm9iYXNlIDw8IDE2KSB8IHR4X2ZpZm9fc2l6ZSk7CisJCWZpZm9iYXNlICs9IHR4X2ZpZm9fc2l6ZTsKKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnJ4c3osIChmaWZvYmFzZSA8PCAxNikgfCByeF9maWZvX3NpemUpOworCQlmaWZvYmFzZSArPSByeF9maWZvX3NpemU7CisKKwkJLyogcmVzZXQgYW5kIGVuYWJsZSB0aGUgc2xpY2VzICovCisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT50eGNtZCwgMHg4MCk7CisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT50eGNtZCwgMHgwMSk7CisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT5yeGNtZCwgMHg4MCk7CisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT5yeGNtZCwgMHgwMSk7CisKKwkJaW91bm1hcChwc2MpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXBjNTEyeF9wc2NfZmlmb2NfdW5pbml0KHZvaWQpCit7CisJaW91bm1hcChwc2NfZmlmb2MpOworfQorCisvKiA1MTJ4IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyLiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwb3J0IGxvY2sgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGM1MTJ4X3BzY19oYW5kbGVfaXJxKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmaWZvY19pbnQ7CisJaW50IHBzY19udW07CisKKwkvKiBSZWFkIHBlbmRpbmcgUFNDIEZJRk9DIGludGVycnVwdHMgKi8KKwlmaWZvY19pbnQgPSBpbl9iZTMyKCZwc2NfZmlmb2MtPmZpZm9jX2ludCk7CisKKwkvKiBDaGVjayBpZiBpdCBpcyBhbiBpbnRlcnJ1cHQgZm9yIHRoaXMgcG9ydCAqLworCXBzY19udW0gPSAocG9ydC0+bWFwYmFzZSAmIDB4ZjAwKSA+PiA4OworCWlmICh0ZXN0X2JpdChwc2NfbnVtLCAmZmlmb2NfaW50KSB8fAorCSAgICB0ZXN0X2JpdChwc2NfbnVtICsgMTYsICZmaWZvY19pbnQpKQorCQlyZXR1cm4gbXBjNXh4eF91YXJ0X3Byb2Nlc3NfaW50KHBvcnQpOworCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaW50IG1wYzUxMnhfcHNjX2Nsb2NrKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBlbmFibGUpCit7CisJc3RydWN0IGNsayAqcHNjX2NsazsKKwlpbnQgcHNjX251bTsKKwljaGFyIGNsa19uYW1lWzEwXTsKKworCWlmICh1YXJ0X2NvbnNvbGUocG9ydCkpCisJCXJldHVybiAwOworCisJcHNjX251bSA9IChwb3J0LT5tYXBiYXNlICYgMHhmMDApID4+IDg7CisJc25wcmludGYoY2xrX25hbWUsIHNpemVvZihjbGtfbmFtZSksICJwc2MlZF9jbGsiLCBwc2NfbnVtKTsKKwlwc2NfY2xrID0gY2xrX2dldChwb3J0LT5kZXYsIGNsa19uYW1lKTsKKwlpZiAoSVNfRVJSKHBzY19jbGspKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiRmFpbGVkIHRvIGdldCBQU0MgY2xvY2sgZW50cnkhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlcyAlc2FibGVcbiIsIGNsa19uYW1lLCBlbmFibGUgPyAiZW4iIDogImRpcyIpOworCisJaWYgKGVuYWJsZSkKKwkJY2xrX2VuYWJsZShwc2NfY2xrKTsKKwllbHNlCisJCWNsa19kaXNhYmxlKHBzY19jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzUxMnhfcHNjX2dldF9pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlwb3J0LT5pcnFmbGFncyA9IElSUUZfU0hBUkVEOworCXBvcnQtPmlycSA9IHBzY19maWZvY19pcnE7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcHNjX29wcyBtcGM1MTJ4X3BzY19vcHMgPSB7CiAJLmZpZm9faW5pdCA9IG1wYzUxMnhfcHNjX2ZpZm9faW5pdCwKIAkucmF3X3J4X3JkeSA9IG1wYzUxMnhfcHNjX3Jhd19yeF9yZHksCkBAIC00MTAsNiArNjAxLDExIEBACiAJLmN3X2Rpc2FibGVfaW50cyA9IG1wYzUxMnhfcHNjX2N3X2Rpc2FibGVfaW50cywKIAkuY3dfcmVzdG9yZV9pbnRzID0gbXBjNTEyeF9wc2NfY3dfcmVzdG9yZV9pbnRzLAogCS5nZXR1YXJ0Y2xrID0gbXBjNTEyeF9nZXR1YXJ0Y2xrLAorCS5jbG9jayA9IG1wYzUxMnhfcHNjX2Nsb2NrLAorCS5maWZvY19pbml0ID0gbXBjNTEyeF9wc2NfZmlmb2NfaW5pdCwKKwkuZmlmb2NfdW5pbml0ID0gbXBjNTEyeF9wc2NfZmlmb2NfdW5pbml0LAorCS5nZXRfaXJxID0gbXBjNTEyeF9wc2NfZ2V0X2lycSwKKwkuaGFuZGxlX2lycSA9IG1wYzUxMnhfcHNjX2hhbmRsZV9pcnEsCiB9OwogI2VuZGlmCiAKQEAgLTUxOSwxMCArNzE1LDE1IEBACiAJc3RydWN0IG1wYzUyeHhfcHNjIF9faW9tZW0gKnBzYyA9IFBTQyhwb3J0KTsKIAlpbnQgcmV0OwogCisJaWYgKHBzY19vcHMtPmNsb2NrKSB7CisJCXJldCA9IHBzY19vcHMtPmNsb2NrKHBvcnQsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAkvKiBSZXF1ZXN0IElSUSAqLwogCXJldCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgbXBjNTJ4eF91YXJ0X2ludCwKLQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKLQkJIm1wYzUyeHhfcHNjX3VhcnQiLCBwb3J0KTsKKwkJCSAgcG9ydC0+aXJxZmxhZ3MsICJtcGM1Mnh4X3BzY191YXJ0IiwgcG9ydCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTUzLDYgKzc1NCw5IEBACiAJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IDA7CiAJb3V0X2JlMTYoJnBzYy0+bXBjNTJ4eF9wc2NfaW1yLCBwb3J0LT5yZWFkX3N0YXR1c19tYXNrKTsKIAorCWlmIChwc2Nfb3BzLT5jbG9jaykKKwkJcHNjX29wcy0+Y2xvY2socG9ydCwgMCk7CisKIAkvKiBSZWxlYXNlIGludGVycnVwdCAqLwogCWZyZWVfaXJxKHBvcnQtPmlycSwgcG9ydCk7CiB9CkBAIC04NTEsMTUgKzEwNTUsMTIgQEAKIH0KIAogc3RhdGljIGlycXJldHVybl90Ci1tcGM1Mnh4X3VhcnRfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK21wYzV4eHhfdWFydF9wcm9jZXNzX2ludChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7CiAJdW5zaWduZWQgbG9uZyBwYXNzID0gSVNSX1BBU1NfTElNSVQ7CiAJdW5zaWduZWQgaW50IGtlZXBnb2luZzsKIAl1OCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJnBvcnQtPmxvY2spOwotCiAJLyogV2hpbGUgd2UgaGF2ZSBzdHVmZiB0byBkbywgd2UgY29udGludWUgKi8KIAlkbyB7CiAJCS8qIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcgdG8gZG8sIHdlIHN0b3AgKi8KQEAgLTg4NiwxMSArMTA4NywyMyBAQAogCiAJfSB3aGlsZSAoa2VlcGdvaW5nKTsKIAotCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGlycXJldHVybl90CittcGM1Mnh4X3VhcnRfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2lkOworCWlycXJldHVybl90IHJldDsKKworCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7CisKKwlyZXQgPSBwc2Nfb3BzLT5oYW5kbGVfaXJxKHBvcnQpOworCisJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBDb25zb2xlICggaWYgYXBwbGljYWJsZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExNTIsNyArMTM2NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXBvcnQtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKKwlwc2Nfb3BzLT5nZXRfaXJxKHBvcnQsIG9wLT5ub2RlKTsKIAlpZiAocG9ydC0+aXJxID09IE5PX0lSUSkgewogCQlkZXZfZGJnKCZvcC0+ZGV2LCAiQ291bGQgbm90IGdldCBpcnFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNjMsMTAgKzEzNzYsOCBAQAogCiAJLyogQWRkIHRoZSBwb3J0IHRvIHRoZSB1YXJ0IHN1Yi1zeXN0ZW0gKi8KIAlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7Ci0JaWYgKHJldCkgewotCQlpcnFfZGlzcG9zZV9tYXBwaW5nKHBvcnQtPmlycSk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQl9CiAKIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsICh2b2lkICopcG9ydCk7CiAJcmV0dXJuIDA7CkBAIC0xMTc4LDEwICsxMzg5LDggQEAKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOwogCi0JaWYgKHBvcnQpIHsKKwlpZiAocG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwotCQlpcnFfZGlzcG9zZV9tYXBwaW5nKHBvcnQtPmlycSk7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjg4LDYgKzE0OTcsMTUgQEAKIAogCW1wYzUyeHhfdWFydF9vZl9lbnVtZXJhdGUoKTsKIAorCS8qCisJICogTWFwIHRoZSBQU0MgRklGTyBDb250cm9sbGVyIGFuZCBpbml0IGlmIG9uIE1QQzUxMnguCisJICovCisJaWYgKHBzY19vcHMtPmZpZm9jX2luaXQpIHsKKwkJcmV0ID0gcHNjX29wcy0+Zmlmb2NfaW5pdCgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlyZXQgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfdWFydF9vZl9kcml2ZXIpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyIGZhaWxlZCAoJWkpXG4iLApAQCAtMTMwMiw2ICsxNTIwLDkgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdAogbXBjNTJ4eF91YXJ0X2V4aXQodm9pZCkKIHsKKwlpZiAocHNjX29wcy0+Zmlmb2NfdW5pbml0KQorCQlwc2Nfb3BzLT5maWZvY191bmluaXQoKTsKKwogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X3VhcnRfb2ZfZHJpdmVyKTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcGM1Mnh4X3VhcnRfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwppbmRleCA2ODNlNjZmLi5mMDIwZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCkBAIC02MywxMSArNjMsMTcgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9kYmRtYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNpby5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNkZWZpbmUgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKHgpICgwKQorI2VuZGlmCiAKICNpZiBkZWZpbmVkIChDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpAQCAtODMsMTEgKzg5LDkgQEAKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSAicG1hY196aWxvZzogMC42IChCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+KSI7CiBNT0RVTEVfQVVUSE9SKCJCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIFBvd2VyTWFjIHNlcmlhbCBwb3J0cy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgTWFjIGFuZCBQb3dlck1hYyBzZXJpYWwgcG9ydHMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgUFdSREJHKGZtdCwgYXJnLi4uKQlwcmludGsoS0VSTl9ERUJVRyBmbXQgLCAjIyBhcmcpCi0KICNpZmRlZiBDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19UVFlTCiAjZGVmaW5lIFBNQUNaSUxPR19NQUpPUgkJVFRZX01BSk9SCiAjZGVmaW5lIFBNQUNaSUxPR19NSU5PUgkJNjQKQEAgLTE1Myw4ICsxNTcsOCBAQAogCXdyaXRlX3pzcmVnKHVhcCwgUjEwLCByZWdzW1IxMF0pOwogCiAJLyogU2V0IFRYL1JYIGNvbnRyb2xzIHNhbnMgdGhlIGVuYWJsZSBiaXRzLiAgKi8KLSAgICAgICAJd3JpdGVfenNyZWcodWFwLCBSMywgcmVnc1tSM10gJiB+UnhFTkFCTEUpOwotICAgICAgIAl3cml0ZV96c3JlZyh1YXAsIFI1LCByZWdzW1I1XSAmIH5UeEVOQUJMRSk7CisJd3JpdGVfenNyZWcodWFwLCBSMywgcmVnc1tSM10gJiB+UnhFTkFCTEUpOworCXdyaXRlX3pzcmVnKHVhcCwgUjUsIHJlZ3NbUjVdICYgflR4RU5BQkxFKTsKIAogCS8qIG5vdyBzZXQgUjcgInByaW1lIiBvbiBFU0NDICovCiAJd3JpdGVfenNyZWcodWFwLCBSMTUsIHJlZ3NbUjE1XSB8IEVOODVDMzApOwpAQCAtMjA1LDcgKzIwOSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBtel9tYXliZV91cGRhdGVfcmVncyhzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCkKIHsKLSAgICAgICAJaWYgKCFaU19SRUdTX0hFTEQodWFwKSkgeworCWlmICghWlNfUkVHU19IRUxEKHVhcCkpIHsKIAkJaWYgKFpTX1RYX0FDVElWRSh1YXApKSB7CiAJCQl1YXAtPmZsYWdzIHw9IFBNQUNaSUxPR19GTEFHX1JFR1NfSEVMRDsKIAkJfSBlbHNlIHsKQEAgLTI4MSw3ICsyODUsNyBAQAogCQkJc3Bpbl9sb2NrKCZ1YXAtPnBvcnQubG9jayk7CiAJCQlpZiAoc3dhbGxvdykKIAkJCQlnb3RvIG5leHRfY2hhcjsKLSAJCX0KKwkJfQogI2VuZGlmIC8qIENPTkZJR19NQUdJQ19TWVNSUSAmJiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRSAqLwogCiAJCS8qIEEgcmVhbCBzZXJpYWwgbGluZSwgcmVjb3JkIHRoZSBjaGFyYWN0ZXIgYW5kIHN0YXR1cy4gICovCkBAIC0zMTcsNyArMzIxLDcgQEAKIAogCQlpZiAodWFwLT5wb3J0Lmlnbm9yZV9zdGF0dXNfbWFzayA9PSAweGZmIHx8CiAJCSAgICAocjEgJiB1YXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrKSA9PSAwKSB7Ci0JCSAgICAJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgZmxhZyk7CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGFnKTsKIAkJfQogCQlpZiAocjEgJiBSeF9PVlIpCiAJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKQEAgLTM0MSw3ICszNDUsNyBAQAogCXVhcC0+Y3VycmVnc1tSMV0gJj0gfihFWFRfSU5UX0VOQUIgfCBUeElOVF9FTkFCIHwgUnhJTlRfTUFTSyk7CiAJd3JpdGVfenNyZWcodWFwLCBSMSwgdWFwLT5jdXJyZWdzW1IxXSk7CiAJenNzeW5jKHVhcCk7Ci0JZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwgInBtejogcnggaXJxIGZsb29kICFcbiIpOworCXBtel9lcnJvcigicG16OiByeCBpcnEgZmxvb2QgIVxuIik7CiAJcmV0dXJuIHR0eTsKIH0KIApAQCAtNDcwLDQ3ICs0NzQsNDcgQEAKIAogCXVhcF9hID0gcG16X2dldF9wb3J0X0EodWFwKTsKIAl1YXBfYiA9IHVhcF9hLT5tYXRlOwotICAgICAgIAotICAgICAgIAlzcGluX2xvY2soJnVhcF9hLT5wb3J0LmxvY2spOworCisJc3Bpbl9sb2NrKCZ1YXBfYS0+cG9ydC5sb2NrKTsKIAlyMyA9IHJlYWRfenNyZWcodWFwX2EsIFIzKTsKIAogI2lmZGVmIERFQlVHX0hBUkQKIAlwbXpfZGVidWcoImlycSwgcjM6ICV4XG4iLCByMyk7CiAjZW5kaWYKLSAgICAgICAJLyogQ2hhbm5lbCBBICovCisJLyogQ2hhbm5lbCBBICovCiAJdHR5ID0gTlVMTDsKLSAgICAgICAJaWYgKHIzICYgKENIQUVYVCB8IENIQVR4SVAgfCBDSEFSeElQKSkgeworCWlmIChyMyAmIChDSEFFWFQgfCBDSEFUeElQIHwgQ0hBUnhJUCkpIHsKIAkJd3JpdGVfenNyZWcodWFwX2EsIFIwLCBSRVNfSF9JVVMpOwogCQl6c3N5bmModWFwX2EpOwkJCi0gICAgICAgCQlpZiAocjMgJiBDSEFFWFQpCi0gICAgICAgCQkJcG16X3N0YXR1c19oYW5kbGUodWFwX2EpOworCQlpZiAocjMgJiBDSEFFWFQpCisJCQlwbXpfc3RhdHVzX2hhbmRsZSh1YXBfYSk7CiAJCWlmIChyMyAmIENIQVJ4SVApCiAJCQl0dHkgPSBwbXpfcmVjZWl2ZV9jaGFycyh1YXBfYSk7Ci0gICAgICAgCQlpZiAocjMgJiBDSEFUeElQKQotICAgICAgIAkJCXBtel90cmFuc21pdF9jaGFycyh1YXBfYSk7Ci0JICAgICAgICByYyA9IElSUV9IQU5ETEVEOwotICAgICAgIAl9Ci0gICAgICAgCXNwaW5fdW5sb2NrKCZ1YXBfYS0+cG9ydC5sb2NrKTsKKwkJaWYgKHIzICYgQ0hBVHhJUCkKKwkJCXBtel90cmFuc21pdF9jaGFycyh1YXBfYSk7CisJCXJjID0gSVJRX0hBTkRMRUQ7CisJfQorCXNwaW5fdW5sb2NrKCZ1YXBfYS0+cG9ydC5sb2NrKTsKIAlpZiAodHR5ICE9IE5VTEwpCiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAKIAlpZiAodWFwX2ItPm5vZGUgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKLSAgICAgICAJc3Bpbl9sb2NrKCZ1YXBfYi0+cG9ydC5sb2NrKTsKKwlzcGluX2xvY2soJnVhcF9iLT5wb3J0LmxvY2spOwogCXR0eSA9IE5VTEw7CiAJaWYgKHIzICYgKENIQkVYVCB8IENIQlR4SVAgfCBDSEJSeElQKSkgewogCQl3cml0ZV96c3JlZyh1YXBfYiwgUjAsIFJFU19IX0lVUyk7CiAJCXpzc3luYyh1YXBfYik7Ci0gICAgICAgCQlpZiAocjMgJiBDSEJFWFQpCi0gICAgICAgCQkJcG16X3N0YXR1c19oYW5kbGUodWFwX2IpOwotICAgICAgIAkgICAgICAgCWlmIChyMyAmIENIQlJ4SVApCi0gICAgICAgCQkJdHR5ID0gcG16X3JlY2VpdmVfY2hhcnModWFwX2IpOwotICAgICAgIAkJaWYgKHIzICYgQ0hCVHhJUCkKLSAgICAgICAJCQlwbXpfdHJhbnNtaXRfY2hhcnModWFwX2IpOwotCSAgICAgICAJcmMgPSBJUlFfSEFORExFRDsKLSAgICAgICAJfQotICAgICAgIAlzcGluX3VubG9jaygmdWFwX2ItPnBvcnQubG9jayk7CisJCWlmIChyMyAmIENIQkVYVCkKKwkJCXBtel9zdGF0dXNfaGFuZGxlKHVhcF9iKTsKKwkJaWYgKHIzICYgQ0hCUnhJUCkKKwkJCXR0eSA9IHBtel9yZWNlaXZlX2NoYXJzKHVhcF9iKTsKKwkJaWYgKHIzICYgQ0hCVHhJUCkKKwkJCXBtel90cmFuc21pdF9jaGFycyh1YXBfYik7CisJCXJjID0gSVJRX0hBTkRMRUQ7CisJfQorCXNwaW5fdW5sb2NrKCZ1YXBfYi0+cG9ydC5sb2NrKTsKIAlpZiAodHR5ICE9IE5VTEwpCiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAKQEAgLTcxOCw3ICs3MjIsNyBAQAogCiAJCWlmIChaU19JU19BU0xFRVAodWFwKSkKIAkJCXJldHVybjsKLQkJLyogTk9URTogTm90IHN1YmplY3QgdG8gJ3RyYW5zbWl0dGVyIGFjdGl2ZScgcnVsZS4gICovIAorCQkvKiBOT1RFOiBOb3Qgc3ViamVjdCB0byAndHJhbnNtaXR0ZXIgYWN0aXZlJyBydWxlLiAqLwogCQl3cml0ZV96c3JlZyh1YXAsIFIxNSwgdWFwLT5jdXJyZWdzW1IxNV0pOwogCX0KIH0KQEAgLTc0OCw3ICs3NTIsNyBAQAogCWlmIChuZXdfcmVnICE9IHVhcC0+Y3VycmVnc1tSNV0pIHsKIAkJdWFwLT5jdXJyZWdzW1I1XSA9IG5ld19yZWc7CiAKLQkJLyogTk9URTogTm90IHN1YmplY3QgdG8gJ3RyYW5zbWl0dGVyIGFjdGl2ZScgcnVsZS4gICovIAorCQkvKiBOT1RFOiBOb3Qgc3ViamVjdCB0byAndHJhbnNtaXR0ZXIgYWN0aXZlJyBydWxlLiAqLwogCQlpZiAoWlNfSVNfQVNMRUVQKHVhcCkpCiAJCQlyZXR1cm47CiAJCXdyaXRlX3pzcmVnKHVhcCwgUjUsIHVhcC0+Y3VycmVnc1tSNV0pOwpAQCAtNzU3LDYgKzc2MSw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisKIC8qCiAgKiBUdXJuIHBvd2VyIG9uIG9yIG9mZiB0byB0aGUgU0NDIGFuZCBhc3NvY2lhdGVkIHN0dWZmCiAgKiAocG9ydCBkcml2ZXJzLCBtb2RlbSwgSVIgcG9ydCwgZXRjLikKQEAgLTc5Miw2ICs3OTgsMTUgQEAKIAlyZXR1cm4gZGVsYXk7CiB9CiAKKyNlbHNlCisKK3N0YXRpYyBpbnQgcG16X3NldF9zY2NfcG93ZXIoc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1YXAsIGludCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qICFDT05GSUdfUFBDX1BNQUMgKi8KKwogLyoKICAqIEZpeFplcm9CdWcuLi4uV29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBTQ0MgcmVjZXZpbmcgY2hhbm5lbC4KICAqIEluc3BpcmVkIGZyb20gRGFyd2luIGNvZGUsIDE1IFNlcHQuIDIwMDAgIC1EYW5NCkBAIC05MDgsNyArOTIzLDYgQEAKIAkvKiBSZW1lbWJlciBzdGF0dXMgZm9yIERDRC9DVFMgY2hhbmdlcyAqLwogCXVhcC0+cHJldl9zdGF0dXMgPSByZWFkX3pzcmVnKHVhcCwgUjApOwogCi0KIAlyZXR1cm4gcHdyX2RlbGF5OwogfQogCkBAIC05NTUsOSArOTY5LDkgQEAKIAl9CQogCiAJcG16X2dldF9wb3J0X0EodWFwKS0+ZmxhZ3MgfD0gUE1BQ1pJTE9HX0ZMQUdfSVNfSVJRX09OOwotCWlmIChyZXF1ZXN0X2lycSh1YXAtPnBvcnQuaXJxLCBwbXpfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgIlBvd2VyTWFjIFppbG9nIiwgdWFwKSkgewotCQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LAotCQkJIlVuYWJsZSB0byByZWdpc3RlciB6cyBpbnRlcnJ1cHQgaGFuZGxlci5cbiIpOworCWlmIChyZXF1ZXN0X2lycSh1YXAtPnBvcnQuaXJxLCBwbXpfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCSJTQ0MiLCB1YXApKSB7CisJCXBtel9lcnJvcigiVW5hYmxlIHRvIHJlZ2lzdGVyIHpzIGludGVycnVwdCBoYW5kbGVyLlxuIik7CiAJCXBtel9zZXRfc2NjX3Bvd2VyKHVhcCwgMCk7CiAJCW11dGV4X3VubG9jaygmcG16X2lycV9tdXRleCk7CiAJCXJldHVybiAtRU5YSU87CkBAIC05ODMsNyArOTk3LDcgQEAKIAlpZiAoIVpTX0lTX0VYVENMSyh1YXApKQogCQl1YXAtPmN1cnJlZ3NbUjFdIHw9IEVYVF9JTlRfRU5BQjsKIAl3cml0ZV96c3JlZyh1YXAsIFIxLCB1YXAtPmN1cnJlZ3NbUjFdKTsKLSAgICAgICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCXBtel9kZWJ1ZygicG16OiBzdGFydHVwKCkgZG9uZS5cbiIpOwogCkBAIC0xMDAzLDcgKzEwMTcsNyBAQAogCW11dGV4X2xvY2soJnBtel9pcnFfbXV0ZXgpOwogCiAJLyogUmVsZWFzZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwotICAgICAgIAlmcmVlX2lycSh1YXAtPnBvcnQuaXJxLCB1YXApOworCWZyZWVfaXJxKHVhcC0+cG9ydC5pcnEsIHVhcCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMDUxLDcgKzEwNjUsNiBAQAogewogCWludCBicmc7CiAKLQogCS8qIFN3aXRjaCB0byBleHRlcm5hbCBjbG9ja2luZyBmb3IgSXJEQSBoaWdoIGNsb2NrIHJhdGVzLiBUaGF0CiAJICogY29kZSBjb3VsZCBiZSByZS11c2VkIGZvciBNaWRpIGludGVyZmFjZXMgd2l0aCBkaWZmZXJlbnQKIAkgKiBtdWx0aXBsaWVycwpAQCAtMTE5OCw3ICsxMjExLDcgQEAKIAl3aGlsZSAoKHJlYWRfenNyZWcodWFwLCBSMCkgJiBUeF9CVUZfRU1QKSA9PSAwCiAJICAgICAgIHx8IChyZWFkX3pzcmVnKHVhcCwgUjEpICYgQUxMX1NOVCkgPT0gMCkgewogCQlpZiAoLS10IDw9IDApIHsKLQkJCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsICJ0cmFuc21pdHRlciBkaWRuJ3QgZHJhaW5cbiIpOworCQkJcG16X2Vycm9yKCJ0cmFuc21pdHRlciBkaWRuJ3QgZHJhaW5cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJCXVkZWxheSgxMCk7CkBAIC0xMjE0LDcgKzEyMjcsNyBAQAogCQlyZWFkX3pzZGF0YSh1YXApOwogCQltZGVsYXkoMTApOwogCQlpZiAoLS10IDw9IDApIHsKLQkJCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsICJyZWNlaXZlciBkaWRuJ3QgZHJhaW5cbiIpOworCQkJcG16X2Vycm9yKCJyZWNlaXZlciBkaWRuJ3QgZHJhaW5cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTIyMywyMCArMTIzNiwxOSBAQAogCXVhcC0+Y3VycmVnc1tSNV0gfD0gRFRSOwogCXdyaXRlX3pzcmVnKHVhcCwgUjUsIHVhcC0+Y3VycmVnc1tSNV0pOwogCXpzc3luYyh1YXApOwotICAgICAgIAltZGVsYXkoMSk7CisJbWRlbGF5KDEpOwogCiAJLyogU3dpdGNoIFNDQyB0byAxOTIwMCAqLwogCXBtel9jb252ZXJ0X3RvX3pzKHVhcCwgQ1M4LCAwLCAxOTIwMCk7CQkKIAlwbXpfbG9hZF96c3JlZ3ModWFwLCB1YXAtPmN1cnJlZ3MpOwotICAgICAgIAltZGVsYXkoMSk7CisJbWRlbGF5KDEpOwogCiAJLyogV3JpdGUgZ2V0X3ZlcnNpb24gY29tbWFuZCBieXRlICovCiAJd3JpdGVfenNkYXRhKHVhcCwgMSk7CiAJdCA9IDUwMDA7CiAJd2hpbGUgKChyZWFkX3pzcmVnKHVhcCwgUjApICYgUnhfQ0hfQVYpID09IDApIHsKIAkJaWYgKC0tdCA8PSAwKSB7Ci0JCQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LAotCQkJCSJpcmRhX3NldHVwIHRpbWVkIG91dCBvbiBnZXRfdmVyc2lvbiBieXRlXG4iKTsKKwkJCXBtel9lcnJvcigiaXJkYV9zZXR1cCB0aW1lZCBvdXQgb24gZ2V0X3ZlcnNpb24gYnl0ZVxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQl1ZGVsYXkoMTApOwpAQCAtMTI0NCw4ICsxMjU2LDcgQEAKIAl2ZXJzaW9uID0gcmVhZF96c2RhdGEodWFwKTsKIAogCWlmICh2ZXJzaW9uIDwgNCkgewotCQlkZXZfaW5mbygmdWFwLT5kZXYtPm9mZGV2LmRldiwgIklyREE6IGRvbmdsZSB2ZXJzaW9uICVkIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgdmVyc2lvbik7CisJCXBtel9pbmZvKCJJckRBOiBkb25nbGUgdmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9uKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMjU0LDE4ICsxMjY1LDE2IEBACiAJdCA9IDUwMDA7CiAJd2hpbGUgKChyZWFkX3pzcmVnKHVhcCwgUjApICYgUnhfQ0hfQVYpID09IDApIHsKIAkJaWYgKC0tdCA8PSAwKSB7Ci0JCQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LAotCQkJCSJpcmRhX3NldHVwIHRpbWVkIG91dCBvbiBzcGVlZCBtb2RlIGJ5dGVcbiIpOworCQkJcG16X2Vycm9yKCJpcmRhX3NldHVwIHRpbWVkIG91dCBvbiBzcGVlZCBtb2RlIGJ5dGVcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJdWRlbGF5KDEwKTsKIAl9CiAJdCA9IHJlYWRfenNkYXRhKHVhcCk7CiAJaWYgKHQgIT0gY21kYnl0ZSkKLQkJZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwKLQkJCSJpcmRhX3NldHVwIHNwZWVkIG1vZGUgYnl0ZSA9ICV4ICgleClcbiIsIHQsIGNtZGJ5dGUpOworCQlwbXpfZXJyb3IoImlyZGFfc2V0dXAgc3BlZWQgbW9kZSBieXRlID0gJXggKCV4KVxuIiwgdCwgY21kYnl0ZSk7CiAKLQlkZXZfaW5mbygmdWFwLT5kZXYtPm9mZGV2LmRldiwgIklyREEgc2V0dXAgZm9yICVsZCBicHMsIGRvbmdsZSB2ZXJzaW9uOiAlZFxuIiwKKwlwbXpfaW5mbygiSXJEQSBzZXR1cCBmb3IgJWxkIGJwcywgZG9uZ2xlIHZlcnNpb246ICVkXG4iLAogCQkgKmJhdWQsIHZlcnNpb24pOwogCiAJKHZvaWQpcmVhZF96c2RhdGEodWFwKTsKQEAgLTE0MTUsNyArMTQyNCw3IEBACiAJd3JpdGVfenNkYXRhKHVhcCwgYyk7CiB9CiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgKi8KIAogc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBwbXpfcG9wcyA9IHsKIAkudHhfZW1wdHkJPQlwbXpfdHhfZW1wdHksCkBAIC0xNDQwLDYgKzE0NDksOCBAQAogI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisKIC8qCiAgKiBTZXR1cCBvbmUgcG9ydCBzdHJ1Y3R1cmUgYWZ0ZXIgcHJvYmluZywgSFcgaXMgZG93biBhdCB0aGlzIHBvaW50LAogICogVW5saWtlIHN1bnppbG9nLCB3ZSBkb24ndCBuZWVkIHRvIHByZS1pbml0IHRoZSBzcGlubG9jayBhcyB3ZSBkb24ndApAQCAtMTQ2Myw3ICsxNDc0LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJdWFwLT5wb3J0Lm1hcGJhc2UgPSByX3BvcnRzLnN0YXJ0OwogCXVhcC0+cG9ydC5tZW1iYXNlID0gaW9yZW1hcCh1YXAtPnBvcnQubWFwYmFzZSwgMHgxMDAwKTsKLSAgICAgIAorCiAJdWFwLT5jb250cm9sX3JlZyA9IHVhcC0+cG9ydC5tZW1iYXNlOwogCXVhcC0+ZGF0YV9yZWcgPSB1YXAtPmNvbnRyb2xfcmVnICsgMHgxMDsKIAkKQEAgLTE1OTAsNyArMTYwMSw3IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgdXBvbiBtYXRjaCB3aXRoIGFuIGVzY2Mgbm9kZSBpbiB0aGUgZGV2aXZlLXRyZWUuCisgKiBDYWxsZWQgdXBvbiBtYXRjaCB3aXRoIGFuIGVzY2Mgbm9kZSBpbiB0aGUgZGV2aWNlLXRyZWUuCiAgKi8KIHN0YXRpYyBpbnQgcG16X2F0dGFjaChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKQEAgLTE4MTIsNyArMTgyMyw3IEBACiAJCXBtel9wb3J0c1tjb3VudF0ubm9kZQkJPSBub2RlX2E7CiAJCXBtel9wb3J0c1tjb3VudCsxXS5ub2RlCQk9IG5vZGVfYjsKIAkJcG16X3BvcnRzW2NvdW50XS5wb3J0LmxpbmUJPSBjb3VudDsKLQkJcG16X3BvcnRzW2NvdW50KzFdLnBvcnQubGluZSAgIAk9IGNvdW50KzE7CisJCXBtel9wb3J0c1tjb3VudCsxXS5wb3J0LmxpbmUJPSBjb3VudCsxOwogCiAJCS8qCiAJCSAqIFNldHVwIHRoZSBwb3J0cyBmb3IgcmVhbApAQCAtMTgzNiw2ICsxODQ3LDg4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNlbHNlCisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjY19hX3BkZXYsIHNjY19iX3BkZXY7CisKK3N0YXRpYyBpbnQgX19pbml0IHBtel9pbml0X3BvcnQoc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1YXApCit7CisJc3RydWN0IHJlc291cmNlICpyX3BvcnRzOworCWludCBpcnE7CisKKwlyX3BvcnRzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHVhcC0+bm9kZSwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEodWFwLT5ub2RlLCAwKTsKKwlpZiAoIXJfcG9ydHMgfHwgIWlycSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1YXAtPnBvcnQubWFwYmFzZSAgPSByX3BvcnRzLT5zdGFydDsKKwl1YXAtPnBvcnQubWVtYmFzZSAgPSAodW5zaWduZWQgY2hhciBfX2lvbWVtICopIHJfcG9ydHMtPnN0YXJ0OworCXVhcC0+cG9ydC5pb3R5cGUgICA9IFVQSU9fTUVNOworCXVhcC0+cG9ydC5pcnEgICAgICA9IGlycTsKKwl1YXAtPnBvcnQudWFydGNsayAgPSBaU19DTE9DSzsKKwl1YXAtPnBvcnQuZmlmb3NpemUgPSAxOworCXVhcC0+cG9ydC5vcHMgICAgICA9ICZwbXpfcG9wczsKKwl1YXAtPnBvcnQudHlwZSAgICAgPSBQT1JUX1BNQUNfWklMT0c7CisJdWFwLT5wb3J0LmZsYWdzICAgID0gMDsKKworCXVhcC0+Y29udHJvbF9yZWcgICA9IHVhcC0+cG9ydC5tZW1iYXNlOworCXVhcC0+ZGF0YV9yZWcgICAgICA9IHVhcC0+Y29udHJvbF9yZWcgKyA0OworCXVhcC0+cG9ydF90eXBlICAgICA9IDA7CisKKwlwbXpfY29udmVydF90b196cyh1YXAsIENTOCwgMCwgOTYwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgcG16X3Byb2JlKHZvaWQpCit7CisJaW50IGVycjsKKworCXBtel9wb3J0c19jb3VudCA9IDA7CisKKwlwbXpfcG9ydHNbMF0ubWF0ZSAgICAgID0gJnBtel9wb3J0c1sxXTsKKwlwbXpfcG9ydHNbMF0ucG9ydC5saW5lID0gMDsKKwlwbXpfcG9ydHNbMF0uZmxhZ3MgICAgID0gUE1BQ1pJTE9HX0ZMQUdfSVNfQ0hBTk5FTF9BOworCXBtel9wb3J0c1swXS5ub2RlICAgICAgPSAmc2NjX2FfcGRldjsKKwllcnIgPSBwbXpfaW5pdF9wb3J0KCZwbXpfcG9ydHNbMF0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcG16X3BvcnRzX2NvdW50Kys7CisKKwlwbXpfcG9ydHNbMV0ubWF0ZSAgICAgID0gJnBtel9wb3J0c1swXTsKKwlwbXpfcG9ydHNbMV0ucG9ydC5saW5lID0gMTsKKwlwbXpfcG9ydHNbMV0uZmxhZ3MgICAgID0gMDsKKwlwbXpfcG9ydHNbMV0ubm9kZSAgICAgID0gJnNjY19iX3BkZXY7CisJZXJyID0gcG16X2luaXRfcG9ydCgmcG16X3BvcnRzWzFdKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXBtel9wb3J0c19jb3VudCsrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBtel9kaXNwb3NlX3BvcnQoc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1YXApCit7CisJbWVtc2V0KHVhcCwgMCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X3BtYWNfcG9ydCkpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwbXpfYXR0YWNoKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG16X3BvcnRzX2NvdW50OyBpKyspCisJCWlmIChwbXpfcG9ydHNbaV0ubm9kZSA9PSBwZGV2KQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHBtel9kZXRhY2goc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qICFDT05GSUdfUFBDX1BNQUMgKi8KKwogI2lmZGVmIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX0NPTlNPTEUKIAogc3RhdGljIHZvaWQgcG16X2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KTsKQEAgLTE4OTYsMjggKzE5ODksNDEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKwogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcG16X21hdGNoW10gPSAKIHsKIAl7Ci0JLm5hbWUgCQk9ICJjaC1hIiwKKwkubmFtZQkJPSAiY2gtYSIsCiAJfSwKIAl7Ci0JLm5hbWUgCQk9ICJjaC1iIiwKKwkubmFtZQkJPSAiY2gtYiIsCiAJfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFIChvZiwgcG16X21hdGNoKTsKIAotc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgcG16X2RyaXZlciA9IAoteworc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgcG16X2RyaXZlciA9IHsKIAkubmFtZSAJCT0gInBtYWNfemlsb2ciLAogCS5tYXRjaF90YWJsZQk9IHBtel9tYXRjaCwKIAkucHJvYmUJCT0gcG16X2F0dGFjaCwKIAkucmVtb3ZlCQk9IHBtel9kZXRhY2gsCiAJLnN1c3BlbmQJPSBwbXpfc3VzcGVuZCwKLSAgICAgICAJLnJlc3VtZQkJPSBwbXpfcmVzdW1lLAorCS5yZXN1bWUJCT0gcG16X3Jlc3VtZSwKIH07CiAKKyNlbHNlCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtel9kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2V4aXRfcChwbXpfZGV0YWNoKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gInNjYyIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworI2VuZGlmIC8qICFDT05GSUdfUFBDX1BNQUMgKi8KKwogc3RhdGljIGludCBfX2luaXQgaW5pdF9wbXoodm9pZCkKIHsKIAlpbnQgcmMsIGk7CkBAIC0xOTUyLDE5ICsyMDU4LDI3IEBACiAJCQlwbXpfZGlzcG9zZV9wb3J0KCZwbXpfcG9ydHNbaV0pOwogCQlyZXR1cm4gcmM7CiAJfQotCQorCiAJLyoKIAkgKiBUaGVuIHdlIHJlZ2lzdGVyIHRoZSBtYWNpbyBkcml2ZXIgaXRzZWxmCiAJICovCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJcmV0dXJuIG1hY2lvX3JlZ2lzdGVyX2RyaXZlcigmcG16X2RyaXZlcik7CisjZWxzZQorCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnBtel9kcml2ZXIsIHBtel9hdHRhY2gpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3Bteih2b2lkKQogewogCWludCBpOwogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJLyogR2V0IHJpZCBvZiBtYWNpby1kcml2ZXIgKGRldGFjaCBmcm9tIG1hY2lvKSAqLwogCW1hY2lvX3VucmVnaXN0ZXJfZHJpdmVyKCZwbXpfZHJpdmVyKTsKKyNlbHNlCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBtel9kcml2ZXIpOworI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgcG16X3BvcnRzX2NvdW50OyBpKyspIHsKIAkJc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1cG9ydCA9ICZwbXpfcG9ydHNbaV07CkBAIC0yMDMxLDEwICsyMTQ1LDEwIEBACiAJLyoKIAkgKiBYU2VydmUncyBkZWZhdWx0IHRvIDU3NjAwIGJwcwogCSAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMxLDEiKQotCSAgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMxLDIiKQotCSAgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCi0JIAliYXVkID0gNTc2MDA7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMSIpCisJICAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMiIpCisJICAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKKwkJYmF1ZCA9IDU3NjAwOwogCiAJLyoKIAkgKiBDaGVjayB3aGV0aGVyIGFuIGludmFsaWQgdWFydCBudW1iZXIgaGFzIGJlZW4gc3BlY2lmaWVkLCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaCBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaAppbmRleCBmNmU3N2YxLi5jYmMzNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5oCkBAIC0xLDcgKzEsMTUgQEAKICNpZm5kZWYgX19QTUFDX1pJTE9HX0hfXwogI2RlZmluZSBfX1BNQUNfWklMT0dfSF9fCiAKLSNkZWZpbmUgcG16X2RlYnVnKGZtdCxhcmcuLi4pCWRldl9kYmcoJnVhcC0+ZGV2LT5vZmRldi5kZXYsIGZtdCwgIyMgYXJnKQorI2lmZGVmIENPTkZJR19QUENfUE1BQworI2RlZmluZSBwbXpfZGVidWcoZm10LCBhcmcuLi4pCWRldl9kYmcoJnVhcC0+ZGV2LT5vZmRldi5kZXYsIGZtdCwgIyMgYXJnKQorI2RlZmluZSBwbXpfZXJyb3IoZm10LCBhcmcuLi4pCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsIGZtdCwgIyMgYXJnKQorI2RlZmluZSBwbXpfaW5mbyhmbXQsIGFyZy4uLikJZGV2X2luZm8oJnVhcC0+ZGV2LT5vZmRldi5kZXYsIGZtdCwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgcG16X2RlYnVnKGZtdCwgYXJnLi4uKQlkZXZfZGJnKCZ1YXAtPm5vZGUtPmRldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHBtel9lcnJvcihmbXQsIGFyZy4uLikJZGV2X2VycigmdWFwLT5ub2RlLT5kZXYsIGZtdCwgIyMgYXJnKQorI2RlZmluZSBwbXpfaW5mbyhmbXQsIGFyZy4uLikJZGV2X2luZm8oJnVhcC0+bm9kZS0+ZGV2LCBmbXQsICMjIGFyZykKKyNlbmRpZgogCiAvKgogICogQXQgbW9zdCAyIEVTQ0NzIHdpdGggMiBwb3J0cyBlYWNoCkBAIC0xNyw2ICsyNSw3IEBACiAJc3RydWN0IHVhcnRfcG9ydAkJcG9ydDsKIAlzdHJ1Y3QgdWFydF9wbWFjX3BvcnQJCSptYXRlOwogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJLyogbWFjaW9fZGV2IGZvciB0aGUgZXNjYyBob2xkaW5nIHRoaXMgcG9ydCAobWF5YmUgYmUgbnVsbCBvbgogCSAqIGVhcmx5IGluaXRlZCBwb3J0KQogCSAqLwpAQCAtMjUsNiArMzQsOSBAQAogCSAqIG9mICJlc2NjIiBub2RlIChpZS4gY2gtYSBvciBjaC1iKQogCSAqLwogCXN0cnVjdCBkZXZpY2Vfbm9kZQkJKm5vZGU7CisjZWxzZQorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpub2RlOworI2VuZGlmCiAKIAkvKiBQb3J0IHR5cGUgYXMgb2J0YWluZWQgZnJvbSBkZXZpY2UgdHJlZSAoSVJEQSwgbW9kZW0sIC4uLikgKi8KIAlpbnQJCQkJcG9ydF90eXBlOwpAQCAtNTUsMTAgKzY3LDEyIEBACiAJdm9sYXRpbGUgdTgJCQlfX2lvbWVtICpjb250cm9sX3JlZzsKIAl2b2xhdGlsZSB1OAkJCV9faW9tZW0gKmRhdGFfcmVnOwogCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJdW5zaWduZWQgaW50CQkJdHhfZG1hX2lycTsKIAl1bnNpZ25lZCBpbnQJCQlyeF9kbWFfaXJxOwogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzCV9faW9tZW0gKnR4X2RtYV9yZWdzOwogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzCV9faW9tZW0gKnJ4X2RtYV9yZWdzOworI2VuZGlmCiAKIAlzdHJ1Y3Qga3Rlcm1pb3MJCQl0ZXJtaW9zX2NhY2hlOwogfTsKQEAgLTExMyw3ICsxMjcsNyBAQAogI2RlZmluZSBCUkdfVE9fQlBTKGJyZywgZnJlcSkgKChmcmVxKSAvIDIgLyAoKGJyZykgKyAyKSkKICNkZWZpbmUgQlBTX1RPX0JSRyhicHMsIGZyZXEpICgoKChmcmVxKSArIChicHMpKSAvICgyICogKGJwcykpKSAtIDIpCiAKLSNkZWZpbmUgWlNfQ0xPQ0sgICAgICAgICAzNjg2NDAwIAkvKiBaODUzMCBSVHhDIGlucHV0IGNsb2NrIHJhdGUgKi8KKyNkZWZpbmUgWlNfQ0xPQ0sgICAgICAgICAzNjg2NDAwCS8qIFo4NTMwIFJUeEMgaW5wdXQgY2xvY2sgcmF0ZSAqLwogCiAvKiBUaGUgWmlsb2cgcmVnaXN0ZXIgc2V0ICovCiAKQEAgLTE3MSw3ICsxODUsNyBAQAogCiAvKiBXcml0ZSBSZWdpc3RlciAzICovCiAKLSNkZWZpbmUJUnhFTkFCTEUgICAgICAgCTB4MQkvKiBSeCBFbmFibGUgKi8KKyNkZWZpbmUJUnhFTkFCTEUJMHgxCS8qIFJ4IEVuYWJsZSAqLwogI2RlZmluZQlTWU5DX0xfSU5ICTB4MgkvKiBTeW5jIENoYXJhY3RlciBMb2FkIEluaGliaXQgKi8KICNkZWZpbmUJQUREX1NNCQkweDQJLyogQWRkcmVzcyBTZWFyY2ggTW9kZSAoU0RMQykgKi8KICNkZWZpbmUJUnhDUkNfRU5BQgkweDgJLyogUnggQ1JDIEVuYWJsZSAqLwpAQCAtMTg1LDcgKzE5OSw3IEBACiAKIC8qIFdyaXRlIFJlZ2lzdGVyIDQgKi8KIAotI2RlZmluZQlQQVJfRU5BQiAgICAgICAJMHgxCS8qIFBhcml0eSBFbmFibGUgKi8KKyNkZWZpbmUJUEFSX0VOQUIJMHgxCS8qIFBhcml0eSBFbmFibGUgKi8KICNkZWZpbmUJUEFSX0VWRU4JMHgyCS8qIFBhcml0eSBFdmVuL09kZCogKi8KIAogI2RlZmluZQlTWU5DX0VOQUIJMAkvKiBTeW5jIE1vZGVzIEVuYWJsZSAqLwpAQCAtMjEwLDcgKzIyNCw3IEBACiAjZGVmaW5lCVR4Q1JDX0VOQUIJMHgxCS8qIFR4IENSQyBFbmFibGUgKi8KICNkZWZpbmUJUlRTCQkweDIJLyogUlRTICovCiAjZGVmaW5lCVNETENfQ1JDCTB4NAkvKiBTRExDL0NSQy0xNiAqLwotI2RlZmluZQlUeEVOQUJMRSAgICAgICAJMHg4CS8qIFR4IEVuYWJsZSAqLworI2RlZmluZQlUeEVOQUJMRQkweDgJLyogVHggRW5hYmxlICovCiAjZGVmaW5lCVNORF9CUksJCTB4MTAJLyogU2VuZCBCcmVhayAqLwogI2RlZmluZQlUeDUJCTB4MAkvKiBUeCA1IGJpdHMgKG9yIGxlc3MpL2NoYXJhY3RlciAqLwogI2RlZmluZQlUeDcJCTB4MjAJLyogVHggNyBiaXRzL2NoYXJhY3RlciAqLwpAQCAtMzcyLDExICszODYsMTEgQEAKICNkZWZpbmUgWlNfVFhfQUNUSVZFKFVQKQkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfVFhfQUNUSVZFKQogI2RlZmluZSBaU19XQU5UU19NT0RFTV9TVEFUVVMoVVApCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX01PREVNX1NUQVRVUykKICNkZWZpbmUgWlNfSVNfSVJEQShVUCkJCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JUkRBKQotI2RlZmluZSBaU19JU19JTlRNT0RFTShVUCkJICAgICAgIAkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JTlRNT0RFTSkKKyNkZWZpbmUgWlNfSVNfSU5UTU9ERU0oVVApCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JTlRNT0RFTSkKICNkZWZpbmUgWlNfSEFTX0RNQShVUCkJCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19IQVNfRE1BKQotI2RlZmluZSBaU19JU19BU0xFRVAoVVApICAgICAgIAkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfSVNfQVNMRUVQKQotI2RlZmluZSBaU19JU19PUEVOKFVQKSAgICAgICAJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX09QRU4pCi0jZGVmaW5lIFpTX0lTX0lSUV9PTihVUCkgICAgICAgCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JUlFfT04pCi0jZGVmaW5lIFpTX0lTX0VYVENMSyhVUCkgICAgICAgCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19FWFRDTEspCisjZGVmaW5lIFpTX0lTX0FTTEVFUChVUCkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0FTTEVFUCkKKyNkZWZpbmUgWlNfSVNfT1BFTihVUCkJCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19PUEVOKQorI2RlZmluZSBaU19JU19JUlFfT04oVVApCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19JUlFfT04pCisjZGVmaW5lIFpTX0lTX0VYVENMSyhVUCkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0VYVENMSykKIAogI2VuZGlmIC8qIF9fUE1BQ19aSUxPR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKaW5kZXggOTU0MjFmYS4uZTkxZGI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKQEAgLTY5NiwxMSArNjk2LDExIEBACiAJCWluZm8tPm11bHRpID0gaW5mby0+cXVpcmstPm11bHRpOwogCiAJaWYgKGluZm8tPm11bHRpID4gMSkKLQkJbXVsdGlfY29uZmlnKGxpbmspOworCQlpID0gbXVsdGlfY29uZmlnKGxpbmspOwogCWVsc2UKLQkJc2ltcGxlX2NvbmZpZyhsaW5rKTsKKwkJaSA9IHNpbXBsZV9jb25maWcobGluayk7CiAKLQlpZiAoaW5mby0+bmRldiA9PSAwKQorCWlmIChpIHx8IGluZm8tPm5kZXYgPT0gMCkKIAkJZ290byBmYWlsZWQ7CiAKIAkvKgpAQCAtNzE1LDYgKzcxNSw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWxlZDoKKwlkZXZfd2FybigmbGluay0+ZGV2LCAic2VyaWFsX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZVxuIik7CiAJc2VyaWFsX3JlbW92ZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKaW5kZXggMGVmY2RlZC4uZjdkMjU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKQEAgLTUxOCwzNCArNTE4LDYgQEAKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmZmZTgwKQogCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDEgPyAxIDogMDsgLyogU0NJICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDAwMDE1MCkKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDUERSKSYweDEwID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0MDAwMTQwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IFNDSUYwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDQgPyAxIDogMDsgLyogSVJEQSAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IFNDSUYyKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JICByZXR1cm4gc2NpX2luKHBvcnQsU0N4U1IpJjB4MDAxMCA/IDEgOiAwOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDQzMDAwMCkKLQkJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ3hTUikgJiAweDAwMDMgPyAxIDogMDsKLQllbHNlIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQ0MzgwMDApCi0JCXJldHVybiBzY2lfaW4ocG9ydCwgU0N4U1IpICYgMHgwMDAzID8gMSA6IDA7CiAJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApICB8fCBcCkBAIC01NTgsMjA3ICs1MzAsMTcgQEAKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQogCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMSkmMHgwMSA/IDEgOiAwOyAvKiBTQ0kgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTgwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmU4MDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpJjB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTRiMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTRjMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTRkMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTYwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNjEwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU2MjAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMjAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUzMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NikKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGMCAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkYihQU0RSKSAmIDB4MDIgPyAxIDogMDsgLyogU0NJRjAgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoUEFEUikgJiAweDQwID8gMSA6IDA7IC8qIFNDSUYxICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFBXRFIpICYgMHgwNCA/IDEgOiAwOyAvKiBTQ0lGMiAqLwotCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0gICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjApICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUYwICovCi0gICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjEpICYgMHgwMDIwID8gMSA6IDA7IC8qIFNDSUYxICovCi0gICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMjAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYyICovCi0gICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlMzAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYzICovCi0gICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlNDAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjQpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUY0ICovCi0gICAgICAgIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTRlNTAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjUpICYgMHgwMDA4ID8gMSA6IDA7IC8qIFNDSUY1ICovCi0gICAgICAgIHJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQotIyAgZGVmaW5lIFNDRlNSICAgIDB4MDAxMAotIyAgZGVmaW5lIFNDQVNTUiAgIDB4MDAxNAotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRikKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KChwb3J0LT5tYXBiYXNlICsgU0NGU1IpKSAgJiBTQ0lGX0JSSyA/IDEgOiAwOwotCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRkEpCi0JCXJldHVybiBfX3Jhd19yZWFkdygocG9ydC0+bWFwYmFzZSArIFNDQVNTUikpICYgU0NJRl9CUksgPyAxIDogMDsKLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0gICAgICAgICByZXR1cm4gc2NpX2luKHBvcnQsIFNDU1BUUikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLX0KICNlbGlmIGRlZmluZWQoX19IODMwMEhfXykgfHwgZGVmaW5lZChfX0g4MzAwU19fKQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWludCBjaCA9IChwb3J0LT5tYXBiYXNlIC0gU01SMCkgPj4gMzsKIAlyZXR1cm4gKEg4MzAwX1NDSV9EUihjaCkgJiBoODMwMF9zY2lfcGluc1tjaF0ucngpID8gMSA6IDA7CiB9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpCisjZWxzZSAvKiBkZWZhdWx0IGNhc2UgZm9yIG5vbi1TQ0kgcHJvY2Vzc29ycyAqLwogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwODAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTEwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRi9JUkRBICovCi0KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmOTIzMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmY5MjQwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZjkyNTAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWEwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYjAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVjMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWQwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlZTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFI0KSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVmMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjUpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU4MDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTg4MDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlOTAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU5ODAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSkKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVBMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUE4MDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQjAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVCODAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotI2VuZGlmCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmODQwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGY4NDEwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4Zjg0MjAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZjMzAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmM0MDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzUwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZjNjAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvaW50Yy5jIGIvZHJpdmVycy9zaC9pbnRjLmMKaW5kZXggZDVkN2YyMy4uM2E1YTE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9pbnRjLmMKKysrIGIvZHJpdmVycy9zaC9pbnRjLmMKQEAgLTI1OSw2ICsyNTksNDMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkICgqaW50Y19lbmFibGVfbm9wcmlvX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJCQl2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyksCisJCQkJCXVuc2lnbmVkIGludCBpcnEpID0geworCVtNT0RFX0VOQUJMRV9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX01BU0tfUkVHXSA9IGludGNfbW9kZV96ZXJvLAorCVtNT0RFX0RVQUxfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKKwlbTU9ERV9QUklPX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfUENMUl9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorfTsKKworc3RhdGljIHZvaWQgaW50Y19lbmFibGVfZGlzYWJsZShzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQl1bnNpZ25lZCBsb25nIGhhbmRsZSwgaW50IGRvX2VuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaW50IGNwdTsKKwl2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCSAgIHZvaWQgKCopKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpLAorCQkgICB1bnNpZ25lZCBpbnQpOworCisJaWYgKGRvX2VuYWJsZSkgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IFNNUF9OUihkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSk7IGNwdSsrKSB7CisJCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9FKGhhbmRsZSksIGNwdSk7CisJCQlmbiA9IGludGNfZW5hYmxlX25vcHJpb19mbnNbX0lOVENfTU9ERShoYW5kbGUpXTsKKwkJCWZuKGFkZHIsIGhhbmRsZSwgaW50Y19yZWdfZm5zW19JTlRDX0ZOKGhhbmRsZSldLCAwKTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpKTsgY3B1KyspIHsKKwkJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0QoaGFuZGxlKSwgY3B1KTsKKwkJCWZuID0gaW50Y19kaXNhYmxlX2Zuc1tfSU5UQ19NT0RFKGhhbmRsZSldOworCQkJZm4oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNbX0lOVENfRk4oaGFuZGxlKV0sIDApOworCQl9CisJfQorfQorCiBzdGF0aWMgaW50IGludGNfc2V0X3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQogewogCXJldHVybiAwOyAvKiBhbGxvdyB3YWtldXAsIGJ1dCBzZXR1cCBoYXJkd2FyZSBpbiBpbnRjX3N1c3BlbmQoKSAqLwpAQCAtNDAwLDExICs0MzcsMTEgQEAKIHN0YXRpYyBpbnRjX2VudW0gX19pbml0IGludGNfZ3JwX2lkKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCiAJCQkJICAgIGludGNfZW51bSBlbnVtX2lkKQogewotCXN0cnVjdCBpbnRjX2dyb3VwICpnID0gZGVzYy0+Z3JvdXBzOworCXN0cnVjdCBpbnRjX2dyb3VwICpnID0gZGVzYy0+aHcuZ3JvdXBzOwogCXVuc2lnbmVkIGludCBpLCBqOwogCi0JZm9yIChpID0gMDsgZyAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9ncm91cHM7IGkrKykgewotCQlnID0gZGVzYy0+Z3JvdXBzICsgaTsKKwlmb3IgKGkgPSAwOyBnICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPmh3Lm5yX2dyb3VwczsgaSsrKSB7CisJCWcgPSBkZXNjLT5ody5ncm91cHMgKyBpOwogCiAJCWZvciAoaiA9IDA7IGctPmVudW1faWRzW2pdOyBqKyspIHsKIAkJCWlmIChnLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQpAQCAtNDE3LDE5ICs0NTQsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKLQkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBfaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgIGludGNfZW51bSBlbnVtX2lkLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgKnJlZ19pZHgsCisJCQkJCSAgIHVuc2lnbmVkIGludCAqZmxkX2lkeCkKIHsKLQlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbXIgPSBkZXNjLT5tYXNrX3JlZ3M7Ci0JdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlOworCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPmh3Lm1hc2tfcmVnczsKKwl1bnNpZ25lZCBpbnQgZm4sIG1vZGU7CiAJdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7CiAKLQlmb3IgKGkgPSAwOyBtciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9tYXNrX3JlZ3M7IGkrKykgewotCQltciA9IGRlc2MtPm1hc2tfcmVncyArIGk7CisJd2hpbGUgKG1yICYmIGVudW1faWQgJiYgKnJlZ19pZHggPCBkZXNjLT5ody5ucl9tYXNrX3JlZ3MpIHsKKwkJbXIgPSBkZXNjLT5ody5tYXNrX3JlZ3MgKyAqcmVnX2lkeDsKIAotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKLQkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJZm9yICg7ICpmbGRfaWR4IDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyAoKmZsZF9pZHgpKyspIHsKKwkJCWlmIChtci0+ZW51bV9pZHNbKmZsZF9pZHhdICE9IGVudW1faWQpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChtci0+c2V0X3JlZyAmJiBtci0+Y2xyX3JlZykgewpAQCAtNDU1LDI5ICs0OTQsNDkgQEAKIAkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKIAkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKIAkJCQkJMSwKLQkJCQkJKG1yLT5yZWdfd2lkdGggLSAxKSAtIGopOworCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gKmZsZF9pZHgpOwogCQl9CisKKwkJKmZsZF9pZHggPSAwOworCQkoKnJlZ19pZHgpKys7CiAJfQogCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfbWFza19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQoreworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1bnNpZ25lZCBpbnQgaiA9IDA7CisJdW5zaWduZWQgaW50IHJldDsKKworCXJldCA9IF9pbnRjX21hc2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAmaSwgJmopOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAoZG9fZ3JwcykKIAkJcmV0dXJuIGludGNfbWFza19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX3ByaW9fZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IF9pbnRjX3ByaW9fZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICAgaW50Y19lbnVtIGVudW1faWQsCisJCQkJCSAgIHVuc2lnbmVkIGludCAqcmVnX2lkeCwKKwkJCQkJICAgdW5zaWduZWQgaW50ICpmbGRfaWR4KQogewotCXN0cnVjdCBpbnRjX3ByaW9fcmVnICpwciA9IGRlc2MtPnByaW9fcmVnczsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGUsIGJpdDsKKwlzdHJ1Y3QgaW50Y19wcmlvX3JlZyAqcHIgPSBkZXNjLT5ody5wcmlvX3JlZ3M7CisJdW5zaWduZWQgaW50IGZuLCBuLCBtb2RlLCBiaXQ7CiAJdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7CiAKLQlmb3IgKGkgPSAwOyBwciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9wcmlvX3JlZ3M7IGkrKykgewotCQlwciA9IGRlc2MtPnByaW9fcmVncyArIGk7CisJd2hpbGUgKHByICYmIGVudW1faWQgJiYgKnJlZ19pZHggPCBkZXNjLT5ody5ucl9wcmlvX3JlZ3MpIHsKKwkJcHIgPSBkZXNjLT5ody5wcmlvX3JlZ3MgKyAqcmVnX2lkeDsKIAotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwci0+ZW51bV9pZHMpOyBqKyspIHsKLQkJCWlmIChwci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJZm9yICg7ICpmbGRfaWR4IDwgQVJSQVlfU0laRShwci0+ZW51bV9pZHMpOyAoKmZsZF9pZHgpKyspIHsKKwkJCWlmIChwci0+ZW51bV9pZHNbKmZsZF9pZHhdICE9IGVudW1faWQpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChwci0+c2V0X3JlZyAmJiBwci0+Y2xyX3JlZykgewpAQCAtNDk1LDM0ICs1NTQsNzkgQEAKIAkJCX0KIAogCQkJZm4gKz0gKHByLT5yZWdfd2lkdGggPj4gMykgLSAxOworCQkJbiA9ICpmbGRfaWR4ICsgMTsKIAotCQkJQlVHX09OKChqICsgMSkgKiBwci0+ZmllbGRfd2lkdGggPiBwci0+cmVnX3dpZHRoKTsKKwkJCUJVR19PTihuICogcHItPmZpZWxkX3dpZHRoID4gcHItPnJlZ193aWR0aCk7CiAKLQkJCWJpdCA9IHByLT5yZWdfd2lkdGggLSAoKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCk7CisJCQliaXQgPSBwci0+cmVnX3dpZHRoIC0gKG4gKiBwci0+ZmllbGRfd2lkdGgpOwogCiAJCQlyZXR1cm4gX0lOVENfTUsoZm4sIG1vZGUsCiAJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZSksCiAJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZCksCiAJCQkJCXByLT5maWVsZF93aWR0aCwgYml0KTsKIAkJfQorCisJCSpmbGRfaWR4ID0gMDsKKwkJKCpyZWdfaWR4KSsrOwogCX0KIAorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX3ByaW9fZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisJdW5zaWduZWQgaW50IGogPSAwOworCXVuc2lnbmVkIGludCByZXQ7CisKKwlyZXQgPSBfaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgJmksICZqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJaWYgKGRvX2dycHMpCiAJCXJldHVybiBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBpbnRjX2dycF9pZChkZXNjLCBlbnVtX2lkKSwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGludGNfZW5hYmxlX2Rpc2FibGVfZW51bShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgICAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgaiwgZGF0YTsKKworCS8qIGdvIHRocm91Z2ggYW5kIGVuYWJsZS9kaXNhYmxlIGFsbCBtYXNrIGJpdHMgKi8KKwlpID0gaiA9IDA7CisJZG8geworCQlkYXRhID0gX2ludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsICZpLCAmaik7CisJCWlmIChkYXRhKQorCQkJaW50Y19lbmFibGVfZGlzYWJsZShkLCBkYXRhLCBlbmFibGUpOworCQlqKys7CisJfSB3aGlsZSAoZGF0YSk7CisKKwkvKiBnbyB0aHJvdWdoIGFuZCBlbmFibGUvZGlzYWJsZSBhbGwgcHJpb3JpdHkgZmllbGRzICovCisJaSA9IGogPSAwOworCWRvIHsKKwkJZGF0YSA9IF9pbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAmaSwgJmopOworCQlpZiAoZGF0YSkKKwkJCWludGNfZW5hYmxlX2Rpc2FibGUoZCwgZGF0YSwgZW5hYmxlKTsKKworCQlqKys7CisJfSB3aGlsZSAoZGF0YSk7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfYWNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKIAkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKIAkJCQkJICBpbnRjX2VudW0gZW51bV9pZCkKIHsKLQlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbXIgPSBkZXNjLT5hY2tfcmVnczsKKwlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbXIgPSBkZXNjLT5ody5hY2tfcmVnczsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGU7CiAJdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7CiAKLQlmb3IgKGkgPSAwOyBtciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9hY2tfcmVnczsgaSsrKSB7Ci0JCW1yID0gZGVzYy0+YWNrX3JlZ3MgKyBpOworCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPmh3Lm5yX2Fja19yZWdzOyBpKyspIHsKKwkJbXIgPSBkZXNjLT5ody5hY2tfcmVncyArIGk7CiAKIAkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUobXItPmVudW1faWRzKTsgaisrKSB7CiAJCQlpZiAobXItPmVudW1faWRzW2pdICE9IGVudW1faWQpCkBAIC01NDksMTEgKzY1MywxMSBAQAogCQkJCQkgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKIAkJCQkJICAgaW50Y19lbnVtIGVudW1faWQpCiB7Ci0Jc3RydWN0IGludGNfc2Vuc2VfcmVnICpzciA9IGRlc2MtPnNlbnNlX3JlZ3M7CisJc3RydWN0IGludGNfc2Vuc2VfcmVnICpzciA9IGRlc2MtPmh3LnNlbnNlX3JlZ3M7CiAJdW5zaWduZWQgaW50IGksIGosIGZuLCBiaXQ7CiAKLQlmb3IgKGkgPSAwOyBzciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9zZW5zZV9yZWdzOyBpKyspIHsKLQkJc3IgPSBkZXNjLT5zZW5zZV9yZWdzICsgaTsKKwlmb3IgKGkgPSAwOyBzciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ody5ucl9zZW5zZV9yZWdzOyBpKyspIHsKKwkJc3IgPSBkZXNjLT5ody5zZW5zZV9yZWdzICsgaTsKIAogCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzci0+ZW51bV9pZHMpOyBqKyspIHsKIAkJCWlmIChzci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKQEAgLTY1Niw3ICs3NjAsNyBAQAogCS8qIGlycSBzaG91bGQgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLwogCWQtPmNoaXAubWFzayhpcnEpOwogCi0JaWYgKGRlc2MtPmFja19yZWdzKQorCWlmIChkZXNjLT5ody5hY2tfcmVncykKIAkJYWNrX2hhbmRsZVtpcnFdID0gaW50Y19hY2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkKTsKIH0KIApAQCAtNjg0LDYgKzc4OCw3IEBACiB2b2lkIF9faW5pdCByZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoc3RydWN0IGludGNfZGVzYyAqZGVzYykKIHsKIAl1bnNpZ25lZCBpbnQgaSwgaywgc21wOworCXN0cnVjdCBpbnRjX2h3X2Rlc2MgKmh3ID0gJmRlc2MtPmh3OwogCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkOwogCiAJZCA9IGt6YWxsb2Moc2l6ZW9mKCpkKSwgR0ZQX05PV0FJVCk7CkBAIC02OTEsMTAgKzc5NiwxMCBAQAogCUlOSVRfTElTVF9IRUFEKCZkLT5saXN0KTsKIAlsaXN0X2FkZCgmZC0+bGlzdCwgJmludGNfbGlzdCk7CiAKLQlkLT5ucl9yZWcgPSBkZXNjLT5tYXNrX3JlZ3MgPyBkZXNjLT5ucl9tYXNrX3JlZ3MgKiAyIDogMDsKLQlkLT5ucl9yZWcgKz0gZGVzYy0+cHJpb19yZWdzID8gZGVzYy0+bnJfcHJpb19yZWdzICogMiA6IDA7Ci0JZC0+bnJfcmVnICs9IGRlc2MtPnNlbnNlX3JlZ3MgPyBkZXNjLT5ucl9zZW5zZV9yZWdzIDogMDsKLQlkLT5ucl9yZWcgKz0gZGVzYy0+YWNrX3JlZ3MgPyBkZXNjLT5ucl9hY2tfcmVncyA6IDA7CisJZC0+bnJfcmVnID0gaHctPm1hc2tfcmVncyA/IGh3LT5ucl9tYXNrX3JlZ3MgKiAyIDogMDsKKwlkLT5ucl9yZWcgKz0gaHctPnByaW9fcmVncyA/IGh3LT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKKwlkLT5ucl9yZWcgKz0gaHctPnNlbnNlX3JlZ3MgPyBody0+bnJfc2Vuc2VfcmVncyA6IDA7CisJZC0+bnJfcmVnICs9IGh3LT5hY2tfcmVncyA/IGh3LT5ucl9hY2tfcmVncyA6IDA7CiAKIAlkLT5yZWcgPSBremFsbG9jKGQtPm5yX3JlZyAqIHNpemVvZigqZC0+cmVnKSwgR0ZQX05PV0FJVCk7CiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNzAyLDMwICs4MDcsMzEgQEAKICNlbmRpZgogCWsgPSAwOwogCi0JaWYgKGRlc2MtPm1hc2tfcmVncykgewotCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfbWFza19yZWdzOyBpKyspIHsKLQkJCXNtcCA9IElTX1NNUChkZXNjLT5tYXNrX3JlZ3NbaV0pOwotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5tYXNrX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+bWFza19yZWdzW2ldLmNscl9yZWcsIHNtcCk7CisJaWYgKGh3LT5tYXNrX3JlZ3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IGh3LT5ucl9tYXNrX3JlZ3M7IGkrKykgeworCQkJc21wID0gSVNfU01QKGh3LT5tYXNrX3JlZ3NbaV0pOworCQkJayArPSBzYXZlX3JlZyhkLCBrLCBody0+bWFza19yZWdzW2ldLnNldF9yZWcsIHNtcCk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5tYXNrX3JlZ3NbaV0uY2xyX3JlZywgc21wKTsKIAkJfQogCX0KIAotCWlmIChkZXNjLT5wcmlvX3JlZ3MpIHsKLQkJZC0+cHJpbyA9IGt6YWxsb2MoZGVzYy0+bnJfdmVjdG9ycyAqIHNpemVvZigqZC0+cHJpbyksIEdGUF9OT1dBSVQpOworCWlmIChody0+cHJpb19yZWdzKSB7CisJCWQtPnByaW8gPSBremFsbG9jKGh3LT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5wcmlvKSwKKwkJCQkgIEdGUF9OT1dBSVQpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9wcmlvX3JlZ3M7IGkrKykgewotCQkJc21wID0gSVNfU01QKGRlc2MtPnByaW9fcmVnc1tpXSk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5zZXRfcmVnLCBzbXApOwotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5wcmlvX3JlZ3NbaV0uY2xyX3JlZywgc21wKTsKKwkJZm9yIChpID0gMDsgaSA8IGh3LT5ucl9wcmlvX3JlZ3M7IGkrKykgeworCQkJc21wID0gSVNfU01QKGh3LT5wcmlvX3JlZ3NbaV0pOworCQkJayArPSBzYXZlX3JlZyhkLCBrLCBody0+cHJpb19yZWdzW2ldLnNldF9yZWcsIHNtcCk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5wcmlvX3JlZ3NbaV0uY2xyX3JlZywgc21wKTsKIAkJfQogCX0KIAotCWlmIChkZXNjLT5zZW5zZV9yZWdzKSB7Ci0JCWQtPnNlbnNlID0ga3phbGxvYyhkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5zZW5zZSksIEdGUF9OT1dBSVQpOworCWlmIChody0+c2Vuc2VfcmVncykgeworCQlkLT5zZW5zZSA9IGt6YWxsb2MoaHctPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnNlbnNlKSwKKwkJCQkgICBHRlBfTk9XQUlUKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfc2Vuc2VfcmVnczsgaSsrKSB7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnNlbnNlX3JlZ3NbaV0ucmVnLCAwKTsKLQkJfQorCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX3NlbnNlX3JlZ3M7IGkrKykKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgaHctPnNlbnNlX3JlZ3NbaV0ucmVnLCAwKTsKIAl9CiAKIAlkLT5jaGlwLm5hbWUgPSBkZXNjLT5uYW1lOwpAQCAtNzM4LDE4ICs4NDQsMjYgQEAKIAlkLT5jaGlwLnNldF90eXBlID0gaW50Y19zZXRfc2Vuc2U7CiAJZC0+Y2hpcC5zZXRfd2FrZSA9IGludGNfc2V0X3dha2U7CiAKLQlpZiAoZGVzYy0+YWNrX3JlZ3MpIHsKLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX2Fja19yZWdzOyBpKyspCi0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPmFja19yZWdzW2ldLnNldF9yZWcsIDApOworCWlmIChody0+YWNrX3JlZ3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IGh3LT5ucl9hY2tfcmVnczsgaSsrKQorCQkJayArPSBzYXZlX3JlZyhkLCBrLCBody0+YWNrX3JlZ3NbaV0uc2V0X3JlZywgMCk7CiAKIAkJZC0+Y2hpcC5tYXNrX2FjayA9IGludGNfbWFza19hY2s7CiAJfQogCisJLyogZGlzYWJsZSBiaXRzIG1hdGNoaW5nIGZvcmNlX2Rpc2FibGUgYmVmb3JlIHJlZ2lzdGVyaW5nIGlycXMgKi8KKwlpZiAoZGVzYy0+Zm9yY2VfZGlzYWJsZSkKKwkJaW50Y19lbmFibGVfZGlzYWJsZV9lbnVtKGRlc2MsIGQsIGRlc2MtPmZvcmNlX2Rpc2FibGUsIDApOworCisJLyogZGlzYWJsZSBiaXRzIG1hdGNoaW5nIGZvcmNlX2VuYWJsZSBiZWZvcmUgcmVnaXN0ZXJpbmcgaXJxcyAqLworCWlmIChkZXNjLT5mb3JjZV9lbmFibGUpCisJCWludGNfZW5hYmxlX2Rpc2FibGVfZW51bShkZXNjLCBkLCBkZXNjLT5mb3JjZV9lbmFibGUsIDApOworCiAJQlVHX09OKGsgPiAyNTYpOyAvKiBfSU5UQ19BRERSX0UoKSBhbmQgX0lOVENfQUREUl9EKCkgYXJlIDggYml0cyAqLwogCiAJLyogcmVnaXN0ZXIgdGhlIHZlY3RvcnMgb25lIGJ5IG9uZSAqLwotCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKLQkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOworCWZvciAoaSA9IDA7IGkgPCBody0+bnJfdmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBody0+dmVjdG9ycyArIGk7CiAJCXVuc2lnbmVkIGludCBpcnEgPSBldnQyaXJxKHZlY3QtPnZlY3QpOwogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmlycV9kZXNjOwogCkBAIC03NjQsOCArODc4LDggQEAKIAogCQlpbnRjX3JlZ2lzdGVyX2lycShkZXNjLCBkLCB2ZWN0LT5lbnVtX2lkLCBpcnEpOwogCi0JCWZvciAoayA9IGkgKyAxOyBrIDwgZGVzYy0+bnJfdmVjdG9yczsgaysrKSB7Ci0JCQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0MiA9IGRlc2MtPnZlY3RvcnMgKyBrOworCQlmb3IgKGsgPSBpICsgMTsgayA8IGh3LT5ucl92ZWN0b3JzOyBrKyspIHsKKwkJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QyID0gaHctPnZlY3RvcnMgKyBrOwogCQkJdW5zaWduZWQgaW50IGlycTIgPSBldnQyaXJxKHZlY3QyLT52ZWN0KTsKIAogCQkJaWYgKHZlY3QtPmVudW1faWQgIT0gdmVjdDItPmVudW1faWQpCkBAIC03ODUsMTEgKzg5OSwxNSBAQAogCQkJdmVjdDItPmVudW1faWQgPSAwOwogCiAJCQkvKiByZWRpcmVjdCB0aGlzIGludGVycnVwdHMgdG8gdGhlIGZpcnN0IG9uZSAqLwotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxMiwgJmQtPmNoaXAsCi0JCQkJCWludGNfcmVkaXJlY3RfaXJxLCAicmVkaXJlY3QiKTsKKwkJCXNldF9pcnFfY2hpcChpcnEyLCAmZHVtbXlfaXJxX2NoaXApOworCQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxMiwgaW50Y19yZWRpcmVjdF9pcnEpOwogCQkJc2V0X2lycV9kYXRhKGlycTIsICh2b2lkICopaXJxKTsKIAkJfQogCX0KKworCS8qIGVuYWJsZSBiaXRzIG1hdGNoaW5nIGZvcmNlX2VuYWJsZSBhZnRlciByZWdpc3RlcmluZyBpcnFzICovCisJaWYgKGRlc2MtPmZvcmNlX2VuYWJsZSkKKwkJaW50Y19lbmFibGVfZGlzYWJsZV9lbnVtKGRlc2MsIGQsIGRlc2MtPmZvcmNlX2VuYWJsZSwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgaW50Y19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKQEAgLTg3Miw3ICs5OTAsNyBAQAogLyoKICAqIER5bmFtaWMgSVJRIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGNyZWF0ZV9pcnFfb25fbm9kZSh1bnNpZ25lZCBpbnQgaXJxX3dhbnQsIGludCBub2RlKQordW5zaWduZWQgaW50IGNyZWF0ZV9pcnFfbnIodW5zaWduZWQgaW50IGlycV93YW50LCBpbnQgbm9kZSkKIHsKIAl1bnNpZ25lZCBpbnQgaXJxID0gMCwgbmV3OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04ODEsMjQgKzk5OSwyOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCiAJLyoKLQkgKiBGaXJzdCB0cnkgdGhlIHdhbnRlZCBJUlEsIHRoZW4gc2Nhbi4KKwkgKiBGaXJzdCB0cnkgdGhlIHdhbnRlZCBJUlEKIAkgKi8KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChpcnFfd2FudCwgaW50Y19pcnFfbWFwKSkgeworCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlycV93YW50LCBpbnRjX2lycV9tYXApID09IDApIHsKKwkJbmV3ID0gaXJxX3dhbnQ7CisJfSBlbHNlIHsKKwkJLyogLi4gdGhlbiBmYWxsIGJhY2sgdG8gc2Nhbm5pbmcuICovCiAJCW5ldyA9IGZpbmRfZmlyc3RfemVyb19iaXQoaW50Y19pcnFfbWFwLCBucl9pcnFzKTsKIAkJaWYgKHVubGlrZWx5KG5ldyA9PSBucl9pcnFzKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAotCQlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2Nfbm9kZShuZXcsIG5vZGUpOwotCQlpZiAodW5saWtlbHkoIWRlc2MpKSB7Ci0JCQlwcl9pbmZvKCJjYW4ndCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBuZXcpOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0KLQkJZGVzYyA9IG1vdmVfaXJxX2Rlc2MoZGVzYywgbm9kZSk7CiAJCV9fc2V0X2JpdChuZXcsIGludGNfaXJxX21hcCk7Ci0JCWlycSA9IG5ldzsKIAl9CiAKKwlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2Nfbm9kZShuZXcsIG5vZGUpOworCWlmICh1bmxpa2VseSghZGVzYykpIHsKKwkJcHJfaW5mbygiY2FuJ3QgZ2V0IGlycV9kZXNjIGZvciAlZFxuIiwgbmV3KTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWRlc2MgPSBtb3ZlX2lycV9kZXNjKGRlc2MsIG5vZGUpOworCWlycSA9IG5ldzsKKwogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCkBAIC05MTMsNyArMTAzNSw3IEBACiAJaW50IG5pZCA9IGNwdV90b19ub2RlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJaW50IGlycTsKIAotCWlycSA9IGNyZWF0ZV9pcnFfb25fbm9kZShOUl9JUlFTX0xFR0FDWSwgbmlkKTsKKwlpcnEgPSBjcmVhdGVfaXJxX25yKE5SX0lSUVNfTEVHQUNZLCBuaWQpOwogCWlmIChpcnEgPT0gMCkKIAkJaXJxID0gLTE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvcGZjLmMgYi9kcml2ZXJzL3NoL3BmYy5jCmluZGV4IDA4MjYwNGUuLmNmMDMwM2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL3BmYy5jCisrKyBiL2RyaXZlcnMvc2gvcGZjLmMKQEAgLTMzNywxMiArMzM3LDM5IEBACiAJCWlmICghZW51bV9pZCkKIAkJCWJyZWFrOwogCisJCS8qIGZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgYSBmdW5jdGlvbiBlbnVtICovCiAJCWluX3JhbmdlID0gZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmZ1bmN0aW9uKTsKLQkJaWYgKCFpbl9yYW5nZSAmJiByYW5nZSkgewotCQkJaW5fcmFuZ2UgPSBlbnVtX2luX3JhbmdlKGVudW1faWQsIHJhbmdlKTsKKwkJaWYgKCFpbl9yYW5nZSkgeworCQkJLyogbm90IGEgZnVuY3Rpb24gZW51bSAqLworCQkJaWYgKHJhbmdlKSB7CisJCQkJLyoKKwkJCQkgKiBvdGhlciByYW5nZSBleGlzdHMsIHNvIHRoaXMgcGluIGlzCisJCQkJICogYSByZWd1bGFyIEdQSU8gcGluIHRoYXQgbm93IGlzIGJlaW5nCisJCQkJICogYm91bmQgdG8gYSBzcGVjaWZpYyBkaXJlY3Rpb24uCisJCQkJICoKKwkJCQkgKiBmb3IgdGhpcyBjYXNlIHdlIG9ubHkgYWxsb3cgZnVuY3Rpb24gZW51bXMKKwkJCQkgKiBhbmQgdGhlIGVudW1zIHRoYXQgbWF0Y2ggdGhlIG90aGVyIHJhbmdlLgorCQkJCSAqLworCQkJCWluX3JhbmdlID0gZW51bV9pbl9yYW5nZShlbnVtX2lkLCByYW5nZSk7CiAKLQkJCWlmIChpbl9yYW5nZSAmJiBlbnVtX2lkID09IHJhbmdlLT5mb3JjZSkKLQkJCQljb250aW51ZTsKKwkJCQkvKgorCQkJCSAqIHNwZWNpYWwgY2FzZSBwYXNzIHRocm91Z2ggZm9yIGZpeGVkCisJCQkJICogaW5wdXQtb25seSBvciBvdXRwdXQtb25seSBwaW5zIHdpdGhvdXQKKwkJCQkgKiBmdW5jdGlvbiBlbnVtIHJlZ2lzdGVyIGFzc29jaWF0aW9uLgorCQkJCSAqLworCQkJCWlmIChpbl9yYW5nZSAmJiBlbnVtX2lkID09IHJhbmdlLT5mb3JjZSkKKwkJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogbm8gb3RoZXIgcmFuZ2UgZXhpc3RzLCBzbyB0aGlzIHBpbgorCQkJCSAqIG11c3QgdGhlbiBiZSBvZiB0aGUgZnVuY3Rpb24gdHlwZS4KKwkJCQkgKgorCQkJCSAqIGFsbG93IGZ1bmN0aW9uIHR5cGUgcGlucyB0byBzZWxlY3QKKwkJCQkgKiBhbnkgY29tYmluYXRpb24gb2YgZnVuY3Rpb24vaW4vb3V0CisJCQkJICogaW4gdGhlaXIgTUFSSyBsaXN0cy4KKwkJCQkgKi8KKwkJCQlpbl9yYW5nZSA9IDE7CisJCQl9CiAJCX0KIAogCQlpZiAoIWluX3JhbmdlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25maWcKaW5kZXggZjU1ZWIwMS4uMGZlZTk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3NwaS9LY29uZmlnCkBAIC0xMDAsNiArMTAwLDIzIEBACiAJICBpbmV4cGVuc2l2ZSBiYXR0ZXJ5IHBvd2VyZWQgbWljcm9jb250cm9sbGVyIGV2YWx1YXRpb24gYm9hcmQuCiAJICBUaGlzIHNhbWUgY2FibGUgY2FuIGJlIHVzZWQgdG8gZmxhc2ggbmV3IGZpcm13YXJlLgogCitjb25maWcgU1BJX0NPTERGSVJFX1FTUEkKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIENvbGRmaXJlIFFTUEkgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIChNNTIweCB8fCBNNTIzeCB8fCBNNTI0OSB8fCBNNTI3eCB8fCBNNTI4eCB8fCBNNTMyeCkKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIENvbGRmaXJlIFFTUEkgY29udHJvbGxlciBpbiBtYXN0ZXIKKwkgIG1vZGUuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGNvbGRmaXJlX3FzcGkuCisKK2NvbmZpZyBTUElfREFWSU5DSQorCXRyaXN0YXRlICJTUEkgY29udHJvbGxlciBkcml2ZXIgZm9yIERhVmluY2kvREE4eHggU29DJ3MiCisJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIEFSQ0hfREFWSU5DSQorCXNlbGVjdCBTUElfQklUQkFORworCWhlbHAKKwkgIFNQSSBtYXN0ZXIgY29udHJvbGxlciBmb3IgRGFWaW5jaSBhbmQgREE4eHggU1BJIG1vZHVsZXMuCisKIGNvbmZpZyBTUElfR1BJTwogCXRyaXN0YXRlICJHUElPLWJhc2VkIGJpdGJhbmdpbmcgU1BJIE1hc3RlciIKIAlkZXBlbmRzIG9uIEdFTkVSSUNfR1BJTwpAQCAtMzA4LDcgKzMyNSw3IEBACiAjCiAKIGNvbmZpZyBTUElfREVTSUdOV0FSRQotCWJvb2wgIkRlc2lnbldhcmUgU1BJIGNvbnRyb2xsZXIgY29yZSBzdXBwb3J0IgorCXRyaXN0YXRlICJEZXNpZ25XYXJlIFNQSSBjb250cm9sbGVyIGNvcmUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIKIAloZWxwCiAJICBnZW5lcmFsIGRyaXZlciBmb3IgU1BJIGNvbnRyb2xsZXIgY29yZSBmcm9tIERlc2lnbldhcmUKQEAgLTMxNyw2ICszMzQsMTAgQEAKIAl0cmlzdGF0ZSAiUENJIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBjb3JlIgogCWRlcGVuZHMgb24gU1BJX0RFU0lHTldBUkUgJiYgUENJCiAKK2NvbmZpZyBTUElfRFdfTU1JTworCXRyaXN0YXRlICJNZW1vcnktbWFwcGVkIGlvIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBjb3JlIgorCWRlcGVuZHMgb24gU1BJX0RFU0lHTldBUkUgJiYgSEFWRV9DTEsKKwogIwogIyBUaGVyZSBhcmUgbG90cyBvZiBTUEkgZGV2aWNlIHR5cGVzLCB3aXRoIHNlbnNvcnMgYW5kIG1lbW9yeQogIyBiZWluZyBwcm9iYWJseSB0aGUgbW9zdCB3aWRlbHkgdXNlZCBvbmVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZpbGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQppbmRleCBmM2QyODEwLi5kN2QwZjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQpAQCAtMTYsOCArMTYsMTEgQEAKIG9iai0kKENPTkZJR19TUElfQklUQkFORykJCSs9IHNwaV9iaXRiYW5nLm8KIG9iai0kKENPTkZJR19TUElfQVUxNTUwKQkJKz0gYXUxNTUwX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0JVVFRFUkZMWSkJCSs9IHNwaV9idXR0ZXJmbHkubworb2JqLSQoQ09ORklHX1NQSV9DT0xERklSRV9RU1BJKQkJKz0gY29sZGZpcmVfcXNwaS5vCitvYmotJChDT05GSUdfU1BJX0RBVklOQ0kpCQkrPSBkYXZpbmNpX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0RFU0lHTldBUkUpCQkrPSBkd19zcGkubwogb2JqLSQoQ09ORklHX1NQSV9EV19QQ0kpCQkrPSBkd19zcGlfcGNpLm8KK29iai0kKENPTkZJR19TUElfRFdfTU1JTykJCSs9IGR3X3NwaV9tbWlvLm8KIG9iai0kKENPTkZJR19TUElfR1BJTykJCQkrPSBzcGlfZ3Bpby5vCiBvYmotJChDT05GSUdfU1BJX0lNWCkJCQkrPSBzcGlfaW14Lm8KIG9iai0kKENPTkZJR19TUElfTE03MF9MTFApCQkrPSBzcGlfbG03MGxscC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMgYi9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMKaW5kZXggY2ZkNWZmOS4uYmE4YWM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYwpAQCAtNDEyLDExICs0MTIsMTMgQEAKIAl9CiAKIAkvKiBwdXQgYnVmZmVycyBvbiB0aGUgcmluZyAqLwotCXJlcyA9IGF1MXh4eF9kYmRtYV9wdXRfZGVzdChody0+ZG1hX3J4X2NoLCBody0+cngsIHQtPmxlbik7CisJcmVzID0gYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGh3LT5kbWFfcnhfY2gsIHZpcnRfdG9fcGh5cyhody0+cngpLAorCQkJCSAgICB0LT5sZW4sIERETUFfRkxBR1NfSUUpOwogCWlmICghcmVzKQogCQlkZXZfZXJyKGh3LT5kZXYsICJyeCBkbWEgcHV0IGRlc3QgZXJyb3JcbiIpOwogCi0JcmVzID0gYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoaHctPmRtYV90eF9jaCwgKHZvaWQgKilody0+dHgsIHQtPmxlbik7CisJcmVzID0gYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoaHctPmRtYV90eF9jaCwgdmlydF90b19waHlzKGh3LT50eCksCisJCQkJICAgICAgdC0+bGVuLCBERE1BX0ZMQUdTX0lFKTsKIAlpZiAoIXJlcykKIAkJZGV2X2Vycihody0+ZGV2LCAidHggZG1hIHB1dCBzb3VyY2UgZXJyb3JcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9jb2xkZmlyZV9xc3BpLmMgYi9kcml2ZXJzL3NwaS9jb2xkZmlyZV9xc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliZTNlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL2NvbGRmaXJlX3FzcGkuYwpAQCAtMCwwICsxLDY0MCBAQAorLyoKKyAqIEZyZWVzY2FsZS9Nb3Rvcm9sYSBDb2xkZmlyZSBRdWV1ZWQgU1BJIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDEwIFN0ZXZlbiBLaW5nIDxzZmtpbmdAZmR3ZGMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSA8YXNtL2NvbGRmaXJlLmg+CisjaW5jbHVkZSA8YXNtL21jZnFzcGkuaD4KKworI2RlZmluZQlEUklWRVJfTkFNRSAibWNmcXNwaSIKKworI2RlZmluZQlNQ0ZRU1BJX0JVU0NMSwkJCShNQ0ZfQlVTQ0xLIC8gMikKKworI2RlZmluZQlNQ0ZRU1BJX1FNUgkJCTB4MDAKKyNkZWZpbmUJCU1DRlFTUElfUU1SX01TVFIJMHg4MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FNUl9DUE9MCTB4MDIwMAorI2RlZmluZQkJTUNGUVNQSV9RTVJfQ1BIQQkweDAxMDAKKyNkZWZpbmUJTUNGUVNQSV9RRExZUgkJCTB4MDQKKyNkZWZpbmUJCU1DRlFTUElfUURMWVJfU1BFCTB4ODAwMAorI2RlZmluZQlNQ0ZRU1BJX1FXUgkJCTB4MDgKKyNkZWZpbmUJCU1DRlFTUElfUVdSX0hBTFQJMHg4MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FXUl9XUkVOCTB4NDAwMAorI2RlZmluZQkJTUNGUVNQSV9RV1JfQ1NJVgkweDEwMDAKKyNkZWZpbmUJTUNGUVNQSV9RSVIJCQkweDBDCisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9XQ0VGQgkweDgwMDAKKyNkZWZpbmUJCU1DRlFTUElfUUlSX0FCUlRCCTB4NDAwMAorI2RlZmluZQkJTUNGUVNQSV9RSVJfQUJSVEwJMHgxMDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9XQ0VGRQkweDA4MDAKKyNkZWZpbmUJCU1DRlFTUElfUUlSX0FCUlRFCTB4MDQwMAorI2RlZmluZQkJTUNGUVNQSV9RSVJfU1BJRkUJMHgwMTAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9XQ0VGCTB4MDAwOAorI2RlZmluZQkJTUNGUVNQSV9RSVJfQUJSVAkweDAwMDQKKyNkZWZpbmUJCU1DRlFTUElfUUlSX1NQSUYJMHgwMDAxCisjZGVmaW5lCU1DRlFTUElfUUFSCQkJMHgwMTAKKyNkZWZpbmUJCU1DRlFTUElfUUFSX1RYQlVGCTB4MDAKKyNkZWZpbmUJCU1DRlFTUElfUUFSX1JYQlVGCTB4MTAKKyNkZWZpbmUJCU1DRlFTUElfUUFSX0NNREJVRgkweDIwCisjZGVmaW5lCU1DRlFTUElfUURSCQkJMHgwMTQKKyNkZWZpbmUJTUNGUVNQSV9RQ1IJCQkweDAxNAorI2RlZmluZQkJTUNGUVNQSV9RQ1JfQ09OVAkweDgwMDAKKyNkZWZpbmUJCU1DRlFTUElfUUNSX0JJVFNFCTB4NDAwMAorI2RlZmluZQkJTUNGUVNQSV9RQ1JfRFQJCTB4MjAwMAorCitzdHJ1Y3QgbWNmcXNwaSB7CisJdm9pZCBfX2lvbWVtICppb2Jhc2U7CisJaW50IGlycTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IG1jZnFzcGlfY3NfY29udHJvbCAqY3NfY29udHJvbDsKKworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOworCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1zZ3E7Cit9OworCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3dyX3FtcihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FNUik7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfd3JfcWRseXIoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgbWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RRExZUik7Cit9CisKK3N0YXRpYyB1MTYgbWNmcXNwaV9yZF9xZGx5cihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSkKK3sKKwlyZXR1cm4gcmVhZHcobWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RRExZUik7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfd3JfcXdyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUVdSKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV93cl9xaXIoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgbWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RSVIpOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3dyX3FhcihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FBUik7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfd3JfcWRyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUURSKTsKK30KKworc3RhdGljIHUxNiBtY2Zxc3BpX3JkX3FkcihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSkKK3sKKwlyZXR1cm4gcmVhZHcobWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RRFIpOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX2NzX3NlbGVjdChzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTggY2hpcF9zZWxlY3QsCisJCQkgICAgYm9vbCBjc19oaWdoKQoreworCW1jZnFzcGktPmNzX2NvbnRyb2wtPnNlbGVjdChtY2Zxc3BpLT5jc19jb250cm9sLCBjaGlwX3NlbGVjdCwgY3NfaGlnaCk7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfY3NfZGVzZWxlY3Qoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHU4IGNoaXBfc2VsZWN0LAorCQkJCWJvb2wgY3NfaGlnaCkKK3sKKwltY2Zxc3BpLT5jc19jb250cm9sLT5kZXNlbGVjdChtY2Zxc3BpLT5jc19jb250cm9sLCBjaGlwX3NlbGVjdCwgY3NfaGlnaCk7Cit9CisKK3N0YXRpYyBpbnQgbWNmcXNwaV9jc19zZXR1cChzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSkKK3sKKwlyZXR1cm4gKG1jZnFzcGktPmNzX2NvbnRyb2wgJiYgbWNmcXNwaS0+Y3NfY29udHJvbC0+c2V0dXApID8KKwkJbWNmcXNwaS0+Y3NfY29udHJvbC0+c2V0dXAobWNmcXNwaS0+Y3NfY29udHJvbCkgOiAwOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX2NzX3RlYXJkb3duKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpKQoreworCWlmIChtY2Zxc3BpLT5jc19jb250cm9sICYmIG1jZnFzcGktPmNzX2NvbnRyb2wtPnRlYXJkb3duKQorCQltY2Zxc3BpLT5jc19jb250cm9sLT50ZWFyZG93bihtY2Zxc3BpLT5jc19jb250cm9sKTsKK30KKworc3RhdGljIHU4IG1jZnFzcGlfcW1yX2JhdWQodTMyIHNwZWVkX2h6KQoreworCXJldHVybiBjbGFtcCgoTUNGUVNQSV9CVVNDTEsgKyBzcGVlZF9oeiAtIDEpIC8gc3BlZWRfaHosIDJ1LCAyNTV1KTsKK30KKworc3RhdGljIGJvb2wgbWNmcXNwaV9xZGx5cl9zcGUoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkpCit7CisJcmV0dXJuIG1jZnFzcGlfcmRfcWRseXIobWNmcXNwaSkgJiBNQ0ZRU1BJX1FETFlSX1NQRTsKK30KKworc3RhdGljIGlycXJldHVybl90IG1jZnFzcGlfaXJxX2hhbmRsZXIoaW50IHRoaXNfaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkgPSBkZXZfaWQ7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKwltY2Zxc3BpX3dyX3FpcihtY2Zxc3BpLCBNQ0ZRU1BJX1FJUl9TUElGRSB8IE1DRlFTUElfUUlSX1NQSUYpOworCXdha2VfdXAoJm1jZnFzcGktPndhaXRxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV90cmFuc2Zlcl9tc2c4KHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1bnNpZ25lZCBjb3VudCwKKwkJCQkgIGNvbnN0IHU4ICp0eGJ1ZiwgdTggKnJ4YnVmKQoreworCXVuc2lnbmVkIGksIG4sIG9mZnNldCA9IDA7CisKKwluID0gbWluKGNvdW50LCAxNnUpOworCisJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfQ01EQlVGKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCBNQ0ZRU1BJX1FDUl9CSVRTRSk7CisKKwltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9UWEJVRik7CisJaWYgKHR4YnVmKQorCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQkJbWNmcXNwaV93cl9xZHIobWNmcXNwaSwgKnR4YnVmKyspOworCWVsc2UKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCAwKTsKKworCWNvdW50IC09IG47CisJaWYgKGNvdW50KSB7CisJCXUxNiBxd3IgPSAweGYwODsKKwkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgMHg3MDApOworCQltY2Zxc3BpX3dyX3FkbHlyKG1jZnFzcGksIE1DRlFTUElfUURMWVJfU1BFKTsKKworCQlkbyB7CisJCQl3YWl0X2V2ZW50KG1jZnFzcGktPndhaXRxLCAhbWNmcXNwaV9xZGx5cl9zcGUobWNmcXNwaSkpOworCQkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgcXdyKTsKKwkJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCQkJaWYgKHJ4YnVmKSB7CisJCQkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwKKwkJCQkJICAgICAgIE1DRlFTUElfUUFSX1JYQlVGICsgb2Zmc2V0KTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQkJCQkqcnhidWYrKyA9IG1jZnFzcGlfcmRfcWRyKG1jZnFzcGkpOworCQkJfQorCQkJbiA9IG1pbihjb3VudCwgOHUpOworCQkJaWYgKHR4YnVmKSB7CisJCQkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwKKwkJCQkJICAgICAgIE1DRlFTUElfUUFSX1RYQlVGICsgb2Zmc2V0KTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQkJCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCAqdHhidWYrKyk7CisJCQl9CisJCQlxd3IgPSAob2Zmc2V0ID8gMHg4MDggOiAwKSArICgobiAtIDEpIDw8IDgpOworCQkJb2Zmc2V0IF49IDg7CisJCQljb3VudCAtPSBuOworCQl9IHdoaWxlIChjb3VudCk7CisJCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJCW1jZnFzcGlfd3JfcXdyKG1jZnFzcGksIHF3cik7CisJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCQlpZiAocnhidWYpIHsKKwkJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1JYQlVGICsgb2Zmc2V0KTsKKwkJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCQkJKnJ4YnVmKysgPSBtY2Zxc3BpX3JkX3FkcihtY2Zxc3BpKTsKKwkJCW9mZnNldCBePSA4OworCQl9CisJfSBlbHNlIHsKKwkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgKG4gLSAxKSA8PCA4KTsKKwkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJfQorCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJaWYgKHJ4YnVmKSB7CisJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1JYQlVGICsgb2Zmc2V0KTsKKwkJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJCSpyeGJ1ZisrID0gbWNmcXNwaV9yZF9xZHIobWNmcXNwaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3RyYW5zZmVyX21zZzE2KHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1bnNpZ25lZCBjb3VudCwKKwkJCQkgICBjb25zdCB1MTYgKnR4YnVmLCB1MTYgKnJ4YnVmKQoreworCXVuc2lnbmVkIGksIG4sIG9mZnNldCA9IDA7CisKKwluID0gbWluKGNvdW50LCAxNnUpOworCisJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfQ01EQlVGKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCBNQ0ZRU1BJX1FDUl9CSVRTRSk7CisKKwltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9UWEJVRik7CisJaWYgKHR4YnVmKQorCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQkJbWNmcXNwaV93cl9xZHIobWNmcXNwaSwgKnR4YnVmKyspOworCWVsc2UKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCAwKTsKKworCWNvdW50IC09IG47CisJaWYgKGNvdW50KSB7CisJCXUxNiBxd3IgPSAweGYwODsKKwkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgMHg3MDApOworCQltY2Zxc3BpX3dyX3FkbHlyKG1jZnFzcGksIE1DRlFTUElfUURMWVJfU1BFKTsKKworCQlkbyB7CisJCQl3YWl0X2V2ZW50KG1jZnFzcGktPndhaXRxLCAhbWNmcXNwaV9xZGx5cl9zcGUobWNmcXNwaSkpOworCQkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgcXdyKTsKKwkJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCQkJaWYgKHJ4YnVmKSB7CisJCQkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwKKwkJCQkJICAgICAgIE1DRlFTUElfUUFSX1JYQlVGICsgb2Zmc2V0KTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQkJCQkqcnhidWYrKyA9IG1jZnFzcGlfcmRfcWRyKG1jZnFzcGkpOworCQkJfQorCQkJbiA9IG1pbihjb3VudCwgOHUpOworCQkJaWYgKHR4YnVmKSB7CisJCQkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwKKwkJCQkJICAgICAgIE1DRlFTUElfUUFSX1RYQlVGICsgb2Zmc2V0KTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQkJCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCAqdHhidWYrKyk7CisJCQl9CisJCQlxd3IgPSAob2Zmc2V0ID8gMHg4MDggOiAweDAwMCkgKyAoKG4gLSAxKSA8PCA4KTsKKwkJCW9mZnNldCBePSA4OworCQkJY291bnQgLT0gbjsKKwkJfSB3aGlsZSAoY291bnQpOworCQl3YWl0X2V2ZW50KG1jZnFzcGktPndhaXRxLCAhbWNmcXNwaV9xZGx5cl9zcGUobWNmcXNwaSkpOworCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCBxd3IpOworCQltY2Zxc3BpX3dyX3FkbHlyKG1jZnFzcGksIE1DRlFTUElfUURMWVJfU1BFKTsKKwkJaWYgKHJ4YnVmKSB7CisJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9SWEJVRiArIG9mZnNldCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQkJCSpyeGJ1ZisrID0gbWNmcXNwaV9yZF9xZHIobWNmcXNwaSk7CisJCQlvZmZzZXQgXj0gODsKKwkJfQorCX0gZWxzZSB7CisJCW1jZnFzcGlfd3JfcXdyKG1jZnFzcGksIChuIC0gMSkgPDwgOCk7CisJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCX0KKwl3YWl0X2V2ZW50KG1jZnFzcGktPndhaXRxLCAhbWNmcXNwaV9xZGx5cl9zcGUobWNmcXNwaSkpOworCWlmIChyeGJ1ZikgeworCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9SWEJVRiArIG9mZnNldCk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQkqcnhidWYrKyA9IG1jZnFzcGlfcmRfcWRyKG1jZnFzcGkpOworCX0KK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWNmcXNwaSwgd29yayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2Zxc3BpLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZtY2Zxc3BpLT5tc2dxKSkgeworCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZzsKKwkJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKKwkJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKKwkJaW50IHN0YXR1cyA9IDA7CisKKwkJbXNnID0gY29udGFpbmVyX29mKG1jZnFzcGktPm1zZ3EubmV4dCwgc3RydWN0IHNwaV9tZXNzYWdlLAorCQkJCSAgIHF1ZXVlKTsKKworCQlsaXN0X2RlbF9pbml0KCZtY2Zxc3BpLT5tc2dxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNmcXNwaS0+bG9jaywgZmxhZ3MpOworCisJCXNwaSA9IG1zZy0+c3BpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1zZy0+dHJhbnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7CisJCQlib29sIGNzX2hpZ2ggPSBzcGktPm1vZGUgJiBTUElfQ1NfSElHSDsKKwkJCXUxNiBxbXIgPSBNQ0ZRU1BJX1FNUl9NU1RSOworCisJCQlpZiAoeGZlci0+Yml0c19wZXJfd29yZCkKKwkJCQlxbXIgfD0geGZlci0+Yml0c19wZXJfd29yZCA8PCAxMDsKKwkJCWVsc2UKKwkJCQlxbXIgfD0gc3BpLT5iaXRzX3Blcl93b3JkIDw8IDEwOworCQkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUEhBKQorCQkJCXFtciB8PSBNQ0ZRU1BJX1FNUl9DUEhBOworCQkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQorCQkJCXFtciB8PSBNQ0ZRU1BJX1FNUl9DUE9MOworCQkJaWYgKHhmZXItPnNwZWVkX2h6KQorCQkJCXFtciB8PSBtY2Zxc3BpX3Ftcl9iYXVkKHhmZXItPnNwZWVkX2h6KTsKKwkJCWVsc2UKKwkJCQlxbXIgfD0gbWNmcXNwaV9xbXJfYmF1ZChzcGktPm1heF9zcGVlZF9oeik7CisJCQltY2Zxc3BpX3dyX3FtcihtY2Zxc3BpLCBxbXIpOworCisJCQltY2Zxc3BpX2NzX3NlbGVjdChtY2Zxc3BpLCBzcGktPmNoaXBfc2VsZWN0LCBjc19oaWdoKTsKKworCQkJbWNmcXNwaV93cl9xaXIobWNmcXNwaSwgTUNGUVNQSV9RSVJfU1BJRkUpOworCQkJaWYgKCh4ZmVyLT5iaXRzX3Blcl93b3JkID8geGZlci0+Yml0c19wZXJfd29yZCA6CisJCQkJCQlzcGktPmJpdHNfcGVyX3dvcmQpID09IDgpCisJCQkJbWNmcXNwaV90cmFuc2Zlcl9tc2c4KG1jZnFzcGksIHhmZXItPmxlbiwKKwkJCQkJCSAgICAgIHhmZXItPnR4X2J1ZiwKKwkJCQkJCSAgICAgIHhmZXItPnJ4X2J1Zik7CisJCQllbHNlCisJCQkJbWNmcXNwaV90cmFuc2Zlcl9tc2cxNihtY2Zxc3BpLCB4ZmVyLT5sZW4gLyAyLAorCQkJCQkJICAgICAgIHhmZXItPnR4X2J1ZiwKKwkJCQkJCSAgICAgICB4ZmVyLT5yeF9idWYpOworCQkJbWNmcXNwaV93cl9xaXIobWNmcXNwaSwgMCk7CisKKwkJCWlmICh4ZmVyLT5kZWxheV91c2VjcykKKwkJCQl1ZGVsYXkoeGZlci0+ZGVsYXlfdXNlY3MpOworCQkJaWYgKHhmZXItPmNzX2NoYW5nZSkgeworCQkJCWlmICghbGlzdF9pc19sYXN0KCZ4ZmVyLT50cmFuc2Zlcl9saXN0LAorCQkJCQkJICAmbXNnLT50cmFuc2ZlcnMpKQorCQkJCQltY2Zxc3BpX2NzX2Rlc2VsZWN0KG1jZnFzcGksCisJCQkJCQkJICAgIHNwaS0+Y2hpcF9zZWxlY3QsCisJCQkJCQkJICAgIGNzX2hpZ2gpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAobGlzdF9pc19sYXN0KCZ4ZmVyLT50cmFuc2Zlcl9saXN0LAorCQkJCQkJICZtc2ctPnRyYW5zZmVycykpCisJCQkJCW1jZnFzcGlfY3NfZGVzZWxlY3QobWNmcXNwaSwKKwkJCQkJCQkgICAgc3BpLT5jaGlwX3NlbGVjdCwKKwkJCQkJCQkgICAgY3NfaGlnaCk7CisJCQl9CisJCQltc2ctPmFjdHVhbF9sZW5ndGggKz0geGZlci0+bGVuOworCQl9CisJCW1zZy0+c3RhdHVzID0gc3RhdHVzOworCQltc2ctPmNvbXBsZXRlKG1zZy0+Y29udGV4dCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1jZnFzcGktPmxvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNmcXNwaS0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG1jZnFzcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9tZXNzYWdlICptc2cpCit7CisJc3RydWN0IG1jZnFzcGkgKm1jZnFzcGk7CisJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbWNmcXNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh4ZmVyLCAmbXNnLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpIHsKKwkJaWYgKHhmZXItPmJpdHNfcGVyX3dvcmQgJiYgKCh4ZmVyLT5iaXRzX3Blcl93b3JkIDwgOCkKKwkJCQkJfHwgKHhmZXItPmJpdHNfcGVyX3dvcmQgPiAxNikpKSB7CisJCQlkZXZfZGJnKCZzcGktPmRldiwKKwkJCQkiJWQgYml0cyBwZXIgd29yZCBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJCXhmZXItPmJpdHNfcGVyX3dvcmQpOworCQkJZ290byBmYWlsOworCQl9CisJCWlmICh4ZmVyLT5zcGVlZF9oeikgeworCQkJdTMyIHJlYWxfc3BlZWQgPSBNQ0ZRU1BJX0JVU0NMSyAvCisJCQkJbWNmcXNwaV9xbXJfYmF1ZCh4ZmVyLT5zcGVlZF9oeik7CisJCQlpZiAocmVhbF9zcGVlZCAhPSB4ZmVyLT5zcGVlZF9oeikKKwkJCQlkZXZfZGJnKCZzcGktPmRldiwKKwkJCQkJInVzaW5nIHNwZWVkICVkIGluc3RlYWQgb2YgJWRcbiIsCisJCQkJCXJlYWxfc3BlZWQsIHhmZXItPnNwZWVkX2h6KTsKKwkJfQorCX0KKwltc2ctPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwltc2ctPmFjdHVhbF9sZW5ndGggPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1jZnFzcGktPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZtc2ctPnF1ZXVlLCAmbWNmcXNwaS0+bXNncSk7CisJcXVldWVfd29yayhtY2Zxc3BpLT53b3JrcSwgJm1jZnFzcGktPndvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jZnFzcGktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworZmFpbDoKKwltc2ctPnN0YXR1cyA9IC1FSU5WQUw7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgbWNmcXNwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWlmICgoc3BpLT5iaXRzX3Blcl93b3JkIDwgOCkgfHwgKHNwaS0+Yml0c19wZXJfd29yZCA+IDE2KSkgeworCQlkZXZfZGJnKCZzcGktPmRldiwgIiVkIGJpdHMgcGVyIHdvcmQgaXMgbm90IHN1cHBvcnRlZFxuIiwKKwkJCXNwaS0+Yml0c19wZXJfd29yZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoc3BpLT5jaGlwX3NlbGVjdCA+PSBzcGktPm1hc3Rlci0+bnVtX2NoaXBzZWxlY3QpIHsKKwkJZGV2X2RiZygmc3BpLT5kZXYsICIlZCBjaGlwIHNlbGVjdCBpcyBvdXQgb2YgcmFuZ2VcbiIsCisJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWNmcXNwaV9jc19kZXNlbGVjdChzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKSwKKwkJCSAgICBzcGktPmNoaXBfc2VsZWN0LCBzcGktPm1vZGUgJiBTUElfQ1NfSElHSCk7CisKKwlkZXZfZGJnKCZzcGktPmRldiwKKwkJCSJiaXRzIHBlciB3b3JkICVkLCBjaGlwIHNlbGVjdCAlZCwgc3BlZWQgJWQgS0h6XG4iLAorCQkJc3BpLT5iaXRzX3Blcl93b3JkLCBzcGktPmNoaXBfc2VsZWN0LAorCQkJKE1DRlFTUElfQlVTQ0xLIC8gbWNmcXNwaV9xbXJfYmF1ZChzcGktPm1heF9zcGVlZF9oeikpCisJCQkvIDEwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1jZnFzcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBtY2Zxc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCBzdGF0dXM7CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZigqbWNmcXNwaSkpOworCWlmIChtYXN0ZXIgPT0gTlVMTCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJzcGlfYWxsb2NfbWFzdGVyIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1jZnFzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9yZXNvdXJjZSBmYWlsZWRcbiIpOworCQlzdGF0dXMgPSAtRU5YSU87CisJCWdvdG8gZmFpbDA7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGZhaWwwOworCX0KKworCW1jZnFzcGktPmlvYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIW1jZnFzcGktPmlvYmFzZSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDE7CisJfQorCisJbWNmcXNwaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAobWNmcXNwaS0+aXJxIDwgMCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJwbGF0Zm9ybV9nZXRfaXJxIGZhaWxlZFxuIik7CisJCXN0YXR1cyA9IC1FTlhJTzsKKwkJZ290byBmYWlsMjsKKwl9CisKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShtY2Zxc3BpLT5pcnEsIG1jZnFzcGlfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsCisJCQkgICAgIHBkZXYtPm5hbWUsIG1jZnFzcGkpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsMjsKKwl9CisKKwltY2Zxc3BpLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJxc3BpX2NsayIpOworCWlmIChJU19FUlIobWNmcXNwaS0+Y2xrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjbGtfZ2V0IGZhaWxlZFxuIik7CisJCXN0YXR1cyA9IFBUUl9FUlIobWNmcXNwaS0+Y2xrKTsKKwkJZ290byBmYWlsMzsKKwl9CisJY2xrX2VuYWJsZShtY2Zxc3BpLT5jbGspOworCisJbWNmcXNwaS0+d29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKKwlpZiAoIW1jZnFzcGktPndvcmtxKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNyZWF0ZV93b3JrcXVldWUgZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmYWlsNDsKKwl9CisJSU5JVF9XT1JLKCZtY2Zxc3BpLT53b3JrLCBtY2Zxc3BpX3dvcmspOworCXNwaW5fbG9ja19pbml0KCZtY2Zxc3BpLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbWNmcXNwaS0+bXNncSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWNmcXNwaS0+d2FpdHEpOworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInBsYXRmb3JtIGRhdGEgaXMgbWlzc2luZ1xuIik7CisJCWdvdG8gZmFpbDU7CisJfQorCW1hc3Rlci0+YnVzX251bSA9IHBkYXRhLT5idXNfbnVtOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBwZGF0YS0+bnVtX2NoaXBzZWxlY3Q7CisKKwltY2Zxc3BpLT5jc19jb250cm9sID0gcGRhdGEtPmNzX2NvbnRyb2w7CisJc3RhdHVzID0gbWNmcXNwaV9jc19zZXR1cChtY2Zxc3BpKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImVycm9yIGluaXRpYWxpemluZyBjc19jb250cm9sXG4iKTsKKwkJZ290byBmYWlsNTsKKwl9CisKKwltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DU19ISUdIIHwgU1BJX0NQT0wgfCBTUElfQ1BIQTsKKwltYXN0ZXItPnNldHVwID0gbWNmcXNwaV9zZXR1cDsKKwltYXN0ZXItPnRyYW5zZmVyID0gbWNmcXNwaV90cmFuc2ZlcjsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1hc3Rlcik7CisKKwlzdGF0dXMgPSBzcGlfcmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJzcGlfcmVnaXN0ZXJfbWFzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDY7CisJfQorCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDb2xkZmlyZSBRU1BJIGJ1cyBkcml2ZXJcbiIpOworCisJcmV0dXJuIDA7CisKK2ZhaWw2OgorCW1jZnFzcGlfY3NfdGVhcmRvd24obWNmcXNwaSk7CitmYWlsNToKKwlkZXN0cm95X3dvcmtxdWV1ZShtY2Zxc3BpLT53b3JrcSk7CitmYWlsNDoKKwljbGtfZGlzYWJsZShtY2Zxc3BpLT5jbGspOworCWNsa19wdXQobWNmcXNwaS0+Y2xrKTsKK2ZhaWwzOgorCWZyZWVfaXJxKG1jZnFzcGktPmlycSwgbWNmcXNwaSk7CitmYWlsMjoKKwlpb3VubWFwKG1jZnFzcGktPmlvYmFzZSk7CitmYWlsMToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZhaWwwOgorCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJDb2xkZmlyZSBRU1BJIHByb2JlIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtY2Zxc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwkvKiBkaXNhYmxlIHRoZSBoYXJkd2FyZSAoc2V0IHRoZSBiYXVkIHJhdGUgdG8gMCkgKi8KKwltY2Zxc3BpX3dyX3FtcihtY2Zxc3BpLCBNQ0ZRU1BJX1FNUl9NU1RSKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCW1jZnFzcGlfY3NfdGVhcmRvd24obWNmcXNwaSk7CisJZGVzdHJveV93b3JrcXVldWUobWNmcXNwaS0+d29ya3EpOworCWNsa19kaXNhYmxlKG1jZnFzcGktPmNsayk7CisJY2xrX3B1dChtY2Zxc3BpLT5jbGspOworCWZyZWVfaXJxKG1jZnFzcGktPmlycSwgbWNmcXNwaSk7CisJaW91bm1hcChtY2Zxc3BpLT5pb2Jhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCXNwaV91bnJlZ2lzdGVyX21hc3RlcihtYXN0ZXIpOworCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IG1jZnFzcGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisKKwljbGtfZGlzYWJsZShtY2Zxc3BpLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNmcXNwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCisJY2xrX2VuYWJsZShtY2Zxc3BpLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBtY2Zxc3BpX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBtY2Zxc3BpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBtY2Zxc3BpX3Jlc3VtZSwKK307CisKKyNkZWZpbmUJTUNGUVNQSV9ERVZfUE1fT1BTCSgmbWNmcXNwaV9kZXZfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUJTUNGUVNQSV9ERVZfUE1fT1BTCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtY2Zxc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLmRyaXZlci5wbQk9IE1DRlFTUElfREVWX1BNX09QUywKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1jZnFzcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1jZnFzcGlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm1jZnFzcGlfZHJpdmVyLCBtY2Zxc3BpX3Byb2JlKTsKK30KK21vZHVsZV9pbml0KG1jZnFzcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtY2Zxc3BpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWNmcXNwaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWNmcXNwaV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU3RldmVuIEtpbmcgPHNma2luZ0BmZHdkYy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbGRmaXJlIFFTUEkgQ29udHJvbGxlciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUklWRVJfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kYXZpbmNpX3NwaS5jIGIvZHJpdmVycy9zcGkvZGF2aW5jaV9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjVhYjYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvZGF2aW5jaV9zcGkuYwpAQCAtMCwwICsxLDEyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorCisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KKyNpbmNsdWRlIDxtYWNoL2VkbWEuaD4KKworI2RlZmluZSBTUElfTk9fUkVTT1VSQ0UJCSgocmVzb3VyY2Vfc2l6ZV90KS0xKQorCisjZGVmaW5lIFNQSV9NQVhfQ0hJUFNFTEVDVAkyCisKKyNkZWZpbmUgQ1NfREVGQVVMVAkweEZGCisKKyNkZWZpbmUgU1BJX0JVRlNJWgkoU01QX0NBQ0hFX0JZVEVTICsgMSkKKyNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1M4CTB4MDEKKyNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1MxNgkweDAyCisjZGVmaW5lIERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMzIJMHgwNAorCisjZGVmaW5lIFNQSUZNVF9QSEFTRV9NQVNLCUJJVCgxNikKKyNkZWZpbmUgU1BJRk1UX1BPTEFSSVRZX01BU0sJQklUKDE3KQorI2RlZmluZSBTUElGTVRfRElTVElNRVJfTUFTSwlCSVQoMTgpCisjZGVmaW5lIFNQSUZNVF9TSElGVERJUl9NQVNLCUJJVCgyMCkKKyNkZWZpbmUgU1BJRk1UX1dBSVRFTkFfTUFTSwlCSVQoMjEpCisjZGVmaW5lIFNQSUZNVF9QQVJJVFlFTkFfTUFTSwlCSVQoMjIpCisjZGVmaW5lIFNQSUZNVF9PRERfUEFSSVRZX01BU0sJQklUKDIzKQorI2RlZmluZSBTUElGTVRfV0RFTEFZX01BU0sJMHgzZjAwMDAwMHUKKyNkZWZpbmUgU1BJRk1UX1dERUxBWV9TSElGVAkyNAorI2RlZmluZSBTUElGTVRfQ0hBUkxFTl9NQVNLCTB4MDAwMDAwMUZ1CisKKy8qIFNQSUdDUjEgKi8KKyNkZWZpbmUgU1BJR0NSMV9TUElFTkFfTUFTSwkweDAxMDAwMDAwdQorCisvKiBTUElQQzAgKi8KKyNkZWZpbmUgU1BJUEMwX0RJRlVOX01BU0sJQklUKDExKQkJLyogTUlTTyAqLworI2RlZmluZSBTUElQQzBfRE9GVU5fTUFTSwlCSVQoMTApCQkvKiBNT1NJICovCisjZGVmaW5lIFNQSVBDMF9DTEtGVU5fTUFTSwlCSVQoOSkJCS8qIENMSyAqLworI2RlZmluZSBTUElQQzBfU1BJRU5BX01BU0sJQklUKDgpCQkvKiBuUkVBRFkgKi8KKyNkZWZpbmUgU1BJUEMwX0VOMUZVTl9NQVNLCUJJVCgxKQorI2RlZmluZSBTUElQQzBfRU4wRlVOX01BU0sJQklUKDApCisKKyNkZWZpbmUgU1BJSU5UX01BU0tBTEwJCTB4MDEwMTAzNUYKKyNkZWZpbmUgU1BJX0lOVExWTF8xCQkweDAwMDAwMUZGdQorI2RlZmluZSBTUElfSU5UTFZMXzAJCTB4MDAwMDAwMDB1CisKKy8qIFNQSURBVDEgKi8KKyNkZWZpbmUgU1BJREFUMV9DU0hPTERfU0hJRlQJMjgKKyNkZWZpbmUgU1BJREFUMV9DU05SX1NISUZUCTE2CisjZGVmaW5lIFNQSUdDUjFfQ0xLTU9EX01BU0sJQklUKDEpCisjZGVmaW5lIFNQSUdDUjFfTUFTVEVSX01BU0sgICAgIEJJVCgwKQorI2RlZmluZSBTUElHQ1IxX0xPT1BCQUNLX01BU0sJQklUKDE2KQorCisvKiBTUElCVUYgKi8KKyNkZWZpbmUgU1BJQlVGX1RYRlVMTF9NQVNLCUJJVCgyOSkKKyNkZWZpbmUgU1BJQlVGX1JYRU1QVFlfTUFTSwlCSVQoMzEpCisKKy8qIEVycm9yIE1hc2tzICovCisjZGVmaW5lIFNQSUZMR19ETEVOX0VSUl9NQVNLCQlCSVQoMCkKKyNkZWZpbmUgU1BJRkxHX1RJTUVPVVRfTUFTSwkJQklUKDEpCisjZGVmaW5lIFNQSUZMR19QQVJFUlJfTUFTSwkJQklUKDIpCisjZGVmaW5lIFNQSUZMR19ERVNZTkNfTUFTSwkJQklUKDMpCisjZGVmaW5lIFNQSUZMR19CSVRFUlJfTUFTSwkJQklUKDQpCisjZGVmaW5lIFNQSUZMR19PVlJSVU5fTUFTSwkJQklUKDYpCisjZGVmaW5lIFNQSUZMR19SWF9JTlRSX01BU0sJCUJJVCg4KQorI2RlZmluZSBTUElGTEdfVFhfSU5UUl9NQVNLCQlCSVQoOSkKKyNkZWZpbmUgU1BJRkxHX0JVRl9JTklUX0FDVElWRV9NQVNLCUJJVCgyNCkKKyNkZWZpbmUgU1BJRkxHX01BU0sJCQkoU1BJRkxHX0RMRU5fRVJSX01BU0sgXAorCQkJCXwgU1BJRkxHX1RJTUVPVVRfTUFTSyB8IFNQSUZMR19QQVJFUlJfTUFTSyBcCisJCQkJfCBTUElGTEdfREVTWU5DX01BU0sgfCBTUElGTEdfQklURVJSX01BU0sgXAorCQkJCXwgU1BJRkxHX09WUlJVTl9NQVNLIHwgU1BJRkxHX1JYX0lOVFJfTUFTSyBcCisJCQkJfCBTUElGTEdfVFhfSU5UUl9NQVNLIFwKKwkJCQl8IFNQSUZMR19CVUZfSU5JVF9BQ1RJVkVfTUFTSykKKworI2RlZmluZSBTUElJTlRfRExFTl9FUlJfSU5UUglCSVQoMCkKKyNkZWZpbmUgU1BJSU5UX1RJTUVPVVRfSU5UUglCSVQoMSkKKyNkZWZpbmUgU1BJSU5UX1BBUkVSUl9JTlRSCUJJVCgyKQorI2RlZmluZSBTUElJTlRfREVTWU5DX0lOVFIJQklUKDMpCisjZGVmaW5lIFNQSUlOVF9CSVRFUlJfSU5UUglCSVQoNCkKKyNkZWZpbmUgU1BJSU5UX09WUlJVTl9JTlRSCUJJVCg2KQorI2RlZmluZSBTUElJTlRfUlhfSU5UUgkJQklUKDgpCisjZGVmaW5lIFNQSUlOVF9UWF9JTlRSCQlCSVQoOSkKKyNkZWZpbmUgU1BJSU5UX0RNQV9SRVFfRU4JQklUKDE2KQorI2RlZmluZSBTUElJTlRfRU5BQkxFX0hJR0haCUJJVCgyNCkKKworI2RlZmluZSBTUElfVDJDREVMQVlfU0hJRlQJMTYKKyNkZWZpbmUgU1BJX0MyVERFTEFZX1NISUZUCTI0CisKKy8qIFNQSSBDb250cm9sbGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBTUElHQ1IwCQkweDAwCisjZGVmaW5lIFNQSUdDUjEJCTB4MDQKKyNkZWZpbmUgU1BJSU5UCQkweDA4CisjZGVmaW5lIFNQSUxWTAkJMHgwYworI2RlZmluZSBTUElGTEcJCTB4MTAKKyNkZWZpbmUgU1BJUEMwCQkweDE0CisjZGVmaW5lIFNQSVBDMQkJMHgxOAorI2RlZmluZSBTUElQQzIJCTB4MWMKKyNkZWZpbmUgU1BJUEMzCQkweDIwCisjZGVmaW5lIFNQSVBDNAkJMHgyNAorI2RlZmluZSBTUElQQzUJCTB4MjgKKyNkZWZpbmUgU1BJUEM2CQkweDJjCisjZGVmaW5lIFNQSVBDNwkJMHgzMAorI2RlZmluZSBTUElQQzgJCTB4MzQKKyNkZWZpbmUgU1BJREFUMAkJMHgzOAorI2RlZmluZSBTUElEQVQxCQkweDNjCisjZGVmaW5lIFNQSUJVRgkJMHg0MAorI2RlZmluZSBTUElFTVUJCTB4NDQKKyNkZWZpbmUgU1BJREVMQVkJMHg0OAorI2RlZmluZSBTUElERUYJCTB4NGMKKyNkZWZpbmUgU1BJRk1UMAkJMHg1MAorI2RlZmluZSBTUElGTVQxCQkweDU0CisjZGVmaW5lIFNQSUZNVDIJCTB4NTgKKyNkZWZpbmUgU1BJRk1UMwkJMHg1YworI2RlZmluZSBUR0lOVFZFQzAJMHg2MAorI2RlZmluZSBUR0lOVFZFQzEJMHg2NAorCitzdHJ1Y3QgZGF2aW5jaV9zcGlfc2xhdmUgeworCXUzMgljbWRfdG9fd3JpdGU7CisJdTMyCWNsa19jdHJsX3RvX3dyaXRlOworCXUzMglieXRlc19wZXJfd29yZDsKKwl1OAlhY3RpdmVfY3M7Cit9OworCisvKiBXZSBoYXZlIDIgRE1BIGNoYW5uZWxzIHBlciBDUywgb25lIGZvciBSWCBhbmQgb25lIGZvciBUWCAqLworc3RydWN0IGRhdmluY2lfc3BpX2RtYSB7CisJaW50CQkJZG1hX3R4X2NoYW5uZWw7CisJaW50CQkJZG1hX3J4X2NoYW5uZWw7CisJaW50CQkJZG1hX3R4X3N5bmNfZGV2OworCWludAkJCWRtYV9yeF9zeW5jX2RldjsKKwllbnVtIGRtYV9ldmVudF9xCWV2ZW50cTsKKworCXN0cnVjdCBjb21wbGV0aW9uCWRtYV90eF9jb21wbGV0aW9uOworCXN0cnVjdCBjb21wbGV0aW9uCWRtYV9yeF9jb21wbGV0aW9uOworfTsKKworLyogU1BJIENvbnRyb2xsZXIgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhLiAqLworc3RydWN0IGRhdmluY2lfc3BpIHsKKwlzdHJ1Y3Qgc3BpX2JpdGJhbmcJYml0YmFuZzsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCisJdTgJCQl2ZXJzaW9uOworCXJlc291cmNlX3NpemVfdAkJcGJhc2U7CisJdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwlzaXplX3QJCQlyZWdpb25fc2l6ZTsKKwl1MzIJCQlpcnE7CisJc3RydWN0IGNvbXBsZXRpb24JZG9uZTsKKworCWNvbnN0IHZvaWQJCSp0eDsKKwl2b2lkCQkJKnJ4OworCXU4CQkJKnRtcF9idWY7CisJaW50CQkJY291bnQ7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYQkqZG1hX2NoYW5uZWxzOworCXN0cnVjdAkJCWRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJdm9pZAkJCSgqZ2V0X3J4KSh1MzIgcnhfZGF0YSwgc3RydWN0IGRhdmluY2lfc3BpICopOworCXUzMgkJCSgqZ2V0X3R4KShzdHJ1Y3QgZGF2aW5jaV9zcGkgKik7CisKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfc2xhdmUgc2xhdmVbU1BJX01BWF9DSElQU0VMRUNUXTsKK307CisKK3N0YXRpYyB1bnNpZ25lZCB1c2VfZG1hOworCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9yeF9idWZfdTgodTMyIGRhdGEsIHN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkpCit7CisJdTggKnJ4ID0gZGF2aW5jaV9zcGktPnJ4OworCisJKnJ4KysgPSAodTgpZGF0YTsKKwlkYXZpbmNpX3NwaS0+cnggPSByeDsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfcnhfYnVmX3UxNih1MzIgZGF0YSwgc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3sKKwl1MTYgKnJ4ID0gZGF2aW5jaV9zcGktPnJ4OworCisJKnJ4KysgPSAodTE2KWRhdGE7CisJZGF2aW5jaV9zcGktPnJ4ID0gcng7Cit9CisKK3N0YXRpYyB1MzIgZGF2aW5jaV9zcGlfdHhfYnVmX3U4KHN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkpCit7CisJdTMyIGRhdGE7CisJY29uc3QgdTggKnR4ID0gZGF2aW5jaV9zcGktPnR4OworCisJZGF0YSA9ICp0eCsrOworCWRhdmluY2lfc3BpLT50eCA9IHR4OworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdTMyIGRhdmluY2lfc3BpX3R4X2J1Zl91MTYoc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3sKKwl1MzIgZGF0YTsKKwljb25zdCB1MTYgKnR4ID0gZGF2aW5jaV9zcGktPnR4OworCisJZGF0YSA9ICp0eCsrOworCWRhdmluY2lfc3BpLT50eCA9IHR4OworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lvX2JpdHModm9pZCBfX2lvbWVtICphZGRyLCB1MzIgYml0cykKK3sKKwl1MzIgdiA9IGlvcmVhZDMyKGFkZHIpOworCisJdiB8PSBiaXRzOworCWlvd3JpdGUzMih2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2lvX2JpdHModm9pZCBfX2lvbWVtICphZGRyLCB1MzIgYml0cykKK3sKKwl1MzIgdiA9IGlvcmVhZDMyKGFkZHIpOworCisJdiAmPSB+Yml0czsKKwlpb3dyaXRlMzIodiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZm10X2JpdHModm9pZCBfX2lvbWVtICphZGRyLCB1MzIgYml0cywgaW50IGNzX251bSkKK3sKKwlzZXRfaW9fYml0cyhhZGRyICsgU1BJRk1UMCArICgweDQgKiBjc19udW0pLCBiaXRzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2ZtdF9iaXRzKHZvaWQgX19pb21lbSAqYWRkciwgdTMyIGJpdHMsIGludCBjc19udW0pCit7CisJY2xlYXJfaW9fYml0cyhhZGRyICsgU1BJRk1UMCArICgweDQgKiBjc19udW0pLCBiaXRzKTsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfc2V0X2RtYV9yZXEoY29uc3Qgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwlpZiAoZW5hYmxlKQorCQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCwgU1BJSU5UX0RNQV9SRVFfRU4pOworCWVsc2UKKwkJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCwgU1BJSU5UX0RNQV9SRVFfRU4pOworfQorCisvKgorICogSW50ZXJmYWNlIHRvIGNvbnRyb2wgdGhlIGNoaXAgc2VsZWN0IHNpZ25hbAorICovCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwl1MzIgZGF0YTFfcmVnX3ZhbCA9IDA7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOworCisJLyoKKwkgKiBCb2FyZCBzcGVjaWZpYyBjaGlwIHNlbGVjdCBsb2dpYyBkZWNpZGVzIHRoZSBwb2xhcml0eSBhbmQgY3MKKwkgKiBsaW5lIGZvciB0aGUgY29udHJvbGxlcgorCSAqLworCWlmICh2YWx1ZSA9PSBCSVRCQU5HX0NTX0lOQUNUSVZFKSB7CisJCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJREVGLCBDU19ERUZBVUxUKTsKKworCQlkYXRhMV9yZWdfdmFsIHw9IENTX0RFRkFVTFQgPDwgU1BJREFUMV9DU05SX1NISUZUOworCQlpb3dyaXRlMzIoZGF0YTFfcmVnX3ZhbCwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElEQVQxKTsKKworCQl3aGlsZSAoKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKQorCQkJCQkmIFNQSUJVRl9SWEVNUFRZX01BU0spID09IDApCisJCQljcHVfcmVsYXgoKTsKKwl9Cit9CisKKy8qKgorICogZGF2aW5jaV9zcGlfc2V0dXBfdHJhbnNmZXIgLSBUaGlzIGZ1bmN0aW9ucyB3aWxsIGRldGVybWluZSB0cmFuc2ZlciBtZXRob2QKKyAqIEBzcGk6IHNwaSBkZXZpY2Ugb24gd2hpY2ggZGF0YSB0cmFuc2ZlciB0byBiZSBkb25lCisgKiBAdDogc3BpIHRyYW5zZmVyIGluIHdoaWNoIHRyYW5zZmVyIGluZm8gaXMgZmlsbGVkCisgKgorICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGRhdGEgdHJhbnNmZXIgbWV0aG9kICg4LzE2LzMyIGJpdCB0cmFuc2ZlcikuCisgKiBJdCB3aWxsIGFsc28gc2V0IHRoZSBTUEkgQ2xvY2sgQ29udHJvbCByZWdpc3RlciBhY2NvcmRpbmcgdG8KKyAqIFNQSSBzbGF2ZSBkZXZpY2UgZnJlcS4KKyAqLworc3RhdGljIGludCBkYXZpbmNpX3NwaV9zZXR1cF90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJdTggYml0c19wZXJfd29yZCA9IDA7CisJdTMyIGh6ID0gMCwgcHJlc2NhbGU7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOworCisJaWYgKHQpIHsKKwkJYml0c19wZXJfd29yZCA9IHQtPmJpdHNfcGVyX3dvcmQ7CisJCWh6ID0gdC0+c3BlZWRfaHo7CisJfQorCisJLyogaWYgYml0c19wZXJfd29yZCBpcyBub3Qgc2V0IHRoZW4gc2V0IGl0IGRlZmF1bHQgKi8KKwlpZiAoIWJpdHNfcGVyX3dvcmQpCisJCWJpdHNfcGVyX3dvcmQgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CisKKwkvKgorCSAqIEFzc2lnbiBmdW5jdGlvbiBwb2ludGVyIHRvIGFwcHJvcHJpYXRlIHRyYW5zZmVyIG1ldGhvZAorCSAqIDhiaXQsIDE2Yml0IG9yIDMyYml0IHRyYW5zZmVyCisJICovCisJaWYgKGJpdHNfcGVyX3dvcmQgPD0gOCAmJiBiaXRzX3Blcl93b3JkID49IDIpIHsKKwkJZGF2aW5jaV9zcGktPmdldF9yeCA9IGRhdmluY2lfc3BpX3J4X2J1Zl91ODsKKwkJZGF2aW5jaV9zcGktPmdldF90eCA9IGRhdmluY2lfc3BpX3R4X2J1Zl91ODsKKwkJZGF2aW5jaV9zcGktPnNsYXZlW3NwaS0+Y2hpcF9zZWxlY3RdLmJ5dGVzX3Blcl93b3JkID0gMTsKKwl9IGVsc2UgaWYgKGJpdHNfcGVyX3dvcmQgPD0gMTYgJiYgYml0c19wZXJfd29yZCA+PSAyKSB7CisJCWRhdmluY2lfc3BpLT5nZXRfcnggPSBkYXZpbmNpX3NwaV9yeF9idWZfdTE2OworCQlkYXZpbmNpX3NwaS0+Z2V0X3R4ID0gZGF2aW5jaV9zcGlfdHhfYnVmX3UxNjsKKwkJZGF2aW5jaV9zcGktPnNsYXZlW3NwaS0+Y2hpcF9zZWxlY3RdLmJ5dGVzX3Blcl93b3JkID0gMjsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWh6KQorCQloeiA9IHNwaS0+bWF4X3NwZWVkX2h6OworCisJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9DSEFSTEVOX01BU0ssCisJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIGJpdHNfcGVyX3dvcmQgJiAweDFmLAorCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwlwcmVzY2FsZSA9ICgoY2xrX2dldF9yYXRlKGRhdmluY2lfc3BpLT5jbGspIC8gaHopIC0gMSkgJiAweGZmOworCisJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIDB4MDAwMGZmMDAsIHNwaS0+Y2hpcF9zZWxlY3QpOworCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgcHJlc2NhbGUgPDwgOCwgc3BpLT5jaGlwX3NlbGVjdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfZG1hX3J4X2NhbGxiYWNrKHVuc2lnbmVkIGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gKHN0cnVjdCBzcGlfZGV2aWNlICopZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRhdmluY2lfc3BpX2RtYTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCWRhdmluY2lfc3BpX2RtYSA9ICYoZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XSk7CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisKKwlpZiAoY2hfc3RhdHVzID09IERNQV9DT01QTEVURSkKKwkJZWRtYV9zdG9wKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwpOworCWVsc2UKKwkJZWRtYV9jbGVhbl9jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwpOworCisJY29tcGxldGUoJmRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NvbXBsZXRpb24pOworCS8qIFdlIG11c3QgZGlzYWJsZSB0aGUgRE1BIFJYIHJlcXVlc3QgKi8KKwlkYXZpbmNpX3NwaV9zZXRfZG1hX3JlcShzcGksIDApOworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9kbWFfdHhfY2FsbGJhY2sodW5zaWduZWQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSAoc3RydWN0IHNwaV9kZXZpY2UgKilkYXRhOworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZGF2aW5jaV9zcGlfZG1hOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJZGF2aW5jaV9zcGlfZG1hID0gJihkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdKTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKworCWlmIChjaF9zdGF0dXMgPT0gRE1BX0NPTVBMRVRFKQorCQllZG1hX3N0b3AoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCk7CisJZWxzZQorCQllZG1hX2NsZWFuX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCk7CisKKwljb21wbGV0ZSgmZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY29tcGxldGlvbik7CisJLyogV2UgbXVzdCBkaXNhYmxlIHRoZSBETUEgVFggcmVxdWVzdCAqLworCWRhdmluY2lfc3BpX3NldF9kbWFfcmVxKHNwaSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfcmVxdWVzdF9kbWEoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRhdmluY2lfc3BpX2RtYTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGRldmljZSAqc2RldjsKKwlpbnQgcjsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJZGF2aW5jaV9zcGlfZG1hID0gJmRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF07CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisJc2RldiA9IGRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3Rlci0+ZGV2LnBhcmVudDsKKworCXIgPSBlZG1hX2FsbG9jX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfc3luY19kZXYsCisJCQkJZGF2aW5jaV9zcGlfZG1hX3J4X2NhbGxiYWNrLCBzcGksCisJCQkJZGF2aW5jaV9zcGlfZG1hLT5ldmVudHEpOworCWlmIChyIDwgMCkgeworCQlkZXZfZGJnKHNkZXYsICJVbmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbCBmb3IgU1BJIFJYXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwgPSByOworCXIgPSBlZG1hX2FsbG9jX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfc3luY19kZXYsCisJCQkJZGF2aW5jaV9zcGlfZG1hX3R4X2NhbGxiYWNrLCBzcGksCisJCQkJZGF2aW5jaV9zcGlfZG1hLT5ldmVudHEpOworCWlmIChyIDwgMCkgeworCQllZG1hX2ZyZWVfY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsKTsKKwkJZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCA9IC0xOworCQlkZXZfZGJnKHNkZXYsICJVbmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbCBmb3IgU1BJIFRYXG4iKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwgPSByOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZGF2aW5jaV9zcGlfc2V0dXAgLSBUaGlzIGZ1bmN0aW9ucyB3aWxsIHNldCBkZWZhdWx0IHRyYW5zZmVyIG1ldGhvZAorICogQHNwaTogc3BpIGRldmljZSBvbiB3aGljaCBkYXRhIHRyYW5zZmVyIHRvIGJlIGRvbmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9ucyBzZXRzIHRoZSBkZWZhdWx0IHRyYW5zZmVyIG1ldGhvZC4KKyAqLworCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRhdmluY2lfc3BpX2RtYTsKKwlzdHJ1Y3QgZGV2aWNlICpzZGV2OworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzZGV2ID0gZGF2aW5jaV9zcGktPmJpdGJhbmcubWFzdGVyLT5kZXYucGFyZW50OworCisJLyogaWYgYml0cyBwZXIgd29yZCBsZW5ndGggaXMgemVybyB0aGVuIHNldCBpdCBkZWZhdWx0IDggKi8KKwlpZiAoIXNwaS0+Yml0c19wZXJfd29yZCkKKwkJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKworCWRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5jbWRfdG9fd3JpdGUgPSAwOworCisJaWYgKHVzZV9kbWEgJiYgZGF2aW5jaV9zcGktPmRtYV9jaGFubmVscykgeworCQlkYXZpbmNpX3NwaV9kbWEgPSAmZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XTsKKworCQlpZiAoKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwgPT0gLTEpCisJCQkJfHwgKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwgPT0gLTEpKSB7CisJCQlyZXR2YWwgPSBkYXZpbmNpX3NwaV9yZXF1ZXN0X2RtYShzcGkpOworCQkJaWYgKHJldHZhbCA8IDApCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKworCS8qCisJICogU1BJIGluIERhVmluY2kgYW5kIERBOHh4IG9wZXJhdGUgYmV0d2VlbgorCSAqIDYwMCBLSHogYW5kIDUwIE1IegorCSAqLworCWlmIChzcGktPm1heF9zcGVlZF9oeiA8IDYwMDAwMCB8fCBzcGktPm1heF9zcGVlZF9oeiA+IDUwMDAwMDAwKSB7CisJCWRldl9kYmcoc2RldiwgIk9wZXJhdGluZyBmcmVxdWVuY3kgaXMgbm90IGluIGFjY2VwdGFibGUgIgorCQkJCSJyYW5nZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogU2V0IHVwIFNQSUZNVG4gcmVnaXN0ZXIsIHVuaXF1ZSB0byB0aGlzIGNoaXBzZWxlY3QuCisJICoKKwkgKiBOT1RFOiB3ZSBjb3VsZCBkbyBhbGwgb2YgdGhlc2Ugd2l0aCBvbmUgd3JpdGUuICBBbHNvLCBzb21lCisJICogb2YgdGhlICJ2ZXJzaW9uIDIiIGZlYXR1cmVzIGFyZSBmb3VuZCBpbiBjaGlwcyB0aGF0IGRvbid0CisJICogc3VwcG9ydCBhbGwgb2YgdGhlbS4uLgorCSAqLworCWlmIChzcGktPm1vZGUgJiBTUElfTFNCX0ZJUlNUKQorCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9TSElGVERJUl9NQVNLLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCWVsc2UKKwkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9TSElGVERJUl9NQVNLLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCisJaWYgKHNwaS0+bW9kZSAmIFNQSV9DUE9MKQorCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9QT0xBUklUWV9NQVNLLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCWVsc2UKKwkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9QT0xBUklUWV9NQVNLLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCisJaWYgKCEoc3BpLT5tb2RlICYgU1BJX0NQSEEpKQorCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9QSEFTRV9NQVNLLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCWVsc2UKKwkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsIFNQSUZNVF9QSEFTRV9NQVNLLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCisJLyoKKwkgKiBWZXJzaW9uIDEgaGFyZHdhcmUgc3VwcG9ydHMgdHdvIGJhc2ljIFNQSSBtb2RlczoKKwkgKiAgLSBTdGFuZGFyZCBTUEkgbW9kZSB1c2VzIDQgcGlucywgd2l0aCBjaGlwc2VsZWN0CisJICogIC0gMyBwaW4gU1BJIGlzIGEgNCBwaW4gdmFyaWFudCB3aXRob3V0IENTIChTUElfTk9fQ1MpCisJICoJKGRpc3RpbmN0IGZyb20gU1BJXzNXSVJFLCB3aXRoIGp1c3Qgb25lIGRhdGEgd2lyZTsKKwkgKglvciBzaW1pbGFyIHZhcmlhbnRzIHdpdGhvdXQgTU9TSSBvciB3aXRob3V0IE1JU08pCisJICoKKwkgKiBWZXJzaW9uIDIgaGFyZHdhcmUgc3VwcG9ydHMgYW4gb3B0aW9uYWwgaGFuZHNoYWtpbmcgc2lnbmFsLAorCSAqIHNvIGl0IGNhbiBzdXBwb3J0IHR3byBtb3JlIG1vZGVzOgorCSAqICAtIDUgcGluIFNQSSB2YXJpYW50IGlzIHN0YW5kYXJkIFNQSSBwbHVzIFNQSV9SRUFEWQorCSAqICAtIDQgcGluIHdpdGggZW5hYmxlIGlzIChTUElfUkVBRFkgfCBTUElfTk9fQ1MpCisJICovCisKKwlpZiAoZGF2aW5jaV9zcGktPnZlcnNpb24gPT0gU1BJX1ZFUlNJT05fMikgeworCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1dERUxBWV9NQVNLLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJKGRhdmluY2lfc3BpLT5wZGF0YS0+d2RlbGF5CisJCQkJCQk8PCBTUElGTVRfV0RFTEFZX1NISUZUKQorCQkJCQkmIFNQSUZNVF9XREVMQVlfTUFTSywKKwkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKworCQlpZiAoZGF2aW5jaV9zcGktPnBkYXRhLT5vZGRfcGFyaXR5KQorCQkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAorCQkJCQlTUElGTVRfT0REX1BBUklUWV9NQVNLLAorCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwkJZWxzZQorCQkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9PRERfUEFSSVRZX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCisJCWlmIChkYXZpbmNpX3NwaS0+cGRhdGEtPnBhcml0eV9lbmFibGUpCisJCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9QQVJJVFlFTkFfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCWVsc2UKKwkJCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAorCQkJCQlTUElGTVRfUEFSSVRZRU5BX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCisJCWlmIChkYXZpbmNpX3NwaS0+cGRhdGEtPndhaXRfZW5hYmxlKQorCQkJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLAorCQkJCQlTUElGTVRfV0FJVEVOQV9NQVNLLAorCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwkJZWxzZQorCQkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9XQUlURU5BX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCisJCWlmIChkYXZpbmNpX3NwaS0+cGRhdGEtPnRpbWVyX2Rpc2FibGUpCisJCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9ESVNUSU1FUl9NQVNLLAorCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwkJZWxzZQorCQkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9ESVNUSU1FUl9NQVNLLAorCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwl9CisKKwlyZXR2YWwgPSBkYXZpbmNpX3NwaV9zZXR1cF90cmFuc2ZlcihzcGksIE5VTEwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9zcGlfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7CisKKwlkYXZpbmNpX3NwaV9kbWEgPSAmZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XTsKKworCWlmICh1c2VfZG1hICYmIGRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHMpIHsKKwkJZGF2aW5jaV9zcGlfZG1hID0gJmRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF07CisKKwkJaWYgKChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsICE9IC0xKQorCQkJCSYmIChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsICE9IC0xKSkgeworCQkJZWRtYV9mcmVlX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCk7CisJCQllZG1hX2ZyZWVfY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBkYXZpbmNpX3NwaV9idWZzX3ByZXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkgc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3sKKwlpbnQgb3BfbW9kZSA9IDA7CisKKwkvKgorCSAqIFJFVklTSVQgIHVubGVzcyBkZXZpY2VzIGRpc2FncmVlIGFib3V0IFNQSV9MT09QIG9yCisJICogU1BJX1JFQURZIChTUElfTk9fQ1Mgb25seSBhbGxvd3Mgb25lIGRldmljZSEpLCB0aGlzCisJICogc2hvdWxkIG5vdCBuZWVkIHRvIGJlIGRvbmUgYmVmb3JlIGVhY2ggbWVzc2FnZS4uLgorCSAqIG9wdGltaXplIGZvciBib3RoIGZsYWdzIHN0YXlpbmcgY2xlYXJlZC4KKwkgKi8KKworCW9wX21vZGUgPSBTUElQQzBfRElGVU5fTUFTSworCQl8IFNQSVBDMF9ET0ZVTl9NQVNLCisJCXwgU1BJUEMwX0NMS0ZVTl9NQVNLOworCWlmICghKHNwaS0+bW9kZSAmIFNQSV9OT19DUykpCisJCW9wX21vZGUgfD0gMSA8PCBzcGktPmNoaXBfc2VsZWN0OworCWlmIChzcGktPm1vZGUgJiBTUElfUkVBRFkpCisJCW9wX21vZGUgfD0gU1BJUEMwX1NQSUVOQV9NQVNLOworCisJaW93cml0ZTMyKG9wX21vZGUsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJUEMwKTsKKworCWlmIChzcGktPm1vZGUgJiBTUElfTE9PUCkKKwkJc2V0X2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IxLAorCQkJCVNQSUdDUjFfTE9PUEJBQ0tfTUFTSyk7CisJZWxzZQorCQljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwKKwkJCQlTUElHQ1IxX0xPT1BCQUNLX01BU0spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfY2hlY2tfZXJyb3Ioc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSwKKwkJCQkgICBpbnQgaW50X3N0YXR1cykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpzZGV2ID0gZGF2aW5jaV9zcGktPmJpdGJhbmcubWFzdGVyLT5kZXYucGFyZW50OworCisJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfVElNRU9VVF9NQVNLKSB7CisJCWRldl9kYmcoc2RldiwgIlNQSSBUaW1lLW91dCBFcnJvclxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKwlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19ERVNZTkNfTUFTSykgeworCQlkZXZfZGJnKHNkZXYsICJTUEkgRGVzeW5jaHJvbml6YXRpb24gRXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfQklURVJSX01BU0spIHsKKwkJZGV2X2RiZyhzZGV2LCAiU1BJIEJpdCBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkYXZpbmNpX3NwaS0+dmVyc2lvbiA9PSBTUElfVkVSU0lPTl8yKSB7CisJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX0RMRU5fRVJSX01BU0spIHsKKwkJCWRldl9kYmcoc2RldiwgIlNQSSBEYXRhIExlbmd0aCBFcnJvclxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19QQVJFUlJfTUFTSykgeworCQkJZGV2X2RiZyhzZGV2LCAiU1BJIFBhcml0eSBFcnJvclxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19PVlJSVU5fTUFTSykgeworCQkJZGV2X2RiZyhzZGV2LCAiU1BJIERhdGEgT3ZlcnJ1biBlcnJvclxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19UWF9JTlRSX01BU0spIHsKKwkJCWRldl9kYmcoc2RldiwgIlNQSSBUWCBpbnRyIGJpdCBzZXRcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfQlVGX0lOSVRfQUNUSVZFX01BU0spIHsKKwkJCWRldl9kYmcoc2RldiwgIlNQSSBCdWZmZXIgSW5pdCBBY3RpdmVcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGRhdmluY2lfc3BpX2J1ZnMgLSBmdW5jdGlvbnMgd2hpY2ggd2lsbCBoYW5kbGUgdHJhbnNmZXIgZGF0YQorICogQHNwaTogc3BpIGRldmljZSBvbiB3aGljaCBkYXRhIHRyYW5zZmVyIHRvIGJlIGRvbmUKKyAqIEB0OiBzcGkgdHJhbnNmZXIgaW4gd2hpY2ggdHJhbnNmZXIgaW5mbyBpcyBmaWxsZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcHV0IGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaW50byBkYXRhIHJlZ2lzdGVyCisgKiBvZiBTUEkgY29udHJvbGxlciBhbmQgdGhlbiB3YWl0IHVudGlsIHRoZSBjb21wbGV0aW9uIHdpbGwgYmUgbWFya2VkCisgKiBieSB0aGUgSVJRIEhhbmRsZXIuCisgKi8KK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfYnVmc19waW8oc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCWludCBpbnRfc3RhdHVzLCBjb3VudCwgcmV0OworCXU4IGNvbnYsIHRtcDsKKwl1MzIgdHhfZGF0YSwgZGF0YTFfcmVnX3ZhbDsKKwl1MzIgYnVmX3ZhbCwgZmxnX3ZhbDsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOworCisJZGF2aW5jaV9zcGktPnR4ID0gdC0+dHhfYnVmOworCWRhdmluY2lfc3BpLT5yeCA9IHQtPnJ4X2J1ZjsKKworCS8qIGNvbnZlcnQgbGVuIHRvIHdvcmRzIGJhc2VkIG9uIGJpdHNfcGVyX3dvcmQgKi8KKwljb252ID0gZGF2aW5jaV9zcGktPnNsYXZlW3NwaS0+Y2hpcF9zZWxlY3RdLmJ5dGVzX3Blcl93b3JkOworCWRhdmluY2lfc3BpLT5jb3VudCA9IHQtPmxlbiAvIGNvbnY7CisKKwlJTklUX0NPTVBMRVRJT04oZGF2aW5jaV9zcGktPmRvbmUpOworCisJcmV0ID0gZGF2aW5jaV9zcGlfYnVmc19wcmVwKHNwaSwgZGF2aW5jaV9zcGkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBFbmFibGUgU1BJICovCisJc2V0X2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IxLCBTUElHQ1IxX1NQSUVOQV9NQVNLKTsKKworCWlvd3JpdGUzMigwIHwgKHBkYXRhLT5jMnRkZWxheSA8PCBTUElfQzJUREVMQVlfU0hJRlQpIHwKKwkJCShwZGF0YS0+dDJjZGVsYXkgPDwgU1BJX1QyQ0RFTEFZX1NISUZUKSwKKwkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJREVMQVkpOworCisJY291bnQgPSBkYXZpbmNpX3NwaS0+Y291bnQ7CisJZGF0YTFfcmVnX3ZhbCA9IHBkYXRhLT5jc19ob2xkIDw8IFNQSURBVDFfQ1NIT0xEX1NISUZUOworCXRtcCA9IH4oMHgxIDw8IHNwaS0+Y2hpcF9zZWxlY3QpOworCisJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURFRiwgfnRtcCk7CisKKwlkYXRhMV9yZWdfdmFsIHw9IHRtcCA8PCBTUElEQVQxX0NTTlJfU0hJRlQ7CisKKwl3aGlsZSAoKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKQorCQkJCSYgU1BJQlVGX1JYRU1QVFlfTUFTSykgPT0gMCkKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBEZXRlcm1pbmUgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSBSRUFEIG9yIFdSSVRFICovCisJaWYgKHQtPnR4X2J1ZikgeworCQljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5ULCBTUElJTlRfTUFTS0FMTCk7CisKKwkJd2hpbGUgKDEpIHsKKwkJCXR4X2RhdGEgPSBkYXZpbmNpX3NwaS0+Z2V0X3R4KGRhdmluY2lfc3BpKTsKKworCQkJZGF0YTFfcmVnX3ZhbCAmPSB+KDB4RkZGRik7CisJCQlkYXRhMV9yZWdfdmFsIHw9ICgweEZGRkYgJiB0eF9kYXRhKTsKKworCQkJYnVmX3ZhbCA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKTsKKwkJCWlmICgoYnVmX3ZhbCAmIFNQSUJVRl9UWEZVTExfTUFTSykgPT0gMCkgeworCQkJCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLAorCQkJCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElEQVQxKTsKKworCQkJCWNvdW50LS07CisJCQl9CisJCQl3aGlsZSAoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpCisJCQkJCSYgU1BJQlVGX1JYRU1QVFlfTUFTSykKKwkJCQljcHVfcmVsYXgoKTsKKworCQkJLyogZ2V0dGluZyB0aGUgcmV0dXJuZWQgYnl0ZSAqLworCQkJaWYgKHQtPnJ4X2J1ZikgeworCQkJCWJ1Zl92YWwgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRik7CisJCQkJZGF2aW5jaV9zcGktPmdldF9yeChidWZfdmFsLCBkYXZpbmNpX3NwaSk7CisJCQl9CisJCQlpZiAoY291bnQgPD0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChwZGF0YS0+cG9sbF9tb2RlKSB7CisJCQl3aGlsZSAoMSkgeworCQkJCS8qIGtlZXBzIHRoZSBzZXJpYWwgY2xvY2sgZ29pbmcgKi8KKwkJCQlpZiAoKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKQorCQkJCQkJJiBTUElCVUZfVFhGVUxMX01BU0spID09IDApCisJCQkJCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLAorCQkJCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElEQVQxKTsKKworCQkJCXdoaWxlIChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikgJgorCQkJCQkJU1BJQlVGX1JYRU1QVFlfTUFTSykKKwkJCQkJY3B1X3JlbGF4KCk7CisKKwkJCQlmbGdfdmFsID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElGTEcpOworCQkJCWJ1Zl92YWwgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRik7CisKKwkJCQlkYXZpbmNpX3NwaS0+Z2V0X3J4KGJ1Zl92YWwsIGRhdmluY2lfc3BpKTsKKworCQkJCWNvdW50LS07CisJCQkJaWYgKGNvdW50IDw9IDApCisJCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgewkvKiBSZWNlaXZlIGluIEludGVycnVwdCBtb2RlICovCisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IGRhdmluY2lfc3BpLT5jb3VudDsgaSsrKSB7CisJCQkJc2V0X2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQsCisJCQkJCQlTUElJTlRfQklURVJSX0lOVFIKKwkJCQkJCXwgU1BJSU5UX09WUlJVTl9JTlRSCisJCQkJCQl8IFNQSUlOVF9SWF9JTlRSKTsKKworCQkJCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLAorCQkJCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElEQVQxKTsKKworCQkJCXdoaWxlIChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCkgJgorCQkJCQkJU1BJSU5UX1JYX0lOVFIpCisJCQkJCWNwdV9yZWxheCgpOworCQkJfQorCQkJaW93cml0ZTMyKChkYXRhMV9yZWdfdmFsICYgMHgwZmZjZmZmZiksCisJCQkJCWRhdmluY2lfc3BpLT5iYXNlICsgU1BJREFUMSk7CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBiaXQgZXJyb3IsIGRlc3luYyBlcnJvcixwYXJpdHkgZXJyb3IsdGltZW91dCBlcnJvciBhbmQKKwkgKiByZWNlaXZlIG92ZXJmbG93IGVycm9ycworCSAqLworCWludF9zdGF0dXMgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUZMRyk7CisKKwlyZXQgPSBkYXZpbmNpX3NwaV9jaGVja19lcnJvcihkYXZpbmNpX3NwaSwgaW50X3N0YXR1cyk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU1BJIEZyYW1ld29yayBtYWludGFpbnMgdGhlIGNvdW50IG9ubHkgaW4gYnl0ZXMgc28gY29udmVydCBiYWNrICovCisJZGF2aW5jaV9zcGktPmNvdW50ICo9IGNvbnY7CisKKwlyZXR1cm4gdC0+bGVuOworfQorCisjZGVmaW5lIERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TOAkweDAxCisjZGVmaW5lIERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMTYJMHgwMgorI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzMyCTB4MDQKKworc3RhdGljIGludCBkYXZpbmNpX3NwaV9idWZzX2RtYShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJaW50IGludF9zdGF0dXMgPSAwOworCWludCBjb3VudCwgdGVtcF9jb3VudDsKKwl1OCBjb252ID0gMTsKKwl1OCB0bXA7CisJdTMyIGRhdGExX3JlZ192YWw7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZGF2aW5jaV9zcGlfZG1hOworCWludCB3b3JkX2xlbiwgZGF0YV90eXBlLCByZXQ7CisJdW5zaWduZWQgbG9uZyB0eF9yZWcsIHJ4X3JlZzsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGRldmljZSAqc2RldjsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisJc2RldiA9IGRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3Rlci0+ZGV2LnBhcmVudDsKKworCWRhdmluY2lfc3BpX2RtYSA9ICZkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdOworCisJdHhfcmVnID0gKHVuc2lnbmVkIGxvbmcpZGF2aW5jaV9zcGktPnBiYXNlICsgU1BJREFUMTsKKwlyeF9yZWcgPSAodW5zaWduZWQgbG9uZylkYXZpbmNpX3NwaS0+cGJhc2UgKyBTUElCVUY7CisKKwlkYXZpbmNpX3NwaS0+dHggPSB0LT50eF9idWY7CisJZGF2aW5jaV9zcGktPnJ4ID0gdC0+cnhfYnVmOworCisJLyogY29udmVydCBsZW4gdG8gd29yZHMgYmFzZWQgb24gYml0c19wZXJfd29yZCAqLworCWNvbnYgPSBkYXZpbmNpX3NwaS0+c2xhdmVbc3BpLT5jaGlwX3NlbGVjdF0uYnl0ZXNfcGVyX3dvcmQ7CisJZGF2aW5jaV9zcGktPmNvdW50ID0gdC0+bGVuIC8gY29udjsKKworCUlOSVRfQ09NUExFVElPTihkYXZpbmNpX3NwaS0+ZG9uZSk7CisKKwlpbml0X2NvbXBsZXRpb24oJmRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NvbXBsZXRpb24pOworCWluaXRfY29tcGxldGlvbigmZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY29tcGxldGlvbik7CisKKwl3b3JkX2xlbiA9IGNvbnYgKiA4OworCisJaWYgKHdvcmRfbGVuIDw9IDgpCisJCWRhdGFfdHlwZSA9IERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TODsKKwllbHNlIGlmICh3b3JkX2xlbiA8PSAxNikKKwkJZGF0YV90eXBlID0gREFWSU5DSV9ETUFfREFUQV9UWVBFX1MxNjsKKwllbHNlIGlmICh3b3JkX2xlbiA8PSAzMikKKwkJZGF0YV90eXBlID0gREFWSU5DSV9ETUFfREFUQV9UWVBFX1MzMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZGF2aW5jaV9zcGlfYnVmc19wcmVwKHNwaSwgZGF2aW5jaV9zcGkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBQdXQgZGVsYXkgdmFsIGlmIHJlcXVpcmVkICovCisJaW93cml0ZTMyKDAgfCAocGRhdGEtPmMydGRlbGF5IDw8IFNQSV9DMlRERUxBWV9TSElGVCkgfAorCQkJKHBkYXRhLT50MmNkZWxheSA8PCBTUElfVDJDREVMQVlfU0hJRlQpLAorCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUxBWSk7CisKKwljb3VudCA9IGRhdmluY2lfc3BpLT5jb3VudDsJLyogdGhlIG51bWJlciBvZiBlbGVtZW50cyAqLworCWRhdGExX3JlZ192YWwgPSBwZGF0YS0+Y3NfaG9sZCA8PCBTUElEQVQxX0NTSE9MRF9TSElGVDsKKworCS8qIENTIGRlZmF1bHQgPSAweEZGICovCisJdG1wID0gfigweDEgPDwgc3BpLT5jaGlwX3NlbGVjdCk7CisKKwljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJREVGLCB+dG1wKTsKKworCWRhdGExX3JlZ192YWwgfD0gdG1wIDw8IFNQSURBVDFfQ1NOUl9TSElGVDsKKworCS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgZm9yIGRtYSB0cmFuc2ZlcnMgKi8KKwljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5ULCBTUElJTlRfTUFTS0FMTCk7CisJLyogRGlzYWJsZSBTUEkgdG8gd3JpdGUgY29uZmlndXJhdGlvbiBiaXRzIGluIFNQSURBVCAqLworCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IxLCBTUElHQ1IxX1NQSUVOQV9NQVNLKTsKKwlpb3dyaXRlMzIoZGF0YTFfcmVnX3ZhbCwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElEQVQxKTsKKwkvKiBFbmFibGUgU1BJICovCisJc2V0X2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IxLCBTUElHQ1IxX1NQSUVOQV9NQVNLKTsKKworCXdoaWxlICgoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpCisJCQkJJiBTUElCVUZfUlhFTVBUWV9NQVNLKSA9PSAwKQorCQljcHVfcmVsYXgoKTsKKworCisJaWYgKHQtPnR4X2J1ZikgeworCQl0LT50eF9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmc3BpLT5kZXYsICh2b2lkICopdC0+dHhfYnVmLCBjb3VudCwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZzcGktPmRldiwgdC0+dHhfZG1hKSkgeworCQkJZGV2X2RiZyhzZGV2LCAiVW5hYmxlIHRvIERNQSBtYXAgYSAlZCBieXRlcyIKKwkJCQkiIFRYIGJ1ZmZlclxuIiwgY291bnQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJdGVtcF9jb3VudCA9IGNvdW50OworCX0gZWxzZSB7CisJCS8qIFdlIG5lZWQgVFggY2xvY2tpbmcgZm9yIFJYIHRyYW5zYWN0aW9uICovCisJCXQtPnR4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwKKwkJCQkodm9pZCAqKWRhdmluY2lfc3BpLT50bXBfYnVmLCBjb3VudCArIDEsCisJCQkJRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmc3BpLT5kZXYsIHQtPnR4X2RtYSkpIHsKKwkJCWRldl9kYmcoc2RldiwgIlVuYWJsZSB0byBETUEgbWFwIGEgJWQgYnl0ZXMiCisJCQkJIiBUWCB0bXAgYnVmZmVyXG4iLCBjb3VudCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl0ZW1wX2NvdW50ID0gY291bnQgKyAxOworCX0KKworCWVkbWFfc2V0X3RyYW5zZmVyX3BhcmFtcyhkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsLAorCQkJCQlkYXRhX3R5cGUsIHRlbXBfY291bnQsIDEsIDAsIEFTWU5DKTsKKwllZG1hX3NldF9kZXN0KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwsIHR4X3JlZywgSU5DUiwgVzhCSVQpOworCWVkbWFfc2V0X3NyYyhkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsLCB0LT50eF9kbWEsIElOQ1IsIFc4QklUKTsKKwllZG1hX3NldF9zcmNfaW5kZXgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCwgZGF0YV90eXBlLCAwKTsKKwllZG1hX3NldF9kZXN0X2luZGV4KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwsIDAsIDApOworCisJaWYgKHQtPnJ4X2J1ZikgeworCQkvKiBpbml0aWF0ZSB0cmFuc2FjdGlvbiAqLworCQlpb3dyaXRlMzIoZGF0YTFfcmVnX3ZhbCwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElEQVQxKTsKKworCQl0LT5yeF9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmc3BpLT5kZXYsICh2b2lkICopdC0+cnhfYnVmLCBjb3VudCwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJnNwaS0+ZGV2LCB0LT5yeF9kbWEpKSB7CisJCQlkZXZfZGJnKHNkZXYsICJDb3VsZG4ndCBETUEgbWFwIGEgJWQgYnl0ZXMgUlggYnVmZmVyXG4iLAorCQkJCQljb3VudCk7CisJCQlpZiAodC0+dHhfYnVmICE9IE5VTEwpCisJCQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCB0LT50eF9kbWEsCisJCQkJCQkgY291bnQsIERNQV9UT19ERVZJQ0UpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZWRtYV9zZXRfdHJhbnNmZXJfcGFyYW1zKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwsCisJCQkJZGF0YV90eXBlLCBjb3VudCwgMSwgMCwgQVNZTkMpOworCQllZG1hX3NldF9zcmMoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCwKKwkJCQlyeF9yZWcsIElOQ1IsIFc4QklUKTsKKwkJZWRtYV9zZXRfZGVzdChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsLAorCQkJCXQtPnJ4X2RtYSwgSU5DUiwgVzhCSVQpOworCQllZG1hX3NldF9zcmNfaW5kZXgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCwgMCwgMCk7CisJCWVkbWFfc2V0X2Rlc3RfaW5kZXgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCwKKwkJCQlkYXRhX3R5cGUsIDApOworCX0KKworCWlmICgodC0+dHhfYnVmKSB8fCAodC0+cnhfYnVmKSkKKwkJZWRtYV9zdGFydChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsKTsKKworCWlmICh0LT5yeF9idWYpCisJCWVkbWFfc3RhcnQoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCk7CisKKwlpZiAoKHQtPnJ4X2J1ZikgfHwgKHQtPnR4X2J1ZikpCisJCWRhdmluY2lfc3BpX3NldF9kbWFfcmVxKHNwaSwgMSk7CisKKwlpZiAodC0+dHhfYnVmKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoCisJCQkJJmRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NvbXBsZXRpb24pOworCisJaWYgKHQtPnJ4X2J1ZikKKwkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKAorCQkJCSZkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jb21wbGV0aW9uKTsKKworCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgdC0+dHhfZG1hLCB0ZW1wX2NvdW50LCBETUFfVE9fREVWSUNFKTsKKworCWlmICh0LT5yeF9idWYpCisJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgdC0+cnhfZG1hLCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKworCS8qCisJICogQ2hlY2sgZm9yIGJpdCBlcnJvciwgZGVzeW5jIGVycm9yLHBhcml0eSBlcnJvcix0aW1lb3V0IGVycm9yIGFuZAorCSAqIHJlY2VpdmUgb3ZlcmZsb3cgZXJyb3JzCisJICovCisJaW50X3N0YXR1cyA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJRkxHKTsKKworCXJldCA9IGRhdmluY2lfc3BpX2NoZWNrX2Vycm9yKGRhdmluY2lfc3BpLCBpbnRfc3RhdHVzKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTUEkgRnJhbWV3b3JrIG1haW50YWlucyB0aGUgY291bnQgb25seSBpbiBieXRlcyBzbyBjb252ZXJ0IGJhY2sgKi8KKwlkYXZpbmNpX3NwaS0+Y291bnQgKj0gY29udjsKKworCXJldHVybiB0LT5sZW47Cit9CisKKy8qKgorICogZGF2aW5jaV9zcGlfaXJxIC0gSVJRIGhhbmRsZXIgZm9yIERhVmluY2kgU1BJCisgKiBAaXJxOiBJUlEgbnVtYmVyIGZvciB0aGlzIFNQSSBNYXN0ZXIKKyAqIEBjb250ZXh0X2RhdGE6IHN0cnVjdHVyZSBmb3IgU1BJIE1hc3RlciBjb250cm9sbGVyIGRhdmluY2lfc3BpCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXZpbmNpX3NwaV9pcnEoczMyIGlycSwgdm9pZCAqY29udGV4dF9kYXRhKQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkgPSBjb250ZXh0X2RhdGE7CisJdTMyIGludF9zdGF0dXMsIHJ4X2RhdGEgPSAwOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCisJaW50X3N0YXR1cyA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJRkxHKTsKKworCXdoaWxlICgoaW50X3N0YXR1cyAmIFNQSUZMR19SWF9JTlRSX01BU0spKSB7CisJCWlmIChsaWtlbHkoaW50X3N0YXR1cyAmIFNQSUZMR19SWF9JTlRSX01BU0spKSB7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKKworCQkJcnhfZGF0YSA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKTsKKwkJCWRhdmluY2lfc3BpLT5nZXRfcngocnhfZGF0YSwgZGF2aW5jaV9zcGkpOworCisJCQkvKiBEaXNhYmxlIFJlY2VpdmUgSW50ZXJydXB0ICovCisJCQlpb3dyaXRlMzIofihTUElJTlRfUlhfSU5UUiB8IFNQSUlOVF9UWF9JTlRSKSwKKwkJCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQpOworCQl9IGVsc2UKKwkJCSh2b2lkKWRhdmluY2lfc3BpX2NoZWNrX2Vycm9yKGRhdmluY2lfc3BpLCBpbnRfc3RhdHVzKTsKKworCQlpbnRfc3RhdHVzID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElGTEcpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogZGF2aW5jaV9zcGlfcHJvYmUgLSBwcm9iZSBmdW5jdGlvbiBmb3IgU1BJIE1hc3RlciBDb250cm9sbGVyCisgKiBAcGRldjogcGxhdGZvcm1fZGV2aWNlIHN0cnVjdHVyZSB3aGljaCBjb250YWlucyBwbGF0ZWZvcm0gc3BlY2lmaWMgZGF0YQorICovCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnIsICptZW07CisJcmVzb3VyY2Vfc2l6ZV90IGRtYV9yeF9jaGFuID0gU1BJX05PX1JFU09VUkNFOworCXJlc291cmNlX3NpemVfdAlkbWFfdHhfY2hhbiA9IFNQSV9OT19SRVNPVVJDRTsKKwlyZXNvdXJjZV9zaXplX3QJZG1hX2V2ZW50cSA9IFNQSV9OT19SRVNPVVJDRTsKKwlpbnQgaSA9IDAsIHJldCA9IDA7CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBkYXZpbmNpX3NwaSkpOworCWlmIChtYXN0ZXIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbWFzdGVyKTsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWlmIChkYXZpbmNpX3NwaSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZnJlZV9tYXN0ZXI7CisJfQorCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGZyZWVfbWFzdGVyOworCX0KKworCWRhdmluY2lfc3BpLT5wYmFzZSA9IHItPnN0YXJ0OworCWRhdmluY2lfc3BpLT5yZWdpb25fc2l6ZSA9IHJlc291cmNlX3NpemUocik7CisJZGF2aW5jaV9zcGktPnBkYXRhID0gcGRhdGE7CisKKwltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIGRhdmluY2lfc3BpLT5yZWdpb25fc2l6ZSwKKwkJCQkJcGRldi0+bmFtZSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBmcmVlX21hc3RlcjsKKwl9CisKKwlkYXZpbmNpX3NwaS0+YmFzZSA9IChzdHJ1Y3QgZGF2aW5jaV9zcGlfcmVnIF9faW9tZW0gKikKKwkJCWlvcmVtYXAoci0+c3RhcnQsIGRhdmluY2lfc3BpLT5yZWdpb25fc2l6ZSk7CisJaWYgKGRhdmluY2lfc3BpLT5iYXNlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byByZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwlkYXZpbmNpX3NwaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoZGF2aW5jaV9zcGktPmlycSA8PSAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5tYXBfaW87CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoZGF2aW5jaV9zcGktPmlycSwgZGF2aW5jaV9zcGlfaXJxLCBJUlFGX0RJU0FCTEVELAorCQkJICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgZGF2aW5jaV9zcGkpOworCWlmIChyZXQpCisJCWdvdG8gdW5tYXBfaW87CisKKwkvKiBBbGxvY2F0ZSB0bXBfYnVmIGZvciB0eF9idWYgKi8KKwlkYXZpbmNpX3NwaS0+dG1wX2J1ZiA9IGt6YWxsb2MoU1BJX0JVRlNJWiwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdmluY2lfc3BpLT50bXBfYnVmID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBpcnFfZnJlZTsKKwl9CisKKwlkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOworCWlmIChkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfdG1wX2J1ZjsKKwl9CisKKwlkYXZpbmNpX3NwaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRhdmluY2lfc3BpLT5jbGspKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcHV0X21hc3RlcjsKKwl9CisJY2xrX2VuYWJsZShkYXZpbmNpX3NwaS0+Y2xrKTsKKworCisJbWFzdGVyLT5idXNfbnVtID0gcGRldi0+aWQ7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHBkYXRhLT5udW1fY2hpcHNlbGVjdDsKKwltYXN0ZXItPnNldHVwID0gZGF2aW5jaV9zcGlfc2V0dXA7CisJbWFzdGVyLT5jbGVhbnVwID0gZGF2aW5jaV9zcGlfY2xlYW51cDsKKworCWRhdmluY2lfc3BpLT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBkYXZpbmNpX3NwaV9jaGlwc2VsZWN0OworCWRhdmluY2lfc3BpLT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gZGF2aW5jaV9zcGlfc2V0dXBfdHJhbnNmZXI7CisKKwlkYXZpbmNpX3NwaS0+dmVyc2lvbiA9IHBkYXRhLT52ZXJzaW9uOworCXVzZV9kbWEgPSBwZGF0YS0+dXNlX2RtYTsKKworCWRhdmluY2lfc3BpLT5iaXRiYW5nLmZsYWdzID0gU1BJX05PX0NTIHwgU1BJX0xTQl9GSVJTVCB8IFNQSV9MT09QOworCWlmIChkYXZpbmNpX3NwaS0+dmVyc2lvbiA9PSBTUElfVkVSU0lPTl8yKQorCQlkYXZpbmNpX3NwaS0+Yml0YmFuZy5mbGFncyB8PSBTUElfUkVBRFk7CisKKwlpZiAodXNlX2RtYSkgeworCQkJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CisJCQlpZiAocikKKwkJCQlkbWFfcnhfY2hhbiA9IHItPnN0YXJ0OworCQkJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CisJCQlpZiAocikKKwkJCQlkbWFfdHhfY2hhbiA9IHItPnN0YXJ0OworCQkJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMik7CisJCQlpZiAocikKKwkJCQlkbWFfZXZlbnRxID0gci0+c3RhcnQ7CisJfQorCisJaWYgKCF1c2VfZG1hIHx8CisJICAgIGRtYV9yeF9jaGFuID09IFNQSV9OT19SRVNPVVJDRSB8fAorCSAgICBkbWFfdHhfY2hhbiA9PSBTUElfTk9fUkVTT1VSQ0UgfHwKKwkgICAgZG1hX2V2ZW50cQk9PSBTUElfTk9fUkVTT1VSQ0UpIHsKKwkJZGF2aW5jaV9zcGktPmJpdGJhbmcudHhyeF9idWZzID0gZGF2aW5jaV9zcGlfYnVmc19waW87CisJCXVzZV9kbWEgPSAwOworCX0gZWxzZSB7CisJCWRhdmluY2lfc3BpLT5iaXRiYW5nLnR4cnhfYnVmcyA9IGRhdmluY2lfc3BpX2J1ZnNfZG1hOworCQlkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzID0ga3phbGxvYyhtYXN0ZXItPm51bV9jaGlwc2VsZWN0CisJCQkJKiBzaXplb2Yoc3RydWN0IGRhdmluY2lfc3BpX2RtYSksIEdGUF9LRVJORUwpOworCQlpZiAoZGF2aW5jaV9zcGktPmRtYV9jaGFubmVscyA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX2NsazsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspIHsKKwkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3J4X2NoYW5uZWwgPSAtMTsKKwkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3J4X3N5bmNfZGV2ID0KKwkJCQlkbWFfcnhfY2hhbjsKKwkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3R4X2NoYW5uZWwgPSAtMTsKKwkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZG1hX3R4X3N5bmNfZGV2ID0KKwkJCQlkbWFfdHhfY2hhbjsKKwkJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbaV0uZXZlbnRxID0gZG1hX2V2ZW50cTsKKwkJfQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRGFWaW5jaSBTUEkgZHJpdmVyIGluIEVETUEgbW9kZVxuIgorCQkJCSJVc2luZyBSWCBjaGFubmVsID0gJWQgLCBUWCBjaGFubmVsID0gJWQgYW5kICIKKwkJCQkiZXZlbnQgcXVldWUgPSAlZCIsIGRtYV9yeF9jaGFuLCBkbWFfdHhfY2hhbiwKKwkJCQlkbWFfZXZlbnRxKTsKKwl9CisKKwlkYXZpbmNpX3NwaS0+Z2V0X3J4ID0gZGF2aW5jaV9zcGlfcnhfYnVmX3U4OworCWRhdmluY2lfc3BpLT5nZXRfdHggPSBkYXZpbmNpX3NwaV90eF9idWZfdTg7CisKKwlpbml0X2NvbXBsZXRpb24oJmRhdmluY2lfc3BpLT5kb25lKTsKKworCS8qIFJlc2V0IEluL09VVCBTUEkgbW9kdWxlICovCisJaW93cml0ZTMyKDAsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMCk7CisJdWRlbGF5KDEwMCk7CisJaW93cml0ZTMyKDEsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMCk7CisKKwkvKiBDbG9jayBpbnRlcm5hbCAqLworCWlmIChkYXZpbmNpX3NwaS0+cGRhdGEtPmNsa19pbnRlcm5hbCkKKwkJc2V0X2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IxLAorCQkJCVNQSUdDUjFfQ0xLTU9EX01BU0spOworCWVsc2UKKwkJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsCisJCQkJU1BJR0NSMV9DTEtNT0RfTUFTSyk7CisKKwkvKiBtYXN0ZXIgbW9kZSBkZWZhdWx0ICovCisJc2V0X2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IxLCBTUElHQ1IxX01BU1RFUl9NQVNLKTsKKworCWlmIChkYXZpbmNpX3NwaS0+cGRhdGEtPmludHJfbGV2ZWwpCisJCWlvd3JpdGUzMihTUElfSU5UTFZMXzEsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJTFZMKTsKKwllbHNlCisJCWlvd3JpdGUzMihTUElfSU5UTFZMXzAsIGRhdmluY2lfc3BpLT5iYXNlICsgU1BJTFZMKTsKKworCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZkYXZpbmNpX3NwaS0+Yml0YmFuZyk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2NsazsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDb250cm9sbGVyIGF0IDB4JXAgXG4iLCBkYXZpbmNpX3NwaS0+YmFzZSk7CisKKwlpZiAoIXBkYXRhLT5wb2xsX21vZGUpCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJPcGVyYXRpbmcgaW4gaW50ZXJydXB0IG1vZGUiCisJCQkiIHVzaW5nIElSUSAlZFxuIiwgZGF2aW5jaV9zcGktPmlycSk7CisKKwlyZXR1cm4gcmV0OworCitmcmVlX2NsazoKKwljbGtfZGlzYWJsZShkYXZpbmNpX3NwaS0+Y2xrKTsKKwljbGtfcHV0KGRhdmluY2lfc3BpLT5jbGspOworcHV0X21hc3RlcjoKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworZnJlZV90bXBfYnVmOgorCWtmcmVlKGRhdmluY2lfc3BpLT50bXBfYnVmKTsKK2lycV9mcmVlOgorCWZyZWVfaXJxKGRhdmluY2lfc3BpLT5pcnEsIGRhdmluY2lfc3BpKTsKK3VubWFwX2lvOgorCWlvdW5tYXAoZGF2aW5jaV9zcGktPmJhc2UpOworcmVsZWFzZV9yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKGRhdmluY2lfc3BpLT5wYmFzZSwgZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplKTsKK2ZyZWVfbWFzdGVyOgorCWtmcmVlKG1hc3Rlcik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9yZW1vdmUgLSByZW1vdmUgZnVuY3Rpb24gZm9yIFNQSSBNYXN0ZXIgQ29udHJvbGxlcgorICogQHBkZXY6IHBsYXRmb3JtX2RldmljZSBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnMgcGxhdGVmb3JtIHNwZWNpZmljIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZG8gdGhlIHJldmVyc2UgYWN0aW9uIG9mIGRhdmluY2lfc3BpX3Byb2JlIGZ1bmN0aW9uCisgKiBJdCB3aWxsIGZyZWUgdGhlIElSUSBhbmQgU1BJIGNvbnRyb2xsZXIncyBtZW1vcnkgcmVnaW9uLgorICogSXQgd2lsbCBhbHNvIGNhbGwgc3BpX2JpdGJhbmdfc3RvcCB0byBkZXN0cm95IHRoZSB3b3JrIHF1ZXVlIHdoaWNoIHdhcworICogY3JlYXRlZCBieSBzcGlfYml0YmFuZ19zdGFydC4KKyAqLworc3RhdGljIGludCBfX2V4aXQgZGF2aW5jaV9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCisJbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJc3BpX2JpdGJhbmdfc3RvcCgmZGF2aW5jaV9zcGktPmJpdGJhbmcpOworCisJY2xrX2Rpc2FibGUoZGF2aW5jaV9zcGktPmNsayk7CisJY2xrX3B1dChkYXZpbmNpX3NwaS0+Y2xrKTsKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCWtmcmVlKGRhdmluY2lfc3BpLT50bXBfYnVmKTsKKwlmcmVlX2lycShkYXZpbmNpX3NwaS0+aXJxLCBkYXZpbmNpX3NwaSk7CisJaW91bm1hcChkYXZpbmNpX3NwaS0+YmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGRhdmluY2lfc3BpLT5wYmFzZSwgZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYXZpbmNpX3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lID0gInNwaV9kYXZpbmNpIiwKKwkucmVtb3ZlID0gX19leGl0X3AoZGF2aW5jaV9zcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRhdmluY2lfc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZkYXZpbmNpX3NwaV9kcml2ZXIsIGRhdmluY2lfc3BpX3Byb2JlKTsKK30KK21vZHVsZV9pbml0KGRhdmluY2lfc3BpX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZGF2aW5jaV9zcGlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkYXZpbmNpX3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoZGF2aW5jaV9zcGlfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVEkgRGFWaW5jaSBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kd19zcGkuYyBiL2RyaXZlcnMvc3BpL2R3X3NwaS5jCmluZGV4IDMxNjIwZmEuLjhlZDM4ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2R3X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2R3X3NwaS5jCkBAIC0xNTIsNiArMTUyLDcgQEAKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBtcnN0X3NwaV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGR3X3NwaSAqZHdzKQogeworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXJzdF9zcGlfZGVidWdmc19yZW1vdmUoc3RydWN0IGR3X3NwaSAqZHdzKQpAQCAtMTYxLDE0ICsxNjIsMTQgQEAKIAogc3RhdGljIHZvaWQgd2FpdF90aWxsX25vdF9idXN5KHN0cnVjdCBkd19zcGkgKmR3cykKIHsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKDEwMDApOworCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIDEgKyB1c2Vjc190b19qaWZmaWVzKDEwMDApOwogCiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZCkpIHsKIAkJaWYgKCEoZHdfcmVhZHcoZHdzLCBzcikgJiBTUl9CVVNZKSkKIAkJCXJldHVybjsKIAl9CiAJZGV2X2VycigmZHdzLT5tYXN0ZXItPmRldiwKLQkJIkRXIFNQSTogU3R1dHVzIGtlZXBzIGJ1c3kgZm9yIDEwMDB1cyBhZnRlciBhIHJlYWQvd3JpdGUhXG4iKTsKKwkJIkRXIFNQSTogU3RhdHVzIGtlZXBzIGJ1c3kgZm9yIDEwMDB1cyBhZnRlciBhIHJlYWQvd3JpdGUhXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgZmx1c2goc3RydWN0IGR3X3NwaSAqZHdzKQpAQCAtMzU4LDYgKzM1OSw4IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3RyYW5zZmVyKHN0cnVjdCBkd19zcGkgKmR3cykKIHsKIAl1MTYgaXJxX3N0YXR1cywgaXJxX21hc2sgPSAweDNmOworCXUzMiBpbnRfbGV2ZWwgPSBkd3MtPmZpZm9fbGVuIC8gMjsKKwl1MzIgbGVmdDsKIAogCWlycV9zdGF0dXMgPSBkd19yZWFkdyhkd3MsIGlzcikgJiBpcnFfbWFzazsKIAkvKiBFcnJvciBoYW5kbGluZyAqLwpAQCAtMzY5LDIyICszNzIsMjMgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCS8qIElOVCBjb21lcyBmcm9tIHR4ICovCi0JaWYgKGR3cy0+dHggJiYgKGlycV9zdGF0dXMgJiBTUElfSU5UX1RYRUkpKSB7Ci0JCXdoaWxlIChkd3MtPnR4IDwgZHdzLT50eF9lbmQpCisJaWYgKGlycV9zdGF0dXMgJiBTUElfSU5UX1RYRUkpIHsKKwkJc3BpX21hc2tfaW50cihkd3MsIFNQSV9JTlRfVFhFSSk7CisKKwkJbGVmdCA9IChkd3MtPnR4X2VuZCAtIGR3cy0+dHgpIC8gZHdzLT5uX2J5dGVzOworCQlsZWZ0ID0gKGxlZnQgPiBpbnRfbGV2ZWwpID8gaW50X2xldmVsIDogbGVmdDsKKworCQl3aGlsZSAobGVmdC0tKQogCQkJZHdzLT53cml0ZShkd3MpOworCQlkd3MtPnJlYWQoZHdzKTsKIAotCQlpZiAoZHdzLT50eCA9PSBkd3MtPnR4X2VuZCkgewotCQkJc3BpX21hc2tfaW50cihkd3MsIFNQSV9JTlRfVFhFSSk7Ci0JCQl0cmFuc2Zlcl9jb21wbGV0ZShkd3MpOwotCQl9Ci0JfQotCi0JLyogSU5UIGNvbWVzIGZyb20gcnggKi8KLQlpZiAoZHdzLT5yeCAmJiAoaXJxX3N0YXR1cyAmIFNQSV9JTlRfUlhGSSkpIHsKLQkJaWYgKGR3cy0+cmVhZChkd3MpKQorCQkvKiBSZS1lbmFibGUgdGhlIElSUSBpZiB0aGVyZSBpcyBzdGlsbCBkYXRhIGxlZnQgdG8gdHggKi8KKwkJaWYgKGR3cy0+dHhfZW5kID4gZHdzLT50eCkKKwkJCXNwaV91bWFza19pbnRyKGR3cywgU1BJX0lOVF9UWEVJKTsKKwkJZWxzZQogCQkJdHJhbnNmZXJfY29tcGxldGUoZHdzKTsKIAl9CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTQwNCwxMiArNDA4LDkgQEAKIC8qIE11c3QgYmUgY2FsbGVkIGluc2lkZSBwdW1wX3RyYW5zZmVycygpICovCiBzdGF0aWMgdm9pZCBwb2xsX3RyYW5zZmVyKHN0cnVjdCBkd19zcGkgKmR3cykKIHsKLQlpZiAoZHdzLT50eCkgewotCQl3aGlsZSAoZHdzLT53cml0ZShkd3MpKQotCQkJZHdzLT5yZWFkKGR3cyk7Ci0JfQorCXdoaWxlIChkd3MtPndyaXRlKGR3cykpCisJCWR3cy0+cmVhZChkd3MpOwogCi0JZHdzLT5yZWFkKGR3cyk7CiAJdHJhbnNmZXJfY29tcGxldGUoZHdzKTsKIH0KIApAQCAtNDI4LDYgKzQyOSw3IEBACiAJdTggYml0cyA9IDA7CiAJdTggaW1hc2sgPSAwOwogCXU4IGNzX2NoYW5nZSA9IDA7CisJdTE2IHR4aW50X2xldmVsID0gMDsKIAl1MTYgY2xrX2RpdiA9IDA7CiAJdTMyIHNwZWVkID0gMDsKIAl1MzIgY3IwID0gMDsKQEAgLTQzOCw2ICs0NDAsOSBAQAogCWNoaXAgPSBkd3MtPmN1cl9jaGlwOwogCXNwaSA9IG1lc3NhZ2UtPnNwaTsKIAorCWlmICh1bmxpa2VseSghY2hpcC0+Y2xrX2RpdikpCisJCWNoaXAtPmNsa19kaXYgPSBkd3MtPm1heF9mcmVxIC8gY2hpcC0+c3BlZWRfaHo7CisKIAlpZiAobWVzc2FnZS0+c3RhdGUgPT0gRVJST1JfU1RBVEUpIHsKIAkJbWVzc2FnZS0+c3RhdHVzID0gLUVJTzsKIAkJZ290byBlYXJseV9leGl0OwpAQCAtNDkyLDcgKzQ5Nyw3IEBACiAKIAkJCS8qIGNsa19kaXYgZG9lc24ndCBzdXBwb3J0IG9kZCBudW1iZXIgKi8KIAkJCWNsa19kaXYgPSBkd3MtPm1heF9mcmVxIC8gc3BlZWQ7Ci0JCQljbGtfZGl2ID0gKGNsa19kaXYgPj4gMSkgPDwgMTsKKwkJCWNsa19kaXYgPSAoY2xrX2RpdiArIDEpICYgMHhmZmZlOwogCiAJCQljaGlwLT5zcGVlZF9oeiA9IHNwZWVkOwogCQkJY2hpcC0+Y2xrX2RpdiA9IGNsa19kaXY7CkBAIC01MzIsMTQgKzUzNywzNSBAQAogCX0KIAltZXNzYWdlLT5zdGF0ZSA9IFJVTk5JTkdfU1RBVEU7CiAKKwkvKgorCSAqIEFkanVzdCB0cmFuc2ZlciBtb2RlIGlmIG5lY2Vzc2FyeS4gUmVxdWlyZXMgcGxhdGZvcm0gZGVwZW5kZW50CisJICogY2hpcHNlbGVjdCBtZWNoYW5pc20uCisJICovCisJaWYgKGR3cy0+Y3NfY29udHJvbCkgeworCQlpZiAoZHdzLT5yeCAmJiBkd3MtPnR4KQorCQkJY2hpcC0+dG1vZGUgPSAweDAwOworCQllbHNlIGlmIChkd3MtPnJ4KQorCQkJY2hpcC0+dG1vZGUgPSAweDAyOworCQllbHNlCisJCQljaGlwLT50bW9kZSA9IDB4MDE7CisKKwkJY3IwICY9IH4oMHgzIDw8IFNQSV9NT0RFX09GRlNFVCk7CisJCWNyMCB8PSAoY2hpcC0+dG1vZGUgPDwgU1BJX1RNT0RfT0ZGU0VUKTsKKwl9CisKIAkvKiBDaGVjayBpZiBjdXJyZW50IHRyYW5zZmVyIGlzIGEgRE1BIHRyYW5zYWN0aW9uICovCiAJZHdzLT5kbWFfbWFwcGVkID0gbWFwX2RtYV9idWZmZXJzKGR3cyk7CiAKKwkvKgorCSAqIEludGVycnVwdCBtb2RlCisJICogd2Ugb25seSBuZWVkIHNldCB0aGUgVFhFSSBJUlEsIGFzIFRYL1JYIGFsd2F5cyBoYXBwZW4gc3luY3Jvbml6ZWx5CisJICovCiAJaWYgKCFkd3MtPmRtYV9tYXBwZWQgJiYgIWNoaXAtPnBvbGxfbW9kZSkgewotCQlpZiAoZHdzLT5yeCkKLQkJCWltYXNrIHw9IFNQSV9JTlRfUlhGSTsKLQkJaWYgKGR3cy0+dHgpCi0JCQlpbWFzayB8PSBTUElfSU5UX1RYRUk7CisJCWludCB0ZW1wbGVuID0gZHdzLT5sZW4gLyBkd3MtPm5fYnl0ZXM7CisJCXR4aW50X2xldmVsID0gZHdzLT5maWZvX2xlbiAvIDI7CisJCXR4aW50X2xldmVsID0gKHRlbXBsZW4gPiB0eGludF9sZXZlbCkgPyB0eGludF9sZXZlbCA6IHRlbXBsZW47CisKKwkJaW1hc2sgfD0gU1BJX0lOVF9UWEVJOwogCQlkd3MtPnRyYW5zZmVyX2hhbmRsZXIgPSBpbnRlcnJ1cHRfdHJhbnNmZXI7CiAJfQogCkBAIC01NDksMjEgKzU3NSwyMyBAQAogCSAqCTIuIGNsa19kaXYgaXMgY2hhbmdlZAogCSAqCTMuIGNvbnRyb2wgdmFsdWUgY2hhbmdlcwogCSAqLwotCWlmIChkd19yZWFkdyhkd3MsIGN0cmwwKSAhPSBjcjAgfHwgY3NfY2hhbmdlIHx8IGNsa19kaXYpIHsKKwlpZiAoZHdfcmVhZHcoZHdzLCBjdHJsMCkgIT0gY3IwIHx8IGNzX2NoYW5nZSB8fCBjbGtfZGl2IHx8IGltYXNrKSB7CiAJCXNwaV9lbmFibGVfY2hpcChkd3MsIDApOwogCiAJCWlmIChkd19yZWFkdyhkd3MsIGN0cmwwKSAhPSBjcjApCiAJCQlkd193cml0ZXcoZHdzLCBjdHJsMCwgY3IwKTsKIAotCQkvKiBTZXQgdGhlIGludGVycnVwdCBtYXNrLCBmb3IgcG9sbCBtb2RlIGp1c3QgZGlhYmxlIGFsbCBpbnQgKi8KLQkJc3BpX21hc2tfaW50cihkd3MsIDB4ZmYpOwotCQlpZiAoIWNoaXAtPnBvbGxfbW9kZSkKLQkJCXNwaV91bWFza19pbnRyKGR3cywgaW1hc2spOwotCiAJCXNwaV9zZXRfY2xrKGR3cywgY2xrX2RpdiA/IGNsa19kaXYgOiBjaGlwLT5jbGtfZGl2KTsKIAkJc3BpX2NoaXBfc2VsKGR3cywgc3BpLT5jaGlwX3NlbGVjdCk7Ci0JCXNwaV9lbmFibGVfY2hpcChkd3MsIDEpOwogCisJCS8qIFNldCB0aGUgaW50ZXJydXB0IG1hc2ssIGZvciBwb2xsIG1vZGUganVzdCBkaWFibGUgYWxsIGludCAqLworCQlzcGlfbWFza19pbnRyKGR3cywgMHhmZik7CisJCWlmIChpbWFzaykKKwkJCXNwaV91bWFza19pbnRyKGR3cywgaW1hc2spOworCQlpZiAodHhpbnRfbGV2ZWwpCisJCQlkd193cml0ZXcoZHdzLCB0eGZsdHIsIHR4aW50X2xldmVsKTsKKworCQlzcGlfZW5hYmxlX2NoaXAoZHdzLCAxKTsKIAkJaWYgKGNzX2NoYW5nZSkKIAkJCWR3cy0+cHJldl9jaGlwID0gY2hpcDsKIAl9CkBAIC03MTIsMTEgKzc0MCwxMSBAQAogCX0KIAljaGlwLT5iaXRzX3Blcl93b3JkID0gc3BpLT5iaXRzX3Blcl93b3JkOwogCisJaWYgKCFzcGktPm1heF9zcGVlZF9oeikgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIk5vIG1heCBzcGVlZCBIWiBwYXJhbWV0ZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJY2hpcC0+c3BlZWRfaHogPSBzcGktPm1heF9zcGVlZF9oejsKLQlpZiAoY2hpcC0+c3BlZWRfaHopCi0JCWNoaXAtPmNsa19kaXYgPSAyNTAwMDAwMCAvIGNoaXAtPnNwZWVkX2h6OwotCWVsc2UKLQkJY2hpcC0+Y2xrX2RpdiA9IDg7CS8qIGRlZmF1bHQgdmFsdWUgKi8KIAogCWNoaXAtPnRtb2RlID0gMDsgLyogVHggJiBSeCAqLwogCS8qIERlZmF1bHQgU1BJIG1vZGUgaXMgU0NQT0wgPSAwLCBTQ1BIID0gMCAqLwpAQCAtNzM1LDcgKzc2Myw3IEBACiAJa2ZyZWUoY2hpcCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcXVldWUoc3RydWN0IGR3X3NwaSAqZHdzKQorc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9xdWV1ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJmR3cy0+cXVldWUpOwogCXNwaW5fbG9ja19pbml0KCZkd3MtPmxvY2spOwpAQCAtODE3LDYgKzg0NSwyMiBAQAogCXNwaV9tYXNrX2ludHIoZHdzLCAweGZmKTsKIAlzcGlfZW5hYmxlX2NoaXAoZHdzLCAxKTsKIAlmbHVzaChkd3MpOworCisJLyoKKwkgKiBUcnkgdG8gZGV0ZWN0IHRoZSBGSUZPIGRlcHRoIGlmIG5vdCBzZXQgYnkgaW50ZXJmYWNlIGRyaXZlciwKKwkgKiB0aGUgZGVwdGggY291bGQgYmUgZnJvbSAyIHRvIDI1NiBmcm9tIEhXIHNwZWMKKwkgKi8KKwlpZiAoIWR3cy0+Zmlmb19sZW4pIHsKKwkJdTMyIGZpZm87CisJCWZvciAoZmlmbyA9IDI7IGZpZm8gPD0gMjU3OyBmaWZvKyspIHsKKwkJCWR3X3dyaXRldyhkd3MsIHR4Zmx0ciwgZmlmbyk7CisJCQlpZiAoZmlmbyAhPSBkd19yZWFkdyhkd3MsIHR4Zmx0cikpCisJCQkJYnJlYWs7CisJCX0KKworCQlkd3MtPmZpZm9fbGVuID0gKGZpZm8gPT0gMjU3KSA/IDAgOiBmaWZvOworCQlkd193cml0ZXcoZHdzLCB0eGZsdHIsIDApOworCX0KIH0KIAogaW50IF9fZGV2aW5pdCBkd19zcGlfYWRkX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKQpAQCAtOTEzLDYgKzk1Nyw3IEBACiAJLyogRGlzY29ubmVjdCBmcm9tIHRoZSBTUEkgZnJhbWV3b3JrICovCiAJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKGR3cy0+bWFzdGVyKTsKIH0KK0VYUE9SVF9TWU1CT0woZHdfc3BpX3JlbW92ZV9ob3N0KTsKIAogaW50IGR3X3NwaV9zdXNwZW5kX2hvc3Qoc3RydWN0IGR3X3NwaSAqZHdzKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvZHdfc3BpX21taW8uYyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9tbWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1YjQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9tbWlvLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBkd19zcGlfbW1pby5jIC0gTWVtb3J5LW1hcHBlZCBpbnRlcmZhY2UgZHJpdmVyIGZvciBEVyBTUEkgQ29yZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgT2N0YXNpYyBzZW1pY29uZHVjdG9yLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2R3X3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAiZHdfc3BpX21taW8iCisKK3N0cnVjdCBkd19zcGlfbW1pbyB7CisJc3RydWN0IGR3X3NwaSAgZHdzOworCXN0cnVjdCBjbGsgICAgICpjbGs7Cit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkd19zcGlfbW1pb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkd19zcGlfbW1pbyAqZHdzbW1pbzsKKwlzdHJ1Y3QgZHdfc3BpICpkd3M7CisJc3RydWN0IHJlc291cmNlICptZW0sICppb2FyZWE7CisJaW50IHJldDsKKworCWR3c21taW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHdfc3BpX21taW8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWR3c21taW8pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZW5kOworCX0KKworCWR3cyA9ICZkd3NtbWlvLT5kd3M7CisKKwkvKiBHZXQgYmFzaWMgaW8gcmVzb3VyY2UgYW5kIG1hcCBpdCAqLworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtIHJlc291cmNlP1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2tmcmVlOworCX0KKworCWlvYXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSksCisJCQlwZGV2LT5uYW1lKTsKKwlpZiAoIWlvYXJlYSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTUEkgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfa2ZyZWU7CisJfQorCisJZHdzLT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisJaWYgKCFkd3MtPnJlZ3MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiU1BJIHJlZ2lvbiBhbHJlYWR5IG1hcHBlZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnOworCX0KKworCWR3cy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoZHdzLT5pcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSByZXNvdXJjZT9cbiIpOworCQlyZXQgPSBkd3MtPmlycTsgLyogLUVOWElPICovCisJCWdvdG8gZXJyX3VubWFwOworCX0KKworCWR3c21taW8tPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKCFkd3NtbWlvLT5jbGspIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfaXJxOworCX0KKwljbGtfZW5hYmxlKGR3c21taW8tPmNsayk7CisKKwlkd3MtPnBhcmVudF9kZXYgPSAmcGRldi0+ZGV2OworCWR3cy0+YnVzX251bSA9IDA7CisJZHdzLT5udW1fY3MgPSA0OworCWR3cy0+bWF4X2ZyZXEgPSBjbGtfZ2V0X3JhdGUoZHdzbW1pby0+Y2xrKTsKKworCXJldCA9IGR3X3NwaV9hZGRfaG9zdChkd3MpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NsazsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGR3c21taW8pOworCXJldHVybiAwOworCitlcnJfY2xrOgorCWNsa19kaXNhYmxlKGR3c21taW8tPmNsayk7CisJY2xrX3B1dChkd3NtbWlvLT5jbGspOworCWR3c21taW8tPmNsayA9IE5VTEw7CitlcnJfaXJxOgorCWZyZWVfaXJxKGR3cy0+aXJxLCBkd3MpOworZXJyX3VubWFwOgorCWlvdW5tYXAoZHdzLT5yZWdzKTsKK2Vycl9yZWxlYXNlX3JlZzoKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKK2Vycl9rZnJlZToKKwlrZnJlZShkd3NtbWlvKTsKK2Vycl9lbmQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZHdfc3BpX21taW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGR3X3NwaV9tbWlvICpkd3NtbWlvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICptZW07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWNsa19kaXNhYmxlKGR3c21taW8tPmNsayk7CisJY2xrX3B1dChkd3NtbWlvLT5jbGspOworCWR3c21taW8tPmNsayA9IE5VTEw7CisKKwlmcmVlX2lycShkd3NtbWlvLT5kd3MuaXJxLCAmZHdzbW1pby0+ZHdzKTsKKwlkd19zcGlfcmVtb3ZlX2hvc3QoJmR3c21taW8tPmR3cyk7CisJaW91bm1hcChkd3NtbWlvLT5kd3MucmVncyk7CisJa2ZyZWUoZHdzbW1pbyk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19zcGlfbW1pb19kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChkd19zcGlfbW1pb19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZHdfc3BpX21taW9faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmR3X3NwaV9tbWlvX2RyaXZlciwgZHdfc3BpX21taW9fcHJvYmUpOworfQorbW9kdWxlX2luaXQoZHdfc3BpX21taW9faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkd19zcGlfbW1pb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmR3X3NwaV9tbWlvX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkd19zcGlfbW1pb19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmVhbi1IdWd1ZXMgRGVzY2hlbmVzIDxqZWFuLWh1Z3Vlcy5kZXNjaGVuZXNAb2N0YXNpYy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lbW9yeS1tYXBwZWQgSS9PIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBDb3JlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMgYi9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMKaW5kZXggMzRiYTY5MS4uMWYwNzM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvZHdfc3BpX3BjaS5jCisrKyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYwpAQCAtNzMsNiArNzMsNyBAQAogCWR3cy0+bnVtX2NzID0gNDsKIAlkd3MtPm1heF9mcmVxID0gMjUwMDAwMDA7CS8qIGZvciBNb29yZXN0d29uICovCiAJZHdzLT5pcnEgPSBwZGV2LT5pcnE7CisJZHdzLT5maWZvX2xlbiA9IDQwOwkJLyogRklGTyBoYXMgNDAgd29yZHMgYnVmZmVyICovCiAKIAlyZXQgPSBkd19zcGlfYWRkX2hvc3QoZHdzKTsKIAlpZiAocmV0KQpAQCAtOTgsNiArOTksNyBAQAogCXN0cnVjdCBkd19zcGlfcGNpICpkd3BjaSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlkd19zcGlfcmVtb3ZlX2hvc3QoJmR3cGNpLT5kd3MpOwogCWlvdW5tYXAoZHdwY2ktPmR3cy5yZWdzKTsKIAlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7CiAJa2ZyZWUoZHdwY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwppbmRleCBmNTBjODFkLi4wNDc0Nzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwpAQCAtNTAzLDcgKzUwMyw3IEBACiAJcmV0dXJuIG1wYzUyeHhfcHNjX3NwaV9kb19yZW1vdmUoJm9wLT5kZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3BzY19zcGlfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfcHNjX3NwaV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXNwaSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJtcGM1MjAwLXBzYy1zcGkiLCB9LCAvKiBvbGQgKi8KIAl7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfc3BpLmMKaW5kZXggNDViZmU2NC4uNmVhYjQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3NwaS5jCkBAIC01NTAsNyArNTUwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9zcGlfbWF0Y2hbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9zcGlfbWF0Y2hbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXNwaSIsIH0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMgYi9kcml2ZXJzL3NwaS9zcGlfaW14LmMKaW5kZXggMTg5M2YxZS4uMGRkYmJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2lteC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCWludCBncGlvID0gc3BpX2lteC0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKIAotCXByX2RlYnVnKCIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwgX19mdW5jX18sCisJZGV2X2RiZygmc3BpLT5kZXYsICIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwgX19mdW5jX18sCiAJCSBzcGktPm1vZGUsIHNwaS0+Yml0c19wZXJfd29yZCwgc3BpLT5tYXhfc3BlZWRfaHopOwogCiAJaWYgKGdwaW8gPj0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfbXBjOHh4eC5jCmluZGV4IDFmYjJhNmUuLjRmMGNjOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYwpAQCAtMzY1LDcgKzM2NSw3IEBACiAKIAlpZiAoKG1wYzh4eHhfc3BpLT5zcGlicmcgLyBoeikgPiA2NCkgewogCQljcy0+aHdfbW9kZSB8PSBTUE1PREVfRElWMTY7Ci0JCXBtID0gbXBjOHh4eF9zcGktPnNwaWJyZyAvIChoeiAqIDY0KTsKKwkJcG0gPSAobXBjOHh4eF9zcGktPnNwaWJyZyAtIDEpIC8gKGh6ICogNjQpICsgMTsKIAogCQlXQVJOX09OQ0UocG0gPiAxNiwgIiVzOiBSZXF1ZXN0ZWQgc3BlZWQgaXMgdG9vIGxvdzogJWQgSHouICIKIAkJCSAgIldpbGwgdXNlICVkIEh6IGluc3RlYWQuXG4iLCBkZXZfbmFtZSgmc3BpLT5kZXYpLApAQCAtMzczLDcgKzM3Myw3IEBACiAJCWlmIChwbSA+IDE2KQogCQkJcG0gPSAxNjsKIAl9IGVsc2UKLQkJcG0gPSBtcGM4eHh4X3NwaS0+c3BpYnJnIC8gKGh6ICogNCk7CisJCXBtID0gKG1wYzh4eHhfc3BpLT5zcGlicmcgLSAxKSAvIChoeiAqIDQpICsgMTsKIAlpZiAocG0pCiAJCXBtLS07CiAKQEAgLTEzMjgsNyArMTMyOCw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwbGF0X21wYzh4eHhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICptZW07Ci0JdW5zaWduZWQgaW50IGlycTsKKwlpbnQgaXJxOwogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CiAKIAlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQpAQCAtMTMzOSw3ICsxMzM5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghaXJxKQorCWlmIChpcnEgPD0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltYXN0ZXIgPSBtcGM4eHh4X3NwaV9wcm9iZSgmcGRldi0+ZGV2LCBtZW0sIGlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMKaW5kZXggMTQwYTE4ZC4uNmQ4ZDQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3BwYzR4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYwpAQCAtNTc4LDcgKzU3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNwaV9wcGM0eHhfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNwaV9wcGM0eHhfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImlibSxwcGM0eHgtc3BpIiwgfSwKIAl7fSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jIGIvZHJpdmVycy9zcGkvc3BpX3MzYzY0eHguYwppbmRleCA4OGE0NTZkLi45NzM2NTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zM2M2NHh4LmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgotI2luY2x1ZGUgPHBsYXQvc3BpLmg+CisjaW5jbHVkZSA8cGxhdC9zM2M2NHh4LXNwaS5oPgogCiAvKiBSZWdpc3RlcnMgYW5kIGJpdC1maWVsZHMgKi8KIApAQCAtMTM3LDYgKzEzNyw3IEBACiAvKioKICAqIHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAtIFJ1bnRpbWUgaW5mbyBob2xkZXIgZm9yIFNQSSBkcml2ZXIuCiAgKiBAY2xrOiBQb2ludGVyIHRvIHRoZSBzcGkgY2xvY2suCisgKiBAc3JjX2NsazogUG9pbnRlciB0byB0aGUgY2xvY2sgdXNlZCB0byBnZW5lcmF0ZSBTUEkgc2lnbmFscy4KICAqIEBtYXN0ZXI6IFBvaW50ZXIgdG8gdGhlIFNQSSBQcm90b2NvbCBtYXN0ZXIuCiAgKiBAd29ya3F1ZXVlOiBXb3JrIHF1ZXVlIGZvciB0aGUgU1BJIHhmZXIgcmVxdWVzdHMuCiAgKiBAY250cmxyX2luZm86IFBsYXRmb3JtIHNwZWNpZmljIGRhdGEgZm9yIHRoZSBjb250cm9sbGVyIHRoaXMgZHJpdmVyIG1hbmFnZXMuCkBAIC0xNTcsMTAgKzE1OCwxMSBAQAogc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhIHsKIAl2b2lkIF9faW9tZW0gICAgICAgICAgICAgICAgICAgICpyZWdzOwogCXN0cnVjdCBjbGsgICAgICAgICAgICAgICAgICAgICAgKmNsazsKKwlzdHJ1Y3QgY2xrICAgICAgICAgICAgICAgICAgICAgICpzcmNfY2xrOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgICAgICAgICAgKnBkZXY7CiAJc3RydWN0IHNwaV9tYXN0ZXIgICAgICAgICAgICAgICAqbWFzdGVyOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSAgICAgICAgKndvcmtxdWV1ZTsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gICpjbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAgKmNudHJscl9pbmZvOwogCXN0cnVjdCBzcGlfZGV2aWNlICAgICAgICAgICAgICAgKnRnbF9zcGk7CiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICAgICAgICB3b3JrOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgcXVldWU7CkBAIC0xODAsNyArMTgyLDcgQEAKIAogc3RhdGljIHZvaWQgZmx1c2hfZmlmbyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCkKIHsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHMzYzY0eHhfc3BpX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOwogCXVuc2lnbmVkIGxvbmcgbG9vcHM7CiAJdTMyIHZhbDsKQEAgLTIyNSw3ICsyMjcsNyBAQAogCQkJCXN0cnVjdCBzcGlfZGV2aWNlICpzcGksCiAJCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlciwgaW50IGRtYV9tb2RlKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdTMyIG1vZGVjZmcsIGNoY2ZnOwogCkBAIC0yOTgsMTkgKzMwMCwyMCBAQAogCQlpZiAoc2RkLT50Z2xfc3BpICE9IHNwaSkgeyAvKiBpZiBsYXN0IG1zc2cgb24gZGlmZiBkZXZpY2UgKi8KIAkJCS8qIERlc2VsZWN0IHRoZSBsYXN0IHRvZ2dsZWQgZGV2aWNlICovCiAJCQljcyA9IHNkZC0+dGdsX3NwaS0+Y29udHJvbGxlcl9kYXRhOwotCQkJY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKKwkJCWNzLT5zZXRfbGV2ZWwoY3MtPmxpbmUsCisJCQkJCXNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMCA6IDEpOwogCQl9CiAJCXNkZC0+dGdsX3NwaSA9IE5VTEw7CiAJfQogCiAJY3MgPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKLQljcy0+c2V0X2xldmVsKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMSA6IDApOworCWNzLT5zZXRfbGV2ZWwoY3MtPmxpbmUsIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMSA6IDApOwogfQogCiBzdGF0aWMgaW50IHdhaXRfZm9yX3hmZXIoc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsCiAJCQkJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlciwgaW50IGRtYV9tb2RlKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IG1zOwpAQCAtMzg0LDEyICszODcsMTEgQEAKIAlpZiAoc2RkLT50Z2xfc3BpID09IHNwaSkKIAkJc2RkLT50Z2xfc3BpID0gTlVMTDsKIAotCWNzLT5zZXRfbGV2ZWwoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAwIDogMSk7CisJY3MtPnNldF9sZXZlbChjcy0+bGluZSwgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAwIDogMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHMzYzY0eHhfc3BpX2NvbmZpZyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCkKIHsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOwogCXUzMiB2YWw7CiAKQEAgLTQzNSw3ICs0MzcsNyBAQAogCS8qIENvbmZpZ3VyZSBDbG9jayAqLwogCXZhbCA9IHJlYWRsKHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKIAl2YWwgJj0gflMzQzY0WFhfU1BJX1BTUl9NQVNLOwotCXZhbCB8PSAoKGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gc2RkLT5jdXJfc3BlZWQgLyAyIC0gMSkKKwl2YWwgfD0gKChjbGtfZ2V0X3JhdGUoc2RkLT5zcmNfY2xrKSAvIHNkZC0+Y3VyX3NwZWVkIC8gMiAtIDEpCiAJCQkmIFMzQzY0WFhfU1BJX1BTUl9NQVNLKTsKIAl3cml0ZWwodmFsLCByZWdzICsgUzNDNjRYWF9TUElfQ0xLX0NGRyk7CiAKQEAgLTU1OCw3ICs1NjAsNyBAQAogc3RhdGljIHZvaWQgaGFuZGxlX21zZyhzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCwKIAkJCQkJc3RydWN0IHNwaV9tZXNzYWdlICptc2cpCiB7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBtc2ctPnNwaTsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfY3NpbmZvICpjcyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXI7CkBAIC02MzIsOCArNjM0LDggQEAKIAkJUzNDNjRYWF9TUElfREVBQ1Qoc2RkKTsKIAogCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZXJyKCZzcGktPmRldiwgIkkvTyBFcnJvcjogXAotCQkJCXJ4LSVkIHR4LSVkIHJlczpyeC0lYyB0eC0lYyBsZW4tJWRcbiIsCisJCQlkZXZfZXJyKCZzcGktPmRldiwgIkkvTyBFcnJvcjogIgorCQkJCSJyeC0lZCB0eC0lZCByZXM6cngtJWMgdHgtJWMgbGVuLSVkXG4iLAogCQkJCXhmZXItPnJ4X2J1ZiA/IDEgOiAwLCB4ZmVyLT50eF9idWYgPyAxIDogMCwKIAkJCQkoc2RkLT5zdGF0ZSAmIFJYQlVTWSkgPyAnZicgOiAncCcsCiAJCQkJKHNkZC0+c3RhdGUgJiBUWEJVU1kpID8gJ2YnIDogJ3AnLApAQCAtNzg2LDcgKzc4OCw3IEBACiB7CiAJc3RydWN0IHMzYzY0eHhfc3BpX2NzaW5mbyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZDsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpOwogCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnOwogCXUzMiBwc3IsIHNwZWVkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04MzEsMTcgKzgzMywxNyBAQAogCX0KIAogCS8qIENoZWNrIGlmIHdlIGNhbiBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgcmF0ZSAqLwotCXNwZWVkID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gKDAgKyAxKTsgLyogTWF4IHBvc3NpYmxlICovCisJc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2RkLT5zcmNfY2xrKSAvIDIgLyAoMCArIDEpOyAvKiBNYXggcG9zc2libGUgKi8KIAogCWlmIChzcGktPm1heF9zcGVlZF9oeiA+IHNwZWVkKQogCQlzcGktPm1heF9zcGVlZF9oeiA9IHNwZWVkOwogCi0JcHNyID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gc3BpLT5tYXhfc3BlZWRfaHogLSAxOworCXBzciA9IGNsa19nZXRfcmF0ZShzZGQtPnNyY19jbGspIC8gMiAvIHNwaS0+bWF4X3NwZWVkX2h6IC0gMTsKIAlwc3IgJj0gUzNDNjRYWF9TUElfUFNSX01BU0s7CiAJaWYgKHBzciA9PSBTM0M2NFhYX1NQSV9QU1JfTUFTSykKIAkJcHNyLS07CiAKLQlzcGVlZCA9IGNsa19nZXRfcmF0ZShzY2ktPnNyY19jbGspIC8gMiAvIChwc3IgKyAxKTsKKwlzcGVlZCA9IGNsa19nZXRfcmF0ZShzZGQtPnNyY19jbGspIC8gMiAvIChwc3IgKyAxKTsKIAlpZiAoc3BpLT5tYXhfc3BlZWRfaHogPCBzcGVlZCkgewogCQlpZiAocHNyKzEgPCBTM0M2NFhYX1NQSV9QU1JfTUFTSykgewogCQkJcHNyKys7CkBAIC04NTEsNyArODUzLDcgQEAKIAkJfQogCX0KIAotCXNwZWVkID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gKHBzciArIDEpOworCXNwZWVkID0gY2xrX2dldF9yYXRlKHNkZC0+c3JjX2NsaykgLyAyIC8gKHBzciArIDEpOwogCWlmIChzcGktPm1heF9zcGVlZF9oeiA+PSBzcGVlZCkKIAkJc3BpLT5tYXhfc3BlZWRfaHogPSBzcGVlZDsKIAllbHNlCkBAIC04NjcsNyArODY5LDcgQEAKIAogc3RhdGljIHZvaWQgczNjNjR4eF9zcGlfaHdpbml0KHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkLCBpbnQgY2hhbm5lbCkKIHsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHMzYzY0eHhfc3BpX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJdm9pZCBfX2lvbWVtICpyZWdzID0gc2RkLT5yZWdzOwogCXVuc2lnbmVkIGludCB2YWw7CiAKQEAgLTkwMiw3ICs5MDQsNyBAQAogewogCXN0cnVjdCByZXNvdXJjZQkqbWVtX3JlcywgKmRtYXR4X3JlcywgKmRtYXJ4X3JlczsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZDsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaTsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpOwogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CiAJaW50IHJldDsKIApAQCAtMTAwMCwxOCArMTAwMiwxNSBAQAogCQlnb3RvIGVycjQ7CiAJfQogCi0JaWYgKHNjaS0+c3JjX2Nsa19uciA9PSBTM0M2NFhYX1NQSV9TUkNDTEtfUENMSykKLQkJc2NpLT5zcmNfY2xrID0gc2RkLT5jbGs7Ci0JZWxzZQotCQlzY2ktPnNyY19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIHNjaS0+c3JjX2Nsa19uYW1lKTsKLQlpZiAoSVNfRVJSKHNjaS0+c3JjX2NsaykpIHsKKwlzZGQtPnNyY19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIHNjaS0+c3JjX2Nsa19uYW1lKTsKKwlpZiAoSVNfRVJSKHNkZC0+c3JjX2NsaykpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIlVuYWJsZSB0byBhY3F1aXJlIGNsb2NrICclcydcbiIsIHNjaS0+c3JjX2Nsa19uYW1lKTsKLQkJcmV0ID0gUFRSX0VSUihzY2ktPnNyY19jbGspOworCQlyZXQgPSBQVFJfRVJSKHNkZC0+c3JjX2Nsayk7CiAJCWdvdG8gZXJyNTsKIAl9CiAKLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrICYmIGNsa19lbmFibGUoc2NpLT5zcmNfY2xrKSkgeworCWlmIChjbGtfZW5hYmxlKHNkZC0+c3JjX2NsaykpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgZW5hYmxlIGNsb2NrICclcydcbiIsCiAJCQkJCQkJc2NpLT5zcmNfY2xrX25hbWUpOwogCQlyZXQgPSAtRUJVU1k7CkBAIC0xMDQwLDExICsxMDM5LDEwIEBACiAJCWdvdG8gZXJyODsKIAl9CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJTYW1zdW5nIFNvQyBTUEkgRHJpdmVyIGxvYWRlZCBmb3IgQnVzIFNQSS0lZCBcCi0JCQkJCXdpdGggJWQgU2xhdmVzIGF0dGFjaGVkXG4iLAorCWRldl9kYmcoJnBkZXYtPmRldiwgIlNhbXN1bmcgU29DIFNQSSBEcml2ZXIgbG9hZGVkIGZvciBCdXMgU1BJLSVkICIKKwkJCQkJIndpdGggJWQgU2xhdmVzIGF0dGFjaGVkXG4iLAogCQkJCQlwZGV2LT5pZCwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdCk7Ci0JZGV2X2RiZygmcGRldi0+ZGV2LCAiXHRJT21lbT1bMHgleC0weCV4XVwKLQkJCQkJXHRETUE9W1J4LSVkLCBUeC0lZF1cbiIsCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiXHRJT21lbT1bMHgleC0weCV4XVx0RE1BPVtSeC0lZCwgVHgtJWRdXG4iLAogCQkJCQltZW1fcmVzLT5lbmQsIG1lbV9yZXMtPnN0YXJ0LAogCQkJCQlzZGQtPnJ4X2RtYWNoLCBzZGQtPnR4X2RtYWNoKTsKIApAQCAtMTA1MywxMSArMTA1MSw5IEBACiBlcnI4OgogCWRlc3Ryb3lfd29ya3F1ZXVlKHNkZC0+d29ya3F1ZXVlKTsKIGVycjc6Ci0JaWYgKHNjaS0+c3JjX2NsayAhPSBzZGQtPmNsaykKLQkJY2xrX2Rpc2FibGUoc2NpLT5zcmNfY2xrKTsKKwljbGtfZGlzYWJsZShzZGQtPnNyY19jbGspOwogZXJyNjoKLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfcHV0KHNjaS0+c3JjX2Nsayk7CisJY2xrX3B1dChzZGQtPnNyY19jbGspOwogZXJyNToKIAljbGtfZGlzYWJsZShzZGQtPmNsayk7CiBlcnI0OgpAQCAtMTA3OCw3ICsxMDc0LDYgQEAKIHsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gc3BpX21hc3Rlcl9nZXQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAlzdHJ1Y3QgcmVzb3VyY2UJKm1lbV9yZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTA5MywxMSArMTA4OCw4IEBACiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzZGQtPndvcmtxdWV1ZSk7CiAKLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfZGlzYWJsZShzY2ktPnNyY19jbGspOwotCi0JaWYgKHNjaS0+c3JjX2NsayAhPSBzZGQtPmNsaykKLQkJY2xrX3B1dChzY2ktPnNyY19jbGspOworCWNsa19kaXNhYmxlKHNkZC0+c3JjX2Nsayk7CisJY2xrX3B1dChzZGQtPnNyY19jbGspOwogCiAJY2xrX2Rpc2FibGUoc2RkLT5jbGspOwogCWNsa19wdXQoc2RkLT5jbGspOwpAQCAtMTEwNSw3ICsxMDk3LDggQEAKIAlpb3VubWFwKCh2b2lkICopIHNkZC0+cmVncyk7CiAKIAltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtX3JlcykpOworCWlmIChtZW1fcmVzICE9IE5VTEwpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwpAQCAtMTExOCw4ICsxMTExLDYgQEAKIHsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gc3BpX21hc3Rlcl9nZXQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY3NpbmZvICpjczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZC0+bG9jaywgZmxhZ3MpOwpAQCAtMTEzMCw5ICsxMTIxLDcgQEAKIAkJbXNsZWVwKDEwKTsKIAogCS8qIERpc2FibGUgdGhlIGNsb2NrICovCi0JaWYgKHNjaS0+c3JjX2NsayAhPSBzZGQtPmNsaykKLQkJY2xrX2Rpc2FibGUoc2NpLT5zcmNfY2xrKTsKLQorCWNsa19kaXNhYmxlKHNkZC0+c3JjX2Nsayk7CiAJY2xrX2Rpc2FibGUoc2RkLT5jbGspOwogCiAJc2RkLT5jdXJfc3BlZWQgPSAwOyAvKiBPdXRwdXQgQ2xvY2sgaXMgc3RvcHBlZCAqLwpAQCAtMTE0NCwxNSArMTEzMywxMyBAQAogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzY2ktPmNmZ19ncGlvKHBkZXYpOwogCiAJLyogRW5hYmxlIHRoZSBjbG9jayAqLwotCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCi0JCWNsa19lbmFibGUoc2NpLT5zcmNfY2xrKTsKLQorCWNsa19lbmFibGUoc2RkLT5zcmNfY2xrKTsKIAljbGtfZW5hYmxlKHNkZC0+Y2xrKTsKIAogCXMzYzY0eHhfc3BpX2h3aW5pdChzZGQsIHBkZXYtPmlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKaW5kZXggMzA5NzNlYy4uZDkzYjY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKQEAgLTIwLDEyICsyMCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NoX21zaW9mLmg+CiAKLSNpbmNsdWRlIDxhc20vc3BpLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiBzdHJ1Y3Qgc2hfbXNpb2Zfc3BpX3ByaXYgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3N0bXAuYyBiL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKaW5kZXggMjU1MmJiMy4uZmFkZmY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3N0bXAuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCkBAIC03Niw3ICs3Niw3IEBACiAJCQlicmVhazsJCQkJCQlcCiAJCX0JCQkJCQkJXAogCQljcHVfcmVsYXgoKTsJCQkJCQlcCi0JfSB3aGlsZSAodGltZV9iZWZvcmUoZW5kX2ppZmZpZXMsIGppZmZpZXMpKTsJCQlcCisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX2ppZmZpZXMpKTsJCQlcCiAJc3VjY2VlZGVkOwkJCQkJCQlcCiAJfSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCmluZGV4IDlmMzg2MzcuLjFiNDczNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKQEAgLTkzLDYgKzkzLDI2IEBACiAJdm9pZCAoKnJ4X2ZuKSAoc3RydWN0IHhpbGlueF9zcGkgKik7CiB9OwogCitzdGF0aWMgdm9pZCB4c3BpX3dyaXRlMzIodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlvd3JpdGUzMih2YWwsIGFkZHIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHhzcGlfcmVhZDMyKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gaW9yZWFkMzIoYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHhzcGlfd3JpdGUzMl9iZSh1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW93cml0ZTMyYmUodmFsLCBhZGRyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4c3BpX3JlYWQzMl9iZSh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIGlvcmVhZDMyYmUoYWRkcik7Cit9CisKIHN0YXRpYyB2b2lkIHhzcGlfdHg4KHN0cnVjdCB4aWxpbnhfc3BpICp4c3BpKQogewogCXhzcGktPndyaXRlX2ZuKCp4c3BpLT50eF9wdHIsIHhzcGktPnJlZ3MgKyBYU1BJX1RYRF9PRkZTRVQpOwpAQCAtMzc0LDExICszOTQsMTEgQEAKIAl4c3BpLT5tZW0gPSAqbWVtOwogCXhzcGktPmlycSA9IGlycTsKIAlpZiAocGRhdGEtPmxpdHRsZV9lbmRpYW4pIHsKLQkJeHNwaS0+cmVhZF9mbiA9IGlvcmVhZDMyOwotCQl4c3BpLT53cml0ZV9mbiA9IGlvd3JpdGUzMjsKKwkJeHNwaS0+cmVhZF9mbiA9IHhzcGlfcmVhZDMyOworCQl4c3BpLT53cml0ZV9mbiA9IHhzcGlfd3JpdGUzMjsKIAl9IGVsc2UgewotCQl4c3BpLT5yZWFkX2ZuID0gaW9yZWFkMzJiZTsKLQkJeHNwaS0+d3JpdGVfZm4gPSBpb3dyaXRlMzJiZTsKKwkJeHNwaS0+cmVhZF9mbiA9IHhzcGlfcmVhZDMyX2JlOworCQl4c3BpLT53cml0ZV9mbiA9IHhzcGlfd3JpdGUzMl9iZTsKIAl9CiAJeHNwaS0+Yml0c19wZXJfd29yZCA9IHBkYXRhLT5iaXRzX3Blcl93b3JkOwogCWlmICh4c3BpLT5iaXRzX3Blcl93b3JkID09IDgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYwppbmRleCA3MWRjM2FkLi5lZDM0YThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMKKysrIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaV9vZi5jCkBAIC05OSw3ICs5OSw3IEBACiAJcmV0dXJuIHhpbGlueF9zcGlfcmVtb3ZlKG9wKTsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgeGlsaW54X3NwaV9vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeGlsaW54X3NwaV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtc3BpLTIuMDAuYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zcGktMi4wMC5iIiwgfSwKIAl7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCmluZGV4IDhjZjdmMjcuLmMzMjRmNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCXN0cnVjdCBnbzcwMDcgKmdvID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwogCXN0cnVjdCBnbzcwMDdfdXNiICp1c2I7CiAJaW50IHJjOwotCWludCBkZXZfYWRkciA9IGNsaWVudC0+YWRkcjsKKwlpbnQgZGV2X2FkZHIgPSBjbGllbnQtPmFkZHIgPDwgMTsgIC8qIGZpcm13YXJlIHdhbnRzIDgtYml0IGFkZHJlc3MgKi8KIAl1OCAqYnVmOwogCiAJaWYgKGdvID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9NYWtlZmlsZQppbmRleCBjMGE1ODNjLi44NzQ0N2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDYgQEAKIG9jdGVvbi1ldGhlcm5ldC1vYmpzIDo9IGV0aGVybmV0Lm8KIG9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LW1kaW8ubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtbWVtLm8KLW9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LXByb2Mubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtcmdtaWkubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtcngubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtc2dtaWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1kZWZpbmVzLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaAppbmRleCBmMTMxMzFiLi42YTJjZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaApAQCAtNDEsMTcgKzQxLDEwIEBACiAgKiAgICAgIFRlbGxzIHRoZSBkcml2ZXIgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBidWZmZXJzIHdpdGgga2VybmVsIHNrYnVmZnMuCiAgKiAgICAgIFRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcmVjZWl2ZSBwYWNrZXRzIHdpdGhvdXQgY29weWluZyB0aGVtLiBJdCBhbHNvCiAgKiAgICAgIG1lYW5zIHRoYXQgMzJiaXQgdXNlcnNwYWNlIGNhbid0IGFjY2VzcyB0aGUgcGFja2V0IGJ1ZmZlcnMuCi0gKiAgVVNFXzMyQklUX1NIQVJFRAotICogICAgICBUaGlzIGRlZmluZSB0ZWxscyB0aGUgZHJpdmVyIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVycyBmcm9tIHRoZQotICogICAgICAzMmJpdCBzYWhyZWQgcmVnaW9uIGluc3RlYWQgb2YgdGhlIGtlcm5lbCBtZW1vcnkgc3BhY2UuCiAgKiAgVVNFX0hXX1RDUFVEUF9DSEVDS1NVTQogICogICAgICBDb250cm9scyBpZiB0aGUgT2N0ZW9uIFRDUC9VRFAgY2hlY2tzdW0gZW5naW5lIGlzIHVzZWQgZm9yIHBhY2tldAogICogICAgICBvdXRwdXQuIElmIHRoaXMgaXMgemVybywgdGhlIGtlcm5lbCB3aWxsIHBlcmZvcm0gdGhlIGNoZWNrc3VtIGluCiAgKiAgICAgIHNvZnR3YXJlLgotICogIFVTRV9NVUxUSUNPUkVfUkVDRUlWRQotICogICAgICBQcm9jZXNzIHJlY2VpdmUgaW50ZXJydXB0cyBvbiBtdWx0aXBsZSBjb3Jlcy4gVGhpcyBzcHJlYWRzIHRoZSBuZXR3b3JrCi0gKiAgICAgIGxvYWQgYWNyb3NzIHRoZSBmaXJzdCA4IHByb2Nlc3NvcnMuIElmIHRocyBpcyB6ZXJvLCBvbmx5IG9uZSBjb3JlCi0gKiAgICAgIHByb2Nlc3NlcyBpbmNvbW1pbmcgcGFja2V0cy4KICAqICBVU0VfQVNZTkNfSU9CRE1BCiAgKiAgICAgIFVzZSBhc3luY2hyb25vdXMgSU8gYWNjZXNzIHRvIGhhcmR3YXJlLiBUaGlzIHVzZXMgT2N0ZW9uJ3MgYXN5bmNocm9ub3VzCiAgKiAgICAgIElPQkRNQXMgdG8gaXNzdWUgSU8gYWNjZXNzZXMgd2l0aG91dCBzdGFsbGluZy4gU2V0IHRoaXMgdG8gemVybwpAQCAtNzUsMjkgKzY4LDE1IEBACiAjZGVmaW5lIENPTkZJR19DQVZJVU1fUkVTRVJWRTMyIDAKICNlbmRpZgogCi0jaWYgQ09ORklHX0NBVklVTV9SRVNFUlZFMzIKLSNkZWZpbmUgVVNFXzMyQklUX1NIQVJFRCAgICAgICAgICAgIDEKLSNkZWZpbmUgVVNFX1NLQlVGRlNfSU5fSFcgICAgICAgICAgIDAKLSNkZWZpbmUgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgIDAKLSNlbHNlCi0jZGVmaW5lIFVTRV8zMkJJVF9TSEFSRUQgICAgICAgICAgICAwCiAjZGVmaW5lIFVTRV9TS0JVRkZTX0lOX0hXICAgICAgICAgICAxCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogI2RlZmluZSBSRVVTRV9TS0JVRkZTX1dJVEhPVVRfRlJFRSAgMAogI2Vsc2UKICNkZWZpbmUgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgIDEKICNlbmRpZgotI2VuZGlmCiAKLS8qIE1heCBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgcGVyIGNvcmUgKi8KLSNkZWZpbmUgSU5URVJSVVBUX0xJTUlUICAgICAgICAgICAgIDEwMDAwCi0KLS8qIERvbid0IGxpbWl0IHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyAqLwotLyojZGVmaW5lIElOVEVSUlVQVF9MSU1JVCAgICAgICAgICAgICAwICAgICAqLwogI2RlZmluZSBVU0VfSFdfVENQVURQX0NIRUNLU1VNICAgICAgMQogCi0jZGVmaW5lIFVTRV9NVUxUSUNPUkVfUkVDRUlWRSAgICAgICAxCi0KIC8qIEVuYWJsZSBSYW5kb20gRWFybHkgRHJvcHBpbmcgdW5kZXIgbG9hZCAqLwogI2RlZmluZSBVU0VfUkVEICAgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZSBVU0VfQVNZTkNfSU9CRE1BICAgICAgICAgICAgKENPTkZJR19DQVZJVU1fT0NURU9OX0NWTVNFR19TSVpFID4gMCkKQEAgLTExNSwyMSArOTQsMTIgQEAKIC8qIFVzZSB0aGlzIHRvIG5vdCBoYXZlIEZQQSBmcmVlcyBjb250cm9sIEwyICovCiAvKiNkZWZpbmUgRE9OVF9XUklURUJBQ0soeCkgICAgICAgICAwICAgKi8KIAotLyogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBwcm9jZXNzIHBlciBpbnRlcnJ1cHQuICovCi0jZGVmaW5lIE1BWF9SWF9QQUNLRVRTIDEyMAogLyogTWF4aW11bSBudW1iZXIgb2YgU0tCcyB0byB0cnkgdG8gZnJlZSBwZXIgeG1pdCBwYWNrZXQuICovCi0jZGVmaW5lIE1BWF9TS0JfVE9fRlJFRSAxMAogI2RlZmluZSBNQVhfT1VUX1FVRVVFX0RFUFRIIDEwMDAKIAotI2lmbmRlZiBDT05GSUdfU01QCi0jdW5kZWYgVVNFX01VTFRJQ09SRV9SRUNFSVZFCi0jZGVmaW5lIFVTRV9NVUxUSUNPUkVfUkVDRUlWRSAwCi0jZW5kaWYKKyNkZWZpbmUgRkFVX1RPVEFMX1RYX1RPX0NMRUFOIChDVk1YX0ZBVV9SRUdfRU5EIC0gc2l6ZW9mKHVpbnQzMl90KSkKKyNkZWZpbmUgRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFIChGQVVfVE9UQUxfVFhfVE9fQ0xFQU4gLSBzaXplb2YodWludDMyX3QpKQogCi0jZGVmaW5lIElQX1BST1RPQ09MX1RDUCAgICAgICAgICAgICA2Ci0jZGVmaW5lIElQX1BST1RPQ09MX1VEUCAgICAgICAgICAgICAweDExCi0KLSNkZWZpbmUgRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFIChDVk1YX0ZBVV9SRUdfRU5EIC0gc2l6ZW9mKHVpbnQzMl90KSkKICNkZWZpbmUgVE9UQUxfTlVNQkVSX09GX1BPUlRTICAgICAgIChDVk1YX1BJUF9OVU1fSU5QVVRfUE9SVFMrMSkKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCmluZGV4IDA1YTVjYzAuLjdlMGJlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCkBAIC05NiwxMSArOTYsMTEgQEAKIH07CiAKIC8qKgotICogSU9DVEwgc3VwcG9ydCBmb3IgUEhZIGNvbnRyb2wKLSAqCisgKiBjdm1fb2N0X2lvY3RsIC0gSU9DVEwgc3VwcG9ydCBmb3IgUEhZIGNvbnRyb2wKICAqIEBkZXY6ICAgIERldmljZSB0byBjaGFuZ2UKICAqIEBycTogICAgIHRoZSByZXF1ZXN0CiAgKiBAY21kOiAgICB0aGUgY29tbWFuZAorICoKICAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzCiAgKi8KIGludCBjdm1fb2N0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogCiAvKioKLSAqIFNldHVwIHRoZSBQSFkKKyAqIGN2bV9vY3RfcGh5X3NldHVwX2RldmljZSAtIHNldHVwIHRoZSBQSFkKICAqCiAgKiBAZGV2OiAgICBEZXZpY2UgdG8gc2V0dXAKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCmluZGV4IDU1ZDA2MTRhLi5hNDE3ZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1lbS5jCmluZGV4IGI1OTU5MDMuLjAwY2M5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWVtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZW0uYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTI2LDggKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KIApAQCAtMzYsMTggKzM0LDE5IEBACiAjaW5jbHVkZSAiY3ZteC1mcGEuaCIKIAogLyoqCi0gKiBGaWxsIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIHdpdGggc2tidWZmcwotICoKKyAqIGN2bV9vY3RfZmlsbF9od19za2J1ZmYgLSBmaWxsIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIHdpdGggc2tidWZmcwogICogQHBvb2w6ICAgICBQb29sIHRvIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3IKICAqIEBzaXplOiAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyIG5lZWRlZCBmb3IgdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKKyAqCisgKiBSZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkLgogICovCiBzdGF0aWMgaW50IGN2bV9vY3RfZmlsbF9od19za2J1ZmYoaW50IHBvb2wsIGludCBzaXplLCBpbnQgZWxlbWVudHMpCiB7CiAJaW50IGZyZWVkID0gZWxlbWVudHM7CiAJd2hpbGUgKGZyZWVkKSB7CiAKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSArIDEyOCk7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUgKyAyNTYpOwogCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7CiAJCQlwcl93YXJuaW5nCiAJCQkgICAgKCJGYWlsZWQgdG8gYWxsb2NhdGUgc2tiIGZvciBoYXJkd2FyZSBwb29sICVkXG4iLApAQCAtNTUsNyArNTQsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlza2JfcmVzZXJ2ZShza2IsIDEyOCAtICgoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhKSAmIDB4N2YpKTsKKwkJc2tiX3Jlc2VydmUoc2tiLCAyNTYgLSAoKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSkgJiAweDdmKSk7CiAJCSooc3RydWN0IHNrX2J1ZmYgKiopKHNrYi0+ZGF0YSAtIHNpemVvZih2b2lkICopKSA9IHNrYjsKIAkJY3ZteF9mcGFfZnJlZShza2ItPmRhdGEsIHBvb2wsIERPTlRfV1JJVEVCQUNLKHNpemUgLyAxMjgpKTsKIAkJZnJlZWQtLTsKQEAgLTY0LDggKzYzLDcgQEAKIH0KIAogLyoqCi0gKiBGcmVlIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIG9mIHNrYnVmZnMKLSAqCisgKiBjdm1fb2N0X2ZyZWVfaHdfc2tidWZmLSBmcmVlIGhhcmR3YXJlIHBvb2wgc2tidWZmcwogICogQHBvb2w6ICAgICBQb29sIHRvIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3IKICAqIEBzaXplOiAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyIG5lZWRlZCBmb3IgdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKQEAgLTkzLDk2ICs5MSw3NiBAQAogfQogCiAvKioKLSAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSBoYXJkd2FyZSBwb29sIHdpdGggbWVtb3J5LiBEZXBlbmRpbmcKLSAqIG9uIHRoZSBjb25maWcgZGVmaW5lcywgdGhpcyBtZW1vcnkgbWlnaHQgY29tZSBmcm9tIHRoZQotICoga2VybmVsIG9yIGdsb2JhbCAzMmJpdCBtZW1vcnkgYWxsb2NhdGVkIHdpdGgKLSAqIGN2bXhfYm9vdG1lbV9hbGxvYy4KLSAqCisgKiBjdm1fb2N0X2ZpbGxfaHdfbWVtb3J5IC0gZmlsbCBhIGhhcmR3YXJlIHBvb2wgd2l0aCBtZW1vcnkuCiAgKiBAcG9vbDogICAgIFBvb2wgdG8gcG9wdWxhdGUKICAqIEBzaXplOiAgICAgU2l6ZSBvZiBlYWNoIGJ1ZmZlciBpbiB0aGUgcG9vbAogICogQGVsZW1lbnRzOiBOdW1iZXIgb2YgYnVmZmVycyB0byBhbGxvY2F0ZQorICoKKyAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQuCiAgKi8KIHN0YXRpYyBpbnQgY3ZtX29jdF9maWxsX2h3X21lbW9yeShpbnQgcG9vbCwgaW50IHNpemUsIGludCBlbGVtZW50cykKIHsKIAljaGFyICptZW1vcnk7CisJY2hhciAqZnBhOwogCWludCBmcmVlZCA9IGVsZW1lbnRzOwogCi0JaWYgKFVTRV8zMkJJVF9TSEFSRUQpIHsKLQkJZXh0ZXJuIHVpbnQ2NF90IG9jdGVvbl9yZXNlcnZlMzJfbWVtb3J5OwotCi0JCW1lbW9yeSA9Ci0JCSAgICBjdm14X2Jvb3RtZW1fYWxsb2NfcmFuZ2UoZWxlbWVudHMgKiBzaXplLCAxMjgsCi0JCQkJCSAgICAgb2N0ZW9uX3Jlc2VydmUzMl9tZW1vcnksCi0JCQkJCSAgICAgb2N0ZW9uX3Jlc2VydmUzMl9tZW1vcnkgKwotCQkJCQkgICAgIChDT05GSUdfQ0FWSVVNX1JFU0VSVkUzMiA8PCAyMCkgLQotCQkJCQkgICAgIDEpOwotCQlpZiAobWVtb3J5ID09IE5VTEwpCi0JCQlwYW5pYygiVW5hYmxlIHRvIGFsbG9jYXRlICV1IGJ5dGVzIGZvciBGUEEgcG9vbCAlZFxuIiwKLQkJCSAgICAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7Ci0KLQkJcHJfbm90aWNlKCJNZW1vcnkgcmFuZ2UgJXAgLSAlcCByZXNlcnZlZCBmb3IgIgotCQkJICAiaGFyZHdhcmVcbiIsIG1lbW9yeSwKLQkJCSAgbWVtb3J5ICsgZWxlbWVudHMgKiBzaXplIC0gMSk7Ci0KLQkJd2hpbGUgKGZyZWVkKSB7Ci0JCQljdm14X2ZwYV9mcmVlKG1lbW9yeSwgcG9vbCwgMCk7Ci0JCQltZW1vcnkgKz0gc2l6ZTsKLQkJCWZyZWVkLS07CisJd2hpbGUgKGZyZWVkKSB7CisJCS8qCisJCSAqIEZQQSBtZW1vcnkgbXVzdCBiZSAxMjggYnl0ZSBhbGlnbmVkLiAgU2luY2Ugd2UgYXJlCisJCSAqIGFsaWduaW5nIHdlIG5lZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgcG9pbnRlciBzbyB3ZQorCQkgKiBjYW4gZmVlZCBpdCB0byBrZnJlZSB3aGVuIHRoZSBtZW1vcnkgaXMgcmV0dXJuZWQgdG8KKwkJICogdGhlIGtlcm5lbC4KKwkJICoKKwkJICogV2UgYWxsb2NhdGUgYW4gZXh0cmEgMjU2IGJ5dGVzIHRvIGFsbG93IGZvcgorCQkgKiBhbGlnbm1lbnQgYW5kIHNwYWNlIGZvciB0aGUgb3JpZ2luYWwgcG9pbnRlciBzYXZlZAorCQkgKiBqdXN0IGJlZm9yZSB0aGUgYmxvY2suCisJCSAqLworCQltZW1vcnkgPSBrbWFsbG9jKHNpemUgKyAyNTYsIEdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkobWVtb3J5ID09IE5VTEwpKSB7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gYWxsb2NhdGUgJXUgYnl0ZXMgZm9yIEZQQSBwb29sICVkXG4iLAorCQkJCSAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7CisJCQlicmVhazsKIAkJfQotCX0gZWxzZSB7Ci0JCXdoaWxlIChmcmVlZCkgewotCQkJLyogV2UgbmVlZCB0byBmb3JjZSBhbGlnbm1lbnQgdG8gMTI4IGJ5dGVzIGhlcmUgKi8KLQkJCW1lbW9yeSA9IGttYWxsb2Moc2l6ZSArIDEyNywgR0ZQX0FUT01JQyk7Ci0JCQlpZiAodW5saWtlbHkobWVtb3J5ID09IE5VTEwpKSB7Ci0JCQkJcHJfd2FybmluZygiVW5hYmxlIHRvIGFsbG9jYXRlICV1IGJ5dGVzIGZvciAiCi0JCQkJCSAgICJGUEEgcG9vbCAlZFxuIiwKLQkJCQkgICAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltZW1vcnkgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpbWVtb3J5ICsgMTI3KSAmIC0xMjgpOwotCQkJY3ZteF9mcGFfZnJlZShtZW1vcnksIHBvb2wsIDApOwotCQkJZnJlZWQtLTsKLQkJfQorCQlmcGEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpbWVtb3J5ICsgMjU2KSAmIH4weDdmVUwpOworCQkqKChjaGFyICoqKWZwYSAtIDEpID0gbWVtb3J5OworCQljdm14X2ZwYV9mcmVlKGZwYSwgcG9vbCwgMCk7CisJCWZyZWVkLS07CiAJfQogCXJldHVybiBlbGVtZW50cyAtIGZyZWVkOwogfQogCiAvKioKLSAqIEZyZWUgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkIHdpdGggY3ZtX29jdF9maWxsX2h3X21lbW9yeQotICoKKyAqIGN2bV9vY3RfZnJlZV9od19tZW1vcnkgLSBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgY3ZtX29jdF9maWxsX2h3X21lbW9yeQogICogQHBvb2w6ICAgICBGUEEgcG9vbCB0byBmcmVlCiAgKiBAc2l6ZTogICAgIFNpemUgb2YgZWFjaCBidWZmZXIgaW4gdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBzaG91bGQgYmUgaW4gdGhlIHBvb2wKICAqLwogc3RhdGljIHZvaWQgY3ZtX29jdF9mcmVlX2h3X21lbW9yeShpbnQgcG9vbCwgaW50IHNpemUsIGludCBlbGVtZW50cykKIHsKLQlpZiAoVVNFXzMyQklUX1NIQVJFRCkgewotCQlwcl93YXJuaW5nKCJXYXJuaW5nOiAzMiBzaGFyZWQgbWVtb3J5IGlzIG5vdCBmcmVlYWJsZVxuIik7Ci0JfSBlbHNlIHsKLQkJY2hhciAqbWVtb3J5OwotCQlkbyB7Ci0JCQltZW1vcnkgPSBjdm14X2ZwYV9hbGxvYyhwb29sKTsKLQkJCWlmIChtZW1vcnkpIHsKLQkJCQllbGVtZW50cy0tOwotCQkJCWtmcmVlKHBoeXNfdG9fdmlydChjdm14X3B0cl90b19waHlzKG1lbW9yeSkpKTsKLQkJCX0KLQkJfSB3aGlsZSAobWVtb3J5KTsKKwljaGFyICptZW1vcnk7CisJY2hhciAqZnBhOworCWRvIHsKKwkJZnBhID0gY3ZteF9mcGFfYWxsb2MocG9vbCk7CisJCWlmIChmcGEpIHsKKwkJCWVsZW1lbnRzLS07CisJCQlmcGEgPSAoY2hhciAqKXBoeXNfdG9fdmlydChjdm14X3B0cl90b19waHlzKGZwYSkpOworCQkJbWVtb3J5ID0gKigoY2hhciAqKilmcGEgLSAxKTsKKwkJCWtmcmVlKG1lbW9yeSk7CisJCX0KKwl9IHdoaWxlIChmcGEpOwogCi0JCWlmIChlbGVtZW50cyA8IDApCi0JCQlwcl93YXJuaW5nKCJGcmVlaW5nIG9mIHBvb2wgJXUgaGFkIHRvbyBtYW55ICIKLQkJCQkgICAiYnVmZmVycyAoJWQpXG4iLAotCQkJICAgICAgIHBvb2wsIGVsZW1lbnRzKTsKLQkJZWxzZSBpZiAoZWxlbWVudHMgPiAwKQotCQkJcHJfd2FybmluZygiV2FybmluZzogRnJlZWluZyBvZiBwb29sICV1IGlzICIKLQkJCQkibWlzc2luZyAlZCBidWZmZXJzXG4iLAotCQkJICAgICBwb29sLCBlbGVtZW50cyk7Ci0JfQorCWlmIChlbGVtZW50cyA8IDApCisJCXByX3dhcm5pbmcoIkZyZWVpbmcgb2YgcG9vbCAldSBoYWQgdG9vIG1hbnkgYnVmZmVycyAoJWQpXG4iLAorCQkJcG9vbCwgZWxlbWVudHMpOworCWVsc2UgaWYgKGVsZW1lbnRzID4gMCkKKwkJcHJfd2FybmluZygiV2FybmluZzogRnJlZWluZyBvZiBwb29sICV1IGlzIG1pc3NpbmcgJWQgYnVmZmVyc1xuIiwKKwkJCXBvb2wsIGVsZW1lbnRzKTsKIH0KIAogaW50IGN2bV9vY3RfbWVtX2ZpbGxfZnBhKGludCBwb29sLCBpbnQgc2l6ZSwgaW50IGVsZW1lbnRzKQogewogCWludCBmcmVlZDsKLQlpZiAoVVNFX1NLQlVGRlNfSU5fSFcpCisJaWYgKFVTRV9TS0JVRkZTX0lOX0hXICYmIHBvb2wgPT0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0wpCiAJCWZyZWVkID0gY3ZtX29jdF9maWxsX2h3X3NrYnVmZihwb29sLCBzaXplLCBlbGVtZW50cyk7CiAJZWxzZQogCQlmcmVlZCA9IGN2bV9vY3RfZmlsbF9od19tZW1vcnkocG9vbCwgc2l6ZSwgZWxlbWVudHMpOwpAQCAtMTkxLDcgKzE2OSw3IEBACiAKIHZvaWQgY3ZtX29jdF9tZW1fZW1wdHlfZnBhKGludCBwb29sLCBpbnQgc2l6ZSwgaW50IGVsZW1lbnRzKQogewotCWlmIChVU0VfU0tCVUZGU19JTl9IVykKKwlpZiAoVVNFX1NLQlVGRlNfSU5fSFcgJiYgcG9vbCA9PSBDVk1YX0ZQQV9QQUNLRVRfUE9PTCkKIAkJY3ZtX29jdF9mcmVlX2h3X3NrYnVmZihwb29sLCBzaXplLCBlbGVtZW50cyk7CiAJZWxzZQogCQljdm1fb2N0X2ZyZWVfaHdfbWVtb3J5KHBvb2wsIHNpemUsIGVsZW1lbnRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzA4ZDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEF1dGhvcjogQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIEFTLUlTIGFuZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvcgotICogTk9OSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICogb3IgdmlzaXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCi0gKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxuZXQvZHN0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgotCi0jaW5jbHVkZSAib2N0ZW9uLWV0aGVybmV0LmgiCi0jaW5jbHVkZSAiZXRoZXJuZXQtZGVmaW5lcy5oIgotCi0jaW5jbHVkZSAiY3ZteC1oZWxwZXIuaCIKLSNpbmNsdWRlICJjdm14LXBpcC5oIgotCi0vKioKLSAqIFVzZXIgaXMgcmVhZGluZyAvcHJvYy9vY3Rlb25fZXRoZXJuZXRfc3RhdHMKLSAqCi0gKiBAbToKLSAqIEB2OgotICogUmV0dXJucwotICovCi1zdGF0aWMgaW50IGN2bV9vY3Rfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdjsKLQlpbnQgcG9ydDsKLQotCWZvciAocG9ydCA9IDA7IHBvcnQgPCBUT1RBTF9OVU1CRVJfT0ZfUE9SVFM7IHBvcnQrKykgewotCi0JCWlmIChjdm1fb2N0X2RldmljZVtwb3J0XSkgewotCQkJcHJpdiA9IG5ldGRldl9wcml2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotCQkJc2VxX3ByaW50ZihtLCAiXG5PY3Rlb24gUG9ydCAlZCAoJXMpXG4iLCBwb3J0LAotCQkJCSAgIGN2bV9vY3RfZGV2aWNlW3BvcnRdLT5uYW1lKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfcGFja2V0czogICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfcGFja2V0czogICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfcGFja2V0cywKLQkJCQkgICBwcml2LT5zdGF0cy50eF9wYWNrZXRzKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfYnl0ZXM6ICAgICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfYnl0ZXM6ICAgICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfYnl0ZXMsIHByaXYtPnN0YXRzLnR4X2J5dGVzKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfZXJyb3JzOiAgICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfZXJyb3JzOiAgICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLnR4X2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2Ryb3BwZWQ6ICAgICAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2Ryb3BwZWQ6ICAgICAgICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfZHJvcHBlZCk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2xlbmd0aF9lcnJvcnM6ICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2Fib3J0ZWRfZXJyb3JzOiAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9vdmVyX2Vycm9yczogICAgICAgICAlMTJsdVx0IgotCQkJCSAgICJ0eF9jYXJyaWVyX2Vycm9yczogICAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycywKLQkJCQkgICBwcml2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2NyY19lcnJvcnM6ICAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2ZpZm9fZXJyb3JzOiAgICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9mcmFtZV9lcnJvcnM6ICAgICAgICAlMTJsdVx0IgotCQkJCSAgICJ0eF9oZWFydGJlYXRfZXJyb3JzOiAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2ZpZm9fZXJyb3JzOiAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X3dpbmRvd19lcnJvcnM6ICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9taXNzZWRfZXJyb3JzOiAgICAgICAlMTJsdVx0IgotCQkJCSAgICJtdWx0aWNhc3Q6ICAgICAgICAgICAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLm11bHRpY2FzdCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAvcHJvYy9vY3Rlb25fZXRoZXJuZXRfc3RhdHMgd2FzIG9wZW5uZWQuIFVzZSB0aGUgc2luZ2xlX29wZW4gaXRlcmF0b3IKLSAqCi0gKiBAaW5vZGU6Ci0gKiBAZmlsZToKLSAqIFJldHVybnMKLSAqLwotc3RhdGljIGludCBjdm1fb2N0X3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGN2bV9vY3Rfc3RhdHNfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGN2bV9vY3Rfc3RhdHNfb3BlcmF0aW9ucyA9IHsKLQkub3BlbiA9IGN2bV9vY3Rfc3RhdHNfb3BlbiwKLQkucmVhZCA9IHNlcV9yZWFkLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXZvaWQgY3ZtX29jdF9wcm9jX2luaXRpYWxpemUodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0KLQkgICAgY3JlYXRlX3Byb2NfZW50cnkoIm9jdGVvbl9ldGhlcm5ldF9zdGF0cyIsIDAsIE5VTEwpOwotCWlmIChlbnRyeSkKLQkJZW50cnktPnByb2NfZm9wcyA9ICZjdm1fb2N0X3N0YXRzX29wZXJhdGlvbnM7Ci19Ci0KLXZvaWQgY3ZtX29jdF9wcm9jX3NodXRkb3duKHZvaWQpCi17Ci0JcmVtb3ZlX3Byb2NfZW50cnkoIm9jdGVvbl9ldGhlcm5ldF9zdGF0cyIsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjN2Q5Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEF1dGhvcjogQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIEFTLUlTIGFuZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvcgotICogTk9OSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICogb3IgdmlzaXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCi0gKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGN2bV9vY3RfcHJvY19pbml0aWFsaXplKHZvaWQpOwotdm9pZCBjdm1fb2N0X3Byb2Nfc2h1dGRvd24odm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMKaW5kZXggMzgyMGYxZS4uYTBkNGQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yZ21paS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcmdtaWkuYwpAQCAtMjYsNyArMjYsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAKICNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgpAQCAtNDgsMTQgKzQ4LDIwIEBACiBzdGF0aWMgdm9pZCBjdm1fb2N0X3JnbWlpX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWN2bXhfaGVscGVyX2xpbmtfaW5mb190IGxpbmtfaW5mbzsKKwlpbnQgdXNlX2dsb2JhbF9yZWdpc3Rlcl9sb2NrID0gKHByaXYtPnBoeWRldiA9PSBOVUxMKTsKIAotCS8qCi0JICogVGFrZSB0aGUgZ2xvYmFsIHJlZ2lzdGVyIGxvY2sgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHRvdWNoCi0JICogcmVnaXN0ZXJzIHRoYXQgYWZmZWN0IG1vcmUgdGhhbiBvbmUgcG9ydC4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCWlmICh1c2VfZ2xvYmFsX3JlZ2lzdGVyX2xvY2spIHsKKwkJLyoKKwkJICogVGFrZSB0aGUgZ2xvYmFsIHJlZ2lzdGVyIGxvY2sgc2luY2Ugd2UgYXJlIGdvaW5nIHRvCisJCSAqIHRvdWNoIHJlZ2lzdGVycyB0aGF0IGFmZmVjdCBtb3JlIHRoYW4gb25lIHBvcnQuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKKwl9CiAKIAlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2dldChwcml2LT5wb3J0KTsKIAlpZiAobGlua19pbmZvLnU2NCA9PSBwcml2LT5saW5rX2luZm8pIHsKQEAgLTExNSw3ICsxMjEsMTEgQEAKIAkJCQkgICAgIGRldi0+bmFtZSk7CiAJCQl9CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKworCQlpZiAodXNlX2dsb2JhbF9yZWdpc3Rlcl9sb2NrKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwkJZWxzZQorCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTUxLDcgKzE2MSwxMiBAQAogCQlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2F1dG9jb25mKHByaXYtPnBvcnQpOwogCQlwcml2LT5saW5rX2luZm8gPSBsaW5rX2luZm8udTY0OwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnbG9iYWxfcmVnaXN0ZXJfbG9jaywgZmxhZ3MpOworCisJaWYgKHVzZV9nbG9iYWxfcmVnaXN0ZXJfbG9jaykKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwllbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKKwl9CiAKIAlpZiAocHJpdi0+cGh5ZGV2ID09IE5VTEwpIHsKIAkJLyogVGVsbCBjb3JlLiAqLwpAQCAtMjEzLDggKzIyOCwxMSBAQAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPQogCQkJCSAgICBjdm1fb2N0X2RldmljZVtjdm14X2hlbHBlcl9nZXRfaXBkX3BvcnQKIAkJCQkJCSAgIChpbnRlcmZhY2UsIGluZGV4KV07Ci0JCQkJaWYgKGRldikKLQkJCQkJY3ZtX29jdF9yZ21paV9wb2xsKGRldik7CisJCQkJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkJCQlpZiAoZGV2ICYmICFhdG9taWNfcmVhZCgmY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nKSkKKwkJCQkJcXVldWVfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZwcml2LT5wb3J0X3dvcmspOworCiAJCQkJZ214X3J4X2ludF9yZWcudTY0ID0gMDsKIAkJCQlnbXhfcnhfaW50X3JlZy5zLnBoeV9kdXB4ID0gMTsKIAkJCQlnbXhfcnhfaW50X3JlZy5zLnBoeV9saW5rID0gMTsKQEAgLTI1Miw4ICsyNzAsMTEgQEAKIAkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0KIAkJCQkgICAgY3ZtX29jdF9kZXZpY2VbY3ZteF9oZWxwZXJfZ2V0X2lwZF9wb3J0CiAJCQkJCQkgICAoaW50ZXJmYWNlLCBpbmRleCldOwotCQkJCWlmIChkZXYpCi0JCQkJCWN2bV9vY3RfcmdtaWlfcG9sbChkZXYpOworCQkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCQkJaWYgKGRldiAmJiAhYXRvbWljX3JlYWQoJmN2bV9vY3RfcG9sbF9xdWV1ZV9zdG9wcGluZykpCisJCQkJCXF1ZXVlX3dvcmsoY3ZtX29jdF9wb2xsX3F1ZXVlLCAmcHJpdi0+cG9ydF93b3JrKTsKKwogCQkJCWdteF9yeF9pbnRfcmVnLnU2NCA9IDA7CiAJCQkJZ214X3J4X2ludF9yZWcucy5waHlfZHVweCA9IDE7CiAJCQkJZ214X3J4X2ludF9yZWcucy5waHlfbGluayA9IDE7CkBAIC0zMDIsNiArMzIzLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcmdtaWlfaW1tZWRpYXRlX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG9jdGVvbl9ldGhlcm5ldCwgcG9ydF93b3JrKTsKKwljdm1fb2N0X3JnbWlpX3BvbGwoY3ZtX29jdF9kZXZpY2VbcHJpdi0+cG9ydF0pOworfQorCiBpbnQgY3ZtX29jdF9yZ21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMDksNyArMzM2LDcgQEAKIAogCWN2bV9vY3RfY29tbW9uX2luaXQoZGV2KTsKIAlkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKGRldik7Ci0KKwlJTklUX1dPUksoJnByaXYtPnBvcnRfd29yaywgY3ZtX29jdF9yZ21paV9pbW1lZGlhdGVfcG9sbCk7CiAJLyoKIAkgKiBEdWUgdG8gR01YIGVycmF0YSBpbiBDTjNYWFggc2VyaWVzIGNoaXBzLCBpdCBpcyBuZWNlc3NhcnkKIAkgKiB0byB0YWtlIHRoZSBsaW5rIGRvd24gaW1tZWRpYXRlbHkgd2hlbiB0aGUgUEhZIGNoYW5nZXMKQEAgLTM5Nyw0ICs0MjQsNSBAQAogCW51bWJlcl9yZ21paV9wb3J0cy0tOwogCWlmIChudW1iZXJfcmdtaWlfcG9ydHMgPT0gMCkKIAkJZnJlZV9pcnEoT0NURU9OX0lSUV9STUwsICZudW1iZXJfcmdtaWlfcG9ydHMpOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBvcnRfd29yayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmMKaW5kZXggMWIyMzdiNy4uY2IzOGY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcnguYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTI3LDE2ICsyNywxNCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2lmZGVmIENPTkZJR19YRlJNCiAjaW5jbHVkZSA8bGludXgveGZybS5oPgpAQCAtNDgsOCArNDYsOSBAQAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CiAKICNpbmNsdWRlICJldGhlcm5ldC1kZWZpbmVzLmgiCi0jaW5jbHVkZSAib2N0ZW9uLWV0aGVybmV0LmgiCiAjaW5jbHVkZSAiZXRoZXJuZXQtbWVtLmgiCisjaW5jbHVkZSAiZXRoZXJuZXQtcnguaCIKKyNpbmNsdWRlICJvY3Rlb24tZXRoZXJuZXQuaCIKICNpbmNsdWRlICJldGhlcm5ldC11dGlsLmgiCiAKICNpbmNsdWRlICJjdm14LWhlbHBlci5oIgpAQCAtNjEsNjIgKzYwLDg4IEBACiAKICNpbmNsdWRlICJjdm14LWdteHgtZGVmcy5oIgogCi1zdHJ1Y3QgY3ZtX3Rhc2tsZXRfd3JhcHBlciB7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHQ7Ci19Oworc3RydWN0IGN2bV9uYXBpX3dyYXBwZXIgeworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCi0vKgotICogQWxpZ25pbmcgdGhlIHRhc2tsZXRfc3RydWN0IG9uIGNhY2hsaW5lIGJvdW5kcmllcyBzZWVtcyB0byBkZWNyZWFzZQotICogdGhyb3VnaHB1dCBldmVuIHRob3VnaCBpbiB0aGVvcnkgaXQgd291bGQgcmVkdWNlIGNvbnRhbnRpb24gb24gdGhlCi0gKiBjYWNoZSBsaW5lcyBjb250YWluaW5nIHRoZSBsb2Nrcy4KLSAqLworc3RhdGljIHN0cnVjdCBjdm1fbmFwaV93cmFwcGVyIGN2bV9vY3RfbmFwaVtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAotc3RhdGljIHN0cnVjdCBjdm1fdGFza2xldF93cmFwcGVyIGN2bV9vY3RfdGFza2xldFtOUl9DUFVTXTsKK3N0cnVjdCBjdm1fb2N0X2NvcmVfc3RhdGUgeworCWludCBiYXNlbGluZV9jb3JlczsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb3JlcyB0aGF0IGNvdWxkIGJlIHByb2Nlc3NpbmcKKwkgKiBpbnB1dCBwYWNrdGVzLgorCSAqLworCWF0b21pY190IGF2YWlsYWJsZV9jb3JlczsKKwljcHVtYXNrX3QgY3B1X3N0YXRlOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdGF0aWMgc3RydWN0IGN2bV9vY3RfY29yZV9zdGF0ZSBjb3JlX3N0YXRlIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdGF0aWMgdm9pZCBjdm1fb2N0X2VuYWJsZV9uYXBpKHZvaWQgKl8pCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwluYXBpX3NjaGVkdWxlKCZjdm1fb2N0X25hcGlbY3B1XS5uYXBpKTsKK30KKworc3RhdGljIHZvaWQgY3ZtX29jdF9lbmFibGVfb25lX2NwdSh2b2lkKQoreworCWludCB2OworCWludCBjcHU7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgbW9yZSBDUFVzIGFyZSBhdmFpbGFibGUgZm9yIHJlY2VpdmUgcHJvY2Vzc2luZy4uLiAqLworCXYgPSBhdG9taWNfc3ViX2lmX3Bvc2l0aXZlKDEsICZjb3JlX3N0YXRlLmF2YWlsYWJsZV9jb3Jlcyk7CisJaWYgKHYgPCAwKQorCQlyZXR1cm47CisKKwkvKiAuLi4gaWYgYSBDUFUgaXMgYXZhaWxhYmxlLCBUdXJuIG9uIE5BUEkgcG9sbGluZyBmb3IgdGhhdCBDUFUuICAqLworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIGNvcmVfc3RhdGUuY3B1X3N0YXRlKSkgeworCQkJdiA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGN2bV9vY3RfZW5hYmxlX25hcGksCisJCQkJCQkgICAgIE5VTEwsIDApOworCQkJaWYgKHYpCisJCQkJcGFuaWMoIkNhbid0IGVuYWJsZSBOQVBJLiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGN2bV9vY3Rfbm9fbW9yZV93b3JrKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogQ1BVIHplcm8gaXMgc3BlY2lhbC4gIEl0IGFsd2F5cyBoYXMgdGhlIGlycSBlbmFibGVkIHdoZW4KKwkgKiB3YWl0aW5nIGZvciBpbmNvbWluZyBwYWNrZXRzLgorCSAqLworCWlmIChjcHUgPT0gMCkgeworCQllbmFibGVfaXJxKE9DVEVPTl9JUlFfV09SS1EwICsgcG93X3JlY2VpdmVfZ3JvdXApOworCQlyZXR1cm47CisJfQorCisJY3B1X2NsZWFyKGNwdSwgY29yZV9zdGF0ZS5jcHVfc3RhdGUpOworCWF0b21pY19hZGQoMSwgJmNvcmVfc3RhdGUuYXZhaWxhYmxlX2NvcmVzKTsKK30KIAogLyoqCi0gKiBJbnRlcnJ1cHQgaGFuZGxlci4gVGhlIGludGVycnVwdCBvY2N1cnMgd2hlbmV2ZXIgdGhlIFBPVwotICogdHJhbnNpdGlvbnMgZnJvbSAwLT4xIHBhY2tldHMgaW4gb3VyIGdyb3VwLgorICogY3ZtX29jdF9kb19pbnRlcnJ1cHQgLSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqCi0gKiBAY3BsOgotICogQGRldl9pZDoKLSAqIEByZWdzOgotICogUmV0dXJucworICogVGhlIGludGVycnVwdCBvY2N1cnMgd2hlbmV2ZXIgdGhlIFBPVyBoYXMgcGFja2V0cyBpbiBvdXIgZ3JvdXAuCisgKgogICovCi1pcnFyZXR1cm5fdCBjdm1fb2N0X2RvX2ludGVycnVwdChpbnQgY3BsLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgY3ZtX29jdF9kb19pbnRlcnJ1cHQoaW50IGNwbCwgdm9pZCAqZGV2X2lkKQogewotCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KLQlpZiAoSU5URVJSVVBUX0xJTUlUKQotCQljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlQsIDEgPDwgcG93X3JlY2VpdmVfZ3JvdXApOwotCWVsc2UKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5ULCAweDEwMDAxIDw8IHBvd19yZWNlaXZlX2dyb3VwKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZjdm1fb2N0X3Rhc2tsZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXS50KTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCS8qIERpc2FibGUgdGhlIElSUSBhbmQgc3RhcnQgbmFwaV9wb2xsLiAqLworCWRpc2FibGVfaXJxX25vc3luYyhPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKwljdm1fb2N0X2VuYWJsZV9uYXBpKE5VTEwpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIC8qKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUga2VybmVsIG5lZWRzIHRvIG1hbnVhbGx5IHBvbGwgdGhlCi0gKiBkZXZpY2UuIEZvciBPY3Rlb24sIHRoaXMgaXMgc2ltcGx5IGNhbGxpbmcgdGhlIGludGVycnVwdAotICogaGFuZGxlci4gV2UgYWN0dWFsbHkgcG9sbCBhbGwgdGhlIGRldmljZXMsIG5vdCBqdXN0IHRoZQotICogb25lIHN1cHBsaWVkLgotICoKLSAqIEBkZXY6ICAgIERldmljZSB0byBwb2xsLiBVbnVzZWQKLSAqLwotdm9pZCBjdm1fb2N0X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXByZWVtcHRfZGlzYWJsZSgpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmN2bV9vY3RfdGFza2xldFtzbXBfcHJvY2Vzc29yX2lkKCldLnQpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBUaGlzIGlzIGNhbGxlZCBvbiByZWNlaXZlIGVycm9ycywgYW5kIGRldGVybWluZXMgaWYgdGhlIHBhY2tldAotICogY2FuIGJlIGRyb3BwZWQgZWFybHktb24gaW4gY3ZtX29jdF90YXNrbGV0X3J4KCkuCi0gKgorICogY3ZtX29jdF9jaGVja19yY3ZfZXJyb3IgLSBwcm9jZXNzIHJlY2VpdmUgZXJyb3JzCiAgKiBAd29yazogV29yayBxdWV1ZSBlbnRyeSBwb2ludGluZyB0byB0aGUgcGFja2V0LgorICoKICAqIFJldHVybnMgTm9uLXplcm8gaWYgdGhlIHBhY2tldCBjYW4gYmUgZHJvcHBlZCwgemVybyBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGN2bV9vY3RfY2hlY2tfcmN2X2Vycm9yKGN2bXhfd3FlX3QgKndvcmspCkBAIC0xOTksMTkgKzIyNCwyMCBAQAogfQogCiAvKioKLSAqIFRhc2tsZXQgZnVuY3Rpb24gdGhhdCBpcyBzY2hlZHVsZWQgb24gYSBjb3JlIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4KKyAqIGN2bV9vY3RfbmFwaV9wb2xsIC0gdGhlIE5BUEkgcG9sbCBmdW5jdGlvbi4KKyAqIEBuYXBpOiBUaGUgTkFQSSBpbnN0YW5jZSwgb3IgbnVsbCBpZiBjYWxsZWQgZnJvbSBjdm1fb2N0X3BvbGxfY29udHJvbGxlcgorICogQGJ1ZGdldDogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byByZWNlaXZlLgogICoKLSAqIEB1bnVzZWQ6CisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFja2V0cyBwcm9jZXNzZWQuCiAgKi8KLXZvaWQgY3ZtX29jdF90YXNrbGV0X3J4KHVuc2lnbmVkIGxvbmcgdW51c2VkKQorc3RhdGljIGludCBjdm1fb2N0X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0JY29uc3QgaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JdWludDY0X3Qgb2xkX2dyb3VwX21hc2s7Ci0JdWludDY0X3Qgb2xkX3NjcmF0Y2g7Ci0JaW50IHJ4X2NvdW50ID0gMDsKLQlpbnQgbnVtYmVyX3RvX2ZyZWU7Ci0JaW50IG51bV9mcmVlZDsKLQlpbnQgcGFja2V0X25vdF9jb3BpZWQ7CisJY29uc3QgaW50CWNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7CisJdWludDY0X3QJb2xkX2dyb3VwX21hc2s7CisJdWludDY0X3QJb2xkX3NjcmF0Y2g7CisJaW50CQlyeF9jb3VudCA9IDA7CisJaW50CQlkaWRfd29ya19yZXF1ZXN0ID0gMDsKKwlpbnQJCXBhY2tldF9ub3RfY29waWVkOwogCiAJLyogUHJlZmV0Y2ggY3ZtX29jdF9kZXZpY2Ugc2luY2Ugd2Uga25vdyB3ZSBuZWVkIGl0IHNvb24gKi8KIAlwcmVmZXRjaChjdm1fb2N0X2RldmljZSk7CkBAIC0yMjcsNTkgKzI1Myw2MyBAQAogCWN2bXhfd3JpdGVfY3NyKENWTVhfUE9XX1BQX0dSUF9NU0tYKGNvcmVpZCksCiAJCSAgICAgICAob2xkX2dyb3VwX21hc2sgJiB+MHhGRkZGdWxsKSB8IDEgPDwgcG93X3JlY2VpdmVfZ3JvdXApOwogCi0JaWYgKFVTRV9BU1lOQ19JT0JETUEpCisJaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKIAkJY3ZteF9wb3dfd29ya19yZXF1ZXN0X2FzeW5jKENWTVhfU0NSX1NDUkFUQ0gsIENWTVhfUE9XX05PX1dBSVQpOworCQlkaWRfd29ya19yZXF1ZXN0ID0gMTsKKwl9CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChyeF9jb3VudCA8IGJ1ZGdldCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwkJc3RydWN0IHNrX2J1ZmYgKipwc2tiID0gTlVMTDsKIAkJaW50IHNrYl9pbl9odzsKIAkJY3ZteF93cWVfdCAqd29yazsKIAotCQlpZiAoVVNFX0FTWU5DX0lPQkRNQSkgeworCQlpZiAoVVNFX0FTWU5DX0lPQkRNQSAmJiBkaWRfd29ya19yZXF1ZXN0KQogCQkJd29yayA9IGN2bXhfcG93X3dvcmtfcmVzcG9uc2VfYXN5bmMoQ1ZNWF9TQ1JfU0NSQVRDSCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKElOVEVSUlVQVF9MSU1JVCA9PSAwKQotCQkJICAgIHx8IGxpa2VseShyeF9jb3VudCA8IE1BWF9SWF9QQUNLRVRTKSkKLQkJCQl3b3JrID0KLQkJCQkgICAgY3ZteF9wb3dfd29ya19yZXF1ZXN0X3N5bmMKLQkJCQkgICAgKENWTVhfUE9XX05PX1dBSVQpOwotCQkJZWxzZQotCQkJCXdvcmsgPSBOVUxMOwotCQl9CisJCWVsc2UKKwkJCXdvcmsgPSBjdm14X3Bvd193b3JrX3JlcXVlc3Rfc3luYyhDVk1YX1BPV19OT19XQUlUKTsKKwogCQlwcmVmZXRjaCh3b3JrKTsKLQkJaWYgKHdvcmsgPT0gTlVMTCkKKwkJZGlkX3dvcmtfcmVxdWVzdCA9IDA7CisJCWlmICh3b3JrID09IE5VTEwpIHsKKwkJCXVuaW9uIGN2bXhfcG93X3dxX2ludCB3cV9pbnQ7CisJCQl3cV9pbnQudTY0ID0gMDsKKwkJCXdxX2ludC5zLmlxX2RpcyA9IDEgPDwgcG93X3JlY2VpdmVfZ3JvdXA7CisJCQl3cV9pbnQucy53cV9pbnQgPSAxIDw8IHBvd19yZWNlaXZlX2dyb3VwOworCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5ULCB3cV9pbnQudTY0KTsKIAkJCWJyZWFrOworCQl9CisJCXBza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiopKGN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIod29yay0+cGFja2V0X3B0cikgLSBzaXplb2Yodm9pZCAqKSk7CisJCXByZWZldGNoKHBza2IpOwogCi0JCS8qCi0JCSAqIExpbWl0IGVhY2ggY29yZSB0byBwcm9jZXNzaW5nIE1BWF9SWF9QQUNLRVRTCi0JCSAqIHBhY2tldHMgd2l0aG91dCBhIGJyZWFrLiAgVGhpcyB3YXkgdGhlIFJYIGNhbid0Ci0JCSAqIHN0YXJ2ZSB0aGUgVFggdGFzay4KLQkJICovCi0JCWlmIChVU0VfQVNZTkNfSU9CRE1BKSB7CisJCWlmIChVU0VfQVNZTkNfSU9CRE1BICYmIHJ4X2NvdW50IDwgKGJ1ZGdldCAtIDEpKSB7CisJCQljdm14X3Bvd193b3JrX3JlcXVlc3RfYXN5bmNfbm9jaGVjayhDVk1YX1NDUl9TQ1JBVENILCBDVk1YX1BPV19OT19XQUlUKTsKKwkJCWRpZF93b3JrX3JlcXVlc3QgPSAxOworCQl9CiAKLQkJCWlmICgoSU5URVJSVVBUX0xJTUlUID09IDApCi0JCQkgICAgfHwgbGlrZWx5KHJ4X2NvdW50IDwgTUFYX1JYX1BBQ0tFVFMpKQotCQkJCWN2bXhfcG93X3dvcmtfcmVxdWVzdF9hc3luY19ub2NoZWNrCi0JCQkJICAgIChDVk1YX1NDUl9TQ1JBVENILCBDVk1YX1BPV19OT19XQUlUKTsKLQkJCWVsc2UgewotCQkJCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsCi0JCQkJCQkgICAgIDB4ODAwMDAwMDAwMDAwMDAwMHVsbCk7Ci0JCQkJY3ZteF9wb3dfdGFnX3N3X251bGxfbm9jaGVjaygpOwotCQkJfQorCQlpZiAocnhfY291bnQgPT0gMCkgeworCQkJLyoKKwkJCSAqIEZpcnN0IHRpbWUgdGhyb3VnaCwgc2VlIGlmIHRoZXJlIGlzIGVub3VnaAorCQkJICogd29yayB3YWl0aW5nIHRvIG1lcml0IHdha2luZyBhbm90aGVyCisJCQkgKiBDUFUuCisJCQkgKi8KKwkJCXVuaW9uIGN2bXhfcG93X3dxX2ludF9jbnR4IGNvdW50czsKKwkJCWludCBiYWNrbG9nOworCQkJaW50IGNvcmVzX2luX3VzZSA9IGNvcmVfc3RhdGUuYmFzZWxpbmVfY29yZXMgLSBhdG9taWNfcmVhZCgmY29yZV9zdGF0ZS5hdmFpbGFibGVfY29yZXMpOworCQkJY291bnRzLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QT1dfV1FfSU5UX0NOVFgocG93X3JlY2VpdmVfZ3JvdXApKTsKKwkJCWJhY2tsb2cgPSBjb3VudHMucy5pcV9jbnQgKyBjb3VudHMucy5kc19jbnQ7CisJCQlpZiAoYmFja2xvZyA+IGJ1ZGdldCAqIGNvcmVzX2luX3VzZSAmJiBuYXBpICE9IE5VTEwpCisJCQkJY3ZtX29jdF9lbmFibGVfb25lX2NwdSgpOwogCQl9CiAKIAkJc2tiX2luX2h3ID0gVVNFX1NLQlVGRlNfSU5fSFcgJiYgd29yay0+d29yZDIucy5idWZzID09IDE7CiAJCWlmIChsaWtlbHkoc2tiX2luX2h3KSkgewotCQkJc2tiID0KLQkJCSAgICAqKHN0cnVjdCBza19idWZmCi0JCQkgICAgICAqKikoY3ZtX29jdF9nZXRfYnVmZmVyX3B0cih3b3JrLT5wYWNrZXRfcHRyKSAtCi0JCQkJICBzaXplb2Yodm9pZCAqKSk7CisJCQlza2IgPSAqcHNrYjsKIAkJCXByZWZldGNoKCZza2ItPmhlYWQpOwogCQkJcHJlZmV0Y2goJnNrYi0+bGVuKTsKIAkJfQogCQlwcmVmZXRjaChjdm1fb2N0X2RldmljZVt3b3JrLT5pcHBydF0pOwogCi0JCXJ4X2NvdW50Kys7CiAJCS8qIEltbWVkaWF0ZWx5IHRocm93IGF3YXkgYWxsIHBhY2tldHMgd2l0aCByZWNlaXZlIGVycm9ycyAqLwogCQlpZiAodW5saWtlbHkod29yay0+d29yZDIuc25vaXAucmN2X2Vycm9yKSkgewogCQkJaWYgKGN2bV9vY3RfY2hlY2tfcmN2X2Vycm9yKHdvcmspKQpAQCAtMjkyLDM5ICszMjIsMjcgQEAKIAkJICogYnVmZmVyLgogCQkgKi8KIAkJaWYgKGxpa2VseShza2JfaW5faHcpKSB7Ci0JCQkvKgotCQkJICogVGhpcyBjYWxjdWxhdGlvbiB3YXMgY2hhbmdlZCBpbiBjYXNlIHRoZQotCQkJICogc2tiIGhlYWRlciBpcyB1c2luZyBhIGRpZmZlcmVudCBhZGRyZXNzCi0JCQkgKiBhbGlhc2luZyB0eXBlIHRoYW4gdGhlIGJ1ZmZlci4gSXQgZG9lc24ndAotCQkJICogbWFrZSBhbnkgZGlmZmVybmVjZSBub3csIGJ1dCB0aGUgbmV3IG9uZSBpcwotCQkJICogbW9yZSBjb3JyZWN0LgotCQkJICovCi0JCQlza2ItPmRhdGEgPQotCQkJICAgIHNrYi0+aGVhZCArIHdvcmstPnBhY2tldF9wdHIucy5hZGRyIC0KLQkJCSAgICBjdm14X3B0cl90b19waHlzKHNrYi0+aGVhZCk7CisJCQlza2ItPmRhdGEgPSBza2ItPmhlYWQgKyB3b3JrLT5wYWNrZXRfcHRyLnMuYWRkciAtIGN2bXhfcHRyX3RvX3BoeXMoc2tiLT5oZWFkKTsKIAkJCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAJCQlza2ItPmxlbiA9IHdvcmstPmxlbjsKIAkJCXNrYl9zZXRfdGFpbF9wb2ludGVyKHNrYiwgc2tiLT5sZW4pOwogCQkJcGFja2V0X25vdF9jb3BpZWQgPSAxOwogCQl9IGVsc2UgewotCiAJCQkvKgogCQkJICogV2UgaGF2ZSB0byBjb3B5IHRoZSBwYWNrZXQuIEZpcnN0IGFsbG9jYXRlCiAJCQkgKiBhbiBza2J1ZmYgZm9yIGl0LgogCQkJICovCiAJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHdvcmstPmxlbik7CiAJCQlpZiAoIXNrYikgewotCQkJCURFQlVHUFJJTlQoIlBvcnQgJWQgZmFpbGVkIHRvIGFsbG9jYXRlICIKLQkJCQkJICAgInNrYnVmZiwgcGFja2V0IGRyb3BwZWRcbiIsCi0JCQkJICAgICB3b3JrLT5pcHBydCk7CisJCQkJREVCVUdQUklOVCgiUG9ydCAlZCBmYWlsZWQgdG8gYWxsb2NhdGUgc2tidWZmLCBwYWNrZXQgZHJvcHBlZFxuIiwKKwkJCQkJICAgd29yay0+aXBwcnQpOwogCQkJCWN2bV9vY3RfZnJlZV93b3JrKHdvcmspOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQkvKgogCQkJICogQ2hlY2sgaWYgd2UndmUgcmVjZWl2ZWQgYSBwYWNrZXQgdGhhdCB3YXMKLQkJCSAqIGVudGlyZWx5IHN0b3JlZCBpbiB0aGUgd29yayBlbnRyeS4gVGhpcyBpcwotCQkJICogdW50ZXN0ZWQuCisJCQkgKiBlbnRpcmVseSBzdG9yZWQgaW4gdGhlIHdvcmsgZW50cnkuCiAJCQkgKi8KIAkJCWlmICh1bmxpa2VseSh3b3JrLT53b3JkMi5zLmJ1ZnMgPT0gMCkpIHsKIAkJCQl1aW50OF90ICpwdHIgPSB3b3JrLT5wYWNrZXRfZGF0YTsKQEAgLTM0MywxNSArMzYxLDEzIEBACiAJCQkJLyogTm8gcGFja2V0IGJ1ZmZlcnMgdG8gZnJlZSAqLwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgc2VnbWVudHMgPSB3b3JrLT53b3JkMi5zLmJ1ZnM7Ci0JCQkJdW5pb24gY3ZteF9idWZfcHRyIHNlZ21lbnRfcHRyID0KLQkJCQkJd29yay0+cGFja2V0X3B0cjsKKwkJCQl1bmlvbiBjdm14X2J1Zl9wdHIgc2VnbWVudF9wdHIgPSB3b3JrLT5wYWNrZXRfcHRyOwogCQkJCWludCBsZW4gPSB3b3JrLT5sZW47CiAKIAkJCQl3aGlsZSAoc2VnbWVudHMtLSkgewogCQkJCQl1bmlvbiBjdm14X2J1Zl9wdHIgbmV4dF9wdHIgPQotCQkJCQkgICAgKih1bmlvbiBjdm14X2J1Zl9wdHIgKikKLQkJCQkJICAgIGN2bXhfcGh5c190b19wdHIoc2VnbWVudF9wdHIucy4KLQkJCQkJCQkgICAgIGFkZHIgLSA4KTsKKwkJCQkJICAgICoodW5pb24gY3ZteF9idWZfcHRyICopY3ZteF9waHlzX3RvX3B0cihzZWdtZW50X3B0ci5zLmFkZHIgLSA4KTsKKwogCQkJLyoKIAkJCSAqIE9jdGVvbiBFcnJhdGEgUEtJLTEwMDogVGhlIHNlZ21lbnQgc2l6ZSBpcwogCQkJICogd3JvbmcuIFVudGlsIGl0IGlzIGZpeGVkLCBjYWxjdWxhdGUgdGhlCkBAIC0zNjEsMjIgKzM3NywxOCBAQAogCQkJICogb25lOiBpbnQgc2VnbWVudF9zaXplID0KIAkJCSAqIHNlZ21lbnRfcHRyLnMuc2l6ZTsKIAkJCSAqLwotCQkJCQlpbnQgc2VnbWVudF9zaXplID0KLQkJCQkJICAgIENWTVhfRlBBX1BBQ0tFVF9QT09MX1NJWkUgLQotCQkJCQkgICAgKHNlZ21lbnRfcHRyLnMuYWRkciAtCi0JCQkJCSAgICAgKCgoc2VnbWVudF9wdHIucy5hZGRyID4+IDcpIC0KLQkJCQkJICAgICAgIHNlZ21lbnRfcHRyLnMuYmFjaykgPDwgNykpOwotCQkJCQkvKiBEb24ndCBjb3B5IG1vcmUgdGhhbiB3aGF0IGlzIGxlZnQKLQkJCQkJICAgaW4gdGhlIHBhY2tldCAqLworCQkJCQlpbnQgc2VnbWVudF9zaXplID0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSAtCisJCQkJCQkoc2VnbWVudF9wdHIucy5hZGRyIC0gKCgoc2VnbWVudF9wdHIucy5hZGRyID4+IDcpIC0gc2VnbWVudF9wdHIucy5iYWNrKSA8PCA3KSk7CisJCQkJCS8qCisJCQkJCSAqIERvbid0IGNvcHkgbW9yZSB0aGFuIHdoYXQKKwkJCQkJICogaXMgbGVmdCBpbiB0aGUgcGFja2V0LgorCQkJCQkgKi8KIAkJCQkJaWYgKHNlZ21lbnRfc2l6ZSA+IGxlbikKIAkJCQkJCXNlZ21lbnRfc2l6ZSA9IGxlbjsKIAkJCQkJLyogQ29weSB0aGUgZGF0YSBpbnRvIHRoZSBwYWNrZXQgKi8KIAkJCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBzZWdtZW50X3NpemUpLAotCQkJCQkgICAgICAgY3ZteF9waHlzX3RvX3B0cihzZWdtZW50X3B0ci5zLgotCQkJCQkJCQlhZGRyKSwKKwkJCQkJICAgICAgIGN2bXhfcGh5c190b19wdHIoc2VnbWVudF9wdHIucy5hZGRyKSwKIAkJCQkJICAgICAgIHNlZ21lbnRfc2l6ZSk7Ci0JCQkJCS8qIFJlZHVjZSB0aGUgYW1vdW50IG9mIGJ5dGVzIGxlZnQKLQkJCQkJICAgdG8gY29weSAqLwogCQkJCQlsZW4gLT0gc2VnbWVudF9zaXplOwogCQkJCQlzZWdtZW50X3B0ciA9IG5leHRfcHRyOwogCQkJCX0KQEAgLTM4OSwxNiArNDAxLDE1IEBACiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3ZtX29jdF9kZXZpY2Vbd29yay0+aXBwcnRdOwogCQkJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJCS8qIE9ubHkgYWNjZXB0IHBhY2tldHMgZm9yIGRldmljZXMKLQkJCSAgIHRoYXQgYXJlIGN1cnJlbnRseSB1cCAqLworCQkJLyoKKwkJCSAqIE9ubHkgYWNjZXB0IHBhY2tldHMgZm9yIGRldmljZXMgdGhhdCBhcmUKKwkJCSAqIGN1cnJlbnRseSB1cC4KKwkJCSAqLwogCQkJaWYgKGxpa2VseShkZXYtPmZsYWdzICYgSUZGX1VQKSkgewogCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQkJc2tiLT5kZXYgPSBkZXY7CiAKLQkJCQlpZiAodW5saWtlbHkKLQkJCQkgICAgKHdvcmstPndvcmQyLnMubm90X0lQCi0JCQkJICAgICB8fCB3b3JrLT53b3JkMi5zLklQX2V4YwotCQkJCSAgICAgfHwgd29yay0+d29yZDIucy5MNF9lcnJvcikpCisJCQkJaWYgKHVubGlrZWx5KHdvcmstPndvcmQyLnMubm90X0lQIHx8IHdvcmstPndvcmQyLnMuSVBfZXhjIHx8IHdvcmstPndvcmQyLnMuTDRfZXJyb3IpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJCQkJZWxzZQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtNDE0LDE1ICs0MjUsMTMgQEAKICNlbmRpZgogCQkJCX0KIAkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJCXJ4X2NvdW50Kys7CiAJCQl9IGVsc2UgeworCQkJCS8qIERyb3AgYW55IHBhY2tldCByZWNlaXZlZCBmb3IgYSBkZXZpY2UgdGhhdCBpc24ndCB1cCAqLwogCQkJCS8qCi0JCQkJICogRHJvcCBhbnkgcGFja2V0IHJlY2VpdmVkIGZvciBhCi0JCQkJICogZGV2aWNlIHRoYXQgaXNuJ3QgdXAuCi0JCQkJICovCi0JCQkJLyoKLQkJCQkgICBERUJVR1BSSU5UKCIlczogRGV2aWNlIG5vdCB1cCwgcGFja2V0IGRyb3BwZWRcbiIsCi0JCQkJICAgZGV2LT5uYW1lKTsKLQkJCQkgKi8KKwkJCQlERUJVR1BSSU5UKCIlczogRGV2aWNlIG5vdCB1cCwgcGFja2V0IGRyb3BwZWRcbiIsCisJCQkJCSAgIGRldi0+bmFtZSk7CisJCQkJKi8KICNpZmRlZiBDT05GSUdfNjRCSVQKIAkJCQlhdG9taWM2NF9hZGQoMSwgKGF0b21pYzY0X3QgKikmcHJpdi0+c3RhdHMucnhfZHJvcHBlZCk7CiAjZWxzZQpAQCAtNDM1LDkgKzQ0NCw4IEBACiAJCQkgKiBEcm9wIGFueSBwYWNrZXQgcmVjZWl2ZWQgZm9yIGEgZGV2aWNlIHRoYXQKIAkJCSAqIGRvZXNuJ3QgZXhpc3QuCiAJCQkgKi8KLQkJCURFQlVHUFJJTlQoIlBvcnQgJWQgbm90IGNvbnRyb2xsZWQgYnkgTGludXgsIHBhY2tldCAiCi0JCQkJICAgImRyb3BwZWRcbiIsCi0JCQkgICAgIHdvcmstPmlwcHJ0KTsKKwkJCURFQlVHUFJJTlQoIlBvcnQgJWQgbm90IGNvbnRyb2xsZWQgYnkgTGludXgsIHBhY2tldCBkcm9wcGVkXG4iLAorCQkJCSAgIHdvcmstPmlwcHJ0KTsKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCX0KIAkJLyoKQEAgLTQ1OSw0NyArNDY3LDkzIEBACiAJCQljdm1fb2N0X2ZyZWVfd29yayh3b3JrKTsKIAkJfQogCX0KLQogCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFBPVyBncm91cCBtYXNrICovCiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfUFBfR1JQX01TS1goY29yZWlkKSwgb2xkX2dyb3VwX21hc2spOwogCWlmIChVU0VfQVNZTkNfSU9CRE1BKSB7CiAJCS8qIFJlc3RvcmUgdGhlIHNjcmF0Y2ggYXJlYSAqLwogCQljdm14X3NjcmF0Y2hfd3JpdGU2NChDVk1YX1NDUl9TQ1JBVENILCBvbGRfc2NyYXRjaCk7CiAJfQorCWN2bV9vY3RfcnhfcmVmaWxsX3Bvb2woMCk7CiAKLQlpZiAoVVNFX1NLQlVGRlNfSU5fSFcpIHsKLQkJLyogUmVmaWxsIHRoZSBwYWNrZXQgYnVmZmVyIHBvb2wgKi8KLQkJbnVtYmVyX3RvX2ZyZWUgPQotCQkgICAgY3ZteF9mYXVfZmV0Y2hfYW5kX2FkZDMyKEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRSwgMCk7Ci0KLQkJaWYgKG51bWJlcl90b19mcmVlID4gMCkgewotCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyKEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRSwKLQkJCQkJICAgICAgLW51bWJlcl90b19mcmVlKTsKLQkJCW51bV9mcmVlZCA9Ci0JCQkgICAgY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsCi0JCQkJCQkgQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSwKLQkJCQkJCSBudW1iZXJfdG9fZnJlZSk7Ci0JCQlpZiAobnVtX2ZyZWVkICE9IG51bWJlcl90b19mcmVlKSB7Ci0JCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyCi0JCQkJICAgIChGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCi0JCQkJICAgICBudW1iZXJfdG9fZnJlZSAtIG51bV9mcmVlZCk7Ci0JCQl9Ci0JCX0KKwlpZiAocnhfY291bnQgPCBidWRnZXQgJiYgbmFwaSAhPSBOVUxMKSB7CisJCS8qIE5vIG1vcmUgd29yayAqLworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQljdm1fb2N0X25vX21vcmVfd29yaygpOwogCX0KKwlyZXR1cm4gcnhfY291bnQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorLyoqCisgKiBjdm1fb2N0X3BvbGxfY29udHJvbGxlciAtIHBvbGwgZm9yIHJlY2VpdmUgcGFja2V0cworICogZGV2aWNlLgorICoKKyAqIEBkZXY6ICAgIERldmljZSB0byBwb2xsLiBVbnVzZWQKKyAqLwordm9pZCBjdm1fb2N0X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWN2bV9vY3RfbmFwaV9wb2xsKE5VTEwsIDE2KTsKK30KKyNlbmRpZgorCiB2b2lkIGN2bV9vY3RfcnhfaW5pdGlhbGl6ZSh2b2lkKQogewogCWludCBpOwotCS8qIEluaXRpYWxpemUgYWxsIG9mIHRoZSB0YXNrbGV0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCi0JCXRhc2tsZXRfaW5pdCgmY3ZtX29jdF90YXNrbGV0W2ldLnQsIGN2bV9vY3RfdGFza2xldF9yeCwgMCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldl9mb3JfbmFwaSA9IE5VTEw7CisJdW5pb24gY3ZteF9wb3dfd3FfaW50X3RocnggaW50X3RocjsKKwl1bmlvbiBjdm14X3Bvd193cV9pbnRfcGMgaW50X3BjOworCisJZm9yIChpID0gMDsgaSA8IFRPVEFMX05VTUJFUl9PRl9QT1JUUzsgaSsrKSB7CisJCWlmIChjdm1fb2N0X2RldmljZVtpXSkgeworCQkJZGV2X2Zvcl9uYXBpID0gY3ZtX29jdF9kZXZpY2VbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldl9mb3JfbmFwaSkKKwkJcGFuaWMoIk5vIG5ldF9kZXZpY2VzIHdlcmUgYWxsb2NhdGVkLiIpOworCisJaWYgKG1heF9yeF9jcHVzID4gMSAgJiYgbWF4X3J4X2NwdXMgPCBudW1fb25saW5lX2NwdXMoKSkKKwkJYXRvbWljX3NldCgmY29yZV9zdGF0ZS5hdmFpbGFibGVfY29yZXMsIG1heF9yeF9jcHVzKTsKKwllbHNlCisJCWF0b21pY19zZXQoJmNvcmVfc3RhdGUuYXZhaWxhYmxlX2NvcmVzLCBudW1fb25saW5lX2NwdXMoKSk7CisJY29yZV9zdGF0ZS5iYXNlbGluZV9jb3JlcyA9IGF0b21pY19yZWFkKCZjb3JlX3N0YXRlLmF2YWlsYWJsZV9jb3Jlcyk7CisKKwljb3JlX3N0YXRlLmNwdV9zdGF0ZSA9IENQVV9NQVNLX05PTkU7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJbmV0aWZfbmFwaV9hZGQoZGV2X2Zvcl9uYXBpLCAmY3ZtX29jdF9uYXBpW2ldLm5hcGksCisJCQkgICAgICAgY3ZtX29jdF9uYXBpX3BvbGwsIHJ4X25hcGlfd2VpZ2h0KTsKKwkJbmFwaV9lbmFibGUoJmN2bV9vY3RfbmFwaVtpXS5uYXBpKTsKKwl9CisJLyogUmVnaXN0ZXIgYW4gSVJRIGhhbmRlciBmb3IgdG8gcmVjZWl2ZSBQT1cgaW50ZXJydXB0cyAqLworCWkgPSByZXF1ZXN0X2lycShPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwLAorCQkJY3ZtX29jdF9kb19pbnRlcnJ1cHQsIDAsICJFdGhlcm5ldCIsIGN2bV9vY3RfZGV2aWNlKTsKKworCWlmIChpKQorCQlwYW5pYygiQ291bGQgbm90IGFjcXVpcmUgRXRoZXJuZXQgSVJRICVkXG4iLAorCQkgICAgICBPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKworCWRpc2FibGVfaXJxX25vc3luYyhPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKworCWludF90aHIudTY0ID0gMDsKKwlpbnRfdGhyLnMudGNfZW4gPSAxOworCWludF90aHIucy50Y190aHIgPSAxOworCS8qIEVuYWJsZSBQT1cgaW50ZXJydXB0IHdoZW4gb3VyIHBvcnQgaGFzIGF0IGxlYXN0IG9uZSBwYWNrZXQgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlRfVEhSWChwb3dfcmVjZWl2ZV9ncm91cCksIGludF90aHIudTY0KTsKKworCWludF9wYy51NjQgPSAwOworCWludF9wYy5zLnBjX3RociA9IDU7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5UX1BDLCBpbnRfcGMudTY0KTsKKworCisJLyogU2NoZWR1bGQgTkFQSSBub3cuICBUaGlzIHdpbGwgaW5kaXJlY3RseSBlbmFibGUgaW50ZXJydXB0cy4gKi8KKwljdm1fb2N0X2VuYWJsZV9vbmVfY3B1KCk7CiB9CiAKIHZvaWQgY3ZtX29jdF9yeF9zaHV0ZG93bih2b2lkKQogewogCWludCBpOwotCS8qIFNodXRkb3duIGFsbCBvZiB0aGUgdGFza2xldHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQotCQl0YXNrbGV0X2tpbGwoJmN2bV9vY3RfdGFza2xldFtpXS50KTsKKwkvKiBTaHV0ZG93biBhbGwgb2YgdGhlIE5BUElzICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCW5ldGlmX25hcGlfZGVsKCZjdm1fb2N0X25hcGlbaV0ubmFwaSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmgKaW5kZXggYTliNzJiOC4uYTA3NDNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yeC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcnguaApAQCAtMjQsMTAgKzI0LDI5IEBACiAgKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCiAgKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN2bXgtZmF1LmgiCiAKLWlycXJldHVybl90IGN2bV9vY3RfZG9faW50ZXJydXB0KGludCBjcGwsIHZvaWQgKmRldl9pZCk7CiB2b2lkIGN2bV9vY3RfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBjdm1fb2N0X3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyB1bnVzZWQpOwotCiB2b2lkIGN2bV9vY3RfcnhfaW5pdGlhbGl6ZSh2b2lkKTsKIHZvaWQgY3ZtX29jdF9yeF9zaHV0ZG93bih2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3Bvb2woaW50IGZpbGxfdGhyZXNob2xkKQoreworCWludCBudW1iZXJfdG9fZnJlZTsKKwlpbnQgbnVtX2ZyZWVkOworCS8qIFJlZmlsbCB0aGUgcGFja2V0IGJ1ZmZlciBwb29sICovCisJbnVtYmVyX3RvX2ZyZWUgPQorCQljdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAwKTsKKworCWlmIChudW1iZXJfdG9fZnJlZSA+IGZpbGxfdGhyZXNob2xkKSB7CisJCWN2bXhfZmF1X2F0b21pY19hZGQzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCisJCQkJICAgICAgLW51bWJlcl90b19mcmVlKTsKKwkJbnVtX2ZyZWVkID0gY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsCisJCQkJCQkgQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSwKKwkJCQkJCSBudW1iZXJfdG9fZnJlZSk7CisJCWlmIChudW1fZnJlZWQgIT0gbnVtYmVyX3RvX2ZyZWUpIHsKKwkJCWN2bXhfZmF1X2F0b21pY19hZGQzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCisJCQkJCW51bWJlcl90b19mcmVlIC0gbnVtX2ZyZWVkKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYwppbmRleCA2MDYxZDAxLi4yZDg1ODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNnbWlpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zZ21paS5jCkBAIC0yNiw3ICsyNiw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KIAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYwppbmRleCAwMGRjMGY0Li5iNThiODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc3BpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYwppbmRleCA1MzUyOTQxLi5hZmMyYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jCkBAIC00LDcgKzQsNyBAQAogICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMCBDYXZpdW0gTmV0d29ya3MKICAqCiAgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBhcwpAQCAtMzEsMTAgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpZmRlZiBDT05GSUdfWEZSTQogI2luY2x1ZGUgPGxpbnV4L3hmcm0uaD4KQEAgLTUyLDExICs0OCwxNCBAQAogCiAjaW5jbHVkZSAiY3ZteC13cWUuaCIKICNpbmNsdWRlICJjdm14LWZhdS5oIgorI2luY2x1ZGUgImN2bXgtcGlwLmgiCiAjaW5jbHVkZSAiY3ZteC1wa28uaCIKICNpbmNsdWRlICJjdm14LWhlbHBlci5oIgogCiAjaW5jbHVkZSAiY3ZteC1nbXh4LWRlZnMuaCIKIAorI2RlZmluZSBDVk1fT0NUX1NLQl9DQihza2IpCSgodTY0ICopKChza2IpLT5jYikpCisKIC8qCiAgKiBZb3UgY2FuIGRlZmluZSBHRVRfU0tCVUZGX1FPUygpIHRvIG92ZXJyaWRlIGhvdyB0aGUgc2tidWZmIG91dHB1dAogICogZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGljaCBvdXRwdXQgcXVldWUgaXMgdXNlZC4gVGhlIGRlZmF1bHQKQEAgLTY4LDEyICs2Nyw4MSBAQAogI2RlZmluZSBHRVRfU0tCVUZGX1FPUyhza2IpIDAKICNlbmRpZgogCitzdGF0aWMgdm9pZCBjdm1fb2N0X3R4X2RvX2NsZWFudXAodW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIERFQ0xBUkVfVEFTS0xFVChjdm1fb2N0X3R4X2NsZWFudXBfdGFza2xldCwgY3ZtX29jdF90eF9kb19jbGVhbnVwLCAwKTsKKworLyogTWF4aW11bSBudW1iZXIgb2YgU0tCcyB0byB0cnkgdG8gZnJlZSBwZXIgeG1pdCBwYWNrZXQuICovCisjZGVmaW5lIE1BWF9TS0JfVE9fRlJFRSAoTUFYX09VVF9RVUVVRV9ERVBUSCAqIDIpCisKK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBjdm1fb2N0X2FkanVzdF9za2JfdG9fZnJlZShpbnQzMl90IHNrYl90b19mcmVlLCBpbnQgZmF1KQoreworCWludDMyX3QgdW5kbzsKKwl1bmRvID0gc2tiX3RvX2ZyZWUgPiAwID8gTUFYX1NLQl9UT19GUkVFIDogc2tiX3RvX2ZyZWUgKyBNQVhfU0tCX1RPX0ZSRUU7CisJaWYgKHVuZG8gPiAwKQorCQljdm14X2ZhdV9hdG9taWNfYWRkMzIoZmF1LCAtdW5kbyk7CisJc2tiX3RvX2ZyZWUgPSAtc2tiX3RvX2ZyZWUgPiBNQVhfU0tCX1RPX0ZSRUUgPyBNQVhfU0tCX1RPX0ZSRUUgOiAtc2tiX3RvX2ZyZWU7CisJcmV0dXJuIHNrYl90b19mcmVlOworfQorCitzdGF0aWMgdm9pZCBjdm1fb2N0X2tpY2tfdHhfcG9sbF93YXRjaGRvZyh2b2lkKQoreworCXVuaW9uIGN2bXhfY2l1X3RpbXggY2l1X3RpbXg7CisJY2l1X3RpbXgudTY0ID0gMDsKKwljaXVfdGlteC5zLm9uZV9zaG90ID0gMTsKKwljaXVfdGlteC5zLmxlbiA9IGN2bV9vY3RfdHhfcG9sbF9pbnRlcnZhbDsKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9USU1YKDEpLCBjaXVfdGlteC51NjQpOworfQorCit2b2lkIGN2bV9vY3RfZnJlZV90eF9za2JzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50MzJfdCBza2JfdG9fZnJlZTsKKwlpbnQgcW9zLCBxdWV1ZXNfcGVyX3BvcnQ7CisJaW50IHRvdGFsX2ZyZWVkID0gMDsKKwlpbnQgdG90YWxfcmVtYWluaW5nID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcXVldWVzX3Blcl9wb3J0ID0gY3ZteF9wa29fZ2V0X251bV9xdWV1ZXMocHJpdi0+cG9ydCk7CisJLyogRHJhaW4gYW55IHBlbmRpbmcgcGFja2V0cyBpbiB0aGUgZnJlZSBsaXN0ICovCisJZm9yIChxb3MgPSAwOyBxb3MgPCBxdWV1ZXNfcGVyX3BvcnQ7IHFvcysrKSB7CisJCWlmIChza2JfcXVldWVfbGVuKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlza2JfdG9fZnJlZSA9IGN2bXhfZmF1X2ZldGNoX2FuZF9hZGQzMihwcml2LT5mYXUrcW9zKjQsIE1BWF9TS0JfVE9fRlJFRSk7CisJCXNrYl90b19mcmVlID0gY3ZtX29jdF9hZGp1c3Rfc2tiX3RvX2ZyZWUoc2tiX3RvX2ZyZWUsIHByaXYtPmZhdStxb3MqNCk7CisKKworCQl0b3RhbF9mcmVlZCArPSBza2JfdG9fZnJlZTsKKwkJaWYgKHNrYl90b19mcmVlID4gMCkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnRvX2ZyZWVfbGlzdCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCQkJd2hpbGUgKHNrYl90b19mcmVlID4gMCkgeworCQkJCXN0cnVjdCBza19idWZmICp0ID0gX19za2JfZGVxdWV1ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pOworCQkJCXQtPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCQkJdG9fZnJlZV9saXN0ID0gdDsKKwkJCQlza2JfdG9fZnJlZS0tOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCQkJLyogRG8gdGhlIGFjdHVhbCBmcmVlaW5nIG91dHNpZGUgb2YgdGhlIGxvY2suICovCisJCQl3aGlsZSAodG9fZnJlZV9saXN0KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKnQgPSB0b19mcmVlX2xpc3Q7CisJCQkJdG9fZnJlZV9saXN0ID0gdG9fZnJlZV9saXN0LT5uZXh0OworCQkJCWRldl9rZnJlZV9za2JfYW55KHQpOworCQkJfQorCQl9CisJCXRvdGFsX3JlbWFpbmluZyArPSBza2JfcXVldWVfbGVuKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSk7CisJfQorCWlmICh0b3RhbF9mcmVlZCA+PSAwICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCWlmICh0b3RhbF9yZW1haW5pbmcpCisJCWN2bV9vY3Rfa2lja190eF9wb2xsX3dhdGNoZG9nKCk7Cit9CisKIC8qKgotICogUGFja2V0IHRyYW5zbWl0Ci0gKgorICogY3ZtX29jdF94bWl0IC0gdHJhbnNtaXQgYSBwYWNrZXQKICAqIEBza2I6ICAgIFBhY2tldCB0byBzZW5kCiAgKiBAZGV2OiAgICBEZXZpY2UgaW5mbyBzdHJ1Y3R1cmUKLSAqIFJldHVybnMgQWx3YXlzIHJldHVybnMgemVybworICoKKyAqIFJldHVybnMgQWx3YXlzIHJldHVybnMgTkVUREVWX1RYX09LCiAgKi8KIGludCBjdm1fb2N0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTgxLDEzICsxNDksMTUgQEAKIAl1bmlvbiBjdm14X2J1Zl9wdHIgaHdfYnVmZmVyOwogCXVpbnQ2NF90IG9sZF9zY3JhdGNoOwogCXVpbnQ2NF90IG9sZF9zY3JhdGNoMjsKLQlpbnQgZHJvcHBlZDsKIAlpbnQgcW9zOwotCWludCBxdWV1ZV9pdF91cDsKKwlpbnQgaTsKKwllbnVtIHtRVUVVRV9DT1JFLCBRVUVVRV9IVywgUVVFVUVfRFJPUH0gcXVldWVfdHlwZTsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdG9fZnJlZV9saXN0OwogCWludDMyX3Qgc2tiX3RvX2ZyZWU7Ci0JaW50MzJfdCB1bmRvOwogCWludDMyX3QgYnVmZmVyc190b19mcmVlOworCXUzMiB0b3RhbF90b19jbGVhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2lmIFJFVVNFX1NLQlVGRlNfV0lUSE9VVF9GUkVFCiAJdW5zaWduZWQgY2hhciAqZnBhX2hlYWQ7CiAjZW5kaWYKQEAgLTk4LDkgKzE2OCw2IEBACiAJICovCiAJcHJlZmV0Y2gocHJpdik7CiAKLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgbm8gZHJvcCAqLwotCWRyb3BwZWQgPSAwOwotCiAJLyoKIAkgKiBUaGUgY2hlY2sgb24gQ1ZNWF9QS09fUVVFVUVTX1BFUl9QT1JUXyogaXMgZGVzaWduZWQgdG8KIAkgKiBjb21wbGV0ZWx5IHJlbW92ZSAicW9zIiBpbiB0aGUgZXZlbnQgbmVpdGhlciBpbnRlcmZhY2UKQEAgLTEzNSw2ICsyMDIsMjggQEAKIAl9CiAKIAkvKgorCSAqIFdlIGhhdmUgc3BhY2UgZm9yIDYgc2VnbWVudCBwb2ludGVycywgSWYgdGhlcmUgd2lsbCBiZSBtb3JlCisJICogdGhhbiB0aGF0LCB3ZSBtdXN0IGxpbmVhcml6ZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDUpKSB7CisJCWlmICh1bmxpa2VseShfX3NrYl9saW5lYXJpemUoc2tiKSkpIHsKKwkJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCQkJaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKKwkJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBza2J1ZmZzIGluIHVzZSBieSB0aGUgaGFyZHdhcmUgKi8KKwkJCQlDVk1YX1NZTkNJT0JETUE7CisJCQkJc2tiX3RvX2ZyZWUgPSBjdm14X3NjcmF0Y2hfcmVhZDY0KENWTVhfU0NSX1NDUkFUQ0gpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBza2J1ZmZzIGluIHVzZSBieSB0aGUgaGFyZHdhcmUgKi8KKwkJCQlza2JfdG9fZnJlZSA9IGN2bXhfZmF1X2ZldGNoX2FuZF9hZGQzMihwcml2LT5mYXUgKyBxb3MgKiA0LAorCQkJCQkJCQkgICAgICAgTUFYX1NLQl9UT19GUkVFKTsKKwkJCX0KKwkJCXNrYl90b19mcmVlID0gY3ZtX29jdF9hZGp1c3Rfc2tiX3RvX2ZyZWUoc2tiX3RvX2ZyZWUsIHByaXYtPmZhdSArIHFvcyAqIDQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2ZyZWVfbGlzdFtxb3NdLmxvY2ssIGZsYWdzKTsKKwkJCWdvdG8gc2tpcF94bWl0OworCQl9CisJfQorCisJLyoKIAkgKiBUaGUgQ04zWFhYIHNlcmllcyBvZiBwYXJ0cyBoYXMgYW4gZXJyYXRhIChHTVgtNDAxKSB3aGljaAogCSAqIGNhdXNlcyB0aGUgR01YIGJsb2NrIHRvIGhhbmcgaWYgYSBjb2xsaXNpb24gb2NjdXJzIHRvd2FyZHMKIAkgKiB0aGUgZW5kIG9mIGEgPDY4IGJ5dGUgcGFja2V0LiBBcyBhIHdvcmthcm91bmQgZm9yIHRoaXMsIHdlCkBAIC0xNjIsMTMgKzI1MSw2IEBACiAJCX0KIAl9CiAKLQkvKiBCdWlsZCB0aGUgUEtPIGJ1ZmZlciBwb2ludGVyICovCi0JaHdfYnVmZmVyLnU2NCA9IDA7Ci0JaHdfYnVmZmVyLnMuYWRkciA9IGN2bXhfcHRyX3RvX3BoeXMoc2tiLT5kYXRhKTsKLQlod19idWZmZXIucy5wb29sID0gMDsKLQlod19idWZmZXIucy5zaXplID0KLQkgICAgKHVuc2lnbmVkIGxvbmcpc2tiX2VuZF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgbG9uZylza2ItPmhlYWQ7Ci0KIAkvKiBCdWlsZCB0aGUgUEtPIGNvbW1hbmQgKi8KIAlwa29fY29tbWFuZC51NjQgPSAwOwogCXBrb19jb21tYW5kLnMubjIgPSAxOwkvKiBEb24ndCBwb2xsdXRlIEwyIHdpdGggdGhlIG91dGdvaW5nIHBhY2tldCAqLwpAQCAtMTc4LDcgKzI2MCwzMSBAQAogCXBrb19jb21tYW5kLnMuc3Vib25lMCA9IDE7CiAKIAlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMTsKLQlwa29fY29tbWFuZC5zLnJlZzAgPSBwcml2LT5mYXUgKyBxb3MgKiA0OworCisJLyogQnVpbGQgdGhlIFBLTyBidWZmZXIgcG9pbnRlciAqLworCWh3X2J1ZmZlci51NjQgPSAwOworCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHsKKwkJaHdfYnVmZmVyLnMuYWRkciA9IFhLUEhZU19UT19QSFlTKCh1NjQpc2tiLT5kYXRhKTsKKwkJaHdfYnVmZmVyLnMucG9vbCA9IDA7CisJCWh3X2J1ZmZlci5zLnNpemUgPSBza2ItPmxlbjsKKwl9IGVsc2UgeworCQlod19idWZmZXIucy5hZGRyID0gWEtQSFlTX1RPX1BIWVMoKHU2NClza2ItPmRhdGEpOworCQlod19idWZmZXIucy5wb29sID0gMDsKKwkJaHdfYnVmZmVyLnMuc2l6ZSA9IHNrYl9oZWFkbGVuKHNrYik7CisJCUNWTV9PQ1RfU0tCX0NCKHNrYilbMF0gPSBod19idWZmZXIudTY0OworCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcyA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MgKyBpOworCQkJaHdfYnVmZmVyLnMuYWRkciA9IFhLUEhZU19UT19QSFlTKCh1NjQpKHBhZ2VfYWRkcmVzcyhmcy0+cGFnZSkgKyBmcy0+cGFnZV9vZmZzZXQpKTsKKwkJCWh3X2J1ZmZlci5zLnNpemUgPSBmcy0+c2l6ZTsKKwkJCUNWTV9PQ1RfU0tCX0NCKHNrYilbaSArIDFdID0gaHdfYnVmZmVyLnU2NDsKKwkJfQorCQlod19idWZmZXIucy5hZGRyID0gWEtQSFlTX1RPX1BIWVMoKHU2NClDVk1fT0NUX1NLQl9DQihza2IpKTsKKwkJaHdfYnVmZmVyLnMuc2l6ZSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCQlwa29fY29tbWFuZC5zLnNlZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKKwkJcGtvX2NvbW1hbmQucy5nYXRoZXIgPSAxOworCQlnb3RvIGRvbnRfcHV0X3NrYnVmZl9pbl9odzsKKwl9CisKIAkvKgogCSAqIFNlZSBpZiB3ZSBjYW4gcHV0IHRoaXMgc2tiIGluIHRoZSBGUEEgcG9vbC4gQW55IHN0cmFuZ2UKIAkgKiBiZWhhdmlvciBmcm9tIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrIHdpbGwgbW9zdCBsaWtlbHkKQEAgLTE5MCw3ICsyOTYsNyBAQAogCSAqIHNob3duIGEgMjUlIGluY3JlYXNlIGluIHBlcmZvcm1hbmNlIHVuZGVyIHNvbWUgbG9hZHMuCiAJICovCiAjaWYgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUKLQlmcGFfaGVhZCA9IHNrYi0+aGVhZCArIDEyOCAtICgodW5zaWduZWQgbG9uZylza2ItPmhlYWQgJiAweDdmKTsKKwlmcGFfaGVhZCA9IHNrYi0+aGVhZCArIDI1NiAtICgodW5zaWduZWQgbG9uZylza2ItPmhlYWQgJiAweDdmKTsKIAlpZiAodW5saWtlbHkoc2tiLT5kYXRhIDwgZnBhX2hlYWQpKSB7CiAJCS8qCiAJCSAqIHByaW50aygiVFggYnVmZmVyIGJlZ2lubmluZyBjYW4ndCBtZWV0IEZQQQpAQCAtMjQ4LDEwICszNTQsOSBAQAogCSAqIFdlIGNhbiB1c2UgdGhpcyBidWZmZXIgaW4gdGhlIEZQQS4gIFdlIGRvbid0IG5lZWQgdGhlIEZBVQogCSAqIHVwZGF0ZSBhbnltb3JlCiAJICovCi0JcGtvX2NvbW1hbmQucy5yZWcwID0gMDsKIAlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMDsKIAotCWh3X2J1ZmZlci5zLmJhY2sgPSAoc2tiLT5kYXRhIC0gZnBhX2hlYWQpID4+IDc7CisJaHdfYnVmZmVyLnMuYmFjayA9ICgodW5zaWduZWQgbG9uZylza2ItPmRhdGEgPj4gNykgLSAoKHVuc2lnbmVkIGxvbmcpZnBhX2hlYWQgPj4gNyk7CiAJKihzdHJ1Y3Qgc2tfYnVmZiAqKikoZnBhX2hlYWQgLSBzaXplb2Yodm9pZCAqKSkgPSBza2I7CiAKIAkvKgpAQCAtMjcyLDE2ICszNzcsMTYgQEAKIAlza2ItPnRjX3ZlcmQgPSAwOwogI2VuZGlmIC8qIENPTkZJR19ORVRfQ0xTX0FDVCAqLwogI2VuZGlmIC8qIENPTkZJR19ORVRfU0NIRUQgKi8KKyNlbmRpZiAvKiBSRVVTRV9TS0JVRkZTX1dJVEhPVVRfRlJFRSAqLwogCiBkb250X3B1dF9za2J1ZmZfaW5faHc6Ci0jZW5kaWYgLyogUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgKi8KIAogCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGhhcmR3YXJlIGNoZWNrc3VtbWluZyAqLwogCWlmIChVU0VfSFdfVENQVURQX0NIRUNLU1VNICYmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgJiYKIAkgICAgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDQpICYmIChpcF9oZHIoc2tiKS0+aWhsID09IDUpICYmCiAJICAgICgoaXBfaGRyKHNrYiktPmZyYWdfb2ZmID09IDApIHx8IChpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgPT0gMSA8PCAxNCkpCi0JICAgICYmICgoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQX1BST1RPQ09MX1RDUCkKLQkJfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUF9QUk9UT0NPTF9VRFApKSkgeworCSAgICAmJiAoKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKKwkJfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkpKSB7CiAJCS8qIFVzZSBoYXJkd2FyZSBjaGVja3N1bSBjYWxjICovCiAJCXBrb19jb21tYW5kLnMuaXBvZmZwMSA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDE7CiAJfQpAQCAtMjk5LDg5ICs0MDQsMTE2IEBACiAJCSAgICBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAwKTsKIAl9CiAKLQkvKgotCSAqIFdlIHRyeSB0byBjbGFpbSBNQVhfU0tCX1RPX0ZSRUUgYnVmZmVycy4gIElmIHRoZXJlIHdlcmUgbm90Ci0JICogdGhhdCBtYW55IGF2YWlsYWJsZSwgd2UgaGF2ZSB0byB1bi1jbGFpbSAodW5kbykgYW55IHRoYXQKLQkgKiB3ZXJlIGluIGV4Y2Vzcy4gIElmIHNrYl90b19mcmVlIGlzIHBvc2l0aXZlIHdlIHdpbGwgZnJlZQotCSAqIHRoYXQgbWFueSBidWZmZXJzLgotCSAqLwotCXVuZG8gPSBza2JfdG9fZnJlZSA+IDAgPwotCQlNQVhfU0tCX1RPX0ZSRUUgOiBza2JfdG9fZnJlZSArIE1BWF9TS0JfVE9fRlJFRTsKLQlpZiAodW5kbyA+IDApCi0JCWN2bXhfZmF1X2F0b21pY19hZGQzMihwcml2LT5mYXUrcW9zKjQsIC11bmRvKTsKLQlza2JfdG9fZnJlZSA9IC1za2JfdG9fZnJlZSA+IE1BWF9TS0JfVE9fRlJFRSA/Ci0JCU1BWF9TS0JfVE9fRlJFRSA6IC1za2JfdG9fZnJlZTsKKwlza2JfdG9fZnJlZSA9IGN2bV9vY3RfYWRqdXN0X3NrYl90b19mcmVlKHNrYl90b19mcmVlLCBwcml2LT5mYXUrcW9zKjQpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBzZW5kaW5nIGZhc3RlciB0aGFuIHRoZSByZWNlaXZlIGNhbiBmcmVlIHRoZW0gdGhlbgogCSAqIGRvbid0IGRvIHRoZSBIVyBmcmVlLgogCSAqLwotCWlmICgoYnVmZmVyc190b19mcmVlIDwgLTEwMCkgJiYgIXBrb19jb21tYW5kLnMuZG9udGZyZWUpIHsKKwlpZiAoKGJ1ZmZlcnNfdG9fZnJlZSA8IC0xMDApICYmICFwa29fY29tbWFuZC5zLmRvbnRmcmVlKQogCQlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMTsKLQkJcGtvX2NvbW1hbmQucy5yZWcwID0gcHJpdi0+ZmF1ICsgcW9zICogNDsKLQl9CiAKLQljdm14X3Brb19zZW5kX3BhY2tldF9wcmVwYXJlKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLAotCQkJCSAgICAgQ1ZNWF9QS09fTE9DS19DTURfUVVFVUUpOworCWlmIChwa29fY29tbWFuZC5zLmRvbnRmcmVlKSB7CisJCXF1ZXVlX3R5cGUgPSBRVUVVRV9DT1JFOworCQlwa29fY29tbWFuZC5zLnJlZzAgPSBwcml2LT5mYXUrcW9zKjQ7CisJfSBlbHNlIHsKKwkJcXVldWVfdHlwZSA9IFFVRVVFX0hXOworCX0KKwlpZiAoVVNFX0FTWU5DX0lPQkRNQSkKKwkJY3ZteF9mYXVfYXN5bmNfZmV0Y2hfYW5kX2FkZDMyKENWTVhfU0NSX1NDUkFUQ0gsIEZBVV9UT1RBTF9UWF9UT19DTEVBTiwgMSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOwogCiAJLyogRHJvcCB0aGlzIHBhY2tldCBpZiB3ZSBoYXZlIHRvbyBtYW55IGFscmVhZHkgcXVldWVkIHRvIHRoZSBIVyAqLwotCWlmICh1bmxpa2VseQotCSAgICAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID49IE1BWF9PVVRfUVVFVUVfREVQVEgpKSB7Ci0JCS8qCi0JCSAgIERFQlVHUFJJTlQoIiVzOiBUeCBkcm9wcGVkLiBUb28gbWFueSBxdWV1ZWRcbiIsIGRldi0+bmFtZSk7Ci0JCSAqLwotCQlkcm9wcGVkID0gMTsKLQl9Ci0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBvdXRwdXQgcXVldWUgKi8KLQllbHNlIGlmICh1bmxpa2VseQotCQkgKGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaAotCQkgIChwcml2LT5wb3J0LCBwcml2LT5xdWV1ZSArIHFvcywgcGtvX2NvbW1hbmQsIGh3X2J1ZmZlciwKLQkJICAgQ1ZNWF9QS09fTE9DS19DTURfUVVFVUUpKSkgewotCQlERUJVR1BSSU5UKCIlczogRmFpbGVkIHRvIHNlbmQgdGhlIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKLQkJZHJvcHBlZCA9IDE7Ci0JfQotCi0JaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKLQkJLyogUmVzdG9yZSB0aGUgc2NyYXRjaCBhcmVhICovCi0JCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsIG9sZF9zY3JhdGNoKTsKLQkJY3ZteF9zY3JhdGNoX3dyaXRlNjQoQ1ZNWF9TQ1JfU0NSQVRDSCArIDgsIG9sZF9zY3JhdGNoMik7Ci0JfQotCi0JcXVldWVfaXRfdXAgPSAwOwotCWlmICh1bmxpa2VseShkcm9wcGVkKSkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JfSBlbHNlIHsKLQkJaWYgKFVTRV9TS0JVRkZTX0lOX0hXKSB7Ci0JCQkvKiBQdXQgdGhpcyBwYWNrZXQgb24gdGhlIHF1ZXVlIHRvIGJlIGZyZWVkIGxhdGVyICovCi0JCQlpZiAocGtvX2NvbW1hbmQucy5kb250ZnJlZSkKLQkJCQlxdWV1ZV9pdF91cCA9IDE7Ci0JCQllbHNlCi0JCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyCi0JCQkJICAgIChGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsIC0xKTsKKwlpZiAodW5saWtlbHkoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID49IE1BWF9PVVRfUVVFVUVfREVQVEgpKSB7CisJCWlmIChkZXYtPnR4X3F1ZXVlX2xlbiAhPSAwKSB7CisJCQkvKiBEcm9wIHRoZSBsb2NrIHdoZW4gbm90aWZ5aW5nIHRoZSBjb3JlLiAgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2ZyZWVfbGlzdFtxb3NdLmxvY2ssIGZsYWdzKTsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrLCBmbGFncyk7CiAJCX0gZWxzZSB7Ci0JCQkvKiBQdXQgdGhpcyBwYWNrZXQgb24gdGhlIHF1ZXVlIHRvIGJlIGZyZWVkIGxhdGVyICovCi0JCQlxdWV1ZV9pdF91cCA9IDE7CisJCQkvKiBJZiBub3QgdXNpbmcgbm9ybWFsIHF1ZXVlaW5nLiAgKi8KKwkJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCQkJZ290byBza2lwX3htaXQ7CiAJCX0KIAl9CiAKLQlpZiAocXVldWVfaXRfdXApIHsKLQkJc3Bpbl9sb2NrKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrKTsKKwljdm14X3Brb19zZW5kX3BhY2tldF9wcmVwYXJlKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLAorCQkJCSAgICAgQ1ZNWF9QS09fTE9DS19OT05FKTsKKworCS8qIFNlbmQgdGhlIHBhY2tldCB0byB0aGUgb3V0cHV0IHF1ZXVlICovCisJaWYgKHVubGlrZWx5KGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaChwcml2LT5wb3J0LAorCQkJCQkJIHByaXYtPnF1ZXVlICsgcW9zLAorCQkJCQkJIHBrb19jb21tYW5kLCBod19idWZmZXIsCisJCQkJCQkgQ1ZNWF9QS09fTE9DS19OT05FKSkpIHsKKwkJREVCVUdQUklOVCgiJXM6IEZhaWxlZCB0byBzZW5kIHRoZSBwYWNrZXRcbiIsIGRldi0+bmFtZSk7CisJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCX0KK3NraXBfeG1pdDoKKwl0b19mcmVlX2xpc3QgPSBOVUxMOworCisJc3dpdGNoIChxdWV1ZV90eXBlKSB7CisJY2FzZSBRVUVVRV9EUk9QOgorCQlza2ItPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCXRvX2ZyZWVfbGlzdCA9IHNrYjsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlicmVhazsKKwljYXNlIFFVRVVFX0hXOgorCQljdm14X2ZhdV9hdG9taWNfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAtMSk7CisJCWJyZWFrOworCWNhc2UgUVVFVUVfQ09SRToKIAkJX19za2JfcXVldWVfdGFpbCgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10sIHNrYik7Ci0JCWN2bV9vY3RfZnJlZV90eF9za2JzKHByaXYsIHNrYl90b19mcmVlLCBxb3MsIDApOwotCQlzcGluX3VubG9jaygmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jayk7Ci0JfSBlbHNlIHsKLQkJY3ZtX29jdF9mcmVlX3R4X3NrYnMocHJpdiwgc2tiX3RvX2ZyZWUsIHFvcywgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOwogCX0KIAotCXJldHVybiAwOworCXdoaWxlIChza2JfdG9fZnJlZSA+IDApIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnQgPSBfX3NrYl9kZXF1ZXVlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSk7CisJCXQtPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCXRvX2ZyZWVfbGlzdCA9IHQ7CisJCXNrYl90b19mcmVlLS07CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCisJLyogRG8gdGhlIGFjdHVhbCBmcmVlaW5nIG91dHNpZGUgb2YgdGhlIGxvY2suICovCisJd2hpbGUgKHRvX2ZyZWVfbGlzdCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqdCA9IHRvX2ZyZWVfbGlzdDsKKwkJdG9fZnJlZV9saXN0ID0gdG9fZnJlZV9saXN0LT5uZXh0OworCQlkZXZfa2ZyZWVfc2tiX2FueSh0KTsKKwl9CisKKwlpZiAoVVNFX0FTWU5DX0lPQkRNQSkgeworCQlDVk1YX1NZTkNJT0JETUE7CisJCXRvdGFsX3RvX2NsZWFuID0gY3ZteF9zY3JhdGNoX3JlYWQ2NChDVk1YX1NDUl9TQ1JBVENIKTsKKwkJLyogUmVzdG9yZSB0aGUgc2NyYXRjaCBhcmVhICovCisJCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsIG9sZF9zY3JhdGNoKTsKKwkJY3ZteF9zY3JhdGNoX3dyaXRlNjQoQ1ZNWF9TQ1JfU0NSQVRDSCArIDgsIG9sZF9zY3JhdGNoMik7CisJfSBlbHNlIHsKKwkJdG90YWxfdG9fY2xlYW4gPSBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX1RPVEFMX1RYX1RPX0NMRUFOLCAxKTsKKwl9CisKKwlpZiAodG90YWxfdG9fY2xlYW4gJiAweDNmZikgeworCQkvKgorCQkgKiBTY2hlZHVsZSB0aGUgY2xlYW51cCB0YXNrbGV0IGV2ZXJ5IDEwMjQgcGFja2V0cyBmb3IKKwkJICogdGhlIHBhdGhvbG9naWNhbCBjYXNlIG9mIGhpZ2ggdHJhZmZpYyBvbiBvbmUgcG9ydAorCQkgKiBkZWxheWluZyBjbGVhbiB1cCBvZiBwYWNrZXRzIG9uIGEgZGlmZmVyZW50IHBvcnQKKwkJICogdGhhdCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBjbGVhbnVwLgorCQkgKi8KKwkJdGFza2xldF9zY2hlZHVsZSgmY3ZtX29jdF90eF9jbGVhbnVwX3Rhc2tsZXQpOworCX0KKworCWN2bV9vY3Rfa2lja190eF9wb2xsX3dhdGNoZG9nKCk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKLSAqIFBhY2tldCB0cmFuc21pdCB0byB0aGUgUE9XCi0gKgorICogY3ZtX29jdF94bWl0X3BvdyAtIHRyYW5zbWl0IGEgcGFja2V0IHRvIHRoZSBQT1cKICAqIEBza2I6ICAgIFBhY2tldCB0byBzZW5kCiAgKiBAZGV2OiAgICBEZXZpY2UgaW5mbyBzdHJ1Y3R1cmUKKwogICogUmV0dXJucyBBbHdheXMgcmV0dXJucyB6ZXJvCiAgKi8KIGludCBjdm1fb2N0X3htaXRfcG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00NTksOCArNTkxLDggQEAKIAkJd29yay0+d29yZDIucy5kZWNfaXBjb21wID0gMDsJLyogRklYTUUgKi8KICNlbmRpZgogCQl3b3JrLT53b3JkMi5zLnRjcF9vcl91ZHAgPQotCQkgICAgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUF9QUk9UT0NPTF9UQ1ApCi0JCSAgICB8fCAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQX1BST1RPQ09MX1VEUCk7CisJCSAgICAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQorCQkgICAgfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCk7CiAjaWYgMAogCQkvKiBGSVhNRSAqLwogCQl3b3JrLT53b3JkMi5zLmRlY19pcHNlYyA9IDA7CkBAIC01MjksMTA2ICs2NjEsMTEgQEAKIH0KIAogLyoqCi0gKiBUcmFuc21pdCBhIHdvcmsgcXVldWUgZW50cnkgb3V0IG9mIHRoZSBldGhlcm5ldCBwb3J0LiBCb3RoCi0gKiB0aGUgd29yayBxdWV1ZSBlbnRyeSBhbmQgdGhlIHBhY2tldCBkYXRhIGNhbiBvcHRpb25hbGx5IGJlCi0gKiBmcmVlZC4gVGhlIHdvcmsgd2lsbCBiZSBmcmVlZCBvbiBlcnJvciBhcyB3ZWxsLgotICoKLSAqIEBkZXY6ICAgICBEZXZpY2UgdG8gdHJhbnNtaXQgb3V0LgotICogQHdvcmtfcXVldWVfZW50cnk6Ci0gKiAgICAgICAgICAgICAgICBXb3JrIHF1ZXVlIGVudHJ5IHRvIHNlbmQKLSAqIEBkb19mcmVlOiBUcnVlIGlmIHRoZSB3b3JrIHF1ZXVlIGVudHJ5IGFuZCBwYWNrZXQgZGF0YSBzaG91bGQgYmUKLSAqICAgICAgICAgICAgICAgIGZyZWVkLiBJZiBmYWxzZSwgbmVpdGhlciB3aWxsIGJlIGZyZWVkLgotICogQHFvczogICAgIEluZGV4IGludG8gdGhlIHF1ZXVlcyBmb3IgdGhpcyBwb3J0IHRvIHRyYW5zbWl0IG9uLiBUaGlzCi0gKiAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGltcGxlbWVudCBRb1MgaWYgdGhlaXIgYXJlIG11bHRpcGxlIHF1ZXVlcyBwZXIKLSAqICAgICAgICAgICAgICAgIHBvcnQuIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mCi0gKiAgICAgICAgICAgICAgICBxdWV1ZXMgcGVyIHBvcnQgbWludXMgMS4gVmFsdWVzIG91dHNpZGUgb2YgdGhpcyByYW5nZSB3aWxsCi0gKiAgICAgICAgICAgICAgICBiZSBjaGFuZ2UgdG8gemVyby4KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotaW50IGN2bV9vY3RfdHJhbnNtaXRfcW9zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKndvcmtfcXVldWVfZW50cnksCi0JCQkgaW50IGRvX2ZyZWUsIGludCBxb3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBjdm14X2J1Zl9wdHIgaHdfYnVmZmVyOwotCWN2bXhfcGtvX2NvbW1hbmRfd29yZDBfdCBwa29fY29tbWFuZDsKLQlpbnQgZHJvcHBlZDsKLQlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljdm14X3dxZV90ICp3b3JrID0gd29ya19xdWV1ZV9lbnRyeTsKLQotCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCURFQlVHUFJJTlQoIiVzOiBEZXZpY2Ugbm90IHVwXG4iLCBkZXYtPm5hbWUpOwotCQlpZiAoZG9fZnJlZSkKLQkJCWN2bV9vY3RfZnJlZV93b3JrKHdvcmspOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogVGhlIGNoZWNrIG9uIENWTVhfUEtPX1FVRVVFU19QRVJfUE9SVF8qIGlzIGRlc2lnbmVkIHRvIGNvbXBsZXRlbHkKLQkgICByZW1vdmUgInFvcyIgaW4gdGhlIGV2ZW50IG5laXRoZXIgaW50ZXJmYWNlIHN1cHBvcnRzCi0JICAgbXVsdGlwbGUgcXVldWVzIHBlciBwb3J0ICovCi0JaWYgKChDVk1YX1BLT19RVUVVRVNfUEVSX1BPUlRfSU5URVJGQUNFMCA+IDEpIHx8Ci0JICAgIChDVk1YX1BLT19RVUVVRVNfUEVSX1BPUlRfSU5URVJGQUNFMSA+IDEpKSB7Ci0JCWlmIChxb3MgPD0gMCkKLQkJCXFvcyA9IDA7Ci0JCWVsc2UgaWYgKHFvcyA+PSBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwcml2LT5wb3J0KSkKLQkJCXFvcyA9IDA7Ci0JfSBlbHNlCi0JCXFvcyA9IDA7Ci0KLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgbm8gZHJvcCAqLwotCWRyb3BwZWQgPSAwOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN2bXhfcGtvX3NlbmRfcGFja2V0X3ByZXBhcmUocHJpdi0+cG9ydCwgcHJpdi0+cXVldWUgKyBxb3MsCi0JCQkJICAgICBDVk1YX1BLT19MT0NLX0NNRF9RVUVVRSk7Ci0KLQkvKiBCdWlsZCB0aGUgUEtPIGJ1ZmZlciBwb2ludGVyICovCi0JaHdfYnVmZmVyLnU2NCA9IDA7Ci0JaHdfYnVmZmVyLnMuYWRkciA9IHdvcmstPnBhY2tldF9wdHIucy5hZGRyOwotCWh3X2J1ZmZlci5zLnBvb2wgPSBDVk1YX0ZQQV9QQUNLRVRfUE9PTDsKLQlod19idWZmZXIucy5zaXplID0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRTsKLQlod19idWZmZXIucy5iYWNrID0gd29yay0+cGFja2V0X3B0ci5zLmJhY2s7Ci0KLQkvKiBCdWlsZCB0aGUgUEtPIGNvbW1hbmQgKi8KLQlwa29fY29tbWFuZC51NjQgPSAwOwotCXBrb19jb21tYW5kLnMubjIgPSAxOwkvKiBEb24ndCBwb2xsdXRlIEwyIHdpdGggdGhlIG91dGdvaW5nIHBhY2tldCAqLwotCXBrb19jb21tYW5kLnMuZG9udGZyZWUgPSAhZG9fZnJlZTsKLQlwa29fY29tbWFuZC5zLnNlZ3MgPSB3b3JrLT53b3JkMi5zLmJ1ZnM7Ci0JcGtvX2NvbW1hbmQucy50b3RhbF9ieXRlcyA9IHdvcmstPmxlbjsKLQotCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGhhcmR3YXJlIGNoZWNrc3VtbWluZyAqLwotCWlmICh1bmxpa2VseSh3b3JrLT53b3JkMi5zLm5vdF9JUCB8fCB3b3JrLT53b3JkMi5zLklQX2V4YykpCi0JCXBrb19jb21tYW5kLnMuaXBvZmZwMSA9IDA7Ci0JZWxzZQotCQlwa29fY29tbWFuZC5zLmlwb2ZmcDEgPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAxOwotCi0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBvdXRwdXQgcXVldWUgKi8KLQlpZiAodW5saWtlbHkKLQkgICAgKGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaAotCSAgICAgKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLCBwa29fY29tbWFuZCwgaHdfYnVmZmVyLAotCSAgICAgIENWTVhfUEtPX0xPQ0tfQ01EX1FVRVVFKSkpIHsKLQkJREVCVUdQUklOVCgiJXM6IEZhaWxlZCB0byBzZW5kIHRoZSBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCWRyb3BwZWQgPSAtMTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KGRyb3BwZWQpKSB7Ci0JCWlmIChkb19mcmVlKQotCQkJY3ZtX29jdF9mcmVlX3dvcmsod29yayk7Ci0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQl9IGVsc2UgaWYgKGRvX2ZyZWUpCi0JCWN2bXhfZnBhX2ZyZWUod29yaywgQ1ZNWF9GUEFfV1FFX1BPT0wsIERPTlRfV1JJVEVCQUNLKDEpKTsKLQotCXJldHVybiBkcm9wcGVkOwotfQotRVhQT1JUX1NZTUJPTChjdm1fb2N0X3RyYW5zbWl0X3Fvcyk7Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhbGwgc2tiIHRoYXQgYXJlIGN1cnJlbnRseSBxdWV1ZWQgZm9yIFRYLgotICoKKyAqIGN2bV9vY3RfdHhfc2h1dGRvd25fZGV2IC0gZnJlZSBhbGwgc2tiIHRoYXQgYXJlIGN1cnJlbnRseSBxdWV1ZWQgZm9yIFRYLgogICogQGRldjogICAgRGV2aWNlIGJlaW5nIHNodXRkb3duCisgKgogICovCi12b2lkIGN2bV9vY3RfdHhfc2h1dGRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjQyLDMgKzY3OSw0NSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrLCBmbGFncyk7CiAJfQogfQorCitzdGF0aWMgdm9pZCBjdm1fb2N0X3R4X2RvX2NsZWFudXAodW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHBvcnQ7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfTlVNQkVSX09GX1BPUlRTOyBwb3J0KyspIHsKKwkJaWYgKGN2bV9vY3RfZGV2aWNlW3BvcnRdKSB7CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3ZtX29jdF9kZXZpY2VbcG9ydF07CisJCQljdm1fb2N0X2ZyZWVfdHhfc2ticyhkZXYpOworCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY3ZtX29jdF90eF9jbGVhbnVwX3dhdGNoZG9nKGludCBjcGwsIHZvaWQgKmRldl9pZCkKK3sKKwkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuICAqLworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1RJTVgoMSksIDApOworCS8qIERvIHRoZSB3b3JrIGluIHRoZSB0YXNrbGV0LiAgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZjdm1fb2N0X3R4X2NsZWFudXBfdGFza2xldCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIGN2bV9vY3RfdHhfaW5pdGlhbGl6ZSh2b2lkKQoreworCWludCBpOworCisJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiAgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9USU1YKDEpLCAwKTsKKwkvKiBSZWdpc3RlciBhbiBJUlEgaGFuZGVyIGZvciB0byByZWNlaXZlIENJVV9USU1YKDEpIGludGVycnVwdHMgKi8KKwlpID0gcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9USU1FUjEsCisJCQljdm1fb2N0X3R4X2NsZWFudXBfd2F0Y2hkb2csIDAsCisJCQkiRXRoZXJuZXQiLCBjdm1fb2N0X2RldmljZSk7CisKKwlpZiAoaSkKKwkJcGFuaWMoIkNvdWxkIG5vdCBhY3F1aXJlIEV0aGVybmV0IElSUSAlZFxuIiwgT0NURU9OX0lSUV9USU1FUjEpOworfQorCit2b2lkIGN2bV9vY3RfdHhfc2h1dGRvd24odm9pZCkKK3sKKwkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCWZyZWVfaXJxKE9DVEVPTl9JUlFfVElNRVIxLCBjdm1fb2N0X2RldmljZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmgKaW5kZXggYzBiZWJmNy4uNTQ3NjgwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguaApAQCAtMjksMjkgKzI5LDYgQEAKIGludCBjdm1fb2N0X3htaXRfcG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGN2bV9vY3RfdHJhbnNtaXRfcW9zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKndvcmtfcXVldWVfZW50cnksCiAJCQkgaW50IGRvX2ZyZWUsIGludCBxb3MpOwotdm9pZCBjdm1fb2N0X3R4X3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKioKLSAqIEZyZWUgZGVhZCB0cmFuc21pdCBza2JzLgotICoKLSAqIEBwcml2OgkJVGhlIGRyaXZlciBkYXRhCi0gKiBAc2tiX3RvX2ZyZWU6CVRoZSBudW1iZXIgb2YgU0tCcyB0byBmcmVlIChmcmVlIG5vbmUgaWYgbmVnYXRpdmUpLgotICogQHFvczoJCVRoZSBxdWV1ZSB0byBmcmVlIGZyb20uCi0gKiBAdGFrZV9sb2NrOgkJSWYgdHJ1ZSwgYWNxdWlyZSB0aGUgc2tiIGxpc3QgbG9jay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGN2bV9vY3RfZnJlZV90eF9za2JzKHN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYsCi0JCQkJCWludCBza2JfdG9fZnJlZSwKLQkJCQkJaW50IHFvcywgaW50IHRha2VfbG9jaykKLXsKLQkvKiBGcmVlIHNrYnVmZnMgbm90IGluIHVzZSBieSB0aGUgaGFyZHdhcmUuICAqLwotCWlmIChza2JfdG9fZnJlZSA+IDApIHsKLQkJaWYgKHRha2VfbG9jaykKLQkJCXNwaW5fbG9jaygmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jayk7Ci0JCXdoaWxlIChza2JfdG9fZnJlZSA+IDApIHsKLQkJCWRldl9rZnJlZV9za2IoX19za2JfZGVxdWV1ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pKTsKLQkJCXNrYl90b19mcmVlLS07Ci0JCX0KLQkJaWYgKHRha2VfbG9jaykKLQkJCXNwaW5fdW5sb2NrKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrKTsKLQl9Ci19Cit2b2lkIGN2bV9vY3RfdHhfaW5pdGlhbGl6ZSh2b2lkKTsKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bih2b2lkKTsKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXV0aWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCmluZGV4IDM3YjY2NTkuLjIzNDY3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCkBAIC0zMCwxMCArMzAsOSBAQAogCQkJCX0gd2hpbGUgKDApCiAKIC8qKgotICogR2l2ZW4gYSBwYWNrZXQgZGF0YSBhZGRyZXNzLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZQotICogYmVnaW5uaW5nIG9mIHRoZSBwYWNrZXQgYnVmZmVyLgotICoKKyAqIGN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIgLSBjb252ZXJ0IHBhY2tldCBkYXRhIGFkZHJlc3MgdG8gcG9pbnRlcgogICogQHBhY2tldF9wdHI6IFBhY2tldCBkYXRhIGhhcmR3YXJlIGFkZHJlc3MKKyAqCiAgKiBSZXR1cm5zIFBhY2tldCBidWZmZXIgcG9pbnRlcgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIodW5pb24gY3ZteF9idWZfcHRyIHBhY2tldF9wdHIpCkBAIC00Myw5ICs0Miw3IEBACiB9CiAKIC8qKgotICogR2l2ZW4gYW4gSVBEL1BLTyBwb3J0IG51bWJlciwgcmV0dXJuIHRoZSBsb2dpY2FsIGludGVyZmFjZSBpdCBpcwotICogb24uCi0gKgorICogSU5URVJGQUNFIC0gY29udmVydCBJUEQgcG9ydCB0byBsb2NnaWNhbCBpbnRlcmZhY2UKICAqIEBpcGRfcG9ydDogUG9ydCB0byBjaGVjawogICoKICAqIFJldHVybnMgTG9naWNhbCBpbnRlcmZhY2UKQEAgLTY1LDkgKzYyLDcgQEAKIH0KIAogLyoqCi0gKiBHaXZlbiBhbiBJUEQvUEtPIHBvcnQgbnVtYmVyLCByZXR1cm4gdGhlIHBvcnQncyBpbmRleCBvbiBhCi0gKiBsb2dpY2FsIGludGVyZmFjZS4KLSAqCisgKiBJTkRFWCAtIGNvbnZlcnQgSVBEL1BLTyBwb3J0IG51bWJlciB0byB0aGUgcG9ydCdzIGludGVyZmFjZSBpbmRleAogICogQGlwZF9wb3J0OiBQb3J0IHRvIGNoZWNrCiAgKgogICogUmV0dXJucyBJbmRleCBpbnRvIGludGVyZmFjZSBwb3J0IGxpc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKaW5kZXggZWUzZGM0MS4uM2ZjYTFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYwppbmRleCA0Y2ZkNGIxLi4wMmI2MzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogCiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtNDMsOCArNDIsNiBAQAogI2luY2x1ZGUgImV0aGVybmV0LXR4LmgiCiAjaW5jbHVkZSAiZXRoZXJuZXQtbWRpby5oIgogI2luY2x1ZGUgImV0aGVybmV0LXV0aWwuaCIKLSNpbmNsdWRlICJldGhlcm5ldC1wcm9jLmgiCi0KIAogI2luY2x1ZGUgImN2bXgtcGlwLmgiCiAjaW5jbHVkZSAiY3ZteC1wa28uaCIKQEAgLTEwNCwxMyArMTAxLDE1IEBACiAJIlx0XCJldGgyLHNwaTMsc3BpN1wiIHdvdWxkIGNhdXNlIHRoZXNlIHRocmVlIGRldmljZXMgdG8gdHJhbnNtaXRcbiIKIAkiXHR1c2luZyB0aGUgcG93X3NlbmRfZ3JvdXAuIik7CiAKLXN0YXRpYyBpbnQgZGlzYWJsZV9jb3JlX3F1ZXVlaW5nID0gMTsKLW1vZHVsZV9wYXJhbShkaXNhYmxlX2NvcmVfcXVldWVpbmcsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfY29yZV9xdWV1ZWluZywgIlxuIgotCSJcdFdoZW4gc2V0IHRoZSBuZXR3b3JraW5nIGNvcmUncyB0eF9xdWV1ZV9sZW4gaXMgc2V0IHRvIHplcm8uICBUaGlzXG4iCi0JIlx0YWxsb3dzIHBhY2tldHMgdG8gYmUgc2VudCB3aXRob3V0IGxvY2sgY29udGVudGlvbiBpbiB0aGUgcGFja2V0XG4iCi0JIlx0c2NoZWR1bGVyIHJlc3VsdGluZyBpbiBzb21lIGNhc2VzIGluIGltcHJvdmVkIHRocm91Z2hwdXQuXG4iKTsKK2ludCBtYXhfcnhfY3B1cyA9IC0xOworbW9kdWxlX3BhcmFtKG1heF9yeF9jcHVzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfcnhfY3B1cywgIlxuIgorCSJcdFx0VGhlIG1heGltdW0gbnVtYmVyIG9mIENQVXMgdG8gdXNlIGZvciBwYWNrZXQgcmVjZXB0aW9uLlxuIgorCSJcdFx0VXNlIC0xIHRvIHVzZSBhbGwgYXZhaWxhYmxlIENQVXMuIik7CiAKK2ludCByeF9uYXBpX3dlaWdodCA9IDMyOworbW9kdWxlX3BhcmFtKHJ4X25hcGlfd2VpZ2h0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyeF9uYXBpX3dlaWdodCwgIlRoZSBOQVBJIFdFSUdIVCBwYXJhbWV0ZXIuIik7CiAKIC8qCiAgKiBUaGUgb2Zmc2V0IGZyb20gbWFjX2FkZHJfYmFzZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmV4dCBwb3J0CkBAIC0xMjIsOSArMTIxLDE2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGN2bV9vY3RfbWFjX2FkZHJfb2Zmc2V0OwogCiAvKioKLSAqIFBlcmlvZGljIHRpbWVyIHRvIGNoZWNrIGF1dG8gbmVnb3RpYXRpb24KKyAqIGN2bV9vY3RfcG9sbF9xdWV1ZSAtIFdvcmtxdWV1ZSBmb3IgcG9sbGluZyBvcGVyYXRpb25zLgogICovCi1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY3ZtX29jdF9wb2xsX3RpbWVyOworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN2bV9vY3RfcG9sbF9xdWV1ZTsKKworLyoqCisgKiBjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmcgLSBmbGFnIHRvIGluZGljYXRlIHBvbGxpbmcgc2hvdWxkIHN0b3AuCisgKgorICogU2V0IHRvIG9uZSByaWdodCBiZWZvcmUgY3ZtX29jdF9wb2xsX3F1ZXVlIGlzIGRlc3Ryb3llZC4KKyAqLworYXRvbWljX3QgY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nID0gQVRPTUlDX0lOSVQoMCk7CiAKIC8qKgogICogQXJyYXkgb2YgZXZlcnkgZXRoZXJuZXQgZGV2aWNlIG93bmVkIGJ5IHRoaXMgZHJpdmVyIGluZGV4ZWQgYnkKQEAgLTEzMiw2NSArMTM4LDQ0IEBACiAgKi8KIHN0cnVjdCBuZXRfZGV2aWNlICpjdm1fb2N0X2RldmljZVtUT1RBTF9OVU1CRVJfT0ZfUE9SVFNdOwogCi0vKioKLSAqIFBlcmlvZGljIHRpbWVyIHRpY2sgZm9yIHNsb3cgbWFuYWdlbWVudCBvcGVyYXRpb25zCi0gKgotICogQGFyZzogICAgRGV2aWNlIHRvIGNoZWNrCi0gKi8KLXN0YXRpYyB2b2lkIGN2bV9kb190aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3U2NCBjdm1fb2N0X3R4X3BvbGxfaW50ZXJ2YWw7CisKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGN2bV9vY3RfcnhfcmVmaWxsX3dvcmssIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcik7CisKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaW50MzJfdCBza2JfdG9fZnJlZSwgdW5kbzsKLQlpbnQgcXVldWVzX3Blcl9wb3J0OwotCWludCBxb3M7Ci0Jc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdjsKLQlzdGF0aWMgaW50IHBvcnQ7CisJLyoKKwkgKiBGUEEgMCBtYXkgaGF2ZSBiZWVuIGRyYWluZWQsIHRyeSB0byByZWZpbGwgaXQgaWYgd2UgbmVlZAorCSAqIG1vcmUgdGhhbiBudW1fcGFja2V0X2J1ZmZlcnMgLyAyLCBvdGhlcndpc2Ugbm9ybWFsIHJlY2VpdmUKKwkgKiBwcm9jZXNzaW5nIHdpbGwgcmVmaWxsIGl0LiAgSWYgaXQgd2VyZSBkcmFpbmVkLCBubyBwYWNrZXRzCisJICogY291bGQgYmUgcmVjZWl2ZWQgc28gY3ZtX29jdF9uYXBpX3BvbGwgd291bGQgbmV2ZXIgYmUKKwkgKiBpbnZva2VkIHRvIGRvIHRoZSByZWZpbGwuCisJICovCisJY3ZtX29jdF9yeF9yZWZpbGxfcG9vbChudW1fcGFja2V0X2J1ZmZlcnMgLyAyKTsKIAotCWlmIChwb3J0ID49IENWTVhfUElQX05VTV9JTlBVVF9QT1JUUykgewotCQkvKgotCQkgKiBBbGwgcG9ydHMgaGF2ZSBiZWVuIHBvbGxlZC4gU3RhcnQgdGhlIG5leHQKLQkJICogaXRlcmF0aW9uIHRocm91Z2ggdGhlIHBvcnRzIGluIG9uZSBzZWNvbmQuCi0JCSAqLwotCQlwb3J0ID0gMDsKLQkJbW9kX3RpbWVyKCZjdm1fb2N0X3BvbGxfdGltZXIsIGppZmZpZXMgKyBIWik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKCFjdm1fb2N0X2RldmljZVtwb3J0XSkKLQkJZ290byBvdXQ7Ci0KLQlwcml2ID0gbmV0ZGV2X3ByaXYoY3ZtX29jdF9kZXZpY2VbcG9ydF0pOwotCWlmIChwcml2LT5wb2xsKQotCQlwcml2LT5wb2xsKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotCXF1ZXVlc19wZXJfcG9ydCA9IGN2bXhfcGtvX2dldF9udW1fcXVldWVzKHBvcnQpOwotCS8qIERyYWluIGFueSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGZyZWUgbGlzdCAqLwotCWZvciAocW9zID0gMDsgcW9zIDwgcXVldWVzX3Blcl9wb3J0OyBxb3MrKykgewotCQlpZiAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID09IDApCi0JCQljb250aW51ZTsKLQkJc2tiX3RvX2ZyZWUgPSBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIocHJpdi0+ZmF1ICsgcW9zICogNCwKLQkJCQkJCSAgICAgICBNQVhfU0tCX1RPX0ZSRUUpOwotCQl1bmRvID0gc2tiX3RvX2ZyZWUgPiAwID8KLQkJCU1BWF9TS0JfVE9fRlJFRSA6IHNrYl90b19mcmVlICsgTUFYX1NLQl9UT19GUkVFOwotCQlpZiAodW5kbyA+IDApCi0JCQljdm14X2ZhdV9hdG9taWNfYWRkMzIocHJpdi0+ZmF1K3Fvcyo0LCAtdW5kbyk7Ci0JCXNrYl90b19mcmVlID0gLXNrYl90b19mcmVlID4gTUFYX1NLQl9UT19GUkVFID8KLQkJCU1BWF9TS0JfVE9fRlJFRSA6IC1za2JfdG9fZnJlZTsKLQkJY3ZtX29jdF9mcmVlX3R4X3NrYnMocHJpdiwgc2tiX3RvX2ZyZWUsIHFvcywgMSk7Ci0JfQotCWN2bV9vY3RfZGV2aWNlW3BvcnRdLT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3N0YXRzKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotb3V0OgotCXBvcnQrKzsKLQkvKiBQb2xsIHRoZSBuZXh0IHBvcnQgaW4gYSA1MHRoIG9mIGEgc2Vjb25kLgotCSAgIFRoaXMgc3ByZWFkcyB0aGUgcG9sbGluZyBvZiBwb3J0cyBvdXQgYSBsaXR0bGUgYml0ICovCi0JbW9kX3RpbWVyKCZjdm1fb2N0X3BvbGxfdGltZXIsIGppZmZpZXMgKyBIWiAvIDUwKTsKKwlpZiAoIWF0b21pY19yZWFkKCZjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmcpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoY3ZtX29jdF9wb2xsX3F1ZXVlLAorCQkJCSAgICZjdm1fb2N0X3J4X3JlZmlsbF93b3JrLCBIWik7CiB9CiAKLS8qKgotICogQ29uZmlndXJlIGNvbW1vbiBoYXJkd2FyZSBmb3IgYWxsIGludGVyZmFjZXMKLSAqLworc3RhdGljIHZvaWQgY3ZtX29jdF9wZXJpb2RpY193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgICBzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0LAorCQkJCQkJICAgIHBvcnRfcGVyaW9kaWNfd29yay53b3JrKTsKKworCWlmIChwcml2LT5wb2xsKQorCQlwcml2LT5wb2xsKGN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdKTsKKworCWN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdLT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3N0YXRzKGN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdKTsKKworCWlmICghYXRvbWljX3JlYWQoJmN2bV9vY3RfcG9sbF9xdWV1ZV9zdG9wcGluZykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmssIEhaKTsKKyB9CisKIHN0YXRpYyBfX2luaXQgdm9pZCBjdm1fb2N0X2NvbmZpZ3VyZV9jb21tb25faHcodm9pZCkKIHsKLQlpbnQgcjsKIAkvKiBTZXR1cCB0aGUgRlBBICovCiAJY3ZteF9mcGFfZW5hYmxlKCk7CiAJY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsIENWTVhfRlBBX1BBQ0tFVF9QT09MX1NJWkUsCkBAIC0yMDUsMjggKzE5MCwxMyBAQAogCQljdm14X2hlbHBlcl9zZXR1cF9yZWQobnVtX3BhY2tldF9idWZmZXJzIC8gNCwKIAkJCQkgICAgICBudW1fcGFja2V0X2J1ZmZlcnMgLyA4KTsKIAotCS8qIEVuYWJsZSB0aGUgTUlJIGludGVyZmFjZSAqLwotCWlmICghb2N0ZW9uX2lzX3NpbXVsYXRpb24oKSkKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9TTUlYX0VOKDApLCAxKTsKLQotCS8qIFJlZ2lzdGVyIGFuIElSUSBoYW5kZXIgZm9yIHRvIHJlY2VpdmUgUE9XIGludGVycnVwdHMgKi8KLQlyID0gcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9XT1JLUTAgKyBwb3dfcmVjZWl2ZV9ncm91cCwKLQkJCWN2bV9vY3RfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgIkV0aGVybmV0IiwKLQkJCWN2bV9vY3RfZGV2aWNlKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgMAotCWlmIChVU0VfTVVMVElDT1JFX1JFQ0VJVkUpIHsKLQkJaXJxX3NldF9hZmZpbml0eShPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwLAotCQkJCSBjcHVfb25saW5lX21hc2spOwotCX0KLSNlbmRpZgogfQogCiAvKioKLSAqIEZyZWUgYSB3b3JrIHF1ZXVlIGVudHJ5IHJlY2VpdmVkIGluIGEgaW50ZXJjZXB0IGNhbGxiYWNrLgorICogY3ZtX29jdF9mcmVlX3dvcmstIEZyZWUgYSB3b3JrIHF1ZXVlIGVudHJ5CiAgKgotICogQHdvcmtfcXVldWVfZW50cnk6Ci0gKiAgICAgICAgICAgICAgIFdvcmsgcXVldWUgZW50cnkgdG8gZnJlZQorICogQHdvcmtfcXVldWVfZW50cnk6IFdvcmsgcXVldWUgZW50cnkgdG8gZnJlZQorICoKICAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzLCBOZWdhdGl2ZSBvbiBmYWlsdXJlLgogICovCiBpbnQgY3ZtX29jdF9mcmVlX3dvcmsodm9pZCAqd29ya19xdWV1ZV9lbnRyeSkKQEAgLTI1Myw5ICsyMjMsOSBAQAogRVhQT1JUX1NZTUJPTChjdm1fb2N0X2ZyZWVfd29yayk7CiAKIC8qKgotICogR2V0IHRoZSBsb3cgbGV2ZWwgZXRoZXJuZXQgc3RhdGlzdGljcwotICoKKyAqIGN2bV9vY3RfY29tbW9uX2dldF9zdGF0cyAtIGdldCB0aGUgbG93IGxldmVsIGV0aGVybmV0IHN0YXRpc3RpY3MKICAqIEBkZXY6ICAgIERldmljZSB0byBnZXQgdGhlIHN0YXRpc3RpY3MgZnJvbQorICoKICAqIFJldHVybnMgUG9pbnRlciB0byB0aGUgc3RhdGlzdGljcwogICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmN2bV9vY3RfY29tbW9uX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjk5LDggKzI2OSw3IEBACiB9CiAKIC8qKgotICogQ2hhbmdlIHRoZSBsaW5rIE1UVS4gVW5pbXBsZW1lbnRlZAotICoKKyAqIGN2bV9vY3RfY29tbW9uX2NoYW5nZV9tdHUgLSBjaGFuZ2UgdGhlIGxpbmsgTVRVCiAgKiBAZGV2OiAgICAgRGV2aWNlIHRvIGNoYW5nZQogICogQG5ld19tdHU6IFRoZSBuZXcgTVRVCiAgKgpAQCAtMzY0LDggKzMzMyw3IEBACiB9CiAKIC8qKgotICogU2V0IHRoZSBtdWx0aWNhc3QgbGlzdC4gQ3VycmVudGx5IHVuaW1wbGVtZW50ZWQuCi0gKgorICogY3ZtX29jdF9jb21tb25fc2V0X211bHRpY2FzdF9saXN0IC0gc2V0IHRoZSBtdWx0aWNhc3QgbGlzdAogICogQGRldjogICAgRGV2aWNlIHRvIHdvcmsgb24KICAqLwogc3RhdGljIHZvaWQgY3ZtX29jdF9jb21tb25fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00MjAsMTAgKzM4OCwxMCBAQAogfQogCiAvKioKLSAqIFNldCB0aGUgaGFyZHdhcmUgTUFDIGFkZHJlc3MgZm9yIGEgZGV2aWNlCi0gKgotICogQGRldjogICAgRGV2aWNlIHRvIGNoYW5nZSB0aGUgTUFDIGFkZHJlc3MgZm9yCi0gKiBAYWRkcjogICBBZGRyZXNzIHN0cnVjdHVyZSB0byBjaGFuZ2UgaXQgdG9vLiBNQUMgYWRkcmVzcyBpcyBhZGRyICsgMi4KKyAqIGN2bV9vY3RfY29tbW9uX3NldF9tYWNfYWRkcmVzcyAtIHNldCB0aGUgaGFyZHdhcmUgTUFDIGFkZHJlc3MgZm9yIGEgZGV2aWNlCisgKiBAZGV2OiAgICBUaGUgZGV2aWNlIGluIHF1ZXN0aW9uLgorICogQGFkZHI6ICAgQWRkcmVzcyBzdHJ1Y3R1cmUgdG8gY2hhbmdlIGl0IHRvby4KKwogICogUmV0dXJucyBaZXJvIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBjdm1fb2N0X2NvbW1vbl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTQ3MCw5ICs0MzgsOSBAQAogfQogCiAvKioKLSAqIFBlciBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbgotICoKKyAqIGN2bV9vY3RfY29tbW9uX2luaXQgLSBwZXIgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24KICAqIEBkZXY6ICAgIERldmljZSB0byBpbml0aWFsaXplCisgKgogICogUmV0dXJucyBaZXJvIG9uIHN1Y2Nlc3MKICAqLwogaW50IGN2bV9vY3RfY29tbW9uX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTUxMCw4ICs0NzgsMTEgQEAKIAkgICAgJiYgKGFsd2F5c191c2VfcG93IHx8IHN0cnN0cihwb3dfc2VuZF9saXN0LCBkZXYtPm5hbWUpKSkKIAkJcHJpdi0+cXVldWUgPSAtMTsKIAotCWlmIChwcml2LT5xdWV1ZSAhPSAtMSAmJiBVU0VfSFdfVENQVURQX0NIRUNLU1VNKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKwlpZiAocHJpdi0+cXVldWUgIT0gLTEpIHsKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCQlpZiAoVVNFX0hXX1RDUFVEUF9DSEVDS1NVTSkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOworCX0KIAogCS8qIFdlIGRvIG91ciBvd24gbG9ja2luZywgTGludXggZG9lc24ndCBuZWVkIHRvICovCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CkBAIC02MjUsMTIgKzU5Niw2IEBACiAKIGV4dGVybiB2b2lkIG9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KHZvaWQpOwogCi0vKioKLSAqIE1vZHVsZS8gZHJpdmVyIGluaXRpYWxpemF0aW9uLiBDcmVhdGVzIHRoZSBsaW51eCBuZXR3b3JrCi0gKiBkZXZpY2VzLgotICoKLSAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzCi0gKi8KIHN0YXRpYyBpbnQgX19pbml0IGN2bV9vY3RfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgbnVtX2ludGVyZmFjZXM7CkBAIC02NDgsOCArNjEzLDEyIEBACiAJZWxzZQogCQljdm1fb2N0X21hY19hZGRyX29mZnNldCA9IDA7CiAKLQljdm1fb2N0X3Byb2NfaW5pdGlhbGl6ZSgpOwotCWN2bV9vY3RfcnhfaW5pdGlhbGl6ZSgpOworCWN2bV9vY3RfcG9sbF9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJvY3Rlb24tZXRoZXJuZXQiKTsKKwlpZiAoY3ZtX29jdF9wb2xsX3F1ZXVlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJvY3Rlb24tZXRoZXJuZXQ6IENhbm5vdCBjcmVhdGUgd29ya3F1ZXVlIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCWN2bV9vY3RfY29uZmlndXJlX2NvbW1vbl9odygpOwogCiAJY3ZteF9oZWxwZXJfaW5pdGlhbGl6ZV9wYWNrZXRfaW9fZ2xvYmFsKCk7CkBAIC02ODIsNiArNjUxLDkgQEAKIAkgKi8KIAljdm14X2ZhdV9hdG9taWNfd3JpdGUzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsIDApOwogCisJLyogSW5pdGlhbGl6ZSB0aGUgRkFVIHVzZWQgZm9yIGNvdW50aW5nIHR4IFNLQnMgdGhhdCBuZWVkIHRvIGJlIGZyZWVkICovCisJY3ZteF9mYXVfYXRvbWljX3dyaXRlMzIoRkFVX1RPVEFMX1RYX1RPX0NMRUFOLCAwKTsKKwogCWlmICgocG93X3NlbmRfZ3JvdXAgIT0gLTEpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJCXByX2luZm8oIlx0Q29uZmlndXJpbmcgZGV2aWNlIGZvciBQT1cgb25seSBhY2Nlc3NcbiIpOwpAQCAtNjg5LDcgKzY2MSw2IEBACiAJCWlmIChkZXYpIHsKIAkJCS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4gKi8KIAkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0KSk7CiAKIAkJCWRldi0+bmV0ZGV2X29wcyA9ICZjdm1fb2N0X3Bvd19uZXRkZXZfb3BzOwogCQkJcHJpdi0+aW1vZGUgPSBDVk1YX0hFTFBFUl9JTlRFUkZBQ0VfTU9ERV9ESVNBQkxFRDsKQEAgLTcwMCwxOSArNjcxLDE2IEBACiAJCQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pOwogCiAJCQlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgPCAwKSB7Ci0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZXRoZXJuZXQgIgotCQkJCQkgImRldmljZSBmb3IgUE9XXG4iKTsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBldGhlcm5ldCBkZXZpY2UgZm9yIFBPV1xuIik7CiAJCQkJa2ZyZWUoZGV2KTsKIAkJCX0gZWxzZSB7CiAJCQkJY3ZtX29jdF9kZXZpY2VbQ1ZNWF9QSVBfTlVNX0lOUFVUX1BPUlRTXSA9IGRldjsKLQkJCQlwcl9pbmZvKCIlczogUE9XIHNlbmQgZ3JvdXAgJWQsIHJlY2VpdmUgIgotCQkJCQkiZ3JvdXAgJWRcbiIsCi0JCQkJICAgICBkZXYtPm5hbWUsIHBvd19zZW5kX2dyb3VwLAotCQkJCSAgICAgcG93X3JlY2VpdmVfZ3JvdXApOworCQkJCXByX2luZm8oIiVzOiBQT1cgc2VuZCBncm91cCAlZCwgcmVjZWl2ZSBncm91cCAlZFxuIiwKKwkJCQkJZGV2LT5uYW1lLCBwb3dfc2VuZF9ncm91cCwKKwkJCQkJcG93X3JlY2VpdmVfZ3JvdXApOwogCQkJfQogCQl9IGVsc2UgewotCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlICIKLQkJCQkgImZvciBQT1dcbiIpOworCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlIGZvciBQT1dcbiIpOwogCQl9CiAJfQogCkBAIC03MzAsMTcgKzY5OCwxNSBAQAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9CiAJCQkgICAgYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBvY3Rlb25fZXRoZXJuZXQpKTsKIAkJCWlmICghZGV2KSB7Ci0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlICIKLQkJCQkJICJmb3IgcG9ydCAlZFxuIiwgcG9ydCk7CisJCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlIGZvciBwb3J0ICVkXG4iLCBwb3J0KTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChkaXNhYmxlX2NvcmVfcXVldWVpbmcpCi0JCQkJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCiAJCQkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuICovCiAJCQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IG9jdGVvbl9ldGhlcm5ldCkpOwogCisJCQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cG9ydF9wZXJpb2RpY193b3JrLAorCQkJCQkgIGN2bV9vY3RfcGVyaW9kaWNfd29ya2VyKTsKIAkJCXByaXYtPmltb2RlID0gaW1vZGU7CiAJCQlwcml2LT5wb3J0ID0gcG9ydDsKIAkJCXByaXYtPnF1ZXVlID0gY3ZteF9wa29fZ2V0X2Jhc2VfcXVldWUocHJpdi0+cG9ydCk7CkBAIC04MDMsNDQgKzc2OSwyNSBAQAogCQkJCWZhdSAtPQogCQkJCSAgICBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwcml2LT5wb3J0KSAqCiAJCQkJICAgIHNpemVvZih1aW50MzJfdCk7CisJCQkJcXVldWVfZGVsYXllZF93b3JrKGN2bV9vY3RfcG9sbF9xdWV1ZSwKKwkJCQkJCSAgICZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmssIEhaKTsKIAkJCX0KIAkJfQogCX0KIAotCWlmIChJTlRFUlJVUFRfTElNSVQpIHsKLQkJLyoKLQkJICogU2V0IHRoZSBQT1cgdGltZXIgcmF0ZSB0byBnaXZlIGFuIGludGVycnVwdCBhdCBtb3N0Ci0JCSAqIElOVEVSUlVQVF9MSU1JVCB0aW1lcyBwZXIgc2Vjb25kLgotCQkgKi8KLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5UX1BDLAotCQkJICAgICAgIG9jdGVvbl9ib290aW5mby0+ZWNsb2NrX2h6IC8gKElOVEVSUlVQVF9MSU1JVCAqCi0JCQkJCQkJICAgICAxNiAqIDI1NikgPDwgOCk7CisJY3ZtX29jdF90eF9pbml0aWFsaXplKCk7CisJY3ZtX29jdF9yeF9pbml0aWFsaXplKCk7CiAKLQkJLyoKLQkJICogRW5hYmxlIFBPVyB0aW1lciBpbnRlcnJ1cHQuIEl0IHdpbGwgY291bnQgd2hlbgotCQkgKiB0aGVyZSBhcmUgcGFja2V0cyBhdmFpbGFibGUuCi0JCSAqLwotCQljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlRfVEhSWChwb3dfcmVjZWl2ZV9ncm91cCksCi0JCQkgICAgICAgMHgxZnVsIDw8IDI0KTsKLQl9IGVsc2UgewotCQkvKiBFbmFibGUgUE9XIGludGVycnVwdCB3aGVuIG91ciBwb3J0IGhhcyBhdCBsZWFzdCBvbmUgcGFja2V0ICovCi0JCWN2bXhfd3JpdGVfY3NyKENWTVhfUE9XX1dRX0lOVF9USFJYKHBvd19yZWNlaXZlX2dyb3VwKSwgMHgxMDAxKTsKLQl9CisJLyoKKwkgKiAxNTAgdVM6IGFib3V0IDEwIDE1MDAtYnl0ZSBwYWNrdGVzIGF0IDFHRS4KKwkgKi8KKwljdm1fb2N0X3R4X3BvbGxfaW50ZXJ2YWwgPSAxNTAgKiAob2N0ZW9uX2dldF9jbG9ja19yYXRlKCkgLyAxMDAwMDAwKTsKIAotCS8qIEVuYWJsZSB0aGUgcG9sbCB0aW1lciBmb3IgY2hlY2tpbmcgUkdNSUkgc3RhdHVzICovCi0JaW5pdF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKLQljdm1fb2N0X3BvbGxfdGltZXIuZGF0YSA9IDA7Ci0JY3ZtX29jdF9wb2xsX3RpbWVyLmZ1bmN0aW9uID0gY3ZtX2RvX3RpbWVyOwotCW1vZF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyLCBqaWZmaWVzICsgSFopOworCXF1ZXVlX2RlbGF5ZWRfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZjdm1fb2N0X3J4X3JlZmlsbF93b3JrLCBIWik7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBNb2R1bGUgLyBkcml2ZXIgc2h1dGRvd24KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcwotICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3ZtX29jdF9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBwb3J0OwpAQCAtODUzLDIyICs4MDAsMzEgQEAKIAkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWZyZWVfaXJxKE9DVEVPTl9JUlFfV09SS1EwICsgcG93X3JlY2VpdmVfZ3JvdXAsIGN2bV9vY3RfZGV2aWNlKTsKIAotCWRlbF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKKwlhdG9taWNfaW5jX3JldHVybigmY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmN2bV9vY3RfcnhfcmVmaWxsX3dvcmspOworCiAJY3ZtX29jdF9yeF9zaHV0ZG93bigpOworCWN2bV9vY3RfdHhfc2h1dGRvd24oKTsKKwogCWN2bXhfcGtvX2Rpc2FibGUoKTsKIAogCS8qIEZyZWUgdGhlIGV0aGVybmV0IGRldmljZXMgKi8KIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfTlVNQkVSX09GX1BPUlRTOyBwb3J0KyspIHsKIAkJaWYgKGN2bV9vY3RfZGV2aWNlW3BvcnRdKSB7Ci0JCQljdm1fb2N0X3R4X3NodXRkb3duKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCWtmcmVlKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjdm1fb2N0X2RldmljZVtwb3J0XTsKKwkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmspOworCisJCQljdm1fb2N0X3R4X3NodXRkb3duX2RldihkZXYpOworCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJCWtmcmVlKGRldik7CiAJCQljdm1fb2N0X2RldmljZVtwb3J0XSA9IE5VTEw7CiAJCX0KIAl9CiAKKwlkZXN0cm95X3dvcmtxdWV1ZShjdm1fb2N0X3BvbGxfcXVldWUpOworCiAJY3ZteF9wa29fc2h1dGRvd24oKTsKLQljdm1fb2N0X3Byb2Nfc2h1dGRvd24oKTsKIAogCWN2bXhfaXBkX2ZyZWVfcHRyKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL29jdGVvbi1ldGhlcm5ldC5oCmluZGV4IDQwMmExNWIuLmQ1ODE5MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9vY3Rlb24tZXRoZXJuZXQuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTU3LDU4ICs1NywxMiBAQAogCXVpbnQ2NF90IGxpbmtfaW5mbzsKIAkvKiBDYWxsZWQgcGVyaW9kaWNhbGx5IHRvIGNoZWNrIGxpbmsgc3RhdHVzICovCiAJdm9pZCAoKnBvbGwpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXBvcnRfcGVyaW9kaWNfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcG9ydF93b3JrOwkvKiBtYXkgYmUgdW51c2VkLiAqLwogfTsKIAotLyoqCi0gKiBGcmVlIGEgd29yayBxdWV1ZSBlbnRyeSByZWNlaXZlZCBpbiBhIGludGVyY2VwdCBjYWxsYmFjay4KLSAqCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBmcmVlCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgTmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwogaW50IGN2bV9vY3RfZnJlZV93b3JrKHZvaWQgKndvcmtfcXVldWVfZW50cnkpOwogCi0vKioKLSAqIFRyYW5zbWl0IGEgd29yayBxdWV1ZSBlbnRyeSBvdXQgb2YgdGhlIGV0aGVybmV0IHBvcnQuIEJvdGgKLSAqIHRoZSB3b3JrIHF1ZXVlIGVudHJ5IGFuZCB0aGUgcGFja2V0IGRhdGEgY2FuIG9wdGlvbmFsbHkgYmUKLSAqIGZyZWVkLiBUaGUgd29yayB3aWxsIGJlIGZyZWVkIG9uIGVycm9yIGFzIHdlbGwuCi0gKgotICogQGRldjogICAgIERldmljZSB0byB0cmFuc21pdCBvdXQuCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgIFdvcmsgcXVldWUgZW50cnkgdG8gc2VuZAotICogQGRvX2ZyZWU6IFRydWUgaWYgdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHBhY2tldCBkYXRhIHNob3VsZCBiZQotICogICAgICAgICAgICAgICAgZnJlZWQuIElmIGZhbHNlLCBuZWl0aGVyIHdpbGwgYmUgZnJlZWQuCi0gKiBAcW9zOiAgICAgSW5kZXggaW50byB0aGUgcXVldWVzIGZvciB0aGlzIHBvcnQgdG8gdHJhbnNtaXQgb24uIFRoaXMKLSAqICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gaW1wbGVtZW50IFFvUyBpZiB0aGVpciBhcmUgbXVsdGlwbGUgcXVldWVzIHBlcgotICogICAgICAgICAgICAgICAgcG9ydC4gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YKLSAqICAgICAgICAgICAgICAgIHF1ZXVlcyBwZXIgcG9ydCBtaW51cyAxLiBWYWx1ZXMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlIHdpbGwKLSAqICAgICAgICAgICAgICAgIGJlIGNoYW5nZSB0byB6ZXJvLgotICoKLSAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgotICovCi1pbnQgY3ZtX29jdF90cmFuc21pdF9xb3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqd29ya19xdWV1ZV9lbnRyeSwKLQkJCSBpbnQgZG9fZnJlZSwgaW50IHFvcyk7Ci0KLS8qKgotICogVHJhbnNtaXQgYSB3b3JrIHF1ZXVlIGVudHJ5IG91dCBvZiB0aGUgZXRoZXJuZXQgcG9ydC4gQm90aAotICogdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHRoZSBwYWNrZXQgZGF0YSBjYW4gb3B0aW9uYWxseSBiZQotICogZnJlZWQuIFRoZSB3b3JrIHdpbGwgYmUgZnJlZWQgb24gZXJyb3IgYXMgd2VsbC4gVGhpcyBzaW1wbHkKLSAqIHdyYXBzIGN2bXhfb2N0X3RyYW5zbWl0X3FvcygpIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4KLSAqCi0gKiBAZGV2OiAgICAgRGV2aWNlIHRvIHRyYW5zbWl0IG91dC4KLSAqIEB3b3JrX3F1ZXVlX2VudHJ5OgotICogICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBzZW5kCi0gKiBAZG9fZnJlZTogVHJ1ZSBpZiB0aGUgd29yayBxdWV1ZSBlbnRyeSBhbmQgcGFja2V0IGRhdGEgc2hvdWxkIGJlCi0gKiAgICAgICAgICAgICAgICBmcmVlZC4gSWYgZmFsc2UsIG5laXRoZXIgd2lsbCBiZSBmcmVlZC4KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgY3ZtX29jdF90cmFuc21pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHZvaWQgKndvcmtfcXVldWVfZW50cnksIGludCBkb19mcmVlKQotewotCXJldHVybiBjdm1fb2N0X3RyYW5zbWl0X3FvcyhkZXYsIHdvcmtfcXVldWVfZW50cnksIGRvX2ZyZWUsIDApOwotfQotCiBleHRlcm4gaW50IGN2bV9vY3RfcmdtaWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGN2bV9vY3RfcmdtaWlfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBjdm1fb2N0X3JnbWlpX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzQsNSArODgsMTEgQEAKIGV4dGVybiBpbnQgcG93X3JlY2VpdmVfZ3JvdXA7CiBleHRlcm4gY2hhciBwb3dfc2VuZF9saXN0W107CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmN2bV9vY3RfZGV2aWNlW107CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN2bV9vY3RfcG9sbF9xdWV1ZTsKK2V4dGVybiBhdG9taWNfdCBjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmc7CitleHRlcm4gdTY0IGN2bV9vY3RfdHhfcG9sbF9pbnRlcnZhbDsKKworZXh0ZXJuIGludCBtYXhfcnhfY3B1czsKK2V4dGVybiBpbnQgcnhfbmFwaV93ZWlnaHQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jCmluZGV4IDEzM2I4NmMuLjJmZmYwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3I6IEJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaAppbmRleCAzOGQwYzMzLi4wMmI0ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yOiBHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwppbmRleCAxNjFkYmM5Li5hNGY2ZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC02LDcgKzYsNyBAQAogICogCSAgICBCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmgKaW5kZXggN2YyYzM0MS4uN2VlNTY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaApAQCAtNiw3ICs2LDcgQEAKICAqCSAJQm95b2QgYm95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKaW5kZXggNjBhNDVmMS4uZjJmMDU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCkBAIC0xMDIyLDYgKzEwMjIsMTQgQEAKIAkJZ290byBkb25lOwogCX0KIAorCS8qIE5vbi1yb290IGRldmljZXMgb24gYSBmdWxsL2xvdy1zcGVlZCBidXMgbXVzdCB3YWl0IGZvciB0aGVpcgorCSAqIGNvbXBhbmlvbiBoaWdoLXNwZWVkIHJvb3QgaHViLCBpbiBjYXNlIGEgaGFuZG9mZiBpcyBuZWVkZWQuCisJICovCisJaWYgKCEobXNnLmV2ZW50ICYgUE1fRVZFTlRfQVVUTykgJiYgdWRldi0+cGFyZW50ICYmCisJCQl1ZGV2LT5idXMtPmhzX2NvbXBhbmlvbikKKwkJZGV2aWNlX3BtX3dhaXRfZm9yX2RldigmdWRldi0+ZGV2LAorCQkJCSZ1ZGV2LT5idXMtPmhzX2NvbXBhbmlvbi0+cm9vdF9odWItPmRldik7CisKIAlpZiAodWRldi0+cXVpcmtzICYgVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSkKIAkJdWRldi0+cmVzZXRfcmVzdW1lID0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCmluZGV4IGZkZmFhNzguLmQyNmI5ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKQEAgLTE4Niw2ICsxODYsNyBAQAogCWVwX2Rldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAllcF9kZXYtPmRldi5yZWxlYXNlID0gZXBfZGV2aWNlX3JlbGVhc2U7CiAJZGV2X3NldF9uYW1lKCZlcF9kZXYtPmRldiwgImVwXyUwMngiLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmVwX2Rldi0+ZGV2KTsKIAogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmZXBfZGV2LT5kZXYpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IDJkY2Y5MDYuLjE1Mjg2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0zNyw2ICszOCwxMjIgQEAKIAogLyogUENJLWJhc2VkIEhDcyBhcmUgY29tbW9uLCBidXQgcGxlbnR5IG9mIG5vbi1QQ0kgSENzIGFyZSB1c2VkIHRvbyAqLwogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCisKKy8qIENvb3JkaW5hdGUgaGFuZG9mZnMgYmV0d2VlbiBFSENJIGFuZCBjb21wYW5pb24gY29udHJvbGxlcnMKKyAqIGR1cmluZyBzeXN0ZW0gcmVzdW1lCisgKi8KKworc3RhdGljIERFRklORV9NVVRFWChjb21wYW5pb25zX211dGV4KTsKKworI2RlZmluZSBDTF9VSENJCQlQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9VSENJCisjZGVmaW5lIENMX09IQ0kJCVBDSV9DTEFTU19TRVJJQUxfVVNCX09IQ0kKKyNkZWZpbmUgQ0xfRUhDSQkJUENJX0NMQVNTX1NFUklBTF9VU0JfRUhDSQorCitlbnVtIGNvbXBhbmlvbl9hY3Rpb24geworCVNFVF9IU19DT01QQU5JT04sIENMRUFSX0hTX0NPTVBBTklPTiwgV0FJVF9GT1JfQ09NUEFOSU9OUworfTsKKworc3RhdGljIHZvaWQgY29tcGFuaW9uX2NvbW1vbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJZW51bSBjb21wYW5pb25fYWN0aW9uIGFjdGlvbikKK3sKKwlzdHJ1Y3QgcGNpX2RldgkJKmNvbXBhbmlvbjsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmNvbXBhbmlvbl9oY2Q7CisJdW5zaWduZWQgaW50CQlzbG90ID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOworCisJLyogSXRlcmF0ZSB0aHJvdWdoIG90aGVyIFBDSSBmdW5jdGlvbnMgaW4gdGhlIHNhbWUgc2xvdC4KKwkgKiBJZiBwZGV2IGlzIE9IQ0kgb3IgVUhDSSB0aGVuIHdlIGFyZSBsb29raW5nIGZvciBFSENJLCBhbmQKKwkgKiB2aWNlIHZlcnNhLgorCSAqLworCWNvbXBhbmlvbiA9IE5VTEw7CisJZm9yICg7OykgeworCQljb21wYW5pb24gPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBjb21wYW5pb24pOworCQlpZiAoIWNvbXBhbmlvbikKKwkJCWJyZWFrOworCQlpZiAoY29tcGFuaW9uLT5idXMgIT0gcGRldi0+YnVzIHx8CisJCQkJUENJX1NMT1QoY29tcGFuaW9uLT5kZXZmbikgIT0gc2xvdCkKKwkJCWNvbnRpbnVlOworCisJCWNvbXBhbmlvbl9oY2QgPSBwY2lfZ2V0X2RydmRhdGEoY29tcGFuaW9uKTsKKwkJaWYgKCFjb21wYW5pb25faGNkKQorCQkJY29udGludWU7CisKKwkJLyogRm9yIFNFVF9IU19DT01QQU5JT04sIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgRUhDSSBidXMgaW4KKwkJICogdGhlIE9IQ0kvVUhDSSBjb21wYW5pb24gYnVzIHN0cnVjdHVyZS4KKwkJICogRm9yIENMRUFSX0hTX0NPTVBBTklPTiwgY2xlYXIgdGhlIHBvaW50ZXIgdG8gdGhlIEVIQ0kgYnVzCisJCSAqIGluIHRoZSBPSENJL1VIQ0kgY29tcGFuaW9uIGJ1cyBzdHJ1Y3R1cmUuCisJCSAqIEZvciBXQUlUX0ZPUl9DT01QQU5JT05TLCB3YWl0IHVudGlsIHRoZSBPSENJL1VIQ0kKKwkJICogY29tcGFuaW9uIGNvbnRyb2xsZXJzIGhhdmUgZnVsbHkgcmVzdW1lZC4KKwkJICovCisKKwkJaWYgKChwZGV2LT5jbGFzcyA9PSBDTF9PSENJIHx8IHBkZXYtPmNsYXNzID09IENMX1VIQ0kpICYmCisJCQkJY29tcGFuaW9uLT5jbGFzcyA9PSBDTF9FSENJKSB7CisJCQkvKiBhY3Rpb24gbXVzdCBiZSBTRVRfSFNfQ09NUEFOSU9OICovCisJCQlkZXZfZGJnKCZjb21wYW5pb24tPmRldiwgIkhTIGNvbXBhbmlvbiBmb3IgJXNcbiIsCisJCQkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwkJCWhjZC0+c2VsZi5oc19jb21wYW5pb24gPSAmY29tcGFuaW9uX2hjZC0+c2VsZjsKKworCQl9IGVsc2UgaWYgKHBkZXYtPmNsYXNzID09IENMX0VIQ0kgJiYKKwkJCQkoY29tcGFuaW9uLT5jbGFzcyA9PSBDTF9PSENJIHx8CisJCQkJY29tcGFuaW9uLT5jbGFzcyA9PSBDTF9VSENJKSkgeworCQkJc3dpdGNoIChhY3Rpb24pIHsKKwkJCWNhc2UgU0VUX0hTX0NPTVBBTklPTjoKKwkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJIUyBjb21wYW5pb24gZm9yICVzXG4iLAorCQkJCQkJZGV2X25hbWUoJmNvbXBhbmlvbi0+ZGV2KSk7CisJCQkJY29tcGFuaW9uX2hjZC0+c2VsZi5oc19jb21wYW5pb24gPSAmaGNkLT5zZWxmOworCQkJCWJyZWFrOworCQkJY2FzZSBDTEVBUl9IU19DT01QQU5JT046CisJCQkJY29tcGFuaW9uX2hjZC0+c2VsZi5oc19jb21wYW5pb24gPSBOVUxMOworCQkJCWJyZWFrOworCQkJY2FzZSBXQUlUX0ZPUl9DT01QQU5JT05TOgorCQkJCWRldmljZV9wbV93YWl0X2Zvcl9kZXYoJnBkZXYtPmRldiwKKwkJCQkJCSZjb21wYW5pb24tPmRldik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9oc19jb21wYW5pb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJbXV0ZXhfbG9jaygmY29tcGFuaW9uc19tdXRleCk7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGhjZCk7CisJY29tcGFuaW9uX2NvbW1vbihwZGV2LCBoY2QsIFNFVF9IU19DT01QQU5JT04pOworCW11dGV4X3VubG9jaygmY29tcGFuaW9uc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2hzX2NvbXBhbmlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwltdXRleF9sb2NrKCZjb21wYW5pb25zX211dGV4KTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisKKwkvKiBJZiBwZGV2IGlzIE9IQ0kgb3IgVUhDSSwganVzdCBjbGVhciBpdHMgaHNfY29tcGFuaW9uIHBvaW50ZXIgKi8KKwlpZiAocGRldi0+Y2xhc3MgPT0gQ0xfT0hDSSB8fCBwZGV2LT5jbGFzcyA9PSBDTF9VSENJKQorCQloY2QtPnNlbGYuaHNfY29tcGFuaW9uID0gTlVMTDsKKworCS8qIE90aGVyd2lzZSBzZWFyY2ggZm9yIGNvbXBhbmlvbiBidXNlcyBhbmQgY2xlYXIgdGhlaXIgcG9pbnRlcnMgKi8KKwllbHNlCisJCWNvbXBhbmlvbl9jb21tb24ocGRldiwgaGNkLCBDTEVBUl9IU19DT01QQU5JT04pOworCW11dGV4X3VubG9jaygmY29tcGFuaW9uc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2NvbXBhbmlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJLyogT25seSBFSENJIGNvbnRyb2xsZXJzIG5lZWQgdG8gd2FpdC4KKwkgKiBObyBsb2NraW5nIGlzIG5lZWRlZCBiZWNhdXNlIGEgY29udHJvbGxlciBjYW5ub3QgYmUgcmVzdW1lZAorCSAqIHdoaWxlIG9uZSBvZiBpdHMgY29tcGFuaW9ucyBpcyBnZXR0aW5nIHVuYm91bmQuCisJICovCisJaWYgKHBkZXYtPmNsYXNzID09IENMX0VIQ0kpCisJCWNvbXBhbmlvbl9jb21tb24ocGRldiwgaGNkLCBXQUlUX0ZPUl9DT01QQU5JT05TKTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hzX2NvbXBhbmlvbihzdHJ1Y3QgcGNpX2RldiAqZCwgc3RydWN0IHVzYl9oY2QgKmgpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaHNfY29tcGFuaW9uKHN0cnVjdCBwY2lfZGV2ICpkLCBzdHJ1Y3QgdXNiX2hjZCAqaCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9jb21wYW5pb25zKHN0cnVjdCBwY2lfZGV2ICpkLCBzdHJ1Y3QgdXNiX2hjZCAqaCkge30KKworI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTIzLDcgKzI0MCw3IEBACiAJCWlmIChyZWdpb24gPT0gUENJX1JPTV9SRVNPVVJDRSkgewogCQkJZGV2X2RiZygmZGV2LT5kZXYsICJubyBpL28gcmVnaW9ucyBhdmFpbGFibGVcbiIpOwogCQkJcmV0dmFsID0gLUVCVVNZOwotCQkJZ290byBlcnIxOworCQkJZ290byBlcnIyOwogCQl9CiAJfQogCkBAIC0xMzIsNiArMjQ5LDcgQEAKIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+aXJxLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBlcnI0OworCXNldF9oc19jb21wYW5pb24oZGV2LCBoY2QpOwogCXJldHVybiByZXR2YWw7CiAKICBlcnI0OgpAQCAtMTQyLDYgKzI2MCw3IEBACiAJfSBlbHNlCiAJCXJlbGVhc2VfcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAgZXJyMjoKKwljbGVhcl9oc19jb21wYW5pb24oZGV2LCBoY2QpOwogCXVzYl9wdXRfaGNkKGhjZCk7CiAgZXJyMToKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKQEAgLTE4MCw2ICsyOTksNyBAQAogCX0gZWxzZSB7CiAJCXJlbGVhc2VfcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAJfQorCWNsZWFyX2hzX2NvbXBhbmlvbihkZXYsIGhjZCk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIH0KQEAgLTM0NCw2ICs0NjQsMTEgQEAKIAljbGVhcl9iaXQoSENEX0ZMQUdfU0FXX0lSUSwgJmhjZC0+ZmxhZ3MpOwogCiAJaWYgKGhjZC0+ZHJpdmVyLT5wY2lfcmVzdW1lKSB7CisJCS8qIFRoaXMgY2FsbCBzaG91bGQgYmUgbWFkZSBvbmx5IGR1cmluZyBzeXN0ZW0gcmVzdW1lLAorCQkgKiBub3QgZHVyaW5nIHJ1bnRpbWUgcmVzdW1lLgorCQkgKi8KKwkJd2FpdF9mb3JfY29tcGFuaW9ucyhwY2lfZGV2LCBoY2QpOworCiAJCXJldHZhbCA9IGhjZC0+ZHJpdmVyLT5wY2lfcmVzdW1lKGhjZCwgaGliZXJuYXRlZCk7CiAJCWlmIChyZXR2YWwpIHsKIAkJCWRldl9lcnIoZGV2LCAiUENJIHBvc3QtcmVzdW1lIGVycm9yICVkIVxuIiwgcmV0dmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDM1Y2M4YjkuLjIwZWNiNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMTgxNyw2ICsxODE3LDcgQEAKIAkvKiBUZWxsIHRoZSB3b3JsZCEgKi8KIAlhbm5vdW5jZV9kZXZpY2UodWRldik7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnVkZXYtPmRldik7CiAJLyogUmVnaXN0ZXIgdGhlIGRldmljZS4gIFRoZSBkZXZpY2UgZHJpdmVyIGlzIHJlc3BvbnNpYmxlCiAJICogZm9yIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UgYW5kIGludm9raW5nIHRoZSBhZGQtZGV2aWNlCiAJICogbm90aWZpZXIgY2hhaW4gKHVzZWQgYnkgdXNiZnMgYW5kIHBvc3NpYmx5IG90aGVycykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IDliYzk1ZmUuLmRmNzM1NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC0xODY3LDYgKzE4NjcsNyBAQAogCQkJImFkZGluZyAlcyAoY29uZmlnICMlZCwgaW50ZXJmYWNlICVkKVxuIiwKIAkJCWRldl9uYW1lKCZpbnRmLT5kZXYpLCBjb25maWd1cmF0aW9uLAogCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmaW50Zi0+ZGV2KTsKIAkJcmV0ID0gZGV2aWNlX2FkZCgmaW50Zi0+ZGV2KTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgImRldmljZV9hZGQoJXMpIC0tPiAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCmluZGV4IGRmNzdmNjEuLmYxZTNhYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwpAQCAtNjAsNyArNjAsNyBAQAogI2RlZmluZSBVQUNfRFRfVE9UQUxfTEVOR1RIIChVQUNfRFRfQUNfSEVBREVSX0xFTkdUSCArIFVBQ19EVF9JTlBVVF9URVJNSU5BTF9TSVpFIFwKIAkrIFVBQ19EVF9PVVRQVVRfVEVSTUlOQUxfU0laRSArIFVBQ19EVF9GRUFUVVJFX1VOSVRfU0laRSgwKSkKIC8qIEIuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RhdGljIHN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfMiBhY19oZWFkZXJfZGVzYyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxXzIgYWNfaGVhZGVyX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVUFDX0RUX0FDX0hFQURFUl9MRU5HVEgsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVBQ19IRUFERVIsCkBAIC0xMjQsNyArMTI0LDcgQEAKIH07CiAKICNkZWZpbmUgT1VUUFVUX1RFUk1JTkFMX0lECTMKLXN0YXRpYyBzdHJ1Y3QgdWFjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIG91dHB1dF90ZXJtaW5hbF9kZXNjID0geworc3RhdGljIHN0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3JfdjEgb3V0cHV0X3Rlcm1pbmFsX2Rlc2MgPSB7CiAJLmJMZW5ndGgJCT0gVUFDX0RUX09VVFBVVF9URVJNSU5BTF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUJPSBVQUNfT1VUUFVUX1RFUk1JTkFMLApAQCAtMTU0LDcgKzE1NCw3IEBACiB9OwogCiAvKiBCLjQuMiAgQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0YXRpYyBzdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yIGFzX2hlYWRlcl9kZXNjID0geworc3RhdGljIHN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjEgYXNfaGVhZGVyX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVUFDX0RUX0FTX0hFQURFUl9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVQUNfQVNfR0VORVJBTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKaW5kZXggZDBiMWU4My4uNWY2YTJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogfTsKIAogLyogQi4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8xIGFjX2hlYWRlcl9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfdjFfMSBhY19oZWFkZXJfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVQUNfRFRfQUNfSEVBREVSX1NJWkUoMSksCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVTQl9NU19IRUFERVIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwppbmRleCBlOWY5OTU0Li5iYmVlYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTc4LDcgKzc4LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIgZm9yIExpbnV4Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsYXlfdXNlID0gNTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsYXlfdXNlID0gMTsKIG1vZHVsZV9wYXJhbShkZWxheV91c2UsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVsYXlfdXNlLCAic2Vjb25kcyB0byBkZWxheSBiZWZvcmUgdXNpbmcgYSBuZXcgZGV2aWNlIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCmluZGV4IGU0ZTRkNDMuLjllZTY3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwpAQCAtMTkzMSwyMiArMTkzMSwyMiBAQAogCQkJICogUG93ZXJNYWMyLDIgc3VtbWVyIDIwMDAgaU1hY3MKIAkJCSAqIFBvd2VyTWFjNCwxIGphbnVhcnkgMjAwMSBpTWFjcyAiZmxvd2VyIHBvd2VyIgogCQkJICovCi0JCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMSIpIHx8Ci0JCQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMiIpIHx8Ci0JCQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMSIpKQorCQkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDEiKSB8fAorCQkJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDIiKSB8fAorCQkJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDEiKSkKIAkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTAyNF83NjhfNzU7CiAKIAkJCS8qIGlCb29rIFNFICovCi0JCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDIiKSkKKwkJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMiIpKQogCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV84MDBfNjAwXzYwOwogCiAJCQkvKiBQb3dlckJvb2sgRmlyZXdpcmUgKFBpc21vKSwgaUJvb2sgRHVhbCBVU0IgKi8KLQkJCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMSIpIHx8Ci0JCQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkKKwkJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMSIpIHx8CisJCQkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkKIAkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTAyNF83NjhfNjA7CiAKIAkJCS8qIFBvd2VyQm9vayBUaXRhbml1bSAqLwotCQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikpCisJCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkKIAkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTE1Ml83NjhfNjA7CiAJCiAJCQlpZiAoZGVmYXVsdF9jbW9kZSA+IDE2KSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwppbmRleCAxZGRlYjRjLi5lNDVhYjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCkBAIC0yNDM5LDcgKzI0MzksNyBAQAogCSAqIFRoZSBBcHBsZSBpQm9vazEgdXNlcyBub24tc3RhbmRhcmQgbWVtb3J5IGZyZXF1ZW5jaWVzLgogCSAqIFdlIGRldGVjdCBpdCBhbmQgc2V0IHRoZSBmcmVxdWVuY3kgbWFudWFsbHkuCiAJICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpIHsKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkgewogCQlwYXItPnBsbF9saW1pdHMubWNsayA9IDcwOwogCQlwYXItPnBsbF9saW1pdHMueGNsayA9IDUzOwogCX0KQEAgLTI2NTksNyArMjY1OSw3IEBACiAJCSAgICAgIEZCSU5GT19IV0FDQ0VMX1lQQU47CiAKICNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLQlpZiAoTTY0X0hBUyhHM19QQl8xXzEpICYmIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpIHsKKwlpZiAoTTY0X0hBUyhHM19QQl8xXzEpICYmIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpIHsKIAkJLyoKIAkJICogdGhlc2UgYml0cyBsZXQgdGhlIDEwMSBwb3dlcmJvb2sKIAkJICogd2FrZSB1cCBmcm9tIHNsZWVwIC0tIHBhdWx1cwpAQCAtMjY5MCw5ICsyNjkwLDkgQEAKIAkJCQlpZiAoTTY0X0hBUyhHM19QQl8xMDI0eDc2OCkpCiAJCQkJCS8qIEczIFBvd2VyQm9vayB3aXRoIDEwMjR4NzY4IExDRCAqLwogCQkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfMTAyNF83NjhfNjA7Ci0JCQkJZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIikpCisJCQkJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIikpCiAJCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV8xMDI0Xzc2OF83NTsKLQkJCQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQorCQkJCWVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpCiAJCQkJCS8qIGlCb29rIHdpdGggODAweDYwMCBMQ0QgKi8KIAkJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzgwMF82MDBfNjA7CiAJCQkJZWxzZQpAQCAtMzEwNCw3ICszMTA0LDcgQEAKIAl9CiAKIAlkcCA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKLQlpZiAobm9kZSA9PSBkcC0+bm9kZSkgeworCWlmIChub2RlID09IGRwLT5waGFuZGxlKSB7CiAJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmRlZmF1bHRfdmFyOwogCQl1bnNpZ25lZCBpbnQgTiwgUCwgUSwgTSwgVCwgUjsKIAkJdTMyIHZfdG90YWwsIGhfdG90YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKaW5kZXggMWEwNTZhZC4uZmExMTk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYwpAQCAtMTc1LDkgKzE3NSw5IEBACiAKICNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKIAlwZGF0YS0+bmVnYXRpdmUgPSBwZGF0YS0+bmVnYXRpdmUgfHwKLQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDMiKSB8fAotCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMyIpIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiw1Iik7CisJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwzIikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAorCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNSIpOwogI2VuZGlmCiAKIAlyaW5mby0+aW5mby0+YmxfZGV2ID0gYmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuYyBiL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jCmluZGV4IDcyZDY4YjMuLjQ2MzdiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jCkBAIC0xNjMzLDYgKzE2MzMsMTEgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBmc2xfZGl1X21hdGNoW10gPSB7CisjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1kaXUiLAorCX0sCisjZW5kaWYKIAl7CiAJCS5jb21wYXRpYmxlID0gImZzbCxkaXUiLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL21hY2ZiLmMKaW5kZXggZDY2ODg3ZS4uNDMyMDdjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYWNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWFjZmIuYwpAQCAtMSwyOSArMSwzMyBAQAotLyogbWFjZmIuYzogR2VuZXJpYyBmcmFtZWJ1ZmZlciBmb3IgTWFjcyB3aG9zZSBjb2xvdXJtYXBzL21vZGVzIHdlCi0gICBkb24ndCBrbm93IGhvdyB0byBzZXQgKi8KLQotLyogKGMpIDE5OTkgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPgotCi0gICBQcmltYXJpbHkgYmFzZWQgb24gdmVzYWZiLmMsIGJ5IEdlcmQgS25vcnIKLSAgIChjKSAxOTk4IEdlcmQgS25vcnIgPGtyYXhlbEBjcy50dS1iZXJsaW4uZGU+Ci0KLSAgIEFsc28gdXNlcyBpbmZvcm1hdGlvbiBhbmQgY29kZSBmcm9tOgotICAgCi0gICBUaGUgb3JpZ2luYWwgbWFjZmIuYyBmcm9tIExpbnV4L21hYzY4ayAyLjAsIGJ5IEFsYW4gQ294LCBKdWVyZ2VuCi0gICBNZWxsaW5nZXIsIE1pa2FlbCBGb3JzZWxpdXMsIE1pY2hhZWwgU2NobWl0eiwgYW5kIG90aGVycy4KLQotICAgdmFsa3lyaWVmYi5jLCBieSBNYXJ0aW4gQ29zdGFiZWwsIEtldmluIFNjaG9lZGVsLCBCYXJyeSBOYXRoYW4sIERhbgotICAgSmFjb2Jvd2l0eiwgUGF1bCBNYWNrZXJyYXMsIEZhYmlvIFJpY2NhcmRpLCBhbmQgR2VlcnQgVXl0dGVyaG9ldmVuLgotICAgCi0gICBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZS4gIFlvdSBtYXkgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZQotICAgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhbnkgbGF0ZXIgdmVyc2lvbiwgYXQgeW91ciBjb252ZW5pZW5jZS4gKi8KKy8qCisgKiBtYWNmYi5jOiBHZW5lcmljIGZyYW1lYnVmZmVyIGZvciBNYWNzIHdob3NlIGNvbG91cm1hcHMvbW9kZXMgd2UKKyAqIGRvbid0IGtub3cgaG93IHRvIHNldC4KKyAqCisgKiAoYykgMTk5OSBEYXZpZCBIdWdnaW5zLURhaW5lcyA8ZGhkQGRlYmlhbi5vcmc+CisgKgorICogUHJpbWFyaWx5IGJhc2VkIG9uIHZlc2FmYi5jLCBieSBHZXJkIEtub3JyCisgKiAoYykgMTk5OCBHZXJkIEtub3JyIDxrcmF4ZWxAY3MudHUtYmVybGluLmRlPgorICoKKyAqIEFsc28gdXNlcyBpbmZvcm1hdGlvbiBhbmQgY29kZSBmcm9tOgorICoKKyAqIFRoZSBvcmlnaW5hbCBtYWNmYi5jIGZyb20gTGludXgvbWFjNjhrIDIuMCwgYnkgQWxhbiBDb3gsIEp1ZXJnZW4KKyAqIE1lbGxpbmdlciwgTWlrYWVsIEZvcnNlbGl1cywgTWljaGFlbCBTY2htaXR6LCBhbmQgb3RoZXJzLgorICoKKyAqIHZhbGt5cmllZmIuYywgYnkgTWFydGluIENvc3RhYmVsLCBLZXZpbiBTY2hvZWRlbCwgQmFycnkgTmF0aGFuLCBEYW4KKyAqIEphY29ib3dpdHosIFBhdWwgTWFja2VycmFzLCBGYWJpbyBSaWNjYXJkaSwgYW5kIEdlZXJ0IFV5dHRlcmhvZXZlbi4KKyAqCisgKiBUaGUgVmlkZW9Ub29sYm94ICJCdWdzIiB3ZWIgcGFnZSBhdAorICogaHR0cDovL3JhanNreS5wc3ljaC5ueXUuZWR1L1RpcHMvVmlkZW9CdWdzLmh0bWwKKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZS4gIFlvdSBtYXkgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZQorICogaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhbnkgbGF0ZXIgdmVyc2lvbiwgYXQgeW91ciBjb252ZW5pZW5jZS4KKyAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L251YnVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzEsOSArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTQ0LDcgKzQ1LDcgQEAKICNkZWZpbmUgREFGQl9CQVNFIDB4Zjk4MDAyMDAKIAogLyogQWRkcmVzcyBmb3IgdGhlIGJ1aWx0LWluIENpdmljIGZyYW1lYnVmZmVyIGluIFF1YWRyYSBBVnMgKi8KLSNkZWZpbmUgQ0lWSUNfQkFTRSAweDUwZjMwODAwCS8qIE9ubHkgdGVzdGVkIG9uIDY2MEFWISAqLworI2RlZmluZSBDSVZJQ19CQVNFIDB4NTBmMzA4MDAKIAogLyogR1NDIChHcmF5IFNjYWxlIENvbnRyb2xsZXIpIGJhc2UgYWRkcmVzcyAqLwogI2RlZmluZSBHU0NfQkFTRSAweDUwRjIwMDAwCkBAIC01MiwzNyArNTMsOSBAQAogLyogQ1NDIChDb2xvciBTY3JlZW4gQ29udHJvbGxlcikgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIENTQ19CQVNFIDB4NTBGMjAwMDAKIAotc3RhdGljIGludCAoKm1hY2ZiX3NldHBhbGV0dGUpICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkJdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgPSBOVUxMOwotc3RhdGljIGludCB2YWxreXJpZV9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkJdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGRhZmJfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCByYnZfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLXN0YXRpYyBpbnQgbWRjX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci1zdGF0aWMgaW50IHRvYnlfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCBjaXZpY19zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLXN0YXRpYyBpbnQgY3NjX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgYWRkcjsKLQkvKiBOb3RlOiB3b3JkLWFsaWduZWQgKi8KLQljaGFyIHBhZFszXTsKLQl1bnNpZ25lZCBjaGFyIGx1dDsKLX0gX19pb21lbSAqdmFsa3lyaWVfY21hcF9yZWdzOworc3RhdGljIGludCAoKm1hY2ZiX3NldHBhbGV0dGUpKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAogc3RhdGljIHN0cnVjdCB7CiAJdW5zaWduZWQgY2hhciBhZGRyOwpAQCAtMTE2LDE1ICs4OSwxNSBAQAogfSBfX2lvbWVtICpjaXZpY19jbWFwX3JlZ3M7CiAKIHN0YXRpYyBzdHJ1Y3QgewotCWNoYXIgICAgcGFkMVsweDQwXTsKLSAgICAgICAgdW5zaWduZWQgY2hhcgljbHV0X3dhZGRyOwkvKiAweDQwICovCi0gICAgICAgIGNoYXIgICAgcGFkMjsKLSAgICAgICAgdW5zaWduZWQgY2hhcgljbHV0X2RhdGE7CS8qIDB4NDIgKi8KLSAgICAgICAgY2hhcglwYWQzWzB4M107Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIJY2x1dF9yYWRkcjsJLyogMHg0NiAqLworCWNoYXIgcGFkMVsweDQwXTsKKwl1bnNpZ25lZCBjaGFyIGNsdXRfd2FkZHI7CS8qIDB4NDAgKi8KKwljaGFyIHBhZDI7CisJdW5zaWduZWQgY2hhciBjbHV0X2RhdGE7CS8qIDB4NDIgKi8KKwljaGFyIHBhZDNbMHgzXTsKKwl1bnNpZ25lZCBjaGFyIGNsdXRfcmFkZHI7CS8qIDB4NDYgKi8KIH0gX19pb21lbSAqY3NjX2NtYXBfcmVnczsKIAotLyogV2Ugd2lsbCBsZWF2ZSB0aGVzZSB0aGUgd2F5IHRoZXkgYXJlIGZvciB0aGUgdGltZSBiZWluZyAqLworLyogVGhlIHJlZ2lzdGVycyBpbiB0aGVzZSBzdHJ1Y3RzIGFyZSBpbiBOdUJ1cyBzbG90IHNwYWNlICovCiBzdHJ1Y3QgbWRjX2NtYXBfcmVncyB7CiAJY2hhciBwYWQxWzB4MjAwMjAwXTsKIAl1bnNpZ25lZCBjaGFyIGFkZHI7CkBAIC0xNDUsMTMgKzExOCwxMCBAQAogCXVuc2lnbmVkIGNoYXIgbHV0OwogfTsKIAotI2RlZmluZSBQSVhFTF9UT19NTShhKQkoKChhKSoxMCkvMjgpCS8qIHdpZHRoIGluIG1tIGF0IDcyIGRwaSAqLwkKLQotLyogbW9kZSAqLwotc3RhdGljIGludCAgdmlkZW9fc2xvdCA9IDA7CisjZGVmaW5lIFBJWEVMX1RPX01NKGEpCSgoKGEpKjEwKS8yOCkJLyogd2lkdGggaW4gbW0gYXQgNzIgZHBpICovCiAKIHN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gbWFjZmJfZGVmaW5lZCA9IHsKLQkuYml0c19wZXJfcGl4ZWwJPSA4LAkKKwkuYml0c19wZXJfcGl4ZWwJPSA4LAogCS5hY3RpdmF0ZQk9IEZCX0FDVElWQVRFX05PVywKIAkud2lkdGgJCT0gLTEsCiAJLmhlaWdodAkJPSAtMSwKQEAgLTE2NywxODEgKzEzNywxNTIgQEAKIAkuYWNjZWwJPSBGQl9BQ0NFTF9OT05FLAogfTsKIAorc3RhdGljIHZvaWQgKnNsb3RfYWRkcjsKIHN0YXRpYyBzdHJ1Y3QgZmJfaW5mbyBmYl9pbmZvOwogc3RhdGljIHUzMiBwc2V1ZG9fcGFsZXR0ZVsxNl07Ci1zdGF0aWMgaW50IGludmVyc2UgICA9IDA7Ci1zdGF0aWMgaW50IHZpZHRlc3QgICA9IDA7CitzdGF0aWMgaW50IGludmVyc2U7CitzdGF0aWMgaW50IHZpZHRlc3Q7CiAKLXN0YXRpYyBpbnQgdmFsa3lyaWVfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJCXVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCisvKgorICogVW5saWtlIHRoZSBWYWxreXJpZSwgdGhlIERBRkIgY2Fubm90IHNldCBpbmRpdmlkdWFsIGNvbG9ybWFwCisgKiByZWdpc3RlcnMuICBUaGVyZWZvcmUsIHdlIGRvIHdoYXQgdGhlIE1hY09TIGRyaXZlciBkb2VzIChubworICoga2lkZGluZyEpIGFuZCBzaW1wbHkgc2V0IHRoZW0gb25lIGJ5IG9uZSB1bnRpbCB3ZSBoaXQgdGhlIG9uZSB3ZQorICogd2FudC4KKyAqLworc3RhdGljIGludCBkYWZiX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCi0JcmVkID4+PSA4OwotCWdyZWVuID4+PSA4OwotCWJsdWUgPj49IDg7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCi0JLyogdGVsbCBjbHV0IHdoaWNoIGFkZHJlc3MgdG8gZmlsbCAqLwotCW51YnVzX3dyaXRlYihyZWdubywgJnZhbGt5cmllX2NtYXBfcmVncy0+YWRkcik7Ci0Jbm9wKCk7Ci0KLQkvKiBzZW5kIG9uZSBjb2xvciBjaGFubmVsIGF0IGEgdGltZSAqLwotCW51YnVzX3dyaXRlYihyZWQsICZ2YWxreXJpZV9jbWFwX3JlZ3MtPmx1dCk7Ci0Jbm9wKCk7Ci0JbnVidXNfd3JpdGViKGdyZWVuLCAmdmFsa3lyaWVfY21hcF9yZWdzLT5sdXQpOwotCW5vcCgpOwotCW51YnVzX3dyaXRlYihibHVlLCAmdmFsa3lyaWVfY21hcF9yZWdzLT5sdXQpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0vKiBVbmxpa2UgdGhlIFZhbGt5cmllLCB0aGUgREFGQiBjYW5ub3Qgc2V0IGluZGl2aWR1YWwgY29sb3JtYXAKLSAgIHJlZ2lzdGVycy4gIFRoZXJlZm9yZSwgd2UgZG8gd2hhdCB0aGUgTWFjT1MgZHJpdmVyIGRvZXMgKG5vCi0gICBraWRkaW5nISkgYW5kIHNpbXBseSBzZXQgdGhlbSBvbmUgYnkgb25lIHVudGlsIHdlIGhpdCB0aGUgb25lIHdlCi0gICB3YW50LiAqLwotc3RhdGljIGludCBkYWZiX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCS8qIEZJWE1FOiByZWFsbHksIHJlYWxseSBuZWVkIHRvIHVzZSBpb3JlbWFwKCkgaGVyZSwKLSAgICAgICAgICAgcGh5c190b192aXJ0KCkgZG9lc24ndCB3b3JrIGFueW1vcmUgKi8KIAlzdGF0aWMgaW50IGxhc3RyZWcgPSAtMTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQotCXJlZCA+Pj0gODsKLQlncmVlbiA+Pj0gODsKLQlibHVlID4+PSA4OwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQotCS8qIGZiZGV2IHdpbGwgc2V0IGFuIGVudGlyZSBjb2xvdXJtYXAsIGJ1dCBYIHdvbid0LiAgSG9wZWZ1bGx5Ci0JICAgdGhpcyBzaG91bGQgYWNjb21tb2RhdGUgYm90aCBvZiB0aGVtICovCi0JaWYgKHJlZ25vICE9IGxhc3RyZWcrMSkgeworCisJLyoKKwkgKiBmYmRldiB3aWxsIHNldCBhbiBlbnRpcmUgY29sb3VybWFwLCBidXQgWCB3b24ndC4gIEhvcGVmdWxseQorCSAqIHRoaXMgc2hvdWxkIGFjY29tbW9kYXRlIGJvdGggb2YgdGhlbQorCSAqLworCWlmIChyZWdubyAhPSBsYXN0cmVnICsgMSkgewogCQlpbnQgaTsKLQkJCisKIAkJLyogU3RhYiBpbiB0aGUgZGFyayB0cnlpbmcgdG8gcmVzZXQgdGhlIENMVVQgcG9pbnRlciAqLwogCQludWJ1c193cml0ZWwoMCwgJmRhZmJfY21hcF9yZWdzLT5yZXNldCk7CiAJCW5vcCgpOwotCQkKKwogCQkvKiBMb29wIHVudGlsIHdlIGdldCB0byB0aGUgcmVnaXN0ZXIgd2Ugd2FudCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgcmVnbm87IGkrKykgewotCQkJbnVidXNfd3JpdGViKGluZm8tPmNtYXAucmVkW2ldID4+IDgsICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKKwkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLnJlZFtpXSA+PiA4LAorCQkJCSAgICAgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCQkJbm9wKCk7Ci0JCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5ncmVlbltpXSA+PiA4LCAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CisJCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5ncmVlbltpXSA+PiA4LAorCQkJCSAgICAgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCQkJbm9wKCk7Ci0JCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5ibHVlW2ldID4+IDgsICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKKwkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLmJsdWVbaV0gPj4gOCwKKwkJCQkgICAgICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKIAkJCW5vcCgpOwogCQl9CiAJfQotCQkKKwogCW51YnVzX3dyaXRlYihyZWQsICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKIAlub3AoKTsKIAludWJ1c193cml0ZWIoZ3JlZW4sICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKIAlub3AoKTsKIAludWJ1c193cml0ZWIoYmx1ZSwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwotCQorCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCWxhc3RyZWcgPSByZWdubzsKIAlyZXR1cm4gMDsKIH0KIAogLyogVjggYW5kIEJyYXppbCBzZWVtIHRvIHVzZSB0aGUgc2FtZSBEQUMuICBTb25vcmEgZG9lcyBhcyB3ZWxsLiAqLwotc3RhdGljIGludCB2OF9icmF6aWxfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJCSB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJCSBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykJCitzdGF0aWMgaW50IHY4X2JyYXppbF9zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCQl1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXVuc2lnbmVkIGludCBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7Ci0JdW5zaWduZWQgY2hhciBfcmVkICA9cmVkPj44OwotCXVuc2lnbmVkIGNoYXIgX2dyZWVuPWdyZWVuPj44OwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgPWJsdWU+Pjg7Ci0JdW5zaWduZWQgY2hhciBfcmVnbm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChicHAgPiA4KSByZXR1cm4gMTsgLyogZmFpbHNhZmUgKi8KKwlpZiAoYnBwID4gOCkKKwkJcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAkvKiBPbiB0aGVzZSBjaGlwcywgdGhlIENMVVQgcmVnaXN0ZXIgbnVtYmVycyBhcmUgc3ByZWFkIG91dAotCSAgIGFjcm9zcyB0aGUgcmVnaXN0ZXIgc3BhY2UuICBUaHVzOgotCi0JICAgSW4gOGJwcCwgYWxsIHJlZ25vcyBhcmUgdmFsaWQuCi0JICAgCi0JICAgSW4gNGJwcCwgdGhlIHJlZ25vcyBhcmUgMHgwZiwgMHgxZiwgMHgyZiwgZXRjLCBldGMKLQkgICAKLQkgICBJbiAyYnBwLCB0aGUgcmVnbm9zIGFyZSAweDNmLCAweDdmLCAweGJmLCAweGZmICovCi0gIAlfcmVnbm8gPSAocmVnbm8gPDwgKDggLSBicHApKSB8ICgweEZGID4+IGJwcCk7Ci0JbnVidXNfd3JpdGViKF9yZWdubywgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKKwkgKiBhY3Jvc3MgdGhlIHJlZ2lzdGVyIHNwYWNlLiAgVGh1czoKKwkgKiBJbiA4YnBwLCBhbGwgcmVnbm9zIGFyZSB2YWxpZC4KKwkgKiBJbiA0YnBwLCB0aGUgcmVnbm9zIGFyZSAweDBmLCAweDFmLCAweDJmLCBldGMsIGV0YworCSAqIEluIDJicHAsIHRoZSByZWdub3MgYXJlIDB4M2YsIDB4N2YsIDB4YmYsIDB4ZmYKKwkgKi8KKwlyZWdubyA9IChyZWdubyA8PCAoOCAtIGJwcCkpIHwgKDB4RkYgPj4gYnBwKTsKKwludWJ1c193cml0ZWIocmVnbm8sICZ2OF9icmF6aWxfY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKIAogCS8qIHNlbmQgb25lIGNvbG9yIGNoYW5uZWwgYXQgYSB0aW1lICovCi0JbnVidXNfd3JpdGViKF9yZWQsICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2dyZWVuLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ibHVlLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsKKwludWJ1c193cml0ZWIocmVkLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoZ3JlZW4sICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihibHVlLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+bHV0KTsKIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJidl9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCisvKiBSQU0tQmFzZWQgVmlkZW8gKi8KK3N0YXRpYyBpbnQgcmJ2X3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQkvKiB1c2UgTVNCcyAqLwotCXVuc2lnbmVkIGNoYXIgX3JlZCAgPXJlZD4+ODsKLQl1bnNpZ25lZCBjaGFyIF9ncmVlbj1ncmVlbj4+ODsKLQl1bnNpZ25lZCBjaGFyIF9ibHVlID1ibHVlPj44OwotCXVuc2lnbmVkIGNoYXIgX3JlZ25vOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4gOCkgcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCisJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+IDgpCisJCXJldHVybiAxOyAvKiBmYWlsc2FmZSAqLwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQorCiAJLyogRnJvbSB0aGUgVmlkZW9Ub29sYm94IGRyaXZlci4gIFNlZW1zIHRvIGJlIHNheWluZyB0aGF0CiAJICogcmVnbm8gIzI1NCBhbmQgIzI1NSBhcmUgdGhlIGltcG9ydGFudCBvbmVzIGZvciAxLWJpdCBjb2xvciwKIAkgKiByZWdubyAjMjUyLTI1NSBhcmUgdGhlIGltcG9ydGFudCBvbmVzIGZvciAyLWJpdCBjb2xvciwgZXRjLgogCSAqLwotCV9yZWdubyA9IHJlZ25vICsgKDI1Ni0oMSA8PCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpKTsKKwlyZWdubyArPSAyNTYgLSAoMSA8PCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOwogCiAJLyogcmVzZXQgY2x1dD8gKFZpZGVvVG9vbGJveCBzZXogIm5vdCBuZWNlc3NhcnkiKSAqLwotCW51YnVzX3dyaXRlYigweEZGLCAmcmJ2X2NtYXBfcmVncy0+Y250bCk7IG5vcCgpOwotCQorCW51YnVzX3dyaXRlYigweEZGLCAmcmJ2X2NtYXBfcmVncy0+Y250bCk7CisJbm9wKCk7CisKIAkvKiB0ZWxsIGNsdXQgd2hpY2ggYWRkcmVzcyB0byB1c2UuICovCi0JbnVidXNfd3JpdGViKF9yZWdubywgJnJidl9jbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKLQkKKwludWJ1c193cml0ZWIocmVnbm8sICZyYnZfY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKKwogCS8qIHNlbmQgb25lIGNvbG9yIGNoYW5uZWwgYXQgYSB0aW1lLiAqLwotCW51YnVzX3dyaXRlYihfcmVkLCAgICZyYnZfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2dyZWVuLCAmcmJ2X2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ibHVlLCAgJnJidl9jbWFwX3JlZ3MtPmx1dCk7Ci0JCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAvKiBkb25lLiAqLworCW51YnVzX3dyaXRlYihyZWQsICZyYnZfY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihncmVlbiwgJnJidl9jbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGJsdWUsICZyYnZfY21hcF9yZWdzLT5sdXQpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi0vKiBNYWNpbnRvc2ggRGlzcGxheSBDYXJkICg4eDI0KSAqLworLyogTWFjaW50b3NoIERpc3BsYXkgQ2FyZCAoOCoyNCkgKi8KIHN0YXRpYyBpbnQgbWRjX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAogCQkJICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAogCQkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQl2b2xhdGlsZSBzdHJ1Y3QgbWRjX2NtYXBfcmVncyAqY21hcF9yZWdzID0KLQkJbnVidXNfc2xvdF9hZGRyKHZpZGVvX3Nsb3QpOwotCS8qIHVzZSBNU0JzICovCi0JdW5zaWduZWQgY2hhciBfcmVkICA9cmVkPj44OwotCXVuc2lnbmVkIGNoYXIgX2dyZWVuPWdyZWVuPj44OwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgPWJsdWU+Pjg7Ci0JdW5zaWduZWQgY2hhciBfcmVnbm89cmVnbm87CisJc3RydWN0IG1kY19jbWFwX3JlZ3MgKmNtYXBfcmVncyA9IHNsb3RfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQorCiAJLyogdGhlIG5vcCdzIGFyZSB0aGVyZSB0byBvcmRlciB3cml0ZXMuICovCi0JbnVidXNfd3JpdGViKF9yZWdubywgJmNtYXBfcmVncy0+YWRkcik7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfcmVkLCAmY21hcF9yZWdzLT5sdXQpOyAgICBub3AoKTsKLQludWJ1c193cml0ZWIoX2dyZWVuLCAmY21hcF9yZWdzLT5sdXQpOyAgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ibHVlLCAmY21hcF9yZWdzLT5sdXQpOworCW51YnVzX3dyaXRlYihyZWdubywgJmNtYXBfcmVncy0+YWRkcik7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKHJlZCwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGJsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CkBAIC0zNTAsMjQgKzI5MSwyNiBAQAogLyogVG9ieSBmcmFtZSBidWZmZXIgKi8KIHN0YXRpYyBpbnQgdG9ieV9zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKIAkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykgCisJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQl2b2xhdGlsZSBzdHJ1Y3QgdG9ieV9jbWFwX3JlZ3MgKmNtYXBfcmVncyA9Ci0JCW51YnVzX3Nsb3RfYWRkcih2aWRlb19zbG90KTsKKwlzdHJ1Y3QgdG9ieV9jbWFwX3JlZ3MgKmNtYXBfcmVncyA9IHNsb3RfYWRkcjsKIAl1bnNpZ25lZCBpbnQgYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOwotCS8qIHVzZSBNU0JzICovCi0JdW5zaWduZWQgY2hhciBfcmVkICA9fihyZWQ+PjgpOwotCXVuc2lnbmVkIGNoYXIgX2dyZWVuPX4oZ3JlZW4+PjgpOwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgPX4oYmx1ZT4+OCk7Ci0JdW5zaWduZWQgY2hhciBfcmVnbm8gPSAocmVnbm8gPDwgKDggLSBicHApKSB8ICgweEZGID4+IGJwcCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXJlZCA9IH5yZWQ7CisJZ3JlZW4gPSB+Z3JlZW47CisJYmx1ZSA9IH5ibHVlOworCXJlZ25vID0gKHJlZ25vIDw8ICg4IC0gYnBwKSkgfCAoMHhGRiA+PiBicHApOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkKLQludWJ1c193cml0ZWIoX3JlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9yZWQsICZjbWFwX3JlZ3MtPmx1dCk7ICAgIG5vcCgpOwotCW51YnVzX3dyaXRlYihfZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7ICBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CisKKwludWJ1c193cml0ZWIocmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihyZWQsICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGdyZWVuLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihibHVlLCAmY21hcF9yZWdzLT5sdXQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtMzc4LDIwICszMjEsMTggQEAKIAkJCSAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKIAkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jdm9sYXRpbGUgc3RydWN0IGpldF9jbWFwX3JlZ3MgKmNtYXBfcmVncyA9Ci0JCW51YnVzX3Nsb3RfYWRkcih2aWRlb19zbG90KTsKLQkvKiB1c2UgTVNCcyAqLwotCXVuc2lnbmVkIGNoYXIgX3JlZCAgID0gKHJlZD4+OCk7Ci0JdW5zaWduZWQgY2hhciBfZ3JlZW4gPSAoZ3JlZW4+PjgpOwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgID0gKGJsdWU+PjgpOworCXN0cnVjdCBqZXRfY21hcF9yZWdzICpjbWFwX3JlZ3MgPSBzbG90X2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkKLQludWJ1c193cml0ZWIocmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX3JlZCwgJmNtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ibHVlLCAmY21hcF9yZWdzLT5sdXQpOworCisJbnVidXNfd3JpdGViKHJlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIocmVkLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJmNtYXBfcmVncy0+bHV0KTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTQwMCw1MyArMzQxLDI3IEBACiAvKgogICogQ2l2aWMgZnJhbWVidWZmZXIgLS0gUXVhZHJhIEFWIGJ1aWx0LWluIHZpZGVvLiAgQSBjaGlwCiAgKiBjYWxsZWQgU2ViYXN0aWFuIGhvbGRzIHRoZSBhY3R1YWwgY29sb3IgcGFsZXR0ZXMsIGFuZAotICogYXBwYXJlbnRseSwgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgYmFua3Mgb2YgNTEySyBSQU0gCisgKiBhcHBhcmVudGx5LCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCBiYW5rcyBvZiA1MTJLIFJBTQogICogd2hpY2ggY2FuIGFjdCBhcyBzZXBhcmF0ZSBmcmFtZWJ1ZmZlcnMgZm9yIGRvaW5nIHZpZGVvCiAgKiBpbnB1dCBhbmQgdmlld2luZyB0aGUgc2NyZWVuIGF0IHRoZSBzYW1lIHRpbWUhICBUaGUgODQwQVYKLSAqIENhbiBhZGQgYW5vdGhlciAxTUIgUkFNIHRvIGdpdmUgdGhlIHR3byBmcmFtZWJ1ZmZlcnMgCisgKiBDYW4gYWRkIGFub3RoZXIgMU1CIFJBTSB0byBnaXZlIHRoZSB0d28gZnJhbWVidWZmZXJzCiAgKiAxTUIgUkFNIGFwaWVjZS4KLSAqCi0gKiBGSVhNRTogdGhpcyBkb2Vzbid0IHNlZW0gdG8gd29yayBhbnltb3JlLgogICovCi1zdGF0aWMgaW50IGNpdmljX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IGNpdmljX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0Jc3RhdGljIGludCBsYXN0cmVnID0gLTE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY2x1dF9zdGF0dXM7CiAJCi0JaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+IDgpIHJldHVybiAxOyAvKiBmYWlsc2FmZSAqLwotCi0JcmVkICAgPj49IDg7Ci0JZ3JlZW4gPj49IDg7Ci0JYmx1ZSAgPj49IDg7CisJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+IDgpCisJCXJldHVybiAxOyAvKiBmYWlsc2FmZSAqLwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQotCS8qCi0JICogU2V0IHRoZSByZWdpc3RlciBhZGRyZXNzCi0JICovCi0JbnVidXNfd3JpdGViKHJlZ25vLCAmY2l2aWNfY21hcF9yZWdzLT5hZGRyKTsgbm9wKCk7CiAKLQkvKgotCSAqIFdhaXQgZm9yIFZCTCBpbnRlcnJ1cHQgaGVyZTsKLQkgKiBUaGV5J3JlIHVzdWFsbHkgbm90IGVuYWJsZWQgZnJvbSBQZW5ndWluLCBzbyB3ZSB3b24ndCBjaGVjawotCSAqLwotI2lmIDAKLQl7Ci0jZGVmaW5lIENJVklDX1ZCTF9PRkZTRVQJMHgxMjAKLQkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqdmJsID0gbnVidXNfcmVhZGwoY2l2aWNfY21hcF9yZWdzLT52YmxfYWRkciArIENJVklDX1ZCTF9PRkZTRVQpOwotCQkvKiBkbyBpbnRlcnJ1cHQgc2V0dXAgc3R1ZmYgaGVyZT8gKi8KLQkJKnZibCA9IDBMOyBub3AoKTsJLyogY2xlYXIgKi8KLQkJKnZibCA9IDFMOyBub3AoKTsJLyogc2V0ICovCi0JCXdoaWxlICgqdmJsICE9IDBMKQkvKiB3YWl0IGZvciBuZXh0IHZibCAqLwotCQl7Ci0JCQl1c2xlZXAoMTApOwkvKiBuZWVkZWQ/ICovCi0JCX0KLQkJLyogZG8gaW50ZXJydXB0IHNodXRkb3duIHN0dWZmIGhlcmU/ICovCi0JfQotI2VuZGlmCisJLyogU2V0IHRoZSByZWdpc3RlciBhZGRyZXNzICovCisJbnVidXNfd3JpdGViKHJlZ25vLCAmY2l2aWNfY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKIAogCS8qCiAJICogR3JhYiBhIHN0YXR1cyB3b3JkIGFuZCBkbyBzb21lIGNoZWNraW5nOwpAQCAtNDU5LDM5ICszNzQsNTIgQEAKICNpZiAwCiAJCWlmICgoY2x1dF9zdGF0dXMgJiAweDAwMEQpICE9IDApCiAJCXsKLQkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKKwkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQkJbm9wKCk7CisJCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJCW5vcCgpOwogCQl9CiAjZW5kaWYKIAotCQludWJ1c193cml0ZWIoICByZWQsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoZ3JlZW4sICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoIGJsdWUsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoIDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQludWJ1c193cml0ZWIocmVkLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGdyZWVuLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGJsdWUsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKIAl9CiAJZWxzZQogCXsKIAkJdW5zaWduZWQgY2hhciBqdW5rOwogCi0JCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKKwkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOwogCiAJCWlmICgoY2x1dF9zdGF0dXMgJiAweDAwMEQpICE9IDApCiAJCXsKLQkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKKwkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQkJbm9wKCk7CisJCQludWJ1c193cml0ZWIoMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJCW5vcCgpOwogCQl9CiAKLQkJbnVidXNfd3JpdGViKCAgcmVkLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJbnVidXNfd3JpdGViKGdyZWVuLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJbnVidXNfd3JpdGViKCBibHVlLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJbnVidXNfd3JpdGViKCBqdW5rLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKKwkJbnVidXNfd3JpdGViKHJlZCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCW51YnVzX3dyaXRlYihncmVlbiwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCW51YnVzX3dyaXRlYihibHVlLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGp1bmssICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CiAJfQogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWxhc3RyZWcgPSByZWdubzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTAwLDE2ICs0MjgsMjEgQEAKICAqIChhbmQgdGhlIDUzMDAgdG9vLCBidXQgdGhhdCdzIGEgUG93ZXJNYWMpLiBUaGlzIGZ1bmN0aW9uCiAgKiBicm91Z2h0IHRvIHlvdSBpbiBwYXJ0IGJ5IHRoZSBFQ1NDIGRyaXZlciBmb3IgTWtMaW51eC4KICAqLwotCi1zdGF0aWMgaW50IGNzY19zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IGNzY19zZXRwYWxldHRlKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKKwkJCSAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0JbWRlbGF5KDEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl1ZGVsYXkoMSk7IC8qIG1rbGludXggb24gUEIgNTMwMCB3YWl0cyBmb3IgMjYwIG5zICovCiAJbnVidXNfd3JpdGViKHJlZ25vLCAmY3NjX2NtYXBfcmVncy0+Y2x1dF93YWRkcik7Ci0JbnVidXNfd3JpdGViKHJlZCwgICAmY3NjX2NtYXBfcmVncy0+Y2x1dF9kYXRhKTsKKwludWJ1c193cml0ZWIocmVkLCAmY3NjX2NtYXBfcmVncy0+Y2x1dF9kYXRhKTsKIAludWJ1c193cml0ZWIoZ3JlZW4sICZjc2NfY21hcF9yZWdzLT5jbHV0X2RhdGEpOwotCW51YnVzX3dyaXRlYihibHVlLCAgJmNzY19jbWFwX3JlZ3MtPmNsdXRfZGF0YSk7CisJbnVidXNfd3JpdGViKGJsdWUsICZjc2NfY21hcF9yZWdzLT5jbHV0X2RhdGEpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC01MTgsMTAgKzQ1MSwxMCBAQAogCQkJICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCiB7CiAJLyoKLQkgKiAgU2V0IGEgc2luZ2xlIGNvbG9yIHJlZ2lzdGVyLiBUaGUgdmFsdWVzIHN1cHBsaWVkIGFyZQotCSAqICBhbHJlYWR5IHJvdW5kZWQgZG93biB0byB0aGUgaGFyZHdhcmUncyBjYXBhYmlsaXRpZXMKLQkgKiAgKGFjY29yZGluZyB0byB0aGUgZW50cmllcyBpbiB0aGUgYHZhcicgc3RydWN0dXJlKS4gUmV0dXJuCi0JICogICE9IDAgZm9yIGludmFsaWQgcmVnbm8uCisJICogU2V0IGEgc2luZ2xlIGNvbG9yIHJlZ2lzdGVyLiBUaGUgdmFsdWVzIHN1cHBsaWVkIGFyZQorCSAqIGFscmVhZHkgcm91bmRlZCBkb3duIHRvIHRoZSBoYXJkd2FyZSdzIGNhcGFiaWxpdGllcworCSAqIChhY2NvcmRpbmcgdG8gdGhlIGVudHJpZXMgaW4gdGhlIGB2YXInIHN0cnVjdHVyZSkuCisJICogUmV0dXJuIG5vbi16ZXJvIGZvciBpbnZhbGlkIHJlZ25vLgogCSAqLwogCQogCWlmIChyZWdubyA+PSBmYl9pbmZvLT5jbWFwLmxlbikKQEAgLTUzNiw4ICs0NjksOCBAQAogCQljYXNlIDQ6CiAJCWNhc2UgODoKIAkJCWlmIChtYWNmYl9zZXRwYWxldHRlKQotCQkJCW1hY2ZiX3NldHBhbGV0dGUocmVnbm8sIHJlZCwgZ3JlZW4sIGJsdWUsCi0JCQkJCQkgZmJfaW5mbyk7CisJCQkJbWFjZmJfc2V0cGFsZXR0ZShyZWdubywgcmVkID4+IDgsIGdyZWVuID4+IDgsCisJCQkJCQkgYmx1ZSA+PiA4LCBmYl9pbmZvKTsKIAkJCWVsc2UKIAkJCQlyZXR1cm4gMTsKIAkJCWJyZWFrOwpAQCAtNTU1LDI4ICs0ODgsMjIgQEAKIAkJCX0gZWxzZSB7CiAJCQkJLyogMDo1OjY6NSAqLwogCQkJCSgodTMyKikgKGZiX2luZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCQkJKChyZWQgICAmIDB4ZjgwMCkgICAgICApIHwKKwkJCQkJKChyZWQgICAmIDB4ZjgwMCkgPj4gIDApIHwKIAkJCQkJKChncmVlbiAmIDB4ZmMwMCkgPj4gIDUpIHwKIAkJCQkJKChibHVlICAmIDB4ZjgwMCkgPj4gMTEpOwogCQkJfQogCQkJYnJlYWs7Ci0JCQkvKiBJJ20gcHJldHR5IHN1cmUgdGhhdCBvbmUgb3IgdGhlIG90aGVyIG9mIHRoZXNlCi0JCQkgICBkb2Vzbid0IGV4aXN0IG9uIDY4ayBNYWNzICovCisJCS8qCisJCSAqIDI0LWJpdCBjb2xvdXIgYWxtb3N0IGRvZXNuJ3QgZXhpc3Qgb24gNjhrIE1hY3MgLS0KKwkJICogaHR0cDovL3N1cHBvcnQuYXBwbGUuY29tL2tiL1RBMjg2MzQgKE9sZCBBcnRpY2xlOiAxMDk5MikKKwkJICovCiAJCWNhc2UgMjQ6Ci0JCQlyZWQgICA+Pj0gODsKLQkJCWdyZWVuID4+PSA4OwotCQkJYmx1ZSAgPj49IDg7Ci0JCQkoKHUzMiAqKShmYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9Ci0JCQkJKHJlZCAgIDw8IGZiX2luZm8tPnZhci5yZWQub2Zmc2V0KSAgIHwKLQkJCQkoZ3JlZW4gPDwgZmJfaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAotCQkJCShibHVlICA8PCBmYl9pbmZvLT52YXIuYmx1ZS5vZmZzZXQpOwotCQkJYnJlYWs7CiAJCWNhc2UgMzI6CiAJCQlyZWQgICA+Pj0gODsKIAkJCWdyZWVuID4+PSA4OwogCQkJYmx1ZSAgPj49IDg7CiAJCQkoKHUzMiAqKShmYl9pbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9Ci0JCQkJKHJlZCAgIDw8IGZiX2luZm8tPnZhci5yZWQub2Zmc2V0KSAgIHwKKwkJCQkocmVkICAgPDwgZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKIAkJCQkoZ3JlZW4gPDwgZmJfaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAogCQkJCShibHVlICA8PCBmYl9pbmZvLT52YXIuYmx1ZS5vZmZzZXQpOwogCQkJYnJlYWs7CkBAIC01OTcsMjUgKzUyNCwyNCBAQAogc3RhdGljIHZvaWQgX19pbml0IG1hY2ZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCiB7CiAJY2hhciAqdGhpc19vcHQ7Ci0JCisKIAlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQogCQlyZXR1cm47Ci0JCisKIAl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7Ci0JCWlmICghKnRoaXNfb3B0KSBjb250aW51ZTsKLQkJCi0JCWlmICghIHN0cmNtcCh0aGlzX29wdCwgImludmVyc2UiKSkKLQkJCWludmVyc2U9MTsKLQkJLyogVGhpcyBtZWFucyAidHVybiBvbiBleHBlcmltZW50YWwgQ0xVVCBjb2RlIiAqLwotCQllbHNlIGlmICghc3RyY21wKHRoaXNfb3B0LCAidmlkdGVzdCIpKQotCQkJdmlkdGVzdD0xOworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RyY21wKHRoaXNfb3B0LCAiaW52ZXJzZSIpKQorCQkJaW52ZXJzZSA9IDE7CisJCWVsc2UKKwkJCWlmICghc3RyY21wKHRoaXNfb3B0LCAidmlkdGVzdCIpKQorCQkJCXZpZHRlc3QgPSAxOyAvKiBlbmFibGUgZXhwZXJpbWVudGFsIENMVVQgY29kZSAqLwogCX0KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGlvdW5tYXBfbWFjZmIodm9pZCkKIHsKLQlpZiAodmFsa3lyaWVfY21hcF9yZWdzKQotCQlpb3VubWFwKHZhbGt5cmllX2NtYXBfcmVncyk7CiAJaWYgKGRhZmJfY21hcF9yZWdzKQogCQlpb3VubWFwKGRhZmJfY21hcF9yZWdzKTsKIAlpZiAodjhfYnJhemlsX2NtYXBfcmVncykKQEAgLTY0Miw0OCArNTY4LDU1IEBACiAJaWYgKCFNQUNIX0lTX01BQykgCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogVGhlcmUgY2FuIG9ubHkgYmUgb25lIGludGVybmFsIHZpZGVvIGNvbnRyb2xsZXIgYW55d2F5IHNvCi0JICAgd2UncmUgbm90IHRvbyB3b3JyaWVkIGFib3V0IHRoaXMgKi8KKwlpZiAobWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1E2MzAgfHwKKwkgICAgbWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1A1ODgpCisJCXJldHVybiAtRU5PREVWOyAvKiBTZWUgdmFsa3lyaWVmYi5jICovCisKIAltYWNmYl9kZWZpbmVkLnhyZXMgPSBtYWNfYmlfZGF0YS5kaW1lbnNpb25zICYgMHhGRkZGOwogCW1hY2ZiX2RlZmluZWQueXJlcyA9IG1hY19iaV9kYXRhLmRpbWVuc2lvbnMgPj4gMTY7CiAJbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCA9IG1hY19iaV9kYXRhLnZpZGVvZGVwdGg7CisKIAltYWNmYl9maXgubGluZV9sZW5ndGggPSBtYWNfYmlfZGF0YS52aWRlb3JvdzsKLQltYWNmYl9maXguc21lbV9sZW4gPSBtYWNmYl9maXgubGluZV9sZW5ndGggKiBtYWNmYl9kZWZpbmVkLnlyZXM7CisJbWFjZmJfZml4LnNtZW1fbGVuICAgID0gbWFjZmJfZml4LmxpbmVfbGVuZ3RoICogbWFjZmJfZGVmaW5lZC55cmVzOwogCS8qIE5vdGU6IHBoeXNpY2FsIGFkZHJlc3MgKHNpbmNlIDIuMS4xMjcpICovCi0JbWFjZmJfZml4LnNtZW1fc3RhcnQgPSBtYWNfYmlfZGF0YS52aWRlb2FkZHI7Ci0JLyogVGhpcyBpcyBhY3R1YWxseSByZWR1bmRhbnQgd2l0aCB0aGUgaW5pdGlhbCBtYXBwaW5ncy4KLQkgICBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBub24tb2J2aW91cyBhc3BlY3RzIHRvIHRoZSB3YXkKLQkgICB0aG9zZSBtYXBwaW5ncyBhcmUgc2V0IHVwLCBzbyB0aGlzIGlzIGluIGZhY3QgdGhlIHNhZmVzdAotCSAgIHdheSB0byBlbnN1cmUgdGhhdCB0aGlzIGRyaXZlciB3aWxsIHdvcmsgb24gZXZlcnkgcG9zc2libGUKLQkgICBNYWMgKi8KLQlmYl9pbmZvLnNjcmVlbl9iYXNlID0gaW9yZW1hcChtYWNfYmlfZGF0YS52aWRlb2FkZHIsIG1hY2ZiX2ZpeC5zbWVtX2xlbik7Ci0JCi0JcHJpbnRrKCJtYWNmYjogZnJhbWVidWZmZXIgYXQgMHglMDhseCwgbWFwcGVkIHRvIDB4JXAsIHNpemUgJWRrXG4iLAotCSAgICAgICBtYWNmYl9maXguc21lbV9zdGFydCwgZmJfaW5mby5zY3JlZW5fYmFzZSwgbWFjZmJfZml4LnNtZW1fbGVuLzEwMjQpOwotCXByaW50aygibWFjZmI6IG1vZGUgaXMgJWR4JWR4JWQsIGxpbmVsZW5ndGg9JWRcbiIsCi0JICAgICAgIG1hY2ZiX2RlZmluZWQueHJlcywgbWFjZmJfZGVmaW5lZC55cmVzLCBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsLCBtYWNmYl9maXgubGluZV9sZW5ndGgpOwotCQorCW1hY2ZiX2ZpeC5zbWVtX3N0YXJ0ICA9IG1hY19iaV9kYXRhLnZpZGVvYWRkcjsKKwogCS8qCi0JICoJRmlsbCBpbiB0aGUgYXZhaWxhYmxlIHZpZGVvIHJlc29sdXRpb24KKwkgKiBUaGlzIGlzIGFjdHVhbGx5IHJlZHVuZGFudCB3aXRoIHRoZSBpbml0aWFsIG1hcHBpbmdzLgorCSAqIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIG5vbi1vYnZpb3VzIGFzcGVjdHMgdG8gdGhlIHdheQorCSAqIHRob3NlIG1hcHBpbmdzIGFyZSBzZXQgdXAsIHNvIHRoaXMgaXMgaW4gZmFjdCB0aGUgc2FmZXN0CisJICogd2F5IHRvIGVuc3VyZSB0aGF0IHRoaXMgZHJpdmVyIHdpbGwgd29yayBvbiBldmVyeSBwb3NzaWJsZSBNYWMKIAkgKi8KLQkgCi0JbWFjZmJfZGVmaW5lZC54cmVzX3ZpcnR1YWwgICA9IG1hY2ZiX2RlZmluZWQueHJlczsKLQltYWNmYl9kZWZpbmVkLnlyZXNfdmlydHVhbCAgID0gbWFjZmJfZGVmaW5lZC55cmVzOwotCW1hY2ZiX2RlZmluZWQuaGVpZ2h0ID0gUElYRUxfVE9fTU0obWFjZmJfZGVmaW5lZC55cmVzKTsKLQltYWNmYl9kZWZpbmVkLndpZHRoICA9IFBJWEVMX1RPX01NKG1hY2ZiX2RlZmluZWQueHJlcyk7CSAKKwlmYl9pbmZvLnNjcmVlbl9iYXNlID0gaW9yZW1hcChtYWNfYmlfZGF0YS52aWRlb2FkZHIsCisJCQkJICAgICAgbWFjZmJfZml4LnNtZW1fbGVuKTsKKwlpZiAoIWZiX2luZm8uc2NyZWVuX2Jhc2UpCisJCXJldHVybiAtRU5PREVWOwogCi0JcHJpbnRrKCJtYWNmYjogc2Nyb2xsaW5nOiByZWRyYXdcbiIpOworCXByaW50aygibWFjZmI6IGZyYW1lYnVmZmVyIGF0IDB4JTA4bHgsIG1hcHBlZCB0byAweCVwLCBzaXplICVka1xuIiwKKwkgICAgICAgbWFjZmJfZml4LnNtZW1fc3RhcnQsIGZiX2luZm8uc2NyZWVuX2Jhc2UsCisJICAgICAgIG1hY2ZiX2ZpeC5zbWVtX2xlbiAvIDEwMjQpOworCXByaW50aygibWFjZmI6IG1vZGUgaXMgJWR4JWR4JWQsIGxpbmVsZW5ndGg9JWRcbiIsCisJICAgICAgIG1hY2ZiX2RlZmluZWQueHJlcywgbWFjZmJfZGVmaW5lZC55cmVzLAorCSAgICAgICBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsLCBtYWNmYl9maXgubGluZV9sZW5ndGgpOworCisJLyogRmlsbCBpbiB0aGUgYXZhaWxhYmxlIHZpZGVvIHJlc29sdXRpb24gKi8KKwltYWNmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCA9IG1hY2ZiX2RlZmluZWQueHJlczsKIAltYWNmYl9kZWZpbmVkLnlyZXNfdmlydHVhbCA9IG1hY2ZiX2RlZmluZWQueXJlczsKKwltYWNmYl9kZWZpbmVkLmhlaWdodCAgICAgICA9IFBJWEVMX1RPX01NKG1hY2ZiX2RlZmluZWQueXJlcyk7CisJbWFjZmJfZGVmaW5lZC53aWR0aCAgICAgICAgPSBQSVhFTF9UT19NTShtYWNmYl9kZWZpbmVkLnhyZXMpOwogCi0JLyogc29tZSBkdW1teSB2YWx1ZXMgZm9yIHRpbWluZyB0byBtYWtlIGZic2V0IGhhcHB5ICovCi0JbWFjZmJfZGVmaW5lZC5waXhjbG9jayAgICAgPSAxMDAwMDAwMCAvIG1hY2ZiX2RlZmluZWQueHJlcyAqIDEwMDAgLyBtYWNmYl9kZWZpbmVkLnlyZXM7CisJLyogU29tZSBkdW1teSB2YWx1ZXMgZm9yIHRpbWluZyB0byBtYWtlIGZic2V0IGhhcHB5ICovCisJbWFjZmJfZGVmaW5lZC5waXhjbG9jayAgICAgPSAxMDAwMDAwMCAvIG1hY2ZiX2RlZmluZWQueHJlcyAqCisJCQkJICAgICAxMDAwIC8gbWFjZmJfZGVmaW5lZC55cmVzOwogCW1hY2ZiX2RlZmluZWQubGVmdF9tYXJnaW4gID0gKG1hY2ZiX2RlZmluZWQueHJlcyAvIDgpICYgMHhmODsKIAltYWNmYl9kZWZpbmVkLmhzeW5jX2xlbiAgICA9IChtYWNmYl9kZWZpbmVkLnhyZXMgLyA4KSAmIDB4Zjg7CiAKIAlzd2l0Y2ggKG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDE6Ci0JCS8qIFhYWDogSSB0aGluayB0aGlzIHdpbGwgY2F0Y2ggYW55IHByb2dyYW0gdGhhdCB0cmllcwotCQkgICB0byBkbyBGQklPX1BVVENNQVAgd2hlbiB0aGUgdmlzdWFsIGlzIG1vbm9jaHJvbWUgKi8KKwkJLyoKKwkJICogWFhYOiBJIHRoaW5rIHRoaXMgd2lsbCBjYXRjaCBhbnkgcHJvZ3JhbSB0aGF0IHRyaWVzCisJCSAqIHRvIGRvIEZCSU9fUFVUQ01BUCB3aGVuIHRoZSB2aXN1YWwgaXMgbW9ub2Nocm9tZS4KKwkJICovCiAJCW1hY2ZiX2RlZmluZWQucmVkLmxlbmd0aCA9IG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWw7CiAJCW1hY2ZiX2RlZmluZWQuZ3JlZW4ubGVuZ3RoID0gbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbDsKIAkJbWFjZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCA9IG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWw7CkBAIC03MDgsNTMgKzY0MSw1MiBAQAogCQltYWNmYl9kZWZpbmVkLmdyZWVuLmxlbmd0aCA9IDU7CiAJCW1hY2ZiX2RlZmluZWQuYmx1ZS5vZmZzZXQgPSAwOwogCQltYWNmYl9kZWZpbmVkLmJsdWUubGVuZ3RoID0gNTsKLQkJcHJpbnRrKCJtYWNmYjogZGlyZWN0Y29sb3I6ICIKLQkJICAgICAgICJzaXplPTE6NTo1OjUsIHNoaWZ0PTE1OjEwOjU6MFxuIik7CiAJCXZpZGVvX2NtYXBfbGVuID0gMTY7Ci0JCS8qIFNob3VsZCBhY3R1YWxseSBiZSBGQl9WSVNVQUxfRElSRUNUQ09MT1IsIGJ1dCB0aGlzCi0JCSAgIHdvcmtzIHRvbyAqLworCQkvKgorCQkgKiBTaG91bGQgYWN0dWFsbHkgYmUgRkJfVklTVUFMX0RJUkVDVENPTE9SLCBidXQgdGhpcworCQkgKiB3b3JrcyB0b28KKwkJICovCiAJCW1hY2ZiX2ZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwogCQlicmVhazsKIAljYXNlIDI0OgogCWNhc2UgMzI6Ci0JCS8qIFhYWDogaGF2ZSB0byB0ZXN0IHRoZXNlLi4uIGNhbiBhbnkgNjhrIE1hY3MKLQkJICAgYWN0dWFsbHkgZG8gdGhpcyBvbiBpbnRlcm5hbCB2aWRlbz8gKi8KIAkJbWFjZmJfZGVmaW5lZC5yZWQub2Zmc2V0ID0gMTY7CiAJCW1hY2ZiX2RlZmluZWQucmVkLmxlbmd0aCA9IDg7CiAJCW1hY2ZiX2RlZmluZWQuZ3JlZW4ub2Zmc2V0ID0gODsKIAkJbWFjZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSA4OwogCQltYWNmYl9kZWZpbmVkLmJsdWUub2Zmc2V0ID0gMDsKIAkJbWFjZmJfZGVmaW5lZC5ibHVlLmxlbmd0aCA9IDg7Ci0JCXByaW50aygibWFjZmI6IHRydWVjb2xvcjogIgotCQkgICAgICAgInNpemU9MDo4Ojg6OCwgc2hpZnQ9MDoxNjo4OjBcbiIpOwogCQl2aWRlb19jbWFwX2xlbiA9IDE2OwogCQltYWNmYl9maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdmlkZW9fY21hcF9sZW4gPSAwOwogCQltYWNmYl9maXgudmlzdWFsID0gRkJfVklTVUFMX01PTk8wMTsKLQkJcHJpbnRrKCJtYWNmYjogdW5rbm93biBvciB1bnN1cHBvcnRlZCBiaXQgZGVwdGg6ICVkXG4iLCBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsKTsKKwkJcHJpbnRrKCJtYWNmYjogdW5rbm93biBvciB1bnN1cHBvcnRlZCBiaXQgZGVwdGg6ICVkXG4iLAorCQkgICAgICAgbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCk7CiAJCWJyZWFrOwogCX0KIAkKLQkvKiBIYXJkd2FyZSBkZXBlbmRlbnQgc3R1ZmYgKi8KLQkvKiAgV2UgdGFrZSBhIHdpbGQgZ3Vlc3MgdGhhdCBpZiB0aGUgdmlkZW8gcGh5c2ljYWwgYWRkcmVzcyBpcwotCSAqICBpbiBudWJ1cyBzbG90IHNwYWNlLCB0aGF0IHRoZSBudWJ1cyBjYXJkIGlzIGRyaXZpbmcgdmlkZW8uCi0JICogIFBlbmd1aW4gcmVhbGx5IG91Z2h0IHRvIHRlbGwgdXMgd2hldGhlciB3ZSBhcmUgdXNpbmcgaW50ZXJuYWwKLQkgKiAgdmlkZW8gb3Igbm90LgorCS8qCisJICogV2UgdGFrZSBhIHdpbGQgZ3Vlc3MgdGhhdCBpZiB0aGUgdmlkZW8gcGh5c2ljYWwgYWRkcmVzcyBpcworCSAqIGluIG51YnVzIHNsb3Qgc3BhY2UsIHRoYXQgdGhlIG51YnVzIGNhcmQgaXMgZHJpdmluZyB2aWRlby4KKwkgKiBQZW5ndWluIHJlYWxseSBvdWdodCB0byB0ZWxsIHVzIHdoZXRoZXIgd2UgYXJlIHVzaW5nIGludGVybmFsCisJICogdmlkZW8gb3Igbm90LgorCSAqIEhvcGVmdWxseSB3ZSBvbmx5IGZpbmQgb25lIG9mIHRoZW0uICBPdGhlcndpc2Ugb3VyIE51QnVzCisJICogY29kZSBpcyByZWFsbHkgYnJva2VuIDotKQogCSAqLwotCS8qIEhvcGVmdWxseSB3ZSBvbmx5IGZpbmQgb25lIG9mIHRoZW0uICBPdGhlcndpc2Ugb3VyIE51QnVzCi0gICAgICAgICAgIGNvZGUgaXMgcmVhbGx5IGJyb2tlbiA6LSkgKi8KIAotCXdoaWxlICgobmRldiA9IG51YnVzX2ZpbmRfdHlwZShOVUJVU19DQVRfRElTUExBWSwgTlVCVVNfVFlQRV9WSURFTywgbmRldikpCi0JCSE9IE5VTEwpCisJd2hpbGUgKChuZGV2ID0gbnVidXNfZmluZF90eXBlKE5VQlVTX0NBVF9ESVNQTEFZLAorCQkJCSAgICAgICBOVUJVU19UWVBFX1ZJREVPLCBuZGV2KSkpCiAJewotCQlpZiAoIShtYWNfYmlfZGF0YS52aWRlb2FkZHIgPj0gbmRldi0+Ym9hcmQtPnNsb3RfYWRkcgotCQkgICAgICAmJiAobWFjX2JpX2RhdGEudmlkZW9hZGRyIDwKLQkJCSAgKHVuc2lnbmVkIGxvbmcpbnVidXNfc2xvdF9hZGRyKG5kZXYtPmJvYXJkLT5zbG90KzEpKSkpCisJCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG5kZXYtPmJvYXJkLT5zbG90X2FkZHI7CisKKwkJaWYgKG1hY19iaV9kYXRhLnZpZGVvYWRkciA8IGJhc2UgfHwKKwkJICAgIG1hY19iaV9kYXRhLnZpZGVvYWRkciAtIGJhc2UgPiAweEZGRkZGRikKIAkJCWNvbnRpbnVlOworCiAJCXZpZGVvX2lzX251YnVzID0gMTsKLQkJLyogV2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgdXNlIHRoZSBzbG90IGFkZHJlc3MuLi4gKi8KLQkJdmlkZW9fc2xvdCA9IG5kZXYtPmJvYXJkLT5zbG90OworCQlzbG90X2FkZHIgPSAodW5zaWduZWQgY2hhciAqKWJhc2U7CiAKIAkJc3dpdGNoKG5kZXYtPmRyX2h3KSB7CiAJCWNhc2UgTlVCVVNfRFJIV19BUFBMRV9NREM6CkBAIC03NzEsNyArNzAzLDcgQEAKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJKZXQiKTsKIAkJCW1hY2ZiX3NldHBhbGV0dGUgPSBqZXRfc2V0cGFsZXR0ZTsKIAkJCW1hY2ZiX2RlZmluZWQuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7Ci0JCQlicmVhazsJCQkKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkdlbmVyaWMgTnVCdXMiKTsKIAkJCWJyZWFrOwpAQCAtNzc5LDMwICs3MTEsMTkgQEAKIAl9CiAKIAkvKiBJZiBpdCdzIG5vdCBhIE51QnVzIGNhcmQsIGl0IG11c3QgYmUgaW50ZXJuYWwgdmlkZW8gKi8KLQkvKiBGSVhNRTogdGhpcyBmdW5jdGlvbiBpcyBnZXR0aW5nIHdheSB0b28gYmlnLiAgKHRoaXMgZHJpdmVyCi0gICAgICAgICAgIGlzIHRvby4uLikgKi8KIAlpZiAoIXZpZGVvX2lzX251YnVzKQotCQlzd2l0Y2goIG1hY19iaV9kYXRhLmlkICkKLQkJewotCQkJLyogVmFsa3lyaWUgUXVhZHJhcyAqLwotCQljYXNlIE1BQ19NT0RFTF9RNjMwOgotCQkJLyogSSdtIG5vdCBzdXJlIGFib3V0IHRoaXMgb25lICovCi0JCWNhc2UgTUFDX01PREVMX1A1ODg6Ci0JCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiVmFsa3lyaWUiKTsKLQkJCW1hY2ZiX3NldHBhbGV0dGUgPSB2YWxreXJpZV9zZXRwYWxldHRlOwotCQkJbWFjZmJfZGVmaW5lZC5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKLQkJCXZhbGt5cmllX2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7Ci0JCQlicmVhazsKLQotCQkJLyogREFGQiBRdWFkcmFzICovCi0JCQkvKiBOb3RlOiB0aGVzZSBmaXJzdCBmb3VyIGhhdmUgdGhlIHY3IERBRkIsIHdoaWNoIGlzCi0JCQkgICBrbm93biB0byBiZSByYXRoZXIgdW5saWtlIHRoZSBvbmVzIHVzZWQgaW4gdGhlCi0JCQkgICBvdGhlciBtb2RlbHMgKi8KKwkJc3dpdGNoIChtYWNfYmlfZGF0YS5pZCkgeworCQkvKgorCQkgKiBEQUZCIFF1YWRyYXMKKwkJICogTm90ZTogdGhlc2UgZmlyc3QgZm91ciBoYXZlIHRoZSB2NyBEQUZCLCB3aGljaCBpcworCQkgKiBrbm93biB0byBiZSByYXRoZXIgdW5saWtlIHRoZSBvbmVzIHVzZWQgaW4gdGhlCisJCSAqIG90aGVyIG1vZGVscworCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUDQ3NToKIAkJY2FzZSBNQUNfTU9ERUxfUDQ3NUY6CiAJCWNhc2UgTUFDX01PREVMX1A1NzU6CiAJCWNhc2UgTUFDX01PREVMX1E2MDU6Ci0JCisKIAkJY2FzZSBNQUNfTU9ERUxfUTgwMDoKIAkJY2FzZSBNQUNfTU9ERUxfUTY1MDoKIAkJY2FzZSBNQUNfTU9ERUxfUTYxMDoKQEAgLTgxNywxNyArNzM4LDIxIEBACiAJCQlkYWZiX2NtYXBfcmVncyA9IGlvcmVtYXAoREFGQl9CQVNFLCAweDEwMDApOwogCQkJYnJlYWs7CiAKLQkJCS8qIExDIElJIHVzZXMgdGhlIFY4IGZyYW1lYnVmZmVyICovCisJCS8qCisJCSAqIExDIElJIHVzZXMgdGhlIFY4IGZyYW1lYnVmZmVyCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9MQ0lJOgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIlY4Iik7CiAJCQltYWNmYl9zZXRwYWxldHRlID0gdjhfYnJhemlsX3NldHBhbGV0dGU7CiAJCQltYWNmYl9kZWZpbmVkLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwogCQkJdjhfYnJhemlsX2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKLQkJCi0JCQkvKiBJSXZpLCBJSXZ4IHVzZSB0aGUgIkJyYXppbCIgZnJhbWVidWZmZXIgKHdoaWNoIGlzCi0JCQkgICB2ZXJ5IG11Y2ggbGlrZSB0aGUgVjgsIGl0IHNlZW1zLCBhbmQgcHJvYmFibHkgdXNlcwotCQkJICAgdGhlIHNhbWUgREFDKSAqLworCisJCS8qCisJCSAqIElJdmksIElJdnggdXNlIHRoZSAiQnJhemlsIiBmcmFtZWJ1ZmZlciAod2hpY2ggaXMKKwkJICogdmVyeSBtdWNoIGxpa2UgdGhlIFY4LCBpdCBzZWVtcywgYW5kIHByb2JhYmx5IHVzZXMKKwkJICogdGhlIHNhbWUgREFDKQorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfSUlWSToKIAkJY2FzZSBNQUNfTU9ERUxfSUlWWDoKIAkJY2FzZSBNQUNfTU9ERUxfUDYwMDoKQEAgLTgzNiwxMiArNzYxLDE0IEBACiAJCQltYWNmYl9kZWZpbmVkLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwogCQkJdjhfYnJhemlsX2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKLQkJCi0JCQkvKiBMQyBJSUkgKGFuZCBmcmllbmRzKSB1c2UgdGhlIFNvbm9yYSBmcmFtZWJ1ZmZlciAqLwotCQkJLyogSW5jaWRlbnRhbGx5IHRoaXMgaXMgYWxzbyB1c2VkIGluIHRoZSBub24tQVYgbW9kZWxzCi0JCQkgICBvZiB0aGUgeDEwMCBQb3dlck1hY3MgKi8KLQkJCS8qIFRoZXNlIGRvIGluIGZhY3Qgc2VlbSB0byB1c2UgdGhlIHNhbWUgREFDIGludGVyZmFjZQotCQkJICAgYXMgdGhlIExDIElJLiAqLworCisJCS8qCisJCSAqIExDIElJSSAoYW5kIGZyaWVuZHMpIHVzZSB0aGUgU29ub3JhIGZyYW1lYnVmZmVyCisJCSAqIEluY2lkZW50YWxseSB0aGlzIGlzIGFsc28gdXNlZCBpbiB0aGUgbm9uLUFWIG1vZGVscworCQkgKiBvZiB0aGUgeDEwMCBQb3dlck1hY3MKKwkJICogVGhlc2UgZG8gaW4gZmFjdCBzZWVtIHRvIHVzZSB0aGUgc2FtZSBEQUMgaW50ZXJmYWNlCisJCSAqIGFzIHRoZSBMQyBJSS4KKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0xDSUlJOgogCQljYXNlIE1BQ19NT0RFTF9QNTIwOgogCQljYXNlIE1BQ19NT0RFTF9QNTUwOgpAQCAtODUyLDkgKzc3OSwxMSBAQAogCQkJdjhfYnJhemlsX2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKIAotCQkJLyogSUljaSBhbmQgSUlzaSB1c2UgdGhlIGluZmFtb3VzIFJCViBjaGlwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodGhlIElJc2kgaXMganVzdCBhIHJlYmFkZ2VkIGFuZCBjcmlwcGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgSUljaSBpbiBhIGRpZmZlcmVudCBjYXNlLCBCVFcpICovCisJCS8qCisJCSAqIElJY2kgYW5kIElJc2kgdXNlIHRoZSBpbmZhbW91cyBSQlYgY2hpcAorCQkgKiAodGhlIElJc2kgaXMganVzdCBhIHJlYmFkZ2VkIGFuZCBjcmlwcGxlZAorCQkgKiBJSWNpIGluIGEgZGlmZmVyZW50IGNhc2UsIEJUVykKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0lJQ0k6CiAJCWNhc2UgTUFDX01PREVMX0lJU0k6CiAJCQltYWNmYl9zZXRwYWxldHRlID0gcmJ2X3NldHBhbGV0dGU7CkBAIC04NjMsNyArNzkyLDkgQEAKIAkJCXJidl9jbWFwX3JlZ3MgPSBpb3JlbWFwKERBQ19CQVNFLCAweDEwMDApOwogCQkJYnJlYWs7CiAKLQkJCS8qIEFWcyB1c2UgdGhlIENpdmljIGZyYW1lYnVmZmVyICovCisJCS8qCisJCSAqIEFWcyB1c2UgdGhlIENpdmljIGZyYW1lYnVmZmVyCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9RODQwOgogCQljYXNlIE1BQ19NT0RFTF9DNjYwOgogCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IGNpdmljX3NldHBhbGV0dGU7CkBAIC04NzMsMTUgKzgwNCwxMCBAQAogCQkJYnJlYWs7CiAKIAkJCi0JCQkvKiBXcml0ZSBhIHNldHBhbGV0dGUgZnVuY3Rpb24gZm9yIHlvdXIgbWFjaGluZSwgdGhlbgotCQkJICAgeW91IGNhbiBhZGQgc29tZXRoaW5nIHNpbWlsYXIgaGVyZS4gIFRoZXNlIGFyZQotCQkJICAgZ3JvdXBlZCBieSBjbGFzc2VzIG9mIHZpZGVvIGNoaXBzZXRzLiAgU29tZSBvZiB0aGlzCi0JCQkgICBpbmZvcm1hdGlvbiBpcyBmcm9tIHRoZSBWaWRlb1Rvb2xib3ggIkJ1Z3MiIHdlYgotCQkJICAgcGFnZSBhdAotCQkJICAgaHR0cDovL3JhanNreS5wc3ljaC5ueXUuZWR1L1RpcHMvVmlkZW9CdWdzLmh0bWwgKi8KLQotCQkJLyogQXNzb3J0ZWQgd2VpcmRvcyAqLwotCQkJLyogV2UgdGhpbmsgdGhpcyBtYXkgYmUgbGlrZSB0aGUgTEMgSUkgKi8KKwkJLyoKKwkJICogQXNzb3J0ZWQgd2VpcmRvcworCQkgKiBXZSB0aGluayB0aGlzIG1heSBiZSBsaWtlIHRoZSBMQyBJSQorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfTEM6CiAJCQlpZiAodmlkdGVzdCkgewogCQkJCW1hY2ZiX3NldHBhbGV0dGUgPSB2OF9icmF6aWxfc2V0cGFsZXR0ZTsKQEAgLTg5MSw3ICs4MTcsMTAgQEAKIAkJCX0KIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJMQyIpOwogCQkJYnJlYWs7Ci0JCQkvKiBXZSB0aGluayB0aGlzIG1heSBiZSBsaWtlIHRoZSBMQyBJSSAqLworCisJCS8qCisJCSAqIFdlIHRoaW5rIHRoaXMgbWF5IGJlIGxpa2UgdGhlIExDIElJCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9DQ0w6CiAJCQlpZiAodmlkdGVzdCkgewogCQkJCW1hY2ZiX3NldHBhbGV0dGUgPSB2OF9icmF6aWxfc2V0cGFsZXR0ZTsKQEAgLTkwMiwzMSArODMxLDQyIEBACiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiQ29sb3IgQ2xhc3NpYyIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIEFuZCB3ZSAqZG8qIG1lYW4gIndlaXJkb3MiICovCisJCS8qCisJCSAqIEFuZCB3ZSAqZG8qIG1lYW4gIndlaXJkb3MiCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9UVjoKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJNYWMgVFYiKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBUaGVzZSBkb24ndCBoYXZlIGNvbG91ciwgc28gbm8gbmVlZCB0byB3b3JyeSAqLworCQkvKgorCQkgKiBUaGVzZSBkb24ndCBoYXZlIGNvbG91ciwgc28gbm8gbmVlZCB0byB3b3JyeQorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfU0UzMDoKIAkJY2FzZSBNQUNfTU9ERUxfQ0xJSToKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJNb25vY2hyb21lIik7CiAJCQlicmVhazsKIAotCQkJLyogUG93ZXJib29rcyBhcmUgcGFydGljdWxhcmx5IGRpZmZpY3VsdC4gIE1hbnkgb2YKLQkJCSAgIHRoZW0gaGF2ZSBzZXBhcmF0ZSBmcmFtZWJ1ZmZlcnMgZm9yIGV4dGVybmFsIGFuZAotCQkJICAgaW50ZXJuYWwgdmlkZW8sIHdoaWNoIGlzIGFkbWl0dGVkbHkgcHJldHR5IGNvb2wsCi0JCQkgICBidXQgd2lsbCBiZSBhIGJpdCBvZiBhIGhlYWRhY2hlIHRvIHN1cHBvcnQgaGVyZS4KLQkJCSAgIEFsc28sIG1hbnkgb2YgdGhlbSBhcmUgZ3JheXNjYWxlLCBhbmQgd2UgZG9uJ3QKLQkJCSAgIHJlYWxseSBzdXBwb3J0IHRoYXQuICovCisJCS8qCisJCSAqIFBvd2VyYm9va3MgYXJlIHBhcnRpY3VsYXJseSBkaWZmaWN1bHQuICBNYW55IG9mCisJCSAqIHRoZW0gaGF2ZSBzZXBhcmF0ZSBmcmFtZWJ1ZmZlcnMgZm9yIGV4dGVybmFsIGFuZAorCQkgKiBpbnRlcm5hbCB2aWRlbywgd2hpY2ggaXMgYWRtaXR0ZWRseSBwcmV0dHkgY29vbCwKKwkJICogYnV0IHdpbGwgYmUgYSBiaXQgb2YgYSBoZWFkYWNoZSB0byBzdXBwb3J0IGhlcmUuCisJCSAqIEFsc28sIG1hbnkgb2YgdGhlbSBhcmUgZ3JheXNjYWxlLCBhbmQgd2UgZG9uJ3QKKwkJICogcmVhbGx5IHN1cHBvcnQgdGhhdC4KKwkJICovCiAKKwkJLyoKKwkJICogU2xvdCAwIFJPTSBzYXlzIFRJTS4gTm8gZXh0ZXJuYWwgdmlkZW8uIEImVy4KKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1BCMTQwOgogCQljYXNlIE1BQ19NT0RFTF9QQjE0NToKIAkJY2FzZSBNQUNfTU9ERUxfUEIxNzA6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiRERDIik7CiAJCQlicmVhazsKIAotCQkJLyogSW50ZXJuYWwgaXMgR1NDLCBFeHRlcm5hbCAoaWYgcHJlc2VudCkgaXMgVmlTQyAqLworCQkvKgorCQkgKiBJbnRlcm5hbCBpcyBHU0MsIEV4dGVybmFsIChpZiBwcmVzZW50KSBpcyBWaVNDCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjE1MDoJLyogbm8gZXh0ZXJuYWwgdmlkZW8gKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEIxNjA6CiAJCWNhc2UgTUFDX01PREVMX1BCMTY1OgpAQCAtOTM2LDEzICs4NzYsMTcgQEAKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJHU0MiKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBJbnRlcm5hbCBpcyBUSU0sIEV4dGVybmFsIGlzIFZpU0MgKi8KKwkJLyoKKwkJICogSW50ZXJuYWwgaXMgVElNLCBFeHRlcm5hbCBpcyBWaVNDCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjE2NUM6CiAJCWNhc2UgTUFDX01PREVMX1BCMTgwQzoKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJUSU0iKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBJbnRlcm5hbCBpcyBDU0MsIEV4dGVybmFsIGlzIEtleXN0b25lK0FyaWVsLiAqLworCQkvKgorCQkgKiBJbnRlcm5hbCBpcyBDU0MsIEV4dGVybmFsIGlzIEtleXN0b25lK0FyaWVsLgorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEIxOTA6CS8qIGV4dGVybmFsIHZpZGVvIGlzIG9wdGlvbmFsICovCiAJCWNhc2UgTUFDX01PREVMX1BCNTIwOgogCQljYXNlIE1BQ19NT0RFTF9QQjI1MDoKQEAgLTk1NCw3ICs4OTgsNyBAQAogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkNTQyIpOwogCQkJY3NjX2NtYXBfcmVncyA9IGlvcmVtYXAoQ1NDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKLQkJCisKIAkJZGVmYXVsdDoKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJVbmtub3duIik7CiAJCQlicmVhazsKQEAgLTk2OSw3ICs5MTMsNyBAQAogCWVyciA9IGZiX2FsbG9jX2NtYXAoJmZiX2luZm8uY21hcCwgdmlkZW9fY21hcF9sZW4sIDApOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbF91bm1hcDsKLQkKKwogCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWxfZGVhbGxvYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWFjbW9kZXMuYyBiL2RyaXZlcnMvdmlkZW8vbWFjbW9kZXMuYwppbmRleCAwODNmNjAzLi5hZjg2YzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hY21vZGVzLmMKKysrIGIvZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jCkBAIC0zMyw2ICszMywxMCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBtYWNfbW9kZWRiW10gPSB7CiAgICAgeworCS8qIDUxMngzODQsIDYwSHosIE5vbi1JbnRlcmxhY2VkICgxNS42NyBNSHogZG90IGNsb2NrKSAqLworCSJtYWMyIiwgNjAsIDUxMiwgMzg0LCA2MzgyOCwgODAsIDE2LCAxOSwgMSwgMzIsIDMsCisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAorICAgIH0sIHsKIAkvKiA2NDB4NDgwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDI1LjE3NSBNSHogZG90Y2xvY2spICovCiAJIm1hYzUiLCA2MCwgNjQwLCA0ODAsIDM5NzIyLCAzMiwgMzIsIDMzLCAxMCwgOTYsIDIsCiAJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRApAQCAtNDEsNiArNDUsMTAgQEAKIAkibWFjNiIsIDY3LCA2NDAsIDQ4MCwgMzMzMzQsIDgwLCA4MCwgMzksIDMsIDY0LCAzLAogCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKICAgICB9LCB7CisJLyogNjQweDg3MCwgNzVIeiAocG9ydHJhaXQpLCBOb24tSW50ZXJsYWNlZCAoNTcuMjggTUh6IGRvdCBjbG9jaykgKi8KKwkibWFjNyIsIDc1LCA2NDAsIDg3MCwgMTc0NTcsIDgwLCAzMiwgNDIsIDMsIDgwLCAzLAorCTAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKKyAgICB9LCB7CiAJLyogODAweDYwMCwgNTYgSHosIE5vbi1JbnRlcmxhY2VkICgzNi4wMCBNSHogZG90Y2xvY2spICovCiAJIm1hYzkiLCA1NiwgODAwLCA2MDAsIDI3Nzc4LCAxMTIsIDQwLCAyMiwgMSwgNzIsIDIsCiAJRkJfU1lOQ19IT1JfSElHSF9BQ1R8RkJfU1lOQ19WRVJUX0hJR0hfQUNULCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECkBAIC0xMDUsMTAgKzExMyw2IEBACiAJIm1hYzEiLCA2MCwgNTEyLCAzODQsIHBpeGNsb2NrLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sCiAJc3luYywgRkJfVk1PREVfSU5URVJMQUNFRAogICAgIH0sIHsKLQkvKiBWTU9ERV81MTJfMzg0XzYwOiA1MTJ4Mzg0LCA2MEh6LCBOb24tSW50ZXJsYWNlZCAqLwotICAgIAkibWFjMiIsIDYwLCA1MTIsIDM4NCwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKLQlzeW5jLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECi0gICAgfSwgewogCS8qIFZNT0RFXzY0MF80ODBfNTBJOiA2NDB4NDgwLCA1MEh6LCBJbnRlcmxhY2VkIChQQUwpICovCiAJIm1hYzMiLCA1MCwgNjQwLCA0ODAsIHBpeGNsb2NrLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sCiAJc3luYywgRkJfVk1PREVfSU5URVJMQUNFRApAQCAtMTE3LDEwICsxMjEsNiBAQAogCSJtYWM0IiwgNjAsIDY0MCwgNDgwLCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAogCXN5bmMsIEZCX1ZNT0RFX0lOVEVSTEFDRUQKICAgICB9LCB7Ci0JLyogVk1PREVfNjQwXzg3MF83NVA6IDY0MHg4NzAsIDc1SHogKHBvcnRyYWl0KSwgTm9uLUludGVybGFjZWQgKi8KLQkibWFjNyIsIDc1LCA2NDAsIDg3MCwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKLQlzeW5jLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECi0gICAgfSwgewogCS8qIFZNT0RFXzc2OF81NzZfNTBJOiA3Njh4NTc2LCA1MEh6IChQQUwgZnVsbCBmcmFtZSksIEludGVybGFjZWQgKi8KIAkibWFjOCIsIDUwLCA3NjgsIDU3NiwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKIAlzeW5jLCBGQl9WTU9ERV9JTlRFUkxBQ0VECkBAIC0xMzQsMzggKzEzNCw0MiBAQAogICAgICAqCiAgICAgICogIFRoZXNlIE1VU1QgYmUgb3JkZXJlZCBpbgogICAgICAqICAgIC0gaW5jcmVhc2luZyByZXNvbHV0aW9uCi0gICAgICogICAgLSBkZWNyZWFzaW5nIHJlZnJlc2ggcmF0ZQorICAgICAqICAgIC0gZGVjcmVhc2luZyBwaXhlbCBjbG9jayBwZXJpb2QKICAgICAgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtb2RlX21hcCB7CiAgICAgaW50IHZtb2RlOwogICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CiB9IG1hY19tb2Rlc1tdID0geworICAgIC8qIDUxMngzODQgKi8KKyAgICB7IFZNT0RFXzUxMl8zODRfNjAsICZtYWNfbW9kZWRiWzBdIH0sCiAgICAgLyogNjQweDQ4MCAqLwotICAgIHsgVk1PREVfNjQwXzQ4MF82NywgJm1hY19tb2RlZGJbMV0gfSwKLSAgICB7IFZNT0RFXzY0MF80ODBfNjAsICZtYWNfbW9kZWRiWzBdIH0sCisgICAgeyBWTU9ERV82NDBfNDgwXzYwLCAmbWFjX21vZGVkYlsxXSB9LAorICAgIHsgVk1PREVfNjQwXzQ4MF82NywgJm1hY19tb2RlZGJbMl0gfSwKKyAgICAvKiA2NDB4ODcwICovCisgICAgeyBWTU9ERV82NDBfODcwXzc1UCwgJm1hY19tb2RlZGJbM10gfSwKICAgICAvKiA4MDB4NjAwICovCi0gICAgeyBWTU9ERV84MDBfNjAwXzc1LCAmbWFjX21vZGVkYls1XSB9LAotICAgIHsgVk1PREVfODAwXzYwMF83MiwgJm1hY19tb2RlZGJbNF0gfSwKLSAgICB7IFZNT0RFXzgwMF82MDBfNjAsICZtYWNfbW9kZWRiWzNdIH0sCi0gICAgeyBWTU9ERV84MDBfNjAwXzU2LCAmbWFjX21vZGVkYlsyXSB9LAorICAgIHsgVk1PREVfODAwXzYwMF81NiwgJm1hY19tb2RlZGJbNF0gfSwKKyAgICB7IFZNT0RFXzgwMF82MDBfNjAsICZtYWNfbW9kZWRiWzVdIH0sCisgICAgeyBWTU9ERV84MDBfNjAwXzc1LCAmbWFjX21vZGVkYls3XSB9LAorICAgIHsgVk1PREVfODAwXzYwMF83MiwgJm1hY19tb2RlZGJbNl0gfSwKICAgICAvKiA4MzJ4NjI0ICovCi0gICAgeyBWTU9ERV84MzJfNjI0Xzc1LCAmbWFjX21vZGVkYls2XSB9LAorICAgIHsgVk1PREVfODMyXzYyNF83NSwgJm1hY19tb2RlZGJbOF0gfSwKICAgICAvKiAxMDI0eDc2OCAqLwotICAgIHsgVk1PREVfMTAyNF83NjhfNzUsICZtYWNfbW9kZWRiWzEwXSB9LAotICAgIHsgVk1PREVfMTAyNF83NjhfNzVWLCAmbWFjX21vZGVkYls5XSB9LAotICAgIHsgVk1PREVfMTAyNF83NjhfNzAsICZtYWNfbW9kZWRiWzhdIH0sCi0gICAgeyBWTU9ERV8xMDI0Xzc2OF82MCwgJm1hY19tb2RlZGJbN10gfSwKKyAgICB7IFZNT0RFXzEwMjRfNzY4XzYwLCAmbWFjX21vZGVkYls5XSB9LAorICAgIHsgVk1PREVfMTAyNF83NjhfNzAsICZtYWNfbW9kZWRiWzEwXSB9LAorICAgIHsgVk1PREVfMTAyNF83NjhfNzVWLCAmbWFjX21vZGVkYlsxMV0gfSwKKyAgICB7IFZNT0RFXzEwMjRfNzY4Xzc1LCAmbWFjX21vZGVkYlsxMl0gfSwKICAgICAvKiAxMTUyeDc2OCAqLwotICAgIHsgVk1PREVfMTE1Ml83NjhfNjAsICZtYWNfbW9kZWRiWzE0XSB9LAorICAgIHsgVk1PREVfMTE1Ml83NjhfNjAsICZtYWNfbW9kZWRiWzE2XSB9LAogICAgIC8qIDExNTJ4ODcwICovCi0gICAgeyBWTU9ERV8xMTUyXzg3MF83NSwgJm1hY19tb2RlZGJbMTFdIH0sCisgICAgeyBWTU9ERV8xMTUyXzg3MF83NSwgJm1hY19tb2RlZGJbMTNdIH0sCiAgICAgLyogMTI4MHg5NjAgKi8KLSAgICB7IFZNT0RFXzEyODBfOTYwXzc1LCAmbWFjX21vZGVkYlsxMl0gfSwKKyAgICB7IFZNT0RFXzEyODBfOTYwXzc1LCAmbWFjX21vZGVkYlsxNF0gfSwKICAgICAvKiAxMjgweDEwMjQgKi8KLSAgICB7IFZNT0RFXzEyODBfMTAyNF83NSwgJm1hY19tb2RlZGJbMTNdIH0sCisgICAgeyBWTU9ERV8xMjgwXzEwMjRfNzUsICZtYWNfbW9kZWRiWzE1XSB9LAogICAgIC8qIDE2MDB4MTAyNCAqLwotICAgIHsgVk1PREVfMTYwMF8xMDI0XzYwLCAmbWFjX21vZGVkYlsxNV0gfSwKKyAgICB7IFZNT0RFXzE2MDBfMTAyNF82MCwgJm1hY19tb2RlZGJbMTddIH0sCiAgICAgeyAtMSwgTlVMTCB9CiB9OwogCkBAIC0yOTksNyArMzAzLDYgQEAKIGludCBtYWNfdmFyX3RvX3Ztb2RlKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgKnZtb2RlLAogCQkgICAgIGludCAqY21vZGUpCiB7Ci0gICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSA9IE5VTEw7CiAgICAgY29uc3Qgc3RydWN0IG1vZGVfbWFwICptYXA7CiAKICAgICBpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA8PSA4KQpAQCAtMzExLDggKzMxNCwxMyBAQAogICAgIGVsc2UKIAlyZXR1cm4gLUVJTlZBTDsKIAorICAgIC8qCisgICAgICogRmluZCB0aGUgbWFjX21vZGUgd2l0aCBhIG1hdGNoaW5nIHJlc29sdXRpb24gb3IgZmFpbGluZyB0aGF0LCB0aGUKKyAgICAgKiBjbG9zZXN0IGxhcmdlciByZXNvbHV0aW9uLiBTa2lwIG1vZGVzIHdpdGggYSBzaG9ydGVyIHBpeGVsIGNsb2NrIHBlcmlvZC4KKyAgICAgKi8KICAgICBmb3IgKG1hcCA9IG1hY19tb2RlczsgbWFwLT52bW9kZSAhPSAtMTsgbWFwKyspIHsKLQltb2RlID0gbWFwLT5tb2RlOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUgPSBtYXAtPm1vZGU7CisKIAlpZiAodmFyLT54cmVzID4gbW9kZS0+eHJlcyB8fCB2YXItPnlyZXMgPiBtb2RlLT55cmVzKQogCSAgICBjb250aW51ZTsKIAlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPiBtb2RlLT54cmVzIHx8IHZhci0+eXJlc192aXJ0dWFsID4gbW9kZS0+eXJlcykKQEAgLTMyMiw2ICszMzAsMjQgQEAKIAlpZiAoKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9NQVNLKSAhPSBtb2RlLT52bW9kZSkKIAkgICAgY29udGludWU7CiAJKnZtb2RlID0gbWFwLT52bW9kZTsKKworCS8qCisJICogSGF2aW5nIGZvdW5kIGEgZ29vZCByZXNvbHV0aW9uLCBmaW5kIHRoZSBtYXRjaGluZyBwaXhlbCBjbG9jaworCSAqIG9yIGZhaWxpbmcgdGhhdCwgdGhlIGNsb3Nlc3QgbG9uZ2VyIHBpeGVsIGNsb2NrIHBlcmlvZC4KKwkgKi8KKwltYXArKzsKKwl3aGlsZSAobWFwLT52bW9kZSAhPSAtMSkgeworCSAgICBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICpjbGtfbW9kZSA9IG1hcC0+bW9kZTsKKworCSAgICBpZiAobW9kZS0+eHJlcyAhPSBjbGtfbW9kZS0+eHJlcyB8fCBtb2RlLT55cmVzICE9IGNsa19tb2RlLT55cmVzKQorCQlicmVhazsKKwkgICAgaWYgKHZhci0+cGl4Y2xvY2sgPiBtb2RlLT5waXhjbG9jaykKKwkgICAgICAgIGJyZWFrOworCSAgICBpZiAobW9kZS0+dm1vZGUgIT0gY2xrX21vZGUtPnZtb2RlKQorCQljb250aW51ZTsKKwkgICAgKnZtb2RlID0gbWFwLT52bW9kZTsKKwkgICAgbWFwKys7CisJfQogCXJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCmluZGV4IDUzZjhmMTEuLmY5OTc1MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wdnIyZmIuYwpAQCAtODMxLDcgKzgzMSw3IEBACiAJcHJpbnRrKEtFUk5fTk9USUNFICJmYiVkOiByZWdpc3RlcmluZyB3aXRoIFNRIEFQSVxuIiwgZmJfaW5mby0+bm9kZSk7CiAKIAlwdnIyZmJfbWFwID0gc3FfcmVtYXAoZmJfaW5mby0+Zml4LnNtZW1fc3RhcnQsIGZiX2luZm8tPmZpeC5zbWVtX2xlbiwKLQkJCSAgICAgIGZiX2luZm8tPmZpeC5pZCwgcGdwcm90X3ZhbChQQUdFX1NIQVJFRCkpOworCQkJICAgICAgZmJfaW5mby0+Zml4LmlkLCBQQUdFX1NIQVJFRCk7CiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgImZiJWQ6IE1hcHBlZCB2aWRlbyBtZW1vcnkgdG8gU1EgYWRkciAweCVseFxuIiwKIAkgICAgICAgZmJfaW5mby0+bm9kZSwgcHZyMmZiX21hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IGE2OTgzMGQuLjhkNzY1M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApAQCAtMTA2LDYgKzEwNyw3IEBACiAjZGVmaW5lIExEUkNOVFJfU1JDCTB4MDAwMTAwMDAKICNkZWZpbmUgTERSQ05UUl9NUlMJMHgwMDAwMDAwMgogI2RlZmluZSBMRFJDTlRSX01SQwkweDAwMDAwMDAxCisjZGVmaW5lIExEU1JfTVJTCTB4MDAwMDAxMDAKIAogc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXY7CiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiB7CkBAIC0xMjIsOCArMTI0LDggQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdDsKIAl1bnNpZ25lZCBsb25nIGZyYW1lX2VuZDsKIAl1bnNpZ25lZCBsb25nIHBhbl9vZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZyBuZXdfcGFuX29mZnNldDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZV9lbmRfd2FpdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiB2c3luY19jb21wbGV0aW9uOwogfTsKIAogc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgewpAQCAtMzY2LDE5ICszNjgsOCBAQAogCQl9CiAKIAkJLyogVlNZTkMgRW5kICovCi0JCWlmIChsZGludHIgJiBMRElOVFJfVkVTKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGxkcmNudHIgPSBsY2RjX3JlYWQocHJpdiwgX0xEUkNOVFIpOwotCQkJLyogU2V0IHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5leHQgcmVmcmVzaCAqLwotCQkJbGNkY193cml0ZV9jaGFuX21pcnJvcihjaCwgTERTQTFSLCBjaC0+ZG1hX2hhbmRsZSArCi0JCQkJCSAgICAgICBjaC0+bmV3X3Bhbl9vZmZzZXQpOwotCQkJaWYgKGxjZGNfY2hhbl9pc19zdWJsY2QoY2gpKQotCQkJCWxjZGNfd3JpdGUoY2gtPmxjZGMsIF9MRFJDTlRSLAotCQkJCQkgICBsZHJjbnRyIF4gTERSQ05UUl9TUlMpOwotCQkJZWxzZQotCQkJCWxjZGNfd3JpdGUoY2gtPmxjZGMsIF9MRFJDTlRSLAotCQkJCQkgICBsZHJjbnRyIF4gTERSQ05UUl9NUlMpOwotCQkJY2gtPnBhbl9vZmZzZXQgPSBjaC0+bmV3X3Bhbl9vZmZzZXQ7Ci0JCX0KKwkJaWYgKGxkaW50ciAmIExESU5UUl9WRVMpCisJCQljb21wbGV0ZSgmY2gtPnZzeW5jX2NvbXBsZXRpb24pOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTc2NywyNSArNzU4LDY5IEBACiAJCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiAqY2ggPSBpbmZvLT5wYXI7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgKnByaXYgPSBjaC0+bGNkYzsKKwl1bnNpZ25lZCBsb25nIGxkcmNudHI7CisJdW5zaWduZWQgbG9uZyBuZXdfcGFuX29mZnNldDsKIAotCWlmIChpbmZvLT52YXIueG9mZnNldCA9PSB2YXItPnhvZmZzZXQgJiYKLQkgICAgaW5mby0+dmFyLnlvZmZzZXQgPT0gdmFyLT55b2Zmc2V0KQotCQlyZXR1cm4gMDsJLyogTm8gY2hhbmdlLCBkbyBub3RoaW5nICovCi0KLQljaC0+bmV3X3Bhbl9vZmZzZXQgPSAodmFyLT55b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoKSArCisJbmV3X3Bhbl9vZmZzZXQgPSAodmFyLT55b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoKSArCiAJCSh2YXItPnhvZmZzZXQgKiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsIC8gOCkpOwogCi0JaWYgKGNoLT5uZXdfcGFuX29mZnNldCAhPSBjaC0+cGFuX29mZnNldCkgewotCQl1bnNpZ25lZCBsb25nIGxkaW50cjsKLQkJbGRpbnRyID0gbGNkY19yZWFkKGNoLT5sY2RjLCBfTERJTlRSKTsKLQkJbGRpbnRyIHw9IExESU5UUl9WRUU7Ci0JCWxjZGNfd3JpdGUoY2gtPmxjZGMsIF9MRElOVFIsIGxkaW50cik7Ci0JCXNoX21vYmlsZV9sY2RjX2RlZmVycmVkX2lvX3RvdWNoKGluZm8pOwotCX0KKwlpZiAobmV3X3Bhbl9vZmZzZXQgPT0gY2gtPnBhbl9vZmZzZXQpCisJCXJldHVybiAwOwkvKiBObyBjaGFuZ2UsIGRvIG5vdGhpbmcgKi8KKworCWxkcmNudHIgPSBsY2RjX3JlYWQocHJpdiwgX0xEUkNOVFIpOworCisJLyogU2V0IHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5leHQgcmVmcmVzaCAqLworCWxjZGNfd3JpdGVfY2hhbl9taXJyb3IoY2gsIExEU0ExUiwgY2gtPmRtYV9oYW5kbGUgKyBuZXdfcGFuX29mZnNldCk7CisJaWYgKGxjZGNfY2hhbl9pc19zdWJsY2QoY2gpKQorCQlsY2RjX3dyaXRlKGNoLT5sY2RjLCBfTERSQ05UUiwgbGRyY250ciBeIExEUkNOVFJfU1JTKTsKKwllbHNlCisJCWxjZGNfd3JpdGUoY2gtPmxjZGMsIF9MRFJDTlRSLCBsZHJjbnRyIF4gTERSQ05UUl9NUlMpOworCisJY2gtPnBhbl9vZmZzZXQgPSBuZXdfcGFuX29mZnNldDsKKworCXNoX21vYmlsZV9sY2RjX2RlZmVycmVkX2lvX3RvdWNoKGluZm8pOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX3dhaXRfZm9yX3ZzeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaCA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBsb25nIGxkaW50cjsKKwlpbnQgcmV0OworCisJLyogRW5hYmxlIFZTeW5jIEVuZCBpbnRlcnJ1cHQgKi8KKwlsZGludHIgPSBsY2RjX3JlYWQoY2gtPmxjZGMsIF9MRElOVFIpOworCWxkaW50ciB8PSBMRElOVFJfVkVFOworCWxjZGNfd3JpdGUoY2gtPmxjZGMsIF9MRElOVFIsIGxkaW50cik7CisKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmY2gtPnZzeW5jX2NvbXBsZXRpb24sCisJCQkJCQkJbXNlY3NfdG9famlmZmllcygxMDApKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZCSU9fV0FJVEZPUlZTWU5DOgorCQlyZXR2YWwgPSBzaF9tb2JpbGVfd2FpdF9mb3JfdnN5bmMoaW5mbyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworCiBzdGF0aWMgc3RydWN0IGZiX29wcyBzaF9tb2JpbGVfbGNkY19vcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLmZiX3NldGNvbHJlZwk9IHNoX21vYmlsZV9sY2RjX3NldGNvbHJlZywKQEAgLTc5NSw2ICs4MzAsNyBAQAogCS5mYl9jb3B5YXJlYQk9IHNoX21vYmlsZV9sY2RjX2NvcHlhcmVhLAogCS5mYl9pbWFnZWJsaXQJPSBzaF9tb2JpbGVfbGNkY19pbWFnZWJsaXQsCiAJLmZiX3Bhbl9kaXNwbGF5ID0gc2hfbW9iaWxlX2ZiX3Bhbl9kaXNwbGF5LAorCS5mYl9pb2N0bCAgICAgICA9IHNoX21vYmlsZV9pb2N0bCwKIH07CiAKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfc2V0X2JwcChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgaW50IGJwcCkKQEAgLTk2Miw4ICs5OTgsOCBAQAogCQkJZ290byBlcnIxOwogCQl9CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmNoW2ldLmZyYW1lX2VuZF93YWl0KTsKKwkJaW5pdF9jb21wbGV0aW9uKCZwcml2LT5jaFtpXS52c3luY19jb21wbGV0aW9uKTsKIAkJcHJpdi0+Y2hbal0ucGFuX29mZnNldCA9IDA7Ci0JCXByaXYtPmNoW2pdLm5ld19wYW5fb2Zmc2V0ID0gMDsKIAogCQlzd2l0Y2ggKHBkYXRhLT5jaFtpXS5jaGFuKSB7CiAJCWNhc2UgTENEQ19DSEFOX01BSU5MQ0Q6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5jCmluZGV4IDRiYjlhMGIuLjZiNTJiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5jCkBAIC02OSw3ICs2OSw3IEBACiAjaWZkZWYgQ09ORklHX01BQwogLyogV2UgZG9uJ3QgeWV0IGhhdmUgZnVuY3Rpb25zIHRvIHJlYWQgdGhlIFBSQU0uLi4gcGVyaGFwcyB3ZSBjYW4KICAgIGFkYXB0IHRoZW0gZnJvbSB0aGUgUFBDIGNvZGU/ICovCi1zdGF0aWMgaW50IGRlZmF1bHRfdm1vZGUgPSBWTU9ERV82NDBfNDgwXzY3Oworc3RhdGljIGludCBkZWZhdWx0X3Ztb2RlID0gVk1PREVfQ0hPT1NFOwogc3RhdGljIGludCBkZWZhdWx0X2Ntb2RlID0gQ01PREVfODsKICNlbHNlCiBzdGF0aWMgaW50IGRlZmF1bHRfdm1vZGUgPSBWTU9ERV9OVlJBTTsKQEAgLTMyNiwxMSArMzI2LDExIEBACiAKICNpZmRlZiBDT05GSUdfTUFDCiAJaWYgKCFNQUNIX0lTX01BQykKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PREVWOwogCWlmICghKG1hY19iaV9kYXRhLmlkID09IE1BQ19NT0RFTF9RNjMwCiAJICAgICAgLyogSSdtIG5vdCBzdXJlIGFib3V0IHRoaXMgb25lICovCiAJICAgIHx8IG1hY19iaV9kYXRhLmlkID09IE1BQ19NT0RFTF9QNTg4KSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PREVWOwogCiAJLyogSGFyZGNvZGVkIGFkZHJlc3Nlcy4uLiB3ZWxjb21lIHRvIDY4ayBNYWNpbnRvc2ggY291bnRyeSA6LSkgKi8KIAlmcmFtZV9idWZmZXJfcGh5cyA9IDB4ZjkwMDAwMDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZhbGt5cmllZmIuaCBiL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5oCmluZGV4IDk3YWFmN2IuLmQ3ODc0NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5oCkBAIC0xMzQsMTUgKzEzNCw3IEBACiAgICAgeyAxMDI0LCAwIH0sCiAJMTAyNCwgNzY4CiB9OwotCi0vKiBSZWdpc3RlciB2YWx1ZXMgZm9yIDgwMHg2MDAsIDcySHogbW9kZSAoMTEpICovCi1zdGF0aWMgc3RydWN0IHZhbGt5cmllX3JlZ3ZhbHMgdmFsa3lyaWVfcmVnX2luaXRfMTEgPSB7Ci0gICAgMTMsCi0gICAgeyAxNywgMjcsIDMgfSwgIC8qIHBpeGVsIGNsb2NrID0gNDkuNjNNSHogZm9yIFY9NzEuNjZIeiAqLwotICAgIHsgODAwLCAwIH0sCi0JODAwLCA2MDAKLX07Ci0jZW5kaWYgLyogQ09ORklHX01BQyAqLworI2VuZGlmIC8qICFkZWZpbmVkIENPTkZJR19NQUMgKi8KIAogLyogUmVnaXN0ZXIgdmFsdWVzIGZvciA4MzJ4NjI0LCA3NUh6IG1vZGUgKDEzKSAqLwogc3RhdGljIHN0cnVjdCB2YWxreXJpZV9yZWd2YWxzIHZhbGt5cmllX3JlZ19pbml0XzEzID0gewpAQCAtMTUyLDYgKzE0NCwxNCBAQAogCTgzMiwgNjI0CiB9OwogCisvKiBSZWdpc3RlciB2YWx1ZXMgZm9yIDgwMHg2MDAsIDcySHogbW9kZSAoMTEpICovCitzdGF0aWMgc3RydWN0IHZhbGt5cmllX3JlZ3ZhbHMgdmFsa3lyaWVfcmVnX2luaXRfMTEgPSB7CisgICAgMTMsCisgICAgeyAxNywgMjcsIDMgfSwgIC8qIHBpeGVsIGNsb2NrID0gNDkuNjNNSHogZm9yIFY9NzEuNjZIeiAqLworICAgIHsgODAwLCAwIH0sCisJODAwLCA2MDAKK307CisKIC8qIFJlZ2lzdGVyIHZhbHVlcyBmb3IgODAweDYwMCwgNjBIeiBtb2RlICgxMCkgKi8KIHN0YXRpYyBzdHJ1Y3QgdmFsa3lyaWVfcmVndmFscyB2YWxreXJpZV9yZWdfaW5pdF8xMCA9IHsKICAgICAxMiwKQEAgLTE4OCwyNCArMTg4LDEzIEBACiAJTlVMTCwKIAlOVUxMLAogCSZ2YWxreXJpZV9yZWdfaW5pdF8xMCwKLSNpZmRlZiBDT05GSUdfTUFDCi0JTlVMTCwKLQlOVUxMLAotCSZ2YWxreXJpZV9yZWdfaW5pdF8xMywKLQlOVUxMLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotI2Vsc2UKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTEsCiAJTlVMTCwKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTMsCisjaWZuZGVmIENPTkZJR19NQUMKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTQsCiAJJnZhbGt5cmllX3JlZ19pbml0XzE1LAogCU5VTEwsCiAJJnZhbGt5cmllX3JlZ19pbml0XzE3LAogI2VuZGlmCi0JTlVMTCwKLQlOVUxMLAotCU5VTEwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwppbmRleCA1MDViZTg4Li4zNjlmMmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKQEAgLTI4LDcgKzI4LDcgQEAKIHN0cnVjdCB2aXJ0aW9fYmFsbG9vbgogewogCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2OwotCXN0cnVjdCB2aXJ0cXVldWUgKmluZmxhdGVfdnEsICpkZWZsYXRlX3ZxOworCXN0cnVjdCB2aXJ0cXVldWUgKmluZmxhdGVfdnEsICpkZWZsYXRlX3ZxLCAqc3RhdHNfdnE7CiAKIAkvKiBXaGVyZSB0aGUgYmFsbG9vbmluZyB0aHJlYWQgd2FpdHMgZm9yIGNvbmZpZyB0byBjaGFuZ2UuICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgY29uZmlnX2NoYW5nZTsKQEAgLTQ5LDYgKzQ5LDEwIEBACiAJLyogVGhlIGFycmF5IG9mIHBmbnMgd2UgdGVsbCB0aGUgSG9zdCBhYm91dC4gKi8KIAl1bnNpZ25lZCBpbnQgbnVtX3BmbnM7CiAJdTMyIHBmbnNbMjU2XTsKKworCS8qIE1lbW9yeSBzdGF0aXN0aWNzICovCisJaW50IG5lZWRfc3RhdHNfdXBkYXRlOworCXN0cnVjdCB2aXJ0aW9fYmFsbG9vbl9zdGF0IHN0YXRzW1ZJUlRJT19CQUxMT09OX1NfTlJdOwogfTsKIAogc3RhdGljIHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CkBAIC0xNTQsNiArMTU4LDcyIEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3N0YXQoc3RydWN0IHZpcnRpb19iYWxsb29uICp2YiwgaW50IGlkeCwKKwkJCSAgICAgICB1MTYgdGFnLCB1NjQgdmFsKQoreworCUJVR19PTihpZHggPj0gVklSVElPX0JBTExPT05fU19OUik7CisJdmItPnN0YXRzW2lkeF0udGFnID0gdGFnOworCXZiLT5zdGF0c1tpZHhdLnZhbCA9IHZhbDsKK30KKworI2RlZmluZSBwYWdlc190b19ieXRlcyh4KSAoKHU2NCkoeCkgPDwgUEFHRV9TSElGVCkKKworc3RhdGljIHZvaWQgdXBkYXRlX2JhbGxvb25fc3RhdHMoc3RydWN0IHZpcnRpb19iYWxsb29uICp2YikKK3sKKwl1bnNpZ25lZCBsb25nIGV2ZW50c1tOUl9WTV9FVkVOVF9JVEVNU107CisJc3RydWN0IHN5c2luZm8gaTsKKwlpbnQgaWR4ID0gMDsKKworCWFsbF92bV9ldmVudHMoZXZlbnRzKTsKKwlzaV9tZW1pbmZvKCZpKTsKKworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19TV0FQX0lOLAorCQkJCXBhZ2VzX3RvX2J5dGVzKGV2ZW50c1tQU1dQSU5dKSk7CisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX1NXQVBfT1VULAorCQkJCXBhZ2VzX3RvX2J5dGVzKGV2ZW50c1tQU1dQT1VUXSkpOworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19NQUpGTFQsIGV2ZW50c1tQR01BSkZBVUxUXSk7CisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX01JTkZMVCwgZXZlbnRzW1BHRkFVTFRdKTsKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfTUVNRlJFRSwKKwkJCQlwYWdlc190b19ieXRlcyhpLmZyZWVyYW0pKTsKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfTUVNVE9ULAorCQkJCXBhZ2VzX3RvX2J5dGVzKGkudG90YWxyYW0pKTsKK30KKworLyoKKyAqIFdoaWxlIG1vc3QgdmlydHF1ZXVlcyBjb21tdW5pY2F0ZSBndWVzdC1pbml0aWF0ZWQgcmVxdWVzdHMgdG8gdGhlIGh5cGVydmlzb3IsCisgKiB0aGUgc3RhdHMgcXVldWUgb3BlcmF0ZXMgaW4gcmV2ZXJzZS4gIFRoZSBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIHZpcnRxdWV1ZQorICogd2l0aCBhIHNpbmdsZSBidWZmZXIuICBGcm9tIHRoYXQgcG9pbnQgZm9yd2FyZCwgYWxsIGNvbnZlcnNhdGlvbnMgY29uc2lzdCBvZgorICogYSBoeXBlcnZpc29yIHJlcXVlc3QgKGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uKSB3aGljaCBkaXJlY3RzIHVzIHRvIHJlZmlsbAorICogdGhlIHZpcnRxdWV1ZSB3aXRoIGEgZnJlc2ggc3RhdHMgYnVmZmVyLiAgU2luY2Ugc3RhdHMgY29sbGVjdGlvbiBjYW4gc2xlZXAsCisgKiB3ZSBub3RpZnkgb3VyIGt0aHJlYWQgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIHdvcmsgdmlhIHN0YXRzX2hhbmRsZV9yZXF1ZXN0KCkuCisgKi8KK3N0YXRpYyB2b2lkIHN0YXRzX3JlcXVlc3Qoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCit7CisJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJdmIgPSB2cS0+dnFfb3BzLT5nZXRfYnVmKHZxLCAmbGVuKTsKKwlpZiAoIXZiKQorCQlyZXR1cm47CisJdmItPm5lZWRfc3RhdHNfdXBkYXRlID0gMTsKKwl3YWtlX3VwKCZ2Yi0+Y29uZmlnX2NoYW5nZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXRzX2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIpCit7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJdmItPm5lZWRfc3RhdHNfdXBkYXRlID0gMDsKKwl1cGRhdGVfYmFsbG9vbl9zdGF0cyh2Yik7CisKKwl2cSA9IHZiLT5zdGF0c192cTsKKwlzZ19pbml0X29uZSgmc2csIHZiLT5zdGF0cywgc2l6ZW9mKHZiLT5zdGF0cykpOworCWlmICh2cS0+dnFfb3BzLT5hZGRfYnVmKHZxLCAmc2csIDEsIDAsIHZiKSA8IDApCisJCUJVRygpOworCXZxLT52cV9vcHMtPmtpY2sodnEpOworfQorCiBzdGF0aWMgdm9pZCB2aXJ0YmFsbG9vbl9jaGFuZ2VkKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmIgPSB2ZGV2LT5wcml2OwpAQCAtMTkwLDggKzI2MCwxMSBAQAogCQl0cnlfdG9fZnJlZXplKCk7CiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh2Yi0+Y29uZmlnX2NoYW5nZSwKIAkJCQkJIChkaWZmID0gdG93YXJkc190YXJnZXQodmIpKSAhPSAwCisJCQkJCSB8fCB2Yi0+bmVlZF9zdGF0c191cGRhdGUKIAkJCQkJIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKQogCQkJCQkgfHwgZnJlZXppbmcoY3VycmVudCkpOworCQlpZiAodmItPm5lZWRfc3RhdHNfdXBkYXRlKQorCQkJc3RhdHNfaGFuZGxlX3JlcXVlc3QodmIpOwogCQlpZiAoZGlmZiA+IDApCiAJCQlmaWxsX2JhbGxvb24odmIsIGRpZmYpOwogCQllbHNlIGlmIChkaWZmIDwgMCkKQEAgLTIwNCwxMCArMjc3LDEwIEBACiBzdGF0aWMgaW50IHZpcnRiYWxsb29uX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aXJ0aW9fYmFsbG9vbiAqdmI7Ci0Jc3RydWN0IHZpcnRxdWV1ZSAqdnFzWzJdOwotCXZxX2NhbGxiYWNrX3QgKmNhbGxiYWNrc1tdID0geyBiYWxsb29uX2FjaywgYmFsbG9vbl9hY2sgfTsKLQljb25zdCBjaGFyICpuYW1lc1tdID0geyAiaW5mbGF0ZSIsICJkZWZsYXRlIiB9OwotCWludCBlcnI7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnFzWzNdOworCXZxX2NhbGxiYWNrX3QgKmNhbGxiYWNrc1tdID0geyBiYWxsb29uX2FjaywgYmFsbG9vbl9hY2ssIHN0YXRzX3JlcXVlc3QgfTsKKwljb25zdCBjaGFyICpuYW1lc1tdID0geyAiaW5mbGF0ZSIsICJkZWZsYXRlIiwgInN0YXRzIiB9OworCWludCBlcnIsIG52cXM7CiAKIAl2ZGV2LT5wcml2ID0gdmIgPSBrbWFsbG9jKHNpemVvZigqdmIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZiKSB7CkBAIC0yMTksMTQgKzI5MiwzMSBAQAogCXZiLT5udW1fcGFnZXMgPSAwOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZiLT5jb25maWdfY2hhbmdlKTsKIAl2Yi0+dmRldiA9IHZkZXY7CisJdmItPm5lZWRfc3RhdHNfdXBkYXRlID0gMDsKIAotCS8qIFdlIGV4cGVjdCB0d28gdmlydHF1ZXVlcy4gKi8KLQllcnIgPSB2ZGV2LT5jb25maWctPmZpbmRfdnFzKHZkZXYsIDIsIHZxcywgY2FsbGJhY2tzLCBuYW1lcyk7CisJLyogV2UgZXhwZWN0IHR3byB2aXJ0cXVldWVzOiBpbmZsYXRlIGFuZCBkZWZsYXRlLAorCSAqIGFuZCBvcHRpb25hbGx5IHN0YXQuICovCisJbnZxcyA9IHZpcnRpb19oYXNfZmVhdHVyZSh2Yi0+dmRldiwgVklSVElPX0JBTExPT05fRl9TVEFUU19WUSkgPyAzIDogMjsKKwllcnIgPSB2ZGV2LT5jb25maWctPmZpbmRfdnFzKHZkZXYsIG52cXMsIHZxcywgY2FsbGJhY2tzLCBuYW1lcyk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV92YjsKIAogCXZiLT5pbmZsYXRlX3ZxID0gdnFzWzBdOwogCXZiLT5kZWZsYXRlX3ZxID0gdnFzWzFdOworCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmItPnZkZXYsIFZJUlRJT19CQUxMT09OX0ZfU1RBVFNfVlEpKSB7CisJCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwkJdmItPnN0YXRzX3ZxID0gdnFzWzJdOworCisJCS8qCisJCSAqIFByaW1lIHRoaXMgdmlydHF1ZXVlIHdpdGggb25lIGJ1ZmZlciBzbyB0aGUgaHlwZXJ2aXNvciBjYW4KKwkJICogdXNlIGl0IHRvIHNpZ25hbCB1cyBsYXRlci4KKwkJICovCisJCXNnX2luaXRfb25lKCZzZywgdmItPnN0YXRzLCBzaXplb2YgdmItPnN0YXRzKTsKKwkJaWYgKHZiLT5zdGF0c192cS0+dnFfb3BzLT5hZGRfYnVmKHZiLT5zdGF0c192cSwKKwkJCQkJCSAgJnNnLCAxLCAwLCB2YikgPCAwKQorCQkJQlVHKCk7CisJCXZiLT5zdGF0c192cS0+dnFfb3BzLT5raWNrKHZiLT5zdGF0c192cSk7CisJfQogCiAJdmItPnRocmVhZCA9IGt0aHJlYWRfcnVuKGJhbGxvb24sIHZiLCAidmJhbGxvb24iKTsKIAlpZiAoSVNfRVJSKHZiLT50aHJlYWQpKSB7CkBAIC0yNjQsNyArMzU0LDEwIEBACiAJa2ZyZWUodmIpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7IFZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKKwlWSVJUSU9fQkFMTE9PTl9GX01VU1RfVEVMTF9IT1NULAorCVZJUlRJT19CQUxMT09OX0ZfU1RBVFNfVlEsCit9OwogCiBzdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdmlydGlvX2JhbGxvb25fZHJpdmVyID0gewogCS5mZWF0dXJlX3RhYmxlID0gZmVhdHVyZXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKaW5kZXggMjhkOWNmNy4uMWQ1MTkxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwpAQCAtNzAyLDcgKzcwMiw3IEBACiAJLm5hbWUJCT0gInZpcnRpby1wY2kiLAogCS5pZF90YWJsZQk9IHZpcnRpb19wY2lfaWRfdGFibGUsCiAJLnByb2JlCQk9IHZpcnRpb19wY2lfcHJvYmUsCi0JLnJlbW92ZQkJPSB2aXJ0aW9fcGNpX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHZpcnRpb19wY2lfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHZpcnRpb19wY2lfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHZpcnRpb19wY2lfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKaW5kZXggZmJkMmVjZC4uMGRiOTA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCkBAIC0yMSw2ICsyMSwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAorLyogdmlydGlvIGd1ZXN0IGlzIGNvbW11bmljYXRpbmcgd2l0aCBhIHZpcnR1YWwgImRldmljZSIgdGhhdCBhY3R1YWxseSBydW5zIG9uCisgKiBhIGhvc3QgcHJvY2Vzc29yLiAgTWVtb3J5IGJhcnJpZXJzIGFyZSB1c2VkIHRvIGNvbnRyb2wgU01QIGVmZmVjdHMuICovCisjaWZkZWYgQ09ORklHX1NNUAorLyogV2hlcmUgcG9zc2libGUsIHVzZSBTTVAgYmFycmllcnMgd2hpY2ggYXJlIG1vcmUgbGlnaHR3ZWlnaHQgdGhhbiBtYW5kYXRvcnkKKyAqIGJhcnJpZXJzLCBiZWNhdXNlIG1hbmRhdG9yeSBiYXJyaWVycyBjb250cm9sIE1NSU8gZWZmZWN0cyBvbiBhY2Nlc3NlcworICogdGhyb3VnaCByZWxheGVkIG1lbW9yeSBJL08gd2luZG93cyAod2hpY2ggdmlydGlvIGRvZXMgbm90IHVzZSkuICovCisjZGVmaW5lIHZpcnRpb19tYigpIHNtcF9tYigpCisjZGVmaW5lIHZpcnRpb19ybWIoKSBzbXBfcm1iKCkKKyNkZWZpbmUgdmlydGlvX3dtYigpIHNtcF93bWIoKQorI2Vsc2UKKy8qIFdlIG11c3QgZm9yY2UgbWVtb3J5IG9yZGVyaW5nIGV2ZW4gaWYgZ3Vlc3QgaXMgVVAgc2luY2UgaG9zdCBjb3VsZCBiZQorICogcnVubmluZyBvbiBhbm90aGVyIENQVSwgYnV0IFNNUCBiYXJyaWVycyBhcmUgZGVmaW5lZCB0byBiYXJyaWVyKCkgaW4gdGhhdAorICogY29uZmlndXJhdGlvbi4gU28gZmFsbCBiYWNrIHRvIG1hbmRhdG9yeSBiYXJyaWVycyBpbnN0ZWFkLiAqLworI2RlZmluZSB2aXJ0aW9fbWIoKSBtYigpCisjZGVmaW5lIHZpcnRpb19ybWIoKSBybWIoKQorI2RlZmluZSB2aXJ0aW9fd21iKCkgd21iKCkKKyNlbmRpZgorCiAjaWZkZWYgREVCVUcKIC8qIEZvciBkZXZlbG9wbWVudCwgd2Ugd2FudCB0byBjcmFzaCB3aGVuZXZlciB0aGUgcmluZyBpcyBzY3Jld2VkLiAqLwogI2RlZmluZSBCQURfUklORyhfdnEsIGZtdCwgYXJncy4uLikJCQkJXApAQCAtMzYsMTAgKzU0LDkgQEAKIAkJCXBhbmljKCIlczppbl91c2UgPSAlaVxuIiwJCVwKIAkJCSAgICAgIChfdnEpLT52cS5uYW1lLCAoX3ZxKS0+aW5fdXNlKTsJXAogCQkoX3ZxKS0+aW5fdXNlID0gX19MSU5FX187CQkJXAotCQltYigpOwkJCQkJCVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBFTkRfVVNFKF92cSkgXAotCWRvIHsgQlVHX09OKCEoX3ZxKS0+aW5fdXNlKTsgKF92cSktPmluX3VzZSA9IDA7IG1iKCk7IH0gd2hpbGUoMCkKKwlkbyB7IEJVR19PTighKF92cSktPmluX3VzZSk7IChfdnEpLT5pbl91c2UgPSAwOyB9IHdoaWxlKDApCiAjZWxzZQogI2RlZmluZSBCQURfUklORyhfdnEsIGZtdCwgYXJncy4uLikJCQkJXAogCWRvIHsJCQkJCQkJXApAQCAtMjIxLDEzICsyMzgsMTMgQEAKIAlTVEFSVF9VU0UodnEpOwogCS8qIERlc2NyaXB0b3JzIGFuZCBhdmFpbGFibGUgYXJyYXkgbmVlZCB0byBiZSBzZXQgYmVmb3JlIHdlIGV4cG9zZSB0aGUKIAkgKiBuZXcgYXZhaWxhYmxlIGFycmF5IGVudHJpZXMuICovCi0Jd21iKCk7CisJdmlydGlvX3dtYigpOwogCiAJdnEtPnZyaW5nLmF2YWlsLT5pZHggKz0gdnEtPm51bV9hZGRlZDsKIAl2cS0+bnVtX2FkZGVkID0gMDsKIAogCS8qIE5lZWQgdG8gdXBkYXRlIGF2YWlsIGluZGV4IGJlZm9yZSBjaGVja2luZyBpZiB3ZSBzaG91bGQgbm90aWZ5ICovCi0JbWIoKTsKKwl2aXJ0aW9fbWIoKTsKIAogCWlmICghKHZxLT52cmluZy51c2VkLT5mbGFncyAmIFZSSU5HX1VTRURfRl9OT19OT1RJRlkpKQogCQkvKiBQcm9kIG90aGVyIHNpZGUgdG8gdGVsbCBpdCBhYm91dCBjaGFuZ2VzLiAqLwpAQCAtMjg2LDcgKzMwMyw3IEBACiAJfQogCiAJLyogT25seSBnZXQgdXNlZCBhcnJheSBlbnRyaWVzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGV4cG9zZWQgYnkgaG9zdC4gKi8KLQlybWIoKTsKKwl2aXJ0aW9fcm1iKCk7CiAKIAlpID0gdnEtPnZyaW5nLnVzZWQtPnJpbmdbdnEtPmxhc3RfdXNlZF9pZHgldnEtPnZyaW5nLm51bV0uaWQ7CiAJKmxlbiA9IHZxLT52cmluZy51c2VkLT5yaW5nW3ZxLT5sYXN0X3VzZWRfaWR4JXZxLT52cmluZy5udW1dLmxlbjsKQEAgLTMyNCw3ICszNDEsNyBAQAogCS8qIFdlIG9wdGltaXN0aWNhbGx5IHR1cm4gYmFjayBvbiBpbnRlcnJ1cHRzLCB0aGVuIGNoZWNrIGlmIHRoZXJlIHdhcwogCSAqIG1vcmUgdG8gZG8uICovCiAJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmPSB+VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7Ci0JbWIoKTsKKwl2aXJ0aW9fbWIoKTsKIAlpZiAodW5saWtlbHkobW9yZV91c2VkKHZxKSkpIHsKIAkJRU5EX1VTRSh2cSk7CiAJCXJldHVybiBmYWxzZTsKQEAgLTMzNCw2ICszNTEsMzAgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgKnZyaW5nX2RldGFjaF91bnVzZWRfYnVmKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKK3sKKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOworCXVuc2lnbmVkIGludCBpOworCXZvaWQgKmJ1ZjsKKworCVNUQVJUX1VTRSh2cSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdnEtPnZyaW5nLm51bTsgaSsrKSB7CisJCWlmICghdnEtPmRhdGFbaV0pCisJCQljb250aW51ZTsKKwkJLyogZGV0YWNoX2J1ZiBjbGVhcnMgZGF0YSwgc28gZ3JhYiBpdCBub3cuICovCisJCWJ1ZiA9IHZxLT5kYXRhW2ldOworCQlkZXRhY2hfYnVmKHZxLCBpKTsKKwkJRU5EX1VTRSh2cSk7CisJCXJldHVybiBidWY7CisJfQorCS8qIFRoYXQgc2hvdWxkIGhhdmUgZnJlZWQgZXZlcnl0aGluZy4gKi8KKwlCVUdfT04odnEtPm51bV9mcmVlICE9IHZxLT52cmluZy5udW0pOworCisJRU5EX1VTRSh2cSk7CisJcmV0dXJuIE5VTEw7Cit9CisKIGlycXJldHVybl90IHZyaW5nX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpfdnEpCiB7CiAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKQEAgLTM2MCw2ICs0MDEsNyBAQAogCS5raWNrID0gdnJpbmdfa2ljaywKIAkuZGlzYWJsZV9jYiA9IHZyaW5nX2Rpc2FibGVfY2IsCiAJLmVuYWJsZV9jYiA9IHZyaW5nX2VuYWJsZV9jYiwKKwkuZGV0YWNoX3VudXNlZF9idWYgPSB2cmluZ19kZXRhY2hfdW51c2VkX2J1ZiwKIH07CiAKIHN0cnVjdCB2aXJ0cXVldWUgKnZyaW5nX25ld192aXJ0cXVldWUodW5zaWduZWQgaW50IG51bSwKQEAgLTQwNiw4ICs0NDgsMTEgQEAKIAkvKiBQdXQgZXZlcnl0aGluZyBpbiBmcmVlIGxpc3RzLiAqLwogCXZxLT5udW1fZnJlZSA9IG51bTsKIAl2cS0+ZnJlZV9oZWFkID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtLTE7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbnVtLTE7IGkrKykgewogCQl2cS0+dnJpbmcuZGVzY1tpXS5uZXh0ID0gaSsxOworCQl2cS0+ZGF0YVtpXSA9IE5VTEw7CisJfQorCXZxLT5kYXRhW2ldID0gTlVMTDsKIAogCXJldHVybiAmdnEtPnZxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hcjdfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FyN193ZHQuYwppbmRleCAyZTk0YjcxLi4yYmI5NWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FyN193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FyN193ZHQuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9hcjcuaD4KQEAgLTgwLDYgKzgxLDggQEAKIC8qIFBvaW50ZXIgdG8gdGhlIHJlbWFwcGVkIFdEVCBJTyBzcGFjZSAqLwogc3RhdGljIHN0cnVjdCBhcjdfd2R0ICphcjdfd2R0OwogCitzdGF0aWMgc3RydWN0IGNsayAqdmJ1c19jbGs7CisKIHN0YXRpYyB2b2lkIGFyN193ZHRfa2ljayh1MzIgdmFsdWUpCiB7CiAJV1JJVEVfUkVHKGFyN193ZHQtPmtpY2tfbG9jaywgMHg1NTU1KTsKQEAgLTEzOCwxNyArMTQxLDE5IEBACiBzdGF0aWMgdm9pZCBhcjdfd2R0X3VwZGF0ZV9tYXJnaW4oaW50IG5ld19tYXJnaW4pCiB7CiAJdTMyIGNoYW5nZTsKKwl1MzIgdmJ1c19yYXRlOwogCi0JY2hhbmdlID0gbmV3X21hcmdpbiAqIChhcjdfdmJ1c19mcmVxKCkgLyBwcmVzY2FsZV92YWx1ZSk7CisJdmJ1c19yYXRlID0gY2xrX2dldF9yYXRlKHZidXNfY2xrKTsKKwljaGFuZ2UgPSBuZXdfbWFyZ2luICogKHZidXNfcmF0ZSAvIHByZXNjYWxlX3ZhbHVlKTsKIAlpZiAoY2hhbmdlIDwgMSkKIAkJY2hhbmdlID0gMTsKIAlpZiAoY2hhbmdlID4gMHhmZmZmKQogCQljaGFuZ2UgPSAweGZmZmY7CiAJYXI3X3dkdF9jaGFuZ2UoY2hhbmdlKTsKLQltYXJnaW4gPSBjaGFuZ2UgKiBwcmVzY2FsZV92YWx1ZSAvIGFyN192YnVzX2ZyZXEoKTsKKwltYXJnaW4gPSBjaGFuZ2UgKiBwcmVzY2FsZV92YWx1ZSAvIHZidXNfcmF0ZTsKIAlwcmludGsoS0VSTl9JTkZPIERSVk5BTUUKIAkgICAgICAgIjogdGltZXIgbWFyZ2luICVkIHNlY29uZHMgKHByZXNjYWxlICVkLCBjaGFuZ2UgJWQsIGZyZXEgJWQpXG4iLAotCSAgICAgICBtYXJnaW4sIHByZXNjYWxlX3ZhbHVlLCBjaGFuZ2UsIGFyN192YnVzX2ZyZXEoKSk7CisJICAgICAgIG1hcmdpbiwgcHJlc2NhbGVfdmFsdWUsIGNoYW5nZSwgdmJ1c19yYXRlKTsKIH0KIAogc3RhdGljIHZvaWQgYXI3X3dkdF9lbmFibGVfd2R0KHZvaWQpCkBAIC0yOTgsNiArMzAzLDEzIEBACiAJCWdvdG8gb3V0X21lbV9yZWdpb247CiAJfQogCisJdmJ1c19jbGsgPSBjbGtfZ2V0KE5VTEwsICJ2YnVzIik7CisJaWYgKElTX0VSUih2YnVzX2NsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogY291bGQgbm90IGdldCB2YnVzIGNsb2NrXG4iKTsKKwkJcmMgPSBQVFJfRVJSKHZidXNfY2xrKTsKKwkJZ290byBvdXRfbWVtX3JlZ2lvbjsKKwl9CisKIAlhcjdfd2R0X2Rpc2FibGVfd2R0KCk7CiAJYXI3X3dkdF9wcmVzY2FsZShwcmVzY2FsZV92YWx1ZSk7CiAJYXI3X3dkdF91cGRhdGVfbWFyZ2luKG1hcmdpbik7CmRpZmYgLS1naXQgYS9mcy9kbG0vYXN0LmMgYi9mcy9kbG0vYXN0LmMKaW5kZXggZGMyYWQ2MC4uNDMxNGYwZCAxMDA2NDQKLS0tIGEvZnMvZGxtL2FzdC5jCisrKyBiL2ZzL2RsbS9hc3QuYwpAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqCiAqKiAgQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKioKICoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMzMsMTAgKzMzLDEwIEBACiAJc3Bpbl91bmxvY2soJmFzdF9xdWV1ZV9sb2NrKTsKIH0KIAotdm9pZCBkbG1fYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IGJhc3Rtb2RlKQordm9pZCBkbG1fYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IG1vZGUpCiB7CiAJaWYgKGxrYi0+bGtiX2ZsYWdzICYgRExNX0lGTF9VU0VSKSB7Ci0JCWRsbV91c2VyX2FkZF9hc3QobGtiLCB0eXBlLCBiYXN0bW9kZSk7CisJCWRsbV91c2VyX2FkZF9hc3QobGtiLCB0eXBlLCBtb2RlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDQsMTAgKzQ0LDIxIEBACiAJaWYgKCEobGtiLT5sa2JfYXN0X3R5cGUgJiAoQVNUX0NPTVAgfCBBU1RfQkFTVCkpKSB7CiAJCWtyZWZfZ2V0KCZsa2ItPmxrYl9yZWYpOwogCQlsaXN0X2FkZF90YWlsKCZsa2ItPmxrYl9hc3RxdWV1ZSwgJmFzdF9xdWV1ZSk7CisJCWxrYi0+bGtiX2FzdF9maXJzdCA9IHR5cGU7CiAJfQorCisJLyogc2FuaXR5IGNoZWNrLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuICovCisKKwlpZiAoKHR5cGUgPT0gQVNUX0NPTVApICYmIChsa2ItPmxrYl9hc3RfdHlwZSAmIEFTVF9DT01QKSkKKwkJbG9nX3ByaW50KCJyZXBlYXQgY2FzdCAlZCBjYXN0bW9kZSAlZCBsb2NrICV4ICVzIiwKKwkJCSAgbW9kZSwgbGtiLT5sa2JfY2FzdG1vZGUsCisJCQkgIGxrYi0+bGtiX2lkLCBsa2ItPmxrYl9yZXNvdXJjZS0+cmVzX25hbWUpOworCiAJbGtiLT5sa2JfYXN0X3R5cGUgfD0gdHlwZTsKLQlpZiAoYmFzdG1vZGUpCi0JCWxrYi0+bGtiX2Jhc3Rtb2RlID0gYmFzdG1vZGU7CisJaWYgKHR5cGUgPT0gQVNUX0JBU1QpCisJCWxrYi0+bGtiX2Jhc3Rtb2RlID0gbW9kZTsKKwllbHNlCisJCWxrYi0+bGtiX2Nhc3Rtb2RlID0gbW9kZTsKIAlzcGluX3VubG9jaygmYXN0X3F1ZXVlX2xvY2spOwogCiAJc2V0X2JpdChXQUtFX0FTVFMsICZhc3RkX3dha2VmbGFncyk7CkBAIC01OSw5ICs3MCw5IEBACiAJc3RydWN0IGRsbV9scyAqbHMgPSBOVUxMOwogCXN0cnVjdCBkbG1fcnNiICpyID0gTlVMTDsKIAlzdHJ1Y3QgZGxtX2xrYiAqbGtiOwotCXZvaWQgKCpjYXN0KSAodm9pZCAqYXN0cGFyYW0pOwotCXZvaWQgKCpiYXN0KSAodm9pZCAqYXN0cGFyYW0sIGludCBtb2RlKTsKLQlpbnQgdHlwZSA9IDAsIGJhc3Rtb2RlOworCXZvaWQgKCpjYXN0Zm4pICh2b2lkICphc3RwYXJhbSk7CisJdm9pZCAoKmJhc3RmbikgKHZvaWQgKmFzdHBhcmFtLCBpbnQgbW9kZSk7CisJaW50IHR5cGUsIGZpcnN0LCBiYXN0bW9kZSwgY2FzdG1vZGUsIGRvX2Jhc3QsIGRvX2Nhc3QsIGxhc3RfY2FzdG1vZGU7CiAKIHJlcGVhdDoKIAlzcGluX2xvY2soJmFzdF9xdWV1ZV9sb2NrKTsKQEAgLTc1LDE3ICs4Niw0OCBAQAogCQlsaXN0X2RlbCgmbGtiLT5sa2JfYXN0cXVldWUpOwogCQl0eXBlID0gbGtiLT5sa2JfYXN0X3R5cGU7CiAJCWxrYi0+bGtiX2FzdF90eXBlID0gMDsKKwkJZmlyc3QgPSBsa2ItPmxrYl9hc3RfZmlyc3Q7CisJCWxrYi0+bGtiX2FzdF9maXJzdCA9IDA7CiAJCWJhc3Rtb2RlID0gbGtiLT5sa2JfYmFzdG1vZGU7Ci0KKwkJY2FzdG1vZGUgPSBsa2ItPmxrYl9jYXN0bW9kZTsKKwkJY2FzdGZuID0gbGtiLT5sa2JfYXN0Zm47CisJCWJhc3RmbiA9IGxrYi0+bGtiX2Jhc3RmbjsKIAkJc3Bpbl91bmxvY2soJmFzdF9xdWV1ZV9sb2NrKTsKLQkJY2FzdCA9IGxrYi0+bGtiX2FzdGZuOwotCQliYXN0ID0gbGtiLT5sa2JfYmFzdGZuOwogCi0JCWlmICgodHlwZSAmIEFTVF9DT01QKSAmJiBjYXN0KQotCQkJY2FzdChsa2ItPmxrYl9hc3RwYXJhbSk7CisJCWRvX2Nhc3QgPSAodHlwZSAmIEFTVF9DT01QKSAmJiBjYXN0Zm47CisJCWRvX2Jhc3QgPSAodHlwZSAmIEFTVF9CQVNUKSAmJiBiYXN0Zm47CiAKLQkJaWYgKCh0eXBlICYgQVNUX0JBU1QpICYmIGJhc3QpCi0JCQliYXN0KGxrYi0+bGtiX2FzdHBhcmFtLCBiYXN0bW9kZSk7CisJCS8qIFNraXAgYSBiYXN0IGlmIGl0cyBibG9ja2luZyBtb2RlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKwkJICAgZ3JhbnRlZCBtb2RlIG9mIHRoZSBwcmVjZWRpbmcgY2FzdC4gKi8KKworCQlpZiAoZG9fYmFzdCkgeworCQkJaWYgKGZpcnN0ID09IEFTVF9DT01QKQorCQkJCWxhc3RfY2FzdG1vZGUgPSBjYXN0bW9kZTsKKwkJCWVsc2UKKwkJCQlsYXN0X2Nhc3Rtb2RlID0gbGtiLT5sa2JfY2FzdG1vZGVfZG9uZTsKKwkJCWlmIChkbG1fbW9kZXNfY29tcGF0KGJhc3Rtb2RlLCBsYXN0X2Nhc3Rtb2RlKSkKKwkJCQlkb19iYXN0ID0gMDsKKwkJfQorCisJCWlmIChmaXJzdCA9PSBBU1RfQ09NUCkgeworCQkJaWYgKGRvX2Nhc3QpCisJCQkJY2FzdGZuKGxrYi0+bGtiX2FzdHBhcmFtKTsKKwkJCWlmIChkb19iYXN0KQorCQkJCWJhc3Rmbihsa2ItPmxrYl9hc3RwYXJhbSwgYmFzdG1vZGUpOworCQl9IGVsc2UgaWYgKGZpcnN0ID09IEFTVF9CQVNUKSB7CisJCQlpZiAoZG9fYmFzdCkKKwkJCQliYXN0Zm4obGtiLT5sa2JfYXN0cGFyYW0sIGJhc3Rtb2RlKTsKKwkJCWlmIChkb19jYXN0KQorCQkJCWNhc3Rmbihsa2ItPmxrYl9hc3RwYXJhbSk7CisJCX0gZWxzZSB7CisJCQlsb2dfZXJyb3IobHMsICJiYWQgYXN0X2ZpcnN0ICVkIGFzdF90eXBlICVkIiwKKwkJCQkgIGZpcnN0LCB0eXBlKTsKKwkJfQorCisJCWlmIChkb19jYXN0KQorCQkJbGtiLT5sa2JfY2FzdG1vZGVfZG9uZSA9IGNhc3Rtb2RlOworCQlpZiAoZG9fYmFzdCkKKwkJCWxrYi0+bGtiX2Jhc3Rtb2RlX2RvbmUgPSBiYXN0bW9kZTsKIAogCQkvKiB0aGlzIHJlbW92ZXMgdGhlIHJlZmVyZW5jZSBhZGRlZCBieSBkbG1fYWRkX2FzdAogCQkgICBhbmQgbWF5IHJlc3VsdCBpbiB0aGUgbGtiIGJlaW5nIGZyZWVkICovCmRpZmYgLS1naXQgYS9mcy9kbG0vYXN0LmggYi9mcy9kbG0vYXN0LmgKaW5kZXggMWI1ZmM1Zi4uYmNiMWFhYiAxMDA2NDQKLS0tIGEvZnMvZGxtL2FzdC5oCisrKyBiL2ZzL2RsbS9hc3QuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqCi0qKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKioKICoqICBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICoqICBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMTMsNyArMTMsNyBAQAogI2lmbmRlZiBfX0FTVERfRE9UX0hfXwogI2RlZmluZSBfX0FTVERfRE9UX0hfXwogCi12b2lkIGRsbV9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgYmFzdG1vZGUpOwordm9pZCBkbG1fYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IG1vZGUpOwogdm9pZCBkbG1fZGVsX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiKTsKIAogdm9pZCBkbG1fYXN0ZF93YWtlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2RlYnVnX2ZzLmMgYi9mcy9kbG0vZGVidWdfZnMuYwppbmRleCAzNzVhMjM1Li4yOWQ2MTM5IDEwMDY0NAotLS0gYS9mcy9kbG0vZGVidWdfZnMuYworKysgYi9mcy9kbG0vZGVidWdfZnMuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCQlsa2ItPmxrYl9zdGF0dXMsCiAJCQlsa2ItPmxrYl9ncm1vZGUsCiAJCQlsa2ItPmxrYl9ycW1vZGUsCi0JCQlsa2ItPmxrYl9oaWdoYmFzdCwKKwkJCWxrYi0+bGtiX2Jhc3Rtb2RlLAogCQkJcnNiX2xvb2t1cCwKIAkJCWxrYi0+bGtiX3dhaXRfdHlwZSwKIAkJCWxrYi0+bGtiX2x2YnNlcSwKZGlmZiAtLWdpdCBhL2ZzL2RsbS9kbG1faW50ZXJuYWwuaCBiL2ZzL2RsbS9kbG1faW50ZXJuYWwuaAppbmRleCA4MjZkM2RjLi5mNjMyYjU4IDEwMDY0NAotLS0gYS9mcy9kbG0vZGxtX2ludGVybmFsLmgKKysrIGIvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCkBAIC0yLDcgKzIsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioKICoqICBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqKgogKiogIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogKiogIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0yMzIsMTEgKzIzMiwxNyBAQAogCWludDhfdAkJCWxrYl9zdGF0dXM7ICAgICAvKiBncmFudGVkLCB3YWl0aW5nLCBjb252ZXJ0ICovCiAJaW50OF90CQkJbGtiX3JxbW9kZTsJLyogcmVxdWVzdGVkIGxvY2sgbW9kZSAqLwogCWludDhfdAkJCWxrYl9ncm1vZGU7CS8qIGdyYW50ZWQgbG9jayBtb2RlICovCi0JaW50OF90CQkJbGtiX2Jhc3Rtb2RlOwkvKiByZXF1ZXN0ZWQgbW9kZSAqLwogCWludDhfdAkJCWxrYl9oaWdoYmFzdDsJLyogaGlnaGVzdCBtb2RlIGJhc3Qgc2VudCBmb3IgKi8KKwogCWludDhfdAkJCWxrYl93YWl0X3R5cGU7CS8qIHR5cGUgb2YgcmVwbHkgd2FpdGluZyBmb3IgKi8KIAlpbnQ4X3QJCQlsa2Jfd2FpdF9jb3VudDsKIAlpbnQ4X3QJCQlsa2JfYXN0X3R5cGU7CS8qIHR5cGUgb2YgYXN0IHF1ZXVlZCBmb3IgKi8KKwlpbnQ4X3QJCQlsa2JfYXN0X2ZpcnN0OwkvKiB0eXBlIG9mIGZpcnN0IGFzdCBxdWV1ZWQgKi8KKworCWludDhfdAkJCWxrYl9iYXN0bW9kZTsJLyogcmVxIG1vZGUgb2YgcXVldWVkIGJhc3QgKi8KKwlpbnQ4X3QJCQlsa2JfY2FzdG1vZGU7CS8qIGdyIG1vZGUgb2YgcXVldWVkIGNhc3QgKi8KKwlpbnQ4X3QJCQlsa2JfYmFzdG1vZGVfZG9uZTsgLyogbGFzdCBkZWxpdmVyZWQgYmFzdG1vZGUgKi8KKwlpbnQ4X3QJCQlsa2JfY2FzdG1vZGVfZG9uZTsgLyogbGFzdCBkZWxpdmVyZWQgY2FzdG1vZGUgKi8KIAogCXN0cnVjdCBsaXN0X2hlYWQJbGtiX2lkdGJsX2xpc3Q7CS8qIGxvY2tzcGFjZSBsa2J0YmwgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxrYl9zdGF0ZXF1ZXVlOwkvKiByc2IgZy9jL3cgbGlzdCAqLwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2suYyBiL2ZzL2RsbS9sb2NrLmMKaW5kZXggOWMwYzFkYi4uNDZmZmQzZSAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2suYworKysgYi9mcy9kbG0vbG9jay5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioKLSoqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiogIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqKgogKiogIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogKiogIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0zMDcsNyArMzA3LDcgQEAKIAlsa2ItPmxrYl9sa3NiLT5zYl9zdGF0dXMgPSBydjsKIAlsa2ItPmxrYl9sa3NiLT5zYl9mbGFncyA9IGxrYi0+bGtiX3NiZmxhZ3M7CiAKLQlkbG1fYWRkX2FzdChsa2IsIEFTVF9DT01QLCAwKTsKKwlkbG1fYWRkX2FzdChsa2IsIEFTVF9DT01QLCBsa2ItPmxrYl9ncm1vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfY2FzdF9vdmVybGFwKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiKQpAQCAtMzIwLDEwICszMjAsMTIgQEAKIHsKIAlsa2ItPmxrYl90aW1lX2Jhc3QgPSBrdGltZV9nZXQoKTsKIAotCWlmIChpc19tYXN0ZXJfY29weShsa2IpKQorCWlmIChpc19tYXN0ZXJfY29weShsa2IpKSB7CisJCWxrYi0+bGtiX2Jhc3Rtb2RlID0gcnFtb2RlOyAvKiBwcmludGVkIGJ5IGRlYnVnZnMgKi8KIAkJc2VuZF9iYXN0KHIsIGxrYiwgcnFtb2RlKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZGxtX2FkZF9hc3QobGtiLCBBU1RfQkFTVCwgcnFtb2RlKTsKKwl9CiB9CiAKIC8qCkBAIC0yMjgwLDIwICsyMjgyLDMwIEBACiAJaWYgKGNhbl9iZV9xdWV1ZWQobGtiKSkgewogCQllcnJvciA9IC1FSU5QUk9HUkVTUzsKIAkJYWRkX2xrYihyLCBsa2IsIERMTV9MS1NUU19XQUlUSU5HKTsKLQkJc2VuZF9ibG9ja2luZ19hc3RzKHIsIGxrYik7CiAJCWFkZF90aW1lb3V0KGxrYik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWVycm9yID0gLUVBR0FJTjsKLQlpZiAoZm9yY2VfYmxvY2tpbmdfYXN0cyhsa2IpKQotCQlzZW5kX2Jsb2NraW5nX2FzdHNfYWxsKHIsIGxrYik7CiAJcXVldWVfY2FzdChyLCBsa2IsIC1FQUdBSU4pOwotCiAgb3V0OgogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgZG9fcmVxdWVzdF9lZmZlY3RzKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAorCQkJICAgICAgIGludCBlcnJvcikKK3sKKwlzd2l0Y2ggKGVycm9yKSB7CisJY2FzZSAtRUFHQUlOOgorCQlpZiAoZm9yY2VfYmxvY2tpbmdfYXN0cyhsa2IpKQorCQkJc2VuZF9ibG9ja2luZ19hc3RzX2FsbChyLCBsa2IpOworCQlicmVhazsKKwljYXNlIC1FSU5QUk9HUkVTUzoKKwkJc2VuZF9ibG9ja2luZ19hc3RzKHIsIGxrYik7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBkb19jb252ZXJ0KHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiKQogewogCWludCBlcnJvciA9IDA7CkBAIC0yMzA0LDcgKzIzMTYsNiBAQAogCWlmIChjYW5fYmVfZ3JhbnRlZChyLCBsa2IsIDEsICZkZWFkbGspKSB7CiAJCWdyYW50X2xvY2sociwgbGtiKTsKIAkJcXVldWVfY2FzdChyLCBsa2IsIDApOwotCQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIzMzQsNyArMjM0NSw2IEBACiAJCWlmIChfY2FuX2JlX2dyYW50ZWQociwgbGtiLCAxKSkgewogCQkJZ3JhbnRfbG9jayhyLCBsa2IpOwogCQkJcXVldWVfY2FzdChyLCBsa2IsIDApOwotCQkJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCS8qIGVsc2UgZmFsbCB0aHJvdWdoIGFuZCBtb3ZlIHRvIGNvbnZlcnQgcXVldWUgKi8KQEAgLTIzNDQsMjggKzIzNTQsNDcgQEAKIAkJZXJyb3IgPSAtRUlOUFJPR1JFU1M7CiAJCWRlbF9sa2IociwgbGtiKTsKIAkJYWRkX2xrYihyLCBsa2IsIERMTV9MS1NUU19DT05WRVJUKTsKLQkJc2VuZF9ibG9ja2luZ19hc3RzKHIsIGxrYik7CiAJCWFkZF90aW1lb3V0KGxrYik7CiAJCWdvdG8gb3V0OwogCX0KIAogCWVycm9yID0gLUVBR0FJTjsKLQlpZiAoZm9yY2VfYmxvY2tpbmdfYXN0cyhsa2IpKQotCQlzZW5kX2Jsb2NraW5nX2FzdHNfYWxsKHIsIGxrYik7CiAJcXVldWVfY2FzdChyLCBsa2IsIC1FQUdBSU4pOwotCiAgb3V0OgogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgZG9fY29udmVydF9lZmZlY3RzKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAorCQkJICAgICAgIGludCBlcnJvcikKK3sKKwlzd2l0Y2ggKGVycm9yKSB7CisJY2FzZSAwOgorCQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOworCQkvKiBncmFudF9wZW5kaW5nX2xvY2tzIGFsc28gc2VuZHMgYmFzdHMgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUFHQUlOOgorCQlpZiAoZm9yY2VfYmxvY2tpbmdfYXN0cyhsa2IpKQorCQkJc2VuZF9ibG9ja2luZ19hc3RzX2FsbChyLCBsa2IpOworCQlicmVhazsKKwljYXNlIC1FSU5QUk9HUkVTUzoKKwkJc2VuZF9ibG9ja2luZ19hc3RzKHIsIGxrYik7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBkb191bmxvY2soc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IpCiB7CiAJcmVtb3ZlX2xvY2sociwgbGtiKTsKIAlxdWV1ZV9jYXN0KHIsIGxrYiwgLURMTV9FVU5MT0NLKTsKLQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOwogCXJldHVybiAtRExNX0VVTkxPQ0s7CiB9CiAKK3N0YXRpYyB2b2lkIGRvX3VubG9ja19lZmZlY3RzKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiLAorCQkJICAgICAgaW50IGVycm9yKQoreworCWdyYW50X3BlbmRpbmdfbG9ja3Mocik7Cit9CisKIC8qIHJldHVybnM6IDAgZGlkIG5vdGhpbmcsIC1ETE1fRUNBTkNFTCBjYW5jZWxlZCBsb2NrICovCiAgCiBzdGF0aWMgaW50IGRvX2NhbmNlbChzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYikKQEAgLTIzNzUsMTIgKzI0MDQsMTggQEAKIAllcnJvciA9IHJldmVydF9sb2NrKHIsIGxrYik7CiAJaWYgKGVycm9yKSB7CiAJCXF1ZXVlX2Nhc3QociwgbGtiLCAtRExNX0VDQU5DRUwpOwotCQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOwogCQlyZXR1cm4gLURMTV9FQ0FOQ0VMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZG9fY2FuY2VsX2VmZmVjdHMoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IsCisJCQkgICAgICBpbnQgZXJyb3IpCit7CisJaWYgKGVycm9yKQorCQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOworfQorCiAvKgogICogRm91ciBzdGFnZSAzIHZhcmlldGllczoKICAqIF9yZXF1ZXN0X2xvY2soKSwgX2NvbnZlcnRfbG9jaygpLCBfdW5sb2NrX2xvY2soKSwgX2NhbmNlbF9sb2NrKCkKQEAgLTI0MDIsMTEgKzI0MzcsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGlzX3JlbW90ZShyKSkKKwlpZiAoaXNfcmVtb3RlKHIpKSB7CiAJCS8qIHJlY2VpdmVfcmVxdWVzdCgpIGNhbGxzIGRvX3JlcXVlc3QoKSBvbiByZW1vdGUgbm9kZSAqLwogCQllcnJvciA9IHNlbmRfcmVxdWVzdChyLCBsa2IpOwotCWVsc2UKKwl9IGVsc2UgewogCQllcnJvciA9IGRvX3JlcXVlc3QociwgbGtiKTsKKwkJLyogZm9yIHJlbW90ZSBsb2NrcyB0aGUgcmVxdWVzdF9yZXBseSBpcyBzZW50CisJCSAgIGJldHdlZW4gZG9fcmVxdWVzdCBhbmQgZG9fcmVxdWVzdF9lZmZlY3RzICovCisJCWRvX3JlcXVlc3RfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKKwl9CiAgb3V0OgogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI0MTcsMTEgKzI0NTYsMTUgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoaXNfcmVtb3RlKHIpKQorCWlmIChpc19yZW1vdGUocikpIHsKIAkJLyogcmVjZWl2ZV9jb252ZXJ0KCkgY2FsbHMgZG9fY29udmVydCgpIG9uIHJlbW90ZSBub2RlICovCiAJCWVycm9yID0gc2VuZF9jb252ZXJ0KHIsIGxrYik7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWVycm9yID0gZG9fY29udmVydChyLCBsa2IpOworCQkvKiBmb3IgcmVtb3RlIGxvY2tzIHRoZSBjb252ZXJ0X3JlcGx5IGlzIHNlbnQKKwkJICAgYmV0d2VlbiBkb19jb252ZXJ0IGFuZCBkb19jb252ZXJ0X2VmZmVjdHMgKi8KKwkJZG9fY29udmVydF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOworCX0KIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI0MzIsMTEgKzI0NzUsMTUgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoaXNfcmVtb3RlKHIpKQorCWlmIChpc19yZW1vdGUocikpIHsKIAkJLyogcmVjZWl2ZV91bmxvY2soKSBjYWxscyBkb191bmxvY2soKSBvbiByZW1vdGUgbm9kZSAqLwogCQllcnJvciA9IHNlbmRfdW5sb2NrKHIsIGxrYik7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWVycm9yID0gZG9fdW5sb2NrKHIsIGxrYik7CisJCS8qIGZvciByZW1vdGUgbG9ja3MgdGhlIHVubG9ja19yZXBseSBpcyBzZW50CisJCSAgIGJldHdlZW4gZG9fdW5sb2NrIGFuZCBkb191bmxvY2tfZWZmZWN0cyAqLworCQlkb191bmxvY2tfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKKwl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yNDQ3LDExICsyNDk0LDE1IEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKGlzX3JlbW90ZShyKSkKKwlpZiAoaXNfcmVtb3RlKHIpKSB7CiAJCS8qIHJlY2VpdmVfY2FuY2VsKCkgY2FsbHMgZG9fY2FuY2VsKCkgb24gcmVtb3RlIG5vZGUgKi8KIAkJZXJyb3IgPSBzZW5kX2NhbmNlbChyLCBsa2IpOwotCWVsc2UKKwl9IGVsc2UgewogCQllcnJvciA9IGRvX2NhbmNlbChyLCBsa2IpOworCQkvKiBmb3IgcmVtb3RlIGxvY2tzIHRoZSBjYW5jZWxfcmVwbHkgaXMgc2VudAorCQkgICBiZXR3ZWVuIGRvX2NhbmNlbCBhbmQgZG9fY2FuY2VsX2VmZmVjdHMgKi8KKwkJZG9fY2FuY2VsX2VmZmVjdHMociwgbGtiLCBlcnJvcik7CisJfQogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMzE5MSw2ICszMjQyLDcgQEAKIAlhdHRhY2hfbGtiKHIsIGxrYik7CiAJZXJyb3IgPSBkb19yZXF1ZXN0KHIsIGxrYik7CiAJc2VuZF9yZXF1ZXN0X3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCWRvX3JlcXVlc3RfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKIAogCXVubG9ja19yc2Iocik7CiAJcHV0X3JzYihyKTsKQEAgLTMyMjYsMTUgKzMyNzgsMTkgQEAKIAkJZ290byBvdXQ7CiAKIAlyZWNlaXZlX2ZsYWdzKGxrYiwgbXMpOworCiAJZXJyb3IgPSByZWNlaXZlX2NvbnZlcnRfYXJncyhscywgbGtiLCBtcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZXBseTsKKwlpZiAoZXJyb3IpIHsKKwkJc2VuZF9jb252ZXJ0X3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CisKIAlyZXBseSA9ICFkb3duX2NvbnZlcnNpb24obGtiKTsKIAogCWVycm9yID0gZG9fY29udmVydChyLCBsa2IpOwotIG91dF9yZXBseToKIAlpZiAocmVwbHkpCiAJCXNlbmRfY29udmVydF9yZXBseShyLCBsa2IsIGVycm9yKTsKKwlkb19jb252ZXJ0X2VmZmVjdHMociwgbGtiLCBlcnJvcik7CiAgb3V0OgogCXVubG9ja19yc2Iocik7CiAJcHV0X3JzYihyKTsKQEAgLTMyNjYsMTMgKzMzMjIsMTYgQEAKIAkJZ290byBvdXQ7CiAKIAlyZWNlaXZlX2ZsYWdzKGxrYiwgbXMpOworCiAJZXJyb3IgPSByZWNlaXZlX3VubG9ja19hcmdzKGxzLCBsa2IsIG1zKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JlcGx5OworCWlmIChlcnJvcikgeworCQlzZW5kX3VubG9ja19yZXBseShyLCBsa2IsIGVycm9yKTsKKwkJZ290byBvdXQ7CisJfQogCiAJZXJyb3IgPSBkb191bmxvY2sociwgbGtiKTsKLSBvdXRfcmVwbHk6CiAJc2VuZF91bmxvY2tfcmVwbHkociwgbGtiLCBlcnJvcik7CisJZG9fdW5sb2NrX2VmZmVjdHMociwgbGtiLCBlcnJvcik7CiAgb3V0OgogCXVubG9ja19yc2Iocik7CiAJcHV0X3JzYihyKTsKQEAgLTMzMDcsNiArMzM2Niw3IEBACiAKIAllcnJvciA9IGRvX2NhbmNlbChyLCBsa2IpOwogCXNlbmRfY2FuY2VsX3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCWRvX2NhbmNlbF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOwogIG91dDoKIAl1bmxvY2tfcnNiKHIpOwogCXB1dF9yc2Iocik7CmRpZmYgLS1naXQgYS9mcy9kbG0vbG9ja3NwYWNlLmMgYi9mcy9kbG0vbG9ja3NwYWNlLmMKaW5kZXggYzAxMGVjZi4uMjZhOGJkNCAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2tzcGFjZS5jCisrKyBiL2ZzL2RsbS9sb2Nrc3BhY2UuYwpAQCAtMTkxLDYgKzE5MSwxOCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBkbG1fdWV2ZW50KHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJICAgICAgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQoreworCXN0cnVjdCBkbG1fbHMgKmxzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkbG1fbHMsIGxzX2tvYmopOworCisJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1NQQUNFPSVzIiwgbHMtPmxzX25hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGtzZXRfdWV2ZW50X29wcyBkbG1fdWV2ZW50X29wcyA9IHsKKwkudWV2ZW50ID0gZGxtX3VldmVudCwKK307CiAKIGludCBfX2luaXQgZGxtX2xvY2tzcGFjZV9pbml0KHZvaWQpCiB7CkBAIC0xOTksNyArMjExLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmbHNsaXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmbHNsaXN0X2xvY2spOwogCi0JZGxtX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJkbG0iLCBOVUxMLCBrZXJuZWxfa29iaik7CisJZGxtX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJkbG0iLCAmZGxtX3VldmVudF9vcHMsIGtlcm5lbF9rb2JqKTsKIAlpZiAoIWRsbV9rc2V0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4gbm90IGNyZWF0ZSBrc2V0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL3VzZXIuYyBiL2ZzL2RsbS91c2VyLmMKaW5kZXggZTczYTRiYi4uYTRiZmQzMSAxMDA2NDQKLS0tIGEvZnMvZGxtL3VzZXIuYworKysgYi9mcy9kbG0vdXNlci5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTE3Myw3ICsxNzMsNyBAQAogLyogd2UgY291bGQgcG9zc2libHkgY2hlY2sgaWYgdGhlIGNhbmNlbCBvZiBhbiBvcnBoYW4gaGFzIHJlc3VsdGVkIGluIHRoZSBsa2IKICAgIGJlaW5nIHJlbW92ZWQgYW5kIHRoZW4gcmVtb3ZlIHRoYXQgbGtiIGZyb20gdGhlIG9ycGhhbnMgbGlzdCBhbmQgZnJlZSBpdCAqLwogCi12b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBiYXN0bW9kZSkKK3ZvaWQgZGxtX3VzZXJfYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGRsbV9scyAqbHM7CiAJc3RydWN0IGRsbV91c2VyX2FyZ3MgKnVhOwpAQCAtMjA2LDggKzIwNiwxMCBAQAogCiAJYXN0X3R5cGUgPSBsa2ItPmxrYl9hc3RfdHlwZTsKIAlsa2ItPmxrYl9hc3RfdHlwZSB8PSB0eXBlOwotCWlmIChiYXN0bW9kZSkKLQkJbGtiLT5sa2JfYmFzdG1vZGUgPSBiYXN0bW9kZTsKKwlpZiAodHlwZSA9PSBBU1RfQkFTVCkKKwkJbGtiLT5sa2JfYmFzdG1vZGUgPSBtb2RlOworCWVsc2UKKwkJbGtiLT5sa2JfY2FzdG1vZGUgPSBtb2RlOwogCiAJaWYgKCFhc3RfdHlwZSkgewogCQlrcmVmX2dldCgmbGtiLT5sa2JfcmVmKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS91c2VyLmggYi9mcy9kbG0vdXNlci5oCmluZGV4IDFjOTY4NjQuLmYxOTYwOTEgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS91c2VyLmgKKysrIGIvZnMvZGxtL3VzZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKICAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC05LDcgKzksNyBAQAogI2lmbmRlZiBfX1VTRVJfRE9UX0hfXwogI2RlZmluZSBfX1VTRVJfRE9UX0hfXwogCi12b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBiYXN0bW9kZSk7Cit2b2lkIGRsbV91c2VyX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBtb2RlKTsKIGludCBkbG1fdXNlcl9pbml0KHZvaWQpOwogdm9pZCBkbG1fdXNlcl9leGl0KHZvaWQpOwogaW50IGRsbV9kZXZpY2VfZGVyZWdpc3RlcihzdHJ1Y3QgZGxtX2xzICpscyk7CmRpZmYgLS1naXQgYS9mcy9maWxlLmMgYi9mcy9maWxlLmMKaW5kZXggODdlMTI5MC4uMzgwMzlhZiAxMDA2NDQKLS0tIGEvZnMvZmlsZS5jCisrKyBiL2ZzL2ZpbGUuYwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJZXJyb3IgPSBmZDsKICNpZiAxCiAJLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKHJjdV9kZXJlZmVyZW5jZShmZHQtPmZkW2ZkXSkgIT0gTlVMTCkgeworCWlmIChyY3VfZGVyZWZlcmVuY2VfcmF3KGZkdC0+ZmRbZmRdKSAhPSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImFsbG9jX2ZkOiBzbG90ICVkIG5vdCBOVUxMIVxuIiwgZmQpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIoZmR0LT5mZFtmZF0sIE5VTEwpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL25mcy9LY29uZmlnIGIvZnMvbmZzL0tjb25maWcKaW5kZXggNTllNTY3My4uYTQzZDA3ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL0tjb25maWcKKysrIGIvZnMvbmZzL0tjb25maWcKQEAgLTk1LDggKzk1LDcgQEAKIAkgIE1vc3QgcGVvcGxlIHNheSBOIGhlcmUuCiAKIGNvbmZpZyBORlNfRlNDQUNIRQotCWJvb2wgIlByb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlib29sICJQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkZTX0ZTPW0gJiYgRlNDQUNIRSB8fCBORlNfRlM9eSAmJiBGU0NBQ0hFPXkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IE5GUyBkYXRhIHRvIGJlIGNhY2hlZCBsb2NhbGx5IG9uIGRpc2MgdGhyb3VnaApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IDEzYjVkMDcuLjE4ZTIwZmUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTI3MCw3ICsyNzAsOSBAQAogCQlibG9ja2VkID0gcC0+YmxvY2tlZDsKIAkJY29sbGVjdF9zaWdpZ25fc2lnY2F0Y2gocCwgJmlnbm9yZWQsICZjYXVnaHQpOwogCQludW1fdGhyZWFkcyA9IGF0b21pY19yZWFkKCZwLT5zaWduYWwtPmNvdW50KTsKKwkJcmN1X3JlYWRfbG9jaygpOyAgLyogRklYTUU6IGlzIHRoaXMgY29ycmVjdD8gKi8KIAkJcXNpemUgPSBhdG9taWNfcmVhZCgmX190YXNrX2NyZWQocCktPnVzZXItPnNpZ3BlbmRpbmcpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcWxpbSA9IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfU0lHUEVORElOR10ucmxpbV9jdXI7CiAJCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDU4MzI0YzIuLjYyM2UyZmYgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0xMDk1LDggKzEwOTUsMTIgQEAKIAlpZiAoIWNhcGFibGUoQ0FQX0FVRElUX0NPTlRST0wpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JaWYgKGN1cnJlbnQgIT0gcGlkX3Rhc2socHJvY19waWQoaW5vZGUpLCBQSURUWVBFX1BJRCkpCisJcmN1X3JlYWRfbG9jaygpOworCWlmIChjdXJyZW50ICE9IHBpZF90YXNrKHByb2NfcGlkKGlub2RlKSwgUElEVFlQRV9QSUQpKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVQRVJNOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChjb3VudCA+PSBQQUdFX1NJWkUpCiAJCWNvdW50ID0gUEFHRV9TSVpFIC0gMTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMgYi9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jCmluZGV4IDEyMzI1N2IuLmY4NjUwZGMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKKysrIGIvZnMvcHJvYy9wcm9jX2RldnRyZWUuYwpAQCAtMTAsMTYgKzEwLDE5IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotI2lmbmRlZiBIQVZFX0FSQ0hfREVWVFJFRV9GSVhVUFMKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbm9kZV9wcm9jX2VudHJ5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJICAgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCiB7Ci19CisjaWZkZWYgSEFWRV9BUkNIX0RFVlRSRUVfRklYVVBTCisJbnAtPnBkZSA9IGRlOwogI2VuZGlmCit9CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZGV2aWNlX3RyZWU7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZQppbmRleCA1NjY0MWZlLi41YzVhMzY2IDEwMDY0NAotLS0gYS9mcy94ZnMvTWFrZWZpbGUKKysrIGIvZnMveGZzL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw3IEBACiAjIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogIwogCi1FWFRSQV9DRkxBR1MgKz0JIC1JJChzcmMpIC1JJChzcmMpL2xpbnV4LTIuNiAtZnVuc2lnbmVkLWNoYXIKK0VYVFJBX0NGTEFHUyArPQkgLUkkKHNyYykgLUkkKHNyYykvbGludXgtMi42CiAKIFhGU19MSU5VWCA6PSBsaW51eC0yLjYKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmMgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uYwppbmRleCAyZDNmOTBhLi5iYzc0MDU1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L2ttZW0uYworKysgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uYwpAQCAtMTYsNyArMTYsNiBAQAogICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtMjQsOCArMjMsMjUgQEAKICNpbmNsdWRlICJ0aW1lLmgiCiAjaW5jbHVkZSAia21lbS5oIgogCi0jZGVmaW5lIE1BWF9WTUFMTE9DUwk2Ci0jZGVmaW5lIE1BWF9TTEFCX1NJWkUJMHgyMDAwMAorLyoKKyAqIEdyZWVkeSBhbGxvY2F0aW9uLiAgTWF5IGZhaWwgYW5kIG1heSByZXR1cm4gdm1hbGxvY2VkIG1lbW9yeS4KKyAqCisgKiBNdXN0IGJlIGZyZWVkIHVzaW5nIGttZW1fZnJlZV9sYXJnZS4KKyAqLwordm9pZCAqCitrbWVtX3phbGxvY19ncmVlZHkoc2l6ZV90ICpzaXplLCBzaXplX3QgbWluc2l6ZSwgc2l6ZV90IG1heHNpemUpCit7CisJdm9pZAkJKnB0cjsKKwlzaXplX3QJCWttc2l6ZSA9IG1heHNpemU7CisKKwl3aGlsZSAoIShwdHIgPSBrbWVtX3phbGxvY19sYXJnZShrbXNpemUpKSkgeworCQlpZiAoKGttc2l6ZSA+Pj0gMSkgPD0gbWluc2l6ZSkKKwkJCWttc2l6ZSA9IG1pbnNpemU7CisJfQorCWlmIChwdHIpCisJCSpzaXplID0ga21zaXplOworCXJldHVybiBwdHI7Cit9CiAKIHZvaWQgKgoga21lbV9hbGxvYyhzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQpAQCAtMzQsMTkgKzUwLDggQEAKIAlnZnBfdAlsZmxhZ3MgPSBrbWVtX2ZsYWdzX2NvbnZlcnQoZmxhZ3MpOwogCXZvaWQJKnB0cjsKIAotI2lmZGVmIERFQlVHCi0JaWYgKHVubGlrZWx5KCEoZmxhZ3MgJiBLTV9MQVJHRSkgJiYgKHNpemUgPiBQQUdFX1NJWkUpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJMYXJnZSAlcyBhdHRlbXB0LCBzaXplPSVsZFxuIiwKLQkJCV9fZnVuY19fLCAobG9uZylzaXplKTsKLQkJZHVtcF9zdGFjaygpOwotCX0KLSNlbmRpZgotCiAJZG8gewotCQlpZiAoc2l6ZSA8IE1BWF9TTEFCX1NJWkUgfHwgcmV0cmllcyA+IE1BWF9WTUFMTE9DUykKLQkJCXB0ciA9IGttYWxsb2Moc2l6ZSwgbGZsYWdzKTsKLQkJZWxzZQotCQkJcHRyID0gX192bWFsbG9jKHNpemUsIGxmbGFncywgUEFHRV9LRVJORUwpOworCQlwdHIgPSBrbWFsbG9jKHNpemUsIGxmbGFncyk7CiAJCWlmIChwdHIgfHwgKGZsYWdzICYgKEtNX01BWUZBSUx8S01fTk9TTEVFUCkpKQogCQkJcmV0dXJuIHB0cjsKIAkJaWYgKCEoKytyZXRyaWVzICUgMTAwKSkKQEAgLTY4LDI3ICs3Myw2IEBACiAJcmV0dXJuIHB0cjsKIH0KIAotdm9pZCAqCi1rbWVtX3phbGxvY19ncmVlZHkoc2l6ZV90ICpzaXplLCBzaXplX3QgbWluc2l6ZSwgc2l6ZV90IG1heHNpemUsCi0JCSAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKLXsKLQl2b2lkCQkqcHRyOwotCXNpemVfdAkJa21zaXplID0gbWF4c2l6ZTsKLQl1bnNpZ25lZCBpbnQJa21mbGFncyA9IChmbGFncyAmIH5LTV9TTEVFUCkgfCBLTV9OT1NMRUVQOwotCi0Jd2hpbGUgKCEocHRyID0ga21lbV96YWxsb2Moa21zaXplLCBrbWZsYWdzKSkpIHsKLQkJaWYgKChrbXNpemUgPD0gbWluc2l6ZSkgJiYgKGZsYWdzICYgS01fTk9TTEVFUCkpCi0JCQlicmVhazsKLQkJaWYgKChrbXNpemUgPj49IDEpIDw9IG1pbnNpemUpIHsKLQkJCWttc2l6ZSA9IG1pbnNpemU7Ci0JCQlrbWZsYWdzID0gZmxhZ3M7Ci0JCX0KLQl9Ci0JaWYgKHB0cikKLQkJKnNpemUgPSBrbXNpemU7Ci0JcmV0dXJuIHB0cjsKLX0KLQogdm9pZAoga21lbV9mcmVlKGNvbnN0IHZvaWQgKnB0cikKIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYva21lbS5oIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKaW5kZXggMTc5Y2JkNi4uZjdjOGY3YSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogLyoKICAqIEdlbmVyYWwgbWVtb3J5IGFsbG9jYXRpb24gaW50ZXJmYWNlcwpAQCAtMzAsNyArMzEsNiBAQAogI2RlZmluZSBLTV9OT1NMRUVQCTB4MDAwMnUKICNkZWZpbmUgS01fTk9GUwkJMHgwMDA0dQogI2RlZmluZSBLTV9NQVlGQUlMCTB4MDAwOHUKLSNkZWZpbmUgS01fTEFSR0UJMHgwMDEwdQogCiAvKgogICogV2UgdXNlIGEgc3BlY2lhbCBwcm9jZXNzIGZsYWcgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxiYWNrcyBpbnRvCkBAIC00Miw3ICs0Miw3IEBACiB7CiAJZ2ZwX3QJbGZsYWdzOwogCi0JQlVHX09OKGZsYWdzICYgfihLTV9TTEVFUHxLTV9OT1NMRUVQfEtNX05PRlN8S01fTUFZRkFJTHxLTV9MQVJHRSkpOworCUJVR19PTihmbGFncyAmIH4oS01fU0xFRVB8S01fTk9TTEVFUHxLTV9OT0ZTfEtNX01BWUZBSUwpKTsKIAogCWlmIChmbGFncyAmIEtNX05PU0xFRVApIHsKIAkJbGZsYWdzID0gR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTjsKQEAgLTU2LDEwICs1NiwyNSBAQAogCiBleHRlcm4gdm9pZCAqa21lbV9hbGxvYyhzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CiBleHRlcm4gdm9pZCAqa21lbV96YWxsb2Moc2l6ZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOwotZXh0ZXJuIHZvaWQgKmttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CiBleHRlcm4gdm9pZCAqa21lbV9yZWFsbG9jKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CiBleHRlcm4gdm9pZCAga21lbV9mcmVlKGNvbnN0IHZvaWQgKik7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21lbV96YWxsb2NfbGFyZ2Uoc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcHRyOworCisJcHRyID0gdm1hbGxvYyhzaXplKTsKKwlpZiAocHRyKQorCQltZW1zZXQocHRyLCAwLCBzaXplKTsKKwlyZXR1cm4gcHRyOworfQorc3RhdGljIGlubGluZSB2b2lkIGttZW1fZnJlZV9sYXJnZSh2b2lkICpwdHIpCit7CisJdmZyZWUocHRyKTsKK30KKworZXh0ZXJuIHZvaWQgKmttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKiwgc2l6ZV90LCBzaXplX3QpOworCiAvKgogICogWm9uZSBpbnRlcmZhY2VzCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKaW5kZXggODgzY2E1YS4uYmY4NWJiZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlzdHJ1Y3QgeGZzX2FjbCAqeGZzX2FjbDsKIAlpbnQgbGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnNfYWNsKTsKLQljaGFyICplYV9uYW1lOworCXVuc2lnbmVkIGNoYXIgKmVhX25hbWU7CiAJaW50IGVycm9yOwogCiAJYWNsID0gZ2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUpOwpAQCAtMTMzLDcgKzEzMyw4IEBACiAJaWYgKCF4ZnNfYWNsKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWVycm9yID0gLXhmc19hdHRyX2dldChpcCwgZWFfbmFtZSwgKGNoYXIgKil4ZnNfYWNsLCAmbGVuLCBBVFRSX1JPT1QpOworCWVycm9yID0gLXhmc19hdHRyX2dldChpcCwgZWFfbmFtZSwgKHVuc2lnbmVkIGNoYXIgKil4ZnNfYWNsLAorCQkJCQkJCSZsZW4sIEFUVFJfUk9PVCk7CiAJaWYgKGVycm9yKSB7CiAJCS8qCiAJCSAqIElmIHRoZSBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdCBtYWtlIHN1cmUgd2UgaGF2ZSBhIG5lZ2F0aXZlCkBAIC0xNjIsNyArMTYzLDcgQEAKIHhmc19zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiB7CiAJc3RydWN0IHhmc19pbm9kZSAqaXAgPSBYRlNfSShpbm9kZSk7Ci0JY2hhciAqZWFfbmFtZTsKKwl1bnNpZ25lZCBjaGFyICplYV9uYW1lOwogCWludCBlcnJvcjsKIAogCWlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKQpAQCAtMTk0LDcgKzE5NSw3IEBACiAJCQkoc2l6ZW9mKHN0cnVjdCB4ZnNfYWNsX2VudHJ5KSAqCiAJCQkgKFhGU19BQ0xfTUFYX0VOVFJJRVMgLSBhY2wtPmFfY291bnQpKTsKIAotCQllcnJvciA9IC14ZnNfYXR0cl9zZXQoaXAsIGVhX25hbWUsIChjaGFyICopeGZzX2FjbCwKKwkJZXJyb3IgPSAteGZzX2F0dHJfc2V0KGlwLCBlYV9uYW1lLCAodW5zaWduZWQgY2hhciAqKXhmc19hY2wsCiAJCQkJbGVuLCBBVFRSX1JPT1QpOwogCiAJCWtmcmVlKHhmc19hY2wpOwpAQCAtMjYyLDcgKzI2Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXhmc19hY2xfZXhpc3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKm5hbWUpCit4ZnNfYWNsX2V4aXN0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBjaGFyICpuYW1lKQogewogCWludCBsZW4gPSBzaXplb2Yoc3RydWN0IHhmc19hY2wpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IDc3YjhiZTguLjZmNzZiYTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3Rfc29ydC5oPgogCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2ludW0uaCIKQEAgLTc2LDYgKzc3LDI3IEBACiAjZGVmaW5lIHhmc19idWZfZGVhbGxvY2F0ZShicCkgXAogCWttZW1fem9uZV9mcmVlKHhmc19idWZfem9uZSwgKGJwKSk7CiAKK3N0YXRpYyBpbmxpbmUgaW50Cit4ZnNfYnVmX2lzX3ZtYXBwZWQoCisJc3RydWN0IHhmc19idWYJKmJwKQoreworCS8qCisJICogUmV0dXJuIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyB2bWFwcGVkLgorCSAqCisJICogVGhlIFhCRl9NQVBQRUQgZmxhZyBpcyBzZXQgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgbWFwcGVkLCBidXQgdGhlCisJICogY29kZSBpcyBjbGV2ZXIgZW5vdWdoIHRvIGtub3cgaXQgZG9lc24ndCBoYXZlIHRvIG1hcCBhIHNpbmdsZSBwYWdlLAorCSAqIHNvIHRoZSBjaGVjayBoYXMgdG8gYmUgYm90aCBmb3IgWEJGX01BUFBFRCBhbmQgYnAtPmJfcGFnZV9jb3VudCA+IDEuCisJICovCisJcmV0dXJuIChicC0+Yl9mbGFncyAmIFhCRl9NQVBQRUQpICYmIGJwLT5iX3BhZ2VfY291bnQgPiAxOworfQorCitzdGF0aWMgaW5saW5lIGludAoreGZzX2J1Zl92bWFwX2xlbigKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJcmV0dXJuIChicC0+Yl9wYWdlX2NvdW50ICogUEFHRV9TSVpFKSAtIGJwLT5iX29mZnNldDsKK30KKwogLyoKICAqCVBhZ2UgUmVnaW9uIGludGVyZmFjZXMuCiAgKgpAQCAtMzE0LDcgKzMzNiw3IEBACiAJaWYgKGJwLT5iX2ZsYWdzICYgKF9YQkZfUEFHRV9DQUNIRXxfWEJGX1BBR0VTKSkgewogCQl1aW50CQlpOwogCi0JCWlmICgoYnAtPmJfZmxhZ3MgJiBYQkZfTUFQUEVEKSAmJiAoYnAtPmJfcGFnZV9jb3VudCA+IDEpKQorCQlpZiAoeGZzX2J1Zl9pc192bWFwcGVkKGJwKSkKIAkJCWZyZWVfYWRkcmVzcyhicC0+Yl9hZGRyIC0gYnAtPmJfb2Zmc2V0KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYnAtPmJfcGFnZV9jb3VudDsgaSsrKSB7CkBAIC0xMDUxLDIyICsxMDczLDMwIEBACiB9CiAKIGludAoteGZzX2Jhd3JpdGUoCi0Jdm9pZAkJCSptcCwKK3hmc19id3JpdGUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJc3RydWN0IHhmc19idWYJCSpicCkKIHsKLQl0cmFjZV94ZnNfYnVmX2Jhd3JpdGUoYnAsIF9SRVRfSVBfKTsKKwlpbnQJCQlpb3dhaXQgPSAoYnAtPmJfZmxhZ3MgJiBYQkZfQVNZTkMpID09IDA7CisJaW50CQkJZXJyb3IgPSAwOwogCi0JQVNTRVJUKGJwLT5iX2JuICE9IFhGU19CVUZfREFERFJfTlVMTCk7CisJYnAtPmJfc3RyYXQgPSB4ZnNfYmRzdHJhdF9jYjsKKwlicC0+Yl9tb3VudCA9IG1wOworCWJwLT5iX2ZsYWdzIHw9IFhCRl9XUklURTsKKwlpZiAoIWlvd2FpdCkKKwkJYnAtPmJfZmxhZ3MgfD0gX1hCRl9SVU5fUVVFVUVTOwogCiAJeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCk7CisJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAotCWJwLT5iX2ZsYWdzICY9IH4oWEJGX1JFQUQgfCBYQkZfREVMV1JJIHwgWEJGX1JFQURfQUhFQUQpOwotCWJwLT5iX2ZsYWdzIHw9IChYQkZfV1JJVEUgfCBYQkZfQVNZTkMgfCBfWEJGX1JVTl9RVUVVRVMpOworCWlmIChpb3dhaXQpIHsKKwkJZXJyb3IgPSB4ZnNfYnVmX2lvd2FpdChicCk7CisJCWlmIChlcnJvcikKKwkJCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fTUVUQV9JT19FUlJPUik7CisJCXhmc19idWZfcmVsc2UoYnApOworCX0KIAotCWJwLT5iX21vdW50ID0gbXA7Ci0JYnAtPmJfc3RyYXQgPSB4ZnNfYmRzdHJhdF9jYjsKLQlyZXR1cm4geGZzX2Jkc3RyYXRfY2IoYnApOworCXJldHVybiBlcnJvcjsKIH0KIAogdm9pZApAQCAtMTA4NSw2ICsxMTE1LDEyNiBAQAogCXhmc19idWZfZGVsd3JpX3F1ZXVlKGJwLCAxKTsKIH0KIAorLyoKKyAqIENhbGxlZCB3aGVuIHdlIHdhbnQgdG8gc3RvcCBhIGJ1ZmZlciBmcm9tIGdldHRpbmcgd3JpdHRlbiBvciByZWFkLgorICogV2UgYXR0YWNoIHRoZSBFSU8gZXJyb3IsIG11Y2sgd2l0aCBpdHMgZmxhZ3MsIGFuZCBjYWxsIGJpb2RvbmUKKyAqIHNvIHRoYXQgdGhlIHByb3BlciBpb2RvbmUgY2FsbGJhY2tzIGdldCBjYWxsZWQuCisgKi8KK1NUQVRJQyBpbnQKK3hmc19iaW9lcnJvcigKKwl4ZnNfYnVmX3QgKmJwKQoreworI2lmZGVmIFhGU0VSUk9SREVCVUcKKwlBU1NFUlQoWEZTX0JVRl9JU1JFQUQoYnApIHx8IGJwLT5iX2lvZG9uZSk7CisjZW5kaWYKKworCS8qCisJICogTm8gbmVlZCB0byB3YWl0IHVudGlsIHRoZSBidWZmZXIgaXMgdW5waW5uZWQsIHdlIGFyZW4ndCBmbHVzaGluZyBpdC4KKwkgKi8KKwlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOworCisJLyoKKwkgKiBXZSdyZSBjYWxsaW5nIGJpb2RvbmUsIHNvIGRlbGV0ZSBYQkZfRE9ORSBmbGFnLgorCSAqLworCVhGU19CVUZfVU5SRUFEKGJwKTsKKwlYRlNfQlVGX1VOREVMQVlXUklURShicCk7CisJWEZTX0JVRl9VTkRPTkUoYnApOworCVhGU19CVUZfU1RBTEUoYnApOworCisJWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKKwl4ZnNfYmlvZG9uZShicCk7CisKKwlyZXR1cm4gRUlPOworfQorCisvKgorICogU2FtZSBhcyB4ZnNfYmlvZXJyb3IsIGV4Y2VwdCB0aGF0IHdlIGFyZSByZWxlYXNpbmcgdGhlIGJ1ZmZlcgorICogaGVyZSBvdXJzZWx2ZXMsIGFuZCBhdm9pZGluZyB0aGUgYmlvZG9uZSBjYWxsLgorICogVGhpcyBpcyBtZWFudCBmb3IgdXNlcmRhdGEgZXJyb3JzOyBtZXRhZGF0YSBidWZzIGNvbWUgd2l0aAorICogaW9kb25lIGZ1bmN0aW9ucyBhdHRhY2hlZCwgc28gdGhhdCB3ZSBjYW4gdHJhY2sgZG93biBlcnJvcnMuCisgKi8KK1NUQVRJQyBpbnQKK3hmc19iaW9lcnJvcl9yZWxzZSgKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJaW50NjRfdAkJZmwgPSBYRlNfQlVGX0JGTEFHUyhicCk7CisJLyoKKwkgKiBObyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZC4KKwkgKiBXZSBhcmVuJ3QgZmx1c2hpbmcgaXQuCisJICoKKwkgKiBjaHVua2hvbGQgZXhwZWN0cyBCX0RPTkUgdG8gYmUgc2V0LCB3aGV0aGVyCisJICogd2UgYWN0dWFsbHkgZmluaXNoIHRoZSBJL08gb3Igbm90LiBXZSBkb24ndCB3YW50IHRvCisJICogY2hhbmdlIHRoYXQgaW50ZXJmYWNlLgorCSAqLworCVhGU19CVUZfVU5SRUFEKGJwKTsKKwlYRlNfQlVGX1VOREVMQVlXUklURShicCk7CisJWEZTX0JVRl9ET05FKGJwKTsKKwlYRlNfQlVGX1NUQUxFKGJwKTsKKwlYRlNfQlVGX0NMUl9JT0RPTkVfRlVOQyhicCk7CisJWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKKwlpZiAoIShmbCAmIFhCRl9BU1lOQykpIHsKKwkJLyoKKwkJICogTWFyayBiX2Vycm9yIGFuZCBCX0VSUk9SIF9ib3RoXy4KKwkJICogTG90J3Mgb2YgY2h1bmtjYWNoZSBjb2RlIGFzc3VtZXMgdGhhdC4KKwkJICogVGhlcmUncyBubyByZWFzb24gdG8gbWFyayBlcnJvciBmb3IKKwkJICogQVNZTkMgYnVmZmVycy4KKwkJICovCisJCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisJCVhGU19CVUZfRklOSVNIX0lPV0FJVChicCk7CisJfSBlbHNlIHsKKwkJeGZzX2J1Zl9yZWxzZShicCk7CisJfQorCisJcmV0dXJuIEVJTzsKK30KKworCisvKgorICogQWxsIHhmcyBtZXRhZGF0YSBidWZmZXJzIGV4Y2VwdCBsb2cgc3RhdGUgbWFjaGluZSBidWZmZXJzCisgKiBnZXQgdGhpcyBhdHRhY2hlZCBhcyB0aGVpciBiX2Jkc3RyYXQgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGEgYnVmZmVyCisgKiBhZnRlciBwcmVtYXR1cmVseSB1bnBpbm5pbmcgaXQgdG8gZm9yY2libHkgc2h1dGRvd24gdGhlIGZpbGVzeXN0ZW0uCisgKi8KK2ludAoreGZzX2Jkc3RyYXRfY2IoCisJc3RydWN0IHhmc19idWYJKmJwKQoreworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGJwLT5iX21vdW50KSkgeworCQl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7CisJCS8qCisJCSAqIE1ldGFkYXRhIHdyaXRlIHRoYXQgZGlkbid0IGdldCBsb2dnZWQgYnV0CisJCSAqIHdyaXR0ZW4gZGVsYXllZCBhbnl3YXkuIFRoZXNlIGFyZW4ndCBhc3NvY2lhdGVkCisJCSAqIHdpdGggYSB0cmFuc2FjdGlvbiwgYW5kIGNhbiBiZSBpZ25vcmVkLgorCQkgKi8KKwkJaWYgKCFicC0+Yl9pb2RvbmUgJiYgIVhGU19CVUZfSVNSRUFEKGJwKSkKKwkJCXJldHVybiB4ZnNfYmlvZXJyb3JfcmVsc2UoYnApOworCQllbHNlCisJCQlyZXR1cm4geGZzX2Jpb2Vycm9yKGJwKTsKKwl9CisKKwl4ZnNfYnVmX2lvcmVxdWVzdChicCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcmFwcGVyIGFyb3VuZCBiZHN0cmF0IHNvIHRoYXQgd2UgY2FuIHN0b3AgZGF0YSBmcm9tIGdvaW5nIHRvIGRpc2sgaW4gY2FzZQorICogd2UgYXJlIHNodXR0aW5nIGRvd24gdGhlIGZpbGVzeXN0ZW0uICBUeXBpY2FsbHkgdXNlciBkYXRhIGdvZXMgdGhydSB0aGlzCisgKiBwYXRoOyBvbmUgb2YgdGhlIGV4Y2VwdGlvbnMgaXMgdGhlIHN1cGVyYmxvY2suCisgKi8KK3ZvaWQKK3hmc2Jkc3RyYXQoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19idWYJCSpicCkKK3sKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKKwkJdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOworCQl4ZnNfYmlvZXJyb3JfcmVsc2UoYnApOworCQlyZXR1cm47CisJfQorCisJeGZzX2J1Zl9pb3JlcXVlc3QoYnApOworfQorCiBTVEFUSUMgdm9pZAogX3hmc19idWZfaW9lbmQoCiAJeGZzX2J1Zl90CQkqYnAsCkBAIC0xMTA3LDYgKzEyNTcsOSBAQAogCiAJeGZzX2J1Zl9pb2Vycm9yKGJwLCAtZXJyb3IpOwogCisJaWYgKCFlcnJvciAmJiB4ZnNfYnVmX2lzX3ZtYXBwZWQoYnApICYmIChicC0+Yl9mbGFncyAmIFhCRl9SRUFEKSkKKwkJaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZShicC0+Yl9hZGRyLCB4ZnNfYnVmX3ZtYXBfbGVuKGJwKSk7CisKIAlkbyB7CiAJCXN0cnVjdCBwYWdlCSpwYWdlID0gYnZlYy0+YnZfcGFnZTsKIApAQCAtMTIxNiw2ICsxMzY5LDEwIEBACiAKIHN1Ym1pdF9pbzoKIAlpZiAobGlrZWx5KGJpby0+Ymlfc2l6ZSkpIHsKKwkJaWYgKHhmc19idWZfaXNfdm1hcHBlZChicCkpIHsKKwkJCWZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKGJwLT5iX2FkZHIsCisJCQkJCQl4ZnNfYnVmX3ZtYXBfbGVuKGJwKSk7CisJCX0KIAkJc3VibWl0X2JpbyhydywgYmlvKTsKIAkJaWYgKHNpemUpCiAJCQlnb3RvIG5leHRfY2h1bms7CkBAIC0xMjk2LDcgKzE0NTMsNyBAQAogCXhmc19idWZfdAkJKmJwLAkvKiBidWZmZXIgdG8gcHJvY2VzcwkJKi8KIAlzaXplX3QJCQlib2ZmLAkvKiBzdGFydGluZyBidWZmZXIgb2Zmc2V0CSovCiAJc2l6ZV90CQkJYnNpemUsCS8qIGxlbmd0aCB0byBjb3B5CQkqLwotCWNhZGRyX3QJCQlkYXRhLAkvKiBkYXRhIGFkZHJlc3MJCQkqLworCXZvaWQJCQkqZGF0YSwJLyogZGF0YSBhZGRyZXNzCQkJKi8KIAl4ZnNfYnVmX3J3X3QJCW1vZGUpCS8qIHJlYWQvd3JpdGUvemVybyBmbGFnCQkqLwogewogCXNpemVfdAkJCWJlbmQsIGNwb2ZmLCBjc2l6ZTsKQEAgLTEzNzgsOCArMTUzNSw4IEBACiAKIAlidHAtPmJ0X2hhc2hzaGlmdCA9IGV4dGVybmFsID8gMyA6IDg7CS8qIDggb3IgMjU2IGJ1Y2tldHMgKi8KIAlidHAtPmJ0X2hhc2htYXNrID0gKDEgPDwgYnRwLT5idF9oYXNoc2hpZnQpIC0gMTsKLQlidHAtPmJ0X2hhc2ggPSBrbWVtX3phbGxvYygoMSA8PCBidHAtPmJ0X2hhc2hzaGlmdCkgKgotCQkJCQlzaXplb2YoeGZzX2J1Zmhhc2hfdCksIEtNX1NMRUVQIHwgS01fTEFSR0UpOworCWJ0cC0+YnRfaGFzaCA9IGttZW1femFsbG9jX2xhcmdlKCgxIDw8IGJ0cC0+YnRfaGFzaHNoaWZ0KSAqCisJCQkJCSBzaXplb2YoeGZzX2J1Zmhhc2hfdCkpOwogCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBidHAtPmJ0X2hhc2hzaGlmdCk7IGkrKykgewogCQlzcGluX2xvY2tfaW5pdCgmYnRwLT5idF9oYXNoW2ldLmJoX2xvY2spOwogCQlJTklUX0xJU1RfSEVBRCgmYnRwLT5idF9oYXNoW2ldLmJoX2xpc3QpOwpAQCAtMTM5MCw3ICsxNTQ3LDcgQEAKIHhmc19mcmVlX2J1Zmhhc2goCiAJeGZzX2J1ZnRhcmdfdAkJKmJ0cCkKIHsKLQlrbWVtX2ZyZWUoYnRwLT5idF9oYXNoKTsKKwlrbWVtX2ZyZWVfbGFyZ2UoYnRwLT5idF9oYXNoKTsKIAlidHAtPmJ0X2hhc2ggPSBOVUxMOwogfQogCkBAIC0xNTk1LDYgKzE3NTIsMTEgQEAKIAkJbGlzdF9kZWwoJmJwLT5iX2xpc3QpOwogCX0KIAorCWlmIChsaXN0X2VtcHR5KGR3cSkpIHsKKwkJLyogc3RhcnQgeGZzYnVmZCBhcyBpdCBpcyBhYm91dCB0byBoYXZlIHNvbWV0aGluZyB0byBkbyAqLworCQl3YWtlX3VwX3Byb2Nlc3MoYnAtPmJfdGFyZ2V0LT5idF90YXNrKTsKKwl9CisKIAlicC0+Yl9mbGFncyB8PSBfWEJGX0RFTFdSSV9ROwogCWxpc3RfYWRkX3RhaWwoJmJwLT5iX2xpc3QsIGR3cSk7CiAJYnAtPmJfcXVldWV0aW1lID0gamlmZmllczsKQEAgLTE2MjYsNiArMTc4OCwzNSBAQAogCXRyYWNlX3hmc19idWZfZGVsd3JpX2RlcXVldWUoYnAsIF9SRVRfSVBfKTsKIH0KIAorLyoKKyAqIElmIGEgZGVsd3JpIGJ1ZmZlciBuZWVkcyB0byBiZSBwdXNoZWQgYmVmb3JlIGl0IGhhcyBhZ2VkIG91dCwgdGhlbiBwcm9tb3RlCisgKiBpdCB0byB0aGUgaGVhZCBvZiB0aGUgZGVsd3JpIHF1ZXVlIHNvIHRoYXQgaXQgd2lsbCBiZSBmbHVzaGVkIG9uIHRoZSBuZXh0CisgKiB4ZnNidWZkIHJ1bi4gV2UgZG8gdGhpcyBieSByZXNldHRpbmcgdGhlIHF1ZXVldGltZSBvZiB0aGUgYnVmZmVyIHRvIGJlIG9sZGVyCisgKiB0aGFuIHRoZSBhZ2UgY3VycmVudGx5IG5lZWRlZCB0byBmbHVzaCB0aGUgYnVmZmVyLiBIZW5jZSB0aGUgbmV4dCB0aW1lIHRoZQorICogeGZzYnVmZCBzZWVzIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgY29uc2lkZXJlZCBvbGQgZW5vdWdoIHRvIGZsdXNoLgorICovCit2b2lkCit4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKAorCXN0cnVjdCB4ZnNfYnVmCSpicCkKK3sKKwlzdHJ1Y3QgeGZzX2J1ZnRhcmcgKmJ0cCA9IGJwLT5iX3RhcmdldDsKKwlsb25nCQlhZ2UgPSB4ZnNfYnVmX2FnZV9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKSArIDE7CisKKwlBU1NFUlQoYnAtPmJfZmxhZ3MgJiBYQkZfREVMV1JJKTsKKwlBU1NFUlQoYnAtPmJfZmxhZ3MgJiBfWEJGX0RFTFdSSV9RKTsKKworCS8qCisJICogQ2hlY2sgdGhlIGJ1ZmZlciBhZ2UgYmVmb3JlIGxvY2tpbmcgdGhlIGRlbGF5ZWQgd3JpdGUgcXVldWUgYXMgd2UKKwkgKiBkb24ndCBuZWVkIHRvIHByb21vdGUgYnVmZmVycyB0aGF0IGFyZSBhbHJlYWR5IHBhc3QgdGhlIGZsdXNoIGFnZS4KKwkgKi8KKwlpZiAoYnAtPmJfcXVldWV0aW1lIDwgamlmZmllcyAtIGFnZSkKKwkJcmV0dXJuOworCWJwLT5iX3F1ZXVldGltZSA9IGppZmZpZXMgLSBhZ2U7CisJc3Bpbl9sb2NrKCZidHAtPmJ0X2RlbHdyaXRlX2xvY2spOworCWxpc3RfbW92ZSgmYnAtPmJfbGlzdCwgJmJ0cC0+YnRfZGVsd3JpdGVfcXVldWUpOworCXNwaW5fdW5sb2NrKCZidHAtPmJ0X2RlbHdyaXRlX2xvY2spOworfQorCiBTVEFUSUMgdm9pZAogeGZzX2J1Zl9ydW5hbGxfcXVldWVzKAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSpxdWV1ZSkKQEAgLTE2NDQsNiArMTgzNSw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidHAsICZ4ZnNfYnVmdGFyZ19saXN0LCBidF9saXN0KSB7CiAJCWlmICh0ZXN0X2JpdChYQlRfRk9SQ0VfU0xFRVAsICZidHAtPmJ0X2ZsYWdzKSkKIAkJCWNvbnRpbnVlOworCQlpZiAobGlzdF9lbXB0eSgmYnRwLT5idF9kZWx3cml0ZV9xdWV1ZSkpCisJCQljb250aW51ZTsKIAkJc2V0X2JpdChYQlRfRk9SQ0VfRkxVU0gsICZidHAtPmJ0X2ZsYWdzKTsKIAkJd2FrZV91cF9wcm9jZXNzKGJ0cC0+YnRfdGFzayk7CiAJfQpAQCAtMTY5NCwyMCArMTg4Nyw1MyBAQAogCiB9CiAKKy8qCisgKiBDb21wYXJlIGZ1bmN0aW9uIGlzIG1vcmUgY29tcGxleCB0aGFuIGl0IG5lZWRzIHRvIGJlIGJlY2F1c2UKKyAqIHRoZSByZXR1cm4gdmFsdWUgaXMgb25seSAzMiBiaXRzIGFuZCB3ZSBhcmUgZG9pbmcgY29tcGFyaXNvbnMKKyAqIG9uIDY0IGJpdCB2YWx1ZXMKKyAqLworc3RhdGljIGludAoreGZzX2J1Zl9jbXAoCisJdm9pZAkJKnByaXYsCisJc3RydWN0IGxpc3RfaGVhZCAqYSwKKwlzdHJ1Y3QgbGlzdF9oZWFkICpiKQoreworCXN0cnVjdCB4ZnNfYnVmCSphcCA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnAgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IHhmc19idWYsIGJfbGlzdCk7CisJeGZzX2RhZGRyX3QJCWRpZmY7CisKKwlkaWZmID0gYXAtPmJfYm4gLSBicC0+Yl9ibjsKKwlpZiAoZGlmZiA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoZGlmZiA+IDApCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCit2b2lkCit4ZnNfYnVmX2RlbHdyaV9zb3J0KAorCXhmc19idWZ0YXJnX3QJKnRhcmdldCwKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCWxpc3Rfc29ydChOVUxMLCBsaXN0LCB4ZnNfYnVmX2NtcCk7Cit9CisKIFNUQVRJQyBpbnQKIHhmc2J1ZmQoCiAJdm9pZAkJKmRhdGEpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0bXA7Ci0JeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0ID0gKHhmc19idWZ0YXJnX3QgKilkYXRhOwotCWludAkJY291bnQ7Ci0JeGZzX2J1Zl90CSpicDsKKwl4ZnNfYnVmdGFyZ190ICAgKnRhcmdldCA9ICh4ZnNfYnVmdGFyZ190ICopZGF0YTsKIAogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwogCiAJc2V0X2ZyZWV6YWJsZSgpOwogCiAJZG8geworCQlsb25nCWFnZSA9IHhmc19idWZfYWdlX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApOworCQlsb25nCXRvdXQgPSB4ZnNfYnVmX3RpbWVyX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApOworCQlpbnQJY291bnQgPSAwOworCQlzdHJ1Y3QgbGlzdF9oZWFkIHRtcDsKKwogCQlpZiAodW5saWtlbHkoZnJlZXppbmcoY3VycmVudCkpKSB7CiAJCQlzZXRfYml0KFhCVF9GT1JDRV9TTEVFUCwgJnRhcmdldC0+YnRfZmxhZ3MpOwogCQkJcmVmcmlnZXJhdG9yKCk7CkBAIC0xNzE1LDE3ICsxOTQxLDE2IEBACiAJCQljbGVhcl9iaXQoWEJUX0ZPUkNFX1NMRUVQLCAmdGFyZ2V0LT5idF9mbGFncyk7CiAJCX0KIAotCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoCi0JCQl4ZnNfYnVmX3RpbWVyX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKKwkJLyogc2xlZXAgZm9yIGEgbG9uZyB0aW1lIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uICovCisJCWlmIChsaXN0X2VtcHR5KCZ0YXJnZXQtPmJ0X2RlbHdyaXRlX3F1ZXVlKSkKKwkJCXRvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRvdXQpOwogCi0JCXhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcCwKLQkJCQl4ZnNfYnVmX2FnZV9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKSk7Ci0KLQkJY291bnQgPSAwOworCQl4ZnNfYnVmX2RlbHdyaV9zcGxpdCh0YXJnZXQsICZ0bXAsIGFnZSk7CisJCWxpc3Rfc29ydChOVUxMLCAmdG1wLCB4ZnNfYnVmX2NtcCk7CiAJCXdoaWxlICghbGlzdF9lbXB0eSgmdG1wKSkgewotCQkJYnAgPSBsaXN0X2VudHJ5KHRtcC5uZXh0LCB4ZnNfYnVmX3QsIGJfbGlzdCk7Ci0JCQlBU1NFUlQodGFyZ2V0ID09IGJwLT5iX3RhcmdldCk7Ci0KKwkJCXN0cnVjdCB4ZnNfYnVmICpicDsKKwkJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmdG1wLCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKIAkJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOwogCQkJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAkJCWNvdW50Kys7CkBAIC0xNzUxLDQyICsxOTc2LDQ1IEBACiAJeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0LAogCWludAkJd2FpdCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRtcDsKLQl4ZnNfYnVmX3QJKmJwLCAqbjsKKwl4ZnNfYnVmX3QJKmJwOwogCWludAkJcGluY291bnQgPSAwOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisJTElTVF9IRUFEKHdhaXRfbGlzdCk7CiAKIAl4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoeGZzY29udmVydGRfd29ya3F1ZXVlKTsKIAl4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoeGZzZGF0YWRfd29ya3F1ZXVlKTsKIAl4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoeGZzbG9nZF93b3JrcXVldWUpOwogCiAJc2V0X2JpdChYQlRfRk9SQ0VfRkxVU0gsICZ0YXJnZXQtPmJ0X2ZsYWdzKTsKLQlwaW5jb3VudCA9IHhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcCwgMCk7CisJcGluY291bnQgPSB4ZnNfYnVmX2RlbHdyaV9zcGxpdCh0YXJnZXQsICZ0bXBfbGlzdCwgMCk7CiAKIAkvKgotCSAqIERyb3BwZWQgdGhlIGRlbGF5ZWQgd3JpdGUgbGlzdCBsb2NrLCBub3cgd2FsayB0aGUgdGVtcG9yYXJ5IGxpc3QKKwkgKiBEcm9wcGVkIHRoZSBkZWxheWVkIHdyaXRlIGxpc3QgbG9jaywgbm93IHdhbGsgdGhlIHRlbXBvcmFyeSBsaXN0LgorCSAqIEFsbCBJL08gaXMgaXNzdWVkIGFzeW5jIGFuZCB0aGVuIGlmIHdlIG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGlvbgorCSAqIHdlIGRvIHRoYXQgYWZ0ZXIgaXNzdWluZyBhbGwgdGhlIElPLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShicCwgbiwgJnRtcCwgYl9saXN0KSB7CisJbGlzdF9zb3J0KE5VTEwsICZ0bXBfbGlzdCwgeGZzX2J1Zl9jbXApOworCXdoaWxlICghbGlzdF9lbXB0eSgmdG1wX2xpc3QpKSB7CisJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmdG1wX2xpc3QsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOwogCQlBU1NFUlQodGFyZ2V0ID09IGJwLT5iX3RhcmdldCk7Ci0JCWlmICh3YWl0KQorCQlsaXN0X2RlbF9pbml0KCZicC0+Yl9saXN0KTsKKwkJaWYgKHdhaXQpIHsKIAkJCWJwLT5iX2ZsYWdzICY9IH5YQkZfQVNZTkM7Ci0JCWVsc2UKLQkJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOwotCisJCQlsaXN0X2FkZCgmYnAtPmJfbGlzdCwgJndhaXRfbGlzdCk7CisJCX0KIAkJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAl9CiAKLQlpZiAod2FpdCkKKwlpZiAod2FpdCkgeworCQkvKiBFeHBlZGl0ZSBhbmQgd2FpdCBmb3IgSU8gdG8gY29tcGxldGUuICovCiAJCWJsa19ydW5fYWRkcmVzc19zcGFjZSh0YXJnZXQtPmJ0X21hcHBpbmcpOworCQl3aGlsZSAoIWxpc3RfZW1wdHkoJndhaXRfbGlzdCkpIHsKKwkJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmd2FpdF9saXN0LCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKIAotCS8qCi0JICogUmVtYWluaW5nIGxpc3QgaXRlbXMgbXVzdCBiZSBmbHVzaGVkIGJlZm9yZSByZXR1cm5pbmcKLQkgKi8KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnRtcCkpIHsKLQkJYnAgPSBsaXN0X2VudHJ5KHRtcC5uZXh0LCB4ZnNfYnVmX3QsIGJfbGlzdCk7Ci0KLQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7Ci0JCXhmc19pb3dhaXQoYnApOwotCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwkJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOworCQkJeGZzX2lvd2FpdChicCk7CisJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwkJfQogCX0KIAogCXJldHVybiBwaW5jb3VudDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKaW5kZXggYTM0YzdiNS4uMzg2ZTczNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKQEAgLTIzMiwxMyArMjMyLDE3IEBACiBleHRlcm4gdm9pZCB4ZnNfYnVmX3VubG9jayh4ZnNfYnVmX3QgKik7CiAKIC8qIEJ1ZmZlciBSZWFkIGFuZCBXcml0ZSBSb3V0aW5lcyAqLwotZXh0ZXJuIGludCB4ZnNfYmF3cml0ZSh2b2lkICptcCwgeGZzX2J1Zl90ICpicCk7CitleHRlcm4gaW50IHhmc19id3JpdGUoc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfYnVmICpicCk7CiBleHRlcm4gdm9pZCB4ZnNfYmR3cml0ZSh2b2lkICptcCwgeGZzX2J1Zl90ICpicCk7CisKK2V4dGVybiB2b2lkIHhmc2Jkc3RyYXQoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqKTsKK2V4dGVybiBpbnQgeGZzX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKik7CisKIGV4dGVybiB2b2lkIHhmc19idWZfaW9lbmQoeGZzX2J1Zl90ICosCWludCk7CiBleHRlcm4gdm9pZCB4ZnNfYnVmX2lvZXJyb3IoeGZzX2J1Zl90ICosIGludCk7CiBleHRlcm4gaW50IHhmc19idWZfaW9yZXF1ZXN0KHhmc19idWZfdCAqKTsKIGV4dGVybiBpbnQgeGZzX2J1Zl9pb3dhaXQoeGZzX2J1Zl90ICopOwotZXh0ZXJuIHZvaWQgeGZzX2J1Zl9pb21vdmUoeGZzX2J1Zl90ICosIHNpemVfdCwgc2l6ZV90LCB4ZnNfY2FkZHJfdCwKK2V4dGVybiB2b2lkIHhmc19idWZfaW9tb3ZlKHhmc19idWZfdCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqLAogCQkJCXhmc19idWZfcndfdCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhmc19idWZfaW9zdHJhdGVneSh4ZnNfYnVmX3QgKmJwKQpAQCAtMjYxLDYgKzI2NSw3IEBACiAKIC8qIERlbGF5ZWQgV3JpdGUgQnVmZmVyIFJvdXRpbmVzICovCiBleHRlcm4gdm9pZCB4ZnNfYnVmX2RlbHdyaV9kZXF1ZXVlKHhmc19idWZfdCAqKTsKK2V4dGVybiB2b2lkIHhmc19idWZfZGVsd3JpX3Byb21vdGUoeGZzX2J1Zl90ICopOwogCiAvKiBCdWZmZXIgRGFlbW9uIFNldHVwIFJvdXRpbmVzICovCiBleHRlcm4gaW50IHhmc19idWZfaW5pdCh2b2lkKTsKQEAgLTI3MCwzMyArMjc1LDE5IEBACiAJKHsgY2hhciBfX2JbQkRFVk5BTUVfU0laRV07IGJkZXZuYW1lKCh0YXJnZXQpLT5idF9iZGV2LCBfX2IpOyBfX2I7IH0pCiAKIAotI2RlZmluZSBYRlNfQl9BU1lOQwkJWEJGX0FTWU5DCi0jZGVmaW5lIFhGU19CX0RFTFdSSQkJWEJGX0RFTFdSSQotI2RlZmluZSBYRlNfQl9SRUFECQlYQkZfUkVBRAotI2RlZmluZSBYRlNfQl9XUklURQkJWEJGX1dSSVRFCi0jZGVmaW5lIFhGU19CX1NUQUxFCQlYQkZfU1RBTEUKLQotI2RlZmluZSBYRlNfQlVGX1RSWUxPQ0sJCVhCRl9UUllMT0NLCi0jZGVmaW5lIFhGU19JTkNPUkVfVFJZTE9DSwlYQkZfVFJZTE9DSwotI2RlZmluZSBYRlNfQlVGX0xPQ0sJCVhCRl9MT0NLCi0jZGVmaW5lIFhGU19CVUZfTUFQUEVECQlYQkZfTUFQUEVECi0KLSNkZWZpbmUgQlVGX0JVU1kJCVhCRl9ET05UX0JMT0NLCi0KICNkZWZpbmUgWEZTX0JVRl9CRkxBR1MoYnApCSgoYnApLT5iX2ZsYWdzKQogI2RlZmluZSBYRlNfQlVGX1pFUk9GTEFHUyhicCkJKChicCktPmJfZmxhZ3MgJj0gXAogCQl+KFhCRl9SRUFEfFhCRl9XUklURXxYQkZfQVNZTkN8WEJGX0RFTFdSSXxYQkZfT1JERVJFRCkpCiAKLSNkZWZpbmUgWEZTX0JVRl9TVEFMRShicCkJKChicCktPmJfZmxhZ3MgfD0gWEZTX0JfU1RBTEUpCi0jZGVmaW5lIFhGU19CVUZfVU5TVEFMRShicCkJKChicCktPmJfZmxhZ3MgJj0gflhGU19CX1NUQUxFKQotI2RlZmluZSBYRlNfQlVGX0lTU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzICYgWEZTX0JfU1RBTEUpCisjZGVmaW5lIFhGU19CVUZfU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzIHw9IFhCRl9TVEFMRSkKKyNkZWZpbmUgWEZTX0JVRl9VTlNUQUxFKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSB+WEJGX1NUQUxFKQorI2RlZmluZSBYRlNfQlVGX0lTU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzICYgWEJGX1NUQUxFKQogI2RlZmluZSBYRlNfQlVGX1NVUEVSX1NUQUxFKGJwKQlkbyB7CQkJCVwKIAkJCQkJWEZTX0JVRl9TVEFMRShicCk7CVwKIAkJCQkJeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCk7CVwKIAkJCQkJWEZTX0JVRl9ET05FKGJwKTsJXAogCQkJCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgWEZTX0JVRl9NQU5BR0UJCVhCRl9GU19NQU5BR0VECiAjZGVmaW5lIFhGU19CVUZfVU5NQU5BR0UoYnApCSgoYnApLT5iX2ZsYWdzICY9IH5YQkZfRlNfTUFOQUdFRCkKIAogI2RlZmluZSBYRlNfQlVGX0RFTEFZV1JJVEUoYnApCQkoKGJwKS0+Yl9mbGFncyB8PSBYQkZfREVMV1JJKQpAQCAtMzg1LDMxICszNzYsMTEgQEAKIAogI2RlZmluZSB4ZnNfYmlvbW92ZShicCwgb2ZmLCBsZW4sIGRhdGEsIHJ3KSBcCiAJICAgIHhmc19idWZfaW9tb3ZlKChicCksIChvZmYpLCAobGVuKSwgKGRhdGEpLCBcCi0JCSgocncpID09IFhGU19CX1dSSVRFKSA/IFhCUldfV1JJVEUgOiBYQlJXX1JFQUQpCisJCSgocncpID09IFhCRl9XUklURSkgPyBYQlJXX1dSSVRFIDogWEJSV19SRUFEKQogCiAjZGVmaW5lIHhmc19iaW96ZXJvKGJwLCBvZmYsIGxlbikgXAogCSAgICB4ZnNfYnVmX2lvbW92ZSgoYnApLCAob2ZmKSwgKGxlbiksIE5VTEwsIFhCUldfWkVSTykKIAotCi1zdGF0aWMgaW5saW5lIGludCBYRlNfYndyaXRlKHhmc19idWZfdCAqYnApCi17Ci0JaW50CWlvd2FpdCA9IChicC0+Yl9mbGFncyAmIFhCRl9BU1lOQykgPT0gMDsKLQlpbnQJZXJyb3IgPSAwOwotCi0JaWYgKCFpb3dhaXQpCi0JCWJwLT5iX2ZsYWdzIHw9IF9YQkZfUlVOX1FVRVVFUzsKLQotCXhmc19idWZfZGVsd3JpX2RlcXVldWUoYnApOwotCXhmc19idWZfaW9zdHJhdGVneShicCk7Ci0JaWYgKGlvd2FpdCkgewotCQllcnJvciA9IHhmc19idWZfaW93YWl0KGJwKTsKLQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotI2RlZmluZSBYRlNfYmRzdHJhdChicCkgeGZzX2J1Zl9pb3JlcXVlc3QoYnApCi0KICNkZWZpbmUgeGZzX2lvd2FpdChicCkJeGZzX2J1Zl9pb3dhaXQoYnApCiAKICNkZWZpbmUgeGZzX2JhcmVhZCh0YXJnZXQsIHJhYmxrbm8sIHJhbGVuKSAgXApAQCAtNDI0LDYgKzM5NSw3IEBACiBleHRlcm4gdm9pZCB4ZnNfd2FpdF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKik7CiBleHRlcm4gaW50IHhmc19zZXRzaXplX2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHhmc19mbHVzaF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKiwgaW50KTsKKwogI2lmZGVmIENPTkZJR19LREJfTU9EVUxFUwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKnhmc19nZXRfYnVmdGFyZ19saXN0KHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKaW5kZXggNzUwMWI4NS4uYjY5MThkNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwpAQCAtNzksNyArNzksNyBAQAogCQl4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfSVRSVU5DQVRFRCk7CiAJCXJldCA9IC1maWxlbWFwX2ZkYXRhd3JpdGUobWFwcGluZyk7CiAJfQotCWlmIChmbGFncyAmIFhGU19CX0FTWU5DKQorCWlmIChmbGFncyAmIFhCRl9BU1lOQykKIAkJcmV0dXJuIHJldDsKIAlyZXQyID0geGZzX3dhaXRfb25fcGFnZXMoaXAsIGZpcnN0LCBsYXN0KTsKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGEwMzRjZjYuLjRlYTFlZTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtNDQ3LDEyICs0NDcsMTIgQEAKIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX2dldCgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCi0JY2hhcgkJCV9fdXNlciAqdWJ1ZiwKKwl1bnNpZ25lZCBjaGFyCQkqbmFtZSwKKwl1bnNpZ25lZCBjaGFyCQlfX3VzZXIgKnVidWYsCiAJX191aW50MzJfdAkJKmxlbiwKIAlfX3VpbnQzMl90CQlmbGFncykKIHsKLQljaGFyCQkJKmtidWY7CisJdW5zaWduZWQgY2hhcgkJKmtidWY7CiAJaW50CQkJZXJyb3IgPSBFRkFVTFQ7CiAKIAlpZiAoKmxlbiA+IFhBVFRSX1NJWkVfTUFYKQpAQCAtNDc2LDEyICs0NzYsMTIgQEAKIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX3NldCgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCi0JY29uc3QgY2hhcgkJX191c2VyICp1YnVmLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIJX191c2VyICp1YnVmLAogCV9fdWludDMyX3QJCWxlbiwKIAlfX3VpbnQzMl90CQlmbGFncykKIHsKLQljaGFyCQkJKmtidWY7CisJdW5zaWduZWQgY2hhcgkJKmtidWY7CiAJaW50CQkJZXJyb3IgPSBFRkFVTFQ7CiAKIAlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQpAQCAtNTAxLDcgKzUwMSw3IEBACiBpbnQKIHhmc19hdHRybXVsdGlfYXR0cl9yZW1vdmUoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUsCi0JY2hhcgkJCSpuYW1lLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAogCV9fdWludDMyX3QJCWZsYWdzKQogewogCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCkBAIC01MTksNyArNTE5LDcgQEAKIAl4ZnNfZnNvcF9hdHRybXVsdGlfaGFuZGxlcmVxX3QgYW1faHJlcTsKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5OwogCXVuc2lnbmVkIGludAkJaSwgc2l6ZTsKLQljaGFyCQkJKmF0dHJfbmFtZTsKKwl1bnNpZ25lZCBjaGFyCQkqYXR0cl9uYW1lOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLVhGU19FUlJPUihFUEVSTSk7CkBAIC01NDcsNyArNTQ3LDcgQEAKIAogCWVycm9yID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgYW1faHJlcS5vcGNvdW50OyBpKyspIHsKLQkJb3BzW2ldLmFtX2Vycm9yID0gc3RybmNweV9mcm9tX3VzZXIoYXR0cl9uYW1lLAorCQlvcHNbaV0uYW1fZXJyb3IgPSBzdHJuY3B5X2Zyb21fdXNlcigoY2hhciAqKWF0dHJfbmFtZSwKIAkJCQlvcHNbaV0uYW1fYXR0cm5hbWUsIE1BWE5BTUVMRU4pOwogCQlpZiAob3BzW2ldLmFtX2Vycm9yID09IDAgfHwgb3BzW2ldLmFtX2Vycm9yID09IE1BWE5BTUVMRU4pCiAJCQllcnJvciA9IC1FUkFOR0U7CkBAIC0xNDMxLDYgKzE0MzEsOSBAQAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCisJCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCisJCQlyZXR1cm4gLVhGU19FUlJPUihFUk9GUyk7CisKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbm91dCwgYXJnLCBzaXplb2YoaW5vdXQpKSkKIAkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5oCmluZGV4IDdiZDdjNmEuLmQ1NjE3M2IgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuaApAQCAtNDUsMjMgKzQ1LDIzIEBACiBleHRlcm4gaW50CiB4ZnNfYXR0cm11bHRpX2F0dHJfZ2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljaGFyCQkJX191c2VyICp1YnVmLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAorCXVuc2lnbmVkIGNoYXIJCV9fdXNlciAqdWJ1ZiwKIAlfX3VpbnQzMl90CQkqbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKTsKIAogZXh0ZXJuIGludAotCXhmc19hdHRybXVsdGlfYXR0cl9zZXQoCit4ZnNfYXR0cm11bHRpX2F0dHJfc2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljb25zdCBjaGFyCQlfX3VzZXIgKnVidWYsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhcglfX3VzZXIgKnVidWYsCiAJX191aW50MzJfdAkJbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKTsKIAogZXh0ZXJuIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX3JlbW92ZSgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCiAJX191aW50MzJfdAkJZmxhZ3MpOwogCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKaW5kZXggYmUxNTI3Yi4uMGJmNmQ2MSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJY29tcGF0X3hmc19mc29wX2F0dHJtdWx0aV9oYW5kbGVyZXFfdAlhbV9ocmVxOwogCXN0cnVjdCBkZW50cnkJCQkJKmRlbnRyeTsKIAl1bnNpZ25lZCBpbnQJCQkJaSwgc2l6ZTsKLQljaGFyCQkJCQkqYXR0cl9uYW1lOworCXVuc2lnbmVkIGNoYXIJCQkJKmF0dHJfbmFtZTsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1YRlNfRVJST1IoRVBFUk0pOwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAKIAllcnJvciA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGFtX2hyZXEub3Bjb3VudDsgaSsrKSB7Ci0JCW9wc1tpXS5hbV9lcnJvciA9IHN0cm5jcHlfZnJvbV91c2VyKGF0dHJfbmFtZSwKKwkJb3BzW2ldLmFtX2Vycm9yID0gc3RybmNweV9mcm9tX3VzZXIoKGNoYXIgKilhdHRyX25hbWUsCiAJCQkJY29tcGF0X3B0cihvcHNbaV0uYW1fYXR0cm5hbWUpLAogCQkJCU1BWE5BTUVMRU4pOwogCQlpZiAob3BzW2ldLmFtX2Vycm9yID09IDAgfHwgb3BzW2ldLmFtX2Vycm9yID09IE1BWE5BTUVMRU4pCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggMjI1OTQ2MC4uZTg1NjZiYiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtMTQwLDEwICsxNDAsMTAgQEAKIAlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKIAlzaXplX3QJCWxlbmd0aDsKIAl2b2lkCQkqdmFsdWU7Ci0JY2hhcgkJKm5hbWU7CisJdW5zaWduZWQgY2hhcgkqbmFtZTsKIAlpbnQJCWVycm9yOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsICZuYW1lLAorCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCAoY2hhciAqKikmbmFtZSwKIAkJCQkJICAgICAmdmFsdWUsICZsZW5ndGgpOwogCWlmIChlcnJvcikgewogCQlpZiAoZXJyb3IgPT0gLUVPUE5PVFNVUFApCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDBkMzI0NTcuLmVhYzZmODAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC02MzAsMTggKzYzMCw5IEBACiAJICogYnkgcm9vdC4gIFRoaXMga2VlcHMgcGVvcGxlIGZyb20gbW9kaWZ5aW5nIHNldHVpZCBhbmQKIAkgKiBzZXRnaWQgYmluYXJpZXMuCiAJICovCi0KLQlpZiAoKCh4aXAtPmlfZC5kaV9tb2RlICYgU19JU1VJRCkgfHwKLQkgICAgKCh4aXAtPmlfZC5kaV9tb2RlICYgKFNfSVNHSUQgfCBTX0lYR1JQKSkgPT0KLQkJKFNfSVNHSUQgfCBTX0lYR1JQKSkpICYmCi0JICAgICAhY2FwYWJsZShDQVBfRlNFVElEKSkgewotCQllcnJvciA9IHhmc193cml0ZV9jbGVhcl9zZXR1aWQoeGlwKTsKLQkJaWYgKGxpa2VseSghZXJyb3IpKQotCQkJZXJyb3IgPSAtZmlsZV9yZW1vdmVfc3VpZChmaWxlKTsKLQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCQl9Ci0JfQorCWVycm9yID0gLWZpbGVfcmVtb3ZlX3N1aWQoZmlsZSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwogCiAJLyogV2UgY2FuIHdyaXRlIGJhY2sgdGhpcyBxdWV1ZSBpbiBwYWdlIHJlY2xhaW0gKi8KIAljdXJyZW50LT5iYWNraW5nX2Rldl9pbmZvID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKQEAgLTc4NCw1MyArNzc1LDYgQEAKIH0KIAogLyoKLSAqIEFsbCB4ZnMgbWV0YWRhdGEgYnVmZmVycyBleGNlcHQgbG9nIHN0YXRlIG1hY2hpbmUgYnVmZmVycwotICogZ2V0IHRoaXMgYXR0YWNoZWQgYXMgdGhlaXIgYl9iZHN0cmF0IGNhbGxiYWNrIGZ1bmN0aW9uLgotICogVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBjYXRjaCBhIGJ1ZmZlcgotICogYWZ0ZXIgcHJlbWF0dXJlbHkgdW5waW5uaW5nIGl0IHRvIGZvcmNpYmx5IHNodXRkb3duIHRoZSBmaWxlc3lzdGVtLgotICovCi1pbnQKLXhmc19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICpicCkKLXsKLQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihicC0+Yl9tb3VudCkpIHsKLQkJdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOwotCQkvKgotCQkgKiBNZXRhZGF0YSB3cml0ZSB0aGF0IGRpZG4ndCBnZXQgbG9nZ2VkIGJ1dAotCQkgKiB3cml0dGVuIGRlbGF5ZWQgYW55d2F5LiBUaGVzZSBhcmVuJ3QgYXNzb2NpYXRlZAotCQkgKiB3aXRoIGEgdHJhbnNhY3Rpb24sIGFuZCBjYW4gYmUgaWdub3JlZC4KLQkJICovCi0JCWlmIChYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKSA9PSBOVUxMICYmCi0JCSAgICAoWEZTX0JVRl9JU1JFQUQoYnApKSA9PSAwKQotCQkJcmV0dXJuICh4ZnNfYmlvZXJyb3JfcmVsc2UoYnApKTsKLQkJZWxzZQotCQkJcmV0dXJuICh4ZnNfYmlvZXJyb3IoYnApKTsKLQl9Ci0KLQl4ZnNfYnVmX2lvcmVxdWVzdChicCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBXcmFwcGVyIGFyb3VuZCBiZHN0cmF0IHNvIHRoYXQgd2UgY2FuIHN0b3AgZGF0YSBmcm9tIGdvaW5nIHRvIGRpc2sgaW4gY2FzZQotICogd2UgYXJlIHNodXR0aW5nIGRvd24gdGhlIGZpbGVzeXN0ZW0uICBUeXBpY2FsbHkgdXNlciBkYXRhIGdvZXMgdGhydSB0aGlzCi0gKiBwYXRoOyBvbmUgb2YgdGhlIGV4Y2VwdGlvbnMgaXMgdGhlIHN1cGVyYmxvY2suCi0gKi8KLXZvaWQKLXhmc2Jkc3RyYXQoCi0Jc3RydWN0IHhmc19tb3VudAkqbXAsCi0Jc3RydWN0IHhmc19idWYJCSpicCkKLXsKLQlBU1NFUlQobXApOwotCWlmICghWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKLQkJeGZzX2J1Zl9pb3JlcXVlc3QoYnApOwotCQlyZXR1cm47Ci0JfQotCi0JdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOwotCXhmc19iaW9lcnJvcl9yZWxzZShicCk7Ci19Ci0KLS8qCiAgKiBJZiB0aGUgdW5kZXJseWluZyAoZGF0YS9sb2cvcnQpIGRldmljZSBpcyByZWFkb25seSwgdGhlcmUgYXJlIHNvbWUKICAqIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3QgcHJvY2VlZC4KICAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAppbmRleCBkMWY3Nzg5Li4zNDJhZThjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaApAQCAtMjIsOSArMjIsNiBAQAogc3RydWN0IHhmc19pbm9kZTsKIHN0cnVjdCB4ZnNfYnVmOwogCi0vKiBlcnJvcnMgZnJvbSB4ZnNiZHN0cmF0KCkgbXVzdCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgYnVmZmVyICovCi1leHRlcm4gdm9pZCB4ZnNiZHN0cmF0KHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19idWYgKik7Ci1leHRlcm4gaW50IHhmc19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICopOwogZXh0ZXJuIGludCB4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7CiAKIGV4dGVybiBpbnQgeGZzX3plcm9fZW9mKHN0cnVjdCB4ZnNfaW5vZGUgKiwgeGZzX29mZl90LCB4ZnNfZnNpemVfdCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCA3NzQxNGRiLi4yNWVhMjQwIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTg3NywxMiArODc3LDExIEBACiB7CiAJc3RydWN0IHhmc19haWwJKmFpbHAgPSBkYXRhOwogCXhmc19sc25fdAlsYXN0X3B1c2hlZF9sc24gPSAwOwotCWxvbmcJCXRvdXQgPSAwOworCWxvbmcJCXRvdXQgPSAwOyAvKiBtaWxsaXNlY29uZHMgKi8KIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCWlmICh0b3V0KQotCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXModG91dCkpOwotCQl0b3V0ID0gMTAwMDsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRvdXQgPworCQkJCW1zZWNzX3RvX2ppZmZpZXModG91dCkgOiBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAKIAkJLyogc3dzdXNwICovCiAJCXRyeV90b19mcmVlemUoKTsKQEAgLTEwMjIsMTIgKzEwMjEsNDUgQEAKIAlYRlNfSShpbm9kZSktPmlfdXBkYXRlX2NvcmUgPSAxOwogfQogCi0vKgotICogQXR0ZW1wdCB0byBmbHVzaCB0aGUgaW5vZGUsIHRoaXMgd2lsbCBhY3R1YWxseSBmYWlsCi0gKiBpZiB0aGUgaW5vZGUgaXMgcGlubmVkLCBidXQgd2UgZGlydHkgdGhlIGlub2RlIGFnYWluCi0gKiBhdCB0aGUgcG9pbnQgd2hlbiBpdCBpcyB1bnBpbm5lZCBhZnRlciBhIGxvZyB3cml0ZSwKLSAqIHNpbmNlIHRoaXMgaXMgd2hlbiB0aGUgaW5vZGUgaXRzZWxmIGJlY29tZXMgZmx1c2hhYmxlLgotICovCitTVEFUSUMgaW50Cit4ZnNfbG9nX2lub2RlKAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtPmlfbW91bnQ7CisJc3RydWN0IHhmc190cmFucwkqdHA7CisJaW50CQkJZXJyb3I7CisKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19GU1lOQ19UUyk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwgWEZTX0ZTWU5DX1RTX0xPR19SRVMobXApLCAwLCAwLCAwKTsKKworCWlmIChlcnJvcikgeworCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKKwkJLyogd2UgbmVlZCB0byByZXR1cm4gd2l0aCB0aGUgbG9jayBob2xkIHNoYXJlZCAqLworCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwkvKgorCSAqIE5vdGUgLSBpdCdzIHBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgaGF2ZSBwdXNoZWQgb3Vyc2VsdmVzIG91dCBvZiB0aGUKKwkgKiB3YXkgZHVyaW5nIHRyYW5zX3Jlc2VydmUgd2hpY2ggd291bGQgZmx1c2ggdGhlIGlub2RlLiAgQnV0IHRoZXJlJ3MKKwkgKiBubyBndWFyYW50ZWUgdGhhdCB0aGUgaW5vZGUgYnVmZmVyIGhhcyBhY3R1YWxseSBnb25lIG91dCB5ZXQgKGl0J3MKKwkgKiBkZWx3cmkpLiAgUGx1cyB0aGUgYnVmZmVyIGNvdWxkIGJlIHBpbm5lZCBhbnl3YXkgaWYgaXQncyBwYXJ0IG9mCisJICogYW4gaW5vZGUgaW4gYW5vdGhlciByZWNlbnQgdHJhbnNhY3Rpb24uICBTbyB3ZSBwbGF5IGl0IHNhZmUgYW5kCisJICogZmlyZSBvZmYgdGhlIHRyYW5zYWN0aW9uIGFueXdheS4KKwkgKi8KKwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOworCXhmc190cmFuc19zZXRfc3luYyh0cCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwl4ZnNfaWxvY2tfZGVtb3RlKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIFNUQVRJQyBpbnQKIHhmc19mc193cml0ZV9pbm9kZSgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKQEAgLTEwMzUsNyArMTA2Nyw3IEBACiB7CiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKLQlpbnQJCQllcnJvciA9IDA7CisJaW50CQkJZXJyb3IgPSBFQUdBSU47CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKIApAQCAtMTA0NiwzNiArMTA3OCw1NiBAQAogCQllcnJvciA9IHhmc193YWl0X29uX3BhZ2VzKGlwLCAwLCAtMSk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwotCX0KIAotCS8qCi0JICogQnlwYXNzIGlub2RlcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBjbGVhbmVkIGJ5Ci0JICogdGhlIGlub2RlIGZsdXNoIGNsdXN0ZXJpbmcgY29kZSBpbnNpZGUgeGZzX2lmbHVzaAotCSAqLwotCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogV2UgbWFrZSB0aGlzIG5vbi1ibG9ja2luZyBpZiB0aGUgaW5vZGUgaXMgY29udGVuZGVkLCByZXR1cm4KLQkgKiBFQUdBSU4gdG8gaW5kaWNhdGUgdG8gdGhlIGNhbGxlciB0aGF0IHRoZXkgZGlkIG5vdCBzdWNjZWVkLgotCSAqIFRoaXMgcHJldmVudHMgdGhlIGZsdXNoIHBhdGggZnJvbSBibG9ja2luZyBvbiBpbm9kZXMgaW5zaWRlCi0JICogYW5vdGhlciBvcGVyYXRpb24gcmlnaHQgbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCi0JICovCi0JaWYgKHN5bmMpIHsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBpbm9kZSBoYXMgaGl0IHN0YWJsZSBzdG9yYWdlLiAgQnkgdXNpbmcgdGhlCisJCSAqIGxvZyBhbmQgdGhlIGZzeW5jIHRyYW5zYWN0aW9ucyB3ZSByZWR1Y2UgdGhlIElPcyB3ZSBoYXZlCisJCSAqIHRvIGRvIGhlcmUgZnJvbSB0d28gKGxvZyBhbmQgaW5vZGUpIHRvIGp1c3QgdGhlIGxvZy4KKwkJICoKKwkJICogTm90ZTogV2Ugc3RpbGwgbmVlZCB0byBkbyBhIGRlbHdyaSB3cml0ZSBvZiB0aGUgaW5vZGUgYWZ0ZXIKKwkJICogdGhpcyB0byBmbHVzaCBpdCB0byB0aGUgYmFja2luZyBidWZmZXIgc28gdGhhdCBidWxrc3RhdAorCQkgKiB3b3JrcyBwcm9wZXJseSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSBpbm9kZSBoYXMgYmVlbgorCQkgKiB3cml0dGVuLiAgQmVjYXVzZSB3ZSBob2xkIHRoZSBpbG9jayBhdG9taWNhbGx5IG92ZXIgdGhlCisJCSAqIHRyYW5zYWN0aW9uIGNvbW1pdCBhbmQgdGhlIGlub2RlIGZsdXNoIHdlIGFyZSBndWFyYW50ZWVkCisJCSAqIHRoYXQgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQgd2hlbiBpdCByZXR1cm5zLiBJZiB0aGUgZmx1c2gKKwkJICogbG9jayBpcyBhbHJlYWR5IGhlbGQsIHRoZW4gdGhlIGlub2RlIGhhcyBhbHJlYWR5IGJlZW4KKwkJICogZmx1c2hlZCBvbmNlIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGZsdXNoIGl0IGFnYWluLiAgSGVuY2UKKwkJICogdGhlIGNvZGUgd2lsbCBvbmx5IGZsdXNoIHRoZSBpbm9kZSBpZiBpdCBpc24ndCBhbHJlYWR5CisJCSAqIGJlaW5nIGZsdXNoZWQuCisJCSAqLwogCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCQl4ZnNfaWZsb2NrKGlwKTsKLQotCQllcnJvciA9IHhmc19pZmx1c2goaXAsIFhGU19JRkxVU0hfU1lOQyk7CisJCWlmIChpcC0+aV91cGRhdGVfY29yZSkgeworCQkJZXJyb3IgPSB4ZnNfbG9nX2lub2RlKGlwKTsKKwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KIAl9IGVsc2UgewotCQllcnJvciA9IEVBR0FJTjsKKwkJLyoKKwkJICogV2UgbWFrZSB0aGlzIG5vbi1ibG9ja2luZyBpZiB0aGUgaW5vZGUgaXMgY29udGVuZGVkLCByZXR1cm4KKwkJICogRUFHQUlOIHRvIGluZGljYXRlIHRvIHRoZSBjYWxsZXIgdGhhdCB0aGV5IGRpZCBub3Qgc3VjY2VlZC4KKwkJICogVGhpcyBwcmV2ZW50cyB0aGUgZmx1c2ggcGF0aCBmcm9tIGJsb2NraW5nIG9uIGlub2RlcyBpbnNpZGUKKwkJICogYW5vdGhlciBvcGVyYXRpb24gcmlnaHQgbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCisJCSAqLwogCQlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXAsIFhGU19JTE9DS19TSEFSRUQpKQogCQkJZ290byBvdXQ7Ci0JCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKQotCQkJZ290byBvdXRfdW5sb2NrOwotCi0JCWVycm9yID0geGZzX2lmbHVzaChpcCwgWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLKTsKIAl9CiAKKwlpZiAoeGZzX2lwaW5jb3VudChpcCkgfHwgIXhmc19pZmxvY2tfbm93YWl0KGlwKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyoKKwkgKiBOb3cgd2UgaGF2ZSB0aGUgZmx1c2ggbG9jayBhbmQgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQsIHdlIGNhbiBjaGVjaworCSAqIGlmIHRoZSBpbm9kZSBpcyByZWFsbHkgY2xlYW4gYXMgd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nCisJICogdHJhbnNhY3Rpb24gY29tcGxldGlvbnMsIGl0IGlzIG5vdCB3YWl0aW5nIG9uIHRoZSBkZWxheWVkIHdyaXRlCisJICogcXVldWUgYW5kIHRoZXJlIGlzIG5vIElPIGluIHByb2dyZXNzLgorCSAqLworCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKSB7CisJCXhmc19pZnVubG9jayhpcCk7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwllcnJvciA9IHhmc19pZmx1c2goaXAsIDApOworCiAgb3V0X3VubG9jazoKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiAgb3V0OgpAQCAtMTI1Nyw2ICsxMzA5LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK1NUQVRJQyB2b2lkCit4ZnNfc2F2ZV9yZXN2YmxrcyhzdHJ1Y3QgeGZzX21vdW50ICptcCkKK3sKKwlfX3VpbnQ2NF90IHJlc2Jsa3MgPSAwOworCisJbXAtPm1fcmVzYmxrc19zYXZlID0gbXAtPm1fcmVzYmxrczsKKwl4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZyZXNibGtzLCBOVUxMKTsKK30KKworU1RBVElDIHZvaWQKK3hmc19yZXN0b3JlX3Jlc3ZibGtzKHN0cnVjdCB4ZnNfbW91bnQgKm1wKQoreworCV9fdWludDY0X3QgcmVzYmxrczsKKworCWlmIChtcC0+bV9yZXNibGtzX3NhdmUpIHsKKwkJcmVzYmxrcyA9IG1wLT5tX3Jlc2Jsa3Nfc2F2ZTsKKwkJbXAtPm1fcmVzYmxrc19zYXZlID0gMDsKKwl9IGVsc2UKKwkJcmVzYmxrcyA9IHhmc19kZWZhdWx0X3Jlc2Jsa3MobXApOworCisJeGZzX3Jlc2VydmVfYmxvY2tzKG1wLCAmcmVzYmxrcywgTlVMTCk7Cit9CisKIFNUQVRJQyBpbnQKIHhmc19mc19yZW1vdW50KAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCkBAIC0xMzM2LDExICsxNDExLDI3IEBACiAJCQl9CiAJCQltcC0+bV91cGRhdGVfZmxhZ3MgPSAwOwogCQl9CisKKwkJLyoKKwkJICogRmlsbCBvdXQgdGhlIHJlc2VydmUgcG9vbCBpZiBpdCBpcyBlbXB0eS4gVXNlIHRoZSBzdGFzaGVkCisJCSAqIHZhbHVlIGlmIGl0IGlzIG5vbi16ZXJvLCBvdGhlcndpc2UgZ28gd2l0aCB0aGUgZGVmYXVsdC4KKwkJICovCisJCXhmc19yZXN0b3JlX3Jlc3ZibGtzKG1wKTsKIAl9CiAKIAkvKiBydyAtPiBybyAqLwogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkgJiYgKCpmbGFncyAmIE1TX1JET05MWSkpIHsKKwkJLyoKKwkJICogQWZ0ZXIgd2UgaGF2ZSBzeW5jZWQgdGhlIGRhdGEgYnV0IGJlZm9yZSB3ZSBzeW5jIHRoZQorCQkgKiBtZXRhZGF0YSwgd2UgbmVlZCB0byBmcmVlIHVwIHRoZSByZXNlcnZlIGJsb2NrIHBvb2wgc28gdGhhdAorCQkgKiB0aGUgdXNlZCBibG9jayBjb3VudCBpbiB0aGUgc3VwZXJibG9jayBvbiBkaXNrIGlzIGNvcnJlY3QgYXQKKwkJICogdGhlIGVuZCBvZiB0aGUgcmVtb3VudC4gU3Rhc2ggdGhlIGN1cnJlbnQgcmVzZXJ2ZSBwb29sIHNpemUKKwkJICogc28gdGhhdCBpZiB3ZSBnZXQgcmVtb3VudGVkIHJ3LCB3ZSBjYW4gcmV0dXJuIGl0IHRvIHRoZSBzYW1lCisJCSAqIHNpemUuCisJCSAqLworCiAJCXhmc19xdWllc2NlX2RhdGEobXApOworCQl4ZnNfc2F2ZV9yZXN2YmxrcyhtcCk7CiAJCXhmc19xdWllc2NlX2F0dHIobXApOwogCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfUkRPTkxZOwogCX0KQEAgLTEzNTksMTEgKzE0NTAsMjIgQEAKIHsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKIAorCXhmc19zYXZlX3Jlc3ZibGtzKG1wKTsKIAl4ZnNfcXVpZXNjZV9hdHRyKG1wKTsKIAlyZXR1cm4gLXhmc19mc19sb2dfZHVtbXkobXApOwogfQogCiBTVEFUSUMgaW50Cit4ZnNfZnNfdW5mcmVlemUoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYikKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKworCXhmc19yZXN0b3JlX3Jlc3ZibGtzKG1wKTsKKwlyZXR1cm4gMDsKK30KKworU1RBVElDIGludAogeGZzX2ZzX3Nob3dfb3B0aW9ucygKIAlzdHJ1Y3Qgc2VxX2ZpbGUJCSptLAogCXN0cnVjdCB2ZnNtb3VudAkJKm1udCkKQEAgLTE1ODUsNiArMTY4Nyw3IEBACiAJLnB1dF9zdXBlcgkJPSB4ZnNfZnNfcHV0X3N1cGVyLAogCS5zeW5jX2ZzCQk9IHhmc19mc19zeW5jX2ZzLAogCS5mcmVlemVfZnMJCT0geGZzX2ZzX2ZyZWV6ZSwKKwkudW5mcmVlemVfZnMJCT0geGZzX2ZzX3VuZnJlZXplLAogCS5zdGF0ZnMJCQk9IHhmc19mc19zdGF0ZnMsCiAJLnJlbW91bnRfZnMJCT0geGZzX2ZzX3JlbW91bnQsCiAJLnNob3dfb3B0aW9ucwkJPSB4ZnNfZnNfc2hvd19vcHRpb25zLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCmluZGV4IDFmNWU0YmIuLmE5ZjZkMjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKQEAgLTkwLDE0ICs5MCwxMyBAQAogU1RBVElDIGludAogeGZzX2lub2RlX2FnX3dhbGsoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCi0JeGZzX2FnbnVtYmVyX3QJCWFnLAorCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZywKIAlpbnQJCQkoKmV4ZWN1dGUpKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLAogCQkJCQkgICBzdHJ1Y3QgeGZzX3BlcmFnICpwYWcsIGludCBmbGFncyksCiAJaW50CQkJZmxhZ3MsCiAJaW50CQkJdGFnLAogCWludAkJCWV4Y2x1c2l2ZSkKIHsKLQlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcgPSAmbXAtPm1fcGVyYWdbYWddOwogCXVpbnQzMl90CQlmaXJzdF9pbmRleDsKIAlpbnQJCQlsYXN0X2Vycm9yID0gMDsKIAlpbnQJCQlza2lwcGVkOwpAQCAtMTQxLDggKzE0MCw2IEBACiAJCWRlbGF5KDEpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQotCi0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKIAlyZXR1cm4gbGFzdF9lcnJvcjsKIH0KIApAQCAtMTYwLDEwICsxNTcsMTYgQEAKIAl4ZnNfYWdudW1iZXJfdAkJYWc7CiAKIAlmb3IgKGFnID0gMDsgYWcgPCBtcC0+bV9zYi5zYl9hZ2NvdW50OyBhZysrKSB7Ci0JCWlmICghbXAtPm1fcGVyYWdbYWddLnBhZ19pY2lfaW5pdCkKKwkJc3RydWN0IHhmc19wZXJhZwkqcGFnOworCisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKKwkJaWYgKCFwYWctPnBhZ19pY2lfaW5pdCkgeworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJY29udGludWU7Ci0JCWVycm9yID0geGZzX2lub2RlX2FnX3dhbGsobXAsIGFnLCBleGVjdXRlLCBmbGFncywgdGFnLAorCQl9CisJCWVycm9yID0geGZzX2lub2RlX2FnX3dhbGsobXAsIHBhZywgZXhlY3V0ZSwgZmxhZ3MsIHRhZywKIAkJCQkJCWV4Y2x1c2l2ZSk7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlsYXN0X2Vycm9yID0gZXJyb3I7CiAJCQlpZiAoZXJyb3IgPT0gRUZTQ09SUlVQVEVEKQpAQCAtMjMxLDcgKzIzNCw3IEBACiAJfQogCiAJZXJyb3IgPSB4ZnNfZmx1c2hfcGFnZXMoaXAsIDAsIC0xLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8KLQkJCQkwIDogWEZTX0JfQVNZTkMsIEZJX05PTkUpOworCQkJCTAgOiBYQkZfQVNZTkMsIEZJX05PTkUpOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiAKICBvdXRfd2FpdDoKQEAgLTI2Nyw4ICsyNzAsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8KLQkJCSAgIFhGU19JRkxVU0hfU1lOQyA6IFhGU19JRkxVU0hfREVMV1JJKTsKKwllcnJvciA9IHhmc19pZmx1c2goaXAsIGZsYWdzKTsKIAogIG91dF91bmxvY2s6CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwpAQCAtMjkzLDEwICsyOTUsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIFhGU19FUlJPUihlcnJvcik7CiAKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAwLAotCQkgICAgICAoZmxhZ3MgJiBTWU5DX1dBSVQpID8KLQkJICAgICAgIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMgOgotCQkgICAgICAgWEZTX0xPR19GT1JDRSk7CisJeGZzX2xvZ19mb3JjZShtcCwgKGZsYWdzICYgU1lOQ19XQUlUKSA/IFhGU19MT0dfU1lOQyA6IDApOwogCXJldHVybiAwOwogfQogCkBAIC0zMjIsMTAgKzMyMSw2IEBACiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBtcC0+bV9yb290aXA7CiAJc3RydWN0IHhmc190cmFucwkqdHA7CiAJaW50CQkJZXJyb3I7Ci0JaW50CQkJbG9nX2ZsYWdzID0gWEZTX0xPR19GT1JDRTsKLQotCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKLQkJbG9nX2ZsYWdzIHw9IFhGU19MT0dfU1lOQzsKIAogCS8qCiAJICogUHV0IGEgZHVtbXkgdHJhbnNhY3Rpb24gaW4gdGhlIGxvZyB0byB0ZWxsIHJlY292ZXJ5CkBAIC0zNDcsMTEgKzM0MiwxMSBAQAogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKIAkvKiB0aGUgbG9nIGZvcmNlIGVuc3VyZXMgdGhpcyB0cmFuc2FjdGlvbiBpcyBwdXNoZWQgdG8gZGlzayAqLwotCXhmc19sb2dfZm9yY2UobXAsIDAsIGxvZ19mbGFncyk7CisJeGZzX2xvZ19mb3JjZShtcCwgKGZsYWdzICYgU1lOQ19XQUlUKSA/IFhGU19MT0dfU1lOQyA6IDApOwogCXJldHVybiBlcnJvcjsKIH0KIAotaW50CitTVEFUSUMgaW50CiB4ZnNfc3luY19mc2RhdGEoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJaW50CQkJZmxhZ3MpCkBAIC0zNjcsNyArMzYyLDcgQEAKIAlpZiAoZmxhZ3MgJiBTWU5DX1RSWUxPQ0spIHsKIAkJQVNTRVJUKCEoZmxhZ3MgJiBTWU5DX1dBSVQpKTsKIAotCQlicCA9IHhmc19nZXRzYihtcCwgWEZTX0JVRl9UUllMT0NLKTsKKwkJYnAgPSB4ZnNfZ2V0c2IobXAsIFhCRl9UUllMT0NLKTsKIAkJaWYgKCFicCkKIAkJCWdvdG8gb3V0OwogCkBAIC0zODcsNyArMzgyLDcgQEAKIAkJICogYmVjb21lIHBpbm5lZCBpbiBiZXR3ZWVuIHRoZXJlIGFuZCBoZXJlLgogCQkgKi8KIAkJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKQotCQkJeGZzX2xvZ19mb3JjZShtcCwgMCwgWEZTX0xPR19GT1JDRSk7CisJCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKIAl9CiAKIApAQCAtNDQ4LDkgKzQ0Myw2IEBACiAJeGZzX3N5bmNfZGF0YShtcCwgU1lOQ19XQUlUKTsKIAl4ZnNfcW1fc3luYyhtcCwgU1lOQ19XQUlUKTsKIAotCS8qIGRyb3AgaW5vZGUgcmVmZXJlbmNlcyBwaW5uZWQgYnkgZmlsZXN0cmVhbXMgKi8KLQl4ZnNfZmlsZXN0cmVhbV9mbHVzaChtcCk7Ci0KIAkvKiB3cml0ZSBzdXBlcmJsb2NrIGFuZCBob292ZXIgdXAgc2h1dGRvd24gZXJyb3JzICovCiAJZXJyb3IgPSB4ZnNfc3luY19mc2RhdGEobXAsIFNZTkNfV0FJVCk7CiAKQEAgLTQ2NywxNiArNDU5LDE4IEBACiB7CiAJaW50CWNvdW50ID0gMCwgcGluY291bnQ7CiAKKwl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIDApOwogCXhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDApOwotCXhmc19yZWNsYWltX2lub2RlcyhtcCwgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQyk7CiAKIAkvKgogCSAqIFRoaXMgbG9vcCBtdXN0IHJ1biBhdCBsZWFzdCB0d2ljZS4gIFRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGUgbG9vcAogCSAqIHdpbGwgZmx1c2ggbW9zdCBtZXRhIGRhdGEgYnV0IHRoYXQgd2lsbCBnZW5lcmF0ZSBtb3JlIG1ldGEgZGF0YQogCSAqICh0eXBpY2FsbHkgZGlyZWN0b3J5IHVwZGF0ZXMpLiAgV2hpY2ggdGhlbiBtdXN0IGJlIGZsdXNoZWQgYW5kCi0JICogbG9nZ2VkIGJlZm9yZSB3ZSBjYW4gd3JpdGUgdGhlIHVubW91bnQgcmVjb3JkLgorCSAqIGxvZ2dlZCBiZWZvcmUgd2UgY2FuIHdyaXRlIHRoZSB1bm1vdW50IHJlY29yZC4gV2UgYWxzbyBzbyBzeW5jCisJICogcmVjbGFpbSBvZiBpbm9kZXMgdG8gY2F0Y2ggYW55IHRoYXQgdGhlIGFib3ZlIGRlbHdyaSBmbHVzaCBza2lwcGVkLgogCSAqLwogCWRvIHsKKwkJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBTWU5DX1dBSVQpOwogCQl4ZnNfc3luY19hdHRyKG1wLCBTWU5DX1dBSVQpOwogCQlwaW5jb3VudCA9IHhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDEpOwogCQlpZiAoIXBpbmNvdW50KSB7CkBAIC01NzUsNyArNTY5LDcgQEAKIAlpZ3JhYihpbm9kZSk7CiAJeGZzX3N5bmNkX3F1ZXVlX3dvcmsoaXAtPmlfbW91bnQsIGlub2RlLCB4ZnNfZmx1c2hfaW5vZGVzX3dvcmssICZjb21wbGV0aW9uKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21wbGV0aW9uKTsKLQl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0V8WEZTX0xPR19TWU5DKTsKKwl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCBYRlNfTE9HX1NZTkMpOwogfQogCiAvKgpAQCAtNTkxLDggKzU4NSw4IEBACiAJaW50CQllcnJvcjsKIAogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkpIHsKLQkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFKTsKLQkJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX0FTWU5DKTsKKwkJeGZzX2xvZ19mb3JjZShtcCwgMCk7CisJCXhmc19yZWNsYWltX2lub2RlcyhtcCwgMCk7CiAJCS8qIGRnYzogZXJyb3JzIGlnbm9yZWQgaGVyZSAqLwogCQllcnJvciA9IHhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOwogCQllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19UUllMT0NLKTsKQEAgLTY5MCwxNiArNjg0LDE3IEBACiB4ZnNfaW5vZGVfc2V0X3JlY2xhaW1fdGFnKAogCXhmc19pbm9kZV90CSppcCkKIHsKLQl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKLQl4ZnNfcGVyYWdfdAkqcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaXAtPmlfaW5vKTsKKwlzdHJ1Y3QgeGZzX21vdW50ICptcCA9IGlwLT5pX21vdW50OworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAorCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIFhGU19JTk9fVE9fQUdOTyhtcCwgaXAtPmlfaW5vKSk7CiAJcmVhZF9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAlfX3hmc19pbm9kZV9zZXRfcmVjbGFpbV90YWcocGFnLCBpcCk7CiAJX194ZnNfaWZsYWdzX3NldChpcCwgWEZTX0lSRUNMQUlNQUJMRSk7CiAJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKIHZvaWQKQEAgLTcxMiwxMiArNzA3LDY0IEBACiAJCQlYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcC0+aV9pbm8pLCBYRlNfSUNJX1JFQ0xBSU1fVEFHKTsKIH0KIAorLyoKKyAqIElub2RlcyBpbiBkaWZmZXJlbnQgc3RhdGVzIG5lZWQgdG8gYmUgdHJlYXRlZCBkaWZmZXJlbnRseSwgYW5kIHRoZSByZXR1cm4KKyAqIHZhbHVlIG9mIHhmc19pZmx1c2ggaXMgbm90IHN1ZmZpY2llbnQgdG8gZ2V0IHRoaXMgcmlnaHQuIFRoZSBmb2xsb3dpbmcgdGFibGUKKyAqIGxpc3RzIHRoZSBpbm9kZSBzdGF0ZXMgYW5kIHRoZSByZWNsYWltIGFjdGlvbnMgbmVjZXNzYXJ5IGZvciBub24tYmxvY2tpbmcKKyAqIHJlY2xhaW06CisgKgorICoKKyAqCWlub2RlIHN0YXRlCSAgICAgaWZsdXNoIHJldAkJcmVxdWlyZWQgYWN0aW9uCisgKiAgICAgIC0tLS0tLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0gICAgICAgICAtLS0tLS0tLS0tLS0tLS0KKyAqCWJhZAkJCS0JCXJlY2xhaW0KKyAqCXNodXRkb3duCQlFSU8JCXVucGluIGFuZCByZWNsYWltCisgKgljbGVhbiwgdW5waW5uZWQJCTAJCXJlY2xhaW0KKyAqCXN0YWxlLCB1bnBpbm5lZAkJMAkJcmVjbGFpbQorICoJY2xlYW4sIHBpbm5lZCgqKQkwCQlyZXF1ZXVlCisgKglzdGFsZSwgcGlubmVkCQlFQUdBSU4JCXJlcXVldWUKKyAqCWRpcnR5LCBkZWx3cmkgb2sJMAkJcmVxdWV1ZQorICoJZGlydHksIGRlbHdyaSBibG9ja2VkCUVBR0FJTgkJcmVxdWV1ZQorICoJZGlydHksIHN5bmMgZmx1c2gJMAkJcmVjbGFpbQorICoKKyAqICgqKSBkZ2M6IEkgZG9uJ3QgdGhpbmsgdGhlIGNsZWFuLCBwaW5uZWQgc3RhdGUgaXMgcG9zc2libGUgYnV0IGl0IGdldHMKKyAqIGhhbmRsZWQgYW55d2F5IGdpdmVuIHRoZSBvcmRlciBvZiBjaGVja3MgaW1wbGVtZW50ZWQuCisgKgorICogQXMgY2FuIGJlIHNlZW4gZnJvbSB0aGUgdGFibGUsIHRoZSByZXR1cm4gdmFsdWUgb2YgeGZzX2lmbHVzaCgpIGlzIG5vdAorICogc3VmZmljaWVudCB0byBjb3JyZWN0bHkgZGVjaWRlIHRoZSByZWNsYWltIGFjdGlvbiBoZXJlLiBUaGUgY2hlY2tzIGluCisgKiB4ZnNfaWZsdXNoKCkgbWlnaHQgbG9vayBsaWtlIGR1cGxpY2F0ZXMsIGJ1dCB0aGV5IGFyZSBub3QuCisgKgorICogQWxzbywgYmVjYXVzZSB3ZSBnZXQgdGhlIGZsdXNoIGxvY2sgZmlyc3QsIHdlIGtub3cgdGhhdCBhbnkgaW5vZGUgdGhhdCBoYXMKKyAqIGJlZW4gZmx1c2hlZCBkZWx3cmkgaGFzIGhhZCB0aGUgZmx1c2ggY29tcGxldGVkIGJ5IHRoZSB0aW1lIHdlIGNoZWNrIHRoYXQKKyAqIHRoZSBpbm9kZSBpcyBjbGVhbi4gVGhlIGNsZWFuIGlub2RlIGNoZWNrIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIGZsdXNoaW5nCisgKiB0aGUgaW5vZGUgZGVsd3JpIG90aGVyd2lzZSB3ZSB3b3VsZCBsb29wIGZvcmV2ZXIgcmVxdWV1aW5nIGNsZWFuIGlub2RlcyBhcworICogd2UgY2Fubm90IHRlbGwgYXBhcnQgYSBzdWNjZXNzZnVsIGRlbHdyaSBmbHVzaCBhbmQgYSBjbGVhbiBpbm9kZSBmcm9tIHRoZQorICogcmV0dXJuIHZhbHVlIG9mIHhmc19pZmx1c2goKS4KKyAqCisgKiBOb3RlIHRoYXQgYmVjYXVzZSB0aGUgaW5vZGUgaXMgZmx1c2hlZCBkZWxheWVkIHdyaXRlIGJ5IGJhY2tncm91bmQKKyAqIHdyaXRlYmFjaywgdGhlIGZsdXNoIGxvY2sgbWF5IGFscmVhZHkgYmUgaGVsZCBoZXJlIGFuZCB3YWl0aW5nIG9uIGl0IGNhbgorICogcmVzdWx0IGluIHZlcnkgbG9uZyBsYXRlbmNpZXMuIEhlbmNlIGZvciBzeW5jIHJlY2xhaW1zLCB3aGVyZSB3ZSB3YWl0IG9uIHRoZQorICogZmx1c2ggbG9jaywgdGhlIGNhbGxlciBzaG91bGQgcHVzaCBvdXQgZGVsYXllZCB3cml0ZSBpbm9kZXMgZmlyc3QgYmVmb3JlCisgKiB0cnlpbmcgdG8gcmVjbGFpbSB0aGVtIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCB3YWl0aW5nLiBGb3IKKyAqIGJhY2tncm91bmQgcmVsYWltLCB3ZSBqdXN0IHJlcXVldWUgdGhlIGlub2RlIGZvciB0aGUgbmV4dCBwYXNzLgorICoKKyAqIEhlbmNlIHRoZSBvcmRlciBvZiBhY3Rpb25zIGFmdGVyIGdhaW5pbmcgdGhlIGxvY2tzIHNob3VsZCBiZToKKyAqCWJhZAkJPT4gcmVjbGFpbQorICoJc2h1dGRvd24JPT4gdW5waW4gYW5kIHJlY2xhaW0KKyAqCXBpbm5lZCwgZGVsd3JpCT0+IHJlcXVldWUKKyAqCXBpbm5lZCwgc3luYwk9PiB1bnBpbgorICoJc3RhbGUJCT0+IHJlY2xhaW0KKyAqCWNsZWFuCQk9PiByZWNsYWltCisgKglkaXJ0eSwgZGVsd3JpCT0+IGZsdXNoIGFuZCByZXF1ZXVlCisgKglkaXJ0eSwgc3luYwk9PiBmbHVzaCwgd2FpdCBhbmQgcmVjbGFpbQorICovCiBTVEFUSUMgaW50CiB4ZnNfcmVjbGFpbV9pbm9kZSgKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKIAlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcsCiAJaW50CQkJc3luY19tb2RlKQogeworCWludAllcnJvciA9IDA7CisKIAkvKgogCSAqIFRoZSByYWRpeCB0cmVlIGxvY2sgaGVyZSBwcm90ZWN0cyBhIHRocmVhZCBpbiB4ZnNfaWdldCBmcm9tIHJhY2luZwogCSAqIHdpdGggdXMgc3RhcnRpbmcgcmVjbGFpbSBvbiB0aGUgaW5vZGUuICBPbmNlIHdlIGhhdmUgdGhlCkBAIC03MzUsMzMgKzc4Miw3MCBAQAogCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAl3cml0ZV91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAotCS8qCi0JICogSWYgdGhlIGlub2RlIGlzIHN0aWxsIGRpcnR5LCB0aGVuIGZsdXNoIGl0IG91dC4gIElmIHRoZSBpbm9kZQotCSAqIGlzIG5vdCBpbiB0aGUgQUlMLCB0aGVuIGl0IHdpbGwgYmUgT0sgdG8gZmx1c2ggaXQgZGVsd3JpIGFzCi0JICogbG9uZyBhcyB4ZnNfaWZsdXNoKCkgZG9lcyBub3Qga2VlcCBhbnkgcmVmZXJlbmNlcyB0byB0aGUgaW5vZGUuCi0JICogV2UgbGVhdmUgdGhhdCBkZWNpc2lvbiB1cCB0byB4ZnNfaWZsdXNoKCkgc2luY2UgaXQgaGFzIHRoZQotCSAqIGtub3dsZWRnZSBvZiB3aGV0aGVyIGl0J3MgT0sgdG8gc2ltcGx5IGRvIGEgZGVsd3JpIGZsdXNoIG9mCi0JICogdGhlIGlub2RlIG9yIHdoZXRoZXIgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBpbm9kZSBpcwotCSAqIHB1bGxlZCBmcm9tIHRoZSBBSUwuCi0JICogV2UgZ2V0IHRoZSBmbHVzaCBsb2NrIHJlZ2FyZGxlc3MsIHRob3VnaCwganVzdCB0byBtYWtlIHN1cmUKLQkgKiB3ZSBkb24ndCBmcmVlIGl0IHdoaWxlIGl0IGlzIGJlaW5nIGZsdXNoZWQuCi0JICovCiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX2lmbG9jayhpcCk7Ci0KLQkvKgotCSAqIEluIHRoZSBjYXNlIG9mIGEgZm9yY2VkIHNodXRkb3duIHdlIHJlbHkgb24geGZzX2lmbHVzaCgpIHRvCi0JICogd2FpdCBmb3IgdGhlIGlub2RlIHRvIGJlIHVucGlubmVkIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3IuCi0JICovCi0JaWYgKCFpc19iYWRfaW5vZGUoVkZTX0koaXApKSAmJiB4ZnNfaWZsdXNoKGlwLCBzeW5jX21vZGUpID09IDApIHsKLQkJLyogc3luY2hyb25pemUgd2l0aCB4ZnNfaWZsdXNoX2RvbmUgKi8KKwlpZiAoIXhmc19pZmxvY2tfbm93YWl0KGlwKSkgeworCQlpZiAoIShzeW5jX21vZGUgJiBTWU5DX1dBSVQpKQorCQkJZ290byBvdXQ7CiAJCXhmc19pZmxvY2soaXApOwotCQl4ZnNfaWZ1bmxvY2soaXApOwogCX0KIAorCWlmIChpc19iYWRfaW5vZGUoVkZTX0koaXApKSkKKwkJZ290byByZWNsYWltOworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkgeworCQl4ZnNfaXVucGluX3dhaXQoaXApOworCQlnb3RvIHJlY2xhaW07CisJfQorCWlmICh4ZnNfaXBpbmNvdW50KGlwKSkgeworCQlpZiAoIShzeW5jX21vZGUgJiBTWU5DX1dBSVQpKSB7CisJCQl4ZnNfaWZ1bmxvY2soaXApOworCQkJZ290byBvdXQ7CisJCX0KKwkJeGZzX2l1bnBpbl93YWl0KGlwKTsKKwl9CisJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lTVEFMRSkpCisJCWdvdG8gcmVjbGFpbTsKKwlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkKKwkJZ290byByZWNsYWltOworCisJLyogTm93IHdlIGhhdmUgYW4gaW5vZGUgdGhhdCBuZWVkcyBmbHVzaGluZyAqLworCWVycm9yID0geGZzX2lmbHVzaChpcCwgc3luY19tb2RlKTsKKwlpZiAoc3luY19tb2RlICYgU1lOQ19XQUlUKSB7CisJCXhmc19pZmxvY2soaXApOworCQlnb3RvIHJlY2xhaW07CisJfQorCisJLyoKKwkgKiBXaGVuIHdlIGhhdmUgdG8gZmx1c2ggYW4gaW5vZGUgYnV0IGRvbid0IGhhdmUgU1lOQ19XQUlUIHNldCwgd2UKKwkgKiBmbHVzaCB0aGUgaW5vZGUgb3V0IHVzaW5nIGEgZGVsd3JpIGJ1ZmZlciBhbmQgd2FpdCBmb3IgdGhlIG5leHQKKwkgKiBjYWxsIGludG8gcmVjbGFpbSB0byBmaW5kIGl0IGluIGEgY2xlYW4gc3RhdGUgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcgorCSAqIGl0IG5vdy4gV2UgYWxzbyBkb24ndCByZXR1cm4gZXJyb3JzIGhlcmUgLSBpZiB0aGUgZXJyb3IgaXMgdHJhbnNpZW50CisJICogdGhlbiB0aGUgbmV4dCByZWNsYWltIHBhc3Mgd2lsbCBmbHVzaCB0aGUgaW5vZGUsIGFuZCBpZiB0aGUgZXJyb3IKKwkgKiBpcyBwZXJtYW5lbnQgdGhlbiB0aGUgbmV4dCBzeW5jIHJlY2xhaW0gd2lsbCByZWxjYWltIHRoZSBpbm9kZSBhbmQKKwkgKiBwYXNzIG9uIHRoZSBlcnJvci4KKwkgKi8KKwlpZiAoZXJyb3IgJiYgIVhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSB7CisJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGlwLT5pX21vdW50LAorCQkJImlub2RlIDB4JWxseCBiYWNrZ3JvdW5kIHJlY2xhaW0gZmx1c2ggZmFpbGVkIHdpdGggJWQiLAorCQkJKGxvbmcgbG9uZylpcC0+aV9pbm8sIGVycm9yKTsKKwl9CitvdXQ6CisJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lSRUNMQUlNKTsKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCS8qCisJICogV2UgY291bGQgcmV0dXJuIEVBR0FJTiBoZXJlIHRvIG1ha2UgcmVjbGFpbSByZXNjYW4gdGhlIGlub2RlIHRyZWUgaW4KKwkgKiBhIHNob3J0IHdoaWxlLiBIb3dldmVyLCB0aGlzIGp1c3QgYnVybnMgQ1BVIHRpbWUgc2Nhbm5pbmcgdGhlIHRyZWUKKwkgKiB3YWl0aW5nIGZvciBJTyB0byBjb21wbGV0ZSBhbmQgeGZzc3luY2QgbmV2ZXIgZ29lcyBiYWNrIHRvIHRoZSBpZGxlCisJICogc3RhdGUuIEluc3RlYWQsIHJldHVybiAwIHRvIGxldCB0aGUgbmV4dCBzY2hlZHVsZWQgYmFja2dyb3VuZCByZWNsYWltCisJICogYXR0ZW1wdCB0byByZWNsYWltIHRoZSBpbm9kZSBhZ2Fpbi4KKwkgKi8KKwlyZXR1cm4gMDsKKworcmVjbGFpbToKKwl4ZnNfaWZ1bmxvY2soaXApOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJeGZzX2lyZWNsYWltKGlwKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CisKIH0KIAogaW50CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKaW5kZXggZWE5MzJiNC4uZDQ4MGMzNCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaApAQCAtMzcsNyArMzcsNiBAQAogCiBpbnQgeGZzX3N5bmNfYXR0cihzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IGZsYWdzKTsKIGludCB4ZnNfc3luY19kYXRhKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgZmxhZ3MpOwotaW50IHhmc19zeW5jX2ZzZGF0YShzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IGZsYWdzKTsKIAogaW50IHhmc19xdWllc2NlX2RhdGEoc3RydWN0IHhmc19tb3VudCAqbXApOwogdm9pZCB4ZnNfcXVpZXNjZV9hdHRyKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmggYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCmluZGV4IGMyMmE2MDguLmE0NTc0ZGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaApAQCAtNzgsNiArNzgsMzMgQEAKIAkpCiApCiAKKyNkZWZpbmUgREVGSU5FX1BFUkFHX1JFRl9FVkVOVChuYW1lKSBcCitUUkFDRV9FVkVOVChuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8sIGludCByZWZjb3VudCwgXAorCQkgdW5zaWduZWQgbG9uZyBjYWxsZXJfaXApLCBcCisJVFBfQVJHUyhtcCwgYWdubywgcmVmY291bnQsIGNhbGxlcl9pcCksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKHhmc19hZ251bWJlcl90LCBhZ25vKSBcCisJCV9fZmllbGQoaW50LCByZWZjb3VudCkgXAorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlfX2VudHJ5LT5kZXYgPSBtcC0+bV9zdXBlci0+c19kZXY7IFwKKwkJX19lbnRyeS0+YWdubyA9IGFnbm87IFwKKwkJX19lbnRyeS0+cmVmY291bnQgPSByZWZjb3VudDsgXAorCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7IFwKKwkpLCBcCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYWdubyAldSByZWZjb3VudCAlZCBjYWxsZXIgJXBmIiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICBfX2VudHJ5LT5hZ25vLCBcCisJCSAgX19lbnRyeS0+cmVmY291bnQsIFwKKwkJICAoY2hhciAqKV9fZW50cnktPmNhbGxlcl9pcCkgXAorKTsKKworREVGSU5FX1BFUkFHX1JFRl9FVkVOVCh4ZnNfcGVyYWdfZ2V0KQorREVGSU5FX1BFUkFHX1JFRl9FVkVOVCh4ZnNfcGVyYWdfcHV0KQorCiAjZGVmaW5lIERFRklORV9BVFRSX0xJU1RfRVZFTlQobmFtZSkgXAogREVGSU5FX0VWRU5UKHhmc19hdHRyX2xpc3RfY2xhc3MsIG5hbWUsIFwKIAlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjdHgpLCBcCkBAIC00NTYsNiArNDgzLDcgQEAKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fdW5sb2NrX3N0YWxlKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fY29tbWl0dGVkKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fcHVzaCk7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX2J1Zl9pdGVtX3B1c2hidWYpOwogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19nZXRfYnVmKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfZ2V0X2J1Zl9yZWN1cik7CiBERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX3RyYW5zX2dldHNiKTsKQEAgLTE0MTQsNiArMTQ0Miw1OSBAQAogCQkgIF9fZW50cnktPmNvdW50KQogKTsKIAorI2RlZmluZSBYRlNfU1dBUEVYVF9JTk9ERVMgXAorCXsgMCwJInRhcmdldCIgfSwgXAorCXsgMSwJInRlbXAiIH0KKworI2RlZmluZSBYRlNfSU5PREVfRk9STUFUX1NUUiBcCisJeyAwLAkiaW52YWxpZCIgfSwgXAorCXsgMSwJImxvY2FsIiB9LCBcCisJeyAyLAkiZXh0ZW50IiB9LCBcCisJeyAzLAkiYnRyZWUiIH0KKworREVDTEFSRV9FVkVOVF9DTEFTUyh4ZnNfc3dhcF9leHRlbnRfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIGludCB3aGljaCksCisJVFBfQVJHUyhpcCwgd2hpY2gpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoZGV2X3QsIGRldikKKwkJX19maWVsZChpbnQsIHdoaWNoKQorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKQorCQlfX2ZpZWxkKGludCwgZm9ybWF0KQorCQlfX2ZpZWxkKGludCwgbmV4KQorCQlfX2ZpZWxkKGludCwgbWF4X25leCkKKwkJX19maWVsZChpbnQsIGJyb290X3NpemUpCisJCV9fZmllbGQoaW50LCBmb3JrX29mZikKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT53aGljaCA9IHdoaWNoOworCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87CisJCV9fZW50cnktPmZvcm1hdCA9IGlwLT5pX2QuZGlfZm9ybWF0OworCQlfX2VudHJ5LT5uZXggPSBpcC0+aV9kLmRpX25leHRlbnRzOworCQlfX2VudHJ5LT5tYXhfbmV4ID0gaXAtPmlfZGYuaWZfZXh0X21heDsKKwkJX19lbnRyeS0+YnJvb3Rfc2l6ZSA9IGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzOworCQlfX2VudHJ5LT5mb3JrX29mZiA9IFhGU19JRk9SS19CT0ZGKGlwKTsKKwkpLAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggKCVzKSwgJXMgZm9ybWF0LCBudW1fZXh0ZW50cyAlZCwgIgorCQkgICJNYXggaW4tZm9yayBleHRlbnRzICVkLCBicm9vdCBzaXplICVkLCBmb3JrIG9mZnNldCAlZCIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5pbm8sCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT53aGljaCwgWEZTX1NXQVBFWFRfSU5PREVTKSwKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPmZvcm1hdCwgWEZTX0lOT0RFX0ZPUk1BVF9TVFIpLAorCQkgIF9fZW50cnktPm5leCwKKwkJICBfX2VudHJ5LT5tYXhfbmV4LAorCQkgIF9fZW50cnktPmJyb290X3NpemUsCisJCSAgX19lbnRyeS0+Zm9ya19vZmYpCispCisKKyNkZWZpbmUgREVGSU5FX1NXQVBFWFRfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19zd2FwX2V4dGVudF9jbGFzcywgbmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgd2hpY2gpLCBcCisJVFBfQVJHUyhpcCwgd2hpY2gpKQorCitERUZJTkVfU1dBUEVYVF9FVkVOVCh4ZnNfc3dhcF9leHRlbnRfYmVmb3JlKTsKK0RFRklORV9TV0FQRVhUX0VWRU5UKHhmc19zd2FwX2V4dGVudF9hZnRlcik7CisKICNlbmRpZiAvKiBfVFJBQ0VfWEZTX0ggKi8KIAogI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3hhdHRyLmMKaW5kZXggMGIxODc4OC4uZmEwMWI5ZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc194YXR0ci5jCkBAIC00NSw3ICs0NSw3IEBACiAJCXZhbHVlID0gTlVMTDsKIAl9CiAKLQllcnJvciA9IC14ZnNfYXR0cl9nZXQoaXAsIG5hbWUsIHZhbHVlLCAmYXNpemUsIHhmbGFncyk7CisJZXJyb3IgPSAteGZzX2F0dHJfZ2V0KGlwLCAodW5zaWduZWQgY2hhciAqKW5hbWUsIHZhbHVlLCAmYXNpemUsIHhmbGFncyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJcmV0dXJuIGFzaXplOwpAQCAtNjcsOCArNjcsOSBAQAogCQl4ZmxhZ3MgfD0gQVRUUl9SRVBMQUNFOwogCiAJaWYgKCF2YWx1ZSkKLQkJcmV0dXJuIC14ZnNfYXR0cl9yZW1vdmUoaXAsIG5hbWUsIHhmbGFncyk7Ci0JcmV0dXJuIC14ZnNfYXR0cl9zZXQoaXAsIG5hbWUsICh2b2lkICopdmFsdWUsIHNpemUsIHhmbGFncyk7CisJCXJldHVybiAteGZzX2F0dHJfcmVtb3ZlKGlwLCAodW5zaWduZWQgY2hhciAqKW5hbWUsIHhmbGFncyk7CisJcmV0dXJuIC14ZnNfYXR0cl9zZXQoaXAsICh1bnNpZ25lZCBjaGFyICopbmFtZSwKKwkJCQkodm9pZCAqKXZhbHVlLCBzaXplLCB4ZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgeGZzX3hhdHRyX3VzZXJfaGFuZGxlciA9IHsKQEAgLTEyNCw4ICsxMjUsMTMgQEAKIH0KIAogc3RhdGljIGludAoteGZzX3hhdHRyX3B1dF9saXN0ZW50KHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmNvbnRleHQsIGludCBmbGFncywKLQkJY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCB2YWx1ZWxlbiwgY2hhciAqdmFsdWUpCit4ZnNfeGF0dHJfcHV0X2xpc3RlbnQoCisJc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwKKwlpbnQJCWZsYWdzLAorCXVuc2lnbmVkIGNoYXIJKm5hbWUsCisJaW50CQluYW1lbGVuLAorCWludAkJdmFsdWVsZW4sCisJdW5zaWduZWQgY2hhcgkqdmFsdWUpCiB7CiAJdW5zaWduZWQgaW50IHByZWZpeF9sZW4gPSB4ZnNfeGF0dHJfcHJlZml4X2xlbihmbGFncyk7CiAJY2hhciAqb2Zmc2V0OwpAQCAtMTQ4LDcgKzE1NCw3IEBACiAJb2Zmc2V0ID0gKGNoYXIgKiljb250ZXh0LT5hbGlzdCArIGNvbnRleHQtPmNvdW50OwogCXN0cm5jcHkob2Zmc2V0LCB4ZnNfeGF0dHJfcHJlZml4KGZsYWdzKSwgcHJlZml4X2xlbik7CiAJb2Zmc2V0ICs9IHByZWZpeF9sZW47Ci0Jc3RybmNweShvZmZzZXQsIG5hbWUsIG5hbWVsZW4pOwkJCS8qIHJlYWwgbmFtZSAqLworCXN0cm5jcHkob2Zmc2V0LCAoY2hhciAqKW5hbWUsIG5hbWVsZW4pOwkJCS8qIHJlYWwgbmFtZSAqLwogCW9mZnNldCArPSBuYW1lbGVuOwogCSpvZmZzZXQgPSAnXDAnOwogCWNvbnRleHQtPmNvdW50ICs9IHByZWZpeF9sZW4gKyBuYW1lbGVuICsgMTsKQEAgLTE1Niw4ICsxNjIsMTMgQEAKIH0KIAogc3RhdGljIGludAoteGZzX3hhdHRyX3B1dF9saXN0ZW50X3NpemVzKHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmNvbnRleHQsIGludCBmbGFncywKLQkJY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCB2YWx1ZWxlbiwgY2hhciAqdmFsdWUpCit4ZnNfeGF0dHJfcHV0X2xpc3RlbnRfc2l6ZXMoCisJc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwKKwlpbnQJCWZsYWdzLAorCXVuc2lnbmVkIGNoYXIJKm5hbWUsCisJaW50CQluYW1lbGVuLAorCWludAkJdmFsdWVsZW4sCisJdW5zaWduZWQgY2hhcgkqdmFsdWUpCiB7CiAJY29udGV4dC0+Y291bnQgKz0geGZzX3hhdHRyX3ByZWZpeF9sZW4oZmxhZ3MpICsgbmFtZWxlbiArIDE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKaW5kZXggZDdjN2VlYS4uNWY3OWRkNyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAKIAkgKiBibG9jaywgbmFkYS4KIAkgKi8KIAlpZiAoIVhGU19EUV9JU19ESVJUWShkcXApIHx8Ci0JICAgICghKGZsYWdzICYgWEZTX1FNT1BUX1NZTkMpICYmIGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID4gMCkpIHsKKwkgICAgKCEoZmxhZ3MgJiBTWU5DX1dBSVQpICYmIGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID4gMCkpIHsKIAkJeGZzX2RxZnVubG9jayhkcXApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjQ4LDIzICsxMjQ4LDIwIEBACiAJICovCiAJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7CiAJCXRyYWNlX3hmc19kcWZsdXNoX2ZvcmNlKGRxcCk7Ci0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCX0KIAotCWlmIChmbGFncyAmIFhGU19RTU9QVF9ERUxXUkkpIHsKLQkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgaWYgKGZsYWdzICYgWEZTX1FNT1BUX0FTWU5DKSB7Ci0JCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgeworCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKIAkJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7Ci0JfQorCWVsc2UKKwkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKIAogCXRyYWNlX3hmc19kcWZsdXNoX2RvbmUoZHFwKTsKIAogCS8qCiAJICogZHFwIGlzIHN0aWxsIGxvY2tlZCwgYnV0IGNhbGxlciBpcyBmcmVlIHRvIHVubG9jayBpdCBub3cuCiAJICovCi0JcmV0dXJuIChlcnJvcik7CisJcmV0dXJuIGVycm9yOwogCiB9CiAKQEAgLTE0NDUsNyArMTQ0Miw3IEBACiAJCSAqIFdlIGRvbid0IGNhcmUgYWJvdXQgZ2V0dGluZyBkaXNrIGVycm9ycyBoZXJlLiBXZSBuZWVkCiAJCSAqIHRvIHB1cmdlIHRoaXMgZHF1b3QgYW55d2F5LCBzbyB3ZSBnbyBhaGVhZCByZWdhcmRsZXNzLgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFhGU19RTU9QVF9TWU5DKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFNZTkNfV0FJVCk7CiAJCWlmIChlcnJvcikKIAkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAogCQkJCSJ4ZnNfcW1fZHFwdXJnZTogZHF1b3QgJXAgZmx1c2ggZmFpbGVkIiwgZHFwKTsKQEAgLTE1MjksMjUgKzE1MjYsMTcgQEAKIAkgKiB0aGUgZmx1c2ggbG9jayB3aGVuIHRoZSBJL08gY29tcGxldGVzLgogCSAqLwogCWJwID0geGZzX2luY29yZShkcXAtPnFfbW91bnQtPm1fZGRldl90YXJncCwgZHFwLT5xX2Jsa25vLAotCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4oZHFwLT5xX21vdW50KSwKLQkJICAgIFhGU19JTkNPUkVfVFJZTE9DSyk7Ci0JaWYgKGJwICE9IE5VTEwpIHsKLQkJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgewotCQkJaW50CWVycm9yOwotCQkJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7Ci0JCQkJeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsCi0JCQkJCSAgICAgICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQllcnJvciA9IHhmc19iYXdyaXRlKGRxcC0+cV9tb3VudCwgYnApOwotCQkJaWYgKGVycm9yKQotCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKLQkJCQkJInhmc19xbV9kcWZsb2NrX3B1c2hidWZfd2FpdDogIgotCQkJCQkicHVzaGJ1ZiBlcnJvciAlZCBvbiBkcXAgJXAsIGJwICVwIiwKLQkJCQkJZXJyb3IsIGRxcCwgYnApOwotCQl9IGVsc2UgewotCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCX0KKwkJICAgIFhGU19RSV9EUUNIVU5LTEVOKGRxcC0+cV9tb3VudCksIFhCRl9UUllMT0NLKTsKKwlpZiAoIWJwKQorCQlnb3RvIG91dF9sb2NrOworCisJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgeworCQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCisJCQl4ZnNfbG9nX2ZvcmNlKGRxcC0+cV9tb3VudCwgMCk7CisJCXhmc19idWZfZGVsd3JpX3Byb21vdGUoYnApOworCQl3YWtlX3VwX3Byb2Nlc3MoYnAtPmJfdGFyZ2V0LT5idF90YXNrKTsKIAl9CisJeGZzX2J1Zl9yZWxzZShicCk7CitvdXRfbG9jazoKIAl4ZnNfZHFmbG9jayhkcXApOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYwppbmRleCBkMGQ0YTlhLi40ZTRlZTlhIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYwpAQCAtNzQsMTEgKzc0LDExIEBACiAKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2Zvcm1hdDsKIAlsb2d2ZWMtPmlfbGVuICA9IHNpemVvZih4ZnNfZHFfbG9nZm9ybWF0X3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ3ZlYywgWExPR19SRUdfVFlQRV9RRk9STUFUKTsKKwlsb2d2ZWMtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfUUZPUk1BVDsKIAlsb2d2ZWMrKzsKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2RxdW90LT5xX2NvcmU7CiAJbG9ndmVjLT5pX2xlbiAgPSBzaXplb2YoeGZzX2Rpc2tfZHF1b3RfdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9ndmVjLCBYTE9HX1JFR19UWVBFX0RRVU9UKTsKKwlsb2d2ZWMtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfRFFVT1Q7CiAKIAlBU1NFUlQoMiA9PSBsb2dpdGVtLT5xbGlfaXRlbS5saV9kZXNjLT5saWRfc2l6ZSk7CiAJbG9naXRlbS0+cWxpX2Zvcm1hdC5xbGZfc2l6ZSA9IDI7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkgKiBsb2NrIHdpdGhvdXQgc2xlZXBpbmcsIHRoZW4gdGhlcmUgbXVzdCBub3QgaGF2ZSBiZWVuCiAJICogYW55b25lIGluIHRoZSBwcm9jZXNzIG9mIGZsdXNoaW5nIHRoZSBkcXVvdC4KIAkgKi8KLQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgWEZTX1FNT1BUX0RFTFdSSSk7CisJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIDApOwogCWlmIChlcnJvcikKIAkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgZHFwLT5xX21vdW50LAogCQkJInhmc19xbV9kcXVvdF9sb2dpdGVtX3B1c2g6IHB1c2ggZXJyb3IgJWQgb24gZHFwICVwIiwKQEAgLTE5MCw3ICsxOTAsNyBAQAogCS8qCiAJICogR2l2ZSB0aGUgbG9nIGEgcHVzaCBzbyB3ZSBkb24ndCB3YWl0IGhlcmUgdG9vIGxvbmcuCiAJICovCi0JeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsIDApOwogCXdhaXRfZXZlbnQoZHFwLT5xX3BpbndhaXQsIChhdG9taWNfcmVhZCgmZHFwLT5xX3BpbmNvdW50KSA9PSAwKSk7CiB9CiAKQEAgLTIxMiw2OCArMjEyLDMxIEBACiAJeGZzX2RxdW90X3QJKmRxcDsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJeGZzX2J1Zl90CSpicDsKLQl1aW50CQlkb3B1c2g7CiAKIAlkcXAgPSBxaXAtPnFsaV9kcXVvdDsKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKIAogCS8qCi0JICogVGhlIHFsaV9wdXNoYnVmX2ZsYWcga2VlcHMgb3RoZXJzIGZyb20KLQkgKiB0cnlpbmcgdG8gZHVwbGljYXRlIG91ciBlZmZvcnQuCi0JICovCi0JQVNTRVJUKHFpcC0+cWxpX3B1c2hidWZfZmxhZyAhPSAwKTsKLQlBU1NFUlQocWlwLT5xbGlfcHVzaF9vd25lciA9PSBjdXJyZW50X3BpZCgpKTsKLQotCS8qCiAJICogSWYgZmx1c2hsb2NrIGlzbid0IGxvY2tlZCBhbnltb3JlLCBjaGFuY2VzIGFyZSB0aGF0IHRoZQogCSAqIGlub2RlIGZsdXNoIGNvbXBsZXRlZCBhbmQgdGhlIGlub2RlIHdhcyB0YWtlbiBvZmYgdGhlIEFJTC4KIAkgKiBTbywganVzdCBnZXQgb3V0LgogCSAqLwogCWlmIChjb21wbGV0aW9uX2RvbmUoJmRxcC0+cV9mbHVzaCkgIHx8CiAJICAgICgocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpID09IDApKSB7Ci0JCXFpcC0+cWxpX3B1c2hidWZfZmxhZyA9IDA7CiAJCXhmc19kcXVubG9jayhkcXApOwogCQlyZXR1cm47CiAJfQogCW1wID0gZHFwLT5xX21vdW50OwogCWJwID0geGZzX2luY29yZShtcC0+bV9kZGV2X3RhcmdwLCBxaXAtPnFsaV9mb3JtYXQucWxmX2Jsa25vLAotCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4obXApLAotCQkgICAgWEZTX0lOQ09SRV9UUllMT0NLKTsKLQlpZiAoYnAgIT0gTlVMTCkgewotCQlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCQlkb3B1c2ggPSAoKHFpcC0+cWxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSAmJgotCQkJCSAgIWNvbXBsZXRpb25fZG9uZSgmZHFwLT5xX2ZsdXNoKSk7Ci0JCQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0KLQkJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewotCQkJCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQlpZiAoZG9wdXNoKSB7Ci0JCQkJaW50CWVycm9yOwotI2lmZGVmIFhGU1JBQ0VERUJVRwotCQkJCWRlbGF5X2Zvcl9pbnRyKCk7Ci0JCQkJZGVsYXkoMzAwKTsKLSNlbmRpZgotCQkJCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAotCSJ4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoYnVmOiBwdXNoYnVmIGVycm9yICVkIG9uIHFpcCAlcCwgYnAgJXAiLAotCQkJCQkJCWVycm9yLCBxaXAsIGJwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JcWlwLT5xbGlfcHVzaGJ1Zl9mbGFnID0gMDsKKwkJICAgIFhGU19RSV9EUUNIVU5LTEVOKG1wKSwgWEJGX1RSWUxPQ0spOwogCXhmc19kcXVubG9jayhkcXApOworCWlmICghYnApCisJCXJldHVybjsKKwlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKQorCQl4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKGJwKTsKKwl4ZnNfYnVmX3JlbHNlKGJwKTsKKwlyZXR1cm47CisKIH0KIAogLyoKQEAgLTI5MSw1MCArMjU0LDI0IEBACiAJeGZzX2RxX2xvZ2l0ZW1fdAkqcWlwKQogewogCXhmc19kcXVvdF90CQkqZHFwOwotCXVpbnQJCQlyZXR2YWw7CiAKIAlkcXAgPSBxaXAtPnFsaV9kcXVvdDsKIAlpZiAoYXRvbWljX3JlYWQoJmRxcC0+cV9waW5jb3VudCkgPiAwKQotCQlyZXR1cm4gKFhGU19JVEVNX1BJTk5FRCk7CisJCXJldHVybiBYRlNfSVRFTV9QSU5ORUQ7CiAKIAlpZiAoISB4ZnNfcW1fZHFsb2NrX25vd2FpdChkcXApKQotCQlyZXR1cm4gKFhGU19JVEVNX0xPQ0tFRCk7CisJCXJldHVybiBYRlNfSVRFTV9MT0NLRUQ7CiAKLQlyZXR2YWwgPSBYRlNfSVRFTV9TVUNDRVNTOwogCWlmICgheGZzX2RxZmxvY2tfbm93YWl0KGRxcCkpIHsKIAkJLyoKLQkJICogVGhlIGRxdW90IGlzIGFscmVhZHkgYmVpbmcgZmx1c2hlZC4JSXQgbWF5IGhhdmUgYmVlbgotCQkgKiBmbHVzaGVkIGRlbGF5ZWQgd3JpdGUsIGhvd2V2ZXIsIGFuZCB3ZSBkb24ndCB3YW50IHRvCi0JCSAqIGdldCBzdHVjayB3YWl0aW5nIGZvciB0aGF0IHRvIGNvbXBsZXRlLiAgU28sIHdlIHdhbnQgdG8gY2hlY2sKLQkJICogdG8gc2VlIGlmIHdlIGNhbiBsb2NrIHRoZSBkcXVvdCdzIGJ1ZmZlciB3aXRob3V0IHNsZWVwaW5nLgotCQkgKiBJZiB3ZSBjYW4gYW5kIGl0IGlzIG1hcmtlZCBmb3IgZGVsYXllZCB3cml0ZSwgdGhlbiB3ZQotCQkgKiBob2xkIGl0IGFuZCBzZW5kIGl0IG91dCBmcm9tIHRoZSBwdXNoIHJvdXRpbmUuICBXZSBkb24ndAotCQkgKiB3YW50IHRvIGRvIHRoYXQgbm93IHNpbmNlIHdlIG1pZ2h0IHNsZWVwIGluIHRoZSBkZXZpY2UKLQkJICogc3RyYXRlZ3kgcm91dGluZS4gIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBncmFiIHRoZSBidWZmZXIgbG9jawotCQkgKiBoZXJlIGJlY2F1c2Ugd2UnZCBsaWtlIG5vdCB0byBjYWxsIGludG8gdGhlIGJ1ZmZlciBjYWNoZQotCQkgKiB3aGlsZSBob2xkaW5nIHRoZSBBSUwgbG9jay4KLQkJICogTWFrZSBzdXJlIHRvIG9ubHkgcmV0dXJuIFBVU0hCVUYgaWYgd2Ugc2V0IHB1c2hidWZfZmxhZwotCQkgKiBvdXJzZWx2ZXMuICBJZiBzb21lb25lIGVsc2UgaXMgZG9pbmcgaXQgdGhlbiB3ZSBkb24ndAotCQkgKiB3YW50IHRvIGdvIHRvIHRoZSBwdXNoIHJvdXRpbmUgYW5kIGR1cGxpY2F0ZSB0aGVpciBlZmZvcnRzLgorCQkgKiBkcXVvdCBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQgdG8gdGhlIGJhY2tpbmcgYnVmZmVyLAorCQkgKiBsZWF2ZSBpdCBsb2NrZWQsIHB1c2hidWYgcm91dGluZSB3aWxsIHVubG9jayBpdC4KIAkJICovCi0JCWlmIChxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPT0gMCkgewotCQkJcWlwLT5xbGlfcHVzaGJ1Zl9mbGFnID0gMTsKLQkJCUFTU0VSVChxaXAtPnFsaV9mb3JtYXQucWxmX2Jsa25vID09IGRxcC0+cV9ibGtubyk7Ci0jaWZkZWYgREVCVUcKLQkJCXFpcC0+cWxpX3B1c2hfb3duZXIgPSBjdXJyZW50X3BpZCgpOwotI2VuZGlmCi0JCQkvKgotCQkJICogVGhlIGRxdW90IGlzIGxlZnQgbG9ja2VkLgotCQkJICovCi0JCQlyZXR2YWwgPSBYRlNfSVRFTV9QVVNIQlVGOwotCQl9IGVsc2UgewotCQkJcmV0dmFsID0gWEZTX0lURU1fRkxVU0hJTkc7Ci0JCQl4ZnNfZHF1bmxvY2tfbm9ub3RpZnkoZHFwKTsKLQkJfQorCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKIAl9CiAKIAlBU1NFUlQocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpOwotCXJldHVybiAocmV0dmFsKTsKKwlyZXR1cm4gWEZTX0lURU1fU1VDQ0VTUzsKIH0KIAogCkBAIC00NjcsNyArNDA0LDcgQEAKIAogCWxvZ192ZWN0b3ItPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmKHFmLT5xcWxfZm9ybWF0KTsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemVvZih4ZnNfcW9mZl9sb2dpdGVtX3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfUVVPVEFPRkYpOworCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfUVVPVEFPRkY7CiAJcWYtPnFxbF9mb3JtYXQucWZfc2l6ZSA9IDE7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5oIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKaW5kZXggNWE2MzI1My4uNWFjYWUyYSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKQEAgLTI3LDEwICsyNyw2IEBACiAJeGZzX2xvZ19pdGVtX3QJCSBxbGlfaXRlbTsJICAgLyogY29tbW9uIHBvcnRpb24gKi8KIAlzdHJ1Y3QgeGZzX2RxdW90CSpxbGlfZHF1b3Q7CSAgIC8qIGRxdW90IHB0ciAqLwogCXhmc19sc25fdAkJIHFsaV9mbHVzaF9sc247CSAgIC8qIGxzbiBhdCBsYXN0IGZsdXNoICovCi0JdW5zaWduZWQgc2hvcnQJCSBxbGlfcHVzaGJ1Zl9mbGFnOyAvKiAxIGJpdCB1c2VkIGluIHB1c2hfYWlsICovCi0jaWZkZWYgREVCVUcKLQl1aW50NjRfdAkJIHFsaV9wdXNoX293bmVyOwotI2VuZGlmCiAJeGZzX2RxX2xvZ2Zvcm1hdF90CSBxbGlfZm9ybWF0OwkgICAvKiBsb2dnZWQgc3RydWN0dXJlICovCiB9IHhmc19kcV9sb2dpdGVtX3Q7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCA5ZTYyN2E4Li40MTdlNjFlIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0xMTgsOSArMTE4LDE0IEBACiAJICovCiAJdWRxaGFzaCA9IGttZW1femFsbG9jX2dyZWVkeSgmaHNpemUsCiAJCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfTE9XICogc2l6ZW9mKHhmc19kcWhhc2hfdCksCi0JCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfSElHSCAqIHNpemVvZih4ZnNfZHFoYXNoX3QpLAotCQkJCSAgICAgS01fU0xFRVAgfCBLTV9NQVlGQUlMIHwgS01fTEFSR0UpOwotCWdkcWhhc2ggPSBrbWVtX3phbGxvYyhoc2l6ZSwgS01fU0xFRVAgfCBLTV9MQVJHRSk7CisJCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfSElHSCAqIHNpemVvZih4ZnNfZHFoYXNoX3QpKTsKKwlpZiAoIXVkcWhhc2gpCisJCWdvdG8gb3V0OworCisJZ2RxaGFzaCA9IGttZW1femFsbG9jX2xhcmdlKGhzaXplKTsKKwlpZiAoIWdkcWhhc2gpCisJCWdvdG8gb3V0X2ZyZWVfdWRxaGFzaDsKKwogCWhzaXplIC89IHNpemVvZih4ZnNfZHFoYXNoX3QpOwogCW5kcXVvdCA9IGhzaXplIDw8IDg7CiAKQEAgLTE3MCw2ICsxNzUsMTEgQEAKIAltdXRleF9pbml0KCZxY2hlY2tfbG9jayk7CiAjZW5kaWYKIAlyZXR1cm4geHFtOworCisgb3V0X2ZyZWVfdWRxaGFzaDoKKwlrbWVtX2ZyZWVfbGFyZ2UodWRxaGFzaCk7Cisgb3V0OgorCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtMTg5LDggKzE5OSw4IEBACiAJCXhmc19xbV9saXN0X2Rlc3Ryb3koJih4cW0tPnFtX3Vzcl9kcWh0YWJsZVtpXSkpOwogCQl4ZnNfcW1fbGlzdF9kZXN0cm95KCYoeHFtLT5xbV9ncnBfZHFodGFibGVbaV0pKTsKIAl9Ci0Ja21lbV9mcmVlKHhxbS0+cW1fdXNyX2RxaHRhYmxlKTsKLQlrbWVtX2ZyZWUoeHFtLT5xbV9ncnBfZHFodGFibGUpOworCWttZW1fZnJlZV9sYXJnZSh4cW0tPnFtX3Vzcl9kcWh0YWJsZSk7CisJa21lbV9mcmVlX2xhcmdlKHhxbS0+cW1fZ3JwX2RxaHRhYmxlKTsKIAl4cW0tPnFtX3Vzcl9kcWh0YWJsZSA9IE5VTEw7CiAJeHFtLT5xbV9ncnBfZHFodGFibGUgPSBOVUxMOwogCXhxbS0+cW1fZHFoYXNobWFzayA9IDA7CkBAIC0yMTksOCArMjI5LDEyIEBACiAJICovCiAJbXV0ZXhfbG9jaygmeGZzX0dxbV9sb2NrKTsKIAotCWlmICh4ZnNfR3FtID09IE5VTEwpCisJaWYgKCF4ZnNfR3FtKSB7CiAJCXhmc19HcW0gPSB4ZnNfR3FtX2luaXQoKTsKKwkJaWYgKCF4ZnNfR3FtKQorCQkJcmV0dXJuIEVOT01FTTsKKwl9CisKIAkvKgogCSAqIFdlIGNhbiBrZWVwIGEgbGlzdCBvZiBhbGwgZmlsZXN5c3RlbXMgd2l0aCBxdW90YXMgbW91bnRlZCBmb3IKIAkgKiBkZWJ1Z2dpbmcgYW5kIHN0YXRpc3RpY2FsIHB1cnBvc2VzLCBidXQgLi4uCkBAIC00MzYsNyArNDUwLDcgQEAKIFNUQVRJQyBpbnQKIHhmc19xbV9kcWZsdXNoX2FsbCgKIAl4ZnNfbW91bnRfdAkqbXAsCi0JaW50CQlmbGFncykKKwlpbnQJCXN5bmNfbW9kZSkKIHsKIAlpbnQJCXJlY2w7CiAJeGZzX2RxdW90X3QJKmRxcDsKQEAgLTQ3Miw3ICs0ODYsNyBAQAogCQkgKiBhY3Jvc3MgYSBkaXNrIHdyaXRlLgogCQkgKi8KIAkJeGZzX3FtX21wbGlzdF91bmxvY2sobXApOwotCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgZmxhZ3MpOworCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgc3luY19tb2RlKTsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKQEAgLTkxMiwxMyArOTI2LDExIEBACiB7CiAJaW50CQlyZWNsLCByZXN0YXJ0czsKIAl4ZnNfZHF1b3RfdAkqZHFwOwotCXVpbnQJCWZsdXNoX2ZsYWdzOwogCWludAkJZXJyb3I7CiAKIAlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSB8fCAhWEZTX0lTX1FVT1RBX09OKG1wKSkKIAkJcmV0dXJuIDA7CiAKLQlmbHVzaF9mbGFncyA9IChmbGFncyAmIFNZTkNfV0FJVCkgPyBYRlNfUU1PUFRfU1lOQyA6IFhGU19RTU9QVF9ERUxXUkk7CiAJcmVzdGFydHMgPSAwOwogCiAgIGFnYWluOgpAQCAtOTc4LDcgKzk5MCw3IEBACiAJCSAqIGFjcm9zcyBhIGRpc2sgd3JpdGUKIAkJICovCiAJCXhmc19xbV9tcGxpc3RfdW5sb2NrKG1wKTsKLQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIGZsdXNoX2ZsYWdzKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIGZsYWdzKTsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChlcnJvciAmJiBYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJCXJldHVybiAwOwkvKiBOZWVkIHRvIHByZXZlbnQgdW1vdW50IGZhaWx1cmUgKi8KQEAgLTE3ODIsNyArMTc5NCw3IEBACiAJICogc3VjY2Vzc2Z1bGx5LgogCSAqLwogCWlmICghZXJyb3IpCi0JCWVycm9yID0geGZzX3FtX2RxZmx1c2hfYWxsKG1wLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaF9hbGwobXAsIDApOwogCiAJLyoKIAkgKiBXZSBjYW4gZ2V0IHRoaXMgZXJyb3IgaWYgd2UgY291bGRuJ3QgZG8gYSBkcXVvdCBhbGxvY2F0aW9uIGluc2lkZQpAQCAtMjAwNCw3ICsyMDE2LDcgQEAKIAkJCSAqIFdlIGZsdXNoIGl0IGRlbGF5ZWQgd3JpdGUsIHNvIGRvbid0IGJvdGhlcgogCQkJICogcmVsZWFzaW5nIHRoZSBtcGxvY2suCiAJCQkgKi8KLQkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCAwKTsKIAkJCWlmIChlcnJvcikgewogCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKIAkJCSJ4ZnNfcW1fZHFmbHVzaF9hbGw6IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CkBAIC0yMTg3LDcgKzIxOTksNyBAQAogCQkJICogV2UgZmx1c2ggaXQgZGVsYXllZCB3cml0ZSwgc28gZG9uJ3QgYm90aGVyCiAJCQkgKiByZWxlYXNpbmcgdGhlIGZyZWVsaXN0IGxvY2suCiAJCQkgKi8KLQkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCAwKTsKIAkJCWlmIChlcnJvcikgewogCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKIAkJCSJ4ZnNfcW1fZHFyZWNsYWltOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLCBkcXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggYTUzNDY2My4uOTdiNDEwYyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC01OSw3ICs1OSw3IEBACiAJCWJlNjRfdG9fY3B1KGRwLT5kX2Jsa19oYXJkbGltaXQpOwogCWlmIChsaW1pdCAmJiBzdGF0cC0+Zl9ibG9ja3MgPiBsaW1pdCkgewogCQlzdGF0cC0+Zl9ibG9ja3MgPSBsaW1pdDsKLQkJc3RhdHAtPmZfYmZyZWUgPQorCQlzdGF0cC0+Zl9iZnJlZSA9IHN0YXRwLT5mX2JhdmFpbCA9CiAJCQkoc3RhdHAtPmZfYmxvY2tzID4gYmU2NF90b19jcHUoZHAtPmRfYmNvdW50KSkgPwogCQkJIChzdGF0cC0+Zl9ibG9ja3MgLSBiZTY0X3RvX2NwdShkcC0+ZF9iY291bnQpKSA6IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDg3M2UwN2UuLjVkMGVlOGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTExOTIsOSArMTE5Miw5IEBACiAJaWYgKCEgWEZTX0lTX1FVT1RBX09OKG1wKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFU1JDSCk7CiAKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CiAJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CiAJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKIAogCW11dGV4X2xvY2soJnFjaGVja19sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwppbmRleCA5N2FjOTY0Li5jM2FiNzVjIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCkBAIC01ODksMTIgKzU4OSwxOCBAQAogCX0KIH0KIAotU1RBVElDIGludAoteGZzX3F1b3RhX2Vycm9yKHVpbnQgZmxhZ3MpCitTVEFUSUMgdm9pZAoreGZzX3F1b3RhX3dhcm4oCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19kcXVvdAkqZHFwLAorCWludAkJCXR5cGUpCiB7Ci0JaWYgKGZsYWdzICYgWEZTX1FNT1BUX0VOT1NQQykKLQkJcmV0dXJuIEVOT1NQQzsKLQlyZXR1cm4gRURRVU9UOworCS8qIG5vIHdhcm5pbmdzIGZvciBwcm9qZWN0IHF1b3RhcyAtIHdlIGp1c3QgcmV0dXJuIEVOT1NQQyBsYXRlciAqLworCWlmIChkcXAtPmRxX2ZsYWdzICYgWEZTX0RRX1BST0opCisJCXJldHVybjsKKwlxdW90YV9zZW5kX3dhcm5pbmcoKGRxcC0+ZHFfZmxhZ3MgJiBYRlNfRFFfVVNFUikgPyBVU1JRVU9UQSA6IEdSUFFVT1RBLAorCQkJICAgYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCksIG1wLT5tX3N1cGVyLT5zX2RldiwKKwkJCSAgIHR5cGUpOwogfQogCiAvKgpAQCAtNjEyLDcgKzYxOCw2IEBACiAJbG9uZwkJbmlub3MsCiAJdWludAkJZmxhZ3MpCiB7Ci0JaW50CQllcnJvcjsKIAl4ZnNfcWNudF90CWhhcmRsaW1pdDsKIAl4ZnNfcWNudF90CXNvZnRsaW1pdDsKIAl0aW1lX3QJCXRpbWVyOwpAQCAtNjQ5LDcgKzY1NCw2IEBACiAJCXdhcm5saW1pdCA9IFhGU19RSV9SVEJXQVJOTElNSVQoZHFwLT5xX21vdW50KTsKIAkJcmVzYmNvdW50cCA9ICZkcXAtPnFfcmVzX3J0YmNvdW50OwogCX0KLQllcnJvciA9IDA7CiAKIAlpZiAoKGZsYWdzICYgWEZTX1FNT1BUX0ZPUkNFX1JFUykgPT0gMCAmJgogCSAgICBkcXAtPnFfY29yZS5kX2lkICYmCkBAIC02NjcsMTggKzY3MSwyMCBAQAogCQkJICogbmJsa3MuCiAJCQkgKi8KIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmCi0JCQkgICAgIChoYXJkbGltaXQgPD0gbmJsa3MgKyAqcmVzYmNvdW50cCkpIHsKLQkJCQllcnJvciA9IHhmc19xdW90YV9lcnJvcihmbGFncyk7CisJCQkgICAgaGFyZGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApIHsKKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9CSEFSRFdBUk4pOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJfQotCiAJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJgotCQkJICAgICAoc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApKSB7CisJCQkgICAgc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApIHsKIAkJCQlpZiAoKHRpbWVyICE9IDAgJiYgZ2V0X3NlY29uZHMoKSA+IHRpbWVyKSB8fAogCQkJCSAgICAod2FybnMgIT0gMCAmJiB3YXJucyA+PSB3YXJubGltaXQpKSB7Ci0JCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKKwkJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwKKwkJCQkJCSAgICAgICBRVU9UQV9OTF9CU09GVExPTkdXQVJOKTsKIAkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQkJfQorCisJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwgUVVPVEFfTkxfQlNPRlRXQVJOKTsKIAkJCX0KIAkJfQogCQlpZiAobmlub3MgPiAwKSB7CkBAIC02OTIsMTUgKzY5OCwxOSBAQAogCQkJc29mdGxpbWl0ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9fc29mdGxpbWl0KTsKIAkJCWlmICghc29mdGxpbWl0KQogCQkJCXNvZnRsaW1pdCA9IHEtPnFpX2lzb2Z0bGltaXQ7CisKIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmIGNvdW50ID49IGhhcmRsaW1pdCkgewotCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9JSEFSRFdBUk4pOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwotCQkJfSBlbHNlIGlmIChzb2Z0bGltaXQgPiAwVUxMICYmIGNvdW50ID49IHNvZnRsaW1pdCkgewotCQkJCWlmICgodGltZXIgIT0gMCAmJiBnZXRfc2Vjb25kcygpID4gdGltZXIpIHx8CisJCQl9CisJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJiBjb3VudCA+PSBzb2Z0bGltaXQpIHsKKwkJCQlpZiAgKCh0aW1lciAhPSAwICYmIGdldF9zZWNvbmRzKCkgPiB0aW1lcikgfHwKIAkJCQkgICAgICh3YXJucyAhPSAwICYmIHdhcm5zID49IHdhcm5saW1pdCkpIHsKLQkJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOworCQkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLAorCQkJCQkJICAgICAgIFFVT1RBX05MX0lTT0ZUTE9OR1dBUk4pOwogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CisJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwgUVVPVEFfTkxfSVNPRlRXQVJOKTsKIAkJCX0KIAkJfQogCX0KQEAgLTczNiw5ICs3NDYsMTQgQEAKIAlBU1NFUlQoZHFwLT5xX3Jlc19ydGJjb3VudCA+PSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX3J0YmNvdW50KSk7CiAJQVNTRVJUKGRxcC0+cV9yZXNfaWNvdW50ID49IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWNvdW50KSk7CiAKKwl4ZnNfZHF1bmxvY2soZHFwKTsKKwlyZXR1cm4gMDsKKwogZXJyb3JfcmV0dXJuOgogCXhmc19kcXVubG9jayhkcXApOwotCXJldHVybiBlcnJvcjsKKwlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRU5PU1BDKQorCQlyZXR1cm4gRU5PU1BDOworCXJldHVybiBFRFFVT1Q7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hY2wuaCBiL2ZzL3hmcy94ZnNfYWNsLmgKaW5kZXggMDBmZDM1N2MuLmQxM2VlYmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWNsLmgKKysrIGIvZnMveGZzL3hmc19hY2wuaApAQCAtMzYsOCArMzYsOCBAQAogfTsKIAogLyogT24tZGlzayBYRlMgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzICovCi0jZGVmaW5lIFNHSV9BQ0xfRklMRQkJIlNHSV9BQ0xfRklMRSIKLSNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUCQkiU0dJX0FDTF9ERUZBVUxUIgorI2RlZmluZSBTR0lfQUNMX0ZJTEUJCSh1bnNpZ25lZCBjaGFyICopIlNHSV9BQ0xfRklMRSIKKyNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUCQkodW5zaWduZWQgY2hhciAqKSJTR0lfQUNMX0RFRkFVTFQiCiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFCShzaXplb2YoU0dJX0FDTF9GSUxFKS0xKQogI2RlZmluZSBTR0lfQUNMX0RFRkFVTFRfU0laRQkoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSkKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hZy5oIGIvZnMveGZzL3hmc19hZy5oCmluZGV4IDY3MDJiZDguLmIxYTVhMWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWcuaAorKysgYi9mcy94ZnMveGZzX2FnLmgKQEAgLTE4NywxNyArMTg3LDEzIEBACiAvKgogICogUGVyLWFnIGluY29yZSBzdHJ1Y3R1cmUsIGNvcGllcyBvZiBpbmZvcm1hdGlvbiBpbiBhZ2YgYW5kIGFnaSwKICAqIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGFsbG9jYXRpb24gZ3JvdXAgc2VsZWN0aW9uLgotICoKLSAqIHBpY2sgc2l6ZXMgd2hpY2ggZml0IGluIGFsbG9jYXRpb24gYnVja2V0cyB3ZWxsCiAgKi8KLSNpZiAoQklUU19QRVJfTE9ORyA9PSAzMikKLSNkZWZpbmUgWEZTX1BBR0JfTlVNX1NMT1RTCTg0Ci0jZWxpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKICNkZWZpbmUgWEZTX1BBR0JfTlVNX1NMT1RTCTEyOAotI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IHhmc19wZXJhZwotewordHlwZWRlZiBzdHJ1Y3QgeGZzX3BlcmFnIHsKKwlzdHJ1Y3QgeGZzX21vdW50ICpwYWdfbW91bnQ7CS8qIG93bmVyIGZpbGVzeXN0ZW0gKi8KKwl4ZnNfYWdudW1iZXJfdAlwYWdfYWdubzsJLyogQUcgdGhpcyBzdHJ1Y3R1cmUgYmVsb25ncyB0byAqLworCWF0b21pY190CXBhZ19yZWY7CS8qIHBlcmFnIHJlZmVyZW5jZSBjb3VudCAqLwogCWNoYXIJCXBhZ2ZfaW5pdDsJLyogdGhpcyBhZ2YncyBlbnRyeSBpcyBpbml0aWFsaXplZCAqLwogCWNoYXIJCXBhZ2lfaW5pdDsJLyogdGhpcyBhZ2kncyBlbnRyeSBpcyBpbml0aWFsaXplZCAqLwogCWNoYXIJCXBhZ2ZfbWV0YWRhdGE7CS8qIHRoZSBhZ2YgaXMgcHJlZmVycmVkIHRvIGJlIG1ldGFkYXRhICovCkBAIC0yMTAsOCArMjA2LDYgQEAKIAlfX3VpbnQzMl90CXBhZ2ZfYnRyZWVibGtzOwkvKiAjIG9mIGJsb2NrcyBoZWxkIGluIEFHRiBidHJlZXMgKi8KIAl4ZnNfYWdpbm9fdAlwYWdpX2ZyZWVjb3VudDsJLyogbnVtYmVyIG9mIGZyZWUgaW5vZGVzICovCiAJeGZzX2FnaW5vX3QJcGFnaV9jb3VudDsJLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBpbm9kZXMgKi8KLQlpbnQJCXBhZ2JfY291bnQ7CS8qIHBhZ2Igc2xvdHMgaW4gdXNlICovCi0JeGZzX3BlcmFnX2J1c3lfdCAqcGFnYl9saXN0OwkvKiB1bnN0YWJsZSBibG9ja3MgKi8KIAogCS8qCiAJICogSW5vZGUgYWxsb2NhdGlvbiBzZWFyY2ggbG9va3VwIG9wdGltaXNhdGlvbi4KQEAgLTIzMCw2ICsyMjQsOCBAQAogCXJ3bG9ja190CXBhZ19pY2lfbG9jazsJLyogaW5jb3JlIGlub2RlIGxvY2sgKi8KIAlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290IHBhZ19pY2lfcm9vdDsJLyogaW5jb3JlIGlub2RlIGNhY2hlIHJvb3QgKi8KICNlbmRpZgorCWludAkJcGFnYl9jb3VudDsJLyogcGFnYiBzbG90cyBpbiB1c2UgKi8KKwl4ZnNfcGVyYWdfYnVzeV90IHBhZ2JfbGlzdFtYRlNfUEFHQl9OVU1fU0xPVFNdOwkvKiB1bnN0YWJsZSBibG9ja3MgKi8KIH0geGZzX3BlcmFnX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggMjc1YjFmNC4uOTRjZGRiZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMTY2MiwxMSArMTY2MiwxMyBAQAogCQl4ZnNfYWdmX3QJKmFnZjsKIAkJeGZzX3BlcmFnX3QJKnBhZzsJCS8qIHBlciBhbGxvY2F0aW9uIGdyb3VwIGRhdGEgKi8KIAorCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwkJcGFnLT5wYWdmX2ZyZWVibGtzICs9IGxlbjsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOworCiAJCWFnZiA9IFhGU19CVUZfVE9fQUdGKGFnYnApOwotCQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CiAJCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZnJlZWJsa3MsIGxlbik7CiAJCXhmc190cmFuc19hZ2Jsb2Nrc19kZWx0YSh0cCwgbGVuKTsKLQkJcGFnLT5wYWdmX2ZyZWVibGtzICs9IGxlbjsKIAkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oCiAJCQliZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcykgPD0KIAkJCWJlMzJfdG9fY3B1KGFnZi0+YWdmX2xlbmd0aCksCkBAIC0xOTY5LDEwICsxOTcxLDEyIEBACiAJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdmbGJwKTsKIAlpZiAoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxmaXJzdCkgPT0gWEZTX0FHRkxfU0laRShtcCkpCiAJCWFnZi0+YWdmX2ZsZmlyc3QgPSAwOwotCXBhZyA9ICZtcC0+bV9wZXJhZ1tiZTMyX3RvX2NwdShhZ2YtPmFnZl9zZXFubyldOworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pKTsKIAliZTMyX2FkZF9jcHUoJmFnZi0+YWdmX2ZsY291bnQsIC0xKTsKIAl4ZnNfdHJhbnNfYWdmbGlzdF9kZWx0YSh0cCwgLTEpOwogCXBhZy0+cGFnZl9mbGNvdW50LS07CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCiAJbG9nZmxhZ3MgPSBYRlNfQUdGX0ZMRklSU1QgfCBYRlNfQUdGX0ZMQ09VTlQ7CiAJaWYgKGJ0cmVlYmxrKSB7CkBAIC0yMDc4LDcgKzIwODIsOCBAQAogCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZmxsYXN0LCAxKTsKIAlpZiAoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxsYXN0KSA9PSBYRlNfQUdGTF9TSVpFKG1wKSkKIAkJYWdmLT5hZ2ZfZmxsYXN0ID0gMDsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pXTsKKworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGJlMzJfdG9fY3B1KGFnZi0+YWdmX3NlcW5vKSk7CiAJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9mbGNvdW50LCAxKTsKIAl4ZnNfdHJhbnNfYWdmbGlzdF9kZWx0YSh0cCwgMSk7CiAJcGFnLT5wYWdmX2ZsY291bnQrKzsKQEAgLTIwODksNiArMjA5NCw3IEBACiAJCXBhZy0+cGFnZl9idHJlZWJsa3MtLTsKIAkJbG9nZmxhZ3MgfD0gWEZTX0FHRl9CVFJFRUJMS1M7CiAJfQorCXhmc19wZXJhZ19wdXQocGFnKTsKIAogCXhmc19hbGxvY19sb2dfYWdmKHRwLCBhZ2JwLCBsb2dmbGFncyk7CiAKQEAgLTIxNTIsNyArMjE1OCw2IEBACiAJCXhmc190cmFuc19icmVsc2UodHAsICpicHApOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQotCiAJWEZTX0JVRl9TRVRfVlRZUEVfUkVGKCpicHAsIEJfRlNfQUdGLCBYRlNfQUdGX1JFRik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTc1LDcgKzIxODAsNyBAQAogCUFTU0VSVChhZ25vICE9IE5VTExBR05VTUJFUik7CiAKIAllcnJvciA9IHhmc19yZWFkX2FnZihtcCwgdHAsIGFnbm8sCi0JCQkoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSA/IFhGU19CVUZfVFJZTE9DSyA6IDAsCisJCQkoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSA/IFhCRl9UUllMT0NLIDogMCwKIAkJCWJwcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yMTg0LDcgKzIxODksNyBAQAogCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUigqYnBwKSk7CiAKIAlhZ2YgPSBYRlNfQlVGX1RPX0FHRigqYnBwKTsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CiAJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgewogCQlwYWctPnBhZ2ZfZnJlZWJsa3MgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcyk7CiAJCXBhZy0+cGFnZl9idHJlZWJsa3MgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9idHJlZWJsa3MpOwpAQCAtMjE5NSw4ICsyMjAwLDggQEAKIAkJcGFnLT5wYWdmX2xldmVsc1tYRlNfQlROVU1fQ05UaV0gPQogCQkJYmUzMl90b19jcHUoYWdmLT5hZ2ZfbGV2ZWxzW1hGU19CVE5VTV9DTlRpXSk7CiAJCXNwaW5fbG9ja19pbml0KCZwYWctPnBhZ2JfbG9jayk7Ci0JCXBhZy0+cGFnYl9saXN0ID0ga21lbV96YWxsb2MoWEZTX1BBR0JfTlVNX1NMT1RTICoKLQkJCQkJc2l6ZW9mKHhmc19wZXJhZ19idXN5X3QpLCBLTV9TTEVFUCk7CisJCXBhZy0+cGFnYl9jb3VudCA9IDA7CisJCW1lbXNldChwYWctPnBhZ2JfbGlzdCwgMCwgc2l6ZW9mKHBhZy0+cGFnYl9saXN0KSk7CiAJCXBhZy0+cGFnZl9pbml0ID0gMTsKIAl9CiAjaWZkZWYgREVCVUcKQEAgLTIyMTEsNiArMjIxNiw3IEBACiAJCSAgICAgICBiZTMyX3RvX2NwdShhZ2YtPmFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVGldKSk7CiAJfQogI2VuZGlmCisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjcwLDggKzIyNzYsNyBAQAogCQkgKiBUaGVzZSB0aHJlZSBmb3JjZSB1cyBpbnRvIGEgc2luZ2xlIGEuZy4KIAkJICovCiAJCWFyZ3MtPmFnbm8gPSBYRlNfRlNCX1RPX0FHTk8obXAsIGFyZ3MtPmZzYm5vKTsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQlhcmdzLT5wYWcgPSAmbXAtPm1fcGVyYWdbYXJncy0+YWdub107CisJCWFyZ3MtPnBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFyZ3MtPmFnbm8pOwogCQlhcmdzLT5taW5sZWZ0ID0gMDsKIAkJZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KGFyZ3MsIDApOwogCQlhcmdzLT5taW5sZWZ0ID0gbWlubGVmdDsKQEAgLTIyODAsMTQgKzIyODUsMTIgQEAKIAkJCWdvdG8gZXJyb3IwOwogCQl9CiAJCWlmICghYXJncy0+YWdicCkgewotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCXRyYWNlX3hmc19hbGxvY192ZXh0ZW50X25vYWdicChhcmdzKTsKIAkJCWJyZWFrOwogCQl9CiAJCWFyZ3MtPmFnYm5vID0gWEZTX0ZTQl9UT19BR0JOTyhtcCwgYXJncy0+ZnNibm8pOwogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2FnX3ZleHRlbnQoYXJncykpKQogCQkJZ290byBlcnJvcjA7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgWEZTX0FMTE9DVFlQRV9TVEFSVF9CTk86CiAJCS8qCkBAIC0yMzM5LDkgKzIzNDIsOCBAQAogCQkgKiBMb29wIG92ZXIgYWxsb2NhdGlvbiBncm91cHMgdHdpY2U7IGZpcnN0IHRpbWUgd2l0aAogCQkgKiB0cnlsb2NrIHNldCwgc2Vjb25kIHRpbWUgd2l0aG91dC4KIAkJICovCi0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZm9yICg7OykgewotCQkJYXJncy0+cGFnID0gJm1wLT5tX3BlcmFnW2FyZ3MtPmFnbm9dOworCQkJYXJncy0+cGFnID0geGZzX3BlcmFnX2dldChtcCwgYXJncy0+YWdubyk7CiAJCQlpZiAobm9fbWluKSBhcmdzLT5taW5sZWZ0ID0gMDsKIAkJCWVycm9yID0geGZzX2FsbG9jX2ZpeF9mcmVlbGlzdChhcmdzLCBmbGFncyk7CiAJCQlhcmdzLT5taW5sZWZ0ID0gbWlubGVmdDsKQEAgLTI0MDAsOCArMjQwMiw4IEBACiAJCQkJCX0KIAkJCQl9CiAJCQl9CisJCQl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJCX0KLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJaWYgKGJ1bXBfcm90b3IgfHwgKHR5cGUgPT0gWEZTX0FMTE9DVFlQRV9BTllfQUcpKSB7CiAJCQlpZiAoYXJncy0+YWdubyA9PSBzYWdubykKIAkJCQltcC0+bV9hZ2Zyb3RvciA9IChtcC0+bV9hZ2Zyb3RvciArIDEpICUKQEAgLTI0MjcsOSArMjQyOSwxMCBAQAogCQkJYXJncy0+bGVuKTsKICNlbmRpZgogCX0KKwl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJcmV0dXJuIDA7CiBlcnJvcjA6Ci0JdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yNDU0LDggKzI0NTcsNyBAQAogCWFyZ3MuYWdubyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLm1wLCBibm8pOwogCUFTU0VSVChhcmdzLmFnbm8gPCBhcmdzLm1wLT5tX3NiLnNiX2FnY291bnQpOwogCWFyZ3MuYWdibm8gPSBYRlNfRlNCX1RPX0FHQk5PKGFyZ3MubXAsIGJubyk7Ci0JZG93bl9yZWFkKCZhcmdzLm1wLT5tX3BlcmFnbG9jayk7Ci0JYXJncy5wYWcgPSAmYXJncy5tcC0+bV9wZXJhZ1thcmdzLmFnbm9dOworCWFyZ3MucGFnID0geGZzX3BlcmFnX2dldChhcmdzLm1wLCBhcmdzLmFnbm8pOwogCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KCZhcmdzLCBYRlNfQUxMT0NfRkxBR19GUkVFSU5HKSkpCiAJCWdvdG8gZXJyb3IwOwogI2lmZGVmIERFQlVHCkBAIC0yNDY1LDcgKzI0NjcsNyBAQAogI2VuZGlmCiAJZXJyb3IgPSB4ZnNfZnJlZV9hZ19leHRlbnQodHAsIGFyZ3MuYWdicCwgYXJncy5hZ25vLCBhcmdzLmFnYm5vLCBsZW4sIDApOwogZXJyb3IwOgotCXVwX3JlYWQoJmFyZ3MubXAtPm1fcGVyYWdsb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KGFyZ3MucGFnKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI0ODYsMTUgKzI0ODgsMTUgQEAKIAkJICAgIHhmc19hZ2Jsb2NrX3QgYm5vLAogCQkgICAgeGZzX2V4dGxlbl90IGxlbikKIHsKLQl4ZnNfbW91bnRfdAkJKm1wOwogCXhmc19wZXJhZ19idXN5X3QJKmJzeTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJaW50CQkJbjsKIAotCW1wID0gdHAtPnRfbW91bnRwOwotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KHRwLT50X21vdW50cCwgYWdubyk7CisJc3Bpbl9sb2NrKCZwYWctPnBhZ2JfbG9jayk7CiAKIAkvKiBzZWFyY2ggcGFnYl9saXN0IGZvciBhbiBvcGVuIHNsb3QgKi8KLQlmb3IgKGJzeSA9IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdCwgbiA9IDA7CisJZm9yIChic3kgPSBwYWctPnBhZ2JfbGlzdCwgbiA9IDA7CiAJICAgICBuIDwgWEZTX1BBR0JfTlVNX1NMT1RTOwogCSAgICAgYnN5KyssIG4rKykgewogCQlpZiAoYnN5LT5idXN5X3RwID09IE5VTEwpIHsKQEAgLTI1MDIsMTEgKzI1MDQsMTEgQEAKIAkJfQogCX0KIAotCXRyYWNlX3hmc19hbGxvY19idXN5KG1wLCBhZ25vLCBibm8sIGxlbiwgbik7CisJdHJhY2VfeGZzX2FsbG9jX2J1c3kodHAtPnRfbW91bnRwLCBhZ25vLCBibm8sIGxlbiwgbik7CiAKIAlpZiAobiA8IFhGU19QQUdCX05VTV9TTE9UUykgewotCQlic3kgPSAmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0W25dOwotCQltcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2NvdW50Kys7CisJCWJzeSA9ICZwYWctPnBhZ2JfbGlzdFtuXTsKKwkJcGFnLT5wYWdiX2NvdW50Kys7CiAJCWJzeS0+YnVzeV9zdGFydCA9IGJubzsKIAkJYnN5LT5idXN5X2xlbmd0aCA9IGxlbjsKIAkJYnN5LT5idXN5X3RwID0gdHA7CkBAIC0yNTIxLDcgKzI1MjMsOCBAQAogCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwogCX0KIAotCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYWctPnBhZ2JfbG9jayk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogfQogCiB2b2lkCkBAIC0yNTI5LDI0ICsyNTMyLDIzIEBACiAJCSAgICAgeGZzX2FnbnVtYmVyX3QgYWdubywKIAkJICAgICBpbnQgaWR4KQogewotCXhmc19tb3VudF90CQkqbXA7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCXhmc19wZXJhZ19idXN5X3QJKmxpc3Q7CiAKLQltcCA9IHRwLT50X21vdW50cDsKLQotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKLQlsaXN0ID0gbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0OwotCiAJQVNTRVJUKGlkeCA8IFhGU19QQUdCX05VTV9TTE9UUyk7CisJcGFnID0geGZzX3BlcmFnX2dldCh0cC0+dF9tb3VudHAsIGFnbm8pOworCXNwaW5fbG9jaygmcGFnLT5wYWdiX2xvY2spOworCWxpc3QgPSBwYWctPnBhZ2JfbGlzdDsKIAotCXRyYWNlX3hmc19hbGxvY191bmJ1c3kobXAsIGFnbm8sIGlkeCwgbGlzdFtpZHhdLmJ1c3lfdHAgPT0gdHApOworCXRyYWNlX3hmc19hbGxvY191bmJ1c3kodHAtPnRfbW91bnRwLCBhZ25vLCBpZHgsIGxpc3RbaWR4XS5idXN5X3RwID09IHRwKTsKIAogCWlmIChsaXN0W2lkeF0uYnVzeV90cCA9PSB0cCkgewogCQlsaXN0W2lkeF0uYnVzeV90cCA9IE5VTEw7Ci0JCW1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQtLTsKKwkJcGFnLT5wYWdiX2NvdW50LS07CiAJfQogCi0Jc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKIApAQCAtMjU2MCwxNyArMjU2MiwxNSBAQAogCQkgICAgeGZzX2FnYmxvY2tfdCBibm8sCiAJCSAgICB4ZnNfZXh0bGVuX3QgbGVuKQogewotCXhmc19tb3VudF90CQkqbXA7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCXhmc19wZXJhZ19idXN5X3QJKmJzeTsKIAl4ZnNfYWdibG9ja190CQl1ZW5kLCBiZW5kOwogCXhmc19sc25fdAkJbHNuID0gMDsKIAlpbnQJCQljbnQ7CiAKLQltcCA9IHRwLT50X21vdW50cDsKLQotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKLQotCXVlbmQgPSBibm8gKyBsZW4gLSAxOworCXBhZyA9IHhmc19wZXJhZ19nZXQodHAtPnRfbW91bnRwLCBhZ25vKTsKKwlzcGluX2xvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwljbnQgPSBwYWctPnBhZ2JfY291bnQ7CiAKIAkvKgogCSAqIHNlYXJjaCBwYWdiX2xpc3QgZm9yIHRoaXMgc2xvdCwgc2tpcHBpbmcgb3BlbiBzbG90cy4gV2UgaGF2ZSB0bwpAQCAtMjU3OCw4ICsyNTc4LDkgQEAKIAkgKiB3ZSBoYXZlIHRvIGdldCB0aGUgbW9zdCByZWNlbnQgTFNOIGZvciB0aGUgbG9nIGZvcmNlIHRvIHB1c2ggb3V0CiAJICogYWxsIHRoZSB0cmFuc2FjdGlvbnMgdGhhdCBzcGFuIHRoZSByYW5nZS4KIAkgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQ7IGNudCsrKSB7Ci0JCWJzeSA9ICZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3RbY250XTsKKwl1ZW5kID0gYm5vICsgbGVuIC0gMTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHBhZy0+cGFnYl9jb3VudDsgY250KyspIHsKKwkJYnN5ID0gJnBhZy0+cGFnYl9saXN0W2NudF07CiAJCWlmICghYnN5LT5idXN5X3RwKQogCQkJY29udGludWU7CiAKQEAgLTI1OTEsNyArMjU5Miw4IEBACiAJCWlmIChYRlNfTFNOX0NNUChic3ktPmJ1c3lfdHAtPnRfY29tbWl0X2xzbiwgbHNuKSA+IDApCiAJCQlsc24gPSBic3ktPmJ1c3lfdHAtPnRfY29tbWl0X2xzbjsKIAl9Ci0Jc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJdHJhY2VfeGZzX2FsbG9jX2J1c3lzZWFyY2godHAtPnRfbW91bnRwLCBhZ25vLCBibm8sIGxlbiwgbHNuKTsKIAogCS8qCkBAIC0yNTk5LDUgKzI2MDEsNSBAQAogCSAqIHRyYW5zYWN0aW9uIHRoYXQgZnJlZWQgdGhlIGJsb2NrCiAJICovCiAJaWYgKGxzbikKLQkJeGZzX2xvZ19mb3JjZShtcCwgbHNuLCBYRlNfTE9HX0ZPUkNFfFhGU19MT0dfU1lOQyk7CisJCXhmc19sb2dfZm9yY2VfbHNuKHRwLT50X21vdW50cCwgbHNuLCBYRlNfTE9HX1NZTkMpOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvY19idHJlZS5jIGIvZnMveGZzL3hmc19hbGxvY19idHJlZS5jCmluZGV4IGFkYmQ5MTQuLmI3MjZlMTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMKQEAgLTYxLDEyICs2MSwxNCBAQAogCXN0cnVjdCB4ZnNfYWdmCQkqYWdmID0gWEZTX0JVRl9UT19BR0YoYWdicCk7CiAJeGZzX2FnbnVtYmVyX3QJCXNlcW5vID0gYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pOwogCWludAkJCWJ0bnVtID0gY3VyLT5iY19idG51bTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcgPSB4ZnNfcGVyYWdfZ2V0KGN1ci0+YmNfbXAsIHNlcW5vKTsKIAogCUFTU0VSVChwdHItPnMgIT0gMCk7CiAKIAlhZ2YtPmFnZl9yb290c1tidG51bV0gPSBwdHItPnM7CiAJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9sZXZlbHNbYnRudW1dLCBpbmMpOwotCWN1ci0+YmNfbXAtPm1fcGVyYWdbc2Vxbm9dLnBhZ2ZfbGV2ZWxzW2J0bnVtXSArPSBpbmM7CisJcGFnLT5wYWdmX2xldmVsc1tidG51bV0gKz0gaW5jOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAogCXhmc19hbGxvY19sb2dfYWdmKGN1ci0+YmNfdHAsIGFnYnAsIFhGU19BR0ZfUk9PVFMgfCBYRlNfQUdGX0xFVkVMUyk7CiB9CkBAIC0xNTAsNiArMTUyLDcgQEAKIHsKIAlzdHJ1Y3QgeGZzX2FnZgkJKmFnZiA9IFhGU19CVUZfVE9fQUdGKGN1ci0+YmNfcHJpdmF0ZS5hLmFnYnApOwogCXhmc19hZ251bWJlcl90CQlzZXFubyA9IGJlMzJfdG9fY3B1KGFnZi0+YWdmX3NlcW5vKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJX19iZTMyCQkJbGVuOwogCWludAkJCW51bXJlY3M7CiAKQEAgLTE5Myw3ICsxOTYsOSBAQAogCX0KIAogCWFnZi0+YWdmX2xvbmdlc3QgPSBsZW47Ci0JY3VyLT5iY19tcC0+bV9wZXJhZ1tzZXFub10ucGFnZl9sb25nZXN0ID0gYmUzMl90b19jcHUobGVuKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KGN1ci0+YmNfbXAsIHNlcW5vKTsKKwlwYWctPnBhZ2ZfbG9uZ2VzdCA9IGJlMzJfdG9fY3B1KGxlbik7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXhmc19hbGxvY19sb2dfYWdmKGN1ci0+YmNfdHAsIGN1ci0+YmNfcHJpdmF0ZS5hLmFnYnAsIFhGU19BR0ZfTE9OR0VTVCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0ci5jIGIvZnMveGZzL3hmc19hdHRyLmMKaW5kZXggZTk1M2I2Y2YuLmI5YzE5NmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5jCkBAIC05MywxMiArOTMsMTIgQEAKIFNUQVRJQyBpbnQKIHhmc19hdHRyX25hbWVfdG9feG5hbWUoCiAJc3RydWN0IHhmc19uYW1lCSp4bmFtZSwKLQljb25zdCBjaGFyCSphbmFtZSkKKwljb25zdCB1bnNpZ25lZCBjaGFyICphbmFtZSkKIHsKIAlpZiAoIWFuYW1lKQogCQlyZXR1cm4gRUlOVkFMOwogCXhuYW1lLT5uYW1lID0gYW5hbWU7Ci0JeG5hbWUtPmxlbiA9IHN0cmxlbihhbmFtZSk7CisJeG5hbWUtPmxlbiA9IHN0cmxlbigoY2hhciAqKWFuYW1lKTsKIAlpZiAoeG5hbWUtPmxlbiA+PSBNQVhOQU1FTEVOKQogCQlyZXR1cm4gRUZBVUxUOwkJLyogbWF0Y2ggSVJJWCBiZWhhdmlvdXIgKi8KIApAQCAtMTI0LDcgKzEyNCw3IEBACiB4ZnNfYXR0cl9nZXRfaW50KAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAogCXN0cnVjdCB4ZnNfbmFtZQkJKm5hbWUsCi0JY2hhcgkJCSp2YWx1ZSwKKwl1bnNpZ25lZCBjaGFyCQkqdmFsdWUsCiAJaW50CQkJKnZhbHVlbGVucCwKIAlpbnQJCQlmbGFncykKIHsKQEAgLTE3MSw4ICsxNzEsOCBAQAogaW50CiB4ZnNfYXR0cl9nZXQoCiAJeGZzX2lub2RlX3QJKmlwLAotCWNvbnN0IGNoYXIJKm5hbWUsCi0JY2hhcgkJKnZhbHVlLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJdW5zaWduZWQgY2hhcgkqdmFsdWUsCiAJaW50CQkqdmFsdWVsZW5wLAogCWludAkJZmxhZ3MpCiB7CkBAIC0xOTcsNyArMTk3LDcgQEAKIC8qCiAgKiBDYWxjdWxhdGUgaG93IG1hbnkgYmxvY2tzIHdlIG5lZWQgZm9yIHRoZSBuZXcgYXR0cmlidXRlLAogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19hdHRyX2NhbGNfc2l6ZSgKIAlzdHJ1Y3QgeGZzX2lub2RlIAkqaXAsCiAJaW50CQkJbmFtZWxlbiwKQEAgLTIzNSw4ICsyMzUsMTIgQEAKIH0KIAogU1RBVElDIGludAoteGZzX2F0dHJfc2V0X2ludCh4ZnNfaW5vZGVfdCAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqbmFtZSwKLQkJY2hhciAqdmFsdWUsIGludCB2YWx1ZWxlbiwgaW50IGZsYWdzKQoreGZzX2F0dHJfc2V0X2ludCgKKwlzdHJ1Y3QgeGZzX2lub2RlICpkcCwKKwlzdHJ1Y3QgeGZzX25hbWUJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkqdmFsdWUsCisJaW50CQl2YWx1ZWxlbiwKKwlpbnQJCWZsYWdzKQogewogCXhmc19kYV9hcmdzX3QJYXJnczsKIAl4ZnNfZnNibG9ja190CWZpcnN0YmxvY2s7CkBAIC00NTIsOCArNDU2LDggQEAKIGludAogeGZzX2F0dHJfc2V0KAogCXhmc19pbm9kZV90CSpkcCwKLQljb25zdCBjaGFyCSpuYW1lLAotCWNoYXIJCSp2YWx1ZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCXVuc2lnbmVkIGNoYXIJKnZhbHVlLAogCWludAkJdmFsdWVsZW4sCiAJaW50CQlmbGFncykKIHsKQEAgLTYwMCw3ICs2MDQsNyBAQAogaW50CiB4ZnNfYXR0cl9yZW1vdmUoCiAJeGZzX2lub2RlX3QJKmRwLAotCWNvbnN0IGNoYXIJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAlpbnQJCWZsYWdzKQogewogCWludAkJZXJyb3I7CkBAIC02NjksOSArNjczLDEzIEBACiAgKi8KIC8qQVJHU1VTRUQqLwogU1RBVElDIGludAoteGZzX2F0dHJfcHV0X2xpc3RlbnQoeGZzX2F0dHJfbGlzdF9jb250ZXh0X3QgKmNvbnRleHQsIGludCBmbGFncywKLQkJICAgICBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJICAgICBpbnQgdmFsdWVsZW4sIGNoYXIgKnZhbHVlKQoreGZzX2F0dHJfcHV0X2xpc3RlbnQoCisJeGZzX2F0dHJfbGlzdF9jb250ZXh0X3QgKmNvbnRleHQsCisJaW50CQlmbGFncywKKwl1bnNpZ25lZCBjaGFyCSpuYW1lLAorCWludAkJbmFtZWxlbiwKKwlpbnQJCXZhbHVlbGVuLAorCXVuc2lnbmVkIGNoYXIJKnZhbHVlKQogewogCXN0cnVjdCBhdHRybGlzdCAqYWxpc3QgPSAoc3RydWN0IGF0dHJsaXN0ICopY29udGV4dC0+YWxpc3Q7CiAJYXR0cmxpc3RfZW50X3QgKmFlcDsKQEAgLTE5ODAsNyArMTk4OCw3IEBACiAJeGZzX2JtYnRfaXJlY190IG1hcFtBVFRSX1JNVFZBTFVFX01BUFNJWkVdOwogCXhmc19tb3VudF90ICptcDsKIAl4ZnNfZGFkZHJfdCBkYmxrbm87Ci0JeGZzX2NhZGRyX3QgZHN0OworCXZvaWQgKmRzdDsKIAl4ZnNfYnVmX3QgKmJwOwogCWludCBubWFwLCBlcnJvciwgdG1wLCB2YWx1ZWxlbiwgYmxrY250LCBpOwogCXhmc19kYWJsa190IGxibGtubzsKQEAgLTIwMDcsMTUgKzIwMTUsMTQgQEAKIAkJCWRibGtubyA9IFhGU19GU0JfVE9fREFERFIobXAsIG1hcFtpXS5icl9zdGFydGJsb2NrKTsKIAkJCWJsa2NudCA9IFhGU19GU0JfVE9fQkIobXAsIG1hcFtpXS5icl9ibG9ja2NvdW50KTsKIAkJCWVycm9yID0geGZzX3JlYWRfYnVmKG1wLCBtcC0+bV9kZGV2X3RhcmdwLCBkYmxrbm8sCi0JCQkJCSAgICAgYmxrY250LAotCQkJCQkgICAgIFhGU19CVUZfTE9DSyB8IFhCRl9ET05UX0JMT0NLLAorCQkJCQkgICAgIGJsa2NudCwgWEJGX0xPQ0sgfCBYQkZfRE9OVF9CTE9DSywKIAkJCQkJICAgICAmYnApOwogCQkJaWYgKGVycm9yKQogCQkJCXJldHVybihlcnJvcik7CiAKIAkJCXRtcCA9ICh2YWx1ZWxlbiA8IFhGU19CVUZfU0laRShicCkpCiAJCQkJPyB2YWx1ZWxlbiA6IFhGU19CVUZfU0laRShicCk7Ci0JCQl4ZnNfYmlvbW92ZShicCwgMCwgdG1wLCBkc3QsIFhGU19CX1JFQUQpOworCQkJeGZzX2Jpb21vdmUoYnAsIDAsIHRtcCwgZHN0LCBYQkZfUkVBRCk7CiAJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJCWRzdCArPSB0bXA7CiAJCQl2YWx1ZWxlbiAtPSB0bXA7CkBAIC0yMDM5LDcgKzIwNDYsNyBAQAogCXhmc19pbm9kZV90ICpkcDsKIAl4ZnNfYm1idF9pcmVjX3QgbWFwOwogCXhmc19kYWRkcl90IGRibGtubzsKLQl4ZnNfY2FkZHJfdCBzcmM7CisJdm9pZCAqc3JjOwogCXhmc19idWZfdCAqYnA7CiAJeGZzX2RhYmxrX3QgbGJsa25vOwogCWludCBibGtjbnQsIHZhbHVlbGVuLCBubWFwLCBlcnJvciwgdG1wLCBjb21taXR0ZWQ7CkBAIC0yMTQxLDEzICsyMTQ4LDEzIEBACiAJCWJsa2NudCA9IFhGU19GU0JfVE9fQkIobXAsIG1hcC5icl9ibG9ja2NvdW50KTsKIAogCQlicCA9IHhmc19idWZfZ2V0KG1wLT5tX2RkZXZfdGFyZ3AsIGRibGtubywgYmxrY250LAotCQkJCSBYRlNfQlVGX0xPQ0sgfCBYQkZfRE9OVF9CTE9DSyk7CisJCQkJIFhCRl9MT0NLIHwgWEJGX0RPTlRfQkxPQ0spOwogCQlBU1NFUlQoYnApOwogCQlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoYnApKTsKIAogCQl0bXAgPSAodmFsdWVsZW4gPCBYRlNfQlVGX1NJWkUoYnApKSA/IHZhbHVlbGVuIDoKIAkJCQkJCQlYRlNfQlVGX1NJWkUoYnApOwotCQl4ZnNfYmlvbW92ZShicCwgMCwgdG1wLCBzcmMsIFhGU19CX1dSSVRFKTsKKwkJeGZzX2Jpb21vdmUoYnAsIDAsIHRtcCwgc3JjLCBYQkZfV1JJVEUpOwogCQlpZiAodG1wIDwgWEZTX0JVRl9TSVpFKGJwKSkKIAkJCXhmc19iaW96ZXJvKGJwLCB0bXAsIFhGU19CVUZfU0laRShicCkgLSB0bXApOwogCQlpZiAoKGVycm9yID0geGZzX2J3cml0ZShtcCwgYnApKSkgey8qIEdST1Q6IE5PVEU6IHN5bmNocm9ub3VzIHdyaXRlICovCkBAIC0yMjA4LDggKzIyMTUsNyBAQAogCQkvKgogCQkgKiBJZiB0aGUgInJlbW90ZSIgdmFsdWUgaXMgaW4gdGhlIGNhY2hlLCByZW1vdmUgaXQuCiAJCSAqLwotCQlicCA9IHhmc19pbmNvcmUobXAtPm1fZGRldl90YXJncCwgZGJsa25vLCBibGtjbnQsCi0JCQkJWEZTX0lOQ09SRV9UUllMT0NLKTsKKwkJYnAgPSB4ZnNfaW5jb3JlKG1wLT5tX2RkZXZfdGFyZ3AsIGRibGtubywgYmxrY250LCBYQkZfVFJZTE9DSyk7CiAJCWlmIChicCkgewogCQkJWEZTX0JVRl9TVEFMRShicCk7CiAJCQlYRlNfQlVGX1VOREVMQVlXUklURShicCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHIuaCBiL2ZzL3hmcy94ZnNfYXR0ci5oCmluZGV4IDU5YjQxMGMuLmU5MjBkNjggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5oCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5oCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogCiB0eXBlZGVmIGludCAoKnB1dF9saXN0ZW50X2Z1bmNfdCkoc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqLCBpbnQsCi0JCQkJICAgICAgY2hhciAqLCBpbnQsIGludCwgY2hhciAqKTsKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKik7CiAKIHR5cGVkZWYgc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCB7CiAJc3RydWN0IHhmc19pbm9kZQkJKmRwOwkJLyogaW5vZGUgKi8KQEAgLTEzOSw3ICsxMzksNiBAQAogLyoKICAqIE92ZXJhbGwgZXh0ZXJuYWwgaW50ZXJmYWNlIHJvdXRpbmVzLgogICovCi1pbnQgeGZzX2F0dHJfY2FsY19zaXplKHN0cnVjdCB4ZnNfaW5vZGUgKiwgaW50LCBpbnQsIGludCAqKTsKIGludCB4ZnNfYXR0cl9pbmFjdGl2ZShzdHJ1Y3QgeGZzX2lub2RlICpkcCk7CiBpbnQgeGZzX2F0dHJfcm10dmFsX2dldChzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MpOwogaW50IHhmc19hdHRyX2xpc3RfaW50KHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwppbmRleCBiYWY0MWI1Li5hOTBjZTc0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKQEAgLTUyMSwxMSArNTIxLDExIEBACiAKIAlzZmUgPSAmc2YtPmxpc3RbMF07CiAJZm9yIChpID0gMDsgaSA8IHNmLT5oZHIuY291bnQ7IGkrKykgewotCQluYXJncy5uYW1lID0gKGNoYXIgKilzZmUtPm5hbWV2YWw7CisJCW5hcmdzLm5hbWUgPSBzZmUtPm5hbWV2YWw7CiAJCW5hcmdzLm5hbWVsZW4gPSBzZmUtPm5hbWVsZW47Ci0JCW5hcmdzLnZhbHVlID0gKGNoYXIgKikmc2ZlLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOworCQluYXJncy52YWx1ZSA9ICZzZmUtPm5hbWV2YWxbbmFyZ3MubmFtZWxlbl07CiAJCW5hcmdzLnZhbHVlbGVuID0gc2ZlLT52YWx1ZWxlbjsKLQkJbmFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZSgoY2hhciAqKXNmZS0+bmFtZXZhbCwKKwkJbmFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZShzZmUtPm5hbWV2YWwsCiAJCQkJCQlzZmUtPm5hbWVsZW4pOwogCQluYXJncy5mbGFncyA9IFhGU19BVFRSX05TUF9PTkRJU0tfVE9fQVJHUyhzZmUtPmZsYWdzKTsKIAkJZXJyb3IgPSB4ZnNfYXR0cl9sZWFmX2xvb2t1cF9pbnQoYnAsICZuYXJncyk7IC8qIHNldCBhLT5pbmRleCAqLwpAQCAtNjEyLDEwICs2MTIsMTAgQEAKIAkJZm9yIChpID0gMCwgc2ZlID0gJnNmLT5saXN0WzBdOyBpIDwgc2YtPmhkci5jb3VudDsgaSsrKSB7CiAJCQllcnJvciA9IGNvbnRleHQtPnB1dF9saXN0ZW50KGNvbnRleHQsCiAJCQkJCSAgIHNmZS0+ZmxhZ3MsCi0JCQkJCSAgIChjaGFyICopc2ZlLT5uYW1ldmFsLAorCQkJCQkgICBzZmUtPm5hbWV2YWwsCiAJCQkJCSAgIChpbnQpc2ZlLT5uYW1lbGVuLAogCQkJCQkgICAoaW50KXNmZS0+dmFsdWVsZW4sCi0JCQkJCSAgIChjaGFyKikmc2ZlLT5uYW1ldmFsW3NmZS0+bmFtZWxlbl0pOworCQkJCQkgICAmc2ZlLT5uYW1ldmFsW3NmZS0+bmFtZWxlbl0pOwogCiAJCQkvKgogCQkJICogRWl0aGVyIHNlYXJjaCBjYWxsYmFjayBmaW5pc2hlZCBlYXJseSBvcgpAQCAtNjU5LDggKzY1OSw4IEBACiAJCX0KIAogCQlzYnAtPmVudG5vID0gaTsKLQkJc2JwLT5oYXNoID0geGZzX2RhX2hhc2huYW1lKChjaGFyICopc2ZlLT5uYW1ldmFsLCBzZmUtPm5hbWVsZW4pOwotCQlzYnAtPm5hbWUgPSAoY2hhciAqKXNmZS0+bmFtZXZhbDsKKwkJc2JwLT5oYXNoID0geGZzX2RhX2hhc2huYW1lKHNmZS0+bmFtZXZhbCwgc2ZlLT5uYW1lbGVuKTsKKwkJc2JwLT5uYW1lID0gc2ZlLT5uYW1ldmFsOwogCQlzYnAtPm5hbWVsZW4gPSBzZmUtPm5hbWVsZW47CiAJCS8qIFRoZXNlIGFyZSBieXRlcywgYW5kIGJvdGggb24tZGlzaywgZG9uJ3QgZW5kaWFuLWZsaXAgKi8KIAkJc2JwLT52YWx1ZWxlbiA9IHNmZS0+dmFsdWVsZW47CkBAIC04MTgsOSArODE4LDkgQEAKIAkJCWNvbnRpbnVlOwogCQlBU1NFUlQoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfTE9DQUwpOwogCQluYW1lX2xvYyA9IHhmc19hdHRyX2xlYWZfbmFtZV9sb2NhbChsZWFmLCBpKTsKLQkJbmFyZ3MubmFtZSA9IChjaGFyICopbmFtZV9sb2MtPm5hbWV2YWw7CisJCW5hcmdzLm5hbWUgPSBuYW1lX2xvYy0+bmFtZXZhbDsKIAkJbmFyZ3MubmFtZWxlbiA9IG5hbWVfbG9jLT5uYW1lbGVuOwotCQluYXJncy52YWx1ZSA9IChjaGFyICopJm5hbWVfbG9jLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOworCQluYXJncy52YWx1ZSA9ICZuYW1lX2xvYy0+bmFtZXZhbFtuYXJncy5uYW1lbGVuXTsKIAkJbmFyZ3MudmFsdWVsZW4gPSBiZTE2X3RvX2NwdShuYW1lX2xvYy0+dmFsdWVsZW4pOwogCQluYXJncy5oYXNodmFsID0gYmUzMl90b19jcHUoZW50cnktPmhhc2h2YWwpOwogCQluYXJncy5mbGFncyA9IFhGU19BVFRSX05TUF9PTkRJU0tfVE9fQVJHUyhlbnRyeS0+ZmxhZ3MpOwpAQCAtMjM3MCwxMCArMjM3MCwxMCBAQAogCiAJCQlyZXR2YWwgPSBjb250ZXh0LT5wdXRfbGlzdGVudChjb250ZXh0LAogCQkJCQkJZW50cnktPmZsYWdzLAotCQkJCQkJKGNoYXIgKiluYW1lX2xvYy0+bmFtZXZhbCwKKwkJCQkJCW5hbWVfbG9jLT5uYW1ldmFsLAogCQkJCQkJKGludCluYW1lX2xvYy0+bmFtZWxlbiwKIAkJCQkJCWJlMTZfdG9fY3B1KG5hbWVfbG9jLT52YWx1ZWxlbiksCi0JCQkJCQkoY2hhciAqKSZuYW1lX2xvYy0+bmFtZXZhbFtuYW1lX2xvYy0+bmFtZWxlbl0pOworCQkJCQkJJm5hbWVfbG9jLT5uYW1ldmFsW25hbWVfbG9jLT5uYW1lbGVuXSk7CiAJCQlpZiAocmV0dmFsKQogCQkJCXJldHVybiByZXR2YWw7CiAJCX0gZWxzZSB7CkBAIC0yMzk3LDE1ICsyMzk3LDE1IEBACiAJCQkJCXJldHVybiByZXR2YWw7CiAJCQkJcmV0dmFsID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKIAkJCQkJCWVudHJ5LT5mbGFncywKLQkJCQkJCShjaGFyICopbmFtZV9ybXQtPm5hbWUsCisJCQkJCQluYW1lX3JtdC0+bmFtZSwKIAkJCQkJCShpbnQpbmFtZV9ybXQtPm5hbWVsZW4sCiAJCQkJCQl2YWx1ZWxlbiwKLQkJCQkJCShjaGFyKilhcmdzLnZhbHVlKTsKKwkJCQkJCWFyZ3MudmFsdWUpOwogCQkJCWttZW1fZnJlZShhcmdzLnZhbHVlKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmV0dmFsID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKIAkJCQkJCWVudHJ5LT5mbGFncywKLQkJCQkJCShjaGFyICopbmFtZV9ybXQtPm5hbWUsCisJCQkJCQluYW1lX3JtdC0+bmFtZSwKIAkJCQkJCShpbnQpbmFtZV9ybXQtPm5hbWVsZW4sCiAJCQkJCQl2YWx1ZWxlbiwKIAkJCQkJCU5VTEwpOwpAQCAtMjk1MCw3ICsyOTUwLDcgQEAKIAkJCQkJCW1hcC5icl9ibG9ja2NvdW50KTsKIAkJCWJwID0geGZzX3RyYW5zX2dldF9idWYoKnRyYW5zLAogCQkJCQlkcC0+aV9tb3VudC0+bV9kZGV2X3RhcmdwLAotCQkJCQlkYmxrbm8sIGRibGtjbnQsIFhGU19CVUZfTE9DSyk7CisJCQkJCWRibGtubywgZGJsa2NudCwgWEJGX0xPQ0spOwogCQkJeGZzX3RyYW5zX2JpbnZhbCgqdHJhbnMsIGJwKTsKIAkJCS8qCiAJCQkgKiBSb2xsIHRvIG5leHQgdHJhbnNhY3Rpb24uCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfc2YuaCBiL2ZzL3hmcy94ZnNfYXR0cl9zZi5oCmluZGV4IDc2YWI3YjAuLjkxOTc1NmUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0cl9zZi5oCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9zZi5oCkBAIC01Miw3ICs1Miw3IEBACiAJX191aW50OF90CXZhbHVlbGVuOwkvKiBsZW5ndGggb2YgdmFsdWUgKi8KIAlfX3VpbnQ4X3QJZmxhZ3M7CQkvKiBmbGFncyBiaXRzIChzZWUgeGZzX2F0dHJfbGVhZi5oKSAqLwogCXhmc19kYWhhc2hfdAloYXNoOwkJLyogdGhpcyBlbnRyeSdzIGhhc2ggdmFsdWUgKi8KLQljaGFyCQkqbmFtZTsJCS8qIG5hbWUgdmFsdWUsIHBvaW50ZXIgaW50byBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyCSpuYW1lOwkJLyogbmFtZSB2YWx1ZSwgcG9pbnRlciBpbnRvIGJ1ZmZlciAqLwogfSB4ZnNfYXR0cl9zZl9zb3J0X3Q7CiAKICNkZWZpbmUgWEZTX0FUVFJfU0ZfRU5UU0laRV9CWU5BTUUobmxlbix2bGVuKQkvKiBzcGFjZSBuYW1lL3ZhbHVlIHVzZXMgKi8gXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCA5ODI1MWNkLi4xODY5ZmI5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMjYyOSwxMyArMjYyOSwxMiBAQAogCQlpZiAoc3RhcnRhZyA9PSBOVUxMQUdOVU1CRVIpCiAJCQlzdGFydGFnID0gYWcgPSAwOwogCQlub3Rpbml0ID0gMDsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CiAJCXdoaWxlIChibGVuIDwgYXAtPmFsZW4pIHsKLQkJCXBhZyA9ICZtcC0+bV9wZXJhZ1thZ107CiAJCQlpZiAoIXBhZy0+cGFnZl9pbml0ICYmCiAJCQkgICAgKGVycm9yID0geGZzX2FsbG9jX3BhZ2ZfaW5pdChtcCwgYXJncy50cCwKIAkJCQkgICAgYWcsIFhGU19BTExPQ19GTEFHX1RSWUxPQ0spKSkgewotCQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KIAkJCS8qCkBAIC0yNjY3LDEzICsyNjY2LDEzIEBACiAJCQkJCQlicmVhazsKIAogCQkJCQllcnJvciA9IHhmc19maWxlc3RyZWFtX25ld19hZyhhcCwgJmFnKTsKLQkJCQkJaWYgKGVycm9yKSB7Ci0JCQkJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQkJCWlmIChlcnJvcikKIAkJCQkJCXJldHVybiBlcnJvcjsKLQkJCQkJfQogCiAJCQkJCS8qIGxvb3AgYWdhaW4gdG8gc2V0ICdibGVuJyovCiAJCQkJCXN0YXJ0YWcgPSBOVUxMQUdOVU1CRVI7CisJCQkJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJfQpAQCAtMjY4MSw4ICsyNjgwLDEwIEBACiAJCQkJYWcgPSAwOwogCQkJaWYgKGFnID09IHN0YXJ0YWcpCiAJCQkJYnJlYWs7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CiAJCX0KLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkvKgogCQkgKiBTaW5jZSB0aGUgYWJvdmUgbG9vcCBkaWQgYSBCVUZfVFJZTE9DSywgaXQgaXMKIAkJICogcG9zc2libGUgdGhhdCB0aGVyZSBpcyBzcGFjZSBmb3IgdGhpcyByZXF1ZXN0LgpAQCAtNDQ3MCw3ICs0NDcxLDcgQEAKIAl4ZnNfZnNibG9ja190CWFibm87CQkvKiBhbGxvY2F0ZWQgYmxvY2sgbnVtYmVyICovCiAJeGZzX2V4dGxlbl90CWFsZW47CQkvKiBhbGxvY2F0ZWQgZXh0ZW50IGxlbmd0aCAqLwogCXhmc19maWxlb2ZmX3QJYW9mZjsJCS8qIGFsbG9jYXRlZCBmaWxlIG9mZnNldCAqLwotCXhmc19ibWFsbG9jYV90CWJtYTsJCS8qIGFyZ3MgZm9yIHhmc19ibWFwX2FsbG9jICovCisJeGZzX2JtYWxsb2NhX3QJYm1hID0geyAwIH07CS8qIGFyZ3MgZm9yIHhmc19ibWFwX2FsbG9jICovCiAJeGZzX2J0cmVlX2N1cl90CSpjdXI7CQkvKiBibWFwIGJ0cmVlIGN1cnNvciAqLwogCXhmc19maWxlb2ZmX3QJZW5kOwkJLyogZW5kIG9mIG1hcHBlZCBmaWxlIHJlZ2lvbiAqLwogCWludAkJZW9mOwkJLyogd2UndmUgaGl0IHRoZSBlbmQgb2YgZXh0ZW50cyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMgYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYwppbmRleCAzODc1MWQ1Li40MTZlNDdlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAvKgogICogU2V0IGFsbCB0aGUgZmllbGRzIGluIGEgYm1hcCBleHRlbnQgcmVjb3JkIGZyb20gdGhlIHVuY29tcHJlc3NlZCBmb3JtLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2JtYnRfZGlza19zZXRfYWxsKAogCXhmc19ibWJ0X3JlY190CSpyLAogCXhmc19ibWJ0X2lyZWNfdCAqcykKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKaW5kZXggY2YwN2NhNy4uMGU2NmM0ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKQEAgLTIyMyw3ICsyMjMsNiBAQAogZXh0ZXJuIHZvaWQgeGZzX2JtYnRfc2V0X3N0YXJ0b2ZmKHhmc19ibWJ0X3JlY19ob3N0X3QgKnIsIHhmc19maWxlb2ZmX3Qgdik7CiBleHRlcm4gdm9pZCB4ZnNfYm1idF9zZXRfc3RhdGUoeGZzX2JtYnRfcmVjX2hvc3RfdCAqciwgeGZzX2V4bnRzdF90IHYpOwogCi1leHRlcm4gdm9pZCB4ZnNfYm1idF9kaXNrX3NldF9hbGwoeGZzX2JtYnRfcmVjX3QgKnIsIHhmc19ibWJ0X2lyZWNfdCAqcyk7CiBleHRlcm4gdm9pZCB4ZnNfYm1idF9kaXNrX3NldF9hbGxmKHhmc19ibWJ0X3JlY190ICpyLCB4ZnNfZmlsZW9mZl90IG8sCiAJCQl4ZnNfZnNibG9ja190IGIsIHhmc19maWxibGtzX3QgYywgeGZzX2V4bnRzdF90IHYpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMveGZzX2J0cmVlLmMKaW5kZXggMzZhMDk5MmQuLjk2YmU0YjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2J0cmVlLmMKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCXhmc19kYWRkcl90CQlkOwogCiAJLyogbmVlZCB0byBzb3J0IG91dCBob3cgY2FsbGVycyBkZWFsIHdpdGggZmFpbHVyZXMgZmlyc3QgKi8KLQlBU1NFUlQoIShmbGFncyAmIFhGU19CVUZfVFJZTE9DSykpOworCUFTU0VSVCghKGZsYWdzICYgWEJGX1RSWUxPQ0spKTsKIAogCWQgPSB4ZnNfYnRyZWVfcHRyX3RvX2RhZGRyKGN1ciwgcHRyKTsKIAkqYnBwID0geGZzX3RyYW5zX2dldF9idWYoY3VyLT5iY190cCwgbXAtPm1fZGRldl90YXJncCwgZCwKQEAgLTEwMDgsNyArMTAwOCw3IEBACiAJaW50CQkJZXJyb3I7CiAKIAkvKiBuZWVkIHRvIHNvcnQgb3V0IGhvdyBjYWxsZXJzIGRlYWwgd2l0aCBmYWlsdXJlcyBmaXJzdCAqLwotCUFTU0VSVCghKGZsYWdzICYgWEZTX0JVRl9UUllMT0NLKSk7CisJQVNTRVJUKCEoZmxhZ3MgJiBYQkZfVFJZTE9DSykpOwogCiAJZCA9IHhmc19idHJlZV9wdHJfdG9fZGFkZHIoY3VyLCBwdHIpOwogCWVycm9yID0geGZzX3RyYW5zX3JlYWRfYnVmKG1wLCBjdXItPmJjX3RwLCBtcC0+bV9kZGV2X3RhcmdwLCBkLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idWZfaXRlbS5jIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCmluZGV4IGEzMGY3ZTkuLmYzYzQ5ZTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCQkgICAgICAgKChiaXAtPmJsaV9mb3JtYXQuYmxmX21hcF9zaXplIC0gMSkgKiBzaXplb2YodWludCkpKTsKIAl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJmJpcC0+YmxpX2Zvcm1hdDsKIAl2ZWNwLT5pX2xlbiA9IGJhc2Vfc2l6ZTsKLQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0JGT1JNQVQpOworCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfQkZPUk1BVDsKIAl2ZWNwKys7CiAJbnZlY3MgPSAxOwogCkBAIC0yOTcsMTQgKzI5NywxNCBAQAogCQkJYnVmZmVyX29mZnNldCA9IGZpcnN0X2JpdCAqIFhGU19CTElfQ0hVTks7CiAJCQl2ZWNwLT5pX2FkZHIgPSB4ZnNfYnVmX29mZnNldChicCwgYnVmZmVyX29mZnNldCk7CiAJCQl2ZWNwLT5pX2xlbiA9IG5iaXRzICogWEZTX0JMSV9DSFVOSzsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfQkNIVU5LKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfQkNIVU5LOwogCQkJbnZlY3MrKzsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKG5leHRfYml0ICE9IGxhc3RfYml0ICsgMSkgewogCQkJYnVmZmVyX29mZnNldCA9IGZpcnN0X2JpdCAqIFhGU19CTElfQ0hVTks7CiAJCQl2ZWNwLT5pX2FkZHIgPSB4ZnNfYnVmX29mZnNldChicCwgYnVmZmVyX29mZnNldCk7CiAJCQl2ZWNwLT5pX2xlbiA9IG5iaXRzICogWEZTX0JMSV9DSFVOSzsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfQkNIVU5LKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfQkNIVU5LOwogCQkJbnZlY3MrKzsKIAkJCXZlY3ArKzsKIAkJCWZpcnN0X2JpdCA9IG5leHRfYml0OwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJCQlidWZmZXJfb2Zmc2V0ID0gZmlyc3RfYml0ICogWEZTX0JMSV9DSFVOSzsKIAkJCXZlY3AtPmlfYWRkciA9IHhmc19idWZfb2Zmc2V0KGJwLCBidWZmZXJfb2Zmc2V0KTsKIAkJCXZlY3AtPmlfbGVuID0gbmJpdHMgKiBYRlNfQkxJX0NIVU5LOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9CQ0hVTkspOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9CQ0hVTks7CiAvKiBZb3Ugd291bGQgdGhpbmsgd2UgbmVlZCB0byBidW1wIHRoZSBudmVjcyBoZXJlIHRvbywgYnV0IHdlIGRvIG5vdAogICogdGhpcyBudW1iZXIgaXMgdXNlZCBieSByZWNvdmVyeSwgYW5kIGl0IGdldHMgY29uZnVzZWQgYnkgdGhlIGJvdW5kYXJ5CiAgKiBzcGxpdCBoZXJlCkBAIC00NjcsOCArNDY3LDEwIEBACiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gYXR0ZW1wdCB0byBsb2NrIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMKICAqIGJ1ZiBsb2cgaXRlbS4gIERvbid0IHNsZWVwIG9uIHRoZSBidWZmZXIgbG9jay4gIElmIHdlIGNhbid0IGdldAotICogdGhlIGxvY2sgcmlnaHQgYXdheSwgcmV0dXJuIDAuICBJZiB3ZSBjYW4gZ2V0IHRoZSBsb2NrLCBwdWxsIHRoZQotICogYnVmZmVyIGZyb20gdGhlIGZyZWUgbGlzdCwgbWFyayBpdCBidXN5LCBhbmQgcmV0dXJuIDEuCisgKiB0aGUgbG9jayByaWdodCBhd2F5LCByZXR1cm4gMC4gIElmIHdlIGNhbiBnZXQgdGhlIGxvY2ssIHRha2UgYQorICogcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIuIElmIHRoaXMgaXMgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlciB0aGF0CisgKiBuZWVkcyBBSUwgaGVscCB0byBiZSB3cml0dGVuIGJhY2ssIGludm9rZSB0aGUgcHVzaGJ1ZiByb3V0aW5lCisgKiByYXRoZXIgdGhhbiB0aGUgbm9ybWFsIHN1Y2Nlc3MgcGF0aC4KICAqLwogU1RBVElDIHVpbnQKIHhmc19idWZfaXRlbV90cnlsb2NrKApAQCAtNDc3LDI0ICs0NzksMTggQEAKIAl4ZnNfYnVmX3QJKmJwOwogCiAJYnAgPSBiaXAtPmJsaV9idWY7Ci0KLQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpIHsKKwlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCiAJCXJldHVybiBYRlNfSVRFTV9QSU5ORUQ7Ci0JfQotCi0JaWYgKCFYRlNfQlVGX0NQU0VNQShicCkpIHsKKwlpZiAoIVhGU19CVUZfQ1BTRU1BKGJwKSkKIAkJcmV0dXJuIFhGU19JVEVNX0xPQ0tFRDsKLQl9CiAKLQkvKgotCSAqIFJlbW92ZSB0aGUgYnVmZmVyIGZyb20gdGhlIGZyZWUgbGlzdC4gIE9ubHkgZG8gdGhpcwotCSAqIGlmIGl0J3Mgb24gdGhlIGZyZWUgbGlzdC4gIFByaXZhdGUgYnVmZmVycyBsaWtlIHRoZQotCSAqIHN1cGVyYmxvY2sgYnVmZmVyIGFyZSBub3QuCi0JICovCisJLyogdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyLiAgKi8KIAlYRlNfQlVGX0hPTEQoYnApOwogCiAJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7CiAJdHJhY2VfeGZzX2J1Zl9pdGVtX3RyeWxvY2soYmlwKTsKKwlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKQorCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKIAlyZXR1cm4gWEZTX0lURU1fU1VDQ0VTUzsKIH0KIApAQCAtNjI2LDExICs2MjIsOSBAQAogfQogCiAvKgotICogVGhpcyBpcyBjYWxsZWQgdG8gYXN5bmNocm9ub3VzbHkgd3JpdGUgdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcwotICogYnVmIGxvZyBpdGVtIG91dCB0byBkaXNrLiBUaGUgYnVmZmVyIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gbG9ja2VkIGJ5Ci0gKiBhIHN1Y2Nlc3NmdWwgY2FsbCB0byB4ZnNfYnVmX2l0ZW1fdHJ5bG9jaygpLiAgSWYgdGhlIGJ1ZmZlciBzdGlsbCBoYXMKLSAqIEJfREVMV1JJIHNldCwgdGhlbiBnZXQgaXQgZ29pbmcgb3V0IHRvIGRpc2sgd2l0aCBhIGNhbGwgdG8gYmF3cml0ZSgpLgotICogSWYgbm90LCB0aGVuIGp1c3QgcmVsZWFzZSB0aGUgYnVmZmVyLgorICogVGhlIGJ1ZmZlciBpcyBsb2NrZWQsIGJ1dCBpcyBub3QgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlci4gVGhpcyBoYXBwZW5zCisgKiBpZiB3ZSByYWNlIHdpdGggSU8gY29tcGxldGlvbiBhbmQgaGVuY2Ugd2UgZG9uJ3Qgd2FudCB0byB0cnkgdG8gd3JpdGUgaXQKKyAqIGFnYWluLiBKdXN0IHJlbGVhc2UgdGhlIGJ1ZmZlci4KICAqLwogU1RBVElDIHZvaWQKIHhmc19idWZfaXRlbV9wdXNoKApAQCAtNjQyLDE3ICs2MzYsMjkgQEAKIAl0cmFjZV94ZnNfYnVmX2l0ZW1fcHVzaChiaXApOwogCiAJYnAgPSBiaXAtPmJsaV9idWY7CisJQVNTRVJUKCFYRlNfQlVGX0lTREVMQVlXUklURShicCkpOworCXhmc19idWZfcmVsc2UoYnApOworfQogCi0JaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgewotCQlpbnQJZXJyb3I7Ci0JCWVycm9yID0geGZzX2Jhd3JpdGUoYmlwLT5ibGlfaXRlbS5saV9tb3VudHAsIGJwKTsKLQkJaWYgKGVycm9yKQotCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgYmlwLT5ibGlfaXRlbS5saV9tb3VudHAsCi0JCQkieGZzX2J1Zl9pdGVtX3B1c2g6IHB1c2hidWYgZXJyb3IgJWQgb24gYmlwICVwLCBicCAlcCIsCi0JCQkJCWVycm9yLCBiaXAsIGJwKTsKLQl9IGVsc2UgewotCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQl9CisvKgorICogVGhlIGJ1ZmZlciBpcyBsb2NrZWQgYW5kIGlzIGEgZGVsYXllZCB3cml0ZSBidWZmZXIuIFByb21vdGUgdGhlIGJ1ZmZlcgorICogaW4gdGhlIGRlbGF5ZWQgd3JpdGUgcXVldWUgYXMgdGhlIGNhbGxlciBrbm93cyB0aGF0IHRoZXkgbXVzdCBpbnZva2UKKyAqIHRoZSB4ZnNidWZkIHRvIGdldCB0aGlzIGJ1ZmZlciB3cml0dGVuLiBXZSBoYXZlIHRvIHVubG9jayB0aGUgYnVmZmVyCisgKiB0byBhbGxvdyB0aGUgeGZzYnVmZCB0byB3cml0ZSBpdCwgdG9vLgorICovCitTVEFUSUMgdm9pZAoreGZzX2J1Zl9pdGVtX3B1c2hidWYoCisJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXApCit7CisJeGZzX2J1Zl90CSpicDsKKworCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOworCXRyYWNlX3hmc19idWZfaXRlbV9wdXNoYnVmKGJpcCk7CisKKwlicCA9IGJpcC0+YmxpX2J1ZjsKKwlBU1NFUlQoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKTsKKwl4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKGJwKTsKKwl4ZnNfYnVmX3JlbHNlKGJwKTsKIH0KIAogLyogQVJHU1VTRUQgKi8KQEAgLTY3Nyw3ICs2ODMsNyBAQAogCS5pb3BfY29tbWl0dGVkCT0gKHhmc19sc25fdCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCiAJCQkJCXhmc19idWZfaXRlbV9jb21taXR0ZWQsCiAJLmlvcF9wdXNoCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfYnVmX2l0ZW1fcHVzaCwKLQkuaW9wX3B1c2hidWYJPSBOVUxMLAorCS5pb3BfcHVzaGJ1Zgk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2J1Zl9pdGVtX3B1c2hidWYsCiAJLmlvcF9jb21taXR0aW5nID0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQogCQkJCQl4ZnNfYnVmX2l0ZW1fY29tbWl0dGluZwogfTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwppbmRleCBjMGM4ODY5Li4wY2E1NTZiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19kYV9idHJlZS5jCkBAIC0xNTM0LDggKzE1MzQsOCBAQAogZW51bSB4ZnNfZGFjbXAKIHhmc19kYV9jb21wbmFtZSgKIAlzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCi0JY29uc3QgY2hhciAJKm5hbWUsCi0JaW50IAkJbGVuKQorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJaW50CQlsZW4pCiB7CiAJcmV0dXJuIChhcmdzLT5uYW1lbGVuID09IGxlbiAmJiBtZW1jbXAoYXJncy0+bmFtZSwgbmFtZSwgbGVuKSA9PSAwKSA/CiAJCQkJCVhGU19DTVBfRVhBQ1QgOiBYRlNfQ01QX0RJRkZFUkVOVDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaAppbmRleCAzMGNkMDhmLi5mZTlmNWE4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RhX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19kYV9idHJlZS5oCkBAIC0yMDksNyArMjA5LDggQEAKICAqLwogc3RydWN0IHhmc19uYW1lb3BzIHsKIAl4ZnNfZGFoYXNoX3QJKCpoYXNobmFtZSkoc3RydWN0IHhmc19uYW1lICopOwotCWVudW0geGZzX2RhY21wCSgqY29tcG5hbWUpKHN0cnVjdCB4ZnNfZGFfYXJncyAqLCBjb25zdCBjaGFyICosIGludCk7CisJZW51bSB4ZnNfZGFjbXAJKCpjb21wbmFtZSkoc3RydWN0IHhmc19kYV9hcmdzICosCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKIH07CiAKIApAQCAtMjYwLDcgKzI2MSw3IEBACiAKIHVpbnQgeGZzX2RhX2hhc2huYW1lKGNvbnN0IF9fdWludDhfdCAqbmFtZV9zdHJpbmcsIGludCBuYW1lX2xlbmd0aCk7CiBlbnVtIHhmc19kYWNtcCB4ZnNfZGFfY29tcG5hbWUoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAotCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOworCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4pOwogCiAKIHhmc19kYV9zdGF0ZV90ICp4ZnNfZGFfc3RhdGVfYWxsb2Modm9pZCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RmcmFnLmMgYi9mcy94ZnMveGZzX2RmcmFnLmMKaW5kZXggODRjYTFjZi4uY2QyN2M5ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kZnJhZy5jCisrKyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwpAQCAtNDUsMTUgKzQ1LDIxIEBACiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKKworc3RhdGljIGludCB4ZnNfc3dhcF9leHRlbnRzKAorCXhmc19pbm9kZV90CSppcCwJLyogdGFyZ2V0IGlub2RlICovCisJeGZzX2lub2RlX3QJKnRpcCwJLyogdG1wIGlub2RlICovCisJeGZzX3N3YXBleHRfdAkqc3hwKTsKKwogLyoKLSAqIFN5c3NnaSBpbnRlcmZhY2UgZm9yIHN3YXBleHQKKyAqIGlvY3RsIGludGVyZmFjZSBmb3Igc3dhcGV4dAogICovCiBpbnQKIHhmc19zd2FwZXh0KAogCXhmc19zd2FwZXh0X3QJKnN4cCkKIHsKIAl4ZnNfaW5vZGVfdCAgICAgKmlwLCAqdGlwOwotCXN0cnVjdCBmaWxlCSpmaWxlLCAqdGFyZ2V0X2ZpbGU7CisJc3RydWN0IGZpbGUJKmZpbGUsICp0bXBfZmlsZTsKIAlpbnQJCWVycm9yID0gMDsKIAogCS8qIFB1bGwgaW5mb3JtYXRpb24gZm9yIHRoZSB0YXJnZXQgZmQgKi8KQEAgLTY4LDQ2ICs3NCw0NiBAQAogCQlnb3RvIG91dF9wdXRfZmlsZTsKIAl9CiAKLQl0YXJnZXRfZmlsZSA9IGZnZXQoKGludClzeHAtPnN4X2ZkdG1wKTsKLQlpZiAoIXRhcmdldF9maWxlKSB7CisJdG1wX2ZpbGUgPSBmZ2V0KChpbnQpc3hwLT5zeF9mZHRtcCk7CisJaWYgKCF0bXBfZmlsZSkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwogCQlnb3RvIG91dF9wdXRfZmlsZTsKIAl9CiAKLQlpZiAoISh0YXJnZXRfZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHx8Ci0JICAgICh0YXJnZXRfZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSkgeworCWlmICghKHRtcF9maWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgfHwKKwkgICAgKHRtcF9maWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVCQURGKTsKLQkJZ290byBvdXRfcHV0X3RhcmdldF9maWxlOworCQlnb3RvIG91dF9wdXRfdG1wX2ZpbGU7CiAJfQogCiAJaWYgKElTX1NXQVBGSUxFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpIHx8Ci0JICAgIElTX1NXQVBGSUxFKHRhcmdldF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSkgeworCSAgICBJU19TV0FQRklMRSh0bXBfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBvdXRfcHV0X3RhcmdldF9maWxlOworCQlnb3RvIG91dF9wdXRfdG1wX2ZpbGU7CiAJfQogCiAJaXAgPSBYRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQl0aXAgPSBYRlNfSSh0YXJnZXRfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJdGlwID0gWEZTX0kodG1wX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCiAJaWYgKGlwLT5pX21vdW50ICE9IHRpcC0+aV9tb3VudCkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIG91dF9wdXRfdGFyZ2V0X2ZpbGU7CisJCWdvdG8gb3V0X3B1dF90bXBfZmlsZTsKIAl9CiAKIAlpZiAoaXAtPmlfaW5vID09IHRpcC0+aV9pbm8pIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBvdXRfcHV0X3RhcmdldF9maWxlOworCQlnb3RvIG91dF9wdXRfdG1wX2ZpbGU7CiAJfQogCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTyk7Ci0JCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwkJZ290byBvdXRfcHV0X3RtcF9maWxlOwogCX0KIAogCWVycm9yID0geGZzX3N3YXBfZXh0ZW50cyhpcCwgdGlwLCBzeHApOwogCi0gb3V0X3B1dF90YXJnZXRfZmlsZToKLQlmcHV0KHRhcmdldF9maWxlKTsKKyBvdXRfcHV0X3RtcF9maWxlOgorCWZwdXQodG1wX2ZpbGUpOwogIG91dF9wdXRfZmlsZToKIAlmcHV0KGZpbGUpOwogIG91dDoKQEAgLTE4Niw3ICsxOTIsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIHhmc19zd2FwX2V4dGVudHMoCiAJeGZzX2lub2RlX3QJKmlwLAkvKiB0YXJnZXQgaW5vZGUgKi8KIAl4ZnNfaW5vZGVfdAkqdGlwLAkvKiB0bXAgaW5vZGUgKi8KQEAgLTI1NCw2ICsyNjAsOSBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCisJdHJhY2VfeGZzX3N3YXBfZXh0ZW50X2JlZm9yZShpcCwgMCk7CisJdHJhY2VfeGZzX3N3YXBfZXh0ZW50X2JlZm9yZSh0aXAsIDEpOworCiAJLyogY2hlY2sgaW5vZGUgZm9ybWF0cyBub3cgdGhhdCBkYXRhIGlzIGZsdXNoZWQgKi8KIAllcnJvciA9IHhmc19zd2FwX2V4dGVudHNfY2hlY2tfZm9ybWF0KGlwLCB0aXApOwogCWlmIChlcnJvcikgewpAQCAtNDIxLDYgKzQzMCw4IEBACiAKIAllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19TV0FQRVhUKTsKIAorCXRyYWNlX3hmc19zd2FwX2V4dGVudF9hZnRlcihpcCwgMCk7CisJdHJhY2VfeGZzX3N3YXBfZXh0ZW50X2FmdGVyKHRpcCwgMSk7CiBvdXQ6CiAJa21lbV9mcmVlKHRlbXBpZnApOwogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuaCBiL2ZzL3hmcy94ZnNfZGZyYWcuaAppbmRleCA0ZjU1YTYzLi4yMGJkZDkzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmgKKysrIGIvZnMveGZzL3hmc19kZnJhZy5oCkBAIC00OCw5ICs0OCw2IEBACiAgKi8KIGludAl4ZnNfc3dhcGV4dChzdHJ1Y3QgeGZzX3N3YXBleHQgKnN4KTsKIAotaW50CXhmc19zd2FwX2V4dGVudHMoc3RydWN0IHhmc19pbm9kZSAqaXAsIHN0cnVjdCB4ZnNfaW5vZGUgKnRpcCwKLQkJc3RydWN0IHhmc19zd2FwZXh0ICpzeHApOwotCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX19YRlNfREZSQUdfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjIuYyBiL2ZzL3hmcy94ZnNfZGlyMi5jCmluZGV4IDkzNjM0YTcuLjQyNTIwZjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMi5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKLXN0cnVjdCB4ZnNfbmFtZSB4ZnNfbmFtZV9kb3Rkb3QgPSB7Ii4uIiwgMn07CitzdHJ1Y3QgeGZzX25hbWUgeGZzX25hbWVfZG90ZG90ID0geyAodW5zaWduZWQgY2hhciAqKSIuLiIsIDJ9OwogCiAvKgogICogQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSAoaWUuIEEtWikgc3VwcG9ydCBmb3IgZGlyZWN0b3JpZXMgdGhhdCB3YXMKQEAgLTY2LDggKzY2LDggQEAKIFNUQVRJQyBlbnVtIHhmc19kYWNtcAogeGZzX2FzY2lpX2NpX2NvbXBuYW1lKAogCXN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKLQljb25zdCBjaGFyCSpuYW1lLAotCWludCAJCWxlbikKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCWludAkJbGVuKQogewogCWVudW0geGZzX2RhY21wCXJlc3VsdDsKIAlpbnQJCWk7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIGludAogeGZzX2Rpcl9jaWxvb2t1cF9yZXN1bHQoCiAJc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAotCWNvbnN0IGNoYXIJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAlpbnQJCWxlbikKIHsKIAlpZiAoYXJncy0+Y21wcmVzdWx0ID09IFhGU19DTVBfRElGRkVSRU5UKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyLmggYi9mcy94ZnMveGZzX2RpcjIuaAppbmRleCAxZDllZjk2Li43NGEzYjEwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjIuaAorKysgYi9mcy94ZnMveGZzX2RpcjIuaApAQCAtMTAwLDcgKzEwMCw3IEBACiBleHRlcm4gaW50IHhmc19kaXIyX3Nocmlua19pbm9kZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIHhmc19kaXIyX2RiX3QgZGIsCiAJCQkJc3RydWN0IHhmc19kYWJ1ZiAqYnApOwogCi1leHRlcm4gaW50IHhmc19kaXJfY2lsb29rdXBfcmVzdWx0KHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywgY29uc3QgY2hhciAqbmFtZSwKLQkJCQlpbnQgbGVuKTsKK2V4dGVybiBpbnQgeGZzX2Rpcl9jaWxvb2t1cF9yZXN1bHQoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4pOwogCiAjZW5kaWYJLyogX19YRlNfRElSMl9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKaW5kZXggZGRjNGVjYy4uNzc5YTI2NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKQEAgLTU3LDggKzU3LDggQEAKIHZvaWQKIHhmc19kaXJfc3RhcnR1cCh2b2lkKQogewotCXhmc19kaXJfaGFzaF9kb3QgPSB4ZnNfZGFfaGFzaG5hbWUoIi4iLCAxKTsKLQl4ZnNfZGlyX2hhc2hfZG90ZG90ID0geGZzX2RhX2hhc2huYW1lKCIuLiIsIDIpOworCXhmc19kaXJfaGFzaF9kb3QgPSB4ZnNfZGFfaGFzaG5hbWUoKHVuc2lnbmVkIGNoYXIgKikiLiIsIDEpOworCXhmc19kaXJfaGFzaF9kb3Rkb3QgPSB4ZnNfZGFfaGFzaG5hbWUoKHVuc2lnbmVkIGNoYXIgKikiLi4iLCAyKTsKIH0KIAogLyoKQEAgLTUxMyw4ICs1MTMsOSBAQAogCQkvKgogCQkgKiBJZiBpdCBkaWRuJ3QgZml0LCBzZXQgdGhlIGZpbmFsIG9mZnNldCB0byBoZXJlICYgcmV0dXJuLgogCQkgKi8KLQkJaWYgKGZpbGxkaXIoZGlyZW50LCBkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwgY29vayAmIDB4N2ZmZmZmZmYsCi0JCQkgICAgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwgRFRfVU5LTk9XTikpIHsKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAoY2hhciAqKWRlcC0+bmFtZSwgZGVwLT5uYW1lbGVuLAorCQkJICAgIGNvb2sgJiAweDdmZmZmZmZmLCBiZTY0X3RvX2NwdShkZXAtPmludW1iZXIpLAorCQkJICAgIERUX1VOS05PV04pKSB7CiAJCQkqb2Zmc2V0ID0gY29vayAmIDB4N2ZmZmZmZmY7CiAJCQl4ZnNfZGFfYnJlbHNlKE5VTEwsIGJwKTsKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKaW5kZXggMjlmNDg0Yy4uZTJkODk4NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCkBAIC0xMDgxLDcgKzEwODEsNyBAQAogCQlkZXAgPSAoeGZzX2RpcjJfZGF0YV9lbnRyeV90ICopcHRyOwogCQlsZW5ndGggPSB4ZnNfZGlyMl9kYXRhX2VudHNpemUoZGVwLT5uYW1lbGVuKTsKIAotCQlpZiAoZmlsbGRpcihkaXJlbnQsIGRlcC0+bmFtZSwgZGVwLT5uYW1lbGVuLAorCQlpZiAoZmlsbGRpcihkaXJlbnQsIChjaGFyICopZGVwLT5uYW1lLCBkZXAtPm5hbWVsZW4sCiAJCQkgICAgeGZzX2RpcjJfYnl0ZV90b19kYXRhcHRyKG1wLCBjdXJvZmYpICYgMHg3ZmZmZmZmZiwKIAkJCSAgICBiZTY0X3RvX2NwdShkZXAtPmludW1iZXIpLCBEVF9VTktOT1dOKSkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX25vZGUuYyBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKaW5kZXggY2U2ZTM1NS4uNzhmYzRkOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX25vZGUuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCkBAIC02NSw3ICs2NSw3IEBACiAvKgogICogTG9nIGVudHJpZXMgZnJvbSBhIGZyZWVzcGFjZSBibG9jay4KICAqLwotdm9pZAorU1RBVElDIHZvaWQKIHhmc19kaXIyX2ZyZWVfbG9nX2Jlc3RzKAogCXhmc190cmFuc190CQkqdHAsCQkvKiB0cmFuc2FjdGlvbiBwb2ludGVyICovCiAJeGZzX2RhYnVmX3QJCSpicCwJCS8qIGZyZWVzcGFjZSBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmggYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5oCmluZGV4IGRkZTcyZGIuLjgyZGZlNzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmgKKysrIGIvZnMveGZzL3hmc19kaXIyX25vZGUuaApAQCAtNzUsOCArNzUsNiBAQAogCXJldHVybiAoKGRiKSAlIFhGU19ESVIyX01BWF9GUkVFX0JFU1RTKG1wKSk7CiB9CiAKLWV4dGVybiB2b2lkIHhmc19kaXIyX2ZyZWVfbG9nX2Jlc3RzKHN0cnVjdCB4ZnNfdHJhbnMgKnRwLCBzdHJ1Y3QgeGZzX2RhYnVmICpicCwKLQkJCQkgICAgaW50IGZpcnN0LCBpbnQgbGFzdCk7CiBleHRlcm4gaW50IHhmc19kaXIyX2xlYWZfdG9fbm9kZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCiAJCQkJIHN0cnVjdCB4ZnNfZGFidWYgKmxicCk7CiBleHRlcm4geGZzX2RhaGFzaF90IHhmc19kaXIyX2xlYWZuX2xhc3RoYXNoKHN0cnVjdCB4ZnNfZGFidWYgKmJwLCBpbnQgKmNvdW50KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9zZi5jIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKaW5kZXggOWQ0ZjE3YS4uYzFhNTk0NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX3NmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQl9CiAKIAkJaW5vID0geGZzX2RpcjJfc2ZfZ2V0X2ludW1iZXIoc2ZwLCB4ZnNfZGlyMl9zZl9pbnVtYmVycChzZmVwKSk7Ci0JCWlmIChmaWxsZGlyKGRpcmVudCwgc2ZlcC0+bmFtZSwgc2ZlcC0+bmFtZWxlbiwKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAoY2hhciAqKXNmZXAtPm5hbWUsIHNmZXAtPm5hbWVsZW4sCiAJCQkgICAgb2ZmICYgMHg3ZmZmZmZmZiwgaW5vLCBEVF9VTktOT1dOKSkgewogCQkJKm9mZnNldCA9IG9mZiAmIDB4N2ZmZmZmZmY7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCmluZGV4IDA1YTRiZGQuLjZmMzVlZDEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwpAQCAtODIsNyArODIsNyBAQAogCiAJbG9nX3ZlY3Rvci0+aV9hZGRyID0gKHhmc19jYWRkcl90KSYoZWZpcC0+ZWZpX2Zvcm1hdCk7CiAJbG9nX3ZlY3Rvci0+aV9sZW4gPSBzaXplOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfRUZJX0ZPUk1BVCk7CisJbG9nX3ZlY3Rvci0+aV90eXBlID0gWExPR19SRUdfVFlQRV9FRklfRk9STUFUOwogCUFTU0VSVChzaXplID49IHNpemVvZih4ZnNfZWZpX2xvZ19mb3JtYXRfdCkpOwogfQogCkBAIC00MDYsNyArNDA2LDcgQEAKIAogCWxvZ192ZWN0b3ItPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmKGVmZHAtPmVmZF9mb3JtYXQpOwogCWxvZ192ZWN0b3ItPmlfbGVuID0gc2l6ZTsKLQlYTE9HX1ZFQ19TRVRfVFlQRShsb2dfdmVjdG9yLCBYTE9HX1JFR19UWVBFX0VGRF9GT1JNQVQpOworCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfRUZEX0ZPUk1BVDsKIAlBU1NFUlQoc2l6ZSA+PSBzaXplb2YoeGZzX2VmZF9sb2dfZm9ybWF0X3QpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmMgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwppbmRleCBhNjMxZTE0Li4zOTA4NTBlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYworKysgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYwpAQCAtMTQwLDYgKzE0MCw3IEBACiAJaW50CQlmbGFncywKIAl4ZnNfZXh0bGVuX3QJbWlubGVuKQogeworCWludAkJc3RyZWFtcywgbWF4X3N0cmVhbXM7CiAJaW50CQllcnIsIHRyeWxvY2ssIG5zY2FuOwogCXhmc19leHRsZW5fdAlsb25nZXN0LCBmcmVlLCBtaW5mcmVlLCBtYXhmcmVlID0gMDsKIAl4ZnNfYWdudW1iZXJfdAlhZywgbWF4X2FnID0gTlVMTEFHTlVNQkVSOwpAQCAtMTU1LDE1ICsxNTYsMTUgQEAKIAl0cnlsb2NrID0gWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSzsKIAogCWZvciAobnNjYW4gPSAwOyAxOyBuc2NhbisrKSB7Ci0KLQkJVFJBQ0VfQUdfU0NBTihtcCwgYWcsIHhmc19maWxlc3RyZWFtX3BlZWtfYWcobXAsIGFnKSk7Ci0KLQkJcGFnID0gbXAtPm1fcGVyYWcgKyBhZzsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOworCQlUUkFDRV9BR19TQ0FOKG1wLCBhZywgYXRvbWljX3JlYWQoJnBhZy0+cGFnZl9mc3RybXMpKTsKIAogCQlpZiAoIXBhZy0+cGFnZl9pbml0KSB7CiAJCQllcnIgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBOVUxMLCBhZywgdHJ5bG9jayk7Ci0JCQlpZiAoZXJyICYmICF0cnlsb2NrKQorCQkJaWYgKGVyciAmJiAhdHJ5bG9jaykgeworCQkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJCQlyZXR1cm4gZXJyOworCQkJfQogCQl9CiAKIAkJLyogTWlnaHQgZmFpbCBzb21ldGltZXMgZHVyaW5nIHRoZSAxc3QgcGFzcyB3aXRoIHRyeWxvY2sgc2V0LiAqLwpAQCAtMTczLDYgKzE3NCw3IEBACiAJCS8qIEtlZXAgdHJhY2sgb2YgdGhlIEFHIHdpdGggdGhlIG1vc3QgZnJlZSBibG9ja3MuICovCiAJCWlmIChwYWctPnBhZ2ZfZnJlZWJsa3MgPiBtYXhmcmVlKSB7CiAJCQltYXhmcmVlID0gcGFnLT5wYWdmX2ZyZWVibGtzOworCQkJbWF4X3N0cmVhbXMgPSBhdG9taWNfcmVhZCgmcGFnLT5wYWdmX2ZzdHJtcyk7CiAJCQltYXhfYWcgPSBhZzsKIAkJfQogCkBAIC0xOTUsNiArMTk3LDggQEAKIAogCQkJLyogQnJlYWsgb3V0LCByZXRhaW5pbmcgdGhlIHJlZmVyZW5jZSBvbiB0aGUgQUcuICovCiAJCQlmcmVlID0gcGFnLT5wYWdmX2ZyZWVibGtzOworCQkJc3RyZWFtcyA9IGF0b21pY19yZWFkKCZwYWctPnBhZ2ZfZnN0cm1zKTsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJCSphZ3AgPSBhZzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMDIsNiArMjA2LDcgQEAKIAkJLyogRHJvcCB0aGUgcmVmZXJlbmNlIG9uIHRoaXMgQUcsIGl0J3Mgbm90IHVzYWJsZS4gKi8KIAkJeGZzX2ZpbGVzdHJlYW1fcHV0X2FnKG1wLCBhZyk7CiBuZXh0X2FnOgorCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCS8qIE1vdmUgdG8gdGhlIG5leHQgQUcsIHdyYXBwaW5nIHRvIEFHIDAgaWYgbmVjZXNzYXJ5LiAqLwogCQlpZiAoKythZyA+PSBtcC0+bV9zYi5zYl9hZ2NvdW50KQogCQkJYWcgPSAwOwpAQCAtMjI5LDYgKzIzNCw3IEBACiAJCWlmIChtYXhfYWcgIT0gTlVMTEFHTlVNQkVSKSB7CiAJCQl4ZnNfZmlsZXN0cmVhbV9nZXRfYWcobXAsIG1heF9hZyk7CiAJCQlUUkFDRV9BR19QSUNLMShtcCwgbWF4X2FnLCBtYXhmcmVlKTsKKwkJCXN0cmVhbXMgPSBtYXhfc3RyZWFtczsKIAkJCWZyZWUgPSBtYXhmcmVlOwogCQkJKmFncCA9IG1heF9hZzsKIAkJCWJyZWFrOwpAQCAtMjQwLDE2ICsyNDYsMTQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JVFJBQ0VfQUdfUElDSzIobXAsIHN0YXJ0YWcsICphZ3AsIHhmc19maWxlc3RyZWFtX3BlZWtfYWcobXAsICphZ3ApLAotCQkJZnJlZSwgbnNjYW4sIGZsYWdzKTsKKwlUUkFDRV9BR19QSUNLMihtcCwgc3RhcnRhZywgKmFncCwgc3RyZWFtcywgZnJlZSwgbnNjYW4sIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCiAvKgogICogU2V0IHRoZSBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciBmb3IgYSBmaWxlIG9yIGEgZGlyZWN0b3J5LCB1cGRhdGluZyBpbm9kZQotICogcmVmZXJlbmNlcyBhbmQgcGVyLUFHIHJlZmVyZW5jZXMgYXMgYXBwcm9wcmlhdGUuICBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZQotICogbV9wZXJhZ2xvY2sgaGVsZCBpbiByZWFkIG1vZGUuCisgKiByZWZlcmVuY2VzIGFuZCBwZXItQUcgcmVmZXJlbmNlcyBhcyBhcHByb3ByaWF0ZS4KICAqLwogc3RhdGljIGludAogX3hmc19maWxlc3RyZWFtX3VwZGF0ZV9hZygKQEAgLTQ1MSwyMCArNDU1LDYgQEAKIH0KIAogLyoKLSAqIElmIHRoZSBtb3VudCBwb2ludCdzIG1fcGVyYWcgYXJyYXkgaXMgZ29pbmcgdG8gYmUgcmVhbGxvY2F0ZWQsIGFsbAotICogb3V0c3RhbmRpbmcgY2FjaGUgZW50cmllcyBtdXN0IGJlIGZsdXNoZWQgdG8gYXZvaWQgYWNjZXNzaW5nIHJlZmVyZW5jZSBjb3VudAotICogYWRkcmVzc2VzIHRoYXQgaGF2ZSBiZWVuIGZyZWVkLiAgVGhlIGNhbGwgdG8geGZzX2ZpbGVzdHJlYW1fZmx1c2goKSBtdXN0IGJlCi0gKiBtYWRlIGluc2lkZSB0aGUgYmxvY2sgdGhhdCBob2xkcyB0aGUgbV9wZXJhZ2xvY2sgaW4gd3JpdGUgbW9kZSB0byBkbyB0aGUKLSAqIHJlYWxsb2NhdGlvbi4KLSAqLwotdm9pZAoteGZzX2ZpbGVzdHJlYW1fZmx1c2goCi0JeGZzX21vdW50X3QJKm1wKQotewotCXhmc19tcnVfY2FjaGVfZmx1c2gobXAtPm1fZmlsZXN0cmVhbSk7Ci19Ci0KLS8qCiAgKiBSZXR1cm4gdGhlIEFHIG9mIHRoZSBmaWxlc3RyZWFtIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBiZWxvbmdzIHRvLCBvcgogICogTlVMTEFHTlVNQkVSIG90aGVyd2lzZS4KICAqLwpAQCAtNTI2LDcgKzUxNiw2IEBACiAKIAltcCA9IHBpcC0+aV9tb3VudDsKIAljYWNoZSA9IG1wLT5tX2ZpbGVzdHJlYW07Ci0JZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCiAJLyoKIAkgKiBXZSBoYXZlIGEgcHJvYmxlbSwgSG91c3Rvbi4KQEAgLTU0MywxMCArNTMyLDggQEAKIAkgKgogCSAqIFNvLCBpZiB3ZSBjYW4ndCBnZXQgdGhlIGlvbG9jayB3aXRob3V0IHNsZWVwaW5nIHRoZW4ganVzdCBnaXZlIHVwCiAJICovCi0JaWYgKCF4ZnNfaWxvY2tfbm93YWl0KHBpcCwgWEZTX0lPTE9DS19FWENMKSkgewotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCWlmICgheGZzX2lsb2NrX25vd2FpdChwaXAsIFhGU19JT0xPQ0tfRVhDTCkpCiAJCXJldHVybiAxOwotCX0KIAogCS8qIElmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlLCB1c2UgaXRzIEFHLiAqLwogCWl0ZW0gPSB4ZnNfbXJ1X2NhY2hlX2xvb2t1cChjYWNoZSwgcGlwLT5pX2lubyk7CkBAIC02MDEsNyArNTg4LDYgQEAKIAogZXhpdDoKIAl4ZnNfaXVubG9jayhwaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0JdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAlyZXR1cm4gLWVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmggYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaAppbmRleCA0YWJhNjdjLi4yNjBmNzU3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaAorKysgYi9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaApAQCAtNzksMTIgKzc5LDIxIEBACiAgKiB0aGUgY2FjaGUgdGhhdCByZWZlcmVuY2UgcGVyLWFnIGFycmF5IGVsZW1lbnRzIHRoYXQgaGF2ZSBzaW5jZSBiZWVuCiAgKiByZWFsbG9jYXRlZC4KICAqLworLyoKKyAqIHhmc19maWxlc3RyZWFtX3BlZWtfYWcgaXMgb25seSB1c2VkIGluIHRyYWNpbmcgY29kZQorICovCiBzdGF0aWMgaW5saW5lIGludAogeGZzX2ZpbGVzdHJlYW1fcGVla19hZygKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2FnbnVtYmVyX3QJYWdubykKIHsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2ZfZnN0cm1zKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CisJaW50CQlyZXQ7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwlyZXQgPSBhdG9taWNfcmVhZCgmcGFnLT5wYWdmX2ZzdHJtcyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC05Miw3ICsxMDEsMTMgQEAKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2FnbnVtYmVyX3QJYWdubykKIHsKLQlyZXR1cm4gYXRvbWljX2luY19yZXR1cm4oJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2ZfZnN0cm1zKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CisJaW50CQlyZXQ7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwlyZXQgPSBhdG9taWNfaW5jX3JldHVybigmcGFnLT5wYWdmX2ZzdHJtcyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0xMDAsNyArMTE1LDEzIEBACiAJeGZzX21vdW50X3QJKm1wLAogCXhmc19hZ251bWJlcl90CWFnbm8pCiB7Ci0JcmV0dXJuIGF0b21pY19kZWNfcmV0dXJuKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdmX2ZzdHJtcyk7CisJc3RydWN0IHhmc19wZXJhZyAqcGFnOworCWludAkJcmV0OworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJcmV0ID0gYXRvbWljX2RlY19yZXR1cm4oJnBhZy0+cGFnZl9mc3RybXMpOworCXhmc19wZXJhZ19wdXQocGFnKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBhbGxvY2F0aW9uIHNlbGVjdGlvbiBmbGFncyAqLwpAQCAtMTE0LDcgKzEzNSw2IEBACiB2b2lkIHhmc19maWxlc3RyZWFtX3VuaW5pdCh2b2lkKTsKIGludCB4ZnNfZmlsZXN0cmVhbV9tb3VudChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB2b2lkIHhmc19maWxlc3RyZWFtX3VubW91bnQoc3RydWN0IHhmc19tb3VudCAqbXApOwotdm9pZCB4ZnNfZmlsZXN0cmVhbV9mbHVzaChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB4ZnNfYWdudW1iZXJfdCB4ZnNfZmlsZXN0cmVhbV9sb29rdXBfYWcoc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19maWxlc3RyZWFtX2Fzc29jaWF0ZShzdHJ1Y3QgeGZzX2lub2RlICpkaXAsIHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIHZvaWQgeGZzX2ZpbGVzdHJlYW1fZGVhc3NvY2lhdGUoc3RydWN0IHhmc19pbm9kZSAqaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5jCmluZGV4IGExMzkxOWEuLjM3YTZmNjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnNvcHMuYworKysgYi9mcy94ZnMveGZzX2Zzb3BzLmMKQEAgLTE2NywyNyArMTY3LDE0IEBACiAJfQogCW5ldyA9IG5iIC0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKIAlvYWdjb3VudCA9IG1wLT5tX3NiLnNiX2FnY291bnQ7CisKKwkvKiBhbGxvY2F0ZSB0aGUgbmV3IHBlci1hZyBzdHJ1Y3R1cmVzICovCiAJaWYgKG5hZ2NvdW50ID4gb2FnY291bnQpIHsKLQkJdm9pZCAqbmV3X3BlcmFnLCAqb2xkX3BlcmFnOwotCi0JCXhmc19maWxlc3RyZWFtX2ZsdXNoKG1wKTsKLQotCQluZXdfcGVyYWcgPSBrbWVtX3phbGxvYyhzaXplb2YoeGZzX3BlcmFnX3QpICogbmFnY291bnQsCi0JCQkJCUtNX01BWUZBSUwpOwotCQlpZiAoIW5ld19wZXJhZykKLQkJCXJldHVybiBYRlNfRVJST1IoRU5PTUVNKTsKLQotCQlkb3duX3dyaXRlKCZtcC0+bV9wZXJhZ2xvY2spOwotCQltZW1jcHkobmV3X3BlcmFnLCBtcC0+bV9wZXJhZywgc2l6ZW9mKHhmc19wZXJhZ190KSAqIG9hZ2NvdW50KTsKLQkJb2xkX3BlcmFnID0gbXAtPm1fcGVyYWc7Ci0JCW1wLT5tX3BlcmFnID0gbmV3X3BlcmFnOwotCi0JCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF8zMkJJVElOT0RFUzsKLQkJbmFnaW1heCA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBuYWdjb3VudCk7Ci0JCXVwX3dyaXRlKCZtcC0+bV9wZXJhZ2xvY2spOwotCi0JCWttZW1fZnJlZShvbGRfcGVyYWcpOworCQllcnJvciA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBuYWdjb3VudCwgJm5hZ2ltYXgpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJfQorCiAJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19HUk9XRlMpOwogCXRwLT50X2ZsYWdzIHw9IFhGU19UUkFOU19SRVNFUlZFOwogCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgWEZTX0dST1dGU19TUEFDRV9SRVMobXApLApAQCAtMTk2LDYgKzE4MywxMSBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCisJLyoKKwkgKiBXcml0ZSBuZXcgQUcgaGVhZGVycyB0byBkaXNrLiBOb24tdHJhbnNhY3Rpb25hbCwgYnV0IHdyaXR0ZW4KKwkgKiBzeW5jaHJvbm91c2x5IHNvIHRoZXkgYXJlIGNvbXBsZXRlZCBwcmlvciB0byB0aGUgZ3Jvd2ZzIHRyYW5zYWN0aW9uCisJICogYmVpbmcgbG9nZ2VkLgorCSAqLwogCW5mcmVlID0gMDsKIAlmb3IgKGFnbm8gPSBuYWdjb3VudCAtIDE7IGFnbm8gPj0gb2FnY291bnQ7IGFnbm8tLSwgbmV3IC09IGFnc2l6ZSkgewogCQkvKgpAQCAtMzU5LDYgKzM1MSwxMiBAQAogCQkJZ290byBlcnJvcjA7CiAJCX0KIAl9CisKKwkvKgorCSAqIFVwZGF0ZSBjaGFuZ2VkIHN1cGVyYmxvY2sgZmllbGRzIHRyYW5zYWN0aW9uYWxseS4gVGhlc2UgYXJlIG5vdAorCSAqIHNlZW4gYnkgdGhlIHJlc3Qgb2YgdGhlIHdvcmxkIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgYXBwbGllcworCSAqIHRoZW0gYXRvbWljYWxseSB0byB0aGUgc3VwZXJibG9jay4KKwkgKi8KIAlpZiAobmFnY291bnQgPiBvYWdjb3VudCkKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0FHQ09VTlQsIG5hZ2NvdW50IC0gb2FnY291bnQpOwogCWlmIChuYiA+IG1wLT5tX3NiLnNiX2RibG9ja3MpCkBAIC0zNjksOSArMzY3LDkgQEAKIAlpZiAoZHBjdCkKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0lNQVhQQ1QsIGRwY3QpOwogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci0JaWYgKGVycm9yKSB7CisJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JfQorCiAJLyogTmV3IGFsbG9jYXRpb24gZ3JvdXBzIGZ1bGx5IGluaXRpYWxpemVkLCBzbyB1cGRhdGUgbW91bnQgc3RydWN0ICovCiAJaWYgKG5hZ2ltYXgpCiAJCW1wLT5tX21heGFnaSA9IG5hZ2ltYXg7CkBAIC0zODEsNiArMzc5LDggQEAKIAkJbXAtPm1fbWF4aWNvdW50ID0gaWNvdW50IDw8IG1wLT5tX3NiLnNiX2lub3BibG9nOwogCX0gZWxzZQogCQltcC0+bV9tYXhpY291bnQgPSAwOworCisJLyogdXBkYXRlIHNlY29uZGFyeSBzdXBlcmJsb2Nrcy4gKi8KIAlmb3IgKGFnbm8gPSAxOyBhZ25vIDwgbmFnY291bnQ7IGFnbm8rKykgewogCQllcnJvciA9IHhmc19yZWFkX2J1ZihtcCwgbXAtPm1fZGRldl90YXJncCwKIAkJCQkgIFhGU19BR0JfVE9fREFERFIobXAsIGFnbm8sIFhGU19TQl9CTE9DSyhtcCkpLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2MuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKaW5kZXggY2I5MDdiYS4uOWQ4ODRjMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2lhbGxvYy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJZCA9IFhGU19BR0JfVE9fREFERFIobXAsIGFnbm8sIGFnYm5vICsgKGogKiBibGtzX3Blcl9jbHVzdGVyKSk7CiAJCWZidWYgPSB4ZnNfdHJhbnNfZ2V0X2J1Zih0cCwgbXAtPm1fZGRldl90YXJncCwgZCwKIAkJCQkJIG1wLT5tX2JzaXplICogYmxrc19wZXJfY2x1c3RlciwKLQkJCQkJIFhGU19CVUZfTE9DSyk7CisJCQkJCSBYQkZfTE9DSyk7CiAJCUFTU0VSVChmYnVmKTsKIAkJQVNTRVJUKCFYRlNfQlVGX0dFVEVSUk9SKGZidWYpKTsKIApAQCAtMjUzLDYgKzI1Myw3IEBACiAJeGZzX2FnaW5vX3QJdGhpc2lubzsJLyogY3VycmVudCBpbm9kZSBudW1iZXIsIGZvciBsb29wICovCiAJaW50CQlpc2FsaWduZWQgPSAwOwkvKiBpbm9kZSBhbGxvY2F0aW9uIGF0IHN0cmlwZSB1bml0ICovCiAJCQkJCS8qIGJvdW5kYXJ5ICovCisJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCiAJYXJncy50cCA9IHRwOwogCWFyZ3MubXAgPSB0cC0+dF9tb3VudHA7CkBAIC0zODIsOSArMzgzLDkgQEAKIAluZXdpbm8gPSBYRlNfT0ZGQk5PX1RPX0FHSU5PKGFyZ3MubXAsIGFyZ3MuYWdibm8sIDApOwogCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfY291bnQsIG5ld2xlbik7CiAJYmUzMl9hZGRfY3B1KCZhZ2ktPmFnaV9mcmVlY291bnQsIG5ld2xlbik7Ci0JZG93bl9yZWFkKCZhcmdzLm1wLT5tX3BlcmFnbG9jayk7Ci0JYXJncy5tcC0+bV9wZXJhZ1thZ25vXS5wYWdpX2ZyZWVjb3VudCArPSBuZXdsZW47Ci0JdXBfcmVhZCgmYXJncy5tcC0+bV9wZXJhZ2xvY2spOworCXBhZyA9IHhmc19wZXJhZ19nZXQoYXJncy5tcCwgYWdubyk7CisJcGFnLT5wYWdpX2ZyZWVjb3VudCArPSBuZXdsZW47CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCWFnaS0+YWdpX25ld2lubyA9IGNwdV90b19iZTMyKG5ld2lubyk7CiAKIAkvKgpAQCAtNDg2LDkgKzQ4Nyw4IEBACiAJICovCiAJYWdubyA9IHBhZ25vOwogCWZsYWdzID0gWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSzsKLQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJZm9yICg7OykgewotCQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOwogCQlpZiAoIXBhZy0+cGFnaV9pbml0KSB7CiAJCQlpZiAoeGZzX2lhbGxvY19yZWFkX2FnaShtcCwgdHAsIGFnbm8sICZhZ2JwKSkgewogCQkJCWFnYnAgPSBOVUxMOwpAQCAtNTI3LDcgKzUyNyw3IEBACiAJCQkJCWFnYnAgPSBOVUxMOwogCQkJCQlnb3RvIG5leHRhZzsKIAkJCQl9Ci0JCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCQkJcmV0dXJuIGFnYnA7CiAJCQl9CiAJCX0KQEAgLTUzNSwyMiArNTM1LDE5IEBACiAJCWlmIChhZ2JwKQogCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdicCk7CiBuZXh0YWc6CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJLyoKIAkJICogTm8gcG9pbnQgaW4gaXRlcmF0aW5nIG92ZXIgdGhlIHJlc3QsIGlmIHdlJ3JlIHNodXR0aW5nCiAJCSAqIGRvd24uCiAJCSAqLwotCQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKLQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJCXJldHVybiBOVUxMOwotCQl9CiAJCWFnbm8rKzsKIAkJaWYgKGFnbm8gPj0gYWdjb3VudCkKIAkJCWFnbm8gPSAwOwogCQlpZiAoYWdubyA9PSBwYWdubykgewotCQkJaWYgKGZsYWdzID09IDApIHsKLQkJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQkJaWYgKGZsYWdzID09IDApCiAJCQkJcmV0dXJuIE5VTEw7Ci0JCQl9CiAJCQlmbGFncyA9IDA7CiAJCX0KIAl9CkBAIC02NzIsNiArNjY5LDcgQEAKIAl4ZnNfYWdudW1iZXJfdAl0YWdubzsJCS8qIHRlc3RpbmcgYWxsb2NhdGlvbiBncm91cCBudW1iZXIgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJKnRjdXI7CQkvKiB0ZW1wIGN1cnNvciAqLwogCXhmc19pbm9idF9yZWNfaW5jb3JlX3QgdHJlYzsJLyogdGVtcCBpbm9kZSBhbGxvY2F0aW9uIHJlY29yZCAqLworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAogCiAJaWYgKCpJT19hZ2JwID09IE5VTEwpIHsKQEAgLTc3MSwxMyArNzY5LDEzIEBACiAJCQkqaW5vcCA9IE5VTExGU0lOTzsKIAkJCXJldHVybiBub3Jvb20gPyBFTk9TUEMgOiAwOwogCQl9Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJaWYgKG1wLT5tX3BlcmFnW3RhZ25vXS5wYWdpX2lub2Rlb2sgPT0gMCkgewotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgdGFnbm8pOworCQlpZiAocGFnLT5wYWdpX2lub2Rlb2sgPT0gMCkgeworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJZ290byBuZXh0YWc7CiAJCX0KIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCB0cCwgdGFnbm8sICZhZ2JwKTsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG5leHRhZzsKIAkJYWdpID0gWEZTX0JVRl9UT19BR0koYWdicCk7CkBAIC03OTAsNiArNzg4LDcgQEAKIAkgKi8KIAlhZ25vID0gdGFnbm87CiAJKklPX2FnYnAgPSBOVUxMOworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOwogCiAgcmVzdGFydF9wYWdubzoKIAljdXIgPSB4ZnNfaW5vYnRfaW5pdF9jdXJzb3IobXAsIHRwLCBhZ2JwLCBiZTMyX3RvX2NwdShhZ2ktPmFnaV9zZXFubykpOwpAQCAtODA4LDcgKzgwNyw2IEBACiAJICogSWYgaW4gdGhlIHNhbWUgQUcgYXMgdGhlIHBhcmVudCwgdHJ5IHRvIGdldCBuZWFyIHRoZSBwYXJlbnQuCiAJICovCiAJaWYgKHBhZ25vID09IGFnbm8pIHsKLQkJeGZzX3BlcmFnX3QJKnBhZyA9ICZtcC0+bV9wZXJhZ1thZ25vXTsKIAkJaW50CQlkb25lbGVmdDsJLyogZG9uZSwgdG8gdGhlIGxlZnQgKi8KIAkJaW50CQlkb25lcmlnaHQ7CS8qIGRvbmUsIHRvIHRoZSByaWdodCAqLwogCQlpbnQJCXNlYXJjaGRpc3RhbmNlID0gMTA7CkBAIC0xMDA2LDkgKzEwMDQsNyBAQAogCQlnb3RvIGVycm9yMDsKIAliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2ZyZWVjb3VudCwgLTEpOwogCXhmc19pYWxsb2NfbG9nX2FnaSh0cCwgYWdicCwgWEZTX0FHSV9GUkVFQ09VTlQpOwotCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQltcC0+bV9wZXJhZ1t0YWdub10ucGFnaV9mcmVlY291bnQtLTsKLQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCXBhZy0+cGFnaV9mcmVlY291bnQtLTsKIAogCWVycm9yID0geGZzX2NoZWNrX2FnaV9mcmVlY291bnQoY3VyLCBhZ2kpOwogCWlmIChlcnJvcikKQEAgLTEwMTYsMTIgKzEwMTIsMTQgQEAKIAogCXhmc19idHJlZV9kZWxfY3Vyc29yKGN1ciwgWEZTX0JUUkVFX05PRVJST1IpOwogCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9JRlJFRSwgLTEpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAkqaW5vcCA9IGlubzsKIAlyZXR1cm4gMDsKIGVycm9yMToKIAl4ZnNfYnRyZWVfZGVsX2N1cnNvcih0Y3VyLCBYRlNfQlRSRUVfRVJST1IpOwogZXJyb3IwOgogCXhmc19idHJlZV9kZWxfY3Vyc29yKGN1ciwgWEZTX0JUUkVFX0VSUk9SKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMDUyLDYgKzEwNTAsNyBAQAogCXhmc19tb3VudF90CSptcDsJLyogbW91bnQgc3RydWN0dXJlIGZvciBmaWxlc3lzdGVtICovCiAJaW50CQlvZmY7CS8qIG9mZnNldCBvZiBpbm9kZSBpbiBpbm9kZSBjaHVuayAqLwogCXhmc19pbm9idF9yZWNfaW5jb3JlX3QgcmVjOwkvKiBidHJlZSByZWNvcmQgKi8KKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CiAKIAltcCA9IHRwLT50X21vdW50cDsKIApAQCAtMTA4OCw5ICsxMDg3LDcgQEAKIAkvKgogCSAqIEdldCB0aGUgYWxsb2NhdGlvbiBncm91cCBoZWFkZXIuCiAJICovCi0JZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgdHAsIGFnbm8sICZhZ2JwKTsKLQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCWlmIChlcnJvcikgewogCQljbW5fZXJyKENFX1dBUk4sCiAJCQkieGZzX2RpZnJlZTogeGZzX2lhbGxvY19yZWFkX2FnaSgpIHJldHVybmVkIGFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCkBAIC0xMTU3LDkgKzExNTQsOSBAQAogCQliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2NvdW50LCAtaWxlbik7CiAJCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfZnJlZWNvdW50LCAtKGlsZW4gLSAxKSk7CiAJCXhmc19pYWxsb2NfbG9nX2FnaSh0cCwgYWdicCwgWEZTX0FHSV9DT1VOVCB8IFhGU19BR0lfRlJFRUNPVU5UKTsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQltcC0+bV9wZXJhZ1thZ25vXS5wYWdpX2ZyZWVjb3VudCAtPSBpbGVuIC0gMTsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJCXBhZy0+cGFnaV9mcmVlY291bnQgLT0gaWxlbiAtIDE7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0lDT1VOVCwgLWlsZW4pOwogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSUZSRUUsIC0oaWxlbiAtIDEpKTsKIApAQCAtMTE4OCw5ICsxMTg1LDkgQEAKIAkJICovCiAJCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfZnJlZWNvdW50LCAxKTsKIAkJeGZzX2lhbGxvY19sb2dfYWdpKHRwLCBhZ2JwLCBYRlNfQUdJX0ZSRUVDT1VOVCk7Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJbXAtPm1fcGVyYWdbYWdub10ucGFnaV9mcmVlY291bnQrKzsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CisJCXBhZy0+cGFnaV9mcmVlY291bnQrKzsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSUZSRUUsIDEpOwogCX0KIApAQCAtMTMxMiw5ICsxMzA5LDcgQEAKIAkJeGZzX2J1Zl90CSphZ2JwOwkvKiBhZ2kgYnVmZmVyICovCiAJCWludAkJaTsJLyogdGVtcCBzdGF0ZSAqLwogCi0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCB0cCwgYWdubywgJmFnYnApOwotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBtcCwgInhmc19pbWFwOiAiCiAJCQkJCSJ4ZnNfaWFsbG9jX3JlYWRfYWdpKCkgcmV0dXJuZWQgIgpAQCAtMTM3OSw3ICsxMzc0LDYgQEAKIAkJCVhGU19GU0JfVE9fQkIobXAsIG1wLT5tX3NiLnNiX2RibG9ja3MpKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0xNTIzLDggKzE1MTcsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlhZ2kgPSBYRlNfQlVGX1RPX0FHSSgqYnBwKTsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107Ci0KKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKIAlpZiAoIXBhZy0+cGFnaV9pbml0KSB7CiAJCXBhZy0+cGFnaV9mcmVlY291bnQgPSBiZTMyX3RvX2NwdShhZ2ktPmFnaV9mcmVlY291bnQpOwogCQlwYWctPnBhZ2lfY291bnQgPSBiZTMyX3RvX2NwdShhZ2ktPmFnaV9jb3VudCk7CkBAIC0xNTM3LDYgKzE1MzAsNyBAQAogCSAqLwogCUFTU0VSVChwYWctPnBhZ2lfZnJlZWNvdW50ID09IGJlMzJfdG9fY3B1KGFnaS0+YWdpX2ZyZWVjb3VudCkgfHwKIAkJWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCAxNTVlNzk4Li5lMjgxZWI0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJCXJldHVybiBFSU5WQUw7CiAKIAkvKiBnZXQgdGhlIHBlcmFnIHN0cnVjdHVyZSBhbmQgZW5zdXJlIHRoYXQgaXQncyBpbm9kZSBjYXBhYmxlICovCi0JcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaW5vKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlubykpOwogCWlmICghcGFnLT5wYWdpX2lub2Rlb2spCiAJCXJldHVybiBFSU5WQUw7CiAJQVNTRVJUKHBhZy0+cGFnX2ljaV9pbml0KTsKQEAgLTM5OCw3ICszOTgsNyBAQAogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dF9lcnJvcl9vcl9hZ2FpbjsKIAl9Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAKIAkqaXBwID0gaXA7CiAKQEAgLTQxNyw3ICs0MTcsNyBAQAogCQlkZWxheSgxKTsKIAkJZ290byBhZ2FpbjsKIAl9Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC00ODgsMTIgKzQ4OCwxMiBAQAogCSAqIGFkZGVkIHRvIHRoZSB0cmVlIGFzc2VydCB0aGF0IGl0J3MgYmVlbiB0aGVyZSBiZWZvcmUgdG8gY2F0Y2gKIAkgKiBwcm9ibGVtcyB3aXRoIHRoZSBpbm9kZSBsaWZlIHRpbWUgZWFybHkgb24uCiAJICovCi0JcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaXAtPmlfaW5vKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlwLT5pX2lubykpOwogCXdyaXRlX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlpZiAoIXJhZGl4X3RyZWVfZGVsZXRlKCZwYWctPnBhZ19pY2lfcm9vdCwgYWdpbm8pKQogCQlBU1NFUlQoMCk7CiAJd3JpdGVfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAKIAkvKgogCSAqIEhlcmUgd2UgZG8gYW4gKGFsbW9zdCkgc3B1cmlvdXMgaW5vZGUgbG9jayBpbiBvcmRlciB0byBjb29yZGluYXRlCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggZWY3N2ZkOC4uZmEzMTM2MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCQkJImFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCiAJCQkJZXJyb3IsIG1wLT5tX2ZzbmFtZSk7CiAJCX0gZWxzZSB7Ci0JCQlBU1NFUlQoYnVmX2ZsYWdzICYgWEZTX0JVRl9UUllMT0NLKTsKKwkJCUFTU0VSVChidWZfZmxhZ3MgJiBYQkZfVFJZTE9DSyk7CiAJCX0KIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTIzOSw3ICsyMzksNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSB4ZnNfaW1hcF90b19icChtcCwgdHAsICZpbWFwLCAmYnAsIFhGU19CVUZfTE9DSywgaW1hcF9mbGFncyk7CisJZXJyb3IgPSB4ZnNfaW1hcF90b19icChtcCwgdHAsICZpbWFwLCAmYnAsIFhCRl9MT0NLLCBpbWFwX2ZsYWdzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMjg1LDcgKzI4NSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCWlmICghYnApIHsKLQkJQVNTRVJUKGJ1Zl9mbGFncyAmIFhGU19CVUZfVFJZTE9DSyk7CisJCUFTU0VSVChidWZfZmxhZ3MgJiBYQkZfVFJZTE9DSyk7CiAJCUFTU0VSVCh0cCA9PSBOVUxMKTsKIAkJKmJwcCA9IE5VTEw7CiAJCXJldHVybiBFQUdBSU47CkBAIC04MDcsNyArODA3LDcgQEAKIAkgKiBHZXQgcG9pbnRlcnMgdG8gdGhlIG9uLWRpc2sgaW5vZGUgYW5kIHRoZSBidWZmZXIgY29udGFpbmluZyBpdC4KIAkgKi8KIAllcnJvciA9IHhmc19pbWFwX3RvX2JwKG1wLCB0cCwgJmlwLT5pX2ltYXAsICZicCwKLQkJCSAgICAgICBYRlNfQlVGX0xPQ0ssIGlnZXRfZmxhZ3MpOworCQkJICAgICAgIFhCRl9MT0NLLCBpZ2V0X2ZsYWdzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlkaXAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsIGlwLT5pX2ltYXAuaW1fYm9mZnNldCk7CkBAIC0xNzUxLDcgKzE3NTEsNyBAQAogCQkgKiBIZXJlIHdlIHB1dCB0aGUgaGVhZCBwb2ludGVyIGludG8gb3VyIG5leHQgcG9pbnRlciwKIAkJICogYW5kIHRoZW4gd2UgZmFsbCB0aHJvdWdoIHRvIHBvaW50IHRoZSBoZWFkIGF0IHVzLgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEZTX0JVRl9MT0NLKTsKKwkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTE4MzMsNyArMTgzMyw3IEBACiAJCSAqIG9mIGRlYWxpbmcgd2l0aCB0aGUgYnVmZmVyIHdoZW4gdGhlcmUgaXMgbm8gbmVlZCB0bwogCQkgKiBjaGFuZ2UgaXQuCiAJCSAqLwotCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYRlNfQlVGX0xPQ0spOworCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJCWlmIChlcnJvcikgewogCQkJY21uX2VycihDRV9XQVJOLAogCQkJCSJ4ZnNfaXVubGlua19yZW1vdmU6IHhmc19pdG9icCgpICByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLApAQCAtMTg5NSw3ICsxODk1LDcgQEAKIAkJICogTm93IGxhc3RfaWJwIHBvaW50cyB0byB0aGUgYnVmZmVyIHByZXZpb3VzIHRvIHVzIG9uCiAJCSAqIHRoZSB1bmxpbmtlZCBsaXN0LiAgUHVsbCB1cyBmcm9tIHRoZSBsaXN0LgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEZTX0JVRl9MT0NLKTsKKwkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCQlpZiAoZXJyb3IpIHsKIAkJCWNtbl9lcnIoQ0VfV0FSTiwKIAkJCQkieGZzX2l1bmxpbmtfcmVtb3ZlOiB4ZnNfaXRvYnAoKSAgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKQEAgLTE5NDYsOCArMTk0Niw5IEBACiAJeGZzX2lub2RlX3QJCSppcCwgKippcF9mb3VuZDsKIAl4ZnNfaW5vZGVfbG9nX2l0ZW1fdAkqaWlwOwogCXhmc19sb2dfaXRlbV90CQkqbGlwOwotCXhmc19wZXJhZ190CQkqcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaW51bSk7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgWEZTX0lOT19UT19BR05PKG1wLCBpbnVtKSk7CiAJaWYgKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSA+PSBYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSkgewogCQlibGtzX3Blcl9jbHVzdGVyID0gMTsKIAkJbmlub2RlcyA9IG1wLT5tX3NiLnNiX2lub3BibG9jazsKQEAgLTIwMzksNyArMjA0MCw3IEBACiAKIAkJYnAgPSB4ZnNfdHJhbnNfZ2V0X2J1Zih0cCwgbXAtPm1fZGRldl90YXJncCwgYmxrbm8sIAogCQkJCQltcC0+bV9ic2l6ZSAqIGJsa3NfcGVyX2NsdXN0ZXIsCi0JCQkJCVhGU19CVUZfTE9DSyk7CisJCQkJCVhCRl9MT0NLKTsKIAogCQlwcmVfZmx1c2hlZCA9IDA7CiAJCWxpcCA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4ZnNfbG9nX2l0ZW1fdCAqKTsKQEAgLTIwODgsNyArMjA4OSw3IEBACiAJfQogCiAJa21lbV9mcmVlKGlwX2ZvdW5kKTsKLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIH0KIAogLyoKQEAgLTIxNTAsNyArMjE1MSw3IEBACiAKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CiAKLQllcnJvciA9IHhmc19pdG9icChpcC0+aV9tb3VudCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYRlNfQlVGX0xPQ0spOworCWVycm9yID0geGZzX2l0b2JwKGlwLT5pX21vdW50LCB0cCwgaXAsICZkaXAsICZpYnAsIFhCRl9MT0NLKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMjQ4MywxMyArMjQ4NCwxNiBAQAogCQlyZXR1cm47CiAKIAkvKiBHaXZlIHRoZSBsb2cgYSBwdXNoIHRvIHN0YXJ0IHRoZSB1bnBpbm5pbmcgSS9PICovCi0JeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwgKGlpcCAmJiBpaXAtPmlsaV9sYXN0X2xzbikgPwotCQkJCWlpcC0+aWxpX2xhc3RfbHNuIDogMCwgWEZTX0xPR19GT1JDRSk7CisJaWYgKGlpcCAmJiBpaXAtPmlsaV9sYXN0X2xzbikKKwkJeGZzX2xvZ19mb3JjZV9sc24oaXAtPmlfbW91bnQsIGlpcC0+aWxpX2xhc3RfbHNuLCAwKTsKKwllbHNlCisJCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsIDApOworCiAJaWYgKHdhaXQpCiAJCXdhaXRfZXZlbnQoaXAtPmlfaXBpbl93YWl0LCAoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA9PSAwKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAordm9pZAogeGZzX2l1bnBpbl93YWl0KAogCXhmc19pbm9kZV90CSppcCkKIHsKQEAgLTI2NzUsNyArMjY3OSw3IEBACiAJeGZzX2J1Zl90CSpicCkKIHsKIAl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7Ci0JeGZzX3BlcmFnX3QJCSpwYWcgPSB4ZnNfZ2V0X3BlcmFnKG1wLCBpcC0+aV9pbm8pOworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKIAl1bnNpZ25lZCBsb25nCQlmaXJzdF9pbmRleCwgbWFzazsKIAl1bnNpZ25lZCBsb25nCQlpbm9kZXNfcGVyX2NsdXN0ZXI7CiAJaW50CQkJaWxpc3Rfc2l6ZTsKQEAgLTI2ODYsNiArMjY5MCw3IEBACiAJaW50CQkJYnVmd2FzZGVsd3JpOwogCWludAkJCWk7CiAKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlwLT5pX2lubykpOwogCUFTU0VSVChwYWctPnBhZ2lfaW5vZGVvayk7CiAJQVNTRVJUKHBhZy0+cGFnX2ljaV9pbml0KTsKIApAQCAtMjY5Myw3ICsyNjk4LDcgQEAKIAlpbGlzdF9zaXplID0gaW5vZGVzX3Blcl9jbHVzdGVyICogc2l6ZW9mKHhmc19pbm9kZV90ICopOwogCWlsaXN0ID0ga21lbV9hbGxvYyhpbGlzdF9zaXplLCBLTV9NQVlGQUlMfEtNX05PRlMpOwogCWlmICghaWxpc3QpCi0JCXJldHVybiAwOworCQlnb3RvIG91dF9wdXQ7CiAKIAltYXNrID0gfigoKFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nKSkgLSAxKTsKIAlmaXJzdF9pbmRleCA9IFhGU19JTk9fVE9fQUdJTk8obXAsIGlwLT5pX2lubykgJiBtYXNrOwpAQCAtMjc2Miw2ICsyNzY3LDggQEAKIG91dF9mcmVlOgogCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJa21lbV9mcmVlKGlsaXN0KTsKK291dF9wdXQ6CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiAwOwogCiAKQEAgLTI4MDUsNiArMjgxMiw3IEBACiAJICovCiAJeGZzX2lmbHVzaF9hYm9ydChpcSk7CiAJa21lbV9mcmVlKGlsaXN0KTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogfQogCkBAIC0yODI3LDggKzI4MzUsNiBAQAogCXhmc19kaW5vZGVfdAkJKmRpcDsKIAl4ZnNfbW91bnRfdAkJKm1wOwogCWludAkJCWVycm9yOwotCWludAkJCW5vYmxvY2sgPSAoZmxhZ3MgPT0gWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLKTsKLQllbnVtIHsgSU5UX0RFTFdSSSA9ICgxIDw8IDApLCBJTlRfQVNZTkMgPSAoMSA8PCAxKSB9OwogCiAJWEZTX1NUQVRTX0lOQyh4c19pZmx1c2hfY291bnQpOwogCkBAIC0yODQxLDE1ICsyODQ3LDYgQEAKIAltcCA9IGlwLT5pX21vdW50OwogCiAJLyoKLQkgKiBJZiB0aGUgaW5vZGUgaXNuJ3QgZGlydHksIHRoZW4ganVzdCByZWxlYXNlIHRoZSBpbm9kZSBmbHVzaCBsb2NrIGFuZAotCSAqIGRvIG5vdGhpbmcuCi0JICovCi0JaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKLQkJeGZzX2lmdW5sb2NrKGlwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKIAkgKiBXZSBjYW4ndCBmbHVzaCB0aGUgaW5vZGUgdW50aWwgaXQgaXMgdW5waW5uZWQsIHNvIHdhaXQgZm9yIGl0IGlmIHdlCiAJICogYXJlIGFsbG93ZWQgdG8gYmxvY2suICBXZSBrbm93IG5vb25lIG5ldyBjYW4gcGluIGl0LCBiZWNhdXNlIHdlIGFyZQogCSAqIGhvbGRpbmcgdGhlIGlub2RlIGxvY2sgc2hhcmVkIGFuZCB5b3UgbmVlZCB0byBob2xkIGl0IGV4Y2x1c2l2ZWx5IHRvCkBAIC0yODYwLDcgKzI4NTcsNyBAQAogCSAqIGluIHRoZSBzYW1lIGNsdXN0ZXIgYXJlIGRpcnR5LCB0aGV5IHdpbGwgcHJvYmFibHkgd3JpdGUgdGhlIGlub2RlCiAJICogb3V0IGZvciB1cyBpZiB0aGV5IG9jY3VyIGFmdGVyIHRoZSBsb2cgZm9yY2UgY29tcGxldGVzLgogCSAqLwotCWlmIChub2Jsb2NrICYmIHhmc19pcGluY291bnQoaXApKSB7CisJaWYgKCEoZmxhZ3MgJiBTWU5DX1dBSVQpICYmIHhmc19pcGluY291bnQoaXApKSB7CiAJCXhmc19pdW5waW5fbm93YWl0KGlwKTsKIAkJeGZzX2lmdW5sb2NrKGlwKTsKIAkJcmV0dXJuIEVBR0FJTjsKQEAgLTI4OTQsNjAgKzI4OTEsMTAgQEAKIAl9CiAKIAkvKgotCSAqIERlY2lkZSBob3cgYnVmZmVyIHdpbGwgYmUgZmx1c2hlZCBvdXQuICBUaGlzIGlzIGRvbmUgYmVmb3JlCi0JICogdGhlIGNhbGwgdG8geGZzX2lmbHVzaF9pbnQgYmVjYXVzZSB0aGlzIGZpZWxkIGlzIHplcm9lZCBieSBpdC4KLQkgKi8KLQlpZiAoaWlwICE9IE5VTEwgJiYgaWlwLT5pbGlfZm9ybWF0LmlsZl9maWVsZHMgIT0gMCkgewotCQkvKgotCQkgKiBGbHVzaCBvdXQgdGhlIGlub2RlIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlIGRpcmVjdGlvbnMKLQkJICogb2YgdGhlIGNhbGxlci4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGUgY2FsbGVyIGhhcyBnaXZlbgotCQkgKiB1cyBhIGNob2ljZSBjaG9vc2UgdGhlIG5vbi1kZWx3cmkgY2FzZS4gIFRoaXMgaXMgYmVjYXVzZQotCQkgKiB0aGUgaW5vZGUgaXMgaW4gdGhlIEFJTCBhbmQgd2UgbmVlZCB0byBnZXQgaXQgb3V0IHNvb24uCi0JCSAqLwotCQlzd2l0Y2ggKGZsYWdzKSB7Ci0JCWNhc2UgWEZTX0lGTFVTSF9TWU5DOgotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfU1lOQzoKLQkJCWZsYWdzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSzoKLQkJY2FzZSBYRlNfSUZMVVNIX0FTWU5DOgotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfQVNZTkM6Ci0JCQlmbGFncyA9IElOVF9BU1lOQzsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJOgotCQkJZmxhZ3MgPSBJTlRfREVMV1JJOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlBU1NFUlQoMCk7Ci0JCQlmbGFncyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoZmxhZ3MpIHsKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX1NZTkM6Ci0JCWNhc2UgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQzoKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSToKLQkJCWZsYWdzID0gSU5UX0RFTFdSSTsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSzoKLQkJY2FzZSBYRlNfSUZMVVNIX0FTWU5DOgotCQkJZmxhZ3MgPSBJTlRfQVNZTkM7Ci0JCQlicmVhazsKLQkJY2FzZSBYRlNfSUZMVVNIX1NZTkM6Ci0JCQlmbGFncyA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUFTU0VSVCgwKTsKLQkJCWZsYWdzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyoKIAkgKiBHZXQgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBvbi1kaXNrIGlub2RlLgogCSAqLwogCWVycm9yID0geGZzX2l0b2JwKG1wLCBOVUxMLCBpcCwgJmRpcCwgJmJwLAotCQkJCW5vYmxvY2sgPyBYRlNfQlVGX1RSWUxPQ0sgOiBYRlNfQlVGX0xPQ0spOworCQkJCShmbGFncyAmIFNZTkNfV0FJVCkgPyBYQkZfTE9DSyA6IFhCRl9UUllMT0NLKTsKIAlpZiAoZXJyb3IgfHwgIWJwKSB7CiAJCXhmc19pZnVubG9jayhpcCk7CiAJCXJldHVybiBlcnJvcjsKQEAgLTI5NjUsNyArMjkxMiw3IEBACiAJICogZ2V0IHN0dWNrIHdhaXRpbmcgaW4gdGhlIHdyaXRlIGZvciB0b28gbG9uZy4KIAkgKi8KIAlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCi0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCiAJLyoKIAkgKiBpbm9kZSBjbHVzdGVyaW5nOgpAQCAtMjk3NSwxMyArMjkyMiwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBjbHVzdGVyX2NvcnJ1cHRfb3V0OwogCi0JaWYgKGZsYWdzICYgSU5UX0RFTFdSSSkgewotCQl4ZnNfYmR3cml0ZShtcCwgYnApOwotCX0gZWxzZSBpZiAoZmxhZ3MgJiBJTlRfQVNZTkMpIHsKLQkJZXJyb3IgPSB4ZnNfYmF3cml0ZShtcCwgYnApOwotCX0gZWxzZSB7CisJaWYgKGZsYWdzICYgU1lOQ19XQUlUKQogCQllcnJvciA9IHhmc19id3JpdGUobXAsIGJwKTsKLQl9CisJZWxzZQorCQl4ZnNfYmR3cml0ZShtcCwgYnApOwogCXJldHVybiBlcnJvcjsKIAogY29ycnVwdF9vdXQ6CkBAIC0zMDE2LDE2ICsyOTYwLDYgQEAKIAlpaXAgPSBpcC0+aV9pdGVtcDsKIAltcCA9IGlwLT5pX21vdW50OwogCi0KLQkvKgotCSAqIElmIHRoZSBpbm9kZSBpc24ndCBkaXJ0eSwgdGhlbiBqdXN0IHJlbGVhc2UgdGhlIGlub2RlCi0JICogZmx1c2ggbG9jayBhbmQgZG8gbm90aGluZy4KLQkgKi8KLQlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkgewotCQl4ZnNfaWZ1bmxvY2soaXApOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAkvKiBzZXQgKmRpcCA9IGlub2RlJ3MgcGxhY2UgaW4gdGhlIGJ1ZmZlciAqLwogCWRpcCA9ICh4ZnNfZGlub2RlX3QgKil4ZnNfYnVmX29mZnNldChicCwgaXAtPmlfaW1hcC5pbV9ib2Zmc2V0KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5oIGIvZnMveGZzL3hmc19pbm9kZS5oCmluZGV4IGVjMWYyOGMuLjZjOTEyYjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2lub2RlLmgKQEAgLTQyMCwxNiArNDIwLDYgQEAKICNkZWZpbmUgWEZTX0lMT0NLX0RFUChmbGFncykJKCgoZmxhZ3MpICYgWEZTX0lMT0NLX0RFUF9NQVNLKSA+PiBYRlNfSUxPQ0tfU0hJRlQpCiAKIC8qCi0gKiBGbGFncyBmb3IgeGZzX2lmbHVzaCgpCi0gKi8KLSNkZWZpbmUJWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9TWU5DCTEKLSNkZWZpbmUJWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQwkyCi0jZGVmaW5lCVhGU19JRkxVU0hfU1lOQwkJCTMKLSNkZWZpbmUJWEZTX0lGTFVTSF9BU1lOQwkJNAotI2RlZmluZQlYRlNfSUZMVVNIX0RFTFdSSQkJNQotI2RlZmluZQlYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0sJNgotCi0vKgogICogRmxhZ3MgZm9yIHhmc19pdHJ1bmNhdGVfc3RhcnQoKS4KICAqLwogI2RlZmluZQlYRlNfSVRSVU5DX0RFRklOSVRFCTB4MQpAQCAtNDgzLDYgKzQ3Myw3IEBACiB2b2lkCQl4ZnNfaWV4dF9yZWFsbG9jKHhmc19pbm9kZV90ICosIGludCwgaW50KTsKIHZvaWQJCXhmc19pcGluKHhmc19pbm9kZV90ICopOwogdm9pZAkJeGZzX2l1bnBpbih4ZnNfaW5vZGVfdCAqKTsKK3ZvaWQJCXhmc19pdW5waW5fd2FpdCh4ZnNfaW5vZGVfdCAqKTsKIGludAkJeGZzX2lmbHVzaCh4ZnNfaW5vZGVfdCAqLCB1aW50KTsKIHZvaWQJCXhmc19pY2hndGltZSh4ZnNfaW5vZGVfdCAqLCBpbnQpOwogdm9pZAkJeGZzX2xvY2tfaW5vZGVzKHhmc19pbm9kZV90ICoqLCBpbnQsIHVpbnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwppbmRleCBmMzg4NTVkLi5kNGRjMDYzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAKIAl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJmlpcC0+aWxpX2Zvcm1hdDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2YoeGZzX2lub2RlX2xvZ19mb3JtYXRfdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JRk9STUFUKTsKKwl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lGT1JNQVQ7CiAJdmVjcCsrOwogCW52ZWNzCSAgICAgPSAxOwogCkBAIC0yNzksNyArMjc5LDcgQEAKIAogCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmaXAtPmlfZDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2Yoc3RydWN0IHhmc19pY2Rpbm9kZSk7Ci0JWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQ09SRSk7CisJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQ09SRTsKIAl2ZWNwKys7CiAJbnZlY3MrKzsKIAlpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyB8PSBYRlNfSUxPR19DT1JFOwpAQCAtMzM2LDcgKzMzNiw3IEBACiAJCQkJdmVjcC0+aV9hZGRyID0KIAkJCQkJKGNoYXIgKikoaXAtPmlfZGYuaWZfdTEuaWZfZXh0ZW50cyk7CiAJCQkJdmVjcC0+aV9sZW4gPSBpcC0+aV9kZi5pZl9ieXRlczsKLQkJCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lFWFQpOworCQkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUVYVDsKIAkJCX0gZWxzZQogI2VuZGlmCiAJCQl7CkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpZXh0X2J1ZmZlcjsKIAkJCQl2ZWNwLT5pX2xlbiA9IHhmc19pZXh0ZW50c19jb3B5KGlwLCBleHRfYnVmZmVyLAogCQkJCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JRVhUKTsKKwkJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lFWFQ7CiAJCQl9CiAJCQlBU1NFUlQodmVjcC0+aV9sZW4gPD0gaXAtPmlfZGYuaWZfYnl0ZXMpOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9kc2l6ZSA9IHZlY3AtPmlfbGVuOwpAQCAtMzczLDcgKzM3Myw3IEBACiAJCQlBU1NFUlQoaXAtPmlfZGYuaWZfYnJvb3QgIT0gTlVMTCk7CiAJCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpaXAtPmlfZGYuaWZfYnJvb3Q7CiAJCQl2ZWNwLT5pX2xlbiA9IGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQlJPT1QpOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQlJPT1Q7CiAJCQl2ZWNwKys7CiAJCQludmVjcysrOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9kc2l6ZSA9IGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzOwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJCQlBU1NFUlQoKGlwLT5pX2RmLmlmX3JlYWxfYnl0ZXMgPT0gMCkgfHwKIAkJCSAgICAgICAoaXAtPmlfZGYuaWZfcmVhbF9ieXRlcyA9PSBkYXRhX2J5dGVzKSk7CiAJCQl2ZWNwLT5pX2xlbiA9IChpbnQpZGF0YV9ieXRlczsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUxPQ0FMKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUxPQ0FMOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfZHNpemUgPSAodW5zaWduZWQpZGF0YV9ieXRlczsKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCQkJdmVjcC0+aV9sZW4gPSB4ZnNfaWV4dGVudHNfY29weShpcCwgZXh0X2J1ZmZlciwKIAkJCQkJWEZTX0FUVFJfRk9SSyk7CiAjZW5kaWYKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUFUVFJfRVhUKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUFUVFJfRVhUOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9hc2l6ZSA9IHZlY3AtPmlfbGVuOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCQkJQVNTRVJUKGlwLT5pX2FmcC0+aWZfYnJvb3QgIT0gTlVMTCk7CiAJCQl2ZWNwLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpaXAtPmlfYWZwLT5pZl9icm9vdDsKIAkJCXZlY3AtPmlfbGVuID0gaXAtPmlfYWZwLT5pZl9icm9vdF9ieXRlczsKLQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUFUVFJfQlJPT1QpOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQVRUUl9CUk9PVDsKIAkJCXZlY3ArKzsKIAkJCW52ZWNzKys7CiAJCQlpaXAtPmlsaV9mb3JtYXQuaWxmX2FzaXplID0gaXAtPmlfYWZwLT5pZl9icm9vdF9ieXRlczsKQEAgLTUxNiw3ICs1MTYsNyBAQAogCQkJQVNTRVJUKChpcC0+aV9hZnAtPmlmX3JlYWxfYnl0ZXMgPT0gMCkgfHwKIAkJCSAgICAgICAoaXAtPmlfYWZwLT5pZl9yZWFsX2J5dGVzID09IGRhdGFfYnl0ZXMpKTsKIAkJCXZlY3AtPmlfbGVuID0gKGludClkYXRhX2J5dGVzOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQVRUUl9MT0NBTCk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lBVFRSX0xPQ0FMOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfYXNpemUgPSAodW5zaWduZWQpZGF0YV9ieXRlczsKQEAgLTYwMiwzMyArNjAyLDIwIEBACiAKIAlpZiAoIXhmc19pZmxvY2tfbm93YWl0KGlwKSkgewogCQkvKgotCQkgKiBJZiBzb21lb25lIGVsc2UgaXNuJ3QgYWxyZWFkeSB0cnlpbmcgdG8gcHVzaCB0aGUgaW5vZGUKLQkJICogYnVmZmVyLCB3ZSBnZXQgdG8gZG8gaXQuCisJCSAqIGlub2RlIGhhcyBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0byB0aGUgYmFja2luZyBidWZmZXIsCisJCSAqIGxlYXZlIGl0IGxvY2tlZCBpbiBzaGFyZWQgbW9kZSwgcHVzaGJ1ZiByb3V0aW5lIHdpbGwKKwkJICogdW5sb2NrIGl0LgogCQkgKi8KLQkJaWYgKGlpcC0+aWxpX3B1c2hidWZfZmxhZyA9PSAwKSB7Ci0JCQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAxOwotI2lmZGVmIERFQlVHCi0JCQlpaXAtPmlsaV9wdXNoX293bmVyID0gY3VycmVudF9waWQoKTsKLSNlbmRpZgotCQkJLyoKLQkJCSAqIElub2RlIGlzIGxlZnQgbG9ja2VkIGluIHNoYXJlZCBtb2RlLgotCQkJICogUHVzaGJ1ZiByb3V0aW5lIGdldHMgdG8gdW5sb2NrIGl0LgotCQkJICovCi0JCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBXZSBob2xkIHRoZSBBSUwgbG9jaywgc28gd2UgbXVzdCBzcGVjaWZ5IHRoZQotCQkJICogTk9OT1RJRlkgZmxhZyBzbyB0aGF0IHdlIHdvbid0IGRvdWJsZSB0cmlwLgotCQkJICovCi0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRHxYRlNfSVVOTE9DS19OT05PVElGWSk7Ci0JCQlyZXR1cm4gWEZTX0lURU1fRkxVU0hJTkc7Ci0JCX0KLQkJLyogTk9UUkVBQ0hFRCAqLworCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKIAl9CiAKIAkvKiBTdGFsZSBpdGVtcyBzaG91bGQgZm9yY2Ugb3V0IHRoZSBpY2xvZyAqLwogCWlmIChpcC0+aV9mbGFncyAmIFhGU19JU1RBTEUpIHsKIAkJeGZzX2lmdW5sb2NrKGlwKTsKKwkJLyoKKwkJICogd2UgaG9sZCB0aGUgQUlMIGxvY2sgLSBub3RpZnkgdGhlIHVubG9jayByb3V0aW5lIG9mIHRoaXMKKwkJICogc28gaXQgZG9lc24ndCB0cnkgdG8gZ2V0IHRoZSBsb2NrIGFnYWluLgorCQkgKi8KIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUR8WEZTX0lVTkxPQ0tfTk9OT1RJRlkpOwogCQlyZXR1cm4gWEZTX0lURU1fUElOTkVEOwogCX0KQEAgLTc0NiwxMSArNzMzLDggQEAKICAqIFRoaXMgZ2V0cyBjYWxsZWQgYnkgeGZzX3RyYW5zX3B1c2hfYWlsKCksIHdoZW4gSU9QX1RSWUxPQ0sKICAqIGZhaWxlZCB0byBnZXQgdGhlIGlub2RlIGZsdXNoIGxvY2sgYnV0IGRpZCBnZXQgdGhlIGlub2RlIGxvY2tlZCBTSEFSRUQuCiAgKiBIZXJlIHdlJ3JlIHRyeWluZyB0byBzZWUgaWYgdGhlIGlub2RlIGJ1ZmZlciBpcyBpbmNvcmUsIGFuZCBpZiBzbyB3aGV0aGVyIGl0J3MKLSAqIG1hcmtlZCBkZWxheWVkIHdyaXRlLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlJ2xsIGluaXRpYXRlIGEgYmF3cml0ZSBvbiB0aGF0Ci0gKiBidWZmZXIgdG8gZXhwZWRpdGUgdGhlIHByb2Nlc3MuCi0gKgotICogV2UgYXJlbid0IGhvbGRpbmcgdGhlIEFJTCBsb2NrIChvciB0aGUgZmx1c2ggbG9jaykgd2hlbiB0aGlzIGdldHMgY2FsbGVkLAotICogc28gaXQgaXMgaW5oZXJlbnRseSByYWNlLXkuCisgKiBtYXJrZWQgZGVsYXllZCB3cml0ZS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB3ZSdsbCBwcm9tb3RlIGl0IGFuZCB0aGF0IHdpbGwKKyAqIGFsbG93IHRoZSBjYWxsZXIgdG8gd3JpdGUgdGhlIGJ1ZmZlciBieSB0cmlnZ2VyaW5nIHRoZSB4ZnNidWZkIHRvIHJ1bi4KICAqLwogU1RBVElDIHZvaWQKIHhmc19pbm9kZV9pdGVtX3B1c2hidWYoCkBAIC03NTksODIgKzc0MywzMCBAQAogCXhmc19pbm9kZV90CSppcDsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJeGZzX2J1Zl90CSpicDsKLQl1aW50CQlkb3B1c2g7CiAKIAlpcCA9IGlpcC0+aWxpX2lub2RlOwotCiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19TSEFSRUQpKTsKIAogCS8qCi0JICogVGhlIGlsaV9wdXNoYnVmX2ZsYWcga2VlcHMgb3RoZXJzIGZyb20KLQkgKiB0cnlpbmcgdG8gZHVwbGljYXRlIG91ciBlZmZvcnQuCi0JICovCi0JQVNTRVJUKGlpcC0+aWxpX3B1c2hidWZfZmxhZyAhPSAwKTsKLQlBU1NFUlQoaWlwLT5pbGlfcHVzaF9vd25lciA9PSBjdXJyZW50X3BpZCgpKTsKLQotCS8qCiAJICogSWYgYSBmbHVzaCBpcyBub3QgaW4gcHJvZ3Jlc3MgYW55bW9yZSwgY2hhbmNlcyBhcmUgdGhhdCB0aGUKIAkgKiBpbm9kZSB3YXMgdGFrZW4gb2ZmIHRoZSBBSUwuIFNvLCBqdXN0IGdldCBvdXQuCiAJICovCiAJaWYgKGNvbXBsZXRpb25fZG9uZSgmaXAtPmlfZmx1c2gpIHx8CiAJICAgICgoaWlwLT5pbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpID09IDApKSB7Ci0JCWlpcC0+aWxpX3B1c2hidWZfZmxhZyA9IDA7CiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAkJcmV0dXJuOwogCX0KIAogCW1wID0gaXAtPmlfbW91bnQ7CiAJYnAgPSB4ZnNfaW5jb3JlKG1wLT5tX2RkZXZfdGFyZ3AsIGlpcC0+aWxpX2Zvcm1hdC5pbGZfYmxrbm8sCi0JCSAgICBpaXAtPmlsaV9mb3JtYXQuaWxmX2xlbiwgWEZTX0lOQ09SRV9UUllMT0NLKTsKKwkJICAgIGlpcC0+aWxpX2Zvcm1hdC5pbGZfbGVuLCBYQkZfVFJZTE9DSyk7CiAKLQlpZiAoYnAgIT0gTlVMTCkgewotCQlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCQkvKgotCQkJICogV2Ugd2VyZSByYWNpbmcgd2l0aCBpZmx1c2ggYmVjYXVzZSB3ZSBkb24ndCBob2xkCi0JCQkgKiB0aGUgQUlMIGxvY2sgb3IgdGhlIGZsdXNoIGxvY2suIEhvd2V2ZXIsIGF0IHRoaXMgcG9pbnQsCi0JCQkgKiB3ZSBoYXZlIHRoZSBidWZmZXIsIGFuZCB3ZSBrbm93IHRoYXQgaXQncyBkaXJ0eS4KLQkJCSAqIFNvLCBpdCdzIHBvc3NpYmxlIHRoYXQgaWZsdXNoIHJhY2VkIHdpdGggdXMsIGFuZAotCQkJICogdGhpcyBpdGVtIGlzIGFscmVhZHkgdGFrZW4gb2ZmIHRoZSBBSUwuCi0JCQkgKiBJZiBub3QsIHdlIGNhbiBmbHVzaCBpdCBhc3luYy4KLQkJCSAqLwotCQkJZG9wdXNoID0gKChpaXAtPmlsaV9pdGVtLmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgJiYKLQkJCQkgICFjb21wbGV0aW9uX2RvbmUoJmlwLT5pX2ZsdXNoKSk7Ci0JCQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCi0JCQl0cmFjZV94ZnNfaW5vZGVfaXRlbV9wdXNoKGJwLCBfUkVUX0lQXyk7Ci0KLQkJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewotCQkJCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQlpZiAoZG9wdXNoKSB7Ci0JCQkJaW50CWVycm9yOwotCQkJCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAotCQkieGZzX2lub2RlX2l0ZW1fcHVzaGJ1ZjogcHVzaGJ1ZiBlcnJvciAlZCBvbiBpaXAgJXAsIGJwICVwIiwKLQkJCQkJCQllcnJvciwgaWlwLCBicCk7Ci0JCQl9IGVsc2UgewotCQkJCXhmc19idWZfcmVsc2UoYnApOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKLQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQkJCXhmc19idWZfcmVsc2UoYnApOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0JLyoKLQkgKiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgYWJvdXQgcmVzZXR0aW5nIHB1c2hidWYgZmxhZyB0b28gZWFybHkgKGFib3ZlKS4KLQkgKiBFdmVuIHRob3VnaCBpbiB0aGVvcnkgd2UgY2FuIGRvIGl0IGFzIHNvb24gYXMgd2UgaGF2ZSB0aGUgYnVmbG9jaywKLQkgKiB3ZSBkb24ndCB3YW50IG90aGVycyB0byBiZSBkb2luZyB3b3JrIG5lZWRsZXNzbHkuIFRoZXknbGwgY29tZSB0bwotCSAqIHRoaXMgZnVuY3Rpb24gdGhpbmtpbmcgdGhhdCBwdXNoaW5nIHRoZSBidWZmZXIgaXMgdGhlaXIKLQkgKiByZXNwb25zaWJpbGl0eSBvbmx5IHRvIGZpbmQgdGhhdCB0aGUgYnVmZmVyIGlzIHN0aWxsIGxvY2tlZCBieQotCSAqIGFub3RoZXIgZG9pbmcgdGhlIHNhbWUgdGhpbmcKLQkgKi8KLQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAwOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwlpZiAoIWJwKQorCQlyZXR1cm47CisJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkKKwkJeGZzX2J1Zl9kZWx3cmlfcHJvbW90ZShicCk7CisJeGZzX2J1Zl9yZWxzZShicCk7CiAJcmV0dXJuOwogfQogCkBAIC04NjcsMTAgKzc5OSwxNCBAQAogCSAgICAgICBpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAhPSAwKTsKIAogCS8qCi0JICogV3JpdGUgb3V0IHRoZSBpbm9kZS4gIFRoZSBjb21wbGV0aW9uIHJvdXRpbmUgKCdpZmx1c2hfZG9uZScpIHdpbGwKLQkgKiBwdWxsIGl0IGZyb20gdGhlIEFJTCwgbWFyayBpdCBjbGVhbiwgdW5sb2NrIHRoZSBmbHVzaCBsb2NrLgorCSAqIFB1c2ggdGhlIGlub2RlIHRvIGl0J3MgYmFja2luZyBidWZmZXIuIFRoaXMgd2lsbCBub3QgcmVtb3ZlIHRoZQorCSAqIGlub2RlIGZyb20gdGhlIEFJTCAtIGEgZnVydGhlciBwdXNoIHdpbGwgYmUgcmVxdWlyZWQgdG8gdHJpZ2dlciBhCisJICogYnVmZmVyIHB1c2guIEhvd2V2ZXIsIHRoaXMgYWxsb3dzIGFsbCB0aGUgZGlydHkgaW5vZGVzIHRvIGJlIHB1c2hlZAorCSAqIHRvIHRoZSBidWZmZXIgYmVmb3JlIGl0IGlzIHB1c2hlZCB0byBkaXNrLiBUSGUgYnVmZmVyIElPIGNvbXBsZXRpb24KKwkgKiB3aWxsIHB1bGwgdGggZWlub2RlIGZyb20gdGhlIEFJTCwgbWFyayBpdCBjbGVhbiBhbmQgdW5sb2NrIHRoZSBmbHVzaAorCSAqIGxvY2suCiAJICovCi0JKHZvaWQpIHhmc19pZmx1c2goaXAsIFhGU19JRkxVU0hfQVNZTkMpOworCSh2b2lkKSB4ZnNfaWZsdXNoKGlwLCAwKTsKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiAKIAlyZXR1cm47CkBAIC05MzQsNyArODcwLDYgQEAKIAkvKgogCSAgIFdlIGhhdmUgemVyb2VkIG1lbW9yeS4gTm8gbmVlZCAuLi4KIAkgICBpaXAtPmlsaV9leHRlbnRzX2J1ZiA9IE5VTEw7Ci0JICAgaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKIAkgKi8KIAogCWlpcC0+aWxpX2Zvcm1hdC5pbGZfdHlwZSA9IFhGU19MSV9JTk9ERTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKaW5kZXggY2M4ZGYxYS4uOWE0Njc5NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKQEAgLTE0NCwxMiArMTQ0LDYgQEAKIAkJCQkJCSAgICAgIGRhdGEgZXh0cyAqLwogCXN0cnVjdCB4ZnNfYm1idF9yZWMJKmlsaV9hZXh0ZW50c19idWY7IC8qIGFycmF5IG9mIGxvZ2dlZAogCQkJCQkJICAgICAgYXR0ciBleHRzICovCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgaWxpX3B1c2hidWZfZmxhZzsgIC8qIG9uZSBiaXQgdXNlZCBpbiBwdXNoX2FpbCAqLwotCi0jaWZkZWYgREVCVUcKLQl1aW50NjRfdCAgICAgICAgICAgICAgICBpbGlfcHVzaF9vd25lcjsgICAgLyogb25lIHdobyBzZXRzIHB1c2hidWZfZmxhZwotCQkJCQkJICAgICAgYWJvdmUgZ2V0cyB0byBwdXNoIHRoZSBidWYgKi8KLSNlbmRpZgogI2lmZGVmIFhGU19UUkFOU19ERUJVRwogCWludAkJCWlsaV9yb290X3NpemU7CiAJY2hhcgkJCSppbGlfb3JpZ19yb290OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pdGFibGUuYyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKaW5kZXggNjJlZmFiMi4uM2FmMDIzMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pdGFibGUuYworKysgYi9mcy94ZnMveGZzX2l0YWJsZS5jCkBAIC00MDgsOCArNDA4LDEwIEBACiAJCShYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSA+PiBtcC0+bV9zYi5zYl9pbm9kZWxvZyk7CiAJbmltYXNrID0gfihuaWNsdXN0ZXIgLSAxKTsKIAluYmNsdXN0ZXIgPSBuaWNsdXN0ZXIgPj4gbXAtPm1fc2Iuc2JfaW5vcGJsb2c7Ci0JaXJidWYgPSBrbWVtX3phbGxvY19ncmVlZHkoJmlyYnNpemUsIFBBR0VfU0laRSwgUEFHRV9TSVpFICogNCwKLQkJCQkgICBLTV9TTEVFUCB8IEtNX01BWUZBSUwgfCBLTV9MQVJHRSk7CisJaXJidWYgPSBrbWVtX3phbGxvY19ncmVlZHkoJmlyYnNpemUsIFBBR0VfU0laRSwgUEFHRV9TSVpFICogNCk7CisJaWYgKCFpcmJ1ZikKKwkJcmV0dXJuIEVOT01FTTsKKwogCW5pcmJ1ZiA9IGlyYnNpemUgLyBzaXplb2YoKmlyYnVmKTsKIAogCS8qCkBAIC00MjAsOSArNDIyLDcgQEAKIAl3aGlsZSAoWEZTX0JVTEtTVEFUX1VCTEVGVCh1YmxlZnQpICYmIGFnbm8gPCBtcC0+bV9zYi5zYl9hZ2NvdW50KSB7CiAJCWNvbmRfcmVzY2hlZCgpOwogCQlicCA9IE5VTEw7Ci0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCBOVUxMLCBhZ25vLCAmYWdicCk7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWlmIChlcnJvcikgewogCQkJLyoKIAkJCSAqIFNraXAgdGhpcyBhbGxvY2F0aW9uIGdyb3VwIGFuZCBnbyB0byB0aGUgbmV4dCBvbmUuCkBAIC03MjksNyArNzI5LDcgQEAKIAkvKgogCSAqIERvbmUsIHdlJ3JlIGVpdGhlciBvdXQgb2YgZmlsZXN5c3RlbSBvciBzcGFjZSB0byBwdXQgdGhlIGRhdGEuCiAJICovCi0Ja21lbV9mcmVlKGlyYnVmKTsKKwlrbWVtX2ZyZWVfbGFyZ2UoaXJidWYpOwogCSp1YmNvdW50cCA9IHViZWxlbTsKIAkvKgogCSAqIEZvdW5kIHNvbWUgaW5vZGVzLCByZXR1cm4gdGhlbSBub3cgYW5kIHJldHVybiB0aGUgZXJyb3IgbmV4dCB0aW1lLgpAQCAtODQ5LDkgKzg0OSw3IEBACiAJYWdicCA9IE5VTEw7CiAJd2hpbGUgKGxlZnQgPiAwICYmIGFnbm8gPCBtcC0+bV9zYi5zYl9hZ2NvdW50KSB7CiAJCWlmIChhZ2JwID09IE5VTEwpIHsKLQkJCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCWVycm9yID0geGZzX2lhbGxvY19yZWFkX2FnaShtcCwgTlVMTCwgYWdubywgJmFnYnApOwotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCWlmIChlcnJvcikgewogCQkJCS8qCiAJCQkJICogSWYgd2UgY2FuJ3QgcmVhZCB0aGUgQUdJIG9mIHRoaXMgYWcsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5jIGIvZnMveGZzL3hmc19sb2cuYwppbmRleCA2MDBiNWIwLi40ZjE2YmU0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmMKQEAgLTUwLDcgKzUwLDYgQEAKIAkgIChvZmYpICs9IChieXRlcyk7fQogCiAvKiBMb2NhbCBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLVNUQVRJQyBpbnQJIHhsb2dfYmRzdHJhdF9jYihzdHJ1Y3QgeGZzX2J1ZiAqKTsKIFNUQVRJQyBpbnQJIHhsb2dfY29tbWl0X3JlY29yZCh4ZnNfbW91bnRfdCAqbXAsIHhsb2dfdGlja2V0X3QgKnRpY2tldCwKIAkJCQkgICAgeGxvZ19pbl9jb3JlX3QgKiosIHhmc19sc25fdCAqKTsKIFNUQVRJQyB4bG9nX3QgKiAgeGxvZ19hbGxvY19sb2coeGZzX21vdW50X3QJKm1wLApAQCAtODAsMTEgKzc5LDYgQEAKIFNUQVRJQyB2b2lkIHhsb2dfc3RhdGVfc3dpdGNoX2ljbG9ncyh4bG9nX3QJCSpsb2csCiAJCQkJICAgICB4bG9nX2luX2NvcmVfdCAqaWNsb2csCiAJCQkJICAgICBpbnQJCWV2ZW50dWFsX3NpemUpOwotU1RBVElDIGludCAgeGxvZ19zdGF0ZV9zeW5jKHhsb2dfdAkJCSpsb2csCi0JCQkgICAgeGZzX2xzbl90IAkJCWxzbiwKLQkJCSAgICB1aW50CQkJZmxhZ3MsCi0JCQkgICAgaW50CQkJCSpsb2dfZmx1c2hlZCk7Ci1TVEFUSUMgaW50ICB4bG9nX3N0YXRlX3N5bmNfYWxsKHhsb2dfdCAqbG9nLCB1aW50IGZsYWdzLCBpbnQgKmxvZ19mbHVzaGVkKTsKIFNUQVRJQyB2b2lkIHhsb2dfc3RhdGVfd2FudF9zeW5jKHhsb2dfdAkqbG9nLCB4bG9nX2luX2NvcmVfdCAqaWNsb2cpOwogCiAvKiBsb2NhbCBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBncmFudCBoZWFkICovCkBAIC0yOTcsNjUgKzI5MSw2IEBACiAJcmV0dXJuIGxzbjsKIH0JLyogeGZzX2xvZ19kb25lICovCiAKLQotLyoKLSAqIEZvcmNlIHRoZSBpbi1jb3JlIGxvZyB0byBkaXNrLiAgSWYgZmxhZ3MgPT0gWEZTX0xPR19TWU5DLAotICoJdGhlIGZvcmNlIGlzIGRvbmUgc3luY2hyb25vdXNseS4KLSAqCi0gKiBBc3luY2hyb25vdXMgZm9yY2VzIGFyZSBpbXBsZW1lbnRlZCBieSBzZXR0aW5nIHRoZSBXQU5UX1NZTkMKLSAqIGJpdCBpbiB0aGUgYXBwcm9wcmlhdGUgaW4tY29yZSBsb2cgYW5kIHRoZW4gcmV0dXJuaW5nLgotICoKLSAqIFN5bmNocm9ub3VzIGZvcmNlcyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpZ25hbCB2YXJpYWJsZS4gQWxsIGNhbGxlcnMKLSAqIHRvIGZvcmNlIGEgZ2l2ZW4gbHNuIHRvIGRpc2sgd2lsbCB3YWl0IG9uIGEgdGhlIHN2IGF0dGFjaGVkIHRvIHRoZQotICogc3BlY2lmaWMgaW4tY29yZSBsb2cuICBXaGVuIGdpdmVuIGluLWNvcmUgbG9nIGZpbmFsbHkgY29tcGxldGVzIGl0cwotICogd3JpdGUgdG8gZGlzaywgdGhhdCB0aHJlYWQgd2lsbCB3YWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhlCi0gKiBzdi4KLSAqLwotaW50Ci1feGZzX2xvZ19mb3JjZSgKLQl4ZnNfbW91bnRfdAkqbXAsCi0JeGZzX2xzbl90CWxzbiwKLQl1aW50CQlmbGFncywKLQlpbnQJCSpsb2dfZmx1c2hlZCkKLXsKLQl4bG9nX3QJCSpsb2cgPSBtcC0+bV9sb2c7Ci0JaW50CQlkdW1teTsKLQotCWlmICghbG9nX2ZsdXNoZWQpCi0JCWxvZ19mbHVzaGVkID0gJmR1bW15OwotCi0JQVNTRVJUKGZsYWdzICYgWEZTX0xPR19GT1JDRSk7Ci0KLQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZSk7Ci0KLQlpZiAobG9nLT5sX2ZsYWdzICYgWExPR19JT19FUlJPUikKLQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCWlmIChsc24gPT0gMCkKLQkJcmV0dXJuIHhsb2dfc3RhdGVfc3luY19hbGwobG9nLCBmbGFncywgbG9nX2ZsdXNoZWQpOwotCWVsc2UKLQkJcmV0dXJuIHhsb2dfc3RhdGVfc3luYyhsb2csIGxzbiwgZmxhZ3MsIGxvZ19mbHVzaGVkKTsKLX0JLyogX3hmc19sb2dfZm9yY2UgKi8KLQotLyoKLSAqIFdyYXBwZXIgZm9yIF94ZnNfbG9nX2ZvcmNlKCksIHRvIGJlIHVzZWQgd2hlbiBjYWxsZXIgZG9lc24ndCBjYXJlCi0gKiBhYm91dCBlcnJvcnMgb3Igd2hldGhlciB0aGUgbG9nIHdhcyBmbHVzaGVkIG9yIG5vdC4gVGhpcyBpcyB0aGUgbm9ybWFsCi0gKiBpbnRlcmZhY2UgdG8gdXNlIHdoZW4gdHJ5aW5nIHRvIHVucGluIGl0ZW1zIG9yIG1vdmUgdGhlIGxvZyBmb3J3YXJkLgotICovCi12b2lkCi14ZnNfbG9nX2ZvcmNlKAotCXhmc19tb3VudF90CSptcCwKLQl4ZnNfbHNuX3QJbHNuLAotCXVpbnQJCWZsYWdzKQotewotCWludAllcnJvcjsKLQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKG1wLCBsc24sIGZsYWdzLCBOVUxMKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsICJ4ZnNfbG9nX2ZvcmNlOiAiCi0JCQkiZXJyb3IgJWQgcmV0dXJuZWQuIiwgZXJyb3IpOwotCX0KLX0KLQotCiAvKgogICogQXR0YWNoZXMgYSBuZXcgaWNsb2cgSS9PIGNvbXBsZXRpb24gY2FsbGJhY2sgcm91dGluZSBkdXJpbmcKICAqIHRyYW5zYWN0aW9uIGNvbW1pdC4gIElmIHRoZSBsb2cgaXMgaW4gZXJyb3Igc3RhdGUsIGEgbm9uLXplcm8KQEAgLTYwMiw3ICs1MzcsNyBAQAogCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCiAJCXJldHVybiAwOwogCi0JZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgMCwgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMsIE5VTEwpOworCWVycm9yID0gX3hmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQywgTlVMTCk7CiAJQVNTRVJUKGVycm9yIHx8ICEoWExPR19GT1JDRURfU0hVVERPV04obG9nKSkpOwogCiAjaWZkZWYgREVCVUcKQEAgLTYxOCw3ICs1NTMsNyBAQAogCWlmICghIChYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKSkgewogCQlyZWdbMF0uaV9hZGRyID0gKHZvaWQqKSZtYWdpYzsKIAkJcmVnWzBdLmlfbGVuICA9IHNpemVvZihtYWdpYyk7Ci0JCVhMT0dfVkVDX1NFVF9UWVBFKCZyZWdbMF0sIFhMT0dfUkVHX1RZUEVfVU5NT1VOVCk7CisJCXJlZ1swXS5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX1VOTU9VTlQ7CiAKIAkJZXJyb3IgPSB4ZnNfbG9nX3Jlc2VydmUobXAsIDYwMCwgMSwgJnRpYywKIAkJCQkJWEZTX0xPRywgMCwgWExPR19VTk1PVU5UX1JFQ19UWVBFKTsKQEAgLTk4OCwzNSArOTIzLDYgQEAKIH0JLyogeGxvZ19pb2RvbmUgKi8KIAogLyoKLSAqIFRoZSBiZHN0cmF0IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBsb2cgYnVmcy4gVGhpcyBnaXZlcyB1cyBhIGNlbnRyYWwKLSAqIHBsYWNlIHRvIHRyYXAgYnVmcyBpbiBjYXNlIHdlIGdldCBoaXQgYnkgYSBsb2cgSS9PIGVycm9yIGFuZCBuZWVkIHRvCi0gKiBzaHV0ZG93bi4gQWN0dWFsbHksIGluIHByYWN0aWNlLCBldmVuIHdoZW4gd2UgZGlkbid0IGdldCBhIGxvZyBlcnJvciwKLSAqIHdlIHRyYW5zaXRpb24gdGhlIGljbG9ncyB0byBJT0VSUk9SIHN0YXRlICphZnRlciogZmx1c2hpbmcgYWxsIGV4aXN0aW5nCi0gKiBpY2xvZ3MgdG8gZGlzay4gVGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYW55bW9yZSBuZXcgdHJhbnNhY3Rpb25zIHRvIGJlCi0gKiBzdGFydGVkIG9yIGNvbXBsZXRlZCBhZnRlcndhcmRzLgotICovCi1TVEFUSUMgaW50Ci14bG9nX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKmJwKQotewotCXhsb2dfaW5fY29yZV90ICppY2xvZzsKLQotCWljbG9nID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhsb2dfaW5fY29yZV90ICopOwotCi0JaWYgKChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpID09IDApIHsKLQkgIC8qIG5vdGUgZm9yIGlyaXggYnN0cmF0IHdpbGwgbmVlZCAgc3RydWN0IGJkZXZzdyBwYXNzZWQKLQkgICAqIEZpeCB0aGUgZm9sbG93aW5nIG1hY3JvIGlmIHRoZSBjb2RlIGV2ZXIgaXMgbWVyZ2VkCi0JICAgKi8KLQkgICAgWEZTX2Jkc3RyYXQoYnApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOwotCVhGU19CVUZfU1RBTEUoYnApOwotCXhmc19iaW9kb25lKGJwKTsKLQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci19Ci0KLS8qCiAgKiBSZXR1cm4gc2l6ZSBvZiBlYWNoIGluLWNvcmUgbG9nIHJlY29yZCBidWZmZXIuCiAgKgogICogQWxsIG1hY2hpbmVzIGdldCA4IHggMzJrQiBidWZmZXJzIGJ5IGRlZmF1bHQsIHVubGVzcyB0dW5lZCBvdGhlcndpc2UuCkBAIC0xMTU4LDcgKzEwNjQsNiBAQAogCWlmICghYnApCiAJCWdvdG8gb3V0X2ZyZWVfbG9nOwogCVhGU19CVUZfU0VUX0lPRE9ORV9GVU5DKGJwLCB4bG9nX2lvZG9uZSk7Ci0JWEZTX0JVRl9TRVRfQkRTVFJBVF9GVU5DKGJwLCB4bG9nX2Jkc3RyYXRfY2IpOwogCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsICh1bnNpZ25lZCBsb25nKTEpOwogCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwogCUFTU0VSVChYRlNfQlVGX1ZBTFVTRU1BKGJwKSA8PSAwKTsKQEAgLTExOTYsNyArMTEwMSw2IEBACiAJCWlmICghWEZTX0JVRl9DUFNFTUEoYnApKQogCQkJQVNTRVJUKDApOwogCQlYRlNfQlVGX1NFVF9JT0RPTkVfRlVOQyhicCwgeGxvZ19pb2RvbmUpOwotCQlYRlNfQlVGX1NFVF9CRFNUUkFUX0ZVTkMoYnAsIHhsb2dfYmRzdHJhdF9jYik7CiAJCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsICh1bnNpZ25lZCBsb25nKTEpOwogCQlpY2xvZy0+aWNfYnAgPSBicDsKIAkJaWNsb2ctPmljX2RhdGEgPSBicC0+Yl9hZGRyOwpAQCAtMTI2OCw3ICsxMTcyLDcgQEAKIAogCXJlZ1swXS5pX2FkZHIgPSBOVUxMOwogCXJlZ1swXS5pX2xlbiA9IDA7Ci0JWExPR19WRUNfU0VUX1RZUEUoJnJlZ1swXSwgWExPR19SRUdfVFlQRV9DT01NSVQpOworCXJlZ1swXS5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0NPTU1JVDsKIAogCUFTU0VSVF9BTFdBWVMoaWNsb2cpOwogCWlmICgoZXJyb3IgPSB4bG9nX3dyaXRlKG1wLCByZWcsIDEsIHRpY2tldCwgY29tbWl0bHNucCwKQEAgLTEzNDMsNiArMTI0NywzNyBAQAogCSAgICB4ZnNfdHJhbnNfYWlsX3B1c2gobG9nLT5sX2FpbHAsIHRocmVzaG9sZF9sc24pOwogfQkvKiB4bG9nX2dyYW50X3B1c2hfYWlsICovCiAKKy8qCisgKiBUaGUgYmRzdHJhdCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbG9nIGJ1ZnMuIFRoaXMgZ2l2ZXMgdXMgYSBjZW50cmFsCisgKiBwbGFjZSB0byB0cmFwIGJ1ZnMgaW4gY2FzZSB3ZSBnZXQgaGl0IGJ5IGEgbG9nIEkvTyBlcnJvciBhbmQgbmVlZCB0bworICogc2h1dGRvd24uIEFjdHVhbGx5LCBpbiBwcmFjdGljZSwgZXZlbiB3aGVuIHdlIGRpZG4ndCBnZXQgYSBsb2cgZXJyb3IsCisgKiB3ZSB0cmFuc2l0aW9uIHRoZSBpY2xvZ3MgdG8gSU9FUlJPUiBzdGF0ZSAqYWZ0ZXIqIGZsdXNoaW5nIGFsbCBleGlzdGluZworICogaWNsb2dzIHRvIGRpc2suIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IGFueW1vcmUgbmV3IHRyYW5zYWN0aW9ucyB0byBiZQorICogc3RhcnRlZCBvciBjb21wbGV0ZWQgYWZ0ZXJ3YXJkcy4KKyAqLworU1RBVElDIGludAoreGxvZ19iZHN0cmF0KAorCXN0cnVjdCB4ZnNfYnVmCQkqYnApCit7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2c7CisKKwlpY2xvZyA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4bG9nX2luX2NvcmVfdCAqKTsKKwlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7CisJCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisJCVhGU19CVUZfU1RBTEUoYnApOworCQl4ZnNfYmlvZG9uZShicCk7CisJCS8qCisJCSAqIEl0IHdvdWxkIHNlZW0gbG9naWNhbCB0byByZXR1cm4gRUlPIGhlcmUsIGJ1dCB3ZSByZWx5IG9uCisJCSAqIHRoZSBsb2cgc3RhdGUgbWFjaGluZSB0byBwcm9wYWdhdGUgSS9PIGVycm9ycyBpbnN0ZWFkIG9mCisJCSAqIGRvaW5nIGl0IGhlcmUuCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlicC0+Yl9mbGFncyB8PSBfWEJGX1JVTl9RVUVVRVM7CisJeGZzX2J1Zl9pb3JlcXVlc3QoYnApOworCXJldHVybiAwOworfQogCiAvKgogICogRmx1c2ggb3V0IHRoZSBpbi1jb3JlIGxvZyAoaWNsb2cpIHRvIHRoZSBvbi1kaXNrIGxvZyBpbiBhbiBhc3luY2hyb25vdXMgCkBAIC0xNDYyLDcgKzEzOTcsNyBAQAogCSAqLwogCVhGU19CVUZfV1JJVEUoYnApOwogCi0JaWYgKChlcnJvciA9IFhGU19id3JpdGUoYnApKSkgeworCWlmICgoZXJyb3IgPSB4bG9nX2Jkc3RyYXQoYnApKSkgewogCQl4ZnNfaW9lcnJvcl9hbGVydCgieGxvZ19zeW5jIiwgbG9nLT5sX21wLCBicCwKIAkJCQkgIFhGU19CVUZfQUREUihicCkpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC0xNTAyLDcgKzE0MzcsNyBAQAogCQkvKiBhY2NvdW50IGZvciBpbnRlcm5hbCBsb2cgd2hpY2ggZG9lc24ndCBzdGFydCBhdCBibG9jayAjMCAqLwogCQlYRlNfQlVGX1NFVF9BRERSKGJwLCBYRlNfQlVGX0FERFIoYnApICsgbG9nLT5sX2xvZ0JCc3RhcnQpOwogCQlYRlNfQlVGX1dSSVRFKGJwKTsKLQkJaWYgKChlcnJvciA9IFhGU19id3JpdGUoYnApKSkgeworCQlpZiAoKGVycm9yID0geGxvZ19iZHN0cmF0KGJwKSkpIHsKIAkJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4bG9nX3N5bmMgKHNwbGl0KSIsIGxvZy0+bF9tcCwKIAkJCQkJICBicCwgWEZTX0JVRl9BRERSKGJwKSk7CiAJCQlyZXR1cm4gZXJyb3I7CkBAIC0yODU0LDcgKzI3ODksNiBAQAogCWxvZy0+bF9pY2xvZyA9IGljbG9nLT5pY19uZXh0OwogfQkvKiB4bG9nX3N0YXRlX3N3aXRjaF9pY2xvZ3MgKi8KIAotCiAvKgogICogV3JpdGUgb3V0IGFsbCBkYXRhIGluIHRoZSBpbi1jb3JlIGxvZyBhcyBvZiB0aGlzIGV4YWN0IG1vbWVudCBpbiB0aW1lLgogICoKQEAgLTI4ODIsMTEgKzI4MTYsMTcgQEAKICAqCSAgIGIpIHdoZW4gd2UgcmV0dXJuIGZyb20gZmx1c2hpbmcgb3V0IHRoaXMgaWNsb2csIGl0IGlzIHN0aWxsCiAgKgkJbm90IGluIHRoZSBhY3RpdmUgbm9yIGRpcnR5IHN0YXRlLgogICovCi1TVEFUSUMgaW50Ci14bG9nX3N0YXRlX3N5bmNfYWxsKHhsb2dfdCAqbG9nLCB1aW50IGZsYWdzLCBpbnQgKmxvZ19mbHVzaGVkKQoraW50CitfeGZzX2xvZ19mb3JjZSgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwl1aW50CQkJZmxhZ3MsCisJaW50CQkJKmxvZ19mbHVzaGVkKQogewotCXhsb2dfaW5fY29yZV90CSppY2xvZzsKLQl4ZnNfbHNuX3QJbHNuOworCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2c7CisJeGZzX2xzbl90CQlsc247CisKKwlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZSk7CiAKIAlzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCkBAIC0yOTMyLDcgKzI4NzIsOSBAQAogCiAJCQkJaWYgKHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyhsb2csIGljbG9nKSkKIAkJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCQkJCSpsb2dfZmx1c2hlZCA9IDE7CisKKwkJCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkJCSpsb2dfZmx1c2hlZCA9IDE7CiAJCQkJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJCQlpZiAoYmU2NF90b19jcHUoaWNsb2ctPmljX2hlYWRlci5oX2xzbikgPT0gbHNuICYmCiAJCQkJICAgIGljbG9nLT5pY19zdGF0ZSAhPSBYTE9HX1NUQVRFX0RJUlRZKQpAQCAtMjk3NiwxOSArMjkxOCwzNyBAQAogCQkgKi8KIAkJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikKIAkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJKmxvZ19mbHVzaGVkID0gMTsKLQorCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkqbG9nX2ZsdXNoZWQgPSAxOwogCX0gZWxzZSB7CiAKIG5vX3NsZWVwOgogCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJfQogCXJldHVybiAwOwotfQkvKiB4bG9nX3N0YXRlX3N5bmNfYWxsICovCi0KK30KIAogLyoKLSAqIFVzZWQgYnkgY29kZSB3aGljaCBpbXBsZW1lbnRzIHN5bmNocm9ub3VzIGxvZyBmb3JjZXMuCisgKiBXcmFwcGVyIGZvciBfeGZzX2xvZ19mb3JjZSgpLCB0byBiZSB1c2VkIHdoZW4gY2FsbGVyIGRvZXNuJ3QgY2FyZQorICogYWJvdXQgZXJyb3JzIG9yIHdoZXRoZXIgdGhlIGxvZyB3YXMgZmx1c2hlZCBvciBub3QuIFRoaXMgaXMgdGhlIG5vcm1hbAorICogaW50ZXJmYWNlIHRvIHVzZSB3aGVuIHRyeWluZyB0byB1bnBpbiBpdGVtcyBvciBtb3ZlIHRoZSBsb2cgZm9yd2FyZC4KKyAqLwordm9pZAoreGZzX2xvZ19mb3JjZSgKKwl4ZnNfbW91bnRfdAkqbXAsCisJdWludAkJZmxhZ3MpCit7CisJaW50CWVycm9yOworCisJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgZmxhZ3MsIE5VTEwpOworCWlmIChlcnJvcikgeworCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwgInhmc19sb2dfZm9yY2U6ICIKKwkJCSJlcnJvciAlZCByZXR1cm5lZC4iLCBlcnJvcik7CisJfQorfQorCisvKgorICogRm9yY2UgdGhlIGluLWNvcmUgbG9nIHRvIGRpc2sgZm9yIGEgc3BlY2lmaWMgTFNOLgogICoKICAqIEZpbmQgaW4tY29yZSBsb2cgd2l0aCBsc24uCiAgKglJZiBpdCBpcyBpbiB0aGUgRElSVFkgc3RhdGUsIGp1c3QgcmV0dXJuLgpAQCAtMjk5NiwxMDkgKzI5NTYsMTQyIEBACiAgKgkJc3RhdGUgYW5kIGdvIHRvIHNsZWVwIG9yIHJldHVybi4KICAqCUlmIGl0IGlzIGluIGFueSBvdGhlciBzdGF0ZSwgZ28gdG8gc2xlZXAgb3IgcmV0dXJuLgogICoKLSAqIElmIGZpbGVzeXN0ZW0gYWN0aXZpdHkgZ29lcyB0byB6ZXJvLCB0aGUgaWNsb2cgd2lsbCBnZXQgZmx1c2hlZCBvbmx5IGJ5Ci0gKiBiZGZsdXNoKCkuCisgKiBTeW5jaHJvbm91cyBmb3JjZXMgYXJlIGltcGxlbWVudGVkIHdpdGggYSBzaWduYWwgdmFyaWFibGUuIEFsbCBjYWxsZXJzCisgKiB0byBmb3JjZSBhIGdpdmVuIGxzbiB0byBkaXNrIHdpbGwgd2FpdCBvbiBhIHRoZSBzdiBhdHRhY2hlZCB0byB0aGUKKyAqIHNwZWNpZmljIGluLWNvcmUgbG9nLiAgV2hlbiBnaXZlbiBpbi1jb3JlIGxvZyBmaW5hbGx5IGNvbXBsZXRlcyBpdHMKKyAqIHdyaXRlIHRvIGRpc2ssIHRoYXQgdGhyZWFkIHdpbGwgd2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoZQorICogc3YuCiAgKi8KLVNUQVRJQyBpbnQKLXhsb2dfc3RhdGVfc3luYyh4bG9nX3QJICAqbG9nLAotCQl4ZnNfbHNuX3QgbHNuLAotCQl1aW50CSAgZmxhZ3MsCi0JCWludAkgICpsb2dfZmx1c2hlZCkKK2ludAorX3hmc19sb2dfZm9yY2VfbHNuKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXhmc19sc25fdAkJbHNuLAorCXVpbnQJCQlmbGFncywKKwlpbnQJCQkqbG9nX2ZsdXNoZWQpCiB7Ci0gICAgeGxvZ19pbl9jb3JlX3QJKmljbG9nOwotICAgIGludAkJCWFscmVhZHlfc2xlcHQgPSAwOworCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2c7CisJaW50CQkJYWxyZWFkeV9zbGVwdCA9IDA7CisKKwlBU1NFUlQobHNuICE9IDApOworCisJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2UpOwogCiB0cnlfYWdhaW46Ci0gICAgc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLSAgICBpY2xvZyA9IGxvZy0+bF9pY2xvZzsKLQotICAgIGlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKLQkgICAgc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCSAgICByZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0gICAgfQotCi0gICAgZG8gewotCWlmIChiZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKSAhPSBsc24pIHsKLQkJaWNsb2cgPSBpY2xvZy0+aWNfbmV4dDsKLQkJY29udGludWU7Ci0JfQotCi0JaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0RJUlRZKSB7CisJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKKwlpY2xvZyA9IGxvZy0+bF9pY2xvZzsKKwlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7CiAJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAl9CiAKLQlpZiAoaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfQUNUSVZFKSB7Ci0JCS8qCi0JCSAqIFdlIHNsZWVwIGhlcmUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHNsZXB0IChlLmcuCi0JCSAqIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgbG9va2VkIGF0IHRoZSBjb3JyZWN0Ci0JCSAqIGljbG9nIGJ1ZikgYW5kIHRoZSBidWZmZXIgYmVmb3JlIHVzIGlzIGdvaW5nIHRvCi0JCSAqIGJlIHN5bmMnZWQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBpZiB3ZQotCQkgKiBhcmUgZG9pbmcgc3luYyB0cmFuc2FjdGlvbnMgaGVyZSwgYnkgd2FpdGluZyBmb3IKLQkJICogdGhlIHByZXZpb3VzIEkvTyB0byBjb21wbGV0ZSwgd2UgY2FuIGFsbG93IGEgZmV3Ci0JCSAqIG1vcmUgdHJhbnNhY3Rpb25zIGludG8gdGhpcyBpY2xvZyBiZWZvcmUgd2UgY2xvc2UKLQkJICogaXQgZG93bi4KLQkJICoKLQkJICogT3RoZXJ3aXNlLCB3ZSBtYXJrIHRoZSBidWZmZXIgV0FOVF9TWU5DLCBhbmQgYnVtcAotCQkgKiB1cCB0aGUgcmVmY250IHNvIHdlIGNhbiByZWxlYXNlIHRoZSBsb2cgKHdoaWNoIGRyb3BzCi0JCSAqIHRoZSByZWYgY291bnQpLiAgVGhlIHN0YXRlIHN3aXRjaCBrZWVwcyBuZXcgdHJhbnNhY3Rpb24KLQkJICogY29tbWl0cyBmcm9tIHVzaW5nIHRoaXMgYnVmZmVyLiAgV2hlbiB0aGUgY3VycmVudCBjb21taXRzCi0JCSAqIGZpbmlzaCB3cml0aW5nIGludG8gdGhlIGJ1ZmZlciwgdGhlIHJlZmNvdW50IHdpbGwgZHJvcCB0bwotCQkgKiB6ZXJvIGFuZCB0aGUgYnVmZmVyIHdpbGwgZ28gb3V0IHRoZW4uCi0JCSAqLwotCQlpZiAoIWFscmVhZHlfc2xlcHQgJiYKLQkJICAgIChpY2xvZy0+aWNfcHJldi0+aWNfc3RhdGUgJiAoWExPR19TVEFURV9XQU5UX1NZTkMgfAotCQkJCQkJIFhMT0dfU1RBVEVfU1lOQ0lORykpKSB7Ci0JCQlBU1NFUlQoIShpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKTsKLQkJCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlX3NsZWVwKTsKLQkJCXN2X3dhaXQoJmljbG9nLT5pY19wcmV2LT5pY193cml0ZV93YWl0LCBQU1dQLAotCQkJCSZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKLQkJCSpsb2dfZmx1c2hlZCA9IDE7Ci0JCQlhbHJlYWR5X3NsZXB0ID0gMTsKLQkJCWdvdG8gdHJ5X2FnYWluOwotCQl9IGVsc2UgeworCWRvIHsKKwkJaWYgKGJlNjRfdG9fY3B1KGljbG9nLT5pY19oZWFkZXIuaF9sc24pICE9IGxzbikgeworCQkJaWNsb2cgPSBpY2xvZy0+aWNfbmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0RJUlRZKSB7CisJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9BQ1RJVkUpIHsKKwkJCS8qCisJCQkgKiBXZSBzbGVlcCBoZXJlIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBzbGVwdCAoZS5nLgorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBsb29rZWQgYXQgdGhlIGNvcnJlY3QKKwkJCSAqIGljbG9nIGJ1ZikgYW5kIHRoZSBidWZmZXIgYmVmb3JlIHVzIGlzIGdvaW5nIHRvCisJCQkgKiBiZSBzeW5jJ2VkLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgaWYgd2UKKwkJCSAqIGFyZSBkb2luZyBzeW5jIHRyYW5zYWN0aW9ucyBoZXJlLCBieSB3YWl0aW5nIGZvcgorCQkJICogdGhlIHByZXZpb3VzIEkvTyB0byBjb21wbGV0ZSwgd2UgY2FuIGFsbG93IGEgZmV3CisJCQkgKiBtb3JlIHRyYW5zYWN0aW9ucyBpbnRvIHRoaXMgaWNsb2cgYmVmb3JlIHdlIGNsb3NlCisJCQkgKiBpdCBkb3duLgorCQkJICoKKwkJCSAqIE90aGVyd2lzZSwgd2UgbWFyayB0aGUgYnVmZmVyIFdBTlRfU1lOQywgYW5kIGJ1bXAKKwkJCSAqIHVwIHRoZSByZWZjbnQgc28gd2UgY2FuIHJlbGVhc2UgdGhlIGxvZyAod2hpY2gKKwkJCSAqIGRyb3BzIHRoZSByZWYgY291bnQpLiAgVGhlIHN0YXRlIHN3aXRjaCBrZWVwcyBuZXcKKwkJCSAqIHRyYW5zYWN0aW9uIGNvbW1pdHMgZnJvbSB1c2luZyB0aGlzIGJ1ZmZlci4gIFdoZW4KKwkJCSAqIHRoZSBjdXJyZW50IGNvbW1pdHMgZmluaXNoIHdyaXRpbmcgaW50byB0aGUgYnVmZmVyLAorCQkJICogdGhlIHJlZmNvdW50IHdpbGwgZHJvcCB0byB6ZXJvIGFuZCB0aGUgYnVmZmVyIHdpbGwKKwkJCSAqIGdvIG91dCB0aGVuLgorCQkJICovCisJCQlpZiAoIWFscmVhZHlfc2xlcHQgJiYKKwkJCSAgICAoaWNsb2ctPmljX3ByZXYtPmljX3N0YXRlICYKKwkJCSAgICAgKFhMT0dfU1RBVEVfV0FOVF9TWU5DIHwgWExPR19TVEFURV9TWU5DSU5HKSkpIHsKKwkJCQlBU1NFUlQoIShpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKTsKKworCQkJCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlX3NsZWVwKTsKKworCQkJCXN2X3dhaXQoJmljbG9nLT5pY19wcmV2LT5pY193cml0ZV93YWl0LAorCQkJCQlQU1dQLCAmbG9nLT5sX2ljbG9nbG9jaywgcyk7CisJCQkJaWYgKGxvZ19mbHVzaGVkKQorCQkJCQkqbG9nX2ZsdXNoZWQgPSAxOworCQkJCWFscmVhZHlfc2xlcHQgPSAxOworCQkJCWdvdG8gdHJ5X2FnYWluOworCQkJfQogCQkJYXRvbWljX2luYygmaWNsb2ctPmljX3JlZmNudCk7CiAJCQl4bG9nX3N0YXRlX3N3aXRjaF9pY2xvZ3MobG9nLCBpY2xvZywgMCk7CiAJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCQlpZiAoeGxvZ19zdGF0ZV9yZWxlYXNlX2ljbG9nKGxvZywgaWNsb2cpKQogCQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJCSpsb2dfZmx1c2hlZCA9IDE7CisJCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkJKmxvZ19mbHVzaGVkID0gMTsKIAkJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCX0KLQl9CiAKLQlpZiAoKGZsYWdzICYgWEZTX0xPR19TWU5DKSAmJiAvKiBzbGVlcCAqLwotCSAgICAhKGljbG9nLT5pY19zdGF0ZSAmIChYTE9HX1NUQVRFX0FDVElWRSB8IFhMT0dfU1RBVEVfRElSVFkpKSkgeworCQlpZiAoKGZsYWdzICYgWEZTX0xPR19TWU5DKSAmJiAvKiBzbGVlcCAqLworCQkgICAgIShpY2xvZy0+aWNfc3RhdGUgJgorCQkgICAgICAoWExPR19TVEFURV9BQ1RJVkUgfCBYTE9HX1NUQVRFX0RJUlRZKSkpIHsKKwkJCS8qCisJCQkgKiBEb24ndCB3YWl0IG9uIGNvbXBsZXRpb24gaWYgd2Uga25vdyB0aGF0IHdlJ3ZlCisJCQkgKiBnb3R0ZW4gYSBsb2cgd3JpdGUgZXJyb3IuCisJCQkgKi8KKwkJCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKKwkJCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CisJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOworCQkJfQorCQkJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2Vfc2xlZXApOworCQkJc3Zfd2FpdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQsIFBTV1AsICZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKKwkJCS8qCisJCQkgKiBObyBuZWVkIHRvIGdyYWIgdGhlIGxvZyBsb2NrIGhlcmUgc2luY2Ugd2UncmUKKwkJCSAqIG9ubHkgZGVjaWRpbmcgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIEVJTworCQkJICogYW5kIHRoZSBtZW1vcnkgcmVhZCBzaG91bGQgYmUgYXRvbWljLgorCQkJICovCisJCQlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKQorCQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAotCQkvKgotCQkgKiBEb24ndCB3YWl0IG9uIGNvbXBsZXRpb24gaWYgd2Uga25vdyB0aGF0IHdlJ3ZlCi0JCSAqIGdvdHRlbiBhIGxvZyB3cml0ZSBlcnJvci4KLQkJICovCi0JCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKKwkJCWlmIChsb2dfZmx1c2hlZCkKKwkJCQkqbG9nX2ZsdXNoZWQgPSAxOworCQl9IGVsc2UgewkJLyoganVzdCByZXR1cm4gKi8KIAkJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAkJfQotCQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZV9zbGVlcCk7Ci0JCXN2X3dhaXQoJmljbG9nLT5pY19mb3JjZV93YWl0LCBQU1dQLCAmbG9nLT5sX2ljbG9nbG9jaywgcyk7Ci0JCS8qCi0JCSAqIE5vIG5lZWQgdG8gZ3JhYiB0aGUgbG9nIGxvY2sgaGVyZSBzaW5jZSB3ZSdyZQotCQkgKiBvbmx5IGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiBFSU8KLQkJICogYW5kIHRoZSBtZW1vcnkgcmVhZCBzaG91bGQgYmUgYXRvbWljLgotCQkgKi8KLQkJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikKLQkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQkJKmxvZ19mbHVzaGVkID0gMTsKLQl9IGVsc2UgewkJLyoganVzdCByZXR1cm4gKi8KLQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCX0KKworCQlyZXR1cm4gMDsKKwl9IHdoaWxlIChpY2xvZyAhPSBsb2ctPmxfaWNsb2cpOworCisJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCXJldHVybiAwOworfQogCi0gICAgfSB3aGlsZSAoaWNsb2cgIT0gbG9nLT5sX2ljbG9nKTsKKy8qCisgKiBXcmFwcGVyIGZvciBfeGZzX2xvZ19mb3JjZV9sc24oKSwgdG8gYmUgdXNlZCB3aGVuIGNhbGxlciBkb2Vzbid0IGNhcmUKKyAqIGFib3V0IGVycm9ycyBvciB3aGV0aGVyIHRoZSBsb2cgd2FzIGZsdXNoZWQgb3Igbm90LiBUaGlzIGlzIHRoZSBub3JtYWwKKyAqIGludGVyZmFjZSB0byB1c2Ugd2hlbiB0cnlpbmcgdG8gdW5waW4gaXRlbXMgb3IgbW92ZSB0aGUgbG9nIGZvcndhcmQuCisgKi8KK3ZvaWQKK3hmc19sb2dfZm9yY2VfbHNuKAorCXhmc19tb3VudF90CSptcCwKKwl4ZnNfbHNuX3QJbHNuLAorCXVpbnQJCWZsYWdzKQoreworCWludAllcnJvcjsKIAotICAgIHNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKLSAgICByZXR1cm4gMDsKLX0JLyogeGxvZ19zdGF0ZV9zeW5jICovCi0KKwllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihtcCwgbHNuLCBmbGFncywgTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLCAieGZzX2xvZ19mb3JjZTogIgorCQkJImVycm9yICVkIHJldHVybmVkLiIsIGVycm9yKTsKKwl9Cit9CiAKIC8qCiAgKiBDYWxsZWQgd2hlbiB3ZSB3YW50IHRvIG1hcmsgdGhlIGN1cnJlbnQgaWNsb2cgYXMgYmVpbmcgcmVhZHkgdG8gc3luYyB0bwpAQCAtMzQ2Myw3ICszNDU2LDYgQEAKIAl4bG9nX3RpY2tldF90CSp0aWM7CiAJeGxvZ190CQkqbG9nOwogCWludAkJcmV0dmFsOwotCWludAkJZHVtbXk7CiAKIAlsb2cgPSBtcC0+bV9sb2c7CiAKQEAgLTM1MzcsMTMgKzM1MjksMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2soJmxvZy0+bF9ncmFudF9sb2NrKTsKIAotCWlmICghIChsb2ctPmxfaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSkgeworCWlmICghKGxvZy0+bF9pY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKSB7CiAJCUFTU0VSVCghbG9nZXJyb3IpOwogCQkvKgogCQkgKiBGb3JjZSB0aGUgaW5jb3JlIGxvZ3MgdG8gZGlzayBiZWZvcmUgc2h1dHRpbmcgdGhlCiAJCSAqIGxvZyBkb3duIGNvbXBsZXRlbHkuCiAJCSAqLwotCQl4bG9nX3N0YXRlX3N5bmNfYWxsKGxvZywgWEZTX0xPR19GT1JDRXxYRlNfTE9HX1NZTkMsICZkdW1teSk7CisJCV94ZnNfbG9nX2ZvcmNlKG1wLCBYRlNfTE9HX1NZTkMsIE5VTEwpOworCiAJCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJCXJldHZhbCA9IHhsb2dfc3RhdGVfaW9lcnJvcihsb2cpOwogCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5oIGIvZnMveGZzL3hmc19sb2cuaAppbmRleCBkMGM5YmFhLi43MDc0YmU5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmgKQEAgLTcwLDE0ICs3MCw4IEBACiAgKiBGbGFncyB0byB4ZnNfbG9nX2ZvcmNlKCkKICAqCiAgKglYRlNfTE9HX1NZTkM6CVN5bmNocm9ub3VzIGZvcmNlIGluLWNvcmUgbG9nIHRvIGRpc2sKLSAqCVhGU19MT0dfRk9SQ0U6CVN0YXJ0IGluLWNvcmUgbG9nIHdyaXRlIG5vdy4KLSAqCVhGU19MT0dfVVJHRToJU3RhcnQgd3JpdGUgd2l0aGluIHNvbWUgd2luZG93IG9mIHRpbWUuCi0gKgotICogTm90ZTogRWl0aGVyIFhGU19MT0dfRk9SQ0Ugb3IgWEZTX0xPR19VUkdFIG11c3QgYmUgc2V0LgogICovCiAjZGVmaW5lIFhGU19MT0dfU1lOQwkJMHgxCi0jZGVmaW5lIFhGU19MT0dfRk9SQ0UJCTB4MgotI2RlZmluZSBYRlNfTE9HX1VSR0UJCTB4NAogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCkBAIC0xMTAsMTAgKzEwNCw4IEBACiAjZGVmaW5lIFhMT0dfUkVHX1RZUEVfVFJBTlNIRFIJCTE5CiAjZGVmaW5lIFhMT0dfUkVHX1RZUEVfTUFYCQkxOQogCi0jZGVmaW5lIFhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIHQpICgodmVjcCktPmlfdHlwZSA9ICh0KSkKLQogdHlwZWRlZiBzdHJ1Y3QgeGZzX2xvZ19pb3ZlYyB7Ci0JeGZzX2NhZGRyX3QJCWlfYWRkcjsJCS8qIGJlZ2lubmluZyBhZGRyZXNzIG9mIHJlZ2lvbiAqLworCXhmc19jYWRkcl90CWlfYWRkcjsJCS8qIGJlZ2lubmluZyBhZGRyZXNzIG9mIHJlZ2lvbiAqLwogCWludAkJaV9sZW47CQkvKiBsZW5ndGggaW4gYnl0ZXMgb2YgcmVnaW9uICovCiAJdWludAkJaV90eXBlOwkJLyogdHlwZSBvZiByZWdpb24gKi8KIH0geGZzX2xvZ19pb3ZlY190OwpAQCAtMTQwLDEyICsxMzIsMTcgQEAKIAkJICAgICAgIHZvaWQJCSoqaWNsb2csCiAJCSAgICAgICB1aW50CQlmbGFncyk7CiBpbnQJICBfeGZzX2xvZ19mb3JjZShzdHJ1Y3QgeGZzX21vdW50ICptcCwKLQkJCSB4ZnNfbHNuX3QJbHNuLAogCQkJIHVpbnQJCWZsYWdzLAogCQkJIGludAkJKmxvZ19mb3JjZWQpOwogdm9pZAkgIHhmc19sb2dfZm9yY2Uoc3RydWN0IHhmc19tb3VudAkqbXAsCi0JCQl4ZnNfbHNuX3QJCWxzbiwKIAkJCXVpbnQJCQlmbGFncyk7CitpbnQJICBfeGZzX2xvZ19mb3JjZV9sc24oc3RydWN0IHhmc19tb3VudCAqbXAsCisJCQkgICAgIHhmc19sc25fdAkJbHNuLAorCQkJICAgICB1aW50CQlmbGFncywKKwkJCSAgICAgaW50CQkqbG9nX2ZvcmNlZCk7Cit2b2lkCSAgeGZzX2xvZ19mb3JjZV9sc24oc3RydWN0IHhmc19tb3VudAkqbXAsCisJCQkgICAgeGZzX2xzbl90CQlsc24sCisJCQkgICAgdWludAkJZmxhZ3MpOwogaW50CSAgeGZzX2xvZ19tb3VudChzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAkJCXN0cnVjdCB4ZnNfYnVmdGFyZwkqbG9nX3RhcmdldCwKIAkJCXhmc19kYWRkcl90CQlzdGFydF9ibG9jaywKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaCBiL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAppbmRleCBkNTU2NjJkLi5mZDAyYTE4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19wcml2LmgKKysrIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCkBAIC00NDMsMTQgKzQ0Myw5IEBACiAKIC8qIGNvbW1vbiByb3V0aW5lcyAqLwogZXh0ZXJuIHhmc19sc25fdCB4bG9nX2Fzc2lnbl90YWlsX2xzbihzdHJ1Y3QgeGZzX21vdW50ICptcCk7Ci1leHRlcm4gaW50CSB4bG9nX2ZpbmRfdGFpbCh4bG9nX3QJKmxvZywKLQkJCQl4ZnNfZGFkZHJfdCAqaGVhZF9ibGssCi0JCQkJeGZzX2RhZGRyX3QgKnRhaWxfYmxrKTsKIGV4dGVybiBpbnQJIHhsb2dfcmVjb3Zlcih4bG9nX3QgKmxvZyk7CiBleHRlcm4gaW50CSB4bG9nX3JlY292ZXJfZmluaXNoKHhsb2dfdCAqbG9nKTsKIGV4dGVybiB2b2lkCSB4bG9nX3BhY2tfZGF0YSh4bG9nX3QgKmxvZywgeGxvZ19pbl9jb3JlX3QgKmljbG9nLCBpbnQpOwotZXh0ZXJuIHN0cnVjdCB4ZnNfYnVmICp4bG9nX2dldF9icCh4bG9nX3QgKiwgaW50KTsKLWV4dGVybiB2b2lkCSB4bG9nX3B1dF9icChzdHJ1Y3QgeGZzX2J1ZiAqKTsKIAogZXh0ZXJuIGttZW1fem9uZV90CSp4ZnNfbG9nX3RpY2tldF96b25lOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggNjlhYzJlNS4uMjJlNmVmZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtNTAsOCArNTAsNiBAQAogCiBTVEFUSUMgaW50CXhsb2dfZmluZF96ZXJvZWQoeGxvZ190ICosIHhmc19kYWRkcl90ICopOwogU1RBVElDIGludAl4bG9nX2NsZWFyX3N0YWxlX2Jsb2Nrcyh4bG9nX3QgKiwgeGZzX2xzbl90KTsKLVNUQVRJQyB2b2lkCXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9iYWNrcSh4bG9nX3JlY292ZXJfaXRlbV90ICoqcSwKLQkJCQkJICAgICAgIHhsb2dfcmVjb3Zlcl9pdGVtX3QgKml0ZW0pOwogI2lmIGRlZmluZWQoREVCVUcpCiBTVEFUSUMgdm9pZAl4bG9nX3JlY292ZXJfY2hlY2tfc3VtbWFyeSh4bG9nX3QgKik7CiAjZWxzZQpAQCAtNjgsNyArNjYsNyBAQAogCSgoYmJzICsgKGxvZyktPmxfc2VjdGJiX21hc2sgKyAxKSAmIH4obG9nKS0+bF9zZWN0YmJfbWFzaykgOiAoYmJzKSApCiAjZGVmaW5lIFhMT0dfU0VDVE9SX1JPVU5ERE9XTl9CTEtOTyhsb2csIGJubykJKChibm8pICYgfihsb2cpLT5sX3NlY3RiYl9tYXNrKQogCi14ZnNfYnVmX3QgKgorU1RBVElDIHhmc19idWZfdCAqCiB4bG9nX2dldF9icCgKIAl4bG9nX3QJCSpsb2csCiAJaW50CQluYmJsa3MpCkBAIC04OCw3ICs4Niw3IEBACiAJcmV0dXJuIHhmc19idWZfZ2V0X25vYWRkcihCQlRPQihuYmJsa3MpLCBsb2ctPmxfbXAtPm1fbG9nZGV2X3RhcmdwKTsKIH0KIAotdm9pZAorU1RBVElDIHZvaWQKIHhsb2dfcHV0X2JwKAogCXhmc19idWZfdAkqYnApCiB7CkBAIC04MDUsNyArODAzLDcgQEAKICAqIFdlIGNvdWxkIHNwZWVkIHVwIHNlYXJjaCBieSB1c2luZyBjdXJyZW50IGhlYWRfYmxrIGJ1ZmZlciwgYnV0IGl0IGlzIG5vdAogICogYXZhaWxhYmxlLgogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhsb2dfZmluZF90YWlsKAogCXhsb2dfdAkJCSpsb2csCiAJeGZzX2RhZGRyX3QJCSpoZWFkX2JsaywKQEAgLTEzNjcsMzYgKzEzNjUsNDUgQEAKIAogU1RBVElDIHhsb2dfcmVjb3Zlcl90ICoKIHhsb2dfcmVjb3Zlcl9maW5kX3RpZCgKLQl4bG9nX3JlY292ZXJfdAkJKnEsCisJc3RydWN0IGhsaXN0X2hlYWQJKmhlYWQsCiAJeGxvZ190aWRfdAkJdGlkKQogewotCXhsb2dfcmVjb3Zlcl90CQkqcCA9IHE7CisJeGxvZ19yZWNvdmVyX3QJCSp0cmFuczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQkqbjsKIAotCXdoaWxlIChwICE9IE5VTEwpIHsKLQkJaWYgKHAtPnJfbG9nX3RpZCA9PSB0aWQpCi0JCSAgICBicmVhazsKLQkJcCA9IHAtPnJfbmV4dDsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgbiwgaGVhZCwgcl9saXN0KSB7CisJCWlmICh0cmFucy0+cl9sb2dfdGlkID09IHRpZCkKKwkJCXJldHVybiB0cmFuczsKIAl9Ci0JcmV0dXJuIHA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIFNUQVRJQyB2b2lkCi14bG9nX3JlY292ZXJfcHV0X2hhc2hxKAotCXhsb2dfcmVjb3Zlcl90CQkqKnEsCi0JeGxvZ19yZWNvdmVyX3QJCSp0cmFucykKK3hsb2dfcmVjb3Zlcl9uZXdfdGlkKAorCXN0cnVjdCBobGlzdF9oZWFkCSpoZWFkLAorCXhsb2dfdGlkX3QJCXRpZCwKKwl4ZnNfbHNuX3QJCWxzbikKIHsKLQl0cmFucy0+cl9uZXh0ID0gKnE7Ci0JKnEgPSB0cmFuczsKKwl4bG9nX3JlY292ZXJfdAkJKnRyYW5zOworCisJdHJhbnMgPSBrbWVtX3phbGxvYyhzaXplb2YoeGxvZ19yZWNvdmVyX3QpLCBLTV9TTEVFUCk7CisJdHJhbnMtPnJfbG9nX3RpZCAgID0gdGlkOworCXRyYW5zLT5yX2xzbgkgICA9IGxzbjsKKwlJTklUX0xJU1RfSEVBRCgmdHJhbnMtPnJfaXRlbXEpOworCisJSU5JVF9ITElTVF9OT0RFKCZ0cmFucy0+cl9saXN0KTsKKwlobGlzdF9hZGRfaGVhZCgmdHJhbnMtPnJfbGlzdCwgaGVhZCk7CiB9CiAKIFNUQVRJQyB2b2lkCiB4bG9nX3JlY292ZXJfYWRkX2l0ZW0oCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqKml0ZW1xKQorCXN0cnVjdCBsaXN0X2hlYWQJKmhlYWQpCiB7CiAJeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbTsKIAogCWl0ZW0gPSBrbWVtX3phbGxvYyhzaXplb2YoeGxvZ19yZWNvdmVyX2l0ZW1fdCksIEtNX1NMRUVQKTsKLQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EoaXRlbXEsIGl0ZW0pOworCUlOSVRfTElTVF9IRUFEKCZpdGVtLT5yaV9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZpdGVtLT5yaV9saXN0LCBoZWFkKTsKIH0KIAogU1RBVElDIGludApAQCAtMTQwOSw4ICsxNDE2LDcgQEAKIAl4ZnNfY2FkZHJfdAkJcHRyLCBvbGRfcHRyOwogCWludAkJCW9sZF9sZW47CiAKLQlpdGVtID0gdHJhbnMtPnJfaXRlbXE7Ci0JaWYgKGl0ZW0gPT0gTlVMTCkgeworCWlmIChsaXN0X2VtcHR5KCZ0cmFucy0+cl9pdGVtcSkpIHsKIAkJLyogZmluaXNoIGNvcHlpbmcgcmVzdCBvZiB0cmFucyBoZWFkZXIgKi8KIAkJeGxvZ19yZWNvdmVyX2FkZF9pdGVtKCZ0cmFucy0+cl9pdGVtcSk7CiAJCXB0ciA9ICh4ZnNfY2FkZHJfdCkgJnRyYW5zLT5yX3RoZWFkZXIgKwpAQCAtMTQxOCw3ICsxNDI0LDggQEAKIAkJbWVtY3B5KHB0ciwgZHAsIGxlbik7IC8qIGQsIHMsIGwgKi8KIAkJcmV0dXJuIDA7CiAJfQotCWl0ZW0gPSBpdGVtLT5yaV9wcmV2OworCS8qIHRha2UgdGhlIHRhaWwgZW50cnkgKi8KKwlpdGVtID0gbGlzdF9lbnRyeSh0cmFucy0+cl9pdGVtcS5wcmV2LCB4bG9nX3JlY292ZXJfaXRlbV90LCByaV9saXN0KTsKIAogCW9sZF9wdHIgPSBpdGVtLT5yaV9idWZbaXRlbS0+cmlfY250LTFdLmlfYWRkcjsKIAlvbGRfbGVuID0gaXRlbS0+cmlfYnVmW2l0ZW0tPnJpX2NudC0xXS5pX2xlbjsKQEAgLTE0NTUsOCArMTQ2Miw3IEBACiAKIAlpZiAoIWxlbikKIAkJcmV0dXJuIDA7Ci0JaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwotCWlmIChpdGVtID09IE5VTEwpIHsKKwlpZiAobGlzdF9lbXB0eSgmdHJhbnMtPnJfaXRlbXEpKSB7CiAJCS8qIHdlIG5lZWQgdG8gY2F0Y2ggbG9nIGNvcnJ1cHRpb25zIGhlcmUgKi8KIAkJaWYgKCoodWludCAqKWRwICE9IFhGU19UUkFOU19IRUFERVJfTUFHSUMpIHsKIAkJCXhsb2dfd2FybigiWEZTOiB4bG9nX3JlY292ZXJfYWRkX3RvX3RyYW5zOiAiCkBAIC0xNDc0LDEyICsxNDgwLDE1IEBACiAJbWVtY3B5KHB0ciwgZHAsIGxlbik7CiAJaW5fZiA9ICh4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90ICopcHRyOwogCi0JaWYgKGl0ZW0tPnJpX3ByZXYtPnJpX3RvdGFsICE9IDAgJiYKLQkgICAgIGl0ZW0tPnJpX3ByZXYtPnJpX3RvdGFsID09IGl0ZW0tPnJpX3ByZXYtPnJpX2NudCkgeworCS8qIHRha2UgdGhlIHRhaWwgZW50cnkgKi8KKwlpdGVtID0gbGlzdF9lbnRyeSh0cmFucy0+cl9pdGVtcS5wcmV2LCB4bG9nX3JlY292ZXJfaXRlbV90LCByaV9saXN0KTsKKwlpZiAoaXRlbS0+cmlfdG90YWwgIT0gMCAmJgorCSAgICAgaXRlbS0+cmlfdG90YWwgPT0gaXRlbS0+cmlfY250KSB7CisJCS8qIHRhaWwgaXRlbSBpcyBpbiB1c2UsIGdldCBhIG5ldyBvbmUgKi8KIAkJeGxvZ19yZWNvdmVyX2FkZF9pdGVtKCZ0cmFucy0+cl9pdGVtcSk7CisJCWl0ZW0gPSBsaXN0X2VudHJ5KHRyYW5zLT5yX2l0ZW1xLnByZXYsCisJCQkJCXhsb2dfcmVjb3Zlcl9pdGVtX3QsIHJpX2xpc3QpOwogCX0KLQlpdGVtID0gdHJhbnMtPnJfaXRlbXE7Ci0JaXRlbSA9IGl0ZW0tPnJpX3ByZXY7CiAKIAlpZiAoaXRlbS0+cmlfdG90YWwgPT0gMCkgewkJLyogZmlyc3QgcmVnaW9uIHRvIGJlIGFkZGVkICovCiAJCWlmIChpbl9mLT5pbGZfc2l6ZSA9PSAwIHx8CkBAIC0xNTA0LDk2ICsxNTEzLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLVNUQVRJQyB2b2lkCi14bG9nX3JlY292ZXJfbmV3X3RpZCgKLQl4bG9nX3JlY292ZXJfdAkJKipxLAotCXhsb2dfdGlkX3QJCXRpZCwKLQl4ZnNfbHNuX3QJCWxzbikKLXsKLQl4bG9nX3JlY292ZXJfdAkJKnRyYW5zOwotCi0JdHJhbnMgPSBrbWVtX3phbGxvYyhzaXplb2YoeGxvZ19yZWNvdmVyX3QpLCBLTV9TTEVFUCk7Ci0JdHJhbnMtPnJfbG9nX3RpZCAgID0gdGlkOwotCXRyYW5zLT5yX2xzbgkgICA9IGxzbjsKLQl4bG9nX3JlY292ZXJfcHV0X2hhc2hxKHEsIHRyYW5zKTsKLX0KLQotU1RBVElDIGludAoteGxvZ19yZWNvdmVyX3VubGlua190aWQoCi0JeGxvZ19yZWNvdmVyX3QJCSoqcSwKLQl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQotewotCXhsb2dfcmVjb3Zlcl90CQkqdHA7Ci0JaW50CQkJZm91bmQgPSAwOwotCi0JQVNTRVJUKHRyYW5zICE9IE5VTEwpOwotCWlmICh0cmFucyA9PSAqcSkgewotCQkqcSA9ICgqcSktPnJfbmV4dDsKLQl9IGVsc2UgewotCQl0cCA9ICpxOwotCQl3aGlsZSAodHApIHsKLQkJCWlmICh0cC0+cl9uZXh0ID09IHRyYW5zKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQkJdHAgPSB0cC0+cl9uZXh0OwotCQl9Ci0JCWlmICghZm91bmQpIHsKLQkJCXhsb2dfd2FybigKLQkJCSAgICAgIlhGUzogeGxvZ19yZWNvdmVyX3VubGlua190aWQ6IHRyYW5zIG5vdCBmb3VuZCIpOwotCQkJQVNTRVJUKDApOwotCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCQl9Ci0JCXRwLT5yX25leHQgPSB0cC0+cl9uZXh0LT5yX25leHQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1TVEFUSUMgdm9pZAoteGxvZ19yZWNvdmVyX2luc2VydF9pdGVtX2JhY2txKAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKipxLAotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0pCi17Ci0JaWYgKCpxID09IE5VTEwpIHsKLQkJaXRlbS0+cmlfcHJldiA9IGl0ZW0tPnJpX25leHQgPSBpdGVtOwotCQkqcSA9IGl0ZW07Ci0JfSBlbHNlIHsKLQkJaXRlbS0+cmlfbmV4dAkJPSAqcTsKLQkJaXRlbS0+cmlfcHJldgkJPSAoKnEpLT5yaV9wcmV2OwotCQkoKnEpLT5yaV9wcmV2CQk9IGl0ZW07Ci0JCWl0ZW0tPnJpX3ByZXYtPnJpX25leHQJPSBpdGVtOwotCX0KLX0KLQotU1RBVElDIHZvaWQKLXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9mcm9udHEoCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqKnEsCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSkKLXsKLQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EocSwgaXRlbSk7Ci0JKnEgPSBpdGVtOwotfQotCisvKgorICogU29ydCB0aGUgbG9nIGl0ZW1zIGluIHRoZSB0cmFuc2FjdGlvbi4gQ2FuY2VsbGVkIGJ1ZmZlcnMgbmVlZAorICogdG8gYmUgcHV0IGZpcnN0IHNvIHRoZXkgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IGl0ZW1zIHRoYXQgbWlnaHQKKyAqIG1vZGlmeSB0aGUgYnVmZmVycy4gSWYgdGhleSBhcmUgY2FuY2VsbGVkLCB0aGVuIHRoZSBtb2RpZmljYXRpb25zCisgKiBkb24ndCBuZWVkIHRvIGJlIHJlcGxheWVkLgorICovCiBTVEFUSUMgaW50CiB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucygKIAl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQogewotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKmZpcnN0X2l0ZW0sICppdGVtcSwgKml0ZW1xX25leHQ7Ci0JeGZzX2J1Zl9sb2dfZm9ybWF0X3QJKmJ1Zl9mOwotCXVzaG9ydAkJCWZsYWdzID0gMDsKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqbjsKKwlMSVNUX0hFQUQoc29ydF9saXN0KTsKIAotCWZpcnN0X2l0ZW0gPSBpdGVtcSA9IHRyYW5zLT5yX2l0ZW1xOwotCXRyYW5zLT5yX2l0ZW1xID0gTlVMTDsKLQlkbyB7Ci0JCWl0ZW1xX25leHQgPSBpdGVtcS0+cmlfbmV4dDsKLQkJYnVmX2YgPSAoeGZzX2J1Zl9sb2dfZm9ybWF0X3QgKilpdGVtcS0+cmlfYnVmWzBdLmlfYWRkcjsKKwlsaXN0X3NwbGljZV9pbml0KCZ0cmFucy0+cl9pdGVtcSwgJnNvcnRfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZW0sIG4sICZzb3J0X2xpc3QsIHJpX2xpc3QpIHsKKwkJeGZzX2J1Zl9sb2dfZm9ybWF0X3QJKmJ1Zl9mOwogCi0JCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW1xKSkgeworCQlidWZfZiA9ICh4ZnNfYnVmX2xvZ19mb3JtYXRfdCAqKWl0ZW0tPnJpX2J1ZlswXS5pX2FkZHI7CisKKwkJc3dpdGNoIChJVEVNX1RZUEUoaXRlbSkpIHsKIAkJY2FzZSBYRlNfTElfQlVGOgotCQkJZmxhZ3MgPSBidWZfZi0+YmxmX2ZsYWdzOwotCQkJaWYgKCEoZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCkpIHsKLQkJCQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fZnJvbnRxKCZ0cmFucy0+cl9pdGVtcSwKLQkJCQkJCQkJaXRlbXEpOworCQkJaWYgKCEoYnVmX2YtPmJsZl9mbGFncyAmIFhGU19CTElfQ0FOQ0VMKSkgeworCQkJCWxpc3RfbW92ZSgmaXRlbS0+cmlfbGlzdCwgJnRyYW5zLT5yX2l0ZW1xKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBYRlNfTElfSU5PREU6CkBAIC0xNjAxLDcgKzE1NDMsNyBAQAogCQljYXNlIFhGU19MSV9RVU9UQU9GRjoKIAkJY2FzZSBYRlNfTElfRUZEOgogCQljYXNlIFhGU19MSV9FRkk6Ci0JCQl4bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EoJnRyYW5zLT5yX2l0ZW1xLCBpdGVtcSk7CisJCQlsaXN0X21vdmVfdGFpbCgmaXRlbS0+cmlfbGlzdCwgJnRyYW5zLT5yX2l0ZW1xKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJeGxvZ193YXJuKApAQCAtMTYwOSw4ICsxNTUxLDggQEAKIAkJCUFTU0VSVCgwKTsKIAkJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAkJfQotCQlpdGVtcSA9IGl0ZW1xX25leHQ7Ci0JfSB3aGlsZSAoZmlyc3RfaXRlbSAhPSBpdGVtcSk7CisJfQorCUFTU0VSVChsaXN0X2VtcHR5KCZzb3J0X2xpc3QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI0Miw5ICsyMTg0LDkgQEAKIAl9CiAKIAltcCA9IGxvZy0+bF9tcDsKLQlidWZfZmxhZ3MgPSBYRlNfQlVGX0xPQ0s7CisJYnVmX2ZsYWdzID0gWEJGX0xPQ0s7CiAJaWYgKCEoZmxhZ3MgJiBYRlNfQkxJX0lOT0RFX0JVRikpCi0JCWJ1Zl9mbGFncyB8PSBYRlNfQlVGX01BUFBFRDsKKwkJYnVmX2ZsYWdzIHw9IFhCRl9NQVBQRUQ7CiAKIAlicCA9IHhmc19idWZfcmVhZChtcC0+bV9kZGV2X3RhcmdwLCBibGtubywgbGVuLCBidWZfZmxhZ3MpOwogCWlmIChYRlNfQlVGX0lTRVJST1IoYnApKSB7CkBAIC0yMzQ2LDcgKzIyODgsNyBAQAogCX0KIAogCWJwID0geGZzX2J1Zl9yZWFkKG1wLT5tX2RkZXZfdGFyZ3AsIGluX2YtPmlsZl9ibGtubywgaW5fZi0+aWxmX2xlbiwKLQkJCSAgWEZTX0JVRl9MT0NLKTsKKwkJCSAgWEJGX0xPQ0spOwogCWlmIChYRlNfQlVGX0lTRVJST1IoYnApKSB7CiAJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4bG9nX3JlY292ZXJfZG8uLihyZWFkIzIpIiwgbXAsCiAJCQkJICBicCwgaW5fZi0+aWxmX2Jsa25vKTsKQEAgLTI4MTQsMTQgKzI3NTYsMTMgQEAKIAlpbnQJCQlwYXNzKQogewogCWludAkJCWVycm9yID0gMDsKLQl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqZmlyc3RfaXRlbTsKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtOwogCiAJZXJyb3IgPSB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucyh0cmFucyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlmaXJzdF9pdGVtID0gaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwotCWRvIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZW0sICZ0cmFucy0+cl9pdGVtcSwgcmlfbGlzdCkgewogCQlzd2l0Y2ggKElURU1fVFlQRShpdGVtKSkgewogCQljYXNlIFhGU19MSV9CVUY6CiAJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19idWZmZXJfdHJhbnMobG9nLCBpdGVtLCBwYXNzKTsKQEAgLTI4NTQsOCArMjc5NSw3IEBACiAKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwotCQlpdGVtID0gaXRlbS0+cmlfbmV4dDsKLQl9IHdoaWxlIChmaXJzdF9pdGVtICE9IGl0ZW0pOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjg2OSwyMSArMjgwOSwxOCBAQAogeGxvZ19yZWNvdmVyX2ZyZWVfdHJhbnMoCiAJeGxvZ19yZWNvdmVyX3QJCSp0cmFucykKIHsKLQl4bG9nX3JlY292ZXJfaXRlbV90CSpmaXJzdF9pdGVtLCAqaXRlbSwgKmZyZWVfaXRlbTsKKwl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqbjsKIAlpbnQJCQlpOwogCi0JaXRlbSA9IGZpcnN0X2l0ZW0gPSB0cmFucy0+cl9pdGVtcTsKLQlkbyB7Ci0JCWZyZWVfaXRlbSA9IGl0ZW07Ci0JCWl0ZW0gPSBpdGVtLT5yaV9uZXh0OwotCQkgLyogRnJlZSB0aGUgcmVnaW9ucyBpbiB0aGUgaXRlbS4gKi8KLQkJZm9yIChpID0gMDsgaSA8IGZyZWVfaXRlbS0+cmlfY250OyBpKyspIHsKLQkJCWttZW1fZnJlZShmcmVlX2l0ZW0tPnJpX2J1ZltpXS5pX2FkZHIpOwotCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZW0sIG4sICZ0cmFucy0+cl9pdGVtcSwgcmlfbGlzdCkgeworCQkvKiBGcmVlIHRoZSByZWdpb25zIGluIHRoZSBpdGVtLiAqLworCQlsaXN0X2RlbCgmaXRlbS0+cmlfbGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBpdGVtLT5yaV9jbnQ7IGkrKykKKwkJCWttZW1fZnJlZShpdGVtLT5yaV9idWZbaV0uaV9hZGRyKTsKIAkJLyogRnJlZSB0aGUgaXRlbSBpdHNlbGYgKi8KLQkJa21lbV9mcmVlKGZyZWVfaXRlbS0+cmlfYnVmKTsKLQkJa21lbV9mcmVlKGZyZWVfaXRlbSk7Ci0JfSB3aGlsZSAoZmlyc3RfaXRlbSAhPSBpdGVtKTsKKwkJa21lbV9mcmVlKGl0ZW0tPnJpX2J1Zik7CisJCWttZW1fZnJlZShpdGVtKTsKKwl9CiAJLyogRnJlZSB0aGUgdHJhbnNhY3Rpb24gcmVjb3ZlciBzdHJ1Y3R1cmUgKi8KIAlrbWVtX2ZyZWUodHJhbnMpOwogfQpAQCAtMjg5MSwxNCArMjgyOCwxMiBAQAogU1RBVElDIGludAogeGxvZ19yZWNvdmVyX2NvbW1pdF90cmFucygKIAl4bG9nX3QJCQkqbG9nLAotCXhsb2dfcmVjb3Zlcl90CQkqKnEsCiAJeGxvZ19yZWNvdmVyX3QJCSp0cmFucywKIAlpbnQJCQlwYXNzKQogewogCWludAkJCWVycm9yOwogCi0JaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl91bmxpbmtfdGlkKHEsIHRyYW5zKSkpCi0JCXJldHVybiBlcnJvcjsKKwlobGlzdF9kZWwoJnRyYW5zLT5yX2xpc3QpOwogCWlmICgoZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9fdHJhbnMobG9nLCB0cmFucywgcGFzcykpKQogCQlyZXR1cm4gZXJyb3I7CiAJeGxvZ19yZWNvdmVyX2ZyZWVfdHJhbnModHJhbnMpOwkJCS8qIG5vIGVycm9yICovCkBAIC0yOTI2LDcgKzI4NjEsNyBAQAogU1RBVElDIGludAogeGxvZ19yZWNvdmVyX3Byb2Nlc3NfZGF0YSgKIAl4bG9nX3QJCQkqbG9nLAotCXhsb2dfcmVjb3Zlcl90CQkqcmhhc2hbXSwKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlyaGFzaFtdLAogCXhsb2dfcmVjX2hlYWRlcl90CSpyaGVhZCwKIAl4ZnNfY2FkZHJfdAkJZHAsCiAJaW50CQkJcGFzcykKQEAgLTI5NjAsNyArMjg5NSw3IEBACiAJCX0KIAkJdGlkID0gYmUzMl90b19jcHUob2hlYWQtPm9oX3RpZCk7CiAJCWhhc2ggPSBYTE9HX1JIQVNIKHRpZCk7Ci0JCXRyYW5zID0geGxvZ19yZWNvdmVyX2ZpbmRfdGlkKHJoYXNoW2hhc2hdLCB0aWQpOworCQl0cmFucyA9IHhsb2dfcmVjb3Zlcl9maW5kX3RpZCgmcmhhc2hbaGFzaF0sIHRpZCk7CiAJCWlmICh0cmFucyA9PSBOVUxMKSB7CQkgICAvKiBub3QgZm91bmQ7IGFkZCBuZXcgdGlkICovCiAJCQlpZiAob2hlYWQtPm9oX2ZsYWdzICYgWExPR19TVEFSVF9UUkFOUykKIAkJCQl4bG9nX3JlY292ZXJfbmV3X3RpZCgmcmhhc2hbaGFzaF0sIHRpZCwKQEAgLTI5NzgsNyArMjkxMyw3IEBACiAJCQlzd2l0Y2ggKGZsYWdzKSB7CiAJCQljYXNlIFhMT0dfQ09NTUlUX1RSQU5TOgogCQkJCWVycm9yID0geGxvZ19yZWNvdmVyX2NvbW1pdF90cmFucyhsb2csCi0JCQkJCQkmcmhhc2hbaGFzaF0sIHRyYW5zLCBwYXNzKTsKKwkJCQkJCQkJdHJhbnMsIHBhc3MpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBYTE9HX1VOTU9VTlRfVFJBTlM6CiAJCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfdW5tb3VudF90cmFucyh0cmFucyk7CkBAIC0zMjExLDcgKzMxNDYsNyBAQAogCS8qCiAJICogR2V0IHRoZSBvbiBkaXNrIGlub2RlIHRvIGZpbmQgdGhlIG5leHQgaW5vZGUgaW4gdGhlIGJ1Y2tldC4KIAkgKi8KLQllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsICZkaXAsICZpYnAsIFhGU19CVUZfTE9DSyk7CisJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIE5VTEwsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfaXB1dDsKIApAQCAtMzUxNyw3ICszNDUyLDcgQEAKIAlpbnQJCQllcnJvciA9IDAsIGhfc2l6ZTsKIAlpbnQJCQliYmxrcywgc3BsaXRfYmJsa3M7CiAJaW50CQkJaGJsa3MsIHNwbGl0X2hibGtzLCB3cmFwcGVkX2hibGtzOwotCXhsb2dfcmVjb3Zlcl90CQkqcmhhc2hbWExPR19SSEFTSF9TSVpFXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlyaGFzaFtYTE9HX1JIQVNIX1NJWkVdOwogCiAJQVNTRVJUKGhlYWRfYmxrICE9IHRhaWxfYmxrKTsKIApAQCAtMzk3OCw4ICszOTEzLDcgQEAKIAkJICogY2FzZSB0aGUgdW5saW5rIHRyYW5zYWN0aW9ucyB3b3VsZCBoYXZlIHByb2JsZW1zCiAJCSAqIHB1c2hpbmcgdGhlIEVGSXMgb3V0IG9mIHRoZSB3YXkuCiAJCSAqLwotCQl4ZnNfbG9nX2ZvcmNlKGxvZy0+bF9tcCwgKHhmc19sc25fdCkwLAotCQkJICAgICAgKFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpKTsKKwkJeGZzX2xvZ19mb3JjZShsb2ctPmxfbXAsIFhGU19MT0dfU1lOQyk7CiAKIAkJeGxvZ19yZWNvdmVyX3Byb2Nlc3NfaXVubGlua3MobG9nKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5oIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5oCmluZGV4IGIyMjU0NTUuLjc1ZDc0OTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuaAorKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmgKQEAgLTM1LDIyICszNSwyMSBAQAogICogaXRlbSBoZWFkZXJzIGFyZSBpbiByaV9idWZbMF0uICBBZGRpdGlvbmFsIGJ1ZmZlcnMgZm9sbG93LgogICovCiB0eXBlZGVmIHN0cnVjdCB4bG9nX3JlY292ZXJfaXRlbSB7Ci0Jc3RydWN0IHhsb2dfcmVjb3Zlcl9pdGVtICpyaV9uZXh0OwotCXN0cnVjdCB4bG9nX3JlY292ZXJfaXRlbSAqcmlfcHJldjsKLQlpbnQJCQkgcmlfdHlwZTsKLQlpbnQJCQkgcmlfY250OwkvKiBjb3VudCBvZiByZWdpb25zIGZvdW5kICovCi0JaW50CQkJIHJpX3RvdGFsOwkvKiB0b3RhbCByZWdpb25zICovCi0JeGZzX2xvZ19pb3ZlY190CQkgKnJpX2J1ZjsJLyogcHRyIHRvIHJlZ2lvbnMgYnVmZmVyICovCisJc3RydWN0IGxpc3RfaGVhZAlyaV9saXN0OworCWludAkJCXJpX3R5cGU7CisJaW50CQkJcmlfY250OwkvKiBjb3VudCBvZiByZWdpb25zIGZvdW5kICovCisJaW50CQkJcmlfdG90YWw7CS8qIHRvdGFsIHJlZ2lvbnMgKi8KKwl4ZnNfbG9nX2lvdmVjX3QJCSpyaV9idWY7CS8qIHB0ciB0byByZWdpb25zIGJ1ZmZlciAqLwogfSB4bG9nX3JlY292ZXJfaXRlbV90OwogCiBzdHJ1Y3QgeGxvZ190aWQ7CiB0eXBlZGVmIHN0cnVjdCB4bG9nX3JlY292ZXIgewotCXN0cnVjdCB4bG9nX3JlY292ZXIgKnJfbmV4dDsKLQl4bG9nX3RpZF90CSAgICByX2xvZ190aWQ7CQkvKiBsb2cncyB0cmFuc2FjdGlvbiBpZCAqLwotCXhmc190cmFuc19oZWFkZXJfdCAgcl90aGVhZGVyOwkJLyogdHJhbnMgaGVhZGVyIGZvciBwYXJ0aWFsICovCi0JaW50CQkgICAgcl9zdGF0ZTsJCS8qIG5vdCBuZWVkZWQgKi8KLQl4ZnNfbHNuX3QJICAgIHJfbHNuOwkJLyogeGFjdCBsc24gKi8KLQl4bG9nX3JlY292ZXJfaXRlbV90ICpyX2l0ZW1xOwkJLyogcSBmb3IgaXRlbXMgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlyX2xpc3Q7CisJeGxvZ190aWRfdAkJcl9sb2dfdGlkOwkvKiBsb2cncyB0cmFuc2FjdGlvbiBpZCAqLworCXhmc190cmFuc19oZWFkZXJfdAlyX3RoZWFkZXI7CS8qIHRyYW5zIGhlYWRlciBmb3IgcGFydGlhbCAqLworCWludAkJCXJfc3RhdGU7CS8qIG5vdCBuZWVkZWQgKi8KKwl4ZnNfbHNuX3QJCXJfbHNuOwkJLyogeGFjdCBsc24gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJfaXRlbXE7CS8qIHEgZm9yIGl0ZW1zICovCiB9IHhsb2dfcmVjb3Zlcl90OwogCiAjZGVmaW5lIElURU1fVFlQRShpKQkoKih1c2hvcnQgKikoaSktPnJpX2J1ZlswXS5pX2FkZHIpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmMgYi9mcy94ZnMveGZzX21vdW50LmMKaW5kZXggZWI0MDNiNC4uNmFmYWFlYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5jCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuYwpAQCAtMjAxLDYgKzIwMSwzOCBAQAogCiAKIC8qCisgKiBSZWZlcmVuY2UgY291bnRpbmcgYWNjZXNzIHdyYXBwZXJzIHRvIHRoZSBwZXJhZyBzdHJ1Y3R1cmVzLgorICovCitzdHJ1Y3QgeGZzX3BlcmFnICoKK3hmc19wZXJhZ19nZXQoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8pCit7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOworCWludAkJCXJlZiA9IDA7CisKKwlzcGluX2xvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCXBhZyA9IHJhZGl4X3RyZWVfbG9va3VwKCZtcC0+bV9wZXJhZ190cmVlLCBhZ25vKTsKKwlpZiAocGFnKSB7CisJCUFTU0VSVChhdG9taWNfcmVhZCgmcGFnLT5wYWdfcmVmKSA+PSAwKTsKKwkJLyogY2F0Y2ggbGVha3MgaW4gdGhlIHBvc2l0aXZlIGRpcmVjdGlvbiBkdXJpbmcgdGVzdGluZyAqLworCQlBU1NFUlQoYXRvbWljX3JlYWQoJnBhZy0+cGFnX3JlZikgPCAxMDAwKTsKKwkJcmVmID0gYXRvbWljX2luY19yZXR1cm4oJnBhZy0+cGFnX3JlZik7CisJfQorCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwl0cmFjZV94ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vLCByZWYsIF9SRVRfSVBfKTsKKwlyZXR1cm4gcGFnOworfQorCit2b2lkCit4ZnNfcGVyYWdfcHV0KHN0cnVjdCB4ZnNfcGVyYWcgKnBhZykKK3sKKwlpbnQJcmVmOworCisJQVNTRVJUKGF0b21pY19yZWFkKCZwYWctPnBhZ19yZWYpID4gMCk7CisJcmVmID0gYXRvbWljX2RlY19yZXR1cm4oJnBhZy0+cGFnX3JlZik7CisJdHJhY2VfeGZzX3BlcmFnX3B1dChwYWctPnBhZ19tb3VudCwgcGFnLT5wYWdfYWdubywgcmVmLCBfUkVUX0lQXyk7Cit9CisKKy8qCiAgKiBGcmVlIHVwIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbW91bnQgc3RydWN0dXJlLiAgQXNzdW1lIHRoYXQKICAqIHRoZSBzdHJ1Y3R1cmUgd2FzIGluaXRpYWxseSB6ZXJvZWQsIHNvIHdlIGNhbiB0ZWxsIHdoaWNoIGZpZWxkcyBnb3QKICAqIGluaXRpYWxpemVkLgpAQCAtMjA5LDEzICsyNDEsMTYgQEAKIHhmc19mcmVlX3BlcmFnKAogCXhmc19tb3VudF90CSptcCkKIHsKLQlpZiAobXAtPm1fcGVyYWcpIHsKLQkJaW50CWFnbm87CisJeGZzX2FnbnVtYmVyX3QJYWdubzsKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CiAKLQkJZm9yIChhZ25vID0gMDsgYWdubyA8IG1wLT5tX21heGFnaTsgYWdubysrKQotCQkJaWYgKG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdCkKLQkJCQlrbWVtX2ZyZWUobXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0KTsKLQkJa21lbV9mcmVlKG1wLT5tX3BlcmFnKTsKKwlmb3IgKGFnbm8gPSAwOyBhZ25vIDwgbXAtPm1fc2Iuc2JfYWdjb3VudDsgYWdubysrKSB7CisJCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJCXBhZyA9IHJhZGl4X3RyZWVfZGVsZXRlKCZtcC0+bV9wZXJhZ190cmVlLCBhZ25vKTsKKwkJQVNTRVJUKHBhZyk7CisJCUFTU0VSVChhdG9taWNfcmVhZCgmcGFnLT5wYWdfcmVmKSA9PSAwKTsKKwkJc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQlrbWVtX2ZyZWUocGFnKTsKIAl9CiB9CiAKQEAgLTM4OSwyMiArNDI0LDU3IEBACiAJfQogfQogCi14ZnNfYWdudW1iZXJfdAoraW50CiB4ZnNfaW5pdGlhbGl6ZV9wZXJhZygKIAl4ZnNfbW91bnRfdAkqbXAsCi0JeGZzX2FnbnVtYmVyX3QJYWdjb3VudCkKKwl4ZnNfYWdudW1iZXJfdAlhZ2NvdW50LAorCXhmc19hZ251bWJlcl90CSptYXhhZ2kpCiB7CiAJeGZzX2FnbnVtYmVyX3QJaW5kZXgsIG1heF9tZXRhZGF0YTsKKwl4ZnNfYWdudW1iZXJfdAlmaXJzdF9pbml0aWFsaXNlZCA9IDA7CiAJeGZzX3BlcmFnX3QJKnBhZzsKIAl4ZnNfYWdpbm9fdAlhZ2lubzsKIAl4ZnNfaW5vX3QJaW5vOwogCXhmc19zYl90CSpzYnAgPSAmbXAtPm1fc2I7CiAJeGZzX2lub190CW1heF9pbnVtID0gWEZTX01BWElOVU1CRVJfMzI7CisJaW50CQllcnJvciA9IC1FTk9NRU07CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlIGZpbGVzeXN0ZW0gY2FuIG92ZXJmbG93IDMyIGJpdCBpbm9kZXMgKi8KIAlhZ2lubyA9IFhGU19PRkZCTk9fVE9fQUdJTk8obXAsIHNicC0+c2JfYWdibG9ja3MgLSAxLCAwKTsKIAlpbm8gPSBYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ2NvdW50IC0gMSwgYWdpbm8pOwogCisJLyoKKwkgKiBXYWxrIHRoZSBjdXJyZW50IHBlci1hZyB0cmVlIHNvIHdlIGRvbid0IHRyeSB0byBpbml0aWFsaXNlIEFHcworCSAqIHRoYXQgYWxyZWFkeSBleGlzdCAoZ3Jvd2ZzIGNhc2UpLiBBbGxvY2F0ZSBhbmQgaW5zZXJ0IGFsbCB0aGUKKwkgKiBBR3Mgd2UgZG9uJ3QgZmluZCByZWFkeSBmb3IgaW5pdGlhbGlzYXRpb24uCisJICovCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYWdjb3VudDsgaW5kZXgrKykgeworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBpbmRleCk7CisJCWlmIChwYWcpIHsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghZmlyc3RfaW5pdGlhbGlzZWQpCisJCQlmaXJzdF9pbml0aWFsaXNlZCA9IGluZGV4OworCQlwYWcgPSBrbWVtX3phbGxvYyhzaXplb2YoKnBhZyksIEtNX01BWUZBSUwpOworCQlpZiAoIXBhZykKKwkJCWdvdG8gb3V0X3Vud2luZDsKKwkJaWYgKHJhZGl4X3RyZWVfcHJlbG9hZChHRlBfTk9GUykpCisJCQlnb3RvIG91dF91bndpbmQ7CisJCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJCWlmIChyYWRpeF90cmVlX2luc2VydCgmbXAtPm1fcGVyYWdfdHJlZSwgaW5kZXgsIHBhZykpIHsKKwkJCUJVRygpOworCQkJc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCQkJZXJyb3IgPSAtRUVYSVNUOworCQkJZ290byBvdXRfdW53aW5kOworCQl9CisJCXBhZy0+cGFnX2Fnbm8gPSBpbmRleDsKKwkJcGFnLT5wYWdfbW91bnQgPSBtcDsKKwkJc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCQlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJfQorCiAJLyogQ2xlYXIgdGhlIG1vdW50IGZsYWcgaWYgbm8gaW5vZGUgY2FuIG92ZXJmbG93IDMyIGJpdHMKIAkgKiBvbiB0aGlzIGZpbGVzeXN0ZW0sIG9yIGlmIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuLgogCSAqLwpAQCAtNDM4LDIxICs1MDgsMzMgQEAKIAkJCX0KIAogCQkJLyogVGhpcyBhZyBpcyBwcmVmZXJyZWQgZm9yIGlub2RlcyAqLwotCQkJcGFnID0gJm1wLT5tX3BlcmFnW2luZGV4XTsKKwkJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGluZGV4KTsKIAkJCXBhZy0+cGFnaV9pbm9kZW9rID0gMTsKIAkJCWlmIChpbmRleCA8IG1heF9tZXRhZGF0YSkKIAkJCQlwYWctPnBhZ2ZfbWV0YWRhdGEgPSAxOwogCQkJeGZzX2luaXRpYWxpemVfcGVyYWdfaWNhY2hlKHBhZyk7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBTZXR1cCBkZWZhdWx0IGJlaGF2aW9yIGZvciBzbWFsbGVyIGZpbGVzeXN0ZW1zICovCiAJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFnY291bnQ7IGluZGV4KyspIHsKLQkJCXBhZyA9ICZtcC0+bV9wZXJhZ1tpbmRleF07CisJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBpbmRleCk7CiAJCQlwYWctPnBhZ2lfaW5vZGVvayA9IDE7CiAJCQl4ZnNfaW5pdGlhbGl6ZV9wZXJhZ19pY2FjaGUocGFnKTsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJfQogCX0KLQlyZXR1cm4gaW5kZXg7CisJaWYgKG1heGFnaSkKKwkJKm1heGFnaSA9IGluZGV4OworCXJldHVybiAwOworCitvdXRfdW53aW5kOgorCWttZW1fZnJlZShwYWcpOworCWZvciAoOyBpbmRleCA+IGZpcnN0X2luaXRpYWxpc2VkOyBpbmRleC0tKSB7CisJCXBhZyA9IHJhZGl4X3RyZWVfZGVsZXRlKCZtcC0+bV9wZXJhZ190cmVlLCBpbmRleCk7CisJCWttZW1fZnJlZShwYWcpOworCX0KKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHZvaWQKQEAgLTU4Myw3ICs2NjUsNyBAQAogCSAqIGFjY2VzcyB0byB0aGUgc3VwZXJibG9jay4KIAkgKi8KIAlzZWN0b3Jfc2l6ZSA9IHhmc19nZXRzaXplX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCk7Ci0JZXh0cmFfZmxhZ3MgPSBYRlNfQlVGX0xPQ0sgfCBYRlNfQlVGX01BTkFHRSB8IFhGU19CVUZfTUFQUEVEOworCWV4dHJhX2ZsYWdzID0gWEJGX0xPQ0sgfCBYQkZfRlNfTUFOQUdFRCB8IFhCRl9NQVBQRUQ7CiAKIAlicCA9IHhmc19idWZfcmVhZChtcC0+bV9kZGV2X3RhcmdwLCBYRlNfU0JfREFERFIsIEJUT0JCKHNlY3Rvcl9zaXplKSwKIAkJCSAgZXh0cmFfZmxhZ3MpOwpAQCAtNzMxLDEyICs4MTMsMTMgQEAKIAkJZXJyb3IgPSB4ZnNfaWFsbG9jX3BhZ2lfaW5pdChtcCwgTlVMTCwgaW5kZXgpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7Ci0JCXBhZyA9ICZtcC0+bV9wZXJhZ1tpbmRleF07CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGluZGV4KTsKIAkJaWZyZWUgKz0gcGFnLT5wYWdpX2ZyZWVjb3VudDsKIAkJaWFsbG9jICs9IHBhZy0+cGFnaV9jb3VudDsKIAkJYmZyZWUgKz0gcGFnLT5wYWdmX2ZyZWVibGtzOwogCQliZnJlZWxzdCArPSBwYWctPnBhZ2ZfZmxjb3VudDsKIAkJYnRyZWUgKz0gcGFnLT5wYWdmX2J0cmVlYmxrczsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCX0KIAkvKgogCSAqIE92ZXJ3cml0ZSBpbmNvcmUgc3VwZXJibG9jayBjb3VudGVycyB3aXRoIGp1c3QtcmVhZCBkYXRhCkBAIC0xMDA4LDYgKzEwOTEsMjIgQEAKIAlyZXR1cm4geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiB9CiAKK19fdWludDY0X3QKK3hmc19kZWZhdWx0X3Jlc2Jsa3MoeGZzX21vdW50X3QgKm1wKQoreworCV9fdWludDY0X3QgcmVzYmxrczsKKworCS8qCisJICogV2UgZGVmYXVsdCB0byA1JSBvciAxMDI0IGZzYnMgb2Ygc3BhY2UgcmVzZXJ2ZWQsIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorCSAqIFRoaXMgbWF5IGRyaXZlIHVzIHN0cmFpZ2h0IHRvIEVOT1NQQyBvbiBtb3VudCwgYnV0IHRoYXQgaW1wbGllcworCSAqIHdlIHdlcmUgYWxyZWFkeSB0aGVyZSBvbiB0aGUgbGFzdCB1bm1vdW50LiBXYXJuIGlmIHRoaXMgb2NjdXJzLgorCSAqLworCXJlc2Jsa3MgPSBtcC0+bV9zYi5zYl9kYmxvY2tzOworCWRvX2RpdihyZXNibGtzLCAyMCk7CisJcmVzYmxrcyA9IG1pbl90KF9fdWludDY0X3QsIHJlc2Jsa3MsIDEwMjQpOworCXJldHVybiByZXNibGtzOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dpbmcgb24gYW4gaW5pdGlhbCBtb3VudCBvZiBhIGZpbGUgc3lzdGVtOgogICoJLSByZWFkcyB0aGUgc3VwZXJibG9jayBmcm9tIGRpc2sgYW5kIGluaXQgdGhlIG1vdW50IHN0cnVjdApAQCAtMTE1MiwxMyArMTI1MSwxMyBAQAogCS8qCiAJICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHBlci1hZyBkYXRhLgogCSAqLwotCWluaXRfcndzZW0oJm1wLT5tX3BlcmFnbG9jayk7Ci0JbXAtPm1fcGVyYWcgPSBrbWVtX3phbGxvYyhzYnAtPnNiX2FnY291bnQgKiBzaXplb2YoeGZzX3BlcmFnX3QpLAotCQkJCSAgS01fTUFZRkFJTCk7Ci0JaWYgKCFtcC0+bV9wZXJhZykKKwlzcGluX2xvY2tfaW5pdCgmbXAtPm1fcGVyYWdfbG9jayk7CisJSU5JVF9SQURJWF9UUkVFKCZtcC0+bV9wZXJhZ190cmVlLCBHRlBfTk9GUyk7CisJZXJyb3IgPSB4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhtcCwgc2JwLT5zYl9hZ2NvdW50LCAmbXAtPm1fbWF4YWdpKTsKKwlpZiAoZXJyb3IpIHsKKwkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBGYWlsZWQgcGVyLWFnIGluaXQ6ICVkIiwgZXJyb3IpOwogCQlnb3RvIG91dF9yZW1vdmVfdXVpZDsKLQotCW1wLT5tX21heGFnaSA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBzYnAtPnNiX2FnY291bnQpOworCX0KIAogCWlmICghc2JwLT5zYl9sb2dibG9ja3MpIHsKIAkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBubyBsb2cgZGVmaW5lZCIpOwpAQCAtMTMxOCwxOCArMTQxNywxNCBAQAogCSAqIHdoZW4gYXQgRU5PU1BDLiBUaGlzIGlzIG5lZWRlZCBmb3Igb3BlcmF0aW9ucyBsaWtlIGNyZWF0ZSB3aXRoCiAJICogYXR0ciwgdW53cml0dGVuIGV4dGVudCBjb252ZXJzaW9uIGF0IEVOT1NQQywgZXRjLiBEYXRhIGFsbG9jYXRpb25zCiAJICogYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSB0aGlzIHJlc2VydmVkIHNwYWNlLgotCSAqCi0JICogV2UgZGVmYXVsdCB0byA1JSBvciAxMDI0IGZzYnMgb2Ygc3BhY2UgcmVzZXJ2ZWQsIHdoaWNoZXZlciBpcyBzbWFsbGVyLgotCSAqIFRoaXMgbWF5IGRyaXZlIHVzIHN0cmFpZ2h0IHRvIEVOT1NQQyBvbiBtb3VudCwgYnV0IHRoYXQgaW1wbGllcwotCSAqIHdlIHdlcmUgYWxyZWFkeSB0aGVyZSBvbiB0aGUgbGFzdCB1bm1vdW50LiBXYXJuIGlmIHRoaXMgb2NjdXJzLgogCSAqLwotCXJlc2Jsa3MgPSBtcC0+bV9zYi5zYl9kYmxvY2tzOwotCWRvX2RpdihyZXNibGtzLCAyMCk7Ci0JcmVzYmxrcyA9IG1pbl90KF9fdWludDY0X3QsIHJlc2Jsa3MsIDEwMjQpOwotCWVycm9yID0geGZzX3Jlc2VydmVfYmxvY2tzKG1wLCAmcmVzYmxrcywgTlVMTCk7Ci0JaWYgKGVycm9yKQotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IFVuYWJsZSB0byBhbGxvY2F0ZSByZXNlcnZlIGJsb2Nrcy4gIgotCQkJCSJDb250aW51aW5nIHdpdGhvdXQgYSByZXNlcnZlIHBvb2wuIik7CisJaWYgKCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKSkgeworCQlyZXNibGtzID0geGZzX2RlZmF1bHRfcmVzYmxrcyhtcCk7CisJCWVycm9yID0geGZzX3Jlc2VydmVfYmxvY2tzKG1wLCAmcmVzYmxrcywgTlVMTCk7CisJCWlmIChlcnJvcikKKwkJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogVW5hYmxlIHRvIGFsbG9jYXRlIHJlc2VydmUgIgorCQkJCSJibG9ja3MuIENvbnRpbnVpbmcgd2l0aG91dCBhIHJlc2VydmUgcG9vbC4iKTsKKwl9CiAKIAlyZXR1cm4gMDsKIApAQCAtMTM3Miw4ICsxNDY3LDE5IEBACiAJICogcHVzaCBvdXQgdGhlIGljbG9nIHdlIHdpbGwgbmV2ZXIgZ2V0IHRoYXQgdW5sb2NrZWQuIGhlbmNlIHdlCiAJICogbmVlZCB0byBmb3JjZSB0aGUgbG9nIGZpcnN0LgogCSAqLwotCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQyk7Ci0JeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBYRlNfSUZMVVNIX0FTWU5DKTsKKwl4ZnNfbG9nX2ZvcmNlKG1wLCBYRlNfTE9HX1NZTkMpOworCisJLyoKKwkgKiBEbyBhIGRlbHdyaSByZWNsYWltIHBhc3MgZmlyc3Qgc28gdGhhdCBhcyBtYW55IGRpcnR5IGlub2RlcyBhcmUKKwkgKiBxdWV1ZWQgdXAgZm9yIElPIGFzIHBvc3NpYmxlLiBUaGVuIGZsdXNoIHRoZSBidWZmZXJzIGJlZm9yZSBtYWtpbmcKKwkgKiBhIHN5bmNocm9ub3VzIHBhdGggdG8gY2F0Y2ggYWxsIHRoZSByZW1haW5pbmcgaW5vZGVzIGFyZSByZWNsYWltZWQuCisJICogVGhpcyBtYWtlcyB0aGUgcmVjbGFpbSBwcm9jZXNzIGFzIHF1aWNrIGFzIHBvc3NpYmxlIGJ5IGF2b2lkaW5nCisJICogc3luY2hyb25vdXMgd3JpdGVvdXQgYW5kIGJsb2NraW5nIG9uIGlub2RlcyBhbHJlYWR5IGluIHRoZSBkZWx3cmkKKwkgKiBzdGF0ZSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCSAqLworCXhmc19yZWNsYWltX2lub2RlcyhtcCwgMCk7CisJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKKwl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIFNZTkNfV0FJVCk7CiAKIAl4ZnNfcW1fdW5tb3VudChtcCk7CiAKQEAgLTEzODIsNyArMTQ4OCw3IEBACiAJICogdGhhdCBub3RoaW5nIGlzIHBpbm5lZC4gIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYmZsdXNoKCkKIAkgKiB3aWxsIHNraXAgcGlubmVkIGJ1ZmZlcnMuCiAJICovCi0JeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFIHwgWEZTX0xPR19TWU5DKTsKKwl4ZnNfbG9nX2ZvcmNlKG1wLCBYRlNfTE9HX1NZTkMpOwogCiAJeGZzX2JpbnZhbChtcC0+bV9kZGV2X3RhcmdwKTsKIAlpZiAobXAtPm1fcnRkZXZfdGFyZ3ApIHsKQEAgLTE1NDgsMTUgKzE2NTQsMTQgQEAKIAl4ZnNfc2JfdG9fZGlzayhYRlNfQlVGX1RPX1NCUChicCksICZtcC0+bV9zYiwgZmllbGRzKTsKIAogCS8qIGZpbmQgbW9kaWZpZWQgcmFuZ2UgKi8KKwlmID0gKHhmc19zYl9maWVsZF90KXhmc19oaWdoYml0NjQoKF9fdWludDY0X3QpZmllbGRzKTsKKwlBU1NFUlQoKDFMTCA8PCBmKSAmIFhGU19TQl9NT0RfQklUUyk7CisJbGFzdCA9IHhmc19zYl9pbmZvW2YgKyAxXS5vZmZzZXQgLSAxOwogCiAJZiA9ICh4ZnNfc2JfZmllbGRfdCl4ZnNfbG93Yml0NjQoKF9fdWludDY0X3QpZmllbGRzKTsKIAlBU1NFUlQoKDFMTCA8PCBmKSAmIFhGU19TQl9NT0RfQklUUyk7CiAJZmlyc3QgPSB4ZnNfc2JfaW5mb1tmXS5vZmZzZXQ7CiAKLQlmID0gKHhmc19zYl9maWVsZF90KXhmc19oaWdoYml0NjQoKF9fdWludDY0X3QpZmllbGRzKTsKLQlBU1NFUlQoKDFMTCA8PCBmKSAmIFhGU19TQl9NT0RfQklUUyk7Ci0JbGFzdCA9IHhmc19zYl9pbmZvW2YgKyAxXS5vZmZzZXQgLSAxOwotCiAJeGZzX3RyYW5zX2xvZ19idWYodHAsIGJwLCBmaXJzdCwgbGFzdCk7CiB9CiAKQEAgLTE4ODcsNyArMTk5Miw3IEBACiAKIAlBU1NFUlQobXAtPm1fc2JfYnAgIT0gTlVMTCk7CiAJYnAgPSBtcC0+bV9zYl9icDsKLQlpZiAoZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spIHsKKwlpZiAoZmxhZ3MgJiBYQkZfVFJZTE9DSykgewogCQlpZiAoIVhGU19CVUZfQ1BTRU1BKGJwKSkgewogCQkJcmV0dXJuIE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaAppbmRleCAxZGY3ZTQ1Li43MDUwNGZjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmgKKysrIGIvZnMveGZzL3hmc19tb3VudC5oCkBAIC03OCw3ICs3OCw4IEBACiB0eXBlZGVmIGludAkoKnhmc19zZW5kX25hbWVzcF90KShkbV9ldmVudHR5cGVfdCwgc3RydWN0IHhmc19tb3VudCAqLAogCQkJc3RydWN0IHhmc19pbm9kZSAqLCBkbV9yaWdodF90LAogCQkJc3RydWN0IHhmc19pbm9kZSAqLCBkbV9yaWdodF90LAotCQkJY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIG1vZGVfdCwgaW50LCBpbnQpOworCQkJY29uc3QgdW5zaWduZWQgY2hhciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosCisJCQltb2RlX3QsIGludCwgaW50KTsKIHR5cGVkZWYgaW50CSgqeGZzX3NlbmRfbW91bnRfdCkoc3RydWN0IHhmc19tb3VudCAqLCBkbV9yaWdodF90LAogCQkJY2hhciAqLCBjaGFyICopOwogdHlwZWRlZiB2b2lkCSgqeGZzX3NlbmRfdW5tb3VudF90KShzdHJ1Y3QgeGZzX21vdW50ICosIHN0cnVjdCB4ZnNfaW5vZGUgKiwKQEAgLTIwNyw4ICsyMDgsOCBAQAogCXVpbnQJCQltX2FnX21heGxldmVsczsJLyogWEZTX0FHX01BWExFVkVMUyAqLwogCXVpbnQJCQltX2JtX21heGxldmVsc1syXTsgLyogWEZTX0JNX01BWExFVkVMUyAqLwogCXVpbnQJCQltX2luX21heGxldmVsczsJLyogbWF4IGlub2J0IGJ0cmVlIGxldmVscy4gKi8KLQlzdHJ1Y3QgeGZzX3BlcmFnCSptX3BlcmFnOwkvKiBwZXItYWcgYWNjb3VudGluZyBpbmZvICovCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZQltX3BlcmFnbG9jazsJLyogbG9jayBmb3IgbV9wZXJhZyAocG9pbnRlcikgKi8KKwlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290CW1fcGVyYWdfdHJlZTsJLyogcGVyLWFnIGFjY291bnRpbmcgaW5mbyAqLworCXNwaW5sb2NrX3QJCW1fcGVyYWdfbG9jazsJLyogbG9jayBmb3IgbV9wZXJhZ190cmVlICovCiAJc3RydWN0IG11dGV4CQltX2dyb3dsb2NrOwkvKiBncm93ZnMgbXV0ZXggKi8KIAlpbnQJCQltX2ZpeGVkZnNpZFsyXTsJLyogdW5jaGFuZ2VkIGZvciBsaWZlIG9mIEZTICovCiAJdWludAkJCW1fZG1ldm1hc2s7CS8qIERNSSBldmVudHMgZm9yIHRoaXMgRlMgKi8KQEAgLTIyNCw2ICsyMjUsNyBAQAogCV9fdWludDY0X3QJCW1fbWF4aW9mZnNldDsJLyogbWF4aW11bSBpbm9kZSBvZmZzZXQgKi8KIAlfX3VpbnQ2NF90CQltX3Jlc2Jsa3M7CS8qIHRvdGFsIHJlc2VydmVkIGJsb2NrcyAqLwogCV9fdWludDY0X3QJCW1fcmVzYmxrc19hdmFpbDsvKiBhdmFpbGFibGUgcmVzZXJ2ZWQgYmxvY2tzICovCisJX191aW50NjRfdAkJbV9yZXNibGtzX3NhdmU7CS8qIHJlc2VydmVkIGJsa3MgQCByZW1vdW50LHJvICovCiAJaW50CQkJbV9kYWxpZ247CS8qIHN0cmlwZSB1bml0ICovCiAJaW50CQkJbV9zd2lkdGg7CS8qIHN0cmlwZSB3aWR0aCAqLwogCWludAkJCW1fc2lub2FsaWduOwkvKiBzdHJpcGUgdW5pdCBpbm9kZSBhbGlnbm1lbnQgKi8KQEAgLTM4NCwxOSArMzg2LDEwIEBACiB9CiAKIC8qCi0gKiBwZXJhZyBnZXQvcHV0IHdyYXBwZXJzIGZvciBldmVudHVhbCByZWYgY291bnRpbmcKKyAqIHBlcmFnIGdldC9wdXQgd3JhcHBlcnMgZm9yIHJlZiBjb3VudGluZwogICovCi1zdGF0aWMgaW5saW5lIHhmc19wZXJhZ190ICoKLXhmc19nZXRfcGVyYWcoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19pbm9fdCBpbm8pCi17Ci0JcmV0dXJuICZtcC0+bV9wZXJhZ1tYRlNfSU5PX1RPX0FHTk8obXAsIGlubyldOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXhmc19wdXRfcGVyYWcoc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19wZXJhZ190ICpwYWcpCi17Ci0JLyogbm90aGluZyB0byBzZWUgaGVyZSwgbW92ZSBhbG9uZyAqLwotfQorc3RydWN0IHhmc19wZXJhZyAqeGZzX3BlcmFnX2dldChzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2FnbnVtYmVyX3QgYWdubyk7Cit2b2lkCXhmc19wZXJhZ19wdXQoc3RydWN0IHhmc19wZXJhZyAqcGFnKTsKIAogLyoKICAqIFBlci1jcHUgc3VwZXJibG9jayBsb2NraW5nIGZ1bmN0aW9ucwpAQCAtNDI4LDYgKzQyMSw3IEBACiB9IHhmc19tb2Rfc2JfdDsKIAogZXh0ZXJuIGludAl4ZnNfbG9nX3NiY291bnQoeGZzX21vdW50X3QgKiwgdWludCk7CitleHRlcm4gX191aW50NjRfdCB4ZnNfZGVmYXVsdF9yZXNibGtzKHhmc19tb3VudF90ICptcCk7CiBleHRlcm4gaW50CXhmc19tb3VudGZzKHhmc19tb3VudF90ICptcCk7CiAKIGV4dGVybiB2b2lkCXhmc191bm1vdW50ZnMoeGZzX21vdW50X3QgKik7CkBAIC00NTAsNyArNDQ0LDggQEAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKIGV4dGVybiB2b2lkCXhmc19tb2Rfc2Ioc3RydWN0IHhmc190cmFucyAqLCBfX2ludDY0X3QpOwotZXh0ZXJuIHhmc19hZ251bWJlcl90CXhmc19pbml0aWFsaXplX3BlcmFnKHN0cnVjdCB4ZnNfbW91bnQgKiwgeGZzX2FnbnVtYmVyX3QpOworZXh0ZXJuIGludAl4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhzdHJ1Y3QgeGZzX21vdW50ICosIHhmc19hZ251bWJlcl90LAorCQkJCQl4ZnNfYWdudW1iZXJfdCAqKTsKIGV4dGVybiB2b2lkCXhmc19zYl9mcm9tX2Rpc2soc3RydWN0IHhmc19zYiAqLCBzdHJ1Y3QgeGZzX2RzYiAqKTsKIGV4dGVybiB2b2lkCXhmc19zYl90b19kaXNrKHN0cnVjdCB4ZnNfZHNiICosIHN0cnVjdCB4ZnNfc2IgKiwgX19pbnQ2NF90KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tcnVfY2FjaGUuYyBiL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmMKaW5kZXggNGIwNjEzZC4uNDVjZTE1ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tcnVfY2FjaGUuYworKysgYi9mcy94ZnMveGZzX21ydV9jYWNoZS5jCkBAIC0zOTgsNyArMzk4LDcgQEAKICAqIGd1YXJhbnRlZWQgdGhhdCBhbGwgdGhlIGZyZWUgZnVuY3Rpb25zIGZvciBhbGwgdGhlIGVsZW1lbnRzIGhhdmUgZmluaXNoZWQKICAqIGV4ZWN1dGluZyBhbmQgdGhlIHJlYXBlciBpcyBub3QgcnVubmluZy4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIHhmc19tcnVfY2FjaGVfZmx1c2goCiAJeGZzX21ydV9jYWNoZV90CQkqbXJ1KQogewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tcnVfY2FjaGUuaCBiL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmgKaW5kZXggNWQ0MzlmMy4uMzZkZDNlYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tcnVfY2FjaGUuaAorKysgYi9mcy94ZnMveGZzX21ydV9jYWNoZS5oCkBAIC00Miw3ICs0Miw2IEBACiBpbnQgeGZzX21ydV9jYWNoZV9jcmVhdGUoc3RydWN0IHhmc19tcnVfY2FjaGUgKiptcnVwLCB1bnNpZ25lZCBpbnQgbGlmZXRpbWVfbXMsCiAJCQkgICAgIHVuc2lnbmVkIGludCBncnBfY291bnQsCiAJCQkgICAgIHhmc19tcnVfY2FjaGVfZnJlZV9mdW5jX3QgZnJlZV9mdW5jKTsKLXZvaWQgeGZzX21ydV9jYWNoZV9mbHVzaCh4ZnNfbXJ1X2NhY2hlX3QgKm1ydSk7CiB2b2lkIHhmc19tcnVfY2FjaGVfZGVzdHJveShzdHJ1Y3QgeGZzX21ydV9jYWNoZSAqbXJ1KTsKIGludCB4ZnNfbXJ1X2NhY2hlX2luc2VydChzdHJ1Y3QgeGZzX21ydV9jYWNoZSAqbXJ1LCB1bnNpZ25lZCBsb25nIGtleSwKIAkJCQl2b2lkICp2YWx1ZSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3F1b3RhLmggYi9mcy94ZnMveGZzX3F1b3RhLmgKaW5kZXggOTFiZmQ2MC4uZmRjYWIzZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xdW90YS5oCisrKyBiL2ZzL3hmcy94ZnNfcXVvdGEuaApAQCAtMjIzLDE2ICsyMjMsOSBAQAogI2RlZmluZSBYRlNfUU1PUFRfUkVTX0lOT1MJMHgwODAwMDAwCiAKIC8qCi0gKiBmbGFncyBmb3IgZHFmbHVzaCBhbmQgZHFmbHVzaF9hbGwuCi0gKi8KLSNkZWZpbmUgWEZTX1FNT1BUX1NZTkMJCTB4MTAwMDAwMAotI2RlZmluZSBYRlNfUU1PUFRfQVNZTkMJCTB4MjAwMDAwMAotI2RlZmluZSBYRlNfUU1PUFRfREVMV1JJCTB4NDAwMDAwMAotCi0vKgogICogZmxhZ3MgZm9yIGRxYWxsb2MuCiAgKi8KLSNkZWZpbmUgWEZTX1FNT1BUX0lOSEVSSVQJMHg4MDAwMDAwCisjZGVmaW5lIFhGU19RTU9QVF9JTkhFUklUCTB4MTAwMDAwMAogCiAvKgogICogZmxhZ3MgdG8geGZzX3RyYW5zX21vZF9kcXVvdC4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcncuYyBiL2ZzL3hmcy94ZnNfcncuYwppbmRleCA1YWEwN2NhLi5lMzM2NzQyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J3LmMKKysrIGIvZnMveGZzL3hmc19ydy5jCkBAIC00Nyw0OCArNDcsNiBAQAogI2luY2x1ZGUgInhmc190cmFjZS5oIgogCiAvKgotICogVGhpcyBpcyBhIHN1YnJvdXRpbmUgZm9yIHhmc193cml0ZSgpIGFuZCBvdGhlciB3cml0ZXJzICh4ZnNfaW9jdGwpCi0gKiB3aGljaCBjbGVhcnMgdGhlIHNldHVpZCBhbmQgc2V0Z2lkIGJpdHMgd2hlbiBhIGZpbGUgaXMgd3JpdHRlbi4KLSAqLwotaW50Ci14ZnNfd3JpdGVfY2xlYXJfc2V0dWlkKAotCXhmc19pbm9kZV90CSppcCkKLXsKLQl4ZnNfbW91bnRfdAkqbXA7Ci0JeGZzX3RyYW5zX3QJKnRwOwotCWludAkJZXJyb3I7Ci0KLQltcCA9IGlwLT5pX21vdW50OwotCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfV1JJVEVJRCk7Ci0JaWYgKChlcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLAotCQkJCSAgICAgIFhGU19XUklURUlEX0xPR19SRVMobXApLAotCQkJCSAgICAgIDAsIDAsIDApKSkgewotCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7Ci0JaXAtPmlfZC5kaV9tb2RlICY9IH5TX0lTVUlEOwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBtYW5kYXRvcnkKLQkgKiBmaWxlIGxvY2tpbmcgYmVpbmcgZGlzYWJsZWQgaGVyZSBiZWNhdXNlIHdlIG9ubHkKLQkgKiBjbGVhciB0aGUgU19JU0dJRCBiaXQgaWYgdGhlIEdyb3VwIGV4ZWN1dGUgYml0IGlzCi0JICogb24sIGJ1dCBpZiBpdCB3YXMgb24gdGhlbiBtYW5kYXRvcnkgbG9ja2luZyB3b3VsZG4ndAotCSAqIGhhdmUgYmVlbiBlbmFibGVkLgotCSAqLwotCWlmIChpcC0+aV9kLmRpX21vZGUgJiBTX0lYR1JQKSB7Ci0JCWlwLT5pX2QuZGlfbW9kZSAmPSB+U19JU0dJRDsKLQl9Ci0JeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwotCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKLQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXJldHVybiAwOwotfQotCi0vKgogICogRm9yY2UgYSBzaHV0ZG93biBvZiB0aGUgZmlsZXN5c3RlbSBpbnN0YW50bHkgd2hpbGUga2VlcGluZwogICogdGhlIGZpbGVzeXN0ZW0gY29uc2lzdGVudC4gV2UgZG9uJ3QgZG8gYW4gdW5tb3VudCBoZXJlOyBqdXN0IHNodXRkb3duCiAgKiB0aGUgc2hvcCwgbWFrZSBzdXJlIHRoYXQgYWJzb2x1dGVseSBub3RoaW5nIHBlcnNpc3RlbnQgaGFwcGVucyB0bwpAQCAtMTUzLDg4ICsxMTEsNiBAQAogCX0KIH0KIAotCi0vKgotICogQ2FsbGVkIHdoZW4gd2Ugd2FudCB0byBzdG9wIGEgYnVmZmVyIGZyb20gZ2V0dGluZyB3cml0dGVuIG9yIHJlYWQuCi0gKiBXZSBhdHRhY2ggdGhlIEVJTyBlcnJvciwgbXVjayB3aXRoIGl0cyBmbGFncywgYW5kIGNhbGwgYmlvZG9uZQotICogc28gdGhhdCB0aGUgcHJvcGVyIGlvZG9uZSBjYWxsYmFja3MgZ2V0IGNhbGxlZC4KLSAqLwotaW50Ci14ZnNfYmlvZXJyb3IoCi0JeGZzX2J1Zl90ICpicCkKLXsKLQotI2lmZGVmIFhGU0VSUk9SREVCVUcKLQlBU1NFUlQoWEZTX0JVRl9JU1JFQUQoYnApIHx8IGJwLT5iX2lvZG9uZSk7Ci0jZW5kaWYKLQotCS8qCi0JICogTm8gbmVlZCB0byB3YWl0IHVudGlsIHRoZSBidWZmZXIgaXMgdW5waW5uZWQuCi0JICogV2UgYXJlbid0IGZsdXNoaW5nIGl0LgotCSAqLwotCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7Ci0JLyoKLQkgKiBXZSdyZSBjYWxsaW5nIGJpb2RvbmUsIHNvIGRlbGV0ZSBCX0RPTkUgZmxhZy4gRWl0aGVyIHdheQotCSAqIHdlIGhhdmUgdG8gY2FsbCB0aGUgaW9kb25lIGNhbGxiYWNrLCBhbmQgY2FsbGluZyBiaW9kb25lCi0JICogcHJvYmFibHkgaXMgdGhlIGJlc3Qgd2F5IHNpbmNlIGl0IHRha2VzIGNhcmUgb2YKLQkgKiBHUklPIGFzIHdlbGwuCi0JICovCi0JWEZTX0JVRl9VTlJFQUQoYnApOwotCVhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKTsKLQlYRlNfQlVGX1VORE9ORShicCk7Ci0JWEZTX0JVRl9TVEFMRShicCk7Ci0KLQlYRlNfQlVGX0NMUl9CRFNUUkFUX0ZVTkMoYnApOwotCXhmc19iaW9kb25lKGJwKTsKLQotCXJldHVybiAoRUlPKTsKLX0KLQotLyoKLSAqIFNhbWUgYXMgeGZzX2Jpb2Vycm9yLCBleGNlcHQgdGhhdCB3ZSBhcmUgcmVsZWFzaW5nIHRoZSBidWZmZXIKLSAqIGhlcmUgb3Vyc2VsdmVzLCBhbmQgYXZvaWRpbmcgdGhlIGJpb2RvbmUgY2FsbC4KLSAqIFRoaXMgaXMgbWVhbnQgZm9yIHVzZXJkYXRhIGVycm9yczsgbWV0YWRhdGEgYnVmcyBjb21lIHdpdGgKLSAqIGlvZG9uZSBmdW5jdGlvbnMgYXR0YWNoZWQsIHNvIHRoYXQgd2UgY2FuIHRyYWNrIGRvd24gZXJyb3JzLgotICovCi1pbnQKLXhmc19iaW9lcnJvcl9yZWxzZSgKLQl4ZnNfYnVmX3QgKmJwKQotewotCWludDY0X3QgZmw7Ci0KLQlBU1NFUlQoWEZTX0JVRl9JT0RPTkVfRlVOQyhicCkgIT0geGZzX2J1Zl9pb2RvbmVfY2FsbGJhY2tzKTsKLQlBU1NFUlQoWEZTX0JVRl9JT0RPTkVfRlVOQyhicCkgIT0geGxvZ19pb2RvbmUpOwotCi0JZmwgPSBYRlNfQlVGX0JGTEFHUyhicCk7Ci0JLyoKLQkgKiBObyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZC4KLQkgKiBXZSBhcmVuJ3QgZmx1c2hpbmcgaXQuCi0JICoKLQkgKiBjaHVua2hvbGQgZXhwZWN0cyBCX0RPTkUgdG8gYmUgc2V0LCB3aGV0aGVyCi0JICogd2UgYWN0dWFsbHkgZmluaXNoIHRoZSBJL08gb3Igbm90LiBXZSBkb24ndCB3YW50IHRvCi0JICogY2hhbmdlIHRoYXQgaW50ZXJmYWNlLgotCSAqLwotCVhGU19CVUZfVU5SRUFEKGJwKTsKLQlYRlNfQlVGX1VOREVMQVlXUklURShicCk7Ci0JWEZTX0JVRl9ET05FKGJwKTsKLQlYRlNfQlVGX1NUQUxFKGJwKTsKLQlYRlNfQlVGX0NMUl9JT0RPTkVfRlVOQyhicCk7Ci0JWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKLQlpZiAoIShmbCAmIFhGU19CX0FTWU5DKSkgewotCQkvKgotCQkgKiBNYXJrIGJfZXJyb3IgYW5kIEJfRVJST1IgX2JvdGhfLgotCQkgKiBMb3QncyBvZiBjaHVua2NhY2hlIGNvZGUgYXNzdW1lcyB0aGF0LgotCQkgKiBUaGVyZSdzIG5vIHJlYXNvbiB0byBtYXJrIGVycm9yIGZvcgotCQkgKiBBU1lOQyBidWZmZXJzLgotCQkgKi8KLQkJWEZTX0JVRl9FUlJPUihicCwgRUlPKTsKLQkJWEZTX0JVRl9GSU5JU0hfSU9XQUlUKGJwKTsKLQl9IGVsc2UgewotCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQl9Ci0JcmV0dXJuIChFSU8pOwotfQotCiAvKgogICogUHJpbnRzIG91dCBhbiBBTEVSVCBtZXNzYWdlIGFib3V0IEkvTyBlcnJvci4KICAqLwpAQCAtMzA2LDM3ICsxODIsNiBAQAogfQogCiAvKgotICogV3JhcHBlciBhcm91bmQgYndyaXRlKCkgc28gdGhhdCB3ZSBjYW4gdHJhcAotICogd3JpdGUgZXJyb3JzLCBhbmQgYWN0IGFjY29yZGluZ2x5LgotICovCi1pbnQKLXhmc19id3JpdGUoCi0Jc3RydWN0IHhmc19tb3VudCAqbXAsCi0Jc3RydWN0IHhmc19idWYJICpicCkKLXsKLQlpbnQJZXJyb3I7Ci0KLQkvKgotCSAqIFhYWHN1cCBob3cgZG9lcyB0aGlzIHdvcmsgZm9yIHF1b3Rhcy4KLQkgKi8KLQlYRlNfQlVGX1NFVF9CRFNUUkFUX0ZVTkMoYnAsIHhmc19iZHN0cmF0X2NiKTsKLQlicC0+Yl9tb3VudCA9IG1wOwotCVhGU19CVUZfV1JJVEUoYnApOwotCi0JaWYgKChlcnJvciA9IFhGU19id3JpdGUoYnApKSkgewotCQlBU1NFUlQobXApOwotCQkvKgotCQkgKiBDYW5ub3QgcHV0IGEgYnVmdHJhY2UgaGVyZSBzaW5jZSBpZiB0aGUgYnVmZmVyIGlzIG5vdAotCQkgKiBCX0hPTEQgdGhlbiB3ZSB3aWxsIGJyZWxzZSgpIHRoZSBidWZmZXIgYmVmb3JlIHJldHVybmluZwotCQkgKiBmcm9tIGJ3cml0ZSBhbmQgd2UgY291bGQgYmUgdHJhY2luZyBhIGJ1ZmZlciB0aGF0IGhhcwotCQkgKiBiZWVuIHJldXNlZC4KLQkJICovCi0JCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fTUVUQV9JT19FUlJPUik7Ci0JfQotCXJldHVybiAoZXJyb3IpOwotfQotCi0vKgogICogaGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgZXh0ZW50IHNpemUgaGludCBmcm9tIGlub2RlCiAgKi8KIHhmc19leHRsZW5fdApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydy5oIGIvZnMveGZzL3hmc19ydy5oCmluZGV4IDU3MWYyMTcuLjExYzQxZWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcncuaAorKysgYi9mcy94ZnMveGZzX3J3LmgKQEAgLTM5LDEwICszOSw2IEBACiAvKgogICogUHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIHhmc19ydy5jLgogICovCi1leHRlcm4gaW50IHhmc193cml0ZV9jbGVhcl9zZXR1aWQoc3RydWN0IHhmc19pbm9kZSAqaXApOwotZXh0ZXJuIGludCB4ZnNfYndyaXRlKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX2J1ZiAqYnApOwotZXh0ZXJuIGludCB4ZnNfYmlvZXJyb3Ioc3RydWN0IHhmc19idWYgKmJwKTsKLWV4dGVybiBpbnQgeGZzX2Jpb2Vycm9yX3JlbHNlKHN0cnVjdCB4ZnNfYnVmICpicCk7CiBleHRlcm4gaW50IHhmc19yZWFkX2J1ZihzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2J1ZnRhcmdfdCAqYnRwLAogCQkJeGZzX2RhZGRyX3QgYmxrbm8sIGludCBsZW4sIHVpbnQgZmxhZ3MsCiAJCQlzdHJ1Y3QgeGZzX2J1ZiAqKmJwcCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmMgYi9mcy94ZnMveGZzX3RyYW5zLmMKaW5kZXggMjM3YmFkYy4uYmU5NDJkNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwpAQCAtOTgxLDkgKzk4MSw4IEBACiAJICovCiAJaWYgKHN5bmMpIHsKIAkJaWYgKCFlcnJvcikgewotCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgY29tbWl0X2xzbiwKLQkJCQkgICAgICBYRlNfTE9HX0ZPUkNFIHwgWEZTX0xPR19TWU5DLAotCQkJCSAgICAgIGxvZ19mbHVzaGVkKTsKKwkJCWVycm9yID0gX3hmc19sb2dfZm9yY2VfbHNuKG1wLCBjb21taXRfbHNuLAorCQkJCSAgICAgIFhGU19MT0dfU1lOQywgbG9nX2ZsdXNoZWQpOwogCQl9CiAJCVhGU19TVEFUU19JTkMoeHNfdHJhbnNfc3luYyk7CiAJfSBlbHNlIHsKQEAgLTExMjEsNyArMTEyMCw3IEBACiAJdHAtPnRfaGVhZGVyLnRoX251bV9pdGVtcyA9IG5pdGVtczsKIAlsb2dfdmVjdG9yLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJnRwLT50X2hlYWRlcjsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemVvZih4ZnNfdHJhbnNfaGVhZGVyX3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfVFJBTlNIRFIpOworCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfVFJBTlNIRFI7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5oIGIvZnMveGZzL3hmc190cmFucy5oCmluZGV4IGNhNjRmMzMuLmM5M2UzYTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zLmgKQEAgLTg2MSw4ICs4NjEsNyBAQAogI2RlZmluZQlYRlNfSVRFTV9TVUNDRVNTCTAKICNkZWZpbmUJWEZTX0lURU1fUElOTkVECQkxCiAjZGVmaW5lCVhGU19JVEVNX0xPQ0tFRAkJMgotI2RlZmluZQlYRlNfSVRFTV9GTFVTSElORwkzCi0jZGVmaW5lIFhGU19JVEVNX1BVU0hCVUYJNAorI2RlZmluZSBYRlNfSVRFTV9QVVNIQlVGCTMKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGJsb2NrIHJhbmdlcyB0aGF0IGhhdmUgYmVlbgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19haWwuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKaW5kZXggMmZmYzU3MC4uZTc5OTgyNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19haWwuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCkBAIC0yMzcsMTQgKzIzNywxNSBAQAogfQogCiAvKgotICogRnVuY3Rpb24gdGhhdCBkb2VzIHRoZSB3b3JrIG9mIHB1c2hpbmcgb24gdGhlIEFJTAorICogeGZzYWlsZF9wdXNoIGRvZXMgdGhlIHdvcmsgb2YgcHVzaGluZyBvbiB0aGUgQUlMLiAgUmV0dXJuaW5nIGEgdGltZW91dCBvZgorICogemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBzbGVlcCB1bnRpbCB3b2tlbi4KICAqLwogbG9uZwogeGZzYWlsZF9wdXNoKAogCXN0cnVjdCB4ZnNfYWlsCSphaWxwLAogCXhmc19sc25fdAkqbGFzdF9sc24pCiB7Ci0JbG9uZwkJdG91dCA9IDEwMDA7IC8qIG1pbGxpc2Vjb25kcyAqLworCWxvbmcJCXRvdXQgPSAwOwogCXhmc19sc25fdAlsYXN0X3B1c2hlZF9sc24gPSAqbGFzdF9sc247CiAJeGZzX2xzbl90CXRhcmdldCA9ICBhaWxwLT54YV90YXJnZXQ7CiAJeGZzX2xzbl90CWxzbjsKQEAgLTI1Miw2ICsyNTMsNyBAQAogCWludAkJZmx1c2hfbG9nLCBjb3VudCwgc3R1Y2s7CiAJeGZzX21vdW50X3QJKm1wID0gYWlscC0+eGFfbW91bnQ7CiAJc3RydWN0IHhmc19haWxfY3Vyc29yCSpjdXIgPSAmYWlscC0+eGFfY3Vyc29yczsKKwlpbnQJCXB1c2hfeGZzYnVmZCA9IDA7CiAKIAlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOwogCXhmc190cmFuc19haWxfY3Vyc29yX2luaXQoYWlscCwgY3VyKTsKQEAgLTI2Miw3ICsyNjQsNyBAQAogCQkgKi8KIAkJeGZzX3RyYW5zX2FpbF9jdXJzb3JfZG9uZShhaWxwLCBjdXIpOwogCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7Ci0JCWxhc3RfcHVzaGVkX2xzbiA9IDA7CisJCSpsYXN0X2xzbiA9IDA7CiAJCXJldHVybiB0b3V0OwogCX0KIApAQCAtMjc5LDcgKzI4MSw2IEBACiAJICogcHJldmVudHMgdXNlIGZyb20gc3Bpbm5pbmcgd2hlbiB3ZSBjYW4ndCBkbyBhbnl0aGluZyBvciB0aGVyZSBpcwogCSAqIGxvdHMgb2YgY29udGVudGlvbiBvbiB0aGUgQUlMIGxpc3RzLgogCSAqLwotCXRvdXQgPSAxMDsKIAlsc24gPSBsaXAtPmxpX2xzbjsKIAlmbHVzaF9sb2cgPSBzdHVjayA9IGNvdW50ID0gMDsKIAl3aGlsZSAoKFhGU19MU05fQ01QKGxpcC0+bGlfbHNuLCB0YXJnZXQpIDwgMCkpIHsKQEAgLTMwOCw2ICszMDksNyBAQAogCQkJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbF9wdXNoYnVmKTsKIAkJCUlPUF9QVVNIQlVGKGxpcCk7CiAJCQlsYXN0X3B1c2hlZF9sc24gPSBsc247CisJCQlwdXNoX3hmc2J1ZmQgPSAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBYRlNfSVRFTV9QSU5ORUQ6CkBAIC0zMjIsMTIgKzMyNCw2IEBACiAJCQlzdHVjaysrOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBYRlNfSVRFTV9GTFVTSElORzoKLQkJCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWxfZmx1c2hpbmcpOwotCQkJbGFzdF9wdXNoZWRfbHNuID0gbHNuOwotCQkJc3R1Y2srKzsKLQkJCWJyZWFrOwotCiAJCWRlZmF1bHQ6CiAJCQlBU1NFUlQoMCk7CiAJCQlicmVhazsKQEAgLTM3MSwxOSArMzY3LDI0IEBACiAJCSAqIG1vdmUgZm9yd2FyZCBpbiB0aGUgQUlMLgogCQkgKi8KIAkJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbF9mbHVzaCk7Ci0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJCXhmc19sb2dfZm9yY2UobXAsIDApOworCX0KKworCWlmIChwdXNoX3hmc2J1ZmQpIHsKKwkJLyogd2UndmUgZ290IGRlbGF5ZWQgd3JpdGUgYnVmZmVycyB0byBmbHVzaCAqLworCQl3YWtlX3VwX3Byb2Nlc3MobXAtPm1fZGRldl90YXJncC0+YnRfdGFzayk7CiAJfQogCiAJaWYgKCFjb3VudCkgewogCQkvKiBXZSdyZSBwYXN0IG91ciB0YXJnZXQgb3IgZW1wdHksIHNvIGlkbGUgKi8KLQkJdG91dCA9IDEwMDA7CisJCWxhc3RfcHVzaGVkX2xzbiA9IDA7CiAJfSBlbHNlIGlmIChYRlNfTFNOX0NNUChsc24sIHRhcmdldCkgPj0gMCkgewogCQkvKgogCQkgKiBXZSByZWFjaGVkIHRoZSB0YXJnZXQgc28gd2FpdCBhIGJpdCBsb25nZXIgZm9yIEkvTyB0bwogCQkgKiBjb21wbGV0ZSBhbmQgcmVtb3ZlIHB1c2hlZCBpdGVtcyBmcm9tIHRoZSBBSUwgYmVmb3JlIHdlCiAJCSAqIHN0YXJ0IHRoZSBuZXh0IHNjYW4gZnJvbSB0aGUgc3RhcnQgb2YgdGhlIEFJTC4KIAkJICovCi0JCXRvdXQgKz0gMjA7CisJCXRvdXQgPSA1MDsKIAkJbGFzdF9wdXNoZWRfbHNuID0gMDsKIAl9IGVsc2UgaWYgKChzdHVjayAqIDEwMCkgLyBjb3VudCA+IDkwKSB7CiAJCS8qCkBAIC0zOTUsMTEgKzM5NiwxNCBAQAogCQkgKiBCYWNrb2ZmIGEgYml0IG1vcmUgdG8gYWxsb3cgc29tZSBJL08gdG8gY29tcGxldGUgYmVmb3JlCiAJCSAqIGNvbnRpbnVpbmcgZnJvbSB3aGVyZSB3ZSB3ZXJlLgogCQkgKi8KLQkJdG91dCArPSAxMDsKKwkJdG91dCA9IDIwOworCX0gZWxzZSB7CisJCS8qIG1vcmUgdG8gZG8sIGJ1dCB3YWl0IGEgc2hvcnQgd2hpbGUgYmVmb3JlIGNvbnRpbnVpbmcgKi8KKwkJdG91dCA9IDEwOwogCX0KIAkqbGFzdF9sc24gPSBsYXN0X3B1c2hlZF9sc247CiAJcmV0dXJuIHRvdXQ7Ci19CS8qIHhmc2FpbGRfcHVzaCAqLworfQogCiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jIGIvZnMveGZzL3hmc190cmFuc19idWYuYwppbmRleCA0OTEzMDYyLi41ZmZkNTQ0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKQEAgLTc1LDEzICs3NSwxNCBAQAogCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwOwogCiAJaWYgKGZsYWdzID09IDApCi0JCWZsYWdzID0gWEZTX0JVRl9MT0NLIHwgWEZTX0JVRl9NQVBQRUQ7CisJCWZsYWdzID0gWEJGX0xPQ0sgfCBYQkZfTUFQUEVEOwogCiAJLyoKIAkgKiBEZWZhdWx0IHRvIGEgbm9ybWFsIGdldF9idWYoKSBjYWxsIGlmIHRoZSB0cCBpcyBOVUxMLgogCSAqLwogCWlmICh0cCA9PSBOVUxMKQotCQlyZXR1cm4geGZzX2J1Zl9nZXQodGFyZ2V0X2RldiwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBCVUZfQlVTWSk7CisJCXJldHVybiB4ZnNfYnVmX2dldCh0YXJnZXRfZGV2LCBibGtubywgbGVuLAorCQkJCSAgIGZsYWdzIHwgWEJGX0RPTlRfQkxPQ0spOwogCiAJLyoKIAkgKiBJZiB3ZSBmaW5kIHRoZSBidWZmZXIgaW4gdGhlIGNhY2hlIHdpdGggdGhpcyB0cmFuc2FjdGlvbgpAQCAtMTE3LDE0ICsxMTgsMTQgQEAKIAl9CiAKIAkvKgotCSAqIFdlIGFsd2F5cyBzcGVjaWZ5IHRoZSBCVUZfQlVTWSBmbGFnIHdpdGhpbiBhIHRyYW5zYWN0aW9uIHNvCi0JICogdGhhdCBnZXRfYnVmIGRvZXMgbm90IHRyeSB0byBwdXNoIG91dCBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyCisJICogV2UgYWx3YXlzIHNwZWNpZnkgdGhlIFhCRl9ET05UX0JMT0NLIGZsYWcgd2l0aGluIGEgdHJhbnNhY3Rpb24KKwkgKiBzbyB0aGF0IGdldF9idWYgZG9lcyBub3QgdHJ5IHRvIHB1c2ggb3V0IGEgZGVsYXllZCB3cml0ZSBidWZmZXIKIAkgKiB3aGljaCBtaWdodCBjYXVzZSBhbm90aGVyIHRyYW5zYWN0aW9uIHRvIHRha2UgcGxhY2UgKGlmIHRoZQogCSAqIGJ1ZmZlciB3YXMgZGVsYXllZCBhbGxvYykuICBTdWNoIHJlY3Vyc2l2ZSB0cmFuc2FjdGlvbnMgY2FuCiAJICogZWFzaWx5IGRlYWRsb2NrIHdpdGggb3VyIGN1cnJlbnQgdHJhbnNhY3Rpb24gYXMgd2VsbCBhcyBjYXVzZQogCSAqIHVzIHRvIHJ1biBvdXQgb2Ygc3RhY2sgc3BhY2UuCiAJICovCi0JYnAgPSB4ZnNfYnVmX2dldCh0YXJnZXRfZGV2LCBibGtubywgbGVuLCBmbGFncyB8IEJVRl9CVVNZKTsKKwlicCA9IHhmc19idWZfZ2V0KHRhcmdldF9kZXYsIGJsa25vLCBsZW4sIGZsYWdzIHwgWEJGX0RPTlRfQkxPQ0spOwogCWlmIChicCA9PSBOVUxMKSB7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTI5MCwxNSArMjkxLDE1IEBACiAJaW50CQkJZXJyb3I7CiAKIAlpZiAoZmxhZ3MgPT0gMCkKLQkJZmxhZ3MgPSBYRlNfQlVGX0xPQ0sgfCBYRlNfQlVGX01BUFBFRDsKKwkJZmxhZ3MgPSBYQkZfTE9DSyB8IFhCRl9NQVBQRUQ7CiAKIAkvKgogCSAqIERlZmF1bHQgdG8gYSBub3JtYWwgZ2V0X2J1ZigpIGNhbGwgaWYgdGhlIHRwIGlzIE5VTEwuCiAJICovCiAJaWYgKHRwID09IE5VTEwpIHsKLQkJYnAgPSB4ZnNfYnVmX3JlYWQodGFyZ2V0LCBibGtubywgbGVuLCBmbGFncyB8IEJVRl9CVVNZKTsKKwkJYnAgPSB4ZnNfYnVmX3JlYWQodGFyZ2V0LCBibGtubywgbGVuLCBmbGFncyB8IFhCRl9ET05UX0JMT0NLKTsKIAkJaWYgKCFicCkKLQkJCXJldHVybiAoZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spID8KKwkJCXJldHVybiAoZmxhZ3MgJiBYQkZfVFJZTE9DSykgPwogCQkJCQlFQUdBSU4gOiBYRlNfRVJST1IoRU5PTUVNKTsKIAogCQlpZiAoWEZTX0JVRl9HRVRFUlJPUihicCkgIT0gMCkgewpAQCAtMzg1LDE0ICszODYsMTQgQEAKIAl9CiAKIAkvKgotCSAqIFdlIGFsd2F5cyBzcGVjaWZ5IHRoZSBCVUZfQlVTWSBmbGFnIHdpdGhpbiBhIHRyYW5zYWN0aW9uIHNvCi0JICogdGhhdCBnZXRfYnVmIGRvZXMgbm90IHRyeSB0byBwdXNoIG91dCBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyCisJICogV2UgYWx3YXlzIHNwZWNpZnkgdGhlIFhCRl9ET05UX0JMT0NLIGZsYWcgd2l0aGluIGEgdHJhbnNhY3Rpb24KKwkgKiBzbyB0aGF0IGdldF9idWYgZG9lcyBub3QgdHJ5IHRvIHB1c2ggb3V0IGEgZGVsYXllZCB3cml0ZSBidWZmZXIKIAkgKiB3aGljaCBtaWdodCBjYXVzZSBhbm90aGVyIHRyYW5zYWN0aW9uIHRvIHRha2UgcGxhY2UgKGlmIHRoZQogCSAqIGJ1ZmZlciB3YXMgZGVsYXllZCBhbGxvYykuICBTdWNoIHJlY3Vyc2l2ZSB0cmFuc2FjdGlvbnMgY2FuCiAJICogZWFzaWx5IGRlYWRsb2NrIHdpdGggb3VyIGN1cnJlbnQgdHJhbnNhY3Rpb24gYXMgd2VsbCBhcyBjYXVzZQogCSAqIHVzIHRvIHJ1biBvdXQgb2Ygc3RhY2sgc3BhY2UuCiAJICovCi0JYnAgPSB4ZnNfYnVmX3JlYWQodGFyZ2V0LCBibGtubywgbGVuLCBmbGFncyB8IEJVRl9CVVNZKTsKKwlicCA9IHhmc19idWZfcmVhZCh0YXJnZXQsIGJsa25vLCBsZW4sIGZsYWdzIHwgWEJGX0RPTlRfQkxPQ0spOwogCWlmIChicCA9PSBOVUxMKSB7CiAJCSpicHAgPSBOVUxMOwogCQlyZXR1cm4gMDsKQEAgLTQ3Miw4ICs0NzMsOCBAQAogCWlmIChYRlNfQlVGX0lTU1RBTEUoYnApICYmIFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkKIAkJY21uX2VycihDRV9OT1RFLCAiYWJvdXQgdG8gcG9wIGFzc2VydCwgYnAgPT0gMHglcCIsIGJwKTsKICNlbmRpZgotCUFTU0VSVCgoWEZTX0JVRl9CRkxBR1MoYnApICYgKFhGU19CX1NUQUxFfFhGU19CX0RFTFdSSSkpICE9Ci0JCQkJCQkoWEZTX0JfU1RBTEV8WEZTX0JfREVMV1JJKSk7CisJQVNTRVJUKChYRlNfQlVGX0JGTEFHUyhicCkgJiAoWEJGX1NUQUxFfFhCRl9ERUxXUkkpKSAhPQorCQkJCSAgICAgKFhCRl9TVEFMRXxYQkZfREVMV1JJKSk7CiAKIAl0cmFjZV94ZnNfdHJhbnNfcmVhZF9idWZfc2h1dChicCwgX1JFVF9JUF8pOwogCXhmc19idWZfcmVsc2UoYnApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190eXBlcy5oIGIvZnMveGZzL3hmc190eXBlcy5oCmluZGV4IGQ3MjU0MjguLmIwOTkwNDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHlwZXMuaAorKysgYi9mcy94ZnMveGZzX3R5cGVzLmgKQEAgLTE1MSw4ICsxNTEsOCBAQAogfSB4ZnNfYnRudW1fdDsKIAogc3RydWN0IHhmc19uYW1lIHsKLQljb25zdCBjaGFyCSpuYW1lOwotCWludAkJbGVuOworCWNvbnN0IHVuc2lnbmVkIGNoYXIJKm5hbWU7CisJaW50CQkJbGVuOwogfTsKIAogI2VuZGlmCS8qIF9fWEZTX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IDZmMjY4NzUuLmRkZDJjNWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQkgICAgaWF0dHItPmlhX3NpemUgPiBpcC0+aV9kLmRpX3NpemUpIHsKIAkJCWNvZGUgPSB4ZnNfZmx1c2hfcGFnZXMoaXAsCiAJCQkJCWlwLT5pX2QuZGlfc2l6ZSwgaWF0dHItPmlhX3NpemUsCi0JCQkJCVhGU19CX0FTWU5DLCBGSV9OT05FKTsKKwkJCQkJWEJGX0FTWU5DLCBGSV9OT05FKTsKIAkJfQogCiAJCS8qIHdhaXQgZm9yIGFsbCBJL08gdG8gY29tcGxldGUgKi8KQEAgLTU5Nyw3ICs1OTcsNyBAQAogewogCXhmc190cmFuc190CSp0cDsKIAlpbnQJCWVycm9yID0gMDsKLQlpbnQJCWxvZ19mbHVzaGVkID0gMCwgY2hhbmdlZCA9IDE7CisJaW50CQlsb2dfZmx1c2hlZCA9IDA7CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKIApAQCAtNjI3LDE5ICs2MjcsMTYgQEAKIAkJICogZGlzayB5ZXQsIHRoZSBpbm9kZSB3aWxsIGJlIHN0aWxsIGJlIHBpbm5lZC4gIElmIGl0IGlzLAogCQkgKiBmb3JjZSB0aGUgbG9nLgogCQkgKi8KLQogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0KIAkJaWYgKHhmc19pcGluY291bnQoaXApKSB7Ci0JCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCAoeGZzX2xzbl90KTAsCi0JCQkJICAgICAgWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQywKLQkJCQkgICAgICAmbG9nX2ZsdXNoZWQpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIElmIHRoZSBpbm9kZSBpcyBub3QgcGlubmVkIGFuZCBub3RoaW5nIGhhcyBjaGFuZ2VkCi0JCQkgKiB3ZSBkb24ndCBuZWVkIHRvIGZsdXNoIHRoZSBjYWNoZS4KLQkJCSAqLwotCQkJY2hhbmdlZCA9IDA7CisJCQlpZiAoaXAtPmlfaXRlbXAtPmlsaV9sYXN0X2xzbikgeworCQkJCWVycm9yID0gX3hmc19sb2dfZm9yY2VfbHNuKGlwLT5pX21vdW50LAorCQkJCQkJaXAtPmlfaXRlbXAtPmlsaV9sYXN0X2xzbiwKKwkJCQkJCVhGU19MT0dfU1lOQywgJmxvZ19mbHVzaGVkKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwKKwkJCQkJCVhGU19MT0dfU1lOQywgJmxvZ19mbHVzaGVkKTsKKwkJCX0KIAkJfQogCX0gZWxzZQl7CiAJCS8qCkBAIC02NzQsNyArNjcxLDcgQEAKIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAl9CiAKLQlpZiAoKGlwLT5pX21vdW50LT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpICYmIGNoYW5nZWQpIHsKKwlpZiAoaXAtPmlfbW91bnQtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQkFSUklFUikgewogCQkvKgogCQkgKiBJZiB0aGUgbG9nIHdyaXRlIGRpZG4ndCBpc3N1ZSBhbiBvcmRlcmVkIHRhZyB3ZSBuZWVkCiAJCSAqIHRvIGZsdXNoIHRoZSBkaXNrIGNhY2hlIGZvciB0aGUgZGF0YSBkZXZpY2Ugbm93LgpAQCAtMTA5Niw3ICsxMDkzLDcgQEAKIAkJICovCiAJCXRydW5jYXRlZCA9IHhmc19pZmxhZ3NfdGVzdF9hbmRfY2xlYXIoaXAsIFhGU19JVFJVTkNBVEVEKTsKIAkJaWYgKHRydW5jYXRlZCAmJiBWTl9ESVJUWShWRlNfSShpcCkpICYmIGlwLT5pX2RlbGF5ZWRfYmxrcyA+IDApCi0JCQl4ZnNfZmx1c2hfcGFnZXMoaXAsIDAsIC0xLCBYRlNfQl9BU1lOQywgRklfTk9ORSk7CisJCQl4ZnNfZmx1c2hfcGFnZXMoaXAsIDAsIC0xLCBYQkZfQVNZTkMsIEZJX05PTkUpOwogCX0KIAogCWlmIChpcC0+aV9kLmRpX25saW5rICE9IDApIHsKQEAgLTIxOTksNyArMjE5Niw4IEBACiAJaWYgKERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX1NZTUxJTkspKSB7CiAJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9TWU1MSU5LLCBkcCwKIAkJCQkJRE1fUklHSFRfTlVMTCwgTlVMTCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJbGlua19uYW1lLT5uYW1lLCB0YXJnZXRfcGF0aCwgMCwgMCwgMCk7CisJCQkJCWxpbmtfbmFtZS0+bmFtZSwKKwkJCQkJKHVuc2lnbmVkIGNoYXIgKil0YXJnZXRfcGF0aCwgMCwgMCwgMCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0yMzk1LDcgKzIzOTMsOCBAQAogCQkJCQlkcCwgRE1fUklHSFRfTlVMTCwKIAkJCQkJZXJyb3IgPyBOVUxMIDogaXAsCiAJCQkJCURNX1JJR0hUX05VTEwsIGxpbmtfbmFtZS0+bmFtZSwKLQkJCQkJdGFyZ2V0X3BhdGgsIDAsIGVycm9yLCAwKTsKKwkJCQkJKHVuc2lnbmVkIGNoYXIgKil0YXJnZXRfcGF0aCwKKwkJCQkJMCwgZXJyb3IsIDApOwogCX0KIAogCWlmICghZXJyb3IpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmggYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKaW5kZXggMTY3YTQ2Ny4uNzc0ZjQwNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5oCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaApAQCAtNDMsMTEgKzQzLDExIEBACiBpbnQgeGZzX3JlbmFtZShzdHJ1Y3QgeGZzX2lub2RlICpzcmNfZHAsIHN0cnVjdCB4ZnNfbmFtZSAqc3JjX25hbWUsCiAJCXN0cnVjdCB4ZnNfaW5vZGUgKnNyY19pcCwgc3RydWN0IHhmc19pbm9kZSAqdGFyZ2V0X2RwLAogCQlzdHJ1Y3QgeGZzX25hbWUgKnRhcmdldF9uYW1lLCBzdHJ1Y3QgeGZzX2lub2RlICp0YXJnZXRfaXApOwotaW50IHhmc19hdHRyX2dldChzdHJ1Y3QgeGZzX2lub2RlICppcCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUsCi0JCWludCAqdmFsdWVsZW5wLCBpbnQgZmxhZ3MpOwotaW50IHhmc19hdHRyX3NldChzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUsCi0JCWludCB2YWx1ZWxlbiwgaW50IGZsYWdzKTsKLWludCB4ZnNfYXR0cl9yZW1vdmUoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncyk7CitpbnQgeGZzX2F0dHJfZ2V0KHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCQl1bnNpZ25lZCBjaGFyICp2YWx1ZSwgaW50ICp2YWx1ZWxlbnAsIGludCBmbGFncyk7CitpbnQgeGZzX2F0dHJfc2V0KHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCQl1bnNpZ25lZCBjaGFyICp2YWx1ZSwgaW50IHZhbHVlbGVuLCBpbnQgZmxhZ3MpOworaW50IHhmc19hdHRyX3JlbW92ZShzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgaW50IGZsYWdzKTsKIGludCB4ZnNfYXR0cl9saXN0KHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjaGFyICpidWZmZXIsIGludCBidWZzaXplLAogCQlpbnQgZmxhZ3MsIHN0cnVjdCBhdHRybGlzdF9jdXJzb3Jfa2VybiAqY3Vyc29yKTsKIHNzaXplX3QgeGZzX3JlYWQoc3RydWN0IHhmc19pbm9kZSAqaXAsIHN0cnVjdCBraW9jYiAqaW9jYiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKaW5kZXggM2NkOWNjZC4uNTQ1MDhjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKQEAgLTI0Miw2ICsyNDIsOCBAQAogc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cF9mbGFncyB7CiAJdTggdmFsaWQ6MTsJCS8qIENhbiBzdWNjZXNzZnVsbHkgZW5hYmxlIHdha2V1cD8gKi8KIAl1OCBydW5fd2FrZToxOwkJLyogUnVuLVdha2UgR1BFIGRldmljZXMgKi8KKwl1OCBhbHdheXNfZW5hYmxlZDoxOwkvKiBSdW4td2FrZSBkZXZpY2VzIHRoYXQgYXJlIGFsd2F5cyBlbmFibGVkICovCisJdTggbm90aWZpZXJfcHJlc2VudDoxOyAgLyogV2FrZS11cCBub3RpZnkgaGFuZGxlciBoYXMgYmVlbiBpbnN0YWxsZWQgKi8KIH07CiAKIHN0cnVjdCBhY3BpX2RldmljZV93YWtldXBfc3RhdGUgewpAQCAtMjU2LDYgKzI1OCw3IEBACiAJc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cF9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwX2ZsYWdzIGZsYWdzOwogCWludCBwcmVwYXJlX2NvdW50OworCWludCBydW5fd2FrZV9jb3VudDsKIH07CiAKIC8qIERldmljZSAqLwpAQCAtMzg2LDYgKzM4OSw5IEBACiBzdHJ1Y3QgYWNwaV9wY2lfcm9vdCAqYWNwaV9wY2lfZmluZF9yb290KGFjcGlfaGFuZGxlIGhhbmRsZSk7CiAjZGVmaW5lIERFVklDRV9BQ1BJX0hBTkRMRShkZXYpICgoYWNwaV9oYW5kbGUpKChkZXYpLT5hcmNoZGF0YS5hY3BpX2hhbmRsZSkpCiAKK2ludCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCBpbnQgc3RhdGUpOworaW50IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KTsKKwogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogaW50IGFjcGlfcG1fZGV2aWNlX3NsZWVwX3N0YXRlKHN0cnVjdCBkZXZpY2UgKiwgaW50ICopOwogaW50IGFjcGlfcG1fZGV2aWNlX3NsZWVwX3dha2Uoc3RydWN0IGRldmljZSAqLCBib29sKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaAppbmRleCBmNDkwNmY2Li4zYTQ3NjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCkBAIC0xMDQsNiArMTA0LDcgQEAKIAogc3RydWN0IHBjaV9idXMgKnBjaV9hY3BpX3NjYW5fcm9vdChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IGRvbWFpbiwKIAkJCQkgICBpbnQgYnVzKTsKK3ZvaWQgcGNpX2FjcGlfY3JzX3F1aXJrcyh2b2lkKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCmluZGV4IDg2ZTk3MzUuLjM5ODhmOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKQEAgLTI4MSwxMSArMjgxLDExIEBACiAvKgogICogR1BFIEludGVyZmFjZXMKICAqLwotYWNwaV9zdGF0dXMgYWNwaV9zZXRfZ3BlX3R5cGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpOworYWNwaV9zdGF0dXMgYWNwaV9zZXRfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCBhY3Rpb24pOwogCi1hY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpOworYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKTsKIAotYWNwaV9zdGF0dXMgYWNwaV9kaXNhYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlcik7CithY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9jbGVhcl9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHUzMiBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmggYi9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCmluZGV4IDE1M2YxMmQuLjczYWY0MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaApAQCAtNjY4LDE1ICs2NjgsMTYgQEAKIAogLyoKICAqIEdQRSBpbmZvIGZsYWdzIC0gUGVyIEdQRQotICogKy0rLSstKy0tLSstLS0rLSsKLSAqIHw3fDZ8NXw0OjN8MjoxfDB8Ci0gKiArLSstKy0rLS0tKy0tLSstKwotICogIHwgfCB8ICB8ICAgfCAgfAotICogIHwgfCB8ICB8ICAgfCAgKy0tLSBJbnRlcnJ1cHQgdHlwZTogRWRnZSBvciBMZXZlbCBUcmlnZ2VyZWQKLSAqICB8IHwgfCAgfCAgICstLS0gVHlwZTogV2FrZS1vbmx5LCBSdW50aW1lLW9ubHksIG9yIHdha2UvcnVudGltZQorICogKy0rLSstKy0tLSstKy0rLSsKKyAqIHw3fDZ8NXw0OjN8MnwxfDB8CisgKiArLSstKy0rLS0tKy0rLSstKworICogIHwgfCB8ICB8ICB8IHwgfAorICogIHwgfCB8ICB8ICB8IHwgKy0tLSBJbnRlcnJ1cHQgdHlwZTogRWRnZSBvciBMZXZlbCBUcmlnZ2VyZWQKKyAqICB8IHwgfCAgfCAgfCArLS0tIEdQRSBjYW4gd2FrZSB0aGUgc3lzdGVtCisgKiAgfCB8IHwgIHwgICstLS0gVW51c2VkCiAgKiAgfCB8IHwgICstLS0gVHlwZSBvZiBkaXNwYXRjaCAtLSB0byBtZXRob2QsIGhhbmRsZXIsIG9yIG5vbmUKLSAqICB8IHwgKy0tLSBFbmFibGVkIGZvciBydW50aW1lPwotICogIHwgKy0tLSBFbmFibGVkIGZvciB3YWtlPworICogIHwgfCArLS0tIFVudXNlZAorICogIHwgKy0tLSBVbnVzZWQKICAqICArLS0tIFVudXNlZAogICovCiAjZGVmaW5lIEFDUElfR1BFX1hSVVBUX1RZUEVfTUFTSyAgICAgICAgKHU4KSAweDAxCkBAIC02ODcsMjIgKzY4OCwxMyBAQAogI2RlZmluZSBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOICAgICAgICAgICh1OCkgMHgwNgogI2RlZmluZSBBQ1BJX0dQRV9UWVBFX1dBS0UgICAgICAgICAgICAgICh1OCkgMHgwMgogI2RlZmluZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUgICAgICAgICAgICh1OCkgMHgwNAkvKiBEZWZhdWx0ICovCisjZGVmaW5lIEFDUElfR1BFX0NBTl9XQUtFCQkodTgpIDB4MDIKIAogI2RlZmluZSBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLICAgICAgICAgICh1OCkgMHgxOAogI2RlZmluZSBBQ1BJX0dQRV9ESVNQQVRDSF9IQU5ETEVSICAgICAgICh1OCkgMHgwOAogI2RlZmluZSBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QgICAgICAgICh1OCkgMHgxMAogI2RlZmluZSBBQ1BJX0dQRV9ESVNQQVRDSF9OT1RfVVNFRCAgICAgICh1OCkgMHgwMAkvKiBEZWZhdWx0ICovCiAKLSNkZWZpbmUgQUNQSV9HUEVfUlVOX0VOQUJMRV9NQVNLICAgICAgICAodTgpIDB4MjAKLSNkZWZpbmUgQUNQSV9HUEVfUlVOX0VOQUJMRUQgICAgICAgICAgICAodTgpIDB4MjAKLSNkZWZpbmUgQUNQSV9HUEVfUlVOX0RJU0FCTEVEICAgICAgICAgICAodTgpIDB4MDAJLyogRGVmYXVsdCAqLwotCi0jZGVmaW5lIEFDUElfR1BFX1dBS0VfRU5BQkxFX01BU0sgICAgICAgKHU4KSAweDQwCi0jZGVmaW5lIEFDUElfR1BFX1dBS0VfRU5BQkxFRCAgICAgICAgICAgKHU4KSAweDQwCi0jZGVmaW5lIEFDUElfR1BFX1dBS0VfRElTQUJMRUQgICAgICAgICAgKHU4KSAweDAwCS8qIERlZmF1bHQgKi8KLQotI2RlZmluZSBBQ1BJX0dQRV9FTkFCTEVfTUFTSyAgICAgICAgICAgICh1OCkgMHg2MAkvKiBCb3RoIHJ1bi93YWtlICovCi0KIC8qCiAgKiBGbGFncyBmb3IgR1BFIGFuZCBMb2NrIGludGVyZmFjZXMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vbWQ1LmggYi9pbmNsdWRlL2NyeXB0by9tZDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWYyOTliCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vbWQ1LmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfQ1JZUFRPX01ENV9ICisjZGVmaW5lIF9DUllQVE9fTUQ1X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTUQ1X0RJR0VTVF9TSVpFCQkxNgorI2RlZmluZSBNRDVfSE1BQ19CTE9DS19TSVpFCTY0CisjZGVmaW5lIE1ENV9CTE9DS19XT1JEUwkJMTYKKyNkZWZpbmUgTUQ1X0hBU0hfV09SRFMJCTQKKworc3RydWN0IG1kNV9zdGF0ZSB7CisJdTMyIGhhc2hbTUQ1X0hBU0hfV09SRFNdOworCXUzMiBibG9ja1tNRDVfQkxPQ0tfV09SRFNdOworCXU2NCBieXRlX2NvdW50OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9wY3J5cHQuaCBiL2luY2x1ZGUvY3J5cHRvL3BjcnlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDhiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9wY3J5cHQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogcGNyeXB0IC0gUGFyYWxsZWwgY3J5cHRvIGVuZ2luZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgc2VjdW5ldCBTZWN1cml0eSBOZXR3b3JrcyBBRworICogQ29weXJpZ2h0IChDKSAyMDA5IFN0ZWZmZW4gS2xhc3NlcnQgPHN0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9DUllQVE9fUENSWVBUX0gKKyNkZWZpbmUgX0NSWVBUT19QQ1JZUFRfSAorCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGFkYXRhLmg+CisKK3N0cnVjdCBwY3J5cHRfcmVxdWVzdCB7CisJc3RydWN0IHBhZGF0YV9wcml2CXBhZGF0YTsKKwl2b2lkCQkJKmRhdGE7CisJdm9pZAkJCSpfX2N0eFtdIENSWVBUT19NSU5BTElHTl9BVFRSOworfTsKKworc3RhdGljIGlubGluZSB2b2lkICpwY3J5cHRfcmVxdWVzdF9jdHgoc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIHJlcS0+X19jdHg7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBwYWRhdGFfcHJpdiAqcGNyeXB0X3JlcXVlc3RfcGFkYXRhKHN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiAmcmVxLT5wYWRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcGNyeXB0X3BhZGF0YV9yZXF1ZXN0KHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXJldHVybiBjb250YWluZXJfb2YocGFkYXRhLCBzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QsIHBhZGF0YSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggYzA1YTI5Yy4uMjViOGIyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0yNSw3ICsyNSw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2JpdG1hc2tfb3JkZXIodW5zaWduZWQgaW50IGNvdW50KQogewogCWludCBvcmRlcjsKLQkKKwogCW9yZGVyID0gZmxzKGNvdW50KTsKIAlyZXR1cm4gb3JkZXI7CS8qIFdlIGNvdWxkIGJlIHNsaWdodGx5IG1vcmUgY2xldmVyIHdpdGggLTEgaGVyZS4uLiAqLwogfQpAQCAtMzMsNyArMzMsNyBAQAogc3RhdGljIF9faW5saW5lX18gaW50IGdldF9jb3VudF9vcmRlcih1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaW50IG9yZGVyOwotCQorCiAJb3JkZXIgPSBmbHMoY291bnQpIC0gMTsKIAlpZiAoY291bnQgJiAoY291bnQgLSAxKSkKIAkJb3JkZXIrKzsKQEAgLTQ1LDYgKzQ1LDMxIEBACiAJcmV0dXJuIHNpemVvZih3KSA9PSA0ID8gaHdlaWdodDMyKHcpIDogaHdlaWdodDY0KHcpOwogfQogCisvKgorICogQ2xlYXJseSBzbG93IHZlcnNpb25zIG9mIHRoZSBod2VpZ2h0TigpIGZ1bmN0aW9ucywgdGhlaXIgYmVuZWZpdCBpcworICogb2YgY291cnNlIGNvbXBpbGUgdGltZSBldmFsdWF0aW9uIG9mIGNvbnN0YW50IGFyZ3VtZW50cy4KKyAqLworI2RlZmluZSBIV0VJR0hUOCh3KQkJCQkJXAorICAgICAgKAlCVUlMRF9CVUdfT05fWkVSTyghX19idWlsdGluX2NvbnN0YW50X3AodykpICsJXAorCSghISgodykgJiAoMVVMTCA8PCAwKSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDEpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgMikpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCAzKSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDQpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgNSkpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCA2KSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDcpKSkJKQorCisjZGVmaW5lIEhXRUlHSFQxNih3KSAoSFdFSUdIVDgodykgICsgSFdFSUdIVDgoKHcpID4+IDgpKQorI2RlZmluZSBIV0VJR0hUMzIodykgKEhXRUlHSFQxNih3KSArIEhXRUlHSFQxNigodykgPj4gMTYpKQorI2RlZmluZSBIV0VJR0hUNjQodykgKEhXRUlHSFQzMih3KSArIEhXRUlHSFQzMigodykgPj4gMzIpKQorCisvKgorICogVHlwZSBpbnZhcmlhbnQgdmVyc2lvbiB0aGF0IHNpbXBseSBjYXN0cyB0aGluZ3MgdG8gdGhlCisgKiBsYXJnZXN0IHR5cGUuCisgKi8KKyNkZWZpbmUgSFdFSUdIVCh3KSAgIEhXRUlHSFQ2NCgodTY0KSh3KSkKKwogLyoqCiAgKiByb2wzMiAtIHJvdGF0ZSBhIDMyLWJpdCB2YWx1ZSBsZWZ0CiAgKiBAd29yZDogdmFsdWUgdG8gcm90YXRlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAppbmRleCAwMDA4ZGVlLi5jOWJiY2IyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKQEAgLTI4LDYgKzI4LDcgQEAKIGV4dGVybiBpbnQgY2dyb3VwX2luaXRfZWFybHkodm9pZCk7CiBleHRlcm4gaW50IGNncm91cF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2dyb3VwX2xvY2sodm9pZCk7CitleHRlcm4gaW50IGNncm91cF9sb2NrX2lzX2hlbGQodm9pZCk7CiBleHRlcm4gYm9vbCBjZ3JvdXBfbG9ja19saXZlX2dyb3VwKHN0cnVjdCBjZ3JvdXAgKmNncnApOwogZXh0ZXJuIHZvaWQgY2dyb3VwX3VubG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIGNncm91cF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CkBAIC00ODYsNyArNDg3LDkgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnRhc2tfc3Vic3lzX3N0YXRlKAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHN1YnN5c19pZCkKIHsKLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHRhc2stPmNncm91cHMtPnN1YnN5c1tzdWJzeXNfaWRdKTsKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHRhc2stPmNncm91cHMtPnN1YnN5c1tzdWJzeXNfaWRdLAorCQkJCSAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgICAgIGNncm91cF9sb2NrX2lzX2hlbGQoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cCogdGFza19jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCmluZGV4IDhhNGExMzAuLjRiY2E4YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKQEAgLTE1NCw2ICsxNTQsNyBAQAogICogQG1heF9pZGxlX25zOgltYXggaWRsZSB0aW1lIHBlcm1pdHRlZCBieSB0aGUgY2xvY2tzb3VyY2UgKG5zZWNzKQogICogQGZsYWdzOgkJZmxhZ3MgZGVzY3JpYmluZyBzcGVjaWFsIHByb3BlcnRpZXMKICAqIEB2cmVhZDoJCXZzeXNjYWxsIGJhc2VkIHJlYWQKKyAqIEBzdXNwZW5kOgkJc3VzcGVuZCBmdW5jdGlvbiBmb3IgdGhlIGNsb2Nrc291cmNlLCBpZiBuZWNlc3NhcnkKICAqIEByZXN1bWU6CQlyZXN1bWUgZnVuY3Rpb24gZm9yIHRoZSBjbG9ja3NvdXJjZSwgaWYgbmVjZXNzYXJ5CiAgKi8KIHN0cnVjdCBjbG9ja3NvdXJjZSB7CkBAIC0xNzIsNyArMTczLDggQEAKIAl1NjQgbWF4X2lkbGVfbnM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljeWNsZV90ICgqdnJlYWQpKHZvaWQpOwotCXZvaWQgKCpyZXN1bWUpKHZvaWQpOworCXZvaWQgKCpzdXNwZW5kKShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKKwl2b2lkICgqcmVzdW1lKShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKICNpZmRlZiBDT05GSUdfSUE2NAogCXZvaWQgKmZzeXNfbW1pbzsgICAgICAgIC8qIHVzZWQgYnkgZnN5c2NhbGwgYXNtIGNvZGUgKi8KICNkZWZpbmUgQ0xLU1JDX0ZTWVNfTU1JT19TRVQobW1pbywgYWRkcikgICAgICAoKG1taW8pID0gKGFkZHIpKQpAQCAtMjc3LDYgKzI3OSw3IEBACiBleHRlcm4gdm9pZCBjbG9ja3NvdXJjZV90b3VjaF93YXRjaGRvZyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UqIGNsb2Nrc291cmNlX2dldF9uZXh0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2VfY2hhbmdlX3JhdGluZyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCBpbnQgcmF0aW5nKTsKK2V4dGVybiB2b2lkIGNsb2Nrc291cmNlX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBjbG9ja3NvdXJjZV9yZXN1bWUodm9pZCk7CiBleHRlcm4gc3RydWN0IGNsb2Nrc291cmNlICogX19pbml0IF9fd2VhayBjbG9ja3NvdXJjZV9kZWZhdWx0X2Nsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2VfbWFya191bnN0YWJsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKaW5kZXggZDc3YjU0Ny4uZGJjZWU3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKQEAgLTE0Myw2ICsxNDMsOCBAQAogCiAjZGVmaW5lIGZvcl9lYWNoX2NwdShjcHUsIG1hc2spCQkJXAogCWZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyssICh2b2lkKW1hc2spCisjZGVmaW5lIGZvcl9lYWNoX2NwdV9ub3QoY3B1LCBtYXNrKQkJXAorCWZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyssICh2b2lkKW1hc2spCiAjZGVmaW5lIGZvcl9lYWNoX2NwdV9hbmQoY3B1LCBtYXNrLCBhbmQpCVwKIAlmb3IgKChjcHUpID0gMDsgKGNwdSkgPCAxOyAoY3B1KSsrLCAodm9pZCltYXNrLCAodm9pZClhbmQpCiAjZWxzZQpAQCAtMjAzLDYgKzIwNSwxOCBAQAogCQkoY3B1KSA8IG5yX2NwdV9pZHM7KQogCiAvKioKKyAqIGZvcl9lYWNoX2NwdV9ub3QgLSBpdGVyYXRlIG92ZXIgZXZlcnkgY3B1IGluIGEgY29tcGxlbWVudGVkIG1hc2sKKyAqIEBjcHU6IHRoZSAob3B0aW9uYWxseSB1bnNpZ25lZCkgaW50ZWdlciBpdGVyYXRvcgorICogQG1hc2s6IHRoZSBjcHVtYXNrIHBvaW50ZXIKKyAqCisgKiBBZnRlciB0aGUgbG9vcCwgY3B1IGlzID49IG5yX2NwdV9pZHMuCisgKi8KKyNkZWZpbmUgZm9yX2VhY2hfY3B1X25vdChjcHUsIG1hc2spCQkJCVwKKwlmb3IgKChjcHUpID0gLTE7CQkJCQlcCisJCShjcHUpID0gY3B1bWFza19uZXh0X3plcm8oKGNwdSksIChtYXNrKSksCVwKKwkJKGNwdSkgPCBucl9jcHVfaWRzOykKKworLyoqCiAgKiBmb3JfZWFjaF9jcHVfYW5kIC0gaXRlcmF0ZSBvdmVyIGV2ZXJ5IGNwdSBpbiBib3RoIG1hc2tzCiAgKiBAY3B1OiB0aGUgKG9wdGlvbmFsbHkgdW5zaWduZWQpIGludGVnZXIgaXRlcmF0b3IKICAqIEBtYXNrOiB0aGUgZmlyc3QgY3B1bWFzayBwb2ludGVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyZWQuaCBiL2luY2x1ZGUvbGludXgvY3JlZC5oCmluZGV4IDRlMzM4N2EuLjRkYjA5ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JlZC5oCkBAIC0yODAsNyArMjgwLDcgQEAKICAqIHRhc2sgb3IgYnkgaG9sZGluZyB0YXNrbGlzdF9sb2NrIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyB1bmxpbmtlZC4KICAqLwogI2RlZmluZSBfX3Rhc2tfY3JlZCh0YXNrKSBcCi0JKChjb25zdCBzdHJ1Y3QgY3JlZCAqKShyY3VfZGVyZWZlcmVuY2UoKHRhc2spLT5yZWFsX2NyZWQpKSkKKwkoKGNvbnN0IHN0cnVjdCBjcmVkICopKHJjdV9kZXJlZmVyZW5jZV9jaGVjaygodGFzayktPnJlYWxfY3JlZCwgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwgbG9ja2RlcF9pc19oZWxkKCZ0YXNrbGlzdF9sb2NrKSkpKQogCiAvKioKICAqIGdldF90YXNrX2NyZWQgLSBHZXQgYW5vdGhlciB0YXNrJ3Mgb2JqZWN0aXZlIGNyZWRlbnRpYWxzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBhNjI3OTlmLi5iMzA1MjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTQ3Miw2ICs0NzIsMjMgQEAKIAlyZXR1cm4gZGV2LT5rb2JqLnN0YXRlX2luX3N5c2ZzOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5wb3dlci5zdGF0dXMgPT0gRFBNX09OKQorCQlkZXYtPnBvd2VyLmFzeW5jX3N1c3BlbmQgPSB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX2Rpc2FibGVfYXN5bmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cG93ZXIuc3RhdHVzID09IERQTV9PTikKKwkJZGV2LT5wb3dlci5hc3luY19zdXNwZW5kID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBkZXZpY2VfYXN5bmNfc3VzcGVuZF9lbmFibGVkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gISFkZXYtPnBvd2VyLmFzeW5jX3N1c3BlbmQ7Cit9CisKIHZvaWQgZHJpdmVyX2luaXQodm9pZCk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZi5oIGIvaW5jbHVkZS9saW51eC9lbGYuaAppbmRleCAwY2M0ZDU1Li5hZDk5MGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VsZi5oCisrKyBiL2luY2x1ZGUvbGludXgvZWxmLmgKQEAgLTM0OSw3ICszNDksMTEgQEAKICNkZWZpbmUgRUxGX09TQUJJIEVMRk9TQUJJX05PTkUKICNlbmRpZgogCi0vKiBOb3RlcyB1c2VkIGluIEVUX0NPUkUgKi8KKy8qCisgKiBOb3RlcyB1c2VkIGluIEVUX0NPUkUuIEFyY2hpdGVjdHVyZXMgZXhwb3J0IHNvbWUgb2YgdGhlIGFyY2ggcmVnaXN0ZXIgc2V0cworICogdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbm90ZSB0eXBlcyB2aWEgdGhlIFBUUkFDRV9HRVRSRUdTRVQgYW5kCisgKiBQVFJBQ0VfU0VUUkVHU0VUIHJlcXVlc3RzLgorICovCiAjZGVmaW5lIE5UX1BSU1RBVFVTCTEKICNkZWZpbmUgTlRfUFJGUFJFRwkyCiAjZGVmaW5lIE5UX1BSUFNJTkZPCTMKQEAgLTM2MSw3ICszNjUsMTMgQEAKICNkZWZpbmUgTlRfUFBDX1ZTWAkweDEwMgkJLyogUG93ZXJQQyBWU1ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIE5UXzM4Nl9UTFMJMHgyMDAJCS8qIGkzODYgVExTIHNsb3RzIChzdHJ1Y3QgdXNlcl9kZXNjKSAqLwogI2RlZmluZSBOVF8zODZfSU9QRVJNCTB4MjAxCQkvKiB4ODYgaW8gcGVybWlzc2lvbiBiaXRtYXAgKDE9ZGVueSkgKi8KKyNkZWZpbmUgTlRfWDg2X1hTVEFURQkweDIwMgkJLyogeDg2IGV4dGVuZGVkIHN0YXRlIHVzaW5nIHhzYXZlICovCiAjZGVmaW5lIE5UX1MzOTBfSElHSF9HUFJTCTB4MzAwCS8qIHMzOTAgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzICovCisjZGVmaW5lIE5UX1MzOTBfVElNRVIJMHgzMDEJCS8qIHMzOTAgdGltZXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTlRfUzM5MF9UT0RDTVAJMHgzMDIJCS8qIHMzOTAgVE9EIGNsb2NrIGNvbXBhcmF0b3IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTlRfUzM5MF9UT0RQUkVHCTB4MzAzCQkvKiBzMzkwIFRPRCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTlRfUzM5MF9DVFJTCTB4MzA0CQkvKiBzMzkwIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5UX1MzOTBfUFJFRklYCTB4MzA1CQkvKiBzMzkwIHByZWZpeCByZWdpc3RlciAqLwogCiAKIC8qIE5vdGUgaGVhZGVyIGluIGEgUFRfTk9URSBzZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaCBiL2luY2x1ZGUvbGludXgvZmR0YWJsZS5oCmluZGV4IGEyZWM3NGIuLjAxM2RjNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmR0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmR0YWJsZS5oCkBAIC01Nyw3ICs1NywxNCBAQAogCXN0cnVjdCBmaWxlICogZmRfYXJyYXlbTlJfT1BFTl9ERUZBVUxUXTsKIH07CiAKLSNkZWZpbmUgZmlsZXNfZmR0YWJsZShmaWxlcykgKHJjdV9kZXJlZmVyZW5jZSgoZmlsZXMpLT5mZHQpKQorI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfY2hlY2tfZmR0YWJsZShmaWxlcywgZmR0ZmQpIFwKKwkocmN1X2RlcmVmZXJlbmNlX2NoZWNrKChmZHRmZCksIFwKKwkJCSAgICAgICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fCBcCisJCQkgICAgICAgbG9ja2RlcF9pc19oZWxkKCYoZmlsZXMpLT5maWxlX2xvY2spIHx8IFwKKwkJCSAgICAgICBhdG9taWNfcmVhZCgmKGZpbGVzKS0+Y291bnQpID09IDEpKQorCisjZGVmaW5lIGZpbGVzX2ZkdGFibGUoZmlsZXMpIFwKKwkJKHJjdV9kZXJlZmVyZW5jZV9jaGVja19mZHRhYmxlKChmaWxlcyksIChmaWxlcyktPmZkdCkpCiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnM7CiBzdHJ1Y3QgdmZzbW91bnQ7CkBAIC03OCw3ICs4NSw3IEBACiAJc3RydWN0IGZkdGFibGUgKmZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOwogCiAJaWYgKGZkIDwgZmR0LT5tYXhfZmRzKQotCQlmaWxlID0gcmN1X2RlcmVmZXJlbmNlKGZkdC0+ZmRbZmRdKTsKKwkJZmlsZSA9IHJjdV9kZXJlZmVyZW5jZV9jaGVja19mZHRhYmxlKGZpbGVzLCBmZHQtPmZkW2ZkXSk7CiAJcmV0dXJuIGZpbGU7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCmluZGV4IDBiNGY5N2QuLjAxZTZhZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaApAQCAtMTM0LDYgKzEzNCw4IEBACiB1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZV9mdW5jKGNoYXIgKmdsb2IsIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfYWxsKGNoYXIgKmdsb2IpOwogCitleHRlcm4gaW50IGZ0cmFjZV90ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpOworCiBlbnVtIHsKIAlGVFJBQ0VfRkxfRlJFRQkJPSAoMSA8PCAwKSwKIAlGVFJBQ0VfRkxfRkFJTEVECT0gKDEgPDwgMSksCkBAIC0xNDEsNyArMTQzLDYgQEAKIAlGVFJBQ0VfRkxfRU5BQkxFRAk9ICgxIDw8IDMpLAogCUZUUkFDRV9GTF9OT1RSQUNFCT0gKDEgPDwgNCksCiAJRlRSQUNFX0ZMX0NPTlZFUlRFRAk9ICgxIDw8IDUpLAotCUZUUkFDRV9GTF9GUk9aRU4JPSAoMSA8PCA2KSwKIH07CiAKIHN0cnVjdCBkeW5fZnRyYWNlIHsKQEAgLTI1MCw2ICsyNTEsMTAgQEAKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IGZ0cmFjZV90ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKIC8qIHRvdGFsbHkgZGlzYWJsZSBmdHJhY2UgLSBjYW4gbm90IHJlLWVuYWJsZSBhZnRlciB0aGlzICovCkBAIC01MTEsNCArNTE2LDEwIEBACiAKICNlbmRpZiAvKiBDT05GSUdfSFdfQlJBTkNIX1RSQUNFUiAqLwogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworCit1bnNpZ25lZCBsb25nIGFyY2hfc3lzY2FsbF9hZGRyKGludCBucik7CisKKyNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NZU0NBTExTICovCisKICNlbmRpZiAvKiBfTElOVVhfRlRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCmluZGV4IDIyMzNjOTguLjZiN2M0NDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZV9zZXEuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiBzdHJ1Y3QgdHJhY2VfYXJyYXk7CiBzdHJ1Y3QgdHJhY2VyOwpAQCAtMTIxLDkgKzEyMiw4IEBACiAJaW50CQkJKCpyZWdmdW5jKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiAJdm9pZAkJCSgqdW5yZWdmdW5jKShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiAJaW50CQkJaWQ7CisJY29uc3QgY2hhcgkJKnByaW50X2ZtdDsKIAlpbnQJCQkoKnJhd19pbml0KShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7Ci0JaW50CQkJKCpzaG93X2Zvcm1hdCkoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICosCi0JCQkJCSAgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICopOwogCWludAkJCSgqZGVmaW5lX2ZpZWxkcykoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwogCXN0cnVjdCBsaXN0X2hlYWQJZmllbGRzOwogCWludAkJCWZpbHRlcl9hY3RpdmU7CkBAIC0xMzgsOSArMTM4LDYgQEAKIAogI2RlZmluZSBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRQkyMDQ4CiAKLWV4dGVybiBjaGFyICpwZXJmX3RyYWNlX2J1ZjsKLWV4dGVybiBjaGFyICpwZXJmX3RyYWNlX2J1Zl9ubWk7Ci0KICNkZWZpbmUgTUFYX0ZJTFRFUl9QUkVECQkzMgogI2RlZmluZSBNQVhfRklMVEVSX1NUUl9WQUwJMjU2CS8qIFNob3VsZCBoYW5kbGUgS1NZTV9TWU1CT0xfTEVOICovCiAKQEAgLTE4OCwxMyArMTg1LDI3IEBACiAJCV9fdHJhY2VfcHJpbnRrKGlwLCBmbXQsICMjYXJncyk7CQkJXAogfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiBzdHJ1Y3QgcGVyZl9ldmVudDsKIGV4dGVybiBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlKGludCBldmVudF9pZCk7CiBleHRlcm4gdm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlKGludCBldmVudF9pZCk7CiBleHRlcm4gaW50IGZ0cmFjZV9wcm9maWxlX3NldF9maWx0ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZXZlbnRfaWQsCiAJCQkJICAgICBjaGFyICpmaWx0ZXJfc3RyKTsKIGV4dGVybiB2b2lkIGZ0cmFjZV9wcm9maWxlX2ZyZWVfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CitleHRlcm4gdm9pZCAqCitmdHJhY2VfcGVyZl9idWZfcHJlcGFyZShpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgdHlwZSwgaW50ICpyY3R4cCwKKwkJCSB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK2Z0cmFjZV9wZXJmX2J1Zl9zdWJtaXQodm9pZCAqcmF3X2RhdGEsIGludCBzaXplLCBpbnQgcmN0eCwgdTY0IGFkZHIsCisJCSAgICAgICB1NjQgY291bnQsIHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzKQoreworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSByYXdfZGF0YTsKKworCXBlcmZfdHBfZXZlbnQoZW50cnktPnR5cGUsIGFkZHIsIGNvdW50LCByYXdfZGF0YSwgc2l6ZSk7CisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOworfQogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfRlRSQUNFX0VWRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZC5oCmluZGV4IDg3MDkzNjUuLmIxMzQ0ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQuaApAQCAtNTAxLDcgKzUwMSw3IEBACiAJdm9pZCAoKmhpZGRldl9yZXBvcnRfZXZlbnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqKTsKIAogCS8qIGhhbmRsZXIgZm9yIHJhdyBvdXRwdXQgZGF0YSwgdXNlZCBieSBoaWRyYXcgKi8KLQlpbnQgKCpoaWRfb3V0cHV0X3Jhd19yZXBvcnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCBfX3U4ICosIHNpemVfdCk7CisJaW50ICgqaGlkX291dHB1dF9yYXdfcmVwb3J0KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgX191OCAqLCBzaXplX3QsIHVuc2lnbmVkIGNoYXIpOwogCiAJLyogZGVidWdnaW5nIHN1cHBvcnQgdmlhIGRlYnVnZnMgKi8KIAl1bnNpZ25lZCBzaG9ydCBkZWJ1ZzsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCiAvKiBBcHBsaWNhdGlvbnMgZnJvbSBISUQgVXNhZ2UgVGFibGVzIDQvOC85OSBWZXJzaW9uIDEuMSAqLwogLyogV2UgaWdub3JlIGEgZmV3IGlucHV0IGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBub3Qgd2lkZWx5IHVzZWQgKi8KLSNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKCgoYSA+PSAweDAwMDEwMDAwKSAmJiAoYSA8PSAweDAwMDEwMDA4KSkgfHwgKGEgPT0gMHgwMDAxMDA4MCkgfHwgKGEgPT0gMHgwMDBjMDAwMSkgfHwgKGEgPT0gMHgwMDBkMDAwMikpCisjZGVmaW5lIElTX0lOUFVUX0FQUExJQ0FUSU9OKGEpICgoKGEgPj0gMHgwMDAxMDAwMCkgJiYgKGEgPD0gMHgwMDAxMDAwOCkpIHx8IChhID09IDB4MDAwMTAwODApIHx8IChhID09IDB4MDAwYzAwMDEpIHx8ICgoYSA+PSAweDAwMGQwMDAyKSAmJiAoYSA8PSAweDAwMGQwMDA2KSkpCiAKIC8qIEhJRCBjb3JlIEFQSSAqLwogCkBAIC02OTAsNiArNjkwLDcgQEAKIGludCBoaWRpbnB1dF9maW5kX2ZpZWxkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgc3RydWN0IGhpZF9maWVsZCAqKmZpZWxkKTsKIHZvaWQgaGlkX291dHB1dF9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgX191OCAqZGF0YSk7CiBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkX2FsbG9jYXRlX2RldmljZSh2b2lkKTsKK3N0cnVjdCBoaWRfcmVwb3J0ICpoaWRfcmVnaXN0ZXJfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGlkKTsKIGludCBoaWRfcGFyc2VfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTggKnN0YXJ0LCB1bnNpZ25lZCBzaXplKTsKIGludCBoaWRfY2hlY2tfa2V5c19wcmVzc2VkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwogaW50IGhpZF9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGludCBjb25uZWN0X21hc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWdobWVtLmggYi9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaAppbmRleCBhYjJjYzIwLi43NDE1MmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaApAQCAtMTcsNiArMTcsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQoreworfQogI2VuZGlmCiAKICNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAppbmRleCBiZjFjNWJlLi43ODk3ZjMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaApAQCAtNTQ3LDYgKzU0NywxMCBAQAogCXVuc2lnbmVkIGludAlhdWRpb19tY2xrOwogCXN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEJCSphdWRpbzsKIAlzdHJ1Y3QgdHdsNDAzMF9jb2RlY192aWJyYV9kYXRhCQkqdmlicmE7CisKKwkvKiB0d2w2MDMwICovCisJaW50IGF1ZHB3cm9uX2dwaW87ICAgICAgLyogYXVkaW8gcG93ZXItb24gZ3BpbyAqLworCWludCBuYXVkaW50X2lycTsgICAgICAgIC8qIGF1ZGlvIGludGVycnVwdCAqLwogfTsKIAogc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggNjYzMjA4YS4uZjQ0ZWU5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtNTk4LDYgKzU5OCw0OCBAQAogCiAjZGVmaW5lIEtFWV9DQU1FUkFfRk9DVVMJMHgyMTAKIAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWQkJMHgyYzAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxCQkweDJjMAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIJCTB4MmMxCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMwkJMHgyYzIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk0CQkweDJjMworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTUJCTB4MmM0CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNgkJMHgyYzUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk3CQkweDJjNgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTgJCTB4MmM3CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZOQkJMHgyYzgKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMAkJMHgyYzkKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMQkJMHgyY2EKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMgkJMHgyY2IKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMwkJMHgyY2MKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNAkJMHgyY2QKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNQkJMHgyY2UKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNgkJMHgyY2YKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNwkJMHgyZDAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOAkJMHgyZDEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOQkJMHgyZDIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMAkJMHgyZDMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMQkJMHgyZDQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMgkJMHgyZDUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMwkJMHgyZDYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNAkJMHgyZDcKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNQkJMHgyZDgKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNgkJMHgyZDkKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNwkJMHgyZGEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyOAkJMHgyZGIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyOQkJMHgyZGMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMAkJMHgyZGQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMQkJMHgyZGUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMgkJMHgyZGYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMwkJMHgyZTAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNAkJMHgyZTEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNQkJMHgyZTIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNgkJMHgyZTMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNwkJMHgyZTQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOAkJMHgyZTUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOQkJMHgyZTYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk0MAkJMHgyZTcKKwogLyogV2UgYXZvaWQgbG93IGNvbW1vbiBrZXlzIGluIG1vZHVsZSBhbGlhc2VzIHNvIHRoZXkgZG9uJ3QgZ2V0IGh1Z2UuICovCiAjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcJS0VZX01VVEUKICNkZWZpbmUgS0VZX01BWAkJCTB4MmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaAppbmRleCA3MTI5NTA0Li5kZGE5ODQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKQEAgLTExMiw2ICsxMTIsNyBAQAogCiBleHRlcm4gaW50IHJlcXVlc3RfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldyk7CiBleHRlcm4gaW50IHJlbGVhc2VfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpuZXcpOwordm9pZCByZWxlYXNlX2NoaWxkX3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKm5ldyk7CiBleHRlcm4gdm9pZCByZXNlcnZlX3JlZ2lvbl93aXRoX3NwbGl0KHN0cnVjdCByZXNvdXJjZSAqcm9vdCwKIAkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kLAogCQkJICAgICBjb25zdCBjaGFyICpuYW1lKTsKQEAgLTEyMCw4ICsxMjEsMTAgQEAKIGV4dGVybiBpbnQgYWxsb2NhdGVfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldywKIAkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBtaW4sCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBtYXgsIHJlc291cmNlX3NpemVfdCBhbGlnbiwKLQkJCSAgICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCQkJICAgIHJlc291cmNlX3NpemVfdCwgcmVzb3VyY2Vfc2l6ZV90KSwKKwkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHJlc291cmNlICosCisJCQkJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90LAorCQkJCQkJICAgICAgIHJlc291cmNlX3NpemVfdCksCiAJCQkgICAgIHZvaWQgKmFsaWduZl9kYXRhKTsKIGludCBhZGp1c3RfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzdGFydCwKIAkJICAgIHJlc291cmNlX3NpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IDQ1MTQ4MWMuLmQxMzQ5MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtOTAsNyArOTAsNyBAQAogICogQHN0YXJ0dXA6CQlzdGFydCB1cCB0aGUgaW50ZXJydXB0IChkZWZhdWx0cyB0byAtPmVuYWJsZSBpZiBOVUxMKQogICogQHNodXRkb3duOgkJc2h1dCBkb3duIHRoZSBpbnRlcnJ1cHQgKGRlZmF1bHRzIHRvIC0+ZGlzYWJsZSBpZiBOVUxMKQogICogQGVuYWJsZToJCWVuYWJsZSB0aGUgaW50ZXJydXB0IChkZWZhdWx0cyB0byBjaGlwLT51bm1hc2sgaWYgTlVMTCkKLSAqIEBkaXNhYmxlOgkJZGlzYWJsZSB0aGUgaW50ZXJydXB0IChkZWZhdWx0cyB0byBjaGlwLT5tYXNrIGlmIE5VTEwpCisgKiBAZGlzYWJsZToJCWRpc2FibGUgdGhlIGludGVycnVwdAogICogQGFjazoJCXN0YXJ0IG9mIGEgbmV3IGludGVycnVwdAogICogQG1hc2s6CQltYXNrIGFuIGludGVycnVwdCBzb3VyY2UKICAqIEBtYXNrX2FjazoJCWFjayBhbmQgbWFzayBhbiBpbnRlcnJ1cHQgc291cmNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCAzMjhiY2E2Li4xMjIxZDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTEyNCw3ICsxMjQsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAKLSAgdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpOworICB2b2lkIF9fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCk7CiAvKioKICAqIG1pZ2h0X3NsZWVwIC0gYW5ub3RhdGlvbiBmb3IgZnVuY3Rpb25zIHRoYXQgY2FuIHNsZWVwCiAgKgpAQCAtMTM4LDcgKzEzOCw4IEBACiAjIGRlZmluZSBtaWdodF9zbGVlcCgpIFwKIAlkbyB7IF9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCAwKTsgbWlnaHRfcmVzY2hlZCgpOyB9IHdoaWxlICgwKQogI2Vsc2UKLSAgc3RhdGljIGlubGluZSB2b2lkIF9fbWlnaHRfc2xlZXAoY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCkgeyB9CisgIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgIGludCBwcmVlbXB0X29mZnNldCkgeyB9CiAjIGRlZmluZSBtaWdodF9zbGVlcCgpIGRvIHsgbWlnaHRfcmVzY2hlZCgpOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdC5oIGIvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggOTY5ZjZlOS4uNWQ5YzY1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0LmgKQEAgLTIwNiw2ICsyMDYsMjAgQEAKIH0KIAogLyoqCisgKiBsaXN0X3JvdGF0ZV9sZWZ0IC0gcm90YXRlIHRoZSBsaXN0IHRvIHRoZSBsZWZ0CisgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGxpc3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3Rfcm90YXRlX2xlZnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdDsKKworCWlmICghbGlzdF9lbXB0eShoZWFkKSkgeworCQlmaXJzdCA9IGhlYWQtPm5leHQ7CisJCWxpc3RfbW92ZV90YWlsKGZpcnN0LCBoZWFkKTsKKwl9Cit9CisKKy8qKgogICogbGlzdF9pc19zaW5ndWxhciAtIHRlc3RzIHdoZXRoZXIgYSBsaXN0IGhhcyBqdXN0IG9uZSBlbnRyeS4KICAqIEBoZWFkOiB0aGUgbGlzdCB0byB0ZXN0LgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xtYi5oIGIvaW5jbHVkZS9saW51eC9sbWIuaAppbmRleCBlZjgyYjhmLi5mM2QxNDMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xtYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbG1iLmgKQEAgLTQyLDYgKzQyLDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBsbWJfYW5hbHl6ZSh2b2lkKTsKIGV4dGVybiBsb25nIGxtYl9hZGQodTY0IGJhc2UsIHU2NCBzaXplKTsKIGV4dGVybiBsb25nIGxtYl9yZW1vdmUodTY0IGJhc2UsIHU2NCBzaXplKTsKK2V4dGVybiBsb25nIF9faW5pdCBsbWJfZnJlZSh1NjQgYmFzZSwgdTY0IHNpemUpOwogZXh0ZXJuIGxvbmcgX19pbml0IGxtYl9yZXNlcnZlKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CiBleHRlcm4gdTY0IF9faW5pdCBsbWJfYWxsb2NfbmlkKHU2NCBzaXplLCB1NjQgYWxpZ24sIGludCBuaWQsCiAJCQkJdTY0ICgqbmlkX3JhbmdlKSh1NjQsIHU2NCwgaW50ICopKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKaW5kZXggOWNjZjBlMi4uMTAyMDZhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKQEAgLTUzNCw0ICs1MzQsOCBAQAogIyBkZWZpbmUgbWlnaHRfbG9ja19yZWFkKGxvY2spIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BST1ZFX1JDVQorZXh0ZXJuIHZvaWQgbG9ja2RlcF9yY3VfZGVyZWZlcmVuY2UoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50IGxpbmUpOworI2VuZGlmCisKICNlbmRpZiAvKiBfX0xJTlVYX0xPQ0tERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDYwYzQ2N2IuLjhiMmZhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI2NSw2ICsyNjUsOCBAQAogCXJldHVybiBhdG9taWNfaW5jX25vdF96ZXJvKCZwYWdlLT5fY291bnQpOwogfQogCitleHRlcm4gaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGZuKTsKKwogLyogU3VwcG9ydCBmb3IgdmlydHVhbGx5IG1hcHBlZCBwYWdlcyAqLwogc3RydWN0IHBhZ2UgKnZtYWxsb2NfdG9fcGFnZShjb25zdCB2b2lkICphZGRyKTsKIHVuc2lnbmVkIGxvbmcgdm1hbGxvY190b19wZm4oY29uc3Qgdm9pZCAqYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oIGIvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaAppbmRleCBlNzdjMWNlLi5hYjc3NjA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKQEAgLTUxLDYgKzUxLDggQEAKICNkZWZpbmUgXzRFQ0NDTlRFTgkoMHgxIDw8IDI0KQogI2RlZmluZSBfNEVDQ0VOCQkoMHgxIDw8IDIzKQogI2RlZmluZSBfNEVDQ0NPUlJFQ1QJKDB4MSA8PCAyMikKKyNkZWZpbmUgU0hCVVNTRUwJKDB4MSA8PCAyMCkKKyNkZWZpbmUgU0VMXzE2QklUCSgweDEgPDwgMTkpCiAjZGVmaW5lIFNOQU5EX0UJCSgweDEgPDwgMTgpCS8qIFNOQU5EICgwPTUxMiAxPTIwNDgpKi8KICNkZWZpbmUgUVRTRUxfRQkJKDB4MSA8PCAxNykKICNkZWZpbmUgRU5ESUFOCQkoMHgxIDw8IDE2KQkvKiAxID0gbGl0dGxlIGVuZGlhbiAqLwpAQCAtOTYsNiArOTgsNyBAQAogc3RydWN0IHNoX2ZsY3RsIHsKIAlzdHJ1Y3QgbXRkX2luZm8JCW10ZDsKIAlzdHJ1Y3QgbmFuZF9jaGlwCWNoaXA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKIAl2b2lkIF9faW9tZW0JCSpyZWc7CiAKIAl1aW50OF90CWRvbmVfYnVmZlsyMDQ4ICsgNjRdOwkvKiBtYXggc2l6ZSAyMDQ4ICsgNjQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2YuaCBiL2luY2x1ZGUvbGludXgvb2YuaAppbmRleCBlN2ZhY2Q4Li5mNmQ5Y2JjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZi5oCkBAIC0xOSw2ICsxOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZkZWYgQ09ORklHX09GCiAKIHR5cGVkZWYgdTMyIHBoYW5kbGU7CiB0eXBlZGVmIHUzMiBpaGFuZGxlOwpAQCAtMzksMTAgKzQ0LDcgQEAKIHN0cnVjdCBkZXZpY2Vfbm9kZSB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICp0eXBlOwotCXBoYW5kbGUJbm9kZTsKLSNpZiAhZGVmaW5lZChDT05GSUdfU1BBUkMpCi0JcGhhbmRsZSBsaW51eF9waGFuZGxlOwotI2VuZGlmCisJcGhhbmRsZSBwaGFuZGxlOwogCWNoYXIJKmZ1bGxfbmFtZTsKIAogCXN0cnVjdAlwcm9wZXJ0eSAqcHJvcGVydGllczsKQEAgLTYzLDYgKzY1LDExIEBACiAjZW5kaWYKIH07CiAKKy8qIFBvaW50ZXIgZm9yIGZpcnN0IGVudHJ5IGluIGNoYWluIG9mIGFsbCBub2Rlcy4gKi8KK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOworZXh0ZXJuIHJ3bG9ja190IGRldnRyZWVfbG9jazsKKwogc3RhdGljIGlubGluZSBpbnQgb2Zfbm9kZV9jaGVja19mbGFnKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbiwgdW5zaWduZWQgbG9uZyBmbGFnKQogewogCXJldHVybiB0ZXN0X2JpdChmbGFnLCAmbi0+X2ZsYWdzKTsKQEAgLTczLDEyICs4MCw2IEBACiAJc2V0X2JpdChmbGFnLCAmbi0+X2ZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1zZXRfbm9kZV9wcm9jX2VudHJ5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCi17Ci0JZG4tPnBkZSA9IGRlOwotfQotCiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX2FsbF9ub2RlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXYpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1BBUkMpCkBAIC0xMDEsMjYgKzEwMiwzNiBAQAogICovCiAKIC8qIEhlbHBlciB0byByZWFkIGEgYmlnIG51bWJlcjsgc2l6ZSBpcyBpbiBjZWxscyAobm90IGJ5dGVzKSAqLwotc3RhdGljIGlubGluZSB1NjQgb2ZfcmVhZF9udW1iZXIoY29uc3QgdTMyICpjZWxsLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdTY0IG9mX3JlYWRfbnVtYmVyKGNvbnN0IF9fYmUzMiAqY2VsbCwgaW50IHNpemUpCiB7CiAJdTY0IHIgPSAwOwogCXdoaWxlIChzaXplLS0pCi0JCXIgPSAociA8PCAzMikgfCAqKGNlbGwrKyk7CisJCXIgPSAociA8PCAzMikgfCBiZTMyX3RvX2NwdSgqKGNlbGwrKykpOwogCXJldHVybiByOwogfQogCiAvKiBMaWtlIG9mX3JlYWRfbnVtYmVyLCBidXQgd2Ugd2FudCBhbiB1bnNpZ25lZCBsb25nIHJlc3VsdCAqLwotI2lmZGVmIENPTkZJR19QUEMzMgotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9mX3JlYWRfdWxvbmcoY29uc3QgdTMyICpjZWxsLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvZl9yZWFkX3Vsb25nKGNvbnN0IF9fYmUzMiAqY2VsbCwgaW50IHNpemUpCiB7Ci0JcmV0dXJuIGNlbGxbc2l6ZS0xXTsKKwkvKiB0b3NzIGF3YXkgdXBwZXIgYml0cyBpZiB1bnNpZ25lZCBsb25nIGlzIHNtYWxsZXIgdGhhbiB1NjQgKi8KKwlyZXR1cm4gb2ZfcmVhZF9udW1iZXIoY2VsbCwgc2l6ZSk7CiB9Ci0jZWxzZQotI2RlZmluZSBvZl9yZWFkX3Vsb25nKGNlbGwsIHNpemUpCW9mX3JlYWRfbnVtYmVyKGNlbGwsIHNpemUpCi0jZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKKy8qIERlZmF1bHQgI2FkZHJlc3MgYW5kICNzaXplIGNlbGxzLiAgQWxsb3cgYXJjaCBhc20vcHJvbS5oIHRvIG92ZXJyaWRlICovCisjaWYgIWRlZmluZWQoT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVCkKKyNkZWZpbmUgT0ZfUk9PVF9OT0RFX0FERFJfQ0VMTFNfREVGQVVMVCAxCisjZGVmaW5lIE9GX1JPT1RfTk9ERV9TSVpFX0NFTExTX0RFRkFVTFQgMQorI2VuZGlmCisKKy8qIERlZmF1bHQgc3RyaW5nIGNvbXBhcmUgZnVuY3Rpb25zLCBBbGxvdyBhcmNoIGFzbS9wcm9tLmggdG8gb3ZlcnJpZGUgKi8KKyNpZiAhZGVmaW5lZChvZl9jb21wYXRfY21wKQorI2RlZmluZSBvZl9jb21wYXRfY21wKHMxLCBzMiwgbCkJc3RybmNhc2VjbXAoKHMxKSwgKHMyKSwgKGwpKQorI2RlZmluZSBvZl9wcm9wX2NtcChzMSwgczIpCQlzdHJjbXAoKHMxKSwgKHMyKSkKKyNkZWZpbmUgb2Zfbm9kZV9jbXAoczEsIHMyKQkJc3RyY2FzZWNtcCgoczEpLCAoczIpKQorI2VuZGlmCisKIC8qIGZsYWcgZGVzY3JpcHRpb25zICovCiAjZGVmaW5lIE9GX0RZTkFNSUMJMSAvKiBub2RlIGFuZCBwcm9wZXJ0aWVzIHdlcmUgYWxsb2NhdGVkIHZpYSBrbWFsbG9jICovCiAjZGVmaW5lIE9GX0RFVEFDSEVECTIgLyogbm9kZSBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIHRoZSBkZXZpY2UgdHJlZSAqLwpAQCAtMTg3LDQgKzE5OCwxOSBAQAogCWNvbnN0IGNoYXIgKmxpc3RfbmFtZSwgY29uc3QgY2hhciAqY2VsbHNfbmFtZSwgaW50IGluZGV4LAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKm91dF9ub2RlLCBjb25zdCB2b2lkICoqb3V0X2FyZ3MpOwogCitleHRlcm4gaW50IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpOworCitleHRlcm4gaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSogbnAsIHN0cnVjdCBwcm9wZXJ0eSogcHJvcCk7CitleHRlcm4gaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7CitleHRlcm4gaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAorCQkJCXN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9EWU5BTUlDKQorLyogRm9yIHVwZGF0aW5nIHRoZSBkZXZpY2UgdHJlZSBhdCBydW50aW1lICovCitleHRlcm4gdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CitleHRlcm4gdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19PRiAqLwogI2VuZGlmIC8qIF9MSU5VWF9PRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX2ZkdC5oIGIvaW5jbHVkZS9saW51eC9vZl9mZHQuaAppbmRleCA0MWQ0MzJiLi5hMWNhOTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX2ZkdC5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfZmR0LmgKQEAgLTQyLDQ1ICs0Miw2MiBAQAogICogZW5kcyB3aGVuIHNpemUgaXMgMAogICovCiBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgewotCXUzMgltYWdpYzsJCQkvKiBtYWdpYyB3b3JkIE9GX0RUX0hFQURFUiAqLwotCXUzMgl0b3RhbHNpemU7CQkvKiB0b3RhbCBzaXplIG9mIERUIGJsb2NrICovCi0JdTMyCW9mZl9kdF9zdHJ1Y3Q7CQkvKiBvZmZzZXQgdG8gc3RydWN0dXJlICovCi0JdTMyCW9mZl9kdF9zdHJpbmdzOwkJLyogb2Zmc2V0IHRvIHN0cmluZ3MgKi8KLQl1MzIJb2ZmX21lbV9yc3ZtYXA7CQkvKiBvZmZzZXQgdG8gbWVtb3J5IHJlc2VydmUgbWFwICovCi0JdTMyCXZlcnNpb247CQkvKiBmb3JtYXQgdmVyc2lvbiAqLwotCXUzMglsYXN0X2NvbXBfdmVyc2lvbjsJLyogbGFzdCBjb21wYXRpYmxlIHZlcnNpb24gKi8KKwlfX2JlMzIJbWFnaWM7CQkJLyogbWFnaWMgd29yZCBPRl9EVF9IRUFERVIgKi8KKwlfX2JlMzIJdG90YWxzaXplOwkJLyogdG90YWwgc2l6ZSBvZiBEVCBibG9jayAqLworCV9fYmUzMglvZmZfZHRfc3RydWN0OwkJLyogb2Zmc2V0IHRvIHN0cnVjdHVyZSAqLworCV9fYmUzMglvZmZfZHRfc3RyaW5nczsJCS8qIG9mZnNldCB0byBzdHJpbmdzICovCisJX19iZTMyCW9mZl9tZW1fcnN2bWFwOwkJLyogb2Zmc2V0IHRvIG1lbW9yeSByZXNlcnZlIG1hcCAqLworCV9fYmUzMgl2ZXJzaW9uOwkJLyogZm9ybWF0IHZlcnNpb24gKi8KKwlfX2JlMzIJbGFzdF9jb21wX3ZlcnNpb247CS8qIGxhc3QgY29tcGF0aWJsZSB2ZXJzaW9uICovCiAJLyogdmVyc2lvbiAyIGZpZWxkcyBiZWxvdyAqLwotCXUzMglib290X2NwdWlkX3BoeXM7CS8qIFBoeXNpY2FsIENQVSBpZCB3ZSdyZSBib290aW5nIG9uICovCisJX19iZTMyCWJvb3RfY3B1aWRfcGh5czsJLyogUGh5c2ljYWwgQ1BVIGlkIHdlJ3JlIGJvb3Rpbmcgb24gKi8KIAkvKiB2ZXJzaW9uIDMgZmllbGRzIGJlbG93ICovCi0JdTMyCWR0X3N0cmluZ3Nfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgRFQgc3RyaW5ncyBibG9jayAqLworCV9fYmUzMglkdF9zdHJpbmdzX3NpemU7CS8qIHNpemUgb2YgdGhlIERUIHN0cmluZ3MgYmxvY2sgKi8KIAkvKiB2ZXJzaW9uIDE3IGZpZWxkcyBiZWxvdyAqLwotCXUzMglkdF9zdHJ1Y3Rfc2l6ZTsJCS8qIHNpemUgb2YgdGhlIERUIHN0cnVjdHVyZSBibG9jayAqLworCV9fYmUzMglkdF9zdHJ1Y3Rfc2l6ZTsJCS8qIHNpemUgb2YgdGhlIERUIHN0cnVjdHVyZSBibG9jayAqLwogfTsKIAorLyogVEJEOiBUZW1wb3JhcnkgZXhwb3J0IG9mIGZkdCBnbG9iYWxzIC0gcmVtb3ZlIHdoZW4gY29kZSBmdWxseSBtZXJnZWQgKi8KK2V4dGVybiBpbnQgX19pbml0ZGF0YSBkdF9yb290X2FkZHJfY2VsbHM7CitleHRlcm4gaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOworZXh0ZXJuIHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqaW5pdGlhbF9ib290X3BhcmFtczsKKwogLyogRm9yIHNjYW5uaW5nIHRoZSBmbGF0IGRldmljZS10cmVlIGF0IGJvb3QgdGltZSAqLwotZXh0ZXJuIGludCBfX2luaXQgb2Zfc2Nhbl9mbGF0X2R0KGludCAoKml0KSh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLAotCQkJCQkgICAgdm9pZCAqZGF0YSksCi0JCQkJICB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIF9faW5pdCAqb2ZfZ2V0X2ZsYXRfZHRfcHJvcCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCXVuc2lnbmVkIGxvbmcgKnNpemUpOwotZXh0ZXJuIGludCBfX2luaXQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICAgY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKTsKK2V4dGVybiBjaGFyICpmaW5kX2ZsYXRfZHRfc3RyaW5nKHUzMiBvZmZzZXQpOworZXh0ZXJuIGludCBvZl9zY2FuX2ZsYXRfZHQoaW50ICgqaXQpKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpLAorCQkJICAgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCAqb2ZfZ2V0X2ZsYXRfZHRfcHJvcCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUpOworZXh0ZXJuIGludCBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9mX2dldF9mbGF0X2R0X3Jvb3Qodm9pZCk7CitleHRlcm4gdm9pZCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX2FyY2godW5zaWduZWQgbG9uZyBub2RlKTsKK2V4dGVybiBpbnQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbih1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgICAgaW50IGRlcHRoLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpOworZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2godTY0IGJhc2UsIHU2NCBzaXplKTsKK2V4dGVybiB1NjQgZWFybHlfaW5pdF9kdF9hbGxvY19tZW1vcnlfYXJjaCh1NjQgc2l6ZSwgdTY0IGFsaWduKTsKK2V4dGVybiB1NjQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgX19iZTMyICoqY2VsbHApOworCisvKgorICogSWYgQkxLX0RFVl9JTklUUkQsIHRoZSBmZHQgZWFybHkgaW5pdCBjb2RlIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uLAorICogdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGFyY2ggY29kZS4gc3RhcnQgYW5kIGVuZCBhcmUgc3BlY2lmaWVkIGFzCisgKiBwaHlzaWNhbCBhZGRyZXNzZXMuCisgKi8KKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfZHRfc2V0dXBfaW5pdHJkX2FyY2godW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNlbmRpZgorCisvKiBFYXJseSBmbGF0IHRyZWUgc2NhbiBob29rcyAqLworZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSk7CiAKIC8qIE90aGVyIFByb3RvdHlwZXMgKi8KLWV4dGVybiB2b2lkIGZpbmlzaF9kZXZpY2VfdHJlZSh2b2lkKTsKIGV4dGVybiB2b2lkIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKTsKIGV4dGVybiB2b2lkIGVhcmx5X2luaXRfZGV2dHJlZSh2b2lkICopOwotZXh0ZXJuIGludCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0KTsKLWV4dGVybiB2b2lkIHByaW50X3Byb3BlcnRpZXMoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKLWV4dGVybiBpbnQgcHJvbV9uX2ludHJfY2VsbHMoc3RydWN0IGRldmljZV9ub2RlKiBucCk7Ci1leHRlcm4gdm9pZCBwcm9tX2dldF9pcnFfc2Vuc2VzKHVuc2lnbmVkIGNoYXIgKnNlbnNlcywgaW50IG9mZiwgaW50IG1heCk7Ci1leHRlcm4gaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSogbnAsIHN0cnVjdCBwcm9wZXJ0eSogcHJvcCk7Ci1leHRlcm4gaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7Ci1leHRlcm4gaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAotCQkJCXN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCk7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfTElOVVhfT0ZfRkRUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFkYXRhLmggYi9pbmNsdWRlL2xpbnV4L3BhZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjExZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZGF0YS5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBwYWRhdGEuaCAtIGhlYWRlciBmb3IgdGhlIHBhZGF0YSBwYXJhbGxlbGl6YXRpb24gaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2lmbmRlZiBQQURBVEFfSAorI2RlZmluZSBQQURBVEFfSAorCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCBwYWRhdGFfcHJpdiB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBwYXJhbGxlbF9kYXRhCSpwZDsKKwlpbnQJCQljYl9jcHU7CisJaW50CQkJc2VxX25yOworCWludAkJCWluZm87CisJdm9pZCAgICAgICAgICAgICAgICAgICAgKCpwYXJhbGxlbCkoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpOworCXZvaWQgICAgICAgICAgICAgICAgICAgICgqc2VyaWFsKShzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSk7Cit9OworCitzdHJ1Y3QgcGFkYXRhX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7CisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsKK307CisKK3N0cnVjdCBwYWRhdGFfcXVldWUgeworCXN0cnVjdCBwYWRhdGFfbGlzdAlwYXJhbGxlbDsKKwlzdHJ1Y3QgcGFkYXRhX2xpc3QJcmVvcmRlcjsKKwlzdHJ1Y3QgcGFkYXRhX2xpc3QJc2VyaWFsOworCXN0cnVjdCB3b3JrX3N0cnVjdAlwd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc3dvcms7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgICAgKnBkOworCWF0b21pY190CQludW1fb2JqOworCWludAkJCWNwdV9pbmRleDsKK307CisKK3N0cnVjdCBwYXJhbGxlbF9kYXRhIHsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlCSpwaW5zdDsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlCSpxdWV1ZTsKKwlhdG9taWNfdAkJc2VxX25yOworCWF0b21pY190CQlyZW9yZGVyX29iamVjdHM7CisJYXRvbWljX3QgICAgICAgICAgICAgICAgcmVmY250OworCXVuc2lnbmVkIGludAkJbWF4X3NlcV9ucjsKKwljcHVtYXNrX3Zhcl90CQljcHVtYXNrOworCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7Cit9OworCitzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlIHsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgICBjcHVfbm90aWZpZXI7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhCSpwZDsKKwljcHVtYXNrX3Zhcl90ICAgICAgICAgICBjcHVtYXNrOworCXN0cnVjdCBtdXRleAkJbG9jazsKKwl1OAkJCWZsYWdzOworI2RlZmluZQlQQURBVEFfSU5JVAkJMQorI2RlZmluZQlQQURBVEFfUkVTRVQJCTIKK307CisKK2V4dGVybiBzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwYWRhdGFfYWxsb2MoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkJCSAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOworZXh0ZXJuIHZvaWQgcGFkYXRhX2ZyZWUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpOworZXh0ZXJuIGludCBwYWRhdGFfZG9fcGFyYWxsZWwoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCQkgICAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSwgaW50IGNiX2NwdSk7CitleHRlcm4gdm9pZCBwYWRhdGFfZG9fc2VyaWFsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKTsKK2V4dGVybiBpbnQgcGFkYXRhX3NldF9jcHVtYXNrKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJICAgICAgY3B1bWFza192YXJfdCBjcHVtYXNrKTsKK2V4dGVybiBpbnQgcGFkYXRhX2FkZF9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpOworZXh0ZXJuIGludCBwYWRhdGFfcmVtb3ZlX2NwdShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdSk7CitleHRlcm4gdm9pZCBwYWRhdGFfc3RhcnQoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpOworZXh0ZXJuIHZvaWQgcGFkYXRhX3N0b3Aoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKaW5kZXggOTNhN2MwOGYuLmM4YjY0NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKQEAgLTExLDYgKzExLDEzIEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCiAjaWZkZWYgQ09ORklHX0FDUEkKK2V4dGVybiBhY3BpX3N0YXR1cyBwY2lfYWNwaV9hZGRfYnVzX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBwY2lfYnVzICpwY2lfYnVzKTsKK2V4dGVybiBhY3BpX3N0YXR1cyBwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KTsKK2V4dGVybiBhY3BpX3N0YXR1cyBwY2lfYWNwaV9hZGRfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpOworZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9hY3BpX3JlbW92ZV9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7CisKIHN0YXRpYyBpbmxpbmUgYWNwaV9oYW5kbGUgYWNwaV9maW5kX3Jvb3RfYnJpZGdlX2hhbmRsZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGJ1cyA9IHBkZXYtPmJ1czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IGMxOTY4ZjQuLjI1ODEzNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMTg3LDYgKzE4NywzMyBAQAogCVBDSV9CVVNfRkxBR1NfTk9fTU1SQkMgPSAoX19mb3JjZSBwY2lfYnVzX2ZsYWdzX3QpIDIsCiB9OwogCisvKiBCYXNlZCBvbiB0aGUgUENJIEhvdHBsdWcgU3BlYywgYnV0IHNvbWUgdmFsdWVzIGFyZSBtYWRlIHVwIGJ5IHVzICovCitlbnVtIHBjaV9idXNfc3BlZWQgeworCVBDSV9TUEVFRF8zM01IegkJCT0gMHgwMCwKKwlQQ0lfU1BFRURfNjZNSHoJCQk9IDB4MDEsCisJUENJX1NQRUVEXzY2TUh6X1BDSVgJCT0gMHgwMiwKKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVgJCT0gMHgwMywKKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVgJCT0gMHgwNCwKKwlQQ0lfU1BFRURfNjZNSHpfUENJWF9FQ0MJPSAweDA1LAorCVBDSV9TUEVFRF8xMDBNSHpfUENJWF9FQ0MJPSAweDA2LAorCVBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0MJPSAweDA3LAorCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzI2Ngk9IDB4MDksCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYXzI2Ngk9IDB4MGEsCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2Ngk9IDB4MGIsCisJQUdQX1VOS05PV04JCQk9IDB4MGMsCisJQUdQXzFYCQkJCT0gMHgwZCwKKwlBR1BfMlgJCQkJPSAweDBlLAorCUFHUF80WAkJCQk9IDB4MGYsCisJQUdQXzhYCQkJCT0gMHgxMCwKKwlQQ0lfU1BFRURfNjZNSHpfUENJWF81MzMJPSAweDExLAorCVBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzMJPSAweDEyLAorCVBDSV9TUEVFRF8xMzNNSHpfUENJWF81MzMJPSAweDEzLAorCVBDSUVfU1BFRURfMl81R1QJCT0gMHgxNCwKKwlQQ0lFX1NQRUVEXzVfMEdUCQk9IDB4MTUsCisJUENJRV9TUEVFRF84XzBHVAkJPSAweDE2LAorCVBDSV9TUEVFRF9VTktOT1dOCQk9IDB4ZmYsCit9OworCiBzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSB7CiAJc3RydWN0IGhsaXN0X25vZGUgbmV4dDsKIAljaGFyIGNhcF9ucjsKQEAgLTIzOSw2ICsyNjYsNyBAQAogCQkJCQkgICBjb25maWd1cmF0aW9uIHNwYWNlICovCiAJdW5zaWduZWQgaW50CXBtZV9zdXBwb3J0OjU7CS8qIEJpdG1hc2sgb2Ygc3RhdGVzIGZyb20gd2hpY2ggUE1FIwogCQkJCQkgICBjYW4gYmUgZ2VuZXJhdGVkICovCisJdW5zaWduZWQgaW50CXBtZV9pbnRlcnJ1cHQ6MTsKIAl1bnNpZ25lZCBpbnQJZDFfc3VwcG9ydDoxOwkvKiBMb3cgcG93ZXIgc3RhdGUgRDEgaXMgc3VwcG9ydGVkICovCiAJdW5zaWduZWQgaW50CWQyX3N1cHBvcnQ6MTsJLyogTG93IHBvd2VyIHN0YXRlIEQyIGlzIHN1cHBvcnRlZCAqLwogCXVuc2lnbmVkIGludAlub19kMWQyOjE7CS8qIE9ubHkgYWxsb3cgRDAgYW5kIEQzICovCkBAIC0yNzUsNyArMzAzLDggQEAKIAl1bnNpZ25lZCBpbnQJbXNpeF9lbmFibGVkOjE7CiAJdW5zaWduZWQgaW50CWFyaV9lbmFibGVkOjE7CS8qIEFSSSBmb3J3YXJkaW5nICovCiAJdW5zaWduZWQgaW50CWlzX21hbmFnZWQ6MTsKLQl1bnNpZ25lZCBpbnQJaXNfcGNpZToxOworCXVuc2lnbmVkIGludAlpc19wY2llOjE7CS8qIE9ic29sZXRlLiBXaWxsIGJlIHJlbW92ZWQuCisJCQkJCSAgIFVzZSBwY2lfaXNfcGNpZSgpIGluc3RlYWQgKi8KIAl1bnNpZ25lZCBpbnQgICAgbmVlZHNfZnJlc2V0OjE7IC8qIERldiByZXF1aXJlcyBmdW5kYW1lbnRhbCByZXNldCAqLwogCXVuc2lnbmVkIGludAlzdGF0ZV9zYXZlZDoxOwogCXVuc2lnbmVkIGludAlpc19waHlzZm46MTsKQEAgLTMzNSw5ICszNjQsMjYgQEAKIAlobGlzdF9hZGRfaGVhZCgmbmV3X2NhcC0+bmV4dCwgJnBjaV9kZXYtPnNhdmVkX2NhcF9zcGFjZSk7CiB9CiAKLSNpZm5kZWYgUENJX0JVU19OVU1fUkVTT1VSQ0VTCi0jZGVmaW5lIFBDSV9CVVNfTlVNX1JFU09VUkNFUwkxNgotI2VuZGlmCisvKgorICogVGhlIGZpcnN0IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNIFBDSSBidXMgcmVzb3VyY2VzICh0aG9zZSB0aGF0IGNvcnJlc3BvbmQKKyAqIHRvIFAyUCBvciBDYXJkQnVzIGJyaWRnZSB3aW5kb3dzKSBnbyBpbiBhIHRhYmxlLiAgQWRkaXRpb25hbCBvbmVzIChmb3IKKyAqIGJ1c2VzIGJlbG93IGhvc3QgYnJpZGdlcyBvciBzdWJ0cmFjdGl2ZSBkZWNvZGUgYnJpZGdlcykgZ28gaW4gdGhlIGxpc3QuCisgKiBVc2UgcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZSgpIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHJlc291cmNlcy4KKyAqLworCisvKgorICogUENJX1NVQlRSQUNUSVZFX0RFQ09ERSBtZWFucyB0aGUgYnJpZGdlIGZvcndhcmRzIHRoZSB3aW5kb3cgaW1wbGljaXRseQorICogYW5kIHRoZXJlJ3Mgbm8gd2F5IHRvIHByb2dyYW0gdGhlIGJyaWRnZSB3aXRoIHRoZSBkZXRhaWxzIG9mIHRoZSB3aW5kb3cuCisgKiBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIEFDUEkgX0NSUyB3aW5kb3dzLCBldmVuIHdpdGggdGhlIF9ERUMgc3VidHJhY3RpdmUtCisgKiBkZWNvZGUgYml0IHNldCwgYmVjYXVzZSB0aGV5IGFyZSBleHBsaWNpdCBhbmQgY2FuIGJlIHByb2dyYW1tZWQgd2l0aCBfU1JTLgorICovCisjZGVmaW5lIFBDSV9TVUJUUkFDVElWRV9ERUNPREUJMHgxCisKK3N0cnVjdCBwY2lfYnVzX3Jlc291cmNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKIAogI2RlZmluZSBQQ0lfUkVHSU9OX0ZMQUdfTUFTSwkweDBmVQkvKiBUaGVzZSBiaXRzIG9mIHJlc291cmNlIGZsYWdzIHRlbGwgdXMgdGhlIFBDSSByZWdpb24gZmxhZ3MgKi8KIApAQCAtMzQ4LDggKzM5NCw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBkZXZpY2VzOwkvKiBsaXN0IG9mIGRldmljZXMgb24gdGhpcyBidXMgKi8KIAlzdHJ1Y3QgcGNpX2Rldgkqc2VsZjsJCS8qIGJyaWRnZSBkZXZpY2UgYXMgc2VlbiBieSBwYXJlbnQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsb3RzOwkJLyogbGlzdCBvZiBzbG90cyBvbiB0aGlzIGJ1cyAqLwotCXN0cnVjdCByZXNvdXJjZQkqcmVzb3VyY2VbUENJX0JVU19OVU1fUkVTT1VSQ0VTXTsKLQkJCQkJLyogYWRkcmVzcyBzcGFjZSByb3V0ZWQgdG8gdGhpcyBidXMgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlW1BDSV9CUklER0VfUkVTT1VSQ0VfTlVNXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlczsJLyogYWRkcmVzcyBzcGFjZSByb3V0ZWQgdG8gdGhpcyBidXMgKi8KIAogCXN0cnVjdCBwY2lfb3BzCSpvcHM7CQkvKiBjb25maWd1cmF0aW9uIGFjY2VzcyBmdW5jdGlvbnMgKi8KIAl2b2lkCQkqc3lzZGF0YTsJLyogaG9vayBmb3Igc3lzLXNwZWNpZmljIGV4dGVuc2lvbiAqLwpAQCAtMzU5LDYgKzQwNSw4IEBACiAJdW5zaWduZWQgY2hhcglwcmltYXJ5OwkvKiBudW1iZXIgb2YgcHJpbWFyeSBicmlkZ2UgKi8KIAl1bnNpZ25lZCBjaGFyCXNlY29uZGFyeTsJLyogbnVtYmVyIG9mIHNlY29uZGFyeSBicmlkZ2UgKi8KIAl1bnNpZ25lZCBjaGFyCXN1Ym9yZGluYXRlOwkvKiBtYXggbnVtYmVyIG9mIHN1Ym9yZGluYXRlIGJ1c2VzICovCisJdW5zaWduZWQgY2hhcgltYXhfYnVzX3NwZWVkOwkvKiBlbnVtIHBjaV9idXNfc3BlZWQgKi8KKwl1bnNpZ25lZCBjaGFyCWN1cl9idXNfc3BlZWQ7CS8qIGVudW0gcGNpX2J1c19zcGVlZCAqLwogCiAJY2hhcgkJbmFtZVs0OF07CiAKQEAgLTU2Myw3ICs2MTEsOCBAQAogY2hhciAqcGNpYmlvc19zZXR1cChjaGFyICpzdHIpOwogCiAvKiBVc2VkIG9ubHkgd2hlbiBkcml2ZXJzL3BjaS9zZXR1cC5jIGlzIHVzZWQgKi8KLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLCByZXNvdXJjZV9zaXplX3QsCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICosIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCXJlc291cmNlX3NpemVfdCwKIAkJCQlyZXNvdXJjZV9zaXplX3QpOwogdm9pZCBwY2liaW9zX3VwZGF0ZV9pcnEoc3RydWN0IHBjaV9kZXYgKiwgaW50IGlycSk7CiAKQEAgLTU4OSw2ICs2MzgsNyBAQAogCQkJICAgICAgIHN0cnVjdCBwY2lfb3BzICpvcHMsIHZvaWQgKnN5c2RhdGEpOwogc3RydWN0IHBjaV9idXMgKnBjaV9hZGRfbmV3X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCWludCBidXNucik7Cit2b2lkIHBjaWVfdXBkYXRlX2xpbmtfc3BlZWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdTE2IGxpbmtfc3RhdHVzKTsKIHN0cnVjdCBwY2lfc2xvdCAqcGNpX2NyZWF0ZV9zbG90KHN0cnVjdCBwY2lfYnVzICpwYXJlbnQsIGludCBzbG90X25yLAogCQkJCSBjb25zdCBjaGFyICpuYW1lLAogCQkJCSBzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnKTsKQEAgLTYxNSwxMiArNjY1LDYgQEAKIAogLyogR2VuZXJpYyBQQ0kgZnVuY3Rpb25zIGV4cG9ydGVkIHRvIGNhcmQgZHJpdmVycyAqLwogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKLXN0cnVjdCBwY2lfZGV2IF9fZGVwcmVjYXRlZCAqcGNpX2ZpbmRfZGV2aWNlKHVuc2lnbmVkIGludCB2ZW5kb3IsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IGRldmljZSwKLQkJCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7Ci0jZW5kaWYgLyogQ09ORklHX1BDSV9MRUdBQ1kgKi8KLQogZW51bSBwY2lfbG9zdF9pbnRlcnJ1cHRfcmVhc29uIHsKIAlQQ0lfTE9TVF9JUlFfTk9fSU5GT1JNQVRJT04gPSAwLAogCVBDSV9MT1NUX0lSUV9ESVNBQkxFX01TSSwKQEAgLTc1MCwxMSArNzk0LDE5IEBACiBwY2lfcG93ZXJfdCBwY2lfY2hvb3NlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBib29sIHBjaV9wbWVfY2FwYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSk7CiB2b2lkIHBjaV9wbWVfYWN0aXZlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKLWludCBwY2lfZW5hYmxlX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsIGJvb2wgZW5hYmxlKTsKK2ludCBfX3BjaV9lbmFibGVfd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSwKKwkJICAgICAgYm9vbCBydW50aW1lLCBib29sIGVuYWJsZSk7CiBpbnQgcGNpX3dha2VfZnJvbV9kMyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSk7CiBwY2lfcG93ZXJfdCBwY2lfdGFyZ2V0X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9wcmVwYXJlX3RvX3NsZWVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9iYWNrX2Zyb21fc2xlZXAoc3RydWN0IHBjaV9kZXYgKmRldik7Citib29sIHBjaV9kZXZfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9lbmFibGVfd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSwKKwkJCQkgIGJvb2wgZW5hYmxlKQoreworCXJldHVybiBfX3BjaV9lbmFibGVfd2FrZShkZXYsIHN0YXRlLCBmYWxzZSwgZW5hYmxlKTsKK30KIAogLyogRm9yIHVzZSBieSBhcmNoIHdpdGggY3VzdG9tIHByb2JlIGNvZGUgKi8KIHZvaWQgc2V0X3BjaWVfcG9ydF90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKQEAgLTc3Niw2ICs4MjgsNyBAQAogdm9pZCBwY2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGludCBwY2lfY2xhaW1fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIHZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcyh2b2lkKTsKK3ZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVkX2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSk7CiB2b2lkIHBkZXZfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqKTsKIHZvaWQgcGRldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqKTsKIGludCBwY2lfZW5hYmxlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgbWFzayk7CkBAIC03OTMsMTIgKzg0NiwyMyBAQAogdm9pZCBwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHN0cnVjdCBwY2lfZGV2ICosIGludCk7CiAKIC8qIGRyaXZlcnMvcGNpL2J1cy5jICovCit2b2lkIHBjaV9idXNfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworc3RydWN0IHJlc291cmNlICpwY2lfYnVzX3Jlc291cmNlX24oY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IG4pOwordm9pZCBwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CisKKyNkZWZpbmUgcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaSkJCQkJXAorCWZvciAoaSA9IDA7CQkJCQkJCVwKKwkgICAgKHJlcyA9IHBjaV9idXNfcmVzb3VyY2VfbihidXMsIGkpKSB8fCBpIDwgUENJX0JSSURHRV9SRVNPVVJDRV9OVU07IFwKKwkgICAgIGkrKykKKwogaW50IF9fbXVzdF9jaGVjayBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsCiAJCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCiAJCQlyZXNvdXJjZV9zaXplX3QgYWxpZ24sIHJlc291cmNlX3NpemVfdCBtaW4sCiAJCQl1bnNpZ25lZCBpbnQgdHlwZV9tYXNrLAotCQkJdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCQlyZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCksCisJCQlyZXNvdXJjZV9zaXplX3QgKCphbGlnbmYpKHZvaWQgKiwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHJlc291cmNlICosCisJCQkJCQkgIHJlc291cmNlX3NpemVfdCwKKwkJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90KSwKIAkJCXZvaWQgKmFsaWduZl9kYXRhKTsKIHZvaWQgcGNpX2VuYWJsZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCkBAIC05NTksNiArMTAyMywxMSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QQ0lfRE9NQUlOUyAqLwogCisvKiBzb21lIGFyY2hpdGVjdHVyZXMgcmVxdWlyZSBhZGRpdGlvbmFsIHNldHVwIHRvIGRpcmVjdCBWR0EgdHJhZmZpYyAqLwordHlwZWRlZiBpbnQgKCphcmNoX3NldF92Z2Ffc3RhdGVfdCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgZGVjb2RlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9iaXRzLCBib29sIGNoYW5nZV9icmlkZ2UpOworZXh0ZXJuIHZvaWQgcGNpX3JlZ2lzdGVyX3NldF92Z2Ffc3RhdGUoYXJjaF9zZXRfdmdhX3N0YXRlX3QgZnVuYyk7CisKICNlbHNlIC8qIENPTkZJR19QQ0kgaXMgbm90IGVuYWJsZWQgKi8KIAogLyoKQEAgLTk3NywxMyArMTA0Niw2IEBACiBfUENJX05PUF9BTEwocmVhZCwgKikKIF9QQ0lfTk9QX0FMTCh3cml0ZSwpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZGV2aWNlLAotCQkJCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGV2aWNlLAogCQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpmcm9tKQpAQCAtMTI0MSw4ICsxMzAzLDEyIEBACiAJREVDTEFSRV9QQ0lfRklYVVBfU0VDVElPTigucGNpX2ZpeHVwX3N1c3BlbmQsCQkJXAogCQkJc3VzcGVuZCMjdmVuZG9yIyNkZXZpY2UjI2hvb2ssIHZlbmRvciwgZGV2aWNlLCBob29rKQogCi0KKyNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwogdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLAorCQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorI2VuZGlmCiAKIHZvaWQgX19pb21lbSAqcGNpbV9pb21hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXhsZW4pOwogdm9pZCBwY2ltX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmgKaW5kZXggNjUyYmE3OTcuLjVkMDljYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2hvdHBsdWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmgKQEAgLTI4LDI2ICsyOCw2IEBACiAjaWZuZGVmIF9QQ0lfSE9UUExVR19ICiAjZGVmaW5lIF9QQ0lfSE9UUExVR19ICiAKLQotLyogVGhlc2UgdmFsdWVzIGNvbWUgZnJvbSB0aGUgUENJIEhvdHBsdWcgU3BlYyAqLwotZW51bSBwY2lfYnVzX3NwZWVkIHsKLQlQQ0lfU1BFRURfMzNNSHoJCQk9IDB4MDAsCi0JUENJX1NQRUVEXzY2TUh6CQkJPSAweDAxLAotCVBDSV9TUEVFRF82Nk1Iel9QQ0lYCQk9IDB4MDIsCi0JUENJX1NQRUVEXzEwME1Iel9QQ0lYCQk9IDB4MDMsCi0JUENJX1NQRUVEXzEzM01Iel9QQ0lYCQk9IDB4MDQsCi0JUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDCT0gMHgwNSwKLQlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfRUNDCT0gMHgwNiwKLQlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDCT0gMHgwNywKLQlQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjYJPSAweDA5LAotCVBDSV9TUEVFRF8xMDBNSHpfUENJWF8yNjYJPSAweDBhLAotCVBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjYJPSAweDBiLAotCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMwk9IDB4MTEsCi0JUENJX1NQRUVEXzEwME1Iel9QQ0lYXzUzMwk9IDB4MTIsCi0JUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMwk9IDB4MTMsCi0JUENJX1NQRUVEX1VOS05PV04JCT0gMHhmZiwKLX07Ci0KIC8qIFRoZXNlIHZhbHVlcyBjb21lIGZyb20gdGhlIFBDSSBFeHByZXNzIFNwZWMgKi8KIGVudW0gcGNpZV9saW5rX3dpZHRoIHsKIAlQQ0lFX0xOS19XSURUSF9SRVNSVgk9IDB4MDAsCkBAIC02MSwxMiArNDEsNiBAQAogCVBDSUVfTE5LX1dJRFRIX1VOS05PV04gID0gMHhGRiwKIH07CiAKLWVudW0gcGNpZV9saW5rX3NwZWVkIHsKLQlQQ0lFXzJfNUdCCQk9IDB4MTQsCi0JUENJRV81XzBHQgkJPSAweDE1LAotCVBDSUVfTE5LX1NQRUVEX1VOS05PV04JPSAweEZGLAotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgaG90cGx1Z19zbG90X29wcyAtdGhlIGNhbGxiYWNrcyB0aGF0IHRoZSBob3RwbHVnIHBjaSBjb3JlIGNhbiB1c2UKICAqIEBvd25lcjogVGhlIG1vZHVsZSBvd25lciBvZiB0aGlzIHN0cnVjdHVyZQpAQCAtODksMTIgKzYzLDYgQEAKICAqIEBnZXRfYWRhcHRlcl9zdGF0dXM6IENhbGxlZCB0byBnZXQgc2VlIGlmIGFuIGFkYXB0ZXIgaXMgcHJlc2VudCBpbiB0aGUgc2xvdCBvciBub3QuCiAgKglJZiB0aGlzIGZpZWxkIGlzIE5VTEwsIHRoZSB2YWx1ZSBwYXNzZWQgaW4gdGhlIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbwogICoJd2lsbCBiZSB1c2VkIHdoZW4gdGhpcyB2YWx1ZSBpcyByZXF1ZXN0ZWQgYnkgYSB1c2VyLgotICogQGdldF9tYXhfYnVzX3NwZWVkOiBDYWxsZWQgdG8gZ2V0IHRoZSBtYXggYnVzIHNwZWVkIGZvciBhIHNsb3QuCi0gKglJZiB0aGlzIGZpZWxkIGlzIE5VTEwsIHRoZSB2YWx1ZSBwYXNzZWQgaW4gdGhlIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbwotICoJd2lsbCBiZSB1c2VkIHdoZW4gdGhpcyB2YWx1ZSBpcyByZXF1ZXN0ZWQgYnkgYSB1c2VyLgotICogQGdldF9jdXJfYnVzX3NwZWVkOiBDYWxsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGJ1cyBzcGVlZCBmb3IgYSBzbG90LgotICoJSWYgdGhpcyBmaWVsZCBpcyBOVUxMLCB0aGUgdmFsdWUgcGFzc2VkIGluIHRoZSBzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8KLSAqCXdpbGwgYmUgdXNlZCB3aGVuIHRoaXMgdmFsdWUgaXMgcmVxdWVzdGVkIGJ5IGEgdXNlci4KICAqCiAgKiBUaGUgdGFibGUgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGhvdHBsdWcgcGNpIGNvcmUgYnkgYQogICogaG90cGx1ZyBwY2kgZHJpdmVyLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgdGhlIGhvdHBsdWcgcGNpIGNvcmUgd2hlbgpAQCAtMTEyLDE3ICs4MCwxNCBAQAogCWludCAoKmdldF9hdHRlbnRpb25fc3RhdHVzKQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKIAlpbnQgKCpnZXRfbGF0Y2hfc3RhdHVzKQkJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiAJaW50ICgqZ2V0X2FkYXB0ZXJfc3RhdHVzKQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKLQlpbnQgKCpnZXRfbWF4X2J1c19zcGVlZCkJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwotCWludCAoKmdldF9jdXJfYnVzX3NwZWVkKQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7CiB9OwogCiAvKioKICAqIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAtIHVzZWQgdG8gbm90aWZ5IHRoZSBob3RwbHVnIHBjaSBjb3JlIG9mIHRoZSBzdGF0ZSBvZiB0aGUgc2xvdAotICogQHBvd2VyOiBpZiBwb3dlciBpcyBlbmFibGVkIG9yIG5vdCAoMS8wKQorICogQHBvd2VyX3N0YXR1czogaWYgcG93ZXIgaXMgZW5hYmxlZCBvciBub3QgKDEvMCkKICAqIEBhdHRlbnRpb25fc3RhdHVzOiBpZiB0aGUgYXR0ZW50aW9uIGxpZ2h0IGlzIGVuYWJsZWQgb3Igbm90ICgxLzApCiAgKiBAbGF0Y2hfc3RhdHVzOiBpZiB0aGUgbGF0Y2ggKGlmIGFueSkgaXMgb3BlbiBvciBjbG9zZWQgKDEvMCkKLSAqIEBhZGFwdGVyX3ByZXNlbnQ6IGlmIHRoZXJlIGlzIGEgcGNpIGJvYXJkIHByZXNlbnQgaW4gdGhlIHNsb3Qgb3Igbm90ICgxLzApCi0gKiBAYWRkcmVzczogKGRvbWFpbiA8PCAxNiB8IGJ1cyA8PCA4IHwgZGV2KQorICogQGFkYXB0ZXJfc3RhdHVzOiBpZiB0aGVyZSBpcyBhIHBjaSBib2FyZCBwcmVzZW50IGluIHRoZSBzbG90IG9yIG5vdCAoMS8wKQogICoKICAqIFVzZWQgdG8gbm90aWZ5IHRoZSBob3RwbHVnIHBjaSBjb3JlIG9mIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBzbG90LgogICovCkBAIC0xMzEsOCArOTYsNiBAQAogCXU4CWF0dGVudGlvbl9zdGF0dXM7CiAJdTgJbGF0Y2hfc3RhdHVzOwogCXU4CWFkYXB0ZXJfc3RhdHVzOwotCWVudW0gcGNpX2J1c19zcGVlZAltYXhfYnVzX3NwZWVkOwotCWVudW0gcGNpX2J1c19zcGVlZAljdXJfYnVzX3NwZWVkOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGNjYThhMDQuLjBiZTgyNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0yNDE3LDYgKzI0MTcsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQwX0hCCTB4MWEyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1X0hCCTB4MWEzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVQJMHgxYTM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ1BUX1NNQlVTCTB4MWMyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMxCTB4MWM0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMyCTB4MWM0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMAkweDI0MTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzEJMHgyNDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8zCTB4MjQxMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCmluZGV4IGE3Njg0YTUuLjc5NDY2MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKQEAgLTk4LDkgKzk4LDYgQEAKIAlmYmMtPmNvdW50ID0gYW1vdW50OwogfQogCi0jZGVmaW5lIF9fcGVyY3B1X2NvdW50ZXJfYWRkKGZiYywgYW1vdW50LCBiYXRjaCkgXAotCXBlcmNwdV9jb3VudGVyX2FkZChmYmMsIGFtb3VudCkKLQogc3RhdGljIGlubGluZSB2b2lkCiBwZXJjcHVfY291bnRlcl9hZGQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCBhbW91bnQpCiB7CkBAIC0xMDksNiArMTA2LDEyIEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitfX3BlcmNwdV9jb3VudGVyX2FkZChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYywgczY0IGFtb3VudCwgczMyIGJhdGNoKQoreworCXBlcmNwdV9jb3VudGVyX2FkZChmYmMsIGFtb3VudCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgczY0IHBlcmNwdV9jb3VudGVyX3JlYWQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpCiB7CiAJcmV0dXJuIGZiYy0+Y291bnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IGExNzc2OTguLjdiMThiNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0yODgsNyArMjg4LDcgQEAKIH07CiAKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0sJCSgzIDw8IDApCi0jZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9VTktOT1dOCQkoMCA8PCAwKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfVU5LTk9XTgkoMCA8PCAwKQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTAkJCSgxIDw8IDApCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfVVNFUgkJCSgyIDw8IDApCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUgkJKDMgPDwgMCkKQEAgLTM1NCw4ICszNTQsOCBAQAogCSAqCXU2NAkJCQlzdHJlYW1faWQ7CiAJICogfTsKIAkgKi8KLQlQRVJGX1JFQ09SRF9USFJPVFRMRQkJPSA1LAotCVBFUkZfUkVDT1JEX1VOVEhST1RUTEUJCT0gNiwKKwlQRVJGX1JFQ09SRF9USFJPVFRMRQkJCT0gNSwKKwlQRVJGX1JFQ09SRF9VTlRIUk9UVExFCQkJPSA2LAogCiAJLyoKIAkgKiBzdHJ1Y3QgewpAQCAtMzY5LDEwICszNjksMTAgQEAKIAogCS8qCiAJICogc3RydWN0IHsKLQkgKiAJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKiAJdTMyCQkJCXBpZCwgdGlkOworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoJdTMyCQkJCXBpZCwgdGlkOwogCSAqCi0JICogCXN0cnVjdCByZWFkX2Zvcm1hdAkJdmFsdWVzOworCSAqCXN0cnVjdCByZWFkX2Zvcm1hdAkJdmFsdWVzOwogCSAqIH07CiAJICovCiAJUEVSRl9SRUNPUkRfUkVBRAkJCT0gOCwKQEAgLTQxMCw3ICs0MTAsNyBAQAogCSAqCSAgY2hhciAgICAgICAgICAgICAgICAgIGRhdGFbc2l6ZV07fSYmIFBFUkZfU0FNUExFX1JBVwogCSAqIH07CiAJICovCi0JUEVSRl9SRUNPUkRfU0FNUExFCQk9IDksCisJUEVSRl9SRUNPUkRfU0FNUExFCQkJPSA5LAogCiAJUEVSRl9SRUNPUkRfTUFYLAkJCS8qIG5vbi1BQkkgKi8KIH07CkBAIC00NzYsOSArNDc2LDExIEBACiAJdW5pb24gewogCQlzdHJ1Y3QgeyAvKiBoYXJkd2FyZSAqLwogCQkJdTY0CQljb25maWc7CisJCQl1NjQJCWxhc3RfdGFnOwogCQkJdW5zaWduZWQgbG9uZwljb25maWdfYmFzZTsKIAkJCXVuc2lnbmVkIGxvbmcJZXZlbnRfYmFzZTsKIAkJCWludAkJaWR4OworCQkJaW50CQlsYXN0X2NwdTsKIAkJfTsKIAkJc3RydWN0IHsgLyogc29mdHdhcmUgKi8KIAkJCXM2NAkJcmVtYWluaW5nOwpAQCAtNDk2LDkgKzQ5OCw4IEBACiAJYXRvbWljNjRfdAkJCXBlcmlvZF9sZWZ0OwogCXU2NAkJCQlpbnRlcnJ1cHRzOwogCi0JdTY0CQkJCWZyZXFfY291bnQ7Ci0JdTY0CQkJCWZyZXFfaW50ZXJydXB0czsKLQl1NjQJCQkJZnJlcV9zdGFtcDsKKwl1NjQJCQkJZnJlcV90aW1lX3N0YW1wOworCXU2NAkJCQlmcmVxX2NvdW50X3N0YW1wOwogI2VuZGlmCiB9OwogCkBAIC01MTAsNiArNTExLDggQEAKIHN0cnVjdCBwbXUgewogCWludCAoKmVuYWJsZSkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqZGlzYWJsZSkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKwlpbnQgKCpzdGFydCkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKwl2b2lkICgqc3RvcCkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqcmVhZCkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqdW50aHJvdHRsZSkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogfTsKQEAgLTU2Myw2ICs1NjYsMTAgQEAKIAkJCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKiwKIAkJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCitlbnVtIHBlcmZfZ3JvdXBfZmxhZyB7CisJUEVSRl9HUk9VUF9TT0ZUV0FSRSA9IDB4MSwKK307CisKIC8qKgogICogc3RydWN0IHBlcmZfZXZlbnQgLSBwZXJmb3JtYW5jZSBldmVudCBrZXJuZWwgcmVwcmVzZW50YXRpb246CiAgKi8KQEAgLTU3Miw2ICs1NzksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCWV2ZW50X2VudHJ5OwogCXN0cnVjdCBsaXN0X2hlYWQJCXNpYmxpbmdfbGlzdDsKIAlpbnQJCQkJbnJfc2libGluZ3M7CisJaW50CQkJCWdyb3VwX2ZsYWdzOwogCXN0cnVjdCBwZXJmX2V2ZW50CQkqZ3JvdXBfbGVhZGVyOwogCXN0cnVjdCBwZXJmX2V2ZW50CQkqb3V0cHV0OwogCWNvbnN0IHN0cnVjdCBwbXUJCSpwbXU7CkBAIC02NTYsNyArNjY0LDcgQEAKIAogCXBlcmZfb3ZlcmZsb3dfaGFuZGxlcl90CQlvdmVyZmxvd19oYW5kbGVyOwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwogCXN0cnVjdCBldmVudF9maWx0ZXIJCSpmaWx0ZXI7CiAjZW5kaWYKIApAQCAtNjgxLDcgKzY4OSw4IEBACiAJICovCiAJc3RydWN0IG11dGV4CQkJbXV0ZXg7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlncm91cF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJCXBpbm5lZF9ncm91cHM7CisJc3RydWN0IGxpc3RfaGVhZAkJZmxleGlibGVfZ3JvdXBzOwogCXN0cnVjdCBsaXN0X2hlYWQJCWV2ZW50X2xpc3Q7CiAJaW50CQkJCW5yX2V2ZW50czsKIAlpbnQJCQkJbnJfYWN0aXZlOwpAQCAtNzQ0LDEwICs3NTMsOSBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAKLWV4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KTsKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiBleHRlcm4gaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwpAQCAtNzYyLDcgKzc3MCw3IEBACiBleHRlcm4gaW50IHBlcmZfZXZlbnRfdGFza19lbmFibGUodm9pZCk7CiBleHRlcm4gaW50IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciwKIAkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCBpbnQgY3B1KTsKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KTsKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiBleHRlcm4gaW50IHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIGV4dGVybiBzdHJ1Y3QgcGVyZl9ldmVudCAqCkBAIC04NTEsOCArODU5LDcgQEAKIGV4dGVybiBpbnQgc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGU7CiAKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LAotCQkJCSB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplKTsKK2V4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplKTsKIGV4dGVybiB2b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKTsKIAogI2lmbmRlZiBwZXJmX21pc2NfZmxhZ3MKQEAgLTg3MywxMiArODgwLDEyIEBACiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCQl7IH0KK3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQKIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50IGNwdSkJCXsgfQorCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkJCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQkJCXsgfQorcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQkJCQl7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCXsgfQpAQCAtODkzLDEzICs5MDAsMTMgQEAKIHBlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIGludCBubWksCiAJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkCi1wZXJmX2JwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkJCXsgfQorcGVyZl9icF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCQkJeyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2NvbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2luaXQodm9pZCkJCQkJeyB9Ci1zdGF0aWMgaW5saW5lIGludCAgcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCh2b2lkKSAgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50ICBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KHZvaWQpCQl7IHJldHVybiAtMTsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQoaW50IHJjdHgpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQkJeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaCBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCmluZGV4IDIyOGIwYjYuLjBiODBjODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCkBAIC0zMTUsNiArMzE1LDcgQEAKICNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTX0dDTV9JQ1YxMgkxOQogI2RlZmluZSBTQURCX1hfRUFMR19BRVNfR0NNX0lDVjE2CTIwCiAjZGVmaW5lIFNBREJfWF9FQUxHX0NBTUVMTElBQ0JDCQkyMgorI2RlZmluZSBTQURCX1hfRUFMR19OVUxMX0FFU19HTUFDCTIzCiAjZGVmaW5lIFNBREJfRUFMR19NQVggICAgICAgICAgICAgICAgICAgMjUzIC8qIGxhc3QgRUFMRyAqLwogLyogcHJpdmF0ZSBhbGxvY2F0aW9ucyBzaG91bGQgdXNlIDI0OS0yNTUgKFJGQzI0MDcpICovCiAjZGVmaW5lIFNBREJfWF9FQUxHX1NFUlBFTlRDQkMgIDI1MiAgICAgLyogZHJhZnQtaWV0Zi1pcHNlYy1jaXBoLWFlcy1jYmMtMDAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxpc3QuaCBiL2luY2x1ZGUvbGludXgvcGxpc3QuaAppbmRleCA4MjI3ZjcxLi42ODk4OTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGlzdC5oCkBAIC00NSw3ICs0NSw3IEBACiAgKiB0aGUgaW5zZXJ0aW9uIG9mIG5ldyBub2Rlcy4gVGhlcmUgYXJlIG5vIG5vZGVzIHdpdGggZHVwbGljYXRlCiAgKiBwcmlvcml0ZXMgb24gdGhlIGxpc3QuCiAgKgotICogVGhlIG5vZGVzIG9uIHRoZSBub2RlX2xpc3QgaXMgb3JkZXJlZCBieSBwcmlvcml0eSBhbmQgY2FuIGNvbnRhaW4KKyAqIFRoZSBub2RlcyBvbiB0aGUgbm9kZV9saXN0IGFyZSBvcmRlcmVkIGJ5IHByaW9yaXR5IGFuZCBjYW4gY29udGFpbgogICogZW50cmllcyB3aGljaCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LiBUaG9zZSBlbnRyaWVzIGFyZSBvcmRlcmVkCiAgKiBGSUZPCiAgKgpAQCAtMjY1LDcgKzI2NSw3IEBACiAgKgogICogQXNzdW1lcyB0aGUgcGxpc3QgaXMgX25vdF8gZW1wdHkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBsaXN0X25vZGUqIHBsaXN0X2ZpcnN0KGNvbnN0IHN0cnVjdCBwbGlzdF9oZWFkICpoZWFkKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGxpc3Rfbm9kZSAqcGxpc3RfZmlyc3QoY29uc3Qgc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJcmV0dXJuIGxpc3RfZW50cnkoaGVhZC0+bm9kZV9saXN0Lm5leHQsCiAJCQkgIHN0cnVjdCBwbGlzdF9ub2RlLCBwbGlzdC5ub2RlX2xpc3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IDE5OGI4ZjkuLmU4MGRmMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KIAogLyoKICAqIENhbGxiYWNrcyBmb3IgcGxhdGZvcm0gZHJpdmVycyB0byBpbXBsZW1lbnQuCkBAIC00MTIsOSArNDEzLDExIEBACiAJcG1fbWVzc2FnZV90CQlwb3dlcl9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQJCWNhbl93YWtldXA6MTsKIAl1bnNpZ25lZCBpbnQJCXNob3VsZF93YWtldXA6MTsKKwl1bnNpZ25lZAkJYXN5bmNfc3VzcGVuZDoxOwogCWVudW0gZHBtX3N0YXRlCQlzdGF0dXM7CQkvKiBPd25lZCBieSB0aGUgUE0gY29yZSAqLwogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiAJc3RydWN0IHRpbWVyX2xpc3QJc3VzcGVuZF90aW1lcjsKQEAgLTQzMCw2ICs0MzMsNyBAQAogCXVuc2lnbmVkIGludAkJcmVxdWVzdF9wZW5kaW5nOjE7CiAJdW5zaWduZWQgaW50CQlkZWZlcnJlZF9yZXN1bWU6MTsKIAl1bnNpZ25lZCBpbnQJCXJ1bl93YWtlOjE7CisJdW5zaWduZWQgaW50CQlydW50aW1lX2F1dG86MTsKIAllbnVtIHJwbV9yZXF1ZXN0CXJlcXVlc3Q7CiAJZW51bSBycG1fc3RhdHVzCQlydW50aW1lX3N0YXR1czsKIAlpbnQJCQlydW50aW1lX2Vycm9yOwpAQCAtNTA4LDYgKzUxMiw3IEBACiAJCV9fc3VzcGVuZF9yZXBvcnRfcmVzdWx0KF9fZnVuY19fLCBmbiwgcmV0KTsJCVwKIAl9IHdoaWxlICgwKQogCitleHRlcm4gdm9pZCBkZXZpY2VfcG1fd2FpdF9mb3JfZGV2KHN0cnVjdCBkZXZpY2UgKnN1Yiwgc3RydWN0IGRldmljZSAqZGV2KTsKICNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogI2RlZmluZSBkZXZpY2VfcG1fbG9jaygpIGRvIHt9IHdoaWxlICgwKQpAQCAtNTIwLDYgKzUyNSw3IEBACiAKICNkZWZpbmUgc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGZuLCByZXQpCQlkbyB7fSB3aGlsZSAoMCkKIAorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV93YWl0X2Zvcl9kZXYoc3RydWN0IGRldmljZSAqYSwgc3RydWN0IGRldmljZSAqYikge30KICNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKIC8qIEhvdyB0byByZW9yZGVyIGRwbV9saXN0IGFmdGVyIGRldmljZV9tb3ZlKCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKaW5kZXggMzcwY2UwYS4uN2Q3NzNhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKQEAgLTI4LDYgKzI4LDggQEAKIGV4dGVybiBpbnQgcG1fcnVudGltZV9iYXJyaWVyKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBwbV9ydW50aW1lX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgX19wbV9ydW50aW1lX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGNoZWNrX3Jlc3VtZSk7CitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2FsbG93KHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2ZvcmJpZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcG1fY2hpbGRyZW5fc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTc4LDYgKzgwLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfYmFycmllcihzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgX19wbV9ydW50aW1lX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGMpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9hbGxvdyhzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9mb3JiaWQoc3RydWN0IGRldmljZSAqZGV2KSB7fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgcG1fY2hpbGRyZW5fc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV9zdXNwZW5kX2lnbm9yZV9jaGlsZHJlbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW4pIHt9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCA1NmYyZDYzLi5jNWVhYjg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTI3LDYgKzI3LDI2IEBACiAjZGVmaW5lIFBUUkFDRV9HRVRTSUdJTkZPCTB4NDIwMgogI2RlZmluZSBQVFJBQ0VfU0VUU0lHSU5GTwkweDQyMDMKIAorLyoKKyAqIEdlbmVyaWMgcHRyYWNlIGludGVyZmFjZSB0aGF0IGV4cG9ydHMgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyByZWdzZXRzCisgKiB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBOVF8qIHR5cGVzICh3aGljaCBhcmUgYWxzbyB1c2VkIGluIHRoZSBjb3JlIGR1bXApLgorICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgTlRfUFJTVEFUVVMgbm90ZSB0eXBlIGluIGEgY29yZSBkdW1wIGNvbnRhaW5zIGEgZnVsbAorICogJ3N0cnVjdCBlbGZfcHJzdGF0dXMnLiBCdXQgdGhlIHVzZXJfcmVnc2V0IGZvciBOVF9QUlNUQVRVUyBjb250YWlucyBqdXN0IHRoZQorICogZWxmX2dyZWdzZXRfdCB0aGF0IGlzIHRoZSBwcl9yZWcgZmllbGQgb2YgJ3N0cnVjdCBlbGZfcHJzdGF0dXMnLiBGb3IgYWxsIHRoZQorICogb3RoZXIgdXNlcl9yZWdzZXQgZmxhdm9ycywgdGhlIHVzZXJfcmVnc2V0IGxheW91dCBhbmQgdGhlIEVMRiBjb3JlIGR1bXAgbm90ZQorICogcGF5bG9hZCBhcmUgZXhhY3RseSB0aGUgc2FtZSBsYXlvdXQuCisgKgorICogVGhpcyBpbnRlcmZhY2UgdXNhZ2UgaXMgYXMgZm9sbG93czoKKyAqCXN0cnVjdCBpb3ZlYyBpb3YgPSB7IGJ1ZiwgbGVufTsKKyAqCisgKglyZXQgPSBwdHJhY2UoUFRSQUNFX0dFVFJFR1NFVC9QVFJBQ0VfU0VUUkVHU0VULCBwaWQsIE5UX1hYWF9UWVBFLCAmaW92KTsKKyAqCisgKiBPbiB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCBpb3YubGVuIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUga2VybmVsLAorICogc3BlY2lmeWluZyBob3cgbXVjaCB0aGUga2VybmVsIGhhcyB3cml0dGVuL3JlYWQgdG8vZnJvbSB0aGUgdXNlcidzIGlvdi5idWYuCisgKi8KKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1NFVAkweDQyMDQKKyNkZWZpbmUgUFRSQUNFX1NFVFJFR1NFVAkweDQyMDUKKwogLyogb3B0aW9ucyBzZXQgdXNpbmcgUFRSQUNFX1NFVE9QVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VTWVNHT09ECTB4MDAwMDAwMDEKICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VGT1JLCTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oIGIvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmgKaW5kZXggNmI1MzdmMS4uMzFlMWZmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAlSQUlEX0xFVkVMXzAsCiAJUkFJRF9MRVZFTF8xLAogCVJBSURfTEVWRUxfMTAsCisJUkFJRF9MRVZFTF8xRSwKIAlSQUlEX0xFVkVMXzMsCiAJUkFJRF9MRVZFTF80LAogCVJBSURfTEVWRUxfNSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKaW5kZXggMWJmMGY3MC4uNzc5ZDcwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKQEAgLTIwOCw3ICsyMDgsNyBAQAogICogcHJpbWl0aXZlcyBzdWNoIGFzIGxpc3RfYWRkX3JjdSgpIGFzIGxvbmcgYXMgaXQncyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwogI2RlZmluZSBsaXN0X2VudHJ5X3JjdShwdHIsIHR5cGUsIG1lbWJlcikgXAotCWNvbnRhaW5lcl9vZihyY3VfZGVyZWZlcmVuY2UocHRyKSwgdHlwZSwgbWVtYmVyKQorCWNvbnRhaW5lcl9vZihyY3VfZGVyZWZlcmVuY2VfcmF3KHB0ciksIHR5cGUsIG1lbWJlcikKIAogLyoqCiAgKiBsaXN0X2ZpcnN0X2VudHJ5X3JjdSAtIGdldCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGEgbGlzdApAQCAtMjI1LDkgKzIyNSw5IEBACiAJbGlzdF9lbnRyeV9yY3UoKHB0ciktPm5leHQsIHR5cGUsIG1lbWJlcikKIAogI2RlZmluZSBfX2xpc3RfZm9yX2VhY2hfcmN1KHBvcywgaGVhZCkgXAotCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChoZWFkKS0+bmV4dCk7IFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKGhlYWQpLT5uZXh0KTsgXAogCQlwb3MgIT0gKGhlYWQpOyBcCi0JCXBvcyA9IHJjdV9kZXJlZmVyZW5jZShwb3MtPm5leHQpKQorCQlwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHBvcy0+bmV4dCkpCiAKIC8qKgogICogbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UJLQlpdGVyYXRlIG92ZXIgcmN1IGxpc3Qgb2YgZ2l2ZW4gdHlwZQpAQCAtMjU3LDkgKzI1Nyw5IEBACiAgKiBhcyBsb25nIGFzIHRoZSB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb250aW51ZV9yY3UocG9zLCBoZWFkKSBcCi0JZm9yICgocG9zKSA9IHJjdV9kZXJlZmVyZW5jZSgocG9zKS0+bmV4dCk7IFwKKwlmb3IgKChwb3MpID0gcmN1X2RlcmVmZXJlbmNlX3JhdygocG9zKS0+bmV4dCk7IFwKIAkJcHJlZmV0Y2goKHBvcyktPm5leHQpLCAocG9zKSAhPSAoaGVhZCk7IFwKLQkJKHBvcykgPSByY3VfZGVyZWZlcmVuY2UoKHBvcyktPm5leHQpKQorCQkocG9zKSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKHBvcyktPm5leHQpKQogCiAvKioKICAqIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1IC0gY29udGludWUgaXRlcmF0aW9uIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlCkBAIC00MTgsMTAgKzQxOCwxMCBAQAogICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgogICovCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikJCSBcCi0JZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5maXJzdCk7CQkJIFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKGhlYWQpLT5maXJzdCk7CQkJIFwKIAkJcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7IH0pICYmCQkJIFwKIAkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7IFwKLQkJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCisJCXBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLT5uZXh0KSkKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmggYi9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfbnVsbHMuaAppbmRleCA1ODlhNDA5Li5iNzBmZmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfbnVsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfbnVsbHMuaApAQCAtMTAxLDEwICsxMDEsMTAgQEAKICAqCiAgKi8KICNkZWZpbmUgaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KHRwb3MsIHBvcywgaGVhZCwgbWVtYmVyKSBcCi0JZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5maXJzdCk7CQkJIFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKGhlYWQpLT5maXJzdCk7CQkJIFwKIAkJKCFpc19hX251bGxzKHBvcykpICYmCQkJXAogCQkoeyB0cG9zID0gaGxpc3RfbnVsbHNfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxOyB9KTsgXAotCQlwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKKwkJcG9zID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhwb3MtPm5leHQpKQogCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCmluZGV4IDI0NDQwZjQuLmM4NDM3MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKQEAgLTYyLDYgKzYyLDggQEAKIAogLyogSW50ZXJuYWwgdG8ga2VybmVsICovCiBleHRlcm4gdm9pZCByY3VfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgcmN1X3NjaGVkdWxlcl9hY3RpdmU7CitleHRlcm4gdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpCiAjaW5jbHVkZSA8bGludXgvcmN1dHJlZS5oPgpAQCAtNzgsMTQgKzgwLDEyMCBAQAogfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKIGV4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2xvY2tfbWFwOwotIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCVwKLQkJCWxvY2tfYWNxdWlyZSgmcmN1X2xvY2tfbWFwLCAwLCAwLCAyLCAxLCBOVUxMLCBfVEhJU19JUF8pCisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlKCkgXAorCQlsb2NrX2FjcXVpcmUoJnJjdV9sb2NrX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQogIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZSgpCWxvY2tfcmVsZWFzZSgmcmN1X2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCi0jZWxzZQotIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2UoKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBsb2NrZGVwX21hcCByY3VfYmhfbG9ja19tYXA7CisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlX2JoKCkgXAorCQlsb2NrX2FjcXVpcmUoJnJjdV9iaF9sb2NrX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZV9iaCgpCWxvY2tfcmVsZWFzZSgmcmN1X2JoX2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCisKK2V4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X3NjaGVkX2xvY2tfbWFwOworIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZV9zY2hlZCgpIFwKKwkJbG9ja19hY3F1aXJlKCZyY3Vfc2NoZWRfbG9ja19tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2Vfc2NoZWQoKSBcCisJCWxvY2tfcmVsZWFzZSgmcmN1X3NjaGVkX2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCisKKy8qKgorICogcmN1X3JlYWRfbG9ja19oZWxkIC0gbWlnaHQgd2UgYmUgaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluCisgKiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0IGNhbgorICogcHJvdmUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX2hlbGQodm9pZCkKK3sKKwlpZiAoZGVidWdfbG9ja3MpCisJCXJldHVybiBsb2NrX2lzX2hlbGQoJnJjdV9sb2NrX21hcCk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogcmN1X3JlYWRfbG9ja19iaF9oZWxkIC0gbWlnaHQgd2UgYmUgaW4gUkNVLWJoIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluCisgKiBhbiBSQ1UtYmggcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBSQ1UtYmggcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0IGNhbgorICogcHJvdmUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX2JoX2hlbGQodm9pZCkKK3sKKwlpZiAoZGVidWdfbG9ja3MpCisJCXJldHVybiBsb2NrX2lzX2hlbGQoJnJjdV9iaF9sb2NrX21hcCk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkIC0gbWlnaHQgd2UgYmUgaW4gUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluIGFuCisgKiBSQ1Utc2NoZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBSQ1Utc2NoZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0CisgKiBjYW4gcHJvdmUgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IGRpc2FibGluZyBvZiBwcmVlbXB0aW9uIChpbmNsdWRpbmcKKyAqIGRpc2FibGluZyBpcnFzKSBjb3VudHMgYXMgYW4gUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQodm9pZCkKK3sKKwlpbnQgbG9ja2RlcF9vcGluaW9uID0gMDsKKworCWlmIChkZWJ1Z19sb2NrcykKKwkJbG9ja2RlcF9vcGluaW9uID0gbG9ja19pc19oZWxkKCZyY3Vfc2NoZWRfbG9ja19tYXApOworCXJldHVybiBsb2NrZGVwX29waW5pb24gfHwgcHJlZW1wdF9jb3VudCgpICE9IDAgfHwgIXJjdV9zY2hlZHVsZXJfYWN0aXZlOworfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKworIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmVfYmgoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZV9iaCgpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlX3NjaGVkKCkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZV9zY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19oZWxkKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9yZWFkX2xvY2tfYmhfaGVsZCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQodm9pZCkKK3sKKwlyZXR1cm4gcHJlZW1wdF9jb3VudCgpICE9IDAgfHwgIXJjdV9zY2hlZHVsZXJfYWN0aXZlOworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKKyNpZmRlZiBDT05GSUdfUFJPVkVfUkNVCisKKy8qKgorICogcmN1X2RlcmVmZXJlbmNlX2NoZWNrIC0gcmN1X2RlcmVmZXJlbmNlIHdpdGggZGVidWcgY2hlY2tpbmcKKyAqCisgKiBEbyBhbiByY3VfZGVyZWZlcmVuY2UoKSwgYnV0IGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaXMgY29ycmVjdC4KKyAqIEZvciBleGFtcGxlLCByY3VfZGVyZWZlcmVuY2VfY2hlY2soZ3AsIHJjdV9yZWFkX2xvY2tfaGVsZCgpKSB0bworICogZW5zdXJlIHRoYXQgdGhlIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGV4ZWN1dGVzIHdpdGhpbiBhbiBSQ1UKKyAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGVjayBmb3IKKyAqIGxvY2tzIGJlaW5nIGhlbGQsIGZvciBleGFtcGxlLCBieSB1c2luZyBsb2NrZGVwX2lzX2hlbGQoKS4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgYykgXAorCSh7IFwKKwkJaWYgKGRlYnVnX2xvY2tzICYmICEoYykpIFwKKwkJCWxvY2tkZXBfcmN1X2RlcmVmZXJlbmNlKF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKwkJcmN1X2RlcmVmZXJlbmNlX3JhdyhwKTsgXAorCX0pCisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfUkNVICovCisKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIGMpCXJjdV9kZXJlZmVyZW5jZV9yYXcocCkKKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUFJPVkVfUkNVICovCiAKIC8qKgogICogcmN1X3JlYWRfbG9jayAtIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCkBAIC0xNjAsNyArMjY4LDcgQEAKIHsKIAlfX3JjdV9yZWFkX2xvY2tfYmgoKTsKIAlfX2FjcXVpcmUoUkNVX0JIKTsKLQlyY3VfcmVhZF9hY3F1aXJlKCk7CisJcmN1X3JlYWRfYWNxdWlyZV9iaCgpOwogfQogCiAvKgpAQCAtMTcwLDcgKzI3OCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfYmgodm9pZCkKIHsKLQlyY3VfcmVhZF9yZWxlYXNlKCk7CisJcmN1X3JlYWRfcmVsZWFzZV9iaCgpOwogCV9fcmVsZWFzZShSQ1VfQkgpOwogCV9fcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiB9CkBAIC0xODgsNyArMjk2LDcgQEAKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlfX2FjcXVpcmUoUkNVX1NDSEVEKTsKLQlyY3VfcmVhZF9hY3F1aXJlKCk7CisJcmN1X3JlYWRfYWNxdWlyZV9zY2hlZCgpOwogfQogCiAvKiBVc2VkIGJ5IGxvY2tkZXAgYW5kIHRyYWNpbmc6IGNhbm5vdCBiZSB0cmFjZWQsIGNhbm5vdCBjYWxsIGxvY2tkZXAuICovCkBAIC0yMDUsNyArMzEzLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9ja19zY2hlZCh2b2lkKQogewotCXJjdV9yZWFkX3JlbGVhc2UoKTsKKwlyY3VfcmVhZF9yZWxlYXNlX3NjaGVkKCk7CiAJX19yZWxlYXNlKFJDVV9TQ0hFRCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTIxOSwyMiArMzI3LDQ5IEBACiAKIAogLyoqCi0gKiByY3VfZGVyZWZlcmVuY2UgLSBmZXRjaCBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgaW4gYW4KLSAqIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIFRoaXMgcG9pbnRlciBtYXkgbGF0ZXIKLSAqIGJlIHNhZmVseSBkZXJlZmVyZW5jZWQuCisgKiByY3VfZGVyZWZlcmVuY2VfcmF3IC0gZmV0Y2ggYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyCisgKgorICogVGhlIGNhbGxlciBtdXN0IGJlIHdpdGhpbiBzb21lIGZsYXZvciBvZiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCisgKiBzZWN0aW9uLCBvciBtdXN0IGJlIG90aGVyd2lzZSBwcmV2ZW50aW5nIHRoZSBwb2ludGVyIGZyb20gY2hhbmdpbmcsCisgKiBmb3IgZXhhbXBsZSwgYnkgaG9sZGluZyBhbiBhcHByb3ByaWF0ZSBsb2NrLiAgVGhpcyBwb2ludGVyIG1heSBsYXRlcgorICogYmUgc2FmZWx5IGRlcmVmZXJlbmNlZC4gIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBoYXZlCisgKiBkb25lIHRoZSByaWdodCB0aGluZywgYXMgdGhpcyBwcmltaXRpdmUgZG9lcyBubyBjaGVja2luZyBvZiBhbnkga2luZC4KICAqCiAgKiBJbnNlcnRzIG1lbW9yeSBiYXJyaWVycyBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgcmVxdWlyZSB0aGVtCiAgKiAoY3VycmVudGx5IG9ubHkgdGhlIEFscGhhKSwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBkb2N1bWVudHMKICAqIGV4YWN0bHkgd2hpY2ggcG9pbnRlcnMgYXJlIHByb3RlY3RlZCBieSBSQ1UuCiAgKi8KLQotI2RlZmluZSByY3VfZGVyZWZlcmVuY2UocCkgICAgICh7IFwKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX3JhdyhwKQkoeyBcCiAJCQkJdHlwZW9mKHApIF9fX19fX19fX3AxID0gQUNDRVNTX09OQ0UocCk7IFwKIAkJCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsgXAogCQkJCShfX19fX19fX19wMSk7IFwKIAkJCQl9KQogCiAvKioKKyAqIHJjdV9kZXJlZmVyZW5jZSAtIGZldGNoIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlciwgY2hlY2tpbmcgZm9yIFJDVQorICoKKyAqIE1ha2VzIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGRvIHRoZSBkaXJ0eSB3b3JrLgorICovCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZShwKSBcCisJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIHJjdV9yZWFkX2xvY2tfaGVsZCgpKQorCisvKioKKyAqIHJjdV9kZXJlZmVyZW5jZV9iaCAtIGZldGNoIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlciwgY2hlY2tpbmcgZm9yIFJDVS1iaAorICoKKyAqIE1ha2VzIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGRvIHRoZSBkaXJ0eSB3b3JrLgorICovCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9iaChwKSBcCisJCXJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSkKKworLyoqCisgKiByY3VfZGVyZWZlcmVuY2Vfc2NoZWQgLSBmZXRjaCBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIsIGNoZWNraW5nIGZvciBSQ1Utc2NoZWQKKyAqCisgKiBNYWtlcyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBkbyB0aGUgZGlydHkgd29yay4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQocCkgXAorCQlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkpCisKKy8qKgogICogcmN1X2Fzc2lnbl9wb2ludGVyIC0gYXNzaWduIChwdWJsaWNpemUpIGEgcG9pbnRlciB0byBhIG5ld2x5CiAgKiBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGJlIGRlcmVmZXJlbmNlZCBieSBSQ1UgcmVhZC1zaWRlCiAgKiBjcml0aWNhbCBzZWN0aW9ucy4gIFJldHVybnMgdGhlIHZhbHVlIGFzc2lnbmVkLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAppbmRleCA5NmNjMzA3Li5hNTE5NTg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaApAQCAtNjIsNiArNjIsMTggQEAKIAogZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7Cit9CisKICNkZWZpbmUgc3luY2hyb25pemVfcmN1IHN5bmNocm9uaXplX3NjaGVkCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCkBAIC05MywxMCArMTA1LDYgQEAKIAogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCkKLXsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGV4aXRfcmN1KHZvaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCmluZGV4IDgwNDRiMWIuLjQyY2MzYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCkBAIC0zNSw3ICszNSw2IEBACiBleHRlcm4gdm9pZCByY3Vfc2NoZWRfcXMoaW50IGNwdSk7CiBleHRlcm4gdm9pZCByY3VfYmhfcXMoaW50IGNwdSk7CiBleHRlcm4gaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpOwogZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQpAQCAtOTksNiArOTgsOSBAQAogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpOwogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpOwogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX3NjaGVkKHZvaWQpOworZXh0ZXJuIHZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCk7CitleHRlcm4gdm9pZCByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX05PX0haCiB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXN1bWUtdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvcmVzdW1lLXRyYWNlLmgKaW5kZXggYzliYTJmZC4uYmM4YzM4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZXN1bWUtdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc3VtZS10cmFjZS5oCkBAIC02LDYgKzYsMTEgQEAKIAogZXh0ZXJuIGludCBwbV90cmFjZV9lbmFibGVkOwogCitzdGF0aWMgaW5saW5lIGludCBwbV90cmFjZV9pc19lbmFibGVkKHZvaWQpCit7CisgICAgICAgcmV0dXJuIHBtX3RyYWNlX2VuYWJsZWQ7Cit9CisKIHN0cnVjdCBkZXZpY2U7CiBleHRlcm4gdm9pZCBzZXRfdHJhY2VfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gdm9pZCBnZW5lcmF0ZV9yZXN1bWVfdHJhY2UoY29uc3Qgdm9pZCAqdHJhY2VkYXRhLCB1bnNpZ25lZCBpbnQgdXNlcik7CkBAIC0xNyw2ICsyMiw4IEBACiAKICNlbHNlCiAKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3RyYWNlX2lzX2VuYWJsZWQodm9pZCkgeyByZXR1cm4gMDsgfQorCiAjZGVmaW5lIFRSQUNFX0RFVklDRShkZXYpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgVFJBQ0VfUkVTVU1FKGRldikgZG8geyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAwNTMzMGZjLi41YzUyZmE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTczNSw2ICs3MzUsOSBAQAogZXh0ZXJuIHZvaWQgcnRubF91bmxvY2sodm9pZCk7CiBleHRlcm4gaW50IHJ0bmxfdHJ5bG9jayh2b2lkKTsKIGV4dGVybiBpbnQgcnRubF9pc19sb2NrZWQodm9pZCk7CisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK2V4dGVybiBpbnQgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HICovCiAKIGV4dGVybiB2b2lkIHJ0bmV0bGlua19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX19ydG5sX3VubG9jayh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA3ZWI4Mjk3Li40YjE3NTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC03NDAsMTQgKzc0MCw2IEBACiAJdWlkX3QgdWlkOwogCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uczsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0Jc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwotI2lmZGVmIENPTkZJR19TWVNGUwotCXN0cnVjdCBrb2JqZWN0IGtvYmo7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwotI2VuZGlmCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCWF0b21pY19sb25nX3QgbG9ja2VkX3ZtOwogI2VuZGlmCkBAIC04NzgsNyArODcwLDEwIEBACiAJaWYgKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzKQogCQlyZXR1cm4gU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0U7CiAKLQlyZXR1cm4gU0RfUFJFRkVSX1NJQkxJTkc7CisJaWYgKCFzY2hlZF9tY19wb3dlcl9zYXZpbmdzKQorCQlyZXR1cm4gU0RfUFJFRkVSX1NJQkxJTkc7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2RfYmFsYW5jZV9mb3JfcGFja2FnZV9wb3dlcih2b2lkKQpAQCAtMTA4NCw3ICsxMDc5LDggQEAKIHN0cnVjdCBzY2hlZF9jbGFzcyB7CiAJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpuZXh0OwogCi0Jdm9pZCAoKmVucXVldWVfdGFzaykgKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCk7CisJdm9pZCAoKmVucXVldWVfdGFzaykgKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCwKKwkJCSAgICAgIGJvb2wgaGVhZCk7CiAJdm9pZCAoKmRlcXVldWVfdGFzaykgKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNsZWVwKTsKIAl2b2lkICgqeWllbGRfdGFzaykgKHN0cnVjdCBycSAqcnEpOwogCkBAIC0xMDk2LDE0ICsxMDkyLDYgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJaW50ICAoKnNlbGVjdF90YXNrX3JxKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzZF9mbGFnLCBpbnQgZmxhZ3MpOwogCi0JdW5zaWduZWQgbG9uZyAoKmxvYWRfYmFsYW5jZSkgKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LAotCQkJc3RydWN0IHJxICpidXNpZXN0LCB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCi0JCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCQlpbnQgKmFsbF9waW5uZWQsIGludCAqdGhpc19iZXN0X3ByaW8pOwotCi0JaW50ICgqbW92ZV9vbmVfdGFzaykgKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LAotCQkJICAgICAgc3RydWN0IHJxICpidXNpZXN0LCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKTsKIAl2b2lkICgqcHJlX3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCXZvaWQgKCpwb3N0X3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxKTsKIAl2b2lkICgqdGFza193YWtpbmcpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CkBAIC0yNTE3LDEzICsyNTA1LDkgQEAKIAogZXh0ZXJuIHZvaWQgbm9ybWFsaXplX3J0X3Rhc2tzKHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX0dST1VQX1NDSEVECisjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCiBleHRlcm4gc3RydWN0IHRhc2tfZ3JvdXAgaW5pdF90YXNrX2dyb3VwOwotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi1leHRlcm4gc3RydWN0IHRhc2tfZ3JvdXAgcm9vdF90YXNrX2dyb3VwOwotZXh0ZXJuIHZvaWQgc2V0X3RnX3VpZChzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpOwotI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3QgdGFza19ncm91cCAqc2NoZWRfY3JlYXRlX2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICpwYXJlbnQpOwogZXh0ZXJuIHZvaWQgc2NoZWRfZGVzdHJveV9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaF9pbnRjLmggYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAppbmRleCA0ZWYyNDZmLi41MWQyODhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaApAQCAtNDUsNyArNDUsNyBAQAogI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKQogI2VuZGlmCiAKLXN0cnVjdCBpbnRjX2Rlc2Mgeworc3RydWN0IGludGNfaHdfZGVzYyB7CiAJc3RydWN0IGludGNfdmVjdCAqdmVjdG9yczsKIAl1bnNpZ25lZCBpbnQgbnJfdmVjdG9yczsKIAlzdHJ1Y3QgaW50Y19ncm91cCAqZ3JvdXBzOwpAQCAtNTYsMjkgKzU2LDQwIEBACiAJdW5zaWduZWQgaW50IG5yX3ByaW9fcmVnczsKIAlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNlbnNlX3JlZ3M7CiAJdW5zaWduZWQgaW50IG5yX3NlbnNlX3JlZ3M7Ci0JY2hhciAqbmFtZTsKIAlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqYWNrX3JlZ3M7CiAJdW5zaWduZWQgaW50IG5yX2Fja19yZWdzOwogfTsKIAogI2RlZmluZSBfSU5UQ19BUlJBWShhKSBhLCBzaXplb2YoYSkvc2l6ZW9mKCphKQorI2RlZmluZSBJTlRDX0hXX0RFU0ModmVjdG9ycywgZ3JvdXBzLCBtYXNrX3JlZ3MsCVwKKwkJICAgICBwcmlvX3JlZ3MsCXNlbnNlX3JlZ3MsIGFja19yZWdzKQlcCit7CQkJCQkJCVwKKwlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJXAorCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCVwKKwlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwgX0lOVENfQVJSQVkoYWNrX3JlZ3MpLAlcCit9CisKK3N0cnVjdCBpbnRjX2Rlc2MgeworCWNoYXIgKm5hbWU7CisJaW50Y19lbnVtIGZvcmNlX2VuYWJsZTsKKwlpbnRjX2VudW0gZm9yY2VfZGlzYWJsZTsKKwlzdHJ1Y3QgaW50Y19od19kZXNjIGh3OworfTsKKwogI2RlZmluZSBERUNMQVJFX0lOVENfREVTQyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCQlcCiAJbWFza19yZWdzLCBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MpCQkJCVwKIHN0cnVjdCBpbnRjX2Rlc2Mgc3ltYm9sIF9faW5pdGRhdGEgPSB7CQkJCQlcCi0JX0lOVENfQVJSQVkodmVjdG9ycyksIF9JTlRDX0FSUkFZKGdyb3VwcyksCQkJXAotCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCQkJXAotCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLAkJCQkJXAotCWNoaXBuYW1lLAkJCQkJCQlcCisJLm5hbWUgPSBjaGlwbmFtZSwJCQkJCQlcCisJLmh3ID0gSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdzLAkJCVwKKwkJCSAgIHByaW9fcmVncywgc2Vuc2VfcmVncywgTlVMTCksCQlcCiB9CiAKICNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0NfQUNLKHN5bWJvbCwgY2hpcG5hbWUsIHZlY3RvcnMsIGdyb3VwcywJXAogCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzLCBhY2tfcmVncykJCQlcCiBzdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAotCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKLQlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKLQlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKLQljaGlwbmFtZSwJCQkJCQkJXAotCV9JTlRDX0FSUkFZKGFja19yZWdzKSwJCQkJCQlcCisJLm5hbWUgPSBjaGlwbmFtZSwJCQkJCQlcCisJLmh3ID0gSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdzLAkJCVwKKwkJCSAgIHByaW9fcmVncywgc2Vuc2VfcmVncywgYWNrX3JlZ3MpLAkJXAogfQogCiB2b2lkIF9faW5pdCByZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoc3RydWN0IGludGNfZGVzYyAqZGVzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9kd19zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oCmluZGV4IDUxYjNlNzcuLmNjODEzZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oCkBAIC05MCw2ICs5MCw3IEBACiAJdW5zaWduZWQgbG9uZwkJcGFkZHI7CiAJdTMyCQkJaW9sZW47CiAJaW50CQkJaXJxOworCXUzMgkJCWZpZm9fbGVuOwkvKiBkZXB0aCBvZiB0aGUgRklGTyBidWZmZXIgKi8KIAl1MzIJCQltYXhfZnJlcTsJLyogbWF4IGJ1cyBmcmVxIHN1cHBvcnRlZCAqLwogCiAJdTE2CQkJYnVzX251bTsKQEAgLTE3MSw2ICsxNzIsMTAgQEAKIHsKIAlpZiAoY3MgPiBkd3MtPm51bV9jcykKIAkJcmV0dXJuOworCisJaWYgKGR3cy0+Y3NfY29udHJvbCkKKwkJZHdzLT5jc19jb250cm9sKDEpOworCiAJZHdfd3JpdGVsKGR3cywgc2VyLCAxIDw8IGNzKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1LmggYi9pbmNsdWRlL2xpbnV4L3NyY3UuaAppbmRleCA0NzY1ZDk3Li4zMDg0ZjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NyY3UuaApAQCAtMzUsNiArMzUsOSBAQAogCWludCBjb21wbGV0ZWQ7CiAJc3RydWN0IHNyY3Vfc3RydWN0X2FycmF5ICpwZXJfY3B1X3JlZjsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKwlzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KIH07CiAKICNpZm5kZWYgQ09ORklHX1BSRUVNUFQKQEAgLTQzLDEyICs0NiwxMDAgQEAKICNkZWZpbmUgc3JjdV9iYXJyaWVyKCkKICNlbmRpZiAvKiAjZWxzZSAjaWZuZGVmIENPTkZJR19QUkVFTVBUICovCiAKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCitpbnQgX19pbml0X3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7CisKKyNkZWZpbmUgaW5pdF9zcmN1X3N0cnVjdChzcCkgXAorKHsgXAorCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19zcmN1X2tleTsgXAorCVwKKwlfX2luaXRfc3JjdV9zdHJ1Y3QoKHNwKSwgI3NwLCAmX19zcmN1X2tleSk7IFwKK30pCisKKyMgZGVmaW5lIHNyY3VfcmVhZF9hY3F1aXJlKHNwKSBcCisJCWxvY2tfYWNxdWlyZSgmKHNwKS0+ZGVwX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQorIyBkZWZpbmUgc3JjdV9yZWFkX3JlbGVhc2Uoc3ApIFwKKwkJbG9ja19yZWxlYXNlKCYoc3ApLT5kZXBfbWFwLCAxLCBfVEhJU19JUF8pCisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCiBpbnQgaW5pdF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKKworIyBkZWZpbmUgc3JjdV9yZWFkX2FjcXVpcmUoc3ApICBkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBzcmN1X3JlYWRfcmVsZWFzZShzcCkgIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7Ci1pbnQgc3JjdV9yZWFkX2xvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkgX19hY3F1aXJlcyhzcCk7Ci12b2lkIHNyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkgX19yZWxlYXNlcyhzcCk7CitpbnQgX19zcmN1X3JlYWRfbG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKSBfX2FjcXVpcmVzKHNwKTsKK3ZvaWQgX19zcmN1X3JlYWRfdW5sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGludCBpZHgpIF9fcmVsZWFzZXMoc3ApOwogdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOwogdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKIGxvbmcgc3JjdV9iYXRjaGVzX2NvbXBsZXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKKy8qKgorICogc3JjdV9yZWFkX2xvY2tfaGVsZCAtIG1pZ2h0IHdlIGJlIGluIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24/CisgKgorICogSWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgc2VsZWN0ZWQgYW5kIGVuYWJsZWQsIHJldHVybnMgbm9uemVybyBpZmYgaW4KKyAqIGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIHVubGVzcyBpdCBjYW4KKyAqIHByb3ZlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3JjdV9yZWFkX2xvY2tfaGVsZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQoreworCWlmIChkZWJ1Z19sb2NrcykKKwkJcmV0dXJuIGxvY2tfaXNfaGVsZCgmc3AtPmRlcF9tYXApOworCXJldHVybiAxOworfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKworc3RhdGljIGlubGluZSBpbnQgc3JjdV9yZWFkX2xvY2tfaGVsZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQoreworCXJldHVybiAxOworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKKy8qKgorICogc3JjdV9kZXJlZmVyZW5jZSAtIGZldGNoIFNSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgd2l0aCBjaGVja2luZworICoKKyAqIE1ha2VzIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGRvIHRoZSBkaXJ0eSB3b3JrLgorICovCisjZGVmaW5lIHNyY3VfZGVyZWZlcmVuY2UocCwgc3ApIFwKKwkJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIHNyY3VfcmVhZF9sb2NrX2hlbGQoc3ApKQorCisvKioKKyAqIHNyY3VfcmVhZF9sb2NrIC0gcmVnaXN0ZXIgYSBuZXcgcmVhZGVyIGZvciBhbiBTUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUuCisgKiBAc3A6IHNyY3Vfc3RydWN0IGluIHdoaWNoIHRvIHJlZ2lzdGVyIHRoZSBuZXcgcmVhZGVyLgorICoKKyAqIEVudGVyIGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBOb3RlIHRoYXQgU1JDVSByZWFkLXNpZGUKKyAqIGNyaXRpY2FsIHNlY3Rpb25zIG1heSBiZSBuZXN0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApIF9fYWNxdWlyZXMoc3ApCit7CisJaW50IHJldHZhbCA9IF9fc3JjdV9yZWFkX2xvY2soc3ApOworCisJc3JjdV9yZWFkX2FjcXVpcmUoc3ApOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogc3JjdV9yZWFkX3VubG9jayAtIHVucmVnaXN0ZXIgYSBvbGQgcmVhZGVyIGZyb20gYW4gU1JDVS1wcm90ZWN0ZWQgc3RydWN0dXJlLgorICogQHNwOiBzcmN1X3N0cnVjdCBpbiB3aGljaCB0byB1bnJlZ2lzdGVyIHRoZSBvbGQgcmVhZGVyLgorICogQGlkeDogcmV0dXJuIHZhbHVlIGZyb20gY29ycmVzcG9uZGluZyBzcmN1X3JlYWRfbG9jaygpLgorICoKKyAqIEV4aXQgYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkKKwlfX3JlbGVhc2VzKHNwKQoreworCXNyY3VfcmVhZF9yZWxlYXNlKHNwKTsKKwlfX3NyY3VfcmVhZF91bmxvY2soc3AsIGlkeCk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDIwNzQ2NmEuLjgxMjZmMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTk5LDcgKzk5LDcgQEAKICNkZWZpbmUgX19TQ19URVNUNSh0NSwgYTUsIC4uLikJX19TQ19URVNUKHQ1KTsgX19TQ19URVNUNChfX1ZBX0FSR1NfXykKICNkZWZpbmUgX19TQ19URVNUNih0NiwgYTYsIC4uLikJX19TQ19URVNUKHQ2KTsgX19TQ19URVNUNShfX1ZBX0FSR1NfXykKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKICNkZWZpbmUgVFJBQ0VfU1lTX0VOVEVSX1BST0ZJTEVfSU5JVChzbmFtZSkJCQkJICAgICAgIFwKIAkucHJvZmlsZV9lbmFibGUgPSBwcm9mX3N5c2VudGVyX2VuYWJsZSwJCQkJICAgICAgIFwKQEAgLTExMyw3ICsxMTMsNyBAQAogI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRV9JTklUKHNuYW1lKQogI2RlZmluZSBUUkFDRV9TWVNfRVhJVF9QUk9GSUxFKHNuYW1lKQogI2RlZmluZSBUUkFDRV9TWVNfRVhJVF9QUk9GSUxFX0lOSVQoc25hbWUpCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKICNkZWZpbmUgX19TQ19TVFJfQURFQ0wxKHQsIGEpCQkjYQpAQCAtMTMyLDcgKzEzMiw4IEBACiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChzbmFtZSkJCQkJXAogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3N5c2NhbGxfbWV0YV8jI3NuYW1lOwlcCi0Jc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF9lbnRlcl8jI3NuYW1lOwkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIGV2ZW50X2VudGVyXyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBlbnRlcl9zeXNjYWxsX3ByaW50XyMjc25hbWUgPSB7CVwKIAkJLnRyYWNlICAgICAgICAgICAgICAgICAgPSBwcmludF9zeXNjYWxsX2VudGVyLAkJXAogCX07CQkJCQkJCQlcCkBAIC0xNDMsOCArMTQ0LDcgQEAKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2VudGVyIiNzbmFtZSwJCVwKIAkJLnN5c3RlbSAgICAgICAgICAgICAgICAgPSAic3lzY2FsbHMiLAkJCVwKIAkJLmV2ZW50ICAgICAgICAgICAgICAgICAgPSAmZW50ZXJfc3lzY2FsbF9wcmludF8jI3NuYW1lLAlcCi0JCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwJCVwKLQkJLnNob3dfZm9ybWF0CQk9IHN5c2NhbGxfZW50ZXJfZm9ybWF0LAkJXAorCQkucmF3X2luaXQJCT0gaW5pdF9zeXNjYWxsX3RyYWNlLAkJXAogCQkuZGVmaW5lX2ZpZWxkcwkJPSBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMsCVwKIAkJLnJlZ2Z1bmMJCT0gcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIsCVwKIAkJLnVucmVnZnVuYwkJPSB1bnJlZ19ldmVudF9zeXNjYWxsX2VudGVyLAlcCkBAIC0xNTQsNyArMTU0LDggQEAKIAogI2RlZmluZSBTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoc25hbWUpCQkJCQlcCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CVwKLQlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50X2V4aXRfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBldmVudF9leGl0XyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBleGl0X3N5c2NhbGxfcHJpbnRfIyNzbmFtZSA9IHsJXAogCQkudHJhY2UgICAgICAgICAgICAgICAgICA9IHByaW50X3N5c2NhbGxfZXhpdCwJCVwKIAl9OwkJCQkJCQkJXApAQCAtMTY1LDggKzE2Niw3IEBACiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19leGl0IiNzbmFtZSwJCVwKIAkJLnN5c3RlbSAgICAgICAgICAgICAgICAgPSAic3lzY2FsbHMiLAkJCVwKIAkJLmV2ZW50ICAgICAgICAgICAgICAgICAgPSAmZXhpdF9zeXNjYWxsX3ByaW50XyMjc25hbWUsCVwKLQkJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAkJXAotCQkuc2hvd19mb3JtYXQJCT0gc3lzY2FsbF9leGl0X2Zvcm1hdCwJCVwKKwkJLnJhd19pbml0CQk9IGluaXRfc3lzY2FsbF90cmFjZSwJCVwKIAkJLmRlZmluZV9maWVsZHMJCT0gc3lzY2FsbF9leGl0X2RlZmluZV9maWVsZHMsCVwKIAkJLnJlZ2Z1bmMJCT0gcmVnX2V2ZW50X3N5c2NhbGxfZXhpdCwJXAogCQkudW5yZWdmdW5jCQk9IHVucmVnX2V2ZW50X3N5c2NhbGxfZXhpdCwJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IDk0ZjhmYWUuLjdhMDgyYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTIzOCw5ICsyMzgsNiBAQAogICogcGhhc2UtbG9jayBsb29wIHZhcmlhYmxlcwogICovCiBleHRlcm4gaW50IHRpbWVfc3RhdHVzOwkJLyogY2xvY2sgc3luY2hyb25pemF0aW9uIHN0YXR1cyBiaXRzICovCi1leHRlcm4gbG9uZyB0aW1lX21heGVycm9yOwkvKiBtYXhpbXVtIGVycm9yICovCi1leHRlcm4gbG9uZyB0aW1lX2VzdGVycm9yOwkvKiBlc3RpbWF0ZWQgZXJyb3IgKi8KLQogZXh0ZXJuIGxvbmcgdGltZV9hZGp1c3Q7CS8qIFRoZSBhbW91bnQgb2YgYWRqdGltZSBsZWZ0ICovCiAKIGV4dGVybiB2b2lkIG50cF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggZDdhY2UxYi4uMzMyZWFlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC0zMzksNiArMzM5LDcgQEAKIAogCXN0cnVjdCB1c2JfZGV2bWFwIGRldm1hcDsJLyogZGV2aWNlIGFkZHJlc3MgYWxsb2NhdGlvbiBtYXAgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqcm9vdF9odWI7CS8qIFJvb3QgaHViICovCisJc3RydWN0IHVzYl9idXMgKmhzX2NvbXBhbmlvbjsJLyogQ29tcGFuaW9uIEVIQ0kgYnVzLCBpZiBhbnkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJ1c19saXN0OwkvKiBsaXN0IG9mIGJ1c3NlcyAqLwogCiAJaW50IGJhbmR3aWR0aF9hbGxvY2F0ZWQ7CS8qIG9uIHRoaXMgYnVzOiBob3cgbXVjaCBvZiB0aGUgdGltZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmgKaW5kZXggZWFmOWRmZi4uNmJiMjkzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCkBAIC0yNSw2ICsyNSw5IEBACiAjZGVmaW5lIFVTQl9TVUJDTEFTU19BVURJT1NUUkVBTUlORwkweDAyCiAjZGVmaW5lIFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HCTB4MDMKIAorI2RlZmluZSBVQUNfVkVSU0lPTl8xCQkJMHgwMAorI2RlZmluZSBVQUNfVkVSU0lPTl8yCQkJMHgyMAorCiAvKiBBLjUgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KICNkZWZpbmUgVUFDX0hFQURFUgkJCTB4MDEKICNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMCQkweDAyCkBAIC0zMiw4ICszNSwxNyBAQAogI2RlZmluZSBVQUNfTUlYRVJfVU5JVAkJCTB4MDQKICNkZWZpbmUgVUFDX1NFTEVDVE9SX1VOSVQJCTB4MDUKICNkZWZpbmUgVUFDX0ZFQVRVUkVfVU5JVAkJMHgwNgotI2RlZmluZSBVQUNfUFJPQ0VTU0lOR19VTklUCQkweDA3Ci0jZGVmaW5lIFVBQ19FWFRFTlNJT05fVU5JVAkJMHgwOAorI2RlZmluZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxCQkweDA3CisjZGVmaW5lIFVBQ19FWFRFTlNJT05fVU5JVF9WMQkJMHgwOAorCisvKiBVQUMgdjIuMCB0eXBlcyAqLworI2RlZmluZSBVQUNfRUZGRUNUX1VOSVQJCQkweDA3CisjZGVmaW5lIFVBQ19QUk9DRVNTSU5HX1VOSVRfVjIJCTB4MDgKKyNkZWZpbmUgVUFDX0VYVEVOU0lPTl9VTklUX1YyCQkweDA5CisjZGVmaW5lIFVBQ19DTE9DS19TT1VSQ0UJCTB4MGEKKyNkZWZpbmUgVUFDX0NMT0NLX1NFTEVDVE9SCQkweDBiCisjZGVmaW5lIFVBQ19DTE9DS19NVUxUSVBMSUVSCQkweDBjCisjZGVmaW5lIFVBQ19TQU1QTEVfUkFURV9DT05WRVJURVIJMHgwZAogCiAvKiBBLjYgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KICNkZWZpbmUgVUFDX0FTX0dFTkVSQUwJCQkweDAxCkBAIC02Niw2ICs3OCwxMCBAQAogCiAjZGVmaW5lIFVBQ19HRVRfU1RBVAkJCTB4ZmYKIAorLyogQXVkaW8gY2xhc3MgdjIuMCBoYW5kbGVzIGFsbCB0aGUgcGFyYW1ldGVyIGNhbGxzIGRpZmZlcmVudGx5ICovCisjZGVmaW5lIFVBQzJfQ1NfQ1VSCQkJMHgwMQorI2RlZmluZSBVQUMyX0NTX1JBTkdFCQkJMHgwMgorCiAvKiBNSURJIC0gQS4xIE1TIENsYXNzLVNwZWNpZmljIEludGVyZmFjZSBEZXNjcmlwdG9yIFN1YnR5cGVzICovCiAjZGVmaW5lIFVBQ19NU19IRUFERVIJCQkweDAxCiAjZGVmaW5lIFVBQ19NSURJX0lOX0pBQ0sJCTB4MDIKQEAgLTgxLDcgKzk3LDcgQEAKIAogLyogVGVybWluYWwgQ29udHJvbCBTZWxlY3RvcnMgKi8KIC8qIDQuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvciB7CitzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIDggKyBuICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogVVNCX0RUX0NTX0lOVEVSRkFDRSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogVUFDX01TX0hFQURFUiAqLwpAQCAtOTUsNyArMTExLDcgQEAKIAogLyogQXMgYWJvdmUsIGJ1dCBtb3JlIHVzZWZ1bCBmb3IgZGVmaW5pbmcgeW91ciBvd24gZGVzY3JpcHRvcnM6ICovCiAjZGVmaW5lIERFQ0xBUkVfVUFDX0FDX0hFQURFUl9ERVNDUklQVE9SKG4pIAkJCVwKLXN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfIyNuIHsJCQkJXAorc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl92MV8jI24gewkJCVwKIAlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkJCQlcCkBAIC0xMzAsOCArMTQ2LDEyIEBACiAjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9NSUNST1BIT05FX0FSUkFZCQkweDIwNQogI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUxfUFJPQ19NSUNST1BIT05FX0FSUkFZCTB4MjA2CiAKKy8qIFRlcm1pbmFscyAtIGNvbnRyb2wgc2VsZWN0b3JzICovCisKKyNkZWZpbmUgVUFDX1RFUk1JTkFMX0NTX0NPUFlfUFJPVEVDVF9DT05UUk9MCQkweDAxCisKIC8qIDQuMy4yLjIgT3V0cHV0IFRlcm1pbmFsIERlc2NyaXB0b3IgKi8KLXN0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvcl92MSB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogOSAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIENTX0lOVEVSRkFDRSBkZXNjcmlwdG9yIHR5cGUgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9yIHN1YnR5cGUgKi8KQEAgLTE3MSw3ICsxOTEsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKIAogLyogNC41LjIgQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3Igeworc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvcl92MSB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogNyAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIEFTX0dFTkVSQUwgKi8KQEAgLTE4MCw2ICsyMDAsMTkgQEAKIAlfX2xlMTYgd0Zvcm1hdFRhZzsJCS8qIFRoZSBBdWRpbyBEYXRhIEZvcm1hdCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjIgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJUZXJtaW5hbExpbms7CisJX191OCBibUNvbnRyb2xzOworCV9fdTggYkZvcm1hdFR5cGU7CisJX191MzIgYm1Gb3JtYXRzOworCV9fdTggYk5yQ2hhbm5lbHM7CisJX191MzIgYm1DaGFubmVsQ29uZmlnOworCV9fdTggaUNoYW5uZWxOYW1lczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKICNkZWZpbmUgVUFDX0RUX0FTX0hFQURFUl9TSVpFCQk3CiAKIC8qIEZvcm1hdHMgLSBBLjEuMSBBdWRpbyBEYXRhIEZvcm1hdCBUeXBlIEkgQ29kZXMgKi8KQEAgLTIzMiwxMSArMjY1LDYyIEBACiAKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lfRElTQ1JFVEVfREVTQ19TSVpFKG4pCSg4ICsgKG4gKiAzKSkKIAorc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2V4dF9kZXNjcmlwdG9yIHsKKwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CisJX191OCBiU3Vic2xvdFNpemU7CisJX191OCBiRm9ybWF0VHlwZTsKKwlfX3U4IGJCaXRSZXNvbHV0aW9uOworCV9fdTggYkhlYWRlckxlbmd0aDsKKwlfX3U4IGJDb250cm9sU2l6ZTsKKwlfX3U4IGJTaWRlQmFuZFByb3RvY29sOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKiBGb3JtYXRzIC0gQXVkaW8gRGF0YSBGb3JtYXQgVHlwZSBJIENvZGVzICovCisKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJX01QRUcJMHgxMDAxCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSV9BQzMJMHgxMDAyCisKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZGlzY3JldGVfZGVzY3JpcHRvciB7CisJX191OCBiTGVuZ3RoOworCV9fdTggYkRlc2NyaXB0b3JUeXBlOworCV9fdTggYkRlc2NyaXB0b3JTdWJ0eXBlOworCV9fdTggYkZvcm1hdFR5cGU7CisJX19sZTE2IHdNYXhCaXRSYXRlOworCV9fbGUxNiB3U2FtcGxlc1BlckZyYW1lOworCV9fdTggYlNhbUZyZXFUeXBlOworCV9fdTggdFNhbUZyZXFbXVszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZXh0X2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJGb3JtYXRUeXBlOworCV9fdTE2IHdNYXhCaXRSYXRlOworCV9fdTE2IHdTYW1wbGVzUGVyRnJhbWU7CisJX191OCBiSGVhZGVyTGVuZ3RoOworCV9fdTggYlNpZGVCYW5kUHJvdG9jb2w7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiB0eXBlIElJSSAqLworI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfQUMzCTB4MjAwMQorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfTVBFRzFfTEFZRVIxCTB4MjAwMgorI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJX0lFQzE5MzdfTVBFRzJfTk9FWFQJMHgyMDAzCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9FWFQJMHgyMDA0CisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9MQVlFUjFfTFMJMHgyMDA1CisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9MQVlFUjIzX0xTCTB4MjAwNgorCiAvKiBGb3JtYXRzIC0gQS4yIEZvcm1hdCBUeXBlIENvZGVzICovCiAjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9VTkRFRklORUQJMHgwCiAjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JCQkweDEKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJCQkweDIKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJSQkJMHgzCisjZGVmaW5lIFVBQ19FWFRfRk9STUFUX1RZUEVfSQkJMHg4MQorI2RlZmluZSBVQUNfRVhUX0ZPUk1BVF9UWVBFX0lJCQkweDgyCisjZGVmaW5lIFVBQ19FWFRfRk9STUFUX1RZUEVfSUlJCQkweDgzCiAKIHN0cnVjdCB1YWNfaXNvX2VuZHBvaW50X2Rlc2NyaXB0b3IgewogCV9fdTggIGJMZW5ndGg7CQkJLyogaW4gYnl0ZXM6IDcgKi8KQEAgLTI1Miw3ICszMzYsMzEgQEAKICNkZWZpbmUgVUFDX0VQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTAkweDAyCiAjZGVmaW5lIFVBQ19FUF9DU19BVFRSX0ZJTExfTUFYCQkweDgwCiAKKy8qIEF1ZGlvIGNsYXNzIHYyLjA6IENMT0NLX1NPVVJDRSBkZXNjcmlwdG9yICovCisKK3N0cnVjdCB1YWNfY2xvY2tfc291cmNlX2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJDbG9ja0lEOworCV9fdTggYm1BdHRyaWJ1dGVzOworCV9fdTggYm1Db250cm9sczsKKwlfX3U4IGJBc3NvY1Rlcm1pbmFsOworCV9fdTggaUNsb2NrU291cmNlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogLyogQS4xMC4yIEZlYXR1cmUgVW5pdCBDb250cm9sIFNlbGVjdG9ycyAqLworCitzdHJ1Y3QgdWFjX2ZlYXR1cmVfdW5pdF9kZXNjcmlwdG9yIHsKKwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CisJX191OCBiVW5pdElEOworCV9fdTggYlNvdXJjZUlEOworCV9fdTggYkNvbnRyb2xTaXplOworCV9fdTggY29udHJvbHNbMF07IC8qIHZhcmlhYmxlIGxlbmd0aCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogI2RlZmluZSBVQUNfRlVfQ09OVFJPTF9VTkRFRklORUQJMHgwMAogI2RlZmluZSBVQUNfTVVURV9DT05UUk9MCQkweDAxCiAjZGVmaW5lIFVBQ19WT0xVTUVfQ09OVFJPTAkJMHgwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggZDQ5NjJhNy4uMzc5M2QxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC0zNTAsNiArMzUwLDcgQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcgICAgIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRScsICdHJykgLyogTVBFRy0xLzIvNCAgICAqLwogCiAvKiAgVmVuZG9yLXNwZWNpZmljIGZvcm1hdHMgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfQ1BJQTEgICAgdjRsMl9mb3VyY2MoJ0MnLCAnUCcsICdJJywgJ0EnKSAvKiBjcGlhMSBZVVYgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1dOVkEgICAgIHY0bDJfZm91cmNjKCdXJywgJ04nLCAnVicsICdBJykgLyogV2lubm92IGh3IGNvbXByZXNzICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMTBYICB2NGwyX2ZvdXJjYygnUycsICc5JywgJzEnLCAnMCcpIC8qIFNOOUMxMHggY29tcHJlc3Npb24gKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMyMFhfSTQyMCB2NGwyX2ZvdXJjYygnUycsICc5JywgJzInLCAnMCcpIC8qIFNOOUMyMHggWVVWIDQ6MjowICovCkBAIC0zNjIsNiArMzYzLDcgQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1NjEgIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnNicsICcxJykgLyogY29tcHJlc3NlZCBHQlJHIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QQUMyMDcgICB2NGwyX2ZvdXJjYygnUCcsICcyJywgJzAnLCAnNycpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfTVI5NzMxMEEgdjRsMl9mb3VyY2MoJ00nLCAnMycsICcxJywgJzAnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMyMDI4IHY0bDJfZm91cmNjKCdTJywgJ08nLCAnTicsICdYJykgLyogY29tcHJlc3NlZCBHQlJHIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUTkwNUMgICB2NGwyX2ZvdXJjYygnOScsICcwJywgJzUnLCAnQycpIC8qIGNvbXByZXNzZWQgUkdHQiBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUEpQRyAgICAgdjRsMl9mb3VyY2MoJ1AnLCAnSicsICdQJywgJ0cnKSAvKiBQaXhhcnQgNzN4eCBKUEVHICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9PVjUxMSAgICB2NGwyX2ZvdXJjYygnTycsICc1JywgJzEnLCAnMScpIC8qIG92NTExIEpQRUcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCmluZGV4IDA1N2EyZTAuLmY1MDhjNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW8uaApAQCAtNTEsNiArNTEsOSBAQAogICoJVGhpcyByZS1lbmFibGVzIGNhbGxiYWNrczsgaXQgcmV0dXJucyAiZmFsc2UiIGlmIHRoZXJlIGFyZSBwZW5kaW5nCiAgKglidWZmZXJzIGluIHRoZSBxdWV1ZSwgdG8gZGV0ZWN0IGEgcG9zc2libGUgcmFjZSBiZXR3ZWVuIHRoZSBkcml2ZXIKICAqCWNoZWNraW5nIGZvciBtb3JlIHdvcmssIGFuZCBlbmFibGluZyBjYWxsYmFja3MuCisgKiBAZGV0YWNoX3VudXNlZF9idWY6IGRldGFjaCBmaXJzdCB1bnVzZWQgYnVmZmVyCisgKiAJdnE6IHRoZSBzdHJ1Y3QgdmlydHF1ZXVlIHdlJ3JlIHRhbGtpbmcgYWJvdXQuCisgKiAJUmV0dXJucyBOVUxMIG9yIHRoZSAiZGF0YSIgdG9rZW4gaGFuZGVkIHRvIGFkZF9idWYKICAqCiAgKiBMb2NraW5nIHJ1bGVzIGFyZSBzdHJhaWdodGZvcndhcmQ6IHRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yCiAgKiBsb2NraW5nLiAgTm8gdHdvIG9wZXJhdGlvbnMgbWF5IGJlIGludm9rZWQgc2ltdWx0YW5lb3VzbHksIHdpdGggdGhlIGV4Y2VwdGlvbgpAQCAtNzEsNiArNzQsNyBAQAogCiAJdm9pZCAoKmRpc2FibGVfY2IpKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKIAlib29sICgqZW5hYmxlX2NiKShzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7CisJdm9pZCAqKCpkZXRhY2hfdW51c2VkX2J1Zikoc3RydWN0IHZpcnRxdWV1ZSAqdnEpOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggMTQxOGYwNC4uYTUwZWNkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtNyw2ICs3LDcgQEAKIAogLyogVGhlIGZlYXR1cmUgYml0bWFwIGZvciB2aXJ0aW8gYmFsbG9vbiAqLwogI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9GX01VU1RfVEVMTF9IT1NUCTAgLyogVGVsbCBiZWZvcmUgcmVjbGFpbWluZyBwYWdlcyAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9GX1NUQVRTX1ZRCTEgLyogTWVtb3J5IFN0YXRzIHZpcnRxdWV1ZSAqLwogCiAvKiBTaXplIG9mIGEgUEZOIGluIHRoZSBiYWxsb29uIGludGVyZmFjZS4gKi8KICNkZWZpbmUgVklSVElPX0JBTExPT05fUEZOX1NISUZUIDEyCkBAIC0xOCw0ICsxOSwxOCBAQAogCS8qIE51bWJlciBvZiBwYWdlcyB3ZSd2ZSBhY3R1YWxseSBnb3QgaW4gYmFsbG9vbi4gKi8KIAlfX2xlMzIgYWN0dWFsOwogfTsKKworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX1NXQVBfSU4gIDAgICAvKiBBbW91bnQgb2YgbWVtb3J5IHN3YXBwZWQgaW4gKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19TV0FQX09VVCAxICAgLyogQW1vdW50IG9mIG1lbW9yeSBzd2FwcGVkIG91dCAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX01BSkZMVCAgIDIgICAvKiBOdW1iZXIgb2YgbWFqb3IgZmF1bHRzICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUlORkxUICAgMyAgIC8qIE51bWJlciBvZiBtaW5vciBmYXVsdHMgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19NRU1GUkVFICA0ICAgLyogVG90YWwgYW1vdW50IG9mIGZyZWUgbWVtb3J5ICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUVNVE9UICAgNSAgIC8qIFRvdGFsIGFtb3VudCBvZiBtZW1vcnkgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19OUiAgICAgICA2CisKK3N0cnVjdCB2aXJ0aW9fYmFsbG9vbl9zdGF0IHsKKwl1MTYgdGFnOworCXU2NCB2YWw7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19CQUxMT09OX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKaW5kZXggZmQyOTRjNS4uZTUyMDI5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgVklSVElPX0JMS19GX0JMS19TSVpFCTYJLyogQmxvY2sgc2l6ZSBvZiBkaXNrIGlzIGF2YWlsYWJsZSovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9TQ1NJCTcJLyogU3VwcG9ydHMgc2NzaSBjb21tYW5kIHBhc3N0aHJ1ICovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9GTFVTSAk5CS8qIENhY2hlIGZsdXNoIGNvbW1hbmQgc3VwcG9ydCAqLworI2RlZmluZSBWSVJUSU9fQkxLX0ZfVE9QT0xPR1kJMTAJLyogVG9wb2xvZ3kgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlICovCiAKIHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZyB7CiAJLyogVGhlIGNhcGFjaXR5IChpbiA1MTItYnl0ZSBzZWN0b3JzKS4gKi8KQEAgLTI5LDggKzMwLDIwIEBACiAJCV9fdTggaGVhZHM7CiAJCV9fdTggc2VjdG9yczsKIAl9IGdlb21ldHJ5OworCiAJLyogYmxvY2sgc2l6ZSBvZiBkZXZpY2UgKGlmIFZJUlRJT19CTEtfRl9CTEtfU0laRSkgKi8KIAlfX3UzMiBibGtfc2l6ZTsKKworCS8qIHRoZSBuZXh0IDQgZW50cmllcyBhcmUgZ3VhcmRlZCBieSBWSVJUSU9fQkxLX0ZfVE9QT0xPR1kgICovCisJLyogZXhwb25lbnQgZm9yIHBoeXNpY2FsIGJsb2NrIHBlciBsb2dpY2FsIGJsb2NrLiAqLworCV9fdTggcGh5c2ljYWxfYmxvY2tfZXhwOworCS8qIGFsaWdubWVudCBvZmZzZXQgaW4gbG9naWNhbCBibG9ja3MuICovCisJX191OCBhbGlnbm1lbnRfb2Zmc2V0OworCS8qIG1pbmltdW0gSS9PIHNpemUgd2l0aG91dCBwZXJmb3JtYW5jZSBwZW5hbHR5IGluIGxvZ2ljYWwgYmxvY2tzLiAqLworCV9fdTE2IG1pbl9pb19zaXplOworCS8qIG9wdGltYWwgc3VzdGFpbmVkIEkvTyBzaXplIGluIGxvZ2ljYWwgYmxvY2tzLiAqLworCV9fdTMyIG9wdF9pb19zaXplOworCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IGZlODg1MTcuLmFlNGYwMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTMsMTkgKzMsNDUgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+Ci0vKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KLSAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisvKgorICogVGhpcyBoZWFkZXIsIGV4Y2x1ZGluZyB0aGUgI2lmZGVmIF9fS0VSTkVMX18gcGFydCwgaXMgQlNEIGxpY2Vuc2VkIHNvCisgKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgUmVkIEhhdCwgSW5jLiwgMjAwOSwgMjAxMAorICovCiAKIC8qIEZlYXR1cmUgYml0cyAqLwogI2RlZmluZSBWSVJUSU9fQ09OU09MRV9GX1NJWkUJMAkvKiBEb2VzIGhvc3QgcHJvdmlkZSBjb25zb2xlIHNpemU/ICovCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUIDEJLyogRG9lcyBob3N0IHByb3ZpZGUgbXVsdGlwbGUgcG9ydHM/ICovCiAKIHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcgewogCS8qIGNvbHVtcyBvZiB0aGUgc2NyZWVucyAqLwogCV9fdTE2IGNvbHM7CiAJLyogcm93cyBvZiB0aGUgc2NyZWVucyAqLwogCV9fdTE2IHJvd3M7CisJLyogbWF4LiBudW1iZXIgb2YgcG9ydHMgdGhpcyBkZXZpY2UgY2FuIGhvbGQgKi8KKwlfX3UzMiBtYXhfbnJfcG9ydHM7CisJLyogbnVtYmVyIG9mIHBvcnRzIGFkZGVkIHNvIGZhciAqLworCV9fdTMyIG5yX3BvcnRzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorLyoKKyAqIEEgbWVzc2FnZSB0aGF0J3MgcGFzc2VkIGJldHdlZW4gdGhlIEhvc3QgYW5kIHRoZSBHdWVzdCBmb3IgYQorICogcGFydGljdWxhciBwb3J0LgorICovCitzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29udHJvbCB7CisJX191MzIgaWQ7CQkvKiBQb3J0IG51bWJlciAqLworCV9fdTE2IGV2ZW50OwkJLyogVGhlIGtpbmQgb2YgY29udHJvbCBldmVudCAoc2VlIGJlbG93KSAqLworCV9fdTE2IHZhbHVlOwkJLyogRXh0cmEgaW5mb3JtYXRpb24gZm9yIHRoZSBrZXkgKi8KK307CisKKy8qIFNvbWUgZXZlbnRzIGZvciBjb250cm9sIG1lc3NhZ2VzICovCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfUkVBRFkJMAorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9DT05TT0xFX1BPUlQJMQorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9SRVNJWkUJCTIKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9PUEVOCTMKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9OQU1FCTQKKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9SRU1PVkUJNQogCiAjaWZkZWYgX19LRVJORUxfXwogaW50IF9faW5pdCB2aXJ0aW9fY29uc19lYXJseV9pbml0KGludCAoKnB1dF9jaGFycykodTMyLCBjb25zdCBjaGFyICosIGludCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2lzaWYuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9pc2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBiNzRhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9pc2lmLmgKQEAgLTAsMCArMSw1MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogaXNpZiBoZWFkZXIgZmlsZQorICovCisjaWZuZGVmIF9JU0lGX0gKKyNkZWZpbmUgX0lTSUZfSAorCisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS9jY2RjX3R5cGVzLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGZlX3R5cGVzLmg+CisKKy8qIGlzaWYgZmxvYXQgdHlwZSBTOFE4L1U4UTggKi8KK3N0cnVjdCBpc2lmX2Zsb2F0XzggeworCS8qIDggYml0IGludGVnZXIgcGFydCAqLworCV9fdTggaW50ZWdlcjsKKwkvKiA4IGJpdCBkZWNpbWFsIHBhcnQgKi8KKwlfX3U4IGRlY2ltYWw7Cit9OworCisvKiBpc2lmIGZsb2F0IHR5cGUgVTE2UTE2L1MxNlExNiAqLworc3RydWN0IGlzaWZfZmxvYXRfMTYgeworCS8qIDE2IGJpdCBpbnRlZ2VyIHBhcnQgKi8KKwlfX3UxNiBpbnRlZ2VyOworCS8qIDE2IGJpdCBkZWNpbWFsIHBhcnQgKi8KKwlfX3UxNiBkZWNpbWFsOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBWZXJ0aWNhbCBEZWZlY3QgQ29ycmVjdGlvbiBwYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWZlY3QgQ29ycmVjdGlvbiAoREZDKSB0YWJsZSBlbnRyeSAqLworc3RydWN0IGlzaWZfdmRmY19lbnRyeSB7CisJLyogdmVydGljYWwgcG9zaXRpb24gb2YgZGVmZWN0ICovCisJX191MTYgcG9zX3ZlcnQ7CisJLyogaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiBkZWZlY3QgKi8KKwlfX3UxNiBwb3NfaG9yejsKKwkvKgorCSAqIERlZmVjdCBsZXZlbCBvZiBWZXJ0aWNhbCBsaW5lIGRlZmVjdCBwb3NpdGlvbi4gVGhpcyBpcyBzdWJ0cmFjdGVkCisJICogZnJvbSB0aGUgZGF0YSBhdCB0aGUgZGVmZWN0IHBvc2l0aW9uCisJICovCisJX191OCBsZXZlbF9hdF9wb3M7CisJLyoKKwkgKiBEZWZlY3QgbGV2ZWwgb2YgdGhlIHBpeGVscyB1cHBlciB0aGFuIHRoZSB2ZXJ0aWNhbCBsaW5lIGRlZmVjdC4KKwkgKiBUaGlzIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZGF0YQorCSAqLworCV9fdTggbGV2ZWxfdXBfcGl4ZWxzOworCS8qCisJICogRGVmZWN0IGxldmVsIG9mIHRoZSBwaXhlbHMgbG93ZXIgdGhhbiB0aGUgdmVydGljYWwgbGluZSBkZWZlY3QuCisJICogVGhpcyBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGRhdGEKKwkgKi8KKwlfX3U4IGxldmVsX2xvd19waXhlbHM7Cit9OworCisjZGVmaW5lIElTSUZfVkRGQ19UQUJMRV9TSVpFCQk4CitzdHJ1Y3QgaXNpZl9kZmMgeworCS8qIGVuYWJsZSB2ZXJ0aWNhbCBkZWZlY3QgY29ycmVjdGlvbiAqLworCV9fdTggZW47CisJLyogRGVmZWN0IGxldmVsIHN1YnRyYWN0aW9uLiBKdXN0IGZlZCB0aHJvdWdoIGlmIHNhdHVyYXRpbmcgKi8KKyNkZWZpbmUJSVNJRl9WREZDX05PUk1BTAkJMAorCS8qCisJICogRGVmZWN0IGxldmVsIHN1YnRyYWN0aW9uLiBIb3Jpem9udGFsIGludGVycG9sYXRpb24gKChpLTIpKyhpKzIpKS8yCisJICogaWYgZGF0YSBzYXR1cmF0aW5nCisJICovCisjZGVmaW5lIElTSUZfVkRGQ19IT1JaX0lOVEVSUE9MX0lGX1NBVAkxCisJLyogSG9yaXpvbnRhbCBpbnRlcnBvbGF0aW9uICgoKGktMikrKGkrMikpLzIpICovCisjZGVmaW5lCUlTSUZfVkRGQ19IT1JaX0lOVEVSUE9MCQkyCisJLyogb25lIG9mIHRoZSB2ZXJ0aWNhbCBkZWZlY3QgY29ycmVjdGlvbiBtb2RlcyBhYm92ZSAqLworCV9fdTggY29ycl9tb2RlOworCS8qIDAgLSB3aG9sZSBsaW5lIGNvcnJlY3RlZCwgMSAtIG5vdCBwaXhlbHMgdXBwZXIgdGhhbiB0aGUgZGVmZWN0ICovCisJX191OCBjb3JyX3dob2xlX2xpbmU7CisjZGVmaW5lIElTSUZfVkRGQ19OT19TSElGVAkJMAorI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfMQkJMQorI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfMgkJMgorI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfMwkJMworI2RlZmluZSBJU0lGX1ZERkNfU0hJRlRfNAkJNAorCS8qCisJICogZGVmZWN0IGxldmVsIHNoaWZ0IHZhbHVlLiBsZXZlbF9hdF9wb3MsIGxldmVsX3VwcGVyX3BvcywKKwkgKiBhbmQgbGV2ZWxfbG93ZXJfcG9zIGNhbiBiZSBzaGlmdGVkIHVwIGJ5IHRoaXMgdmFsdWUuIENob29zZQorCSAqIG9uZSBvZiB0aGUgdmFsdWVzIGFib3ZlCisJICovCisJX191OCBkZWZfbGV2ZWxfc2hpZnQ7CisJLyogZGVmZWN0IHNhdHVyYXRpb24gbGV2ZWwgKi8KKwlfX3UxNiBkZWZfc2F0X2xldmVsOworCS8qIG51bWJlciBvZiB2ZXJ0aWNhbCBkZWZlY3RzLiBNYXggaXMgSVNJRl9WREZDX1RBQkxFX1NJWkUgKi8KKwlfX3UxNiBudW1fdmRlZmVjdHM7CisJLyogVkRGQyB0YWJsZSBwdHIgKi8KKwlzdHJ1Y3QgaXNpZl92ZGZjX2VudHJ5IHRhYmxlW0lTSUZfVkRGQ19UQUJMRV9TSVpFXTsKK307CisKK3N0cnVjdCBpc2lmX2hvcnpfYmNsYW1wIHsKKworCS8qIEhvcml6b250YWwgY2xhbXAgZGlzYWJsZWQuIE9ubHkgdmVydGljYWwgY2xhbXAgdmFsdWUgaXMgc3VidHJhY3RlZCAqLworI2RlZmluZQlJU0lGX0hPUlpfQkNfRElTQUJMRQkJMAorCS8qCisJICogSG9yaXpvbnRhbCBjbGFtcCB2YWx1ZSBpcyBjYWxjdWxhdGVkIGFuZCBzdWJ0cmFjdGVkIGZyb20gaW1hZ2UgZGF0YQorCSAqIGFsb25nIHdpdGggdmVydGljYWwgY2xhbXAgdmFsdWUKKwkgKi8KKyNkZWZpbmUgSVNJRl9IT1JaX0JDX0NMQU1QX0NBTENfRU5BQkxFRAkxCisJLyoKKwkgKiBIb3Jpem9udGFsIGNsYW1wIHZhbHVlIGNhbGN1bGF0ZWQgZnJvbSBwcmV2aW91cyBpbWFnZSBpcyBzdWJ0cmFjdGVkCisJICogZnJvbSBpbWFnZSBkYXRhIGFsb25nIHdpdGggdmVydGljYWwgY2xhbXAgdmFsdWUuCisJICovCisjZGVmaW5lIElTSUZfSE9SWl9CQ19DTEFNUF9OT1RfVVBEQVRFRAkyCisJLyogaG9yaXpvbnRhbCBjbGFtcCBtb2RlLiBPbmUgb2YgdGhlIHZhbHVlcyBhYm92ZSAqLworCV9fdTggbW9kZTsKKwkvKgorCSAqIHBpeGVsIHZhbHVlIGxpbWl0IGVuYWJsZS4KKwkgKiAgMCAtIGxpbWl0IGRpc2FibGVkCisJICogIDEgLSBwaXhlbCB2YWx1ZSBsaW1pdGVkIHRvIDEwMjMKKwkgKi8KKwlfX3U4IGNsYW1wX3BpeF9saW1pdDsKKwkvKiBTZWxlY3QgTW9zdCBsZWZ0IHdpbmRvdyBmb3IgYmMgY2FsY3VsYXRpb24gKi8KKyNkZWZpbmUJSVNJRl9TRUxfTU9TVF9MRUZUX1dJTgkJMAorCS8qIFNlbGVjdCBNb3N0IHJpZ2h0IHdpbmRvdyBmb3IgYmMgY2FsY3VsYXRpb24gKi8KKyNkZWZpbmUgSVNJRl9TRUxfTU9TVF9SSUdIVF9XSU4JCTEKKwkvKiBTZWxlY3QgbW9zdCBsZWZ0IG9yIHJpZ2h0IHdpbmRvdyBmb3IgY2xhbXAgdmFsIGNhbGN1bGF0aW9uICovCisJX191OCBiYXNlX3dpbl9zZWxfY2FsYzsKKwkvKiBXaW5kb3cgY291bnQgcGVyIGNvbG9yIGZvciBjYWxjdWxhdGlvbi4gcmFuZ2UgMS0zMiAqLworCV9fdTggd2luX2NvdW50X2NhbGM7CisJLyogV2luZG93IHN0YXJ0IHBvc2l0aW9uIC0gaG9yaXpvbnRhbCBmb3IgY2FsY3VsYXRpb24uIDAgLSA4MTkxICovCisJX191MTYgd2luX3N0YXJ0X2hfY2FsYzsKKwkvKiBXaW5kb3cgc3RhcnQgcG9zaXRpb24gLSB2ZXJ0aWNhbCBmb3IgY2FsY3VsYXRpb24gMCAtIDgxOTEgKi8KKwlfX3UxNiB3aW5fc3RhcnRfdl9jYWxjOworI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfSF8yUElYRUxTCTAKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX0hfNFBJWEVMUwkxCisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9IXzhQSVhFTFMJMgorI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfSF8xNlBJWEVMUwkzCisJLyogV2lkdGggb2YgdGhlIHNhbXBsZSB3aW5kb3cgaW4gcGl4ZWxzIGZvciBjYWxjdWxhdGlvbiAqLworCV9fdTggd2luX2hfc3pfY2FsYzsKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX1ZfMzJQSVhFTFMJMAorI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfVl82NFBJWEVMUwkxCisjZGVmaW5lCUlTSUZfSE9SWl9CQ19TWl9WXzEyOFBJWEVMUwkyCisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9WXzI1NlBJWEVMUwkzCisJLyogSGVpZ2h0IG9mIHRoZSBzYW1wbGUgd2luZG93IGluIHBpeGVscyBmb3IgY2FsY3VsYXRpb24gKi8KKwlfX3U4IHdpbl92X3N6X2NhbGM7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQmxhY2sgQ2xhbXAgcGFyYW1ldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfdmVydF9iY2xhbXAgeworCS8qIFJlc2V0IHZhbHVlIHVzZWQgaXMgdGhlIGNsYW1wIHZhbHVlIGNhbGN1bGF0ZWQgKi8KKyNkZWZpbmUJSVNJRl9WRVJUX0JDX1VTRV9IT1JaX0NMQU1QX1ZBTAkJMAorCS8qIFJlc2V0IHZhbHVlIHVzZWQgaXMgcmVzZXRfY2xhbXBfdmFsIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUJSVNJRl9WRVJUX0JDX1VTRV9DT05GSUdfQ0xBTVBfVkFMCTEKKwkvKiBObyB1cGRhdGUsIHByZXZpb3VzIGltYWdlIHZhbHVlIGlzIHVzZWQgKi8KKyNkZWZpbmUJSVNJRl9WRVJUX0JDX05PX1VQREFURQkJCTIKKwkvKgorCSAqIFJlc2V0IHZhbHVlIHNlbGVjdG9yIGZvciB2ZXJ0aWNhbCBjbGFtcCBjYWxjdWxhdGlvbi4gVXNlIG9uZSBvZgorCSAqIHRoZSBhYm92ZSB2YWx1ZXMKKwkgKi8KKwlfX3U4IHJlc2V0X3ZhbF9zZWw7CisJLyogVThROC4gTGluZSBhdmVyYWdlIGNvZWZmaWNpZW50IHVzZWQgaW4gdmVydGljYWwgY2xhbXAgY2FsY3VsYXRpb24gKi8KKwlfX3U4IGxpbmVfYXZlX2NvZWY7CisJLyogSGVpZ2h0IG9mIHRoZSBvcHRpY2FsIGJsYWNrIHJlZ2lvbiBmb3IgY2FsY3VsYXRpb24gKi8KKwlfX3UxNiBvYl92X3N6X2NhbGM7CisJLyogT3B0aWNhbCBibGFjayByZWdpb24gc3RhcnQgcG9zaXRpb24gLSBob3Jpem9udGFsLiAwIC0gODE5MSAqLworCV9fdTE2IG9iX3N0YXJ0X2g7CisJLyogT3B0aWNhbCBibGFjayByZWdpb24gc3RhcnQgcG9zaXRpb24gLSB2ZXJ0aWNhbCAwIC0gODE5MSAqLworCV9fdTE2IG9iX3N0YXJ0X3Y7Cit9OworCitzdHJ1Y3QgaXNpZl9ibGFja19jbGFtcCB7CisJLyoKKwkgKiBUaGlzIG9mZnNldCB2YWx1ZSBpcyBhZGRlZCBpcnJlc3BlY3RpdmUgb2YgdGhlIGNsYW1wIGVuYWJsZSBzdGF0dXMuCisJICogUzEzCisJICovCisJX191MTYgZGNfb2Zmc2V0OworCS8qCisJICogRW5hYmxlIGJsYWNrL2RpZ2l0YWwgY2xhbXAgdmFsdWUgdG8gYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBpbWFnZSBkYXRhCisJICovCisJX191OCBlbjsKKwkvKgorCSAqIGJsYWNrIGNsYW1wIG1vZGUuIHNhbWUvc2VwYXJhdGUgY2xhbXAgZm9yIDQgY29sb3JzCisJICogMCAtIGRpc2FibGUgLSBzYW1lIGNsYW1wIHZhbHVlIGZvciBhbGwgY29sb3JzCisJICogMSAtIGNsYW1wIHZhbHVlIGNhbGN1bGF0ZWQgc2VwYXJhdGVseSBmb3IgYWxsIGNvbG9ycworCSAqLworCV9fdTggYmNfbW9kZV9jb2xvcjsKKwkvKiBWcnRpY2FsIHN0YXJ0IHBvc2l0aW9uIGZvciBiYyBzdWJ0cmFjdGlvbiAqLworCV9fdTE2IHZlcnRfc3RhcnRfc3ViOworCS8qIEJsYWNrIGNsYW1wIGZvciBob3Jpem9udGFsIGRpcmVjdGlvbiAqLworCXN0cnVjdCBpc2lmX2hvcnpfYmNsYW1wIGhvcno7CisJLyogQmxhY2sgY2xhbXAgZm9yIHZlcnRpY2FsIGRpcmVjdGlvbiAqLworCXN0cnVjdCBpc2lmX3ZlcnRfYmNsYW1wIHZlcnQ7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogQ29sb3IgU3BhY2UgQ29udmVydGlvbiAoQ1NDKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSVNJRl9DU0NfTlVNX0NPRUZGCTE2CitzdHJ1Y3QgaXNpZl9jb2xvcl9zcGFjZV9jb252IHsKKwkvKiBFbmFibGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiAqLworCV9fdTggZW47CisJLyoKKwkgKiBjc2MgY29lZmZpZW50IHRhYmxlLiBTOFE1LCBNMDAgYXQgaW5kZXggMCwgTTAxIGF0IGluZGV4IDEsIGFuZAorCSAqIHNvIGZvcnRoCisJICovCisJc3RydWN0IGlzaWZfZmxvYXRfOCBjb2VmZltJU0lGX0NTQ19OVU1fQ09FRkZdOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogIEJsYWNrICBDb21wZW5zYXRpb24gcGFyYW1ldGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBpc2lmX2JsYWNrX2NvbXAgeworCS8qIENvbXAgZm9yIFJlZCAqLworCV9fczggcl9jb21wOworCS8qIENvbXAgZm9yIEdyICovCisJX19zOCBncl9jb21wOworCS8qIENvbXAgZm9yIEJsdWUgKi8KKwlfX3M4IGJfY29tcDsKKwkvKiBDb21wIGZvciBHYiAqLworCV9fczggZ2JfY29tcDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgR2FpbiBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfZ2FpbiB7CisJLyogR2FpbiBmb3IgUmVkIG9yIHllICovCisJc3RydWN0IGlzaWZfZmxvYXRfMTYgcl95ZTsKKwkvKiBHYWluIGZvciBHciBvciBjeSAqLworCXN0cnVjdCBpc2lmX2Zsb2F0XzE2IGdyX2N5OworCS8qIEdhaW4gZm9yIEdiIG9yIGcgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBnYl9nOworCS8qIEdhaW4gZm9yIEJsdWUgb3IgbWcgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBiX21nOworfTsKKworI2RlZmluZSBJU0lGX0xJTkVBUl9UQUJfU0laRQkxOTIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgTGluZWFyaXphdGlvbiBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfbGluZWFyaXplIHsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBsaW5lYXJpemF0aW9uIG9mIGRhdGEgKi8KKwlfX3U4IGVuOworCS8qIFNoaWZ0IHZhbHVlIGFwcGxpZWQgKi8KKwlfX3U4IGNvcnJfc2hmdDsKKwkvKiBzY2FsZSBmYWN0b3IgYXBwbGllZCBVMTFRMTAgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiBzY2FsZV9mYWN0OworCS8qIFNpemUgb2YgdGhlIGxpbmVhciB0YWJsZSAqLworCV9fdTE2IHRhYmxlW0lTSUZfTElORUFSX1RBQl9TSVpFXTsKK307CisKKy8qIENvbG9yIHBhdHRlcm5zICovCisjZGVmaW5lIElTSUZfUkVECTAKKyNkZWZpbmUJSVNJRl9HUkVFTl9SRUQJMQorI2RlZmluZSBJU0lGX0dSRUVOX0JMVUUJMgorI2RlZmluZSBJU0lGX0JMVUUJMworc3RydWN0IGlzaWZfY29sX3BhdCB7CisJX191OCBvbG9wOworCV9fdTggb2xlcDsKKwlfX3U4IGVsb3A7CisJX191OCBlbGVwOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqICBEYXRhIGZvcm1hdHRlciBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfZm10cGxlbiB7CisJLyoKKwkgKiBudW1iZXIgb2YgcHJvZ3JhbSBlbnRyaWVzIGZvciBTRVQwLCByYW5nZSAxIC0gMTYKKwkgKiB3aGVuIGZtdG1vZGUgaXMgSVNJRl9TUExJVCwgMSAtIDggd2hlbiBmbXRtb2RlIGlzCisJICogSVNJRl9DT01CSU5FCisJICovCisJX191MTYgcGxlbjA7CisJLyoKKwkgKiBudW1iZXIgb2YgcHJvZ3JhbSBlbnRyaWVzIGZvciBTRVQxLCByYW5nZSAxIC0gMTYKKwkgKiB3aGVuIGZtdG1vZGUgaXMgSVNJRl9TUExJVCwgMSAtIDggd2hlbiBmbXRtb2RlIGlzCisJICogSVNJRl9DT01CSU5FCisJICovCisJX191MTYgcGxlbjE7CisJLyoqCisJICogbnVtYmVyIG9mIHByb2dyYW0gZW50cmllcyBmb3IgU0VUMiwgcmFuZ2UgMSAtIDE2CisJICogd2hlbiBmbXRtb2RlIGlzIElTSUZfU1BMSVQsIDEgLSA4IHdoZW4gZm10bW9kZSBpcworCSAqIElTSUZfQ09NQklORQorCSAqLworCV9fdTE2IHBsZW4yOworCS8qKgorCSAqIG51bWJlciBvZiBwcm9ncmFtIGVudHJpZXMgZm9yIFNFVDMsIHJhbmdlIDEgLSAxNgorCSAqIHdoZW4gZm10bW9kZSBpcyBJU0lGX1NQTElULCAxIC0gOCB3aGVuIGZtdG1vZGUgaXMKKwkgKiBJU0lGX0NPTUJJTkUKKwkgKi8KKwlfX3UxNiBwbGVuMzsKK307CisKK3N0cnVjdCBpc2lmX2ZtdF9jZmcgeworI2RlZmluZSBJU0lGX1NQTElUCQkwCisjZGVmaW5lIElTSUZfQ09NQklORQkJMQorCS8qIFNwbGl0IG9yIGNvbWJpbmUgb3IgbGluZSBhbHRlcm5hdGUgKi8KKwlfX3U4IGZtdG1vZGU7CisJLyogZW5hYmxlIG9yIGRpc2FibGUgbGluZSBhbHRlcm5hdGluZyBtb2RlICovCisJX191OCBsbl9hbHRlcl9lbjsKKyNkZWZpbmUgSVNJRl8xTElORQkJMAorI2RlZmluZQlJU0lGXzJMSU5FUwkJMQorI2RlZmluZQlJU0lGXzNMSU5FUwkJMgorI2RlZmluZQlJU0lGXzRMSU5FUwkJMworCS8qIFNwbGl0L2NvbWJpbmUgbGluZSBudW1iZXIgKi8KKwlfX3U4IGxudW07CisJLyogQWRkcmVzcyBpbmNyZW1lbnQgUmFuZ2UgMSAtIDE2ICovCisJX191OCBhZGRyaW5jOworfTsKKworc3RydWN0IGlzaWZfZm10X2FkZHJfcHRyIHsKKwkvKiBJbml0aWFsIGFkZHJlc3MgKi8KKwlfX3UzMiBpbml0X2FkZHI7CisJLyogb3V0cHV0IGxpbmUgbnVtYmVyICovCisjZGVmaW5lIElTSUZfMVNUTElORQkJMAorI2RlZmluZQlJU0lGXzJORExJTkUJCTEKKyNkZWZpbmUJSVNJRl8zUkRMSU5FCQkyCisjZGVmaW5lCUlTSUZfNFRITElORQkJMworCV9fdTggb3V0X2xpbmU7Cit9OworCitzdHJ1Y3QgaXNpZl9mbXRwZ21fYXAgeworCS8qIHByb2dyYW0gYWRkcmVzcyBwb2ludGVyICovCisJX191OCBwZ21fYXB0cjsKKwkvKiBwcm9ncmFtIGFkZHJlc3MgaW5jcmVtZW50IG9yIGRlY3JlbWVudCAqLworCV9fdTggcGdtdXBkdDsKK307CisKK3N0cnVjdCBpc2lmX2RhdGFfZm9ybWF0dGVyIHsKKwkvKiBFbmFibGUvRGlzYWJsZSBkYXRhIGZvcm1hdHRlciAqLworCV9fdTggZW47CisJLyogZGF0YSBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBpc2lmX2ZtdF9jZmcgY2ZnOworCS8qIEZvcm1hdHRlciBwcm9ncmFtIGVudHJpZXMgbGVuZ3RoICovCisJc3RydWN0IGlzaWZfZm10cGxlbiBwbGVuOworCS8qIGZpcnN0IHBpeGVsIGluIGEgbGluZSBmZWQgdG8gZm9ybWF0dGVyICovCisJX191MTYgZm10cmxlbjsKKwkvKiBIRCBpbnRlcnZhbCBmb3Igb3V0cHV0IGxpbmUuIE9ubHkgdmFsaWQgd2hlbiBzcGxpdCBsaW5lICovCisJX191MTYgZm10aGNudDsKKwkvKiBmb3JtYXR0ZXIgYWRkcmVzcyBwb2ludGVycyAqLworCXN0cnVjdCBpc2lmX2ZtdF9hZGRyX3B0ciBmbXRhZGRyX3B0clsxNl07CisJLyogcHJvZ3JhbSBlbmFibGUvZGlzYWJsZSAqLworCV9fdTggcGdtX2VuWzMyXTsKKwkvKiBwcm9ncmFtIGFkZHJlc3MgcG9pbnRlcnMgKi8KKwlzdHJ1Y3QgaXNpZl9mbXRwZ21fYXAgZm10cGdtX2FwWzMyXTsKK307CisKK3N0cnVjdCBpc2lmX2RmX2NzYyB7CisJLyogQ29sb3IgU3BhY2UgQ29udmVyc2lvbiBjb25mZ3VyYXRpb24sIDAgLSBjc2MsIDEgLSBkZiAqLworCV9fdTggZGZfb3JfY3NjOworCS8qIGNzYyBjb25maWd1cmF0aW9uIHZhbGlkIGlmIGRmX29yX2NzYyBpcyAwICovCisJc3RydWN0IGlzaWZfY29sb3Jfc3BhY2VfY29udiBjc2M7CisJLyogZGF0YSBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiB2YWxpZCBpZiBkZl9vcl9jc2MgaXMgMSAqLworCXN0cnVjdCBpc2lmX2RhdGFfZm9ybWF0dGVyIGRmOworCS8qIHN0YXJ0IHBpeGVsIGluIGEgbGluZSBhdCB0aGUgaW5wdXQgKi8KKwlfX3UzMiBzdGFydF9waXg7CisJLyogbnVtYmVyIG9mIHBpeGVscyBpbiBpbnB1dCBsaW5lICovCisJX191MzIgbnVtX3BpeGVsczsKKwkvKiBzdGFydCBsaW5lIGF0IHRoZSBpbnB1dCAqLworCV9fdTMyIHN0YXJ0X2xpbmU7CisJLyogbnVtYmVyIG9mIGxpbmVzIGF0IHRoZSBpbnB1dCAqLworCV9fdTMyIG51bV9saW5lczsKK307CisKK3N0cnVjdCBpc2lmX2dhaW5fb2Zmc2V0c19hZGogeworCS8qIEdhaW4gYWRqdXN0bWVudCBwZXIgY29sb3IgKi8KKwlzdHJ1Y3QgaXNpZl9nYWluIGdhaW47CisJLyogT2Zmc2V0IGFkanVzdG1lbnQgKi8KKwlfX3UxNiBvZmZzZXQ7CisJLyogRW5hYmxlIG9yIERpc2FibGUgR2FpbiBhZGp1c3RtZW50IGZvciBTRFJBTSBkYXRhICovCisJX191OCBnYWluX3NkcmFtX2VuOworCS8qIEVuYWJsZSBvciBEaXNhYmxlIEdhaW4gYWRqdXN0bWVudCBmb3IgSVBJUEUgZGF0YSAqLworCV9fdTggZ2Fpbl9pcGlwZV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIEgzQSBkYXRhICovCisJX191OCBnYWluX2gzYV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIFNEUkFNIGRhdGEgKi8KKwlfX3U4IG9mZnNldF9zZHJhbV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIElQSVBFIGRhdGEgKi8KKwlfX3U4IG9mZnNldF9pcGlwZV9lbjsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIEgzQSBkYXRhICovCisJX191OCBvZmZzZXRfaDNhX2VuOworfTsKKworc3RydWN0IGlzaWZfY3VsIHsKKwkvKiBIb3Jpem9udGFsIEN1bGwgcGF0dGVybiBmb3Igb2RkIGxpbmVzICovCisJX191OCBoY3BhdF9vZGQ7CisJLyogSG9yaXpvbnRhbCBDdWxsIHBhdHRlcm4gZm9yIGV2ZW4gbGluZXMgKi8KKwlfX3U4IGhjcGF0X2V2ZW47CisJLyogVmVydGljYWwgQ3VsbCBwYXR0ZXJuICovCisJX191OCB2Y3BhdDsKKwkvKiBFbmFibGUgb3IgZGlzYWJsZSBscGYuIEFwcGx5IHdoZW4gY3VsbCBpcyBlbmFibGVkICovCisJX191OCBlbl9scGY7Cit9OworCitzdHJ1Y3QgaXNpZl9jb21wcmVzcyB7CisjZGVmaW5lIElTSUZfQUxBVwkJMAorI2RlZmluZSBJU0lGX0RQQ00JCTEKKyNkZWZpbmUgSVNJRl9OT19DT01QUkVTU0lPTgkyCisJLyogQ29tcHJlc3Npb24gQWxnb3JpdGhtIHVzZWQgKi8KKwlfX3U4IGFsZzsKKwkvKiBDaG9vc2UgUHJlZGljdG9yMSBmb3IgRFBDTSBjb21wcmVzc2lvbiAqLworI2RlZmluZSBJU0lGX0RQQ01fUFJFRDEJCTAKKwkvKiBDaG9vc2UgUHJlZGljdG9yMiBmb3IgRFBDTSBjb21wcmVzc2lvbiAqLworI2RlZmluZSBJU0lGX0RQQ01fUFJFRDIJCTEKKwkvKiBQcmVkaWN0b3IgZm9yIERQQ00gY29tcHJlc3Npb24gKi8KKwlfX3U4IHByZWQ7Cit9OworCisvKiBhbGwgdGhlIHN0dWZmIGluIHRoaXMgc3RydWN0IHdpbGwgYmUgcHJvdmlkZWQgYnkgdXNlcmxhbmQgKi8KK3N0cnVjdCBpc2lmX2NvbmZpZ19wYXJhbXNfcmF3IHsKKwkvKiBMaW5lYXJpemF0aW9uIHBhcmFtZXRlcnMgZm9yIGltYWdlIHNlbnNvciBkYXRhIGlucHV0ICovCisJc3RydWN0IGlzaWZfbGluZWFyaXplIGxpbmVhcml6ZTsKKwkvKiBEYXRhIGZvcm1hdHRlciBvciBDU0MgKi8KKwlzdHJ1Y3QgaXNpZl9kZl9jc2MgZGZfY3NjOworCS8qIERlZmVjdCBQaXhlbCBDb3JyZWN0aW9uIChERkMpIGNvbmZndXJhdGlvbiAqLworCXN0cnVjdCBpc2lmX2RmYyBkZmM7CisJLyogQmxhY2svRGlnaXRhbCBDbGFtcCBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGlzaWZfYmxhY2tfY2xhbXAgYmNsYW1wOworCS8qIEdhaW4sIG9mZnNldCBhZGp1c3RtZW50cyAqLworCXN0cnVjdCBpc2lmX2dhaW5fb2Zmc2V0c19hZGogZ2Fpbl9vZmZzZXQ7CisJLyogQ3VsbGluZyAqLworCXN0cnVjdCBpc2lmX2N1bCBjdWxsaW5nOworCS8qIEEtTGF3IGFuZCBEUENNIGNvbXByZXNzaW9uIG9wdGlvbnMgKi8KKwlzdHJ1Y3QgaXNpZl9jb21wcmVzcyBjb21wcmVzczsKKwkvKiBob3Jpem9udGFsIG9mZnNldCBmb3IgR2Fpbi9MU0MvREZDICovCisJX191MTYgaG9yel9vZmZzZXQ7CisJLyogdmVydGljYWwgb2Zmc2V0IGZvciBHYWluL0xTQy9ERkMgKi8KKwlfX3UxNiB2ZXJ0X29mZnNldDsKKwkvKiBjb2xvciBwYXR0ZXJuIGZvciBmaWVsZCAwICovCisJc3RydWN0IGlzaWZfY29sX3BhdCBjb2xfcGF0X2ZpZWxkMDsKKwkvKiBjb2xvciBwYXR0ZXJuIGZvciBmaWVsZCAxICovCisJc3RydWN0IGlzaWZfY29sX3BhdCBjb2xfcGF0X2ZpZWxkMTsKKyNkZWZpbmUgSVNJRl9OT19TSElGVAkJMAorI2RlZmluZQlJU0lGXzFCSVRfU0hJRlQJCTEKKyNkZWZpbmUJSVNJRl8yQklUX1NISUZUCQkyCisjZGVmaW5lCUlTSUZfM0JJVF9TSElGVAkJMworI2RlZmluZQlJU0lGXzRCSVRfU0hJRlQJCTQKKyNkZWZpbmUgSVNJRl81QklUX1NISUZUCQk1CisjZGVmaW5lIElTSUZfNkJJVF9TSElGVAkJNgorCS8qIERhdGEgc2hpZnQgYXBwbGllZCBiZWZvcmUgc3RvcmluZyB0byBTRFJBTSAqLworCV9fdTggZGF0YV9zaGlmdDsKKwkvKiBlbmFibGUgaW5wdXQgdGVzdCBwYXR0ZXJuIGdlbmVyYXRpb24gKi8KKwlfX3U4IHRlc3RfcGF0X2dlbjsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgaXNpZl95Y2Jjcl9jb25maWcgeworCS8qIGlzaWYgcGl4ZWwgZm9ybWF0ICovCisJZW51bSBjY2RjX3BpeGZtdCBwaXhfZm10OworCS8qIGlzaWYgZnJhbWUgZm9ybWF0ICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIElTSUYgY3JvcCB3aW5kb3cgKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IHdpbjsKKwkvKiBmaWVsZCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGZpZF9wb2w7CisJLyogaW50ZXJmYWNlIFZEIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgdmRfcG9sOworCS8qIGludGVyZmFjZSBIRCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGhkX3BvbDsKKwkvKiBpc2lmIHBpeCBvcmRlci4gT25seSB1c2VkIGZvciB5Y2JjciBjYXB0dXJlICovCisJZW51bSBjY2RjX3BpeG9yZGVyIHBpeF9vcmRlcjsKKwkvKiBpc2lmIGJ1ZmZlciB0eXBlLiBPbmx5IHVzZWQgZm9yIHljYmNyIGNhcHR1cmUgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKK307CisKKy8qIE1TQiBvZiBpbWFnZSBkYXRhIGNvbm5lY3RlZCB0byBzZW5zb3IgcG9ydCAqLworZW51bSBpc2lmX2RhdGFfbXNiIHsKKwlJU0lGX0JJVF9NU0JfMTUsCisJSVNJRl9CSVRfTVNCXzE0LAorCUlTSUZfQklUX01TQl8xMywKKwlJU0lGX0JJVF9NU0JfMTIsCisJSVNJRl9CSVRfTVNCXzExLAorCUlTSUZfQklUX01TQl8xMCwKKwlJU0lGX0JJVF9NU0JfOSwKKwlJU0lGX0JJVF9NU0JfOCwKKwlJU0lGX0JJVF9NU0JfNworfTsKKworZW51bSBpc2lmX2NmYV9wYXR0ZXJuIHsKKwlJU0lGX0NGQV9QQVRfTU9TQUlDLAorCUlTSUZfQ0ZBX1BBVF9TVFJJUEUKK307CisKK3N0cnVjdCBpc2lmX3BhcmFtc19yYXcgeworCS8qIGlzaWYgcGl4ZWwgZm9ybWF0ICovCisJZW51bSBjY2RjX3BpeGZtdCBwaXhfZm10OworCS8qIGlzaWYgZnJhbWUgZm9ybWF0ICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCS8qIHZpZGVvIHdpbmRvdyAqLworCXN0cnVjdCB2NGwyX3JlY3Qgd2luOworCS8qIGZpZWxkIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgZmlkX3BvbDsKKwkvKiBpbnRlcmZhY2UgVkQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCB2ZF9wb2w7CisJLyogaW50ZXJmYWNlIEhEIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgaGRfcG9sOworCS8qIGJ1ZmZlciB0eXBlLiBBcHBsaWNhYmxlIGZvciBpbnRlcmxhY2VkIG1vZGUgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKKwkvKiBHYWluIHZhbHVlcyAqLworCXN0cnVjdCBpc2lmX2dhaW4gZ2FpbjsKKwkvKiBjZmEgcGF0dGVybiAqLworCWVudW0gaXNpZl9jZmFfcGF0dGVybiBjZmFfcGF0OworCS8qIERhdGEgTVNCIHBvc2l0aW9uICovCisJZW51bSBpc2lmX2RhdGFfbXNiIGRhdGFfbXNiOworCS8qIEVuYWJsZSBob3Jpem9udGFsIGZsaXAgKi8KKwl1bnNpZ25lZCBjaGFyIGhvcnpfZmxpcF9lbjsKKwkvKiBFbmFibGUgaW1hZ2UgaW52ZXJ0IHZlcnRpY2FsbHkgKi8KKwl1bnNpZ25lZCBjaGFyIGltYWdlX2ludmVydF9lbjsKKworCS8qIGFsbCB0aGUgdXNlcmxhbmQgZGVmaW5lZCBzdHVmZiovCisJc3RydWN0IGlzaWZfY29uZmlnX3BhcmFtc19yYXcgY29uZmlnX3BhcmFtczsKK307CisKK2VudW0gaXNpZl9kYXRhX3BhY2sgeworCUlTSUZfUEFDS18xNkJJVCwKKwlJU0lGX1BBQ0tfMTJCSVQsCisJSVNJRl9QQUNLXzhCSVQKK307CisKKyNkZWZpbmUgSVNJRl9XSU5fTlRTQwkJCQl7MCwgMCwgNzIwLCA0ODB9CisjZGVmaW5lIElTSUZfV0lOX1ZHQQkJCQl7MCwgMCwgNjQwLCA0ODB9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaAppbmRleCBmY2RmZjc0Li5jNTljYzAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cHNzLmgKQEAgLTI5LDcgKzI5LDE5IEBACiAvKiBzZWxlY3RvciBmb3IgY2NkYyBpbnB1dCBzZWxlY3Rpb24gb24gRE0zNTUgKi8KIGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgewogCVZQU1NfQ0NEQ0lOLAotCVZQU1NfSFNTSUlOCisJVlBTU19IU1NJSU4sCisJVlBTU19QR0xQQkssCS8qIGZvciBETTM2NSBvbmx5ICovCisJVlBTU19DQ0RDUEcJLyogZm9yIERNMzY1IG9ubHkgKi8KK307CisKK3N0cnVjdCB2cHNzX3N5bmNfcG9sIHsKKwl1bnNpZ25lZCBpbnQgY2NkcGdfaGRwb2w6MTsKKwl1bnNpZ25lZCBpbnQgY2NkcGdfdmRwb2w6MTsKK307CisKK3N0cnVjdCB2cHNzX3BnX2ZyYW1lX3NpemUgeworCXNob3J0IGhscGZyOworCXNob3J0IHBwbGVuOwogfTsKIAogLyogVXNlZCBmb3IgZW5hYmxlL2RpYWJsZSBWUFNTIENsb2NrICovCkBAIC00NywxMiArNTksMzggQEAKIAkgKi8KIAlWUFNTX1ZFTkNfQ0xPQ0tfU0VMLAogCVZQU1NfVlBCRV9DTE9DSywKKwkvKiBETTM2NSBvbmx5IGNsb2NrcyAqLworCVZQU1NfSVBJUEVJRl9DTE9DSywKKwlWUFNTX1JTWl9DTE9DSywKKwlWUFNTX0JMX0NMT0NLLAorCS8qCisJICogV2hlbiB1c2luZyBWUFNTX1BDTEtfSU5URVJOQUwgaW4gdnBzc19lbmFibGVfY2xvY2soKSBhcGkKKwkgKiBmb2xsb3dpbmcgYXBwbGllczotCisJICogZW4gPSAwIGRpc2FibGUgaW50ZXJuYWwgUENMSworCSAqIGVuID0gMSBlbmFibGVzIGludGVybmFsIFBDTEsKKwkgKi8KKwlWUFNTX1BDTEtfSU5URVJOQUwsCisJLyoKKwkgKiBXaGVuIHVzaW5nIFZQU1NfUFNZTkNfQ0xPQ0tfU0VMIGluIHZwc3NfZW5hYmxlX2Nsb2NrKCkgYXBpCisJICogZm9sbG93aW5nIGFwcGxpZXM6LQorCSAqIGVuID0gMCBlbmFibGVzIE1NUiBjbG9jaworCSAqIGVuID0gMSBlbmFibGVzIFZQU1MgY2xvY2sKKwkgKi8KKwlWUFNTX1BTWU5DX0NMT0NLX1NFTCwKKwlWUFNTX0xEQ19DTE9DS19TRUwsCisJVlBTU19PU0RfQ0xPQ0tfU0VMLAorCVZQU1NfRkRJRl9DTE9DSywKKwlWUFNTX0xEQ19DTE9DSwogfTsKIAogLyogc2VsZWN0IGlucHV0IHRvIGNjZGMgb24gZG0zNTUgKi8KIGludCB2cHNzX3NlbGVjdF9jY2RjX3NvdXJjZShlbnVtIHZwc3NfY2NkY19zb3VyY2Vfc2VsIHNyY19zZWwpOwogLyogZW5hYmxlL2Rpc2FibGUgYSB2cHNzIGNsb2NrLCAwIC0gc3VjY2VzcywgLTEgLSBmYWlsdXJlICovCiBpbnQgdnBzc19lbmFibGVfY2xvY2soZW51bSB2cHNzX2Nsb2NrX3NlbCBjbG9ja19zZWwsIGludCBlbik7CisvKiBzZXQgc3luYyBwb2xhcml0eSwgb25seSBmb3IgRE0zNjUqLwordm9pZCBkbTM2NV92cHNzX3NldF9zeW5jX3BvbChzdHJ1Y3QgdnBzc19zeW5jX3BvbCk7CisvKiBzZXQgdGhlIFBHX0ZSQU1FX1NJWkUgcmVnaXN0ZXIsIG9ubHkgZm9yIERNMzY1ICovCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUoc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSk7CiAKIC8qIHdibCByZXNldCBmb3IgZG02NDR4ICovCiBlbnVtIHZwc3Nfd2JsX3NlbCB7CkBAIC02NSw1ICsxMDMsNiBAQAogCVZQU1NfUENSX1BSRVZfV0JMXzAsCiAJVlBTU19QQ1JfQ0NEQ19XQkxfTywKIH07CisvKiBjbGVhciB3Ymwgb3ZlcmZsb3cgZmxhZyBmb3IgRE02NDQ2ICovCiBpbnQgdnBzc19jbGVhcl93Ymxfb3ZlcmZsb3coZW51bSB2cHNzX3dibF9zZWwgd2JsX3NlbCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCmluZGV4IDJjNmFmMjQuLmM2NjI5ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaApAQCAtMzUsNyArMzUsNyBAQAogCiBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgewogCS8qIGNvbmZpZ3VyYXRpb24gKi8KLQlpbnQgICAgICAgICAgICAgICAgaXJfdHlwZTsKKwl1NjQgICAgICBpcl90eXBlOwogCiAJLyoga2V5IGluZm8gKi8KIAl1MzIgICAgICAgICAgICAgICAgaXJfa2V5OyAgICAgIC8qIGlyIHNjYW5jb2RlICovCkBAIC04NCw3ICs4NCw3IEBACiAvKiBSb3V0aW5lcyBmcm9tIGlyLWZ1bmN0aW9ucy5jICovCiAKIGludCBpcl9pbnB1dF9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKLQkJICAgaW50IGlyX3R5cGUpOworCQkgICBjb25zdCB1NjQgaXJfdHlwZSk7CiB2b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcik7CiB2b2lkIGlyX2lucHV0X2tleWRvd24oc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAogCQkgICAgICB1MzIgaXJfa2V5KTsKQEAgLTE2Miw0ICsxNjIsNiBAQAogZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc192aWRlb21hdGVfczM1MF90YWJsZTsKIGV4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZ2FkbWVpX3JtMDA4el90YWJsZTsKIGV4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbmVjX3RlcnJhdGVjX2NpbmVyZ3lfeHNfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb3JlLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaAppbmRleCAyOTlkMjAxLi42MWMyMjNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaApAQCAtMjEsMTMgKzIxLDExIEBACiAjZGVmaW5lIElSX2RwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKQlpZiAoaXJfY29yZV9kZWJ1ZyA+PSBsZXZlbCkgXAogCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQgLCBfX2Z1bmNfXywgIyMgYXJnKQogCi1lbnVtIGlyX3R5cGUgewotCUlSX1RZUEVfVU5LTk9XTgk9IDAsCi0JSVJfVFlQRV9SQzUJPSAxLAotCUlSX1RZUEVfUEQJPSAyLAkJIC8qIFB1bHNlIGRpc3RhbmNlIGVuY29kZWQgSVIgKi8KLQlJUl9UWVBFX05FQwk9IDMsCi0JSVJfVFlQRV9PVEhFUgk9IDk5LAotfTsKKyNkZWZpbmUgSVJfVFlQRV9VTktOT1dOCTAKKyNkZWZpbmUgSVJfVFlQRV9SQzUJKDEgIDw8IDApCS8qIFBoaWxpcHMgUkM1IHByb3RvY29sICovCisjZGVmaW5lIElSX1RZUEVfUEQJKDEgIDw8IDEpCS8qIFB1bHNlIGRpc3RhbmNlIGVuY29kZWQgSVIgKi8KKyNkZWZpbmUgSVJfVFlQRV9ORUMJKDEgIDw8IDIpCisjZGVmaW5lIElSX1RZUEVfT1RIRVIJKCgodTY0KTEpIDw8IDYzbCkKIAogc3RydWN0IGlyX3NjYW5jb2RlIHsKIAl1MTYJc2NhbmNvZGU7CkBAIC0zNywyNiArMzUsNDAgQEAKIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSB7CiAJc3RydWN0IGlyX3NjYW5jb2RlCSpzY2FuOwogCWludAkJCXNpemU7Ci0JZW51bQkJCWlyX3R5cGUgaXJfdHlwZTsKKwl1NjQJCWlyX3R5cGU7CiAJc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKLXN0cnVjdCBpcl9pbnB1dF9kZXYgewotCXN0cnVjdCBpbnB1dF9kZXYJCSpkZXY7Ci0Jc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlCXJjX3RhYjsKK3N0cnVjdCBpcl9kZXZfcHJvcHMgeworCXVuc2lnbmVkIGxvbmcgYWxsb3dlZF9wcm90b3M7CisJdm9pZCAJCSpwcml2OworCWludCAoKmNoYW5nZV9wcm90b2NvbCkodm9pZCAqcHJpdiwgdTY0IGlyX3R5cGUpOwogfTsKIAorCitzdHJ1Y3QgaXJfaW5wdXRfZGV2IHsKKwlzdHJ1Y3QgaW5wdXRfZGV2CQkqZGV2OwkJLyogSW5wdXQgZGV2aWNlKi8KKwlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUJcmNfdGFiOwkJLyogc2Nhbi9rZXkgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nCQkJZGV2bm87CQkvKiBkZXZpY2UgbnVtYmVyICovCisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkJYXR0cjsJCS8qIElSIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgZGV2aWNlCQkJKmNsYXNzX2RldjsJLyogdmlydHVhbCBjbGFzcyBkZXYgKi8KKwljb25zdCBzdHJ1Y3QgaXJfZGV2X3Byb3BzCSpwcm9wczsJCS8qIERldmljZSBwcm9wZXJ0aWVzICovCit9OworI2RlZmluZSB0b19pcl9pbnB1dF9kZXYoX2F0dHIpIGNvbnRhaW5lcl9vZihfYXR0ciwgc3RydWN0IGlyX2lucHV0X2RldiwgYXR0cikKKwogLyogUm91dGluZXMgZnJvbSBpci1rZXl0YWJsZS5jICovCiAKIHUzMiBpcl9nX2tleWNvZGVfZnJvbV90YWJsZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCiAJCQkgICAgdTMyIHNjYW5jb2RlKTsKIAotaW50IGlyX3NldF9rZXljb2RlX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKLQkJCSBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYik7Ci0KLWludCBpcl9yb3VuZHVwX3RhYmxlc2l6ZShpbnQgbl9lbGVtcyk7CiBpbnQgaXJfaW5wdXRfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzKTsKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcywKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMpOwogdm9pZCBpcl9pbnB1dF91bnJlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7CiAKKy8qIFJvdXRpbmVzIGZyb20gaXItc3lzZnMuYyAqLworCitpbnQgaXJfcmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKK3ZvaWQgaXJfdW5yZWdpc3Rlcl9jbGFzcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oIGIvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKaW5kZXggYWFmNjVlOC4uOTE0MjkzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmgKQEAgLTM2LDcgKzM2LDcgQEAKIHN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhIHsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzOwogCWNvbnN0IGNoYXIgICAgICAgICAgICAgKm5hbWU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICB0eXBlOyAvKiBJUl9UWVBFX1JDNSwgSVJfVFlQRV9QRCwgZXRjICovCisJdTY0ICAgICAgICAgIHR5cGU7IC8qIElSX1RZUEVfUkM1LCBJUl9UWVBFX1BELCBldGMgKi8KIAkvKgogCSAqIFNwZWNpZnkgZWl0aGVyIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhIHZhbHVlIGluZGljYXRpbmcgb25lIG9mCiAJICogaXJfa2JkX2kyYydzIGludGVybmFsIGdldF9rZXkgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL292NzcyeC5oIGIvaW5jbHVkZS9tZWRpYS9vdjc3MnguaAppbmRleCAxNGM3N2VmLi41NDhiZjExIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL292NzcyeC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKQEAgLTE1LDggKzE1LDkgQEAKICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKIC8qIGZvciBmbGFncyAqLwotI2RlZmluZSBPVjc3MlhfRkxBR19WRkxJUCAgICAgMHgwMDAwMDAwMSAvKiBWZXJ0aWNhbCBmbGlwIGltYWdlICovCi0jZGVmaW5lIE9WNzcyWF9GTEFHX0hGTElQICAgICAweDAwMDAwMDAyIC8qIEhvcml6b250YWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR19WRkxJUAkoMSA8PCAwKSAvKiBWZXJ0aWNhbCBmbGlwIGltYWdlICovCisjZGVmaW5lIE9WNzcyWF9GTEFHX0hGTElQCSgxIDw8IDEpIC8qIEhvcml6b250YWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR184QklUCSgxIDw8IDIpIC8qIGRlZmF1bHQgMTAgYml0ICovCiAKIC8qCiAgKiBmb3IgRWRnZSBjdHJsCkBAIC01Myw5ICs1NCw4IEBACiAgKiBvdjc3MnggY2FtZXJhIGluZm8KICAqLwogc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICBidXN3aWR0aDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIGZsYWdzOwotCXN0cnVjdCBvdjc3MnhfZWRnZV9jdHJsIGVkZ2VjdHJsOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBvdjc3MnhfZWRnZV9jdHJsCWVkZ2VjdHJsOwogfTsKIAogI2VuZGlmIC8qIF9fT1Y3NzJYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmggYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAppbmRleCA0YWVmZjk2Li5iOWRhMWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaApAQCAtMTg4LDYgKzE4OCw3IEBACiB2b2lkIHNhYTcxNDZfZG1hX2ZyZWUoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAogCQkJCQkJc3RydWN0IHNhYTcxNDZfYnVmICpidWYpOwogCitpbnQgc2FhNzE0Nl92dl9kZXZpbml0KHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2KTsKIGludCBzYWE3MTQ2X3Z2X2luaXQoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X2V4dF92diAqZXh0X3Z2KTsKIGludCBzYWE3MTQ2X3Z2X3JlbGVhc2Uoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCmluZGV4IGRjYzViODYuLjlkNjlmMDFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaAorKysgYi9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaApAQCAtODEsNiArODEsOCBAQAogCWludCAoKnNldF9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBfX3UzMik7CiAJaW50ICgqZ2V0X2N0cmwpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOwogCWludCAoKnNldF9jdHJsKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKKwlpbnQgKCpnZXRfcGFybSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKik7CisJaW50ICgqc2V0X3Bhcm0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICopOwogCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7CiAJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjb250cm9sczsKIAlpbnQgbnVtX2NvbnRyb2xzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmggYi9pbmNsdWRlL21lZGlhL3RpbWJfcmFkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2QzMmEzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIHRpbWJfcmFkaW8uaCBQbGF0Zm9ybSBzdHJ1Y3QgZm9yIHRoZSBUaW1iZXJkYWxlIHJhZGlvIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVElNQl9SQURJT18KKyNkZWZpbmUgX1RJTUJfUkFESU9fIDEKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCitzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgaTJjX2FkYXB0ZXI7IC8qIEkyQyBhZGFwdGVyIHdoZXJlIHRoZSB0dW5lciBhbmQgZHNwIGFyZSBhdHRhY2hlZCAqLworCXN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lOworCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm87CisJfSB0dW5lcjsKKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICptb2R1bGVfbmFtZTsKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvOworCX0gZHNwOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R1bmVyLmggYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKaW5kZXggNGQ1YjUzZi4uNTUwNWM1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dW5lci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaApAQCAtMTI5LDYgKzEyOSw3IEBACiAjZGVmaW5lIFRVTkVSX1BBUlRTTklDX1BUSV81TkYwNQk4MQogI2RlZmluZSBUVU5FUl9QSElMSVBTX0NVMTIxNkwgICAgICAgICAgIDgyCiAjZGVmaW5lIFRVTkVSX05YUF9UREExODI3MQkJODMKKyNkZWZpbmUgVFVORVJfU09OWV9CVEZfUFhOMDFaCQk4NAogCiAvKiB0diBjYXJkIHNwZWNpZmljICovCiAjZGVmaW5lIFREQTk4ODdfUFJFU0VOVCAJCSgxPDwwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dnA3MDAyLmggYi9pbmNsdWRlL21lZGlhL3R2cDcwMDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQzNTM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS90dnA3MDAyLmgKQEAgLTAsMCArMSw1NiBAQAorLyogVGV4YXMgSW5zdHJ1bWVudHMgVHJpcGxlIDgtLzEwLUJJVCAxNjUtLzExMC1NU1BTIFZpZGVvIGFuZCBHcmFwaGljcworICogRGlnaXRpemVyIHdpdGggSG9yaXpvbnRhbCBQTEwgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICogQXV0aG9yOiBTYW50aWFnbyBOdW5lei1Db3JyYWxlcyA8c2FudGlhZ28ubnVuZXpAcmlkZ2VydW4uY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBwYXJ0aWFsbHkgYmFzZWQgdXBvbiB0aGUgVFZQNTE1MCBkcml2ZXIKKyAqIHdyaXR0ZW4gYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIChtY2hlaGFiQGluZnJhZGVhZC5vcmcpLAorICogdGhlIFRWUDUxNHggZHJpdmVyIHdyaXR0ZW4gYnkgVmFpYmhhdiBIaXJlbWF0aCA8aHZhaWJoYXZAdGkuY29tPgorICogYW5kIHRoZSBUVlA3MDAyIGRyaXZlciBpbiB0aGUgVEkgTFNQIDIuMTAuMDAuMTQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2lmbmRlZiBfVFZQNzAwMl9IXworI2RlZmluZSBfVFZQNzAwMl9IXworCisvKiBQbGF0Zm9ybS1kZXBlbmRlbnQgZGF0YQorICoKKyAqIGNsa19wb2xhcml0eToKKyAqIAkJCTAgLT4gZGF0YSBjbG9ja2VkIG91dCBvbiByaXNpbmcgZWRnZSBvZiBEQVRBQ0xLIHNpZ25hbAorICogCQkJMSAtPiBkYXRhIGNsb2NrZWQgb3V0IG9uIGZhbGxpbmcgZWRnZSBvZiBEQVRBQ0xLIHNpZ25hbAorICogaHNfcG9sYXJpdHk6CisgKiAJCQkwIC0+IGFjdGl2ZSBsb3cgSFNZTkMgb3V0cHV0CisgKiAJCQkxIC0+IGFjdGl2ZSBoaWdoIEhTWU5DIG91dHB1dAorICogc29nX3BvbGFyaXR5OgorICogCQkJMCAtPiBub3JtYWwgb3BlcmF0aW9uCisgKiAJCQkxIC0+IG9wZXJhdGlvbiB3aXRoIHBvbGFyaXR5IGludmVydGVkCisgKiB2c19wb2xhcml0eToKKyAqIAkJCTAgLT4gYWN0aXZlIGxvdyBWU1lOQyBvdXRwdXQKKyAqIAkJCTEgLT4gYWN0aXZlIGhpZ2ggVlNZTkMgb3V0cHV0CisgKiBmaWRfcG9sYXJpdHk6CisgKgkJCTAgLT4gdGhlIGZpZWxkIElEIG91dHB1dCBpcyBzZXQgdG8gbG9naWMgMSBmb3IgYW4gb2RkCisgKgkJCSAgICAgZmllbGQgKGZpZWxkIDEpIGFuZCBzZXQgdG8gbG9naWMgMCBmb3IgYW4gZXZlbgorICoJCQkgICAgIGZpZWxkIChmaWVsZCAwKS4KKyAqCQkJMSAtPiBvcGVyYXRpb24gd2l0aCBwb2xhcml0eSBpbnZlcnRlZC4KKyAqLworc3RydWN0IHR2cDcwMDJfY29uZmlnIHsKKwl1OCBjbGtfcG9sYXJpdHk7CisJdTggaHNfcG9sYXJpdHk7CisJdTggdnNfcG9sYXJpdHk7CisJdTggZmlkX3BvbGFyaXR5OworCXU4IHNvZ19wb2xhcml0eTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmggYi9pbmNsdWRlL21lZGlhL3R3OTkxMC5oCmluZGV4IDVlMjg5NWEuLjkwYmNmMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dzk5MTAuaApAQCAtMzAsOCArMzAsOCBAQAogfTsKIAogc3RydWN0IHR3OTkxMF92aWRlb19pbmZvIHsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIGJ1c3dpZHRoOwotCWVudW0gdHc5OTEwX21wb3V0X3BpbiAgbXBvdXQ7CisJdW5zaWduZWQgbG9uZwkJYnVzd2lkdGg7CisJZW51bSB0dzk5MTBfbXBvdXRfcGluCW1wb3V0OwogfTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAppbmRleCA2Y2MxMDdkLi41NmFiZjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKQEAgLTM5LDYgKzM5LDcgQEAKIAogCS8qIG1vZHVsZSBzYWE3MTE1OiByZXNlcnZlZCByYW5nZSAxMDEtMTQ5ICovCiAJVjRMMl9JREVOVF9TQUE3MTExID0gMTAxLAorCVY0TDJfSURFTlRfU0FBNzExMUEgPSAxMDIsCiAJVjRMMl9JREVOVF9TQUE3MTEzID0gMTAzLAogCVY0TDJfSURFTlRfU0FBNzExNCA9IDEwNCwKIAlWNEwyX0lERU5UX1NBQTcxMTUgPSAxMDUsCkBAIC0xMzQsNiArMTM1LDkgQEAKIAkvKiBtb2R1bGVzIHRlZjY4NjI6IGp1c3QgaWRlbnQgNjg2MiAqLwogCVY0TDJfSURFTlRfVEVGNjg2MiA9IDY4NjIsCiAKKwkvKiBtb2R1bGUgdHZwNzAwMjoganVzdCBpZGVudCA3MDAyICovCisJVjRMMl9JREVOVF9UVlA3MDAyID0gNzAwMiwKKwogCS8qIG1vZHVsZSBhZHY3MTcwOiBqdXN0IGlkZW50IDcxNzAgKi8KIAlWNEwyX0lERU5UX0FEVjcxNzAgPSA3MTcwLAogCkBAIC0xNTUsNiArMTU5LDkgQEAKIAkvKiBtb2R1bGUgYWR2NzM0MzoganVzdCBpZGVudCA3MzQzICovCiAJVjRMMl9JREVOVF9BRFY3MzQzID0gNzM0MywKIAorCS8qIG1vZHVsZSBzYWE3NzA2aDoganVzdCBpZGVudCA3NzA2ICovCisJVjRMMl9JREVOVF9TQUE3NzA2SCA9IDc3MDYsCisKIAkvKiBtb2R1bGUgd204NzM5OiBqdXN0IGlkZW50IDg3MzkgKi8KIAlWNEwyX0lERU5UX1dNODczOSA9IDg3MzksCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAppbmRleCA5YmE5OWNkLi4yYmNkY2EwIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCkBAIC0xODAsNiArMTgwLDcgQEAKIAlpbnQgKCpzX2Nsb2NrX2ZyZXEpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKIAlpbnQgKCpzX2kyc19jbG9ja19mcmVxKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSk7CiAJaW50ICgqc19yb3V0aW5nKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgaW5wdXQsIHUzMiBvdXRwdXQsIHUzMiBjb25maWcpOworCWludCAoKnNfc3RyZWFtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKTsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCAwZjdjMzc4Li40NTM3NWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTE3Nyw3ICsxNzcsOSBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICoKIF9faW42X2Rldl9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKGRldi0+aXA2X3B0cik7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkZXYtPmlwNl9wdHIsCisJCQkJICAgICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAorCQkJCSAgICAgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXQ2X2RldiAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9kcy5oIGIvaW5jbHVkZS9wY21jaWEvZHMuaAppbmRleCBlZTE0ODU3Li5kNTc4NDdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKQEAgLTQwLDcgKzQwLDcgQEAKICAqIERvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci50eHQgZm9yIGRldGFpbHMuCiAqLwogc3RydWN0IHBjbWNpYV9keW5pZHMgewotCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IG11dGV4CQlsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL3NzLmggYi9pbmNsdWRlL3BjbWNpYS9zcy5oCmluZGV4IGNiZmJhODguLjMyODk2YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL3NzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvc3MuaApAQCAtMTM0LDkgKzEzNCw5IEBACiAKIHN0cnVjdCBwY21jaWFfc29ja2V0IHsKIAlzdHJ1Y3QgbW9kdWxlCQkJKm93bmVyOwotCXNwaW5sb2NrX3QJCQlsb2NrOwogCXNvY2tldF9zdGF0ZV90CQkJc29ja2V0OwogCXVfaW50CQkJCXN0YXRlOworCXVfaW50CQkJCXN1c3BlbmRlZF9zdGF0ZTsJLyogc3RhdGUgYmVmb3JlIHN1c3BlbmQgKi8KIAl1X3Nob3J0CQkJCWZ1bmN0aW9uczsKIAl1X3Nob3J0CQkJCWxvY2tfY291bnQ7CiAJcGNjYXJkX21lbV9tYXAJCQljaXNfbWVtOwpAQCAtMjAwLDkgKzIwMCwxNCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRocmVhZDsKIAlzdHJ1Y3QgY29tcGxldGlvbgkJdGhyZWFkX2RvbmU7CiAJdW5zaWduZWQgaW50CQkJdGhyZWFkX2V2ZW50czsKLQkvKiBwcm90ZWN0cyBzb2NrZXQgaC93IHN0YXRlICovCisJdW5zaWduZWQgaW50CQkJc3lzZnNfZXZlbnRzOworCisJLyogRm9yIHRoZSBub24tdHJpdmlhbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIGxvY2tzLAorCSAqIHNlZSBEb2N1bWVudGF0aW9uL3BjbWNpYS9sb2NraW5nLnR4dCAqLwogCXN0cnVjdCBtdXRleAkJCXNrdF9tdXRleDsKLQkvKiBwcm90ZWN0cyB0aHJlYWRfZXZlbnRzICovCisJc3RydWN0IG11dGV4CQkJb3BzX211dGV4OworCisJLyogcHJvdGVjdHMgdGhyZWFkX2V2ZW50cyBhbmQgc3lzZnNfZXZlbnRzICovCiAJc3BpbmxvY2tfdAkJCXRocmVhZF9sb2NrOwogCiAJLyogcGNtY2lhICgxNi1iaXQpICovCkBAIC0yMjUsMzAgKzIzMCwxOSBAQAogCQl1OAkJCWJ1c3k6MTsKIAkJLyogcGNtY2lhIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCAqLwogCQl1OAkJCWRlYWQ6MTsKLQkJLyogYSBtdWx0aWZ1bmN0aW9uLWRldmljZSBhZGQgZXZlbnQgaXMgcGVuZGluZyAqLwotCQl1OAkJCWRldmljZV9hZGRfcGVuZGluZzoxOwotCQkvKiB0aGUgcGVuZGluZyBldmVudCBhZGRzIGEgbWZjICgxKSBvciBwZmMgKDApICovCi0JCXU4CQkJbWZjX3BmYzoxOworCQkvKiB0aGUgUENNQ0lBIGNhcmQgY29uc2lzdHMgb2YgdHdvIHBzZXVkbyBkZXZpY2VzICovCisJCXU4CQkJaGFzX3BmYzoxOwogCi0JCXU4CQkJcmVzZXJ2ZWQ6MzsKKwkJdTgJCQlyZXNlcnZlZDo0OwogCX0gcGNtY2lhX3N0YXRlOwogCiAKLQkvKiBmb3IgYWRkaW5nIGZ1cnRoZXIgcHNldWRvLW11bHRpZnVuY3Rpb24gZGV2aWNlcyAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJZGV2aWNlX2FkZDsKLQogI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKIAlzdHJ1Y3QgdXNlcl9pbmZvX3QJCSp1c2VyOwogCXdhaXRfcXVldWVfaGVhZF90CQlxdWV1ZTsKICNlbmRpZiAvKiBDT05GSUdfUENNQ0lBX0lPQ1RMICovCiAjZW5kaWYgLyogQ09ORklHX1BDTUNJQSAqLwogCi0JLyogY2FyZGJ1cyAoMzItYml0KSAqLwotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0Jc3RydWN0IHJlc291cmNlCQkJKmNiX2Npc19yZXM7Ci0Jdm9pZCBfX2lvbWVtCQkJKmNiX2Npc192aXJ0OwotI2VuZGlmIC8qIENPTkZJR19DQVJEQlVTICovCi0KIAkvKiBzb2NrZXQgZGV2aWNlICovCiAJc3RydWN0IGRldmljZQkJCWRldjsKIAkvKiBkYXRhIGludGVybmFsIHRvIHRoZSBzb2NrZXQgZHJpdmVyICovCkBAIC0yNjMsMTMgKzI1NywyNSBAQAogICogLSBwY2NhcmRfc3RhdGljX29wcwkJaW9tZW0gYW5kIGlvcG9ydCBhcmVhcyBhcmUgYXNzaWduZWQgc3RhdGljYWxseQogICogLSBwY2NhcmRfaW9keW5fb3BzCQlpb21lbSBhcmVhcyBpcyBhc3NpZ25lZCBzdGF0aWNhbGx5LCBpb3BvcnQKICAqCQkJCWFyZWFzIGR5bmFtaWNhbGx5CisgKgkJCQlJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgdXNlCisgKgkJCQkic2VsZWN0IFBDQ0FSRF9JT0RZTiIgaW4gS2NvbmZpZy4KICAqIC0gcGNjYXJkX25vbnN0YXRpY19vcHMJaW9tZW0gYW5kIGlvcG9ydCBhcmVhcyBhcmUgYXNzaWduZWQgZHluYW1pY2FsbHkuCiAgKgkJCQlJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgdXNlCiAgKgkJCQkic2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMiIGluIEtjb25maWcuCisgKgogICovCiBleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX3N0YXRpY19vcHM7CisjaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSB8fCBkZWZpbmVkKENPTkZJR19QQ01DSUFfTU9EVUxFKQogZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9pb2R5bl9vcHM7CiBleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX25vbnN0YXRpY19vcHM7CisjZWxzZQorLyogSWYgUENNQ0lBIGlzIG5vdCB1c2VkLCBidXQgb25seSBDQVJEQlVTLCB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCB1c2VkCisgKiBhdCBhbGwuIFRoZXJlZm9yZSwgZG8gbm90IHVzZSB0aGUgbGFyZ2UgKDI0MEshKSByc3JjX25vbnN0YXRpYyBtb2R1bGUKKyAqLworI2RlZmluZSBwY2NhcmRfaW9keW5fb3BzIHBjY2FyZF9zdGF0aWNfb3BzCisjZGVmaW5lIHBjY2FyZF9ub25zdGF0aWNfb3BzIHBjY2FyZF9zdGF0aWNfb3BzCisjZW5kaWYKKwogCiAvKiBzb2NrZXQgZHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8gdXNlIHRoZXNlIGNhbGxiYWNrcyBpbiB0aGVpciAuZHJ2IHN0cnVjdCAqLwogZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCmluZGV4IDdjNDQ0OTkuLmQ4MGI2ZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCkBAIC0zNDgsNyArMzQ4LDggQEAKIAkJCSAgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7CiBleHRlcm4gaW50IHNjc2lfdGVzdF91bml0X3JlYWR5KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHRpbWVvdXQsCiAJCQkJaW50IHJldHJpZXMsIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKnNjc2lfZ2V0X3ZwZF9wYWdlKHN0cnVjdCBzY3NpX2RldmljZSAqLCB1OCBwYWdlKTsKK2V4dGVybiBpbnQgc2NzaV9nZXRfdnBkX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICosIHU4IHBhZ2UsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCSAgICAgaW50IGJ1Zl9sZW4pOwogZXh0ZXJuIGludCBzY3NpX2RldmljZV9zZXRfc3RhdGUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAogCQkJCSBlbnVtIHNjc2lfZGV2aWNlX3N0YXRlIHN0YXRlKTsKIGV4dGVybiBzdHJ1Y3Qgc2NzaV9ldmVudCAqc2Rldl9ldnRfYWxsb2MoZW51bSBzY3NpX2RldmljZV9ldmVudCBldnRfdHlwZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuaAppbmRleCA2MWFkMzU5Li5mZmVlYmMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oCkBAIC0xMDcsNiArMTA3LDggQEAKIAlzdHJ1Y3Qgc2FzX3JwaHkJCXJwaHk7CiAJLyogZmxhZ3MgKi8KIAl1bnNpZ25lZAkJcmVhZHlfbGVkX21lYW5pbmc6MTsKKwl1bnNpZ25lZAkJdGxyX3N1cHBvcnRlZDoxOworCXVuc2lnbmVkCQl0bHJfZW5hYmxlZDoxOwogCS8qIHBhcmFtZXRlcnMgKi8KIAl1MTYJCQlJX1RfbmV4dXNfbG9zc190aW1lb3V0OwogCXUxNgkJCWluaXRpYXRvcl9yZXNwb25zZV90aW1lb3V0OwpAQCAtMTgxLDYgKzE4MywxMSBAQAogZXh0ZXJuIHZvaWQgc2FzX3BoeV9kZWxldGUoc3RydWN0IHNhc19waHkgKik7CiBleHRlcm4gaW50IHNjc2lfaXNfc2FzX3BoeShjb25zdCBzdHJ1Y3QgZGV2aWNlICopOwogCit1bnNpZ25lZCBpbnQgc2FzX3Rscl9zdXBwb3J0ZWQoc3RydWN0IHNjc2lfZGV2aWNlICopOwordW5zaWduZWQgaW50IHNhc19pc190bHJfZW5hYmxlZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7Cit2b2lkIHNhc19kaXNhYmxlX3RscihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7Cit2b2lkIHNhc19lbmFibGVfdGxyKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKKwogZXh0ZXJuIHN0cnVjdCBzYXNfcnBoeSAqc2FzX2VuZF9kZXZpY2VfYWxsb2Moc3RydWN0IHNhc19wb3J0ICopOwogZXh0ZXJuIHN0cnVjdCBzYXNfcnBoeSAqc2FzX2V4cGFuZGVyX2FsbG9jKHN0cnVjdCBzYXNfcG9ydCAqLCBlbnVtIHNhc19kZXZpY2VfdHlwZSk7CiB2b2lkIHNhc19ycGh5X2ZyZWUoc3RydWN0IHNhc19ycGh5ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb3JlLmggYi9pbmNsdWRlL3NvdW5kL2NvcmUuaAppbmRleCBhNjE0OTljLi44OWUwYWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvcmUuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvcmUuaApAQCAtNDU4LDUgKzQ1OCw4IEBACiBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqCiBzbmRfcGNpX3F1aXJrX2xvb2t1cChzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqbGlzdCk7CiAKK2NvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICoKK3NuZF9wY2lfcXVpcmtfbG9va3VwX2lkKHUxNiB2ZW5kb3IsIHUxNiBkZXZpY2UsCisJCQljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqbGlzdCk7CiAKICNlbmRpZiAvKiBfX1NPVU5EX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Nwb3MuaCBiL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF9zcG9zLmgKaW5kZXggN2M0NDY2Ny4uNDliMDNjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Nwb3MuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc3Bvcy5oCkBAIC0xMTgsOSArMTE4LDExIEBACiAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfaW5mbzsKIAlpbnQgcmVmX2NvdW50OwotCXNwaW5sb2NrX3QgbG9jazsKIAotCWludCBkZWxldGVkOworCXUxNiB2b2x1bWVbMl07CisJdW5zaWduZWQgaW50IGRlbGV0ZWQgOjE7CisJdW5zaWduZWQgaW50IHVwZGF0ZWQgOjE7CisJdW5zaWduZWQgaW50IHZvbHVtZV9zZXQgOjE7CiB9OwogCiBzdHJ1Y3QgZHNwX3Rhc2tfZGVzY3JpcHRvciB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3BjbS5oIGIvaW5jbHVkZS9zb3VuZC9wY20uaAppbmRleCBjODNhNGE3Li44YjYxMWE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3BjbS5oCisrKyBiL2luY2x1ZGUvc291bmQvcGNtLmgKQEAgLTI2Miw2ICsyNjIsOCBAQAogCXVuc2lnbmVkIGludCBtYXNrOwogfTsKIAorc3RydWN0IHNuZF9wY21faHdwdHJfbG9nOworCiBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lIHsKIAkvKiAtLSBTdGF0dXMgLS0gKi8KIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnRyaWdnZXJfbWFzdGVyOwpAQCAtMzEwLDcgKzMxMiw5IEBACiAJc3RydWN0IHNuZF9wY21fbW1hcF9jb250cm9sICpjb250cm9sOwogCiAJLyogLS0gbG9ja2luZyAvIHNjaGVkdWxpbmcgLS0gKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCBzbGVlcDsKKwl1bnNpZ25lZCBpbnQgdHdha2U6IDE7CQkvKiBkbyB0cmFuc2ZlciAoIXBvbGwpIHdha2V1cCAqLworCXdhaXRfcXVldWVfaGVhZF90IHNsZWVwOwkvKiBwb2xsIHNsZWVwICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgdHNsZWVwOwkvKiB0cmFuc2ZlciBzbGVlcCAqLwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CiAKIAkvKiAtLSBwcml2YXRlIHNlY3Rpb24gLS0gKi8KQEAgLTM0MCw2ICszNDQsMTAgQEAKIAkvKiAtLSBPU1MgdGhpbmdzIC0tICovCiAJc3RydWN0IHNuZF9wY21fb3NzX3J1bnRpbWUgb3NzOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCisJc3RydWN0IHNuZF9wY21faHdwdHJfbG9nICpod3B0cl9sb2c7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBzbmRfcGNtX2dyb3VwIHsJCS8qIGtlZXAgbGlua2VkIHN1YnN0cmVhbXMgKi8KQEAgLTgzNCw2ICs4NDIsOCBAQAogaW50IHNuZF9wY21fbGliX2ludGVybGVhdmVfbGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIGludCBzbmRfcGNtX2xpYl9pb2N0bChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsgICAgICAgICAgICAgICAgICAgICAgCitpbnQgc25kX3BjbV91cGRhdGVfc3RhdGUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CiBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIGludCBzbmRfcGNtX3BsYXliYWNrX3hydW5fY2hlY2soc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogaW50IHNuZF9wY21fY2FwdHVyZV94cnVuX2NoZWNrKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKQEAgLTkwNSw2ICs5MTUsNDQgQEAKIGludCBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIHNpemVfdCBzaXplKTsKIGludCBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIAoraW50IF9zbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKK2ludCBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKK3N0cnVjdCBwYWdlICpzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKyNpZiAwIC8qIGZvciBrZXJuZWwtZG9jICovCisvKioKKyAqIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyIC0gYWxsb2NhdGUgdmlydHVhbCBETUEgYnVmZmVyCisgKiBAc3Vic3RyZWFtOiB0aGUgc3Vic3RyZWFtIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgdG8KKyAqIEBzaXplOiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplLCBpbiBieXRlcworICoKKyAqIEFsbG9jYXRlcyB0aGUgUENNIHN1YnN0cmVhbSBidWZmZXIgdXNpbmcgdm1hbGxvYygpLCBpLmUuLCB0aGUgbWVtb3J5IGlzCisgKiBjb250aWd1b3VzIGluIGtlcm5lbCB2aXJ0dWFsIHNwYWNlLCBidXQgbm90IGluIHBoeXNpY2FsIG1lbW9yeS4gIFVzZSB0aGlzCisgKiBpZiB0aGUgYnVmZmVyIGlzIGFjY2Vzc2VkIGJ5IGtlcm5lbCBjb2RlIGJ1dCBub3QgYnkgZGV2aWNlIERNQS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIGJ1ZmZlciB3YXMgY2hhbmdlZCwgMCBpZiBub3QgY2hhbmdlZCwgb3IgYSBuZWdhdGl2ZSBlcnJvcgorICogY29kZS4KKyAqLworc3RhdGljIGludCBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcgorCQkJKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzaXplX3Qgc2l6ZSk7CisvKioKKyAqIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfMzJfYnVmZmVyIC0gYWxsb2NhdGUgMzItYml0LWFkZHJlc3NhYmxlIGJ1ZmZlcgorICogQHN1YnN0cmVhbTogdGhlIHN1YnN0cmVhbSB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvCisgKiBAc2l6ZTogdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSwgaW4gYnl0ZXMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2Ugc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoKSwgYnV0IHVzZXMKKyAqIHZtYWxsb2NfMzIoKSwgaS5lLiwgdGhlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgZnJvbSAzMi1iaXQtYWRkcmVzc2FibGUgbWVtb3J5LgorICovCitzdGF0aWMgaW50IHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfMzJfYnVmZmVyCisJCQkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIHNpemVfdCBzaXplKTsKKyNlbmRpZgorI2RlZmluZSBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzLCBzaXplKSBcCisJX3NuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyIFwKKwkJCShzdWJzLCBzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX1pFUk8pCisjZGVmaW5lIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfMzJfYnVmZmVyKHN1YnMsIHNpemUpIFwKKwlfc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIgXAorCQkJKHN1YnMsIHNpemUsIEdGUF9LRVJORUwgfCBHRlBfRE1BMzIgfCBfX0dGUF9aRVJPKQorCiAjaWZkZWYgQ09ORklHX1NORF9ETUFfU0dCVUYKIC8qCiAgKiBTRy1idWZmZXIgaGFuZGxpbmcKQEAgLTk3NSw2ICsxMDIzLDEwIEBACiAjZGVmaW5lIHNuZF9wY21fbGliX21tYXBfaW9tZW0JTlVMTAogI2VuZGlmCiAKK2ludCBzbmRfcGNtX2xpYl9tbWFwX25vbmNhY2hlZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpOworI2RlZmluZSBzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MJc25kX3BjbV9saWJfbW1hcF9ub25jYWNoZWQKKwogc3RhdGljIGlubGluZSB2b2lkIHNuZF9wY21fbGltaXRfaXNhX2RtYV9zaXplKGludCBkbWEsIHNpemVfdCAqbWF4KQogewogCSptYXggPSBkbWEgPCA0ID8gNjQgKiAxMDI0IDogMTI4ICogMTAyNDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtX29zcy5oIGIvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKaW5kZXggY2M0ZTIyNi4uNzYwYzk2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9wbHVnaW4gKnBsdWdpbl9maXJzdDsKIAlzdHJ1Y3Qgc25kX3BjbV9wbHVnaW4gKnBsdWdpbl9sYXN0OwogI2VuZGlmCi0JdW5zaWduZWQgaW50IHByZXZfaHdfcHRyX2ludGVycnVwdDsKKwl1bnNpZ25lZCBpbnQgcHJldl9od19wdHJfcGVyaW9kOwogfTsKIAogc3RydWN0IHNuZF9wY21fb3NzX2ZpbGUgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zYi5oIGIvaW5jbHVkZS9zb3VuZC9zYi5oCmluZGV4IDRlNjJlZTEuLjk1MzUzNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc2IuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NiLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAlTQl9IV18yMCwKIAlTQl9IV18yMDEsCiAJU0JfSFdfUFJPLAorCVNCX0hXX0pBWloxNiwJCS8qIE1lZGlhIFZpc2lvbiBKYXp6MTYgKi8KIAlTQl9IV18xNiwKIAlTQl9IV18xNkNTUCwJCS8qIFNCMTYgd2l0aCBDU1AgY2hpcCAqLwogCVNCX0hXX0FMUzEwMCwJCS8qIEF2YW5jZSBMb2dpYyBBTFMxMDAgY2hpcCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaAppbmRleCBjYTI0ZTdmLi4wNjFmMTZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaApAQCAtMTYsNiArMTYsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaCBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAppbmRleCBjNWM5NWUxZC4uYzA5MjJhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaApAQCAtOTUsNiArOTUsMjEgQEAKIAkuc2hpZnQgPSB3c2hpZnQsIC5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCBcCiAJLm51bV9rY29udHJvbHMgPSAxfQogCisvKiBTaW1wbGlmaWVkIHZlcnNpb25zIG9mIGFib3ZlIG1hY3JvcywgYXNzdW1pbmcgd25jb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKSAqLworI2RlZmluZSBTT0NfUEdBX0FSUkFZKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsXAorCSB3Y29udHJvbHMpIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX3BnYSwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKX0KKyNkZWZpbmUgU09DX01JWEVSX0FSUkFZKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIFwKKwkgd2NvbnRyb2xzKVwKK3sJLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpfQorI2RlZmluZSBTT0NfTUlYRVJfTkFNRURfQ1RMX0FSUkFZKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIFwKKwkgd2NvbnRyb2xzKVwKK3sgICAgICAgLmlkID0gc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bCwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIFwKKwkuc2hpZnQgPSB3c2hpZnQsIC5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCBcCisJLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyl9CisKIC8qIHBhdGggZG9tYWluIHdpdGggZXZlbnQgLSBldmVudCBoYW5kbGVyIG11c3QgcmV0dXJuIDAgZm9yIHN1Y2Nlc3MgKi8KICNkZWZpbmUgU05EX1NPQ19EQVBNX1BHQV9FKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdjb250cm9scywgXAogCXduY29udHJvbHMsIHdldmVudCwgd2ZsYWdzKSBcCkBAIC0xMjYsNiArMTQxLDIzIEBACiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gMSwgXAogCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQogCisvKiBTaW1wbGlmaWVkIHZlcnNpb25zIG9mIGFib3ZlIG1hY3JvcywgYXNzdW1pbmcgd25jb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKSAqLworI2RlZmluZSBTT0NfUEdBX0VfQVJSQVkod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzLCBcCisJd2V2ZW50LCB3ZmxhZ3MpIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX3BnYSwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKSwgXAorCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQorI2RlZmluZSBTT0NfTUlYRVJfRV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKKwl3ZXZlbnQsIHdmbGFncykgXAorewkuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyksIFwKKwkuZXZlbnQgPSB3ZXZlbnQsIC5ldmVudF9mbGFncyA9IHdmbGFnc30KKyNkZWZpbmUgU09DX01JWEVSX05BTUVEX0NUTF9FX0FSUkFZKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIFwKKwl3Y29udHJvbHMsIHdldmVudCwgd2ZsYWdzKSBcCit7ICAgICAgIC5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCBcCisJLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyksIC5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQorCiAvKiBldmVudHMgdGhhdCBhcmUgcHJlIGFuZCBwb3N0IERBUE0gKi8KICNkZWZpbmUgU05EX1NPQ19EQVBNX1BSRSh3bmFtZSwgd2V2ZW50KSBcCiB7CS5pZCA9IHNuZF9zb2NfZGFwbV9wcmUsIC5uYW1lID0gd25hbWUsIC5rY29udHJvbHMgPSBOVUxMLCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy5oIGIvaW5jbHVkZS9zb3VuZC9zb2MuaAppbmRleCAwZDc3MThmLi41ZDIzNGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLmgKQEAgLTE2OSw2ICsxNjksMjMgQEAKIAkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSZ4ZW51bSB9CiAKIC8qCisgKiBTaW1wbGlmaWVkIHZlcnNpb25zIG9mIGFib3ZlIG1hY3JvcywgZGVjbGFyaW5nIGEgc3RydWN0IGFuZCBjYWxjdWxhdGluZworICogQVJSQVlfU0laRSBpbnRlcm5hbGx5CisgKi8KKyNkZWZpbmUgU09DX0VOVU1fRE9VQkxFX0RFQ0wobmFtZSwgeHJlZywgeHNoaWZ0X2wsIHhzaGlmdF9yLCB4dGV4dHMpIFwKKwlzdHJ1Y3Qgc29jX2VudW0gbmFtZSA9IFNPQ19FTlVNX0RPVUJMRSh4cmVnLCB4c2hpZnRfbCwgeHNoaWZ0X3IsIFwKKwkJCQkJCUFSUkFZX1NJWkUoeHRleHRzKSwgeHRleHRzKQorI2RlZmluZSBTT0NfRU5VTV9TSU5HTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnQsIHh0ZXh0cykgXAorCVNPQ19FTlVNX0RPVUJMRV9ERUNMKG5hbWUsIHhyZWcsIHhzaGlmdCwgeHNoaWZ0LCB4dGV4dHMpCisjZGVmaW5lIFNPQ19FTlVNX1NJTkdMRV9FWFRfREVDTChuYW1lLCB4dGV4dHMpIFwKKwlzdHJ1Y3Qgc29jX2VudW0gbmFtZSA9IFNPQ19FTlVNX1NJTkdMRV9FWFQoQVJSQVlfU0laRSh4dGV4dHMpLCB4dGV4dHMpCisjZGVmaW5lIFNPQ19WQUxVRV9FTlVNX0RPVUJMRV9ERUNMKG5hbWUsIHhyZWcsIHhzaGlmdF9sLCB4c2hpZnRfciwgeG1hc2ssIHh0ZXh0cywgeHZhbHVlcykgXAorCXN0cnVjdCBzb2NfZW51bSBuYW1lID0gU09DX1ZBTFVFX0VOVU1fRE9VQkxFKHhyZWcsIHhzaGlmdF9sLCB4c2hpZnRfciwgeG1hc2ssIFwKKwkJCQkJCQlBUlJBWV9TSVpFKHh0ZXh0cyksIHh0ZXh0cywgeHZhbHVlcykKKyNkZWZpbmUgU09DX1ZBTFVFX0VOVU1fU0lOR0xFX0RFQ0wobmFtZSwgeHJlZywgeHNoaWZ0LCB4bWFzaywgeHRleHRzLCB4dmFsdWVzKSBcCisJU09DX1ZBTFVFX0VOVU1fRE9VQkxFX0RFQ0wobmFtZSwgeHJlZywgeHNoaWZ0LCB4c2hpZnQsIHhtYXNrLCB4dGV4dHMsIHh2YWx1ZXMpCisKKy8qCiAgKiBCaWFzIGxldmVscwogICoKICAqIEBPTjogICAgICBCaWFzIGlzIGZ1bGx5IG9uIGZvciBhdWRpbyBwbGF5YmFjayBhbmQgY2FwdHVyZSBvcGVyYXRpb25zLgpAQCAtMjUzLDYgKzI3MCw5IEBACiAvKiBjb2RlYyByZWdpc3RlciBiaXQgYWNjZXNzICovCiBpbnQgc25kX3NvY191cGRhdGVfYml0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIHNob3J0IHJlZywKIAkJCQl1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVlKTsKK2ludCBzbmRfc29jX3VwZGF0ZV9iaXRzX2xvY2tlZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBpbnQgbWFzaywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsdWUpOwogaW50IHNuZF9zb2NfdGVzdF9iaXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsdWUpOwogCkBAIC00MDIsNiArNDIyLDEwIEBACiAJc2hvcnQgcmVnX2NhY2hlX3NpemU7CiAJc2hvcnQgcmVnX2NhY2hlX3N0ZXA7CiAKKwl1bnNpZ25lZCBpbnQgaWRsZV9iaWFzX29mZjoxOyAvKiBVc2UgQklBU19PRkYgaW5zdGVhZCBvZiBTVEFOREJZICovCisJdW5zaWduZWQgaW50IGNhY2hlX29ubHk6MTsgIC8qIFN1cHByZXNzIHdyaXRlcyB0byBoYXJkd2FyZSAqLworCXVuc2lnbmVkIGludCBjYWNoZV9zeW5jOjE7IC8qIENhY2hlIG5lZWRzIHRvIGJlIHN5bmNlZCB0byBoYXJkd2FyZSAqLworCiAJLyogZGFwbSAqLwogCXUzMiBwb3BfdGltZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRhcG1fd2lkZ2V0czsKQEAgLTQ5Nyw2ICs1MjEsOCBAQAogCWludCAoKnNldF9iaWFzX2xldmVsKShzdHJ1Y3Qgc25kX3NvY19jYXJkICosCiAJCQkgICAgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCk7CiAKKwlsb25nIHBtZG93bl90aW1lOworCiAJLyogQ1BVIDwtLT4gQ29kZWMgREFJIGxpbmtzICAqLwogCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluazsKIAlpbnQgbnVtX2xpbmtzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC90bHYzMjBkYWMzMy1wbGF0LmggYi9pbmNsdWRlL3NvdW5kL3RsdjMyMGRhYzMzLXBsYXQuaAppbmRleCA1ODU4ZDA2Li5hYzA2NjUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3RsdjMyMGRhYzMzLXBsYXQuaAorKysgYi9pbmNsdWRlL3NvdW5kL3RsdjMyMGRhYzMzLXBsYXQuaApAQCAtMTUsNiArMTUsNyBAQAogCiBzdHJ1Y3QgdGx2MzIwZGFjMzNfcGxhdGZvcm1fZGF0YSB7CiAJaW50IHBvd2VyX2dwaW87CisJdTggYnVyc3RfYmNsa2RpdjsKIH07CiAKICNlbmRpZiAvKiBfX1RMVjMyMERBQzMzX1BMQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC90cGE2MTMwYTItcGxhdC5oIGIvaW5jbHVkZS9zb3VuZC90cGE2MTMwYTItcGxhdC5oCmluZGV4IGU4YzkwMWUuLmUyOWZkZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdHBhNjEzMGEyLXBsYXQuaAorKysgYi9pbmNsdWRlL3NvdW5kL3RwYTYxMzBhMi1wbGF0LmgKQEAgLTIzLDcgKzIzLDEzIEBACiAjaWZuZGVmIFRQQTYxMzBBMl9QTEFUX0gKICNkZWZpbmUgVFBBNjEzMEEyX1BMQVRfSAogCitlbnVtIHRwYV9tb2RlbCB7CisJVFBBNjEzMEEyLAorCVRQQTYxNDBBMiwKK307CisKIHN0cnVjdCB0cGE2MTMwYTJfcGxhdGZvcm1fZGF0YSB7CisJZW51bSB0cGFfbW9kZWwgaWQ7CiAJaW50IHBvd2VyX2dwaW87CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaCBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCmluZGV4IDIyOTM5MTQuLjdmZWQyMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCkBAIC0xLDMgKzEsMyBAQAogLyogaW5jbHVkZS92ZXJzaW9uLmggKi8KLSNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMjEiCisjZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjIyLjEiCiAjZGVmaW5lIENPTkZJR19TTkRfREFURSAiIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93bTIwMDAuaCBiL2luY2x1ZGUvc291bmQvd20yMDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzODhjYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvd20yMDAwLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIGxpbnV4L3NvdW5kL3dtMjAwMC5oIC0tIFBsYXRmb3JtIGRhdGEgZm9yIFdNMjAwMAorICoKKyAqIENvcHlyaWdodCAyMDEwIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcy4gUExDLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1NORF9XTTIwMDBfSAorI2RlZmluZSBfX0xJTlVYX1NORF9XTTIwMDBfSAorCitzdHJ1Y3Qgd20yMDAwX3BsYXRmb3JtX2RhdGEgeworCS8qKiBGaWxlbmFtZSBmb3Igc3lzdGVtLXNwZWNpZmljIGltYWdlIHRvIGRvd25sb2FkIHRvIGRldmljZS4gKi8KKwljb25zdCBjaGFyICpkb3dubG9hZF9maWxlOworCisJLyoqIERpdmlkZSBNQ0xLIGJ5IDIgZm9yIHN5c3RlbSBjbG9jaz8gKi8KKwl1bnNpZ25lZCBpbnQgbWNsa2RpdjI6MTsKKworCS8qKiBEaXNhYmxlIHNwZWVjaCBjbGFyaXR5IGVuaGFuY2VtZW50LCBmb3IgdXNlIHdoZW4gYW4KKwkgKiBleHRlcm5hbCBhbGdvcml0aG0gaXMgdXNlZC4gKi8KKwl1bnNpZ25lZCBpbnQgc3BlZWNoX2VuaF9kaXNhYmxlOjE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvd204OTA0LmggYi9pbmNsdWRlL3NvdW5kL3dtODkwNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjU3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL3dtODkwNC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBQbGF0Zm9ybSBkYXRhIGZvciBXTTg5MDQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19NRkRfV004OTk0X1BEQVRBX0hfXworI2RlZmluZSBfX01GRF9XTTg5OTRfUERBVEFfSF9fCisKKyNkZWZpbmUgV004OTA0X0RSQ19SRUdTIDQKKyNkZWZpbmUgV004OTA0X0VRX1JFR1MgIDI1CisKKy8qKgorICogRFJDIGNvbmZpZ3VyYXRpb25zIGFyZSBzcGVjaWZpZWQgd2l0aCBhIGxhYmVsIGFuZCBhIHNldCBvZiByZWdpc3RlcgorICogdmFsdWVzIHRvIHdyaXRlICh0aGUgZW5hYmxlIGJpdHMgd2lsbCBiZSBpZ25vcmVkKS4gIEF0IHJ1bnRpbWUgYW4KKyAqIGVudW1lcmF0ZWQgY29udHJvbCB3aWxsIGJlIHByZXNlbnRlZCBmb3IgZWFjaCBEUkMgYmxvY2sgYWxsb3dpbmcKKyAqIHRoZSB1c2VyIHRvIGNob29zZSB0aGUgY29uZmlncmF0aW9uIHRvIHVzZS4KKyAqCisgKiBDb25maWd1cmF0aW9ucyBtYXkgYmUgZ2VuZXJhdGVkIGJ5IGhhbmQgb3IgYnkgdXNpbmcgdGhlIERSQyBjb250cm9sCisgKiBwYW5lbCBwcm92aWRlZCBieSB0aGUgV0lTQ0UgLSBzZWUgIGh0dHA6Ly93d3cud29sZnNvbm1pY3JvLmNvbS93aXNjZS8KKyAqIGZvciBkZXRhaWxzLgorICovCitzdHJ1Y3Qgd204OTA0X2RyY19jZmcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTE2IHJlZ3NbV004OTA0X0RSQ19SRUdTXTsKK307CisKKy8qKgorICogUmVUdW5lIE1vYmlsZSBjb25maWd1cmF0aW9ucyBhcmUgc3BlY2lmaWVkIHdpdGggYSBsYWJlbCwgc2FtcGxlCisgKiByYXRlIGFuZCBzZXQgb2YgdmFsdWVzIHRvIHdyaXRlICh0aGUgZW5hYmxlIGJpdHMgd2lsbCBiZSBpZ25vcmVkKS4KKyAqCisgKiBDb25maWd1cmF0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBSZVR1bmUgTW9iaWxlCisgKiBjb250cm9sIHBhbmVsIGluIFdJU0NFIC0gc2VlIGh0dHA6Ly93d3cud29sZnNvbm1pY3JvLmNvbS93aXNjZS8KKyAqLworc3RydWN0IHdtODkwNF9yZXR1bmVfbW9iaWxlX2NmZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1MTYgcmVnc1tXTTg5MDRfRVFfUkVHU107Cit9OworCitzdHJ1Y3Qgd204OTA0X3BkYXRhIHsKKwlpbnQgbnVtX2RyY19jZmdzOworCXN0cnVjdCB3bTg5MDRfZHJjX2NmZyAqZHJjX2NmZ3M7CisKKwlpbnQgbnVtX3JldHVuZV9tb2JpbGVfY2ZnczsKKwlzdHJ1Y3Qgd204OTA0X3JldHVuZV9tb2JpbGVfY2ZnICpyZXR1bmVfbW9iaWxlX2NmZ3M7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvd204OTU1LmggYi9pbmNsdWRlL3NvdW5kL3dtODk1NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNzRlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL3dtODk1NS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBQbGF0Zm9ybSBkYXRhIGZvciBXTTg5NTUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19XTTg5NTVfUERBVEFfSF9fCisjZGVmaW5lIF9fV004OTU1X1BEQVRBX0hfXworCitzdHJ1Y3Qgd204OTU1X3BkYXRhIHsKKwkvKiBDb25maWd1cmUgTE9VVDIvUk9VVDIgdG8gZHJpdmUgYSBzcGVha2VyICovCisJdW5zaWduZWQgaW50IG91dDJfc3BlYWtlcjoxOworCisJLyogQ29uZmlndXJlIE1PTk9JTisvLSBpbiBkaWZmZXJlbnRpYWwgbW9kZSAqLworCXVuc2lnbmVkIGludCBtb25vaW5fZGlmZjoxOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrLmgKaW5kZXggYTg3MGJhMS4uNWMxZGNmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbG9jay5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaApAQCAtMjAsMTQgKzIwLDE3IEBACiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCh1bnNpZ25lZCBpbnQsIGZsYWdzKQogCQlfX3N0cmluZyhuYW1lLCBsb2NrLT5uYW1lKQorCQlfX2ZpZWxkKHZvaWQgKiwgbG9ja2RlcF9hZGRyKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKIAkJX19lbnRyeS0+ZmxhZ3MgPSAodHJ5bG9jayA/IDEgOiAwKSB8IChyZWFkID8gMiA6IDApOwogCQlfX2Fzc2lnbl9zdHIobmFtZSwgbG9jay0+bmFtZSk7CisJCV9fZW50cnktPmxvY2tkZXBfYWRkciA9IGxvY2s7CiAJKSwKIAotCVRQX3ByaW50aygiJXMlcyVzIiwgKF9fZW50cnktPmZsYWdzICYgMSkgPyAidHJ5ICIgOiAiIiwKKwlUUF9wcmludGsoIiVwICVzJXMlcyIsIF9fZW50cnktPmxvY2tkZXBfYWRkciwKKwkJICAoX19lbnRyeS0+ZmxhZ3MgJiAxKSA/ICJ0cnkgIiA6ICIiLAogCQkgIChfX2VudHJ5LT5mbGFncyAmIDIpID8gInJlYWQgIiA6ICIiLAogCQkgIF9fZ2V0X3N0cihuYW1lKSkKICk7CkBAIC00MCwxMyArNDMsMTYgQEAKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fc3RyaW5nKG5hbWUsIGxvY2stPm5hbWUpCisJCV9fZmllbGQodm9pZCAqLCBsb2NrZGVwX2FkZHIpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2Fzc2lnbl9zdHIobmFtZSwgbG9jay0+bmFtZSk7CisJCV9fZW50cnktPmxvY2tkZXBfYWRkciA9IGxvY2s7CiAJKSwKIAotCVRQX3ByaW50aygiJXMiLCBfX2dldF9zdHIobmFtZSkpCisJVFBfcHJpbnRrKCIlcCAlcyIsCisJCSAgX19lbnRyeS0+bG9ja2RlcF9hZGRyLCBfX2dldF9zdHIobmFtZSkpCiApOwogCiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVApAQCAtNTksMTMgKzY1LDE2IEBACiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX3N0cmluZyhuYW1lLCBsb2NrLT5uYW1lKQorCQlfX2ZpZWxkKHZvaWQgKiwgbG9ja2RlcF9hZGRyKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKIAkJX19hc3NpZ25fc3RyKG5hbWUsIGxvY2stPm5hbWUpOworCQlfX2VudHJ5LT5sb2NrZGVwX2FkZHIgPSBsb2NrOwogCSksCiAKLQlUUF9wcmludGsoIiVzIiwgX19nZXRfc3RyKG5hbWUpKQorCVRQX3ByaW50aygiJXAgJXMiLAorCQkgIF9fZW50cnktPmxvY2tkZXBfYWRkciwgX19nZXRfc3RyKG5hbWUpKQogKTsKIAogVFJBQ0VfRVZFTlQobG9ja19hY3F1aXJlZCwKQEAgLTc1LDE2ICs4NCwxOCBAQAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19zdHJpbmcobmFtZSwgbG9jay0+bmFtZSkKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nLCB3YWl0X3VzZWMpCi0JCV9fZmllbGQodW5zaWduZWQgbG9uZywgd2FpdF9uc2VjX3JlbSkKKwkJX19maWVsZChzNjQsIHdhaXRfbnNlYykKKwkJX19maWVsZCh2b2lkICosIGxvY2tkZXBfYWRkcikKIAkpLAorCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fYXNzaWduX3N0cihuYW1lLCBsb2NrLT5uYW1lKTsKLQkJX19lbnRyeS0+d2FpdF9uc2VjX3JlbSA9IGRvX2Rpdih3YWl0dGltZSwgTlNFQ19QRVJfVVNFQyk7Ci0JCV9fZW50cnktPndhaXRfdXNlYyA9ICh1bnNpZ25lZCBsb25nKSB3YWl0dGltZTsKKwkJX19lbnRyeS0+d2FpdF9uc2VjID0gd2FpdHRpbWU7CisJCV9fZW50cnktPmxvY2tkZXBfYWRkciA9IGxvY2s7CiAJKSwKLQlUUF9wcmludGsoIiVzICglbHUuJTAzbHUgdXMpIiwgX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT53YWl0X3VzZWMsCi0JCQkJICAgICAgIF9fZW50cnktPndhaXRfbnNlY19yZW0pCisJVFBfcHJpbnRrKCIlcCAlcyAoJWxsdSBucykiLCBfX2VudHJ5LT5sb2NrZGVwX2FkZHIsCisJCSAgX19nZXRfc3RyKG5hbWUpLAorCQkgIF9fZW50cnktPndhaXRfbnNlYykKICk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaCBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKaW5kZXggYzZmZTAzZS4uMDgwNGNkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCkBAIC02NSw3ICs2NSw4IEBACiAJfTsKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykJXAotCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfIyNuYW1lCisJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbAkJCVwKKwlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIGV2ZW50XyMjbmFtZQogCiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MsIHByaW50KQlcCkBAIC0xMzEsMTMwICsxMzIsNiBAQAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKIC8qCi0gKiBTZXR1cCB0aGUgc2hvd2luZyBmb3JtYXQgb2YgdHJhY2UgcG9pbnQuCi0gKgotICogaW50Ci0gKiBmdHJhY2VfZm9ybWF0XyMjY2FsbChzdHJ1Y3QgdHJhY2Vfc2VxICpzKQotICogewotICoJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkOwotICoJaW50IHJldDsKLSAqCi0gKglyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICN0eXBlICIgIiAjaXRlbSAiOyIKLSAqCQkJICAgICAgICIgb2Zmc2V0OiV1OyBzaXplOiV1O1xuIiwKLSAqCQkJICAgICAgIG9mZnNldG9mKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCwgaXRlbSksCi0gKgkJCSAgICAgICBzaXplb2YoZmllbGQudHlwZSkpOwotICoKLSAqIH0KLSAqLwotCi0jdW5kZWYgVFBfU1RSVUNUX19lbnRyeQotI2RlZmluZSBUUF9TVFJVQ1RfX2VudHJ5KGFyZ3MuLi4pIGFyZ3MKLQotI3VuZGVmIF9fZmllbGQKLSNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksIFwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5pdGVtKSwJXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpaXNfc2lnbmVkX3R5cGUodHlwZSkpOwlcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2ZpZWxkX2V4dAotI2RlZmluZSBfX2ZpZWxkX2V4dCh0eXBlLCBpdGVtLCBmaWx0ZXJfdHlwZSkJX19maWVsZCh0eXBlLCBpdGVtKQotCi0jdW5kZWYgX19hcnJheQotI2RlZmluZSBfX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiWyIgI2xlbiAiXTtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksIFwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5pdGVtKSwJXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpaXNfc2lnbmVkX3R5cGUodHlwZSkpOwlcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKLSNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJICAgICAgIFwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOl9fZGF0YV9sb2MgIiAjdHlwZSAiW10gIiAjaXRlbSAiO1x0IlwKLQkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcdHNpZ25lZDoldTtcbiIsCSAgICAgICBcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLAkgICAgICAgXAotCQkJCQlfX2RhdGFfbG9jXyMjaXRlbSksCQkgICAgICAgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLl9fZGF0YV9sb2NfIyNpdGVtKSwgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpaXNfc2lnbmVkX3R5cGUodHlwZSkpOwlcCi0JaWYgKCFyZXQpCQkJCQkJCSAgICAgICBcCi0JCXJldHVybiAwOwotCi0jdW5kZWYgX19zdHJpbmcKLSNkZWZpbmUgX19zdHJpbmcoaXRlbSwgc3JjKSBfX2R5bmFtaWNfYXJyYXkoY2hhciwgaXRlbSwgLTEpCi0KLSN1bmRlZiBfX2VudHJ5Ci0jZGVmaW5lIF9fZW50cnkgUkVDCi0KLSN1bmRlZiBfX3ByaW50X3N5bWJvbGljCi0jdW5kZWYgX19nZXRfZHluYW1pY19hcnJheQotI3VuZGVmIF9fZ2V0X3N0cgotCi0jdW5kZWYgVFBfcHJpbnRrCi0jZGVmaW5lIFRQX3ByaW50ayhmbXQsIGFyZ3MuLi4pICJcIiVzXCIsICVzXG4iLCBmbXQsIF9fc3RyaW5naWZ5KGFyZ3MpCi0KLSN1bmRlZiBUUF9mYXN0X2Fzc2lnbgotI2RlZmluZSBUUF9mYXN0X2Fzc2lnbihhcmdzLi4uKSBhcmdzCi0KLSN1bmRlZiBUUF9wZXJmX2Fzc2lnbgotI2RlZmluZSBUUF9wZXJmX2Fzc2lnbihhcmdzLi4uKQotCi0jdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUwotI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBmdW5jLCBwcmludCkJXAotc3RhdGljIGludAkJCQkJCQkJXAotZnRyYWNlX2Zvcm1hdF9zZXR1cF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQsCQlcCi0JCQkgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQkJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCBmaWVsZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXRzdHJ1Y3Q7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGludAkJCQkJCQkJXAotZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQsCQkJXAotCQkgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKLXsJCQkJCQkJCQlcCi0JaW50IHJldCA9IDA7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSBmdHJhY2VfZm9ybWF0X3NldHVwXyMjY2FsbCh1bnVzZWQsIHMpOwkJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gcmV0OwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogIiBwcmludCk7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQotCi0jdW5kZWYgREVGSU5FX0VWRU5UCi0jZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MpCi0KLSN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKLSNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCi1mdHJhY2VfZm9ybWF0XyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCQlcCi0JCSAgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKLXsJCQkJCQkJCQlcCi0JaW50IHJldCA9IDA7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSBmdHJhY2VfZm9ybWF0X3NldHVwXyMjdGVtcGxhdGUodW51c2VkLCBzKTsJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gcmV0OwkJCQkJCVwKLQkJCQkJCQkJCVwKLQl0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogIiBwcmludCk7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJCQkJCVwKLX0KLQotI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCi0KLS8qCiAgKiBTdGFnZSAzIG9mIHRoZSB0cmFjZSBldmVudHMuCiAgKgogICogT3ZlcnJpZGUgdGhlIG1hY3JvcyBpbiA8dHJhY2UvdHJhY2VfZXZlbnRzLmg+IHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKQEAgLTMyMyw3ICsyMDAsNyBAQAogCiAjdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUwogI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQlcCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QJCQkJCQlcCitzdGF0aWMgbm90cmFjZSBlbnVtIHByaW50X2xpbmVfdAkJCQkJXAogZnRyYWNlX3Jhd19vdXRwdXRfaWRfIyNjYWxsKGludCBldmVudF9pZCwgY29uc3QgY2hhciAqbmFtZSwJCVwKIAkJCSAgICBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykJXAogewkJCQkJCQkJCVwKQEAgLTM1Niw3ICsyMzMsNyBAQAogCiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MpCQkJXAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90CQkJCQkJXAorc3RhdGljIG5vdHJhY2UgZW51bSBwcmludF9saW5lX3QJCQkJCVwKIGZ0cmFjZV9yYXdfb3V0cHV0XyMjbmFtZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykJXAogewkJCQkJCQkJCVwKIAlyZXR1cm4gZnRyYWNlX3Jhd19vdXRwdXRfaWRfIyN0ZW1wbGF0ZShldmVudF8jI25hbWUuaWQsCQlcCkBAIC0zNjUsNyArMjQyLDcgQEAKIAogI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAogI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIGNhbGwsIHByb3RvLCBhcmdzLCBwcmludCkJCVwKLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAkJCQkJCVwKK3N0YXRpYyBub3RyYWNlIGVudW0gcHJpbnRfbGluZV90CQkJCQlcCiBmdHJhY2VfcmF3X291dHB1dF8jI2NhbGwoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CQkJCVwKQEAgLTQzMSw3ICszMDgsNyBAQAogCiAjdW5kZWYgREVDTEFSRV9FVkVOVF9DTEFTUwogI2RlZmluZSBERUNMQVJFX0VWRU5UX0NMQVNTKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBmdW5jLCBwcmludCkJXAotc3RhdGljIGludAkJCQkJCQkJXAorc3RhdGljIGludCBub3RyYWNlCQkJCQkJCVwKIGZ0cmFjZV9kZWZpbmVfZmllbGRzXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkOwkJCQkJXApAQCAtNDc5LDcgKzM1Niw3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKLXN0YXRpYyBpbmxpbmUgaW50IGZ0cmFjZV9nZXRfb2Zmc2V0c18jI2NhbGwoCQkJCVwKK3N0YXRpYyBpbmxpbmUgbm90cmFjZSBpbnQgZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgJCQlcCiAJc3RydWN0IGZ0cmFjZV9kYXRhX29mZnNldHNfIyNjYWxsICpfX2RhdGFfb2Zmc2V0cywgcHJvdG8pICAgICAgIFwKIHsJCQkJCQkJCQlcCiAJaW50IF9fZGF0YV9zaXplID0gMDsJCQkJCQlcCkBAIC00OTksNyArMzc2LDcgQEAKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCiAvKgogICogR2VuZXJhdGUgdGhlIGZ1bmN0aW9ucyBuZWVkZWQgZm9yIHRyYWNlcG9pbnQgcGVyZl9ldmVudCBzdXBwb3J0LgpAQCAtNTI2LDEyICs0MDMsMTQgQEAKIAkJCQkJCQkJCVwKIHN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjbmFtZShwcm90byk7CQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbnQgZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCitzdGF0aWMgbm90cmFjZSBpbnQJCQkJCQkJXAorZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkJCVwKIHsJCQkJCQkJCQlcCiAJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlXyMjbmFtZShmdHJhY2VfcHJvZmlsZV8jI25hbWUpOwkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKVwKK3N0YXRpYyBub3RyYWNlIHZvaWQJCQkJCQkJXAorZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV8jI25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpCQlcCiB7CQkJCQkJCQkJXAogCXVucmVnaXN0ZXJfdHJhY2VfIyNuYW1lKGZ0cmFjZV9wcm9maWxlXyMjbmFtZSk7CQkJXAogfQpAQCAtNTQyLDcgKzQyMSw3IEBACiAKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQogCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIAogLyoKICAqIFN0YWdlIDQgb2YgdGhlIHRyYWNlIGV2ZW50cy4KQEAgLTYyMiwxMiArNTAxLDExIEBACiAgKgkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCiAgKgkucmVnZnVuYwkJPSBmdHJhY2VfcmVnX2V2ZW50XzxjYWxsPiwKICAqCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPiwKLSAqCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XzxjYWxsPiwKICAqIH0KICAqCiAgKi8KIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKICNkZWZpbmUgX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQkJCQkJXAogCS5wcm9maWxlX2VuYWJsZSA9IGZ0cmFjZV9wcm9maWxlX2VuYWJsZV8jI2NhbGwsCQkJXApAQCAtNjM1LDcgKzUxMyw3IEBACiAKICNlbHNlCiAjZGVmaW5lIF9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAjdW5kZWYgX19lbnRyeQogI2RlZmluZSBfX2VudHJ5IGVudHJ5CkBAIC02NTcsMTAgKzUzNSwxNyBAQAogI2RlZmluZSBfX2Fzc2lnbl9zdHIoZHN0LCBzcmMpCQkJCQkJXAogCXN0cmNweShfX2dldF9zdHIoZHN0KSwgc3JjKTsKIAorI3VuZGVmIFRQX2Zhc3RfYXNzaWduCisjZGVmaW5lIFRQX2Zhc3RfYXNzaWduKGFyZ3MuLi4pIGFyZ3MKKworI3VuZGVmIFRQX3BlcmZfYXNzaWduCisjZGVmaW5lIFRQX3BlcmZfYXNzaWduKGFyZ3MuLi4pCisKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9yYXdfZXZlbnRfaWRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCwgXAorc3RhdGljIG5vdHJhY2Ugdm9pZAkJCQkJCQlcCitmdHJhY2VfcmF3X2V2ZW50X2lkXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwsCVwKIAkJCQkgICAgICAgcHJvdG8pCQkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9kYXRhX29mZnNldHNfIyNjYWxsIF9fbWF5YmVfdW51c2VkIF9fZGF0YV9vZmZzZXRzO1wKQEAgLTY5NywxNyArNTgyLDE5IEBACiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MpCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwocHJvdG8pCQkJCVwKK3N0YXRpYyBub3RyYWNlIHZvaWQgZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwocHJvdG8pCQkJXAogewkJCQkJCQkJCVwKIAlmdHJhY2VfcmF3X2V2ZW50X2lkXyMjdGVtcGxhdGUoJmV2ZW50XyMjY2FsbCwgYXJncyk7CQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGludCBmdHJhY2VfcmF3X3JlZ19ldmVudF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAorc3RhdGljIG5vdHJhY2UgaW50CQkJCQkJCVwKK2Z0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkJCVwKIHsJCQkJCQkJCQlcCiAJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCk7CQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAorc3RhdGljIG5vdHJhY2Ugdm9pZAkJCQkJCQlcCitmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkJCVwKIHsJCQkJCQkJCQlcCiAJdW5yZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwpOwkJXAogfQkJCQkJCQkJCVwKQEAgLTcyMiw4ICs2MDksMjAgQEAKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKKyN1bmRlZiBfX2VudHJ5CisjZGVmaW5lIF9fZW50cnkgUkVDCisKKyN1bmRlZiBfX3ByaW50X2ZsYWdzCisjdW5kZWYgX19wcmludF9zeW1ib2xpYworI3VuZGVmIF9fZ2V0X2R5bmFtaWNfYXJyYXkKKyN1bmRlZiBfX2dldF9zdHIKKworI3VuZGVmIFRQX3ByaW50aworI2RlZmluZSBUUF9wcmludGsoZm10LCBhcmdzLi4uKSAiXCIiIGZtdCAiXCIsICIgIF9fc3RyaW5naWZ5KGFyZ3MpCisKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCi0jZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCisjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKK3N0YXRpYyBjb25zdCBjaGFyIHByaW50X2ZtdF8jI2NhbGxbXSA9IHByaW50OwogCiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MpCQkJXApAQCAtNzM3LDcgKzYzNiw3IEBACiAJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAkJCVwKIAkucmVnZnVuYwkJPSBmdHJhY2VfcmF3X3JlZ19ldmVudF8jI2NhbGwsCQlcCiAJLnVucmVnZnVuYwkJPSBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbCwJXAotCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XyMjdGVtcGxhdGUsCQlcCisJLnByaW50X2ZtdAkJPSBwcmludF9mbXRfIyN0ZW1wbGF0ZSwJCQlcCiAJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyN0ZW1wbGF0ZSwJXAogCV9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkJCQkJCVwKIH0KQEAgLTc0NSw2ICs2NDQsOCBAQAogI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAogI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIGNhbGwsIHByb3RvLCBhcmdzLCBwcmludCkJCVwKIAkJCQkJCQkJCVwKK3N0YXRpYyBjb25zdCBjaGFyIHByaW50X2ZtdF8jI2NhbGxbXSA9IHByaW50OwkJCQlcCisJCQkJCQkJCQlcCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCkBAIC03NTQsNyArNjU1LDcgQEAKIAkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQkJXAogCS5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCwJCVwKIAkudW5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsLAlcCi0JLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyNjYWxsLAkJCVwKKwkucHJpbnRfZm10CQk9IHByaW50X2ZtdF8jI2NhbGwsCQkJXAogCS5kZWZpbmVfZmllbGRzCQk9IGZ0cmFjZV9kZWZpbmVfZmllbGRzXyMjdGVtcGxhdGUsCVwKIAlfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCQkJCQlcCiB9CkBAIC04MzUsNyArNzM2LDE3IEBACiAgKiB9CiAgKi8KIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisKKyN1bmRlZiBfX2VudHJ5CisjZGVmaW5lIF9fZW50cnkgZW50cnkKKworI3VuZGVmIF9fZ2V0X2R5bmFtaWNfYXJyYXkKKyNkZWZpbmUgX19nZXRfZHluYW1pY19hcnJheShmaWVsZCkJXAorCQkoKHZvaWQgKilfX2VudHJ5ICsgKF9fZW50cnktPl9fZGF0YV9sb2NfIyNmaWVsZCAmIDB4ZmZmZikpCisKKyN1bmRlZiBfX2dldF9zdHIKKyNkZWZpbmUgX19nZXRfc3RyKGZpZWxkKSAoY2hhciAqKV9fZ2V0X2R5bmFtaWNfYXJyYXkoZmllbGQpCiAKICN1bmRlZiBfX3BlcmZfYWRkcgogI2RlZmluZSBfX3BlcmZfYWRkcihhKSBfX2FkZHIgPSAoYSkKQEAgLTg0NSwyNyArNzU2LDE3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKLXN0YXRpYyB2b2lkCQkJCQkJCQlcCitzdGF0aWMgbm90cmFjZSB2b2lkCQkJCQkJCVwKIGZ0cmFjZV9wcm9maWxlX3RlbXBsXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwsCVwKIAkJCSAgICBwcm90bykJCQkJCVwKIHsJCQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9kYXRhX29mZnNldHNfIyNjYWxsIF9fbWF5YmVfdW51c2VkIF9fZGF0YV9vZmZzZXRzO1wKLQlleHRlcm4gaW50IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQodm9pZCk7CQlcCi0JZXh0ZXJuIHZvaWQgcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChpbnQgcmN0eCk7CVwKLQlleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KGludCwgdTY0LCB1NjQsIHZvaWQgKiwgaW50KTsJCVwKIAlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKmVudHJ5OwkJCQlcCiAJdTY0IF9fYWRkciA9IDAsIF9fY291bnQgPSAxOwkJCQkJXAogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwkJCQkJXAotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwkJCQkJXAogCWludCBfX2VudHJ5X3NpemU7CQkJCQkJXAogCWludCBfX2RhdGFfc2l6ZTsJCQkJCQlcCi0JY2hhciAqdHJhY2VfYnVmOwkJCQkJCVwKLQljaGFyICpyYXdfZGF0YTsJCQkJCQkJXAotCWludCBfX2NwdTsJCQkJCQkJXAogCWludCByY3R4OwkJCQkJCQlcCi0JaW50IHBjOwkJCQkJCQkJXAotCQkJCQkJCQkJXAotCXBjID0gcHJlZW1wdF9jb3VudCgpOwkJCQkJCVwKIAkJCQkJCQkJCVwKIAlfX2RhdGFfc2l6ZSA9IGZ0cmFjZV9nZXRfb2Zmc2V0c18jI2NhbGwoJl9fZGF0YV9vZmZzZXRzLCBhcmdzKTsgXAogCV9fZW50cnlfc2l6ZSA9IEFMSUdOKF9fZGF0YV9zaXplICsgc2l6ZW9mKCplbnRyeSkgKyBzaXplb2YodTMyKSxcCkBAIC04NzUsNDcgKzc3NiwyMSBAQAogCWlmIChXQVJOX09OQ0UoX19lbnRyeV9zaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCQlcCiAJCSAgICAgICJwcm9maWxlIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIikpCQlcCiAJCXJldHVybjsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JcmN0eCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsJCQlcCi0JaWYgKHJjdHggPCAwKQkJCQkJCQlcCi0JCWdvdG8gZW5kX3JlY3Vyc2lvbjsJCQkJCVwKLQkJCQkJCQkJCVwKLQlfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoaW5fbm1pKCkpCQkJCQkJCVwKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmX25taSk7CVwKLQllbHNlCQkJCQkJCQlcCi0JCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7CQlcCi0JCQkJCQkJCQlcCi0JaWYgKCF0cmFjZV9idWYpCQkJCQkJCVwKLQkJZ290byBlbmQ7CQkJCQkJXAotCQkJCQkJCQkJXAotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBfX2NwdSk7CQkJXAotCQkJCQkJCQkJXAotCSoodTY0ICopKCZyYXdfZGF0YVtfX2VudHJ5X3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsJCVwKLQllbnRyeSA9IChzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKilyYXdfZGF0YTsJCQlcCi0JZW50ID0gJmVudHJ5LT5lbnQ7CQkJCQkJXAotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50LCBpcnFfZmxhZ3MsIHBjKTsJCVwKLQllbnQtPnR5cGUgPSBldmVudF9jYWxsLT5pZDsJCQkJCVwKLQkJCQkJCQkJCVwKKwllbnRyeSA9IChzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKilmdHJhY2VfcGVyZl9idWZfcHJlcGFyZSgJXAorCQlfX2VudHJ5X3NpemUsIGV2ZW50X2NhbGwtPmlkLCAmcmN0eCwgJmlycV9mbGFncyk7CVwKKwlpZiAoIWVudHJ5KQkJCQkJCQlcCisJCXJldHVybjsJCQkJCQkJXAogCXRzdHJ1Y3QJCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAl7IGFzc2lnbjsgfQkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcGVyZl90cF9ldmVudChldmVudF9jYWxsLT5pZCwgX19hZGRyLCBfX2NvdW50LCBlbnRyeSwJCVwKLQkJCSAgICAgX19lbnRyeV9zaXplKTsJCQkJXAotCQkJCQkJCQkJXAotZW5kOgkJCQkJCQkJCVwKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwkJCVwKLWVuZF9yZWN1cnNpb246CQkJCQkJCQlcCi0JbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsJCQkJCVwKKwlmdHJhY2VfcGVyZl9idWZfc3VibWl0KGVudHJ5LCBfX2VudHJ5X3NpemUsIHJjdHgsIF9fYWRkciwJXAorCQkJICAgICAgIF9fY291bnQsIGlycV9mbGFncyk7CQkJXAogfQogCiAjdW5kZWYgREVGSU5FX0VWRU5UCiAjZGVmaW5lIERFRklORV9FVkVOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MpCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcHJvZmlsZV8jI2NhbGwocHJvdG8pCQkJXAorc3RhdGljIG5vdHJhY2Ugdm9pZCBmdHJhY2VfcHJvZmlsZV8jI2NhbGwocHJvdG8pCQlcCiB7CQkJCQkJCQlcCiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsID0gJmV2ZW50XyMjY2FsbDsJXAogCQkJCQkJCQlcCkBAIC05MjcsNyArODAyLDcgQEAKIAlERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCi0jZW5kaWYgLyogQ09ORklHX0VWRU5UX1BST0ZJTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIAogI3VuZGVmIF9UUkFDRV9QUk9GSUxFX0lOSVQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9zeXNjYWxsLmggYi9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaAppbmRleCA5NjFmZGEzLi4wMzg3MTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaAorKysgYi9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaApAQCAtMzQsMTAgKzM0LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGFyY2hfc3lzY2FsbF9hZGRyKGludCBucik7CiBleHRlcm4gaW50IGluaXRfc3lzY2FsbF90cmFjZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogCi1leHRlcm4gaW50IHN5c2NhbGxfZW50ZXJfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKLQkJCQlzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKLWV4dGVybiBpbnQgc3lzY2FsbF9leGl0X2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCi0JCQkJc3RydWN0IHRyYWNlX3NlcSAqcyk7CiBleHRlcm4gaW50IHN5c2NhbGxfZW50ZXJfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogZXh0ZXJuIGludCBzeXNjYWxsX2V4aXRfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogZXh0ZXJuIGludCByZWdfZXZlbnRfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwpAQCAtNDksMTIgKzQ1LDEyIEBACiBlbnVtIHByaW50X2xpbmVfdCBwcmludF9zeXNjYWxsX2VudGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKTsKIGVudW0gcHJpbnRfbGluZV90IHByaW50X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncyk7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiBpbnQgcHJvZl9zeXNlbnRlcl9lbmFibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIHZvaWQgcHJvZl9zeXNlbnRlcl9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiBpbnQgcHJvZl9zeXNleGl0X2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogdm9pZCBwcm9mX3N5c2V4aXRfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwotCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9UUkFDRV9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaCBiL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaAppbmRleCAyODgyMDU0Li4yY2M4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKKysrIGIvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCkBAIC0zNCw2ICszNCw4IEBACiAjZGVmaW5lIExDRENfRkxBR1NfSFNDTlQgKDEgPDwgMykgLyogRGlzYWJsZSBIU1lOQyBkdXJpbmcgVkJMQU5LICovCiAjZGVmaW5lIExDRENfRkxBR1NfRFdDTlQgKDEgPDwgNCkgLyogRGlzYWJsZSBkb3RjbG9jayBkdXJpbmcgYmxhbmtpbmcgKi8KIAorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQyBfSU9XKCdGJywgMHgyMCwgX191MzIpCisKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX2NmZyB7CiAJdW5zaWduZWQgbG9uZyBsZG10MnI7CiAJdW5zaWduZWQgbG9uZyBsZG10M3I7CmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggZDk1Y2E3Yy4uMDg5YTIzMCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMzk2LDYgKzM5NiwyMiBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKK2NvbmZpZyBSQ1VfRkFTVF9OT19IWgorCWJvb2wgIkFjY2VsZXJhdGUgbGFzdCBub24tZHludGljay1pZGxlIENQVSdzIGdyYWNlIHBlcmlvZHMiCisJZGVwZW5kcyBvbiBUUkVFX1JDVSAmJiBOT19IWiAmJiBTTVAKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgUkNVIHRvIGF0dGVtcHQgdG8gYWNjZWxlcmF0ZSBncmFjZSBwZXJpb2RzCisJICBpbiBvcmRlciB0byBhbGxvdyB0aGUgZmluYWwgQ1BVIHRvIGVudGVyIGR5bnRpY2tzLWlkbGUgc3RhdGUKKwkgIG1vcmUgcXVpY2tseS4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIG9wdGlvbiBpbmNyZWFzZXMgdGhlCisJICBvdmVyaGVhZCBvZiB0aGUgZHludGlja3MtaWRsZSBjaGVja2luZywgcGFydGljdWxhcmx5IG9uIHN5c3RlbXMKKwkgIHdpdGggbGFyZ2UgbnVtYmVycyBvZiBDUFVzLgorCisJICBTYXkgWSBpZiBlbmVyZ3kgZWZmaWNpZW5jeSBpcyBjcml0aWNhbGx5IGltcG9ydGFudCwgcGFydGljdWxhcmx5CisJICAJaWYgeW91IGhhdmUgcmVsYXRpdmVseSBmZXcgQ1BVcy4KKworCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCisKIGNvbmZpZyBUUkVFX1JDVV9UUkFDRQogCWRlZl9ib29sIFJDVV9UUkFDRSAmJiAoIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UgKQogCXNlbGVjdCBERUJVR19GUwpAQCAtNDQ1LDU3ICs0NjEsNiBAQAogY29uZmlnIEhBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sKIAlib29sCiAKLWNvbmZpZyBHUk9VUF9TQ0hFRAotCWJvb2wgIkdyb3VwIENQVSBzY2hlZHVsZXIiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGZlYXR1cmUgbGV0cyBDUFUgc2NoZWR1bGVyIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmQgY29udHJvbCBDUFUKLQkgIGJhbmR3aWR0aCBhbGxvY2F0aW9uIHRvIHN1Y2ggdGFzayBncm91cHMuCi0JICBJbiBvcmRlciB0byBjcmVhdGUgYSBncm91cCBmcm9tIGFyYml0cmFyeSBzZXQgb2YgcHJvY2Vzc2VzLCB1c2UKLQkgIENPTkZJR19DR1JPVVBTLiAoU2VlIENvbnRyb2wgR3JvdXAgc3VwcG9ydC4pCi0KLWNvbmZpZyBGQUlSX0dST1VQX1NDSEVECi0JYm9vbCAiR3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfT1RIRVIiCi0JZGVwZW5kcyBvbiBHUk9VUF9TQ0hFRAotCWRlZmF1bHQgR1JPVVBfU0NIRUQKLQotY29uZmlnIFJUX0dST1VQX1NDSEVECi0JYm9vbCAiR3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfUlIvRklGTyIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlcGVuZHMgb24gR1JPVVBfU0NIRUQKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGZlYXR1cmUgbGV0cyB5b3UgZXhwbGljaXRseSBhbGxvY2F0ZSByZWFsIENQVSBiYW5kd2lkdGgKLQkgIHRvIHVzZXJzIG9yIGNvbnRyb2wgZ3JvdXBzIChkZXBlbmRpbmcgb24gdGhlICJCYXNpcyBmb3IgZ3JvdXBpbmcgdGFza3MiCi0JICBzZXR0aW5nIGJlbG93LiBJZiBlbmFibGVkLCBpdCB3aWxsIGFsc28gbWFrZSBpdCBpbXBvc3NpYmxlIHRvCi0JICBzY2hlZHVsZSByZWFsdGltZSB0YXNrcyBmb3Igbm9uLXJvb3QgdXNlcnMgdW50aWwgeW91IGFsbG9jYXRlCi0JICByZWFsdGltZSBiYW5kd2lkdGggZm9yIHRoZW0uCi0JICBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi1jaG9pY2UKLQlkZXBlbmRzIG9uIEdST1VQX1NDSEVECi0JcHJvbXB0ICJCYXNpcyBmb3IgZ3JvdXBpbmcgdGFza3MiCi0JZGVmYXVsdCBVU0VSX1NDSEVECi0KLWNvbmZpZyBVU0VSX1NDSEVECi0JYm9vbCAidXNlciBpZCIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiB3aWxsIGNob29zZSB1c2VyaWQgYXMgdGhlIGJhc2lzIGZvciBncm91cGluZwotCSAgdGFza3MsIHRodXMgcHJvdmlkaW5nIGVxdWFsIENQVSBiYW5kd2lkdGggdG8gZWFjaCB1c2VyLgotCi1jb25maWcgQ0dST1VQX1NDSEVECi0JYm9vbCAiQ29udHJvbCBncm91cHMiCi0gCWRlcGVuZHMgb24gQ0dST1VQUwotIAloZWxwCi0JICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhcmJpdHJhcnkgdGFzayBncm91cHMKLQkgIHVzaW5nIHRoZSAiY2dyb3VwIiBwc2V1ZG8gZmlsZXN5c3RlbSBhbmQgY29udHJvbAotCSAgdGhlIGNwdSBiYW5kd2lkdGggYWxsb2NhdGVkIHRvIGVhY2ggc3VjaCB0YXNrIGdyb3VwLgotCSAgUmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBvbiAiY2dyb3VwIiBwc2V1ZG8gZmlsZXN5c3RlbS4KLQotZW5kY2hvaWNlCi0KIG1lbnVjb25maWcgQ0dST1VQUwogCWJvb2xlYW4gIkNvbnRyb2wgR3JvdXAgc3VwcG9ydCIKIAloZWxwCkBAIC02MTYsNiArNTgxLDM2IEBACiAJICBOb3csIG1lbW9yeSB1c2FnZSBvZiBzd2FwX2Nncm91cCBpcyAyIGJ5dGVzIHBlciBlbnRyeS4gSWYgc3dhcCBwYWdlCiAJICBzaXplIGlzIDQwOTZieXRlcywgNTEyayBwZXIgMUdieXRlcyBvZiBzd2FwLgogCittZW51Y29uZmlnIENHUk9VUF9TQ0hFRAorCWJvb2wgIkdyb3VwIENQVSBzY2hlZHVsZXIiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQ0dST1VQUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVQorCSAgYmFuZHdpZHRoIGFsbG9jYXRpb24gdG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgdXNlcyBjZ3JvdXBzIHRvIGdyb3VwCisJICB0YXNrcy4KKworaWYgQ0dST1VQX1NDSEVECitjb25maWcgRkFJUl9HUk9VUF9TQ0hFRAorCWJvb2wgIkdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX09USEVSIgorCWRlcGVuZHMgb24gQ0dST1VQX1NDSEVECisJZGVmYXVsdCBDR1JPVVBfU0NIRUQKKworY29uZmlnIFJUX0dST1VQX1NDSEVECisJYm9vbCAiR3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfUlIvRklGTyIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gQ0dST1VQX1NDSEVECisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBmZWF0dXJlIGxldHMgeW91IGV4cGxpY2l0bHkgYWxsb2NhdGUgcmVhbCBDUFUgYmFuZHdpZHRoCisJICB0byB1c2VycyBvciBjb250cm9sIGdyb3VwcyAoZGVwZW5kaW5nIG9uIHRoZSAiQmFzaXMgZm9yIGdyb3VwaW5nIHRhc2tzIgorCSAgc2V0dGluZyBiZWxvdy4gSWYgZW5hYmxlZCwgaXQgd2lsbCBhbHNvIG1ha2UgaXQgaW1wb3NzaWJsZSB0bworCSAgc2NoZWR1bGUgcmVhbHRpbWUgdGFza3MgZm9yIG5vbi1yb290IHVzZXJzIHVudGlsIHlvdSBhbGxvY2F0ZQorCSAgcmVhbHRpbWUgYmFuZHdpZHRoIGZvciB0aGVtLgorCSAgU2VlIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXJ0LWdyb3VwLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworZW5kaWYgI0NHUk9VUF9TQ0hFRAorCiBlbmRpZiAjIENHUk9VUFMKIAogY29uZmlnIE1NX09XTkVSCkBAIC05NzYsMTkgKzk3MSw2IEBACiAKIAkgIFNheSBZIGlmIHVuc3VyZS4KIAotY29uZmlnIEVWRU5UX1BST0ZJTEUKLQlib29sICJUcmFjZXBvaW50IHByb2ZpbGluZyBzb3VyY2VzIgotCWRlcGVuZHMgb24gUEVSRl9FVkVOVFMgJiYgRVZFTlRfVFJBQ0lORwotCWRlZmF1bHQgeQotCWhlbHAKLQkgQWxsb3cgdGhlIHVzZSBvZiB0cmFjZXBvaW50cyBhcyBzb2Z0d2FyZSBwZXJmb3JtYW5jZSBldmVudHMuCi0KLQkgV2hlbiB0aGlzIGlzIGVuYWJsZWQsIHlvdSBjYW4gY3JlYXRlIHBlcmYgZXZlbnRzIGJhc2VkIG9uCi0JIHRyYWNlcG9pbnRzIHVzaW5nIFBFUkZfVFlQRV9UUkFDRVBPSU5UIGFuZCB0aGUgdHJhY2Vwb2ludCBJRAotCSBmb3VuZCBpbiBkZWJ1Z2ZzOi8vdHJhY2luZy9ldmVudHMvKi8qL2lkLiAoVGhlIC1lLy0tZXZlbnRzCi0JIG9wdGlvbiB0byB0aGUgcGVyZiB0b29sIGNhbiBwYXJzZSBhbmQgaW50ZXJwcmV0IHN5bWJvbGljCi0JIHRyYWNlcG9pbnRzLCBpbiB0aGUgc3Vic3lzdGVtOnRyYWNlcG9pbnRfbmFtZSBmb3JtYXQuKQotCiBjb25maWcgUEVSRl9DT1VOVEVSUwogCWJvb2wgIktlcm5lbCBwZXJmb3JtYW5jZSBjb3VudGVycyAob2xkIGNvbmZpZyBvcHRpb24pIgogCWRlcGVuZHMgb24gSEFWRV9QRVJGX0VWRU5UUwpAQCAtMTExMiw3ICsxMDk0LDcgQEAKIAkgIFNlZSBEb2N1bWVudGF0aW9uL25vbW11LW1tYXAudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiBjb25maWcgUFJPRklMSU5HCi0JYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQiCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGV4dGVuZGVkIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZAogCSAgYnkgcHJvZmlsZXJzIHN1Y2ggYXMgT1Byb2ZpbGUuCkBAIC0xMjYyLDQgKzEyNDQsOCBAQAogY29uZmlnIFBSRUVNUFRfTk9USUZJRVJTCiAJYm9vbAogCitjb25maWcgUEFEQVRBCisJZGVwZW5kcyBvbiBTTVAKKwlib29sCisKIHNvdXJjZSAia2VybmVsL0tjb25maWcubG9ja3MiCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDRjYjQ3YTEuLmM3NWRjZDYgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC00MTYsNyArNDE2LDkgQEAKIAlrZXJuZWxfdGhyZWFkKGtlcm5lbF9pbml0LCBOVUxMLCBDTE9ORV9GUyB8IENMT05FX1NJR0hBTkQpOwogCW51bWFfZGVmYXVsdF9wb2xpY3koKTsKIAlwaWQgPSBrZXJuZWxfdGhyZWFkKGt0aHJlYWRkLCBOVUxMLCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJa3RocmVhZGRfdGFzayA9IGZpbmRfdGFza19ieV9waWRfbnMocGlkLCAmaW5pdF9waWRfbnMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCXVubG9ja19rZXJuZWwoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggODY0ZmY3NS4uNmFlYmRlYiAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTAwLDYgKzEwMCw3IEBACiBvYmotJChDT05GSUdfUEVSRl9FVkVOVFMpICs9IHBlcmZfZXZlbnQubwogb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkgKz0gaHdfYnJlYWtwb2ludC5vCiBvYmotJChDT05GSUdfVVNFUl9SRVRVUk5fTk9USUZJRVIpICs9IHVzZXItcmV0dXJuLW5vdGlmaWVyLm8KK29iai0kKENPTkZJR19QQURBVEEpICs9IHBhZGF0YS5vCiAKIGlmbmVxICgkKENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIpLHkpCiAjIEFjY29yZGluZyB0byBBbGFuIE1vZHJhIDxhbGFuQGxpbnV4Y2FyZS5jb20uYXU+LCB0aGUgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXMKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCBhYTNiZWU1Li40ZmQ5MGUxIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMTY2LDYgKzE2NywyMCBAQAogICovCiBzdGF0aWMgaW50IG5lZWRfZm9ya2V4aXRfY2FsbGJhY2sgX19yZWFkX21vc3RseTsKIAorI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCitpbnQgY2dyb3VwX2xvY2tfaXNfaGVsZCh2b2lkKQoreworCXJldHVybiBsb2NrZGVwX2lzX2hlbGQoJmNncm91cF9tdXRleCk7Cit9CisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgKi8KK2ludCBjZ3JvdXBfbG9ja19pc19oZWxkKHZvaWQpCit7CisJcmV0dXJuIG11dGV4X2lzX2xvY2tlZCgmY2dyb3VwX211dGV4KTsKK30KKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgKi8KKworRVhQT1JUX1NZTUJPTF9HUEwoY2dyb3VwX2xvY2tfaXNfaGVsZCk7CisKIC8qIGNvbnZlbmllbnQgdGVzdHMgZm9yIHRoZXNlIGJpdHMgKi8KIGlubGluZSBpbnQgY2dyb3VwX2lzX3JlbW92ZWQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDU0Njc3NGEuLjQ1ZWQwNDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtODUsNyArODUsOSBAQAogCUJVR19PTighc2lnKTsKIAlCVUdfT04oIWF0b21pY19yZWFkKCZzaWctPmNvdW50KSk7CiAKLQlzaWdoYW5kID0gcmN1X2RlcmVmZXJlbmNlKHRzay0+c2lnaGFuZCk7CisJc2lnaGFuZCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh0c2stPnNpZ2hhbmQsCisJCQkJCXJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJCWxvY2tkZXBfaXNfaGVsZCgmdGFza2xpc3RfbG9jaykpOwogCXNwaW5fbG9jaygmc2lnaGFuZC0+c2lnbG9jayk7CiAKIAlwb3NpeF9jcHVfdGltZXJzX2V4aXQodHNrKTsKQEAgLTE3MCw4ICsxNzIsMTAgQEAKIHJlcGVhdDoKIAl0cmFjZWhvb2tfcHJlcGFyZV9yZWxlYXNlX3Rhc2socCk7CiAJLyogZG9uJ3QgbmVlZCB0byBnZXQgdGhlIFJDVSByZWFkbG9jayBoZXJlIC0gdGhlIHByb2Nlc3MgaXMgZGVhZCBhbmQKLQkgKiBjYW4ndCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscyAqLworCSAqIGNhbid0IGJlIG1vZGlmeWluZyBpdHMgb3duIGNyZWRlbnRpYWxzLiBCdXQgc2h1dCBSQ1UtbG9ja2RlcCB1cCAqLworCXJjdV9yZWFkX2xvY2soKTsKIAlhdG9taWNfZGVjKCZfX3Rhc2tfY3JlZChwKS0+dXNlci0+cHJvY2Vzc2VzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXByb2NfZmx1c2hfdGFzayhwKTsKIApAQCAtNDczLDkgKzQ3NywxMSBAQAogCS8qCiAJICogSXQgaXMgc2FmZSB0byBkZXJlZmVyZW5jZSB0aGUgZmQgdGFibGUgd2l0aG91dCBSQ1Ugb3IKIAkgKiAtPmZpbGVfbG9jayBiZWNhdXNlIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZQotCSAqIGZpbGVzIHN0cnVjdHVyZS4KKwkgKiBmaWxlcyBzdHJ1Y3R1cmUuICBCdXQgdXNlIFJDVSB0byBzaHV0IFJDVS1sb2NrZGVwIHVwLgogCSAqLworCXJjdV9yZWFkX2xvY2soKTsKIAlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgc2V0OwogCQlpID0gaiAqIF9fTkZEQklUUzsKQEAgLTUyMSwxMCArNTI3LDEyIEBACiAJCSAqIGF0IHRoZSBlbmQgb2YgdGhlIFJDVSBncmFjZSBwZXJpb2QuIE90aGVyd2lzZSwKIAkJICogeW91IGNhbiBmcmVlIGZpbGVzIGltbWVkaWF0ZWx5LgogCQkgKi8KKwkJcmN1X3JlYWRfbG9jaygpOwogCQlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAkJaWYgKGZkdCAhPSAmZmlsZXMtPmZkdGFiKQogCQkJa21lbV9jYWNoZV9mcmVlKGZpbGVzX2NhY2hlcCwgZmlsZXMpOwogCQlmcmVlX2ZkdGFibGUoZmR0KTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBmODhiZDk4Li4xN2JiZjA5IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTg2LDYgKzg2LDcgQEAKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHByb2Nlc3NfY291bnRzKSA9IDA7CiAKIF9fY2FjaGVsaW5lX2FsaWduZWQgREVGSU5FX1JXTE9DSyh0YXNrbGlzdF9sb2NrKTsgIC8qIG91dGVyICovCitFWFBPUlRfU1lNQk9MX0dQTCh0YXNrbGlzdF9sb2NrKTsKIAogaW50IG5yX3Byb2Nlc3Nlcyh2b2lkKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4X2NvbXBhdC5jIGIva2VybmVsL2Z1dGV4X2NvbXBhdC5jCmluZGV4IDIzNTcxNjUuLmQ0OWFmYjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleF9jb21wYXQuYworKysgYi9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKIAkJcmV0ID0gLUVTUkNIOwotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwogCQlpZiAoIXApCiAJCQlnb3RvIGVycl91bmxvY2s7CkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJICAgICFjYXBhYmxlKENBUF9TWVNfUFRSQUNFKSkKIAkJCWdvdG8gZXJyX3VubG9jazsKIAkJaGVhZCA9IHAtPmNvbXBhdF9yb2J1c3RfbGlzdDsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAlpZiAocHV0X3VzZXIoc2l6ZW9mKCpoZWFkKSwgbGVuX3B0cikpCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlyZXR1cm4gcHV0X3VzZXIocHRyX3RvX2NvbXBhdChoZWFkKSwgaGVhZF9wdHIpOwogCiBlcnJfdW5sb2NrOgotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBiN2RmMzAyLi5jY2VjNzc0IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC05Myw2ICs5NCw3IEBACiAJeyJuYXRpdmVfZ2V0X2RlYnVncmVnIix9LAogCXsiaXJxX2VudHJpZXNfc3RhcnQiLH0sCiAJeyJjb21tb25faW50ZXJydXB0Iix9LAorCXsibWNvdW50Iix9LAkvKiBtY291bnQgY2FuIGJlIGNhbGxlZCBmcm9tIGV2ZXJ5d2hlcmUgKi8KIAl7TlVMTH0gICAgLyogVGVybWluYXRvciAqLwogfTsKIApAQCAtMTI0LDMwICsxMjYsNiBAQAogc3RhdGljIGludCBrcHJvYmVfZ2FyYmFnZV9zbG90czsKIHN0YXRpYyBpbnQgY29sbGVjdF9nYXJiYWdlX3Nsb3RzKHZvaWQpOwogCi1zdGF0aWMgaW50IF9fa3Byb2JlcyBjaGVja19zYWZldHkodm9pZCkKLXsKLQlpbnQgcmV0ID0gMDsKLSNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSAmJiBkZWZpbmVkKENPTkZJR19GUkVFWkVSKQotCXJldCA9IGZyZWV6ZV9wcm9jZXNzZXMoKTsKLQlpZiAocmV0ID09IDApIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqcTsKLQkJZG9fZWFjaF90aHJlYWQocCwgcSkgewotCQkJaWYgKHAgIT0gY3VycmVudCAmJiBwLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcgJiYKLQkJCSAgICBwLT5waWQgIT0gMCkgewotCQkJCXByaW50aygiQ2hlY2sgZmFpbGVkOiAlcyBpcyBydW5uaW5nXG4iLHAtPmNvbW0pOwotCQkJCXJldCA9IC0xOwotCQkJCWdvdG8gbG9vcF9lbmQ7Ci0JCQl9Ci0JCX0gd2hpbGVfZWFjaF90aHJlYWQocCwgcSk7Ci0JfQotbG9vcF9lbmQ6Ci0JdGhhd19wcm9jZXNzZXMoKTsKLSNlbHNlCi0Jc3luY2hyb25pemVfc2NoZWQoKTsKLSNlbmRpZgotCXJldHVybiByZXQ7Ci19Ci0KIC8qKgogICogX19nZXRfaW5zbl9zbG90KCkgLSBGaW5kIGEgc2xvdCBvbiBhbiBleGVjdXRhYmxlIHBhZ2UgZm9yIGFuIGluc3RydWN0aW9uLgogICogV2UgYWxsb2NhdGUgYW4gZXhlY3V0YWJsZSBwYWdlIGlmIHRoZXJlJ3Mgbm8gcm9vbSBvbiBleGlzdGluZyBvbmVzLgpAQCAtMjM1LDkgKzIxMyw4IEBACiB7CiAJc3RydWN0IGtwcm9iZV9pbnNuX3BhZ2UgKmtpcCwgKm5leHQ7CiAKLQkvKiBFbnN1cmUgbm8tb25lIGlzIHByZWVwbXRlZCBvbiB0aGUgZ2FyYmFnZXMgKi8KLQlpZiAoY2hlY2tfc2FmZXR5KCkpCi0JCXJldHVybiAtRUFHQUlOOworCS8qIEVuc3VyZSBuby1vbmUgaXMgaW50ZXJydXB0ZWQgb24gdGhlIGdhcmJhZ2VzICovCisJc3luY2hyb25pemVfc2NoZWQoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShraXAsIG5leHQsICZrcHJvYmVfaW5zbl9wYWdlcywgbGlzdCkgewogCQlpbnQgaTsKQEAgLTcyOCw3ICs3MDUsOCBAQAogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJaWYgKCFrZXJuZWxfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKSBwLT5hZGRyKSB8fAotCSAgICBpbl9rcHJvYmVzX2Z1bmN0aW9ucygodW5zaWduZWQgbG9uZykgcC0+YWRkcikpIHsKKwkgICAgaW5fa3Byb2Jlc19mdW5jdGlvbnMoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpIHx8CisJICAgIGZ0cmFjZV90ZXh0X3Jlc2VydmVkKHAtPmFkZHIsIHAtPmFkZHIpKSB7CiAJCXByZWVtcHRfZW5hYmxlKCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9rc3lzZnMuYyBiL2tlcm5lbC9rc3lzZnMuYwppbmRleCAzZmVhZjVhLi42YjFjY2MzIDEwMDY0NAotLS0gYS9rZXJuZWwva3N5c2ZzLmMKKysrIGIva2VybmVsL2tzeXNmcy5jCkBAIC0xOTcsMTYgKzE5Nyw4IEBACiAJCQlnb3RvIGdyb3VwX2V4aXQ7CiAJfQogCi0JLyogY3JlYXRlIHRoZSAvc3lzL2tlcm5lbC91aWRzLyBkaXJlY3RvcnkgKi8KLQllcnJvciA9IHVpZHNfc3lzZnNfaW5pdCgpOwotCWlmIChlcnJvcikKLQkJZ290byBub3Rlc19leGl0OwotCiAJcmV0dXJuIDA7CiAKLW5vdGVzX2V4aXQ6Ci0JaWYgKG5vdGVzX3NpemUgPiAwKQotCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoa2VybmVsX2tvYmosICZub3Rlc19hdHRyKTsKIGdyb3VwX2V4aXQ6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKGtlcm5lbF9rb2JqLCAma2VybmVsX2F0dHJfZ3JvdXApOwoga3NldF9leGl0OgpkaWZmIC0tZ2l0IGEva2VybmVsL2t0aHJlYWQuYyBiL2tlcm5lbC9rdGhyZWFkLmMKaW5kZXggZmJiNjIyMi4uODJlZDBlYSAxMDA2NDQKLS0tIGEva2VybmVsL2t0aHJlYWQuYworKysgYi9rZXJuZWwva3RocmVhZC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjogVGhpcyBoZWxwZXIgZnVuY3Rpb24gY3JlYXRlcyBhbmQgbmFtZXMgYSBrZXJuZWwKICAqIHRocmVhZC4gIFRoZSB0aHJlYWQgd2lsbCBiZSBzdG9wcGVkOiB1c2Ugd2FrZV91cF9wcm9jZXNzKCkgdG8gc3RhcnQKLSAqIGl0LiAgU2VlIGFsc28ga3RocmVhZF9ydW4oKSwga3RocmVhZF9jcmVhdGVfb25fY3B1KCkuCisgKiBpdC4gIFNlZSBhbHNvIGt0aHJlYWRfcnVuKCkuCiAgKgogICogV2hlbiB3b2tlbiwgdGhlIHRocmVhZCB3aWxsIHJ1biBAdGhyZWFkZm4oKSB3aXRoIEBkYXRhIGFzIGl0cwogICogYXJndW1lbnQuIEB0aHJlYWRmbigpIGNhbiBlaXRoZXIgY2FsbCBkb19leGl0KCkgZGlyZWN0bHkgaWYgaXQgaXMgYQpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggYzYyZWMxNC4uMGMzMGQwNCAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0zODA5LDMgKzM4MDksMjEgQEAKIAkJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOwogCX0KIH0KKwordm9pZCBsb2NrZGVwX3JjdV9kZXJlZmVyZW5jZShjb25zdCBjaGFyICpmaWxlLCBjb25zdCBpbnQgbGluZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OworCisJaWYgKCFkZWJ1Z19sb2Nrc19vZmYoKSkKKwkJcmV0dXJuOworCXByaW50aygiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ayggICJbIElORk86IHN1c3BpY2lvdXMgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgdXNhZ2UuIF1cbiIpOworCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByaW50aygiJXM6JWQgaW52b2tlZCByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB3aXRob3V0IHByb3RlY3Rpb24hXG4iLAorCQkJZmlsZSwgbGluZSk7CisJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG5cbiIpOworCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKKwlwcmludGsoIlxuc3RhY2sgYmFja3RyYWNlOlxuIik7CisJZHVtcF9zdGFjaygpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yY3VfZGVyZWZlcmVuY2UpOwpkaWZmIC0tZ2l0IGEva2VybmVsL25vdGlmaWVyLmMgYi9rZXJuZWwvbm90aWZpZXIuYwppbmRleCBhY2QyNGU3Li4yNDg4YmE3IDEwMDY0NAotLS0gYS9rZXJuZWwvbm90aWZpZXIuYworKysgYi9rZXJuZWwvbm90aWZpZXIuYwpAQCAtNzgsMTAgKzc4LDEwIEBACiAJaW50IHJldCA9IE5PVElGWV9ET05FOwogCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsICpuZXh0X25iOwogCi0JbmIgPSByY3VfZGVyZWZlcmVuY2UoKm5sKTsKKwluYiA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKm5sKTsKIAogCXdoaWxlIChuYiAmJiBucl90b19jYWxsKSB7Ci0JCW5leHRfbmIgPSByY3VfZGVyZWZlcmVuY2UobmItPm5leHQpOworCQluZXh0X25iID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhuYi0+bmV4dCk7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfTk9USUZJRVJTCiAJCWlmICh1bmxpa2VseSghZnVuY19wdHJfaXNfa2VybmVsX3RleHQobmItPm5vdGlmaWVyX2NhbGwpKSkgewpAQCAtMzA5LDcgKzMwOSw3IEBACiAJICogcmFjeSB0aGVuIGl0IGRvZXMgbm90IG1hdHRlciB3aGF0IHRoZSByZXN1bHQgb2YgdGhlIHRlc3QKIAkgKiBpcywgd2UgcmUtY2hlY2sgdGhlIGxpc3QgYWZ0ZXIgaGF2aW5nIHRha2VuIHRoZSBsb2NrIGFueXdheToKIAkgKi8KLQlpZiAocmN1X2RlcmVmZXJlbmNlKG5oLT5oZWFkKSkgeworCWlmIChyY3VfZGVyZWZlcmVuY2VfcmF3KG5oLT5oZWFkKSkgewogCQlkb3duX3JlYWQoJm5oLT5yd3NlbSk7CiAJCXJldCA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJm5oLT5oZWFkLCB2YWwsIHYsIG5yX3RvX2NhbGwsCiAJCQkJCW5yX2NhbGxzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYWRhdGEuYyBiL2tlcm5lbC9wYWRhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjliY2I4Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3BhZGF0YS5jCkBAIC0wLDAgKzEsNjkwIEBACisvKgorICogcGFkYXRhLmMgLSBnZW5lcmljIGludGVyZmFjZSB0byBwcm9jZXNzIGRhdGEgc3RyZWFtcyBpbiBwYXJhbGxlbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBzZWN1bmV0IFNlY3VyaXR5IE5ldHdvcmtzIEFHCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgU3RlZmZlbiBLbGFzc2VydCA8c3RlZmZlbi5rbGFzc2VydEBzZWN1bmV0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvcGFkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisKKyNkZWZpbmUgTUFYX1NFUV9OUiBJTlRfTUFYIC0gTlJfQ1BVUworI2RlZmluZSBNQVhfT0JKX05VTSAxMDAwMCAqIE5SX0NQVVMKKworc3RhdGljIGludCBwYWRhdGFfaW5kZXhfdG9fY3B1KHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZCwgaW50IGNwdV9pbmRleCkKK3sKKwlpbnQgY3B1LCB0YXJnZXRfY3B1OworCisJdGFyZ2V0X2NwdSA9IGNwdW1hc2tfZmlyc3QocGQtPmNwdW1hc2spOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2luZGV4OyBjcHUrKykKKwkJdGFyZ2V0X2NwdSA9IGNwdW1hc2tfbmV4dCh0YXJnZXRfY3B1LCBwZC0+Y3B1bWFzayk7CisKKwlyZXR1cm4gdGFyZ2V0X2NwdTsKK30KKworc3RhdGljIGludCBwYWRhdGFfY3B1X2hhc2goc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJaW50IGNwdV9pbmRleDsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwlwZCA9ICBwYWRhdGEtPnBkOworCisJLyoKKwkgKiBIYXNoIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHRvIHRoZSBjcHVzIGJ5IHRha2luZworCSAqIHNlcV9uciBtb2QuIG51bWJlciBvZiBjcHVzIGluIHVzZS4KKwkgKi8KKwljcHVfaW5kZXggPSAgcGFkYXRhLT5zZXFfbnIgJSBjcHVtYXNrX3dlaWdodChwZC0+Y3B1bWFzayk7CisKKwlyZXR1cm4gcGFkYXRhX2luZGV4X3RvX2NwdShwZCwgY3B1X2luZGV4KTsKK30KKworc3RhdGljIHZvaWQgcGFkYXRhX3BhcmFsbGVsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0OworCUxJU1RfSEVBRChsb2NhbF9saXN0KTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlxdWV1ZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGFkYXRhX3F1ZXVlLCBwd29yayk7CisJcGQgPSBxdWV1ZS0+cGQ7CisJcGluc3QgPSBwZC0+cGluc3Q7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5wYXJhbGxlbC5sb2NrKTsKKwlsaXN0X3JlcGxhY2VfaW5pdCgmcXVldWUtPnBhcmFsbGVsLmxpc3QsICZsb2NhbF9saXN0KTsKKwlzcGluX3VubG9jaygmcXVldWUtPnBhcmFsbGVsLmxvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsb2NhbF9saXN0KSkgeworCQlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YTsKKworCQlwYWRhdGEgPSBsaXN0X2VudHJ5KGxvY2FsX2xpc3QubmV4dCwKKwkJCQkgICAgc3RydWN0IHBhZGF0YV9wcml2LCBsaXN0KTsKKworCQlsaXN0X2RlbF9pbml0KCZwYWRhdGEtPmxpc3QpOworCisJCXBhZGF0YS0+cGFyYWxsZWwocGFkYXRhKTsKKwl9CisKKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworLyoKKyAqIHBhZGF0YV9kb19wYXJhbGxlbCAtIHBhZGF0YSBwYXJhbGxlbGl6YXRpb24gZnVuY3Rpb24KKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQorICogQHBhZGF0YTogb2JqZWN0IHRvIGJlIHBhcmFsbGVsaXplZAorICogQGNiX2NwdTogY3B1IHRoZSBzZXJpYWxpemF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgcnVuIG9uLAorICogICAgICAgICAgbXVzdCBiZSBpbiB0aGUgY3B1bWFzayBvZiBwYWRhdGEuCisgKgorICogVGhlIHBhcmFsbGVsaXphdGlvbiBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIHJ1biB3aXRoIEJIcyBvZmYuCisgKiBOb3RlOiBFdmVyeSBvYmplY3Qgd2hpY2ggaXMgcGFyYWxsZWxpemVkIGJ5IHBhZGF0YV9kb19wYXJhbGxlbAorICogbXVzdCBiZSBzZWVuIGJ5IHBhZGF0YV9kb19zZXJpYWwuCisgKi8KK2ludCBwYWRhdGFfZG9fcGFyYWxsZWwoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCSAgICAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSwgaW50IGNiX2NwdSkKK3sKKwlpbnQgdGFyZ2V0X2NwdSwgZXJyOworCXN0cnVjdCBwYWRhdGFfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCXJjdV9yZWFkX2xvY2tfYmgoKTsKKworCXBkID0gcmN1X2RlcmVmZXJlbmNlKHBpbnN0LT5wZCk7CisKKwllcnIgPSAwOworCWlmICghKHBpbnN0LT5mbGFncyAmIFBBREFUQV9JTklUKSkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAgLUVCVVNZOworCWlmICgocGluc3QtPmZsYWdzICYgUEFEQVRBX1JFU0VUKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoYXRvbWljX3JlYWQoJnBkLT5yZWZjbnQpID49IE1BWF9PQkpfTlVNKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNiX2NwdSwgcGQtPmNwdW1hc2spKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FSU5QUk9HUkVTUzsKKwlhdG9taWNfaW5jKCZwZC0+cmVmY250KTsKKwlwYWRhdGEtPnBkID0gcGQ7CisJcGFkYXRhLT5jYl9jcHUgPSBjYl9jcHU7CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnBkLT5zZXFfbnIpID09IHBkLT5tYXhfc2VxX25yKSkKKwkJYXRvbWljX3NldCgmcGQtPnNlcV9uciwgLTEpOworCisJcGFkYXRhLT5zZXFfbnIgPSBhdG9taWNfaW5jX3JldHVybigmcGQtPnNlcV9ucik7CisKKwl0YXJnZXRfY3B1ID0gcGFkYXRhX2NwdV9oYXNoKHBhZGF0YSk7CisJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIHRhcmdldF9jcHUpOworCisJc3Bpbl9sb2NrKCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcGFkYXRhLT5saXN0LCAmcXVldWUtPnBhcmFsbGVsLmxpc3QpOworCXNwaW5fdW5sb2NrKCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CisKKwlxdWV1ZV93b3JrX29uKHRhcmdldF9jcHUsIHBpbnN0LT53cSwgJnF1ZXVlLT5wd29yayk7CisKK291dDoKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9kb19wYXJhbGxlbCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YV9nZXRfbmV4dChzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQpCit7CisJaW50IGNwdSwgbnVtX2NwdXMsIGVtcHR5LCBjYWxjX3NlcV9ucjsKKwlpbnQgc2VxX25yLCBuZXh0X25yLCBvdmVycnVuLCBuZXh0X292ZXJydW47CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWUsICpuZXh0X3F1ZXVlOworCXN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhOworCXN0cnVjdCBwYWRhdGFfbGlzdCAqcmVvcmRlcjsKKworCWVtcHR5ID0gMDsKKwluZXh0X25yID0gLTE7CisJbmV4dF9vdmVycnVuID0gMDsKKwluZXh0X3F1ZXVlID0gTlVMTDsKKworCW51bV9jcHVzID0gY3B1bWFza193ZWlnaHQocGQtPmNwdW1hc2spOworCisJZm9yX2VhY2hfY3B1KGNwdSwgcGQtPmNwdW1hc2spIHsKKwkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7CisJCXJlb3JkZXIgPSAmcXVldWUtPnJlb3JkZXI7CisKKwkJLyoKKwkJICogQ2FsY3VsYXRlIHRoZSBzZXFfbnIgb2YgdGhlIG9iamVjdCB0aGF0IHNob3VsZCBiZQorCQkgKiBuZXh0IGluIHRoaXMgcXVldWUuCisJCSAqLworCQlvdmVycnVuID0gMDsKKwkJY2FsY19zZXFfbnIgPSAoYXRvbWljX3JlYWQoJnF1ZXVlLT5udW1fb2JqKSAqIG51bV9jcHVzKQorCQkJICAgICAgICsgcXVldWUtPmNwdV9pbmRleDsKKworCQlpZiAodW5saWtlbHkoY2FsY19zZXFfbnIgPiBwZC0+bWF4X3NlcV9ucikpIHsKKwkJCWNhbGNfc2VxX25yID0gY2FsY19zZXFfbnIgLSBwZC0+bWF4X3NlcV9uciAtIDE7CisJCQlvdmVycnVuID0gMTsKKwkJfQorCisJCWlmICghbGlzdF9lbXB0eSgmcmVvcmRlci0+bGlzdCkpIHsKKwkJCXBhZGF0YSA9IGxpc3RfZW50cnkocmVvcmRlci0+bGlzdC5uZXh0LAorCQkJCQkgICAgc3RydWN0IHBhZGF0YV9wcml2LCBsaXN0KTsKKworCQkJc2VxX25yICA9IHBhZGF0YS0+c2VxX25yOworCQkJQlVHX09OKGNhbGNfc2VxX25yICE9IHNlcV9ucik7CisJCX0gZWxzZSB7CisJCQlzZXFfbnIgPSBjYWxjX3NlcV9ucjsKKwkJCWVtcHR5Kys7CisJCX0KKworCQlpZiAobmV4dF9uciA8IDAgfHwgc2VxX25yIDwgbmV4dF9ucgorCQkgICAgfHwgKG5leHRfb3ZlcnJ1biAmJiAhb3ZlcnJ1bikpIHsKKwkJCW5leHRfbnIgPSBzZXFfbnI7CisJCQluZXh0X292ZXJydW4gPSBvdmVycnVuOworCQkJbmV4dF9xdWV1ZSA9IHF1ZXVlOworCQl9CisJfQorCisJcGFkYXRhID0gTlVMTDsKKworCWlmIChlbXB0eSA9PSBudW1fY3B1cykKKwkJZ290byBvdXQ7CisKKwlyZW9yZGVyID0gJm5leHRfcXVldWUtPnJlb3JkZXI7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJlb3JkZXItPmxpc3QpKSB7CisJCXBhZGF0YSA9IGxpc3RfZW50cnkocmVvcmRlci0+bGlzdC5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYsIGxpc3QpOworCisJCWlmICh1bmxpa2VseShuZXh0X292ZXJydW4pKSB7CisJCQlmb3JfZWFjaF9jcHUoY3B1LCBwZC0+Y3B1bWFzaykgeworCQkJCXF1ZXVlID0gcGVyX2NwdV9wdHIocGQtPnF1ZXVlLCBjcHUpOworCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5udW1fb2JqLCAwKTsKKwkJCX0KKwkJfQorCisJCXNwaW5fbG9jaygmcmVvcmRlci0+bG9jayk7CisJCWxpc3RfZGVsX2luaXQoJnBhZGF0YS0+bGlzdCk7CisJCWF0b21pY19kZWMoJnBkLT5yZW9yZGVyX29iamVjdHMpOworCQlzcGluX3VubG9jaygmcmVvcmRlci0+bG9jayk7CisKKwkJYXRvbWljX2luYygmbmV4dF9xdWV1ZS0+bnVtX29iaik7CisKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG5leHRfbnIgJSBudW1fY3B1cyA9PSBuZXh0X3F1ZXVlLT5jcHVfaW5kZXgpIHsKKwkJcGFkYXRhID0gRVJSX1BUUigtRU5PREFUQSk7CisJCWdvdG8gb3V0OworCX0KKworCXBhZGF0YSA9IEVSUl9QVFIoLUVJTlBST0dSRVNTKTsKK291dDoKKwlyZXR1cm4gcGFkYXRhOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfcmVvcmRlcihzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQpCit7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGE7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QgPSBwZC0+cGluc3Q7CisKK3RyeV9hZ2FpbjoKKwlpZiAoIXNwaW5fdHJ5bG9ja19iaCgmcGQtPmxvY2spKQorCQlnb3RvIG91dDsKKworCXdoaWxlICgxKSB7CisJCXBhZGF0YSA9IHBhZGF0YV9nZXRfbmV4dChwZCk7CisKKwkJaWYgKCFwYWRhdGEgfHwgUFRSX0VSUihwYWRhdGEpID09IC1FSU5QUk9HUkVTUykKKwkJCWJyZWFrOworCisJCWlmIChQVFJfRVJSKHBhZGF0YSkgPT0gLUVOT0RBVEEpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZwZC0+bG9jayk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXF1ZXVlID0gcGVyX2NwdV9wdHIocGQtPnF1ZXVlLCBwYWRhdGEtPmNiX2NwdSk7CisKKwkJc3Bpbl9sb2NrKCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCQlsaXN0X2FkZF90YWlsKCZwYWRhdGEtPmxpc3QsICZxdWV1ZS0+c2VyaWFsLmxpc3QpOworCQlzcGluX3VubG9jaygmcXVldWUtPnNlcmlhbC5sb2NrKTsKKworCQlxdWV1ZV93b3JrX29uKHBhZGF0YS0+Y2JfY3B1LCBwaW5zdC0+d3EsICZxdWV1ZS0+c3dvcmspOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZwZC0+bG9jayk7CisKKwlpZiAoYXRvbWljX3JlYWQoJnBkLT5yZW9yZGVyX29iamVjdHMpKQorCQlnb3RvIHRyeV9hZ2FpbjsKKworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcGFkYXRhX3NlcmlhbF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwYWRhdGFfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKwlMSVNUX0hFQUQobG9jYWxfbGlzdCk7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBhZGF0YV9xdWV1ZSwgc3dvcmspOworCXBkID0gcXVldWUtPnBkOworCisJc3Bpbl9sb2NrKCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCWxpc3RfcmVwbGFjZV9pbml0KCZxdWV1ZS0+c2VyaWFsLmxpc3QsICZsb2NhbF9saXN0KTsKKwlzcGluX3VubG9jaygmcXVldWUtPnNlcmlhbC5sb2NrKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmbG9jYWxfbGlzdCkpIHsKKwkJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGE7CisKKwkJcGFkYXRhID0gbGlzdF9lbnRyeShsb2NhbF9saXN0Lm5leHQsCisJCQkJICAgIHN0cnVjdCBwYWRhdGFfcHJpdiwgbGlzdCk7CisKKwkJbGlzdF9kZWxfaW5pdCgmcGFkYXRhLT5saXN0KTsKKworCQlwYWRhdGEtPnNlcmlhbChwYWRhdGEpOworCQlhdG9taWNfZGVjKCZwZC0+cmVmY250KTsKKwl9CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKKy8qCisgKiBwYWRhdGFfZG9fc2VyaWFsIC0gcGFkYXRhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24KKyAqCisgKiBAcGFkYXRhOiBvYmplY3QgdG8gYmUgc2VyaWFsaXplZC4KKyAqCisgKiBwYWRhdGFfZG9fc2VyaWFsIG11c3QgYmUgY2FsbGVkIGZvciBldmVyeSBwYXJhbGxlbGl6ZWQgb2JqZWN0LgorICogVGhlIHNlcmlhbGl6YXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBydW4gd2l0aCBCSHMgb2ZmLgorICovCit2b2lkIHBhZGF0YV9kb19zZXJpYWwoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJaW50IGNwdTsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwlwZCA9IHBhZGF0YS0+cGQ7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5yZW9yZGVyLmxvY2spOworCWF0b21pY19pbmMoJnBkLT5yZW9yZGVyX29iamVjdHMpOworCWxpc3RfYWRkX3RhaWwoJnBhZGF0YS0+bGlzdCwgJnF1ZXVlLT5yZW9yZGVyLmxpc3QpOworCXNwaW5fdW5sb2NrKCZxdWV1ZS0+cmVvcmRlci5sb2NrKTsKKworCXB1dF9jcHUoKTsKKworCXBhZGF0YV9yZW9yZGVyKHBkKTsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX2RvX3NlcmlhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGFkYXRhX2FsbG9jX3BkKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQoreworCWludCBjcHUsIGNwdV9pbmRleCwgbnVtX2NwdXM7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCisJY3B1X2luZGV4ID0gMDsKKworCXBkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhcmFsbGVsX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkKQorCQlnb3RvIGVycjsKKworCXBkLT5xdWV1ZSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgcGFkYXRhX3F1ZXVlKTsKKwlpZiAoIXBkLT5xdWV1ZSkKKwkJZ290byBlcnJfZnJlZV9wZDsKKworCWlmICghYWxsb2NfY3B1bWFza192YXIoJnBkLT5jcHVtYXNrLCBHRlBfS0VSTkVMKSkKKwkJZ290byBlcnJfZnJlZV9xdWV1ZTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7CisKKwkJcXVldWUtPnBkID0gcGQ7CisKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVtYXNrKQorCQkgICAgJiYgY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9hY3RpdmVfbWFzaykpIHsKKwkJCXF1ZXVlLT5jcHVfaW5kZXggPSBjcHVfaW5kZXg7CisJCQljcHVfaW5kZXgrKzsKKwkJfSBlbHNlCisJCQlxdWV1ZS0+Y3B1X2luZGV4ID0gLTE7CisKKwkJSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT5yZW9yZGVyLmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmcXVldWUtPnBhcmFsbGVsLmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmcXVldWUtPnNlcmlhbC5saXN0KTsKKwkJc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5yZW9yZGVyLmxvY2spOworCQlzcGluX2xvY2tfaW5pdCgmcXVldWUtPnBhcmFsbGVsLmxvY2spOworCQlzcGluX2xvY2tfaW5pdCgmcXVldWUtPnNlcmlhbC5sb2NrKTsKKworCQlJTklUX1dPUksoJnF1ZXVlLT5wd29yaywgcGFkYXRhX3BhcmFsbGVsX3dvcmtlcik7CisJCUlOSVRfV09SSygmcXVldWUtPnN3b3JrLCBwYWRhdGFfc2VyaWFsX3dvcmtlcik7CisJCWF0b21pY19zZXQoJnF1ZXVlLT5udW1fb2JqLCAwKTsKKwl9CisKKwljcHVtYXNrX2FuZChwZC0+Y3B1bWFzaywgY3B1bWFzaywgY3B1X2FjdGl2ZV9tYXNrKTsKKworCW51bV9jcHVzID0gY3B1bWFza193ZWlnaHQocGQtPmNwdW1hc2spOworCXBkLT5tYXhfc2VxX25yID0gKE1BWF9TRVFfTlIgLyBudW1fY3B1cykgKiBudW1fY3B1cyAtIDE7CisKKwlhdG9taWNfc2V0KCZwZC0+c2VxX25yLCAtMSk7CisJYXRvbWljX3NldCgmcGQtPnJlb3JkZXJfb2JqZWN0cywgMCk7CisJYXRvbWljX3NldCgmcGQtPnJlZmNudCwgMCk7CisJcGQtPnBpbnN0ID0gcGluc3Q7CisJc3Bpbl9sb2NrX2luaXQoJnBkLT5sb2NrKTsKKworCXJldHVybiBwZDsKKworZXJyX2ZyZWVfcXVldWU6CisJZnJlZV9wZXJjcHUocGQtPnF1ZXVlKTsKK2Vycl9mcmVlX3BkOgorCWtmcmVlKHBkKTsKK2VycjoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcGFkYXRhX2ZyZWVfcGQoc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkKQoreworCWZyZWVfY3B1bWFza192YXIocGQtPmNwdW1hc2spOworCWZyZWVfcGVyY3B1KHBkLT5xdWV1ZSk7CisJa2ZyZWUocGQpOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfcmVwbGFjZShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCSAgIHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZF9uZXcpCit7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkX29sZCA9IHBpbnN0LT5wZDsKKworCXBpbnN0LT5mbGFncyB8PSBQQURBVEFfUkVTRVQ7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIocGluc3QtPnBkLCBwZF9uZXcpOworCisJc3luY2hyb25pemVfcmN1KCk7CisKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnBkX29sZC0+cmVmY250KSAhPSAwKQorCQl5aWVsZCgpOworCisJZmx1c2hfd29ya3F1ZXVlKHBpbnN0LT53cSk7CisKKwlwYWRhdGFfZnJlZV9wZChwZF9vbGQpOworCisJcGluc3QtPmZsYWdzICY9IH5QQURBVEFfUkVTRVQ7Cit9CisKKy8qCisgKiBwYWRhdGFfc2V0X2NwdW1hc2sgLSBzZXQgdGhlIGNwdW1hc2sgdGhhdCBwYWRhdGEgc2hvdWxkIHVzZQorICoKKyAqIEBwaW5zdDogcGFkYXRhIGluc3RhbmNlCisgKiBAY3B1bWFzazogdGhlIGNwdW1hc2sgdG8gdXNlCisgKi8KK2ludCBwYWRhdGFfc2V0X2NwdW1hc2soc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCQljcHVtYXNrX3Zhcl90IGNwdW1hc2spCit7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCWludCBlcnIgPSAwOworCisJbWlnaHRfc2xlZXAoKTsKKworCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKKworCXBkID0gcGFkYXRhX2FsbG9jX3BkKHBpbnN0LCBjcHVtYXNrKTsKKwlpZiAoIXBkKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNwdW1hc2tfY29weShwaW5zdC0+Y3B1bWFzaywgY3B1bWFzayk7CisKKwlwYWRhdGFfcmVwbGFjZShwaW5zdCwgcGQpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfc2V0X2NwdW1hc2spOworCitzdGF0aWMgaW50IF9fcGFkYXRhX2FkZF9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpCit7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfYWN0aXZlX21hc2spKSB7CisJCXBkID0gcGFkYXRhX2FsbG9jX3BkKHBpbnN0LCBwaW5zdC0+Y3B1bWFzayk7CisJCWlmICghcGQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlwYWRhdGFfcmVwbGFjZShwaW5zdCwgcGQpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcGFkYXRhX2FkZF9jcHUgLSBhZGQgYSBjcHUgdG8gdGhlIHBhZGF0YSBjcHVtYXNrCisgKgorICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UKKyAqIEBjcHU6IGNwdSB0byBhZGQKKyAqLworaW50IHBhZGF0YV9hZGRfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KQoreworCWludCBlcnI7CisKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCisJY3B1bWFza19zZXRfY3B1KGNwdSwgcGluc3QtPmNwdW1hc2spOworCWVyciA9IF9fcGFkYXRhX2FkZF9jcHUocGluc3QsIGNwdSk7CisKKwltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9hZGRfY3B1KTsKKworc3RhdGljIGludCBfX3BhZGF0YV9yZW1vdmVfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KQoreworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkgeworCQlwZCA9IHBhZGF0YV9hbGxvY19wZChwaW5zdCwgcGluc3QtPmNwdW1hc2spOworCQlpZiAoIXBkKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcGFkYXRhX3JlcGxhY2UocGluc3QsIHBkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHBhZGF0YV9yZW1vdmVfY3B1IC0gcmVtb3ZlIGEgY3B1IGZyb20gdGhlIHBhZGF0YSBjcHVtYXNrCisgKgorICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UKKyAqIEBjcHU6IGNwdSB0byByZW1vdmUKKyAqLworaW50IHBhZGF0YV9yZW1vdmVfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KQoreworCWludCBlcnI7CisKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCisJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzayk7CisJZXJyID0gX19wYWRhdGFfcmVtb3ZlX2NwdShwaW5zdCwgY3B1KTsKKworCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX3JlbW92ZV9jcHUpOworCisvKgorICogcGFkYXRhX3N0YXJ0IC0gc3RhcnQgdGhlIHBhcmFsbGVsIHByb2Nlc3NpbmcKKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZSB0byBzdGFydAorICovCit2b2lkIHBhZGF0YV9zdGFydChzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKK3sKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCXBpbnN0LT5mbGFncyB8PSBQQURBVEFfSU5JVDsKKwltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX3N0YXJ0KTsKKworLyoKKyAqIHBhZGF0YV9zdG9wIC0gc3RvcCB0aGUgcGFyYWxsZWwgcHJvY2Vzc2luZworICoKKyAqIEBwaW5zdDogcGFkYXRhIGluc3RhbmNlIHRvIHN0b3AKKyAqLwordm9pZCBwYWRhdGFfc3RvcChzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKK3sKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCXBpbnN0LT5mbGFncyAmPSB+UEFEQVRBX0lOSVQ7CisJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9zdG9wKTsKKworc3RhdGljIGludCBfX2NwdWluaXQgcGFkYXRhX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWludCBlcnI7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3Q7CisJaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisKKwlwaW5zdCA9IGNvbnRhaW5lcl9vZihuZmIsIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UsIGNwdV9ub3RpZmllcik7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX09OTElORToKKwljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgorCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzaykpCisJCQlicmVhazsKKwkJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCQllcnIgPSBfX3BhZGF0YV9hZGRfY3B1KHBpbnN0LCBjcHUpOworCQltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBOT1RJRllfQkFEOworCQlicmVhazsKKworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgorCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzaykpCisJCQlicmVhazsKKwkJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCQllcnIgPSBfX3BhZGF0YV9yZW1vdmVfY3B1KHBpbnN0LCBjcHUpOworCQltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBOT1RJRllfQkFEOworCQlicmVhazsKKworCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgcGluc3QtPmNwdW1hc2spKQorCQkJYnJlYWs7CisJCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKKwkJX19wYWRhdGFfcmVtb3ZlX2NwdShwaW5zdCwgY3B1KTsKKwkJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7CisKKwljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwljYXNlIENQVV9ET1dOX0ZBSUxFRF9GUk9aRU46CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKSkKKwkJCWJyZWFrOworCQltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJCV9fcGFkYXRhX2FkZF9jcHUocGluc3QsIGNwdSk7CisJCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKKy8qCisgKiBwYWRhdGFfYWxsb2MgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIHBhZGF0YSBpbnN0YW5jZQorICoKKyAqIEBjcHVtYXNrOiBjcHVtYXNrIHRoYXQgcGFkYXRhIHVzZXMgZm9yIHBhcmFsbGVsaXphdGlvbgorICogQHdxOiB3b3JrcXVldWUgdG8gdXNlIGZvciB0aGUgYWxsb2NhdGVkIHBhZGF0YSBpbnN0YW5jZQorICovCitzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwYWRhdGFfYWxsb2MoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkJICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdDsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwlwaW5zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBpbnN0KQorCQlnb3RvIGVycjsKKworCXBkID0gcGFkYXRhX2FsbG9jX3BkKHBpbnN0LCBjcHVtYXNrKTsKKwlpZiAoIXBkKQorCQlnb3RvIGVycl9mcmVlX2luc3Q7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIocGluc3QtPnBkLCBwZCk7CisKKwlwaW5zdC0+d3EgPSB3cTsKKworCWNwdW1hc2tfY29weShwaW5zdC0+Y3B1bWFzaywgY3B1bWFzayk7CisKKwlwaW5zdC0+ZmxhZ3MgPSAwOworCisJcGluc3QtPmNwdV9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gcGFkYXRhX2NwdV9jYWxsYmFjazsKKwlwaW5zdC0+Y3B1X25vdGlmaWVyLnByaW9yaXR5ID0gMDsKKwllcnIgPSByZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJnBpbnN0LT5jcHVfbm90aWZpZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfcGQ7CisKKwltdXRleF9pbml0KCZwaW5zdC0+bG9jayk7CisKKwlyZXR1cm4gcGluc3Q7CisKK2Vycl9mcmVlX3BkOgorCXBhZGF0YV9mcmVlX3BkKHBkKTsKK2Vycl9mcmVlX2luc3Q6CisJa2ZyZWUocGluc3QpOworZXJyOgorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfYWxsb2MpOworCisvKgorICogcGFkYXRhX2ZyZWUgLSBmcmVlIGEgcGFkYXRhIGluc3RhbmNlCisgKgorICogQCBwYWRhdGFfaW5zdDogcGFkYXRhIGluc3RhbmNlIHRvIGZyZWUKKyAqLwordm9pZCBwYWRhdGFfZnJlZShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCkKK3sKKwlwYWRhdGFfc3RvcChwaW5zdCk7CisKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmcGluc3QtPnBkLT5yZWZjbnQpICE9IDApCisJCXlpZWxkKCk7CisKKwl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcGluc3QtPmNwdV9ub3RpZmllcik7CisJcGFkYXRhX2ZyZWVfcGQocGluc3QtPnBkKTsKKwlrZnJlZShwaW5zdCk7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9mcmVlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDJhZTc0MDkuLmE2NjFlNzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtOTgsMTEgKzk4LDEyIEBACiAKIHZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXAoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KIHZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXBfb25saW5lKGludCBjcHUpCXsgYmFycmllcigpOyB9Cit2b2lkIF9fd2VhayBod19wZXJmX2V2ZW50X3NldHVwX29mZmxpbmUoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KIAogaW50IF9fd2VhawogaHdfcGVyZl9ncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfbGVhZGVyLAogCSAgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAotCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpCisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0OCw3ICsyNDksNyBAQAogCiBzdGF0aWMgaW5saW5lIHU2NCBwZXJmX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuIGNwdV9jbG9jayhzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJldHVybiBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CiAKIC8qCkBAIC0yODksNiArMjkwLDE1IEBACiAJZXZlbnQtPnRvdGFsX3RpbWVfcnVubmluZyA9IHJ1bl9lbmQgLSBldmVudC0+dHN0YW1wX3J1bm5pbmc7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICoKK2N0eF9ncm91cF9saXN0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCWlmIChldmVudC0+YXR0ci5waW5uZWQpCisJCXJldHVybiAmY3R4LT5waW5uZWRfZ3JvdXBzOworCWVsc2UKKwkJcmV0dXJuICZjdHgtPmZsZXhpYmxlX2dyb3VwczsKK30KKwogLyoKICAqIEFkZCBhIGV2ZW50IGZyb20gdGhlIGxpc3RzIGZvciBpdHMgY29udGV4dC4KICAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3R4LT5tdXRleCBhbmQgY3R4LT5sb2NrIGhlbGQuCkBAIC0zMDMsOSArMzEzLDE5IEBACiAJICogYWRkIGl0IHN0cmFpZ2h0IHRvIHRoZSBjb250ZXh0J3MgZXZlbnQgbGlzdCwgb3IgdG8gdGhlIGdyb3VwCiAJICogbGVhZGVyJ3Mgc2libGluZyBsaXN0OgogCSAqLwotCWlmIChncm91cF9sZWFkZXIgPT0gZXZlbnQpCi0JCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7Ci0JZWxzZSB7CisJaWYgKGdyb3VwX2xlYWRlciA9PSBldmVudCkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJCWlmIChpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCQlldmVudC0+Z3JvdXBfZmxhZ3MgfD0gUEVSRl9HUk9VUF9TT0ZUV0FSRTsKKworCQlsaXN0ID0gY3R4X2dyb3VwX2xpc3QoZXZlbnQsIGN0eCk7CisJCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgbGlzdCk7CisJfSBlbHNlIHsKKwkJaWYgKGdyb3VwX2xlYWRlci0+Z3JvdXBfZmxhZ3MgJiBQRVJGX0dST1VQX1NPRlRXQVJFICYmCisJCSAgICAhaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQkJZ3JvdXBfbGVhZGVyLT5ncm91cF9mbGFncyAmPSB+UEVSRl9HUk9VUF9TT0ZUV0FSRTsKKwogCQlsaXN0X2FkZF90YWlsKCZldmVudC0+Z3JvdXBfZW50cnksICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCk7CiAJCWdyb3VwX2xlYWRlci0+bnJfc2libGluZ3MrKzsKIAl9CkBAIC0zNTUsOSArMzc1LDE0IEBACiAJICogdG8gdGhlIGNvbnRleHQgbGlzdCBkaXJlY3RseToKIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgdG1wLCAmZXZlbnQtPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCQlsaXN0X21vdmVfdGFpbCgmc2libGluZy0+Z3JvdXBfZW50cnksICZjdHgtPmdyb3VwX2xpc3QpOworCQlsaXN0ID0gY3R4X2dyb3VwX2xpc3QoZXZlbnQsIGN0eCk7CisJCWxpc3RfbW92ZV90YWlsKCZzaWJsaW5nLT5ncm91cF9lbnRyeSwgbGlzdCk7CiAJCXNpYmxpbmctPmdyb3VwX2xlYWRlciA9IHNpYmxpbmc7CisKKwkJLyogSW5oZXJpdCBncm91cCBmbGFncyBmcm9tIHRoZSBwcmV2aW91cyBsZWFkZXIgKi8KKwkJc2libGluZy0+Z3JvdXBfZmxhZ3MgPSBldmVudC0+Z3JvdXBfZmxhZ3M7CiAJfQogfQogCkBAIC02MDgsMTQgKzYzMywxMyBAQAogc3RhdGljIGludAogZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCQkgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkJIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKLQkJIGludCBjcHUpCisJCSBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CiAJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKIAkJcmV0dXJuIDA7CiAKIAlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKLQlldmVudC0+b25jcHUgPSBjcHU7CS8qIFRPRE86IHB1dCAnY3B1JyBpbnRvIGNwdWN0eC0+Y3B1ICovCisJZXZlbnQtPm9uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCS8qCiAJICogVGhlIG5ldyBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHR1cm4gaXQgb24gaW4gdGhlIGhhcmR3YXJlOgogCSAqLwpAQCAtNjQyLDggKzY2Niw3IEBACiBzdGF0aWMgaW50CiBncm91cF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXBfZXZlbnQsCiAJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKLQkgICAgICAgaW50IGNwdSkKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgKnBhcnRpYWxfZ3JvdXA7CiAJaW50IHJldDsKQEAgLTY1MSwxOCArNjc0LDE4IEBACiAJaWYgKGdyb3VwX2V2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBod19wZXJmX2dyb3VwX3NjaGVkX2luKGdyb3VwX2V2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKKwlyZXQgPSBod19wZXJmX2dyb3VwX3NjaGVkX2luKGdyb3VwX2V2ZW50LCBjcHVjdHgsIGN0eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwogCi0JaWYgKGV2ZW50X3NjaGVkX2luKGdyb3VwX2V2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKKwlpZiAoZXZlbnRfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAkvKgogCSAqIFNjaGVkdWxlIGluIHNpYmxpbmdzIGFzIG9uZSBncm91cCAoaWYgYW55KToKIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZ3JvdXBfZXZlbnQtPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJaWYgKGV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkgeworCQlpZiAoZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KSkgewogCQkJcGFydGlhbF9ncm91cCA9IGV2ZW50OwogCQkJZ290byBncm91cF9lcnJvcjsKIAkJfQpAQCAtNjg2LDI0ICs3MDksNiBAQAogfQogCiAvKgotICogUmV0dXJuIDEgZm9yIGEgZ3JvdXAgY29uc2lzdGluZyBlbnRpcmVseSBvZiBzb2Z0d2FyZSBldmVudHMsCi0gKiAwIGlmIHRoZSBncm91cCBjb250YWlucyBhbnkgaGFyZHdhcmUgZXZlbnRzLgotICovCi1zdGF0aWMgaW50IGlzX3NvZnR3YXJlX29ubHlfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlcikKLXsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Ci0KLQlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGxlYWRlcikpCi0JCXJldHVybiAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkKLQkJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCi0JCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi0vKgogICogV29yayBvdXQgd2hldGhlciB3ZSBjYW4gcHV0IHRoaXMgZXZlbnQgZ3JvdXAgb24gdGhlIENQVSBub3cuCiAgKi8KIHN0YXRpYyBpbnQgZ3JvdXBfY2FuX2dvX29uKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKQEAgLTcxMyw3ICs3MTgsNyBAQAogCS8qCiAJICogR3JvdXBzIGNvbnNpc3RpbmcgZW50aXJlbHkgb2Ygc29mdHdhcmUgZXZlbnRzIGNhbiBhbHdheXMgZ28gb24uCiAJICovCi0JaWYgKGlzX3NvZnR3YXJlX29ubHlfZ3JvdXAoZXZlbnQpKQorCWlmIChldmVudC0+Z3JvdXBfZmxhZ3MgJiBQRVJGX0dST1VQX1NPRlRXQVJFKQogCQlyZXR1cm4gMTsKIAkvKgogCSAqIElmIGFuIGV4Y2x1c2l2ZSBncm91cCBpcyBhbHJlYWR5IG9uLCBubyBvdGhlciBoYXJkd2FyZQpAQCAtNzU0LDcgKzc1OSw2IEBACiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gaW5mbzsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyOwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGVycjsKIAogCS8qCkBAIC04MDEsNyArODA1LDcgQEAKIAlpZiAoIWdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKIAkJZXJyID0gLUVFWElTVDsKIAllbHNlCi0JCWVyciA9IGV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKKwkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KTsKIAogCWlmIChlcnIpIHsKIAkJLyoKQEAgLTk0MywxMSArOTQ3LDkgQEAKIAl9IGVsc2UgewogCQlwZXJmX2Rpc2FibGUoKTsKIAkJaWYgKGV2ZW50ID09IGxlYWRlcikKLQkJCWVyciA9IGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwKLQkJCQkJICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQkJZXJyID0gZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KTsKIAkJZWxzZQotCQkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LAotCQkJCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJCWVyciA9IGV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCk7CiAJCXBlcmZfZW5hYmxlKCk7CiAJfQogCkBAIC0xMDQzLDggKzEwNDUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX3BlcmZfZXZlbnRfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKLQkJCSAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCitlbnVtIGV2ZW50X3R5cGVfdCB7CisJRVZFTlRfRkxFWElCTEUgPSAweDEsCisJRVZFTlRfUElOTkVEID0gMHgyLAorCUVWRU5UX0FMTCA9IEVWRU5UX0ZMRVhJQkxFIHwgRVZFTlRfUElOTkVELAorfTsKKworc3RhdGljIHZvaWQgY3R4X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJCQkgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCkBAIC0xMDU1LDEwICsxMDY0LDE4IEBACiAJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwogCiAJcGVyZl9kaXNhYmxlKCk7Ci0JaWYgKGN0eC0+bnJfYWN0aXZlKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KQorCWlmICghY3R4LT5ucl9hY3RpdmUpCisJCWdvdG8gb3V0X2VuYWJsZTsKKworCWlmIChldmVudF90eXBlICYgRVZFTlRfUElOTkVEKQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5waW5uZWRfZ3JvdXBzLCBncm91cF9lbnRyeSkKIAkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOwotCX0KKworCWlmIChldmVudF90eXBlICYgRVZFTlRfRkxFWElCTEUpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmZsZXhpYmxlX2dyb3VwcywgZ3JvdXBfZW50cnkpCisJCQlncm91cF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKKworIG91dF9lbmFibGU6CiAJcGVyZl9lbmFibGUoKTsKICBvdXQ6CiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwpAQCAtMTE3MCw5ICsxMTg3LDkgQEAKICAqIG5vdCByZXN0YXJ0IHRoZSBldmVudC4KICAqLwogdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LCBpbnQgY3B1KQorCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiB7Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpuZXh0X2N0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwYXJlbnQ7CkBAIC0xMjIwLDE1ICsxMjM3LDEzIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoZG9fc3dpdGNoKSB7Ci0JCV9fcGVyZl9ldmVudF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgpOworCQljdHhfc2NoZWRfb3V0KGN0eCwgY3B1Y3R4LCBFVkVOVF9BTEwpOwogCQljcHVjdHgtPnRhc2tfY3R4ID0gTlVMTDsKIAl9CiB9CiAKLS8qCi0gKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCi0gKi8KLXN0YXRpYyB2b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCitzdGF0aWMgdm9pZCB0YXNrX2N0eF9zY2hlZF9vdXQoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkJICAgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCiB7CiAJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCkBAIC0xMjM4LDI1ICsxMjUzLDgyIEBACiAJaWYgKFdBUk5fT05fT05DRShjdHggIT0gY3B1Y3R4LT50YXNrX2N0eCkpCiAJCXJldHVybjsKIAotCV9fcGVyZl9ldmVudF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgpOworCWN0eF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgsIGV2ZW50X3R5cGUpOwogCWNwdWN0eC0+dGFza19jdHggPSBOVUxMOwogfQogCiAvKgogICogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZAogICovCi1zdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2NwdV9zY2hlZF9vdXQoc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKK3N0YXRpYyB2b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7Ci0JX19wZXJmX2V2ZW50X3NjaGVkX291dCgmY3B1Y3R4LT5jdHgsIGNwdWN0eCk7CisJdGFza19jdHhfc2NoZWRfb3V0KGN0eCwgRVZFTlRfQUxMKTsKK30KKworLyoKKyAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKKyAqLworc3RhdGljIHZvaWQgY3B1X2N0eF9zY2hlZF9vdXQoc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkJCSAgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCit7CisJY3R4X3NjaGVkX291dCgmY3B1Y3R4LT5jdHgsIGNwdWN0eCwgZXZlbnRfdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1fX3BlcmZfZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAotCQkJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwgaW50IGNwdSkKK2N0eF9waW5uZWRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5waW5uZWRfZ3JvdXBzLCBncm91cF9lbnRyeSkgeworCQlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQkJY29udGludWU7CisJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJY29udGludWU7CisKKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCAxKSkKKwkJCWdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCk7CisKKwkJLyoKKwkJICogSWYgdGhpcyBwaW5uZWQgZ3JvdXAgaGFzbid0IGJlZW4gc2NoZWR1bGVkLAorCQkgKiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCisJCSAqLworCQlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKKwkJCXVwZGF0ZV9ncm91cF90aW1lcyhldmVudCk7CisJCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0VSUk9SOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorY3R4X2ZsZXhpYmxlX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKKwkJICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJaW50IGNhbl9hZGRfaHcgPSAxOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+ZmxleGlibGVfZ3JvdXBzLCBncm91cF9lbnRyeSkgeworCQkvKiBJZ25vcmUgZXZlbnRzIGluIE9GRiBvciBFUlJPUiBzdGF0ZSAqLworCQlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIExpc3RlbiB0byB0aGUgJ2NwdScgc2NoZWR1bGluZyBmaWx0ZXIgY29uc3RyYWludAorCQkgKiBvZiBldmVudHM6CisJCSAqLworCQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgY2FuX2FkZF9odykpCisJCQlpZiAoZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KSkKKwkJCQljYW5fYWRkX2h3ID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitjdHhfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCSAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCit7CiAJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAljdHgtPmlzX2FjdGl2ZSA9IDE7CiAJaWYgKGxpa2VseSghY3R4LT5ucl9ldmVudHMpKQpAQCAtMTI3MCw1MSArMTM0MiwzOSBAQAogCSAqIEZpcnN0IGdvIHRocm91Z2ggdGhlIGxpc3QgYW5kIHB1dCBvbiBhbnkgcGlubmVkIGdyb3VwcwogCSAqIGluIG9yZGVyIHRvIGdpdmUgdGhlbSB0aGUgYmVzdCBjaGFuY2Ugb2YgZ29pbmcgb24uCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRiB8fAotCQkgICAgIWV2ZW50LT5hdHRyLnBpbm5lZCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IGNwdSkKLQkJCWNvbnRpbnVlOworCWlmIChldmVudF90eXBlICYgRVZFTlRfUElOTkVEKQorCQljdHhfcGlubmVkX3NjaGVkX2luKGN0eCwgY3B1Y3R4KTsKIAotCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKQotCQkJZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCS8qIFRoZW4gd2FsayB0aHJvdWdoIHRoZSBsb3dlciBwcmlvIGZsZXhpYmxlIGdyb3VwcyAqLworCWlmIChldmVudF90eXBlICYgRVZFTlRfRkxFWElCTEUpCisJCWN0eF9mbGV4aWJsZV9zY2hlZF9pbihjdHgsIGNwdWN0eCk7CiAKLQkJLyoKLQkJICogSWYgdGhpcyBwaW5uZWQgZ3JvdXAgaGFzbid0IGJlZW4gc2NoZWR1bGVkLAotCQkgKiBwdXQgaXQgaW4gZXJyb3Igc3RhdGUuCi0JCSAqLwotCQlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpIHsKLQkJCXVwZGF0ZV9ncm91cF90aW1lcyhldmVudCk7Ci0JCQlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0VSUk9SOwotCQl9Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJLyoKLQkJICogSWdub3JlIGV2ZW50cyBpbiBPRkYgb3IgRVJST1Igc3RhdGUsIGFuZAotCQkgKiBpZ25vcmUgcGlubmVkIGV2ZW50cyBzaW5jZSB3ZSBkaWQgdGhlbSBhbHJlYWR5LgotCQkgKi8KLQkJaWYgKGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRiB8fAotCQkgICAgZXZlbnQtPmF0dHIucGlubmVkKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogTGlzdGVuIHRvIHRoZSAnY3B1JyBzY2hlZHVsaW5nIGZpbHRlciBjb25zdHJhaW50Ci0JCSAqIG9mIGV2ZW50czoKLQkJICovCi0JCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQotCQkJY29udGludWU7Ci0KLQkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCBjYW5fYWRkX2h3KSkKLQkJCWlmIChncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSkpCi0JCQkJY2FuX2FkZF9odyA9IDA7Ci0JfQogCXBlcmZfZW5hYmxlKCk7CiAgb3V0OgogCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgY3B1X2N0eF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCQkJICAgICBlbnVtIGV2ZW50X3R5cGVfdCBldmVudF90eXBlKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKKworCWN0eF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgZXZlbnRfdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRhc2tfY3R4X3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCSAgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCit7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKKworCWlmIChsaWtlbHkoIWN0eCkpCisJCXJldHVybjsKKwlpZiAoY3B1Y3R4LT50YXNrX2N0eCA9PSBjdHgpCisJCXJldHVybjsKKwljdHhfc2NoZWRfaW4oY3R4LCBjcHVjdHgsIGV2ZW50X3R5cGUpOworCWNwdWN0eC0+dGFza19jdHggPSBjdHg7Cit9CiAvKgogICogQ2FsbGVkIGZyb20gc2NoZWR1bGVyIHRvIGFkZCB0aGUgZXZlbnRzIG9mIHRoZSBjdXJyZW50IHRhc2sKICAqIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KQEAgLTEzMjYsMzggKzEzODYsMTI4IEBACiAgKiBhY2Nlc3NpbmcgdGhlIGV2ZW50IGNvbnRyb2wgcmVnaXN0ZXIuIElmIGEgTk1JIGhpdHMsIHRoZW4gaXQgd2lsbAogICoga2VlcCB0aGUgZXZlbnQgcnVubmluZy4KICAqLwotdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQordm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOworCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHggPSAmX19nZXRfY3B1X3ZhcihwZXJmX2NwdV9jb250ZXh0KTsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSB0YXNrLT5wZXJmX2V2ZW50X2N0eHA7CiAKIAlpZiAobGlrZWx5KCFjdHgpKQogCQlyZXR1cm47CisKIAlpZiAoY3B1Y3R4LT50YXNrX2N0eCA9PSBjdHgpCiAJCXJldHVybjsKLQlfX3BlcmZfZXZlbnRfc2NoZWRfaW4oY3R4LCBjcHVjdHgsIGNwdSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdG8ga2VlcCB0aGUgZm9sbG93aW5nIHByaW9yaXR5IG9yZGVyOgorCSAqIGNwdSBwaW5uZWQgKHRoYXQgZG9uJ3QgbmVlZCB0byBtb3ZlKSwgdGFzayBwaW5uZWQsCisJICogY3B1IGZsZXhpYmxlLCB0YXNrIGZsZXhpYmxlLgorCSAqLworCWNwdV9jdHhfc2NoZWRfb3V0KGNwdWN0eCwgRVZFTlRfRkxFWElCTEUpOworCisJY3R4X3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBFVkVOVF9QSU5ORUQpOworCWNwdV9jdHhfc2NoZWRfaW4oY3B1Y3R4LCBFVkVOVF9GTEVYSUJMRSk7CisJY3R4X3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBFVkVOVF9GTEVYSUJMRSk7CisKIAljcHVjdHgtPnRhc2tfY3R4ID0gY3R4OwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2NwdV9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LCBpbnQgY3B1KQotewotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKLQotCV9fcGVyZl9ldmVudF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgY3B1KTsKLX0KLQogI2RlZmluZSBNQVhfSU5URVJSVVBUUyAofjBVTEwpCiAKIHN0YXRpYyB2b2lkIHBlcmZfbG9nX3Rocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGVuYWJsZSk7CiAKLXN0YXRpYyB2b2lkIHBlcmZfYWRqdXN0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBldmVudHMpCitzdGF0aWMgdTY0IHBlcmZfY2FsY3VsYXRlX3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBuc2VjLCB1NjQgY291bnQpCit7CisJdTY0IGZyZXF1ZW5jeSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxOworCXU2NCBzZWMgPSBOU0VDX1BFUl9TRUM7CisJdTY0IGRpdmlzb3IsIGRpdmlkZW5kOworCisJaW50IGNvdW50X2ZscywgbnNlY19mbHMsIGZyZXF1ZW5jeV9mbHMsIHNlY19mbHM7CisKKwljb3VudF9mbHMgPSBmbHM2NChjb3VudCk7CisJbnNlY19mbHMgPSBmbHM2NChuc2VjKTsKKwlmcmVxdWVuY3lfZmxzID0gZmxzNjQoZnJlcXVlbmN5KTsKKwlzZWNfZmxzID0gMzA7CisKKwkvKgorCSAqIFdlIGdvdCBAY291bnQgaW4gQG5zZWMsIHdpdGggYSB0YXJnZXQgb2Ygc2FtcGxlX2ZyZXEgSFoKKwkgKiB0aGUgdGFyZ2V0IHBlcmlvZCBiZWNvbWVzOgorCSAqCisJICogICAgICAgICAgICAgQGNvdW50ICogMTBeOQorCSAqIHBlcmlvZCA9IC0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgICAgICAgICBAbnNlYyAqIHNhbXBsZV9mcmVxCisJICoKKwkgKi8KKworCS8qCisJICogUmVkdWNlIGFjY3VyYWN5IGJ5IG9uZSBiaXQgc3VjaCB0aGF0IEBhIGFuZCBAYiBjb252ZXJnZQorCSAqIHRvIGEgc2ltaWxhciBtYWduaXR1ZGUuCisJICovCisjZGVmaW5lIFJFRFVDRV9GTFMoYSwgYikgCQlcCitkbyB7CQkJCQlcCisJaWYgKGEjI19mbHMgPiBiIyNfZmxzKSB7CVwKKwkJYSA+Pj0gMTsJCVwKKwkJYSMjX2Zscy0tOwkJXAorCX0gZWxzZSB7CQkJXAorCQliID4+PSAxOwkJXAorCQliIyNfZmxzLS07CQlcCisJfQkJCQlcCit9IHdoaWxlICgwKQorCisJLyoKKwkgKiBSZWR1Y2UgYWNjdXJhY3kgdW50aWwgZWl0aGVyIHRlcm0gZml0cyBpbiBhIHU2NCwgdGhlbiBwcm9jZWVkIHdpdGgKKwkgKiB0aGUgb3RoZXIsIHNvIHRoYXQgZmluYWxseSB3ZSBjYW4gZG8gYSB1NjQvdTY0IGRpdmlzaW9uLgorCSAqLworCXdoaWxlIChjb3VudF9mbHMgKyBzZWNfZmxzID4gNjQgJiYgbnNlY19mbHMgKyBmcmVxdWVuY3lfZmxzID4gNjQpIHsKKwkJUkVEVUNFX0ZMUyhuc2VjLCBmcmVxdWVuY3kpOworCQlSRURVQ0VfRkxTKHNlYywgY291bnQpOworCX0KKworCWlmIChjb3VudF9mbHMgKyBzZWNfZmxzID4gNjQpIHsKKwkJZGl2aXNvciA9IG5zZWMgKiBmcmVxdWVuY3k7CisKKwkJd2hpbGUgKGNvdW50X2ZscyArIHNlY19mbHMgPiA2NCkgeworCQkJUkVEVUNFX0ZMUyhjb3VudCwgc2VjKTsKKwkJCWRpdmlzb3IgPj49IDE7CisJCX0KKworCQlkaXZpZGVuZCA9IGNvdW50ICogc2VjOworCX0gZWxzZSB7CisJCWRpdmlkZW5kID0gY291bnQgKiBzZWM7CisKKwkJd2hpbGUgKG5zZWNfZmxzICsgZnJlcXVlbmN5X2ZscyA+IDY0KSB7CisJCQlSRURVQ0VfRkxTKG5zZWMsIGZyZXF1ZW5jeSk7CisJCQlkaXZpZGVuZCA+Pj0gMTsKKwkJfQorCisJCWRpdmlzb3IgPSBuc2VjICogZnJlcXVlbmN5OworCX0KKworCXJldHVybiBkaXY2NF91NjQoZGl2aWRlbmQsIGRpdmlzb3IpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmICghZXZlbnQtPnBtdS0+c3RvcCkKKwkJcmV0dXJuIGV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOworCisJcmV0dXJuIGV2ZW50LT5wbXUtPnN0b3AoZXZlbnQpOworfQorCitzdGF0aWMgaW50IHBlcmZfZXZlbnRfc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmICghZXZlbnQtPnBtdS0+c3RhcnQpCisJCXJldHVybiBldmVudC0+cG11LT5lbmFibGUoZXZlbnQpOworCisJcmV0dXJuIGV2ZW50LT5wbXUtPnN0YXJ0KGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9hZGp1c3RfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5zZWMsIHU2NCBjb3VudCkKIHsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAl1NjQgcGVyaW9kLCBzYW1wbGVfcGVyaW9kOwogCXM2NCBkZWx0YTsKIAotCWV2ZW50cyAqPSBod2MtPnNhbXBsZV9wZXJpb2Q7Ci0JcGVyaW9kID0gZGl2NjRfdTY0KGV2ZW50cywgZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXEpOworCXBlcmlvZCA9IHBlcmZfY2FsY3VsYXRlX3BlcmlvZChldmVudCwgbnNlYywgY291bnQpOwogCiAJZGVsdGEgPSAoczY0KShwZXJpb2QgLSBod2MtPnNhbXBsZV9wZXJpb2QpOwogCWRlbHRhID0gKGRlbHRhICsgNykgLyA4OyAvKiBsb3cgcGFzcyBmaWx0ZXIgKi8KQEAgLTEzNjgsMTMgKzE1MTgsMjIgQEAKIAkJc2FtcGxlX3BlcmlvZCA9IDE7CiAKIAlod2MtPnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kOworCisJaWYgKGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpID4gOCpzYW1wbGVfcGVyaW9kKSB7CisJCXBlcmZfZGlzYWJsZSgpOworCQlwZXJmX2V2ZW50X3N0b3AoZXZlbnQpOworCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIDApOworCQlwZXJmX2V2ZW50X3N0YXJ0KGV2ZW50KTsKKwkJcGVyZl9lbmFibGUoKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfY3R4X2FkanVzdF9mcmVxKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKLQl1NjQgaW50ZXJydXB0cywgZnJlcTsKKwl1NjQgaW50ZXJydXB0cywgbm93OworCXM2NCBkZWx0YTsKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7CkBAIC0xMzk1LDQ0ICsxNTU0LDE4IEBACiAJCWlmIChpbnRlcnJ1cHRzID09IE1BWF9JTlRFUlJVUFRTKSB7CiAJCQlwZXJmX2xvZ190aHJvdHRsZShldmVudCwgMSk7CiAJCQlldmVudC0+cG11LT51bnRocm90dGxlKGV2ZW50KTsKLQkJCWludGVycnVwdHMgPSAyKnN5c2N0bF9wZXJmX2V2ZW50X3NhbXBsZV9yYXRlL0haOwogCQl9CiAKIAkJaWYgKCFldmVudC0+YXR0ci5mcmVxIHx8ICFldmVudC0+YXR0ci5zYW1wbGVfZnJlcSkKIAkJCWNvbnRpbnVlOwogCi0JCS8qCi0JCSAqIGlmIHRoZSBzcGVjaWZpZWQgZnJlcSA8IEhaIHRoZW4gd2UgbmVlZCB0byBza2lwIHRpY2tzCi0JCSAqLwotCQlpZiAoZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXEgPCBIWikgewotCQkJZnJlcSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxOworCQlldmVudC0+cG11LT5yZWFkKGV2ZW50KTsKKwkJbm93ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwkJZGVsdGEgPSBub3cgLSBod2MtPmZyZXFfY291bnRfc3RhbXA7CisJCWh3Yy0+ZnJlcV9jb3VudF9zdGFtcCA9IG5vdzsKIAotCQkJaHdjLT5mcmVxX2NvdW50ICs9IGZyZXE7Ci0JCQlod2MtPmZyZXFfaW50ZXJydXB0cyArPSBpbnRlcnJ1cHRzOwotCi0JCQlpZiAoaHdjLT5mcmVxX2NvdW50IDwgSFopCi0JCQkJY29udGludWU7Ci0KLQkJCWludGVycnVwdHMgPSBod2MtPmZyZXFfaW50ZXJydXB0czsKLQkJCWh3Yy0+ZnJlcV9pbnRlcnJ1cHRzID0gMDsKLQkJCWh3Yy0+ZnJlcV9jb3VudCAtPSBIWjsKLQkJfSBlbHNlCi0JCQlmcmVxID0gSFo7Ci0KLQkJcGVyZl9hZGp1c3RfcGVyaW9kKGV2ZW50LCBmcmVxICogaW50ZXJydXB0cyk7Ci0KLQkJLyoKLQkJICogSW4gb3JkZXIgdG8gYXZvaWQgYmVpbmcgc3RhbGxlZCBieSBhbiAoYWNjaWRlbnRhbCkgaHVnZQotCQkgKiBzYW1wbGUgcGVyaW9kLCBmb3JjZSByZXNldCB0aGUgc2FtcGxlIHBlcmlvZCBpZiB3ZSBkaWRuJ3QKLQkJICogZ2V0IGFueSBldmVudHMgaW4gdGhpcyBmcmVxIHBlcmlvZC4KLQkJICovCi0JCWlmICghaW50ZXJydXB0cykgewotCQkJcGVyZl9kaXNhYmxlKCk7Ci0JCQlldmVudC0+cG11LT5kaXNhYmxlKGV2ZW50KTsKLQkJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgMCk7Ci0JCQlldmVudC0+cG11LT5lbmFibGUoZXZlbnQpOwotCQkJcGVyZl9lbmFibGUoKTsKLQkJfQorCQlpZiAoZGVsdGEgPiAwKQorCQkJcGVyZl9hZGp1c3RfcGVyaW9kKGV2ZW50LCBUSUNLX05TRUMsIGRlbHRhKTsKIAl9CiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogfQpAQCAtMTQ0MiwyNiArMTU3NSwxOCBAQAogICovCiBzdGF0aWMgdm9pZCByb3RhdGVfY3R4KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Ci0KIAlpZiAoIWN0eC0+bnJfZXZlbnRzKQogCQlyZXR1cm47CiAKIAlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwotCS8qCi0JICogUm90YXRlIHRoZSBmaXJzdCBlbnRyeSBsYXN0ICh3b3JrcyBqdXN0IGZpbmUgZm9yIGdyb3VwIGV2ZW50cyB0b28pOgotCSAqLwotCXBlcmZfZGlzYWJsZSgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZldmVudC0+Z3JvdXBfZW50cnksICZjdHgtPmdyb3VwX2xpc3QpOwotCQlicmVhazsKLQl9Ci0JcGVyZl9lbmFibGUoKTsKKworCS8qIFJvdGF0ZSB0aGUgZmlyc3QgZW50cnkgbGFzdCBvZiBub24tcGlubmVkIGdyb3VwcyAqLworCWxpc3Rfcm90YXRlX2xlZnQoJmN0eC0+ZmxleGlibGVfZ3JvdXBzKTsKIAogCXJhd19zcGluX3VubG9jaygmY3R4LT5sb2NrKTsKIH0KIAotdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBjcHUpCit2b2lkIHBlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKIHsKIAlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKQEAgLTE0NjksMjQgKzE1OTQsNDMgQEAKIAlpZiAoIWF0b21pY19yZWFkKCZucl9ldmVudHMpKQogCQlyZXR1cm47CiAKLQljcHVjdHggPSAmcGVyX2NwdShwZXJmX2NwdV9jb250ZXh0LCBjcHUpOworCWNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCWN0eCA9IGN1cnItPnBlcmZfZXZlbnRfY3R4cDsKIAorCXBlcmZfZGlzYWJsZSgpOworCiAJcGVyZl9jdHhfYWRqdXN0X2ZyZXEoJmNwdWN0eC0+Y3R4KTsKIAlpZiAoY3R4KQogCQlwZXJmX2N0eF9hZGp1c3RfZnJlcShjdHgpOwogCi0JcGVyZl9ldmVudF9jcHVfc2NoZWRfb3V0KGNwdWN0eCk7CisJY3B1X2N0eF9zY2hlZF9vdXQoY3B1Y3R4LCBFVkVOVF9GTEVYSUJMRSk7CiAJaWYgKGN0eCkKLQkJX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KGN0eCk7CisJCXRhc2tfY3R4X3NjaGVkX291dChjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKIAogCXJvdGF0ZV9jdHgoJmNwdWN0eC0+Y3R4KTsKIAlpZiAoY3R4KQogCQlyb3RhdGVfY3R4KGN0eCk7CiAKLQlwZXJmX2V2ZW50X2NwdV9zY2hlZF9pbihjcHVjdHgsIGNwdSk7CisJY3B1X2N0eF9zY2hlZF9pbihjcHVjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKIAlpZiAoY3R4KQotCQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oY3VyciwgY3B1KTsKKwkJdGFza19jdHhfc2NoZWRfaW4oY3VyciwgRVZFTlRfRkxFWElCTEUpOworCisJcGVyZl9lbmFibGUoKTsKK30KKworc3RhdGljIGludCBldmVudF9lbmFibGVfb25fZXhlYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQoreworCWlmICghZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMpCisJCXJldHVybiAwOworCisJZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMgPSAwOworCWlmIChldmVudC0+c3RhdGUgPj0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKKwkJcmV0dXJuIDA7CisKKwlfX3BlcmZfZXZlbnRfbWFya19lbmFibGVkKGV2ZW50LCBjdHgpOworCisJcmV0dXJuIDE7CiB9CiAKIC8qCkBAIC0xNDk5LDYgKzE2NDMsNyBAQAogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlbmFibGVkID0gMDsKKwlpbnQgcmV0OwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKQEAgLTE1MDksMTQgKzE2NTQsMTYgQEAKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewotCQlpZiAoIWV2ZW50LT5hdHRyLmVuYWJsZV9vbl9leGVjKQotCQkJY29udGludWU7Ci0JCWV2ZW50LT5hdHRyLmVuYWJsZV9vbl9leGVjID0gMDsKLQkJaWYgKGV2ZW50LT5zdGF0ZSA+PSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQotCQkJY29udGludWU7Ci0JCV9fcGVyZl9ldmVudF9tYXJrX2VuYWJsZWQoZXZlbnQsIGN0eCk7Ci0JCWVuYWJsZWQgPSAxOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCXJldCA9IGV2ZW50X2VuYWJsZV9vbl9leGVjKGV2ZW50LCBjdHgpOworCQlpZiAocmV0KQorCQkJZW5hYmxlZCA9IDE7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+ZmxleGlibGVfZ3JvdXBzLCBncm91cF9lbnRyeSkgeworCQlyZXQgPSBldmVudF9lbmFibGVfb25fZXhlYyhldmVudCwgY3R4KTsKKwkJaWYgKHJldCkKKwkJCWVuYWJsZWQgPSAxOwogCX0KIAogCS8qCkBAIC0xNTI3LDcgKzE2NzQsNyBAQAogCiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogCi0JcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHRhc2ssIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHRhc2spOwogIG91dDoKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0xNTkwLDcgKzE3MzcsOCBAQAogewogCXJhd19zcGluX2xvY2tfaW5pdCgmY3R4LT5sb2NrKTsKIAltdXRleF9pbml0KCZjdHgtPm11dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY3R4LT5ncm91cF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5waW5uZWRfZ3JvdXBzKTsKKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5mbGV4aWJsZV9ncm91cHMpOwogCUlOSVRfTElTVF9IRUFEKCZjdHgtPmV2ZW50X2xpc3QpOwogCWF0b21pY19zZXQoJmN0eC0+cmVmY291bnQsIDEpOwogCWN0eC0+dGFzayA9IHRhc2s7CkBAIC0zNjA4LDcgKzM3NTYsNyBAQAogCQkJLyogLnRpZCAqLwogCQkJLnN0YXJ0ICA9IHZtYS0+dm1fc3RhcnQsCiAJCQkubGVuICAgID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJLnBnb2ZmICA9IHZtYS0+dm1fcGdvZmYsCisJCQkucGdvZmYgID0gKHU2NCl2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQsCiAJCX0sCiAJfTsKIApAQCAtMzY4OCwxMiArMzgzNiwxMiBAQAogCiAJaWYgKGV2ZW50LT5hdHRyLmZyZXEpIHsKIAkJdTY0IG5vdyA9IHBlcmZfY2xvY2soKTsKLQkJczY0IGRlbHRhID0gbm93IC0gaHdjLT5mcmVxX3N0YW1wOworCQlzNjQgZGVsdGEgPSBub3cgLSBod2MtPmZyZXFfdGltZV9zdGFtcDsKIAotCQlod2MtPmZyZXFfc3RhbXAgPSBub3c7CisJCWh3Yy0+ZnJlcV90aW1lX3N0YW1wID0gbm93OwogCi0JCWlmIChkZWx0YSA+IDAgJiYgZGVsdGEgPCBUSUNLX05TRUMpCi0JCQlwZXJmX2FkanVzdF9wZXJpb2QoZXZlbnQsIE5TRUNfUEVSX1NFQyAvIChpbnQpZGVsdGEpOworCQlpZiAoZGVsdGEgPiAwICYmIGRlbHRhIDwgMipUSUNLX05TRUMpCisJCQlwZXJmX2FkanVzdF9wZXJpb2QoZXZlbnQsIGRlbHRhLCBod2MtPmxhc3RfcGVyaW9kKTsKIAl9CiAKIAkvKgpAQCAtNDE4NCw3ICs0MzMyLDcgQEAKIAkucmVhZAkJPSB0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfcmVhZCwKIH07CiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HCiAKIHZvaWQgcGVyZl90cF9ldmVudChpbnQgZXZlbnRfaWQsIHU2NCBhZGRyLCB1NjQgY291bnQsIHZvaWQgKnJlY29yZCwKIAkJCSAgaW50IGVudHJ5X3NpemUpCkBAIC00Mjg5LDcgKzQ0MzcsNyBAQAogewogfQogCi0jZW5kaWYgLyogQ09ORklHX0VWRU5UX1BST0ZJTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfRVZFTlRfVFJBQ0lORyAqLwogCiAjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAogc3RhdGljIHZvaWQgYnBfcGVyZl9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKQEAgLTQ4NzAsOCArNTAxOCwxNSBAQAogCWVsc2UKIAkJY2hpbGRfZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9PRkY7CiAKLQlpZiAocGFyZW50X2V2ZW50LT5hdHRyLmZyZXEpCi0JCWNoaWxkX2V2ZW50LT5ody5zYW1wbGVfcGVyaW9kID0gcGFyZW50X2V2ZW50LT5ody5zYW1wbGVfcGVyaW9kOworCWlmIChwYXJlbnRfZXZlbnQtPmF0dHIuZnJlcSkgeworCQl1NjQgc2FtcGxlX3BlcmlvZCA9IHBhcmVudF9ldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKKwkJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZjaGlsZF9ldmVudC0+aHc7CisKKwkJaHdjLT5zYW1wbGVfcGVyaW9kID0gc2FtcGxlX3BlcmlvZDsKKwkJaHdjLT5sYXN0X3BlcmlvZCAgID0gc2FtcGxlX3BlcmlvZDsKKworCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIHNhbXBsZV9wZXJpb2QpOworCX0KIAogCWNoaWxkX2V2ZW50LT5vdmVyZmxvd19oYW5kbGVyID0gcGFyZW50X2V2ZW50LT5vdmVyZmxvd19oYW5kbGVyOwogCkBAIC01MDM5LDcgKzUxOTQsMTEgQEAKIAltdXRleF9sb2NrX25lc3RlZCgmY2hpbGRfY3R4LT5tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiBhZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+Z3JvdXBfbGlzdCwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+cGlubmVkX2dyb3VwcywKKwkJCQkgZ3JvdXBfZW50cnkpCisJCV9fcGVyZl9ldmVudF9leGl0X3Rhc2soY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCwgY2hpbGQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNoaWxkX2V2ZW50LCB0bXAsICZjaGlsZF9jdHgtPmZsZXhpYmxlX2dyb3VwcywKIAkJCQkgZ3JvdXBfZW50cnkpCiAJCV9fcGVyZl9ldmVudF9leGl0X3Rhc2soY2hpbGRfZXZlbnQsIGNoaWxkX2N0eCwgY2hpbGQpOwogCkBAIC01MDQ4LDcgKzUyMDcsOCBAQAogCSAqIGl0cyBzaWJsaW5ncyB0byB0aGUgbGlzdCwgYnV0IHdlIG9idGFpbmVkICd0bXAnIGJlZm9yZSB0aGF0IHdoaWNoCiAJICogd2lsbCBzdGlsbCBwb2ludCB0byB0aGUgbGlzdCBoZWFkIHRlcm1pbmF0aW5nIHRoZSBpdGVyYXRpb24uCiAJICovCi0JaWYgKCFsaXN0X2VtcHR5KCZjaGlsZF9jdHgtPmdyb3VwX2xpc3QpKQorCWlmICghbGlzdF9lbXB0eSgmY2hpbGRfY3R4LT5waW5uZWRfZ3JvdXBzKSB8fAorCSAgICAhbGlzdF9lbXB0eSgmY2hpbGRfY3R4LT5mbGV4aWJsZV9ncm91cHMpKQogCQlnb3RvIGFnYWluOwogCiAJbXV0ZXhfdW5sb2NrKCZjaGlsZF9jdHgtPm11dGV4KTsKQEAgLTUwNTYsNiArNTIxNiwyNCBAQAogCXB1dF9jdHgoY2hpbGRfY3R4KTsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9mcmVlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudCA9IGV2ZW50LT5wYXJlbnQ7CisKKwlpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnQpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKKwlsaXN0X2RlbF9pbml0KCZldmVudC0+Y2hpbGRfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKKworCWZwdXQocGFyZW50LT5maWxwKTsKKworCWxpc3RfZGVsX2V2ZW50KGV2ZW50LCBjdHgpOworCWZyZWVfZXZlbnQoZXZlbnQpOworfQorCiAvKgogICogZnJlZSBhbiB1bmV4cG9zZWQsIHVudXNlZCBjb250ZXh0IGFzIGNyZWF0ZWQgYnkgaW5oZXJpdGFuY2UgYnkKICAqIGluaXRfdGFzayBiZWxvdywgdXNlZCBieSBmb3JrKCkgaW4gY2FzZSBvZiBmYWlsLgpAQCAtNTA3MCwyMyArNTI0OCwxNSBAQAogCiAJbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7CiBhZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIHRtcCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJc3RydWN0IHBlcmZfZXZlbnQgKnBhcmVudCA9IGV2ZW50LT5wYXJlbnQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KQorCQlwZXJmX2ZyZWVfZXZlbnQoZXZlbnQsIGN0eCk7CiAKLQkJaWYgKFdBUk5fT05fT05DRSghcGFyZW50KSkKLQkJCWNvbnRpbnVlOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsCisJCQkJIGdyb3VwX2VudHJ5KQorCQlwZXJmX2ZyZWVfZXZlbnQoZXZlbnQsIGN0eCk7CiAKLQkJbXV0ZXhfbG9jaygmcGFyZW50LT5jaGlsZF9tdXRleCk7Ci0JCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5jaGlsZF9saXN0KTsKLQkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKLQotCQlmcHV0KHBhcmVudC0+ZmlscCk7Ci0KLQkJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7Ci0JCWZyZWVfZXZlbnQoZXZlbnQpOwotCX0KLQotCWlmICghbGlzdF9lbXB0eSgmY3R4LT5ncm91cF9saXN0KSkKKwlpZiAoIWxpc3RfZW1wdHkoJmN0eC0+cGlubmVkX2dyb3VwcykgfHwKKwkgICAgIWxpc3RfZW1wdHkoJmN0eC0+ZmxleGlibGVfZ3JvdXBzKSkKIAkJZ290byBhZ2FpbjsKIAogCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7CkBAIC01MDk0LDEyICs1MjY0LDU0IEBACiAJcHV0X2N0eChjdHgpOwogfQogCitzdGF0aWMgaW50Citpbmhlcml0X3Rhc2tfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwKKwkJICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqcGFyZW50X2N0eCwKKwkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJICAgaW50ICppbmhlcml0ZWRfYWxsKQoreworCWludCByZXQ7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4ID0gY2hpbGQtPnBlcmZfZXZlbnRfY3R4cDsKKworCWlmICghZXZlbnQtPmF0dHIuaW5oZXJpdCkgeworCQkqaW5oZXJpdGVkX2FsbCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICghY2hpbGRfY3R4KSB7CisJCS8qCisJCSAqIFRoaXMgaXMgZXhlY3V0ZWQgZnJvbSB0aGUgcGFyZW50IHRhc2sgY29udGV4dCwgc28KKwkJICogaW5oZXJpdCBldmVudHMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciBjbG9uaW5nLgorCQkgKiBGaXJzdCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNvbnRleHQgZm9yIHRoZQorCQkgKiBjaGlsZC4KKwkJICovCisKKwkJY2hpbGRfY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCksCisJCQkJICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaWxkX2N0eCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoY2hpbGRfY3R4LCBjaGlsZCk7CisJCWNoaWxkLT5wZXJmX2V2ZW50X2N0eHAgPSBjaGlsZF9jdHg7CisJCWdldF90YXNrX3N0cnVjdChjaGlsZCk7CisJfQorCisJcmV0ID0gaW5oZXJpdF9ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LAorCQkJICAgIGNoaWxkLCBjaGlsZF9jdHgpOworCisJaWYgKHJldCkKKwkJKmluaGVyaXRlZF9hbGwgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgcGVyZl9ldmVudCBjb250ZXh0IGluIHRhc2tfc3RydWN0CiAgKi8KIGludCBwZXJmX2V2ZW50X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eCA9IE5VTEwsICpwYXJlbnRfY3R4OworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmNoaWxkX2N0eCwgKnBhcmVudF9jdHg7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2xvbmVkX2N0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQgPSBjdXJyZW50OwpAQCAtNTEzNyw0MSArNTM0OSwyMiBAQAogCSAqIFdlIGRvbnQgaGF2ZSB0byBkaXNhYmxlIE5NSXMgLSB3ZSBhcmUgb25seSBsb29raW5nIGF0CiAJICogdGhlIGxpc3QsIG5vdCBtYW5pcHVsYXRpbmcgaXQ6CiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0KLQkJaWYgKCFldmVudC0+YXR0ci5pbmhlcml0KSB7Ci0JCQlpbmhlcml0ZWRfYWxsID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFjaGlsZC0+cGVyZl9ldmVudF9jdHhwKSB7Ci0JCQkvKgotCQkJICogVGhpcyBpcyBleGVjdXRlZCBmcm9tIHRoZSBwYXJlbnQgdGFzayBjb250ZXh0LCBzbwotCQkJICogaW5oZXJpdCBldmVudHMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciBjbG9uaW5nLgotCQkJICogRmlyc3QgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBjb250ZXh0IGZvciB0aGUKLQkJCSAqIGNoaWxkLgotCQkJICovCi0KLQkJCWNoaWxkX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQpLAotCQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWNoaWxkX2N0eCkgewotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoY2hpbGRfY3R4LCBjaGlsZCk7Ci0JCQljaGlsZC0+cGVyZl9ldmVudF9jdHhwID0gY2hpbGRfY3R4OwotCQkJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKLQkJfQotCi0JCXJldCA9IGluaGVyaXRfZ3JvdXAoZXZlbnQsIHBhcmVudCwgcGFyZW50X2N0eCwKLQkJCQkJICAgICBjaGlsZCwgY2hpbGRfY3R4KTsKLQkJaWYgKHJldCkgewotCQkJaW5oZXJpdGVkX2FsbCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCXJldCA9IGluaGVyaXRfdGFza19ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LCBjaGlsZCwKKwkJCQkJICZpbmhlcml0ZWRfYWxsKTsKKwkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQl9CiAJfQogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPmZsZXhpYmxlX2dyb3VwcywgZ3JvdXBfZW50cnkpIHsKKwkJcmV0ID0gaW5oZXJpdF90YXNrX2dyb3VwKGV2ZW50LCBwYXJlbnQsIHBhcmVudF9jdHgsIGNoaWxkLAorCQkJCQkgJmluaGVyaXRlZF9hbGwpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJY2hpbGRfY3R4ID0gY2hpbGQtPnBlcmZfZXZlbnRfY3R4cDsKKwogCWlmIChjaGlsZF9jdHggJiYgaW5oZXJpdGVkX2FsbCkgewogCQkvKgogCQkgKiBNYXJrIHRoZSBjaGlsZCBjb250ZXh0IGFzIGEgY2xvbmUgb2YgdGhlIHBhcmVudApAQCAtNTIyMCw3ICs1NDEzLDkgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSAmY3B1Y3R4LT5jdHg7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqdG1wOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5waW5uZWRfZ3JvdXBzLCBncm91cF9lbnRyeSkKKwkJX19wZXJmX2V2ZW50X3JlbW92ZV9mcm9tX2NvbnRleHQoZXZlbnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsIGdyb3VwX2VudHJ5KQogCQlfX3BlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dChldmVudCk7CiB9CiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X2V4aXRfY3B1KGludCBjcHUpCkBAIC01MjU4LDYgKzU0NTMsMTAgQEAKIAkJcGVyZl9ldmVudF9leGl0X2NwdShjcHUpOwogCQlicmVhazsKIAorCWNhc2UgQ1BVX0RFQUQ6CisJCWh3X3BlcmZfZXZlbnRfc2V0dXBfb2ZmbGluZShjcHUpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCAyZTE3YzljLi5iMDhlNjk3IDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0zNjcsNyArMzY3LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlc3VsdCA9IE5VTEw7CiAJaWYgKHBpZCkgewogCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZmlyc3Q7Ci0JCWZpcnN0ID0gcmN1X2RlcmVmZXJlbmNlKHBpZC0+dGFza3NbdHlwZV0uZmlyc3QpOworCQlmaXJzdCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhwaWQtPnRhc2tzW3R5cGVdLmZpcnN0LCByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fCBsb2NrZGVwX2lzX2hlbGQoJnRhc2tsaXN0X2xvY2spKTsKIAkJaWYgKGZpcnN0KQogCQkJcmVzdWx0ID0gaGxpc3RfZW50cnkoZmlyc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcGlkc1sodHlwZSldLm5vZGUpOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwppbmRleCA0OTU0NDA3Li4wMGQxZmRhIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHBvc2l4X2dldF9jb2Fyc2VfcmVzKGNvbnN0IGNsb2NraWRfdCB3aGljaF9jbG9jaywgc3RydWN0IHRpbWVzcGVjICp0cCkKK3N0YXRpYyBpbnQgcG9zaXhfZ2V0X2NvYXJzZV9yZXMoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQogewogCSp0cCA9IGt0aW1lX3RvX3RpbWVzcGVjKEtUSU1FX0xPV19SRVMpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCA5MWUwOWQzLi41YzM2ZWE5IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtMjcsNiArMjcsMTUgQEAKIAljb2RlLiBUaGlzIGlzIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgYW5kIHJlcG9ydGluZyBQTSBidWdzLCBsaWtlCiAJc3VzcGVuZCBzdXBwb3J0LgogCitjb25maWcgUE1fQURWQU5DRURfREVCVUcKKwlib29sICJFeHRyYSBQTSBhdHRyaWJ1dGVzIGluIHN5c2ZzIGZvciBsb3ctbGV2ZWwgZGVidWdnaW5nL3Rlc3RpbmciCisJZGVwZW5kcyBvbiBQTV9ERUJVRworCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwlBZGQgZXh0cmEgc3lzZnMgYXR0cmlidXRlcyBhbGxvd2luZyBvbmUgdG8gYWNjZXNzIHNvbWUgUG93ZXIgTWFuYWdlbWVudAorCWZpZWxkcyBvZiBkZXZpY2Ugb2JqZWN0cyBmcm9tIHVzZXIgc3BhY2UuICBJZiB5b3UgYXJlIG5vdCBhIGtlcm5lbAorCWRldmVsb3BlciBpbnRlcmVzdGVkIGluIGRlYnVnZ2luZy90ZXN0aW5nIFBvd2VyIE1hbmFnZW1lbnQsIHNheSAibm8iLgorCiBjb25maWcgUE1fVkVSQk9TRQogCWJvb2wgIlZlcmJvc2UgUG93ZXIgTWFuYWdlbWVudCBkZWJ1Z2dpbmciCiAJZGVwZW5kcyBvbiBQTV9ERUJVRwpAQCAtODUsNiArOTQsMTEgQEAKIAlkZXBlbmRzIG9uIFNVU1BFTkQgfHwgSElCRVJOQVRJT04gfHwgWEVOX1NBVkVfUkVTVE9SRQogCWRlZmF1bHQgeQogCitjb25maWcgUE1fU0xFRVBfQURWQU5DRURfREVCVUcKKwlib29sCisJZGVwZW5kcyBvbiBQTV9BRFZBTkNFRF9ERUJVRworCWRlZmF1bHQgbgorCiBjb25maWcgU1VTUEVORAogCWJvb2wgIlN1c3BlbmQgdG8gUkFNIGFuZCBzdGFuZGJ5IgogCWRlcGVuZHMgb24gUE0gJiYgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCkBAIC0yMjIsMyArMjM2LDggQEAKIAkgIGFuZCB0aGUgYnVzIHR5cGUgZHJpdmVycyBvZiB0aGUgYnVzZXMgdGhlIGRldmljZXMgYXJlIG9uIGFyZQogCSAgcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgaGFuZGxpbmcgb2YgdGhlIGF1dG9zdXNwZW5kIHJlcXVlc3RzIGFuZAogCSAgd2FrZS11cCBldmVudHMuCisKK2NvbmZpZyBQTV9PUFMKKwlib29sCisJZGVwZW5kcyBvbiBQTV9TTEVFUCB8fCBQTV9SVU5USU1FCisJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCAwOTk4YzcxLi5iNTg4MDBiIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTQ0LDYgKzQ0LDMyIEBACiAJCQk9PSBOT1RJRllfQkFEKSA/IC1FSU5WQUwgOiAwOwogfQogCisvKiBJZiBzZXQsIGRldmljZXMgbWF5IGJlIHN1c3BlbmRlZCBhbmQgcmVzdW1lZCBhc3luY2hyb25vdXNseS4gKi8KK2ludCBwbV9hc3luY19lbmFibGVkID0gMTsKKworc3RhdGljIHNzaXplX3QgcG1fYXN5bmNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBtX2FzeW5jX2VuYWJsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBwbV9hc3luY19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbV9hc3luY19lbmFibGVkID0gdmFsOworCXJldHVybiBuOworfQorCitwb3dlcl9hdHRyKHBtX2FzeW5jKTsKKwogI2lmZGVmIENPTkZJR19QTV9ERUJVRwogaW50IHBtX3Rlc3RfbGV2ZWwgPSBURVNUX05PTkU7CiAKQEAgLTIwOCw5ICsyMzQsMTIgQEAKICNpZmRlZiBDT05GSUdfUE1fVFJBQ0UKIAkmcG1fdHJhY2VfYXR0ci5hdHRyLAogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfUE1fU0xFRVApICYmIGRlZmluZWQoQ09ORklHX1BNX0RFQlVHKQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorCSZwbV9hc3luY19hdHRyLmF0dHIsCisjaWZkZWYgQ09ORklHX1BNX0RFQlVHCiAJJnBtX3Rlc3RfYXR0ci5hdHRyLAogI2VuZGlmCisjZW5kaWYKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCAzNmNiMTY4Li44MzBjYWRlIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtMTE4MSw3ICsxMTgxLDcgQEAKIAogCW1lbW9yeV9ibV9wb3NpdGlvbl9yZXNldCgmY29weV9ibSk7CiAKLQl3aGlsZSAodG9fZnJlZV9ub3JtYWwgPiAwICYmIHRvX2ZyZWVfaGlnaG1lbSA+IDApIHsKKwl3aGlsZSAodG9fZnJlZV9ub3JtYWwgPiAwIHx8IHRvX2ZyZWVfaGlnaG1lbSA+IDApIHsKIAkJdW5zaWduZWQgbG9uZyBwZm4gPSBtZW1vcnlfYm1fbmV4dF9wZm4oJmNvcHlfYm0pOwogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAKQEAgLTE1MDAsNyArMTUwMCw3IEBACiB7CiAJdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBucl9oaWdobWVtOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUE06IENyZWF0aW5nIGhpYmVybmF0aW9uIGltYWdlOiBcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlBNOiBDcmVhdGluZyBoaWJlcm5hdGlvbiBpbWFnZTpcbiIpOwogCiAJZHJhaW5fbG9jYWxfcGFnZXMoTlVMTCk7CiAJbnJfcGFnZXMgPSBjb3VudF9kYXRhX3BhZ2VzKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dhcC5jIGIva2VybmVsL3Bvd2VyL3N3YXAuYwppbmRleCAwOWIyYjBhLi4xZDU3NTczIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dhcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKQEAgLTY1NywxMCArNjU3LDYgQEAKIAlzdHJ1Y3Qgc3dzdXNwX2luZm8gKmhlYWRlcjsKIAogCSpmbGFnc19wID0gc3dzdXNwX2hlYWRlci0+ZmxhZ3M7Ci0JaWYgKElTX0VSUihyZXN1bWVfYmRldikpIHsKLQkJcHJfZGVidWcoIlBNOiBJbWFnZSBkZXZpY2Ugbm90IGluaXRpYWxpc2VkXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIocmVzdW1lX2JkZXYpOwotCX0KIAogCW1lbXNldCgmc25hcHNob3QsIDAsIHNpemVvZihzdHJ1Y3Qgc25hcHNob3RfaGFuZGxlKSk7CiAJZXJyb3IgPSBzbmFwc2hvdF93cml0ZV9uZXh0KCZzbmFwc2hvdCwgUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYyBiL2tlcm5lbC9wb3dlci9zd3N1c3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIzNjAxYi4uMDAwMDAwMAotLS0gYS9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogbGludXgva2VybmVsL3Bvd2VyL3N3c3VzcC5jCi0gKgotICogVGhpcyBmaWxlIHByb3ZpZGVzIGNvZGUgdG8gd3JpdGUgc3VzcGVuZCBpbWFnZSB0byBzd2FwIGFuZCByZWFkIGl0IGJhY2suCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDEgR2Fib3IgS3V0aSA8c2Vhc29uc0Bmb3JuYXguaHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTgsMjAwMS0yMDA1IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgotICoKLSAqIEknZCBsaWtlIHRvIHRoYW5rIHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciB3b3JrOgotICoKLSAqIFBhdmVsIE1hY2hlayA8cGF2ZWxAdWN3LmN6PjoKLSAqIE1vZGlmaWNhdGlvbnMsIGRlZmVjdGl2ZW5lc3MgcG9pbnRpbmcsIGJlaW5nIHdpdGggbWUgYXQgdGhlIHZlcnkgYmVnaW5uaW5nLAotICogc3VzcGVuZCB0byBzd2FwIHNwYWNlLCBzdG9wIGFsbCB0YXNrcy4gUG9ydCB0byAyLjQuMTgtYWMgYW5kIDIuNS4xNy4KLSAqCi0gKiBTdGV2ZSBEb2RkaSA8ZGlya0Bsb3RoLmRlbW9uLmNvLnVrPjoKLSAqIFN1cHBvcnQgdGhlIHBvc3NpYmlsaXR5IG9mIGhhcmR3YXJlIHN0YXRlIHJlc3RvcmluZy4KLSAqCi0gKiBSYXBoIDxncmV5LmhhdmVuc0BlYXJ0aGxpbmcubmV0PjoKLSAqIFN1cHBvcnQgZm9yIHByZXNlcnZpbmcgc3RhdGVzIG9mIG5ldHdvcmsgZGV2aWNlcyBhbmQgdmlydHVhbCBjb25zb2xlCi0gKiAoaW5jbHVkaW5nIFggYW5kIHN2Z2F0ZXh0bW9kZSkKLSAqCi0gKiBLdXJ0IEdhcmxvZmYgPGdhcmxvZmZAc3VzZS5kZT46Ci0gKiBTdHJhaWdodGVuZWQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGluIG9yZGVyIHRvIHByZXZlbnQgY29tcGlsZXJzIGZyb20KLSAqIHBsYXlpbmcgdHJpY2tzIHdpdGggbG9jYWwgdmFyaWFibGVzLgotICoKLSAqIEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KLSAqCi0gKiBBbGV4IEJhZGVhIDx2YW1waXJlQGdvLnJvPjoKLSAqIEZpeGVkIHJ1bmF3YXkgaW5pdAotICoKLSAqIFJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KLSAqIFJld29ya2VkIHRoZSBmcmVlaW5nIG9mIG1lbW9yeSBhbmQgdGhlIGhhbmRsaW5nIG9mIHN3YXAKLSAqCi0gKiBNb3JlIHN0YXRlIHNhdmVycyBhcmUgd2VsY29tZS4gRXNwZWNpYWxseSBmb3IgdGhlIHNjc2kgbGF5ZXIuLi4KLSAqCi0gKiBGb3IgVE9ET3MsRklYTUVzIGFsc28gbG9vayBpbiBEb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC50eHQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJwb3dlci5oIgotCi1pbnQgaW5fc3VzcGVuZCBfX25vc2F2ZWRhdGEgPSAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3VzZXIuYyBiL2tlcm5lbC9wb3dlci91c2VyLmMKaW5kZXggYmYwMDE0ZC4uNGQyMjg5NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3VzZXIuYworKysgYi9rZXJuZWwvcG93ZXIvdXNlci5jCkBAIC0xOTUsNiArMTk1LDE1IEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIHZvaWQgc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kKQoreworCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX05PVElDRSAiJXBmOiBpb2N0bCAnJS44eCcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCAiCisJCQkJImJlIHJlbW92ZWQgc29vbiwgdXBkYXRlIHlvdXIgc3VzcGVuZC10by1kaXNrICIKKwkJCQkidXRpbGl0aWVzXG4iLAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgY21kKTsKK30KKwogc3RhdGljIGxvbmcgc25hcHNob3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0yNDYsOCArMjU1LDkgQEAKIAkJZGF0YS0+ZnJvemVuID0gMDsKIAkJYnJlYWs7CiAKLQljYXNlIFNOQVBTSE9UX0NSRUFURV9JTUFHRToKIAljYXNlIFNOQVBTSE9UX0FUT01JQ19TTkFQU0hPVDoKKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOworCWNhc2UgU05BUFNIT1RfQ1JFQVRFX0lNQUdFOgogCQlpZiAoZGF0YS0+bW9kZSAhPSBPX1JET05MWSB8fCAhZGF0YS0+ZnJvemVuICB8fCBkYXRhLT5yZWFkeSkgewogCQkJZXJyb3IgPSAtRVBFUk07CiAJCQlicmVhazsKQEAgLTI3NSw4ICsyODUsOSBAQAogCQlkYXRhLT5yZWFkeSA9IDA7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkFQU0hPVF9QUkVGX0lNQUdFX1NJWkU6CiAJY2FzZSBTTkFQU0hPVF9TRVRfSU1BR0VfU0laRToKKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOworCWNhc2UgU05BUFNIT1RfUFJFRl9JTUFHRV9TSVpFOgogCQlpbWFnZV9zaXplID0gYXJnOwogCQlicmVhazsKIApAQCAtMjkwLDE1ICszMDEsMTcgQEAKIAkJZXJyb3IgPSBwdXRfdXNlcihzaXplLCAobG9mZl90IF9fdXNlciAqKWFyZyk7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkU6CiAJY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQOgorCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CisJY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQX1NJWkU6CiAJCXNpemUgPSBjb3VudF9zd2FwX3BhZ2VzKGRhdGEtPnN3YXAsIDEpOwogCQlzaXplIDw8PSBQQUdFX1NISUZUOwogCQllcnJvciA9IHB1dF91c2VyKHNpemUsIChsb2ZmX3QgX191c2VyICopYXJnKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRToKIAljYXNlIFNOQVBTSE9UX0dFVF9TV0FQX1BBR0U6CisJCXNuYXBzaG90X2RlcHJlY2F0ZWRfaW9jdGwoY21kKTsKKwljYXNlIFNOQVBTSE9UX0FMTE9DX1NXQVBfUEFHRToKIAkJaWYgKGRhdGEtPnN3YXAgPCAwIHx8IGRhdGEtPnN3YXAgPj0gTUFYX1NXQVBGSUxFUykgewogCQkJZXJyb3IgPSAtRU5PREVWOwogCQkJYnJlYWs7CkBAIC0zMjEsNiArMzM0LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNOQVBTSE9UX1NFVF9TV0FQX0ZJTEU6IC8qIFRoaXMgaW9jdGwgaXMgZGVwcmVjYXRlZCAqLworCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CiAJCWlmICghc3dzdXNwX3N3YXBfaW5fdXNlKCkpIHsKIAkJCS8qCiAJCQkgKiBVc2VyIHNwYWNlIGVuY29kZXMgZGV2aWNlIHR5cGVzIGFzIHR3by1ieXRlIHZhbHVlcywKQEAgLTM2Miw2ICszNzYsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05BUFNIT1RfUE1PUFM6IC8qIFRoaXMgaW9jdGwgaXMgZGVwcmVjYXRlZCAqLworCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CiAJCWVycm9yID0gLUVJTlZBTDsKIAogCQlzd2l0Y2ggKGFyZykgewpkaWZmIC0tZ2l0IGEva2VybmVsL3B0cmFjZS5jIGIva2VybmVsL3B0cmFjZS5jCmluZGV4IDIzYmQwOWMuLjQyYWQ4YWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wdHJhY2UuYworKysgYi9rZXJuZWwvcHRyYWNlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CiAKIAogLyoKQEAgLTUxMSw2ICs1MTIsNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKgorZmluZF9yZWdzZXQoY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgKnZpZXcsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0OworCWludCBuOworCisJZm9yIChuID0gMDsgbiA8IHZpZXctPm47ICsrbikgeworCQlyZWdzZXQgPSB2aWV3LT5yZWdzZXRzICsgbjsKKwkJaWYgKHJlZ3NldC0+Y29yZV9ub3RlX3R5cGUgPT0gdHlwZSkKKwkJCXJldHVybiByZWdzZXQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcHRyYWNlX3JlZ3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCByZXEsIHVuc2lnbmVkIGludCB0eXBlLAorCQkJIHN0cnVjdCBpb3ZlYyAqa2lvdikKK3sKKwljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyAqdmlldyA9IHRhc2tfdXNlcl9yZWdzZXRfdmlldyh0YXNrKTsKKwljb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCA9IGZpbmRfcmVnc2V0KHZpZXcsIHR5cGUpOworCWludCByZWdzZXRfbm87CisKKwlpZiAoIXJlZ3NldCB8fCAoa2lvdi0+aW92X2xlbiAlIHJlZ3NldC0+c2l6ZSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWdzZXRfbm8gPSByZWdzZXQgLSB2aWV3LT5yZWdzZXRzOworCWtpb3YtPmlvdl9sZW4gPSBtaW4oa2lvdi0+aW92X2xlbiwKKwkJCSAgICAoX19rZXJuZWxfc2l6ZV90KSAocmVnc2V0LT5uICogcmVnc2V0LT5zaXplKSk7CisKKwlpZiAocmVxID09IFBUUkFDRV9HRVRSRUdTRVQpCisJCXJldHVybiBjb3B5X3JlZ3NldF90b191c2VyKHRhc2ssIHZpZXcsIHJlZ3NldF9ubywgMCwKKwkJCQkJICAga2lvdi0+aW92X2xlbiwga2lvdi0+aW92X2Jhc2UpOworCWVsc2UKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X2Zyb21fdXNlcih0YXNrLCB2aWV3LCByZWdzZXRfbm8sIDAsCisJCQkJCSAgICAga2lvdi0+aW92X2xlbiwga2lvdi0+aW92X2Jhc2UpOworfQorCisjZW5kaWYKKwogaW50IHB0cmFjZV9yZXF1ZXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwKIAkJICAgbG9uZyBhZGRyLCBsb25nIGRhdGEpCiB7CkBAIC01NzMsNiArNjE1LDI2IEBACiAJCQlyZXR1cm4gMDsKIAkJcmV0dXJuIHB0cmFjZV9yZXN1bWUoY2hpbGQsIHJlcXVlc3QsIFNJR0tJTEwpOwogCisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sKKwljYXNlIFBUUkFDRV9HRVRSRUdTRVQ6CisJY2FzZSBQVFJBQ0VfU0VUUkVHU0VUOgorCXsKKwkJc3RydWN0IGlvdmVjIGtpb3Y7CisJCXN0cnVjdCBpb3ZlYyBfX3VzZXIgKnVpb3YgPSAoc3RydWN0IGlvdmVjIF9fdXNlciAqKSBkYXRhOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWlvdiwgc2l6ZW9mKCp1aW92KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoX19nZXRfdXNlcihraW92Lmlvdl9iYXNlLCAmdWlvdi0+aW92X2Jhc2UpIHx8CisJCSAgICBfX2dldF91c2VyKGtpb3YuaW92X2xlbiwgJnVpb3YtPmlvdl9sZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0ID0gcHRyYWNlX3JlZ3NldChjaGlsZCwgcmVxdWVzdCwgYWRkciwgJmtpb3YpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IF9fcHV0X3VzZXIoa2lvdi5pb3ZfbGVuLCAmdWlvdi0+aW92X2xlbik7CisJCWJyZWFrOworCX0KKyNlbmRpZgogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTcxMSw2ICs3NzMsMzIgQEAKIAkJZWxzZQogCQkJcmV0ID0gcHRyYWNlX3NldHNpZ2luZm8oY2hpbGQsICZzaWdpbmZvKTsKIAkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sKKwljYXNlIFBUUkFDRV9HRVRSRUdTRVQ6CisJY2FzZSBQVFJBQ0VfU0VUUkVHU0VUOgorCXsKKwkJc3RydWN0IGlvdmVjIGtpb3Y7CisJCXN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp1aW92ID0KKwkJCShzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqKSBkYXRhcDsKKwkJY29tcGF0X3VwdHJfdCBwdHI7CisJCWNvbXBhdF9zaXplX3QgbGVuOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWlvdiwgc2l6ZW9mKCp1aW92KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoX19nZXRfdXNlcihwdHIsICZ1aW92LT5pb3ZfYmFzZSkgfHwKKwkJICAgIF9fZ2V0X3VzZXIobGVuLCAmdWlvdi0+aW92X2xlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlraW92Lmlvdl9iYXNlID0gY29tcGF0X3B0cihwdHIpOworCQlraW92Lmlvdl9sZW4gPSBsZW47CisKKwkJcmV0ID0gcHRyYWNlX3JlZ3NldChjaGlsZCwgcmVxdWVzdCwgYWRkciwgJmtpb3YpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IF9fcHV0X3VzZXIoa2lvdi5pb3ZfbGVuLCAmdWlvdi0+aW92X2xlbik7CisJCWJyZWFrOworCX0KKyNlbmRpZgogCiAJZGVmYXVsdDoKIAkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCA5YjdmZDQ3Li5mMTEyNWMxIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtNDQsMTQgKzQ0LDQzIEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X2xvY2tfa2V5Owogc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcCA9CiAJU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2siLCAmcmN1X2xvY2tfa2V5KTsKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9sb2NrX21hcCk7CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X2JoX2xvY2tfa2V5Oworc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9iaF9sb2NrX21hcCA9CisJU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2tfYmgiLCAmcmN1X2JoX2xvY2tfa2V5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iaF9sb2NrX21hcCk7CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X3NjaGVkX2xvY2tfa2V5Oworc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9zY2hlZF9sb2NrX21hcCA9CisJU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2tfc2NoZWQiLCAmcmN1X3NjaGVkX2xvY2tfa2V5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9zY2hlZF9sb2NrX21hcCk7CiAjZW5kaWYKIAoraW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChyY3Vfc2NoZWR1bGVyX2FjdGl2ZSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBzY2hlZHVsZXIncyBpbml0aWFsaXphdGlvbgorICogcHJvY2Vzcy4gIEJlZm9yZSB0aGlzIGlzIGNhbGxlZCwgdGhlIGlkbGUgdGFzayBtaWdodCBjb250YWluCisgKiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIChkdXJpbmcgd2hpY2ggdGltZSwgdGhpcyBpZGxlCisgKiB0YXNrIGlzIGJvb3RpbmcgdGhlIHN5c3RlbSkuICBBZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlCisgKiBpZGxlIHRhc2tzIGFyZSBwcm9oaWJpdGVkIGZyb20gY29udGFpbmluZyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCisgKiBzZWN0aW9ucy4KKyAqLwordm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCit7CisJV0FSTl9PTihudW1fb25saW5lX2NwdXMoKSAhPSAxKTsKKwlXQVJOX09OKG5yX2NvbnRleHRfc3dpdGNoZXMoKSA+IDApOworCXJjdV9zY2hlZHVsZXJfYWN0aXZlID0gMTsKK30KKwogLyoKICAqIEF3YWtlbiB0aGUgY29ycmVzcG9uZGluZyBzeW5jaHJvbml6ZV9yY3UoKSBpbnN0YW5jZSBub3cgdGhhdCBhCiAgKiBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdXRvcnR1cmUuYwppbmRleCA5YmI1MjE3Li4yNThjZGYwIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKQEAgLTYxLDYgKzYxLDkgQEAKIHN0YXRpYyBpbnQgc2h1ZmZsZV9pbnRlcnZhbCA9IDM7IC8qIEludGVydmFsIGJldHdlZW4gc2h1ZmZsZXMgKGluIHNlYykqLwogc3RhdGljIGludCBzdHV0dGVyID0gNTsJCS8qIFN0YXJ0L3N0b3AgdGVzdGluZyBpbnRlcnZhbCAoaW4gc2VjKSAqLwogc3RhdGljIGludCBpcnFyZWFkZXIgPSAxOwkvKiBSQ1UgcmVhZGVycyBmcm9tIGlycSAodGltZXJzKS4gKi8KK3N0YXRpYyBpbnQgZnFzX2R1cmF0aW9uID0gMDsJLyogRHVyYXRpb24gb2YgYnVyc3RzICh1cyksIDAgdG8gZGlzYWJsZS4gKi8KK3N0YXRpYyBpbnQgZnFzX2hvbGRvZmYgPSAwOwkvKiBIb2xkIHRpbWUgd2l0aGluIGJ1cnN0ICh1cykuICovCitzdGF0aWMgaW50IGZxc19zdHV0dGVyID0gMzsJLyogV2FpdCB0aW1lIGJldHdlZW4gYnVyc3RzIChzKS4gKi8KIHN0YXRpYyBjaGFyICp0b3J0dXJlX3R5cGUgPSAicmN1IjsgLyogV2hhdCBSQ1UgaW1wbGVtZW50YXRpb24gdG8gdG9ydHVyZS4gKi8KIAogbW9kdWxlX3BhcmFtKG5yZWFkZXJzLCBpbnQsIDA0NDQpOwpAQCAtNzksNiArODIsMTIgQEAKIE1PRFVMRV9QQVJNX0RFU0Moc3R1dHRlciwgIk51bWJlciBvZiBzZWNvbmRzIHRvIHJ1bi9oYWx0IHRlc3QiKTsKIG1vZHVsZV9wYXJhbShpcnFyZWFkZXIsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycXJlYWRlciwgIkFsbG93IFJDVSByZWFkZXJzIGZyb20gaXJxIGhhbmRsZXJzIik7Cittb2R1bGVfcGFyYW0oZnFzX2R1cmF0aW9uLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmcXNfZHVyYXRpb24sICJEdXJhdGlvbiBvZiBmcXMgYnVyc3RzICh1cykiKTsKK21vZHVsZV9wYXJhbShmcXNfaG9sZG9mZiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZnFzX2hvbGRvZmYsICJIb2xkb2ZmIHRpbWUgd2l0aGluIGZxcyBidXJzdHMgKHVzKSIpOworbW9kdWxlX3BhcmFtKGZxc19zdHV0dGVyLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmcXNfc3R1dHRlciwgIldhaXQgdGltZSBiZXR3ZWVuIGZxcyBidXJzdHMgKHMpIik7CiBtb2R1bGVfcGFyYW0odG9ydHVyZV90eXBlLCBjaGFycCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHRvcnR1cmVfdHlwZSwgIlR5cGUgb2YgUkNVIHRvIHRvcnR1cmUgKHJjdSwgcmN1X2JoLCBzcmN1KSIpOwogCkBAIC05OSw2ICsxMDgsNyBAQAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhdHNfdGFzazsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNodWZmbGVyX3Rhc2s7CiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzdHV0dGVyX3Rhc2s7CitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmcXNfdGFzazsKIAogI2RlZmluZSBSQ1VfVE9SVFVSRV9QSVBFX0xFTiAxMAogCkBAIC0yNjMsNiArMjczLDcgQEAKIAl2b2lkICgqZGVmZXJyZWRfZnJlZSkoc3RydWN0IHJjdV90b3J0dXJlICpwKTsKIAl2b2lkICgqc3luYykodm9pZCk7CiAJdm9pZCAoKmNiX2JhcnJpZXIpKHZvaWQpOworCXZvaWQgKCpmcXMpKHZvaWQpOwogCWludCAoKnN0YXRzKShjaGFyICpwYWdlKTsKIAlpbnQgaXJxX2NhcGFibGU7CiAJY2hhciAqbmFtZTsKQEAgLTM0Nyw2ICszNTgsNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzeW5jaHJvbml6ZV9yY3UsCiAJLmNiX2JhcnJpZXIJPSByY3VfYmFycmllciwKKwkuZnFzCQk9IHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAicmN1IgpAQCAtMzg4LDYgKzQwMCw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1LAogCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuZnFzCQk9IHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAicmN1X3N5bmMiCkBAIC00MDMsNiArNDE2LDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkLAogCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuZnFzCQk9IHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAicmN1X2V4cGVkaXRlZCIKQEAgLTQ2NSw2ICs0NzksNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X2JoX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSByY3VfYmhfdG9ydHVyZV9zeW5jaHJvbml6ZSwKIAkuY2JfYmFycmllcgk9IHJjdV9iYXJyaWVyX2JoLAorCS5mcXMJCT0gcmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gTlVMTCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJyY3VfYmgiCkBAIC00ODAsNiArNDk1LDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSByY3VfYmhfdG9ydHVyZV9zeW5jaHJvbml6ZSwKIAkuY2JfYmFycmllcgk9IE5VTEwsCisJLmZxcwkJPSByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInJjdV9iaF9zeW5jIgpAQCAtNjIxLDYgKzYzNyw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc2NoZWRfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHNjaGVkX3RvcnR1cmVfc3luY2hyb25pemUsCiAJLmNiX2JhcnJpZXIJPSByY3VfYmFycmllcl9zY2hlZCwKKwkuZnFzCQk9IHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAic2NoZWQiCkBAIC02MzYsNiArNjUzLDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzY2hlZF90b3J0dXJlX3N5bmNocm9uaXplLAogCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuZnFzCQk9IHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLm5hbWUJCT0gInNjaGVkX3N5bmMiCiB9OwpAQCAtNjUwLDEyICs2NjgsNDUgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQsCiAJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5mcXMJCT0gcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInNjaGVkX2V4cGVkaXRlZCIKIH07CiAKIC8qCisgKiBSQ1UgdG9ydHVyZSBmb3JjZS1xdWllc2NlbnQtc3RhdGUga3RocmVhZC4gIFJlcGVhdGVkbHkgaW5kdWNlcworICogYnVyc3RzIG9mIGNhbGxzIHRvIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpLCBpbmNyZWFzaW5nIHRoZSBwcm9iYWJpbGl0eQorICogb2Ygb2NjdXJyZW5jZSBvZiBzb21lIGltcG9ydGFudCB0eXBlcyBvZiByYWNlIGNvbmRpdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQKK3JjdV90b3J0dXJlX2Zxcyh2b2lkICphcmcpCit7CisJdW5zaWduZWQgbG9uZyBmcXNfcmVzdW1lX3RpbWU7CisJaW50IGZxc19idXJzdF9yZW1haW5pbmc7CisKKwlWRVJCT1NFX1BSSU5US19TVFJJTkcoInJjdV90b3J0dXJlX2ZxcyB0YXNrIHN0YXJ0ZWQiKTsKKwlkbyB7CisJCWZxc19yZXN1bWVfdGltZSA9IGppZmZpZXMgKyBmcXNfc3R1dHRlciAqIEhaOworCQl3aGlsZSAoamlmZmllcyAtIGZxc19yZXN1bWVfdGltZSA+IExPTkdfTUFYKSB7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7CisJCX0KKwkJZnFzX2J1cnN0X3JlbWFpbmluZyA9IGZxc19kdXJhdGlvbjsKKwkJd2hpbGUgKGZxc19idXJzdF9yZW1haW5pbmcgPiAwKSB7CisJCQljdXJfb3BzLT5mcXMoKTsKKwkJCXVkZWxheShmcXNfaG9sZG9mZik7CisJCQlmcXNfYnVyc3RfcmVtYWluaW5nIC09IGZxc19ob2xkb2ZmOworCQl9CisJCXJjdV9zdHV0dGVyX3dhaXQoInJjdV90b3J0dXJlX2ZxcyIpOworCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgZnVsbHN0b3AgPT0gRlVMTFNUT1BfRE9OVFNUT1ApOworCVZFUkJPU0VfUFJJTlRLX1NUUklORygicmN1X3RvcnR1cmVfZnFzIHRhc2sgc3RvcHBpbmciKTsKKwlyY3V0b3J0dXJlX3NodXRkb3duX2Fic29yYigicmN1X3RvcnR1cmVfZnFzIik7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCXJldHVybiAwOworfQorCisvKgogICogUkNVIHRvcnR1cmUgd3JpdGVyIGt0aHJlYWQuICBSZXBlYXRlZGx5IHN1YnN0aXR1dGVzIGEgbmV3IHN0cnVjdHVyZQogICogZm9yIHRoYXQgcG9pbnRlZCB0byBieSByY3VfdG9ydHVyZV9jdXJyZW50LCBmcmVlaW5nIHRoZSBvbGQgc3RydWN0dXJlCiAgKiBhZnRlciBhIHNlcmllcyBvZiBncmFjZSBwZXJpb2RzICh0aGUgInBpcGVsaW5lIikuCkBAIC03NDUsNyArNzk2LDExIEBACiAKIAlpZHggPSBjdXJfb3BzLT5yZWFkbG9jaygpOwogCWNvbXBsZXRlZCA9IGN1cl9vcHMtPmNvbXBsZXRlZCgpOwotCXAgPSByY3VfZGVyZWZlcmVuY2UocmN1X3RvcnR1cmVfY3VycmVudCk7CisJcCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyY3VfdG9ydHVyZV9jdXJyZW50LAorCQkJCSAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpIHx8CisJCQkJICByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQoKSB8fAorCQkJCSAgc3JjdV9yZWFkX2xvY2tfaGVsZCgmc3JjdV9jdGwpKTsKIAlpZiAocCA9PSBOVUxMKSB7CiAJCS8qIExlYXZlIGJlY2F1c2UgcmN1X3RvcnR1cmVfd3JpdGVyIGlzIG5vdCB5ZXQgdW5kZXJ3YXkgKi8KIAkJY3VyX29wcy0+cmVhZHVubG9jayhpZHgpOwpAQCAtNzk4LDExICs4NTMsMTUgQEAKIAlkbyB7CiAJCWlmIChpcnFyZWFkZXIgJiYgY3VyX29wcy0+aXJxX2NhcGFibGUpIHsKIAkJCWlmICghdGltZXJfcGVuZGluZygmdCkpCi0JCQkJbW9kX3RpbWVyKCZ0LCAxKTsKKwkJCQltb2RfdGltZXIoJnQsIGppZmZpZXMgKyAxKTsKIAkJfQogCQlpZHggPSBjdXJfb3BzLT5yZWFkbG9jaygpOwogCQljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKTsKLQkJcCA9IHJjdV9kZXJlZmVyZW5jZShyY3VfdG9ydHVyZV9jdXJyZW50KTsKKwkJcCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhyY3VfdG9ydHVyZV9jdXJyZW50LAorCQkJCQkgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJCSAgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkgfHwKKwkJCQkJICByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQoKSB8fAorCQkJCQkgIHNyY3VfcmVhZF9sb2NrX2hlbGQoJnNyY3VfY3RsKSk7CiAJCWlmIChwID09IE5VTEwpIHsKIAkJCS8qIFdhaXQgZm9yIHJjdV90b3J0dXJlX3dyaXRlciB0byBnZXQgdW5kZXJ3YXkgKi8KIAkJCWN1cl9vcHMtPnJlYWR1bmxvY2soaWR4KTsKQEAgLTEwMzAsMTAgKzEwODksMTEgQEAKIAlwcmludGsoS0VSTl9BTEVSVCAiJXMiIFRPUlRVUkVfRkxBRwogCQkiLS0tICVzOiBucmVhZGVycz0lZCBuZmFrZXdyaXRlcnM9JWQgIgogCQkic3RhdF9pbnRlcnZhbD0lZCB2ZXJib3NlPSVkIHRlc3Rfbm9faWRsZV9oej0lZCAiCi0JCSJzaHVmZmxlX2ludGVydmFsPSVkIHN0dXR0ZXI9JWQgaXJxcmVhZGVyPSVkXG4iLAorCQkic2h1ZmZsZV9pbnRlcnZhbD0lZCBzdHV0dGVyPSVkIGlycXJlYWRlcj0lZCAiCisJCSJmcXNfZHVyYXRpb249JWQgZnFzX2hvbGRvZmY9JWQgZnFzX3N0dXR0ZXI9JWRcbiIsCiAJCXRvcnR1cmVfdHlwZSwgdGFnLCBucmVhbHJlYWRlcnMsIG5mYWtld3JpdGVycywKIAkJc3RhdF9pbnRlcnZhbCwgdmVyYm9zZSwgdGVzdF9ub19pZGxlX2h6LCBzaHVmZmxlX2ludGVydmFsLAotCQlzdHV0dGVyLCBpcnFyZWFkZXIpOworCQlzdHV0dGVyLCBpcnFyZWFkZXIsIGZxc19kdXJhdGlvbiwgZnFzX2hvbGRvZmYsIGZxc19zdHV0dGVyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayByY3V0b3J0dXJlX25iID0gewpAQCAtMTEwOSw2ICsxMTY5LDEyIEBACiAJfQogCXN0YXRzX3Rhc2sgPSBOVUxMOwogCisJaWYgKGZxc190YXNrKSB7CisJCVZFUkJPU0VfUFJJTlRLX1NUUklORygiU3RvcHBpbmcgcmN1X3RvcnR1cmVfZnFzIHRhc2siKTsKKwkJa3RocmVhZF9zdG9wKGZxc190YXNrKTsKKwl9CisJZnFzX3Rhc2sgPSBOVUxMOworCiAJLyogV2FpdCBmb3IgYWxsIFJDVSBjYWxsYmFja3MgdG8gZmlyZS4gICovCiAKIAlpZiAoY3VyX29wcy0+Y2JfYmFycmllciAhPSBOVUxMKQpAQCAtMTE1NCw2ICsxMjIwLDExIEBACiAJCW11dGV4X3VubG9jaygmZnVsbHN0b3BfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKGN1cl9vcHMtPmZxcyA9PSBOVUxMICYmIGZxc19kdXJhdGlvbiAhPSAwKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJyY3UtdG9ydHVyZTogLT5mcXMgTlVMTCBhbmQgbm9uLXplcm8gIgorCQkJCSAgImZxc19kdXJhdGlvbiwgZnFzIGRpc2FibGVkLlxuIik7CisJCWZxc19kdXJhdGlvbiA9IDA7CisJfQogCWlmIChjdXJfb3BzLT5pbml0KQogCQljdXJfb3BzLT5pbml0KCk7IC8qIG5vICJnb3RvIHVud2luZCIgcHJpb3IgdG8gdGhpcyBwb2ludCEhISAqLwogCkBAIC0xMjgyLDYgKzEzNTMsMTkgQEAKIAkJCWdvdG8gdW53aW5kOwogCQl9CiAJfQorCWlmIChmcXNfZHVyYXRpb24gPCAwKQorCQlmcXNfZHVyYXRpb24gPSAwOworCWlmIChmcXNfZHVyYXRpb24pIHsKKwkJLyogQ3JlYXRlIHRoZSBzdHV0dGVyIHRocmVhZCAqLworCQlmcXNfdGFzayA9IGt0aHJlYWRfcnVuKHJjdV90b3J0dXJlX2ZxcywgTlVMTCwKKwkJCQkgICAgICAgInJjdV90b3J0dXJlX2ZxcyIpOworCQlpZiAoSVNfRVJSKGZxc190YXNrKSkgeworCQkJZmlyc3RlcnIgPSBQVFJfRVJSKGZxc190YXNrKTsKKwkJCVZFUkJPU0VfUFJJTlRLX0VSUlNUUklORygiRmFpbGVkIHRvIGNyZWF0ZSBmcXMiKTsKKwkJCWZxc190YXNrID0gTlVMTDsKKwkJCWdvdG8gdW53aW5kOworCQl9CisJfQogCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcmN1dG9ydHVyZV9uYik7CiAJbXV0ZXhfdW5sb2NrKCZmdWxsc3RvcF9tdXRleCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5jIGIva2VybmVsL3JjdXRyZWUuYwppbmRleCA1M2FlOTU5Li4zZWM4MTYwIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogCiAjaW5jbHVkZSAicmN1dHJlZS5oIgogCkBAIC02NiwxMSArNjUsMTEgQEAKIAkuc2lnbmFsZWQgPSBSQ1VfR1BfSURMRSwgXAogCS5ncG51bSA9IC0zMDAsIFwKIAkuY29tcGxldGVkID0gLTMwMCwgXAotCS5vbm9mZmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5vbm9mZmxvY2spLCBcCisJLm9ub2ZmbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5vbm9mZmxvY2spLCBcCiAJLm9ycGhhbl9jYnNfbGlzdCA9IE5VTEwsIFwKIAkub3JwaGFuX2Nic190YWlsID0gJm5hbWUub3JwaGFuX2Nic19saXN0LCBcCiAJLm9ycGhhbl9xbGVuID0gMCwgXAotCS5mcXNsb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUuZnFzbG9jayksIFwKKwkuZnFzbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5mcXNsb2NrKSwgXAogCS5uX2ZvcmNlX3FzID0gMCwgXAogCS5uX2ZvcmNlX3FzX25ncCA9IDAsIFwKIH0KQEAgLTgxLDkgKzgwLDYgQEAKIHN0cnVjdCByY3Vfc3RhdGUgcmN1X2JoX3N0YXRlID0gUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9iaF9zdGF0ZSk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9iaF9kYXRhKTsKIAotc3RhdGljIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZSBfX3JlYWRfbW9zdGx5OwotCi0KIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGlzIGluIHByb2dyZXNzLiAgVGhlIEFDQ0VTU19PTkNFKClzCiAgKiBwZXJtaXQgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdpdGhvdXQgaG9sZGluZyB0aGUgcm9vdCByY3Vfbm9kZQpAQCAtMTU3LDYgKzE1MywyNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKTsKIAogLyoKKyAqIEZvcmNlIGEgcXVpZXNjZW50IHN0YXRlIGZvciBSQ1UgQkguCisgKi8KK3ZvaWQgcmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworCWZvcmNlX3F1aWVzY2VudF9zdGF0ZSgmcmN1X2JoX3N0YXRlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOworCisvKgorICogRm9yY2UgYSBxdWllc2NlbnQgc3RhdGUgZm9yIFJDVS1zY2hlZC4KKyAqLwordm9pZCByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7CisJZm9yY2VfcXVpZXNjZW50X3N0YXRlKCZyY3Vfc2NoZWRfc3RhdGUsIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSk7CisKKy8qCiAgKiBEb2VzIHRoZSBDUFUgaGF2ZSBjYWxsYmFja3MgcmVhZHkgdG8gYmUgaW52b2tlZD8KICAqLwogc3RhdGljIGludApAQCAtNDM5LDEwICs0NTMsMTAgQEAKIAogCS8qIE9ubHkgbGV0IG9uZSBDUFUgY29tcGxhaW4gYWJvdXQgb3RoZXJzIHBlciB0aW1lIGludGVydmFsLiAqLwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJZGVsdGEgPSBqaWZmaWVzIC0gcnNwLT5qaWZmaWVzX3N0YWxsOwogCWlmIChkZWx0YSA8IFJDVV9TVEFMTF9SQVRfREVMQVkgfHwgIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJcnNwLT5qaWZmaWVzX3N0YWxsID0gamlmZmllcyArIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfUkVDSEVDSzsKQEAgLTQ1MiwxMyArNDY2LDE1IEBACiAJICogZHVlIHRvIENQVSBvZmZsaW5pbmcuCiAJICovCiAJcmN1X3ByaW50X3Rhc2tfc3RhbGwocm5wKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBPSywgdGltZSB0byByYXQgb24gb3VyIGJ1ZGR5Li4uICovCiAKIAlwcmludGsoS0VSTl9FUlIgIklORk86IFJDVSBkZXRlY3RlZCBDUFUgc3RhbGxzOiIpOwogCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApIHsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmN1X3ByaW50X3Rhc2tfc3RhbGwocm5wKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlpZiAocm5wLT5xc21hc2sgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGNwdSA9IDA7IGNwdSA8PSBybnAtPmdycGhpIC0gcm5wLT5ncnBsbzsgY3B1KyspCkBAIC00NjksNiArNDg1LDEwIEBACiAJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgKGxvbmcpKGppZmZpZXMgLSByc3AtPmdwX3N0YXJ0KSk7CiAJdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpOwogCisJLyogSWYgc28gY29uZmlndXJlZCwgY29tcGxhaW4gYWJvdXQgdGFza3MgYmxvY2tpbmcgdGhlIGdyYWNlIHBlcmlvZC4gKi8KKworCXJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChyc3ApOworCiAJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMCk7ICAvKiBLaWNrIHRoZW0gYWxsLiAqLwogfQogCkBAIC00ODEsMTEgKzUwMSwxMSBAQAogCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBqaWZmaWVzIC0gcnNwLT5ncF9zdGFydCk7CiAJdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCWlmICgobG9uZykoamlmZmllcyAtIHJzcC0+amlmZmllc19zdGFsbCkgPj0gMCkKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCWlmIChVTE9OR19DTVBfR0UoamlmZmllcywgcnNwLT5qaWZmaWVzX3N0YWxsKSkKIAkJcnNwLT5qaWZmaWVzX3N0YWxsID0KIAkJCWppZmZpZXMgKyBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCiAJc2V0X25lZWRfcmVzY2hlZCgpOyAgLyoga2ljayBvdXJzZWx2ZXMgdG8gZ2V0IHRoaW5ncyBnb2luZy4gKi8KIH0KQEAgLTU0NSwxMiArNTY1LDEyIEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXJucCA9IHJkcC0+bXlub2RlOwogCWlmIChyZHAtPmdwbnVtID09IEFDQ0VTU19PTkNFKHJucC0+Z3BudW0pIHx8IC8qIG91dHNpZGUgbG9jay4gKi8KLQkgICAgIXNwaW5fdHJ5bG9jaygmcm5wLT5sb2NrKSkgeyAvKiBpcnFzIGFscmVhZHkgb2ZmLCByZXRyeSBsYXRlci4gKi8KKwkgICAgIXJhd19zcGluX3RyeWxvY2soJnJucC0+bG9jaykpIHsgLyogaXJxcyBhbHJlYWR5IG9mZiwgc28gbGF0ZXIuICovCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlfX25vdGVfbmV3X2dwbnVtKHJzcCwgcm5wLCByZHApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTYwOSwxMiArNjI5LDEyIEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXJucCA9IHJkcC0+bXlub2RlOwogCWlmIChyZHAtPmNvbXBsZXRlZCA9PSBBQ0NFU1NfT05DRShybnAtPmNvbXBsZXRlZCkgfHwgLyogb3V0c2lkZSBsb2NrLiAqLwotCSAgICAhc3Bpbl90cnlsb2NrKCZybnAtPmxvY2spKSB7IC8qIGlycXMgYWxyZWFkeSBvZmYsIHJldHJ5IGxhdGVyLiAqLworCSAgICAhcmF3X3NwaW5fdHJ5bG9jaygmcm5wLT5sb2NrKSkgeyAvKiBpcnFzIGFscmVhZHkgb2ZmLCBzbyBsYXRlci4gKi8KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCV9fcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcm5wLCByZHApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTY1OSwxMiArNjc5LDE0IEBACiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAKLQlpZiAoIWNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSkgeworCWlmICghY3B1X25lZWRzX2Fub3RoZXJfZ3AocnNwLCByZHApIHx8IHJzcC0+ZnFzX2FjdGl2ZSkgeworCQlpZiAoY3B1X25lZWRzX2Fub3RoZXJfZ3AocnNwLCByZHApKQorCQkJcnNwLT5mcXNfbmVlZF9ncCA9IDE7CiAJCWlmIChybnAtPmNvbXBsZXRlZCA9PSByc3AtPmNvbXBsZXRlZCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CSAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAKIAkJLyoKIAkJICogUHJvcGFnYXRlIG5ldyAtPmNvbXBsZXRlZCB2YWx1ZSB0byByY3Vfbm9kZSBzdHJ1Y3R1cmVzCkBAIC02NzIsOSArNjk0LDkgQEAKIAkJICogb2YgdGhlIG5leHQgZ3JhY2UgcGVyaW9kIHRvIHByb2Nlc3MgdGhlaXIgY2FsbGJhY2tzLgogCQkgKi8KIAkJcmN1X2Zvcl9lYWNoX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgewotCQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQkJcm5wLT5jb21wbGV0ZWQgPSByc3AtPmNvbXBsZXRlZDsKLQkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCX0KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CkBAIC02OTUsMTUgKzcxNywxNSBAQAogCQlybnAtPmNvbXBsZXRlZCA9IHJzcC0+Y29tcGxldGVkOwogCQlyc3AtPnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklUOyAvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUgT0suICovCiAJCXJjdV9zdGFydF9ncF9wZXJfY3B1KHJzcCwgcm5wLCByZHApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCi0Jc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBsZWF2ZSBpcnFzIGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGxlYXZlIGlycXMgZGlzYWJsZWQuICovCiAKIAogCS8qIEV4Y2x1ZGUgYW55IGNvbmN1cnJlbnQgQ1BVLWhvdHBsdWcgb3BlcmF0aW9ucy4gKi8KLQlzcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAKIAkvKgogCSAqIFNldCB0aGUgcXVpZXNjZW50LXN0YXRlLW5lZWRlZCBiaXRzIGluIGFsbCB0aGUgcmN1X25vZGUKQEAgLTcyMywyMSArNzQ1LDIxIEBACiAJICogaXJxcyBkaXNhYmxlZC4KIAkgKi8KIAlyY3VfZm9yX2VhY2hfbm9kZV9icmVhZHRoX2ZpcnN0KHJzcCwgcm5wKSB7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlyY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHJucCk7CiAJCXJucC0+cXNtYXNrID0gcm5wLT5xc21hc2tpbml0OwogCQlybnAtPmdwbnVtID0gcnNwLT5ncG51bTsKIAkJcm5wLT5jb21wbGV0ZWQgPSByc3AtPmNvbXBsZXRlZDsKIAkJaWYgKHJucCA9PSByZHAtPm15bm9kZSkKIAkJCXJjdV9zdGFydF9ncF9wZXJfY3B1KHJzcCwgcm5wLCByZHApOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJfQogCiAJcm5wID0gcmN1X2dldF9yb290KHJzcCk7Ci0Jc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCXJzcC0+c2lnbmFsZWQgPSBSQ1VfU0lHTkFMX0lOSVQ7IC8qIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSBub3cgT0suICovCi0Jc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNzc2LDE0ICs3OTgsMTQgQEAKIAkJaWYgKCEocm5wLT5xc21hc2sgJiBtYXNrKSkgewogCiAJCQkvKiBPdXIgYml0IGhhcyBhbHJlYWR5IGJlZW4gY2xlYXJlZCwgc28gZG9uZS4gKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCXJucC0+cXNtYXNrICY9IH5tYXNrOwogCQlpZiAocm5wLT5xc21hc2sgIT0gMCB8fCByY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewogCiAJCQkvKiBPdGhlciBiaXRzIHN0aWxsIHNldCBhdCB0aGlzIGxldmVsLCBzbyBkb25lLiAqLwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKQEAgLTc5MywxMCArODE1LDEwIEBACiAKIAkJCWJyZWFrOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJucF9jID0gcm5wOwogCQlybnAgPSBybnAtPnBhcmVudDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlXQVJOX09OX09OQ0Uocm5wX2MtPnFzbWFzayk7CiAJfQogCkBAIC04MjUsNyArODQ3LDcgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCXJucCA9IHJkcC0+bXlub2RlOwotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWlmIChsYXN0Y29tcCAhPSBybnAtPmNvbXBsZXRlZCkgewogCiAJCS8qCkBAIC04MzcsMTIgKzg1OSwxMiBAQAogCQkgKiByYWNlIG9jY3VycmVkLgogCQkgKi8KIAkJcmRwLT5wYXNzZWRfcXVpZXNjID0gMDsJLyogdHJ5IGFnYWluIGxhdGVyISAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCW1hc2sgPSByZHAtPmdycG1hc2s7CiAJaWYgKChybnAtPnFzbWFzayAmIG1hc2spID09IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewogCQlyZHAtPnFzX3BlbmRpbmcgPSAwOwogCkBAIC05MDYsNyArOTI4LDcgQEAKIAogCWlmIChyZHAtPm54dGxpc3QgPT0gTlVMTCkKIAkJcmV0dXJuOyAgLyogaXJxcyBkaXNhYmxlZCwgc28gY29tcGFyaXNvbiBpcyBzdGFibGUuICovCi0Jc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCSpyc3AtPm9ycGhhbl9jYnNfdGFpbCA9IHJkcC0+bnh0bGlzdDsKIAlyc3AtPm9ycGhhbl9jYnNfdGFpbCA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKIAlyZHAtPm54dGxpc3QgPSBOVUxMOwpAQCAtOTE0LDcgKzkzNiw3IEBACiAJCXJkcC0+bnh0dGFpbFtpXSA9ICZyZHAtPm54dGxpc3Q7CiAJcnNwLT5vcnBoYW5fcWxlbiArPSByZHAtPnFsZW47CiAJcmRwLT5xbGVuID0gMDsKLQlzcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJcmF3X3NwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIH0KIAogLyoKQEAgLTkyNSwxMCArOTQ3LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAlyZHAgPSByc3AtPnJkYVtzbXBfcHJvY2Vzc29yX2lkKCldOwogCWlmIChyc3AtPm9ycGhhbl9jYnNfbGlzdCA9PSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCSpyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByc3AtPm9ycGhhbl9jYnNfbGlzdDsKQEAgLTkzNyw3ICs5NTksNyBAQAogCXJzcC0+b3JwaGFuX2Nic19saXN0ID0gTlVMTDsKIAlyc3AtPm9ycGhhbl9jYnNfdGFpbCA9ICZyc3AtPm9ycGhhbl9jYnNfbGlzdDsKIAlyc3AtPm9ycGhhbl9xbGVuID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtOTUzLDIzICs5NzUsMjMgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCS8qIEV4Y2x1ZGUgYW55IGF0dGVtcHRzIHRvIHN0YXJ0IGEgbmV3IGdyYWNlIHBlcmlvZC4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAKIAkvKiBSZW1vdmUgdGhlIG91dGdvaW5nIENQVSBmcm9tIHRoZSBtYXNrcyBpbiB0aGUgcmN1X25vZGUgaGllcmFyY2h5LiAqLwogCXJucCA9IHJkcC0+bXlub2RlOwkvKiB0aGlzIGlzIHRoZSBvdXRnb2luZyBDUFUncyBybnAuICovCiAJbWFzayA9IHJkcC0+Z3JwbWFzazsJLyogcm5wLT5ncnBsbyBpcyBjb25zdGFudC4gKi8KIAlkbyB7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlybnAtPnFzbWFza2luaXQgJj0gfm1hc2s7CiAJCWlmIChybnAtPnFzbWFza2luaXQgIT0gMCkgewogCQkJaWYgKHJucCAhPSByZHAtPm15bm9kZSkKLQkJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCQkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJCWJyZWFrOwogCQl9CiAJCWlmIChybnAgPT0gcmRwLT5teW5vZGUpCiAJCQluZWVkX3JlcG9ydCA9IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCk7CiAJCWVsc2UKLQkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCW1hc2sgPSBybnAtPmdycG1hc2s7CiAJCXJucCA9IHJucC0+cGFyZW50OwogCX0gd2hpbGUgKHJucCAhPSBOVUxMKTsKQEAgLTk4MCwxMiArMTAwMiwxMiBAQAogCSAqIGJlY2F1c2UgaW52b2tpbmcgcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucCgpIHdpdGggLT5vbm9mZmxvY2sKIAkgKiBoZWxkIGxlYWRzIHRvIGRlYWRsb2NrLgogCSAqLwotCXNwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAlybnAgPSByZHAtPm15bm9kZTsKIAlpZiAobmVlZF9yZXBvcnQgJiBSQ1VfT0ZMX1RBU0tTX05PUk1fR1ApCiAJCXJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAocm5wLCBmbGFncyk7CiAJZWxzZQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWlmIChuZWVkX3JlcG9ydCAmIFJDVV9PRkxfVEFTS1NfRVhQX0dQKQogCQlyY3VfcmVwb3J0X2V4cF9ybnAocnNwLCBybnApOwogCkBAIC0xMTQ0LDExICsxMTY2LDkgQEAKIC8qCiAgKiBTY2FuIHRoZSBsZWFmIHJjdV9ub2RlIHN0cnVjdHVyZXMsIHByb2Nlc3NpbmcgZHludGljayBzdGF0ZSBmb3IgYW55IHRoYXQKICAqIGhhdmUgbm90IHlldCBlbmNvdW50ZXJlZCBhIHF1aWVzY2VudCBzdGF0ZSwgdXNpbmcgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZC4KLSAqIFJldHVybnMgMSBpZiB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgZW5kcyB3aGlsZSBzY2FubmluZyAocG9zc2libHkKLSAqIGJlY2F1c2Ugd2UgbWFkZSBpdCBlbmQpLgorICogVGhlIGNhbGxlciBtdXN0IGhhdmUgc3VwcHJlc3NlZCBzdGFydCBvZiBuZXcgZ3JhY2UgcGVyaW9kcy4KICAqLwotc3RhdGljIGludCByY3VfcHJvY2Vzc19keW50aWNrKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgbG9uZyBsYXN0Y29tcCwKLQkJCSAgICAgICBpbnQgKCpmKShzdHJ1Y3QgcmN1X2RhdGEgKikpCitzdGF0aWMgdm9pZCBmb3JjZV9xc19ybnAoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgKCpmKShzdHJ1Y3QgcmN1X2RhdGEgKikpCiB7CiAJdW5zaWduZWQgbG9uZyBiaXQ7CiAJaW50IGNwdTsKQEAgLTExNTgsMTMgKzExNzgsMTMgQEAKIAogCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApIHsKIAkJbWFzayA9IDA7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKHJucC0+Y29tcGxldGVkICE9IGxhc3Rjb21wKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAxOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKSB7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm47CiAJCX0KIAkJaWYgKHJucC0+cXNtYXNrID09IDApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KIAkJY3B1ID0gcm5wLT5ncnBsbzsKQEAgLTExNzMsMTUgKzExOTMsMTQgQEAKIAkJCWlmICgocm5wLT5xc21hc2sgJiBiaXQpICE9IDAgJiYgZihyc3AtPnJkYVtjcHVdKSkKIAkJCQltYXNrIHw9IGJpdDsKIAkJfQotCQlpZiAobWFzayAhPSAwICYmIHJucC0+Y29tcGxldGVkID09IGxhc3Rjb21wKSB7CisJCWlmIChtYXNrICE9IDApIHsKIAogCQkJLyogcmN1X3JlcG9ydF9xc19ybnAoKSByZWxlYXNlcyBybnAtPmxvY2suICovCiAJCQlyY3VfcmVwb3J0X3FzX3JucChtYXNrLCByc3AsIHJucCwgZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMTkxLDMyICsxMjEwLDI2IEBACiBzdGF0aWMgdm9pZCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgcmVsYXhlZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgbGFzdGNvbXA7CiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKLQl1OCBzaWduYWxlZDsKLQl1OCBmb3JjZW5vdzsKIAogCWlmICghcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpCiAJCXJldHVybjsgIC8qIE5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcywgbm90aGluZyB0byBmb3JjZS4gKi8KLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZyc3AtPmZxc2xvY2ssIGZsYWdzKSkgeworCWlmICghcmF3X3NwaW5fdHJ5bG9ja19pcnFzYXZlKCZyc3AtPmZxc2xvY2ssIGZsYWdzKSkgewogCQlyc3AtPm5fZm9yY2VfcXNfbGgrKzsgLyogSW5leGFjdCwgY2FuIGxvc2UgY291bnRzLiAgVG91Z2ghICovCiAJCXJldHVybjsJLyogU29tZW9uZSBlbHNlIGlzIGFscmVhZHkgb24gdGhlIGpvYi4gKi8KIAl9Ci0JaWYgKHJlbGF4ZWQgJiYKLQkgICAgKGxvbmcpKHJzcC0+amlmZmllc19mb3JjZV9xcyAtIGppZmZpZXMpID49IDApCi0JCWdvdG8gdW5sb2NrX3JldDsgLyogbm8gZW1lcmdlbmN5IGFuZCBkb25lIHJlY2VudGx5LiAqLworCWlmIChyZWxheGVkICYmIFVMT05HX0NNUF9HRShyc3AtPmppZmZpZXNfZm9yY2VfcXMsIGppZmZpZXMpKQorCQlnb3RvIHVubG9ja19mcXNfcmV0OyAvKiBubyBlbWVyZ2VuY3kgYW5kIGRvbmUgcmVjZW50bHkuICovCiAJcnNwLT5uX2ZvcmNlX3FzKys7Ci0Jc3Bpbl9sb2NrKCZybnAtPmxvY2spOwotCWxhc3Rjb21wID0gcnNwLT5ncG51bSAtIDE7Ci0Jc2lnbmFsZWQgPSByc3AtPnNpZ25hbGVkOworCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAlyc3AtPmppZmZpZXNfZm9yY2VfcXMgPSBqaWZmaWVzICsgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUzsKIAlpZighcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpIHsKIAkJcnNwLT5uX2ZvcmNlX3FzX25ncCsrOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKLQkJZ290byB1bmxvY2tfcmV0OyAgLyogbm8gR1AgaW4gcHJvZ3Jlc3MsIHRpbWUgdXBkYXRlZC4gKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwkJZ290byB1bmxvY2tfZnFzX3JldDsgIC8qIG5vIEdQIGluIHByb2dyZXNzLCB0aW1lIHVwZGF0ZWQuICovCiAJfQotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwotCXN3aXRjaCAoc2lnbmFsZWQpIHsKKwlyc3AtPmZxc19hY3RpdmUgPSAxOworCXN3aXRjaCAocnNwLT5zaWduYWxlZCkgewogCWNhc2UgUkNVX0dQX0lETEU6CiAJY2FzZSBSQ1VfR1BfSU5JVDoKIApAQCAtMTIyNCw0NSArMTIzNywzOCBAQAogCiAJY2FzZSBSQ1VfU0FWRV9EWU5USUNLOgogCisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCiAJCWlmIChSQ1VfU0lHTkFMX0lOSVQgIT0gUkNVX1NBVkVfRFlOVElDSykKIAkJCWJyZWFrOyAvKiBTbyBnY2MgcmVjb2duaXplcyB0aGUgZGVhZCBjb2RlLiAqLwogCiAJCS8qIFJlY29yZCBkeW50aWNrLWlkbGUgc3RhdGUuICovCi0JCWlmIChyY3VfcHJvY2Vzc19keW50aWNrKHJzcCwgbGFzdGNvbXAsCi0JCQkJCWR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKSkKLQkJCWdvdG8gdW5sb2NrX3JldDsKLQkJLyogZmFsbCBpbnRvIG5leHQgY2FzZS4gKi8KLQotCWNhc2UgUkNVX1NBVkVfQ09NUExFVEVEOgotCi0JCS8qIFVwZGF0ZSBzdGF0ZSwgcmVjb3JkIGNvbXBsZXRpb24gY291bnRlci4gKi8KLQkJZm9yY2Vub3cgPSAwOwotCQlzcGluX2xvY2soJnJucC0+bG9jayk7Ci0JCWlmIChsYXN0Y29tcCArIDEgPT0gcnNwLT5ncG51bSAmJgotCQkgICAgbGFzdGNvbXAgPT0gcnNwLT5jb21wbGV0ZWQgJiYKLQkJICAgIHJzcC0+c2lnbmFsZWQgPT0gc2lnbmFsZWQpIHsKKwkJZm9yY2VfcXNfcm5wKHJzcCwgZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIpOworCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCisJCWlmIChyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkKIAkJCXJzcC0+c2lnbmFsZWQgPSBSQ1VfRk9SQ0VfUVM7Ci0JCQlyc3AtPmNvbXBsZXRlZF9mcXMgPSBsYXN0Y29tcDsKLQkJCWZvcmNlbm93ID0gc2lnbmFsZWQgPT0gUkNVX1NBVkVfQ09NUExFVEVEOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwotCQlpZiAoIWZvcmNlbm93KQotCQkJYnJlYWs7Ci0JCS8qIGZhbGwgaW50byBuZXh0IGNhc2UuICovCisJCWJyZWFrOwogCiAJY2FzZSBSQ1VfRk9SQ0VfUVM6CiAKIAkJLyogQ2hlY2sgZHludGljay1pZGxlIHN0YXRlLCBzZW5kIElQSSB0byBsYWdnYXJ0cy4gKi8KLQkJaWYgKHJjdV9wcm9jZXNzX2R5bnRpY2socnNwLCByc3AtPmNvbXBsZXRlZF9mcXMsCi0JCQkJCXJjdV9pbXBsaWNpdF9keW50aWNrc19xcykpCi0JCQlnb3RvIHVubG9ja19yZXQ7CisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCWZvcmNlX3FzX3JucChyc3AsIHJjdV9pbXBsaWNpdF9keW50aWNrc19xcyk7CiAKIAkJLyogTGVhdmUgc3RhdGUgaW4gY2FzZSBtb3JlIGZvcmNpbmcgaXMgcmVxdWlyZWQuICovCiAKKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLwogCQlicmVhazsKIAl9Ci11bmxvY2tfcmV0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpOworCXJzcC0+ZnFzX2FjdGl2ZSA9IDA7CisJaWYgKHJzcC0+ZnFzX25lZWRfZ3ApIHsKKwkJcmF3X3NwaW5fdW5sb2NrKCZyc3AtPmZxc2xvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCQlyc3AtPmZxc19uZWVkX2dwID0gMDsKKwkJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAvKiByZWxlYXNlcyBybnAtPmxvY2sgKi8KKwkJcmV0dXJuOworCX0KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwordW5sb2NrX2Zxc19yZXQ6CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpOwogfQogCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1NNUCAqLwpAQCAtMTI5MCw3ICsxMjk2LDcgQEAKIAkgKiBJZiBhbiBSQ1UgR1AgaGFzIGdvbmUgbG9uZyBlbm91Z2gsIGdvIGNoZWNrIGZvciBkeW50aWNrCiAJICogaWRsZSBDUFVzIGFuZCwgaWYgbmVlZGVkLCBzZW5kIHJlc2NoZWQgSVBJcy4KIAkgKi8KLQlpZiAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApCisJaWYgKFVMT05HX0NNUF9MVChBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpLCBqaWZmaWVzKSkKIAkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMSk7CiAKIAkvKgpAQCAtMTMwNCw3ICsxMzEwLDcgQEAKIAogCS8qIERvZXMgdGhpcyBDUFUgcmVxdWlyZSBhIG5vdC15ZXQtc3RhcnRlZCBncmFjZSBwZXJpb2Q/ICovCiAJaWYgKGNwdV9uZWVkc19hbm90aGVyX2dwKHJzcCwgcmRwKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmN1X2dldF9yb290KHJzcCktPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaywgZmxhZ3MpOwogCQlyY3Vfc3RhcnRfZ3AocnNwLCBmbGFncyk7ICAvKiByZWxlYXNlcyBhYm92ZSBsb2NrICovCiAJfQogCkBAIC0xMzM1LDYgKzEzNDEsOSBAQAogCSAqIGdyYWNlLXBlcmlvZCBtYW5pcHVsYXRpb25zIGFib3ZlLgogCSAqLwogCXNtcF9tYigpOyAvKiBTZWUgYWJvdmUgYmxvY2sgY29tbWVudC4gKi8KKworCS8qIElmIHdlIGFyZSBsYXN0IENQVSBvbiB3YXkgdG8gZHludGljay1pZGxlIG1vZGUsIGFjY2VsZXJhdGUgaXQuICovCisJcmN1X25lZWRzX2NwdV9mbHVzaCgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTM2OSw3ICsxMzc4LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBuZXN0ZmxhZzsKIAkJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnBfcm9vdC0+bG9jaywgbmVzdGZsYWcpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucF9yb290LT5sb2NrLCBuZXN0ZmxhZyk7CiAJCXJjdV9zdGFydF9ncChyc3AsIG5lc3RmbGFnKTsgIC8qIHJlbGVhc2VzIHJucF9yb290LT5sb2NrLiAqLwogCX0KIApAQCAtMTM4Nyw3ICsxMzk2LDcgQEAKIAkJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOwogCQlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKIAkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gcmRwLT5xbGVuOwotCX0gZWxzZSBpZiAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApCisJfSBlbHNlIGlmIChVTE9OR19DTVBfTFQoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSwgamlmZmllcykpCiAJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDEpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KQEAgLTE1MjAsNyArMTUyOSw3IEBACiAKIAkvKiBIYXMgYW4gUkNVIEdQIGdvbmUgbG9uZyBlbm91Z2ggdG8gc2VuZCByZXNjaGVkIElQSXMgJmM/ICovCiAJaWYgKHJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApICYmCi0JICAgICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCkpIHsKKwkgICAgVUxPTkdfQ01QX0xUKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcyksIGppZmZpZXMpKSB7CiAJCXJkcC0+bl9ycF9uZWVkX2ZxcysrOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0xNTQ1LDEwICsxNTU0LDkgQEAKIC8qCiAgKiBDaGVjayB0byBzZWUgaWYgYW55IGZ1dHVyZSBSQ1UtcmVsYXRlZCB3b3JrIHdpbGwgbmVlZCB0byBiZSBkb25lCiAgKiBieSB0aGUgY3VycmVudCBDUFUsIGV2ZW4gaWYgbm9uZSBuZWVkIGJlIGRvbmUgaW1tZWRpYXRlbHksIHJldHVybmluZwotICogMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgUkNVIGltcGxlbWVudGF0aW9uOyBpdCBpcyAtbm90LQotICogYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgorICogMSBpZiBzby4KICAqLwotaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSkKK3N0YXRpYyBpbnQgcmN1X25lZWRzX2NwdV9xdWlja19jaGVjayhpbnQgY3B1KQogewogCS8qIFJDVSBjYWxsYmFja3MgZWl0aGVyIHJlYWR5IG9yIHBlbmRpbmc/ICovCiAJcmV0dXJuIHBlcl9jcHUocmN1X3NjaGVkX2RhdGEsIGNwdSkubnh0bGlzdCB8fApAQCAtMTU1NiwyMSArMTU2NCw2IEBACiAJICAgICAgIHJjdV9wcmVlbXB0X25lZWRzX2NwdShjcHUpOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgc2NoZWR1bGVyJ3MgaW5pdGlhbGl6YXRpb24KLSAqIHByb2Nlc3MuICBCZWZvcmUgdGhpcyBpcyBjYWxsZWQsIHRoZSBpZGxlIHRhc2sgbWlnaHQgY29udGFpbgotICogUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyAoZHVyaW5nIHdoaWNoIHRpbWUsIHRoaXMgaWRsZQotICogdGFzayBpcyBib290aW5nIHRoZSBzeXN0ZW0pLiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZQotICogaWRsZSB0YXNrcyBhcmUgcHJvaGliaXRlZCBmcm9tIGNvbnRhaW5pbmcgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAotICogc2VjdGlvbnMuCi0gKi8KLXZvaWQgcmN1X3NjaGVkdWxlcl9zdGFydGluZyh2b2lkKQotewotCVdBUk5fT04obnVtX29ubGluZV9jcHVzKCkgIT0gMSk7Ci0JV0FSTl9PTihucl9jb250ZXh0X3N3aXRjaGVzKCkgPiAwKTsKLQlyY3Vfc2NoZWR1bGVyX2FjdGl2ZSA9IDE7Ci19Ci0KIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2hlYWQsIHJjdV9iYXJyaWVyX2hlYWQpID0ge05VTEx9Owogc3RhdGljIGF0b21pY190IHJjdV9iYXJyaWVyX2NwdV9jb3VudDsKIHN0YXRpYyBERUZJTkVfTVVURVgocmN1X2JhcnJpZXJfbXV0ZXgpOwpAQCAtMTY1OSw3ICsxNjUyLDcgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCiAJLyogU2V0IHVwIGxvY2FsIHN0YXRlLCBlbnN1cmluZyBjb25zaXN0ZW50IHZpZXcgb2YgZ2xvYmFsIHN0YXRlLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCXJkcC0+Z3JwbWFzayA9IDFVTCA8PCAoY3B1IC0gcmRwLT5teW5vZGUtPmdycGxvKTsKIAlyZHAtPm54dGxpc3QgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBSQ1VfTkVYVF9TSVpFOyBpKyspCkBAIC0xNjY5LDcgKzE2NjIsNyBAQAogCXJkcC0+ZHludGlja3MgPSAmcGVyX2NwdShyY3VfZHludGlja3MsIGNwdSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwogCXJkcC0+Y3B1ID0gY3B1OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTE2ODcsNyArMTY4MCw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAogCS8qIFNldCB1cCBsb2NhbCBzdGF0ZSwgZW5zdXJpbmcgY29uc2lzdGVudCB2aWV3IG9mIGdsb2JhbCBzdGF0ZS4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOyAgLyogV2UgY291bGQgYmUgcmFjaW5nIHdpdGggbmV3IEdQLCAqLwogCXJkcC0+cXNfcGVuZGluZyA9IDE7CSAvKiAgc28gc2V0IHVwIHRvIHJlc3BvbmQgdG8gY3VycmVudCBHUC4gKi8KIAlyZHAtPmJlZW5vbmxpbmUgPSAxOwkgLyogV2UgaGF2ZSBub3cgYmVlbiBvbmxpbmUuICovCkBAIC0xNjk1LDcgKzE2ODgsNyBAQAogCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IDA7CiAJcmRwLT5uX2ZvcmNlX3FzX3NuYXAgPSByc3AtPm5fZm9yY2VfcXM7CiAJcmRwLT5ibGltaXQgPSBibGltaXQ7Ci0Jc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAogCS8qCiAJICogQSBuZXcgZ3JhY2UgcGVyaW9kIG1pZ2h0IHN0YXJ0IGhlcmUuICBJZiBzbywgd2Ugd29uJ3QgYmUgcGFydApAQCAtMTcwMywxNCArMTY5NiwxNCBAQAogCSAqLwogCiAJLyogRXhjbHVkZSBhbnkgYXR0ZW1wdHMgdG8gc3RhcnQgYSBuZXcgR1Agb24gbGFyZ2Ugc3lzdGVtcy4gKi8KLQlzcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAKIAkvKiBBZGQgQ1BVIHRvIHJjdV9ub2RlIGJpdG1hc2tzLiAqLwogCXJucCA9IHJkcC0+bXlub2RlOwogCW1hc2sgPSByZHAtPmdycG1hc2s7CiAJZG8gewogCQkvKiBFeGNsdWRlIGFueSBhdHRlbXB0cyB0byBzdGFydCBhIG5ldyBHUCBvbiBzbWFsbCBzeXN0ZW1zLiAqLwotCQlzcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlybnAtPnFzbWFza2luaXQgfD0gbWFzazsKIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKIAkJaWYgKHJucCA9PSByZHAtPm15bm9kZSkgewpAQCAtMTcxOCwxMSArMTcxMSwxMSBAQAogCQkJcmRwLT5jb21wbGV0ZWQgPSBybnAtPmNvbXBsZXRlZDsKIAkJCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSBybnAtPmNvbXBsZXRlZCAtIDE7CiAJCX0KLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJucCA9IHJucC0+cGFyZW50OwogCX0gd2hpbGUgKHJucCAhPSBOVUxMICYmICEocm5wLT5xc21hc2tpbml0ICYgbWFzaykpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9vbmxpbmVfY3B1KGludCBjcHUpCkBAIC0xODA2LDExICsxNzk5LDE3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCByY3VfaW5pdF9vbmUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogeworCXN0YXRpYyBjaGFyICpidWZbXSA9IHsgInJjdV9ub2RlX2xldmVsXzAiLAorCQkJICAgICAgICJyY3Vfbm9kZV9sZXZlbF8xIiwKKwkJCSAgICAgICAicmN1X25vZGVfbGV2ZWxfMiIsCisJCQkgICAgICAgInJjdV9ub2RlX2xldmVsXzMiIH07ICAvKiBNYXRjaCBNQVhfUkNVX0xWTFMgKi8KIAlpbnQgY3B1c3RyaWRlID0gMTsKIAlpbnQgaTsKIAlpbnQgajsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAorCUJVSUxEX0JVR19PTihNQVhfUkNVX0xWTFMgPiBBUlJBWV9TSVpFKGJ1ZikpOyAgLyogRml4IGJ1ZltdIGluaXQhICovCisKIAkvKiBJbml0aWFsaXplIHRoZSBsZXZlbC10cmFja2luZyBhcnJheXMuICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgTlVNX1JDVV9MVkxTOyBpKyspCkBAIC0xODIzLDggKzE4MjIsOSBAQAogCQljcHVzdHJpZGUgKj0gcnNwLT5sZXZlbHNwcmVhZFtpXTsKIAkJcm5wID0gcnNwLT5sZXZlbFtpXTsKIAkJZm9yIChqID0gMDsgaiA8IHJzcC0+bGV2ZWxjbnRbaV07IGorKywgcm5wKyspIHsKLQkJCXNwaW5fbG9ja19pbml0KCZybnAtPmxvY2spOwotCQkJbG9ja2RlcF9zZXRfY2xhc3MoJnJucC0+bG9jaywgJnJjdV9ub2RlX2NsYXNzW2ldKTsKKwkJCXJhd19zcGluX2xvY2tfaW5pdCgmcm5wLT5sb2NrKTsKKwkJCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKCZybnAtPmxvY2ssCisJCQkJCQkgICAmcmN1X25vZGVfY2xhc3NbaV0sIGJ1ZltpXSk7CiAJCQlybnAtPmdwbnVtID0gMDsKIAkJCXJucC0+cXNtYXNrID0gMDsKIAkJCXJucC0+cXNtYXNraW5pdCA9IDA7CkBAIC0xODc2LDcgKzE4NzYsNyBAQAogCiB2b2lkIF9faW5pdCByY3VfaW5pdCh2b2lkKQogewotCWludCBpOworCWludCBjcHU7CiAKIAlyY3VfYm9vdHVwX2Fubm91bmNlKCk7CiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKQEAgLTE4OTYsOCArMTg5Niw4IEBACiAJICogb3IgdGhlIHNjaGVkdWxlciBhcmUgb3BlcmF0aW9uYWwuCiAJICovCiAJY3B1X25vdGlmaWVyKHJjdV9jcHVfbm90aWZ5LCAwKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCi0JCXJjdV9jcHVfbm90aWZ5KE5VTEwsIENQVV9VUF9QUkVQQVJFLCAodm9pZCAqKShsb25nKWkpOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQlyY3VfY3B1X25vdGlmeShOVUxMLCBDUFVfVVBfUFJFUEFSRSwgKHZvaWQgKikobG9uZyljcHUpOwogfQogCiAjaW5jbHVkZSAicmN1dHJlZV9wbHVnaW4uaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmggYi9rZXJuZWwvcmN1dHJlZS5oCmluZGV4IGQyYTAwNDYuLjE0MzllYjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmgKKysrIGIva2VybmVsL3JjdXRyZWUuaApAQCAtOTAsMTIgKzkwLDEyIEBACiAgKiBEZWZpbml0aW9uIGZvciBub2RlIHdpdGhpbiB0aGUgUkNVIGdyYWNlLXBlcmlvZC1kZXRlY3Rpb24gaGllcmFyY2h5LgogICovCiBzdHJ1Y3QgcmN1X25vZGUgewotCXNwaW5sb2NrX3QgbG9jazsJLyogUm9vdCByY3Vfbm9kZSdzIGxvY2sgcHJvdGVjdHMgc29tZSAqLworCXJhd19zcGlubG9ja190IGxvY2s7CS8qIFJvb3QgcmN1X25vZGUncyBsb2NrIHByb3RlY3RzIHNvbWUgKi8KIAkJCQkvKiAgcmN1X3N0YXRlIGZpZWxkcyBhcyB3ZWxsIGFzIGZvbGxvd2luZy4gKi8KLQlsb25nCWdwbnVtOwkJLyogQ3VycmVudCBncmFjZSBwZXJpb2QgZm9yIHRoaXMgbm9kZS4gKi8KKwl1bnNpZ25lZCBsb25nIGdwbnVtOwkvKiBDdXJyZW50IGdyYWNlIHBlcmlvZCBmb3IgdGhpcyBub2RlLiAqLwogCQkJCS8qICBUaGlzIHdpbGwgZWl0aGVyIGJlIGVxdWFsIHRvIG9yIG9uZSAqLwogCQkJCS8qICBiZWhpbmQgdGhlIHJvb3QgcmN1X25vZGUncyBncG51bS4gKi8KLQlsb25nCWNvbXBsZXRlZDsJLyogTGFzdCBncmFjZSBwZXJpb2QgY29tcGxldGVkIGZvciB0aGlzIG5vZGUuICovCisJdW5zaWduZWQgbG9uZyBjb21wbGV0ZWQ7IC8qIExhc3QgR1AgY29tcGxldGVkIGZvciB0aGlzIG5vZGUuICovCiAJCQkJLyogIFRoaXMgd2lsbCBlaXRoZXIgYmUgZXF1YWwgdG8gb3Igb25lICovCiAJCQkJLyogIGJlaGluZCB0aGUgcm9vdCByY3Vfbm9kZSdzIGdwbnVtLiAqLwogCXVuc2lnbmVkIGxvbmcgcXNtYXNrOwkvKiBDUFVzIG9yIGdyb3VwcyB0aGF0IG5lZWQgdG8gc3dpdGNoIGluICovCkBAIC0xNjEsMTEgKzE2MSwxMSBAQAogLyogUGVyLUNQVSBkYXRhIGZvciByZWFkLWNvcHkgdXBkYXRlLiAqLwogc3RydWN0IHJjdV9kYXRhIHsKIAkvKiAxKSBxdWllc2NlbnQtc3RhdGUgYW5kIGdyYWNlLXBlcmlvZCBoYW5kbGluZyA6ICovCi0JbG9uZwkJY29tcGxldGVkOwkvKiBUcmFjayByc3AtPmNvbXBsZXRlZCBncCBudW1iZXIgKi8KKwl1bnNpZ25lZCBsb25nCWNvbXBsZXRlZDsJLyogVHJhY2sgcnNwLT5jb21wbGV0ZWQgZ3AgbnVtYmVyICovCiAJCQkJCS8qICBpbiBvcmRlciB0byBkZXRlY3QgR1AgZW5kLiAqLwotCWxvbmcJCWdwbnVtOwkJLyogSGlnaGVzdCBncCBudW1iZXIgdGhhdCB0aGlzIENQVSAqLworCXVuc2lnbmVkIGxvbmcJZ3BudW07CQkvKiBIaWdoZXN0IGdwIG51bWJlciB0aGF0IHRoaXMgQ1BVICovCiAJCQkJCS8qICBpcyBhd2FyZSBvZiBoYXZpbmcgc3RhcnRlZC4gKi8KLQlsb25nCQlwYXNzZWRfcXVpZXNjX2NvbXBsZXRlZDsKKwl1bnNpZ25lZCBsb25nCXBhc3NlZF9xdWllc2NfY29tcGxldGVkOwogCQkJCQkvKiBWYWx1ZSBvZiBjb21wbGV0ZWQgYXQgdGltZSBvZiBxcy4gKi8KIAlib29sCQlwYXNzZWRfcXVpZXNjOwkvKiBVc2VyLW1vZGUvaWRsZSBsb29wIGV0Yy4gKi8KIAlib29sCQlxc19wZW5kaW5nOwkvKiBDb3JlIHdhaXRzIGZvciBxdWllc2Mgc3RhdGUuICovCkBAIC0yMjEsMTQgKzIyMSwxNCBAQAogCXVuc2lnbmVkIGxvbmcgcmVzY2hlZF9pcGk7CS8qIFNlbnQgYSByZXNjaGVkIElQSS4gKi8KIAogCS8qIDUpIF9fcmN1X3BlbmRpbmcoKSBzdGF0aXN0aWNzLiAqLwotCWxvbmcgbl9yY3VfcGVuZGluZzsJCS8qIHJjdV9wZW5kaW5nKCkgY2FsbHMgc2luY2UgYm9vdC4gKi8KLQlsb25nIG5fcnBfcXNfcGVuZGluZzsKLQlsb25nIG5fcnBfY2JfcmVhZHk7Ci0JbG9uZyBuX3JwX2NwdV9uZWVkc19ncDsKLQlsb25nIG5fcnBfZ3BfY29tcGxldGVkOwotCWxvbmcgbl9ycF9ncF9zdGFydGVkOwotCWxvbmcgbl9ycF9uZWVkX2ZxczsKLQlsb25nIG5fcnBfbmVlZF9ub3RoaW5nOworCXVuc2lnbmVkIGxvbmcgbl9yY3VfcGVuZGluZzsJLyogcmN1X3BlbmRpbmcoKSBjYWxscyBzaW5jZSBib290LiAqLworCXVuc2lnbmVkIGxvbmcgbl9ycF9xc19wZW5kaW5nOworCXVuc2lnbmVkIGxvbmcgbl9ycF9jYl9yZWFkeTsKKwl1bnNpZ25lZCBsb25nIG5fcnBfY3B1X25lZWRzX2dwOworCXVuc2lnbmVkIGxvbmcgbl9ycF9ncF9jb21wbGV0ZWQ7CisJdW5zaWduZWQgbG9uZyBuX3JwX2dwX3N0YXJ0ZWQ7CisJdW5zaWduZWQgbG9uZyBuX3JwX25lZWRfZnFzOworCXVuc2lnbmVkIGxvbmcgbl9ycF9uZWVkX25vdGhpbmc7CiAKIAlpbnQgY3B1OwogfTsKQEAgLTIzNywxMiArMjM3LDExIEBACiAjZGVmaW5lIFJDVV9HUF9JRExFCQkwCS8qIE5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcy4gKi8KICNkZWZpbmUgUkNVX0dQX0lOSVQJCTEJLyogR3JhY2UgcGVyaW9kIGJlaW5nIGluaXRpYWxpemVkLiAqLwogI2RlZmluZSBSQ1VfU0FWRV9EWU5USUNLCTIJLyogTmVlZCB0byBzY2FuIGR5bnRpY2sgc3RhdGUuICovCi0jZGVmaW5lIFJDVV9TQVZFX0NPTVBMRVRFRAkzCS8qIE5lZWQgdG8gc2F2ZSByc3AtPmNvbXBsZXRlZC4gKi8KLSNkZWZpbmUgUkNVX0ZPUkNFX1FTCQk0CS8qIE5lZWQgdG8gZm9yY2UgcXVpZXNjZW50IHN0YXRlLiAqLworI2RlZmluZSBSQ1VfRk9SQ0VfUVMJCTMJLyogTmVlZCB0byBmb3JjZSBxdWllc2NlbnQgc3RhdGUuICovCiAjaWZkZWYgQ09ORklHX05PX0haCiAjZGVmaW5lIFJDVV9TSUdOQUxfSU5JVAkJUkNVX1NBVkVfRFlOVElDSwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwotI2RlZmluZSBSQ1VfU0lHTkFMX0lOSVQJCVJDVV9TQVZFX0NPTVBMRVRFRAorI2RlZmluZSBSQ1VfU0lHTkFMX0lOSVQJCVJDVV9GT1JDRV9RUwogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAogI2RlZmluZSBSQ1VfSklGRklFU19USUxMX0ZPUkNFX1FTCSAzCS8qIGZvciByc3AtPmppZmZpZXNfZm9yY2VfcXMgKi8KQEAgLTI1Niw2ICsyNTUsOSBAQAogCiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCiAKKyNkZWZpbmUgVUxPTkdfQ01QX0dFKGEsIGIpCShVTE9OR19NQVggLyAyID49IChhKSAtIChiKSkKKyNkZWZpbmUgVUxPTkdfQ01QX0xUKGEsIGIpCShVTE9OR19NQVggLyAyIDwgKGEpIC0gKGIpKQorCiAvKgogICogUkNVIGdsb2JhbCBzdGF0ZSwgaW5jbHVkaW5nIG5vZGUgaGllcmFyY2h5LiAgVGhpcyBoaWVyYXJjaHkgaXMKICAqIHJlcHJlc2VudGVkIGluICJoZWFwIiBmb3JtIGluIGEgZGVuc2UgYXJyYXkuICBUaGUgcm9vdCAoZmlyc3QgbGV2ZWwpCkBAIC0yNzcsMTIgKzI3OSwxOSBAQAogCiAJdTgJc2lnbmFsZWQgX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKIAkJCQkJCS8qIEZvcmNlIFFTIHN0YXRlLiAqLwotCWxvbmcJZ3BudW07CQkJCS8qIEN1cnJlbnQgZ3AgbnVtYmVyLiAqLwotCWxvbmcJY29tcGxldGVkOwkJCS8qICMgb2YgbGFzdCBjb21wbGV0ZWQgZ3AuICovCisJdTgJZnFzX2FjdGl2ZTsJCQkvKiBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSAqLworCQkJCQkJLyogIGlzIHJ1bm5pbmcuICovCisJdTgJZnFzX25lZWRfZ3A7CQkJLyogQSBDUFUgd2FzIHByZXZlbnRlZCBmcm9tICovCisJCQkJCQkvKiAgc3RhcnRpbmcgYSBuZXcgZ3JhY2UgKi8KKwkJCQkJCS8qICBwZXJpb2QgYmVjYXVzZSAqLworCQkJCQkJLyogIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpICovCisJCQkJCQkvKiAgd2FzIHJ1bm5pbmcuICovCisJdW5zaWduZWQgbG9uZyBncG51bTsJCQkvKiBDdXJyZW50IGdwIG51bWJlci4gKi8KKwl1bnNpZ25lZCBsb25nIGNvbXBsZXRlZDsJCS8qICMgb2YgbGFzdCBjb21wbGV0ZWQgZ3AuICovCiAKIAkvKiBFbmQgb2YgZmllbGRzIGd1YXJkZWQgYnkgcm9vdCByY3Vfbm9kZSdzIGxvY2suICovCiAKLQlzcGlubG9ja190IG9ub2ZmbG9jazsJCQkvKiBleGNsdWRlIG9uL29mZmxpbmUgYW5kICovCisJcmF3X3NwaW5sb2NrX3Qgb25vZmZsb2NrOwkJLyogZXhjbHVkZSBvbi9vZmZsaW5lIGFuZCAqLwogCQkJCQkJLyogIHN0YXJ0aW5nIG5ldyBHUC4gIEFsc28gKi8KIAkJCQkJCS8qICBwcm90ZWN0cyB0aGUgZm9sbG93aW5nICovCiAJCQkJCQkvKiAgb3JwaGFuX2NicyBmaWVsZHMuICovCkBAIC0yOTIsMTAgKzMwMSw4IEBACiAJCQkJCQkvKiAgZ29pbmcgb2ZmbGluZS4gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgKipvcnBoYW5fY2JzX3RhaWw7CS8qIEFuZCB0YWlsIHBvaW50ZXIuICovCiAJbG9uZyBvcnBoYW5fcWxlbjsJCQkvKiBOdW1iZXIgb2Ygb3JwaGFuZWQgY2JzLiAqLwotCXNwaW5sb2NrX3QgZnFzbG9jazsJCQkvKiBPbmx5IG9uZSB0YXNrIGZvcmNpbmcgKi8KKwlyYXdfc3BpbmxvY2tfdCBmcXNsb2NrOwkJCS8qIE9ubHkgb25lIHRhc2sgZm9yY2luZyAqLwogCQkJCQkJLyogIHF1aWVzY2VudCBzdGF0ZXMuICovCi0JbG9uZwljb21wbGV0ZWRfZnFzOwkJCS8qIFZhbHVlIG9mIGNvbXBsZXRlZCBAIHNuYXAuICovCi0JCQkJCQkvKiAgUHJvdGVjdGVkIGJ5IGZxc2xvY2suICovCiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzX2ZvcmNlX3FzOwkJLyogVGltZSBhdCB3aGljaCB0byBpbnZva2UgKi8KIAkJCQkJCS8qICBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKS4gKi8KIAl1bnNpZ25lZCBsb25nIG5fZm9yY2VfcXM7CQkvKiBOdW1iZXIgb2YgY2FsbHMgdG8gKi8KQEAgLTMxOSw4ICszMjYsNiBAQAogI2RlZmluZSBSQ1VfT0ZMX1RBU0tTX0VYUF9HUAkweDIJCS8qIFRhc2tzIGJsb2NraW5nIGV4cGVkaXRlZCAqLwogCQkJCQkJLyogIEdQIHdlcmUgbW92ZWQgdG8gcm9vdC4gKi8KIAotI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUKLQogLyoKICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpbnRlcm5hbCBkZWNsYXJhdGlvbnM6CiAgKi8KQEAgLTMzNSw3ICszNDAsNyBAQAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X3ByZWVtcHRfZGF0YSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKLSNlbHNlIC8qICNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCisjaWZuZGVmIFJDVV9UUkVFX05PTkNPUkUKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHJjdXRyZWVfcGx1Z2luLmggKi8KIHN0YXRpYyB2b2lkIHJjdV9ib290dXBfYW5ub3VuY2Uodm9pZCk7CkBAIC0zNDcsNiArMzUyLDcgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKK3N0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwogc3RhdGljIHZvaWQgcmN1X3ByaW50X3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9ub2RlICpybnApOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CkBAIC0zNjcsNSArMzczLDYgQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3VfcHJlZW1wdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpOwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHZvaWQpOwogc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKTsKK3N0YXRpYyB2b2lkIHJjdV9uZWVkc19jcHVfZmx1c2godm9pZCk7CiAKLSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLworI2VuZGlmIC8qICNpZm5kZWYgUkNVX1RSRUVfTk9OQ09SRSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAppbmRleCAzN2ZiY2NkLi40NjRhZDJjIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaApAQCAtNjIsNiArNjIsMTUgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZCk7CiAKIC8qCisgKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgcHJlZW1wdGlibGUgUkNVLgorICovCit2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKK3sKKwlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9wcmVlbXB0X3N0YXRlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOworCisvKgogICogUmVjb3JkIGEgcHJlZW1wdGFibGUtUkNVIHF1aWVzY2VudCBzdGF0ZSBmb3IgdGhlIHNwZWNpZmllZCBDUFUuICBOb3RlCiAgKiB0aGF0IHRoaXMganVzdCBtZWFucyB0aGF0IHRoZSB0YXNrIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBDUFUgaXMKICAqIG5vdCBpbiBhIHF1aWVzY2VudCBzdGF0ZS4gIFRoZXJlIG1pZ2h0IGJlIGFueSBudW1iZXIgb2YgdGFza3MgYmxvY2tlZApAQCAtMTAyLDcgKzExMSw3IEBACiAJCS8qIFBvc3NpYmx5IGJsb2NraW5nIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gKi8KIAkJcmRwID0gcmN1X3ByZWVtcHRfc3RhdGUucmRhW2NwdV07CiAJCXJucCA9IHJkcC0+bXlub2RlOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsIHw9IFJDVV9SRUFEX1VOTE9DS19CTE9DS0VEOwogCQl0LT5yY3VfYmxvY2tlZF9ub2RlID0gcm5wOwogCkBAIC0xMjMsNyArMTMyLDcgQEAKIAkJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZ0LT5yY3Vfbm9kZV9lbnRyeSkpOwogCQlwaGFzZSA9IChybnAtPmdwbnVtICsgIShybnAtPnFzbWFzayAmIHJkcC0+Z3JwbWFzaykpICYgMHgxOwogCQlsaXN0X2FkZCgmdC0+cmN1X25vZGVfZW50cnksICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAkvKgpAQCAtMTgwLDcgKzE4OSw3IEBACiAJc3RydWN0IHJjdV9ub2RlICpybnBfcDsKIAogCWlmIChybnAtPnFzbWFzayAhPSAwIHx8IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsgIC8qIFN0aWxsIG5lZWQgbW9yZSBxdWllc2NlbnQgc3RhdGVzISAqLwogCX0KIApAQCAtMTk3LDggKzIwNiw4IEBACiAKIAkvKiBSZXBvcnQgdXAgdGhlIHJlc3Qgb2YgdGhlIGhpZXJhcmNoeS4gKi8KIAltYXNrID0gcm5wLT5ncnBtYXNrOwotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KLQlzcGluX2xvY2soJnJucF9wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJcmF3X3NwaW5fbG9jaygmcm5wX3AtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJcmN1X3JlcG9ydF9xc19ybnAobWFzaywgJnJjdV9wcmVlbXB0X3N0YXRlLCBybnBfcCwgZmxhZ3MpOwogfQogCkBAIC0yNDgsMTAgKzI1NywxMCBAQAogCQkgKi8KIAkJZm9yICg7OykgewogCQkJcm5wID0gdC0+cmN1X2Jsb2NrZWRfbm9kZTsKLQkJCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCQlpZiAocm5wID09IHQtPnJjdV9ibG9ja2VkX25vZGUpCiAJCQkJYnJlYWs7Ci0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJfQogCQllbXB0eSA9ICFyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKTsKIAkJZW1wdHlfZXhwID0gIXJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAocm5wKTsKQEAgLTI2NSw3ICsyNzQsNyBAQAogCQkgKiBOb3RlIHRoYXQgcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucCgpIHJlbGVhc2VzIHJucC0+bG9jay4KIAkJICovCiAJCWlmIChlbXB0eSkKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQllbHNlCiAJCQlyY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHJucCwgZmxhZ3MpOwogCkBAIC0yOTUsMTYgKzMwNCwyMSBAQAogCWlmICgtLUFDQ0VTU19PTkNFKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZykgPT0gMCAmJgogCSAgICB1bmxpa2VseShBQ0NFU1NfT05DRSh0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCkpKQogCQlyY3VfcmVhZF91bmxvY2tfc3BlY2lhbCh0KTsKKyNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORworCVdBUk5fT05fT05DRShBQ0NFU1NfT05DRSh0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcpIDwgMCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HICovCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3JjdV9yZWFkX3VubG9jayk7CiAKICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgogCisjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRQorCiAvKgotICogU2NhbiB0aGUgY3VycmVudCBsaXN0IG9mIHRhc2tzIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKLSAqIHNlY3Rpb25zLCBwcmludGluZyBvdXQgdGhlIHRpZCBvZiBlYWNoLgorICogRHVtcCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgYWxsIHRhc2tzIGJsb2NraW5nIHRoZSBjdXJyZW50IFJDVQorICogZ3JhY2UgcGVyaW9kIG9uIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3N0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbF9ybnAoc3RydWN0IHJjdV9ub2RlICpybnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpscDsKQEAgLTMxMiwxMiArMzI2LDUxIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCiAJaWYgKHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOworCQlscCA9ICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsIGxwLCByY3Vfbm9kZV9lbnRyeSkKKwkJCXNjaGVkX3Nob3dfdGFzayh0KTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCX0KK30KKworLyoKKyAqIER1bXAgZGV0YWlsZWQgaW5mb3JtYXRpb24gZm9yIGFsbCB0YXNrcyBibG9ja2luZyB0aGUgY3VycmVudCBSQ1UKKyAqIGdyYWNlIHBlcmlvZC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOworCisJcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsX3JucChybnApOworCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApCisJCXJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbF9ybnAocm5wKTsKK30KKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UgKi8KKworc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKK30KKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFICovCisKKy8qCisgKiBTY2FuIHRoZSBjdXJyZW50IGxpc3Qgb2YgdGFza3MgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorICogc2VjdGlvbnMsIHByaW50aW5nIG91dCB0aGUgdGlkIG9mIGVhY2guCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxwOworCWludCBwaGFzZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisKKwlpZiAocmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKIAkJcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOwogCQlscCA9ICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsIGxwLCByY3Vfbm9kZV9lbnRyeSkKIAkJCXByaW50aygiIFAlZCIsIHQtPnBpZCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMzg4LDExICs0NDEsMTEgQEAKIAkJbHBfcm9vdCA9ICZybnBfcm9vdC0+YmxvY2tlZF90YXNrc1tpXTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KGxwKSkgewogCQkJdHAgPSBsaXN0X2VudHJ5KGxwLT5uZXh0LCB0eXBlb2YoKnRwKSwgcmN1X25vZGVfZW50cnkpOwotCQkJc3Bpbl9sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCQkJcmF3X3NwaW5fbG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAkJCWxpc3RfZGVsKCZ0cC0+cmN1X25vZGVfZW50cnkpOwogCQkJdHAtPnJjdV9ibG9ja2VkX25vZGUgPSBybnBfcm9vdDsKIAkJCWxpc3RfYWRkKCZ0cC0+cmN1X25vZGVfZW50cnksIGxwX3Jvb3QpOwotCQkJc3Bpbl91bmxvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwkJCXJhd19zcGluX3VubG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwogCQl9CiAJfQogCXJldHVybiByZXR2YWw7CkBAIC01MTYsNyArNTY5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWZvciAoOzspIHsKIAkJaWYgKCFzeW5jX3JjdV9wcmVlbXB0X2V4cF9kb25lKHJucCkpCiAJCQlicmVhazsKQEAgLTUyNSwxMiArNTc4LDEyIEBACiAJCQlicmVhazsKIAkJfQogCQltYXNrID0gcm5wLT5ncnBtYXNrOwotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwogCQlybnAgPSBybnAtPnBhcmVudDsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJCXJucC0+ZXhwbWFzayAmPSB+bWFzazsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNTQ1LDExICs1OTgsMTEgQEAKIHsKIAlpbnQgbXVzdF93YWl0OwogCi0Jc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAlsaXN0X3NwbGljZV9pbml0KCZybnAtPmJsb2NrZWRfdGFza3NbMF0sICZybnAtPmJsb2NrZWRfdGFza3NbMl0pOwogCWxpc3Rfc3BsaWNlX2luaXQoJnJucC0+YmxvY2tlZF90YXNrc1sxXSwgJnJucC0+YmxvY2tlZF90YXNrc1szXSk7CiAJbXVzdF93YWl0ID0gcmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cChybnApOwotCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAlpZiAoIW11c3Rfd2FpdCkKIAkJcmN1X3JlcG9ydF9leHBfcm5wKHJzcCwgcm5wKTsKIH0KQEAgLTU5NCwxMyArNjQ3LDEzIEBACiAJLyogZm9yY2UgYWxsIFJDVSByZWFkZXJzIG9udG8gYmxvY2tlZF90YXNrc1tdLiAqLwogCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCgpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogCiAJLyogSW5pdGlhbGl6ZSAtPmV4cG1hc2sgZm9yIGFsbCBub24tbGVhZiByY3Vfbm9kZSBzdHJ1Y3R1cmVzLiAqLwogCXJjdV9mb3JfZWFjaF9ub25sZWFmX25vZGVfYnJlYWR0aF9maXJzdChyc3AsIHJucCkgewotCQlzcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCQlybnAtPmV4cG1hc2sgPSBybnAtPnFzbWFza2luaXQ7Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAl9CiAKIAkvKiBTbmFwc2hvdCBjdXJyZW50IHN0YXRlIG9mIC0+YmxvY2tlZF90YXNrc1tdIGxpc3RzLiAqLwpAQCAtNjA5LDcgKzY2Miw3IEBACiAJaWYgKE5VTV9SQ1VfTk9ERVMgPiAxKQogCQlzeW5jX3JjdV9wcmVlbXB0X2V4cF9pbml0KHJzcCwgcmN1X2dldF9yb290KHJzcCkpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAogCS8qIFdhaXQgZm9yIHNuYXBzaG90dGVkIC0+YmxvY2tlZF90YXNrc1tdIGxpc3RzIHRvIGRyYWluLiAqLwogCXJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwpAQCAtNzEzLDYgKzc2NiwxNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkKTsKIAogLyoKKyAqIEZvcmNlIGEgcXVpZXNjZW50IHN0YXRlIGZvciBSQ1UsIHdoaWNoLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHByZWVtcHRpYmxlCisgKiBSQ1UsIGJlY29tZXMgdGhlIHNhbWUgYXMgcmN1LXNjaGVkLgorICovCit2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKK3sKKwlyY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKTsKKworLyoKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgogICogQ1BVcyBiZWluZyBpbiBxdWllc2NlbnQgc3RhdGVzLgogICovCkBAIC03MzQsNyArNzk3LDcgQEAKIC8qIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBubyBxdWlldGluZyBvZiB0YXNrcy4gKi8KIHN0YXRpYyB2b2lkIHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoc3RydWN0IHJjdV9ub2RlICpybnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogfQogCiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwpAQCAtNzQ1LDYgKzgwOCwxNCBAQAogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCiAgKiB0YXNrcyBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgogICovCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworfQorCisvKgorICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCisgKiB0YXNrcyBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgorICovCiBzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKIH0KQEAgLTg4NCwzICs5NTUsMTEzIEBACiB9CiAKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19SQ1VfRkFTVF9OT19IWikKKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhbnkgZnV0dXJlIFJDVS1yZWxhdGVkIHdvcmsgd2lsbCBuZWVkIHRvIGJlIGRvbmUKKyAqIGJ5IHRoZSBjdXJyZW50IENQVSwgZXZlbiBpZiBub25lIG5lZWQgYmUgZG9uZSBpbW1lZGlhdGVseSwgcmV0dXJuaW5nCisgKiAxIGlmIHNvLiAgVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtCisgKiBhbiBleHBvcnRlZCBtZW1iZXIgb2YgdGhlIFJDVSBBUEkuCisgKgorICogQmVjYXVzZSB3ZSBoYXZlIHByZWVtcHRpYmxlIFJDVSwganVzdCBjaGVjayB3aGV0aGVyIHRoaXMgQ1BVIG5lZWRzCisgKiBhbnkgZmxhdm9yIG9mIFJDVS4gIERvIG5vdCBjaGV3IHVwIGxvdHMgb2YgQ1BVIGN5Y2xlcyB3aXRoIHByZWVtcHRpb24KKyAqIGRpc2FibGVkIGluIGEgbW9zdC1saWtlbHkgdmFpbiBhdHRlbXB0IHRvIGNhdXNlIFJDVSBub3QgdG8gbmVlZCB0aGlzIENQVS4KKyAqLworaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSkKK3sKKwlyZXR1cm4gcmN1X25lZWRzX2NwdV9xdWlja19jaGVjayhjcHUpOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY29udGludWUgYSBjYWxsYmFjay1mbHVzaCBvcGVyYXRpb25zIHRvCisgKiBhbGxvdyB0aGUgbGFzdCBDUFUgdG8gZW50ZXIgZHludGljay1pZGxlIG1vZGUuICBCdXQgZmFzdCBkeW50aWNrLWlkbGUKKyAqIGVudHJ5IGlzIG5vdCBjb25maWd1cmVkLCBzbyB3ZSBuZXZlciBkbyBuZWVkIHRvLgorICovCitzdGF0aWMgdm9pZCByY3VfbmVlZHNfY3B1X2ZsdXNoKHZvaWQpCit7Cit9CisKKyNlbHNlIC8qICNpZiAhZGVmaW5lZChDT05GSUdfUkNVX0ZBU1RfTk9fSFopICovCisKKyNkZWZpbmUgUkNVX05FRURTX0NQVV9GTFVTSEVTIDUKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHJjdV9keW50aWNrX2RyYWluKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCByY3VfZHludGlja19ob2xkb2ZmKTsKKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiBhbnkgZnV0dXJlIFJDVS1yZWxhdGVkIHdvcmsgd2lsbCBuZWVkIHRvIGJlIGRvbmUKKyAqIGJ5IHRoZSBjdXJyZW50IENQVSwgZXZlbiBpZiBub25lIG5lZWQgYmUgZG9uZSBpbW1lZGlhdGVseSwgcmV0dXJuaW5nCisgKiAxIGlmIHNvLiAgVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtCisgKiBhbiBleHBvcnRlZCBtZW1iZXIgb2YgdGhlIFJDVSBBUEkuCisgKgorICogQmVjYXVzZSB3ZSBhcmUgbm90IHN1cHBvcnRpbmcgcHJlZW1wdGlibGUgUkNVLCBhdHRlbXB0IHRvIGFjY2VsZXJhdGUKKyAqIGFueSBjdXJyZW50IGdyYWNlIHBlcmlvZHMgc28gdGhhdCBSQ1Ugbm8gbG9uZ2VyIG5lZWRzIHRoaXMgQ1BVLCBidXQKKyAqIG9ubHkgaWYgYWxsIG90aGVyIENQVXMgYXJlIGFscmVhZHkgaW4gZHludGlja3MtaWRsZSBtb2RlLiAgVGhpcyB3aWxsCisgKiBhbGxvdyB0aGUgQ1BVIGNvcmVzIHRvIGJlIHBvd2VyZWQgZG93biBpbW1lZGlhdGVseSwgYXMgb3Bwb3NlZCB0byBhZnRlcgorICogd2FpdGluZyBtYW55IG1pbGxpc2Vjb25kcyBmb3IgZ3JhY2UgcGVyaW9kcyB0byBlbGFwc2UuCisgKgorICogQmVjYXVzZSBpdCBpcyBub3QgbGVnYWwgdG8gaW52b2tlIHJjdV9wcm9jZXNzX2NhbGxiYWNrcygpIHdpdGggaXJxcworICogZGlzYWJsZWQsIHdlIGRvIG9uZSBwYXNzIG9mIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpLCB0aGVuIGRvIGEKKyAqIHJhaXNlX3NvZnRpcnEoKSB0byBjYXVzZSByY3VfcHJvY2Vzc19jYWxsYmFja3MoKSB0byBiZSBpbnZva2VkIGxhdGVyLgorICogVGhlIHBlci1jcHUgcmN1X2R5bnRpY2tfZHJhaW4gdmFyaWFibGUgY29udHJvbHMgdGhlIHNlcXVlbmNpbmcuCisgKi8KK2ludCByY3VfbmVlZHNfY3B1KGludCBjcHUpCit7CisJaW50IGMgPSAwOworCWludCB0aGF0Y3B1OworCisJLyogRG9uJ3QgYm90aGVyIHVubGVzcyB3ZSBhcmUgdGhlIGxhc3Qgbm9uLWR5bnRpY2staWRsZSBDUFUuICovCisJZm9yX2VhY2hfY3B1X25vdCh0aGF0Y3B1LCBub2h6X2NwdV9tYXNrKQorCQlpZiAodGhhdGNwdSAhPSBjcHUpIHsKKwkJCXBlcl9jcHUocmN1X2R5bnRpY2tfZHJhaW4sIGNwdSkgPSAwOworCQkJcGVyX2NwdShyY3VfZHludGlja19ob2xkb2ZmLCBjcHUpID0gamlmZmllcyAtIDE7CisJCQlyZXR1cm4gcmN1X25lZWRzX2NwdV9xdWlja19jaGVjayhjcHUpOworCQl9CisKKwkvKiBDaGVjayBhbmQgdXBkYXRlIHRoZSByY3VfZHludGlja19kcmFpbiBzZXF1ZW5jaW5nLiAqLworCWlmIChwZXJfY3B1KHJjdV9keW50aWNrX2RyYWluLCBjcHUpIDw9IDApIHsKKwkJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIHRoZSBjb3VudGVyLiAqLworCQlwZXJfY3B1KHJjdV9keW50aWNrX2RyYWluLCBjcHUpID0gUkNVX05FRURTX0NQVV9GTFVTSEVTOworCX0gZWxzZSBpZiAoLS1wZXJfY3B1KHJjdV9keW50aWNrX2RyYWluLCBjcHUpIDw9IDApIHsKKwkJLyogV2UgaGF2ZSBoaXQgdGhlIGxpbWl0LCBzbyB0aW1lIHRvIGdpdmUgdXAuICovCisJCXBlcl9jcHUocmN1X2R5bnRpY2tfaG9sZG9mZiwgY3B1KSA9IGppZmZpZXM7CisJCXJldHVybiByY3VfbmVlZHNfY3B1X3F1aWNrX2NoZWNrKGNwdSk7CisJfQorCisJLyogRG8gb25lIHN0ZXAgcHVzaGluZyByZW1haW5pbmcgUkNVIGNhbGxiYWNrcyB0aHJvdWdoLiAqLworCWlmIChwZXJfY3B1KHJjdV9zY2hlZF9kYXRhLCBjcHUpLm54dGxpc3QpIHsKKwkJcmN1X3NjaGVkX3FzKGNwdSk7CisJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZSgmcmN1X3NjaGVkX3N0YXRlLCAwKTsKKwkJYyA9IGMgfHwgcGVyX2NwdShyY3Vfc2NoZWRfZGF0YSwgY3B1KS5ueHRsaXN0OworCX0KKwlpZiAocGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KS5ueHRsaXN0KSB7CisJCXJjdV9iaF9xcyhjcHUpOworCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9iaF9zdGF0ZSwgMCk7CisJCWMgPSBjIHx8IHBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSkubnh0bGlzdDsKKwl9CisKKwkvKiBJZiBSQ1UgY2FsbGJhY2tzIGFyZSBzdGlsbCBwZW5kaW5nLCBSQ1Ugc3RpbGwgbmVlZHMgdGhpcyBDUFUuICovCisJaWYgKGMpIHsKKwkJcmFpc2Vfc29mdGlycShSQ1VfU09GVElSUSk7CisJCXBlcl9jcHUocmN1X2R5bnRpY2tfaG9sZG9mZiwgY3B1KSA9IGppZmZpZXM7CisJfQorCXJldHVybiBjOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY29udGludWUgYSBjYWxsYmFjay1mbHVzaCBvcGVyYXRpb25zIHRvCisgKiBhbGxvdyB0aGUgbGFzdCBDUFUgdG8gZW50ZXIgZHludGljay1pZGxlIG1vZGUuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9uZWVkc19jcHVfZmx1c2godm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocGVyX2NwdShyY3VfZHludGlja19kcmFpbiwgY3B1KSA8PSAwKQorCQlyZXR1cm47CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSh2b2lkKXJjdV9uZWVkc19jcHUoY3B1KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKyNlbmRpZiAvKiAjZWxzZSAjaWYgIWRlZmluZWQoQ09ORklHX1JDVV9GQVNUX05PX0haKSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKaW5kZXggOWQyYzg4NC4uZDQ1ZGIyZSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYworKysgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCkBAIC01MCw3ICs1MCw3IEBACiB7CiAJaWYgKCFyZHAtPmJlZW5vbmxpbmUpCiAJCXJldHVybjsKLQlzZXFfcHJpbnRmKG0sICIlM2QlY2M9JWxkIGc9JWxkIHBxPSVkIHBxYz0lbGQgcXA9JWQiLAorCXNlcV9wcmludGYobSwgIiUzZCVjYz0lbHUgZz0lbHUgcHE9JWQgcHFjPSVsdSBxcD0lZCIsCiAJCSAgIHJkcC0+Y3B1LAogCQkgICBjcHVfaXNfb2ZmbGluZShyZHAtPmNwdSkgPyAnIScgOiAnICcsCiAJCSAgIHJkcC0+Y29tcGxldGVkLCByZHAtPmdwbnVtLApAQCAtMTA1LDcgKzEwNSw3IEBACiB7CiAJaWYgKCFyZHAtPmJlZW5vbmxpbmUpCiAJCXJldHVybjsKLQlzZXFfcHJpbnRmKG0sICIlZCwlcywlbGQsJWxkLCVkLCVsZCwlZCIsCisJc2VxX3ByaW50ZihtLCAiJWQsJXMsJWx1LCVsdSwlZCwlbHUsJWQiLAogCQkgICByZHAtPmNwdSwKIAkJICAgY3B1X2lzX29mZmxpbmUocmRwLT5jcHUpID8gIlwiTlwiIiA6ICJcIllcIiIsCiAJCSAgIHJkcC0+Y29tcGxldGVkLCByZHAtPmdwbnVtLApAQCAtMTU1LDEzICsxNTUsMTMgQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfb25lX3JjdV9zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKLQlsb25nIGdwbnVtOworCXVuc2lnbmVkIGxvbmcgZ3BudW07CiAJaW50IGxldmVsID0gMDsKIAlpbnQgcGhhc2U7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAlncG51bSA9IHJzcC0+Z3BudW07Ci0Jc2VxX3ByaW50ZihtLCAiYz0lbGQgZz0lbGQgcz0lZCBqZnE9JWxkIGo9JXggIgorCXNlcV9wcmludGYobSwgImM9JWx1IGc9JWx1IHM9JWQgamZxPSVsZCBqPSV4ICIKIAkJICAgICAgIm5mcXM9JWx1L25mcXNuZz0lbHUoJWx1KSBmcWxoPSVsdSBvcWxlbj0lbGRcbiIsCiAJCSAgIHJzcC0+Y29tcGxldGVkLCBncG51bSwgcnNwLT5zaWduYWxlZCwKIAkJICAgKGxvbmcpKHJzcC0+amlmZmllc19mb3JjZV9xcyAtIGppZmZpZXMpLApAQCAtMjE1LDEyICsyMTUsMTIgQEAKIHN0YXRpYyBpbnQgc2hvd19yY3VncChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIHsKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQotCXNlcV9wcmludGYobSwgInJjdV9wcmVlbXB0OiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbGRcbiIsCisJc2VxX3ByaW50ZihtLCAicmN1X3ByZWVtcHQ6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsdVxuIiwKIAkJICAgcmN1X3ByZWVtcHRfc3RhdGUuY29tcGxldGVkLCByY3VfcHJlZW1wdF9zdGF0ZS5ncG51bSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCi0Jc2VxX3ByaW50ZihtLCAicmN1X3NjaGVkOiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbGRcbiIsCisJc2VxX3ByaW50ZihtLCAicmN1X3NjaGVkOiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbHVcbiIsCiAJCSAgIHJjdV9zY2hlZF9zdGF0ZS5jb21wbGV0ZWQsIHJjdV9zY2hlZF9zdGF0ZS5ncG51bSk7Ci0Jc2VxX3ByaW50ZihtLCAicmN1X2JoOiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbGRcbiIsCisJc2VxX3ByaW50ZihtLCAicmN1X2JoOiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbHVcbiIsCiAJCSAgIHJjdV9iaF9zdGF0ZS5jb21wbGV0ZWQsIHJjdV9iaF9zdGF0ZS5ncG51bSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzb3VyY2UuYyBiL2tlcm5lbC9yZXNvdXJjZS5jCmluZGV4IGFmOTZjMWUuLjRlOWQ4N2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZXNvdXJjZS5jCisrKyBiL2tlcm5lbC9yZXNvdXJjZS5jCkBAIC0xODgsNiArMTg4LDM2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyB2b2lkIF9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpyKQoreworCXN0cnVjdCByZXNvdXJjZSAqdG1wLCAqcDsKKwlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKKworCXAgPSByLT5jaGlsZDsKKwlyLT5jaGlsZCA9IE5VTEw7CisJd2hpbGUgKHApIHsKKwkJdG1wID0gcDsKKwkJcCA9IHAtPnNpYmxpbmc7CisKKwkJdG1wLT5wYXJlbnQgPSBOVUxMOworCQl0bXAtPnNpYmxpbmcgPSBOVUxMOworCQlfX3JlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKHRtcCk7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJlbGVhc2UgY2hpbGQgcmVzb3VyY2UgJXBSXG4iLCB0bXApOworCQkvKiBuZWVkIHRvIHJlc3RvcmUgc2l6ZSwgYW5kIGtlZXAgZmxhZ3MgKi8KKwkJc2l6ZSA9IHJlc291cmNlX3NpemUodG1wKTsKKwkJdG1wLT5zdGFydCA9IDA7CisJCXRtcC0+ZW5kID0gc2l6ZSAtIDE7CisJfQorfQorCit2b2lkIHJlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwl3cml0ZV9sb2NrKCZyZXNvdXJjZV9sb2NrKTsKKwlfX3JlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKHIpOworCXdyaXRlX3VubG9jaygmcmVzb3VyY2VfbG9jayk7Cit9CisKIC8qKgogICogcmVxdWVzdF9yZXNvdXJjZSAtIHJlcXVlc3QgYW5kIHJlc2VydmUgYW4gSS9PIG9yIG1lbW9yeSByZXNvdXJjZQogICogQHJvb3Q6IHJvb3QgcmVzb3VyY2UgZGVzY3JpcHRvcgpAQCAtMjk3LDE0ICszMjcsMjkgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBpbnQgX19pc19yYW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gMTsKK30KKy8qCisgKiBUaGlzIGdlbmVyaWMgcGFnZV9pc19yYW0oKSByZXR1cm5zIHRydWUgaWYgc3BlY2lmaWVkIGFkZHJlc3MgaXMKKyAqIHJlZ2lzdGVyZWQgYXMgIlN5c3RlbSBSQU0iIGluIGlvbWVtX3Jlc291cmNlIGxpc3QuCisgKi8KK2ludCBfX3dlYWsgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwZm4pCit7CisJcmV0dXJuIHdhbGtfc3lzdGVtX3JhbV9yYW5nZShwZm4sIDEsIE5VTEwsIF9faXNfcmFtKSA9PSAxOworfQorCiAvKgogICogRmluZCBlbXB0eSBzbG90IGluIHRoZSByZXNvdXJjZSB0cmVlIGdpdmVuIHJhbmdlIGFuZCBhbGlnbm1lbnQuCiAgKi8KIHN0YXRpYyBpbnQgZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAogCQkJIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgbWluLAogCQkJIHJlc291cmNlX3NpemVfdCBtYXgsIHJlc291cmNlX3NpemVfdCBhbGlnbiwKLQkJCSB2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAotCQkJCQlyZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCksCisJCQkgcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJCSAgIHJlc291cmNlX3NpemVfdCwKKwkJCQkJCSAgIHJlc291cmNlX3NpemVfdCksCiAJCQkgdm9pZCAqYWxpZ25mX2RhdGEpCiB7CiAJc3RydWN0IHJlc291cmNlICp0aGlzID0gcm9vdC0+Y2hpbGQ7CkBAIC0zMzAsNyArMzc1LDcgQEAKIAkJCXRtcC5lbmQgPSBtYXg7CiAJCXRtcC5zdGFydCA9IEFMSUdOKHRtcC5zdGFydCwgYWxpZ24pOwogCQlpZiAoYWxpZ25mKQotCQkJYWxpZ25mKGFsaWduZl9kYXRhLCAmdG1wLCBzaXplLCBhbGlnbik7CisJCQl0bXAuc3RhcnQgPSBhbGlnbmYoYWxpZ25mX2RhdGEsICZ0bXAsIHNpemUsIGFsaWduKTsKIAkJaWYgKHRtcC5zdGFydCA8IHRtcC5lbmQgJiYgdG1wLmVuZCAtIHRtcC5zdGFydCA+PSBzaXplIC0gMSkgewogCQkJbmV3LT5zdGFydCA9IHRtcC5zdGFydDsKIAkJCW5ldy0+ZW5kID0gdG1wLnN0YXJ0ICsgc2l6ZSAtIDE7CkBAIC0zNTgsOCArNDAzLDEwIEBACiBpbnQgYWxsb2NhdGVfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldywKIAkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBtaW4sCiAJCSAgICAgIHJlc291cmNlX3NpemVfdCBtYXgsIHJlc291cmNlX3NpemVfdCBhbGlnbiwKLQkJICAgICAgdm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKLQkJCQkgICAgIHJlc291cmNlX3NpemVfdCwgcmVzb3VyY2Vfc2l6ZV90KSwKKwkJICAgICAgcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQkJCXJlc291cmNlX3NpemVfdCwKKwkJCQkJCXJlc291cmNlX3NpemVfdCksCiAJCSAgICAgIHZvaWQgKmFsaWduZl9kYXRhKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDNhOGZiMzAuLjZhMjEyYzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0yMzMsNyArMjMzLDcgQEAKICAqLwogc3RhdGljIERFRklORV9NVVRFWChzY2hlZF9kb21haW5zX211dGV4KTsKIAotI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogCkBAIC0yNDMsMTMgKzI0Myw3IEBACiAKIC8qIHRhc2sgZ3JvdXAgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLwogc3RydWN0IHRhc2tfZ3JvdXAgewotI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JdWlkX3QgdWlkOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCS8qIHNjaGVkdWxhYmxlIGVudGl0aWVzIG9mIHRoaXMgZ3JvdXAgb24gZWFjaCBjcHUgKi8KQEAgLTI3NCwzNSArMjY4LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkcmVuOwogfTsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0KLS8qIEhlbHBlciBmdW5jdGlvbiB0byBwYXNzIHVpZCBpbmZvcm1hdGlvbiB0byBjcmVhdGVfc2NoZWRfdXNlcigpICovCi12b2lkIHNldF90Z191aWQoc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKQotewotCXVzZXItPnRnLT51aWQgPSB1c2VyLT51aWQ7Ci19Ci0KLS8qCi0gKiBSb290IHRhc2sgZ3JvdXAuCi0gKglFdmVyeSBVSUQgdGFzayBncm91cCAoaW5jbHVkaW5nIGluaXRfdGFza19ncm91cCBha2EgVUlELTApIHdpbGwKLSAqCWJlIGEgY2hpbGQgdG8gdGhpcyBncm91cC4KLSAqLwotc3RydWN0IHRhc2tfZ3JvdXAgcm9vdF90YXNrX2dyb3VwOwotCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLS8qIERlZmF1bHQgdGFzayBncm91cCdzIHNjaGVkIGVudGl0eSBvbiBlYWNoIGNwdSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9lbnRpdHksIGluaXRfc2NoZWRfZW50aXR5KTsKLS8qIERlZmF1bHQgdGFzayBncm91cCdzIGNmc19ycSBvbiBlYWNoIGNwdSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjZnNfcnEsIGluaXRfdGdfY2ZzX3JxKTsKLSNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwotCi0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX3J0X2VudGl0eSwgaW5pdF9zY2hlZF9ydF9lbnRpdHkpOwotc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBydF9ycSwgaW5pdF9ydF9ycV92YXIpOwotI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwotI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCiAjZGVmaW5lIHJvb3RfdGFza19ncm91cCBpbml0X3Rhc2tfZ3JvdXAKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogCiAvKiB0YXNrX2dyb3VwX2xvY2sgc2VyaWFsaXplcyBhZGQvcmVtb3ZlIG9mIHRhc2sgZ3JvdXBzIGFuZCBhbHNvIGNoYW5nZXMgdG8KICAqIGEgdGFzayBncm91cCdzIGNwdSBzaGFyZXMuCkBAIC0zMTgsMTEgKzI4NCw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0jIGRlZmluZSBJTklUX1RBU0tfR1JPVVBfTE9BRAkoMipOSUNFXzBfTE9BRCkKLSNlbHNlIC8qICFDT05GSUdfVVNFUl9TQ0hFRCAqLwogIyBkZWZpbmUgSU5JVF9UQVNLX0dST1VQX0xPQUQJTklDRV8wX0xPQUQKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogCiAvKgogICogQSB3ZWlnaHQgb2YgMCBvciAxIGNhbiBjYXVzZSBhcml0aG1ldGljcyBwcm9ibGVtcy4KQEAgLTM0OCwxMSArMzEwLDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19ncm91cCAqdGc7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCXJjdV9yZWFkX2xvY2soKTsKLQl0ZyA9IF9fdGFza19jcmVkKHApLT51c2VyLT50ZzsKLQlyY3VfcmVhZF91bmxvY2soKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NHUk9VUF9TQ0hFRCkKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiAJdGcgPSBjb250YWluZXJfb2YodGFza19zdWJzeXNfc3RhdGUocCwgY3B1X2Nncm91cF9zdWJzeXNfaWQpLAogCQkJCXN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOwogI2Vsc2UKQEAgLTM4Myw3ICszNDEsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi0jZW5kaWYJLyogQ09ORklHX0dST1VQX1NDSEVEICovCisjZW5kaWYJLyogQ09ORklHX0NHUk9VUF9TQ0hFRCAqLwogCiAvKiBDRlMtcmVsYXRlZCBmaWVsZHMgaW4gYSBydW5xdWV1ZSAqLwogc3RydWN0IGNmc19ycSB7CkBAIC00NzgsNyArNDM2LDYgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCXN0cnVjdCBsaXN0X2hlYWQgbGVhZl9ydF9ycV9saXN0OwogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKLQlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZTsKICNlbmRpZgogfTsKIApAQCAtNjQ1LDYgKzYwMiwxMSBAQAogI2VuZGlmCiB9CiAKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrX3NjaGVkX2RvbWFpbihwKSBcCisJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKChwKSwgXAorCQkJICAgICAgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkgfHwgXAorCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZzY2hlZF9kb21haW5zX211dGV4KSkKKwogLyoKICAqIFRoZSBkb21haW4gdHJlZSAocnEtPnNkKSBpcyBwcm90ZWN0ZWQgYnkgUkNVJ3MgcXVpZXNjZW50IHN0YXRlIHRyYW5zaXRpb24uCiAgKiBTZWUgZGV0YWNoX2Rlc3Ryb3lfZG9tYWluczogc3luY2hyb25pemVfc2NoZWQgZm9yIGRldGFpbHMuCkBAIC02NTMsNyArNjE1LDcgQEAKICAqIHByZWVtcHQtZGlzYWJsZWQgc2VjdGlvbnMuCiAgKi8KICNkZWZpbmUgZm9yX2VhY2hfZG9tYWluKGNwdSwgX19zZCkgXAotCWZvciAoX19zZCA9IHJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOyBfX3NkOyBfX3NkID0gX19zZC0+cGFyZW50KQorCWZvciAoX19zZCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVja19zY2hlZF9kb21haW4oY3B1X3JxKGNwdSktPnNkKTsgX19zZDsgX19zZCA9IF9fc2QtPnBhcmVudCkKIAogI2RlZmluZSBjcHVfcnEoY3B1KQkJKCZwZXJfY3B1KHJ1bnF1ZXVlcywgKGNwdSkpKQogI2RlZmluZSB0aGlzX3JxKCkJCSgmX19nZXRfY3B1X3ZhcihydW5xdWV1ZXMpKQpAQCAtOTQxLDE2ICs5MDMsMzMgQEAKICNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTVyAqLwogCiAvKgorICogQ2hlY2sgd2hldGhlciB0aGUgdGFzayBpcyB3YWtpbmcsIHdlIHVzZSB0aGlzIHRvIHN5bmNocm9uaXplIGFnYWluc3QKKyAqIHR0d3UoKSBzbyB0aGF0IHRhc2tfY3B1KCkgcmVwb3J0cyBhIHN0YWJsZSBudW1iZXIuCisgKgorICogV2UgbmVlZCB0byBtYWtlIGFuIGV4Y2VwdGlvbiBmb3IgUEZfU1RBUlRJTkcgdGFza3MgYmVjYXVzZSB0aGUgZm9yaworICogcGF0aCBtaWdodCByZXF1aXJlIHRhc2tfcnFfbG9jaygpIHRvIHdvcmssIGVnLiBpdCBjYW4gY2FsbAorICogc2V0X2NwdXNfYWxsb3dlZF9wdHIoKSBmcm9tIHRoZSBjcHVzZXQgY2xvbmVfbnMgY29kZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGFza19pc193YWtpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiB1bmxpa2VseSgocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcpICYmICEocC0+ZmxhZ3MgJiBQRl9TVEFSVElORykpOworfQorCisvKgogICogX190YXNrX3JxX2xvY2sgLSBsb2NrIHRoZSBydW5xdWV1ZSBhIGdpdmVuIHRhc2sgcmVzaWRlcyBvbi4KICAqIE11c3QgYmUgY2FsbGVkIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpfX3Rhc2tfcnFfbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJX19hY3F1aXJlcyhycS0+bG9jaykKIHsKKwlzdHJ1Y3QgcnEgKnJxOworCiAJZm9yICg7OykgewotCQlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKKwkJd2hpbGUgKHRhc2tfaXNfd2FraW5nKHApKQorCQkJY3B1X3JlbGF4KCk7CisJCXJxID0gdGFza19ycShwKTsKIAkJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwotCQlpZiAobGlrZWx5KHJxID09IHRhc2tfcnEocCkpKQorCQlpZiAobGlrZWx5KHJxID09IHRhc2tfcnEocCkgJiYgIXRhc2tfaXNfd2FraW5nKHApKSkKIAkJCXJldHVybiBycTsKIAkJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAJfQpAQCAtOTY3LDEwICs5NDYsMTIgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCiAJZm9yICg7OykgeworCQl3aGlsZSAodGFza19pc193YWtpbmcocCkpCisJCQljcHVfcmVsYXgoKTsKIAkJbG9jYWxfaXJxX3NhdmUoKmZsYWdzKTsKIAkJcnEgPSB0YXNrX3JxKHApOwogCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7Ci0JCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSkpCisJCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSAmJiAhdGFza19pc193YWtpbmcocCkpKQogCQkJcmV0dXJuIHJxOwogCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssICpmbGFncyk7CiAJfQpAQCAtMTM5MCwzMiArMTM3MSw2IEBACiAgLyogIDE1ICovIDExOTMwNDY0NywgMTQ4MTAyMzIwLCAxODY3Mzc3MDgsIDIzODYwOTI5NCwgMjg2MzMxMTUzLAogfTsKIAotc3RhdGljIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApOwotCi0vKgotICogcnVucXVldWUgaXRlcmF0b3IsIHRvIHN1cHBvcnQgU01QIGxvYWQtYmFsYW5jaW5nIGJldHdlZW4gZGlmZmVyZW50Ci0gKiBzY2hlZHVsaW5nIGNsYXNzZXMsIHdpdGhvdXQgaGF2aW5nIHRvIGV4cG9zZSB0aGVpciBpbnRlcm5hbCBkYXRhCi0gKiBzdHJ1Y3R1cmVzIHRvIHRoZSBsb2FkLWJhbGFuY2luZyBwcm9wZXI6Ci0gKi8KLXN0cnVjdCBycV9pdGVyYXRvciB7Ci0Jdm9pZCAqYXJnOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqKCpzdGFydCkodm9pZCAqKTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKigqbmV4dCkodm9pZCAqKTsKLX07Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotYmFsYW5jZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwKLQkgICAgICBpbnQgKnRoaXNfYmVzdF9wcmlvLCBzdHJ1Y3QgcnFfaXRlcmF0b3IgKml0ZXJhdG9yKTsKLQotc3RhdGljIGludAotaXRlcl9tb3ZlX29uZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgc3RydWN0IHJxX2l0ZXJhdG9yICppdGVyYXRvcik7Ci0jZW5kaWYKLQogLyogVGltZSBzcGVudCBieSB0aGUgdGFza3Mgb2YgdGhlIGNwdSBhY2NvdW50aW5nIGdyb3VwIGV4ZWN1dGluZyBpbiAuLi4gKi8KIGVudW0gY3B1YWNjdF9zdGF0X2luZGV4IHsKIAlDUFVBQ0NUX1NUQVRfVVNFUiwJLyogLi4uIHVzZXIgbW9kZSAqLwpAQCAtMTUzMSw3ICsxNDg2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfb2YoaW50IGNwdSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IHJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcmN1X2RlcmVmZXJlbmNlX3NjaGVkKGNwdV9ycShjcHUpLT5zZCk7CiAKIAlpZiAoIXNkKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE3MDEsMTYgKzE2NTYsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3NoYXJlc19sb2NrZWQoc3RydWN0IHJxICpycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCi17Ci0JaWYgKHJvb3RfdGFza19ncm91cF9lbXB0eSgpKQotCQlyZXR1cm47Ci0KLQlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKLQl1cGRhdGVfc2hhcmVzKHNkKTsKLQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7Ci19Ci0KIHN0YXRpYyB2b2lkIHVwZGF0ZV9oX2xvYWQobG9uZyBjcHUpCiB7CiAJaWYgKHJvb3RfdGFza19ncm91cF9lbXB0eSgpKQpAQCAtMTcyNSwxMCArMTY3MCw2IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2hhcmVzX2xvY2tlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKLXsKLX0KLQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtMTgwNSw2ICsxNzQ2LDUxIEBACiAJcmF3X3NwaW5fdW5sb2NrKCZidXNpZXN0LT5sb2NrKTsKIAlsb2NrX3NldF9zdWJjbGFzcygmdGhpc19ycS0+bG9jay5kZXBfbWFwLCAwLCBfUkVUX0lQXyk7CiB9CisKKy8qCisgKiBkb3VibGVfcnFfbG9jayAtIHNhZmVseSBsb2NrIHR3byBydW5xdWV1ZXMKKyAqCisgKiBOb3RlIHRoaXMgZG9lcyBub3QgZGlzYWJsZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV9sb2NrLAorICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYmVmb3JlIGNhbGxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRvdWJsZV9ycV9sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMikKKwlfX2FjcXVpcmVzKHJxMS0+bG9jaykKKwlfX2FjcXVpcmVzKHJxMi0+bG9jaykKK3sKKwlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CisJaWYgKHJxMSA9PSBycTIpIHsKKwkJcmF3X3NwaW5fbG9jaygmcnExLT5sb2NrKTsKKwkJX19hY3F1aXJlKHJxMi0+bG9jayk7CS8qIEZha2UgaXQgb3V0IDspICovCisJfSBlbHNlIHsKKwkJaWYgKHJxMSA8IHJxMikgeworCQkJcmF3X3NwaW5fbG9jaygmcnExLT5sb2NrKTsKKwkJCXJhd19zcGluX2xvY2tfbmVzdGVkKCZycTItPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwkJfSBlbHNlIHsKKwkJCXJhd19zcGluX2xvY2soJnJxMi0+bG9jayk7CisJCQlyYXdfc3Bpbl9sb2NrX25lc3RlZCgmcnExLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJCX0KKwl9CisJdXBkYXRlX3JxX2Nsb2NrKHJxMSk7CisJdXBkYXRlX3JxX2Nsb2NrKHJxMik7Cit9CisKKy8qCisgKiBkb3VibGVfcnFfdW5sb2NrIC0gc2FmZWx5IHVubG9jayB0d28gcnVucXVldWVzCisgKgorICogTm90ZSB0aGlzIGRvZXMgbm90IHJlc3RvcmUgaW50ZXJydXB0cyBsaWtlIHRhc2tfcnFfdW5sb2NrLAorICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYWZ0ZXIgY2FsbGluZy4KKyAqLworc3RhdGljIHZvaWQgZG91YmxlX3JxX3VubG9jayhzdHJ1Y3QgcnEgKnJxMSwgc3RydWN0IHJxICpycTIpCisJX19yZWxlYXNlcyhycTEtPmxvY2spCisJX19yZWxlYXNlcyhycTItPmxvY2spCit7CisJcmF3X3NwaW5fdW5sb2NrKCZycTEtPmxvY2spOworCWlmIChycTEgIT0gcnEyKQorCQlyYXdfc3Bpbl91bmxvY2soJnJxMi0+bG9jayk7CisJZWxzZQorCQlfX3JlbGVhc2UocnEyLT5sb2NrKTsKK30KKwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRApAQCAtMTgzNCwxOCArMTgyMCwxNCBAQAogI2VuZGlmCiB9CiAKLSNpbmNsdWRlICJzY2hlZF9zdGF0cy5oIgotI2luY2x1ZGUgInNjaGVkX2lkbGV0YXNrLmMiCi0jaW5jbHVkZSAic2NoZWRfZmFpci5jIgotI2luY2x1ZGUgInNjaGVkX3J0LmMiCi0jaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCi0jIGluY2x1ZGUgInNjaGVkX2RlYnVnLmMiCi0jZW5kaWYKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgcnRfc2NoZWRfY2xhc3M7CiAKICNkZWZpbmUgc2NoZWRfY2xhc3NfaGlnaGVzdCAoJnJ0X3NjaGVkX2NsYXNzKQogI2RlZmluZSBmb3JfZWFjaF9jbGFzcyhjbGFzcykgXAogICAgZm9yIChjbGFzcyA9IHNjaGVkX2NsYXNzX2hpZ2hlc3Q7IGNsYXNzOyBjbGFzcyA9IGNsYXNzLT5uZXh0KQogCisjaW5jbHVkZSAic2NoZWRfc3RhdHMuaCIKKwogc3RhdGljIHZvaWQgaW5jX25yX3J1bm5pbmcoc3RydWN0IHJxICpycSkKIHsKIAlycS0+bnJfcnVubmluZysrOwpAQCAtMTg4MywxMyArMTg2NSwxNCBAQAogCSphdmcgKz0gZGlmZiA+PiAzOwogfQogCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKQorc3RhdGljIHZvaWQKK2VucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXAsIGJvb2wgaGVhZCkKIHsKIAlpZiAod2FrZXVwKQogCQlwLT5zZS5zdGFydF9ydW50aW1lID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKIAogCXNjaGVkX2luZm9fcXVldWVkKHApOwotCXAtPnNjaGVkX2NsYXNzLT5lbnF1ZXVlX3Rhc2socnEsIHAsIHdha2V1cCk7CisJcC0+c2NoZWRfY2xhc3MtPmVucXVldWVfdGFzayhycSwgcCwgd2FrZXVwLCBoZWFkKTsKIAlwLT5zZS5vbl9ycSA9IDE7CiB9CiAKQEAgLTE5MTIsNiArMTg5NSwzNyBAQAogfQogCiAvKgorICogYWN0aXZhdGVfdGFzayAtIG1vdmUgYSB0YXNrIHRvIHRoZSBydW5xdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApCit7CisJaWYgKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkKKwkJcnEtPm5yX3VuaW50ZXJydXB0aWJsZS0tOworCisJZW5xdWV1ZV90YXNrKHJxLCBwLCB3YWtldXAsIGZhbHNlKTsKKwlpbmNfbnJfcnVubmluZyhycSk7Cit9CisKKy8qCisgKiBkZWFjdGl2YXRlX3Rhc2sgLSByZW1vdmUgYSB0YXNrIGZyb20gdGhlIHJ1bnF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBkZWFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2xlZXApCit7CisJaWYgKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkKKwkJcnEtPm5yX3VuaW50ZXJydXB0aWJsZSsrOworCisJZGVxdWV1ZV90YXNrKHJxLCBwLCBzbGVlcCk7CisJZGVjX25yX3J1bm5pbmcocnEpOworfQorCisjaW5jbHVkZSAic2NoZWRfaWRsZXRhc2suYyIKKyNpbmNsdWRlICJzY2hlZF9mYWlyLmMiCisjaW5jbHVkZSAic2NoZWRfcnQuYyIKKyNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKKyMgaW5jbHVkZSAic2NoZWRfZGVidWcuYyIKKyNlbmRpZgorCisvKgogICogX19ub3JtYWxfcHJpbyAtIHJldHVybiB0aGUgcHJpb3JpdHkgdGhhdCBpcyBiYXNlZCBvbiB0aGUgc3RhdGljIHByaW8KICAqLwogc3RhdGljIGlubGluZSBpbnQgX19ub3JtYWxfcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCkBAIC0xOTU3LDMwICsxOTcxLDYgQEAKIAlyZXR1cm4gcC0+cHJpbzsKIH0KIAotLyoKLSAqIGFjdGl2YXRlX3Rhc2sgLSBtb3ZlIGEgdGFzayB0byB0aGUgcnVucXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIGFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKQotewotCWlmICh0YXNrX2NvbnRyaWJ1dGVzX3RvX2xvYWQocCkpCi0JCXJxLT5ucl91bmludGVycnVwdGlibGUtLTsKLQotCWVucXVldWVfdGFzayhycSwgcCwgd2FrZXVwKTsKLQlpbmNfbnJfcnVubmluZyhycSk7Ci19Ci0KLS8qCi0gKiBkZWFjdGl2YXRlX3Rhc2sgLSByZW1vdmUgYSB0YXNrIGZyb20gdGhlIHJ1bnF1ZXVlLgotICovCi1zdGF0aWMgdm9pZCBkZWFjdGl2YXRlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2xlZXApCi17Ci0JaWYgKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkKLQkJcnEtPm5yX3VuaW50ZXJydXB0aWJsZSsrOwotCi0JZGVxdWV1ZV90YXNrKHJxLCBwLCBzbGVlcCk7Ci0JZGVjX25yX3J1bm5pbmcocnEpOwotfQotCiAvKioKICAqIHRhc2tfY3VyciAtIGlzIHRoaXMgdGFzayBjdXJyZW50bHkgZXhlY3V0aW5nIG9uIGEgQ1BVPwogICogQHA6IHRoZSB0YXNrIGluIHF1ZXN0aW9uLgpAQCAtMjQwOCwxNCArMjM5OCwyNyBAQAogCV9fdGFza19ycV91bmxvY2socnEpOwogCiAJY3B1ID0gc2VsZWN0X3Rhc2tfcnEocCwgU0RfQkFMQU5DRV9XQUtFLCB3YWtlX2ZsYWdzKTsKLQlpZiAoY3B1ICE9IG9yaWdfY3B1KQorCWlmIChjcHUgIT0gb3JpZ19jcHUpIHsKKwkJLyoKKwkJICogU2luY2Ugd2UgbWlncmF0ZSB0aGUgdGFzayB3aXRob3V0IGhvbGRpbmcgYW55IHJxLT5sb2NrLAorCQkgKiB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0YXNrX3JxX2xvY2soKSwgc2luY2UgdGhhdAorCQkgKiBtaWdodCBlbmQgdXAgbG9ja2luZyBhbiBpbnZhbGlkIHJxLgorCQkgKi8KIAkJc2V0X3Rhc2tfY3B1KHAsIGNwdSk7CisJfQogCi0JcnEgPSBfX3Rhc2tfcnFfbG9jayhwKTsKKwlycSA9IGNwdV9ycShjcHUpOworCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCisJLyoKKwkgKiBXZSBtaWdyYXRlZCB0aGUgdGFzayB3aXRob3V0IGhvbGRpbmcgZWl0aGVyIHJxLT5sb2NrLCBob3dldmVyCisJICogc2luY2UgdGhlIHRhc2sgaXMgbm90IG9uIHRoZSB0YXNrIGxpc3QgaXRzZWxmLCBub2JvZHkgZWxzZQorCSAqIHdpbGwgdHJ5IGFuZCBtaWdyYXRlIHRoZSB0YXNrLCBoZW5jZSB0aGUgcnEgc2hvdWxkIG1hdGNoIHRoZQorCSAqIGNwdSB3ZSBqdXN0IG1vdmVkIGl0IHRvLgorCSAqLworCVdBUk5fT04odGFza19jcHUocCkgIT0gY3B1KTsKIAlXQVJOX09OKHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HKTsKLQljcHUgPSB0YXNrX2NwdShwKTsKIAogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAJc2NoZWRzdGF0X2luYyhycSwgdHR3dV9jb3VudCk7CkBAIC0yNjYzLDcgKzI2NjYsMTMgQEAKIAlzZXRfdGFza19jcHUocCwgY3B1KTsKICNlbmRpZgogCi0JcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKwkvKgorCSAqIFNpbmNlIHRoZSB0YXNrIGlzIG5vdCBvbiB0aGUgcnEgYW5kIHdlIHN0aWxsIGhhdmUgVEFTS19XQUtJTkcgc2V0CisJICogbm9ib2R5IGVsc2Ugd2lsbCBtaWdyYXRlIHRoaXMgdGFzay4KKwkgKi8KKwlycSA9IGNwdV9ycShjcHUpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwogCUJVR19PTihwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyk7CiAJcC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKQEAgLTI3OTQsNyArMjgwMywxMyBAQAogCSAqLwogCXByZXZfc3RhdGUgPSBwcmV2LT5zdGF0ZTsKIAlmaW5pc2hfYXJjaF9zd2l0Y2gocHJldik7Ci0JcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKGN1cnJlbnQsIGNwdV9vZihycSkpOworI2lmZGVmIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworI2VuZGlmIC8qIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cgKi8KKwlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oY3VycmVudCk7CisjaWZkZWYgX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVworCWxvY2FsX2lycV9lbmFibGUoKTsKKyNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9JTlRFUlJVUFRTX09OX0NUWFNXICovCiAJZmluaXNoX2xvY2tfc3dpdGNoKHJxLCBwcmV2KTsKIAogCWZpcmVfc2NoZWRfaW5fcHJlZW1wdF9ub3RpZmllcnMoY3VycmVudCk7CkBAIC0zMDk5LDUwICszMTE0LDYgQEAKICNpZmRlZiBDT05GSUdfU01QCiAKIC8qCi0gKiBkb3VibGVfcnFfbG9jayAtIHNhZmVseSBsb2NrIHR3byBydW5xdWV1ZXMKLSAqCi0gKiBOb3RlIHRoaXMgZG9lcyBub3QgZGlzYWJsZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV9sb2NrLAotICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYmVmb3JlIGNhbGxpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIGRvdWJsZV9ycV9sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMikKLQlfX2FjcXVpcmVzKHJxMS0+bG9jaykKLQlfX2FjcXVpcmVzKHJxMi0+bG9jaykKLXsKLQlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7Ci0JaWYgKHJxMSA9PSBycTIpIHsKLQkJcmF3X3NwaW5fbG9jaygmcnExLT5sb2NrKTsKLQkJX19hY3F1aXJlKHJxMi0+bG9jayk7CS8qIEZha2UgaXQgb3V0IDspICovCi0JfSBlbHNlIHsKLQkJaWYgKHJxMSA8IHJxMikgewotCQkJcmF3X3NwaW5fbG9jaygmcnExLT5sb2NrKTsKLQkJCXJhd19zcGluX2xvY2tfbmVzdGVkKCZycTItPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKLQkJfSBlbHNlIHsKLQkJCXJhd19zcGluX2xvY2soJnJxMi0+bG9jayk7Ci0JCQlyYXdfc3Bpbl9sb2NrX25lc3RlZCgmcnExLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7Ci0JCX0KLQl9Ci0JdXBkYXRlX3JxX2Nsb2NrKHJxMSk7Ci0JdXBkYXRlX3JxX2Nsb2NrKHJxMik7Ci19Ci0KLS8qCi0gKiBkb3VibGVfcnFfdW5sb2NrIC0gc2FmZWx5IHVubG9jayB0d28gcnVucXVldWVzCi0gKgotICogTm90ZSB0aGlzIGRvZXMgbm90IHJlc3RvcmUgaW50ZXJydXB0cyBsaWtlIHRhc2tfcnFfdW5sb2NrLAotICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYWZ0ZXIgY2FsbGluZy4KLSAqLwotc3RhdGljIHZvaWQgZG91YmxlX3JxX3VubG9jayhzdHJ1Y3QgcnEgKnJxMSwgc3RydWN0IHJxICpycTIpCi0JX19yZWxlYXNlcyhycTEtPmxvY2spCi0JX19yZWxlYXNlcyhycTItPmxvY2spCi17Ci0JcmF3X3NwaW5fdW5sb2NrKCZycTEtPmxvY2spOwotCWlmIChycTEgIT0gcnEyKQotCQlyYXdfc3Bpbl91bmxvY2soJnJxMi0+bG9jayk7Ci0JZWxzZQotCQlfX3JlbGVhc2UocnEyLT5sb2NrKTsKLX0KLQotLyoKICAqIHNjaGVkX2V4ZWMgLSBleGVjdmUoKSBpcyBhIHZhbHVhYmxlIGJhbGFuY2luZyBvcHBvcnR1bml0eSwgYmVjYXVzZSBhdAogICogdGhpcyBwb2ludCB0aGUgdGFzayBoYXMgdGhlIHNtYWxsZXN0IGVmZmVjdGl2ZSBtZW1vcnkgYW5kIGNhY2hlIGZvb3RwcmludC4KICAqLwpAQCAtMzE5MCwxNzcxICszMTYxLDYgQEAKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIH0KIAotLyoKLSAqIHB1bGxfdGFzayAtIG1vdmUgYSB0YXNrIGZyb20gYSByZW1vdGUgcnVucXVldWUgdG8gdGhlIGxvY2FsIHJ1bnF1ZXVlLgotICogQm90aCBydW5xdWV1ZXMgbXVzdCBiZSBsb2NrZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHB1bGxfdGFzayhzdHJ1Y3QgcnEgKnNyY19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAotCQkgICAgICBzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSkKLXsKLQlkZWFjdGl2YXRlX3Rhc2soc3JjX3JxLCBwLCAwKTsKLQlzZXRfdGFza19jcHUocCwgdGhpc19jcHUpOwotCWFjdGl2YXRlX3Rhc2sodGhpc19ycSwgcCwgMCk7Ci0JY2hlY2tfcHJlZW1wdF9jdXJyKHRoaXNfcnEsIHAsIDApOwotfQotCi0vKgotICogY2FuX21pZ3JhdGVfdGFzayAtIG1heSB0YXNrIHAgZnJvbSBydW5xdWV1ZSBycSBiZSBtaWdyYXRlZCB0byB0aGlzX2NwdT8KLSAqLwotc3RhdGljCi1pbnQgY2FuX21pZ3JhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEsIGludCB0aGlzX2NwdSwKLQkJICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgICAgaW50ICphbGxfcGlubmVkKQotewotCWludCB0c2tfY2FjaGVfaG90ID0gMDsKLQkvKgotCSAqIFdlIGRvIG5vdCBtaWdyYXRlIHRhc2tzIHRoYXQgYXJlOgotCSAqIDEpIHJ1bm5pbmcgKG9idmlvdXNseSksIG9yCi0JICogMikgY2Fubm90IGJlIG1pZ3JhdGVkIHRvIHRoaXMgQ1BVIGR1ZSB0byBjcHVzX2FsbG93ZWQsIG9yCi0JICogMykgYXJlIGNhY2hlLWhvdCBvbiB0aGVpciBjdXJyZW50IENQVS4KLQkgKi8KLQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsICZwLT5jcHVzX2FsbG93ZWQpKSB7Ci0JCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfYWZmaW5lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCSphbGxfcGlubmVkID0gMDsKLQotCWlmICh0YXNrX3J1bm5pbmcocnEsIHApKSB7Ci0JCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfcnVubmluZyk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogQWdncmVzc2l2ZSBtaWdyYXRpb24gaWY6Ci0JICogMSkgdGFzayBpcyBjYWNoZSBjb2xkLCBvcgotCSAqIDIpIHRvbyBtYW55IGJhbGFuY2UgYXR0ZW1wdHMgaGF2ZSBmYWlsZWQuCi0JICovCi0KLQl0c2tfY2FjaGVfaG90ID0gdGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCk7Ci0JaWYgKCF0c2tfY2FjaGVfaG90IHx8Ci0JCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKSB7Ci0jaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKLQkJaWYgKHRza19jYWNoZV9ob3QpIHsKLQkJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2hvdF9nYWluZWRbaWRsZV0pOwotCQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mb3JjZWRfbWlncmF0aW9ucyk7Ci0JCX0KLSNlbmRpZgotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAodHNrX2NhY2hlX2hvdCkgewotCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2hvdCk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWJhbGFuY2VfdGFza3Moc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkgICAgICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKmFsbF9waW5uZWQsCi0JICAgICAgaW50ICp0aGlzX2Jlc3RfcHJpbywgc3RydWN0IHJxX2l0ZXJhdG9yICppdGVyYXRvcikKLXsKLQlpbnQgbG9vcHMgPSAwLCBwdWxsZWQgPSAwLCBwaW5uZWQgPSAwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlsb25nIHJlbV9sb2FkX21vdmUgPSBtYXhfbG9hZF9tb3ZlOwotCi0JaWYgKG1heF9sb2FkX21vdmUgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQlwaW5uZWQgPSAxOwotCi0JLyoKLQkgKiBTdGFydCB0aGUgbG9hZC1iYWxhbmNpbmcgaXRlcmF0b3I6Ci0JICovCi0JcCA9IGl0ZXJhdG9yLT5zdGFydChpdGVyYXRvci0+YXJnKTsKLW5leHQ6Ci0JaWYgKCFwIHx8IGxvb3BzKysgPiBzeXNjdGxfc2NoZWRfbnJfbWlncmF0ZSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoKHAtPnNlLmxvYWQud2VpZ2h0ID4+IDEpID4gcmVtX2xvYWRfbW92ZSB8fAotCSAgICAhY2FuX21pZ3JhdGVfdGFzayhwLCBidXNpZXN0LCB0aGlzX2NwdSwgc2QsIGlkbGUsICZwaW5uZWQpKSB7Ci0JCXAgPSBpdGVyYXRvci0+bmV4dChpdGVyYXRvci0+YXJnKTsKLQkJZ290byBuZXh0OwotCX0KLQotCXB1bGxfdGFzayhidXNpZXN0LCBwLCB0aGlzX3JxLCB0aGlzX2NwdSk7Ci0JcHVsbGVkKys7Ci0JcmVtX2xvYWRfbW92ZSAtPSBwLT5zZS5sb2FkLndlaWdodDsKLQotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JLyoKLQkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZSBrZXJuZWxzCi0JICogd2lsbCBzdG9wIGFmdGVyIHRoZSBmaXJzdCB0YXNrIGlzIHB1bGxlZCB0byBtaW5pbWl6ZSB0aGUgY3JpdGljYWwKLQkgKiBzZWN0aW9uLgotCSAqLwotCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFKQotCQlnb3RvIG91dDsKLSNlbmRpZgotCi0JLyoKLQkgKiBXZSBvbmx5IHdhbnQgdG8gc3RlYWwgdXAgdG8gdGhlIHByZXNjcmliZWQgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQuCi0JICovCi0JaWYgKHJlbV9sb2FkX21vdmUgPiAwKSB7Ci0JCWlmIChwLT5wcmlvIDwgKnRoaXNfYmVzdF9wcmlvKQotCQkJKnRoaXNfYmVzdF9wcmlvID0gcC0+cHJpbzsKLQkJcCA9IGl0ZXJhdG9yLT5uZXh0KGl0ZXJhdG9yLT5hcmcpOwotCQlnb3RvIG5leHQ7Ci0JfQotb3V0OgotCS8qCi0JICogUmlnaHQgbm93LCB0aGlzIGlzIG9uZSBvZiBvbmx5IHR3byBwbGFjZXMgcHVsbF90YXNrKCkgaXMgY2FsbGVkLAotCSAqIHNvIHdlIGNhbiBzYWZlbHkgY29sbGVjdCBwdWxsX3Rhc2soKSBzdGF0cyBoZXJlIHJhdGhlciB0aGFuCi0JICogaW5zaWRlIHB1bGxfdGFzaygpLgotCSAqLwotCXNjaGVkc3RhdF9hZGQoc2QsIGxiX2dhaW5lZFtpZGxlXSwgcHVsbGVkKTsKLQotCWlmIChhbGxfcGlubmVkKQotCQkqYWxsX3Bpbm5lZCA9IHBpbm5lZDsKLQotCXJldHVybiBtYXhfbG9hZF9tb3ZlIC0gcmVtX2xvYWRfbW92ZTsKLX0KLQotLyoKLSAqIG1vdmVfdGFza3MgdHJpZXMgdG8gbW92ZSB1cCB0byBtYXhfbG9hZF9tb3ZlIHdlaWdodGVkIGxvYWQgZnJvbSBidXNpZXN0IHRvCi0gKiB0aGlzX3JxLCBhcyBwYXJ0IG9mIGEgYmFsYW5jaW5nIG9wZXJhdGlvbiB3aXRoaW4gZG9tYWluICJzZCIuCi0gKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBhbmQgMCBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVkIHdpdGggYm90aCBydW5xdWV1ZXMgbG9ja2VkLgotICovCi1zdGF0aWMgaW50IG1vdmVfdGFza3Moc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAotCQkgICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgICAgIGludCAqYWxsX3Bpbm5lZCkKLXsKLQljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzID0gc2NoZWRfY2xhc3NfaGlnaGVzdDsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX2xvYWRfbW92ZWQgPSAwOwotCWludCB0aGlzX2Jlc3RfcHJpbyA9IHRoaXNfcnEtPmN1cnItPnByaW87Ci0KLQlkbyB7Ci0JCXRvdGFsX2xvYWRfbW92ZWQgKz0KLQkJCWNsYXNzLT5sb2FkX2JhbGFuY2UodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCi0JCQkJbWF4X2xvYWRfbW92ZSAtIHRvdGFsX2xvYWRfbW92ZWQsCi0JCQkJc2QsIGlkbGUsIGFsbF9waW5uZWQsICZ0aGlzX2Jlc3RfcHJpbyk7Ci0JCWNsYXNzID0gY2xhc3MtPm5leHQ7Ci0KLSNpZmRlZiBDT05GSUdfUFJFRU1QVAotCQkvKgotCQkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZQotCQkgKiBrZXJuZWxzIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUKLQkJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24uCi0JCSAqLwotCQlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSAmJiB0aGlzX3JxLT5ucl9ydW5uaW5nKQotCQkJYnJlYWs7Ci0jZW5kaWYKLQl9IHdoaWxlIChjbGFzcyAmJiBtYXhfbG9hZF9tb3ZlID4gdG90YWxfbG9hZF9tb3ZlZCk7Ci0KLQlyZXR1cm4gdG90YWxfbG9hZF9tb3ZlZCA+IDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWl0ZXJfbW92ZV9vbmVfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQkgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgIHN0cnVjdCBycV9pdGVyYXRvciAqaXRlcmF0b3IpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwID0gaXRlcmF0b3ItPnN0YXJ0KGl0ZXJhdG9yLT5hcmcpOwotCWludCBwaW5uZWQgPSAwOwotCi0Jd2hpbGUgKHApIHsKLQkJaWYgKGNhbl9taWdyYXRlX3Rhc2socCwgYnVzaWVzdCwgdGhpc19jcHUsIHNkLCBpZGxlLCAmcGlubmVkKSkgewotCQkJcHVsbF90YXNrKGJ1c2llc3QsIHAsIHRoaXNfcnEsIHRoaXNfY3B1KTsKLQkJCS8qCi0JCQkgKiBSaWdodCBub3csIHRoaXMgaXMgb25seSB0aGUgc2Vjb25kIHBsYWNlIHB1bGxfdGFzaygpCi0JCQkgKiBpcyBjYWxsZWQsIHNvIHdlIGNhbiBzYWZlbHkgY29sbGVjdCBwdWxsX3Rhc2soKQotCQkJICogc3RhdHMgaGVyZSByYXRoZXIgdGhhbiBpbnNpZGUgcHVsbF90YXNrKCkuCi0JCQkgKi8KLQkJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2dhaW5lZFtpZGxlXSk7Ci0KLQkJCXJldHVybiAxOwotCQl9Ci0JCXAgPSBpdGVyYXRvci0+bmV4dChpdGVyYXRvci0+YXJnKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIG1vdmVfb25lX3Rhc2sgdHJpZXMgdG8gbW92ZSBleGFjdGx5IG9uZSB0YXNrIGZyb20gYnVzaWVzdCB0byB0aGlzX3JxLCBhcwotICogcGFydCBvZiBhY3RpdmUgYmFsYW5jaW5nIG9wZXJhdGlvbnMgd2l0aGluICJkb21haW4iLgotICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgYW5kIDAgb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlZCB3aXRoIGJvdGggcnVucXVldWVzIGxvY2tlZC4KLSAqLwotc3RhdGljIGludCBtb3ZlX29uZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCQkgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqY2xhc3M7Ci0KLQlmb3JfZWFjaF9jbGFzcyhjbGFzcykgewotCQlpZiAoY2xhc3MtPm1vdmVfb25lX3Rhc2sodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsIHNkLCBpZGxlKSkKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotLyoqKioqKioqKiogSGVscGVycyBmb3IgZmluZF9idXNpZXN0X2dyb3VwICoqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBzZF9sYl9zdGF0cyAtIFN0cnVjdHVyZSB0byBzdG9yZSB0aGUgc3RhdGlzdGljcyBvZiBhIHNjaGVkX2RvbWFpbgotICogCQlkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCi0gKi8KLXN0cnVjdCBzZF9sYl9zdGF0cyB7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpidXNpZXN0OyAvKiBCdXNpZXN0IGdyb3VwIGluIHRoaXMgc2QgKi8KLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnRoaXM7ICAvKiBMb2NhbCBncm91cCBpbiB0aGlzIHNkICovCi0JdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkOyAgLyogVG90YWwgbG9hZCBvZiBhbGwgZ3JvdXBzIGluIHNkICovCi0JdW5zaWduZWQgbG9uZyB0b3RhbF9wd3I7ICAgLyoJVG90YWwgcG93ZXIgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLwotCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7CSAgIC8qIEF2ZXJhZ2UgbG9hZCBhY3Jvc3MgYWxsIGdyb3VwcyBpbiBzZCAqLwotCi0JLyoqIFN0YXRpc3RpY3Mgb2YgdGhpcyBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkOwotCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkX3Blcl90YXNrOwotCXVuc2lnbmVkIGxvbmcgdGhpc19ucl9ydW5uaW5nOwotCi0JLyogU3RhdGlzdGljcyBvZiB0aGUgYnVzaWVzdCBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQ7Ci0JdW5zaWduZWQgbG9uZyBidXNpZXN0X2xvYWRfcGVyX3Rhc2s7Ci0JdW5zaWduZWQgbG9uZyBidXNpZXN0X25yX3J1bm5pbmc7Ci0KLQlpbnQgZ3JvdXBfaW1iOyAvKiBJcyB0aGVyZSBpbWJhbGFuY2UgaW4gdGhpcyBzZCAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0JaW50IHBvd2VyX3NhdmluZ3NfYmFsYW5jZTsgLyogSXMgcG93ZXJzYXZlIGJhbGFuY2UgbmVlZGVkIGZvciB0aGlzIHNkICovCi0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9taW47IC8qIExlYXN0IGxvYWRlZCBncm91cCBpbiBzZCAqLwotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbGVhZGVyOyAvKiBHcm91cCB3aGljaCByZWxpZXZlcyBncm91cF9taW4gKi8KLQl1bnNpZ25lZCBsb25nIG1pbl9sb2FkX3Blcl90YXNrOyAvKiBsb2FkX3Blcl90YXNrIGluIGdyb3VwX21pbiAqLwotCXVuc2lnbmVkIGxvbmcgbGVhZGVyX25yX3J1bm5pbmc7IC8qIE5yIHJ1bm5pbmcgb2YgZ3JvdXBfbGVhZGVyICovCi0JdW5zaWduZWQgbG9uZyBtaW5fbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9taW4gKi8KLSNlbmRpZgotfTsKLQotLyoKLSAqIHNnX2xiX3N0YXRzIC0gc3RhdHMgb2YgYSBzY2hlZF9ncm91cCByZXF1aXJlZCBmb3IgbG9hZF9iYWxhbmNpbmcKLSAqLwotc3RydWN0IHNnX2xiX3N0YXRzIHsKLQl1bnNpZ25lZCBsb25nIGF2Z19sb2FkOyAvKkF2ZyBsb2FkIGFjcm9zcyB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KLQl1bnNpZ25lZCBsb25nIGdyb3VwX2xvYWQ7IC8qIFRvdGFsIGxvYWQgb3ZlciB0aGUgQ1BVcyBvZiB0aGUgZ3JvdXAgKi8KLQl1bnNpZ25lZCBsb25nIHN1bV9ucl9ydW5uaW5nOyAvKiBOciB0YXNrcyBydW5uaW5nIGluIHRoZSBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgc3VtX3dlaWdodGVkX2xvYWQ7IC8qIFdlaWdodGVkIGxvYWQgb2YgZ3JvdXAncyB0YXNrcyAqLwotCXVuc2lnbmVkIGxvbmcgZ3JvdXBfY2FwYWNpdHk7Ci0JaW50IGdyb3VwX2ltYjsgLyogSXMgdGhlcmUgYW4gaW1iYWxhbmNlIGluIHRoZSBncm91cCA/ICovCi19OwotCi0vKioKLSAqIGdyb3VwX2ZpcnN0X2NwdSAtIFJldHVybnMgdGhlIGZpcnN0IGNwdSBpbiB0aGUgY3B1bWFzayBvZiBhIHNjaGVkX2dyb3VwLgotICogQGdyb3VwOiBUaGUgZ3JvdXAgd2hvc2UgZmlyc3QgY3B1IGlzIHRvIGJlIHJldHVybmVkLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBncm91cF9maXJzdF9jcHUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCkKLXsKLQlyZXR1cm4gY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7Ci19Ci0KLS8qKgotICogZ2V0X3NkX2xvYWRfaWR4IC0gT2J0YWluIHRoZSBsb2FkIGluZGV4IGZvciBhIGdpdmVuIHNjaGVkIGRvbWFpbi4KLSAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBsb2FkX2lkeCBpcyB0byBiZSBvYnRhaW5lZC4KLSAqIEBpZGxlOiBUaGUgSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBmb3Igd2hvc2Ugc2QgbG9hZF9pY3ggaXMgb2J0YWluZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdldF9zZF9sb2FkX2lkeChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JaW50IGxvYWRfaWR4OwotCi0Jc3dpdGNoIChpZGxlKSB7Ci0JY2FzZSBDUFVfTk9UX0lETEU6Ci0JCWxvYWRfaWR4ID0gc2QtPmJ1c3lfaWR4OwotCQlicmVhazsKLQotCWNhc2UgQ1BVX05FV0xZX0lETEU6Ci0JCWxvYWRfaWR4ID0gc2QtPm5ld2lkbGVfaWR4OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlsb2FkX2lkeCA9IHNkLT5pZGxlX2lkeDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGxvYWRfaWR4OwotfQotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotLyoqCi0gKiBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBJbml0aWFsaXplIHBvd2VyIHNhdmluZ3Mgc3RhdGlzdGljcyBmb3IKLSAqIHRoZSBnaXZlbiBzY2hlZF9kb21haW4sIGR1cmluZyBsb2FkIGJhbGFuY2luZy4KLSAqCi0gKiBAc2Q6IFNjaGVkIGRvbWFpbiB3aG9zZSBwb3dlci1zYXZpbmdzIHN0YXRpc3RpY3MgYXJlIHRvIGJlIGluaXRpYWxpemVkLgotICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBmb3Igc2QuCi0gKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIENQVSBhdCB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jaW5nLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQkvKgotCSAqIEJ1c3kgcHJvY2Vzc29ycyB3aWxsIG5vdCBwYXJ0aWNpcGF0ZSBpbiBwb3dlciBzYXZpbmdzCi0JICogYmFsYW5jZS4KLQkgKi8KLQlpZiAoaWRsZSA9PSBDUFVfTk9UX0lETEUgfHwgIShzZC0+ZmxhZ3MgJiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKLQllbHNlIHsKLQkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAxOwotCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gVUxPTkdfTUFYOwotCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gMDsKLQl9Ci19Ci0KLS8qKgotICogdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMgLSBVcGRhdGUgdGhlIHBvd2VyIHNhdmluZyBzdGF0cyBmb3IgYQotICogc2NoZWRfZG9tYWluIHdoaWxlIHBlcmZvcm1pbmcgbG9hZCBiYWxhbmNpbmcuCi0gKgotICogQGdyb3VwOiBzY2hlZF9ncm91cCBiZWxvbmdpbmcgdG8gdGhlIHNjaGVkX2RvbWFpbiB1bmRlciBjb25zaWRlcmF0aW9uLgotICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCi0gKiBAbG9jYWxfZ3JvdXA6IERvZXMgZ3JvdXAgY29udGFpbiB0aGUgQ1BVIGZvciB3aGljaCB3ZSdyZSBwZXJmb3JtaW5nCi0gKiAJCWxvYWQgYmFsYW5jaW5nID8KLSAqIEBzZ3M6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIGdyb3VwLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKLQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKLXsKLQotCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UpCi0JCXJldHVybjsKLQotCS8qCi0JICogSWYgdGhlIGxvY2FsIGdyb3VwIGlzIGlkbGUgb3IgY29tcGxldGVseSBsb2FkZWQKLQkgKiBubyBuZWVkIHRvIGRvIHBvd2VyIHNhdmluZ3MgYmFsYW5jZSBhdCB0aGlzIGRvbWFpbgotCSAqLwotCWlmIChsb2NhbF9ncm91cCAmJiAoc2RzLT50aGlzX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAotCQkJCSFzZHMtPnRoaXNfbnJfcnVubmluZykpCi0JCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMDsKLQotCS8qCi0JICogSWYgYSBncm91cCBpcyBhbHJlYWR5IHJ1bm5pbmcgYXQgZnVsbCBjYXBhY2l0eSBvciBpZGxlLAotCSAqIGRvbid0IGluY2x1ZGUgdGhhdCBncm91cCBpbiBwb3dlciBzYXZpbmdzIGNhbGN1bGF0aW9ucwotCSAqLwotCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgfHwKLQkJc2dzLT5zdW1fbnJfcnVubmluZyA+PSBzZ3MtPmdyb3VwX2NhcGFjaXR5IHx8Ci0JCSFzZ3MtPnN1bV9ucl9ydW5uaW5nKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaGFzIHRoZSBsZWFzdCBub24taWRsZSBsb2FkLgotCSAqIFRoaXMgaXMgdGhlIGdyb3VwIGZyb20gd2hlcmUgd2UgbmVlZCB0byBwaWNrIHVwIHRoZSBsb2FkCi0JICogZm9yIHNhdmluZyBwb3dlcgotCSAqLwotCWlmICgoc2dzLT5zdW1fbnJfcnVubmluZyA8IHNkcy0+bWluX25yX3J1bm5pbmcpIHx8Ci0JICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bWluX25yX3J1bm5pbmcgJiYKLQkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPiBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9taW4pKSkgewotCQlzZHMtPmdyb3VwX21pbiA9IGdyb3VwOwotCQlzZHMtPm1pbl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKLQkJc2RzLT5taW5fbG9hZF9wZXJfdGFzayA9IHNncy0+c3VtX3dlaWdodGVkX2xvYWQgLwotCQkJCQkJc2dzLT5zdW1fbnJfcnVubmluZzsKLQl9Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSB0aGUgZ3JvdXAgd2hpY2ggaXMgYWxtb3N0IG5lYXIgaXRzCi0JICogY2FwYWNpdHkgYnV0IHN0aWxsIGhhcyBzb21lIHNwYWNlIHRvIHBpY2sgdXAgc29tZSBsb2FkCi0JICogZnJvbSBvdGhlciBncm91cCBhbmQgc2F2ZSBtb3JlIHBvd2VyCi0JICovCi0JaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgKyAxID4gc2dzLT5ncm91cF9jYXBhY2l0eSkKLQkJcmV0dXJuOwotCi0JaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgPiBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nIHx8Ci0JICAgIChzZ3MtPnN1bV9ucl9ydW5uaW5nID09IHNkcy0+bGVhZGVyX25yX3J1bm5pbmcgJiYKLQkgICAgIGdyb3VwX2ZpcnN0X2NwdShncm91cCkgPCBncm91cF9maXJzdF9jcHUoc2RzLT5ncm91cF9sZWFkZXIpKSkgewotCQlzZHMtPmdyb3VwX2xlYWRlciA9IGdyb3VwOwotCQlzZHMtPmxlYWRlcl9ucl9ydW5uaW5nID0gc2dzLT5zdW1fbnJfcnVubmluZzsKLQl9Ci19Ci0KLS8qKgotICogY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwIC0gc2VlIGlmIHRoZXJlIGlzIHBvdGVudGlhbCBmb3Igc29tZSBwb3dlci1zYXZpbmdzIGJhbGFuY2UKLSAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbgotICoJdW5kZXIgY29uc2lkZXJhdGlvbi4KLSAqIEB0aGlzX2NwdTogQ3B1IGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jaW5nLgotICogQGltYmFsYW5jZTogVmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIENoZWNrIGlmIHdlIGhhdmUgcG90ZW50aWFsIHRvIHBlcmZvcm0gc29tZSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCi0gKiBJZiB5ZXMsIHNldCB0aGUgYnVzaWVzdCBncm91cCB0byBiZSB0aGUgbGVhc3QgbG9hZGVkIGdyb3VwIGluIHRoZQotICogc2NoZWRfZG9tYWluLCBzbyB0aGF0IGl0J3MgQ1BVcyBjYW4gYmUgcHV0IHRvIGlkbGUuCi0gKgotICogUmV0dXJucyAxIGlmIHRoZXJlIGlzIHBvdGVudGlhbCB0byBwZXJmb3JtIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4KLSAqIEVsc2UgcmV0dXJucyAwLgotICovCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCi0JCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQotewotCWlmICghc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UpCi0JCXJldHVybiAwOwotCi0JaWYgKHNkcy0+dGhpcyAhPSBzZHMtPmdyb3VwX2xlYWRlciB8fAotCQkJc2RzLT5ncm91cF9sZWFkZXIgPT0gc2RzLT5ncm91cF9taW4pCi0JCXJldHVybiAwOwotCi0JKmltYmFsYW5jZSA9IHNkcy0+bWluX2xvYWRfcGVyX3Rhc2s7Ci0Jc2RzLT5idXNpZXN0ID0gc2RzLT5ncm91cF9taW47Ci0KLQlyZXR1cm4gMTsKLQotfQotI2Vsc2UgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0Jc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCi0Jc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCBsb2NhbF9ncm91cCwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCi0JCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQotewotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UICovCi0KLQotdW5zaWduZWQgbG9uZyBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCi17Ci0JcmV0dXJuIFNDSEVEX0xPQURfU0NBTEU7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX193ZWFrIGFyY2hfc2NhbGVfZnJlcV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQlyZXR1cm4gZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOwotfQotCi11bnNpZ25lZCBsb25nIGRlZmF1bHRfc2NhbGVfc210X3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXVuc2lnbmVkIGxvbmcgd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKLQl1bnNpZ25lZCBsb25nIHNtdF9nYWluID0gc2QtPnNtdF9nYWluOwotCi0Jc210X2dhaW4gLz0gd2VpZ2h0OwotCi0JcmV0dXJuIHNtdF9nYWluOwotfQotCi11bnNpZ25lZCBsb25nIF9fd2VhayBhcmNoX3NjYWxlX3NtdF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQlyZXR1cm4gZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgc2NhbGVfcnRfcG93ZXIoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7Ci0JdTY0IHRvdGFsLCBhdmFpbGFibGU7Ci0KLQlzY2hlZF9hdmdfdXBkYXRlKHJxKTsKLQotCXRvdGFsID0gc2NoZWRfYXZnX3BlcmlvZCgpICsgKHJxLT5jbG9jayAtIHJxLT5hZ2Vfc3RhbXApOwotCWF2YWlsYWJsZSA9IHRvdGFsIC0gcnEtPnJ0X2F2ZzsKLQotCWlmICh1bmxpa2VseSgoczY0KXRvdGFsIDwgU0NIRURfTE9BRF9TQ0FMRSkpCi0JCXRvdGFsID0gU0NIRURfTE9BRF9TQ0FMRTsKLQotCXRvdGFsID4+PSBTQ0hFRF9MT0FEX1NISUZUOwotCi0JcmV0dXJuIGRpdl91NjQoYXZhaWxhYmxlLCB0b3RhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jcHVfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCi17Ci0JdW5zaWduZWQgbG9uZyB3ZWlnaHQgPSBjcHVtYXNrX3dlaWdodChzY2hlZF9kb21haW5fc3BhbihzZCkpOwotCXVuc2lnbmVkIGxvbmcgcG93ZXIgPSBTQ0hFRF9MT0FEX1NDQUxFOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqc2RnID0gc2QtPmdyb3VwczsKLQotCWlmIChzY2hlZF9mZWF0KEFSQ0hfUE9XRVIpKQotCQlwb3dlciAqPSBhcmNoX3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7Ci0JZWxzZQotCQlwb3dlciAqPSBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7Ci0KLQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKLQotCWlmICgoc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIpICYmIHdlaWdodCA+IDEpIHsKLQkJaWYgKHNjaGVkX2ZlYXQoQVJDSF9QT1dFUikpCi0JCQlwb3dlciAqPSBhcmNoX3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKLQkJZWxzZQotCQkJcG93ZXIgKj0gZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7Ci0KLQkJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7Ci0JfQotCi0JcG93ZXIgKj0gc2NhbGVfcnRfcG93ZXIoY3B1KTsKLQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKLQotCWlmICghcG93ZXIpCi0JCXBvd2VyID0gMTsKLQotCXNkZy0+Y3B1X3Bvd2VyID0gcG93ZXI7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpjaGlsZCA9IHNkLT5jaGlsZDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCAqc2RnID0gc2QtPmdyb3VwczsKLQl1bnNpZ25lZCBsb25nIHBvd2VyOwotCi0JaWYgKCFjaGlsZCkgewotCQl1cGRhdGVfY3B1X3Bvd2VyKHNkLCBjcHUpOwotCQlyZXR1cm47Ci0JfQotCi0JcG93ZXIgPSAwOwotCi0JZ3JvdXAgPSBjaGlsZC0+Z3JvdXBzOwotCWRvIHsKLQkJcG93ZXIgKz0gZ3JvdXAtPmNwdV9wb3dlcjsKLQkJZ3JvdXAgPSBncm91cC0+bmV4dDsKLQl9IHdoaWxlIChncm91cCAhPSBjaGlsZC0+Z3JvdXBzKTsKLQotCXNkZy0+Y3B1X3Bvd2VyID0gcG93ZXI7Ci19Ci0KLS8qKgotICogdXBkYXRlX3NnX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCi0gKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KLSAqIEBncm91cDogc2NoZWRfZ3JvdXAgd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KLSAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KLSAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQotICogQGxvYWRfaWR4OiBMb2FkIGluZGV4IG9mIHNjaGVkX2RvbWFpbiBvZiB0aGlzX2NwdSBmb3IgbG9hZCBjYWxjLgotICogQHNkX2lkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBzY2hlZF9kb21haW4gY29udGFpbmluZyBncm91cC4KLSAqIEBsb2NhbF9ncm91cDogRG9lcyBncm91cCBjb250YWluIHRoaXNfY3B1LgotICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgotICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgotICogQHNnczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBncm91cC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZ19sYl9zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGludCB0aGlzX2NwdSwKLQkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgbG9hZF9pZHgsIGludCAqc2RfaWRsZSwKLQkJCWludCBsb2NhbF9ncm91cCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsCi0JCQlpbnQgKmJhbGFuY2UsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQotewotCXVuc2lnbmVkIGxvbmcgbG9hZCwgbWF4X2NwdV9sb2FkLCBtaW5fY3B1X2xvYWQ7Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IGJhbGFuY2VfY3B1ID0gLTEsIGZpcnN0X2lkbGVfY3B1ID0gMDsKLQl1bnNpZ25lZCBsb25nIHN1bV9hdmdfbG9hZF9wZXJfdGFzazsKLQl1bnNpZ25lZCBsb25nIGF2Z19sb2FkX3Blcl90YXNrOwotCi0JaWYgKGxvY2FsX2dyb3VwKSB7Ci0JCWJhbGFuY2VfY3B1ID0gZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKTsKLQkJaWYgKGJhbGFuY2VfY3B1ID09IHRoaXNfY3B1KQotCQkJdXBkYXRlX2dyb3VwX3Bvd2VyKHNkLCB0aGlzX2NwdSk7Ci0JfQotCi0JLyogVGFsbHkgdXAgdGhlIGxvYWQgb2YgYWxsIENQVXMgaW4gdGhlIGdyb3VwICovCi0Jc3VtX2F2Z19sb2FkX3Blcl90YXNrID0gYXZnX2xvYWRfcGVyX3Rhc2sgPSAwOwotCW1heF9jcHVfbG9hZCA9IDA7Ci0JbWluX2NwdV9sb2FkID0gfjBVTDsKLQotCWZvcl9lYWNoX2NwdV9hbmQoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCksIGNwdXMpIHsKLQkJc3RydWN0IHJxICpycSA9IGNwdV9ycShpKTsKLQotCQlpZiAoKnNkX2lkbGUgJiYgcnEtPm5yX3J1bm5pbmcpCi0JCQkqc2RfaWRsZSA9IDA7Ci0KLQkJLyogQmlhcyBiYWxhbmNpbmcgdG93YXJkIGNwdXMgb2Ygb3VyIGRvbWFpbiAqLwotCQlpZiAobG9jYWxfZ3JvdXApIHsKLQkJCWlmIChpZGxlX2NwdShpKSAmJiAhZmlyc3RfaWRsZV9jcHUpIHsKLQkJCQlmaXJzdF9pZGxlX2NwdSA9IDE7Ci0JCQkJYmFsYW5jZV9jcHUgPSBpOwotCQkJfQotCi0JCQlsb2FkID0gdGFyZ2V0X2xvYWQoaSwgbG9hZF9pZHgpOwotCQl9IGVsc2UgewotCQkJbG9hZCA9IHNvdXJjZV9sb2FkKGksIGxvYWRfaWR4KTsKLQkJCWlmIChsb2FkID4gbWF4X2NwdV9sb2FkKQotCQkJCW1heF9jcHVfbG9hZCA9IGxvYWQ7Ci0JCQlpZiAobWluX2NwdV9sb2FkID4gbG9hZCkKLQkJCQltaW5fY3B1X2xvYWQgPSBsb2FkOwotCQl9Ci0KLQkJc2dzLT5ncm91cF9sb2FkICs9IGxvYWQ7Ci0JCXNncy0+c3VtX25yX3J1bm5pbmcgKz0gcnEtPm5yX3J1bm5pbmc7Ci0JCXNncy0+c3VtX3dlaWdodGVkX2xvYWQgKz0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKLQotCQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgKz0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKGkpOwotCX0KLQotCS8qCi0JICogRmlyc3QgaWRsZSBjcHUgb3IgdGhlIGZpcnN0IGNwdShidXNpZXN0KSBpbiB0aGlzIHNjaGVkIGdyb3VwCi0JICogaXMgZWxpZ2libGUgZm9yIGRvaW5nIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXMgYW5kIGFib3ZlCi0JICogZG9tYWlucy4gSW4gdGhlIG5ld2x5IGlkbGUgY2FzZSwgd2Ugd2lsbCBhbGxvdyBhbGwgdGhlIGNwdSdzCi0JICogdG8gZG8gdGhlIG5ld2x5IGlkbGUgbG9hZCBiYWxhbmNlLgotCSAqLwotCWlmIChpZGxlICE9IENQVV9ORVdMWV9JRExFICYmIGxvY2FsX2dyb3VwICYmCi0JICAgIGJhbGFuY2VfY3B1ICE9IHRoaXNfY3B1ICYmIGJhbGFuY2UpIHsKLQkJKmJhbGFuY2UgPSAwOwotCQlyZXR1cm47Ci0JfQotCi0JLyogQWRqdXN0IGJ5IHJlbGF0aXZlIENQVSBwb3dlciBvZiB0aGUgZ3JvdXAgKi8KLQlzZ3MtPmF2Z19sb2FkID0gKHNncy0+Z3JvdXBfbG9hZCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gZ3JvdXAtPmNwdV9wb3dlcjsKLQotCi0JLyoKLQkgKiBDb25zaWRlciB0aGUgZ3JvdXAgdW5iYWxhbmNlZCB3aGVuIHRoZSBpbWJhbGFuY2UgaXMgbGFyZ2VyCi0JICogdGhhbiB0aGUgYXZlcmFnZSB3ZWlnaHQgb2YgdHdvIHRhc2tzLgotCSAqCi0JICogQVBaOiB3aXRoIGNncm91cCB0aGUgYXZnIHRhc2sgd2VpZ2h0IGNhbiB2YXJ5IHdpbGRseSBhbmQKLQkgKiAgICAgIG1pZ2h0IG5vdCBiZSBhIHN1aXRhYmxlIG51bWJlciAtIHNob3VsZCB3ZSBrZWVwIGEKLQkgKiAgICAgIG5vcm1hbGl6ZWQgbnJfcnVubmluZyBudW1iZXIgc29tZXdoZXJlIHRoYXQgbmVnYXRlcwotCSAqICAgICAgdGhlIGhpZXJhcmNoeT8KLQkgKi8KLQlhdmdfbG9hZF9wZXJfdGFzayA9IChzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCi0JCWdyb3VwLT5jcHVfcG93ZXI7Ci0KLQlpZiAoKG1heF9jcHVfbG9hZCAtIG1pbl9jcHVfbG9hZCkgPiAyKmF2Z19sb2FkX3Blcl90YXNrKQotCQlzZ3MtPmdyb3VwX2ltYiA9IDE7Ci0KLQlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0KLQkJRElWX1JPVU5EX0NMT1NFU1QoZ3JvdXAtPmNwdV9wb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7Ci19Ci0KLS8qKgotICogdXBkYXRlX3NkX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCi0gKiBAc2Q6IHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgotICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgotICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1Ci0gKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgotICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgotICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgotICogQHNkczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBzY2hlZF9kb21haW4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCB0aGlzX2NwdSwKLQkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKnNkX2lkbGUsCi0JCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICpiYWxhbmNlLAotCQkJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCA9IHNkLT5ncm91cHM7Ci0Jc3RydWN0IHNnX2xiX3N0YXRzIHNnczsKLQlpbnQgbG9hZF9pZHgsIHByZWZlcl9zaWJsaW5nID0gMDsKLQotCWlmIChjaGlsZCAmJiBjaGlsZC0+ZmxhZ3MgJiBTRF9QUkVGRVJfU0lCTElORykKLQkJcHJlZmVyX3NpYmxpbmcgPSAxOwotCi0JaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHNkLCBzZHMsIGlkbGUpOwotCWxvYWRfaWR4ID0gZ2V0X3NkX2xvYWRfaWR4KHNkLCBpZGxlKTsKLQotCWRvIHsKLQkJaW50IGxvY2FsX2dyb3VwOwotCi0JCWxvY2FsX2dyb3VwID0gY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKLQkJCQkJICAgICAgIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKLQkJbWVtc2V0KCZzZ3MsIDAsIHNpemVvZihzZ3MpKTsKLQkJdXBkYXRlX3NnX2xiX3N0YXRzKHNkLCBncm91cCwgdGhpc19jcHUsIGlkbGUsIGxvYWRfaWR4LCBzZF9pZGxlLAotCQkJCWxvY2FsX2dyb3VwLCBjcHVzLCBiYWxhbmNlLCAmc2dzKTsKLQotCQlpZiAobG9jYWxfZ3JvdXAgJiYgYmFsYW5jZSAmJiAhKCpiYWxhbmNlKSkKLQkJCXJldHVybjsKLQotCQlzZHMtPnRvdGFsX2xvYWQgKz0gc2dzLmdyb3VwX2xvYWQ7Ci0JCXNkcy0+dG90YWxfcHdyICs9IGdyb3VwLT5jcHVfcG93ZXI7Ci0KLQkJLyoKLQkJICogSW4gY2FzZSB0aGUgY2hpbGQgZG9tYWluIHByZWZlcnMgdGFza3MgZ28gdG8gc2libGluZ3MKLQkJICogZmlyc3QsIGxvd2VyIHRoZSBncm91cCBjYXBhY2l0eSB0byBvbmUgc28gdGhhdCB3ZSdsbCB0cnkKLQkJICogYW5kIG1vdmUgYWxsIHRoZSBleGNlc3MgdGFza3MgYXdheS4KLQkJICovCi0JCWlmIChwcmVmZXJfc2libGluZykKLQkJCXNncy5ncm91cF9jYXBhY2l0eSA9IG1pbihzZ3MuZ3JvdXBfY2FwYWNpdHksIDFVTCk7Ci0KLQkJaWYgKGxvY2FsX2dyb3VwKSB7Ci0JCQlzZHMtPnRoaXNfbG9hZCA9IHNncy5hdmdfbG9hZDsKLQkJCXNkcy0+dGhpcyA9IGdyb3VwOwotCQkJc2RzLT50aGlzX25yX3J1bm5pbmcgPSBzZ3Muc3VtX25yX3J1bm5pbmc7Ci0JCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayA9IHNncy5zdW1fd2VpZ2h0ZWRfbG9hZDsKLQkJfSBlbHNlIGlmIChzZ3MuYXZnX2xvYWQgPiBzZHMtPm1heF9sb2FkICYmCi0JCQkgICAoc2dzLnN1bV9ucl9ydW5uaW5nID4gc2dzLmdyb3VwX2NhcGFjaXR5IHx8Ci0JCQkJc2dzLmdyb3VwX2ltYikpIHsKLQkJCXNkcy0+bWF4X2xvYWQgPSBzZ3MuYXZnX2xvYWQ7Ci0JCQlzZHMtPmJ1c2llc3QgPSBncm91cDsKLQkJCXNkcy0+YnVzaWVzdF9ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOwotCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7Ci0JCQlzZHMtPmdyb3VwX2ltYiA9IHNncy5ncm91cF9pbWI7Ci0JCX0KLQotCQl1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhncm91cCwgc2RzLCBsb2NhbF9ncm91cCwgJnNncyk7Ci0JCWdyb3VwID0gZ3JvdXAtPm5leHQ7Ci0JfSB3aGlsZSAoZ3JvdXAgIT0gc2QtPmdyb3Vwcyk7Ci19Ci0KLS8qKgotICogZml4X3NtYWxsX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgbWlub3IgaW1iYWxhbmNlIHRoYXQgZXhpc3RzCi0gKgkJCWFtb25nc3QgdGhlIGdyb3VwcyBvZiBhIHNjaGVkX2RvbWFpbiwgZHVyaW5nCi0gKgkJCWxvYWQgYmFsYW5jaW5nLgotICogQHNkczogU3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgotICogQHRoaXNfY3B1OiBUaGUgY3B1IGF0IHdob3NlIHNjaGVkX2RvbWFpbiB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jZS4KLSAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmaXhfc21hbGxfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAotCQkJCWludCB0aGlzX2NwdSwgdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQotewotCXVuc2lnbmVkIGxvbmcgdG1wLCBwd3Jfbm93ID0gMCwgcHdyX21vdmUgPSAwOwotCXVuc2lnbmVkIGludCBpbWJuID0gMjsKLQotCWlmIChzZHMtPnRoaXNfbnJfcnVubmluZykgewotCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayAvPSBzZHMtPnRoaXNfbnJfcnVubmluZzsKLQkJaWYgKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID4KLQkJCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaykKLQkJCWltYm4gPSAxOwotCX0gZWxzZQotCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayA9Ci0JCQljcHVfYXZnX2xvYWRfcGVyX3Rhc2sodGhpc19jcHUpOwotCi0JaWYgKHNkcy0+bWF4X2xvYWQgLSBzZHMtPnRoaXNfbG9hZCArIHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID49Ci0JCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIGltYm4pIHsKLQkJKmltYmFsYW5jZSA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBPSywgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW1iYWxhbmNlIHRvIGp1c3RpZnkgbW92aW5nIHRhc2tzLAotCSAqIGhvd2V2ZXIgd2UgbWF5IGJlIGFibGUgdG8gaW5jcmVhc2UgdG90YWwgQ1BVIHBvd2VyIHVzZWQgYnkKLQkgKiBtb3ZpbmcgdGhlbS4KLQkgKi8KLQotCXB3cl9ub3cgKz0gc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgKgotCQkJbWluKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMtPm1heF9sb2FkKTsKLQlwd3Jfbm93ICs9IHNkcy0+dGhpcy0+Y3B1X3Bvd2VyICoKLQkJCW1pbihzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaywgc2RzLT50aGlzX2xvYWQpOwotCXB3cl9ub3cgLz0gU0NIRURfTE9BRF9TQ0FMRTsKLQotCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2Qgc3VidHJhY3QgKi8KLQl0bXAgPSAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCi0JCXNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyOwotCWlmIChzZHMtPm1heF9sb2FkID4gdG1wKQotCQlwd3JfbW92ZSArPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciAqCi0JCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQgLSB0bXApOwotCi0JLyogQW1vdW50IG9mIGxvYWQgd2UnZCBhZGQgKi8KLQlpZiAoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyIDwKLQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKQotCQl0bXAgPSAoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyKSAvCi0JCQlzZHMtPnRoaXMtPmNwdV9wb3dlcjsKLQllbHNlCi0JCXRtcCA9IChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpIC8KLQkJCXNkcy0+dGhpcy0+Y3B1X3Bvd2VyOwotCXB3cl9tb3ZlICs9IHNkcy0+dGhpcy0+Y3B1X3Bvd2VyICoKLQkJCW1pbihzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaywgc2RzLT50aGlzX2xvYWQgKyB0bXApOwotCXB3cl9tb3ZlIC89IFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkvKiBNb3ZlIGlmIHdlIGdhaW4gdGhyb3VnaHB1dCAqLwotCWlmIChwd3JfbW92ZSA+IHB3cl9ub3cpCi0JCSppbWJhbGFuY2UgPSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzazsKLX0KLQotLyoqCi0gKiBjYWxjdWxhdGVfaW1iYWxhbmNlIC0gQ2FsY3VsYXRlIHRoZSBhbW91bnQgb2YgaW1iYWxhbmNlIHByZXNlbnQgd2l0aGluIHRoZQotICoJCQkgZ3JvdXBzIG9mIGEgZ2l2ZW4gc2NoZWRfZG9tYWluIGR1cmluZyBsb2FkIGJhbGFuY2UuCi0gKiBAc2RzOiBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4gd2hvc2UgaW1iYWxhbmNlIGlzIHRvIGJlIGNhbGN1bGF0ZWQuCi0gKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggY3VycmVudGx5IGxvYWQgYmFsYW5jZSBpcyBiZWluZyBwZXJmb3JtZWQuCi0gKiBAaW1iYWxhbmNlOiBUaGUgdmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZV9pbWJhbGFuY2Uoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCB0aGlzX2NwdSwKLQkJdW5zaWduZWQgbG9uZyAqaW1iYWxhbmNlKQotewotCXVuc2lnbmVkIGxvbmcgbWF4X3B1bGw7Ci0JLyoKLQkgKiBJbiB0aGUgcHJlc2VuY2Ugb2Ygc21wIG5pY2UgYmFsYW5jaW5nLCBjZXJ0YWluIHNjZW5hcmlvcyBjYW4gaGF2ZQotCSAqIG1heCBsb2FkIGxlc3MgdGhhbiBhdmcgbG9hZChhcyB3ZSBza2lwIHRoZSBncm91cHMgYXQgb3IgYmVsb3cKLQkgKiBpdHMgY3B1X3Bvd2VyLCB3aGlsZSBjYWxjdWxhdGluZyBtYXhfbG9hZC4uKQotCSAqLwotCWlmIChzZHMtPm1heF9sb2FkIDwgc2RzLT5hdmdfbG9hZCkgewotCQkqaW1iYWxhbmNlID0gMDsKLQkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKLQl9Ci0KLQkvKiBEb24ndCB3YW50IHRvIHB1bGwgc28gbWFueSB0YXNrcyB0aGF0IGEgZ3JvdXAgd291bGQgZ28gaWRsZSAqLwotCW1heF9wdWxsID0gbWluKHNkcy0+bWF4X2xvYWQgLSBzZHMtPmF2Z19sb2FkLAotCQkJc2RzLT5tYXhfbG9hZCAtIHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrKTsKLQotCS8qIEhvdyBtdWNoIGxvYWQgdG8gYWN0dWFsbHkgbW92ZSB0byBlcXVhbGlzZSB0aGUgaW1iYWxhbmNlICovCi0JKmltYmFsYW5jZSA9IG1pbihtYXhfcHVsbCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyLAotCQkoc2RzLT5hdmdfbG9hZCAtIHNkcy0+dGhpc19sb2FkKSAqIHNkcy0+dGhpcy0+Y3B1X3Bvd2VyKQotCQkJLyBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JLyoKLQkgKiBpZiAqaW1iYWxhbmNlIGlzIGxlc3MgdGhhbiB0aGUgYXZlcmFnZSBsb2FkIHBlciBydW5uYWJsZSB0YXNrCi0JICogdGhlcmUgaXMgbm8gZ2F1cmFudGVlIHRoYXQgYW55IHRhc2tzIHdpbGwgYmUgbW92ZWQgc28gd2UnbGwgaGF2ZQotCSAqIGEgdGhpbmsgYWJvdXQgYnVtcGluZyBpdHMgdmFsdWUgdG8gZm9yY2UgYXQgbGVhc3Qgb25lIHRhc2sgdG8gYmUKLQkgKiBtb3ZlZAotCSAqLwotCWlmICgqaW1iYWxhbmNlIDwgc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2spCi0JCXJldHVybiBmaXhfc21hbGxfaW1iYWxhbmNlKHNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7Ci0KLX0KLS8qKioqKioqIGZpbmRfYnVzaWVzdF9ncm91cCgpIGhlbHBlcnMgZW5kIGhlcmUgKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqIGZpbmRfYnVzaWVzdF9ncm91cCAtIFJldHVybnMgdGhlIGJ1c2llc3QgZ3JvdXAgd2l0aGluIHRoZSBzY2hlZF9kb21haW4KLSAqIGlmIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4gSWYgdGhlcmUgaXNuJ3QgYW4gaW1iYWxhbmNlLCBhbmQKLSAqIHRoZSB1c2VyIGhhcyBvcHRlZCBmb3IgcG93ZXItc2F2aW5ncywgaXQgcmV0dXJucyBhIGdyb3VwIHdob3NlCi0gKiBDUFVzIGNhbiBiZSBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyB0aG9zZSB0YXNrcyBlbHNld2hlcmUsIGlmCi0gKiBzdWNoIGEgZ3JvdXAgZXhpc3RzLgotICoKLSAqIEFsc28gY2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQgd2hpY2ggc2hvdWxkIGJlIG1vdmVkCi0gKiB0byByZXN0b3JlIGJhbGFuY2UuCi0gKgotICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIGJ1c2llc3QgZ3JvdXAgaXMgdG8gYmUgcmV0dXJuZWQuCi0gKiBAdGhpc19jcHU6IFRoZSBjcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jaW5nIGlzIGN1cnJlbnRseSBiZWluZyBwZXJmb3JtZWQuCi0gKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB3aGljaCBzdG9yZXMgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQgd2hpY2ggc2hvdWxkCi0gKgkJYmUgbW92ZWQgdG8gcmVzdG9yZSBiYWxhbmNlL3B1dCBhIGdyb3VwIHRvIGlkbGUuCi0gKiBAaWRsZTogVGhlIGlkbGUgc3RhdHVzIG9mIHRoaXNfY3B1LgotICogQHNkX2lkbGU6IFRoZSBpZGxlbmVzcyBvZiBzZAotICogQGNwdXM6IFRoZSBzZXQgb2YgQ1BVcyB1bmRlciBjb25zaWRlcmF0aW9uIGZvciBsb2FkLWJhbGFuY2luZy4KLSAqIEBiYWxhbmNlOiBQb2ludGVyIHRvIGEgdmFyaWFibGUgaW5kaWNhdGluZyBpZiB0aGlzX2NwdQotICoJaXMgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXNfbGV2ZWwuCi0gKgotICogUmV0dXJuczoJLSB0aGUgYnVzaWVzdCBncm91cCBpZiBpbWJhbGFuY2UgZXhpc3RzLgotICoJCS0gSWYgbm8gaW1iYWxhbmNlIGFuZCB1c2VyIGhhcyBvcHRlZCBmb3IgcG93ZXItc2F2aW5ncyBiYWxhbmNlLAotICoJCSAgIHJldHVybiB0aGUgbGVhc3QgbG9hZGVkIGdyb3VwIHdob3NlIENQVXMgY2FuIGJlCi0gKgkJICAgcHV0IHRvIGlkbGUgYnkgcmViYWxhbmNpbmcgaXRzIHRhc2tzIG9udG8gb3VyIGdyb3VwLgotICovCi1zdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICoKLWZpbmRfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHRoaXNfY3B1LAotCQkgICB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICBpbnQgKnNkX2lkbGUsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmJhbGFuY2UpCi17Ci0Jc3RydWN0IHNkX2xiX3N0YXRzIHNkczsKLQotCW1lbXNldCgmc2RzLCAwLCBzaXplb2Yoc2RzKSk7Ci0KLQkvKgotCSAqIENvbXB1dGUgdGhlIHZhcmlvdXMgc3RhdGlzdGljcyByZWxhdmVudCBmb3IgbG9hZCBiYWxhbmNpbmcgYXQKLQkgKiB0aGlzIGxldmVsLgotCSAqLwotCXVwZGF0ZV9zZF9sYl9zdGF0cyhzZCwgdGhpc19jcHUsIGlkbGUsIHNkX2lkbGUsIGNwdXMsCi0JCQkJCWJhbGFuY2UsICZzZHMpOwotCi0JLyogQ2FzZXMgd2hlcmUgaW1iYWxhbmNlIGRvZXMgbm90IGV4aXN0IGZyb20gUE9WIG9mIHRoaXNfY3B1ICovCi0JLyogMSkgdGhpc19jcHUgaXMgbm90IHRoZSBhcHByb3ByaWF0ZSBjcHUgdG8gcGVyZm9ybSBsb2FkIGJhbGFuY2luZwotCSAqICAgIGF0IHRoaXMgbGV2ZWwuCi0JICogMikgVGhlcmUgaXMgbm8gYnVzeSBzaWJsaW5nIGdyb3VwIHRvIHB1bGwgZnJvbS4KLQkgKiAzKSBUaGlzIGdyb3VwIGlzIHRoZSBidXNpZXN0IGdyb3VwLgotCSAqIDQpIFRoaXMgZ3JvdXAgaXMgbW9yZSBidXN5IHRoYW4gdGhlIGF2ZyBidXNpZW5lc3MgYXQgdGhpcwotCSAqICAgIHNjaGVkX2RvbWFpbi4KLQkgKiA1KSBUaGUgaW1iYWxhbmNlIGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGxpbWl0LgotCSAqIDYpIEFueSByZWJhbGFuY2Ugd291bGQgbGVhZCB0byBwaW5nLXBvbmcKLQkgKi8KLQlpZiAoYmFsYW5jZSAmJiAhKCpiYWxhbmNlKSkKLQkJZ290byByZXQ7Ci0KLQlpZiAoIXNkcy5idXNpZXN0IHx8IHNkcy5idXNpZXN0X25yX3J1bm5pbmcgPT0gMCkKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMubWF4X2xvYWQpCi0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCi0Jc2RzLmF2Z19sb2FkID0gKFNDSEVEX0xPQURfU0NBTEUgKiBzZHMudG90YWxfbG9hZCkgLyBzZHMudG90YWxfcHdyOwotCi0JaWYgKHNkcy50aGlzX2xvYWQgPj0gc2RzLmF2Z19sb2FkKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCWlmICgxMDAgKiBzZHMubWF4X2xvYWQgPD0gc2QtPmltYmFsYW5jZV9wY3QgKiBzZHMudGhpc19sb2FkKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCXNkcy5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgLz0gc2RzLmJ1c2llc3RfbnJfcnVubmluZzsKLQlpZiAoc2RzLmdyb3VwX2ltYikKLQkJc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzayA9Ci0JCQltaW4oc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLmF2Z19sb2FkKTsKLQotCS8qCi0JICogV2UncmUgdHJ5aW5nIHRvIGdldCBhbGwgdGhlIGNwdXMgdG8gdGhlIGF2ZXJhZ2VfbG9hZCwgc28gd2UgZG9uJ3QKLQkgKiB3YW50IHRvIHB1c2ggb3Vyc2VsdmVzIGFib3ZlIHRoZSBhdmVyYWdlIGxvYWQsIG5vciBkbyB3ZSB3aXNoIHRvCi0JICogcmVkdWNlIHRoZSBtYXggbG9hZGVkIGNwdSBiZWxvdyB0aGUgYXZlcmFnZSBsb2FkLCBhcyBlaXRoZXIgb2YgdGhlc2UKLQkgKiBhY3Rpb25zIHdvdWxkIGp1c3QgcmVzdWx0IGluIG1vcmUgcmViYWxhbmNpbmcgbGF0ZXIsIGFuZCBwaW5nLXBvbmcKLQkgKiB0YXNrcyBhcm91bmQuIFRodXMgd2UgbG9vayBmb3IgdGhlIG1pbmltdW0gcG9zc2libGUgaW1iYWxhbmNlLgotCSAqIE5lZ2F0aXZlIGltYmFsYW5jZXMgKCp3ZSogYXJlIG1vcmUgbG9hZGVkIHRoYW4gYW55b25lIGVsc2UpIHdpbGwKLQkgKiBiZSBjb3VudGVkIGFzIG5vIGltYmFsYW5jZSBmb3IgdGhlc2UgcHVycG9zZXMgLS0gd2UgY2FuJ3QgZml4IHRoYXQKLQkgKiBieSBwdWxsaW5nIHRhc2tzIHRvIHVzLiBCZSBjYXJlZnVsIG9mIG5lZ2F0aXZlIG51bWJlcnMgYXMgdGhleSdsbAotCSAqIGFwcGVhciBhcyB2ZXJ5IGxhcmdlIHZhbHVlcyB3aXRoIHVuc2lnbmVkIGxvbmdzLgotCSAqLwotCWlmIChzZHMubWF4X2xvYWQgPD0gc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzaykKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQkvKiBMb29rcyBsaWtlIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4gQ29tcHV0ZSBpdCAqLwotCWNhbGN1bGF0ZV9pbWJhbGFuY2UoJnNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7Ci0JcmV0dXJuIHNkcy5idXNpZXN0OwotCi1vdXRfYmFsYW5jZWQ6Ci0JLyoKLQkgKiBUaGVyZSBpcyBubyBvYnZpb3VzIGltYmFsYW5jZS4gQnV0IGNoZWNrIGlmIHdlIGNhbiBkbyBzb21lIGJhbGFuY2luZwotCSAqIHRvIHNhdmUgcG93ZXIuCi0JICovCi0JaWYgKGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKSkKLQkJcmV0dXJuIHNkcy5idXNpZXN0OwotcmV0OgotCSppbWJhbGFuY2UgPSAwOwotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogZmluZF9idXNpZXN0X3F1ZXVlIC0gZmluZCB0aGUgYnVzaWVzdCBydW5xdWV1ZSBhbW9uZyB0aGUgY3B1cyBpbiBncm91cC4KLSAqLwotc3RhdGljIHN0cnVjdCBycSAqCi1maW5kX2J1c2llc3RfcXVldWUoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgIHVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cykKLXsKLQlzdHJ1Y3QgcnEgKmJ1c2llc3QgPSBOVUxMLCAqcnE7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbG9hZCA9IDA7Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpIHsKLQkJdW5zaWduZWQgbG9uZyBwb3dlciA9IHBvd2VyX29mKGkpOwotCQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5ID0gRElWX1JPVU5EX0NMT1NFU1QocG93ZXIsIFNDSEVEX0xPQURfU0NBTEUpOwotCQl1bnNpZ25lZCBsb25nIHdsOwotCi0JCWlmICghY3B1bWFza190ZXN0X2NwdShpLCBjcHVzKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJxID0gY3B1X3JxKGkpOwotCQl3bCA9IHdlaWdodGVkX2NwdWxvYWQoaSkgKiBTQ0hFRF9MT0FEX1NDQUxFOwotCQl3bCAvPSBwb3dlcjsKLQotCQlpZiAoY2FwYWNpdHkgJiYgcnEtPm5yX3J1bm5pbmcgPT0gMSAmJiB3bCA+IGltYmFsYW5jZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh3bCA+IG1heF9sb2FkKSB7Ci0JCQltYXhfbG9hZCA9IHdsOwotCQkJYnVzaWVzdCA9IHJxOwotCQl9Ci0JfQotCi0JcmV0dXJuIGJ1c2llc3Q7Ci19Ci0KLS8qCi0gKiBNYXggYmFja29mZiBpZiB3ZSBlbmNvdW50ZXIgcGlubmVkIHRhc2tzLiBQcmV0dHkgYXJiaXRyYXJ5IHZhbHVlLCBidXQKLSAqIHNvIGxvbmcgYXMgaXQgaXMgbGFyZ2UgZW5vdWdoLgotICovCi0jZGVmaW5lIE1BWF9QSU5ORURfSU5URVJWQUwJNTEyCi0KLS8qIFdvcmtpbmcgY3B1bWFzayBmb3IgbG9hZF9iYWxhbmNlIGFuZCBsb2FkX2JhbGFuY2VfbmV3aWRsZS4gKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBsb2FkX2JhbGFuY2VfdG1wbWFzayk7Ci0KLS8qCi0gKiBDaGVjayB0aGlzX2NwdSB0byBlbnN1cmUgaXQgaXMgYmFsYW5jZWQgd2l0aGluIGRvbWFpbi4gQXR0ZW1wdCB0byBtb3ZlCi0gKiB0YXNrcyBpZiB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuCi0gKi8KLXN0YXRpYyBpbnQgbG9hZF9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAotCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkJaW50ICpiYWxhbmNlKQotewotCWludCBsZF9tb3ZlZCwgYWxsX3Bpbm5lZCA9IDAsIGFjdGl2ZV9iYWxhbmNlID0gMCwgc2RfaWRsZSA9IDA7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cDsKLQl1bnNpZ25lZCBsb25nIGltYmFsYW5jZTsKLQlzdHJ1Y3QgcnEgKmJ1c2llc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgY3B1bWFzayAqY3B1cyA9IF9fZ2V0X2NwdV92YXIobG9hZF9iYWxhbmNlX3RtcG1hc2spOwotCi0JY3B1bWFza19jb3B5KGNwdXMsIGNwdV9hY3RpdmVfbWFzayk7Ci0KLQkvKgotCSAqIFdoZW4gcG93ZXIgc2F2aW5ncyBwb2xpY3kgaXMgZW5hYmxlZCBmb3IgdGhlIHBhcmVudCBkb21haW4sIGlkbGUKLQkgKiBzaWJsaW5nIGNhbiBwaWNrIHVwIGxvYWQgaXJyZXNwZWN0aXZlIG9mIGJ1c3kgc2libGluZ3MuIEluIHRoaXMgY2FzZSwKLQkgKiBsZXQgdGhlIHN0YXRlIG9mIGlkbGUgc2libGluZyBwZXJjb2xhdGUgdXAgYXMgQ1BVX0lETEUsIGluc3RlYWQgb2YKLQkgKiBwb3J0cmF5aW5nIGl0IGFzIENQVV9OT1RfSURMRS4KLQkgKi8KLQlpZiAoaWRsZSAhPSBDUFVfTk9UX0lETEUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKLQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCXNkX2lkbGUgPSAxOwotCi0Jc2NoZWRzdGF0X2luYyhzZCwgbGJfY291bnRbaWRsZV0pOwotCi1yZWRvOgotCXVwZGF0ZV9zaGFyZXMoc2QpOwotCWdyb3VwID0gZmluZF9idXNpZXN0X2dyb3VwKHNkLCB0aGlzX2NwdSwgJmltYmFsYW5jZSwgaWRsZSwgJnNkX2lkbGUsCi0JCQkJICAgY3B1cywgYmFsYW5jZSk7Ci0KLQlpZiAoKmJhbGFuY2UgPT0gMCkKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQlpZiAoIWdyb3VwKSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeWdbaWRsZV0pOwotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQl9Ci0KLQlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKGdyb3VwLCBpZGxlLCBpbWJhbGFuY2UsIGNwdXMpOwotCWlmICghYnVzaWVzdCkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lxW2lkbGVdKTsKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0JfQotCi0JQlVHX09OKGJ1c2llc3QgPT0gdGhpc19ycSk7Ci0KLQlzY2hlZHN0YXRfYWRkKHNkLCBsYl9pbWJhbGFuY2VbaWRsZV0sIGltYmFsYW5jZSk7Ci0KLQlsZF9tb3ZlZCA9IDA7Ci0JaWYgKGJ1c2llc3QtPm5yX3J1bm5pbmcgPiAxKSB7Ci0JCS8qCi0JCSAqIEF0dGVtcHQgdG8gbW92ZSB0YXNrcy4gSWYgZmluZF9idXNpZXN0X2dyb3VwIGhhcyBmb3VuZAotCQkgKiBhbiBpbWJhbGFuY2UgYnV0IGJ1c2llc3QtPm5yX3J1bm5pbmcgPD0gMSwgdGhlIGdyb3VwIGlzCi0JCSAqIHN0aWxsIHVuYmFsYW5jZWQuIGxkX21vdmVkIHNpbXBseSBzdGF5cyB6ZXJvLCBzbyBpdCBpcwotCQkgKiBjb3JyZWN0bHkgdHJlYXRlZCBhcyBhbiBpbWJhbGFuY2UuCi0JCSAqLwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWRvdWJsZV9ycV9sb2NrKHRoaXNfcnEsIGJ1c2llc3QpOwotCQlsZF9tb3ZlZCA9IG1vdmVfdGFza3ModGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCi0JCQkJICAgICAgaW1iYWxhbmNlLCBzZCwgaWRsZSwgJmFsbF9waW5uZWQpOwotCQlkb3VibGVfcnFfdW5sb2NrKHRoaXNfcnEsIGJ1c2llc3QpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJLyoKLQkJICogc29tZSBvdGhlciBjcHUgZGlkIHRoZSBsb2FkIGJhbGFuY2UgZm9yIHVzLgotCQkgKi8KLQkJaWYgKGxkX21vdmVkICYmIHRoaXNfY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKLQkJCXJlc2NoZWRfY3B1KHRoaXNfY3B1KTsKLQotCQkvKiBBbGwgdGFza3Mgb24gdGhpcyBydW5xdWV1ZSB3ZXJlIHBpbm5lZCBieSBDUFUgYWZmaW5pdHkgKi8KLQkJaWYgKHVubGlrZWx5KGFsbF9waW5uZWQpKSB7Ci0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHVfb2YoYnVzaWVzdCksIGNwdXMpOwotCQkJaWYgKCFjcHVtYXNrX2VtcHR5KGNwdXMpKQotCQkJCWdvdG8gcmVkbzsKLQkJCWdvdG8gb3V0X2JhbGFuY2VkOwotCQl9Ci0JfQotCi0JaWYgKCFsZF9tb3ZlZCkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9mYWlsZWRbaWRsZV0pOwotCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQrKzsKLQotCQlpZiAodW5saWtlbHkoc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMrMikpIHsKLQotCQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7Ci0KLQkJCS8qIGRvbid0IGtpY2sgdGhlIG1pZ3JhdGlvbl90aHJlYWQsIGlmIHRoZSBjdXJyCi0JCQkgKiB0YXNrIG9uIGJ1c2llc3QgY3B1IGNhbid0IGJlIG1vdmVkIHRvIHRoaXNfY3B1Ci0JCQkgKi8KLQkJCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKLQkJCQkJICAgICAgJmJ1c2llc3QtPmN1cnItPmNwdXNfYWxsb3dlZCkpIHsKLQkJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzaWVzdC0+bG9jaywKLQkJCQkJCQkgICAgZmxhZ3MpOwotCQkJCWFsbF9waW5uZWQgPSAxOwotCQkJCWdvdG8gb3V0X29uZV9waW5uZWQ7Ci0JCQl9Ci0KLQkJCWlmICghYnVzaWVzdC0+YWN0aXZlX2JhbGFuY2UpIHsKLQkJCQlidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSA9IDE7Ci0JCQkJYnVzaWVzdC0+cHVzaF9jcHUgPSB0aGlzX2NwdTsKLQkJCQlhY3RpdmVfYmFsYW5jZSA9IDE7Ci0JCQl9Ci0JCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzaWVzdC0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKGFjdGl2ZV9iYWxhbmNlKQotCQkJCXdha2VfdXBfcHJvY2VzcyhidXNpZXN0LT5taWdyYXRpb25fdGhyZWFkKTsKLQotCQkJLyoKLQkJCSAqIFdlJ3ZlIGtpY2tlZCBhY3RpdmUgYmFsYW5jaW5nLCByZXNldCB0aGUgZmFpbHVyZQotCQkJICogY291bnRlci4KLQkJCSAqLwotCQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gc2QtPmNhY2hlX25pY2VfdHJpZXMrMTsKLQkJfQotCX0gZWxzZQotCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSAwOwotCi0JaWYgKGxpa2VseSghYWN0aXZlX2JhbGFuY2UpKSB7Ci0JCS8qIFdlIHdlcmUgdW5iYWxhbmNlZCwgc28gcmVzZXQgdGhlIGJhbGFuY2luZyBpbnRlcnZhbCAqLwotCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCA9IHNkLT5taW5faW50ZXJ2YWw7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogSWYgd2UndmUgYmVndW4gYWN0aXZlIGJhbGFuY2luZywgc3RhcnQgdG8gYmFjayBvZmYuIFRoaXMKLQkJICogY2FzZSBtYXkgbm90IGJlIGNvdmVyZWQgYnkgdGhlIGFsbF9waW5uZWQgbG9naWMgaWYgdGhlcmUKLQkJICogaXMgb25seSAxIHRhc2sgb24gdGhlIGJ1c3kgcnVucXVldWUgKGJlY2F1c2Ugd2UgZG9uJ3QgY2FsbAotCQkgKiBtb3ZlX3Rhc2tzKS4KLQkJICovCi0JCWlmIChzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IHNkLT5tYXhfaW50ZXJ2YWwpCi0JCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCAqPSAyOwotCX0KLQotCWlmICghbGRfbW92ZWQgJiYgIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKLQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCWxkX21vdmVkID0gLTE7Ci0KLQlnb3RvIG91dDsKLQotb3V0X2JhbGFuY2VkOgotCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2JhbGFuY2VkW2lkbGVdKTsKLQotCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7Ci0KLW91dF9vbmVfcGlubmVkOgotCS8qIHR1bmUgdXAgdGhlIGJhbGFuY2luZyBpbnRlcnZhbCAqLwotCWlmICgoYWxsX3Bpbm5lZCAmJiBzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IE1BWF9QSU5ORURfSU5URVJWQUwpIHx8Ci0JCQkoc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPCBzZC0+bWF4X2ludGVydmFsKSkKLQkJc2QtPmJhbGFuY2VfaW50ZXJ2YWwgKj0gMjsKLQotCWlmICghc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJbGRfbW92ZWQgPSAtMTsKLQllbHNlCi0JCWxkX21vdmVkID0gMDsKLW91dDoKLQlpZiAobGRfbW92ZWQpCi0JCXVwZGF0ZV9zaGFyZXMoc2QpOwotCXJldHVybiBsZF9tb3ZlZDsKLX0KLQotLyoKLSAqIENoZWNrIHRoaXNfY3B1IHRvIGVuc3VyZSBpdCBpcyBiYWxhbmNlZCB3aXRoaW4gZG9tYWluLiBBdHRlbXB0IHRvIG1vdmUKLSAqIHRhc2tzIGlmIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4KLSAqCi0gKiBDYWxsZWQgZnJvbSBzY2hlZHVsZSB3aGVuIHRoaXNfcnEgaXMgYWJvdXQgdG8gYmVjb21lIGlkbGUgKENQVV9ORVdMWV9JRExFKS4KLSAqIHRoaXNfcnEgaXMgbG9ja2VkLgotICovCi1zdGF0aWMgaW50Ci1sb2FkX2JhbGFuY2VfbmV3aWRsZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCi17Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cDsKLQlzdHJ1Y3QgcnEgKmJ1c2llc3QgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOwotCWludCBsZF9tb3ZlZCA9IDA7Ci0JaW50IHNkX2lkbGUgPSAwOwotCWludCBhbGxfcGlubmVkID0gMDsKLQlzdHJ1Y3QgY3B1bWFzayAqY3B1cyA9IF9fZ2V0X2NwdV92YXIobG9hZF9iYWxhbmNlX3RtcG1hc2spOwotCi0JY3B1bWFza19jb3B5KGNwdXMsIGNwdV9hY3RpdmVfbWFzayk7Ci0KLQkvKgotCSAqIFdoZW4gcG93ZXIgc2F2aW5ncyBwb2xpY3kgaXMgZW5hYmxlZCBmb3IgdGhlIHBhcmVudCBkb21haW4sIGlkbGUKLQkgKiBzaWJsaW5nIGNhbiBwaWNrIHVwIGxvYWQgaXJyZXNwZWN0aXZlIG9mIGJ1c3kgc2libGluZ3MuIEluIHRoaXMgY2FzZSwKLQkgKiBsZXQgdGhlIHN0YXRlIG9mIGlkbGUgc2libGluZyBwZXJjb2xhdGUgdXAgYXMgSURMRSwgaW5zdGVhZCBvZgotCSAqIHBvcnRyYXlpbmcgaXQgYXMgQ1BVX05PVF9JRExFLgotCSAqLwotCWlmIChzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJc2RfaWRsZSA9IDE7Ci0KLQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9jb3VudFtDUFVfTkVXTFlfSURMRV0pOwotcmVkbzoKLQl1cGRhdGVfc2hhcmVzX2xvY2tlZCh0aGlzX3JxLCBzZCk7Ci0JZ3JvdXAgPSBmaW5kX2J1c2llc3RfZ3JvdXAoc2QsIHRoaXNfY3B1LCAmaW1iYWxhbmNlLCBDUFVfTkVXTFlfSURMRSwKLQkJCQkgICAmc2RfaWRsZSwgY3B1cywgTlVMTCk7Ci0JaWYgKCFncm91cCkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lnW0NQVV9ORVdMWV9JRExFXSk7Ci0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCX0KLQotCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoZ3JvdXAsIENQVV9ORVdMWV9JRExFLCBpbWJhbGFuY2UsIGNwdXMpOwotCWlmICghYnVzaWVzdCkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lxW0NQVV9ORVdMWV9JRExFXSk7Ci0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCX0KLQotCUJVR19PTihidXNpZXN0ID09IHRoaXNfcnEpOwotCi0Jc2NoZWRzdGF0X2FkZChzZCwgbGJfaW1iYWxhbmNlW0NQVV9ORVdMWV9JRExFXSwgaW1iYWxhbmNlKTsKLQotCWxkX21vdmVkID0gMDsKLQlpZiAoYnVzaWVzdC0+bnJfcnVubmluZyA+IDEpIHsKLQkJLyogQXR0ZW1wdCB0byBtb3ZlIHRhc2tzICovCi0JCWRvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Ci0JCS8qIHRoaXNfcnEtPmNsb2NrIGlzIGFscmVhZHkgdXBkYXRlZCAqLwotCQl1cGRhdGVfcnFfY2xvY2soYnVzaWVzdCk7Ci0JCWxkX21vdmVkID0gbW92ZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKLQkJCQkJaW1iYWxhbmNlLCBzZCwgQ1BVX05FV0xZX0lETEUsCi0JCQkJCSZhbGxfcGlubmVkKTsKLQkJZG91YmxlX3VubG9ja19iYWxhbmNlKHRoaXNfcnEsIGJ1c2llc3QpOwotCi0JCWlmICh1bmxpa2VseShhbGxfcGlubmVkKSkgewotCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1X29mKGJ1c2llc3QpLCBjcHVzKTsKLQkJCWlmICghY3B1bWFza19lbXB0eShjcHVzKSkKLQkJCQlnb3RvIHJlZG87Ci0JCX0KLQl9Ci0KLQlpZiAoIWxkX21vdmVkKSB7Ci0JCWludCBhY3RpdmVfYmFsYW5jZSA9IDA7Ci0KLQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfZmFpbGVkW0NQVV9ORVdMWV9JRExFXSk7Ci0JCWlmICghc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJaWYgKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgPCBQT1dFUlNBVklOR1NfQkFMQU5DRV9XQUtFVVApCi0JCQlyZXR1cm4gLTE7Ci0KLQkJaWYgKHNkLT5ucl9iYWxhbmNlX2ZhaWxlZCsrIDwgMikKLQkJCXJldHVybiAtMTsKLQotCQkvKgotCQkgKiBUaGUgb25seSB0YXNrIHJ1bm5pbmcgaW4gYSBub24taWRsZSBjcHUgY2FuIGJlIG1vdmVkIHRvIHRoaXMKLQkJICogY3B1IGluIGFuIGF0dGVtcHQgdG8gY29tcGxldGVseSBmcmVldXAgdGhlIG90aGVyIENQVQotCQkgKiBwYWNrYWdlLiBUaGUgc2FtZSBtZXRob2QgdXNlZCB0byBtb3ZlIHRhc2sgaW4gbG9hZF9iYWxhbmNlKCkKLQkJICogaGF2ZSBiZWVuIGV4dGVuZGVkIGZvciBsb2FkX2JhbGFuY2VfbmV3aWRsZSgpIHRvIHNwZWVkdXAKLQkJICogY29uc29saWRhdGlvbiBhdCBzY2hlZF9tYz1QT1dFUlNBVklOR1NfQkFMQU5DRV9XQUtFVVAgKDIpCi0JCSAqCi0JCSAqIFRoZSBwYWNrYWdlIHBvd2VyIHNhdmluZyBsb2dpYyBjb21lcyBmcm9tCi0JCSAqIGZpbmRfYnVzaWVzdF9ncm91cCgpLiAgSWYgdGhlcmUgYXJlIG5vIGltYmFsYW5jZSwgdGhlbgotCQkgKiBmX2JfZygpIHdpbGwgcmV0dXJuIE5VTEwuICBIb3dldmVyIHdoZW4gc2NoZWRfbWM9ezEsMn0gdGhlbgotCQkgKiBmX2JfZygpIHdpbGwgc2VsZWN0IGEgZ3JvdXAgZnJvbSB3aGljaCBhIHJ1bm5pbmcgdGFzayBtYXkgYmUKLQkJICogcHVsbGVkIHRvIHRoaXMgY3B1IGluIG9yZGVyIHRvIG1ha2UgdGhlIG90aGVyIHBhY2thZ2UgaWRsZS4KLQkJICogSWYgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gbWFrZSBhIHBhY2thZ2UgaWRsZSBhbmQgaWYKLQkJICogdGhlcmUgYXJlIG5vIGltYmFsYW5jZSwgdGhlbiBmX2JfZygpIHdpbGwgcmV0dXJuIE5VTEwgYW5kIG5vCi0JCSAqIGFjdGlvbiB3aWxsIGJlIHRha2VuIGluIGxvYWRfYmFsYW5jZV9uZXdpZGxlKCkuCi0JCSAqCi0JCSAqIFVuZGVyIG5vcm1hbCB0YXNrIHB1bGwgb3BlcmF0aW9uIGR1ZSB0byBpbWJhbGFuY2UsIHRoZXJlCi0JCSAqIHdpbGwgYmUgbW9yZSB0aGFuIG9uZSB0YXNrIGluIHRoZSBzb3VyY2UgcnVuIHF1ZXVlIGFuZAotCQkgKiBtb3ZlX3Rhc2tzKCkgd2lsbCBzdWNjZWVkLiAgbGRfbW92ZWQgd2lsbCBiZSB0cnVlIGFuZCB0aGlzCi0JCSAqIGFjdGl2ZSBiYWxhbmNlIGNvZGUgd2lsbCBub3QgYmUgdHJpZ2dlcmVkLgotCQkgKi8KLQotCQkvKiBMb2NrIGJ1c2llc3QgaW4gY29ycmVjdCBvcmRlciB3aGlsZSB0aGlzX3JxIGlzIGhlbGQgKi8KLQkJZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKLQotCQkvKgotCQkgKiBkb24ndCBraWNrIHRoZSBtaWdyYXRpb25fdGhyZWFkLCBpZiB0aGUgY3VycgotCQkgKiB0YXNrIG9uIGJ1c2llc3QgY3B1IGNhbid0IGJlIG1vdmVkIHRvIHRoaXNfY3B1Ci0JCSAqLwotCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsICZidXNpZXN0LT5jdXJyLT5jcHVzX2FsbG93ZWQpKSB7Ci0JCQlkb3VibGVfdW5sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Ci0JCQlhbGxfcGlubmVkID0gMTsKLQkJCXJldHVybiBsZF9tb3ZlZDsKLQkJfQotCi0JCWlmICghYnVzaWVzdC0+YWN0aXZlX2JhbGFuY2UpIHsKLQkJCWJ1c2llc3QtPmFjdGl2ZV9iYWxhbmNlID0gMTsKLQkJCWJ1c2llc3QtPnB1c2hfY3B1ID0gdGhpc19jcHU7Ci0JCQlhY3RpdmVfYmFsYW5jZSA9IDE7Ci0JCX0KLQotCQlkb3VibGVfdW5sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Ci0JCS8qCi0JCSAqIFNob3VsZCBub3QgY2FsbCB0dHd1IHdoaWxlIGhvbGRpbmcgYSBycS0+bG9jawotCQkgKi8KLQkJcmF3X3NwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKLQkJaWYgKGFjdGl2ZV9iYWxhbmNlKQotCQkJd2FrZV91cF9wcm9jZXNzKGJ1c2llc3QtPm1pZ3JhdGlvbl90aHJlYWQpOwotCQlyYXdfc3Bpbl9sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKLQotCX0gZWxzZQotCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSAwOwotCi0JdXBkYXRlX3NoYXJlc19sb2NrZWQodGhpc19ycSwgc2QpOwotCXJldHVybiBsZF9tb3ZlZDsKLQotb3V0X2JhbGFuY2VkOgotCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2JhbGFuY2VkW0NQVV9ORVdMWV9JRExFXSk7Ci0JaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlyZXR1cm4gLTE7Ci0Jc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogaWRsZV9iYWxhbmNlIGlzIGNhbGxlZCBieSBzY2hlZHVsZSgpIGlmIHRoaXNfY3B1IGlzIGFib3V0IHRvIGJlY29tZQotICogaWRsZS4gQXR0ZW1wdHMgdG8gcHVsbCB0YXNrcyBmcm9tIG90aGVyIENQVXMuCi0gKi8KLXN0YXRpYyB2b2lkIGlkbGVfYmFsYW5jZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQlpbnQgcHVsbGVkX3Rhc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlID0gamlmZmllcyArIEhaOwotCi0JdGhpc19ycS0+aWRsZV9zdGFtcCA9IHRoaXNfcnEtPmNsb2NrOwotCi0JaWYgKHRoaXNfcnEtPmF2Z19pZGxlIDwgc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0KQotCQlyZXR1cm47Ci0KLQlmb3JfZWFjaF9kb21haW4odGhpc19jcHUsIHNkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7Ci0KLQkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzZC0+ZmxhZ3MgJiBTRF9CQUxBTkNFX05FV0lETEUpCi0JCQkvKiBJZiB3ZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzdG9wIHNlYXJjaGluZzogKi8KLQkJCXB1bGxlZF90YXNrID0gbG9hZF9iYWxhbmNlX25ld2lkbGUodGhpc19jcHUsIHRoaXNfcnEsCi0JCQkJCQkJICAgc2QpOwotCi0JCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhzZC0+YmFsYW5jZV9pbnRlcnZhbCk7Ci0JCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkKLQkJCW5leHRfYmFsYW5jZSA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKLQkJaWYgKHB1bGxlZF90YXNrKSB7Ci0JCQl0aGlzX3JxLT5pZGxlX3N0YW1wID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChwdWxsZWRfdGFzayB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIHRoaXNfcnEtPm5leHRfYmFsYW5jZSkpIHsKLQkJLyoKLQkJICogV2UgYXJlIGdvaW5nIGlkbGUuIG5leHRfYmFsYW5jZSBtYXkgYmUgc2V0IGJhc2VkIG9uCi0JCSAqIGEgYnVzeSBwcm9jZXNzb3IuIFNvIHJlc2V0IG5leHRfYmFsYW5jZS4KLQkJICovCi0JCXRoaXNfcnEtPm5leHRfYmFsYW5jZSA9IG5leHRfYmFsYW5jZTsKLQl9Ci19Ci0KLS8qCi0gKiBhY3RpdmVfbG9hZF9iYWxhbmNlIGlzIHJ1biBieSBtaWdyYXRpb24gdGhyZWFkcy4gSXQgcHVzaGVzIHJ1bm5pbmcgdGFza3MKLSAqIG9mZiB0aGUgYnVzaWVzdCBDUFUgb250byBpZGxlIENQVXMuIEl0IHJlcXVpcmVzIGF0IGxlYXN0IDEgdGFzayB0byBiZQotICogcnVubmluZyBvbiBlYWNoIHBoeXNpY2FsIENQVSB3aGVyZSBwb3NzaWJsZSwgYW5kIGF2b2lkcyBwaHlzaWNhbCAvCi0gKiBsb2dpY2FsIGltYmFsYW5jZXMuCi0gKgotICogQ2FsbGVkIHdpdGggYnVzaWVzdF9ycSBsb2NrZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGFjdGl2ZV9sb2FkX2JhbGFuY2Uoc3RydWN0IHJxICpidXNpZXN0X3JxLCBpbnQgYnVzaWVzdF9jcHUpCi17Ci0JaW50IHRhcmdldF9jcHUgPSBidXNpZXN0X3JxLT5wdXNoX2NwdTsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQlzdHJ1Y3QgcnEgKnRhcmdldF9ycTsKLQotCS8qIElzIHRoZXJlIGFueSB0YXNrIHRvIG1vdmU/ICovCi0JaWYgKGJ1c2llc3RfcnEtPm5yX3J1bm5pbmcgPD0gMSkKLQkJcmV0dXJuOwotCi0JdGFyZ2V0X3JxID0gY3B1X3JxKHRhcmdldF9jcHUpOwotCi0JLyoKLQkgKiBUaGlzIGNvbmRpdGlvbiBpcyAiaW1wb3NzaWJsZSIsIGlmIGl0IG9jY3VycwotCSAqIHdlIG5lZWQgdG8gZml4IGl0LiBPcmlnaW5hbGx5IHJlcG9ydGVkIGJ5Ci0JICogQmpvcm4gSGVsZ2FhcyBvbiBhIDEyOC1jcHUgc2V0dXAuCi0JICovCi0JQlVHX09OKGJ1c2llc3RfcnEgPT0gdGFyZ2V0X3JxKTsKLQotCS8qIG1vdmUgYSB0YXNrIGZyb20gYnVzaWVzdF9ycSB0byB0YXJnZXRfcnEgKi8KLQlkb3VibGVfbG9ja19iYWxhbmNlKGJ1c2llc3RfcnEsIHRhcmdldF9ycSk7Ci0JdXBkYXRlX3JxX2Nsb2NrKGJ1c2llc3RfcnEpOwotCXVwZGF0ZV9ycV9jbG9jayh0YXJnZXRfcnEpOwotCi0JLyogU2VhcmNoIGZvciBhbiBzZCBzcGFubmluZyB1cyBhbmQgdGhlIHRhcmdldCBDUFUuICovCi0JZm9yX2VhY2hfZG9tYWluKHRhcmdldF9jcHUsIHNkKSB7Ci0JCWlmICgoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSAmJgotCQkgICAgY3B1bWFza190ZXN0X2NwdShidXNpZXN0X2NwdSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKSkKLQkJCQlicmVhazsKLQl9Ci0KLQlpZiAobGlrZWx5KHNkKSkgewotCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfY291bnQpOwotCi0JCWlmIChtb3ZlX29uZV90YXNrKHRhcmdldF9ycSwgdGFyZ2V0X2NwdSwgYnVzaWVzdF9ycSwKLQkJCQkgIHNkLCBDUFVfSURMRSkpCi0JCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfcHVzaGVkKTsKLQkJZWxzZQotCQkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX2ZhaWxlZCk7Ci0JfQotCWRvdWJsZV91bmxvY2tfYmFsYW5jZShidXNpZXN0X3JxLCB0YXJnZXRfcnEpOwotfQotCi0jaWZkZWYgQ09ORklHX05PX0haCi1zdGF0aWMgc3RydWN0IHsKLQlhdG9taWNfdCBsb2FkX2JhbGFuY2VyOwotCWNwdW1hc2tfdmFyX3QgY3B1X21hc2s7Ci0JY3B1bWFza192YXJfdCBpbGJfZ3JwX25vaHpfbWFzazsKLX0gbm9oeiBfX19fY2FjaGVsaW5lX2FsaWduZWQgPSB7Ci0JLmxvYWRfYmFsYW5jZXIgPSBBVE9NSUNfSU5JVCgtMSksCi19OwotCi1pbnQgZ2V0X25vaHpfbG9hZF9iYWxhbmNlcih2b2lkKQotewotCXJldHVybiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0vKioKLSAqIGxvd2VzdF9mbGFnX2RvbWFpbiAtIFJldHVybiBsb3dlc3Qgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZmxhZy4KLSAqIEBjcHU6CVRoZSBjcHUgd2hvc2UgbG93ZXN0IGxldmVsIG9mIHNjaGVkIGRvbWFpbiBpcyB0bwotICoJCWJlIHJldHVybmVkLgotICogQGZsYWc6CVRoZSBmbGFnIHRvIGNoZWNrIGZvciB0aGUgbG93ZXN0IHNjaGVkX2RvbWFpbgotICoJCWZvciB0aGUgZ2l2ZW4gY3B1LgotICoKLSAqIFJldHVybnMgdGhlIGxvd2VzdCBzY2hlZF9kb21haW4gb2YgYSBjcHUgd2hpY2ggY29udGFpbnMgdGhlIGdpdmVuIGZsYWcuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNjaGVkX2RvbWFpbiAqbG93ZXN0X2ZsYWdfZG9tYWluKGludCBjcHUsIGludCBmbGFnKQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCi0JZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpCi0JCWlmIChzZCAmJiAoc2QtPmZsYWdzICYgZmxhZykpCi0JCQlicmVhazsKLQotCXJldHVybiBzZDsKLX0KLQotLyoqCi0gKiBmb3JfZWFjaF9mbGFnX2RvbWFpbiAtIEl0ZXJhdGVzIG92ZXIgc2NoZWRfZG9tYWlucyBjb250YWluaW5nIHRoZSBmbGFnLgotICogQGNwdToJVGhlIGNwdSB3aG9zZSBkb21haW5zIHdlJ3JlIGl0ZXJhdGluZyBvdmVyLgotICogQHNkOgkJdmFyaWFibGUgaG9sZGluZyB0aGUgdmFsdWUgb2YgdGhlIHBvd2VyX3NhdmluZ3Nfc2QKLSAqCQlmb3IgY3B1LgotICogQGZsYWc6CVRoZSBmbGFnIHRvIGZpbHRlciB0aGUgc2NoZWRfZG9tYWlucyB0byBiZSBpdGVyYXRlZC4KLSAqCi0gKiBJdGVyYXRlcyBvdmVyIGFsbCB0aGUgc2NoZWR1bGVyIGRvbWFpbnMgZm9yIGEgZ2l2ZW4gY3B1IHRoYXQgaGFzIHRoZSAnZmxhZycKLSAqIHNldCwgc3RhcnRpbmcgZnJvbSB0aGUgbG93ZXN0IHNjaGVkX2RvbWFpbiB0byB0aGUgaGlnaGVzdC4KLSAqLwotI2RlZmluZSBmb3JfZWFjaF9mbGFnX2RvbWFpbihjcHUsIHNkLCBmbGFnKSBcCi0JZm9yIChzZCA9IGxvd2VzdF9mbGFnX2RvbWFpbihjcHUsIGZsYWcpOyBcCi0JCShzZCAmJiAoc2QtPmZsYWdzICYgZmxhZykpOyBzZCA9IHNkLT5wYXJlbnQpCi0KLS8qKgotICogaXNfc2VtaV9pZGxlX2dyb3VwIC0gQ2hlY2tzIGlmIHRoZSBnaXZlbiBzY2hlZF9ncm91cCBpcyBzZW1pLWlkbGUuCi0gKiBAaWxiX2dyb3VwOglncm91cCB0byBiZSBjaGVja2VkIGZvciBzZW1pLWlkbGVuZXNzCi0gKgotICogUmV0dXJuczoJMSBpZiB0aGUgZ3JvdXAgaXMgc2VtaS1pZGxlLiAwIG90aGVyd2lzZS4KLSAqCi0gKiBXZSBkZWZpbmUgYSBzY2hlZF9ncm91cCB0byBiZSBzZW1pIGlkbGUgaWYgaXQgaGFzIGF0bGVhc3Qgb25lIGlkbGUtQ1BVCi0gKiBhbmQgYXRsZWFzdCBvbmUgbm9uLWlkbGUgQ1BVLiBUaGlzIGhlbHBlciBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGdpdmVuCi0gKiBzY2hlZF9ncm91cCBpcyBzZW1pLWlkbGUgb3Igbm90LgotICovCi1zdGF0aWMgaW5saW5lIGludCBpc19zZW1pX2lkbGVfZ3JvdXAoc3RydWN0IHNjaGVkX2dyb3VwICppbGJfZ3JvdXApCi17Ci0JY3B1bWFza19hbmQobm9oei5pbGJfZ3JwX25vaHpfbWFzaywgbm9oei5jcHVfbWFzaywKLQkJCQkJc2NoZWRfZ3JvdXBfY3B1cyhpbGJfZ3JvdXApKTsKLQotCS8qCi0JICogQSBzY2hlZF9ncm91cCBpcyBzZW1pLWlkbGUgd2hlbiBpdCBoYXMgYXRsZWFzdCBvbmUgYnVzeSBjcHUKLQkgKiBhbmQgYXRsZWFzdCBvbmUgaWRsZSBjcHUuCi0JICovCi0JaWYgKGNwdW1hc2tfZW1wdHkobm9oei5pbGJfZ3JwX25vaHpfbWFzaykpCi0JCXJldHVybiAwOwotCi0JaWYgKGNwdW1hc2tfZXF1YWwobm9oei5pbGJfZ3JwX25vaHpfbWFzaywgc2NoZWRfZ3JvdXBfY3B1cyhpbGJfZ3JvdXApKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLS8qKgotICogZmluZF9uZXdfaWxiIC0gRmluZHMgdGhlIG9wdGltdW0gaWRsZSBsb2FkIGJhbGFuY2VyIGZvciBub21pbmF0aW9uLgotICogQGNwdToJVGhlIGNwdSB3aGljaCBpcyBub21pbmF0aW5nIGEgbmV3IGlkbGVfbG9hZF9iYWxhbmNlci4KLSAqCi0gKiBSZXR1cm5zOglSZXR1cm5zIHRoZSBpZCBvZiB0aGUgaWRsZSBsb2FkIGJhbGFuY2VyIGlmIGl0IGV4aXN0cywKLSAqCQlFbHNlLCByZXR1cm5zID49IG5yX2NwdV9pZHMuCi0gKgotICogVGhpcyBhbGdvcml0aG0gcGlja3MgdGhlIGlkbGUgbG9hZCBiYWxhbmNlciBzdWNoIHRoYXQgaXQgYmVsb25ncyB0byBhCi0gKiBzZW1pLWlkbGUgcG93ZXJzYXZpbmdzIHNjaGVkX2RvbWFpbi4gVGhlIGlkZWEgaXMgdG8gdHJ5IGFuZCBhdm9pZAotICogY29tcGxldGVseSBpZGxlIHBhY2thZ2VzL2NvcmVzIGp1c3QgZm9yIHRoZSBwdXJwb3NlIG9mIGlkbGUgbG9hZCBiYWxhbmNpbmcKLSAqIHdoZW4gdGhlcmUgYXJlIG90aGVyIGlkbGUgY3B1J3Mgd2hpY2ggYXJlIGJldHRlciBzdWl0ZWQgZm9yIHRoYXQgam9iLgotICovCi1zdGF0aWMgaW50IGZpbmRfbmV3X2lsYihpbnQgY3B1KQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqaWxiX2dyb3VwOwotCi0JLyoKLQkgKiBIYXZlIGlkbGUgbG9hZCBiYWxhbmNlciBzZWxlY3Rpb24gZnJvbSBzZW1pLWlkbGUgcGFja2FnZXMgb25seQotCSAqIHdoZW4gcG93ZXItYXdhcmUgbG9hZCBiYWxhbmNpbmcgaXMgZW5hYmxlZAotCSAqLwotCWlmICghKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzIHx8IHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MpKQotCQlnb3RvIG91dF9kb25lOwotCi0JLyoKLQkgKiBPcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlbiB3ZSBoYXZlIG5vIGlkbGUgQ1BVcyBvciBvbmx5IG9uZQotCSAqIGlkbGUgQ1BVLiBEb24ndCB3YWxrIHRoZSBzY2hlZF9kb21haW4gaGllcmFyY2h5IGluIHN1Y2ggY2FzZXMKLQkgKi8KLQlpZiAoY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPCAyKQotCQlnb3RvIG91dF9kb25lOwotCi0JZm9yX2VhY2hfZmxhZ19kb21haW4oY3B1LCBzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpIHsKLQkJaWxiX2dyb3VwID0gc2QtPmdyb3VwczsKLQotCQlkbyB7Ci0JCQlpZiAoaXNfc2VtaV9pZGxlX2dyb3VwKGlsYl9ncm91cCkpCi0JCQkJcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5pbGJfZ3JwX25vaHpfbWFzayk7Ci0KLQkJCWlsYl9ncm91cCA9IGlsYl9ncm91cC0+bmV4dDsKLQotCQl9IHdoaWxlIChpbGJfZ3JvdXAgIT0gc2QtPmdyb3Vwcyk7Ci0JfQotCi1vdXRfZG9uZToKLQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmNwdV9tYXNrKTsKLX0KLSNlbHNlIC8qICAoQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQpICovCi1zdGF0aWMgaW5saW5lIGludCBmaW5kX25ld19pbGIoaW50IGNhbGxfY3B1KQotewotCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouY3B1X21hc2spOwotfQotI2VuZGlmCi0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgd2lsbCB0cnkgdG8gbm9taW5hdGUgdGhlIGlsYiAoaWRsZSBsb2FkIGJhbGFuY2luZykKLSAqIG93bmVyIGFtb25nIHRoZSBjcHVzIHdob3NlIHRpY2tzIGFyZSBzdG9wcGVkLiBpbGIgb3duZXIgd2lsbCBkbyB0aGUgaWRsZQotICogbG9hZCBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIGFsbCB0aG9zZSBjcHVzLiBJZiBhbGwgdGhlIGNwdXMgaW4gdGhlIHN5c3RlbQotICogZ28gaW50byB0aGlzIHRpY2tsZXNzIG1vZGUsIHRoZW4gdGhlcmUgd2lsbCBiZSBubyBpbGIgb3duZXIgKGFzIHRoZXJlIGlzCi0gKiBubyBuZWVkIGZvciBvbmUpIGFuZCBhbGwgdGhlIGNwdXMgd2lsbCBzbGVlcCB0aWxsIHRoZSBuZXh0IHdha2V1cCBldmVudAotICogYXJyaXZlcy4uLgotICoKLSAqIEZvciB0aGUgaWxiIG93bmVyLCB0aWNrIGlzIG5vdCBzdG9wcGVkLiBBbmQgdGhpcyB0aWNrIHdpbGwgYmUgdXNlZAotICogZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcuIGlsYiBvd25lciB3aWxsIHN0aWxsIGJlIHBhcnQgb2YKLSAqIG5vaHouY3B1X21hc2suLgotICoKLSAqIFdoaWxlIHN0b3BwaW5nIHRoZSB0aWNrLCB0aGlzIGNwdSB3aWxsIGJlY29tZSB0aGUgaWxiIG93bmVyIGlmIHRoZXJlCi0gKiBpcyBubyBvdGhlciBvd25lci4gQW5kIHdpbGwgYmUgdGhlIG93bmVyIHRpbGwgdGhhdCBjcHUgYmVjb21lcyBidXN5Ci0gKiBvciBpZiBhbGwgY3B1cyBpbiB0aGUgc3lzdGVtIHN0b3AgdGhlaXIgdGlja3MgYXQgd2hpY2ggcG9pbnQKLSAqIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGlsYiBvd25lci4KLSAqCi0gKiBXaGVuIHRoZSBpbGIgb3duZXIgYmVjb21lcyBidXN5LCBpdCBub21pbmF0ZXMgYW5vdGhlciBvd25lciwgZHVyaW5nIHRoZQotICogbmV4dCBidXN5IHNjaGVkdWxlcl90aWNrKCkKLSAqLwotaW50IHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IHN0b3BfdGljaykKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKHN0b3BfdGljaykgewotCQljcHVfcnEoY3B1KS0+aW5fbm9oel9yZWNlbnRseSA9IDE7Ci0KLQkJaWYgKCFjcHVfYWN0aXZlKGNwdSkpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSAhPSBjcHUpCi0JCQkJcmV0dXJuIDA7Ci0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBhcmUgZ29pbmcgb2ZmbGluZSBhbmQgc3RpbGwgdGhlIGxlYWRlciwKLQkJCSAqIGdpdmUgdXAhCi0JCQkgKi8KLQkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCi0JCQkJQlVHKCk7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7Ci0KLQkJLyogdGltZSBmb3IgaWxiIG93bmVyIGFsc28gdG8gc2xlZXAgKi8KLQkJaWYgKGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spID09IG51bV9hY3RpdmVfY3B1cygpKSB7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KQotCQkJCWF0b21pY19zZXQoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gLTEpIHsKLQkJCS8qIG1ha2UgbWUgdGhlIGlsYiBvd25lciAqLwotCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xLCBjcHUpID09IC0xKQotCQkJCXJldHVybiAxOwotCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkgewotCQkJaW50IG5ld19pbGI7Ci0KLQkJCWlmICghKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzIHx8Ci0JCQkJCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzKSkKLQkJCQlyZXR1cm4gMTsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBtb3JlIHBvd2VyLWVmZmljaWVudAotCQkJICogaWxiLgotCQkJICovCi0JCQluZXdfaWxiID0gZmluZF9uZXdfaWxiKGNwdSk7Ci0JCQlpZiAobmV3X2lsYiA8IG5yX2NwdV9pZHMgJiYgbmV3X2lsYiAhPSBjcHUpIHsKLQkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKLQkJCQlyZXNjaGVkX2NwdShuZXdfaWxiKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5jcHVfbWFzaykpCi0JCQlyZXR1cm4gMDsKLQotCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vaHouY3B1X21hc2spOwotCi0JCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpCi0JCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgY3B1LCAtMSkgIT0gY3B1KQotCQkJCUJVRygpOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJhbGFuY2luZyk7Ci0KLS8qCi0gKiBJdCBjaGVja3MgZWFjaCBzY2hlZHVsaW5nIGRvbWFpbiB0byBzZWUgaWYgaXQgaXMgZHVlIHRvIGJlIGJhbGFuY2VkLAotICogYW5kIGluaXRpYXRlcyBhIGJhbGFuY2luZyBvcGVyYXRpb24gaWYgc28uCi0gKgotICogQmFsYW5jaW5nIHBhcmFtZXRlcnMgYXJlIHNldCB1cCBpbiBhcmNoX2luaXRfc2NoZWRfZG9tYWlucy4KLSAqLwotc3RhdGljIHZvaWQgcmViYWxhbmNlX2RvbWFpbnMoaW50IGNwdSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JaW50IGJhbGFuY2UgPSAxOwotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKLQl1bnNpZ25lZCBsb25nIGludGVydmFsOwotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCS8qIEVhcmxpZXN0IHRpbWUgd2hlbiB3ZSBoYXZlIHRvIGRvIHJlYmFsYW5jZSBhZ2FpbiAqLwotCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlID0gamlmZmllcyArIDYwKkhaOwotCWludCB1cGRhdGVfbmV4dF9iYWxhbmNlID0gMDsKLQlpbnQgbmVlZF9zZXJpYWxpemU7Ci0KLQlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewotCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQotCQkJY29udGludWU7Ci0KLQkJaW50ZXJ2YWwgPSBzZC0+YmFsYW5jZV9pbnRlcnZhbDsKLQkJaWYgKGlkbGUgIT0gQ1BVX0lETEUpCi0JCQlpbnRlcnZhbCAqPSBzZC0+YnVzeV9mYWN0b3I7Ci0KLQkJLyogc2NhbGUgbXMgdG8gamlmZmllcyAqLwotCQlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWwpOwotCQlpZiAodW5saWtlbHkoIWludGVydmFsKSkKLQkJCWludGVydmFsID0gMTsKLQkJaWYgKGludGVydmFsID4gSFoqTlJfQ1BVUy8xMCkKLQkJCWludGVydmFsID0gSFoqTlJfQ1BVUy8xMDsKLQotCQluZWVkX3NlcmlhbGl6ZSA9IHNkLT5mbGFncyAmIFNEX1NFUklBTElaRTsKLQotCQlpZiAobmVlZF9zZXJpYWxpemUpIHsKLQkJCWlmICghc3Bpbl90cnlsb2NrKCZiYWxhbmNpbmcpKQotCQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkgewotCQkJaWYgKGxvYWRfYmFsYW5jZShjcHUsIHJxLCBzZCwgaWRsZSwgJmJhbGFuY2UpKSB7Ci0JCQkJLyoKLQkJCQkgKiBXZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzbyBlaXRoZXIgd2UncmUgbm8KLQkJCQkgKiBsb25nZXIgaWRsZSwgb3Igb25lIG9mIG91ciBTTVQgc2libGluZ3MgaXMKLQkJCQkgKiBub3QgaWRsZS4KLQkJCQkgKi8KLQkJCQlpZGxlID0gQ1BVX05PVF9JRExFOwotCQkJfQotCQkJc2QtPmxhc3RfYmFsYW5jZSA9IGppZmZpZXM7Ci0JCX0KLQkJaWYgKG5lZWRfc2VyaWFsaXplKQotCQkJc3Bpbl91bmxvY2soJmJhbGFuY2luZyk7Ci1vdXQ6Ci0JCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkgewotCQkJbmV4dF9iYWxhbmNlID0gc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsOwotCQkJdXBkYXRlX25leHRfYmFsYW5jZSA9IDE7Ci0JCX0KLQotCQkvKgotCQkgKiBTdG9wIHRoZSBsb2FkIGJhbGFuY2UgYXQgdGhpcyBsZXZlbC4gVGhlcmUgaXMgYW5vdGhlcgotCQkgKiBDUFUgaW4gb3VyIHNjaGVkIGdyb3VwIHdoaWNoIGlzIGRvaW5nIGxvYWQgYmFsYW5jaW5nIG1vcmUKLQkJICogYWN0aXZlbHkuCi0JCSAqLwotCQlpZiAoIWJhbGFuY2UpCi0JCQlicmVhazsKLQl9Ci0KLQkvKgotCSAqIG5leHRfYmFsYW5jZSB3aWxsIGJlIHVwZGF0ZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgbmVlZC4KLQkgKiBXaGVuIHRoZSBjcHUgaXMgYXR0YWNoZWQgdG8gbnVsbCBkb21haW4gZm9yIGV4LCBpdCB3aWxsIG5vdCBiZQotCSAqIHVwZGF0ZWQuCi0JICovCi0JaWYgKGxpa2VseSh1cGRhdGVfbmV4dF9iYWxhbmNlKSkKLQkJcnEtPm5leHRfYmFsYW5jZSA9IG5leHRfYmFsYW5jZTsKLX0KLQotLyoKLSAqIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyBpcyB0cmlnZ2VyZWQgd2hlbiBuZWVkZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHRpY2suCi0gKiBJbiBDT05GSUdfTk9fSFogY2FzZSwgdGhlIGlkbGUgbG9hZCBiYWxhbmNlIG93bmVyIHdpbGwgZG8gdGhlCi0gKiByZWJhbGFuY2luZyBmb3IgYWxsIHRoZSBjcHVzIGZvciB3aG9tIHNjaGVkdWxlciB0aWNrcyBhcmUgc3RvcHBlZC4KLSAqLwotc3RhdGljIHZvaWQgcnVuX3JlYmFsYW5jZV9kb21haW5zKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKLXsKLQlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IHJxICp0aGlzX3JxID0gY3B1X3JxKHRoaXNfY3B1KTsKLQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSA9IHRoaXNfcnEtPmlkbGVfYXRfdGljayA/Ci0JCQkJCQlDUFVfSURMRSA6IENQVV9OT1RfSURMRTsKLQotCXJlYmFsYW5jZV9kb21haW5zKHRoaXNfY3B1LCBpZGxlKTsKLQotI2lmZGVmIENPTkZJR19OT19IWgotCS8qCi0JICogSWYgdGhpcyBjcHUgaXMgdGhlIG93bmVyIGZvciBpZGxlIGxvYWQgYmFsYW5jaW5nLCB0aGVuIGRvIHRoZQotCSAqIGJhbGFuY2luZyBvbiBiZWhhbGYgb2YgdGhlIG90aGVyIGlkbGUgY3B1cyB3aG9zZSB0aWNrcyBhcmUKLQkgKiBzdG9wcGVkLgotCSAqLwotCWlmICh0aGlzX3JxLT5pZGxlX2F0X3RpY2sgJiYKLQkgICAgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gdGhpc19jcHUpIHsKLQkJc3RydWN0IHJxICpycTsKLQkJaW50IGJhbGFuY2VfY3B1OwotCi0JCWZvcl9lYWNoX2NwdShiYWxhbmNlX2NwdSwgbm9oei5jcHVfbWFzaykgewotCQkJaWYgKGJhbGFuY2VfY3B1ID09IHRoaXNfY3B1KQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKgotCQkJICogSWYgdGhpcyBjcHUgZ2V0cyB3b3JrIHRvIGRvLCBzdG9wIHRoZSBsb2FkIGJhbGFuY2luZwotCQkJICogd29yayBiZWluZyBkb25lIGZvciBvdGhlciBjcHVzLiBOZXh0IGxvYWQKLQkJCSAqIGJhbGFuY2luZyBvd25lciB3aWxsIHBpY2sgaXQgdXAuCi0JCQkgKi8KLQkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKLQkJCQlicmVhazsKLQotCQkJcmViYWxhbmNlX2RvbWFpbnMoYmFsYW5jZV9jcHUsIENQVV9JRExFKTsKLQotCQkJcnEgPSBjcHVfcnEoYmFsYW5jZV9jcHUpOwotCQkJaWYgKHRpbWVfYWZ0ZXIodGhpc19ycS0+bmV4dF9iYWxhbmNlLCBycS0+bmV4dF9iYWxhbmNlKSkKLQkJCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBycS0+bmV4dF9iYWxhbmNlOwotCQl9Ci0JfQotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG9uX251bGxfZG9tYWluKGludCBjcHUpCi17Ci0JcmV0dXJuICFyY3VfZGVyZWZlcmVuY2UoY3B1X3JxKGNwdSktPnNkKTsKLX0KLQotLyoKLSAqIFRyaWdnZXIgdGhlIFNDSEVEX1NPRlRJUlEgaWYgaXQgaXMgdGltZSB0byBkbyBwZXJpb2RpYyBsb2FkIGJhbGFuY2luZy4KLSAqCi0gKiBJbiBjYXNlIG9mIENPTkZJR19OT19IWiwgdGhpcyBpcyB0aGUgcGxhY2Ugd2hlcmUgd2Ugbm9taW5hdGUgYSBuZXcKLSAqIGlkbGUgbG9hZCBiYWxhbmNpbmcgb3duZXIgb3IgZGVjaWRlIHRvIHN0b3AgdGhlIHBlcmlvZGljIGxvYWQgYmFsYW5jaW5nLAotICogaWYgdGhlIHdob2xlIHN5c3RlbSBpcyBpZGxlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJpZ2dlcl9sb2FkX2JhbGFuY2Uoc3RydWN0IHJxICpycSwgaW50IGNwdSkKLXsKLSNpZmRlZiBDT05GSUdfTk9fSFoKLQkvKgotCSAqIElmIHdlIHdlcmUgaW4gdGhlIG5vaHogbW9kZSByZWNlbnRseSBhbmQgYnVzeSBhdCB0aGUgY3VycmVudAotCSAqIHNjaGVkdWxlciB0aWNrLCB0aGVuIGNoZWNrIGlmIHdlIG5lZWQgdG8gbm9taW5hdGUgbmV3IGlkbGUKLQkgKiBsb2FkIGJhbGFuY2VyLgotCSAqLwotCWlmIChycS0+aW5fbm9oel9yZWNlbnRseSAmJiAhcnEtPmlkbGVfYXRfdGljaykgewotCQlycS0+aW5fbm9oel9yZWNlbnRseSA9IDA7Ci0KLQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkgewotCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKLQkJCWF0b21pY19zZXQoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEpOwotCQl9Ci0KLQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IC0xKSB7Ci0JCQlpbnQgaWxiID0gZmluZF9uZXdfaWxiKGNwdSk7Ci0KLQkJCWlmIChpbGIgPCBucl9jcHVfaWRzKQotCQkJCXJlc2NoZWRfY3B1KGlsYik7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIElmIHRoaXMgY3B1IGlzIGlkbGUgYW5kIGRvaW5nIGlkbGUgbG9hZCBiYWxhbmNpbmcgZm9yIGFsbCB0aGUKLQkgKiBjcHVzIHdpdGggdGlja3Mgc3RvcHBlZCwgaXMgaXQgdGltZSBmb3IgdGhhdCB0byBzdG9wPwotCSAqLwotCWlmIChycS0+aWRsZV9hdF90aWNrICYmIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSAmJgotCSAgICBjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA9PSBudW1fb25saW5lX2NwdXMoKSkgewotCQlyZXNjaGVkX2NwdShjcHUpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGlzIGNwdSBpcyBpZGxlIGFuZCB0aGUgaWRsZSBsb2FkIGJhbGFuY2luZyBpcyBkb25lIGJ5Ci0JICogc29tZW9uZSBlbHNlLCB0aGVuIG5vIG5lZWQgcmFpc2UgdGhlIFNDSEVEX1NPRlRJUlEKLQkgKi8KLQlpZiAocnEtPmlkbGVfYXRfdGljayAmJiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSAhPSBjcHUgJiYKLQkgICAgY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQotCQlyZXR1cm47Ci0jZW5kaWYKLQkvKiBEb24ndCBuZWVkIHRvIHJlYmFsYW5jZSB3aGlsZSBhdHRhY2hlZCB0byBOVUxMIGRvbWFpbiAqLwotCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5uZXh0X2JhbGFuY2UpICYmCi0JICAgIGxpa2VseSghb25fbnVsbF9kb21haW4oY3B1KSkpCi0JCXJhaXNlX3NvZnRpcnEoU0NIRURfU09GVElSUSk7Ci19Ci0KLSNlbHNlCS8qIENPTkZJR19TTVAgKi8KLQotLyoKLSAqIG9uIFVQIHdlIGRvIG5vdCBuZWVkIHRvIGJhbGFuY2UgYmV0d2VlbiBDUFVzOgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaWRsZV9iYWxhbmNlKGludCBjcHUsIHN0cnVjdCBycSAqcnEpCi17Ci19Ci0KICNlbmRpZgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga2VybmVsX3N0YXQsIGtzdGF0KTsKQEAgLTUzMDksNyArMzUxNSw3IEBACiAJY3Vyci0+c2NoZWRfY2xhc3MtPnRhc2tfdGljayhycSwgY3VyciwgMCk7CiAJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAKLQlwZXJmX2V2ZW50X3Rhc2tfdGljayhjdXJyLCBjcHUpOworCXBlcmZfZXZlbnRfdGFza190aWNrKGN1cnIpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCXJxLT5pZGxlX2F0X3RpY2sgPSBpZGxlX2NwdShjcHUpOwpAQCAtNTUyMyw3ICszNzI5LDcgQEAKIAogCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgewogCQlzY2hlZF9pbmZvX3N3aXRjaChwcmV2LCBuZXh0KTsKLQkJcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChwcmV2LCBuZXh0LCBjcHUpOworCQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHByZXYsIG5leHQpOwogCiAJCXJxLT5ucl9zd2l0Y2hlcysrOwogCQlycS0+Y3VyciA9IG5leHQ7CkBAIC02MDU0LDcgKzQyNjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9sZHByaW8sIG9uX3JxLCBydW5uaW5nOwogCXN0cnVjdCBycSAqcnE7Ci0JY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpwcmV2X2NsYXNzID0gcC0+c2NoZWRfY2xhc3M7CisJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpwcmV2X2NsYXNzOwogCiAJQlVHX09OKHByaW8gPCAwIHx8IHByaW8gPiBNQVhfUFJJTyk7CiAKQEAgLTYwNjIsNiArNDI2OCw3IEBACiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAogCW9sZHByaW8gPSBwLT5wcmlvOworCXByZXZfY2xhc3MgPSBwLT5zY2hlZF9jbGFzczsKIAlvbl9ycSA9IHAtPnNlLm9uX3JxOwogCXJ1bm5pbmcgPSB0YXNrX2N1cnJlbnQocnEsIHApOwogCWlmIChvbl9ycSkKQEAgLTYwNzksNyArNDI4Niw3IEBACiAJaWYgKHJ1bm5pbmcpCiAJCXAtPnNjaGVkX2NsYXNzLT5zZXRfY3Vycl90YXNrKHJxKTsKIAlpZiAob25fcnEpIHsKLQkJZW5xdWV1ZV90YXNrKHJxLCBwLCAwKTsKKwkJZW5xdWV1ZV90YXNrKHJxLCBwLCAwLCBvbGRwcmlvIDwgcHJpbyk7CiAKIAkJY2hlY2tfY2xhc3NfY2hhbmdlZChycSwgcCwgcHJldl9jbGFzcywgb2xkcHJpbywgcnVubmluZyk7CiAJfQpAQCAtNjEyMyw3ICs0MzMwLDcgQEAKIAlkZWx0YSA9IHAtPnByaW8gLSBvbGRfcHJpbzsKIAogCWlmIChvbl9ycSkgewotCQllbnF1ZXVlX3Rhc2socnEsIHAsIDApOworCQllbnF1ZXVlX3Rhc2socnEsIHAsIDAsIGZhbHNlKTsKIAkJLyoKIAkJICogSWYgdGhlIHRhc2sgaW5jcmVhc2VkIGl0cyBwcmlvcml0eSBvciBpcyBydW5uaW5nIGFuZAogCQkgKiBsb3dlcmVkIGl0cyBwcmlvcml0eSwgdGhlbiByZXNjaGVkdWxlIGl0cyBDUFU6CkBAIC02MjgxLDcgKzQ0ODgsNyBAQAogewogCWludCByZXR2YWwsIG9sZHByaW8sIG9sZHBvbGljeSA9IC0xLCBvbl9ycSwgcnVubmluZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcyA9IHAtPnNjaGVkX2NsYXNzOworCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzczsKIAlzdHJ1Y3QgcnEgKnJxOwogCWludCByZXNldF9vbl9mb3JrOwogCkBAIC02Mzk1LDYgKzQ2MDIsNyBAQAogCXAtPnNjaGVkX3Jlc2V0X29uX2ZvcmsgPSByZXNldF9vbl9mb3JrOwogCiAJb2xkcHJpbyA9IHAtPnByaW87CisJcHJldl9jbGFzcyA9IHAtPnNjaGVkX2NsYXNzOwogCV9fc2V0c2NoZWR1bGVyKHJxLCBwLCBwb2xpY3ksIHBhcmFtLT5zY2hlZF9wcmlvcml0eSk7CiAKIAlpZiAocnVubmluZykKQEAgLTcxNDUsMjcgKzUzNTMsOCBAQAogCXN0cnVjdCBycSAqcnE7CiAJaW50IHJldCA9IDA7CiAKLQkvKgotCSAqIFNpbmNlIHdlIHJlbHkgb24gd2FrZS11cHMgdG8gbWlncmF0ZSBzbGVlcGluZyB0YXNrcywgZG9uJ3QgY2hhbmdlCi0JICogdGhlIC0+Y3B1c19hbGxvd2VkIG1hc2sgZnJvbSB1bmRlciB3YWtpbmcgdGFza3MsIHdoaWNoIHdvdWxkIGJlCi0JICogcG9zc2libGUgd2hlbiB3ZSBjaGFuZ2UgcnEtPmxvY2sgaW4gdHR3dSgpLCBzbyBzeW5jaHJvbml6ZSBhZ2FpbnN0Ci0JICogVEFTS19XQUtJTkcgdG8gYXZvaWQgdGhhdC4KLQkgKgotCSAqIE1ha2UgYW4gZXhjZXB0aW9uIGZvciBmcmVzaGx5IGNsb25lZCB0YXNrcywgc2luY2UgY3B1c2V0IG5hbWVzcGFjZXMKLQkgKiBtaWdodCBtb3ZlIHRoZSB0YXNrIGFib3V0LCB3ZSBoYXZlIHRvIHZhbGlkYXRlIHRoZSB0YXJnZXQgaW4KLQkgKiB3YWtlX3VwX25ld190YXNrKCkgYW55d2F5IHNpbmNlIHRoZSBjcHUgbWlnaHQgaGF2ZSBnb25lIGF3YXkuCi0JICovCi1hZ2FpbjoKLQl3aGlsZSAocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcgJiYgIShwLT5mbGFncyAmIFBGX1NUQVJUSU5HKSkKLQkJY3B1X3JlbGF4KCk7Ci0KIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwogCi0JaWYgKHAtPnN0YXRlID09IFRBU0tfV0FLSU5HICYmICEocC0+ZmxhZ3MgJiBQRl9TVEFSVElORykpIHsKLQkJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7Ci0JCWdvdG8gYWdhaW47Ci0JfQotCiAJaWYgKCFjcHVtYXNrX2ludGVyc2VjdHMobmV3X21hc2ssIGNwdV9hY3RpdmVfbWFzaykpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC05NDUyLDcgKzc2NDEsNiBAQAogCXRnLT5ydF9ycVtjcHVdID0gcnRfcnE7CiAJaW5pdF9ydF9ycShydF9ycSwgcnEpOwogCXJ0X3JxLT50ZyA9IHRnOwotCXJ0X3JxLT5ydF9zZSA9IHJ0X3NlOwogCXJ0X3JxLT5ydF9ydW50aW1lID0gdGctPnJ0X2JhbmR3aWR0aC5ydF9ydW50aW1lOwogCWlmIChhZGQpCiAJCWxpc3RfYWRkKCZydF9ycS0+bGVhZl9ydF9ycV9saXN0LCAmcnEtPmxlYWZfcnRfcnFfbGlzdCk7CkBAIC05NDgzLDkgKzc2NzEsNiBAQAogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCWFsbG9jX3NpemUgKz0gMiAqIG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCWFsbG9jX3NpemUgKj0gMjsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLCiAJYWxsb2Nfc2l6ZSArPSBudW1fcG9zc2libGVfY3B1cygpICogY3B1bWFza19zaXplKCk7CiAjZW5kaWYKQEAgLTk0OTksMTMgKzc2ODQsNiBAQAogCQlpbml0X3Rhc2tfZ3JvdXAuY2ZzX3JxID0gKHN0cnVjdCBjZnNfcnEgKiopcHRyOwogCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JCXJvb3RfdGFza19ncm91cC5zZSA9IChzdHJ1Y3Qgc2NoZWRfZW50aXR5ICoqKXB0cjsKLQkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7Ci0KLQkJcm9vdF90YXNrX2dyb3VwLmNmc19ycSA9IChzdHJ1Y3QgY2ZzX3JxICoqKXB0cjsKLQkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7Ci0jZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCQlpbml0X3Rhc2tfZ3JvdXAucnRfc2UgPSAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqKilwdHI7CkBAIC05NTE0LDEzICs3NjkyLDYgQEAKIAkJaW5pdF90YXNrX2dyb3VwLnJ0X3JxID0gKHN0cnVjdCBydF9ycSAqKilwdHI7CiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQkJcm9vdF90YXNrX2dyb3VwLnJ0X3NlID0gKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKiopcHRyOwotCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKLQotCQlyb290X3Rhc2tfZ3JvdXAucnRfcnEgPSAoc3RydWN0IHJ0X3JxICoqKXB0cjsKLQkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7Ci0jZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KICNpZmRlZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSwogCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewpAQCAtOTU0MCwyMiArNzcxMSwxMyBAQAogI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAogCWluaXRfcnRfYmFuZHdpZHRoKCZpbml0X3Rhc2tfZ3JvdXAucnRfYmFuZHdpZHRoLAogCQkJZ2xvYmFsX3J0X3BlcmlvZCgpLCBnbG9iYWxfcnRfcnVudGltZSgpKTsKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCWluaXRfcnRfYmFuZHdpZHRoKCZyb290X3Rhc2tfZ3JvdXAucnRfYmFuZHdpZHRoLAotCQkJZ2xvYmFsX3J0X3BlcmlvZCgpLCBSVU5USU1FX0lORik7Ci0jZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KIAotI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAlsaXN0X2FkZCgmaW5pdF90YXNrX2dyb3VwLmxpc3QsICZ0YXNrX2dyb3Vwcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmluaXRfdGFza19ncm91cC5jaGlsZHJlbik7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCUlOSVRfTElTVF9IRUFEKCZyb290X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOwotCWluaXRfdGFza19ncm91cC5wYXJlbnQgPSAmcm9vdF90YXNrX2dyb3VwOwotCWxpc3RfYWRkKCZpbml0X3Rhc2tfZ3JvdXAuc2libGluZ3MsICZyb290X3Rhc2tfZ3JvdXAuY2hpbGRyZW4pOwotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCi0jZW5kaWYgLyogQ09ORklHX0dST1VQX1NDSEVEICovCisjZW5kaWYgLyogQ09ORklHX0NHUk9VUF9TQ0hFRCAqLwogCiAjaWYgZGVmaW5lZCBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAmJiBkZWZpbmVkIENPTkZJR19TTVAKIAl1cGRhdGVfc2hhcmVzX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShucl9jcHVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLApAQCAtOTU5NSwyNSArNzc1Nyw2IEBACiAJCSAqIGRpcmVjdGx5IGluIHJxLT5jZnMgKGkuZSBpbml0X3Rhc2tfZ3JvdXAtPnNlW10gPSBOVUxMKS4KIAkJICovCiAJCWluaXRfdGdfY2ZzX2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsICZycS0+Y2ZzLCBOVUxMLCBpLCAxLCBOVUxMKTsKLSNlbGlmIGRlZmluZWQgQ09ORklHX1VTRVJfU0NIRUQKLQkJcm9vdF90YXNrX2dyb3VwLnNoYXJlcyA9IE5JQ0VfMF9MT0FEOwotCQlpbml0X3RnX2Nmc19lbnRyeSgmcm9vdF90YXNrX2dyb3VwLCAmcnEtPmNmcywgTlVMTCwgaSwgMCwgTlVMTCk7Ci0JCS8qCi0JCSAqIEluIGNhc2Ugb2YgdGFzay1ncm91cHMgZm9ybWVkIHRocicgdGhlIHVzZXIgaWQgb2YgdGFza3MsCi0JCSAqIGluaXRfdGFza19ncm91cCByZXByZXNlbnRzIHRhc2tzIGJlbG9uZ2luZyB0byByb290IHVzZXIuCi0JCSAqIEhlbmNlIGl0IGZvcm1zIGEgc2libGluZyBvZiBhbGwgc3Vic2VxdWVudCBncm91cHMgZm9ybWVkLgotCQkgKiBJbiB0aGlzIGNhc2UsIGluaXRfdGFza19ncm91cCBnZXRzIG9ubHkgYSBmcmFjdGlvbiBvZiBvdmVyYWxsCi0JCSAqIHN5c3RlbSBjcHUgcmVzb3VyY2UsIGJhc2VkIG9uIHRoZSB3ZWlnaHQgYXNzaWduZWQgdG8gcm9vdAotCQkgKiB1c2VyJ3MgY3B1IHNoYXJlIChJTklUX1RBU0tfR1JPVVBfTE9BRCkuIFRoaXMgaXMgYWNjb21wbGlzaGVkCi0JCSAqIGJ5IGxldHRpbmcgdGFza3Mgb2YgaW5pdF90YXNrX2dyb3VwIHNpdCBpbiBhIHNlcGFyYXRlIGNmc19ycQotCQkgKiAoaW5pdF90Z19jZnNfcnEpIGFuZCBoYXZpbmcgb25lIGVudGl0eSByZXByZXNlbnQgdGhpcyBncm91cCBvZgotCQkgKiB0YXNrcyBpbiBycS0+Y2ZzIChpLmUgaW5pdF90YXNrX2dyb3VwLT5zZVtdICE9IE5VTEwpLgotCQkgKi8KLQkJaW5pdF90Z19jZnNfZW50cnkoJmluaXRfdGFza19ncm91cCwKLQkJCQkmcGVyX2NwdShpbml0X3RnX2Nmc19ycSwgaSksCi0JCQkJJnBlcl9jcHUoaW5pdF9zY2hlZF9lbnRpdHksIGkpLCBpLCAxLAotCQkJCXJvb3RfdGFza19ncm91cC5zZVtpXSk7Ci0KICNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovCiAKQEAgLTk2MjIsMTIgKzc3NjUsNiBAQAogCQlJTklUX0xJU1RfSEVBRCgmcnEtPmxlYWZfcnRfcnFfbGlzdCk7CiAjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCQlpbml0X3RnX3J0X2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsICZycS0+cnQsIE5VTEwsIGksIDEsIE5VTEwpOwotI2VsaWYgZGVmaW5lZCBDT05GSUdfVVNFUl9TQ0hFRAotCQlpbml0X3RnX3J0X2VudHJ5KCZyb290X3Rhc2tfZ3JvdXAsICZycS0+cnQsIE5VTEwsIGksIDAsIE5VTEwpOwotCQlpbml0X3RnX3J0X2VudHJ5KCZpbml0X3Rhc2tfZ3JvdXAsCi0JCQkJJnBlcl9jcHUoaW5pdF9ydF9ycV92YXIsIGkpLAotCQkJCSZwZXJfY3B1KGluaXRfc2NoZWRfcnRfZW50aXR5LCBpKSwgaSwgMSwKLQkJCQlyb290X3Rhc2tfZ3JvdXAucnRfc2VbaV0pOwogI2VuZGlmCiAjZW5kaWYKIApAQCAtOTcxMiw3ICs3ODQ5LDcgQEAKIAlyZXR1cm4gKG5lc3RlZCA9PSBQUkVFTVBUX0lOQVRPTUlDX0JBU0UgKyBwcmVlbXB0X29mZnNldCk7CiB9CiAKLXZvaWQgX19taWdodF9zbGVlcChjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KQordm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpCiB7CiAjaWZkZWYgaW5fYXRvbWljCiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldl9qaWZmeTsJLyogcmF0ZWxpbWl0aW5nICovCkBAIC0xMDAyMyw3ICs4MTYwLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KIAotI2lmZGVmIENPTkZJR19HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIHN0YXRpYyB2b2lkIGZyZWVfc2NoZWRfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKQogewogCWZyZWVfZmFpcl9zY2hlZF9ncm91cCh0Zyk7CkBAIC0xMDEyOCwxMSArODI2NSwxMSBAQAogCWlmICh1bmxpa2VseShydW5uaW5nKSkKIAkJdHNrLT5zY2hlZF9jbGFzcy0+c2V0X2N1cnJfdGFzayhycSk7CiAJaWYgKG9uX3JxKQotCQllbnF1ZXVlX3Rhc2socnEsIHRzaywgMCk7CisJCWVucXVldWVfdGFzayhycSwgdHNrLCAwLCBmYWxzZSk7CiAKIAl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfR1JPVVBfU0NIRUQgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovCiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogc3RhdGljIHZvaWQgX19zZXRfc2Vfc2hhcmVzKHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlLCB1bnNpZ25lZCBsb25nIHNoYXJlcykKQEAgLTEwMjc0LDEzICs4NDExLDYgQEAKIAkJcnVudGltZSA9IGQtPnJ0X3J1bnRpbWU7CiAJfQogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlpZiAodGcgPT0gJnJvb3RfdGFza19ncm91cCkgewotCQlwZXJpb2QgPSBnbG9iYWxfcnRfcGVyaW9kKCk7Ci0JCXJ1bnRpbWUgPSBnbG9iYWxfcnRfcnVudGltZSgpOwotCX0KLSNlbmRpZgotCiAJLyoKIAkgKiBDYW5ub3QgaGF2ZSBtb3JlIHJ1bnRpbWUgdGhhbiB0aGUgcGVyaW9kLgogCSAqLwpAQCAtMTA5MDAsMTIgKzkwMzAsMzAgQEAKIH0KIAogLyoKKyAqIFdoZW4gQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgaXMgZW5hYmxlZCBvbmUgamlmZnkgY2FuIGJlIHZlcnkgbGFyZ2UKKyAqIGluIGNwdXRpbWVfdCB1bml0cy4gQXMgYSByZXN1bHQsIGNwdWFjY3RfdXBkYXRlX3N0YXRzIGNhbGxzCisgKiBwZXJjcHVfY291bnRlcl9hZGQgd2l0aCB2YWx1ZXMgbGFyZ2UgZW5vdWdoIHRvIGFsd2F5cyBvdmVyZmxvdyB0aGUKKyAqIHBlciBjcHUgYmF0Y2ggbGltaXQgY2F1c2luZyBiYWQgU01QIHNjYWxhYmlsaXR5LgorICoKKyAqIFRvIGZpeCB0aGlzIHdlIHNjYWxlIHBlcmNwdV9jb3VudGVyX2JhdGNoIGJ5IGNwdXRpbWVfb25lX2ppZmZ5IHNvIHdlCisgKiBiYXRjaCB0aGUgc2FtZSBhbW91bnQgb2YgdGltZSB3aXRoIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HIGRpc2FibGVkCisgKiBhbmQgZW5hYmxlZC4gV2UgY2FwIGl0IGF0IElOVF9NQVggd2hpY2ggaXMgdGhlIGxhcmdlc3QgYWxsb3dlZCBiYXRjaCB2YWx1ZS4KKyAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgQ1BVQUNDVF9CQVRDSAlcCisJbWluX3QobG9uZywgcGVyY3B1X2NvdW50ZXJfYmF0Y2ggKiBjcHV0aW1lX29uZV9qaWZmeSwgSU5UX01BWCkKKyNlbHNlCisjZGVmaW5lIENQVUFDQ1RfQkFUQ0gJMAorI2VuZGlmCisKKy8qCiAgKiBDaGFyZ2UgdGhlIHN5c3RlbS91c2VyIHRpbWUgdG8gdGhlIHRhc2sncyBhY2NvdW50aW5nIGdyb3VwLgogICovCiBzdGF0aWMgdm9pZCBjcHVhY2N0X3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJZW51bSBjcHVhY2N0X3N0YXRfaW5kZXggaWR4LCBjcHV0aW1lX3QgdmFsKQogewogCXN0cnVjdCBjcHVhY2N0ICpjYTsKKwlpbnQgYmF0Y2ggPSBDUFVBQ0NUX0JBVENIOwogCiAJaWYgKHVubGlrZWx5KCFjcHVhY2N0X3N1YnN5cy5hY3RpdmUpKQogCQlyZXR1cm47CkBAIC0xMDkxNCw3ICs5MDYyLDcgQEAKIAljYSA9IHRhc2tfY2EodHNrKTsKIAogCWRvIHsKLQkJcGVyY3B1X2NvdW50ZXJfYWRkKCZjYS0+Y3B1c3RhdFtpZHhdLCB2YWwpOworCQlfX3BlcmNwdV9jb3VudGVyX2FkZCgmY2EtPmNwdXN0YXRbaWR4XSwgdmFsLCBiYXRjaCk7CiAJCWNhID0gY2EtPnBhcmVudDsKIAl9IHdoaWxlIChjYSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmMgYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKaW5kZXggNTk3YjMzMC4uZWViMzUwNiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2NwdXByaS5jCisrKyBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuYwpAQCAtNDcsOSArNDcsNyBAQAogfQogCiAjZGVmaW5lIGZvcl9lYWNoX2NwdXByaV9hY3RpdmUoYXJyYXksIGlkeCkgICAgICAgICAgICAgICAgICAgIFwKLSAgZm9yIChpZHggPSBmaW5kX2ZpcnN0X2JpdChhcnJheSwgQ1BVUFJJX05SX1BSSU9SSVRJRVMpOyAgICAgXAotICAgICAgIGlkeCA8IENQVVBSSV9OUl9QUklPUklUSUVTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgaWR4ID0gZmluZF9uZXh0X2JpdChhcnJheSwgQ1BVUFJJX05SX1BSSU9SSVRJRVMsIGlkeCsxKSkKKwlmb3JfZWFjaF9iaXQoaWR4LCBhcnJheSwgQ1BVUFJJX05SX1BSSU9SSVRJRVMpCiAKIC8qKgogICogY3B1cHJpX2ZpbmQgLSBmaW5kIHRoZSBiZXN0IChsb3dlc3QtcHJpKSBDUFUgaW4gdGhlIHN5c3RlbQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggOGZlN2VlOC4uM2UxZmQ5NiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC0xMDUzLDcgKzEwNTMsOCBAQAogICogaW5jcmVhc2VkLiBIZXJlIHdlIHVwZGF0ZSB0aGUgZmFpciBzY2hlZHVsaW5nIHN0YXRzIGFuZAogICogdGhlbiBwdXQgdGhlIHRhc2sgaW50byB0aGUgcmJ0cmVlOgogICovCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApCitzdGF0aWMgdm9pZAorZW5xdWV1ZV90YXNrX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwLCBib29sIGhlYWQpCiB7CiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxOwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOwpAQCAtMTgxNSw1NyArMTgxNiwxNjQgQEAKICAqLwogCiAvKgotICogTG9hZC1iYWxhbmNpbmcgaXRlcmF0b3IuIE5vdGU6IHdoaWxlIHRoZSBydW5xdWV1ZSBzdGF5cyBsb2NrZWQKLSAqIGR1cmluZyB0aGUgd2hvbGUgaXRlcmF0aW9uLCB0aGUgY3VycmVudCB0YXNrIG1pZ2h0IGJlCi0gKiBkZXF1ZXVlZCBzbyB0aGUgaXRlcmF0b3IgaGFzIHRvIGJlIGRlcXVldWUtc2FmZS4gSGVyZSB3ZQotICogYWNoaWV2ZSB0aGF0IGJ5IGFsd2F5cyBwcmUtaXRlcmF0aW5nIGJlZm9yZSByZXR1cm5pbmcKLSAqIHRoZSBjdXJyZW50IHRhc2s6CisgKiBwdWxsX3Rhc2sgLSBtb3ZlIGEgdGFzayBmcm9tIGEgcmVtb3RlIHJ1bnF1ZXVlIHRvIHRoZSBsb2NhbCBydW5xdWV1ZS4KKyAqIEJvdGggcnVucXVldWVzIG11c3QgYmUgbG9ja2VkLgogICovCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICoKLV9fbG9hZF9iYWxhbmNlX2l0ZXJhdG9yKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IGxpc3RfaGVhZCAqbmV4dCkKK3N0YXRpYyB2b2lkIHB1bGxfdGFzayhzdHJ1Y3QgcnEgKnNyY19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQkgICAgICBzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBOVUxMOwotCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlOwotCi0JaWYgKG5leHQgPT0gJmNmc19ycS0+dGFza3MpCi0JCXJldHVybiBOVUxMOwotCi0Jc2UgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBzY2hlZF9lbnRpdHksIGdyb3VwX25vZGUpOwotCXAgPSB0YXNrX29mKHNlKTsKLQljZnNfcnEtPmJhbGFuY2VfaXRlcmF0b3IgPSBuZXh0LT5uZXh0OwotCi0JcmV0dXJuIHA7CisJZGVhY3RpdmF0ZV90YXNrKHNyY19ycSwgcCwgMCk7CisJc2V0X3Rhc2tfY3B1KHAsIHRoaXNfY3B1KTsKKwlhY3RpdmF0ZV90YXNrKHRoaXNfcnEsIHAsIDApOworCWNoZWNrX3ByZWVtcHRfY3Vycih0aGlzX3JxLCBwLCAwKTsKIH0KIAotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqbG9hZF9iYWxhbmNlX3N0YXJ0X2ZhaXIodm9pZCAqYXJnKQorLyoKKyAqIGNhbl9taWdyYXRlX3Rhc2sgLSBtYXkgdGFzayBwIGZyb20gcnVucXVldWUgcnEgYmUgbWlncmF0ZWQgdG8gdGhpc19jcHU/CisgKi8KK3N0YXRpYworaW50IGNhbl9taWdyYXRlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcnEgKnJxLCBpbnQgdGhpc19jcHUsCisJCSAgICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAorCQkgICAgIGludCAqYWxsX3Bpbm5lZCkKIHsKLQlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSBhcmc7CisJaW50IHRza19jYWNoZV9ob3QgPSAwOworCS8qCisJICogV2UgZG8gbm90IG1pZ3JhdGUgdGFza3MgdGhhdCBhcmU6CisJICogMSkgcnVubmluZyAob2J2aW91c2x5KSwgb3IKKwkgKiAyKSBjYW5ub3QgYmUgbWlncmF0ZWQgdG8gdGhpcyBDUFUgZHVlIHRvIGNwdXNfYWxsb3dlZCwgb3IKKwkgKiAzKSBhcmUgY2FjaGUtaG90IG9uIHRoZWlyIGN1cnJlbnQgQ1BVLgorCSAqLworCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwgJnAtPmNwdXNfYWxsb3dlZCkpIHsKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19hZmZpbmUpOworCQlyZXR1cm4gMDsKKwl9CisJKmFsbF9waW5uZWQgPSAwOwogCi0JcmV0dXJuIF9fbG9hZF9iYWxhbmNlX2l0ZXJhdG9yKGNmc19ycSwgY2ZzX3JxLT50YXNrcy5uZXh0KTsKKwlpZiAodGFza19ydW5uaW5nKHJxLCBwKSkgeworCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX3J1bm5pbmcpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIEFnZ3Jlc3NpdmUgbWlncmF0aW9uIGlmOgorCSAqIDEpIHRhc2sgaXMgY2FjaGUgY29sZCwgb3IKKwkgKiAyKSB0b28gbWFueSBiYWxhbmNlIGF0dGVtcHRzIGhhdmUgZmFpbGVkLgorCSAqLworCisJdHNrX2NhY2hlX2hvdCA9IHRhc2tfaG90KHAsIHJxLT5jbG9jaywgc2QpOworCWlmICghdHNrX2NhY2hlX2hvdCB8fAorCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPiBzZC0+Y2FjaGVfbmljZV90cmllcykgeworI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCisJCWlmICh0c2tfY2FjaGVfaG90KSB7CisJCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ob3RfZ2FpbmVkW2lkbGVdKTsKKwkJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZm9yY2VkX21pZ3JhdGlvbnMpOworCQl9CisjZW5kaWYKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHRza19jYWNoZV9ob3QpIHsKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ob3QpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxvYWRfYmFsYW5jZV9uZXh0X2ZhaXIodm9pZCAqYXJnKQorLyoKKyAqIG1vdmVfb25lX3Rhc2sgdHJpZXMgdG8gbW92ZSBleGFjdGx5IG9uZSB0YXNrIGZyb20gYnVzaWVzdCB0byB0aGlzX3JxLCBhcworICogcGFydCBvZiBhY3RpdmUgYmFsYW5jaW5nIG9wZXJhdGlvbnMgd2l0aGluICJkb21haW4iLgorICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgYW5kIDAgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlZCB3aXRoIGJvdGggcnVucXVldWVzIGxvY2tlZC4KKyAqLworc3RhdGljIGludAorbW92ZV9vbmVfdGFzayhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAorCSAgICAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKIHsKLQlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSBhcmc7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsKKwlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7CisJaW50IHBpbm5lZCA9IDA7CiAKLQlyZXR1cm4gX19sb2FkX2JhbGFuY2VfaXRlcmF0b3IoY2ZzX3JxLCBjZnNfcnEtPmJhbGFuY2VfaXRlcmF0b3IpOworCWZvcl9lYWNoX2xlYWZfY2ZzX3JxKGJ1c2llc3QsIGNmc19ycSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmNmc19ycS0+dGFza3MsIHNlLmdyb3VwX25vZGUpIHsKKworCQkJaWYgKCFjYW5fbWlncmF0ZV90YXNrKHAsIGJ1c2llc3QsIHRoaXNfY3B1LAorCQkJCQkJc2QsIGlkbGUsICZwaW5uZWQpKQorCQkJCWNvbnRpbnVlOworCisJCQlwdWxsX3Rhc2soYnVzaWVzdCwgcCwgdGhpc19ycSwgdGhpc19jcHUpOworCQkJLyoKKwkJCSAqIFJpZ2h0IG5vdywgdGhpcyBpcyBvbmx5IHRoZSBzZWNvbmQgcGxhY2UgcHVsbF90YXNrKCkKKwkJCSAqIGlzIGNhbGxlZCwgc28gd2UgY2FuIHNhZmVseSBjb2xsZWN0IHB1bGxfdGFzaygpCisJCQkgKiBzdGF0cyBoZXJlIHJhdGhlciB0aGFuIGluc2lkZSBwdWxsX3Rhc2soKS4KKwkJCSAqLworCQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfZ2FpbmVkW2lkbGVdKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCi1fX2xvYWRfYmFsYW5jZV9mYWlyKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKmFsbF9waW5uZWQsIGludCAqdGhpc19iZXN0X3ByaW8sCi0JCXN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK2JhbGFuY2VfdGFza3Moc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKKwkgICAgICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKmFsbF9waW5uZWQsCisJICAgICAgaW50ICp0aGlzX2Jlc3RfcHJpbywgc3RydWN0IGNmc19ycSAqYnVzaWVzdF9jZnNfcnEpCiB7Ci0Jc3RydWN0IHJxX2l0ZXJhdG9yIGNmc19ycV9pdGVyYXRvcjsKKwlpbnQgbG9vcHMgPSAwLCBwdWxsZWQgPSAwLCBwaW5uZWQgPSAwOworCWxvbmcgcmVtX2xvYWRfbW92ZSA9IG1heF9sb2FkX21vdmU7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsKIAotCWNmc19ycV9pdGVyYXRvci5zdGFydCA9IGxvYWRfYmFsYW5jZV9zdGFydF9mYWlyOwotCWNmc19ycV9pdGVyYXRvci5uZXh0ID0gbG9hZF9iYWxhbmNlX25leHRfZmFpcjsKLQljZnNfcnFfaXRlcmF0b3IuYXJnID0gY2ZzX3JxOworCWlmIChtYXhfbG9hZF9tb3ZlID09IDApCisJCWdvdG8gb3V0OwogCi0JcmV0dXJuIGJhbGFuY2VfdGFza3ModGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCi0JCQltYXhfbG9hZF9tb3ZlLCBzZCwgaWRsZSwgYWxsX3Bpbm5lZCwKLQkJCXRoaXNfYmVzdF9wcmlvLCAmY2ZzX3JxX2l0ZXJhdG9yKTsKKwlwaW5uZWQgPSAxOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZidXNpZXN0X2Nmc19ycS0+dGFza3MsIHNlLmdyb3VwX25vZGUpIHsKKwkJaWYgKGxvb3BzKysgPiBzeXNjdGxfc2NoZWRfbnJfbWlncmF0ZSkKKwkJCWJyZWFrOworCisJCWlmICgocC0+c2UubG9hZC53ZWlnaHQgPj4gMSkgPiByZW1fbG9hZF9tb3ZlIHx8CisJCSAgICAhY2FuX21pZ3JhdGVfdGFzayhwLCBidXNpZXN0LCB0aGlzX2NwdSwgc2QsIGlkbGUsICZwaW5uZWQpKQorCQkJY29udGludWU7CisKKwkJcHVsbF90YXNrKGJ1c2llc3QsIHAsIHRoaXNfcnEsIHRoaXNfY3B1KTsKKwkJcHVsbGVkKys7CisJCXJlbV9sb2FkX21vdmUgLT0gcC0+c2UubG9hZC53ZWlnaHQ7CisKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCQkvKgorCQkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZQorCQkgKiBrZXJuZWxzIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUKKwkJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24uCisJCSAqLworCQlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSkKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJLyoKKwkJICogV2Ugb25seSB3YW50IHRvIHN0ZWFsIHVwIHRvIHRoZSBwcmVzY3JpYmVkIGFtb3VudCBvZgorCQkgKiB3ZWlnaHRlZCBsb2FkLgorCQkgKi8KKwkJaWYgKHJlbV9sb2FkX21vdmUgPD0gMCkKKwkJCWJyZWFrOworCisJCWlmIChwLT5wcmlvIDwgKnRoaXNfYmVzdF9wcmlvKQorCQkJKnRoaXNfYmVzdF9wcmlvID0gcC0+cHJpbzsKKwl9CitvdXQ6CisJLyoKKwkgKiBSaWdodCBub3csIHRoaXMgaXMgb25lIG9mIG9ubHkgdHdvIHBsYWNlcyBwdWxsX3Rhc2soKSBpcyBjYWxsZWQsCisJICogc28gd2UgY2FuIHNhZmVseSBjb2xsZWN0IHB1bGxfdGFzaygpIHN0YXRzIGhlcmUgcmF0aGVyIHRoYW4KKwkgKiBpbnNpZGUgcHVsbF90YXNrKCkuCisJICovCisJc2NoZWRzdGF0X2FkZChzZCwgbGJfZ2FpbmVkW2lkbGVdLCBwdWxsZWQpOworCisJaWYgKGFsbF9waW5uZWQpCisJCSphbGxfcGlubmVkID0gcGlubmVkOworCisJcmV0dXJuIG1heF9sb2FkX21vdmUgLSByZW1fbG9hZF9tb3ZlOwogfQogCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKQEAgLTE4OTcsOSArMjAwNSw5IEBACiAJCXJlbV9sb2FkID0gKHU2NClyZW1fbG9hZF9tb3ZlICogYnVzaWVzdF93ZWlnaHQ7CiAJCXJlbV9sb2FkID0gZGl2X3U2NChyZW1fbG9hZCwgYnVzaWVzdF9oX2xvYWQgKyAxKTsKIAotCQltb3ZlZF9sb2FkID0gX19sb2FkX2JhbGFuY2VfZmFpcih0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKKwkJbW92ZWRfbG9hZCA9IGJhbGFuY2VfdGFza3ModGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCiAJCQkJcmVtX2xvYWQsIHNkLCBpZGxlLCBhbGxfcGlubmVkLCB0aGlzX2Jlc3RfcHJpbywKLQkJCQl0Zy0+Y2ZzX3JxW2J1c2llc3RfY3B1XSk7CisJCQkJYnVzaWVzdF9jZnNfcnEpOwogCiAJCWlmICghbW92ZWRfbG9hZCkKIAkJCWNvbnRpbnVlOwpAQCAtMTkyMiwzNSArMjAzMCwxNTA5IEBACiAJCSAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAogCQkgIGludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbykKIHsKLQlyZXR1cm4gX19sb2FkX2JhbGFuY2VfZmFpcih0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKKwlyZXR1cm4gYmFsYW5jZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKIAkJCW1heF9sb2FkX21vdmUsIHNkLCBpZGxlLCBhbGxfcGlubmVkLAogCQkJdGhpc19iZXN0X3ByaW8sICZidXNpZXN0LT5jZnMpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQKLW1vdmVfb25lX3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQkgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCisvKgorICogbW92ZV90YXNrcyB0cmllcyB0byBtb3ZlIHVwIHRvIG1heF9sb2FkX21vdmUgd2VpZ2h0ZWQgbG9hZCBmcm9tIGJ1c2llc3QgdG8KKyAqIHRoaXNfcnEsIGFzIHBhcnQgb2YgYSBiYWxhbmNpbmcgb3BlcmF0aW9uIHdpdGhpbiBkb21haW4gInNkIi4KKyAqIFJldHVybnMgMSBpZiBzdWNjZXNzZnVsIGFuZCAwIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZWQgd2l0aCBib3RoIHJ1bnF1ZXVlcyBsb2NrZWQuCisgKi8KK3N0YXRpYyBpbnQgbW92ZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAorCQkgICAgICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCisJCSAgICAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKKwkJICAgICAgaW50ICphbGxfcGlubmVkKQogewotCXN0cnVjdCBjZnNfcnEgKmJ1c3lfY2ZzX3JxOwotCXN0cnVjdCBycV9pdGVyYXRvciBjZnNfcnFfaXRlcmF0b3I7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkX21vdmVkID0gMCwgbG9hZF9tb3ZlZDsKKwlpbnQgdGhpc19iZXN0X3ByaW8gPSB0aGlzX3JxLT5jdXJyLT5wcmlvOwogCi0JY2ZzX3JxX2l0ZXJhdG9yLnN0YXJ0ID0gbG9hZF9iYWxhbmNlX3N0YXJ0X2ZhaXI7Ci0JY2ZzX3JxX2l0ZXJhdG9yLm5leHQgPSBsb2FkX2JhbGFuY2VfbmV4dF9mYWlyOworCWRvIHsKKwkJbG9hZF9tb3ZlZCA9IGxvYWRfYmFsYW5jZV9mYWlyKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAorCQkJCW1heF9sb2FkX21vdmUgLSB0b3RhbF9sb2FkX21vdmVkLAorCQkJCXNkLCBpZGxlLCBhbGxfcGlubmVkLCAmdGhpc19iZXN0X3ByaW8pOwogCi0JZm9yX2VhY2hfbGVhZl9jZnNfcnEoYnVzaWVzdCwgYnVzeV9jZnNfcnEpIHsKKwkJdG90YWxfbG9hZF9tb3ZlZCArPSBsb2FkX21vdmVkOworCisjaWZkZWYgQ09ORklHX1BSRUVNUFQKIAkJLyoKLQkJICogcGFzcyBidXN5X2Nmc19ycSBhcmd1bWVudCBpbnRvCi0JCSAqIGxvYWRfYmFsYW5jZV9bc3RhcnR8bmV4dF1fZmFpciBpdGVyYXRvcnMKKwkJICogTkVXSURMRSBiYWxhbmNpbmcgaXMgYSBzb3VyY2Ugb2YgbGF0ZW5jeSwgc28gcHJlZW1wdGlibGUKKwkJICoga2VybmVscyB3aWxsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgaXMgcHVsbGVkIHRvIG1pbmltaXplCisJCSAqIHRoZSBjcml0aWNhbCBzZWN0aW9uLgogCQkgKi8KLQkJY2ZzX3JxX2l0ZXJhdG9yLmFyZyA9IGJ1c3lfY2ZzX3JxOwotCQlpZiAoaXRlcl9tb3ZlX29uZV90YXNrKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LCBzZCwgaWRsZSwKLQkJCQkgICAgICAgJmNmc19ycV9pdGVyYXRvcikpCi0JCSAgICByZXR1cm4gMTsKKwkJaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUgJiYgdGhpc19ycS0+bnJfcnVubmluZykKKwkJCWJyZWFrOworCisJCWlmIChyYXdfc3Bpbl9pc19jb250ZW5kZWQoJnRoaXNfcnEtPmxvY2spIHx8CisJCQkJcmF3X3NwaW5faXNfY29udGVuZGVkKCZidXNpZXN0LT5sb2NrKSkKKwkJCWJyZWFrOworI2VuZGlmCisJfSB3aGlsZSAobG9hZF9tb3ZlZCAmJiBtYXhfbG9hZF9tb3ZlID4gdG90YWxfbG9hZF9tb3ZlZCk7CisKKwlyZXR1cm4gdG90YWxfbG9hZF9tb3ZlZCA+IDA7Cit9CisKKy8qKioqKioqKioqIEhlbHBlcnMgZm9yIGZpbmRfYnVzaWVzdF9ncm91cCAqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogc2RfbGJfc3RhdHMgLSBTdHJ1Y3R1cmUgdG8gc3RvcmUgdGhlIHN0YXRpc3RpY3Mgb2YgYSBzY2hlZF9kb21haW4KKyAqIAkJZHVyaW5nIGxvYWQgYmFsYW5jaW5nLgorICovCitzdHJ1Y3Qgc2RfbGJfc3RhdHMgeworCXN0cnVjdCBzY2hlZF9ncm91cCAqYnVzaWVzdDsgLyogQnVzaWVzdCBncm91cCBpbiB0aGlzIHNkICovCisJc3RydWN0IHNjaGVkX2dyb3VwICp0aGlzOyAgLyogTG9jYWwgZ3JvdXAgaW4gdGhpcyBzZCAqLworCXVuc2lnbmVkIGxvbmcgdG90YWxfbG9hZDsgIC8qIFRvdGFsIGxvYWQgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLworCXVuc2lnbmVkIGxvbmcgdG90YWxfcHdyOyAgIC8qCVRvdGFsIHBvd2VyIG9mIGFsbCBncm91cHMgaW4gc2QgKi8KKwl1bnNpZ25lZCBsb25nIGF2Z19sb2FkOwkgICAvKiBBdmVyYWdlIGxvYWQgYWNyb3NzIGFsbCBncm91cHMgaW4gc2QgKi8KKworCS8qKiBTdGF0aXN0aWNzIG9mIHRoaXMgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZDsKKwl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZF9wZXJfdGFzazsKKwl1bnNpZ25lZCBsb25nIHRoaXNfbnJfcnVubmluZzsKKworCS8qIFN0YXRpc3RpY3Mgb2YgdGhlIGJ1c2llc3QgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9sb2FkOworCXVuc2lnbmVkIGxvbmcgYnVzaWVzdF9sb2FkX3Blcl90YXNrOworCXVuc2lnbmVkIGxvbmcgYnVzaWVzdF9ucl9ydW5uaW5nOworCXVuc2lnbmVkIGxvbmcgYnVzaWVzdF9ncm91cF9jYXBhY2l0eTsKKworCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGltYmFsYW5jZSBpbiB0aGlzIHNkICovCisjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKKwlpbnQgcG93ZXJfc2F2aW5nc19iYWxhbmNlOyAvKiBJcyBwb3dlcnNhdmUgYmFsYW5jZSBuZWVkZWQgZm9yIHRoaXMgc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX21pbjsgLyogTGVhc3QgbG9hZGVkIGdyb3VwIGluIHNkICovCisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9sZWFkZXI7IC8qIEdyb3VwIHdoaWNoIHJlbGlldmVzIGdyb3VwX21pbiAqLworCXVuc2lnbmVkIGxvbmcgbWluX2xvYWRfcGVyX3Rhc2s7IC8qIGxvYWRfcGVyX3Rhc2sgaW4gZ3JvdXBfbWluICovCisJdW5zaWduZWQgbG9uZyBsZWFkZXJfbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9sZWFkZXIgKi8KKwl1bnNpZ25lZCBsb25nIG1pbl9ucl9ydW5uaW5nOyAvKiBOciBydW5uaW5nIG9mIGdyb3VwX21pbiAqLworI2VuZGlmCit9OworCisvKgorICogc2dfbGJfc3RhdHMgLSBzdGF0cyBvZiBhIHNjaGVkX2dyb3VwIHJlcXVpcmVkIGZvciBsb2FkX2JhbGFuY2luZworICovCitzdHJ1Y3Qgc2dfbGJfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7IC8qQXZnIGxvYWQgYWNyb3NzIHRoZSBDUFVzIG9mIHRoZSBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgZ3JvdXBfbG9hZDsgLyogVG90YWwgbG9hZCBvdmVyIHRoZSBDUFVzIG9mIHRoZSBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgc3VtX25yX3J1bm5pbmc7IC8qIE5yIHRhc2tzIHJ1bm5pbmcgaW4gdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzdW1fd2VpZ2h0ZWRfbG9hZDsgLyogV2VpZ2h0ZWQgbG9hZCBvZiBncm91cCdzIHRhc2tzICovCisJdW5zaWduZWQgbG9uZyBncm91cF9jYXBhY2l0eTsKKwlpbnQgZ3JvdXBfaW1iOyAvKiBJcyB0aGVyZSBhbiBpbWJhbGFuY2UgaW4gdGhlIGdyb3VwID8gKi8KK307CisKKy8qKgorICogZ3JvdXBfZmlyc3RfY3B1IC0gUmV0dXJucyB0aGUgZmlyc3QgY3B1IGluIHRoZSBjcHVtYXNrIG9mIGEgc2NoZWRfZ3JvdXAuCisgKiBAZ3JvdXA6IFRoZSBncm91cCB3aG9zZSBmaXJzdCBjcHUgaXMgdG8gYmUgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdyb3VwX2ZpcnN0X2NwdShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwKQoreworCXJldHVybiBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKK30KKworLyoqCisgKiBnZXRfc2RfbG9hZF9pZHggLSBPYnRhaW4gdGhlIGxvYWQgaW5kZXggZm9yIGEgZ2l2ZW4gc2NoZWQgZG9tYWluLgorICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIGxvYWRfaWR4IGlzIHRvIGJlIG9idGFpbmVkLgorICogQGlkbGU6IFRoZSBJZGxlIHN0YXR1cyBvZiB0aGUgQ1BVIGZvciB3aG9zZSBzZCBsb2FkX2ljeCBpcyBvYnRhaW5lZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X3NkX2xvYWRfaWR4KHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCQkJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwlpbnQgbG9hZF9pZHg7CisKKwlzd2l0Y2ggKGlkbGUpIHsKKwljYXNlIENQVV9OT1RfSURMRToKKwkJbG9hZF9pZHggPSBzZC0+YnVzeV9pZHg7CisJCWJyZWFrOworCisJY2FzZSBDUFVfTkVXTFlfSURMRToKKwkJbG9hZF9pZHggPSBzZC0+bmV3aWRsZV9pZHg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxvYWRfaWR4ID0gc2QtPmlkbGVfaWR4OworCQlicmVhazsKIAl9CiAKKwlyZXR1cm4gbG9hZF9pZHg7Cit9CisKKworI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCisvKioKKyAqIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyAtIEluaXRpYWxpemUgcG93ZXIgc2F2aW5ncyBzdGF0aXN0aWNzIGZvcgorICogdGhlIGdpdmVuIHNjaGVkX2RvbWFpbiwgZHVyaW5nIGxvYWQgYmFsYW5jaW5nLgorICoKKyAqIEBzZDogU2NoZWQgZG9tYWluIHdob3NlIHBvd2VyLXNhdmluZ3Mgc3RhdGlzdGljcyBhcmUgdG8gYmUgaW5pdGlhbGl6ZWQuCisgKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIGZvciBzZC4KKyAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgQ1BVIGF0IHdoaWNoIHdlJ3JlIHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCS8qCisJICogQnVzeSBwcm9jZXNzb3JzIHdpbGwgbm90IHBhcnRpY2lwYXRlIGluIHBvd2VyIHNhdmluZ3MKKwkgKiBiYWxhbmNlLgorCSAqLworCWlmIChpZGxlID09IENQVV9OT1RfSURMRSB8fCAhKHNkLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKKwkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAwOworCWVsc2UgeworCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDE7CisJCXNkcy0+bWluX25yX3J1bm5pbmcgPSBVTE9OR19NQVg7CisJCXNkcy0+bGVhZGVyX25yX3J1bm5pbmcgPSAwOworCX0KK30KKworLyoqCisgKiB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyAtIFVwZGF0ZSB0aGUgcG93ZXIgc2F2aW5nIHN0YXRzIGZvciBhCisgKiBzY2hlZF9kb21haW4gd2hpbGUgcGVyZm9ybWluZyBsb2FkIGJhbGFuY2luZy4KKyAqCisgKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIGJlbG9uZ2luZyB0byB0aGUgc2NoZWRfZG9tYWluIHVuZGVyIGNvbnNpZGVyYXRpb24uCisgKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KKyAqIEBsb2NhbF9ncm91cDogRG9lcyBncm91cCBjb250YWluIHRoZSBDUFUgZm9yIHdoaWNoIHdlJ3JlIHBlcmZvcm1pbmcKKyAqIAkJbG9hZCBiYWxhbmNpbmcgPworICogQHNnczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgZ3JvdXAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgbG9jYWxfZ3JvdXAsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQoreworCisJaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgbG9jYWwgZ3JvdXAgaXMgaWRsZSBvciBjb21wbGV0ZWx5IGxvYWRlZAorCSAqIG5vIG5lZWQgdG8gZG8gcG93ZXIgc2F2aW5ncyBiYWxhbmNlIGF0IHRoaXMgZG9tYWluCisJICovCisJaWYgKGxvY2FsX2dyb3VwICYmIChzZHMtPnRoaXNfbnJfcnVubmluZyA+PSBzZ3MtPmdyb3VwX2NhcGFjaXR5IHx8CisJCQkJIXNkcy0+dGhpc19ucl9ydW5uaW5nKSkKKwkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAwOworCisJLyoKKwkgKiBJZiBhIGdyb3VwIGlzIGFscmVhZHkgcnVubmluZyBhdCBmdWxsIGNhcGFjaXR5IG9yIGlkbGUsCisJICogZG9uJ3QgaW5jbHVkZSB0aGF0IGdyb3VwIGluIHBvd2VyIHNhdmluZ3MgY2FsY3VsYXRpb25zCisJICovCisJaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSB8fAorCQlzZ3MtPnN1bV9ucl9ydW5uaW5nID49IHNncy0+Z3JvdXBfY2FwYWNpdHkgfHwKKwkJIXNncy0+c3VtX25yX3J1bm5pbmcpCisJCXJldHVybjsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBoYXMgdGhlIGxlYXN0IG5vbi1pZGxlIGxvYWQuCisJICogVGhpcyBpcyB0aGUgZ3JvdXAgZnJvbSB3aGVyZSB3ZSBuZWVkIHRvIHBpY2sgdXAgdGhlIGxvYWQKKwkgKiBmb3Igc2F2aW5nIHBvd2VyCisJICovCisJaWYgKChzZ3MtPnN1bV9ucl9ydW5uaW5nIDwgc2RzLT5taW5fbnJfcnVubmluZykgfHwKKwkgICAgKHNncy0+c3VtX25yX3J1bm5pbmcgPT0gc2RzLT5taW5fbnJfcnVubmluZyAmJgorCSAgICAgZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKSA+IGdyb3VwX2ZpcnN0X2NwdShzZHMtPmdyb3VwX21pbikpKSB7CisJCXNkcy0+Z3JvdXBfbWluID0gZ3JvdXA7CisJCXNkcy0+bWluX25yX3J1bm5pbmcgPSBzZ3MtPnN1bV9ucl9ydW5uaW5nOworCQlzZHMtPm1pbl9sb2FkX3Blcl90YXNrID0gc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCAvCisJCQkJCQlzZ3MtPnN1bV9ucl9ydW5uaW5nOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBpcyBhbG1vc3QgbmVhciBpdHMKKwkgKiBjYXBhY2l0eSBidXQgc3RpbGwgaGFzIHNvbWUgc3BhY2UgdG8gcGljayB1cCBzb21lIGxvYWQKKwkgKiBmcm9tIG90aGVyIGdyb3VwIGFuZCBzYXZlIG1vcmUgcG93ZXIKKwkgKi8KKwlpZiAoc2dzLT5zdW1fbnJfcnVubmluZyArIDEgPiBzZ3MtPmdyb3VwX2NhcGFjaXR5KQorCQlyZXR1cm47CisKKwlpZiAoc2dzLT5zdW1fbnJfcnVubmluZyA+IHNkcy0+bGVhZGVyX25yX3J1bm5pbmcgfHwKKwkgICAgKHNncy0+c3VtX25yX3J1bm5pbmcgPT0gc2RzLT5sZWFkZXJfbnJfcnVubmluZyAmJgorCSAgICAgZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKSA8IGdyb3VwX2ZpcnN0X2NwdShzZHMtPmdyb3VwX2xlYWRlcikpKSB7CisJCXNkcy0+Z3JvdXBfbGVhZGVyID0gZ3JvdXA7CisJCXNkcy0+bGVhZGVyX25yX3J1bm5pbmcgPSBzZ3MtPnN1bV9ucl9ydW5uaW5nOworCX0KK30KKworLyoqCisgKiBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAgLSBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciBzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZQorICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCisgKgl1bmRlciBjb25zaWRlcmF0aW9uLgorICogQHRoaXNfY3B1OiBDcHUgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5IHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCisgKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2hlY2sgaWYgd2UgaGF2ZSBwb3RlbnRpYWwgdG8gcGVyZm9ybSBzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4KKyAqIElmIHllcywgc2V0IHRoZSBidXNpZXN0IGdyb3VwIHRvIGJlIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgaW4gdGhlCisgKiBzY2hlZF9kb21haW4sIHNvIHRoYXQgaXQncyBDUFVzIGNhbiBiZSBwdXQgdG8gaWRsZS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlcmUgaXMgcG90ZW50aWFsIHRvIHBlcmZvcm0gcG93ZXItc2F2aW5ncyBiYWxhbmNlLgorICogRWxzZSByZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKKwkJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCit7CisJaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2RzLT50aGlzICE9IHNkcy0+Z3JvdXBfbGVhZGVyIHx8CisJCQlzZHMtPmdyb3VwX2xlYWRlciA9PSBzZHMtPmdyb3VwX21pbikKKwkJcmV0dXJuIDA7CisKKwkqaW1iYWxhbmNlID0gc2RzLT5taW5fbG9hZF9wZXJfdGFzazsKKwlzZHMtPmJ1c2llc3QgPSBzZHMtPmdyb3VwX21pbjsKKworCXJldHVybiAxOworCit9CisjZWxzZSAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKKwkJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCit7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KKworCit1bnNpZ25lZCBsb25nIGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwlyZXR1cm4gU0NIRURfTE9BRF9TQ0FMRTsKK30KKwordW5zaWduZWQgbG9uZyBfX3dlYWsgYXJjaF9zY2FsZV9mcmVxX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCXJldHVybiBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyB3ZWlnaHQgPSBjcHVtYXNrX3dlaWdodChzY2hlZF9kb21haW5fc3BhbihzZCkpOworCXVuc2lnbmVkIGxvbmcgc210X2dhaW4gPSBzZC0+c210X2dhaW47CisKKwlzbXRfZ2FpbiAvPSB3ZWlnaHQ7CisKKwlyZXR1cm4gc210X2dhaW47Cit9CisKK3Vuc2lnbmVkIGxvbmcgX193ZWFrIGFyY2hfc2NhbGVfc210X3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCXJldHVybiBkZWZhdWx0X3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBzY2FsZV9ydF9wb3dlcihpbnQgY3B1KQoreworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKwl1NjQgdG90YWwsIGF2YWlsYWJsZTsKKworCXNjaGVkX2F2Z191cGRhdGUocnEpOworCisJdG90YWwgPSBzY2hlZF9hdmdfcGVyaW9kKCkgKyAocnEtPmNsb2NrIC0gcnEtPmFnZV9zdGFtcCk7CisJYXZhaWxhYmxlID0gdG90YWwgLSBycS0+cnRfYXZnOworCisJaWYgKHVubGlrZWx5KChzNjQpdG90YWwgPCBTQ0hFRF9MT0FEX1NDQUxFKSkKKwkJdG90YWwgPSBTQ0hFRF9MT0FEX1NDQUxFOworCisJdG90YWwgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisKKwlyZXR1cm4gZGl2X3U2NChhdmFpbGFibGUsIHRvdGFsKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2NwdV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIHdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7CisJdW5zaWduZWQgbG9uZyBwb3dlciA9IFNDSEVEX0xPQURfU0NBTEU7CisJc3RydWN0IHNjaGVkX2dyb3VwICpzZGcgPSBzZC0+Z3JvdXBzOworCisJaWYgKHNjaGVkX2ZlYXQoQVJDSF9QT1dFUikpCisJCXBvd2VyICo9IGFyY2hfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKKwllbHNlCisJCXBvd2VyICo9IGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKKworCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOworCisJaWYgKChzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUikgJiYgd2VpZ2h0ID4gMSkgeworCQlpZiAoc2NoZWRfZmVhdChBUkNIX1BPV0VSKSkKKwkJCXBvd2VyICo9IGFyY2hfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOworCQllbHNlCisJCQlwb3dlciAqPSBkZWZhdWx0X3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKKworCQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKKwl9CisKKwlwb3dlciAqPSBzY2FsZV9ydF9wb3dlcihjcHUpOworCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOworCisJaWYgKCFwb3dlcikKKwkJcG93ZXIgPSAxOworCisJc2RnLT5jcHVfcG93ZXIgPSBwb3dlcjsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2dyb3VwX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKmNoaWxkID0gc2QtPmNoaWxkOworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsICpzZGcgPSBzZC0+Z3JvdXBzOworCXVuc2lnbmVkIGxvbmcgcG93ZXI7CisKKwlpZiAoIWNoaWxkKSB7CisJCXVwZGF0ZV9jcHVfcG93ZXIoc2QsIGNwdSk7CisJCXJldHVybjsKKwl9CisKKwlwb3dlciA9IDA7CisKKwlncm91cCA9IGNoaWxkLT5ncm91cHM7CisJZG8geworCQlwb3dlciArPSBncm91cC0+Y3B1X3Bvd2VyOworCQlncm91cCA9IGdyb3VwLT5uZXh0OworCX0gd2hpbGUgKGdyb3VwICE9IGNoaWxkLT5ncm91cHMpOworCisJc2RnLT5jcHVfcG93ZXIgPSBwb3dlcjsKK30KKworLyoqCisgKiB1cGRhdGVfc2dfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgorICogQGdyb3VwOiBzY2hlZF9ncm91cCB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1CisgKiBAbG9hZF9pZHg6IExvYWQgaW5kZXggb2Ygc2NoZWRfZG9tYWluIG9mIHRoaXNfY3B1IGZvciBsb2FkIGNhbGMuCisgKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgorICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhpc19jcHUuCisgKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCisgKiBAc2dzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGdyb3VwLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCQkJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgaW50IHRoaXNfY3B1LAorCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCBsb2FkX2lkeCwgaW50ICpzZF9pZGxlLAorCQkJaW50IGxvY2FsX2dyb3VwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywKKwkJCWludCAqYmFsYW5jZSwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCit7CisJdW5zaWduZWQgbG9uZyBsb2FkLCBtYXhfY3B1X2xvYWQsIG1pbl9jcHVfbG9hZDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgYmFsYW5jZV9jcHUgPSAtMSwgZmlyc3RfaWRsZV9jcHUgPSAwOworCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWRfcGVyX3Rhc2sgPSAwOworCisJaWYgKGxvY2FsX2dyb3VwKQorCQliYWxhbmNlX2NwdSA9IGdyb3VwX2ZpcnN0X2NwdShncm91cCk7CisKKwkvKiBUYWxseSB1cCB0aGUgbG9hZCBvZiBhbGwgQ1BVcyBpbiB0aGUgZ3JvdXAgKi8KKwltYXhfY3B1X2xvYWQgPSAwOworCW1pbl9jcHVfbG9hZCA9IH4wVUw7CisKKwlmb3JfZWFjaF9jcHVfYW5kKGksIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApLCBjcHVzKSB7CisJCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoaSk7CisKKwkJaWYgKCpzZF9pZGxlICYmIHJxLT5ucl9ydW5uaW5nKQorCQkJKnNkX2lkbGUgPSAwOworCisJCS8qIEJpYXMgYmFsYW5jaW5nIHRvd2FyZCBjcHVzIG9mIG91ciBkb21haW4gKi8KKwkJaWYgKGxvY2FsX2dyb3VwKSB7CisJCQlpZiAoaWRsZV9jcHUoaSkgJiYgIWZpcnN0X2lkbGVfY3B1KSB7CisJCQkJZmlyc3RfaWRsZV9jcHUgPSAxOworCQkJCWJhbGFuY2VfY3B1ID0gaTsKKwkJCX0KKworCQkJbG9hZCA9IHRhcmdldF9sb2FkKGksIGxvYWRfaWR4KTsKKwkJfSBlbHNlIHsKKwkJCWxvYWQgPSBzb3VyY2VfbG9hZChpLCBsb2FkX2lkeCk7CisJCQlpZiAobG9hZCA+IG1heF9jcHVfbG9hZCkKKwkJCQltYXhfY3B1X2xvYWQgPSBsb2FkOworCQkJaWYgKG1pbl9jcHVfbG9hZCA+IGxvYWQpCisJCQkJbWluX2NwdV9sb2FkID0gbG9hZDsKKwkJfQorCisJCXNncy0+Z3JvdXBfbG9hZCArPSBsb2FkOworCQlzZ3MtPnN1bV9ucl9ydW5uaW5nICs9IHJxLT5ucl9ydW5uaW5nOworCQlzZ3MtPnN1bV93ZWlnaHRlZF9sb2FkICs9IHdlaWdodGVkX2NwdWxvYWQoaSk7CisKKwl9CisKKwkvKgorCSAqIEZpcnN0IGlkbGUgY3B1IG9yIHRoZSBmaXJzdCBjcHUoYnVzaWVzdCkgaW4gdGhpcyBzY2hlZCBncm91cAorCSAqIGlzIGVsaWdpYmxlIGZvciBkb2luZyBsb2FkIGJhbGFuY2luZyBhdCB0aGlzIGFuZCBhYm92ZQorCSAqIGRvbWFpbnMuIEluIHRoZSBuZXdseSBpZGxlIGNhc2UsIHdlIHdpbGwgYWxsb3cgYWxsIHRoZSBjcHUncworCSAqIHRvIGRvIHRoZSBuZXdseSBpZGxlIGxvYWQgYmFsYW5jZS4KKwkgKi8KKwlpZiAoaWRsZSAhPSBDUFVfTkVXTFlfSURMRSAmJiBsb2NhbF9ncm91cCAmJgorCSAgICBiYWxhbmNlX2NwdSAhPSB0aGlzX2NwdSkgeworCQkqYmFsYW5jZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwl1cGRhdGVfZ3JvdXBfcG93ZXIoc2QsIHRoaXNfY3B1KTsKKworCS8qIEFkanVzdCBieSByZWxhdGl2ZSBDUFUgcG93ZXIgb2YgdGhlIGdyb3VwICovCisJc2dzLT5hdmdfbG9hZCA9IChzZ3MtPmdyb3VwX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvIGdyb3VwLT5jcHVfcG93ZXI7CisKKwkvKgorCSAqIENvbnNpZGVyIHRoZSBncm91cCB1bmJhbGFuY2VkIHdoZW4gdGhlIGltYmFsYW5jZSBpcyBsYXJnZXIKKwkgKiB0aGFuIHRoZSBhdmVyYWdlIHdlaWdodCBvZiB0d28gdGFza3MuCisJICoKKwkgKiBBUFo6IHdpdGggY2dyb3VwIHRoZSBhdmcgdGFzayB3ZWlnaHQgY2FuIHZhcnkgd2lsZGx5IGFuZAorCSAqICAgICAgbWlnaHQgbm90IGJlIGEgc3VpdGFibGUgbnVtYmVyIC0gc2hvdWxkIHdlIGtlZXAgYQorCSAqICAgICAgbm9ybWFsaXplZCBucl9ydW5uaW5nIG51bWJlciBzb21ld2hlcmUgdGhhdCBuZWdhdGVzCisJICogICAgICB0aGUgaGllcmFyY2h5PworCSAqLworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nKQorCQlhdmdfbG9hZF9wZXJfdGFzayA9IHNncy0+c3VtX3dlaWdodGVkX2xvYWQgLyBzZ3MtPnN1bV9ucl9ydW5uaW5nOworCisJaWYgKChtYXhfY3B1X2xvYWQgLSBtaW5fY3B1X2xvYWQpID4gMiphdmdfbG9hZF9wZXJfdGFzaykKKwkJc2dzLT5ncm91cF9pbWIgPSAxOworCisJc2dzLT5ncm91cF9jYXBhY2l0eSA9CisJCURJVl9ST1VORF9DTE9TRVNUKGdyb3VwLT5jcHVfcG93ZXIsIFNDSEVEX0xPQURfU0NBTEUpOworfQorCisvKioKKyAqIHVwZGF0ZV9zZF9sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQHNkOiBzY2hlZF9kb21haW4gd2hvc2Ugc3RhdGlzdGljcyBhcmUgdG8gYmUgdXBkYXRlZC4KKyAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBsb2FkIGJhbGFuY2UgaXMgY3VycmVudGx5IHBlcmZvcm1lZC4KKyAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGlzX2NwdQorICogQHNkX2lkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBzY2hlZF9kb21haW4gY29udGFpbmluZyBncm91cC4KKyAqIEBjcHVzOiBTZXQgb2YgY3B1cyBjb25zaWRlcmVkIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBiYWxhbmNlOiBTaG91bGQgd2UgYmFsYW5jZS4KKyAqIEBzZHM6IHZhcmlhYmxlIHRvIGhvbGQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgc2NoZWRfZG9tYWluLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCisJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICpzZF9pZGxlLAorCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSwKKwkJCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzKQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKmNoaWxkID0gc2QtPmNoaWxkOworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAgPSBzZC0+Z3JvdXBzOworCXN0cnVjdCBzZ19sYl9zdGF0cyBzZ3M7CisJaW50IGxvYWRfaWR4LCBwcmVmZXJfc2libGluZyA9IDA7CisKKwlpZiAoY2hpbGQgJiYgY2hpbGQtPmZsYWdzICYgU0RfUFJFRkVSX1NJQkxJTkcpCisJCXByZWZlcl9zaWJsaW5nID0gMTsKKworCWluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzZCwgc2RzLCBpZGxlKTsKKwlsb2FkX2lkeCA9IGdldF9zZF9sb2FkX2lkeChzZCwgaWRsZSk7CisKKwlkbyB7CisJCWludCBsb2NhbF9ncm91cDsKKworCQlsb2NhbF9ncm91cCA9IGNwdW1hc2tfdGVzdF9jcHUodGhpc19jcHUsCisJCQkJCSAgICAgICBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSk7CisJCW1lbXNldCgmc2dzLCAwLCBzaXplb2Yoc2dzKSk7CisJCXVwZGF0ZV9zZ19sYl9zdGF0cyhzZCwgZ3JvdXAsIHRoaXNfY3B1LCBpZGxlLCBsb2FkX2lkeCwgc2RfaWRsZSwKKwkJCQlsb2NhbF9ncm91cCwgY3B1cywgYmFsYW5jZSwgJnNncyk7CisKKwkJaWYgKGxvY2FsX2dyb3VwICYmICEoKmJhbGFuY2UpKQorCQkJcmV0dXJuOworCisJCXNkcy0+dG90YWxfbG9hZCArPSBzZ3MuZ3JvdXBfbG9hZDsKKwkJc2RzLT50b3RhbF9wd3IgKz0gZ3JvdXAtPmNwdV9wb3dlcjsKKworCQkvKgorCQkgKiBJbiBjYXNlIHRoZSBjaGlsZCBkb21haW4gcHJlZmVycyB0YXNrcyBnbyB0byBzaWJsaW5ncworCQkgKiBmaXJzdCwgbG93ZXIgdGhlIGdyb3VwIGNhcGFjaXR5IHRvIG9uZSBzbyB0aGF0IHdlJ2xsIHRyeQorCQkgKiBhbmQgbW92ZSBhbGwgdGhlIGV4Y2VzcyB0YXNrcyBhd2F5LgorCQkgKi8KKwkJaWYgKHByZWZlcl9zaWJsaW5nKQorCQkJc2dzLmdyb3VwX2NhcGFjaXR5ID0gbWluKHNncy5ncm91cF9jYXBhY2l0eSwgMVVMKTsKKworCQlpZiAobG9jYWxfZ3JvdXApIHsKKwkJCXNkcy0+dGhpc19sb2FkID0gc2dzLmF2Z19sb2FkOworCQkJc2RzLT50aGlzID0gZ3JvdXA7CisJCQlzZHMtPnRoaXNfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKKwkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOworCQl9IGVsc2UgaWYgKHNncy5hdmdfbG9hZCA+IHNkcy0+bWF4X2xvYWQgJiYKKwkJCSAgIChzZ3Muc3VtX25yX3J1bm5pbmcgPiBzZ3MuZ3JvdXBfY2FwYWNpdHkgfHwKKwkJCQlzZ3MuZ3JvdXBfaW1iKSkgeworCQkJc2RzLT5tYXhfbG9hZCA9IHNncy5hdmdfbG9hZDsKKwkJCXNkcy0+YnVzaWVzdCA9IGdyb3VwOworCQkJc2RzLT5idXNpZXN0X25yX3J1bm5pbmcgPSBzZ3Muc3VtX25yX3J1bm5pbmc7CisJCQlzZHMtPmJ1c2llc3RfZ3JvdXBfY2FwYWNpdHkgPSBzZ3MuZ3JvdXBfY2FwYWNpdHk7CisJCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA9IHNncy5zdW1fd2VpZ2h0ZWRfbG9hZDsKKwkJCXNkcy0+Z3JvdXBfaW1iID0gc2dzLmdyb3VwX2ltYjsKKwkJfQorCisJCXVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKGdyb3VwLCBzZHMsIGxvY2FsX2dyb3VwLCAmc2dzKTsKKwkJZ3JvdXAgPSBncm91cC0+bmV4dDsKKwl9IHdoaWxlIChncm91cCAhPSBzZC0+Z3JvdXBzKTsKK30KKworLyoqCisgKiBmaXhfc21hbGxfaW1iYWxhbmNlIC0gQ2FsY3VsYXRlIHRoZSBtaW5vciBpbWJhbGFuY2UgdGhhdCBleGlzdHMKKyAqCQkJYW1vbmdzdCB0aGUgZ3JvdXBzIG9mIGEgc2NoZWRfZG9tYWluLCBkdXJpbmcKKyAqCQkJbG9hZCBiYWxhbmNpbmcuCisgKiBAc2RzOiBTdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4gd2hvc2UgaW1iYWxhbmNlIGlzIHRvIGJlIGNhbGN1bGF0ZWQuCisgKiBAdGhpc19jcHU6IFRoZSBjcHUgYXQgd2hvc2Ugc2NoZWRfZG9tYWluIHdlJ3JlIHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNlLgorICogQGltYmFsYW5jZTogVmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCisJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCit7CisJdW5zaWduZWQgbG9uZyB0bXAsIHB3cl9ub3cgPSAwLCBwd3JfbW92ZSA9IDA7CisJdW5zaWduZWQgaW50IGltYm4gPSAyOworCXVuc2lnbmVkIGxvbmcgc2NhbGVkX2J1c3lfbG9hZF9wZXJfdGFzazsKKworCWlmIChzZHMtPnRoaXNfbnJfcnVubmluZykgeworCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayAvPSBzZHMtPnRoaXNfbnJfcnVubmluZzsKKwkJaWYgKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID4KKwkJCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzaykKKwkJCWltYm4gPSAxOworCX0gZWxzZQorCQlzZHMtPnRoaXNfbG9hZF9wZXJfdGFzayA9CisJCQljcHVfYXZnX2xvYWRfcGVyX3Rhc2sodGhpc19jcHUpOworCisJc2NhbGVkX2J1c3lfbG9hZF9wZXJfdGFzayA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrCisJCQkJCQkgKiBTQ0hFRF9MT0FEX1NDQUxFOworCXNjYWxlZF9idXN5X2xvYWRfcGVyX3Rhc2sgLz0gc2RzLT5idXNpZXN0LT5jcHVfcG93ZXI7CisKKwlpZiAoc2RzLT5tYXhfbG9hZCAtIHNkcy0+dGhpc19sb2FkICsgc2NhbGVkX2J1c3lfbG9hZF9wZXJfdGFzayA+PQorCQkJKHNjYWxlZF9idXN5X2xvYWRfcGVyX3Rhc2sgKiBpbWJuKSkgeworCQkqaW1iYWxhbmNlID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2s7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE9LLCB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbWJhbGFuY2UgdG8ganVzdGlmeSBtb3ZpbmcgdGFza3MsCisJICogaG93ZXZlciB3ZSBtYXkgYmUgYWJsZSB0byBpbmNyZWFzZSB0b3RhbCBDUFUgcG93ZXIgdXNlZCBieQorCSAqIG1vdmluZyB0aGVtLgorCSAqLworCisJcHdyX25vdyArPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciAqCisJCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQpOworCXB3cl9ub3cgKz0gc2RzLT50aGlzLT5jcHVfcG93ZXIgKgorCQkJbWluKHNkcy0+dGhpc19sb2FkX3Blcl90YXNrLCBzZHMtPnRoaXNfbG9hZCk7CisJcHdyX25vdyAvPSBTQ0hFRF9MT0FEX1NDQUxFOworCisJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBzdWJ0cmFjdCAqLworCXRtcCA9IChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpIC8KKwkJc2RzLT5idXNpZXN0LT5jcHVfcG93ZXI7CisJaWYgKHNkcy0+bWF4X2xvYWQgPiB0bXApCisJCXB3cl9tb3ZlICs9IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCAtIHRtcCk7CisKKwkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIGFkZCAqLworCWlmIChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgPAorCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpCisJCXRtcCA9IChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIpIC8KKwkJCXNkcy0+dGhpcy0+Y3B1X3Bvd2VyOworCWVsc2UKKwkJdG1wID0gKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkgLworCQkJc2RzLT50aGlzLT5jcHVfcG93ZXI7CisJcHdyX21vdmUgKz0gc2RzLT50aGlzLT5jcHVfcG93ZXIgKgorCQkJbWluKHNkcy0+dGhpc19sb2FkX3Blcl90YXNrLCBzZHMtPnRoaXNfbG9hZCArIHRtcCk7CisJcHdyX21vdmUgLz0gU0NIRURfTE9BRF9TQ0FMRTsKKworCS8qIE1vdmUgaWYgd2UgZ2FpbiB0aHJvdWdocHV0ICovCisJaWYgKHB3cl9tb3ZlID4gcHdyX25vdykKKwkJKmltYmFsYW5jZSA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrOworfQorCisvKioKKyAqIGNhbGN1bGF0ZV9pbWJhbGFuY2UgLSBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBpbWJhbGFuY2UgcHJlc2VudCB3aXRoaW4gdGhlCisgKgkJCSBncm91cHMgb2YgYSBnaXZlbiBzY2hlZF9kb21haW4gZHVyaW5nIGxvYWQgYmFsYW5jZS4KKyAqIEBzZHM6IHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBpbWJhbGFuY2UgaXMgdG8gYmUgY2FsY3VsYXRlZC4KKyAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBjdXJyZW50bHkgbG9hZCBiYWxhbmNlIGlzIGJlaW5nIHBlcmZvcm1lZC4KKyAqIEBpbWJhbGFuY2U6IFRoZSB2YXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlX2ltYmFsYW5jZShzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IHRoaXNfY3B1LAorCQl1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCit7CisJdW5zaWduZWQgbG9uZyBtYXhfcHVsbCwgbG9hZF9hYm92ZV9jYXBhY2l0eSA9IH4wVUw7CisKKwlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAvPSBzZHMtPmJ1c2llc3RfbnJfcnVubmluZzsKKwlpZiAoc2RzLT5ncm91cF9pbWIpIHsKKwkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPQorCQkJbWluKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMtPmF2Z19sb2FkKTsKKwl9CisKKwkvKgorCSAqIEluIHRoZSBwcmVzZW5jZSBvZiBzbXAgbmljZSBiYWxhbmNpbmcsIGNlcnRhaW4gc2NlbmFyaW9zIGNhbiBoYXZlCisJICogbWF4IGxvYWQgbGVzcyB0aGFuIGF2ZyBsb2FkKGFzIHdlIHNraXAgdGhlIGdyb3VwcyBhdCBvciBiZWxvdworCSAqIGl0cyBjcHVfcG93ZXIsIHdoaWxlIGNhbGN1bGF0aW5nIG1heF9sb2FkLi4pCisJICovCisJaWYgKHNkcy0+bWF4X2xvYWQgPCBzZHMtPmF2Z19sb2FkKSB7CisJCSppbWJhbGFuY2UgPSAwOworCQlyZXR1cm4gZml4X3NtYWxsX2ltYmFsYW5jZShzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOworCX0KKworCWlmICghc2RzLT5ncm91cF9pbWIpIHsKKwkJLyoKKwkJICogRG9uJ3Qgd2FudCB0byBwdWxsIHNvIG1hbnkgdGFza3MgdGhhdCBhIGdyb3VwIHdvdWxkIGdvIGlkbGUuCisJCSAqLworCQlsb2FkX2Fib3ZlX2NhcGFjaXR5ID0gKHNkcy0+YnVzaWVzdF9ucl9ydW5uaW5nIC0KKwkJCQkJCXNkcy0+YnVzaWVzdF9ncm91cF9jYXBhY2l0eSk7CisKKwkJbG9hZF9hYm92ZV9jYXBhY2l0eSAqPSAoU0NIRURfTE9BRF9TQ0FMRSAqIFNDSEVEX0xPQURfU0NBTEUpOworCisJCWxvYWRfYWJvdmVfY2FwYWNpdHkgLz0gc2RzLT5idXNpZXN0LT5jcHVfcG93ZXI7CisJfQorCisJLyoKKwkgKiBXZSdyZSB0cnlpbmcgdG8gZ2V0IGFsbCB0aGUgY3B1cyB0byB0aGUgYXZlcmFnZV9sb2FkLCBzbyB3ZSBkb24ndAorCSAqIHdhbnQgdG8gcHVzaCBvdXJzZWx2ZXMgYWJvdmUgdGhlIGF2ZXJhZ2UgbG9hZCwgbm9yIGRvIHdlIHdpc2ggdG8KKwkgKiByZWR1Y2UgdGhlIG1heCBsb2FkZWQgY3B1IGJlbG93IHRoZSBhdmVyYWdlIGxvYWQuIEF0IHRoZSBzYW1lIHRpbWUsCisJICogd2UgYWxzbyBkb24ndCB3YW50IHRvIHJlZHVjZSB0aGUgZ3JvdXAgbG9hZCBiZWxvdyB0aGUgZ3JvdXAgY2FwYWNpdHkKKwkgKiAoc28gdGhhdCB3ZSBjYW4gaW1wbGVtZW50IHBvd2VyLXNhdmluZ3MgcG9saWNpZXMgZXRjKS4gVGh1cyB3ZSBsb29rCisJICogZm9yIHRoZSBtaW5pbXVtIHBvc3NpYmxlIGltYmFsYW5jZS4KKwkgKiBCZSBjYXJlZnVsIG9mIG5lZ2F0aXZlIG51bWJlcnMgYXMgdGhleSdsbCBhcHBlYXIgYXMgdmVyeSBsYXJnZSB2YWx1ZXMKKwkgKiB3aXRoIHVuc2lnbmVkIGxvbmdzLgorCSAqLworCW1heF9wdWxsID0gbWluKHNkcy0+bWF4X2xvYWQgLSBzZHMtPmF2Z19sb2FkLCBsb2FkX2Fib3ZlX2NhcGFjaXR5KTsKKworCS8qIEhvdyBtdWNoIGxvYWQgdG8gYWN0dWFsbHkgbW92ZSB0byBlcXVhbGlzZSB0aGUgaW1iYWxhbmNlICovCisJKmltYmFsYW5jZSA9IG1pbihtYXhfcHVsbCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyLAorCQkoc2RzLT5hdmdfbG9hZCAtIHNkcy0+dGhpc19sb2FkKSAqIHNkcy0+dGhpcy0+Y3B1X3Bvd2VyKQorCQkJLyBTQ0hFRF9MT0FEX1NDQUxFOworCisJLyoKKwkgKiBpZiAqaW1iYWxhbmNlIGlzIGxlc3MgdGhhbiB0aGUgYXZlcmFnZSBsb2FkIHBlciBydW5uYWJsZSB0YXNrCisJICogdGhlcmUgaXMgbm8gZ2F1cmFudGVlIHRoYXQgYW55IHRhc2tzIHdpbGwgYmUgbW92ZWQgc28gd2UnbGwgaGF2ZQorCSAqIGEgdGhpbmsgYWJvdXQgYnVtcGluZyBpdHMgdmFsdWUgdG8gZm9yY2UgYXQgbGVhc3Qgb25lIHRhc2sgdG8gYmUKKwkgKiBtb3ZlZAorCSAqLworCWlmICgqaW1iYWxhbmNlIDwgc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2spCisJCXJldHVybiBmaXhfc21hbGxfaW1iYWxhbmNlKHNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7CisKK30KKy8qKioqKioqIGZpbmRfYnVzaWVzdF9ncm91cCgpIGhlbHBlcnMgZW5kIGhlcmUgKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIGZpbmRfYnVzaWVzdF9ncm91cCAtIFJldHVybnMgdGhlIGJ1c2llc3QgZ3JvdXAgd2l0aGluIHRoZSBzY2hlZF9kb21haW4KKyAqIGlmIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4gSWYgdGhlcmUgaXNuJ3QgYW4gaW1iYWxhbmNlLCBhbmQKKyAqIHRoZSB1c2VyIGhhcyBvcHRlZCBmb3IgcG93ZXItc2F2aW5ncywgaXQgcmV0dXJucyBhIGdyb3VwIHdob3NlCisgKiBDUFVzIGNhbiBiZSBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyB0aG9zZSB0YXNrcyBlbHNld2hlcmUsIGlmCisgKiBzdWNoIGEgZ3JvdXAgZXhpc3RzLgorICoKKyAqIEFsc28gY2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQgd2hpY2ggc2hvdWxkIGJlIG1vdmVkCisgKiB0byByZXN0b3JlIGJhbGFuY2UuCisgKgorICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIGJ1c2llc3QgZ3JvdXAgaXMgdG8gYmUgcmV0dXJuZWQuCisgKiBAdGhpc19jcHU6IFRoZSBjcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jaW5nIGlzIGN1cnJlbnRseSBiZWluZyBwZXJmb3JtZWQuCisgKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB3aGljaCBzdG9yZXMgYW1vdW50IG9mIHdlaWdodGVkIGxvYWQgd2hpY2ggc2hvdWxkCisgKgkJYmUgbW92ZWQgdG8gcmVzdG9yZSBiYWxhbmNlL3B1dCBhIGdyb3VwIHRvIGlkbGUuCisgKiBAaWRsZTogVGhlIGlkbGUgc3RhdHVzIG9mIHRoaXNfY3B1LgorICogQHNkX2lkbGU6IFRoZSBpZGxlbmVzcyBvZiBzZAorICogQGNwdXM6IFRoZSBzZXQgb2YgQ1BVcyB1bmRlciBjb25zaWRlcmF0aW9uIGZvciBsb2FkLWJhbGFuY2luZy4KKyAqIEBiYWxhbmNlOiBQb2ludGVyIHRvIGEgdmFyaWFibGUgaW5kaWNhdGluZyBpZiB0aGlzX2NwdQorICoJaXMgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXNfbGV2ZWwuCisgKgorICogUmV0dXJuczoJLSB0aGUgYnVzaWVzdCBncm91cCBpZiBpbWJhbGFuY2UgZXhpc3RzLgorICoJCS0gSWYgbm8gaW1iYWxhbmNlIGFuZCB1c2VyIGhhcyBvcHRlZCBmb3IgcG93ZXItc2F2aW5ncyBiYWxhbmNlLAorICoJCSAgIHJldHVybiB0aGUgbGVhc3QgbG9hZGVkIGdyb3VwIHdob3NlIENQVXMgY2FuIGJlCisgKgkJICAgcHV0IHRvIGlkbGUgYnkgcmViYWxhbmNpbmcgaXRzIHRhc2tzIG9udG8gb3VyIGdyb3VwLgorICovCitzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICoKK2ZpbmRfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHRoaXNfY3B1LAorCQkgICB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAorCQkgICBpbnQgKnNkX2lkbGUsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmJhbGFuY2UpCit7CisJc3RydWN0IHNkX2xiX3N0YXRzIHNkczsKKworCW1lbXNldCgmc2RzLCAwLCBzaXplb2Yoc2RzKSk7CisKKwkvKgorCSAqIENvbXB1dGUgdGhlIHZhcmlvdXMgc3RhdGlzdGljcyByZWxhdmVudCBmb3IgbG9hZCBiYWxhbmNpbmcgYXQKKwkgKiB0aGlzIGxldmVsLgorCSAqLworCXVwZGF0ZV9zZF9sYl9zdGF0cyhzZCwgdGhpc19jcHUsIGlkbGUsIHNkX2lkbGUsIGNwdXMsCisJCQkJCWJhbGFuY2UsICZzZHMpOworCisJLyogQ2FzZXMgd2hlcmUgaW1iYWxhbmNlIGRvZXMgbm90IGV4aXN0IGZyb20gUE9WIG9mIHRoaXNfY3B1ICovCisJLyogMSkgdGhpc19jcHUgaXMgbm90IHRoZSBhcHByb3ByaWF0ZSBjcHUgdG8gcGVyZm9ybSBsb2FkIGJhbGFuY2luZworCSAqICAgIGF0IHRoaXMgbGV2ZWwuCisJICogMikgVGhlcmUgaXMgbm8gYnVzeSBzaWJsaW5nIGdyb3VwIHRvIHB1bGwgZnJvbS4KKwkgKiAzKSBUaGlzIGdyb3VwIGlzIHRoZSBidXNpZXN0IGdyb3VwLgorCSAqIDQpIFRoaXMgZ3JvdXAgaXMgbW9yZSBidXN5IHRoYW4gdGhlIGF2ZyBidXNpZW5lc3MgYXQgdGhpcworCSAqICAgIHNjaGVkX2RvbWFpbi4KKwkgKiA1KSBUaGUgaW1iYWxhbmNlIGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGxpbWl0LgorCSAqLworCWlmICghKCpiYWxhbmNlKSkKKwkJZ290byByZXQ7CisKKwlpZiAoIXNkcy5idXNpZXN0IHx8IHNkcy5idXNpZXN0X25yX3J1bm5pbmcgPT0gMCkKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisKKwlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMubWF4X2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJc2RzLmF2Z19sb2FkID0gKFNDSEVEX0xPQURfU0NBTEUgKiBzZHMudG90YWxfbG9hZCkgLyBzZHMudG90YWxfcHdyOworCisJaWYgKHNkcy50aGlzX2xvYWQgPj0gc2RzLmF2Z19sb2FkKQorCQlnb3RvIG91dF9iYWxhbmNlZDsKKworCWlmICgxMDAgKiBzZHMubWF4X2xvYWQgPD0gc2QtPmltYmFsYW5jZV9wY3QgKiBzZHMudGhpc19sb2FkKQorCQlnb3RvIG91dF9iYWxhbmNlZDsKKworCS8qIExvb2tzIGxpa2UgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBDb21wdXRlIGl0ICovCisJY2FsY3VsYXRlX2ltYmFsYW5jZSgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKwlyZXR1cm4gc2RzLmJ1c2llc3Q7CisKK291dF9iYWxhbmNlZDoKKwkvKgorCSAqIFRoZXJlIGlzIG5vIG9idmlvdXMgaW1iYWxhbmNlLiBCdXQgY2hlY2sgaWYgd2UgY2FuIGRvIHNvbWUgYmFsYW5jaW5nCisJICogdG8gc2F2ZSBwb3dlci4KKwkgKi8KKwlpZiAoY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpKQorCQlyZXR1cm4gc2RzLmJ1c2llc3Q7CityZXQ6CisJKmltYmFsYW5jZSA9IDA7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBmaW5kX2J1c2llc3RfcXVldWUgLSBmaW5kIHRoZSBidXNpZXN0IHJ1bnF1ZXVlIGFtb25nIHRoZSBjcHVzIGluIGdyb3VwLgorICovCitzdGF0aWMgc3RydWN0IHJxICoKK2ZpbmRfYnVzaWVzdF9xdWV1ZShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKKwkJICAgdW5zaWduZWQgbG9uZyBpbWJhbGFuY2UsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzKQoreworCXN0cnVjdCBycSAqYnVzaWVzdCA9IE5VTEwsICpycTsKKwl1bnNpZ25lZCBsb25nIG1heF9sb2FkID0gMDsKKwlpbnQgaTsKKworCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSkgeworCQl1bnNpZ25lZCBsb25nIHBvd2VyID0gcG93ZXJfb2YoaSk7CisJCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHkgPSBESVZfUk9VTkRfQ0xPU0VTVChwb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7CisJCXVuc2lnbmVkIGxvbmcgd2w7CisKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdXMpKQorCQkJY29udGludWU7CisKKwkJcnEgPSBjcHVfcnEoaSk7CisJCXdsID0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKKworCQkvKgorCQkgKiBXaGVuIGNvbXBhcmluZyB3aXRoIGltYmFsYW5jZSwgdXNlIHdlaWdodGVkX2NwdWxvYWQoKQorCQkgKiB3aGljaCBpcyBub3Qgc2NhbGVkIHdpdGggdGhlIGNwdSBwb3dlci4KKwkJICovCisJCWlmIChjYXBhY2l0eSAmJiBycS0+bnJfcnVubmluZyA9PSAxICYmIHdsID4gaW1iYWxhbmNlKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogRm9yIHRoZSBsb2FkIGNvbXBhcmlzb25zIHdpdGggdGhlIG90aGVyIGNwdSdzLCBjb25zaWRlcgorCQkgKiB0aGUgd2VpZ2h0ZWRfY3B1bG9hZCgpIHNjYWxlZCB3aXRoIHRoZSBjcHUgcG93ZXIsIHNvIHRoYXQKKwkJICogdGhlIGxvYWQgY2FuIGJlIG1vdmVkIGF3YXkgZnJvbSB0aGUgY3B1IHRoYXQgaXMgcG90ZW50aWFsbHkKKwkJICogcnVubmluZyBhdCBhIGxvd2VyIGNhcGFjaXR5LgorCQkgKi8KKwkJd2wgPSAod2wgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvIHBvd2VyOworCisJCWlmICh3bCA+IG1heF9sb2FkKSB7CisJCQltYXhfbG9hZCA9IHdsOworCQkJYnVzaWVzdCA9IHJxOworCQl9CisJfQorCisJcmV0dXJuIGJ1c2llc3Q7Cit9CisKKy8qCisgKiBNYXggYmFja29mZiBpZiB3ZSBlbmNvdW50ZXIgcGlubmVkIHRhc2tzLiBQcmV0dHkgYXJiaXRyYXJ5IHZhbHVlLCBidXQKKyAqIHNvIGxvbmcgYXMgaXQgaXMgbGFyZ2UgZW5vdWdoLgorICovCisjZGVmaW5lIE1BWF9QSU5ORURfSU5URVJWQUwJNTEyCisKKy8qIFdvcmtpbmcgY3B1bWFzayBmb3IgbG9hZF9iYWxhbmNlIGFuZCBsb2FkX2JhbGFuY2VfbmV3aWRsZS4gKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBsb2FkX2JhbGFuY2VfdG1wbWFzayk7CisKK3N0YXRpYyBpbnQgbmVlZF9hY3RpdmVfYmFsYW5jZShzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHNkX2lkbGUsIGludCBpZGxlKQoreworCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFKSB7CisJCS8qCisJCSAqIFRoZSBvbmx5IHRhc2sgcnVubmluZyBpbiBhIG5vbi1pZGxlIGNwdSBjYW4gYmUgbW92ZWQgdG8gdGhpcworCQkgKiBjcHUgaW4gYW4gYXR0ZW1wdCB0byBjb21wbGV0ZWx5IGZyZWV1cCB0aGUgb3RoZXIgQ1BVCisJCSAqIHBhY2thZ2UuCisJCSAqCisJCSAqIFRoZSBwYWNrYWdlIHBvd2VyIHNhdmluZyBsb2dpYyBjb21lcyBmcm9tCisJCSAqIGZpbmRfYnVzaWVzdF9ncm91cCgpLiBJZiB0aGVyZSBhcmUgbm8gaW1iYWxhbmNlLCB0aGVuCisJCSAqIGZfYl9nKCkgd2lsbCByZXR1cm4gTlVMTC4gSG93ZXZlciB3aGVuIHNjaGVkX21jPXsxLDJ9IHRoZW4KKwkJICogZl9iX2coKSB3aWxsIHNlbGVjdCBhIGdyb3VwIGZyb20gd2hpY2ggYSBydW5uaW5nIHRhc2sgbWF5IGJlCisJCSAqIHB1bGxlZCB0byB0aGlzIGNwdSBpbiBvcmRlciB0byBtYWtlIHRoZSBvdGhlciBwYWNrYWdlIGlkbGUuCisJCSAqIElmIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIG1ha2UgYSBwYWNrYWdlIGlkbGUgYW5kIGlmCisJCSAqIHRoZXJlIGFyZSBubyBpbWJhbGFuY2UsIHRoZW4gZl9iX2coKSB3aWxsIHJldHVybiBOVUxMIGFuZCBubworCQkgKiBhY3Rpb24gd2lsbCBiZSB0YWtlbiBpbiBsb2FkX2JhbGFuY2VfbmV3aWRsZSgpLgorCQkgKgorCQkgKiBVbmRlciBub3JtYWwgdGFzayBwdWxsIG9wZXJhdGlvbiBkdWUgdG8gaW1iYWxhbmNlLCB0aGVyZQorCQkgKiB3aWxsIGJlIG1vcmUgdGhhbiBvbmUgdGFzayBpbiB0aGUgc291cmNlIHJ1biBxdWV1ZSBhbmQKKwkJICogbW92ZV90YXNrcygpIHdpbGwgc3VjY2VlZC4gIGxkX21vdmVkIHdpbGwgYmUgdHJ1ZSBhbmQgdGhpcworCQkgKiBhY3RpdmUgYmFsYW5jZSBjb2RlIHdpbGwgbm90IGJlIHRyaWdnZXJlZC4KKwkJICovCisJCWlmICghc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgorCQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyA8IFBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiB1bmxpa2VseShzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPiBzZC0+Y2FjaGVfbmljZV90cmllcysyKTsKK30KKworLyoKKyAqIENoZWNrIHRoaXNfY3B1IHRvIGVuc3VyZSBpdCBpcyBiYWxhbmNlZCB3aXRoaW4gZG9tYWluLiBBdHRlbXB0IHRvIG1vdmUKKyAqIHRhc2tzIGlmIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4KKyAqLworc3RhdGljIGludCBsb2FkX2JhbGFuY2UoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsCisJCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCisJCQlpbnQgKmJhbGFuY2UpCit7CisJaW50IGxkX21vdmVkLCBhbGxfcGlubmVkID0gMCwgYWN0aXZlX2JhbGFuY2UgPSAwLCBzZF9pZGxlID0gMDsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOworCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOworCXN0cnVjdCBycSAqYnVzaWVzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjcHVtYXNrICpjcHVzID0gX19nZXRfY3B1X3Zhcihsb2FkX2JhbGFuY2VfdG1wbWFzayk7CisKKwljcHVtYXNrX2NvcHkoY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTsKKworCS8qCisJICogV2hlbiBwb3dlciBzYXZpbmdzIHBvbGljeSBpcyBlbmFibGVkIGZvciB0aGUgcGFyZW50IGRvbWFpbiwgaWRsZQorCSAqIHNpYmxpbmcgY2FuIHBpY2sgdXAgbG9hZCBpcnJlc3BlY3RpdmUgb2YgYnVzeSBzaWJsaW5ncy4gSW4gdGhpcyBjYXNlLAorCSAqIGxldCB0aGUgc3RhdGUgb2YgaWRsZSBzaWJsaW5nIHBlcmNvbGF0ZSB1cCBhcyBDUFVfSURMRSwgaW5zdGVhZCBvZgorCSAqIHBvcnRyYXlpbmcgaXQgYXMgQ1BVX05PVF9JRExFLgorCSAqLworCWlmIChpZGxlICE9IENQVV9OT1RfSURMRSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgorCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKKwkJc2RfaWRsZSA9IDE7CisKKwlzY2hlZHN0YXRfaW5jKHNkLCBsYl9jb3VudFtpZGxlXSk7CisKK3JlZG86CisJdXBkYXRlX3NoYXJlcyhzZCk7CisJZ3JvdXAgPSBmaW5kX2J1c2llc3RfZ3JvdXAoc2QsIHRoaXNfY3B1LCAmaW1iYWxhbmNlLCBpZGxlLCAmc2RfaWRsZSwKKwkJCQkgICBjcHVzLCBiYWxhbmNlKTsKKworCWlmICgqYmFsYW5jZSA9PSAwKQorCQlnb3RvIG91dF9iYWxhbmNlZDsKKworCWlmICghZ3JvdXApIHsKKwkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5Z1tpZGxlXSk7CisJCWdvdG8gb3V0X2JhbGFuY2VkOworCX0KKworCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoZ3JvdXAsIGlkbGUsIGltYmFsYW5jZSwgY3B1cyk7CisJaWYgKCFidXNpZXN0KSB7CisJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeXFbaWRsZV0pOworCQlnb3RvIG91dF9iYWxhbmNlZDsKKwl9CisKKwlCVUdfT04oYnVzaWVzdCA9PSB0aGlzX3JxKTsKKworCXNjaGVkc3RhdF9hZGQoc2QsIGxiX2ltYmFsYW5jZVtpZGxlXSwgaW1iYWxhbmNlKTsKKworCWxkX21vdmVkID0gMDsKKwlpZiAoYnVzaWVzdC0+bnJfcnVubmluZyA+IDEpIHsKKwkJLyoKKwkJICogQXR0ZW1wdCB0byBtb3ZlIHRhc2tzLiBJZiBmaW5kX2J1c2llc3RfZ3JvdXAgaGFzIGZvdW5kCisJCSAqIGFuIGltYmFsYW5jZSBidXQgYnVzaWVzdC0+bnJfcnVubmluZyA8PSAxLCB0aGUgZ3JvdXAgaXMKKwkJICogc3RpbGwgdW5iYWxhbmNlZC4gbGRfbW92ZWQgc2ltcGx5IHN0YXlzIHplcm8sIHNvIGl0IGlzCisJCSAqIGNvcnJlY3RseSB0cmVhdGVkIGFzIGFuIGltYmFsYW5jZS4KKwkJICovCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJZG91YmxlX3JxX2xvY2sodGhpc19ycSwgYnVzaWVzdCk7CisJCWxkX21vdmVkID0gbW92ZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKKwkJCQkgICAgICBpbWJhbGFuY2UsIHNkLCBpZGxlLCAmYWxsX3Bpbm5lZCk7CisJCWRvdWJsZV9ycV91bmxvY2sodGhpc19ycSwgYnVzaWVzdCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQkvKgorCQkgKiBzb21lIG90aGVyIGNwdSBkaWQgdGhlIGxvYWQgYmFsYW5jZSBmb3IgdXMuCisJCSAqLworCQlpZiAobGRfbW92ZWQgJiYgdGhpc19jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJcmVzY2hlZF9jcHUodGhpc19jcHUpOworCisJCS8qIEFsbCB0YXNrcyBvbiB0aGlzIHJ1bnF1ZXVlIHdlcmUgcGlubmVkIGJ5IENQVSBhZmZpbml0eSAqLworCQlpZiAodW5saWtlbHkoYWxsX3Bpbm5lZCkpIHsKKwkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdV9vZihidXNpZXN0KSwgY3B1cyk7CisJCQlpZiAoIWNwdW1hc2tfZW1wdHkoY3B1cykpCisJCQkJZ290byByZWRvOworCQkJZ290byBvdXRfYmFsYW5jZWQ7CisJCX0KKwl9CisKKwlpZiAoIWxkX21vdmVkKSB7CisJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2ZhaWxlZFtpZGxlXSk7CisJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCsrOworCisJCWlmIChuZWVkX2FjdGl2ZV9iYWxhbmNlKHNkLCBzZF9pZGxlLCBpZGxlKSkgeworCQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7CisKKwkJCS8qIGRvbid0IGtpY2sgdGhlIG1pZ3JhdGlvbl90aHJlYWQsIGlmIHRoZSBjdXJyCisJCQkgKiB0YXNrIG9uIGJ1c2llc3QgY3B1IGNhbid0IGJlIG1vdmVkIHRvIHRoaXNfY3B1CisJCQkgKi8KKwkJCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKKwkJCQkJICAgICAgJmJ1c2llc3QtPmN1cnItPmNwdXNfYWxsb3dlZCkpIHsKKwkJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzaWVzdC0+bG9jaywKKwkJCQkJCQkgICAgZmxhZ3MpOworCQkJCWFsbF9waW5uZWQgPSAxOworCQkJCWdvdG8gb3V0X29uZV9waW5uZWQ7CisJCQl9CisKKwkJCWlmICghYnVzaWVzdC0+YWN0aXZlX2JhbGFuY2UpIHsKKwkJCQlidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSA9IDE7CisJCQkJYnVzaWVzdC0+cHVzaF9jcHUgPSB0aGlzX2NwdTsKKwkJCQlhY3RpdmVfYmFsYW5jZSA9IDE7CisJCQl9CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzaWVzdC0+bG9jaywgZmxhZ3MpOworCQkJaWYgKGFjdGl2ZV9iYWxhbmNlKQorCQkJCXdha2VfdXBfcHJvY2VzcyhidXNpZXN0LT5taWdyYXRpb25fdGhyZWFkKTsKKworCQkJLyoKKwkJCSAqIFdlJ3ZlIGtpY2tlZCBhY3RpdmUgYmFsYW5jaW5nLCByZXNldCB0aGUgZmFpbHVyZQorCQkJICogY291bnRlci4KKwkJCSAqLworCQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gc2QtPmNhY2hlX25pY2VfdHJpZXMrMTsKKwkJfQorCX0gZWxzZQorCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSAwOworCisJaWYgKGxpa2VseSghYWN0aXZlX2JhbGFuY2UpKSB7CisJCS8qIFdlIHdlcmUgdW5iYWxhbmNlZCwgc28gcmVzZXQgdGhlIGJhbGFuY2luZyBpbnRlcnZhbCAqLworCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCA9IHNkLT5taW5faW50ZXJ2YWw7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogSWYgd2UndmUgYmVndW4gYWN0aXZlIGJhbGFuY2luZywgc3RhcnQgdG8gYmFjayBvZmYuIFRoaXMKKwkJICogY2FzZSBtYXkgbm90IGJlIGNvdmVyZWQgYnkgdGhlIGFsbF9waW5uZWQgbG9naWMgaWYgdGhlcmUKKwkJICogaXMgb25seSAxIHRhc2sgb24gdGhlIGJ1c3kgcnVucXVldWUgKGJlY2F1c2Ugd2UgZG9uJ3QgY2FsbAorCQkgKiBtb3ZlX3Rhc2tzKS4KKwkJICovCisJCWlmIChzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IHNkLT5tYXhfaW50ZXJ2YWwpCisJCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCAqPSAyOworCX0KKworCWlmICghbGRfbW92ZWQgJiYgIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKKwkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCisJCWxkX21vdmVkID0gLTE7CisKKwlnb3RvIG91dDsKKworb3V0X2JhbGFuY2VkOgorCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2JhbGFuY2VkW2lkbGVdKTsKKworCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7CisKK291dF9vbmVfcGlubmVkOgorCS8qIHR1bmUgdXAgdGhlIGJhbGFuY2luZyBpbnRlcnZhbCAqLworCWlmICgoYWxsX3Bpbm5lZCAmJiBzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IE1BWF9QSU5ORURfSU5URVJWQUwpIHx8CisJCQkoc2QtPmJhbGFuY2VfaW50ZXJ2YWwgPCBzZC0+bWF4X2ludGVydmFsKSkKKwkJc2QtPmJhbGFuY2VfaW50ZXJ2YWwgKj0gMjsKKworCWlmICghc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgorCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKKwkJbGRfbW92ZWQgPSAtMTsKKwllbHNlCisJCWxkX21vdmVkID0gMDsKK291dDoKKwlpZiAobGRfbW92ZWQpCisJCXVwZGF0ZV9zaGFyZXMoc2QpOworCXJldHVybiBsZF9tb3ZlZDsKK30KKworLyoKKyAqIGlkbGVfYmFsYW5jZSBpcyBjYWxsZWQgYnkgc2NoZWR1bGUoKSBpZiB0aGlzX2NwdSBpcyBhYm91dCB0byBiZWNvbWUKKyAqIGlkbGUuIEF0dGVtcHRzIHRvIHB1bGwgdGFza3MgZnJvbSBvdGhlciBDUFVzLgorICovCitzdGF0aWMgdm9pZCBpZGxlX2JhbGFuY2UoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisJaW50IHB1bGxlZF90YXNrID0gMDsKKwl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyBIWjsKKworCXRoaXNfcnEtPmlkbGVfc3RhbXAgPSB0aGlzX3JxLT5jbG9jazsKKworCWlmICh0aGlzX3JxLT5hdmdfaWRsZSA8IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBEcm9wIHRoZSBycS0+bG9jaywgYnV0IGtlZXAgSVJRL3ByZWVtcHQgZGlzYWJsZWQuCisJICovCisJcmF3X3NwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKKworCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKKwkJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKKwkJaW50IGJhbGFuY2UgPSAxOworCisJCWlmICghKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkpCisJCQljb250aW51ZTsKKworCQlpZiAoc2QtPmZsYWdzICYgU0RfQkFMQU5DRV9ORVdJRExFKSB7CisJCQkvKiBJZiB3ZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzdG9wIHNlYXJjaGluZzogKi8KKwkJCXB1bGxlZF90YXNrID0gbG9hZF9iYWxhbmNlKHRoaXNfY3B1LCB0aGlzX3JxLAorCQkJCQkJICAgc2QsIENQVV9ORVdMWV9JRExFLCAmYmFsYW5jZSk7CisJCX0KKworCQlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoc2QtPmJhbGFuY2VfaW50ZXJ2YWwpOworCQlpZiAodGltZV9hZnRlcihuZXh0X2JhbGFuY2UsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpCisJCQluZXh0X2JhbGFuY2UgPSBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWw7CisJCWlmIChwdWxsZWRfdGFzaykgeworCQkJdGhpc19ycS0+aWRsZV9zdGFtcCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJhd19zcGluX2xvY2soJnRoaXNfcnEtPmxvY2spOworCisJaWYgKHB1bGxlZF90YXNrIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgdGhpc19ycS0+bmV4dF9iYWxhbmNlKSkgeworCQkvKgorCQkgKiBXZSBhcmUgZ29pbmcgaWRsZS4gbmV4dF9iYWxhbmNlIG1heSBiZSBzZXQgYmFzZWQgb24KKwkJICogYSBidXN5IHByb2Nlc3Nvci4gU28gcmVzZXQgbmV4dF9iYWxhbmNlLgorCQkgKi8KKwkJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOworCX0KK30KKworLyoKKyAqIGFjdGl2ZV9sb2FkX2JhbGFuY2UgaXMgcnVuIGJ5IG1pZ3JhdGlvbiB0aHJlYWRzLiBJdCBwdXNoZXMgcnVubmluZyB0YXNrcworICogb2ZmIHRoZSBidXNpZXN0IENQVSBvbnRvIGlkbGUgQ1BVcy4gSXQgcmVxdWlyZXMgYXQgbGVhc3QgMSB0YXNrIHRvIGJlCisgKiBydW5uaW5nIG9uIGVhY2ggcGh5c2ljYWwgQ1BVIHdoZXJlIHBvc3NpYmxlLCBhbmQgYXZvaWRzIHBoeXNpY2FsIC8KKyAqIGxvZ2ljYWwgaW1iYWxhbmNlcy4KKyAqCisgKiBDYWxsZWQgd2l0aCBidXNpZXN0X3JxIGxvY2tlZC4KKyAqLworc3RhdGljIHZvaWQgYWN0aXZlX2xvYWRfYmFsYW5jZShzdHJ1Y3QgcnEgKmJ1c2llc3RfcnEsIGludCBidXNpZXN0X2NwdSkKK3sKKwlpbnQgdGFyZ2V0X2NwdSA9IGJ1c2llc3RfcnEtPnB1c2hfY3B1OworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCXN0cnVjdCBycSAqdGFyZ2V0X3JxOworCisJLyogSXMgdGhlcmUgYW55IHRhc2sgdG8gbW92ZT8gKi8KKwlpZiAoYnVzaWVzdF9ycS0+bnJfcnVubmluZyA8PSAxKQorCQlyZXR1cm47CisKKwl0YXJnZXRfcnEgPSBjcHVfcnEodGFyZ2V0X2NwdSk7CisKKwkvKgorCSAqIFRoaXMgY29uZGl0aW9uIGlzICJpbXBvc3NpYmxlIiwgaWYgaXQgb2NjdXJzCisJICogd2UgbmVlZCB0byBmaXggaXQuIE9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkKKwkgKiBCam9ybiBIZWxnYWFzIG9uIGEgMTI4LWNwdSBzZXR1cC4KKwkgKi8KKwlCVUdfT04oYnVzaWVzdF9ycSA9PSB0YXJnZXRfcnEpOworCisJLyogbW92ZSBhIHRhc2sgZnJvbSBidXNpZXN0X3JxIHRvIHRhcmdldF9ycSAqLworCWRvdWJsZV9sb2NrX2JhbGFuY2UoYnVzaWVzdF9ycSwgdGFyZ2V0X3JxKTsKKwl1cGRhdGVfcnFfY2xvY2soYnVzaWVzdF9ycSk7CisJdXBkYXRlX3JxX2Nsb2NrKHRhcmdldF9ycSk7CisKKwkvKiBTZWFyY2ggZm9yIGFuIHNkIHNwYW5uaW5nIHVzIGFuZCB0aGUgdGFyZ2V0IENQVS4gKi8KKwlmb3JfZWFjaF9kb21haW4odGFyZ2V0X2NwdSwgc2QpIHsKKwkJaWYgKChzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpICYmCisJCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGJ1c2llc3RfY3B1LCBzY2hlZF9kb21haW5fc3BhbihzZCkpKQorCQkJCWJyZWFrOworCX0KKworCWlmIChsaWtlbHkoc2QpKSB7CisJCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9jb3VudCk7CisKKwkJaWYgKG1vdmVfb25lX3Rhc2sodGFyZ2V0X3JxLCB0YXJnZXRfY3B1LCBidXNpZXN0X3JxLAorCQkJCSAgc2QsIENQVV9JRExFKSkKKwkJCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9wdXNoZWQpOworCQllbHNlCisJCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfZmFpbGVkKTsKKwl9CisJZG91YmxlX3VubG9ja19iYWxhbmNlKGJ1c2llc3RfcnEsIHRhcmdldF9ycSk7Cit9CisKKyNpZmRlZiBDT05GSUdfTk9fSFoKK3N0YXRpYyBzdHJ1Y3QgeworCWF0b21pY190IGxvYWRfYmFsYW5jZXI7CisJY3B1bWFza192YXJfdCBjcHVfbWFzazsKKwljcHVtYXNrX3Zhcl90IGlsYl9ncnBfbm9oel9tYXNrOworfSBub2h6IF9fX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKKwkubG9hZF9iYWxhbmNlciA9IEFUT01JQ19JTklUKC0xKSwKK307CisKK2ludCBnZXRfbm9oel9sb2FkX2JhbGFuY2VyKHZvaWQpCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKKy8qKgorICogbG93ZXN0X2ZsYWdfZG9tYWluIC0gUmV0dXJuIGxvd2VzdCBzY2hlZF9kb21haW4gY29udGFpbmluZyBmbGFnLgorICogQGNwdToJVGhlIGNwdSB3aG9zZSBsb3dlc3QgbGV2ZWwgb2Ygc2NoZWQgZG9tYWluIGlzIHRvCisgKgkJYmUgcmV0dXJuZWQuCisgKiBAZmxhZzoJVGhlIGZsYWcgdG8gY2hlY2sgZm9yIHRoZSBsb3dlc3Qgc2NoZWRfZG9tYWluCisgKgkJZm9yIHRoZSBnaXZlbiBjcHUuCisgKgorICogUmV0dXJucyB0aGUgbG93ZXN0IHNjaGVkX2RvbWFpbiBvZiBhIGNwdSB3aGljaCBjb250YWlucyB0aGUgZ2l2ZW4gZmxhZy4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpsb3dlc3RfZmxhZ19kb21haW4oaW50IGNwdSwgaW50IGZsYWcpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisKKwlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkKKwkJaWYgKHNkICYmIChzZC0+ZmxhZ3MgJiBmbGFnKSkKKwkJCWJyZWFrOworCisJcmV0dXJuIHNkOworfQorCisvKioKKyAqIGZvcl9lYWNoX2ZsYWdfZG9tYWluIC0gSXRlcmF0ZXMgb3ZlciBzY2hlZF9kb21haW5zIGNvbnRhaW5pbmcgdGhlIGZsYWcuCisgKiBAY3B1OglUaGUgY3B1IHdob3NlIGRvbWFpbnMgd2UncmUgaXRlcmF0aW5nIG92ZXIuCisgKiBAc2Q6CQl2YXJpYWJsZSBob2xkaW5nIHRoZSB2YWx1ZSBvZiB0aGUgcG93ZXJfc2F2aW5nc19zZAorICoJCWZvciBjcHUuCisgKiBAZmxhZzoJVGhlIGZsYWcgdG8gZmlsdGVyIHRoZSBzY2hlZF9kb21haW5zIHRvIGJlIGl0ZXJhdGVkLgorICoKKyAqIEl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBzY2hlZHVsZXIgZG9tYWlucyBmb3IgYSBnaXZlbiBjcHUgdGhhdCBoYXMgdGhlICdmbGFnJworICogc2V0LCBzdGFydGluZyBmcm9tIHRoZSBsb3dlc3Qgc2NoZWRfZG9tYWluIHRvIHRoZSBoaWdoZXN0LgorICovCisjZGVmaW5lIGZvcl9lYWNoX2ZsYWdfZG9tYWluKGNwdSwgc2QsIGZsYWcpIFwKKwlmb3IgKHNkID0gbG93ZXN0X2ZsYWdfZG9tYWluKGNwdSwgZmxhZyk7IFwKKwkJKHNkICYmIChzZC0+ZmxhZ3MgJiBmbGFnKSk7IHNkID0gc2QtPnBhcmVudCkKKworLyoqCisgKiBpc19zZW1pX2lkbGVfZ3JvdXAgLSBDaGVja3MgaWYgdGhlIGdpdmVuIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZS4KKyAqIEBpbGJfZ3JvdXA6CWdyb3VwIHRvIGJlIGNoZWNrZWQgZm9yIHNlbWktaWRsZW5lc3MKKyAqCisgKiBSZXR1cm5zOgkxIGlmIHRoZSBncm91cCBpcyBzZW1pLWlkbGUuIDAgb3RoZXJ3aXNlLgorICoKKyAqIFdlIGRlZmluZSBhIHNjaGVkX2dyb3VwIHRvIGJlIHNlbWkgaWRsZSBpZiBpdCBoYXMgYXRsZWFzdCBvbmUgaWRsZS1DUFUKKyAqIGFuZCBhdGxlYXN0IG9uZSBub24taWRsZSBDUFUuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZ2l2ZW4KKyAqIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZSBvciBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3NlbWlfaWRsZV9ncm91cChzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmlsYl9ncm91cCkKK3sKKwljcHVtYXNrX2FuZChub2h6LmlsYl9ncnBfbm9oel9tYXNrLCBub2h6LmNwdV9tYXNrLAorCQkJCQlzY2hlZF9ncm91cF9jcHVzKGlsYl9ncm91cCkpOworCisJLyoKKwkgKiBBIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZSB3aGVuIGl0IGhhcyBhdGxlYXN0IG9uZSBidXN5IGNwdQorCSAqIGFuZCBhdGxlYXN0IG9uZSBpZGxlIGNwdS4KKwkgKi8KKwlpZiAoY3B1bWFza19lbXB0eShub2h6LmlsYl9ncnBfbm9oel9tYXNrKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3B1bWFza19lcXVhbChub2h6LmlsYl9ncnBfbm9oel9tYXNrLCBzY2hlZF9ncm91cF9jcHVzKGlsYl9ncm91cCkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorLyoqCisgKiBmaW5kX25ld19pbGIgLSBGaW5kcyB0aGUgb3B0aW11bSBpZGxlIGxvYWQgYmFsYW5jZXIgZm9yIG5vbWluYXRpb24uCisgKiBAY3B1OglUaGUgY3B1IHdoaWNoIGlzIG5vbWluYXRpbmcgYSBuZXcgaWRsZV9sb2FkX2JhbGFuY2VyLgorICoKKyAqIFJldHVybnM6CVJldHVybnMgdGhlIGlkIG9mIHRoZSBpZGxlIGxvYWQgYmFsYW5jZXIgaWYgaXQgZXhpc3RzLAorICoJCUVsc2UsIHJldHVybnMgPj0gbnJfY3B1X2lkcy4KKyAqCisgKiBUaGlzIGFsZ29yaXRobSBwaWNrcyB0aGUgaWRsZSBsb2FkIGJhbGFuY2VyIHN1Y2ggdGhhdCBpdCBiZWxvbmdzIHRvIGEKKyAqIHNlbWktaWRsZSBwb3dlcnNhdmluZ3Mgc2NoZWRfZG9tYWluLiBUaGUgaWRlYSBpcyB0byB0cnkgYW5kIGF2b2lkCisgKiBjb21wbGV0ZWx5IGlkbGUgcGFja2FnZXMvY29yZXMganVzdCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWRsZSBsb2FkIGJhbGFuY2luZworICogd2hlbiB0aGVyZSBhcmUgb3RoZXIgaWRsZSBjcHUncyB3aGljaCBhcmUgYmV0dGVyIHN1aXRlZCBmb3IgdGhhdCBqb2IuCisgKi8KK3N0YXRpYyBpbnQgZmluZF9uZXdfaWxiKGludCBjcHUpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisJc3RydWN0IHNjaGVkX2dyb3VwICppbGJfZ3JvdXA7CisKKwkvKgorCSAqIEhhdmUgaWRsZSBsb2FkIGJhbGFuY2VyIHNlbGVjdGlvbiBmcm9tIHNlbWktaWRsZSBwYWNrYWdlcyBvbmx5CisJICogd2hlbiBwb3dlci1hd2FyZSBsb2FkIGJhbGFuY2luZyBpcyBlbmFibGVkCisJICovCisJaWYgKCEoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgfHwgc2NoZWRfbWNfcG93ZXJfc2F2aW5ncykpCisJCWdvdG8gb3V0X2RvbmU7CisKKwkvKgorCSAqIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgbm8gaWRsZSBDUFVzIG9yIG9ubHkgb25lCisJICogaWRsZSBDUFUuIERvbid0IHdhbGsgdGhlIHNjaGVkX2RvbWFpbiBoaWVyYXJjaHkgaW4gc3VjaCBjYXNlcworCSAqLworCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA8IDIpCisJCWdvdG8gb3V0X2RvbmU7CisKKwlmb3JfZWFjaF9mbGFnX2RvbWFpbihjcHUsIHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkgeworCQlpbGJfZ3JvdXAgPSBzZC0+Z3JvdXBzOworCisJCWRvIHsKKwkJCWlmIChpc19zZW1pX2lkbGVfZ3JvdXAoaWxiX2dyb3VwKSkKKwkJCQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmlsYl9ncnBfbm9oel9tYXNrKTsKKworCQkJaWxiX2dyb3VwID0gaWxiX2dyb3VwLT5uZXh0OworCisJCX0gd2hpbGUgKGlsYl9ncm91cCAhPSBzZC0+Z3JvdXBzKTsKKwl9CisKK291dF9kb25lOgorCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouY3B1X21hc2spOworfQorI2Vsc2UgLyogIChDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV3X2lsYihpbnQgY2FsbF9jcHUpCit7CisJcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5jcHVfbWFzayk7Cit9CisjZW5kaWYKKworLyoKKyAqIFRoaXMgcm91dGluZSB3aWxsIHRyeSB0byBub21pbmF0ZSB0aGUgaWxiIChpZGxlIGxvYWQgYmFsYW5jaW5nKQorICogb3duZXIgYW1vbmcgdGhlIGNwdXMgd2hvc2UgdGlja3MgYXJlIHN0b3BwZWQuIGlsYiBvd25lciB3aWxsIGRvIHRoZSBpZGxlCisgKiBsb2FkIGJhbGFuY2luZyBvbiBiZWhhbGYgb2YgYWxsIHRob3NlIGNwdXMuIElmIGFsbCB0aGUgY3B1cyBpbiB0aGUgc3lzdGVtCisgKiBnbyBpbnRvIHRoaXMgdGlja2xlc3MgbW9kZSwgdGhlbiB0aGVyZSB3aWxsIGJlIG5vIGlsYiBvd25lciAoYXMgdGhlcmUgaXMKKyAqIG5vIG5lZWQgZm9yIG9uZSkgYW5kIGFsbCB0aGUgY3B1cyB3aWxsIHNsZWVwIHRpbGwgdGhlIG5leHQgd2FrZXVwIGV2ZW50CisgKiBhcnJpdmVzLi4uCisgKgorICogRm9yIHRoZSBpbGIgb3duZXIsIHRpY2sgaXMgbm90IHN0b3BwZWQuIEFuZCB0aGlzIHRpY2sgd2lsbCBiZSB1c2VkCisgKiBmb3IgaWRsZSBsb2FkIGJhbGFuY2luZy4gaWxiIG93bmVyIHdpbGwgc3RpbGwgYmUgcGFydCBvZgorICogbm9oei5jcHVfbWFzay4uCisgKgorICogV2hpbGUgc3RvcHBpbmcgdGhlIHRpY2ssIHRoaXMgY3B1IHdpbGwgYmVjb21lIHRoZSBpbGIgb3duZXIgaWYgdGhlcmUKKyAqIGlzIG5vIG90aGVyIG93bmVyLiBBbmQgd2lsbCBiZSB0aGUgb3duZXIgdGlsbCB0aGF0IGNwdSBiZWNvbWVzIGJ1c3kKKyAqIG9yIGlmIGFsbCBjcHVzIGluIHRoZSBzeXN0ZW0gc3RvcCB0aGVpciB0aWNrcyBhdCB3aGljaCBwb2ludAorICogdGhlcmUgaXMgbm8gbmVlZCBmb3IgaWxiIG93bmVyLgorICoKKyAqIFdoZW4gdGhlIGlsYiBvd25lciBiZWNvbWVzIGJ1c3ksIGl0IG5vbWluYXRlcyBhbm90aGVyIG93bmVyLCBkdXJpbmcgdGhlCisgKiBuZXh0IGJ1c3kgc2NoZWR1bGVyX3RpY2soKQorICovCitpbnQgc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcihpbnQgc3RvcF90aWNrKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoc3RvcF90aWNrKSB7CisJCWNwdV9ycShjcHUpLT5pbl9ub2h6X3JlY2VudGx5ID0gMTsKKworCQlpZiAoIWNwdV9hY3RpdmUoY3B1KSkgeworCQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpICE9IGNwdSkKKwkJCQlyZXR1cm4gMDsKKworCQkJLyoKKwkJCSAqIElmIHdlIGFyZSBnb2luZyBvZmZsaW5lIGFuZCBzdGlsbCB0aGUgbGVhZGVyLAorCQkJICogZ2l2ZSB1cCEKKwkJCSAqLworCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIGNwdSwgLTEpICE9IGNwdSkKKwkJCQlCVUcoKTsKKworCQkJcmV0dXJuIDA7CisJCX0KKworCQljcHVtYXNrX3NldF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKKworCQkvKiB0aW1lIGZvciBpbGIgb3duZXIgYWxzbyB0byBzbGVlcCAqLworCQlpZiAoY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX2FjdGl2ZV9jcHVzKCkpIHsKKwkJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpCisJCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSAtMSkgeworCQkJLyogbWFrZSBtZSB0aGUgaWxiIG93bmVyICovCisJCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEsIGNwdSkgPT0gLTEpCisJCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KSB7CisJCQlpbnQgbmV3X2lsYjsKKworCQkJaWYgKCEoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgfHwKKwkJCQkJCXNjaGVkX21jX3Bvd2VyX3NhdmluZ3MpKQorCQkJCXJldHVybiAxOworCQkJLyoKKwkJCSAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1vcmUgcG93ZXItZWZmaWNpZW50CisJCQkgKiBpbGIuCisJCQkgKi8KKwkJCW5ld19pbGIgPSBmaW5kX25ld19pbGIoY3B1KTsKKwkJCWlmIChuZXdfaWxiIDwgbnJfY3B1X2lkcyAmJiBuZXdfaWxiICE9IGNwdSkgeworCQkJCWF0b21pY19zZXQoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEpOworCQkJCXJlc2NoZWRfY3B1KG5ld19pbGIpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKSkKKwkJCXJldHVybiAwOworCisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7CisKKwkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKKwkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCisJCQkJQlVHKCk7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmFsYW5jaW5nKTsKKworLyoKKyAqIEl0IGNoZWNrcyBlYWNoIHNjaGVkdWxpbmcgZG9tYWluIHRvIHNlZSBpZiBpdCBpcyBkdWUgdG8gYmUgYmFsYW5jZWQsCisgKiBhbmQgaW5pdGlhdGVzIGEgYmFsYW5jaW5nIG9wZXJhdGlvbiBpZiBzby4KKyAqCisgKiBCYWxhbmNpbmcgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGluIGFyY2hfaW5pdF9zY2hlZF9kb21haW5zLgorICovCitzdGF0aWMgdm9pZCByZWJhbGFuY2VfZG9tYWlucyhpbnQgY3B1LCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwlpbnQgYmFsYW5jZSA9IDE7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOworCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisJLyogRWFybGllc3QgdGltZSB3aGVuIHdlIGhhdmUgdG8gZG8gcmViYWxhbmNlIGFnYWluICovCisJdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgNjAqSFo7CisJaW50IHVwZGF0ZV9uZXh0X2JhbGFuY2UgPSAwOworCWludCBuZWVkX3NlcmlhbGl6ZTsKKworCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKSB7CisJCWlmICghKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkpCisJCQljb250aW51ZTsKKworCQlpbnRlcnZhbCA9IHNkLT5iYWxhbmNlX2ludGVydmFsOworCQlpZiAoaWRsZSAhPSBDUFVfSURMRSkKKwkJCWludGVydmFsICo9IHNkLT5idXN5X2ZhY3RvcjsKKworCQkvKiBzY2FsZSBtcyB0byBqaWZmaWVzICovCisJCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhpbnRlcnZhbCk7CisJCWlmICh1bmxpa2VseSghaW50ZXJ2YWwpKQorCQkJaW50ZXJ2YWwgPSAxOworCQlpZiAoaW50ZXJ2YWwgPiBIWipOUl9DUFVTLzEwKQorCQkJaW50ZXJ2YWwgPSBIWipOUl9DUFVTLzEwOworCisJCW5lZWRfc2VyaWFsaXplID0gc2QtPmZsYWdzICYgU0RfU0VSSUFMSVpFOworCisJCWlmIChuZWVkX3NlcmlhbGl6ZSkgeworCQkJaWYgKCFzcGluX3RyeWxvY2soJmJhbGFuY2luZykpCisJCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKSB7CisJCQlpZiAobG9hZF9iYWxhbmNlKGNwdSwgcnEsIHNkLCBpZGxlLCAmYmFsYW5jZSkpIHsKKwkJCQkvKgorCQkJCSAqIFdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHNvIGVpdGhlciB3ZSdyZSBubworCQkJCSAqIGxvbmdlciBpZGxlLCBvciBvbmUgb2Ygb3VyIFNNVCBzaWJsaW5ncyBpcworCQkJCSAqIG5vdCBpZGxlLgorCQkJCSAqLworCQkJCWlkbGUgPSBDUFVfTk9UX0lETEU7CisJCQl9CisJCQlzZC0+bGFzdF9iYWxhbmNlID0gamlmZmllczsKKwkJfQorCQlpZiAobmVlZF9zZXJpYWxpemUpCisJCQlzcGluX3VubG9jaygmYmFsYW5jaW5nKTsKK291dDoKKwkJaWYgKHRpbWVfYWZ0ZXIobmV4dF9iYWxhbmNlLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKSB7CisJCQluZXh0X2JhbGFuY2UgPSBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWw7CisJCQl1cGRhdGVfbmV4dF9iYWxhbmNlID0gMTsKKwkJfQorCisJCS8qCisJCSAqIFN0b3AgdGhlIGxvYWQgYmFsYW5jZSBhdCB0aGlzIGxldmVsLiBUaGVyZSBpcyBhbm90aGVyCisJCSAqIENQVSBpbiBvdXIgc2NoZWQgZ3JvdXAgd2hpY2ggaXMgZG9pbmcgbG9hZCBiYWxhbmNpbmcgbW9yZQorCQkgKiBhY3RpdmVseS4KKwkJICovCisJCWlmICghYmFsYW5jZSkKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogbmV4dF9iYWxhbmNlIHdpbGwgYmUgdXBkYXRlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBuZWVkLgorCSAqIFdoZW4gdGhlIGNwdSBpcyBhdHRhY2hlZCB0byBudWxsIGRvbWFpbiBmb3IgZXgsIGl0IHdpbGwgbm90IGJlCisJICogdXBkYXRlZC4KKwkgKi8KKwlpZiAobGlrZWx5KHVwZGF0ZV9uZXh0X2JhbGFuY2UpKQorCQlycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOworfQorCisvKgorICogcnVuX3JlYmFsYW5jZV9kb21haW5zIGlzIHRyaWdnZXJlZCB3aGVuIG5lZWRlZCBmcm9tIHRoZSBzY2hlZHVsZXIgdGljay4KKyAqIEluIENPTkZJR19OT19IWiBjYXNlLCB0aGUgaWRsZSBsb2FkIGJhbGFuY2Ugb3duZXIgd2lsbCBkbyB0aGUKKyAqIHJlYmFsYW5jaW5nIGZvciBhbGwgdGhlIGNwdXMgZm9yIHdob20gc2NoZWR1bGVyIHRpY2tzIGFyZSBzdG9wcGVkLgorICovCitzdGF0aWMgdm9pZCBydW5fcmViYWxhbmNlX2RvbWFpbnMoc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoKQoreworCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgcnEgKnRoaXNfcnEgPSBjcHVfcnEodGhpc19jcHUpOworCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlID0gdGhpc19ycS0+aWRsZV9hdF90aWNrID8KKwkJCQkJCUNQVV9JRExFIDogQ1BVX05PVF9JRExFOworCisJcmViYWxhbmNlX2RvbWFpbnModGhpc19jcHUsIGlkbGUpOworCisjaWZkZWYgQ09ORklHX05PX0haCisJLyoKKwkgKiBJZiB0aGlzIGNwdSBpcyB0aGUgb3duZXIgZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcsIHRoZW4gZG8gdGhlCisJICogYmFsYW5jaW5nIG9uIGJlaGFsZiBvZiB0aGUgb3RoZXIgaWRsZSBjcHVzIHdob3NlIHRpY2tzIGFyZQorCSAqIHN0b3BwZWQuCisJICovCisJaWYgKHRoaXNfcnEtPmlkbGVfYXRfdGljayAmJgorCSAgICBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSB0aGlzX2NwdSkgeworCQlzdHJ1Y3QgcnEgKnJxOworCQlpbnQgYmFsYW5jZV9jcHU7CisKKwkJZm9yX2VhY2hfY3B1KGJhbGFuY2VfY3B1LCBub2h6LmNwdV9tYXNrKSB7CisJCQlpZiAoYmFsYW5jZV9jcHUgPT0gdGhpc19jcHUpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBJZiB0aGlzIGNwdSBnZXRzIHdvcmsgdG8gZG8sIHN0b3AgdGhlIGxvYWQgYmFsYW5jaW5nCisJCQkgKiB3b3JrIGJlaW5nIGRvbmUgZm9yIG90aGVyIGNwdXMuIE5leHQgbG9hZAorCQkJICogYmFsYW5jaW5nIG93bmVyIHdpbGwgcGljayBpdCB1cC4KKwkJCSAqLworCQkJaWYgKG5lZWRfcmVzY2hlZCgpKQorCQkJCWJyZWFrOworCisJCQlyZWJhbGFuY2VfZG9tYWlucyhiYWxhbmNlX2NwdSwgQ1BVX0lETEUpOworCisJCQlycSA9IGNwdV9ycShiYWxhbmNlX2NwdSk7CisJCQlpZiAodGltZV9hZnRlcih0aGlzX3JxLT5uZXh0X2JhbGFuY2UsIHJxLT5uZXh0X2JhbGFuY2UpKQorCQkJCXRoaXNfcnEtPm5leHRfYmFsYW5jZSA9IHJxLT5uZXh0X2JhbGFuY2U7CisJCX0KKwl9CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgb25fbnVsbF9kb21haW4oaW50IGNwdSkKK3sKKwlyZXR1cm4gIXJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOworfQorCisvKgorICogVHJpZ2dlciB0aGUgU0NIRURfU09GVElSUSBpZiBpdCBpcyB0aW1lIHRvIGRvIHBlcmlvZGljIGxvYWQgYmFsYW5jaW5nLgorICoKKyAqIEluIGNhc2Ugb2YgQ09ORklHX05PX0haLCB0aGlzIGlzIHRoZSBwbGFjZSB3aGVyZSB3ZSBub21pbmF0ZSBhIG5ldworICogaWRsZSBsb2FkIGJhbGFuY2luZyBvd25lciBvciBkZWNpZGUgdG8gc3RvcCB0aGUgcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcsCisgKiBpZiB0aGUgd2hvbGUgc3lzdGVtIGlzIGlkbGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmlnZ2VyX2xvYWRfYmFsYW5jZShzdHJ1Y3QgcnEgKnJxLCBpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19OT19IWgorCS8qCisJICogSWYgd2Ugd2VyZSBpbiB0aGUgbm9oeiBtb2RlIHJlY2VudGx5IGFuZCBidXN5IGF0IHRoZSBjdXJyZW50CisJICogc2NoZWR1bGVyIHRpY2ssIHRoZW4gY2hlY2sgaWYgd2UgbmVlZCB0byBub21pbmF0ZSBuZXcgaWRsZQorCSAqIGxvYWQgYmFsYW5jZXIuCisJICovCisJaWYgKHJxLT5pbl9ub2h6X3JlY2VudGx5ICYmICFycS0+aWRsZV9hdF90aWNrKSB7CisJCXJxLT5pbl9ub2h6X3JlY2VudGx5ID0gMDsKKworCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KSB7CisJCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vaHouY3B1X21hc2spOworCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7CisJCX0KKworCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gLTEpIHsKKwkJCWludCBpbGIgPSBmaW5kX25ld19pbGIoY3B1KTsKKworCQkJaWYgKGlsYiA8IG5yX2NwdV9pZHMpCisJCQkJcmVzY2hlZF9jcHUoaWxiKTsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhpcyBjcHUgaXMgaWRsZSBhbmQgZG9pbmcgaWRsZSBsb2FkIGJhbGFuY2luZyBmb3IgYWxsIHRoZQorCSAqIGNwdXMgd2l0aCB0aWNrcyBzdG9wcGVkLCBpcyBpdCB0aW1lIGZvciB0aGF0IHRvIHN0b3A/CisJICovCisJaWYgKHJxLT5pZGxlX2F0X3RpY2sgJiYgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1ICYmCisJICAgIGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spID09IG51bV9vbmxpbmVfY3B1cygpKSB7CisJCXJlc2NoZWRfY3B1KGNwdSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgY3B1IGlzIGlkbGUgYW5kIHRoZSBpZGxlIGxvYWQgYmFsYW5jaW5nIGlzIGRvbmUgYnkKKwkgKiBzb21lb25lIGVsc2UsIHRoZW4gbm8gbmVlZCByYWlzZSB0aGUgU0NIRURfU09GVElSUQorCSAqLworCWlmIChycS0+aWRsZV9hdF90aWNrICYmIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpICE9IGNwdSAmJgorCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5jcHVfbWFzaykpCisJCXJldHVybjsKKyNlbmRpZgorCS8qIERvbid0IG5lZWQgdG8gcmViYWxhbmNlIHdoaWxlIGF0dGFjaGVkIHRvIE5VTEwgZG9tYWluICovCisJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcnEtPm5leHRfYmFsYW5jZSkgJiYKKwkgICAgbGlrZWx5KCFvbl9udWxsX2RvbWFpbihjcHUpKSkKKwkJcmFpc2Vfc29mdGlycShTQ0hFRF9TT0ZUSVJRKTsKK30KIAogc3RhdGljIHZvaWQgcnFfb25saW5lX2ZhaXIoc3RydWN0IHJxICpycSkKIHsKQEAgLTE5NjIsNiArMzU0NCwxNSBAQAogCXVwZGF0ZV9zeXNjdGwoKTsKIH0KIAorI2Vsc2UJLyogQ09ORklHX1NNUCAqLworCisvKgorICogb24gVVAgd2UgZG8gbm90IG5lZWQgdG8gYmFsYW5jZSBiZXR3ZWVuIENQVXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGxlX2JhbGFuY2UoaW50IGNwdSwgc3RydWN0IHJxICpycSkKK3sKK30KKwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogLyoKQEAgLTIwNzYsNyArMzY2Nyw3IEBACiB9CiAjZW5kaWYKIAotdW5zaWduZWQgaW50IGdldF9ycl9pbnRlcnZhbF9mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnRhc2stPnNlOwogCXVuc2lnbmVkIGludCBycl9pbnRlcnZhbCA9IDA7CkBAIC0yMTA4LDggKzM2OTksNiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2VsZWN0X3Rhc2tfcnEJCT0gc2VsZWN0X3Rhc2tfcnFfZmFpciwKIAotCS5sb2FkX2JhbGFuY2UJCT0gbG9hZF9iYWxhbmNlX2ZhaXIsCi0JLm1vdmVfb25lX3Rhc2sJCT0gbW92ZV9vbmVfdGFza19mYWlyLAogCS5ycV9vbmxpbmUJCT0gcnFfb25saW5lX2ZhaXIsCiAJLnJxX29mZmxpbmUJCT0gcnFfb2ZmbGluZV9mYWlyLAogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfaWRsZXRhc2suYyBiL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jCmluZGV4IDVmOTNiNTcuLmE4YTZkOGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jCisrKyBiL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jCkBAIC00NCwyNCArNDQsNiBAQAogewogfQogCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWxvYWRfYmFsYW5jZV9pZGxlKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAotCQkgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICBpbnQgKmFsbF9waW5uZWQsIGludCAqdGhpc19iZXN0X3ByaW8pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW1vdmVfb25lX3Rhc2tfaWRsZShzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQkgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgdGFza190aWNrX2lkbGUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBpbnQgcXVldWVkKQogewogfQpAQCAtOTcsNyArNzksNyBAQAogCQljaGVja19wcmVlbXB0X2N1cnIocnEsIHAsIDApOwogfQogCi11bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX2lkbGUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorc3RhdGljIHVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfaWRsZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTksOSArMTAxLDYgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2VsZWN0X3Rhc2tfcnEJCT0gc2VsZWN0X3Rhc2tfcnFfaWRsZSwKLQotCS5sb2FkX2JhbGFuY2UJCT0gbG9hZF9iYWxhbmNlX2lkbGUsCi0JLm1vdmVfb25lX3Rhc2sJCT0gbW92ZV9vbmVfdGFza19pZGxlLAogI2VuZGlmCiAKIAkuc2V0X2N1cnJfdGFzayAgICAgICAgICA9IHNldF9jdXJyX3Rhc2tfaWRsZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggZjQ4MzI4YS4uYmYzZTM4ZiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTE5NCwxNyArMTk0LDIwIEBACiAJcmV0dXJuIHJ0X3NlLT5teV9xOwogfQogCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSk7CitzdGF0aWMgdm9pZCBlbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgYm9vbCBoZWFkKTsKIHN0YXRpYyB2b2lkIGRlcXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKTsKIAogc3RhdGljIHZvaWQgc2NoZWRfcnRfcnFfZW5xdWV1ZShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogeworCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBycV9vZl9ydF9ycShydF9ycSktPmN1cnI7Ci0Jc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UgPSBydF9ycS0+cnRfc2U7CisJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2U7CisKKwlydF9zZSA9IHJ0X3JxLT50Zy0+cnRfc2VbdGhpc19jcHVdOwogCiAJaWYgKHJ0X3JxLT5ydF9ucl9ydW5uaW5nKSB7CiAJCWlmIChydF9zZSAmJiAhb25fcnRfcnEocnRfc2UpKQotCQkJZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UpOworCQkJZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UsIGZhbHNlKTsKIAkJaWYgKHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA8IGN1cnItPnByaW8pCiAJCQlyZXNjaGVkX3Rhc2soY3Vycik7CiAJfQpAQCAtMjEyLDcgKzIxNSwxMCBAQAogCiBzdGF0aWMgdm9pZCBzY2hlZF9ydF9ycV9kZXF1ZXVlKHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7Ci0Jc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UgPSBydF9ycS0+cnRfc2U7CisJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlOworCisJcnRfc2UgPSBydF9ycS0+dGctPnJ0X3NlW3RoaXNfY3B1XTsKIAogCWlmIChydF9zZSAmJiBvbl9ydF9ycShydF9zZSkpCiAJCWRlcXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKQEAgLTgwMyw3ICs4MDksNyBAQAogCWRlY19ydF9ncm91cChydF9zZSwgcnRfcnEpOwogfQogCi1zdGF0aWMgdm9pZCBfX2VucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQorc3RhdGljIHZvaWQgX19lbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgYm9vbCBoZWFkKQogewogCXN0cnVjdCBydF9ycSAqcnRfcnEgPSBydF9ycV9vZl9zZShydF9zZSk7CiAJc3RydWN0IHJ0X3ByaW9fYXJyYXkgKmFycmF5ID0gJnJ0X3JxLT5hY3RpdmU7CkBAIC04MTksNyArODI1LDEwIEBACiAJaWYgKGdyb3VwX3JxICYmIChydF9ycV90aHJvdHRsZWQoZ3JvdXBfcnEpIHx8ICFncm91cF9ycS0+cnRfbnJfcnVubmluZykpCiAJCXJldHVybjsKIAotCWxpc3RfYWRkX3RhaWwoJnJ0X3NlLT5ydW5fbGlzdCwgcXVldWUpOworCWlmIChoZWFkKQorCQlsaXN0X2FkZCgmcnRfc2UtPnJ1bl9saXN0LCBxdWV1ZSk7CisJZWxzZQorCQlsaXN0X2FkZF90YWlsKCZydF9zZS0+cnVuX2xpc3QsIHF1ZXVlKTsKIAlfX3NldF9iaXQocnRfc2VfcHJpbyhydF9zZSksIGFycmF5LT5iaXRtYXApOwogCiAJaW5jX3J0X3Rhc2tzKHJ0X3NlLCBydF9ycSk7CkBAIC04NTYsMTEgKzg2NSwxMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCitzdGF0aWMgdm9pZCBlbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgYm9vbCBoZWFkKQogewogCWRlcXVldWVfcnRfc3RhY2socnRfc2UpOwogCWZvcl9lYWNoX3NjaGVkX3J0X2VudGl0eShydF9zZSkKLQkJX19lbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7CisJCV9fZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UsIGhlYWQpOwogfQogCiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKQEAgLTg3MSwyMSArODgwLDIyIEBACiAJCXN0cnVjdCBydF9ycSAqcnRfcnEgPSBncm91cF9ydF9ycShydF9zZSk7CiAKIAkJaWYgKHJ0X3JxICYmIHJ0X3JxLT5ydF9ucl9ydW5uaW5nKQotCQkJX19lbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7CisJCQlfX2VucXVldWVfcnRfZW50aXR5KHJ0X3NlLCBmYWxzZSk7CiAJfQogfQogCiAvKgogICogQWRkaW5nL3JlbW92aW5nIGEgdGFzayB0by9mcm9tIGEgcHJpb3JpdHkgYXJyYXk6CiAgKi8KLXN0YXRpYyB2b2lkIGVucXVldWVfdGFza19ydChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApCitzdGF0aWMgdm9pZAorZW5xdWV1ZV90YXNrX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCwgYm9vbCBoZWFkKQogewogCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlID0gJnAtPnJ0OwogCiAJaWYgKHdha2V1cCkKIAkJcnRfc2UtPnRpbWVvdXQgPSAwOwogCi0JZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UpOworCWVucXVldWVfcnRfZW50aXR5KHJ0X3NlLCBoZWFkKTsKIAogCWlmICghdGFza19jdXJyZW50KHJxLCBwKSAmJiBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQogCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwpAQCAtMTQ4MSwyNCArMTQ5MSw2IEBACiAJCXB1c2hfcnRfdGFza3MocnEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotbG9hZF9iYWxhbmNlX3J0KHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwKLQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQlpbnQgKmFsbF9waW5uZWQsIGludCAqdGhpc19iZXN0X3ByaW8pCi17Ci0JLyogZG9uJ3QgdG91Y2ggUlQgdGFza3MgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbW92ZV9vbmVfdGFza19ydChzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQkgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCS8qIGRvbid0IHRvdWNoIFJUIHRhc2tzICovCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldF9jcHVzX2FsbG93ZWRfcnQoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpuZXdfbWFzaykKIHsKQEAgLTE3MjEsNyArMTcxMyw3IEBACiAJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKIH0KIAotdW5zaWduZWQgaW50IGdldF9ycl9pbnRlcnZhbF9ydChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9ycl9pbnRlcnZhbF9ydChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJLyoKIAkgKiBUaW1lIHNsaWNlIGlzIDAgZm9yIFNDSEVEX0ZJRk8gdGFza3MKQEAgLTE3NDYsOCArMTczOCw2IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZWxlY3RfdGFza19ycQkJPSBzZWxlY3RfdGFza19ycV9ydCwKIAotCS5sb2FkX2JhbGFuY2UJCT0gbG9hZF9iYWxhbmNlX3J0LAotCS5tb3ZlX29uZV90YXNrCQk9IG1vdmVfb25lX3Rhc2tfcnQsCiAJLnNldF9jcHVzX2FsbG93ZWQgICAgICAgPSBzZXRfY3B1c19hbGxvd2VkX3J0LAogCS5ycV9vbmxpbmUgICAgICAgICAgICAgID0gcnFfb25saW5lX3J0LAogCS5ycV9vZmZsaW5lICAgICAgICAgICAgID0gcnFfb2ZmbGluZV9ydCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbXAuYyBiL2tlcm5lbC9zbXAuYwppbmRleCBmMTA0MDg0Li45ODY3YjZiIDEwMDY0NAotLS0gYS9rZXJuZWwvc21wLmMKKysrIGIva2VybmVsL3NtcC5jCkBAIC0xMiw4ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9zaW5nbGVfcXVldWUsIGNhbGxfc2luZ2xlX3F1ZXVlKTsKLQogc3RhdGljIHN0cnVjdCB7CiAJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKIAlyYXdfc3BpbmxvY2tfdAkJbG9jazsKQEAgLTMzLDEyICszMSwxNCBAQAogCWNwdW1hc2tfdmFyX3QJCWNwdW1hc2s7CiB9OwogCitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNhbGxfZnVuY3Rpb25fZGF0YSwgY2ZkX2RhdGEpOworCiBzdHJ1Y3QgY2FsbF9zaW5nbGVfcXVldWUgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlyYXdfc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCBjZmRfZGF0YSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNhbGxfc2luZ2xlX3F1ZXVlLCBjYWxsX3NpbmdsZV9xdWV1ZSk7CiAKIHN0YXRpYyBpbnQKIGhvdHBsdWdfY2ZkKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKQEAgLTI1Niw3ICsyNTYsNyBAQAogCX0KIH0KIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhLCBjc2RfZGF0YSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEsIGNzZF9kYXRhKTsKIAogLyoKICAqIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSAtIFJ1biBhIGZ1bmN0aW9uIG9uIGEgc3BlY2lmaWMgQ1BVCmRpZmYgLS1naXQgYS9rZXJuZWwvc3JjdS5jIGIva2VybmVsL3NyY3UuYwppbmRleCA4MThkN2Q5Li5iZGU0Mjk1IDEwMDY0NAotLS0gYS9rZXJuZWwvc3JjdS5jCisrKyBiL2tlcm5lbC9zcmN1LmMKQEAgLTM0LDYgKzM0LDMwIEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc3JjdS5oPgogCitzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCit7CisJc3AtPmNvbXBsZXRlZCA9IDA7CisJbXV0ZXhfaW5pdCgmc3AtPm11dGV4KTsKKwlzcC0+cGVyX2NwdV9yZWYgPSBhbGxvY19wZXJjcHUoc3RydWN0IHNyY3Vfc3RydWN0X2FycmF5KTsKKwlyZXR1cm4gc3AtPnBlcl9jcHVfcmVmID8gMCA6IC1FTk9NRU07Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCitpbnQgX19pbml0X3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCS8qIERvbid0IHJlLWluaXRpYWxpemUgYSBsb2NrIHdoaWxlIGl0IGlzIGhlbGQuICovCisJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoKHZvaWQgKilzcCwgc2l6ZW9mKCpzcCkpOworCWxvY2tkZXBfaW5pdF9tYXAoJnNwLT5kZXBfbWFwLCBuYW1lLCBrZXksIDApOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCXJldHVybiBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzcCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2luaXRfc3JjdV9zdHJ1Y3QpOworCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKwogLyoqCiAgKiBpbml0X3NyY3Vfc3RydWN0IC0gaW5pdGlhbGl6ZSBhIHNsZWVwLVJDVSBzdHJ1Y3R1cmUKICAqIEBzcDogc3RydWN0dXJlIHRvIGluaXRpYWxpemUuCkBAIC00NCwxMyArNjgsMTIgQEAKICAqLwogaW50IGluaXRfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKIHsKLQlzcC0+Y29tcGxldGVkID0gMDsKLQltdXRleF9pbml0KCZzcC0+bXV0ZXgpOwotCXNwLT5wZXJfY3B1X3JlZiA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3RfYXJyYXkpOwotCXJldHVybiAoc3AtPnBlcl9jcHVfcmVmID8gMCA6IC1FTk9NRU0pOworCXJldHVybiBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzcCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbml0X3NyY3Vfc3RydWN0KTsKIAorI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCiAvKgogICogc3JjdV9yZWFkZXJzX2FjdGl2ZV9pZHggLS0gcmV0dXJucyBhcHByb3hpbWF0ZSBudW1iZXIgb2YgcmVhZGVycwogICoJYWN0aXZlIG9uIHRoZSBzcGVjaWZpZWQgcmFuayBvZiBwZXItQ1BVIGNvdW50ZXJzLgpAQCAtMTAwLDE1ICsxMjMsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNsZWFudXBfc3JjdV9zdHJ1Y3QpOwogCi0vKioKLSAqIHNyY3VfcmVhZF9sb2NrIC0gcmVnaXN0ZXIgYSBuZXcgcmVhZGVyIGZvciBhbiBTUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUuCi0gKiBAc3A6IHNyY3Vfc3RydWN0IGluIHdoaWNoIHRvIHJlZ2lzdGVyIHRoZSBuZXcgcmVhZGVyLgotICoKKy8qCiAgKiBDb3VudHMgdGhlIG5ldyByZWFkZXIgaW4gdGhlIGFwcHJvcHJpYXRlIHBlci1DUFUgZWxlbWVudCBvZiB0aGUKICAqIHNyY3Vfc3RydWN0LiAgTXVzdCBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuCiAgKiBSZXR1cm5zIGFuIGluZGV4IHRoYXQgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIG1hdGNoaW5nIHNyY3VfcmVhZF91bmxvY2soKS4KICAqLwotaW50IHNyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCitpbnQgX19zcmN1X3JlYWRfbG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQogewogCWludCBpZHg7CiAKQEAgLTEyMCwzMSArMTQwLDI3IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIAlyZXR1cm4gaWR4OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9yZWFkX2xvY2spOworRVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfbG9jayk7CiAKLS8qKgotICogc3JjdV9yZWFkX3VubG9jayAtIHVucmVnaXN0ZXIgYSBvbGQgcmVhZGVyIGZyb20gYW4gU1JDVS1wcm90ZWN0ZWQgc3RydWN0dXJlLgotICogQHNwOiBzcmN1X3N0cnVjdCBpbiB3aGljaCB0byB1bnJlZ2lzdGVyIHRoZSBvbGQgcmVhZGVyLgotICogQGlkeDogcmV0dXJuIHZhbHVlIGZyb20gY29ycmVzcG9uZGluZyBzcmN1X3JlYWRfbG9jaygpLgotICoKKy8qCiAgKiBSZW1vdmVzIHRoZSBjb3VudCBmb3IgdGhlIG9sZCByZWFkZXIgZnJvbSB0aGUgYXBwcm9wcmlhdGUgcGVyLUNQVQogICogZWxlbWVudCBvZiB0aGUgc3JjdV9zdHJ1Y3QuICBOb3RlIHRoYXQgdGhpcyBtYXkgd2VsbCBiZSBhIGRpZmZlcmVudAogICogQ1BVIHRoYW4gdGhhdCB3aGljaCB3YXMgaW5jcmVtZW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgc3JjdV9yZWFkX2xvY2soKS4KICAqIE11c3QgYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LgogICovCi12b2lkIHNyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkKK3ZvaWQgX19zcmN1X3JlYWRfdW5sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3AsIGludCBpZHgpCiB7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJc3JjdV9iYXJyaWVyKCk7ICAvKiBlbnN1cmUgY29tcGlsZXIgd29uJ3QgbWlzb3JkZXIgY3JpdGljYWwgc2VjdGlvbi4gKi8KIAlwZXJfY3B1X3B0cihzcC0+cGVyX2NwdV9yZWYsIHNtcF9wcm9jZXNzb3JfaWQoKSktPmNbaWR4XS0tOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzcmN1X3JlYWRfdW5sb2NrKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9fc3JjdV9yZWFkX3VubG9jayk7CiAKIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHN5bmNocm9uaXplX3NyY3UoKSBhbmQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKS4KICAqLwotdm9pZCBfX3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgdm9pZCAoKnN5bmNfZnVuYykodm9pZCkpCitzdGF0aWMgdm9pZCBfX3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgdm9pZCAoKnN5bmNfZnVuYykodm9pZCkpCiB7CiAJaW50IGlkeDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDE4YmRlOTcuLjg3N2ZlNGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTU3MSwxMSArNTcxLDYgQEAKIAlpZiAoIW5ld191c2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCWlmICghdGFza19jYW5fc3dpdGNoX3VzZXIobmV3X3VzZXIsIGN1cnJlbnQpKSB7Ci0JCWZyZWVfdWlkKG5ld191c2VyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKGF0b21pY19yZWFkKCZuZXdfdXNlci0+cHJvY2Vzc2VzKSA+PQogCQkJCWN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTlBST0NdLnJsaW1fY3VyICYmCiAJCQluZXdfdXNlciAhPSBJTklUX1VTRVIpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IDEzNzAwODMuLjFmNjYzZDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtNDUzLDYgKzQ1MywxOCBAQAogI2VuZGlmIC8qIENPTkZJR19DTE9DS1NPVVJDRV9XQVRDSERPRyAqLwogCiAvKioKKyAqIGNsb2Nrc291cmNlX3N1c3BlbmQgLSBzdXNwZW5kIHRoZSBjbG9ja3NvdXJjZShzKQorICovCit2b2lkIGNsb2Nrc291cmNlX3N1c3BlbmQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGNzLCAmY2xvY2tzb3VyY2VfbGlzdCwgbGlzdCkKKwkJaWYgKGNzLT5zdXNwZW5kKQorCQkJY3MtPnN1c3BlbmQoY3MpOworfQorCisvKioKICAqIGNsb2Nrc291cmNlX3Jlc3VtZSAtIHJlc3VtZSB0aGUgY2xvY2tzb3VyY2UocykKICAqLwogdm9pZCBjbG9ja3NvdXJjZV9yZXN1bWUodm9pZCkKQEAgLTQ2MSw3ICs0NzMsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcywgJmNsb2Nrc291cmNlX2xpc3QsIGxpc3QpCiAJCWlmIChjcy0+cmVzdW1lKQotCQkJY3MtPnJlc3VtZSgpOworCQkJY3MtPnJlc3VtZShjcyk7CiAKIAljbG9ja3NvdXJjZV9yZXN1bWVfd2F0Y2hkb2coKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL250cC5jIGIva2VybmVsL3RpbWUvbnRwLmMKaW5kZXggNDgwMGY5My4uN2MwZjE4MCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvbnRwLmMKKysrIGIva2VybmVsL3RpbWUvbnRwLmMKQEAgLTU4LDEwICs1OCwxMCBAQAogc3RhdGljIGxvbmcJCQl0aW1lX2NvbnN0YW50ID0gMjsKIAogLyogbWF4aW11bSBlcnJvciAodXNlY3MpOgkJCQkJCSovCi1sb25nCQkJCXRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CitzdGF0aWMgbG9uZwkJCXRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CiAKIC8qIGVzdGltYXRlZCBlcnJvciAodXNlY3MpOgkJCQkJCSovCi1sb25nCQkJCXRpbWVfZXN0ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CitzdGF0aWMgbG9uZwkJCXRpbWVfZXN0ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CiAKIC8qIGZyZXF1ZW5jeSBvZmZzZXQgKHNjYWxlZCBuc2Vjcy9zZWNzKToJCQkJKi8KIHN0YXRpYyBzNjQJCQl0aW1lX2ZyZXE7CkBAIC0xNDIsMTEgKzE0MiwxMSBAQAogCSAqIFNlbGVjdCBob3cgdGhlIGZyZXF1ZW5jeSBpcyB0byBiZSBjb250cm9sbGVkCiAJICogYW5kIGluIHdoaWNoIG1vZGUgKFBMTCBvciBGTEwpLgogCSAqLwotCXNlY3MgPSB4dGltZS50dl9zZWMgLSB0aW1lX3JlZnRpbWU7CisJc2VjcyA9IGdldF9zZWNvbmRzKCkgLSB0aW1lX3JlZnRpbWU7CiAJaWYgKHVubGlrZWx5KHRpbWVfc3RhdHVzICYgU1RBX0ZSRVFIT0xEKSkKIAkJc2VjcyA9IDA7CiAKLQl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7CisJdGltZV9yZWZ0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAogCW9mZnNldDY0ICAgID0gb2Zmc2V0OwogCWZyZXFfYWRqICAgID0gKG9mZnNldDY0ICogc2VjcykgPDwKQEAgLTM2OCw3ICszNjgsNyBAQAogCSAqIHJlZmVyZW5jZSB0aW1lIHRvIGN1cnJlbnQgdGltZS4KIAkgKi8KIAlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpICYmICh0eGMtPnN0YXR1cyAmIFNUQV9QTEwpKQotCQl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7CisJCXRpbWVfcmVmdGltZSA9IGdldF9zZWNvbmRzKCk7CiAKIAkvKiBvbmx5IHNldCBhbGxvd2VkIGJpdHMgKi8KIAl0aW1lX3N0YXR1cyAmPSBTVEFfUk9OTFk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwppbmRleCBlMmFiMDY0Li4xNjczNjM3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKQEAgLTYyMiw2ICs2MjIsNyBAQAogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKIAljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9TVVNQRU5ELCBOVUxMKTsKKwljbG9ja3NvdXJjZV9zdXNwZW5kKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggNjBlMmNlMC4uMTNlMTNkNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTMyOCwxNSArMzI4LDYgQEAKIAogCSAgU2F5IE4gaWYgdW5zdXJlLgogCi1jb25maWcgUE9XRVJfVFJBQ0VSCi0JYm9vbCAiVHJhY2UgcG93ZXIgY29uc3VtcHRpb24gYmVoYXZpb3IiCi0JZGVwZW5kcyBvbiBYODYKLQlzZWxlY3QgR0VORVJJQ19UUkFDRVIKLQloZWxwCi0JICBUaGlzIHRyYWNlciBoZWxwcyBkZXZlbG9wZXJzIHRvIGFuYWx5emUgYW5kIG9wdGltaXplIHRoZSBrZXJuZWwncwotCSAgcG93ZXIgbWFuYWdlbWVudCBkZWNpc2lvbnMsIHNwZWNpZmljYWxseSB0aGUgQy1zdGF0ZSBhbmQgUC1zdGF0ZQotCSAgYmVoYXZpb3IuCi0KIGNvbmZpZyBLU1lNX1RSQUNFUgogCWJvb2wgIlRyYWNlIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyBvbiBrZXJuZWwgbWVtb3J5IGxvY2F0aW9ucyIKIAlkZXBlbmRzIG9uIEhBVkVfSFdfQlJFQUtQT0lOVApAQCAtNDQ5LDcgKzQ0MCw3IEBACiAKIGNvbmZpZyBLUFJPQkVfRVZFTlQKIAlkZXBlbmRzIG9uIEtQUk9CRVMKLQlkZXBlbmRzIG9uIFg4NgorCWRlcGVuZHMgb24gSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJYm9vbCAiRW5hYmxlIGtwcm9iZXMtYmFzZWQgZHluYW1pYyBldmVudHMiCiAJc2VsZWN0IFRSQUNJTkcKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZSBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQppbmRleCBjZDllY2Q4Li5kMDBjNmZlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKKysrIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCkBAIC01MSw3ICs1MSw5IEBACiBvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gdHJhY2VfZXZlbnRzLm8KIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9leHBvcnQubwogb2JqLSQoQ09ORklHX0ZUUkFDRV9TWVNDQUxMUykgKz0gdHJhY2Vfc3lzY2FsbHMubwotb2JqLSQoQ09ORklHX0VWRU5UX1BST0ZJTEUpICs9IHRyYWNlX2V2ZW50X3Byb2ZpbGUubworaWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpCitvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gdHJhY2VfZXZlbnRfcHJvZmlsZS5vCitlbmRpZgogb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHRyYWNlX2V2ZW50c19maWx0ZXIubwogb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVCkgKz0gdHJhY2Vfa3Byb2JlLm8KIG9iai0kKENPTkZJR19LU1lNX1RSQUNFUikgKz0gdHJhY2Vfa3N5bS5vCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggMWU2NjQwZi4uODM3ODM1NyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgpAQCAtODk4LDM2ICs4OTcsNiBAQAogCQl9CQkJCVwKIAl9CiAKLSNpZmRlZiBDT05GSUdfS1BST0JFUwotCi1zdGF0aWMgaW50IGZyb3plbl9yZWNvcmRfY291bnQ7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlemVfcmVjb3JkKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCi17Ci0JaWYgKCEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUk9aRU4pKSB7Ci0JCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZST1pFTjsKLQkJZnJvemVuX3JlY29yZF9jb3VudCsrOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVuZnJlZXplX3JlY29yZChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQotewotCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZST1pFTikgewotCQlyZWMtPmZsYWdzICY9IH5GVFJBQ0VfRkxfRlJPWkVOOwotCQlmcm96ZW5fcmVjb3JkX2NvdW50LS07Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCByZWNvcmRfZnJvemVuKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCi17Ci0JcmV0dXJuIHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJPWkVOOwotfQotI2Vsc2UKLSMgZGVmaW5lIGZyZWV6ZV9yZWNvcmQocmVjKQkJCSh7IDA7IH0pCi0jIGRlZmluZSB1bmZyZWV6ZV9yZWNvcmQocmVjKQkJCSh7IDA7IH0pCi0jIGRlZmluZSByZWNvcmRfZnJvemVuKHJlYykJCQkoeyAwOyB9KQotI2VuZGlmIC8qIENPTkZJR19LUFJPQkVTICovCi0KIHN0YXRpYyB2b2lkIGZ0cmFjZV9mcmVlX3JlYyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQogewogCXJlYy0+ZnJlZWxpc3QgPSBmdHJhY2VfZnJlZV9yZWNvcmRzOwpAQCAtMTAyNSw2ICs5OTQsMjEgQEAKIH0KIAogCisvKiBSZXR1cm4gMSBpZiB0aGUgYWRkcmVzcyByYW5nZSBpcyByZXNlcnZlZCBmb3IgZnRyYWNlICovCitpbnQgZnRyYWNlX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOworCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CisKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKwkJaWYgKHJlYy0+aXAgPD0gKHVuc2lnbmVkIGxvbmcpZW5kICYmCisJCSAgICByZWMtPmlwICsgTUNPVU5UX0lOU05fU0laRSA+ICh1bnNpZ25lZCBsb25nKXN0YXJ0KQorCQkJcmV0dXJuIDE7CisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIGludAogX19mdHJhY2VfcmVwbGFjZV9jb2RlKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGludCBlbmFibGUpCiB7CkBAIC0xMDc2LDE0ICsxMDYwLDYgQEAKIAkJICAgICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9DT05WRVJURUQpKQogCQkJY29udGludWU7CiAKLQkJLyogaWdub3JlIHVwZGF0ZXMgdG8gdGhpcyByZWNvcmQncyBtY291bnQgc2l0ZSAqLwotCQlpZiAoZ2V0X2twcm9iZSgodm9pZCAqKXJlYy0+aXApKSB7Ci0JCQlmcmVlemVfcmVjb3JkKHJlYyk7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIHsKLQkJCXVuZnJlZXplX3JlY29yZChyZWMpOwotCQl9Ci0KIAkJZmFpbGVkID0gX19mdHJhY2VfcmVwbGFjZV9jb2RlKHJlYywgZW5hYmxlKTsKIAkJaWYgKGZhaWxlZCkgewogCQkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRkFJTEVEOwpAQCAtMjQyNiw2ICsyNDAyLDcgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoZ3JhcGhfbG9jayk7CiAKIGludCBmdHJhY2VfZ3JhcGhfY291bnQ7CitpbnQgZnRyYWNlX2dyYXBoX2ZpbHRlcl9lbmFibGVkOwogdW5zaWduZWQgbG9uZyBmdHJhY2VfZ3JhcGhfZnVuY3NbRlRSQUNFX0dSQVBIX01BWF9GVU5DU10gX19yZWFkX21vc3RseTsKIAogc3RhdGljIHZvaWQgKgpAQCAtMjQ0OCw3ICsyNDI1LDcgQEAKIAltdXRleF9sb2NrKCZncmFwaF9sb2NrKTsKIAogCS8qIE5vdGhpbmcsIHRlbGwgZ19zaG93IHRvIHByaW50IGFsbCBmdW5jdGlvbnMgYXJlIGVuYWJsZWQgKi8KLQlpZiAoIWZ0cmFjZV9ncmFwaF9jb3VudCAmJiAhKnBvcykKKwlpZiAoIWZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZCAmJiAhKnBvcykKIAkJcmV0dXJuICh2b2lkICopMTsKIAogCXJldHVybiBfX2dfbmV4dChtLCBwb3MpOwpAQCAtMjQ5NCw2ICsyNDcxLDcgQEAKIAltdXRleF9sb2NrKCZncmFwaF9sb2NrKTsKIAlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgogCSAgICAoZmlsZS0+Zl9mbGFncyAmIE9fVFJVTkMpKSB7CisJCWZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZCA9IDA7CiAJCWZ0cmFjZV9ncmFwaF9jb3VudCA9IDA7CiAJCW1lbXNldChmdHJhY2VfZ3JhcGhfZnVuY3MsIDAsIHNpemVvZihmdHJhY2VfZ3JhcGhfZnVuY3MpKTsKIAl9CkBAIC0yNTE5LDcgKzI0OTcsNyBAQAogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKIAlpbnQgc2VhcmNoX2xlbjsKLQlpbnQgZm91bmQgPSAwOworCWludCBmYWlsID0gMTsKIAlpbnQgdHlwZSwgbm90OwogCWNoYXIgKnNlYXJjaDsKIAlib29sIGV4aXN0czsKQEAgLTI1MzAsMzcgKzI1MDgsNTEgQEAKIAogCS8qIGRlY29kZSByZWdleCAqLwogCXR5cGUgPSBmaWx0ZXJfcGFyc2VfcmVnZXgoYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgJnNlYXJjaCwgJm5vdCk7Ci0JaWYgKG5vdCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFub3QgJiYgKmlkeCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJc2VhcmNoX2xlbiA9IHN0cmxlbihzZWFyY2gpOwogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewogCi0JCWlmICgqaWR4ID49IEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MpCi0JCQlicmVhazsKLQogCQlpZiAocmVjLT5mbGFncyAmIChGVFJBQ0VfRkxfRkFJTEVEIHwgRlRSQUNFX0ZMX0ZSRUUpKQogCQkJY29udGludWU7CiAKIAkJaWYgKGZ0cmFjZV9tYXRjaF9yZWNvcmQocmVjLCBzZWFyY2gsIHNlYXJjaF9sZW4sIHR5cGUpKSB7Ci0JCQkvKiBlbnN1cmUgaXQgaXMgbm90IGFscmVhZHkgaW4gdGhlIGFycmF5ICovCisJCQkvKiBpZiBpdCBpcyBpbiB0aGUgYXJyYXkgKi8KIAkJCWV4aXN0cyA9IGZhbHNlOwotCQkJZm9yIChpID0gMDsgaSA8ICppZHg7IGkrKykKKwkJCWZvciAoaSA9IDA7IGkgPCAqaWR4OyBpKyspIHsKIAkJCQlpZiAoYXJyYXlbaV0gPT0gcmVjLT5pcCkgewogCQkJCQlleGlzdHMgPSB0cnVlOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQlpZiAoIWV4aXN0cykKLQkJCQlhcnJheVsoKmlkeCkrK10gPSByZWMtPmlwOwotCQkJZm91bmQgPSAxOworCQkJfQorCisJCQlpZiAoIW5vdCkgeworCQkJCWZhaWwgPSAwOworCQkJCWlmICghZXhpc3RzKSB7CisJCQkJCWFycmF5WygqaWR4KSsrXSA9IHJlYy0+aXA7CisJCQkJCWlmICgqaWR4ID49IEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MpCisJCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChleGlzdHMpIHsKKwkJCQkJYXJyYXlbaV0gPSBhcnJheVstLSgqaWR4KV07CisJCQkJCWFycmF5WyppZHhdID0gMDsKKwkJCQkJZmFpbCA9IDA7CisJCQkJfQorCQkJfQogCQl9CiAJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7Ci0KK291dDoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAotCXJldHVybiBmb3VuZCA/IDAgOiAtRUlOVkFMOworCWlmIChmYWlsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZCA9IDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0yNTcwLDE2ICsyNTYyLDExIEBACiAJc3RydWN0IHRyYWNlX3BhcnNlciBwYXJzZXI7CiAJc3NpemVfdCByZWFkLCByZXQ7CiAKLQlpZiAoIWNudCB8fCBjbnQgPCAwKQorCWlmICghY250KQogCQlyZXR1cm4gMDsKIAogCW11dGV4X2xvY2soJmdyYXBoX2xvY2spOwogCi0JaWYgKGZ0cmFjZV9ncmFwaF9jb3VudCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQogCWlmICh0cmFjZV9wYXJzZXJfZ2V0X2luaXQoJnBhcnNlciwgRlRSQUNFX0JVRkZfTUFYKSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IGVhYzY4NzUuLjAzMmM1N2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BsaWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CkBAIC0xMDIsOSArMTAzLDYgQEAKIAogc3RhdGljIGNwdW1hc2tfdmFyX3QgX19yZWFkX21vc3RseQl0cmFjaW5nX2J1ZmZlcl9tYXNrOwogCi0vKiBEZWZpbmUgd2hpY2ggY3B1IGJ1ZmZlcnMgYXJlIGN1cnJlbnRseSByZWFkIGluIHRyYWNlX3BpcGUgKi8KLXN0YXRpYyBjcHVtYXNrX3Zhcl90CQkJdHJhY2luZ19yZWFkZXJfY3B1bWFzazsKLQogI2RlZmluZSBmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpCVwKIAlmb3JfZWFjaF9jcHUoY3B1LCB0cmFjaW5nX2J1ZmZlcl9tYXNrKQogCkBAIC0yNDMsMTIgKzI0MSw5MSBAQAogCiAvKgogICogdHJhY2VfdHlwZXNfbG9jayBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIHRyYWNlX3R5cGVzIGxpc3QuCi0gKiBUaGlzIGxvY2sgaXMgYWxzbyB1c2VkIHRvIGtlZXAgdXNlciBhY2Nlc3Mgc2VyaWFsaXplZC4KLSAqIEFjY2Vzc2VzIGZyb20gdXNlcnNwYWNlIHdpbGwgZ3JhYiB0aGlzIGxvY2sgd2hpbGUgdXNlcnNwYWNlCi0gKiBhY3Rpdml0aWVzIGhhcHBlbiBpbnNpZGUgdGhlIGtlcm5lbC4KICAqLwogc3RhdGljIERFRklORV9NVVRFWCh0cmFjZV90eXBlc19sb2NrKTsKIAorLyoKKyAqIHNlcmlhbGl6ZSB0aGUgYWNjZXNzIG9mIHRoZSByaW5nIGJ1ZmZlcgorICoKKyAqIHJpbmcgYnVmZmVyIHNlcmlhbGl6ZXMgcmVhZGVycywgYnV0IGl0IGlzIGxvdyBsZXZlbCBwcm90ZWN0aW9uLgorICogVGhlIHZhbGlkaXR5IG9mIHRoZSBldmVudHMgKHdoaWNoIHJldHVybnMgYnkgcmluZ19idWZmZXJfcGVlaygpIC4uZXRjKQorICogYXJlIG5vdCBwcm90ZWN0ZWQgYnkgcmluZyBidWZmZXIuCisgKgorICogVGhlIGNvbnRlbnQgb2YgZXZlbnRzIG1heSBiZWNvbWUgZ2FyYmFnZSBpZiB3ZSBhbGxvdyBvdGhlciBwcm9jZXNzIGNvbnN1bWVzCisgKiB0aGVzZSBldmVudHMgY29uY3VycmVudGx5OgorICogICBBKSB0aGUgcGFnZSBvZiB0aGUgY29uc3VtZWQgZXZlbnRzIG1heSBiZWNvbWUgYSBub3JtYWwgcGFnZQorICogICAgICAobm90IHJlYWRlciBwYWdlKSBpbiByaW5nIGJ1ZmZlciwgYW5kIHRoaXMgcGFnZSB3aWxsIGJlIHJld3JpdGVkCisgKiAgICAgIGJ5IGV2ZW50cyBwcm9kdWNlci4KKyAqICAgQikgVGhlIHBhZ2Ugb2YgdGhlIGNvbnN1bWVkIGV2ZW50cyBtYXkgYmVjb21lIGEgcGFnZSBmb3Igc3BsaWNlX3JlYWQsCisgKiAgICAgIGFuZCB0aGlzIHBhZ2Ugd2lsbCBiZSByZXR1cm5lZCB0byBzeXN0ZW0uCisgKgorICogVGhlc2UgcHJpbWl0aXZlcyBhbGxvdyBtdWx0aSBwcm9jZXNzIGFjY2VzcyB0byBkaWZmZXJlbnQgY3B1IHJpbmcgYnVmZmVyCisgKiBjb25jdXJyZW50bHkuCisgKgorICogVGhlc2UgcHJpbWl0aXZlcyBkb24ndCBkaXN0aW5ndWlzaCByZWFkLW9ubHkgYW5kIHJlYWQtY29uc3VtZSBhY2Nlc3MuCisgKiBNdWx0aSByZWFkLW9ubHkgYWNjZXNzIGFyZSBhbHNvIHNlcmlhbGl6ZWQuCisgKi8KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBERUNMQVJFX1JXU0VNKGFsbF9jcHVfYWNjZXNzX2xvY2spOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtdXRleCwgY3B1X2FjY2Vzc19sb2NrKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc19sb2NrKGludCBjcHUpCit7CisJaWYgKGNwdSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKKwkJLyogZ2FpbiBpdCBmb3IgYWNjZXNzaW5nIHRoZSB3aG9sZSByaW5nIGJ1ZmZlci4gKi8KKwkJZG93bl93cml0ZSgmYWxsX2NwdV9hY2Nlc3NfbG9jayk7CisJfSBlbHNlIHsKKwkJLyogZ2FpbiBpdCBmb3IgYWNjZXNzaW5nIGEgY3B1IHJpbmcgYnVmZmVyLiAqLworCisJCS8qIEZpcnN0bHkgYmxvY2sgb3RoZXIgdHJhY2VfYWNjZXNzX2xvY2soVFJBQ0VfUElQRV9BTExfQ1BVKS4gKi8KKwkJZG93bl9yZWFkKCZhbGxfY3B1X2FjY2Vzc19sb2NrKTsKKworCQkvKiBTZWNvbmRseSBibG9jayBvdGhlciBhY2Nlc3MgdG8gdGhpcyBAY3B1IHJpbmcgYnVmZmVyLiAqLworCQltdXRleF9sb2NrKCZwZXJfY3B1KGNwdV9hY2Nlc3NfbG9jaywgY3B1KSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX3VubG9jayhpbnQgY3B1KQoreworCWlmIChjcHUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCXVwX3dyaXRlKCZhbGxfY3B1X2FjY2Vzc19sb2NrKTsKKwl9IGVsc2UgeworCQltdXRleF91bmxvY2soJnBlcl9jcHUoY3B1X2FjY2Vzc19sb2NrLCBjcHUpKTsKKwkJdXBfcmVhZCgmYWxsX2NwdV9hY2Nlc3NfbG9jayk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX2xvY2tfaW5pdCh2b2lkKQoreworCWludCBjcHU7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQltdXRleF9pbml0KCZwZXJfY3B1KGNwdV9hY2Nlc3NfbG9jaywgY3B1KSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBERUZJTkVfTVVURVgoYWNjZXNzX2xvY2spOworCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX2xvY2soaW50IGNwdSkKK3sKKwkodm9pZCljcHU7CisJbXV0ZXhfbG9jaygmYWNjZXNzX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfYWNjZXNzX3VubG9jayhpbnQgY3B1KQoreworCSh2b2lkKWNwdTsKKwltdXRleF91bmxvY2soJmFjY2Vzc19sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc19sb2NrX2luaXQodm9pZCkKK3sKK30KKworI2VuZGlmCisKIC8qIHRyYWNlX3dhaXQgaXMgYSB3YWl0cXVldWUgZm9yIHRhc2tzIGJsb2NrZWQgb24gdHJhY2VfcG9sbCAqLwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHRyYWNlX3dhaXQpOwogCkBAIC0xMzIwLDggKzEzOTcsMTAgQEAKIAllbnRyeS0+Zm10CQkJPSBmbXQ7CiAKIAltZW1jcHkoZW50cnktPmJ1ZiwgdHJhY2VfYnVmLCBzaXplb2YodTMyKSAqIGxlbik7Ci0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpIHsKIAkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKKwkJZnRyYWNlX3RyYWNlX3N0YWNrKGJ1ZmZlciwgZmxhZ3MsIDYsIHBjKTsKKwl9CiAKIG91dF91bmxvY2s6CiAJYXJjaF9zcGluX3VubG9jaygmdHJhY2VfYnVmX2xvY2spOwpAQCAtMTM5NCw4ICsxNDczLDEwIEBACiAKIAltZW1jcHkoJmVudHJ5LT5idWYsIHRyYWNlX2J1ZiwgbGVuKTsKIAllbnRyeS0+YnVmW2xlbl0gPSAnXDAnOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQorCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKSB7CiAJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CisJCWZ0cmFjZV90cmFjZV9zdGFjayhidWZmZXIsIGlycV9mbGFncywgNiwgcGMpOworCX0KIAogIG91dF91bmxvY2s6CiAJYXJjaF9zcGluX3VubG9jaygmdHJhY2VfYnVmX2xvY2spOwpAQCAtMTU4NSwxMiArMTY2Niw2IEBACiB9CiAKIC8qCi0gKiBObyBuZWNlc3NhcnkgbG9ja2luZyBoZXJlLiBUaGUgd29yc3QgdGhpbmcgd2hpY2ggY2FuCi0gKiBoYXBwZW4gaXMgbG9vc2luZyBldmVudHMgY29uc3VtZWQgYXQgdGhlIHNhbWUgdGltZQotICogYnkgYSB0cmFjZV9waXBlIHJlYWRlci4KLSAqIE90aGVyIHRoYW4gdGhhdCwgd2UgZG9uJ3QgcmlzayB0byBjcmFzaCB0aGUgcmluZyBidWZmZXIKLSAqIGJlY2F1c2UgaXQgc2VyaWFsaXplcyB0aGUgcmVhZGVycy4KLSAqCiAgKiBUaGUgY3VycmVudCB0cmFjZXIgaXMgY29waWVkIHRvIGF2b2lkIGEgZ2xvYmFsIGxvY2tpbmcKICAqIGFsbCBhcm91bmQuCiAgKi8KQEAgLTE2NDUsMTIgKzE3MjAsMTYgQEAKIAl9CiAKIAl0cmFjZV9ldmVudF9yZWFkX2xvY2soKTsKKwl0cmFjZV9hY2Nlc3NfbG9jayhjcHVfZmlsZSk7CiAJcmV0dXJuIHA7CiB9CiAKIHN0YXRpYyB2b2lkIHNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiB7CisJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKKwogCWF0b21pY19kZWMoJnRyYWNlX3JlY29yZF9jbWRsaW5lX2Rpc2FibGVkKTsKKwl0cmFjZV9hY2Nlc3NfdW5sb2NrKGl0ZXItPmNwdV9maWxlKTsKIAl0cmFjZV9ldmVudF9yZWFkX3VubG9jaygpOwogfQogCkBAIC0yODQxLDIyICsyOTIwLDYgQEAKIAogCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JLyogV2Ugb25seSBhbGxvdyBvbmUgcmVhZGVyIHBlciBjcHUgKi8KLQlpZiAoY3B1X2ZpbGUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7Ci0JCWlmICghY3B1bWFza19lbXB0eSh0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKSkgewotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJY3B1bWFza19zZXRhbGwodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci0JfSBlbHNlIHsKLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdV9maWxlLCB0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKSkKLQkJCWNwdW1hc2tfc2V0X2NwdShjcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci0JCWVsc2UgewotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KIAkvKiBjcmVhdGUgYSBidWZmZXIgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIHRvIHBhc3MgdG8gdXNlcnNwYWNlICovCiAJaXRlciA9IGt6YWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpdGVyKSB7CkBAIC0yOTEyLDEyICsyOTc1LDYgQEAKIAogCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JaWYgKGl0ZXItPmNwdV9maWxlID09IFRSQUNFX1BJUEVfQUxMX0NQVSkKLQkJY3B1bWFza19jbGVhcih0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKLQllbHNlCi0JCWNwdW1hc2tfY2xlYXJfY3B1KGl0ZXItPmNwdV9maWxlLCB0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKLQotCiAJaWYgKGl0ZXItPnRyYWNlLT5waXBlX2Nsb3NlKQogCQlpdGVyLT50cmFjZS0+cGlwZV9jbG9zZShpdGVyKTsKIApAQCAtMzA3OSw2ICszMTM2LDcgQEAKIAlpdGVyLT5wb3MgPSAtMTsKIAogCXRyYWNlX2V2ZW50X3JlYWRfbG9jaygpOworCXRyYWNlX2FjY2Vzc19sb2NrKGl0ZXItPmNwdV9maWxlKTsKIAl3aGlsZSAoZmluZF9uZXh0X2VudHJ5X2luYyhpdGVyKSAhPSBOVUxMKSB7CiAJCWVudW0gcHJpbnRfbGluZV90IHJldDsKIAkJaW50IGxlbiA9IGl0ZXItPnNlcS5sZW47CkBAIC0zMDk1LDYgKzMxNTMsNyBAQAogCQlpZiAoaXRlci0+c2VxLmxlbiA+PSBjbnQpCiAJCQlicmVhazsKIAl9CisJdHJhY2VfYWNjZXNzX3VubG9jayhpdGVyLT5jcHVfZmlsZSk7CiAJdHJhY2VfZXZlbnRfcmVhZF91bmxvY2soKTsKIAogCS8qIE5vdyBjb3B5IHdoYXQgd2UgaGF2ZSB0byB0aGUgdXNlciAqLwpAQCAtMzIyMCw2ICszMjc5LDcgQEAKIAl9CiAKIAl0cmFjZV9ldmVudF9yZWFkX2xvY2soKTsKKwl0cmFjZV9hY2Nlc3NfbG9jayhpdGVyLT5jcHVfZmlsZSk7CiAKIAkvKiBGaWxsIGFzIG1hbnkgcGFnZXMgYXMgcG9zc2libGUuICovCiAJZm9yIChpID0gMCwgcmVtID0gbGVuOyBpIDwgUElQRV9CVUZGRVJTICYmIHJlbTsgaSsrKSB7CkBAIC0zMjQzLDYgKzMzMDMsNyBAQAogCQl0cmFjZV9zZXFfaW5pdCgmaXRlci0+c2VxKTsKIAl9CiAKKwl0cmFjZV9hY2Nlc3NfdW5sb2NrKGl0ZXItPmNwdV9maWxlKTsKIAl0cmFjZV9ldmVudF9yZWFkX3VubG9jaygpOwogCW11dGV4X3VubG9jaygmaXRlci0+bXV0ZXgpOwogCkBAIC0zNTQ0LDEwICszNjA1LDEyIEBACiAKIAlpbmZvLT5yZWFkID0gMDsKIAorCXRyYWNlX2FjY2Vzc19sb2NrKGluZm8tPmNwdSk7CiAJcmV0ID0gcmluZ19idWZmZXJfcmVhZF9wYWdlKGluZm8tPnRyLT5idWZmZXIsCiAJCQkJICAgICZpbmZvLT5zcGFyZSwKIAkJCQkgICAgY291bnQsCiAJCQkJICAgIGluZm8tPmNwdSwgMCk7CisJdHJhY2VfYWNjZXNzX3VubG9jayhpbmZvLT5jcHUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gMDsKIApAQCAtMzY3NSw2ICszNzM4LDcgQEAKIAkJbGVuICY9IFBBR0VfTUFTSzsKIAl9CiAKKwl0cmFjZV9hY2Nlc3NfbG9jayhpbmZvLT5jcHUpOwogCWVudHJpZXMgPSByaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdShpbmZvLT50ci0+YnVmZmVyLCBpbmZvLT5jcHUpOwogCiAJZm9yIChpID0gMDsgaSA8IFBJUEVfQlVGRkVSUyAmJiBsZW4gJiYgZW50cmllczsgaSsrLCBsZW4gLT0gUEFHRV9TSVpFKSB7CkBAIC0zNzIyLDYgKzM3ODYsNyBAQAogCQllbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllc19jcHUoaW5mby0+dHItPmJ1ZmZlciwgaW5mby0+Y3B1KTsKIAl9CiAKKwl0cmFjZV9hY2Nlc3NfdW5sb2NrKGluZm8tPmNwdSk7CiAJc3BkLm5yX3BhZ2VzID0gaTsKIAogCS8qIGRpZCB3ZSByZWFkIGFueXRoaW5nPyAqLwpAQCAtNDE1OCw2ICs0MjIzLDggQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKIAlpbnQgY3B1OwogCisJdHJhY2VfYWNjZXNzX2xvY2tfaW5pdCgpOworCiAJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CiAKIAl0cmFjZV9jcmVhdGVfZmlsZSgidHJhY2luZ19lbmFibGVkIiwgMDY0NCwgZF90cmFjZXIsCkBAIC00MzkyLDkgKzQ0NTksNiBAQAogCWlmICghYWxsb2NfY3B1bWFza192YXIoJnRyYWNpbmdfY3B1bWFzaywgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyX21hc2s7CiAKLQlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmdHJhY2luZ19yZWFkZXJfY3B1bWFzaywgR0ZQX0tFUk5FTCkpCi0JCWdvdG8gb3V0X2ZyZWVfdHJhY2luZ19jcHVtYXNrOwotCiAJLyogVG8gc2F2ZSBtZW1vcnksIGtlZXAgdGhlIHJpbmcgYnVmZmVyIHNpemUgdG8gaXRzIG1pbmltdW0gKi8KIAlpZiAocmluZ19idWZmZXJfZXhwYW5kZWQpCiAJCXJpbmdfYnVmX3NpemUgPSB0cmFjZV9idWZfc2l6ZTsKQEAgLTQ0NTIsOCArNDUxNiw2IEBACiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlX2NwdW1hc2s6Ci0JZnJlZV9jcHVtYXNrX3Zhcih0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKLW91dF9mcmVlX3RyYWNpbmdfY3B1bWFzazoKIAlmcmVlX2NwdW1hc2tfdmFyKHRyYWNpbmdfY3B1bWFzayk7CiBvdXRfZnJlZV9idWZmZXJfbWFzazoKIAlmcmVlX2NwdW1hc2tfdmFyKHRyYWNpbmdfYnVmZmVyX21hc2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmggYi9rZXJuZWwvdHJhY2UvdHJhY2UuaAppbmRleCA0ZGY2YTc3Li5mZDA1YmNhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuaApAQCAtNDk3LDYgKzQ5Nyw3IEBACiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAvKiBUT0RPOiBtYWtlIHRoaXMgdmFyaWFibGUgKi8KICNkZWZpbmUgRlRSQUNFX0dSQVBIX01BWF9GVU5DUwkJMzIKK2V4dGVybiBpbnQgZnRyYWNlX2dyYXBoX2ZpbHRlcl9lbmFibGVkOwogZXh0ZXJuIGludCBmdHJhY2VfZ3JhcGhfY291bnQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBmdHJhY2VfZ3JhcGhfZnVuY3NbRlRSQUNFX0dSQVBIX01BWF9GVU5DU107CiAKQEAgLTUwNCw3ICs1MDUsNyBAQAogewogCWludCBpOwogCi0JaWYgKCFmdHJhY2VfZ3JhcGhfY291bnQgfHwgdGVzdF90c2tfdHJhY2VfZ3JhcGgoY3VycmVudCkpCisJaWYgKCFmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQpCiAJCXJldHVybiAxOwogCiAJZm9yIChpID0gMDsgaSA8IGZ0cmFjZV9ncmFwaF9jb3VudDsgaSsrKSB7CkBAIC03OTEsNyArNzkyLDggQEAKIAogI3VuZGVmIEZUUkFDRV9FTlRSWQogI2RlZmluZSBGVFJBQ0VfRU5UUlkoY2FsbCwgc3RydWN0X25hbWUsIGlkLCB0c3RydWN0LCBwcmludCkJCVwKLQlleHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50XyMjY2FsbDsKKwlleHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBldmVudF8jI2NhbGw7CiAjdW5kZWYgRlRSQUNFX0VOVFJZX0RVUAogI2RlZmluZSBGVFJBQ0VfRU5UUllfRFVQKGNhbGwsIHN0cnVjdF9uYW1lLCBpZCwgdHN0cnVjdCwgcHJpbnQpCQlcCiAJRlRSQUNFX0VOVFJZKGNhbGwsIHN0cnVjdF9uYW1lLCBpZCwgUEFSQU1TKHRzdHJ1Y3QpLCBQQVJBTVMocHJpbnQpKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCmluZGV4IDRhMTk0ZjAuLmI5YmM0ZDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKQEAgLTMwNyw4ICszMDcsMjMgQEAKIAkJcmV0dXJuIC0xOwogCWlmIChwZXJjZW50X2EgPiBwZXJjZW50X2IpCiAJCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7CisKKwlpZiAoYS0+aW5jb3JyZWN0IDwgYi0+aW5jb3JyZWN0KQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPmluY29ycmVjdCA+IGItPmluY29ycmVjdCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBhYm92ZSBzaG93cyB3b3JzZSAoaW5jb3JyZWN0KSBjYXNlcworCSAqIGZpcnN0LCB3ZSBjb250aW51ZSB0aGF0IGJ5IHNob3dpbmcgYmVzdCAoY29ycmVjdCkKKwkgKiBjYXNlcyBsYXN0LgorCSAqLworCWlmIChhLT5jb3JyZWN0ID4gYi0+Y29ycmVjdCkKKwkJcmV0dXJuIC0xOworCWlmIChhLT5jb3JyZWN0IDwgYi0+Y29ycmVjdCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCB0cmFjZXJfc3RhdCBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKaW5kZXggOWUyNTU3My4uZjBkNjkzMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCkBAIC02LDE0ICs2LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlICJ0cmFjZS5oIgogCiAKLWNoYXIgKnBlcmZfdHJhY2VfYnVmOwotRVhQT1JUX1NZTUJPTF9HUEwocGVyZl90cmFjZV9idWYpOwotCi1jaGFyICpwZXJmX3RyYWNlX2J1Zl9ubWk7Ci1FWFBPUlRfU1lNQk9MX0dQTChwZXJmX3RyYWNlX2J1Zl9ubWkpOworc3RhdGljIGNoYXIgKnBlcmZfdHJhY2VfYnVmOworc3RhdGljIGNoYXIgKnBlcmZfdHJhY2VfYnVmX25taTsKIAogdHlwZWRlZiB0eXBlb2YoY2hhciBbRlRSQUNFX01BWF9QUk9GSUxFX1NJWkVdKSBwZXJmX3RyYWNlX3QgOwogCkBAIC0xMjAsMyArMTE4LDQ3IEBACiAJfQogCW11dGV4X3VubG9jaygmZXZlbnRfbXV0ZXgpOwogfQorCitfX2twcm9iZXMgdm9pZCAqZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHR5cGUsCisJCQkJCWludCAqcmN0eHAsIHVuc2lnbmVkIGxvbmcgKmlycV9mbGFncykKK3sKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OworCWNoYXIgKnRyYWNlX2J1ZiwgKnJhd19kYXRhOworCWludCBwYywgY3B1OworCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisKKwkvKiBQcm90ZWN0IHRoZSBwZXIgY3B1IGJ1ZmZlciwgYmVnaW4gdGhlIHJjdSByZWFkIHNpZGUgKi8KKwlsb2NhbF9pcnFfc2F2ZSgqaXJxX2ZsYWdzKTsKKworCSpyY3R4cCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsKKwlpZiAoKnJjdHhwIDwgMCkKKwkJZ290byBlcnJfcmVjdXJzaW9uOworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGluX25taSgpKQorCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsKKwllbHNlCisJCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7CisKKwlpZiAoIXRyYWNlX2J1ZikKKwkJZ290byBlcnI7CisKKwlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHRyYWNlX2J1ZiwgY3B1KTsKKworCS8qIHplcm8gdGhlIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbiB0byBub3QgbGVhayBzdGFjayB0byB1c2VyICovCisJKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKKworCWVudHJ5ID0gKHN0cnVjdCB0cmFjZV9lbnRyeSAqKXJhd19kYXRhOworCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50cnksICppcnFfZmxhZ3MsIHBjKTsKKwllbnRyeS0+dHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gcmF3X2RhdGE7CitlcnI6CisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dCgqcmN0eHApOworZXJyX3JlY3Vyc2lvbjoKKwlsb2NhbF9pcnFfcmVzdG9yZSgqaXJxX2ZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCAxODliMDliLi4zZjk3MmFkOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtNjAsMTAgKzYwLDggQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotCWlmIChmaWVsZCkgeworCWlmIChmaWVsZCkKIAkJa2ZyZWUoZmllbGQtPm5hbWUpOwotCQlrZnJlZShmaWVsZC0+dHlwZSk7Ci0JfQogCWtmcmVlKGZpZWxkKTsKIAogCXJldHVybiAtRU5PTUVNOwpAQCAtNTIwLDQxICs1MTgsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1leHRlcm4gY2hhciAqX19iYWRfdHlwZV9zaXplKHZvaWQpOwotCi0jdW5kZWYgRklFTEQKLSNkZWZpbmUgRklFTEQodHlwZSwgbmFtZSkJCQkJCQlcCi0Jc2l6ZW9mKHR5cGUpICE9IHNpemVvZihmaWVsZC5uYW1lKSA/IF9fYmFkX3R5cGVfc2l6ZSgpIDoJXAotCSN0eXBlLCAiY29tbW9uXyIgI25hbWUsIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIG5hbWUpLAkJXAotCQlzaXplb2YoZmllbGQubmFtZSksIGlzX3NpZ25lZF90eXBlKHR5cGUpCi0KLXN0YXRpYyBpbnQgdHJhY2Vfd3JpdGVfaGVhZGVyKHN0cnVjdCB0cmFjZV9zZXEgKnMpCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5IGZpZWxkOwotCi0JLyogc3RydWN0IHRyYWNlX2VudHJ5ICovCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywKLQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgotCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCi0JCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKLQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgotCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCi0JCQkiXG4iLAotCQkJRklFTEQodW5zaWduZWQgc2hvcnQsIHR5cGUpLAotCQkJRklFTEQodW5zaWduZWQgY2hhciwgZmxhZ3MpLAotCQkJRklFTEQodW5zaWduZWQgY2hhciwgcHJlZW1wdF9jb3VudCksCi0JCQlGSUVMRChpbnQsIHBpZCksCi0JCQlGSUVMRChpbnQsIGxvY2tfZGVwdGgpKTsKLX0KLQogc3RhdGljIHNzaXplX3QKIGV2ZW50X2Zvcm1hdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKIAkJICBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOwogCXN0cnVjdCB0cmFjZV9zZXEgKnM7CisJaW50IGNvbW1vbl9maWVsZF9jb3VudCA9IDU7CiAJY2hhciAqYnVmOwotCWludCByOworCWludCByID0gMDsKIAogCWlmICgqcHBvcykKIAkJcmV0dXJuIDA7CkBAIC01NjUsMTQgKzUzOCw0OCBAQAogCiAJdHJhY2Vfc2VxX2luaXQocyk7CiAKLQkvKiBJZiBhbnkgb2YgdGhlIGZpcnN0IHdyaXRlcyBmYWlsLCBzbyB3aWxsIHRoZSBzaG93X2Zvcm1hdC4gKi8KLQogCXRyYWNlX3NlcV9wcmludGYocywgIm5hbWU6ICVzXG4iLCBjYWxsLT5uYW1lKTsKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICJJRDogJWRcbiIsIGNhbGwtPmlkKTsKIAl0cmFjZV9zZXFfcHJpbnRmKHMsICJmb3JtYXQ6XG4iKTsKLQl0cmFjZV93cml0ZV9oZWFkZXIocyk7CiAKLQlyID0gY2FsbC0+c2hvd19mb3JtYXQoY2FsbCwgcyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGZpZWxkLCAmY2FsbC0+ZmllbGRzLCBsaW5rKSB7CisJCS8qCisJCSAqIFNtYXJ0bHkgc2hvd3MgdGhlIGFycmF5IHR5cGUoZXhjZXB0IGR5bmFtaWMgYXJyYXkpLgorCQkgKiBOb3JtYWw6CisJCSAqCWZpZWxkOlRZUEUgVkFSCisJCSAqIElmIFRZUEUgOj0gVFlQRVtMRU5dLCBpdCBpcyBzaG93bjoKKwkJICoJZmllbGQ6VFlQRSBWQVJbTEVOXQorCQkgKi8KKwkJY29uc3QgY2hhciAqYXJyYXlfZGVzY3JpcHRvciA9IHN0cmNocihmaWVsZC0+dHlwZSwgJ1snKTsKKworCQlpZiAoIXN0cm5jbXAoZmllbGQtPnR5cGUsICJfX2RhdGFfbG9jIiwgMTApKQorCQkJYXJyYXlfZGVzY3JpcHRvciA9IE5VTEw7CisKKwkJaWYgKCFhcnJheV9kZXNjcmlwdG9yKSB7CisJCQlyID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDolcyAlcztcdG9mZnNldDoldTsiCisJCQkJCSJcdHNpemU6JXU7XHRzaWduZWQ6JWQ7XG4iLAorCQkJCQlmaWVsZC0+dHlwZSwgZmllbGQtPm5hbWUsIGZpZWxkLT5vZmZzZXQsCisJCQkJCWZpZWxkLT5zaXplLCAhIWZpZWxkLT5pc19zaWduZWQpOworCQl9IGVsc2UgeworCQkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JS4qcyAlcyVzO1x0b2Zmc2V0OiV1OyIKKwkJCQkJIlx0c2l6ZToldTtcdHNpZ25lZDolZDtcbiIsCisJCQkJCShpbnQpKGFycmF5X2Rlc2NyaXB0b3IgLSBmaWVsZC0+dHlwZSksCisJCQkJCWZpZWxkLT50eXBlLCBmaWVsZC0+bmFtZSwKKwkJCQkJYXJyYXlfZGVzY3JpcHRvciwgZmllbGQtPm9mZnNldCwKKwkJCQkJZmllbGQtPnNpemUsICEhZmllbGQtPmlzX3NpZ25lZCk7CisJCX0KKworCQlpZiAoLS1jb21tb25fZmllbGRfY291bnQgPT0gMCkKKwkJCXIgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpOworCisJCWlmICghcikKKwkJCWJyZWFrOworCX0KKworCWlmIChyKQorCQlyID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6ICVzXG4iLAorCQkJCWNhbGwtPnByaW50X2ZtdCk7CisKIAlpZiAoIXIpIHsKIAkJLyoKIAkJICogdWchICBUaGUgZm9ybWF0IG91dHB1dCBpcyBiaWdnZXIgdGhhbiBhIFBBR0UhIQpAQCAtOTQ4LDEwICs5NTUsNiBAQAogCQkJCSAgZmlsdGVyKTsKIAl9CiAKLQkvKiBBIHRyYWNlIG1heSBub3Qgd2FudCB0byBleHBvcnQgaXRzIGZvcm1hdCAqLwotCWlmICghY2FsbC0+c2hvd19mb3JtYXQpCi0JCXJldHVybiAwOwotCiAJdHJhY2VfY3JlYXRlX2ZpbGUoImZvcm1hdCIsIDA0NDQsIGNhbGwtPmRpciwgY2FsbCwKIAkJCSAgZm9ybWF0KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKaW5kZXggZTQyYWY5YS4uNDYxNWY2MiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCkBAIC0xMzcxLDcgKzEzNzEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCiB2b2lkIGZ0cmFjZV9wcm9maWxlX2ZyZWVfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKQEAgLTE0MzksNSArMTQzOSw1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwppbmRleCBkNGZhNWRjLi5lMDkxZjY0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCkBAIC02Miw3OCArNjIsNiBAQAogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgogCi0KLSN1bmRlZiBfX2ZpZWxkCi0jZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIsCVwKLQkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKLQkJCSAgICAgICBzaXplb2YoZmllbGQuaXRlbSksIGlzX3NpZ25lZF90eXBlKHR5cGUpKTsgXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiAwOwotCi0jdW5kZWYgX19maWVsZF9kZXNjCi0jZGVmaW5lIF9fZmllbGRfZGVzYyh0eXBlLCBjb250YWluZXIsIGl0ZW0pCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICI7XHQiCVwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGNvbnRhaW5lci5pdGVtKSwJXAotCQkJICAgICAgIHNpemVvZihmaWVsZC5jb250YWluZXIuaXRlbSksCQlcCi0JCQkgICAgICAgaXNfc2lnbmVkX3R5cGUodHlwZSkpOwkJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fYXJyYXkKLSNkZWZpbmUgX19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiWyIgI2xlbiAiXTtcdCIgXAotCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCi0JCQkgICAgICAgc2l6ZW9mKGZpZWxkLml0ZW0pLCBpc19zaWduZWRfdHlwZSh0eXBlKSk7IFwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fYXJyYXlfZGVzYwotI2RlZmluZSBfX2FycmF5X2Rlc2ModHlwZSwgY29udGFpbmVyLCBpdGVtLCBsZW4pCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIlsiICNsZW4gIl07XHQiIFwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGNvbnRhaW5lci5pdGVtKSwJXAotCQkJICAgICAgIHNpemVvZihmaWVsZC5jb250YWluZXIuaXRlbSksCQlcCi0JCQkgICAgICAgaXNfc2lnbmVkX3R5cGUodHlwZSkpOwkJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZHluYW1pY19hcnJheQotI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSkJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICI7XHQiCVwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6MDtcdHNpZ25lZDoldTtcbiIsCVwKLQkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKLQkJCSAgICAgICBpc19zaWduZWRfdHlwZSh0eXBlKSk7CQkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiAwOwotCi0jdW5kZWYgRl9wcmludGsKLSNkZWZpbmUgRl9wcmludGsoZm10LCBhcmdzLi4uKSAiJXMsICVzXG4iLCAjZm10LCBfX3N0cmluZ2lmeShhcmdzKQotCi0jdW5kZWYgX19lbnRyeQotI2RlZmluZSBfX2VudHJ5IFJFQwotCi0jdW5kZWYgRlRSQUNFX0VOVFJZCi0jZGVmaW5lIEZUUkFDRV9FTlRSWShuYW1lLCBzdHJ1Y3RfbmFtZSwgaWQsIHRzdHJ1Y3QsIHByaW50KQkJXAotc3RhdGljIGludAkJCQkJCQkJXAotZnRyYWNlX2Zvcm1hdF8jI25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQsCQkJXAotCQkgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHN0cnVjdF9uYW1lIGZpZWxkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOwkJXAotCWludCByZXQgPSAwOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JdHN0cnVjdDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQotCi0jaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgotCiAjdW5kZWYgX19maWVsZAogI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQkJXAogCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSwgI2l0ZW0sCQlcCkBAIC0xNzUsNyArMTAzLDEyIEBACiAJCXJldHVybiByZXQ7CiAKICN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKLSNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0pCisjZGVmaW5lIF9fZHluYW1pY19hcnJheSh0eXBlLCBpdGVtKQkJCQkJXAorCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSwgI2l0ZW0sCQlcCisJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAorCQkJCSAwLCBpc19zaWduZWRfdHlwZSh0eXBlKSwgRklMVEVSX09USEVSKTtcCisJaWYgKHJldCkJCQkJCQkJXAorCQlyZXR1cm4gcmV0OwogCiAjdW5kZWYgRlRSQUNFX0VOVFJZCiAjZGVmaW5lIEZUUkFDRV9FTlRSWShuYW1lLCBzdHJ1Y3RfbmFtZSwgaWQsIHRzdHJ1Y3QsIHByaW50KQkJXApAQCAtMTk4LDYgKzEzMSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyN1bmRlZiBfX2VudHJ5CisjZGVmaW5lIF9fZW50cnkgUkVDCisKICN1bmRlZiBfX2ZpZWxkCiAjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkKIApAQCAtMjEzLDYgKzE0OSw5IEBACiAjdW5kZWYgX19keW5hbWljX2FycmF5CiAjZGVmaW5lIF9fZHluYW1pY19hcnJheSh0eXBlLCBpdGVtKQogCisjdW5kZWYgRl9wcmludGsKKyNkZWZpbmUgRl9wcmludGsoZm10LCBhcmdzLi4uKSAjZm10ICIsICIgIF9fc3RyaW5naWZ5KGFyZ3MpCisKICN1bmRlZiBGVFJBQ0VfRU5UUlkKICNkZWZpbmUgRlRSQUNFX0VOVFJZKGNhbGwsIHN0cnVjdF9uYW1lLCB0eXBlLCB0c3RydWN0LCBwcmludCkJCVwKIAkJCQkJCQkJCVwKQEAgLTIyMyw3ICsxNjIsNyBAQAogCS5pZAkJCT0gdHlwZSwJCQkJCVwKIAkuc3lzdGVtCQkJPSBfX3N0cmluZ2lmeShUUkFDRV9TWVNURU0pLAkJXAogCS5yYXdfaW5pdAkJPSBmdHJhY2VfcmF3X2luaXRfZXZlbnQsCQlcCi0JLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyNjYWxsLAkJCVwKKwkucHJpbnRfZm10CQk9IHByaW50LAkJCQlcCiAJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsLAkJXAogfTsJCQkJCQkJCQlcCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwppbmRleCBiMTM0MmM1Li5lOTk4YTgyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCkBAIC0xOCw2ICsxOCw3IEBACiAJcGlkX3QJCWxhc3RfcGlkOwogCWludAkJZGVwdGg7CiAJaW50CQlpZ25vcmU7CisJdW5zaWduZWQgbG9uZwllbnRlcl9mdW5jc1tGVFJBQ0VfUkVURlVOQ19ERVBUSF07CiB9OwogCiBzdHJ1Y3QgZmdyYXBoX2RhdGEgewpAQCAtMjEyLDEzICsyMTMsMTEgQEAKIAlpbnQgY3B1OwogCWludCBwYzsKIAotCWlmICh1bmxpa2VseSghdHIpKQotCQlyZXR1cm4gMDsKLQogCWlmICghZnRyYWNlX3RyYWNlX3Rhc2soY3VycmVudCkpCiAJCXJldHVybiAwOwogCi0JaWYgKCFmdHJhY2VfZ3JhcGhfYWRkcih0cmFjZS0+ZnVuYykpCisJLyogdHJhY2UgaXQgd2hlbiBpdCBpcy1uZXN0ZWQtaW4gb3IgaXMgYSBmdW5jdGlvbiBlbmFibGVkLiAqLworCWlmICghKHRyYWNlLT5kZXB0aCB8fCBmdHJhY2VfZ3JhcGhfYWRkcih0cmFjZS0+ZnVuYykpKQogCQlyZXR1cm4gMDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTIzMSw5ICsyMzAsNiBAQAogCX0gZWxzZSB7CiAJCXJldCA9IDA7CiAJfQotCS8qIE9ubHkgZG8gdGhlIGF0b21pYyBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQgKi8KLQlpZiAoIXRlc3RfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpKQotCQlzZXRfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTI4MSwxNyArMjc3LDI0IEBACiAJCXBjID0gcHJlZW1wdF9jb3VudCgpOwogCQlfX3RyYWNlX2dyYXBoX3JldHVybih0ciwgdHJhY2UsIGZsYWdzLCBwYyk7CiAJfQotCWlmICghdHJhY2UtPmRlcHRoKQotCQljbGVhcl90c2tfdHJhY2VfZ3JhcGgoY3VycmVudCk7CiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAordm9pZCBzZXRfZ3JhcGhfYXJyYXkoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlncmFwaF9hcnJheSA9IHRyOworCisJLyogTWFrZSBncmFwaF9hcnJheSB2aXNpYmxlIGJlZm9yZSB3ZSBzdGFydCB0cmFjaW5nICovCisKKwlzbXBfbWIoKTsKK30KKwogc3RhdGljIGludCBncmFwaF90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJaW50IHJldDsKIAotCWdyYXBoX2FycmF5ID0gdHI7CisJc2V0X2dyYXBoX2FycmF5KHRyKTsKIAlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoJnRyYWNlX2dyYXBoX3JldHVybiwKIAkJCQkgICAgJnRyYWNlX2dyYXBoX2VudHJ5KTsKIAlpZiAocmV0KQpAQCAtMzAxLDExICszMDQsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHNldF9ncmFwaF9hcnJheShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCWdyYXBoX2FycmF5ID0gdHI7Ci19Ci0KIHN0YXRpYyB2b2lkIGdyYXBoX3RyYWNlX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJdHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7CkBAIC02NzMsMTUgKzY3MSwyMSBAQAogCWR1cmF0aW9uID0gZ3JhcGhfcmV0LT5yZXR0aW1lIC0gZ3JhcGhfcmV0LT5jYWxsdGltZTsKIAogCWlmIChkYXRhKSB7CisJCXN0cnVjdCBmZ3JhcGhfY3B1X2RhdGEgKmNwdV9kYXRhOwogCQlpbnQgY3B1ID0gaXRlci0+Y3B1OwotCQlpbnQgKmRlcHRoID0gJihwZXJfY3B1X3B0cihkYXRhLT5jcHVfZGF0YSwgY3B1KS0+ZGVwdGgpOworCisJCWNwdV9kYXRhID0gcGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSk7CiAKIAkJLyoKIAkJICogQ29tbWVudHMgZGlzcGxheSBhdCArIDEgdG8gZGVwdGguIFNpbmNlCiAJCSAqIHRoaXMgaXMgYSBsZWFmIGZ1bmN0aW9uLCBrZWVwIHRoZSBjb21tZW50cwogCQkgKiBlcXVhbCB0byB0aGlzIGRlcHRoLgogCQkgKi8KLQkJKmRlcHRoID0gY2FsbC0+ZGVwdGggLSAxOworCQljcHVfZGF0YS0+ZGVwdGggPSBjYWxsLT5kZXB0aCAtIDE7CisKKwkJLyogTm8gbmVlZCB0byBrZWVwIHRoaXMgZnVuY3Rpb24gYXJvdW5kIGZvciB0aGlzIGRlcHRoICovCisJCWlmIChjYWxsLT5kZXB0aCA8IEZUUkFDRV9SRVRGVU5DX0RFUFRIKQorCQkJY3B1X2RhdGEtPmVudGVyX2Z1bmNzW2NhbGwtPmRlcHRoXSA9IDA7CiAJfQogCiAJLyogT3ZlcmhlYWQgKi8KQEAgLTcyMSwxMCArNzI1LDE1IEBACiAJaW50IGk7CiAKIAlpZiAoZGF0YSkgeworCQlzdHJ1Y3QgZmdyYXBoX2NwdV9kYXRhICpjcHVfZGF0YTsKIAkJaW50IGNwdSA9IGl0ZXItPmNwdTsKLQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmRlcHRoKTsKIAotCQkqZGVwdGggPSBjYWxsLT5kZXB0aDsKKwkJY3B1X2RhdGEgPSBwZXJfY3B1X3B0cihkYXRhLT5jcHVfZGF0YSwgY3B1KTsKKwkJY3B1X2RhdGEtPmRlcHRoID0gY2FsbC0+ZGVwdGg7CisKKwkJLyogU2F2ZSB0aGlzIGZ1bmN0aW9uIHBvaW50ZXIgdG8gc2VlIGlmIHRoZSBleGl0IG1hdGNoZXMgKi8KKwkJaWYgKGNhbGwtPmRlcHRoIDwgRlRSQUNFX1JFVEZVTkNfREVQVEgpCisJCQljcHVfZGF0YS0+ZW50ZXJfZnVuY3NbY2FsbC0+ZGVwdGhdID0gY2FsbC0+ZnVuYzsKIAl9CiAKIAkvKiBObyBvdmVyaGVhZCAqLwpAQCAtODU0LDE5ICs4NjMsMjggQEAKIAlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOwogCXBpZF90IHBpZCA9IGVudC0+cGlkOwogCWludCBjcHUgPSBpdGVyLT5jcHU7CisJaW50IGZ1bmNfbWF0Y2ggPSAxOwogCWludCByZXQ7CiAJaW50IGk7CiAKIAlpZiAoZGF0YSkgeworCQlzdHJ1Y3QgZmdyYXBoX2NwdV9kYXRhICpjcHVfZGF0YTsKIAkJaW50IGNwdSA9IGl0ZXItPmNwdTsKLQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmRlcHRoKTsKKworCQljcHVfZGF0YSA9IHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpOwogCiAJCS8qCiAJCSAqIENvbW1lbnRzIGRpc3BsYXkgYXQgKyAxIHRvIGRlcHRoLiBUaGlzIGlzIHRoZQogCQkgKiByZXR1cm4gZnJvbSBhIGZ1bmN0aW9uLCB3ZSBub3cgd2FudCB0aGUgY29tbWVudHMKIAkJICogdG8gZGlzcGxheSBhdCB0aGUgc2FtZSBsZXZlbCBvZiB0aGUgYnJhY2tldC4KIAkJICovCi0JCSpkZXB0aCA9IHRyYWNlLT5kZXB0aCAtIDE7CisJCWNwdV9kYXRhLT5kZXB0aCA9IHRyYWNlLT5kZXB0aCAtIDE7CisKKwkJaWYgKHRyYWNlLT5kZXB0aCA8IEZUUkFDRV9SRVRGVU5DX0RFUFRIKSB7CisJCQlpZiAoY3B1X2RhdGEtPmVudGVyX2Z1bmNzW3RyYWNlLT5kZXB0aF0gIT0gdHJhY2UtPmZ1bmMpCisJCQkJZnVuY19tYXRjaCA9IDA7CisJCQljcHVfZGF0YS0+ZW50ZXJfZnVuY3NbdHJhY2UtPmRlcHRoXSA9IDA7CisJCX0KIAl9CiAKIAlpZiAocHJpbnRfZ3JhcGhfcHJvbG9ndWUoaXRlciwgcywgMCwgMCkpCkBAIC04OTEsOSArOTA5LDIxIEBACiAJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJfQogCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAifVxuIik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkvKgorCSAqIElmIHRoZSByZXR1cm4gZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIGVudHJ5LAorCSAqIHRoZW4gdGhlIGVudHJ5IHdhcyBsb3N0LiBJbnN0ZWFkIG9mIGp1c3QgcHJpbnRpbmcKKwkgKiB0aGUgJ30nIGFuZCBsZXR0aW5nIHRoZSB1c2VyIGd1ZXNzIHdoYXQgZnVuY3Rpb24gdGhpcworCSAqIGJlbG9uZ3MgdG8sIHdyaXRlIG91dCB0aGUgZnVuY3Rpb24gbmFtZS4KKwkgKi8KKwlpZiAoZnVuY19tYXRjaCkgeworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJ9XG4iKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfSBlbHNlIHsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAifSAoJXBzKVxuIiwgKHZvaWQgKil0cmFjZS0+ZnVuYyk7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KIAogCS8qIE92ZXJydW4gKi8KIAlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJSVU4pIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwppbmRleCA1MGIxYjgyLi41MDVjOTIyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCkBAIC05MSwxMSArOTEsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9hcmd1bWVudChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqbnVtKQotewotCXJldHVybiByZWdzX2dldF9hcmd1bWVudF9udGgocmVncywgKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGxvbmcpbnVtKSk7Ci19Ci0KIHN0YXRpYyBfX2twcm9iZXMgdW5zaWduZWQgbG9uZyBmZXRjaF9yZXR2YWx1ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkJICAgICAgdm9pZCAqZHVtbXkpCiB7CkBAIC0yMzEsOSArMjI2LDcgQEAKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCWlmIChmZi0+ZnVuYyA9PSBmZXRjaF9hcmd1bWVudCkKLQkJcmV0ID0gc25wcmludGYoYnVmLCBuLCAiJGFyZyVsdSIsICh1bnNpZ25lZCBsb25nKWZmLT5kYXRhKTsKLQllbHNlIGlmIChmZi0+ZnVuYyA9PSBmZXRjaF9yZWdpc3RlcikgeworCWlmIChmZi0+ZnVuYyA9PSBmZXRjaF9yZWdpc3RlcikgewogCQljb25zdCBjaGFyICpuYW1lOwogCQluYW1lID0gcmVnc19xdWVyeV9yZWdpc3Rlcl9uYW1lKCh1bnNpZ25lZCBpbnQpKChsb25nKWZmLT5kYXRhKSk7CiAJCXJldCA9IHNucHJpbnRmKGJ1ZiwgbiwgIiUlJXMiLCBuYW1lKTsKQEAgLTQ4OSwxNCArNDgyLDYgQEAKIAkJCX0KIAkJfSBlbHNlCiAJCQlyZXQgPSAtRUlOVkFMOwotCX0gZWxzZSBpZiAoc3RybmNtcChhcmcsICJhcmciLCAzKSA9PSAwICYmIGlzZGlnaXQoYXJnWzNdKSkgewotCQlyZXQgPSBzdHJpY3Rfc3RydG91bChhcmcgKyAzLCAxMCwgJnBhcmFtKTsKLQkJaWYgKHJldCB8fCBwYXJhbSA+IFBBUkFNX01BWF9BUkdTKQotCQkJcmV0ID0gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlmZi0+ZnVuYyA9IGZldGNoX2FyZ3VtZW50OwotCQkJZmYtPmRhdGEgPSAodm9pZCAqKXBhcmFtOwotCQl9CiAJfSBlbHNlCiAJCXJldCA9IC1FSU5WQUw7CiAJcmV0dXJuIHJldDsKQEAgLTYxMSw3ICs1OTYsNiBAQAogCSAqICAtIEFkZCBrcHJvYmU6IHBbOltHUlAvXUVWRU5UXSBLU1lNWytPRkZTXXxLQUREUiBbRkVUQ0hBUkdTXQogCSAqICAtIEFkZCBrcmV0cHJvYmU6IHJbOltHUlAvXUVWRU5UXSBLU1lNWyswXSBbRkVUQ0hBUkdTXQogCSAqIEZldGNoIGFyZ3M6Ci0JICogICRhcmdOCTogZmV0Y2ggTnRoIG9mIGZ1bmN0aW9uIGFyZ3VtZW50LiAoTjowLSkKIAkgKiAgJHJldHZhbAk6IGZldGNoIHJldHVybiB2YWx1ZQogCSAqICAkc3RhY2sJOiBmZXRjaCBzdGFjayBhZGRyZXNzCiAJICogICRzdGFja04JOiBmZXRjaCBOdGggb2Ygc3RhY2sgKE46MC0pCkBAIC02NTEsMTIgKzYzNSwxMiBAQAogCQkJZXZlbnQgPSBzdHJjaHIoZ3JvdXAsICcvJykgKyAxOwogCQkJZXZlbnRbLTFdID0gJ1wwJzsKIAkJCWlmIChzdHJsZW4oZ3JvdXApID09IDApIHsKLQkJCQlwcl9pbmZvKCJHcm91cCBuYW1lIGlzIG5vdCBzcGVjaWZpbGVkXG4iKTsKKwkJCQlwcl9pbmZvKCJHcm91cCBuYW1lIGlzIG5vdCBzcGVjaWZpZWRcbiIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9CiAJCWlmIChzdHJsZW4oZXZlbnQpID09IDApIHsKLQkJCXByX2luZm8oIkV2ZW50IG5hbWUgaXMgbm90IHNwZWNpZmlsZWRcbiIpOworCQkJcHJfaW5mbygiRXZlbnQgbmFtZSBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtOTU4LDcgKzk0Miw3IEBACiB9OwogCiAvKiBLcHJvYmUgaGFuZGxlciAqLwotc3RhdGljIF9fa3Byb2JlcyBpbnQga3Byb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtwcm9iZSAqa3AsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtwcm9iZV90cmFjZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gY29udGFpbmVyX29mKGtwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwLmtwKTsKIAlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5ICplbnRyeTsKQEAgLTk3OCw3ICs5NjIsNyBAQAogCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKCZidWZmZXIsIGNhbGwtPmlkLCBzaXplLAogCQkJCQkJICBpcnFfZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAllbnRyeS0+bmFyZ3MgPSB0cC0+bnJfYXJnczsKQEAgLTk4OCwxMSArOTcyLDEwIEBACiAKIAlpZiAoIWZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQoYnVmZmVyLCBjYWxsLCBlbnRyeSwgZXZlbnQpKQogCQl0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzLCBwYyk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIEtyZXRwcm9iZSBoYW5kbGVyICovCi1zdGF0aWMgX19rcHJvYmVzIGludCBrcmV0cHJvYmVfdHJhY2VfZnVuYyhzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBrcmV0cHJvYmVfdHJhY2VfZnVuYyhzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKIAkJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gY29udGFpbmVyX29mKHJpLT5ycCwgc3RydWN0IHRyYWNlX3Byb2JlLCBycCk7CkBAIC0xMDExLDcgKzk5NCw3IEBACiAJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmJ1ZmZlciwgY2FsbC0+aWQsIHNpemUsCiAJCQkJCQkgIGlycV9mbGFncywgcGMpOwogCWlmICghZXZlbnQpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOwpAQCAtMTAyMiw4ICsxMDA1LDYgQEAKIAogCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChidWZmZXIsIGNhbGwsIGVudHJ5LCBldmVudCkpCiAJCXRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsKLQotCXJldHVybiAwOwogfQogCiAvKiBFdmVudCBlbnRyeSBwcmludGVycyAqLwpAQCAtMTE3NCwyMTMgKzExNTUsMTIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19wcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzdHJ1Y3QgdHJhY2Vfc2VxICpzLAotCQkJCSAgICAgc3RydWN0IHRyYWNlX3Byb2JlICp0cCwgY29uc3QgY2hhciAqZm10LAotCQkJCSAgICAgY29uc3QgY2hhciAqYXJnKQorc3RhdGljIGludCBfX3NldF9wcmludF9mbXQoc3RydWN0IHRyYWNlX3Byb2JlICp0cCwgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCWludCBpOworCWludCBwb3MgPSAwOwogCi0JLyogU2hvdyBmb3JtYXQgKi8KLQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiBcIiVzIiwgZm10KSkKLQkJcmV0dXJuIDA7CisJY29uc3QgY2hhciAqZm10LCAqYXJnOwogCi0JZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCi0JCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiICVzPSUlbHgiLCB0cC0+YXJnc1tpXS5uYW1lKSkKLQkJCXJldHVybiAwOworCWlmICghcHJvYmVfaXNfcmV0dXJuKHRwKSkgeworCQlmbXQgPSAiKCVseCkiOworCQlhcmcgPSAiUkVDLT4iIEZJRUxEX1NUUklOR19JUDsKKwl9IGVsc2UgeworCQlmbXQgPSAiKCVseCA8LSAlbHgpIjsKKwkJYXJnID0gIlJFQy0+IiBGSUVMRF9TVFJJTkdfRlVOQyAiLCBSRUMtPiIgRklFTERfU1RSSU5HX1JFVElQOworCX0KIAotCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiXCIsICVzIiwgYXJnKSkKLQkJcmV0dXJuIDA7CisJLyogV2hlbiBsZW49MCwgd2UganVzdCBjYWxjdWxhdGUgdGhlIG5lZWRlZCBsZW5ndGggKi8KKyNkZWZpbmUgTEVOX09SX1pFUk8gKGxlbiA/IGxlbiAtIHBvcyA6IDApCiAKLQlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKLQkJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIsIFJFQy0+JXMiLCB0cC0+YXJnc1tpXS5uYW1lKSkKLQkJCXJldHVybiAwOworCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiXCIlcyIsIGZtdCk7CiAKLQlyZXR1cm4gdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7CisJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspIHsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sICIgJXM9JSVseCIsCisJCQkJdHAtPmFyZ3NbaV0ubmFtZSk7CisJfQorCisJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sICJcIiwgJXMiLCBhcmcpOworCisJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspIHsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sICIsIFJFQy0+JXMiLAorCQkJCXRwLT5hcmdzW2ldLm5hbWUpOworCX0KKworI3VuZGVmIExFTl9PUl9aRVJPCisKKwkvKiByZXR1cm4gdGhlIGxlbmd0aCBvZiBwcmludF9mbXQgKi8KKwlyZXR1cm4gcG9zOwogfQogCi0jdW5kZWYgU0hPV19GSUVMRAotI2RlZmluZSBTSE9XX0ZJRUxEKHR5cGUsIGl0ZW0sIG5hbWUpCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAlcztcdCIJXAotCQkJCSJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiVkO1xuIiwgbmFtZSxcCi0JCQkJKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSxcCi0JCQkJKHVuc2lnbmVkIGludClzaXplb2YodHlwZSksCQlcCi0JCQkJaXNfc2lnbmVkX3R5cGUodHlwZSkpOwkJCVwKLQkJaWYgKCFyZXQpCQkJCQkJXAotCQkJcmV0dXJuIDA7CQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBrcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJCSAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQorc3RhdGljIGludCBzZXRfcHJpbnRfZm10KHN0cnVjdCB0cmFjZV9wcm9iZSAqdHApCiB7Ci0Jc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSBmaWVsZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsKLQlpbnQgcmV0LCBpOwotCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSAoc3RydWN0IHRyYWNlX3Byb2JlICopY2FsbC0+ZGF0YTsKKwlpbnQgbGVuOworCWNoYXIgKnByaW50X2ZtdDsKIAotCVNIT1dfRklFTEQodW5zaWduZWQgbG9uZywgaXAsIEZJRUxEX1NUUklOR19JUCk7Ci0JU0hPV19GSUVMRChpbnQsIG5hcmdzLCBGSUVMRF9TVFJJTkdfTkFSR1MpOworCS8qIEZpcnN0OiBjYWxsZWQgd2l0aCAwIGxlbmd0aCB0byBjYWxjdWxhdGUgdGhlIG5lZWRlZCBsZW5ndGggKi8KKwlsZW4gPSBfX3NldF9wcmludF9mbXQodHAsIE5VTEwsIDApOworCXByaW50X2ZtdCA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmludF9mbXQpCisJCXJldHVybiAtRU5PTUVNOwogCi0JLyogU2hvdyBmaWVsZHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKLQkJU0hPV19GSUVMRCh1bnNpZ25lZCBsb25nLCBhcmdzW2ldLCB0cC0+YXJnc1tpXS5uYW1lKTsKLQl0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKTsKKwkvKiBTZWNvbmQ6IGFjdHVhbGx5IHdyaXRlIHRoZSBAcHJpbnRfZm10ICovCisJX19zZXRfcHJpbnRfZm10KHRwLCBwcmludF9mbXQsIGxlbiArIDEpOworCXRwLT5jYWxsLnByaW50X2ZtdCA9IHByaW50X2ZtdDsKIAotCXJldHVybiBfX3Byb2JlX2V2ZW50X3Nob3dfZm9ybWF0KHMsIHRwLCAiKCVseCkiLAotCQkJCQkgIlJFQy0+IiBGSUVMRF9TVFJJTkdfSVApOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtyZXRwcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCi0JCQkJICAgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCi17Ci0Jc3RydWN0IGtyZXRwcm9iZV90cmFjZV9lbnRyeSBmaWVsZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsKLQlpbnQgcmV0LCBpOwotCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSAoc3RydWN0IHRyYWNlX3Byb2JlICopY2FsbC0+ZGF0YTsKLQotCVNIT1dfRklFTEQodW5zaWduZWQgbG9uZywgZnVuYywgRklFTERfU1RSSU5HX0ZVTkMpOwotCVNIT1dfRklFTEQodW5zaWduZWQgbG9uZywgcmV0X2lwLCBGSUVMRF9TVFJJTkdfUkVUSVApOwotCVNIT1dfRklFTEQoaW50LCBuYXJncywgRklFTERfU1RSSU5HX05BUkdTKTsKLQotCS8qIFNob3cgZmllbGRzICovCi0JZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCi0JCVNIT1dfRklFTEQodW5zaWduZWQgbG9uZywgYXJnc1tpXSwgdHAtPmFyZ3NbaV0ubmFtZSk7Ci0JdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7Ci0KLQlyZXR1cm4gX19wcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzLCB0cCwgIiglbHggPC0gJWx4KSIsCi0JCQkJCSAiUkVDLT4iIEZJRUxEX1NUUklOR19GVU5DCi0JCQkJCSAiLCBSRUMtPiIgRklFTERfU1RSSU5HX1JFVElQKTsKLX0KLQotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKIC8qIEtwcm9iZSBwcm9maWxlIGhhbmRsZXIgKi8KLXN0YXRpYyBfX2twcm9iZXMgaW50IGtwcm9iZV9wcm9maWxlX2Z1bmMoc3RydWN0IGtwcm9iZSAqa3AsCitzdGF0aWMgX19rcHJvYmVzIHZvaWQga3Byb2JlX3Byb2ZpbGVfZnVuYyhzdHJ1Y3Qga3Byb2JlICprcCwKIAkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2Yoa3AsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnAua3ApOwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZ0cC0+Y2FsbDsKIAlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudDsKLQlpbnQgc2l6ZSwgX19zaXplLCBpLCBwYywgX19jcHU7CisJaW50IHNpemUsIF9fc2l6ZSwgaTsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQljaGFyICp0cmFjZV9idWY7Ci0JY2hhciAqcmF3X2RhdGE7CiAJaW50IHJjdHg7CiAKLQlwYyA9IHByZWVtcHRfY291bnQoKTsKIAlfX3NpemUgPSBTSVpFT0ZfS1BST0JFX1RSQUNFX0VOVFJZKHRwLT5ucl9hcmdzKTsKIAlzaXplID0gQUxJR04oX19zaXplICsgc2l6ZW9mKHUzMiksIHNpemVvZih1NjQpKTsKIAlzaXplIC09IHNpemVvZih1MzIpOwogCWlmIChXQVJOX09OQ0Uoc2l6ZSA+IEZUUkFDRV9NQVhfUFJPRklMRV9TSVpFLAogCQkgICAgICJwcm9maWxlIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoIikpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKLQkvKgotCSAqIFByb3RlY3QgdGhlIG5vbiBubWkgYnVmZmVyCi0JICogVGhpcyBhbHNvIHByb3RlY3RzIHRoZSByY3UgcmVhZCBzaWRlCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKKwllbnRyeSA9IGZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKHNpemUsIGNhbGwtPmlkLCAmcmN0eCwgJmlycV9mbGFncyk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuOwogCi0JcmN0eCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsKLQlpZiAocmN0eCA8IDApCi0JCWdvdG8gZW5kX3JlY3Vyc2lvbjsKLQotCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGluX25taSgpKQotCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsKLQllbHNlCi0JCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7Ci0KLQlpZiAoIXRyYWNlX2J1ZikKLQkJZ290byBlbmQ7Ci0KLQlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHRyYWNlX2J1ZiwgX19jcHUpOwotCi0JLyogWmVybyBkZWFkIGJ5dGVzIGZyb20gYWxpZ25tZW50IHRvIGF2b2lkIGJ1ZmZlciBsZWFrIHRvIHVzZXJzcGFjZSAqLwotCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7Ci0JZW50cnkgPSAoc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqKXJhd19kYXRhOwotCWVudCA9ICZlbnRyeS0+ZW50OwotCi0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOwotCWVudC0+dHlwZSA9IGNhbGwtPmlkOwogCWVudHJ5LT5uYXJncyA9IHRwLT5ucl9hcmdzOwogCWVudHJ5LT5pcCA9ICh1bnNpZ25lZCBsb25nKWtwLT5hZGRyOwogCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQogCQllbnRyeS0+YXJnc1tpXSA9IGNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoLCByZWdzKTsKLQlwZXJmX3RwX2V2ZW50KGNhbGwtPmlkLCBlbnRyeS0+aXAsIDEsIGVudHJ5LCBzaXplKTsKIAotZW5kOgotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7Ci1lbmRfcmVjdXJzaW9uOgotCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Ci0KLQlyZXR1cm4gMDsKKwlmdHJhY2VfcGVyZl9idWZfc3VibWl0KGVudHJ5LCBzaXplLCByY3R4LCBlbnRyeS0+aXAsIDEsIGlycV9mbGFncyk7CiB9CiAKIC8qIEtyZXRwcm9iZSBwcm9maWxlIGhhbmRsZXIgKi8KLXN0YXRpYyBfX2twcm9iZXMgaW50IGtyZXRwcm9iZV9wcm9maWxlX2Z1bmMoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCitzdGF0aWMgX19rcHJvYmVzIHZvaWQga3JldHByb2JlX3Byb2ZpbGVfZnVuYyhzdHJ1Y3Qga3JldHByb2JlX2luc3RhbmNlICpyaSwKIAkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHAgPSBjb250YWluZXJfb2YocmktPnJwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwKTsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmdHAtPmNhbGw7CiAJc3RydWN0IGtyZXRwcm9iZV90cmFjZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7Ci0JaW50IHNpemUsIF9fc2l6ZSwgaSwgcGMsIF9fY3B1OworCWludCBzaXplLCBfX3NpemUsIGk7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0JY2hhciAqdHJhY2VfYnVmOwotCWNoYXIgKnJhd19kYXRhOwogCWludCByY3R4OwogCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAJX19zaXplID0gU0laRU9GX0tSRVRQUk9CRV9UUkFDRV9FTlRSWSh0cC0+bnJfYXJncyk7CiAJc2l6ZSA9IEFMSUdOKF9fc2l6ZSArIHNpemVvZih1MzIpLCBzaXplb2YodTY0KSk7CiAJc2l6ZSAtPSBzaXplb2YodTMyKTsKIAlpZiAoV0FSTl9PTkNFKHNpemUgPiBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRSwKIAkJICAgICAicHJvZmlsZSBidWZmZXIgbm90IGxhcmdlIGVub3VnaCIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCi0JLyoKLQkgKiBQcm90ZWN0IHRoZSBub24gbm1pIGJ1ZmZlcgotCSAqIFRoaXMgYWxzbyBwcm90ZWN0cyB0aGUgcmN1IHJlYWQgc2lkZQotCSAqLwotCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisJZW50cnkgPSBmdHJhY2VfcGVyZl9idWZfcHJlcGFyZShzaXplLCBjYWxsLT5pZCwgJnJjdHgsICZpcnFfZmxhZ3MpOworCWlmICghZW50cnkpCisJCXJldHVybjsKIAotCXJjdHggPSBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KCk7Ci0JaWYgKHJjdHggPCAwKQotCQlnb3RvIGVuZF9yZWN1cnNpb247Ci0KLQlfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChpbl9ubWkoKSkKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmX25taSk7Ci0JZWxzZQotCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOwotCi0JaWYgKCF0cmFjZV9idWYpCi0JCWdvdG8gZW5kOwotCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsKLQotCS8qIFplcm8gZGVhZCBieXRlcyBmcm9tIGFsaWdubWVudCB0byBhdm9pZCBidWZmZXIgbGVhayB0byB1c2Vyc3BhY2UgKi8KLQkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwotCWVudHJ5ID0gKHN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnkgKilyYXdfZGF0YTsKLQllbnQgPSAmZW50cnktPmVudDsKLQotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50LCBpcnFfZmxhZ3MsIHBjKTsKLQllbnQtPnR5cGUgPSBjYWxsLT5pZDsKIAllbnRyeS0+bmFyZ3MgPSB0cC0+bnJfYXJnczsKIAllbnRyeS0+ZnVuYyA9ICh1bnNpZ25lZCBsb25nKXRwLT5ycC5rcC5hZGRyOwogCWVudHJ5LT5yZXRfaXAgPSAodW5zaWduZWQgbG9uZylyaS0+cmV0X2FkZHI7CiAJZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCiAJCWVudHJ5LT5hcmdzW2ldID0gY2FsbF9mZXRjaCgmdHAtPmFyZ3NbaV0uZmV0Y2gsIHJlZ3MpOwotCXBlcmZfdHBfZXZlbnQoY2FsbC0+aWQsIGVudHJ5LT5yZXRfaXAsIDEsIGVudHJ5LCBzaXplKTsKIAotZW5kOgotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7Ci1lbmRfcmVjdXJzaW9uOgotCWxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Ci0KLQlyZXR1cm4gMDsKKwlmdHJhY2VfcGVyZl9idWZfc3VibWl0KGVudHJ5LCBzaXplLCByY3R4LCBlbnRyeS0+cmV0X2lwLCAxLCBpcnFfZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHByb2JlX3Byb2ZpbGVfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKQEAgLTE0MDgsNyArMTI5OSw3IEBACiAJCQlkaXNhYmxlX2twcm9iZSgmdHAtPnJwLmtwKTsKIAl9CiB9Ci0jZW5kaWYJLyogQ09ORklHX0VWRU5UX1BST0ZJTEUgKi8KKyNlbmRpZgkvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIAogCiBzdGF0aWMgX19rcHJvYmVzCkBAIC0xNDE4LDEwICsxMzA5LDEwIEBACiAKIAlpZiAodHAtPmZsYWdzICYgVFBfRkxBR19UUkFDRSkKIAkJa3Byb2JlX3RyYWNlX2Z1bmMoa3AsIHJlZ3MpOwotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAJaWYgKHRwLT5mbGFncyAmIFRQX0ZMQUdfUFJPRklMRSkKIAkJa3Byb2JlX3Byb2ZpbGVfZnVuYyhrcCwgcmVncyk7Ci0jZW5kaWYJLyogQ09ORklHX0VWRU5UX1BST0ZJTEUgKi8KKyNlbmRpZgogCXJldHVybiAwOwkvKiBXZSBkb24ndCB0d2VlayBrZXJuZWwsIHNvIGp1c3QgcmV0dXJuIDAgKi8KIH0KIApAQCAtMTQzMiwxMCArMTMyMywxMCBAQAogCiAJaWYgKHRwLT5mbGFncyAmIFRQX0ZMQUdfVFJBQ0UpCiAJCWtyZXRwcm9iZV90cmFjZV9mdW5jKHJpLCByZWdzKTsKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCWlmICh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1BST0ZJTEUpCiAJCWtyZXRwcm9iZV9wcm9maWxlX2Z1bmMocmksIHJlZ3MpOwotI2VuZGlmCS8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisjZW5kaWYKIAlyZXR1cm4gMDsJLyogV2UgZG9uJ3QgdHdlZWsga2VybmVsLCBzbyBqdXN0IHJldHVybiAwICovCiB9CiAKQEAgLTE0NDgsMjMgKzEzMzksMjUgQEAKIAlpZiAocHJvYmVfaXNfcmV0dXJuKHRwKSkgewogCQl0cC0+ZXZlbnQudHJhY2UgPSBwcmludF9rcmV0cHJvYmVfZXZlbnQ7CiAJCWNhbGwtPnJhd19pbml0ID0gcHJvYmVfZXZlbnRfcmF3X2luaXQ7Ci0JCWNhbGwtPnNob3dfZm9ybWF0ID0ga3JldHByb2JlX2V2ZW50X3Nob3dfZm9ybWF0OwogCQljYWxsLT5kZWZpbmVfZmllbGRzID0ga3JldHByb2JlX2V2ZW50X2RlZmluZV9maWVsZHM7CiAJfSBlbHNlIHsKIAkJdHAtPmV2ZW50LnRyYWNlID0gcHJpbnRfa3Byb2JlX2V2ZW50OwogCQljYWxsLT5yYXdfaW5pdCA9IHByb2JlX2V2ZW50X3Jhd19pbml0OwotCQljYWxsLT5zaG93X2Zvcm1hdCA9IGtwcm9iZV9ldmVudF9zaG93X2Zvcm1hdDsKIAkJY2FsbC0+ZGVmaW5lX2ZpZWxkcyA9IGtwcm9iZV9ldmVudF9kZWZpbmVfZmllbGRzOwogCX0KKwlpZiAoc2V0X3ByaW50X2ZtdCh0cCkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKIAljYWxsLT5ldmVudCA9ICZ0cC0+ZXZlbnQ7CiAJY2FsbC0+aWQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJnRwLT5ldmVudCk7Ci0JaWYgKCFjYWxsLT5pZCkKKwlpZiAoIWNhbGwtPmlkKSB7CisJCWtmcmVlKGNhbGwtPnByaW50X2ZtdCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAljYWxsLT5lbmFibGVkID0gMDsKIAljYWxsLT5yZWdmdW5jID0gcHJvYmVfZXZlbnRfZW5hYmxlOwogCWNhbGwtPnVucmVnZnVuYyA9IHByb2JlX2V2ZW50X2Rpc2FibGU7CiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCWNhbGwtPnByb2ZpbGVfZW5hYmxlID0gcHJvYmVfcHJvZmlsZV9lbmFibGU7CiAJY2FsbC0+cHJvZmlsZV9kaXNhYmxlID0gcHJvYmVfcHJvZmlsZV9kaXNhYmxlOwogI2VuZGlmCkBAIC0xNDcyLDYgKzEzNjUsNyBAQAogCXJldCA9IHRyYWNlX2FkZF9ldmVudF9jYWxsKGNhbGwpOwogCWlmIChyZXQpIHsKIAkJcHJfaW5mbygiRmFpbGVkIHRvIHJlZ2lzdGVyIGtwcm9iZSBldmVudDogJXNcbiIsIGNhbGwtPm5hbWUpOworCQlrZnJlZShjYWxsLT5wcmludF9mbXQpOwogCQl1bnJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmdHAtPmV2ZW50KTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTE0ODEsNiArMTM3NSw3IEBACiB7CiAJLyogdHAtPmV2ZW50IGlzIHVucmVnaXN0ZXJlZCBpbiB0cmFjZV9yZW1vdmVfZXZlbnRfY2FsbCgpICovCiAJdHJhY2VfcmVtb3ZlX2V2ZW50X2NhbGwoJnRwLT5jYWxsKTsKKwlrZnJlZSh0cC0+Y2FsbC5wcmludF9mbXQpOwogfQogCiAvKiBNYWtlIGEgZGVidWdmcyBpbnRlcmZhY2UgZm9yIGNvbnRyb2xpbmcgcHJvYmUgcG9pbnRzICovCkBAIC0xNTIzLDI4ICsxNDE4LDY3IEBACiAKIHN0YXRpYyBfX2luaXQgaW50IGtwcm9iZV90cmFjZV9zZWxmX3Rlc3RzX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQsIHdhcm4gPSAwOwogCWludCAoKnRhcmdldCkoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisJc3RydWN0IHRyYWNlX3Byb2JlICp0cDsKIAogCXRhcmdldCA9IGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQ7CiAKIAlwcl9pbmZvKCJUZXN0aW5nIGtwcm9iZSB0cmFjaW5nOiAiKTsKIAogCXJldCA9IGNvbW1hbmRfdHJhY2VfcHJvYmUoInA6dGVzdHByb2JlIGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQgIgotCQkJCSAgIiRhcmcxICRhcmcyICRhcmczICRhcmc0ICRzdGFjayAkc3RhY2swIik7Ci0JaWYgKFdBUk5fT05fT05DRShyZXQpKQotCQlwcl93YXJuaW5nKCJlcnJvciBlbmFibGluZyBmdW5jdGlvbiBlbnRyeVxuIik7CisJCQkJICAiJHN0YWNrICRzdGFjazAgKzAoJHN0YWNrKSIpOworCWlmIChXQVJOX09OX09OQ0UocmV0KSkgeworCQlwcl93YXJuaW5nKCJlcnJvciBvbiBwcm9iaW5nIGZ1bmN0aW9uIGVudHJ5LlxuIik7CisJCXdhcm4rKzsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgdHJhY2UgcG9pbnQgKi8KKwkJdHAgPSBmaW5kX3Byb2JlX2V2ZW50KCJ0ZXN0cHJvYmUiLCBLUFJPQkVfRVZFTlRfU1lTVEVNKTsKKwkJaWYgKFdBUk5fT05fT05DRSh0cCA9PSBOVUxMKSkgeworCQkJcHJfd2FybmluZygiZXJyb3Igb24gZ2V0dGluZyBuZXcgcHJvYmUuXG4iKTsKKwkJCXdhcm4rKzsKKwkJfSBlbHNlCisJCQlwcm9iZV9ldmVudF9lbmFibGUoJnRwLT5jYWxsKTsKKwl9CiAKIAlyZXQgPSBjb21tYW5kX3RyYWNlX3Byb2JlKCJyOnRlc3Rwcm9iZTIga3Byb2JlX3RyYWNlX3NlbGZ0ZXN0X3RhcmdldCAiCiAJCQkJICAiJHJldHZhbCIpOwotCWlmIChXQVJOX09OX09OQ0UocmV0KSkKLQkJcHJfd2FybmluZygiZXJyb3IgZW5hYmxpbmcgZnVuY3Rpb24gcmV0dXJuXG4iKTsKKwlpZiAoV0FSTl9PTl9PTkNFKHJldCkpIHsKKwkJcHJfd2FybmluZygiZXJyb3Igb24gcHJvYmluZyBmdW5jdGlvbiByZXR1cm4uXG4iKTsKKwkJd2FybisrOworCX0gZWxzZSB7CisJCS8qIEVuYWJsZSB0cmFjZSBwb2ludCAqLworCQl0cCA9IGZpbmRfcHJvYmVfZXZlbnQoInRlc3Rwcm9iZTIiLCBLUFJPQkVfRVZFTlRfU1lTVEVNKTsKKwkJaWYgKFdBUk5fT05fT05DRSh0cCA9PSBOVUxMKSkgeworCQkJcHJfd2FybmluZygiZXJyb3Igb24gZ2V0dGluZyBuZXcgcHJvYmUuXG4iKTsKKwkJCXdhcm4rKzsKKwkJfSBlbHNlCisJCQlwcm9iZV9ldmVudF9lbmFibGUoJnRwLT5jYWxsKTsKKwl9CisKKwlpZiAod2FybikKKwkJZ290byBlbmQ7CiAKIAlyZXQgPSB0YXJnZXQoMSwgMiwgMywgNCwgNSwgNik7CiAKLQljbGVhbnVwX2FsbF9wcm9iZXMoKTsKKwlyZXQgPSBjb21tYW5kX3RyYWNlX3Byb2JlKCItOnRlc3Rwcm9iZSIpOworCWlmIChXQVJOX09OX09OQ0UocmV0KSkgeworCQlwcl93YXJuaW5nKCJlcnJvciBvbiBkZWxldGluZyBhIHByb2JlLlxuIik7CisJCXdhcm4rKzsKKwl9CiAKLQlwcl9jb250KCJPS1xuIik7CisJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZSgiLTp0ZXN0cHJvYmUyIik7CisJaWYgKFdBUk5fT05fT05DRShyZXQpKSB7CisJCXByX3dhcm5pbmcoImVycm9yIG9uIGRlbGV0aW5nIGEgcHJvYmUuXG4iKTsKKwkJd2FybisrOworCX0KKworZW5kOgorCWNsZWFudXBfYWxsX3Byb2JlcygpOworCWlmICh3YXJuKQorCQlwcl9jb250KCJORzogU29tZSB0ZXN0cyBhcmUgZmFpbGVkLiBQbGVhc2UgY2hlY2sgdGhlbS5cbiIpOworCWVsc2UKKwkJcHJfY29udCgiT0tcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCmluZGV4IDc1Mjg5ZjMuLmNiYTQ3ZDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCkBAIC0xNDMsNzAgKzE0Myw2NSBAQAogCQkjdHlwZSwgI25hbWUsIG9mZnNldG9mKHR5cGVvZih0cmFjZSksIG5hbWUpLAkJXAogCQlzaXplb2YodHJhY2UubmFtZSksIGlzX3NpZ25lZF90eXBlKHR5cGUpCiAKLWludCBzeXNjYWxsX2VudGVyX2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHN0cnVjdCB0cmFjZV9zZXEgKnMpCitzdGF0aWMKK2ludCAgX19zZXRfZW50ZXJfcHJpbnRfZm10KHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeSwgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCWludCBpOwotCWludCByZXQ7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5ID0gY2FsbC0+ZGF0YTsKLQlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciB0cmFjZTsKLQlpbnQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIsIGFyZ3MpOworCWludCBwb3MgPSAwOwogCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTsiCi0JCQkgICAgICAgIlx0c2lnbmVkOiV1O1xuIiwKLQkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGludCwgbnIpKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIDA7CisJLyogV2hlbiBsZW49MCwgd2UganVzdCBjYWxjdWxhdGUgdGhlIG5lZWRlZCBsZW5ndGggKi8KKyNkZWZpbmUgTEVOX09SX1pFUk8gKGxlbiA/IGxlbiAtIHBvcyA6IDApCisKKwlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIlwiIik7CisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5uYl9hcmdzOyBpKyspIHsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sICIlczogMHglJTAlenVseCVzIiwKKwkJCQllbnRyeS0+YXJnc1tpXSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCWkgPT0gZW50cnktPm5iX2FyZ3MgLSAxID8gIiIgOiAiLCAiKTsKKwl9CisJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sICJcIiIpOwogCiAJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5uYl9hcmdzOyBpKyspIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDolcyAlczsiLCBlbnRyeS0+dHlwZXNbaV0sCi0JCQkJICAgICAgICBlbnRyeS0+YXJnc1tpXSk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIDA7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0b2Zmc2V0OiVkO1x0c2l6ZTolenU7IgotCQkJCSAgICAgICAiXHRzaWduZWQ6JXU7XG4iLCBvZmZzZXQsCi0JCQkJICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwKLQkJCQkgICAgICAgaXNfc2lnbmVkX3R5cGUodW5zaWduZWQgbG9uZykpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCQlvZmZzZXQgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywKKwkJCQkiLCAoKHVuc2lnbmVkIGxvbmcpKFJFQy0+JXMpKSIsIGVudHJ5LT5hcmdzW2ldKTsKIAl9CiAKLQl0cmFjZV9zZXFfcHV0cyhzLCAiXG5wcmludCBmbXQ6IFwiIik7Ci0JZm9yIChpID0gMDsgaSA8IGVudHJ5LT5uYl9hcmdzOyBpKyspIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6IDB4JSUwJXp1bHglcyIsIGVudHJ5LT5hcmdzW2ldLAotCQkJCSAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAotCQkJCQlpID09IGVudHJ5LT5uYl9hcmdzIC0gMSA/ICIiIDogIiwgIik7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIDA7Ci0JfQotCXRyYWNlX3NlcV9wdXRjKHMsICciJyk7CisjdW5kZWYgTEVOX09SX1pFUk8KIAotCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiwgKCh1bnNpZ25lZCBsb25nKShSRUMtPiVzKSkiLAotCQkJCSAgICAgICBlbnRyeS0+YXJnc1tpXSk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIHRyYWNlX3NlcV9wdXRjKHMsICdcbicpOworCS8qIHJldHVybiB0aGUgbGVuZ3RoIG9mIHByaW50X2ZtdCAqLworCXJldHVybiBwb3M7CiB9CiAKLWludCBzeXNjYWxsX2V4aXRfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgc3RydWN0IHRyYWNlX3NlcSAqcykKK3N0YXRpYyBpbnQgc2V0X3N5c2NhbGxfcHJpbnRfZm10KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgdHJhY2U7CisJY2hhciAqcHJpbnRfZm10OworCWludCBsZW47CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5ID0gY2FsbC0+ZGF0YTsKIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKLQkJCSAgICAgICAiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTsiCi0JCQkgICAgICAgIlx0c2lnbmVkOiV1O1xuIgotCQkJICAgICAgICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1OyIKLQkJCSAgICAgICAiXHRzaWduZWQ6JXU7XG4iLAotCQkJICAgICAgIFNZU0NBTExfRklFTEQoaW50LCBuciksCi0JCQkgICAgICAgU1lTQ0FMTF9GSUVMRChsb25nLCByZXQpKTsKLQlpZiAoIXJldCkKKwlpZiAoZW50cnktPmVudGVyX2V2ZW50ICE9IGNhbGwpIHsKKwkJY2FsbC0+cHJpbnRfZm10ID0gIlwiMHglbHhcIiwgUkVDLT5yZXQiOwogCQlyZXR1cm4gMDsKKwl9CiAKLQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6IFwiMHglJWx4XCIsIFJFQy0+cmV0XG4iKTsKKwkvKiBGaXJzdDogY2FsbGVkIHdpdGggMCBsZW5ndGggdG8gY2FsY3VsYXRlIHRoZSBuZWVkZWQgbGVuZ3RoICovCisJbGVuID0gX19zZXRfZW50ZXJfcHJpbnRfZm10KGVudHJ5LCBOVUxMLCAwKTsKKworCXByaW50X2ZtdCA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmludF9mbXQpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogU2Vjb25kOiBhY3R1YWxseSB3cml0ZSB0aGUgQHByaW50X2ZtdCAqLworCV9fc2V0X2VudGVyX3ByaW50X2ZtdChlbnRyeSwgcHJpbnRfZm10LCBsZW4gKyAxKTsKKwljYWxsLT5wcmludF9mbXQgPSBwcmludF9mbXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9zeXNjYWxsX3ByaW50X2ZtdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCit7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5ID0gY2FsbC0+ZGF0YTsKKworCWlmIChlbnRyeS0+ZW50ZXJfZXZlbnQgPT0gY2FsbCkKKwkJa2ZyZWUoY2FsbC0+cHJpbnRfZm10KTsKIH0KIAogaW50IHN5c2NhbGxfZW50ZXJfZGVmaW5lX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCkBAIC0zODYsMTIgKzM4MSwyMiBAQAogewogCWludCBpZDsKIAotCWlkID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KGNhbGwtPmV2ZW50KTsKLQlpZiAoIWlkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQljYWxsLT5pZCA9IGlkOwotCUlOSVRfTElTVF9IRUFEKCZjYWxsLT5maWVsZHMpOwotCXJldHVybiAwOworCWlmIChzZXRfc3lzY2FsbF9wcmludF9mbXQoY2FsbCkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlkID0gdHJhY2VfZXZlbnRfcmF3X2luaXQoY2FsbCk7CisKKwlpZiAoaWQgPCAwKSB7CisJCWZyZWVfc3lzY2FsbF9wcmludF9mbXQoY2FsbCk7CisJCXJldHVybiBpZDsKKwl9CisKKwlyZXR1cm4gaWQ7Cit9CisKK3Vuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc3lzX2NhbGxfdGFibGVbbnJdOwogfQogCiBpbnQgX19pbml0IGluaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCkBAIC00MjEsNyArNDI2LDcgQEAKIH0KIGNvcmVfaW5pdGNhbGwoaW5pdF9mdHJhY2Vfc3lzY2FsbHMpOwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogc3RhdGljIERFQ0xBUkVfQklUTUFQKGVuYWJsZWRfcHJvZl9lbnRlcl9zeXNjYWxscywgTlJfc3lzY2FsbHMpOwogc3RhdGljIERFQ0xBUkVfQklUTUFQKGVuYWJsZWRfcHJvZl9leGl0X3N5c2NhbGxzLCBOUl9zeXNjYWxscyk7CkBAIC00MzMsMTIgKzQzOCw5IEBACiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN5c19kYXRhOwogCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICpyZWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQljaGFyICp0cmFjZV9idWY7Ci0JY2hhciAqcmF3X2RhdGE7CiAJaW50IHN5c2NhbGxfbnI7CiAJaW50IHJjdHg7CiAJaW50IHNpemU7Ci0JaW50IGNwdTsKIAogCXN5c2NhbGxfbnIgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCByZWdzKTsKIAlpZiAoIXRlc3RfYml0KHN5c2NhbGxfbnIsIGVuYWJsZWRfcHJvZl9lbnRlcl9zeXNjYWxscykpCkBAIC00NTcsMzcgKzQ1OSwxNSBAQAogCQkgICAgICAicHJvZmlsZSBidWZmZXIgbm90IGxhcmdlIGVub3VnaCIpKQogCQlyZXR1cm47CiAKLQkvKiBQcm90ZWN0IHRoZSBwZXIgY3B1IGJ1ZmZlciwgYmVnaW4gdGhlIHJjdSByZWFkIHNpZGUgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICopZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoc2l6ZSwKKwkJCQlzeXNfZGF0YS0+ZW50ZXJfZXZlbnQtPmlkLCAmcmN0eCwgJmZsYWdzKTsKKwlpZiAoIXJlYykKKwkJcmV0dXJuOwogCi0JcmN0eCA9IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQoKTsKLQlpZiAocmN0eCA8IDApCi0JCWdvdG8gZW5kX3JlY3Vyc2lvbjsKLQotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zik7Ci0KLQlpZiAoIXRyYWNlX2J1ZikKLQkJZ290byBlbmQ7Ci0KLQlyYXdfZGF0YSA9IHBlcl9jcHVfcHRyKHRyYWNlX2J1ZiwgY3B1KTsKLQotCS8qIHplcm8gdGhlIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbiB0byBub3QgbGVhayBzdGFjayB0byB1c2VyICovCi0JKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKLQotCXJlYyA9IChzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciAqKSByYXdfZGF0YTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZyZWMtPmVudCwgMCwgMCk7Ci0JcmVjLT5lbnQudHlwZSA9IHN5c19kYXRhLT5lbnRlcl9ldmVudC0+aWQ7CiAJcmVjLT5uciA9IHN5c2NhbGxfbnI7CiAJc3lzY2FsbF9nZXRfYXJndW1lbnRzKGN1cnJlbnQsIHJlZ3MsIDAsIHN5c19kYXRhLT5uYl9hcmdzLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nICopJnJlYy0+YXJncyk7Ci0JcGVyZl90cF9ldmVudChzeXNfZGF0YS0+ZW50ZXJfZXZlbnQtPmlkLCAwLCAxLCByZWMsIHNpemUpOwotCi1lbmQ6Ci0JcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKLWVuZF9yZWN1cnNpb246Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWZ0cmFjZV9wZXJmX2J1Zl9zdWJtaXQocmVjLCBzaXplLCByY3R4LCAwLCAxLCBmbGFncyk7CiB9CiAKIGludCBwcm9mX3N5c2VudGVyX2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCkBAIC01MzEsMTEgKzUxMSw4IEBACiAJc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqcmVjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN5c2NhbGxfbnI7Ci0JY2hhciAqdHJhY2VfYnVmOwotCWNoYXIgKnJhd19kYXRhOwogCWludCByY3R4OwogCWludCBzaXplOwotCWludCBjcHU7CiAKIAlzeXNjYWxsX25yID0gc3lzY2FsbF9nZXRfbnIoY3VycmVudCwgcmVncyk7CiAJaWYgKCF0ZXN0X2JpdChzeXNjYWxsX25yLCBlbmFibGVkX3Byb2ZfZXhpdF9zeXNjYWxscykpCkBAIC01NTcsMzggKzUzNCwxNSBAQAogCQkiZXhpdCBldmVudCBoYXMgZ3Jvd24gYWJvdmUgcHJvZmlsZSBidWZmZXIgc2l6ZSIpKQogCQlyZXR1cm47CiAKLQkvKiBQcm90ZWN0IHRoZSBwZXIgY3B1IGJ1ZmZlciwgYmVnaW4gdGhlIHJjdSByZWFkIHNpZGUgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgKilmdHJhY2VfcGVyZl9idWZfcHJlcGFyZShzaXplLAorCQkJCXN5c19kYXRhLT5leGl0X2V2ZW50LT5pZCwgJnJjdHgsICZmbGFncyk7CisJaWYgKCFyZWMpCisJCXJldHVybjsKIAotCXJjdHggPSBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KCk7Ci0JaWYgKHJjdHggPCAwKQotCQlnb3RvIGVuZF9yZWN1cnNpb247Ci0KLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOwotCi0JaWYgKCF0cmFjZV9idWYpCi0JCWdvdG8gZW5kOwotCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIGNwdSk7Ci0KLQkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLwotCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7Ci0KLQlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqKXJhd19kYXRhOwotCi0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmcmVjLT5lbnQsIDAsIDApOwotCXJlYy0+ZW50LnR5cGUgPSBzeXNfZGF0YS0+ZXhpdF9ldmVudC0+aWQ7CiAJcmVjLT5uciA9IHN5c2NhbGxfbnI7CiAJcmVjLT5yZXQgPSBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncyk7CiAKLQlwZXJmX3RwX2V2ZW50KHN5c19kYXRhLT5leGl0X2V2ZW50LT5pZCwgMCwgMSwgcmVjLCBzaXplKTsKLQotZW5kOgotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7Ci1lbmRfcmVjdXJzaW9uOgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlmdHJhY2VfcGVyZl9idWZfc3VibWl0KHJlYywgc2l6ZSwgcmN0eCwgMCwgMSwgZmxhZ3MpOwogfQogCiBpbnQgcHJvZl9zeXNleGl0X2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCkBAIC02MDMsNyArNTU3LDcgQEAKIAkJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc3lzX2V4aXQocHJvZl9zeXNjYWxsX2V4aXQpOwogCWlmIChyZXQpIHsKIAkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSIKLQkJCQkic3lzY2FsbCBlbnRyeSB0cmFjZSBwb2ludCIpOworCQkJCSJzeXNjYWxsIGV4aXQgdHJhY2UgcG9pbnQiKTsKIAl9IGVsc2UgewogCQlzZXRfYml0KG51bSwgZW5hYmxlZF9wcm9mX2V4aXRfc3lzY2FsbHMpOwogCQlzeXNfcHJvZl9yZWZjb3VudF9leGl0Kys7CkBAIC02MjYsNiArNTgwLDUgQEAKIAltdXRleF91bmxvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CiB9CiAKLSNlbmRpZgotCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyLmMgYi9rZXJuZWwvdXNlci5jCmluZGV4IDQ2ZDAxNjUuLjc2NjQ2N2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyLmMKKysrIGIva2VybmVsL3VzZXIuYwpAQCAtNTYsOSArNTYsNiBAQAogCS5zaWdwZW5kaW5nCT0gQVRPTUlDX0lOSVQoMCksCiAJLmxvY2tlZF9zaG0gICAgID0gMCwKIAkudXNlcl9ucwk9ICZpbml0X3VzZXJfbnMsCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQkudGcJCT0gJmluaXRfdGFza19ncm91cCwKLSNlbmRpZgogfTsKIAogLyoKQEAgLTc1LDI2OCArNzIsNiBAQAogCXB1dF91c2VyX25zKHVwLT51c2VyX25zKTsKIH0KIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0KLXN0YXRpYyB2b2lkIHNjaGVkX2Rlc3Ryb3lfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwKQotewotCXNjaGVkX2Rlc3Ryb3lfZ3JvdXAodXAtPnRnKTsKLX0KLQotc3RhdGljIGludCBzY2hlZF9jcmVhdGVfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwKQotewotCWludCByYyA9IDA7Ci0KLQl1cC0+dGcgPSBzY2hlZF9jcmVhdGVfZ3JvdXAoJnJvb3RfdGFza19ncm91cCk7Ci0JaWYgKElTX0VSUih1cC0+dGcpKQotCQlyYyA9IC1FTk9NRU07Ci0KLQlzZXRfdGdfdWlkKHVwKTsKLQotCXJldHVybiByYzsKLX0KLQotI2Vsc2UJLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KLQotc3RhdGljIHZvaWQgc2NoZWRfZGVzdHJveV91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApIHsgfQotc3RhdGljIGludCBzY2hlZF9jcmVhdGVfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwKSB7IHJldHVybiAwOyB9Ci0KLSNlbmRpZgkvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNFUl9TQ0hFRCkgJiYgZGVmaW5lZChDT05GSUdfU1lTRlMpCi0KLXN0YXRpYyBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVpZF9oYXNoX2ZpbmQodWlkX3QgdWlkLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaGVudCkKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKmg7Ci0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeSh1c2VyLCBoLCBoYXNoZW50LCB1aWRoYXNoX25vZGUpIHsKLQkJaWYgKHVzZXItPnVpZCA9PSB1aWQpIHsKLQkJCS8qIHBvc3NpYmx5IHJlc3VycmVjdCBhbiAiYWxtb3N0IGRlbGV0ZWQiIG9iamVjdCAqLwotCQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZ1c2VyLT5fX2NvdW50KSA9PSAxKQotCQkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnVzZXItPndvcmspOwotCQkJcmV0dXJuIHVzZXI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBrc2V0ICp1aWRzX2tzZXQ7IC8qIHJlcHJlc2VudHMgdGhlIC9zeXMva2VybmVsL3VpZHMvIGRpcmVjdG9yeSAqLwotc3RhdGljIERFRklORV9NVVRFWCh1aWRzX211dGV4KTsKLQotc3RhdGljIGlubGluZSB2b2lkIHVpZHNfbXV0ZXhfbG9jayh2b2lkKQotewotCW11dGV4X2xvY2soJnVpZHNfbXV0ZXgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdWlkc19tdXRleF91bmxvY2sodm9pZCkKLXsKLQltdXRleF91bmxvY2soJnVpZHNfbXV0ZXgpOwotfQotCi0vKiB1aWQgZGlyZWN0b3J5IGF0dHJpYnV0ZXMgKi8KLSNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotc3RhdGljIHNzaXplX3QgY3B1X3NoYXJlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBzY2hlZF9ncm91cF9zaGFyZXModXAtPnRnKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNwdV9zaGFyZXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAotCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOwotCXVuc2lnbmVkIGxvbmcgc2hhcmVzOwotCWludCByYzsKLQotCXNzY2FuZihidWYsICIlbHUiLCAmc2hhcmVzKTsKLQotCXJjID0gc2NoZWRfZ3JvdXBfc2V0X3NoYXJlcyh1cC0+dGcsIHNoYXJlcyk7Ci0KLQlyZXR1cm4gKHJjID8gcmMgOiBzaXplKTsKLX0KLQotc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjcHVfc2hhcmVfYXR0ciA9Ci0JX19BVFRSKGNwdV9zaGFyZSwgMDY0NCwgY3B1X3NoYXJlc19zaG93LCBjcHVfc2hhcmVzX3N0b3JlKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi1zdGF0aWMgc3NpemVfdCBjcHVfcnRfcnVudGltZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBzY2hlZF9ncm91cF9ydF9ydW50aW1lKHVwLT50ZykpOwotfQotCi1zdGF0aWMgc3NpemVfdCBjcHVfcnRfcnVudGltZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQl1bnNpZ25lZCBsb25nIHJ0X3J1bnRpbWU7Ci0JaW50IHJjOwotCi0Jc3NjYW5mKGJ1ZiwgIiVsZCIsICZydF9ydW50aW1lKTsKLQotCXJjID0gc2NoZWRfZ3JvdXBfc2V0X3J0X3J1bnRpbWUodXAtPnRnLCBydF9ydW50aW1lKTsKLQotCXJldHVybiAocmMgPyByYyA6IHNpemUpOwotfQotCi1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNwdV9ydF9ydW50aW1lX2F0dHIgPQotCV9fQVRUUihjcHVfcnRfcnVudGltZSwgMDY0NCwgY3B1X3J0X3J1bnRpbWVfc2hvdywgY3B1X3J0X3J1bnRpbWVfc3RvcmUpOwotCi1zdGF0aWMgc3NpemVfdCBjcHVfcnRfcGVyaW9kX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAotCQkJCSAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHNjaGVkX2dyb3VwX3J0X3BlcmlvZCh1cC0+dGcpKTsKLX0KLQotc3RhdGljIHNzaXplX3QgY3B1X3J0X3BlcmlvZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQl1bnNpZ25lZCBsb25nIHJ0X3BlcmlvZDsKLQlpbnQgcmM7Ci0KLQlzc2NhbmYoYnVmLCAiJWx1IiwgJnJ0X3BlcmlvZCk7Ci0KLQlyYyA9IHNjaGVkX2dyb3VwX3NldF9ydF9wZXJpb2QodXAtPnRnLCBydF9wZXJpb2QpOwotCi0JcmV0dXJuIChyYyA/IHJjIDogc2l6ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY3B1X3J0X3BlcmlvZF9hdHRyID0KLQlfX0FUVFIoY3B1X3J0X3BlcmlvZCwgMDY0NCwgY3B1X3J0X3BlcmlvZF9zaG93LCBjcHVfcnRfcGVyaW9kX3N0b3JlKTsKLSNlbmRpZgotCi0vKiBkZWZhdWx0IGF0dHJpYnV0ZXMgcGVyIHVpZCBkaXJlY3RvcnkgKi8KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp1aWRzX2F0dHJpYnV0ZXNbXSA9IHsKLSNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotCSZjcHVfc2hhcmVfYXR0ci5hdHRyLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JJmNwdV9ydF9ydW50aW1lX2F0dHIuYXR0ciwKLQkmY3B1X3J0X3BlcmlvZF9hdHRyLmF0dHIsCi0jZW5kaWYKLQlOVUxMCi19OwotCi0vKiB0aGUgbGlmZXRpbWUgb2YgdXNlcl9zdHJ1Y3QgaXMgbm90IG1hbmFnZWQgYnkgdGhlIGNvcmUgKG5vdykgKi8KLXN0YXRpYyB2b2lkIHVpZHNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIHVpZHNfa3R5cGUgPSB7Ci0JLnN5c2ZzX29wcyA9ICZrb2JqX3N5c2ZzX29wcywKLQkuZGVmYXVsdF9hdHRycyA9IHVpZHNfYXR0cmlidXRlcywKLQkucmVsZWFzZSA9IHVpZHNfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiBDcmVhdGUgL3N5cy9rZXJuZWwvdWlkcy88dWlkPi9jcHVfc2hhcmUgZmlsZSBmb3IgdGhpcyB1c2VyCi0gKiBXZSBkbyBub3QgY3JlYXRlIHRoaXMgZmlsZSBmb3IgdXNlcnMgaW4gYSB1c2VyIG5hbWVzcGFjZSAodW50aWwKLSAqIHN5c2ZzIHRhZ2dpbmcgaXMgaW1wbGVtZW50ZWQpLgotICoKLSAqIFNlZSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1kZXNpZ24tQ0ZTLnR4dCBmb3IgcmFtaWZpY2F0aW9ucy4KLSAqLwotc3RhdGljIGludCB1aWRzX3VzZXJfY3JlYXRlKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXApCi17Ci0Jc3RydWN0IGtvYmplY3QgKmtvYmogPSAmdXAtPmtvYmo7Ci0JaW50IGVycm9yOwotCi0JbWVtc2V0KGtvYmosIDAsIHNpemVvZihzdHJ1Y3Qga29iamVjdCkpOwotCWlmICh1cC0+dXNlcl9ucyAhPSAmaW5pdF91c2VyX25zKQotCQlyZXR1cm4gMDsKLQlrb2JqLT5rc2V0ID0gdWlkc19rc2V0OwotCWVycm9yID0ga29iamVjdF9pbml0X2FuZF9hZGQoa29iaiwgJnVpZHNfa3R5cGUsIE5VTEwsICIlZCIsIHVwLT51aWQpOwotCWlmIChlcnJvcikgewotCQlrb2JqZWN0X3B1dChrb2JqKTsKLQkJZ290byBkb25lOwotCX0KLQotCWtvYmplY3RfdWV2ZW50KGtvYmosIEtPQkpfQUREKTsKLWRvbmU6Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBjcmVhdGUgdGhlc2UgZW50cmllcyBpbiBzeXNmczoKLSAqIAkiL3N5cy9rZXJuZWwvdWlkcyIgZGlyZWN0b3J5Ci0gKiAJIi9zeXMva2VybmVsL3VpZHMvMCIgZGlyZWN0b3J5IChmb3Igcm9vdCB1c2VyKQotICogCSIvc3lzL2tlcm5lbC91aWRzLzAvY3B1X3NoYXJlIiBmaWxlIChmb3Igcm9vdCB1c2VyKQotICovCi1pbnQgX19pbml0IHVpZHNfc3lzZnNfaW5pdCh2b2lkKQotewotCXVpZHNfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoInVpZHMiLCBOVUxMLCBrZXJuZWxfa29iaik7Ci0JaWYgKCF1aWRzX2tzZXQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0dXJuIHVpZHNfdXNlcl9jcmVhdGUoJnJvb3RfdXNlcik7Ci19Ci0KLS8qIGRlbGF5ZWQgd29yayBmdW5jdGlvbiB0byByZW1vdmUgc3lzZnMgZGlyZWN0b3J5IGZvciBhIHVzZXIgYW5kIGZyZWUgdXAKLSAqIGNvcnJlc3BvbmRpbmcgc3RydWN0dXJlcy4KLSAqLwotc3RhdGljIHZvaWQgY2xlYW51cF91c2VyX3N0cnVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIHdvcmsud29yayk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmVtb3ZlX3VzZXIgPSAwOwotCi0JLyogTWFrZSB1aWRfaGFzaF9yZW1vdmUoKSArIHN5c2ZzX3JlbW92ZV9maWxlKCkgKyBrb2JqZWN0X2RlbCgpCi0JICogYXRvbWljLgotCSAqLwotCXVpZHNfbXV0ZXhfbG9jaygpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwotCWlmIChhdG9taWNfcmVhZCgmdXAtPl9fY291bnQpID09IDApIHsKLQkJdWlkX2hhc2hfcmVtb3ZlKHVwKTsKLQkJcmVtb3ZlX3VzZXIgPSAxOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKLQotCWlmICghcmVtb3ZlX3VzZXIpCi0JCWdvdG8gZG9uZTsKLQotCWlmICh1cC0+dXNlcl9ucyA9PSAmaW5pdF91c2VyX25zKSB7Ci0JCWtvYmplY3RfdWV2ZW50KCZ1cC0+a29iaiwgS09CSl9SRU1PVkUpOwotCQlrb2JqZWN0X2RlbCgmdXAtPmtvYmopOwotCQlrb2JqZWN0X3B1dCgmdXAtPmtvYmopOwotCX0KLQotCXNjaGVkX2Rlc3Ryb3lfdXNlcih1cCk7Ci0Ja2V5X3B1dCh1cC0+dWlkX2tleXJpbmcpOwotCWtleV9wdXQodXAtPnNlc3Npb25fa2V5cmluZyk7Ci0Ja21lbV9jYWNoZV9mcmVlKHVpZF9jYWNoZXAsIHVwKTsKLQotZG9uZToKLQl1aWRzX211dGV4X3VubG9jaygpOwotfQotCi0vKiBJUlFzIGFyZSBkaXNhYmxlZCBhbmQgdWlkaGFzaF9sb2NrIGlzIGhlbGQgdXBvbiBmdW5jdGlvbiBlbnRyeS4KLSAqIElSUSBzdGF0ZSAoYXMgc3RvcmVkIGluIGZsYWdzKSBpcyByZXN0b3JlZCBhbmQgdWlkaGFzaF9sb2NrIHJlbGVhc2VkCi0gKiB1cG9uIGZ1bmN0aW9uIGV4aXQuCi0gKi8KLXN0YXRpYyB2b2lkIGZyZWVfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCUlOSVRfREVMQVlFRF9XT1JLKCZ1cC0+d29yaywgY2xlYW51cF91c2VyX3N0cnVjdCk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ1cC0+d29yaywgbXNlY3NfdG9famlmZmllcygxMDAwKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7Ci19Ci0KLSNlbHNlCS8qIENPTkZJR19VU0VSX1NDSEVEICYmIENPTkZJR19TWVNGUyAqLwotCiBzdGF0aWMgc3RydWN0IHVzZXJfc3RydWN0ICp1aWRfaGFzaF9maW5kKHVpZF90IHVpZCwgc3RydWN0IGhsaXN0X2hlYWQgKmhhc2hlbnQpCiB7CiAJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwpAQCAtMzUyLDExICs4Nyw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLWludCB1aWRzX3N5c2ZzX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBpbnQgdWlkc191c2VyX2NyZWF0ZShzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdWlkc19tdXRleF9sb2NrKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHVpZHNfbXV0ZXhfdW5sb2NrKHZvaWQpIHsgfQotCiAvKiBJUlFzIGFyZSBkaXNhYmxlZCBhbmQgdWlkaGFzaF9sb2NrIGlzIGhlbGQgdXBvbiBmdW5jdGlvbiBlbnRyeS4KICAqIElSUSBzdGF0ZSAoYXMgc3RvcmVkIGluIGZsYWdzKSBpcyByZXN0b3JlZCBhbmQgdWlkaGFzaF9sb2NrIHJlbGVhc2VkCiAgKiB1cG9uIGZ1bmN0aW9uIGV4aXQuCkBAIC0zNjUsMzIgKzk1LDExIEBACiB7CiAJdWlkX2hhc2hfcmVtb3ZlKHVwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKLQlzY2hlZF9kZXN0cm95X3VzZXIodXApOwogCWtleV9wdXQodXAtPnVpZF9rZXlyaW5nKTsKIAlrZXlfcHV0KHVwLT5zZXNzaW9uX2tleXJpbmcpOwogCWttZW1fY2FjaGVfZnJlZSh1aWRfY2FjaGVwLCB1cCk7CiB9CiAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfUlRfR1JPVVBfU0NIRUQpICYmIGRlZmluZWQoQ09ORklHX1VTRVJfU0NIRUQpCi0vKgotICogV2UgbmVlZCB0byBjaGVjayBpZiBhIHNldHVpZCBjYW4gdGFrZSBwbGFjZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkCi0gKiBiZWZvcmUgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRpbmcgdGhlIHNldHVpZC4KLSAqLwotaW50IHRhc2tfY2FuX3N3aXRjaF91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCi0JcmV0dXJuIHNjaGVkX3J0X2Nhbl9hdHRhY2godXAtPnRnLCB0c2spOwotCi19Ci0jZWxzZQotaW50IHRhc2tfY2FuX3N3aXRjaF91c2VyKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCXJldHVybiAxOwotfQotI2VuZGlmCi0KIC8qCiAgKiBMb2NhdGUgdGhlIHVzZXJfc3RydWN0IGZvciB0aGUgcGFzc2VkIFVJRC4gIElmIGZvdW5kLCB0YWtlIGEgcmVmIG9uIGl0LiAgVGhlCiAgKiBjYWxsZXIgbXVzdCB1bmRvIHRoYXQgcmVmIHdpdGggZnJlZV91aWQoKS4KQEAgLTQzMSw4ICsxNDAsNiBAQAogCS8qIE1ha2UgdWlkX2hhc2hfZmluZCgpICsgdWlkc191c2VyX2NyZWF0ZSgpICsgdWlkX2hhc2hfaW5zZXJ0KCkKIAkgKiBhdG9taWMuCiAJICovCi0JdWlkc19tdXRleF9sb2NrKCk7Ci0KIAlzcGluX2xvY2tfaXJxKCZ1aWRoYXNoX2xvY2spOwogCXVwID0gdWlkX2hhc2hfZmluZCh1aWQsIGhhc2hlbnQpOwogCXNwaW5fdW5sb2NrX2lycSgmdWlkaGFzaF9sb2NrKTsKQEAgLTQ0NSwxNCArMTUyLDggQEAKIAkJbmV3LT51aWQgPSB1aWQ7CiAJCWF0b21pY19zZXQoJm5ldy0+X19jb3VudCwgMSk7CiAKLQkJaWYgKHNjaGVkX2NyZWF0ZV91c2VyKG5ldykgPCAwKQotCQkJZ290byBvdXRfZnJlZV91c2VyOwotCiAJCW5ldy0+dXNlcl9ucyA9IGdldF91c2VyX25zKG5zKTsKIAotCQlpZiAodWlkc191c2VyX2NyZWF0ZShuZXcpKQotCQkJZ290byBvdXRfZGVzdG95X3NjaGVkOwotCiAJCS8qCiAJCSAqIEJlZm9yZSBhZGRpbmcgdGhpcywgY2hlY2sgd2hldGhlciB3ZSByYWNlZAogCQkgKiBvbiBhZGRpbmcgdGhlIHNhbWUgdXNlciBhbHJlYWR5Li4KQEAgLTQ3NSwxNyArMTc2LDExIEBACiAJCXNwaW5fdW5sb2NrX2lycSgmdWlkaGFzaF9sb2NrKTsKIAl9CiAKLQl1aWRzX211dGV4X3VubG9jaygpOwotCiAJcmV0dXJuIHVwOwogCi1vdXRfZGVzdG95X3NjaGVkOgotCXNjaGVkX2Rlc3Ryb3lfdXNlcihuZXcpOwogCXB1dF91c2VyX25zKG5ldy0+dXNlcl9ucyk7Ci1vdXRfZnJlZV91c2VyOgogCWttZW1fY2FjaGVfZnJlZSh1aWRfY2FjaGVwLCBuZXcpOwogb3V0X3VubG9jazoKLQl1aWRzX211dGV4X3VubG9jaygpOwogCXJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDI1YzNlZDUuLjVlMzQwN2QgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0zNTUsNyArMzU1LDcgQEAKIGNvbmZpZyBERUJVR19LTUVNTEVBSwogCWJvb2wgIktlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvciIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBFWFBFUklNRU5UQUwgJiYgIU1FTU9SWV9IT1RQTFVHICYmIFwKLQkJKFg4NiB8fCBBUk0gfHwgUFBDIHx8IFMzOTApCisJCShYODYgfHwgQVJNIHx8IFBQQyB8fCBTMzkwIHx8IFNVUEVSSCkKIAogCXNlbGVjdCBERUJVR19GUyBpZiBTWVNGUwogCXNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVApAQCAtNDk5LDYgKzQ5OSwxOCBAQAogCiAJIEZvciBtb3JlIGRldGFpbHMsIHNlZSBEb2N1bWVudGF0aW9uL2xvY2tkZXAtZGVzaWduLnR4dC4KIAorY29uZmlnIFBST1ZFX1JDVQorCWJvb2wgIlJDVSBkZWJ1Z2dpbmc6IHByb3ZlIFJDVSBjb3JyZWN0bmVzcyIKKwlkZXBlbmRzIG9uIFBST1ZFX0xPQ0tJTkcKKwlkZWZhdWx0IG4KKwloZWxwCisJIFRoaXMgZmVhdHVyZSBlbmFibGVzIGxvY2tkZXAgZXh0ZW5zaW9ucyB0aGF0IGNoZWNrIGZvciBjb3JyZWN0CisJIHVzZSBvZiBSQ1UgQVBJcy4gIFRoaXMgaXMgY3VycmVudGx5IHVuZGVyIGRldmVsb3BtZW50LiAgU2F5IFkKKwkgaWYgeW91IHdhbnQgdG8gZGVidWcgUkNVIHVzYWdlIG9yIGhlbHAgd29yayBvbiB0aGUgUFJPVkVfUkNVCisJIGZlYXR1cmUuCisKKwkgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCisKIGNvbmZpZyBMT0NLREVQCiAJYm9vbAogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQgJiYgU1RBQ0tUUkFDRV9TVVBQT1JUICYmIExPQ0tERVBfU1VQUE9SVApAQCAtNzY1LDEwICs3NzcsMjIgQEAKIAkgIENQVXMgYXJlIGRlbGF5aW5nIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCwgYnV0IG9ubHkgd2hlbgogCSAgdGhlIGdyYWNlIHBlcmlvZCBleHRlbmRzIGZvciBleGNlc3NpdmUgdGltZSBwZXJpb2RzLgogCi0JICBTYXkgWSBpZiB5b3Ugd2FudCBSQ1UgdG8gcGVyZm9ybSBzdWNoIGNoZWNrcy4KKwkgIFNheSBOIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgc3VjaCBjaGVja3MuCisKKwkgIFNheSBZIGlmIHlvdSBhcmUgdW5zdXJlLgorCitjb25maWcgUkNVX0NQVV9TVEFMTF9WRVJCT1NFCisJYm9vbCAiUHJpbnQgYWRkaXRpb25hbCBwZXItdGFzayBpbmZvcm1hdGlvbiBmb3IgUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiIKKwlkZXBlbmRzIG9uIFJDVV9DUFVfU1RBTExfREVURUNUT1IgJiYgVFJFRV9QUkVFTVBUX1JDVQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBSQ1UgdG8gcHJpbnRrIGRldGFpbGVkIHBlci10YXNrIGluZm9ybWF0aW9uCisJICBmb3IgYW55IHRhc2tzIHRoYXQgYXJlIHN0YWxsaW5nIHRoZSBjdXJyZW50IFJDVSBncmFjZSBwZXJpb2QuCiAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VjaCBjaGVja3MuCisKIGNvbmZpZyBLUFJPQkVTX1NBTklUWV9URVNUCiAJYm9vbCAiS3Byb2JlcyBzYW5pdHkgdGVzdHMiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKZGlmZiAtLWdpdCBhL2xpYi9kZWJ1Z19sb2Nrcy5jIGIvbGliL2RlYnVnX2xvY2tzLmMKaW5kZXggYmMzYjExNy4uNWJmMDAyMCAxMDA2NDQKLS0tIGEvbGliL2RlYnVnX2xvY2tzLmMKKysrIGIvbGliL2RlYnVnX2xvY2tzLmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqIHNodXQgdXAgYWZ0ZXIgdGhhdC4KICAqLwogaW50IGRlYnVnX2xvY2tzID0gMTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRlYnVnX2xvY2tzKTsKIAogLyoKICAqIFRoZSBsb2NraW5nLXRlc3RzdWl0ZSB1c2VzIDxkZWJ1Z19sb2Nrc19zaWxlbnQ+IHRvIGdldCBhCmRpZmYgLS1naXQgYS9saWIvaHdlaWdodC5jIGIvbGliL2h3ZWlnaHQuYwppbmRleCAzODk0MjRlLi42M2VlNGViIDEwMDY0NAotLS0gYS9saWIvaHdlaWdodC5jCisrKyBiL2xpYi9od2VpZ2h0LmMKQEAgLTExLDExICsxMSwxOCBAQAogCiB1bnNpZ25lZCBpbnQgaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KQogeworI2lmZGVmIEFSQ0hfSEFTX0ZBU1RfTVVMVElQTElFUgorCXcgLT0gKHcgPj4gMSkgJiAweDU1NTU1NTU1OworCXcgPSAgKHcgJiAweDMzMzMzMzMzKSArICgodyA+PiAyKSAmIDB4MzMzMzMzMzMpOworCXcgPSAgKHcgKyAodyA+PiA0KSkgJiAweDBmMGYwZjBmOworCXJldHVybiAodyAqIDB4MDEwMTAxMDEpID4+IDI0OworI2Vsc2UKIAl1bnNpZ25lZCBpbnQgcmVzID0gdyAtICgodyA+PiAxKSAmIDB4NTU1NTU1NTUpOwogCXJlcyA9IChyZXMgJiAweDMzMzMzMzMzKSArICgocmVzID4+IDIpICYgMHgzMzMzMzMzMyk7CiAJcmVzID0gKHJlcyArIChyZXMgPj4gNCkpICYgMHgwRjBGMEYwRjsKIAlyZXMgPSByZXMgKyAocmVzID4+IDgpOwogCXJldHVybiAocmVzICsgKHJlcyA+PiAxNikpICYgMHgwMDAwMDBGRjsKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChod2VpZ2h0MzIpOwogCmRpZmYgLS1naXQgYS9saWIvaWRyLmMgYi9saWIvaWRyLmMKaW5kZXggMGRjNzgyMi4uMmViMWRjYSAxMDA2NDQKLS0tIGEvbGliL2lkci5jCisrKyBiL2xpYi9pZHIuYwpAQCAtNTA0LDcgKzUwNCw3IEBACiAJaW50IG47CiAJc3RydWN0IGlkcl9sYXllciAqcDsKIAotCXAgPSByY3VfZGVyZWZlcmVuY2UoaWRwLT50b3ApOworCXAgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGlkcC0+dG9wKTsKIAlpZiAoIXApCiAJCXJldHVybiBOVUxMOwogCW4gPSAocC0+bGF5ZXIrMSkgKiBJRFJfQklUUzsKQEAgLTUxOSw3ICs1MTksNyBAQAogCXdoaWxlIChuID4gMCAmJiBwKSB7CiAJCW4gLT0gSURSX0JJVFM7CiAJCUJVR19PTihuICE9IHAtPmxheWVyKklEUl9CSVRTKTsKLQkJcCA9IHJjdV9kZXJlZmVyZW5jZShwLT5hcnlbKGlkID4+IG4pICYgSURSX01BU0tdKTsKKwkJcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXSk7CiAJfQogCXJldHVybigodm9pZCAqKXApOwogfQpAQCAtNTUyLDcgKzU1Miw3IEBACiAJc3RydWN0IGlkcl9sYXllciAqKnBhYSA9ICZwYVswXTsKIAogCW4gPSBpZHAtPmxheWVycyAqIElEUl9CSVRTOwotCXAgPSByY3VfZGVyZWZlcmVuY2UoaWRwLT50b3ApOworCXAgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGlkcC0+dG9wKTsKIAltYXggPSAxIDw8IG47CiAKIAlpZCA9IDA7CkBAIC01NjAsNyArNTYwLDcgQEAKIAkJd2hpbGUgKG4gPiAwICYmIHApIHsKIAkJCW4gLT0gSURSX0JJVFM7CiAJCQkqcGFhKysgPSBwOwotCQkJcCA9IHJjdV9kZXJlZmVyZW5jZShwLT5hcnlbKGlkID4+IG4pICYgSURSX01BU0tdKTsKKwkJCXAgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHAtPmFyeVsoaWQgPj4gbikgJiBJRFJfTUFTS10pOwogCQl9CiAKIAkJaWYgKHApIHsKZGlmZiAtLWdpdCBhL2xpYi9sbWIuYyBiL2xpYi9sbWIuYwppbmRleCA5Y2VlMTcxLi5iMWZjNTI2IDEwMDY0NAotLS0gYS9saWIvbG1iLmMKKysrIGIvbGliL2xtYi5jCkBAIC0yMDUsOSArMjA1LDggQEAKIAogfQogCi1sb25nIGxtYl9yZW1vdmUodTY0IGJhc2UsIHU2NCBzaXplKQorc3RhdGljIGxvbmcgX19sbWJfcmVtb3ZlKHN0cnVjdCBsbWJfcmVnaW9uICpyZ24sIHU2NCBiYXNlLCB1NjQgc2l6ZSkKIHsKLQlzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduID0gJihsbWIubWVtb3J5KTsKIAl1NjQgcmduYmVnaW4sIHJnbmVuZDsKIAl1NjQgZW5kID0gYmFzZSArIHNpemU7CiAJaW50IGk7CkBAIC0yNTQsNiArMjUzLDE2IEBACiAJcmV0dXJuIGxtYl9hZGRfcmVnaW9uKHJnbiwgZW5kLCByZ25lbmQgLSBlbmQpOwogfQogCitsb25nIGxtYl9yZW1vdmUodTY0IGJhc2UsIHU2NCBzaXplKQoreworCXJldHVybiBfX2xtYl9yZW1vdmUoJmxtYi5tZW1vcnksIGJhc2UsIHNpemUpOworfQorCitsb25nIF9faW5pdCBsbWJfZnJlZSh1NjQgYmFzZSwgdTY0IHNpemUpCit7CisJcmV0dXJuIF9fbG1iX3JlbW92ZSgmbG1iLnJlc2VydmVkLCBiYXNlLCBzaXplKTsKK30KKwogbG9uZyBfX2luaXQgbG1iX3Jlc2VydmUodTY0IGJhc2UsIHU2NCBzaXplKQogewogCXN0cnVjdCBsbWJfcmVnaW9uICpfcmduID0gJmxtYi5yZXNlcnZlZDsKZGlmZiAtLWdpdCBhL2xpYi9yYWRpeC10cmVlLmMgYi9saWIvcmFkaXgtdHJlZS5jCmluZGV4IDkyY2RkOTkuLjZiOTY3MGQgMTAwNjQ0Ci0tLSBhL2xpYi9yYWRpeC10cmVlLmMKKysrIGIvbGliL3JhZGl4LXRyZWUuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJdW5zaWduZWQgaW50IGhlaWdodCwgc2hpZnQ7CiAJc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqbm9kZSwgKipzbG90OwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmIChub2RlID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC0zODQsNyArMzg0LDcgQEAKIAlkbyB7CiAJCXNsb3QgPSAoc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqKikKIAkJCShub2RlLT5zbG90cyArICgoaW5kZXg+PnNoaWZ0KSAmIFJBRElYX1RSRUVfTUFQX01BU0spKTsKLQkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZSgqc2xvdCk7CisJCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KCpzbG90KTsKIAkJaWYgKG5vZGUgPT0gTlVMTCkKIAkJCXJldHVybiBOVUxMOwogCkBAIC01NjgsNyArNTY4LDcgQEAKIAlpZiAoIXJvb3RfdGFnX2dldChyb290LCB0YWcpKQogCQlyZXR1cm4gMDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAobm9kZSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIApAQCAtNjAyLDcgKzYwMiw3IEBACiAJCQlCVUdfT04ocmV0ICYmIHNhd191bnNldF90YWcpOwogCQkJcmV0dXJuICEhcmV0OwogCQl9Ci0JCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uobm9kZS0+c2xvdHNbb2Zmc2V0XSk7CisJCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtPnNsb3RzW29mZnNldF0pOwogCQlzaGlmdCAtPSBSQURJWF9UUkVFX01BUF9TSElGVDsKIAkJaGVpZ2h0LS07CiAJfQpAQCAtNzExLDcgKzcxMSw3IEBACiAJCX0KIAogCQlzaGlmdCAtPSBSQURJWF9UUkVFX01BUF9TSElGVDsKLQkJc2xvdCA9IHJjdV9kZXJlZmVyZW5jZShzbG90LT5zbG90c1tpXSk7CisJCXNsb3QgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHNsb3QtPnNsb3RzW2ldKTsKIAkJaWYgKHNsb3QgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTc1OCw3ICs3NTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3VyX2luZGV4ID0gZmlyc3RfaW5kZXg7CiAJdW5zaWduZWQgaW50IHJldDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAwOwogCkBAIC03ODcsNyArNzg3LDcgQEAKIAkJCXNsb3QgPSAqKCgodm9pZCAqKiopcmVzdWx0cylbcmV0ICsgaV0pOwogCQkJaWYgKCFzbG90KQogCQkJCWNvbnRpbnVlOwotCQkJcmVzdWx0c1tyZXQgKyBucl9mb3VuZF0gPSByY3VfZGVyZWZlcmVuY2Uoc2xvdCk7CisJCQlyZXN1bHRzW3JldCArIG5yX2ZvdW5kXSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoc2xvdCk7CiAJCQlucl9mb3VuZCsrOwogCQl9CiAJCXJldCArPSBucl9mb3VuZDsKQEAgLTgyNiw3ICs4MjYsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3VyX2luZGV4ID0gZmlyc3RfaW5kZXg7CiAJdW5zaWduZWQgaW50IHJldDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAwOwogCkBAIC05MTUsNyArOTE1LDcgQEAKIAkJCX0KIAkJfQogCQlzaGlmdCAtPSBSQURJWF9UUkVFX01BUF9TSElGVDsKLQkJc2xvdCA9IHJjdV9kZXJlZmVyZW5jZShzbG90LT5zbG90c1tpXSk7CisJCXNsb3QgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHNsb3QtPnNsb3RzW2ldKTsKIAkJaWYgKHNsb3QgPT0gTlVMTCkKIAkJCWJyZWFrOwogCX0KQEAgLTk1MSw3ICs5NTEsNyBAQAogCWlmICghcm9vdF90YWdfZ2V0KHJvb3QsIHRhZykpCiAJCXJldHVybiAwOwogCi0Jbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5ybm9kZSk7CisJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTk4MCw3ICs5ODAsNyBAQAogCQkJc2xvdCA9ICooKCh2b2lkICoqKilyZXN1bHRzKVtyZXQgKyBpXSk7CiAJCQlpZiAoIXNsb3QpCiAJCQkJY29udGludWU7Ci0JCQlyZXN1bHRzW3JldCArIG5yX2ZvdW5kXSA9IHJjdV9kZXJlZmVyZW5jZShzbG90KTsKKwkJCXJlc3VsdHNbcmV0ICsgbnJfZm91bmRdID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhzbG90KTsKIAkJCW5yX2ZvdW5kKys7CiAJCX0KIAkJcmV0ICs9IG5yX2ZvdW5kOwpAQCAtMTAyMCw3ICsxMDIwLDcgQEAKIAlpZiAoIXJvb3RfdGFnX2dldChyb290LCB0YWcpKQogCQlyZXR1cm4gMDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAxN2I4OTQ3Li5kMzRjMmI5IDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTE5NSw3ICsxOTUsNyBAQAogY29uZmlnIE5SX1FVSUNLCiAJaW50CiAJZGVwZW5kcyBvbiBRVUlDS0xJU1QKLQlkZWZhdWx0ICIyIiBpZiBTVVBFUkggfHwgQVZSMzIKKwlkZWZhdWx0ICIyIiBpZiBBVlIzMgogCWRlZmF1bHQgIjEiCiAKIGNvbmZpZyBWSVJUX1RPX0JVUwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggZmM2ZWMxZS4uMjgwNTI5YSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC0zMTMsMTAgKzMxMywyMSBAQAogCXJldHVybiBoaWRwX3F1ZXVlX3JlcG9ydChzZXNzaW9uLCBidWYsIHJzaXplKTsKIH0KIAotc3RhdGljIGludCBoaWRwX291dHB1dF9yYXdfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgaGlkcF9vdXRwdXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQsCisJCXVuc2lnbmVkIGNoYXIgcmVwb3J0X3R5cGUpCiB7Ci0JaWYgKGhpZHBfc2VuZF9jdHJsX21lc3NhZ2UoaGlkLT5kcml2ZXJfZGF0YSwKLQkJCUhJRFBfVFJBTlNfU0VUX1JFUE9SVCB8IEhJRFBfREFUQV9SVFlQRV9GRUFUVVJFLAorCXN3aXRjaCAocmVwb3J0X3R5cGUpIHsKKwljYXNlIEhJRF9GRUFUVVJFX1JFUE9SVDoKKwkJcmVwb3J0X3R5cGUgPSBISURQX1RSQU5TX1NFVF9SRVBPUlQgfCBISURQX0RBVEFfUlRZUEVfRkVBVFVSRTsKKwkJYnJlYWs7CisJY2FzZSBISURfT1VUUFVUX1JFUE9SVDoKKwkJcmVwb3J0X3R5cGUgPSBISURQX1RSQU5TX0RBVEEgfCBISURQX0RBVEFfUlRZUEVfT1VQVVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChoaWRwX3NlbmRfY3RybF9tZXNzYWdlKGhpZC0+ZHJpdmVyX2RhdGEsIHJlcG9ydF90eXBlLAogCQkJZGF0YSwgY291bnQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gY291bnQ7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGVjODc0MjEuLmJiMWYxZGEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0yMDQxLDcgKzIwNDEsNyBAQAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAogCXR4cSA9IGRldl9waWNrX3R4KGRldiwgc2tiKTsKLQlxID0gcmN1X2RlcmVmZXJlbmNlKHR4cS0+cWRpc2MpOworCXEgPSByY3VfZGVyZWZlcmVuY2VfYmgodHhxLT5xZGlzYyk7CiAKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAlza2ItPnRjX3ZlcmQgPSBTRVRfVENfQVQoc2tiLT50Y192ZXJkLCBBVF9FR1JFU1MpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAwOGRiN2I5Li4zNTQxYWE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYworKysgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtODYsNyArODYsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwotCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2VfYmgoc2stPnNrX2ZpbHRlcik7CiAJaWYgKGZpbHRlcikgewogCQl1bnNpZ25lZCBpbnQgcGt0X2xlbiA9IHNrX3J1bl9maWx0ZXIoc2tiLCBmaWx0ZXItPmluc25zLAogCQkJCWZpbHRlci0+bGVuKTsKQEAgLTUyMSw3ICs1MjEsNyBAQAogCX0KIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlvbGRfZnAgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CisJb2xkX2ZwID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrLT5za19maWx0ZXIpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihzay0+c2tfZmlsdGVyLCBmcCk7CiAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAKQEAgLTUzNiw3ICs1MzYsNyBAQAogCXN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CisJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrLT5za19maWx0ZXIpOwogCWlmIChmaWx0ZXIpIHsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIE5VTEwpOwogCQlza19maWx0ZXJfZGVsYXllZF91bmNoYXJnZShzaywgZmlsdGVyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggNzk0YmNiOC4uNGM3ZDNmNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTg5LDYgKzg5LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHJ0bmxfaXNfbG9ja2VkKTsKIAorI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCitpbnQgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZCkKK3sKKwlyZXR1cm4gbG9ja2RlcF9pc19oZWxkKCZydG5sX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0wobG9ja2RlcF9ydG5sX2lzX2hlbGQpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORyAqLworCiBzdGF0aWMgc3RydWN0IHJ0bmxfbGluayAqcnRubF9tc2dfaGFuZGxlcnNbTlBST1RPXTsKIAogc3RhdGljIGlubGluZSBpbnQgcnRtX21zZ2luZGV4KGludCBtc2d0eXBlKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGUxZjZmMjIuLjMwNWNiYTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTEwNzMsNyArMTA3Myw4IEBACiAJaWYgKHNrLT5za19kZXN0cnVjdCkKIAkJc2stPnNrX2Rlc3RydWN0KHNrKTsKIAotCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soc2stPnNrX2ZpbHRlciwKKwkJCQkgICAgICAgYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSA9PSAwKTsKIAlpZiAoZmlsdGVyKSB7CiAJCXNrX2ZpbHRlcl91bmNoYXJnZShzaywgZmlsdGVyKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCmluZGV4IGEwMzI4NDAuLmE3YmYwM2MgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcm91dGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKQEAgLTExNTUsOCArMTE1NSw4IEBACiAKIAlpZiAoIShmbGFncyAmIE1TR19UUllIQVJEKSkgewogCQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JCWZvcihydCA9IHJjdV9kZXJlZmVyZW5jZShkbl9ydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnQ7Ci0JCQlydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QuZG5fbmV4dCkpIHsKKwkJZm9yIChydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChkbl9ydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnQ7CisJCQlydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydC0+dS5kc3QuZG5fbmV4dCkpIHsKIAkJCWlmICgoZmxwLT5mbGRfZHN0ID09IHJ0LT5mbC5mbGRfZHN0KSAmJgogCQkJICAgIChmbHAtPmZsZF9zcmMgPT0gcnQtPmZsLmZsZF9zcmMpICYmCiAJCQkgICAgKGZscC0+bWFyayA9PSBydC0+ZmwubWFyaykgJiYKQEAgLTE2MTgsOSArMTYxOCw5IEBACiAJCWlmIChoID4gc19oKQogCQkJc19pZHggPSAwOwogCQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JCWZvcihydCA9IHJjdV9kZXJlZmVyZW5jZShkbl9ydF9oYXNoX3RhYmxlW2hdLmNoYWluKSwgaWR4ID0gMDsKKwkJZm9yKHJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRuX3J0X2hhc2hfdGFibGVbaF0uY2hhaW4pLCBpZHggPSAwOwogCQkJcnQ7Ci0JCQlydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QuZG5fbmV4dCksIGlkeCsrKSB7CisJCQlydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydC0+dS5kc3QuZG5fbmV4dCksIGlkeCsrKSB7CiAJCQlpZiAoaWR4IDwgc19pZHgpCiAJCQkJY29udGludWU7CiAJCQlza2JfZHN0X3NldChza2IsIGRzdF9jbG9uZSgmcnQtPnUuZHN0KSk7CkBAIC0xNjU0LDEyICsxNjU0LDEyIEBACiAKIAlmb3Iocy0+YnVja2V0ID0gZG5fcnRfaGFzaF9tYXNrOyBzLT5idWNrZXQgPj0gMDsgLS1zLT5idWNrZXQpIHsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlydCA9IGRuX3J0X2hhc2hfdGFibGVbcy0+YnVja2V0XS5jaGFpbjsKKwkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoZG5fcnRfaGFzaF90YWJsZVtzLT5idWNrZXRdLmNoYWluKTsKIAkJaWYgKHJ0KQogCQkJYnJlYWs7CiAJCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCX0KLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHJ0KTsKKwlyZXR1cm4gcnQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG5fcm91dGUgKmRuX3J0X2NhY2hlX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZG5fcm91dGUgKnJ0KQpAQCAtMTY3NCw3ICsxNjc0LDcgQEAKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwogCQlydCA9IGRuX3J0X2hhc2hfdGFibGVbcy0+YnVja2V0XS5jaGFpbjsKIAl9Ci0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShydCk7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9iaChydCk7CiB9CiAKIHN0YXRpYyB2b2lkICpkbl9ydF9jYWNoZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZDYyYjA1ZC4uNGYxMWZhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yODcsMTIgKzI4NywxMiBAQAogCQlpZiAoIXJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pCiAJCQljb250aW51ZTsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlyID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pOworCQlyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pOwogCQl3aGlsZSAocikgewogCQkJaWYgKGRldl9uZXQoci0+dS5kc3QuZGV2KSA9PSBzZXFfZmlsZV9uZXQoc2VxKSAmJgogCQkJICAgIHItPnJ0X2dlbmlkID09IHN0LT5nZW5pZCkKIAkJCQlyZXR1cm4gcjsKLQkJCXIgPSByY3VfZGVyZWZlcmVuY2Uoci0+dS5kc3QucnRfbmV4dCk7CisJCQlyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHItPnUuZHN0LnJ0X25leHQpOwogCQl9CiAJCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCX0KQEAgLTMxNCw3ICszMTQsNyBAQAogCQlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJCXIgPSBydF9oYXNoX3RhYmxlW3N0LT5idWNrZXRdLmNoYWluOwogCX0KLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHIpOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfYmgocik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpydF9jYWNoZV9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKQEAgLTI2ODksOCArMjY4OSw4IEBACiAJaGFzaCA9IHJ0X2hhc2goZmxwLT5mbDRfZHN0LCBmbHAtPmZsNF9zcmMsIGZscC0+b2lmLCBydF9nZW5pZChuZXQpKTsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmb3IgKHJ0aCA9IHJjdV9kZXJlZmVyZW5jZShydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnRoOwotCQlydGggPSByY3VfZGVyZWZlcmVuY2UocnRoLT51LmRzdC5ydF9uZXh0KSkgeworCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7CisJCXJ0aCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydGgtPnUuZHN0LnJ0X25leHQpKSB7CiAJCWlmIChydGgtPmZsLmZsNF9kc3QgPT0gZmxwLT5mbDRfZHN0ICYmCiAJCSAgICBydGgtPmZsLmZsNF9zcmMgPT0gZmxwLT5mbDRfc3JjICYmCiAJCSAgICBydGgtPmZsLmlpZiA9PSAwICYmCkBAIC0zMDA4LDggKzMwMDgsOCBAQAogCQlpZiAoIXJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pCiAJCQljb250aW51ZTsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IgKHJ0ID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pLCBpZHggPSAwOyBydDsKLQkJICAgICBydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QucnRfbmV4dCksIGlkeCsrKSB7CisJCWZvciAocnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnRfaGFzaF90YWJsZVtoXS5jaGFpbiksIGlkeCA9IDA7IHJ0OworCQkgICAgIHJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0LT51LmRzdC5ydF9uZXh0KSwgaWR4KyspIHsKIAkJCWlmICghbmV0X2VxKGRldl9uZXQocnQtPnUuZHN0LmRldiksIG5ldCkgfHwgaWR4IDwgc19pZHgpCiAJCQkJY29udGludWU7CiAJCQlpZiAocnRfaXNfZXhwaXJlZChydCkpCmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCBmMTI2ZDE4Li45Mzk0NzFlIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCXN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CisJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrLT5za19maWx0ZXIpOwogCWlmIChmaWx0ZXIgIT0gTlVMTCkKIAkJcmVzID0gc2tfcnVuX2ZpbHRlcihza2IsIGZpbHRlci0+aW5zbnMsIGZpbHRlci0+bGVuKTsKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fYWxnby5jIGIvbmV0L3hmcm0veGZybV9hbGdvLmMKaW5kZXggNzQzYzAxMy4uOGI0ZDZlMyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9hbGdvLmMKKysrIGIvbmV0L3hmcm0veGZybV9hbGdvLmMKQEAgLTEyNSw2ICsxMjUsMjIgQEAKIAkJLnNhZGJfYWxnX21heGJpdHMgPSAyNTYKIAl9CiB9LAoreworCS5uYW1lID0gInJmYzQ1NDMoZ2NtKGFlcykpIiwKKworCS51aW5mbyA9IHsKKwkJLmFlYWQgPSB7CisJCQkuaWN2X3RydW5jYml0cyA9IDEyOCwKKwkJfQorCX0sCisKKwkuZGVzYyA9IHsKKwkJLnNhZGJfYWxnX2lkID0gU0FEQl9YX0VBTEdfTlVMTF9BRVNfR01BQywKKwkJLnNhZGJfYWxnX2l2bGVuID0gOCwKKwkJLnNhZGJfYWxnX21pbmJpdHMgPSAxMjgsCisJCS5zYWRiX2FsZ19tYXhiaXRzID0gMjU2CisJfQorfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgYWFsZ19saXN0W10gPSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzLy5naXRpZ25vcmUgYi9zY3JpcHRzLy5naXRpZ25vcmUKaW5kZXggNTJjYWI0NmEuLmM1ZDVkYjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzLy5naXRpZ25vcmUKQEAgLTYsNSArNiw0IEBACiBwbm10b2xvZ28KIGJpbjJjCiB1bmlmZGVmCi1iaW5vZmZzZXQKIGloZXgyZncKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmlub2Zmc2V0LmMgYi9zY3JpcHRzL2Jpbm9mZnNldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTJlMzliLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMvYmlub2Zmc2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogYmlub2Zmc2V0LmMKLSAqIChDKSAyMDAyIFJhbmR5IER1bmxhcCA8cmR1bmxhcEB4ZW5vdGltZS5uZXQ+Ci0KLSMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0jIGJpbm9mZnNldC5jOgotIyAtIHNlYXJjaGVzIGEgKGJpbmFyeSkgZmlsZSBmb3IgYSBzcGVjaWZpZWQgKGJpbmFyeSkgcGF0dGVybgotIyAtIHJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbG9jYXRlZCBwYXR0ZXJuIG9yIH4wIGlmIG5vdCBmb3VuZAotIyAtIGV4aXRzIHdpdGggZXhpdCBzdGF0dXMgMCBub3JtYWxseSBvciBub24tMCBpZiBwYXR0ZXJuIGlzIG5vdCBmb3VuZAotIyAgIG9yIGFueSBvdGhlciBlcnJvciBvY2N1cnMuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLSNkZWZpbmUgVkVSU0lPTgkJIjAuMSIKLSNkZWZpbmUgQlVGX1NJWkUJKDE2ICogMTAyNCkKLSNkZWZpbmUgUEFUX1NJWkUJMTAwCi0KLWNoYXIJCSpwcm9nbmFtZTsKLWNoYXIJCSppbnB1dG5hbWU7Ci1pbnQJCWlucHV0ZmQ7Ci11bnNpZ25lZCBpbnQJYml4OwkJCS8qIGJ1ZiBpbmRleCAqLwotdW5zaWduZWQgY2hhcglwYXR0ZXJucyBbUEFUX1NJWkVdID0gezB9OyAvKiBieXRlLXNpemVkIHBhdHRlcm4gYXJyYXkgKi8KLWludAkJcGF0X2xlbjsJCS8qIGFjdHVhbCBudW1iZXIgb2YgcGF0dGVybiBieXRlcyAqLwotdW5zaWduZWQgY2hhcgkqbWFkcjsJCQkvKiBtbWFwIGFkZHJlc3MgKi8KLXNpemVfdAkJZmlsZXNpemU7Ci1pbnQJCW51bV9tYXRjaGVzID0gMDsKLW9mZl90CQlmaXJzdGxvYyA9IDA7Ci0KLXZvaWQgdXNhZ2UgKHZvaWQpCi17Ci0JZnByaW50ZiAoc3RkZXJyLCAiJXMgdmVyLiAlc1xuIiwgcHJvZ25hbWUsIFZFUlNJT04pOwotCWZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAgJXMgZmlsZW5hbWUgcGF0dGVybl9ieXRlc1xuIiwKLQkJCXByb2duYW1lKTsKLQlmcHJpbnRmIChzdGRlcnIsICIgICAgICAgIFtwcmludHMgbG9jYXRpb24gb2YgcGF0dGVybl9ieXRlcyBpbiBmaWxlXVxuIik7Ci0JZXhpdCAoMSk7Ci19Ci0KLXZvaWQgZ2V0X3BhdHRlcm4gKGludCBwYXRfY291bnQsIGNoYXIgKnBhdHMgW10pCi17Ci0JaW50IGl4LCBlcnIsIHRtcDsKLQotI2lmZGVmIERFQlVHCi0JZnByaW50ZiAoc3RkZXJyLCJnZXRfcGF0dGVybjogY291bnQgPSAlZFxuIiwgcGF0X2NvdW50KTsKLQlmb3IgKGl4ID0gMDsgaXggPCBwYXRfY291bnQ7IGl4KyspCi0JCWZwcmludGYgKHN0ZGVyciwgIiAgcGF0ICMgJWQ6ICBbJXNdXG4iLCBpeCwgcGF0c1tpeF0pOwotI2VuZGlmCi0KLQlmb3IgKGl4ID0gMDsgaXggPCBwYXRfY291bnQ7IGl4KyspIHsKLQkJdG1wID0gMDsKLQkJZXJyID0gc3NjYW5mIChwYXRzW2l4XSwgIiU1aSIsICZ0bXApOwotCQlpZiAoZXJyICE9IDEgfHwgdG1wID4gMHhmZikgewotCQkJZnByaW50ZiAoc3RkZXJyLCAicGF0dGVybiBvciB2YWx1ZSBlcnJvciBpbiBwYXR0ZXJuICMgJWQgWyVzXVxuIiwKLQkJCQkJaXgsIHBhdHNbaXhdKTsKLQkJCXVzYWdlICgpOwotCQl9Ci0JCXBhdHRlcm5zIFtpeF0gPSB0bXA7Ci0JfQotCXBhdF9sZW4gPSBwYXRfY291bnQ7Ci19Ci0KLXZvaWQgc2VhcmNoX3BhdHRlcm4gKHZvaWQpCi17Ci0JZm9yIChiaXggPSAwOyBiaXggPCBmaWxlc2l6ZTsgYml4KyspIHsKLQkJaWYgKG1hZHJbYml4XSA9PSBwYXR0ZXJuc1swXSkgewotCQkJaWYgKG1lbWNtcCAoJm1hZHJbYml4XSwgcGF0dGVybnMsIHBhdF9sZW4pID09IDApIHsKLQkJCQlpZiAobnVtX21hdGNoZXMgPT0gMCkKLQkJCQkJZmlyc3Rsb2MgPSBiaXg7Ci0JCQkJbnVtX21hdGNoZXMrKzsKLQkJCX0KLQkJfQotCX0KLX0KLQotI2lmZGVmIE5PVERFRgotc2l6ZV90IGdldF9maWxlc2l6ZSAoaW50IGZkKQotewotCW9mZl90IGVuZF9vZmYgPSBsc2VlayAoZmQsIDAsIFNFRUtfRU5EKTsKLQlsc2VlayAoZmQsIDAsIFNFRUtfU0VUKTsKLQlyZXR1cm4gKHNpemVfdCkgZW5kX29mZjsKLX0KLSNlbmRpZgotCi1zaXplX3QgZ2V0X2ZpbGVzaXplIChpbnQgZmQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc3RhdCBzdGF0OwotCi0JZXJyID0gZnN0YXQgKGZkLCAmc3RhdCk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiZmlsZXNpemU6ICVsZFxuIiwgZXJyIDwgMCA/IChsb25nKWVyciA6IHN0YXQuc3Rfc2l6ZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIChzaXplX3QpIHN0YXQuc3Rfc2l6ZTsKLX0KLQotaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2IFtdKQotewotCXByb2duYW1lID0gYXJndlswXTsKLQotCWlmIChhcmdjIDwgMykKLQkJdXNhZ2UgKCk7Ci0KLQlnZXRfcGF0dGVybiAoYXJnYyAtIDIsIGFyZ3YgKyAyKTsKLQotCWlucHV0bmFtZSA9IGFyZ3ZbMV07Ci0KLQlpbnB1dGZkID0gb3BlbiAoaW5wdXRuYW1lLCBPX1JET05MWSk7Ci0JaWYgKGlucHV0ZmQgPT0gLTEpIHsKLQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IGNhbm5vdCBvcGVuICclcydcbiIsCi0JCQkJcHJvZ25hbWUsIGlucHV0bmFtZSk7Ci0JCWV4aXQgKDMpOwotCX0KLQotCWZpbGVzaXplID0gZ2V0X2ZpbGVzaXplIChpbnB1dGZkKTsKLQotCW1hZHIgPSBtbWFwICgwLCBmaWxlc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgaW5wdXRmZCwgMCk7Ci0JaWYgKG1hZHIgPT0gTUFQX0ZBSUxFRCkgewotCQlmcHJpbnRmIChzdGRlcnIsICJtbWFwIGVycm9yID0gJWRcbiIsIGVycm5vKTsKLQkJY2xvc2UgKGlucHV0ZmQpOwotCQlleGl0ICg0KTsKLQl9Ci0KLQlzZWFyY2hfcGF0dGVybiAoKTsKLQotCWlmIChtdW5tYXAgKG1hZHIsIGZpbGVzaXplKSkKLQkJZnByaW50ZiAoc3RkZXJyLCAibXVubWFwIGVycm9yID0gJWRcbiIsIGVycm5vKTsKLQotCWlmIChjbG9zZSAoaW5wdXRmZCkpCi0JCWZwcmludGYgKHN0ZGVyciwgIiVzOiBlcnJvciAlZCBjbG9zaW5nICclcydcbiIsCi0JCQkJcHJvZ25hbWUsIGVycm5vLCBpbnB1dG5hbWUpOwotCi0JZnByaW50ZiAoc3RkZXJyLCAibnVtYmVyIG9mIHBhdHRlcm4gbWF0Y2hlcyA9ICVkXG4iLCBudW1fbWF0Y2hlcyk7Ci0JaWYgKG51bV9tYXRjaGVzID09IDApCi0JCWZpcnN0bG9jID0gfjA7Ci0JcHJpbnRmICgiJWxkXG4iLCBmaXJzdGxvYyk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiJWxkXG4iLCBmaXJzdGxvYyk7Ci0KLQlleGl0IChudW1fbWF0Y2hlcyA/IDAgOiAyKTsKLX0KLQotLyogZW5kIGJpbm9mZnNldC5jICovCmRpZmYgLS1naXQgYS9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcgYi9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcKaW5kZXggZGUyMzNmZi4uMzdmMzBkMyAxMDA3NTUKLS0tIGEvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnCisrKyBiL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZwpAQCAtMSw5MiArMSw1MyBAQAogIyEvYmluL3NoCi0jIGV4dHJhY3RzIC5jb25maWcgaW5mbyBmcm9tIGEgW2JdekltYWdlIGZpbGUKLSMgdXNlczogYmlub2Zmc2V0IChuZXcpLCBkZCwgemNhdCwgc3RyaW5ncywgZ3JlcAotIyAkYXJnMSBpcyBbYl16SW1hZ2UgZmlsZW5hbWUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBleHRyYWN0LWlrY29uZmlnIC0gRXh0cmFjdCB0aGUgLmNvbmZpZyBmaWxlIGZyb20gYSBrZXJuZWwgaW1hZ2UKKyMKKyMgVGhpcyB3aWxsIG9ubHkgd29yayB3aGVuIHRoZSBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggQ09ORklHX0lLQ09ORklHLgorIworIyBUaGUgb2JzY3VyZSB1c2Ugb2YgdGhlICJ0ciIgZmlsdGVyIGlzIHRvIHdvcmsgYXJvdW5kIG9sZGVyIHZlcnNpb25zIG9mCisjICJncmVwIiB0aGF0IHJlcG9ydCB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGxpbmUgaW5zdGVhZCBvZiB0aGUgcGF0dGVybi4KKyMKKyMgKGMpIDIwMDksIERpY2sgU3RyZWVmbGFuZCA8ZGlja0BzdHJlZWZsYW5kLm5ldD4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1iaW5vZmZzZXQ9Ii4vc2NyaXB0cy9iaW5vZmZzZXQiCi10ZXN0IC1lICRiaW5vZmZzZXQgfHwgY2MgLW8gJGJpbm9mZnNldCAuL3NjcmlwdHMvYmlub2Zmc2V0LmMgfHwgZXhpdCAxCitnejE9J1wwMzdcMjEzXDAxMCcKK2d6Mj0nMDEnCitjZjE9J0lLQ0ZHX1NUXDAzN1wyMTNcMDEwJworY2YyPScwMTIzNDU2Nzg5JwogCi1JS0NGR19TVD0iMHg0OSAweDRiIDB4NDMgMHg0NiAweDQ3IDB4NWYgMHg1MyAweDU0IgotSUtDRkdfRUQ9IjB4NDkgMHg0YiAweDQzIDB4NDYgMHg0NyAweDVmIDB4NDUgMHg0NCIKLWR1bXBfY29uZmlnKCkgewotICAgIGZpbGU9IiQxIgotCi0gICAgc3RhcnQ9YCRiaW5vZmZzZXQgJGZpbGUgJElLQ0ZHX1NUIDI+L2Rldi9udWxsYAotICAgIFsgIiQ/IiAhPSAiMCIgXSAmJiBzdGFydD0iLTEiCi0gICAgaWYgWyAiJHN0YXJ0IiAtZXEgIi0xIiBdOyB0aGVuCi0JcmV0dXJuCi0gICAgZmkKLSAgICBlbmQ9YCRiaW5vZmZzZXQgJGZpbGUgJElLQ0ZHX0VEIDI+L2Rldi9udWxsYAotICAgIFsgIiQ/IiAhPSAiMCIgXSAmJiBlbmQ9Ii0xIgotICAgIGlmIFsgIiRlbmQiIC1lcSAiLTEiIF07IHRoZW4KLQlyZXR1cm4KLSAgICBmaQotCi0gICAgc3RhcnQ9YGV4cHIgJHN0YXJ0ICsgOGAKLSAgICBzaXplPWBleHByICRlbmQgLSAkc3RhcnRgCi0KLSAgICBkZCBpZj0iJGZpbGUiIGlicz0xIHNraXA9IiRzdGFydCIgY291bnQ9IiRzaXplIiAyPi9kZXYvbnVsbCB8IHpjYXQKLQotICAgIGNsZWFuX3VwCi0gICAgZXhpdCAwCi19Ci0KLQotdXNhZ2UoKQorZHVtcF9jb25maWcoKQogewotCWVjaG8gIiAgdXNhZ2U6IGV4dHJhY3QtaWtjb25maWcgW2JdekltYWdlX2ZpbGVuYW1lIgotfQotCi1jbGVhbl91cCgpCi17Ci0JaWYgWyAiJFRNUEZJTEUiICE9ICIiIF07IHRoZW4KLQkJcm0gLWYgJFRNUEZJTEUKKwlpZglwb3M9YHRyICIkY2YxXG4kY2YyIiAiXG4kY2YyPSIgPCAiJDEiIHwgZ3JlcCAtYWJvICJeJGNmMiJgCisJdGhlbgorCQlwb3M9JHtwb3MlJToqfQorCQl0YWlsIC1jKyQoKCRwb3MrOCkpICIkMSIgfCB6Y2F0IC1xCisJCWV4aXQgMAogCWZpCiB9CiAKLWlmIFsgJCMgLWx0IDEgXQorIyBDaGVjayBpbnZvY2F0aW9uOgorbWU9JHswIyMqL30KK2ltZz0kMQoraWYJWyAkIyAtbmUgMSAtbyAhIC1zICIkaW1nIiBdCiB0aGVuCi0JdXNhZ2UKLQlleGl0IDEKKwllY2hvICJVc2FnZTogJG1lIDxrZXJuZWwtaW1hZ2U+IiA+JjIKKwlleGl0IDIKIGZpCiAKLVRNUEZJTEU9YG1rdGVtcCAtdCBpa2NvbmZpZy1YWFhYWFhgIHx8IGV4aXQgMQotaW1hZ2U9IiQxIgorIyBJbml0aWFsIGF0dGVtcHQgZm9yIHVuY29tcHJlc3NlZCBpbWFnZXMgb3Igb2JqZWN0czoKK2R1bXBfY29uZmlnICIkaW1nIgogCi0jIHZtbGludXg6IEF0dGVtcHQgdG8gZHVtcCB0aGUgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBmaWxlIGRpcmVjdGx5Ci1kdW1wX2NvbmZpZyAiJGltYWdlIgorIyBUaGF0IGRpZG4ndCB3b3JrLCBzbyBkZWNvbXByZXNzIGFuZCB0cnkgYWdhaW46Cit0bXA9L3RtcC9pa2NvbmZpZyQkCit0cmFwICJybSAtZiAkdG1wIiAwCitmb3IJcG9zIGluIGB0ciAiJGd6MVxuJGd6MiIgIlxuJGd6Mj0iIDwgIiRpbWciIHwgZ3JlcCAtYWJvICJeJGd6MiJgCitkbworCXBvcz0ke3BvcyUlOip9CisJdGFpbCAtYyskcG9zICIkaW1nIiB8IHpjYXQgMj4gL2Rldi9udWxsID4gJHRtcAorCWR1bXBfY29uZmlnICR0bXAKK2RvbmUKIAotR1pIRFIxPSIweDFmIDB4OGIgMHgwOCAweDAwIgotR1pIRFIyPSIweDFmIDB4OGIgMHgwOCAweDA4IgotCi1FTEZIRFI9IjB4N2YgMHg0NSAweDRjIDB4NDYiCi0KLSMgdm1saW51eC5nejogQ2hlY2sgZm9yIGEgY29tcHJlc3NlZCBpbWFnZXMKLW9mZj1gJGJpbm9mZnNldCAiJGltYWdlIiAkR1pIRFIxIDI+L2Rldi9udWxsYAotWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCi1pZiBbICIkb2ZmIiAtZXEgIi0xIiBdOyB0aGVuCi0Jb2ZmPWAkYmlub2Zmc2V0ICIkaW1hZ2UiICRHWkhEUjIgMj4vZGV2L251bGxgCi0JWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCi1maQotaWYgWyAiJG9mZiIgLWVxICIwIiBdOyB0aGVuCi0JemNhdCA8IiRpbWFnZSIgPiIkVE1QRklMRSIKLQlkdW1wX2NvbmZpZyAiJFRNUEZJTEUiCi1lbGlmIFsgIiRvZmYiIC1uZSAiLTEiIF07IHRoZW4KLQkoZGQgaWJzPSIkb2ZmIiBza2lwPTEgY291bnQ9MCAmJiBkZCBicz01MTJrKSA8IiRpbWFnZSIgMj4vZGV2L251bGwgfCBcCi0JCXpjYXQgPiIkVE1QRklMRSIKLQlkdW1wX2NvbmZpZyAiJFRNUEZJTEUiCi0KLSMgY2hlY2sgaWYgdGhpcyBpcyBzaW1wbHkgYW4gRUxGIGZpbGUKLWVsc2UKLQlvZmY9YCRiaW5vZmZzZXQgIiRpbWFnZSIgJEVMRkhEUiAyPi9kZXYvbnVsbGAKLQlbICIkPyIgIT0gIjAiIF0gJiYgb2ZmPSItMSIKLQlpZiBbICIkb2ZmIiAtZXEgIjAiIF07IHRoZW4KLQkJZHVtcF9jb25maWcgIiRpbWFnZSIKLQlmaQotZmkKLQotZWNobyAiRVJST1I6IFVuYWJsZSB0byBleHRyYWN0IGtlcm5lbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIKLWVjaG8gIiAgICAgICBUaGlzIGtlcm5lbCBpbWFnZSBtYXkgbm90IGhhdmUgdGhlIGNvbmZpZyBpbmZvLiIKLQotY2xlYW5fdXAKKyMgQmFpbCBvdXQ6CitlY2hvICIkbWU6IENhbm5vdCBmaW5kIGtlcm5lbCBjb25maWcuIiA+JjIKIGV4aXQgMQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCmluZGV4IDk5OWU4YTcuLjE4NmM0NjYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKQEAgLTMwLDggKzMwLDE3IEBACiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvZ2VuZXJhdGVkCiAJJDwgLXMgJChLY29uZmlnKQogCisjIGlmIG5vIHBhdGggaXMgZ2l2ZW4sIHRoZW4gdXNlIHNyYyBkaXJlY3RvcnkgdG8gZmluZCBmaWxlCitpZmRlZiBMU01PRAorTFNNT0RfRiA6PSAkKExTTU9EKQoraWZlcSAoJChmaW5kc3RyaW5nIC8sJChMU01PRCkpLCkKKyAgTFNNT0RfRiA6PSAkKG9ianRyZWUpLyQoTFNNT0QpCitlbmRpZgorZW5kaWYKKwogbG9jYWxtb2Rjb25maWc6ICQob2JqKS9zdHJlYW1saW5lX2NvbmZpZy5wbCAkKG9iaikvY29uZgotCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSA+IC50bXAuY29uZmlnCisJJChRKW1rZGlyIC1wIGluY2x1ZGUvZ2VuZXJhdGVkCisJJChRKXBlcmwgJDwgJChzcmN0cmVlKSAkKEtjb25maWcpICQoTFNNT0RfRikgPiAudG1wLmNvbmZpZwogCSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJXAogCQkJY21wIC1zIC50bXAuY29uZmlnIC5jb25maWcgfHwJCVwKIAkJCShtdiAtZiAuY29uZmlnIC5jb25maWcub2xkLjE7CQlcCkBAIC00NSw3ICs1NCw4IEBACiAJJChRKXJtIC1mIC50bXAuY29uZmlnCiAKIGxvY2FseWVzY29uZmlnOiAkKG9iaikvc3RyZWFtbGluZV9jb25maWcucGwgJChvYmopL2NvbmYKLQkkKFEpcGVybCAkPCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZworCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAorCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSAkKExTTU9EX0YpID4gLnRtcC5jb25maWcKIAkkKFEpc2VkIC1pIHMvPW0vPXkvIC50bXAuY29uZmlnCiAJJChRKWlmIFsgLWYgLmNvbmZpZyBdOyB0aGVuIAkJCQlcCiAJCQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsIGIvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCmluZGV4IDBkODAwODIuLmFmYmQ1NGEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbAorKysgYi9zY3JpcHRzL2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwKQEAgLTExMyw2ICsxMTMsNyBAQAogIyBHZXQgdGhlIGJ1aWxkIHNvdXJjZSBhbmQgdG9wIGxldmVsIEtjb25maWcgZmlsZSAocGFzc2VkIGluKQogbXkgJGtzb3VyY2UgPSAkQVJHVlswXTsKIG15ICRrY29uZmlnID0gJEFSR1ZbMV07CitteSAkbHNtb2RfZmlsZSA9ICRBUkdWWzJdOwogCiBteSBAbWFrZWZpbGVzID0gYGZpbmQgJGtzb3VyY2UgLW5hbWUgTWFrZWZpbGVgOwogbXkgJWRlcGVuZHM7CkBAIC0xMjEsNiArMTIyLDggQEAKIG15ICVvYmplY3RzOwogbXkgJHZhcjsKIG15ICRjb250ID0gMDsKK215ICRpZmxldmVsID0gMDsKK215IEBpZmRlcHM7CiAKICMgcHJldmVudCByZWN1cnNpb24KIG15ICVyZWFkX2tjb25maWdzOwpAQCAtMTQ2LDYgKzE0OSwxNSBAQAogCSAgICAkc3RhdGUgPSAiTkVXIjsKIAkgICAgJGNvbmZpZyA9ICQxOwogCisJICAgIGZvciAobXkgJGkgPSAwOyAkaSA8ICRpZmxldmVsOyAkaSsrKSB7CisJCWlmICgkaSkgeworCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0gIiAiIC4gJGlmZGVwc1skaV07CisJCX0gZWxzZSB7CisJCSAgICAkZGVwZW5kc3skY29uZmlnfSA9ICRpZmRlcHNbJGldOworCQl9CisJCSRzdGF0ZSA9ICJERVAiOworCSAgICB9CisKIAkjIGNvbGxlY3QgdGhlIGRlcGVuZHMgZm9yIHRoZSBjb25maWcKIAl9IGVsc2lmICgkc3RhdGUgZXEgIk5FVyIgJiYgL15ccypkZXBlbmRzXHMrb25ccysoLiopJC8pIHsKIAkgICAgJHN0YXRlID0gIkRFUCI7CkBAIC0xNjYsNiArMTc4LDIxIEBACiAJICAgICMgbm90ZSBpZiB0aGUgY29uZmlnIGhhcyBhIHByb21wdAogCSAgICAkcHJvbXB0eyRjb25maWd9ID0gMTsKIAorCSMgQ2hlY2sgZm9yIGlmIHN0YXRlbWVudHMKKwl9IGVsc2lmICgvXmlmXHMrKC4qXFMpXHMqJC8pIHsKKwkgICAgbXkgJGRlcHMgPSAkMTsKKwkgICAgIyByZW1vdmUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgbm9uIHRleHQKKwkgICAgJGRlcHMgPX4gcy9eW15hLXpBLVowLTlfXSovLzsKKwkgICAgJGRlcHMgPX4gcy9bXmEtekEtWjAtOV9dKiQvLzsKKworCSAgICBteSBAZGVwcyA9IHNwbGl0IC9bXmEtekEtWjAtOV9dKy8sICRkZXBzOworCisJICAgICRpZmRlcHNbJGlmbGV2ZWwrK10gPSBqb2luICc6JywgQGRlcHM7CisKKwl9IGVsc2lmICgvXmVuZGlmLykgeworCisJICAgICRpZmxldmVsLS0gaWYgKCRpZmxldmVsKTsKKwogCSMgc3RvcCBvbiAiaGVscCIKIAl9IGVsc2lmICgvXlxzKmhlbHBccyokLykgewogCSAgICAkc3RhdGUgPSAiTk9ORSI7CkBAIC0yMzcsOCArMjY0LDM2IEBACiAKIG15ICVtb2R1bGVzOwogCi0jIHNlZSB3aGF0IG1vZHVsZXMgYXJlIGxvYWRlZCBvbiB0aGlzIHN5c3RlbQotb3BlbihMSU4sIi9zYmluL2xzbW9kfCIpIHx8IGRpZSAiQ2FudCBsc21vZCI7CitpZiAoZGVmaW5lZCgkbHNtb2RfZmlsZSkpIHsKKyAgICBpZiAoICEgLWYgJGxzbW9kX2ZpbGUpIHsKKwlkaWUgIiRsc21vZF9maWxlIG5vdCBmb3VuZCI7CisgICAgfQorICAgIGlmICggLXggJGxzbW9kX2ZpbGUpIHsKKwkjIHRoZSBmaWxlIGlzIGV4ZWN1dGFibGUsIHJ1biBpdAorCW9wZW4oTElOLCAiJGxzbW9kX2ZpbGV8Iik7CisgICAgfSBlbHNlIHsKKwkjIEp1c3QgcmVhZCB0aGUgY29udGVudHMKKwlvcGVuKExJTiwgIiRsc21vZF9maWxlIik7CisgICAgfQorfSBlbHNlIHsKKworICAgICMgc2VlIHdoYXQgbW9kdWxlcyBhcmUgbG9hZGVkIG9uIHRoaXMgc3lzdGVtCisgICAgbXkgJGxzbW9kOworCisgICAgZm9yZWFjaCAkZGlyICggKCIvc2JpbiIsICIvYmluIiwgIi91c3Ivc2JpbiIsICIvdXNyL2JpbiIpICkgeworCWlmICggLXggIiRkaXIvbHNtb2QiICkgeworCSAgICAkbHNtb2QgPSAiJGRpci9sc21vZCI7CisJICAgIGxhc3Q7CisJfQorfQorICAgIGlmICghZGVmaW5lZCgkbHNtb2QpKSB7CisJIyB0cnkganVzdCB0aGUgcGF0aAorCSRsc21vZCA9ICJsc21vZCI7CisgICAgfQorCisgICAgb3BlbihMSU4sIiRsc21vZHwiKSB8fCBkaWUgIkNhbiBub3QgY2FsbCBsc21vZCB3aXRoICRsc21vZCI7Cit9CisKIHdoaWxlICg8TElOPikgewogCW5leHQgaWYgKC9eTW9kdWxlLyk7ICAjIFNraXAgdGhlIGZpcnN0IGxpbmUuCiAJaWYgKC9eKFxTKykvKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tlcm5lbC1kb2MgYi9zY3JpcHRzL2tlcm5lbC1kb2MKaW5kZXggMjQxMzEwZS4uMjA4YWQzYiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9rZXJuZWwtZG9jCisrKyBiL3NjcmlwdHMva2VybmVsLWRvYwpAQCAtMTMsOCArMTMsNiBAQAogIyMgVGhpcyBzb2Z0d2FyZSBmYWxscyB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICAgICAjIwogIyMgUGxlYXNlIHJlYWQgdGhlIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiAgICAgICAgICAgICAjIwogCi0jIHcuby4gMDMtMTEtMjAwMDogYWRkZWQgdGhlICctZmlsZWxpc3QnIG9wdGlvbi4KLQogIyAxOC8wMS8yMDAxIC0gCUNsZWFudXBzCiAjIAkJRnVuY3Rpb25zIHByb3RvdHlwZWQgYXMgZm9vKHZvaWQpIHNhbWUgYXMgZm9vKCkKICMgCQlTdG9wIGV2YWwnaW5nIHdoZXJlIHdlIGRvbid0IG5lZWQgdG8uCkBAIC0yNDUsNyArMjQzLDcgQEAKICMgY291bGQgY2F1c2UgInVzZSBvZiB1bmRlZmluZWQgdmFsdWUiIG9yIG90aGVyIGJ1Z3MuCiBteSAoJGZ1bmN0aW9uLCAlZnVuY3Rpb25fdGFibGUsICVwYXJhbWV0ZXJ0eXBlcywgJGRlY2xhcmF0aW9uX3B1cnBvc2UpOwogbXkgKCR0eXBlLCAkZGVjbGFyYXRpb25fbmFtZSwgJHJldHVybl90eXBlKTsKLW15ICgkbmV3c2VjdGlvbiwgJG5ld2NvbnRlbnRzLCAkcHJvdG90eXBlLCAkZmlsZWxpc3QsICRicmNvdW50LCAlc291cmNlX21hcCk7CitteSAoJG5ld3NlY3Rpb24sICRuZXdjb250ZW50cywgJHByb3RvdHlwZSwgJGJyY291bnQsICVzb3VyY2VfbWFwKTsKIAogaWYgKGRlZmluZWQoJEVOVnsnS0JVSUxEX1ZFUkJPU0UnfSkpIHsKIAkkdmVyYm9zZSA9ICIkRU5WeydLQlVJTERfVkVSQk9TRSd9IjsKQEAgLTMzOCw4ICszMzYsNiBAQAogCSR2ZXJib3NlID0gMTsKICAgICB9IGVsc2lmICgoJGNtZCBlcSAiLWgiKSB8fCAoJGNtZCBlcSAiLS1oZWxwIikpIHsKIAl1c2FnZSgpOwotICAgIH0gZWxzaWYgKCRjbWQgZXEgJy1maWxlbGlzdCcpIHsKLQkgICAgJGZpbGVsaXN0ID0gc2hpZnQgQEFSR1Y7CiAgICAgfSBlbHNpZiAoJGNtZCBlcSAnLW5vLWRvYy1zZWN0aW9ucycpIHsKIAkgICAgJG5vX2RvY19zZWN0aW9ucyA9IDE7CiAgICAgfQpAQCAtMTgxMSwxNCArMTgwNyw2IEBACiAJY2xvc2UoU09VUkNFX01BUCk7CiB9CiAKLWlmICgkZmlsZWxpc3QpIHsKLQlvcGVuKEZMSVNULCI8JGZpbGVsaXN0Iikgb3IgZGllICJDYW4ndCBvcGVuIGZpbGUgbGlzdCAkZmlsZWxpc3QiOwotCXdoaWxlKDxGTElTVD4pIHsKLQkJY2hvcDsKLQkJcHJvY2Vzc19maWxlKCRfKTsKLQl9Ci19Ci0KIGZvcmVhY2ggKEBBUkdWKSB7CiAgICAgY2hvbXA7CiAgICAgcHJvY2Vzc19maWxlKCRfKTsKQEAgLTIwMjMsNiArMjAxMSw4IEBACiAJcmV0dXJuOwogICAgIH0KIAorICAgICQuID0gMTsKKwogICAgICRzZWN0aW9uX2NvdW50ZXIgPSAwOwogICAgIHdoaWxlICg8SU4+KSB7CiAJaWYgKCRzdGF0ZSA9PSAwKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCmluZGV4IGVhNmY2ZTMuLmYzYzljMGEgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCkBAIC0xMzYsMTMgKzEzNiwxNCBAQAogICAgICAiLnRleHQudW5saWtlbHkiID0+IDEsCiApOwogCi0kb2JqZHVtcCA9ICJvYmpkdW1wIiBpZiAoKGxlbmd0aCAkb2JqZHVtcCkgPT0gMCk7Ci0kb2JqY29weSA9ICJvYmpjb3B5IiBpZiAoKGxlbmd0aCAkb2JqY29weSkgPT0gMCk7Ci0kY2MgPSAiZ2NjIiBpZiAoKGxlbmd0aCAkY2MpID09IDApOwotJGxkID0gImxkIiBpZiAoKGxlbmd0aCAkbGQpID09IDApOwotJG5tID0gIm5tIiBpZiAoKGxlbmd0aCAkbm0pID09IDApOwotJHJtID0gInJtIiBpZiAoKGxlbmd0aCAkcm0pID09IDApOwotJG12ID0gIm12IiBpZiAoKGxlbmd0aCAkbXYpID09IDApOworIyBOb3RlOiB3ZSBhcmUgbmljZSB0byBDLXByb2dyYW1tZXJzIGhlcmUsIHRodXMgd2Ugc2tpcCB0aGUgJ3x8PSctaWRpb20uCiskb2JqZHVtcCA9ICdvYmpkdW1wJyBpZiAoISRvYmpkdW1wKTsKKyRvYmpjb3B5ID0gJ29iamNvcHknIGlmICghJG9iamNvcHkpOworJGNjID0gJ2djYycgaWYgKCEkY2MpOworJGxkID0gJ2xkJyBpZiAoISRsZCk7Ciskbm0gPSAnbm0nIGlmICghJG5tKTsKKyRybSA9ICdybScgaWYgKCEkcm0pOworJG12ID0gJ212JyBpZiAoISRtdik7CiAKICNwcmludCBTVERFUlIgInJ1bm5pbmc6ICRQICckYXJjaCcgJyRvYmpkdW1wJyAnJG9iamNvcHknICckY2MnICckbGQnICIgLgogIyAgICAiJyRubScgJyRybScgJyRtdicgJyRpbnB1dGZpbGUnXG4iOwpAQCAtNDMyLDE0ICs0MzMsMTQgQEAKIAogICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgbWNvdW50IGNhbGxlciBvZmZzZXRzIGFuZCBwcmludCBhIHJlZmVyZW5jZQogICAgICMgdG8gdGhlIGNhbGxlciBiYXNlZCBmcm9tIHRoZSByZWZfZnVuYy4KLSAgICBmb3IgKG15ICRpPTA7ICRpIDw9ICQjb2Zmc2V0czsgJGkrKykgewotCWlmICghJG9wZW5lZCkgewotCSAgICBvcGVuKEZJTEUsICI+JG1jb3VudF9zIikgfHwgZGllICJjYW4ndCBjcmVhdGUgJG1jb3VudF9zXG4iOwotCSAgICAkb3BlbmVkID0gMTsKLQkgICAgcHJpbnQgRklMRSAiXHQuc2VjdGlvbiAkbWNvdW50X3NlY3Rpb24sXCJhXCIsJHNlY3Rpb25fdHlwZVxuIjsKLQkgICAgcHJpbnQgRklMRSAiXHQuYWxpZ24gJGFsaWdubWVudFxuIiBpZiAoZGVmaW5lZCgkYWxpZ25tZW50KSk7Ci0JfQotCXByaW50ZiBGSUxFICJcdCVzICVzICsgJWRcbiIsICR0eXBlLCAkcmVmX2Z1bmMsICRvZmZzZXRzWyRpXSAtICRvZmZzZXQ7CisgICAgaWYgKCEkb3BlbmVkKSB7CisJb3BlbihGSUxFLCAiPiRtY291bnRfcyIpIHx8IGRpZSAiY2FuJ3QgY3JlYXRlICRtY291bnRfc1xuIjsKKwkkb3BlbmVkID0gMTsKKwlwcmludCBGSUxFICJcdC5zZWN0aW9uICRtY291bnRfc2VjdGlvbixcImFcIiwkc2VjdGlvbl90eXBlXG4iOworCXByaW50IEZJTEUgIlx0LmFsaWduICRhbGlnbm1lbnRcbiIgaWYgKGRlZmluZWQoJGFsaWdubWVudCkpOworICAgIH0KKyAgICBmb3JlYWNoIG15ICRjdXJfb2Zmc2V0IChAb2Zmc2V0cykgeworCXByaW50ZiBGSUxFICJcdCVzICVzICsgJWRcbiIsICR0eXBlLCAkcmVmX2Z1bmMsICRjdXJfb2Zmc2V0IC0gJG9mZnNldDsKICAgICB9CiB9CiAKQEAgLTQ3NiwxMSArNDc3LDcgQEAKIAkkcmVhZF9oZWFkZXJzID0gMDsKIAogCSMgT25seSByZWNvcmQgdGV4dCBzZWN0aW9ucyB0aGF0IHdlIGtub3cgYXJlIHNhZmUKLQlpZiAoZGVmaW5lZCgkdGV4dF9zZWN0aW9uc3skMX0pKSB7Ci0JICAgICRyZWFkX2Z1bmN0aW9uID0gMTsKLQl9IGVsc2UgewotCSAgICAkcmVhZF9mdW5jdGlvbiA9IDA7Ci0JfQorCSRyZWFkX2Z1bmN0aW9uID0gZGVmaW5lZCgkdGV4dF9zZWN0aW9uc3skMX0pOwogCSMgcHJpbnQgb3V0IGFueSByZWNvcmRlZCBvZmZzZXRzCiAJdXBkYXRlX2Z1bmNzKCk7CiAKQEAgLTUxNCw3ICs1MTEsNyBAQAogICAgIH0KICAgICAjIGlzIHRoaXMgYSBjYWxsIHNpdGUgdG8gbWNvdW50PyBJZiBzbywgcmVjb3JkIGl0IHRvIHByaW50IGxhdGVyCiAgICAgaWYgKCR0ZXh0X2ZvdW5kICYmIC8kbWNvdW50X3JlZ2V4LykgewotCSRvZmZzZXRzWyQjb2Zmc2V0cyArIDFdID0gaGV4ICQxOworCXB1c2goQG9mZnNldHMsIGhleCAkMSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2djLmMgYi9zZWN1cml0eS9rZXlzL2djLmMKaW5kZXggNDc3MGJlMy4uMTk5MDIzMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9nYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvZ2MuYwpAQCAtNzcsNyArNzcsOCBAQAogCQlnb3RvIGRvbnRfZ2M7CiAKIAkvKiBzY2FuIHRoZSBrZXlyaW5nIGxvb2tpbmcgZm9yIGRlYWQga2V5cyAqLwotCWtsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKGtleXJpbmctPnBheWxvYWQuc3Vic2NyaXB0aW9ucyk7CisJa2xpc3QgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zLAorCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgma2V5X3NlcmlhbF9sb2NrKSk7CiAJaWYgKCFrbGlzdCkKIAkJZ290byBkb250X2djOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IDhlYzAyNzQuLmU4MTRkMjEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC0xNTEsNyArMTUxLDkgQEAKIAkJd3JpdGVfdW5sb2NrKCZrZXlyaW5nX25hbWVfbG9jayk7CiAJfQogCi0Ja2xpc3QgPSByY3VfZGVyZWZlcmVuY2Uoa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zKTsKKwlrbGlzdCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhrZXlyaW5nLT5wYXlsb2FkLnN1YnNjcmlwdGlvbnMsCisJCQkJICAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgICAgICBhdG9taWNfcmVhZCgma2V5cmluZy0+dXNhZ2UpID09IDApOwogCWlmIChrbGlzdCkgewogCQlmb3IgKGxvb3AgPSBrbGlzdC0+bmtleXMgLSAxOyBsb29wID49IDA7IGxvb3AtLSkKIAkJCWtleV9wdXQoa2xpc3QtPmtleXNbbG9vcF0pOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9lYml0bWFwLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwppbmRleCA2OGM3MzQ4Li4wNGI2MTQ1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCQljbWFwX2lkeCA9IGRlbHRhIC8gTkVUTEJMX0NBVE1BUF9NQVBTSVpFOwogCQkJY21hcF9zZnQgPSBkZWx0YSAlIE5FVExCTF9DQVRNQVBfTUFQU0laRTsKIAkJCWNfaXRlci0+Yml0bWFwW2NtYXBfaWR4XQotCQkJCXw9IGVfaXRlci0+bWFwc1tjbWFwX2lkeF0gPDwgY21hcF9zZnQ7CisJCQkJfD0gZV9pdGVyLT5tYXBzW2ldIDw8IGNtYXBfc2Z0OwogCQl9CiAJCWVfaXRlciA9IGVfaXRlci0+bmV4dDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCmluZGV4IDU4Njk2NWYuLjdhNDM3ZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCisrKyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCkBAIC03NjgsNyArNzY4LDcgQEAKIAkJCQkicmVxdWlyZWQgcHJvcGVydHkgJXMgbm90IHByZXNlbnRcbiIsIHByb3BuYW1lKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWlmICgqcmVmICE9IGNvZGVjLT5ub2RlLT5saW51eF9waGFuZGxlKSB7CisJCWlmICgqcmVmICE9IGNvZGVjLT5ub2RlLT5waGFuZGxlKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJzbmQtYW9hLWZhYnJpYy1sYXlvdXQ6ICIKIAkJCQkiJXMgZG9lc24ndCBtYXRjaCFcbiIsIHByb3BuYW1lKTsKIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sLmMgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwppbmRleCAyNjhhYjc0Li40MzljZTY0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtMjM3LDggKzIzNyw5IEBACiAJYWNjZXNzID0gbmNvbnRyb2wtPmFjY2VzcyA9PSAwID8gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSA6CiAJCSAobmNvbnRyb2wtPmFjY2VzcyAmIChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFfAogCQkJCSAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRXwKLQkJIAkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEV1JJVEV8Ci0JCSAJCSAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0spKTsKKwkJCQkgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQURXUklURXwKKwkJCQkgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NPTU1BTkR8CisJCQkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSykpOwogCWtjdGwuaW5mbyA9IG5jb250cm9sLT5pbmZvOwogCWtjdGwuZ2V0ID0gbmNvbnRyb2wtPmdldDsKIAlrY3RsLnB1dCA9IG5jb250cm9sLT5wdXQ7CkBAIC0xMDk5LDcgKzExMDAsNyBAQAogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bHYsIF90bHYsIHNpemVvZih0bHYpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHRsdi5sZW5ndGggPCBzaXplb2YodW5zaWduZWQgaW50KSAqIDMpCisJaWYgKHRsdi5sZW5ndGggPCBzaXplb2YodW5zaWduZWQgaW50KSAqIDIpCiAJCXJldHVybiAtRUlOVkFMOwogCWRvd25fcmVhZCgmY2FyZC0+Y29udHJvbHNfcndzZW0pOwogCWtjdGwgPSBzbmRfY3RsX2ZpbmRfbnVtaWQoY2FyZCwgdGx2Lm51bWlkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWlzYy5jIGIvc291bmQvY29yZS9taXNjLmMKaW5kZXggMjNhMDMyYy4uM2RhNGY5MiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9taXNjLmMKKysrIGIvc291bmQvY29yZS9taXNjLmMKQEAgLTEwMSw2ICsxMDEsMzUgQEAKICNpZmRlZiBDT05GSUdfUENJCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAvKioKKyAqIHNuZF9wY2lfcXVpcmtfbG9va3VwX2lkIC0gbG9vayB1cCBhIFBDSSBTU0lEIHF1aXJrIGxpc3QKKyAqIEB2ZW5kb3I6IFBDSSBTU1YgaWQKKyAqIEBkZXZpY2U6IFBDSSBTU0QgaWQKKyAqIEBsaXN0OiBxdWlyayBsaXN0LCB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBlbnRyeQorICoKKyAqIExvb2sgdGhyb3VnaCB0aGUgZ2l2ZW4gcXVpcmsgbGlzdCBhbmQgZmluZHMgYSBtYXRjaGluZyBlbnRyeQorICogd2l0aCB0aGUgc2FtZSBQQ0kgU1NJRC4gIFdoZW4gc3ViZGV2aWNlIGlzIDAsIGFsbCBzdWJkZXZpY2UKKyAqIHZhbHVlcyBtYXkgbWF0Y2guCisgKgorICogUmV0dXJucyB0aGUgbWF0Y2hlZCBlbnRyeSBwb2ludGVyLCBvciBOVUxMIGlmIG5vdGhpbmcgbWF0Y2hlZC4KKyAqLworY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgorc25kX3BjaV9xdWlya19sb29rdXBfaWQodTE2IHZlbmRvciwgdTE2IGRldmljZSwKKwkJCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpsaXN0KQoreworCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOworCisJZm9yIChxID0gbGlzdDsgcS0+c3VidmVuZG9yOyBxKyspIHsKKwkJaWYgKHEtPnN1YnZlbmRvciAhPSB2ZW5kb3IpCisJCQljb250aW51ZTsKKwkJaWYgKCFxLT5zdWJkZXZpY2UgfHwKKwkJICAgIChkZXZpY2UgJiBxLT5zdWJkZXZpY2VfbWFzaykgPT0gcS0+c3ViZGV2aWNlKQorCQkJcmV0dXJuIHE7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNpX3F1aXJrX2xvb2t1cF9pZCk7CisKKy8qKgogICogc25kX3BjaV9xdWlya19sb29rdXAgLSBsb29rIHVwIGEgUENJIFNTSUQgcXVpcmsgbGlzdAogICogQHBjaTogcGNpX2RldiBoYW5kbGUKICAqIEBsaXN0OiBxdWlyayBsaXN0LCB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBlbnRyeQpAQCAtMTE0LDE2ICsxNDMsOSBAQAogY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgogc25kX3BjaV9xdWlya19sb29rdXAoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3QpCiB7Ci0JY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnE7Ci0KLQlmb3IgKHEgPSBsaXN0OyBxLT5zdWJ2ZW5kb3I7IHErKykgewotCQlpZiAocS0+c3VidmVuZG9yICE9IHBjaS0+c3Vic3lzdGVtX3ZlbmRvcikKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXEtPnN1YmRldmljZSB8fAotCQkgICAgKHBjaS0+c3Vic3lzdGVtX2RldmljZSAmIHEtPnN1YmRldmljZV9tYXNrKSA9PSBxLT5zdWJkZXZpY2UpCi0JCQlyZXR1cm4gcTsKLQl9Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNuZF9wY2lfcXVpcmtfbG9va3VwX2lkKHBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKKwkJCQkgICAgICAgcGNpLT5zdWJzeXN0ZW1fZGV2aWNlLAorCQkJCSAgICAgICBsaXN0KTsKIH0KIEVYUE9SVF9TWU1CT0woc25kX3BjaV9xdWlya19sb29rdXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggZDljOTYzNS4uODJkNGUzMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtNjMyLDYgKzYzMiwxMiBAQAogCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgKGJ1ZmZlcl9zaXplICogYnl0ZXMpIC8gcnVudGltZS0+b3NzLmJ1ZmZlcl9ieXRlcyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUKK3NuZF9wY21fdWZyYW1lc190IGdldF9od19wdHJfcGVyaW9kKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCit7CisJcmV0dXJuIHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQ7Cit9CisKIC8qIGRlZmluZSBleHRlbmRlZCBmb3JtYXRzIGluIHRoZSByZWNlbnQgT1NTIHZlcnNpb25zIChpZiBhbnkpICovCiAvKiBsaW5lYXIgZm9ybWF0cyAqLwogI2RlZmluZSBBRk1UX1MzMl9MRSAgICAgIDB4MDAwMDEwMDAKQEAgLTExMDIsNyArMTEwOCw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCXJ1bnRpbWUtPm9zcy5wcmVwYXJlID0gMDsKLQlydW50aW1lLT5vc3MucHJldl9od19wdHJfaW50ZXJydXB0ID0gMDsKKwlydW50aW1lLT5vc3MucHJldl9od19wdHJfcGVyaW9kID0gMDsKIAlydW50aW1lLT5vc3MucGVyaW9kX3B0ciA9IDA7CiAJcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID0gMDsKIApAQCAtMTk1MCw3ICsxOTU2LDggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzbmRfcGNtX3VmcmFtZXNfdCBod19wdHIpCitzdGF0aWMgdm9pZCBzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHNuZF9wY21fdWZyYW1lc190IGh3X3B0cikKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IGFwcGxfcHRyOwpAQCAtMTk4Niw3ICsxOTkzLDggQEAKIAkJCWlmIChydW50aW1lLT5vc3MudHJpZ2dlcikKIAkJCQlnb3RvIF9za2lwMTsKIAkJCWlmIChhdG9taWNfcmVhZCgmcHN1YnN0cmVhbS0+bW1hcF9jb3VudCkpCi0JCQkJc25kX3BjbV9vc3Nfc2ltdWxhdGVfZmlsbChwc3Vic3RyZWFtLCBydW50aW1lLT5od19wdHJfaW50ZXJydXB0KTsKKwkJCQlzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHBzdWJzdHJlYW0sCisJCQkJCQlnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKSk7CiAJCQlydW50aW1lLT5vc3MudHJpZ2dlciA9IDE7CiAJCQlydW50aW1lLT5zdGFydF90aHJlc2hvbGQgPSAxOwogCQkJY21kID0gU05EUlZfUENNX0lPQ1RMX1NUQVJUOwpAQCAtMjEwNSwxMSArMjExMywxMiBAQAogCWluZm8ucHRyID0gc25kX3BjbV9vc3NfYnl0ZXMoc3Vic3RyZWFtLCBydW50aW1lLT5zdGF0dXMtPmh3X3B0ciAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKIAlpZiAoYXRvbWljX3JlYWQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCkpIHsKIAkJc25kX3BjbV9zZnJhbWVzX3QgbjsKLQkJbiA9IChkZWxheSA9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQpIC0gcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX2ludGVycnVwdDsKKwkJZGVsYXkgPSBnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKTsKKwkJbiA9IGRlbGF5IC0gcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX3BlcmlvZDsKIAkJaWYgKG4gPCAwKQogCQkJbiArPSBydW50aW1lLT5ib3VuZGFyeTsKIAkJaW5mby5ibG9ja3MgPSBuIC8gcnVudGltZS0+cGVyaW9kX3NpemU7Ci0JCXJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9pbnRlcnJ1cHQgPSBkZWxheTsKKwkJcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX3BlcmlvZCA9IGRlbGF5OwogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJCXNuZF9wY21fb3NzX3NpbXVsYXRlX2ZpbGwoc3Vic3RyZWFtLCBkZWxheSk7CiAJCWluZm8uYnl0ZXMgPSBzbmRfcGNtX29zc19ieXRlcyhzdWJzdHJlYW0sIHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyKSAmIElOVF9NQVg7CkBAIC0yNjczLDE4ICsyNjgyLDIyIEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpZiAoYXRvbWljX3JlYWQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCkpCi0JCXJldHVybiBydW50aW1lLT5vc3MucHJldl9od19wdHJfaW50ZXJydXB0ICE9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQ7CisJCXJldHVybiBydW50aW1lLT5vc3MucHJldl9od19wdHJfcGVyaW9kICE9CisJCQkJCQlnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKTsKIAllbHNlCi0JCXJldHVybiBzbmRfcGNtX3BsYXliYWNrX2F2YWlsKHJ1bnRpbWUpID49IHJ1bnRpbWUtPm9zcy5wZXJpb2RfZnJhbWVzOworCQlyZXR1cm4gc25kX3BjbV9wbGF5YmFja19hdmFpbChydW50aW1lKSA+PQorCQkJCQkJcnVudGltZS0+b3NzLnBlcmlvZF9mcmFtZXM7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9vc3NfY2FwdHVyZV9yZWFkeShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWlmIChhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5tbWFwX2NvdW50KSkKLQkJcmV0dXJuIHJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9pbnRlcnJ1cHQgIT0gcnVudGltZS0+aHdfcHRyX2ludGVycnVwdDsKKwkJcmV0dXJuIHJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9wZXJpb2QgIT0KKwkJCQkJCWdldF9od19wdHJfcGVyaW9kKHJ1bnRpbWUpOwogCWVsc2UKLQkJcmV0dXJuIHNuZF9wY21fY2FwdHVyZV9hdmFpbChydW50aW1lKSA+PSBydW50aW1lLT5vc3MucGVyaW9kX2ZyYW1lczsKKwkJcmV0dXJuIHNuZF9wY21fY2FwdHVyZV9hdmFpbChydW50aW1lKSA+PQorCQkJCQkJcnVudGltZS0+b3NzLnBlcmlvZF9mcmFtZXM7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3BjbV9vc3NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbS5jIGIvc291bmQvY29yZS9wY20uYwppbmRleCA2ODg0YWUwLi4wZDQyOGQwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtLmMKQEAgLTg5NCw2ICs4OTQsNyBAQAogCW1lbXNldCgodm9pZCopcnVudGltZS0+Y29udHJvbCwgMCwgc2l6ZSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZydW50aW1lLT5zbGVlcCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcnVudGltZS0+dHNsZWVwKTsKIAogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfT1BFTjsKIApAQCAtOTIxLDYgKzkyMiwxMCBAQAogCXNuZF9mcmVlX3BhZ2VzKCh2b2lkKilydW50aW1lLT5jb250cm9sLAogCQkgICAgICAgUEFHRV9BTElHTihzaXplb2Yoc3RydWN0IHNuZF9wY21fbW1hcF9jb250cm9sKSkpOwogCWtmcmVlKHJ1bnRpbWUtPmh3X2NvbnN0cmFpbnRzLnJ1bGVzKTsKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCisJaWYgKHJ1bnRpbWUtPmh3cHRyX2xvZykKKwkJa2ZyZWUocnVudGltZS0+aHdwdHJfbG9nKTsKKyNlbmRpZgogCWtmcmVlKHJ1bnRpbWUpOwogCXN1YnN0cmVhbS0+cnVudGltZSA9IE5VTEw7CiAJcHV0X3BpZChzdWJzdHJlYW0tPnBpZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9saWIuYyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCmluZGV4IGEyNzU0NWIyLi5iNTQ2YWMyIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtMTI2LDE3ICsxMjYsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLSNkZWZpbmUgeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIG1hc2spCSgoc3Vic3RyZWFtKS0+cHN0ci0+eHJ1bl9kZWJ1ZyAmIChtYXNrKSkKLSNlbHNlCi0jZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtLCBtYXNrKQkwCi0jZW5kaWYKLQotI2RlZmluZSBkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKSBkbyB7CQlcCi0JCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgMikpCQlcCi0JCQlkdW1wX3N0YWNrKCk7CQkJXAotCX0gd2hpbGUgKDApCi0KIHN0YXRpYyB2b2lkIHBjbV9kZWJ1Z19uYW1lKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKIHsKQEAgLTE0Nyw2ICsxMzYsMjQgQEAKIAkJIHN1YnN0cmVhbS0+bnVtYmVyKTsKIH0KIAorI2RlZmluZSBYUlVOX0RFQlVHX0JBU0lDCSgxPDwwKQorI2RlZmluZSBYUlVOX0RFQlVHX1NUQUNLCSgxPDwxKQkvKiBkdW1wIGFsc28gc3RhY2sgKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19KSUZGSUVTQ0hFQ0sJKDE8PDIpCS8qIGRvIGppZmZpZXMgY2hlY2sgKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19QRVJJT0RVUERBVEUJKDE8PDMpCS8qIGZ1bGwgcGVyaW9kIHVwZGF0ZSBpbmZvICovCisjZGVmaW5lIFhSVU5fREVCVUdfSFdQVFJVUERBVEUJKDE8PDQpCS8qIGZ1bGwgaHdwdHIgdXBkYXRlIGluZm8gKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19MT0cJCSgxPDw1KQkvKiBzaG93IGxhc3QgMTAgcG9zaXRpb25zIG9uIGVyciAqLworI2RlZmluZSBYUlVOX0RFQlVHX0xPR09OQ0UJKDE8PDYpCS8qIGRvIGFib3ZlIG9ubHkgb25jZSAqLworCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRworCisjZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtLCBtYXNrKSBcCisJCQkoKHN1YnN0cmVhbSktPnBzdHItPnhydW5fZGVidWcgJiAobWFzaykpCisKKyNkZWZpbmUgZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSkgZG8gewkJCVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX1NUQUNLKSkJXAorCQkJZHVtcF9zdGFjaygpOwkJCQlcCisJfSB3aGlsZSAoMCkKKwogc3RhdGljIHZvaWQgeHJ1bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMTU0LDcgKzE2MSw3IEBACiAJaWYgKHJ1bnRpbWUtPnRzdGFtcF9tb2RlID09IFNORFJWX1BDTV9UU1RBTVBfRU5BQkxFKQogCQlzbmRfcGNtX2dldHRpbWUocnVudGltZSwgKHN0cnVjdCB0aW1lc3BlYyAqKSZydW50aW1lLT5zdGF0dXMtPnRzdGFtcCk7CiAJc25kX3BjbV9zdG9wKHN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOwotCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgMSkpIHsKKwlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIFhSVU5fREVCVUdfQkFTSUMpKSB7CiAJCWNoYXIgbmFtZVsxNl07CiAJCXBjbV9kZWJ1Z19uYW1lKHN1YnN0cmVhbSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKIAkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJYUlVOOiAlc1xuIiwgbmFtZSk7CkBAIC0xNjIsMzIgKzE2OSwxMDIgQEAKIAl9CiB9CiAKLXN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAotc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCSAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKLXsKLQlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7CisjZGVmaW5lIGh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIGZtdCwgYXJncy4uLikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0JBU0lDKSkgewkJXAorCQkJeHJ1bl9sb2dfc2hvdyhzdWJzdHJlYW0pOwkJCVwKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsJCQlcCisJCQkJc25kX3ByaW50ZCgiUENNOiAiIGZtdCwgIyNhcmdzKTsJXAorCQkJfQkJCQkJCVwKKwkJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKIAotCXBvcyA9IHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSk7Ci0JaWYgKHBvcyA9PSBTTkRSVl9QQ01fUE9TX1hSVU4pCi0JCXJldHVybiBwb3M7IC8qIFhSVU4gKi8KLQlpZiAocG9zID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7Ci0JCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKLQkJCWNoYXIgbmFtZVsxNl07Ci0JCQlwY21fZGVidWdfbmFtZShzdWJzdHJlYW0sIG5hbWUsIHNpemVvZihuYW1lKSk7Ci0JCQlzbmRfcHJpbnRkKEtFUk5fRVJSICAiQlVHOiAlcywgcG9zID0gMHglbHgsICIKLQkJCQkgICAiYnVmZmVyIHNpemUgPSAweCVseCwgcGVyaW9kIHNpemUgPSAweCVseFxuIiwKLQkJCQkgICBuYW1lLCBwb3MsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAotCQkJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQkJfQotCQlwb3MgPSAwOworI2RlZmluZSBYUlVOX0xPR19DTlQJMTAKKworc3RydWN0IGh3cHRyX2xvZ19lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBqaWZmaWVzOworCXNuZF9wY21fdWZyYW1lc190IHBvczsKKwlzbmRfcGNtX3VmcmFtZXNfdCBwZXJpb2Rfc2l6ZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBidWZmZXJfc2l6ZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyOworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cl9iYXNlOworfTsKKworc3RydWN0IHNuZF9wY21faHdwdHJfbG9nIHsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGludCBoaXQ6IDE7CisJc3RydWN0IGh3cHRyX2xvZ19lbnRyeSBlbnRyaWVzW1hSVU5fTE9HX0NOVF07Cit9OworCitzdGF0aWMgdm9pZCB4cnVuX2xvZyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX3BjbV9od3B0cl9sb2cgKmxvZyA9IHJ1bnRpbWUtPmh3cHRyX2xvZzsKKwlzdHJ1Y3QgaHdwdHJfbG9nX2VudHJ5ICplbnRyeTsKKworCWlmIChsb2cgPT0gTlVMTCkgeworCQlsb2cgPSBremFsbG9jKHNpemVvZigqbG9nKSwgR0ZQX0FUT01JQyk7CisJCWlmIChsb2cgPT0gTlVMTCkKKwkJCXJldHVybjsKKwkJcnVudGltZS0+aHdwdHJfbG9nID0gbG9nOworCX0gZWxzZSB7CisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgWFJVTl9ERUJVR19MT0dPTkNFKSAmJiBsb2ctPmhpdCkKKwkJCXJldHVybjsKIAl9Ci0JcG9zIC09IHBvcyAlIHJ1bnRpbWUtPm1pbl9hbGlnbjsKLQlyZXR1cm4gcG9zOworCWVudHJ5ID0gJmxvZy0+ZW50cmllc1tsb2ctPmlkeF07CisJZW50cnktPmppZmZpZXMgPSBqaWZmaWVzOworCWVudHJ5LT5wb3MgPSBwb3M7CisJZW50cnktPnBlcmlvZF9zaXplID0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJZW50cnktPmJ1ZmZlcl9zaXplID0gcnVudGltZS0+YnVmZmVyX3NpemU7OworCWVudHJ5LT5vbGRfaHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7CisJZW50cnktPmh3X3B0cl9iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7CisJbG9nLT5pZHggPSAobG9nLT5pZHggKyAxKSAlIFhSVU5fTE9HX0NOVDsKIH0KIAotc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQorc3RhdGljIHZvaWQgeHJ1bl9sb2dfc2hvdyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9od3B0cl9sb2cgKmxvZyA9IHN1YnN0cmVhbS0+cnVudGltZS0+aHdwdHJfbG9nOworCXN0cnVjdCBod3B0cl9sb2dfZW50cnkgKmVudHJ5OworCWNoYXIgbmFtZVsxNl07CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgY250OworCisJaWYgKGxvZyA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0xPR09OQ0UpICYmIGxvZy0+aGl0KQorCQlyZXR1cm47CisJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOworCWZvciAoY250ID0gMCwgaWR4ID0gbG9nLT5pZHg7IGNudCA8IFhSVU5fTE9HX0NOVDsgY250KyspIHsKKwkJZW50cnkgPSAmbG9nLT5lbnRyaWVzW2lkeF07CisJCWlmIChlbnRyeS0+cGVyaW9kX3NpemUgPT0gMCkKKwkJCWJyZWFrOworCQlzbmRfcHJpbnRkKCJod3B0ciBsb2c6ICVzOiBqPSVsdSwgcG9zPSVsZC8lbGQvJWxkLCAiCisJCQkgICAiaHdwdHI9JWxkLyVsZFxuIiwKKwkJCSAgIG5hbWUsIGVudHJ5LT5qaWZmaWVzLCAodW5zaWduZWQgbG9uZyllbnRyeS0+cG9zLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPnBlcmlvZF9zaXplLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ1ZmZlcl9zaXplLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPm9sZF9od19wdHIsCisJCQkgICAodW5zaWduZWQgbG9uZyllbnRyeS0+aHdfcHRyX2Jhc2UpOworCQlpZHgrKzsKKwkJaWR4ICU9IFhSVU5fTE9HX0NOVDsKKwl9CisJbG9nLT5oaXQgPSAxOworfQorCisjZWxzZSAvKiAhIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcgKi8KKworI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSwgbWFzaykJMAorI2RlZmluZSB4cnVuKHN1YnN0cmVhbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB4cnVuX2xvZyhzdWJzdHJlYW0sIHBvcykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB4cnVuX2xvZ19zaG93KHN1YnN0cmVhbSkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworaW50IHNuZF9wY21fdXBkYXRlX3N0YXRlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCiB7CiAJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CiAKQEAgLTIwOSw4OCArMjg2LDk0IEBACiAJCX0KIAl9CiAJaWYgKGF2YWlsID49IHJ1bnRpbWUtPmNvbnRyb2wtPmF2YWlsX21pbikKLQkJd2FrZV91cCgmcnVudGltZS0+c2xlZXApOworCQl3YWtlX3VwKHJ1bnRpbWUtPnR3YWtlID8gJnJ1bnRpbWUtPnRzbGVlcCA6ICZydW50aW1lLT5zbGVlcCk7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgZm10LCBhcmdzLi4uKQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIDEpKSB7CQkJCVwKLQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsJCQlcCi0JCQkJc25kX3ByaW50ZCgiUENNOiAiIGZtdCwgIyNhcmdzKTsJXAotCQkJfQkJCQkJCVwKLQkJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwkJCVwKLQkJfQkJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHIwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgdW5zaWduZWQgaW50IGluX2ludGVycnVwdCkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IHBvczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyLCBod19wdHJfaW50ZXJydXB0LCBod19iYXNlOworCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHIsIGh3X2Jhc2U7CiAJc25kX3BjbV9zZnJhbWVzX3QgaGRlbHRhLCBkZWx0YTsKIAl1bnNpZ25lZCBsb25nIGpkZWx0YTsKIAogCW9sZF9od19wdHIgPSBydW50aW1lLT5zdGF0dXMtPmh3X3B0cjsKLQlwb3MgPSBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN1YnN0cmVhbSwgcnVudGltZSk7CisJcG9zID0gc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKTsKIAlpZiAocG9zID09IFNORFJWX1BDTV9QT1NfWFJVTikgewogCQl4cnVuKHN1YnN0cmVhbSk7CiAJCXJldHVybiAtRVBJUEU7CiAJfQotCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgOCkpIHsKLQkJY2hhciBuYW1lWzE2XTsKLQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOwotCQlzbmRfcHJpbnRkKCJwZXJpb2RfdXBkYXRlOiAlczogcG9zPTB4JXgvMHgleC8weCV4LCAiCi0JCQkgICAiaHdwdHI9MHglbHgsIGh3X2Jhc2U9MHglbHgsIGh3X2ludHI9MHglbHhcbiIsCi0JCQkgICBuYW1lLCAodW5zaWduZWQgaW50KXBvcywKLQkJCSAgICh1bnNpZ25lZCBpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsCi0JCQkgICAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpb2xkX2h3X3B0ciwKLQkJCSAgICh1bnNpZ25lZCBsb25nKXJ1bnRpbWUtPmh3X3B0cl9iYXNlLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCk7CisJaWYgKHBvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCQljaGFyIG5hbWVbMTZdOworCQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOworCQkJeHJ1bl9sb2dfc2hvdyhzdWJzdHJlYW0pOworCQkJc25kX3ByaW50ZChLRVJOX0VSUiAgIkJVRzogJXMsIHBvcyA9ICVsZCwgIgorCQkJCSAgICJidWZmZXIgc2l6ZSA9ICVsZCwgcGVyaW9kIHNpemUgPSAlbGRcbiIsCisJCQkJICAgbmFtZSwgcG9zLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJCQkgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCX0KKwkJcG9zID0gMDsKIAl9CisJcG9zIC09IHBvcyAlIHJ1bnRpbWUtPm1pbl9hbGlnbjsKKwlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIFhSVU5fREVCVUdfTE9HKSkKKwkJeHJ1bl9sb2coc3Vic3RyZWFtLCBwb3MpOwogCWh3X2Jhc2UgPSBydW50aW1lLT5od19wdHJfYmFzZTsKIAluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKLQlod19wdHJfaW50ZXJydXB0ID0gcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCArIHJ1bnRpbWUtPnBlcmlvZF9zaXplOwotCWRlbHRhID0gbmV3X2h3X3B0ciAtIGh3X3B0cl9pbnRlcnJ1cHQ7Ci0JaWYgKGh3X3B0cl9pbnRlcnJ1cHQgPj0gcnVudGltZS0+Ym91bmRhcnkpIHsKLQkJaHdfcHRyX2ludGVycnVwdCAtPSBydW50aW1lLT5ib3VuZGFyeTsKLQkJaWYgKGh3X2Jhc2UgPCBydW50aW1lLT5ib3VuZGFyeSAvIDIpCi0JCQkvKiBod19iYXNlIHdhcyBhbHJlYWR5IGxhcHBlZDsgcmVjYWxjIGRlbHRhICovCi0JCQlkZWx0YSA9IG5ld19od19wdHIgLSBod19wdHJfaW50ZXJydXB0OwotCX0KLQlpZiAoZGVsdGEgPCAwKSB7Ci0JCWlmIChydW50aW1lLT5wZXJpb2RzID09IDEgfHwgbmV3X2h3X3B0ciA8IG9sZF9od19wdHIpCi0JCQlkZWx0YSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJaWYgKGRlbHRhIDwgMCkgewotCQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgCi0JCQkJICAgICAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlICIKLQkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBpbnRyX3B0cj0lbGQpXG4iLAotCQkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKXBvcywKLQkJCQkgICAgIChsb25nKWh3X3B0cl9pbnRlcnJ1cHQpOwotI2lmIDEKLQkJCS8qIHNpbXBseSBza2lwcGluZyB0aGUgaHdwdHIgdXBkYXRlIHNlZW1zIG1vcmUKLQkJCSAqIHJvYnVzdCBpbiBzb21lIGNhc2VzLCBlLmcuIG9uIFZNd2FyZSB3aXRoCi0JCQkgKiBpbmFjY3VyYXRlIHRpbWVyIHNvdXJjZQotCQkJICovCi0JCQlyZXR1cm4gMDsgLyogc2tpcCB0aGlzIHVwZGF0ZSAqLwotI2Vsc2UKLQkJCS8qIHJlYmFzZSB0byBpbnRlcnJ1cHQgcG9zaXRpb24gKi8KLQkJCWh3X2Jhc2UgPSBuZXdfaHdfcHRyID0gaHdfcHRyX2ludGVycnVwdDsKLQkJCS8qIGFsaWduIGh3X2Jhc2UgdG8gYnVmZmVyX3NpemUgKi8KLQkJCWh3X2Jhc2UgLT0gaHdfYmFzZSAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQkJZGVsdGEgPSAwOwotI2VuZGlmCi0JCX0gZWxzZSB7CisJaWYgKGluX2ludGVycnVwdCkgeworCQkvKiB3ZSBrbm93IHRoYXQgb25lIHBlcmlvZCB3YXMgcHJvY2Vzc2VkICovCisJCS8qIGRlbHRhID0gImV4cGVjdGVkIG5leHQgaHdfcHRyIiBmb3IgaW5faW50ZXJydXB0ICE9IDAgKi8KKwkJZGVsdGEgPSBydW50aW1lLT5od19wdHJfaW50ZXJydXB0ICsgcnVudGltZS0+cGVyaW9kX3NpemU7CisJCWlmIChkZWx0YSA+IG5ld19od19wdHIpIHsKIAkJCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CiAJCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKIAkJCQlod19iYXNlID0gMDsKIAkJCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOworCQkJZ290byBfX2RlbHRhOwogCQl9CiAJfQorCS8qIG5ld19od19wdHIgbWlnaHQgYmUgbG93ZXIgdGhhbiBvbGRfaHdfcHRyIGluIGNhc2Ugd2hlbiAqLworCS8qIHBvaW50ZXIgY3Jvc3NlcyB0aGUgZW5kIG9mIHRoZSByaW5nIGJ1ZmZlciAqLworCWlmIChuZXdfaHdfcHRyIDwgb2xkX2h3X3B0cikgeworCQlod19iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCWh3X2Jhc2UgPSAwOworCQluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKKwl9CisgICAgICBfX2RlbHRhOgorCWRlbHRhID0gKG5ld19od19wdHIgLSBvbGRfaHdfcHRyKSAlIHJ1bnRpbWUtPmJvdW5kYXJ5OworCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgaW5faW50ZXJydXB0ID8KKwkJCVhSVU5fREVCVUdfUEVSSU9EVVBEQVRFIDogWFJVTl9ERUJVR19IV1BUUlVQREFURSkpIHsKKwkJY2hhciBuYW1lWzE2XTsKKwkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOworCQlzbmRfcHJpbnRkKCIlc191cGRhdGU6ICVzOiBwb3M9JXUvJXUvJXUsICIKKwkJCSAgICJod3B0cj0lbGQvJWxkLyVsZC8lbGRcbiIsCisJCQkgICBpbl9pbnRlcnJ1cHQgPyAicGVyaW9kIiA6ICJod3B0ciIsCisJCQkgICBuYW1lLAorCQkJICAgKHVuc2lnbmVkIGludClwb3MsCisJCQkgICAodW5zaWduZWQgaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCQkJICAgKHVuc2lnbmVkIGludClydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKWRlbHRhLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpb2xkX2h3X3B0ciwKKwkJCSAgICh1bnNpZ25lZCBsb25nKW5ld19od19wdHIsCisJCQkgICAodW5zaWduZWQgbG9uZylydW50aW1lLT5od19wdHJfYmFzZSk7CisJfQorCS8qIHNvbWV0aGluZyBtdXN0IGJlIHJlYWxseSB3cm9uZyAqLworCWlmIChkZWx0YSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSArIHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCisJCQkgICAgICAgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSAlcyIKKwkJCSAgICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgbmV3X2h3X3B0cj0lbGQsICIKKwkJCSAgICAgICAib2xkX2h3X3B0cj0lbGQpXG4iLAorCQkJCSAgICAgaW5faW50ZXJydXB0ID8gIltRXSAiIDogIltQXSIsCisJCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAorCQkJCSAgICAgKGxvbmcpbmV3X2h3X3B0ciwgKGxvbmcpb2xkX2h3X3B0cik7CisJCXJldHVybiAwOworCX0KIAogCS8qIERvIGppZmZpZXMgY2hlY2sgb25seSBpbiB4cnVuX2RlYnVnIG1vZGUgKi8KLQlpZiAoIXhydW5fZGVidWcoc3Vic3RyZWFtLCA0KSkKKwlpZiAoIXhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0pJRkZJRVNDSEVDSykpCiAJCWdvdG8gbm9famlmZmllc19jaGVjazsKIAogCS8qIFNraXAgdGhlIGppZmZpZXMgY2hlY2sgZm9yIGhhcmR3YXJlcyB3aXRoIEJBVENIIGZsYWcuCkBAIC0yOTksNyArMzgyLDcgQEAKIAkgKi8KIAlpZiAocnVudGltZS0+aHcuaW5mbyAmIFNORFJWX1BDTV9JTkZPX0JBVENIKQogCQlnb3RvIG5vX2ppZmZpZXNfY2hlY2s7Ci0JaGRlbHRhID0gbmV3X2h3X3B0ciAtIG9sZF9od19wdHI7CisJaGRlbHRhID0gZGVsdGE7CiAJaWYgKGhkZWx0YSA8IHJ1bnRpbWUtPmRlbGF5KQogCQlnb3RvIG5vX2ppZmZpZXNfY2hlY2s7CiAJaGRlbHRhIC09IHJ1bnRpbWUtPmRlbGF5OwpAQCAtMzA4LDEzMCArMzkxLDY4IEBACiAJCWRlbHRhID0gamRlbHRhIC8KIAkJCSgoKHJ1bnRpbWUtPnBlcmlvZF9zaXplICogSFopIC8gcnVudGltZS0+cmF0ZSkKIAkJCQkJCQkJKyBIWi8xMDApOworCQkvKiBtb3ZlIG5ld19od19wdHIgYWNjb3JkaW5nIGppZmZpZXMgbm90IHBvcyB2YXJpYWJsZSAqLworCQluZXdfaHdfcHRyID0gb2xkX2h3X3B0cjsKKwkJaHdfYmFzZSA9IGRlbHRhOworCQkvKiB1c2UgbG9vcCB0byBhdm9pZCBjaGVja3MgZm9yIGRlbHRhIG92ZXJmbG93cyAqLworCQkvKiB0aGUgZGVsdGEgdmFsdWUgaXMgc21hbGwgb3IgemVybyBpbiBtb3N0IGNhc2VzICovCisJCXdoaWxlIChkZWx0YSA+IDApIHsKKwkJCW5ld19od19wdHIgKz0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJCQlpZiAobmV3X2h3X3B0ciA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCQluZXdfaHdfcHRyIC09IHJ1bnRpbWUtPmJvdW5kYXJ5OworCQkJZGVsdGEtLTsKKwkJfQorCQkvKiBhbGlnbiBod19iYXNlIHRvIGJ1ZmZlcl9zaXplICovCiAJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCi0JCQkgICAgICJod19wdHIgc2tpcHBpbmchIFtRXSAiCisJCQkgICAgICJod19wdHIgc2tpcHBpbmchICVzIgogCQkJICAgICAiKHBvcz0lbGQsIGRlbHRhPSVsZCwgcGVyaW9kPSVsZCwgIgotCQkJICAgICAiamRlbHRhPSVsdS8lbHUvJWx1KVxuIiwKKwkJCSAgICAgImpkZWx0YT0lbHUvJWx1LyVsdSwgaHdfcHRyPSVsZC8lbGQpXG4iLAorCQkJICAgICBpbl9pbnRlcnJ1cHQgPyAiW1FdICIgOiAiIiwKIAkJCSAgICAgKGxvbmcpcG9zLCAobG9uZyloZGVsdGEsCiAJCQkgICAgIChsb25nKXJ1bnRpbWUtPnBlcmlvZF9zaXplLCBqZGVsdGEsCi0JCQkgICAgICgoaGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSksIGRlbHRhKTsKLQkJaHdfcHRyX2ludGVycnVwdCA9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgKwotCQkJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplICogZGVsdGE7Ci0JCWlmIChod19wdHJfaW50ZXJydXB0ID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJaHdfcHRyX2ludGVycnVwdCAtPSBydW50aW1lLT5ib3VuZGFyeTsKLQkJLyogcmViYXNlIHRvIGludGVycnVwdCBwb3NpdGlvbiAqLwotCQlod19iYXNlID0gbmV3X2h3X3B0ciA9IGh3X3B0cl9pbnRlcnJ1cHQ7Ci0JCS8qIGFsaWduIGh3X2Jhc2UgdG8gYnVmZmVyX3NpemUgKi8KLQkJaHdfYmFzZSAtPSBod19iYXNlICUgcnVudGltZS0+YnVmZmVyX3NpemU7CisJCQkgICAgICgoaGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSksIGh3X2Jhc2UsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKW9sZF9od19wdHIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKW5ld19od19wdHIpOworCQkvKiByZXNldCB2YWx1ZXMgdG8gcHJvcGVyIHN0YXRlICovCiAJCWRlbHRhID0gMDsKKwkJaHdfYmFzZSA9IG5ld19od19wdHIgLSAobmV3X2h3X3B0ciAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKIAl9CiAgbm9famlmZmllc19jaGVjazoKIAlpZiAoZGVsdGEgPiBydW50aW1lLT5wZXJpb2Rfc2l6ZSArIHJ1bnRpbWUtPnBlcmlvZF9zaXplIC8gMikgewogCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAotCQkJICAgICAiTG9zdCBpbnRlcnJ1cHRzPyAiCi0JCQkgICAgICIoc3RyZWFtPSVpLCBkZWx0YT0lbGQsIGludHJfcHRyPSVsZClcbiIsCisJCQkgICAgICJMb3N0IGludGVycnVwdHM/ICVzIgorCQkJICAgICAiKHN0cmVhbT0laSwgZGVsdGE9JWxkLCBuZXdfaHdfcHRyPSVsZCwgIgorCQkJICAgICAib2xkX2h3X3B0cj0lbGQpXG4iLAorCQkJICAgICBpbl9pbnRlcnJ1cHQgPyAiW1FdICIgOiAiIiwKIAkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKWRlbHRhLAotCQkJICAgICAobG9uZylod19wdHJfaW50ZXJydXB0KTsKLQkJLyogcmViYXNlIGh3X3B0cl9pbnRlcnJ1cHQgKi8KLQkJaHdfcHRyX2ludGVycnVwdCA9Ci0JCQluZXdfaHdfcHRyIC0gbmV3X2h3X3B0ciAlIHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQkJICAgICAobG9uZyluZXdfaHdfcHRyLAorCQkJICAgICAobG9uZylvbGRfaHdfcHRyKTsKIAl9Ci0JcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IGh3X3B0cl9pbnRlcnJ1cHQ7CisKKwlpZiAocnVudGltZS0+c3RhdHVzLT5od19wdHIgPT0gbmV3X2h3X3B0cikKKwkJcmV0dXJuIDA7CiAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQogCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKIAotCWlmIChydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9PSBuZXdfaHdfcHRyKQotCQlyZXR1cm4gMDsKLQorCWlmIChpbl9pbnRlcnJ1cHQpIHsKKwkJcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IG5ld19od19wdHIgLQorCQkJCShuZXdfaHdfcHRyICUgcnVudGltZS0+cGVyaW9kX3NpemUpOworCX0KIAlydW50aW1lLT5od19wdHJfYmFzZSA9IGh3X2Jhc2U7CiAJcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSBuZXdfaHdfcHRyOwogCXJ1bnRpbWUtPmh3X3B0cl9qaWZmaWVzID0gamlmZmllczsKIAlpZiAocnVudGltZS0+dHN0YW1wX21vZGUgPT0gU05EUlZfUENNX1RTVEFNUF9FTkFCTEUpCiAJCXNuZF9wY21fZ2V0dGltZShydW50aW1lLCAoc3RydWN0IHRpbWVzcGVjICopJnJ1bnRpbWUtPnN0YXR1cy0+dHN0YW1wKTsKIAotCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdWJzdHJlYW0sIHJ1bnRpbWUpOworCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdWJzdHJlYW0sIHJ1bnRpbWUpOwogfQogCiAvKiBDQVVUSU9OOiBjYWxsIGl0IHdpdGggaXJxIGRpc2FibGVkICovCiBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc25kX3BjbV91ZnJhbWVzX3QgcG9zOwotCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHIsIGh3X2Jhc2U7Ci0Jc25kX3BjbV9zZnJhbWVzX3QgZGVsdGE7Ci0JdW5zaWduZWQgbG9uZyBqZGVsdGE7Ci0KLQlvbGRfaHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7Ci0JcG9zID0gc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdWJzdHJlYW0sIHJ1bnRpbWUpOwotCWlmIChwb3MgPT0gU05EUlZfUENNX1BPU19YUlVOKSB7Ci0JCXhydW4oc3Vic3RyZWFtKTsKLQkJcmV0dXJuIC1FUElQRTsKLQl9Ci0JaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCAxNikpIHsKLQkJY2hhciBuYW1lWzE2XTsKLQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOwotCQlzbmRfcHJpbnRkKCJod191cGRhdGU6ICVzOiBwb3M9MHgleC8weCV4LzB4JXgsICIKLQkJCSAgICJod3B0cj0weCVseCwgaHdfYmFzZT0weCVseCwgaHdfaW50cj0weCVseFxuIiwKLQkJCSAgIG5hbWUsICh1bnNpZ25lZCBpbnQpcG9zLAotCQkJICAgKHVuc2lnbmVkIGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwKLQkJCSAgICh1bnNpZ25lZCBpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCi0JCQkgICAodW5zaWduZWQgbG9uZylvbGRfaHdfcHRyLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+aHdfcHRyX2Jhc2UsCi0JCQkgICAodW5zaWduZWQgbG9uZylydW50aW1lLT5od19wdHJfaW50ZXJydXB0KTsKLQl9Ci0KLQlod19iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7Ci0JbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7Ci0KLQlkZWx0YSA9IG5ld19od19wdHIgLSBvbGRfaHdfcHRyOwotCWpkZWx0YSA9IGppZmZpZXMgLSBydW50aW1lLT5od19wdHJfamlmZmllczsKLQlpZiAoZGVsdGEgPCAwKSB7Ci0JCWRlbHRhICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQlpZiAoZGVsdGEgPCAwKSB7Ci0JCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCAKLQkJCQkgICAgICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzJdICIKLQkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBvbGRfcHRyPSVsZCwgamRlbHRhPSVsaSlcbiIsCi0JCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAotCQkJCSAgICAgKGxvbmcpb2xkX2h3X3B0ciwgamRlbHRhKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJaHdfYmFzZSA9IDA7Ci0JCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwotCX0KLQkvKiBEbyBqaWZmaWVzIGNoZWNrIG9ubHkgaW4geHJ1bl9kZWJ1ZyBtb2RlICovCi0JaWYgKCF4cnVuX2RlYnVnKHN1YnN0cmVhbSwgNCkpCi0JCWdvdG8gbm9famlmZmllc19jaGVjazsKLQlpZiAoZGVsdGEgPCBydW50aW1lLT5kZWxheSkKLQkJZ290byBub19qaWZmaWVzX2NoZWNrOwotCWRlbHRhIC09IHJ1bnRpbWUtPmRlbGF5OwotCWlmICgoKGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSkgPiBqZGVsdGEgKyBIWi8xMDApIHsKLQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKLQkJCSAgICAgImh3X3B0ciBza2lwcGluZyEgIgotCQkJICAgICAiKHBvcz0lbGQsIGRlbHRhPSVsZCwgcGVyaW9kPSVsZCwgamRlbHRhPSVsdS8lbHUpXG4iLAotCQkJICAgICAobG9uZylwb3MsIChsb25nKWRlbHRhLAotCQkJICAgICAobG9uZylydW50aW1lLT5wZXJpb2Rfc2l6ZSwgamRlbHRhLAotCQkJICAgICAoKGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0gbm9famlmZmllc19jaGVjazoKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgotCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQotCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKLQotCWlmIChydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9PSBuZXdfaHdfcHRyKQotCQlyZXR1cm4gMDsKLQotCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gaHdfYmFzZTsKLQlydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9IG5ld19od19wdHI7Ci0JcnVudGltZS0+aHdfcHRyX2ppZmZpZXMgPSBqaWZmaWVzOwotCWlmIChydW50aW1lLT50c3RhbXBfbW9kZSA9PSBTTkRSVl9QQ01fVFNUQU1QX0VOQUJMRSkKLQkJc25kX3BjbV9nZXR0aW1lKHJ1bnRpbWUsIChzdHJ1Y3QgdGltZXNwZWMgKikmcnVudGltZS0+c3RhdHVzLT50c3RhbXApOwotCi0JcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN1YnN0cmVhbSwgcnVudGltZSk7CisJcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cjAoc3Vic3RyZWFtLCAwKTsKIH0KIAogLyoqCkBAIC03NDUsMTAgKzc2NiwxMyBAQAogCQkJdW5zaWduZWQgaW50IHJhdHNfY291bnQsIHN0cnVjdCBzbmRfcmF0bnVtICpyYXRzLAogCQkJdW5zaWduZWQgaW50ICpudW1wLCB1bnNpZ25lZCBpbnQgKmRlbnApCiB7Ci0JdW5zaWduZWQgaW50IGJlc3RfbnVtLCBiZXN0X2RpZmYsIGJlc3RfZGVuOworCXVuc2lnbmVkIGludCBiZXN0X251bSwgYmVzdF9kZW47CisJaW50IGJlc3RfZGlmZjsKIAl1bnNpZ25lZCBpbnQgazsKIAlzdHJ1Y3Qgc25kX2ludGVydmFsIHQ7CiAJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0X251bSwgcmVzdWx0X2RlbjsKKwlpbnQgcmVzdWx0X2RpZmY7CiAKIAliZXN0X251bSA9IGJlc3RfZGVuID0gYmVzdF9kaWZmID0gMDsKIAlmb3IgKGsgPSAwOyBrIDwgcmF0c19jb3VudDsgKytrKSB7CkBAIC03NzAsNiArNzk0LDggQEAKIAkJCQlkZW4gLT0gcjsKIAkJfQogCQlkaWZmID0gbnVtIC0gcSAqIGRlbjsKKwkJaWYgKGRpZmYgPCAwKQorCQkJZGlmZiA9IC1kaWZmOwogCQlpZiAoYmVzdF9udW0gPT0gMCB8fAogCQkgICAgZGlmZiAqIGJlc3RfZGVuIDwgYmVzdF9kaWZmICogZGVuKSB7CiAJCQliZXN0X2RpZmYgPSBkaWZmOwpAQCAtNzg0LDYgKzgxMCw5IEBACiAJdC5taW4gPSBkaXZfZG93bihiZXN0X251bSwgYmVzdF9kZW4pOwogCXQub3Blbm1pbiA9ICEhKGJlc3RfbnVtICUgYmVzdF9kZW4pOwogCQorCXJlc3VsdF9udW0gPSBiZXN0X251bTsKKwlyZXN1bHRfZGlmZiA9IGJlc3RfZGlmZjsKKwlyZXN1bHRfZGVuID0gYmVzdF9kZW47CiAJYmVzdF9udW0gPSBiZXN0X2RlbiA9IGJlc3RfZGlmZiA9IDA7CiAJZm9yIChrID0gMDsgayA8IHJhdHNfY291bnQ7ICsraykgewogCQl1bnNpZ25lZCBpbnQgbnVtID0gcmF0c1trXS5udW07CkBAIC04MDYsNiArODM1LDggQEAKIAkJCQlkZW4gKz0gcmF0c1trXS5kZW5fc3RlcCAtIHI7CiAJCX0KIAkJZGlmZiA9IHEgKiBkZW4gLSBudW07CisJCWlmIChkaWZmIDwgMCkKKwkJCWRpZmYgPSAtZGlmZjsKIAkJaWYgKGJlc3RfbnVtID09IDAgfHwKIAkJICAgIGRpZmYgKiBiZXN0X2RlbiA8IGJlc3RfZGlmZiAqIGRlbikgewogCQkJYmVzdF9kaWZmID0gZGlmZjsKQEAgLTgyNSwxMCArODU2LDE0IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAoc25kX2ludGVydmFsX3NpbmdsZShpKSkgeworCQlpZiAoYmVzdF9kaWZmICogcmVzdWx0X2RlbiA8IHJlc3VsdF9kaWZmICogYmVzdF9kZW4pIHsKKwkJCXJlc3VsdF9udW0gPSBiZXN0X251bTsKKwkJCXJlc3VsdF9kZW4gPSBiZXN0X2RlbjsKKwkJfQogCQlpZiAobnVtcCkKLQkJCSpudW1wID0gYmVzdF9udW07CisJCQkqbnVtcCA9IHJlc3VsdF9udW07CiAJCWlmIChkZW5wKQotCQkJKmRlbnAgPSBiZXN0X2RlbjsKKwkJCSpkZW5wID0gcmVzdWx0X2RlbjsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NDMsNyArMTY3OCw3IEBACiAKIAlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycXNhdmUoc3Vic3RyZWFtLCBmbGFncyk7CiAJaWYgKCFzbmRfcGNtX3J1bm5pbmcoc3Vic3RyZWFtKSB8fAotCSAgICBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN1YnN0cmVhbSkgPCAwKQorCSAgICBzbmRfcGNtX3VwZGF0ZV9od19wdHIwKHN1YnN0cmVhbSwgMSkgPCAwKQogCQlnb3RvIF9lbmQ7CiAKIAlpZiAoc3Vic3RyZWFtLT50aW1lcl9ydW5uaW5nKQpAQCAtMTY3NCw3ICsxNzA5LDcgQEAKIAlsb25nIHRvdXQ7CiAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7Ci0JYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnRzbGVlcCwgJndhaXQpOwogCWZvciAoOzspIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQllcnIgPSAtRVJFU1RBUlRTWVM7CkBAIC0xNzE3LDcgKzE3NTIsNyBAQAogCQkJYnJlYWs7CiAJfQogIF9lbmRsb29wOgotCXJlbW92ZV93YWl0X3F1ZXVlKCZydW50aW1lLT5zbGVlcCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZydW50aW1lLT50c2xlZXAsICZ3YWl0KTsKIAkqYXZhaWxwID0gYXZhaWw7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE3NzYsNiArMTgxMSw3IEBACiAJCWdvdG8gX2VuZF91bmxvY2s7CiAJfQogCisJcnVudGltZS0+dHdha2UgPSAxOwogCXdoaWxlIChzaXplID4gMCkgewogCQlzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXMsIGFwcGxfcHRyLCBhcHBsX29mczsKIAkJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CkBAIC0xNzk3LDE1ICsxODMzLDE3IEBACiAJCWlmIChmcmFtZXMgPiBjb250KQogCQkJZnJhbWVzID0gY29udDsKIAkJaWYgKHNuZF9CVUdfT04oIWZyYW1lcykpIHsKKwkJCXJ1bnRpbWUtPnR3YWtlID0gMDsKIAkJCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWFwcGxfcHRyID0gcnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHI7CiAJCWFwcGxfb2ZzID0gYXBwbF9wdHIgJSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAkJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwotCQlpZiAoKGVyciA9IHRyYW5zZmVyKHN1YnN0cmVhbSwgYXBwbF9vZnMsIGRhdGEsIG9mZnNldCwgZnJhbWVzKSkgPCAwKQotCQkJZ290byBfZW5kOworCQllcnIgPSB0cmFuc2ZlcihzdWJzdHJlYW0sIGFwcGxfb2ZzLCBkYXRhLCBvZmZzZXQsIGZyYW1lcyk7CiAJCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHN1YnN0cmVhbSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBfZW5kX3VubG9jazsKIAkJc3dpdGNoIChydW50aW1lLT5zdGF0dXMtPnN0YXRlKSB7CiAJCWNhc2UgU05EUlZfUENNX1NUQVRFX1hSVU46CiAJCQllcnIgPSAtRVBJUEU7CkBAIC0xODM0LDggKzE4NzIsMTAgQEAKIAkJfQogCX0KICBfZW5kX3VubG9jazoKKwlydW50aW1lLT50d2FrZSA9IDA7CisJaWYgKHhmZXIgPiAwICYmIGVyciA+PSAwKQorCQlzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdWJzdHJlYW0sIHJ1bnRpbWUpOwogCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLSBfZW5kOgogCXJldHVybiB4ZmVyID4gMCA/IChzbmRfcGNtX3NmcmFtZXNfdCl4ZmVyIDogZXJyOwogfQogCkBAIC0xOTkzLDYgKzIwMzMsNyBAQAogCQlnb3RvIF9lbmRfdW5sb2NrOwogCX0KIAorCXJ1bnRpbWUtPnR3YWtlID0gMTsKIAl3aGlsZSAoc2l6ZSA+IDApIHsKIAkJc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLCBhcHBsX3B0ciwgYXBwbF9vZnM7CiAJCXNuZF9wY21fdWZyYW1lc190IGF2YWlsOwpAQCAtMjAyMSwxNSArMjA2MiwxNyBAQAogCQlpZiAoZnJhbWVzID4gY29udCkKIAkJCWZyYW1lcyA9IGNvbnQ7CiAJCWlmIChzbmRfQlVHX09OKCFmcmFtZXMpKSB7CisJCQlydW50aW1lLT50d2FrZSA9IDA7CiAJCQlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlhcHBsX3B0ciA9IHJ1bnRpbWUtPmNvbnRyb2wtPmFwcGxfcHRyOwogCQlhcHBsX29mcyA9IGFwcGxfcHRyICUgcnVudGltZS0+YnVmZmVyX3NpemU7CiAJCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLQkJaWYgKChlcnIgPSB0cmFuc2ZlcihzdWJzdHJlYW0sIGFwcGxfb2ZzLCBkYXRhLCBvZmZzZXQsIGZyYW1lcykpIDwgMCkKLQkJCWdvdG8gX2VuZDsKKwkJZXJyID0gdHJhbnNmZXIoc3Vic3RyZWFtLCBhcHBsX29mcywgZGF0YSwgb2Zmc2V0LCBmcmFtZXMpOwogCQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX2VuZF91bmxvY2s7CiAJCXN3aXRjaCAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSkgewogCQljYXNlIFNORFJWX1BDTV9TVEFURV9YUlVOOgogCQkJZXJyID0gLUVQSVBFOwpAQCAtMjA1Miw4ICsyMDk1LDEwIEBACiAJCXhmZXIgKz0gZnJhbWVzOwogCX0KICBfZW5kX3VubG9jazoKKwlydW50aW1lLT50d2FrZSA9IDA7CisJaWYgKHhmZXIgPiAwICYmIGVyciA+PSAwKQorCQlzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdWJzdHJlYW0sIHJ1bnRpbWUpOwogCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLSBfZW5kOgogCXJldHVybiB4ZmVyID4gMCA/IChzbmRfcGNtX3NmcmFtZXNfdCl4ZmVyIDogZXJyOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYyBiL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCmluZGV4IGNhYTc3OTYuLmQ2ZDQ5ZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtNDM0LDMgKzQzNSw1NyBAQAogfQogCiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX2ZyZWVfcGFnZXMpOworCitpbnQgX3NuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKworCWlmIChQQ01fUlVOVElNRV9DSEVDSyhzdWJzdHJlYW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWlmIChydW50aW1lLT5kbWFfYXJlYSkgeworCQlpZiAocnVudGltZS0+ZG1hX2J5dGVzID49IHNpemUpCisJCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBsYXJnZSBlbm91Z2ggKi8KKwkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOworCX0KKwlydW50aW1lLT5kbWFfYXJlYSA9IF9fdm1hbGxvYyhzaXplLCBnZnBfZmxhZ3MsIFBBR0VfS0VSTkVMKTsKKwlpZiAoIXJ1bnRpbWUtPmRtYV9hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChfc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIpOworCisvKioKKyAqIHNuZF9wY21fbGliX2ZyZWVfdm1hbGxvY19idWZmZXIgLSBmcmVlIHZtYWxsb2MgYnVmZmVyCisgKiBAc3Vic3RyZWFtOiB0aGUgc3Vic3RyZWFtIHdpdGggYSBidWZmZXIgYWxsb2NhdGVkIGJ5CisgKglzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcigpCisgKi8KK2ludCBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisKKwlpZiAoUENNX1JVTlRJTUVfQ0hFQ0soc3Vic3RyZWFtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7CisJcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKTsKKworLyoqCisgKiBzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlIC0gbWFwIHZtYWxsb2MgYnVmZmVyIG9mZnNldCB0byBwYWdlIHN0cnVjdAorICogQHN1YnN0cmVhbTogdGhlIHN1YnN0cmVhbSB3aXRoIGEgYnVmZmVyIGFsbG9jYXRlZCBieQorICoJc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoKQorICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIHVzZWQgYXMgdGhlIHBhZ2UgY2FsbGJhY2sgaW4gdGhlIFBDTSBvcHMuCisgKi8KK3N0cnVjdCBwYWdlICpzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2Uoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldCk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCAyNWIwNjQxLi44NzI4ODc2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvc19wYXJhbXMuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtMzE1LDEwICszMTYsMTAgQEAKIAlpZiAoIXBhcmFtcy0+aW5mbykKIAkJcGFyYW1zLT5pbmZvID0gaHctPmluZm8gJiB+U05EUlZfUENNX0lORk9fRklGT19JTl9GUkFNRVM7CiAJaWYgKCFwYXJhbXMtPmZpZm9fc2l6ZSkgewotCQlpZiAoc25kX21hc2tfbWluKCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9GT1JNQVRdKSA9PQotCQkgICAgc25kX21hc2tfbWF4KCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9GT1JNQVRdKSAmJgotICAgICAgICAgICAgICAgICAgICBzbmRfbWFza19taW4oJnBhcmFtcy0+bWFza3NbU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTXSkgPT0KLSAgICAgICAgICAgICAgICAgICAgc25kX21hc2tfbWF4KCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMU10pKSB7CisJCW0gPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CisJCWkgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisJCWlmIChzbmRfbWFza19taW4obSkgPT0gc25kX21hc2tfbWF4KG0pICYmCisgICAgICAgICAgICAgICAgICAgIHNuZF9pbnRlcnZhbF9taW4oaSkgPT0gc25kX2ludGVydmFsX21heChpKSkgewogCQkJY2hhbmdlZCA9IHN1YnN0cmVhbS0+b3BzLT5pb2N0bChzdWJzdHJlYW0sCiAJCQkJCVNORFJWX1BDTV9JT0NUTDFfRklGT19TSVpFLCBwYXJhbXMpOwogCQkJaWYgKGNoYW5nZWQgPCAwKQpAQCAtMzY2LDYgKzM2NywzOCBAQAogCXJldHVybiB1c2VjczsKIH0KIAorc3RhdGljIGludCBjYWxjX2JvdW5kYXJ5KHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCit7CisJdV9pbnQ2NF90IGJvdW5kYXJ5OworCisJYm91bmRhcnkgPSAodV9pbnQ2NF90KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplICoKKwkJICAgKHVfaW50NjRfdClydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKwkvKiB0cnkgdG8gZmluZCBsb3dlc3QgY29tbW9uIG11bHRpcGxlIGZvciBidWZmZXIgYW5kIHBlcmlvZCAqLworCWlmIChib3VuZGFyeSA+IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJdV9pbnQzMl90IHJlbWFpbmRlciA9IC0xOworCQl1X2ludDMyX3QgZGl2aWRlbnQgPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJdV9pbnQzMl90IGRpdmlzb3IgPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJd2hpbGUgKHJlbWFpbmRlcikgeworCQkJcmVtYWluZGVyID0gZGl2aWRlbnQgJSBkaXZpc29yOworCQkJaWYgKHJlbWFpbmRlcikgeworCQkJCWRpdmlkZW50ID0gZGl2aXNvcjsKKwkJCQlkaXZpc29yID0gcmVtYWluZGVyOworCQkJfQorCQl9CisJCWJvdW5kYXJ5ID0gZGl2X3U2NChib3VuZGFyeSwgZGl2aXNvcik7CisJCWlmIChib3VuZGFyeSA+IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisjZW5kaWYKKwlpZiAoYm91bmRhcnkgPT0gMCkKKwkJcmV0dXJuIC1FUkFOR0U7CisJcnVudGltZS0+Ym91bmRhcnkgPSBib3VuZGFyeTsKKwl3aGlsZSAocnVudGltZS0+Ym91bmRhcnkgKiAyIDw9IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCXJ1bnRpbWUtPmJvdW5kYXJ5ICo9IDI7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc25kX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewpAQCAtNDQxLDkgKzQ3NCw5IEBACiAJcnVudGltZS0+c3RvcF90aHJlc2hvbGQgPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAlydW50aW1lLT5zaWxlbmNlX3RocmVzaG9sZCA9IDA7CiAJcnVudGltZS0+c2lsZW5jZV9zaXplID0gMDsKLQlydW50aW1lLT5ib3VuZGFyeSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCXdoaWxlIChydW50aW1lLT5ib3VuZGFyeSAqIDIgPD0gTE9OR19NQVggLSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJcnVudGltZS0+Ym91bmRhcnkgKj0gMjsKKwllcnIgPSBjYWxjX2JvdW5kYXJ5KHJ1bnRpbWUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIF9lcnJvcjsKIAogCXNuZF9wY21fdGltZXJfcmVzb2x1dGlvbl9jaGFuZ2Uoc3Vic3RyZWFtKTsKIAlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gU05EUlZfUENNX1NUQVRFX1NFVFVQOwpAQCAtNTE2LDYgKzU0OSw3IEBACiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX3N3X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisJaW50IGVycjsKIAogCWlmIChQQ01fUlVOVElNRV9DSEVDSyhzdWJzdHJlYW0pKQogCQlyZXR1cm4gLUVOWElPOwpAQCAtNTQwLDYgKzU3NCw3IEBACiAJCWlmIChwYXJhbXMtPnNpbGVuY2VfdGhyZXNob2xkID4gcnVudGltZS0+YnVmZmVyX3NpemUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJZXJyID0gMDsKIAlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOwogCXJ1bnRpbWUtPnRzdGFtcF9tb2RlID0gcGFyYW1zLT50c3RhbXBfbW9kZTsKIAlydW50aW1lLT5wZXJpb2Rfc3RlcCA9IHBhcmFtcy0+cGVyaW9kX3N0ZXA7CkBAIC01NTMsMTAgKzU4OCwxMCBAQAogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCQkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKIAkJCXNuZF9wY21fcGxheWJhY2tfc2lsZW5jZShzdWJzdHJlYW0sIFVMT05HX01BWCk7Ci0JCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwkJZXJyID0gc25kX3BjbV91cGRhdGVfc3RhdGUoc3Vic3RyZWFtLCBydW50aW1lKTsKIAl9CiAJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9zd19wYXJhbXNfdXNlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTkxNyw2ICs5NTIsNyBAQAogCQlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gc3RhdGU7CiAJfQogCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwl3YWtlX3VwKCZydW50aW1lLT50c2xlZXApOwogfQogCiBzdGF0aWMgc3RydWN0IGFjdGlvbl9vcHMgc25kX3BjbV9hY3Rpb25fc3RvcCA9IHsKQEAgLTEwMDIsNiArMTAzOCw3IEBACiAJCQkJCSBTTkRSVl9USU1FUl9FVkVOVF9NUEFVU0UsCiAJCQkJCSAmcnVudGltZS0+dHJpZ2dlcl90c3RhbXApOwogCQl3YWtlX3VwKCZydW50aW1lLT5zbGVlcCk7CisJCXdha2VfdXAoJnJ1bnRpbWUtPnRzbGVlcCk7CiAJfSBlbHNlIHsKIAkJcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9IFNORFJWX1BDTV9TVEFURV9SVU5OSU5HOwogCQlpZiAoc3Vic3RyZWFtLT50aW1lcikKQEAgLTEwNTksNiArMTA5Niw3IEBACiAJcnVudGltZS0+c3RhdHVzLT5zdXNwZW5kZWRfc3RhdGUgPSBydW50aW1lLT5zdGF0dXMtPnN0YXRlOwogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEOwogCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwl3YWtlX3VwKCZydW50aW1lLT50c2xlZXApOwogfQogCiBzdGF0aWMgc3RydWN0IGFjdGlvbl9vcHMgc25kX3BjbV9hY3Rpb25fc3VzcGVuZCA9IHsKQEAgLTMxNjIsOSArMzIwMCw3IEBACiAJbG9uZyBzaXplOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCi0jaWZkZWYgcGdwcm90X25vbmNhY2hlZAogCWFyZWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQoYXJlYS0+dm1fcGFnZV9wcm90KTsKLSNlbmRpZgogCWFyZWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwogCXNpemUgPSBhcmVhLT52bV9lbmQgLSBhcmVhLT52bV9zdGFydDsKIAlvZmZzZXQgPSBhcmVhLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwpAQCAtMzE3OCw2ICszMjE0LDE1IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX21tYXBfaW9tZW0pOwogI2VuZGlmIC8qIFNORFJWX1BDTV9JTkZPX01NQVAgKi8KIAorLyogbW1hcCBjYWxsYmFjayB3aXRoIHBncHJvdF9ub25jYWNoZWQgKi8KK2ludCBzbmRfcGNtX2xpYl9tbWFwX25vbmNhY2hlZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCit7CisJYXJlYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZChhcmVhLT52bV9wYWdlX3Byb3QpOworCXJldHVybiBzbmRfcGNtX2RlZmF1bHRfbW1hcChzdWJzdHJlYW0sIGFyZWEpOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9tbWFwX25vbmNhY2hlZCk7CisKIC8qCiAgKiBtbWFwIERNQSBidWZmZXIKICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCmluZGV4IDhjYTJiZTMuLjQ4ZWNhOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfY2xpZW50bWdyLmMKQEAgLTIxOTAsNyArMjE5MCw3IEBACiAJCWlmIChwLT5jbWQgPT0gY21kKQogCQkJcmV0dXJuIHAtPmZ1bmMoY2xpZW50LCBhcmcpOwogCX0KLQlzbmRfcHJpbnRkKCJzZXEgdW5rbm93biBpb2N0bCgpIDB4JXggKHR5cGU9JyVjJywgbnVtYmVyPTB4JTJ4KVxuIiwKKwlzbmRfcHJpbnRkKCJzZXEgdW5rbm93biBpb2N0bCgpIDB4JXggKHR5cGU9JyVjJywgbnVtYmVyPTB4JTAyeClcbiIsCiAJCSAgIGNtZCwgX0lPQ19UWVBFKGNtZCksIF9JT0NfTlIoY21kKSk7CiAJcmV0dXJuIC1FTk9UVFk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfdGltZXIuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV90aW1lci5jCmluZGV4IGY3NDVjMzEuLjE2MGIxYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV90aW1lci5jCkBAIC0zMywyMiArMzMsMjEgQEAKIAogI2RlZmluZSBTS0VXX0JBU0UJMHgxMDAwMAkvKiAxNmJpdCBzaGlmdCAqLwogCi1zdGF0aWMgdm9pZCBzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24oc3RydWN0IHNuZF9zZXFfdGltZXJfdGljayAqdGljaywKLQkJCQkJICAgICAgaW50IHRlbXBvLCBpbnQgcHBxKQorc3RhdGljIHZvaWQgc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKHN0cnVjdCBzbmRfc2VxX3RpbWVyICp0bXIpCiB7Ci0JaWYgKHRlbXBvIDwgMTAwMDAwMCkKLQkJdGljay0+cmVzb2x1dGlvbiA9ICh0ZW1wbyAqIDEwMDApIC8gcHBxOworCWlmICh0bXItPnRlbXBvIDwgMTAwMDAwMCkKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gPSAodG1yLT50ZW1wbyAqIDEwMDApIC8gdG1yLT5wcHE7CiAJZWxzZSB7CiAJCS8qIG1pZ2h0IG92ZXJmbG93Li4gKi8KIAkJdW5zaWduZWQgaW50IHM7Ci0JCXMgPSB0ZW1wbyAlIHBwcTsKLQkJcyA9IChzICogMTAwMCkgLyBwcHE7Ci0JCXRpY2stPnJlc29sdXRpb24gPSAodGVtcG8gLyBwcHEpICogMTAwMDsKLQkJdGljay0+cmVzb2x1dGlvbiArPSBzOworCQlzID0gdG1yLT50ZW1wbyAlIHRtci0+cHBxOworCQlzID0gKHMgKiAxMDAwKSAvIHRtci0+cHBxOworCQl0bXItPnRpY2sucmVzb2x1dGlvbiA9ICh0bXItPnRlbXBvIC8gdG1yLT5wcHEpICogMTAwMDsKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gKz0gczsKIAl9Ci0JaWYgKHRpY2stPnJlc29sdXRpb24gPD0gMCkKLQkJdGljay0+cmVzb2x1dGlvbiA9IDE7Ci0Jc25kX3NlcV90aW1lcl91cGRhdGVfdGljayh0aWNrLCAwKTsKKwlpZiAodG1yLT50aWNrLnJlc29sdXRpb24gPD0gMCkKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gPSAxOworCXNuZF9zZXFfdGltZXJfdXBkYXRlX3RpY2soJnRtci0+dGljaywgMCk7CiB9CiAKIC8qIGNyZWF0ZSBuZXcgdGltZXIgKGNvbnN0cnVjdG9yKSAqLwpAQCAtOTYsNyArOTUsNyBAQAogCS8qIHNldHVwIGRlZmF1bHRzICovCiAJdG1yLT5wcHEgPSA5NjsJCS8qIDk2IFBQUSAqLwogCXRtci0+dGVtcG8gPSA1MDAwMDA7CS8qIDEyMCBCUE0gKi8KLQlzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24oJnRtci0+dGljaywgdG1yLT50ZW1wbywgdG1yLT5wcHEpOworCXNuZF9zZXFfdGltZXJfc2V0X3RpY2tfcmVzb2x1dGlvbih0bXIpOwogCXRtci0+cnVubmluZyA9IDA7CiAKIAl0bXItPnR5cGUgPSBTTkRSVl9TRVFfVElNRVJfQUxTQTsKQEAgLTE4MCw3ICsxNzksNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0bXItPmxvY2ssIGZsYWdzKTsKIAlpZiAoKHVuc2lnbmVkIGludCl0ZW1wbyAhPSB0bXItPnRlbXBvKSB7CiAJCXRtci0+dGVtcG8gPSB0ZW1wbzsKLQkJc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKCZ0bXItPnRpY2ssIHRtci0+dGVtcG8sIHRtci0+cHBxKTsKKwkJc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKHRtcik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtci0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtMjA1LDcgKzIwNCw3IEBACiAJfQogCiAJdG1yLT5wcHEgPSBwcHE7Ci0Jc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKCZ0bXItPnRpY2ssIHRtci0+dGVtcG8sIHRtci0+cHBxKTsKKwlzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24odG1yKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bXItPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCAyNTJlMDRjLi43ZjQxOTkwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC00NSwxMDkgKzQ1LDIzIEBACiAjZGVmaW5lIE1BWF9QQ01fU1VCU1RSRUFNUwkxMjgKICNkZWZpbmUgTUFYX01JRElfREVWSUNFUwkyCiAKLSNpZiAwIC8qIGVtdTEwazEgZW11bGF0aW9uICovCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRQkJKDEyOCAqIDEwMjQpCi1zdGF0aWMgaW50IGVtdTEwazFfcGxheWJhY2tfY29uc3RyYWludHMoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKLXsKLQlpbnQgZXJyOwotCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDI1NiwgVUlOVF9NQVgpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOwotfQotI2RlZmluZSBhZGRfcGxheWJhY2tfY29uc3RyYWludHMgZW11MTBrMV9wbGF5YmFja19jb25zdHJhaW50cwotI2VuZGlmCi0KLSNpZiAwIC8qIFJNRTk2NTIgZW11bGF0aW9uICovCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRQkJKDI2ICogNjQgKiAxMDI0KQotI2RlZmluZSBVU0VfRk9STUFUUwkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTgkyNgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTI2Ci0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMgotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTIKLSNlbmRpZgotCi0jaWYgMCAvKiBJQ0UxNzEyIGVtdWxhdGlvbiAqLwotI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgyNTYgKiAxMDI0KQotI2RlZmluZSBVU0VfRk9STUFUUwkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTgkxMAotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTEwCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMQotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTEwMjQKLSNlbmRpZgotCi0jaWYgMCAvKiBVREExMzQxIGVtdWxhdGlvbiAqLwotI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgxNjM4MCkKLSNkZWZpbmUgVVNFX0ZPUk1BVFMJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4JMgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTIKLSNkZWZpbmUgVVNFX1BFUklPRFNfTUlOCQkyCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01BWAkJMjU1Ci0jZW5kaWYKLQotI2lmIDAgLyogc2ltcGxlIEFDOTcgYnJpZGdlIChpbnRlbDh4MCkgd2l0aCA0OGtIeiBBQzk3IG9ubHkgY29kZWMgKi8KLSNkZWZpbmUgVVNFX0ZPUk1BVFMJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4JMgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTIKLSNkZWZpbmUgVVNFX1JBVEUJCVNORFJWX1BDTV9SQVRFXzQ4MDAwCi0jZGVmaW5lIFVTRV9SQVRFX01JTgkJNDgwMDAKLSNkZWZpbmUgVVNFX1JBVEVfTUFYCQk0ODAwMAotI2VuZGlmCi0KLSNpZiAwIC8qIENBMDEwNiAqLwotI2RlZmluZSBVU0VfRk9STUFUUwkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTgkyCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NQVgJMgotI2RlZmluZSBVU0VfUkFURQkJKFNORFJWX1BDTV9SQVRFXzQ4MDAwfFNORFJWX1BDTV9SQVRFXzk2MDAwfFNORFJWX1BDTV9SQVRFXzE5MjAwMCkgCi0jZGVmaW5lIFVTRV9SQVRFX01JTgkJNDgwMDAgCi0jZGVmaW5lIFVTRV9SQVRFX01BWAkJMTkyMDAwCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRQkJKCg2NTUzNi02NCkqOCkKLSNkZWZpbmUgTUFYX1BFUklPRF9TSVpFCQkoNjU1MzYtNjQpCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMgotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTgKLSNlbmRpZgotCi0KIC8qIGRlZmF1bHRzICovCi0jaWZuZGVmIE1BWF9CVUZGRVJfU0laRQogI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSg2NCoxMDI0KQotI2VuZGlmCi0jaWZuZGVmIE1BWF9QRVJJT0RfU0laRQorI2RlZmluZSBNSU5fUEVSSU9EX1NJWkUJCTY0CiAjZGVmaW5lIE1BWF9QRVJJT0RfU0laRQkJTUFYX0JVRkZFUl9TSVpFCi0jZW5kaWYKLSNpZm5kZWYgVVNFX0ZPUk1BVFMKICNkZWZpbmUgVVNFX0ZPUk1BVFMgCQkoU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKQotI2VuZGlmCi0jaWZuZGVmIFVTRV9SQVRFCiAjZGVmaW5lIFVTRV9SQVRFCQlTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTIHwgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMAogI2RlZmluZSBVU0VfUkFURV9NSU4JCTU1MDAKICNkZWZpbmUgVVNFX1JBVEVfTUFYCQk0ODAwMAotI2VuZGlmCi0jaWZuZGVmIFVTRV9DSEFOTkVMU19NSU4KICNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTiAJMQotI2VuZGlmCi0jaWZuZGVmIFVTRV9DSEFOTkVMU19NQVgKICNkZWZpbmUgVVNFX0NIQU5ORUxTX01BWCAJMgotI2VuZGlmCi0jaWZuZGVmIFVTRV9QRVJJT0RTX01JTgogI2RlZmluZSBVU0VfUEVSSU9EU19NSU4gCTEKLSNlbmRpZgotI2lmbmRlZiBVU0VfUEVSSU9EU19NQVgKICNkZWZpbmUgVVNFX1BFUklPRFNfTUFYIAkxMDI0Ci0jZW5kaWYKLSNpZm5kZWYgYWRkX3BsYXliYWNrX2NvbnN0cmFpbnRzCi0jZGVmaW5lIGFkZF9wbGF5YmFja19jb25zdHJhaW50cyh4KSAwCi0jZW5kaWYKLSNpZm5kZWYgYWRkX2NhcHR1cmVfY29uc3RyYWludHMKLSNkZWZpbmUgYWRkX2NhcHR1cmVfY29uc3RyYWludHMoeCkgMAotI2VuZGlmCiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IHsxLCBbMSAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMH07CitzdGF0aWMgY2hhciAqbW9kZWxbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSBOVUxMfTsKIHN0YXRpYyBpbnQgcGNtX2RldnNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAxfTsKIHN0YXRpYyBpbnQgcGNtX3N1YnN0cmVhbXNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSA4fTsKIC8vc3RhdGljIGludCBtaWRpX2RldnNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAyfTsKQEAgLTE2Miw2ICs3Niw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBkdW1teSBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIHRoaXMgZHVtbXkgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KG1vZGVsLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZGVsLCAiU291bmRjYXJkIG1vZGVsLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBjbV9kZXZzLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwY21fZGV2cywgIlBDTSBkZXZpY2VzICMgKDAtNCkgZm9yIGR1bW15IGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShwY21fc3Vic3RyZWFtcywgaW50LCBOVUxMLCAwNDQ0KTsKQEAgLTE5Myw5ICsxMDksMjggQEAKIAlzbmRfcGNtX3VmcmFtZXNfdCAoKnBvaW50ZXIpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKTsKIH07CiAKK3N0cnVjdCBkdW1teV9tb2RlbCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpwbGF5YmFja19jb25zdHJhaW50cykoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CisJaW50ICgqY2FwdHVyZV9jb25zdHJhaW50cykoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CisJdTY0IGZvcm1hdHM7CisJc2l6ZV90IGJ1ZmZlcl9ieXRlc19tYXg7CisJc2l6ZV90IHBlcmlvZF9ieXRlc19taW47CisJc2l6ZV90IHBlcmlvZF9ieXRlc19tYXg7CisJdW5zaWduZWQgaW50IHBlcmlvZHNfbWluOworCXVuc2lnbmVkIGludCBwZXJpb2RzX21heDsKKwl1bnNpZ25lZCBpbnQgcmF0ZXM7CisJdW5zaWduZWQgaW50IHJhdGVfbWluOworCXVuc2lnbmVkIGludCByYXRlX21heDsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbWluOworCXVuc2lnbmVkIGludCBjaGFubmVsc19tYXg7Cit9OworCiBzdHJ1Y3Qgc25kX2R1bW15IHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IGR1bW15X21vZGVsICptb2RlbDsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9odzsKIAlzcGlubG9ja190IG1peGVyX2xvY2s7CiAJaW50IG1peGVyX3ZvbHVtZVtNSVhFUl9BRERSX0xBU1QrMV1bMl07CiAJaW50IGNhcHR1cmVfc291cmNlW01JWEVSX0FERFJfTEFTVCsxXVsyXTsKQEAgLTIwMyw2ICsxMzgsOTIgQEAKIH07CiAKIC8qCisgKiBjYXJkIG1vZGVscworICovCisKK3N0YXRpYyBpbnQgZW11MTBrMV9wbGF5YmFja19jb25zdHJhaW50cyhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCWludCBlcnI7CisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9CWVRFUywgMjU2LCBVSU5UX01BWCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkdW1teV9tb2RlbCBtb2RlbF9lbXUxMGsxID0geworCS5uYW1lID0gImVtdTEwazEiLAorCS5wbGF5YmFja19jb25zdHJhaW50cyA9IGVtdTEwazFfcGxheWJhY2tfY29uc3RyYWludHMsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAxMjggKiAxMDI0LAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX3JtZTk2NTIgPSB7CisJLm5hbWUgPSAicm1lOTY1MiIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNiAqIDY0ICogMTAyNCwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAorCS5jaGFubmVsc19taW4gPSAyNiwKKwkuY2hhbm5lbHNfbWF4ID0gMjYsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyLAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX2ljZTE3MTIgPSB7CisJLm5hbWUgPSAiaWNlMTcxMiIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNTYgKiAxMDI0LAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisJLmNoYW5uZWxzX21pbiA9IDEwLAorCS5jaGFubmVsc19tYXggPSAxMCwKKwkucGVyaW9kc19taW4gPSAxLAorCS5wZXJpb2RzX21heCA9IDEwMjQsCit9OworCitzdHJ1Y3QgZHVtbXlfbW9kZWwgbW9kZWxfdWRhMTM0MSA9IHsKKwkubmFtZSA9ICJ1ZGExMzQxIiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDE2MzgwLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyNTUsCit9OworCitzdHJ1Y3QgZHVtbXlfbW9kZWwgbW9kZWxfYWM5NyA9IHsKKwkubmFtZSA9ICJhYzk3IiwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCS5yYXRlX21pbiA9IDQ4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX2NhMDEwNiA9IHsKKwkubmFtZSA9ICJjYTAxMDYiLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAoKDY1NTM2LTY0KSo4KSwKKwkucGVyaW9kX2J5dGVzX21heCA9ICg2NTUzNi02NCksCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSA4LAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwfFNORFJWX1BDTV9SQVRFXzk2MDAwfFNORFJWX1BDTV9SQVRFXzE5MjAwMCwKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSAxOTIwMDAsCit9OworCitzdHJ1Y3QgZHVtbXlfbW9kZWwgKmR1bW15X21vZGVsc1tdID0geworCSZtb2RlbF9lbXUxMGsxLAorCSZtb2RlbF9ybWU5NjUyLAorCSZtb2RlbF9pY2UxNzEyLAorCSZtb2RlbF91ZGExMzQxLAorCSZtb2RlbF9hYzk3LAorCSZtb2RlbF9jYTAxMDYsCisJTlVMTAorfTsKKworLyoKICAqIHN5c3RlbSB0aW1lciBpbnRlcmZhY2UKICAqLwogCkBAIC01MDksNyArNTMwLDcgQEAKIAkuY2hhbm5lbHNfbWluID0JCVVTRV9DSEFOTkVMU19NSU4sCiAJLmNoYW5uZWxzX21heCA9CQlVU0VfQ0hBTk5FTFNfTUFYLAogCS5idWZmZXJfYnl0ZXNfbWF4ID0JTUFYX0JVRkZFUl9TSVpFLAotCS5wZXJpb2RfYnl0ZXNfbWluID0JNjQsCisJLnBlcmlvZF9ieXRlc19taW4gPQlNSU5fUEVSSU9EX1NJWkUsCiAJLnBlcmlvZF9ieXRlc19tYXggPQlNQVhfUEVSSU9EX1NJWkUsCiAJLnBlcmlvZHNfbWluID0JCVVTRV9QRVJJT0RTX01JTiwKIAkucGVyaW9kc19tYXggPQkJVVNFX1BFUklPRFNfTUFYLApAQCAtNTM4LDYgKzU1OSw3IEBACiBzdGF0aWMgaW50IGR1bW15X3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfZHVtbXkgKmR1bW15ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBkdW1teV9tb2RlbCAqbW9kZWwgPSBkdW1teS0+bW9kZWw7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgZXJyOwogCkBAIC01NTEsNyArNTczLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXJ1bnRpbWUtPmh3ID0gZHVtbXlfcGNtX2hhcmR3YXJlOworCXJ1bnRpbWUtPmh3ID0gZHVtbXktPnBjbV9odzsKIAlpZiAoc3Vic3RyZWFtLT5wY20tPmRldmljZSAmIDEpIHsKIAkJcnVudGltZS0+aHcuaW5mbyAmPSB+U05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQ7CiAJCXJ1bnRpbWUtPmh3LmluZm8gfD0gU05EUlZfUENNX0lORk9fTk9OSU5URVJMRUFWRUQ7CkBAIC01NjAsMTAgKzU4MiwxNiBAQAogCQlydW50aW1lLT5ody5pbmZvICY9IH4oU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCQkJICAgICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCk7CiAKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJZXJyID0gYWRkX3BsYXliYWNrX2NvbnN0cmFpbnRzKHN1YnN0cmVhbS0+cnVudGltZSk7Ci0JZWxzZQotCQllcnIgPSBhZGRfY2FwdHVyZV9jb25zdHJhaW50cyhzdWJzdHJlYW0tPnJ1bnRpbWUpOworCWlmIChtb2RlbCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWlmIChtb2RlbC0+cGxheWJhY2tfY29uc3RyYWludHMpCisJCQllcnIgPSBtb2RlbC0+cGxheWJhY2tfY29uc3RyYWludHMoc3Vic3RyZWFtLT5ydW50aW1lKTsKKwl9IGVsc2UgeworCQlpZiAobW9kZWwtPmNhcHR1cmVfY29uc3RyYWludHMpCisJCQllcnIgPSBtb2RlbC0+Y2FwdHVyZV9jb25zdHJhaW50cyhzdWJzdHJlYW0tPnJ1bnRpbWUpOworCX0KIAlpZiAoZXJyIDwgMCkgewogCQlkdW1teS0+dGltZXJfb3BzLT5mcmVlKHN1YnN0cmVhbSk7CiAJCXJldHVybiBlcnI7CkBAIC04MjMsMTcgKzg1MSwxOSBAQAogLyoKICAqIHByb2MgaW50ZXJmYWNlCiAgKi8KLXN0YXRpYyB2b2lkIHByaW50X2Zvcm1hdHMoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQorc3RhdGljIHZvaWQgcHJpbnRfZm9ybWF0cyhzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSwKKwkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFNORFJWX1BDTV9GT1JNQVRfTEFTVDsgaSsrKSB7Ci0JCWlmIChkdW1teV9wY21faGFyZHdhcmUuZm9ybWF0cyAmICgxVUxMIDw8IGkpKQorCQlpZiAoZHVtbXktPnBjbV9ody5mb3JtYXRzICYgKDFVTEwgPDwgaSkpCiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgJXMiLCBzbmRfcGNtX2Zvcm1hdF9uYW1lKGkpKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X3JhdGVzKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3N0YXRpYyB2b2lkIHByaW50X3JhdGVzKHN0cnVjdCBzbmRfZHVtbXkgKmR1bW15LAorCQkJc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQogewogCXN0YXRpYyBpbnQgcmF0ZXNbXSA9IHsKIAkJNTUxMiwgODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCwKQEAgLTg0MSwxOSArODcxLDE5IEBACiAJfTsKIAlpbnQgaTsKIAotCWlmIChkdW1teV9wY21faGFyZHdhcmUucmF0ZXMgJiBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTKQorCWlmIChkdW1teS0+cGNtX2h3LnJhdGVzICYgU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUykKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiIGNvbnRpbnVvdXMiKTsKLQlpZiAoZHVtbXlfcGNtX2hhcmR3YXJlLnJhdGVzICYgU05EUlZfUENNX1JBVEVfS05PVCkKKwlpZiAoZHVtbXktPnBjbV9ody5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0tOT1QpCiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiBrbm90Iik7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXMpOyBpKyspCi0JCWlmIChkdW1teV9wY21faGFyZHdhcmUucmF0ZXMgJiAoMSA8PCBpKSkKKwkJaWYgKGR1bW15LT5wY21faHcucmF0ZXMgJiAoMSA8PCBpKSkKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlZCIsIHJhdGVzW2ldKTsKIH0KIAotI2RlZmluZSBnZXRfZHVtbXlfaW50X3B0cihvZnMpIFwKLQkodW5zaWduZWQgaW50ICopKChjaGFyICopJmR1bW15X3BjbV9oYXJkd2FyZSArIChvZnMpKQotI2RlZmluZSBnZXRfZHVtbXlfbGxfcHRyKG9mcykgXAotCSh1bnNpZ25lZCBsb25nIGxvbmcgKikoKGNoYXIgKikmZHVtbXlfcGNtX2hhcmR3YXJlICsgKG9mcykpCisjZGVmaW5lIGdldF9kdW1teV9pbnRfcHRyKGR1bW15LCBvZnMpIFwKKwkodW5zaWduZWQgaW50ICopKChjaGFyICopJigoZHVtbXkpLT5wY21faHcpICsgKG9mcykpCisjZGVmaW5lIGdldF9kdW1teV9sbF9wdHIoZHVtbXksIG9mcykgXAorCSh1bnNpZ25lZCBsb25nIGxvbmcgKikoKGNoYXIgKikmKChkdW1teSktPnBjbV9odykgKyAob2ZzKSkKIAogc3RydWN0IGR1bW15X2h3X2ZpZWxkIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtODg0LDIwICs5MTQsMjEgQEAKIHN0YXRpYyB2b2lkIGR1bW15X3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAogCQkJICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKKwlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaWVsZHMpOyBpKyspIHsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgIiwgZmllbGRzW2ldLm5hbWUpOwogCQlpZiAoZmllbGRzW2ldLnNpemUgPT0gc2l6ZW9mKGludCkpCiAJCQlzbmRfaXByaW50ZihidWZmZXIsIGZpZWxkc1tpXS5mb3JtYXQsCi0JCQkJICAgICpnZXRfZHVtbXlfaW50X3B0cihmaWVsZHNbaV0ub2Zmc2V0KSk7CisJCQkJKmdldF9kdW1teV9pbnRfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSk7CiAJCWVsc2UKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgZmllbGRzW2ldLmZvcm1hdCwKLQkJCQkgICAgKmdldF9kdW1teV9sbF9wdHIoZmllbGRzW2ldLm9mZnNldCkpOworCQkJCSpnZXRfZHVtbXlfbGxfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSk7CiAJCWlmICghc3RyY21wKGZpZWxkc1tpXS5uYW1lLCAiZm9ybWF0cyIpKQotCQkJcHJpbnRfZm9ybWF0cyhidWZmZXIpOworCQkJcHJpbnRfZm9ybWF0cyhkdW1teSwgYnVmZmVyKTsKIAkJZWxzZSBpZiAoIXN0cmNtcChmaWVsZHNbaV0ubmFtZSwgInJhdGVzIikpCi0JCQlwcmludF9yYXRlcyhidWZmZXIpOworCQkJcHJpbnRfcmF0ZXMoZHVtbXksIGJ1ZmZlcik7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAJfQogfQpAQCAtOTA1LDYgKzkzNiw3IEBACiBzdGF0aWMgdm9pZCBkdW1teV9wcm9jX3dyaXRlKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCiAJCQkgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKKwlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAJY2hhciBsaW5lWzY0XTsKIAogCXdoaWxlICghc25kX2luZm9fZ2V0X2xpbmUoYnVmZmVyLCBsaW5lLCBzaXplb2YobGluZSkpKSB7CkBAIC05MjQsOSArOTU2LDkgQEAKIAkJaWYgKHN0cmljdF9zdHJ0b3VsbChpdGVtLCAwLCAmdmFsKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoZmllbGRzW2ldLnNpemUgPT0gc2l6ZW9mKGludCkpCi0JCQkqZ2V0X2R1bW15X2ludF9wdHIoZmllbGRzW2ldLm9mZnNldCkgPSB2YWw7CisJCQkqZ2V0X2R1bW15X2ludF9wdHIoZHVtbXksIGZpZWxkc1tpXS5vZmZzZXQpID0gdmFsOwogCQllbHNlCi0JCQkqZ2V0X2R1bW15X2xsX3B0cihmaWVsZHNbaV0ub2Zmc2V0KSA9IHZhbDsKKwkJCSpnZXRfZHVtbXlfbGxfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSA9IHZhbDsKIAl9CiB9CiAKQEAgLTkzOCw2ICs5NzAsNyBAQAogCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIGR1bW15X3Byb2NfcmVhZCk7CiAJCWVudHJ5LT5jLnRleHQud3JpdGUgPSBkdW1teV9wcm9jX3dyaXRlOwogCQllbnRyeS0+bW9kZSB8PSBTX0lXVVNSOworCQllbnRyeS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAl9CiB9CiAjZWxzZQpAQCAtOTQ4LDYgKzk4MSw3IEBACiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfZHVtbXkgKmR1bW15OworCXN0cnVjdCBkdW1teV9tb2RlbCAqbSA9IE5VTEwsICoqbWRsOwogCWludCBpZHgsIGVycjsKIAlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKIApAQCAtOTU3LDYgKzk5MSwxNSBAQAogCQlyZXR1cm4gZXJyOwogCWR1bW15ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWR1bW15LT5jYXJkID0gY2FyZDsKKwlmb3IgKG1kbCA9IGR1bW15X21vZGVsczsgKm1kbCAmJiBtb2RlbFtkZXZdOyBtZGwrKykgeworCQlpZiAoc3RyY21wKG1vZGVsW2Rldl0sICgqbWRsKS0+bmFtZSkgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSJzbmQtZHVtbXk6IFVzaW5nIG1vZGVsICclcycgZm9yIGNhcmQgJWlcbiIsCisJCQkJKCptZGwpLT5uYW1lLCBjYXJkLT5udW1iZXIpOworCQkJbSA9IGR1bW15LT5tb2RlbCA9ICptZGw7CisJCQlicmVhazsKKwkJfQorCX0KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9QQ01fREVWSUNFUyAmJiBpZHggPCBwY21fZGV2c1tkZXZdOyBpZHgrKykgewogCQlpZiAocGNtX3N1YnN0cmVhbXNbZGV2XSA8IDEpCiAJCQlwY21fc3Vic3RyZWFtc1tkZXZdID0gMTsKQEAgLTk2Niw2ICsxMDA5LDMzIEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBfX25vZGV2OwogCX0KKworCWR1bW15LT5wY21faHcgPSBkdW1teV9wY21faGFyZHdhcmU7CisJaWYgKG0pIHsKKwkJaWYgKG0tPmZvcm1hdHMpCisJCQlkdW1teS0+cGNtX2h3LmZvcm1hdHMgPSBtLT5mb3JtYXRzOworCQlpZiAobS0+YnVmZmVyX2J5dGVzX21heCkKKwkJCWR1bW15LT5wY21faHcuYnVmZmVyX2J5dGVzX21heCA9IG0tPmJ1ZmZlcl9ieXRlc19tYXg7CisJCWlmIChtLT5wZXJpb2RfYnl0ZXNfbWluKQorCQkJZHVtbXktPnBjbV9ody5wZXJpb2RfYnl0ZXNfbWluID0gbS0+cGVyaW9kX2J5dGVzX21pbjsKKwkJaWYgKG0tPnBlcmlvZF9ieXRlc19tYXgpCisJCQlkdW1teS0+cGNtX2h3LnBlcmlvZF9ieXRlc19tYXggPSBtLT5wZXJpb2RfYnl0ZXNfbWF4OworCQlpZiAobS0+cGVyaW9kc19taW4pCisJCQlkdW1teS0+cGNtX2h3LnBlcmlvZHNfbWluID0gbS0+cGVyaW9kc19taW47CisJCWlmIChtLT5wZXJpb2RzX21heCkKKwkJCWR1bW15LT5wY21faHcucGVyaW9kc19tYXggPSBtLT5wZXJpb2RzX21heDsKKwkJaWYgKG0tPnJhdGVzKQorCQkJZHVtbXktPnBjbV9ody5yYXRlcyA9IG0tPnJhdGVzOworCQlpZiAobS0+cmF0ZV9taW4pCisJCQlkdW1teS0+cGNtX2h3LnJhdGVfbWluID0gbS0+cmF0ZV9taW47CisJCWlmIChtLT5yYXRlX21heCkKKwkJCWR1bW15LT5wY21faHcucmF0ZV9tYXggPSBtLT5yYXRlX21heDsKKwkJaWYgKG0tPmNoYW5uZWxzX21pbikKKwkJCWR1bW15LT5wY21faHcuY2hhbm5lbHNfbWluID0gbS0+Y2hhbm5lbHNfbWluOworCQlpZiAobS0+Y2hhbm5lbHNfbWF4KQorCQkJZHVtbXktPnBjbV9ody5jaGFubmVsc19tYXggPSBtLT5jaGFubmVsc19tYXg7CisJfQorCiAJZXJyID0gc25kX2NhcmRfZHVtbXlfbmV3X21peGVyKGR1bW15KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBfX25vZGV2OwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF9wY20uYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMKaW5kZXggNjY0NGQwMC4uMzVhMmY3MSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9wY20uYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jCkBAIC00Niw3ICs0Niw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KQEAgLTU2LDU1ICs1NSw2IEBACiAKIAogLyoKLSAqIHdlIHVzZSBhIHZtYWxsb2MnZWQgKHNnLSlidWZmZXIKLSAqLwotCi0vKiBnZXQgdGhlIHBoeXNpY2FsIHBhZ2UgcG9pbnRlciBvbiB0aGUgZ2l2ZW4gb2Zmc2V0ICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci19Ci0KLS8qCi0gKiBhbGxvY2F0ZSBhIGJ1ZmZlciB2aWEgdm1hbGxvY18zMigpLgotICogY2FsbGVkIGZyb20gaHdfcGFyYW1zCi0gKiBOT1RFOiB0aGlzIG1heSBiZSBjYWxsZWQgbm90IG9ubHkgb25jZSBwZXIgcGNtIG9wZW4hCi0gKi8KLXN0YXRpYyBpbnQgc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwotCWlmIChydW50aW1lLT5kbWFfYXJlYSkgewotCQkvKiBhbHJlYWR5IGFsbG9jYXRlZCAqLwotCQlpZiAocnVudGltZS0+ZG1hX2J5dGVzID49IHNpemUpCi0JCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBlbm91Z2ggbGFyZ2UgKi8KLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCX0KLQlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfMzIoc2l6ZSk7Ci0JaWYgKCEgcnVudGltZS0+ZG1hX2FyZWEpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChydW50aW1lLT5kbWFfYXJlYSwgMCwgc2l6ZSk7Ci0JcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKLQlyZXR1cm4gMTsgLyogY2hhbmdlZCAqLwotfQotCi0vKgotICogZnJlZSB0aGUgYnVmZmVyLgotICogY2FsbGVkIGZyb20gaHdfZnJlZSBjYWxsYmFjawotICogTk9URTogdGhpcyBtYXkgYmUgY2FsbGVkIG5vdCBvbmx5IG9uY2UgcGVyIHBjbSBvcGVuIQotICovCi1zdGF0aWMgaW50IHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0KLQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCXJldHVybiAwOwotfQotCi0KLS8qCiAgKiByZWFkIHRocmVlIHBlbmRpbmcgcGNtIGJ5dGVzIHZpYSBpbmIoKQogICovCiBzdGF0aWMgdm9pZCB2eF9wY21fcmVhZF9wZXJfYnl0ZXMoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsCkBAIC04NjUsNyArODE1LDggQEAKIHN0YXRpYyBpbnQgdnhfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCiAJCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKIHsKLQlyZXR1cm4gc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCXJldHVybiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jXzMyX2J1ZmZlcgorCQkJCQkoc3VicywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKIH0KIAogLyoKQEAgLTg3Myw3ICs4MjQsNyBAQAogICovCiBzdGF0aWMgaW50IHZ4X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKIHsKLQlyZXR1cm4gc25kX3BjbV9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnMpOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnMpOwogfQogCiAvKgpAQCAtOTUzLDcgKzkwNCw4IEBACiAJLnByZXBhcmUgPQl2eF9wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9CXZ4X3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0JdnhfcGNtX3BsYXliYWNrX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCkBAIC0xMTczLDcgKzExMjUsOCBAQAogCS5wcmVwYXJlID0JdnhfcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPQl2eF9wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9CXZ4X3BjbV9jYXB0dXJlX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvS2NvbmZpZyBiL3NvdW5kL2lzYS9LY29uZmlnCmluZGV4IDAyZmU4MWMuLjc1NWEwYTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9LY29uZmlnCisrKyBiL3NvdW5kL2lzYS9LY29uZmlnCkBAIC02MywxNSArNjMsMTYgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hZDE4NDguCiAKIGNvbmZpZyBTTkRfQUxTMTAwCi0JdHJpc3RhdGUgIkF2YW5jZSBMb2dpYyBBTFMxMDAvQUxTMTIwIgorCXRyaXN0YXRlICJEaWFtb25kIFRlY2guIERULTAxOXggYW5kIEF2YW5jZSBMb2dpYyBBTFN4eHgiCiAJZGVwZW5kcyBvbiBQTlAKIAlzZWxlY3QgSVNBUE5QCiAJc2VsZWN0IFNORF9PUEwzX0xJQgogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX1NCMTZfRFNQCiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gQXZhbmNlCi0JICBMb2dpYyBBTFMxMDAsIEFMUzExMCwgQUxTMTIwIGFuZCBBTFMyMDAgY2hpcHMuCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIERpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVggb3IgQXZhbmNlIExvZ2ljIGNoaXBzOiBBTFMwMDcsCisJICBBTFMxMDAsIEFMUzExMCwgQUxTMTIwIGFuZCBBTFMyMDAgY2hpcHMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hbHMxMDAuCkBAIC0xMjcsMjAgKzEyOCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0MjM2LgogCi1jb25maWcgU05EX0RUMDE5WAotCXRyaXN0YXRlICJEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTlYLCBBdmFuY2UgTG9naWMgQUxTLTAwNyIKLQlkZXBlbmRzIG9uIFBOUAotCXNlbGVjdCBJU0FQTlAKLQlzZWxlY3QgU05EX09QTDNfTElCCi0Jc2VsZWN0IFNORF9NUFU0MDFfVUFSVAotCXNlbGVjdCBTTkRfU0IxNl9EU1AKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIERpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVggb3IgQXZhbmNlIExvZ2ljIEFMUy0wMDcgY2hpcHMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHNuZC1kdDAxOXguCi0KIGNvbmZpZyBTTkRfRVM5NjgKIAl0cmlzdGF0ZSAiR2VuZXJpYyBFU1MgRVM5NjggZHJpdmVyIgogCWRlcGVuZHMgb24gUE5QCkBAIC0yNTIsNiArMjM5LDIyIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW50ZXJ3YXZlLXN0Yi4KIAorY29uZmlnIFNORF9KQVpaMTYKKwl0cmlzdGF0ZSAiTWVkaWEgVmlzaW9uIEphenoxNiBjYXJkIGFuZCBjb21wYXRpYmxlcyIKKwlzZWxlY3QgU05EX09QTDNfTElCCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAorCXNlbGVjdCBTTkRfU0I4X0RTUAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgTWVkaWEgVmlzaW9uIEphenoxNiBjaGlwc2V0OiBkaWdpdGFsIGNoaXAgTVZEMTIxNiAoSmF6ejE2KSwKKwkgIGNvZGVjIE1WQTQxNiAoQ1M0MjE2KSBhbmQgbWl4ZXIgTVZBNTE0IChJQ1MyNTE0KS4KKwkgIE1lZGlhIFZpc2lvbidzIEphenoxNiBjYXJkcyB3ZXJlIHNvbGQgdW5kZXIgbmFtZXMgUHJvIFNvbmljIDE2LAorCSAgUHJlbWl1bSAzLUQgYW5kIFBybyAzLUQuIFRoZXJlIHdlcmUgYWxzbyBPRU1zIGNhcmRzIHdpdGggdGhlCisJICBKYXp6MTYgY2hpcHNldC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWphenoxNi4KKwogY29uZmlnIFNORF9PUEwzU0EyCiAJdHJpc3RhdGUgIllhbWFoYSBPUEwzLVNBMi9TQTMiCiAJc2VsZWN0IFNORF9PUEwzX0xJQgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL01ha2VmaWxlIGIvc291bmQvaXNhL01ha2VmaWxlCmluZGV4IGI5MDZiOWEuLmM3M2QzMGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9NYWtlZmlsZQorKysgYi9zb3VuZC9pc2EvTWFrZWZpbGUKQEAgLTcsNyArNyw2IEBACiBzbmQtYWxzMTAwLW9ianMgOj0gYWxzMTAwLm8KIHNuZC1henQyMzIwLW9ianMgOj0gYXp0MjMyMC5vCiBzbmQtY21pODMzMC1vYmpzIDo9IGNtaTgzMzAubwotc25kLWR0MDE5eC1vYmpzIDo9IGR0MDE5eC5vCiBzbmQtZXMxOHh4LW9ianMgOj0gZXMxOHh4Lm8KIHNuZC1vcGwzc2EyLW9ianMgOj0gb3BsM3NhMi5vCiBzbmQtc2M2MDAwLW9ianMgOj0gc2M2MDAwLm8KQEAgLTE5LDcgKzE4LDYgQEAKIG9iai0kKENPTkZJR19TTkRfQUxTMTAwKSArPSBzbmQtYWxzMTAwLm8KIG9iai0kKENPTkZJR19TTkRfQVpUMjMyMCkgKz0gc25kLWF6dDIzMjAubwogb2JqLSQoQ09ORklHX1NORF9DTUk4MzMwKSArPSBzbmQtY21pODMzMC5vCi1vYmotJChDT05GSUdfU05EX0RUMDE5WCkgKz0gc25kLWR0MDE5eC5vCiBvYmotJChDT05GSUdfU05EX0VTMThYWCkgKz0gc25kLWVzMTh4eC5vCiBvYmotJChDT05GSUdfU05EX09QTDNTQTIpICs9IHNuZC1vcGwzc2EyLm8KIG9iai0kKENPTkZJR19TTkRfU0M2MDAwKSArPSBzbmQtc2M2MDAwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hbHMxMDAuYyBiL3NvdW5kL2lzYS9hbHMxMDAuYwppbmRleCA1ZmQ1MmU0Li4yMGJlY2M4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWxzMTAwLmMKKysrIGIvc291bmQvaXNhL2FsczEwMC5jCkBAIC0yLDkgKzIsMTMgQEAKIC8qCiAgICAgY2FyZC1hbHMxMDAuYyAtIGRyaXZlciBmb3IgQXZhbmNlIExvZ2ljIEFMUzEwMCBiYXNlZCBzb3VuZGNhcmRzLgogICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIGJ5IE1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PgorICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIGJ5IE1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PgogCiAgICAgVGhhbmtzIHRvIFBpZXJmcmFuY2VzY28gJ3FNMicgUGFzc2VyaW5pLgogCisgICAgR2VuZXJhbGlzZWQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gRFQtMDE5NiBhbmQgQUxTLTAwNyBjaGlwcworICAgIGJ5IEpvbmF0aGFuIFdvaXRoZSA8andvaXRoZUBwaHlzaWNzLmFkZWxhaWRlLmVkdS5hdT46IEp1bmUgMjAwMi4KKwogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMzMsMTAgKzM3LDEwIEBACiAKICNkZWZpbmUgUEZYICJhbHMxMDA6ICIKIAotTU9EVUxFX0FVVEhPUigiTWFzc2ltbyBQaWNjaW9uaSA8ZGFmYXN0aWRpb0BsaWJlcm8uaXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkF2YW5jZSBMb2dpYyBBTFMxWDAiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0F2YW5jZSBMb2dpYyxBTFMxMDAgLSBQUk8xNlBOUH0sIgorTU9EVUxFX0RFU0NSSVBUSU9OKCJBdmFuY2UgTG9naWMgQUxTMDA3L0FMUzFYMCIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7RGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5WH0sIgorCQkie0F2YW5jZSBMb2dpYyBBTFMtMDA3fX0iCisJCSJ7e0F2YW5jZSBMb2dpYyxBTFMxMDAgLSBQUk8xNlBOUH0sIgogCSAgICAgICAgIntBdmFuY2UgTG9naWMsQUxTMTEwfSwiCiAJICAgICAgICAie0F2YW5jZSBMb2dpYyxBTFMxMjB9LCIKIAkgICAgICAgICJ7QXZhbmNlIExvZ2ljLEFMUzIwMH0sIgpAQCAtNDUsOSArNDksMTIgQEAKIAkgICAgICAgICJ7QXZhbmNlIExvZ2ljLEFMUzEyMH0sIgogCSAgICAgICAgIntSVEwsUlRMMzAwMH19Iik7CiAKK01PRFVMRV9BVVRIT1IoIk1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCi1zdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9JU0FQTlA7IC8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOwkvKiBFbmFibGUgdGhpcyBjYXJkICovCiBzdGF0aWMgbG9uZyBwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCiBzdGF0aWMgbG9uZyBtcHVfcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFBuUCBzZXR1cCAqLwogc3RhdGljIGxvbmcgZm1fcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFBuUCBzZXR1cCAqLwpAQCAtNTcsMTQgKzY0LDE1IEBACiBzdGF0aWMgaW50IGRtYTE2W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOwkvKiBQblAgc2V0dXAgKi8KIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBhbHMxMDAgYmFzZWQgc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBBdmFuY2UgTG9naWMgYmFzZWQgc291bmRjYXJkLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBhbHMxMDAgYmFzZWQgc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgQXZhbmNlIExvZ2ljIGJhc2VkIHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgYWxzMTAwIGJhc2VkIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEF2YW5jZSBMb2dpYyBiYXNlZCBzb3VuZGNhcmQuIik7CisKK01PRFVMRV9BTElBUygic25kLWR0MDE5eCIpOwogCiBzdHJ1Y3Qgc25kX2NhcmRfYWxzMTAwIHsKLQlpbnQgZGV2X25vOwogCXN0cnVjdCBwbnBfZGV2ICpkZXY7CiAJc3RydWN0IHBucF9kZXYgKmRldm1wdTsKIAlzdHJ1Y3QgcG5wX2RldiAqZGV2b3BsOwpAQCAtNzIsMjUgKzgwLDQzIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBzbmRfYWxzMTAwX3BucGlkc1tdID0geworCS8qIERUMTk3QTMwICovCisJeyAuaWQgPSAiUldCMTY4OCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfRFQwMTlYIH0sCisJLyogRFQwMTk2IC8gQUxTLTAwNyAqLworCXsgLmlkID0gIkFMUzAwMDciLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0RUMDE5WCB9LAogCS8qIEFMUzEwMCAtIFBSTzE2UE5QICovCi0JeyAuaWQgPSAiQUxTMDAwMSIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICJBTFMwMDAxIiwKKwkgIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSBTQl9IV19BTFMxMDAgfSwKIAkvKiBBTFMxMTAgLSBNRjEwMDAgLSBEaWdpbWF0ZSAzRCBTb3VuZCAqLwotCXsgLmlkID0gIkFMUzAxMTAiLCAuZGV2cyA9IHsgeyAiQEBAMTAwMSIgfSwgeyAiQFhAMTAwMSIgfSwgeyAiQEhAMTAwMSIgfSB9IH0sCisJeyAuaWQgPSAiQUxTMDExMCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMTAwMSIgfSwgeyAiQFhAMTAwMSIgfSwgeyAiQEhAMTAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfQUxTMTAwIH0sCiAJLyogQUxTMTIwICovCi0JeyAuaWQgPSAiQUxTMDEyMCIsIC5kZXZzID0geyB7ICJAQEAyMDAxIiB9LCB7ICJAWEAyMDAxIiB9LCB7ICJASEAyMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICJBTFMwMTIwIiwKKwkgIC5kZXZzID0geyB7ICJAQEAyMDAxIiB9LCB7ICJAWEAyMDAxIiB9LCB7ICJASEAyMDAxIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSBTQl9IV19BTFMxMDAgfSwKIAkvKiBBTFMyMDAgKi8KLQl7IC5pZCA9ICJBTFMwMjAwIiwgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMDEiIH0gfSB9LAorCXsgLmlkID0gIkFMUzAyMDAiLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMDEiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0FMUzEwMCB9LAogCS8qIEFMUzIwMCBPRU0gKi8KLQl7IC5pZCA9ICJBTFMwMjAwIiwgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMjAiIH0gfSB9LAorCXsgLmlkID0gIkFMUzAyMDAiLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMjAiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0FMUzEwMCB9LAogCS8qIFJUTDMwMDAgKi8KLQl7IC5pZCA9ICJSVEwzMDAwIiwgLmRldnMgPSB7IHsgIkBAQDIwMDEiIH0sIHsgIkBYQDIwMDEiIH0sIHsgIkBIQDIwMDEiIH0gfSB9LAotCXsgLmlkID0gIiIsIH0gLyogZW5kICovCisJeyAuaWQgPSAiUlRMMzAwMCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMjAwMSIgfSwgeyAiQFhAMjAwMSIgfSwgeyAiQEhAMjAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfQUxTMTAwIH0sCisJeyAuaWQgPSAiIiB9IC8qIGVuZCAqLwogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgc25kX2FsczEwMF9wbnBpZHMpOwogCi0jZGVmaW5lIERSSVZFUl9OQU1FCSJzbmQtY2FyZC1hbHMxMDAiCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2FsczEwMF9wbnAoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2FsczEwMCAqYWNhcmQsCiAJCQkJCSBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCwKIAkJCQkJIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKmlkKQpAQCAtMTEzLDggKzEzOSwxMiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAlwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOwotCWRtYTE2W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gU0JfSFdfRFQwMTlYKQorCQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOworCWVsc2UgeworCQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOworCQlkbWExNltkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKKwl9CiAJaXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOwogCiAJcGRldiA9IGFjYXJkLT5kZXZtcHU7CkBAIC0xNzUsMjIgKzIwNSwzMyBAQAogCX0KIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKIAotCWlmICgoZXJyb3IgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwKLQkJCQkgICAgICBpcnFbZGV2XSwKLQkJCQkgICAgICBzbmRfc2IxNmRzcF9pbnRlcnJ1cHQsCi0JCQkJICAgICAgZG1hOFtkZXZdLAotCQkJCSAgICAgIGRtYTE2W2Rldl0sCi0JCQkJICAgICAgU0JfSFdfQUxTMTAwLCAmY2hpcCkpIDwgMCkgeworCWlmIChwaWQtPmRyaXZlcl9kYXRhID09IFNCX0hXX0RUMDE5WCkKKwkJZG1hMTZbZGV2XSA9IC0xOworCisJZXJyb3IgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwgaXJxW2Rldl0sCisJCQkJICBzbmRfc2IxNmRzcF9pbnRlcnJ1cHQsCisJCQkJICBkbWE4W2Rldl0sIGRtYTE2W2Rldl0sCisJCQkJICBwaWQtPmRyaXZlcl9kYXRhLAorCQkJCSAgJmNoaXApOworCWlmIChlcnJvciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAlhY2FyZC0+Y2hpcCA9IGNoaXA7CiAKLQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQUxTMTAwIik7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF2YW5jZSBMb2dpYyBBTFMxMDAiKTsKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsICVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCYlZCIsCi0JCWNhcmQtPnNob3J0bmFtZSwgY2hpcC0+bmFtZSwgY2hpcC0+cG9ydCwKLQkJaXJxW2Rldl0sIGRtYThbZGV2XSwgZG1hMTZbZGV2XSk7CisJaWYgKHBpZC0+ZHJpdmVyX2RhdGEgPT0gU0JfSFdfRFQwMTlYKSB7CisJCXN0cmNweShjYXJkLT5kcml2ZXIsICJEVC0wMTlYIik7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJEaWFtb25kIFRlY2guIERULTAxOVgiKTsKKwkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQiLAorCQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5uYW1lLCBjaGlwLT5wb3J0LAorCQkJaXJxW2Rldl0sIGRtYThbZGV2XSk7CisJfSBlbHNlIHsKKwkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFMUzEwMCIpOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXZhbmNlIExvZ2ljIEFMUzEwMCIpOworCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsICVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCYlZCIsCisJCQljYXJkLT5zaG9ydG5hbWUsIGNoaXAtPm5hbWUsIGNoaXAtPnBvcnQsCisJCQlpcnFbZGV2XSwgZG1hOFtkZXZdLCBkbWExNltkZXZdKTsKKwl9CiAKIAlpZiAoKGVycm9yID0gc25kX3NiMTZkc3BfcGNtKGNoaXAsIDAsIE5VTEwpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTIwMyw5ICsyNDQsMTkgQEAKIAl9CiAKIAlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX0FMUzEwMCwKKwkJaW50IG1wdV90eXBlID0gTVBVNDAxX0hXX0FMUzEwMDsKKworCQlpZiAobXB1X2lycVtkZXZdID09IFNORFJWX0FVVE9fSVJRKQorCQkJbXB1X2lycVtkZXZdID0gLTE7CisKKwkJaWYgKHBpZC0+ZHJpdmVyX2RhdGEgPT0gU0JfSFdfRFQwMTlYKQorCQkJbXB1X3R5cGUgPSBNUFU0MDFfSFdfTVBVNDAxOworCisJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsCisJCQkJCW1wdV90eXBlLAogCQkJCQltcHVfcG9ydFtkZXZdLCAwLCAKLQkJCQkJbXB1X2lycVtkZXZdLCBJUlFGX0RJU0FCTEVELAorCQkJCQltcHVfaXJxW2Rldl0sCisJCQkJCW1wdV9pcnFbZGV2XSA+PSAwID8gSVJRRl9ESVNBQkxFRCA6IDAsCiAJCQkJCU5VTEwpIDwgMCkKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwgbXB1X3BvcnRbZGV2XSk7CiAJfQpAQCAtMjkxLDcgKzM0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZHJpdmVyIGFsczEwMF9wbnBjX2RyaXZlciA9IHsKIAkuZmxhZ3MgICAgICAgICAgPSBQTlBfRFJJVkVSX1JFU19ESVNBQkxFLAotICAgICAgICAubmFtZSAgICAgICAgICAgPSAiYWxzMTAwIiwKKwkubmFtZQkJPSAiYWxzMTAwIiwKICAgICAgICAgLmlkX3RhYmxlICAgICAgID0gc25kX2FsczEwMF9wbnBpZHMsCiAgICAgICAgIC5wcm9iZSAgICAgICAgICA9IHNuZF9hbHMxMDBfcG5wX2RldGVjdCwKICAgICAgICAgLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3Aoc25kX2FsczEwMF9wbnBfcmVtb3ZlKSwKQEAgLTMxMiw3ICszNjMsNyBAQAogCWlmICghYWxzMTAwX2RldmljZXMpIHsKIAkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmFsczEwMF9wbnBjX2RyaXZlcik7CiAjaWZkZWYgTU9EVUxFCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIEFMUzEwMCBiYXNlZCBzb3VuZGNhcmRzIGZvdW5kXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibm8gQXZhbmNlIExvZ2ljIGJhc2VkIHNvdW5kY2FyZHMgZm91bmRcbiIpOwogI2VuZGlmCiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9kdDAxOXguYyBiL3NvdW5kL2lzYS9kdDAxOXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmNWIxYS4uMDAwMDAwMAotLS0gYS9zb3VuZC9pc2EvZHQwMTl4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjEgKzAsMCBAQAotCi0vKgotICAgIGR0MDE5eC5jIC0gZHJpdmVyIGZvciBEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTk3SCBiYXNlZCBzb3VuZGNhcmRzLgotICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMiBieSBNYXNzaW1vIFBpY2Npb25pIDxkYWZhc3RpZGlvQGxpYmVyby5pdD4KLQotICAgIEdlbmVyYWxpc2VkIGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIERULTAxOTYgYW5kIEFMUy0wMDcgY2hpcHMgCi0gICAgYnkgSm9uYXRoYW4gV29pdGhlIDxqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1PjogSnVuZSAyMDAyLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbnAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+Ci0jaW5jbHVkZSA8c291bmQvb3BsMy5oPgotI2luY2x1ZGUgPHNvdW5kL3NiLmg+Ci0KLSNkZWZpbmUgUEZYICJkdDAxOXg6ICIKLQotTU9EVUxFX0FVVEhPUigiTWFzc2ltbyBQaWNjaW9uaSA8ZGFmYXN0aWRpb0BsaWJlcm8uaXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVggLyBBdmFuY2UgTG9naWMgQUxTLTAwNyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7RGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5WH0sIgotCSAgICAgICAie0F2YW5jZSBMb2dpYyBBTFMtMDA3fX0iKTsKLQotc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KLXN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwotc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEU7CS8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KLXN0YXRpYyBsb25nIHBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiBQblAgc2V0dXAgKi8KLXN0YXRpYyBsb25nIG1wdV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgbG9uZyBmbV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgaW50IGlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CS8qIFBuUCBzZXR1cCAqLwotc3RhdGljIGludCBkbWE4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOwkvKiBQblAgc2V0dXAgKi8KLQotbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBEVC0wMTlYIGJhc2VkIHNvdW5kY2FyZC4iKTsKLW1vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgRFQtMDE5WCBiYXNlZCBzb3VuZGNhcmQuIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIERULTAxOVggYmFzZWQgc291bmRjYXJkLiIpOwotCi1zdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4IHsKLQlzdHJ1Y3QgcG5wX2RldiAqZGV2OwotCXN0cnVjdCBwbnBfZGV2ICpkZXZtcHU7Ci0Jc3RydWN0IHBucF9kZXYgKmRldm9wbDsKLQlzdHJ1Y3Qgc25kX3NiICpjaGlwOwotfTsKLQotc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2R0MDE5eF9wbnBpZHNbXSA9IHsKLQkvKiBEVDE5N0EzMCAqLwotCXsgLmlkID0gIlJXQjE2ODgiLCAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSwgfSB9LAotCS8qIERUMDE5NiAvIEFMUy0wMDcgKi8KLQl7IC5pZCA9ICJBTFMwMDA3IiwgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0sIH0gfSwKLQl7IC5pZCA9ICIiLCAgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgc25kX2R0MDE5eF9wbnBpZHMpOwotCi0KLSNkZWZpbmUgRFJJVkVSX05BTUUJInNuZC1jYXJkLWR0MDE5eCIKLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9kdDAxOXhfcG5wKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9kdDAxOXggKmFjYXJkLAotCQkJCQkgc3RydWN0IHBucF9jYXJkX2xpbmsgKmNhcmQsCi0JCQkJCSBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCi17Ci0Jc3RydWN0IHBucF9kZXYgKnBkZXY7Ci0JaW50IGVycjsKLQotCWFjYXJkLT5kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBwaWQtPmRldnNbMF0uaWQsIE5VTEwpOwotCWlmIChhY2FyZC0+ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JYWNhcmQtPmRldm1wdSA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1sxXS5pZCwgTlVMTCk7Ci0JYWNhcmQtPmRldm9wbCA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1syXS5pZCwgTlVMTCk7Ci0KLQlwZGV2ID0gYWNhcmQtPmRldjsKLQotCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYocGRldik7Ci0JaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkRULTAxOVggQVVESU8gcG5wIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOwotCWlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKLQlzbmRfcHJpbnRkZCgiZHQwMTl4OiBmb3VuZCBhdWRpbyBpbnRlcmZhY2U6IHBvcnQ9MHglbHgsIGlycT0weCV4LCBkbWE9MHgleFxuIiwKLQkJCXBvcnRbZGV2XSxpcnFbZGV2XSxkbWE4W2Rldl0pOwotCi0JcGRldiA9IGFjYXJkLT5kZXZtcHU7Ci0JaWYgKHBkZXYgIT0gTlVMTCkgewotCQllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcG5wX3JlbGVhc2VfY2FyZF9kZXZpY2UocGRldik7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiRFQtMDE5WCBNUFU0MDEgcG5wIGNvbmZpZ3VyZSBmYWlsdXJlLCBza2lwcGluZ1xuIik7Ci0JCQlnb3RvIF9fbXB1X2Vycm9yOwotCQl9Ci0JCW1wdV9wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQkJbXB1X2lycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKLQkJc25kX3ByaW50ZGQoImR0MDE5eDogZm91bmQgTVBVLTQwMTogcG9ydD0weCVseCwgaXJxPTB4JXhcbiIsCi0JCQkgCW1wdV9wb3J0W2Rldl0sbXB1X2lycVtkZXZdKTsKLQl9IGVsc2UgewotCV9fbXB1X2Vycm9yOgotCQlhY2FyZC0+ZGV2bXB1ID0gTlVMTDsKLQkJbXB1X3BvcnRbZGV2XSA9IC0xOwotCX0KLQotCXBkZXYgPSBhY2FyZC0+ZGV2b3BsOwotCWlmIChwZGV2ICE9IE5VTEwpIHsKLQkJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXBucF9yZWxlYXNlX2NhcmRfZGV2aWNlKHBkZXYpOwotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkRULTAxOVggT1BMMyBwbnAgY29uZmlndXJlIGZhaWx1cmUsIHNraXBwaW5nXG4iKTsKLQkJCWdvdG8gX19mbV9lcnJvcjsKLQkJfQotCQlmbV9wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQkJc25kX3ByaW50ZGQoImR0MDE5eDogZm91bmQgT1BMMyBzeW50aDogcG9ydD0weCVseFxuIixmbV9wb3J0W2Rldl0pOwotCX0gZWxzZSB7Ci0JX19mbV9lcnJvcjoKLQkJYWNhcmQtPmRldm9wbCA9IE5VTEw7Ci0JCWZtX3BvcnRbZGV2XSA9IC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9kdDAxOXhfcHJvYmUoaW50IGRldiwgc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLCBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCi17Ci0JaW50IGVycm9yOwotCXN0cnVjdCBzbmRfc2IgKmNoaXA7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzbmRfY2FyZF9kdDAxOXggKmFjYXJkOwotCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKLQotCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4KSwgJmNhcmQpOwotCWlmIChlcnJvciA8IDApCi0JCXJldHVybiBlcnJvcjsKLQlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOwotCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9kdDAxOXhfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JaWYgKChlcnJvciA9IHNuZF9zYmRzcF9jcmVhdGUoY2FyZCwgcG9ydFtkZXZdLAotCQkJCSAgICAgIGlycVtkZXZdLAotCQkJCSAgICAgIHNuZF9zYjE2ZHNwX2ludGVycnVwdCwKLQkJCQkgICAgICBkbWE4W2Rldl0sCi0JCQkJICAgICAgLTEsCi0JCQkJICAgICAgU0JfSFdfRFQwMTlYLAotCQkJCSAgICAgICZjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JYWNhcmQtPmNoaXAgPSBjaGlwOwotCi0Jc3RyY3B5KGNhcmQtPmRyaXZlciwgIkRULTAxOVgiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiRGlhbW9uZCBUZWNoLiBEVC0wMTlYIik7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQiLAotCQljYXJkLT5zaG9ydG5hbWUsIGNoaXAtPm5hbWUsIGNoaXAtPnBvcnQsCi0JCWlycVtkZXZdLCBkbWE4W2Rldl0pOwotCi0JaWYgKChlcnJvciA9IHNuZF9zYjE2ZHNwX3BjbShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JaWYgKChlcnJvciA9IHNuZF9zYm1peGVyX25ldyhjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJaWYgKG1wdV9pcnFbZGV2XSA9PSBTTkRSVl9BVVRPX0lSUSkKLQkJCW1wdV9pcnFbZGV2XSA9IC0xOwotCQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLAotLyoJCQkJCU1QVTQwMV9IV19TQiwqLwotCQkJCQlNUFU0MDFfSFdfTVBVNDAxLAotCQkJCQltcHVfcG9ydFtkZXZdLCAwLAotCQkJCQltcHVfaXJxW2Rldl0sCi0JCQkJCW1wdV9pcnFbZGV2XSA+PSAwID8gSVJRRl9ESVNBQkxFRCA6IDAsCi0JCQkJCU5VTEwpIDwgMCkKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseCA/XG4iLCBtcHVfcG9ydFtkZXZdKTsKLQl9Ci0KLQlpZiAoZm1fcG9ydFtkZXZdID4gMCAmJiBmbV9wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwKLQkJCQkgICAgZm1fcG9ydFtkZXZdLAotCQkJCSAgICBmbV9wb3J0W2Rldl0gKyAyLAotCQkJCSAgICBPUEwzX0hXX0FVVE8sIDAsICZvcGwzKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBPUEwgZGV2aWNlIGF0IDB4JWx4LTB4JWx4ID9cbiIsCi0JCQkJICAgZm1fcG9ydFtkZXZdLCBmbV9wb3J0W2Rldl0gKyAyKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgMCwgMSkpIDwgMCkgewotCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKSkgPCAwKSB7Ci0JCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoKGVycm9yID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBjYXJkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXRkYXRhIGR0MDE5eF9kZXZpY2VzOwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZHQwMTl4X3BucF9wcm9iZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCi17Ci0Jc3RhdGljIGludCBkZXY7Ci0JaW50IHJlczsKLQotCWZvciAoIDsgZGV2IDwgU05EUlZfQ0FSRFM7IGRldisrKSB7Ci0JCWlmICghZW5hYmxlW2Rldl0pCi0JCQljb250aW51ZTsKLQkJcmVzID0gc25kX2NhcmRfZHQwMTl4X3Byb2JlKGRldiwgY2FyZCwgcGlkKTsKLQkJaWYgKHJlcyA8IDApCi0JCQlyZXR1cm4gcmVzOwotCQlkZXYrKzsKLQkJZHQwMTl4X2RldmljZXMrKzsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2R0MDE5eF9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfY2FyZF9saW5rICogcGNhcmQpCi17Ci0Jc25kX2NhcmRfZnJlZShwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCkpOwotCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBOVUxMKTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfZHQwMTl4X3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBucF9nZXRfY2FyZF9kcnZkYXRhKHBjYXJkKTsKLQlzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4ICphY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NiICpjaGlwID0gYWNhcmQtPmNoaXA7Ci0KLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7Ci0Jc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOwotCXNuZF9zYm1peGVyX3N1c3BlbmQoY2hpcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX2R0MDE5eF9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCkKLXsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCk7Ci0Jc3RydWN0IHNuZF9jYXJkX2R0MDE5eCAqYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zYiAqY2hpcCA9IGFjYXJkLT5jaGlwOwotCi0Jc25kX3NiZHNwX3Jlc2V0KGNoaXApOwotCXNuZF9zYm1peGVyX3Jlc3VtZShjaGlwKTsKLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kcml2ZXIgZHQwMTl4X3BucGNfZHJpdmVyID0gewotCS5mbGFncyAgICAgICAgICA9IFBOUF9EUklWRVJfUkVTX0RJU0FCTEUsCi0JLm5hbWUgICAgICAgICAgID0gImR0MDE5eCIsCi0JLmlkX3RhYmxlICAgICAgID0gc25kX2R0MDE5eF9wbnBpZHMsCi0JLnByb2JlICAgICAgICAgID0gc25kX2R0MDE5eF9wbnBfcHJvYmUsCi0JLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3Aoc25kX2R0MDE5eF9wbnBfcmVtb3ZlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHNuZF9kdDAxOXhfcG5wX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzbmRfZHQwMTl4X3BucF9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9kdDAxOXhfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmR0MDE5eF9wbnBjX2RyaXZlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmICghZHQwMTl4X2RldmljZXMpIHsKLQkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmR0MDE5eF9wbnBjX2RyaXZlcik7Ci0jaWZkZWYgTU9EVUxFCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIERULTAxOVggLyBBTFMtMDA3IGJhc2VkIHNvdW5kY2FyZHMgZm91bmRcbiIpOwotI2VuZGlmCi0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9kdDAxOXhfZXhpdCh2b2lkKQotewotCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZkdDAxOXhfcG5wY19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChhbHNhX2NhcmRfZHQwMTl4X2luaXQpCi1tb2R1bGVfZXhpdChhbHNhX2NhcmRfZHQwMTl4X2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwppbmRleCBjOGE4ZGEwLi5hNGFmNTNiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgogI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgogI2luY2x1ZGUgPHNvdW5kL29wbDMuaD4KQEAgLTU0Niw2ICs1NDcsOTMgQEAKIAogI2lmZGVmIE9QVGk5M1gKIAorc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlXzViaXRfM2RiX3N0ZXAsIC05MzAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlXzViaXQsIC00NjUwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlXzRiaXRfMTJkYl9tYXgsIC0zMzAwLCAzMDAsIDApOworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX29wdGk5M3hfY29udHJvbHNbXSA9IHsKK1dTU19ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAwLAorCQlPUFRpOTNYX09VVF9MRUZULCBPUFRpOTNYX09VVF9SSUdIVCwgNywgNywgMSwgMSksCitXU1NfRE9VQkxFX1RMVigiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCU9QVGk5M1hfT1VUX0xFRlQsIE9QVGk5M1hfT1VUX1JJR0hULCAxLCAxLCAzMSwgMSwKKwkJZGJfc2NhbGVfNWJpdF8zZGJfc3RlcCksCitXU1NfRE9VQkxFX1RMVigiUENNIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9MRUZUX09VVFBVVCwgQ1M0MjMxX1JJR0hUX09VVFBVVCwgMCwgMCwgMzEsIDEsCisJCWRiX3NjYWxlXzViaXQpLAorV1NTX0RPVUJMRV9UTFYoIkZNIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9BVVgyX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgyX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSwKKwkJZGJfc2NhbGVfNGJpdF8xMmRiX21heCksCitXU1NfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDAsCisJCUNTNDIzMV9MRUZUX0xJTkVfSU4sIENTNDIzMV9SSUdIVF9MSU5FX0lOLCA3LCA3LCAxLCAxKSwKK1dTU19ET1VCTEVfVExWKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9MRUZUX0xJTkVfSU4sIENTNDIzMV9SSUdIVF9MSU5FX0lOLCAwLCAwLCAxNSwgMSwKKwkJZGJfc2NhbGVfNGJpdF8xMmRiX21heCksCitXU1NfRE9VQkxFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMCwKKwkJT1BUaTkzWF9NSUNfTEVGVF9JTlBVVCwgT1BUaTkzWF9NSUNfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAorV1NTX0RPVUJMRV9UTFYoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlPUFRpOTNYX01JQ19MRUZUX0lOUFVULCBPUFRpOTNYX01JQ19SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEsCisJCWRiX3NjYWxlXzRiaXRfMTJkYl9tYXgpLAorV1NTX0RPVUJMRV9UTFYoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9BVVgxX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSwKKwkJZGJfc2NhbGVfNGJpdF8xMmRiX21heCksCitXU1NfRE9VQkxFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMCwKKwkJT1BUaTkzMV9BVVhfTEVGVF9JTlBVVCwgT1BUaTkzMV9BVVhfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAorV1NTX0RPVUJMRV9UTFYoIkF1eCBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlPUFRpOTMxX0FVWF9MRUZUX0lOUFVULCBPUFRpOTMxX0FVWF9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEsCisJCWRiX3NjYWxlXzRiaXRfMTJkYl9tYXgpLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5M3hfbWl4ZXIoc3RydWN0IHNuZF93c3MgKmNoaXApCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXVuc2lnbmVkIGludCBpZHg7CisJc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDEsIGlkMjsKKwlpbnQgZXJyOworCisJaWYgKHNuZF9CVUdfT04oIWNoaXAgfHwgIWNoaXAtPnBjbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJY2FyZCA9IGNoaXAtPmNhcmQ7CisKKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCBjaGlwLT5wY20tPm5hbWUpOworCisJbWVtc2V0KCZpZDEsIDAsIHNpemVvZihpZDEpKTsKKwltZW1zZXQoJmlkMiwgMCwgc2l6ZW9mKGlkMikpOworCWlkMS5pZmFjZSA9IGlkMi5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSOworCS8qIHJlYXNzaWduIEFVWDAgc3dpdGNoIHRvIENEICovCisJc3RyY3B5KGlkMS5uYW1lLCAiQXV4IFBsYXliYWNrIFN3aXRjaCIpOworCXN0cmNweShpZDIubmFtZSwgIkNEIFBsYXliYWNrIFN3aXRjaCIpOworCWVyciA9IHNuZF9jdGxfcmVuYW1lX2lkKGNhcmQsICZpZDEsICZpZDIpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNhbm5vdCByZW5hbWUgb3B0aTkzeCBjb250cm9sXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogcmVhc3NpZ24gQVVYMSBzd2l0Y2ggdG8gRk0gKi8KKwlzdHJjcHkoaWQxLm5hbWUsICJBdXggUGxheWJhY2sgU3dpdGNoIik7IGlkMS5pbmRleCA9IDE7CisJc3RyY3B5KGlkMi5uYW1lLCAiRk0gUGxheWJhY2sgU3dpdGNoIik7CisJZXJyID0gc25kX2N0bF9yZW5hbWVfaWQoY2FyZCwgJmlkMSwgJmlkMik7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHJlbmFtZSBvcHRpOTN4IGNvbnRyb2xcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwkvKiByZW1vdmUgQVVYMSB2b2x1bWUgKi8KKwlzdHJjcHkoaWQxLm5hbWUsICJBdXggUGxheWJhY2sgVm9sdW1lIik7IGlkMS5pbmRleCA9IDE7CisJc25kX2N0bF9yZW1vdmVfaWQoY2FyZCwgJmlkMSk7CisKKwkvKiBSZXBsYWNlIFdTUyB2b2x1bWUgY29udHJvbHMgd2l0aCBPUFRpOTN4IHZvbHVtZSBjb250cm9scyAqLworCWlkMS5pbmRleCA9IDA7CisJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9vcHRpOTN4X2NvbnRyb2xzKTsgaWR4KyspIHsKKwkJc3RyY3B5KGlkMS5uYW1lLCBzbmRfb3B0aTkzeF9jb250cm9sc1tpZHhdLm5hbWUpOworCQlzbmRfY3RsX3JlbW92ZV9pZChjYXJkLCAmaWQxKTsKKworCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAorCQkJCXNuZF9jdGxfbmV3MSgmc25kX29wdGk5M3hfY29udHJvbHNbaWR4XSwgY2hpcCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX29wdGk5M3hfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXAgPSBkZXZfaWQ7CkBAIC03NTQsNiArODQyLDExIEBACiAJZXJyb3IgPSBzbmRfd3NzX21peGVyKGNvZGVjKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CisjaWZkZWYgT1BUaTkzWAorCWVycm9yID0gc25kX29wdGk5M3hfbWl4ZXIoY29kZWMpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKyNlbmRpZgogI2lmZGVmIENTNDIzMQogCWVycm9yID0gc25kX3dzc190aW1lcihjb2RlYywgMCwgJnRpbWVyKTsKIAlpZiAoZXJyb3IgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL01ha2VmaWxlIGIvc291bmQvaXNhL3NiL01ha2VmaWxlCmluZGV4IGZhZWZmY2ViLi5hZjM2Njk2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2IvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL3NiL01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBACiBzbmQtc2Jhd2Utb2JqcyA6PSBzYmF3ZS5vIGVtdTgwMDAubwogc25kLWVtdTgwMDAtc3ludGgtb2JqcyA6PSBlbXU4MDAwX3N5bnRoLm8gZW11ODAwMF9jYWxsYmFjay5vIGVtdTgwMDBfcGF0Y2gubyBlbXU4MDAwX3BjbS5vCiBzbmQtZXM5Njgtb2JqcyA6PSBlczk2OC5vCitzbmQtamF6ejE2LW9ianMgOj0gamF6ejE2Lm8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQogb2JqLSQoQ09ORklHX1NORF9TQl9DT01NT04pICs9IHNuZC1zYi1jb21tb24ubwpAQCAtMjEsNiArMjIsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TQjE2KSArPSBzbmQtc2IxNi5vCiBvYmotJChDT05GSUdfU05EX1NCQVdFKSArPSBzbmQtc2Jhd2Uubwogb2JqLSQoQ09ORklHX1NORF9FUzk2OCkgKz0gc25kLWVzOTY4Lm8KK29iai0kKENPTkZJR19TTkRfSkFaWjE2KSArPSBzbmQtamF6ejE2Lm8KIGlmZXEgKCQoQ09ORklHX1NORF9TQjE2X0NTUCkseSkKICAgb2JqLSQoQ09ORklHX1NORF9TQjE2KSArPSBzbmQtc2IxNi1jc3AubwogICBvYmotJChDT05GSUdfU05EX1NCQVdFKSArPSBzbmQtc2IxNi1jc3AubwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2phenoxNi5jIGIvc291bmQvaXNhL3NiL2phenoxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjFhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2Evc2IvamF6ejE2LmMKQEAgLTAsMCArMSw0MDQgQEAKKworLyoKKyAqIGphenoxNi5jIC0gZHJpdmVyIGZvciBNZWRpYSBWaXNpb24gSmF6ejE2IGJhc2VkIHNvdW5kY2FyZHMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4KKyAqIEJhc2VkIG9uIHBhdGNoZXMgcG9zdGVkIGJ5IFJhc2sgSW5nZW1hbm4gTGFtYmVydHNlbiBhbmQgUmVuZSBIZXJtYW4uCisgKiBCYXNlZCBvbiBPU1MgU291bmQgQmxhc3RlciBkcml2ZXIuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KKyNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CisjaW5jbHVkZSA8c291bmQvc2IuaD4KKyNkZWZpbmUgU05EUlZfTEVHQUNZX0ZJTkRfRlJFRV9JUlEKKyNkZWZpbmUgU05EUlZfTEVHQUNZX0ZJTkRfRlJFRV9ETUEKKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNkZWZpbmUgUEZYICJqYXp6MTY6ICIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYSBWaXNpb24gSmF6ejE2Iik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tNZWRpYSBWaXNpb24gPz8/IH0sIgorCQkie1JUTCxSVEwzMDAwfX0iKTsKKworTU9EVUxFX0FVVEhPUigiS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLworc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEU7CS8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CitzdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CitzdGF0aWMgaW50IGRtYThbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9ETUE7CitzdGF0aWMgaW50IGRtYTE2W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIE1lZGlhIFZpc2lvbiBKYXp6MTYgYmFzZWQgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBNZWRpYSBWaXNpb24gSmF6ejE2IGJhc2VkIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgTWVkaWEgVmlzaW9uIEphenoxNiBiYXNlZCBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkocG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJQb3J0ICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVfcG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciBqYXp6MTYgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lycSwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1X2lycSwgIk1QVS00MDEgSVJRICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZG1hOCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hOCwgIkRNQTggIyBmb3IgamF6ejE2IGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShkbWExNiwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hMTYsICJETUExNiAjIGZvciBqYXp6MTYgZHJpdmVyLiIpOworCisjZGVmaW5lIFNCX0pBWloxNl9XQUtFVVAJMHhhZgorI2RlZmluZSBTQl9KQVpaMTZfU0VUX1BPUlRTCTB4NTAKKyNkZWZpbmUgU0JfRFNQX0dFVF9KQVpaX0JSRF9SRVYJMHhmYQorI2RlZmluZSBTQl9KQVpaMTZfU0VUX0RNQUlOVFIJMHhmYgorI2RlZmluZSBTQl9EU1BfR0VUX0pBWlpfTU9ERUwJMHhmZQorCitzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2IHsKKwlzdHJ1Y3Qgc25kX3NiICpjaGlwOworfTsKKworc3RhdGljIGlycXJldHVybl90IGphenoxNl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY2hpcCkKK3sKKwlyZXR1cm4gc25kX3NiOGRzcF9pbnRlcnJ1cHQoY2hpcCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGphenoxNl9jb25maWd1cmVfcG9ydHModW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBtcHVfcG9ydCwgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKworCWlmICghcmVxdWVzdF9yZWdpb24oMHgyMDEsIDEsICJqYXp6MTYgY29uZmlnIikpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY29uZmlnIHBvcnQgcmVnaW9uIGlzIGFscmVhZHkgaW4gdXNlLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW91dGIoU0JfSkFaWjE2X1dBS0VVUCAtIGlkeCwgMHgyMDEpOworCXVkZWxheSgxMDApOworCW91dGIoU0JfSkFaWjE2X1NFVF9QT1JUUyArIGlkeCwgMHgyMDEpOworCXVkZWxheSgxMDApOworCXZhbCA9IHBvcnQgJiAweDcwOworCXZhbCB8PSAobXB1X3BvcnQgJiAweDMwKSA+PiA0OworCW91dGIodmFsLCAweDIwMSk7CisKKwlyZWxlYXNlX3JlZ2lvbigweDIwMSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGphenoxNl9kZXRlY3RfYm9hcmQodW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBtcHVfcG9ydCkKK3sKKwlpbnQgZXJyOworCWludCB2YWw7CisJc3RydWN0IHNuZF9zYiBjaGlwOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwb3J0LCAweDEwLCAiamF6ejE2IikpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiSS9PIHBvcnQgcmVnaW9uIGlzIGFscmVhZHkgaW4gdXNlLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qIGp1c3QgdG8gY2FsbCBzbmRfc2Jkc3BfY29tbWFuZC9yZXNldC9nZXRfYnl0ZSgpICovCisJY2hpcC5wb3J0ID0gcG9ydDsKKworCWVyciA9IHNuZF9zYmRzcF9yZXNldCgmY2hpcCk7CisJaWYgKGVyciA8IDApCisJCWZvciAodmFsID0gMDsgdmFsIDwgNDsgdmFsKyspIHsKKwkJCWVyciA9IGphenoxNl9jb25maWd1cmVfcG9ydHMocG9ydCwgbXB1X3BvcnQsIHZhbCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlicmVhazsKKworCQkJZXJyID0gc25kX3NiZHNwX3Jlc2V0KCZjaGlwKTsKKwkJCWlmICghZXJyKQorCQkJCWJyZWFrOworCQl9CisJaWYgKGVyciA8IDApIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCWlmICghc25kX3NiZHNwX2NvbW1hbmQoJmNoaXAsIFNCX0RTUF9HRVRfSkFaWl9CUkRfUkVWKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwl2YWwgPSBzbmRfc2Jkc3BfZ2V0X2J5dGUoJmNoaXApOworCWlmICh2YWwgPj0gMHgzMCkKKwkJc25kX3NiZHNwX2dldF9ieXRlKCZjaGlwKTsKKworCWlmICgodmFsICYgMHhmMCkgIT0gMHgxMCkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZCgmY2hpcCwgU0JfRFNQX0dFVF9KQVpaX01PREVMKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwlzbmRfc2Jkc3BfZ2V0X2J5dGUoJmNoaXApOworCWVyciA9IHNuZF9zYmRzcF9nZXRfYnl0ZSgmY2hpcCk7CisJc25kX3ByaW50ZCgiTWVkaWEgVmlzaW9uIEphenoxNiBib2FyZCBkZXRlY3RlZDogcmV2IDB4JXgsIG1vZGVsIDB4JXhcbiIsCisJCSAgIHZhbCwgZXJyKTsKKworCWVyciA9IDA7CisKK2Vycl91bm1hcDoKKwlyZWxlYXNlX3JlZ2lvbihwb3J0LCAweDEwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqYXp6MTZfY29uZmlndXJlX2JvYXJkKHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBtcHVfaXJxKQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGphenpfaXJxX2JpdHNbXSA9IHsgMCwgMCwgMiwgMywgMCwgMSwgMCwgNCwKKwkJCQkJCSAwLCAyLCA1LCAwLCAwLCAwLCAwLCA2IH07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgamF6el9kbWFfYml0c1tdID0geyAwLCAxLCAwLCAyLCAwLCAzLCAwLCA0IH07CisKKwlpZiAoamF6el9kbWFfYml0c1tjaGlwLT5kbWE4XSA9PSAwIHx8CisJICAgIGphenpfZG1hX2JpdHNbY2hpcC0+ZG1hMTZdID09IDAgfHwKKwkgICAgamF6el9pcnFfYml0c1tjaGlwLT5pcnFdID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9KQVpaMTZfU0VUX0RNQUlOVFIpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZChjaGlwLAorCQkJICAgICAgIGphenpfZG1hX2JpdHNbY2hpcC0+ZG1hOF0gfAorCQkJICAgICAgIChqYXp6X2RtYV9iaXRzW2NoaXAtPmRtYTE2XSA8PCA0KSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsCisJCQkgICAgICAgamF6el9pcnFfYml0c1tjaGlwLT5pcnFdIHwKKwkJCSAgICAgICAoamF6el9pcnFfYml0c1ttcHVfaXJxXSA8PCA0KSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2phenoxNl9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpCit7CisJaWYgKCFlbmFibGVbZGV2XSkKKwkJcmV0dXJuIDA7CisJaWYgKHBvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGxlYXNlIHNwZWNpZnkgcG9ydFxuIik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocG9ydFtkZXZdID09IDB4MjAwIHx8IChwb3J0W2Rldl0gJiB+MHgyNzApKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImluY29ycmVjdCBwb3J0IHNwZWNpZmllZFxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAoZG1hOFtkZXZdICE9IFNORFJWX0FVVE9fRE1BICYmCisJICAgIGRtYThbZGV2XSAhPSAxICYmIGRtYThbZGV2XSAhPSAzKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRtYTggbXVzdCBiZSAxIG9yIDNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGRtYTE2W2Rldl0gIT0gU05EUlZfQVVUT19ETUEgJiYKKwkgICAgZG1hMTZbZGV2XSAhPSA1ICYmIGRtYTE2W2Rldl0gIT0gNykgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJkbWExNiBtdXN0IGJlIDUgb3IgN1xuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAobXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQgJiYKKwkgICAgKG1wdV9wb3J0W2Rldl0gJiB+MHgwMzApICE9IDB4MzAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImluY29ycmVjdCBtcHVfcG9ydCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG1wdV9pcnFbZGV2XSAhPSBTTkRSVl9BVVRPX0RNQSAmJgorCSAgICBtcHVfaXJxW2Rldl0gIT0gMiAmJiBtcHVfaXJxW2Rldl0gIT0gMyAmJgorCSAgICBtcHVfaXJxW2Rldl0gIT0gNSAmJiBtcHVfaXJxW2Rldl0gIT0gNykgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJtcHVfaXJxIG11c3QgYmUgMiwgMywgNSBvciA3XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfamF6ejE2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgdW5zaWduZWQgaW50IGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9jYXJkX2phenoxNiAqamF6ejE2OworCXN0cnVjdCBzbmRfc2IgKmNoaXA7CisJc3RydWN0IHNuZF9vcGwzICpvcGwzOworCXN0YXRpYyBpbnQgcG9zc2libGVfaXJxc1tdID0gezIsIDMsIDUsIDcsIDksIDEwLCAxNSwgLTF9OworCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hczhbXSA9IHsxLCAzLCAtMX07CisJc3RhdGljIGludCBwb3NzaWJsZV9kbWFzMTZbXSA9IHs1LCA3LCAtMX07CisJaW50IGVyciwgeGlycSwgeGRtYTgsIHhkbWExNiwgeG1wdV9wb3J0LCB4bXB1X2lycTsKKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJamF6ejE2ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJeGlycSA9IGlycVtkZXZdOworCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7CisJCXhpcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcyk7CisJCWlmICh4aXJxIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUVxuIik7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisJfQorCXhkbWE4ID0gZG1hOFtkZXZdOworCWlmICh4ZG1hOCA9PSBTTkRSVl9BVVRPX0RNQSkgeworCQl4ZG1hOCA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzOCk7CisJCWlmICh4ZG1hOCA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUE4XG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyX2ZyZWU7CisJCX0KKwl9CisJeGRtYTE2ID0gZG1hMTZbZGV2XTsKKwlpZiAoeGRtYTE2ID09IFNORFJWX0FVVE9fRE1BKSB7CisJCXhkbWExNiA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzMTYpOworCQlpZiAoeGRtYTE2IDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTE2XG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyX2ZyZWU7CisJCX0KKwl9CisKKwl4bXB1X3BvcnQgPSBtcHVfcG9ydFtkZXZdOworCWlmICh4bXB1X3BvcnQgPT0gU05EUlZfQVVUT19QT1JUKQorCQl4bXB1X3BvcnQgPSAwOworCWVyciA9IGphenoxNl9kZXRlY3RfYm9hcmQocG9ydFtkZXZdLCB4bXB1X3BvcnQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVkaWEgVmlzaW9uIEphenoxNiBib2FyZCBub3QgZGV0ZWN0ZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKwllcnIgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwgaXJxW2Rldl0sCisJCQkgICAgICAgamF6ejE2X2ludGVycnVwdCwKKwkJCSAgICAgICBkbWE4W2Rldl0sIGRtYTE2W2Rldl0sCisJCQkgICAgICAgU0JfSFdfSkFaWjE2LAorCQkJICAgICAgICZjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZTsKKworCXhtcHVfaXJxID0gbXB1X2lycVtkZXZdOworCWlmICh4bXB1X2lycSA9PSBTTkRSVl9BVVRPX0lSUSB8fCBtcHVfcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkKKwkJeG1wdV9pcnEgPSAwOworCWVyciA9IGphenoxNl9jb25maWd1cmVfYm9hcmQoY2hpcCwgeG1wdV9pcnEpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVkaWEgVmlzaW9uIEphenoxNiBjb25maWd1cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJamF6ejE2LT5jaGlwID0gY2hpcDsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJqYXp6MTYiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTWVkaWEgVmlzaW9uIEphenoxNiIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsCisJCSJNZWRpYSBWaXNpb24gSmF6ejE2IGF0IDB4JWx4LCBpcnEgJWQsIGRtYTggJWQsIGRtYTE2ICVkIiwKKwkJcG9ydFtkZXZdLCB4aXJxLCB4ZG1hOCwgeGRtYTE2KTsKKworCWVyciA9IHNuZF9zYjhkc3BfcGNtKGNoaXAsIDAsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9mcmVlOworCWVyciA9IHNuZF9zYm1peGVyX25ldyhjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZTsKKworCWVyciA9IHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBjaGlwLT5wb3J0LCBjaGlwLT5wb3J0ICsgMiwKKwkJCSAgICAgIE9QTDNfSFdfQVVUTywgMSwgJm9wbDMpOworCWlmIChlcnIgPCAwKQorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAibm8gT1BMIGRldmljZSBhdCAweCVseC0weCVseFxuIiwKKwkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyAyKTsKKwllbHNlIHsKKwkJZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyX2ZyZWU7CisJfQorCWlmIChtcHVfcG9ydFtkZXZdID4gMCAmJiBtcHVfcG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAobXB1X2lycVtkZXZdID09IFNORFJWX0FVVE9fSVJRKQorCQkJbXB1X2lycVtkZXZdID0gLTE7CisKKwkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwKKwkJCQkJTVBVNDAxX0hXX01QVTQwMSwKKwkJCQkJbXB1X3BvcnRbZGV2XSwgMCwKKwkJCQkJbXB1X2lycVtkZXZdLAorCQkJCQltcHVfaXJxW2Rldl0gPj0gMCA/IElSUUZfRElTQUJMRUQgOiAwLAorCQkJCQlOVUxMKSA8IDApCisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwKKwkJCQkJbXB1X3BvcnRbZGV2XSk7CisJfQorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXZwdHIpOworCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWU6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfamF6ejE2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldnB0cik7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNuZF9qYXp6MTZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgbiwKKwkJCSAgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfY2FyZF9qYXp6MTYgKmFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBhY2FyZC0+Y2hpcDsKKworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKwlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CisJc25kX3NibWl4ZXJfc3VzcGVuZChjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfamF6ejE2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9jYXJkX2phenoxNiAqYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zYiAqY2hpcCA9IGFjYXJkLT5jaGlwOworCisJc25kX3NiZHNwX3Jlc2V0KGNoaXApOworCXNuZF9zYm1peGVyX3Jlc3VtZShjaGlwKTsKKwlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9qYXp6MTZfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfamF6ejE2X21hdGNoLAorCS5wcm9iZQkJPSBzbmRfamF6ejE2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2phenoxNl9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gc25kX2phenoxNl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc25kX2phenoxNl9yZXN1bWUsCisjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiamF6ejE2IgorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfamF6ejE2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX2phenoxNl9kcml2ZXIsIFNORFJWX0NBUkRTKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9qYXp6MTZfZXhpdCh2b2lkKQoreworCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX2phenoxNl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbHNhX2NhcmRfamF6ejE2X2luaXQpCittb2R1bGVfZXhpdChhbHNhX2NhcmRfamF6ejE2X2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2I4X21haW4uYyBiL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jCmluZGV4IDY1OGQ1NTcuLjdkODRjOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jCkBAIC0xMDYsOSArMTA2LDIxIEBACiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXVuc2lnbmVkIGludCBtaXhyZWcsIHJhdGUsIHNpemUsIGNvdW50OworCXVuc2lnbmVkIGNoYXIgZm9ybWF0OworCXVuc2lnbmVkIGNoYXIgc3RlcmVvID0gcnVudGltZS0+Y2hhbm5lbHMgPiAxOworCWludCBkbWE7CiAKIAlyYXRlID0gcnVudGltZS0+cmF0ZTsKIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCWlmIChydW50aW1lLT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUpIHsKKwkJCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9DQVBUVVJFXzE2KQorCQkJCXJldHVybiAtRUJVU1k7CisJCQllbHNlCisJCQkJY2hpcC0+bW9kZSB8PSBTQl9NT0RFX1BMQVlCQUNLXzE2OworCQl9CisJCWNoaXAtPnBsYXliYWNrX2Zvcm1hdCA9IFNCX0RTUF9MT19PVVRQVVRfQVVUTzsKKwkJYnJlYWs7CiAJY2FzZSBTQl9IV19QUk86CiAJCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpIHsKIAkJCWlmIChzbmRfQlVHX09OKHJhdGUgIT0gU0I4X1JBVEUoMTEwMjUpICYmCkBAIC0xMzMsMTEgKzE0NSwyMSBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfMTYpIHsKKwkJZm9ybWF0ID0gc3RlcmVvID8gU0JfRFNQX1NURVJFT18xNkJJVCA6IFNCX0RTUF9NT05PXzE2QklUOworCQlkbWEgPSBjaGlwLT5kbWExNjsKKwl9IGVsc2UgeworCQlmb3JtYXQgPSBzdGVyZW8gPyBTQl9EU1BfU1RFUkVPXzhCSVQgOiBTQl9EU1BfTU9OT184QklUOworCQljaGlwLT5tb2RlIHw9IFNCX01PREVfUExBWUJBQ0tfODsKKwkJZG1hID0gY2hpcC0+ZG1hODsKKwl9CiAJc2l6ZSA9IGNoaXAtPnBfZG1hX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKIAljb3VudCA9IGNoaXAtPnBfcGVyaW9kX3NpemUgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU1BFQUtFUl9PTik7Ci0JaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkgeworCWlmIChjaGlwLT5oYXJkd2FyZSA9PSBTQl9IV19KQVpaMTYpCisJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGZvcm1hdCk7CisJZWxzZSBpZiAoc3RlcmVvKSB7CiAJCS8qIHNldCBwbGF5YmFjayBzdGVyZW8gbW9kZSAqLwogCQlzcGluX2xvY2soJmNoaXAtPm1peGVyX2xvY2spOwogCQltaXhyZWcgPSBzbmRfc2JtaXhlcl9yZWFkKGNoaXAsIFNCX0RTUF9TVEVSRU9fU1cpOwpAQCAtMTQ3LDE1ICsxNjksMTQgQEAKIAkJLyogU291bmRibGFzdGVyIGhhcmR3YXJlIHByb2dyYW1taW5nIHJlZmVyZW5jZSBndWlkZSwgMy0yMyAqLwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfRE1BOF9FWElUKTsKIAkJcnVudGltZS0+ZG1hX2FyZWFbMF0gPSAweDgwOwotCQlzbmRfZG1hX3Byb2dyYW0oY2hpcC0+ZG1hOCwgcnVudGltZS0+ZG1hX2FkZHIsIDEsIERNQV9NT0RFX1dSSVRFKTsKKwkJc25kX2RtYV9wcm9ncmFtKGRtYSwgcnVudGltZS0+ZG1hX2FkZHIsIDEsIERNQV9NT0RFX1dSSVRFKTsKIAkJLyogZm9yY2UgaW50ZXJydXB0ICovCi0JCWNoaXAtPm1vZGUgPSBTQl9NT0RFX0hBTFQ7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9PVVRQVVQpOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCAwKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgMCk7CiAJfQogCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TQU1QTEVfUkFURSk7Ci0JaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkgeworCWlmIChzdGVyZW8pIHsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgMjU2IC0gcnVudGltZS0+cmF0ZV9kZW4gLyAyKTsKIAkJc3Bpbl9sb2NrKCZjaGlwLT5taXhlcl9sb2NrKTsKIAkJLyogc2F2ZSBvdXRwdXQgZmlsdGVyIHN0YXR1cyBhbmQgdHVybiBpdCBvZmYgKi8KQEAgLTE2OCwxMyArMTg5LDE1IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuKTsKIAl9CiAJaWYgKGNoaXAtPnBsYXliYWNrX2Zvcm1hdCAhPSBTQl9EU1BfT1VUUFVUKSB7CisJCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9QTEFZQkFDS18xNikKKwkJCWNvdW50IC89IDI7CiAJCWNvdW50LS07CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9CTE9DS19TSVpFKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgY291bnQgJiAweGZmKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgY291bnQgPj4gOCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0Jc25kX2RtYV9wcm9ncmFtKGNoaXAtPmRtYTgsIHJ1bnRpbWUtPmRtYV9hZGRyLAorCXNuZF9kbWFfcHJvZ3JhbShkbWEsIHJ1bnRpbWUtPmRtYV9hZGRyLAogCQkJc2l6ZSwgRE1BX01PREVfV1JJVEUgfCBETUFfQVVUT0lOSVQpOwogCXJldHVybiAwOwogfQpAQCAtMjEyLDcgKzIzNSw2IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TUEVBS0VSX09GRik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JY2hpcC0+bW9kZSA9IChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpID8gU0JfTU9ERV9QTEFZQkFDS184IDogU0JfTU9ERV9IQUxUOwogCXJldHVybiAwOwogfQogCkBAIC0yMzQsOSArMjU2LDIxIEBACiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXVuc2lnbmVkIGludCBtaXhyZWcsIHJhdGUsIHNpemUsIGNvdW50OworCXVuc2lnbmVkIGNoYXIgZm9ybWF0OworCXVuc2lnbmVkIGNoYXIgc3RlcmVvID0gcnVudGltZS0+Y2hhbm5lbHMgPiAxOworCWludCBkbWE7CiAKIAlyYXRlID0gcnVudGltZS0+cmF0ZTsKIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCWlmIChydW50aW1lLT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUpIHsKKwkJCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9QTEFZQkFDS18xNikKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJZWxzZQorCQkJCWNoaXAtPm1vZGUgfD0gU0JfTU9ERV9DQVBUVVJFXzE2OworCQl9CisJCWNoaXAtPmNhcHR1cmVfZm9ybWF0ID0gU0JfRFNQX0xPX0lOUFVUX0FVVE87CisJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgogCQlpZiAocnVudGltZS0+Y2hhbm5lbHMgPiAxKSB7CiAJCQlpZiAoc25kX0JVR19PTihyYXRlICE9IFNCOF9SQVRFKDExMDI1KSAmJgpAQCAtMjYyLDE0ICsyOTYsMjQgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX0NBUFRVUkVfMTYpIHsKKwkJZm9ybWF0ID0gc3RlcmVvID8gU0JfRFNQX1NURVJFT18xNkJJVCA6IFNCX0RTUF9NT05PXzE2QklUOworCQlkbWEgPSBjaGlwLT5kbWExNjsKKwl9IGVsc2UgeworCQlmb3JtYXQgPSBzdGVyZW8gPyBTQl9EU1BfU1RFUkVPXzhCSVQgOiBTQl9EU1BfTU9OT184QklUOworCQljaGlwLT5tb2RlIHw9IFNCX01PREVfQ0FQVFVSRV84OworCQlkbWEgPSBjaGlwLT5kbWE4OworCX0KIAlzaXplID0gY2hpcC0+Y19kbWFfc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwogCWNvdW50ID0gY2hpcC0+Y19wZXJpb2Rfc2l6ZSA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TUEVBS0VSX09GRik7Ci0JaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkKKwlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gU0JfSFdfSkFaWjE2KQorCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBmb3JtYXQpOworCWVsc2UgaWYgKHN0ZXJlbykKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgU0JfRFNQX1NURVJFT184QklUKTsKIAlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU0FNUExFX1JBVEUpOwotCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpIHsKKwlpZiAoc3RlcmVvKSB7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuIC8gMik7CiAJCXNwaW5fbG9jaygmY2hpcC0+bWl4ZXJfbG9jayk7CiAJCS8qIHNhdmUgaW5wdXQgZmlsdGVyIHN0YXR1cyBhbmQgdHVybiBpdCBvZmYgKi8KQEAgLTI4MiwxMyArMzI2LDE1IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuKTsKIAl9CiAJaWYgKGNoaXAtPmNhcHR1cmVfZm9ybWF0ICE9IFNCX0RTUF9JTlBVVCkgeworCQlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfMTYpCisJCQljb3VudCAvPSAyOwogCQljb3VudC0tOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfQkxPQ0tfU0laRSk7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGNvdW50ICYgMHhmZik7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGNvdW50ID4+IDgpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCXNuZF9kbWFfcHJvZ3JhbShjaGlwLT5kbWE4LCBydW50aW1lLT5kbWFfYWRkciwKKwlzbmRfZG1hX3Byb2dyYW0oZG1hLCBydW50aW1lLT5kbWFfYWRkciwKIAkJCXNpemUsIERNQV9NT0RFX1JFQUQgfCBETUFfQVVUT0lOSVQpOwogCXJldHVybiAwOwogfQpAQCAtMzI4LDcgKzM3NCw2IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TUEVBS0VSX09GRik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JY2hpcC0+bW9kZSA9IChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpID8gU0JfTU9ERV9DQVBUVVJFXzggOiBTQl9NT0RFX0hBTFQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzOSwxMyArMzg0LDIxIEBACiAKIAlzbmRfc2JfYWNrXzhiaXQoY2hpcCk7CiAJc3dpdGNoIChjaGlwLT5tb2RlKSB7Ci0JY2FzZSBTQl9NT0RFX1BMQVlCQUNLXzg6CS8qIG9rLi4gcGxheWJhY2sgaXMgYWN0aXZlICovCisJY2FzZSBTQl9NT0RFX1BMQVlCQUNLXzE2OgkvKiBvay4uIHBsYXliYWNrIGlzIGFjdGl2ZSAqLworCQlpZiAoY2hpcC0+aGFyZHdhcmUgIT0gU0JfSFdfSkFaWjE2KQorCQkJYnJlYWs7CisJCS8qIGZhbGx0aHJ1ICovCisJY2FzZSBTQl9NT0RFX1BMQVlCQUNLXzg6CiAJCXN1YnN0cmVhbSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbTsKIAkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAkJaWYgKGNoaXAtPnBsYXliYWNrX2Zvcm1hdCA9PSBTQl9EU1BfT1VUUFVUKQogCQkgICAgCXNuZF9zYjhfcGxheWJhY2tfdHJpZ2dlcihzdWJzdHJlYW0sIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKTsKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCQlicmVhazsKKwljYXNlIFNCX01PREVfQ0FQVFVSRV8xNjoKKwkJaWYgKGNoaXAtPmhhcmR3YXJlICE9IFNCX0hXX0pBWloxNikKKwkJCWJyZWFrOworCQkvKiBmYWxsdGhydSAqLwogCWNhc2UgU0JfTU9ERV9DQVBUVVJFXzg6CiAJCXN1YnN0cmVhbSA9IGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtOwogCQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMzYxLDEwICs0MTQsMTUgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NiICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXNpemVfdCBwdHI7CisJaW50IGRtYTsKIAotCWlmIChjaGlwLT5tb2RlICE9IFNCX01PREVfUExBWUJBQ0tfOCkKKwlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfOCkKKwkJZG1hID0gY2hpcC0+ZG1hODsKKwllbHNlIGlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9QTEFZQkFDS18xNikKKwkJZG1hID0gY2hpcC0+ZG1hMTY7CisJZWxzZQogCQlyZXR1cm4gMDsKLQlwdHIgPSBzbmRfZG1hX3BvaW50ZXIoY2hpcC0+ZG1hOCwgY2hpcC0+cF9kbWFfc2l6ZSk7CisJcHRyID0gc25kX2RtYV9wb2ludGVyKGRtYSwgY2hpcC0+cF9kbWFfc2l6ZSk7CiAJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHB0cik7CiB9CiAKQEAgLTM3MiwxMCArNDMwLDE1IEBACiB7CiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzaXplX3QgcHRyOworCWludCBkbWE7CiAKLQlpZiAoY2hpcC0+bW9kZSAhPSBTQl9NT0RFX0NBUFRVUkVfOCkKKwlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfQ0FQVFVSRV84KQorCQlkbWEgPSBjaGlwLT5kbWE4OworCWVsc2UgaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX0NBUFRVUkVfMTYpCisJCWRtYSA9IGNoaXAtPmRtYTE2OworCWVsc2UKIAkJcmV0dXJuIDA7Ci0JcHRyID0gc25kX2RtYV9wb2ludGVyKGNoaXAtPmRtYTgsIGNoaXAtPmNfZG1hX3NpemUpOworCXB0ciA9IHNuZF9kbWFfcG9pbnRlcihkbWEsIGNoaXAtPmNfZG1hX3NpemUpOwogCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBwdHIpOwogfQogCkBAIC00NDYsNiArNTA5LDE0IEBACiAJCXJ1bnRpbWUtPmh3ID0gc25kX3NiOF9jYXB0dXJlOwogCX0KIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCWlmIChjaGlwLT5kbWExNiA9PSA1IHx8IGNoaXAtPmRtYTE2ID09IDcpCisJCQlydW50aW1lLT5ody5mb3JtYXRzIHw9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFOworCQlydW50aW1lLT5ody5yYXRlcyB8PSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwOworCQlydW50aW1lLT5ody5yYXRlX21pbiA9IDQwMDA7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gNTAwMDA7CisJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IDI7CisJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgogCQlydW50aW1lLT5ody5yYXRlX21heCA9IDQ0MTAwOwogCQlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSAyOwpAQCAtNDY4LDYgKzUzOSwxNCBAQAogCX0KIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0bnVtcyhydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKIAkJCQkgICAgICAmaHdfY29uc3RyYWludHNfY2xvY2spOworCWlmIChjaGlwLT5kbWE4ID4gMyB8fCBjaGlwLT5kbWExNiA+PSAwKSB7CisJCXNuZF9wY21faHdfY29uc3RyYWludF9zdGVwKHJ1bnRpbWUsIDAsCisJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDIpOworCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLAorCQkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTLCAyKTsKKwkJcnVudGltZS0+aHcuYnVmZmVyX2J5dGVzX21heCA9IDEyOCAqIDEwMjQgKiAxMDI0OworCQlydW50aW1lLT5ody5wZXJpb2RfYnl0ZXNfbWF4ID0gMTI4ICogMTAyNCAqIDEwMjQ7CisJfQogCXJldHVybiAwOwkKIH0KIApAQCAtNDgwLDYgKzU1OSwxMCBAQAogCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+b3Blbl9sb2NrLCBmbGFncyk7CiAJY2hpcC0+b3BlbiAmPSB+U0JfT1BFTl9QQ007CisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWNoaXAtPm1vZGUgJj0gflNCX01PREVfUExBWUJBQ0s7CisJZWxzZQorCQljaGlwLT5tb2RlICY9IH5TQl9NT0RFX0NBUFRVUkU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+b3Blbl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MTUsNiArNTk4LDcgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjaGlwLT5jYXJkOwogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKKwlzaXplX3QgbWF4X3ByZWFsbG9jID0gNjQgKiAxMDI0OwogCiAJaWYgKHJwY20pCiAJCSpycGNtID0gTlVMTDsKQEAgLTUyNyw5ICs2MTEsMTEgQEAKIAlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX3NiOF9wbGF5YmFja19vcHMpOwogCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9zYjhfY2FwdHVyZV9vcHMpOwogCisJaWYgKGNoaXAtPmRtYTggPiAzIHx8IGNoaXAtPmRtYTE2ID49IDApCisJCW1heF9wcmVhbGxvYyA9IDEyOCAqIDEwMjQ7CiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9pc2FfZGF0YSgpLAotCQkJCQkgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKKwkJCQkJICAgICAgNjQqMTAyNCwgbWF4X3ByZWFsbG9jKTsKIAogCWlmIChycGNtKQogCQkqcnBjbSA9IHBjbTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYyBiL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYwppbmRleCAyN2E2NTE1Li5lYWU2YzFjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMKKysrIGIvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jCkBAIC0xNzAsNiArMTcwLDkgQEAKIAljYXNlIFNCX0hXX0NTNTUzMDoKIAkJc3RyID0gIjE2IChDUzU1MzApIjsKIAkJYnJlYWs7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCXN0ciA9ICJQcm8gKEphenoxNikiOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYyBiL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCmluZGV4IDMxOGZmMGMuLjY0OTY4MjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCkBAIC01MjgsMjAgKzUyOCwxMSBAQAogICogU0IgMi4wIHNwZWNpZmljIG1peGVyIGVsZW1lbnRzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9tYXN0ZXJfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDIwX01BU1RFUl9ERVYsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9wY21fcGxheV92b2wgPQotCVNCX1NJTkdMRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDIwX1BDTV9ERVYsIDEsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9zeW50aF9wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9GTV9ERVYsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9DRF9ERVYsIDEsIDcpOwotCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gKnNuZF9zYjIwX2NvbnRyb2xzW10gPSB7Ci0JJnNuZF9zYjIwX2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9zYjIwX2N0bF9wY21fcGxheV92b2wsCi0JJnNuZF9zYjIwX2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NiMjBfY3RsX2NkX3BsYXlfdm9sCitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMjBfY29udHJvbHNbXSA9IHsKKwlTQl9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9NQVNURVJfREVWLCAxLCA3KSwKKwlTQl9TSU5HTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9QQ01fREVWLCAxLCAzKSwKKwlTQl9TSU5HTEUoIlN5bnRoIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDIwX0ZNX0RFViwgMSwgNyksCisJU0JfU0lOR0xFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9DRF9ERVYsIDEsIDcpCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzbmRfc2IyMF9pbml0X3ZhbHVlc1tdWzJdID0gewpAQCAtNTUyLDQxICs1NDMsMjQgQEAKIC8qCiAgKiBTQiBQcm8gc3BlY2lmaWMgbWl4ZXIgZWxlbWVudHMKICAqLwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfTUFTVEVSX0RFViwgU0JfRFNQX01BU1RFUl9ERVYsIDUsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfcGNtX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfUENNX0RFViwgU0JfRFNQX1BDTV9ERVYsIDUsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfcGNtX3BsYXlfZmlsdGVyID0KLQlTQl9TSU5HTEUoIlBDTSBQbGF5YmFjayBGaWx0ZXIiLCBTQl9EU1BfUExBWUJBQ0tfRklMVCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NicHJvX2N0bF9zeW50aF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfRk1fREVWLCBTQl9EU1BfRk1fREVWLCA1LCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX2NkX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9DRF9ERVYsIFNCX0RTUF9DRF9ERVYsIDUsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfbGluZV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9MSU5FX0RFViwgU0JfRFNQX0xJTkVfREVWLCA1LCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX21pY19wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQX01JQ19ERVYsIDEsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfY2FwdHVyZV9zb3VyY2UgPQorc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jb250cm9sc1tdID0geworCVNCX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQX01BU1RFUl9ERVYsIFNCX0RTUF9NQVNURVJfREVWLCA1LCAxLCA3KSwKKwlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUF9QQ01fREVWLCBTQl9EU1BfUENNX0RFViwgNSwgMSwgNyksCisJU0JfU0lOR0xFKCJQQ00gUGxheWJhY2sgRmlsdGVyIiwgU0JfRFNQX1BMQVlCQUNLX0ZJTFQsIDUsIDEpLAorCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1BfRk1fREVWLCBTQl9EU1BfRk1fREVWLCA1LCAxLCA3KSwKKwlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9DRF9ERVYsIFNCX0RTUF9DRF9ERVYsIDUsIDEsIDcpLAorCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUF9MSU5FX0RFViwgU0JfRFNQX0xJTkVfREVWLCA1LCAxLCA3KSwKKwlTQl9TSU5HTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfTUlDX0RFViwgMSwgMyksCiAJewogCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCiAJCS50eXBlID0gU0JfTUlYX0NBUFRVUkVfUFJPCi0JfTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX2NhcHR1cmVfZmlsdGVyID0KLQlTQl9TSU5HTEUoIkNhcHR1cmUgRmlsdGVyIiwgU0JfRFNQX0NBUFRVUkVfRklMVCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NicHJvX2N0bF9jYXB0dXJlX2xvd19maWx0ZXIgPQotCVNCX1NJTkdMRSgiQ2FwdHVyZSBMb3ctUGFzcyBGaWx0ZXIiLCBTQl9EU1BfQ0FQVFVSRV9GSUxULCAzLCAxKTsKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfc2Jwcm9fY29udHJvbHNbXSA9IHsKLQkmc25kX3NicHJvX2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9zYnByb19jdGxfcGNtX3BsYXlfdm9sLAotCSZzbmRfc2Jwcm9fY3RsX3BjbV9wbGF5X2ZpbHRlciwKLQkmc25kX3NicHJvX2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9jZF9wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9saW5lX3BsYXlfdm9sLAotCSZzbmRfc2Jwcm9fY3RsX21pY19wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9jYXB0dXJlX3NvdXJjZSwKLQkmc25kX3NicHJvX2N0bF9jYXB0dXJlX2ZpbHRlciwKLQkmc25kX3NicHJvX2N0bF9jYXB0dXJlX2xvd19maWx0ZXIKKwl9LAorCVNCX1NJTkdMRSgiQ2FwdHVyZSBGaWx0ZXIiLCBTQl9EU1BfQ0FQVFVSRV9GSUxULCA1LCAxKSwKKwlTQl9TSU5HTEUoIkNhcHR1cmUgTG93LVBhc3MgRmlsdGVyIiwgU0JfRFNQX0NBUFRVUkVfRklMVCwgMywgMSkKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9zYnByb19pbml0X3ZhbHVlc1tdWzJdID0gewpAQCAtNTk4LDY4ICs1NzIsNDIgQEAKIC8qCiAgKiBTQjE2IHNwZWNpZmljIG1peGVyIGVsZW1lbnRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X01BU1RFUl9ERVYsIChTQl9EU1A0X01BU1RFUl9ERVYgKyAxKSwgMywgMywgMzEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF8zZF9lbmhhbmNlX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCIzRCBFbmhhbmNlbWVudCBTd2l0Y2giLCBTQl9EU1A0XzNEU0UsIDAsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF90b25lX2Jhc3MgPQotCVNCX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gQmFzcyIsIFNCX0RTUDRfQkFTU19ERVYsIChTQl9EU1A0X0JBU1NfREVWICsgMSksIDQsIDQsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfdG9uZV90cmVibGUgPQotCVNCX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gVHJlYmxlIiwgU0JfRFNQNF9UUkVCTEVfREVWLCAoU0JfRFNQNF9UUkVCTEVfREVWICsgMSksIDQsIDQsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfcGNtX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X1BDTV9ERVYsIChTQl9EU1A0X1BDTV9ERVYgKyAxKSwgMywgMywgMzEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlID0KLQlTQjE2X0lOUFVUX1NXKCJTeW50aCBDYXB0dXJlIFJvdXRlIiwgU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULCA2LCA1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfc3ludGhfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9TWU5USF9ERVYsIChTQl9EU1A0X1NZTlRIX0RFViArIDEpLCAzLCAzLCAzMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUgPQotCVNCMTZfSU5QVVRfU1coIkNEIENhcHR1cmUgUm91dGUiLCBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDIsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCBTQl9EU1A0X09VVFBVVF9TVywgU0JfRFNQNF9PVVRQVVRfU1csIDIsIDEsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X0NEX0RFViwgKFNCX0RTUDRfQ0RfREVWICsgMSksIDMsIDMsIDMxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlID0KLQlTQjE2X0lOUFVUX1NXKCJMaW5lIENhcHR1cmUgUm91dGUiLCBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDQsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoID0KLQlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCA0LCAzLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDRfTElORV9ERVYsIChTQl9EU1A0X0xJTkVfREVWICsgMSksIDMsIDMsIDMxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUgPQotCVNCMTZfSU5QVVRfU1coIk1pYyBDYXB0dXJlIFJvdXRlIiwgU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULCAwLCAwKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoID0KLQlTQl9TSU5HTEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCBTQl9EU1A0X09VVFBVVF9TVywgMCwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9NSUNfREVWLCAzLCAzMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sID0KLQlTQl9TSU5HTEUoIkJlZXAgVm9sdW1lIiwgU0JfRFNQNF9TUEVBS0VSX0RFViwgNiwgMyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sID0KLQlTQl9ET1VCTEUoIkNhcHR1cmUgVm9sdW1lIiwgU0JfRFNQNF9JR0FJTl9ERVYsIChTQl9EU1A0X0lHQUlOX0RFViArIDEpLCA2LCA2LCAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9PR0FJTl9ERVYsIChTQl9EU1A0X09HQUlOX0RFViArIDEpLCA2LCA2LCAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfYXV0b19taWNfZ2FpbiA9Ci0JU0JfU0lOR0xFKCJNaWMgQXV0byBHYWluIiwgU0JfRFNQNF9NSUNfQUdDLCAwLCAxKTsKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfc2IxNl9jb250cm9sc1tdID0gewotCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfM2RfZW5oYW5jZV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF90b25lX2Jhc3MsCi0JJnNuZF9zYjE2X2N0bF90b25lX3RyZWJsZSwKLQkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9taWNfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sLAotCSZzbmRfc2IxNl9jdGxfY2FwdHVyZV92b2wsCi0JJnNuZF9zYjE2X2N0bF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2F1dG9fbWljX2dhaW4KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jb250cm9sc1tdID0geworCVNCX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQNF9NQVNURVJfREVWLCAoU0JfRFNQNF9NQVNURVJfREVWICsgMSksIDMsIDMsIDMxKSwKKwlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUDRfUENNX0RFViwgKFNCX0RTUDRfUENNX0RFViArIDEpLCAzLCAzLCAzMSksCisJU0IxNl9JTlBVVF9TVygiU3ludGggQ2FwdHVyZSBSb3V0ZSIsCisJCSAgICAgIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgNiwgNSksCisJU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUDRfU1lOVEhfREVWLCAoU0JfRFNQNF9TWU5USF9ERVYgKyAxKSwgMywgMywgMzEpLAorCVNCMTZfSU5QVVRfU1coIkNEIENhcHR1cmUgUm91dGUiLAorCQkgICAgICBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDIsIDEpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EU1A0X09VVFBVVF9TVywgU0JfRFNQNF9PVVRQVVRfU1csIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X0NEX0RFViwgKFNCX0RTUDRfQ0RfREVWICsgMSksIDMsIDMsIDMxKSwKKwlTQjE2X0lOUFVUX1NXKCJNaWMgQ2FwdHVyZSBSb3V0ZSIsCisJCSAgICAgIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgMCwgMCksCisJU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIDAsIDEpLAorCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDRfTUlDX0RFViwgMywgMzEpLAorCVNCX1NJTkdMRSgiQmVlcCBWb2x1bWUiLCBTQl9EU1A0X1NQRUFLRVJfREVWLCA2LCAzKSwKKwlTQl9ET1VCTEUoIkNhcHR1cmUgVm9sdW1lIiwKKwkJICBTQl9EU1A0X0lHQUlOX0RFViwgKFNCX0RTUDRfSUdBSU5fREVWICsgMSksIDYsIDYsIDMpLAorCVNCX0RPVUJMRSgiUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X09HQUlOX0RFViwgKFNCX0RTUDRfT0dBSU5fREVWICsgMSksIDYsIDYsIDMpLAorCVNCMTZfSU5QVVRfU1coIkxpbmUgQ2FwdHVyZSBSb3V0ZSIsCisJCSAgICAgIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgNCwgMyksCisJU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCA0LCAzLCAxKSwKKwlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X0xJTkVfREVWLCAoU0JfRFNQNF9MSU5FX0RFViArIDEpLCAzLCAzLCAzMSksCisJU0JfU0lOR0xFKCJNaWMgQXV0byBHYWluIiwgU0JfRFNQNF9NSUNfQUdDLCAwLCAxKSwKKwlTQl9TSU5HTEUoIjNEIEVuaGFuY2VtZW50IFN3aXRjaCIsIFNCX0RTUDRfM0RTRSwgMCwgMSksCisJU0JfRE9VQkxFKCJUb25lIENvbnRyb2wgLSBCYXNzIiwKKwkJICBTQl9EU1A0X0JBU1NfREVWLCAoU0JfRFNQNF9CQVNTX0RFViArIDEpLCA0LCA0LCAxNSksCisJU0JfRE9VQkxFKCJUb25lIENvbnRyb2wgLSBUcmVibGUiLAorCQkgIFNCX0RTUDRfVFJFQkxFX0RFViwgKFNCX0RTUDRfVFJFQkxFX0RFViArIDEpLCA0LCA0LCAxNSkKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9zYjE2X2luaXRfdmFsdWVzW11bMl0gPSB7CkBAIC02NzgsNDYgKzYyNiwzNCBAQAogLyoKICAqIERUMDE5eCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfTUFTVEVSX0RFViwgU0JfRFQwMTlYX01BU1RFUl9ERVYsIDQsMCwgMTUpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgU0JfRFQwMTlYX1BDTV9ERVYsIFNCX0RUMDE5WF9QQ01fREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfU1lOVEhfREVWLCBTQl9EVDAxOVhfU1lOVEhfREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfQ0RfREVWLCBTQl9EVDAxOVhfQ0RfREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9taWNfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RUMDE5WF9NSUNfREVWLCA0LCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9wY19zcGVha2VyX3ZvbCA9Ci0JU0JfU0lOR0xFKCJCZWVwIFZvbHVtZSIsIFNCX0RUMDE5WF9TUEtSX0RFViwgMCwgIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX2xpbmVfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfTElORV9ERVYsIFNCX0RUMDE5WF9MSU5FX0RFViwgNCwwLCAxNSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoID0KLQlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDIsMSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2ggPQotCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCA0LDMsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX2NhcHR1cmVfc291cmNlID0KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2NvbnRyb2xzW10gPSB7CisJLyogQUxTNDAwMCBiZWxvdyBoYXMgc29tZSBwYXJ0cyB3aGljaCB3ZSBtaWdodCBiZSBsYWNraW5nLAorCSAqIGUuZy4gc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoIC0gY2hlY2sgaXQhICovCisJU0JfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfTUFTVEVSX0RFViwgU0JfRFQwMTlYX01BU1RFUl9ERVYsIDQsIDAsIDE1KSwKKwlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLAorCQkgIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgMiwgMSwgMSksCisJU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfUENNX0RFViwgU0JfRFQwMTlYX1BDTV9ERVYsIDQsIDAsIDE1KSwKKwlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFQwMTlYX09VVFBVVF9TVzIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCA0LCAzLCAxKSwKKwlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFQwMTlYX1NZTlRIX0RFViwgU0JfRFQwMTlYX1NZTlRIX0RFViwgNCwgMCwgMTUpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EU1A0X09VVFBVVF9TVywgU0JfRFNQNF9PVVRQVVRfU1csIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfQ0RfREVWLCBTQl9EVDAxOVhfQ0RfREVWLCA0LCAwLCAxNSksCisJU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIDAsIDEpLAorCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RUMDE5WF9NSUNfREVWLCA0LCA3KSwKKwlTQl9TSU5HTEUoIkJlZXAgVm9sdW1lIiwgU0JfRFQwMTlYX1NQS1JfREVWLCAwLCAgNyksCisJU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCA0LCAzLCAxKSwKKwlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfTElORV9ERVYsIFNCX0RUMDE5WF9MSU5FX0RFViwgNCwgMCwgMTUpLAogCXsKIAkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAogCQkudHlwZSA9IFNCX01JWF9DQVBUVVJFX0RUMDE5WAotCX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2R0MDE5eF9jb250cm9sc1tdID0gewotCS8qIEFMUzQwMDAgYmVsb3cgaGFzIHNvbWUgcGFydHMgd2hpY2ggd2UgbWlnaHQgYmUgbGFja2luZywKLQkgKiBlLmcuIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCAtIGNoZWNrIGl0ISAqLwotCSZzbmRfZHQwMTl4X2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3ZvbCwKLQkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX2NkX3BsYXlfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9taWNfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX3BjX3NwZWFrZXJfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9saW5lX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCi0JJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfc3dpdGNoLAotCSZzbmRfZHQwMTl4X2N0bF9jYXB0dXJlX3NvdXJjZQorCX0KIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9kdDAxOXhfaW5pdF92YWx1ZXNbXVsyXSA9IHsKQEAgLTczNSw4MiArNjcxLDM3IEBACiAvKgogICogQUxTNDAwMCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCJNYXN0ZXIgTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczRrX2N0bF9tYXN0ZXJfbW9ub19jYXB0dXJlX3JvdXRlID0geworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2NvbnRyb2xzW10gPSB7CisJU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDQsIDMsIDEpLAorCVNCX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwLCAweDAzKSwKKwlTQl9TSU5HTEUoIk1hc3RlciBNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCA1LCAxKSwKKwl7CiAJCS5uYW1lID0gIk1hc3RlciBNb25vIENhcHR1cmUgUm91dGUiLAogCQkudHlwZSA9IFNCX01JWF9NT05PX0NBUFRVUkVfQUxTNEsKLQl9Owotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCAwLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QgPQotCVNCX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwLCAweDAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrID0KLQlTQl9TSU5HTEUoIkFuYWxvZyBMb29wYmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfZGlnaXRhbF9sb29wYmFjayA9CisJfSwKKwlTQl9TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDAsIDEpLAorCVNCX1NJTkdMRSgiQW5hbG9nIExvb3BiYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDcsIDB4MDEpLAorCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIFN3aXRjaCIsIFNCX0FMUzQwMDBfM0RfU05EX0ZYLCA2LCAweDAxKSwKIAlTQl9TSU5HTEUoIkRpZ2l0YWwgTG9vcGJhY2sgU3dpdGNoIiwKLQkJICBTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLCA3LCAweDAxKTsKLS8qIEZJWE1FOiBmdW5jdGlvbmFsaXR5IG9mIDNEIGNvbnRyb2xzIG1pZ2h0IGJlIHN3YXBwZWQsIEkgZGlkbid0IGZpbmQKLSAqIGEgZGVzY3JpcHRpb24gb2YgaG93IHRvIGlkZW50aWZ5IHdoYXQgaXMgc3VwcG9zZWQgdG8gYmUgd2hhdCAqLwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfc3dpdGNoID0KLQlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBTd2l0Y2giLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgNiwgMHgwMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbyA9Ci0JU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gTGV2ZWwiLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgMCwgMHgwNyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxID0KKwkJICBTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLCA3LCAweDAxKSwKKwkvKiBGSVhNRTogZnVuY3Rpb25hbGl0eSBvZiAzRCBjb250cm9scyBtaWdodCBiZSBzd2FwcGVkLCBJIGRpZG4ndCBmaW5kCisJICogYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gaWRlbnRpZnkgd2hhdCBpcyBzdXBwb3NlZCB0byBiZSB3aGF0ICovCisJU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gTGV2ZWwiLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgMCwgMHgwNyksCiAJLyogRklYTUU6IG1heWJlIHRoZXJlJ3MgYWN0dWFsbHkgc29tZSBzdGFuZGFyZCAzRCBjdHJsIG5hbWUgZm9yIGl0Pz8gKi8KLQlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBGcmVxIiwgU0JfQUxTNDAwMF8zRF9TTkRfRlgsIDQsIDB4MDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZGVsYXkgPQorCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIEZyZXEiLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgNCwgMHgwMyksCiAJLyogRklYTUU6IEFMUzQwMDBhLnBkZiBtZW50aW9ucyBCQkQgKEJ1Y2tldCBCcmlnYWRlIERldmljZSkgdGltZSBkZWxheSwKIAkgKiBidXQgd2hhdCBBTFNBIDNEIGF0dHJpYnV0ZSBpcyB0aGF0IGFjdHVhbGx5PyAiQ2VudGVyIiwgIkRlcHRoIiwKIAkgKiAiV2lkZSIgb3IgIlNwYWNlIiBvciBldmVuICJMZXZlbCI/IEFzc3VtaW5nICJXaWRlIiBmb3Igbm93Li4uICovCi0JU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gV2lkZSIsIFNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwgMCwgMHgwZik7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2ggPQotCVNCX1NJTkdMRSgiM0QgUG93ZXJPZmYgU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCA0LCAweDAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2ggPQorCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIFdpZGUiLCBTQl9BTFM0MDAwXzNEX1RJTUVfREVMQVksIDAsIDB4MGYpLAorCVNCX1NJTkdMRSgiM0QgUG93ZXJPZmYgU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCA0LCAweDAxKSwKIAlTQl9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayA4a0h6IC8gMjBrSHogTFBGIFN3aXRjaCIsCi0JCSAgU0JfQUxTNDAwMF9GTURBQywgNSwgMHgwMSk7CisJCSAgU0JfQUxTNDAwMF9GTURBQywgNSwgMHgwMSksCiAjaWZkZWYgTk9UX0FWQUlMQUJMRQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9mbWRhYyA9Ci0JU0JfU0lOR0xFKCJGTURBQyBTd2l0Y2ggKE9wdGlvbiA/KSIsIFNCX0FMUzQwMDBfRk1EQUMsIDAsIDB4MDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9xc291bmQgPQotCVNCX1NJTkdMRSgiUVNvdW5kIE1vZGUiLCBTQl9BTFM0MDAwX1FTT1VORCwgMSwgMHgxZik7Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfYWxzNDAwMF9jb250cm9sc1tdID0gewotCQkJCQkJLyogQUxTNDAwMGEuUERGIHJlZ3MgcGFnZSAqLwotCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAkJLyogTVgzMC8zMSAxMiAqLwotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KLQkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwJCS8qIE1YMzIvMzMgMTIgKi8KLQkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KLQkmc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sLAkJLyogTVgzNC8zNSAxMi8xMyAqLwotCSZzbmRfc2IxNl9jdGxfY2RfY2FwdHVyZV9yb3V0ZSwJCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLwotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wsCQkvKiBNWDM2LzM3IDEzICovCi0JJnNuZF9zYjE2X2N0bF9saW5lX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfdm9sLAkJLyogTVgzOC8zOSAxMyAqLwotCSZzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0LAkvKiBNWDREICAgIDE2ICovCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV92b2wsCQkvKiBNWDNBICAgIDEzICovCi0JJnNuZF9zYjE2X2N0bF9wY19zcGVha2VyX3ZvbCwJCS8qIE1YM0IgICAgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sLAkJLyogTVgzRi80MCAxNSAqLwotCSZzbmRfc2IxNl9jdGxfcGxheV92b2wsCQkJLyogTVg0MS80MiAxNSAqLwotCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoLCAvKiBNWDRDIDE2ICovCi0JJnNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSwgLyogTVg0QiAgMTYgKi8KLQkmc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCi0JJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9hbmFsb2dfbG9vcGJhY2ssIC8qIE1YNEQgICAgMTYgKi8KLQkmc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2ssIC8qIENSMyAgICAyMSAqLwotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCwJCSAvKiBNWDUwICAgMTcgKi8KLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbywJCSAvKiBNWDUwICAgMTcgKi8KLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxLAkJIC8qIE1YNTAgICAxNyAqLwotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5LAkJIC8qIE1YNTEgICAxOCAqLwotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCwJLyogTVg1MSAgICAxOCAqLwotCSZzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2gsCS8qIE1YNEYgICAgMTcgKi8KLSNpZmRlZiBOT1RfQVZBSUxBQkxFCi0JJnNuZF9hbHM0MDAwX2N0bF9mbWRhYywKLQkmc25kX2FsczQwMDBfY3RsX3Fzb3VuZCwKKwlTQl9TSU5HTEUoIkZNREFDIFN3aXRjaCAoT3B0aW9uID8pIiwgU0JfQUxTNDAwMF9GTURBQywgMCwgMHgwMSksCisJU0JfU0lOR0xFKCJRU291bmQgTW9kZSIsIFNCX0FMUzQwMDBfUVNPVU5ELCAxLCAweDFmKSwKICNlbmRpZgogfTsKIApAQCAtODI5LDExICs3MjAsMTAgQEAKIAl7IFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDAgfSwKIH07CiAKLQogLyoKICAqLwogc3RhdGljIGludCBzbmRfc2JtaXhlcl9pbml0KHN0cnVjdCBzbmRfc2IgKmNoaXAsCi0JCQkgICAgc3RydWN0IHNibWl4X2VsZW0gKipjb250cm9scywKKwkJCSAgICBzdHJ1Y3Qgc2JtaXhfZWxlbSAqY29udHJvbHMsCiAJCQkgICAgaW50IGNvbnRyb2xzX2NvdW50LAogCQkJICAgIHVuc2lnbmVkIGNoYXIgbWFwW11bMl0sCiAJCQkgICAgaW50IG1hcF9jb3VudCwKQEAgLTg1Niw3ICs3NDYsOCBAQAogCX0KIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgY29udHJvbHNfY291bnQ7IGlkeCsrKSB7Ci0JCWlmICgoZXJyID0gc25kX3NibWl4ZXJfYWRkX2N0bF9lbGVtKGNoaXAsIGNvbnRyb2xzW2lkeF0pKSA8IDApCisJCWVyciA9IHNuZF9zYm1peGVyX2FkZF9jdGxfZWxlbShjaGlwLCAmY29udHJvbHNbaWR4XSk7CisJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CiAJc25kX2NvbXBvbmVudF9hZGQoY2FyZCwgbmFtZSk7CkBAIC04ODgsNiArNzc5LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgorCWNhc2UgU0JfSFdfSkFaWjE2OgogCQlpZiAoKGVyciA9IHNuZF9zYm1peGVyX2luaXQoY2hpcCwKIAkJCQkJICAgIHNuZF9zYnByb19jb250cm9scywKIAkJCQkJICAgIEFSUkFZX1NJWkUoc25kX3NicHJvX2NvbnRyb2xzKSwKQEAgLTkwOCw2ICs4MDAsMTUgQEAKIAkJCXJldHVybiBlcnI7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfQUxTNDAwMDoKKwkJLyogdXNlIG9ubHkgdGhlIGZpcnN0IDE2IGNvbnRyb2xzIGZyb20gU0IxNiAqLworCQllcnIgPSBzbmRfc2JtaXhlcl9pbml0KGNoaXAsCisJCQkJCXNuZF9zYjE2X2NvbnRyb2xzLAorCQkJCQkxNiwKKwkJCQkJc25kX3NiMTZfaW5pdF92YWx1ZXMsCisJCQkJCUFSUkFZX1NJWkUoc25kX3NiMTZfaW5pdF92YWx1ZXMpLAorCQkJCQkiQUxTNDAwMCIpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJCWlmICgoZXJyID0gc25kX3NibWl4ZXJfaW5pdChjaGlwLAogCQkJCQkgICAgc25kX2FsczQwMDBfY29udHJvbHMsCiAJCQkJCSAgICBBUlJBWV9TSVpFKHNuZF9hbHM0MDAwX2NvbnRyb2xzKSwKQEAgLTEwMjksNiArOTMwLDcgQEAKIAkJc2F2ZV9taXhlcihjaGlwLCBzYjIwX3NhdmVkX3JlZ3MsIEFSUkFZX1NJWkUoc2IyMF9zYXZlZF9yZWdzKSk7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgorCWNhc2UgU0JfSFdfSkFaWjE2OgogCQlzYXZlX21peGVyKGNoaXAsIHNicHJvX3NhdmVkX3JlZ3MsIEFSUkFZX1NJWkUoc2Jwcm9fc2F2ZWRfcmVncykpOwogCQlicmVhazsKIAljYXNlIFNCX0hXXzE2OgpAQCAtMTA1NSw2ICs5NTcsNyBAQAogCQlyZXN0b3JlX21peGVyKGNoaXAsIHNiMjBfc2F2ZWRfcmVncywgQVJSQVlfU0laRShzYjIwX3NhdmVkX3JlZ3MpKTsKIAkJYnJlYWs7CiAJY2FzZSBTQl9IV19QUk86CisJY2FzZSBTQl9IV19KQVpaMTY6CiAJCXJlc3RvcmVfbWl4ZXIoY2hpcCwgc2Jwcm9fc2F2ZWRfcmVncywgQVJSQVlfU0laRShzYnByb19zYXZlZF9yZWdzKSk7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfMTY6CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCmluZGV4IDViOWQ2YzEuLjkxOTFiMzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCisrKyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCkBAIC0yMDE0LDYgKzIwMTQsNyBAQAogCWNhc2UgV1NTX0hXX0lOVEVSV0FWRToKIAkJcHRleHRzID0gZ3VzbWF4X3RleHRzOwogCQlicmVhazsKKwljYXNlIFdTU19IV19PUFRJOTNYOgogCWNhc2UgV1NTX0hXX09QTDNTQTI6CiAJCXB0ZXh0cyA9IG9wbDNzYV90ZXh0czsKIAkJYnJlYWs7CkBAIC0yMjQ2LDU0ICsyMjQ3LDEyIEBACiAJCUNTNDIzMV9NT05PX0NUUkwsIDUsIDEsIDApLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9vcHRpOTN4X2NvbnRyb2xzW10gPSB7Ci1XU1NfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJT1BUaTkzWF9PVVRfTEVGVCwgT1BUaTkzWF9PVVRfUklHSFQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRV9UTFYoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlPUFRpOTNYX09VVF9MRUZULCBPUFRpOTNYX09VVF9SSUdIVCwgMSwgMSwgMzEsIDEsCi0JCWRiX3NjYWxlXzZiaXQpLAotV1NTX0RPVUJMRSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCUNTNDIzMV9MRUZUX09VVFBVVCwgQ1M0MjMxX1JJR0hUX09VVFBVVCwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMCwKLQkJQ1M0MjMxX0xFRlRfT1VUUFVULCBDUzQyMzFfUklHSFRfT1VUUFVULCAwLCAwLCAzMSwgMSksCi1XU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEpLAotV1NTX0RPVUJMRSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDUzQyMzFfTEVGVF9MSU5FX0lOLCBDUzQyMzFfUklHSFRfTElORV9JTiwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9MRUZUX0xJTkVfSU4sIENTNDIzMV9SSUdIVF9MSU5FX0lOLCAwLCAwLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJT1BUaTkzWF9NSUNfTEVGVF9JTlBVVCwgT1BUaTkzWF9NSUNfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCU9QVGk5M1hfTUlDX0xFRlRfSU5QVVQsIE9QVGk5M1hfTUlDX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJNaWMgQm9vc3QiLCAwLAotCQlDUzQyMzFfTEVGVF9JTlBVVCwgQ1M0MjMxX1JJR0hUX0lOUFVULCA1LCA1LCAxLCAwKSwKLVdTU19ET1VCTEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCUNTNDIzMV9BVVgxX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULCA3LCA3LCAxLCAxKSwKLVdTU19ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9BVVgxX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJT1BUaTkzMV9BVVhfTEVGVF9JTlBVVCwgT1BUaTkzMV9BVVhfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRSgiQXV4IFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCU9QVGk5MzFfQVVYX0xFRlRfSU5QVVQsIE9QVGk5MzFfQVVYX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9MRUZUX0lOUFVULCBDUzQyMzFfUklHSFRfSU5QVVQsIDAsIDAsIDE1LCAwKSwKLXsKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JLmluZm8gPSBzbmRfd3NzX2luZm9fbXV4LAotCS5nZXQgPSBzbmRfd3NzX2dldF9tdXgsCi0JLnB1dCA9IHNuZF93c3NfcHV0X211eCwKLX0KLX07Ci0KIGludCBzbmRfd3NzX21peGVyKHN0cnVjdCBzbmRfd3NzICpjaGlwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCWludCBlcnI7CisJaW50IGNvdW50ID0gQVJSQVlfU0laRShzbmRfd3NzX2NvbnRyb2xzKTsKIAogCWlmIChzbmRfQlVHX09OKCFjaGlwIHx8ICFjaGlwLT5wY20pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzMDIsMjggKzIyNjEsMTkgQEAKIAogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsIGNoaXAtPnBjbS0+bmFtZSk7CiAKLQlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX09QVEk5M1gpCi0JCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfb3B0aTkzeF9jb250cm9scyk7IGlkeCsrKSB7Ci0JCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAotCQkJCQlzbmRfY3RsX25ldzEoJnNuZF9vcHRpOTN4X2NvbnRyb2xzW2lkeF0sCi0JCQkJCQkgICAgIGNoaXApKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQllbHNlIHsKLQkJaW50IGNvdW50ID0gQVJSQVlfU0laRShzbmRfd3NzX2NvbnRyb2xzKTsKKwkvKiBVc2Ugb25seSB0aGUgZmlyc3QgMTEgZW50cmllcyBvbiBBRDE4NDggKi8KKwlpZiAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQUQxODQ4X01BU0spCisJCWNvdW50ID0gMTE7CisJLyogVGhlcmUgaXMgbm8gbG9vcGJhY2sgb24gT1BUSTkzWCAqLworCWVsc2UgaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19PUFRJOTNYKQorCQljb3VudCA9IDk7CiAKLQkJLyogVXNlIG9ubHkgdGhlIGZpcnN0IDExIGVudHJpZXMgb24gQUQxODQ4ICovCi0JCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19BRDE4NDhfTUFTSykKLQkJCWNvdW50ID0gMTE7Ci0KLQkJZm9yIChpZHggPSAwOyBpZHggPCBjb3VudDsgaWR4KyspIHsKLQkJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsCi0JCQkJCXNuZF9jdGxfbmV3MSgmc25kX3dzc19jb250cm9sc1tpZHhdLAotCQkJCQkJICAgICBjaGlwKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQl9CisJZm9yIChpZHggPSAwOyBpZHggPCBjb3VudDsgaWR4KyspIHsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKKwkJCQlzbmRfY3RsX25ldzEoJnNuZF93c3NfY29udHJvbHNbaWR4XSwKKwkJCQkJICAgICBjaGlwKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCmluZGV4IGYxZDlkMTYuLjZhZmYyMTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCisrKyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtNjAzLDI1ICs2MDIsMTQgQEAKIHN0YXRpYyBpbnQgc25kX3NnaW8yYXVkaW9fcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlpbnQgc2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKLQotCS8qIGFsbG9jIHZpcnR1YWwgJ2RtYScgYXJlYSAqLwotCWlmIChydW50aW1lLT5kbWFfYXJlYSkKLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY191c2VyKHNpemUpOwotCWlmIChydW50aW1lLT5kbWFfYXJlYSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwotCXJldHVybiAwOworCXJldHVybiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sCisJCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQogCiAvKiBod19mcmVlIGNhbGxiYWNrICovCiBzdGF0aWMgaW50IHNuZF9zZ2lvMmF1ZGlvX3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXZmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpOwotCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCXJldHVybiAwOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7CiB9CiAKIC8qIHByZXBhcmUgY2FsbGJhY2sgKi8KQEAgLTY5MiwxMyArNjgwLDYgQEAKIAkJCSAgICAgICBjaGlwLT5jaGFubmVsW2NoYW4tPmlkeF0ucG9zKTsKIH0KIAotLyogZ2V0IHRoZSBwaHlzaWNhbCBwYWdlIHBvaW50ZXIgb24gdGhlIGdpdmVuIG9mZnNldCAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfc2dpbzJhdWRpb19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQpOwotfQotCiAvKiBvcGVyYXRvcnMgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3NnaW8yYXVkaW9fcGxheWJhY2sxX29wcyA9IHsKIAkub3BlbiA9ICAgICAgICBzbmRfc2dpbzJhdWRpb19wbGF5YmFjazFfb3BlbiwKQEAgLTcwOSw3ICs2OTAsOCBAQAogCS5wcmVwYXJlID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wb2ludGVyLAotCS5wYWdlID0gICAgICAgIHNuZF9zZ2lvMmF1ZGlvX3BhZ2UsCisJLnBhZ2UgPSAgICAgICAgc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9ICAgICAgICBzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9zZ2lvMmF1ZGlvX3BsYXliYWNrMl9vcHMgPSB7CkBAIC03MjEsNyArNzAzLDggQEAKIAkucHJlcGFyZSA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcG9pbnRlciwKLQkucGFnZSA9ICAgICAgICBzbmRfc2dpbzJhdWRpb19wYWdlLAorCS5wYWdlID0gICAgICAgIHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPSAgICAgICAgc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfc2dpbzJhdWRpb19jYXB0dXJlX29wcyA9IHsKQEAgLTczMyw3ICs3MTYsOCBAQAogCS5wcmVwYXJlID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wb2ludGVyLAotCS5wYWdlID0gICAgICAgIHNuZF9zZ2lvMmF1ZGlvX3BhZ2UsCisJLnBhZ2UgPSAgICAgICAgc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9ICAgICAgICBzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMgYi9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYwppbmRleCA0MTkxYWNjLi5jMTA3MGUzIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYworKysgYi9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYwpAQCAtNjE0LDcgKzYxNCw4IEBACiAJLyogUHV0IHR3byBidWZmZXJzIG9uIHRoZSByaW5nIHRvIGdldCB0aGluZ3Mgc3RhcnRlZC4KIAkqLwogCWZvciAoaT0wOyBpPDI7IGkrKykgewotCQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoZGItPmRtYW5yLCBkYi0+bmV4dEluLCBkYi0+ZG1hX2ZyYWdzaXplKTsKKwkJYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGRiLT5kbWFuciwgdmlydF90b19waHlzKGRiLT5uZXh0SW4pLAorCQkJCWRiLT5kbWFfZnJhZ3NpemUsIERETUFfRkxBR1NfSUUpOwogCiAJCWRiLT5uZXh0SW4gKz0gZGItPmRtYV9mcmFnc2l6ZTsKIAkJaWYgKGRiLT5uZXh0SW4gPj0gZGItPnJhd2J1ZiArIGRiLT5kbWFzaXplKQpAQCAtNzMyLDggKzczMyw5IEBACiAJZGItPmRtYV9xY291bnQtLTsKIAogCWlmIChkYi0+Y291bnQgPj0gZGItPmZyYWdzaXplKSB7Ci0JCWlmIChhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShkYi0+ZG1hbnIsIGRiLT5uZXh0T3V0LAotCQkJCQkJCWRiLT5mcmFnc2l6ZSkgPT0gMCkgeworCQlpZiAoYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoZGItPmRtYW5yLAorCQkJCXZpcnRfdG9fcGh5cyhkYi0+bmV4dE91dCksIGRiLT5mcmFnc2l6ZSwKKwkJCQlERE1BX0ZMQUdTX0lFKSA9PSAwKSB7CiAJCQllcnIoInFjb3VudCA8IDIgYW5kIG5vIHJpbmcgcm9vbSEiKTsKIAkJfQogCQlkYi0+bmV4dE91dCArPSBkYi0+ZnJhZ3NpemU7CkBAIC03NzcsNyArNzc5LDggQEAKIAogCS8qIFB1dCBhIG5ldyBlbXB0eSBidWZmZXIgb24gdGhlIGRlc3RpbmF0aW9uIERNQS4KIAkqLwotCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChkcC0+ZG1hbnIsIGRwLT5uZXh0SW4sIGRwLT5kbWFfZnJhZ3NpemUpOworCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChkcC0+ZG1hbnIsIHZpcnRfdG9fcGh5cyhkcC0+bmV4dEluKSwKKwkJCSAgICAgIGRwLT5kbWFfZnJhZ3NpemUsIERETUFfRkxBR1NfSUUpOwogCiAJZHAtPm5leHRJbiArPSBkcC0+ZG1hX2ZyYWdzaXplOwogCWlmIChkcC0+bmV4dEluID49IGRwLT5yYXdidWYgKyBkcC0+ZG1hc2l6ZSkKQEAgLTExNzcsOCArMTE4MCw5IEBACiAJCSAqIHdlIGtub3cgdGhlIGRtYSBoYXMgc3RvcHBlZC4KIAkJICovCiAJCXdoaWxlICgoZGItPmRtYV9xY291bnQgPCAyKSAmJiAoZGItPmNvdW50ID49IGRiLT5mcmFnc2l6ZSkpIHsKLQkJCWlmIChhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShkYi0+ZG1hbnIsIGRiLT5uZXh0T3V0LAotCQkJCQkJCWRiLT5mcmFnc2l6ZSkgPT0gMCkgeworCQkJaWYgKGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGRiLT5kbWFuciwKKwkJCQl2aXJ0X3RvX3BoeXMoZGItPm5leHRPdXQpLCBkYi0+ZnJhZ3NpemUsCisJCQkJRERNQV9GTEFHU19JRSkgPT0gMCkgewogCQkJCWVycigicWNvdW50IDwgMiBhbmQgbm8gcmluZyByb29tISIpOwogCQkJfQogCQkJZGItPm5leHRPdXQgKz0gZGItPmZyYWdzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2thaGx1YS5jIGIvc291bmQvb3NzL2thaGx1YS5jCmluZGV4IDg5NDY2YjAuLjI0ZDE1MmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9rYWhsdWEuYworKysgYi9zb3VuZC9vc3Mva2FobHVhLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogICoJNTUzMCBvbmx5LiBUaGUgNTUxMC81NTIwIGRlY29kZSBpcyBkaWZmZXJlbnQuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlkX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShDWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0FVRElPKSwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwppbmRleCBjNjI1MzA5Li5mZGU3YzEyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMKKysrIGIvc291bmQvb3NzL3NvdW5kY2FyZC5jCkBAIC0zMjgsMTEgKzMyOCwxMSBAQAogCXJldHVybiBtaXhlcl9kZXZzW21peGRldl0tPmlvY3RsKG1peGRldiwgY21kLCBhcmcpOwogfQogCi1zdGF0aWMgaW50IHNvdW5kX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBzb3VuZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IGxlbiA9IDAsIGR0eXBlOwotCWludCBkZXYgPSBpbWlub3IoaW5vZGUpOworCWludCBkZXYgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWxvbmcgcmV0ID0gLUVJTlZBTDsKIAl2b2lkIF9fdXNlciAqcCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAogCWlmIChfU0lPQ19ESVIoY21kKSAhPSBfU0lPQ19OT05FICYmIF9TSU9DX0RJUihjbWQpICE9IDApIHsKQEAgLTM1Myw2ICszNTMsNyBAQAogCWlmIChjbWQgPT0gT1NTX0dFVFZFUlNJT04pCiAJCXJldHVybiBfX3B1dF91c2VyKFNPVU5EX1ZFUlNJT04sIChpbnQgX191c2VyICopcCk7CiAJCisJbG9ja19rZXJuZWwoKTsKIAlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gJ00nICYmIG51bV9taXhlcnMgPiAwICYmICAgLyogTWl4ZXIgaW9jdGwgKi8KIAkgICAgKGRldiAmIDB4MGYpICE9IFNORF9ERVZfQ1RMKSB7ICAgICAgICAgICAgICAKIAkJZHR5cGUgPSBkZXYgJiAweDBmOwpAQCAtMzYwLDI0ICszNjEsMzEgQEAKIAkJY2FzZSBTTkRfREVWX0RTUDoKIAkJY2FzZSBTTkRfREVWX0RTUDE2OgogCQljYXNlIFNORF9ERVZfQVVESU86Ci0JCQlyZXR1cm4gc291bmRfbWl4ZXJfaW9jdGwoYXVkaW9fZGV2c1tkZXYgPj4gNF0tPm1peGVyX2RldiwKKwkJCXJldCA9IHNvdW5kX21peGVyX2lvY3RsKGF1ZGlvX2RldnNbZGV2ID4+IDRdLT5taXhlcl9kZXYsCiAJCQkJCQkgY21kLCBwKTsKLQkJCQorCQkJYnJlYWs7CQkJCiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCQlyZXQgPSBzb3VuZF9taXhlcl9pb2N0bChkZXYgPj4gNCwgY21kLCBwKTsKKwkJCWJyZWFrOwogCQl9CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlzd2l0Y2ggKGRldiAmIDB4MGYpIHsKIAljYXNlIFNORF9ERVZfQ1RMOgogCQlpZiAoY21kID09IFNPVU5EX01JWEVSX0dFVExFVkVMUykKLQkJCXJldHVybiBnZXRfbWl4ZXJfbGV2ZWxzKHApOwotCQlpZiAoY21kID09IFNPVU5EX01JWEVSX1NFVExFVkVMUykKLQkJCXJldHVybiBzZXRfbWl4ZXJfbGV2ZWxzKHApOwotCQlyZXR1cm4gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCQlyZXQgPSBnZXRfbWl4ZXJfbGV2ZWxzKHApOworCQllbHNlIGlmIChjbWQgPT0gU09VTkRfTUlYRVJfU0VUTEVWRUxTKQorCQkJcmV0ID0gc2V0X21peGVyX2xldmVscyhwKTsKKwkJZWxzZQorCQkJcmV0ID0gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCWJyZWFrOwogCiAJY2FzZSBTTkRfREVWX1NFUToKIAljYXNlIFNORF9ERVZfU0VRMjoKLQkJcmV0dXJuIHNlcXVlbmNlcl9pb2N0bChkZXYsIGZpbGUsIGNtZCwgcCk7CisJCXJldCA9IHNlcXVlbmNlcl9pb2N0bChkZXYsIGZpbGUsIGNtZCwgcCk7CisJCWJyZWFrOwogCiAJY2FzZSBTTkRfREVWX0RTUDoKIAljYXNlIFNORF9ERVZfRFNQMTY6CkBAIC0zOTAsNyArMzk4LDggQEAKIAkJYnJlYWs7CiAKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc291bmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCkBAIC00OTAsNyArNDk5LDcgQEAKIAkucmVhZAkJPSBzb3VuZF9yZWFkLAogCS53cml0ZQkJPSBzb3VuZF93cml0ZSwKIAkucG9sbAkJPSBzb3VuZF9wb2xsLAotCS5pb2N0bAkJPSBzb3VuZF9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSBzb3VuZF9pb2N0bCwKIAkubW1hcAkJPSBzb3VuZF9tbWFwLAogCS5vcGVuCQk9IHNvdW5kX29wZW4sCiAJLnJlbGVhc2UJPSBzb3VuZF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCAzNTE2NTRjLi4xMjk4YzY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtNzg5LDYgKzc4OSw3IEBACiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlCiAJICBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLCBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsCiAJICBFc3NlbmNlIFNUIChEZWx1eGUpLCBhbmQgRXNzZW5jZSBTVFguCisJICBTdXBwb3J0IGZvciB0aGUgRFMgaXMgZXhwZXJpbWVudGFsLgogCSAgU3VwcG9ydCBmb3IgdGhlIEhEQVYxLjMgKERlbHV4ZSkgaXMgdmVyeSBleHBlcmltZW50YWwuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwppbmRleCBkOTI2NmJhLi4xY2FmNWUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCkBAIC01NDQsMjUgKzU0NCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhdGNoX3dvbGZzb25fd205NzA1X3NwZWNpZmljKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCi17Ci0JaW50IGVyciwgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTk3eHhfc25kX2FjOTdfY29udHJvbHMpOyBpKyspIHsKLQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChhYzk3LT5idXMtPmNhcmQsIHNuZF9hYzk3X2NuZXcoJndtOTd4eF9zbmRfYWM5N19jb250cm9sc1tpXSwgYWM5NykpKSA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCAgMHg3MiwgMHgwODA4KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfYWM5N19idWlsZF9vcHMgcGF0Y2hfd29sZnNvbl93bTk3MDVfb3BzID0gewotCS5idWlsZF9zcGVjaWZpYyA9IHBhdGNoX3dvbGZzb25fd205NzA1X3NwZWNpZmljLAotfTsKLQogc3RhdGljIGludCBwYXRjaF93b2xmc29uMDUoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAkvKiBXTTk3MDUsIFdNOTcxMCAqLwotCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF93b2xmc29uX3dtOTcwNV9vcHM7CisJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX3dvbGZzb25fd205NzAzX29wczsKICNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzA1CiAJLyogV005NzA1IHRvdWNoc2NyZWVuIHVzZXMgQVVYIGFuZCBWSURFTyBmb3IgdG91Y2ggKi8KIAlhYzk3LT5mbGFncyB8PSBBQzk3X0hBU19OT19WSURFTyB8IEFDOTdfSEFTX05PX0FVWDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCA4ZjUwOThmLi40MzgyZDBmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FkMTg4OV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYWQxODg5X2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU5BTE9HX0RFVklDRVMsIFBDSV9ERVZJQ0VfSURfQUQxODg5SlMpIH0sCiAJeyAwLCB9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBhYWY0ZGE2Li41YzZlMzIyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yNzUsNyArMjc1LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hbGlfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2FsaV9pZHMpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTU0NTEpLCAwLCAwLCAwfSwKIAl7MCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwppbmRleCAzYWEzNWFmLi5kNzY1M2NiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzMzAwLmMKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlpbnQgYmxvY2tfY291bnRlcl9yZWdpc3RlcjsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWxzMzAwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hbHMzMDBfaWRzKSA9IHsKIAl7IDB4NDAwNSwgMHgwMzAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBERVZJQ0VfQUxTMzAwIH0sCiAJeyAweDQwMDUsIDB4MDMwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREVWSUNFX0FMUzMwMF9QTFVTIH0sCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzNDAwMC5jIGIvc291bmQvcGNpL2FsczQwMDAuYwppbmRleCAzZGJhY2RlLi5kNzVjZjdiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzNDAwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FsczQwMDBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2FsczQwMDBfaWRzKSA9IHsKIAl7IDB4NDAwNSwgMHg0MDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAgIC8qIEFMUzQwMDAgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggNDJiNGZiYi4uNDlkNTcyYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXRpaXhwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hdGlpeHBfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzQxKSwgMCB9LCAvKiBTQjIwMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzNjEpLCAwIH0sIC8qIFNCMzAwICovCiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM3MCksIDAgfSwgLyogU0I0MDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwppbmRleCBlN2UxNDdiLi45MWQ3MDM2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogLyoKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hdGlpeHBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2F0aWl4cF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzNGQpLCAwIH0sIC8qIFNCMjAwICovCiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM3OCksIDAgfSwgLyogU0I0MDAgKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgxMC5jCmluZGV4IGMwZThjNmIuLmFhNTFjYzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MTAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MTAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92b3J0ZXhfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoQVVSRUFMLCBQQ0lfREVWSUNFX0lEX0FVUkVBTF9BRFZBTlRBR0UpLCAxLH0sCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgyMC5jCmluZGV4IGE2NTI3MzMuLjJmMzIxZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MjAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MjAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92b3J0ZXhfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoQVVSRUFMLCBQQ0lfREVWSUNFX0lEX0FVUkVBTF9WT1JURVhfMSksIDAsfSwKIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODMwLmMKaW5kZXggNmM3MDJhZC4uMjc5Yjc4ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgzMC5jCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgImF1ODgzMC5oIgogI2luY2x1ZGUgImF1ODh4MC5oIgotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92b3J0ZXhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3ZvcnRleF9pZHMpID0gewogCXtQQ0lfVkRFVklDRShBVVJFQUwsIFBDSV9ERVZJQ0VfSURfQVVSRUFMX1ZPUlRFWF8yKSwgMCx9LAogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMgYi9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKaW5kZXggNGQzNGJiMC4uNjc5MjFmOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCisrKyBiL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEF1ZGlvd2VyazIgc291bmRjYXJkLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F3Ml9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYXcyX2lkcykgPSB7CiAJe1BDSV9WRU5ET1JfSURfU0FBNzE0NiwgUENJX0RFVklDRV9JRF9TQUE3MTQ2LCAwLCAwLAogCSAwLCAwLCAwfSwKIAl7MH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDY5ODY3YWMuLjQ2NzllZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXpmMzMyOF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYXpmMzMyOF9pZHMpID0gewogCXsgMHgxMjJELCAweDUwREMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiBQQ0kxNjgvMzMyOCAqLwogCXsgMHgxMjJELCAweDgwREEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiAzMzI4ICovCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDRlMmI5MjUuLjM3ZTFiNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC03OTUsNyArNzk1LDcgQEAKIAkgIC5kcml2ZXJfZGF0YSA9IFNORF9CVDg3WF9CT0FSRF8gIyMgaWQgfQogLyogZHJpdmVyX2RhdGEgaXMgdGhlIGNhcmQgaWQgZm9yIHRoYXQgZGV2aWNlICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYnQ4N3hfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2J0ODd4X2lkcykgPSB7CiAJLyogSGF1cHBhdWdlIFdpblRWIHNlcmllcyAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MDA3MCwgMHgxM2ViLCBHRU5FUklDKSwKIAkvKiBIYXVwcGF1Z2UgV2luVFYgc2VyaWVzICovCkBAIC05NjQsNyArOTY0LDcgQEAKIAogLyogZGVmYXVsdCBlbnRyaWVzIGZvciBhbGwgQnQ4N3ggY2FyZHMgLSBpdCdzIG5vdCBleHBvcnRlZCAqLwogLyogZHJpdmVyX2RhdGEgaXMgc2V0IHRvIDAgdG8gY2FsbCBkZXRlY3Rpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYnQ4N3hfZGVmYXVsdF9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9idDg3eF9kZWZhdWx0X2lkcykgPSB7CiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgVU5LTk9XTiksCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgVU5LTk9XTiksCiAJeyB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggMTVlNDEzOC4uMGEzZDNkNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMTg3NSw3ICsxODc1LDcgQEAKICNlbmRpZgogCiAvLyBQQ0kgSURzCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NhMDEwNl9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfY2EwMTA2X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDA3KSwgMCB9LAkvKiBBdWRpZ3kgTFMgb3IgTGl2ZSAyNGJpdCAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jbWlwY2kuYyBiL3NvdW5kL3BjaS9jbWlwY2kuYwppbmRleCBhMzEyYmFlLi4xZGVkNjRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY21pcGNpLmMKKysrIGIvc291bmQvcGNpL2NtaXBjaS5jCkBAIC0yNzk2LDcgKzI3OTYsNyBAQAogI2VuZGlmCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jbWlwY2lfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NtaXBjaV9pZHMpID0gewogCXtQQ0lfVkRFVklDRShDTUVESUEsIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEEpLCAwfSwKIAl7UENJX1ZERVZJQ0UoQ01FRElBLCBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTgzMzhCKSwgMH0sCiAJe1BDSV9WREVWSUNFKENNRURJQSwgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4KSwgMH0sCkBAIC0zMDE4LDcgKzMwMTgsNyBAQAogCWludCBpbnRlZ3JhdGVkX21pZGkgPSAwOwogCWNoYXIgbW9kZWxzdHJbMTZdOwogCWludCBwY21faW5kZXgsIHBjbV9zcGRpZl9pbmRleDsKLQlzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaW50ZWxfODI0Mzd2eFtdID0geworCXN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpbnRlbF84MjQzN3Z4KSA9IHsKIAkJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MzdWWCkgfSwKIAkJeyB9LAogCX07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0MjgxLmMgYi9zb3VuZC9wY2kvY3M0MjgxLmMKaW5kZXggZTJlMDM1OS4uOWVkYzY1MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDI4MS5jCisrKyBiL3NvdW5kL3BjaS9jczQyODEuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfY3M0MjgxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NzNDI4MV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfY3M0MjgxX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDSVJSVVMsIDB4NjAwNSksIDAsIH0sCS8qIENTNDI4MSAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCmluZGV4IDAzM2FlYzQuLjc2N2ZhN2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwpAQCAtNjQsNyArNjQsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KG1tYXBfdmFsaWQsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtbWFwX3ZhbGlkLCAiU3VwcG9ydCBPU1MgbW1hcC4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczQ2eHhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NzNDZ4eF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQ0lSUlVTLCAweDYwMDEpLCAwLCB9LCAgIC8qIENTNDI4MCAqLwogCXsgUENJX1ZERVZJQ0UoQ0lSUlVTLCAweDYwMDMpLCAwLCB9LCAgIC8qIENTNDYxMiAqLwogCXsgUENJX1ZERVZJQ0UoQ0lSUlVTLCAweDYwMDQpLCAwLCB9LCAgIC8qIENTNDYxNSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCAxYmU5NmVhLi4zZjk5YTVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMjIzOCwxMSArMjIzOCwxMSBAQAogCiAJLyogc2V0IHRoZSBkZXNpcmVkIENPREVDIG1vZGUgKi8KIAlpZiAoYWM5Ny0+bnVtID09IENTNDZYWF9QUklNQVJZX0NPREVDX0lOREVYKSB7Ci0JCXNuZF9wcmludGRkKCJjczQ2eHg6IENPRE9FQzEgbW9kZSAlMDR4XG4iLDB4MCk7Ci0JCXNuZF9jczQ2eHhfYWM5N193cml0ZShhYzk3LEFDOTdfQ1NSX0FDTU9ERSwweDApOworCQlzbmRfcHJpbnRkZCgiY3M0Nnh4OiBDT0RFQzEgbW9kZSAlMDR4XG4iLCAweDApOworCQlzbmRfY3M0Nnh4X2FjOTdfd3JpdGUoYWM5NywgQUM5N19DU1JfQUNNT0RFLCAweDApOwogCX0gZWxzZSBpZiAoYWM5Ny0+bnVtID09IENTNDZYWF9TRUNPTkRBUllfQ09ERUNfSU5ERVgpIHsKLQkJc25kX3ByaW50ZGQoImNzNDZ4eDogQ09ET0VDMiBtb2RlICUwNHhcbiIsMHgzKTsKLQkJc25kX2NzNDZ4eF9hYzk3X3dyaXRlKGFjOTcsQUM5N19DU1JfQUNNT0RFLDB4Myk7CisJCXNuZF9wcmludGRkKCJjczQ2eHg6IENPREVDMiBtb2RlICUwNHhcbiIsIDB4Myk7CisJCXNuZF9jczQ2eHhfYWM5N193cml0ZShhYzk3LCBBQzk3X0NTUl9BQ01PREUsIDB4Myk7CiAJfSBlbHNlIHsKIAkJc25kX0JVRygpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuIC4uLiAqLwogCX0KQEAgLTIyNjYsNyArMjI2Niw3IEBACiAJCQlyZXR1cm47CiAKIAkJLyogdGVzdCBpZiB3ZSBjYW4gd3JpdGUgdG8gdGhlIHJlY29yZCBnYWluIHZvbHVtZSByZWdpc3RlciAqLwotCQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCBBQzk3X1JFQ19HQUlOLCAweDhhMDUpOworCQlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X1JFQ19HQUlOLCAweDhhMDUpOwogCQlpZiAoKGVyciA9IHNuZF9hYzk3X3JlYWQoYWM5NywgQUM5N19SRUNfR0FJTikpID09IDB4OGEwNSkKIAkJCXJldHVybjsKIApAQCAtMzU5Nyw3ICszNTk3LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2F2ZWRfcmVnc1tdID0gewogCUJBMF9BQ09TViwKLQlCQTBfQVNFUl9GQUREUiwKKwkvKkJBMF9BU0VSX0ZBRERSLCovCiAJQkEwX0FTRVJfTUFTVEVSLAogCUJBMV9QVk9MLAogCUJBMV9DVk9MLApAQCAtMzY0NCw2ICszNjQ0LDcgQEAKICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQCiAJaW50IGk7CiAjZW5kaWYKKwl1bnNpZ25lZCBpbnQgdG1wOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKQEAgLTM2ODUsNiArMzY4NiwxNSBAQAogCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3W0NTNDZYWF9QUklNQVJZX0NPREVDX0lOREVYXSk7CiAJc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTdbQ1M0NlhYX1NFQ09OREFSWV9DT0RFQ19JTkRFWF0pOwogCisJLyoKKyAgICAgICAgICogIFN0b3AgY2FwdHVyZSBETUEuCisJICovCisJdG1wID0gc25kX2NzNDZ4eF9wZWVrKGNoaXAsIEJBMV9DQ1RMKTsKKwljaGlwLT5jYXB0LmN0bCA9IHRtcCAmIDB4MDAwMGZmZmY7CisJc25kX2NzNDZ4eF9wb2tlKGNoaXAsIEJBMV9DQ1RMLCB0bXAgJiAweGZmZmYwMDAwKTsKKworCW1kZWxheSg1KTsKKwogCS8qIHJlc2V0IHBsYXliYWNrL2NhcHR1cmUgKi8KIAlzbmRfY3M0Nnh4X3NldF9wbGF5X3NhbXBsZV9yYXRlKGNoaXAsIDgwMDApOwogCXNuZF9jczQ2eHhfc2V0X2NhcHR1cmVfc2FtcGxlX3JhdGUoY2hpcCwgODAwMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMKaW5kZXggZjRmMGM4Zi4uM2U1Y2E4ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuYwpAQCAtMjk4LDYgKzI5OCw5IEBACiAJCWlmIChpbnMtPnNjYnNbaV0uZGVsZXRlZCkgY29udGludWU7CiAKIAkJY3M0Nnh4X2RzcF9wcm9jX2ZyZWVfc2NiX2Rlc2MgKCAoaW5zLT5zY2JzICsgaSkgKTsKKyNpZmRlZiBDT05GSUdfUE0KKwkJa2ZyZWUoaW5zLT5zY2JzW2ldLmRhdGEpOworI2VuZGlmCiAJfQogCiAJa2ZyZWUoaW5zLT5jb2RlLmRhdGEpOwpAQCAtOTc0LDEzICs5NzcsMTEgQEAKIAogCWluZGV4ID0gZmluZF9mcmVlX3NjYl9pbmRleCAoaW5zKTsKIAorCW1lbXNldCgmaW5zLT5zY2JzW2luZGV4XSwgMCwgc2l6ZW9mKGlucy0+c2Nic1tpbmRleF0pKTsKIAlzdHJjcHkoaW5zLT5zY2JzW2luZGV4XS5zY2JfbmFtZSwgbmFtZSk7CiAJaW5zLT5zY2JzW2luZGV4XS5hZGRyZXNzID0gZGVzdDsKIAlpbnMtPnNjYnNbaW5kZXhdLmluZGV4ID0gaW5kZXg7Ci0JaW5zLT5zY2JzW2luZGV4XS5wcm9jX2luZm8gPSBOVUxMOwogCWlucy0+c2Nic1tpbmRleF0ucmVmX2NvdW50ID0gMTsKLQlpbnMtPnNjYnNbaW5kZXhdLmRlbGV0ZWQgPSAwOwotCXNwaW5fbG9ja19pbml0KCZpbnMtPnNjYnNbaW5kZXhdLmxvY2spOwogCiAJZGVzYyA9IChpbnMtPnNjYnMgKyBpbmRleCk7CiAJaW5zLT5zY2JzW2luZGV4XS5zY2Jfc3ltYm9sID0gYWRkX3N5bWJvbCAoY2hpcCwgbmFtZSwgZGVzdCwgU1lNQk9MX1BBUkFNRVRFUik7CkBAIC0xMDIyLDE3ICsxMDIzLDI5IEBACiAJcmV0dXJuIGRlc2M7CiB9CiAKKyNkZWZpbmUgU0NCX0JZVEVTCSgweDEwICogNCkKKwogc3RydWN0IGRzcF9zY2JfZGVzY3JpcHRvciAqCiBjczQ2eHhfZHNwX2NyZWF0ZV9zY2IgKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBjaGFyICogbmFtZSwgdTMyICogc2NiX2RhdGEsIHUzMiBkZXN0KQogewogCXN0cnVjdCBkc3Bfc2NiX2Rlc2NyaXB0b3IgKiBkZXNjOwogCisjaWZkZWYgQ09ORklHX1BNCisJLyogY29weSB0aGUgZGF0YSBmb3IgcmVzdW1lICovCisJc2NiX2RhdGEgPSBrbWVtZHVwKHNjYl9kYXRhLCBTQ0JfQllURVMsIEdGUF9LRVJORUwpOworCWlmICghc2NiX2RhdGEpCisJCXJldHVybiBOVUxMOworI2VuZGlmCisKIAlkZXNjID0gX21hcF9zY2IgKGNoaXAsbmFtZSxkZXN0KTsKIAlpZiAoZGVzYykgewogCQlkZXNjLT5kYXRhID0gc2NiX2RhdGE7CiAJCV9kc3BfY3JlYXRlX3NjYihjaGlwLHNjYl9kYXRhLGRlc3QpOwogCX0gZWxzZSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImRzcF9zcG9zOiBmYWlsZWQgdG8gbWFwIFNDQlxuIik7CisjaWZkZWYgQ09ORklHX1BNCisJCWtmcmVlKHNjYl9kYXRhKTsKKyNlbmRpZgogCX0KIAogCXJldHVybiBkZXNjOwpAQCAtMTk4OCw3ICsyMDAxLDI4IEBACiAJCQljb250aW51ZTsKIAkJX2RzcF9jcmVhdGVfc2NiKGNoaXAsIHMtPmRhdGEsIHMtPmFkZHJlc3MpOwogCX0KLQorCWZvciAoaSA9IDA7IGkgPCBpbnMtPm5zY2I7IGkrKykgeworCQlzdHJ1Y3QgZHNwX3NjYl9kZXNjcmlwdG9yICpzID0gJmlucy0+c2Nic1tpXTsKKwkJaWYgKHMtPmRlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKHMtPnVwZGF0ZWQpCisJCQljczQ2eHhfZHNwX3Nwb3NfdXBkYXRlX3NjYihjaGlwLCBzKTsKKwkJaWYgKHMtPnZvbHVtZV9zZXQpCisJCQljczQ2eHhfZHNwX3NjYl9zZXRfdm9sdW1lKGNoaXAsIHMsCisJCQkJCQkgIHMtPnZvbHVtZVswXSwgcy0+dm9sdW1lWzFdKTsKKwl9CisJaWYgKGlucy0+c3BkaWZfc3RhdHVzX291dCAmIERTUF9TUERJRl9TVEFUVVNfSFdfRU5BQkxFRCkgeworCQljczQ2eHhfZHNwX2VuYWJsZV9zcGRpZl9odyhjaGlwKTsKKwkJc25kX2NzNDZ4eF9wb2tlKGNoaXAsIChpbnMtPnJlZl9zbm9vcF9zY2ItPmFkZHJlc3MgKyAyKSA8PCAyLAorCQkJCShPVVRQVVRfU05PT1BfQlVGRkVSICsgMHgxMCkgPDwgMHgxMCk7CisJCWlmIChpbnMtPnNwZGlmX3N0YXR1c19vdXQgJiBEU1BfU1BESUZfU1RBVFVTX1BMQVlCQUNLX09QRU4pCisJCQljczQ2eHhfcG9rZV92aWFfZHNwKGNoaXAsIFNQX1NQRE9VVF9DU1VWLAorCQkJCQkgICAgaW5zLT5zcGRpZl9jc3V2X3N0cmVhbSk7CisJfQorCWlmIChjaGlwLT5kc3Bfc3Bvc19pbnN0YW5jZS0+c3BkaWZfc3RhdHVzX2luKSB7CisJCWNzNDZ4eF9wb2tlX3ZpYV9kc3AoY2hpcCwgU1BfQVNFUl9DT1VOVERPV04sIDB4ODAwMDAwMDUpOworCQljczQ2eHhfcG9rZV92aWFfZHNwKGNoaXAsIFNQX1NQRElOX0NPTlRST0wsIDB4ODAwMDAzZmYpOworCX0KIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5oIGIvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5oCmluZGV4IGY5ZTE2OWQuLmNhNDdhODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuaAorKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmgKQEAgLTIxMiw2ICsyMTIsNyBAQAogCQkJKHNjYi0+YWRkcmVzcyArIFNDQnN1Ykxpc3RQdHIpIDw8IDIsCiAJCQkoc2NiLT5zdWJfbGlzdF9wdHItPmFkZHJlc3MgPDwgMHgxMCkgfAogCQkJKHNjYi0+bmV4dF9zY2JfcHRyLT5hZGRyZXNzKSk7CQorCXNjYi0+dXBkYXRlZCA9IDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjczQ2eHhfZHNwX3NjYl9zZXRfdm9sdW1lIChzdHJ1Y3Qgc25kX2NzNDZ4eCAqIGNoaXAsCkBAIC0yMjIsNiArMjIzLDkgQEAKIAogCXNuZF9jczQ2eHhfcG9rZShjaGlwLCAoc2NiLT5hZGRyZXNzICsgU0NCVm9sdW1lQ3RybCkgPDwgMiwgdmFsKTsKIAlzbmRfY3M0Nnh4X3Bva2UoY2hpcCwgKHNjYi0+YWRkcmVzcyArIFNDQlZvbHVtZUN0cmwgKyAxKSA8PCAyLCB2YWwpOworCXNjYi0+dm9sdW1lX3NldCA9IDE7CisJc2NiLT52b2x1bWVbMF0gPSBsZWZ0OworCXNjYi0+dm9sdW1lWzFdID0gcmlnaHQ7CiB9CiAjZW5kaWYgLyogX19EU1BfU1BPU19IX18gKi8KICNlbmRpZiAvKiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYwppbmRleCBkZDdjNDFiLi4wMGIxNDhhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYwpAQCAtMTE1LDcgKzExNSw2IEBACiBzdGF0aWMgdm9pZCBfZHNwX3VubGlua19zY2IgKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBzdHJ1Y3QgZHNwX3NjYl9kZXNjcmlwdG9yICogc2NiKQogewogCXN0cnVjdCBkc3Bfc3Bvc19pbnN0YW5jZSAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIHNjYi0+cGFyZW50X3NjYl9wdHIgKSB7CiAJCS8qIHVubGluayBwYXJlbnQgU0NCICovCkBAIC0xNTMsOCArMTUyLDYgQEAKIAkJCXNjYi0+bmV4dF9zY2JfcHRyID0gaW5zLT50aGVfbnVsbF9zY2I7CiAJCX0KIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsgICAgCi0KIAkJLyogdXBkYXRlIHBhcmVudCBmaXJzdCBlbnRyeSBpbiBEU1AgUkFNICovCiAJCWNzNDZ4eF9kc3Bfc3Bvc191cGRhdGVfc2NiKGNoaXAsc2NiLT5wYXJlbnRfc2NiX3B0cik7CiAKQEAgLTE2Miw3ICsxNTksNiBAQAogCQljczQ2eHhfZHNwX3Nwb3NfdXBkYXRlX3NjYihjaGlwLHNjYik7CiAKIAkJc2NiLT5wYXJlbnRfc2NiX3B0ciA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJfQogfQogCkBAIC0xOTcsOSArMTkzLDkgQEAKIAkJZ290byBfZW5kOwogI2VuZGlmCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7ICAgIAogCV9kc3BfdW5saW5rX3NjYiAoY2hpcCxzY2IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjYi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAljczQ2eHhfZHNwX3Byb2NfZnJlZV9zY2JfZGVzYyhzY2IpOwogCWlmIChzbmRfQlVHX09OKCFzY2ItPnNjYl9zeW1ib2wpKQpAQCAtMjA3LDYgKzIwMywxMCBAQAogCXJlbW92ZV9zeW1ib2wgKGNoaXAsc2NiLT5zY2Jfc3ltYm9sKTsKIAogCWlucy0+c2Nic1tzY2ItPmluZGV4XS5kZWxldGVkID0gMTsKKyNpZmRlZiBDT05GSUdfUE0KKwlrZnJlZShpbnMtPnNjYnNbc2NiLT5pbmRleF0uZGF0YSk7CisJaW5zLT5zY2JzW3NjYi0+aW5kZXhdLmRhdGEgPSBOVUxMOworI2VuZGlmCiAKIAlpZiAoc2NiLT5pbmRleCA8IGlucy0+c2NiX2hpZ2hlc3RfZnJhZ19pbmRleCkKIAkJaW5zLT5zY2JfaGlnaGVzdF9mcmFnX2luZGV4ID0gc2NiLT5pbmRleDsKQEAgLTE1MDgsMjAgKzE1MDgsMTcgQEAKIAkJICAgICAgIGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlLT5ucGNtX2NoYW5uZWxzIDw9IDApKQogCQlyZXR1cm4gLUVJTzsKIAotCXNwaW5fbG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOwotCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKHBjbV9jaGFubmVsLT51bmxpbmtlZCkgewotCQlzcGluX3VubG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlwY21fY2hhbm5lbC0+dW5saW5rZWQgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAlfZHNwX3VubGlua19zY2IgKGNoaXAscGNtX2NoYW5uZWwtPnBjbV9yZWFkZXJfc2NiKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCi0Jc3Bpbl91bmxvY2soJnBjbV9jaGFubmVsLT5zcmNfc2NiLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUzMywxMCArMTUzMCwxMCBAQAogCXN0cnVjdCBkc3Bfc2NiX2Rlc2NyaXB0b3IgKiBzcmNfc2NiID0gcGNtX2NoYW5uZWwtPnNyY19zY2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHBjbV9jaGFubmVsLT51bmxpbmtlZCA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZwY21fY2hhbm5lbC0+c3JjX3NjYi0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTU1Miw4ICsxNTQ5LDYgQEAKIAlzbmRfQlVHX09OKHBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3NjYi0+cGFyZW50X3NjYl9wdHIpOwogCXBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3NjYi0+cGFyZW50X3NjYl9wdHIgPSBwYXJlbnRfc2NiOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KIAkvKiB1cGRhdGUgU0NCIGVudHJ5IGluIERTUCBSQU0gKi8KIAljczQ2eHhfZHNwX3Nwb3NfdXBkYXRlX3NjYihjaGlwLHBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3NjYik7CiAKQEAgLTE1NjIsOCArMTU1Nyw2IEBACiAKIAlwY21fY2hhbm5lbC0+dW5saW5rZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KLQlzcGluX3VubG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNTk2LDEzICsxNTg5LDE3IEBACiAKIGludCBjczQ2eHhfc3JjX3VubGluayhzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgc3RydWN0IGRzcF9zY2JfZGVzY3JpcHRvciAqIHNyYykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKHNuZF9CVUdfT04oIXNyYy0+cGFyZW50X3NjYl9wdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIG11dGUgU0NCICovCiAJY3M0Nnh4X2RzcF9zY2Jfc2V0X3ZvbHVtZSAoY2hpcCxzcmMsMCwwKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCV9kc3BfdW5saW5rX3NjYiAoY2hpcCxzcmMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzAuYyBiL3NvdW5kL3BjaS9jczU1MzAuYwppbmRleCBkYzQ2NDMyLi4yMDc0NzlhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTMwLmMKKysrIGIvc291bmQvcGNpL2NzNTUzMC5jCkBAIC01OCw3ICs1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBwY2lfYmFzZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M1NTMwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9jczU1MzBfaWRzKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0FVRElPLCBQQ0lfQU5ZX0lELAogCQkJCQkJCVBDSV9BTllfSUQsIDAsIDB9LAogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggOTFlN2ZhZi4uYWZiODAzNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTY2LDcgKzY2LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBEUklWRVJfTkFNRSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M1NTM1YXVkaW9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NzNTUzNWF1ZGlvX2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0FVRElPKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0FVRElPKSB9LAogCXt9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCmluZGV4IDQ1OWMxZjYuLjQ4MGNiMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCkBAIC0xMjE0LDEwICsxMjE0LDExIEBACiAJcmV0dXJuIGN0X2F0Y19kZXN0cm95KGF0Yyk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGF0Y19pZGVudGlmeV9jYXJkKHN0cnVjdCBjdF9hdGMgKmF0YykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0Y19pZGVudGlmeV9jYXJkKHN0cnVjdCBjdF9hdGMgKmF0YywgdW5zaWduZWQgaW50IHNzaWQpCiB7CiAJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnA7CiAJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3Q7CisJdTE2IHZlbmRvcl9pZCwgZGV2aWNlX2lkOwogCiAJc3dpdGNoIChhdGMtPmNoaXBfdHlwZSkgewogCWNhc2UgQVRDMjBLMToKQEAgLTEyMzEsMTMgKzEyMzIsMTkgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JcCA9IHNuZF9wY2lfcXVpcmtfbG9va3VwKGF0Yy0+cGNpLCBsaXN0KTsKKwlpZiAoc3NpZCkgeworCQl2ZW5kb3JfaWQgPSBzc2lkID4+IDE2OworCQlkZXZpY2VfaWQgPSBzc2lkICYgMHhmZmZmOworCX0gZWxzZSB7CisJCXZlbmRvcl9pZCA9IGF0Yy0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yOworCQlkZXZpY2VfaWQgPSBhdGMtPnBjaS0+c3Vic3lzdGVtX2RldmljZTsKKwl9CisJcCA9IHNuZF9wY2lfcXVpcmtfbG9va3VwX2lkKHZlbmRvcl9pZCwgZGV2aWNlX2lkLCBsaXN0KTsKIAlpZiAocCkgewogCQlpZiAocC0+dmFsdWUgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImN0eGZpOiAiCiAJCQkgICAgICAgIkRldmljZSAlMDR4OiUwNHggaXMgYmxhY2stbGlzdGVkXG4iLAotCQkJICAgICAgIGF0Yy0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAotCQkJICAgICAgIGF0Yy0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJCSAgICAgICB2ZW5kb3JfaWQsIGRldmljZV9pZCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCQlhdGMtPm1vZGVsID0gcC0+dmFsdWU7CkBAIC0xMjUwLDggKzEyNTcsNyBAQAogCWF0Yy0+bW9kZWxfbmFtZSA9IGN0X3N1YnN5c19uYW1lW2F0Yy0+bW9kZWxdOwogCXNuZF9wcmludGQoImN0eGZpOiBjaGlwICVzIG1vZGVsICVzICglMDR4OiUwNHgpIGlzIGZvdW5kXG4iLAogCQkgICBhdGMtPmNoaXBfbmFtZSwgYXRjLT5tb2RlbF9uYW1lLAotCQkgICBhdGMtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKLQkJICAgYXRjLT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpOworCQkgICB2ZW5kb3JfaWQsIGRldmljZV9pZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MjUsNyArMTYzMSw4IEBACiAKIGludCBfX2RldmluaXQgY3RfYXRjX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkgICAgdW5zaWduZWQgaW50IHJzciwgdW5zaWduZWQgaW50IG1zciwKLQkJCSAgICBpbnQgY2hpcF90eXBlLCBzdHJ1Y3QgY3RfYXRjICoqcmF0YykKKwkJCSAgICBpbnQgY2hpcF90eXBlLCB1bnNpZ25lZCBpbnQgc3NpZCwKKwkJCSAgICBzdHJ1Y3QgY3RfYXRjICoqcmF0YykKIHsKIAlzdHJ1Y3QgY3RfYXRjICphdGM7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CkBAIC0xNjUxLDcgKzE2NTgsNyBAQAogCW11dGV4X2luaXQoJmF0Yy0+YXRjX211dGV4KTsKIAogCS8qIEZpbmQgY2FyZCBtb2RlbCAqLwotCWVyciA9IGF0Y19pZGVudGlmeV9jYXJkKGF0Yyk7CisJZXJyID0gYXRjX2lkZW50aWZ5X2NhcmQoYXRjLCBzc2lkKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImN0YXRjOiBDYXJkIG5vdCByZWNvZ25pc2VkXG4iKTsKIAkJZ290byBlcnJvcjE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuaCBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oCmluZGV4IDlmZDhhNTcuLjcxNjdjMDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogaW50IF9fZGV2aW5pdCBjdF9hdGNfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcnNyLCB1bnNpZ25lZCBpbnQgbXNyLCBpbnQgY2hpcF90eXBlLAotCQkJICAgIHN0cnVjdCBjdF9hdGMgKipyYXRjKTsKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3Vic3lzaWQsIHN0cnVjdCBjdF9hdGMgKipyYXRjKTsKIGludCBfX2RldmluaXQgY3RfYXRjX2NyZWF0ZV9hbHNhX2RldnMoc3RydWN0IGN0X2F0YyAqYXRjKTsKIAogI2VuZGlmIC8qIENUQVRDX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS94ZmkuYyBiL3NvdW5kL3BjaS9jdHhmaS94ZmkuYwppbmRleCA3NjU0MTc0Li5mNDJlN2UxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkveGZpLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL3hmaS5jCkBAIC0zMiw2ICszMiw3IEBACiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwogc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOworc3RhdGljIHVuc2lnbmVkIGludCBzdWJzeXN0ZW1bU05EUlZfQ0FSRFNdOwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIENyZWF0aXZlIFgtRmkgZHJpdmVyIik7CkBAIC0zOSw4ICs0MCwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKK21vZHVsZV9wYXJhbV9hcnJheShzdWJzeXN0ZW0sIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN1YnN5c3RlbSwgIk92ZXJyaWRlIHN1YnN5c3RlbSBJRCBmb3IgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN0X3BjaV9kZXZfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY3RfcGNpX2Rldl9pZHMpID0gewogCS8qIG9ubHkgWC1GaSBpcyBzdXBwb3J0ZWQsIHNvLi4uICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ1JFQVRJVkUsIFBDSV9ERVZJQ0VfSURfQ1JFQVRJVkVfMjBLMSksCiAJICAuZHJpdmVyX2RhdGEgPSBBVEMyMEsxLApAQCAtODUsNyArODgsNyBAQAogCQltdWx0aXBsZSA9IDI7CiAJfQogCWVyciA9IGN0X2F0Y19jcmVhdGUoY2FyZCwgcGNpLCByZWZlcmVuY2VfcmF0ZSwgbXVsdGlwbGUsCi0JCQkgICAgcGNpX2lkLT5kcml2ZXJfZGF0YSwgJmF0Yyk7CisJCQkgICAgcGNpX2lkLT5kcml2ZXJfZGF0YSwgc3Vic3lzdGVtW2Rldl0sICZhdGMpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjAuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCmluZGV4IDhjNmRiM2EuLmE2NWJhZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCkBAIC02Myw3ICs2Myw3IEBACiAJezAsICJkYXJsYTIwX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDEwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIERhcmxhMjAgcmV2LjAgKi8KIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwX2RzcC5jCmluZGV4IDI5MDQzMzAuLjIwYzdjYmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjBfZHNwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0RBUkxBMjBfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfREFSTEEyMF9EU1A7CiAJY2hpcC0+c3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX1VOREVGOwogCWNoaXAtPmNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCkBAIC01NywxNSArNTcsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogLyogVGhlIERhcmxhMjAgaGFzIG5vIGV4dGVybmFsIGNsb2NrIHNvdXJjZXMgKi8KIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwppbmRleCAwNGNiZjNlLi4wYTZjNTBiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwpAQCAtNjcsNyArNjcsNyBAQAogCXswLCAiZGFybGEyNF9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA0MCwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBEYXJsYTI0IHJldi4wICovCiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA0MSwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBEYXJsYTI0IHJldi4xICovCiAJezAsfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jCmluZGV4IDYwMjI4NzMuLjZkYTY2NjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyNF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjRfZHNwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0RBUkxBMjRfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfREFSTEEyNF9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC01NiwxNSArNTYsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZy5jCmluZGV4IDQwMjJlNDMuLmY1MTQyNzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2cuYwpAQCAtODEsNyArODEsNyBAQAogCXswLCAiM2dfYXNpYy5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMTAwLCAwLCAwLCAwfSwJLyogRWNobyAzRyAqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCmluZGV4IDU3OTY3ZTUuLjNjZGMyZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCkBAIC02MSw3ICs2MSw3IEBACiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CiAJY2hpcC0+aGFzX21pZGkgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19FQ0hPM0dfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfRUNITzNHX0RTUDsKIAogCS8qIExvYWQgdGhlIERTUCBjb2RlIGFuZCB0aGUgQVNJQyBvbiB0aGUgUENJIGNhcmQgYW5kIGdldAogCXdoYXQgdHlwZSBvZiBleHRlcm5hbCBib3ggaXMgYXR0YWNoZWQgKi8KQEAgLTk3LDIwICs5Nyw2IEBACiAJY2hpcC0+ZGlnaXRhbF9tb2RlcyA9CUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBIHwKIAkJCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUwgfAogCQkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKLQljaGlwLT5kaWdpdGFsX21vZGUgPQlESUdJVEFMX01PREVfU1BESUZfUkNBOwotCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOwotCWNoaXAtPm5vbl9hdWRpb19zcGRpZiA9IEZBTFNFOwotCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwotCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc2V0X2RpZ2l0YWxfbW9kZShjaGlwLCBESUdJVEFMX01PREVfU1BESUZfUkNBKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcGhhbnRvbV9wb3dlcihjaGlwLCAwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwogCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CkBAIC0xMTgsNiArMTA0LDE4IEBACiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+bm9uX2F1ZGlvX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisJY2hpcC0+cGhhbnRvbV9wb3dlciA9IEZBTFNFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIGludCBzZXRfcGhhbnRvbV9wb3dlcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIG9uKQogewogCXUzMiBjb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCAxMzA1ZjdjLi44ZGFiODJkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTM2LDIyICszNiw2MSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBjaGFubmVsc19saXN0WzEwXSA9IHsxLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgOTk5OTk5fTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYl9zY2FsZV9vdXRwdXRfZ2FpbiwgLTEyODAwLCAxMDAsIDEpOwogCisKKwogc3RhdGljIGludCBnZXRfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZndfZW50cnksCi0JCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZybSwgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKKwkJCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNvbnN0IHNob3J0IGZ3X2luZGV4KQogewogCWludCBlcnI7CiAJY2hhciBuYW1lWzMwXTsKLQlERV9BQ1QoKCJmaXJtd2FyZSByZXF1ZXN0ZWQ6ICVzXG4iLCBmcm0tPmRhdGEpKTsKLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJlYS8lcyIsIGZybS0+ZGF0YSk7Ci0JaWYgKChlcnIgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3X2VudHJ5LCBuYW1lLCBwY2lfZGV2aWNlKGNoaXApKSkgPCAwKQorCisjaWZkZWYgQ09ORklHX1BNCisJaWYgKGNoaXAtPmZ3X2NhY2hlW2Z3X2luZGV4XSkgeworCQlERV9BQ1QoKCJmaXJtd2FyZSByZXF1ZXN0ZWQ6ICVzIGlzIGNhY2hlZFxuIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSkpOworCQkqZndfZW50cnkgPSBjaGlwLT5md19jYWNoZVtmd19pbmRleF07CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJREVfQUNUKCgiZmlybXdhcmUgcmVxdWVzdGVkOiAlc1xuIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSkpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImVhLyVzIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZShmd19lbnRyeSwgbmFtZSwgcGNpX2RldmljZShjaGlwKSk7CisJaWYgKGVyciA8IDApCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImdldF9maXJtd2FyZSgpOiBGaXJtd2FyZSBub3QgYXZhaWxhYmxlICglZClcbiIsIGVycik7CisjaWZkZWYgQ09ORklHX1BNCisJZWxzZQorCQljaGlwLT5md19jYWNoZVtmd19pbmRleF0gPSAqZndfZW50cnk7CisjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQogCisKKwogc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5KQogeworI2lmZGVmIENPTkZJR19QTQorCURFX0FDVCgoImZpcm13YXJlIG5vdCByZWxlYXNlZCAoa2VwdCBpbiBjYWNoZSlcbiIpKTsKKyNlbHNlCiAJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJREVfQUNUKCgiZmlybXdhcmUgcmVsZWFzZWRcbiIpKTsKKyNlbmRpZgorfQorCisKKworc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZV9jYWNoZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworI2lmZGVmIENPTkZJR19QTQorCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDggOyBpKyspCisJCWlmIChjaGlwLT5md19jYWNoZVtpXSkgeworCQkJcmVsZWFzZV9maXJtd2FyZShjaGlwLT5md19jYWNoZVtpXSk7CisJCQlERV9BQ1QoKCJyZWxlYXNlX2Zpcm13YXJlKCVkKVxuIiwgaSkpOworCQl9CisKKwlERV9BQ1QoKCJmaXJtd2FyZV9jYWNoZSByZWxlYXNlZFxuIikpOworI2VuZGlmCiB9CiAKIApAQCAtNzE0LDYgKzc1Myw4IEBACiAKIAlzcGluX2xvY2soJmNoaXAtPmxvY2spOwogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCURFX0FDVCgoInBjbV90cmlnZ2VyIHJlc3VtZVxuIikpOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgogCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdGFydFxuIikpOwpAQCAtNzM3LDYgKzc3OCw4IEBACiAJCWVyciA9IHN0YXJ0X3RyYW5zcG9ydChjaGlwLCBjaGFubmVsbWFzaywKIAkJCQkgICAgICBjaGlwLT5waXBlX2N5Y2xpY19tYXNrKTsKIAkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdXNwZW5kXG4iKSk7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdG9wXG4iKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBEU1BfTUFYUElQRVM7IGkrKykgewpAQCAtMTgyMSw3ICsxODY0LDkgQEAKIAkvKiBUaGUgaGFyZHdhcmUgZG9lc24ndCB0ZWxsIHVzIHdoaWNoIHN1YnN0cmVhbSBjYXVzZWQgdGhlIGlycSwKIAl0aHVzIHdlIGhhdmUgdG8gY2hlY2sgYWxsIHJ1bm5pbmcgc3Vic3RyZWFtcy4gKi8KIAlmb3IgKHNzID0gMDsgc3MgPCBEU1BfTUFYUElQRVM7IHNzKyspIHsKLQkJaWYgKChzdWJzdHJlYW0gPSBjaGlwLT5zdWJzdHJlYW1bc3NdKSkgeworCQlzdWJzdHJlYW0gPSBjaGlwLT5zdWJzdHJlYW1bc3NdOworCQlpZiAoc3Vic3RyZWFtICYmICgoc3RydWN0IGF1ZGlvcGlwZSAqKXN1YnN0cmVhbS0+cnVudGltZS0+CisJCQkJcHJpdmF0ZV9kYXRhKS0+c3RhdGUgPT0gUElQRV9TVEFURV9TVEFSVEVEKSB7CiAJCQlwZXJpb2QgPSBwY21fcG9pbnRlcihzdWJzdHJlYW0pIC8KIAkJCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZF9zaXplOwogCQkJaWYgKHBlcmlvZCAhPSBjaGlwLT5sYXN0X3BlcmlvZFtzc10pIHsKQEAgLTE4NzQsNiArMTkxOSw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiAKIAkvKiByZWxlYXNlIGNoaXAgZGF0YSAqLworCWZyZWVfZmlybXdhcmVfY2FjaGUoY2hpcCk7CiAJa2ZyZWUoY2hpcCk7CiAJREVfSU5JVCgoIkNoaXAgZnJlZWQuXG4iKSk7CiAJcmV0dXJuIDA7CkBAIC0xOTExLDE4ICsxOTU3LDI3IEBACiAJCXJldHVybiBlcnI7CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAotCS8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhICovCi0JY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGlwKSB7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBBbGxvY2F0ZSBjaGlwIGlmIG5lZWRlZCAqLworCWlmICghKnJjaGlwKSB7CisJCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaXApIHsKKwkJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJREVfSU5JVCgoImNoaXA9JXBcbiIsIGNoaXApKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCQljaGlwLT5jYXJkID0gY2FyZDsKKwkJY2hpcC0+cGNpID0gcGNpOworCQljaGlwLT5pcnEgPSAtMTsKKwkJYXRvbWljX3NldCgmY2hpcC0+b3BlbmNvdW50LCAwKTsKKwkJbXV0ZXhfaW5pdCgmY2hpcC0+bW9kZV9tdXRleCk7CisJCWNoaXAtPmNhbl9zZXRfcmF0ZSA9IDE7CisJfSBlbHNlIHsKKwkJLyogSWYgdGhpcyB3YXMgY2FsbGVkIGZyb20gdGhlIHJlc3VtZSBmdW5jdGlvbiwgY2hpcCBpcworCQkgKiBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaXQgY29udGFpbnMgY3VycmVudCBjYXJkIHNldHRpbmdzLgorCQkgKi8KKwkJY2hpcCA9ICpyY2hpcDsKIAl9Ci0JREVfSU5JVCgoImNoaXA9JXBcbiIsIGNoaXApKTsKLQotCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKLQljaGlwLT5jYXJkID0gY2FyZDsKLQljaGlwLT5wY2kgPSBwY2k7Ci0JY2hpcC0+aXJxID0gLTE7CiAKIAkvKiBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLwogCWNoaXAtPmRzcF9yZWdpc3RlcnNfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwpAQCAtMTk2Miw3ICsyMDE3LDkgQEAKIAljaGlwLT5jb21tX3BhZ2UgPSAoc3RydWN0IGNvbW1fcGFnZSAqKWNoaXAtPmNvbW1wYWdlX2RtYV9idWYuYXJlYTsKIAogCWVyciA9IGluaXRfaHcoY2hpcCwgY2hpcC0+cGNpLT5kZXZpY2UsIGNoaXAtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7Ci0JaWYgKGVycikgeworCWlmIChlcnIgPj0gMCkKKwkJZXJyID0gc2V0X21peGVyX2RlZmF1bHRzKGNoaXApOworCWlmIChlcnIgPCAwKSB7CiAJCURFX0lOSVQoKCJpbml0X2h3IGVycj0lZFxuIiwgZXJyKSk7CiAJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CiAJCXJldHVybiBlcnI7CkBAIC0xOTczLDkgKzIwMzAsNiBAQAogCQlzbmRfZWNob19mcmVlKGNoaXApOwogCQlyZXR1cm4gZXJyOwogCX0KLQlhdG9taWNfc2V0KCZjaGlwLT5vcGVuY291bnQsIDApOwotCW11dGV4X2luaXQoJmNoaXAtPm1vZGVfbXV0ZXgpOwotCWNoaXAtPmNhbl9zZXRfcmF0ZSA9IDE7CiAJKnJjaGlwID0gY2hpcDsKIAkvKiBJbml0IGRvbmUgISAqLwogCXJldHVybiAwOwpAQCAtMjAwOCw2ICsyMDYyLDcgQEAKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIAorCWNoaXAgPSBOVUxMOwkvKiBUZWxscyBzbmRfZWNob19jcmVhdGUgdG8gYWxsb2NhdGUgY2hpcCAqLwogCWlmICgoZXJyID0gc25kX2VjaG9fY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTIxNDcsNiArMjIwMiwxMTIgQEAKIAogCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKKworc3RhdGljIGludCBzbmRfZWNob19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisKKwlERV9JTklUKCgic3VzcGVuZCBzdGFydFxuIikpOworCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+YW5hbG9nX3BjbSk7CisJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5kaWdpdGFsX3BjbSk7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQorCS8qIFRoaXMgY2FsbCBjYW4gc2xlZXAgKi8KKwlpZiAoY2hpcC0+bWlkaV9vdXQpCisJCXNuZF9lY2hvX21pZGlfb3V0cHV0X3RyaWdnZXIoY2hpcC0+bWlkaV9vdXQsIDApOworI2VuZGlmCisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJaWYgKHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19HT19DT01BVE9TRSkgPCAwKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCisJY2hpcC0+ZHNwX2NvZGUgPSBOVUxMOworCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJY2hpcC0+aXJxID0gLTE7CisJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKworCURFX0lOSVQoKCJzdXNwZW5kIGRvbmVcbiIpKTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc25kX2VjaG9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCXN0cnVjdCBjb21tX3BhZ2UgKmNvbW1wYWdlLCAqY29tbXBhZ2VfYmFrOworCXUzMiBwaXBlX2FsbG9jX21hc2s7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJyZXN1bWUgc3RhcnRcbiIpKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWNvbW1wYWdlX2JhayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBlY2hvYXVkaW8pLCBHRlBfS0VSTkVMKTsKKwljb21tcGFnZSA9IGNoaXAtPmNvbW1fcGFnZTsKKwltZW1jcHkoY29tbXBhZ2VfYmFrLCBjb21tcGFnZSwgc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKKworCWVyciA9IGluaXRfaHcoY2hpcCwgY2hpcC0+cGNpLT5kZXZpY2UsIGNoaXAtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7CisJaWYgKGVyciA8IDApIHsKKwkJa2ZyZWUoY29tbXBhZ2VfYmFrKTsKKwkJREVfSU5JVCgoInJlc3VtZSBpbml0X2h3IGVycj0lZFxuIiwgZXJyKSk7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCURFX0lOSVQoKCJyZXN1bWUgaW5pdCBPS1xuIikpOworCisJLyogVGVtcG9yYXJpbHkgc2V0IGNoaXAtPnBpcGVfYWxsb2NfbWFzaz0wIG90aGVyd2lzZQorCSAqIHJlc3RvcmVfZHNwX3NldHRpbmdzKCkgZmFpbHMuCisJICovCisJcGlwZV9hbGxvY19tYXNrID0gY2hpcC0+cGlwZV9hbGxvY19tYXNrOworCWNoaXAtPnBpcGVfYWxsb2NfbWFzayA9IDA7CisJZXJyID0gcmVzdG9yZV9kc3BfcmV0dGluZ3MoY2hpcCk7CisJY2hpcC0+cGlwZV9hbGxvY19tYXNrID0gcGlwZV9hbGxvY19tYXNrOworCWlmIChlcnIgPCAwKSB7CisJCWtmcmVlKGNvbW1wYWdlX2Jhayk7CisJCXJldHVybiBlcnI7CisJfQorCURFX0lOSVQoKCJyZXN1bWUgcmVzdG9yZSBPS1xuIikpOworCisJbWVtY3B5KCZjb21tcGFnZS0+YXVkaW9fZm9ybWF0LCAmY29tbXBhZ2VfYmFrLT5hdWRpb19mb3JtYXQsCisJCXNpemVvZihjb21tcGFnZS0+YXVkaW9fZm9ybWF0KSk7CisJbWVtY3B5KCZjb21tcGFnZS0+c2dsaXN0X2FkZHIsICZjb21tcGFnZV9iYWstPnNnbGlzdF9hZGRyLAorCQlzaXplb2YoY29tbXBhZ2UtPnNnbGlzdF9hZGRyKSk7CisJbWVtY3B5KCZjb21tcGFnZS0+bWlkaV9vdXRwdXQsICZjb21tcGFnZV9iYWstPm1pZGlfb3V0cHV0LAorCQlzaXplb2YoY29tbXBhZ2UtPm1pZGlfb3V0cHV0KSk7CisJa2ZyZWUoY29tbXBhZ2VfYmFrKTsKKworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VjaG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCUVDSE9DQVJEX05BTUUsIGNoaXApKSB7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNoaXAtPmlycSA9IHBjaS0+aXJxOworCURFX0lOSVQoKCJyZXN1bWUgaXJxPSVkXG4iLCBjaGlwLT5pcnEpKTsKKworI2lmZGVmIEVDSE9DQVJEX0hBU19NSURJCisJaWYgKGNoaXAtPm1pZGlfaW5wdXRfZW5hYmxlZCkKKwkJZW5hYmxlX21pZGlfaW5wdXQoY2hpcCwgVFJVRSk7CisJaWYgKGNoaXAtPm1pZGlfb3V0KQorCQlzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyKGNoaXAtPm1pZGlfb3V0LCAxKTsKKyNlbmRpZgorCisJREVfSU5JVCgoInJlc3VtZSBkb25lXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworCisKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfZWNob19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKIHsKIAlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwOwpAQCAtMjE2OSw2ICsyMzMwLDEwIEBACiAJLmlkX3RhYmxlID0gc25kX2VjaG9faWRzLAogCS5wcm9iZSA9IHNuZF9lY2hvX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZWNob19yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc25kX2VjaG9fc3VzcGVuZCwKKwkucmVzdW1lID0gc25kX2VjaG9fcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAppbmRleCBmOTQ5MGFlLi4xZGY5NzRkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKQEAgLTQ0MiwxMyArNDQyLDE2IEBACiAJdTE2IGRldmljZV9pZCwgc3ViZGV2aWNlX2lkOwogCXUxNiAqZHNwX2NvZGU7CQkJLyogQ3VycmVudCBEU1AgY29kZSBsb2FkZWQsCiAJCQkJCSAqIE5VTEwgaWYgbm90aGluZyBsb2FkZWQgKi8KLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmRzcF9jb2RlX3RvX2xvYWQ7LyogRFNQIGNvZGUgdG8gbG9hZCAqLwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpY19jb2RlOwkvKiBDdXJyZW50IEFTSUMgY29kZSAqLworCXNob3J0IGRzcF9jb2RlX3RvX2xvYWQ7CQkvKiBEU1AgY29kZSB0byBsb2FkICovCisJc2hvcnQgYXNpY19jb2RlOwkJLyogQ3VycmVudCBBU0lDIGNvZGUgKi8KIAl1MzIgY29tbV9wYWdlX3BoeXM7CQkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUKIAkJCQkJCSAqIG1lbW9yeSBzZWVuIGJ5IERTUCAqLwogCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpkc3BfcmVnaXN0ZXJzOwkvKiBEU1AncyByZWdpc3RlciBiYXNlICovCiAJdTMyIGFjdGl2ZV9tYXNrOwkJCS8qIENocy4gYWN0aXZlIG1hc2sgb3IKIAkJCQkJCSAqIHB1bmtzIG91dCAqLworI2lmZGVmIENPTkZJR19QTQorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfY2FjaGVbOF07CS8qIENhY2hlZCBmaXJtd2FyZXMgKi8KKyNlbmRpZgogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX01JREkKIAl1MTYgbXRjX3N0YXRlOwkJCQkvKiBTdGF0ZSBmb3IgTUlESSBpbnB1dCBwYXJzaW5nIHN0YXRlIG1hY2hpbmUgKi8KQEAgLTQ2NCwxMSArNDY3LDEzIEBACiBzdGF0aWMgaW50IHdhaXRfaGFuZHNoYWtlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogc3RhdGljIGludCBzZW5kX3ZlY3RvcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY29tbWFuZCk7CiBzdGF0aWMgaW50IGdldF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19lbnRyeSwKLQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnJtLCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKKwkJCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNvbnN0IHNob3J0IGZ3X2luZGV4KTsKIHN0YXRpYyB2b2lkIGZyZWVfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSk7CiAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQogc3RhdGljIGludCBlbmFibGVfbWlkaV9pbnB1dChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIGVuYWJsZSk7CitzdGF0aWMgdm9pZCBzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyKAorCQkJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgdXApOwogc3RhdGljIGludCBtaWRpX3NlcnZpY2VfaXJxKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogc3RhdGljIGludCBfX2RldmluaXQgc25kX2VjaG9fbWlkaV9jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLAogCQkJCQkgIHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKaW5kZXggZTMyYTc0OC4uNjU4ZGI0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCkBAIC0yMjcsMTIgKzIyNywxMSBAQAogCS8qIEdpdmUgdGhlIERTUCBhIGZldyBtaWxsaXNlY29uZHMgdG8gc2V0dGxlIGRvd24gKi8KIAltZGVsYXkoMik7CiAKLQllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfM0dfQVNJQywKLQkJCQkmY2FyZF9md1tGV18zR19BU0lDXSk7CisJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEXzNHX0FTSUMsIEZXXzNHX0FTSUMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcC0+YXNpY19jb2RlID0gJmNhcmRfZndbRldfM0dfQVNJQ107CisJY2hpcC0+YXNpY19jb2RlID0gRldfM0dfQVNJQzsKIAogCS8qIE5vdyBnaXZlIHRoZSBuZXcgQVNJQyBzb21lIHRpbWUgdG8gc2V0IHVwICovCiAJbXNsZWVwKDEwMDApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYwppbmRleCA0ZGY1MWVmLi42NDQxN2E3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYwpAQCAtMTc1LDE1ICsxNzUsMTUgQEAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfQVNJQwogCiAvKiBMb2FkIEFTSUMgY29kZSAtIGRvbmUgYWZ0ZXIgdGhlIERTUCBpcyBsb2FkZWQgKi8KLXN0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKQorc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLCBzaG9ydCBhc2ljKQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IGVycjsKIAl1MzIgaSwgc2l6ZTsKIAl1OCAqY29kZTsKIAotCWlmICgoZXJyID0gZ2V0X2Zpcm13YXJlKCZmdywgYXNpYywgY2hpcCkpIDwgMCkgeworCWVyciA9IGdldF9maXJtd2FyZSgmZncsIGNoaXAsIGFzaWMpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJGaXJtd2FyZSBub3QgZm91bmQgIVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMjQ1LDcgKzI0NSw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICgoaSA9IGdldF9maXJtd2FyZSgmZncsICZjYXJkX2Z3W0ZXXzM2MV9MT0FERVJdLCBjaGlwKSkgPCAwKSB7CisJaSA9IGdldF9maXJtd2FyZSgmZncsIGNoaXAsIEZXXzM2MV9MT0FERVIpOworCWlmIChpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiRmlybXdhcmUgbm90IGZvdW5kICFcbiIpOwogCQlyZXR1cm4gaTsKIAl9CkBAIC00ODUsNyArNDg2LDggQEAKIAkJY2hpcC0+ZHNwX2NvZGUgPSBOVUxMOwogCX0KIAotCWlmICgoZXJyID0gZ2V0X2Zpcm13YXJlKCZmdywgY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCwgY2hpcCkpIDwgMCkKKwllcnIgPSBnZXRfZmlybXdhcmUoJmZ3LCBjaGlwLCBjaGlwLT5kc3BfY29kZV90b19sb2FkKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAllcnIgPSBsb2FkX2RzcChjaGlwLCAodTE2ICopZnctPmRhdGEpOwogCWZyZWVfZmlybXdhcmUoZncpOwpAQCAtNDk1LDkgKzQ5Nyw2IEBACiAJaWYgKChib3hfdHlwZSA9IGxvYWRfYXNpYyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gYm94X3R5cGU7CS8qIGVycm9yICovCiAKLQlpZiAoKGVyciA9IHJlc3RvcmVfZHNwX3JldHRpbmdzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlyZXR1cm4gYm94X3R5cGU7CiB9CiAKQEAgLTY1NywyNSArNjU2LDg5IEBACiAKIHN0YXRpYyBpbnQgcmVzdG9yZV9kc3BfcmV0dGluZ3Moc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKLQlpbnQgZXJyOworCWludCBpLCBvLCBlcnI7CiAJREVfSU5JVCgoInJlc3RvcmVfZHNwX3NldHRpbmdzXG4iKSk7CiAKIAlpZiAoKGVyciA9IGNoZWNrX2FzaWNfc3RhdHVzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBAIEdpbmEyMC9EYXJsYTIwIG9ubHkuIFNob3VsZCBiZSBoYXJtbGVzcyBmb3Igb3RoZXIgY2FyZHMuICovCisJLyogR2luYTIwL0RhcmxhMjAgb25seS4gU2hvdWxkIGJlIGhhcm1sZXNzIGZvciBvdGhlciBjYXJkcy4gKi8KIAljaGlwLT5jb21tX3BhZ2UtPmdkX2Nsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CiAJY2hpcC0+Y29tbV9wYWdlLT5nZF9zcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfVU5ERUY7CiAJY2hpcC0+Y29tbV9wYWdlLT5oYW5kc2hha2UgPSAweGZmZmZmZmZmOwogCi0JaWYgKChlcnIgPSBzZXRfc2FtcGxlX3JhdGUoY2hpcCwgY2hpcC0+c2FtcGxlX3JhdGUpKSA8IDApCisJLyogUmVzdG9yZSBvdXRwdXQgYnVzc2VzICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBpKyspIHsKKwkJZXJyID0gc2V0X291dHB1dF9nYWluKGNoaXAsIGksIGNoaXAtPm91dHB1dF9nYWluW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpcGVzX291dChjaGlwKTsgaSsrKQorCQlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykgeworCQkJZXJyID0gc2V0X3ZtaXhlcl9nYWluKGNoaXAsIG8sIGksCisJCQkJCQljaGlwLT52bWl4ZXJfZ2FpbltvXVtpXSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJaWYgKHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorCWZvciAobyA9IDA7IG8gPCBudW1fYnVzc2VzX291dChjaGlwKTsgbysrKQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1c3Nlc19pbihjaGlwKTsgaSsrKSB7CisJCQllcnIgPSBzZXRfbW9uaXRvcl9nYWluKGNoaXAsIG8sIGksCisJCQkJCQljaGlwLT5tb25pdG9yX2dhaW5bb11baV0pOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19NT05JVE9SICovCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgorCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzc2VzX2luKGNoaXApOyBpKyspIHsKKwkJZXJyID0gc2V0X2lucHV0X2dhaW4oY2hpcCwgaSwgY2hpcC0+aW5wdXRfZ2FpbltpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX0lOUFVUX0dBSU4gKi8KKworCWVyciA9IHVwZGF0ZV9vdXRwdXRfbGluZV9sZXZlbChjaGlwKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmIChjaGlwLT5tZXRlcnNfZW5hYmxlZCkKLQkJaWYgKHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19NRVRFUlNfT04pIDwgMCkKLQkJCXJldHVybiAtRUlPOworCWVyciA9IHVwZGF0ZV9pbnB1dF9saW5lX2xldmVsKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc2V0X3NhbXBsZV9yYXRlKGNoaXAsIGNoaXAtPnNhbXBsZV9yYXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChjaGlwLT5tZXRlcnNfZW5hYmxlZCkgeworCQllcnIgPSBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfTUVURVJTX09OKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworI2lmZGVmIEVDSE9DQVJEX0hBU19ESUdJVEFMX01PREVfU1dJVENICisJaWYgKHNldF9kaWdpdGFsX21vZGUoY2hpcCwgY2hpcC0+ZGlnaXRhbF9tb2RlKSA8IDApCisJCXJldHVybiAtRUlPOworI2VuZGlmCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTworCWlmIChzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIGNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgorCisjaWZkZWYgRUNIT0NBUkRfSEFTX1BIQU5UT01fUE9XRVIKKwlpZiAoc2V0X3BoYW50b21fcG93ZXIoY2hpcCwgY2hpcC0+cGhhbnRvbV9wb3dlcikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX0VYVEVSTkFMX0NMT0NLCisJLyogc2V0X2lucHV0X2Nsb2NrKCkgYWxzbyByZXN0b3JlcyBhdXRvbXV0ZSBzZXR0aW5nICovCiAJaWYgKHNldF9pbnB1dF9jbG9jayhjaGlwLCBjaGlwLT5pbnB1dF9jbG9jaykgPCAwKQogCQlyZXR1cm4gLUVJTzsKICNlbmRpZgpAQCAtNjg1LDIzICs3NDgsMTQgQEAKIAkJcmV0dXJuIC1FSU87CiAjZW5kaWYKIAotCWlmICh1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCkgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICh1cGRhdGVfaW5wdXRfbGluZV9sZXZlbChjaGlwKSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotCWlmICh1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0jZW5kaWYKLQogCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSA8IDApCiAJCXJldHVybiAtRUlPOwogCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwlpZiAoc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9GTEFHUykgPCAwKQorCQlyZXR1cm4gLUVJTzsKIAogCURFX0lOSVQoKCJyZXN0b3JlX2RzcF9yZXR0aW5ncyBkb25lXG4iKSk7Ci0JcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpOworCXJldHVybiAwOwogfQogCiAKQEAgLTkxOCw5ICs5NzIsNiBAQAogCWNoaXAtPmNhcmRfbmFtZSA9IEVDSE9DQVJEX05BTUU7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsJLyogU2V0IFRSVUUgdW50aWwgRFNQIGxvYWRlZCAqLwogCWNoaXAtPmRzcF9jb2RlID0gTlVMTDsJLyogQ3VycmVudCBEU1AgY29kZSBub3QgbG9hZGVkICovCi0JY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX05PTkU7Ci0JY2hpcC0+aW5wdXRfY2xvY2sgPSBFQ0hPX0NMT0NLX0lOVEVSTkFMOwotCWNoaXAtPm91dHB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfV09SRDsKIAljaGlwLT5hc2ljX2xvYWRlZCA9IEZBTFNFOwogCW1lbXNldChjaGlwLT5jb21tX3BhZ2UsIDAsIHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CiAKQEAgLTkzMSw3ICs5ODIsNiBAQAogCWNoaXAtPmNvbW1fcGFnZS0+bWlkaV9vdXRfZnJlZV9jb3VudCA9CiAJCWNwdV90b19sZTMyKERTUF9NSURJX09VVF9GSUZPX1NJWkUpOwogCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBjcHVfdG9fbGUzMig0NDEwMCk7Ci0JY2hpcC0+c2FtcGxlX3JhdGUgPSA0NDEwMDsKIAogCS8qIFNldCBsaW5lIGxldmVscyBzbyB3ZSBkb24ndCBibGFzdCBhbnkgaW5wdXRzIG9uIHN0YXJ0dXAgKi8KIAltZW1zZXQoY2hpcC0+Y29tbV9wYWdlLT5tb25pdG9ycywgRUNIT0dBSU5fTVVURUQsIE1PTklUT1JfQVJSQVlfU0laRSk7CkBAIC05NDIsNTAgKzk5MiwyMSBAQAogCiAKIAotLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgc2V2ZXJhbCB2b2x1bWUgY29udHJvbHMgZm9yIGJ1c3NlcyBhbmQgcGlwZXMuCi1UaGlzIE1VU1QgYmUgY2FsbGVkIGFmdGVyIHRoZSBEU1AgaXMgdXAgYW5kIHJ1bm5pbmcgISAqLworLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgY2hpcCBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcywgaWUuIGFsbAorICogbXV0ZWQgYW5kIGludGVybmFsIGNsb2NrIHNvdXJjZS4gVGhlbiBpdCBjb3BpZXMgdGhlIHNldHRpbmdzIHRvIHRoZSBEU1AuCisgKiBUaGlzIE1VU1QgYmUgY2FsbGVkIGFmdGVyIHRoZSBEU1AgaXMgdXAgYW5kIHJ1bm5pbmcgIQorICovCiBzdGF0aWMgaW50IGluaXRfbGluZV9sZXZlbHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKLQlpbnQgc3QsIGksIG87Ci0KIAlERV9JTklUKCgiaW5pdF9saW5lX2xldmVsc1xuIikpOwotCi0JLyogTXV0ZSBvdXRwdXQgYnVzc2VzICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBpKyspCi0JCWlmICgoc3QgPSBzZXRfb3V0cHV0X2dhaW4oY2hpcCwgaSwgRUNIT0dBSU5fTVVURUQpKSkKLQkJCXJldHVybiBzdDsKLQlpZiAoKHN0ID0gdXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApKSkKLQkJcmV0dXJuIHN0OwotCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotCS8qIE11dGUgdGhlIFZtaXhlciAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fcGlwZXNfb3V0KGNoaXApOyBpKyspCi0JCWZvciAobyA9IDA7IG8gPCBudW1fYnVzc2VzX291dChjaGlwKTsgbysrKQotCQkJaWYgKChzdCA9IHNldF92bWl4ZXJfZ2FpbihjaGlwLCBvLCBpLCBFQ0hPR0FJTl9NVVRFRCkpKQotCQkJCXJldHVybiBzdDsKLQlpZiAoKHN0ID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKSkpCi0JCXJldHVybiBzdDsKLSNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCi0KLSNpZmRlZiBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgotCS8qIE11dGUgdGhlIG1vbml0b3IgbWl4ZXIgKi8KLQlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykKLQkJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKykKLQkJCWlmICgoc3QgPSBzZXRfbW9uaXRvcl9nYWluKGNoaXAsIG8sIGksIEVDSE9HQUlOX01VVEVEKSkpCi0JCQkJcmV0dXJuIHN0OwotCWlmICgoc3QgPSB1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCkpKQotCQlyZXR1cm4gc3Q7Ci0jZW5kaWYgLyogRUNIT0NBUkRfSEFTX01PTklUT1IgKi8KLQotI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOCi0JZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKykKLQkJaWYgKChzdCA9IHNldF9pbnB1dF9nYWluKGNoaXAsIGksIEVDSE9HQUlOX01VVEVEKSkpCi0JCQlyZXR1cm4gc3Q7Ci0JaWYgKChzdCA9IHVwZGF0ZV9pbnB1dF9saW5lX2xldmVsKGNoaXApKSkKLQkJcmV0dXJuIHN0OwotI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOICovCi0KLQlyZXR1cm4gMDsKKwltZW1zZXQoY2hpcC0+b3V0cHV0X2dhaW4sIEVDSE9HQUlOX01VVEVELCBzaXplb2YoY2hpcC0+b3V0cHV0X2dhaW4pKTsKKwltZW1zZXQoY2hpcC0+aW5wdXRfZ2FpbiwgRUNIT0dBSU5fTVVURUQsIHNpemVvZihjaGlwLT5pbnB1dF9nYWluKSk7CisJbWVtc2V0KGNoaXAtPm1vbml0b3JfZ2FpbiwgRUNIT0dBSU5fTVVURUQsIHNpemVvZihjaGlwLT5tb25pdG9yX2dhaW4pKTsKKwltZW1zZXQoY2hpcC0+dm1peGVyX2dhaW4sIEVDSE9HQUlOX01VVEVELCBzaXplb2YoY2hpcC0+dm1peGVyX2dhaW4pKTsKKwljaGlwLT5pbnB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfSU5URVJOQUw7CisJY2hpcC0+b3V0cHV0X2Nsb2NrID0gRUNIT19DTE9DS19XT1JEOworCWNoaXAtPnNhbXBsZV9yYXRlID0gNDQxMDA7CisJcmV0dXJuIHJlc3RvcmVfZHNwX3JldHRpbmdzKGNoaXApOwogfQogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jCmluZGV4IGMwZTY0YjguLjIzNjRmOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjAuYwpAQCAtNjcsNyArNjcsNyBAQAogCXswLCAiZ2luYTIwX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDIwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIEdpbmEyMCByZXYuMCAqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCmluZGV4IDNmMWU3NDcuLmQxNjE1YTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCkBAIC00OSw3ICs0OSw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19HSU5BMjBfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfR0lOQTIwX0RTUDsKIAljaGlwLT5zcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfVU5ERUY7CiAJY2hpcC0+Y2xvY2tfc3RhdGUgPSBHRF9DTE9DS19VTkRFRjsKIAkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKQEAgLTYyLDE3ICs2MiwyMCBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNC5jCmluZGV4IGMzNmE3OGQuLjYxNmI1NTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjQuYwpAQCAtODUsNyArODUsNyBAQAogCXswLCAiZ2luYTI0XzM2MV9hc2ljLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNTAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgR2luYTI0IHJldi4wICovCiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA1MSwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBHaW5hMjQgcmV2LjEgKi8KIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDUwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIEdpbmEyNCByZXYuMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjRfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYwppbmRleCAyZmVmMzdhLi45OGY3Y2ZhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYwpAQCAtMzMsOCArMzMsNyBAQAogc3RhdGljIGludCBzZXRfaW5wdXRfY2xvY2soc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGNsb2NrKTsKIHN0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOwogc3RhdGljIGludCBzZXRfZGlnaXRhbF9tb2RlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHU4IG1vZGUpOwotc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpOworc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLCBzaG9ydCBhc2ljKTsKIHN0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CiAKIApAQCAtNTgsMTkgKzU3LDE2IEBACiAJCUVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMIHwgRUNIT19DTE9DS19CSVRfU1BESUYgfAogCQlFQ0hPX0NMT0NLX0JJVF9FU1lOQyB8IEVDSE9fQ0xPQ0tfQklUX0VTWU5DOTYgfAogCQlFQ0hPX0NMT0NLX0JJVF9BREFUOwotCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOwotCWNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGUgPSBUUlVFOwotCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CiAKIAkvKiBHaW5hMjQgY29tZXMgaW4gYm90aCAnMzAxIGFuZCAnMzYxIGZsYXZvcnMgKi8KIAlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkgewotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfR0lOQTI0XzM2MV9EU1BdOworCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfR0lOQTI0XzM2MV9EU1A7CiAJCWNoaXAtPmRpZ2l0YWxfbW9kZXMgPQogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9SQ0EgfAogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMIHwKIAkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKIAl9IGVsc2UgewotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfR0lOQTI0XzMwMV9EU1BdOworCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfR0lOQTI0XzMwMV9EU1A7CiAJCWNoaXAtPmRpZ2l0YWxfbW9kZXMgPQogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9SQ0EgfAogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMIHwKQEAgLTgyLDE5ICs3OCwyMiBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc2V0X2RpZ2l0YWxfbW9kZShjaGlwLCBESUdJVEFMX01PREVfU1BESUZfUkNBKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+ZGlnaXRhbF9pbl9hdXRvbXV0ZSA9IFRSVUU7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CisKKworCiBzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKIAl1MzIgY2xvY2tzX2Zyb21fZHNwLCBjbG9ja19iaXRzOwpAQCAtMTI1LDcgKzEyNCw3IEBACiB7CiAJdTMyIGNvbnRyb2xfcmVnOwogCWludCBlcnI7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlzaG9ydCBhc2ljOwogCiAJaWYgKGNoaXAtPmFzaWNfbG9hZGVkKQogCQlyZXR1cm4gMTsKQEAgLTEzNSwxNCArMTM0LDE1IEBACiAKIAkvKiBQaWNrIHRoZSBjb3JyZWN0IEFTSUMgZm9yICczMDEgb3IgJzM2MSBHaW5hMjQgKi8KIAlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkKLQkJZncgPSAmY2FyZF9md1tGV19HSU5BMjRfMzYxX0FTSUNdOworCQlhc2ljID0gRldfR0lOQTI0XzM2MV9BU0lDOwogCWVsc2UKLQkJZncgPSAmY2FyZF9md1tGV19HSU5BMjRfMzAxX0FTSUNdOworCQlhc2ljID0gRldfR0lOQTI0XzMwMV9BU0lDOwogCi0JaWYgKChlcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfR0lOQTI0X0FTSUMsIGZ3KSkgPCAwKQorCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9HSU5BMjRfQVNJQywgYXNpYyk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljaGlwLT5hc2ljX2NvZGUgPSBmdzsKKwljaGlwLT5hc2ljX2NvZGUgPSBhc2ljOwogCiAJLyogTm93IGdpdmUgdGhlIG5ldyBBU0lDIGEgbGl0dGxlIHRpbWUgdG8gc2V0IHVwICovCiAJbWRlbGF5KDEwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jCmluZGV4IDBhNThhN2MuLjc3NjE3NWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ28uYwpAQCAtNjgsNyArNjgsNyBAQAogCXswLCAiaW5kaWdvX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDkwLCAwLCAwLCAwfSwJLyogSW5kaWdvICovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKaW5kZXggMGIyY2Q5Yy4uNWU4NWYxNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19JTkRJR09fRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNjAsMTUgKzYwLDE5IEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCmluZGV4IDlhYjYyNWUuLjJlNGFiM2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZXhwcmVzc19kc3AuYwpAQCAtNjEsNiArNjEsNyBAQAogCiAJY29udHJvbF9yZWcgfD0gY2xvY2s7CiAJaWYgKGNvbnRyb2xfcmVnICE9IG9sZF9jb250cm9sX3JlZykgeworCQlERV9BQ1QoKCJzZXRfc2FtcGxlX3JhdGU6ICVkIGNsb2NrICVkXG4iLCByYXRlLCBjbG9jaykpOwogCQljaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIgPSBjcHVfdG9fbGUzMihjb250cm9sX3JlZyk7CiAJCWNoaXAtPnNhbXBsZV9yYXRlID0gcmF0ZTsKIAkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jCmluZGV4IDJkYjI0ZDIuLjg4MTZiMGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGouYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAl7MCwgImluZGlnb19kal9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBCMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBESiovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCmluZGV4IDA4MzkyOTEuLjY4ZjNjOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYwpAQCAtNTAsNyArNTAsNyBAQAogCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKIAljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKLQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfSU5ESUdPX0RKX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0lORElHT19ESl9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC02MCwxNSArNjAsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJcmV0dXJuIEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKaW5kZXggMmU0NDMxNi4uYjFlMzY1MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeC5jCkBAIC02OCw3ICs2OCw3IEBACiAJezAsICJpbmRpZ29fZGp4X2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEUwLCAwLCAwLCAwfSwJLyogSW5kaWdvIERKeCovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKaW5kZXggZjU5MWZjMi4uYmI5NjMyYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19ESlhfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfSU5ESUdPX0RKWF9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC01OSwxMCArNTksMTMgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KKworCisKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvLmMKaW5kZXggYTYwYzBhMC4uMTAzNTEyNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYwpAQCAtNjksNyArNjksNyBAQAogCXswLCAiaW5kaWdvX2lvX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEEwLCAwLCAwLCAwfSwJLyogSW5kaWdvIElPKi8KIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKaW5kZXggMDYwNGM4YS4uYmViOWE1YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCkBAIC01MCw3ICs1MCw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9fRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfSU5ESUdPX0lPX0RTUDsKIAkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKIAkgICB3b3JrcyBPSyAqLwogCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKQEAgLTYwLDE1ICs2MCwxOSBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CisKKworCiBzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKIAlyZXR1cm4gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYwppbmRleCBlYjM4MTlmLi42MGI3Y2IyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAl7MCwgImluZGlnb19pb3hfZHNwLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwRDAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gSU94ICovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKaW5kZXggZjM1NzUyMS4uMzk0YzZlNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCkBAIC00OCw3ICs0OCw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9YX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0lORElHT19JT1hfRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNTksMTAgKzU5LDEzIEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CisKKworCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYwppbmRleCA1MDYxOTQ2Li44YzNmNWM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYwpAQCAtNzYsNyArNzYsNyBAQAogCXswLCAibGF5bGEyMF9hc2ljLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwMzAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTGF5bGEyMCByZXYuMCAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwMzEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTGF5bGEyMCByZXYuMSAqLwogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwppbmRleCA4Mzc1MGU5Li41M2NlOTQ2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCkBAIC0zMSw4ICszMSw3IEBACiAKIHN0YXRpYyBpbnQgcmVhZF9kc3Aoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyICpkYXRhKTsKIHN0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOwotc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpOworc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLCBzaG9ydCBhc2ljKTsKIHN0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CiBzdGF0aWMgaW50IHVwZGF0ZV9mbGFncyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKIApAQCAtNTQsNyArNTMsNyBAQAogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwogCWNoaXAtPmhhc19taWRpID0gVFJVRTsKLQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfTEFZTEEyMF9EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19MQVlMQTIwX0RTUDsKIAljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9CiAJCUVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMIHwgRUNIT19DTE9DS19CSVRfU1BESUYgfAogCQlFQ0hPX0NMT0NLX0JJVF9XT1JEIHwgRUNIT19DTE9DS19CSVRfU1VQRVI7CkBAIC02NSwxNyArNjQsMjAgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihjaGlwLCBUUlVFKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CkBAIC0xNDQsNyArMTQ2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfTEFZTEFfQVNJQywKLQkJCQkmY2FyZF9md1tGV19MQVlMQTIwX0FTSUNdKTsKKwkJCQlGV19MQVlMQTIwX0FTSUMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjQuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCmluZGV4IGUwOWUzZWEuLmVkMWNjMGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJezAsICJsYXlsYTI0XzJTX2FzaWMuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA2MCwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBMYXlsYTI0IHJldi4wICovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYwppbmRleCBkNjFiNWNiLi44YzA0MTY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjRfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0X2RzcC5jCkBAIC0zMiw4ICszMiw3IEBACiBzdGF0aWMgaW50IHNldF9pbnB1dF9jbG9jayhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgY2xvY2spOwogc3RhdGljIGludCBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgcHJvZik7CiBzdGF0aWMgaW50IHNldF9kaWdpdGFsX21vZGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTggbW9kZSk7Ci1zdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYyk7CitzdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsIHNob3J0IGFzaWMpOwogc3RhdGljIGludCBjaGVja19hc2ljX3N0YXR1cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKIAogCkBAIC01NCw3ICs1Myw3IEBACiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CiAJY2hpcC0+aGFzX21pZGkgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19MQVlMQTI0X0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0xBWUxBMjRfRFNQOwogCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0KIAkJRUNIT19DTE9DS19CSVRfSU5URVJOQUwgfCBFQ0hPX0NMT0NLX0JJVF9TUERJRiB8CiAJCUVDSE9fQ0xPQ0tfQklUX1dPUkQgfCBFQ0hPX0NMT0NLX0JJVF9BREFUOwpAQCAtNjIsOSArNjEsNiBAQAogCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX1JDQSB8CiAJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTCB8CiAJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKLQljaGlwLT5kaWdpdGFsX21vZGUgPQkJRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKLQljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKLQljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKIAogCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtNzMsMTcgKzY5LDIyIEBACiAJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CkBAIC0xMjMsMTggKzEyNCwxOCBAQAogCiAJLyogTG9hZCB0aGUgQVNJQyBmb3IgdGhlIFBDSSBjYXJkICovCiAJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX0xBWUxBMjRfUENJX0NBUkRfQVNJQywKLQkJCQkmY2FyZF9md1tGV19MQVlMQTI0XzFfQVNJQ10pOworCQkJCUZXX0xBWUxBMjRfMV9BU0lDKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNoaXAtPmFzaWNfY29kZSA9ICZjYXJkX2Z3W0ZXX0xBWUxBMjRfMlNfQVNJQ107CisJY2hpcC0+YXNpY19jb2RlID0gRldfTEFZTEEyNF8yU19BU0lDOwogCiAJLyogTm93IGdpdmUgdGhlIG5ldyBBU0lDIGEgbGl0dGxlIHRpbWUgdG8gc2V0IHVwICovCiAJbWRlbGF5KDEwKTsKIAogCS8qIERvIHRoZSBleHRlcm5hbCBvbmUgKi8KIAllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfTEFZTEEyNF9FWFRFUk5BTF9BU0lDLAotCQkJCSZjYXJkX2Z3W0ZXX0xBWUxBMjRfMlNfQVNJQ10pOworCQkJCUZXX0xBWUxBMjRfMlNfQVNJQyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBGQUxTRTsKIApAQCAtMjk5LDcgKzMwMCw3IEBACiAvKiBEZXBlbmRpbmcgb24gd2hhdCBkaWdpdGFsIG1vZGUgeW91IHdhbnQsIExheWxhMjQgbmVlZHMgZGlmZmVyZW50IEFTSUNzCiBsb2FkZWQuICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgQVNJQyBuZWVkZWQgZm9yIHRoZSBuZXcgbW9kZSBhbmQgc2VlcwogaWYgaXQgbWF0Y2hlcyB0aGUgb25lIGFscmVhZHkgbG9hZGVkLiAqLwotc3RhdGljIGludCBzd2l0Y2hfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpCitzdGF0aWMgaW50IHN3aXRjaF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHNob3J0IGFzaWMpCiB7CiAJczggKm1vbml0b3JzOwogCkBAIC0zMzUsNyArMzM2LDcgQEAKIHsKIAl1MzIgY29udHJvbF9yZWc7CiAJaW50IGVyciwgaW5jb21wYXRpYmxlX2Nsb2NrOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYzsKKwlzaG9ydCBhc2ljOwogCiAJLyogU2V0IGNsb2NrIHRvICJpbnRlcm5hbCIgaWYgaXQncyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgbW9kZSAqLwogCWluY29tcGF0aWJsZV9jbG9jayA9IEZBTFNFOwpAQCAtMzQ0LDEyICszNDUsMTIgQEAKIAljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9SQ0E6CiAJCWlmIChjaGlwLT5pbnB1dF9jbG9jayA9PSBFQ0hPX0NMT0NLX0FEQVQpCiAJCQlpbmNvbXBhdGlibGVfY2xvY2sgPSBUUlVFOwotCQlhc2ljID0gJmNhcmRfZndbRldfTEFZTEEyNF8yU19BU0lDXTsKKwkJYXNpYyA9IEZXX0xBWUxBMjRfMlNfQVNJQzsKIAkJYnJlYWs7CiAJY2FzZSBESUdJVEFMX01PREVfQURBVDoKIAkJaWYgKGNoaXAtPmlucHV0X2Nsb2NrID09IEVDSE9fQ0xPQ0tfU1BESUYpCiAJCQlpbmNvbXBhdGlibGVfY2xvY2sgPSBUUlVFOwotCQlhc2ljID0gJmNhcmRfZndbRldfTEFZTEEyNF8yQV9BU0lDXTsKKwkJYXNpYyA9IEZXX0xBWUxBMjRfMkFfQVNJQzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJREVfQUNUKCgiRGlnaXRhbCBtb2RlIG5vdCBzdXBwb3J0ZWQ6ICVkXG4iLCBtb2RlKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYwppbmRleCBmMDVjOGMwLi5jYzJiYmZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAl7MCwgIm1pYV9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA4MCwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBNaWEgcmV2LjAgKi8KIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDgxLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIE1pYSByZXYuMSAqLwogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKaW5kZXggNTUxNDA1MS4uNmViZmE2ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX01JQV9EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19NSUFfRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNjYsMTUgKzY2LDE5IEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKaW5kZXggYjA1YmFkOS4uM2U3ZTAxOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAl7MCwgIm1vbmFfMl9hc2ljLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNzAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTW9uYSByZXYuMCAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNzEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTW9uYSByZXYuMSAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNzIsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTW9uYSByZXYuMiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9tb25hX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hX2RzcC5jCmluZGV4IGVhYTYxOWIuLjZlNmE3ZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYV9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21vbmFfZHNwLmMKQEAgLTMzLDggKzMzLDcgQEAKIHN0YXRpYyBpbnQgc2V0X2lucHV0X2Nsb2NrKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjbG9jayk7CiBzdGF0aWMgaW50IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBwcm9mKTsKIHN0YXRpYyBpbnQgc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKTsKLXN0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKTsKK3N0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwgc2hvcnQgYXNpYyk7CiBzdGF0aWMgaW50IGNoZWNrX2FzaWNfc3RhdHVzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogCiAKQEAgLTY0LDMyICs2MywzMCBAQAogCiAJLyogTW9uYSBjb21lcyBpbiBib3RoICczMDEgYW5kICczNjEgZmxhdm9ycyAqLwogCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfTU9OQV8zNjFfRFNQXTsKKwkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX01PTkFfMzYxX0RTUDsKIAllbHNlCi0JCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19NT05BXzMwMV9EU1BdOwotCi0JY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKLQljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKLQljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKwkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX01PTkFfMzAxX0RTUDsKIAogCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CkBAIC0xMjAsNyArMTE3LDcgQEAKIHsKIAl1MzIgY29udHJvbF9yZWc7CiAJaW50IGVycjsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWM7CisJc2hvcnQgYXNpYzsKIAogCWlmIChjaGlwLT5hc2ljX2xvYWRlZCkKIAkJcmV0dXJuIDA7CkBAIC0xMjgsOSArMTI1LDkgQEAKIAltZGVsYXkoMTApOwogCiAJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpCi0JCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM0OF07CisJCWFzaWMgPSBGV19NT05BXzM2MV8xX0FTSUM0ODsKIAllbHNlCi0JCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM0OF07CisJCWFzaWMgPSBGV19NT05BXzMwMV8xX0FTSUM0ODsKIAogCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9NT05BX1BDSV9DQVJEX0FTSUMsIGFzaWMpOwogCWlmIChlcnIgPCAwKQpAQCAtMTQxLDcgKzEzOCw3IEBACiAKIAkvKiBEbyB0aGUgZXh0ZXJuYWwgb25lICovCiAJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX01PTkFfRVhURVJOQUxfQVNJQywKLQkJCQkmY2FyZF9md1tGV19NT05BXzJfQVNJQ10pOworCQkJCUZXX01PTkFfMl9BU0lDKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTY1LDIyICsxNjIsMjIgQEAKIGlmIGl0IG1hdGNoZXMgdGhlIG9uZSBhbHJlYWR5IGxvYWRlZC4gKi8KIHN0YXRpYyBpbnQgc3dpdGNoX2FzaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBkb3VibGVfc3BlZWQpCiB7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOwogCWludCBlcnI7CisJc2hvcnQgYXNpYzsKIAogCS8qIENoZWNrIHRoZSBjbG9jayBkZXRlY3QgYml0cyB0byBzZWUgaWYgdGhpcyBpcwogCWEgc2luZ2xlLXNwZWVkIGNsb2NrIG9yIGEgZG91YmxlLXNwZWVkIGNsb2NrOyBsb2FkCiAJYSBuZXcgQVNJQyBpZiBuZWNlc3NhcnkuICovCiAJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpIHsKIAkJaWYgKGRvdWJsZV9zcGVlZCkKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM5Nl07CisJCQlhc2ljID0gRldfTU9OQV8zNjFfMV9BU0lDOTY7CiAJCWVsc2UKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM0OF07CisJCQlhc2ljID0gRldfTU9OQV8zNjFfMV9BU0lDNDg7CiAJfSBlbHNlIHsKIAkJaWYgKGRvdWJsZV9zcGVlZCkKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM5Nl07CisJCQlhc2ljID0gRldfTU9OQV8zMDFfMV9BU0lDOTY7CiAJCWVsc2UKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM0OF07CisJCQlhc2ljID0gRldfTU9OQV8zMDFfMV9BU0lDNDg7CiAJfQogCiAJaWYgKGFzaWMgIT0gY2hpcC0+YXNpY19jb2RlKSB7CkBAIC0yMDAsNyArMTk3LDcgQEAKIHN0YXRpYyBpbnQgc2V0X3NhbXBsZV9yYXRlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiByYXRlKQogewogCXUzMiBjb250cm9sX3JlZywgY2xvY2s7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOworCXNob3J0IGFzaWM7CiAJY2hhciBmb3JjZV93cml0ZTsKIAogCS8qIE9ubHkgc2V0IHRoZSBjbG9jayBmb3IgaW50ZXJuYWwgbW9kZS4gKi8KQEAgLTIxOCwxNCArMjE1LDE0IEBACiAJCWlmIChjaGlwLT5kaWdpdGFsX21vZGUgPT0gRElHSVRBTF9NT0RFX0FEQVQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDOTZdOworCQkJYXNpYyA9IEZXX01PTkFfMzYxXzFfQVNJQzk2OwogCQllbHNlCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDOTZdOworCQkJYXNpYyA9IEZXX01PTkFfMzAxXzFfQVNJQzk2OwogCX0gZWxzZSB7CiAJCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQotCQkJYXNpYyA9ICZjYXJkX2Z3W0ZXX01PTkFfMzYxXzFfQVNJQzQ4XTsKKwkJCWFzaWMgPSBGV19NT05BXzM2MV8xX0FTSUM0ODsKIAkJZWxzZQotCQkJYXNpYyA9ICZjYXJkX2Z3W0ZXX01PTkFfMzAxXzFfQVNJQzQ4XTsKKwkJCWFzaWMgPSBGV19NT05BXzMwMV8xX0FTSUM0ODsKIAl9CiAKIAlmb3JjZV93cml0ZSA9IDA7CkBAIC00MTAsOCArNDA3LDggQEAKIAljYXNlIERJR0lUQUxfTU9ERV9BREFUOgogCQkvKiBJZiB0aGUgY3VycmVudCBBU0lDIGlzIHRoZSA5NktIeiBBU0lDLCBzd2l0Y2ggdGhlIEFTSUMKIAkJICAgYW5kIHNldCB0byA0OCBLSHogKi8KLQkJaWYgKGNoaXAtPmFzaWNfY29kZSA9PSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM5Nl0gfHwKLQkJICAgIGNoaXAtPmFzaWNfY29kZSA9PSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM5Nl0pIHsKKwkJaWYgKGNoaXAtPmFzaWNfY29kZSA9PSBGV19NT05BXzM2MV8xX0FTSUM5NiB8fAorCQkgICAgY2hpcC0+YXNpY19jb2RlID09IEZXX01PTkFfMzAxXzFfQVNJQzk2KSB7CiAJCQlzZXRfc2FtcGxlX3JhdGUoY2hpcCwgNDgwMDApOwogCQl9CiAJCWNvbnRyb2xfcmVnIHw9IEdNTF9BREFUX01PREU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggMTY4YWY2Ny4uNDIwMzc4MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtNzYsNyArNzYsNyBAQAogLyoKICAqIENsYXNzIDA0MDE6IDExMDI6MDAwOCAocmV2IDAwKSBTdWJzeXN0ZW06IDExMDI6MTAwMSAtPiBBdWRpZ3kyIFZhbHVlICBNb2RlbDpTQjA0MDAKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lbXUxMGsxX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDAyKSwgMCB9LAkvKiBFTVUxMEsxICovCiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDA0KSwgMSB9LAkvKiBBdWRpZ3kgKi8KIAl7IFBDSV9WREVWSUNFKENSRUFUSVZFLCAweDAwMDgpLCAxIH0sCS8qIEF1ZGlneSAyIFZhbHVlIFNCMDQwMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKaW5kZXggMWQzNjlmZi4uZGY0N2Y3MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCkBAIC0xNjA1LDcgKzE2MDUsNyBAQAogfQogCiAvLyBQQ0kgSURzCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VtdTEwazF4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lbXUxMGsxeF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQ1JFQVRJVkUsIDB4MDAwNiksIDAgfSwJLyogRGVsbCBPRU0gdmVyc2lvbiAoRU1VMTBLMSkgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW5zMTM3MC5jIGIvc291bmQvcGNpL2VuczEzNzAuYwppbmRleCAyYjgyYzVjLi5jN2ZiYTUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW5zMTM3MC5jCisrKyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2F1ZGlvcGNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F1ZGlvcGNpX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hdWRpb3BjaV9pZHMpID0gewogI2lmZGVmIENISVAxMzcwCiAJeyBQQ0lfVkRFVklDRShFTlNPTklRLCAweDUwMDApLCAwLCB9LAkvKiBFUzEzNzAgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTkzOC5jIGIvc291bmQvcGNpL2VzMTkzOC5jCmluZGV4IGZiODNlMWYuLjU1M2I3NTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5MzguYworKysgYi9zb3VuZC9wY2kvZXMxOTM4LmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2VzMTkzOF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lczE5MzhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VzMTkzOF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoRVNTLCAweDE5NjkpLCAwLCB9LCAgIC8qIFNvbG8tMSAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBhMTFmNDUzLi5lY2FlYTlmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC01NTEsNyArNTUxLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IHNuZF9lczE5NjhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZXMxOTY4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lczE5NjhfaWRzKSA9IHsKIAkvKiBNYWVzdHJvIDEgKi8KICAgICAgICAgeyAweDEyODUsIDB4MDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIFRZUEVfTUFFU1RSTyB9LAogCS8qIE1hZXN0cm8gMiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCA4MzUwOGIzLi5lMWJhYWQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZm04MDFfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2ZtODAxX2lkcykgPSB7CiAJeyAweDEzMTksIDB4MDgwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDAsIH0sICAgLyogRk04MDEgKi8KIAl7IDB4NTIxMywgMHgwNTEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LCAweGZmZmYwMCwgMCwgfSwgICAvKiBHYWxsYW50IE9keXNzZXkgU291bmQgNCAqLwogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggZjk4YjQ3Yy4uNzZkM2M0YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC04MjQsNiArODI0LDkgQEAKIAlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluOwogCXVuc2lnbmVkIGludCBvbGRjZmc7CiAKKwlpZiAoZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBuaWQpKSAhPSBBQ19XSURfUElOKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW9sZGNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgbGlzdCwgbmlkKTsKIAlpZiAoIXBpbikgewpAQCAtODk5LDYgKzkwMiwyNSBAQAogCX0KIH0KIAorLyoqCisgKiBzbmRfaGRhX3NodXR1cF9waW5zIC0gU2h1dCB1cCBhbGwgcGlucworICogQGNvZGVjOiB0aGUgSERBIGNvZGVjCisgKgorICogQ2xlYXIgYWxsIHBpbiBjb250cm9scyB0byBzaHVwIHVwIGJlZm9yZSBzdXNwZW5kIGZvciBhdm9pZGluZyBjbGljayBub2lzZS4KKyAqIFRoZSBjb250cm9scyBhcmVuJ3QgY2FjaGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVzdW1lZCBwcm9wZXJseS4KKyAqLwordm9pZCBzbmRfaGRhX3NodXR1cF9waW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aW5pdF9waW5zLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5pbml0X3BpbnMsIGkpOworCQkvKiB1c2UgcmVhZCBoZXJlIGZvciBzeW5jaW5nIGFmdGVyIGlzc3VpbmcgZWFjaCB2ZXJiICovCisJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluLT5uaWQsIDAsCisJCQkJICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX3NodXR1cF9waW5zKTsKKwogc3RhdGljIHZvaWQgaW5pdF9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlLAogCQkJICAgdW5zaWduZWQgaW50IHJlY29yZF9zaXplKTsKIHN0YXRpYyB2b2lkIGZyZWVfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSk7CkBAIC05MzEsNiArOTUzLDcgQEAKICNlbmRpZgogCWxpc3RfZGVsKCZjb2RlYy0+bGlzdCk7CiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5taXhlcnMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+bmlkcyk7CiAJY29kZWMtPmJ1cy0+Y2FkZHJfdGJsW2NvZGVjLT5hZGRyXSA9IE5VTEw7CiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMuZnJlZSkKIAkJY29kZWMtPnBhdGNoX29wcy5mcmVlKGNvZGVjKTsKQEAgLTk4NSw3ICsxMDA4LDggQEAKIAltdXRleF9pbml0KCZjb2RlYy0+Y29udHJvbF9tdXRleCk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5hbXBfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2FtcF9pbmZvKSk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5jbWRfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2NhY2hlX2hlYWQpKTsKLQlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPm1peGVycywgc2l6ZW9mKHN0cnVjdCBoZGFfbmlkX2l0ZW0pLCA2MCk7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5taXhlcnMsIHNpemVvZihzdHJ1Y3QgaGRhX25pZF9pdGVtKSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+bmlkcywgc2l6ZW9mKHN0cnVjdCBoZGFfbmlkX2l0ZW0pLCAzMik7CiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5pbml0X3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKIAlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmRyaXZlcl9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAJaWYgKGNvZGVjLT5idXMtPm1vZGVsbmFtZSkgewpAQCAtMTcwOCw3ICsxNzMyLDcgQEAKIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZmluZF9taXhlcl9jdGwpOwogCiAvKioKLSAqIHNuZF9oZGFfY3RsLWFkZCAtIEFkZCBhIGNvbnRyb2wgZWxlbWVudCBhbmQgYXNzaWduIHRvIHRoZSBjb2RlYworICogc25kX2hkYV9jdGxfYWRkIC0gQWRkIGEgY29udHJvbCBlbGVtZW50IGFuZCBhc3NpZ24gdG8gdGhlIGNvZGVjCiAgKiBAY29kZWM6IEhELWF1ZGlvIGNvZGVjCiAgKiBAbmlkOiBjb3JyZXNwb25kaW5nIE5JRCAob3B0aW9uYWwpCiAgKiBAa2N0bDogdGhlIGNvbnRyb2wgZWxlbWVudCB0byBhc3NpZ24KQEAgLTE3MjMsMTkgKzE3NDcsMjUgQEAKICAqCiAgKiBzbmRfaGRhX2N0bF9hZGQoKSBjaGVja3MgdGhlIGNvbnRyb2wgc3ViZGV2IGlkIGZpZWxkIHdoZXRoZXIKICAqICNIREFfU1VCREVWX05JRF9GTEFHIGJpdCBpcyBzZXQuICBJZiBzZXQgKGFuZCBAbmlkIGlzIHplcm8pLCB0aGUgbG93ZXIKLSAqIGJpdHMgdmFsdWUgaXMgdGFrZW4gYXMgdGhlIE5JRCB0byBhc3NpZ24uCisgKiBiaXRzIHZhbHVlIGlzIHRha2VuIGFzIHRoZSBOSUQgdG8gYXNzaWduLiBUaGUgI0hEQV9OSURfSVRFTV9BTVAgYml0CisgKiBzcGVjaWZpZXMgaWYga2N0bC0+cHJpdmF0ZV92YWx1ZSBpcyBhIEhEQSBhbXBsaWZpZXIgdmFsdWUuCiAgKi8KIGludCBzbmRfaGRhX2N0bF9hZGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsKQogewogCWludCBlcnI7CisJdW5zaWduZWQgc2hvcnQgZmxhZ3MgPSAwOwogCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW07CiAKLQlpZiAoa2N0bC0+aWQuc3ViZGV2aWNlICYgSERBX1NVQkRFVl9OSURfRkxBRykgeworCWlmIChrY3RsLT5pZC5zdWJkZXZpY2UgJiBIREFfU1VCREVWX0FNUF9GTEFHKSB7CisJCWZsYWdzIHw9IEhEQV9OSURfSVRFTV9BTVA7CiAJCWlmIChuaWQgPT0gMCkKLQkJCW5pZCA9IGtjdGwtPmlkLnN1YmRldmljZSAmIDB4ZmZmZjsKLQkJa2N0bC0+aWQuc3ViZGV2aWNlID0gMDsKKwkJCW5pZCA9IGdldF9hbXBfbmlkXyhrY3RsLT5wcml2YXRlX3ZhbHVlKTsKIAl9CisJaWYgKChrY3RsLT5pZC5zdWJkZXZpY2UgJiBIREFfU1VCREVWX05JRF9GTEFHKSAhPSAwICYmIG5pZCA9PSAwKQorCQluaWQgPSBrY3RsLT5pZC5zdWJkZXZpY2UgJiAweGZmZmY7CisJaWYgKGtjdGwtPmlkLnN1YmRldmljZSAmIChIREFfU1VCREVWX05JRF9GTEFHfEhEQV9TVUJERVZfQU1QX0ZMQUcpKQorCQlrY3RsLT5pZC5zdWJkZXZpY2UgPSAwOwogCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5idXMtPmNhcmQsIGtjdGwpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTc0NCwxMSArMTc3NCw0MSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpdGVtLT5rY3RsID0ga2N0bDsKIAlpdGVtLT5uaWQgPSBuaWQ7CisJaXRlbS0+ZmxhZ3MgPSBmbGFnczsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY3RsX2FkZCk7CiAKIC8qKgorICogc25kX2hkYV9hZGRfbmlkIC0gQXNzaWduIGEgTklEIHRvIGEgY29udHJvbCBlbGVtZW50CisgKiBAY29kZWM6IEhELWF1ZGlvIGNvZGVjCisgKiBAbmlkOiBjb3JyZXNwb25kaW5nIE5JRCAob3B0aW9uYWwpCisgKiBAa2N0bDogdGhlIGNvbnRyb2wgZWxlbWVudCB0byBhc3NpZ24KKyAqIEBpbmRleDogaW5kZXggdG8ga2N0bAorICoKKyAqIEFkZCB0aGUgZ2l2ZW4gY29udHJvbCBlbGVtZW50IHRvIGFuIGFycmF5IGluc2lkZSB0aGUgY29kZWMgaW5zdGFuY2UuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiAjc25kX2hkYV9jdGxfYWRkIGNhbm5vdCBiZSB1c2VkIGZvciAxOjEKKyAqIE5JRDpLQ1RMIG1hcHBpbmcgLSBmb3IgZXhhbXBsZSAiQ2FwdHVyZSBTb3VyY2UiIHNlbGVjdG9yLgorICovCitpbnQgc25kX2hkYV9hZGRfbmlkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkgICAgdW5zaWduZWQgaW50IGluZGV4LCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW07CisKKwlpZiAobmlkID4gMCkgeworCQlpdGVtID0gc25kX2FycmF5X25ldygmY29kZWMtPm5pZHMpOworCQlpZiAoIWl0ZW0pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaXRlbS0+a2N0bCA9IGtjdGw7CisJCWl0ZW0tPmluZGV4ID0gaW5kZXg7CisJCWl0ZW0tPm5pZCA9IG5pZDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9hZGRfbmlkKTsKKworLyoqCiAgKiBzbmRfaGRhX2N0bHNfY2xlYXIgLSBDbGVhciBhbGwgY29udHJvbHMgYXNzaWduZWQgdG8gdGhlIGdpdmVuIGNvZGVjCiAgKiBAY29kZWM6IEhELWF1ZGlvIGNvZGVjCiAgKi8KQEAgLTE3NTksNiArMTgxOSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5taXhlcnMudXNlZDsgaSsrKQogCQlzbmRfY3RsX3JlbW92ZShjb2RlYy0+YnVzLT5jYXJkLCBpdGVtc1tpXS5rY3RsKTsKIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPm1peGVycyk7CisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5uaWRzKTsKIH0KIAogLyogcHNldWRvIGRldmljZSBsb2NraW5nCkBAIC0yNzA2LDcgKzI3NjcsOCBAQAogCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgZmcsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAogCQkJICAgIHBvd2VyX3N0YXRlKTsKIAkvKiBwYXJ0aWFsIHdvcmthcm91bmQgZm9yICJhenhfZ2V0X3Jlc3BvbnNlIHRpbWVvdXQiICovCi0JaWYgKHBvd2VyX3N0YXRlID09IEFDX1BXUlNUX0QwKQorCWlmIChwb3dlcl9zdGF0ZSA9PSBBQ19QV1JTVF9EMCAmJgorCSAgICAoY29kZWMtPnZlbmRvcl9pZCAmIDB4ZmZmZjAwMDApID09IDB4MTRmMTAwMDApCiAJCW1zbGVlcCgxMCk7CiAKIAluaWQgPSBjb2RlYy0+c3RhcnRfbmlkOwpAQCAtMjc0MCw3ICsyODAyLDYgQEAKIAlpZiAocG93ZXJfc3RhdGUgPT0gQUNfUFdSU1RfRDApIHsKIAkJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKIAkJaW50IHN0YXRlOwotCQltc2xlZXAoMTApOwogCQkvKiB3YWl0IHVudGlsIHRoZSBjb2RlYyByZWFjaHMgdG8gRDAgKi8KIAkJZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApOwogCQlkbyB7CkBAIC0zMjE0LDYgKzMyNzUsOCBAQAogCiAvKgogICogZ2V0IHRoZSBlbXB0eSBQQ00gZGV2aWNlIG51bWJlciB0byBhc3NpZ24KKyAqCisgKiBub3RlIHRoZSBtYXggZGV2aWNlIG51bWJlciBpcyBsaW1pdGVkIGJ5IEhEQV9NQVhfUENNUywgY3VycmVudGx5IDEwCiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2VtcHR5X3BjbV9kZXZpY2Uoc3RydWN0IGhkYV9idXMgKmJ1cywgaW50IHR5cGUpCiB7CkBAIC0zNDc4LDYgKzM1NDEsOCBAQAogCiAJZm9yICg7IGtuZXctPm5hbWU7IGtuZXcrKykgewogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQlpZiAoa25ldy0+aWZhY2UgPT0gLTEpCS8qIHNraXAgdGhpcyBjb2RlYyBwcml2YXRlIHZhbHVlICovCisJCQljb250aW51ZTsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MShrbmV3LCBjb2RlYyk7CiAJCWlmICgha2N0bCkKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggMGE3NzBhMi4uYjc1ZGE0NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC01MjcsNiArNTI3LDkgQEAKIC8qIG1heC4gY29kZWMgYWRkcmVzcyAqLwogI2RlZmluZSBIREFfTUFYX0NPREVDX0FERFJFU1MJMHgwZgogCisvKiBtYXggbnVtYmVyIG9mIFBDTSBkZXZpY3MgcGVyIGNhcmQgKi8KKyNkZWZpbmUgSERBX01BWF9QQ01TCQkxMAorCiAvKgogICogZ2VuZXJpYyBhcnJheXMKICAqLwpAQCAtNzg5LDYgKzc5Miw3IEBACiAJdTMyICp3Y2FwczsKIAogCXN0cnVjdCBzbmRfYXJyYXkgbWl4ZXJzOwkvKiBsaXN0IG9mIGFzc2lnbmVkIG1peGVyIGVsZW1lbnRzICovCisJc3RydWN0IHNuZF9hcnJheSBuaWRzOwkJLyogbGlzdCBvZiBtYXBwZWQgbWl4ZXIgZWxlbWVudHMgKi8KIAogCXN0cnVjdCBoZGFfY2FjaGVfcmVjIGFtcF9jYWNoZTsJLyogY2FjaGUgZm9yIGFtcCBhY2Nlc3MgKi8KIAlzdHJ1Y3QgaGRhX2NhY2hlX3JlYyBjbWRfY2FjaGU7CS8qIGNhY2hlIGZvciBvdGhlciBjb21tYW5kcyAqLwpAQCAtODk4LDYgKzkwMiw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCBjZmcpOwogaW50IHNuZF9oZGFfYWRkX3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9hcnJheSAqbGlzdCwKIAkJICAgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjZmcpOyAvKiBmb3IgaHdkZXAgKi8KK3ZvaWQgc25kX2hkYV9zaHV0dXBfcGlucyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIC8qCiAgKiBNaXhlcgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCmluZGV4IDA5MmM2YTcuLjVlYTIxMjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKQEAgLTg2MSw3ICs4NjEsOCBAQAogCX0KIAogCS8qIGNyZWF0ZSBpbnB1dCBNVVggaWYgbXVsdGlwbGUgc291cmNlcyBhcmUgYXZhaWxhYmxlICovCi0JZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAwLCBzbmRfY3RsX25ldzEoJmNhcF9zZWwsIGNvZGVjKSk7CisJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBzcGVjLT5hZGNfbm9kZS0+bmlkLAorCQkJICAgICAgc25kX2N0bF9uZXcxKCZjYXBfc2VsLCBjb2RlYykpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwppbmRleCA0MGNjYjQxLi5hMWZjODM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKQEAgLTI5Myw4ICsyOTMsMTEgQEAKIHsJCQkJCQkJCVwKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsJCVwKLQljaGFyICphZnRlcjsJCQkJCQlcCi0JY29kZWMtPnR5cGUgPSBzaW1wbGVfc3RydG91bChidWYsICZhZnRlciwgMCk7CQlcCisJdW5zaWduZWQgbG9uZyB2YWw7CQkJCQlcCisJaW50IGVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCk7CQkJXAorCWlmIChlcnIgPCAwKQkJCQkJCVwKKwkJcmV0dXJuIGVycjsJCQkJCVwKKwljb2RlYy0+dHlwZSA9IHZhbDsJCQkJCVwKIAlyZXR1cm4gY291bnQ7CQkJCQkJXAogfQogCkBAIC02MjIsNiArNjI1LDEwIEBACiAJTElORV9NT0RFX1BJTkNGRywKIAlMSU5FX01PREVfVkVSQiwKIAlMSU5FX01PREVfSElOVCwKKwlMSU5FX01PREVfVkVORE9SX0lELAorCUxJTkVfTU9ERV9TVUJTWVNURU1fSUQsCisJTElORV9NT0RFX1JFVklTSU9OX0lELAorCUxJTkVfTU9ERV9DSElQX05BTUUsCiAJTlVNX0xJTkVfTU9ERVMsCiB9OwogCkBAIC02NTEsNTMgKzY1OCw3MSBAQAogfQogCiAvKiBwYXJzZSB0aGUgY29udGVudHMgYWZ0ZXIgdGhlIG90aGVyIGNvbW1hbmQgdGFncywgW3BpbmNmZ10sIFt2ZXJiXSwKLSAqIFtoaW50XSBhbmQgW21vZGVsXQorICogW3ZlbmRvcl9pZF0sIFtzdWJzeXN0ZW1faWRdLCBbcmV2aXNpb25faWRdLCBbY2hpcF9uYW1lXSwgW2hpbnRdIGFuZCBbbW9kZWxdCiAgKiBqdXN0IHBhc3MgdG8gdGhlIHN5c2ZzIGhlbHBlciAob25seSB3aGVuIGFueSBjb2RlYyB3YXMgc3BlY2lmaWVkKQogICovCiBzdGF0aWMgdm9pZCBwYXJzZV9waW5jZmdfbW9kZShjaGFyICpidWYsIHN0cnVjdCBoZGFfYnVzICpidXMsCiAJCQkgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCXBhcnNlX3VzZXJfcGluX2NvbmZpZ3MoKmNvZGVjcCwgYnVmKTsKIH0KIAogc3RhdGljIHZvaWQgcGFyc2VfdmVyYl9tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywKIAkJCSAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCXBhcnNlX2luaXRfdmVyYnMoKmNvZGVjcCwgYnVmKTsKIH0KIAogc3RhdGljIHZvaWQgcGFyc2VfaGludF9tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywKIAkJCSAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCXBhcnNlX2hpbnRzKCpjb2RlY3AsIGJ1Zik7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNlX21vZGVsX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLAogCQkJICAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCWtmcmVlKCgqY29kZWNwKS0+bW9kZWxuYW1lKTsKIAkoKmNvZGVjcCktPm1vZGVsbmFtZSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIHZvaWQgcGFyc2VfY2hpcF9uYW1lX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLAorCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQoreworCWtmcmVlKCgqY29kZWNwKS0+Y2hpcF9uYW1lKTsKKwkoKmNvZGVjcCktPmNoaXBfbmFtZSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKK30KKworI2RlZmluZSBERUZJTkVfUEFSU0VfSURfTU9ERShuYW1lKSBcCitzdGF0aWMgdm9pZCBwYXJzZV8jI25hbWUjI19tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywgXAorCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKSBcCit7IFwKKwl1bnNpZ25lZCBsb25nIHZhbDsgXAorCWlmICghc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSkgXAorCQkoKmNvZGVjcCktPm5hbWUgPSB2YWw7IFwKK30KKworREVGSU5FX1BBUlNFX0lEX01PREUodmVuZG9yX2lkKTsKK0RFRklORV9QQVJTRV9JRF9NT0RFKHN1YnN5c3RlbV9pZCk7CitERUZJTkVfUEFSU0VfSURfTU9ERShyZXZpc2lvbl9pZCk7CisKKwogc3RydWN0IGhkYV9wYXRjaF9pdGVtIHsKIAljb25zdCBjaGFyICp0YWc7CiAJdm9pZCAoKnBhcnNlcikoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLCBzdHJ1Y3QgaGRhX2NvZGVjICoqcmV0Yyk7CisJaW50IG5lZWRfY29kZWM7CiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV9wYXRjaF9pdGVtIHBhdGNoX2l0ZW1zW05VTV9MSU5FX01PREVTXSA9IHsKLQlbTElORV9NT0RFX0NPREVDXSA9IHsgIltjb2RlY10iLCBwYXJzZV9jb2RlY19tb2RlIH0sCi0JW0xJTkVfTU9ERV9NT0RFTF0gPSB7ICJbbW9kZWxdIiwgcGFyc2VfbW9kZWxfbW9kZSB9LAotCVtMSU5FX01PREVfVkVSQl0gPSB7ICJbdmVyYl0iLCBwYXJzZV92ZXJiX21vZGUgfSwKLQlbTElORV9NT0RFX1BJTkNGR10gPSB7ICJbcGluY2ZnXSIsIHBhcnNlX3BpbmNmZ19tb2RlIH0sCi0JW0xJTkVfTU9ERV9ISU5UXSA9IHsgIltoaW50XSIsIHBhcnNlX2hpbnRfbW9kZSB9LAorCVtMSU5FX01PREVfQ09ERUNdID0geyAiW2NvZGVjXSIsIHBhcnNlX2NvZGVjX21vZGUsIDAgfSwKKwlbTElORV9NT0RFX01PREVMXSA9IHsgIlttb2RlbF0iLCBwYXJzZV9tb2RlbF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9WRVJCXSA9IHsgIlt2ZXJiXSIsIHBhcnNlX3ZlcmJfbW9kZSwgMSB9LAorCVtMSU5FX01PREVfUElOQ0ZHXSA9IHsgIltwaW5jZmddIiwgcGFyc2VfcGluY2ZnX21vZGUsIDEgfSwKKwlbTElORV9NT0RFX0hJTlRdID0geyAiW2hpbnRdIiwgcGFyc2VfaGludF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9WRU5ET1JfSURdID0geyAiW3ZlbmRvcl9pZF0iLCBwYXJzZV92ZW5kb3JfaWRfbW9kZSwgMSB9LAorCVtMSU5FX01PREVfU1VCU1lTVEVNX0lEXSA9IHsgIltzdWJzeXN0ZW1faWRdIiwgcGFyc2Vfc3Vic3lzdGVtX2lkX21vZGUsIDEgfSwKKwlbTElORV9NT0RFX1JFVklTSU9OX0lEXSA9IHsgIltyZXZpc2lvbl9pZF0iLCBwYXJzZV9yZXZpc2lvbl9pZF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9DSElQX05BTUVdID0geyAiW2NoaXBfbmFtZV0iLCBwYXJzZV9jaGlwX25hbWVfbW9kZSwgMSB9LAogfTsKIAogLyogY2hlY2sgdGhlIGxpbmUgc3RhcnRpbmcgd2l0aCAnWycgLS0gY2hhbmdlIHRoZSBwYXJzZXIgbW9kZSBhY2NvZGluZ2x5ICovCkBAIC03ODAsNyArODA1LDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoKmJ1ZiA9PSAnWycpCiAJCQlsaW5lX21vZGUgPSBwYXJzZV9saW5lX21vZGUoYnVmLCBidXMpOwotCQllbHNlIGlmIChwYXRjaF9pdGVtc1tsaW5lX21vZGVdLnBhcnNlcikKKwkJZWxzZSBpZiAocGF0Y2hfaXRlbXNbbGluZV9tb2RlXS5wYXJzZXIgJiYKKwkJCSAoY29kZWMgfHwgIXBhdGNoX2l0ZW1zW2xpbmVfbW9kZV0ubmVlZF9jb2RlYykpCiAJCQlwYXRjaF9pdGVtc1tsaW5lX21vZGVdLnBhcnNlcihidWYsIGJ1cywgJmNvZGVjKTsKIAl9CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCBmZjZkYTZmLi5kNWM5M2FkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTEyNSw2ICsxMjUsNyBAQAogCQkJICJ7SW50ZWwsIElDSDl9LCIKIAkJCSAie0ludGVsLCBJQ0gxMH0sIgogCQkJICJ7SW50ZWwsIFBDSH0sIgorCQkJICJ7SW50ZWwsIENQVH0sIgogCQkJICJ7SW50ZWwsIFNDSH0sIgogCQkJICJ7QVRJLCBTQjQ1MH0sIgogCQkJICJ7QVRJLCBTQjYwMH0sIgpAQCAtMjU5LDggKzI2MCw2IEBACiAjZGVmaW5lIEFaWF9NQVhfRlJBRwkJMzIKIC8qIG1heCBidWZmZXIgc2l6ZSAtIG5vIGgvdyBsaW1pdCwgeW91IGNhbiBpbmNyZWFzZSBhcyB5b3UgbGlrZSAqLwogI2RlZmluZSBBWlhfTUFYX0JVRl9TSVpFCSgxMDI0KjEwMjQqMTAyNCkKLS8qIG1heCBudW1iZXIgb2YgUENNIGRldmljcyBwZXIgY2FyZCAqLwotI2RlZmluZSBBWlhfTUFYX1BDTVMJCTgKIAogLyogUklSQiBpbnQgbWFzazogb3ZlcnJ1blsyXSwgcmVzcG9uc2VbMF0gKi8KICNkZWZpbmUgUklSQl9JTlRfUkVTUE9OU0UJMHgwMQpAQCAtNDA4LDcgKzQwNyw3IEBACiAJc3RydWN0IGF6eF9kZXYgKmF6eF9kZXY7CiAKIAkvKiBQQ00gKi8KLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtW0FaWF9NQVhfUENNU107CisJc3RydWN0IHNuZF9wY20gKnBjbVtIREFfTUFYX1BDTVNdOwogCiAJLyogSEQgY29kZWMgKi8KIAl1bnNpZ25lZCBzaG9ydCBjb2RlY19tYXNrOwpAQCAtNDQ5LDYgKzQ0OCw3IEBACiAvKiBkcml2ZXIgdHlwZXMgKi8KIGVudW0gewogCUFaWF9EUklWRVJfSUNILAorCUFaWF9EUklWRVJfUENILAogCUFaWF9EUklWRVJfU0NILAogCUFaWF9EUklWRVJfQVRJLAogCUFaWF9EUklWRVJfQVRJSERNSSwKQEAgLTQ2Myw2ICs0NjMsNyBAQAogCiBzdGF0aWMgY2hhciAqZHJpdmVyX3Nob3J0X25hbWVzW10gX19kZXZpbml0ZGF0YSA9IHsKIAlbQVpYX0RSSVZFUl9JQ0hdID0gIkhEQSBJbnRlbCIsCisJW0FaWF9EUklWRVJfUENIXSA9ICJIREEgSW50ZWwgUENIIiwKIAlbQVpYX0RSSVZFUl9TQ0hdID0gIkhEQSBJbnRlbCBNSUQiLAogCVtBWlhfRFJJVkVSX0FUSV0gPSAiSERBIEFUSSBTQiIsCiAJW0FaWF9EUklWRVJfQVRJSERNSV0gPSAiSERBIEFUSSBIRE1JIiwKQEAgLTk2OCw4ICs5NjksOCBAQAogCWF6eF9kZXYtPmluc3VmZmljaWVudCA9IDE7CiAKIAkvKiBlbmFibGUgU0lFICovCi0JYXp4X3dyaXRlYihjaGlwLCBJTlRDVEwsCi0JCSAgIGF6eF9yZWFkYihjaGlwLCBJTlRDVEwpIHwgKDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKKwlhenhfd3JpdGVsKGNoaXAsIElOVENUTCwKKwkJICAgYXp4X3JlYWRsKGNoaXAsIElOVENUTCkgfCAoMSA8PCBhenhfZGV2LT5pbmRleCkpOwogCS8qIHNldCBETUEgc3RhcnQgYW5kIGludGVycnVwdCBtYXNrICovCiAJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9DVEwsIGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpIHwKIAkJICAgICAgU0RfQ1RMX0RNQV9TVEFSVCB8IFNEX0lOVF9NQVNLKTsKQEAgLTk4OCw4ICs5ODksOCBAQAogewogCWF6eF9zdHJlYW1fY2xlYXIoY2hpcCwgYXp4X2Rldik7CiAJLyogZGlzYWJsZSBTSUUgKi8KLQlhenhfd3JpdGViKGNoaXAsIElOVENUTCwKLQkJICAgYXp4X3JlYWRiKGNoaXAsIElOVENUTCkgJiB+KDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKKwlhenhfd3JpdGVsKGNoaXAsIElOVENUTCwKKwkJICAgYXp4X3JlYWRsKGNoaXAsIElOVENUTCkgJiB+KDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKIH0KIAogCkBAIC0xMDY1LDYgKzEwNjYsNyBAQAogCQkJCTB4MDEsIE5WSURJQV9IREFfRU5BQkxFX0NPSEJJVCk7CiAJCWJyZWFrOwogCWNhc2UgQVpYX0RSSVZFUl9TQ0g6CisJY2FzZSBBWlhfRFJJVkVSX1BDSDoKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBJTlRFTF9TQ0hfSERBX0RFVkMsICZzbm9vcCk7CiAJCWlmIChzbm9vcCAmIElOVEVMX1NDSF9IREFfREVWQ19OT1NOT09QKSB7CiAJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBJTlRFTF9TQ0hfSERBX0RFVkMsCkBAIC0xMzUwLDcgKzEzNTIsNyBAQAogCWlmIChjaGlwLT5pbml0aWFsaXplZCkgewogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQVpYX01BWF9QQ01TOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBIREFfTUFYX1BDTVM7IGkrKykKIAkJCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtW2ldKTsKIAkJc25kX2hkYV9zdXNwZW5kKGNoaXAtPmJ1cyk7CiAJCXNuZF9oZGFfcmVzdW1lKGNoaXAtPmJ1cyk7CkBAIC0xNDEyLDcgKzE0MTQsNyBAQAogCQkJCWNoaXAtPmNvZGVjX21hc2sgJj0gfigxIDw8IGMpOwogCQkJCS8qIE1vcmUgYmFkbHksIGFjY2Vzc2luZyB0byBhIG5vbi1leGlzdGluZwogCQkJCSAqIGNvZGVjIG9mdGVuIHNjcmV3cyB1cCB0aGUgY29udHJvbGxlciBjaGlwLAotCQkJCSAqIGFuZCBkaXN0cnVicyB0aGUgZnVydGhlciBjb21tdW5pY2F0aW9ucy4KKwkJCQkgKiBhbmQgZGlzdHVyYnMgdGhlIGZ1cnRoZXIgY29tbXVuaWNhdGlvbnMuCiAJCQkJICogVGh1cyBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHByb2JpbmcsCiAJCQkJICogYmV0dGVyIHRvIHJlc2V0IHRoZSBjb250cm9sbGVyIGNoaXAgdG8KIAkJCQkgKiBnZXQgYmFjayB0byB0aGUgc2FuaXR5IHN0YXRlLgpAQCAtMTk4Myw3ICsxOTg1LDcgQEAKIAlpbnQgcGNtX2RldiA9IGNwY20tPmRldmljZTsKIAlpbnQgcywgZXJyOwogCi0JaWYgKHBjbV9kZXYgPj0gQVpYX01BWF9QQ01TKSB7CisJaWYgKHBjbV9kZXYgPj0gSERBX01BWF9QQ01TKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJJbnZhbGlkIFBDTSBkZXZpY2UgbnVtYmVyICVkXG4iLAogCQkJICAgcGNtX2Rldik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjEzOSw3ICsyMTQxLDcgQEAKIAogCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKIAlhenhfY2xlYXJfaXJxX3BlbmRpbmcoY2hpcCk7Ci0JZm9yIChpID0gMDsgaSA8IEFaWF9NQVhfUENNUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBIREFfTUFYX1BDTVM7IGkrKykKIAkJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY21baV0pOwogCWlmIChjaGlwLT5pbml0aWFsaXplZCkKIAkJc25kX2hkYV9zdXNwZW5kKGNoaXAtPmJ1cyk7CkBAIC0yMjYyLDYgKzIyNjQsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAxY2MsICJEZWxsIEQ4MjAiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAxZGUsICJEZWxsIFByZWNpc2lvbiAzOTAiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwNmQsICJIUCBkdjMiLCBQT1NfRklYX0xQSUIpLAorCVNORF9QQ0lfUVVJUksoMHgxMTA2LCAweDMyODgsICJBU1VTIE0yVi1NWCBTRSIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODEzZCwgIkFTVVMgUDVBRDIiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDEwMDIsICJNU0kgV2luZCBVMTE1IiwgUE9TX0ZJWF9MUElCKSwKIAl7fQpAQCAtMjQxOCw2ICsyNDIxLDcgQEAKIAlpZiAoYmRsX3Bvc19hZGpbZGV2XSA8IDApIHsKIAkJc3dpdGNoIChjaGlwLT5kcml2ZXJfdHlwZSkgewogCQljYXNlIEFaWF9EUklWRVJfSUNIOgorCQljYXNlIEFaWF9EUklWRVJfUENIOgogCQkJYmRsX3Bvc19hZGpbZGV2XSA9IDE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTI2ODMsNyArMjY4Nyw3IEBACiB9CiAKIC8qIFBDSSBJRHMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhenhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYXp4X2lkcykgPSB7CiAJLyogSUNIIDYuLjEwICovCiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHgyNjY4KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9JQ0ggfSwKIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDI3ZDgpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX0lDSCB9LApAQCAtMjY5Niw2ICsyNzAwLDggQEAKIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDNhNmUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX0lDSCB9LAogCS8qIFBDSCAqLwogCXsgUENJX0RFVklDRSgweDgwODYsIDB4M2I1NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfSUNIIH0sCisJLyogQ1BUICovCisJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHgxYzIwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9QQ0ggfSwKIAkvKiBTQ0ggKi8KIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDgxMWIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1NDSCB9LAogCS8qIEFUSSBTQiA0NTAvNjAwICovCkBAIC0yNzIzLDMyICsyNzI5LDEwIEBACiAJLyogVUxJIE01NDYxICovCiAJeyBQQ0lfREVWSUNFKDB4MTBiOSwgMHg1NDYxKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9VTEkgfSwKIAkvKiBOVklESUEgTUNQICovCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwMjZjKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDAzNzEpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDNlNCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwM2YwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA0NGEpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDQ0YiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTVjKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1NWQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU5MCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc3KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3ZmMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDdmZCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzEpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMzKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZTIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJlMyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmU0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTcpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0FOWV9JRCksCisJICAuY2xhc3MgPSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9IRF9BVURJTyA8PCA4LAorCSAgLmNsYXNzX21hc2sgPSAweGZmZmZmZiwKKwkgIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJLyogVGVyYWRpY2kgKi8KIAl7IFBDSV9ERVZJQ0UoMHg2NTQ5LCAweDEyMDApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1RFUkEgfSwKIAkvKiBDcmVhdGl2ZSBYLUZpIChDQTAxMTAtSUJHKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKaW5kZXggNTc3OGFlOC4uN2NlZTM2NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCkBAIC0zMSw2ICszMSw3IEBACiAgKiBpbiBzbmRfaGRhX2N0bF9hZGQoKSwgc28gdGhhdCB0aGlzIHZhbHVlIHdvbid0IGFwcGVhciBpbiB0aGUgb3V0c2lkZS4KICAqLwogI2RlZmluZSBIREFfU1VCREVWX05JRF9GTEFHCSgxVSA8PCAzMSkKKyNkZWZpbmUgSERBX1NVQkRFVl9BTVBfRkxBRwkoMVUgPDwgMzApCiAKIC8qCiAgKiBmb3IgbWl4ZXIgY29udHJvbHMKQEAgLTQyLDcgKzQzLDcgQEAKIC8qIG1vbm8gdm9sdW1lIHdpdGggaW5kZXggKGluZGV4PTAsMSwuLi4pIChjaGFubmVsPTEsMikgKi8KICNkZWZpbmUgSERBX0NPREVDX1ZPTFVNRV9NT05PX0lEWCh4bmFtZSwgeGNpZHgsIG5pZCwgY2hhbm5lbCwgeGluZGV4LCBkaXJlY3Rpb24pIFwKIAl7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4Y2lkeCwgIFwKLQkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgKG5pZCksIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLCBcCiAJICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8IFwKIAkgIAkgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwgXAogCSAgCSAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NBTExCQUNLLCBcCkBAIC02Myw3ICs2NCw3IEBACiAvKiBtb25vIG11dGUgc3dpdGNoIHdpdGggaW5kZXggKGluZGV4PTAsMSwuLi4pIChjaGFubmVsPTEsMikgKi8KICNkZWZpbmUgSERBX0NPREVDX01VVEVfTU9OT19JRFgoeG5hbWUsIHhjaWR4LCBuaWQsIGNoYW5uZWwsIHhpbmRleCwgZGlyZWN0aW9uKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGNpZHgsIFwKLQkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgKG5pZCksIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLCBcCiAJICAuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLCBcCiAJICAuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwgXAogCSAgLnB1dCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9wdXQsIFwKQEAgLTgxLDcgKzgyLDcgQEAKIC8qIHNwZWNpYWwgYmVlcCBtb25vIG11dGUgc3dpdGNoIHdpdGggaW5kZXggKGluZGV4PTAsMSwuLi4pIChjaGFubmVsPTEsMikgKi8KICNkZWZpbmUgSERBX0NPREVDX01VVEVfQkVFUF9NT05PX0lEWCh4bmFtZSwgeGNpZHgsIG5pZCwgY2hhbm5lbCwgeGluZGV4LCBkaXJlY3Rpb24pIFwKIAl7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4Y2lkeCwgXAotCSAgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAobmlkKSwgXAorCSAgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsIFwKIAkgIC5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sIFwKIAkgIC5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LCBcCiAJICAucHV0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX3B1dF9iZWVwLCBcCkBAIC00NjQsMTMgKzQ2NSwyMCBAQAogdTMyIHNuZF9oZGFfcGluX3NlbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKIGludCBzbmRfaGRhX2phY2tfZGV0ZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKIAorLyogZmxhZ3MgZm9yIGhkYV9uaWRfaXRlbSAqLworI2RlZmluZSBIREFfTklEX0lURU1fQU1QCSgxPDwwKQorCiBzdHJ1Y3QgaGRhX25pZF9pdGVtIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCXVuc2lnbmVkIGludCBpbmRleDsKIAloZGFfbmlkX3QgbmlkOworCXVuc2lnbmVkIHNob3J0IGZsYWdzOwogfTsKIAogaW50IHNuZF9oZGFfY3RsX2FkZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwpOworaW50IHNuZF9oZGFfYWRkX25pZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJICAgIHVuc2lnbmVkIGludCBpbmRleCwgaGRhX25pZF90IG5pZCk7CiB2b2lkIHNuZF9oZGFfY3Rsc19jbGVhcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKaW5kZXggYzlhZmMwNC4uZjk3ZDM1ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwpAQCAtNjEsMTggKzYxLDI5IEBACiAJCXJldHVybiAiVU5LTk9XTiBXaWRnZXQiOwogfQogCi1zdGF0aWMgdm9pZCBwcmludF9uaWRfbWl4ZXJzKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwKLQkJCSAgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCitzdGF0aWMgdm9pZCBwcmludF9uaWRfYXJyYXkoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJICAgIHN0cnVjdCBzbmRfYXJyYXkgKmFycmF5KQogewogCWludCBpOwotCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW1zID0gY29kZWMtPm1peGVycy5saXN0OworCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW1zID0gYXJyYXktPmxpc3QsICppdGVtOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7Ci0JZm9yIChpID0gMDsgaSA8IGNvZGVjLT5taXhlcnMudXNlZDsgaSsrKSB7Ci0JCWlmIChpdGVtc1tpXS5uaWQgPT0gbmlkKSB7Ci0JCQlrY3RsID0gaXRlbXNbaV0ua2N0bDsKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPnVzZWQ7IGkrKykgeworCQlpdGVtID0gJml0ZW1zW2ldOworCQlpZiAoaXRlbS0+bmlkID09IG5pZCkgeworCQkJa2N0bCA9IGl0ZW0tPmtjdGw7CiAJCQlzbmRfaXByaW50ZihidWZmZXIsCiAJCQkgICIgIENvbnRyb2w6IG5hbWU9XCIlc1wiLCBpbmRleD0laSwgZGV2aWNlPSVpXG4iLAotCQkJICBrY3RsLT5pZC5uYW1lLCBrY3RsLT5pZC5pbmRleCwga2N0bC0+aWQuZGV2aWNlKTsKKwkJCSAga2N0bC0+aWQubmFtZSwga2N0bC0+aWQuaW5kZXggKyBpdGVtLT5pbmRleCwKKwkJCSAga2N0bC0+aWQuZGV2aWNlKTsKKwkJCWlmIChpdGVtLT5mbGFncyAmIEhEQV9OSURfSVRFTV9BTVApCisJCQkJc25kX2lwcmludGYoYnVmZmVyLAorCQkJCSAgIiAgICBDb250cm9sQW1wOiBjaHM9JWx1LCBkaXI9JXMsICIKKwkJCQkgICJpZHg9JWx1LCBvZnM9JWx1XG4iLAorCQkJCSAgZ2V0X2FtcF9jaGFubmVscyhrY3RsKSwKKwkJCQkgIGdldF9hbXBfZGlyZWN0aW9uKGtjdGwpID8gIk91dCIgOiAiSW4iLAorCQkJCSAgZ2V0X2FtcF9pbmRleChrY3RsKSwKKwkJCQkgIGdldF9hbXBfb2Zmc2V0KGtjdGwpKTsKIAkJfQogCX0KIH0KQEAgLTUyOCw3ICs1MzksOCBAQAogCQkJICAgIChkYXRhICYgKDE8PGkpKSA/IDEgOiAwLAogCQkJICAgICh1bnNvbCAmICgxPDxpKSkgPyAxIDogMCk7CiAJLyogRklYTUU6IGFkZCBHUE8gYW5kIEdQSSBwaW4gaW5mb3JtYXRpb24gKi8KLQlwcmludF9uaWRfbWl4ZXJzKGJ1ZmZlciwgY29kZWMsIG5pZCk7CisJcHJpbnRfbmlkX2FycmF5KGJ1ZmZlciwgY29kZWMsIG5pZCwgJmNvZGVjLT5taXhlcnMpOworCXByaW50X25pZF9hcnJheShidWZmZXIsIGNvZGVjLCBuaWQsICZjb2RlYy0+bmlkcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2NvZGVjX2luZm8oc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKQEAgLTYwOCw3ICs2MjAsOCBAQAogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiIENQIik7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAKLQkJcHJpbnRfbmlkX21peGVycyhidWZmZXIsIGNvZGVjLCBuaWQpOworCQlwcmludF9uaWRfYXJyYXkoYnVmZmVyLCBjb2RlYywgbmlkLCAmY29kZWMtPm1peGVycyk7CisJCXByaW50X25pZF9hcnJheShidWZmZXIsIGNvZGVjLCBuaWQsICZjb2RlYy0+bmlkcyk7CiAJCXByaW50X25pZF9wY21zKGJ1ZmZlciwgY29kZWMsIG5pZCk7CiAKIAkJLyogdm9sdW1lIGtub2IgaXMgYSBzcGVjaWFsIHdpZGdldCB0aGF0IGFsd2F5cyBoYXZlIGNvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IDY5YTk0MWMuLmU2ZDFiZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtMTc0LDYgKzE3NCw3IEBACiBzdGF0aWMgaW50IGFkMTk4eF9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKQEAgLTIwOCw5ICsyMDksNyBAQAogCQkJaWYgKCFrY3RsKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOwotCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLAotCQkJCQkJZ2V0X2FtcF9uaWRfKHNwZWMtPmJlZXBfYW1wKSwKLQkJCQkJCWtjdGwpOworCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAwLCBrY3RsKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTIzOSw2ICsyMzgsMjcgQEAKIAl9CiAKIAlhZDE5OHhfZnJlZV9rY3Rscyhjb2RlYyk7IC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KKworCS8qIGFzc2lnbiBDYXB0dXJlIFNvdXJjZSBlbnVtcyB0byBOSUQgKi8KKwlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIkNhcHR1cmUgU291cmNlIik7CisJaWYgKCFrY3RsKQorCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIklucHV0IFNvdXJjZSIpOworCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCBpLCBzcGVjLT5jYXBzcmNfbmlkc1tpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBhc3NpZ24gSUVDOTU4IGVudW1zIHRvIE5JRCAqLworCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLAorCQkJU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLE5PTkUpICJTb3VyY2UiKTsKKwlpZiAoa2N0bCkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIDAsCisJCQkJICAgICAgc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyMSw2ICs0NDEsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFkMTk4eF9zaHV0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc25kX2hkYV9zaHV0dXBfcGlucyhjb2RlYyk7Cit9CisKIHN0YXRpYyB2b2lkIGFkMTk4eF9mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNDM0LDYgKzQ1OSw0NiBAQAogCXNuZF9hcnJheV9mcmVlKCZzcGVjLT5rY3Rscyk7CiB9CiAKK3N0YXRpYyB2b2lkIGFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgZnJvbnQsCisJCQkJaGRhX25pZF90IGhwKQoreworCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGZyb250LCAwLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwKKwkJCSAgICAhc3BlYy0+aW52X2VhcGQgPyAweDAwIDogMHgwMik7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgaHAsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAorCQkJICAgICFzcGVjLT5pbnZfZWFwZCA/IDB4MDAgOiAweDAyKTsKK30KKworc3RhdGljIHZvaWQgYWQxOTh4X3Bvd2VyX2VhcGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJLyogV2UgY3VycmVudGx5IG9ubHkgaGFuZGxlIGZyb250LCBIUCAqLworCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMWQ0MTg4MjoKKwljYXNlIDB4MTFkNDg4MmE6CisJY2FzZSAweDExZDQxODg0OgorCWNhc2UgMHgxMWQ0MTk4NDoKKwljYXNlIDB4MTFkNDE4ODM6CisJY2FzZSAweDExZDQxODRhOgorCWNhc2UgMHgxMWQ0MTk0YToKKwljYXNlIDB4MTFkNDE5NGI6CisJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDEyLCAweDExKTsKKwkJYnJlYWs7CisJY2FzZSAweDExZDQxOTgxOgorCWNhc2UgMHgxMWQ0MTk4MzoKKwkJYWQxOTh4X3Bvd2VyX2VhcGRfd3JpdGUoY29kZWMsIDB4MDUsIDB4MDYpOworCQlicmVhazsKKwljYXNlIDB4MTFkNDE5ODY6CisJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDFiLCAweDFhKTsKKwkJYnJlYWs7CisJY2FzZSAweDExZDQxOTg4OgorCWNhc2UgMHgxMWQ0MTk4YjoKKwljYXNlIDB4MTFkNDk4OWE6CisJY2FzZSAweDExZDQ5ODliOgorCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgyOSwgMHgyMik7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHZvaWQgYWQxOTh4X2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC00NDEsMTEgKzUwNiwyOSBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuOwogCisJYWQxOTh4X3NodXR1cChjb2RlYyk7CiAJYWQxOTh4X2ZyZWVfa2N0bHMoY29kZWMpOwogCWtmcmVlKHNwZWMpOwogCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIH0KIAorI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCitzdGF0aWMgaW50IGFkMTk4eF9zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJYWQxOTh4X3NodXR1cChjb2RlYyk7CisJYWQxOTh4X3Bvd2VyX2VhcGQoY29kZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkMTk4eF9yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWQxOTh4X2luaXQoY29kZWMpOworCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CisJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBhZDE5OHhfcGF0Y2hfb3BzID0gewogCS5idWlsZF9jb250cm9scyA9IGFkMTk4eF9idWlsZF9jb250cm9scywKIAkuYnVpbGRfcGNtcyA9IGFkMTk4eF9idWlsZF9wY21zLApAQCAtNDU0LDYgKzUzNywxMSBAQAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAkuY2hlY2tfcG93ZXJfc3RhdHVzID0gYWQxOTh4X2NoZWNrX3Bvd2VyX3N0YXR1cywKICNlbmRpZgorI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCisJLnN1c3BlbmQgPSBhZDE5OHhfc3VzcGVuZCwKKwkucmVzdW1lID0gYWQxOTh4X3Jlc3VtZSwKKyNlbmRpZgorCS5yZWJvb3Rfbm90aWZ5ID0gYWQxOTh4X3NodXR1cCwKIH07CiAKIApAQCAtNzAxLDYgKzc4OSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiRXh0ZXJuYWwgQW1wbGlmaWVyIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDFiLAogCQkuaW5mbyA9IGFkMTk4eF9lYXBkX2luZm8sCiAJCS5nZXQgPSBhZDE5OHhfZWFwZF9nZXQsCiAJCS5wdXQgPSBhZDE5OHhfZWFwZF9wdXQsCkBAIC04MDgsNiArODk3LDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWQxOTg2YV9ocF9tYXN0ZXJfc3dfcHV0LApAQCAtMTAwOCw3ICsxMDk4LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWNiLCAiQVNVUyBNMk4iLCBBRDE5ODZBXzNTVEFDSyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODIzNCwgIkFTVVMgTTJOIiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxMGRlLCAweGNiODQsICJBU1VTIEE4Ti1WTSIsIEFEMTk4NkFfM1NUQUNLKSwKLQlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjQwLCAiVG9zaGliYSIsIEFEMTk4NkFfTEFQVE9QX0VBUEQpLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNDAsICJUb3NoaWJhIFNhdGVsbGl0ZSBMNDAtMTBRIiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGIwM2MsICJTYW1zdW5nIFI1NSIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDFlLCAiRlNDIFYyMDYwIiwgQUQxOTg2QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjQsICJTYW1zdW5nIFA1MCIsIEFEMTk4NkFfU0FNU1VOR19QNTApLApAQCAtMTYxMiw2ICsxNzAyLDcgQEAKIAlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmYWQxOTgxX2hwX2JpbmRfbWFzdGVyX3ZvbCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDA1LAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKIAkJLmluZm8gPSBhZDE5OHhfZWFwZF9pbmZvLAogCQkuZ2V0ID0gYWQxOTh4X2VhcGRfZ2V0LApAQCAtMjEzNiw2ICsyMjI3LDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJFeHRlcm5hbCBBbXBsaWZpZXIiLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MTIsCiAJCS5pbmZvID0gYWQxOTh4X2VhcGRfaW5mbywKIAkJLmdldCA9IGFkMTk4eF9lYXBkX2dldCwKIAkJLnB1dCA9IGFkMTk4eF9lYXBkX3B1dCwKQEAgLTIyNTcsNiArMjM0OSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiSUVDOTU4IFBsYXliYWNrIFNvdXJjZSIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgxYiwKIAkJLmluZm8gPSBhZDE5ODhfc3BkaWZfcGxheWJhY2tfc291cmNlX2luZm8sCiAJCS5nZXQgPSBhZDE5ODhfc3BkaWZfcGxheWJhY2tfc291cmNlX2dldCwKIAkJLnB1dCA9IGFkMTk4OF9zcGRpZl9wbGF5YmFja19zb3VyY2VfcHV0LApAQCAtMjM3Miw2ICsyNDY1LDEyIEBACiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF9zcGRpZl9pbl9pbml0X3ZlcmJzW10gPSB7CisJLyogdW5tdXRlIFNQRElGIGlucHV0IHBpbiAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7IH0KK307CisKIC8qIEFEMTk4OSBoYXMgbm8gQURDIC0+IFNQRElGIHJvdXRlICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OV9zcGRpZl9pbml0X3ZlcmJzW10gPSB7CiAJLyogU1BESUYtMSBvdXQgcGluICovCkBAIC0yNTg5LDcgKzI2ODgsNyBAQAogCWlmICghIGtuZXctPm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChnZXRfYW1wX25pZF8odmFsKSkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IGdldF9hbXBfbmlkXyh2YWwpOworCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOwogCWtuZXctPnByaXZhdGVfdmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTA3LDggKzMyMDYsMTEgQEAKIAkJCQlhZDE5ODhfc3BkaWZfaW5pdF92ZXJiczsKIAkJfQogCX0KLQlpZiAoc3BlYy0+ZGlnX2luX25pZCAmJiBjb2RlYy0+dmVuZG9yX2lkIDwgMHgxMWQ0OTg5YSkKKwlpZiAoc3BlYy0+ZGlnX2luX25pZCAmJiBjb2RlYy0+dmVuZG9yX2lkIDwgMHgxMWQ0OTg5YSkgewogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGFkMTk4OF9zcGRpZl9pbl9taXhlcnM7CisJCXNwZWMtPmluaXRfdmVyYnNbc3BlYy0+bnVtX2luaXRfdmVyYnMrK10gPQorCQkJYWQxOTg4X3NwZGlmX2luX2luaXRfdmVyYnM7CisJfQogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFkMTk4eF9wYXRjaF9vcHM7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKQEAgLTM3NDcsNiArMzg0OSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKIAkJLnB1dCA9IGFkMTg4NGFfbW9iaWxlX21hc3Rlcl9zd19wdXQsCkBAIC0zNzc1LDYgKzM4NzgsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhZDE4ODRhX21vYmlsZV9tYXN0ZXJfc3dfcHV0LApAQCAtNDExNiw2ICs0MjIwLDcgQEAKIC8qCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwqLwogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwppbmRleCBmZTA0MjNjLi43ZGU3ODJhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKQEAgLTUwMSw3ICs1MDEsOCBAQAogCWtuZXcucHJpdmF0ZV92YWx1ZSA9IHB2YWw7CiAJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzICVzIFN3aXRjaCIsIG5hbWUsIGRpcl9zZnhbZGlyXSk7CiAJKmtjdGxwID0gc25kX2N0bF9uZXcxKCZrbmV3LCBjb2RlYyk7Ci0JcmV0dXJuIHNuZF9oZGFfY3RsX2FkZChjb2RlYywgZ2V0X2FtcF9uaWRfKHB2YWwpLCAqa2N0bHApOworCSgqa2N0bHApLT5pZC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOworCXJldHVybiBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIDAsICprY3RscCk7CiB9CiAKIHN0YXRpYyBpbnQgYWRkX3ZvbHVtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqbmFtZSwKQEAgLTUxNCw3ICs1MTUsOCBAQAogCWtuZXcucHJpdmF0ZV92YWx1ZSA9IHB2YWw7CiAJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzICVzIFZvbHVtZSIsIG5hbWUsIGRpcl9zZnhbZGlyXSk7CiAJKmtjdGxwID0gc25kX2N0bF9uZXcxKCZrbmV3LCBjb2RlYyk7Ci0JcmV0dXJuIHNuZF9oZGFfY3RsX2FkZChjb2RlYywgZ2V0X2FtcF9uaWRfKHB2YWwpLCAqa2N0bHApOworCSgqa2N0bHApLT5pZC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOworCXJldHVybiBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIDAsICprY3RscCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpeF92b2x1bWVfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGRhYykKQEAgLTc1MSw2ICs3NTMsNyBAQAogCXNwZWMtPmNhcHR1cmVfYmluZFsxXSA9IG1ha2VfYmluZF9jYXB0dXJlKGNvZGVjLCAmc25kX2hkYV9iaW5kX3ZvbCk7CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQlpbnQgbjsKIAkJaWYgKCFzcGVjLT5jYXB0dXJlX2JpbmRbaV0pCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MSgmY3NfY2FwdHVyZV9jdGxzW2ldLCBjb2RlYyk7CkBAIC03NjAsNiArNzYzLDEzIEBACiAJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgMCwga2N0bCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKKwkJZm9yIChuID0gMDsgbiA8IEFVVE9fUElOX0xBU1Q7IG4rKykgeworCQkJaWYgKCFzcGVjLT5hZGNfbmlkW25dKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCAwLCBzcGVjLT5hZGNfbmlkW2ldKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAJCiAJaWYgKHNwZWMtPm51bV9pbnB1dHMgPiAxICYmICFzcGVjLT5taWNfZGV0ZWN0KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwppbmRleCBhNDVjMTE2Li5mZjYwOTA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKQEAgLTMxNSw3ICszMTUsOCBAQAogc3RhdGljIGludCBjbWk5ODgwX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBjbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnI7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwlpbnQgaSwgZXJyOwogCiAJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIGNtaTk4ODBfYmFzaWNfbWl4ZXIpOwogCWlmIChlcnIgPCAwKQpAQCAtMzQwLDYgKzM0MSwxNCBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQorCisJLyogYXNzaWduIENhcHR1cmUgU291cmNlIGVudW1zIHRvIE5JRCAqLworCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiQ2FwdHVyZSBTb3VyY2UiKTsKKwlmb3IgKGkgPSAwOyBrY3RsICYmIGkgPCBrY3RsLT5jb3VudDsgaSsrKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgaSwgc3BlYy0+YWRjX25pZHNbaV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggYzU3OGMyOC4uMTk0YTI4YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtNDIsMTAgKzQyLDEyIEBACiAKIC8qIENvbmV4YW50IDUwNTEgc3BlY2lmaWMgKi8KIAotI2RlZmluZSBDWFQ1MDUxX1NQRElGX09VVAkweDFDCisjZGVmaW5lIENYVDUwNTFfU1BESUZfT1VUCTB4MTIKICNkZWZpbmUgQ1hUNTA1MV9QT1JUQl9FVkVOVAkweDM4CiAjZGVmaW5lIENYVDUwNTFfUE9SVENfRVZFTlQJMHgzOQogCisjZGVmaW5lIEFVVE9fTUlDX1BPUlRCCQkoMSA8PCAxKQorI2RlZmluZSBBVVRPX01JQ19QT1JUQwkJKDEgPDwgMikKIAogc3RydWN0IGNvbmV4YW50X2phY2sgewogCkBAIC03NCw3ICs3Niw3IEBACiAJCQkJCSAqLwogCXVuc2lnbmVkIGludCBjdXJfZWFwZDsKIAl1bnNpZ25lZCBpbnQgaHBfcHJlc2VudDsKLQl1bnNpZ25lZCBpbnQgbm9fYXV0b19taWM7CisJdW5zaWduZWQgaW50IGF1dG9fbWljOwogCXVuc2lnbmVkIGludCBuZWVkX2RhY19maXg7CiAKIAkvKiBjYXB0dXJlICovCkBAIC0xMTEsOCArMTEzLDIzIEBACiAKIAl1bnNpZ25lZCBpbnQgZGVsbF9hdXRvbXV0ZTsKIAl1bnNpZ25lZCBpbnQgcG9ydF9kX21vZGU7Ci0JdW5zaWduZWQgY2hhciBleHRfbWljX2JpYXM7Ci0JdW5zaWduZWQgaW50IGRlbGxfdm9zdHJvOworCXVuc2lnbmVkIGludCBkZWxsX3Zvc3RybzoxOworCXVuc2lnbmVkIGludCBpZGVhcGFkOjE7CisKKwl1bnNpZ25lZCBpbnQgZXh0X21pY19wcmVzZW50OworCXVuc2lnbmVkIGludCByZWNvcmRpbmc7CisJdm9pZCAoKmNhcHR1cmVfcHJlcGFyZSkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCXZvaWQgKCpjYXB0dXJlX2NsZWFudXApKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKworCS8qIE9MUEMgWE8tMS41IHN1cHBvcnRzIERDIGlucHV0IG1vZGUgKGUuZy4gZm9yIHVzZSB3aXRoIGFuYWxvZyBzZW5zb3JzKQorCSAqIHRocm91Z2ggdGhlIG1pY3JvcGhvbmUgamFjay4KKwkgKiBXaGVuIHRoZSB1c2VyIGVuYWJsZXMgdGhpcyB0aHJvdWdoIGEgbWl4ZXIgc3dpdGNoLCBib3RoIGludGVybmFsIGFuZAorCSAqIGV4dGVybmFsIG1pY3JvcGhvbmVzIGFyZSBkaXNhYmxlZC4gR2FpbiBpcyBmaXhlZCBhdCAwZEIuIEluIHRoaXMgbW9kZSwKKwkgKiB3ZSBhbHNvIGFsbG93IHRoZSBiaWFzIHRvIGJlIGNvbmZpZ3VyZWQgdGhyb3VnaCBhIHNlcGFyYXRlIG1peGVyCisJICogY29udHJvbC4gKi8KKwl1bnNpZ25lZCBpbnQgZGNfZW5hYmxlOworCXVuc2lnbmVkIGludCBkY19pbnB1dF9iaWFzOyAvKiBvZmZzZXQgaW50byBjeHQ1MDY2X29scGNfZGNfYmlhcyAqLworCXVuc2lnbmVkIGludCBtaWNfYm9vc3Q7IC8qIG9mZnNldCBpbnRvIGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCAqLwogfTsKIAogc3RhdGljIGludCBjb25leGFudF9wbGF5YmFja19wY21fb3BlbihzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLApAQCAtMTg1LDYgKzIwMiw4IEBACiAJCQkJICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpZiAoc3BlYy0+Y2FwdHVyZV9wcmVwYXJlKQorCQlzcGVjLT5jYXB0dXJlX3ByZXBhcmUoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBzcGVjLT5hZGNfbmlkc1tzdWJzdHJlYW0tPm51bWJlcl0sCiAJCQkJICAgc3RyZWFtX3RhZywgMCwgZm9ybWF0KTsKIAlyZXR1cm4gMDsKQEAgLTE5Niw2ICsyMTUsOCBAQAogewogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc25kX2hkYV9jb2RlY19jbGVhbnVwX3N0cmVhbShjb2RlYywgc3BlYy0+YWRjX25pZHNbc3Vic3RyZWFtLT5udW1iZXJdKTsKKwlpZiAoc3BlYy0+Y2FwdHVyZV9jbGVhbnVwKQorCQlzcGVjLT5jYXB0dXJlX2NsZWFudXAoY29kZWMpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTg1LDYgKzE2MDYsMTEgQEAKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBwaW5jdGw7CisJLyogaGVhZHBob25lIHBpbiAqLworCXBpbmN0bCA9IChzcGVjLT5ocF9wcmVzZW50ICYmIHNwZWMtPmN1cl9lYXBkKSA/IFBJTl9IUCA6IDA7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNiwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJICAgIHBpbmN0bCk7CisJLyogc3BlYWtlciBwaW4gKi8KIAlwaW5jdGwgPSAoIXNwZWMtPmhwX3ByZXNlbnQgJiYgc3BlYy0+Y3VyX2VhcGQpID8gUElOX09VVCA6IDA7CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYSwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAogCQkJICAgIHBpbmN0bCk7CkBAIC0xNjA4LDcgKzE2MzQsNyBAQAogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAKLQlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJaWYgKCEoc3BlYy0+YXV0b19taWMgJiBBVVRPX01JQ19QT1JUQikpCiAJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNyk7CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNCwgMCwKQEAgLTE2MjMsNyArMTY0OSw3IEBACiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAJaGRhX25pZF90IG5ld19hZGM7CiAKLQlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJaWYgKCEoc3BlYy0+YXV0b19taWMgJiBBVVRPX01JQ19QT1JUQykpCiAJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxOCk7CiAJaWYgKHByZXNlbnQpCkBAIC0xNjY5LDEzICsxNjk1LDcgQEAKIAljb25leGFudF9yZXBvcnRfamFjayhjb2RlYywgbmlkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfbWl4ZXJzW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJEb2NraW5nIE1pYyBTd2l0Y2giLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfcGxheWJhY2tfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xNjg1LDcgKzE3MDUsMTYgQEAKIAkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKIAkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAogCX0sCisJe30KK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2NhcHR1cmVfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJEb2NraW5nIE1pYyBTd2l0Y2giLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAogCXt9CiB9OwogCkBAIC0xNjk0LDMyICsxNzIzLDI2IEBACiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAotCX0sCi0KIAl7fQogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyc1tdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAotCX0sCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJe30KK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2Y3MDBfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX3Rvc2hpYmFfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKIAl7fQogfTsKIApAQCAtMTc0OCw4ICsxNzcxLDYgQEAKIAkvKiBFQVBEICovCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovIAogCXsweDE2LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKLQl7MHgxNywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRCX0VWRU5UfSwKLQl7MHgxOCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRDX0VWRU5UfSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNzc1LDcgKzE3OTYsNiBAQAogCS8qIEVBUEQgKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KIAl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTgwNywxNyArMTgyNyw2MCBAQAogCS8qIEVBUEQgKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KIAl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCi0JezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQ19FVkVOVH0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9mNzAwX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBMaW5lIGluLCBNaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MH0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwfSwKKwkvKiBTUEsgICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBIUCwgQW1wICAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEQUMxICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKSB8IDB4NDR9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwkvKiBTUERJRiByb3V0ZTogUENNICovCisJezB4MWMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCS8qIEVBUEQgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHZvaWQgY3h0NTA1MV9pbml0X21pY19wb3J0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCSB1bnNpZ25lZCBpbnQgZXZlbnQpCit7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJICAgIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCSAgICBBQ19VU1JTUF9FTiB8IGV2ZW50KTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLCisJY29uZXhhbnRfYWRkX2phY2soY29kZWMsIG5pZCwgU05EX0pBQ0tfTUlDUk9QSE9ORSk7CisJY29uZXhhbnRfcmVwb3J0X2phY2soY29kZWMsIG5pZCk7CisjZW5kaWYKK30KKwogLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLwogc3RhdGljIGludCBjeHQ1MDUxX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwogCWNvbmV4YW50X2luaXQoY29kZWMpOwogCWNvbmV4YW50X2luaXRfamFja3MoY29kZWMpOworCisJaWYgKHNwZWMtPmF1dG9fbWljICYgQVVUT19NSUNfUE9SVEIpCisJCWN4dDUwNTFfaW5pdF9taWNfcG9ydChjb2RlYywgMHgxNywgQ1hUNTA1MV9QT1JUQl9FVkVOVCk7CisJaWYgKHNwZWMtPmF1dG9fbWljICYgQVVUT19NSUNfUE9SVEMpCisJCWN4dDUwNTFfaW5pdF9taWNfcG9ydChjb2RlYywgMHgxOCwgQ1hUNTA1MV9QT1JUQ19FVkVOVCk7CisKIAlpZiAoY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCkgewogCQljeHQ1MDUxX2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkJY3h0NTA1MV9wb3J0Yl9hdXRvbWljKGNvZGVjKTsKQEAgLTE4MzIsNiArMTg5NSw4IEBACiAJQ1hUNTA1MV9IUCwJLyogbm8gZG9ja2luZyAqLwogCUNYVDUwNTFfSFBfRFY2NzM2LAkvKiBIUCB3aXRob3V0IG1pYyBzd2l0Y2ggKi8KIAlDWFQ1MDUxX0xFTk9WT19YMjAwLAkvKiBMZW5vdm8gWDIwMCBsYXB0b3AgKi8KKwlDWFQ1MDUxX0Y3MDAsICAgICAgIC8qIEhQIENvbXBhcSBQcmVzYXJpbyBGNzAwICovCisJQ1hUNTA1MV9UT1NISUJBLAkvKiBUb3NoaWJhIE0zMDAgJiBjbyAqLwogCUNYVDUwNTFfTU9ERUxTCiB9OwogCkBAIC0xODQwLDExICsxOTA1LDE1IEBACiAJW0NYVDUwNTFfSFBdCQk9ICJocCIsCiAJW0NYVDUwNTFfSFBfRFY2NzM2XQk9ICJocC1kdjY3MzYiLAogCVtDWFQ1MDUxX0xFTk9WT19YMjAwXQk9ICJsZW5vdm8teDIwMCIsCisJW0NYVDUwNTFfRjcwMF0gICAgICAgICAgPSAiaHAtNzAwIiwKKwlbQ1hUNTA1MV9UT1NISUJBXQk9ICJ0b3NoaWJhIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDUxX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY2NzM2IiwgQ1hUNTA1MV9IUF9EVjY3MzYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDM2MGIsICJDb21wYXEgUHJlc2FyaW8gQ1E2MCIsIENYVDUwNTFfSFApLAorCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZWEsICJDb21wYXEgUHJlc2FyaW8gRjcwMCIsIENYVDUwNTFfRjcwMCksCisJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY1MCwgIlRvc2hpYmEgTTMweCIsIENYVDUwNTFfVE9TSElCQSksCiAJU05EX1BDSV9RVUlSSygweDE0ZjEsIDB4MDEwMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsCiAJCSAgICAgIENYVDUwNTFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTRmMSwgMHg1MDUxLCAiSFAgU3BhcnRhbiAxLjEiLCBDWFQ1MDUxX0hQKSwKQEAgLTE4NzIsOCArMTk0MSw5IEBACiAJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBDWFQ1MDUxX1NQRElGX09VVDsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSAxOyAvKiBub3QgMjsgdmlhIGF1dG8tbWljIHN3aXRjaCAqLwogCXNwZWMtPmFkY19uaWRzID0gY3h0NTA1MV9hZGNfbmlkczsKLQlzcGVjLT5udW1fbWl4ZXJzID0gMTsKLQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX21peGVyczsKKwlzcGVjLT5udW1fbWl4ZXJzID0gMjsKKwlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2NhcHR1cmVfbWl4ZXJzOworCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNTFfcGxheWJhY2tfbWl4ZXJzOwogCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9pbml0X3ZlcmJzOwogCXNwZWMtPnNwZGlmX3JvdXRlID0gMDsKQEAgLTE4ODcsNiArMTk1Nyw3IEBACiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIENYVDUwNTFfTU9ERUxTLAogCQkJCQkJICBjeHQ1MDUxX21vZGVscywKIAkJCQkJCSAgY3h0NTA1MV9jZmdfdGJsKTsKKwlzcGVjLT5hdXRvX21pYyA9IEFVVE9fTUlDX1BPUlRCIHwgQVVUT19NSUNfUE9SVEM7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNTFfSFA6CiAJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfaHBfbWl4ZXJzOwpAQCAtMTg5NCwxMSArMTk2NSwyMCBAQAogCWNhc2UgQ1hUNTA1MV9IUF9EVjY3MzY6CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9pbml0X3ZlcmJzOwogCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9taXhlcnM7Ci0JCXNwZWMtPm5vX2F1dG9fbWljID0gMTsKKwkJc3BlYy0+YXV0b19taWMgPSAwOwogCQlicmVhazsKIAljYXNlIENYVDUwNTFfTEVOT1ZPX1gyMDA6CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2xlbm92b194MjAwX2luaXRfdmVyYnM7CiAJCWJyZWFrOworCWNhc2UgQ1hUNTA1MV9GNzAwOgorCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9mNzAwX2luaXRfdmVyYnM7CisJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfZjcwMF9taXhlcnM7CisJCXNwZWMtPmF1dG9fbWljID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDWFQ1MDUxX1RPU0hJQkE6CisJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfdG9zaGliYV9taXhlcnM7CisJCXNwZWMtPmF1dG9fbWljID0gQVVUT19NSUNfUE9SVEI7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTk2Niw1MyArMjA0Niw5NyBAQAogCXJldHVybiAxOwogfQogCi0vKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDY2X29scGNfZGNfYmlhcyA9IHsKKwkubnVtX2l0ZW1zID0gMywKKwkuaXRlbXMgPSB7CisJCXsgIk9mZiIsIFBJTl9JTiB9LAorCQl7ICI1MCUiLCBQSU5fVlJFRjUwIH0sCisJCXsgIjgwJSIsIFBJTl9WUkVGODAgfSwKKwl9LAorfTsKKworc3RhdGljIGludCBjeHQ1MDY2X3NldF9vbHBjX2RjX2JpYXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzdHJ1Y3QgaGRhX3ZlcmIgZXh0X21pY19wcmVzZW50W10gPSB7Ci0JCS8qIGVuYWJsZSBleHRlcm5hbCBtaWMsIHBvcnQgQiAqLwotCQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBzcGVjLT5leHRfbWljX2JpYXN9LAorCS8qIEV2ZW4gdGhvdWdoIHBvcnQgRiBpcyB0aGUgREMgaW5wdXQsIHRoZSBiaWFzIGlzIGNvbnRyb2xsZWQgb24gcG9ydCBCLgorCSAqIHdlIGFsc28gbGVhdmUgdGhhdCBwb3J0IGFzIGFuIGFjdGl2ZSBpbnB1dCAoYnV0IHVuc2VsZWN0ZWQpIGluIERDIG1vZGUKKwkgKiBqdXN0IGluIGNhc2UgdGhhdCBpcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgYmlhcyBzZXR0aW5nIHRha2UgZWZmZWN0LiAqLworCXJldHVybiBzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDFhLCAwLAorCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCWN4dDUwNjZfb2xwY19kY19iaWFzLml0ZW1zW3NwZWMtPmRjX2lucHV0X2JpYXNdLmluZGV4KTsKK30KIAotCQkvKiBzd2l0Y2ggdG8gZXh0ZXJuYWwgbWljIGlucHV0ICovCi0JCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisvKiBPTFBDIGRlZmVycyBtaWMgd2lkZ2V0IGNvbnRyb2wgdW50aWwgd2hlbiBjYXB0dXJlIGlzIHN0YXJ0ZWQgYmVjYXVzZSB0aGUKKyAqIG1pY3JvcGhvbmUgTEVEIGNvbWVzIG9uIGFzIHNvb24gYXMgdGhlc2Ugc2V0dGluZ3MgYXJlIHB1dCBpbiBwbGFjZS4gaWYgd2UKKyAqIGRpZCB0aGlzIGJlZm9yZSByZWNvcmRpbmcsIGl0IHdvdWxkIGdpdmUgdGhlIGZhbHNlIGluZGljYXRpb24gdGhhdCByZWNvcmRpbmcKKyAqIGlzIGhhcHBlbmluZyB3aGVuIGl0IGlzIG5vdC4gKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfb2xwY19zZWxlY3RfbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaWYgKCFzcGVjLT5yZWNvcmRpbmcpCisJCXJldHVybjsKIAotCQkvKiBkaXNhYmxlIGludGVybmFsIG1pYywgcG9ydCBDICovCi0JCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAotCQl7fQotCX07Ci0Jc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX2Fic2VudFtdID0gewotCQkvKiBlbmFibGUgaW50ZXJuYWwgbWljLCBwb3J0IEMgKi8KLQkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJaWYgKHNwZWMtPmRjX2VuYWJsZSkgeworCQkvKiBpbiBEQyBtb2RlIHdlIGlnbm9yZSBwcmVzZW5jZSBkZXRlY3Rpb24gYW5kIGp1c3QgdXNlIHRoZSBqYWNrCisJCSAqIHRocm91Z2ggb3VyIHNwZWNpYWwgREMgcG9ydCAqLworCQljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgZW5hYmxlX2RjX21vZGVbXSA9IHsKKwkJCS8qIGRpc2JsZSBpbnRlcm5hbCBtaWMsIHBvcnQgQyAqLworCQkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKLQkJLyogc3dpdGNoIHRvIGludGVybmFsIG1pYyBpbnB1dCAqLwotCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDF9LAorCQkJLyogZW5hYmxlIERDIGNhcHR1cmUsIHBvcnQgRiAqLworCQkJezB4MWUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwkJCXt9LAorCQl9OwogCi0JCS8qIGRpc2FibGUgZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KLQkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCi0JCXt9Ci0JfTsKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZW5hYmxlX2RjX21vZGUpOworCQkvKiBwb3J0IEIgaW5wdXQgZGlzYWJsZWQgKGFuZCBiaWFzIHNldCkgdGhyb3VnaCB0aGUgZm9sbG93aW5nIGNhbGwgKi8KKwkJY3h0NTA2Nl9zZXRfb2xwY19kY19iaWFzKGNvZGVjKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGRpc2FibGUgREMgKHBvcnQgRikgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFlLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOworCisJLyogZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFhLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCXNwZWMtPmV4dF9taWNfcHJlc2VudCA/IENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVMgOiAwKTsKKworCS8qIGludGVybmFsIG1pYywgcG9ydCBDICovCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYiwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQlzcGVjLT5leHRfbWljX3ByZXNlbnQgPyAwIDogUElOX1ZSRUY4MCk7Cit9CisKKy8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9vbHBjX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFhKTsKLQlpZiAocHJlc2VudCkgeworCWlmIChzcGVjLT5kY19lbmFibGUpIC8qIGRvbid0IGRvIHByZXNlbmNlIGRldGVjdGlvbiBpbiBEQyBtb2RlICovCisJCXJldHVybjsKKworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWEsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKKwlpZiAocHJlc2VudCkKIAkJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGV4dGVybmFsIG1pY3JvcGhvbmUgZGV0ZWN0ZWRcbiIpOwotCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX3ByZXNlbnQpOwotCX0gZWxzZSB7CisJZWxzZQogCQlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogZXh0ZXJuYWwgbWljcm9waG9uZSBhYnNlbnRcbiIpOwotCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX2Fic2VudCk7Ci0JfQorCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNywgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCisJCXByZXNlbnQgPyAwIDogMSk7CisJc3BlYy0+ZXh0X21pY19wcmVzZW50ID0gISFwcmVzZW50OworCisJY3h0NTA2Nl9vbHBjX3NlbGVjdF9taWMoY29kZWMpOwogfQogCiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gZGlnaXRhbCBtaWMgYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfdm9zdHJvX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAogCXN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKIAkJLyogZW5hYmxlIGV4dGVybmFsIG1pYywgcG9ydCBCICovCi0JCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHNwZWMtPmV4dF9taWNfYmlhc30sCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAogCiAJCS8qIHN3aXRjaCB0byBleHRlcm5hbCBtaWMgaW5wdXQgKi8KIAkJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKQEAgLTIwNDQsNiArMjE2OCwzNCBAQAogCX0KIH0KIAorLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGRpZ2l0YWwgbWljIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKworCXN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKKwkJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKwkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJCXsweDIzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCQl7fQorCX07CisJc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX2Fic2VudFtdID0geworCQl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDJ9LAorCQl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwkJe30KKwl9OworCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWIpOworCWlmIChwcmVzZW50KSB7CisJCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBleHRlcm5hbCBtaWNyb3Bob25lIGRldGVjdGVkXG4iKTsKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZXh0X21pY19wcmVzZW50KTsKKwl9IGVsc2UgeworCQlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogZXh0ZXJuYWwgbWljcm9waG9uZSBhYnNlbnRcbiIpOworCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX2Fic2VudCk7CisJfQorfQorCiAvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwogc3RhdGljIHZvaWQgY3h0NTA2Nl9ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTIwNjMsMTUgKzIyMTUsMTggQEAKIH0KIAogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgY3h0NTA2Nl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKK3N0YXRpYyB2b2lkIGN4dDUwNjZfb2xwY191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKIHsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNuZF9wcmludGRkKCJDWFQ1MDY2OiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgogCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CisJCS8qIGlnbm9yZSBtaWMgZXZlbnRzIGluIERDIG1vZGU7IHdlJ3JlIGFsd2F5cyB1c2luZyB0aGUgamFjayAqLworCQlpZiAoIXNwZWMtPmRjX2VuYWJsZSkKKwkJCWN4dDUwNjZfb2xwY19hdXRvbWljKGNvZGVjKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjA5MCw2ICsyMjQ1LDIwIEBACiAJfQogfQogCisvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2lkZWFwYWRfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCit7CisJc25kX3ByaW50ZGQoIkNYVDUwNjZfaWRlYXBhZDogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKKwkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgorCQljeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCA9IHsKIAkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CkBAIC0yMTAxLDYgKzIyNzAsMjMgQEAKIAl9LAogfTsKIAorc3RhdGljIHZvaWQgY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IEFDX0FNUF9TRVRfT1VUUFVUIHwKKwkJCWN4dDUwNjZfYW5hbG9nX21pY19ib29zdC5pdGVtc1tzcGVjLT5taWNfYm9vc3RdLmluZGV4KTsKKwlpZiAoc3BlYy0+aWRlYXBhZCkgeworCQkvKiBhZGp1c3QgdGhlIGludGVybmFsIG1pYyBhcyB3ZWxsLi4uaXQgaXMgbm90IHRocm91Z2ggMHgxNyAqLworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDIzLCAwLAorCQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCUFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfCBBQ19BTVBfU0VUX0lOUFVUIHwKKwkJCQljeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3QuCisJCQkJCWl0ZW1zW3NwZWMtPm1pY19ib29zdF0uaW5kZXgpOworCX0KK30KKwogc3RhdGljIGludCBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewpAQCAtMjExMSwxNSArMjI5Nyw4IEBACiAJCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JaW50IHZhbDsKLQloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOwotCWludCBpbm91dCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4MTAwKSA/Ci0JCUFDX0FNUF9HRVRfSU5QVVQgOiBBQ19BTVBfR0VUX09VVFBVVDsKLQotCXZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQlBQ19WRVJCX0dFVF9BTVBfR0FJTl9NVVRFLCBpbm91dCk7Ci0KLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gdmFsICYgQUNfQU1QX0dBSU47CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gc3BlYy0+bWljX2Jvb3N0OwogCXJldHVybiAwOwogfQogCkBAIC0yMTI3LDI2ICsyMzA2LDEzMiBAQAogCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0OwogCXVuc2lnbmVkIGludCBpZHg7Ci0JaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKLQlpbnQgaW5vdXQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweDEwMCkgPwotCQlBQ19BTVBfU0VUX0lOUFVUIDogQUNfQU1QX1NFVF9PVVRQVVQ7Ci0KLQlpZiAoIWltdXgtPm51bV9pdGVtcykKLQkJcmV0dXJuIDA7CiAJaWR4ID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKIAlpZiAoaWR4ID49IGltdXgtPm51bV9pdGVtcykKIAkJaWR4ID0gaW11eC0+bnVtX2l0ZW1zIC0gMTsKIAotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKLQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IGlub3V0IHwKLQkJCWltdXgtPml0ZW1zW2lkeF0uaW5kZXgpOworCXNwZWMtPm1pY19ib29zdCA9IGlkeDsKKwlpZiAoIXNwZWMtPmRjX2VuYWJsZSkKKwkJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgY3h0NTA2Nl9lbmFibGVfZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJY29uc3Qgc3RydWN0IGhkYV92ZXJiIGVuYWJsZV9kY19tb2RlW10gPSB7CisJCS8qIGRpc2FibGUgZ2FpbiAqLworCQl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJCS8qIHN3aXRjaCB0byBEQyBpbnB1dCAqLworCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDN9LAorCQl7fQorCX07CisKKwkvKiBjb25maWd1cmUgYXMgaW5wdXQgc291cmNlICovCisJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZW5hYmxlX2RjX21vZGUpOworCWN4dDUwNjZfb2xwY19zZWxlY3RfbWljKGNvZGVjKTsgLyogYWxzbyBzZXRzIGNvbmZpZ3VyZWQgYmlhcyAqLworfQorCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2Rpc2FibGVfZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJLyogcmVjb25maWd1cmUgaW5wdXQgc291cmNlICovCisJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwkvKiBhdXRvbWljIGFsc28gc2VsZWN0cyB0aGUgcmlnaHQgbWljIGlmIHdlJ3JlIHJlY29yZGluZyAqLworCWN4dDUwNjZfb2xwY19hdXRvbWljKGNvZGVjKTsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfZGNfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gc3BlYy0+ZGNfZW5hYmxlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4dDUwNjZfb2xwY19kY19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGRjX2VuYWJsZSA9ICEhdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoZGNfZW5hYmxlID09IHNwZWMtPmRjX2VuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwlzcGVjLT5kY19lbmFibGUgPSBkY19lbmFibGU7CisJaWYgKGRjX2VuYWJsZSkKKwkJY3h0NTA2Nl9lbmFibGVfZGMoY29kZWMpOworCWVsc2UKKwkJY3h0NTA2Nl9kaXNhYmxlX2RjKGNvZGVjKTsKIAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGN4dDUwNjZfb2xwY19kY19iaWFzX2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlyZXR1cm4gc25kX2hkYV9pbnB1dF9tdXhfaW5mbygmY3h0NTA2Nl9vbHBjX2RjX2JpYXMsIHVpbmZvKTsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBzcGVjLT5kY19pbnB1dF9iaWFzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4dDUwNjZfb2xwY19kY19iaWFzX2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0OworCXVuc2lnbmVkIGludCBpZHg7CisKKwlpZHggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCWlmIChpZHggPj0gaW11eC0+bnVtX2l0ZW1zKQorCQlpZHggPSBpbXV4LT5udW1faXRlbXMgLSAxOworCisJc3BlYy0+ZGNfaW5wdXRfYmlhcyA9IGlkeDsKKwlpZiAoc3BlYy0+ZGNfZW5hYmxlKQorCQljeHQ1MDY2X3NldF9vbHBjX2RjX2JpYXMoY29kZWMpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBjeHQ1MDY2X29scGNfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJLyogbWFyayBhcyByZWNvcmRpbmcgYW5kIGNvbmZpZ3VyZSB0aGUgbWljcm9waG9uZSB3aWRnZXQgc28gdGhhdCB0aGUKKwkgKiByZWNvcmRpbmcgTEVEIGNvbWVzIG9uLiAqLworCXNwZWMtPnJlY29yZGluZyA9IDE7CisJY3h0NTA2Nl9vbHBjX3NlbGVjdF9taWMoY29kZWMpOworfQorCitzdGF0aWMgdm9pZCBjeHQ1MDY2X29scGNfY2FwdHVyZV9jbGVhbnVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3Qgc3RydWN0IGhkYV92ZXJiIGRpc2FibGVfbWljc1tdID0geworCQkvKiBkaXNhYmxlIGV4dGVybmFsIG1pYywgcG9ydCBCICovCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCisJCS8qIGRpc2JsZSBpbnRlcm5hbCBtaWMsIHBvcnQgQyAqLworCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKworCQkvKiBkaXNhYmxlIERDIGNhcHR1cmUsIHBvcnQgRiAqLworCQl7MHgxZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwkJe30sCisJfTsKKworCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIGRpc2FibGVfbWljcyk7CisJc3BlYy0+cmVjb3JkaW5nID0gMDsKK30KKwogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewpAQCAtMjE4Nyw2ICsyNDcyLDcgQEAKIAkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAogCQkJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKIAkJCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0ssCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldCwKIAkJLnB1dCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9wdXQsCkBAIC0yMTk4LDYgKzI0ODQsMjQgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfbWl4ZXJfb2xwY19kY1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkRDIE1vZGUgRW5hYmxlIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IGN4dDUwNjZfb2xwY19kY19nZXQsCisJCS5wdXQgPSBjeHQ1MDY2X29scGNfZGNfcHV0LAorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiREMgSW5wdXQgQmlhcyBFbnVtIiwKKwkJLmluZm8gPSBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2luZm8sCisJCS5nZXQgPSBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2dldCwKKwkJLnB1dCA9IGN4dDUwNjZfb2xwY19kY19iaWFzX2VudW1fcHV0LAorCX0sCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X21peGVyc1tdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0yMjEwLDExICsyNTE0LDEwIEBACiAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJFeHQgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCisJCS5uYW1lID0gIkFuYWxvZyBNaWMgQm9vc3QgQ2FwdHVyZSBFbnVtIiwKIAkJLmluZm8gPSBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvLAogCQkuZ2V0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTcsCiAJfSwKIAogCUhEQV9CSU5EX1ZPTCgiQ2FwdHVyZSBWb2x1bWUiLCAmY3h0NTA2Nl9iaW5kX2NhcHR1cmVfdm9sX290aGVycyksCkBAIC0yMjk2LDEwICsyNTk5LDEwIEBACiAJezB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgLyogREFDMSAqLwogCiAJLyogUG9ydCBCOiBleHRlcm5hbCBtaWNyb3Bob25lICovCi0JezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBU30sCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKIAkvKiBQb3J0IEM6IGludGVybmFsIG1pY3JvcGhvbmUgKi8KLQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKIAogCS8qIFBvcnQgRDogdW51c2VkICovCiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCkBAIC0yMzA4LDcgKzI2MTEsNyBAQAogCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAogCXsweDFkLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLwogCi0JLyogUG9ydCBGOiB1bnVzZWQgKi8KKwkvKiBQb3J0IEY6IGV4dGVybmFsIERDIGlucHV0IHRocm91Z2ggbWljcm9waG9uZSBwb3J0ICovCiAJezB4MWUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKIAkvKiBQb3J0IEc6IGludGVybmFsIHNwZWFrZXJzICovCkBAIC0yNDEyLDYgKzI3MTUsNTYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNjZfaW5pdF92ZXJic19pZGVhcGFkW10gPSB7CisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sIC8qIFBvcnQgQiAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LCAvKiBQb3J0IEMgKi8KKwl7MHgxZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBQb3J0IEYgKi8KKwl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBQb3J0IEUgKi8KKworCS8qIFNwZWFrZXJzICAqLworCXsweDFmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIEhQLCBBbXAgICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCisKKwl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJLyogTm9kZSAxNCBjb25uZWN0aW9uczogMHgxNyAweDE4IDB4MjMgMHgyNCAweDI3ICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDUwfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpIHwgMHg1MH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMn0sCS8qIGRlZmF1bHQgdG8gaW50ZXJuYWwgbWljICovCisKKwkvKiBBdWRpbyBpbnB1dCBzZWxlY3RvciAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4Mn0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAxfSwJLyogcm91dGUgZXh0IG1pYyAqLworCisJLyogU1BESUYgcm91dGU6IFBDTSAqLworCXsweDIwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisKKwl7MHgyMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKworCS8qIGludGVybmFsIG1pY3JvcGhvbmUgKi8KKwl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBlbmFibGUgaW50IG1pYyAqLworCisJLyogRUFQRCAqLworCXsweDFkLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLworCisJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9NSUNfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzX3BvcnRkX2xvW10gPSB7CiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCiAJeyB9IC8qIGVuZCAqLwpAQCAtMjQyOCw4ICsyNzgxLDI0IEBACiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwogCQlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCiAJCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKLQkJZWxzZQotCQkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKKwkJZWxzZSBpZiAoc3BlYy0+aWRlYXBhZCkKKwkJCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKKwl9CisJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBpbml0XG4iKTsKKwljb25leGFudF9pbml0KGNvZGVjKTsKKwljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKKwlpZiAoIXNwZWMtPmRjX2VuYWJsZSkgeworCQljeHQ1MDY2X3NldF9taWNfYm9vc3QoY29kZWMpOworCQljeHQ1MDY2X29scGNfYXV0b21pYyhjb2RlYyk7CisJfSBlbHNlIHsKKwkJY3h0NTA2Nl9lbmFibGVfZGMoY29kZWMpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI0MzksNiArMjgwOCw3IEBACiAJQ1hUNTA2Nl9ERUxMX0xBUFRPUCwJLyogRGVsbCBMYXB0b3AgKi8KIAlDWFQ1MDY2X09MUENfWE9fMV81LAkvKiBPTFBDIFhPIDEuNSAqLwogCUNYVDUwNjZfREVMTF9WT1NUTywJLyogRGVsbCBWb3N0cm8gMTAxNWkgKi8KKwlDWFQ1MDY2X0lERUFQQUQsCS8qIExlbm92byBJZGVhUGFkIFUxNTAgKi8KIAlDWFQ1MDY2X01PREVMUwogfTsKIApAQCAtMjQ0Niw3ICsyODE2LDggQEAKIAlbQ1hUNTA2Nl9MQVBUT1BdCQk9ICJsYXB0b3AiLAogCVtDWFQ1MDY2X0RFTExfTEFQVE9QXQk9ICJkZWxsLWxhcHRvcCIsCiAJW0NYVDUwNjZfT0xQQ19YT18xXzVdCT0gIm9scGMteG8tMV81IiwKLQlbQ1hUNTA2Nl9ERUxMX1ZPU1RPXSAgICA9ICJkZWxsLXZvc3RybyIKKwlbQ1hUNTA2Nl9ERUxMX1ZPU1RPXSAgICA9ICJkZWxsLXZvc3RybyIsCisJW0NYVDUwNjZfSURFQVBBRF0JPSAiaWRlYXBhZCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA2Nl9jZmdfdGJsW10gPSB7CkBAIC0yNDU2LDYgKzI4MjcsNyBAQAogCQkgICAgICBDWFQ1MDY2X0RFTExfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUyZCwgMHgwODMzLCAiT0xQQyBYTy0xLjUiLCBDWFQ1MDY2X09MUENfWE9fMV81KSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDAyLCAiRGVsbCBWb3N0cm8iLCBDWFQ1MDY2X0RFTExfVk9TVE8pLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNhMGQsICJpZGVhcGFkIiwgQ1hUNTA2Nl9JREVBUEFEKSwKIAl7fQogfTsKIApAQCAtMjQ3MCw3ICsyODQyLDcgQEAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gY29uZXhhbnRfcGF0Y2hfb3BzOwotCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKKwljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjb25leGFudF9pbml0OwogCiAJc3BlYy0+ZGVsbF9hdXRvbXV0ZSA9IDA7CiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKQEAgLTI0ODMsNyArMjg1NSw2IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNjZfY2FwdHVyZV9zb3VyY2U7CiAKIAlzcGVjLT5wb3J0X2RfbW9kZSA9IFBJTl9IUDsKLQlzcGVjLT5leHRfbWljX2JpYXMgPSBQSU5fVlJFRjgwOwogCiAJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAxOwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnM7CkBAIC0yNTEwLDIwICsyODgxLDI4IEBACiAJCXNwZWMtPmRlbGxfYXV0b211dGUgPSAxOwogCQlicmVhazsKIAljYXNlIENYVDUwNjZfT0xQQ19YT18xXzU6Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X29scGNfaW5pdDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfb2xwY191bnNvbF9ldmVudDsKIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic19vbHBjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CisJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9vbHBjX2RjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwogCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7Ci0JCXNwZWMtPmV4dF9taWNfYmlhcyA9IENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVM7CisJCXNwZWMtPm1pY19ib29zdCA9IDM7IC8qIGRlZmF1bHQgMzBkQiBnYWluICovCiAKIAkJLyogbm8gUy9QRElGIG91dCAqLwogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAKIAkJLyogaW5wdXQgc291cmNlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgKi8KIAkJc3BlYy0+aW5wdXRfbXV4ID0gTlVMTDsKKworCQkvKiBvdXIgY2FwdHVyZSBob29rcyB3aGljaCBhbGxvdyB1cyB0byB0dXJuIG9uIHRoZSBtaWNyb3Bob25lIExFRAorCQkgKiBhdCB0aGUgcmlnaHQgdGltZSAqLworCQlzcGVjLT5jYXB0dXJlX3ByZXBhcmUgPSBjeHQ1MDY2X29scGNfY2FwdHVyZV9wcmVwYXJlOworCQlzcGVjLT5jYXB0dXJlX2NsZWFudXAgPSBjeHQ1MDY2X29scGNfY2FwdHVyZV9jbGVhbnVwOwogCQlicmVhazsKIAljYXNlIENYVDUwNjZfREVMTF9WT1NUTzoKKwkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl92b3N0cm9fZXZlbnQ7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfdm9zdHJvOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CkBAIC0yNTMxLDYgKzI5MTAsNyBAQAogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfdm9zdHJvX21peGVyczsKIAkJc3BlYy0+cG9ydF9kX21vZGUgPSAwOwogCQlzcGVjLT5kZWxsX3Zvc3RybyA9IDE7CisJCXNwZWMtPm1pY19ib29zdCA9IDM7IC8qIGRlZmF1bHQgMzBkQiBnYWluICovCiAJCXNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEzKTsKIAogCQkvKiBubyBTL1BESUYgb3V0ICovCkBAIC0yNTM5LDYgKzI5MTksMjIgQEAKIAkJLyogaW5wdXQgc291cmNlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgKi8KIAkJc3BlYy0+aW5wdXRfbXV4ID0gTlVMTDsKIAkJYnJlYWs7CisJY2FzZSBDWFQ1MDY2X0lERUFQQUQ6CisJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfaWRlYXBhZF9ldmVudDsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3RlcjsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic19pZGVhcGFkOworCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7CisJCXNwZWMtPmlkZWFwYWQgPSAxOworCQlzcGVjLT5taWNfYm9vc3QgPSAyOwkvKiBkZWZhdWx0IDIwZEIgZ2FpbiAqLworCisJCS8qIG5vIFMvUERJRiBvdXQgKi8KKwkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOworCisJCS8qIGlucHV0IHNvdXJjZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkICovCisJCXNwZWMtPmlucHV0X211eCA9IE5VTEw7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBkYTM0MDk1Li5lOGNiZTIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTMxLDggKzEzMSwxMCBAQAogZW51bSB7CiAJQUxDMjY5X0JBU0lDLAogCUFMQzI2OV9RVUFOVEFfRkwxLAotCUFMQzI2OV9BU1VTX0FNSUMsCi0JQUxDMjY5X0FTVVNfRE1JQywKKwlBTEMyNjlfQU1JQywKKwlBTEMyNjlfRE1JQywKKwlBTEMyNjlWQl9BTUlDLAorCUFMQzI2OVZCX0RNSUMsCiAJQUxDMjY5X0ZVSklUU1UsCiAJQUxDMjY5X0xJRkVCT09LLAogCUFMQzI2OV9BVVRPLApAQCAtMjA3LDggKzIwOSwxMCBAQAogCUFMQzg4Ml9BU1VTX0E3SiwKIAlBTEM4ODJfQVNVU19BN00sCiAJQUxDODg1X01BQ1BSTywKKwlBTEM4ODVfTUJBMjEsCiAJQUxDODg1X01CUDMsCiAJQUxDODg1X01CNSwKKwlBTEM4ODVfTUFDTUlOSTMsCiAJQUxDODg1X0lNQUMyNCwKIAlBTEM4ODVfSU1BQzkxLAogCUFMQzg4M18zU1RfMmNoX0RJRywKQEAgLTMzOCw3ICszNDIsNyBAQAogCXZvaWQgKCppbml0X2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAl2b2lkICgqdW5zb2xfZXZlbnQpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0Jdm9pZCAoKnBvd2VyX2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpOworCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAjZW5kaWYKIAogCS8qIGZvciBwaW4gc2Vuc2luZyAqLwpAQCAtMzkxLDcgKzM5NSw3IEBACiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJc3RydWN0IGhkYV9hbXBfbGlzdCAqbG9vcGJhY2tzOwotCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKTsKKwl2b2lkICgqcG93ZXJfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogI2VuZGlmCiB9OwogCkBAIC02MzMsNiArNjM3LDcgQEAKIAogI2RlZmluZSBBTENfUElOX01PREUoeG5hbWUsIG5pZCwgZGlyKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJICAuaW5mbyA9IGFsY19waW5fbW9kZV9pbmZvLCBcCiAJICAuZ2V0ID0gYWxjX3Bpbl9tb2RlX2dldCwgXAogCSAgLnB1dCA9IGFsY19waW5fbW9kZV9wdXQsIFwKQEAgLTY4NCw2ICs2ODksNyBAQAogfQogI2RlZmluZSBBTENfR1BJT19EQVRBX1NXSVRDSCh4bmFtZSwgbmlkLCBtYXNrKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJICAuaW5mbyA9IGFsY19ncGlvX2RhdGFfaW5mbywgXAogCSAgLmdldCA9IGFsY19ncGlvX2RhdGFfZ2V0LCBcCiAJICAucHV0ID0gYWxjX2dwaW9fZGF0YV9wdXQsIFwKQEAgLTczOCw2ICs3NDQsNyBAQAogfQogI2RlZmluZSBBTENfU1BESUZfQ1RSTF9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCisJICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCSAgLmluZm8gPSBhbGNfc3BkaWZfY3RybF9pbmZvLCBcCiAJICAuZ2V0ID0gYWxjX3NwZGlmX2N0cmxfZ2V0LCBcCiAJICAucHV0ID0gYWxjX3NwZGlmX2N0cmxfcHV0LCBcCkBAIC03OTEsNiArNzk4LDcgQEAKIAogI2RlZmluZSBBTENfRUFQRF9DVFJMX1NXSVRDSCh4bmFtZSwgbmlkLCBtYXNrKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJICAuaW5mbyA9IGFsY19lYXBkX2N0cmxfaW5mbywgXAogCSAgLmdldCA9IGFsY19lYXBkX2N0cmxfZ2V0LCBcCiAJICAucHV0ID0gYWxjX2VhcGRfY3RybF9wdXQsIFwKQEAgLTgzNywyNyArODQ1LDYgQEAKIAlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gdmVyYjsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKgotICogaG9vayBmb3IgcHJvYwotICovCi1zdGF0aWMgdm9pZCBwcmludF9yZWFsdGVrX2NvZWYoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAotCQkJICAgICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQotewotCWludCBjb2VmZjsKLQotCWlmIChuaWQgIT0gMHgyMCkKLQkJcmV0dXJuOwotCWNvZWZmID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX1BST0NfQ09FRiwgMCk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiICBQcm9jZXNzaW5nIENvZWZmaWNpZW50OiAweCUwMnhcbiIsIGNvZWZmKTsKLQljb2VmZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCSAgIEFDX1ZFUkJfR0VUX0NPRUZfSU5ERVgsIDApOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQ29lZmZpY2llbnQgSW5kZXg6IDB4JTAyeFxuIiwgY29lZmYpOwotfQotI2Vsc2UKLSNkZWZpbmUgcHJpbnRfcmVhbHRla19jb2VmCU5VTEwKLSNlbmRpZgotCiAvKgogICogc2V0IHVwIGZyb20gdGhlIHByZXNldCB0YWJsZQogICovCkBAIC0xMTYyLDYgKzExNDksNyBAQAogCQljYXNlIDB4MTBlYzA4ODg6CiAJCQlhbGM4ODhfY29lZl9pbml0KGNvZGVjKTsKIAkJCWJyZWFrOworI2lmIDAgLyogWFhYOiBUaGlzIG1heSBjYXVzZSB0aGUgc2lsZW50IG91dHB1dCBvbiBzcGVha2VyIG9uIHNvbWUgbWFjaGluZXMgKi8KIAkJY2FzZSAweDEwZWMwMjY3OgogCQljYXNlIDB4MTBlYzAyNjg6CiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLApAQCAtMTE3NCw2ICsxMTYyLDcgQEAKIAkJCQkJICAgIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwKIAkJCQkJICAgIHRtcCB8IDB4MzAwMCk7CiAJCQlicmVhazsKKyNlbmRpZiAvKiBYWFggKi8KIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMjY1LDcgKzEyNTQsNyBAQAogICovCiBzdGF0aWMgaW50IGFsY19zdWJzeXN0ZW1faWQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkgICAgaGRhX25pZF90IHBvcnRhLCBoZGFfbmlkX3QgcG9ydGUsCi0JCQkgICAgaGRhX25pZF90IHBvcnRkKQorCQkJICAgIGhkYV9uaWRfdCBwb3J0ZCwgaGRhX25pZF90IHBvcnRpKQogewogCXVuc2lnbmVkIGludCBhc3MsIHRtcCwgaTsKIAl1bnNpZ25lZCBuaWQ7CkBAIC0xMjkxLDcgKzEyODAsNyBAQAogCXNuZF9wcmludGQoInJlYWx0ZWs6IE5vIHZhbGlkIFNTSUQsICIKIAkJICAgImNoZWNraW5nIHBpbmNmZyAweCUwOHggZm9yIE5JRCAweCV4XG4iLAogCQkgICBhc3MsIG5pZCk7Ci0JaWYgKCEoYXNzICYgMSkgJiYgIShhc3MgJiAweDEwMDAwMCkpCisJaWYgKCEoYXNzICYgMSkpCiAJCXJldHVybiAwOwogCWlmICgoYXNzID4+IDMwKSAhPSAxKQkvKiBubyBwaHlzaWNhbCBjb25uZWN0aW9uICovCiAJCXJldHVybiAwOwpAQCAtMTM1MSw2ICsxMzQwLDggQEAKIAkJCW5pZCA9IHBvcnRlOwogCQllbHNlIGlmICh0bXAgPT0gMikKIAkJCW5pZCA9IHBvcnRkOworCQllbHNlIGlmICh0bXAgPT0gMykKKwkJCW5pZCA9IHBvcnRpOwogCQllbHNlCiAJCQlyZXR1cm4gMTsKIAkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzOyBpKyspCkBAIC0xMzY1LDkgKzEzNTYsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgYWxjX3NzaWRfY2hlY2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkgICBoZGFfbmlkX3QgcG9ydGEsIGhkYV9uaWRfdCBwb3J0ZSwgaGRhX25pZF90IHBvcnRkKQorCQkJICAgaGRhX25pZF90IHBvcnRhLCBoZGFfbmlkX3QgcG9ydGUsCisJCQkgICBoZGFfbmlkX3QgcG9ydGQsIGhkYV9uaWRfdCBwb3J0aSkKIHsKLQlpZiAoIWFsY19zdWJzeXN0ZW1faWQoY29kZWMsIHBvcnRhLCBwb3J0ZSwgcG9ydGQpKSB7CisJaWYgKCFhbGNfc3Vic3lzdGVtX2lkKGNvZGVjLCBwb3J0YSwgcG9ydGUsIHBvcnRkLCBwb3J0aSkpIHsKIAkJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJCXNuZF9wcmludGQoInJlYWx0ZWs6ICIKIAkJCSAgICJFbmFibGUgZGVmYXVsdCBzZXR1cCBmb3IgYXV0byBtb2RlIGFzIGZhbGxiYWNrXG4iKTsKQEAgLTE4NDAsMTQgKzE4MzIsNiBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxYjsKIH0KIAotI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLXN0YXRpYyB2b2lkIGFsYzg4OV9wb3dlcl9lYXBkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCi17Ci0Jc2V0X2VhcGQoY29kZWMsIDB4MTQsIHBvd2VyKTsKLQlzZXRfZWFwZChjb2RlYywgMHgxNSwgcG93ZXIpOwotfQotI2VuZGlmCi0KIC8qCiAgKiBBTEM4ODAgMy1zdGFjayBtb2RlbAogICoKQEAgLTI0NTAsNiArMjQzNCwxNSBAQAogICogYnVpbGQgY29udHJvbCBlbGVtZW50cwogICovCiAKKyNkZWZpbmUgTklEX01BUFBJTkcJCSgtMSkKKworI2RlZmluZSBTVUJERVZfU1BFQUtFUl8JCSgwIDw8IDYpCisjZGVmaW5lIFNVQkRFVl9IUF8JCSgxIDw8IDYpCisjZGVmaW5lIFNVQkRFVl9MSU5FXwkJKDIgPDwgNikKKyNkZWZpbmUgU1VCREVWX1NQRUFLRVIoeCkJKFNVQkRFVl9TUEVBS0VSXyB8ICgoeCkgJiAweDNmKSkKKyNkZWZpbmUgU1VCREVWX0hQKHgpCQkoU1VCREVWX0hQXyB8ICgoeCkgJiAweDNmKSkKKyNkZWZpbmUgU1VCREVWX0xJTkUoeCkJCShTVUJERVZfTElORV8gfCAoKHgpICYgMHgzZikpCisKIHN0YXRpYyB2b2lkIGFsY19mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAKQEAgLTI0NjQsOCArMjQ1NywxMSBAQAogc3RhdGljIGludCBhbGNfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGVycjsKLQlpbnQgaTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCWludCBpLCBqLCBlcnI7CisJdW5zaWduZWQgaW50IHU7CisJaGRhX25pZF90IG5pZDsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKIAkJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIHNwZWMtPm1peGVyc1tpXSk7CkBAIC0yNTA2LDggKzI1MDIsNyBAQAogCQkJaWYgKCFrY3RsKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOwotCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLAotCQkJCQlnZXRfYW1wX25pZF8oc3BlYy0+YmVlcF9hbXApLCBrY3RsKTsKKwkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgMCwga2N0bCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0yNTM0LDYgKzI1MjksNzUgQEAKIAl9CiAKIAlhbGNfZnJlZV9rY3Rscyhjb2RlYyk7IC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KKworCS8qIGFzc2lnbiBDYXB0dXJlIFNvdXJjZSBlbnVtcyB0byBOSUQgKi8KKwlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIkNhcHR1cmUgU291cmNlIik7CisJaWYgKCFrY3RsKQorCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIklucHV0IFNvdXJjZSIpOworCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKKwkJaGRhX25pZF90ICpuaWRzID0gc3BlYy0+Y2Fwc3JjX25pZHM7CisJCWlmICghbmlkcykKKwkJCW5pZHMgPSBzcGVjLT5hZGNfbmlkczsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCBpLCBuaWRzW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoc3BlYy0+Y2FwX21peGVyKSB7CisJCWNvbnN0IGNoYXIgKmtuYW1lID0ga2N0bCA/IGtjdGwtPmlkLm5hbWUgOiBOVUxMOworCQlmb3IgKGtuZXcgPSBzcGVjLT5jYXBfbWl4ZXI7IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJaWYgKGtuYW1lICYmIHN0cmNtcChrbmV3LT5uYW1lLCBrbmFtZSkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCBrbmV3LT5uYW1lKTsKKwkJCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKKwkJCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIGksCisJCQkJCQkgICAgICBzcGVjLT5hZGNfbmlkc1tpXSk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKwl9CisKKwkvKiBvdGhlciBuaWQtPmNvbnRyb2wgbWFwcGluZyAqLworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKKwkJZm9yIChrbmV3ID0gc3BlYy0+bWl4ZXJzW2ldOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKKwkJCWlmIChrbmV3LT5pZmFjZSAhPSBOSURfTUFQUElORykKKwkJCQljb250aW51ZTsKKwkJCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCBrbmV3LT5uYW1lKTsKKwkJCWlmIChrY3RsID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQl1ID0ga25ldy0+c3ViZGV2aWNlOworCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKywgdSA+Pj0gOCkgeworCQkJCW5pZCA9IHUgJiAweDNmOworCQkJCWlmIChuaWQgPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJc3dpdGNoICh1ICYgMHhjMCkgeworCQkJCWNhc2UgU1VCREVWX1NQRUFLRVJfOgorCQkJCQluaWQgPSBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1tuaWRdOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNVQkRFVl9MSU5FXzoKKwkJCQkJbmlkID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW25pZF07CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1VCREVWX0hQXzoKKwkJCQkJbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zW25pZF07CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIDAsIG5pZCk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQl1ID0ga25ldy0+cHJpdmF0ZV92YWx1ZTsKKwkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyssIHUgPj49IDgpIHsKKwkJCQluaWQgPSB1ICYgMHhmZjsKKwkJCQlpZiAobmlkID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgMCwgbmlkKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzYxNiw2ICszNjgwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGNfc2h1dHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXNuZF9oZGFfc2h1dHVwX3BpbnMoY29kZWMpOworfQorCiBzdGF0aWMgdm9pZCBhbGNfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTM2MzYsMTcgKzM3MDUsNDQgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybjsKIAorCWFsY19zaHV0dXAoY29kZWMpOwogCWFsY19mcmVlX2tjdGxzKGNvZGVjKTsKIAlrZnJlZShzcGVjKTsKIAlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgdm9pZCBhbGNfcG93ZXJfZWFwZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwkvKiBXZSBjdXJyZW50bHkgb25seSBoYW5kbGUgZnJvbnQsIEhQICovCisJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJY2FzZSAweDEwZWMwMjYwOgorCQlzZXRfZWFwZChjb2RlYywgMHgwZiwgMCk7CisJCXNldF9lYXBkKGNvZGVjLCAweDEwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjYyOgorCWNhc2UgMHgxMGVjMDI2NzoKKwljYXNlIDB4MTBlYzAyNjg6CisJY2FzZSAweDEwZWMwMjY5OgorCWNhc2UgMHgxMGVjMDI3MDoKKwljYXNlIDB4MTBlYzAyNzI6CisJY2FzZSAweDEwZWMwNjYwOgorCWNhc2UgMHgxMGVjMDY2MjoKKwljYXNlIDB4MTBlYzA2NjM6CisJY2FzZSAweDEwZWMwODYyOgorCWNhc2UgMHgxMGVjMDg4OToKKwkJc2V0X2VhcGQoY29kZWMsIDB4MTQsIDApOworCQlzZXRfZWFwZChjb2RlYywgMHgxNSwgMCk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBhbGNfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWFsY19zaHV0dXAoY29kZWMpOwogCWlmIChzcGVjICYmIHNwZWMtPnBvd2VyX2hvb2spCi0JCXNwZWMtPnBvd2VyX2hvb2soY29kZWMsIDApOworCQlzcGVjLT5wb3dlcl9ob29rKGNvZGVjKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMzY1NCwxNiArMzc1MCw5IEBACiAjaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKIHN0YXRpYyBpbnQgYWxjX3Jlc3VtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0jZW5kaWYKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOwotI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLQlpZiAoc3BlYyAmJiBzcGVjLT5wb3dlcl9ob29rKQotCQlzcGVjLT5wb3dlcl9ob29rKGNvZGVjLCAxKTsKLSNlbmRpZgogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC0zNjgzLDYgKzM3NzIsNyBAQAogCS5zdXNwZW5kID0gYWxjX3N1c3BlbmQsCiAJLmNoZWNrX3Bvd2VyX3N0YXR1cyA9IGFsY19jaGVja19wb3dlcl9zdGF0dXMsCiAjZW5kaWYKKwkucmVib290X25vdGlmeSA9IGFsY19zaHV0dXAsCiB9OwogCiAKQEAgLTM4MzksNiArMzkyOSw3IEBACiAjZGVmaW5lIFBJTl9DVExfVEVTVCh4bmFtZSxuaWQpIHsJCQlcCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAlcCiAJCQkubmFtZSA9IHhuYW1lLAkJICAgICAgIFwKKwkJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJCQkuaW5mbyA9IGFsY190ZXN0X3Bpbl9jdGxfaW5mbywgXAogCQkJLmdldCA9IGFsY190ZXN0X3Bpbl9jdGxfZ2V0LCAgIFwKIAkJCS5wdXQgPSBhbGNfdGVzdF9waW5fY3RsX3B1dCwgICBcCkBAIC0zODQ4LDYgKzM5MzksNyBAQAogI2RlZmluZSBQSU5fU1JDX1RFU1QoeG5hbWUsbmlkKSB7CQkJXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwJXAogCQkJLm5hbWUgPSB4bmFtZSwJCSAgICAgICBcCisJCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCQkJLmluZm8gPSBhbGNfdGVzdF9waW5fc3JjX2luZm8sIFwKIAkJCS5nZXQgPSBhbGNfdGVzdF9waW5fc3JjX2dldCwgICBcCiAJCQkucHV0ID0gYWxjX3Rlc3RfcGluX3NyY19wdXQsICAgXApAQCAtNDM4Nyw3ICs0NDc5LDcgQEAKIAlpZiAoIWtuZXctPm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChnZXRfYW1wX25pZF8odmFsKSkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IGdldF9hbXBfbmlkXyh2YWwpOworCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOwogCWtuZXctPnByaXZhdGVfdmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CkBAIC00NzcwLDcgKzQ4NjIsNyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQ5NzQsNyArNTA2Niw2IEBACiAJaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQogCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjODgwX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MTgyLDYgKzUyNzMsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MTEsCiAJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKIAkJLmdldCA9IGFsYzI2MF9ocF9tYXN0ZXJfc3dfZ2V0LAogCQkucHV0ID0gYWxjMjYwX2hwX21hc3Rlcl9zd19wdXQsCkBAIC01MjIwLDYgKzUzMTIsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MTEsCiAJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKIAkJLmdldCA9IGFsYzI2MF9ocF9tYXN0ZXJfc3dfZ2V0LAogCQkucHV0ID0gYWxjMjYwX2hwX21hc3Rlcl9zd19wdXQsCkBAIC02MzAzLDcgKzYzOTYsNyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDEwLCAweDE1LCAweDBmKTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxMCwgMHgxNSwgMHgwZiwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTY1ODIsNyArNjY3NSw2IEBACiAJaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQogCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjMjYwX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NjY0LDYgKzY3NTYsMTQgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IG1hY21pbmkzX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAyLAorCS5pdGVtcyA9IHsKKwkJeyAiTGluZSIsIDB4MiB9LAorCQl7ICJDRCIsIDB4NCB9LAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzXzNzdGFja182Y2hfaW50ZWwgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewpAQCAtNjg1Miw2ICs2OTUyLDEzIEBACiAJeyA4LCBhbGM4ODJfc2l4c3RhY2tfY2g4X2luaXQgfSwKIH07CiAKKworLyogTWFjYm9vayBBaXIgMiwxICovCisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODVfbWJhMjFfY2hfbW9kZXNbMV0gPSB7CisgICAgICB7IDIsIE5VTEwgfSwKK307CisKIC8qCiAgKiBtYWNib29rIHBybyBBTEM4ODUgY2FuIHN3aXRjaCBMaW5lSW4gdG8gTGluZU91dCB3aXRob3V0IGxvc2luZyBNaWMKICAqLwpAQCAtNjkxMiw2ICs3MDE5LDcgQEAKIAl7IDYsIGFsYzg4NV9tYjVfY2g2X2luaXQgfSwKIH07CiAKKyNkZWZpbmUgYWxjODg1X21hY21pbmkzXzZjaF9tb2RlcwlhbGM4ODVfbWI1XzZjaF9tb2RlcwogCiAvKgogICogMmNoIG1vZGUKQEAgLTcxMjMsNiArNzIzMSwxNSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qIE1hY2Jvb2sgQWlyIDIsMSBzYW1lIGNvbnRyb2wgZm9yIEhQIGFuZCBpbnRlcm5hbCBTcGVha2VyICovCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODVfbWJhMjFfbWl4ZXJbXSA9IHsKKyAgICAgIEhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwMCwgSERBX09VVFBVVCksCisgICAgICBIREFfQklORF9NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9PVVRQVVQpLAorICAgICB7IH0KK307CisKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4NV9tYnAzX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFICAgKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9JTlBVVCksCkBAIC03MTU2LDYgKzcyNzMsMjEgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X21hY21pbmkzX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSAgICgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFICAgKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxGRSBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAweDAwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFICAgKCJMRkUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSAgICgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGYsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA3LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFICAoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEJvb3N0IiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X2ltYWM5MV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUtT3V0IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUgICAoIkxpbmUtT3V0IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9JTlBVVCksCkBAIC03MjQ3LDI5ICs3Mzc5LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX2Jhc2VfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250IG1peGVyOiB1bm11dGUgaW5wdXQvb3V0cHV0IGFtcCBsZWZ0IGFuZCByaWdodCAodm9sdW1lID0gMCkgKi8KLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCiAJLyogUmVhciBtaXhlciAqLwotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKIAkvKiBDTEZFIG1peGVyICovCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAogCS8qIFNpZGUgbWl4ZXIgKi8KLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCiAKLQkvKiBtdXRlIGFuYWxvZyBpbnB1dCBsb29wYmFja3MgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0KIAkvKiBGcm9udCBQaW46IG91dHB1dCAwICgweDBjKSAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCkBAIC03MzA2LDE0ICs3NDI3LDggQEAKIAkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KIAkvKiBJbnB1dCBtaXhlcjIgKi8KIAl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCiAJLyogSW5wdXQgbWl4ZXIzICovCiAJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCS8qIEFEQzI6IG11dGUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCiAJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgwOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LApAQCAtNzM1NywyNiArNzQ3MiwxNyBAQAogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9pbml0X3ZlcmJzW10gPSB7CiAJLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLwotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCS8qIFJlYXIgbWl4ZXIgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAkvKiBDTEZFIG1peGVyICovCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJLyogU2lkZSBtaXhlciAqLwotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQotCS8qIG11dGUgYW5hbG9nIGlucHV0IGxvb3BiYWNrcyAqLwotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAKIAkvKiBGcm9udCBIUCBQaW46IG91dHB1dCAwICgweDBjKSAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCkBAIC03NDEwLDE3ICs3NTE2LDExIEBACiAKIAkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgLCAweDFhLCAweDFiICovCiAJLyogSW5wdXQgbWl4ZXIxICovCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogSW5wdXQgbWl4ZXIyICovCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKIAkvKiBJbnB1dCBtaXhlcjMgKi8KLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBBREMyOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLwogCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJLyogQURDMzogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KQEAgLTc1NjIsNiArNzY2Miw3NiBAQAogCXsgfQogfTsKIAorLyogTWFjbWluaSAzLDEgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21hY21pbmkzX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBEQUNzICovCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBGcm9udCBtaXhlciAqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwkvKiBTdXJyb3VuZCBtaXhlciAqLworCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwkvKiBMRkUgbWl4ZXIgKi8KKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogSFAgbWl4ZXIgKi8KKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogRnJvbnQgUGluICgweDBjKSAqLworCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfCAweDAxfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogTEZFIFBpbiAoMHgwZSkgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIHwgMHgwMX0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAorCS8qIEhQIFBpbiAoMHgwZikgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwM30sCisJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCS8qIExpbmUgSW4gcGluICovCisJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKworCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7IH0KK307CisKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfbWJhMjFfaW5pdF92ZXJic1tdID0geworCS8qSW50ZXJuYWwgYW5kIEhQIFNwZWFrZXIgTWl4ZXIqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJLypJbnRlcm5hbCBTcGVha2VyIFBpbiAoMHgwYykqLworCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIChQSU5fT1VUIHwgQUNfUElOQ1RMX1ZSRUZfNTApIH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIEhQIFBpbjogb3V0cHV0IDAgKDB4MGUpICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHhjNH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIChBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTil9LAorCS8qIExpbmUgaW4gKGlzIGhwIHdoZW4gamFjayBjb25uZWN0ZWQpKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBBQ19QSU5DVExfVlJFRl81MH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisKKwl7IH0KKyB9OworCisKIC8qIE1hY2Jvb2sgUHJvIHJldjMgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21icDNfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250IG1peGVyOiB1bm11dGUgaW5wdXQvb3V0cHV0IGFtcCBsZWZ0IGFuZCByaWdodCAodm9sdW1lID0gMCkgKi8KQEAgLTc3MjQsNiArNzg5NCwyMCBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxYTsKIH0KIAorI2RlZmluZSBhbGM4ODVfbWI1X3NldHVwCWFsYzg4NV9pbWFjMjRfc2V0dXAKKyNkZWZpbmUgYWxjODg1X21hY21pbmkzX3NldHVwCWFsYzg4NV9pbWFjMjRfc2V0dXAKKworLyogTWFjYm9vayBBaXIgMiwxICovCitzdGF0aWMgdm9pZCBhbGM4ODVfbWJhMjFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisgICAgICAgc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKyAgICAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE0OworICAgICAgIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxODsKK30KKworCisKIHN0YXRpYyB2b2lkIGFsYzg4NV9tYnAzX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNzczMiw0NiArNzkxNiwxMyBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKIH0KIAotc3RhdGljIHZvaWQgYWxjODg1X21iNV9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4NV9pbWFjOTFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE0LCAwLAotCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE4LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWEsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwotCi19Ci0KLXN0YXRpYyB2b2lkIGFsYzg4NV9tYjVfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JLyogSGVhZHBob25lIGluc2VydGlvbiBvciByZW1vdmFsLiAqLwotCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfSFBfRVZFTlQpCi0JCWFsYzg4NV9tYjVfYXV0b211dGUoY29kZWMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGM4ODVfaW1hYzkxX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKLQotCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTQsIDAsCi0JCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxYSwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMCk7Ci0KLX0KLQotc3RhdGljIHZvaWQgYWxjODg1X2ltYWM5MV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQkvKiBIZWFkcGhvbmUgaW5zZXJ0aW9uIG9yIHJlbW92YWwuICovCi0JaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkKLQkJYWxjODg1X2ltYWM5MV9hdXRvbXV0ZShjb2RlYyk7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTU7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDFhOwogfQogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml90YXJnYV92ZXJic1tdID0gewpAQCAtNzkwNiwxOCArODA1Nyw2IEBACiAJezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKLQkvKiBNdXRlIGlucHV0IGFtcHMgKENELCBMaW5lIEluLCBNaWMgMSAmIE1pYyAyKSBvZiB0aGUgYW5hbG9nLWxvb3BiYWNrCi0JICogbWl4ZXIgd2lkZ2V0Ci0JICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IKLQkgKiBmcm9udCBwYW5lbCBtaWMgKG1pYyAyKQotCSAqLwotCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0KIAkvKgogCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZikKIAkgKi8KQEAgLTc5NDIsMTYgKzgwODEsOSBAQAogCS8qIEZJWE1FOiB1c2UgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwogCS8qIE1peGVyIGVsZW1lbnRzOiAweDE4LCAxOSwgMWEsIDFiLCAxYywgMWQsIDE0LCAxNSwgMTYsIDE3LCAwYiAqLwogCS8qIElucHV0IG1peGVyMiAqLwotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDAgPDwgOCkpfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDAzIDw8IDgpKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwMiA8PCA4KSl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDQgPDwgOCkpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogSW5wdXQgbWl4ZXIzICovCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwMCA8PCA4KSl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDMgPDwgOCkpfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDAyIDw8IDgpKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwNCA8PCA4KSl9LAotCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsgfQogfTsKIApAQCAtODkzOCw2ICs5MDcwLDggQEAKIAlbQUxDODgyX0FTVVNfQTdNXQk9ICJhc3VzLWE3bSIsCiAJW0FMQzg4NV9NQUNQUk9dCQk9ICJtYWNwcm8iLAogCVtBTEM4ODVfTUI1XQkJPSAibWI1IiwKKwlbQUxDODg1X01BQ01JTkkzXQk9ICJtYWNtaW5pMyIsCisJW0FMQzg4NV9NQkEyMV0JCT0gIm1iYTIxIiwKIAlbQUxDODg1X01CUDNdCQk9ICJtYnAzIiwKIAlbQUxDODg1X0lNQUMyNF0JCT0gImltYWMyNCIsCiAJW0FMQzg4NV9JTUFDOTFdCQk9ICJpbWFjOTEiLApAQCAtOTEyMSw2ICs5MjU1LDcgQEAKIAkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MDAwLCAiTWFjYm9va1BybyA1LDEiLCBBTEM4ODVfTUI1KSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0NjAwLCAiTWFjYm9va1BybyA1LDIiLCBBTEM4ODVfTUI1KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MTAwLCAiTWFjbWluaSAzLDEiLCBBTEM4ODVfTUFDTUlOSTMpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTkxNzIsNiArOTMwNywxOCBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCiAJfSwKKwkgICBbQUxDODg1X01CQTIxXSA9IHsKKwkJCS5taXhlcnMgPSB7IGFsYzg4NV9tYmEyMV9taXhlciB9LAorCQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYmEyMV9pbml0X3ZlcmJzLCBhbGM4ODBfZ3BpbzFfaW5pdF92ZXJicyB9LAorCQkJLm51bV9kYWNzID0gMiwKKwkJCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKKwkJCS5jaGFubmVsX21vZGUgPSBhbGM4ODVfbWJhMjFfY2hfbW9kZXMsCisJCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODg1X21iYTIxX2NoX21vZGVzKSwKKwkJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAorCQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJCS5zZXR1cCA9IGFsYzg4NV9tYmEyMV9zZXR1cCwKKwkJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorICAgICAgIH0sCiAJW0FMQzg4NV9NQlAzXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg1X21icDNfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYnAzX2luaXRfdmVyYnMsCkBAIC05MTk5LDggKzkzNDYsMjQgQEAKIAkJLmlucHV0X211eCA9ICZtYjVfY2FwdHVyZV9zb3VyY2UsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAogCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCi0JCS51bnNvbF9ldmVudCA9IGFsYzg4NV9tYjVfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODVfbWI1X2F1dG9tdXRlLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODVfbWI1X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwl9LAorCVtBTEM4ODVfTUFDTUlOSTNdID0geworCQkubWl4ZXJzID0geyBhbGM4ODVfbWFjbWluaTNfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYWNtaW5pM19pbml0X3ZlcmJzLAorCQkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODg1X21hY21pbmkzXzZjaF9tb2RlcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4NV9tYWNtaW5pM182Y2hfbW9kZXMpLAorCQkuaW5wdXRfbXV4ID0gJm1hY21pbmkzX2NhcHR1cmVfc291cmNlLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKKwkJLmRpZ19pbl9uaWQgPSBBTEM4ODJfRElHSU5fTklELAorCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODVfbWFjbWluaTNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4NV9NQUNQUk9dID0gewogCQkubWl4ZXJzID0geyBhbGM4ODJfbWFjcHJvX21peGVyIH0sCkBAIC05MjM5LDggKzk0MDIsOSBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCiAJCS5kaWdfaW5fbmlkID0gQUxDODgyX0RJR0lOX05JRCwKLQkJLnVuc29sX2V2ZW50ID0gYWxjODg1X2ltYWM5MV91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4NV9pbWFjOTFfYXV0b211dGUsCisJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzg4NV9pbWFjOTFfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4Ml9UQVJHQV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4Ml90YXJnYV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LApAQCAtOTUyOCw3ICs5NjkyLDcgQEAKIAkJLnNldHVwID0gYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0JCS5wb3dlcl9ob29rID0gYWxjODg5X3Bvd2VyX2VhcGQsCisJCS5wb3dlcl9ob29rID0gYWxjX3Bvd2VyX2VhcGQsCiAjZW5kaWYKIAl9LAogCVtBTEM4ODhfQUNFUl9BU1BJUkVfNzczMEddID0gewpAQCAtMTAwNjMsNyArMTAyMjcsNyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEwMjAxLDcgKzEwMzY1LDYgQEAKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGM4ODJfbG9vcGJhY2tzOwogI2VuZGlmCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMzI0LDggKzEwNDg3LDE0IEBACiAJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywJCVwKIAkJLmdldCA9IGFsYzI2Ml9ocF9tYXN0ZXJfc3dfZ2V0LAkJCVwKIAkJLnB1dCA9IGFsYzI2Ml9ocF9tYXN0ZXJfc3dfcHV0LAkJCVwKKwl9LCBcCisJewkJCQkJCQlcCisJCS5pZmFjZSA9IE5JRF9NQVBQSU5HLAkJCQlcCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAkJXAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTUgfCAoMHgxNiA8PCA4KSB8ICgweDFiIDw8IDE2KSwJXAogCX0KIAorCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX0hQX0JQQ19taXhlcltdID0gewogCUFMQzI2Ml9IUF9NQVNURVJfU1dJVENILAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMDQ4Myw2ICsxMDY1MiwxMiBAQAogCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCQlcCiAJCS5nZXQgPSBhbGMyNjJfaGlwcG9fbWFzdGVyX3N3X2dldCwJCVwKIAkJLnB1dCA9IGFsYzI2Ml9oaXBwb19tYXN0ZXJfc3dfcHV0LAkJXAorCX0sCQkJCQkJCVwKKwl7CQkJCQkJCVwKKwkJLmlmYWNlID0gTklEX01BUFBJTkcsCQkJCVwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCQlcCisJCS5zdWJkZXZpY2UgPSBTVUJERVZfSFAoMCkgfCAoU1VCREVWX0xJTkUoMCkgPDwgOCkgfCBcCisJCQkgICAgIChTVUJERVZfU1BFQUtFUigwKSA8PCAxNiksIFwKIAl9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfaGlwcG9fbWl4ZXJbXSA9IHsKQEAgLTEwOTYzLDExICsxMTEzOCwxNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjJfZnVqaXRzdV9tYXN0ZXJfc3dfcHV0LAogCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCiAJfSwKKwl7CisJCS5pZmFjZSA9IE5JRF9NQVBQSU5HLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDFiLAorCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLApAQCAtMTA5OTgsNiArMTExNzksNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjJfbGVub3ZvXzMwMDBfbWFzdGVyX3N3X3B1dCwKQEAgLTExMTUyLDYgKzExMzM0LDExIEBACiAJCS5nZXQgPSBhbGNfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gYWxjMjYyX3VsdHJhX211eF9lbnVtX3B1dCwKIAl9LAorCXsKKwkJLmlmYWNlID0gTklEX01BUFBJTkcsCisJCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDE1LAorCX0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTE1OTgsNyArMTE3ODUsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MTQsIDB4MWIpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTIwNDEsNyArMTIyMjgsNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzI2Ml9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTIxNzAsNiArMTIzNTYsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LApAQCAtMTIxODUsNiArMTIzNzIsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LApAQCAtMTIyMDIsNiArMTIzOTAsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LApAQCAtMTI1NDcsNyArMTI3MzYsNiBAQAogCQlkYWMgPSAweDAyOwogCQlicmVhazsKIAljYXNlIDB4MTU6Ci0JY2FzZSAweDIxOgogCQlkYWMgPSAweDAzOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTI3NjgsNyArMTI5NTYsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTMxMDUsOCArMTMyOTMsNiBAQAogCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY4X0FVVE8pCiAJCXNwZWMtPmluaXRfaG9vayA9IGFsYzI2OF9hdXRvX2luaXQ7CiAKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMzEyNiw2ICsxMzMxMiwxNSBAQAogCTB4MjMsCiB9OwogCitzdGF0aWMgaGRhX25pZF90IGFsYzI2OXZiX2FkY19uaWRzWzFdID0geworCS8qIEFEQzEgKi8KKwkweDA5LAorfTsKKworc3RhdGljIGhkYV9uaWRfdCBhbGMyNjl2Yl9jYXBzcmNfbmlkc1sxXSA9IHsKKwkweDIyLAorfTsKKwogLyogTk9URTogQURDMiAoMHgwNykgaXMgY29ubmVjdGVkIGZyb20gYSByZWNvcmRpbmcgKk1JWEVSKiAoMHgyNCksCiAgKiAgICAgICBub3QgYSBtdXghCiAgKi8KQEAgLTEzMTU1LDYgKzEzMzUwLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKQEAgLTEzMTc1LDYgKzEzMzcxLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKQEAgLTEzMTkyLDcgKzEzMzg5LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfZWVlcGNfbWl4ZXJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfbGFwdG9wX21peGVyW10gPSB7CiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTMyMDAsMTYgKzEzMzk3LDQ3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9taXhlcltdID0geworCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBjYXB0dXJlIG1peGVyIGVsZW1lbnRzICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2VwY19jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2xhcHRvcF9hbmFsb2dfY2FwdHVyZV9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9hbmFsb2dfY2FwdHVyZV9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9kaWdpdGFsX2NhcHR1cmVfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBGU0MgYW1pbG8gKi8KLSNkZWZpbmUgYWxjMjY5X2Z1aml0c3VfbWl4ZXIJYWxjMjY5X2VlZXBjX21peGVyCisjZGVmaW5lIGFsYzI2OV9mdWppdHN1X21peGVyCWFsYzI2OV9sYXB0b3BfbWl4ZXIKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfcXVhbnRhX2ZsMV92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCkBAIC0xMzM1Miw3ICsxMzU4MCw3IEBACiAJYWxjMjY5X2xpZmVib29rX21pY19hdXRvc3dpdGNoKGNvZGVjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfZWVlcGNfZG1pY19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OV9sYXB0b3BfZG1pY19pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgyMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDV9LAogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMjYgfSwKQEAgLTEzMzYzLDcgKzEzNTkxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfZWVlcGNfYW1pY19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OV9sYXB0b3BfYW1pY19pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgyMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMjYgfSwKQEAgLTEzMzczLDYgKzEzNjAxLDI4IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5dmJfbGFwdG9wX2RtaWNfaW5pdF92ZXJic1tdID0geworCXsweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDA2fSwKKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMTkgfCAoMHgwMCA8PCA4KSl9LAorCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5dmJfbGFwdG9wX2FtaWNfaW5pdF92ZXJic1tdID0geworCXsweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMTkgfCAoMHgwMCA8PCA4KSl9LAorCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKIC8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KIHN0YXRpYyB2b2lkIGFsYzI2OV9zcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTMzOTAsNyArMTM2NDAsNyBAQAogfQogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBhbGMyNjlfZWVlcGNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCitzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlcykKIHsKIAlzd2l0Y2ggKHJlcyA+PiAyNikgewpAQCAtMTM0MDMsNyArMTM2NTMsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwpAQCAtMTM0MTMsNyArMTM2NjMsMTcgQEAKIAlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzI2OV9lZWVwY19hbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjY5dmJfbGFwdG9wX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CisJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDY7CisJc3BlYy0+YXV0b19taWMgPSAxOworfQorCitzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX2FtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwpAQCAtMTM0MjMsNyArMTM2ODMsNyBAQAogCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAotc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjY5X2xhcHRvcF9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CiAJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CkBAIC0xMzQzNiwyMiArMTM2OTYsMTAgQEAKIAkvKgogCSAqIFVubXV0ZSBBREMwIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCi0JezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCi0JLyogTXV0ZSBpbnB1dCBhbXBzIChQQ0JlZXAsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZQotCSAqIGFuYWxvZy1sb29wYmFjayBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvcgotCSAqIGZyb250IHBhbmVsIG1pYyAobWljIDIpCi0JICovCi0JLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLwotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKIAkvKgotCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZSkKKwkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwMiAtIDB4MDMpCiAJICovCiAJLyogc2V0IHZvbD0wIHRvIG91dHB1dCBtaXhlcnMgKi8KIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKQEAgLTEzNDc2LDI2ICsxMzcyNCw1NyBAQAogCiAJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCi0JezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAotCi0JLyogRklYTUU6IHVzZSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCisJLyogRklYTUU6IHVzZSBNdXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCiAJLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsIDE5LCAxYSwgMWIsIDFkLCAwYiAqLwogCS8qIElucHV0IG1peGVyMTogdW5tdXRlIE1pYywgRi1NaWMsIExpbmUsIENEIGlucHV0cyAqLwotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCiAJLyogc2V0IEVBUEQgKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMn0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OXZiX2luaXRfdmVyYnNbXSA9IHsKKwkvKgorCSAqIFVubXV0ZSBBREMwIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCisJICovCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCisJLyoKKwkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwMiAtIDB4MDMpCisJICovCisJLyogc2V0IHZvbD0wIHRvIG91dHB1dCBtaXhlcnMgKi8KKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKworCS8qIHNldCB1cCBpbnB1dCBhbXBzIGZvciBhbmFsb2cgbG9vcGJhY2sgKi8KKwkvKiBBbXAgSW5kaWNlczogREFDID0gMCwgbWl4ZXIgPSAxICovCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKworCS8qIEZJWE1FOiB1c2UgTXV4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLworCS8qIE1peGVyIGVsZW1lbnRzOiAweDE4LCAxOSwgMWEsIDFiLCAxZCwgMGIgKi8KKwkvKiBJbnB1dCBtaXhlcjE6IHVubXV0ZSBNaWMsIEYtTWljLCBMaW5lLCBDRCBpbnB1dHMgKi8KKwl7MHgyMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogc2V0IEVBUEQgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAogCXsgfQogfTsKIApAQCAtMTM1NDMsNiArMTM4MjIsNyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGMyNjlfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKKwloZGFfbmlkX3QgcmVhbF9jYXBzcmNfbmlkczsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLAogCQkJCQkgICBhbGMyNjlfaWdub3JlKTsKQEAgLTEzNTY0LDExICsxMzg0NCwyMCBAQAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKLQlhZGRfdmVyYihzcGVjLCBhbGMyNjlfaW5pdF92ZXJicyk7CisJaWYgKChhbGNfcmVhZF9jb2VmX2lkeChjb2RlYywgMCkgJiAweDAwZjApID09IDB4MDAxMCkgeworCQlhZGRfdmVyYihzcGVjLCBhbGMyNjl2Yl9pbml0X3ZlcmJzKTsKKwkJcmVhbF9jYXBzcmNfbmlkcyA9IGFsYzI2OXZiX2NhcHNyY19uaWRzWzBdOworCQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMCwgMHgxYiwgMHgxNCwgMHgyMSk7CisJfSBlbHNlIHsKKwkJYWRkX3ZlcmIoc3BlYywgYWxjMjY5X2luaXRfdmVyYnMpOworCQlyZWFsX2NhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzWzBdOworCQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CisJfQorCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCS8qIHNldCBkZWZhdWx0IGlucHV0IHNvdXJjZSAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIGFsYzI2OV9jYXBzcmNfbmlkc1swXSwKKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCByZWFsX2NhcHNyY19uaWRzLAogCQkJCSAgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCiAJCQkJICBzcGVjLT5pbnB1dF9tdXgtPml0ZW1zWzBdLmluZGV4KTsKIApAQCAtMTM1NzksOCArMTM4NjgsNiBAQAogCWlmICghc3BlYy0+Y2FwX21peGVyICYmICFzcGVjLT5ub19hbmFsb2cpCiAJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKLQogCXJldHVybiAxOwogfQogCkBAIC0xMzYwNiw4ICsxMzg5Myw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqYWxjMjY5X21vZGVsc1tBTEMyNjlfTU9ERUxfTEFTVF0gPSB7CiAJW0FMQzI2OV9CQVNJQ10JCQk9ICJiYXNpYyIsCiAJW0FMQzI2OV9RVUFOVEFfRkwxXQkJPSAicXVhbnRhIiwKLQlbQUxDMjY5X0FTVVNfQU1JQ10JCT0gImFzdXMtYW1pYyIsCi0JW0FMQzI2OV9BU1VTX0RNSUNdCQk9ICJhc3VzLWRtaWMiLAorCVtBTEMyNjlfQU1JQ10JCQk9ICJsYXB0b3AtYW1pYyIsCisJW0FMQzI2OV9ETUlDXQkJCT0gImxhcHRvcC1kbWljIiwKIAlbQUxDMjY5X0ZVSklUU1VdCQk9ICJmdWppdHN1IiwKIAlbQUxDMjY5X0xJRkVCT09LXQkJPSAibGlmZWJvb2siLAogCVtBTEMyNjlfQVVUT10JCQk9ICJhdXRvIiwKQEAgLTEzNjE2LDQzICsxMzkwMyw1NyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2OV9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2JmOCwgIlF1YW50YSBGTDEiLCBBTEMyNjlfUVVBTlRBX0ZMMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMzMCwgIkFTVVMgRWVlcGMgUDcwMyBQOTAwQSIsCi0JCSAgICAgIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExMzMsICJBU1VTIFVKMjBmdCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyNzMsICJBU1VTIFVMODBKVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyODMsICJBU1VTIFU1M0pjIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2EzLCAiQVNVUyBVTDMwVnQiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzczLCAiQVNVUyBHNzNKWCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzODMsICJBU1VTIFVKMzBKYyIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzZDMsICJBU1VTIE42MUpBIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQxMywgIkFTVVMgVUw1MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NDMsICJBU1VTIFVMMzAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDUzLCAiQVNVUyBNNjBKdiIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ODMsICJBU1VTIFVMODAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGYzLCAiQVNVUyBGODNWZiIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ZTMsICJBU1VTIFVMMjAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNTEzLCAiQVNVUyBVWDMwIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVhMywgIkFTVVMgTjYwSnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWIzLCAiQVNVUyBONjBEcCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YzMsICJBU1VTIE43MERlIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVlMywgIkFTVVMgRjgzVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NDMsICJBU1VTIE02MEoiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjUzLCAiQVNVUyBVNTAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjkzLCAiQVNVUyBGNTBOIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZhMywgIkFTVVMgRjVRIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZlMywgIkFTVVMgVVg1MCIsIEFMQzI2OV9BU1VTX0RNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NDMsICJBU1VTIFU4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NzMsICJBU1VTIFUyMEEiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODgzLCAiQVNVUyBGODFTZSIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCQkgICAgICBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAxMywgIkFTVVMgTjYxRGEiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMTEzLCAiQVNVUyBONjNKbiIsIEFMQzI2OVZCX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExNDMsICJBU1VTIEI1M2YiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMTMzLCAiQVNVUyBVSjIwZnQiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTE4MywgIkFTVVMgSzcyRFIiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWIzLCAiQVNVUyBLNTJEUiIsIEFMQzI2OVZCX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZTMsICJBU1VTIFUzM0pjIiwgQUxDMjY5VkJfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI3MywgIkFTVVMgVUw4MEp0IiwgQUxDMjY5VkJfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI4MywgIkFTVVMgVTUzSmMiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJkMywgIkFTVVMgTjYxSnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNhMywgIkFTVVMgVUwzMFZ0IiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzNzMsICJBU1VTIEc3M0pYIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzODMsICJBU1VTIFVKMzBKYyIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2QzLCAiQVNVUyBONjFKQSIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDEzLCAiQVNVUyBVTDUwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NDMsICJBU1VTIFVMMzAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ1MywgIkFTVVMgTTYwSnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ4MywgIkFTVVMgVUw4MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGYzLCAiQVNVUyBGODNWZiIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGUzLCAiQVNVUyBVTDIwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1MTMsICJBU1VTIFVYMzAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTU5MywgIkFTVVMgTjUxVm4iLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVhMywgIkFTVVMgTjYwSnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTViMywgIkFTVVMgTjYwRHAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVjMywgIkFTVVMgTjcwRGUiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVlMywgIkFTVVMgRjgzVCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjQzLCAiQVNVUyBNNjBKIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NTMsICJBU1VTIFU1MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjkzLCAiQVNVUyBGNTBOIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YTMsICJBU1VTIEY1USIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmUzLCAiQVNVUyBVWDUwIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzQzLCAiQVNVUyBVODAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc3MywgIkFTVVMgVTIwQSIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODgzLCAiQVNVUyBGODFTZSIsIEFMQzI2OV9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzFhLCAiQVNVUyBFZWVwYyBQOTAxIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCisJCSAgICAgIEFMQzI2OV9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzRhLCAiQVNVUyBFZWVwYyBTMTAxIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM5OCwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9BU1VTX0RNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzY2UsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfQVNVU19ETUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTVkLCAiRlNDIEFtaWxvIiwgQUxDMjY5X0ZVSklUU1UpLAorCQkgICAgICBBTEMyNjlfRE1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM5OCwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4M2NlLCAiQVNVUyBQMTAwNUhBIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwNzEsICJTT05ZIFhUQiIsIEFMQzI2OV9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxNDc1LCAiTGlmZWJvb2sgSUNIOU0tYmFzZWQiLCBBTEMyNjlfTElGRUJPT0spLAorCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDE3NzgsICJRdWFudGEgT04xIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAweDExNWQsICJGU0MgQW1pbG8iLCBBTEMyNjlfRlVKSVRTVSksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2JlOSwgIlF1YW50YSBXaXN0cm9uIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNiZjgsICJRdWFudGEgRkwxIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2ZmLCAweDA1OWEsICJRdWFudGEgRUwzIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2ZmLCAweDA1OWIsICJRdWFudGEgSlIxIiwgQUxDMjY5X0RNSUMpLAogCXt9CiB9OwogCkBAIC0xMzY4MCw0NyArMTM5ODEsNzUgQEAKIAkJLnNldHVwID0gYWxjMjY5X3F1YW50YV9mbDFfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjlfcXVhbnRhX2ZsMV9pbml0X2hvb2ssCiAJfSwKLQlbQUxDMjY5X0FTVVNfQU1JQ10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OV9lZWVwY19taXhlciB9LAotCQkuY2FwX21peGVyID0gYWxjMjY5X2VwY19jYXB0dXJlX21peGVyLAorCVtBTEMyNjlfQU1JQ10gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2OV9sYXB0b3BfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9IGFsYzI2OV9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKLQkJCQlhbGMyNjlfZWVlcGNfYW1pY19pbml0X3ZlcmJzIH0sCisJCQkJYWxjMjY5X2xhcHRvcF9hbWljX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2VlZXBjX3Vuc29sX2V2ZW50LAotCQkuc2V0dXAgPSBhbGMyNjlfZWVlcGNfYW1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19pbml0aG9vaywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9hbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKIAl9LAotCVtBTEMyNjlfQVNVU19ETUlDXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY5X2VlZXBjX21peGVyIH0sCi0JCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCisJW0FMQzI2OV9ETUlDXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjY5X2xhcHRvcF9taXhlciB9LAorCQkuY2FwX21peGVyID0gYWxjMjY5X2xhcHRvcF9kaWdpdGFsX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKLQkJCQlhbGMyNjlfZWVlcGNfZG1pY19pbml0X3ZlcmJzIH0sCisJCQkJYWxjMjY5X2xhcHRvcF9kbWljX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2VlZXBjX3Vuc29sX2V2ZW50LAotCQkuc2V0dXAgPSBhbGMyNjlfZWVlcGNfZG1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19pbml0aG9vaywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9kbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKKwl9LAorCVtBTEMyNjlWQl9BTUlDXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjY5dmJfbGFwdG9wX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjl2Yl9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXIsCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjl2Yl9pbml0X3ZlcmJzLAorCQkJCWFsYzI2OXZiX2xhcHRvcF9hbWljX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCisJCS5ocF9uaWQgPSAweDAzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9hbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKKwl9LAorCVtBTEMyNjlWQl9ETUlDXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjY5dmJfbGFwdG9wX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjl2Yl9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyLAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5dmJfaW5pdF92ZXJicywKKwkJCQlhbGMyNjl2Yl9sYXB0b3BfZG1pY19pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjMjY5X2RhY19uaWRzLAorCQkuaHBfbmlkID0gMHgwMywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OV9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjlfbW9kZXMsCisJCS51bnNvbF9ldmVudCA9IGFsYzI2OV9sYXB0b3BfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OXZiX2xhcHRvcF9kbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKIAl9LAogCVtBTEMyNjlfRlVKSVRTVV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9mdWppdHN1X21peGVyIH0sCi0JCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjlfbGFwdG9wX2RpZ2l0YWxfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLAotCQkJCWFsYzI2OV9lZWVwY19kbWljX2luaXRfdmVyYnMgfSwKKwkJCQlhbGMyNjlfbGFwdG9wX2RtaWNfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OV9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzI2OV9kYWNfbmlkcywKIAkJLmhwX25pZCA9IDB4MDMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjlfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjY5X21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfZWVlcGNfdW5zb2xfZXZlbnQsCi0JCS5zZXR1cCA9IGFsYzI2OV9lZWVwY19kbWljX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjMjY5X2VlZXBjX2luaXRob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfbGFwdG9wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjlfbGFwdG9wX2RtaWNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGMyNjlfbGFwdG9wX2luaXRob29rLAogCX0sCiAJW0FMQzI2OV9MSUZFQk9PS10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9saWZlYm9va19taXhlciB9LApAQCAtMTM3NDEsNiArMTQwNzAsNyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKIAlpbnQgYm9hcmRfY29uZmlnOwogCWludCBlcnI7CisJaW50IGlzX2FsYzI2OXZiID0gMDsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMzc1Nyw2ICsxNDA4Nyw3IEBACiAJCQlhbGNfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQorCQlpc19hbGMyNjl2YiA9IDE7CiAJfQogCiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIEFMQzI2OV9NT0RFTF9MQVNULApAQCAtMTM3OTIsNyArMTQxMjMsNyBAQAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjY5X0FVVE8pCiAJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzI2OV9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCi0JaWYgKGNvZGVjLT5zdWJzeXN0ZW1faWQgPT0gMHgxN2FhM2JmOCkgeworCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY5X1FVQU5UQV9GTDEpIHsKIAkJLyogRHVlIHRvIGEgaGFyZHdhcmUgcHJvYmxlbSBvbiBMZW5vdm8gSWRlYWRwYWQsIHdlIG5lZWQgdG8KIAkJICogZml4IHRoZSBzYW1wbGUgcmF0ZSBvZiBhbmFsb2cgSS9PIHRvIDQ0LjFrSHoKIAkJICovCkBAIC0xMzgwNSw5ICsxNDEzNiwxNiBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2OV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0Jc3BlYy0+YWRjX25pZHMgPSBhbGMyNjlfYWRjX25pZHM7Ci0Jc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjlfYWRjX25pZHMpOwotCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzOworCWlmICghaXNfYWxjMjY5dmIpIHsKKwkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjlfYWRjX25pZHM7CisJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2FkY19uaWRzKTsKKwkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjlfY2Fwc3JjX25pZHM7CisJfSBlbHNlIHsKKwkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjl2Yl9hZGNfbmlkczsKKwkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjl2Yl9hZGNfbmlkcyk7CisJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5dmJfY2Fwc3JjX25pZHM7CisJfQorCiAJaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCiAJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKQEAgLTEzODIxLDcgKzE0MTU5LDYgQEAKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGMyNjlfbG9vcGJhY2tzOwogI2VuZGlmCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0Njg0LDcgKzE1MDIxLDcgQEAKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MV9hZGNfbmlkcyk7CiAJc2V0X2NhcHR1cmVfbWl4ZXIoY29kZWMpOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MGUsIDB4MGYsIDB4MGIpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDBlLCAweDBmLCAweDBiLCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTQ5MzksMTMgKzE1Mjc2LDE2IEBACiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAzOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7Ci0JaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4NjFfQVVUTykKKwlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg2MV9BVVRPKSB7CiAJCXNwZWMtPmluaXRfaG9vayA9IGFsYzg2MV9hdXRvX2luaXQ7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCQlzcGVjLT5wb3dlcl9ob29rID0gYWxjX3Bvd2VyX2VhcGQ7CisjZW5kaWYKKwl9CisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzg2MV9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTU1NzIsNyArMTU5MTIsNyBAQAogc3RhdGljIGludCBhbGM4NjF2ZF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXJldHVybiBhbGNfYXV0b19jcmVhdGVfaW5wdXRfY3Rscyhjb2RlYywgY2ZnLCAweDE1LCAweDIyLCAwKTsKKwlyZXR1cm4gYWxjX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgxNSwgMHgwOSwgMCk7CiB9CiAKIApAQCAtMTU4MDgsNyArMTYxNDgsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTU5MjUsNyArMTYyNjUsNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzg2MXZkX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjM5MiwxMyArMTY3MzEsNiBAQAogCS8qIEFEQzogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KIAl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDA5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCi0JLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLwotCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKQEAgLTE2NDQ4LDYgKzE2NzgwLDI4IEBACiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19pbml0X3ZlcmJzW10gPSB7CisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI3Ml9pbml0X3ZlcmJzW10gPSB7CisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7IH0KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX3N1ZV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58QUxDODgwX0ZST05UX0VWRU5UfSwKIAl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxBTEM4ODBfSFBfRVZFTlR9LApAQCAtMTY0NjcsNjEgKzE2ODIxLDYgQEAKIAl7fQogfTsKIAotLyoKLSAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfYXV0b19pbml0X3ZlcmJzW10gPSB7Ci0JLyoKLQkgKiBVbm11dGUgQURDIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCi0JICovCi0JezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0KLQkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKLQkgKiBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udAotCSAqIHBhbmVsIG1pYyAobWljIDIpCi0JICovCi0JLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLwotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKLQotCS8qCi0JICogU2V0IHVwIG91dHB1dCBtaXhlcnMgKDB4MGMgLSAweDBmKQotCSAqLwotCS8qIHNldCB2b2w9MCB0byBvdXRwdXQgbWl4ZXJzICovCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0KLQkvKiBzZXQgdXAgaW5wdXQgYW1wcyBmb3IgYW5hbG9nIGxvb3BiYWNrICovCi0JLyogQW1wIEluZGljZXM6IERBQyA9IDAsIG1peGVyID0gMSAqLwotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCi0KLQkvKiBGSVhNRTogdXNlIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KLQkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KLQkvKiBJbnB1dCBtaXhlciAqLwotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JeyB9Ci19OwotCi0vKiBhZGRpdGlvbmFsIHZlcmJzIGZvciBBTEM2NjMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX2F1dG9faW5pdF92ZXJic1tdID0gewotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JeyB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19tNTF2YV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LApAQCAtMTcyNzIsNiArMTc1NzEsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZjQsICJERUxMIFpNMSIsIEFMQzI3Ml9ERUxMX1pNMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAwMCwgIkFTVVMgTjUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTA5MiwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTE3MywgIkFTVVMgSzczSm4iLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFjMywgIkFTVVMgTTcwViIsIEFMQzY2M19BU1VTX01PREUzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWYzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKQEAgLTE3MzA3LDYgKzE3NjA3LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODkzLCAiQVNVUyBNNTBWbSIsIEFMQzY2M19BU1VTX01PREUzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODk0LCAiQVNVUyBYNTUiLCBBTEM2NjNfQVNVU19NT0RFMyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MThiMywgIkFTVVMgTjgwVmMiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MThjMywgIkFTVVMgVlg1IiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ZDMsICJBU1VTIE44MVRlIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ZjMsICJBU1VTIE41MDVUcCIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTAzLCAiQVNVUyBGNUdMIiwgQUxDNjYzX0FTVVNfTU9ERTEpLApAQCAtMTczMzQsNiArMTc2MzUsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGNhMDAsICJTYW1zdW5nIE5DMTAiLCBBTEMyNzJfU0FNU1VOR19OQzEwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCisJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MjMwNCwgIlF1YW50YSBXSDEiLCBBTEM2NjNfQVNVU19IMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGYsICJCaW9zdGFyIFRBNzgwRyBNMisiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMGMsICJQQiBSUzY1IiwgQUxDNjYzX0FTVVNfTTUxVkEpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMWUsICJMZW5vdm8iLCBBTEM2NjJfTEVOT1ZPXzEwMUUpLApAQCAtMTc5NTIsMTUgKzE4MjU0LDIzIEBACiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCi0JYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2F1dG9faW5pdF92ZXJicyk7Ci0JaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MykKLQkJYWRkX3ZlcmIoc3BlYywgYWxjNjYzX2F1dG9faW5pdF92ZXJicyk7CisJYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2luaXRfdmVyYnMpOworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNzIgfHwgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYzIHx8CisJICAgIGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2NSkKKwkJYWRkX3ZlcmIoc3BlYywgYWxjNjYzX2luaXRfdmVyYnMpOworCisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI3MikKKwkJYWRkX3ZlcmIoc3BlYywgYWxjMjcyX2luaXRfdmVyYnMpOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7CisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI3MiB8fCBjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjMgfHwKKwkgICAgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjY1IHx8IGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY3MCkKKwkgICAgYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQsIDB4MjEpOworCWVsc2UKKwkgICAgYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQsIDApOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xODA0NiwxMSArMTgzNTYsMjAgQEAKIAogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihjb2RlYyk7Ci0JaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MikKLQkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7Ci0JZWxzZQotCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAorCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMGVjMDY2MjoKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDI3MjoKKwljYXNlIDB4MTBlYzA2NjM6CisJY2FzZSAweDEwZWMwNjY1OgorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjczOgorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwMywgSERBX0lOUFVUKTsKKwkJYnJlYWs7CisJfQogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMjsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwpAQCAtMTgwNjAsNyArMTgzNzksNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzY2Ml9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTgxMDEsNiArMTg0MTksOCBAQAogCXsgLmlkID0gMHgxMGVjMDY2MiwgLnJldiA9IDB4MTAwMTAxLCAubmFtZSA9ICJBTEM2NjIgcmV2MSIsCiAJICAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA2NjMsIC5uYW1lID0gIkFMQzY2MyIsIC5wYXRjaCA9IHBhdGNoX2FsYzY2MiB9LAorCXsgLmlkID0gMHgxMGVjMDY2NSwgLm5hbWUgPSAiQUxDNjY1IiwgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCisJeyAuaWQgPSAweDEwZWMwNjcwLCAubmFtZSA9ICJBTEM2NzAiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODAsIC5uYW1lID0gIkFMQzg4MCIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MCB9LAogCXsgLmlkID0gMHgxMGVjMDg4MiwgLm5hbWUgPSAiQUxDODgyIiwgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCiAJeyAuaWQgPSAweDEwZWMwODgzLCAubmFtZSA9ICJBTEM4ODMiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jCmluZGV4IDQzYjQzNmMuLmY0MTllZTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaTMwNTQuYwpAQCAtMTIyLDYgKzEyMiw3IEBACiAjZGVmaW5lIFNJMzA1NF9LQ09OVFJPTChrbmFtZSxyZWcsbWFzaykgeyBcCiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKIAkubmFtZSA9IGtuYW1lLCBcCisJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCByZWcsIFwKIAkuaW5mbyA9IHNpMzA1NF9zd2l0Y2hfaW5mbywgXAogCS5nZXQgID0gc2kzMDU0X3N3aXRjaF9nZXQsIFwKIAkucHV0ICA9IHNpMzA1NF9zd2l0Y2hfcHV0LCBcCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggNzk5YmEyNS4uOGM0MTZiYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtNTY4LDYgKzU2OCwxMSBAQAogCTB4MGYsIDB4MTAsIDB4MTEsIDB4MWYsIDB4MjAsCiB9OwogCitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODh4eHhfcGluX25pZHNbMTBdID0geworCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsCisJMHgwZiwgMHgxMSwgMHgxZiwgMHgyMCwKK307CisKICNkZWZpbmUgU1RBQzkySEQ3MUJYWF9OVU1fUElOUyAxMwogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzRwb3J0W1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MDAsCkBAIC0yNjg4LDcgKzI2OTMsNyBAQAogc3RhY19jb250cm9sX25ldyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKIAkJIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKIAkJIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSBoZGFfbmlkX3QgbmlkKQorCQkgdW5zaWduZWQgaW50IHN1YmRldikKIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKIApAQCAtMjcwNCw4ICsyNzA5LDcgQEAKIAkJc3BlYy0+a2N0bHMuYWxsb2NlZC0tOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKG5pZCkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZDsKKwlrbmV3LT5zdWJkZXZpY2UgPSBzdWJkZXY7CiAJcmV0dXJuIGtuZXc7CiB9CiAKQEAgLTI3MTUsNyArMjcxOSw3IEBACiAJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldyA9IHN0YWNfY29udHJvbF9uZXcoc3BlYywga3RlbXAsIG5hbWUsCi0JCQkJCQkJIGdldF9hbXBfbmlkXyh2YWwpKTsKKwkJCQkJCQkgSERBX1NVQkRFVl9BTVBfRkxBRyk7CiAJaWYgKCFrbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKIAlrbmV3LT5pbmRleCA9IGlkeDsKQEAgLTI4NzQsNiArMjg3OCwxMyBAQAogCiAJY29ubl9sZW4gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uLAogCQkJCQkgICBIREFfTUFYX0NPTk5FQ1RJT05TKTsKKwkvKiA5MkhEODg6IHRyYWNlIGJhY2sgdXAgdGhlIGxpbmsgb2YgbmlkcyB0byBmaW5kIHRoZSBEQUMgKi8KKwl3aGlsZSAoY29ubl9sZW4gPT0gMSAmJiAoZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBjb25uWzBdKSkKKwkJCQkJIT0gQUNfV0lEX0FVRF9PVVQpKSB7CisJCW5pZCA9IGNvbm5bMF07CisJCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwKKwkJCUhEQV9NQVhfQ09OTkVDVElPTlMpOworCX0KIAlmb3IgKGogPSAwOyBqIDwgY29ubl9sZW47IGorKykgewogCQl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgY29ubltqXSk7CiAJCXd0eXBlID0gZ2V0X3djYXBzX3R5cGUod2NhcHMpOwpAQCAtNDE2MCwzNCArNDE3MSw1MiBAQAogc3RhdGljIHZvaWQgc3RhY190b2dnbGVfcG93ZXJfbWFwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJCSAgaW50IGVuYWJsZSk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9pbnRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5LAorCQkJICAgICAgIGludCAqdmFscCkKK3sKKwljb25zdCBjaGFyICpwOworCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCBrZXkpOworCWlmIChwKSB7CisJCXVuc2lnbmVkIGxvbmcgdmFsOworCQlpZiAoIXN0cmljdF9zdHJ0b3VsKHAsIDAsICZ2YWwpKSB7CisJCQkqdmFscCA9IHZhbDsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCiAvKiBvdmVycmlkZSBzb21lIGhpbnRzIGZyb20gdGhlIGh3ZGVwIGVudHJ5ICovCiBzdGF0aWMgdm9pZCBzdGFjX3N0b3JlX2hpbnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JY29uc3QgY2hhciAqcDsKIAlpbnQgdmFsOwogCiAJdmFsID0gc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAiaHBfZGV0ZWN0Iik7CiAJaWYgKHZhbCA+PSAwKQogCQlzcGVjLT5ocF9kZXRlY3QgPSB2YWw7Ci0JcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX21hc2siKTsKLQlpZiAocCkgewotCQlzcGVjLT5ncGlvX21hc2sgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKTsKKwlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZ3Bpb19tYXNrIiwgJnNwZWMtPmdwaW9fbWFzaykpIHsKIAkJc3BlYy0+ZWFwZF9tYXNrID0gc3BlYy0+Z3Bpb19kaXIgPSBzcGVjLT5ncGlvX2RhdGEgPQogCQkJc3BlYy0+Z3Bpb19tYXNrOwogCX0KLQlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fZGlyIik7Ci0JaWYgKHApCi0JCXNwZWMtPmdwaW9fZGlyID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7Ci0JcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX2RhdGEiKTsKLQlpZiAocCkKLQkJc3BlYy0+Z3Bpb19kYXRhID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7Ci0JcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJlYXBkX21hc2siKTsKLQlpZiAocCkKLQkJc3BlYy0+ZWFwZF9tYXNrID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fZGlyIiwgJnNwZWMtPmdwaW9fZGlyKSkKKwkJc3BlYy0+Z3Bpb19tYXNrICY9IHNwZWMtPmdwaW9fbWFzazsKKwlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZ3Bpb19kYXRhIiwgJnNwZWMtPmdwaW9fZGF0YSkpCisJCXNwZWMtPmdwaW9fZGlyICY9IHNwZWMtPmdwaW9fbWFzazsKKwlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZWFwZF9tYXNrIiwgJnNwZWMtPmVhcGRfbWFzaykpCisJCXNwZWMtPmVhcGRfbWFzayAmPSBzcGVjLT5ncGlvX21hc2s7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fbXV0ZSIsICZzcGVjLT5ncGlvX211dGUpKQorCQlzcGVjLT5ncGlvX211dGUgJj0gc3BlYy0+Z3Bpb19tYXNrOwogCXZhbCA9IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImVhcGRfc3dpdGNoIik7CiAJaWYgKHZhbCA+PSAwKQogCQlzcGVjLT5lYXBkX3N3aXRjaCA9IHZhbDsKKwlnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2xlZF9wb2xhcml0eSIsICZzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSk7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fbGVkIiwgJnNwZWMtPmdwaW9fbGVkKSkgeworCQlzcGVjLT5ncGlvX21hc2sgfD0gc3BlYy0+Z3Bpb19sZWQ7CisJCXNwZWMtPmdwaW9fZGlyIHw9IHNwZWMtPmdwaW9fbGVkOworCQlpZiAoc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkpCisJCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7CisJfQogfQogCiBzdGF0aWMgaW50IHN0YWM5Mnh4X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC00MzM0LDYgKzQzNjMsMTIgQEAKIAkJaWYgKGVuYWJsZV9waW5fZGV0ZWN0KGNvZGVjLCBuaWQsIFNUQUNfUFdSX0VWRU5UKSkKIAkJCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsIG5pZCk7CiAJfQorCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCS8qIHN5bmMgbXV0ZSBMRUQgKi8KKwlpZiAoc3BlYy0+Z3Bpb19sZWQgJiYgY29kZWMtPnBhdGNoX29wcy5jaGVja19wb3dlcl9zdGF0dXMpCisJCWNvZGVjLT5wYXRjaF9vcHMuY2hlY2tfcG93ZXJfc3RhdHVzKGNvZGVjLCAweDAxKTsKKyNlbmRpZgkKIAlpZiAoc3BlYy0+ZGFjX2xpc3QpCiAJCXN0YWM5Mnh4X3Bvd2VyX2Rvd24oY29kZWMpOwogCXJldHVybiAwOwpAQCAtNDM3MiwxOCArNDQwNyw4IEBACiBzdGF0aWMgdm9pZCBzdGFjOTJ4eF9zaHV0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaTsKLQloZGFfbmlkX3QgbmlkOwogCi0JLyogcmVzZXQgZWFjaCBwaW4gYmVmb3JlIHBvd2VyaW5nIGRvd24gREFDL0FEQyB0byBhdm9pZCBjbGljayBub2lzZSAqLwotCW5pZCA9IGNvZGVjLT5zdGFydF9uaWQ7Ci0JZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fbm9kZXM7IGkrKywgbmlkKyspIHsKLQkJdW5zaWduZWQgaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOwotCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPSBnZXRfd2NhcHNfdHlwZSh3Y2Fwcyk7Ci0JCWlmICh3aWRfdHlwZSA9PSBBQ19XSURfUElOKQotCQkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKLQl9CisJc25kX2hkYV9zaHV0dXBfcGlucyhjb2RlYyk7CiAKIAlpZiAoc3BlYy0+ZWFwZF9tYXNrKQogCQlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssCkBAIC00NzM1LDE5ICs0NzYwLDE0IEBACiBzdGF0aWMgdm9pZCBzZXRfaHBfbGVkX2dwaW8oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKLQljYXNlIDB4MTExZDc2MDg6Ci0JCS8qIEdQSU8gMCAqLwotCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDE7Ci0JCWJyZWFrOwotCWNhc2UgMHgxMTFkNzYwMDoKLQljYXNlIDB4MTExZDc2MDE6Ci0JY2FzZSAweDExMWQ3NjAyOgotCWNhc2UgMHgxMTFkNzYwMzoKLQkJLyogR1BJTyAzICovCi0JCXNwZWMtPmdwaW9fbGVkID0gMHgwODsKLQkJYnJlYWs7Ci0JfQorCXVuc2lnbmVkIGludCBncGlvOworCisJZ3BpbyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgY29kZWMtPmFmZywgQUNfUEFSX0dQSU9fQ0FQKTsKKwlncGlvICY9IEFDX0dQSU9fSU9fQ09VTlQ7CisJaWYgKGdwaW8gPiAzKQorCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7IC8qIEdQSU8gMyAqLworCWVsc2UKKwkJc3BlYy0+Z3Bpb19sZWQgPSAweDAxOyAvKiBHUElPIDAgKi8KIH0KIAogLyoKQEAgLTQ3NzAsNyArNDc5MCw3IEBACiAgKiBOZWVkIG1vcmUgaW5mb3JtYXRpb24gb24gd2hldGhlciBpdCBpcyB0cnVlIGFjcm9zcyB0aGUgZW50aXJlIHNlcmllcy4KICAqIC0tIGt1bmFsCiAgKi8KLXN0YXRpYyBpbnQgZmluZF9tdXRlX2xlZF9ncGlvKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIGludCBmaW5kX211dGVfbGVkX2dwaW8oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBkZWZhdWx0X3BvbGFyaXR5KQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJY29uc3Qgc3RydWN0IGRtaV9kZXZpY2UgKmRldiA9IE5VTEw7CkBAIC00Nzk3LDcgKzQ4MTcsNyBAQAogCQkgKi8KIAkJaWYgKCFocF9ibGlrZV9zeXN0ZW0oY29kZWMtPnN1YnN5c3RlbV9pZCkpIHsKIAkJCXNldF9ocF9sZWRfZ3Bpbyhjb2RlYyk7Ci0JCQlzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSA9IDE7CisJCQlzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSA9IGRlZmF1bHRfcG9sYXJpdHk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KQEAgLTQ4OTUsNiArNDkxNSwxMSBAQAogCQkJc3RhY19pc3N1ZV91bnNvbF9ldmVudChjb2RlYywKIAkJCQkJICAgICAgIHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1swXSk7CiAJfQorI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkvKiBzeW5jIG11dGUgTEVEICovCisJaWYgKHNwZWMtPmdwaW9fbGVkICYmIGNvZGVjLT5wYXRjaF9vcHMuY2hlY2tfcG93ZXJfc3RhdHVzKQorCQljb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cyhjb2RlYywgMHgwMSk7CisjZW5kaWYJCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5MTQsNDMgKzQ5MzksMjkgQEAKIAkJCQkJICAgICAgaGRhX25pZF90IG5pZCkKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpLCBtdXRlZCA9IDE7CiAKLQlpZiAobmlkID09IDB4MTApIHsKLQkJaWYgKHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgSERBX09VVFBVVCwgMCkgJgotCQkgICAgSERBX0FNUF9NVVRFKQotCQkJc3BlYy0+Z3Bpb19kYXRhICY9IH5zcGVjLT5ncGlvX2xlZDsgLyogb3JhbmdlICovCi0JCWVsc2UKLQkJCXNwZWMtPmdwaW9fZGF0YSB8PSBzcGVjLT5ncGlvX2xlZDsgLyogd2hpdGUgKi8KLQotCQlpZiAoIXNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KSB7Ci0JCQkvKiBMRUQgc3RhdGUgaXMgaW52ZXJ0ZWQgb24gdGhlc2Ugc3lzdGVtcyAqLwotCQkJc3BlYy0+Z3Bpb19kYXRhIF49IHNwZWMtPmdwaW9fbGVkOworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5tdWx0aW91dC5udW1fZGFjczsgaSsrKSB7CisJCW5pZCA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOworCQlpZiAoIShzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIEhEQV9PVVRQVVQsIDApICYKKwkJICAgICAgSERBX0FNUF9NVVRFKSkgeworCQkJbXV0ZWQgPSAwOyAvKiBzb21ldGhpbmcgaGVhcmQgKi8KKwkJCWJyZWFrOwogCQl9CisJfQorCWlmIChtdXRlZCkKKwkJc3BlYy0+Z3Bpb19kYXRhICY9IH5zcGVjLT5ncGlvX2xlZDsgLyogb3JhbmdlICovCisJZWxzZQorCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7IC8qIHdoaXRlICovCiAKLQkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLAotCQkJICAgICAgc3BlYy0+Z3Bpb19kaXIsCi0JCQkgICAgICBzcGVjLT5ncGlvX2RhdGEpOworCWlmICghc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkpIHsKKwkJLyogTEVEIHN0YXRlIGlzIGludmVydGVkIG9uIHRoZXNlIHN5c3RlbXMgKi8KKwkJc3BlYy0+Z3Bpb19kYXRhIF49IHNwZWMtPmdwaW9fbGVkOwogCX0KIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkdDkyaGQ4M3h4eF9ocF9jaGVja19wb3dlcl9zdGF0dXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQpCi17Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQotCWlmIChuaWQgIT0gMHgxMykKLQkJcmV0dXJuIDA7Ci0JaWYgKHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgSERBX09VVFBVVCwgMCkgJiBIREFfQU1QX01VVEUpCi0JCXNwZWMtPmdwaW9fZGF0YSB8PSBzcGVjLT5ncGlvX2xlZDsgLyogbXV0ZSBMRUQgb24gKi8KLQllbHNlCi0JCXNwZWMtPmdwaW9fZGF0YSAmPSB+c3BlYy0+Z3Bpb19sZWQ7IC8qIG11dGUgTEVEIG9mZiAqLwogCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywgc3BlYy0+Z3Bpb19kaXIsIHNwZWMtPmdwaW9fZGF0YSk7Ci0KIAlyZXR1cm4gMDsKIH0KLQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgc3RhYzkyeHhfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtNTI3Miw3ICs1MjgzLDYgQEAKIAloZGFfbmlkX3QgY29ubltTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDFdOwogCWludCBlcnI7CiAJaW50IG51bV9kYWNzOwotCWhkYV9uaWRfdCBuaWQ7CiAKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTUzMTEsNyArNTMyMSwxOCBAQAogCQkJCXN0YWM5MmhkODN4eHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKIAogCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMTFkNzY2NjoKKwljYXNlIDB4MTExZDc2Njc6CisJY2FzZSAweDExMWQ3NjY4OgorCWNhc2UgMHgxMTFkNzY2OToKKwkJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkODh4eHhfcGluX25pZHMpOworCQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkODh4eHhfcGluX25pZHM7CisJCXNwZWMtPm1vbm9fbmlkID0gMDsKKwkJc3BlYy0+ZGlnYmVlcF9uaWQgPSAwOworCQlzcGVjLT5udW1fcHdycyA9IDA7CisJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzYwNDoKKwljYXNlIDB4MTExZDc2ZDQ6CiAJY2FzZSAweDExMWQ3NjA1OgogCWNhc2UgMHgxMTFkNzZkNToKIAkJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBTVEFDXzkySEQ4M1hYWF9QV1JfUkVGKQpAQCAtNTMyMiw4ICs1MzQzLDEwIEBACiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwogCi0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBTVEFDXzkySEQ4M1hYWF9IUCkKLQkJc3BlYy0+Z3Bpb19sZWQgPSAweDAxOworCWlmIChmaW5kX211dGVfbGVkX2dwaW8oY29kZWMsIDApKQorCQlzbmRfcHJpbnRkKCJtdXRlIExFRCBncGlvICVkIHBvbGFyaXR5ICVkXG4iLAorCQkJCXNwZWMtPmdwaW9fbGVkLAorCQkJCXNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KTsKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlpZiAoc3BlYy0+Z3Bpb19sZWQpIHsKQEAgLTUzMzIsNyArNTM1NSw3IEBACiAJCXNwZWMtPmdwaW9fZGF0YSB8PSBzcGVjLT5ncGlvX2xlZDsKIAkJLyogcmVnaXN0ZXIgY2hlY2tfcG93ZXJfc3RhdHVzIGNhbGxiYWNrLiAqLwogCQljb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cyA9Ci0JCQlpZHQ5MmhkODN4eHhfaHBfY2hlY2tfcG93ZXJfc3RhdHVzOworCQkJc3RhYzkyeHhfaHBfY2hlY2tfcG93ZXJfc3RhdHVzOwogCX0KICNlbmRpZgkKIApAQCAtNTM1MiwyNCArNTM3NSwyMSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7Ci0JY2FzZSBTVEFDX0RFTExfUzE0OgotCQluaWQgPSAweGY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5pZCA9IDB4ZTsKLQkJYnJlYWs7Ci0JfQotCi0JbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLAorCS8qIGRvY2tpbmcgb3V0cHV0IHN1cHBvcnQgKi8KKwludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAweEYsCiAJCQkJY29ubiwgU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxKSAtIDE7Ci0JaWYgKG51bV9kYWNzIDwgMCkKLQkJbnVtX2RhY3MgPSBTVEFDOTJIRDgzX0RBQ19DT1VOVDsKLQotCS8qIHNldCBwb3J0IFggdG8gc2VsZWN0IHRoZSBsYXN0IERBQwotCSAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkvKiBza2lwIG5vbi1EQUMgY29ubmVjdGlvbnMgKi8KKwl3aGlsZSAobnVtX2RhY3MgPj0gMCAmJgorCQkJKGdldF93Y2Fwc190eXBlKGdldF93Y2Fwcyhjb2RlYywgY29ubltudW1fZGFjc10pKQorCQkJCQkhPSBBQ19XSURfQVVEX09VVCkpCisJCW51bV9kYWNzLS07CisJLyogc2V0IHBvcnQgRSBhbmQgRiB0byBzZWxlY3QgdGhlIGxhc3QgREFDICovCisJaWYgKG51bV9kYWNzID49IDApIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHhFLCAwLAogCQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHhGLCAwLAorCQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKKwl9CiAKIAljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHN0YWM5MmhkX3Byb2NfaG9vazsKIApAQCAtNTQzMSw2ICs1NDUxLDU0IEBACiAJCXJldHVybiAwOwogfQogCisvKiBIUCBkdjcgYmFzcyBzd2l0Y2ggLSBHUElPNSAqLworI2RlZmluZSBzdGFjX2hwX2Jhc3NfZ3Bpb19pbmZvCXNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8KK3N0YXRpYyBpbnQgc3RhY19ocF9iYXNzX2dwaW9fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gISEoc3BlYy0+Z3Bpb19kYXRhICYgMHgyMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhY19ocF9iYXNzX2dwaW9fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBncGlvX2RhdGE7CisKKwlncGlvX2RhdGEgPSAoc3BlYy0+Z3Bpb19kYXRhICYgfjB4MjApIHwKKwkJKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID8gMHgyMCA6IDApOworCWlmIChncGlvX2RhdGEgPT0gc3BlYy0+Z3Bpb19kYXRhKQorCQlyZXR1cm4gMDsKKwlzcGVjLT5ncGlvX2RhdGEgPSBncGlvX2RhdGE7CisJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLCBzcGVjLT5ncGlvX2Rpciwgc3BlYy0+Z3Bpb19kYXRhKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWNfaHBfYmFzc19zd19jdHJsID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pbmZvID0gc3RhY19ocF9iYXNzX2dwaW9faW5mbywKKwkuZ2V0ID0gc3RhY19ocF9iYXNzX2dwaW9fZ2V0LAorCS5wdXQgPSBzdGFjX2hwX2Jhc3NfZ3Bpb19wdXQsCit9OworCitzdGF0aWMgaW50IHN0YWNfYWRkX2hwX2Jhc3Nfc3dpdGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAoIXN0YWNfY29udHJvbF9uZXcoc3BlYywgJnN0YWNfaHBfYmFzc19zd19jdHJsLAorCQkJICAgICAgIkJhc3MgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAwKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGVjLT5ncGlvX21hc2sgfD0gMHgyMDsKKwlzcGVjLT5ncGlvX2RpciB8PSAweDIwOworCXNwZWMtPmdwaW9fZGF0YSB8PSAweDIwOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5MmhkNzFieHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CkBAIC01NjAyLDcgKzU2NzAsNiBAQAogCQkgKi8KIAkJc3BlYy0+bnVtX3NtdXhlcyA9IDE7CiAJCXNwZWMtPm51bV9kbXV4ZXMgPSAxOwotCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDE7CiAJCS8qIGZhbGx0aHJvdWdoICovCiAJY2FzZSBTVEFDX0hQX0RWNToKIAkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBkLCAweDkwMTcwMDEwKTsKQEAgLTU2MTcsOCArNTY4NCw2IEBACiAJCXNwZWMtPm51bV9kbWljcyA9IDE7CiAJCXNwZWMtPm51bV9kbXV4ZXMgPSAxOwogCQlzcGVjLT5udW1fc211eGVzID0gMTsKLQkJLyogb3JhbmdlL3doaXRlIG11dGUgbGVkIG9uIEdQSU8zLCBvcmFuZ2U9MCwgd2hpdGU9MSAqLwotCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7CiAJCWJyZWFrOwogCX0KIApAQCAtNTY0MCw3ICs1NzA1LDcgQEAKIAkJfQogCX0KIAotCWlmIChmaW5kX211dGVfbGVkX2dwaW8oY29kZWMpKQorCWlmIChmaW5kX211dGVfbGVkX2dwaW8oY29kZWMsIDEpKQogCQlzbmRfcHJpbnRkKCJtdXRlIExFRCBncGlvICVkIHBvbGFyaXR5ICVkXG4iLAogCQkJCXNwZWMtPmdwaW9fbGVkLAogCQkJCXNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KTsKQEAgLTU2NzQsNiArNTczOSwxNSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIGVuYWJsZSBiYXNzIG9uIEhQIGR2NyAqLworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gU1RBQ19IUF9EVjUpIHsKKwkJdW5zaWduZWQgaW50IGNhcDsKKwkJY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCAweDEsIEFDX1BBUl9HUElPX0NBUCk7CisJCWNhcCAmPSBBQ19HUElPX0lPX0NPVU5UOworCQlpZiAoY2FwID49IDYpCisJCQlzdGFjX2FkZF9ocF9iYXNzX3N3aXRjaChjb2RlYyk7CisJfQorCiAJY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBzdGFjOTJoZDd4X3Byb2NfaG9vazsKIAogCXJldHVybiAwOwpAQCAtNjE3Miw4ICs2MjQ2LDEzIEBACiAgCXsgLmlkID0gMHg4Mzg0NzZhNywgLm5hbWUgPSAiU1RBQzkyNTREIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyMDUgfSwKIAl7IC5pZCA9IDB4MTExZDc2MDMsIC5uYW1lID0gIjkySEQ3NUIzWDUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDcxYnh4fSwKIAl7IC5pZCA9IDB4MTExZDc2MDQsIC5uYW1lID0gIjkySEQ4M0MxWDUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2ZDQsIC5uYW1lID0gIjkySEQ4M0MxQzUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKIAl7IC5pZCA9IDB4MTExZDc2MDUsIC5uYW1lID0gIjkySEQ4MUIxWDUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKIAl7IC5pZCA9IDB4MTExZDc2ZDUsIC5uYW1lID0gIjkySEQ4MUIxQzUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2NjYsIC5uYW1lID0gIjkySEQ4OEIzIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCisJeyAuaWQgPSAweDExMWQ3NjY3LCAubmFtZSA9ICI5MkhEODhCMSIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAorCXsgLmlkID0gMHgxMTFkNzY2OCwgLm5hbWUgPSAiOTJIRDg4QjIiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2NjksIC5uYW1lID0gIjkySEQ4OEI0IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCiAJeyAuaWQgPSAweDExMWQ3NjA4LCAubmFtZSA9ICI5MkhENzVCMlg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3MWJ4eH0sCiAJeyAuaWQgPSAweDExMWQ3Njc0LCAubmFtZSA9ICI5MkhENzNEMVg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3M3h4IH0sCiAJeyAuaWQgPSAweDExMWQ3Njc1LCAubmFtZSA9ICI5MkhENzNDMVg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3M3h4IH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwppbmRleCBiNzBlMjZhLi45ZGRjMzczIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKQEAgLTU0LDYgKzU0LDggQEAKICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKIAorI2RlZmluZSBOSURfTUFQUElORwkJKC0xKQorCiAvKiBhbXAgdmFsdWVzICovCiAjZGVmaW5lIEFNUF9WQUxfSURYX1NISUZUCTE5CiAjZGVmaW5lIEFNUF9WQUxfSURYX01BU0sJKDB4MGY8PDE5KQpAQCAtMTU3LDYgKzE1OSwxOSBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IHZpYV9zcGVjICogdmlhX25ld19zcGVjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB2aWFfc3BlYyAqc3BlYzsKKworCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCWlmIChzcGVjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJY29kZWMtPnNwZWMgPSBzcGVjOworCXNwZWMtPmNvZGVjID0gY29kZWM7CisJcmV0dXJuIHNwZWM7Cit9CisKIHN0YXRpYyBlbnVtIFZJQV9IREFfQ09ERUMgZ2V0X2NvZGVjX3R5cGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJdTMyIHZlbmRvcl9pZCA9IGNvZGVjLT52ZW5kb3JfaWQ7CkBAIC00NDMsMTEgKzQ1OCwyNyBAQAogCWlmICgha25ldy0+bmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKGdldF9hbXBfbmlkXyh2YWwpKQotCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgZ2V0X2FtcF9uaWRfKHZhbCk7CisJCWtuZXctPnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUc7CiAJa25ldy0+cHJpdmF0ZV92YWx1ZSA9IHZhbDsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp2aWFfY2xvbmVfY29udHJvbChzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMsCisJCQkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdG1wbCkKK3sKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKworCXNuZF9hcnJheV9pbml0KCZzcGVjLT5rY3Rscywgc2l6ZW9mKCprbmV3KSwgMzIpOworCWtuZXcgPSBzbmRfYXJyYXlfbmV3KCZzcGVjLT5rY3Rscyk7CisJaWYgKCFrbmV3KQorCQlyZXR1cm4gTlVMTDsKKwkqa25ldyA9ICp0bXBsOworCWtuZXctPm5hbWUgPSBrc3RyZHVwKHRtcGwtPm5hbWUsIEdGUF9LRVJORUwpOworCWlmICgha25ldy0+bmFtZSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHZpYV9mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMTA4OCwyNCArMTExOSw5IEBACiAJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkOworCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1bnNpZ25lZCBpbnQgcGluc2VsOwogCi0Jc3dpdGNoIChzcGVjLT5jb2RlY190eXBlKSB7Ci0JY2FzZSBWVDE3MThTOgotCQluaWQgPSAweDM0OwotCQlicmVhazsKLQljYXNlIFZUMjAwMlA6Ci0JCW5pZCA9IDB4MzU7Ci0JCWJyZWFrOwotCWNhc2UgVlQxODEyOgotCQluaWQgPSAweDNkOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQluaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07Ci0JCWJyZWFrOwotCX0KIAkvKiB1c2UgISEgdG8gdHJhbnNsYXRlIGNvbm4gc2VsIDIgZm9yIFZUMTcxOFMgKi8KIAlwaW5zZWwgPSAhIXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAogCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLApAQCAtMTEyNywyOSArMTE0MywyNCBAQAogCX0KIH0KIAorc3RhdGljIGhkYV9uaWRfdCBzaWRlX211dGVfY2hhbm5lbChzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMpCit7CisJc3dpdGNoIChzcGVjLT5jb2RlY190eXBlKSB7CisJY2FzZSBWVDE3MDg6CQlyZXR1cm4gMHgxYjsKKwljYXNlIFZUMTcwOV8xMENIOglyZXR1cm4gMHgyOTsKKwljYXNlIFZUMTcwOEJfOENIOgkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFZUMTcwOFM6CQlyZXR1cm4gMHgyNzsKKwlkZWZhdWx0OgkJcmV0dXJuIDA7CisJfQorfQorCiBzdGF0aWMgaW50IHVwZGF0ZV9zaWRlX211dGVfc3RhdHVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCS8qIG11dGUgc2lkZSBjaGFubmVsICovCiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHBhcm0gPSBzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlCiAJCT8gQU1QX09VVF9NVVRFIDogQU1QX09VVF9VTk1VVEU7Ci0JaGRhX25pZF90IHN3MzsKLQotCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgewotCWNhc2UgVlQxNzA4OgotCQlzdzMgPSAweDFiOwotCQlicmVhazsKLQljYXNlIFZUMTcwOV8xMENIOgotCQlzdzMgPSAweDI5OwotCQlicmVhazsKLQljYXNlIFZUMTcwOEJfOENIOgotCWNhc2UgVlQxNzA4UzoKLQkJc3czID0gMHgyNzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3czID0gMDsKLQkJYnJlYWs7Ci0JfQorCWhkYV9uaWRfdCBzdzMgPSBzaWRlX211dGVfY2hhbm5lbChzcGVjKTsKIAogCWlmIChzdzMpCiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHN3MywgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKQEAgLTExNjIsMjggKzExNzMsMTEgQEAKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOworCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1bnNpZ25lZCBpbnQgcGluc2VsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKIAkvKiBHZXQgSW5kZXBlbmRlbnQgTW9kZSBpbmRleCBvZiBoZWFkcGhvbmUgcGluIHdpZGdldCAqLwogCXNwZWMtPmhwX2luZGVwZW5kZW50X21vZGUgPSBzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlX2luZGV4ID09IHBpbnNlbAogCQk/IDEgOiAwOwotCi0Jc3dpdGNoIChzcGVjLT5jb2RlY190eXBlKSB7Ci0JY2FzZSBWVDE3MThTOgotCQluaWQgPSAweDM0OwotCQlwaW5zZWwgPSBwaW5zZWwgPyAyIDogMDsgLyogaW5kZXAgSFAgdXNlIEFPVzQgKGluZGV4IDIpICovCi0JCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gNDsKLQkJYnJlYWs7Ci0JY2FzZSBWVDIwMDJQOgotCQluaWQgPSAweDM1OwotCQlicmVhazsKLQljYXNlIFZUMTgxMjoKLQkJbmlkID0gMHgzZDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCQlicmVhazsKLQl9CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgcGluc2VsKTsKIAogCWlmIChzcGVjLT5tdWx0aW91dC5ocF9uaWQgJiYgc3BlYy0+bXVsdGlvdXQuaHBfbmlkCkBAIC0xMjA3LDE4ICsxMjAxLDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfaHBfbWl4ZXJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfaHBfbWl4ZXJbMl0gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiSW5kZXBlbmRlbnQgSFAiLAotCQkuY291bnQgPSAxLAogCQkuaW5mbyA9IHZpYV9pbmRlcGVuZGVudF9ocF9pbmZvLAogCQkuZ2V0ID0gdmlhX2luZGVwZW5kZW50X2hwX2dldCwKIAkJLnB1dCA9IHZpYV9pbmRlcGVuZGVudF9ocF9wdXQsCiAJfSwKLQl7IH0gLyogZW5kICovCisJeworCQkuaWZhY2UgPSBOSURfTUFQUElORywKKwkJLm5hbWUgPSAiSW5kZXBlbmRlbnQgSFAiLAorCX0sCiB9OwogCitzdGF0aWMgaW50IHZpYV9ocF9idWlsZChzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJaGRhX25pZF90IG5pZDsKKworCWtuZXcgPSB2aWFfY2xvbmVfY29udHJvbChzcGVjLCAmdmlhX2hwX21peGVyWzBdKTsKKwlpZiAoa25ldyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgeworCWNhc2UgVlQxNzE4UzoKKwkJbmlkID0gMHgzNDsKKwkJYnJlYWs7CisJY2FzZSBWVDIwMDJQOgorCQluaWQgPSAweDM1OworCQlicmVhazsKKwljYXNlIFZUMTgxMjoKKwkJbmlkID0gMHgzZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOworCQlicmVhazsKKwl9CisKKwlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkOworCWtuZXctPnByaXZhdGVfdmFsdWUgPSBuaWQ7CisKKwlrbmV3ID0gdmlhX2Nsb25lX2NvbnRyb2woc3BlYywgJnZpYV9ocF9taXhlclsxXSk7CisJaWYgKGtuZXcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJa25ldy0+c3ViZGV2aWNlID0gc2lkZV9tdXRlX2NoYW5uZWwoc3BlYyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgbm90aWZ5X2FhX3BhdGhfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlpbnQgaTsKQEAgLTEzNzYsNyArMTQwNyw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfc21hcnQ1MV9taXhlcltdID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZpYV9zbWFydDUxX21peGVyWzJdID0gewogCXsKIAkgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJIC5uYW1lID0gIlNtYXJ0IDUuMSIsCkBAIC0xMzg1LDkgKzE0MTYsMzYgQEAKIAkgLmdldCA9IHZpYV9zbWFydDUxX2dldCwKIAkgLnB1dCA9IHZpYV9zbWFydDUxX3B1dCwKIAkgfSwKLQl7fQkJCS8qIGVuZCAqLworCXsKKwkgLmlmYWNlID0gTklEX01BUFBJTkcsCisJIC5uYW1lID0gIlNtYXJ0IDUuMSIsCisJfQogfTsKIAorc3RhdGljIGludCB2aWFfc21hcnQ1MV9idWlsZChzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJaW50IGluZGV4W10gPSB7IEFVVE9fUElOX01JQywgQVVUT19QSU5fRlJPTlRfTUlDLCBBVVRPX1BJTl9MSU5FIH07CisJaGRhX25pZF90IG5pZDsKKwlpbnQgaTsKKworCWtuZXcgPSB2aWFfY2xvbmVfY29udHJvbChzcGVjLCAmdmlhX3NtYXJ0NTFfbWl4ZXJbMF0pOworCWlmIChrbmV3ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5kZXgpOyBpKyspIHsKKwkJbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2luZGV4W2ldXTsKKwkJaWYgKG5pZCkgeworCQkJa25ldyA9IHZpYV9jbG9uZV9jb250cm9sKHNwZWMsICZ2aWFfc21hcnQ1MV9taXhlclsxXSk7CisJCQlpZiAoa25ldyA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJa25ldy0+c3ViZGV2aWNlID0gbmlkOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIGNhcHR1cmUgbWl4ZXIgZWxlbWVudHMgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2dDE3MDhfY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTgxOSw4ICsxODc3LDkgQEAKIHN0YXRpYyBpbnQgdmlhX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnI7Ci0JaW50IGk7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwlpbnQgZXJyLCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9taXhlcnM7IGkrKykgewogCQllcnIgPSBzbmRfaGRhX2FkZF9uZXdfY3Rscyhjb2RlYywgc3BlYy0+bWl4ZXJzW2ldKTsKQEAgLTE4NDUsNiArMTkwNCwyNyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBhc3NpZ24gQ2FwdHVyZSBTb3VyY2UgZW51bXMgdG8gTklEICovCisJa2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJJbnB1dCBTb3VyY2UiKTsKKwlmb3IgKGkgPSAwOyBrY3RsICYmIGkgPCBrY3RsLT5jb3VudDsgaSsrKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgaSwgc3BlYy0+bXV4X25pZHNbaV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogb3RoZXIgbmlkLT5jb250cm9sIG1hcHBpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX21peGVyczsgaSsrKSB7CisJCWZvciAoa25ldyA9IHNwZWMtPm1peGVyc1tpXTsga25ldy0+bmFtZTsga25ldysrKSB7CisJCQlpZiAoa25ldy0+aWZhY2UgIT0gTklEX01BUFBJTkcpCisJCQkJY29udGludWU7CisJCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywga25ldy0+bmFtZSk7CisJCQlpZiAoa2N0bCA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCAwLAorCQkJCQkgICAgICBrbmV3LT5zdWJkZXZpY2UpOworCQl9CisJfQorCiAJLyogaW5pdCBwb3dlciBzdGF0ZXMgKi8KIAlzZXRfamFja19wb3dlcl9zdGF0ZShjb2RlYyk7CiAJYW5hbG9nX2xvd19jdXJyZW50X21vZGUoY29kZWMsIDEpOwpAQCAtMjQ4MSw5ICsyNTYxLDkgQEAKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJaWYgKHNwZWMtPmhwX211eCkKLQkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfaHBfbWl4ZXI7CisJCXZpYV9ocF9idWlsZChzcGVjKTsKIAotCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX3NtYXJ0NTFfbWl4ZXI7CisJdmlhX3NtYXJ0NTFfYnVpbGQoc3BlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI1NTQsMTIgKzI2MzQsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE3MDhfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC0yNTk3LDcgKzI2NzUsNiBAQAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gdnQxNzA4X2xvb3BiYWNrczsKICNlbmRpZgotCXNwZWMtPmNvZGVjID0gY29kZWM7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnNwZWMtPnZ0MTcwOF9ocF93b3JrLCB2dDE3MDhfdXBkYXRlX2hwX2phY2tfc3RhdGUpOwogCXJldHVybiAwOwogfQpAQCAtMzAxMCw5ICszMDg3LDkgQEAKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJaWYgKHNwZWMtPmhwX211eCkKLQkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfaHBfbWl4ZXI7CisJCXZpYV9ocF9idWlsZChzcGVjKTsKIAotCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX3NtYXJ0NTFfbWl4ZXI7CisJdmlhX3NtYXJ0NTFfYnVpbGQoc3BlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTMwMzIsMTIgKzMxMDksMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAllcnIgPSB2dDE3MDlfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CiAJCXZpYV9mcmVlKGNvZGVjKTsKQEAgLTMxMjYsMTIgKzMyMDEsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAllcnIgPSB2dDE3MDlfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CiAJCXZpYV9mcmVlKGNvZGVjKTsKQEAgLTM1ODEsOSArMzY1NCw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0zNjA1LDEyICszNjc4LDEwIEBACiAJaWYgKGdldF9jb2RlY190eXBlKGNvZGVjKSA9PSBWVDE3MDhCQ0UpCiAJCXJldHVybiBwYXRjaF92dDE3MDhTKGNvZGVjKTsKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcwOEJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC0zNjU3LDEyICszNzI4LDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzA4Ql9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKQEAgLTQwNzEsOSArNDE0MCw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCXJldHVybiAxOwogfQogCkBAIC00MTAzLDEyICs0MTcyLDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzA4U19wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKQEAgLTQ0NDMsNyArNDUxMCw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQ0NjQsMTIgKzQ1MzEsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE3MDJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC00ODY1LDkgKzQ5MzAsOSBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCi0Jc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfc21hcnQ1MV9taXhlcjsKKwl2aWFfc21hcnQ1MV9idWlsZChzcGVjKTsKIAogCXJldHVybiAxOwogfQpAQCAtNDg4OCwxMiArNDk1MywxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcxOFNfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC01MDE0LDYgKzUwNzcsNyBAQAogCXsKIAkgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJIC5uYW1lID0gIkRpZ2l0YWwgTWljIENhcHR1cmUgU3dpdGNoIiwKKwkgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDI2LAogCSAuY291bnQgPSAxLAogCSAuaW5mbyA9IHZ0MTcxNnNfZG1pY19pbmZvLAogCSAuZ2V0ID0gdnQxNzE2c19kbWljX2dldCwKQEAgLTUzNjEsOSArNTQyNSw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC01Mzg0LDEyICs1NDQ4LDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzE2U19wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKQEAgLTU3MTksNyArNTc4MSw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTU3NDEsMTIgKzU4MDMsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDIwMDJQX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtNjA3MCw3ICs2MTMwLDcgQEAKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJaWYgKHNwZWMtPmhwX211eCkKLQkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfaHBfbWl4ZXI7CisJCXZpYV9ocF9idWlsZChzcGVjKTsKIAogCXJldHVybiAxOwogfQpAQCAtNjA5MiwxMiArNjE1MiwxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTgxMl9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCBjN2NmZjZmLi40ZmM2ZDhiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZHhyX2VuYWJsZSwgIkVuYWJsZSBEWFIgc3VwcG9ydCBmb3IgVGVycmF0ZWMgRE1YNkZJUkUuIik7CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9pY2UxNzEyX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9pY2UxNzEyX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJQ0UsIFBDSV9ERVZJQ0VfSURfSUNFXzE3MTIpLCAwIH0sICAgLyogSUNFMTcxMiAqLwogCXsgMCwgfQogfTsKQEAgLTExODAsNiArMTE4MCwxMCBAQAogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHJ1bnRpbWUsIDAsIDMyLCAyNCk7CiAJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZod19jb25zdHJhaW50c19yYXRlcyk7CisJaWYgKGlzX3Byb19yYXRlX2xvY2tlZChpY2UpKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gUFJPX1JBVEVfREVGQVVMVDsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBQUk9fUkFURV9ERUZBVUxUOworCX0KIAogCWlmIChpY2UtPnNwZGlmLm9wcy5vcGVuKQogCQlpY2UtPnNwZGlmLm9wcy5vcGVuKGljZSwgc3Vic3RyZWFtKTsKQEAgLTExOTcsNiArMTIwMSwxMSBAQAogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHJ1bnRpbWUsIDAsIDMyLCAyNCk7CiAJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZod19jb25zdHJhaW50c19yYXRlcyk7CisJaWYgKGlzX3Byb19yYXRlX2xvY2tlZChpY2UpKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gUFJPX1JBVEVfREVGQVVMVDsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBQUk9fUkFURV9ERUZBVUxUOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggYWUyOTA3My4uYzE0OThmYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtOTQsNyArOTQsNyBAQAogCiAKIC8qIEJvdGggVlQxNzIwIGFuZCBWVDE3MjQgaGF2ZSB0aGUgc2FtZSBQQ0kgSURzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3Z0MTcyNF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfdnQxNzI0X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJQ0UsIFBDSV9ERVZJQ0VfSURfVlQxNzI0KSwgMCB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggYjk5MDE0My4uNjQzM2U2NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTQyMCw3ICs0MjAsNyBAQAogCXUzMiBpbnRfc3RhX21hc2s7CQkvKiBpbnRlcnJ1cHQgc3RhdHVzIG1hc2sgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaW50ZWw4eDBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2ludGVsOHgwX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyNDE1KSwgREVWSUNFX0lOVEVMIH0sCS8qIDgyODAxQUEgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI0MjUpLCBERVZJQ0VfSU5URUwgfSwJLyogODI5MDFBQiAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjQ0NSksIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUJBICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKaW5kZXggOWU3ZDEyZS4uMTNjZWMxZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwbS5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJdW5zaWduZWQgaW50IHBjbV9wb3Nfc2hpZnQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ludGVsOHgwbV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfaW50ZWw4eDBtX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyNDE2KSwgREVWSUNFX0lOVEVMIH0sCS8qIDgyODAxQUEgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI0MjYpLCBERVZJQ0VfSU5URUwgfSwJLyogODI5MDFBQiAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjQ0NiksIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUJBICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDdjYzM4YTEuLjZkNzk1NzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC00MTgsNyArNDE4LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEtvcmcgMTIxMiBzb3VuZGNhcmQuIik7CiBNT0RVTEVfQVVUSE9SKCJIYXJvbGRvIEdhbWFsIDxnYW1hbEBhbHRlcm5leC5jb20uYnI+Iik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfa29yZzEyMTJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2tvcmcxMjEyX2lkcykgPSB7CiAJewogCQkudmVuZG9yCSAgID0gMHgxMGI1LAogCQkuZGV2aWNlCSAgID0gMHg5MDZkLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMgYi9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYwppbmRleCAxMWI4YzY1Li4wY2NhNTYwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYworKysgYi9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX0xYNjQ2NEVTCQlQQ0lfREVWSUNFX0lEX1BMWF85MDU2CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbHg2NDY0ZXNfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2x4NjQ2NGVzX2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF9MWDY0NjRFUyksCiAJICAuc3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ESUdJR1JBTSwKIAkgIC5zdWJkZXZpY2UgPSBQQ0lfU1VCREVWSUNFX0lEX0RJR0lHUkFNX0xYNjQ2NEVTX1NFUklBTF9TVUJTWVNURU0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jIGIvc291bmQvcGNpL21hZXN0cm8zLmMKaW5kZXggNzUyODNmYmIuLmI2NGU3ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jCisrKyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCkBAIC04NjEsNyArODYxLDcgQEAKIC8qCiAgKiBwY2kgaWRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbTNfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX20zX2lkcykgPSB7CiAJe1BDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPXzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJIFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsIDB4ZmZmZjAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9FU1MsIFBDSV9ERVZJQ0VfSURfRVNTX0FMTEVHUk8sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwppbmRleCBhODNkMTk2Li43ZThlN2RhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKQEAgLTYwLDcgKzYwLDcgQEAKIC8qCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9taXhhcnRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX21peGFydF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoTU9UT1JPTEEsIDB4MDAwMyksIDAsIH0sIC8qIE1DODI0MCAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKaW5kZXggOTdhMDczMS4uNWE2MDQ5MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMKKysrIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogLyoKICAqIFBDSSBpZHMKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9ubTI1Nl9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfbm0yNTZfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZBVl9BVURJTyksIDB9LAogCXtQQ0lfVkRFVklDRShORU9NQUdJQywgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlpYX0FVRElPKSwgMH0sCiAJe1BDSV9WREVWSUNFKE5FT01BR0lDLCBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2WExfUExVU19BVURJTyksIDB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9NYWtlZmlsZSBiL3NvdW5kL3BjaS9veHlnZW4vTWFrZWZpbGUKaW5kZXggMzg5OTQxYy4uYWNkOGYxNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9NYWtlZmlsZQorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogc25kLWhpZmllci1vYmpzIDo9IGhpZmllci5vCiBzbmQtb3h5Z2VuLW9ianMgOj0gb3h5Z2VuLm8KIHNuZC12aXJ0dW9zby1vYmpzIDo9IHZpcnR1b3NvLm8geG9uYXJfbGliLm8gXAotCXhvbmFyX3BjbTE3OXgubyB4b25hcl9jczQzeHgubyB4b25hcl9oZG1pLm8KKwl4b25hcl9wY20xNzl4Lm8geG9uYXJfY3M0M3h4Lm8geG9uYXJfd204N3g2Lm8geG9uYXJfaGRtaS5vCiAKIG9iai0kKENPTkZJR19TTkRfT1hZR0VOX0xJQikgKz0gc25kLW94eWdlbi1saWIubwogb2JqLSQoQ09ORklHX1NORF9ISUZJRVIpICs9IHNuZC1oaWZpZXIubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYyBiL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKaW5kZXggZTNjMjI5Yi4uNWE4N2Q2OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCkBAIC00OCw3ICs0OCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhpZmllcl9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGhpZmllcl9pZHMpID0gewogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0YzMsIDB4MTcxMCkgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTEpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCmluZGV4IGFjYmVkZWIuLjI4OWNiNGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uYwpAQCAtNzIsNyArNzIsNyBAQAogCU1PREVMX0NMQVJPX0hBTE8sCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBveHlnZW5faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShveHlnZW5faWRzKSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMGIwLCAweDAyMTYpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTBiMCwgMHgwMjE4KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwYjAsIDB4MDIxOSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYyBiL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYwppbmRleCA2YWNjYWY5Li5mMDNhMmYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCkBAIC00MCw3ICs0MCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHhvbmFyX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeG9uYXJfaWRzKSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgyNjkpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4Mjc1KSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODJiNykgfSwKQEAgLTQ5LDYgKzQ5LDcgQEAKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzNGYpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzVjKSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM1ZCkgfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzOGUpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKIAl7IH0KIH07CkBAIC02MSw2ICs2Miw4IEBACiAJCXJldHVybiAwOwogCWlmIChnZXRfeG9uYXJfY3M0M3h4X21vZGVsKGNoaXAsIGlkKSA+PSAwKQogCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X3hvbmFyX3dtODd4Nl9tb2RlbChjaGlwLCBpZCkgPj0gMCkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vd204NzY2LmggYi9zb3VuZC9wY2kvb3h5Z2VuL3dtODc2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZTg0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3dtODc2Ni5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgV004NzY2X0hfSU5DTFVERUQKKyNkZWZpbmUgV004NzY2X0hfSU5DTFVERUQKKworI2RlZmluZSBXTTg3NjZfTERBMQkJMHgwMAorI2RlZmluZSBXTTg3NjZfUkRBMQkJMHgwMQorI2RlZmluZSBXTTg3NjZfREFDX0NUUkwJCTB4MDIKKyNkZWZpbmUgV004NzY2X0lOVF9DVFJMCQkweDAzCisjZGVmaW5lIFdNODc2Nl9MREEyCQkweDA0CisjZGVmaW5lIFdNODc2Nl9SREEyCQkweDA1CisjZGVmaW5lIFdNODc2Nl9MREEzCQkweDA2CisjZGVmaW5lIFdNODc2Nl9SREEzCQkweDA3CisjZGVmaW5lIFdNODc2Nl9NQVNUREEJCTB4MDgKKyNkZWZpbmUgV004NzY2X0RBQ19DVFJMMgkweDA5CisjZGVmaW5lIFdNODc2Nl9EQUNfQ1RSTDMJMHgwYQorI2RlZmluZSBXTTg3NjZfTVVURTEJCTB4MGMKKyNkZWZpbmUgV004NzY2X01VVEUyCQkweDBmCisjZGVmaW5lIFdNODc2Nl9SRVNFVAkJMHgxZgorCisvKiBMREF4L1JEQXgvTUFTVERBICovCisjZGVmaW5lIFdNODc2Nl9BVFRfTUFTSwkJMHgwZmYKKyNkZWZpbmUgV004NzY2X1VQREFURQkJMHgxMDAKKy8qIERBQ19DVFJMICovCisjZGVmaW5lIFdNODc2Nl9NVVRFQUxMCQkweDAwMQorI2RlZmluZSBXTTg3NjZfREVFTVBBTEwJCTB4MDAyCisjZGVmaW5lIFdNODc2Nl9QV0ROCQkweDAwNAorI2RlZmluZSBXTTg3NjZfQVRDCQkweDAwOAorI2RlZmluZSBXTTg3NjZfSVpECQkweDAxMAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9NQVNLCTB4MDYwCisjZGVmaW5lIFdNODc2Nl9QTF9MRUZUX01VVEUJMHgwMDAKKyNkZWZpbmUgV004NzY2X1BMX0xFRlRfTEVGVAkweDAyMAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9SSUdIVAkweDA0MAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9MUk1JWAkweDA2MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTUFTSwkweDE4MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTVVURQkweDAwMAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTEVGVAkweDA4MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfUklHSFQJMHgxMDAKKyNkZWZpbmUgV004NzY2X1BMX1JJR0hUX0xSTUlYCTB4MTgwCisvKiBJTlRfQ1RSTCAqLworI2RlZmluZSBXTTg3NjZfRk1UX01BU0sJCTB4MDAzCisjZGVmaW5lIFdNODc2Nl9GTVRfUkpVU1QJMHgwMDAKKyNkZWZpbmUgV004NzY2X0ZNVF9MSlVTVAkweDAwMQorI2RlZmluZSBXTTg3NjZfRk1UX0kyUwkJMHgwMDIKKyNkZWZpbmUgV004NzY2X0ZNVF9EU1AJCTB4MDAzCisjZGVmaW5lIFdNODc2Nl9MUlAJCTB4MDA0CisjZGVmaW5lIFdNODc2Nl9CQ1AJCTB4MDA4CisjZGVmaW5lIFdNODc2Nl9JV0xfTUFTSwkJMHgwMzAKKyNkZWZpbmUgV004NzY2X0lXTF8xNgkJMHgwMDAKKyNkZWZpbmUgV004NzY2X0lXTF8yMAkJMHgwMTAKKyNkZWZpbmUgV004NzY2X0lXTF8yNAkJMHgwMjAKKyNkZWZpbmUgV004NzY2X0lXTF8zMgkJMHgwMzAKKyNkZWZpbmUgV004NzY2X1BIQVNFX01BU0sJMHgxYzAKKy8qIERBQ19DVFJMMiAqLworI2RlZmluZSBXTTg3NjZfWkNECQkweDAwMQorI2RlZmluZSBXTTg3NjZfRFpGTV9NQVNLCTB4MDA2CisjZGVmaW5lIFdNODc2Nl9ETVVURV9NQVNLCTB4MDM4CisjZGVmaW5lIFdNODc2Nl9ERUVNUF9NQVNLCTB4MWMwCisvKiBEQUNfQ1RSTDMgKi8KKyNkZWZpbmUgV004NzY2X0RBQ1BEX01BU0sJMHgwMGUKKyNkZWZpbmUgV004NzY2X1BXUkROQUxMCQkweDAxMAorI2RlZmluZSBXTTg3NjZfTVMJCTB4MDIwCisjZGVmaW5lIFdNODc2Nl9SQVRFX01BU0sJMHgxYzAKKyNkZWZpbmUgV004NzY2X1JBVEVfMTI4CQkweDAwMAorI2RlZmluZSBXTTg3NjZfUkFURV8xOTIJCTB4MDQwCisjZGVmaW5lIFdNODc2Nl9SQVRFXzI1NgkJMHgwODAKKyNkZWZpbmUgV004NzY2X1JBVEVfMzg0CQkweDBjMAorI2RlZmluZSBXTTg3NjZfUkFURV81MTIJCTB4MTAwCisjZGVmaW5lIFdNODc2Nl9SQVRFXzc2OAkJMHgxNDAKKy8qIE1VVEUxICovCisjZGVmaW5lIFdNODc2Nl9NUEQxCQkweDA0MAorLyogTVVURTIgKi8KKyNkZWZpbmUgV004NzY2X01QRDIJCTB4MDIwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi93bTg3NzYuaCBiL3NvdW5kL3BjaS9veHlnZW4vd204Nzc2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5NmY1NgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vd204Nzc2LmgKQEAgLTAsMCArMSwxNzcgQEAKKyNpZm5kZWYgV004Nzc2X0hfSU5DTFVERUQKKyNkZWZpbmUgV004Nzc2X0hfSU5DTFVERUQKKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIgbmFtZXMgYXJlIGZyb206CisgKiB3bTg3NzYuaCAgLS0gIFdNODc3NiBBU29DIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBXTTg3NzZfSFBMVk9MCQkweDAwCisjZGVmaW5lIFdNODc3Nl9IUFJWT0wJCTB4MDEKKyNkZWZpbmUgV004Nzc2X0hQTUFTVEVSCQkweDAyCisjZGVmaW5lIFdNODc3Nl9EQUNMVk9MCQkweDAzCisjZGVmaW5lIFdNODc3Nl9EQUNSVk9MCQkweDA0CisjZGVmaW5lIFdNODc3Nl9EQUNNQVNURVIJMHgwNQorI2RlZmluZSBXTTg3NzZfUEhBU0VTV0FQCTB4MDYKKyNkZWZpbmUgV004Nzc2X0RBQ0NUUkwxCQkweDA3CisjZGVmaW5lIFdNODc3Nl9EQUNNVVRFCQkweDA4CisjZGVmaW5lIFdNODc3Nl9EQUNDVFJMMgkJMHgwOQorI2RlZmluZSBXTTg3NzZfREFDSUZDVFJMCTB4MGEKKyNkZWZpbmUgV004Nzc2X0FEQ0lGQ1RSTAkweDBiCisjZGVmaW5lIFdNODc3Nl9NU1RSQ1RSTAkJMHgwYworI2RlZmluZSBXTTg3NzZfUFdSRE9XTgkJMHgwZAorI2RlZmluZSBXTTg3NzZfQURDTFZPTAkJMHgwZQorI2RlZmluZSBXTTg3NzZfQURDUlZPTAkJMHgwZgorI2RlZmluZSBXTTg3NzZfQUxDQ1RSTDEJCTB4MTAKKyNkZWZpbmUgV004Nzc2X0FMQ0NUUkwyCQkweDExCisjZGVmaW5lIFdNODc3Nl9BTENDVFJMMwkJMHgxMgorI2RlZmluZSBXTTg3NzZfTk9JU0VHQVRFCTB4MTMKKyNkZWZpbmUgV004Nzc2X0xJTUlURVIJCTB4MTQKKyNkZWZpbmUgV004Nzc2X0FEQ01VWAkJMHgxNQorI2RlZmluZSBXTTg3NzZfT1VUTVVYCQkweDE2CisjZGVmaW5lIFdNODc3Nl9SRVNFVAkJMHgxNworCisKKy8qIEhQTFZPTC9IUFJWT0wvSFBNQVNURVIgKi8KKyNkZWZpbmUgV004Nzc2X0hQQVRUX01BU0sJMHgwN2YKKyNkZWZpbmUgV004Nzc2X0hQWkNFTgkJMHgwODAKKyNkZWZpbmUgV004Nzc2X1VQREFURQkJMHgxMDAKKworLyogREFDTFZPTC9EQUNSVk9ML0RBQ01BU1RFUiAqLworI2RlZmluZSBXTTg3NzZfREFUVF9NQVNLCTB4MGZmCisvKiNkZWZpbmUgV004Nzc2X1VQREFURQkJMHgxMDAqLworCisvKiBQSEFTRVNXQVAgKi8KKyNkZWZpbmUgV004Nzc2X1BIX01BU0sJCTB4MDAzCisKKy8qIERBQ0NUUkwxICovCisjZGVmaW5lIFdNODc3Nl9EWkNFTgkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X0FUQwkJMHgwMDIKKyNkZWZpbmUgV004Nzc2X0laRAkJMHgwMDQKKyNkZWZpbmUgV004Nzc2X1RPRAkJMHgwMDgKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfTUFTSwkweDAzMAorI2RlZmluZSBXTTg3NzZfUExfTEVGVF9NVVRFCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9QTF9MRUZUX0xFRlQJMHgwMTAKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfUklHSFQJMHgwMjAKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfTFJNSVgJMHgwMzAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX01BU0sJMHgwYzAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX01VVEUJMHgwMDAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX0xFRlQJMHgwNDAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX1JJR0hUCTB4MDgwCisjZGVmaW5lIFdNODc3Nl9QTF9SSUdIVF9MUk1JWAkweDBjMAorCisvKiBEQUNNVVRFICovCisjZGVmaW5lIFdNODc3Nl9ETVVURQkJMHgwMDEKKworLyogREFDQ1RSTDIgKi8KKyNkZWZpbmUgV004Nzc2X0RFRU1QSAkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X0RaRk1fTUFTSwkweDAwNgorI2RlZmluZSBXTTg3NzZfRFpGTV9OT05FCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EWkZNX0xSCQkweDAwMgorI2RlZmluZSBXTTg3NzZfRFpGTV9CT1RICTB4MDA0CisjZGVmaW5lIFdNODc3Nl9EWkZNX0VJVEhFUgkweDAwNgorCisvKiBEQUNJRkNUUkwgKi8KKyNkZWZpbmUgV004Nzc2X0RBQ0ZNVF9NQVNLCTB4MDAzCisjZGVmaW5lIFdNODc3Nl9EQUNGTVRfUkpVU1QJMHgwMDAKKyNkZWZpbmUgV004Nzc2X0RBQ0ZNVF9MSlVTVAkweDAwMQorI2RlZmluZSBXTTg3NzZfREFDRk1UX0kyUwkweDAwMgorI2RlZmluZSBXTTg3NzZfREFDRk1UX0RTUAkweDAwMworI2RlZmluZSBXTTg3NzZfREFDTFJQCQkweDAwNAorI2RlZmluZSBXTTg3NzZfREFDQkNQCQkweDAwOAorI2RlZmluZSBXTTg3NzZfREFDV0xfTUFTSwkweDAzMAorI2RlZmluZSBXTTg3NzZfREFDV0xfMTYJCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EQUNXTF8yMAkJMHgwMTAKKyNkZWZpbmUgV004Nzc2X0RBQ1dMXzI0CQkweDAyMAorI2RlZmluZSBXTTg3NzZfREFDV0xfMzIJCTB4MDMwCisKKy8qIEFEQ0lGQ1RSTCAqLworI2RlZmluZSBXTTg3NzZfQURDRk1UX01BU0sJMHgwMDMKKyNkZWZpbmUgV004Nzc2X0FEQ0ZNVF9SSlVTVAkweDAwMAorI2RlZmluZSBXTTg3NzZfQURDRk1UX0xKVVNUCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9BRENGTVRfSTJTCTB4MDAyCisjZGVmaW5lIFdNODc3Nl9BRENGTVRfRFNQCTB4MDAzCisjZGVmaW5lIFdNODc3Nl9BRENMUlAJCTB4MDA0CisjZGVmaW5lIFdNODc3Nl9BRENCQ1AJCTB4MDA4CisjZGVmaW5lIFdNODc3Nl9BRENXTF9NQVNLCTB4MDMwCisjZGVmaW5lIFdNODc3Nl9BRENXTF8xNgkJMHgwMDAKKyNkZWZpbmUgV004Nzc2X0FEQ1dMXzIwCQkweDAxMAorI2RlZmluZSBXTTg3NzZfQURDV0xfMjQJCTB4MDIwCisjZGVmaW5lIFdNODc3Nl9BRENXTF8zMgkJMHgwMzAKKyNkZWZpbmUgV004Nzc2X0FEQ01DTEsJCTB4MDQwCisjZGVmaW5lIFdNODc3Nl9BRENIUEQJCTB4MTAwCisKKy8qIE1TVFJDVFJMICovCisjZGVmaW5lIFdNODc3Nl9BRENSQVRFX01BU0sJMHgwMDcKKyNkZWZpbmUgV004Nzc2X0FEQ1JBVEVfMjU2CTB4MDAyCisjZGVmaW5lIFdNODc3Nl9BRENSQVRFXzM4NAkweDAwMworI2RlZmluZSBXTTg3NzZfQURDUkFURV81MTIJMHgwMDQKKyNkZWZpbmUgV004Nzc2X0FEQ1JBVEVfNzY4CTB4MDA1CisjZGVmaW5lIFdNODc3Nl9BRENPU1IJCTB4MDA4CisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFX01BU0sJMHgwNzAKKyNkZWZpbmUgV004Nzc2X0RBQ1JBVEVfMTI4CTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFXzE5MgkweDAxMAorI2RlZmluZSBXTTg3NzZfREFDUkFURV8yNTYJMHgwMjAKKyNkZWZpbmUgV004Nzc2X0RBQ1JBVEVfMzg0CTB4MDMwCisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFXzUxMgkweDA0MAorI2RlZmluZSBXTTg3NzZfREFDUkFURV83NjgJMHgwNTAKKyNkZWZpbmUgV004Nzc2X0RBQ01TCQkweDA4MAorI2RlZmluZSBXTTg3NzZfQURDTVMJCTB4MTAwCisKKy8qIFBXUkRPV04gKi8KKyNkZWZpbmUgV004Nzc2X1BEV04JCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9BRENQRAkJMHgwMDIKKyNkZWZpbmUgV004Nzc2X0RBQ1BECQkweDAwNAorI2RlZmluZSBXTTg3NzZfSFBQRAkJMHgwMDgKKyNkZWZpbmUgV004Nzc2X0FJTlBECQkweDA0MAorCisvKiBBRENMVk9ML0FEQ1JWT0wgKi8KKyNkZWZpbmUgV004Nzc2X0FHTUFTSwkJMHgwZmYKKyNkZWZpbmUgV004Nzc2X1pDQQkJMHgxMDAKKworLyogQUxDQ1RSTDEgKi8KKyNkZWZpbmUgV004Nzc2X0xDVF9NQVNLCQkweDAwZgorI2RlZmluZSBXTTg3NzZfTUFYR0FJTl9NQVNLCTB4MDcwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9NQVNLCTB4MTgwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9MSU1JVEVSCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9BTENfUklHSFQgMHgwODAKKyNkZWZpbmUgV004Nzc2X0xDU0VMX0FMQ19MRUZUCTB4MTAwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9BTENfU1RFUkVPCTB4MTgwCisKKy8qIEFMQ0NUUkwyICovCisjZGVmaW5lIFdNODc3Nl9ITERfTUFTSwkJMHgwMGYKKyNkZWZpbmUgV004Nzc2X0FMQ1pDCQkweDA4MAorI2RlZmluZSBXTTg3NzZfTENFTgkJMHgxMDAKKworLyogQUxDQ1RSTDMgKi8KKyNkZWZpbmUgV004Nzc2X0FUS19NQVNLCQkweDAwZgorI2RlZmluZSBXTTg3NzZfRENZX01BU0sJCTB4MGYwCisKKy8qIE5PSVNFR0FURSAqLworI2RlZmluZSBXTTg3NzZfTkdBVAkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X05HVEhfTUFTSwkweDAxYworCisvKiBMSU1JVEVSICovCisjZGVmaW5lIFdNODc3Nl9NQVhBVFRFTl9NQVNLCTB4MDBmCisjZGVmaW5lIFdNODc3Nl9UUkFOV0lOX01BU0sJMHgwNzAKKworLyogQURDTVVYICovCisjZGVmaW5lIFdNODc3Nl9BTVhfTUFTSwkJMHgwMWYKKyNkZWZpbmUgV004Nzc2X01VVEVSQQkJMHgwNDAKKyNkZWZpbmUgV004Nzc2X01VVEVMQQkJMHgwODAKKyNkZWZpbmUgV004Nzc2X0xSQk9USAkJMHgxMDAKKworLyogT1VUTVVYICovCisjZGVmaW5lIFdNODc3Nl9NWF9EQUMJCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9NWF9BVVgJCTB4MDAyCisjZGVmaW5lIFdNODc3Nl9NWF9CWVBBU1MJMHgwMDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyLmggYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyLmgKaW5kZXggODliM2VkOC4uYjM1MzQzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hci5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXIuaApAQCAtMzUsNiArMzUsOCBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CiBpbnQgZ2V0X3hvbmFyX2NzNDN4eF9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKK2ludCBnZXRfeG9uYXJfd204N3g2X21vZGVsKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwogCiAvKiBIRE1JIGhlbHBlciBmdW5jdGlvbnMgKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl93bTg3eDYuYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1NGRiMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKQEAgLTAsMCArMSwxMDIxIEBACisvKgorICogY2FyZCBkcml2ZXIgZm9yIG1vZGVscyB3aXRoIFdNODc3Ni9XTTg3NjYgREFDcyAoWG9uYXIgRFMpCisgKgorICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqCisgKgorICogIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKgorICogIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAqIFhvbmFyIERTCisgKiAtLS0tLS0tLQorICoKKyAqIENNSTg3ODg6CisgKgorICogU1BJIDAgLT4gV004NzY2IChzdXJyb3VuZCwgY2VudGVyL0xGRSwgYmFjaykKKyAqIFNQSSAxIC0+IFdNODc3NiAoZnJvbnQsIGlucHV0KQorICoKKyAqIEdQSU8gNCA8LSBoZWFkcGhvbmUgZGV0ZWN0CisgKiBHUElPIDYgLT4gcm91dGUgaW5wdXQgamFjayB0byBpbnB1dCAxLzIgKDEvMCkKKyAqIEdQSU8gNyAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCisgKiBHUElPIDggLT4gZW5hYmxlIG91dHB1dCB0byBzcGVha2VycworICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgInhvbmFyLmgiCisjaW5jbHVkZSAid204Nzc2LmgiCisjaW5jbHVkZSAid204NzY2LmgiCisKKyNkZWZpbmUgR1BJT19EU19IUF9ERVRFQ1QJMHgwMDEwCisjZGVmaW5lIEdQSU9fRFNfSU5QVVRfUk9VVEUJMHgwMDQwCisjZGVmaW5lIEdQSU9fRFNfT1VUUFVUX0VOQUJMRQkweDAxODAKKworI2RlZmluZSBMQ19DT05UUk9MX0xJTUlURVIJMHg0MDAwMDAwMAorI2RlZmluZSBMQ19DT05UUk9MX0FMQwkJMHgyMDAwMDAwMAorCitzdHJ1Y3QgeG9uYXJfd204N3g2IHsKKwlzdHJ1Y3QgeG9uYXJfZ2VuZXJpYyBnZW5lcmljOworCXUxNiB3bTg3NzZfcmVnc1sweDE3XTsKKwl1MTYgd204NzY2X3JlZ3NbMHgxMF07CisJc3RydWN0IHNuZF9rY29udHJvbCAqbGNfY29udHJvbHNbMTNdOworfTsKKworc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJb3h5Z2VuX3dyaXRlX3NwaShjaGlwLCBPWFlHRU5fU1BJX1RSSUdHRVIgfAorCQkJIE9YWUdFTl9TUElfREFUQV9MRU5HVEhfMiB8CisJCQkgT1hZR0VOX1NQSV9DTE9DS18xNjAgfAorCQkJICgxIDw8IE9YWUdFTl9TUElfQ09ERUNfU0hJRlQpIHwKKwkJCSBPWFlHRU5fU1BJX0NFTl9MQVRDSF9DTE9DS19MTywKKwkJCSAocmVnIDw8IDkpIHwgdmFsdWUpOworCWlmIChyZWcgPCBBUlJBWV9TSVpFKGRhdGEtPndtODc3Nl9yZWdzKSkgeworCQlpZiAocmVnID49IFdNODc3Nl9IUExWT0wgfHwgcmVnIDw9IFdNODc3Nl9EQUNNQVNURVIpCisJCQl2YWx1ZSAmPSB+V004Nzc2X1VQREFURTsKKwkJZGF0YS0+d204Nzc2X3JlZ3NbcmVnXSA9IHZhbHVlOworCX0KK30KKworc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlX2NhY2hlZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWlmIChyZWcgPj0gQVJSQVlfU0laRShkYXRhLT53bTg3NzZfcmVncykgfHwKKwkgICAgdmFsdWUgIT0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnXSkKKwkJd204Nzc2X3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB3bTg3NjZfd3JpdGUoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCSB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlveHlnZW5fd3JpdGVfc3BpKGNoaXAsIE9YWUdFTl9TUElfVFJJR0dFUiB8CisJCQkgT1hZR0VOX1NQSV9EQVRBX0xFTkdUSF8yIHwKKwkJCSBPWFlHRU5fU1BJX0NMT0NLXzE2MCB8CisJCQkgKDAgPDwgT1hZR0VOX1NQSV9DT0RFQ19TSElGVCkgfAorCQkJIE9YWUdFTl9TUElfQ0VOX0xBVENIX0NMT0NLX0xPLAorCQkJIChyZWcgPDwgOSkgfCB2YWx1ZSk7CisJaWYgKHJlZyA8IEFSUkFZX1NJWkUoZGF0YS0+d204NzY2X3JlZ3MpKQorCQlkYXRhLT53bTg3NjZfcmVnc1tyZWddID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc2Nl93cml0ZV9jYWNoZWQoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlpZiAocmVnID49IEFSUkFZX1NJWkUoZGF0YS0+d204NzY2X3JlZ3MpIHx8CisJICAgIHZhbHVlICE9IGRhdGEtPndtODc2Nl9yZWdzW3JlZ10pIHsKKwkJaWYgKChyZWcgPj0gV004NzY2X0xEQTEgJiYgcmVnIDw9IFdNODc2Nl9SREExKSB8fAorCQkgICAgKHJlZyA+PSBXTTg3NjZfTERBMiAmJiByZWcgPD0gV004NzY2X01BU1REQSkpCisJCQl2YWx1ZSAmPSB+V004NzY2X1VQREFURTsKKwkJd204NzY2X3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOworCX0KK30KKworc3RhdGljIHZvaWQgd204Nzc2X3JlZ2lzdGVyc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X1JFU0VULCAwKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ0NUUkwxLCBXTTg3NzZfRFpDRU4gfAorCQkgICAgIFdNODc3Nl9QTF9MRUZUX0xFRlQgfCBXTTg3NzZfUExfUklHSFRfUklHSFQpOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTVVURSwgY2hpcC0+ZGFjX211dGUgPyBXTTg3NzZfRE1VVEUgOiAwKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ0lGQ1RSTCwKKwkJICAgICBXTTg3NzZfREFDRk1UX0xKVVNUIHwgV004Nzc2X0RBQ1dMXzI0KTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ0lGQ1RSTCwKKwkJICAgICBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDSUZDVFJMXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9NU1RSQ1RSTCwgZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X01TVFJDVFJMXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9QV1JET1dOLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfUFdSRE9XTl0pOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfSFBMVk9MLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9IUFJWT0wsIGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdIHwKKwkJICAgICBXTTg3NzZfVVBEQVRFKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ0xWT0wsIGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9BRENSVk9MLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDUlZPTF0pOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfQURDTVVYLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDTVVYXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9EQUNMVk9MLCBjaGlwLT5kYWNfdm9sdW1lWzBdKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ1JWT0wsIGNoaXAtPmRhY192b2x1bWVbMV0gfCBXTTg3NzZfVVBEQVRFKTsKK30KKworc3RhdGljIHZvaWQgd204NzY2X3JlZ2lzdGVyc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9SRVNFVCwgMCk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9JTlRfQ1RSTCwgV004NzY2X0ZNVF9MSlVTVCB8IFdNODc2Nl9JV0xfMjQpOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfREFDX0NUUkwyLAorCQkgICAgIFdNODc2Nl9aQ0QgfCAoY2hpcC0+ZGFjX211dGUgPyBXTTg3NjZfRE1VVEVfTUFTSyA6IDApKTsKKwl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X0xEQTEsIGNoaXAtPmRhY192b2x1bWVbMl0pOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfUkRBMSwgY2hpcC0+ZGFjX3ZvbHVtZVszXSk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9MREEyLCBjaGlwLT5kYWNfdm9sdW1lWzRdKTsKKwl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X1JEQTIsIGNoaXAtPmRhY192b2x1bWVbNV0pOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfTERBMywgY2hpcC0+ZGFjX3ZvbHVtZVs2XSk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9SREEzLCBjaGlwLT5kYWNfdm9sdW1lWzddIHwgV004NzY2X1VQREFURSk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc3Nl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSA9ICgweDc5IC0gNjApIHwgV004Nzc2X0hQWkNFTjsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBSVk9MXSA9ICgweDc5IC0gNjApIHwgV004Nzc2X0hQWkNFTjsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDSUZDVFJMXSA9CisJCVdNODc3Nl9BRENGTVRfTEpVU1QgfCBXTTg3NzZfQURDV0xfMjQgfCBXTTg3NzZfQURDTUNMSzsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfTVNUUkNUUkxdID0KKwkJV004Nzc2X0FEQ1JBVEVfMjU2IHwgV004Nzc2X0RBQ1JBVEVfMjU2OworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9QV1JET1dOXSA9IFdNODc3Nl9IUFBEOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSA9IDB4YTUgfCBXTTg3NzZfWkNBOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENSVk9MXSA9IDB4YTUgfCBXTTg3NzZfWkNBOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdID0gMHgwMDE7CisJd204Nzc2X3JlZ2lzdGVyc19pbml0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB4b25hcl9kc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT5nZW5lcmljLmFudGlfcG9wX2RlbGF5ID0gMzAwOworCWRhdGEtPmdlbmVyaWMub3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0RTX09VVFBVVF9FTkFCTEU7CisKKwl3bTg3NzZfaW5pdChjaGlwKTsKKwl3bTg3NjZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CisKKwlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19EU19JTlBVVF9ST1VURSwKKwkJCSAgICAgIEdQSU9fRFNfSFBfREVURUNUIHwgR1BJT19EU19JTlBVVF9ST1VURSk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19EU19JTlBVVF9ST1VURSk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fSU5URVJSVVBUX01BU0ssIEdQSU9fRFNfSFBfREVURUNUKTsKKwljaGlwLT5pbnRlcnJ1cHRfbWFzayB8PSBPWFlHRU5fSU5UX0dQSU87CisKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworCisJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIldNODc3NiIpOworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJXTTg3NjYiKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX2Rpc2FibGVfb3V0cHV0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB4b25hcl9kc19zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfZHNfY2xlYW51cChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204Nzc2X3JlZ2lzdGVyc19pbml0KGNoaXApOworCXdtODc2Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB3bTg3NzZfYWRjX2hhcmR3YXJlX2ZpbHRlcih1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgKmhhcmR3YXJlKQoreworCWlmIChjaGFubmVsID09IFBDTV9BKSB7CisJCWhhcmR3YXJlLT5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzk2MDAwOworCQloYXJkd2FyZS0+cmF0ZV9tYXggPSA5NjAwMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF93bTg3eDZfZGFjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNldF93bTg3NzZfYWRjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJdTE2IHJlZzsKKworCXJlZyA9IFdNODc3Nl9BRENSQVRFXzI1NiB8IFdNODc3Nl9EQUNSQVRFXzI1NjsKKwlpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA+IDQ4MDAwKQorCQlyZWcgfD0gV004Nzc2X0FEQ09TUjsKKwl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9NU1RSQ1RSTCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3dtODc3Nl92b2x1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCB0b19jaGFuZ2U7CisKKwlpZiAoY2hpcC0+ZGFjX3ZvbHVtZVswXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzFdKSB7CisJCWlmIChjaGlwLT5kYWNfdm9sdW1lWzBdICE9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9EQUNMVk9MXSB8fAorCQkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsxXSAhPSBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfREFDUlZPTF0pIHsKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTUFTVEVSLAorCQkJCSAgICAgY2hpcC0+ZGFjX3ZvbHVtZVswXSB8IFdNODc3Nl9VUERBVEUpOworCQkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0RBQ0xWT0xdID0gY2hpcC0+ZGFjX3ZvbHVtZVswXTsKKwkJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9EQUNSVk9MXSA9IGNoaXAtPmRhY192b2x1bWVbMF07CisJCX0KKwl9IGVsc2UgeworCQl0b19jaGFuZ2UgPSAoY2hpcC0+ZGFjX3ZvbHVtZVswXSAhPQorCQkJICAgICBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfREFDTFZPTF0pIDw8IDA7CisJCXRvX2NoYW5nZSB8PSAoY2hpcC0+ZGFjX3ZvbHVtZVsxXSAhPQorCQkJICAgICAgZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0RBQ0xWT0xdKSA8PCAxOworCQlpZiAodG9fY2hhbmdlICYgMSkKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTFZPTCwgY2hpcC0+ZGFjX3ZvbHVtZVswXSB8CisJCQkJICAgICAoKHRvX2NoYW5nZSAmIDIpID8gMCA6IFdNODc3Nl9VUERBVEUpKTsKKwkJaWYgKHRvX2NoYW5nZSAmIDIpCisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ1JWT0wsCisJCQkJICAgICBjaGlwLT5kYWNfdm9sdW1lWzFdIHwgV004Nzc2X1VQREFURSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd204N3g2X3ZvbHVtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0YXRpYyBjb25zdCB1OCB3bTg3NjZfcmVnc1s2XSA9IHsKKwkJV004NzY2X0xEQTEsIFdNODc2Nl9SREExLAorCQlXTTg3NjZfTERBMiwgV004NzY2X1JEQTIsCisJCVdNODc2Nl9MREEzLCBXTTg3NjZfUkRBMywKKwl9OworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXU4IHRvX2NoYW5nZTsKKworCXVwZGF0ZV93bTg3NzZfdm9sdW1lKGNoaXApOworCWlmIChjaGlwLT5kYWNfdm9sdW1lWzJdID09IGNoaXAtPmRhY192b2x1bWVbM10gJiYKKwkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsyXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzRdICYmCisJICAgIGNoaXAtPmRhY192b2x1bWVbMl0gPT0gY2hpcC0+ZGFjX3ZvbHVtZVs1XSAmJgorCSAgICBjaGlwLT5kYWNfdm9sdW1lWzJdID09IGNoaXAtPmRhY192b2x1bWVbNl0gJiYKKwkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsyXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzddKSB7CisJCXRvX2NoYW5nZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQlpZiAoY2hpcC0+ZGFjX3ZvbHVtZVsyXSAhPQorCQkJICAgIGRhdGEtPndtODc2Nl9yZWdzW3dtODc2Nl9yZWdzW2ldXSkKKwkJCQl0b19jaGFuZ2UgPSAxOworCQlpZiAodG9fY2hhbmdlKSB7CisJCQl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X01BU1REQSwKKwkJCQkgICAgIGNoaXAtPmRhY192b2x1bWVbMl0gfCBXTTg3NjZfVVBEQVRFKTsKKwkJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQkJZGF0YS0+d204NzY2X3JlZ3Nbd204NzY2X3JlZ3NbaV1dID0KKwkJCQkJY2hpcC0+ZGFjX3ZvbHVtZVsyXTsKKwkJfQorCX0gZWxzZSB7CisJCXRvX2NoYW5nZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQl0b19jaGFuZ2UgfD0gKGNoaXAtPmRhY192b2x1bWVbMiArIGldICE9CisJCQkJICAgICAgZGF0YS0+d204NzY2X3JlZ3Nbd204NzY2X3JlZ3NbaV1dKSA8PCBpOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgKytpKQorCQkJaWYgKHRvX2NoYW5nZSAmICgxIDw8IGkpKQorCQkJCXdtODc2Nl93cml0ZShjaGlwLCB3bTg3NjZfcmVnc1tpXSwKKwkJCQkJICAgICBjaGlwLT5kYWNfdm9sdW1lWzIgKyBpXSB8CisJCQkJCSAgICAgKCh0b19jaGFuZ2UgJiAoMHgzZSA8PCBpKSkKKwkJCQkJICAgICAgPyAwIDogV004NzY2X1VQREFURSkpOworCX0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3dtODc3Nl9tdXRlKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfREFDTVVURSwKKwkJCSAgICBjaGlwLT5kYWNfbXV0ZSA/IFdNODc3Nl9ETVVURSA6IDApOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd204N3g2X211dGUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwl1cGRhdGVfd204Nzc2X211dGUoY2hpcCk7CisJd204NzY2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NjZfREFDX0NUUkwyLCBXTTg3NjZfWkNEIHwKKwkJCSAgICAoY2hpcC0+ZGFjX211dGUgPyBXTTg3NjZfRE1VVEVfTUFTSyA6IDApKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfZ3Bpb19jaGFuZ2VkKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJdTE2IGJpdHM7CisKKwliaXRzID0gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKTsKKwlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSFAgZGV0ZWN0OiAlZFxuIiwgISEoYml0cyAmIEdQSU9fRFNfSFBfREVURUNUKSk7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2JpdF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXUxNiBiaXQgPSBjdGwtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7CisJdW5zaWduZWQgaW50IHJlZ19pbmRleCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKKwlib29sIGludmVydCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMjQpICYgMTsKKworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJKChkYXRhLT53bTg3NzZfcmVnc1tyZWdfaW5kZXhdICYgYml0KSAhPSAwKSBeIGludmVydDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfYml0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdTE2IGJpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmZmZjsKKwl1MTYgcmVnX3ZhbHVlOworCXVuc2lnbmVkIGludCByZWdfaW5kZXggPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJYm9vbCBpbnZlcnQgPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDI0KSAmIDE7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJcmVnX3ZhbHVlID0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnX2luZGV4XSAmIH5iaXQ7CisJaWYgKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIF4gaW52ZXJ0KQorCQlyZWdfdmFsdWUgfD0gYml0OworCWNoYW5nZWQgPSByZWdfdmFsdWUgIT0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnX2luZGV4XTsKKwlpZiAoY2hhbmdlZCkKKwkJd204Nzc2X3dyaXRlKGNoaXAsIHJlZ19pbmRleCwgcmVnX3ZhbHVlKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaGxkWzE2XSA9IHsKKwkJIjAgbXMiLCAiMi42NyBtcyIsICI1LjMzIG1zIiwgIjEwLjYgbXMiLAorCQkiMjEuMyBtcyIsICI0Mi43IG1zIiwgIjg1LjMgbXMiLCAiMTcxIG1zIiwKKwkJIjM0MSBtcyIsICI2ODMgbXMiLCAiMS4zNyBzIiwgIjIuNzMgcyIsCisJCSI1LjQ2IHMiLCAiMTAuOSBzIiwgIjIxLjggcyIsICI0My43IHMiLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGF0a19saW1bMTFdID0geworCQkiMC4yNSBtcyIsICIwLjUgbXMiLCAiMSBtcyIsICIyIG1zIiwKKwkJIjQgbXMiLCAiOCBtcyIsICIxNiBtcyIsICIzMiBtcyIsCisJCSI2NCBtcyIsICIxMjggbXMiLCAiMjU2IG1zIiwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBhdGtfYWxjWzExXSA9IHsKKwkJIjguNDAgbXMiLCAiMTYuOCBtcyIsICIzMy42IG1zIiwgIjY3LjIgbXMiLAorCQkiMTM0IG1zIiwgIjI2OSBtcyIsICI1MzggbXMiLCAiMS4wOCBzIiwKKwkJIjIuMTUgcyIsICI0LjMgcyIsICI4LjYgcyIsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGN5X2xpbVsxMV0gPSB7CisJCSIxLjIgbXMiLCAiMi40IG1zIiwgIjQuOCBtcyIsICI5LjYgbXMiLAorCQkiMTkuMiBtcyIsICIzOC40IG1zIiwgIjc2LjggbXMiLCAiMTU0IG1zIiwKKwkJIjMwNyBtcyIsICI2MTQgbXMiLCAiMS4yMyBzIiwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBkY3lfYWxjWzExXSA9IHsKKwkJIjMzLjUgbXMiLCAiNjcuMCBtcyIsICIxMzQgbXMiLCAiMjY4IG1zIiwKKwkJIjUzNiBtcyIsICIxLjA3IHMiLCAiMi4xNCBzIiwgIjQuMjkgcyIsCisJCSI4LjU4IHMiLCAiMTcuMiBzIiwgIjM0LjMgcyIsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdHJhbndpbls4XSA9IHsKKwkJIjAgdXMiLCAiNjIuNSB1cyIsICIxMjUgdXMiLCAiMjUwIHVzIiwKKwkJIjUwMCB1cyIsICIxIG1zIiwgIjIgbXMiLCAiNCBtcyIsCisJfTsKKwl1OCBtYXg7CisJY29uc3QgY2hhciAqY29uc3QgKm5hbWVzOworCisJbWF4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiAweGY7CisJaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwlpbmZvLT5jb3VudCA9IDE7CisJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IG1heCArIDE7CisJaWYgKGluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IG1heCkKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gbWF4OworCXN3aXRjaCAoKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweDFmKSB7CisJY2FzZSBXTTg3NzZfQUxDQ1RSTDI6CisJCW5hbWVzID0gaGxkOworCQlicmVhazsKKwljYXNlIFdNODc3Nl9BTENDVFJMMzoKKwkJaWYgKCgoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDIwKSAmIDB4ZikgPT0gMCkgeworCQkJaWYgKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIExDX0NPTlRST0xfTElNSVRFUikKKwkJCQluYW1lcyA9IGF0a19saW07CisJCQllbHNlCisJCQkJbmFtZXMgPSBhdGtfYWxjOworCQl9IGVsc2UgeworCQkJaWYgKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIExDX0NPTlRST0xfTElNSVRFUikKKwkJCQluYW1lcyA9IGRjeV9saW07CisJCQllbHNlCisJCQkJbmFtZXMgPSBkY3lfYWxjOworCQl9CisJCWJyZWFrOworCWNhc2UgV004Nzc2X0xJTUlURVI6CisJCW5hbWVzID0gdHJhbndpbjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZjsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgMHhmOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg3NzZfZmllbGRfc2V0X2Zyb21fY3RsKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IHZhbHVlLCByZWdfaW5kZXgsIG1vZGU7CisJdTggbWluLCBtYXgsIHNoaWZ0OworCXUxNiBtYXNrLCByZWdfdmFsdWU7CisJYm9vbCBpbnZlcnQ7CisKKwlpZiAoKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV0gJiBXTTg3NzZfTENTRUxfTUFTSykgPT0KKwkgICAgV004Nzc2X0xDU0VMX0xJTUlURVIpCisJCW1vZGUgPSBMQ19DT05UUk9MX0xJTUlURVI7CisJZWxzZQorCQltb2RlID0gTENfQ09OVFJPTF9BTEM7CisJaWYgKCEoY3RsLT5wcml2YXRlX3ZhbHVlICYgbW9kZSkpCisJCXJldHVybjsKKworCXZhbHVlID0gY3RsLT5wcml2YXRlX3ZhbHVlICYgMHhmOworCW1pbiA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGY7CisJbWF4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiAweGY7CisJbWFzayA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmOworCXNoaWZ0ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyMCkgJiAweGY7CisJcmVnX2luZGV4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweDFmOworCWludmVydCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMjkpICYgMHgxOworCisJaWYgKGludmVydCkKKwkJdmFsdWUgPSBtYXggLSAodmFsdWUgLSBtaW4pOworCXJlZ192YWx1ZSA9IGRhdGEtPndtODc3Nl9yZWdzW3JlZ19pbmRleF07CisJcmVnX3ZhbHVlICY9IH4obWFzayA8PCBzaGlmdCk7CisJcmVnX3ZhbHVlIHw9IHZhbHVlIDw8IHNoaWZ0OworCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgcmVnX2luZGV4LCByZWdfdmFsdWUpOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9maWVsZF9zZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXU4IG1pbiwgbWF4OworCWludCBjaGFuZ2VkOworCisJbWluID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZjsKKwltYXggPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDB4ZjsKKwlpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwljaGFuZ2VkID0gdmFsdWUgIT0gKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4Zik7CisJaWYgKGNoYW5nZWQpIHsKKwkJY3RsLT5wcml2YXRlX3ZhbHVlID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIH4weGYpIHwgdmFsdWU7CisJCXdtODc3Nl9maWVsZF9zZXRfZnJvbV9jdGwoY3RsKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX2VudW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdGwtPnByaXZhdGVfdmFsdWUgJiAweGY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJcmV0dXJuIHdtODc3Nl9maWVsZF9zZXQoY3RsLCB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKTsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJcmV0dXJuIHdtODc3Nl9maWVsZF9zZXQoY3RsLCB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2hwX3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCWluZm8tPmNvdW50ID0gMjsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDB4NzkgLSA2MDsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4N2Y7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2hwX3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPQorCQlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSAmIFdNODc3Nl9IUEFUVF9NQVNLOworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0KKwkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0hQUlZPTF0gJiBXTTg3NzZfSFBBVFRfTUFTSzsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfaHBfdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCB0b191cGRhdGU7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdG9fdXBkYXRlID0gKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICE9CisJCSAgICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUExWT0xdICYgV004Nzc2X0hQQVRUX01BU0spKQorCQk8PCAwOworCXRvX3VwZGF0ZSB8PSAodmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gIT0KKwkJICAgICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdICYgV004Nzc2X0hQQVRUX01BU0spKQorCQk8PCAxOworCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9PSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSkgeworCQlpZiAodG9fdXBkYXRlKSB7CisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0hQTUFTVEVSLAorCQkJCSAgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQkJCSAgICAgV004Nzc2X0hQWkNFTiB8IFdNODc3Nl9VUERBVEUpOworCQkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0hQTFZPTF0gPQorCQkJCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIHwgV004Nzc2X0hQWkNFTjsKKwkJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdID0KKwkJCQl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSB8IFdNODc3Nl9IUFpDRU47CisJCX0KKwl9IGVsc2UgeworCQlpZiAodG9fdXBkYXRlICYgMSkKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfSFBMVk9MLAorCQkJCSAgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQkJCSAgICAgV004Nzc2X0hQWkNFTiB8CisJCQkJICAgICAoKHRvX3VwZGF0ZSAmIDIpID8gMCA6IFdNODc3Nl9VUERBVEUpKTsKKwkJaWYgKHRvX3VwZGF0ZSAmIDIpCisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0hQUlZPTCwKKwkJCQkgICAgIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIHwKKwkJCQkgICAgIFdNODc3Nl9IUFpDRU4gfCBXTTg3NzZfVVBEQVRFKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIHRvX3VwZGF0ZSAhPSAwOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9pbnB1dF9tdXhfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IG11eF9iaXQgPSBjdGwtPnByaXZhdGVfdmFsdWU7CisKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCSEhKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdICYgbXV4X2JpdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X211eF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1bnNpZ25lZCBpbnQgbXV4X2JpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKKwl1MTYgcmVnOworCWludCBjaGFuZ2VkOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCXJlZyA9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdOworCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgeworCQlyZWcgJj0gfjB4MDAzOworCQlyZWcgfD0gbXV4X2JpdDsKKwl9IGVsc2UKKwkJcmVnICY9IH5tdXhfYml0OworCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ01VWF07CisJaWYgKGNoYW5nZWQpIHsKKwkJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkJICAgICAgcmVnICYgMSA/IEdQSU9fRFNfSU5QVVRfUk9VVEUgOiAwLAorCQkJCSAgICAgIEdQSU9fRFNfSU5QVVRfUk9VVEUpOworCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ01VWCwgcmVnKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAyOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMHhhNTsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4ZmY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSAmIFdNODc3Nl9BR01BU0s7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPQorCQlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDUlZPTF0gJiBXTTg3NzZfQUdNQVNLOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9pbnB1dF92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJaW50IGNoYW5nZWQgPSAwOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSAodmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gIT0KKwkJICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSAmIFdNODc3Nl9BR01BU0spKSB8fAorCQkgICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAhPQorCQkgICAoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ1JWT0xdICYgV004Nzc2X0FHTUFTSykpOworCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgV004Nzc2X0FEQ0xWT0wsCisJCQkgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfCBXTTg3NzZfWkNBKTsKKwl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BRENSVk9MLAorCQkJICAgIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIHwgV004Nzc2X1pDQSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzNdID0geworCQkiTm9uZSIsICJQZWFrIExpbWl0ZXIiLCAiQXV0b21hdGljIExldmVsIENvbnRyb2wiCisJfTsKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCWluZm8tPmNvdW50ID0gMTsKKwlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKKwlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDMpCisJCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJaWYgKCEoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FMQ0NUUkwyXSAmIFdNODc3Nl9MQ0VOKSkKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisJZWxzZSBpZiAoKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV0gJiBXTTg3NzZfTENTRUxfTUFTSykgPT0KKwkJIFdNODc3Nl9MQ1NFTF9MSU1JVEVSKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMTsKKwllbHNlCisJCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAyOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhY3RpdmF0ZV9jb250cm9sKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IGFjY2VzczsKKworCWlmIChjdGwtPnByaXZhdGVfdmFsdWUgJiBtb2RlKQorCQlhY2Nlc3MgPSAwOworCWVsc2UKKwkJYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOworCWlmICgoY3RsLT52ZFswXS5hY2Nlc3MgJiBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkUpICE9IGFjY2VzcykgeworCQljdGwtPnZkWzBdLmFjY2VzcyBePSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sICZjdGwtPmlkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBtb2RlID0gMCwgaTsKKwl1MTYgY3RybDEsIGN0cmwyOworCWludCBjaGFuZ2VkOworCisJaWYgKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPj0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICE9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKKwlpZiAoY2hhbmdlZCkgeworCQljdGwtPnByaXZhdGVfdmFsdWUgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCQljdHJsMSA9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV07CisJCWN0cmwyID0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FMQ0NUUkwyXTsKKwkJc3dpdGNoICh2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJCWRlZmF1bHQ6CisJCQl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BTENDVFJMMiwKKwkJCQkJICAgIGN0cmwyICYgfldNODc3Nl9MQ0VOKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BTENDVFJMMSwKKwkJCQkJICAgIChjdHJsMSAmIH5XTTg3NzZfTENTRUxfTUFTSykgfAorCQkJCQkgICAgV004Nzc2X0xDU0VMX0xJTUlURVIpOworCQkJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfQUxDQ1RSTDIsCisJCQkJCSAgICBjdHJsMiB8IFdNODc3Nl9MQ0VOKTsKKwkJCW1vZGUgPSBMQ19DT05UUk9MX0xJTUlURVI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfQUxDQ1RSTDEsCisJCQkJCSAgICAoY3RybDEgJiB+V004Nzc2X0xDU0VMX01BU0spIHwKKwkJCQkJICAgIFdNODc3Nl9MQ1NFTF9BTENfU1RFUkVPKTsKKwkJCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgV004Nzc2X0FMQ0NUUkwyLAorCQkJCQkgICAgY3RybDIgfCBXTTg3NzZfTENFTik7CisJCQltb2RlID0gTENfQ09OVFJPTF9BTEM7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5sY19jb250cm9scyk7ICsraSkKKwkJCWFjdGl2YXRlX2NvbnRyb2woY2hpcCwgZGF0YS0+bGNfY29udHJvbHNbaV0sIG1vZGUpOworCX0KKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCBocGZfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbMl0gPSB7CisJCSJOb25lIiwgIkhpZ2gtcGFzcyBGaWx0ZXIiCisJfTsKKworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOworCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gMikKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMTsKKwlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGZfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCSEoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF0gJiBXTTg3NzZfQURDSFBEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGZfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCByZWc7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJcmVnID0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF0gJiB+V004Nzc2X0FEQ0hQRDsKKwlpZiAoIXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pCisJCXJlZyB8PSBXTTg3NzZfQURDSFBEOworCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF07CisJaWYgKGNoYW5nZWQpCisJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfQURDSUZDVFJMLCByZWcpOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBjaGFuZ2VkOworfQorCisjZGVmaW5lIFdNODc3Nl9CSVRfU1dJVENIKHhuYW1lLCByZWcsIGJpdCwgaW52ZXJ0LCBmbGFncykgeyBcCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKwkubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLCBcCisJLmdldCA9IHdtODc3Nl9iaXRfc3dpdGNoX2dldCwgXAorCS5wdXQgPSB3bTg3NzZfYml0X3N3aXRjaF9wdXQsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICgocmVnKSA8PCAxNikgfCAoYml0KSB8ICgoaW52ZXJ0KSA8PCAyNCkgfCAoZmxhZ3MpLCBcCit9CisjZGVmaW5lIF9XTTg3NzZfRklFTERfQ1RMKHhuYW1lLCByZWcsIHNoaWZ0LCBpbml0dmFsLCBtaW4sIG1heCwgbWFzaywgZmxhZ3MpIFwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkucHJpdmF0ZV92YWx1ZSA9IChpbml0dmFsKSB8ICgobWluKSA8PCA4KSB8ICgobWF4KSA8PCAxMikgfCBcCisJKChtYXNrKSA8PCAxNikgfCAoKHNoaWZ0KSA8PCAyMCkgfCAoKHJlZykgPDwgMjQpIHwgKGZsYWdzKQorI2RlZmluZSBXTTg3NzZfRklFTERfQ1RMX0VOVU0oeG5hbWUsIHJlZywgc2hpZnQsIGluaXQsIG1pbiwgbWF4LCBtYXNrLCBmbGFncykge1wKKwlfV004Nzc2X0ZJRUxEX0NUTCh4bmFtZSAiIENhcHR1cmUgRW51bSIsIFwKKwkJCSAgcmVnLCBzaGlmdCwgaW5pdCwgbWluLCBtYXgsIG1hc2ssIGZsYWdzKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSwgXAorCS5pbmZvID0gd204Nzc2X2ZpZWxkX2VudW1faW5mbywgXAorCS5nZXQgPSB3bTg3NzZfZmllbGRfZW51bV9nZXQsIFwKKwkucHV0ID0gd204Nzc2X2ZpZWxkX2VudW1fcHV0LCBcCit9CisjZGVmaW5lIFdNODc3Nl9GSUVMRF9DVExfVk9MVU1FKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIHRsdl9wKSB7IFwKKwlfV004Nzc2X0ZJRUxEX0NUTChhICIgQ2FwdHVyZSBWb2x1bWUiLCBiLCBjLCBkLCBlLCBmLCBnLCBoKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSB8IFwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsIFwKKwkuaW5mbyA9IHdtODc3Nl9maWVsZF92b2x1bWVfaW5mbywgXAorCS5nZXQgPSB3bTg3NzZfZmllbGRfdm9sdW1lX2dldCwgXAorCS5wdXQgPSB3bTg3NzZfZmllbGRfdm9sdW1lX3B1dCwgXAorCS50bHYgPSB7IC5wID0gdGx2X3AgfSwgXAorfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204N3g2X2RhY19kYl9zY2FsZSwgLTYwMDAsIDUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRSh3bTg3NzZfYWRjX2RiX3NjYWxlLCAtMjEwMCwgNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9ocF9kYl9zY2FsZSwgLTYwMDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X2xjdF9kYl9zY2FsZSwgLTE2MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X21heGdhaW5fZGJfc2NhbGUsIDAsIDQwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X25ndGhfZGJfc2NhbGUsIC03ODAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9tYXhhdHRlbl9saW1fZGJfc2NhbGUsIC0xMjAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9tYXhhdHRlbl9hbGNfZGJfc2NhbGUsIC0yMTAwLCA0MDAsIDApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNfY29udHJvbHNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJLmluZm8gPSB3bTg3NzZfaHBfdm9sX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaHBfdm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9ocF92b2xfcHV0LAorCQkudGx2ID0geyAucCA9IHdtODc3Nl9ocF9kYl9zY2FsZSB9LAorCX0sCisJV004Nzc2X0JJVF9TV0lUQ0goIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAorCQkJICBXTTg3NzZfUFdSRE9XTiwgV004Nzc2X0hQUEQsIDEsIDApLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIklucHV0IENhcHR1cmUgVm9sdW1lIiwKKwkJLmluZm8gPSB3bTg3NzZfaW5wdXRfdm9sX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaW5wdXRfdm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9pbnB1dF92b2xfcHV0LAorCQkudGx2ID0geyAucCA9IHdtODc3Nl9hZGNfZGJfc2NhbGUgfSwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLAorCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaW5wdXRfbXV4X2dldCwKKwkJLnB1dCA9IHdtODc3Nl9pbnB1dF9tdXhfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDEgPDwgMCwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1pYyBDYXB0dXJlIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IHdtODc3Nl9pbnB1dF9tdXhfZ2V0LAorCQkucHV0ID0gd204Nzc2X2lucHV0X211eF9wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMSA8PCAxLAorCX0sCisJV004Nzc2X0JJVF9TV0lUQ0goIkF1eCIsIFdNODc3Nl9BRENNVVgsIDEgPDwgMiwgMCwgMCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQURDIEZpbHRlciBDYXB0dXJlIEVudW0iLAorCQkuaW5mbyA9IGhwZl9pbmZvLAorCQkuZ2V0ID0gaHBmX2dldCwKKwkJLnB1dCA9IGhwZl9wdXQsCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJMZXZlbCBDb250cm9sIENhcHR1cmUgRW51bSIsCisJCS5pbmZvID0gd204Nzc2X2xldmVsX2NvbnRyb2xfaW5mbywKKwkJLmdldCA9IHdtODc3Nl9sZXZlbF9jb250cm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9sZXZlbF9jb250cm9sX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAwLAorCX0sCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxjX2NvbnRyb2xzW10gPSB7CisJV004Nzc2X0ZJRUxEX0NUTF9WT0xVTUUoIkxpbWl0ZXIgVGhyZXNob2xkIiwKKwkJCQlXTTg3NzZfQUxDQ1RSTDEsIDAsIDExLCAwLCAxNSwgMHhmLAorCQkJCUxDX0NPTlRST0xfTElNSVRFUiwgd204Nzc2X2xjdF9kYl9zY2FsZSksCisJV004Nzc2X0ZJRUxEX0NUTF9FTlVNKCJMaW1pdGVyIEF0dGFjayBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgMCwgMiwgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfTElNSVRFUiksCisJV004Nzc2X0ZJRUxEX0NUTF9FTlVNKCJMaW1pdGVyIERlY2F5IFRpbWUiLAorCQkJICAgICAgV004Nzc2X0FMQ0NUUkwzLCA0LCAzLCAwLCAxMCwgMHhmLAorCQkJICAgICAgTENfQ09OVFJPTF9MSU1JVEVSKSwKKwlXTTg3NzZfRklFTERfQ1RMX0VOVU0oIkxpbWl0ZXIgVHJhbnNpZW50IFdpbmRvdyIsCisJCQkgICAgICBXTTg3NzZfTElNSVRFUiwgNCwgMiwgMCwgNywgMHg3LAorCQkJICAgICAgTENfQ09OVFJPTF9MSU1JVEVSKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiTGltaXRlciBNYXhpbXVtIEF0dGVudWF0aW9uIiwKKwkJCQlXTTg3NzZfTElNSVRFUiwgMCwgNiwgMywgMTIsIDB4ZiwKKwkJCQlMQ19DT05UUk9MX0xJTUlURVIsCisJCQkJd204Nzc2X21heGF0dGVuX2xpbV9kYl9zY2FsZSksCisJV004Nzc2X0ZJRUxEX0NUTF9WT0xVTUUoIkFMQyBUYXJnZXQgTGV2ZWwiLAorCQkJCVdNODc3Nl9BTENDVFJMMSwgMCwgMTEsIDAsIDE1LCAweGYsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9sY3RfZGJfc2NhbGUpLAorCVdNODc3Nl9GSUVMRF9DVExfRU5VTSgiQUxDIEF0dGFjayBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgMCwgMiwgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfQUxDKSwKKwlXTTg3NzZfRklFTERfQ1RMX0VOVU0oIkFMQyBEZWNheSBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgNCwgMywgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfQUxDKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiQUxDIE1heGltdW0gR2FpbiIsCisJCQkJV004Nzc2X0FMQ0NUUkwxLCA0LCA3LCAxLCA3LCAweDcsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9tYXhnYWluX2RiX3NjYWxlKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiQUxDIE1heGltdW0gQXR0ZW51YXRpb24iLAorCQkJCVdNODc3Nl9MSU1JVEVSLCAwLCAxMCwgMTAsIDE1LCAweGYsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9tYXhhdHRlbl9hbGNfZGJfc2NhbGUpLAorCVdNODc3Nl9GSUVMRF9DVExfRU5VTSgiQUxDIEhvbGQgVGltZSIsCisJCQkgICAgICBXTTg3NzZfQUxDQ1RSTDIsIDAsIDAsIDAsIDE1LCAweGYsCisJCQkgICAgICBMQ19DT05UUk9MX0FMQyksCisJV004Nzc2X0JJVF9TV0lUQ0goIk5vaXNlIEdhdGUgQ2FwdHVyZSBTd2l0Y2giLAorCQkJICBXTTg3NzZfTk9JU0VHQVRFLCBXTTg3NzZfTkdBVCwgMCwKKwkJCSAgTENfQ09OVFJPTF9BTEMpLAorCVdNODc3Nl9GSUVMRF9DVExfVk9MVU1FKCJOb2lzZSBHYXRlIFRocmVzaG9sZCIsCisJCQkJV004Nzc2X05PSVNFR0FURSwgMiwgMCwgMCwgNywgMHg3LAorCQkJCUxDX0NPTlRST0xfQUxDLCB3bTg3NzZfbmd0aF9kYl9zY2FsZSksCit9OworCitzdGF0aWMgaW50IHhvbmFyX2RzX2NvbnRyb2xfZmlsdGVyKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKK3sKKwlpZiAoIXN0cm5jbXAodGVtcGxhdGUtPm5hbWUsICJDRCBDYXB0dXJlICIsIDExKSkKKwkJcmV0dXJuIDE7IC8qIG5vIENEIGlucHV0ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeG9uYXJfZHNfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bDsKKwlpbnQgZXJyOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNfY29udHJvbHMpOyArK2kpIHsKKwkJY3RsID0gc25kX2N0bF9uZXcxKCZkc19jb250cm9sc1tpXSwgY2hpcCk7CisJCWlmICghY3RsKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGN0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobGNfY29udHJvbHMpICE9IEFSUkFZX1NJWkUoZGF0YS0+bGNfY29udHJvbHMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsY19jb250cm9scyk7ICsraSkgeworCQljdGwgPSBzbmRfY3RsX25ldzEoJmxjX2NvbnRyb2xzW2ldLCBjaGlwKTsKKwkJaWYgKCFjdGwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgY3RsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlkYXRhLT5sY19jb250cm9sc1tpXSA9IGN0bDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2RzID0geworCS5zaG9ydG5hbWUgPSAiWG9uYXIgRFMiLAorCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDIwMCIsCisJLmNoaXAgPSAiQVYyMDAiLAorCS5pbml0ID0geG9uYXJfZHNfaW5pdCwKKwkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9kc19jb250cm9sX2ZpbHRlciwKKwkubWl4ZXJfaW5pdCA9IHhvbmFyX2RzX21peGVyX2luaXQsCisJLmNsZWFudXAgPSB4b25hcl9kc19jbGVhbnVwLAorCS5zdXNwZW5kID0geG9uYXJfZHNfc3VzcGVuZCwKKwkucmVzdW1lID0geG9uYXJfZHNfcmVzdW1lLAorCS5wY21faGFyZHdhcmVfZmlsdGVyID0gd204Nzc2X2FkY19oYXJkd2FyZV9maWx0ZXIsCisJLmdldF9pMnNfbWNsayA9IG94eWdlbl9kZWZhdWx0X2kyc19tY2xrLAorCS5zZXRfZGFjX3BhcmFtcyA9IHNldF93bTg3eDZfZGFjX3BhcmFtcywKKwkuc2V0X2FkY19wYXJhbXMgPSBzZXRfd204Nzc2X2FkY19wYXJhbXMsCisJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3dtODd4Nl92b2x1bWUsCisJLnVwZGF0ZV9kYWNfbXV0ZSA9IHVwZGF0ZV93bTg3eDZfbXV0ZSwKKwkuZ3Bpb19jaGFuZ2VkID0geG9uYXJfZHNfZ3Bpb19jaGFuZ2VkLAorCS5kYWNfdGx2ID0gd204N3g2X2RhY19kYl9zY2FsZSwKKwkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB4b25hcl93bTg3eDYpLAorCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAorCQkJIENBUFRVUkVfMF9GUk9NX0kyU18xLAorCS5kYWNfY2hhbm5lbHMgPSA4LAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAorCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEksCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OworCitpbnQgX19kZXZpbml0IGdldF94b25hcl93bTg3eDZfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzd2l0Y2ggKGlkLT5zdWJkZXZpY2UpIHsKKwljYXNlIDB4ODM4ZToKKwkJY2hpcC0+bW9kZWwgPSBtb2RlbF94b25hcl9kczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwppbmRleCA4MzNlOWM3Li45NWNmZGUyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwpAQCAtOTQsNyArOTQsNyBAQAogCVBDSV9JRF9MQVNUCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGN4aHJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGN4aHJfaWRzKSA9IHsKIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjAwMSwgMCwgMCwgUENJX0lEX1ZYODgySFIsIH0sCiAJeyAweDEwYjUsIDB4OTY1NiwgMHgxMzY5LCAweGIxMDEsIDAsIDAsIFBDSV9JRF9QQ1g4ODJIUiwgfSwKIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjIwMSwgMCwgMCwgUENJX0lEX1ZYODgxSFIsIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKaW5kZXggZTY2ZWYyYi4uOTYwYTIyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCisrKyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcmlwdGlkZV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfcmlwdGlkZV9pZHMpID0gewogCXsgUENJX0RFVklDRSgweDEyN2EsIDB4NDMxMCkgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMjdhLCAweDQzMjApIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTI3YSwgMHg0MzMwKSB9LApAQCAtNTE1LDcgKzUxNSw3IEBACiB9OwogCiAjaWZkZWYgU1VQUE9SVF9KT1lTVElDSwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9yaXB0aWRlX2pveXN0aWNrX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JpcHRpZGVfam95c3RpY2tfaWRzKSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxMjdhLCAweDQzMTIpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTI3YSwgMHg0MzIyKSB9LAogCXsgUENJX0RFVklDRSgweDEyN2EsIDB4NDMzMikgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWUzMi5jIGIvc291bmQvcGNpL3JtZTMyLmMKaW5kZXggZjk3N2RiYS4uZDVlMWM2ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTMyLmMKKysrIGIvc291bmQvcGNpL3JtZTMyLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnNwZGlmX2N0bDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcm1lMzJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JtZTMyX2lkcykgPSB7CiAJe1BDSV9WREVWSUNFKFhJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMiksIDAsfSwKIAl7UENJX1ZERVZJQ0UoWElMSU5YX1JNRSwgUENJX0RFVklDRV9JRF9STUVfRElHSTMyXzgpLCAwLH0sCiAJe1BDSV9WREVWSUNFKFhJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl9QUk8pLCAwLH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDJiYTVjMGYuLjlkNTI1MmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICAgKnNwZGlmX2N0bDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcm1lOTZfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JtZTk2X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShYSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5NiksIDAsIH0sCiAJeyBQQ0lfVkRFVklDRShYSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84KSwgMCwgfSwKIAl7IFBDSV9WREVWSUNFKFhJTElOWCwgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUFJPKSwgMCwgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwppbmRleCA3YmI4MjdjLi41MmM2ZWI1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCkBAIC01ODUsNyArNTg1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2hkc3BfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2hkc3BfaWRzKSA9IHsKIAl7CiAJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1hJTElOWCwKIAkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggYTFiMTBkMS4uM2Q3MmMxZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC01MTIsNyArNTEyLDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwbV9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9oZHNwbV9pZHMpID0gewogCXsKIAkgLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfWElMSU5YLAogCSAuZGV2aWNlID0gUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1BfTUFESSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwppbmRleCBiYzUzOWFiLi40NGEzZTJkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2NTJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JtZTk2NTJfaWRzKSA9IHsKIAl7CiAJCS52ZW5kb3IJICAgPSAweDEwZWUsCiAJCS5kZXZpY2UJICAgPSAweDNmYzQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc2lzNzAxOS5jIGIvc291bmQvcGNpL3NpczcwMTkuYwppbmRleCAxYTVmZjA2Li43ZTNlOGZiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIG1vZHVsZV9wYXJhbShlbmFibGUsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgU2lTNzAxOSBBdWRpbyBBY2NlbGVyYXRvci4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9zaXM3MDE5X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9zaXM3MDE5X2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIDB4NzAxOSkgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCAxZjY0MDZjLi4zMzdiOWZhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3NvbmljX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9zb25pY19pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoUzMsIDB4Y2EwMCksIDAsIH0sCiAgICAgICAgIHsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwppbmRleCAyMWNlZjk3Li42ZDA1ODE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCkBAIC02Miw3ICs2Miw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkod2F2ZXRhYmxlX3NpemUsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdhdmV0YWJsZV9zaXplLCAiTWF4aW11bSBtZW1vcnkgc2l6ZSBpbiBrQiBmb3Igd2F2ZXRhYmxlIHN5bnRoLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3RyaWRlbnRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3RyaWRlbnRfaWRzKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RSSURFTlQsIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgpLCAKIAkJUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDB9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVFJJREVOVCwgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9OWCksIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggOGEzMzJkMi4uN2U0OTRiNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC00MDEsNyArNDAxLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92aWE4Mnh4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92aWE4Mnh4X2lkcykgPSB7CiAJLyogMHgxMTA2LCAweDMwNTggKi8KIAl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzUpLCBUWVBFX0NBUkRfVklBNjg2LCB9LAkvKiA2ODZBICovCiAJLyogMHgxMTA2LCAweDMwNTkgKi8KQEAgLTE3OTEsNiArMTc5MSwxMiBAQAogCQkudHlwZSA9IEFDOTdfVFVORV9IUF9PTkxZCiAJfSwKIAl7CisJCS5zdWJ2ZW5kb3IgPSAweDExMGEsCisJCS5zdWJkZXZpY2UgPSAweDAwNzksCisJCS5uYW1lID0gIkZ1aml0c3UgU2llbWVucyBEMTI4OSIsCisJCS50eXBlID0gQUM5N19UVU5FX0hQX09OTFkKKwl9LAorCXsKIAkJLnN1YnZlbmRvciA9IDB4MTAxOSwKIAkJLnN1YmRldmljZSA9IDB4MGE4MSwKIAkJLm5hbWUgPSAiRUNTIEs3VlRBMyIsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCA0N2ViNjE1Li5mN2U4YmJiZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfZW50cnk7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZpYTgyeHhfbW9kZW1faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3ZpYTgyeHhfbW9kZW1faWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKFZJQSwgMHgzMDY4KSwgVFlQRV9DQVJEX1ZJQTgyWFhfTU9ERU0sIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCBmYzkxMzZjLi45OWE5YTgxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtNjAsNyArNjAsNyBAQAogCVZYX1BDSV9WWDIyMl9ORVcKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdngyMjJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3Z4MjIyX2lkcykgPSB7CiAJeyAweDEwYjUsIDB4OTA1MCwgMHgxMzY5LCBQQ0lfQU5ZX0lELCAwLCAwLCBWWF9QQ0lfVlgyMjJfT0xELCB9LCAgIC8qIFBMWCAqLwogCXsgMHgxMGI1LCAweDkwMzAsIDB4MTM2OSwgUENJX0FOWV9JRCwgMCwgMCwgVlhfUENJX1ZYMjIyX05FVywgfSwgICAvKiBQTFggKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCmluZGV4IGU2YjE4YjkuLjgwYzY4MjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwpAQCAtNjYsNyArNjYsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHJlYXJfc3dpdGNoLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVhcl9zd2l0Y2gsICJFbmFibGUgc2hhcmVkIHJlYXIvbGluZS1pbiBzd2l0Y2giKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF95bWZwY2lfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3ltZnBjaV9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoWUFNQUhBLCAweDAwMDQpLCAwLCB9LCAgIC8qIFlNRjcyNCAqLwogCXsgUENJX1ZERVZJQ0UoWUFNQUhBLCAweDAwMGQpLCAwLCB9LCAgIC8qIFlNRjcyNEYgKi8KIAl7IFBDSV9WREVWSUNFKFlBTUFIQSwgMHgwMDBhKSwgMCwgfSwgICAvKiBZTUY3NDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKaW5kZXggNWNmYTYwOC4uMGQ2NjhmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgpAQCAtMjksNDkgKzI4LDYgQEAKIAogCiAvKgotICogd2UgdXNlIGEgdm1hbGxvYydlZCAoc2ctKWJ1ZmZlcgotICovCi0KLS8qIGdldCB0aGUgcGh5c2ljYWwgcGFnZSBwb2ludGVyIG9uIHRoZSBnaXZlbiBvZmZzZXQgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci19Ci0KLS8qCi0gKiBod19wYXJhbXMgY2FsbGJhY2sKLSAqIE5PVEU6IHRoaXMgbWF5IGJlIGNhbGxlZCBub3Qgb25seSBvbmNlIHBlciBwY20gb3BlbiEKLSAqLwotc3RhdGljIGludCBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vicywgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0JaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7Ci0JCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPj0gc2l6ZSkKLQkJCXJldHVybiAwOyAvKiBhbHJlYWR5IGVub3VnaCBsYXJnZSAqLwotCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JfQotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY18zMl91c2VyKHNpemUpOwotCWlmICghIHJ1bnRpbWUtPmRtYV9hcmVhKQotCQlyZXR1cm4gLUVOT01FTTsKLQlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwotCXJldHVybiAwOwotfQotCi0vKgotICogaHdfZnJlZSBjYWxsYmFjawotICogTk9URTogdGhpcyBtYXkgYmUgY2FsbGVkIG5vdCBvbmx5IG9uY2UgcGVyIHBjbSBvcGVuIQotICovCi1zdGF0aWMgaW50IHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0KLQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCXJldHVybiAwOwotfQotCi0vKgogICogY2xlYXIgdGhlIFNSQU0gY29udGVudHMKICAqLwogc3RhdGljIGludCBwZGFjZl9wY21fY2xlYXJfc3JhbShzdHJ1Y3Qgc25kX3BkYWNmICpjaGlwKQpAQCAtMTQ3LDcgKzEwMyw4IEBACiBzdGF0aWMgaW50IHBkYWNmX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAogCQkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7Ci0JcmV0dXJuIHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3VicywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY18zMl9idWZmZXIKKwkJCQkJKHN1YnMsIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiB9CiAKIC8qCkBAIC0xNTUsNyArMTEyLDcgQEAKICAqLwogc3RhdGljIGludCBwZGFjZl9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCiB7Ci0JcmV0dXJuIHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzKTsKIH0KIAogLyoKQEAgLTMxOSw3ICsyNzYsOCBAQAogCS5wcmVwYXJlID0JcGRhY2ZfcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPQlwZGFjZl9wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9CXBkYWNmX3BjbV9jYXB0dXJlX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvYXdhY3MuYyBiL3NvdW5kL3BwYy9hd2Fjcy5jCmluZGV4IDJlMTU2NDYuLmIzNjY3OTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9hd2Fjcy5jCisrKyBiL3NvdW5kL3BwYy9hd2Fjcy5jCkBAIC03NTEsOCArNzUxLDggQEAKIAogc3RhdGljIHZvaWQgc25kX3BtYWNfYXdhY3NfcmVzdW1lKHN0cnVjdCBzbmRfcG1hYyAqY2hpcCkKIHsKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKQotCSAgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKSB7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywxIikKKwkgICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgewogCQltc2xlZXAoMTAwKTsKIAkJc25kX3BtYWNfYXdhY3Nfd3JpdGVfcmVnKGNoaXAsIDEsCiAJCQljaGlwLT5hd2Fjc19yZWdbMV0gJiB+TUFTS19QQVJPVVQpOwpAQCAtNzgwLDE2ICs3ODAsMTYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotI2RlZmluZSBJU19QTTc1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw3NTAwIikgXAotCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsODUwMCIpIFwKLQkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDk1MDAiKSkKLSNkZWZpbmUgSVNfUE01NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsZTQxMSIpKQotI2RlZmluZSBJU19CRUlHRSAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLEdvc3NhbWVyIikpCi0jZGVmaW5lIElTX0lNQUMxIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikpCi0jZGVmaW5lIElTX0lNQUMyIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgXAotCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCi0jZGVmaW5lIElTX0c0QUdQIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMywxIikpCi0jZGVmaW5lIElTX0xPTUJBUkQgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCisjZGVmaW5lIElTX1BNNzUwMCAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDc1MDAiKSBcCisJCXx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw4NTAwIikgXAorCQl8fCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsOTUwMCIpKQorI2RlZmluZSBJU19QTTU1MDAgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxlNDExIikpCisjZGVmaW5lIElTX0JFSUdFIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsR29zc2FtZXIiKSkKKyNkZWZpbmUgSVNfSU1BQzEgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDEiKSkKKyNkZWZpbmUgSVNfSU1BQzIgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDIiKSBcCisJCXx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDEiKSkKKyNkZWZpbmUgSVNfRzRBR1AgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDEiKSkKKyNkZWZpbmUgSVNfTE9NQkFSRCAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKIAogc3RhdGljIGludCBpbWFjMSwgaW1hYzI7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9idXJndW5keS5jIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKaW5kZXggMGFjY2ZlNC4uMWY3MmUxYyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2J1cmd1bmR5LmMKKysrIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKQEAgLTU4Miw3ICs1ODIsNyBAQAogc3RhdGljIHZvaWQgc25kX3BtYWNfYnVyZ3VuZHlfdXBkYXRlX2F1dG9tdXRlKHN0cnVjdCBzbmRfcG1hYyAqY2hpcCwgaW50IGRvX25vdGlmeSkKIHsKIAlpZiAoY2hpcC0+YXV0b19tdXRlKSB7Ci0JCWludCBpbWFjID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CisJCWludCBpbWFjID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CiAJCWludCByZWcsIG9yZWc7CiAJCXJlZyA9IG9yZWcgPSBzbmRfcG1hY19idXJndW5keV9yY2IoY2hpcCwKIAkJCQlNQVNLX0FERFJfQlVSR1VORFlfTU9SRV9PVVRQVVRFTkFCTEVTKTsKQEAgLTYyMCw3ICs2MjAsNyBAQAogICovCiBpbnQgX19kZXZpbml0IHNuZF9wbWFjX2J1cmd1bmR5X2luaXQoc3RydWN0IHNuZF9wbWFjICpjaGlwKQogewotCWludCBpbWFjID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CisJaW50IGltYWMgPSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoImlNYWMiKTsKIAlpbnQgaSwgZXJyOwogCiAJLyogQ2hlY2tzIHRvIHNlZSB0aGUgY2hpcCBpcyBhbGl2ZSBhbmQga2lja2luZyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggN2JjNDkyZS4uODUwODExNyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC05MjIsMTEgKzkyMiwxMSBAQAogCX0KIAogCS8qIGl0IHNlZW1zIHRoZSBQaXNtbyAmIGlCb29rIGNhbid0IGJ5dGUtc3dhcCBpbiBoYXJkd2FyZS4gKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMSIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpCiAJCWNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwIDsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQogCQljaGlwLT5jYW5fZHVwbGV4ID0gMDsKIH0KIApAQCAtOTU5LDExICs5NTksMTEgQEAKIAljaGlwLT5jb250cm9sX21hc2sgPSBNQVNLX0lFUEMgfCBNQVNLX0lFRSB8IDB4MTE7IC8qIGRlZmF1bHQgKi8KIAogCS8qIGNoZWNrIG1hY2hpbmUgdHlwZSAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzQwMC8yNDAwIikKLQkgICAgfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM1MDAiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM0MDAvMjQwMCIpCisJICAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIikpCiAJCWNoaXAtPmlzX3Bib29rXzM0MDAgPSAxOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikKLQkJIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikpCisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKQorCQkgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSkKIAkJY2hpcC0+aXNfcGJvb2tfRzMgPSAxOwogCWNoaXAtPm5vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiYXdhY3MiKTsKIAlzb3VuZCA9IG9mX25vZGVfZ2V0KGNoaXAtPm5vZGUpOwpAQCAtMTAzMyw4ICsxMDMzLDggQEAKIAl9CiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHNvdW5kLCAidHVtYmxlciIpKSB7CiAJCWNoaXAtPm1vZGVsID0gUE1BQ19UVU1CTEVSOwotCQljaGlwLT5jYW5fY2FwdHVyZSA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDIiKQotCQkJCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIik7CisJCWNoaXAtPmNhbl9jYXB0dXJlID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMiIpCisJCQkJfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKTsKIAkJY2hpcC0+Y2FuX2R1cGxleCA9IDA7CiAJCS8vIGNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwOyAvKiBGSVhNRTogY2hlY2sgdGhpcyAqLwogCQljaGlwLT5udW1fZnJlcXMgPSBBUlJBWV9TSVpFKHR1bWJsZXJfZnJlcXMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvS2NvbmZpZyBiL3NvdW5kL3NvYy9hdTF4L0tjb25maWcKaW5kZXggNDEwYTg5My4uNGI2NzE0MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvYXUxeC9LY29uZmlnCkBAIC0yMiwxMSArMjIsMTMgQEAKICMjCiAjIyBCb2FyZHMKICMjCi1jb25maWcgU05EX1NPQ19TQU1QTEVfUFNDX0FDOTcKLQl0cmlzdGF0ZSAiU2FtcGxlIEF1MTJ4MC9BdTE1NTAgUFNDIEFDOTcgc291bmQgbWFjaGluZSIKK2NvbmZpZyBTTkRfU09DX0RCMTIwMAorCXRyaXN0YXRlICJEQjEyMDAgQUM5NytJMlMgYXVkaW8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNORF9TT0NfQVUxWFBTQwogCXNlbGVjdCBTTkRfU09DX0FVMVhQU0NfQUM5NwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQ09ERUMKKwlzZWxlY3QgU05EX1NPQ19BVTFYUFNDX0kyUworCXNlbGVjdCBTTkRfU09DX1dNODczMQogCWhlbHAKLQkgIFRoaXMgaXMgYSBzYW1wbGUgQUM5NyBzb3VuZCBtYWNoaW5lIGZvciB1c2UgaW4gQXUxMngwL0F1MTU1MAotCSAgYmFzZWQgc3lzdGVtcyB3aGljaCBoYXZlIGF1ZGlvIG9uIFBTQzEgKGUuZy4gRGIxMjAwIGRlbW9ib2FyZCkuCisJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIGF1ZGlvIChBQzk3IG9yIEkyUykgb24gdGhlCisJICBBbGNoZW15L0FNRC9STUkgREIxMjAwIGRlbW9ib2FyZC4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L01ha2VmaWxlIGIvc291bmQvc29jL2F1MXgvTWFrZWZpbGUKaW5kZXggNmM2OTUwYi4uMTY4NzMwNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2F1MXgvTWFrZWZpbGUKQEAgLTgsNiArOCw2IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19BVTFYUFNDX0FDOTcpICs9IHNuZC1zb2MtYXUxeHBzYy1hYzk3Lm8KIAogIyBCb2FyZHMKLXNuZC1zb2Mtc2FtcGxlLWFjOTctb2JqcyA6PSBzYW1wbGUtYWM5Ny5vCitzbmQtc29jLWRiMTIwMC1vYmpzIDo9IGRiMTIwMC5vCiAKLW9iai0kKENPTkZJR19TTkRfU09DX1NBTVBMRV9QU0NfQUM5NykgKz0gc25kLXNvYy1zYW1wbGUtYWM5Ny5vCitvYmotJChDT05GSUdfU05EX1NPQ19EQjEyMDApICs9IHNuZC1zb2MtZGIxMjAwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jIGIvc291bmQvc29jL2F1MXgvZGIxMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmN2JlMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogREIxMjAwIEFTb0MgYXVkaW8gZmFicmljIHN1cHBvcnQgY29kZS4KKyAqCisgKiAoYykgMjAwOC05IE1hbnVlbCBMYXVzcyA8bWFudWVsLmxhdXNzQGdtYWlsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy9hYzk3LmgiCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODczMS5oIgorI2luY2x1ZGUgInBzYy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFDOTcgUEFSVCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGRiMTIwMF9hYzk3X2RhaSA9IHsKKwkubmFtZQkJPSAiQUM5NyIsCisJLnN0cmVhbV9uYW1lCT0gIkFDOTcgSGlGaSIsCisJLmNwdV9kYWkJPSAmYXUxeHBzY19hYzk3X2RhaSwKKwkuY29kZWNfZGFpCT0gJmFjOTdfZGFpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZGIxMjAwX2FjOTdfbWFjaGluZSA9IHsKKwkubmFtZQkJPSAiREIxMjAwX0FDOTciLAorCS5kYWlfbGluawk9ICZkYjEyMDBfYWM5N19kYWksCisJLm51bV9saW5rcwk9IDEsCisJLnBsYXRmb3JtCT0gJmF1MXhwc2Nfc29jX3BsYXRmb3JtLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBkYjEyMDBfYWM5N19kZXZkYXRhID0geworCS5jYXJkCQk9ICZkYjEyMDBfYWM5N19tYWNoaW5lLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl9hYzk3LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMlMgUEFSVCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBkYjEyMDBfaTJzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlpbnQgcmV0OworCisJLyogV004NzMxIGhhcyBpdHMgb3duIDEyTUh6IGNyeXN0YWwgKi8KKwlzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzMxX1NZU0NMSywKKwkJCQkxMjAwMDAwMCwgU05EX1NPQ19DTE9DS19JTik7CisKKwkvKiBjb2RlYyBpcyBiaXRjbG9jayBhbmQgbHJjbGsgbWFzdGVyICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0xFRlRfSiB8CisJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfTEVGVF9KIHwKKwkJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGRiMTIwMF9pMnNfd204NzMxX29wcyA9IHsKKwkuc3RhcnR1cAk9IGRiMTIwMF9pMnNfc3RhcnR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBkYjEyMDBfaTJzX2RhaSA9IHsKKwkubmFtZQkJPSAiV004NzMxIiwKKwkuc3RyZWFtX25hbWUJPSAiV004NzMxIFBDTSIsCisJLmNwdV9kYWkJPSAmYXUxeHBzY19pMnNfZGFpLAorCS5jb2RlY19kYWkJPSAmd204NzMxX2RhaSwKKwkub3BzCQk9ICZkYjEyMDBfaTJzX3dtODczMV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBkYjEyMDBfaTJzX21hY2hpbmUgPSB7CisJLm5hbWUJCT0gIkRCMTIwMF9JMlMiLAorCS5kYWlfbGluawk9ICZkYjEyMDBfaTJzX2RhaSwKKwkubnVtX2xpbmtzCT0gMSwKKwkucGxhdGZvcm0JPSAmYXUxeHBzY19zb2NfcGxhdGZvcm0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGRiMTIwMF9pMnNfZGV2ZGF0YSA9IHsKKwkuY2FyZAkJPSAmZGIxMjAwX2kyc19tYWNoaW5lLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPTU1PTiBQQVJUICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGIxMjAwX2Fzb2NfZGV2OworCitzdGF0aWMgaW50IF9faW5pdCBkYjEyMDBfYXVkaW9fbG9hZCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSAtRU5PTUVNOworCWRiMTIwMF9hc29jX2RldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghZGIxMjAwX2Fzb2NfZGV2KQorCQlnb3RvIG91dDsKKworCS8qIERCMTIwMCBib2FyZCBzZXR1cCBzZXQgUFNDMU1VWCB0byBwcmVmZXJyZWQgYXVkaW8gZGV2aWNlICovCisJaWYgKGJjc3JfcmVhZChCQ1NSX1JFU0VUUykgJiBCQ1NSX1JFU0VUU19QU0MxTVVYKQorCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkYjEyMDBfYXNvY19kZXYsICZkYjEyMDBfaTJzX2RldmRhdGEpOworCWVsc2UKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGIxMjAwX2Fzb2NfZGV2LCAmZGIxMjAwX2FjOTdfZGV2ZGF0YSk7CisKKwlkYjEyMDBfYWM5N19kZXZkYXRhLmRldiA9ICZkYjEyMDBfYXNvY19kZXYtPmRldjsKKwlkYjEyMDBfaTJzX2RldmRhdGEuZGV2ID0gJmRiMTIwMF9hc29jX2Rldi0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZGIxMjAwX2Fzb2NfZGV2KTsKKworCWlmIChyZXQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChkYjEyMDBfYXNvY19kZXYpOworCQlkYjEyMDBfYXNvY19kZXYgPSBOVUxMOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGIxMjAwX2F1ZGlvX3VubG9hZCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRiMTIwMF9hc29jX2Rldik7Cit9CisKK21vZHVsZV9pbml0KGRiMTIwMF9hdWRpb19sb2FkKTsKK21vZHVsZV9leGl0KGRiMTIwMF9hdWRpb191bmxvYWQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRCMTIwMCBBU29DIGF1ZGlvIHN1cHBvcnQiKTsKK01PRFVMRV9BVVRIT1IoIk1hbnVlbCBMYXVzcyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvZGJkbWEyLmMgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwppbmRleCAxOWU0ZDM3Li42ZDlmNGM2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYworKysgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwpAQCAtNTEsOCArNTEsOCBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXVuc2lnbmVkIGxvbmcgY3Vycl9wZXJpb2Q7CS8qIGN1cnJlbnQgc2VnbWVudCBERE1BIGlzIHdvcmtpbmcgb24gKi8KIAl1bnNpZ25lZCBsb25nIHFfcGVyaW9kOwkJLyogcXVldWUgcGVyaW9kKHMpICovCi0JdW5zaWduZWQgbG9uZyBkbWFfYXJlYTsJCS8qIGFkZHJlc3Mgb2YgcXVldWVkIERNQSBhcmVhICovCi0JdW5zaWduZWQgbG9uZyBkbWFfYXJlYV9zOwkvKiBzdGFydCBhZGRyZXNzIG9mIERNQSBhcmVhICovCisJZG1hX2FkZHJfdCBkbWFfYXJlYTsJCS8qIGFkZHJlc3Mgb2YgcXVldWVkIERNQSBhcmVhICovCisJZG1hX2FkZHJfdCBkbWFfYXJlYV9zOwkJLyogc3RhcnQgYWRkcmVzcyBvZiBETUEgYXJlYSAqLwogCXVuc2lnbmVkIGxvbmcgcG9zOwkJLyogY3VycmVudCBieXRlIHBvc2l0aW9uIGJlaW5nIHBsYXllZCAqLwogCXVuc2lnbmVkIGxvbmcgcGVyaW9kczsJCS8qIG51bWJlciBvZiBTRyBzZWdtZW50cyBpbiB0b3RhbCAqLwogCXVuc2lnbmVkIGxvbmcgcGVyaW9kX2J5dGVzOwkvKiBzaXplIGluIGJ5dGVzIG9mIG9uZSBTRyBzZWdtZW50ICovCkBAIC05NCw4ICs5NCw3IEBACiAKIHN0YXRpYyB2b2lkIGF1MXhfcGNtX3F1ZXVlX3R4KHN0cnVjdCBhdTF4cHNjX2F1ZGlvX2RtYWRhdGEgKmNkKQogewotCWF1MXh4eF9kYmRtYV9wdXRfc291cmNlX2ZsYWdzKGNkLT5kZG1hX2NoYW4sCi0JCQkJKHZvaWQgKilwaHlzX3RvX3ZpcnQoY2QtPmRtYV9hcmVhKSwKKwlhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShjZC0+ZGRtYV9jaGFuLCBjZC0+ZG1hX2FyZWEsCiAJCQkJY2QtPnBlcmlvZF9ieXRlcywgRERNQV9GTEFHU19JRSk7CiAKIAkvKiB1cGRhdGUgbmV4dC10by1xdWV1ZSBwZXJpb2QgKi8KQEAgLTEwOSw5ICsxMDgsOCBAQAogCiBzdGF0aWMgdm9pZCBhdTF4X3BjbV9xdWV1ZV9yeChzdHJ1Y3QgYXUxeHBzY19hdWRpb19kbWFkYXRhICpjZCkKIHsKLQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3RfZmxhZ3MoY2QtPmRkbWFfY2hhbiwKLQkJCQkodm9pZCAqKXBoeXNfdG9fdmlydChjZC0+ZG1hX2FyZWEpLAotCQkJCWNkLT5wZXJpb2RfYnl0ZXMsIERETUFfRkxBR1NfSUUpOworCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChjZC0+ZGRtYV9jaGFuLCBjZC0+ZG1hX2FyZWEsCisJCQkgICAgICBjZC0+cGVyaW9kX2J5dGVzLCBERE1BX0ZMQUdTX0lFKTsKIAogCS8qIHVwZGF0ZSBuZXh0LXRvLXF1ZXVlIHBlcmlvZCAqLwogCSsrY2QtPnFfcGVyaW9kOwpAQCAtMjMzLDcgKzIzMSw3IEBACiAJcGNkLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CiAJcGNkLT5wZXJpb2RfYnl0ZXMgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcyk7CiAJcGNkLT5wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMocGFyYW1zKTsKLQlwY2QtPmRtYV9hcmVhX3MgPSBwY2QtPmRtYV9hcmVhID0gKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+ZG1hX2FkZHI7CisJcGNkLT5kbWFfYXJlYV9zID0gcGNkLT5kbWFfYXJlYSA9IHJ1bnRpbWUtPmRtYV9hZGRyOwogCXBjZC0+cV9wZXJpb2QgPSAwOwogCXBjZC0+Y3Vycl9wZXJpb2QgPSAwOwogCXBjZC0+cG9zID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L3NhbXBsZS1hYzk3LmMgYi9zb3VuZC9zb2MvYXUxeC9zYW1wbGUtYWM5Ny5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzY4M2ViLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9hdTF4L3NhbXBsZS1hYzk3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIFNhbXBsZSBBdTEyeDAvQXUxNTUwIFBTQyBBQzk3IHNvdW5kIG1hY2hpbmUuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvdXRsaW5lZCBpbiB0aGUgZmlsZSBDT1BZSU5HIGF0IHRoZSByb290IG9mIHRoaXMKLSAqICBzb3VyY2UgYXJjaGl2ZS4KLSAqCi0gKiBUaGlzIGlzIGEgdmVyeSBnZW5lcmljIEFDOTcgc291bmQgbWFjaGluZSBkcml2ZXIgZm9yIGJvYXJkcyB3aGljaAotICogaGF2ZSAoQUM5NykgYXVkaW8gYXQgUFNDMSAoZS5nLiBEQjEyMDAgZGVtb2JvYXJkcykuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+Ci0KLSNpbmNsdWRlICIuLi9jb2RlY3MvYWM5Ny5oIgotI2luY2x1ZGUgInBzYy5oIgotCi1zdGF0aWMgaW50IGF1MXhwc2Nfc2FtcGxlX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgYXUxeHBzY19zYW1wbGVfYWM5N19kYWkgPSB7Ci0JLm5hbWUJCT0gIkFDOTciLAotCS5zdHJlYW1fbmFtZQk9ICJBQzk3IEhpRmkiLAotCS5jcHVfZGFpCT0gJmF1MXhwc2NfYWM5N19kYWksCS8qIHNlZSBwc2MtYWM5Ny5jICovCi0JLmNvZGVjX2RhaQk9ICZhYzk3X2RhaSwJCS8qIHNlZSBjb2RlY3MvYWM5Ny5jICovCi0JLmluaXQJCT0gYXUxeHBzY19zYW1wbGVfYWM5N19pbml0LAotCS5vcHMJCT0gTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGF1MXhwc2Nfc2FtcGxlX2FjOTdfbWFjaGluZSA9IHsKLQkubmFtZQkJPSAiQXUxeHh4IFBTQyBBQzk3IEF1ZGlvIiwKLQkuZGFpX2xpbmsJPSAmYXUxeHBzY19zYW1wbGVfYWM5N19kYWksCi0JLm51bV9saW5rcwk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2ZGF0YSA9IHsKLQkuY2FyZAkJPSAmYXUxeHBzY19zYW1wbGVfYWM5N19tYWNoaW5lLAotCS5wbGF0Zm9ybQk9ICZhdTF4cHNjX3NvY19wbGF0Zm9ybSwgLyogc2VlIGRiZG1hMi5jICovCi0JLmNvZGVjX2Rldgk9ICZzb2NfY29kZWNfZGV2X2FjOTcsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXhwc2NfcHNjMV9yZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IENQSFlTQUREUihQU0MxX0JBU0VfQUREUiksCi0JCS5lbmQJPSBDUEhZU0FERFIoUFNDMV9CQVNFX0FERFIpICsgMHgwMDBmZmZmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0jaWZkZWYgQ09ORklHX1NPQ19BVTEyMDAKLQkJLnN0YXJ0CT0gQVUxMjAwX1BTQzFfSU5ULAotCQkuZW5kCT0gQVUxMjAwX1BTQzFfSU5ULAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQkJLnN0YXJ0CT0gQVUxNTUwX1BTQzFfSU5ULAotCQkuZW5kCT0gQVUxNTUwX1BTQzFfSU5ULAotI2VuZGlmCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBEU0NSX0NNRDBfUFNDMV9UWCwKLQkJLmVuZAk9IERTQ1JfQ01EMF9QU0MxX1RYLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzFfUlgsCi0JCS5lbmQJPSBEU0NSX0NNRDBfUFNDMV9SWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdTF4cHNjX3NhbXBsZV9hYzk3X2RldjsKLQotc3RhdGljIGludCBfX2luaXQgYXUxeHBzY19zYW1wbGVfYWM5N19sb2FkKHZvaWQpCi17Ci0JaW50IHJldDsKLQotI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCi0JdW5zaWduZWQgbG9uZyBpbzsKLQotCS8qIG1vZGlmeSBzeXNfcGluZnVuYyBmb3IgQUM5NyBvbiBQU0MxICovCi0JaW8gPSBhdV9yZWFkbChTWVNfUElORlVOQyk7Ci0JaW8gfD0gU1lTX1BJTkZVTkNfUDFDOwotCWlvICY9IH4oU1lTX1BJTkZVTkNfUDFBIHwgU1lTX1BJTkZVTkNfUDFCKTsKLQlhdV93cml0ZWwoaW8sIFNZU19QSU5GVU5DKTsKLQlhdV9zeW5jKCk7Ci0jZW5kaWYKLQotCXJldCA9IC1FTk9NRU07Ci0KLQkvKiBzZXR1cCBQU0MgY2xvY2sgc291cmNlIGZvciBBQzk3IHBhcnQ6IGV4dGVybmFsIGNsb2NrIHByb3ZpZGVkCi0JICogYnkgY29kZWMuICBUaGUgcHNjLWFjOTcuYyBkcml2ZXIgZGVwZW5kcyBvbiB0aGlzIHNldHRpbmchCi0JICovCi0JYXVfd3JpdGVsKFBTQ19TRUxfQ0xLX1NFUkNMSywgUFNDMV9CQVNFX0FERFIgKyBQU0NfU0VMX09GRlNFVCk7Ci0JYXVfc3luYygpOwotCi0JYXUxeHBzY19zYW1wbGVfYWM5N19kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKLQlpZiAoIWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2KQotCQlnb3RvIG91dDsKLQotCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2LT5yZXNvdXJjZSA9Ci0JCWttZW1kdXAoYXUxeHBzY19wc2MxX3Jlcywgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKgotCQkJQVJSQVlfU0laRShhdTF4cHNjX3BzYzFfcmVzKSwgR0ZQX0tFUk5FTCk7Ci0JYXUxeHBzY19zYW1wbGVfYWM5N19kZXYtPm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGF1MXhwc2NfcHNjMV9yZXMpOwotCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2LT5pZCA9IDE7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShhdTF4cHNjX3NhbXBsZV9hYzk3X2RldiwKLQkJCSAgICAgJmF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2ZGF0YSk7Ci0JYXUxeHBzY19zYW1wbGVfYWM5N19kZXZkYXRhLmRldiA9ICZhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldi0+ZGV2OwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXUxeHBzY19zYW1wbGVfYWM5N19kZXYpOwotCi0JaWYgKHJldCkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2KTsKLQkJYXUxeHBzY19zYW1wbGVfYWM5N19kZXYgPSBOVUxMOwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4cHNjX3NhbXBsZV9hYzk3X2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldik7Ci19Ci0KLW1vZHVsZV9pbml0KGF1MXhwc2Nfc2FtcGxlX2FjOTdfbG9hZCk7Ci1tb2R1bGVfZXhpdChhdTF4cHNjX3NhbXBsZV9hYzk3X2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkF1MXh4eCBQU0Mgc2FtcGxlIEFDOTcgbWFjaGluZSIpOwotTU9EVUxFX0FVVEhPUigiTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwppbmRleCBjZjBkZmI3Li42N2NiZmU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwpAQCAtMzQ5LDkgKzM0OSw3IEBACiAJCQlzcG9ydF9oYW5kbGUtPnR4X2RtYV9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgXAogCQkJCXNpemUsICZzcG9ydF9oYW5kbGUtPnR4X2RtYV9waHksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFzcG9ydF9oYW5kbGUtPnR4X2RtYV9idWYpIHsKLQkJCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4IGRtYSBcCi0JCQkJCWJ1ZiAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgXAotCQkJCQltZW1vcnkgcmVnaW9uXG4iKTsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4IGRtYSBidWYgLSBQbGVhc2UgaW5jcmVhc2UgdW5jYWNoZWQgRE1BIG1lbW9yeSByZWdpb25cbiIpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfSBlbHNlCiAJCQkJbWVtc2V0KHNwb3J0X2hhbmRsZS0+dHhfZG1hX2J1ZiwgMCwgc2l6ZSk7CkBAIC0zNjIsOSArMzYwLDcgQEAKIAkJCXNwb3J0X2hhbmRsZS0+cnhfZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBcCiAJCQkJc2l6ZSwgJnNwb3J0X2hhbmRsZS0+cnhfZG1hX3BoeSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXNwb3J0X2hhbmRsZS0+cnhfZG1hX2J1ZikgewotCQkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZG1hIFwKLQkJCQkJYnVmIC0gUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBcCi0JCQkJCW1lbW9yeSByZWdpb25cbiIpOworCQkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZG1hIGJ1ZiAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgbWVtb3J5IHJlZ2lvblxuIik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9IGVsc2UKIAkJCQltZW1zZXQoc3BvcnRfaGFuZGxlLT5yeF9kbWFfYnVmLCAwLCBzaXplKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCmluZGV4IDYyZmJiODQuLmM2YzZhNGE3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKQEAgLTIwNyw4ICsyMDcsNyBAQAogCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY19jb2hlcmVudChwY20tPmNhcmQtPmRldiwgc2l6ZSwKIAkJCSZidWYtPmFkZHIsIEdGUF9LRVJORUwpOwogCWlmICghYnVmLT5hcmVhKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBtZW1vcnkgXAotCQkJUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIG1lbW9yeSAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlidWYtPmJ5dGVzID0gc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLXBjbS5jCmluZGV4IGE4YzczY2IuLjVlMDNiYjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uYwpAQCAtMjQ0LDggKzI0NCw3IEBACiAJYnVmLT5hcmVhID0gZG1hX2FsbG9jX2NvaGVyZW50KHBjbS0+Y2FyZC0+ZGV2LCBzaXplICogNCwKIAkJJmJ1Zi0+YWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYtPmFyZWEpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIG1lbW9yeSBcCi0JCQlQbGVhc2UgaW5jcmVhc2UgdW5jYWNoZWQgRE1BIG1lbW9yeSByZWdpb25cbiIpOworCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgbWVtb3J5IC0gUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWJ1Zi0+Ynl0ZXMgPSBzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCmluZGV4IDUyYjAwNWYuLjE3NDNkNTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKQEAgLTIzLDYgKzIzLDcgQEAKIAlzZWxlY3QgU05EX1NPQ19BSzQ2NzEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQ1M0MjcwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX01BWDk4NzcgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfREE3MjEwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1BDTTMwMDgKIAlzZWxlY3QgU05EX1NPQ19TUERJRgogCXNlbGVjdCBTTkRfU09DX1NTTTI2MDIgaWYgSTJDCkBAIC0zNSw2ICszNiw3IEBACiAJc2VsZWN0IFNORF9TT0NfVFdMNDAzMCBpZiBUV0w0MDMwX0NPUkUKIAlzZWxlY3QgU05EX1NPQ19VREExMzRYCiAJc2VsZWN0IFNORF9TT0NfVURBMTM4MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTIwMDAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004MzUwIGlmIE1GRF9XTTgzNTAKIAlzZWxlY3QgU05EX1NPQ19XTTg0MDAgaWYgTUZEX1dNODQwMAogCXNlbGVjdCBTTkRfU09DX1dNODUxMCBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCkBAIC00OSwxNCArNTEsMTggQEAKIAlzZWxlY3QgU05EX1NPQ19XTTg3NzYgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODkwMCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5MDMgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfV004OTA0IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk0MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTg5NTUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTYwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk2MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NzEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTc0IGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1dNODk3OCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5ODggaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODk5MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5OTMgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfV004OTk0IGlmIE1GRF9XTTg5OTQKIAlzZWxlY3QgU05EX1NPQ19XTTkwODEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV005NzA1IGlmIFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19XTTk3MTIgaWYgU05EX1NPQ19BQzk3X0JVUwpAQCAtMTEyLDYgKzExOCw5IEBACiBjb25maWcgU05EX1NPQ19DUzQyNzAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19EQTcyMTAKKyAgICAgICAgdHJpc3RhdGUKKwogIyBDaXJydXMgTG9naWMgQ1M0MjcwIENvZGVjIFZEID0gMy4zViBFcnJhdGEKICMgU2VsZWN0IGlmIHlvdSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGVycmF0YSB3aGVyZSB0aGUgcGFydCB3aWxsIG5vdCBmdW5jdGlvbgogIyBpZiBNQ0xLIGRpdmlkZS1ieS0xLjUgaXMgc2VsZWN0ZWQgYW5kIFZEIGlzIHNldCB0byAzLjNWLiAgVGhlIGRyaXZlciB3aWxsCkBAIC0yMDMsOSArMjEyLDE1IEBACiBjb25maWcgU05EX1NPQ19XTTg5MDMKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg5MDQKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg5NDAKICAgICAgICAgdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV004OTU1CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV004OTYwCiAJdHJpc3RhdGUKIApAQCAtMjE4LDYgKzIzMyw5IEBACiBjb25maWcgU05EX1NPQ19XTTg5NzQKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg5NzgKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg5ODgKIAl0cmlzdGF0ZQogCkBAIC0yMjcsNiArMjQ1LDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODk5MwogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODk5NAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNOTA4MQogCXRyaXN0YXRlCiAKQEAgLTI0NSwzICsyNjYsNiBAQAogCiBjb25maWcgU05EX1NPQ19UUEE2MTMwQTIKIAl0cmlzdGF0ZQorCitjb25maWcgU05EX1NPQ19XTTIwMDAKKwl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggZGJhZWNiMS4uZGQ1Y2U2ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBzbmQtc29jLWFrNDY3MS1vYmpzIDo9IGFrNDY3MS5vCiBzbmQtc29jLWNzNDI3MC1vYmpzIDo9IGNzNDI3MC5vCiBzbmQtc29jLWN4MjA0NDItb2JqcyA6PSBjeDIwNDQyLm8KK3NuZC1zb2MtZGE3MjEwLW9ianMgOj0gZGE3MjEwLm8KIHNuZC1zb2MtbDMtb2JqcyA6PSBsMy5vCiBzbmQtc29jLXBjbTMwMDgtb2JqcyA6PSBwY20zMDA4Lm8KIHNuZC1zb2Mtc3BkaWYtb2JqcyA6PSBzcGRpZl90cmFuc2NpZXZlci5vCkBAIC0zNiwxNCArMzcsMTggQEAKIHNuZC1zb2Mtd204Nzc2LW9ianMgOj0gd204Nzc2Lm8KIHNuZC1zb2Mtd204OTAwLW9ianMgOj0gd204OTAwLm8KIHNuZC1zb2Mtd204OTAzLW9ianMgOj0gd204OTAzLm8KK3NuZC1zb2Mtd204OTA0LW9ianMgOj0gd204OTA0Lm8KIHNuZC1zb2Mtd204OTQwLW9ianMgOj0gd204OTQwLm8KK3NuZC1zb2Mtd204OTU1LW9ianMgOj0gd204OTU1Lm8KIHNuZC1zb2Mtd204OTYwLW9ianMgOj0gd204OTYwLm8KIHNuZC1zb2Mtd204OTYxLW9ianMgOj0gd204OTYxLm8KIHNuZC1zb2Mtd204OTcxLW9ianMgOj0gd204OTcxLm8KIHNuZC1zb2Mtd204OTc0LW9ianMgOj0gd204OTc0Lm8KK3NuZC1zb2Mtd204OTc4LW9ianMgOj0gd204OTc4Lm8KIHNuZC1zb2Mtd204OTg4LW9ianMgOj0gd204OTg4Lm8KIHNuZC1zb2Mtd204OTkwLW9ianMgOj0gd204OTkwLm8KIHNuZC1zb2Mtd204OTkzLW9ianMgOj0gd204OTkzLm8KK3NuZC1zb2Mtd204OTk0LW9ianMgOj0gd204OTk0Lm8KIHNuZC1zb2Mtd205MDgxLW9ianMgOj0gd205MDgxLm8KIHNuZC1zb2Mtd205NzA1LW9ianMgOj0gd205NzA1Lm8KIHNuZC1zb2Mtd205NzEyLW9ianMgOj0gd205NzEyLm8KQEAgLTUzLDYgKzU4LDcgQEAKICMgQW1wCiBzbmQtc29jLW1heDk4Nzctb2JqcyA6PSBtYXg5ODc3Lm8KIHNuZC1zb2MtdHBhNjEzMGEyLW9ianMgOj0gdHBhNjEzMGEyLm8KK3NuZC1zb2Mtd20yMDAwLW9ianMgOj0gd20yMDAwLm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0NfQUM5N19DT0RFQykJKz0gc25kLXNvYy1hYzk3Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FEMTgzNikJKz0gc25kLXNvYy1hZDE4MzYubwpAQCAtNjYsNiArNzIsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0NjcxKQkrPSBzbmQtc29jLWFrNDY3MS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19DUzQyNzApCSs9IHNuZC1zb2MtY3M0MjcwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0NYMjA0NDIpCSs9IHNuZC1zb2MtY3gyMDQ0Mi5vCitvYmotJChDT05GSUdfU05EX1NPQ19EQTcyMTApCSs9IHNuZC1zb2MtZGE3MjEwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0wzKQkrPSBzbmQtc29jLWwzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1BDTTMwMDgpCSs9IHNuZC1zb2MtcGNtMzAwOC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TUERJRikJKz0gc25kLXNvYy1zcGRpZi5vCkBAIC05MiwxNCArOTksMTggQEAKIG9iai0kKENPTkZJR19TTkRfU09DX1dNODc3NikJKz0gc25kLXNvYy13bTg3NzYubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTAwKQkrPSBzbmQtc29jLXdtODkwMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDMpCSs9IHNuZC1zb2Mtd204OTAzLm8KLW9iai0kKENPTkZJR19TTkRfU09DX1dNODk3MSkJKz0gc25kLXNvYy13bTg5NzEubwotb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTc0KQkrPSBzbmQtc29jLXdtODk3NC5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDQpCSs9IHNuZC1zb2Mtd204OTA0Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk0MCkJKz0gc25kLXNvYy13bTg5NDAubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTU1KQkrPSBzbmQtc29jLXdtODk1NS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NjApCSs9IHNuZC1zb2Mtd204OTYwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk2MSkJKz0gc25kLXNvYy13bTg5NjEubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTcxKQkrPSBzbmQtc29jLXdtODk3MS5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzQpCSs9IHNuZC1zb2Mtd204OTc0Lm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODk3OCkJKz0gc25kLXNvYy13bTg5Nzgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTg4KQkrPSBzbmQtc29jLXdtODk4OC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTApCSs9IHNuZC1zb2Mtd204OTkwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk5MykJKz0gc25kLXNvYy13bTg5OTMubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTk0KQkrPSBzbmQtc29jLXdtODk5NC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTkwODEpCSs9IHNuZC1zb2Mtd205MDgxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTcwNSkJKz0gc25kLXNvYy13bTk3MDUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzEyKQkrPSBzbmQtc29jLXdtOTcxMi5vCkBAIC0xMDksMyArMTIwLDQgQEAKICMgQW1wCiBvYmotJChDT05GSUdfU05EX1NPQ19NQVg5ODc3KQkrPSBzbmQtc29jLW1heDk4Nzcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVFBBNjEzMEEyKQkrPSBzbmQtc29jLXRwYTYxMzBhMi5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTIwMDApCSs9IHNuZC1zb2Mtd20yMDAwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCmluZGV4IDJjMThlM2QuLjNjODAxMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYwpAQCAtMTcxLDU3ICsxNzEsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0vKgotICogaW50ZXJmYWNlIHRvIHJlYWQvd3JpdGUgYWQxODM2IHJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgQUQxODM2X1NQSV9SRUdfU0hGVCAxMgotI2RlZmluZSBBRDE4MzZfU1BJX1JFQUQgICAgICgxIDw8IDExKQotI2RlZmluZSBBRDE4MzZfU1BJX1ZBTF9NU0sgIDB4M0ZGCi0KLS8qCi0gKiB3cml0ZSB0byB0aGUgYWQxODM2IHJlZ2lzdGVyIHNwYWNlCi0gKi8KLQotc3RhdGljIGludCBhZDE4MzZfd3JpdGVfcmVnKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQkJdW5zaWduZWQgaW50IHZhbHVlKQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhZDE4MzZfc29jX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKLQlpZiAodmFsdWUgIT0gcmVnX2NhY2hlW3JlZ10pIHsKLQkJdW5zaWduZWQgc2hvcnQgYnVmOwotCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQgPSB7Ci0JCQkudHhfYnVmID0gJmJ1ZiwKLQkJCS5sZW4gPSAyLAotCQl9OwotCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwkvKiByZXNldCBjbG9jayBjb250cm9sIG1vZGUgKi8KKwl1MTYgYWRjX2N0cmwyID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyKTsKKwlhZGNfY3RybDIgJj0gfkFEMTgzNl9BRENfU0VSRk1UX01BU0s7CiAKLQkJYnVmID0gKHJlZyA8PCBBRDE4MzZfU1BJX1JFR19TSEZUKSB8Ci0JCQkodmFsdWUgJiBBRDE4MzZfU1BJX1ZBTF9NU0spOwotCQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQkJcmV0ID0gc3BpX3N5bmMoY29kZWMtPmNvbnRyb2xfZGF0YSwgJm0pOwotCQlpZiAocmV0ID09IDApCi0JCQlyZWdfY2FjaGVbcmVnXSA9IHZhbHVlOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsIGFkY19jdHJsMik7CiB9CiAKLS8qCi0gKiByZWFkIGZyb20gdGhlIGFkMTgzNiByZWdpc3RlciBzcGFjZSBjYWNoZQotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGFkMTgzNl9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJCSAgdW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbnQgYWQxODM2X3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCi0JaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCi0JCXJldHVybiAtRUlOVkFMOworCS8qIHJlc3RvcmUgY2xvY2sgY29udHJvbCBtb2RlICovCisJdTE2IGFkY19jdHJsMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxODM2X0FEQ19DVFJMMik7CisJYWRjX2N0cmwyIHw9IEFEMTgzNl9BRENfQVVYOwogCi0JcmV0dXJuIHJlZ19jYWNoZVtyZWddOworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyLCBhZGNfY3RybDIpOwogfQorI2Vsc2UKKyNkZWZpbmUgYWQxODM2X3NvY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgYWQxODM2X3NvY19yZXN1bWUgIE5VTEwKKyNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDE4MzZfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CkBAIC0zMDYsMzIgKzI4NCwzOCBAQAogCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwogCWNvZGVjLT5kYWkgPSAmYWQxODM2X2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDE7Ci0JY29kZWMtPndyaXRlID0gYWQxODM2X3dyaXRlX3JlZzsKLQljb2RlYy0+cmVhZCA9IGFkMTgzNl9yZWFkX3JlZ19jYWNoZTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIAogCWFkMTgzNl9kYWkuZGV2ID0gY29kZWMtPmRldjsKIAlhZDE4MzZfY29kZWMgPSBjb2RlYzsKIAorCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA0LCAxMiwgU05EX1NPQ19TUEkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwKKwkJCQlyZXQpOworCQlrZnJlZShhZDE4MzYpOworCQlyZXR1cm4gcmV0OworCX0KKwogCS8qIGRlZmF1bHQgc2V0dGluZyBmb3IgYWQxODM2ICovCiAJLyogZGUtZW1waGFzaXM6IDQ4a0h6LCBwb3dlci1vbiBkYWMgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfQ1RSTDEsIDB4MzAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwxLCAweDMwMCk7CiAJLyogdW5tdXRlIGRhYyBjaGFubmVscyAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19DVFJMMiwgMHgwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwyLCAweDApOwogCS8qIGhpZ2gtcGFzcyBmaWx0ZXIgZW5hYmxlLCBwb3dlci1vbiBhZGMgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDEsIDB4MTAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwxLCAweDEwMCk7CiAJLyogdW5tdXRlIGFkYyBjaGFubmxlcywgYWRjIGF1eCBtb2RlICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyLCAweDE4MCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMiwgMHgxODApOwogCS8qIGxlZnQvcmlnaHQgZGlmZjpQR0EvTVVYICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwzLCAweDNBKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwzLCAweDNBKTsKIAkvKiB2b2x1bWUgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfTDFfVk9MLCAweDNGRik7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX1IxX1ZPTCwgMHgzRkYpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19MMl9WT0wsIDB4M0ZGKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfUjJfVk9MLCAweDNGRik7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0wzX1ZPTCwgMHgzRkYpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19SM19WT0wsIDB4M0ZGKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0wxX1ZPTCwgMHgzRkYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfUjFfVk9MLCAweDNGRik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19MMl9WT0wsIDB4M0ZGKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX1IyX1ZPTCwgMHgzRkYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfTDNfVk9MLCAweDNGRik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19SM19WT0wsIDB4M0ZGKTsKIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOwogCWlmIChyZXQgIT0gMCkgewpAQCAtNDA0LDYgKzM4OCw4IEBACiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hZDE4MzYgPSB7CiAJLnByb2JlID0gCWFkMTgzNl9wcm9iZSwKIAkucmVtb3ZlID0gCWFkMTgzNl9yZW1vdmUsCisJLnN1c3BlbmQgPSAgICAgIGFkMTgzNl9zb2Nfc3VzcGVuZCwKKwkucmVzdW1lID0gICAgICAgYWQxODM2X3NvY19yZXN1bWUsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl9hZDE4MzYpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaAppbmRleCA3NjYwZWU2Li5lOWQ5MGQzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKQEAgLTU0LDYgKzU0LDcgQEAKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfTUFTSwkgICAgICAgKDcgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMjU2ICAgICAgICgweDQgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMTI4ICAgICAgICgweDUgPDwgNikKKyNkZWZpbmUgQUQxODM2X0FEQ19BVVggICAgICAgICAgICAgICAgICgweDYgPDwgNikKIAogI2RlZmluZSBBRDE4MzZfQURDX0NUUkwzICAgICAgICAgICAgICAgMTQKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMKaW5kZXggNWQ0ODkxOC4uYzIzMzgxMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzOC5jCkBAIC00Niw2ICs0NiwxMSBAQAogCXU4IHJlZ19jYWNoZVtBRDE5MzhfTlVNX1JFR1NdOwogfTsKIAorLyogYWQxOTM4IHJlZ2lzdGVyIGNhY2hlICYgZGVmYXVsdCByZWdpc3RlciBzZXR0aW5ncyAqLworc3RhdGljIGNvbnN0IHU4IGFkMTkzOF9yZWdbQUQxOTM4X05VTV9SRUdTXSA9IHsKKwkwLCAwLCAwLCAwLCAwLCAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAwLCAwLCAwLAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICphZDE5MzhfY29kZWM7CiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hZDE5Mzg7CiBzdGF0aWMgaW50IGFkMTkzOF9yZWdpc3RlcihzdHJ1Y3QgYWQxOTM4X3ByaXYgKmFkMTkzOCk7CkBAIC05Nyw2ICsxMDIsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGFkMTkzOF9kYXBtX3dpZGdldHNbXSA9IHsKIAlTTkRfU09DX0RBUE1fREFDKCJEQUMiLCAiUGxheWJhY2siLCBBRDE5MzhfREFDX0NUUkwwLCAwLCAxKSwKIAlTTkRfU09DX0RBUE1fQURDKCJBREMiLCAiQ2FwdHVyZSIsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiUExMX1BXUiIsIEFEMTkzOF9QTExfQ0xLX0NUUkwwLCAwLCAxLCBOVUxMLCAwKSwKIAlTTkRfU09DX0RBUE1fU1VQUExZKCJBRENfUFdSIiwgQUQxOTM4X0FEQ19DVFJMMCwgMCwgMSwgTlVMTCwgMCksCiAJU05EX1NPQ19EQVBNX09VVFBVVCgiREFDMU9VVCIpLAogCVNORF9TT0NfREFQTV9PVVRQVVQoIkRBQzJPVVQiKSwKQEAgLTEwNyw2ICsxMTMsOCBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fcGF0aHNbXSA9IHsKKwl7ICJEQUMiLCBOVUxMLCAiUExMX1BXUiIgfSwKKwl7ICJBREMiLCBOVUxMLCAiUExMX1BXUiIgfSwKIAl7ICJEQUMiLCBOVUxMLCAiQURDX1BXUiIgfSwKIAl7ICJBREMiLCBOVUxMLCAiQURDX1BXUiIgfSwKIAl7ICJEQUMxT1VUIiwgIkRBQzEgU3dpdGNoIiwgIkRBQyIgfSwKQEAgLTEyNiwzMCArMTM0LDIwIEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKIAlpbnQgcmVnOwogCi0JcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMik7CiAJcmVnID0gKG11dGUgPiAwKSA/IHJlZyB8IEFEMTkzOF9EQUNfTUFTVEVSX01VVEUgOiByZWcgJgogCQkofkFEMTkzOF9EQUNfTUFTVEVSX01VVEUpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMiwgcmVnKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZDE5MzhfcGxsX3Bvd2VyY3RybChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBjbWQpCi17Ci0JaW50IHJlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMCk7Ci0JcmVnID0gKGNtZCA+IDApID8gcmVnICYgKH5BRDE5MzhfUExMX1BPV0VSRE9XTikgOiByZWcgfAotCQlBRDE5MzhfUExMX1BPV0VSRE9XTjsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9QTExfQ0xLX0NUUkwwLCByZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhZDE5Mzhfc2V0X3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgdHhfbWFzaywKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWFzaywgaW50IHNsb3RzLCBpbnQgd2lkdGgpCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJ4X21hc2ssIGludCBzbG90cywgaW50IHdpZHRoKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0JaW50IGRhY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSk7Ci0JaW50IGFkY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMik7CisJaW50IGRhY19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEpOworCWludCBhZGNfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyKTsKIAogCWRhY19yZWcgJj0gfkFEMTkzOF9EQUNfQ0hBTl9NQVNLOwogCWFkY19yZWcgJj0gfkFEMTkzOF9BRENfQ0hBTl9NQVNLOwpAQCAtMTc1LDggKzE3Myw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSwgZGFjX3JlZyk7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyLCBhZGNfcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxLCBkYWNfcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyLCBhZGNfcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg3LDggKzE4NSw4IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAlpbnQgYWRjX3JlZywgZGFjX3JlZzsKIAotCWFkY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMik7Ci0JZGFjX3JlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxKTsKKwlhZGNfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyKTsKKwlkYWNfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxKTsKIAogCS8qIEF0IHByZXNlbnQsIHRoZSBkcml2ZXIgb25seSBzdXBwb3J0IEFVWCBBREMgbW9kZShTTkRfU09DX0RBSUZNVF9JMlMKIAkgKiB3aXRoIFRETSkgYW5kIEFEQyZEQUMgVERNIG1vZGUoU05EX1NPQ19EQUlGTVRfRFNQX0EpCkBAIC0yNjUsOCArMjYzLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyLCBhZGNfcmVnKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEsIGRhY19yZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIsIGFkY19yZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEsIGRhY19yZWcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTUsMTM0ICsyOTMsMTMgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMik7CiAJcmVnID0gKHJlZyAmICh+QUQxOTM4X0RBQ19XT1JEX0xFTl9NQVNLKSkgfCB3b3JkX2xlbjsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIHJlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMiwgcmVnKTsKIAotCXJlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwxKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDEpOwogCXJlZyA9IChyZWcgJiAofkFEMTkzOF9BRENfV09SRF9MRU5fTUFTSykpIHwgd29yZF9sZW47Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwxLCByZWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQxOTM4X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCi17Ci0Jc3dpdGNoIChsZXZlbCkgewotCWNhc2UgU05EX1NPQ19CSUFTX09OOgotCQlhZDE5MzhfcGxsX3Bvd2VyY3RybChjb2RlYywgMSk7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgotCQlhZDE5MzhfcGxsX3Bvd2VyY3RybChjb2RlYywgMCk7Ci0JCWJyZWFrOwotCX0KLQljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOwotCXJldHVybiAwOwotfQotCi0vKgotICogaW50ZXJmYWNlIHRvIHJlYWQvd3JpdGUgYWQxOTM4IHJlZ2lzdGVyCi0gKi8KLQotI2RlZmluZSBBRDE5MzhfU1BJX0FERFIgICAgMHg0Ci0jZGVmaW5lIEFEMTkzOF9TUElfUkVBRCAgICAweDEKLSNkZWZpbmUgQUQxOTM4X1NQSV9CVUZMRU4gIDMKLQotLyoKLSAqIHdyaXRlIHRvIHRoZSBhZDE5MzggcmVnaXN0ZXIgc3BhY2UKLSAqLwotCi1zdGF0aWMgaW50IGFkMTkzOF93cml0ZV9yZWcoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAotCQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAodmFsdWUgIT0gcmVnX2NhY2hlW3JlZ10pIHsKLQkJdWludDhfdCBidWZbQUQxOTM4X1NQSV9CVUZMRU5dOwotCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQgPSB7Ci0JCQkudHhfYnVmID0gYnVmLAotCQkJLmxlbiA9IEFEMTkzOF9TUElfQlVGTEVOLAotCQl9OwotCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQotCQlidWZbMF0gPSBBRDE5MzhfU1BJX0FERFIgPDwgMTsKLQkJYnVmWzFdID0gcmVnOwotCQlidWZbMl0gPSB2YWx1ZTsKLQkJc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0JCXJldCA9IHNwaV9zeW5jKGNvZGVjLT5jb250cm9sX2RhdGEsICZtKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogcmVhZCBmcm9tIHRoZSBhZDE5MzggcmVnaXN0ZXIgc3BhY2UgY2FjaGUKLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGFkMTkzOF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJCSAgdW5zaWduZWQgaW50IHJlZykKLXsKLQl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQotCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiByZWdfY2FjaGVbcmVnXTsKLX0KLQotLyoKLSAqIHJlYWQgZnJvbSB0aGUgYWQxOTM4IHJlZ2lzdGVyIHNwYWNlCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBhZDE5MzhfcmVhZF9yZWcoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCQkJdW5zaWduZWQgaW50IHJlZykKLXsKLQljaGFyIHdfYnVmW0FEMTkzOF9TUElfQlVGTEVOXTsKLQljaGFyIHJfYnVmW0FEMTkzOF9TUElfQlVGTEVOXTsKLQlpbnQgcmV0OwotCi0Jc3RydWN0IHNwaV90cmFuc2ZlciB0ID0gewotCQkudHhfYnVmID0gd19idWYsCi0JCS5yeF9idWYgPSByX2J1ZiwKLQkJLmxlbiA9IEFEMTkzOF9TUElfQlVGTEVOLAotCX07Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0KLQl3X2J1ZlswXSA9IChBRDE5MzhfU1BJX0FERFIgPDwgMSkgfCBBRDE5MzhfU1BJX1JFQUQ7Ci0Jd19idWZbMV0gPSByZWc7Ci0Jd19idWZbMl0gPSAwOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQlyZXQgPSBzcGlfc3luYyhjb2RlYy0+Y29udHJvbF9kYXRhLCAmbSk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXR1cm4Jcl9idWZbMl07Ci0JZWxzZQotCQlyZXR1cm4gLUVJTzsKLX0KLQotc3RhdGljIGludCBhZDE5MzhfZmlsbF9jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IGk7Ci0JdTggKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvZGVjLT5jb250cm9sX2RhdGE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplOyBpKyspIHsKLQkJaW50IHJldCA9IGFkMTkzOF9yZWFkX3JlZyhjb2RlYywgaSk7Ci0JCWlmIChyZXQgPT0gLUVJTykgewotCQkJZGV2X2Vycigmc3BpLT5kZXYsICJBRDE5MzggU1BJIHJlYWQgZmFpbHVyZVxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXJlZ19jYWNoZVtpXSA9IHJldDsKLQl9CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTEyLDMyICszODksMzcgQEAKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljb2RlYy0+ZGFpID0gJmFkMTkzOF9kYWk7CiAJY29kZWMtPm51bV9kYWkgPSAxOwotCWNvZGVjLT53cml0ZSA9IGFkMTkzOF93cml0ZV9yZWc7Ci0JY29kZWMtPnJlYWQgPSBhZDE5MzhfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPnNldF9iaWFzX2xldmVsID0gYWQxOTM4X3NldF9iaWFzX2xldmVsOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwogCiAJYWQxOTM4X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OwogCWFkMTkzOF9jb2RlYyA9IGNvZGVjOwogCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIGFkMTkzOF9yZWcsIEFEMTkzOF9OVU1fUkVHUyk7CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgMTYsIDgsIFNORF9TT0NfU1BJKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsCisJCQkJcmV0KTsKKwkJa2ZyZWUoYWQxOTM4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAkvKiBkZWZhdWx0IHNldHRpbmcgZm9yIGFkMTkzOCAqLwogCiAJLyogdW5tdXRlIGRhYyBjaGFubmVscyAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DSE5MX01VVEUsIDB4MCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DSE5MX01VVEUsIDB4MCk7CiAJLyogZGUtZW1waGFzaXM6IDQ4a0h6LCBwb3dlZG93biBkYWMgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIDB4MUEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIDB4MUEpOwogCS8qIHBvd2VyZG93biBkYWMsIGRhYyBpbiB0ZG0gbW9kZSAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMCwgMHg0MSk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMCwgMHg0MSk7CiAJLyogaGlnaC1wYXNzIGZpbHRlciBlbmFibGUgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDAsIDB4Myk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMCwgMHgzKTsKIAkvKiBzYXRhIGRlbGF5PTEsIGFkYyBhdXggbW9kZSAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSwgMHg0Myk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSwgMHg0Myk7CiAJLyogcGxsIGlucHV0OiBtY2xraS94aSAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X1BMTF9DTEtfQ1RSTDAsIDB4OUQpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X1BMTF9DTEtfQ1RSTDEsIDB4MDQpOwotCi0JYWQxOTM4X2ZpbGxfY2FjaGUoY29kZWMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9QTExfQ0xLX0NUUkwwLCAweDlEKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMSwgMHgwNCk7CiAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTU1OSw3ICs0NDEsNiBAQAogCiBzdGF0aWMgdm9pZCBhZDE5MzhfdW5yZWdpc3RlcihzdHJ1Y3QgYWQxOTM4X3ByaXYgKmFkMTkzOCkKIHsKLQlhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoJmFkMTkzOC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmFkMTkzOF9kYWkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmYWQxOTM4LT5jb2RlYyk7CiAJa2ZyZWUoYWQxOTM4KTsKQEAgLTU5Myw3ICs0NzQsNiBAQAogCQkJCSAgQVJSQVlfU0laRShhZDE5MzhfZGFwbV93aWRnZXRzKSk7CiAJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX3BhdGhzLCBBUlJBWV9TSVpFKGF1ZGlvX3BhdGhzKSk7CiAKLQlhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAogcGNtX2VycjoKIAlyZXR1cm4gcmV0OwpAQCAtNjEwLDM3ICs0OTAsOSBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGFkMTkzOF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCXBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7Ci0KLQlhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkMTkzOF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7Ci0KLQlpZiAoY29kZWMtPnN1c3BlbmRfYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT04pCi0JCWFkMTkzOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09OKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLSNkZWZpbmUgYWQxOTM4X3N1c3BlbmQgTlVMTAotI2RlZmluZSBhZDE5MzhfcmVzdW1lIE5VTEwKLSNlbmRpZgotCiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hZDE5MzggPSB7CiAJLnByb2JlID0gCWFkMTkzOF9wcm9iZSwKIAkucmVtb3ZlID0gCWFkMTkzOF9yZW1vdmUsCi0JLnN1c3BlbmQgPSAgICAgIGFkMTkzOF9zdXNwZW5kLAotCS5yZXN1bWUgPSAgICAgICBhZDE5MzhfcmVzdW1lLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfYWQxOTM4KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKaW5kZXggM2ExNGM2Zi4uYjllZjdlNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jCkBAIC0xODUsOSArMTg1LDcgQEAKIAkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKIAkJLmNoYW5uZWxzX21pbiA9IDIsCiAJCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCB8Ci0JCQkgU05EUlZfUENNX1JBVEVfNDgwMDAgfAotCQkJIFNORFJWX1BDTV9SQVRFXzMyMDAwLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSAgfAogCQkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwKIAkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jIGIvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYwppbmRleCBmZmUxMjJkLi5kZmJlYjJkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgImNzNDI3MC5oIgogCkBAIC0xMDYsNiArMTA3LDEwIEBACiAjZGVmaW5lIENTNDI3MF9NVVRFX0RBQ19BCTB4MDEKICNkZWZpbmUgQ1M0MjcwX01VVEVfREFDX0IJMHgwMgogCitzdGF0aWMgY29uc3QgY2hhciAqc3VwcGx5X25hbWVzW10gPSB7CisJInZhIiwgInZkIiwgInZsYyIKK307CisKIC8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIENTNDI3MCAqLwogc3RydWN0IGNzNDI3MF9wcml2YXRlIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKQEAgLTExNCw2ICsxMTksOSBAQAogCXVuc2lnbmVkIGludCBtb2RlOyAvKiBUaGUgbW9kZSAoSTJTIG9yIGxlZnQtanVzdGlmaWVkKSAqLwogCXVuc2lnbmVkIGludCBzbGF2ZV9tb2RlOwogCXVuc2lnbmVkIGludCBtYW51YWxfbXV0ZTsKKworCS8qIHBvd2VyIGRvbWFpbiByZWd1bGF0b3JzICovCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShzdXBwbHlfbmFtZXMpXTsKIH07CiAKIC8qKgpAQCAtMTkyLDYgKzIwMCwxMSBAQAogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgbWFjaGluZSBkcml2ZXIncyAnc3RhcnR1cCcgZnVuY3Rpb24sCiAgKiBvdGhlcndpc2UgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHNhbXBsZSByYXRlcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgaW4KICAqIHRpbWUgZm9yIEFMU0EuCisgKgorICogRm9yIHNldHVwcyB3aXRoIHZhcmlhYmxlIE1DTEtzLCBwYXNzIDAgYXMgJ2ZyZXEnIGFyZ3VtZW50LiBUaGlzIHdpbGwgY2F1c2UKKyAqIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgc2FtcGxlIHJhdGVzIHRvIGJlIGVuYWJsZWQuIENhbGwgaXQgYWdhaW4gd2l0aCBhCisgKiBwcm9wZXIgdmFsdWUgc2V0IG9uZSB0aGUgZXh0ZXJuYWwgY2xvY2sgaXMgc2V0IChtb3N0IHByb2JhYmx5IHlvdSB3b3VsZCBkbworICogdGhhdCBmcm9tIGEgbWFjaGluZSdzIGRyaXZlciAnaHdfcGFyYW0nIGhvb2suCiAgKi8KIHN0YXRpYyBpbnQgY3M0MjcwX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAogCQkJCSBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKQEAgLTIwNSwyMCArMjE4LDI3IEBACiAKIAljczQyNzAtPm1jbGsgPSBmcmVxOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9NQ0xLX1JBVElPUzsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCByYXRlID0gZnJlcSAvIGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5yYXRpbzsKLQkJcmF0ZXMgfD0gc25kX3BjbV9yYXRlX3RvX3JhdGVfYml0KHJhdGUpOwotCQlpZiAocmF0ZSA8IHJhdGVfbWluKQotCQkJcmF0ZV9taW4gPSByYXRlOwotCQlpZiAocmF0ZSA+IHJhdGVfbWF4KQotCQkJcmF0ZV9tYXggPSByYXRlOwotCX0KLQkvKiBGSVhNRTogc29jIHNob3VsZCBzdXBwb3J0IGEgcmF0ZSBsaXN0ICovCi0JcmF0ZXMgJj0gflNORFJWX1BDTV9SQVRFX0tOT1Q7CisJaWYgKGNzNDI3MC0+bWNsaykgeworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX01DTEtfUkFUSU9TOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCByYXRlID0gZnJlcSAvIGNzNDI3MF9tb2RlX3JhdGlvc1tpXS5yYXRpbzsKKwkJCXJhdGVzIHw9IHNuZF9wY21fcmF0ZV90b19yYXRlX2JpdChyYXRlKTsKKwkJCWlmIChyYXRlIDwgcmF0ZV9taW4pCisJCQkJcmF0ZV9taW4gPSByYXRlOworCQkJaWYgKHJhdGUgPiByYXRlX21heCkKKwkJCQlyYXRlX21heCA9IHJhdGU7CisJCX0KKwkJLyogRklYTUU6IHNvYyBzaG91bGQgc3VwcG9ydCBhIHJhdGUgbGlzdCAqLworCQlyYXRlcyAmPSB+U05EUlZfUENNX1JBVEVfS05PVDsKIAotCWlmICghcmF0ZXMpIHsKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgYSB2YWxpZCBzYW1wbGUgcmF0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlpZiAoIXJhdGVzKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJjb3VsZCBub3QgZmluZCBhIHZhbGlkIHNhbXBsZSByYXRlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJLyogZW5hYmxlIGFsbCBwb3NzaWJsZSByYXRlcyAqLworCQlyYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwOworCQlyYXRlX21pbiA9IDgwMDA7CisJCXJhdGVfbWF4ID0gMTkyMDAwOwogCX0KIAogCWNvZGVjX2RhaS0+cGxheWJhY2sucmF0ZXMgPSByYXRlczsKQEAgLTU3OSw3ICs1OTksOCBAQAogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY3M0MjcwX2NvZGVjOwotCWludCByZXQ7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBpLCByZXQ7CiAKIAkvKiBDb25uZWN0IHRoZSBjb2RlYyB0byB0aGUgc29jZGV2LiAgc25kX3NvY19uZXdfcGNtcygpIG5lZWRzIHRoaXMuICovCiAJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwpAQCAtNTk5LDggKzYyMCwyNiBAQAogCQlnb3RvIGVycm9yX2ZyZWVfcGNtczsKIAl9CiAKKwkvKiBnZXQgdGhlIHBvd2VyIHN1cHBseSByZWd1bGF0b3JzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3VwcGx5X25hbWVzKTsgaSsrKQorCQljczQyNzAtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHN1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLAorCQkJCSBjczQyNzAtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9mcmVlX3BjbXM7CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShjczQyNzAtPnN1cHBsaWVzKSwKKwkJCQkgICAgY3M0MjcwLT5zdXBwbGllcyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfZnJlZV9yZWd1bGF0b3JzOworCiAJcmV0dXJuIDA7CiAKK2Vycm9yX2ZyZWVfcmVndWxhdG9yczoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoY3M0MjcwLT5zdXBwbGllcyksCisJCQkgICAgY3M0MjcwLT5zdXBwbGllcyk7CisKIGVycm9yX2ZyZWVfcGNtczoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCkBAIC02MTYsOCArNjU1LDEyIEBACiBzdGF0aWMgaW50IGNzNDI3MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNzNDI3MF9jb2RlYzsKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShjczQyNzAtPnN1cHBsaWVzKSwgY3M0MjcwLT5zdXBwbGllcyk7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLCBjczQyNzAtPnN1cHBsaWVzKTsKIAogCXJldHVybiAwOwogfTsKQEAgLTc5OSwxNyArODQyLDMzIEBACiBzdGF0aWMgaW50IGNzNDI3MF9zb2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjczQyNzBfY29kZWM7Ci0JaW50IHJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX1BXUkNUTCkgfCBDUzQyNzBfUFdSQ1RMX1BETl9BTEw7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZWcsIHJldDsKIAotCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfUFdSQ1RMLCByZWcpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX1BXUkNUTCkgfCBDUzQyNzBfUFdSQ1RMX1BETl9BTEw7CisJaWYgKHJlZyA8IDApCisJCXJldHVybiByZWc7CisKKwlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyNzBfUFdSQ1RMLCByZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLAorCQkJICAgICAgIGNzNDI3MC0+c3VwcGxpZXMpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3M0MjcwX3NvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjczQyNzBfY29kZWM7CisJc3RydWN0IGNzNDI3MF9wcml2YXRlICpjczQyNzAgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50ID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKIAlpbnQgcmVnOwogCisJcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoY3M0MjcwLT5zdXBwbGllcyksCisJCQkgICAgICBjczQyNzAtPnN1cHBsaWVzKTsKKwogCS8qIEluIGNhc2UgdGhlIGRldmljZSB3YXMgcHV0IHRvIGhhcmQgcmVzZXQgZHVyaW5nIHNsZWVwLCB3ZSBuZWVkIHRvCiAJICogd2FpdCA1MDBucyBoZXJlIGJlZm9yZSBhbnkgSTJDIGNvbW11bmljYXRpb24uICovCiAJbmRlbGF5KDUwMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5jIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjI5NzVhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuYwpAQCAtMCwwICsxLDU4OSBAQAorLyoKKyAqIERBNzIxMCBBTFNBIFNvYyBjb2RlYyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIFdyaXR0ZW4gYnkgRGF2aWQgQ2hlbiA8RGFqdW4uY2hlbkBkaWFzZW1pLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENsZWFudXBzIGJ5IEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBUZXN0ZWQgb24gU3VwZXJIIEVjb3ZlYzI0IGJvYXJkIHdpdGggUzE2L1MyNCBMRSBpbiA0OEtIeiB1c2luZyBJMlMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImRhNzIxMC5oIgorCisvKiBEQTcyMTAgcmVnaXN0ZXIgc3BhY2UgKi8KKyNkZWZpbmUgREE3MjEwX1NUQVRVUwkJCTB4MDIKKyNkZWZpbmUgREE3MjEwX1NUQVJUVVAxCQkJMHgwMworI2RlZmluZSBEQTcyMTBfTUlDX0wJCQkweDA3CisjZGVmaW5lIERBNzIxMF9NSUNfUgkJCTB4MDgKKyNkZWZpbmUgREE3MjEwX0lOTUlYX0wJCQkweDBECisjZGVmaW5lIERBNzIxMF9JTk1JWF9SCQkJMHgwRQorI2RlZmluZSBEQTcyMTBfQURDX0hQRgkJCTB4MEYKKyNkZWZpbmUgREE3MjEwX0FEQwkJCTB4MTAKKyNkZWZpbmUgREE3MjEwX0RBQ19IUEYJCQkweDE0CisjZGVmaW5lIERBNzIxMF9EQUNfTAkJCTB4MTUKKyNkZWZpbmUgREE3MjEwX0RBQ19SCQkJMHgxNgorI2RlZmluZSBEQTcyMTBfREFDX1NFTAkJCTB4MTcKKyNkZWZpbmUgREE3MjEwX09VVE1JWF9MCQkJMHgxQworI2RlZmluZSBEQTcyMTBfT1VUTUlYX1IJCQkweDFECisjZGVmaW5lIERBNzIxMF9IUF9MX1ZPTAkJCTB4MjEKKyNkZWZpbmUgREE3MjEwX0hQX1JfVk9MCQkJMHgyMgorI2RlZmluZSBEQTcyMTBfSFBfQ0ZHCQkJMHgyMworI2RlZmluZSBEQTcyMTBfREFJX1NSQ19TRUwJCTB4MjUKKyNkZWZpbmUgREE3MjEwX0RBSV9DRkcxCQkJMHgyNgorI2RlZmluZSBEQTcyMTBfREFJX0NGRzMJCQkweDI4CisjZGVmaW5lIERBNzIxMF9QTExfRElWMwkJCTB4MkIKKyNkZWZpbmUgREE3MjEwX1BMTAkJCTB4MkMKKworLyogU1RBUlRVUDEgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfU0NfTVNUX0VOCQkoMSA8PCAwKQorCisvKiBNSUNfTCBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9NSUNCSUFTX0VOCQkoMSA8PCA2KQorI2RlZmluZSBEQTcyMTBfTUlDX0xfRU4JCQkoMSA8PCA3KQorCisvKiBNSUNfUiBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9NSUNfUl9FTgkJCSgxIDw8IDcpCisKKy8qIElOTUlYX0wgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfSU5fTF9FTgkJCSgxIDw8IDcpCisKKy8qIElOTUlYX1IgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfSU5fUl9FTgkJCSgxIDw8IDcpCisKKy8qIEFEQ19IUEYgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfQURDX1ZPSUNFX0VOCQkoMSA8PCA3KQorCisvKiBBREMgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfQURDX0xfRU4JCQkoMSA8PCAzKQorI2RlZmluZSBEQTcyMTBfQURDX1JfRU4JCQkoMSA8PCA3KQorCisvKiBEQUNfSFBGIGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfREFDX1ZPSUNFX0VOCQkoMSA8PCA3KQorCisvKiBEQUNfU0VMIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0RBQ19MX1NSQ19EQUlfTAkJKDQgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBQ19MX0VOCQkJKDEgPDwgMykKKyNkZWZpbmUgREE3MjEwX0RBQ19SX1NSQ19EQUlfUgkJKDUgPDwgNCkKKyNkZWZpbmUgREE3MjEwX0RBQ19SX0VOCQkJKDEgPDwgNykKKworLyogT1VUTUlYX0wgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfT1VUX0xfRU4JCQkoMSA8PCA3KQorCisvKiBPVVRNSVhfUiBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9PVVRfUl9FTgkJCSgxIDw8IDcpCisKKy8qIEhQX0NGRyBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9IUF8yQ0FQX01PREUJCSgxIDw8IDEpCisjZGVmaW5lIERBNzIxMF9IUF9TRU5TRV9FTgkJKDEgPDwgMikKKyNkZWZpbmUgREE3MjEwX0hQX0xfRU4JCQkoMSA8PCAzKQorI2RlZmluZSBEQTcyMTBfSFBfTU9ERQkJCSgxIDw8IDYpCisjZGVmaW5lIERBNzIxMF9IUF9SX0VOCQkJKDEgPDwgNykKKworLyogREFJX1NSQ19TRUwgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfREFJX09VVF9MX1NSQwkJKDYgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBSV9PVVRfUl9TUkMJCSg3IDw8IDQpCisKKy8qIERBSV9DRkcxIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0RBSV9XT1JEX1MxNl9MRQkJKDAgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBSV9XT1JEX1MyNF9MRQkJKDIgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBSV9GTEVOXzY0QklUCQkoMSA8PCAyKQorI2RlZmluZSBEQTcyMTBfREFJX01PREVfTUFTVEVSCQkoMSA8PCA3KQorCisvKiBEQUlfQ0ZHMyBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9EQUlfRk9STUFUX0kyU01PREUJKDAgPDwgMCkKKyNkZWZpbmUgREE3MjEwX0RBSV9PRQkJCSgxIDw8IDMpCisjZGVmaW5lIERBNzIxMF9EQUlfRU4JCQkoMSA8PCA3KQorCisvKlBMTF9ESVYzIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX01DTEtfUkFOR0VfMTBfMjBfTUhaCSgxIDw8IDQpCisjZGVmaW5lIERBNzIxMF9QTExfQllQCQkJKDEgPDwgNikKKworLyogUExMIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX1BMTF9GU180ODAwMAkJKDExIDw8IDApCisKKyNkZWZpbmUgREE3MjEwX1ZFUlNJT04gIjAuMC4xIgorCisvKiBDb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCBkYTcyMTBfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmRhNzIxMF9jb2RlYzsKKworLyoKKyAqIFJlZ2lzdGVyIGNhY2hlCisgKi8KK3N0YXRpYyBjb25zdCB1OCBkYTcyMTBfcmVnW10gPSB7CisJMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjAgIC0gUjcgICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwJLyogUjggIC0gUkYgICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMCwgMHgxMCwgMHg1NCwJLyogUjEwIC0gUjE3ICovCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjE4IC0gUjFGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg3NiwgMHgwMCwgMHgwMCwJLyogUjIwIC0gUjI3ICovCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgyQSwgMHgwMCwgMHg0MCwgMHgwMCwJLyogUjI4IC0gUjJGICovCisJMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwJLyogUjMwIC0gUjM3ICovCisJMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjM4IC0gUjNGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjQwIC0gUjRGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjQ4IC0gUjRGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjUwIC0gUjU3ICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjU4IC0gUjVGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjYwIC0gUjY3ICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjY4IC0gUjZGICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjcwIC0gUjc3ICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMCwJLyogUjc4IC0gUjdGICovCisJMHgwMCwgMHgwMCwgMHgyQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogUjgwIC0gUjg3ICovCisJMHgwMCwJCQkJCQkvKiBSODggICAgICAgKi8KK307CisKKy8qCisgKiBSZWFkIGRhNzIxMCByZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgaW5saW5lIHUzMiBkYTcyMTBfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1MzIgcmVnKQoreworCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJQlVHX09OKHJlZyA+IEFSUkFZX1NJWkUoZGE3MjEwX3JlZykpOworCXJldHVybiBjYWNoZVtyZWddOworfQorCisvKgorICogV3JpdGUgdG8gdGhlIGRhNzIxMCByZWdpc3RlciBzcGFjZQorICovCitzdGF0aWMgaW50IGRhNzIxMF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHUzMiByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1OCAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXU4IGRhdGFbMl07CisKKwlCVUdfT04oY29kZWMtPnZvbGF0aWxlX3JlZ2lzdGVyKTsKKworCWRhdGFbMF0gPSByZWcgJiAweGZmOworCWRhdGFbMV0gPSB2YWx1ZSAmIDB4ZmY7CisKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoMiAhPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMikpCisJCXJldHVybiAtRUlPOworCisJY2FjaGVbcmVnXSA9IHZhbHVlOworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBmcm9tIHRoZSBkYTcyMTAgcmVnaXN0ZXIgc3BhY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGRhNzIxMF9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTMyIHJlZykKK3sKKwlpZiAoREE3MjEwX1NUQVRVUyA9PSByZWcpCisJCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY29kZWMtPmNvbnRyb2xfZGF0YSwgcmVnKTsKKworCXJldHVybiBkYTcyMTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgZGE3MjEwX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCWludCBpc19wbGF5ID0gc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCisJaWYgKGlzX3BsYXkpIHsKKwkJLyogUGxheUJhY2sgVm9sdW1lIDQwICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9IUF9MX1ZPTCwgMHgzRiwgNDApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfSFBfUl9WT0wsIDB4M0YsIDQwKTsKKworCQkvKiBFbmFibGUgT3V0ICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9PVVRNSVhfTCwgMHgxRiwgMHgxMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9PVVRNSVhfUiwgMHgxRiwgMHgxMCk7CisKKwl9IGVsc2UgeworCQkvKiBWb2x1bWUgNyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfTUlDX0wsIDB4NywgMHg3KTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX01JQ19SLCAweDcsIDB4Nyk7CisKKwkJLyogRW5hYmxlIE1pYyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfSU5NSVhfTCwgMHgxRiwgMHgxKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX0lOTUlYX1IsIDB4MUYsIDB4MSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUENNIERBSSB3b3JkIGxlbmd0aC4KKyAqLworc3RhdGljIGludCBkYTcyMTBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJdTMyIGRhaV9jZmcxOworCXUzMiByZWcsIG1hc2s7CisKKwkvKiBzZXQgREFJIHNvdXJjZSB0byBMZWZ0IGFuZCBSaWdodCBBREMgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9EQUlfU1JDX1NFTCwKKwkJICAgICBEQTcyMTBfREFJX09VVF9SX1NSQyB8IERBNzIxMF9EQUlfT1VUX0xfU1JDKTsKKworCS8qIEVuYWJsZSBEQUkgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMywgREE3MjEwX0RBSV9PRSB8IERBNzIxMF9EQUlfRU4pOworCisJZGFpX2NmZzEgPSAweEZDICYgZGE3MjEwX3JlYWQoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMSk7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWRhaV9jZmcxIHw9IERBNzIxMF9EQUlfV09SRF9TMTZfTEU7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWRhaV9jZmcxIHw9IERBNzIxMF9EQUlfV09SRF9TMjRfTEU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0RBSV9DRkcxLCBkYWlfY2ZnMSk7CisKKwkvKiBGSVhNRQorCSAqCisJICogSXQgc3VwcG9ydCA0OEsgb25seSBub3cKKwkgKi8KKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwljYXNlIDQ4MDAwOgorCQlpZiAoU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA9PSBzdWJzdHJlYW0tPnN0cmVhbSkgeworCQkJcmVnICA9IERBNzIxMF9EQUNfSFBGOworCQkJbWFzayA9IERBNzIxMF9EQUNfVk9JQ0VfRU47CisJCX0gZWxzZSB7CisJCQlyZWcgID0gREE3MjEwX0FEQ19IUEY7CisJCQltYXNrID0gREE3MjEwX0FEQ19WT0lDRV9FTjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgREFJIG1vZGUgYW5kIEZvcm1hdAorICovCitzdGF0aWMgaW50IGRhNzIxMF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgdTMyIGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUzMiBkYWlfY2ZnMTsKKwl1MzIgZGFpX2NmZzM7CisKKwlkYWlfY2ZnMSA9IDB4N2YgJiBkYTcyMTBfcmVhZChjb2RlYywgREE3MjEwX0RBSV9DRkcxKTsKKwlkYWlfY2ZnMyA9IDB4ZmMgJiBkYTcyMTBfcmVhZChjb2RlYywgREE3MjEwX0RBSV9DRkczKTsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWRhaV9jZmcxIHw9IERBNzIxMF9EQUlfTU9ERV9NQVNURVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZJWE1FCisJICoKKwkgKiBJdCBzdXBwb3J0IEkyUyBvbmx5IG5vdworCSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJZGFpX2NmZzMgfD0gREE3MjEwX0RBSV9GT1JNQVRfSTJTTU9ERTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRklYTUUKKwkgKgorCSAqIEl0IHN1cHBvcnQgNjRiaXQgZGF0YSB0cmFuc21pc3Npb24gb25seSBub3cKKwkgKi8KKwlkYWlfY2ZnMSB8PSBEQTcyMTBfREFJX0ZMRU5fNjRCSVQ7CisKKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9EQUlfQ0ZHMSwgZGFpX2NmZzEpOworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0RBSV9DRkczLCBkYWlfY2ZnMyk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBEQTcyMTBfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKKworLyogREFJIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGRhNzIxMF9kYWlfb3BzID0geworCS5zdGFydHVwCT0gZGE3MjEwX3N0YXJ0dXAsCisJLmh3X3BhcmFtcwk9IGRhNzIxMF9od19wYXJhbXMsCisJLnNldF9mbXQJPSBkYTcyMTBfc2V0X2RhaV9mbXQsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgZGE3MjEwX2RhaSA9IHsKKwkubmFtZSA9ICJEQTcyMTAgSUlTIiwKKwkuaWQgPSAwLAorCS8qIHBsYXliYWNrIGNhcGFiaWxpdGllcyAqLworCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkuZm9ybWF0cyA9IERBNzIxMF9GT1JNQVRTLAorCX0sCisJLyogY2FwdHVyZSBjYXBhYmlsaXRpZXMgKi8KKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCS5mb3JtYXRzID0gREE3MjEwX0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJmRhNzIxMF9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRhNzIxMF9kYWkpOworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgREE3MjEwIGRyaXZlcgorICogcmVnaXN0ZXIgdGhlIG1peGVyIGFuZCBkc3AgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwKKyAqLworc3RhdGljIGludCBkYTcyMTBfaW5pdChzdHJ1Y3QgZGE3MjEwX3ByaXYgKmRhNzIxMCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmZGE3MjEwLT5jb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkYTcyMTBfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBkYTcyMTAgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhCT0gZGE3MjEwOworCWNvZGVjLT5uYW1lCQk9ICJEQTcyMTAiOworCWNvZGVjLT5vd25lcgkJPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZAkJPSBkYTcyMTBfcmVhZDsKKwljb2RlYy0+d3JpdGUJCT0gZGE3MjEwX3dyaXRlOworCWNvZGVjLT5kYWkJCT0gJmRhNzIxMF9kYWk7CisJY29kZWMtPm51bV9kYWkJCT0gMTsKKwljb2RlYy0+aHdfd3JpdGUJCT0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZQk9IEFSUkFZX1NJWkUoZGE3MjEwX3JlZyk7CisJY29kZWMtPnJlZ19jYWNoZQk9IGttZW1kdXAoZGE3MjEwX3JlZywKKwkJCQkJICBzaXplb2YoZGE3MjEwX3JlZyksIEdGUF9LRVJORUwpOworCisJaWYgKCFjb2RlYy0+cmVnX2NhY2hlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhNzIxMF9kYWkuZGV2ID0gY29kZWMtPmRldjsKKwlkYTcyMTBfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIENPREVDOiAlZFxuIiwgcmV0KTsKKwkJZ290byBpbml0X2VycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmZGE3MjEwX2RhaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJZ290byBpbml0X2VycjsKKwl9CisKKwkvKiBGSVhNRQorCSAqCisJICogVGhpcyBkcml2ZXIgdXNlIGZpeGVkIHZhbHVlIGhlcmUKKwkgKi8KKworCS8qCisJICogQURDIHNldHRpbmdzCisJICovCisKKwkvKiBFbmFibGUgTGVmdCAmIFJpZ2h0IE1JQyBQR0EgYW5kIE1pYyBCaWFzICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfTUlDX0wsIERBNzIxMF9NSUNfTF9FTiB8IERBNzIxMF9NSUNCSUFTX0VOKTsKKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9NSUNfUiwgREE3MjEwX01JQ19SX0VOKTsKKworCS8qIEVuYWJsZSBMZWZ0IGFuZCBSaWdodCBpbnB1dCBQR0EgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9JTk1JWF9MLCBEQTcyMTBfSU5fTF9FTik7CisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfSU5NSVhfUiwgREE3MjEwX0lOX1JfRU4pOworCisJLyogRW5hYmxlIExlZnQgYW5kIFJpZ2h0IEFEQyAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0FEQywgREE3MjEwX0FEQ19MX0VOIHwgREE3MjEwX0FEQ19SX0VOKTsKKworCS8qCisJICogREFDIHNldHRpbmdzCisJICovCisKKwkvKiBFbmFibGUgTGVmdCBhbmQgUmlnaHQgREFDICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfREFDX1NFTCwKKwkJICAgICBEQTcyMTBfREFDX0xfU1JDX0RBSV9MIHwgREE3MjEwX0RBQ19MX0VOIHwKKwkJICAgICBEQTcyMTBfREFDX1JfU1JDX0RBSV9SIHwgREE3MjEwX0RBQ19SX0VOKTsKKworCS8qIEVuYWJsZSBMZWZ0IGFuZCBSaWdodCBvdXQgUEdBICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfT1VUTUlYX0wsIERBNzIxMF9PVVRfTF9FTik7CisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfT1VUTUlYX1IsIERBNzIxMF9PVVRfUl9FTik7CisKKwkvKiBFbmFibGUgTGVmdCBhbmQgUmlnaHQgSGVhZFBob25lIFBHQSAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0hQX0NGRywKKwkJICAgICBEQTcyMTBfSFBfMkNBUF9NT0RFIHwgREE3MjEwX0hQX1NFTlNFX0VOIHwKKwkJICAgICBEQTcyMTBfSFBfTF9FTiB8IERBNzIxMF9IUF9NT0RFIHwgREE3MjEwX0hQX1JfRU4pOworCisJLyogRGlhYmxlIFBMTCBhbmQgYnlwYXNzIGl0ICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfUExMLCBEQTcyMTBfUExMX0ZTXzQ4MDAwKTsKKworCS8qIEJ5cGFzcyBQTEwgYW5kIHNldCBNQ0xLIGZyZXEgcmFuZyB0byAxMC0yME1IeiAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX1BMTF9ESVYzLAorCQkgICAgIERBNzIxMF9NQ0xLX1JBTkdFXzEwXzIwX01IWiB8IERBNzIxMF9QTExfQllQKTsKKworCS8qIEFjdGl2YXRlIGFsbCBlbmFibGVkIHN1YnN5c3RlbSAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX1NUQVJUVVAxLCBEQTcyMTBfU0NfTVNUX0VOKTsKKworCXJldHVybiByZXQ7CisKK2luaXRfZXJyOgorCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworCWNvZGVjLT5yZWdfY2FjaGUgPSBOVUxMOworCisJcmV0dXJuIHJldDsKKworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorc3RhdGljIGludCBfX2RldmluaXQgZGE3MjEwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJICAgCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGE3MjEwX3ByaXYgKmRhNzIxMDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldDsKKworCWRhNzIxMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYTcyMTBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghZGE3MjEwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJmRhNzIxMC0+Y29kZWM7CisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGRhNzIxMCk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCXJldCA9IGRhNzIxMF9pbml0KGRhNzIxMCk7CisJaWYgKHJldCA8IDApCisJCXByX2VycigiRmFpbGVkIHRvIGluaXRpYWxpc2UgZGE3MjEwIGF1ZGlvIGNvZGVjXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRhNzIxMF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGRhNzIxMF9wcml2ICpkYTcyMTAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmRhNzIxMF9kYWkpOworCWtmcmVlKGRhNzIxMC0+Y29kZWMucmVnX2NhY2hlKTsKKwlrZnJlZShkYTcyMTApOworCWRhNzIxMF9jb2RlYyA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGRhNzIxMF9pMmNfaWRbXSA9IHsKKwl7ICJkYTcyMTAiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGRhNzIxMF9pMmNfaWQpOworCisvKiBJMkMgY29kZWMgY29udHJvbCBsYXllciAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRhNzIxMF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIkRBNzIxMCBJMkMgQ29kZWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IGRhNzIxMF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICBfX2RldmV4aXRfcChkYTcyMTBfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gZGE3MjEwX2kyY19pZCwKK307CisjZW5kaWYKKworc3RhdGljIGludCBkYTcyMTBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0OworCisJaWYgKCFkYTcyMTBfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGRhNzIxMF9jb2RlYzsKKwljb2RlYyA9IGRhNzIxMF9jb2RlYzsKKworCS8qIFJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHBjbV9lcnI7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiREE3MjEwIEF1ZGlvIENvZGVjICVzXG4iLCBEQTcyMTBfVkVSU0lPTik7CisKK3BjbV9lcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkYTcyMTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9kYTcyMTAgPSB7CisJLnByb2JlID0JZGE3MjEwX3Byb2JlLAorCS5yZW1vdmUgPQlkYTcyMTBfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfZGE3MjEwKTsKKworc3RhdGljIGludCBfX2luaXQgZGE3MjEwX21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmRhNzIxMF9pMmNfZHJpdmVyKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChkYTcyMTBfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYTcyMTBfZXhpdCh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmZGE3MjEwX2kyY19kcml2ZXIpOworI2VuZGlmCit9Cittb2R1bGVfZXhpdChkYTcyMTBfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBEQTcyMTAgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBDaGVuLCBLdW5pbm9yaSBNb3JpbW90byIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuaCBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwZDYyMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIGRhNzIxMC5oICAtLSAgYXVkaW8gZHJpdmVyIGZvciBkYTcyMTAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqIFdyaXR0ZW4gYnkgRGF2aWQgQ2hlbiA8RGFqdW4uY2hlbkBkaWFzZW1pLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENsZWFudXBzIGJ5IEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9EQTcyMTBfSAorI2RlZmluZSBfREE3MjEwX0gKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBkYTcyMTBfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2RhNzIxMDsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwppbmRleCAyYjRkYzJiLi5lNGI5NDZhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCkBAIC03NjUsOSArNzY1LDEwIEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgYWljM3hfcHJpdiAqYWljM3ggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCBjb2RlY19jbGsgPSAwLCBieXBhc3NfcGxsID0gMCwgZnNyZWYsIGxhc3RfY2xrID0gMDsKLQl1OCBkYXRhLCByLCBwLCBwbGxfcSwgcGxsX3AgPSAxLCBwbGxfciA9IDEsIHBsbF9qID0gMTsKLQl1MTYgcGxsX2QgPSAxOworCXU4IGRhdGEsIGosIHIsIHAsIHBsbF9xLCBwbGxfcCA9IDEsIHBsbF9yID0gMSwgcGxsX2ogPSAxOworCXUxNiBkLCBwbGxfZCA9IDE7CiAJdTggcmVnOworCWludCBjbGs7CiAKIAkvKiBzZWxlY3QgZGF0YSB3b3JkIGxlbmd0aCAqLwogCWRhdGEgPQpAQCAtODMzLDQ4ICs4MzQsNzAgQEAKIAlpZiAoYnlwYXNzX3BsbCkKIAkJcmV0dXJuIDA7CiAKLQkvKiBVc2UgUExMCi0JICogZmluZCBhbiBhcHJvcHJpYXRlIHNldHVwIGZvciBqLCBkLCByIGFuZCBwIGJ5IGl0ZXJhdGluZyBvdmVyCi0JICogcCBhbmQgciAtIGogYW5kIGQgYXJlIGNhbGN1bGF0ZWQgZm9yIGVhY2ggZnJhY3Rpb24uCi0JICogVXAgdG8gMTI4IHZhbHVlcyBhcmUgcHJvYmVkLCB0aGUgY2xvc2VzdCBvbmUgd2lucyB0aGUgZ2FtZS4KKwkvKiBVc2UgUExMLCBjb21wdXRlIGFwcm9wcmlhdGUgc2V0dXAgZm9yIGosIGQsIHIgYW5kIHAsIHRoZSBjbG9zZXN0CisJICogb25lIHdpbnMgdGhlIGdhbWUuIFRyeSB3aXRoIGQ9PTAgZmlyc3QsIG5leHQgd2l0aCBkIT0wLgorCSAqIENvbnN0cmFpbnRzIGZvciBqIGFyZSBhY2NvcmRpbmcgdG8gdGhlIGRhdGFzaGVldC4KIAkgKiBUaGUgc3lzY2xrIGlzIGRpdmlkZWQgYnkgMTAwMCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLgogCSAqLworCiAJY29kZWNfY2xrID0gKDIwNDggKiBmc3JlZikgLyAoYWljM3gtPnN5c2NsayAvIDEwMDApOwogCiAJZm9yIChyID0gMTsgciA8PSAxNjsgcisrKQogCQlmb3IgKHAgPSAxOyBwIDw9IDg7IHArKykgewotCQkJaW50IGNsaywgdG1wID0gKGNvZGVjX2NsayAqIHBsbF9yICogMTApIC8gcGxsX3A7Ci0JCQl1OCBqID0gdG1wIC8gMTAwMDA7Ci0JCQl1MTYgZCA9IHRtcCAlIDEwMDAwOworCQkJZm9yIChqID0gNDsgaiA8PSA1NTsgaisrKSB7CisJCQkJLyogVGhpcyBpcyBhY3R1YWxseSAxMDAwKigoaisoZC8xMDAwMCkpKnIpL3AKKwkJCQkgKiBUaGUgdGVybSBoYWQgdG8gYmUgY29udmVydGVkIHRvIGdldAorCQkJCSAqIHJpZCBvZiB0aGUgZGl2aXNpb24gYnkgMTAwMDA7IGQgPSAwIGhlcmUKKwkJCQkgKi8KKwkJCQlpbnQgdG1wX2NsayA9ICgxMDAwICogaiAqIHIpIC8gcDsKIAotCQkJaWYgKGogPiA2MykKLQkJCQljb250aW51ZTsKKwkJCQkvKiBDaGVjayB3aGV0aGVyIHRoaXMgdmFsdWVzIGdldCBjbG9zZXIgdGhhbgorCQkJCSAqIHRoZSBiZXN0IG9uZXMgd2UgaGFkIGJlZm9yZQorCQkJCSAqLworCQkJCWlmIChhYnMoY29kZWNfY2xrIC0gdG1wX2NsaykgPAorCQkJCQlhYnMoY29kZWNfY2xrIC0gbGFzdF9jbGspKSB7CisJCQkJCXBsbF9qID0gajsgcGxsX2QgPSAwOworCQkJCQlwbGxfciA9IHI7IHBsbF9wID0gcDsKKwkJCQkJbGFzdF9jbGsgPSB0bXBfY2xrOworCQkJCX0KIAotCQkJaWYgKGQgIT0gMCAmJiBhaWMzeC0+c3lzY2xrIDwgMTAwMDAwMDApCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIFRoaXMgaXMgYWN0dWFsbHkgMTAwMCAqICgoaiArIChkLzEwMDAwKSkgKiByKSAvIHAKLQkJCSAqIFRoZSB0ZXJtIGhhZCB0byBiZSBjb252ZXJ0ZWQgdG8gZ2V0IHJpZCBvZiB0aGUKLQkJCSAqIGRpdmlzaW9uIGJ5IDEwMDAwICovCi0JCQljbGsgPSAoKDEwMDAwICogaiAqIHIpICsgKGQgKiByKSkgLyAoMTAgKiBwKTsKLQotCQkJLyogY2hlY2sgd2hldGhlciB0aGlzIHZhbHVlcyBnZXQgY2xvc2VyIHRoYW4gdGhlIGJlc3QKLQkJCSAqIG9uZXMgd2UgaGFkIGJlZm9yZSAqLwotCQkJaWYgKGFicyhjb2RlY19jbGsgLSBjbGspIDwgYWJzKGNvZGVjX2NsayAtIGxhc3RfY2xrKSkgewotCQkJCXBsbF9qID0gajsgcGxsX2QgPSBkOyBwbGxfciA9IHI7IHBsbF9wID0gcDsKLQkJCQlsYXN0X2NsayA9IGNsazsKKwkJCQkvKiBFYXJseSBleGl0IGZvciBleGFjdCBtYXRjaGVzICovCisJCQkJaWYgKHRtcF9jbGsgPT0gY29kZWNfY2xrKQorCQkJCQlnb3RvIGZvdW5kOwogCQkJfQotCi0JCQkvKiBFYXJseSBleGl0IGZvciBleGFjdCBtYXRjaGVzICovCi0JCQlpZiAoY2xrID09IGNvZGVjX2NsaykKLQkJCQlicmVhazsKIAkJfQogCisJLyogdHJ5IHdpdGggZCAhPSAwICovCisJZm9yIChwID0gMTsgcCA8PSA4OyBwKyspIHsKKwkJaiA9IGNvZGVjX2NsayAqIHAgLyAxMDAwOworCisJCWlmIChqIDwgNCB8fCBqID4gMTEpCisJCQljb250aW51ZTsKKworCQkvKiBkbyBub3QgdXNlIGNvZGVjX2NsayBoZXJlIHNpbmNlIHdlJ2QgbG9vc2UgcHJlY2lzaW9uICovCisJCWQgPSAoKDIwNDggKiBwICogZnNyZWYpIC0gaiAqIGFpYzN4LT5zeXNjbGspCisJCQkqIDEwMCAvIChhaWMzeC0+c3lzY2xrLzEwMCk7CisKKwkJY2xrID0gKDEwMDAwICogaiArIGQpIC8gKDEwICogcCk7CisKKwkJLyogY2hlY2sgd2hldGhlciB0aGlzIHZhbHVlcyBnZXQgY2xvc2VyIHRoYW4gdGhlIGJlc3QKKwkJICogb25lcyB3ZSBoYWQgYmVmb3JlICovCisJCWlmIChhYnMoY29kZWNfY2xrIC0gY2xrKSA8IGFicyhjb2RlY19jbGsgLSBsYXN0X2NsaykpIHsKKwkJCXBsbF9qID0gajsgcGxsX2QgPSBkOyBwbGxfciA9IDE7IHBsbF9wID0gcDsKKwkJCWxhc3RfY2xrID0gY2xrOworCQl9CisKKwkJLyogRWFybHkgZXhpdCBmb3IgZXhhY3QgbWF0Y2hlcyAqLworCQlpZiAoY2xrID09IGNvZGVjX2NsaykKKwkJCWdvdG8gZm91bmQ7CisJfQorCiAJaWYgKGxhc3RfY2xrID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiB1bmFibGUgdG8gc2V0dXAgUExMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorZm91bmQ6CiAJZGF0YSA9IGFpYzN4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBBSUMzWF9QTExfUFJPR0FfUkVHKTsKIAlhaWMzeF93cml0ZShjb2RlYywgQUlDM1hfUExMX1BST0dBX1JFRywgZGF0YSB8IChwbGxfcCA8PCBQTExQX1NISUZUKSk7CiAJYWljM3hfd3JpdGUoY29kZWMsIEFJQzNYX09WUkZfU1RBVFVTX0FORF9QTExSX1JFRywgcGxsX3IgPDwgUExMUl9TSElGVCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKaW5kZXggOWM4OTAzZC4uZjlmMzY3ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgpAQCAtNTgsMTEgKzU5LDI2IEBACiAJREFDMzNfRkxVU0gsCiB9OwogCitlbnVtIGRhYzMzX2ZpZm9fbW9kZXMgeworCURBQzMzX0ZJRk9fQllQQVNTID0gMCwKKwlEQUMzM19GSUZPX01PREUxLAorCURBQzMzX0ZJRk9fTU9ERTcsCisJREFDMzNfRklGT19MQVNUX01PREUsCit9OworCisjZGVmaW5lIERBQzMzX05VTV9TVVBQTElFUyAzCitzdGF0aWMgY29uc3QgY2hhciAqZGFjMzNfc3VwcGx5X25hbWVzW0RBQzMzX05VTV9TVVBQTElFU10gPSB7CisJIkFWREQiLAorCSJEVkREIiwKKwkiSU9WREQiLAorfTsKKwogc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgewogCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGFjMzNfd3E7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbREFDMzNfTlVNX1NVUFBMSUVTXTsKIAlpbnQgcG93ZXJfZ3BpbzsKIAlpbnQgY2hpcF9wb3dlcjsKIAlpbnQgaXJxOwpAQCAtNzMsOCArODksOSBAQAogCQkJCQkgKiB0aGlzICovCiAJdW5zaWduZWQgaW50IG5zYW1wbGVfbWF4OwkvKiBuc2FtcGxlIHNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4KIAkJCQkJICogdGhpcyAqLwotCXVuc2lnbmVkIGludCBuc2FtcGxlX3N3aXRjaDsJLyogVXNlIEZJRk8gb3IgYnlwYXNzIEZJRk8gc3dpdGNoICovCisJZW51bSBkYWMzM19maWZvX21vZGVzIGZpZm9fbW9kZTsvKiBGSUZPIG1vZGUgc2VsZWN0aW9uICovCiAJdW5zaWduZWQgaW50IG5zYW1wbGU7CQkvKiBidXJzdCByZWFkIGFtb3VudCBmcm9tIGhvc3QgKi8KKwl1OCBidXJzdF9iY2xrZGl2OwkJLyogQkNMSyBkaXZpZGVyIHZhbHVlIGluIGJ1cnN0IG1vZGUgKi8KIAogCWVudW0gZGFjMzNfc3RhdGUgc3RhdGU7CiB9OwpAQCAtMjk3LDI4ICszMTQsNDkgQEAKIAlkYWMzM193cml0ZShjb2RlYywgREFDMzNfUFdSX0NUUkwsIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRhYzMzX2hhcmRfcG93ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCitzdGF0aWMgaW50IGRhYzMzX2hhcmRfcG93ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCiB7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZGFjMzMtPm11dGV4KTsKIAlpZiAocG93ZXIpIHsKLQkJaWYgKGRhYzMzLT5wb3dlcl9ncGlvID49IDApIHsKLQkJCWdwaW9fc2V0X3ZhbHVlKGRhYzMzLT5wb3dlcl9ncGlvLCAxKTsKLQkJCWRhYzMzLT5jaGlwX3Bvd2VyID0gMTsKLQkJCS8qIFJlc3RvcmUgcmVnaXN0ZXJzICovCi0JCQlkYWMzM19yZXN0b3JlX3JlZ3MoY29kZWMpOworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLAorCQkJCQkgIGRhYzMzLT5zdXBwbGllcyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJCQlnb3RvIGV4aXQ7CiAJCX0KKworCQlpZiAoZGFjMzMtPnBvd2VyX2dwaW8gPj0gMCkKKwkJCWdwaW9fc2V0X3ZhbHVlKGRhYzMzLT5wb3dlcl9ncGlvLCAxKTsKKworCQlkYWMzMy0+Y2hpcF9wb3dlciA9IDE7CisKKwkJLyogUmVzdG9yZSByZWdpc3RlcnMgKi8KKwkJZGFjMzNfcmVzdG9yZV9yZWdzKGNvZGVjKTsKKwogCQlkYWMzM19zb2Z0X3Bvd2VyKGNvZGVjLCAxKTsKIAl9IGVsc2UgewogCQlkYWMzM19zb2Z0X3Bvd2VyKGNvZGVjLCAwKTsKLQkJaWYgKGRhYzMzLT5wb3dlcl9ncGlvID49IDApIHsKKwkJaWYgKGRhYzMzLT5wb3dlcl9ncGlvID49IDApCiAJCQlncGlvX3NldF92YWx1ZShkYWMzMy0+cG93ZXJfZ3BpbywgMCk7Ci0JCQlkYWMzMy0+Y2hpcF9wb3dlciA9IDA7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkYWMzMy0+bXV0ZXgpOwogCisJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLAorCQkJCQkgICAgIGRhYzMzLT5zdXBwbGllcyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZGlzYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlkYWMzMy0+Y2hpcF9wb3dlciA9IDA7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmZGFjMzMtPm11dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRhYzMzX2dldF9uc2FtcGxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMzUxLDM5ICszODksNDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRhYzMzX2dldF9uc2FtcGxlX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKK3N0YXRpYyBpbnQgZGFjMzNfZ2V0X2ZpZm9fbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gZGFjMzMtPm5zYW1wbGVfc3dpdGNoOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gZGFjMzMtPmZpZm9fbW9kZTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRhYzMzX3NldF9uc2FtcGxlX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKK3N0YXRpYyBpbnQgZGFjMzNfc2V0X2ZpZm9fbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2ggPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJaWYgKGRhYzMzLT5maWZvX21vZGUgPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCiAJCXJldHVybiAwOwogCS8qIERvIG5vdCBhbGxvdyBjaGFuZ2VzIHdoaWxlIHN0cmVhbSBpcyBydW5uaW5nKi8KIAlpZiAoY29kZWMtPmFjdGl2ZSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA8IDAgfHwKLQkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPiAxKQorCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+PSBEQUMzM19GSUZPX0xBU1RfTU9ERSkKIAkJcmV0ID0gLUVJTlZBTDsKIAllbHNlCi0JCWRhYzMzLT5uc2FtcGxlX3N3aXRjaCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCQlkYWMzMy0+Zmlmb19tb2RlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBDb2RlYyBvcGVyYXRpb24gbW9kZXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkYWMzM19maWZvX21vZGVfdGV4dHNbXSA9IHsKKwkiQnlwYXNzIiwgIk1vZGUgMSIsICJNb2RlIDciCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhYzMzX2ZpZm9fbW9kZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEVfRVhUKEFSUkFZX1NJWkUoZGFjMzNfZmlmb19tb2RlX3RleHRzKSwKKwkJCSAgICBkYWMzM19maWZvX21vZGVfdGV4dHMpOworCiAvKgogICogREFDTC9SIGRpZ2l0YWwgdm9sdW1lIGNvbnRyb2w6CiAgKiBmcm9tIDAgZEIgdG8gLTYzLjUgaW4gMC41IGRCIHN0ZXBzCkBAIC00MDYsOCArNDUzLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMzM19uc2FtcGxlX3NuZF9jb250cm9sc1tdID0gewogCVNPQ19TSU5HTEVfRVhUKCJuU2FtcGxlIiwgMCwgMCwgNTkwMCwgMCwKIAkJIGRhYzMzX2dldF9uc2FtcGxlLCBkYWMzM19zZXRfbnNhbXBsZSksCi0JU09DX1NJTkdMRV9FWFQoIm5TYW1wbGUgU3dpdGNoIiwgMCwgMCwgMSwgMCwKLQkJIGRhYzMzX2dldF9uc2FtcGxlX3N3aXRjaCwgZGFjMzNfc2V0X25zYW1wbGVfc3dpdGNoKSwKKwlTT0NfRU5VTV9FWFQoIkZJRk8gTW9kZSIsIGRhYzMzX2ZpZm9fbW9kZV9lbnVtLAorCQkgZGFjMzNfZ2V0X2ZpZm9fbW9kZSwgZGFjMzNfc2V0X2ZpZm9fbW9kZSksCiB9OwogCiAvKiBBbmFsb2cgYnlwYXNzICovCkBAIC00NjksNiArNTE2LDggQEAKIHN0YXRpYyBpbnQgZGFjMzNfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogeworCWludCByZXQ7CisKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJCWRhYzMzX3NvZnRfcG93ZXIoY29kZWMsIDEpOwpAQCAtNDc2LDEyICs1MjUsMTkgQEAKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgotCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikKLQkJCWRhYzMzX2hhcmRfcG93ZXIoY29kZWMsIDEpOworCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gZGFjMzNfaGFyZF9wb3dlcihjb2RlYywgMSk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCWRhYzMzX3NvZnRfcG93ZXIoY29kZWMsIDApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6Ci0JCWRhYzMzX2hhcmRfcG93ZXIoY29kZWMsIDApOworCQlyZXQgPSBkYWMzM19oYXJkX3Bvd2VyKGNvZGVjLCAwKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwogCQlicmVhazsKIAl9CiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKQEAgLTQ4OSw2ICs1NDUsNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRhYzMzX3ByZWZpbGxfaGFuZGxlcihzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJY29kZWMgPSAmZGFjMzMtPmNvZGVjOworCisJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJY2FzZSBEQUMzM19GSUZPX01PREUxOgorCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19OU0FNUExFX01TQiwKKwkJCQlEQUMzM19USFJSRUcoZGFjMzMtPm5zYW1wbGUpKTsKKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfUFJFRklMTF9NU0IsCisJCQkJREFDMzNfVEhSUkVHKGRhYzMzLT5hbGFybV90aHJlc2hvbGQpKTsKKwkJYnJlYWs7CisJY2FzZSBEQUMzM19GSUZPX01PREU3OgorCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19QUkVGSUxMX01TQiwKKwkJCQlEQUMzM19USFJSRUcoMTApKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIlVuaGFuZGxlZCBGSUZPIG1vZGU6ICVkXG4iLAorCQkJCQkJCWRhYzMzLT5maWZvX21vZGUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYWMzM19wbGF5YmFja19oYW5kbGVyKHN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwljb2RlYyA9ICZkYWMzMy0+Y29kZWM7CisKKwlzd2l0Y2ggKGRhYzMzLT5maWZvX21vZGUpIHsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTE6CisJCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX05TQU1QTEVfTVNCLAorCQkJCURBQzMzX1RIUlJFRyhkYWMzMy0+bnNhbXBsZSkpOworCQlicmVhazsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTc6CisJCS8qIEF0IHRoZSBtb21lbnQgd2UgYXJlIG5vdCB1c2luZyBpbnRlcnJ1cHRzIGluIG1vZGU3ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGNvZGVjLT5kZXYsICJVbmhhbmRsZWQgRklGTyBtb2RlOiAlZFxuIiwKKwkJCQkJCQlkYWMzMy0+Zmlmb19tb2RlKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgdm9pZCBkYWMzM193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CkBAIC01MDIsMTQgKzYwMywxMCBAQAogCXN3aXRjaCAoZGFjMzMtPnN0YXRlKSB7CiAJY2FzZSBEQUMzM19QUkVGSUxMOgogCQlkYWMzMy0+c3RhdGUgPSBEQUMzM19QTEFZQkFDSzsKLQkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfTlNBTVBMRV9NU0IsCi0JCQkJREFDMzNfVEhSUkVHKGRhYzMzLT5uc2FtcGxlKSk7Ci0JCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX1BSRUZJTExfTVNCLAotCQkJCURBQzMzX1RIUlJFRyhkYWMzMy0+YWxhcm1fdGhyZXNob2xkKSk7CisJCWRhYzMzX3ByZWZpbGxfaGFuZGxlcihkYWMzMyk7CiAJCWJyZWFrOwogCWNhc2UgREFDMzNfUExBWUJBQ0s6Ci0JCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX05TQU1QTEVfTVNCLAotCQkJCURBQzMzX1RIUlJFRyhkYWMzMy0+bnNhbXBsZSkpOworCQlkYWMzM19wbGF5YmFja19oYW5kbGVyKGRhYzMzKTsKIAkJYnJlYWs7CiAJY2FzZSBEQUMzM19JRExFOgogCQlicmVhazsKQEAgLTU0Nyw3ICs2NDQsNyBAQAogCXVuc2lnbmVkIGludCBwd3JfY3RybDsKIAogCS8qIFN0b3AgcGVuZGluZyB3b3JrcXVldWUgKi8KLQlpZiAoZGFjMzMtPm5zYW1wbGVfc3dpdGNoKQorCWlmIChkYWMzMy0+Zmlmb19tb2RlKQogCQljYW5jZWxfd29ya19zeW5jKCZkYWMzMy0+d29yayk7CiAKIAltdXRleF9sb2NrKCZkYWMzMy0+bXV0ZXgpOwpAQCAtNjAzLDcgKzcwMCw3IEBACiB9CiAKICNkZWZpbmUgQ0FMQ19PU0NTRVQocmF0ZSwgcmVmY2xrKSAoIFwKLQkoKCgocmF0ZSAqIDEwMDAwKSAvIHJlZmNsaykgKiA0MDk2KSArIDUwMDApIC8gMTAwMDApCisJKCgoKHJhdGUgKiAxMDAwMCkgLyByZWZjbGspICogNDA5NikgKyA3MDAwKSAvIDEwMDAwKQogI2RlZmluZSBDQUxDX1JBVElPU0VUKHJhdGUsIHJlZmNsaykgKCBcCiAJKCgoKHJlZmNsayAgKiAxMDAwMDApIC8gcmF0ZSkgKiAxNjM4NCkgKyA1MDAwMCkgLyAxMDAwMDApCiAKQEAgLTYxOSw3ICs3MTYsNyBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgb3Njc2V0LCByYXRpb3NldCwgcHdyX2N0cmwsIHJlZ190bXA7Ci0JdTggYWljdHJsX2EsIGZpZm9jdHJsX2E7CisJdTggYWljdHJsX2EsIGFpY3RybF9iLCBmaWZvY3RybF9hOwogCiAJc3dpdGNoIChzdWJzdHJlYW0tPnJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtNjM3LDcgKzczNCwxMCBAQAogCiAJYWljdHJsX2EgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9BKTsKIAlhaWN0cmxfYSAmPSB+KERBQzMzX05DWUNMX01BU0sgfCBEQUMzM19XTEVOX01BU0spOworCS8qIFJlYWQgRklGTyBjb250cm9sIEEsIGFuZCBjbGVhciBGSUZPIGZsdXNoIGJpdCAqLwogCWZpZm9jdHJsX2EgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfRklGT19DVFJMX0EpOworCWZpZm9jdHJsX2EgJj0gfkRBQzMzX0ZJRk9GTFVTSDsKKwogCWZpZm9jdHJsX2EgJj0gfkRBQzMzX1dJRFRIOwogCXN3aXRjaCAoc3Vic3RyZWFtLT5ydW50aW1lLT5mb3JtYXQpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgpAQCAtNjc1LDcgKzc3NSw4IEBACiAKIAlkYWMzM19vc2N3YWl0KGNvZGVjKTsKIAotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpIHsKKwlpZiAoZGFjMzMtPmZpZm9fbW9kZSkgeworCQkvKiBHZW5lcmljIGZvciBhbGwgRklGTyBtb2RlcyAqLwogCQkvKiA1MC01MSA6IEFTUkMgQ29udHJvbCByZWdpc3RlcnMgKi8KIAkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0FTUkNfQ1RSTF9BLCAoMSA8PCA0KSk7IC8qIGRpdj0yICovCiAJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19BU1JDX0NUUkxfQiwgMSk7IC8qID8/PyAqLwpAQCAtNjg1LDM4ICs3ODYsMTAxIEBACiAKIAkJLyogU2V0IGludGVycnVwdHMgdG8gaGlnaCBhY3RpdmUgKi8KIAkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0lOVFBfQ1RSTF9BLCBEQUMzM19JTlRQTV9BSElHSCk7Ci0KLQkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0ZJRk9fSVJRX01PREVfQiwKLQkJCSAgICBEQUMzM19BVE0oREFDMzNfRklGT19JUlFfTU9ERV9MRVZFTCkpOwotCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19JUlFfTUFTSywgREFDMzNfTUFUKTsKIAl9IGVsc2UgeworCQkvKiBGSUZPIGJ5cGFzcyBtb2RlICovCiAJCS8qIDUwLTUxIDogQVNSQyBDb250cm9sIHJlZ2lzdGVycyAqLwogCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfQVNSQ19DVFJMX0EsIERBQzMzX1NSQ0JZUCk7CiAJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19BU1JDX0NUUkxfQiwgMCk7IC8qID8/PyAqLwogCX0KIAotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpCisJLyogSW50ZXJydXB0IGJlaGF2aW91ciBjb25maWd1cmF0aW9uICovCisJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJY2FzZSBEQUMzM19GSUZPX01PREUxOgorCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19JUlFfTU9ERV9CLAorCQkJICAgIERBQzMzX0FUTShEQUMzM19GSUZPX0lSUV9NT0RFX0xFVkVMKSk7CisJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NQVNLLCBEQUMzM19NQVQpOworCQlicmVhazsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTc6CisJCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0ZJRk9fSVJRX01BU0ssIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBpbiBGSUZPIGJ5cGFzcyBtb2RlLCB0aGUgaW50ZXJydXB0cyBhcmUgbm90IHVzZWQgKi8KKwkJYnJlYWs7CisJfQorCisJYWljdHJsX2IgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CKTsKKworCXN3aXRjaCAoZGFjMzMtPmZpZm9fbW9kZSkgeworCWNhc2UgREFDMzNfRklGT19NT0RFMToKKwkJLyoKKwkJICogRm9yIG1vZGUxOgorCQkgKiBEaXNhYmxlIHRoZSBGSUZPIGJ5cGFzcyAoRW5hYmxlIHRoZSB1c2Ugb2YgRklGTykKKwkJICogU2VsZWN0IG5TYW1wbGUgbW9kZQorCQkgKiBCQ0xLIGlzIG9ubHkgcnVubmluZyB3aGVuIGRhdGEgaXMgbmVlZGVkIGJ5IERBQzMzCisJCSAqLwogCQlmaWZvY3RybF9hICY9IH5EQUMzM19GQllQQVM7Ci0JZWxzZQorCQlmaWZvY3RybF9hICY9IH5EQUMzM19GQVVUTzsKKwkJYWljdHJsX2IgJj0gfkRBQzMzX0JDTEtPTjsKKwkJYnJlYWs7CisJY2FzZSBEQUMzM19GSUZPX01PREU3OgorCQkvKgorCQkgKiBGb3IgbW9kZTE6CisJCSAqIERpc2FibGUgdGhlIEZJRk8gYnlwYXNzIChFbmFibGUgdGhlIHVzZSBvZiBGSUZPKQorCQkgKiBTZWxlY3QgVGhyZXNob2xkIG1vZGUKKwkJICogQkNMSyBpcyBvbmx5IHJ1bm5pbmcgd2hlbiBkYXRhIGlzIG5lZWRlZCBieSBEQUMzMworCQkgKi8KKwkJZmlmb2N0cmxfYSAmPSB+REFDMzNfRkJZUEFTOworCQlmaWZvY3RybF9hIHw9IERBQzMzX0ZBVVRPOworCQlhaWN0cmxfYiAmPSB+REFDMzNfQkNMS09OOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKgorCQkgKiBGb3IgRklGTyBieXBhc3MgbW9kZToKKwkJICogRW5hYmxlIHRoZSBGSUZPIGJ5cGFzcyAoRGlzYWJsZSB0aGUgRklGTyB1c2UpCisJCSAqIFNldCB0aGUgQkNMSyBhcyBjb250aW5vdXMKKwkJICovCiAJCWZpZm9jdHJsX2EgfD0gREFDMzNfRkJZUEFTOworCQlhaWN0cmxfYiB8PSBEQUMzM19CQ0xLT047CisJCWJyZWFrOworCX0KKwogCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0NUUkxfQSwgZmlmb2N0cmxfYSk7Ci0KIAlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9BLCBhaWN0cmxfYSk7Ci0JcmVnX3RtcCA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0IpOwotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpCi0JCXJlZ190bXAgJj0gfkRBQzMzX0JDTEtPTjsKKwlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CLCBhaWN0cmxfYik7CisKKwkvKgorCSAqIEJDTEsgZGl2aWRlIHJhdGlvCisJICogMDogMS41CisJICogMTogMQorCSAqIDI6IDIKKwkgKiAuLi4KKwkgKiAyNTQ6IDI1NAorCSAqIDI1NTogMjU1CisJICovCisJaWYgKGRhYzMzLT5maWZvX21vZGUpCisJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsCisJCQkJCQkJZGFjMzMtPmJ1cnN0X2JjbGtkaXYpOwogCWVsc2UKLQkJcmVnX3RtcCB8PSBEQUMzM19CQ0xLT047Ci0JZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQiwgcmVnX3RtcCk7CisJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsIDMyKTsKIAotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpIHsKLQkJLyogMjA6IEJDTEsgZGl2aWRlIHJhdGlvICovCi0JCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0MsIDMpOwotCisJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJY2FzZSBEQUMzM19GSUZPX01PREUxOgogCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19BVEhSX01TQiwKIAkJCSAgICAgIERBQzMzX1RIUlJFRyhkYWMzMy0+YWxhcm1fdGhyZXNob2xkKSk7Ci0JfSBlbHNlIHsKLQkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQywgMzIpOworCQlicmVhazsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTc6CisJCS8qCisJCSAqIENvbmZpZ3VyZSB0aGUgdGhyZXNob2xkIGxldmVscywgYW5kIGxlYXZlIDEwIHNhbXBsZSBzcGFjZQorCQkgKiBhdCB0aGUgYm90dG9tLCBhbmQgYWxzbyBhdCB0aGUgdG9wIG9mIHRoZSBGSUZPCisJCSAqLworCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19VVEhSX01TQiwKKwkJCURBQzMzX1RIUlJFRyhEQUMzM19CVUZGRVJfU0laRV9TQU1QTEVTIC0gMTApKTsKKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfTFRIUl9NU0IsCisJCQlEQUMzM19USFJSRUcoMTApKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkYWMzMy0+bXV0ZXgpOwpAQCAtNzg5LDcgKzk1Myw3IEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpIHsKKwkJaWYgKGRhYzMzLT5maWZvX21vZGUpIHsKIAkJCWRhYzMzLT5zdGF0ZSA9IERBQzMzX1BSRUZJTEw7CiAJCQlxdWV1ZV93b3JrKGRhYzMzLT5kYWMzM193cSwgJmRhYzMzLT53b3JrKTsKIAkJfQpAQCAtNzk3LDcgKzk2MSw3IEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6Ci0JCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpIHsKKwkJaWYgKGRhYzMzLT5maWZvX21vZGUpIHsKIAkJCWRhYzMzLT5zdGF0ZSA9IERBQzMzX0ZMVVNIOwogCQkJcXVldWVfd29yayhkYWMzMy0+ZGFjMzNfd3EsICZkYWMzMy0+d29yayk7CiAJCX0KQEAgLTg0Myw2ICsxMDA3LDcgQEAKIAkJCSAgICAgdW5zaWduZWQgaW50IGZtdCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJdTggYWljdHJsX2EsIGFpY3RybF9iOwogCiAJYWljdHJsX2EgPSBkYWMzM19yZWFkX3JlZ19jYWNoZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9BKTsKQEAgLTg1NSw3ICsxMDIwLDExIEBACiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKIAkJLyogQ29kZWMgU2xhdmUgKi8KLQkJYWljdHJsX2EgJj0gfihEQUMzM19NU0JDTEsgfCBEQUMzM19NU1dDTEspOworCQlpZiAoZGFjMzMtPmZpZm9fbW9kZSkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRklGTyBtb2RlIHJlcXVpcmVzIG1hc3RlciBtb2RlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKKwkJCWFpY3RybF9hICY9IH4oREFDMzNfTVNCQ0xLIHwgREFDMzNfTVNXQ0xLKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05NTksNiArMTEyOCw5IEBACiAJLyogcG93ZXIgb24gZGV2aWNlICovCiAJZGFjMzNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAorCS8qIEJpYXMgbGV2ZWwgY29uZmlndXJhdGlvbiBoYXMgZW5hYmxlZCByZWd1bGF0b3IgYW4gZXh0cmEgdGltZSAqLworCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLCBkYWMzMy0+c3VwcGxpZXMpOworCiAJcmV0dXJuIDA7CiAKIHBjbV9lcnI6CkBAIC0xMDMzLDEzICsxMjA1LDEzIEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoZGFjMzNfZGFpKTsKIAotc3RhdGljIGludCBkYWMzM19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRhYzMzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB0bHYzMjBkYWMzM19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzM7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCWludCByZXQgPSAwOworCWludCByZXQsIGk7CiAKIAlpZiAoY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUGxhdGZvcm0gZGF0YSBub3Qgc2V0XG4iKTsKQEAgLTEwODAsMTAgKzEyNTIsMTEgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYWMzMyk7CiAKIAlkYWMzMy0+cG93ZXJfZ3BpbyA9IHBkYXRhLT5wb3dlcl9ncGlvOworCWRhYzMzLT5idXJzdF9iY2xrZGl2ID0gcGRhdGEtPmJ1cnN0X2JjbGtkaXY7CiAJZGFjMzMtPmlycSA9IGNsaWVudC0+aXJxOwogCWRhYzMzLT5uc2FtcGxlID0gTlNBTVBMRV9NQVg7CiAJLyogRGlzYWJsZSBGSUZPIHVzZSBieSBkZWZhdWx0ICovCi0JZGFjMzMtPm5zYW1wbGVfc3dpdGNoID0gMDsKKwlkYWMzMy0+Zmlmb19tb2RlID0gREFDMzNfRklGT19CWVBBU1M7CiAKIAl0bHYzMjBkYWMzM19jb2RlYyA9IGNvZGVjOwogCkBAIC0xMTMwLDYgKzEzMDMsMjQgQEAKIAkJfQogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyk7IGkrKykKKwkJZGFjMzMtPnN1cHBsaWVzW2ldLnN1cHBseSA9IGRhYzMzX3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksCisJCQkJIGRhYzMzLT5zdXBwbGllcyk7CisKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9nZXQ7CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwKKwkJCQkgICAgZGFjMzMtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKQEAgLTExNDksNiArMTM0MCwxMCBAQAogCXJldHVybiByZXQ7CiAKIGVycm9yX2NvZGVjOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLCBkYWMzMy0+c3VwcGxpZXMpOworZXJyX2VuYWJsZToKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwgZGFjMzMtPnN1cHBsaWVzKTsKK2Vycl9nZXQ6CiAJaWYgKGRhYzMzLT5pcnEgPj0gMCkgewogCQlmcmVlX2lycShkYWMzMy0+aXJxLCAmZGFjMzMtPmNvZGVjKTsKIAkJZGVzdHJveV93b3JrcXVldWUoZGFjMzMtPmRhYzMzX3dxKTsKQEAgLTExNjUsNyArMTM2MCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkYWMzM19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkYWMzM19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzOwogCkBAIC0xMTc3LDYgKzEzNzIsOCBAQAogCWlmIChkYWMzMy0+aXJxID49IDApCiAJCWZyZWVfaXJxKGRhYzMzLT5pcnEsICZkYWMzMy0+Y29kZWMpOwogCisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksIGRhYzMzLT5zdXBwbGllcyk7CisKIAlkZXN0cm95X3dvcmtxdWV1ZShkYWMzMy0+ZGFjMzNfd3EpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmRhYzMzX2RhaSk7CiAJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZkYWMzMy0+Y29kZWMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHBhNjEzMGEyLmMKaW5kZXggNmI2NTBjMS4uOTU4ZDQ5YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RwYTYxMzBhMi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPHNvdW5kL3RwYTYxMzBhMi1wbGF0Lmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KQEAgLTM0LDEwICszNSwyMiBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKnRwYTYxMzBhMl9jbGllbnQ7CiAKKyNkZWZpbmUgVFBBNjEzMEEyX05VTV9TVVBQTElFUyAyCitzdGF0aWMgY29uc3QgY2hhciAqdHBhNjEzMGEyX3N1cHBseV9uYW1lc1tUUEE2MTMwQTJfTlVNX1NVUFBMSUVTXSA9IHsKKwkiQ1BWU1MiLAorCSJWZGQiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnRwYTYxNDBhMl9zdXBwbHlfbmFtZXNbVFBBNjEzMEEyX05VTV9TVVBQTElFU10gPSB7CisJIkhQVmRkIiwKKwkiQVZkZCIsCit9OworCiAvKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIHNhdmUgdGhlIGNvbnRleHQgKi8KIHN0cnVjdCB0cGE2MTMwYTJfZGF0YSB7CiAJc3RydWN0IG11dGV4IG11dGV4OwogCXVuc2lnbmVkIGNoYXIgcmVnc1tUUEE2MTMwQTJfQ0FDSEVSRUdOVU1dOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1RQQTYxMzBBMl9OVU1fU1VQUExJRVNdOwogCWludCBwb3dlcl9ncGlvOwogCXVuc2lnbmVkIGNoYXIgcG93ZXJfc3RhdGU7CiB9OwpAQCAtMTA2LDEwICsxMTksMTEgQEAKIAkJdHBhNjEzMGEyX2kyY193cml0ZShpLCBkYXRhLT5yZWdzW2ldKTsKIH0KIAotc3RhdGljIHZvaWQgdHBhNjEzMGEyX3Bvd2VyKGludCBwb3dlcikKK3N0YXRpYyBpbnQgdHBhNjEzMGEyX3Bvd2VyKGludCBwb3dlcikKIHsKIAlzdHJ1Y3QJdHBhNjEzMGEyX2RhdGEgKmRhdGE7CiAJdTgJdmFsOworCWludAlyZXQ7CiAKIAlCVUdfT04odHBhNjEzMGEyX2NsaWVudCA9PSBOVUxMKTsKIAlkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKHRwYTYxMzBhMl9jbGllbnQpOwpAQCAtMTE3LDExICsxMzEsMjAgQEAKIAltdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7CiAJaWYgKHBvd2VyKSB7CiAJCS8qIFBvd2VyIG9uICovCi0JCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApIHsKKwkJaWYgKGRhdGEtPnBvd2VyX2dwaW8gPj0gMCkKIAkJCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBvd2VyX2dwaW8sIDEpOwotCQkJZGF0YS0+cG93ZXJfc3RhdGUgPSAxOwotCQkJdHBhNjEzMGEyX2luaXRpYWxpemUoKTsKKworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyksCisJCQkJCSAgICBkYXRhLT5zdXBwbGllcyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycigmdHBhNjEzMGEyX2NsaWVudC0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXhpdDsKIAkJfQorCisJCWRhdGEtPnBvd2VyX3N0YXRlID0gMTsKKwkJdHBhNjEzMGEyX2luaXRpYWxpemUoKTsKKwogCQkvKiBDbGVhciBTV1MgKi8KIAkJdmFsID0gdHBhNjEzMGEyX3JlYWQoVFBBNjEzMEEyX1JFR19DT05UUk9MKTsKIAkJdmFsICY9IH5UUEE2MTMwQTJfU1dTOwpAQCAtMTMxLDEzICsxNTQsMjUgQEAKIAkJdmFsID0gdHBhNjEzMGEyX3JlYWQoVFBBNjEzMEEyX1JFR19DT05UUk9MKTsKIAkJdmFsIHw9IFRQQTYxMzBBMl9TV1M7CiAJCXRwYTYxMzBhMl9pMmNfd3JpdGUoVFBBNjEzMEEyX1JFR19DT05UUk9MLCB2YWwpOworCiAJCS8qIFBvd2VyIG9mZiAqLwotCQlpZiAoZGF0YS0+cG93ZXJfZ3BpbyA+PSAwKSB7CisJCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApCiAJCQlncGlvX3NldF92YWx1ZShkYXRhLT5wb3dlcl9ncGlvLCAwKTsKLQkJCWRhdGEtPnBvd2VyX3N0YXRlID0gMDsKKworCQlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpLAorCQkJCQkgICAgIGRhdGEtPnN1cHBsaWVzKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKCZ0cGE2MTMwYTJfY2xpZW50LT5kZXYsCisJCQkJIkZhaWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXhpdDsKIAkJfQorCisJCWRhdGEtPnBvd2VyX3N0YXRlID0gMDsKIAl9CisKK2V4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0cGE2MTMwYTJfZ2V0X3JlZyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTIzNywxMiArMjcyLDggQEAKICAqLwogc3RhdGljIHZvaWQgdHBhNjEzMGEyX2NoYW5uZWxfZW5hYmxlKHU4IGNoYW5uZWwsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0CXRwYTYxMzBhMl9kYXRhICpkYXRhOwogCXU4CXZhbDsKIAotCUJVR19PTih0cGE2MTMwYTJfY2xpZW50ID09IE5VTEwpOwotCWRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEodHBhNjEzMGEyX2NsaWVudCk7Ci0KIAlpZiAoZW5hYmxlKSB7CiAJCS8qIEVuYWJsZSBjaGFubmVsICovCiAJCS8qIEVuYWJsZSBhbXBsaWZpZXIgKi8KQEAgLTI5OSwxNSArMzMwLDE3IEBACiBzdGF0aWMgaW50IHRwYTYxMzBhMl9zdXBwbHlfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7CisJaW50IHJldCA9IDA7CisKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6Ci0JCXRwYTYxMzBhMl9wb3dlcigxKTsKKwkJcmV0ID0gdHBhNjEzMGEyX3Bvd2VyKDEpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKLQkJdHBhNjEzMGEyX3Bvd2VyKDApOworCQlyZXQgPSB0cGE2MTMwYTJfcG93ZXIoMCk7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgdHBhNjEzMGEyX2RhcG1fd2lkZ2V0c1tdID0gewpAQCAtMzQ2LDEzICszNzksMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwYTYxMzBhMl9hZGRfY29udHJvbHMpOwogCi1zdGF0aWMgaW50IHRwYTYxMzBhMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBfX2RldmluaXQgdHBhNjEzMGEyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCB0cGE2MTMwYTJfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgdHBhNjEzMGEyX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCWludCByZXQ7CisJaW50IGksIHJldDsKIAogCWRldiA9ICZjbGllbnQtPmRldjsKIApAQCAtMzg3LDE1ICs0MjAsMzggQEAKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgcG93ZXIgR1BJTyAoJWQpXG4iLAogCQkJCWRhdGEtPnBvd2VyX2dwaW8pOwotCQkJZ290byBmYWlsOworCQkJZ290byBlcnJfZ3BpbzsKIAkJfQogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGF0YS0+cG93ZXJfZ3BpbywgMCk7Ci0JfSBlbHNlIHsKLQkJZGF0YS0+cG93ZXJfc3RhdGUgPSAxOwotCQl0cGE2MTMwYTJfaW5pdGlhbGl6ZSgpOwogCX0KIAotCXRwYTYxMzBhMl9wb3dlcigxKTsKKwlzd2l0Y2ggKHBkYXRhLT5pZCkgeworCWNhc2UgVFBBNjEzMEEyOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyk7IGkrKykKKwkJCWRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRwYTYxMzBhMl9zdXBwbHlfbmFtZXNbaV07CisJCWJyZWFrOworCWNhc2UgVFBBNjE0MEEyOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyk7IGkrKykKKwkJCWRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRwYTYxNDBhMl9zdXBwbHlfbmFtZXNbaV07OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihkZXYsICJVbmtub3duIFRQQSBtb2RlbCAoJWQpLiBBc3N1bWluZyA2MTMwQTJcbiIsCisJCQkgcGRhdGEtPmlkKTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpOyBpKyspCisJCQlkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0cGE2MTMwYTJfc3VwcGx5X25hbWVzW2ldOworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpLAorCQkJCSBkYXRhLT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9yZWd1bGF0b3I7CisJfQorCisJcmV0ID0gdHBhNjEzMGEyX3Bvd2VyKDEpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnJfcG93ZXI7CisKIAogCS8qIFJlYWQgdmVyc2lvbiAqLwogCXJldCA9IHRwYTYxMzBhMl9pMmNfcmVhZChUUEE2MTMwQTJfUkVHX1ZFUlNJT04pICYKQEAgLTQwNCwxMCArNDYwLDE4IEBACiAJCWRldl93YXJuKGRldiwgIlVOVEVTVEVEIHZlcnNpb24gZGV0ZWN0ZWQgKCVkKVxuIiwgcmV0KTsKIAogCS8qIERpc2FibGUgdGhlIGNoaXAgKi8KLQl0cGE2MTMwYTJfcG93ZXIoMCk7CisJcmV0ID0gdHBhNjEzMGEyX3Bvd2VyKDApOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnJfcG93ZXI7CiAKIAlyZXR1cm4gMDsKLWZhaWw6CisKK2Vycl9wb3dlcjoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoZGF0YS0+c3VwcGxpZXMpLCBkYXRhLT5zdXBwbGllcyk7CitlcnJfcmVndWxhdG9yOgorCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApCisJCWdwaW9fZnJlZShkYXRhLT5wb3dlcl9ncGlvKTsKK2Vycl9ncGlvOgogCWtmcmVlKGRhdGEpOwogCWkyY19zZXRfY2xpZW50ZGF0YSh0cGE2MTMwYTJfY2xpZW50LCBOVUxMKTsKIAl0cGE2MTMwYTJfY2xpZW50ID0gTlVMTDsKQEAgLTQxNSw3ICs0NzksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdHBhNjEzMGEyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmV4aXQgdHBhNjEzMGEyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB0cGE2MTMwYTJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC00MjMsNiArNDg3LDkgQEAKIAogCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApCiAJCWdwaW9fZnJlZShkYXRhLT5wb3dlcl9ncGlvKTsKKworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyksIGRhdGEtPnN1cHBsaWVzKTsKKwogCWtmcmVlKGRhdGEpOwogCXRwYTYxMzBhMl9jbGllbnQgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCmluZGV4IDJhMjdmN2IuLjZmNWQ0YWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jCkBAIC01NSw3ICs1NSw3IEBACiAJMHgwYywgLyogUkVHX0FUWFIxUEdBCQkoMHhCKQkqLwogCTB4MDAsIC8qIFJFR19BVlRYTDJQR0EJCSgweEMpCSovCiAJMHgwMCwgLyogUkVHX0FWVFhSMlBHQQkJKDB4RCkJKi8KLQkweDAxLCAvKiBSRUdfQVVESU9fSUYJCSgweEUpCSovCisJMHgwMCwgLyogUkVHX0FVRElPX0lGCQkoMHhFKQkqLwogCTB4MDAsIC8qIFJFR19WT0lDRV9JRgkJKDB4RikJKi8KIAkweDAwLCAvKiBSRUdfQVJYUjFQR0EJCSgweDEwKQkqLwogCTB4MDAsIC8qIFJFR19BUlhMMVBHQQkJKDB4MTEpCSovCkBAIC02NCwxOSArNjQsMTkgQEAKIAkweDAwLCAvKiBSRUdfVlJYUEdBCQkoMHgxNCkJKi8KIAkweDAwLCAvKiBSRUdfVlNUUEdBCQkoMHgxNSkJKi8KIAkweDAwLCAvKiBSRUdfVlJYMkFSWFBHQQkJKDB4MTYpCSovCi0JMHgwYywgLyogUkVHX0FWREFDX0NUTAkJKDB4MTcpCSovCisJMHgwMCwgLyogUkVHX0FWREFDX0NUTAkJKDB4MTcpCSovCiAJMHgwMCwgLyogUkVHX0FSWDJWVFhQR0EJCSgweDE4KQkqLwogCTB4MDAsIC8qIFJFR19BUlhMMV9BUEdBX0NUTAkoMHgxOSkJKi8KIAkweDAwLCAvKiBSRUdfQVJYUjFfQVBHQV9DVEwJKDB4MUEpCSovCi0JMHg0YiwgLyogUkVHX0FSWEwyX0FQR0FfQ1RMCSgweDFCKQkqLwotCTB4NGIsIC8qIFJFR19BUlhSMl9BUEdBX0NUTAkoMHgxQykJKi8KKwkweDRhLCAvKiBSRUdfQVJYTDJfQVBHQV9DVEwJKDB4MUIpCSovCisJMHg0YSwgLyogUkVHX0FSWFIyX0FQR0FfQ1RMCSgweDFDKQkqLwogCTB4MDAsIC8qIFJFR19BVFgyQVJYUEdBCQkoMHgxRCkJKi8KIAkweDAwLCAvKiBSRUdfQlRfSUYJCSgweDFFKQkqLwogCTB4MDAsIC8qIFJFR19CVFBHQQkJKDB4MUYpCSovCiAJMHgwMCwgLyogUkVHX0JUU1RQR0EJCSgweDIwKQkqLwogCTB4MDAsIC8qIFJFR19FQVJfQ1RMCQkoMHgyMSkJKi8KLQkweDI0LCAvKiBSRUdfSFNfU0VMCQkoMHgyMikJKi8KLQkweDBhLCAvKiBSRUdfSFNfR0FJTl9TRVQJKDB4MjMpCSovCisJMHgwMCwgLyogUkVHX0hTX1NFTAkJKDB4MjIpCSovCisJMHgwMCwgLyogUkVHX0hTX0dBSU5fU0VUCSgweDIzKQkqLwogCTB4MDAsIC8qIFJFR19IU19QT1BOX1NFVAkoMHgyNCkJKi8KIAkweDAwLCAvKiBSRUdfUFJFRExfQ1RMCQkoMHgyNSkJKi8KIAkweDAwLCAvKiBSRUdfUFJFRFJfQ1RMCQkoMHgyNikJKi8KQEAgLTk5LDcgKzk5LDcgQEAKIAkweDAwLCAvKiBSRUdfSTJTX1JYX1NDUkFNQkxFX0gJKDB4MzcpCSovCiAJMHgwMCwgLyogUkVHX0kyU19SWF9TQ1JBTUJMRV9NCSgweDM4KQkqLwogCTB4MDAsIC8qIFJFR19JMlNfUlhfU0NSQU1CTEVfTAkoMHgzOSkJKi8KLQkweDE2LCAvKiBSRUdfQVBMTF9DVEwJCSgweDNBKQkqLworCTB4MDYsIC8qIFJFR19BUExMX0NUTAkJKDB4M0EpCSovCiAJMHgwMCwgLyogUkVHX0RUTUZfQ1RMCQkoMHgzQikJKi8KIAkweDAwLCAvKiBSRUdfRFRNRl9QR0FfQ1RMMgkoMHgzQykJKi8KIAkweDAwLCAvKiBSRUdfRFRNRl9QR0FfQ1RMMQkoMHgzRCkJKi8KQEAgLTEyMDMsNiArMTIwMyw4IEBACiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiQVBMTCBFbmFibGUiLCBTTkRfU09DX05PUE0sIDAsIDAsIGFwbGxfZXZlbnQsCiAJCQkgICAgU05EX1NPQ19EQVBNX1BSRV9QTVV8U05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkFJRiBFbmFibGUiLCBUV0w0MDMwX1JFR19BVURJT19JRiwgMCwgMCwgTlVMTCwgMCksCisKIAkvKiBPdXRwdXQgTUlYRVIgY29udHJvbHMgKi8KIAkvKiBFYXJwaWVjZSAqLwogCVNORF9TT0NfREFQTV9NSVhFUigiRWFycGllY2UgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCkBAIC0xMzM3LDYgKzEzMzksMTEgQEAKIAl7IkRpZ2l0YWwgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQVBMTCBFbmFibGUifSwKIAl7IkRpZ2l0YWwgVm9pY2UgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQVBMTCBFbmFibGUifSwKIAorCXsiRGlnaXRhbCBSMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisJeyJEaWdpdGFsIEwxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwl7IkRpZ2l0YWwgUjIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiRGlnaXRhbCBMMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisKIAl7IkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEaWdpdGFsIEwxIFBsYXliYWNrIE1peGVyIn0sCiAJeyJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiRGlnaXRhbCBSMSBQbGF5YmFjayBNaXhlciJ9LAogCXsiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRpZ2l0YWwgTDIgUGxheWJhY2sgTWl4ZXIifSwKQEAgLTE0NTUsNiArMTQ2MiwxMSBAQAogCXsiQURDIFZpcnR1YWwgTGVmdDIiLCBOVUxMLCAiQVBMTCBFbmFibGUifSwKIAl7IkFEQyBWaXJ0dWFsIFJpZ2h0MiIsIE5VTEwsICJBUExMIEVuYWJsZSJ9LAogCisJeyJBREMgVmlydHVhbCBMZWZ0MSIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisJeyJBREMgVmlydHVhbCBSaWdodDEiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiQURDIFZpcnR1YWwgTGVmdDIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiQURDIFZpcnR1YWwgUmlnaHQyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwogCS8qIEFuYWxvZyBieXBhc3Mgcm91dGVzICovCiAJeyJSaWdodDEgQW5hbG9nIExvb3BiYWNrIiwgIlN3aXRjaCIsICJBbmFsb2cgUmlnaHQifSwKIAl7IkxlZnQxIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIExlZnQifSwKQEAgLTIxNTIsOCArMjE2NCw2IEBACiAJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCWtmcmVlKGNvZGVjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE5Miw3ICsyMjAyLDcgQEAKIAljb2RlYy0+d3JpdGUgPSB0d2w0MDMwX3dyaXRlOwogCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHR3bDQwMzBfc2V0X2JpYXNfbGV2ZWw7CiAJY29kZWMtPmRhaSA9IHR3bDQwMzBfZGFpOwotCWNvZGVjLT5udW1fZGFpID0gQVJSQVlfU0laRSh0d2w0MDMwX2RhaSksCisJY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHR3bDQwMzBfZGFpKTsKIAljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBzaXplb2YodHdsNDAzMF9yZWcpOwogCWNvZGVjLT5yZWdfY2FjaGUgPSBrbWVtZHVwKHR3bDQwMzBfcmVnLCBzaXplb2YodHdsNDAzMF9yZWcpLAogCQkJCQlHRlBfS0VSTkVMKTsKQEAgLTIyMzcsNiArMjI0Nyw5IEBACiB7CiAJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoJnR3bDQwMzBfZGFpWzBdLCBBUlJBWV9TSVpFKHR3bDQwMzBfZGFpKSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ0d2w0MDMwLT5jb2RlYyk7CisJa2ZyZWUodHdsNDAzMC0+Y29kZWMucmVnX2NhY2hlKTsKIAlrZnJlZSh0d2w0MDMwKTsKIAogCXR3bDQwMzBfY29kZWMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmggYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAppbmRleCBkZDYzOTZlLi5mMjA2ZDI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaApAQCAtMjUsNyArMjUsNyBAQAogLyogUmVnaXN0ZXIgZGVzY3JpcHRpb25zIGFyZSBoZXJlICovCiAjaW5jbHVkZSA8bGludXgvbWZkL3R3bDQwMzAtY29kZWMuaD4KIAotLyogU2dhZG93IHJlZ2lzdGVyIHVzZWQgYnkgdGhlIGF1ZGlvIGRyaXZlciAqLworLyogU2hhZG93IHJlZ2lzdGVyIHVzZWQgYnkgdGhlIGF1ZGlvIGRyaXZlciAqLwogI2RlZmluZSBUV0w0MDMwX1JFR19TV19TSEFET1cJCTB4NEEKICNkZWZpbmUgVFdMNDAzMF9DQUNIRVJFR05VTQkoVFdMNDAzMF9SRUdfU1dfU0hBRE9XICsgMSkKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTIwMDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3YjAyNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMKQEAgLTAsMCArMSw4ODggQEAKKy8qCisgKiB3bTIwMDAuYyAgLS0gIFdNMjAwMCBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoZSBkb3dubG9hZCBpbWFnZSBmb3IgdGhlIFdNMjAwMCB3aWxsIGJlIHJlcXVlc3RlZCBhcworICogJ3dtMjAwMF9hbmMuYmluJyBieSBkZWZhdWx0IChvdmVycmlkYWJsZSB2aWEgcGxhdGZvcm0gZGF0YSkgYXQKKyAqIHJ1bnRpbWUgYW5kIGlzIGV4cGVjdGVkIHRvIGJlIGluIGZsYXQgYmluYXJ5IGZvcm1hdC4gIFRoaXMgaXMKKyAqIGdlbmVyYXRlZCBieSBXb2xmc29uIGNvbmZpZ3VyYXRpb24gdG9vbHMgYW5kIGluY2x1ZGVzCisgKiBzeXN0ZW0tc3BlY2lmaWMgY2FsbGlicmF0aW9uIGluZm9ybWF0aW9uLiAgSWYgc3VwcGxpZWQgYXMgYQorICogc2VxdWVuY2Ugb2YgQVNDSUktZW5jb2RlZCBoZXhpZGVjaW1hbCBieXRlcyB0aGlzIGNhbiBiZSBjb252ZXJ0ZWQKKyAqIGludG8gYSBmbGF0IGJpbmFyeSB3aXRoIGEgY29tbWFuZCBzdWNoIGFzIHRoaXMgb24gdGhlIGNvbW1hbmQgbGluZToKKyAqCisgKiBwZXJsIC1lICd3aGlsZSAoPD4pIHsgcy9bXHJcbl0rLy8gOyBwcmludGYoIiVjIiwgaGV4KCRfKSk7IH0nCisgKiAgICAgICAgICAgICAgICAgPCBmaWxlICA+IHdtMjAwMF9hbmMuYmluCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgPHNvdW5kL3dtMjAwMC5oPgorCisjaW5jbHVkZSAid20yMDAwLmgiCisKK2VudW0gd20yMDAwX2FuY19tb2RlIHsKKwlBTkNfQUNUSVZFID0gMCwKKwlBTkNfQllQQVNTID0gMSwKKwlBTkNfU1RBTkRCWSA9IDIsCisJQU5DX09GRiA9IDMsCit9OworCitzdHJ1Y3Qgd20yMDAwX3ByaXYgeworCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7CisKKwllbnVtIHdtMjAwMF9hbmNfbW9kZSBhbmNfbW9kZTsKKworCXVuc2lnbmVkIGludCBhbmNfYWN0aXZlOjE7CisJdW5zaWduZWQgaW50IGFuY19lbmdfZW5hOjE7CisJdW5zaWduZWQgaW50IHNwa19lbmE6MTsKKworCXVuc2lnbmVkIGludCBtY2xrX2RpdjoxOworCXVuc2lnbmVkIGludCBzcGVlY2hfY2xhcml0eToxOworCisJaW50IGFuY19kb3dubG9hZF9zaXplOworCWNoYXIgKmFuY19kb3dubG9hZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqd20yMDAwX2kyYzsKKworc3RhdGljIGludCB3bTIwMDBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmkyYywgdW5zaWduZWQgaW50IHJlZywKKwkJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1OCBkYXRhWzNdOworCWludCByZXQ7CisKKwlkYXRhWzBdID0gKHJlZyA+PiA4KSAmIDB4ZmY7CisJZGF0YVsxXSA9IHJlZyAmIDB4ZmY7CisJZGF0YVsyXSA9IHZhbHVlICYgMHhmZjsKKworCWRldl92ZGJnKCZpMmMtPmRldiwgIndyaXRlICV4ID0gJXhcbiIsIHJlZywgdmFsdWUpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgZGF0YSwgMyk7CisJaWYgKHJldCA9PSAzKQorCQlyZXR1cm4gMDsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHdtMjAwMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIHVuc2lnbmVkIGludCByKQoreworCXN0cnVjdCBpMmNfbXNnIHhmZXJbMl07CisJdTggcmVnWzJdOworCXU4IGRhdGE7CisJaW50IHJldDsKKworCS8qIFdyaXRlIHJlZ2lzdGVyICovCisJcmVnWzBdID0gKHIgPj4gOCkgJiAweGZmOworCXJlZ1sxXSA9IHIgJiAweGZmOworCXhmZXJbMF0uYWRkciA9IGkyYy0+YWRkcjsKKwl4ZmVyWzBdLmZsYWdzID0gMDsKKwl4ZmVyWzBdLmxlbiA9IHNpemVvZihyZWcpOworCXhmZXJbMF0uYnVmID0gJnJlZ1swXTsKKworCS8qIFJlYWQgZGF0YSAqLworCXhmZXJbMV0uYWRkciA9IGkyYy0+YWRkcjsKKwl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJeGZlclsxXS5sZW4gPSAxOworCXhmZXJbMV0uYnVmID0gJmRhdGE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLT5hZGFwdGVyLCB4ZmVyLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJpMmNfdHJhbnNmZXIoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGV2X3ZkYmcoJmkyYy0+ZGV2LCAicmVhZCAleCBmcm9tICV4XG4iLCBkYXRhLCByKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCB3bTIwMDBfcmVzZXQoc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHdtMjAwMC0+aTJjOworCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX0FOQ19FTkdfQ0xSKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfUkFNX0NMUik7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19JRDEsIDApOworCisJd20yMDAwLT5hbmNfbW9kZSA9IEFOQ19PRkY7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX3BvbGxfYml0KHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkgICB1bnNpZ25lZCBpbnQgcmVnLCB1OCBtYXNrLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgdmFsOworCisJdmFsID0gd20yMDAwX3JlYWQoaTJjLCByZWcpOworCisJd2hpbGUgKCEodmFsICYgbWFzaykgJiYgLS10aW1lb3V0KSB7CisJCW1zbGVlcCgxKTsKKwkJdmFsID0gd20yMDAwX3JlYWQoaTJjLCByZWcpOworCX0KKworCWlmICh0aW1lb3V0ID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX3Bvd2VyX3VwKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCWludCByZXQsIHRpbWVvdXQ7CisKKwlCVUdfT04od20yMDAwLT5hbmNfbW9kZSAhPSBBTkNfT0ZGKTsKKworCWRldl9kYmcoJmkyYy0+ZGV2LCAiQmVnaW5uaW5nIHBvd2VyIHVwXG4iKTsKKworCWlmICghd20yMDAwLT5tY2xrX2RpdikgeworCQlkZXZfZGJnKCZpMmMtPmRldiwgIkRpc2FibGluZyBNQ0xLIGRpdmlkZXJcbiIpOworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLAorCQkJICAgICBXTTIwMDBfTUNMS19ESVYyX0VOQV9DTFIpOworCX0gZWxzZSB7CisJCWRldl9kYmcoJmkyYy0+ZGV2LCAiRW5hYmxpbmcgTUNMSyBkaXZpZGVyXG4iKTsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwKKwkJCSAgICAgV00yMDAwX01DTEtfRElWMl9FTkFfU0VUKTsKKwl9CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfQU5DX0VOR19DTFIpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9BTkNfRU5HX1NFVCk7CisKKwkvKiBXYWl0IGZvciBBTkMgZW5naW5lIHRvIGJlY29tZSByZWFkeSAqLworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19BTkNfU1RBVCwKKwkJCSAgICAgV00yMDAwX0FOQ19FTkdfSURMRSwgMSkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJBTkMgZW5naW5lIGZhaWxlZCB0byByZXNldFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19TWVNfU1RBVFVTLAorCQkJICAgICBXTTIwMDBfU1RBVFVTX0JPT1RfQ09NUExFVEUsIDEpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiQU5DIGVuZ2luZSBmYWlsZWQgdG8gaW5pdGlhbGlzZVxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9SQU1fU0VUKTsKKworCS8qIE9wZW4gY29kZSBkb3dubG9hZCBvZiB0aGUgZGF0YSBzaW5jZSBpdCBpcyB0aGUgb25seSBidWxrCisJICogd3JpdGUgd2UgZG8uICovCisJZGV2X2RiZygmaTJjLT5kZXYsICJEb3dubG9hZGluZyAlZCBieXRlc1xuIiwKKwkJd20yMDAwLT5hbmNfZG93bmxvYWRfc2l6ZSAtIDIpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgd20yMDAwLT5hbmNfZG93bmxvYWQsCisJCQkgICAgICB3bTIwMDAtPmFuY19kb3dubG9hZF9zaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgImkyY190cmFuc2ZlcigpIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChyZXQgIT0gd20yMDAwLT5hbmNfZG93bmxvYWRfc2l6ZSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgImkyY190cmFuc2ZlcigpIGZhaWxlZCwgJWQgIT0gJWRcbiIsCisJCQlyZXQsIHdtMjAwMC0+YW5jX2Rvd25sb2FkX3NpemUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfZGJnKCZpMmMtPmRldiwgIkRvd25sb2FkIGNvbXBsZXRlXG4iKTsKKworCWlmIChhbmFsb2d1ZSkgeworCQl0aW1lb3V0ID0gMjQ4OworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX0FOQV9WTUlEX1BVX1RJTUUsIHRpbWVvdXQgLyA0KTsKKworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9BTkFfU0VRX0lOQ0xVREUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSk7CisJfSBlbHNlIHsKKwkJdGltZW91dCA9IDEwOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX01PVVNFX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFKTsKKwl9CisKKwlyZXQgPSB3bTIwMDBfcmVhZChpMmMsIFdNMjAwMF9SRUdfU1BFRUNIX0NMQVJJVFkpOworCWlmICh3bTIwMDAtPnNwZWVjaF9jbGFyaXR5KQorCQlyZXQgJj0gfldNMjAwMF9TUEVFQ0hfQ0xBUklUWTsKKwllbHNlCisJCXJldCB8PSBXTTIwMDBfU1BFRUNIX0NMQVJJVFk7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TUEVFQ0hfQ0xBUklUWSwgcmV0KTsKKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVJUMCwgMHgzMyk7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfU1RBUlQxLCAweDAyKTsKKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9BTkNfSU5UX05fQ0xSKTsKKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19TWVNfU1RBVFVTLAorCQkJICAgICBXTTIwMDBfU1RBVFVTX01PVVNFX0FDVElWRSwgdGltZW91dCkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZGV2aWNlIGFmdGVyICVkbXNcbiIsCisJCQl0aW1lb3V0ICogMTApOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlkZXZfZGJnKCZpMmMtPmRldiwgIkFOQyBhY3RpdmVcbiIpOworCWlmIChhbmFsb2d1ZSkKKwkJZGV2X2RiZygmaTJjLT5kZXYsICJBbmFsb2d1ZSBhY3RpdmVcbiIpOworCXdtMjAwMC0+YW5jX21vZGUgPSBBTkNfQUNUSVZFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX3Bvd2VyX2Rvd24oc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IGFuYWxvZ3VlKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisJaW50IHRpbWVvdXQ7CisKKwlpZiAoYW5hbG9ndWUpIHsKKwkJdGltZW91dCA9IDI0ODsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19BTkFfVk1JRF9QRF9USU1FLCB0aW1lb3V0IC8gNCk7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX0FOQV9TRVFfSU5DTFVERSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1BPV0VSX0RPV04pOworCX0gZWxzZSB7CisJCXRpbWVvdXQgPSAxMDsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfUE9XRVJfRE9XTik7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfUE9XRVJfRE9XTl9DT01QTEVURSwgdGltZW91dCkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lb3V0IHdhaXRpbmcgZm9yIEFOQyBwb3dlciBkb3duXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX0FOQ19TVEFULAorCQkJICAgICBXTTIwMDBfQU5DX0VOR19JRExFLCAxKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlRpbWVvdXQgd2FpdGluZyBmb3IgQU5DIGVuZ2luZSBpZGxlXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJZGV2X2RiZygmaTJjLT5kZXYsICJwb3dlcmVkIG9mZlxuIik7CisJd20yMDAwLT5hbmNfbW9kZSA9IEFOQ19PRkY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfZW50ZXJfYnlwYXNzKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJQlVHX09OKHdtMjAwMC0+YW5jX21vZGUgIT0gQU5DX0FDVElWRSk7CisKKwlpZiAoYW5hbG9ndWUpIHsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIHwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9CWVBBU1NfRU5UUlkpOworCX0gZWxzZSB7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfQllQQVNTX0VOVFJZKTsKKwl9CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVRVUywKKwkJCSAgICAgV00yMDAwX1NUQVRVU19BTkNfRElTQUJMRUQsIDEwKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlRpbWVvdXQgd2FpdGluZyBmb3IgQU5DIGRpc2FibGVcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfQU5DX1NUQVQsCisJCQkgICAgIFdNMjAwMF9BTkNfRU5HX0lETEUsIDEpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVGltZW91dCB3YWl0aW5nIGZvciBBTkMgZW5naW5lIGlkbGVcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwxLCBXTTIwMDBfU1lTX1NUQlkpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9SQU1fQ0xSKTsKKworCXdtMjAwMC0+YW5jX21vZGUgPSBBTkNfQllQQVNTOworCWRldl9kYmcoJmkyYy0+ZGV2LCAiYnlwYXNzIGVuYWJsZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2V4aXRfYnlwYXNzKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJQlVHX09OKHdtMjAwMC0+YW5jX21vZGUgIT0gQU5DX0JZUEFTUyk7CisJCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMSwgMCk7CisKKwlpZiAoYW5hbG9ndWUpIHsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIHwKKwkJCSAgICAgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUpOworCX0gZWxzZSB7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX01PVVNFX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFKTsKKwl9CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfUkFNX1NFVCk7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX0FOQ19JTlRfTl9DTFIpOworCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfTU9VU0VfQUNUSVZFLCAxMCkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTU9VU0VcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX0FDVElWRTsKKwlkZXZfZGJnKCZpMmMtPmRldiwgIk1PVVNFIGFjdGl2ZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfZW50ZXJfc3RhbmRieShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgYW5hbG9ndWUpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKwlpbnQgdGltZW91dDsKKworCUJVR19PTih3bTIwMDAtPmFuY19tb2RlICE9IEFOQ19BQ1RJVkUpOworCisJaWYgKGFuYWxvZ3VlKSB7CisJCXRpbWVvdXQgPSAyNDg7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfQU5BX1ZNSURfUERfVElNRSwgdGltZW91dCAvIDQpOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX0FOQV9TRVFfSU5DTFVERSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfU1RBTkRCWV9FTlRSWSk7CisJfSBlbHNlIHsKKwkJdGltZW91dCA9IDEwOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfU1RBTkRCWV9FTlRSWSk7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfQU5DX0RJU0FCTEVELCB0aW1lb3V0KSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwKKwkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgQU5DIGRpc2FibGUgYWZ0ZXIgMW1zXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX0FOQ19TVEFULCBXTTIwMDBfQU5DX0VOR19JRExFLAorCQkJICAgICAxKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwKKwkJCSJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc3RhbmRieSBhZnRlciAlZG1zXG4iLAorCQkJdGltZW91dCAqIDEwKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMSwgV00yMDAwX1NZU19TVEJZKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfUkFNX0NMUik7CisKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX1NUQU5EQlk7CisJZGV2X2RiZygmaTJjLT5kZXYsICJzdGFuZGJ5XG4iKTsKKwlpZiAoYW5hbG9ndWUpCisJCWRldl9kYmcoJmkyYy0+ZGV2LCAiQW5hbG9ndWUgZGlzYWJsZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2V4aXRfc3RhbmRieShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgYW5hbG9ndWUpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKwlpbnQgdGltZW91dDsKKworCUJVR19PTih3bTIwMDAtPmFuY19tb2RlICE9IEFOQ19TVEFOREJZKTsKKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDEsIDApOworCisJaWYgKGFuYWxvZ3VlKSB7CisJCXRpbWVvdXQgPSAyNDg7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfQU5BX1ZNSURfUFVfVElNRSwgdGltZW91dCAvIDQpOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX0FOQV9TRVFfSU5DTFVERSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFKTsKKwl9IGVsc2UgeworCQl0aW1lb3V0ID0gMTA7CisKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUpOworCX0KKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9SQU1fU0VUKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfQU5DX0lOVF9OX0NMUik7CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVRVUywKKwkJCSAgICAgV00yMDAwX1NUQVRVU19NT1VTRV9BQ1RJVkUsIHRpbWVvdXQpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIE1PVVNFIGFmdGVyICVkbXNcbiIsCisJCQl0aW1lb3V0ICogMTApOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX0FDVElWRTsKKwlkZXZfZGJnKCZpMmMtPmRldiwgIk1PVVNFIGFjdGl2ZVxuIik7CisJaWYgKGFuYWxvZ3VlKQorCQlkZXZfZGJnKCZpMmMtPmRldiwgIkFuYWxvZ3VlIGVuYWJsZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgaW50ICgqd20yMDAwX21vZGVfZm4pKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSk7CisKK3N0YXRpYyBzdHJ1Y3QgeworCWVudW0gd20yMDAwX2FuY19tb2RlIHNvdXJjZTsKKwllbnVtIHdtMjAwMF9hbmNfbW9kZSBkZXN0OworCWludCBhbmFsb2d1ZTsKKwl3bTIwMDBfbW9kZV9mbiBzdGVwWzJdOworfSBhbmNfdHJhbnNpdGlvbnNbXSA9IHsKKwl7CisJCS5zb3VyY2UgPSBBTkNfT0ZGLAorCQkuZGVzdCA9IEFOQ19BQ1RJVkUsCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX3Bvd2VyX3VwLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX09GRiwKKwkJLmRlc3QgPSBBTkNfU1RBTkRCWSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfcG93ZXJfdXAsCisJCQl3bTIwMDBfZW50ZXJfc3RhbmRieSwKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19PRkYsCisJCS5kZXN0ID0gQU5DX0JZUEFTUywKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfcG93ZXJfdXAsCisJCQl3bTIwMDBfZW50ZXJfYnlwYXNzLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX0FDVElWRSwKKwkJLmRlc3QgPSBBTkNfQllQQVNTLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9lbnRlcl9ieXBhc3MsCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfQUNUSVZFLAorCQkuZGVzdCA9IEFOQ19TVEFOREJZLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9lbnRlcl9zdGFuZGJ5LAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX0FDVElWRSwKKwkJLmRlc3QgPSBBTkNfT0ZGLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9wb3dlcl9kb3duLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX0JZUEFTUywKKwkJLmRlc3QgPSBBTkNfQUNUSVZFLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9leGl0X2J5cGFzcywKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19CWVBBU1MsCisJCS5kZXN0ID0gQU5DX1NUQU5EQlksCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX2V4aXRfYnlwYXNzLAorCQkJd20yMDAwX2VudGVyX3N0YW5kYnksCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfQllQQVNTLAorCQkuZGVzdCA9IEFOQ19PRkYsCisJCS5zdGVwID0geworCQkJd20yMDAwX2V4aXRfYnlwYXNzLAorCQkJd20yMDAwX3Bvd2VyX2Rvd24sCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfU1RBTkRCWSwKKwkJLmRlc3QgPSBBTkNfQUNUSVZFLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9leGl0X3N0YW5kYnksCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfU1RBTkRCWSwKKwkJLmRlc3QgPSBBTkNfQllQQVNTLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9leGl0X3N0YW5kYnksCisJCQl3bTIwMDBfZW50ZXJfYnlwYXNzLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX1NUQU5EQlksCisJCS5kZXN0ID0gQU5DX09GRiwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfZXhpdF9zdGFuZGJ5LAorCQkJd20yMDAwX3Bvd2VyX2Rvd24sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgd20yMDAwX2FuY190cmFuc2l0aW9uKHN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwLAorCQkJCSBlbnVtIHdtMjAwMF9hbmNfbW9kZSBtb2RlKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB3bTIwMDAtPmkyYzsKKwlpbnQgaSwgajsKKwlpbnQgcmV0OworCisJaWYgKHdtMjAwMC0+YW5jX21vZGUgPT0gbW9kZSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbmNfdHJhbnNpdGlvbnMpOyBpKyspCisJCWlmIChhbmNfdHJhbnNpdGlvbnNbaV0uc291cmNlID09IHdtMjAwMC0+YW5jX21vZGUgJiYKKwkJICAgIGFuY190cmFuc2l0aW9uc1tpXS5kZXN0ID09IG1vZGUpCisJCQlicmVhazsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGFuY190cmFuc2l0aW9ucykpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJObyB0cmFuc2l0aW9uIGZvciAlZC0+JWRcbiIsCisJCQl3bTIwMDAtPmFuY19tb2RlLCBtb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoYW5jX3RyYW5zaXRpb25zW2pdLnN0ZXApOyBqKyspIHsKKwkJaWYgKCFhbmNfdHJhbnNpdGlvbnNbaV0uc3RlcFtqXSkKKwkJCWJyZWFrOworCQlyZXQgPSBhbmNfdHJhbnNpdGlvbnNbaV0uc3RlcFtqXShpMmMsCisJCQkJCQkgYW5jX3RyYW5zaXRpb25zW2ldLmFuYWxvZ3VlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfYW5jX3NldF9tb2RlKHN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB3bTIwMDAtPmkyYzsKKwllbnVtIHdtMjAwMF9hbmNfbW9kZSBtb2RlOworCisJaWYgKHdtMjAwMC0+YW5jX2VuZ19lbmEgJiYgd20yMDAwLT5zcGtfZW5hKQorCQlpZiAod20yMDAwLT5hbmNfYWN0aXZlKQorCQkJbW9kZSA9IEFOQ19BQ1RJVkU7CisJCWVsc2UKKwkJCW1vZGUgPSBBTkNfQllQQVNTOworCWVsc2UKKwkJbW9kZSA9IEFOQ19TVEFOREJZOworCisJZGV2X2RiZygmaTJjLT5kZXYsICJTZXQgbW9kZSAlZCAoZW5hYmxlZCAlZCwgbXV0ZSAlZCwgYWN0aXZlICVkKVxuIiwKKwkJbW9kZSwgd20yMDAwLT5hbmNfZW5nX2VuYSwgIXdtMjAwMC0+c3BrX2VuYSwKKwkJd20yMDAwLT5hbmNfYWN0aXZlKTsKKworCXJldHVybiB3bTIwMDBfYW5jX3RyYW5zaXRpb24od20yMDAwLCBtb2RlKTsKK30KKworc3RhdGljIGludCB3bTIwMDBfYW5jX21vZGVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZ3bTIwMDBfaTJjLT5kZXYpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtMjAwMC0+YW5jX2FjdGl2ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9hbmNfbW9kZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJndtMjAwMF9pMmMtPmRldik7CisJaW50IGFuY19hY3RpdmUgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJaWYgKGFuY19hY3RpdmUgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtMjAwMC0+YW5jX2FjdGl2ZSA9IGFuY19hY3RpdmU7CisKKwlyZXR1cm4gd20yMDAwX2FuY19zZXRfbW9kZSh3bTIwMDApOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9zcGVha2VyX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZ3bTIwMDBfaTJjLT5kZXYpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtMjAwMC0+c3BrX2VuYTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9zcGVha2VyX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZ3bTIwMDBfaTJjLT5kZXYpOworCWludCB2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJaWYgKHZhbCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJd20yMDAwLT5zcGtfZW5hID0gdmFsOworCisJcmV0dXJuIHdtMjAwMF9hbmNfc2V0X21vZGUod20yMDAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtMjAwMF9jb250cm9sc1tdID0geworCVNPQ19TSU5HTEVfQk9PTF9FWFQoIldNMjAwMCBBTkMgU3dpdGNoIiwgMCwKKwkJCSAgICB3bTIwMDBfYW5jX21vZGVfZ2V0LAorCQkJICAgIHdtMjAwMF9hbmNfbW9kZV9wdXQpLAorCVNPQ19TSU5HTEVfQk9PTF9FWFQoIldNMjAwMCBTd2l0Y2giLCAwLAorCQkJICAgIHdtMjAwMF9zcGVha2VyX2dldCwKKwkJCSAgICB3bTIwMDBfc3BlYWtlcl9wdXQpLAorfTsKKworc3RhdGljIGludCB3bTIwMDBfYW5jX3Bvd2VyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmd20yMDAwX2kyYy0+ZGV2KTsKKworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKQorCQl3bTIwMDAtPmFuY19lbmdfZW5hID0gMTsKKworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT0ZGKGV2ZW50KSkKKwkJd20yMDAwLT5hbmNfZW5nX2VuYSA9IDA7CisKKwlyZXR1cm4gd20yMDAwX2FuY19zZXRfbW9kZSh3bTIwMDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd20yMDAwX2RhcG1fd2lkZ2V0c1tdID0geworLyogRXh0ZXJuYWxseSB2aXNpYmxlIHBpbnMgKi8KK1NORF9TT0NfREFQTV9PVVRQVVQoIldNMjAwMCBTUEtOIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJXTTIwMDAgU1BLUCIpLAorCitTTkRfU09DX0RBUE1fSU5QVVQoIldNMjAwMCBMSU5OIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIldNMjAwMCBMSU5QIiksCisKK1NORF9TT0NfREFQTV9QR0FfRSgiQU5DIEVuZ2luZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJICAgd20yMDAwX2FuY19wb3dlcl9ldmVudCwKKwkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorfTsKKworLyogVGFyZ2V0LCBQYXRoLCBTb3VyY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsgIldNMjAwMCBTUEtOIiwgTlVMTCwgIkFOQyBFbmdpbmUiIH0sCisJeyAiV00yMDAwIFNQS1AiLCBOVUxMLCAiQU5DIEVuZ2luZSIgfSwKKwl7ICJBTkMgRW5naW5lIiwgTlVMTCwgIldNMjAwMCBMSU5OIiB9LAorCXsgIkFOQyBFbmdpbmUiLCBOVUxMLCAiV00yMDAwIExJTlAiIH0sCit9OworCisvKiBDYWxsZWQgZnJvbSB0aGUgbWFjaGluZSBkcml2ZXIgKi8KK2ludCB3bTIwMDBfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgcmV0OworCisJaWYgKCF3bTIwMDBfaTJjKSB7CisJCXByX2VycigiV00yMDAwIG5vdCB5ZXQgcHJvYmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd20yMDAwX2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRSh3bTIwMDBfZGFwbV93aWRnZXRzKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTIwMDBfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKHdtMjAwMF9jb250cm9scykpOworfQorRVhQT1JUX1NZTUJPTF9HUEwod20yMDAwX2FkZF9jb250cm9scyk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtMjAwMF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaTJjX2lkKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwOworCXN0cnVjdCB3bTIwMDBfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgcmVnLCByZXQ7CisJdTE2IGlkOworCisJaWYgKHdtMjAwMF9pMmMpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJBbm90aGVyIFdNMjAwMCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3bTIwMDAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd20yMDAwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod20yMDAwID09IE5VTEwpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgcHJpdmF0ZSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIFdNMjAwMCAqLworCXJlZyA9IHdtMjAwMF9yZWFkKGkyYywgV00yMDAwX1JFR19JRDEpOworCWlkID0gcmVnIDw8IDg7CisJcmVnID0gd20yMDAwX3JlYWQoaTJjLCBXTTIwMDBfUkVHX0lEMik7CisJaWQgfD0gcmVnICYgMHhmZjsKKworCWlmIChpZCAhPSAweDIwMDApIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJEZXZpY2UgaXMgbm90IGEgV00yMDAwIC0gSUQgJXhcbiIsIGlkKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfQorCisJcmVnID0gd20yMDAwX3JlYWQoaTJjLCBXTTIwMDBfUkVHX1JFVklTT04pOworCWRldl9pbmZvKCZpMmMtPmRldiwgInJldmlzaW9uICVjXG4iLCByZWcgKyAnQScpOworCisJZmlsZW5hbWUgPSAid20yMDAwX2FuYy5iaW4iOworCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmaTJjLT5kZXYpOworCWlmIChwZGF0YSkgeworCQl3bTIwMDAtPm1jbGtfZGl2ID0gcGRhdGEtPm1jbGtkaXYyOworCQl3bTIwMDAtPnNwZWVjaF9jbGFyaXR5ID0gIXBkYXRhLT5zcGVlY2hfZW5oX2Rpc2FibGU7CisKKwkJaWYgKHBkYXRhLT5kb3dubG9hZF9maWxlKQorCQkJZmlsZW5hbWUgPSBwZGF0YS0+ZG93bmxvYWRfZmlsZTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZW5hbWUsICZpMmMtPmRldik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiRmFpbGVkIHRvIGFjcXVpcmUgQU5DIGRhdGE6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBQcmUtY29vayB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBvbnRvIHRoZSBpbWFnZSAqLworCXdtMjAwMC0+YW5jX2Rvd25sb2FkX3NpemUgPSBmdy0+c2l6ZSArIDI7CisJd20yMDAwLT5hbmNfZG93bmxvYWQgPSBrbWFsbG9jKHdtMjAwMC0+YW5jX2Rvd25sb2FkX3NpemUsIEdGUF9LRVJORUwpOworCWlmICh3bTIwMDAtPmFuY19kb3dubG9hZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2Z3OworCX0KKworCXdtMjAwMC0+YW5jX2Rvd25sb2FkWzBdID0gMHg4MDsKKwl3bTIwMDAtPmFuY19kb3dubG9hZFsxXSA9IDB4MDA7CisJbWVtY3B5KHdtMjAwMC0+YW5jX2Rvd25sb2FkICsgMiwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJZGV2X3NldF9kcnZkYXRhKCZpMmMtPmRldiwgd20yMDAwKTsKKwl3bTIwMDAtPmFuY19lbmdfZW5hID0gMTsKKwl3bTIwMDAtPmkyYyA9IGkyYzsKKworCXdtMjAwMF9yZXNldCh3bTIwMDApOworCisJLyogVGhpcyB3aWxsIHRyaWdnZXIgYSB0cmFuc2l0aW9uIHRvIHN0YW5kYnkgbW9kZSBieSBkZWZhdWx0ICovCisJd20yMDAwX2FuY19zZXRfbW9kZSh3bTIwMDApOwkKKworCXdtMjAwMF9pMmMgPSBpMmM7CisKKwlyZXR1cm4gMDsKKworZXJyX2Z3OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworZXJyOgorCWtmcmVlKHdtMjAwMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd20yMDAwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJd20yMDAwX2FuY190cmFuc2l0aW9uKHdtMjAwMCwgQU5DX09GRik7CisKKwl3bTIwMDBfaTJjID0gTlVMTDsKKwlrZnJlZSh3bTIwMDAtPmFuY19kb3dubG9hZCk7CisJa2ZyZWUod20yMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTIwMDBfaTJjX3NodXRkb3duKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKworCXdtMjAwMF9hbmNfdHJhbnNpdGlvbih3bTIwMDAsIEFOQ19PRkYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtMjAwMF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJcmV0dXJuIHdtMjAwMF9hbmNfdHJhbnNpdGlvbih3bTIwMDAsIEFOQ19PRkYpOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKworCXJldHVybiB3bTIwMDBfYW5jX3NldF9tb2RlKHdtMjAwMCk7Cit9CisjZWxzZQorI2RlZmluZSB3bTIwMDBfaTJjX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTIwMDBfaTJjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtMjAwMF9pMmNfaWRbXSA9IHsKKwl7ICJ3bTIwMDAiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtMjAwMF9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd20yMDAwX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid20yMDAwIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB3bTIwMDBfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTIwMDBfaTJjX3JlbW92ZSksCisJLnN1c3BlbmQgPSB3bTIwMDBfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSA9IHdtMjAwMF9pMmNfcmVzdW1lLAorCS5zaHV0ZG93biA9IHdtMjAwMF9pMmNfc2h1dGRvd24sCisJLmlkX3RhYmxlID0gd20yMDAwX2kyY19pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtMjAwMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ3bTIwMDBfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTIwMDBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTIwMDBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3bTIwMDBfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTIwMDBfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTIwMDAgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZm9ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTIwMDAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4ZTI2MQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIHdtMjAwMC5oICAtLSAgV00yMDAwIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1dNMjAwMF9ICisjZGVmaW5lIF9XTTIwMDBfSAorCitzdHJ1Y3Qgd20yMDAwX3NldHVwX2RhdGEgeworCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzOworCWludCBtY2xrX2RpdjsgICAvKiBTZXQgdG8gYSBub24temVybyB2YWx1ZSBpZiBNQ0xLX0RJVl8yIHJlcXVpcmVkICovCit9OworCitleHRlcm4gaW50IHdtMjAwMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTIwMDBfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtMjAwMDsKKworI2RlZmluZSBXTTIwMDBfUkVHX1NZU19TVEFSVAkgICAgMHg4MDAwCisjZGVmaW5lIFdNMjAwMF9SRUdfU1BFRUNIX0NMQVJJVFkgICAweDhmZWYKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfV0FUQ0hET0cgICAgIDB4OGZmNgorI2RlZmluZSBXTTIwMDBfUkVHX0FOQV9WTUlEX1BEX1RJTUUgMHg4ZmY3CisjZGVmaW5lIFdNMjAwMF9SRUdfQU5BX1ZNSURfUFVfVElNRSAweDhmZjgKKyNkZWZpbmUgV00yMDAwX1JFR19DQVRfRkxUUl9JTkRYICAgIDB4OGZmOQorI2RlZmluZSBXTTIwMDBfUkVHX0NBVF9HQUlOXzAgICAgICAgMHg4ZmZhCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX1NUQVRVUyAgICAgICAweDhmZmMKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCAgIDB4OGZmZAorI2RlZmluZSBXTTIwMDBfUkVHX1NZU19TVEFSVDAgICAgICAgMHg4ZmZlCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX1NUQVJUMSAgICAgICAweDhmZmYKKyNkZWZpbmUgV00yMDAwX1JFR19JRDEgICAgICAgICAgICAgIDB4ZjAwMAorI2RlZmluZSBXTTIwMDBfUkVHX0lEMiAgICAgICAgICAgICAgMHhmMDAxCisjZGVmaW5lIFdNMjAwMF9SRUdfUkVWSVNPTiAgICAgICAgICAweGYwMDIKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfQ1RMMSAgICAgICAgIDB4ZjAwMworI2RlZmluZSBXTTIwMDBfUkVHX1NZU19DVEwyICAgICAgICAgMHhmMDA0CisjZGVmaW5lIFdNMjAwMF9SRUdfQU5DX1NUQVQgICAgICAgICAweGYwMDUKKyNkZWZpbmUgV00yMDAwX1JFR19JRl9DVEwgICAgICAgICAgIDB4ZjAwNgorCisvKiBTUEVFQ0hfQ0xBUklUWSAqLworI2RlZmluZSBXTTIwMDBfU1BFRUNIX0NMQVJJVFkgICAweDAxCisKKy8qIFNZU19TVEFUVVMgKi8KKyNkZWZpbmUgV00yMDAwX1NUQVRVU19NT1VTRV9BQ1RJVkUgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19DQVRfRlJFUV9DT01QTEVURSAgICAgICAgIDB4MjAKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19DQVRfR0FJTl9DT01QTEVURSAgICAgICAgIDB4MTAKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19USEVSTUFMX1NIVVRET1dOX0NPTVBMRVRFIDB4MDgKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19BTkNfRElTQUJMRUQgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19QT1dFUl9ET1dOX0NPTVBMRVRFICAgICAgIDB4MDIKKyNkZWZpbmUgV00yMDAwX1NUQVRVU19CT09UX0NPTVBMRVRFICAgICAgICAgICAgIDB4MDEKKworLyogU1lTX01PREVfQ05UUkwgKi8KKyNkZWZpbmUgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIDB4ODAKKyNkZWZpbmUgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFICAgIDB4NDAKKyNkZWZpbmUgV00yMDAwX01PREVfQ0FUX0ZSRVFfRU5BQkxFIDB4MjAKKyNkZWZpbmUgV00yMDAwX01PREVfQ0FUX0dBSU5fRU5BQkxFIDB4MTAKKyNkZWZpbmUgV00yMDAwX01PREVfQllQQVNTX0VOVFJZICAgIDB4MDgKKyNkZWZpbmUgV00yMDAwX01PREVfU1RBTkRCWV9FTlRSWSAgIDB4MDQKKyNkZWZpbmUgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgIDB4MDIKKyNkZWZpbmUgV00yMDAwX01PREVfUE9XRVJfRE9XTiAgICAgIDB4MDEKKworLyogU1lTX0NUTDEgKi8KKyNkZWZpbmUgV00yMDAwX1NZU19TVEJZICAgICAgICAgIDB4MDEKKworLyogU1lTX0NUTDIgKi8KKyNkZWZpbmUgV00yMDAwX01DTEtfRElWMl9FTkFfQ0xSIDB4ODAKKyNkZWZpbmUgV00yMDAwX01DTEtfRElWMl9FTkFfU0VUIDB4NDAKKyNkZWZpbmUgV00yMDAwX0FOQ19FTkdfQ0xSICAgICAgIDB4MjAKKyNkZWZpbmUgV00yMDAwX0FOQ19FTkdfU0VUICAgICAgIDB4MTAKKyNkZWZpbmUgV00yMDAwX0FOQ19JTlRfTl9DTFIgICAgIDB4MDgKKyNkZWZpbmUgV00yMDAwX0FOQ19JTlRfTl9TRVQgICAgIDB4MDQKKyNkZWZpbmUgV00yMDAwX1JBTV9DTFIgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgV00yMDAwX1JBTV9TRVQgICAgICAgICAgIDB4MDEKKworLyogQU5DX1NUQVQgKi8KKyNkZWZpbmUgV00yMDAwX0FOQ19FTkdfSURMRSAgICAgIDB4MDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODcyNy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MjcuYwppbmRleCBkOGZmYmQ2Li42M2EyNTRlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODcyNy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI3LmMKQEAgLTQ0LDIzICs0NCwxNiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODcyN19kYWkpOwogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODcyN19jb2RlYzsKKwogc3RhdGljIGludCB3bTg3Mjdfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJaW50IHJldCA9IDA7CiAKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JY29kZWMtPm5hbWUgPSAiV004NzI3IjsKLQljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+ZGFpID0gJndtODcyN19kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSAxOwotCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwlCVUdfT04oIXdtODcyN19jb2RlYyk7CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204NzI3X2NvZGVjOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CkBAIC04MCwxMiArNzMsOSBAQAogc3RhdGljIGludCB3bTg3Mjdfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAotCWlmIChjb2RlYyA9PSBOVUxMKQotCQlyZXR1cm4gMDsKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwotCWtmcmVlKGNvZGVjKTsKKwogCXJldHVybiAwOwogfQogCkBAIC05OCwxMyArODgsNTUgQEAKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgd204NzI3X3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQ7CisKKwlpZiAod204NzI3X2NvZGVjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkFub3RoZXIgV004NzI3IGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29kZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJd204NzI3X2NvZGVjID0gY29kZWM7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjb2RlYyk7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCWNvZGVjLT5kZXYgPSAmcGRldi0+ZGV2OworCWNvZGVjLT5uYW1lID0gIldNODcyNyI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9ICZ3bTg3MjdfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKwogCXdtODcyN19kYWkuZGV2ID0gJnBkZXYtPmRldjsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODcyN19kYWkpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBDT0RFQzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg3MjdfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworZXJyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnI6CisJa2ZyZWUoY29kZWMpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHdtODcyN19wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg3MjdfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwppbmRleCAzYTQ5NzgxLi41YTI2MTlkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKQEAgLTQ1Niw2ICs0NTYsOSBAQAogCiAJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzFfcmVnKTsgaSsrKSB7CisJCWlmIChjYWNoZVtpXSA9PSB3bTg3MzFfcmVnW2ldKQorCQkJY29udGludWU7CisKIAkJZGF0YVswXSA9IChpIDw8IDEpIHwgKChjYWNoZVtpXSA+PiA4KSAmIDB4MDAwMSk7CiAJCWRhdGFbMV0gPSBjYWNoZVtpXSAmIDB4MDBmZjsKIAkJY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKaW5kZXggZDY4NTBkYS4uYzI0NDRlNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCkBAIC0xNTA3LDEwICsxNTA3LDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKLQkvKiB3ZSBvbmx5IG5lZWQgdG8gc3VzcGVuZCBpZiB3ZSBhcmUgYSB2YWxpZCBjYXJkICovCi0JaWYgKCFjb2RlYy0+Y2FyZCkKLQkJcmV0dXJuIDA7Ci0KIAl3bTg3NTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwogfQpAQCAtMTUyMywxMCArMTUxOSw2IEBACiAJdTggZGF0YVsyXTsKIAl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKIAotCS8qIHdlIG9ubHkgbmVlZCB0byByZXN1bWUgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLwotCWlmICghY29kZWMtPmNhcmQpCi0JCXJldHVybiAwOwotCiAJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfcmVnKTsgaSsrKSB7CiAJCWlmIChpICsgMSA9PSBXTTg3NTNfUkVTRVQpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc3Ni5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NzYuYwppbmRleCBhYjJjMGRhLi40NGU3ZDlkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc3Ni5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmMKQEAgLTQwNiw2ICs0MDYsOCBAQAogCiAJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NzZfcmVnKTsgaSsrKSB7CisJCWlmIChjYWNoZVtpXSA9PSB3bTg3NzZfcmVnW2ldKQorCQkJY29udGludWU7CiAJCWRhdGFbMF0gPSAoaSA8PCAxKSB8ICgoY2FjaGVbaV0gPj4gOCkgJiAweDAwMDEpOwogCQlkYXRhWzFdID0gY2FjaGVbaV0gJiAweDAwZmY7CiAJCWNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2U0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCkBAIC0wLDAgKzEsMjY1NiBAQAorLyoKKyAqIHdtODkwNC5jICAtLSAgV004OTA0IEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC93bTg5MDQuaD4KKworI2luY2x1ZGUgIndtODkwNC5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODkwNF9jb2RlYzsKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODkwNDsKKworZW51bSB3bTg5MDRfdHlwZSB7CisJV004OTA0LAorCVdNODkxMiwKK307CisKKyNkZWZpbmUgV004OTA0X05VTV9EQ1NfQ0hBTk5FTFMgNAorCisjZGVmaW5lIFdNODkwNF9OVU1fU1VQUExJRVMgNQorc3RhdGljIGNvbnN0IGNoYXIgKndtODkwNF9zdXBwbHlfbmFtZXNbV004OTA0X05VTV9TVVBQTElFU10gPSB7CisJIkRDVkREIiwKKwkiREJWREQiLAorCSJBVkREIiwKKwkiQ1BWREQiLAorCSJNSUNWREQiLAorfTsKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204OTA0X3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXUxNiByZWdfY2FjaGVbV004OTA0X01BWF9SRUdJU1RFUiArIDFdOworCisJZW51bSB3bTg5MDRfdHlwZSBkZXZ0eXBlOworCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbV004OTA0X05VTV9TVVBQTElFU107CisKKwlzdHJ1Y3Qgd204OTA0X3BkYXRhICpwZGF0YTsKKworCWludCBkZWVtcGg7CisKKwkvKiBQbGF0Zm9ybSBwcm92aWRlZCBEUkMgY29uZmlndXJhdGlvbiAqLworCWNvbnN0IGNoYXIgKipkcmNfdGV4dHM7CisJaW50IGRyY19jZmc7CisJc3RydWN0IHNvY19lbnVtIGRyY19lbnVtOworCisJLyogUGxhdGZvcm0gcHJvdmlkZWQgUmVUdW5lIG1vYmlsZSBjb25maWd1cmF0aW9uICovCisJaW50IG51bV9yZXR1bmVfbW9iaWxlX3RleHRzOworCWNvbnN0IGNoYXIgKipyZXR1bmVfbW9iaWxlX3RleHRzOworCWludCByZXR1bmVfbW9iaWxlX2NmZzsKKwlzdHJ1Y3Qgc29jX2VudW0gcmV0dW5lX21vYmlsZV9lbnVtOworCisJLyogRkxMIHNldHVwICovCisJaW50IGZsbF9zcmM7CisJaW50IGZsbF9mcmVmOworCWludCBmbGxfZm91dDsKKworCS8qIENsb2NraW5nIGNvbmZpZ3VyYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgbWNsa19yYXRlOworCWludCBzeXNjbGtfc3JjOworCXVuc2lnbmVkIGludCBzeXNjbGtfcmF0ZTsKKworCWludCB0ZG1fd2lkdGg7CisJaW50IHRkbV9zbG90czsKKwlpbnQgYmNsazsKKwlpbnQgZnM7CisKKwkvKiBEQyBzZXJ2byBjb25maWd1cmF0aW9uIC0gY2FjaGVkIG9mZnNldCB2YWx1ZXMgKi8KKwlpbnQgZGNzX3N0YXRlW1dNODkwNF9OVU1fRENTX0NIQU5ORUxTXTsKK307CisKK3N0YXRpYyBjb25zdCB1MTYgd204OTA0X3JlZ1tXTTg5MDRfTUFYX1JFR0lTVEVSICsgMV0gPSB7CisJMHg4OTA0LCAgICAgLyogUjAgICAtIFNXIFJlc2V0IGFuZCBJRCAqLworCTB4MDAwMCwgICAgIC8qIFIxICAgLSBSZXZpc2lvbiAqLworCTB4MDAwMCwgICAgIC8qIFIyICovCisJMHgwMDAwLCAgICAgLyogUjMgKi8KKwkweDAwMTgsICAgICAvKiBSNCAgIC0gQmlhcyBDb250cm9sIDAgKi8KKwkweDAwMDAsICAgICAvKiBSNSAgIC0gVk1JRCBDb250cm9sIDAgKi8KKwkweDAwMDAsICAgICAvKiBSNiAgIC0gTWljIEJpYXMgQ29udHJvbCAwICovCisJMHgwMDAwLCAgICAgLyogUjcgICAtIE1pYyBCaWFzIENvbnRyb2wgMSAqLworCTB4MDAwMSwgICAgIC8qIFI4ICAgLSBBbmFsb2d1ZSBEQUMgMCAqLworCTB4OTY5NiwgICAgIC8qIFI5ICAgLSBtaWMgRmlsdGVyIENvbnRyb2wgKi8KKwkweDAwMDEsICAgICAvKiBSMTAgIC0gQW5hbG9ndWUgQURDIDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTEgKi8KKwkweDAwMDAsICAgICAvKiBSMTIgIC0gUG93ZXIgTWFuYWdlbWVudCAwICovCisJMHgwMDAwLCAgICAgLyogUjEzICovCisJMHgwMDAwLCAgICAgLyogUjE0ICAtIFBvd2VyIE1hbmFnZW1lbnQgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNSAgLSBQb3dlciBNYW5hZ2VtZW50IDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTYgKi8KKwkweDAwMDAsICAgICAvKiBSMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTggIC0gUG93ZXIgTWFuYWdlbWVudCA2ICovCisJMHgwMDAwLCAgICAgLyogUjE5ICovCisJMHg5NDVFLCAgICAgLyogUjIwICAtIENsb2NrIFJhdGVzIDAgKi8KKwkweDBDMDUsICAgICAvKiBSMjEgIC0gQ2xvY2sgUmF0ZXMgMSAqLworCTB4MDAwNiwgICAgIC8qIFIyMiAgLSBDbG9jayBSYXRlcyAyICovCisJMHgwMDAwLCAgICAgLyogUjIzICovCisJMHgwMDUwLCAgICAgLyogUjI0ICAtIEF1ZGlvIEludGVyZmFjZSAwICovCisJMHgwMDBBLCAgICAgLyogUjI1ICAtIEF1ZGlvIEludGVyZmFjZSAxICovCisJMHgwMEU0LCAgICAgLyogUjI2ICAtIEF1ZGlvIEludGVyZmFjZSAyICovCisJMHgwMDQwLCAgICAgLyogUjI3ICAtIEF1ZGlvIEludGVyZmFjZSAzICovCisJMHgwMDAwLCAgICAgLyogUjI4ICovCisJMHgwMDAwLCAgICAgLyogUjI5ICovCisJMHgwMEMwLCAgICAgLyogUjMwICAtIERBQyBEaWdpdGFsIFZvbHVtZSBMZWZ0ICovCisJMHgwMEMwLCAgICAgLyogUjMxICAtIERBQyBEaWdpdGFsIFZvbHVtZSBSaWdodCAqLworCTB4MDAwMCwgICAgIC8qIFIzMiAgLSBEQUMgRGlnaXRhbCAwICovCisJMHgwMDA4LCAgICAgLyogUjMzICAtIERBQyBEaWdpdGFsIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMzQgKi8KKwkweDAwMDAsICAgICAvKiBSMzUgKi8KKwkweDAwQzAsICAgICAvKiBSMzYgIC0gQURDIERpZ2l0YWwgVm9sdW1lIExlZnQgKi8KKwkweDAwQzAsICAgICAvKiBSMzcgIC0gQURDIERpZ2l0YWwgVm9sdW1lIFJpZ2h0ICovCisJMHgwMDEwLCAgICAgLyogUjM4ICAtIEFEQyBEaWdpdGFsIDAgKi8KKwkweDAwMDAsICAgICAvKiBSMzkgIC0gRGlnaXRhbCBNaWNyb3Bob25lIDAgKi8KKwkweDAxQUYsICAgICAvKiBSNDAgIC0gRFJDIDAgKi8KKwkweDMyNDgsICAgICAvKiBSNDEgIC0gRFJDIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNDIgIC0gRFJDIDIgKi8KKwkweDAwMDAsICAgICAvKiBSNDMgIC0gRFJDIDMgKi8KKwkweDAwODUsICAgICAvKiBSNDQgIC0gQW5hbG9ndWUgTGVmdCBJbnB1dCAwICovCisJMHgwMDg1LCAgICAgLyogUjQ1ICAtIEFuYWxvZ3VlIFJpZ2h0IElucHV0IDAgKi8KKwkweDAwNDQsICAgICAvKiBSNDYgIC0gQW5hbG9ndWUgTGVmdCBJbnB1dCAxICovCisJMHgwMDQ0LCAgICAgLyogUjQ3ICAtIEFuYWxvZ3VlIFJpZ2h0IElucHV0IDEgKi8KKwkweDAwMDAsICAgICAvKiBSNDggKi8KKwkweDAwMDAsICAgICAvKiBSNDkgKi8KKwkweDAwMDAsICAgICAvKiBSNTAgKi8KKwkweDAwMDAsICAgICAvKiBSNTEgKi8KKwkweDAwMDAsICAgICAvKiBSNTIgKi8KKwkweDAwMDAsICAgICAvKiBSNTMgKi8KKwkweDAwMDAsICAgICAvKiBSNTQgKi8KKwkweDAwMDAsICAgICAvKiBSNTUgKi8KKwkweDAwMDAsICAgICAvKiBSNTYgKi8KKwkweDAwMkQsICAgICAvKiBSNTcgIC0gQW5hbG9ndWUgT1VUMSBMZWZ0ICovCisJMHgwMDJELCAgICAgLyogUjU4ICAtIEFuYWxvZ3VlIE9VVDEgUmlnaHQgKi8KKwkweDAwMzksICAgICAvKiBSNTkgIC0gQW5hbG9ndWUgT1VUMiBMZWZ0ICovCisJMHgwMDM5LCAgICAgLyogUjYwICAtIEFuYWxvZ3VlIE9VVDIgUmlnaHQgKi8KKwkweDAwMDAsICAgICAvKiBSNjEgIC0gQW5hbG9ndWUgT1VUMTIgWkMgKi8KKwkweDAwMDAsICAgICAvKiBSNjIgKi8KKwkweDAwMDAsICAgICAvKiBSNjMgKi8KKwkweDAwMDAsICAgICAvKiBSNjQgKi8KKwkweDAwMDAsICAgICAvKiBSNjUgKi8KKwkweDAwMDAsICAgICAvKiBSNjYgKi8KKwkweDAwMDAsICAgICAvKiBSNjcgIC0gREMgU2Vydm8gMCAqLworCTB4MDAwMCwgICAgIC8qIFI2OCAgLSBEQyBTZXJ2byAxICovCisJMHhBQUFBLCAgICAgLyogUjY5ICAtIERDIFNlcnZvIDIgKi8KKwkweDAwMDAsICAgICAvKiBSNzAgKi8KKwkweEFBQUEsICAgICAvKiBSNzEgIC0gREMgU2Vydm8gNCAqLworCTB4QUFBQSwgICAgIC8qIFI3MiAgLSBEQyBTZXJ2byA1ICovCisJMHgwMDAwLCAgICAgLyogUjczICAtIERDIFNlcnZvIDYgKi8KKwkweDAwMDAsICAgICAvKiBSNzQgIC0gREMgU2Vydm8gNyAqLworCTB4MDAwMCwgICAgIC8qIFI3NSAgLSBEQyBTZXJ2byA4ICovCisJMHgwMDAwLCAgICAgLyogUjc2ICAtIERDIFNlcnZvIDkgKi8KKwkweDAwMDAsICAgICAvKiBSNzcgIC0gREMgU2Vydm8gUmVhZGJhY2sgMCAqLworCTB4MDAwMCwgICAgIC8qIFI3OCAqLworCTB4MDAwMCwgICAgIC8qIFI3OSAqLworCTB4MDAwMCwgICAgIC8qIFI4MCAqLworCTB4MDAwMCwgICAgIC8qIFI4MSAqLworCTB4MDAwMCwgICAgIC8qIFI4MiAqLworCTB4MDAwMCwgICAgIC8qIFI4MyAqLworCTB4MDAwMCwgICAgIC8qIFI4NCAqLworCTB4MDAwMCwgICAgIC8qIFI4NSAqLworCTB4MDAwMCwgICAgIC8qIFI4NiAqLworCTB4MDAwMCwgICAgIC8qIFI4NyAqLworCTB4MDAwMCwgICAgIC8qIFI4OCAqLworCTB4MDAwMCwgICAgIC8qIFI4OSAqLworCTB4MDAwMCwgICAgIC8qIFI5MCAgLSBBbmFsb2d1ZSBIUCAwICovCisJMHgwMDAwLCAgICAgLyogUjkxICovCisJMHgwMDAwLCAgICAgLyogUjkyICovCisJMHgwMDAwLCAgICAgLyogUjkzICovCisJMHgwMDAwLCAgICAgLyogUjk0ICAtIEFuYWxvZ3VlIExpbmVvdXQgMCAqLworCTB4MDAwMCwgICAgIC8qIFI5NSAqLworCTB4MDAwMCwgICAgIC8qIFI5NiAqLworCTB4MDAwMCwgICAgIC8qIFI5NyAqLworCTB4MDAwMCwgICAgIC8qIFI5OCAgLSBDaGFyZ2UgUHVtcCAwICovCisJMHgwMDAwLCAgICAgLyogUjk5ICovCisJMHgwMDAwLCAgICAgLyogUjEwMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTAyICovCisJMHgwMDAwLCAgICAgLyogUjEwMyAqLworCTB4MDAwNCwgICAgIC8qIFIxMDQgLSBDbGFzcyBXIDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTA1ICovCisJMHgwMDAwLCAgICAgLyogUjEwNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDcgKi8KKwkweDAwMDAsICAgICAvKiBSMTA4IC0gV3JpdGUgU2VxdWVuY2VyIDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTA5IC0gV3JpdGUgU2VxdWVuY2VyIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTEwIC0gV3JpdGUgU2VxdWVuY2VyIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTExIC0gV3JpdGUgU2VxdWVuY2VyIDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTEyIC0gV3JpdGUgU2VxdWVuY2VyIDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTEzICovCisJMHgwMDAwLCAgICAgLyogUjExNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTE2IC0gRkxMIENvbnRyb2wgMSAqLworCTB4MDAwNywgICAgIC8qIFIxMTcgLSBGTEwgQ29udHJvbCAyICovCisJMHgwMDAwLCAgICAgLyogUjExOCAtIEZMTCBDb250cm9sIDMgKi8KKwkweDJFRTAsICAgICAvKiBSMTE5IC0gRkxMIENvbnRyb2wgNCAqLworCTB4MDAwNCwgICAgIC8qIFIxMjAgLSBGTEwgQ29udHJvbCA1ICovCisJMHgwMDE0LCAgICAgLyogUjEyMSAtIEdQSU8gQ29udHJvbCAxICovCisJMHgwMDEwLCAgICAgLyogUjEyMiAtIEdQSU8gQ29udHJvbCAyICovCisJMHgwMDEwLCAgICAgLyogUjEyMyAtIEdQSU8gQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjEyNCAtIEdQSU8gQ29udHJvbCA0ICovCisJMHgwMDAwLCAgICAgLyogUjEyNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjYgLSBEaWdpdGFsIFB1bGxzICovCisJMHgwMDAwLCAgICAgLyogUjEyNyAtIEludGVycnVwdCBTdGF0dXMgKi8KKwkweEZGRkYsICAgICAvKiBSMTI4IC0gSW50ZXJydXB0IFN0YXR1cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjEyOSAtIEludGVycnVwdCBQb2xhcml0eSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzAgLSBJbnRlcnJ1cHQgRGVib3VuY2UgKi8KKwkweDAwMDAsICAgICAvKiBSMTMxICovCisJMHgwMDAwLCAgICAgLyogUjEzMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTM0IC0gRVExICovCisJMHgwMDBDLCAgICAgLyogUjEzNSAtIEVRMiAqLworCTB4MDAwQywgICAgIC8qIFIxMzYgLSBFUTMgKi8KKwkweDAwMEMsICAgICAvKiBSMTM3IC0gRVE0ICovCisJMHgwMDBDLCAgICAgLyogUjEzOCAtIEVRNSAqLworCTB4MDAwQywgICAgIC8qIFIxMzkgLSBFUTYgKi8KKwkweDBGQ0EsICAgICAvKiBSMTQwIC0gRVE3ICovCisJMHgwNDAwLCAgICAgLyogUjE0MSAtIEVROCAqLworCTB4MDBEOCwgICAgIC8qIFIxNDIgLSBFUTkgKi8KKwkweDFFQjUsICAgICAvKiBSMTQzIC0gRVExMCAqLworCTB4RjE0NSwgICAgIC8qIFIxNDQgLSBFUTExICovCisJMHgwQjc1LCAgICAgLyogUjE0NSAtIEVRMTIgKi8KKwkweDAxQzUsICAgICAvKiBSMTQ2IC0gRVExMyAqLworCTB4MUM1OCwgICAgIC8qIFIxNDcgLSBFUTE0ICovCisJMHhGMzczLCAgICAgLyogUjE0OCAtIEVRMTUgKi8KKwkweDBBNTQsICAgICAvKiBSMTQ5IC0gRVExNiAqLworCTB4MDU1OCwgICAgIC8qIFIxNTAgLSBFUTE3ICovCisJMHgxNjhFLCAgICAgLyogUjE1MSAtIEVRMTggKi8KKwkweEY4MjksICAgICAvKiBSMTUyIC0gRVExOSAqLworCTB4MDdBRCwgICAgIC8qIFIxNTMgLSBFUTIwICovCisJMHgxMTAzLCAgICAgLyogUjE1NCAtIEVRMjEgKi8KKwkweDA1NjQsICAgICAvKiBSMTU1IC0gRVEyMiAqLworCTB4MDU1OSwgICAgIC8qIFIxNTYgLSBFUTIzICovCisJMHg0MDAwLCAgICAgLyogUjE1NyAtIEVRMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTU4ICovCisJMHgwMDAwLCAgICAgLyogUjE1OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTYxIC0gQ29udHJvbCBJbnRlcmZhY2UgVGVzdCAxICovCisJMHgwMDAwLCAgICAgLyogUjE2MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNjMgKi8KKwkweDAwMDAsICAgICAvKiBSMTY0ICovCisJMHgwMDAwLCAgICAgLyogUjE2NSAqLworCTB4MDAwMCwgICAgIC8qIFIxNjYgKi8KKwkweDAwMDAsICAgICAvKiBSMTY3ICovCisJMHgwMDAwLCAgICAgLyogUjE2OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjkgKi8KKwkweDAwMDAsICAgICAvKiBSMTcwICovCisJMHgwMDAwLCAgICAgLyogUjE3MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzIgKi8KKwkweDAwMDAsICAgICAvKiBSMTczICovCisJMHgwMDAwLCAgICAgLyogUjE3NCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzUgKi8KKwkweDAwMDAsICAgICAvKiBSMTc2ICovCisJMHgwMDAwLCAgICAgLyogUjE3NyAqLworCTB4MDAwMCwgICAgIC8qIFIxNzggKi8KKwkweDAwMDAsICAgICAvKiBSMTc5ICovCisJMHgwMDAwLCAgICAgLyogUjE4MCAqLworCTB4MDAwMCwgICAgIC8qIFIxODEgKi8KKwkweDAwMDAsICAgICAvKiBSMTgyICovCisJMHgwMDAwLCAgICAgLyogUjE4MyAqLworCTB4MDAwMCwgICAgIC8qIFIxODQgKi8KKwkweDAwMDAsICAgICAvKiBSMTg1ICovCisJMHgwMDAwLCAgICAgLyogUjE4NiAqLworCTB4MDAwMCwgICAgIC8qIFIxODcgKi8KKwkweDAwMDAsICAgICAvKiBSMTg4ICovCisJMHgwMDAwLCAgICAgLyogUjE4OSAqLworCTB4MDAwMCwgICAgIC8qIFIxOTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTkxICovCisJMHgwMDAwLCAgICAgLyogUjE5MiAqLworCTB4MDAwMCwgICAgIC8qIFIxOTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTk0ICovCisJMHgwMDAwLCAgICAgLyogUjE5NSAqLworCTB4MDAwMCwgICAgIC8qIFIxOTYgKi8KKwkweDAwMDAsICAgICAvKiBSMTk3ICovCisJMHgwMDAwLCAgICAgLyogUjE5OCAqLworCTB4MDAwMCwgICAgIC8qIFIxOTkgKi8KKwkweDAwMDAsICAgICAvKiBSMjAwICovCisJMHgwMDAwLCAgICAgLyogUjIwMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjAzICovCisJMHgwMDAwLCAgICAgLyogUjIwNCAtIEFuYWxvZ3VlIE91dHB1dCBCaWFzIDAgKi8KKwkweDAwMDAsICAgICAvKiBSMjA1ICovCisJMHgwMDAwLCAgICAgLyogUjIwNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMDcgKi8KKwkweDAwMDAsICAgICAvKiBSMjA4ICovCisJMHgwMDAwLCAgICAgLyogUjIwOSAqLworCTB4MDAwMCwgICAgIC8qIFIyMTAgKi8KKwkweDAwMDAsICAgICAvKiBSMjExICovCisJMHgwMDAwLCAgICAgLyogUjIxMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMTMgKi8KKwkweDAwMDAsICAgICAvKiBSMjE0ICovCisJMHgwMDAwLCAgICAgLyogUjIxNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMTYgKi8KKwkweDAwMDAsICAgICAvKiBSMjE3ICovCisJMHgwMDAwLCAgICAgLyogUjIxOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTkgKi8KKwkweDAwMDAsICAgICAvKiBSMjIwICovCisJMHgwMDAwLCAgICAgLyogUjIyMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjIgKi8KKwkweDAwMDAsICAgICAvKiBSMjIzICovCisJMHgwMDAwLCAgICAgLyogUjIyNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjUgKi8KKwkweDAwMDAsICAgICAvKiBSMjI2ICovCisJMHgwMDAwLCAgICAgLyogUjIyNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjggKi8KKwkweDAwMDAsICAgICAvKiBSMjI5ICovCisJMHgwMDAwLCAgICAgLyogUjIzMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzEgKi8KKwkweDAwMDAsICAgICAvKiBSMjMyICovCisJMHgwMDAwLCAgICAgLyogUjIzMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzQgKi8KKwkweDAwMDAsICAgICAvKiBSMjM1ICovCisJMHgwMDAwLCAgICAgLyogUjIzNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMzcgKi8KKwkweDAwMDAsICAgICAvKiBSMjM4ICovCisJMHgwMDAwLCAgICAgLyogUjIzOSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDAgKi8KKwkweDAwMDAsICAgICAvKiBSMjQxICovCisJMHgwMDAwLCAgICAgLyogUjI0MiAqLworCTB4MDAwMCwgICAgIC8qIFIyNDMgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ0ICovCisJMHgwMDAwLCAgICAgLyogUjI0NSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDYgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ3IC0gRkxMIE5DTyBUZXN0IDAgKi8KKwkweDAwMTksICAgICAvKiBSMjQ4IC0gRkxMIE5DTyBUZXN0IDEgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCByZWFkYWJsZTsKKwlpbnQgd3JpdGFibGU7CisJaW50IHZvbDsKK30gd204OTA0X2FjY2Vzc1tdID0geworCXsgMHhGRkZGLCAweEZGRkYsIDEgfSwgLyogUjAgICAtIFNXIFJlc2V0IGFuZCBJRCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEgICAtIFJldmlzaW9uICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjMgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAwIH0sIC8qIFI0ICAgLSBCaWFzIENvbnRyb2wgMCAqLworCXsgMHgwMDQ3LCAweDAwNDcsIDAgfSwgLyogUjUgICAtIFZNSUQgQ29udHJvbCAwICovCisJeyAweDAwN0YsIDB4MDA3RiwgMCB9LCAvKiBSNiAgIC0gTWljIEJpYXMgQ29udHJvbCAwICovCisJeyAweEMwMDcsIDB4QzAwNywgMCB9LCAvKiBSNyAgIC0gTWljIEJpYXMgQ29udHJvbCAxICovCisJeyAweDAwMUUsIDB4MDAxRSwgMCB9LCAvKiBSOCAgIC0gQW5hbG9ndWUgREFDIDAgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFI5ICAgLSBtaWMgRmlsdGVyIENvbnRyb2wgKi8KKwl7IDB4MDAwMSwgMHgwMDAxLCAwIH0sIC8qIFIxMCAgLSBBbmFsb2d1ZSBBREMgMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjExICovCisJeyAweDAwMDMsIDB4MDAwMywgMCB9LCAvKiBSMTIgIC0gUG93ZXIgTWFuYWdlbWVudCAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTMgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAwIH0sIC8qIFIxNCAgLSBQb3dlciBNYW5hZ2VtZW50IDIgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAwIH0sIC8qIFIxNSAgLSBQb3dlciBNYW5hZ2VtZW50IDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3ICovCisJeyAweDAwMEYsIDB4MDAwRiwgMCB9LCAvKiBSMTggIC0gUG93ZXIgTWFuYWdlbWVudCA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTkgKi8KKwl7IDB4NzAwMSwgMHg3MDAxLCAwIH0sIC8qIFIyMCAgLSBDbG9jayBSYXRlcyAwICovCisJeyAweDNDMDcsIDB4M0MwNywgMCB9LCAvKiBSMjEgIC0gQ2xvY2sgUmF0ZXMgMSAqLworCXsgMHhEMDBGLCAweEQwMEYsIDAgfSwgLyogUjIyICAtIENsb2NrIFJhdGVzIDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMyAqLworCXsgMHgxRkZGLCAweDFGRkYsIDAgfSwgLyogUjI0ICAtIEF1ZGlvIEludGVyZmFjZSAwICovCisJeyAweDNEREYsIDB4M0RERiwgMCB9LCAvKiBSMjUgIC0gQXVkaW8gSW50ZXJmYWNlIDEgKi8KKwl7IDB4MEYxRiwgMHgwRjFGLCAwIH0sIC8qIFIyNiAgLSBBdWRpbyBJbnRlcmZhY2UgMiAqLworCXsgMHgwRkZGLCAweDBGRkYsIDAgfSwgLyogUjI3ICAtIEF1ZGlvIEludGVyZmFjZSAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyOSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDAgfSwgLyogUjMwICAtIERBQyBEaWdpdGFsIFZvbHVtZSBMZWZ0ICovCisJeyAweDAwRkYsIDB4MDFGRiwgMCB9LCAvKiBSMzEgIC0gREFDIERpZ2l0YWwgVm9sdW1lIFJpZ2h0ICovCisJeyAweDBGRkYsIDB4MEZGRiwgMCB9LCAvKiBSMzIgIC0gREFDIERpZ2l0YWwgMCAqLworCXsgMHgxRTRFLCAweDFFNEUsIDAgfSwgLyogUjMzICAtIERBQyBEaWdpdGFsIDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjM1ICovCisJeyAweDAwRkYsIDB4MDFGRiwgMCB9LCAvKiBSMzYgIC0gQURDIERpZ2l0YWwgVm9sdW1lIExlZnQgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAwIH0sIC8qIFIzNyAgLSBBREMgRGlnaXRhbCBWb2x1bWUgUmlnaHQgKi8KKwl7IDB4MDA3MywgMHgwMDczLCAwIH0sIC8qIFIzOCAgLSBBREMgRGlnaXRhbCAwICovCisJeyAweDE4MDAsIDB4MTgwMCwgMCB9LCAvKiBSMzkgIC0gRGlnaXRhbCBNaWNyb3Bob25lIDAgKi8KKwl7IDB4REZFRiwgMHhERkVGLCAwIH0sIC8qIFI0MCAgLSBEUkMgMCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjQxICAtIERSQyAxICovCisJeyAweDAwM0YsIDB4MDAzRiwgMCB9LCAvKiBSNDIgIC0gRFJDIDIgKi8KKwl7IDB4MDdGRiwgMHgwN0ZGLCAwIH0sIC8qIFI0MyAgLSBEUkMgMyAqLworCXsgMHgwMDlGLCAweDAwOUYsIDAgfSwgLyogUjQ0ICAtIEFuYWxvZ3VlIExlZnQgSW5wdXQgMCAqLworCXsgMHgwMDlGLCAweDAwOUYsIDAgfSwgLyogUjQ1ICAtIEFuYWxvZ3VlIFJpZ2h0IElucHV0IDAgKi8KKwl7IDB4MDA3RiwgMHgwMDdGLCAwIH0sIC8qIFI0NiAgLSBBbmFsb2d1ZSBMZWZ0IElucHV0IDEgKi8KKwl7IDB4MDA3RiwgMHgwMDdGLCAwIH0sIC8qIFI0NyAgLSBBbmFsb2d1ZSBSaWdodCBJbnB1dCAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjU2ICovCisJeyAweDAxN0YsIDB4MDFGRiwgMCB9LCAvKiBSNTcgIC0gQW5hbG9ndWUgT1VUMSBMZWZ0ICovCisJeyAweDAxN0YsIDB4MDFGRiwgMCB9LCAvKiBSNTggIC0gQW5hbG9ndWUgT1VUMSBSaWdodCAqLworCXsgMHgwMTdGLCAweDAxRkYsIDAgfSwgLyogUjU5ICAtIEFuYWxvZ3VlIE9VVDIgTGVmdCAqLworCXsgMHgwMTdGLCAweDAxRkYsIDAgfSwgLyogUjYwICAtIEFuYWxvZ3VlIE9VVDIgUmlnaHQgKi8KKwl7IDB4MDAwRiwgMHgwMDBGLCAwIH0sIC8qIFI2MSAgLSBBbmFsb2d1ZSBPVVQxMiBaQyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNjYgKi8KKwl7IDB4MDAwRiwgMHgwMDBGLCAwIH0sIC8qIFI2NyAgLSBEQyBTZXJ2byAwICovCisJeyAweEZGRkYsIDB4RkZGRiwgMSB9LCAvKiBSNjggIC0gREMgU2Vydm8gMSAqLworCXsgMHgwRjBGLCAweDBGMEYsIDAgfSwgLyogUjY5ICAtIERDIFNlcnZvIDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI3MCAqLworCXsgMHgwMDdGLCAweDAwN0YsIDAgfSwgLyogUjcxICAtIERDIFNlcnZvIDQgKi8KKwl7IDB4MDA3RiwgMHgwMDdGLCAwIH0sIC8qIFI3MiAgLSBEQyBTZXJ2byA1ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMSB9LCAvKiBSNzMgIC0gREMgU2Vydm8gNiAqLworCXsgMHgwMEZGLCAweDAwRkYsIDEgfSwgLyogUjc0ICAtIERDIFNlcnZvIDcgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAxIH0sIC8qIFI3NSAgLSBEQyBTZXJ2byA4ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMSB9LCAvKiBSNzYgIC0gREMgU2Vydm8gOSAqLworCXsgMHgwRkZGLCAweDAwMDAsIDEgfSwgLyogUjc3ICAtIERDIFNlcnZvIFJlYWRiYWNrIDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODkgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAwIH0sIC8qIFI5MCAgLSBBbmFsb2d1ZSBIUCAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjkzICovCisJeyAweDAwRkYsIDB4MDBGRiwgMCB9LCAvKiBSOTQgIC0gQW5hbG9ndWUgTGluZW91dCAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjk3ICovCisJeyAweDAwMDEsIDB4MDAwMSwgMCB9LCAvKiBSOTggIC0gQ2hhcmdlIFB1bXAgMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTAzICovCisJeyAweDAwMDEsIDB4MDAwMSwgMCB9LCAvKiBSMTA0IC0gQ2xhc3MgVyAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTA3ICovCisJeyAweDAxMUYsIDB4MDExRiwgMCB9LCAvKiBSMTA4IC0gV3JpdGUgU2VxdWVuY2VyIDAgKi8KKwl7IDB4N0ZGRiwgMHg3RkZGLCAwIH0sIC8qIFIxMDkgLSBXcml0ZSBTZXF1ZW5jZXIgMSAqLworCXsgMHg0RkZGLCAweDRGRkYsIDAgfSwgLyogUjExMCAtIFdyaXRlIFNlcXVlbmNlciAyICovCisJeyAweDAwM0YsIDB4MDMzRiwgMCB9LCAvKiBSMTExIC0gV3JpdGUgU2VxdWVuY2VyIDMgKi8KKwl7IDB4MDNGMSwgMHgwMDAwLCAwIH0sIC8qIFIxMTIgLSBXcml0ZSBTZXF1ZW5jZXIgNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjExMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjExNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjExNSAqLworCXsgMHgwMDA3LCAweDAwMDcsIDAgfSwgLyogUjExNiAtIEZMTCBDb250cm9sIDEgKi8KKwl7IDB4M0Y3NywgMHgzRjc3LCAwIH0sIC8qIFIxMTcgLSBGTEwgQ29udHJvbCAyICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTE4IC0gRkxMIENvbnRyb2wgMyAqLworCXsgMHg3RkVGLCAweDdGRUYsIDAgfSwgLyogUjExOSAtIEZMTCBDb250cm9sIDQgKi8KKwl7IDB4MDAxQiwgMHgwMDFCLCAwIH0sIC8qIFIxMjAgLSBGTEwgQ29udHJvbCA1ICovCisJeyAweDAwM0YsIDB4MDAzRiwgMCB9LCAvKiBSMTIxIC0gR1BJTyBDb250cm9sIDEgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAwIH0sIC8qIFIxMjIgLSBHUElPIENvbnRyb2wgMiAqLworCXsgMHgwMDNGLCAweDAwM0YsIDAgfSwgLyogUjEyMyAtIEdQSU8gQ29udHJvbCAzICovCisJeyAweDAzOEYsIDB4MDM4RiwgMCB9LCAvKiBSMTI0IC0gR1BJTyBDb250cm9sIDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMjUgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAwIH0sIC8qIFIxMjYgLSBEaWdpdGFsIFB1bGxzICovCisJeyAweDA3RkYsIDB4MDNGRiwgMSB9LCAvKiBSMTI3IC0gSW50ZXJydXB0IFN0YXR1cyAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDAgfSwgLyogUjEyOCAtIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDAgfSwgLyogUjEyOSAtIEludGVycnVwdCBQb2xhcml0eSAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDAgfSwgLyogUjEzMCAtIEludGVycnVwdCBEZWJvdW5jZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEzMyAqLworCXsgMHgwMDAxLCAweDAwMDEsIDAgfSwgLyogUjEzNCAtIEVRMSAqLworCXsgMHgwMDFGLCAweDAwMUYsIDAgfSwgLyogUjEzNSAtIEVRMiAqLworCXsgMHgwMDFGLCAweDAwMUYsIDAgfSwgLyogUjEzNiAtIEVRMyAqLworCXsgMHgwMDFGLCAweDAwMUYsIDAgfSwgLyogUjEzNyAtIEVRNCAqLworCXsgMHgwMDFGLCAweDAwMUYsIDAgfSwgLyogUjEzOCAtIEVRNSAqLworCXsgMHgwMDFGLCAweDAwMUYsIDAgfSwgLyogUjEzOSAtIEVRNiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0MCAtIEVRNyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0MSAtIEVROCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0MiAtIEVROSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0MyAtIEVRMTAgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDQgLSBFUTExICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQ1IC0gRVExMiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0NiAtIEVRMTMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDcgLSBFUTE0ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQ4IC0gRVExNSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0OSAtIEVRMTYgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTAgLSBFUTE3ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTUxd204NTIzX2RhaSAtIEVRMTggKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTIgLSBFUTE5ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTUzIC0gRVEyMCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1NCAtIEVRMjEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTUgLSBFUTIyICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTU2IC0gRVEyMyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1NyAtIEVRMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNjAgKi8KKwl7IDB4MDAwMiwgMHgwMDAyLCAwIH0sIC8qIFIxNjEgLSBDb250cm9sIEludGVyZmFjZSBUZXN0IDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDMgKi8KKwl7IDB4MDA3MCwgMHgwMDcwLCAwIH0sIC8qIFIyMDQgLSBBbmFsb2d1ZSBPdXRwdXQgQmlhcyAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMjQ2ICovCisJeyAweDAwMDEsIDB4MDAwMSwgMCB9LCAvKiBSMjQ3IC0gRkxMIE5DTyBUZXN0IDAgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAwIH0sIC8qIFIyNDggLSBGTEwgTkNPIFRlc3QgMSAqLworfTsKKworc3RhdGljIGludCB3bTg5MDRfdm9sYXRpbGVfcmVnaXN0ZXIodW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4gd204OTA0X2FjY2Vzc1tyZWddLnZvbDsKK30KKworc3RhdGljIGludCB3bTg5MDRfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDRfU1dfUkVTRVRfQU5EX0lELCAwKTsKK30KKworc3RhdGljIGludCB3bTg5MDRfY29uZmlndXJlX2Nsb2NraW5nKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGNsb2NrMCwgY2xvY2syLCByYXRlOworCisJLyogR2F0ZSB0aGUgY2xvY2sgd2hpbGUgd2UncmUgdXBkYXRpbmcgdG8gYXZvaWQgbWlzY2xvY2tpbmcgKi8KKwljbG9jazIgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18yKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwKKwkJCSAgICBXTTg5MDRfU1lTQ0xLX1NSQywgMCk7CisKKwkvKiBUaGlzIHNob3VsZCBiZSBkb25lIG9uIGluaXQoKSBmb3IgYnlwYXNzIHBhdGhzICovCisJc3dpdGNoICh3bTg5MDQtPnN5c2Nsa19zcmMpIHsKKwljYXNlIFdNODkwNF9DTEtfTUNMSzoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVXNpbmcgJWRIeiBNQ0xLXG4iLCB3bTg5MDQtPm1jbGtfcmF0ZSk7CisKKwkJY2xvY2syICY9IH5XTTg5MDRfU1lTQ0xLX1NSQzsKKwkJcmF0ZSA9IHdtODkwNC0+bWNsa19yYXRlOworCisJCS8qIEVuc3VyZSB0aGUgRkxMIGlzIHN0b3BwZWQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkJICAgIFdNODkwNF9GTExfT1NDX0VOQSB8IFdNODkwNF9GTExfRU5BLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODkwNF9DTEtfRkxMOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyAlZEh6IEZMTCBjbG9ja1xuIiwKKwkJCXdtODkwNC0+ZmxsX2ZvdXQpOworCisJCWNsb2NrMiB8PSBXTTg5MDRfU1lTQ0xLX1NSQzsKKwkJcmF0ZSA9IHdtODkwNC0+ZmxsX2ZvdXQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiU3lzdGVtIGNsb2NrIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU1lTQ0xLIHNob3VsZG4ndCBiZSBvdmVyIDEzLjVNSHogKi8KKwlpZiAocmF0ZSA+IDEzNTAwMDAwKSB7CisJCWNsb2NrMCA9IFdNODkwNF9NQ0xLX0RJVjsKKwkJd204OTA0LT5zeXNjbGtfcmF0ZSA9IHJhdGUgLyAyOworCX0gZWxzZSB7CisJCWNsb2NrMCA9IDA7CisJCXdtODkwNC0+c3lzY2xrX3JhdGUgPSByYXRlOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18wLCBXTTg5MDRfTUNMS19ESVYsCisJCQkgICAgY2xvY2swKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18yLAorCQkJICAgIFdNODkwNF9DTEtfU1lTX0VOQSB8IFdNODkwNF9TWVNDTEtfU1JDLCBjbG9jazIpOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ0xLX1NZUyBpcyAlZEh6XG4iLCB3bTg5MDQtPnN5c2Nsa19yYXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg5MDRfc2V0X2RyYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhID0gd204OTA0LT5wZGF0YTsKKwlpbnQgc2F2ZSwgaTsKKworCS8qIFNhdmUgYW55IGVuYWJsZXM7IHRoZSBjb25maWd1cmF0aW9uIHNob3VsZCBjbGVhciB0aGVtLiAqLworCXNhdmUgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9EUkNfMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgV004OTA0X0RSQ19SRUdTOyBpKyspCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EUkNfMCArIGksIDB4ZmZmZiwKKwkJCQkgICAgcGRhdGEtPmRyY19jZmdzW3dtODkwNC0+ZHJjX2NmZ10ucmVnc1tpXSk7CisKKwkvKiBSZWVuYWJsZSB0aGUgRFJDICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0RSQ18wLAorCQkJICAgIFdNODkwNF9EUkNfRU5BIHwgV004OTA0X0RSQ19EQUNfUEFUSCwgc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3B1dF9kcmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwkKKwlzdHJ1Y3Qgd204OTA0X3BkYXRhICpwZGF0YSA9IHdtODkwNC0+cGRhdGE7CisJaW50IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAodmFsdWUgPj0gcGRhdGEtPm51bV9kcmNfY2ZncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5MDQtPmRyY19jZmcgPSB2YWx1ZTsKKworCXdtODkwNF9zZXRfZHJjKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODkwNF9nZXRfZHJjX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTg5MDQtPmRyY19jZmc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd204OTA0X3NldF9yZXR1bmVfbW9iaWxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtODkwNF9wZGF0YSAqcGRhdGEgPSB3bTg5MDQtPnBkYXRhOworCWludCBiZXN0LCBiZXN0X3ZhbCwgc2F2ZSwgaSwgY2ZnOworCisJaWYgKCFwZGF0YSB8fCAhd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cykKKwkJcmV0dXJuOworCisJLyogRmluZCB0aGUgdmVyc2lvbiBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbmZpZ3VyYXRpb24KKwkgKiB3aXRoIHRoZSBuZWFyZXN0IHNhbXBsZSByYXRlLiAqLworCWNmZyA9IHdtODkwNC0+cmV0dW5lX21vYmlsZV9jZmc7CisJYmVzdCA9IDA7CisJYmVzdF92YWwgPSBJTlRfTUFYOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZnczsgaSsrKSB7CisJCWlmIChzdHJjbXAocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5uYW1lLAorCQkJICAgd204OTA0LT5yZXR1bmVfbW9iaWxlX3RleHRzW2NmZ10pID09IDAgJiYKKwkJICAgIGFicyhwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLnJhdGUKKwkJCS0gd204OTA0LT5mcykgPCBiZXN0X3ZhbCkgeworCQkJYmVzdCA9IGk7CisJCQliZXN0X3ZhbCA9IGFicyhwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLnJhdGUKKwkJCQkgICAgICAgLSB3bTg5MDQtPmZzKTsKKwkJfQorCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlJlVHVuZSBNb2JpbGUgJXMvJWRIeiBmb3IgJWRIeiBzYW1wbGUgcmF0ZVxuIiwKKwkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5uYW1lLAorCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLnJhdGUsCisJCXdtODkwNC0+ZnMpOworCisJLyogVGhlIEVRIHdpbGwgYmUgZGlzYWJsZWQgd2hpbGUgcmVjb25maWd1cmluZyBpdCwgcmVtZW1iZXIgdGhlCisJICogY3VycmVudCBjb25maWd1cmF0aW9uLiAKKwkgKi8KKwlzYXZlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDRfRVExKTsKKworCWZvciAoaSA9IDA7IGkgPCBXTTg5MDRfRVFfUkVHUzsgaSsrKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRVExICsgaSwgMHhmZmZmLAorCQkJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ucmVnc1tpXSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRVExLCBXTTg5MDRfRVFfRU5BLCBzYXZlKTsKK30KKworc3RhdGljIGludCB3bTg5MDRfcHV0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CQorCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhID0gd204OTA0LT5wZGF0YTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5MDQtPnJldHVuZV9tb2JpbGVfY2ZnID0gdmFsdWU7CisKKwl3bTg5MDRfc2V0X3JldHVuZV9tb2JpbGUoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X2dldF9yZXR1bmVfbW9iaWxlX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODkwNC0+cmV0dW5lX21vYmlsZV9jZmc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWVtcGhfc2V0dGluZ3NbXSA9IHsgMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCB9OworCitzdGF0aWMgaW50IHdtODkwNF9zZXRfZGVlbXBoKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHZhbCwgaSwgYmVzdDsKKworCS8qIElmIHdlJ3JlIHVzaW5nIGRlZW1waGFzaXMgc2VsZWN0IHRoZSBuZWFyZXN0IGF2YWlsYWJsZSBzYW1wbGUgCisJICogcmF0ZS4KKwkgKi8KKwlpZiAod204OTA0LT5kZWVtcGgpIHsKKwkJYmVzdCA9IDE7CisJCWZvciAoaSA9IDI7IGkgPCBBUlJBWV9TSVpFKGRlZW1waF9zZXR0aW5ncyk7IGkrKykgeworCQkJaWYgKGFicyhkZWVtcGhfc2V0dGluZ3NbaV0gLSB3bTg5MDQtPmZzKSA8CisJCQkgICAgYWJzKGRlZW1waF9zZXR0aW5nc1tiZXN0XSAtIHdtODkwNC0+ZnMpKQorCQkJCWJlc3QgPSBpOworCQl9CisKKwkJdmFsID0gYmVzdCA8PCBXTTg5MDRfREVFTVBIX1NISUZUOworCX0gZWxzZSB7CisJCXZhbCA9IDA7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2V0IGRlZW1waGFzaXMgJWRcbiIsIHZhbCk7CisKKwlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0RBQ19ESUdJVEFMXzEsCisJCQkJICAgV004OTA0X0RFRU1QSF9NQVNLLCB2YWwpOworfQorCitzdGF0aWMgaW50IHdtODkwNF9nZXRfZGVlbXBoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHdtODkwNC0+ZGVlbXBoOworfQorCitzdGF0aWMgaW50IHdtODkwNF9wdXRfZGVlbXBoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgZGVlbXBoID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCWlmIChkZWVtcGggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtODkwNC0+ZGVlbXBoID0gZGVlbXBoOworCisJcmV0dXJuIHdtODkwNF9zZXRfZGVlbXBoKGNvZGVjKTsKK30KKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhY19ib29zdF90bHYsIDAsIDYwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGlnaXRhbF90bHYsIC03MjAwLCA3NSwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0X3RsdiwgLTU3MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc2lkZXRvbmVfdGx2LCAtMzYwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShlcV90bHYsIC0xMjAwLCAxMDAsIDApOworCitzdGF0aWMgY29uc3QgY2hhciAqaW5wdXRfbW9kZV90ZXh0W10gPSB7CisJIlNpbmdsZS1FbmRlZCIsICJEaWZmZXJlbnRpYWwgTGluZSIsICJEaWZmZXJlbnRpYWwgTWljIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBsaW5fbW9kZSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzEsIDAsIDMsIGlucHV0X21vZGVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gcmluX21vZGUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMSwgMCwgMywgaW5wdXRfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmhwZl9tb2RlX3RleHRbXSA9IHsKKwkiSGktZmkiLCAiVm9pY2UgMSIsICJWb2ljZSAyIiwgIlZvaWNlIDMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGhwZl9tb2RlID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FEQ19ESUdJVEFMXzAsIDUsIDQsIGhwZl9tb2RlX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTA0X2FkY19zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19ET1VCTEVfUl9UTFYoIkRpZ2l0YWwgQ2FwdHVyZSBWb2x1bWUiLCBXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX0xFRlQsCisJCSBXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX1JJR0hULCAxLCAxMTksIDAsIGRpZ2l0YWxfdGx2KSwKKworU09DX0VOVU0oIkxlZnQgQ2FwdXR1cmUgTW9kZSIsIGxpbl9tb2RlKSwKK1NPQ19FTlVNKCJSaWdodCBDYXB0dXJlIE1vZGUiLCByaW5fbW9kZSksCisKKy8qIE5vIFRMViBzaW5jZSBpdCBkZXBlbmRzIG9uIG1vZGUgKi8KK1NPQ19ET1VCTEVfUigiQ2FwdHVyZSBWb2x1bWUiLCBXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8wLAorCSAgICAgV004OTA0X0FOQUxPR1VFX1JJR0hUX0lOUFVUXzAsIDAsIDMxLCAwKSwKK1NPQ19ET1VCTEVfUigiQ2FwdHVyZSBTd2l0Y2giLCBXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8wLAorCSAgICAgV004OTA0X0FOQUxPR1VFX1JJR0hUX0lOUFVUXzAsIDcsIDEsIDApLAorCitTT0NfU0lOR0xFKCJIaWdoIFBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODkwNF9BRENfRElHSVRBTF8wLCA0LCAxLCAwKSwKK1NPQ19FTlVNKCJIaWdoIFBhc3MgRmlsdGVyIE1vZGUiLCBocGZfbW9kZSksCisKK1NPQ19TSU5HTEUoIkFEQyAxMjh4IE9TUiBTd2l0Y2giLCBXTTg5MDRfQU5BTE9HVUVfQURDXzAsIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRyY19wYXRoX3RleHRbXSA9IHsKKwkiQURDIiwgIkRBQyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHJjX3BhdGggPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfRFJDXzAsIDE0LCAyLCBkcmNfcGF0aF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkwNF9kYWNfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfU0lOR0xFX1RMVigiRGlnaXRhbCBQbGF5YmFjayBCb29zdCBWb2x1bWUiLCAKKwkgICAgICAgV004OTA0X0FVRElPX0lOVEVSRkFDRV8wLCA5LCAzLCAwLCBkYWNfYm9vc3RfdGx2KSwKK1NPQ19ET1VCTEVfUl9UTFYoIkRpZ2l0YWwgUGxheWJhY2sgVm9sdW1lIiwgV004OTA0X0RBQ19ESUdJVEFMX1ZPTFVNRV9MRUZULAorCQkgV004OTA0X0RBQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVCwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKKworU09DX0RPVUJMRV9SX1RMVigiSGVhZHBob25lIFZvbHVtZSIsIFdNODkwNF9BTkFMT0dVRV9PVVQxX0xFRlQsCisJCSBXTTg5MDRfQU5BTE9HVUVfT1VUMV9SSUdIVCwgMCwgNjMsIDAsIG91dF90bHYpLAorU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgU3dpdGNoIiwgV004OTA0X0FOQUxPR1VFX09VVDFfTEVGVCwKKwkgICAgIFdNODkwNF9BTkFMT0dVRV9PVVQxX1JJR0hULCA4LCAxLCAxKSwKK1NPQ19ET1VCTEVfUigiSGVhZHBob25lIFpDIFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9PVVQxX0xFRlQsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfT1VUMV9SSUdIVCwgNiwgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkxpbmUgT3V0cHV0IFZvbHVtZSIsIFdNODkwNF9BTkFMT0dVRV9PVVQyX0xFRlQsCisJCSBXTTg5MDRfQU5BTE9HVUVfT1VUMl9SSUdIVCwgMCwgNjMsIDAsIG91dF90bHYpLAorU09DX0RPVUJMRV9SKCJMaW5lIE91dHB1dCBTd2l0Y2giLCBXTTg5MDRfQU5BTE9HVUVfT1VUMl9MRUZULAorCSAgICAgV004OTA0X0FOQUxPR1VFX09VVDJfUklHSFQsIDgsIDEsIDEpLAorU09DX0RPVUJMRV9SKCJMaW5lIE91dHB1dCBaQyBTd2l0Y2giLCBXTTg5MDRfQU5BTE9HVUVfT1VUMl9MRUZULAorCSAgICAgV004OTA0X0FOQUxPR1VFX09VVDJfUklHSFQsIDYsIDEsIDApLAorCitTT0NfU0lOR0xFKCJFUSBTd2l0Y2giLCBXTTg5MDRfRVExLCAwLCAxLCAwKSwKK1NPQ19TSU5HTEUoIkRSQyBTd2l0Y2giLCBXTTg5MDRfRFJDXzAsIDE1LCAxLCAwKSwKK1NPQ19FTlVNKCJEUkMgUGF0aCIsIGRyY19wYXRoKSwKK1NPQ19TSU5HTEUoIkRBQyBPU1J4MiBTd2l0Y2giLCBXTTg5MDRfREFDX0RJR0lUQUxfMSwgNiwgMSwgMCksCitTT0NfU0lOR0xFX0JPT0xfRVhUKCJEQUMgRGVlbXBoYXNpcyBTd2l0Y2giLCAwLAorCQkgICAgd204OTA0X2dldF9kZWVtcGgsIHdtODkwNF9wdXRfZGVlbXBoKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5MDRfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfRE9VQkxFX1RMVigiRGlnaXRhbCBTaWRldG9uZSBWb2x1bWUiLCBXTTg5MDRfREFDX0RJR0lUQUxfMCwgNCwgOCwgMTUsIDAsCisJICAgICAgIHNpZGV0b25lX3RsdiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTA0X2VxX2NvbnRyb2xzW10gPSB7CitTT0NfU0lOR0xFX1RMVigiRVExIFZvbHVtZSIsIFdNODkwNF9FUTIsIDAsIDI0LCAwLCBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkVRMiBWb2x1bWUiLCBXTTg5MDRfRVEzLCAwLCAyNCwgMCwgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJFUTMgVm9sdW1lIiwgV004OTA0X0VRNCwgMCwgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVE0IFZvbHVtZSIsIFdNODkwNF9FUTUsIDAsIDI0LCAwLCBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkVRNSBWb2x1bWUiLCBXTTg5MDRfRVE2LCAwLCAyNCwgMCwgZXFfdGx2KSwKK307CisKK3N0YXRpYyBpbnQgY3BfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCUJVR19PTihldmVudCAhPSBTTkRfU09DX0RBUE1fUE9TVF9QTVUpOworCisJLyogTWF4aW11bSBzdGFydHVwIHRpbWUgKi8KKwl1ZGVsYXkoNTAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN5c2Nsa19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQkvKiBJZiB3ZSdyZSB1c2luZyB0aGUgRkxMIHRoZW4gd2Ugb25seSBzdGFydCBpdCB3aGVuCisJCSAqIHJlcXVpcmVkOyB3ZSBhc3N1bWUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbgorCQkgKiBkb25lIHByZXZpb3VzbHkgYW5kIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGtpY2sgaXQKKwkJICogb2ZmLgorCQkgKi8KKwkJc3dpdGNoICh3bTg5MDQtPnN5c2Nsa19zcmMpIHsKKwkJY2FzZSBXTTg5MDRfQ0xLX0ZMTDoKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJCQkgICAgV004OTA0X0ZMTF9PU0NfRU5BLAorCQkJCQkgICAgV004OTA0X0ZMTF9PU0NfRU5BKTsKKworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkJCSAgICBXTTg5MDRfRkxMX0VOQSwKKwkJCQkJICAgIFdNODkwNF9GTExfRU5BKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCQkgICAgV004OTA0X0ZMTF9PU0NfRU5BIHwgV004OTA0X0ZMTF9FTkEsIDApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdXRfcGdhX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZWcsIHZhbDsKKwlpbnQgZGNzX21hc2s7CisJaW50IGRjc19sLCBkY3NfcjsKKwlpbnQgZGNzX2xfcmVnLCBkY3Nfcl9yZWc7CisJaW50IHRpbWVvdXQ7CisJaW50IHB3cl9yZWc7CisKKwkvKiBUaGlzIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gSFAgYW5kIExJTkVPVVQ7IHdlIGRvIGFsbCBvdXIKKwkgKiBwb3dlciBtYW5hZ2VtZW50IGluIHN0ZXJlbyBwYWlycyB0byBhdm9pZCBsYXRlbmN5IGlzc3VlcyBzbworCSAqIHdlIHJldXNlIHNoaWZ0IHRvIGlkZW50aWZ5IHdoaWNoIHJhdGhlciB0aGFuIHN0cmNtcCgpIHRoZQorCSAqIG5hbWUuICovCisJcmVnID0gdy0+c2hpZnQ7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgV004OTA0X0FOQUxPR1VFX0hQXzA6CisJCXB3cl9yZWcgPSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8yOworCQlkY3NfbWFzayA9IFdNODkwNF9EQ1NfRU5BX0NIQU5fMCB8IFdNODkwNF9EQ1NfRU5BX0NIQU5fMTsKKwkJZGNzX3JfcmVnID0gV004OTA0X0RDX1NFUlZPXzg7CisJCWRjc19sX3JlZyA9IFdNODkwNF9EQ19TRVJWT185OworCQlkY3NfbCA9IDA7CisJCWRjc19yID0gMTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5MDRfQU5BTE9HVUVfTElORU9VVF8wOgorCQlwd3JfcmVnID0gV004OTA0X1BPV0VSX01BTkFHRU1FTlRfMzsKKwkJZGNzX21hc2sgPSBXTTg5MDRfRENTX0VOQV9DSEFOXzIgfCBXTTg5MDRfRENTX0VOQV9DSEFOXzM7CisJCWRjc19yX3JlZyA9IFdNODkwNF9EQ19TRVJWT182OworCQlkY3NfbF9yZWcgPSBXTTg5MDRfRENfU0VSVk9fNzsKKwkJZGNzX2wgPSAyOworCQlkY3NfciA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJLyogUG93ZXIgb24gdGhlIFBHQXMgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcHdyX3JlZywKKwkJCQkgICAgV004OTA0X0hQTF9QR0FfRU5BIHwgV004OTA0X0hQUl9QR0FfRU5BLAorCQkJCSAgICBXTTg5MDRfSFBMX1BHQV9FTkEgfCBXTTg5MDRfSFBSX1BHQV9FTkEpOworCisJCS8qIFBvd2VyIG9uIHRoZSBhbXBsaWZpZXIgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQSB8IFdNODkwNF9IUFJfRU5BLAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQSB8IFdNODkwNF9IUFJfRU5BKTsKKworCisJCS8qIEVuYWJsZSB0aGUgZmlyc3Qgc3RhZ2UgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQV9ETFkgfCBXTTg5MDRfSFBSX0VOQV9ETFksCisJCQkJICAgIFdNODkwNF9IUExfRU5BX0RMWSB8IFdNODkwNF9IUFJfRU5BX0RMWSk7CisKKwkJLyogUG93ZXIgdXAgdGhlIERDIHNlcnZvICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EQ19TRVJWT18wLAorCQkJCSAgICBkY3NfbWFzaywgZGNzX21hc2spOworCisJCS8qIEVpdGhlciBjYWxpYnJhdGUgdGhlIERDIHNlcnZvIG9yIHJlc3RvcmUgY2FjaGVkIHN0YXRlCisJCSAqIGlmIHdlIGhhdmUgdGhhdC4KKwkJICovCisJCWlmICh3bTg5MDQtPmRjc19zdGF0ZVtkY3NfbF0gfHwgd204OTA0LT5kY3Nfc3RhdGVbZGNzX3JdKSB7CisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJSZXN0b3JpbmcgREMgc2Vydm8gc3RhdGVcbiIpOworCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBkY3NfbF9yZWcsCisJCQkJICAgICAgd204OTA0LT5kY3Nfc3RhdGVbZGNzX2xdKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGRjc19yX3JlZywKKwkJCQkgICAgICB3bTg5MDQtPmRjc19zdGF0ZVtkY3Nfcl0pOworCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDRfRENfU0VSVk9fMSwgZGNzX21hc2spOworCisJCQl0aW1lb3V0ID0gMjA7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDYWxpYnJhdGluZyBEQyBzZXJ2b1xuIik7CisKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwNF9EQ19TRVJWT18xLAorCQkJCWRjc19tYXNrIDw8IFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzBfU0hJRlQpOworCisJCQl0aW1lb3V0ID0gNTAwOworCQl9CisKKwkJLyogV2FpdCBmb3IgREMgc2Vydm8gdG8gY29tcGxldGUgKi8KKwkJZGNzX21hc2sgPDw9IFdNODkwNF9EQ1NfQ0FMX0NPTVBMRVRFX1NISUZUOworCQlkbyB7CisJCQl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9EQ19TRVJWT19SRUFEQkFDS18wKTsKKwkJCWlmICgodmFsICYgZGNzX21hc2spID09IGRjc19tYXNrKQorCQkJCWJyZWFrOworCisJCQltc2xlZXAoMSk7CisJCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwkJaWYgKCh2YWwgJiBkY3NfbWFzaykgIT0gZGNzX21hc2spCisJCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiREMgc2Vydm8gdGltZWQgb3V0XG4iKTsKKwkJZWxzZQorCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiREMgc2Vydm8gcmVhZHlcbiIpOworCisJCS8qIEVuYWJsZSB0aGUgb3V0cHV0IHN0YWdlICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywKKwkJCQkgICAgV004OTA0X0hQTF9FTkFfT1VUUCB8IFdNODkwNF9IUFJfRU5BX09VVFAsCisJCQkJICAgIFdNODkwNF9IUExfRU5BX09VVFAgfCBXTTg5MDRfSFBSX0VOQV9PVVRQKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKKwkJLyogVW5zaG9ydCB0aGUgb3V0cHV0IGl0c2VsZiAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsCisJCQkJICAgIFdNODkwNF9IUExfUk1WX1NIT1JUIHwKKwkJCQkgICAgV004OTA0X0hQUl9STVZfU0hPUlQsCisJCQkJICAgIFdNODkwNF9IUExfUk1WX1NIT1JUIHwKKwkJCQkgICAgV004OTA0X0hQUl9STVZfU0hPUlQpOworCisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKKwkJLyogU2hvcnQgdGhlIG91dHB1dCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsCisJCQkJICAgIFdNODkwNF9IUExfUk1WX1NIT1JUIHwKKwkJCQkgICAgV004OTA0X0hQUl9STVZfU0hPUlQsIDApOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQkvKiBDYWNoZSB0aGUgREMgc2Vydm8gY29uZmlndXJhdGlvbjsgdGhpcyB3aWxsIGJlCisJCSAqIGludmFsaWRhdGVkIGlmIHdlIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbi4gKi8KKwkJd204OTA0LT5kY3Nfc3RhdGVbZGNzX2xdID0gc25kX3NvY19yZWFkKGNvZGVjLCBkY3NfbF9yZWcpOworCQl3bTg5MDQtPmRjc19zdGF0ZVtkY3Nfcl0gPSBzbmRfc29jX3JlYWQoY29kZWMsIGRjc19yX3JlZyk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0RDX1NFUlZPXzAsCisJCQkJICAgIGRjc19tYXNrLCAwKTsKKworCQkvKiBEaXNhYmxlIHRoZSBhbXBsaWZpZXIgaW5wdXQgYW5kIG91dHB1dCBzdGFnZXMgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQSB8IFdNODkwNF9IUFJfRU5BIHwKKwkJCQkgICAgV004OTA0X0hQTF9FTkFfRExZIHwgV004OTA0X0hQUl9FTkFfRExZIHwKKwkJCQkgICAgV004OTA0X0hQTF9FTkFfT1VUUCB8IFdNODkwNF9IUFJfRU5BX09VVFAsCisJCQkJICAgIDApOworCisJCS8qIFBHQXMgdG9vICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHB3cl9yZWcsCisJCQkJICAgIFdNODkwNF9IUExfUEdBX0VOQSB8IFdNODkwNF9IUFJfUEdBX0VOQSwKKwkJCQkgICAgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbGluX3RleHRbXSA9IHsKKwkiSU4xTCIsICJJTjJMIiwgIklOM0wiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxpbl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX0xFRlRfSU5QVVRfMSwgMiwgMywgbGluX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGluX211eCA9CisJU09DX0RBUE1fRU5VTSgiTGVmdCBDYXB0dXJlIE11eCIsIGxpbl9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBsaW5faW52X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8xLCA0LCAzLCBsaW5fdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5faW52X211eCA9CisJU09DX0RBUE1fRU5VTSgiTGVmdCBDYXB0dXJlIEludmV0aW5nIE11eCIsIGxpbl9pbnZfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpyaW5fdGV4dFtdID0geworCSJJTjFSIiwgIklOMlIiLCAiSU4zUiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gcmluX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMSwgMiwgMywgcmluX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcmluX211eCA9CisJU09DX0RBUE1fRU5VTSgiUmlnaHQgQ2FwdHVyZSBNdXgiLCByaW5fZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gcmluX2ludl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX1JJR0hUX0lOUFVUXzEsIDQsIDMsIHJpbl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJpbl9pbnZfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJSaWdodCBDYXB0dXJlIEludmV0aW5nIE11eCIsIHJpbl9pbnZfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphaWZfdGV4dFtdID0geworCSJMZWZ0IiwgIlJpZ2h0IgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWZvdXRsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAsIDcsIDIsIGFpZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZm91dGxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUZPVVRMIE11eCIsIGFpZm91dGxfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmb3V0cl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FVRElPX0lOVEVSRkFDRV8wLCA2LCAyLCBhaWZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWZvdXRyX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGT1VUUiBNdXgiLCBhaWZvdXRyX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZmlubF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FVRElPX0lOVEVSRkFDRV8wLCA1LCAyLCBhaWZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWZpbmxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUZJTkwgTXV4IiwgYWlmaW5sX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZmlucl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FVRElPX0lOVEVSRkFDRV8wLCA0LCAyLCBhaWZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWZpbnJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUZJTlIgTXV4IiwgYWlmaW5yX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTA0X2NvcmVfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fU1VQUExZKCJTWVNDTEsiLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwgMiwgMCwgc3lzY2xrX2V2ZW50LAorCQkgICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiQ0xLX0RTUCIsIFdNODkwNF9DTE9DS19SQVRFU18yLCAxLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIlRPQ0xLIiwgV004OTA0X0NMT0NLX1JBVEVTXzIsIDAsIDAsIE5VTEwsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODkwNF9hZGNfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fSU5QVVQoIklOMUwiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xUiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJMIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMlIiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4zTCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjNSIiksCisKK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNSUNCSUFTIiwgV004OTA0X01JQ19CSUFTX0NPTlRST0xfMCwgMCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkxlZnQgQ2FwdHVyZSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZsaW5fbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkxlZnQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJmxpbl9pbnZfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIlJpZ2h0IENhcHR1cmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmcmluX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBDYXB0dXJlIEludmVydGluZyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAmcmluX2ludl9tdXgpLAorCitTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IENhcHR1cmUgUEdBIiwgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfMCwgMSwgMCwKKwkJIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgQ2FwdHVyZSBQR0EiLCBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8wLCAwLCAwLAorCQkgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9BREMoIkFEQ0wiLCBOVUxMLCBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF82LCAxLCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF82LCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiQUlGT1VUTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWZvdXRsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJBSUZPVVRSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZm91dHJfbXV4KSwKKworU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRk9VVEwiLCAiQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGT1VUUiIsICJDYXB0dXJlIiwgMSwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGSU5MIiwgIlBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRklOUiIsICJQbGF5YmFjayIsIDEsIFNORF9TT0NfTk9QTSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkRBQ0wgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmaW5sX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJEQUNSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZmlucl9tdXgpLAorCitTTkRfU09DX0RBUE1fREFDKCJEQUNMIiwgTlVMTCwgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfNiwgMywgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUNSIiwgTlVMTCwgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfNiwgMiwgMCksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIkNoYXJnZSBwdW1wIiwgV004OTA0X0NIQVJHRV9QVU1QXzAsIDAsIDAsIGNwX2V2ZW50LAorCQkgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKworU05EX1NPQ19EQVBNX1BHQSgiSFBMIFBHQSIsIFNORF9TT0NfTk9QTSwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJIUFIgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiTElORUwgUEdBIiwgU05EX1NPQ19OT1BNLCAxLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxJTkVSIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIE91dHB1dCIsIFNORF9TT0NfTk9QTSwgV004OTA0X0FOQUxPR1VFX0hQXzAsCisJCSAgIDAsIE5VTEwsIDAsIG91dF9wZ2FfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorU05EX1NPQ19EQVBNX1BHQV9FKCJMaW5lIE91dHB1dCIsIFNORF9TT0NfTk9QTSwgV004OTA0X0FOQUxPR1VFX0xJTkVPVVRfMCwKKwkJICAgMCwgTlVMTCwgMCwgb3V0X3BnYV9ldmVudCwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUTCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVRSIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMSU5FT1VUTCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTElORU9VVFIiKSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpvdXRfbXV4X3RleHRbXSA9IHsKKwkiREFDIiwgIkJ5cGFzcyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHBsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfT1VUMTJfWkMsIDMsIDIsIG91dF9tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBocGxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJIUEwgTXV4IiwgaHBsX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGhwcl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX09VVDEyX1pDLCAyLCAyLCBvdXRfbXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaHByX211eCA9CisJU09DX0RBUE1fRU5VTSgiSFBSIE11eCIsIGhwcl9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBsaW5lbF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX09VVDEyX1pDLCAxLCAyLCBvdXRfbXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGluZWxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMSU5FTCBNdXgiLCBsaW5lbF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBsaW5lcl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX09VVDEyX1pDLCAwLCAyLCBvdXRfbXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGluZXJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMSU5FTCBNdXgiLCBsaW5lcl9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNpZGV0b25lX3RleHRbXSA9IHsKKwkiTm9uZSIsICJMZWZ0IiwgIlJpZ2h0IgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYWNsX3NpZGV0b25lX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfREFDX0RJR0lUQUxfMCwgMiwgMywgc2lkZXRvbmVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWNsX3NpZGV0b25lX211eCA9CisJU09DX0RBUE1fRU5VTSgiTGVmdCBTaWRldG9uZSBNdXgiLCBkYWNsX3NpZGV0b25lX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhY3Jfc2lkZXRvbmVfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9EQUNfRElHSVRBTF8wLCAwLCAzLCBzaWRldG9uZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhY3Jfc2lkZXRvbmVfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJSaWdodCBTaWRldG9uZSBNdXgiLCBkYWNyX3NpZGV0b25lX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTA0X2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX1NVUFBMWSgiQ2xhc3MgRyIsIFdNODkwNF9DTEFTU19XXzAsIDAsIDEsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiTGVmdCBCeXBhc3MiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgQnlwYXNzIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmRhY2xfc2lkZXRvbmVfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIlJpZ2h0IFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmZGFjcl9zaWRldG9uZV9tdXgpLAorCitTTkRfU09DX0RBUE1fTVVYKCJIUEwgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHBsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJIUFIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHByX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJMSU5FTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZsaW5lbF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiTElORVIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmbGluZXJfbXV4KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGNvcmVfaW50ZXJjb25bXSA9IHsKKwl7ICJDTEtfRFNQIiwgTlVMTCwgIlNZU0NMSyIgfSwKKwl7ICJUT0NMSyIsIE5VTEwsICJTWVNDTEsiIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhZGNfaW50ZXJjb25bXSA9IHsKKwl7ICJMZWZ0IENhcHR1cmUgTXV4IiwgIklOMUwiLCAiSU4xTCIgfSwKKwl7ICJMZWZ0IENhcHR1cmUgTXV4IiwgIklOMkwiLCAiSU4yTCIgfSwKKwl7ICJMZWZ0IENhcHR1cmUgTXV4IiwgIklOM0wiLCAiSU4zTCIgfSwKKworCXsgIkxlZnQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgIklOMUwiLCAiSU4xTCIgfSwKKwl7ICJMZWZ0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsICJJTjJMIiwgIklOMkwiIH0sCisJeyAiTGVmdCBDYXB0dXJlIEludmVydGluZyBNdXgiLCAiSU4zTCIsICJJTjNMIiB9LAorCisJeyAiUmlnaHQgQ2FwdHVyZSBNdXgiLCAiSU4xUiIsICJJTjFSIiB9LAorCXsgIlJpZ2h0IENhcHR1cmUgTXV4IiwgIklOMlIiLCAiSU4yUiIgfSwKKwl7ICJSaWdodCBDYXB0dXJlIE11eCIsICJJTjNSIiwgIklOM1IiIH0sCisKKwl7ICJSaWdodCBDYXB0dXJlIEludmVydGluZyBNdXgiLCAiSU4xUiIsICJJTjFSIiB9LAorCXsgIlJpZ2h0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsICJJTjJSIiwgIklOMlIiIH0sCisJeyAiUmlnaHQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgIklOM1IiLCAiSU4zUiIgfSwKKworCXsgIkxlZnQgQ2FwdHVyZSBQR0EiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIE11eCIgfSwKKwl7ICJMZWZ0IENhcHR1cmUgUEdBIiwgTlVMTCwgIkxlZnQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiB9LAorCisJeyAiUmlnaHQgQ2FwdHVyZSBQR0EiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBNdXgiIH0sCisJeyAiUmlnaHQgQ2FwdHVyZSBQR0EiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiB9LAorCisJeyAiQUlGT1VUTCIsICJMZWZ0IiwgICJBRENMIiB9LAorCXsgIkFJRk9VVEwiLCAiUmlnaHQiLCAiQURDUiIgfSwKKwl7ICJBSUZPVVRSIiwgIkxlZnQiLCAgIkFEQ0wiIH0sCisJeyAiQUlGT1VUUiIsICJSaWdodCIsICJBRENSIiB9LAorCisJeyAiQURDTCIsIE5VTEwsICJDTEtfRFNQIiB9LAorCXsgIkFEQ0wiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIFBHQSIgfSwKKworCXsgIkFEQ1IiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKKwl7ICJBRENSIiwgTlVMTCwgIlJpZ2h0IENhcHR1cmUgUEdBIiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgZGFjX2ludGVyY29uW10gPSB7CisJeyAiREFDTCIsICJSaWdodCIsICJBSUZJTlIiIH0sCisJeyAiREFDTCIsICJMZWZ0IiwgICJBSUZJTkwiIH0sCisJeyAiREFDTCIsIE5VTEwsICJDTEtfRFNQIiB9LAorCisJeyAiREFDUiIsICJSaWdodCIsICJBSUZJTlIiIH0sCisJeyAiREFDUiIsICJMZWZ0IiwgICJBSUZJTkwiIH0sCisJeyAiREFDUiIsIE5VTEwsICJDTEtfRFNQIiB9LAorCisJeyAiQ2hhcmdlIHB1bXAiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCisJeyAiSGVhZHBob25lIE91dHB1dCIsIE5VTEwsICJIUEwgUEdBIiB9LAorCXsgIkhlYWRwaG9uZSBPdXRwdXQiLCBOVUxMLCAiSFBSIFBHQSIgfSwKKwl7ICJIZWFkcGhvbmUgT3V0cHV0IiwgTlVMTCwgIkNoYXJnZSBwdW1wIiB9LAorCXsgIkhlYWRwaG9uZSBPdXRwdXQiLCBOVUxMLCAiVE9DTEsiIH0sCisKKwl7ICJMaW5lIE91dHB1dCIsIE5VTEwsICJMSU5FTCBQR0EiIH0sCisJeyAiTGluZSBPdXRwdXQiLCBOVUxMLCAiTElORVIgUEdBIiB9LAorCXsgIkxpbmUgT3V0cHV0IiwgTlVMTCwgIkNoYXJnZSBwdW1wIiB9LAorCXsgIkxpbmUgT3V0cHV0IiwgTlVMTCwgIlRPQ0xLIiB9LAorCisJeyAiSFBPVVRMIiwgTlVMTCwgIkhlYWRwaG9uZSBPdXRwdXQiIH0sCisJeyAiSFBPVVRSIiwgTlVMTCwgIkhlYWRwaG9uZSBPdXRwdXQiIH0sCisKKwl7ICJMSU5FT1VUTCIsIE5VTEwsICJMaW5lIE91dHB1dCIgfSwKKwl7ICJMSU5FT1VUUiIsIE5VTEwsICJMaW5lIE91dHB1dCIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODkwNF9pbnRlcmNvbltdID0geworCXsgIkxlZnQgU2lkZXRvbmUiLCAiTGVmdCIsICJBRENMIiB9LAorCXsgIkxlZnQgU2lkZXRvbmUiLCAiUmlnaHQiLCAiQURDUiIgfSwKKwl7ICJEQUNMIiwgTlVMTCwgIkxlZnQgU2lkZXRvbmUiIH0sCisJCisJeyAiUmlnaHQgU2lkZXRvbmUiLCAiTGVmdCIsICJBRENMIiB9LAorCXsgIlJpZ2h0IFNpZGV0b25lIiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisJeyAiREFDUiIsIE5VTEwsICJSaWdodCBTaWRldG9uZSIgfSwKKworCXsgIkxlZnQgQnlwYXNzIiwgTlVMTCwgIkNsYXNzIEciIH0sCisJeyAiTGVmdCBCeXBhc3MiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIFBHQSIgfSwKKworCXsgIlJpZ2h0IEJ5cGFzcyIsIE5VTEwsICJDbGFzcyBHIiB9LAorCXsgIlJpZ2h0IEJ5cGFzcyIsIE5VTEwsICJSaWdodCBDYXB0dXJlIFBHQSIgfSwKKworCXsgIkhQTCBNdXgiLCAiREFDIiwgIkRBQ0wiIH0sCisJeyAiSFBMIE11eCIsICJCeXBhc3MiLCAiTGVmdCBCeXBhc3MiIH0sCisKKwl7ICJIUFIgTXV4IiwgIkRBQyIsICJEQUNSIiB9LAorCXsgIkhQUiBNdXgiLCAiQnlwYXNzIiwgIlJpZ2h0IEJ5cGFzcyIgfSwKKworCXsgIkxJTkVMIE11eCIsICJEQUMiLCAiREFDTCIgfSwKKwl7ICJMSU5FTCBNdXgiLCAiQnlwYXNzIiwgIkxlZnQgQnlwYXNzIiB9LAorCisJeyAiTElORVIgTXV4IiwgIkRBQyIsICJEQUNSIiB9LAorCXsgIkxJTkVSIE11eCIsICJCeXBhc3MiLCAiUmlnaHQgQnlwYXNzIiB9LAorCisJeyAiSFBMIFBHQSIsIE5VTEwsICJIUEwgTXV4IiB9LAorCXsgIkhQUiBQR0EiLCBOVUxMLCAiSFBSIE11eCIgfSwKKworCXsgIkxJTkVMIFBHQSIsIE5VTEwsICJMSU5FTCBNdXgiIH0sCisJeyAiTElORVIgUEdBIiwgTlVMTCwgIkxJTkVSIE11eCIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODkxMl9pbnRlcmNvbltdID0geworCXsgIkhQTCBQR0EiLCBOVUxMLCAiREFDTCIgfSwKKwl7ICJIUFIgUEdBIiwgTlVMTCwgIkRBQ1IiIH0sCisKKwl7ICJMSU5FTCBQR0EiLCBOVUxMLCAiREFDTCIgfSwKKwl7ICJMSU5FUiBQR0EiLCBOVUxMLCAiREFDUiIgfSwKK307CisKK3N0YXRpYyBpbnQgd204OTA0X2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfY29yZV9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9jb3JlX2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBjb3JlX2ludGVyY29uLAorCQkJCUFSUkFZX1NJWkUoY29yZV9pbnRlcmNvbikpOworCisJc3dpdGNoICh3bTg5MDQtPmRldnR5cGUpIHsKKwljYXNlIFdNODkwNDoKKwkJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODkwNF9hZGNfc25kX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5MDRfYWRjX3NuZF9jb250cm9scykpOworCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTA0X2RhY19zbmRfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODkwNF9kYWNfc25kX2NvbnRyb2xzKSk7CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfc25kX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5MDRfc25kX2NvbnRyb2xzKSk7CisKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTA0X2FkY19kYXBtX3dpZGdldHMsCisJCQkJCSAgQVJSQVlfU0laRSh3bTg5MDRfYWRjX2RhcG1fd2lkZ2V0cykpOworCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0cywKKwkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9kYWNfZGFwbV93aWRnZXRzKSk7CisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwNF9kYXBtX3dpZGdldHMsCisJCQkJCSAgQVJSQVlfU0laRSh3bTg5MDRfZGFwbV93aWRnZXRzKSk7CisKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGNvcmVfaW50ZXJjb24sCisJCQkJCUFSUkFZX1NJWkUoY29yZV9pbnRlcmNvbikpOworCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYWRjX2ludGVyY29uLAorCQkJCQlBUlJBWV9TSVpFKGFkY19pbnRlcmNvbikpOworCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgZGFjX2ludGVyY29uLAorCQkJCQlBUlJBWV9TSVpFKGRhY19pbnRlcmNvbikpOworCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgd204OTA0X2ludGVyY29uLAorCQkJCQlBUlJBWV9TSVpFKHdtODkwNF9pbnRlcmNvbikpOworCQlicmVhazsKKworCWNhc2UgV004OTEyOgorCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTA0X2RhY19zbmRfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODkwNF9kYWNfc25kX2NvbnRyb2xzKSk7CisKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTA0X2RhY19kYXBtX3dpZGdldHMsCisJCQkJCSAgQVJSQVlfU0laRSh3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0cykpOworCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBkYWNfaW50ZXJjb24sCisJCQkJCUFSUkFZX1NJWkUoZGFjX2ludGVyY29uKSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCB3bTg5MTJfaW50ZXJjb24sCisJCQkJCUFSUkFZX1NJWkUod204OTEyX2ludGVyY29uKSk7CisJCWJyZWFrOworCX0KKworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCByYXRpbzsKKwl1bnNpZ25lZCBpbnQgY2xrX3N5c19yYXRlOworfSBjbGtfc3lzX3JhdGVzW10gPSB7CisJeyAgIDY0LCAgMCB9LAorCXsgIDEyOCwgIDEgfSwKKwl7ICAxOTIsICAyIH0sCisJeyAgMjU2LCAgMyB9LAorCXsgIDM4NCwgIDQgfSwKKwl7ICA1MTIsICA1IH0sCisJeyAgNzg2LCAgNiB9LAorCXsgMTAyNCwgIDcgfSwKKwl7IDE0MDgsICA4IH0sCisJeyAxNTM2LCAgOSB9LAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50IHJhdGU7CisJaW50IHNhbXBsZV9yYXRlOworfSBzYW1wbGVfcmF0ZXNbXSA9IHsKKwl7IDgwMDAsICAwICB9LAorCXsgMTEwMjUsIDEgIH0sCisJeyAxMjAwMCwgMSAgfSwKKwl7IDE2MDAwLCAyICB9LAorCXsgMjIwNTAsIDMgIH0sCisJeyAyNDAwMCwgMyAgfSwKKwl7IDMyMDAwLCA0ICB9LAorCXsgNDQxMDAsIDUgIH0sCisJeyA0ODAwMCwgNSAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCBkaXY7IC8qICoxMCBkdWUgdG8gLjVzICovCisJaW50IGJjbGtfZGl2OworfSBiY2xrX2RpdnNbXSA9IHsKKwl7IDEwLCAgMCAgfSwKKwl7IDE1LCAgMSAgfSwKKwl7IDIwLCAgMiAgfSwKKwl7IDMwLCAgMyAgfSwKKwl7IDQwLCAgNCAgfSwKKwl7IDUwLCAgNSAgfSwKKwl7IDU1LCAgNiAgfSwKKwl7IDYwLCAgNyAgfSwKKwl7IDgwLCAgOCAgfSwKKwl7IDEwMCwgOSAgfSwKKwl7IDExMCwgMTAgfSwKKwl7IDEyMCwgMTEgfSwKKwl7IDE2MCwgMTIgfSwKKwl7IDIwMCwgMTMgfSwKKwl7IDIyMCwgMTQgfSwKKwl7IDI0MCwgMTYgfSwKKwl7IDIwMCwgMTcgfSwKKwl7IDMyMCwgMTggfSwKKwl7IDQ0MCwgMTkgfSwKKwl7IDQ4MCwgMjAgfSwKK307CisKKworc3RhdGljIGludCB3bTg5MDRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQsIGksIGJlc3QsIGJlc3RfdmFsLCBjdXJfdmFsOworCXVuc2lnbmVkIGludCBhaWYxID0gMDsKKwl1bnNpZ25lZCBpbnQgYWlmMiA9IDA7CisJdW5zaWduZWQgaW50IGFpZjMgPSAwOworCXVuc2lnbmVkIGludCBjbG9jazEgPSAwOworCXVuc2lnbmVkIGludCBkYWNfZGlnaXRhbDEgPSAwOworCisJLyogV2hhdCBCQ0xLIGRvIHdlIG5lZWQ/ICovCisJd204OTA0LT5mcyA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJaWYgKHdtODkwNC0+dGRtX3Nsb3RzKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkNvbmZpZ3VyaW5nIGZvciAlZCAlZCBiaXQgVERNIHNsb3RzXG4iLAorCQkJd204OTA0LT50ZG1fc2xvdHMsIHdtODkwNC0+dGRtX3dpZHRoKTsKKwkJd204OTA0LT5iY2xrID0gc25kX3NvY19jYWxjX2JjbGsod204OTA0LT5mcywKKwkJCQkJCSB3bTg5MDQtPnRkbV93aWR0aCwgMiwKKwkJCQkJCSB3bTg5MDQtPnRkbV9zbG90cyk7CisJfSBlbHNlIHsKKwkJd204OTA0LT5iY2xrID0gc25kX3NvY19wYXJhbXNfdG9fYmNsayhwYXJhbXMpOworCX0KKworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWFpZjEgfD0gMHg0MDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJYWlmMSB8PSAweDgwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlhaWYxIHw9IDB4YzA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVGFyZ2V0IEJDTEsgaXMgJWRIelxuIiwgd204OTA0LT5iY2xrKTsKKworCXJldCA9IHdtODkwNF9jb25maWd1cmVfY2xvY2tpbmcoY29kZWMpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNlbGVjdCBuZWFyZXN0IENMS19TWVNfUkFURSAqLworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gYWJzKCh3bTg5MDQtPnN5c2Nsa19yYXRlIC8gY2xrX3N5c19yYXRlc1swXS5yYXRpbykKKwkJICAgICAgIC0gd204OTA0LT5mcyk7CisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUoY2xrX3N5c19yYXRlcyk7IGkrKykgeworCQljdXJfdmFsID0gYWJzKCh3bTg5MDQtPnN5c2Nsa19yYXRlIC8KKwkJCSAgICAgICBjbGtfc3lzX3JhdGVzW2ldLnJhdGlvKSAtIHdtODkwNC0+ZnMpOzsKKwkJaWYgKGN1cl92YWwgPCBiZXN0X3ZhbCkgeworCQkJYmVzdCA9IGk7CisJCQliZXN0X3ZhbCA9IGN1cl92YWw7CisJCX0KKwl9CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2VsZWN0ZWQgQ0xLX1NZU19SQVRJTyBvZiAlZFxuIiwKKwkJY2xrX3N5c19yYXRlc1tiZXN0XS5yYXRpbyk7CisJY2xvY2sxIHw9IChjbGtfc3lzX3JhdGVzW2Jlc3RdLmNsa19zeXNfcmF0ZQorCQkgICA8PCBXTTg5MDRfQ0xLX1NZU19SQVRFX1NISUZUKTsKKworCS8qIFNBTVBMRV9SQVRFICovCisJYmVzdCA9IDA7CisJYmVzdF92YWwgPSBhYnMod204OTA0LT5mcyAtIHNhbXBsZV9yYXRlc1swXS5yYXRlKTsKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShzYW1wbGVfcmF0ZXMpOyBpKyspIHsKKwkJLyogQ2xvc2VzdCBtYXRjaCAqLworCQljdXJfdmFsID0gYWJzKHdtODkwNC0+ZnMgLSBzYW1wbGVfcmF0ZXNbaV0ucmF0ZSk7CisJCWlmIChjdXJfdmFsIDwgYmVzdF92YWwpIHsKKwkJCWJlc3QgPSBpOworCQkJYmVzdF92YWwgPSBjdXJfdmFsOworCQl9CisJfQorCWRldl9kYmcoY29kZWMtPmRldiwgIlNlbGVjdGVkIFNBTVBMRV9SQVRFIG9mICVkSHpcbiIsCisJCXNhbXBsZV9yYXRlc1tiZXN0XS5yYXRlKTsKKwljbG9jazEgfD0gKHNhbXBsZV9yYXRlc1tiZXN0XS5zYW1wbGVfcmF0ZQorCQkgICA8PCBXTTg5MDRfU0FNUExFX1JBVEVfU0hJRlQpOworCisJLyogRW5hYmxlIHNsb3Bpbmcgc3RvcGJhbmQgZmlsdGVyIGZvciBsb3cgc2FtcGxlIHJhdGVzICovCisJaWYgKHdtODkwNC0+ZnMgPD0gMjQwMDApCisJCWRhY19kaWdpdGFsMSB8PSBXTTg5MDRfREFDX1NCX0ZJTFQ7CisKKwkvKiBCQ0xLX0RJViAqLworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gSU5UX01BWDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiY2xrX2RpdnMpOyBpKyspIHsKKwkJY3VyX3ZhbCA9ICgod204OTA0LT5zeXNjbGtfcmF0ZSAqIDEwKSAvIGJjbGtfZGl2c1tpXS5kaXYpCisJCQktIHdtODkwNC0+YmNsazsKKwkJaWYgKGN1cl92YWwgPCAwKSAvKiBUYWJsZSBpcyBzb3J0ZWQgKi8KKwkJCWJyZWFrOworCQlpZiAoY3VyX3ZhbCA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gY3VyX3ZhbDsKKwkJfQorCX0KKwl3bTg5MDQtPmJjbGsgPSAod204OTA0LT5zeXNjbGtfcmF0ZSAqIDEwKSAvIGJjbGtfZGl2c1tiZXN0XS5kaXY7CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2VsZWN0ZWQgQkNMS19ESVYgb2YgJWQgZm9yICVkSHogQkNMS1xuIiwKKwkJYmNsa19kaXZzW2Jlc3RdLmRpdiwgd204OTA0LT5iY2xrKTsKKwlhaWYyIHw9IGJjbGtfZGl2c1tiZXN0XS5iY2xrX2RpdjsKKworCS8qIExSQ0xLIGlzIGEgc2ltcGxlIGZyYWN0aW9uIG9mIEJDTEsgKi8KKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJMUkNMS19SQVRFIGlzICVkXG4iLCB3bTg5MDQtPmJjbGsgLyB3bTg5MDQtPmZzKTsKKwlhaWYzIHw9IHdtODkwNC0+YmNsayAvIHdtODkwNC0+ZnM7CisKKwkvKiBBcHBseSB0aGUgc2V0dGluZ3MgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfREFDX0RJR0lUQUxfMSwKKwkJCSAgICBXTTg5MDRfREFDX1NCX0ZJTFQsIGRhY19kaWdpdGFsMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0FVRElPX0lOVEVSRkFDRV8xLAorCQkJICAgIFdNODkwNF9BSUZfV0xfTUFTSywgYWlmMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0FVRElPX0lOVEVSRkFDRV8yLAorCQkJICAgIFdNODkwNF9CQ0xLX0RJVl9NQVNLLCBhaWYyKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzMsCisJCQkgICAgV004OTA0X0xSQ0xLX1JBVEVfTUFTSywgYWlmMyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzEsCisJCQkgICAgV004OTA0X1NBTVBMRV9SQVRFX01BU0sgfAorCQkJICAgIFdNODkwNF9DTEtfU1lTX1JBVEVfTUFTSywgY2xvY2sxKTsKKworCS8qIFVwZGF0ZSBmaWx0ZXJzIGZvciB0aGUgbmV3IHNldHRpbmdzICovCisJd204OTA0X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjKTsKKwl3bTg5MDRfc2V0X2RlZW1waChjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdtODkwNF9zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgY2xrX2lkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqcHJpdiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgV004OTA0X0NMS19NQ0xLOgorCQlwcml2LT5zeXNjbGtfc3JjID0gY2xrX2lkOworCQlwcml2LT5tY2xrX3JhdGUgPSBmcmVxOworCQlicmVhazsKKworCWNhc2UgV004OTA0X0NMS19GTEw6CisJCXByaXYtPnN5c2Nsa19zcmMgPSBjbGtfaWQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhkYWktPmRldiwgIkNsb2NrIHNvdXJjZSBpcyAlZCBhdCAldUh6XG4iLCBjbGtfaWQsIGZyZXEpOworCisJd204OTA0X2NvbmZpZ3VyZV9jbG9ja2luZyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXVuc2lnbmVkIGludCBhaWYxID0gMDsKKwl1bnNpZ25lZCBpbnQgYWlmMyA9IDA7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRk06CisJCWFpZjMgfD0gV004OTA0X0xSQ0xLX0RJUjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQlhaWYxIHw9IFdNODkwNF9CQ0xLX0RJUjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlhaWYxIHw9IFdNODkwNF9CQ0xLX0RJUjsKKwkJYWlmMyB8PSBXTTg5MDRfTFJDTEtfRElSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJYWlmMSB8PSBXTTg5MDRfQUlGX0xSQ0xLX0lOVjsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlhaWYxIHw9IDB4MzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWFpZjEgfD0gMHgyOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlhaWYxIHw9IDB4MTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJLyogZnJhbWUgaW52ZXJzaW9uIG5vdCB2YWxpZCBmb3IgRFNQIG1vZGVzICovCisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYWlmMSB8PSBXTTg5MDRfQUlGX0JDTEtfSU5WOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCQlhaWYxIHw9IFdNODkwNF9BSUZfQkNMS19JTlYgfCBXTTg5MDRfQUlGX0xSQ0xLX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYWlmMSB8PSBXTTg5MDRfQUlGX0JDTEtfSU5WOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCQlhaWYxIHw9IFdNODkwNF9BSUZfTFJDTEtfSU5WOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzEsCisJCQkgICAgV004OTA0X0FJRl9CQ0xLX0lOViB8IFdNODkwNF9BSUZfTFJDTEtfSU5WIHwKKwkJCSAgICBXTTg5MDRfQUlGX0ZNVF9NQVNLIHwgV004OTA0X0JDTEtfRElSLCBhaWYxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzMsCisJCQkgICAgV004OTA0X0xSQ0xLX0RJUiwgYWlmMyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdtODkwNF9zZXRfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCB0eF9tYXNrLAorCQkJICAgICAgIHVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBhaWYxID0gMDsKKworCS8qIERvbid0IG5lZWQgdG8gdmFsaWRhdGUgYW55dGhpbmcgaWYgd2UncmUgdHVybmluZyBvZmYgVERNICovCisJaWYgKHNsb3RzID09IDApCisJCWdvdG8gb3V0OworCisJLyogTm90ZSB0aGF0IHdlIGFsbG93IGNvbmZpZ3VyYXRpb25zIHdlIGNhbid0IGhhbmRsZSBvdXJzZWx2ZXMgLSAKKwkgKiBmb3IgZXhhbXBsZSwgd2UgY2FuIGdlbmVyYXRlIGNsb2NrcyBmb3Igc2xvdHMgMiBhbmQgdXAgZXZlbiBpZgorCSAqIHdlIGNhbid0IHVzZSB0aG9zZSBzbG90cyBvdXJzZWx2ZXMuCisJICovCisJYWlmMSB8PSBXTTg5MDRfQUlGQURDX1RETSB8IFdNODkwNF9BSUZEQUNfVERNOworCisJc3dpdGNoIChyeF9tYXNrKSB7CisJY2FzZSAzOgorCQlicmVhazsKKwljYXNlIDB4YzoKKwkJYWlmMSB8PSBXTTg5MDRfQUlGQURDX1RETV9DSEFOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKworCXN3aXRjaCAodHhfbWFzaykgeworCWNhc2UgMzoKKwkJYnJlYWs7CisJY2FzZSAweGM6CisJCWFpZjEgfD0gV004OTA0X0FJRkRBQ19URE1fQ0hBTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCitvdXQ6CisJd204OTA0LT50ZG1fd2lkdGggPSBzbG90X3dpZHRoOworCXdtODkwNC0+dGRtX3Nsb3RzID0gc2xvdHMgLyAyOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0FVRElPX0lOVEVSRkFDRV8xLAorCQkJICAgIFdNODkwNF9BSUZBRENfVERNIHwgV004OTA0X0FJRkFEQ19URE1fQ0hBTiB8CisJCQkgICAgV004OTA0X0FJRkRBQ19URE0gfCBXTTg5MDRfQUlGREFDX1RETV9DSEFOLCBhaWYxKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgX2ZsbF9kaXYgeworCXUxNiBmbGxfZnJhdGlvOworCXUxNiBmbGxfb3V0ZGl2OworCXUxNiBmbGxfY2xrX3JlZl9kaXY7CisJdTE2IG47CisJdTE2IGs7Cit9OworCisvKiBUaGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSBGTEwgZGl2aWRlIG11bHRpcGxpZWQgYnkgMTAKKyAqIHRvIGFsbG93IHJvdW5kaW5nIGxhdGVyICovCisjZGVmaW5lIEZJWEVEX0ZMTF9TSVpFICgoMSA8PCAxNikgKiAxMCkKKworc3RhdGljIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IG1pbjsKKwl1bnNpZ25lZCBpbnQgbWF4OworCXUxNiBmbGxfZnJhdGlvOworCWludCByYXRpbzsKK30gZmxsX2ZyYXRpb3NbXSA9IHsKKwl7ICAgICAgIDAsICAgIDY0MDAwLCA0LCAxNiB9LAorCXsgICA2NDAwMCwgICAxMjgwMDAsIDMsICA4IH0sCisJeyAgMTI4MDAwLCAgIDI1NjAwMCwgMiwgIDQgfSwKKwl7ICAyNTYwMDAsICAxMDAwMDAwLCAxLCAgMiB9LAorCXsgMTAwMDAwMCwgMTM1MDAwMDAsIDAsICAxIH0sCit9OworCitzdGF0aWMgaW50IGZsbF9mYWN0b3JzKHN0cnVjdCBfZmxsX2RpdiAqZmxsX2RpdiwgdW5zaWduZWQgaW50IEZyZWYsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgRm91dCkKK3sKKwl1NjQgS3BhcnQ7CisJdW5zaWduZWQgaW50IEssIE5kaXYsIE5tb2QsIHRhcmdldDsKKwl1bnNpZ25lZCBpbnQgZGl2OworCWludCBpOworCisJLyogRnJlZiBtdXN0IGJlIDw9MTMuNU1IeiAqLworCWRpdiA9IDE7CisJZmxsX2Rpdi0+ZmxsX2Nsa19yZWZfZGl2ID0gMDsKKwl3aGlsZSAoKEZyZWYgLyBkaXYpID4gMTM1MDAwMDApIHsKKwkJZGl2ICo9IDI7CisJCWZsbF9kaXYtPmZsbF9jbGtfcmVmX2RpdisrOworCisJCWlmIChkaXYgPiA4KSB7CisJCQlwcl9lcnIoIkNhbid0IHNjYWxlICVkTUh6IGlucHV0IGRvd24gdG8gPD0xMy41TUh6XG4iLAorCQkJICAgICAgIEZyZWYpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlwcl9kZWJ1ZygiRnJlZj0ldSBGb3V0PSV1XG4iLCBGcmVmLCBGb3V0KTsKKworCS8qIEFwcGx5IHRoZSBkaXZpc2lvbiBmb3Igb3VyIHJlbWFpbmluZyBjYWxjdWxhdGlvbnMgKi8KKwlGcmVmIC89IGRpdjsKKworCS8qIEZ2Y28gc2hvdWxkIGJlIDkwLTEwME1IejsgZG9uJ3QgY2hlY2sgdGhlIHVwcGVyIGJvdW5kICovCisJZGl2ID0gNDsKKwl3aGlsZSAoRm91dCAqIGRpdiA8IDkwMDAwMDAwKSB7CisJCWRpdisrOworCQlpZiAoZGl2ID4gNjQpIHsKKwkJCXByX2VycigiVW5hYmxlIHRvIGZpbmQgRkxMX09VVERJViBmb3IgRm91dD0ldUh6XG4iLAorCQkJICAgICAgIEZvdXQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJdGFyZ2V0ID0gRm91dCAqIGRpdjsKKwlmbGxfZGl2LT5mbGxfb3V0ZGl2ID0gZGl2IC0gMTsKKworCXByX2RlYnVnKCJGdmNvPSVkSHpcbiIsIHRhcmdldCk7CisKKwkvKiBGaW5kIGFuIGFwcHJvcHJhaXRlIEZMTF9GUkFUSU8gYW5kIGZhY3RvciBpdCBvdXQgb2YgdGhlIHRhcmdldCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZsbF9mcmF0aW9zKTsgaSsrKSB7CisJCWlmIChmbGxfZnJhdGlvc1tpXS5taW4gPD0gRnJlZiAmJiBGcmVmIDw9IGZsbF9mcmF0aW9zW2ldLm1heCkgeworCQkJZmxsX2Rpdi0+ZmxsX2ZyYXRpbyA9IGZsbF9mcmF0aW9zW2ldLmZsbF9mcmF0aW87CisJCQl0YXJnZXQgLz0gZmxsX2ZyYXRpb3NbaV0ucmF0aW87CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGZsbF9mcmF0aW9zKSkgeworCQlwcl9lcnIoIlVuYWJsZSB0byBmaW5kIEZMTF9GUkFUSU8gZm9yIEZyZWY9JXVIelxuIiwgRnJlZik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE5vdywgY2FsY3VsYXRlIE4uSyAqLworCU5kaXYgPSB0YXJnZXQgLyBGcmVmOworCisJZmxsX2Rpdi0+biA9IE5kaXY7CisJTm1vZCA9IHRhcmdldCAlIEZyZWY7CisJcHJfZGVidWcoIk5tb2Q9JWRcbiIsIE5tb2QpOworCisJLyogQ2FsY3VsYXRlIGZyYWN0aW9uYWwgcGFydCAtIHNjYWxlIHVwIHNvIHdlIGNhbiByb3VuZC4gKi8KKwlLcGFydCA9IEZJWEVEX0ZMTF9TSVpFICogKGxvbmcgbG9uZylObW9kOworCisJZG9fZGl2KEtwYXJ0LCBGcmVmKTsKKworCUsgPSBLcGFydCAmIDB4RkZGRkZGRkY7CisKKwlpZiAoKEsgJSAxMCkgPj0gNSkKKwkJSyArPSA1OworCisJLyogTW92ZSBkb3duIHRvIHByb3BlciByYW5nZSBub3cgcm91bmRpbmcgaXMgZG9uZSAqLworCWZsbF9kaXYtPmsgPSBLIC8gMTA7CisKKwlwcl9kZWJ1ZygiTj0leCBLPSV4IEZMTF9GUkFUSU89JXggRkxMX09VVERJVj0leCBGTExfQ0xLX1JFRl9ESVY9JXhcbiIsCisJCSBmbGxfZGl2LT5uLCBmbGxfZGl2LT5rLAorCQkgZmxsX2Rpdi0+ZmxsX2ZyYXRpbywgZmxsX2Rpdi0+ZmxsX291dGRpdiwKKwkJIGZsbF9kaXYtPmZsbF9jbGtfcmVmX2Rpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfc2V0X2ZsbChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IGZsbF9pZCwgaW50IHNvdXJjZSwKKwkJCSAgdW5zaWduZWQgaW50IEZyZWYsIHVuc2lnbmVkIGludCBGb3V0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBfZmxsX2RpdiBmbGxfZGl2OworCWludCByZXQsIHZhbDsKKwlpbnQgY2xvY2syLCBmbGwxOworCisJLyogQW55IGNoYW5nZT8gKi8KKwlpZiAoc291cmNlID09IHdtODkwNC0+ZmxsX3NyYyAmJiBGcmVmID09IHdtODkwNC0+ZmxsX2ZyZWYgJiYKKwkgICAgRm91dCA9PSB3bTg5MDQtPmZsbF9mb3V0KQorCQlyZXR1cm4gMDsKKworCWNsb2NrMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzIpOworCisJaWYgKEZvdXQgPT0gMCkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJGTEwgZGlzYWJsZWRcbiIpOworCisJCXdtODkwNC0+ZmxsX2ZyZWYgPSAwOworCQl3bTg5MDQtPmZsbF9mb3V0ID0gMDsKKworCQkvKiBHYXRlIFNZU0NMSyB0byBhdm9pZCBnbGl0Y2hlcyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwKKwkJCQkgICAgV004OTA0X0NMS19TWVNfRU5BLCAwKTsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCQkgICAgV004OTA0X0ZMTF9PU0NfRU5BIHwgV004OTA0X0ZMTF9FTkEsIDApOworCisJCWdvdG8gb3V0OworCX0KKworCS8qIFZhbGlkYXRlIHRoZSBGTEwgSUQgKi8KKwlzd2l0Y2ggKHNvdXJjZSkgeworCWNhc2UgV004OTA0X0ZMTF9NQ0xLOgorCWNhc2UgV004OTA0X0ZMTF9MUkNMSzoKKwljYXNlIFdNODkwNF9GTExfQkNMSzoKKwkJcmV0ID0gZmxsX2ZhY3RvcnMoJmZsbF9kaXYsIEZyZWYsIEZvdXQpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKworCWNhc2UgV004OTA0X0ZMTF9GUkVFX1JVTk5JTkc6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nIGZyZWUgcnVubmluZyBGTExcbiIpOworCQkvKiBGb3JjZSAxMk1IeiBhbmQgb3V0cHV0LzQgZm9yIG5vdyAqLworCQlGb3V0ID0gMTIwMDAwMDA7CisJCUZyZWYgPSAxMjAwMDAwMDsKKworCQltZW1zZXQoJmZsbF9kaXYsIDAsIHNpemVvZihmbGxfZGl2KSk7CisJCWZsbF9kaXYuZmxsX291dGRpdiA9IDM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5rbm93biBGTEwgSUQgJWRcbiIsIGZsbF9pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFNhdmUgY3VycmVudCBzdGF0ZSB0aGVuIGRpc2FibGUgdGhlIEZMTCBhbmQgU1lTQ0xLIHRvIGF2b2lkCisJICogbWlzY2xvY2tpbmcgKi8KKwlmbGwxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzIsCisJCQkgICAgV004OTA0X0NMS19TWVNfRU5BLCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEgfCBXTTg5MDRfRkxMX0VOQSwgMCk7CisKKwkvKiBVbmxvY2sgZm9yY2VkIG9zY2lsYXRvciBjb250cm9sIHRvIHN3aXRjaCBpdCBvbi9vZmYgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ09OVFJPTF9JTlRFUkZBQ0VfVEVTVF8xLAorCQkJICAgIFdNODkwNF9VU0VSX0tFWSwgV004OTA0X1VTRVJfS0VZKTsKKworCWlmIChmbGxfaWQgPT0gV004OTA0X0ZMTF9GUkVFX1JVTk5JTkcpIHsKKwkJdmFsID0gV004OTA0X0ZMTF9GUkNfTkNPOworCX0gZWxzZSB7CisJCXZhbCA9IDA7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9OQ09fVEVTVF8xLCBXTTg5MDRfRkxMX0ZSQ19OQ08sCisJCQkgICAgdmFsKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ09OVFJPTF9JTlRFUkZBQ0VfVEVTVF8xLAorCQkJICAgIFdNODkwNF9VU0VSX0tFWSwgMCk7CisKKwlzd2l0Y2ggKGZsbF9pZCkgeworCWNhc2UgV004OTA0X0ZMTF9NQ0xLOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfNSwKKwkJCQkgICAgV004OTA0X0ZMTF9DTEtfUkVGX1NSQ19NQVNLLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODkwNF9GTExfTFJDTEs6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF81LAorCQkJCSAgICBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX01BU0ssIDEpOworCQlicmVhazsKKworCWNhc2UgV004OTA0X0ZMTF9CQ0xLOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfNSwKKwkJCQkgICAgV004OTA0X0ZMTF9DTEtfUkVGX1NSQ19NQVNLLCAyKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGZsbF9kaXYuaykKKwkJdmFsID0gV004OTA0X0ZMTF9GUkFDTl9FTkE7CisJZWxzZQorCQl2YWwgPSAwOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJICAgIFdNODkwNF9GTExfRlJBQ05fRU5BLCB2YWwpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzIsCisJCQkgICAgV004OTA0X0ZMTF9PVVRESVZfTUFTSyB8IFdNODkwNF9GTExfRlJBVElPX01BU0ssCisJCQkgICAgKGZsbF9kaXYuZmxsX291dGRpdiA8PCBXTTg5MDRfRkxMX09VVERJVl9TSElGVCkgfAorCQkJICAgIChmbGxfZGl2LmZsbF9mcmF0aW8gPDwgV004OTA0X0ZMTF9GUkFUSU9fU0hJRlQpKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8zLCBmbGxfZGl2LmspOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzQsIFdNODkwNF9GTExfTl9NQVNLLAorCQkJICAgIGZsbF9kaXYubiA8PCBXTTg5MDRfRkxMX05fU0hJRlQpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzUsCisJCQkgICAgV004OTA0X0ZMTF9DTEtfUkVGX0RJVl9NQVNLLAorCQkJICAgIGZsbF9kaXYuZmxsX2Nsa19yZWZfZGl2IAorCQkJICAgIDw8IFdNODkwNF9GTExfQ0xLX1JFRl9ESVZfU0hJRlQpOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGNvbmZpZ3VyZWQgZm9yICVkSHotPiVkSHpcbiIsIEZyZWYsIEZvdXQpOworCisJd204OTA0LT5mbGxfZnJlZiA9IEZyZWY7CisJd204OTA0LT5mbGxfZm91dCA9IEZvdXQ7CisJd204OTA0LT5mbGxfc3JjID0gc291cmNlOworCisJLyogRW5hYmxlIHRoZSBGTEwgaWYgaXQgd2FzIHByZXZpb3VzbHkgYWN0aXZlICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkgICAgV004OTA0X0ZMTF9PU0NfRU5BLCBmbGwxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCSAgICBXTTg5MDRfRkxMX0VOQSwgZmxsMSk7CisKK291dDoKKwkvKiBSZWVuYWJsZSBTWVNDTEsgaWYgaXQgd2FzIHByZXZpb3VzbHkgYWN0aXZlICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzIsCisJCQkgICAgV004OTA0X0NMS19TWVNfRU5BLCBjbG9jazIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X2RpZ2l0YWxfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlpbnQgdmFsOworCisJaWYgKG11dGUpCisJCXZhbCA9IFdNODkwNF9EQUNfTVVURTsKKwllbHNlCisJCXZhbCA9IDA7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfREFDX0RJR0lUQUxfMSwgV004OTA0X0RBQ19NVVRFLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkwNF9zeW5jX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGk7CisKKwlpZiAoIWNvZGVjLT5jYWNoZV9zeW5jKQorCQlyZXR1cm47CisKKwljb2RlYy0+Y2FjaGVfb25seSA9IDA7CisKKwkvKiBTeW5jIGJhY2sgY2FjaGVkIHZhbHVlcyBpZiB0aGV5J3JlIGRpZmZlcmVudCBmcm9tIHRoZQorCSAqIGhhcmR3YXJlIGRlZmF1bHQuCisJICovCisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUod204OTA0LT5yZWdfY2FjaGUpOyBpKyspIHsKKwkJaWYgKCF3bTg5MDRfYWNjZXNzW2ldLndyaXRhYmxlKQorCQkJY29udGludWU7CisKKwkJaWYgKHdtODkwNC0+cmVnX2NhY2hlW2ldID09IHdtODkwNF9yZWdbaV0pCisJCQljb250aW51ZTsKKworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCB3bTg5MDQtPnJlZ19jYWNoZVtpXSk7CisJfQorCisJY29kZWMtPmNhY2hlX3N5bmMgPSAwOworfQorCitzdGF0aWMgaW50IHdtODkwNF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCS8qIFZNSUQgcmVzaXN0YW5jZSAyKjUwayAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfVk1JRF9DT05UUk9MXzAsCisJCQkJICAgIFdNODkwNF9WTUlEX1JFU19NQVNLLAorCQkJCSAgICAweDEgPDwgV004OTA0X1ZNSURfUkVTX1NISUZUKTsKKworCQkvKiBOb3JtYWwgYmlhcyBjdXJyZW50ICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9CSUFTX0NPTlRST0xfMCwKKwkJCQkgICAgV004OTA0X0lTRUxfTUFTSywgMiA8PCBXTTg5MDRfSVNFTF9TSElGVCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLAorCQkJCQkJICAgIHdtODkwNC0+c3VwcGxpZXMpOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsCisJCQkJCXJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJd204OTA0X3N5bmNfY2FjaGUoY29kZWMpOworCisJCQkvKiBFbmFibGUgYmlhcyAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0JJQVNfQ09OVFJPTF8wLAorCQkJCQkgICAgV004OTA0X0JJQVNfRU5BLCBXTTg5MDRfQklBU19FTkEpOworCisJCQkvKiBFbmFibGUgVk1JRCwgVk1JRCBidWZmZXJpbmcsIDIqNWsgcmVzaXN0YW5jZSAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X1ZNSURfQ09OVFJPTF8wLAorCQkJCQkgICAgV004OTA0X1ZNSURfRU5BIHwKKwkJCQkJICAgIFdNODkwNF9WTUlEX1JFU19NQVNLLAorCQkJCQkgICAgV004OTA0X1ZNSURfRU5BIHwKKwkJCQkJICAgIDB4MyA8PCBXTTg5MDRfVk1JRF9SRVNfU0hJRlQpOworCisJCQkvKiBMZXQgVk1JRCByYW1wICovCisJCQltc2xlZXAoMSk7CisJCX0KKworCQkvKiBNYWludGFpbiBWTUlEIHdpdGggMioyNTBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9WTUlEX0NPTlRST0xfMCwKKwkJCQkgICAgV004OTA0X1ZNSURfUkVTX01BU0ssCisJCQkJICAgIDB4MiA8PCBXTTg5MDRfVk1JRF9SRVNfU0hJRlQpOworCisJCS8qIEJpYXMgY3VycmVudCAqMC41ICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9CSUFTX0NPTlRST0xfMCwKKwkJCQkgICAgV004OTA0X0lTRUxfTUFTSywgMCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBUdXJuIG9mZiBWTUlEICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9WTUlEX0NPTlRST0xfMCwKKwkJCQkgICAgV004OTA0X1ZNSURfUkVTX01BU0sgfCBXTTg5MDRfVk1JRF9FTkEsIDApOworCisJCS8qIFN0b3AgYmlhcyBnZW5lcmF0aW9uICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9CSUFTX0NPTlRST0xfMCwKKwkJCQkgICAgV004OTA0X0JJQVNfRU5BLCAwKTsKKworI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKKwkJLyogUG9zdCAyLjYuMzQgd2Ugd2lsbCBiZSBhYmxlIHRvIGdldCBhIGNhbGxiYWNrIHdoZW4KKwkJICogdGhlIHJlZ3VsYXRvcnMgYXJlIGRpc2FibGVkIHdoaWNoIHdlIGNhbiB1c2UgYnV0CisJCSAqIGZvciBub3cganVzdCBhc3N1bWUgdGhhdCB0aGUgcG93ZXIgd2lsbCBiZSBjdXQgaWYKKwkJICogdGhlIHJlZ3VsYXRvciBBUEkgaXMgaW4gdXNlLgorCQkgKi8KKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworI2VuZGlmCisKKwkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLAorCQkJCSAgICAgICB3bTg5MDQtPnN1cHBsaWVzKTsKKwkJYnJlYWs7CisJfQorCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004OTA0X1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKworI2RlZmluZSBXTTg5MDRfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODkwNF9kYWlfb3BzID0geworCS5zZXRfc3lzY2xrID0gd204OTA0X3NldF9zeXNjbGssCisJLnNldF9mbXQgPSB3bTg5MDRfc2V0X2ZtdCwKKwkuc2V0X3RkbV9zbG90ID0gd204OTA0X3NldF90ZG1fc2xvdCwKKwkuc2V0X3BsbCA9IHdtODkwNF9zZXRfZmxsLAorCS5od19wYXJhbXMgPSB3bTg5MDRfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUgPSB3bTg5MDRfZGlnaXRhbF9tdXRlLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHdtODkwNF9kYWkgPSB7CisJLm5hbWUgPSAiV004OTA0IiwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004OTA0X1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODkwNF9GT1JNQVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg5MDRfUkFURVMsCisJCS5mb3JtYXRzID0gV004OTA0X0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJndtODkwNF9kYWlfb3BzLAorCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODkwNF9kYWkpOworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODkwNF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwl3bTg5MDRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODkwNF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB3bTg5MDRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODkwNF9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdtODkwNF9oYW5kbGVfcmV0dW5lX21vYmlsZV9wZGF0YShzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTA0LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3BkYXRhICpwZGF0YSA9IHdtODkwNC0+cGRhdGE7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY29udHJvbCA9CisJCVNPQ19FTlVNX0VYVCgiRVEgTW9kZSIsCisJCQkgICAgIHdtODkwNC0+cmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5MDRfZ2V0X3JldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTA0X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0pOworCWludCByZXQsIGksIGo7CisJY29uc3QgY2hhciAqKnQ7CisKKwkvKiBXZSBuZWVkIGFuIGFycmF5IG9mIHRleHRzIGZvciB0aGUgZW51bSBBUEkgYnV0IHRoZSBudW1iZXIKKwkgKiBvZiB0ZXh0cyBpcyBsaWtlbHkgdG8gYmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YKKwkgKiBjb25maWd1cmF0aW9ucyBkdWUgdG8gdGhlIHNhbXBsZSByYXRlIGRlcGVuZGVuY3kgb2YgdGhlCisJICogY29uZmlndXJhdGlvbnMuICovCisJd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cyA9IDA7CisJd204OTA0LT5yZXR1bmVfbW9iaWxlX3RleHRzID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3M7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0czsgaisrKSB7CisJCQlpZiAoc3RyY21wKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZSwKKwkJCQkgICB3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHNbal0pID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiAhPSB3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKQorCQkJY29udGludWU7CisKKwkJLyogRXhwYW5kIHRoZSBhcnJheS4uLiAqLworCQl0ID0ga3JlYWxsb2Mod204OTA0LT5yZXR1bmVfbW9iaWxlX3RleHRzLAorCQkJICAgICBzaXplb2YoY2hhciAqKSAqIAorCQkJICAgICAod204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cyArIDEpLAorCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKHQgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qIC4uLnN0b3JlIHRoZSBuZXcgZW50cnkuLi4gKi8KKwkJdFt3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzXSA9IAorCQkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5uYW1lOworCisJCS8qIC4uLmFuZCByZW1lbWJlciB0aGUgbmV3IHZlcnNpb24uICovCisJCXdtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMrKzsKKwkJd204OTA0LT5yZXR1bmVfbW9iaWxlX3RleHRzID0gdDsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJBbGxvY2F0ZWQgJWQgdW5pcXVlIFJlVHVuZSBNb2JpbGUgbmFtZXNcbiIsCisJCXdtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpOworCisJd204OTA0LT5yZXR1bmVfbW9iaWxlX2VudW0ubWF4ID0gd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0czsKKwl3bTg5MDQtPnJldHVuZV9tb2JpbGVfZW51bS50ZXh0cyA9IHdtODkwNC0+cmV0dW5lX21vYmlsZV90ZXh0czsKKworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKCZ3bTg5MDQtPmNvZGVjLCAmY29udHJvbCwgMSk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKHdtODkwNC0+Y29kZWMuZGV2LAorCQkJIkZhaWxlZCB0byBhZGQgUmVUdW5lIE1vYmlsZSBjb250cm9sOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgd204OTA0X2hhbmRsZV9wZGF0YShzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTA0LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3BkYXRhICpwZGF0YSA9IHdtODkwNC0+cGRhdGE7CisJaW50IHJldCwgaTsKKworCWlmICghcGRhdGEpIHsKKwkJc25kX3NvY19hZGRfY29udHJvbHMoJndtODkwNC0+Y29kZWMsIHdtODkwNF9lcV9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X2VxX2NvbnRyb2xzKSk7CisJCXJldHVybjsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlZCBEUkMgY29uZmlndXJhdGlvbnNcbiIsIHBkYXRhLT5udW1fZHJjX2NmZ3MpOworCisJaWYgKHBkYXRhLT5udW1fZHJjX2NmZ3MpIHsKKwkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY29udHJvbCA9CisJCQlTT0NfRU5VTV9FWFQoIkRSQyBNb2RlIiwgd204OTA0LT5kcmNfZW51bSwKKwkJCQkgICAgIHdtODkwNF9nZXRfZHJjX2VudW0sIHdtODkwNF9wdXRfZHJjX2VudW0pOworCisJCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSAqLworCQl3bTg5MDQtPmRyY190ZXh0cyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIgKikKKwkJCQkJICAgICogcGRhdGEtPm51bV9kcmNfY2ZncywgR0ZQX0tFUk5FTCk7CisJCWlmICghd204OTA0LT5kcmNfdGV4dHMpIHsKKwkJCWRldl9lcnIod204OTA0LT5jb2RlYy5kZXYsCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBEUkMgY29uZmlnIHRleHRzXG4iLAorCQkJCXBkYXRhLT5udW1fZHJjX2NmZ3MpOworCQkJcmV0dXJuOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fZHJjX2NmZ3M7IGkrKykKKwkJCXdtODkwNC0+ZHJjX3RleHRzW2ldID0gcGRhdGEtPmRyY19jZmdzW2ldLm5hbWU7CisKKwkJd204OTA0LT5kcmNfZW51bS5tYXggPSBwZGF0YS0+bnVtX2RyY19jZmdzOworCQl3bTg5MDQtPmRyY19lbnVtLnRleHRzID0gd204OTA0LT5kcmNfdGV4dHM7CisKKwkJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoJndtODkwNC0+Y29kZWMsICZjb250cm9sLCAxKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2Vycih3bTg5MDQtPmNvZGVjLmRldiwKKwkJCQkiRmFpbGVkIHRvIGFkZCBEUkMgbW9kZSBjb250cm9sOiAlZFxuIiwgcmV0KTsKKworCQl3bTg5MDRfc2V0X2RyYyhjb2RlYyk7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJWQgUmVUdW5lIE1vYmlsZSBjb25maWd1cmF0aW9uc1xuIiwKKwkJcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpOworCisJaWYgKHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzKQorCQl3bTg5MDRfaGFuZGxlX3JldHVuZV9tb2JpbGVfcGRhdGEod204OTA0KTsKKwllbHNlCisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKCZ3bTg5MDQtPmNvZGVjLCB3bTg5MDRfZXFfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODkwNF9lcV9jb250cm9scykpOworfQorCitzdGF0aWMgaW50IHdtODkwNF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJaWYgKHdtODkwNF9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg5MDRfY29kZWM7CisJY29kZWMgPSB3bTg5MDRfY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJd204OTA0X2hhbmRsZV9wZGF0YShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKKworCXdtODkwNF9hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXR1cm4gcmV0OworCitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTA0ID0geworCS5wcm9iZSA9IAl3bTg5MDRfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg5MDRfcmVtb3ZlLAorCS5zdXNwZW5kID0gCXdtODkwNF9zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg5MDRfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204OTA0KTsKKworc3RhdGljIGludCB3bTg5MDRfcmVnaXN0ZXIoc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQsCisJCQkgICBlbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2wpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTA0LT5jb2RlYzsKKwlpbnQgaTsKKworCWlmICh3bTg5MDRfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBXTTg5MDQgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTA0OworCWNvZGVjLT5uYW1lID0gIldNODkwNCI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODkwNF9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gJndtODkwNF9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IFdNODkwNF9NQVhfUkVHSVNURVI7CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5MDQtPnJlZ19jYWNoZTsKKwljb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIgPSB3bTg5MDRfdm9sYXRpbGVfcmVnaXN0ZXI7CisJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworCWNvZGVjLT5pZGxlX2JpYXNfb2ZmID0gMTsKKworCXN3aXRjaCAod204OTA0LT5kZXZ0eXBlKSB7CisJY2FzZSBXTTg5MDQ6CisJCWJyZWFrOworCWNhc2UgV004OTEyOgorCQltZW1zZXQoJndtODkwNF9kYWkuY2FwdHVyZSwgMCwgc2l6ZW9mKHdtODkwNF9kYWkuY2FwdHVyZSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbmtub3duIGRldmljZSB0eXBlICVkXG4iLAorCQkJd204OTA0LT5kZXZ0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODkwNF9yZWcsIHNpemVvZih3bTg5MDRfcmVnKSk7CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgMTYsIGNvbnRyb2wpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpOyBpKyspCisJCXdtODkwNC0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204OTA0X3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLAorCQkJCSB3bTg5MDQtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwKKwkJCQkgICAgd204OTA0LT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9nZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDRfU1dfUkVTRVRfQU5EX0lEKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBJRCByZWdpc3RlclxuIik7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisJaWYgKHJldCAhPSB3bTg5MDRfcmVnW1dNODkwNF9TV19SRVNFVF9BTkRfSURdKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkRldmljZSBpcyBub3QgYSBXTTg5MDQsIElEIGlzICV4XG4iLCByZXQpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDRfUkVWSVNJT04pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIGRldmljZSByZXZpc2lvbjogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCWRldl9pbmZvKGNvZGVjLT5kZXYsICJyZXZpc2lvbiAlY1xuIiwgcmV0ICsgJ0EnKTsKKworCXJldCA9IHdtODkwNF9yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0XG4iKTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXdtODkwNF9kYWkuZGV2ID0gY29kZWMtPmRldjsKKworCS8qIENoYW5nZSBzb21lIGRlZmF1bHQgc2V0dGluZ3MgLSBsYXRjaCBWVSBhbmQgZW5hYmxlIFpDICovCisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0FEQ19ESUdJVEFMX1ZPTFVNRV9MRUZUXSB8PSBXTTg5MDRfQURDX1ZVOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfUklHSFRdIHw9IFdNODkwNF9BRENfVlU7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0RBQ19ESUdJVEFMX1ZPTFVNRV9MRUZUXSB8PSBXTTg5MDRfREFDX1ZVOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9EQUNfRElHSVRBTF9WT0xVTUVfUklHSFRdIHw9IFdNODkwNF9EQUNfVlU7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0FOQUxPR1VFX09VVDFfTEVGVF0gfD0gV004OTA0X0hQT1VUX1ZVIHwKKwkJV004OTA0X0hQT1VUTFpDOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9BTkFMT0dVRV9PVVQxX1JJR0hUXSB8PSBXTTg5MDRfSFBPVVRfVlUgfAorCQlXTTg5MDRfSFBPVVRSWkM7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0FOQUxPR1VFX09VVDJfTEVGVF0gfD0gV004OTA0X0xJTkVPVVRfVlUgfAorCQlXTTg5MDRfTElORU9VVExaQzsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQU5BTE9HVUVfT1VUMl9SSUdIVF0gfD0gV004OTA0X0xJTkVPVVRfVlUgfAorCQlXTTg5MDRfTElORU9VVFJaQzsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQ0xPQ0tfUkFURVNfMF0gJj0gfldNODkwNF9TUl9NT0RFOworCisJLyogU2V0IENsYXNzIFcgYnkgZGVmYXVsdCAtIHRoaXMgd2lsbCBiZSBtYW5hZ2VkIGJ5IHRoZSBDbGFzcworCSAqIEcgd2lkZ2V0IGF0IHJ1bnRpbWUgd2hlcmUgYnlwYXNzIHBhdGhzIGFyZSBhdmFpbGFibGUuCisJICovCisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0NMQVNTX1dfMF0gfD0gV004OTA0X0NQX0RZTl9QV1I7CisKKwkvKiBVc2Ugbm9ybWFsIGJpYXMgc291cmNlICovCisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0JJQVNfQ09OVFJPTF8wXSAmPSB+V004OTA0X1BPQkNUUkw7CisKKwl3bTg5MDRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCS8qIEJpYXMgbGV2ZWwgY29uZmlndXJhdGlvbiB3aWxsIGhhdmUgZG9uZSBhbiBleHRyYSBlbmFibGUgKi8KKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksIHdtODkwNC0+c3VwcGxpZXMpOworCisJd204OTA0X2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204OTA0X2RhaSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworCitlcnJfZW5hYmxlOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwgd204OTA0LT5zdXBwbGllcyk7CitlcnJfZ2V0OgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwgd204OTA0LT5zdXBwbGllcyk7CitlcnI6CisJa2ZyZWUod204OTA0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg5MDRfdW5yZWdpc3RlcihzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCkKK3sKKwl3bTg5MDRfc2V0X2JpYXNfbGV2ZWwoJndtODkwNC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwgd204OTA0LT5zdXBwbGllcyk7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204OTA0X2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg5MDQtPmNvZGVjKTsKKwlrZnJlZSh3bTg5MDQpOworCXdtODkwNF9jb2RlYyA9IE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5MDRfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODkwNCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5MDRfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg5MDQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg5MDQtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCXdtODkwNC0+ZGV2dHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODkwNCk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKwl3bTg5MDQtPnBkYXRhID0gaTJjLT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204OTA0X3JlZ2lzdGVyKHdtODkwNCwgU05EX1NPQ19JMkMpOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg5MDRfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJd204OTA0X3VucmVnaXN0ZXIod204OTA0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODkwNF9pMmNfaWRbXSA9IHsKKwl7ICJ3bTg5MDQiLCBXTTg5MDQgfSwKKwl7ICJ3bTg5MTIiLCBXTTg5MTIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204OTA0X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg5MDRfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJXTTg5MDQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODkwNF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3Aod204OTA0X2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODkwNF9pMmNfaWQsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHdtODkwNF9tb2Rpbml0KHZvaWQpCit7CisJaW50IHJldDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODkwNF9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004OTA0IEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHdtODkwNF9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODkwNF9leGl0KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZ3bTg5MDRfaTJjX2RyaXZlcik7CisjZW5kaWYKK30KK21vZHVsZV9leGl0KHdtODkwNF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODkwNCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4ODg2ZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmgKQEAgLTAsMCArMSwxNjgxIEBACisvKgorICogd204OTA0LmggIC0tICBXTTg5MDQgQVNvQyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MsIHBsYworICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9XTTg5MDRfSAorI2RlZmluZSBfV004OTA0X0gKKworI2RlZmluZSBXTTg5MDRfQ0xLX01DTEsgMQorI2RlZmluZSBXTTg5MDRfQ0xLX0ZMTCAgMgorCisjZGVmaW5lIFdNODkwNF9GTExfTUNMSyAgICAgICAgICAxCisjZGVmaW5lIFdNODkwNF9GTExfQkNMSyAgICAgICAgICAyCisjZGVmaW5lIFdNODkwNF9GTExfTFJDTEsgICAgICAgICAzCisjZGVmaW5lIFdNODkwNF9GTExfRlJFRV9SVU5OSU5HICA0CisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTA0X2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5MDQ7CisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004OTA0X1NXX1JFU0VUX0FORF9JRCAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgV004OTA0X1JFVklTSU9OCQkJCTB4MDEKKyNkZWZpbmUgV004OTA0X0JJQVNfQ09OVFJPTF8wICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV004OTA0X1ZNSURfQ09OVFJPTF8wICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgV004OTA0X01JQ19CSUFTX0NPTlRST0xfMCAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgV004OTA0X01JQ19CSUFTX0NPTlRST0xfMSAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX0RBQ18wICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgV004OTA0X01JQ19GSUxURVJfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX0FEQ18wICAgICAgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfMCAgICAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfMiAgICAgICAgICAgICAgIDB4MEUKKyNkZWZpbmUgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfMyAgICAgICAgICAgICAgIDB4MEYKKyNkZWZpbmUgV004OTA0X1BPV0VSX01BTkFHRU1FTlRfNiAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgV004OTA0X0NMT0NLX1JBVEVTXzAgICAgICAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgV004OTA0X0NMT0NLX1JBVEVTXzEgICAgICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgV004OTA0X0NMT0NLX1JBVEVTXzIgICAgICAgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgV004OTA0X0FVRElPX0lOVEVSRkFDRV8wICAgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgV004OTA0X0FVRElPX0lOVEVSRkFDRV8xICAgICAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgV004OTA0X0FVRElPX0lOVEVSRkFDRV8yICAgICAgICAgICAgICAgIDB4MUEKKyNkZWZpbmUgV004OTA0X0FVRElPX0lOVEVSRkFDRV8zICAgICAgICAgICAgICAgIDB4MUIKKyNkZWZpbmUgV004OTA0X0RBQ19ESUdJVEFMX1ZPTFVNRV9MRUZUICAgICAgICAgIDB4MUUKKyNkZWZpbmUgV004OTA0X0RBQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVCAgICAgICAgIDB4MUYKKyNkZWZpbmUgV004OTA0X0RBQ19ESUdJVEFMXzAgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgV004OTA0X0RBQ19ESUdJVEFMXzEgICAgICAgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgV004OTA0X0FEQ19ESUdJVEFMX1ZPTFVNRV9MRUZUICAgICAgICAgIDB4MjQKKyNkZWZpbmUgV004OTA0X0FEQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVCAgICAgICAgIDB4MjUKKyNkZWZpbmUgV004OTA0X0FEQ19ESUdJVEFMXzAgICAgICAgICAgICAgICAgICAgIDB4MjYKKyNkZWZpbmUgV004OTA0X0RJR0lUQUxfTUlDUk9QSE9ORV8wICAgICAgICAgICAgIDB4MjcKKyNkZWZpbmUgV004OTA0X0RSQ18wICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgV004OTA0X0RSQ18xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkKKyNkZWZpbmUgV004OTA0X0RSQ18yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkEKKyNkZWZpbmUgV004OTA0X0RSQ18zICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkIKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX0xFRlRfSU5QVVRfMCAgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX1JJR0hUX0lOUFVUXzAgICAgICAgICAgIDB4MkQKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX0xFRlRfSU5QVVRfMSAgICAgICAgICAgIDB4MkUKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX1JJR0hUX0lOUFVUXzEgICAgICAgICAgIDB4MkYKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX09VVDFfTEVGVCAgICAgICAgICAgICAgIDB4MzkKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX09VVDFfUklHSFQgICAgICAgICAgICAgIDB4M0EKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX09VVDJfTEVGVCAgICAgICAgICAgICAgIDB4M0IKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX09VVDJfUklHSFQgICAgICAgICAgICAgIDB4M0MKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX09VVDEyX1pDICAgICAgICAgICAgICAgIDB4M0QKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPXzAgICAgICAgICAgICAgICAgICAgICAgIDB4NDMKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPXzEgICAgICAgICAgICAgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPXzIgICAgICAgICAgICAgICAgICAgICAgIDB4NDUKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPXzQgICAgICAgICAgICAgICAgICAgICAgIDB4NDcKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPXzUgICAgICAgICAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPXzYgICAgICAgICAgICAgICAgICAgICAgIDB4NDkKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPXzcgICAgICAgICAgICAgICAgICAgICAgIDB4NEEKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPXzggICAgICAgICAgICAgICAgICAgICAgIDB4NEIKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPXzkgICAgICAgICAgICAgICAgICAgICAgIDB4NEMKKyNkZWZpbmUgV004OTA0X0RDX1NFUlZPX1JFQURCQUNLXzAgICAgICAgICAgICAgIDB4NEQKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX0hQXzAgICAgICAgICAgICAgICAgICAgIDB4NUEKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX0xJTkVPVVRfMCAgICAgICAgICAgICAgIDB4NUUKKyNkZWZpbmUgV004OTA0X0NIQVJHRV9QVU1QXzAgICAgICAgICAgICAgICAgICAgIDB4NjIKKyNkZWZpbmUgV004OTA0X0NMQVNTX1dfMCAgICAgICAgICAgICAgICAgICAgICAgIDB4NjgKKyNkZWZpbmUgV004OTA0X1dSSVRFX1NFUVVFTkNFUl8wICAgICAgICAgICAgICAgIDB4NkMKKyNkZWZpbmUgV004OTA0X1dSSVRFX1NFUVVFTkNFUl8xICAgICAgICAgICAgICAgIDB4NkQKKyNkZWZpbmUgV004OTA0X1dSSVRFX1NFUVVFTkNFUl8yICAgICAgICAgICAgICAgIDB4NkUKKyNkZWZpbmUgV004OTA0X1dSSVRFX1NFUVVFTkNFUl8zICAgICAgICAgICAgICAgIDB4NkYKKyNkZWZpbmUgV004OTA0X1dSSVRFX1NFUVVFTkNFUl80ICAgICAgICAgICAgICAgIDB4NzAKKyNkZWZpbmUgV004OTA0X0ZMTF9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgIDB4NzQKKyNkZWZpbmUgV004OTA0X0ZMTF9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgIDB4NzUKKyNkZWZpbmUgV004OTA0X0ZMTF9DT05UUk9MXzMgICAgICAgICAgICAgICAgICAgIDB4NzYKKyNkZWZpbmUgV004OTA0X0ZMTF9DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgIDB4NzcKKyNkZWZpbmUgV004OTA0X0ZMTF9DT05UUk9MXzUgICAgICAgICAgICAgICAgICAgIDB4NzgKKyNkZWZpbmUgV004OTA0X0dQSU9fQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgIDB4NzkKKyNkZWZpbmUgV004OTA0X0dQSU9fQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgIDB4N0EKKyNkZWZpbmUgV004OTA0X0dQSU9fQ09OVFJPTF8zICAgICAgICAgICAgICAgICAgIDB4N0IKKyNkZWZpbmUgV004OTA0X0dQSU9fQ09OVFJPTF80ICAgICAgICAgICAgICAgICAgIDB4N0MKKyNkZWZpbmUgV004OTA0X0RJR0lUQUxfUFVMTFMgICAgICAgICAgICAgICAgICAgIDB4N0UKKyNkZWZpbmUgV004OTA0X0lOVEVSUlVQVF9TVEFUVVMgICAgICAgICAgICAgICAgIDB4N0YKKyNkZWZpbmUgV004OTA0X0lOVEVSUlVQVF9TVEFUVVNfTUFTSyAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgV004OTA0X0lOVEVSUlVQVF9QT0xBUklUWSAgICAgICAgICAgICAgIDB4ODEKKyNkZWZpbmUgV004OTA0X0lOVEVSUlVQVF9ERUJPVU5DRSAgICAgICAgICAgICAgIDB4ODIKKyNkZWZpbmUgV004OTA0X0VRMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODYKKyNkZWZpbmUgV004OTA0X0VRMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODcKKyNkZWZpbmUgV004OTA0X0VRMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgKKyNkZWZpbmUgV004OTA0X0VRNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODkKKyNkZWZpbmUgV004OTA0X0VRNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEKKyNkZWZpbmUgV004OTA0X0VRNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEIKKyNkZWZpbmUgV004OTA0X0VRNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEMKKyNkZWZpbmUgV004OTA0X0VROCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQKKyNkZWZpbmUgV004OTA0X0VROSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEUKKyNkZWZpbmUgV004OTA0X0VRMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEYKKyNkZWZpbmUgV004OTA0X0VRMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTAKKyNkZWZpbmUgV004OTA0X0VRMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEKKyNkZWZpbmUgV004OTA0X0VRMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTIKKyNkZWZpbmUgV004OTA0X0VRMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTMKKyNkZWZpbmUgV004OTA0X0VRMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTQKKyNkZWZpbmUgV004OTA0X0VRMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTUKKyNkZWZpbmUgV004OTA0X0VRMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTYKKyNkZWZpbmUgV004OTA0X0VRMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTcKKyNkZWZpbmUgV004OTA0X0VRMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTgKKyNkZWZpbmUgV004OTA0X0VRMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTkKKyNkZWZpbmUgV004OTA0X0VRMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OUEKKyNkZWZpbmUgV004OTA0X0VRMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OUIKKyNkZWZpbmUgV004OTA0X0VRMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OUMKKyNkZWZpbmUgV004OTA0X0VRMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OUQKKyNkZWZpbmUgV004OTA0X0NPTlRST0xfSU5URVJGQUNFX1RFU1RfMSAgICAgICAgIDB4QTEKKyNkZWZpbmUgV004OTA0X0FOQUxPR1VFX09VVFBVVF9CSUFTXzAgICAgICAgICAgIDB4Q0MKKyNkZWZpbmUgV004OTA0X0ZMTF9OQ09fVEVTVF8wICAgICAgICAgICAgICAgICAgIDB4RjcKKyNkZWZpbmUgV004OTA0X0ZMTF9OQ09fVEVTVF8xICAgICAgICAgICAgICAgICAgIDB4RjgKKworI2RlZmluZSBXTTg5MDRfUkVHSVNURVJfQ09VTlQgICAgICAgICAgICAgICAgICAgMTAxCisjZGVmaW5lIFdNODkwNF9NQVhfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICAweEY4CisKKy8qCisgKiBGaWVsZCBEZWZpbml0aW9ucy4KKyAqLworCisvKgorICogUjAgKDB4MDApIC0gU1cgUmVzZXQgYW5kIElECisgKi8KKyNkZWZpbmUgV004OTA0X1NXX1JTVF9ERVZfSUQxX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogU1dfUlNUX0RFVl9JRDEgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X1NXX1JTVF9ERVZfSUQxX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogU1dfUlNUX0RFVl9JRDEgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X1NXX1JTVF9ERVZfSUQxX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogU1dfUlNUX0RFVl9JRDEgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxICgweDAxKSAtIFJldmlzaW9uCisgKi8KKyNkZWZpbmUgV004OTA0X1JFVklTSU9OX01BU0sgICAgICAgICAgICAgIAkweDAwMEYgIC8qIFJFVklTSU9OIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X1JFVklTSU9OX1NISUZUICAgICAgICAgICAgIAkgICAgIDAgIC8qIFJFVklTSU9OIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X1JFVklTSU9OX1dJRFRIICAgICAgICAgICAgIAkgICAgMTYgIC8qIFJFVklTSU9OIC0gWzM6MF0gKi8KKworLyoKKyAqIFI0ICgweDA0KSAtIEJpYXMgQ29udHJvbCAwCisgKi8KKyNkZWZpbmUgV004OTA0X1BPQkNUUkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUE9CQ1RSTCAqLworI2RlZmluZSBXTTg5MDRfUE9CQ1RSTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBQT0JDVFJMICovCisjZGVmaW5lIFdNODkwNF9QT0JDVFJMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFBPQkNUUkwgKi8KKyNkZWZpbmUgV004OTA0X1BPQkNUUkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUE9CQ1RSTCAqLworI2RlZmluZSBXTTg5MDRfSVNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBJU0VMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0lTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSVNFTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9JU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIElTRUwgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfU1RBUlRVUF9CSUFTX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9TVEFSVFVQX0JJQVNfRU5BX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X1NUQVJUVVBfQklBU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogU1RBUlRVUF9CSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfU1RBUlRVUF9CSUFTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9CSUFTX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9CSUFTX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9CSUFTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEJJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9CSUFTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJJQVNfRU5BICovCisKKy8qCisgKiBSNSAoMHgwNSkgLSBWTUlEIENvbnRyb2wgMAorICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0JVRl9FTkEgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9CVUZfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBWTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfQlVGX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0JVRl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9SRVNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBWTUlEX1JFUyAtIFsyOjFdICovCisjZGVmaW5lIFdNODkwNF9WTUlEX1JFU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfUkVTIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfUkVTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVk1JRF9SRVMgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWTUlEX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWTUlEX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBWTUlEX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBWTUlEX0VOQSAqLworCisvKgorICogUjYgKDB4MDYpIC0gTWljIEJpYXMgQ29udHJvbCAwCisgKi8KKyNkZWZpbmUgV004OTA0X01JQ0RFVF9USFJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogTUlDREVUX1RIUiAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9NSUNERVRfVEhSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIE1JQ0RFVF9USFIgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBNSUNERVRfVEhSIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ1NIT1JUX1RIUl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogTUlDU0hPUlRfVEhSIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X01JQ1NIT1JUX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogTUlDU0hPUlRfVEhSIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X01JQ1NIT1JUX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogTUlDU0hPUlRfVEhSIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X01JQ0RFVF9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDREVUX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNERVRfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNERVRfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RFVF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0RFVF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDREVUX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDQklBU19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDQklBU19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDQklBU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDQklBU19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCSUFTX0VOQSAqLworCisvKgorICogUjcgKDB4MDcpIC0gTWljIEJpYXMgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRklMVEVSX0VOQSAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTUlDX0RFVF9GSUxURVJfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0ZJTFRFUl9FTkFfTUFTSyAgICAgICAgICAweDgwMDAgIC8qIE1JQ19ERVRfRklMVEVSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9GSUxURVJfRU5BX1NISUZUICAgICAgICAgICAgIDE1ICAvKiBNSUNfREVUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRklMVEVSX0VOQV9XSURUSCAgICAgICAgICAgICAgMSAgLyogTUlDX0RFVF9GSUxURVJfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfRklMVEVSX0VOQSAgICAgICAgICAgICAweDQwMDAgIC8qIE1JQ19TSE9SVF9GSUxURVJfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfRklMVEVSX0VOQV9NQVNLICAgICAgICAweDQwMDAgIC8qIE1JQ19TSE9SVF9GSUxURVJfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfRklMVEVSX0VOQV9TSElGVCAgICAgICAgICAgMTQgIC8qIE1JQ19TSE9SVF9GSUxURVJfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfRklMVEVSX0VOQV9XSURUSCAgICAgICAgICAgIDEgIC8qIE1JQ19TSE9SVF9GSUxURVJfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX1NFTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIE1JQ0JJQVNfU0VMIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ0JJQVNfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDQklBU19TRUwgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfTUlDQklBU19TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBNSUNCSUFTX1NFTCAtIFsyOjBdICovCisKKy8qCisgKiBSOCAoMHgwOCkgLSBBbmFsb2d1ZSBEQUMgMAorICovCisjZGVmaW5lIFdNODkwNF9EQUNfQklBU19TRUxfTUFTSyAgICAgICAgICAgICAgICAweDAwMTggIC8qIERBQ19CSUFTX1NFTCAtIFs0OjNdICovCisjZGVmaW5lIFdNODkwNF9EQUNfQklBU19TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ19CSUFTX1NFTCAtIFs0OjNdICovCisjZGVmaW5lIFdNODkwNF9EQUNfQklBU19TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ19CSUFTX1NFTCAtIFs0OjNdICovCisjZGVmaW5lIFdNODkwNF9EQUNfVk1JRF9CSUFTX1NFTF9NQVNLICAgICAgICAgICAweDAwMDYgIC8qIERBQ19WTUlEX0JJQVNfU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WTUlEX0JJQVNfU0VMX1NISUZUICAgICAgICAgICAgICAgMSAgLyogREFDX1ZNSURfQklBU19TRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZNSURfQklBU19TRUxfV0lEVEggICAgICAgICAgICAgICAyICAvKiBEQUNfVk1JRF9CSUFTX1NFTCAtIFsyOjFdICovCisKKy8qCisgKiBSOSAoMHgwOSkgLSBtaWMgRmlsdGVyIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9TRVRfVEhSRVNIT0xEX01BU0sgICAgICAgMHhGMDAwICAvKiBNSUNfREVUX1NFVF9USFJFU0hPTEQgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1NFVF9USFJFU0hPTERfU0hJRlQgICAgICAgICAgMTIgIC8qIE1JQ19ERVRfU0VUX1RIUkVTSE9MRCAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfU0VUX1RIUkVTSE9MRF9XSURUSCAgICAgICAgICAgNCAgLyogTUlDX0RFVF9TRVRfVEhSRVNIT0xEIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9SRVNFVF9USFJFU0hPTERfTUFTSyAgICAgMHgwRjAwICAvKiBNSUNfREVUX1JFU0VUX1RIUkVTSE9MRCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9SRVNFVF9USFJFU0hPTERfU0hJRlQgICAgICAgICA4ICAvKiBNSUNfREVUX1JFU0VUX1RIUkVTSE9MRCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9SRVNFVF9USFJFU0hPTERfV0lEVEggICAgICAgICA0ICAvKiBNSUNfREVUX1JFU0VUX1RIUkVTSE9MRCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX1NFVF9USFJFU0hPTERfTUFTSyAgICAgMHgwMEYwICAvKiBNSUNfU0hPUlRfU0VUX1RIUkVTSE9MRCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfU0VUX1RIUkVTSE9MRF9TSElGVCAgICAgICAgIDQgIC8qIE1JQ19TSE9SVF9TRVRfVEhSRVNIT0xEIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9TRVRfVEhSRVNIT0xEX1dJRFRIICAgICAgICAgNCAgLyogTUlDX1NIT1JUX1NFVF9USFJFU0hPTEQgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX1JFU0VUX1RIUkVTSE9MRF9NQVNLICAgMHgwMDBGICAvKiBNSUNfU0hPUlRfUkVTRVRfVEhSRVNIT0xEIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9SRVNFVF9USFJFU0hPTERfU0hJRlQgICAgICAgMCAgLyogTUlDX1NIT1JUX1JFU0VUX1RIUkVTSE9MRCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfUkVTRVRfVEhSRVNIT0xEX1dJRFRIICAgICAgIDQgIC8qIE1JQ19TSE9SVF9SRVNFVF9USFJFU0hPTEQgLSBbMzowXSAqLworCisvKgorICogUjEwICgweDBBKSAtIEFuYWxvZ3VlIEFEQyAwCisgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19PU1IxMjggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MDRfQURDX09TUjEyOF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODkwNF9BRENfT1NSMTI4X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0FEQ19PU1IxMjhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX09TUjEyOCAqLworCisvKgorICogUjEyICgweDBDKSAtIFBvd2VyIE1hbmFnZW1lbnQgMAorICovCisjZGVmaW5lIFdNODkwNF9JTkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU5MX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTkxfRU5BICovCisjZGVmaW5lIFdNODkwNF9JTkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU5SX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTlJfRU5BICovCisjZGVmaW5lIFdNODkwNF9JTlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5SX0VOQSAqLworCisvKgorICogUjE0ICgweDBFKSAtIFBvd2VyIE1hbmFnZW1lbnQgMgorICovCisjZGVmaW5lIFdNODkwNF9IUExfUEdBX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfUEdBX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfUEdBX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfUEdBX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfUEdBX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQUl9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfUEdBX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQUl9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfUEdBX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQUl9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfUEdBX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9QR0FfRU5BICovCisKKy8qCisgKiBSMTUgKDB4MEYpIC0gUG93ZXIgTWFuYWdlbWVudCAzCisgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1BHQV9FTkEgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTElORU9VVExfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUEdBX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9QR0FfRU5BX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1BHQV9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUEdBX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUUl9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9QR0FfRU5BX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIExJTkVPVVRSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1BHQV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogTElORU9VVFJfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUEdBX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9QR0FfRU5BICovCisKKy8qCisgKiBSMTggKDB4MTIpIC0gUG93ZXIgTWFuYWdlbWVudCA2CisgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9FTkEgKi8KKworLyoKKyAqIFIyMCAoMHgxNCkgLSBDbG9jayBSYXRlcyAwCisgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfRElWMTYgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogVE9DTEtfUkFURV9ESVYxNiAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9ESVYxNl9NQVNLICAgICAgICAgICAgMHg0MDAwICAvKiBUT0NMS19SQVRFX0RJVjE2ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX0RJVjE2X1NISUZUICAgICAgICAgICAgICAgMTQgIC8qIFRPQ0xLX1JBVEVfRElWMTYgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfRElWMTZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogVE9DTEtfUkFURV9ESVYxNiAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9YNCAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBUT0NMS19SQVRFX1g0ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX1g0X01BU0sgICAgICAgICAgICAgICAweDIwMDAgIC8qIFRPQ0xLX1JBVEVfWDQgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfWDRfU0hJRlQgICAgICAgICAgICAgICAgICAxMyAgLyogVE9DTEtfUkFURV9YNCAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9YNF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBUT0NMS19SQVRFX1g0ICovCisjZGVmaW5lIFdNODkwNF9TUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNSX01PREUgKi8KKyNkZWZpbmUgV004OTA0X1NSX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogU1JfTU9ERSAqLworI2RlZmluZSBXTTg5MDRfU1JfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBTUl9NT0RFICovCisjZGVmaW5lIFdNODkwNF9TUl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNSX01PREUgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfRElWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUNMS19ESVYgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUNMS19ESVYgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUNMS19ESVYgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS19ESVYgKi8KKworLyoKKyAqIFIyMSAoMHgxNSkgLSBDbG9jayBSYXRlcyAxCisgKi8KKyNkZWZpbmUgV004OTA0X0NMS19TWVNfUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4M0MwMCAgLyogQ0xLX1NZU19SQVRFIC0gWzEzOjEwXSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX1NZU19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDEwICAvKiBDTEtfU1lTX1JBVEUgLSBbMTM6MTBdICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDQgIC8qIENMS19TWVNfUkFURSAtIFsxMzoxMF0gKi8KKyNkZWZpbmUgV004OTA0X1NBTVBMRV9SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogU0FNUExFX1JBVEUgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfU0FNUExFX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBTQU1QTEVfUkFURSAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9TQU1QTEVfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNBTVBMRV9SQVRFIC0gWzI6MF0gKi8KKworLyoKKyAqIFIyMiAoMHgxNikgLSBDbG9jayBSYXRlcyAyCisgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfSU5WICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTUNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfSU5WX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTUNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogTUNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X1NZU0NMS19TUkMgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5MDRfU1lTQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODkwNF9TWVNDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTA0X1NZU0NMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURSAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX01BU0sgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFRPQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMiAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODkwNF9PUENMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MDRfT1BDTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9PUENMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX1NZU19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBDTEtfU1lTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX1NZU19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBDTEtfU1lTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX1NZU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBDTEtfU1lTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX1NZU19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtfU1lTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX0RTUF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBDTEtfRFNQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX0RTUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBDTEtfRFNQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX0RTUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtfRFNQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ0xLX0RTUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtfRFNQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUT0NMS19FTkEgKi8KKworLyoKKyAqIFIyNCAoMHgxOCkgLSBBdWRpbyBJbnRlcmZhY2UgMAorICovCisjZGVmaW5lIFdNODkwNF9EQUNMX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERBQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9EQUNMX0RBVElOVl9NQVNLICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERBQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9EQUNMX0RBVElOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERBQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9EQUNMX0RBVElOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9EQUNSX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERBQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9EQUNSX0RBVElOVl9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERBQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9EQUNSX0RBVElOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERBQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9EQUNSX0RBVElOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9EQUNfQk9PU1RfTUFTSyAgICAgICAgICAgICAgICAgICAweDA2MDAgIC8qIERBQ19CT09TVCAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5MDRfREFDX0JPT1NUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBEQUNfQk9PU1QgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDX0JPT1NUIC0gWzEwOjldICovCisjZGVmaW5lIFdNODkwNF9MT09QQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODkwNF9MT09QQkFDS19NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODkwNF9MT09QQkFDS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODkwNF9MT09QQkFDS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENMX1NSQyAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRkFEQ0xfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENMX1NSQ19NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRkFEQ0xfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENMX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEFJRkFEQ0xfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENMX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRkFEQ0xfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENSX1NSQyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEFJRkFEQ1JfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENSX1NSQ19NQVNLICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEFJRkFEQ1JfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENSX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEFJRkFEQ1JfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENSX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRkFEQ1JfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNMX1NSQyAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFJRkRBQ0xfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNMX1NSQ19NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFJRkRBQ0xfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNMX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFJRkRBQ0xfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNMX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRkRBQ0xfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNSX1NSQyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRkRBQ1JfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNSX1NSQ19NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRkRBQ1JfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNSX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRkRBQ1JfU1JDICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNSX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRkRBQ1JfU1JDICovCisjZGVmaW5lIFdNODkwNF9BRENfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFEQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9BRENfQ09NUF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFEQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9BRENfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEFEQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9BRENfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9BRENfQ09NUE1PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5MDRfQURDX0NPTVBNT0RFX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9BRENfQ09NUE1PREVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5MDRfREFDX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5MDRfREFDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5MDRfREFDX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5MDRfREFDX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5MDRfREFDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19DT01QTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUE1PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5MDRfREFDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfQ09NUE1PREUgKi8KKworLyoKKyAqIFIyNSAoMHgxOSkgLSBBdWRpbyBJbnRlcmZhY2UgMQorICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE1fTUFTSyAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE1fQ0hBTiAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNX0NIQU5fTUFTSyAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9DSEFOX1NISUZUICAgICAgICAgICAgICAgIDEyICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE1fQ0hBTl9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRkFEQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE1fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDExICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRkFEQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE1fQ0hBTiAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNX0NIQU5fTUFTSyAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9DSEFOX1NISUZUICAgICAgICAgICAgICAgIDEwICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE1fQ0hBTl9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZfVFJJUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRl9UUklTICovCisjZGVmaW5lIFdNODkwNF9BSUZfVFJJU19NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRl9UUklTICovCisjZGVmaW5lIFdNODkwNF9BSUZfVFJJU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRl9UUklTICovCisjZGVmaW5lIFdNODkwNF9BSUZfVFJJU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRl9UUklTICovCisjZGVmaW5lIFdNODkwNF9BSUZfQkNMS19JTlYgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQUlGX0JDTEtfSU5WX01BU0sgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9CQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgNyAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9BSUZfQkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQkNMS19ESVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBCQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5MDRfQkNMS19ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBCQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5MDRfQkNMS19ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBCQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5MDRfQkNMS19ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5MDRfQUlGX0xSQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUZfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9BSUZfTFJDTEtfSU5WX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9MUkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQUlGX0xSQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9BSUZfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIEFJRl9XTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9BSUZfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRl9XTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9BSUZfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRl9XTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9BSUZfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEFJRl9GTVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfQUlGX0ZNVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUZfRk1UIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9GTVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGX0ZNVCAtIFsxOjBdICovCisKKy8qCisgKiBSMjYgKDB4MUEpIC0gQXVkaW8gSW50ZXJmYWNlIDIKKyAqLworI2RlZmluZSBXTTg5MDRfT1BDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgMHgwRjAwICAvKiBPUENMS19ESVYgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogT1BDTEtfRElWIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9PUENMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIE9QQ0xLX0RJViAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBCQ0xLX0RJViAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEJDTEtfRElWIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogQkNMS19ESVYgLSBbNDowXSAqLworCisvKgorICogUjI3ICgweDFCKSAtIEF1ZGlvIEludGVyZmFjZSAzCisgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX0RJUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTFJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIExSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBMUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19SQVRFX01BU0sgICAgICAgICAgICAgICAgICAweDA3RkYgIC8qIExSQ0xLX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTFJDTEtfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDExICAvKiBMUkNMS19SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSMzAgKDB4MUUpIC0gREFDIERpZ2l0YWwgVm9sdW1lIExlZnQKKyAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQUNMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ0xfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIzMSAoMHgxRikgLSBEQUMgRGlnaXRhbCBWb2x1bWUgUmlnaHQKKyAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQUNSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ1JfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIzMiAoMHgyMCkgLSBEQUMgRGlnaXRhbCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfREFDX1NWT0xfTUFTSyAgICAgICAgICAgICAgIDB4MEYwMCAgLyogQURDTF9EQUNfU1ZPTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9EQUNfU1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENMX0RBQ19TVk9MIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBQ19TVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfREFDX1NWT0wgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfREFDX1NWT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGMCAgLyogQURDUl9EQUNfU1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBQ19TVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ1JfREFDX1NWT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9EQUNfU1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENSX0RBQ19TVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19UT19EQUNMX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogQURDX1RPX0RBQ0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfQURDX1RPX0RBQ0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfVE9fREFDTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9BRENfVE9fREFDTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19UT19EQUNMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19UT19EQUNSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogQURDX1RPX0RBQ1IgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfQURDX1RPX0RBQ1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENfVE9fREFDUiAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9BRENfVE9fREFDUl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19UT19EQUNSIC0gWzE6MF0gKi8KKworLyoKKyAqIFIzMyAoMHgyMSkgLSBEQUMgRGlnaXRhbCAxCisgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NT05PICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogREFDX01PTk8gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NT05PX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogREFDX01PTk8gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NT05PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogREFDX01PTk8gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NT05PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01PTk8gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19TQl9GSUxUICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREFDX1NCX0ZJTFQgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19TQl9GSUxUX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREFDX1NCX0ZJTFQgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19TQl9GSUxUX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogREFDX1NCX0ZJTFQgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19TQl9GSUxUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX1NCX0ZJTFQgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFUkFURSAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkwNF9EQUNfTVVURVJBVEVfTUFTSyAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEVSQVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDEwICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkwNF9EQUNfVU5NVVRFX1JBTVAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5MDRfREFDX1VOTVVURV9SQU1QX01BU0sgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19VTk1VVEVfUkFNUF9TSElGVCAgICAgICAgICAgICAgICAgOSAgLyogREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODkwNF9EQUNfVU5NVVRFX1JBTVBfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5MDRfREFDX09TUjEyOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODkwNF9EQUNfT1NSMTI4X01BU0sgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0RBQ19PU1IxMjhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MDRfREFDX09TUjEyOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODkwNF9EQUNfTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ19NVVRFICovCisjZGVmaW5lIFdNODkwNF9EQUNfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ19NVVRFICovCisjZGVmaW5lIFdNODkwNF9EQUNfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ19NVVRFICovCisjZGVmaW5lIFdNODkwNF9EQUNfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NVVRFICovCisjZGVmaW5lIFdNODkwNF9ERUVNUEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDYgIC8qIERFRU1QSCAtIFsyOjFdICovCisjZGVmaW5lIFdNODkwNF9ERUVNUEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERFRU1QSCAtIFsyOjFdICovCisjZGVmaW5lIFdNODkwNF9ERUVNUEhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERFRU1QSCAtIFsyOjFdICovCisKKy8qCisgKiBSMzYgKDB4MjQpIC0gQURDIERpZ2l0YWwgVm9sdW1lIExlZnQKKyAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQURDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9BRENMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFEQ0xfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIzNyAoMHgyNSkgLSBBREMgRGlnaXRhbCBWb2x1bWUgUmlnaHQKKyAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQURDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9BRENSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFEQ1JfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIzOCAoMHgyNikgLSBBREMgRGlnaXRhbCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19IUEZfQ1VUX01BU0sgICAgICAgICAgICAgICAgIDB4MDA2MCAgLyogQURDX0hQRl9DVVQgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENfSFBGX0NVVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODkwNF9BRENfSFBGX0NVVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19IUEZfQ1VUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19IUEYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDX0hQRiAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENfSFBGICovCisjZGVmaW5lIFdNODkwNF9BRENfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ19IUEYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19IUEZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0hQRiAqLworI2RlZmluZSBXTTg5MDRfQURDTF9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfQURDTF9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfQURDTF9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfQURDTF9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfQURDUl9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfQURDUl9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfQURDUl9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg5MDRfQURDUl9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX0RBVElOViAqLworCisvKgorICogUjM5ICgweDI3KSAtIERpZ2l0YWwgTWljcm9waG9uZSAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RNSUNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRE1JQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RNSUNfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRE1JQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RNSUNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogRE1JQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RNSUNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RNSUNfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRE1JQ19TUkMgKi8KKyNkZWZpbmUgV004OTA0X0RNSUNfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRE1JQ19TUkMgKi8KKyNkZWZpbmUgV004OTA0X0RNSUNfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMSAgLyogRE1JQ19TUkMgKi8KKyNkZWZpbmUgV004OTA0X0RNSUNfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQ19TUkMgKi8KKworLyoKKyAqIFI0MCAoMHgyOCkgLSBEUkMgMAorICovCisjZGVmaW5lIFdNODkwNF9EUkNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIERSQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBEUkNfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19EQUNfUEFUSCAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogRFJDX0RBQ19QQVRIICovCisjZGVmaW5lIFdNODkwNF9EUkNfREFDX1BBVEhfTUFTSyAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERSQ19EQUNfUEFUSCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RBQ19QQVRIX1NISUZUICAgICAgICAgICAgICAgICAgIDE0ICAvKiBEUkNfREFDX1BBVEggKi8KKyNkZWZpbmUgV004OTA0X0RSQ19EQUNfUEFUSF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0RBQ19QQVRIICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfSFlTVF9MVkxfTUFTSyAgICAgICAgICAgICAweDE4MDAgIC8qIERSQ19HU19IWVNUX0xWTCAtIFsxMjoxMV0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19IWVNUX0xWTF9TSElGVCAgICAgICAgICAgICAgICAxMSAgLyogRFJDX0dTX0hZU1RfTFZMIC0gWzEyOjExXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBEUkNfR1NfSFlTVF9MVkwgLSBbMTI6MTFdICovCisjZGVmaW5lIFdNODkwNF9EUkNfU1RBUlRVUF9HQUlOX01BU0sgICAgICAgICAgICAweDA3QzAgIC8qIERSQ19TVEFSVFVQX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19TVEFSVFVQX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgNiAgLyogRFJDX1NUQVJUVVBfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1NUQVJUVVBfR0FJTl9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBEUkNfU1RBUlRVUF9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkwNF9EUkNfRkZfREVMQVkgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERSQ19GRl9ERUxBWSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0ZGX0RFTEFZX01BU0sgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEUkNfRkZfREVMQVkgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19GRl9ERUxBWV9TSElGVCAgICAgICAgICAgICAgICAgICAgNSAgLyogRFJDX0ZGX0RFTEFZICovCisjZGVmaW5lIFdNODkwNF9EUkNfRkZfREVMQVlfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19GRl9ERUxBWSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEUkNfR1NfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERSQ19HU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMyAgLyogRFJDX0dTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfR1NfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERSQ19RUiAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEUkNfUVIgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX1FSICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19RUiAqLworI2RlZmluZSBXTTg5MDRfRFJDX0FOVElDTElQICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BTlRJQ0xJUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODkwNF9EUkNfQU5USUNMSVBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0FOVElDTElQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19IWVNUICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFJDX0dTX0hZU1QgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19IWVNUX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFJDX0dTX0hZU1QgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19IWVNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFJDX0dTX0hZU1QgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19IWVNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0dTX0hZU1QgKi8KKworLyoKKyAqIFI0MSAoMHgyOSkgLSBEUkMgMQorICovCisjZGVmaW5lIFdNODkwNF9EUkNfQVRLX01BU0sgICAgICAgICAgICAgICAgICAgICAweEYwMDAgIC8qIERSQ19BVEsgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODkwNF9EUkNfQVRLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERSQ19BVEsgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODkwNF9EUkNfQVRLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERSQ19BVEsgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODkwNF9EUkNfRENZX01BU0sgICAgICAgICAgICAgICAgICAgICAweDBGMDAgIC8qIERSQ19EQ1kgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFJDX0RDWSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEUkNfRENZIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfVEhSX01BU0sgICAgICAgICAgICAgICAgICAweDAwQzAgIC8qIERSQ19RUl9USFIgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBEUkNfUVJfVEhSIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9USFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX1FSX1RIUiAtIFs3OjZdICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfRENZX01BU0sgICAgICAgICAgICAgICAgICAweDAwMzAgIC8qIERSQ19RUl9EQ1kgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEUkNfUVJfRENZIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX1FSX0RDWSAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTUlOR0FJTl9NQVNLICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIERSQ19NSU5HQUlOIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19NSU5HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX01JTkdBSU4gLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfTUlOR0FJTiAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTUFYR0FJTl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIERSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19NQVhHQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFJDX01BWEdBSU4gLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX01BWEdBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfTUFYR0FJTiAtIFsxOjBdICovCisKKy8qCisgKiBSNDIgKDB4MkEpIC0gRFJDIDIKKyAqLworI2RlZmluZSBXTTg5MDRfRFJDX0hJX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBEUkNfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODkwNF9EUkNfSElfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19ISV9DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0xPX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBEUkNfTE9fQ09NUCAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTE9fQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERSQ19MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19MT19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogRFJDX0xPX0NPTVAgLSBbMjowXSAqLworCisvKgorICogUjQzICgweDJCKSAtIERSQyAzCisgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19LTkVFX0lQX01BU0sgICAgICAgICAgICAgICAgIDB4MDdFMCAgLyogRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19LTkVFX0lQX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19LTkVFX0lQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNiAgLyogRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19LTkVFX09QX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRFJDX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9EUkNfS05FRV9PUF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERSQ19LTkVFX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFI0NCAoMHgyQykgLSBBbmFsb2d1ZSBMZWZ0IElucHV0IDAKKyAqLworI2RlZmluZSBXTTg5MDRfTElOTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5NVVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTk1VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTElOTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElOTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5fVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIExJTl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfTElOX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMSU5fVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTElOX1ZPTCAtIFs0OjBdICovCisKKy8qCisgKiBSNDUgKDB4MkQpIC0gQW5hbG9ndWUgUmlnaHQgSW5wdXQgMAorICovCisjZGVmaW5lIFdNODkwNF9SSU5NVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X1JJTk1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUklOTVVURSAqLworI2RlZmluZSBXTTg5MDRfUklOTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9SSU5NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X1JJTl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogUklOX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9SSU5fVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJJTl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfUklOX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBSSU5fVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFI0NiAoMHgyRSkgLSBBbmFsb2d1ZSBMZWZ0IElucHV0IDEKKyAqLworI2RlZmluZSBXTTg5MDRfSU5MX0NNX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTkxfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9JTkxfQ01fRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOTF9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9DTV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogSU5MX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5MX0NNX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTkxfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9MX0lQX1NFTF9OX01BU0sgICAgICAgICAgICAgICAgICAweDAwMzAgIC8qIExfSVBfU0VMX04gLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfTF9JUF9TRUxfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMX0lQX1NFTF9OIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X0xfSVBfU0VMX05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogTF9JUF9TRUxfTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9MX0lQX1NFTF9QX01BU0sgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIExfSVBfU0VMX1AgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTF9JUF9TRUxfUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMX0lQX1NFTF9QIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0xfSVBfU0VMX1BfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogTF9JUF9TRUxfUCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9MX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIExfTU9ERSAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9MX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExfTU9ERSAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9MX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExfTU9ERSAtIFsxOjBdICovCisKKy8qCisgKiBSNDcgKDB4MkYpIC0gQW5hbG9ndWUgUmlnaHQgSW5wdXQgMQorICovCisjZGVmaW5lIFdNODkwNF9JTlJfQ01fRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOUl9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9DTV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU5SX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0NNX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTlJfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9JTlJfQ01fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOUl9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1JfSVBfU0VMX05fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogUl9JUF9TRUxfTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9SX0lQX1NFTF9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJfSVBfU0VMX04gLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfUl9JUF9TRUxfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBSX0lQX1NFTF9OIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X1JfSVBfU0VMX1BfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogUl9JUF9TRUxfUCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9SX0lQX1NFTF9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJfSVBfU0VMX1AgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfUl9JUF9TRUxfUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBSX0lQX1NFTF9QIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X1JfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogUl9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X1JfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUl9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X1JfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogUl9NT0RFIC0gWzE6MF0gKi8KKworLyoKKyAqIFI1NyAoMHgzOSkgLSBBbmFsb2d1ZSBPVVQxIExlZnQKKyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMX01VVEUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBIUE9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRfVlUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUE9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMWkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVExaQyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVExaQyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVExaQyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVExaQyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBIUE9VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVRMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUTF9WT0wgLSBbNTowXSAqLworCisvKgorICogUjU4ICgweDNBKSAtIEFuYWxvZ3VlIE9VVDEgUmlnaHQKKyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSX01VVEUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBIUE9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRfVlUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUE9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSWkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVFJaQyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVFJaQyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVFJaQyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVFJaQyAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBIUE9VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVRSX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUUl9WT0wgLSBbNTowXSAqLworCisvKgorICogUjU5ICgweDNCKSAtIEFuYWxvZ3VlIE9VVDIgTGVmdAorICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9NVVRFICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExJTkVPVVRMX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX01VVEVfTUFTSyAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTElORU9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICA4ICAvKiBMSU5FT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlUgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExaQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSU5FT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTFpDX01BU0sgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTElORU9VVExaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAweDAwM0YgIC8qIExJTkVPVVRMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIExJTkVPVVRMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVRMX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSNjAgKDB4M0MpIC0gQW5hbG9ndWUgT1VUMiBSaWdodAorICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9NVVRFICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExJTkVPVVRSX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX01VVEVfTUFTSyAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTElORU9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICA4ICAvKiBMSU5FT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlUgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJaQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSU5FT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUlpDX01BU0sgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTElORU9VVFJaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAweDAwM0YgIC8qIExJTkVPVVRSX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIExJTkVPVVRSX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVRSX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSNjEgKDB4M0QpIC0gQW5hbG9ndWUgT1VUMTIgWkMKKyAqLworI2RlZmluZSBXTTg5MDRfSFBMX0JZUF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBIUExfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0JZUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBIUExfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0JZUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAzICAvKiBIUExfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0JZUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUExfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0JZUF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUFJfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0JZUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUFJfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0JZUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBIUFJfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0JZUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfQllQX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9CWVBfRU5BX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIExJTkVPVVRMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0JZUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfQllQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9CWVBfRU5BICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExJTkVPVVRSX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0JZUF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVFJfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfQllQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBMSU5FT1VUUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9CWVBfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX0JZUF9FTkEgKi8KKworLyoKKyAqIFI2NyAoMHg0MykgLSBEQyBTZXJ2byAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8zICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRENTX0VOQV9DSEFOXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8zX01BU0sgICAgICAgICAgICAgIDB4MDAwOCAgLyogRENTX0VOQV9DSEFOXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8zX1NISUZUICAgICAgICAgICAgICAgICAgMyAgLyogRENTX0VOQV9DSEFOXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8zX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0VOQV9DSEFOXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8yICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRENTX0VOQV9DSEFOXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8yX01BU0sgICAgICAgICAgICAgIDB4MDAwNCAgLyogRENTX0VOQV9DSEFOXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8yX1NISUZUICAgICAgICAgICAgICAgICAgMiAgLyogRENTX0VOQV9DSEFOXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8yX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0VOQV9DSEFOXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8xICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8xX01BU0sgICAgICAgICAgICAgIDB4MDAwMiAgLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8xX1NISUZUICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8xX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8wICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRENTX0VOQV9DSEFOXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8wX01BU0sgICAgICAgICAgICAgIDB4MDAwMSAgLyogRENTX0VOQV9DSEFOXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8wX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRENTX0VOQV9DSEFOXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19FTkFfQ0hBTl8wX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0VOQV9DSEFOXzAgKi8KKworLyoKKyAqIFI2OCAoMHg0NCkgLSBEQyBTZXJ2byAxCisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8zICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8zX01BU0sgICAgICAgICAgIDB4ODAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8zX1NISUZUICAgICAgICAgICAgICAxNSAgLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8zX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8yICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8yX01BU0sgICAgICAgICAgIDB4NDAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8yX1NISUZUICAgICAgICAgICAgICAxNCAgLyogRENTX1RSSUdfU0lOR0xFXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8yX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8xICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8xX01BU0sgICAgICAgICAgIDB4MjAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8xX1NISUZUICAgICAgICAgICAgICAxMyAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8wICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8wX01BU0sgICAgICAgICAgIDB4MTAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8wX1NISUZUICAgICAgICAgICAgICAxMiAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NJTkdMRV8wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18zICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRENTX1RSSUdfU0VSSUVTXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18zX01BU0sgICAgICAgICAgIDB4MDgwMCAgLyogRENTX1RSSUdfU0VSSUVTXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18zX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRENTX1RSSUdfU0VSSUVTXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18zX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18yICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRENTX1RSSUdfU0VSSUVTXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18yX01BU0sgICAgICAgICAgIDB4MDQwMCAgLyogRENTX1RSSUdfU0VSSUVTXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18yX1NISUZUICAgICAgICAgICAgICAxMCAgLyogRENTX1RSSUdfU0VSSUVTXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18yX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18xICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18xX01BU0sgICAgICAgICAgIDB4MDIwMCAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18xX1NISUZUICAgICAgICAgICAgICAgOSAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18wICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18wX01BU0sgICAgICAgICAgIDB4MDEwMCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18wX1NISUZUICAgICAgICAgICAgICAgOCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NFUklFU18wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRENTX1RSSUdfU1RBUlRVUF8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzNfTUFTSyAgICAgICAgICAweDAwODAgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8zX1NISUZUICAgICAgICAgICAgICA3ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfM19XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzIgICAgICAgICAgICAgICAweDAwNDAgIC8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8yX01BU0sgICAgICAgICAgMHgwMDQwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMl9TSElGVCAgICAgICAgICAgICAgNiAgLyogRENTX1RSSUdfU1RBUlRVUF8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzJfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8xICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMV9NQVNLICAgICAgICAgIDB4MDAyMCAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzFfU0hJRlQgICAgICAgICAgICAgIDUgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8xX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMCAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzBfTUFTSyAgICAgICAgICAweDAwMTAgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8wX1NISUZUICAgICAgICAgICAgICA0ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMF9XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMyAgICAgICAgICAgICAgICAweDAwMDggIC8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfM19NQVNLICAgICAgICAgICAweDAwMDggIC8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfM19TSElGVCAgICAgICAgICAgICAgIDMgIC8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfM19XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMiAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERDU19UUklHX0RBQ19XUl8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMl9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIERDU19UUklHX0RBQ19XUl8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMl9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIERDU19UUklHX0RBQ19XUl8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMSAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERDU19UUklHX0RBQ19XUl8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMV9NQVNLICAgICAgICAgICAweDAwMDIgIC8qIERDU19UUklHX0RBQ19XUl8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMV9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMCAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERDU19UUklHX0RBQ19XUl8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMF9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIERDU19UUklHX0RBQ19XUl8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMF9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIERDU19UUklHX0RBQ19XUl8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19EQUNfV1JfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX0RBQ19XUl8wICovCisKKy8qCisgKiBSNjkgKDB4NDUpIC0gREMgU2Vydm8gMgorICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVElNRVJfUEVSSU9EXzIzX01BU0sgICAgICAgICAweDBGMDAgIC8qIERDU19USU1FUl9QRVJJT0RfMjMgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19USU1FUl9QRVJJT0RfMjNfU0hJRlQgICAgICAgICAgICAgOCAgLyogRENTX1RJTUVSX1BFUklPRF8yMyAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RJTUVSX1BFUklPRF8yM19XSURUSCAgICAgICAgICAgICA0ICAvKiBEQ1NfVElNRVJfUEVSSU9EXzIzIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVElNRVJfUEVSSU9EXzAxX01BU0sgICAgICAgICAweDAwMEYgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RJTUVSX1BFUklPRF8wMV9TSElGVCAgICAgICAgICAgICAwICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19USU1FUl9QRVJJT0RfMDFfV0lEVEggICAgICAgICAgICAgNCAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCisKKy8qCisgKiBSNzEgKDB4NDcpIC0gREMgU2Vydm8gNAorICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU0VSSUVTX05PXzIzX01BU0sgICAgICAgICAgICAweDAwN0YgIC8qIERDU19TRVJJRVNfTk9fMjMgLSBbNjowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NFUklFU19OT18yM19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfU0VSSUVTX05PXzIzIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19TRVJJRVNfTk9fMjNfV0lEVEggICAgICAgICAgICAgICAgNyAgLyogRENTX1NFUklFU19OT18yMyAtIFs2OjBdICovCisKKy8qCisgKiBSNzIgKDB4NDgpIC0gREMgU2Vydm8gNQorICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU0VSSUVTX05PXzAxX01BU0sgICAgICAgICAgICAweDAwN0YgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NFUklFU19OT18wMV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19TRVJJRVNfTk9fMDFfV0lEVEggICAgICAgICAgICAgICAgNyAgLyogRENTX1NFUklFU19OT18wMSAtIFs2OjBdICovCisKKy8qCisgKiBSNzMgKDB4NDkpIC0gREMgU2Vydm8gNgorICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8zX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIERDU19EQUNfV1JfVkFMXzMgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfM19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfREFDX1dSX1ZBTF8zIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzNfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMyAtIFs3OjBdICovCisKKy8qCisgKiBSNzQgKDB4NEEpIC0gREMgU2Vydm8gNworICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8yX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIERDU19EQUNfV1JfVkFMXzIgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfREFDX1dSX1ZBTF8yIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzJfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCisKKy8qCisgKiBSNzUgKDB4NEIpIC0gREMgU2Vydm8gOAorICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8xX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzFfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFs3OjBdICovCisKKy8qCisgKiBSNzYgKDB4NEMpIC0gREMgU2Vydm8gOQorICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8wX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzBfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCisKKy8qCisgKiBSNzcgKDB4NEQpIC0gREMgU2Vydm8gUmVhZGJhY2sgMAorICovCisjZGVmaW5lIFdNODkwNF9EQ1NfQ0FMX0NPTVBMRVRFX01BU0sgICAgICAgICAgICAweDBGMDAgIC8qIERDU19DQUxfQ09NUExFVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19DQUxfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogRENTX0NBTF9DT01QTEVURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRENTX0NBTF9DT01QTEVURV9XSURUSCAgICAgICAgICAgICAgICA0ICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX0NPTVBMRVRFX01BU0sgICAgICAgICAweDAwRjAgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9DT01QTEVURV9TSElGVCAgICAgICAgICAgICA0ICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfQ09NUExFVEVfV0lEVEggICAgICAgICAgICAgNCAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU1RBUlRVUF9DT01QTEVURV9NQVNLICAgICAgICAweDAwMEYgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19TVEFSVFVQX0NPTVBMRVRFX1NISUZUICAgICAgICAgICAgMCAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NUQVJUVVBfQ09NUExFVEVfV0lEVEggICAgICAgICAgICA0ICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFszOjBdICovCisKKy8qCisgKiBSOTAgKDB4NUEpIC0gQW5hbG9ndWUgSFAgMAorICovCisjZGVmaW5lIFdNODkwNF9IUExfUk1WX1NIT1JUICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9STVZfU0hPUlRfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBMX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBIUExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUExfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfT1VUUCAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX09VVFBfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfT1VUUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQTF9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQTF9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEhQTF9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX0RMWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQTF9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEhQTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBIUExfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9STVZfU0hPUlQgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSFBSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBSX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBIUFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUFJfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgICAgIDMgIC8qIEhQUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSFBSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhQUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBSX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBSX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBSX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBSX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFBSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUFJfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBSX0VOQSAqLworCisvKgorICogUjk0ICgweDVFKSAtIEFuYWxvZ3VlIExpbmVvdXQgMAorICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9STVZfU0hPUlQgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUk1WX1NIT1JUX01BU0sgICAgICAgICAgMHgwMDgwICAvKiBMSU5FT1VUTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgNyAgLyogTElORU9VVExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX09VVFAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSU5FT1VUTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX09VVFBfTUFTSyAgICAgICAgICAgMHgwMDQwICAvKiBMSU5FT1VUTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX09VVFBfU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBMSU5FT1VUTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX09VVFBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX0RMWSAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMSU5FT1VUTF9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfRExZX01BU0sgICAgICAgICAgICAweDAwMjAgIC8qIExJTkVPVVRMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9ETFlfU0hJRlQgICAgICAgICAgICAgICAgNSAgLyogTElORU9VVExfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX0RMWV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkEgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExJTkVPVVRMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgNCAgLyogTElORU9VVExfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUk1WX1NIT1JUICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBMSU5FT1VUUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1JNVl9TSE9SVF9NQVNLICAgICAgICAgIDB4MDAwOCAgLyogTElORU9VVFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgIDMgIC8qIExJTkVPVVRSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9PVVRQICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTElORU9VVFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9PVVRQX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogTElORU9VVFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9PVVRQX1NISUZUICAgICAgICAgICAgICAgMiAgLyogTElORU9VVFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9PVVRQX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9ETFkgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTElORU9VVFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX0RMWV9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfRExZX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9ETFlfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVFJfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIExJTkVPVVRSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9FTkEgKi8KKworLyoKKyAqIFI5OCAoMHg2MikgLSBDaGFyZ2UgUHVtcCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0NQX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ1BfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRU5BICovCisKKy8qCisgKiBSMTA0ICgweDY4KSAtIENsYXNzIFcgMAorICovCisjZGVmaW5lIFdNODkwNF9DUF9EWU5fUFdSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIENQX0RZTl9QV1IgKi8KKyNkZWZpbmUgV004OTA0X0NQX0RZTl9QV1JfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ1BfRFlOX1BXUiAqLworI2RlZmluZSBXTTg5MDRfQ1BfRFlOX1BXUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBDUF9EWU5fUFdSICovCisjZGVmaW5lIFdNODkwNF9DUF9EWU5fUFdSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENQX0RZTl9QV1IgKi8KKworLyoKKyAqIFIxMDggKDB4NkMpIC0gV3JpdGUgU2VxdWVuY2VyIDAKKyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9XUklURV9JTkRFWF9NQVNLICAgICAgICAgICAgMHgwMDFGICAvKiBXU0VRX1dSSVRFX0lOREVYIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfV1JJVEVfSU5ERVhfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9XUklURV9JTkRFWCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1dSSVRFX0lOREVYX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIFdTRVFfV1JJVEVfSU5ERVggLSBbNDowXSAqLworCisvKgorICogUjEwOSAoMHg2RCkgLSBXcml0ZSBTZXF1ZW5jZXIgMQorICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfV0lEVEhfTUFTSyAgICAgICAgICAgICAweDcwMDAgIC8qIFdTRVFfREFUQV9XSURUSCAtIFsxNDoxMl0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9XSURUSF9TSElGVCAgICAgICAgICAgICAgICAxMiAgLyogV1NFUV9EQVRBX1dJRFRIIC0gWzE0OjEyXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1dJRFRIX1dJRFRIICAgICAgICAgICAgICAgICAzICAvKiBXU0VRX0RBVEFfV0lEVEggLSBbMTQ6MTJdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfU1RBUlRfTUFTSyAgICAgICAgICAgICAweDBGMDAgIC8qIFdTRVFfREFUQV9TVEFSVCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1NUQVJUX1NISUZUICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0RBVEFfU1RBUlQgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9TVEFSVF9XSURUSCAgICAgICAgICAgICAgICAgNCAgLyogV1NFUV9EQVRBX1NUQVJUIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIFdTRVFfQUREUiAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0FERFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfQUREUiAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0FERFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfQUREUiAtIFs3OjBdICovCisKKy8qCisgKiBSMTEwICgweDZFKSAtIFdyaXRlIFNlcXVlbmNlciAyCisgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRU9TICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogV1NFUV9FT1MgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRU9TX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogV1NFUV9FT1MgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRU9TX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogV1NFUV9FT1MgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRU9TX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9FT1MgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREVMQVlfTUFTSyAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogV1NFUV9ERUxBWSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9ERUxBWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0RFTEFZIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RFTEFZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFdTRVFfREVMQVkgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogV1NFUV9EQVRBIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9EQVRBIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9EQVRBIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMTEgKDB4NkYpIC0gV3JpdGUgU2VxdWVuY2VyIDMKKyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0FCT1JUX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUJPUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9BQk9SVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9TVEFSVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1NUQVJUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlRfSU5ERVhfTUFTSyAgICAgICAgICAgIDB4MDAzRiAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1NUQVJUX0lOREVYX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9TVEFSVF9JTkRFWF9XSURUSCAgICAgICAgICAgICAgICA2ICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzU6MF0gKi8KKworLyoKKyAqIFIxMTIgKDB4NzApIC0gV3JpdGUgU2VxdWVuY2VyIDQKKyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9DVVJSRU5UX0lOREVYX01BU0sgICAgICAgICAgMHgwM0YwICAvKiBXU0VRX0NVUlJFTlRfSU5ERVggLSBbOTo0XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9DVVJSRU5UX0lOREVYX1NISUZUICAgICAgICAgICAgICA0ICAvKiBXU0VRX0NVUlJFTlRfSU5ERVggLSBbOTo0XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9DVVJSRU5UX0lOREVYX1dJRFRIICAgICAgICAgICAgICA2ICAvKiBXU0VRX0NVUlJFTlRfSU5ERVggLSBbOTo0XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQlVTWV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0JVU1lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9CVVNZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0JVU1kgKi8KKworLyoKKyAqIFIxMTYgKDB4NzQpIC0gRkxMIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJBQ05fRU5BICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9GUkFDTl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFDTl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0ZSQUNOX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQUNOX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAyICAvKiBGTExfRlJBQ05fRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJBQ05fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9GUkFDTl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9PU0NfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9PU0NfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9PU0NfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9PU0NfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0VOQSAqLworCisvKgorICogUjExNyAoMHg3NSkgLSBGTEwgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9PVVRESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4M0YwMCAgLyogRkxMX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09VVERJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBGTExfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODkwNF9GTExfT1VURElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEZMTF9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DVFJMX1JBVEVfTUFTSyAgICAgICAgICAgICAgIDB4MDA3MCAgLyogRkxMX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9GTExfQ1RSTF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEZMTF9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NUUkxfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAzICAvKiBGTExfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFUSU9fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogRkxMX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJBVElPX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9GUkFUSU8gLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQVRJT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBGTExfRlJBVElPIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMTggKDB4NzYpIC0gRkxMIENvbnRyb2wgMworICovCisjZGVmaW5lIFdNODkwNF9GTExfS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEZMTF9LIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9LIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEZMTF9LIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5ICgweDc3KSAtIEZMTCBDb250cm9sIDQKKyAqLworI2RlZmluZSBXTTg5MDRfRkxMX05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHg3RkUwICAvKiBGTExfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBGTExfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBGTExfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBGTExfR0FJTiAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRkxMX0dBSU4gLSBbMzowXSAqLworCisvKgorICogUjEyMCAoMHg3OCkgLSBGTEwgQ29udHJvbCA1CisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DTEtfUkVGX0RJVl9NQVNLICAgICAgICAgICAgIDB4MDAxOCAgLyogRkxMX0NMS19SRUZfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DTEtfUkVGX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRkxMX0NMS19SRUZfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DTEtfUkVGX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0NMS19SRUZfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DTEtfUkVGX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwMyAgLyogRkxMX0NMS19SRUZfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DTEtfUkVGX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0NMS19SRUZfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DTEtfUkVGX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0NMS19SRUZfU1JDIC0gWzE6MF0gKi8KKworLyoKKyAqIFIxMjEgKDB4NzkpIC0gR1BJTyBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPMV9QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPMV9QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPMV9QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPMV9QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPMV9TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPMV9TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPMV9TRUwgLSBbMzowXSAqLworCisvKgorICogUjEyMiAoMHg3QSkgLSBHUElPIENvbnRyb2wgMgorICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8yX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8yX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8yX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8yX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8yX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8yX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8yX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8yX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQSU8yX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSU8yX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8yX1NFTCAtIFszOjBdICovCisKKy8qCisgKiBSMTIzICgweDdCKSAtIEdQSU8gQ29udHJvbCAzCisgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzNfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzNfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzNfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzNfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzNfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzNfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzNfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzNfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1BJTzNfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJTzNfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzNfU0VMIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxMjQgKDB4N0MpIC0gR1BJTyBDb250cm9sIDQKKyAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUEk3X0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUEk3X0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBHUEk3X0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk3X0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX01PREVfRU5BICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPX0JDTEtfTU9ERV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19NT0RFX0VOQV9NQVNLICAgICAgICAgIDB4MDA4MCAgLyogR1BJT19CQ0xLX01PREVfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfTU9ERV9FTkFfU0hJRlQgICAgICAgICAgICAgIDcgIC8qIEdQSU9fQkNMS19NT0RFX0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX01PREVfRU5BX1dJRFRIICAgICAgICAgICAgICAxICAvKiBHUElPX0JDTEtfTU9ERV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19TRUxfTUFTSyAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1BJT19CQ0xLX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSU9fQkNMS19TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPX0JDTEtfU0VMIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxMjYgKDB4N0UpIC0gRGlnaXRhbCBQdWxscworICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1DTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIE1DTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQUNEQVRfUFUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREFDREFUX1BVICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERBQ0RBVF9QVSAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNEQVRfUFUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDREFUX1BEICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUERfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERBQ0RBVF9QRCAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEQUNEQVRfUEQgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDREFUX1BEICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExSQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExSQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExSQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExSQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExSQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExSQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS19QRCAqLworCisvKgorICogUjEyNyAoMHg3RikgLSBJbnRlcnJ1cHQgU3RhdHVzCisgKi8KKyNkZWZpbmUgV004OTA0X0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSVJRICovCisjZGVmaW5lIFdNODkwNF9JUlFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIElSUSAqLworI2RlZmluZSBXTTg5MDRfSVJRX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBJUlEgKi8KKyNkZWZpbmUgV004OTA0X0lSUV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSVJRICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVCAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSU9fQkNMS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSU9fQkNMS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDkgIC8qIEdQSU9fQkNMS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU9fQkNMS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBHUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBHUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAyICAvKiBGTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNfREVUX0VJTlQgKi8KKworLyoKKyAqIFIxMjggKDB4ODApIC0gSW50ZXJydXB0IFN0YXR1cyBNYXNrCisgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU9fQkNMS19FSU5UICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSU1fR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU9fQkNMS19FSU5UX01BU0sgICAgICAgICAgIDB4MDIwMCAgLyogSU1fR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU9fQkNMS19FSU5UX1NISUZUICAgICAgICAgICAgICAgOSAgLyogSU1fR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU9fQkNMS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX1dTRVFfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU1fV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9XU0VRX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElNX1dTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fV1NFUV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICA4ICAvKiBJTV9XU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX1dTRVFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPM19FSU5UICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElNX0dQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8zX0VJTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU1fR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBJTV9HUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8yX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU1fR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzJfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTV9HUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDYgIC8qIElNX0dQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8yX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzFfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTV9HUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMV9FSU5UX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIElNX0dQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8xX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogSU1fR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk4X0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX0dQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJOF9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTV9HUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSThfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgNCAgLyogSU1fR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk4X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJN19FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTV9HUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSTdfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSU1fR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk3X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIElNX0dQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJN19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0ZMTF9MT0NLX0VJTlQgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fRkxMX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9GTExfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIElNX0ZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0ZMTF9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX1NIUlRfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTV9NSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfU0hSVF9FSU5UX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIElNX01JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19TSFJUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX1NIUlRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTV9NSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfREVUX0VJTlQgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX01JQ19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX0RFVF9FSU5UX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9NSUNfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19ERVRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogSU1fTUlDX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElNX01JQ19ERVRfRUlOVCAqLworCisvKgorICogUjEyOSAoMHg4MSkgLSBJbnRlcnJ1cHQgUG9sYXJpdHkKKyAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfUE9MICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUElPX0JDTEtfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX1BPTF9NQVNLICAgICAgICAgIDB4MDIwMCAgLyogR1BJT19CQ0xLX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgIDkgIC8qIEdQSU9fQkNMS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAxICAvKiBHUElPX0JDTEtfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9QT0wgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9QT0wgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPM19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPM19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICA3ICAvKiBHUElPM19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9QT0wgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPMl9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPMl9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBHUElPMl9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBHUElPMl9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9QT0wgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPMV9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfUE9MX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJOF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk4X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfUE9MICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSTdfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAzICAvKiBHUEk3X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfUE9MICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfUE9MX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgMiAgLyogRkxMX0xPQ0tfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRkxMX0xPQ0tfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfUE9MICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDX1NIUlRfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfUE9MX01BU0sgICAgICAgICAgIDB4MDAwMiAgLyogTUlDX1NIUlRfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgMSAgLyogTUlDX1NIUlRfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlDX1NIUlRfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9QT0wgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDX0RFVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX1BPTF9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNfREVUX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIE1JQ19ERVRfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTUlDX0RFVF9FSU5UX1BPTCAqLworCisvKgorICogUjEzMCAoMHg4MikgLSBJbnRlcnJ1cHQgRGVib3VuY2UKKyAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfREIgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUElPX0JDTEtfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfREJfTUFTSyAgICAgICAgICAgMHgwMjAwICAvKiBHUElPX0JDTEtfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBHUElPX0JDTEtfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBHUElPX0JDTEtfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX0RCICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9EQl9NQVNLICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfREIgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzNfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9EQl9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPM19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIEdQSU8zX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzNfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9EQiAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPMl9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX0RCX01BU0sgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8yX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgNiAgLyogR1BJTzJfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMl9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX0RCICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfREJfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPMV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9EQiAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJOF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfREJfTUFTSyAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUEk4X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJOF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfREIgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSTdfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX0RCX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogR1BJN19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9EQiAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX0RCX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9MT0NLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogRkxMX0xPQ0tfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBGTExfTE9DS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX0RCICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ19TSFJUX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfREJfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDX1NIUlRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBNSUNfU0hSVF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIE1JQ19TSFJUX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9EQiAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDX0RFVF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfREJfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ19ERVRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBNSUNfREVUX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogTUlDX0RFVF9FSU5UX0RCICovCisKKy8qCisgKiBSMTM0ICgweDg2KSAtIEVRMQorICovCisjZGVmaW5lIFdNODkwNF9FUV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEVRX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRVFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBFUV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9FUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEVRX0VOQSAqLworCisvKgorICogUjEzNSAoMHg4NykgLSBFUTIKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBFUV9CMV9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjFfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEVRX0IxX0dBSU4gLSBbNDowXSAqLworCisvKgorICogUjEzNiAoMHg4OCkgLSBFUTMKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBFUV9CMl9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjJfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEVRX0IyX0dBSU4gLSBbNDowXSAqLworCisvKgorICogUjEzNyAoMHg4OSkgLSBFUTQKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBFUV9CM19HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjNfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEVRX0IzX0dBSU4gLSBbNDowXSAqLworCisvKgorICogUjEzOCAoMHg4QSkgLSBFUTUKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBFUV9CNF9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjRfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEVRX0I0X0dBSU4gLSBbNDowXSAqLworCisvKgorICogUjEzOSAoMHg4QikgLSBFUTYKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBFUV9CNV9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjVfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEVRX0I1X0dBSU4gLSBbNDowXSAqLworCisvKgorICogUjE0MCAoMHg4QykgLSBFUTcKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0FfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjFfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MSAoMHg4RCkgLSBFUTgKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjFfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MiAoMHg4RSkgLSBFUTkKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfUEdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfUEdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfUEdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0MyAoMHg4RikgLSBFUTEwCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0FfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IyX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDQgKDB4OTApIC0gRVExMQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9CX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMl9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQ1ICgweDkxKSAtIEVRMTIKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjJfQyAtIFsxNTowXSAqLworCisvKgorICogUjE0NiAoMHg5MikgLSBFUTEzCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX1BHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX1BHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX1BHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjJfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDcgKDB4OTMpIC0gRVExNAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19BX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CM19BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQ4ICgweDk0KSAtIEVRMTUKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjNfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0OSAoMHg5NSkgLSBFUTE2CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0NfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IzX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTAgKDB4OTYpIC0gRVExNworICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19QR19NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IzX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IzX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19QR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IzX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTUxICgweDk3KSAtIEVRMTgKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0FfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjRfQSAtIFsxNTowXSAqLworCisvKgorICogUjE1MiAoMHg5OCkgLSBFUTE5CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I0X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTMgKDB4OTkpIC0gRVEyMAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9DX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNF9DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTU0ICgweDlBKSAtIEVRMjEKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfUEdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfUEdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfUEdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNF9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE1NSAoMHg5QikgLSBFUTIyCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0FfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I1X0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTYgKDB4OUMpIC0gRVEyMworICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9CX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTU3ICgweDlEKSAtIEVRMjQKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfUEdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfUEdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfUEdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE2MSAoMHhBMSkgLSBDb250cm9sIEludGVyZmFjZSBUZXN0IDEKKyAqLworI2RlZmluZSBXTTg5MDRfVVNFUl9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBVU0VSX0tFWSAqLworI2RlZmluZSBXTTg5MDRfVVNFUl9LRVlfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBVU0VSX0tFWSAqLworI2RlZmluZSBXTTg5MDRfVVNFUl9LRVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBVU0VSX0tFWSAqLworI2RlZmluZSBXTTg5MDRfVVNFUl9LRVlfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBVU0VSX0tFWSAqLworCisvKgorICogUjIwNCAoMHhDQykgLSBBbmFsb2d1ZSBPdXRwdXQgQmlhcyAwCisgKi8KKyNkZWZpbmUgV004OTA0X1BHQV9CSUFTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogUEdBX0JJQVMgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfUEdBX0JJQVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBQR0FfQklBUyAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9QR0FfQklBU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFBHQV9CSUFTIC0gWzY6NF0gKi8KKworLyoKKyAqIFIyNDcgKDB4RjcpIC0gRkxMIE5DTyBUZXN0IDAKKyAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQ19OQ08gICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQ19OQ09fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQ19OQ09fU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQ19OQ09fV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRlJDX05DTyAqLworCisvKgorICogUjI0OCAoMHhGOCkgLSBGTEwgTkNPIFRlc3QgMQorICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DT19WQUxfTUFTSyAgICAgICAgICAgICAweDAwM0YgIC8qIEZMTF9GUkNfTkNPX1ZBTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DT19WQUxfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9GUkNfTkNPX1ZBTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DT19WQUxfV0lEVEggICAgICAgICAgICAgICAgIDYgIC8qIEZMTF9GUkNfTkNPX1ZBTCAtIFs1OjBdICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1ZGFiMgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMKQEAgLTAsMCArMSwxMTUxIEBACisvKgorICogd204OTU1LmMgIC0tICBXTTg5NTUgQUxTQSBTb0MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8c291bmQvd204OTU1Lmg+CisKKyNpbmNsdWRlICJ3bTg5NTUuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg5NTVfY29kZWM7CitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5NTU7CisKKyNkZWZpbmUgV004OTU1X05VTV9TVVBQTElFUyA0CitzdGF0aWMgY29uc3QgY2hhciAqd204OTU1X3N1cHBseV9uYW1lc1tXTTg5NTVfTlVNX1NVUFBMSUVTXSA9IHsKKwkiRENWREQiLAorCSJEQlZERCIsCisJIkhQVkREIiwKKwkiQVZERCIsCit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg5NTVfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtXTTg5NTVfTUFYX1JFR0lTVEVSICsgMV07CisKKwl1bnNpZ25lZCBpbnQgbWNsa19yYXRlOworCisJaW50IGRlZW1waDsKKwlpbnQgZnM7CisKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tXTTg5NTVfTlVNX1NVUFBMSUVTXTsKKworCXN0cnVjdCB3bTg5NTVfcGRhdGEgKnBkYXRhOworfTsKKworc3RhdGljIGNvbnN0IHUxNiB3bTg5NTVfcmVnW1dNODk1NV9NQVhfUkVHSVNURVIgKyAxXSA9IHsKKwkweDAwMDAsICAgICAvKiBSMCAqLworCTB4MDAwMCwgICAgIC8qIFIxICovCisJMHgwMDc5LCAgICAgLyogUjIgIC0gTE9VVDEgdm9sdW1lICovCisJMHgwMDc5LCAgICAgLyogUjMgIC0gUk9VVDEgdm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjQgKi8KKwkweDAwMDgsICAgICAvKiBSNSAgLSBEQUMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI2ICovCisJMHgwMDBBLCAgICAgLyogUjcgIC0gQXVkaW8gSW50ZXJmYWNlICovCisJMHgwMDAwLCAgICAgLyogUjggIC0gU2FtcGxlIFJhdGUgKi8KKwkweDAwMDAsICAgICAvKiBSOSAqLworCTB4MDBGRiwgICAgIC8qIFIxMCAtIExlZnQgREFDIHZvbHVtZSAqLworCTB4MDBGRiwgICAgIC8qIFIxMSAtIFJpZ2h0IERBQyB2b2x1bWUgKi8KKwkweDAwMEYsICAgICAvKiBSMTIgLSBCYXNzIGNvbnRyb2wgKi8KKwkweDAwMEYsICAgICAvKiBSMTMgLSBUcmVibGUgY29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxNCAqLworCTB4MDAwMCwgICAgIC8qIFIxNSAtIFJlc2V0ICovCisJMHgwMDAwLCAgICAgLyogUjE2ICovCisJMHgwMDAwLCAgICAgLyogUjE3ICovCisJMHgwMDAwLCAgICAgLyogUjE4ICovCisJMHgwMDAwLCAgICAgLyogUjE5ICovCisJMHgwMDAwLCAgICAgLyogUjIwICovCisJMHgwMDAwLCAgICAgLyogUjIxICovCisJMHgwMDAwLCAgICAgLyogUjIyICovCisJMHgwMEMxLCAgICAgLyogUjIzIC0gQWRkaXRpb25hbCBjb250cm9sICgxKSAqLworCTB4MDAwMCwgICAgIC8qIFIyNCAtIEFkZGl0aW9uYWwgY29udHJvbCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMjUgLSBQb3dlciBNYW5hZ2VtZW50ICgxKSAqLworCTB4MDAwMCwgICAgIC8qIFIyNiAtIFBvd2VyIE1hbmFnZW1lbnQgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjI3IC0gQWRkaXRpb25hbCBDb250cm9sICgzKSAqLworCTB4MDAwMCwgICAgIC8qIFIyOCAqLworCTB4MDAwMCwgICAgIC8qIFIyOSAqLworCTB4MDAwMCwgICAgIC8qIFIzMCAqLworCTB4MDAwMCwgICAgIC8qIFIzMSAqLworCTB4MDAwMCwgICAgIC8qIFIzMiAqLworCTB4MDAwMCwgICAgIC8qIFIzMyAqLworCTB4MDA1MCwgICAgIC8qIFIzNCAtIExlZnQgb3V0IE1peCAoMSkgKi8KKwkweDAwNTAsICAgICAvKiBSMzUgLSBMZWZ0IG91dCBNaXggKDIpICovCisJMHgwMDUwLCAgICAgLyogUjM2IC0gUmlnaHQgb3V0IE1peCAoMSkgKi8KKwkweDAwNTAsICAgICAvKiBSMzcgLSBSaWdodCBPdXQgTWl4ICgyKSAqLworCTB4MDA1MCwgICAgIC8qIFIzOCAtIE1vbm8gb3V0IE1peCAoMSkgKi8KKwkweDAwNTAsICAgICAvKiBSMzkgLSBNb25vIG91dCBNaXggKDIpICovCisJMHgwMDc5LCAgICAgLyogUjQwIC0gTE9VVDIgdm9sdW1lICovCisJMHgwMDc5LCAgICAgLyogUjQxIC0gUk9VVDIgdm9sdW1lICovCisJMHgwMDc5LCAgICAgLyogUjQyIC0gTU9OT09VVCB2b2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSNDMgLSBDbG9ja2luZyAvIFBMTCAqLworCTB4MDEwMywgICAgIC8qIFI0NCAtIFBMTCBDb250cm9sIDEgKi8KKwkweDAwMjQsICAgICAvKiBSNDUgLSBQTEwgQ29udHJvbCAyICovCisJMHgwMUJBLCAgICAgLyogUjQ2IC0gUExMIENvbnRyb2wgMyAqLworCTB4MDAwMCwgICAgIC8qIFI0NyAqLworCTB4MDAwMCwgICAgIC8qIFI0OCAqLworCTB4MDAwMCwgICAgIC8qIFI0OSAqLworCTB4MDAwMCwgICAgIC8qIFI1MCAqLworCTB4MDAwMCwgICAgIC8qIFI1MSAqLworCTB4MDAwMCwgICAgIC8qIFI1MiAqLworCTB4MDAwMCwgICAgIC8qIFI1MyAqLworCTB4MDAwMCwgICAgIC8qIFI1NCAqLworCTB4MDAwMCwgICAgIC8qIFI1NSAqLworCTB4MDAwMCwgICAgIC8qIFI1NiAqLworCTB4MDAwMCwgICAgIC8qIFI1NyAqLworCTB4MDAwMCwgICAgIC8qIFI1OCAqLworCTB4MDAwMCwgICAgIC8qIFI1OSAtIFBMTCBDb250cm9sIDQgKi8KK307CisKK3N0YXRpYyBpbnQgd204OTU1X3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004OTU1X1JFU0VULCAwKTsKK30KKworc3RydWN0IHBsbF9mYWN0b3JzIHsKKwlpbnQgbjsKKwlpbnQgazsKKwlpbnQgb3V0ZGl2OworfTsKKworLyogVGhlIHNpemUgaW4gYml0cyBvZiB0aGUgRkxMIGRpdmlkZSBtdWx0aXBsaWVkIGJ5IDEwCisgKiB0byBhbGxvdyByb3VuZGluZyBsYXRlciAqLworI2RlZmluZSBGSVhFRF9GTExfU0laRSAoKDEgPDwgMjIpICogMTApCisKK3N0YXRpYyBpbnQgd204OTk1X3BsbF9mYWN0b3JzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIGludCBGcmVmLCBpbnQgRm91dCwgc3RydWN0IHBsbF9mYWN0b3JzICpwbGwpCit7CisJdTY0IEtwYXJ0OworCXVuc2lnbmVkIGludCBLLCBOZGl2LCBObW9kLCB0YXJnZXQ7CisKKwlkZXZfZGJnKGRldiwgIkZyZWY9JXUgRm91dD0ldVxuIiwgRnJlZiwgRm91dCk7CisKKwkvKiBUaGUgb3NjaWxhdG9yIHNob3VsZCBydW4gYXQgc2hvdWxkIGJlIDkwLTEwME1IeiwgYW5kCisJICogdGhlcmUncyBhIGRpdmlkZSBieSA0IHBsdXMgYW4gb3B0aW9uYWwgZGl2aWRlIGJ5IDIgaW4gdGhlCisJICogb3V0cHV0IHBhdGggdG8gZ2VuZXJhdGUgdGhlIHN5c3RlbSBjbG9jay4gIFRoZSBjbG9jayB0YWJsZQorCSAqIGlzIHNvcnRkIHNvIHdlIHNob3VsZCBhbHdheXMgZ2VuZXJhdGUgYSBzdWl0YWJsZSB0YXJnZXQuICovCisJdGFyZ2V0ID0gRm91dCAqIDQ7CisJaWYgKHRhcmdldCA8IDkwMDAwMDAwKSB7CisJCXBsbC0+b3V0ZGl2ID0gMTsKKwkJdGFyZ2V0ICo9IDI7CisJfSBlbHNlIHsKKwkJcGxsLT5vdXRkaXYgPSAwOworCX0KKworCVdBUk5fT04odGFyZ2V0IDwgOTAwMDAwMDAgfHwgdGFyZ2V0ID4gMTAwMDAwMDAwKTsKKworCWRldl9kYmcoZGV2LCAiRnZjbz0lZEh6XG4iLCB0YXJnZXQpOworCisJLyogTm93LCBjYWxjdWxhdGUgTi5LICovCisJTmRpdiA9IHRhcmdldCAvIEZyZWY7CisKKwlwbGwtPm4gPSBOZGl2OworCU5tb2QgPSB0YXJnZXQgJSBGcmVmOworCWRldl9kYmcoZGV2LCAiTm1vZD0lZFxuIiwgTm1vZCk7CisKKwkvKiBDYWxjdWxhdGUgZnJhY3Rpb25hbCBwYXJ0IC0gc2NhbGUgdXAgc28gd2UgY2FuIHJvdW5kLiAqLworCUtwYXJ0ID0gRklYRURfRkxMX1NJWkUgKiAobG9uZyBsb25nKU5tb2Q7CisKKwlkb19kaXYoS3BhcnQsIEZyZWYpOworCisJSyA9IEtwYXJ0ICYgMHhGRkZGRkZGRjsKKworCWlmICgoSyAlIDEwKSA+PSA1KQorCQlLICs9IDU7CisKKwkvKiBNb3ZlIGRvd24gdG8gcHJvcGVyIHJhbmdlIG5vdyByb3VuZGluZyBpcyBkb25lICovCisJcGxsLT5rID0gSyAvIDEwOworCisJZGV2X2RiZyhkZXYsICJOPSV4IEs9JXggT1VURElWPSV4XG4iLCBwbGwtPm4sIHBsbC0+aywgcGxsLT5vdXRkaXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIExvb2t1cCB0YWJsZSBzcGVjaWZpeWluZyBTUkFURSAodGFibGUgMjUgaW4gZGF0YXNoZWV0KTsgc29tZSBvZiB0aGUKKyAqIG91dHB1dCBmcmVxdWVuY2llcyBoYXZlIGJlZW4gcm91bmRlZCB0byB0aGUgc3RhbmRhcmQgZnJlcXVlbmNpZXMKKyAqIHRoZXkgYXJlIGludGVuZGVkIHRvIG1hdGNoIHdoZXJlIHRoZSBlcnJvciBpcyBzbGlnaHQuICovCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgbWNsazsKKwlpbnQgZnM7CisJaW50IHVzYjsKKwlpbnQgc3I7Cit9IGNsb2NrX2NmZ3NbXSA9IHsKKwl7IDE4NDMyMDAwLCAgODAwMCwgMCwgIDMsIH0sCisJeyAxODQzMjAwMCwgMTIwMDAsIDAsICA5LCB9LAorCXsgMTg0MzIwMDAsIDE2MDAwLCAwLCAxMSwgfSwKKwl7IDE4NDMyMDAwLCAyNDAwMCwgMCwgMjksIH0sCisJeyAxODQzMjAwMCwgMzIwMDAsIDAsIDEzLCB9LAorCXsgMTg0MzIwMDAsIDQ4MDAwLCAwLCAgMSwgfSwKKwl7IDE4NDMyMDAwLCA5NjAwMCwgMCwgMTUsIH0sCisKKwl7IDE2OTM0NDAwLCAgODAxOCwgMCwgMTksIH0sCisJeyAxNjkzNDQwMCwgMTEwMjUsIDAsIDI1LCB9LAorCXsgMTY5MzQ0MDAsIDIyMDUwLCAwLCAyNywgfSwKKwl7IDE2OTM0NDAwLCA0NDEwMCwgMCwgMTcsIH0sCisJeyAxNjkzNDQwMCwgODgyMDAsIDAsIDMxLCB9LAorCisJeyAxMjAwMDAwMCwgIDgwMDAsIDEsICAyLCB9LAorCXsgMTIwMDAwMDAsIDExMDI1LCAxLCAyNSwgfSwKKwl7IDEyMDAwMDAwLCAxMjAwMCwgMSwgIDgsIH0sCisJeyAxMjAwMDAwMCwgMTYwMDAsIDEsIDEwLCB9LAorCXsgMTIwMDAwMDAsIDIyMDUwLCAxLCAyNywgfSwKKwl7IDEyMDAwMDAwLCAyNDAwMCwgMSwgMjgsIH0sCisJeyAxMjAwMDAwMCwgMzIwMDAsIDEsIDEyLCB9LAorCXsgMTIwMDAwMDAsIDQ0MTAwLCAxLCAxNywgfSwKKwl7IDEyMDAwMDAwLCA0ODAwMCwgMSwgIDAsIH0sCisJeyAxMjAwMDAwMCwgODgyMDAsIDEsIDMxLCB9LAorCXsgMTIwMDAwMDAsIDk2MDAwLCAxLCAxNCwgfSwKKworCXsgMTIyODgwMDAsICA4MDAwLCAwLCAgMiwgfSwKKwl7IDEyMjg4MDAwLCAxMjAwMCwgMCwgIDgsIH0sCisJeyAxMjI4ODAwMCwgMTYwMDAsIDAsIDEwLCB9LAorCXsgMTIyODgwMDAsIDI0MDAwLCAwLCAyOCwgfSwKKwl7IDEyMjg4MDAwLCAzMjAwMCwgMCwgMTIsIH0sCisJeyAxMjI4ODAwMCwgNDgwMDAsIDAsICAwLCB9LAorCXsgMTIyODgwMDAsIDk2MDAwLCAwLCAxNCwgfSwKKworCXsgMTIyODk2MDAsICA4MDE4LCAwLCAxOCwgfSwKKwl7IDEyMjg5NjAwLCAxMTAyNSwgMCwgMjQsIH0sCisJeyAxMjI4OTYwMCwgMjIwNTAsIDAsIDI2LCB9LAorCXsgMTEyODk2MDAsIDQ0MTAwLCAwLCAxNiwgfSwKKwl7IDExMjg5NjAwLCA4ODIwMCwgMCwgMzEsIH0sCit9OworCitzdGF0aWMgaW50IHdtODk1NV9jb25maWd1cmVfY2xvY2tpbmcoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgcmV0LCB2YWw7CisJaW50IGNsb2NraW5nID0gMDsKKwlpbnQgc3JhdGUgPSAwOworCWludCBzciA9IC0xOworCXN0cnVjdCBwbGxfZmFjdG9ycyBwbGw7CisKKwkvKiBJZiB3ZSdyZSBub3QgcnVubmluZyBhIHNhbXBsZSByYXRlIGN1cnJlbnRseSBqdXN0IHBpY2sgb25lICovCisJaWYgKHdtODk1NS0+ZnMgPT0gMCkKKwkJd204OTU1LT5mcyA9IDgwMDA7CisKKwkvKiBDYW4gd2UgZ2VuZXJhdGUgYW4gZXhhY3Qgb3V0cHV0PyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNsb2NrX2NmZ3MpOyBpKyspIHsKKwkJaWYgKHdtODk1NS0+ZnMgIT0gY2xvY2tfY2Znc1tpXS5mcykKKwkJCWNvbnRpbnVlOworCQlzciA9IGk7CisKKwkJaWYgKHdtODk1NS0+bWNsa19yYXRlID09IGNsb2NrX2NmZ3NbaV0ubWNsaykKKwkJCWJyZWFrOworCX0KKworCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSB3aXRoIGFuIHVuc3VwcG9ydGVkIHNhbXBsZSByYXRlICovCisJaWYgKHNyID09IC0xKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlNhbXBsZSByYXRlICVkSHogdW5zdXBwb3J0ZWRcbiIsCisJCQl3bTg5NTUtPmZzKTsKKwkJV0FSTl9PTihzciA9PSAtMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpID09IEFSUkFZX1NJWkUoY2xvY2tfY2ZncykpIHsKKwkJLyogSWYgd2UgY2FuJ3QgZ2VuZXJhdGUgdGhlIHJpZ2h0IGNsb2NrIGZyb20gTUNMSyB0aGVuCisJCSAqIHdlIHNob3VsZCBjb25maWd1cmUgdGhlIFBMTCB0byBzdXBwbHkgdXMgd2l0aCBhbgorCQkgKiBhcHByb3ByaWF0ZSBjbG9jay4KKwkJICovCisJCWNsb2NraW5nIHw9IFdNODk1NV9NQ0xLU0VMOworCisJCS8qIFVzZSB0aGUgbGFzdCBkaXZpZGVyIGNvbmZpZ3VyYXRpb24gd2Ugc2F3IGZvciB0aGUKKwkJICogc2FtcGxlIHJhdGUuICovCisJCXJldCA9IHdtODk5NV9wbGxfZmFjdG9ycyhjb2RlYy0+ZGV2LCB3bTg5NTUtPm1jbGtfcmF0ZSwKKwkJCQkJIGNsb2NrX2NmZ3Nbc3JdLm1jbGssICZwbGwpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiVW5hYmxlIHRvIGdlbmVyYXRlICVkSHogZnJvbSAlZEh6IE1DTEtcbiIsCisJCQkJd204OTU1LT5mcywgd204OTU1LT5tY2xrX3JhdGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUExMX0NPTlRST0xfMSwKKwkJCQkgICAgV004OTU1X05fTUFTSyB8IFdNODk1NV9LXzIxXzE4X01BU0ssCisJCQkJICAgIChwbGwubiA8PCBXTTg5NTVfTl9TSElGVCkgfAorCQkJCSAgICBwbGwuayA+PiAxOCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QTExfQ09OVFJPTF8yLAorCQkJCSAgICBXTTg5NTVfS18xN185X01BU0ssCisJCQkJICAgIChwbGwuayA+PiA5KSAmIFdNODk1NV9LXzE3XzlfTUFTSyk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QTExfQ09OVFJPTF8yLAorCQkJCSAgICBXTTg5NTVfS184XzBfTUFTSywKKwkJCQkgICAgcGxsLmsgJiBXTTg5NTVfS184XzBfTUFTSyk7CisJCWlmIChwbGwuaykKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QTExfQ09OVFJPTF80LAorCQkJCQkgICAgV004OTU1X0tFTiwgV004OTU1X0tFTik7CisJCWVsc2UKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QTExfQ09OVFJPTF80LAorCQkJCQkgICAgV004OTU1X0tFTiwgMCk7CisKKwkJaWYgKHBsbC5vdXRkaXYpCisJCQl2YWwgPSBXTTg5NTVfUExMX1JCIHwgV004OTU1X1BMTE9VVERJVjI7CisJCWVsc2UKKwkJCXZhbCA9IFdNODk1NV9QTExfUkI7CisKKwkJLyogTm93IHN0YXJ0IHRoZSBQTEwgcnVubmluZyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQ0xPQ0tJTkdfUExMLAorCQkJCSAgICBXTTg5NTVfUExMX1JCIHwgV004OTU1X1BMTE9VVERJVjIsIHZhbCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9DTE9DS0lOR19QTEwsCisJCQkJICAgIFdNODk1NV9QTExFTiwgV004OTU1X1BMTEVOKTsKKwl9CisKKwlzcmF0ZSA9IGNsb2NrX2NmZ3Nbc3JdLnVzYiB8IChjbG9ja19jZmdzW3NyXS5zciA8PCBXTTg5NTVfU1JfU0hJRlQpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1NBTVBMRV9SQVRFLAorCQkJICAgIFdNODk1NV9VU0IgfCBXTTg5NTVfU1JfTUFTSywgc3JhdGUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9DTE9DS0lOR19QTEwsCisJCQkgICAgV004OTU1X01DTEtTRUwsIGNsb2NraW5nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1NV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCS8qIEFsd2F5cyBkaXNhYmxlIHRoZSBjbG9ja3MgLSBpZiB3ZSdyZSBkb2luZyByZWNvbmZpZ3VyYXRpb24gdGhpcworCSAqIGF2b2lkcyBtaXNjbG9ja2luZy4KKwkgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJICAgIFdNODk1NV9ESUdFTkIsIDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9DTE9DS0lOR19QTEwsCisJCQkgICAgV004OTU1X1BMTF9SQiB8IFdNODk1NV9QTExFTiwgMCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCXJldCA9IHdtODk1NV9jb25maWd1cmVfY2xvY2tpbmcoY29kZWMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRlZW1waF9zZXR0aW5nc1tdID0geyAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH07CisKK3N0YXRpYyBpbnQgd204OTU1X3NldF9kZWVtcGgoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgdmFsLCBpLCBiZXN0OworCisJLyogSWYgd2UncmUgdXNpbmcgZGVlbXBoYXNpcyBzZWxlY3QgdGhlIG5lYXJlc3QgYXZhaWxhYmxlIHNhbXBsZQorCSAqIHJhdGUuCisJICovCisJaWYgKHdtODk1NS0+ZGVlbXBoKSB7CisJCWJlc3QgPSAxOworCQlmb3IgKGkgPSAyOyBpIDwgQVJSQVlfU0laRShkZWVtcGhfc2V0dGluZ3MpOyBpKyspIHsKKwkJCWlmIChhYnMoZGVlbXBoX3NldHRpbmdzW2ldIC0gd204OTU1LT5mcykgPAorCQkJICAgIGFicyhkZWVtcGhfc2V0dGluZ3NbYmVzdF0gLSB3bTg5NTUtPmZzKSkKKwkJCQliZXN0ID0gaTsKKwkJfQorCisJCXZhbCA9IGJlc3QgPDwgV004OTU1X0RFRU1QSF9TSElGVDsKKwl9IGVsc2UgeworCQl2YWwgPSAwOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlNldCBkZWVtcGhhc2lzICVkXG4iLCB2YWwpOworCisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9EQUNfQ09OVFJPTCwKKwkJCQkgICBXTTg5NTVfREVFTVBIX01BU0ssIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X2dldF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gd204OTU1LT5kZWVtcGg7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X3B1dF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGRlZW1waCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisKKwlpZiAoZGVlbXBoID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5NTUtPmRlZW1waCA9IGRlZW1waDsKKworCXJldHVybiB3bTg5NTVfc2V0X2RlZW1waChjb2RlYyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpiYXNzX21vZGVfdGV4dFtdID0geworCSJMaW5lYXIiLCAiQWRhcHRpdmUiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBiYXNzX21vZGUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5NTVfQkFTU19DT05UUk9MLCA3LCAyLCBiYXNzX21vZGVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpiYXNzX2N1dG9mZl90ZXh0W10gPSB7CisJIkxvdyIsICJIaWdoIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBiYXNzX2N1dG9mZiA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk1NV9CQVNTX0NPTlRST0wsIDYsIDIsIGJhc3NfY3V0b2ZmX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqdHJlYmxlX2N1dG9mZl90ZXh0W10gPSB7CisJIkhpZ2giLCAiTG93IgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB0cmVibGVfY3V0b2ZmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTU1X1RSRUJMRV9DT05UUk9MLCA2LCAyLCB0cmVibGVfY3V0b2ZmX3RleHQpOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGlnaXRhbF90bHYsIC0xMjc1MCwgNTAsIDEpOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGF0dGVuX3RsdiwgLTYwMCwgNjAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShieXBhc3NfdGx2LCAtMTUwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtb25vX3RsdiwgLTIxMDAsIDMwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0X3RsdiwgLTEyMTAwLCAxMDAsIDEpOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHRyZWJsZV90bHYsIC0xMjAwLCAxNTAsIDEpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTU1X3NuZF9jb250cm9sc1tdID0geworU09DX0RPVUJMRV9SX1RMVigiRGlnaXRhbCBQbGF5YmFjayBWb2x1bWUiLCBXTTg5NTVfTEVGVF9EQUNfVk9MVU1FLAorCQkgV004OTU1X1JJR0hUX0RBQ19WT0xVTUUsIDAsIDI1NSwgMCwgZGlnaXRhbF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlBsYXliYWNrIEF0dGVudWF0aW9uIFZvbHVtZSIsIFdNODk1NV9EQUNfQ09OVFJPTCwgNywgMSwgMSwKKwkgICAgICAgYXR0ZW5fdGx2KSwKK1NPQ19TSU5HTEVfQk9PTF9FWFQoIkRBQyBEZWVtcGhhc2lzIFN3aXRjaCIsIDAsCisJCSAgICB3bTg5NTVfZ2V0X2RlZW1waCwgd204OTU1X3B1dF9kZWVtcGgpLAorCitTT0NfRU5VTSgiQmFzcyBNb2RlIiwgYmFzc19tb2RlKSwKK1NPQ19FTlVNKCJCYXNzIEN1dG9mZiIsIGJhc3NfY3V0b2ZmKSwKK1NPQ19TSU5HTEUoIkJhc3MgVm9sdW1lIiwgV004OTU1X0JBU1NfQ09OVFJPTCwgMCwgMTUsIDEpLAorCitTT0NfRU5VTSgiVHJlYmxlIEN1dG9mZiIsIHRyZWJsZV9jdXRvZmYpLAorU09DX1NJTkdMRV9UTFYoIlRyZWJsZSBWb2x1bWUiLCBXTTg5NTVfVFJFQkxFX0NPTlRST0wsIDAsIDE0LCAxLCB0cmVibGVfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIkxlZnQgQnlwYXNzIFZvbHVtZSIsIFdNODk1NV9MRUZUX09VVF9NSVhfMSwgNCwgNywgMSwKKwkgICAgICAgYnlwYXNzX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTGVmdCBNb25vIFZvbHVtZSIsIFdNODk1NV9MRUZUX09VVF9NSVhfMiwgNCwgNywgMSwKKwkgICAgICAgYnlwYXNzX3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJSaWdodCBNb25vIFZvbHVtZSIsIFdNODk1NV9SSUdIVF9PVVRfTUlYXzEsIDQsIDcsIDEsCisJICAgICAgIGJ5cGFzc190bHYpLAorU09DX1NJTkdMRV9UTFYoIlJpZ2h0IEJ5cGFzcyBWb2x1bWUiLCBXTTg5NTVfUklHSFRfT1VUX01JWF8yLCA0LCA3LCAxLAorCSAgICAgICBieXBhc3NfdGx2KSwKKworLyogTm90IGEgc3RlcmVvIHBhaXIgc28gdGhleSBsaW5lIHVwIHdpdGggdGhlIERBUE0gc3dpdGNoZXMgKi8KK1NPQ19TSU5HTEVfVExWKCJNb25vIExlZnQgQnlwYXNzIFZvbHVtZSIsIFdNODk1NV9NT05PX09VVF9NSVhfMSwgNCwgNywgMSwKKwkgICAgICAgbW9ub190bHYpLAorU09DX1NJTkdMRV9UTFYoIk1vbm8gUmlnaHQgQnlwYXNzIFZvbHVtZSIsIFdNODk1NV9NT05PX09VVF9NSVhfMiwgNCwgNywgMSwKKwkgICAgICAgbW9ub190bHYpLAorCitTT0NfRE9VQkxFX1JfVExWKCJIZWFkcGhvbmUgVm9sdW1lIiwgV004OTU1X0xPVVQxX1ZPTFVNRSwKKwkJIFdNODk1NV9ST1VUMV9WT0xVTUUsIDAsIDEyNywgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1IoIkhlYWRwaG9uZSBaQyBTd2l0Y2giLCBXTTg5NTVfTE9VVDFfVk9MVU1FLAorCSAgICAgV004OTU1X1JPVVQxX1ZPTFVNRSwgNywgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIlNwZWFrZXIgVm9sdW1lIiwgV004OTU1X0xPVVQyX1ZPTFVNRSwKKwkJIFdNODk1NV9ST1VUMl9WT0xVTUUsIDAsIDEyNywgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1IoIlNwZWFrZXIgWkMgU3dpdGNoIiwgV004OTU1X0xPVVQyX1ZPTFVNRSwKKwkgICAgIFdNODk1NV9ST1VUMl9WT0xVTUUsIDcsIDEsIDApLAorCitTT0NfU0lOR0xFX1RMVigiTW9ubyBWb2x1bWUiLCBXTTg5NTVfTU9OT09VVF9WT0xVTUUsIDAsIDEyNywgMCwgb3V0X3RsdiksCitTT0NfU0lOR0xFKCJNb25vIFpDIFN3aXRjaCIsIFdNODk1NV9NT05PT1VUX1ZPTFVNRSwgNywgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbG1peGVyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlBsYXliYWNrIFN3aXRjaCIsIFdNODk1NV9MRUZUX09VVF9NSVhfMSwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkJ5cGFzcyBTd2l0Y2giLCBXTTg5NTVfTEVGVF9PVVRfTUlYXzEsIDcsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSaWdodCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NTVfTEVGVF9PVVRfTUlYXzIsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJNb25vIFN3aXRjaCIsIFdNODk1NV9MRUZUX09VVF9NSVhfMiwgNywgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcm1peGVyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxlZnQgUGxheWJhY2sgU3dpdGNoIiwgV004OTU1X1JJR0hUX09VVF9NSVhfMSwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk1vbm8gU3dpdGNoIiwgV004OTU1X1JJR0hUX09VVF9NSVhfMSwgNywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlBsYXliYWNrIFN3aXRjaCIsIFdNODk1NV9SSUdIVF9PVVRfTUlYXzIsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJCeXBhc3MgU3dpdGNoIiwgV004OTU1X1JJR0hUX09VVF9NSVhfMiwgNywgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbW1peGVyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxlZnQgUGxheWJhY2sgU3dpdGNoIiwgV004OTU1X01PTk9fT1VUX01JWF8xLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBCeXBhc3MgU3dpdGNoIiwgV004OTU1X01PTk9fT1VUX01JWF8xLCA3LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgUGxheWJhY2sgU3dpdGNoIiwgV004OTU1X01PTk9fT1VUX01JWF8yLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgQnlwYXNzIFN3aXRjaCIsIFdNODk1NV9NT05PX09VVF9NSVhfMiwgNywgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTU1X2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX0lOUFVUKCJNT05PSU4tIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIk1PTk9JTisiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTElORUlOUiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FSU5MIiksCisKK1NORF9TT0NfREFQTV9QR0EoIk1vbm8gSW5wdXQiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJTWVNDTEsiLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xLCAwLCAxLCB3bTg5NTVfc3lzY2xrLAorCQkgICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiVFNERU4iLCBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzEsIDgsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fREFDKCJEQUNMIiwgIlBsYXliYWNrIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgOCwgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUNSIiwgIlBsYXliYWNrIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgNywgMCksCisKK1NORF9TT0NfREFQTV9QR0EoIkxPVVQxIFBHQSIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDYsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUk9VVDEgUEdBIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgNSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJMT1VUMiBQR0EiLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA0LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIlJPVVQyIFBHQSIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDMsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiTU9VVCBQR0EiLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCAyLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIk9VVDMgUEdBIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgMSwgMCwgTlVMTCwgMCksCisKKy8qIFRoZSBuYW1lcyBhcmUgY2hvc2VuIHRvIG1ha2UgdGhlIGNvbnRyb2wgbmFtZXMgbmljZSAqLworU05EX1NPQ19EQVBNX01JWEVSKCJMZWZ0IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBsbWl4ZXIsIEFSUkFZX1NJWkUobG1peGVyKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBybWl4ZXIsIEFSUkFZX1NJWkUocm1peGVyKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIk1vbm8iLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIG1taXhlciwgQVJSQVlfU0laRShtbWl4ZXIpKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiTE9VVDEiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQxIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUMiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVDIiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIk1PTk9PVVQiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIk9VVDMiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODk1NV9pbnRlcmNvbltdID0geworCXsgIkRBQ0wiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIkRBQ1IiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCisJeyAiTW9ubyBJbnB1dCIsIE5VTEwsICJNT05PSU4tIiB9LAorCXsgIk1vbm8gSW5wdXQiLCBOVUxMLCAiTU9OT0lOKyIgfSwKKworCXsgIkxlZnQiLCAiUGxheWJhY2sgU3dpdGNoIiwgIkRBQ0wiIH0sCisJeyAiTGVmdCIsICJSaWdodCBQbGF5YmFjayBTd2l0Y2giLCAiREFDUiIgfSwKKwl7ICJMZWZ0IiwgIkJ5cGFzcyBTd2l0Y2giLCAiTElORUlOTCIgfSwKKwl7ICJMZWZ0IiwgIk1vbm8gU3dpdGNoIiwgIk1vbm8gSW5wdXQiIH0sCisKKwl7ICJSaWdodCIsICJQbGF5YmFjayBTd2l0Y2giLCAiREFDUiIgfSwKKwl7ICJSaWdodCIsICJMZWZ0IFBsYXliYWNrIFN3aXRjaCIsICJEQUNMIiB9LAorCXsgIlJpZ2h0IiwgIkJ5cGFzcyBTd2l0Y2giLCAiTElORUlOUiIgfSwKKwl7ICJSaWdodCIsICJNb25vIFN3aXRjaCIsICJNb25vIElucHV0IiB9LAorCisJeyAiTW9ubyIsICJMZWZ0IFBsYXliYWNrIFN3aXRjaCIsICJEQUNMIiB9LAorCXsgIk1vbm8iLCAiUmlnaHQgUGxheWJhY2sgU3dpdGNoIiwgIkRBQ1IiIH0sCisJeyAiTW9ubyIsICJMZWZ0IEJ5cGFzcyBTd2l0Y2giLCAiTElORUlOTCIgfSwKKwl7ICJNb25vIiwgIlJpZ2h0IEJ5cGFzcyBTd2l0Y2giLCAiTElORUlOUiIgfSwKKworCXsgIkxPVVQxIFBHQSIsIE5VTEwsICJMZWZ0IiB9LAorCXsgIkxPVVQxIiwgTlVMTCwgIlRTREVOIiB9LAorCXsgIkxPVVQxIiwgTlVMTCwgIkxPVVQxIFBHQSIgfSwKKworCXsgIlJPVVQxIFBHQSIsIE5VTEwsICJSaWdodCIgfSwKKwl7ICJST1VUMSIsIE5VTEwsICJUU0RFTiIgfSwKKwl7ICJST1VUMSIsIE5VTEwsICJST1VUMSBQR0EiIH0sCisKKwl7ICJMT1VUMiBQR0EiLCBOVUxMLCAiTGVmdCIgfSwKKwl7ICJMT1VUMiIsIE5VTEwsICJUU0RFTiIgfSwKKwl7ICJMT1VUMiIsIE5VTEwsICJMT1VUMiBQR0EiIH0sCisKKwl7ICJST1VUMiBQR0EiLCBOVUxMLCAiUmlnaHQiIH0sCisJeyAiUk9VVDIiLCBOVUxMLCAiVFNERU4iIH0sCisJeyAiUk9VVDIiLCBOVUxMLCAiUk9VVDIgUEdBIiB9LAorCisJeyAiTU9VVCBQR0EiLCBOVUxMLCAiTW9ubyIgfSwKKwl7ICJNT05PT1VUIiwgTlVMTCwgIk1PVVQgUEdBIiB9LAorCisJLyogT1VUMyBub3QgY3VycmVudGx5IGltcGxlbWVudGVkICovCisJeyAiT1VUMyIsIE5VTEwsICJPVVQzIFBHQSIgfSwKK307CisKK3N0YXRpYyBpbnQgd204OTU1X2FkZF93aWRnZXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTU1X3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg5NTVfc25kX2NvbnRyb2xzKSk7CisKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5NTVfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg5NTVfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgd204OTU1X2ludGVyY29uLAorCQkJCUFSUkFZX1NJWkUod204OTU1X2ludGVyY29uKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NTVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisJaW50IHdsOworCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQl3bCA9IDA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQl3bCA9IDB4NDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJd2wgPSAweDg7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCXdsID0gMHhjOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0FVRElPX0lOVEVSRkFDRSwKKwkJCSAgICBXTTg5NTVfV0xfTUFTSywgd2wpOworCisJd204OTU1LT5mcyA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJd204OTU1X3NldF9kZWVtcGgoY29kZWMpOworCisJLyogSWYgdGhlIGNoaXAgaXMgY2xvY2tlZCB0aGVuIGRpc2FibGUgdGhlIGNsb2NrcyBhbmQgZm9yY2UgYQorCSAqIHJlY29uZmlndXJhdGlvbiwgb3RoZXJ3aXNlIERBUE0gd2lsbCBwb3dlciB1cCB0aGUKKwkgKiBjbG9ja3MgZm9yIHVzIGxhdGVyLiAqLworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJldCAmIFdNODk1NV9ESUdFTkIpIHsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTU1X0RJR0VOQiwgMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9DTE9DS0lOR19QTEwsCisJCQkJICAgIFdNODk1NV9QTExfUkIgfCBXTTg5NTVfUExMRU4sIDApOworCisJCXdtODk1NV9jb25maWd1cmVfY2xvY2tpbmcoY29kZWMpOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgd204OTU1X3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBjbGtfaWQsCisJCQkgICAgIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk1NV9wcml2ICpwcml2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgZGl2OworCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFdNODk1NV9DTEtfTUNMSzoKKwkJaWYgKGZyZXEgPiAxNTAwMDAwMCkgeworCQkJcHJpdi0+bWNsa19yYXRlID0gZnJlcSAvPSAyOworCQkJZGl2ID0gV004OTU1X01DTEtESVYyOworCQl9IGVsc2UgeworCQkJcHJpdi0+bWNsa19yYXRlID0gZnJlcTsKKwkJCWRpdiA9IDA7CisJCX0KKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfU0FNUExFX1JBVEUsCisJCQkJICAgIFdNODk1NV9NQ0xLRElWMiwgZGl2KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiQ2xvY2sgc291cmNlIGlzICVkIGF0ICV1SHpcbiIsIGNsa19pZCwgZnJlcSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NTVfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXUxNiBhaWYgPSAwOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlhaWYgfD0gV004OTU1X01TOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJYWlmIHw9IFdNODk1NV9MUlA7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJYWlmIHw9IDB4MzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWFpZiB8PSAweDI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWFpZiB8PSAweDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCS8qIGZyYW1lIGludmVyc2lvbiBub3QgdmFsaWQgZm9yIERTUCBtb2RlcyAqLworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZiB8PSBXTTg5NTVfQkNMS0lOVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQkJYWlmIHw9IFdNODk1NV9CQ0xLSU5WIHwgV004OTU1X0xSUDsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYWlmIHw9IFdNODk1NV9CQ0xLSU5WOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCQlhaWYgfD0gV004OTU1X0xSUDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0FVRElPX0lOVEVSRkFDRSwKKwkJCSAgICBXTTg5NTVfTVMgfCBXTTg5NTVfRk9STUFUX01BU0sgfCBXTTg5NTVfQkNMS0lOViB8CisJCQkgICAgV004OTU1X0xSUCwgYWlmKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgd204OTU1X2RpZ2l0YWxfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlpbnQgdmFsOworCisJaWYgKG11dGUpCisJCXZhbCA9IFdNODk1NV9EQUNNVTsKKwllbHNlCisJCXZhbCA9IDA7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfREFDX0NPTlRST0wsIFdNODk1NV9EQUNNVSwgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1NV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0LCBpOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCS8qIFZNSUQgcmVzaXN0YW5jZSAyKjUwayAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5NTVfVk1JRFNFTF9NQVNLLAorCQkJCSAgICAweDEgPDwgV004OTU1X1ZNSURTRUxfU0hJRlQpOworCisJCS8qIERlZmF1bHQgYmlhcyBjdXJyZW50ICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMSwKKwkJCQkgICAgV004OTU1X1ZTRUxfTUFTSywKKwkJCQkgICAgMHgyIDw8IFdNODk1NV9WU0VMX1NISUZUKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksCisJCQkJCQkgICAgd204OTU1LT5zdXBwbGllcyk7CisJCQlpZiAocmV0ICE9IDApIHsKKwkJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwKKwkJCQkJcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQkvKiBTeW5jIGJhY2sgY2FjaGVkIHZhbHVlcyBpZiB0aGV5J3JlCisJCQkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgaGFyZHdhcmUgZGVmYXVsdC4KKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTU1LT5yZWdfY2FjaGUpOyBpKyspIHsKKwkJCQlpZiAoaSA9PSBXTTg5NTVfUkVTRVQpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKHdtODk1NS0+cmVnX2NhY2hlW2ldID09IHdtODk1NV9yZWdbaV0pCisJCQkJCWNvbnRpbnVlOworCisJCQkJc25kX3NvY193cml0ZShjb2RlYywgaSwgd204OTU1LT5yZWdfY2FjaGVbaV0pOworCQkJfQorCisJCQkvKiBFbmFibGUgVlJFRiBhbmQgVk1JRCAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkJICAgIFdNODk1NV9WUkVGIHwKKwkJCQkJICAgIFdNODk1NV9WTUlEU0VMX01BU0ssCisJCQkJCSAgICBXTTg5NTVfVlJFRiB8CisJCQkJCSAgICAweDMgPDwgV004OTU1X1ZSRUZfU0hJRlQpOworCisJCQkvKiBMZXQgVk1JRCByYW1wICovCisJCQltc2xlZXAoNTAwKTsKKworCQkJLyogSGlnaCByZXNpc3RhbmNlIFZST0kgdG8gbWFpbnRhaW4gb3V0cHV0cyAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywKKwkJCQkJICAgIFdNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMywKKwkJCQkJICAgIFdNODk1NV9WUk9JLCBXTTg5NTVfVlJPSSk7CisJCX0KKworCQkvKiBNYWludGFpbiBWTUlEIHdpdGggMioyNTBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk1NV9WTUlEU0VMX01BU0ssCisJCQkJICAgIDB4MiA8PCBXTTg5NTVfVk1JRFNFTF9TSElGVCk7CisKKwkJLyogTWluaW11bSBiaWFzIGN1cnJlbnQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5NTVfVlNFTF9NQVNLLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCS8qIExvdyByZXNpc3RhbmNlIFZST0kgdG8gaGVscCBkaXNjaGFyZ2UgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywKKwkJCQkgICAgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8zLAorCQkJCSAgICBXTTg5NTVfVlJPSSwgMCk7CisKKwkJLyogVHVybiBvZmYgVk1JRCBhbmQgVlJFRiAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5NTVfVlJFRiB8CisJCQkJICAgIFdNODk1NV9WTUlEU0VMX01BU0ssIDApOworCisJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwKKwkJCQkgICAgICAgd204OTU1LT5zdXBwbGllcyk7CisJCWJyZWFrOworCX0KKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODk1NV9SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCisKKyNkZWZpbmUgV004OTU1X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5NTVfZGFpX29wcyA9IHsKKwkuc2V0X3N5c2NsayA9IHdtODk1NV9zZXRfc3lzY2xrLAorCS5zZXRfZm10ID0gd204OTU1X3NldF9mbXQsCisJLmh3X3BhcmFtcyA9IHdtODk1NV9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZSA9IHdtODk1NV9kaWdpdGFsX211dGUsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTU1X2RhaSA9IHsKKwkubmFtZSA9ICJXTTg5NTUiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg5NTVfUkFURVMsCisJCS5mb3JtYXRzID0gV004OTU1X0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJndtODk1NV9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODk1NV9kYWkpOworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODk1NV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwl3bTg5NTVfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODk1NV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB3bTg5NTVfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODk1NV9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgd204OTU1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAod204OTU1X2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODk1NV9jb2RlYzsKKwljb2RlYyA9IHdtODk1NV9jb2RlYzsKKworCS8qIHJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwl3bTg5NTVfYWRkX3dpZGdldHMoY29kZWMpOworCisJcmV0dXJuIHJldDsKKworcGNtX2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODk1NV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk1NSA9IHsKKwkucHJvYmUgPSAJd204OTU1X3Byb2JlLAorCS5yZW1vdmUgPSAJd204OTU1X3JlbW92ZSwKKwkuc3VzcGVuZCA9IAl3bTg5NTVfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204OTU1X3Jlc3VtZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODk1NSk7CisKK3N0YXRpYyBpbnQgd204OTU1X3JlZ2lzdGVyKHN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1LAorCQkJICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODk1NS0+Y29kZWM7CisJaW50IGk7CisKKwlpZiAod204OTU1X2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004OTU1IGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk1NTsKKwljb2RlYy0+bmFtZSA9ICJXTTg5NTUiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg5NTVfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9ICZ3bTg5NTVfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBXTTg5NTVfTUFYX1JFR0lTVEVSOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204OTU1LT5yZWdfY2FjaGU7CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204OTU1X3JlZywgc2l6ZW9mKHdtODk1NV9yZWcpKTsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA3LCA5LCBjb250cm9sKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKTsgaSsrKQorCQl3bTg5NTUtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHdtODk1NV9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwKKwkJCQkgd204OTU1LT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksCisJCQkJICAgIHdtODk1NS0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZ2V0OworCX0KKworCXJldCA9IHdtODk1NV9yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXdtODk1NV9kYWkuZGV2ID0gY29kZWMtPmRldjsKKworCS8qIENoYW5nZSBzb21lIGRlZmF1bHQgc2V0dGluZ3MgLSBsYXRjaCBWVSBhbmQgZW5hYmxlIFpDICovCisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X0xFRlRfREFDX1ZPTFVNRV0gfD0gV004OTU1X0xEVlU7CisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X1JJR0hUX0RBQ19WT0xVTUVdIHw9IFdNODk1NV9SRFZVOworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9MT1VUMV9WT0xVTUVdIHw9IFdNODk1NV9MTzFWVSB8IFdNODk1NV9MTzFaQzsKKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfUk9VVDFfVk9MVU1FXSB8PSBXTTg5NTVfUk8xVlUgfCBXTTg5NTVfUk8xWkM7CisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X0xPVVQyX1ZPTFVNRV0gfD0gV004OTU1X0xPMlZVIHwgV004OTU1X0xPMlpDOworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9ST1VUMl9WT0xVTUVdIHw9IFdNODk1NV9STzJWVSB8IFdNODk1NV9STzJaQzsKKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfTU9OT09VVF9WT0xVTUVdIHw9IFdNODk1NV9NT1pDOworCisJLyogQWxzbyBlbmFibGUgYWRhcHRpdmUgYmFzcyBib29zdCBieSBkZWZhdWx0ICovCisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X0JBU1NfQ09OVFJPTF0gfD0gV004OTU1X0JCOworCisJLyogU2V0IHBsYXRmb3JtIGRhdGEgdmFsdWVzICovCisJaWYgKHdtODk1NS0+cGRhdGEpIHsKKwkJaWYgKHdtODk1NS0+cGRhdGEtPm91dDJfc3BlYWtlcikKKwkJCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMl0KKwkJCQl8PSBXTTg5NTVfUk9VVDJJTlY7CisKKwkJaWYgKHdtODk1NS0+cGRhdGEtPm1vbm9pbl9kaWZmKQorCQkJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X01PTk9fT1VUX01JWF8xXQorCQkJCXw9IFdNODk1NV9ETUVOOworCX0KKworCXdtODk1NV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJLyogQmlhcyBsZXZlbCBjb25maWd1cmF0aW9uIHdpbGwgaGF2ZSBkb25lIGFuIGV4dHJhIGVuYWJsZSAqLworCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwgd204OTU1LT5zdXBwbGllcyk7CisKKwl3bTg5NTVfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5NTVfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9lbmFibGU6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLCB3bTg5NTUtPnN1cHBsaWVzKTsKK2Vycl9nZXQ6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLCB3bTg5NTUtPnN1cHBsaWVzKTsKK2VycjoKKwlrZnJlZSh3bTg5NTUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk1NV91bnJlZ2lzdGVyKHN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1KQoreworCXdtODk1NV9zZXRfYmlhc19sZXZlbCgmd204OTU1LT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLCB3bTg5NTUtPnN1cHBsaWVzKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg5NTVfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODk1NS0+Y29kZWMpOworCWtmcmVlKHdtODk1NSk7CisJd204OTU1X2NvZGVjID0gTlVMTDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODk1NV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTU7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJd204OTU1ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODk1NV9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODk1NSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODk1NS0+Y29kZWM7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTU1KTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCXdtODk1NS0+cGRhdGEgPSBpMmMtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg5NTVfcmVnaXN0ZXIod204OTU1LCBTTkRfU09DX0kyQyk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODk1NV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg5NTVfdW5yZWdpc3Rlcih3bTg5NTUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTU1X2kyY19pZFtdID0geworCXsgIndtODk1NSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204OTU1X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg5NTVfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3bTg5NTUiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODk1NV9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3Aod204OTU1X2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODk1NV9pMmNfaWQsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHdtODk1NV9tb2Rpbml0KHZvaWQpCit7CisJaW50IHJldDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODk1NV9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004OTU1IEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHdtODk1NV9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODk1NV9leGl0KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZ3bTg5NTVfaTJjX2RyaXZlcik7CisjZW5kaWYKK30KK21vZHVsZV9leGl0KHdtODk1NV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODk1NSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NTUuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzNDljOAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmgKQEAgLTAsMCArMSw0ODkgQEAKKy8qCisgKiB3bTg5NTUuaCAgLS0gIFdNODkwNCBBU29DIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcywgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1dNODk1NV9ICisjZGVmaW5lIF9XTTg5NTVfSAorCisjZGVmaW5lIFdNODk1NV9DTEtfTUNMSyAxCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTU1X2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5NTU7CisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQxX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgV004OTU1X1JPVVQxX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgV004OTU1X0RBQ19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgV004OTU1X0FVRElPX0lOVEVSRkFDRSAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgV004OTU1X1NBTVBMRV9SQVRFICAgICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgV004OTU1X0xFRlRfREFDX1ZPTFVNRSAgICAgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgV004OTU1X1JJR0hUX0RBQ19WT0xVTUUgICAgICAgICAgICAgICAgIDB4MEIKKyNkZWZpbmUgV004OTU1X0JBU1NfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgV004OTU1X1RSRUJMRV9DT05UUk9MICAgICAgICAgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgV004OTU1X1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYKKyNkZWZpbmUgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8xICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8yICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSAgICAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiAgICAgICAgICAgICAgIDB4MUEKKyNkZWZpbmUgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8zICAgICAgICAgICAgIDB4MUIKKyNkZWZpbmUgV004OTU1X0xFRlRfT1VUX01JWF8xICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgV004OTU1X0xFRlRfT1VUX01JWF8yICAgICAgICAgICAgICAgICAgIDB4MjMKKyNkZWZpbmUgV004OTU1X1JJR0hUX09VVF9NSVhfMSAgICAgICAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgV004OTU1X1JJR0hUX09VVF9NSVhfMiAgICAgICAgICAgICAgICAgIDB4MjUKKyNkZWZpbmUgV004OTU1X01PTk9fT1VUX01JWF8xICAgICAgICAgICAgICAgICAgIDB4MjYKKyNkZWZpbmUgV004OTU1X01PTk9fT1VUX01JWF8yICAgICAgICAgICAgICAgICAgIDB4MjcKKyNkZWZpbmUgV004OTU1X0xPVVQyX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgV004OTU1X1JPVVQyX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgIDB4MjkKKyNkZWZpbmUgV004OTU1X01PTk9PVVRfVk9MVU1FICAgICAgICAgICAgICAgICAgIDB4MkEKKyNkZWZpbmUgV004OTU1X0NMT0NLSU5HX1BMTCAgICAgICAgICAgICAgICAgICAgIDB4MkIKKyNkZWZpbmUgV004OTU1X1BMTF9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgV004OTU1X1BMTF9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgIDB4MkQKKyNkZWZpbmUgV004OTU1X1BMTF9DT05UUk9MXzMgICAgICAgICAgICAgICAgICAgIDB4MkUKKyNkZWZpbmUgV004OTU1X1BMTF9DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgIDB4M0IKKworI2RlZmluZSBXTTg5NTVfUkVHSVNURVJfQ09VTlQgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgV004OTU1X01BWF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgIDB4M0IKKworLyoKKyAqIEZpZWxkIERlZmluaXRpb25zLgorICovCisKKy8qCisgKiBSMiAoMHgwMikgLSBMT1VUMSB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfTE8xVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMTzFWVSAqLworI2RlZmluZSBXTTg5NTVfTE8xVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMTzFWVSAqLworI2RlZmluZSBXTTg5NTVfTE8xVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMTzFWVSAqLworI2RlZmluZSBXTTg5NTVfTE8xVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTzFWVSAqLworI2RlZmluZSBXTTg5NTVfTE8xWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMTzFaQyAqLworI2RlZmluZSBXTTg5NTVfTE8xWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMTzFaQyAqLworI2RlZmluZSBXTTg5NTVfTE8xWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMTzFaQyAqLworI2RlZmluZSBXTTg5NTVfTE8xWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTzFaQyAqLworI2RlZmluZSBXTTg5NTVfTE9VVFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBMT1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X0xPVVRWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTE9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9MT1VUVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPVVRWT0wgLSBbNjowXSAqLworCisvKgorICogUjMgKDB4MDMpIC0gUk9VVDEgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTU1X1JPMVZVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUk8xVlUgKi8KKyNkZWZpbmUgV004OTU1X1JPMVZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUk8xVlUgKi8KKyNkZWZpbmUgV004OTU1X1JPMVZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUk8xVlUgKi8KKyNkZWZpbmUgV004OTU1X1JPMVZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk8xVlUgKi8KKyNkZWZpbmUgV004OTU1X1JPMVpDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk8xWkMgKi8KKyNkZWZpbmUgV004OTU1X1JPMVpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk8xWkMgKi8KKyNkZWZpbmUgV004OTU1X1JPMVpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUk8xWkMgKi8KKyNkZWZpbmUgV004OTU1X1JPMVpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk8xWkMgKi8KKyNkZWZpbmUgV004OTU1X1JPVVRWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogUk9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9ST1VUVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJPVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfUk9VVFZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBST1VUVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFI1ICgweDA1KSAtIERBQyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004OTU1X0RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREFUICovCisjZGVmaW5lIFdNODk1NV9EQVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERBVCAqLworI2RlZmluZSBXTTg5NTVfREFUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBEQVQgKi8KKyNkZWZpbmUgV004OTU1X0RBVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFUICovCisjZGVmaW5lIFdNODk1NV9EQUNNVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ01VICovCisjZGVmaW5lIFdNODk1NV9EQUNNVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ01VICovCisjZGVmaW5lIFdNODk1NV9EQUNNVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ01VICovCisjZGVmaW5lIFdNODk1NV9EQUNNVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ01VICovCisjZGVmaW5lIFdNODk1NV9ERUVNUEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDYgIC8qIERFRU1QSCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk1NV9ERUVNUEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERFRU1QSCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk1NV9ERUVNUEhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERFRU1QSCAtIFsyOjFdICovCisKKy8qCisgKiBSNyAoMHgwNykgLSBBdWRpbyBJbnRlcmZhY2UKKyAqLworI2RlZmluZSBXTTg5NTVfQkNMS0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQ0xLSU5WICovCisjZGVmaW5lIFdNODk1NV9CQ0xLSU5WX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEJDTEtJTlYgKi8KKyNkZWZpbmUgV004OTU1X0JDTEtJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogQkNMS0lOViAqLworI2RlZmluZSBXTTg5NTVfQkNMS0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLSU5WICovCisjZGVmaW5lIFdNODk1NV9NUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1TICovCisjZGVmaW5lIFdNODk1NV9NU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1TICovCisjZGVmaW5lIFdNODk1NV9NU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIE1TICovCisjZGVmaW5lIFdNODk1NV9NU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1TICovCisjZGVmaW5lIFdNODk1NV9MUlNXQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExSU1dBUCAqLworI2RlZmluZSBXTTg5NTVfTFJTV0FQX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMUlNXQVAgKi8KKyNkZWZpbmUgV004OTU1X0xSU1dBUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTFJTV0FQICovCisjZGVmaW5lIFdNODk1NV9MUlNXQVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSU1dBUCAqLworI2RlZmluZSBXTTg5NTVfTFJQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMUlAgKi8KKyNkZWZpbmUgV004OTU1X0xSUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTFJQICovCisjZGVmaW5lIFdNODk1NV9MUlBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExSUCAqLworI2RlZmluZSBXTTg5NTVfTFJQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUlAgKi8KKyNkZWZpbmUgV004OTU1X1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogV0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5NTVfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBXTCAtIFszOjJdICovCisjZGVmaW5lIFdNODk1NV9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFdMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTU1X0ZPUk1BVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogRk9STUFUIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTU1X0ZPUk1BVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRk9STUFUIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTU1X0ZPUk1BVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRk9STUFUIC0gWzE6MF0gKi8KKworLyoKKyAqIFI4ICgweDA4KSAtIFNhbXBsZSBSYXRlCisgKi8KKyNkZWZpbmUgV004OTU1X0JDTEtESVYyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQkNMS0RJVjIgKi8KKyNkZWZpbmUgV004OTU1X0JDTEtESVYyX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQkNMS0RJVjIgKi8KKyNkZWZpbmUgV004OTU1X0JDTEtESVYyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogQkNMS0RJVjIgKi8KKyNkZWZpbmUgV004OTU1X0JDTEtESVYyX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS0RJVjIgKi8KKyNkZWZpbmUgV004OTU1X01DTEtESVYyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUNMS0RJVjIgKi8KKyNkZWZpbmUgV004OTU1X01DTEtESVYyX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUNMS0RJVjIgKi8KKyNkZWZpbmUgV004OTU1X01DTEtESVYyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTUNMS0RJVjIgKi8KKyNkZWZpbmUgV004OTU1X01DTEtESVYyX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS0RJVjIgKi8KKyNkZWZpbmUgV004OTU1X1NSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzRSAgLyogU1IgLSBbNToxXSAqLworI2RlZmluZSBXTTg5NTVfU1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk1NV9TUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFNSIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTU1X1VTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVVNCICovCisjZGVmaW5lIFdNODk1NV9VU0JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFVTQiAqLworI2RlZmluZSBXTTg5NTVfVVNCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBVU0IgKi8KKyNkZWZpbmUgV004OTU1X1VTQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVVNCICovCisKKy8qCisgKiBSMTAgKDB4MEEpIC0gTGVmdCBEQUMgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTU1X0xEVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTERWVSAqLworI2RlZmluZSBXTTg5NTVfTERWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRFZVICovCisjZGVmaW5lIFdNODk1NV9MRFZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExEVlUgKi8KKyNkZWZpbmUgV004OTU1X0xEVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERWVSAqLworI2RlZmluZSBXTTg5NTVfTERBQ1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBMREFDVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU1X0xEQUNWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTERBQ1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk1NV9MREFDVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExEQUNWT0wgLSBbNzowXSAqLworCisvKgorICogUjExICgweDBCKSAtIFJpZ2h0IERBQyB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfUkRWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRFZVICovCisjZGVmaW5lIFdNODk1NV9SRFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEVlUgKi8KKyNkZWZpbmUgV004OTU1X1JEVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUkRWVSAqLworI2RlZmluZSBXTTg5NTVfUkRWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSRFZVICovCisjZGVmaW5lIFdNODk1NV9SREFDVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIFJEQUNWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NTVfUkRBQ1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSREFDVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JEQUNWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUkRBQ1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTIgKDB4MEMpIC0gQmFzcyBjb250cm9sCisgKi8KKyNkZWZpbmUgV004OTU1X0JCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQkIgKi8KKyNkZWZpbmUgV004OTU1X0JCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQkIgKi8KKyNkZWZpbmUgV004OTU1X0JCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogQkIgKi8KKyNkZWZpbmUgV004OTU1X0JCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkIgKi8KKyNkZWZpbmUgV004OTU1X0JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQkMgKi8KKyNkZWZpbmUgV004OTU1X0JDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQkMgKi8KKyNkZWZpbmUgV004OTU1X0JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogQkMgKi8KKyNkZWZpbmUgV004OTU1X0JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkMgKi8KKyNkZWZpbmUgV004OTU1X0JBU1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogQkFTUyAtIFszOjBdICovCisjZGVmaW5lIFdNODk1NV9CQVNTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEJBU1MgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NTVfQkFTU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBCQVNTIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxMyAoMHgwRCkgLSBUcmVibGUgY29udHJvbAorICovCisjZGVmaW5lIFdNODk1NV9UQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFRDICovCisjZGVmaW5lIFdNODk1NV9UQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFRDICovCisjZGVmaW5lIFdNODk1NV9UQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFRDICovCisjZGVmaW5lIFdNODk1NV9UQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRDICovCisjZGVmaW5lIFdNODk1NV9UUkJMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIFRSQkwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NTVfVFJCTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBUUkJMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTU1X1RSQkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogVFJCTCAtIFszOjBdICovCisKKy8qCisgKiBSMTUgKDB4MEYpIC0gUmVzZXQKKyAqLworI2RlZmluZSBXTTg5NTVfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMUZGICAvKiBSRVNFVCAtIFs4OjBdICovCisjZGVmaW5lIFdNODk1NV9SRVNFVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJFU0VUIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JFU0VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogUkVTRVQgLSBbODowXSAqLworCisvKgorICogUjIzICgweDE3KSAtIEFkZGl0aW9uYWwgY29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5NTVfVFNERU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBUU0RFTiAqLworI2RlZmluZSBXTTg5NTVfVFNERU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBUU0RFTiAqLworI2RlZmluZSBXTTg5NTVfVFNERU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBUU0RFTiAqLworI2RlZmluZSBXTTg5NTVfVFNERU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUU0RFTiAqLworI2RlZmluZSBXTTg5NTVfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEMwICAvKiBWU0VMIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTU1X1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogVlNFTCAtIFs3OjZdICovCisjZGVmaW5lIFdNODk1NV9WU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFZTRUwgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5NTVfRE1PTk9NSVhfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDMwICAvKiBETU9OT01JWCAtIFs1OjRdICovCisjZGVmaW5lIFdNODk1NV9ETU9OT01JWF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERNT05PTUlYIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTU1X0RNT05PTUlYX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRE1PTk9NSVggLSBbNTo0XSAqLworI2RlZmluZSBXTTg5NTVfREFDSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNJTlYgKi8KKyNkZWZpbmUgV004OTU1X0RBQ0lOVl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDSU5WICovCisjZGVmaW5lIFdNODk1NV9EQUNJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0lOViAqLworI2RlZmluZSBXTTg5NTVfREFDSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNJTlYgKi8KKyNkZWZpbmUgV004OTU1X1RPRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVE9FTiAqLworI2RlZmluZSBXTTg5NTVfVE9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBUT0VOICovCisjZGVmaW5lIFdNODk1NV9UT0VOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFRPRU4gKi8KKyNkZWZpbmUgV004OTU1X1RPRU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVE9FTiAqLworCisvKgorICogUjI0ICgweDE4KSAtIEFkZGl0aW9uYWwgY29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTg5NTVfT1VUM1NXX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTgwICAvKiBPVVQzU1cgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NTVfT1VUM1NXX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBPVVQzU1cgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NTVfT1VUM1NXX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBPVVQzU1cgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJJTlYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBST1VUMklOViAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJJTlZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBST1VUMklOViAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBST1VUMklOViAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST1VUMklOViAqLworI2RlZmluZSBXTTg5NTVfREFDT1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNPU1IgKi8KKyNkZWZpbmUgV004OTU1X0RBQ09TUl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDT1NSICovCisjZGVmaW5lIFdNODk1NV9EQUNPU1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ09TUiAqLworI2RlZmluZSBXTTg5NTVfREFDT1NSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNPU1IgKi8KKworLyoKKyAqIFIyNSAoMHgxOSkgLSBQb3dlciBNYW5hZ2VtZW50ICgxKQorICovCisjZGVmaW5lIFdNODk1NV9WTUlEU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxODAgIC8qIFZNSURTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NTVfVk1JRFNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBWTUlEU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTU1X1ZNSURTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVk1JRFNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9WUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFZSRUYgKi8KKyNkZWZpbmUgV004OTU1X1ZSRUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVlJFRiAqLworI2RlZmluZSBXTTg5NTVfVlJFRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBWUkVGICovCisjZGVmaW5lIFdNODk1NV9WUkVGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZSRUYgKi8KKyNkZWZpbmUgV004OTU1X0RJR0VOQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRElHRU5CICovCisjZGVmaW5lIFdNODk1NV9ESUdFTkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERJR0VOQiAqLworI2RlZmluZSBXTTg5NTVfRElHRU5CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBESUdFTkIgKi8KKyNkZWZpbmUgV004OTU1X0RJR0VOQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRElHRU5CICovCisKKy8qCisgKiBSMjYgKDB4MUEpIC0gUG93ZXIgTWFuYWdlbWVudCAoMikKKyAqLworI2RlZmluZSBXTTg5NTVfREFDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNMICovCisjZGVmaW5lIFdNODk1NV9EQUNMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ0wgKi8KKyNkZWZpbmUgV004OTU1X0RBQ0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDTCAqLworI2RlZmluZSBXTTg5NTVfREFDTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMICovCisjZGVmaW5lIFdNODk1NV9EQUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERBQ1IgKi8KKyNkZWZpbmUgV004OTU1X0RBQ1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREFDUiAqLworI2RlZmluZSBXTTg5NTVfREFDUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBEQUNSICovCisjZGVmaW5lIFdNODk1NV9EQUNSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ1IgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTE9VVDEgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQxX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTE9VVDEgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTE9VVDEgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQxX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9VVDEgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUk9VVDEgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQxX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUk9VVDEgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUk9VVDEgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQxX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9VVDEgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTE9VVDIgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQyX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTE9VVDIgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTE9VVDIgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQyX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9VVDIgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogUk9VVDIgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQyX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogUk9VVDIgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUk9VVDIgKi8KKyNkZWZpbmUgV004OTU1X1JPVVQyX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9VVDIgKi8KKyNkZWZpbmUgV004OTU1X01PTk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTU9OTyAqLworI2RlZmluZSBXTTg5NTVfTU9OT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNT05PICovCisjZGVmaW5lIFdNODk1NV9NT05PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1PTk8gKi8KKyNkZWZpbmUgV004OTU1X01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTU9OTyAqLworI2RlZmluZSBXTTg5NTVfT1VUMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBPVVQzICovCisjZGVmaW5lIFdNODk1NV9PVVQzX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE9VVDMgKi8KKyNkZWZpbmUgV004OTU1X09VVDNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUMyAqLworI2RlZmluZSBXTTg5NTVfT1VUM19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPVVQzICovCisKKy8qCisgKiBSMjcgKDB4MUIpIC0gQWRkaXRpb25hbCBDb250cm9sICgzKQorICovCisjZGVmaW5lIFdNODk1NV9WUk9JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFZST0kgKi8KKyNkZWZpbmUgV004OTU1X1ZST0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVlJPSSAqLworI2RlZmluZSBXTTg5NTVfVlJPSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBWUk9JICovCisjZGVmaW5lIFdNODk1NV9WUk9JX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZST0kgKi8KKworLyoKKyAqIFIzNCAoMHgyMikgLSBMZWZ0IG91dCBNaXggKDEpCisgKi8KKyNkZWZpbmUgV004OTU1X0xEMkxPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTEQyTE8gKi8KKyNkZWZpbmUgV004OTU1X0xEMkxPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTEQyTE8gKi8KKyNkZWZpbmUgV004OTU1X0xEMkxPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTEQyTE8gKi8KKyNkZWZpbmUgV004OTU1X0xEMkxPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEQyTE8gKi8KKyNkZWZpbmUgV004OTU1X0xJMkxPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkyTE8gKi8KKyNkZWZpbmUgV004OTU1X0xJMkxPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkyTE8gKi8KKyNkZWZpbmUgV004OTU1X0xJMkxPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTEkyTE8gKi8KKyNkZWZpbmUgV004OTU1X0xJMkxPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEkyTE8gKi8KKyNkZWZpbmUgV004OTU1X0xJMkxPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogTEkyTE9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMSTJMT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9MSTJMT1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExJMkxPVk9MIC0gWzY6NF0gKi8KKworLyoKKyAqIFIzNSAoMHgyMykgLSBMZWZ0IG91dCBNaXggKDIpCisgKi8KKyNkZWZpbmUgV004OTU1X1JEMkxPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkQyTE8gKi8KKyNkZWZpbmUgV004OTU1X1JEMkxPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkQyTE8gKi8KKyNkZWZpbmUgV004OTU1X1JEMkxPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUkQyTE8gKi8KKyNkZWZpbmUgV004OTU1X1JEMkxPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkQyTE8gKi8KKyNkZWZpbmUgV004OTU1X1JJMkxPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkyTE8gKi8KKyNkZWZpbmUgV004OTU1X1JJMkxPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkyTE8gKi8KKyNkZWZpbmUgV004OTU1X1JJMkxPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUkkyTE8gKi8KKyNkZWZpbmUgV004OTU1X1JJMkxPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkkyTE8gKi8KKyNkZWZpbmUgV004OTU1X1JJMkxPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogUkkyTE9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBSSTJMT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9SSTJMT1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJJMkxPVk9MIC0gWzY6NF0gKi8KKworLyoKKyAqIFIzNiAoMHgyNCkgLSBSaWdodCBvdXQgTWl4ICgxKQorICovCisjZGVmaW5lIFdNODk1NV9MRDJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEMlJPICovCisjZGVmaW5lIFdNODk1NV9MRDJST19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEMlJPICovCisjZGVmaW5lIFdNODk1NV9MRDJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExEMlJPICovCisjZGVmaW5lIFdNODk1NV9MRDJST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExEMlJPICovCisjZGVmaW5lIFdNODk1NV9MSTJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMlJPICovCisjZGVmaW5lIFdNODk1NV9MSTJST19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMlJPICovCisjZGVmaW5lIFdNODk1NV9MSTJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJMlJPICovCisjZGVmaW5lIFdNODk1NV9MSTJST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJMlJPICovCisjZGVmaW5lIFdNODk1NV9MSTJST1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIExJMlJPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTEkyUk9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfTEkyUk9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMSTJST1ZPTCAtIFs2OjRdICovCisKKy8qCisgKiBSMzcgKDB4MjUpIC0gUmlnaHQgT3V0IE1peCAoMikKKyAqLworI2RlZmluZSBXTTg5NTVfUkQyUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRDJSTyAqLworI2RlZmluZSBXTTg5NTVfUkQyUk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRDJSTyAqLworI2RlZmluZSBXTTg5NTVfUkQyUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSRDJSTyAqLworI2RlZmluZSBXTTg5NTVfUkQyUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSRDJSTyAqLworI2RlZmluZSBXTTg5NTVfUkkyUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTJSTyAqLworI2RlZmluZSBXTTg5NTVfUkkyUk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTJSTyAqLworI2RlZmluZSBXTTg5NTVfUkkyUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSSTJSTyAqLworI2RlZmluZSBXTTg5NTVfUkkyUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSTJSTyAqLworI2RlZmluZSBXTTg5NTVfUkkyUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBSSTJST1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9SSTJST1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJJMlJPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X1JJMlJPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkkyUk9WT0wgLSBbNjo0XSAqLworCisvKgorICogUjM4ICgweDI2KSAtIE1vbm8gb3V0IE1peCAoMSkKKyAqLworI2RlZmluZSBXTTg5NTVfTEQyTU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRDJNTyAqLworI2RlZmluZSBXTTg5NTVfTEQyTU9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRDJNTyAqLworI2RlZmluZSBXTTg5NTVfTEQyTU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMRDJNTyAqLworI2RlZmluZSBXTTg5NTVfTEQyTU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRDJNTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTJNTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTU9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTJNTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSTJNTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSTJNTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTU9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBMSTJNT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9MSTJNT1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExJMk1PVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X0xJMk1PVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTEkyTU9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfRE1FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBETUVOICovCisjZGVmaW5lIFdNODk1NV9ETUVOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERNRU4gKi8KKyNkZWZpbmUgV004OTU1X0RNRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRE1FTiAqLworI2RlZmluZSBXTTg5NTVfRE1FTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUVOICovCisKKy8qCisgKiBSMzkgKDB4MjcpIC0gTW9ubyBvdXQgTWl4ICgyKQorICovCisjZGVmaW5lIFdNODk1NV9SRDJNTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEMk1PICovCisjZGVmaW5lIFdNODk1NV9SRDJNT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEMk1PICovCisjZGVmaW5lIFdNODk1NV9SRDJNT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJEMk1PICovCisjZGVmaW5lIFdNODk1NV9SRDJNT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJEMk1PICovCisjZGVmaW5lIFdNODk1NV9SSTJNTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMk1PICovCisjZGVmaW5lIFdNODk1NV9SSTJNT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMk1PICovCisjZGVmaW5lIFdNODk1NV9SSTJNT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJJMk1PICovCisjZGVmaW5lIFdNODk1NV9SSTJNT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJMk1PICovCisjZGVmaW5lIFdNODk1NV9SSTJNT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIFJJMk1PVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUkkyTU9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfUkkyTU9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSSTJNT1ZPTCAtIFs2OjRdICovCisKKy8qCisgKiBSNDAgKDB4MjgpIC0gTE9VVDIgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTU1X0xPMlZVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTE8yVlUgKi8KKyNkZWZpbmUgV004OTU1X0xPMlZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTE8yVlUgKi8KKyNkZWZpbmUgV004OTU1X0xPMlZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTE8yVlUgKi8KKyNkZWZpbmUgV004OTU1X0xPMlZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE8yVlUgKi8KKyNkZWZpbmUgV004OTU1X0xPMlpDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE8yWkMgKi8KKyNkZWZpbmUgV004OTU1X0xPMlpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE8yWkMgKi8KKyNkZWZpbmUgV004OTU1X0xPMlpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE8yWkMgKi8KKyNkZWZpbmUgV004OTU1X0xPMlpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE8yWkMgKi8KKyNkZWZpbmUgV004OTU1X0xPVVQyVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogTE9VVDJWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMT1VUMlZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9MT1VUMlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPVVQyVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFI0MSAoMHgyOSkgLSBST1VUMiB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfUk8yVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSTzJWVSAqLworI2RlZmluZSBXTTg5NTVfUk8yVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSTzJWVSAqLworI2RlZmluZSBXTTg5NTVfUk8yVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSTzJWVSAqLworI2RlZmluZSBXTTg5NTVfUk8yVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTzJWVSAqLworI2RlZmluZSBXTTg5NTVfUk8yWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSTzJaQyAqLworI2RlZmluZSBXTTg5NTVfUk8yWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSTzJaQyAqLworI2RlZmluZSBXTTg5NTVfUk8yWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSTzJaQyAqLworI2RlZmluZSBXTTg5NTVfUk8yWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTzJaQyAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBST1VUMlZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9ST1VUMlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJPVVQyVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JPVVQyVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUk9VVDJWT0wgLSBbNjowXSAqLworCisvKgorICogUjQyICgweDJBKSAtIE1PTk9PVVQgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTU1X01PWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTU9aQyAqLworI2RlZmluZSBXTTg5NTVfTU9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNT1pDICovCisjZGVmaW5lIFdNODk1NV9NT1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE1PWkMgKi8KKyNkZWZpbmUgV004OTU1X01PWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTU9aQyAqLworI2RlZmluZSBXTTg5NTVfTU9VVFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBNT1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X01PVVRWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTU9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9NT1VUVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE1PVVRWT0wgLSBbNjowXSAqLworCisvKgorICogUjQzICgweDJCKSAtIENsb2NraW5nIC8gUExMCisgKi8KKyNkZWZpbmUgV004OTU1X01DTEtTRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUNMS1NFTCAqLworI2RlZmluZSBXTTg5NTVfTUNMS1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNQ0xLU0VMICovCisjZGVmaW5lIFdNODk1NV9NQ0xLU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE1DTEtTRUwgKi8KKyNkZWZpbmUgV004OTU1X01DTEtTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS1NFTCAqLworI2RlZmluZSBXTTg5NTVfUExMT1VURElWMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBQTExPVVRESVYyICovCisjZGVmaW5lIFdNODk1NV9QTExPVVRESVYyX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFBMTE9VVERJVjIgKi8KKyNkZWZpbmUgV004OTU1X1BMTE9VVERJVjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUExMT1VURElWMiAqLworI2RlZmluZSBXTTg5NTVfUExMT1VURElWMl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQTExPVVRESVYyICovCisjZGVmaW5lIFdNODk1NV9QTExfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFBMTF9SQiAqLworI2RlZmluZSBXTTg5NTVfUExMX1JCX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBQTExfUkIgKi8KKyNkZWZpbmUgV004OTU1X1BMTF9SQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUExMX1JCICovCisjZGVmaW5lIFdNODk1NV9QTExfUkJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFBMTF9SQiAqLworI2RlZmluZSBXTTg5NTVfUExMRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBQTExFTiAqLworI2RlZmluZSBXTTg5NTVfUExMRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBQTExFTiAqLworI2RlZmluZSBXTTg5NTVfUExMRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBQTExFTiAqLworI2RlZmluZSBXTTg5NTVfUExMRU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQTExFTiAqLworCisvKgorICogUjQ0ICgweDJDKSAtIFBMTCBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTg5NTVfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUUwICAvKiBOIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTU1X05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTiAtIFs4OjVdICovCisjZGVmaW5lIFdNODk1NV9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIE4gLSBbODo1XSAqLworI2RlZmluZSBXTTg5NTVfS18yMV8xOF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBLKDIxOjE4KSAtIFszOjBdICovCisjZGVmaW5lIFdNODk1NV9LXzIxXzE4X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEsoMjE6MTgpIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTU1X0tfMjFfMThfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogSygyMToxOCkgLSBbMzowXSAqLworCisvKgorICogUjQ1ICgweDJEKSAtIFBMTCBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTg5NTVfS18xN185X01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMUZGICAvKiBLKDE3OjkpIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004OTU1X0tfMTdfOV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSygxNzo5KSAtIFs4OjBdICovCisjZGVmaW5lIFdNODk1NV9LXzE3XzlfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEsoMTc6OSkgLSBbODowXSAqLworCisvKgorICogUjQ2ICgweDJFKSAtIFBMTCBDb250cm9sIDMKKyAqLworI2RlZmluZSBXTTg5NTVfS184XzBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMUZGICAvKiBLKDg6MCkgLSBbODowXSAqLworI2RlZmluZSBXTTg5NTVfS184XzBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBLKDg6MCkgLSBbODowXSAqLworI2RlZmluZSBXTTg5NTVfS184XzBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBLKDg6MCkgLSBbODowXSAqLworCisvKgorICogUjU5ICgweDNCKSAtIFBMTCBDb250cm9sIDQKKyAqLworI2RlZmluZSBXTTg5NTVfS0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBLRU4gKi8KKyNkZWZpbmUgV004OTU1X0tFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogS0VOICovCisjZGVmaW5lIFdNODk1NV9LRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEtFTiAqLworI2RlZmluZSBXTTg5NTVfS0VOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBLRU4gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYwppbmRleCBhODAwN2Q1Li5kMjM0MmM1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMKQEAgLTEwMjIsNiArMTAyMiw5IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplOyBpKyspIHsKKwkJaWYgKHJlZ19jYWNoZVtpXSA9PSB3bTg5NjFfcmVnX2RlZmF1bHRzW2ldKQorCQkJY29udGludWU7CisKIAkJaWYgKGkgPT0gV004OTYxX1NPRlRXQVJFX1JFU0VUKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCmluZGV4IDg4MTI3NTEuLmVlNjM3YWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYwpAQCAtMTcwLDYgKzE3MCwxMCBAQAogCiBTT0NfU0lOR0xFKCJDYXB0dXJlIEJvb3N0KCsyMGRCKSIsIFdNODk3NF9BRENCT09TVCwgIDgsIDEsIDApLAogU09DX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NzRfTU9OT01JWCwgNiwgMSwgMSksCisKKy8qIERBQyAvIEFEQyBvdmVyc2FtcGxpbmcgKi8KK1NPQ19TSU5HTEUoIkRBQyAxMjh4IE92ZXJzYW1wbGluZyBTd2l0Y2giLCBXTTg5NzRfREFDLCA4LCAxLCAwKSwKK1NPQ19TSU5HTEUoIkFEQyAxMjh4IE92ZXJzYW1wbGluZyBTd2l0Y2giLCBXTTg5NzRfQURDLCA4LCAxLCAwKSwKIH07CiAKIC8qIFNwZWFrZXIgT3V0cHV0IE1peGVyICovCkBAIC0zODEsMTQgKzM4NSw2IEBACiAJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc0X0NMT0NLKSAmIDB4MTFmOwogCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfQ0xPQ0ssIHJlZyB8IGRpdik7CiAJCWJyZWFrOwotCWNhc2UgV004OTc0X0FEQ0NMSzoKLQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfQURDKSAmIDB4MWY3OwotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfQURDLCByZWcgfCBkaXYpOwotCQlicmVhazsKLQljYXNlIFdNODk3NF9EQUNDTEs6Ci0JCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc0X0RBQykgJiAweDFmNzsKLQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X0RBQywgcmVnIHwgZGl2KTsKLQkJYnJlYWs7CiAJY2FzZSBXTTg5NzRfQkNMS0RJVjoKIAkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfQ0xPQ0spICYgMHgxZTM7CiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9DTE9DSywgcmVnIHwgZGl2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5oCmluZGV4IDk4ZGU5NTYuLjg5NmE3ZjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuaApAQCAtNTcsMTcgKzU3LDcgQEAKIC8qIENsb2NrIGRpdmlkZXIgSWQncyAqLwogI2RlZmluZSBXTTg5NzRfT1BDTEtESVYJCTAKICNkZWZpbmUgV004OTc0X01DTEtESVYJCTEKLSNkZWZpbmUgV004OTc0X0FEQ0NMSwkJMgotI2RlZmluZSBXTTg5NzRfREFDQ0xLCQkzCi0jZGVmaW5lIFdNODk3NF9CQ0xLRElWCQk0Ci0KLS8qIERBQyBjbG9jayBkaXZpZGVycyAqLwotI2RlZmluZSBXTTg5NzRfREFDQ0xLX0YyCSgxIDw8IDMpCi0jZGVmaW5lIFdNODk3NF9EQUNDTEtfRjQJKDAgPDwgMykKLQotLyogQURDIGNsb2NrIGRpdmlkZXJzICovCi0jZGVmaW5lIFdNODk3NF9BRENDTEtfRjIJKDEgPDwgMykKLSNkZWZpbmUgV004OTc0X0FEQ0NMS19GNAkoMCA8PCAzKQorI2RlZmluZSBXTTg5NzRfQkNMS0RJVgkJMgogCiAvKiBQTEwgT3V0IGRpdmlkZXJzICovCiAjZGVmaW5lIFdNODk3NF9PUENMS0RJVl8xCSgwIDw8IDQpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGJiNTllCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguYwpAQCAtMCwwICsxLDExNDkgQEAKKy8qCisgKiB3bTg5NzguYyAgLS0gIFdNODk3OCBBTFNBIFNvQyBBdWRpbyBDb2RlYyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDYXJsb3MgTXVub3ogPGNhcmxvc0BrZW5hdGkuY29tPgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQmFzZWQgb24gd204OTc0IGFuZCB3bTg5OTAgYnkgTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgIndtODk3OC5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODk3OF9jb2RlYzsKKworLyogd204OTc4IHJlZ2lzdGVyIGNhY2hlLiBOb3RlIHRoYXQgcmVnaXN0ZXIgMCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNhY2hlLiAqLworc3RhdGljIGNvbnN0IHUxNiB3bTg5NzhfcmVnW1dNODk3OF9DQUNIRVJFR05VTV0gPSB7CisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAweDAwLi4uMHgwMyAqLworCTB4MDA1MCwgMHgwMDAwLCAweDAxNDAsIDB4MDAwMCwJLyogMHgwNC4uLjB4MDcgKi8KKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwZmYsCS8qIDB4MDguLi4weDBiICovCisJMHgwMGZmLCAweDAwMDAsIDB4MDEwMCwgMHgwMGZmLAkvKiAweDBjLi4uMHgwZiAqLworCTB4MDBmZiwgMHgwMDAwLCAweDAxMmMsIDB4MDAyYywJLyogMHgxMC4uLjB4MTMgKi8KKwkweDAwMmMsIDB4MDAyYywgMHgwMDJjLCAweDAwMDAsCS8qIDB4MTQuLi4weDE3ICovCisJMHgwMDMyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAweDE4Li4uMHgxYiAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwJLyogMHgxYy4uLjB4MWYgKi8KKwkweDAwMzgsIDB4MDAwYiwgMHgwMDMyLCAweDAwMDAsCS8qIDB4MjAuLi4weDIzICovCisJMHgwMDA4LCAweDAwMGMsIDB4MDA5MywgMHgwMGU5LAkvKiAweDI0Li4uMHgyNyAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwJLyogMHgyOC4uLjB4MmIgKi8KKwkweDAwMzMsIDB4MDAxMCwgMHgwMDEwLCAweDAxMDAsCS8qIDB4MmMuLi4weDJmICovCisJMHgwMTAwLCAweDAwMDIsIDB4MDAwMSwgMHgwMDAxLAkvKiAweDMwLi4uMHgzMyAqLworCTB4MDAzOSwgMHgwMDM5LCAweDAwMzksIDB4MDAzOSwJLyogMHgzNC4uLjB4MzcgKi8KKwkweDAwMDEsCTB4MDAwMSwJCQkvKiAweDM4Li4uMHgzYiAqLworfTsKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qgd204OTc4X3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXVuc2lnbmVkIGludCBmX3BsbG91dDsKKwl1bnNpZ25lZCBpbnQgZl9tY2xrOworCXVuc2lnbmVkIGludCBmXzI1NmZzOworCXVuc2lnbmVkIGludCBmX29wY2xrOworCWludCBtY2xrX2lkeDsKKwllbnVtIHdtODk3OF9zeXNjbGtfc3JjIHN5c2NsazsKKwl1MTYgcmVnX2NhY2hlW1dNODk3OF9DQUNIRVJFR05VTV07Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2NvbXBhbmRpbmdbXSA9IHsiT2ZmIiwgIk5DIiwgInUtbGF3IiwgIkEtbGF3In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxbW9kZVtdID0geyJDYXB0dXJlIiwgIlBsYXliYWNrIn07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2J3W10gPSB7Ik5hcnJvdyIsICJXaWRlIn07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxMVtdID0geyI4MEh6IiwgIjEwNUh6IiwgIjEzNUh6IiwgIjE3NUh6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxMltdID0geyIyMzBIeiIsICIzMDBIeiIsICIzODVIeiIsICI1MDBIeiJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODk3OF9lcTNbXSA9IHsiNjUwSHoiLCAiODUwSHoiLCAiMS4xa0h6IiwgIjEuNGtIeiJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODk3OF9lcTRbXSA9IHsiMS44a0h6IiwgIjIuNGtIeiIsICIzLjJrSHoiLCAiNC4xa0h6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxNVtdID0geyI1LjNrSHoiLCAiNi45a0h6IiwgIjlrSHoiLCAiMTEuN2tIeiJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODk3OF9hbGMzW10gPSB7IkFMQyIsICJMaW1pdGVyIn07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2FsYzFbXSA9IHsiT2ZmIiwgIlJpZ2h0IiwgIkxlZnQiLCAiQm90aCJ9OworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woYWRjX2NvbXBhbmQsIFdNODk3OF9DT01QQU5ESU5HX0NPTlRST0wsIDEsCisJCQkJICB3bTg5NzhfY29tcGFuZGluZyk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZGFjX2NvbXBhbmQsIFdNODk3OF9DT01QQU5ESU5HX0NPTlRST0wsIDMsCisJCQkJICB3bTg5NzhfY29tcGFuZGluZyk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXFtb2RlLCBXTTg5NzhfRVExLCA4LCB3bTg5NzhfZXFtb2RlKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcTEsIFdNODk3OF9FUTEsIDUsIHdtODk3OF9lcTEpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxMmJ3LCBXTTg5NzhfRVEyLCA4LCB3bTg5NzhfYncpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxMiwgV004OTc4X0VRMiwgNSwgd204OTc4X2VxMik7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXEzYncsIFdNODk3OF9FUTMsIDgsIHdtODk3OF9idyk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXEzLCBXTTg5NzhfRVEzLCA1LCB3bTg5NzhfZXEzKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcTRidywgV004OTc4X0VRNCwgOCwgd204OTc4X2J3KTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcTQsIFdNODk3OF9FUTQsIDUsIHdtODk3OF9lcTQpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxNSwgV004OTc4X0VRNSwgNSwgd204OTc4X2VxNSk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woYWxjMywgV004OTc4X0FMQ19DT05UUk9MXzMsIDgsIHdtODk3OF9hbGMzKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChhbGMxLCBXTTg5NzhfQUxDX0NPTlRST0xfMSwgNywgd204OTc4X2FsYzEpOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGlnaXRhbF90bHYsIC0xMjc1MCwgNTAsIDEpOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGVxX3RsdiwgLTEyMDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5wZ2FfdGx2LCAtMTIwMCwgNzUsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHNwa190bHYsIC01NzAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGJvb3N0X3RsdiwgLTE1MDAsIDMwMCwgMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5Nzhfc25kX2NvbnRyb2xzW10gPSB7CisKKwlTT0NfU0lOR0xFKCJEaWdpdGFsIExvb3BiYWNrIFN3aXRjaCIsCisJCVdNODk3OF9DT01QQU5ESU5HX0NPTlRST0wsIDAsIDEsIDApLAorCisJU09DX0VOVU0oIkFEQyBDb21wYW5kaW5nIiwgYWRjX2NvbXBhbmQpLAorCVNPQ19FTlVNKCJEQUMgQ29tcGFuZGluZyIsIGRhY19jb21wYW5kKSwKKworCVNPQ19ET1VCTEUoIkRBQyBJbnZlcnNpb24gU3dpdGNoIiwgV004OTc4X0RBQ19DT05UUk9MLCAwLCAxLCAxLCAwKSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIlBDTSBWb2x1bWUiLAorCQlXTTg5NzhfTEVGVF9EQUNfRElHSVRBTF9WT0xVTUUsIFdNODk3OF9SSUdIVF9EQUNfRElHSVRBTF9WT0xVTUUsCisJCTAsIDI1NSwgMCwgZGlnaXRhbF90bHYpLAorCisJU09DX1NJTkdMRSgiSGlnaCBQYXNzIEZpbHRlciBTd2l0Y2giLCBXTTg5NzhfQURDX0NPTlRST0wsIDgsIDEsIDApLAorCVNPQ19TSU5HTEUoIkhpZ2ggUGFzcyBDdXQgT2ZmIiwgV004OTc4X0FEQ19DT05UUk9MLCA0LCA3LCAwKSwKKwlTT0NfRE9VQkxFKCJBREMgSW52ZXJzaW9uIFN3aXRjaCIsIFdNODk3OF9BRENfQ09OVFJPTCwgMCwgMSwgMSwgMCksCisKKwlTT0NfRE9VQkxFX1JfVExWKCJBREMgVm9sdW1lIiwKKwkJV004OTc4X0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FLCBXTTg5NzhfUklHSFRfQURDX0RJR0lUQUxfVk9MVU1FLAorCQkwLCAyNTUsIDAsIGRpZ2l0YWxfdGx2KSwKKworCVNPQ19FTlVNKCJFcXVhbGlzZXIgRnVuY3Rpb24iLCBlcW1vZGUpLAorCVNPQ19FTlVNKCJFUTEgQ3V0IE9mZiIsIGVxMSksCisJU09DX1NJTkdMRV9UTFYoIkVRMSBWb2x1bWUiLCBXTTg5NzhfRVExLCAgMCwgMjQsIDEsIGVxX3RsdiksCisKKwlTT0NfRU5VTSgiRXF1YWxpc2VyIEVRMiBCYW5kd2l0aCIsIGVxMmJ3KSwKKwlTT0NfRU5VTSgiRVEyIEN1dCBPZmYiLCBlcTIpLAorCVNPQ19TSU5HTEVfVExWKCJFUTIgVm9sdW1lIiwgV004OTc4X0VRMiwgIDAsIDI0LCAxLCBlcV90bHYpLAorCisJU09DX0VOVU0oIkVxdWFsaXNlciBFUTMgQmFuZHdpdGgiLCBlcTNidyksCisJU09DX0VOVU0oIkVRMyBDdXQgT2ZmIiwgZXEzKSwKKwlTT0NfU0lOR0xFX1RMVigiRVEzIFZvbHVtZSIsIFdNODk3OF9FUTMsICAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19FTlVNKCJFcXVhbGlzZXIgRVE0IEJhbmR3aXRoIiwgZXE0YncpLAorCVNPQ19FTlVNKCJFUTQgQ3V0IE9mZiIsIGVxNCksCisJU09DX1NJTkdMRV9UTFYoIkVRNCBWb2x1bWUiLCBXTTg5NzhfRVE0LCAgMCwgMjQsIDEsIGVxX3RsdiksCisKKwlTT0NfRU5VTSgiRVE1IEN1dCBPZmYiLCBlcTUpLAorCVNPQ19TSU5HTEVfVExWKCJFUTUgVm9sdW1lIiwgV004OTc4X0VRNSwgMCwgMjQsIDEsIGVxX3RsdiksCisKKwlTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBTd2l0Y2giLAorCQlXTTg5NzhfREFDX0xJTUlURVJfMSwgOCwgMSwgMCksCisJU09DX1NJTkdMRSgiREFDIFBsYXliYWNrIExpbWl0ZXIgRGVjYXkiLAorCQlXTTg5NzhfREFDX0xJTUlURVJfMSwgNCwgMTUsIDApLAorCVNPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIEF0dGFjayIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8xLCAwLCAxNSwgMCksCisKKwlTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBUaHJlc2hvbGQiLAorCQlXTTg5NzhfREFDX0xJTUlURVJfMiwgNCwgNywgMCksCisJU09DX1NJTkdMRSgiREFDIFBsYXliYWNrIExpbWl0ZXIgQm9vc3QiLAorCQlXTTg5NzhfREFDX0xJTUlURVJfMiwgMCwgMTUsIDApLAorCisJU09DX0VOVU0oIkFMQyBFbmFibGUgU3dpdGNoIiwgYWxjMSksCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgTWluIEdhaW4iLCBXTTg5NzhfQUxDX0NPTlRST0xfMSwgMCwgNywgMCksCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgTWF4IEdhaW4iLCBXTTg5NzhfQUxDX0NPTlRST0xfMSwgMywgNywgMCksCisKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBIb2xkIiwgV004OTc4X0FMQ19DT05UUk9MXzIsIDQsIDcsIDApLAorCVNPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIFRhcmdldCIsIFdNODk3OF9BTENfQ09OVFJPTF8yLCAwLCAxNSwgMCksCisKKwlTT0NfRU5VTSgiQUxDIENhcHR1cmUgTW9kZSIsIGFsYzMpLAorCVNPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIERlY2F5IiwgV004OTc4X0FMQ19DT05UUk9MXzMsIDQsIDE1LCAwKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBBdHRhY2siLCBXTTg5NzhfQUxDX0NPTlRST0xfMywgMCwgMTUsIDApLAorCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgTm9pc2UgR2F0ZSBTd2l0Y2giLCBXTTg5NzhfTk9JU0VfR0FURSwgMywgMSwgMCksCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgTm9pc2UgR2F0ZSBUaHJlc2hvbGQiLAorCQlXTTg5NzhfTk9JU0VfR0FURSwgMCwgNywgMCksCisKKwlTT0NfRE9VQkxFX1IoIkNhcHR1cmUgUEdBIFpDIFN3aXRjaCIsCisJCVdNODk3OF9MRUZUX0lOUF9QR0FfQ09OVFJPTCwgV004OTc4X1JJR0hUX0lOUF9QR0FfQ09OVFJPTCwKKwkJNywgMSwgMCksCisKKwkvKiBPVVQxIC0gSGVhZHBob25lcyAqLworCVNPQ19ET1VCTEVfUigiSGVhZHBob25lIFBsYXliYWNrIFpDIFN3aXRjaCIsCisJCVdNODk3OF9MT1VUMV9IUF9DT05UUk9MLCBXTTg5NzhfUk9VVDFfSFBfQ09OVFJPTCwgNywgMSwgMCksCisKKwlTT0NfRE9VQkxFX1JfVExWKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJV004OTc4X0xPVVQxX0hQX0NPTlRST0wsIFdNODk3OF9ST1VUMV9IUF9DT05UUk9MLAorCQkwLCA2MywgMCwgc3BrX3RsdiksCisKKwkvKiBPVVQyIC0gU3BlYWtlcnMgKi8KKwlTT0NfRE9VQkxFX1IoIlNwZWFrZXIgUGxheWJhY2sgWkMgU3dpdGNoIiwKKwkJV004OTc4X0xPVVQyX1NQS19DT05UUk9MLCBXTTg5NzhfUk9VVDJfU1BLX0NPTlRST0wsIDcsIDEsIDApLAorCisJU09DX0RPVUJMRV9SX1RMVigiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAorCQlXTTg5NzhfTE9VVDJfU1BLX0NPTlRST0wsIFdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwKKwkJMCwgNjMsIDAsIHNwa190bHYpLAorCisJLyogT1VUMy80IC0gTGluZSBPdXRwdXQgKi8KKwlTT0NfRE9VQkxFX1IoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwKKwkJV004OTc4X09VVDNfTUlYRVJfQ09OVFJPTCwgV004OTc4X09VVDRfTUlYRVJfQ09OVFJPTCwgNiwgMSwgMSksCisKKwkvKiBNaXhlciAjMzogQm9vc3QgKElucHV0KSBtaXhlciAqLworCVNPQ19ET1VCTEVfUigiUEdBIEJvb3N0ICgrMjBkQikiLAorCQlXTTg5NzhfTEVGVF9BRENfQk9PU1RfQ09OVFJPTCwgV004OTc4X1JJR0hUX0FEQ19CT09TVF9DT05UUk9MLAorCQk4LCAxLCAwKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJMMi9SMiBCb29zdCBWb2x1bWUiLAorCQlXTTg5NzhfTEVGVF9BRENfQk9PU1RfQ09OVFJPTCwgV004OTc4X1JJR0hUX0FEQ19CT09TVF9DT05UUk9MLAorCQk0LCA3LCAwLCBib29zdF90bHYpLAorCVNPQ19ET1VCTEVfUl9UTFYoIkF1eCBCb29zdCBWb2x1bWUiLAorCQlXTTg5NzhfTEVGVF9BRENfQk9PU1RfQ09OVFJPTCwgV004OTc4X1JJR0hUX0FEQ19CT09TVF9DT05UUk9MLAorCQkwLCA3LCAwLCBib29zdF90bHYpLAorCisJLyogSW5wdXQgUEdBIHZvbHVtZSAqLworCVNPQ19ET1VCTEVfUl9UTFYoIklucHV0IFBHQSBWb2x1bWUiLAorCQlXTTg5NzhfTEVGVF9JTlBfUEdBX0NPTlRST0wsIFdNODk3OF9SSUdIVF9JTlBfUEdBX0NPTlRST0wsCisJCTAsIDYzLCAwLCBpbnBnYV90bHYpLAorCisJLyogSGVhZHBob25lICovCisJU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgU3dpdGNoIiwKKwkJV004OTc4X0xPVVQxX0hQX0NPTlRST0wsIFdNODk3OF9ST1VUMV9IUF9DT05UUk9MLCA2LCAxLCAxKSwKKworCS8qIFNwZWFrZXIgKi8KKwlTT0NfRE9VQkxFX1IoIlNwZWFrZXIgU3dpdGNoIiwKKwkJV004OTc4X0xPVVQyX1NQS19DT05UUk9MLCBXTTg5NzhfUk9VVDJfU1BLX0NPTlRST0wsIDYsIDEsIDEpLAorCisJLyogREFDIC8gQURDIG92ZXJzYW1wbGluZyAqLworCVNPQ19TSU5HTEUoIkRBQyAxMjh4IE92ZXJzYW1wbGluZyBTd2l0Y2giLCBXTTg5NzhfREFDX0NPTlRST0wsIDgsIDEsIDApLAorCVNPQ19TSU5HTEUoIkFEQyAxMjh4IE92ZXJzYW1wbGluZyBTd2l0Y2giLCBXTTg5NzhfQURDX0NPTlRST0wsIDgsIDEsIDApLAorfTsKKworLyogTWl4ZXIgIzE6IE91dHB1dCAoT1VUMSwgT1VUMikgTWl4ZXI6IG1peCBBVVgsIElucHV0IG1peGVyIG91dHB1dCBhbmQgREFDICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTc4X2xlZnRfb3V0X21peGVyW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBXTTg5NzhfTEVGVF9NSVhFUl9DT05UUk9MLCAxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkF1eCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NzhfTEVGVF9NSVhFUl9DT05UUk9MLCA1LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NzhfTEVGVF9NSVhFUl9DT05UUk9MLCAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzhfcmlnaHRfb3V0X21peGVyW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJMaW5lIEJ5cGFzcyBTd2l0Y2giLCBXTTg5NzhfUklHSFRfTUlYRVJfQ09OVFJPTCwgMSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgV004OTc4X1JJR0hUX01JWEVSX0NPTlRST0wsIDUsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIFdNODk3OF9SSUdIVF9NSVhFUl9DT05UUk9MLCAwLCAxLCAwKSwKK307CisKKy8qIE9VVDMvT1VUNCBNaXhlciBub3QgaW1wbGVtZW50ZWQgKi8KKworLyogTWl4ZXIgIzI6IElucHV0IFBHQSBNdXRlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTc4X2xlZnRfaW5wdXRfbWl4ZXJbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkwyIFN3aXRjaCIsIFdNODk3OF9JTlBVVF9DT05UUk9MLCAyLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1pY04gU3dpdGNoIiwgV004OTc4X0lOUFVUX0NPTlRST0wsIDEsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTWljUCBTd2l0Y2giLCBXTTg5NzhfSU5QVVRfQ09OVFJPTCwgMCwgMSwgMCksCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk3OF9yaWdodF9pbnB1dF9taXhlcltdID0geworCVNPQ19EQVBNX1NJTkdMRSgiUjIgU3dpdGNoIiwgV004OTc4X0lOUFVUX0NPTlRST0wsIDYsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTWljTiBTd2l0Y2giLCBXTTg5NzhfSU5QVVRfQ09OVFJPTCwgNSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNaWNQIFN3aXRjaCIsIFdNODk3OF9JTlBVVF9DT05UUk9MLCA0LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5NzhfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0RBQygiTGVmdCBEQUMiLCAiTGVmdCBIaUZpIFBsYXliYWNrIiwKKwkJCSBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8zLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJSaWdodCBEQUMiLCAiUmlnaHQgSGlGaSBQbGF5YmFjayIsCisJCQkgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMywgMSwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiTGVmdCBBREMiLCAiTGVmdCBIaUZpIENhcHR1cmUiLAorCQkJIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsIDAsIDApLAorCVNORF9TT0NfREFQTV9BREMoIlJpZ2h0IEFEQyIsICJSaWdodCBIaUZpIENhcHR1cmUiLAorCQkJIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsIDEsIDApLAorCisJLyogTWl4ZXIgIzE6IE9VVDEsMiAqLworCVNPQ19NSVhFUl9BUlJBWSgiTGVmdCBPdXRwdXQgTWl4ZXIiLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8zLAorCQkJMiwgMCwgd204OTc4X2xlZnRfb3V0X21peGVyKSwKKwlTT0NfTUlYRVJfQVJSQVkoIlJpZ2h0IE91dHB1dCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkzLCAwLCB3bTg5NzhfcmlnaHRfb3V0X21peGVyKSwKKworCVNPQ19NSVhFUl9BUlJBWSgiTGVmdCBJbnB1dCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkyLCAwLCB3bTg5NzhfbGVmdF9pbnB1dF9taXhlciksCisJU09DX01JWEVSX0FSUkFZKCJSaWdodCBJbnB1dCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkzLCAwLCB3bTg5NzhfcmlnaHRfaW5wdXRfbWl4ZXIpLAorCisJU05EX1NPQ19EQVBNX1BHQSgiTGVmdCBCb29zdCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgNCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgQm9vc3QgTWl4ZXIiLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkJIDUsIDAsIE5VTEwsIDApLAorCisJU05EX1NPQ19EQVBNX1BHQSgiTGVmdCBDYXB0dXJlIFBHQSIsIFdNODk3OF9MRUZUX0lOUF9QR0FfQ09OVFJPTCwKKwkJCSA2LCAxLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBDYXB0dXJlIFBHQSIsIFdNODk3OF9SSUdIVF9JTlBfUEdBX0NPTlRST0wsCisJCQkgNiwgMSwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IEhlYWRwaG9uZSBPdXQiLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkJIDcsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlJpZ2h0IEhlYWRwaG9uZSBPdXQiLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkJIDgsIDAsIE5VTEwsIDApLAorCisJU05EX1NPQ19EQVBNX1BHQSgiTGVmdCBTcGVha2VyIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkgNiwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgU3BlYWtlciBPdXQiLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8zLAorCQkJIDUsIDAsIE5VTEwsIDApLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJPVVQ0IFZNSUQiLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8zLAorCQkJICAgOCwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fTUlDQklBUygiTWljIEJpYXMiLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCA0LCAwKSwKKworCVNORF9TT0NfREFQTV9JTlBVVCgiTE1JQ04iKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkxNSUNQIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSTUlDTiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiUk1JQ1AiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkxBVVgiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlJBVVgiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkwyIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSMiIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkxIUCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlJIUCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkxTUEsiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJSU1BLIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBPdXRwdXQgbWl4ZXIgKi8KKwl7IlJpZ2h0IE91dHB1dCBNaXhlciIsICJQQ00gUGxheWJhY2sgU3dpdGNoIiwgIlJpZ2h0IERBQyJ9LAorCXsiUmlnaHQgT3V0cHV0IE1peGVyIiwgIkF1eCBQbGF5YmFjayBTd2l0Y2giLCAiUkFVWCJ9LAorCXsiUmlnaHQgT3V0cHV0IE1peGVyIiwgIkxpbmUgQnlwYXNzIFN3aXRjaCIsICJSaWdodCBCb29zdCBNaXhlciJ9LAorCisJeyJMZWZ0IE91dHB1dCBNaXhlciIsICJQQ00gUGxheWJhY2sgU3dpdGNoIiwgIkxlZnQgREFDIn0sCisJeyJMZWZ0IE91dHB1dCBNaXhlciIsICJBdXggUGxheWJhY2sgU3dpdGNoIiwgIkxBVVgifSwKKwl7IkxlZnQgT3V0cHV0IE1peGVyIiwgIkxpbmUgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IEJvb3N0IE1peGVyIn0sCisKKwkvKiBPdXRwdXRzICovCisJeyJSaWdodCBIZWFkcGhvbmUgT3V0IiwgTlVMTCwgIlJpZ2h0IE91dHB1dCBNaXhlciJ9LAorCXsiUkhQIiwgTlVMTCwgIlJpZ2h0IEhlYWRwaG9uZSBPdXQifSwKKworCXsiTGVmdCBIZWFkcGhvbmUgT3V0IiwgTlVMTCwgIkxlZnQgT3V0cHV0IE1peGVyIn0sCisJeyJMSFAiLCBOVUxMLCAiTGVmdCBIZWFkcGhvbmUgT3V0In0sCisKKwl7IlJpZ2h0IFNwZWFrZXIgT3V0IiwgTlVMTCwgIlJpZ2h0IE91dHB1dCBNaXhlciJ9LAorCXsiUlNQSyIsIE5VTEwsICJSaWdodCBTcGVha2VyIE91dCJ9LAorCisJeyJMZWZ0IFNwZWFrZXIgT3V0IiwgTlVMTCwgIkxlZnQgT3V0cHV0IE1peGVyIn0sCisJeyJMU1BLIiwgTlVMTCwgIkxlZnQgU3BlYWtlciBPdXQifSwKKworCS8qIEJvb3N0IE1peGVyICovCisJeyJSaWdodCBBREMiLCBOVUxMLCAiUmlnaHQgQm9vc3QgTWl4ZXIifSwKKworCXsiUmlnaHQgQm9vc3QgTWl4ZXIiLCBOVUxMLCAiUkFVWCJ9LAorCXsiUmlnaHQgQm9vc3QgTWl4ZXIiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBQR0EifSwKKwl7IlJpZ2h0IEJvb3N0IE1peGVyIiwgTlVMTCwgIlIyIn0sCisKKwl7IkxlZnQgQURDIiwgTlVMTCwgIkxlZnQgQm9vc3QgTWl4ZXIifSwKKworCXsiTGVmdCBCb29zdCBNaXhlciIsIE5VTEwsICJMQVVYIn0sCisJeyJMZWZ0IEJvb3N0IE1peGVyIiwgTlVMTCwgIkxlZnQgQ2FwdHVyZSBQR0EifSwKKwl7IkxlZnQgQm9vc3QgTWl4ZXIiLCBOVUxMLCAiTDIifSwKKworCS8qIElucHV0IFBHQSAqLworCXsiUmlnaHQgQ2FwdHVyZSBQR0EiLCBOVUxMLCAiUmlnaHQgSW5wdXQgTWl4ZXIifSwKKwl7IkxlZnQgQ2FwdHVyZSBQR0EiLCBOVUxMLCAiTGVmdCBJbnB1dCBNaXhlciJ9LAorCisJeyJSaWdodCBJbnB1dCBNaXhlciIsICJSMiBTd2l0Y2giLCAiUjIifSwKKwl7IlJpZ2h0IElucHV0IE1peGVyIiwgIk1pY04gU3dpdGNoIiwgIlJNSUNOIn0sCisJeyJSaWdodCBJbnB1dCBNaXhlciIsICJNaWNQIFN3aXRjaCIsICJSTUlDUCJ9LAorCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIkwyIFN3aXRjaCIsICJMMiJ9LAorCXsiTGVmdCBJbnB1dCBNaXhlciIsICJNaWNOIFN3aXRjaCIsICJMTUlDTiJ9LAorCXsiTGVmdCBJbnB1dCBNaXhlciIsICJNaWNQIFN3aXRjaCIsICJMTUlDUCJ9LAorfTsKKworc3RhdGljIGludCB3bTg5NzhfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk3OF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODk3OF9kYXBtX3dpZGdldHMpKTsKKworCS8qIHNldCB1cCB0aGUgV004OTc4IGF1ZGlvIG1hcCAqLworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogUExMIGRpdmlzb3JzICovCitzdHJ1Y3Qgd204OTc4X3BsbF9kaXYgeworCXUzMiBrOworCXU4IG47CisJdTggZGl2MjsKK307CisKKyNkZWZpbmUgRklYRURfUExMX1NJWkUgKDEgPDwgMjQpCisKK3N0YXRpYyB2b2lkIHBsbF9mYWN0b3JzKHN0cnVjdCB3bTg5NzhfcGxsX2RpdiAqcGxsX2RpdiwgdW5zaWduZWQgaW50IHRhcmdldCwKKwkJCXVuc2lnbmVkIGludCBzb3VyY2UpCit7CisJdTY0IGtfcGFydDsKKwl1bnNpZ25lZCBpbnQgaywgbl9kaXYsIG5fbW9kOworCisJbl9kaXYgPSB0YXJnZXQgLyBzb3VyY2U7CisJaWYgKG5fZGl2IDwgNikgeworCQlzb3VyY2UgPj49IDE7CisJCXBsbF9kaXYtPmRpdjIgPSAxOworCQluX2RpdiA9IHRhcmdldCAvIHNvdXJjZTsKKwl9IGVsc2UgeworCQlwbGxfZGl2LT5kaXYyID0gMDsKKwl9CisKKwlpZiAobl9kaXYgPCA2IHx8IG5fZGl2ID4gMTIpCisJCWRldl93YXJuKHdtODk3OF9jb2RlYy0+ZGV2LAorCQkJICJXTTg5NzggTiB2YWx1ZSBleGNlZWRzIHJlY29tbWVuZGVkIHJhbmdlISBOID0gJXVcbiIsCisJCQkgbl9kaXYpOworCisJcGxsX2Rpdi0+biA9IG5fZGl2OworCW5fbW9kID0gdGFyZ2V0IC0gc291cmNlICogbl9kaXY7CisJa19wYXJ0ID0gRklYRURfUExMX1NJWkUgKiAobG9uZyBsb25nKW5fbW9kICsgc291cmNlIC8gMjsKKworCWRvX2RpdihrX3BhcnQsIHNvdXJjZSk7CisKKwlrID0ga19wYXJ0ICYgMHhGRkZGRkZGRjsKKworCXBsbF9kaXYtPmsgPSBrOworfQorCisvKiBNQ0xLIGRpdmlkZXJzICovCitzdGF0aWMgY29uc3QgaW50IG1jbGtfbnVtZXJhdG9yW10JPSB7MSwgMywgMiwgMywgNCwgNiwgOCwgMTJ9Oworc3RhdGljIGNvbnN0IGludCBtY2xrX2Rlbm9taW5hdG9yW10JPSB7MSwgMiwgMSwgMSwgMSwgMSwgMSwgMX07CisKKy8qCisgKiBmaW5kIGluZGV4ID49IGlkeCwgc3VjaCB0aGF0LCBmb3IgYSBnaXZlbiBmX291dCwKKyAqIDMgKiBmX21jbGsgLyA0IDw9IGZfUExMT1VUIDwgMTMgKiBmX21jbGsgLyA0CisgKiBmX291dCBjYW4gYmUgZl8yNTZmcyBvciBmX29wY2xrLCBjdXJyZW50bHkgb25seSB1c2VkIGZvciBmXzI1NmZzLiBDYW4gYmUKKyAqIGdlbmVyYWxpc2VkIGZvciBmX29wY2xrIHdpdGggc3VpdGFibGUgY29lZmZpY2llbnQgYXJyYXlzLCBidXQgY3VycmVudGx5CisgKiB0aGUgT1BDTEsgZGl2aXNvciBpcyBjYWxjdWxhdGVkIGRpcmVjdGx5LCBub3QgaXRlcmF0aXZlbHkuCisgKi8KK3N0YXRpYyBpbnQgd204OTc4X2VudW1fbWNsayh1bnNpZ25lZCBpbnQgZl9vdXQsIHVuc2lnbmVkIGludCBmX21jbGssCisJCQkgICAgdW5zaWduZWQgaW50ICpmX3BsbG91dCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1jbGtfbnVtZXJhdG9yKTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBmX3BsbG91dF94NCA9IDQgKiBmX291dCAqIG1jbGtfbnVtZXJhdG9yW2ldIC8KKwkJCW1jbGtfZGVub21pbmF0b3JbaV07CisJCWlmICgzICogZl9tY2xrIDw9IGZfcGxsb3V0X3g0ICYmIGZfcGxsb3V0X3g0IDwgMTMgKiBmX21jbGspIHsKKwkJCSpmX3BsbG91dCA9IGZfcGxsb3V0X3g0IC8gNDsKKwkJCXJldHVybiBpOworCQl9CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgaW50ZXJuYWwgZnJlcXVlbmNpZXMgYW5kIGRpdmlkZXJzLCBhY2NvcmRpbmcgdG8gRmlndXJlIDQwCisgKiAiUExMIGFuZCBDbG9jayBTZWxlY3QgQ2lyY3VpdCIgaW4gV004OTc4IGRhdGFzaGVldCBSZXYuIDIuNgorICovCitzdGF0aWMgaW50IHdtODk3OF9jb25maWd1cmVfcGxsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtODk3OF9wbGxfZGl2IHBsbF9kaXY7CisJdW5zaWduZWQgaW50IGZfb3BjbGsgPSB3bTg5NzgtPmZfb3BjbGssIGZfbWNsayA9IHdtODk3OC0+Zl9tY2xrLAorCQlmXzI1NmZzID0gd204OTc4LT5mXzI1NmZzOworCXVuc2lnbmVkIGludCBmMjsKKworCWlmICghZl9tY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmX29wY2xrKSB7CisJCXVuc2lnbmVkIGludCBvcGNsa19kaXY7CisJCS8qIENhbm5vdCBzZXQgdXAgTUNMSyBkaXZpZGVyIG5vdywgZG8gbGF0ZXIgKi8KKwkJd204OTc4LT5tY2xrX2lkeCA9IC0xOworCisJCS8qCisJCSAqIFRoZSB1c2VyIG5lZWRzIE9QQ0xLLiBDaG9vc2UgT1BDTEtESVYgdG8gcHV0CisJCSAqIDYgPD0gUiA9IGYyIC8gZjEgPCAxMywgMSA8PSBPUENMS0RJViA8PSA0LgorCQkgKiBmX29wY2xrID0gZl9tY2xrICogcHJlc2NhbGUgKiBSIC8gNCAvIE9QQ0xLRElWLCB3aGVyZQorCQkgKiBwcmVzY2FsZSA9IDEsIG9yIHByZXNjYWxlID0gMi4gUHJlc2NhbGUgaXMgY2FsY3VsYXRlZCBpbnNpZGUKKwkJICogcGxsX2ZhY3RvcnMoKS4gV2UgaGF2ZSB0byBzZWxlY3QgZl9QTExPVVQsIHN1Y2ggdGhhdAorCQkgKiBmX21jbGsgKiAzIC8gNCA8PSBmX1BMTE9VVCA8IGZfbWNsayAqIDEzIC8gNC4gTXVzdCBiZQorCQkgKiBmX21jbGsgKiAzIC8gMTYgPD0gZl9vcGNsayA8IGZfbWNsayAqIDEzIC8gNC4KKwkJICovCisJCWlmICgxNiAqIGZfb3BjbGsgPCAzICogZl9tY2xrIHx8IDQgKiBmX29wY2xrID49IDEzICogZl9tY2xrKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKDQgKiBmX29wY2xrIDwgMyAqIGZfbWNsaykKKwkJCS8qIEhhdmUgdG8gdXNlIE9QQ0xLRElWICovCisJCQlvcGNsa19kaXYgPSAoMyAqIGZfbWNsayAvIDQgKyBmX29wY2xrIC0gMSkgLyBmX29wY2xrOworCQllbHNlCisJCQlvcGNsa19kaXYgPSAxOworCisJCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBPUENMS0RJVj0lZFxuIiwgX19mdW5jX18sIG9wY2xrX2Rpdik7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0dQSU9fQ09OVFJPTCwgMHgzMCwKKwkJCQkgICAgKG9wY2xrX2RpdiAtIDEpIDw8IDQpOworCisJCXdtODk3OC0+Zl9wbGxvdXQgPSBmX29wY2xrICogb3BjbGtfZGl2OworCX0gZWxzZSBpZiAoZl8yNTZmcykgeworCQkvKgorCQkgKiBOb3QgdXNpbmcgT1BDTEssIGJ1dCBQTEwgaXMgdXNlZCBmb3IgdGhlIGNvZGVjLCBjaG9vc2UgUjoKKwkJICogNiA8PSBSID0gZjIgLyBmMSA8IDEzLCB0byBwdXQgMSA8PSBNQ0xLRElWIDw9IDEyLgorCQkgKiBmXzI1NmZzID0gZl9tY2xrICogcHJlc2NhbGUgKiBSIC8gNCAvIE1DTEtESVYsIHdoZXJlCisJCSAqIHByZXNjYWxlID0gMSwgb3IgcHJlc2NhbGUgPSAyLiBQcmVzY2FsZSBpcyBjYWxjdWxhdGVkIGluc2lkZQorCQkgKiBwbGxfZmFjdG9ycygpLiBXZSBoYXZlIHRvIHNlbGVjdCBmX1BMTE9VVCwgc3VjaCB0aGF0CisJCSAqIGZfbWNsayAqIDMgLyA0IDw9IGZfUExMT1VUIDwgZl9tY2xrICogMTMgLyA0LiBNdXN0IGJlCisJCSAqIGZfbWNsayAqIDMgLyA0OCA8PSBmXzI1NmZzIDwgZl9tY2xrICogMTMgLyA0LiBUaGlzIG1lYW5zIE1DTEsKKwkJICogbXVzdCBiZSAzLjc4MU1IeiA8PSBmX01DTEsgPD0gMzIuNzY4TUh6CisJCSAqLworCQlpbnQgaWR4ID0gd204OTc4X2VudW1fbWNsayhmXzI1NmZzLCBmX21jbGssICZ3bTg5NzgtPmZfcGxsb3V0KTsKKwkJaWYgKGlkeCA8IDApCisJCQlyZXR1cm4gaWR4OworCisJCXdtODk3OC0+bWNsa19pZHggPSBpZHg7CisKKwkJLyogR1BJTzEgaW50byBkZWZhdWx0IG1vZGUgYXMgaW5wdXQgLSBiZWZvcmUgY29uZmlndXJpbmcgUExMICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9HUElPX0NPTlRST0wsIDcsIDApOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWYyID0gd204OTc4LT5mX3BsbG91dCAqIDQ7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogZl9NQ0xLPSV1SHosIGZfUExMT1VUPSV1SHpcbiIsIF9fZnVuY19fLAorCQl3bTg5NzgtPmZfbWNsaywgd204OTc4LT5mX3BsbG91dCk7CisKKwlwbGxfZmFjdG9ycygmcGxsX2RpdiwgZjIsIHdtODk3OC0+Zl9tY2xrKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBjYWxjdWxhdGVkIFBMTCBOPTB4JXgsIEs9MHgleCwgZGl2Mj0lZFxuIiwKKwkJX19mdW5jX18sIHBsbF9kaXYubiwgcGxsX2Rpdi5rLCBwbGxfZGl2LmRpdjIpOworCisJLyogVHVybiBQTEwgb2ZmIGZvciBjb25maWd1cmF0aW9uLi4uICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwgMHgyMCwgMCk7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUExMX04sIChwbGxfZGl2LmRpdjIgPDwgNCkgfCBwbGxfZGl2Lm4pOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QTExfSzEsIHBsbF9kaXYuayA+PiAxOCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BMTF9LMiwgKHBsbF9kaXYuayA+PiA5KSAmIDB4MWZmKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUExMX0szLCBwbGxfZGl2LmsgJiAweDFmZik7CisKKwkvKiAuLi5hbmQgb24gYWdhaW4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCAweDIwLCAweDIwKTsKKworCWlmIChmX29wY2xrKQorCQkvKiBPdXRwdXQgUExMIChPUENMSykgdG8gR1BJTzEgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0dQSU9fQ09OVFJPTCwgNywgNCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbmZpZ3VyZSBXTTg5NzggY2xvY2sgZGl2aWRlcnMuCisgKi8KK3N0YXRpYyBpbnQgd204OTc4X3NldF9kYWlfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJCSBpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHdtODk3OF9wcml2ICp3bTg5NzggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChkaXZfaWQpIHsKKwljYXNlIFdNODk3OF9PUENMS1JBVEU6CisJCXdtODk3OC0+Zl9vcGNsayA9IGRpdjsKKworCQlpZiAod204OTc4LT5mX21jbGspCisJCQkvKgorCQkJICogV2Uga25vdyB0aGUgTUNMSyBmcmVxdWVuY3ksIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQKKwkJCSAqIE9QQ0xLLCBjb25maWd1cmUgdGhlIFBMTCBiYXNlZCBvbiB0aGF0IGFuZCBzdGFydCBpdAorCQkJICogYW5kIE9QQ0xLIGltbWVkaWF0ZWx5LiBXZSB3aWxsIGNvbmZpZ3VyZSBQTEwgdG8gbWF0Y2gKKwkJCSAqIHVzZXItcmVxdWVzdGVkIE9QQ0xLIGZycXVlbmN5IGFzIGdvb2QgYXMgcG9zc2libGUuCisJCQkgKiBJbiBmYWN0LCBpdCBpcyBsaWtlbHksIHRoYXQgbWF0Y2hpbmcgdGhlIHNhbXBsaW5nCisJCQkgKiByYXRlLCB3aGVuIGl0IGJlY29tZXMga25vd24sIGlzIG1vcmUgaW1wb3J0YW50LCBhbmQKKwkJCSAqIHdlIHdpbGwgbm90IGJlIHJlY29uZmlndXJpbmcgUExMIHRoZW4sIGJlY2F1c2Ugd2UKKwkJCSAqIG11c3Qgbm90IGludGVycnVwdCBPUENMSy4gQnV0IGl0IHNob3VsZCBiZSBmaW5lLAorCQkJICogYmVjYXVzZSB0eXBpY2FsbHkgdGhlIHVzZXIgd2lsbCByZXF1ZXN0IE9QQ0xLIHRvIHJ1bgorCQkJICogYXQgMjU2ZnMgb3IgNTEyZnMsIGFuZCBmb3IgdGhlc2UgY2FzZXMgd2Ugd2lsbCBhbHNvCisJCQkgKiBmaW5kIGFuIGV4YWN0IE1DTEsgZGl2aWRlciBjb25maWd1cmF0aW9uIC0gaXQgd2lsbAorCQkJICogYmUgZXF1YWwgdG8gb3IgZG91YmxlIHRoZSBPUENMSyBkaXZpc29yLgorCQkJICovCisJCQlyZXQgPSB3bTg5NzhfY29uZmlndXJlX3BsbChjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgV004OTc4X0JDTEtESVY6CisJCWlmIChkaXYgJiB+MHgxYykKKwkJCXJldHVybiAtRUlOVkFMOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfQ0xPQ0tJTkcsIDB4MWMsIGRpdik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBJRCAlZCwgdmFsdWUgJXVcbiIsIF9fZnVuY19fLCBkaXZfaWQsIGRpdik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQGZyZXE6CXdoZW4gLnNldF9wbGwoKSB1cyBub3QgdXNlZCwgZnJlcSBpcyBjb2RlYyBNQ0xLIGlucHV0IGZyZXF1ZW5jeQorICovCitzdGF0aWMgaW50IHdtODk3OF9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgaW50IGNsa19pZCwKKwkJCQkgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogSUQgJWQsIGZyZXEgJXVcbiIsIF9fZnVuY19fLCBjbGtfaWQsIGZyZXEpOworCisJaWYgKGZyZXEpIHsKKwkJd204OTc4LT5mX21jbGsgPSBmcmVxOworCisJCS8qIEV2ZW4gaWYgTUNMSyBpcyB1c2VkIGZvciBzeXN0ZW0gY2xvY2ssIG1pZ2h0IGhhdmUgdG8gZHJpdmUgT1BDTEsgKi8KKwkJaWYgKHdtODk3OC0+Zl9vcGNsaykKKwkJCXJldCA9IHdtODk3OF9jb25maWd1cmVfcGxsKGNvZGVjKTsKKworCQkvKiBPdXIgc3lzY2xrIGlzIGZpeGVkIHRvIDI1NiAqIGZzLCB3aWxsIGNvbmZpZ3VyZSBpbiAuaHdfcGFyYW1zKCkgICovCisKKwkJaWYgKCFyZXQpCisJCQl3bTg5NzgtPnN5c2NsayA9IGNsa19pZDsKKwl9CisKKwlpZiAod204OTc4LT5zeXNjbGsgPT0gV004OTc4X1BMTCAmJiAoIWZyZXEgfHwgY2xrX2lkID09IFdNODk3OF9NQ0xLKSkgeworCQkvKiBDbG9jayBDT0RFQyBkaXJlY3RseSBmcm9tIE1DTEsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0NMT0NLSU5HLCAweDEwMCwgMCk7CisKKwkJLyogR1BJTzEgaW50byBkZWZhdWx0IG1vZGUgYXMgaW5wdXQgLSBiZWZvcmUgY29uZmlndXJpbmcgUExMICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9HUElPX0NPTlRST0wsIDcsIDApOworCisJCS8qIFR1cm4gb2ZmIFBMTCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCAweDIwLCAwKTsKKwkJd204OTc4LT5zeXNjbGsgPSBXTTg5NzhfTUNMSzsKKwkJd204OTc4LT5mX3BsbG91dCA9IDA7CisJCXdtODk3OC0+Zl9vcGNsayA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCBBREMgYW5kIFZvaWNlIERBQyBmb3JtYXQuCisgKi8KK3N0YXRpYyBpbnQgd204OTc4X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJLyoKKwkgKiBCQ0xLIHBvbGFyaXR5IG1hc2sgPSAweDEwMCwgTFJDIGNsb2NrIHBvbGFyaXR5IG1hc2sgPSAweDgwLAorCSAqIERhdGEgRm9ybWF0IG1hc2sgPSAweDE4OiBhbGwgd2lsbCBiZSBjYWxjdWxhdGVkIGFuZXcKKwkgKi8KKwl1MTYgaWZhY2UgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9BVURJT19JTlRFUkZBQ0UpICYgfjB4MTk4OworCXUxNiBjbGsgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9DTE9DS0lORyk7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQljbGsgfD0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQljbGsgJj0gfjE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGludGVyZmFjZSBmb3JtYXQgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWlmYWNlIHw9IDB4MTA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWlmYWNlIHw9IDB4ODsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJaWZhY2UgfD0gMHgxODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2xvY2sgaW52ZXJzaW9uICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCWlmYWNlIHw9IDB4MTgwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQlpZmFjZSB8PSAweDEwMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJaWZhY2UgfD0gMHg4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X0FVRElPX0lOVEVSRkFDRSwgaWZhY2UpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9DTE9DS0lORywgY2xrKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IFBDTSBEQUkgYml0IHNpemUgYW5kIHNhbXBsZSByYXRlLgorICovCitzdGF0aWMgaW50IHdtODk3OF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJLyogV29yZCBsZW5ndGggbWFzayA9IDB4NjAgKi8KKwl1MTYgaWZhY2VfY3RsID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzhfQVVESU9fSU5URVJGQUNFKSAmIH4weDYwOworCS8qIFNhbXBsaW5nIHJhdGUgbWFzayA9IDB4ZSAoZm9yIGZpbHRlcnMpICovCisJdTE2IGFkZF9jdGwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9BRERJVElPTkFMX0NPTlRST0wpICYgfjB4ZTsKKwl1MTYgY2xraW5nID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzhfQ0xPQ0tJTkcpOworCWVudW0gd204OTc4X3N5c2Nsa19zcmMgY3VycmVudF9jbGtfaWQgPSBjbGtpbmcgJiAweDEwMCA/CisJCVdNODk3OF9QTEwgOiBXTTg5NzhfTUNMSzsKKwl1bnNpZ25lZCBpbnQgZl9zZWwsIGRpZmYsIGRpZmZfYmVzdCA9IElOVF9NQVg7CisJaW50IGksIGJlc3QgPSAwOworCisJaWYgKCF3bTg5NzgtPmZfbWNsaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBiaXQgc2l6ZSAqLworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWlmYWNlX2N0bCB8PSAweDIwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlpZmFjZV9jdGwgfD0gMHg0MDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJaWZhY2VfY3RsIHw9IDB4NjA7CisJCWJyZWFrOworCX0KKworCS8qIGZpbHRlciBjb2VmZmljaWVudCAqLworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgODAwMDoKKwkJYWRkX2N0bCB8PSAweDUgPDwgMTsKKwkJYnJlYWs7CisJY2FzZSAxMTAyNToKKwkJYWRkX2N0bCB8PSAweDQgPDwgMTsKKwkJYnJlYWs7CisJY2FzZSAxNjAwMDoKKwkJYWRkX2N0bCB8PSAweDMgPDwgMTsKKwkJYnJlYWs7CisJY2FzZSAyMjA1MDoKKwkJYWRkX2N0bCB8PSAweDIgPDwgMTsKKwkJYnJlYWs7CisJY2FzZSAzMjAwMDoKKwkJYWRkX2N0bCB8PSAweDEgPDwgMTsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwljYXNlIDQ4MDAwOgorCQlicmVhazsKKwl9CisKKwkvKiBTYW1wbGluZyByYXRlIGlzIGtub3duIG5vdywgY2FuIGNvbmZpZ3VyZSB0aGUgTUNMSyBkaXZpZGVyICovCisJd204OTc4LT5mXzI1NmZzID0gcGFyYW1zX3JhdGUocGFyYW1zKSAqIDI1NjsKKworCWlmICh3bTg5NzgtPnN5c2NsayA9PSBXTTg5NzhfTUNMSykgeworCQl3bTg5NzgtPm1jbGtfaWR4ID0gLTE7CisJCWZfc2VsID0gd204OTc4LT5mX21jbGs7CisJfSBlbHNlIHsKKwkJaWYgKCF3bTg5NzgtPmZfcGxsb3V0KSB7CisJCQkvKiBXZSBvbmx5IGVudGVyIGhlcmUsIGlmIE9QQ0xLIGlzIG5vdCB1c2VkICovCisJCQlpbnQgcmV0ID0gd204OTc4X2NvbmZpZ3VyZV9wbGwoY29kZWMpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlmX3NlbCA9IHdtODk3OC0+Zl9wbGxvdXQ7CisJfQorCisJaWYgKHdtODk3OC0+bWNsa19pZHggPCAwKSB7CisJCS8qIEVpdGhlciBNQ0xLIGlzIHVzZWQgZGlyZWN0bHksIG9yIE9QQ0xLIGlzIHVzZWQgKi8KKwkJaWYgKGZfc2VsIDwgd204OTc4LT5mXzI1NmZzIHx8IGZfc2VsID4gMTIgKiB3bTg5NzgtPmZfMjU2ZnMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtY2xrX251bWVyYXRvcik7IGkrKykgeworCQkJZGlmZiA9IGFicyh3bTg5NzgtPmZfMjU2ZnMgKiAzIC0KKwkJCQkgICBmX3NlbCAqIDMgKiBtY2xrX2Rlbm9taW5hdG9yW2ldIC8gbWNsa19udW1lcmF0b3JbaV0pOworCisJCQlpZiAoZGlmZiA8IGRpZmZfYmVzdCkgeworCQkJCWRpZmZfYmVzdCA9IGRpZmY7CisJCQkJYmVzdCA9IGk7CisJCQl9CisKKwkJCWlmICghZGlmZikKKwkJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE9QQ0xLIG5vdCB1c2VkLCBjb2RlYyBkcml2ZW4gYnkgUExMICovCisJCWJlc3QgPSB3bTg5NzgtPm1jbGtfaWR4OworCQlkaWZmID0gMDsKKwl9CisKKwlpZiAoZGlmZikKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIkltcHJlY2lzZSBzYW1wbGluZyByYXRlOiAldUh6JXNcbiIsCisJCQlmX3NlbCAqIG1jbGtfZGVub21pbmF0b3JbYmVzdF0gLyBtY2xrX251bWVyYXRvcltiZXN0XSAvIDI1NiwKKwkJCXdtODk3OC0+c3lzY2xrID09IFdNODk3OF9NQ0xLID8KKwkJCSIsIGNvbnNpZGVyIHVzaW5nIFBMTCIgOiAiIik7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogZm10ICVkLCByYXRlICV1LCBNQ0xLIGRpdmlzb3IgIyVkXG4iLCBfX2Z1bmNfXywKKwkJcGFyYW1zX2Zvcm1hdChwYXJhbXMpLCBwYXJhbXNfcmF0ZShwYXJhbXMpLCBiZXN0KTsKKworCS8qIE1DTEsgZGl2aXNvciBtYXNrID0gMHhlMCAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9DTE9DS0lORywgMHhlMCwgYmVzdCA8PCA1KTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9BVURJT19JTlRFUkZBQ0UsIGlmYWNlX2N0bCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X0FERElUSU9OQUxfQ09OVFJPTCwgYWRkX2N0bCk7CisKKwlpZiAod204OTc4LT5zeXNjbGsgIT0gY3VycmVudF9jbGtfaWQpIHsKKwkJaWYgKHdtODk3OC0+c3lzY2xrID09IFdNODk3OF9QTEwpCisJCQkvKiBSdW4gQ09ERUMgZnJvbSBQTEwgaW5zdGVhZCBvZiBNQ0xLICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfQ0xPQ0tJTkcsCisJCQkJCSAgICAweDEwMCwgMHgxMDApOworCQllbHNlCisJCQkvKiBDbG9jayBDT0RFQyBkaXJlY3RseSBmcm9tIE1DTEsgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9DTE9DS0lORywgMHgxMDAsIDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk3OF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6ICVkXG4iLCBfX2Z1bmNfXywgbXV0ZSk7CisKKwlpZiAobXV0ZSkKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0RBQ19DT05UUk9MLCAweDQwLCAweDQwKTsKKwllbHNlCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9EQUNfQ09OVFJPTCwgMHg0MCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwl1MTYgcG93ZXIxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xKSAmIH4zOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCXBvd2VyMSB8PSAxOyAgLyogVk1JRCA3NWsgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwgcG93ZXIxKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJLyogYml0IDM6IGVuYWJsZSBiaWFzLCBiaXQgMjogZW5hYmxlIEkvTyB0aWUgb2ZmIGJ1ZmZlciAqLworCQlwb3dlcjEgfD0gMHhjOworCisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQkvKiBJbml0aWFsIGNhcCBjaGFyZ2UgYXQgVk1JRCA1ayAqLworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgICBwb3dlcjEgfCAweDMpOworCQkJbWRlbGF5KDEwMCk7CisJCX0KKworCQlwb3dlcjEgfD0gMHgyOyAgLyogVk1JRCA1MDBrICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIHBvd2VyMSk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogUHJlc2VydmUgUExMIC0gT1BDTEsgbWF5IGJlIHVzZWQgYnkgc29tZW9uZSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCB+MHgyMCwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsIDApOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8zLCAwKTsKKwkJYnJlYWs7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6ICVkLCAleFxuIiwgX19mdW5jX18sIGxldmVsLCBwb3dlcjEpOworCisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg5NzhfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBcCisJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTc4X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHdtODk3OF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODk3OF9tdXRlLAorCS5zZXRfZm10CT0gd204OTc4X3NldF9kYWlfZm10LAorCS5zZXRfY2xrZGl2CT0gd204OTc4X3NldF9kYWlfY2xrZGl2LAorCS5zZXRfc3lzY2xrCT0gd204OTc4X3NldF9kYWlfc3lzY2xrLAorfTsKKworLyogQWxzbyBzdXBwb3J0cyAxMmtIeiAqLworc3RydWN0IHNuZF9zb2NfZGFpIHdtODk3OF9kYWkgPSB7CisJLm5hbWUgPSAiV004OTc4IEhpRmkiLAorCS5pZCA9IDEsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCS5mb3JtYXRzID0gV004OTc4X0ZPUk1BVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCS5mb3JtYXRzID0gV004OTc4X0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJndtODk3OF9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODk3OF9kYWkpOworCitzdGF0aWMgaW50IHdtODk3OF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwl3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCS8qIEFsc28gc3dpdGNoIFBMTCBvZmYgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk3OF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHdtODk3OF9wcml2ICp3bTg5NzggPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBpOworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5NzhfcmVnKTsgaSsrKSB7CisJCWlmIChpID09IFdNODk3OF9SRVNFVCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2FjaGVbaV0gIT0gd204OTc4X3JlZ1tpXSkKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIGNhY2hlW2ldKTsKKwl9CisKKwl3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCWlmICh3bTg5NzgtPmZfcGxsb3V0KQorCQkvKiBTd2l0Y2ggUExMIG9uICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MjAsIDB4MjApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTc4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAod204OTc4X2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODk3OF9jb2RlYzsKKwljb2RlYyA9IHdtODk3OF9jb2RlYzsKKworCS8qIHJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTc4X3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg5Nzhfc25kX2NvbnRyb2xzKSk7CisJd204OTc4X2FkZF93aWRnZXRzKGNvZGVjKTsKKworcGNtX2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgd204OTc4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTc4ID0geworCS5wcm9iZQkJPSB3bTg5NzhfcHJvYmUsCisJLnJlbW92ZQkJPSB3bTg5NzhfcmVtb3ZlLAorCS5zdXNwZW5kCT0gd204OTc4X3N1c3BlbmQsCisJLnJlc3VtZQkJPSB3bTg5NzhfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204OTc4KTsKKworLyoKKyAqIFRoZXNlIHJlZ2lzdGVycyBjb250YWluIGFuICJ1cGRhdGUiIGJpdCAtIGJpdCA4LiBUaGlzIG1lYW5zLCBmb3IgZXhhbXBsZSwKKyAqIHRoYXQgb25lIGNhbiB3cml0ZSBuZXcgREFDIGRpZ2l0YWwgdm9sdW1lIGZvciBib3RoIGNoYW5uZWxzLCBidXQgb25seSB3aGVuCisgKiB0aGUgdXBkYXRlIGJpdCBpcyBzZXQsIHdpbGwgYWxzbyB0aGUgdm9sdW1lIGJlIHVwZGF0ZWQgLSBzaW11bHRhbmVvdXNseSBmb3IKKyAqIGJvdGggY2hhbm5lbHMuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgdXBkYXRlX3JlZ1tdID0geworCVdNODk3OF9MRUZUX0RBQ19ESUdJVEFMX1ZPTFVNRSwKKwlXTTg5NzhfUklHSFRfREFDX0RJR0lUQUxfVk9MVU1FLAorCVdNODk3OF9MRUZUX0FEQ19ESUdJVEFMX1ZPTFVNRSwKKwlXTTg5NzhfUklHSFRfQURDX0RJR0lUQUxfVk9MVU1FLAorCVdNODk3OF9MRUZUX0lOUF9QR0FfQ09OVFJPTCwKKwlXTTg5NzhfUklHSFRfSU5QX1BHQV9DT05UUk9MLAorCVdNODk3OF9MT1VUMV9IUF9DT05UUk9MLAorCVdNODk3OF9ST1VUMV9IUF9DT05UUk9MLAorCVdNODk3OF9MT1VUMl9TUEtfQ09OVFJPTCwKKwlXTTg5NzhfUk9VVDJfU1BLX0NPTlRST0wsCit9OworCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5NzhfcmVnaXN0ZXIoc3RydWN0IHdtODk3OF9wcml2ICp3bTg5NzgpCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTc4LT5jb2RlYzsKKworCWlmICh3bTg5NzhfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBXTTg5NzggaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogU2V0IGRlZmF1bHQgc3lzdGVtIGNsb2NrIHRvIFBMTCwgaXQgaXMgbW9yZSBwcmVjaXNlLCB0aGlzIGlzIGFsc28gdGhlCisJICogZGVmYXVsdCBoYXJkd2FyZSBzZXR0aW5nCisJICovCisJd204OTc4LT5zeXNjbGsgPSBXTTg5NzhfUExMOworCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5Nzg7CisJY29kZWMtPm5hbWUgPSAiV004OTc4IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTc4X3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204OTc4X2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004OTc4X0NBQ0hFUkVHTlVNOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204OTc4LT5yZWdfY2FjaGU7CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODk3OF9yZWcsIHNpemVvZih3bTg5NzhfcmVnKSk7CisKKwkvKgorCSAqIFNldCB0aGUgdXBkYXRlIGJpdCBpbiBhbGwgcmVnaXN0ZXJzLCB0aGF0IGhhdmUgb25lLiBUaGlzIHdheSBhbGwKKwkgKiB3cml0ZXMgdG8gdGhvc2UgcmVnaXN0ZXJzIHdpbGwgYWxzbyBjYXVzZSB0aGUgdXBkYXRlIGJpdCB0byBiZQorCSAqIHdyaXR0ZW4uCisJICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodXBkYXRlX3JlZyk7IGkrKykKKwkJKCh1MTYgKiljb2RlYy0+cmVnX2NhY2hlKVt1cGRhdGVfcmVnW2ldXSB8PSAweDEwMDsKKworCS8qIFJlc2V0IHRoZSBjb2RlYyAqLworCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9SRVNFVCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0XG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJd204OTc4X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCisJd204OTc4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwl3bTg5NzhfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204OTc4X2RhaSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb2RlYzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnI6CisJa2ZyZWUod204OTc4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19kZXZleGl0IHZvaWQgd204OTc4X3VucmVnaXN0ZXIoc3RydWN0IHdtODk3OF9wcml2ICp3bTg5NzgpCit7CisJd204OTc4X3NldF9iaWFzX2xldmVsKCZ3bTg5NzgtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg5NzhfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODk3OC0+Y29kZWMpOworCWtmcmVlKHdtODk3OCk7CisJd204OTc4X2NvZGVjID0gTlVMTDsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgd204OTc4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3ODsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwl3bTg5NzggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204OTc4X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204OTc4ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204OTc4LT5jb2RlYzsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg5NzgpOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisKKwljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJcmV0dXJuIHdtODk3OF9yZWdpc3Rlcih3bTg5NzgpOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg5NzhfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJd204OTc4X3VucmVnaXN0ZXIod204OTc4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODk3OF9pMmNfaWRbXSA9IHsKKwl7ICJ3bTg5NzgiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODk3OF9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204OTc4X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiV004OTc4IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICB3bTg5NzhfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODk3OF9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bTg5NzhfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204OTc4X21vZGluaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJndtODk3OF9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODk3OF9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODk3OF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJndtODk3OF9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODk3OF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODk3OCBjb2RlYyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzguaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlYzgzMgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc4LmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIHdtODk3OC5oCQktLSAgY29kZWMgZHJpdmVyIGZvciBXTTg5NzgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19XTTg5NzhfSF9fCisjZGVmaW5lIF9fV004OTc4X0hfXworCisvKgorICogUmVnaXN0ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIFdNODk3OF9SRVNFVAkJCQkweDAwCisjZGVmaW5lIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEJCTB4MDEKKyNkZWZpbmUgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMgkJMHgwMgorI2RlZmluZSBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8zCQkweDAzCisjZGVmaW5lIFdNODk3OF9BVURJT19JTlRFUkZBQ0UJCQkweDA0CisjZGVmaW5lIFdNODk3OF9DT01QQU5ESU5HX0NPTlRST0wJCTB4MDUKKyNkZWZpbmUgV004OTc4X0NMT0NLSU5HCQkJCTB4MDYKKyNkZWZpbmUgV004OTc4X0FERElUSU9OQUxfQ09OVFJPTAkJMHgwNworI2RlZmluZSBXTTg5NzhfR1BJT19DT05UUk9MCQkJMHgwOAorI2RlZmluZSBXTTg5NzhfSkFDS19ERVRFQ1RfQ09OVFJPTF8xCQkweDA5CisjZGVmaW5lIFdNODk3OF9EQUNfQ09OVFJPTAkJCTB4MEEKKyNkZWZpbmUgV004OTc4X0xFRlRfREFDX0RJR0lUQUxfVk9MVU1FCQkweDBCCisjZGVmaW5lIFdNODk3OF9SSUdIVF9EQUNfRElHSVRBTF9WT0xVTUUJCTB4MEMKKyNkZWZpbmUgV004OTc4X0pBQ0tfREVURUNUX0NPTlRST0xfMgkJMHgwRAorI2RlZmluZSBXTTg5NzhfQURDX0NPTlRST0wJCQkweDBFCisjZGVmaW5lIFdNODk3OF9MRUZUX0FEQ19ESUdJVEFMX1ZPTFVNRQkJMHgwRgorI2RlZmluZSBXTTg5NzhfUklHSFRfQURDX0RJR0lUQUxfVk9MVU1FCQkweDEwCisjZGVmaW5lIFdNODk3OF9FUTEJCQkJMHgxMgorI2RlZmluZSBXTTg5NzhfRVEyCQkJCTB4MTMKKyNkZWZpbmUgV004OTc4X0VRMwkJCQkweDE0CisjZGVmaW5lIFdNODk3OF9FUTQJCQkJMHgxNQorI2RlZmluZSBXTTg5NzhfRVE1CQkJCTB4MTYKKyNkZWZpbmUgV004OTc4X0RBQ19MSU1JVEVSXzEJCQkweDE4CisjZGVmaW5lIFdNODk3OF9EQUNfTElNSVRFUl8yCQkJMHgxOQorI2RlZmluZSBXTTg5NzhfTk9UQ0hfRklMVEVSXzEJCQkweDFiCisjZGVmaW5lIFdNODk3OF9OT1RDSF9GSUxURVJfMgkJCTB4MWMKKyNkZWZpbmUgV004OTc4X05PVENIX0ZJTFRFUl8zCQkJMHgxZAorI2RlZmluZSBXTTg5NzhfTk9UQ0hfRklMVEVSXzQJCQkweDFlCisjZGVmaW5lIFdNODk3OF9BTENfQ09OVFJPTF8xCQkJMHgyMAorI2RlZmluZSBXTTg5NzhfQUxDX0NPTlRST0xfMgkJCTB4MjEKKyNkZWZpbmUgV004OTc4X0FMQ19DT05UUk9MXzMJCQkweDIyCisjZGVmaW5lIFdNODk3OF9OT0lTRV9HQVRFCQkJMHgyMworI2RlZmluZSBXTTg5NzhfUExMX04JCQkJMHgyNAorI2RlZmluZSBXTTg5NzhfUExMX0sxCQkJCTB4MjUKKyNkZWZpbmUgV004OTc4X1BMTF9LMgkJCQkweDI2CisjZGVmaW5lIFdNODk3OF9QTExfSzMJCQkJMHgyNworI2RlZmluZSBXTTg5NzhfM0RfQ09OVFJPTAkJCTB4MjkKKyNkZWZpbmUgV004OTc4X0JFRVBfQ09OVFJPTAkJCTB4MmIKKyNkZWZpbmUgV004OTc4X0lOUFVUX0NPTlRST0wJCQkweDJjCisjZGVmaW5lIFdNODk3OF9MRUZUX0lOUF9QR0FfQ09OVFJPTAkJMHgyZAorI2RlZmluZSBXTTg5NzhfUklHSFRfSU5QX1BHQV9DT05UUk9MCQkweDJlCisjZGVmaW5lIFdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MCQkweDJmCisjZGVmaW5lIFdNODk3OF9SSUdIVF9BRENfQk9PU1RfQ09OVFJPTAkJMHgzMAorI2RlZmluZSBXTTg5NzhfT1VUUFVUX0NPTlRST0wJCQkweDMxCisjZGVmaW5lIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wJCTB4MzIKKyNkZWZpbmUgV004OTc4X1JJR0hUX01JWEVSX0NPTlRST0wJCTB4MzMKKyNkZWZpbmUgV004OTc4X0xPVVQxX0hQX0NPTlRST0wJCQkweDM0CisjZGVmaW5lIFdNODk3OF9ST1VUMV9IUF9DT05UUk9MCQkJMHgzNQorI2RlZmluZSBXTTg5NzhfTE9VVDJfU1BLX0NPTlRST0wJCTB4MzYKKyNkZWZpbmUgV004OTc4X1JPVVQyX1NQS19DT05UUk9MCQkweDM3CisjZGVmaW5lIFdNODk3OF9PVVQzX01JWEVSX0NPTlRST0wJCTB4MzgKKyNkZWZpbmUgV004OTc4X09VVDRfTUlYRVJfQ09OVFJPTAkJMHgzOQorCisjZGVmaW5lIFdNODk3OF9DQUNIRVJFR05VTQkJCTU4CisKKy8qIENsb2NrIGRpdmlkZXIgSWQncyAqLworZW51bSB3bTg5NzhfY2xrX2lkIHsKKwlXTTg5NzhfT1BDTEtSQVRFLAorCVdNODk3OF9CQ0xLRElWLAorfTsKKworZW51bSB3bTg5Nzhfc3lzY2xrX3NyYyB7CisJV004OTc4X1BMTCwKKwlXTTg5NzhfTUNMSworfTsKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5NzhfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk3ODsKKworI2VuZGlmCS8qIF9fV004OTc4X0hfXyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKaW5kZXggMzQxNDgxZS4uYTU0ZGM3N2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwpAQCAtMTMxOSwxMCArMTMxOSw2IEBACiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCi0JLyogd2Ugb25seSBuZWVkIHRvIHN1c3BlbmQgaWYgd2UgYXJlIGEgdmFsaWQgY2FyZCAqLwotCWlmICghY29kZWMtPmNhcmQpCi0JCXJldHVybiAwOwotCiAJd204OTkwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMzUsMTAgKzEzMzEsNiBAQAogCXU4IGRhdGFbMl07CiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKLQkvKiB3ZSBvbmx5IG5lZWQgdG8gcmVzdW1lIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KLQlpZiAoIWNvZGVjLT5jYXJkKQotCQlyZXR1cm4gMDsKLQogCS8qIFN5bmMgcmVnX2NhY2hlIHdpdGggdGhlIGhhcmR3YXJlICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTkwX3JlZyk7IGkrKykgewogCQlpZiAoaSArIDEgPT0gV004OTkwX1JFU0VUKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKaW5kZXggMjk4MWFmYS4uYmYwMjJmNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHdtODk5My5jIC0tIFdNODk5MyBBTFNBIFNvQyBhdWRpbyBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKiBDb3B5cmlnaHQgMjAwOSwgMjAxMCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCiAgKgogICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KICAqCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0yOSw2ICszMCwxNiBAQAogI2luY2x1ZGUgIndtODk5My5oIgogI2luY2x1ZGUgIndtX2h1YnMuaCIKIAorI2RlZmluZSBXTTg5OTNfTlVNX1NVUFBMSUVTIDYKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5OTNfc3VwcGx5X25hbWVzW1dNODk5M19OVU1fU1VQUExJRVNdID0geworCSJEQ1ZERCIsCisJIkRCVkREIiwKKwkiQVZERDEiLAorCSJBVkREMiIsCisJIkNQVkREIiwKKwkiU1BLVkREIiwKK307CisKIHN0YXRpYyB1MTYgd204OTkzX3JlZ19kZWZhdWx0c1tXTTg5OTNfUkVHSVNURVJfQ09VTlRdID0gewogCTB4ODk5MywgICAgIC8qIFIwICAgLSBTb2Z0d2FyZSBSZXNldCAqLwogCTB4MDAwMCwgICAgIC8qIFIxICAgLSBQb3dlciBNYW5hZ2VtZW50ICgxKSAqLwpAQCAtMjEzLDcgKzIyNCw5IEBACiB9OwogCiBzdHJ1Y3Qgd204OTkzX3ByaXYgeworCXN0cnVjdCB3bV9odWJzX2RhdGEgaHVic19kYXRhOwogCXUxNiByZWdfY2FjaGVbV004OTkzX1JFR0lTVEVSX0NPVU5UXTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tXTTg5OTNfTlVNX1NVUFBMSUVTXTsKIAlzdHJ1Y3Qgd204OTkzX3BsYXRmb3JtX2RhdGEgcGRhdGE7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CiAJaW50IG1hc3RlcjsKQEAgLTIyNywzNiArMjQwLDkgQEAKIAlpbnQgY2xhc3Nfd191c2VyczsKIAl1bnNpZ25lZCBpbnQgZmxsX2ZyZWY7CiAJdW5zaWduZWQgaW50IGZsbF9mb3V0OworCWludCBmbGxfc3JjOwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCB3bTg5OTNfcmVhZF9odyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHU4IHJlZykKLXsKLQlzdHJ1Y3QgaTJjX21zZyB4ZmVyWzJdOwotCXUxNiBkYXRhOwotCWludCByZXQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7Ci0KLQkvKiBXcml0ZSByZWdpc3RlciAqLwotCXhmZXJbMF0uYWRkciA9IGkyYy0+YWRkcjsKLQl4ZmVyWzBdLmZsYWdzID0gMDsKLQl4ZmVyWzBdLmxlbiA9IDE7Ci0JeGZlclswXS5idWYgPSAmcmVnOwotCi0JLyogUmVhZCBkYXRhICovCi0JeGZlclsxXS5hZGRyID0gaTJjLT5hZGRyOwotCXhmZXJbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKLQl4ZmVyWzFdLmxlbiA9IDI7Ci0JeGZlclsxXS5idWYgPSAodTggKikmZGF0YTsKLQotCXJldCA9IGkyY190cmFuc2ZlcihpMmMtPmFkYXB0ZXIsIHhmZXIsIDIpOwotCWlmIChyZXQgIT0gMikgewotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCAweCV4OiAlZFxuIiwgcmVnLCByZXQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gKGRhdGEgPj4gOCkgfCAoKGRhdGEgJiAweGZmKSA8PCA4KTsKLX0KLQogc3RhdGljIGludCB3bTg5OTNfdm9sYXRpbGUodW5zaWduZWQgaW50IHJlZykKIHsKIAlzd2l0Y2ggKHJlZykgewpAQCAtMjcxLDQ4ICsyNTcsNiBAQAogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCB3bTg5OTNfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0KLQlCVUdfT04ocmVnID4gV004OTkzX01BWF9SRUdJU1RFUik7Ci0KLQlpZiAod204OTkzX3ZvbGF0aWxlKHJlZykpCi0JCXJldHVybiB3bTg5OTNfcmVhZF9odyhjb2RlYywgcmVnKTsKLQllbHNlCi0JCXJldHVybiByZWdfY2FjaGVbcmVnXTsKLX0KLQotc3RhdGljIGludCB3bTg5OTNfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAotCQkJdW5zaWduZWQgaW50IHZhbHVlKQotewotCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQl1OCBkYXRhWzNdOwotCWludCByZXQ7Ci0KLQlCVUdfT04ocmVnID4gV004OTkzX01BWF9SRUdJU1RFUik7Ci0KLQkvKiBkYXRhIGlzCi0JICogICBEMTUuLkQ5IFdNODk5MyByZWdpc3RlciBvZmZzZXQKLQkgKiAgIEQ4Li4uRDAgcmVnaXN0ZXIgZGF0YQotCSAqLwotCWRhdGFbMF0gPSByZWc7Ci0JZGF0YVsxXSA9IHZhbHVlID4+IDg7Ci0JZGF0YVsyXSA9IHZhbHVlICYgMHgwMGZmOwotCi0JaWYgKCF3bTg5OTNfdm9sYXRpbGUocmVnKSkKLQkJcmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKLQotCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAzKTsKLQotCWlmIChyZXQgPT0gMykKLQkJcmV0dXJuIDA7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JcmV0dXJuIC1FSU87Ci19Ci0KIHN0cnVjdCBfZmxsX2RpdiB7CiAJdTE2IGZsbF9mcmF0aW87CiAJdTE2IGZsbF9vdXRkaXY7CkBAIC00NDEsOSArMzg1LDkgQEAKIAkJd204OTkzLT5mbGxfZnJlZiA9IDA7CiAJCXdtODk5My0+ZmxsX2ZvdXQgPSAwOwogCi0JCXJlZzEgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEpOworCQlyZWcxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSk7CiAJCXJlZzEgJj0gfldNODk5M19GTExfRU5BOwotCQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEpOwogCiAJCXJldHVybiAwOwogCX0KQEAgLTQ1Miw3ICszOTYsNyBAQAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCXJlZzUgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzUpOworCXJlZzUgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF81KTsKIAlyZWc1ICY9IH5XTTg5OTNfRkxMX0NMS19TUkNfTUFTSzsKIAogCXN3aXRjaCAoZmxsX2lkKSB7CkBAIC00NzQsMzggKzQxOCwzOSBAQAogCiAJLyogQW55IEZMTCBjb25maWd1cmF0aW9uIGNoYW5nZSByZXF1aXJlcyB0aGF0IHRoZSBGTEwgYmUKIAkgKiBkaXNhYmxlZCBmaXJzdC4gKi8KLQlyZWcxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xKTsKKwlyZWcxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSk7CiAJcmVnMSAmPSB+V004OTkzX0ZMTF9FTkE7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEpOwogCiAJLyogQXBwbHkgdGhlIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAoZmxsX2Rpdi5rKQogCQlyZWcxIHw9IFdNODk5M19GTExfRlJBQ19NQVNLOwogCWVsc2UKIAkJcmVnMSAmPSB+V004OTkzX0ZMTF9GUkFDX01BU0s7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEpOwogCi0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMiwKLQkJICAgICAoZmxsX2Rpdi5mbGxfb3V0ZGl2IDw8IFdNODk5M19GTExfT1VURElWX1NISUZUKSB8Ci0JCSAgICAgKGZsbF9kaXYuZmxsX2ZyYXRpbyA8PCBXTTg5OTNfRkxMX0ZSQVRJT19TSElGVCkpOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzMsIGZsbF9kaXYuayk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzIsCisJCSAgICAgIChmbGxfZGl2LmZsbF9vdXRkaXYgPDwgV004OTkzX0ZMTF9PVVRESVZfU0hJRlQpIHwKKwkJICAgICAgKGZsbF9kaXYuZmxsX2ZyYXRpbyA8PCBXTTg5OTNfRkxMX0ZSQVRJT19TSElGVCkpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8zLCBmbGxfZGl2LmspOwogCi0JcmVnNCA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNCk7CisJcmVnNCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzQpOwogCXJlZzQgJj0gfldNODk5M19GTExfTl9NQVNLOwogCXJlZzQgfD0gZmxsX2Rpdi5uIDw8IFdNODk5M19GTExfTl9TSElGVDsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF80LCByZWc0KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNCwgcmVnNCk7CiAKIAlyZWc1ICY9IH5XTTg5OTNfRkxMX0NMS19SRUZfRElWX01BU0s7CiAJcmVnNSB8PSBmbGxfZGl2LmZsbF9jbGtfcmVmX2RpdiA8PCBXTTg5OTNfRkxMX0NMS19SRUZfRElWX1NISUZUOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzUsIHJlZzUpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF81LCByZWc1KTsKIAogCS8qIEVuYWJsZSB0aGUgRkxMICovCi0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSB8IFdNODk5M19GTExfRU5BKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSB8IFdNODk5M19GTExfRU5BKTsKIAogCWRldl9kYmcoY29kZWMtPmRldiwgIkZMTCBlbmFibGVkIGF0ICVkSHotPiVkSHpcbiIsIEZyZWYsIEZvdXQpOwogCiAJd204OTkzLT5mbGxfZnJlZiA9IEZyZWY7CiAJd204OTkzLT5mbGxfZm91dCA9IEZvdXQ7CisJd204OTkzLT5mbGxfc3JjID0gc291cmNlOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjAsNyArNDY1LDcgQEAKIAljYXNlIFdNODk5M19TWVNDTEtfTUNMSzoKIAkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVXNpbmcgJWRIeiBNQ0xLXG4iLCB3bTg5OTMtPm1jbGtfcmF0ZSk7CiAKLQkJcmVnID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18yKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMik7CiAJCXJlZyAmPSB+KFdNODk5M19NQ0xLX0RJViB8IFdNODk5M19TWVNDTEtfU1JDKTsKIAkJaWYgKHdtODk5My0+bWNsa19yYXRlID4gMTM1MDAwMDApIHsKIAkJCXJlZyB8PSBXTTg5OTNfTUNMS19ESVY7CkBAIC01MjksMTQgKzQ3NCwxNCBAQAogCQkJcmVnICY9IH5XTTg5OTNfTUNMS19ESVY7CiAJCQl3bTg5OTMtPnN5c2Nsa19yYXRlID0gd204OTkzLT5tY2xrX3JhdGU7CiAJCX0KLQkJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMiwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzIsIHJlZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBXTTg5OTNfU1lTQ0xLX0ZMTDoKIAkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVXNpbmcgJWRIeiBGTEwgY2xvY2tcbiIsCiAJCQl3bTg5OTMtPmZsbF9mb3V0KTsKIAotCQlyZWcgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzIpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18yKTsKIAkJcmVnIHw9IFdNODk5M19TWVNDTEtfU1JDOwogCQlpZiAod204OTkzLT5mbGxfZm91dCA+IDEzNTAwMDAwKSB7CiAJCQlyZWcgfD0gV004OTkzX01DTEtfRElWOwpAQCAtNTQ1LDcgKzQ5MCw3IEBACiAJCQlyZWcgJj0gfldNODk5M19NQ0xLX0RJVjsKIAkJCXdtODk5My0+c3lzY2xrX3JhdGUgPSB3bTg5OTMtPmZsbF9mb3V0OwogCQl9Ci0JCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzIsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18yLCByZWcpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC05NzgsMTAgKzkyMywzMyBAQAogCXsgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCAiREFDIiwgIkRBQ1IiIH0sCiB9OwogCitzdGF0aWMgdm9pZCB3bTg5OTNfY2FjaGVfcmVzdG9yZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaW50IGk7CisKKwlpZiAoIWNvZGVjLT5jYWNoZV9zeW5jKQorCQlyZXR1cm47CisKKwkvKiBSZWVuYWJsZSBoYXJkd2FyZSB3cml0ZXMgKi8KKwljb2RlYy0+Y2FjaGVfb25seSA9IDA7CisKKwkvKiBSZXN0b3JlIHRoZSByZWdpc3RlciBzZXR0aW5ncyAqLworCWZvciAoaSA9IDE7IGkgPCBXTTg5OTNfTUFYX1JFR0lTVEVSOyBpKyspIHsKKwkJaWYgKGNhY2hlW2ldID09IHdtODk5M19yZWdfZGVmYXVsdHNbaV0pCisJCQljb250aW51ZTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgaSwgY2FjaGVbaV0pOworCX0KKworCS8qIFdlJ3JlIGluIHN5bmMgYWdhaW4gKi8KKwljb2RlYy0+Y2FjaGVfc3luYyA9IDA7Cit9CisKIHN0YXRpYyBpbnQgd204OTkzX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CiAJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CkBAIC05OTUsNiArOTYzLDE4IEBACiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgogCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyksCisJCQkJCQkgICAgd204OTkzLT5zdXBwbGllcyk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJd204OTkzX2NhY2hlX3Jlc3RvcmUoY29kZWMpOworCisJCQkvKiBUdW5lIERDIHNlcnZvIGNvbmZpZ3VyYXRpb24gKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4NDQsIDMpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgMHg1NiwgMyk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDQ0LCAwKTsKKwogCQkJLyogQnJpbmcgdXAgVk1JRCB3aXRoIGZhc3Qgc29mdCBzdGFydCAqLwogCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FOVElQT1AyLAogCQkJCQkgICAgV004OTkzX1NUQVJUVVBfQklBU19FTkEgfApAQCAtMTA0Miw2ICsxMDIyLDE4IEBACiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzEsCiAJCQkJICAgIFdNODk5M19WTUlEX1NFTF9NQVNLIHwgV004OTkzX0JJQVNfRU5BLAogCQkJCSAgICAwKTsKKworI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKKyAgICAgICAgICAgICAgIC8qIFBvc3QgMi42LjM0IHdlIHdpbGwgYmUgYWJsZSB0byBnZXQgYSBjYWxsYmFjayB3aGVuCisgICAgICAgICAgICAgICAgKiB0aGUgcmVndWxhdG9ycyBhcmUgZGlzYWJsZWQgd2hpY2ggd2UgY2FuIHVzZSBidXQKKwkJKiBmb3Igbm93IGp1c3QgYXNzdW1lIHRoYXQgdGhlIHBvd2VyIHdpbGwgYmUgY3V0IGlmCisJCSogdGhlIHJlZ3VsYXRvciBBUEkgaXMgaW4gdXNlLgorCQkqLworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisjZW5kaWYKKworCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyksCisJCQkJICAgICAgIHdtODk5My0+c3VwcGxpZXMpOwogCQlicmVhazsKIAl9CiAKQEAgLTEwNzUsOCArMTA2Nyw4IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTkzX3ByaXYgKndtODk5MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IGFpZjEgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xKTsKLQl1bnNpZ25lZCBpbnQgYWlmNCA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQpOworCXVuc2lnbmVkIGludCBhaWYxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEpOworCXVuc2lnbmVkIGludCBhaWY0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQpOwogCiAJYWlmMSAmPSB+KFdNODk5M19CQ0xLX0RJUiB8IFdNODk5M19BSUZfQkNMS19JTlYgfAogCQkgIFdNODk5M19BSUZfTFJDTEtfSU5WIHwgV004OTkzX0FJRl9GTVRfTUFTSyk7CkBAIC0xMTU5LDggKzExNTEsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSwgYWlmMSk7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQsIGFpZjQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSwgYWlmMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80LCBhaWY0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE3NCwxNiArMTE2NiwxNiBAQAogCWludCByZXQsIGksIGJlc3QsIGJlc3RfdmFsLCBjdXJfdmFsOwogCXVuc2lnbmVkIGludCBjbG9ja2luZzEsIGNsb2NraW5nMywgYWlmMSwgYWlmNDsKIAotCWNsb2NraW5nMSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMSk7CisJY2xvY2tpbmcxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMSk7CiAJY2xvY2tpbmcxICY9IH5XTTg5OTNfQkNMS19ESVZfTUFTSzsKIAotCWNsb2NraW5nMyA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMyk7CisJY2xvY2tpbmczID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMyk7CiAJY2xvY2tpbmczICY9IH4oV004OTkzX0NMS19TWVNfUkFURV9NQVNLIHwgV004OTkzX1NBTVBMRV9SQVRFX01BU0spOwogCi0JYWlmMSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEpOworCWFpZjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSk7CiAJYWlmMSAmPSB+V004OTkzX0FJRl9XTF9NQVNLOwogCi0JYWlmNCA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQpOworCWFpZjQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCk7CiAJYWlmNCAmPSB+V004OTkzX0xSQ0xLX1JBVEVfTUFTSzsKIAogCS8qIFdoYXQgQkNMSyBkbyB3ZSBuZWVkPyAqLwpAQCAtMTI3NiwxNCArMTI2OCwxNCBAQAogCWRldl9kYmcoY29kZWMtPmRldiwgIkxSQ0xLX1JBVEUgaXMgJWRcbiIsIHdtODk5My0+YmNsayAvIHdtODk5My0+ZnMpOwogCWFpZjQgfD0gd204OTkzLT5iY2xrIC8gd204OTkzLT5mczsKIAotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzEsIGNsb2NraW5nMSk7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMywgY2xvY2tpbmczKTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSwgYWlmMSk7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQsIGFpZjQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18xLCBjbG9ja2luZzEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18zLCBjbG9ja2luZzMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSwgYWlmMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80LCBhaWY0KTsKIAogCS8qIFJlVHVuZSBNb2JpbGU/ICovCiAJaWYgKHdtODk5My0+cGRhdGEubnVtX3JldHVuZV9jb25maWdzKSB7Ci0JCXUxNiBlcTEgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0VRMSk7CisJCXUxNiBlcTEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19FUTEpOwogCQlzdHJ1Y3Qgd204OTkzX3JldHVuZV9tb2JpbGVfc2V0dGluZyAqczsKIAogCQliZXN0ID0gMDsKQEAgLTEzMDYsNyArMTI5OCw3IEBACiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19FUTEsIFdNODk5M19FUV9FTkEsIDApOwogCiAJCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHMtPmNvbmZpZyk7IGkrKykKLQkJCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0VRMSArIGksIHMtPmNvbmZpZ1tpXSk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRVExICsgaSwgcy0+Y29uZmlnW2ldKTsKIAogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRVExLCBXTTg5OTNfRVFfRU5BLCBlcTEpOwogCX0KQEAgLTEzMTksMTQgKzEzMTEsMTQgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXVuc2lnbmVkIGludCByZWc7CiAKLQlyZWcgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0RBQ19DVFJMKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19EQUNfQ1RSTCk7CiAKIAlpZiAobXV0ZSkKIAkJcmVnIHw9IFdNODk5M19EQUNfTVVURTsKIAllbHNlCiAJCXJlZyAmPSB+V004OTkzX0RBQ19NVVRFOwogCi0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfREFDX0NUUkwsIHJlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0RBQ19DVFJMLCByZWcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDgwLDkgKzE0NzIsNjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg5OTNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgZmxsX2ZvdXQgPSB3bTg5OTMtPmZsbF9mb3V0OworCWludCBmbGxfZnJlZiAgPSB3bTg5OTMtPmZsbF9mcmVmOworCWludCByZXQ7CisKKwkvKiBTdG9wIHRoZSBGTEwgaW4gYW4gb3JkZXJseSBmYXNoaW9uICovCisJcmV0ID0gd204OTkzX3NldF9mbGwoY29kZWMtPmRhaSwgMCwgMCwgMCwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzdG9wIEZMTFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJd204OTkzLT5mbGxfZm91dCA9IGZsbF9mb3V0OworCXdtODk5My0+ZmxsX2ZyZWYgPSBmbGxfZnJlZjsKKworCXdtODk5M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJd204OTkzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBSZXN0YXJ0IHRoZSBGTEw/ICovCisJaWYgKHdtODk5My0+ZmxsX2ZvdXQpIHsKKwkJaW50IGZsbF9mb3V0ID0gd204OTkzLT5mbGxfZm91dDsKKwkJaW50IGZsbF9mcmVmICA9IHdtODk5My0+ZmxsX2ZyZWY7CisKKwkJd204OTkzLT5mbGxfZnJlZiA9IDA7CisJCXdtODk5My0+ZmxsX2ZvdXQgPSAwOworCisJCXJldCA9IHdtODk5M19zZXRfZmxsKGNvZGVjLT5kYWksIDAsIHdtODk5My0+ZmxsX3NyYywKKwkJCQkgICAgIGZsbF9mcmVmLCBmbGxfZm91dCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXN0YXJ0IEZMTFxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB3bTg5OTNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODk5M19yZXN1bWUgTlVMTAorI2VuZGlmCisKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk5MyA9IHsKIAkucHJvYmUgPSAJd204OTkzX3Byb2JlLAogCS5yZW1vdmUgPSAJd204OTkzX3JlbW92ZSwKKwkuc3VzcGVuZCA9CXdtODk5M19zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg5OTNfcmVzdW1lLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204OTkzKTsKIApAQCAtMTQ5Myw2ICsxNTQyLDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgcmV0OworCWludCBpOwogCiAJaWYgKHdtODk5M19jb2RlYykgewogCQlkZXZfZXJyKCZpMmMtPmRldiwgIkEgV004OTkzIGlzIGFscmVhZHkgcmVnaXN0ZXJlZFxuIik7CkBAIC0xNTEzLDkgKzE1NjMsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTg5OTMiOwotCWNvZGVjLT5yZWFkID0gd204OTkzX3JlYWQ7Ci0JY29kZWMtPndyaXRlID0gd204OTkzX3dyaXRlOwotCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKwljb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIgPSB3bTg5OTNfdm9sYXRpbGU7CiAJY29kZWMtPnJlZ19jYWNoZSA9IHdtODk5My0+cmVnX2NhY2hlOwogCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204OTkzLT5yZWdfY2FjaGUpOwogCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKQEAgLTE1MjQsMjUgKzE1NzIsNTMgQEAKIAljb2RlYy0+bnVtX2RhaSA9IDE7CiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk5MzsKIAorCXdtODk5My0+aHVic19kYXRhLmhwX3N0YXJ0dXBfbW9kZSA9IDE7CisJd204OTkzLT5odWJzX2RhdGEuZGNzX2NvZGVzID0gLTI7CisKIAltZW1jcHkod204OTkzLT5yZWdfY2FjaGUsIHdtODk5M19yZWdfZGVmYXVsdHMsCiAJICAgICAgIHNpemVvZih3bTg5OTMtPnJlZ19jYWNoZSkpOwogCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDgsIDE2LCBTTkRfU09DX0kyQyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTkzKTsKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOwogCXdtODk5M19jb2RlYyA9IGNvZGVjOwogCiAJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKIAotCXZhbCA9IHdtODk5M19yZWFkX2h3KGNvZGVjLCBXTTg5OTNfU09GVFdBUkVfUkVTRVQpOwotCWlmICh2YWwgIT0gd204OTkzX3JlZ19kZWZhdWx0c1tXTTg5OTNfU09GVFdBUkVfUkVTRVRdKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgSUQgcmVnaXN0ZXIgdmFsdWUgJXhcbiIsIHZhbCk7Ci0JCXJldCA9IC1FSU5WQUw7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyk7IGkrKykKKwkJd204OTkzLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB3bTg5OTNfc3VwcGx5X25hbWVzW2ldOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyksCisJCQkJIHdtODk5My0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyOwogCX0KIAotCXJldCA9IHdtODk5M193cml0ZShjb2RlYywgV004OTkzX1NPRlRXQVJFX1JFU0VULCAweGZmZmYpOworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLAorCQkJCSAgICB3bTg5OTMtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19TT0ZUV0FSRV9SRVNFVCk7CisJaWYgKHZhbCAhPSB3bTg5OTNfcmVnX2RlZmF1bHRzW1dNODk5M19TT0ZUV0FSRV9SRVNFVF0pIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBJRCByZWdpc3RlciB2YWx1ZSAleFxuIiwgdmFsKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19TT0ZUV0FSRV9SRVNFVCwgMHhmZmZmKTsKIAlpZiAocmV0ICE9IDApCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9lbmFibGU7CisKKwljb2RlYy0+Y2FjaGVfb25seSA9IDE7CiAKIAkvKiBCeSBkZWZhdWx0IHdlJ3JlIHVzaW5nIHRoZSBvdXRwdXQgbWl4ZXJzICovCiAJd204OTkzLT5jbGFzc193X3VzZXJzID0gMjsKQEAgLTE1NzIsNyArMTY0OCw3IEBACiAJCQkgICAgIAogCXJldCA9IHdtODk5M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX2VuYWJsZTsKIAogCXdtODk5M19kYWkuZGV2ID0gY29kZWMtPmRldjsKIApAQCAtMTU4Niw2ICsxNjYyLDEwIEBACiAKIGVycl9iaWFzOgogCXdtODk5M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CitlcnJfZW5hYmxlOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwgd204OTkzLT5zdXBwbGllcyk7CitlcnJfZ2V0OgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwgd204OTkzLT5zdXBwbGllcyk7CiBlcnI6CiAJd204OTkzX2NvZGVjID0gTlVMTDsKIAlrZnJlZSh3bTg5OTMpOwpAQCAtMTYwMCw2ICsxNjgwLDcgQEAKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg5OTNfZGFpKTsKIAogCXdtODk5M19zZXRfYmlhc19sZXZlbCgmd204OTkzLT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLCB3bTg5OTMtPnN1cHBsaWVzKTsKIAlrZnJlZSh3bTg5OTMpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWYzNzcxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpAQCAtMCwwICsxLDM4NjcgQEAKKy8qCisgKiB3bTg5OTQuYyAgLS0gIFdNODk5NCBBTFNBIFNvQyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvcGRhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L2dwaW8uaD4KKworI2luY2x1ZGUgIndtODk5NC5oIgorI2luY2x1ZGUgIndtX2h1YnMuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg5OTRfY29kZWM7CitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5OTQ7CisKK3N0cnVjdCBmbGxfY29uZmlnIHsKKwlpbnQgc3JjOworCWludCBpbjsKKwlpbnQgb3V0OworfTsKKworI2RlZmluZSBXTTg5OTRfTlVNX0RSQyAzCisjZGVmaW5lIFdNODk5NF9OVU1fRVEgIDMKKworc3RhdGljIGludCB3bTg5OTRfZHJjX2Jhc2VbXSA9IHsKKwlXTTg5OTRfQUlGMV9EUkMxXzEsCisJV004OTk0X0FJRjFfRFJDMl8xLAorCVdNODk5NF9BSUYyX0RSQ18xLAorfTsKKworc3RhdGljIGludCB3bTg5OTRfcmV0dW5lX21vYmlsZV9iYXNlW10gPSB7CisJV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18xLAorCVdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMSwKKwlXTTg5OTRfQUlGMl9FUV9HQUlOU18xLAorfTsKKworI2RlZmluZSBXTTg5OTRfUkVHX0NBQ0hFX1NJWkUgIDB4NjIxCisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODk5NF9wcml2IHsKKwlzdHJ1Y3Qgd21faHVic19kYXRhIGh1YnM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtXTTg5OTRfUkVHX0NBQ0hFX1NJWkUgKyAxXTsKKwlpbnQgc3lzY2xrWzJdOworCWludCBzeXNjbGtfcmF0ZVsyXTsKKwlpbnQgbWNsa1syXTsKKwlpbnQgYWlmY2xrWzJdOworCXN0cnVjdCBmbGxfY29uZmlnIGZsbFsyXSwgZmxsX3N1c3BlbmRbMl07CisKKwlpbnQgZGFjX3JhdGVzWzJdOworCWludCBscmNsa19zaGFyZWRbMl07CisKKwkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgRFJDIGNvbmZpZ3VyYXRpb24gKi8KKwljb25zdCBjaGFyICoqZHJjX3RleHRzOworCWludCBkcmNfY2ZnW1dNODk5NF9OVU1fRFJDXTsKKwlzdHJ1Y3Qgc29jX2VudW0gZHJjX2VudW07CisKKwkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgUmVUdW5lIG1vYmlsZSBjb25maWd1cmF0aW9uICovCisJaW50IG51bV9yZXR1bmVfbW9iaWxlX3RleHRzOworCWNvbnN0IGNoYXIgKipyZXR1bmVfbW9iaWxlX3RleHRzOworCWludCByZXR1bmVfbW9iaWxlX2NmZ1tXTTg5OTRfTlVNX0VRXTsKKwlzdHJ1Y3Qgc29jX2VudW0gcmV0dW5lX21vYmlsZV9lbnVtOworCisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGE7Cit9OworCitzdGF0aWMgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAgcmVhZGFibGU7ICAgLyogTWFzayBvZiByZWFkYWJsZSBiaXRzICovCisJdW5zaWduZWQgc2hvcnQgIHdyaXRhYmxlOyAgIC8qIE1hc2sgb2Ygd3JpdGFibGUgYml0cyAqLworCXVuc2lnbmVkIHNob3J0ICB2b2w7ICAgICAgICAvKiBNYXNrIG9mIHZvbGF0aWxlIGJpdHMgKi8KK30gYWNjZXNzX21hc2tzW10gPSB7CisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIwICAgICAtIFNvZnR3YXJlIFJlc2V0ICovCisJeyAweDNCMzcsIDB4M0IzNywgMHgwMDAwIH0sIC8qIFIxICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDEpICovCisJeyAweDZCRjAsIDB4NkJGMCwgMHgwMDAwIH0sIC8qIFIyICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDIpICovCisJeyAweDNGRjAsIDB4M0ZGMCwgMHgwMDAwIH0sIC8qIFIzICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDMpICovCisJeyAweDNGM0YsIDB4M0YzRiwgMHgwMDAwIH0sIC8qIFI0ICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDQpICovCisJeyAweDNGMEYsIDB4M0YwRiwgMHgwMDAwIH0sIC8qIFI1ICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDUpICovCisJeyAweDAwM0YsIDB4MDAzRiwgMHgwMDAwIH0sIC8qIFI2ICAgICAtIFBvd2VyIE1hbmFnZW1lbnQgKDYpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjAgKi8KKwl7IDB4MDFDMCwgMHgwMUMwLCAweDAwMDAgfSwgLyogUjIxICAgIC0gSW5wdXQgTWl4ZXIgKDEpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjMgKi8KKwl7IDB4MDBERiwgMHgwMURGLCAweDAwMDAgfSwgLyogUjI0ICAgIC0gTGVmdCBMaW5lIElucHV0IDEmMiBWb2x1bWUgKi8KKwl7IDB4MDBERiwgMHgwMURGLCAweDAwMDAgfSwgLyogUjI1ICAgIC0gTGVmdCBMaW5lIElucHV0IDMmNCBWb2x1bWUgKi8KKwl7IDB4MDBERiwgMHgwMURGLCAweDAwMDAgfSwgLyogUjI2ICAgIC0gUmlnaHQgTGluZSBJbnB1dCAxJjIgVm9sdW1lICovCisJeyAweDAwREYsIDB4MDFERiwgMHgwMDAwIH0sIC8qIFIyNyAgICAtIFJpZ2h0IExpbmUgSW5wdXQgMyY0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMjggICAgLSBMZWZ0IE91dHB1dCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjI5ICAgIC0gUmlnaHQgT3V0cHV0IFZvbHVtZSAqLworCXsgMHgwMDc3LCAweDAwNzcsIDB4MDAwMCB9LCAvKiBSMzAgICAgLSBMaW5lIE91dHB1dHMgVm9sdW1lICovCisJeyAweDAwMzAsIDB4MDAzMCwgMHgwMDAwIH0sIC8qIFIzMSAgICAtIEhQT1VUMiBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjMyICAgIC0gTGVmdCBPUEdBIFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMzMgICAgLSBSaWdodCBPUEdBIFZvbHVtZSAqLworCXsgMHgwMDdGLCAweDAwN0YsIDB4MDAwMCB9LCAvKiBSMzQgICAgLSBTUEtNSVhMIEF0dGVudWF0aW9uICovCisJeyAweDAxN0YsIDB4MDE3RiwgMHgwMDAwIH0sIC8qIFIzNSAgICAtIFNQS01JWFIgQXR0ZW51YXRpb24gKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAweDAwMDAgfSwgLyogUjM2ICAgIC0gU1BLT1VUIE1peGVycyAqLworCXsgMHgwMDNGLCAweDAwM0YsIDB4MDAwMCB9LCAvKiBSMzcgICAgLSBDbGFzc0QgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjM4ICAgIC0gU3BlYWtlciBWb2x1bWUgTGVmdCAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMzkgICAgLSBTcGVha2VyIFZvbHVtZSBSaWdodCAqLworCXsgMHgwMEZGLCAweDAwRkYsIDB4MDAwMCB9LCAvKiBSNDAgICAgLSBJbnB1dCBNaXhlciAoMikgKi8KKwl7IDB4MDFCNywgMHgwMUI3LCAweDAwMDAgfSwgLyogUjQxICAgIC0gSW5wdXQgTWl4ZXIgKDMpICovCisJeyAweDAxQjcsIDB4MDFCNywgMHgwMDAwIH0sIC8qIFI0MiAgICAtIElucHV0IE1peGVyICg0KSAqLworCXsgMHgwMUM3LCAweDAxQzcsIDB4MDAwMCB9LCAvKiBSNDMgICAgLSBJbnB1dCBNaXhlciAoNSkgKi8KKwl7IDB4MDFDNywgMHgwMUM3LCAweDAwMDAgfSwgLyogUjQ0ICAgIC0gSW5wdXQgTWl4ZXIgKDYpICovCisJeyAweDAxRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFI0NSAgICAtIE91dHB1dCBNaXhlciAoMSkgKi8KKwl7IDB4MDFGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjQ2ICAgIC0gT3V0cHV0IE1peGVyICgyKSAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNDcgICAgLSBPdXRwdXQgTWl4ZXIgKDMpICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI0OCAgICAtIE91dHB1dCBNaXhlciAoNCkgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjQ5ICAgIC0gT3V0cHV0IE1peGVyICg1KSAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNTAgICAgLSBPdXRwdXQgTWl4ZXIgKDYpICovCisJeyAweDAwMzgsIDB4MDAzOCwgMHgwMDAwIH0sIC8qIFI1MSAgICAtIEhQT1VUMiBNaXhlciAqLworCXsgMHgwMDc3LCAweDAwNzcsIDB4MDAwMCB9LCAvKiBSNTIgICAgLSBMaW5lIE1peGVyICgxKSAqLworCXsgMHgwMDc3LCAweDAwNzcsIDB4MDAwMCB9LCAvKiBSNTMgICAgLSBMaW5lIE1peGVyICgyKSAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSNTQgICAgLSBTcGVha2VyIE1peGVyICovCisJeyAweDAwQzEsIDB4MDBDMSwgMHgwMDAwIH0sIC8qIFI1NSAgICAtIEFkZGl0aW9uYWwgQ29udHJvbCAqLworCXsgMHgwMEYwLCAweDAwRjAsIDB4MDAwMCB9LCAvKiBSNTYgICAgLSBBbnRpUE9QICgxKSAqLworCXsgMHgwMUVGLCAweDAxRUYsIDB4MDAwMCB9LCAvKiBSNTcgICAgLSBBbnRpUE9QICgyKSAqLworCXsgMHgwMEZGLCAweDAwRkYsIDB4MDAwMCB9LCAvKiBSNTggICAgLSBNSUNCSUFTICovCisJeyAweDAwMEYsIDB4MDAwRiwgMHgwMDAwIH0sIC8qIFI1OSAgICAtIExETyAxICovCisJeyAweDAwMDcsIDB4MDAwNywgMHgwMDAwIH0sIC8qIFI2MCAgICAtIExETyAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1ICovCisJeyAweDgwMDAsIDB4ODAwMCwgMHgwMDAwIH0sIC8qIFI3NiAgICAtIENoYXJnZSBQdW1wICgxKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODAgKi8KKwl7IDB4MDMwMSwgMHgwMzAxLCAweDAwMDAgfSwgLyogUjgxICAgIC0gQ2xhc3MgVyAoMSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MyAqLworCXsgMHgzMzNGLCAweDMzM0YsIDB4MDAwMCB9LCAvKiBSODQgICAgLSBEQyBTZXJ2byAoMSkgKi8KKwl7IDB4MEZFRiwgMHgwRkVGLCAweDAwMDAgfSwgLyogUjg1ICAgIC0gREMgU2Vydm8gKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSODcgICAgLSBEQyBTZXJ2byAoNCkgKi8KKwl7IDB4MDMzMywgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4ICAgIC0gREMgU2Vydm8gUmVhZGJhY2sgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1ICovCisJeyAweDAwRUUsIDB4MDBFRSwgMHgwMDAwIH0sIC8qIFI5NiAgICAtIEFuYWxvZ3VlIEhQICgxKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1NSAqLworCXsgMHgwMDBGLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU2ICAgLSBDaGlwIFJldmlzaW9uICovCisJeyAweDAwNzQsIDB4MDA3NCwgMHgwMDAwIH0sIC8qIFIyNTcgICAtIENvbnRyb2wgSW50ZXJmYWNlICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3MSAqLworCXsgMHg4MDdGLCAweDgzN0YsIDB4MDAwMCB9LCAvKiBSMjcyICAgLSBXcml0ZSBTZXF1ZW5jZXIgQ3RybCAoMSkgKi8KKwl7IDB4MDE3RiwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3MyAgIC0gV3JpdGUgU2VxdWVuY2VyIEN0cmwgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTEgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAweDAwMDAgfSwgLyogUjUxMiAgIC0gQUlGMSBDbG9ja2luZyAoMSkgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAweDAwMDAgfSwgLyogUjUxMyAgIC0gQUlGMSBDbG9ja2luZyAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE1ICovCisJeyAweDAwMUYsIDB4MDAxRiwgMHgwMDAwIH0sIC8qIFI1MTYgICAtIEFJRjIgQ2xvY2tpbmcgKDEpICovCisJeyAweDAwM0YsIDB4MDAzRiwgMHgwMDAwIH0sIC8qIFI1MTcgICAtIEFJRjIgQ2xvY2tpbmcgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxOSAqLworCXsgMHgwMDFGLCAweDAwMUYsIDB4MDAwMCB9LCAvKiBSNTIwICAgLSBDbG9ja2luZyAoMSkgKi8KKwl7IDB4MDc3NywgMHgwNzc3LCAweDAwMDAgfSwgLyogUjUyMSAgIC0gQ2xvY2tpbmcgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI3ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMHgwMDAwIH0sIC8qIFI1MjggICAtIEFJRjEgUmF0ZSAqLworCXsgMHgwMEZGLCAweDAwRkYsIDB4MDAwMCB9LCAvKiBSNTI5ICAgLSBBSUYyIFJhdGUgKi8KKwl7IDB4MDAwRiwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzMCAgIC0gUmF0ZSBTdGF0dXMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU0MyAqLworCXsgMHgwMDA3LCAweDAwMDcsIDB4MDAwMCB9LCAvKiBSNTQ0ICAgLSBGTEwxIENvbnRyb2wgKDEpICovCisJeyAweDNGNzcsIDB4M0Y3NywgMHgwMDAwIH0sIC8qIFI1NDUgICAtIEZMTDEgQ29udHJvbCAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjU0NiAgIC0gRkxMMSBDb250cm9sICgzKSAqLworCXsgMHg3RkVGLCAweDdGRUYsIDB4MDAwMCB9LCAvKiBSNTQ3ICAgLSBGTEwxIENvbnRyb2wgKDQpICovCisJeyAweDFGREIsIDB4MUZEQiwgMHgwMDAwIH0sIC8qIFI1NDggICAtIEZMTDEgQ29udHJvbCAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzUgKi8KKwl7IDB4MDAwNywgMHgwMDA3LCAweDAwMDAgfSwgLyogUjU3NiAgIC0gRkxMMiBDb250cm9sICgxKSAqLworCXsgMHgzRjc3LCAweDNGNzcsIDB4MDAwMCB9LCAvKiBSNTc3ICAgLSBGTEwyIENvbnRyb2wgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFI1NzggICAtIEZMTDIgQ29udHJvbCAoMykgKi8KKwl7IDB4N0ZFRiwgMHg3RkVGLCAweDAwMDAgfSwgLyogUjU3OSAgIC0gRkxMMiBDb250cm9sICg0KSAqLworCXsgMHgxRkRCLCAweDFGREIsIDB4MDAwMCB9LCAvKiBSNTgwICAgLSBGTEwyIENvbnRyb2wgKDUpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjcgKi8KKwl7IDB4RTFGOCwgMHhFMUY4LCAweDAwMDAgfSwgLyogUjc2OCAgIC0gQUlGMSBDb250cm9sICgxKSAqLworCXsgMHhDRDFGLCAweENEMUYsIDB4MDAwMCB9LCAvKiBSNzY5ICAgLSBBSUYxIENvbnRyb2wgKDIpICovCisJeyAweEYwMDAsIDB4RjAwMCwgMHgwMDAwIH0sIC8qIFI3NzAgICAtIEFJRjEgTWFzdGVyL1NsYXZlICovCisJeyAweDAxRjAsIDB4MDFGMCwgMHgwMDAwIH0sIC8qIFI3NzEgICAtIEFJRjEgQkNMSyAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNzcyICAgLSBBSUYxQURDIExSQ0xLICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI3NzMgICAtIEFJRjFEQUMgTFJDTEsgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjc3NCAgIC0gQUlGMURBQyBEYXRhICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFI3NzUgICAtIEFJRjFBREMgRGF0YSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3ODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3ODMgKi8KKwl7IDB4RjFGOCwgMHhGMUY4LCAweDAwMDAgfSwgLyogUjc4NCAgIC0gQUlGMiBDb250cm9sICgxKSAqLworCXsgMHhGRDFGLCAweEZEMUYsIDB4MDAwMCB9LCAvKiBSNzg1ICAgLSBBSUYyIENvbnRyb2wgKDIpICovCisJeyAweEYwMDAsIDB4RjAwMCwgMHgwMDAwIH0sIC8qIFI3ODYgICAtIEFJRjIgTWFzdGVyL1NsYXZlICovCisJeyAweDAxRjAsIDB4MDFGMCwgMHgwMDAwIH0sIC8qIFI3ODcgICAtIEFJRjIgQkNMSyAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNzg4ICAgLSBBSUYyQURDIExSQ0xLICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI3ODkgICAtIEFJRjJEQUMgTFJDTEsgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjc5MCAgIC0gQUlGMkRBQyBEYXRhICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFI3OTEgICAtIEFJRjJBREMgRGF0YSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDIzICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDI0ICAtIEFJRjEgQURDMSBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTAyNSAgLSBBSUYxIEFEQzEgUmlnaHQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDI2ICAtIEFJRjEgREFDMSBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTAyNyAgLSBBSUYxIERBQzEgUmlnaHQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDI4ICAtIEFJRjEgQURDMiBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTAyOSAgLSBBSUYxIEFEQzIgUmlnaHQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMDMwICAtIEFJRjEgREFDMiBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTAzMSAgLSBBSUYxIERBQzIgUmlnaHQgVm9sdW1lICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDM5ICovCisJeyAweEY4MDAsIDB4RjgwMCwgMHgwMDAwIH0sIC8qIFIxMDQwICAtIEFJRjEgQURDMSBGaWx0ZXJzICovCisJeyAweDc4MDAsIDB4NzgwMCwgMHgwMDAwIH0sIC8qIFIxMDQxICAtIEFJRjEgQURDMiBGaWx0ZXJzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDU1ICovCisJeyAweDAyQjYsIDB4MDJCNiwgMHgwMDAwIH0sIC8qIFIxMDU2ICAtIEFJRjEgREFDMSBGaWx0ZXJzICgxKSAqLworCXsgMHgzRjAwLCAweDNGMDAsIDB4MDAwMCB9LCAvKiBSMTA1NyAgLSBBSUYxIERBQzEgRmlsdGVycyAoMikgKi8KKwl7IDB4MDJCNiwgMHgwMkI2LCAweDAwMDAgfSwgLyogUjEwNTggIC0gQUlGMSBEQUMyIEZpbHRlcnMgKDEpICovCisJeyAweDNGMDAsIDB4M0YwMCwgMHgwMDAwIH0sIC8qIFIxMDU5ICAtIEFJRjEgREFDMiBGaWx0ZXJzICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4NyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTA4OCAgLSBBSUYxIERSQzEgKDEpICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMDg5ICAtIEFJRjEgRFJDMSAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEwOTAgIC0gQUlGMSBEUkMxICgzKSAqLworCXsgMHgwN0ZGLCAweDA3RkYsIDB4MDAwMCB9LCAvKiBSMTA5MSAgLSBBSUYxIERSQzEgKDQpICovCisJeyAweDAzRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFIxMDkyICAtIEFJRjEgRFJDMSAoNSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMDMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExMDQgIC0gQUlGMSBEUkMyICgxKSAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTEwNSAgLSBBSUYxIERSQzIgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTA2ICAtIEFJRjEgRFJDMiAoMykgKi8KKwl7IDB4MDdGRiwgMHgwN0ZGLCAweDAwMDAgfSwgLyogUjExMDcgIC0gQUlGMSBEUkMyICg0KSAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSMTEwOCAgLSBBSUYxIERSQzIgKDUpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTUxICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTUyICAtIEFJRjEgREFDMSBFUSBHYWlucyAoMSkgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjExNTMgIC0gQUlGMSBEQUMxIEVRIEdhaW5zICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE1NCAgLSBBSUYxIERBQzEgRVEgQmFuZCAxIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTUgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTU2ICAtIEFJRjEgREFDMSBFUSBCYW5kIDEgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTcgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTU4ICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE1OSAgLSBBSUYxIERBQzEgRVEgQmFuZCAyIEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjAgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2MSAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjIgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTYzICAtIEFJRjEgREFDMSBFUSBCYW5kIDMgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2NCAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTY1ICAtIEFJRjEgREFDMSBFUSBCYW5kIDQgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2NiAgLSBBSUYxIERBQzEgRVEgQmFuZCA0IEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjcgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTY4ICAtIEFJRjEgREFDMSBFUSBCYW5kIDQgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjkgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNSBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTcwICAtIEFJRjEgREFDMSBFUSBCYW5kIDUgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE3MSAgLSBBSUYxIERBQzEgRVEgQmFuZCA1IFBHICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTgzICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTg0ICAtIEFJRjEgREFDMiBFUSBHYWlucyAoMSkgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjExODUgIC0gQUlGMSBEQUMyIEVRIEdhaW5zICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE4NiAgLSBBSUYxIERBQzIgRVEgQmFuZCAxIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExODcgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMSBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTg4ICAtIEFJRjEgREFDMiBFUSBCYW5kIDEgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExODkgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTkwICAtIEFJRjEgREFDMiBFUSBCYW5kIDIgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5MSAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTIgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5MyAgLSBBSUYxIERBQzIgRVEgQmFuZCAzIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTQgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTk1ICAtIEFJRjEgREFDMiBFUSBCYW5kIDMgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5NiAgLSBBSUYxIERBQzIgRVEgQmFuZCAzIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTk3ICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5OCAgLSBBSUYxIERBQzIgRVEgQmFuZCA0IEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTkgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMjAwICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEyMDEgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNSBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMjAyICAtIEFJRjEgREFDMiBFUSBCYW5kIDUgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTIwMyAgLSBBSUYxIERBQzIgRVEgQmFuZCA1IFBHICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjc5ICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMjgwICAtIEFJRjIgQURDIExlZnQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIxMjgxICAtIEFJRjIgQURDIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTI4MiAgLSBBSUYyIERBQyBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTI4MyAgLSBBSUYyIERBQyBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTUgKi8KKwl7IDB4RjgwMCwgMHhGODAwLCAweDAwMDAgfSwgLyogUjEyOTYgIC0gQUlGMiBBREMgRmlsdGVycyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxMSAqLworCXsgMHgwMkI2LCAweDAyQjYsIDB4MDAwMCB9LCAvKiBSMTMxMiAgLSBBSUYyIERBQyBGaWx0ZXJzICgxKSAqLworCXsgMHgzRjAwLCAweDNGMDAsIDB4MDAwMCB9LCAvKiBSMTMxMyAgLSBBSUYyIERBQyBGaWx0ZXJzICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0MyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTM0NCAgLSBBSUYyIERSQyAoMSkgKi8KKwl7IDB4MUZGRiwgMHgxRkZGLCAweDAwMDAgfSwgLyogUjEzNDUgIC0gQUlGMiBEUkMgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMzQ2ICAtIEFJRjIgRFJDICgzKSAqLworCXsgMHgwN0ZGLCAweDA3RkYsIDB4MDAwMCB9LCAvKiBSMTM0NyAgLSBBSUYyIERSQyAoNCkgKi8KKwl7IDB4MDNGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjEzNDggIC0gQUlGMiBEUkMgKDUpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDA3ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDA4ICAtIEFJRjIgRVEgR2FpbnMgKDEpICovCisJeyAweEZGQzAsIDB4RkZDMCwgMHgwMDAwIH0sIC8qIFIxNDA5ICAtIEFJRjIgRVEgR2FpbnMgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDEwICAtIEFJRjIgRVEgQmFuZCAxIEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTEgIC0gQUlGMiBFUSBCYW5kIDEgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxMiAgLSBBSUYyIEVRIEJhbmQgMSBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxMyAgLSBBSUYyIEVRIEJhbmQgMiBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDE0ICAtIEFJRjIgRVEgQmFuZCAyIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTUgIC0gQUlGMiBFUSBCYW5kIDIgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxNiAgLSBBSUYyIEVRIEJhbmQgMiBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxNyAgLSBBSUYyIEVRIEJhbmQgMyBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDE4ICAtIEFJRjIgRVEgQmFuZCAzIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTkgIC0gQUlGMiBFUSBCYW5kIDMgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyMCAgLSBBSUYyIEVRIEJhbmQgMyBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyMSAgLSBBSUYyIEVRIEJhbmQgNCBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDIyICAtIEFJRjIgRVEgQmFuZCA0IEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjMgIC0gQUlGMiBFUSBCYW5kIDQgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyNCAgLSBBSUYyIEVRIEJhbmQgNCBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyNSAgLSBBSUYyIEVRIEJhbmQgNSBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDI2ICAtIEFJRjIgRVEgQmFuZCA1IEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjcgIC0gQUlGMiBFUSBCYW5kIDUgUEcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MzUgKi8KKwl7IDB4MDFFRiwgMHgwMUVGLCAweDAwMDAgfSwgLyogUjE1MzYgIC0gREFDMSBNaXhlciBWb2x1bWVzICovCisJeyAweDAwMzcsIDB4MDAzNywgMHgwMDAwIH0sIC8qIFIxNTM3ICAtIERBQzEgTGVmdCBNaXhlciBSb3V0aW5nICovCisJeyAweDAwMzcsIDB4MDAzNywgMHgwMDAwIH0sIC8qIFIxNTM4ICAtIERBQzEgUmlnaHQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMUVGLCAweDAxRUYsIDB4MDAwMCB9LCAvKiBSMTUzOSAgLSBEQUMyIE1peGVyIFZvbHVtZXMgKi8KKwl7IDB4MDAzNywgMHgwMDM3LCAweDAwMDAgfSwgLyogUjE1NDAgIC0gREFDMiBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAzNywgMHgwMDM3LCAweDAwMDAgfSwgLyogUjE1NDEgIC0gREFDMiBSaWdodCBNaXhlciBSb3V0aW5nICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFIxNTQyICAtIEFJRjEgQURDMSBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjE1NDMgIC0gQUlGMSBBREMxIFJpZ2h0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjE1NDQgIC0gQUlGMSBBREMyIExlZnQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSMTU0NSAgLSBBSUYxIEFEQzIgUmlnaHQgbWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1MSAqLworCXsgMHgwMkZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSMTU1MiAgLSBEQUMxIExlZnQgVm9sdW1lICovCisJeyAweDAyRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFIxNTUzICAtIERBQzEgUmlnaHQgVm9sdW1lICovCisJeyAweDAyRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFIxNTU0ICAtIERBQzIgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDJGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjE1NTUgIC0gREFDMiBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjE1NTYgIC0gREFDIFNvZnRtdXRlICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTY3ICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFIxNTY4ICAtIE92ZXJzYW1wbGluZyAqLworCXsgMHgwM0MzLCAweDAzQzMsIDB4MDAwMCB9LCAvKiBSMTU2OSAgLSBTaWRldG9uZSAqLworfTsKKworc3RhdGljIGludCB3bTg5OTRfcmVhZGFibGUodW5zaWduZWQgaW50IHJlZykKK3sKKwlpZiAocmVnID49IEFSUkFZX1NJWkUoYWNjZXNzX21hc2tzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGFjY2Vzc19tYXNrc1tyZWddLnJlYWRhYmxlICE9IDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3ZvbGF0aWxlKHVuc2lnbmVkIGludCByZWcpCit7CisJaWYgKHJlZyA+PSBXTTg5OTRfUkVHX0NBQ0hFX1NJWkUpCisJCXJldHVybiAxOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFdNODk5NF9TT0ZUV0FSRV9SRVNFVDoKKwljYXNlIFdNODk5NF9DSElQX1JFVklTSU9OOgorCWNhc2UgV004OTk0X0RDX1NFUlZPXzE6CisJY2FzZSBXTTg5OTRfRENfU0VSVk9fUkVBREJBQ0s6CisJY2FzZSBXTTg5OTRfUkFURV9TVEFUVVM6CisJY2FzZSBXTTg5OTRfTERPXzE6CisJY2FzZSBXTTg5OTRfTERPXzI6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCB3bTg5OTRfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlCVUdfT04ocmVnID4gV004OTk0X01BWF9SRUdJU1RFUik7CisKKwlpZiAoIXdtODk5NF92b2xhdGlsZShyZWcpKQorCQl3bTg5OTQtPnJlZ19jYWNoZVtyZWddID0gdmFsdWU7CisKKwlyZXR1cm4gd204OTk0X3JlZ193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB3bTg5OTRfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwlCVUdfT04ocmVnID4gV004OTk0X01BWF9SRUdJU1RFUik7CisKKwlpZiAod204OTk0X3ZvbGF0aWxlKHJlZykpCisJCXJldHVybiB3bTg5OTRfcmVnX3JlYWQoY29kZWMtPmNvbnRyb2xfZGF0YSwgcmVnKTsKKwllbHNlCisJCXJldHVybiByZWdfY2FjaGVbcmVnXTsKK30KKworc3RhdGljIGludCBjb25maWd1cmVfYWlmX2Nsb2NrKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGFpZikKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJhdGU7CisJaW50IHJlZzEgPSAwOworCWludCBvZmZzZXQ7CisKKwlpZiAoYWlmKQorCQlvZmZzZXQgPSA0OworCWVsc2UKKwkJb2Zmc2V0ID0gMDsKKworCXN3aXRjaCAod204OTk0LT5zeXNjbGtbYWlmXSkgeworCWNhc2UgV004OTk0X1NZU0NMS19NQ0xLMToKKwkJcmF0ZSA9IHdtODk5NC0+bWNsa1swXTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODk5NF9TWVNDTEtfTUNMSzI6CisJCXJlZzEgfD0gMHg4OworCQlyYXRlID0gd204OTk0LT5tY2xrWzFdOworCQlicmVhazsKKworCWNhc2UgV004OTk0X1NZU0NMS19GTEwxOgorCQlyZWcxIHw9IDB4MTA7CisJCXJhdGUgPSB3bTg5OTQtPmZsbFswXS5vdXQ7CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTRfU1lTQ0xLX0ZMTDI6CisJCXJlZzEgfD0gMHgxODsKKwkJcmF0ZSA9IHdtODk5NC0+ZmxsWzFdLm91dDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocmF0ZSA+PSAxMzUwMDAwMCkgeworCQlyYXRlIC89IDI7CisJCXJlZzEgfD0gV004OTk0X0FJRjFDTEtfRElWOworCisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRpdmlkaW5nIEFJRiVkIGNsb2NrIHRvICVkSHpcbiIsCisJCQlhaWYgKyAxLCByYXRlKTsKKwl9CisJd204OTk0LT5haWZjbGtbYWlmXSA9IHJhdGU7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xICsgb2Zmc2V0LAorCQkJICAgIFdNODk5NF9BSUYxQ0xLX1NSQ19NQVNLIHwgV004OTk0X0FJRjFDTEtfRElWLAorCQkJICAgIHJlZzEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2Nsb2NrKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IG9sZCwgbmV3OworCisJLyogQnJpbmcgdXAgdGhlIEFJRiBjbG9ja3MgZmlyc3QgKi8KKwljb25maWd1cmVfYWlmX2Nsb2NrKGNvZGVjLCAwKTsKKwljb25maWd1cmVfYWlmX2Nsb2NrKGNvZGVjLCAxKTsKKworCS8qIFRoZW4gc3dpdGNoIENMS19TWVMgb3ZlciB0byB0aGUgaGlnaGVyIG9mIHRoZW07IGEgY2hhbmdlCisJICogY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgY2xvY2tpbmcgY2hhbmdlIHdoaWNoIGNhbgorCSAqIG9ubHkgYmUgbWFkZSBvdXRzaWRlIG9mIERBUE0gc28gd2UgY2FuIHNhZmVseSByZWRvIHRoZQorCSAqIGNsb2NraW5nLgorCSAqLworCisJLyogSWYgdGhleSdyZSBlcXVhbCBpdCBkb2Vzbid0IG1hdHRlciB3aGljaCBpcyB1c2VkICovCisJaWYgKHdtODk5NC0+YWlmY2xrWzBdID09IHdtODk5NC0+YWlmY2xrWzFdKQorCQlyZXR1cm4gMDsKKworCWlmICh3bTg5OTQtPmFpZmNsa1swXSA8IHdtODk5NC0+YWlmY2xrWzFdKQorCQluZXcgPSBXTTg5OTRfU1lTQ0xLX1NSQzsKKwllbHNlCisJCW5ldyA9IDA7CisKKwlvbGQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9DTE9DS0lOR18xKSAmIFdNODk5NF9TWVNDTEtfU1JDOworCisJLyogSWYgdGhlcmUncyBubyBjaGFuZ2UgdGhlbiB3ZSdyZSBkb25lLiAqLworCWlmIChvbGQgPT0gbmV3KQorCQlyZXR1cm4gMDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9DTE9DS0lOR18xLCBXTTg5OTRfU1lTQ0xLX1NSQywgbmV3KTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX2Nsa19zeXMoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNvdXJjZSwKKwkJCSBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc2luaykKK3sKKwlpbnQgcmVnID0gc25kX3NvY19yZWFkKHNvdXJjZS0+Y29kZWMsIFdNODk5NF9DTE9DS0lOR18xKTsKKwljb25zdCBjaGFyICpjbGs7CisKKwkvKiBDaGVjayB3aGF0IHdlJ3JlIGN1cnJlbnRseSB1c2luZyBmb3IgQ0xLX1NZUyAqLworCWlmIChyZWcgJiBXTTg5OTRfU1lTQ0xLX1NSQykKKwkJY2xrID0gIkFJRjJDTEsiOworCWVsc2UKKwkJY2xrID0gIkFJRjFDTEsiOworCisJcmV0dXJuIHN0cmNtcChzb3VyY2UtPm5hbWUsIGNsaykgPT0gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNpZGV0b25lX2hwZl90ZXh0W10gPSB7CisJIjIuN2tIeiIsICIxLjM1a0h6IiwgIjY3NUh6IiwgIjM3MEh6IiwgIjE4MEh6IiwgIjkwSHoiLCAiNDVIeiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc2lkZXRvbmVfaHBmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1NJREVUT05FLCA3LCA3LCBzaWRldG9uZV9ocGZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShhaWZfdGx2LCAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRpZ2l0YWxfdGx2LCAtNzIwMCwgNzUsIDEpOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHN0X3RsdiwgLTM2MDAsIDMwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204OTk0XzNkX3RsdiwgLTE2MDAsIDE4MywgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZXFfdGx2LCAtMTIwMCwgMTAwLCAwKTsKKworI2RlZmluZSBXTTg5OTRfRFJDX1NXSVRDSCh4bmFtZSwgcmVnLCBzaGlmdCkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3LCAuZ2V0ID0gc25kX3NvY19nZXRfdm9sc3csXAorCS5wdXQgPSB3bTg5OTRfcHV0X2RyY19zdywgXAorCS5wcml2YXRlX3ZhbHVlID0gIFNPQ19TSU5HTEVfVkFMVUUocmVnLCBzaGlmdCwgMSwgMCkgfQorCitzdGF0aWMgaW50IHdtODk5NF9wdXRfZHJjX3N3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgbWFzaywgcmV0OworCisJLyogQ2FuJ3QgZW5hYmxlIGJvdGggQURDIGFuZCBEQUMgcGF0aHMgc2ltdWx0YW5lb3VzbHkgKi8KKwlpZiAobWMtPnNoaWZ0ID09IFdNODk5NF9BSUYxREFDMV9EUkNfRU5BX1NISUZUKQorCQltYXNrID0gV004OTk0X0FJRjFBREMxTF9EUkNfRU5BX01BU0sgfAorCQkJV004OTk0X0FJRjFBREMxUl9EUkNfRU5BX01BU0s7CisJZWxzZQorCQltYXNrID0gV004OTk0X0FJRjFEQUMxX0RSQ19FTkFfTUFTSzsKKworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgbWMtPnJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJldCAmIG1hc2spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNuZF9zb2NfcHV0X3ZvbHN3KGtjb250cm9sLCB1Y29udHJvbCk7Cit9CisKKworCitzdGF0aWMgdm9pZCB3bTg5OTRfc2V0X2RyYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBkcmMpCit7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgYmFzZSA9IHdtODk5NF9kcmNfYmFzZVtkcmNdOworCWludCBjZmcgPSB3bTg5OTQtPmRyY19jZmdbZHJjXTsKKwlpbnQgc2F2ZSwgaTsKKworCS8qIFNhdmUgYW55IGVuYWJsZXM7IHRoZSBjb25maWd1cmF0aW9uIHNob3VsZCBjbGVhciB0aGVtLiAqLworCXNhdmUgPSBzbmRfc29jX3JlYWQoY29kZWMsIGJhc2UpOworCXNhdmUgJj0gV004OTk0X0FJRjFEQUMxX0RSQ19FTkEgfCBXTTg5OTRfQUlGMUFEQzFMX0RSQ19FTkEgfAorCQlXTTg5OTRfQUlGMUFEQzFSX0RSQ19FTkE7CisKKwlmb3IgKGkgPSAwOyBpIDwgV004OTk0X0RSQ19SRUdTOyBpKyspCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGJhc2UgKyBpLCAweGZmZmYsCisJCQkJICAgIHBkYXRhLT5kcmNfY2Znc1tjZmddLnJlZ3NbaV0pOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmFzZSwgV004OTk0X0FJRjFEQUMxX0RSQ19FTkEgfAorCQkJICAgICBXTTg5OTRfQUlGMUFEQzFMX0RSQ19FTkEgfAorCQkJICAgICBXTTg5OTRfQUlGMUFEQzFSX0RSQ19FTkEsIHNhdmUpOworfQorCisvKiBJY2t5IGFzIGhlbGwgYnV0IHNhdmVzIGNvZGUgZHVwbGljYXRpb24gKi8KK3N0YXRpYyBpbnQgd204OTk0X2dldF9kcmMoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoc3RyY21wKG5hbWUsICJBSUYxRFJDMSBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cmNtcChuYW1lLCAiQUlGMURSQzIgTW9kZSIpID09IDApCisJCXJldHVybiAxOworCWlmIChzdHJjbXAobmFtZSwgIkFJRjJEUkMgTW9kZSIpID09IDApCisJCXJldHVybiAyOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHdtODk5NF9wdXRfZHJjX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsJCisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOworCWludCBkcmMgPSB3bTg5OTRfZ2V0X2RyYyhrY29udHJvbC0+aWQubmFtZSk7CisJaW50IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoZHJjIDwgMCkKKwkJcmV0dXJuIGRyYzsKKworCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX2RyY19jZmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtODk5NC0+ZHJjX2NmZ1tkcmNdID0gdmFsdWU7CisKKwl3bTg5OTRfc2V0X2RyYyhjb2RlYywgZHJjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9nZXRfZHJjX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgZHJjID0gd204OTk0X2dldF9kcmMoa2NvbnRyb2wtPmlkLm5hbWUpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODk5NC0+ZHJjX2NmZ1tkcmNdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk5NF9zZXRfcmV0dW5lX21vYmlsZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBibG9jaykKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOworCWludCBiYXNlID0gd204OTk0X3JldHVuZV9tb2JpbGVfYmFzZVtibG9ja107CisJaW50IGlmYWNlLCBiZXN0LCBiZXN0X3ZhbCwgc2F2ZSwgaSwgY2ZnOworCisJaWYgKCFwZGF0YSB8fCAhd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cykKKwkJcmV0dXJuOworCisJc3dpdGNoIChibG9jaykgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCWlmYWNlID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZmFjZSA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwkvKiBGaW5kIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29uZmlndXJhdGlvbgorCSAqIHdpdGggdGhlIG5lYXJlc3Qgc2FtcGxlIHJhdGUuICovCisJY2ZnID0gd204OTk0LT5yZXR1bmVfbW9iaWxlX2NmZ1tibG9ja107CisJYmVzdCA9IDA7CisJYmVzdF92YWwgPSBJTlRfTUFYOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZnczsgaSsrKSB7CisJCWlmIChzdHJjbXAocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5uYW1lLAorCQkJICAgd204OTk0LT5yZXR1bmVfbW9iaWxlX3RleHRzW2NmZ10pID09IDAgJiYKKwkJICAgIGFicyhwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLnJhdGUKKwkJCS0gd204OTk0LT5kYWNfcmF0ZXNbaWZhY2VdKSA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gYWJzKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ucmF0ZQorCQkJCSAgICAgICAtIHdtODk5NC0+ZGFjX3JhdGVzW2lmYWNlXSk7CisJCX0KKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJSZVR1bmUgTW9iaWxlICVkICVzLyVkSHogZm9yICVkSHogc2FtcGxlIHJhdGVcbiIsCisJCWJsb2NrLAorCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLm5hbWUsCisJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ucmF0ZSwKKwkJd204OTk0LT5kYWNfcmF0ZXNbaWZhY2VdKTsKKworCS8qIFRoZSBFUSB3aWxsIGJlIGRpc2FibGVkIHdoaWxlIHJlY29uZmlndXJpbmcgaXQsIHJlbWVtYmVyIHRoZQorCSAqIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gCisJICovCisJc2F2ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgYmFzZSk7CisJc2F2ZSAmPSBXTTg5OTRfQUlGMURBQzFfRVFfRU5BOworCisJZm9yIChpID0gMDsgaSA8IFdNODk5NF9FUV9SRUdTOyBpKyspCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGJhc2UgKyBpLCAweGZmZmYsCisJCQkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5yZWdzW2ldKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGJhc2UsIFdNODk5NF9BSUYxREFDMV9FUV9FTkEsIHNhdmUpOworfQorCisvKiBJY2t5IGFzIGhlbGwgYnV0IHNhdmVzIGNvZGUgZHVwbGljYXRpb24gKi8KK3N0YXRpYyBpbnQgd204OTk0X2dldF9yZXR1bmVfbW9iaWxlX2Jsb2NrKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKHN0cmNtcChuYW1lLCAiQUlGMS4xIEVRIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RyY21wKG5hbWUsICJBSUYxLjIgRVEgTW9kZSIpID09IDApCisJCXJldHVybiAxOworCWlmIChzdHJjbXAobmFtZSwgIkFJRjIgRVEgTW9kZSIpID09IDApCisJCXJldHVybiAyOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHdtODk5NF9wdXRfcmV0dW5lX21vYmlsZV9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsJCisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOworCWludCBibG9jayA9IHdtODk5NF9nZXRfcmV0dW5lX21vYmlsZV9ibG9jayhrY29udHJvbC0+aWQubmFtZSk7CisJaW50IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoYmxvY2sgPCAwKQorCQlyZXR1cm4gYmxvY2s7CisKKwlpZiAodmFsdWUgPj0gcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTk0LT5yZXR1bmVfbW9iaWxlX2NmZ1tibG9ja10gPSB2YWx1ZTsKKworCXdtODk5NF9zZXRfcmV0dW5lX21vYmlsZShjb2RlYywgYmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2dldF9yZXR1bmVfbW9iaWxlX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBibG9jayA9IHdtODk5NF9nZXRfcmV0dW5lX21vYmlsZV9ibG9jayhrY29udHJvbC0+aWQubmFtZSk7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTk0LT5yZXR1bmVfbW9iaWxlX2NmZ1tibG9ja107CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5NF9zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19ET1VCTEVfUl9UTFYoIkFJRjFBREMxIFZvbHVtZSIsIFdNODk5NF9BSUYxX0FEQzFfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTRfQUlGMV9BREMxX1JJR0hUX1ZPTFVNRSwKKwkJIDEsIDExOSwgMCwgZGlnaXRhbF90bHYpLAorU09DX0RPVUJMRV9SX1RMVigiQUlGMUFEQzIgVm9sdW1lIiwgV004OTk0X0FJRjFfQURDMl9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9BSUYxX0FEQzJfUklHSFRfVk9MVU1FLAorCQkgMSwgMTE5LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJBSUYyQURDIFZvbHVtZSIsIFdNODk5NF9BSUYyX0FEQ19MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9BSUYyX0FEQ19SSUdIVF9WT0xVTUUsCisJCSAxLCAxMTksIDAsIGRpZ2l0YWxfdGx2KSwKKworU09DX0RPVUJMRV9SX1RMVigiQUlGMURBQzEgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9BSUYxX0RBQzFfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorU09DX0RPVUJMRV9SX1RMVigiQUlGMURBQzIgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMl9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9BSUYxX0RBQzJfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorU09DX0RPVUJMRV9SX1RMVigiQUlGMkRBQyBWb2x1bWUiLCBXTTg5OTRfQUlGMl9EQUNfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTRfQUlGMl9EQUNfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiQUlGMSBCb29zdCBWb2x1bWUiLCBXTTg5OTRfQUlGMV9DT05UUk9MXzIsIDEwLCAzLCAwLCBhaWZfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYyIEJvb3N0IFZvbHVtZSIsIFdNODk5NF9BSUYyX0NPTlRST0xfMiwgMTAsIDMsIDAsIGFpZl90bHYpLAorCitTT0NfU0lOR0xFKCJBSUYxREFDMSBFUSBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzEsIDAsIDEsIDApLAorU09DX1NJTkdMRSgiQUlGMURBQzIgRVEgU3dpdGNoIiwgV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18xLCAwLCAxLCAwKSwKK1NPQ19TSU5HTEUoIkFJRjIgRVEgU3dpdGNoIiwgV004OTk0X0FJRjJfRVFfR0FJTlNfMSwgMCwgMSwgMCksCisKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYxREFDMSBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjFfRFJDMV8xLCAyKSwKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYxQURDMUwgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RSQzFfMSwgMSksCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMUFEQzFSIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EUkMxXzEsIDApLAorCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMURBQzIgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RSQzJfMSwgMiksCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMUFEQzJMIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EUkMyXzEsIDEpLAorV004OTk0X0RSQ19TV0lUQ0goIkFJRjFBREMyUiBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjFfRFJDMl8xLCAwKSwKKworV004OTk0X0RSQ19TV0lUQ0goIkFJRjJEQUMgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYyX0RSQ18xLCAyKSwKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYyQURDTCBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjJfRFJDXzEsIDEpLAorV004OTk0X0RSQ19TV0lUQ0goIkFJRjJBRENSIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMl9EUkNfMSwgMCksCisKK1NPQ19TSU5HTEVfVExWKCJEQUMxIFJpZ2h0IFNpZGV0b25lIFZvbHVtZSIsIFdNODk5NF9EQUMxX01JWEVSX1ZPTFVNRVMsCisJICAgICAgIDUsIDEyLCAwLCBzdF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkRBQzEgTGVmdCBTaWRldG9uZSBWb2x1bWUiLCBXTTg5OTRfREFDMV9NSVhFUl9WT0xVTUVTLAorCSAgICAgICAwLCAxMiwgMCwgc3RfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEQUMyIFJpZ2h0IFNpZGV0b25lIFZvbHVtZSIsIFdNODk5NF9EQUMyX01JWEVSX1ZPTFVNRVMsCisJICAgICAgIDUsIDEyLCAwLCBzdF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkRBQzIgTGVmdCBTaWRldG9uZSBWb2x1bWUiLCBXTTg5OTRfREFDMl9NSVhFUl9WT0xVTUVTLAorCSAgICAgICAwLCAxMiwgMCwgc3RfdGx2KSwKK1NPQ19FTlVNKCJTaWRldG9uZSBIUEYgTXV4Iiwgc2lkZXRvbmVfaHBmKSwKK1NPQ19TSU5HTEUoIlNpZGV0b25lIEhQRiBTd2l0Y2giLCBXTTg5OTRfU0lERVRPTkUsIDYsIDEsIDApLAorCitTT0NfRE9VQkxFX1JfVExWKCJEQUMxIFZvbHVtZSIsIFdNODk5NF9EQUMxX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0RBQzFfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorU09DX0RPVUJMRV9SKCJEQUMxIFN3aXRjaCIsIFdNODk5NF9EQUMxX0xFRlRfVk9MVU1FLAorCSAgICAgV004OTk0X0RBQzFfUklHSFRfVk9MVU1FLCA5LCAxLCAxKSwKKworU09DX0RPVUJMRV9SX1RMVigiREFDMiBWb2x1bWUiLCBXTTg5OTRfREFDMl9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9EQUMyX1JJR0hUX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUigiREFDMiBTd2l0Y2giLCBXTTg5OTRfREFDMl9MRUZUX1ZPTFVNRSwKKwkgICAgIFdNODk5NF9EQUMyX1JJR0hUX1ZPTFVNRSwgOSwgMSwgMSksCisKK1NPQ19TSU5HTEVfVExWKCJTUEtMIERBQzIgVm9sdW1lIiwgV004OTk0X1NQS01JWExfQVRURU5VQVRJT04sCisJICAgICAgIDYsIDEsIDEsIHdtX2h1YnNfc3BrbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiU1BLTCBEQUMxIFZvbHVtZSIsIFdNODk5NF9TUEtNSVhMX0FUVEVOVUFUSU9OLAorCSAgICAgICAyLCAxLCAxLCB3bV9odWJzX3Nwa21peF90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiU1BLUiBEQUMyIFZvbHVtZSIsIFdNODk5NF9TUEtNSVhSX0FUVEVOVUFUSU9OLAorCSAgICAgICA2LCAxLCAxLCB3bV9odWJzX3Nwa21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlNQS1IgREFDMSBWb2x1bWUiLCBXTTg5OTRfU1BLTUlYUl9BVFRFTlVBVElPTiwKKwkgICAgICAgMiwgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMxIDNEIFN0ZXJlbyBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0ZJTFRFUlNfMiwKKwkgICAgICAgMTAsIDE1LCAwLCB3bTg5OTRfM2RfdGx2KSwKK1NPQ19TSU5HTEUoIkFJRjFEQUMxIDNEIFN0ZXJlbyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKKwkgICA4LCAxLCAwKSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMiAzRCBTdGVyZW8gVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMl9GSUxURVJTXzIsCisJICAgICAgIDEwLCAxNSwgMCwgd204OTk0XzNkX3RsdiksCitTT0NfU0lOR0xFKCJBSUYxREFDMiAzRCBTdGVyZW8gU3dpdGNoIiwgV004OTk0X0FJRjFfREFDMl9GSUxURVJTXzIsCisJICAgOCwgMSwgMCksCitTT0NfU0lOR0xFX1RMVigiQUlGMkRBQyAzRCBTdGVyZW8gVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9GSUxURVJTXzIsCisJICAgICAgIDEwLCAxNSwgMCwgd204OTk0XzNkX3RsdiksCitTT0NfU0lOR0xFKCJBSUYyREFDIDNEIFN0ZXJlbyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMiwKKwkgICA4LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTRfZXFfY29udHJvbHNbXSA9IHsKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMSBFUTEgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18xLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzEgRVEyIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMSwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzEgRVEzIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMSwgMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzEgRVE0IFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMiwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMxIEVRNSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzIsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzIgRVExIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMSwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMyIEVRMiBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzEsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMyIEVRMyBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzEsIDEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMyIEVRNCBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzIsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMiBFUTUgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18yLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIkFJRjIgRVExIFZvbHVtZSIsIFdNODk5NF9BSUYyX0VRX0dBSU5TXzEsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYyIEVRMiBWb2x1bWUiLCBXTTg5OTRfQUlGMl9FUV9HQUlOU18xLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYyIEVRMyBWb2x1bWUiLCBXTTg5OTRfQUlGMl9FUV9HQUlOU18xLCAxLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYyIEVRNCBWb2x1bWUiLCBXTTg5OTRfQUlGMl9FUV9HQUlOU18yLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMiBFUTUgVm9sdW1lIiwgV004OTk0X0FJRjJfRVFfR0FJTlNfMiwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCit9OworCitzdGF0aWMgaW50IGNsa19zeXNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlyZXR1cm4gY29uZmlndXJlX2Nsb2NrKGNvZGVjKTsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQljb25maWd1cmVfY2xvY2soY29kZWMpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd204OTk0X3VwZGF0ZV9jbGFzc193KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgZW5hYmxlID0gMTsKKwlpbnQgc291cmNlID0gMDsgIC8qIEdDQyBmbG93IGFuYWx5c2lzIGNhbid0IHRyYWNrIGVuYWJsZSAqLworCWludCByZWcsIHJlZ19yOworCisJLyogT25seSBzdXBwb3J0IGRpcmVjdCBEQUMtPmhlYWRwaG9uZSBwYXRocyAqLworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X09VVFBVVF9NSVhFUl8xKTsKKwlpZiAoIShyZWcgJiBXTTg5OTRfREFDMUxfVE9fSFBPVVQxTCkpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiSFBMIGNvbm5lY3RlZCB0byBvdXRwdXQgbWl4ZXJcbiIpOworCQllbmFibGUgPSAwOworCX0KKworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X09VVFBVVF9NSVhFUl8yKTsKKwlpZiAoIShyZWcgJiBXTTg5OTRfREFDMVJfVE9fSFBPVVQxUikpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiSFBSIGNvbm5lY3RlZCB0byBvdXRwdXQgbWl4ZXJcbiIpOworCQllbmFibGUgPSAwOworCX0KKworCS8qIFdlIGFsc28gbmVlZCB0aGUgc2FtZSBzZXR0aW5nIGZvciBML1IgYW5kIG9ubHkgb25lIHBhdGggKi8KKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9EQUMxX0xFRlRfTUlYRVJfUk9VVElORyk7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFdNODk5NF9BSUYyREFDTF9UT19EQUMxTDoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2xhc3MgVyBzb3VyY2UgQUlGMkRBQ1xuIik7CisJCXNvdXJjZSA9IDIgPDwgV004OTk0X0NQX0RZTl9TUkNfU0VMX1NISUZUOworCQlicmVhazsKKwljYXNlIFdNODk5NF9BSUYxREFDMkxfVE9fREFDMUw6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkNsYXNzIFcgc291cmNlIEFJRjFEQUMyXG4iKTsKKwkJc291cmNlID0gMSA8PCBXTTg5OTRfQ1BfRFlOX1NSQ19TRUxfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgV004OTk0X0FJRjFEQUMxTF9UT19EQUMxTDoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2xhc3MgVyBzb3VyY2UgQUlGMURBQzFcbiIpOworCQlzb3VyY2UgPSAwIDw8IFdNODk5NF9DUF9EWU5fU1JDX1NFTF9TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiREFDIG1peGVyIHNldHRpbmc6ICV4XG4iLCByZWcpOworCQllbmFibGUgPSAwOworCQlicmVhazsKKwl9CisKKwlyZWdfciA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORyk7CisJaWYgKHJlZ19yICE9IHJlZykgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJMZWZ0IGFuZCByaWdodCBEQUMgbWl4ZXJzIGRpZmZlcmVudFxuIik7CisJCWVuYWJsZSA9IDA7CisJfQorCisJaWYgKGVuYWJsZSkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDbGFzcyBXIGVuYWJsZWRcbiIpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQ0xBU1NfV18xLAorCQkJCSAgICBXTTg5OTRfQ1BfRFlOX1BXUiB8CisJCQkJICAgIFdNODk5NF9DUF9EWU5fU1JDX1NFTF9NQVNLLAorCQkJCSAgICBzb3VyY2UgfCBXTTg5OTRfQ1BfRFlOX1BXUik7CisJCQorCX0gZWxzZSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkNsYXNzIFcgZGlzYWJsZWRcbiIpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQ0xBU1NfV18xLAorCQkJCSAgICBXTTg5OTRfQ1BfRFlOX1BXUiwgMCk7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqaHBfbXV4X3RleHRbXSA9IHsKKwkiTWl4ZXIiLAorCSJEQUMiLAorfTsKKworI2RlZmluZSBXTTg5OTRfSFBfRU5VTSh4bmFtZSwgeGVudW0pIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb19lbnVtX2RvdWJsZSwgXAorIAkuZ2V0ID0gc25kX3NvY19kYXBtX2dldF9lbnVtX2RvdWJsZSwgXAorIAkucHV0ID0gd204OTk0X3B1dF9ocF9lbnVtLCBcCisgIAkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSZ4ZW51bSB9CisKK3N0YXRpYyBpbnQgd204OTk0X3B1dF9ocF9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFwbV9wdXRfZW51bV9kb3VibGUoa2NvbnRyb2wsIHVjb250cm9sKTsKKworCXdtODk5NF91cGRhdGVfY2xhc3Nfdyhjb2RlYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGhwbF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X09VVFBVVF9NSVhFUl8xLCA4LCAyLCBocF9tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBocGxfbXV4ID0KKwlXTTg5OTRfSFBfRU5VTSgiTGVmdCBIZWFkcGhvbmUgTXV4IiwgaHBsX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGhwcl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X09VVFBVVF9NSVhFUl8yLCA4LCAyLCBocF9tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBocHJfbXV4ID0KKwlXTTg5OTRfSFBfRU5VTSgiUmlnaHQgSGVhZHBob25lIE11eCIsIGhwcl9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFkY19tdXhfdGV4dFtdID0geworCSJBREMiLAorCSJETUlDIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWRjX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRSgwLCAwLCAyLCBhZGNfbXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWRjbF9tdXggPQorCVNPQ19EQVBNX0VOVU1fVklSVCgiQURDTCBNdXgiLCBhZGNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZGNyX211eCA9CisJU09DX0RBUE1fRU5VTV9WSVJUKCJBRENSIE11eCIsIGFkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxlZnRfc3BlYWtlcl9taXhlcltdID0geworU09DX0RBUE1fU0lOR0xFKCJEQUMyIFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCA5LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSW5wdXQgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDcsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjFMUCBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk91dHB1dCBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgMywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRBQzEgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDEsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJpZ2h0X3NwZWFrZXJfbWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiREFDMiBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklucHV0IFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCA2LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSU4xUlAgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJPdXRwdXQgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDIsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEQUMxIFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCAwLCAxLCAwKSwKK307CisKKy8qIERlYnVnZ2luZzsgZHVtcCBjaGlwIHN0YXR1cyBhZnRlciBEQVBNIHRyYW5zaXRpb25zICovCitzdGF0aWMgaW50IHBvc3RfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU1JDIHN0YXR1czogJXhcbiIsCisJCXNuZF9zb2NfcmVhZChjb2RlYywKKwkJCSAgICAgV004OTk0X1JBVEVfU1RBVFVTKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYxYWRjMWxfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkFEQy9ETUlDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0FEQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfQUlGMV9BREMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMWFkYzFyX21peFtdID0geworU09DX0RBUE1fU0lOR0xFKCJBREMvRE1JQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9BREMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYyIFN3aXRjaCIsIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMmRhYzJsX21peFtdID0geworU09DX0RBUE1fU0lOR0xFKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTUsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywKKwkJNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJRjIgU3dpdGNoIiwgV004OTk0X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkyLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMS4yIFN3aXRjaCIsIFdNODk5NF9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJRjEuMSBTd2l0Y2giLCBXTTg5OTRfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjJkYWMycl9taXhbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywKKwkJNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywKKwkJNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJRjIgU3dpdGNoIiwgV004OTk0X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJRjEuMiBTd2l0Y2giLCBXTTg5OTRfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMS4xIFN3aXRjaCIsIFdNODk5NF9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKworI2RlZmluZSBXTTg5OTRfQ0xBU1NfV19TV0lUQ0goeG5hbWUsIHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0KSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSBzbmRfc29jX2luZm9fdm9sc3csIFwKKwkuZ2V0ID0gc25kX3NvY19kYXBtX2dldF92b2xzdywgLnB1dCA9IHdtODk5NF9wdXRfY2xhc3NfdywgXAorCS5wcml2YXRlX3ZhbHVlID0gIFNPQ19TSU5HTEVfVkFMVUUocmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQpIH0KKworc3RhdGljIGludCB3bTg5OTRfcHV0X2NsYXNzX3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3NvY19kYXBtX3B1dF92b2xzdyhrY29udHJvbCwgdWNvbnRyb2wpOworCisJd204OTk0X3VwZGF0ZV9jbGFzc193KGNvZGVjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMxbF9taXhbXSA9IHsKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICA1LCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDQsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJBSUYyIFN3aXRjaCIsIFdNODk5NF9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJICAgICAgMiwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkFJRjEuMiBTd2l0Y2giLCBXTTg5OTRfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDEsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJBSUYxLjEgU3dpdGNoIiwgV004OTk0X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMxcl9taXhbXSA9IHsKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJICAgICAgNSwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJICAgICAgNCwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkFJRjIgU3dpdGNoIiwgV004OTk0X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJICAgICAgMiwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkFJRjEuMiBTd2l0Y2giLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICAxLCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiQUlGMS4xIFN3aXRjaCIsIFdNODk5NF9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNpZGV0b25lX3RleHRbXSA9IHsKKwkiQURDL0RNSUMxIiwgIkRNSUMyIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc2lkZXRvbmUxX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfU0lERVRPTkUsIDAsIDIsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2lkZXRvbmUxX211eCA9CisJU09DX0RBUE1fRU5VTSgiTGVmdCBTaWRldG9uZSBNdXgiLCBzaWRldG9uZTFfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc2lkZXRvbmUyX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfU0lERVRPTkUsIDEsIDIsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2lkZXRvbmUyX211eCA9CisJU09DX0RBUE1fRU5VTSgiUmlnaHQgU2lkZXRvbmUgTXV4Iiwgc2lkZXRvbmUyX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqYWlmMWRhY190ZXh0W10gPSB7CisJIkFJRjFEQUNEQVQiLCAiQUlGM0RBQ0RBVCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjFkYWNfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzYsIDAsIDIsIGFpZjFkYWNfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYxZGFjX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGMURBQyBNdXgiLCBhaWYxZGFjX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqYWlmMmRhY190ZXh0W10gPSB7CisJIkFJRjJEQUNEQVQiLCAiQUlGM0RBQ0RBVCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjJkYWNfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzYsIDEsIDIsIGFpZjJkYWNfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyZGFjX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGMkRBQyBNdXgiLCBhaWYyZGFjX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqYWlmMmFkY190ZXh0W10gPSB7CisJIkFJRjJBRENEQVQiLCAiQUlGM0RBQ0RBVCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjJhZGNfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzYsIDIsIDIsIGFpZjJhZGNfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyYWRjX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGMkFEQyBNdXgiLCBhaWYyYWRjX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqYWlmM2FkY190ZXh0W10gPSB7CisJIkFJRjFBRENEQVQiLCAiQUlGMkFEQ0RBVCIsICJBSUYyREFDREFUIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmM2FkY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiwgMywgMywgYWlmM2FkY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjNhZGNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUYzQURDIE11eCIsIGFpZjNhZGNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5OTRfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fSU5QVVQoIkRNSUMxREFUIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkRNSUMyREFUIiksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIkNMS19TWVMiLCBTTkRfU09DX05PUE0sIDAsIDAsIGNsa19zeXNfZXZlbnQsCisJCSAgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIkRTUDFDTEsiLCBXTTg5OTRfQ0xPQ0tJTkdfMSwgMywgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJEU1AyQ0xLIiwgV004OTk0X0NMT0NLSU5HXzEsIDIsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiRFNQSU5UQ0xLIiwgV004OTk0X0NMT0NLSU5HXzEsIDEsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJBSUYxQ0xLIiwgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSwgMCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJBSUYyQ0xLIiwgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSwgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMUwiLCAiQUlGMSBDYXB0dXJlIiwKKwkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA5LCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMVIiLCAiQUlGMSBDYXB0dXJlIiwKKwkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA4LCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUMxTCIsIE5VTEwsIDAsCisJCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCA5LCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUMxUiIsIE5VTEwsIDAsCisJCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCA4LCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyTCIsICJBSUYxIENhcHR1cmUiLAorCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDExLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMlIiLCAiQUlGMSBDYXB0dXJlIiwKKwkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxMCwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDMkwiLCBOVUxMLCAwLAorCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMTEsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQzJSIiwgTlVMTCwgMCwKKwkJICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEwLCAwKSwKKworU05EX1NPQ19EQVBNX01JWEVSKCJBSUYxQURDMUwgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGFpZjFhZGMxbF9taXgsIEFSUkFZX1NJWkUoYWlmMWFkYzFsX21peCkpLAorU05EX1NPQ19EQVBNX01JWEVSKCJBSUYxQURDMVIgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGFpZjFhZGMxcl9taXgsIEFSUkFZX1NJWkUoYWlmMWFkYzFyX21peCkpLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIkFJRjJEQUMyTCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgYWlmMmRhYzJsX21peCwgQVJSQVlfU0laRShhaWYyZGFjMmxfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkFJRjJEQUMyUiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgYWlmMmRhYzJyX21peCwgQVJSQVlfU0laRShhaWYyZGFjMnJfbWl4KSksCisKK1NORF9TT0NfREFQTV9NVVgoIkxlZnQgU2lkZXRvbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsICZzaWRldG9uZTFfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIlJpZ2h0IFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmc2lkZXRvbmUyX211eCksCisKK1NORF9TT0NfREFQTV9NSVhFUigiREFDMUwgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGRhYzFsX21peCwgQVJSQVlfU0laRShkYWMxbF9taXgpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiREFDMVIgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGRhYzFyX21peCwgQVJSQVlfU0laRShkYWMxcl9taXgpKSwKKworU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjJBRENMIiwgTlVMTCwgMCwKKwkJICAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxMywgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMkFEQ1IiLCBOVUxMLCAwLAorCQkgICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEyLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJEQUNMIiwgTlVMTCwgMCwKKwkJICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEzLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJEQUNSIiwgTlVMTCwgMCwKKwkJICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEyLCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQ0RBVCIsICJBSUYxIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJEQUNEQVQiLCAiQUlGMiBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMkFEQ0RBVCIsICJBSUYyIENhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJBSUYxREFDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZjFkYWNfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkFJRjJEQUMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMmRhY19tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiQUlGMkFEQyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWYyYWRjX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJBSUYzQURDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZjNhZGNfbXV4KSwKKworU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGM0RBQ0RBVCIsICJBSUYzIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjNBRENEQVQiLCAiQUlGMyBDYXB0dXJlIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiVE9DTEsiLCBXTTg5OTRfQ0xPQ0tJTkdfMSwgNCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9BREMoIkRNSUMyTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDUsIDApLAorU05EX1NPQ19EQVBNX0FEQygiRE1JQzJSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgNCwgMCksCitTTkRfU09DX0RBUE1fQURDKCJETUlDMUwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAzLCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkRNSUMxUiIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDIsIDApLAorCisvKiBQb3dlciBpcyBkb25lIHdpdGggdGhlIG11eGVzIHNpbmNlIHRoZSBBREMgcG93ZXIgYWxzbyBjb250cm9scyB0aGUKKyAqIGRvd25zYW1wbGluZyBjaGFpbiwgdGhlIGNoaXAgd2lsbCBhdXRvbWF0aWNhbGx5IG1hbmFnZSB0aGUgYW5hbG9ndWUKKyAqIHNwZWNpZmljIHBvcnRpb25zLgorICovCitTTkRfU09DX0RBUE1fQURDKCJBRENMIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAxLCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBTTkRfU09DX05PUE0sIDAsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJBRENMIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDAsICZhZGNsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJBRENSIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDAsIDAsICZhZGNyX211eCksCisKK1NORF9TT0NfREFQTV9EQUMoIkRBQzJMIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMywgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUMyUiIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDIsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDMUwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQzFSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkxlZnQgSGVhZHBob25lIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmhwbF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgSGVhZHBob25lIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmhwcl9tdXgpLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIlNQS0wiLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8zLCA4LCAwLAorCQkgICBsZWZ0X3NwZWFrZXJfbWl4ZXIsIEFSUkFZX1NJWkUobGVmdF9zcGVha2VyX21peGVyKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIlNQS1IiLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8zLCA5LCAwLAorCQkgICByaWdodF9zcGVha2VyX21peGVyLCBBUlJBWV9TSVpFKHJpZ2h0X3NwZWFrZXJfbWl4ZXIpKSwKKworU05EX1NPQ19EQVBNX1BPU1QoIkRlYnVnIGxvZyIsIHBvc3RfZXYpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKKworCXsgIkNMS19TWVMiLCBOVUxMLCAiQUlGMUNMSyIsIGNoZWNrX2Nsa19zeXMgfSwKKwl7ICJDTEtfU1lTIiwgTlVMTCwgIkFJRjJDTEsiLCBjaGVja19jbGtfc3lzIH0sCisKKwl7ICJEU1AxQ0xLIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiRFNQMkNMSyIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkRTUElOVENMSyIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiQUlGMUFEQzFMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMUFEQzFMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMUFEQzFSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMUFEQzFSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMUFEQzFSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkFJRjFEQUMxTCIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFEQUMxTCIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFEQUMxUiIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFEQUMxUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFEQUMxUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBSUYxQURDMkwiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxQURDMkwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxQURDMlIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxQURDMlIiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxQURDMlIiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQUlGMURBQzJMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMURBQzJMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMURBQzJSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMURBQzJSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMURBQzJSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkFJRjJBRENMIiwgTlVMTCwgIkFJRjJDTEsiIH0sCisJeyAiQUlGMkFEQ0wiLCBOVUxMLCAiRFNQMkNMSyIgfSwKKwl7ICJBSUYyQURDUiIsIE5VTEwsICJBSUYyQ0xLIiB9LAorCXsgIkFJRjJBRENSIiwgTlVMTCwgIkRTUDJDTEsiIH0sCisJeyAiQUlGMkFEQ1IiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQUlGMkRBQ0wiLCBOVUxMLCAiQUlGMkNMSyIgfSwKKwl7ICJBSUYyREFDTCIsIE5VTEwsICJEU1AyQ0xLIiB9LAorCXsgIkFJRjJEQUNSIiwgTlVMTCwgIkFJRjJDTEsiIH0sCisJeyAiQUlGMkRBQ1IiLCBOVUxMLCAiRFNQMkNMSyIgfSwKKwl7ICJBSUYyREFDUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJETUlDMUwiLCBOVUxMLCAiRE1JQzFEQVQiIH0sCisJeyAiRE1JQzFMIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiRE1JQzFSIiwgTlVMTCwgIkRNSUMxREFUIiB9LAorCXsgIkRNSUMxUiIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkRNSUMyTCIsIE5VTEwsICJETUlDMkRBVCIgfSwKKwl7ICJETUlDMkwiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJETUlDMlIiLCBOVUxMLCAiRE1JQzJEQVQiIH0sCisJeyAiRE1JQzJSIiwgTlVMTCwgIkNMS19TWVMiIH0sCisKKwl7ICJBRENMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQURDTCIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFEQ0wiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQURDUiIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBRENSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkFEQ0wgTXV4IiwgIkFEQyIsICJBRENMIiB9LAorCXsgIkFEQ0wgTXV4IiwgIkRNSUMiLCAiRE1JQzFMIiB9LAorCXsgIkFEQ1IgTXV4IiwgIkFEQyIsICJBRENSIiB9LAorCXsgIkFEQ1IgTXV4IiwgIkRNSUMiLCAiRE1JQzFSIiB9LAorCisJeyAiREFDMUwiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJEQUMxTCIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkRBQzFMIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkRBQzFSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiREFDMVIiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJEQUMxUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJEQUMyTCIsIE5VTEwsICJBSUYyQ0xLIiB9LAorCXsgIkRBQzJMIiwgTlVMTCwgIkRTUDJDTEsiIH0sCisJeyAiREFDMkwiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiREFDMlIiLCBOVUxMLCAiQUlGMkRBQ1IiIH0sCisJeyAiREFDMlIiLCBOVUxMLCAiQUlGMkNMSyIgfSwKKwl7ICJEQUMyUiIsIE5VTEwsICJEU1AyQ0xLIiB9LAorCXsgIkRBQzJSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIlRPQ0xLIiwgTlVMTCwgIkNMS19TWVMiIH0sCisKKwkvKiBBSUYxIG91dHB1dHMgKi8KKwl7ICJBSUYxQURDMUwiLCBOVUxMLCAiQUlGMUFEQzFMIE1peGVyIiB9LAorCXsgIkFJRjFBREMxTCBNaXhlciIsICJBREMvRE1JQyBTd2l0Y2giLCAiQURDTCBNdXgiIH0sCisJeyAiQUlGMUFEQzFMIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNMIiB9LAorCisJeyAiQUlGMUFEQzFSIiwgTlVMTCwgIkFJRjFBREMxUiBNaXhlciIgfSwKKwl7ICJBSUYxQURDMVIgTWl4ZXIiLCAiQURDL0RNSUMgU3dpdGNoIiwgIkFEQ1IgTXV4IiB9LAorCXsgIkFJRjFBREMxUiBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDUiIgfSwKKworCS8qIFBpbiBsZXZlbCByb3V0aW5nIGZvciBBSUYzICovCisJeyAiQUlGMURBQzFMIiwgTlVMTCwgIkFJRjFEQUMgTXV4IiB9LAorCXsgIkFJRjFEQUMxUiIsIE5VTEwsICJBSUYxREFDIE11eCIgfSwKKwl7ICJBSUYxREFDMkwiLCBOVUxMLCAiQUlGMURBQyBNdXgiIH0sCisJeyAiQUlGMURBQzJSIiwgTlVMTCwgIkFJRjFEQUMgTXV4IiB9LAorCisJeyAiQUlGMkRBQ0wiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCisJeyAiQUlGMkRBQ1IiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCisKKwl7ICJBSUYxREFDIE11eCIsICJBSUYxREFDREFUIiwgIkFJRjFEQUNEQVQiIH0sCisJeyAiQUlGMURBQyBNdXgiLCAiQUlGM0RBQ0RBVCIsICJBSUYzREFDREFUIiB9LAorCXsgIkFJRjJEQUMgTXV4IiwgIkFJRjJEQUNEQVQiLCAiQUlGMkRBQ0RBVCIgfSwKKwl7ICJBSUYyREFDIE11eCIsICJBSUYzREFDREFUIiwgIkFJRjNEQUNEQVQiIH0sCisJeyAiQUlGMkFEQyBNdXgiLCAiQUlGMkFEQ0RBVCIsICJBSUYyQURDTCIgfSwKKwl7ICJBSUYyQURDIE11eCIsICJBSUYyQURDREFUIiwgIkFJRjJBRENSIiB9LAorCXsgIkFJRjJBREMgTXV4IiwgIkFJRjNEQUNEQVQiLCAiQUlGM0FEQ0RBVCIgfSwKKworCS8qIERBQzEgaW5wdXRzICovCisJeyAiREFDMUwiLCBOVUxMLCAiREFDMUwgTWl4ZXIiIH0sCisJeyAiREFDMUwgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ0wiIH0sCisJeyAiREFDMUwgTWl4ZXIiLCAiQUlGMS4yIFN3aXRjaCIsICJBSUYxREFDMkwiIH0sCisJeyAiREFDMUwgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMUwiIH0sCisJeyAiREFDMUwgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisKKwl7ICJEQUMxUiIsIE5VTEwsICJEQUMxUiBNaXhlciIgfSwKKwl7ICJEQUMxUiBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDUiIgfSwKKwl7ICJEQUMxUiBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyUiIgfSwKKwl7ICJEQUMxUiBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxUiIgfSwKKwl7ICJEQUMxUiBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAorCXsgIkRBQzFSIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKKworCS8qIERBQzIvQUlGMiBvdXRwdXRzICAqLworCXsgIkFJRjJBRENMIiwgTlVMTCwgIkFJRjJEQUMyTCBNaXhlciIgfSwKKwl7ICJEQUMyTCIsIE5VTEwsICJBSUYyREFDMkwgTWl4ZXIiIH0sCisJeyAiQUlGMkRBQzJMIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNMIiB9LAorCXsgIkFJRjJEQUMyTCBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyTCIgfSwKKwl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMUwiIH0sCisJeyAiQUlGMkRBQzJMIE1peGVyIiwgIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgIkxlZnQgU2lkZXRvbmUiIH0sCisJeyAiQUlGMkRBQzJMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKKworCXsgIkFJRjJBRENSIiwgTlVMTCwgIkFJRjJEQUMyUiBNaXhlciIgfSwKKwl7ICJEQUMyUiIsIE5VTEwsICJBSUYyREFDMlIgTWl4ZXIiIH0sCisJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAorCXsgIkFJRjJEQUMyUiBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyUiIgfSwKKwl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMVIiIH0sCisJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgIkxlZnQgU2lkZXRvbmUiIH0sCisJeyAiQUlGMkRBQzJSIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKKworCXsgIkFJRjJBRENEQVQiLCBOVUxMLCAiQUlGMkFEQyBNdXgiIH0sCisKKwkvKiBBSUYzIG91dHB1dCAqLworCXsgIkFJRjNBRENEQVQiLCAiQUlGMUFEQ0RBVCIsICJBSUYxQURDMUwiIH0sCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYxQURDREFUIiwgIkFJRjFBREMxUiIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjFBRENEQVQiLCAiQUlGMUFEQzJMIiB9LAorCXsgIkFJRjNBRENEQVQiLCAiQUlGMUFEQ0RBVCIsICJBSUYxQURDMlIiIH0sCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYyQURDREFUIiwgIkFJRjJBRENMIiB9LAorCXsgIkFJRjNBRENEQVQiLCAiQUlGMkFEQ0RBVCIsICJBSUYyQURDUiIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjJEQUNEQVQiLCAiQUlGMkRBQ0wiIH0sCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYyREFDREFUIiwgIkFJRjJEQUNSIiB9LAorCisJLyogU2lkZXRvbmUgKi8KKwl7ICJMZWZ0IFNpZGV0b25lIiwgIkFEQy9ETUlDMSIsICJBRENMIE11eCIgfSwKKwl7ICJMZWZ0IFNpZGV0b25lIiwgIkRNSUMyIiwgIkRNSUMyTCIgfSwKKwl7ICJSaWdodCBTaWRldG9uZSIsICJBREMvRE1JQzEiLCAiQURDUiBNdXgiIH0sCisJeyAiUmlnaHQgU2lkZXRvbmUiLCAiRE1JQzIiLCAiRE1JQzJSIiB9LAorCisJLyogT3V0cHV0IHN0YWdlcyAqLworCXsgIkxlZnQgT3V0cHV0IE1peGVyIiwgIkRBQyBTd2l0Y2giLCAiREFDMUwiIH0sCisJeyAiUmlnaHQgT3V0cHV0IE1peGVyIiwgIkRBQyBTd2l0Y2giLCAiREFDMVIiIH0sCisKKwl7ICJTUEtMIiwgIkRBQzEgU3dpdGNoIiwgIkRBQzFMIiB9LAorCXsgIlNQS0wiLCAiREFDMiBTd2l0Y2giLCAiREFDMkwiIH0sCisKKwl7ICJTUEtSIiwgIkRBQzEgU3dpdGNoIiwgIkRBQzFSIiB9LAorCXsgIlNQS1IiLCAiREFDMiBTd2l0Y2giLCAiREFDMlIiIH0sCisKKwl7ICJMZWZ0IEhlYWRwaG9uZSBNdXgiLCAiREFDIiwgIkRBQzFMIiB9LAorCXsgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCAiREFDIiwgIkRBQzFSIiB9LAorfTsKKworLyogVGhlIHNpemUgaW4gYml0cyBvZiB0aGUgRkxMIGRpdmlkZSBtdWx0aXBsaWVkIGJ5IDEwCisgKiB0byBhbGxvdyByb3VuZGluZyBsYXRlciAqLworI2RlZmluZSBGSVhFRF9GTExfU0laRSAoKDEgPDwgMTYpICogMTApCisKK3N0cnVjdCBmbGxfZGl2IHsKKwl1MTYgb3V0ZGl2OworCXUxNiBuOworCXUxNiBrOworCXUxNiBjbGtfcmVmX2RpdjsKKwl1MTYgZmxsX2ZyYXRpbzsKK307CisKK3N0YXRpYyBpbnQgd204OTk0X2dldF9mbGxfY29uZmlnKHN0cnVjdCBmbGxfZGl2ICpmbGwsCisJCQkJIGludCBmcmVxX2luLCBpbnQgZnJlcV9vdXQpCit7CisJdTY0IEtwYXJ0OworCXVuc2lnbmVkIGludCBLLCBOZGl2LCBObW9kOworCisJcHJfZGVidWcoIkZMTCBpbnB1dD0lZEh6LCBvdXRwdXQ9JWRIelxuIiwgZnJlcV9pbiwgZnJlcV9vdXQpOworCisJLyogU2NhbGUgdGhlIGlucHV0IGZyZXF1ZW5jeSBkb3duIHRvIDw9IDEzLjVNSHogKi8KKwlmbGwtPmNsa19yZWZfZGl2ID0gMDsKKwl3aGlsZSAoZnJlcV9pbiA+IDEzNTAwMDAwKSB7CisJCWZsbC0+Y2xrX3JlZl9kaXYrKzsKKwkJZnJlcV9pbiAvPSAyOworCisJCWlmIChmbGwtPmNsa19yZWZfZGl2ID4gMykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlwcl9kZWJ1ZygiQ0xLX1JFRl9ESVY9JWQsIEZyZWY9JWRIelxuIiwgZmxsLT5jbGtfcmVmX2RpdiwgZnJlcV9pbik7CisKKwkvKiBTY2FsZSB0aGUgb3V0cHV0IHRvIGdpdmUgOTBNSHo8PUZ2Y288PTEwME1IeiAqLworCWZsbC0+b3V0ZGl2ID0gMzsKKwl3aGlsZSAoZnJlcV9vdXQgKiAoZmxsLT5vdXRkaXYgKyAxKSA8IDkwMDAwMDAwKSB7CisJCWZsbC0+b3V0ZGl2Kys7CisJCWlmIChmbGwtPm91dGRpdiA+IDYzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZyZXFfb3V0ICo9IGZsbC0+b3V0ZGl2ICsgMTsKKwlwcl9kZWJ1ZygiT1VURElWPSVkLCBGdmNvPSVkSHpcbiIsIGZsbC0+b3V0ZGl2LCBmcmVxX291dCk7CisKKwlpZiAoZnJlcV9pbiA+IDEwMDAwMDApIHsKKwkJZmxsLT5mbGxfZnJhdGlvID0gMDsKKwl9IGVsc2UgeworCQlmbGwtPmZsbF9mcmF0aW8gPSAzOworCQlmcmVxX2luICo9IDg7CisJfQorCXByX2RlYnVnKCJGTExfRlJBVElPPSVkLCBGcmVmPSVkSHpcbiIsIGZsbC0+ZmxsX2ZyYXRpbywgZnJlcV9pbik7CisKKwkvKiBOb3csIGNhbGN1bGF0ZSBOLksgKi8KKwlOZGl2ID0gZnJlcV9vdXQgLyBmcmVxX2luOworCisJZmxsLT5uID0gTmRpdjsKKwlObW9kID0gZnJlcV9vdXQgJSBmcmVxX2luOworCXByX2RlYnVnKCJObW9kPSVkXG4iLCBObW9kKTsKKworCS8qIENhbGN1bGF0ZSBmcmFjdGlvbmFsIHBhcnQgLSBzY2FsZSB1cCBzbyB3ZSBjYW4gcm91bmQuICovCisJS3BhcnQgPSBGSVhFRF9GTExfU0laRSAqIChsb25nIGxvbmcpTm1vZDsKKworCWRvX2RpdihLcGFydCwgZnJlcV9pbik7CisKKwlLID0gS3BhcnQgJiAweEZGRkZGRkZGOworCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlmbGwtPmsgPSBLIC8gMTA7CisKKwlwcl9kZWJ1ZygiTj0leCBLPSV4XG4iLCBmbGwtPm4sIGZsbC0+ayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfc2V0X2ZsbChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IGlkLCBpbnQgc3JjLAorCQkJICB1bnNpZ25lZCBpbnQgZnJlcV9pbiwgdW5zaWduZWQgaW50IGZyZXFfb3V0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZWdfb2Zmc2V0LCByZXQ7CisJc3RydWN0IGZsbF9kaXYgZmxsOworCXUxNiByZWcsIGFpZjEsIGFpZjI7CisKKwlhaWYxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xKQorCQkmIFdNODk5NF9BSUYxQ0xLX0VOQTsKKworCWFpZjIgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9BSUYyX0NMT0NLSU5HXzEpCisJCSYgV004OTk0X0FJRjJDTEtfRU5BOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgV004OTk0X0ZMTDE6CisJCXJlZ19vZmZzZXQgPSAwOworCQlpZCA9IDA7CisJCWJyZWFrOworCWNhc2UgV004OTk0X0ZMTDI6CisJCXJlZ19vZmZzZXQgPSAweDIwOworCQlpZCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEFyZSB3ZSBjaGFuZ2luZyBhbnl0aGluZz8gKi8KKwlpZiAod204OTk0LT5mbGxbaWRdLnNyYyA9PSBzcmMgJiYKKwkgICAgd204OTk0LT5mbGxbaWRdLmluID09IGZyZXFfaW4gJiYgd204OTk0LT5mbGxbaWRdLm91dCA9PSBmcmVxX291dCkKKwkJcmV0dXJuIDA7CisKKwkvKiBJZiB3ZSdyZSBzdG9wcGluZyB0aGUgRkxMIHJlZG8gdGhlIG9sZCBjb25maWcgLSBubworCSAqIHJlZ2lzdGVycyB3aWxsIGFjdHVhbGx5IGJlIHdyaXR0ZW4gYnV0IHdlIGF2b2lkIEdDQyBmbG93CisJICogYW5hbHlzaXMgYnVncyBzcGV3aW5nIHdhcm5pbmdzLgorCSAqLworCWlmIChmcmVxX291dCkKKwkJcmV0ID0gd204OTk0X2dldF9mbGxfY29uZmlnKCZmbGwsIGZyZXFfaW4sIGZyZXFfb3V0KTsKKwllbHNlCisJCXJldCA9IHdtODk5NF9nZXRfZmxsX2NvbmZpZygmZmxsLCB3bTg5OTQtPmZsbFtpZF0uaW4sCisJCQkJCSAgICB3bTg5OTQtPmZsbFtpZF0ub3V0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEdhdGUgdGhlIEFJRiBjbG9ja3Mgd2hpbGUgd2UgcmVjbG9jayAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEsCisJCQkgICAgV004OTk0X0FJRjFDTEtfRU5BLCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xLAorCQkJICAgIFdNODk5NF9BSUYyQ0xLX0VOQSwgMCk7CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0byBkaXNhYmxlIHRoZSBGTEwgd2hpbGUgcmVjb25maWd1cmluZyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9GTEwxX0NPTlRST0xfMSArIHJlZ19vZmZzZXQsCisJCQkgICAgV004OTk0X0ZMTDFfRU5BLCAwKTsKKworCXJlZyA9IChmbGwub3V0ZGl2IDw8IFdNODk5NF9GTEwxX09VVERJVl9TSElGVCkgfAorCQkoZmxsLmZsbF9mcmF0aW8gPDwgV004OTk0X0ZMTDFfRlJBVElPX1NISUZUKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfRkxMMV9DT05UUk9MXzIgKyByZWdfb2Zmc2V0LAorCQkJICAgIFdNODk5NF9GTEwxX09VVERJVl9NQVNLIHwKKwkJCSAgICBXTTg5OTRfRkxMMV9GUkFUSU9fTUFTSywgcmVnKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5NF9GTEwxX0NPTlRST0xfMyArIHJlZ19vZmZzZXQsIGZsbC5rKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9GTEwxX0NPTlRST0xfNCArIHJlZ19vZmZzZXQsCisJCQkgICAgV004OTk0X0ZMTDFfTl9NQVNLLAorCQkJCSAgICBmbGwubiA8PCBXTTg5OTRfRkxMMV9OX1NISUZUKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9GTEwxX0NPTlRST0xfNSArIHJlZ19vZmZzZXQsCisJCQkgICAgV004OTk0X0ZMTDFfUkVGQ0xLX0RJVl9NQVNLLAorCQkJICAgIGZsbC5jbGtfcmVmX2RpdiA8PCBXTTg5OTRfRkxMMV9SRUZDTEtfRElWX1NISUZUKTsKKworCS8qIEVuYWJsZSAod2l0aCBmcmFjdGlvbmFsIG1vZGUgaWYgcmVxdWlyZWQpICovCisJaWYgKGZyZXFfb3V0KSB7CisJCWlmIChmbGwuaykKKwkJCXJlZyA9IFdNODk5NF9GTEwxX0VOQSB8IFdNODk5NF9GTEwxX0ZSQUM7CisJCWVsc2UKKwkJCXJlZyA9IFdNODk5NF9GTEwxX0VOQTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF8xICsgcmVnX29mZnNldCwKKwkJCQkgICAgV004OTk0X0ZMTDFfRU5BIHwgV004OTk0X0ZMTDFfRlJBQywKKwkJCQkgICAgcmVnKTsKKwl9CisKKwl3bTg5OTQtPmZsbFtpZF0uaW4gPSBmcmVxX2luOworCXdtODk5NC0+ZmxsW2lkXS5vdXQgPSBmcmVxX291dDsKKworCS8qIEVuYWJsZSBhbnkgZ2F0ZWQgQUlGIGNsb2NrcyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEsCisJCQkgICAgV004OTk0X0FJRjFDTEtfRU5BLCBhaWYxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xLAorCQkJICAgIFdNODk5NF9BSUYyQ0xLX0VOQSwgYWlmMik7CisKKwljb25maWd1cmVfY2xvY2soY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQlpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgMToKKwljYXNlIDI6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogQUlGMyBzaGFyZXMgY2xvY2tpbmcgd2l0aCBBSUYxLzIgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFdNODk5NF9TWVNDTEtfTUNMSzE6CisJCXdtODk5NC0+c3lzY2xrW2RhaS0+aWQgLSAxXSA9IFdNODk5NF9TWVNDTEtfTUNMSzE7CisJCXdtODk5NC0+bWNsa1swXSA9IGZyZXE7CisJCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZCB1c2luZyBNQ0xLMSBhdCAldUh6XG4iLAorCQkJZGFpLT5pZCwgZnJlcSk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTRfU1lTQ0xLX01DTEsyOgorCQkvKiBUT0RPOiBTZXQgR1BJTyBBRiAqLworCQl3bTg5OTQtPnN5c2Nsa1tkYWktPmlkIC0gMV0gPSBXTTg5OTRfU1lTQ0xLX01DTEsyOworCQl3bTg5OTQtPm1jbGtbMV0gPSBmcmVxOworCQlkZXZfZGJnKGRhaS0+ZGV2LCAiQUlGJWQgdXNpbmcgTUNMSzIgYXQgJXVIelxuIiwKKwkJCWRhaS0+aWQsIGZyZXEpOworCQlicmVhazsKKworCWNhc2UgV004OTk0X1NZU0NMS19GTEwxOgorCQl3bTg5OTQtPnN5c2Nsa1tkYWktPmlkIC0gMV0gPSBXTTg5OTRfU1lTQ0xLX0ZMTDE7CisJCWRldl9kYmcoZGFpLT5kZXYsICJBSUYlZCB1c2luZyBGTEwxXG4iLCBkYWktPmlkKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODk5NF9TWVNDTEtfRkxMMjoKKwkJd204OTk0LT5zeXNjbGtbZGFpLT5pZCAtIDFdID0gV004OTk0X1NZU0NMS19GTEwyOworCQlkZXZfZGJnKGRhaS0+ZGV2LCAiQUlGJWQgdXNpbmcgRkxMMlxuIiwgZGFpLT5pZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29uZmlndXJlX2Nsb2NrKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQkvKiBWTUlEPTJ4NDBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk5NF9WTUlEX1NFTF9NQVNLLCAweDIpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQkvKiBUd2VhayBEQyBzZXJ2byBjb25maWd1cmF0aW9uIGZvciBpbXByb3ZlZAorCQkJICogcGVyZm9ybWFuY2UuICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDEwMiwgMHgzKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4NTYsIDB4Myk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDEwMiwgMCk7CisKKwkJCS8qIERpc2NoYXJnZSBMSU5FT1VUMSAmIDIgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BTlRJUE9QXzEsCisJCQkJCSAgICBXTTg5OTRfTElORU9VVDFfRElTQ0ggfAorCQkJCQkgICAgV004OTk0X0xJTkVPVVQyX0RJU0NILAorCQkJCQkgICAgV004OTk0X0xJTkVPVVQxX0RJU0NIIHwKKwkJCQkJICAgIFdNODk5NF9MSU5FT1VUMl9ESVNDSCk7CisKKwkJCS8qIFN0YXJ0dXAgYmlhcywgVk1JRCByYW1wICYgYnVmZmVyICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQU5USVBPUF8yLAorCQkJCQkgICAgV004OTk0X1NUQVJUVVBfQklBU19FTkEgfAorCQkJCQkgICAgV004OTk0X1ZNSURfQlVGX0VOQSB8CisJCQkJCSAgICBXTTg5OTRfVk1JRF9SQU1QX01BU0ssCisJCQkJCSAgICBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQSB8CisJCQkJCSAgICBXTTg5OTRfVk1JRF9CVUZfRU5BIHwKKwkJCQkJICAgICgweDExIDw8IFdNODk5NF9WTUlEX1JBTVBfU0hJRlQpKTsKKworCQkJLyogTWFpbiBiaWFzIGVuYWJsZSwgVk1JRD0yeDQwayAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkJICAgIFdNODk5NF9CSUFTX0VOQSB8CisJCQkJCSAgICBXTTg5OTRfVk1JRF9TRUxfTUFTSywKKwkJCQkJICAgIFdNODk5NF9CSUFTX0VOQSB8IDB4Mik7CisKKwkJCW1zbGVlcCgyMCk7CisJCX0KKworCQkvKiBWTUlEPTJ4NTAwayAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5OTRfVk1JRF9TRUxfTUFTSywgMHg0KTsKKworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogU3dpdGNoIG92ZXIgdG8gc3RhcnR1cCBiaWFzZXMgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FOVElQT1BfMiwKKwkJCQkgICAgV004OTk0X0JJQVNfU1JDIHwgV004OTk0X1NUQVJUVVBfQklBU19FTkEgfAorCQkJCSAgICBXTTg5OTRfVk1JRF9CVUZfRU5BIHwKKwkJCQkgICAgV004OTk0X1ZNSURfUkFNUF9NQVNLLAorCQkJCSAgICBXTTg5OTRfQklBU19TUkMgfCBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQSB8CisJCQkJICAgIFdNODk5NF9WTUlEX0JVRl9FTkEgfAorCQkJCSAgICAoMSA8PCBXTTg5OTRfVk1JRF9SQU1QX1NISUZUKSk7CisKKwkJLyogRGlzYWJsZSBtYWluIGJpYXNlcyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5OTRfQklBU19FTkEgfCBXTTg5OTRfVk1JRF9TRUxfTUFTSywgMCk7CisKKwkJLyogRGlzY2hhcmdlIGxpbmUgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FOVElQT1BfMSwKKwkJCQkgICAgV004OTk0X0xJTkVPVVQxX0RJU0NIIHwKKwkJCQkgICAgV004OTk0X0xJTkVPVVQyX0RJU0NILAorCQkJCSAgICBXTTg5OTRfTElORU9VVDFfRElTQ0ggfAorCQkJCSAgICBXTTg5OTRfTElORU9VVDJfRElTQ0gpOworCisJCW1zbGVlcCg1KTsKKworCQkvKiBTd2l0Y2ggb2ZmIHN0YXJ0dXAgYmlhc2VzICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BTlRJUE9QXzIsCisJCQkJICAgIFdNODk5NF9CSUFTX1NSQyB8IFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BIHwKKwkJCQkgICAgV004OTk0X1ZNSURfQlVGX0VOQSB8CisJCQkJICAgIFdNODk5NF9WTUlEX1JBTVBfTUFTSywgMCk7CisKKwkJYnJlYWs7CisJfQorCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJaW50IG1zX3JlZzsKKwlpbnQgYWlmMV9yZWc7CisJaW50IG1zID0gMDsKKwlpbnQgYWlmMSA9IDA7CisKKwlzd2l0Y2ggKGRhaS0+aWQpIHsKKwljYXNlIDE6CisJCW1zX3JlZyA9IFdNODk5NF9BSUYxX01BU1RFUl9TTEFWRTsKKwkJYWlmMV9yZWcgPSBXTTg5OTRfQUlGMV9DT05UUk9MXzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbXNfcmVnID0gV004OTk0X0FJRjJfTUFTVEVSX1NMQVZFOworCQlhaWYxX3JlZyA9IFdNODk5NF9BSUYyX0NPTlRST0xfMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQltcyA9IFdNODk5NF9BSUYxX01TVFI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlhaWYxIHw9IFdNODk5NF9BSUYxX0xSQ0xLX0lOVjsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlhaWYxIHw9IDB4MTg7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlhaWYxIHw9IDB4MTA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWFpZjEgfD0gMHg4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQkvKiBmcmFtZSBpbnZlcnNpb24gbm90IHZhbGlkIGZvciBEU1AgbW9kZXMgKi8KKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYxIHw9IFdNODk5NF9BSUYxX0JDTEtfSU5WOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCQlhaWYxIHw9IFdNODk5NF9BSUYxX0JDTEtfSU5WIHwgV004OTk0X0FJRjFfTFJDTEtfSU5WOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYxIHw9IFdNODk5NF9BSUYxX0JDTEtfSU5WOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCQlhaWYxIHw9IFdNODk5NF9BSUYxX0xSQ0xLX0lOVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYWlmMV9yZWcsCisJCQkgICAgV004OTk0X0FJRjFfQkNMS19JTlYgfCBXTTg5OTRfQUlGMV9MUkNMS19JTlYgfAorCQkJICAgIFdNODk5NF9BSUYxX0ZNVF9NQVNLLAorCQkJICAgIGFpZjEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIG1zX3JlZywgV004OTk0X0FJRjFfTVNUUiwKKwkJCSAgICBtcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB7CisJaW50IHZhbCwgcmF0ZTsKK30gc3JzW10gPSB7CisJeyAwLCAgIDgwMDAgfSwKKwl7IDEsICAxMTAyNSB9LAorCXsgMiwgIDEyMDAwIH0sCisJeyAzLCAgMTYwMDAgfSwKKwl7IDQsICAyMjA1MCB9LAorCXsgNSwgIDI0MDAwIH0sCisJeyA2LCAgMzIwMDAgfSwKKwl7IDcsICA0NDEwMCB9LAorCXsgOCwgIDQ4MDAwIH0sCisJeyA5LCAgODgyMDAgfSwKKwl7IDEwLCA5NjAwMCB9LAorfTsKKworc3RhdGljIGludCBmc19yYXRpb3NbXSA9IHsKKwk2NCwgMTI4LCAxOTIsIDI1NiwgMzQ4LCA1MTIsIDc2OCwgMTAyNCwgMTQwOCwgMTUzNgorfTsKKworc3RhdGljIGludCBiY2xrX2RpdnNbXSA9IHsKKwkxMCwgMTUsIDIwLCAzMCwgNDAsIDUwLCA2MCwgODAsIDExMCwgMTIwLCAxNjAsIDIyMCwgMjQwLCAzMjAsIDQ0MCwgNDgwLAorCTY0MCwgODgwLCA5NjAsIDEyODAsIDE3NjAsIDE5MjAKK307CisKK3N0YXRpYyBpbnQgd204OTk0X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgYWlmMV9yZWc7CisJaW50IGJjbGtfcmVnOworCWludCBscmNsa19yZWc7CisJaW50IHJhdGVfcmVnOworCWludCBhaWYxID0gMDsKKwlpbnQgYmNsayA9IDA7CisJaW50IGxyY2xrID0gMDsKKwlpbnQgcmF0ZV92YWwgPSAwOworCWludCBpZCA9IGRhaS0+aWQgLSAxOworCisJaW50IGksIGN1cl92YWwsIGJlc3RfdmFsLCBiY2xrX3JhdGUsIGJlc3Q7CisKKwlzd2l0Y2ggKGRhaS0+aWQpIHsKKwljYXNlIDE6CisJCWFpZjFfcmVnID0gV004OTk0X0FJRjFfQ09OVFJPTF8xOworCQliY2xrX3JlZyA9IFdNODk5NF9BSUYxX0JDTEs7CisJCXJhdGVfcmVnID0gV004OTk0X0FJRjFfUkFURTsKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgfHwKKwkJICAgIHdtODk5NC0+bHJjbGtfc2hhcmVkWzBdKQorCQkJbHJjbGtfcmVnID0gV004OTk0X0FJRjFEQUNfTFJDTEs7CisJCWVsc2UKKwkJCWxyY2xrX3JlZyA9IFdNODk5NF9BSUYxQURDX0xSQ0xLOworCQlicmVhazsKKwljYXNlIDI6CisJCWFpZjFfcmVnID0gV004OTk0X0FJRjJfQ09OVFJPTF8xOworCQliY2xrX3JlZyA9IFdNODk5NF9BSUYyX0JDTEs7CisJCXJhdGVfcmVnID0gV004OTk0X0FJRjJfUkFURTsKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgfHwKKwkJICAgIHdtODk5NC0+bHJjbGtfc2hhcmVkWzFdKQorCQkJbHJjbGtfcmVnID0gV004OTk0X0FJRjJEQUNfTFJDTEs7CisJCWVsc2UKKwkJCWxyY2xrX3JlZyA9IFdNODk5NF9BSUYyQURDX0xSQ0xLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwliY2xrX3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpICogMjsKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJjbGtfcmF0ZSAqPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWJjbGtfcmF0ZSAqPSAyMDsKKwkJYWlmMSB8PSAweDIwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQliY2xrX3JhdGUgKj0gMjQ7CisJCWFpZjEgfD0gMHg0MDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJYmNsa19yYXRlICo9IDMyOworCQlhaWYxIHw9IDB4NjA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFRyeSB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIHNhbXBsZSByYXRlOyBsb29rIGZvciBhbiBleGFjdCBtYXRjaC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcnMpOyBpKyspCisJCWlmIChzcnNbaV0ucmF0ZSA9PSBwYXJhbXNfcmF0ZShwYXJhbXMpKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gQVJSQVlfU0laRShzcnMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyYXRlX3ZhbCB8PSBzcnNbaV0udmFsIDw8IFdNODk5NF9BSUYxX1NSX1NISUZUOworCisJZGV2X2RiZyhkYWktPmRldiwgIlNhbXBsZSByYXRlIGlzICVkSHpcbiIsIHNyc1tpXS5yYXRlKTsKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiQUlGJWRDTEsgaXMgJWRIeiwgdGFyZ2V0IEJDTEsgJWRIelxuIiwKKwkJZGFpLT5pZCwgd204OTk0LT5haWZjbGtbaWRdLCBiY2xrX3JhdGUpOworCisJaWYgKHdtODk5NC0+YWlmY2xrW2lkXSA9PSAwKSB7CisJCWRldl9lcnIoZGFpLT5kZXYsICJBSUYlZENMSyBub3QgY29uZmlndXJlZFxuIiwgZGFpLT5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEFJRkNMSy9mcyByYXRpbzsgbG9vayBmb3IgYSBjbG9zZSBtYXRjaCBpbiBlaXRoZXIgZGlyZWN0aW9uICovCisJYmVzdCA9IDA7CisJYmVzdF92YWwgPSBhYnMoKGZzX3JhdGlvc1swXSAqIHBhcmFtc19yYXRlKHBhcmFtcykpCisJCSAgICAgICAtIHdtODk5NC0+YWlmY2xrW2lkXSk7CisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUoZnNfcmF0aW9zKTsgaSsrKSB7CisJCWN1cl92YWwgPSBhYnMoKGZzX3JhdGlvc1tpXSAqIHBhcmFtc19yYXRlKHBhcmFtcykpCisJCQkgICAgICAtIHdtODk5NC0+YWlmY2xrW2lkXSk7CisJCWlmIChjdXJfdmFsID49IGJlc3RfdmFsKQorCQkJY29udGludWU7CisJCWJlc3QgPSBpOworCQliZXN0X3ZhbCA9IGN1cl92YWw7CisJfQorCWRldl9kYmcoZGFpLT5kZXYsICJTZWxlY3RlZCBBSUYlZENMSy9mcyA9ICVkXG4iLAorCQlkYWktPmlkLCBmc19yYXRpb3NbYmVzdF0pOworCXJhdGVfdmFsIHw9IGJlc3Q7CisKKwkvKiBXZSBtYXkgbm90IGdldCBxdWl0ZSB0aGUgcmlnaHQgZnJlcXVlbmN5IGlmIHVzaW5nCisJICogYXBwcm94aW1hdGUgY2xvY2tzIHNvIGxvb2sgZm9yIHRoZSBjbG9zZXN0IG1hdGNoIHRoYXQgaXMKKwkgKiBoaWdoZXIgdGhhbiB0aGUgdGFyZ2V0ICh3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGVub3VnaAorCSAqIEJDTEtzIHRvIGNsb2NrIG91dCB0aGUgc2FtcGxlcykuCisJICovCisJYmVzdCA9IDA7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmNsa19kaXZzKTsgaSsrKSB7CisJCWN1cl92YWwgPSAod204OTk0LT5haWZjbGtbaWRdICogMTAgLyBiY2xrX2RpdnNbaV0pIC0gYmNsa19yYXRlOworCQlpZiAoY3VyX3ZhbCA8IDApIC8qIEJDTEsgdGFibGUgaXMgc29ydGVkICovCisJCQlicmVhazsKKwkJYmVzdCA9IGk7CisJfQorCWJjbGtfcmF0ZSA9IHdtODk5NC0+YWlmY2xrW2lkXSAqIDEwIC8gYmNsa19kaXZzW2Jlc3RdOworCWRldl9kYmcoZGFpLT5kZXYsICJVc2luZyBCQ0xLX0RJViAlZCBmb3IgYWN0dWFsIEJDTEsgJWRIelxuIiwKKwkJYmNsa19kaXZzW2Jlc3RdLCBiY2xrX3JhdGUpOworCWJjbGsgfD0gYmVzdCA8PCBXTTg5OTRfQUlGMV9CQ0xLX0RJVl9TSElGVDsKKworCWxyY2xrID0gYmNsa19yYXRlIC8gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiVXNpbmcgTFJDTEsgcmF0ZSAlZCBmb3IgYWN0dWFsIExSQ0xLICVkSHpcbiIsCisJCWxyY2xrLCBiY2xrX3JhdGUgLyBscmNsayk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBhaWYxX3JlZywgV004OTk0X0FJRjFfV0xfTUFTSywgYWlmMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmNsa19yZWcsIFdNODk5NF9BSUYxX0JDTEtfRElWX01BU0ssIGJjbGspOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGxyY2xrX3JlZywgV004OTk0X0FJRjFEQUNfUkFURV9NQVNLLAorCQkJICAgIGxyY2xrKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByYXRlX3JlZywgV004OTk0X0FJRjFfU1JfTUFTSyB8CisJCQkgICAgV004OTk0X0FJRjFDTEtfUkFURV9NQVNLLCByYXRlX3ZhbCk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlzd2l0Y2ggKGRhaS0+aWQpIHsKKwkJY2FzZSAxOgorCQkJd204OTk0LT5kYWNfcmF0ZXNbMF0gPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCQkJd204OTk0X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjLCAwKTsKKwkJCXdtODk5NF9zZXRfcmV0dW5lX21vYmlsZShjb2RlYywgMSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJd204OTk0LT5kYWNfcmF0ZXNbMV0gPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCQkJd204OTk0X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjLCAyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2FpZl9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCBtdXRlX3JlZzsKKwlpbnQgcmVnOworCisJc3dpdGNoIChjb2RlY19kYWktPmlkKSB7CisJY2FzZSAxOgorCQltdXRlX3JlZyA9IFdNODk5NF9BSUYxX0RBQzFfRklMVEVSU18xOworCQlicmVhazsKKwljYXNlIDI6CisJCW11dGVfcmVnID0gV004OTk0X0FJRjJfREFDX0ZJTFRFUlNfMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG11dGUpCisJCXJlZyA9IFdNODk5NF9BSUYxREFDMV9NVVRFOworCWVsc2UKKwkJcmVnID0gMDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIG11dGVfcmVnLCBXTTg5OTRfQUlGMURBQzFfTVVURSwgcmVnKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODk5NF9SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCisKKyNkZWZpbmUgV004OTk0X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTk0X2FpZjFfZGFpX29wcyA9IHsKKwkuc2V0X3N5c2Nsawk9IHdtODk5NF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHdtODk5NF9zZXRfZGFpX2ZtdCwKKwkuaHdfcGFyYW1zCT0gd204OTk0X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTk0X2FpZl9tdXRlLAorCS5zZXRfcGxsCT0gd204OTk0X3NldF9mbGwsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5OTRfYWlmMl9kYWlfb3BzID0geworCS5zZXRfc3lzY2xrCT0gd204OTk0X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10CT0gd204OTk0X3NldF9kYWlfZm10LAorCS5od19wYXJhbXMJPSB3bTg5OTRfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUgICA9IHdtODk5NF9haWZfbXV0ZSwKKwkuc2V0X3BsbAk9IHdtODk5NF9zZXRfZmxsLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHdtODk5NF9kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gIldNODk5NCBBSUYxIiwKKwkJLmlkID0gMSwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjEgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNODk5NF9SQVRFUywKKwkJCS5mb3JtYXRzID0gV004OTk0X0ZPUk1BVFMsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjEgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKKwkJIH0sCisJCS5vcHMgPSAmd204OTk0X2FpZjFfZGFpX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiV004OTk0IEFJRjIiLAorCQkuaWQgPSAyLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMiBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMiBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLAorCQl9LAorCQkub3BzID0gJndtODk5NF9haWYyX2RhaV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gIldNODk5NCBBSUYzIiwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjMgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNODk5NF9SQVRFUywKKwkJCS5mb3JtYXRzID0gV004OTk0X0ZPUk1BVFMsCisJCX0sCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYzIENhcHR1cmUiLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNODk5NF9SQVRFUywKKwkJCS5mb3JtYXRzID0gV004OTk0X0ZPUk1BVFMsCisJCX0sCisJfQorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODk5NF9kYWkpOworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODk5NF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTQtPmZsbCk7IGkrKykgeworCQltZW1jcHkoJndtODk5NC0+ZmxsX3N1c3BlbmRbaV0sICZ3bTg5OTQtPmZsbFtpXSwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZmxsX2NvbmZpZykpOworCQlyZXQgPSB3bTg5OTRfc2V0X2ZsbCgmY29kZWMtPmRhaVswXSwgaSArIDEsIDAsIDAsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCWRldl93YXJuKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc3RvcCBGTEwlZDogJWRcbiIsCisJCQkJIGkgKyAxLCByZXQpOworCX0KKworCXdtODk5NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaW50IGksIHJldDsKKworCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHdtODk5NC0+cmVnX2NhY2hlKTsgaSsrKSB7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIFdNODk5NF9MRE9fMToKKwkJY2FzZSBXTTg5OTRfTERPXzI6CisJCWNhc2UgV004OTk0X1NPRlRXQVJFX1JFU0VUOgorCQkJLyogSGFuZGxlZCBieSBvdGhlciBNRkQgZHJpdmVycyAqLworCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmICghYWNjZXNzX21hc2tzW2ldLndyaXRhYmxlKQorCQkJY29udGludWU7CisKKwkJd204OTk0X3JlZ193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBpLCByZWdfY2FjaGVbaV0pOworCX0KKworCXdtODk5NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0LT5mbGwpOyBpKyspIHsKKwkJcmV0ID0gd204OTk0X3NldF9mbGwoJmNvZGVjLT5kYWlbMF0sIGkgKyAxLAorCQkJCSAgICAgd204OTk0LT5mbGxfc3VzcGVuZFtpXS5zcmMsCisJCQkJICAgICB3bTg5OTQtPmZsbF9zdXNwZW5kW2ldLmluLAorCQkJCSAgICAgd204OTk0LT5mbGxfc3VzcGVuZFtpXS5vdXQpOworCQlpZiAocmV0IDwgMCkKKwkJCWRldl93YXJuKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVzdG9yZSBGTEwlZDogJWRcbiIsCisJCQkJIGkgKyAxLCByZXQpOworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgd204OTk0X3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg5OTRfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB3bTg5OTRfaGFuZGxlX3JldHVuZV9tb2JpbGVfcGRhdGEoc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODk5NC0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNvbnRyb2xzW10gPSB7CisJCVNPQ19FTlVNX0VYVCgiQUlGMS4xIEVRIE1vZGUiLAorCQkJICAgICB3bTg5OTQtPnJldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTk0X2dldF9yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODk5NF9wdXRfcmV0dW5lX21vYmlsZV9lbnVtKSwKKwkJU09DX0VOVU1fRVhUKCJBSUYxLjIgRVEgTW9kZSIsCisJCQkgICAgIHdtODk5NC0+cmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTk0X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0pLAorCQlTT0NfRU5VTV9FWFQoIkFJRjIgRVEgTW9kZSIsCisJCQkgICAgIHdtODk5NC0+cmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTk0X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0pLAorCX07CisJaW50IHJldCwgaSwgajsKKwljb25zdCBjaGFyICoqdDsKKworCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSBidXQgdGhlIG51bWJlcgorCSAqIG9mIHRleHRzIGlzIGxpa2VseSB0byBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZgorCSAqIGNvbmZpZ3VyYXRpb25zIGR1ZSB0byB0aGUgc2FtcGxlIHJhdGUgZGVwZW5kZW5jeSBvZiB0aGUKKwkgKiBjb25maWd1cmF0aW9ucy4gKi8KKwl3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzID0gMDsKKwl3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZnczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOyBqKyspIHsKKwkJCWlmIChzdHJjbXAocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5uYW1lLAorCQkJCSAgIHdtODk5NC0+cmV0dW5lX21vYmlsZV90ZXh0c1tqXSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChqICE9IHdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpCisJCQljb250aW51ZTsKKworCQkvKiBFeHBhbmQgdGhlIGFycmF5Li4uICovCisJCXQgPSBrcmVhbGxvYyh3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHMsCisJCQkgICAgIHNpemVvZihjaGFyICopICogCisJCQkgICAgICh3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzICsgMSksCisJCQkgICAgIEdGUF9LRVJORUwpOworCQlpZiAodCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogLi4uc3RvcmUgdGhlIG5ldyBlbnRyeS4uLiAqLworCQl0W3dtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHNdID0gCisJCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWU7CisKKwkJLyogLi4uYW5kIHJlbWVtYmVyIHRoZSBuZXcgdmVyc2lvbi4gKi8KKwkJd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cysrOworCQl3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSB0OworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIkFsbG9jYXRlZCAlZCB1bmlxdWUgUmVUdW5lIE1vYmlsZSBuYW1lc1xuIiwKKwkJd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cyk7CisKKwl3bTg5OTQtPnJldHVuZV9tb2JpbGVfZW51bS5tYXggPSB3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOworCXdtODk5NC0+cmV0dW5lX21vYmlsZV9lbnVtLnRleHRzID0gd204OTk0LT5yZXR1bmVfbW9iaWxlX3RleHRzOworCisJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoJndtODk5NC0+Y29kZWMsIGNvbnRyb2xzLAorCQkJCSAgIEFSUkFZX1NJWkUoY29udHJvbHMpKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIod204OTk0LT5jb2RlYy5kZXYsCisJCQkiRmFpbGVkIHRvIGFkZCBSZVR1bmUgTW9iaWxlIGNvbnRyb2xzOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIHZvaWQgd204OTk0X2hhbmRsZV9wZGF0YShzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTk0LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IHJldCwgaTsKKworCWlmICghcGRhdGEpCisJCXJldHVybjsKKworCXdtX2h1YnNfaGFuZGxlX2FuYWxvZ3VlX3BkYXRhKGNvZGVjLCBwZGF0YS0+bGluZW91dDFfZGlmZiwKKwkJCQkgICAgICBwZGF0YS0+bGluZW91dDJfZGlmZiwKKwkJCQkgICAgICBwZGF0YS0+bGluZW91dDFmYiwKKwkJCQkgICAgICBwZGF0YS0+bGluZW91dDJmYiwKKwkJCQkgICAgICBwZGF0YS0+amRfc2N0aHIsCisJCQkJICAgICAgcGRhdGEtPmpkX3RociwKKwkJCQkgICAgICBwZGF0YS0+bWljYmlhczFfbHZsLAorCQkJCSAgICAgIHBkYXRhLT5taWNiaWFzMl9sdmwpOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJWQgRFJDIGNvbmZpZ3VyYXRpb25zXG4iLCBwZGF0YS0+bnVtX2RyY19jZmdzKTsKKworCWlmIChwZGF0YS0+bnVtX2RyY19jZmdzKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNvbnRyb2xzW10gPSB7CisJCQlTT0NfRU5VTV9FWFQoIkFJRjFEUkMxIE1vZGUiLCB3bTg5OTQtPmRyY19lbnVtLAorCQkJCSAgICAgd204OTk0X2dldF9kcmNfZW51bSwgd204OTk0X3B1dF9kcmNfZW51bSksCisJCQlTT0NfRU5VTV9FWFQoIkFJRjFEUkMyIE1vZGUiLCB3bTg5OTQtPmRyY19lbnVtLAorCQkJCSAgICAgd204OTk0X2dldF9kcmNfZW51bSwgd204OTk0X3B1dF9kcmNfZW51bSksCisJCQlTT0NfRU5VTV9FWFQoIkFJRjJEUkMgTW9kZSIsIHdtODk5NC0+ZHJjX2VudW0sCisJCQkJICAgICB3bTg5OTRfZ2V0X2RyY19lbnVtLCB3bTg5OTRfcHV0X2RyY19lbnVtKSwKKwkJfTsKKworCQkvKiBXZSBuZWVkIGFuIGFycmF5IG9mIHRleHRzIGZvciB0aGUgZW51bSBBUEkgKi8KKwkJd204OTk0LT5kcmNfdGV4dHMgPSBrbWFsbG9jKHNpemVvZihjaGFyICopCisJCQkJCSAgICAqIHBkYXRhLT5udW1fZHJjX2NmZ3MsIEdGUF9LRVJORUwpOworCQlpZiAoIXdtODk5NC0+ZHJjX3RleHRzKSB7CisJCQlkZXZfZXJyKHdtODk5NC0+Y29kZWMuZGV2LAorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgRFJDIGNvbmZpZyB0ZXh0c1xuIiwKKwkJCQlwZGF0YS0+bnVtX2RyY19jZmdzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2RyY19jZmdzOyBpKyspCisJCQl3bTg5OTQtPmRyY190ZXh0c1tpXSA9IHBkYXRhLT5kcmNfY2Znc1tpXS5uYW1lOworCisJCXdtODk5NC0+ZHJjX2VudW0ubWF4ID0gcGRhdGEtPm51bV9kcmNfY2ZnczsKKwkJd204OTk0LT5kcmNfZW51bS50ZXh0cyA9IHdtODk5NC0+ZHJjX3RleHRzOworCisJCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKCZ3bTg5OTQtPmNvZGVjLCBjb250cm9scywKKwkJCQkJICAgQVJSQVlfU0laRShjb250cm9scykpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKHdtODk5NC0+Y29kZWMuZGV2LAorCQkJCSJGYWlsZWQgdG8gYWRkIERSQyBtb2RlIGNvbnRyb2xzOiAlZFxuIiwgcmV0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgV004OTk0X05VTV9EUkM7IGkrKykKKwkJCXdtODk5NF9zZXRfZHJjKGNvZGVjLCBpKTsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlZCBSZVR1bmUgTW9iaWxlIGNvbmZpZ3VyYXRpb25zXG4iLAorCQlwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2Zncyk7CisKKwlpZiAocGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpCisJCXdtODk5NF9oYW5kbGVfcmV0dW5lX21vYmlsZV9wZGF0YSh3bTg5OTQpOworCWVsc2UKKwkJc25kX3NvY19hZGRfY29udHJvbHMoJndtODk5NC0+Y29kZWMsIHdtODk5NF9lcV9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTk0X2VxX2NvbnRyb2xzKSk7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAod204OTk0X2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODk5NF9jb2RlYzsKKwljb2RlYyA9IHdtODk5NF9jb2RlYzsKKworCS8qIHJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJd204OTk0X2hhbmRsZV9wZGF0YShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKKworCXdtX2h1YnNfYWRkX2FuYWxvZ3VlX2NvbnRyb2xzKGNvZGVjKTsKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTk0X3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg5OTRfc25kX2NvbnRyb2xzKSk7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTk0X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTk0X2RhcG1fd2lkZ2V0cykpOworCXdtX2h1YnNfYWRkX2FuYWxvZ3VlX3JvdXRlcyhjb2RlYywgMCwgMCk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5OTQgPSB7CisJLnByb2JlID0gCXdtODk5NF9wcm9iZSwKKwkucmVtb3ZlID0gCXdtODk5NF9yZW1vdmUsCisJLnN1c3BlbmQgPSAJd204OTk0X3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODk5NF9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5OTQpOworCitzdGF0aWMgaW50IHdtODk5NF9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCBpOworCXUxNiByZXY7CisKKwlpZiAod204OTk0X2NvZGVjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkFub3RoZXIgV004OTk0IGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3bTg5OTQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204OTk0X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdtODk5NCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcHJpdmF0ZSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY29kZWMgPSAmd204OTk0LT5jb2RlYzsKKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTk0OworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJY29kZWMtPm5hbWUgPSAiV004OTk0IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHdtODk5NF9yZWFkOworCWNvZGVjLT53cml0ZSA9IHdtODk5NF93cml0ZTsKKwljb2RlYy0+cmVhZGFibGVfcmVnaXN0ZXIgPSB3bTg5OTRfcmVhZGFibGU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODk5NF9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gJndtODk5NF9kYWlbMF07CisJY29kZWMtPm51bV9kYWkgPSAzOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IFdNODk5NF9NQVhfUkVHSVNURVI7CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5OTQtPnJlZ19jYWNoZTsKKwljb2RlYy0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXdtODk5NC0+cGRhdGEgPSBwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCisJLyogRmlsbCB0aGUgY2FjaGUgd2l0aCBwaHlzaWNhbCB2YWx1ZXMgd2UgaW5oZXJpdGVkOyBkb24ndCByZXNldCAqLworCXJldCA9IHdtODk5NF9idWxrX3JlYWQoY29kZWMtPmNvbnRyb2xfZGF0YSwgMCwKKwkJCSAgICAgICBBUlJBWV9TSVpFKHdtODk5NC0+cmVnX2NhY2hlKSAtIDEsCisJCQkgICAgICAgY29kZWMtPnJlZ19jYWNoZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGZpbGwgcmVnaXN0ZXIgY2FjaGU6ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJLyogQ2xlYXIgdGhlIGNhY2hlZCB2YWx1ZXMgZm9yIHVucmVhZGFibGUvdm9sYXRpbGUgcmVnaXN0ZXJzIHRvCisJICogYXZvaWQgcG90ZW50aWFsIGNvbmZ1c2lvbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTQtPnJlZ19jYWNoZSk7IGkrKykKKwkJaWYgKHdtODk5NF92b2xhdGlsZShpKSB8fCAhd204OTk0X3JlYWRhYmxlKGkpKQorCQkJd204OTk0LT5yZWdfY2FjaGVbaV0gPSAwOworCisJLyogU2V0IHJldmlzaW9uLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXYgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9DSElQX1JFVklTSU9OKTsKKwlzd2l0Y2ggKHJldikgeworCWNhc2UgMjoKKwljYXNlIDM6CisJCXdtODk5NC0+aHVicy5kY3NfY29kZXMgPSAtNTsKKwkJd204OTk0LT5odWJzLmhwX3N0YXJ0dXBfbW9kZSA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwkJCSAgIAorCisJLyogUmVtZW1iZXIgaWYgQUlGbkxSQ0xLIGlzIGNvbmZpZ3VyZWQgYXMgYSBHUElPLiAgVGhpcyBzaG91bGQgYmUKKwkgKiBjb25maWd1cmVkIG9uIGluaXQgLSBpZiBhIHN5c3RlbSB3YW50cyB0byBkbyB0aGlzIGR5bmFtaWNhbGx5CisJICogYXQgcnVudGltZSB3ZSBjYW4gZGVhbCB3aXRoIHRoYXQgdGhlbi4KKwkgKi8KKwlyZXQgPSB3bTg5OTRfcmVnX3JlYWQoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0dQSU9fMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgR1BJTzEgc3RhdGU6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisJaWYgKChyZXQgJiBXTTg5OTRfR1BOX0ZOX01BU0spICE9IFdNODk5NF9HUF9GTl9QSU5fU1BFQ0lGSUMpIHsKKwkJd204OTk0LT5scmNsa19zaGFyZWRbMF0gPSAxOworCQl3bTg5OTRfZGFpWzBdLnN5bW1ldHJpY19yYXRlcyA9IDE7CisJfSBlbHNlIHsKKwkJd204OTk0LT5scmNsa19zaGFyZWRbMF0gPSAwOworCX0KKworCXJldCA9IHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCBXTTg5OTRfR1BJT182KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBHUElPNiBzdGF0ZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwlpZiAoKHJldCAmIFdNODk5NF9HUE5fRk5fTUFTSykgIT0gV004OTk0X0dQX0ZOX1BJTl9TUEVDSUZJQykgeworCQl3bTg5OTQtPmxyY2xrX3NoYXJlZFsxXSA9IDE7CisJCXdtODk5NF9kYWlbMV0uc3ltbWV0cmljX3JhdGVzID0gMTsKKwl9IGVsc2UgeworCQl3bTg5OTQtPmxyY2xrX3NoYXJlZFsxXSA9IDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0X2RhaSk7IGkrKykKKwkJd204OTk0X2RhaVtpXS5kZXYgPSBjb2RlYy0+ZGV2OworCisJd204OTk0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwl3bTg5OTRfY29kZWMgPSBjb2RlYzsKKworCS8qIExhdGNoIHZvbHVtZSB1cGRhdGVzIChyaWdodCBvbmx5OyB3ZSBhbHdheXMgZG8gbGVmdCB0aGVuIHJpZ2h0KS4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMxX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMURBQzFfVlUsIFdNODk5NF9BSUYxREFDMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfREFDMl9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFEQUMyX1ZVLCBXTTg5OTRfQUlGMURBQzJfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0RBQ19SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjJEQUNfVlUsIFdNODk5NF9BSUYyREFDX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9BREMxX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMUFEQzFfVlUsIFdNODk5NF9BSUYxQURDMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQURDMl9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFBREMyX1ZVLCBXTTg5OTRfQUlGMUFEQzJfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0FEQ19SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjJBRENfVlUsIFdNODk5NF9BSUYxQURDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0RBQzFfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9EQUMxX1ZVLCBXTTg5OTRfREFDMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0RBQzJfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9EQUMyX1ZVLCBXTTg5OTRfREFDMl9WVSk7CisKKwkvKiBTZXQgdGhlIGxvdyBiaXQgb2YgdGhlIDNEIHN0ZXJlbyBkZXB0aCBzbyBUTFYgbWF0Y2hlcyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzFfRklMVEVSU18yLAorCQkJICAgIDEgPDwgV004OTk0X0FJRjFEQUMxXzNEX0dBSU5fU0hJRlQsCisJCQkgICAgMSA8PCBXTTg5OTRfQUlGMURBQzFfM0RfR0FJTl9TSElGVCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfREFDMl9GSUxURVJTXzIsCisJCQkgICAgMSA8PCBXTTg5OTRfQUlGMURBQzJfM0RfR0FJTl9TSElGVCwKKwkJCSAgICAxIDw8IFdNODk5NF9BSUYxREFDMl8zRF9HQUlOX1NISUZUKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9EQUNfRklMVEVSU18yLAorCQkJICAgIDEgPDwgV004OTk0X0FJRjJEQUNfM0RfR0FJTl9TSElGVCwKKwkJCSAgICAxIDw8IFdNODk5NF9BSUYyREFDXzNEX0dBSU5fU0hJRlQpOworCisJd204OTk0X3VwZGF0ZV9jbGFzc193KGNvZGVjKTsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMod204OTk0X2RhaSwgQVJSQVlfU0laRSh3bTg5OTRfZGFpKSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUlzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgd204OTk0KTsKKworCXJldHVybiAwOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZSh3bTg5OTQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdtODk5NF9jb2RlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5OTQtPmNvZGVjOworCisJd204OTk0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyh3bTg5OTRfZGFpLCBBUlJBWV9TSVpFKHdtODk5NF9kYWkpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODk5NC0+Y29kZWMpOworCWtmcmVlKHdtODk5NCk7CisJd204OTk0X2NvZGVjID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTg5OTRfY29kZWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gIndtODk5NC1jb2RlYyIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9LAorCS5wcm9iZSA9IHdtODk5NF9jb2RlY19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod204OTk0X2NvZGVjX3JlbW92ZSksCit9OworCitzdGF0aWMgX19pbml0IGludCB3bTg5OTRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndtODk5NF9jb2RlY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQod204OTk0X2luaXQpOworCitzdGF0aWMgX19leGl0IHZvaWQgd204OTk0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204OTk0X2NvZGVjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTg5OTRfZXhpdCk7CisKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODk5NCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTg5OTQtY29kZWMiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNWUxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiB3bTg5OTQuaCAgLS0gIFdNODk5NCBTb2MgQXVkaW8gZHJpdmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9XTTg5OTRfSAorI2RlZmluZSBfV004OTk0X0gKKworI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTk0OworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5OTRfZGFpW107CisKKy8qIFNvdXJjZXMgZm9yIEFJRjEvMiBTWVNDTEsgLSB1c2Ugd2l0aCBzZXRfZGFpX3N5c2NsaygpICovCisjZGVmaW5lIFdNODk5NF9TWVNDTEtfTUNMSzEgMQorI2RlZmluZSBXTTg5OTRfU1lTQ0xLX01DTEsyIDIKKyNkZWZpbmUgV004OTk0X1NZU0NMS19GTEwxICAzCisjZGVmaW5lIFdNODk5NF9TWVNDTEtfRkxMMiAgNAorCisjZGVmaW5lIFdNODk5NF9GTEwxIDEKKyNkZWZpbmUgV004OTk0X0ZMTDIgMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCmluZGV4IGM1OGFhYjMuLmNlYjg2YjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwpAQCAtMjMsMTMgKzIzLDEyIEBACiAjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgIndtOTcxMy5oIgogCi0jZGVmaW5lIFdNOTcxM19WRVJTSU9OICIwLjE1IgotCiBzdHJ1Y3Qgd205NzEzX3ByaXYgewogCXUzMiBwbGxfaW47IC8qIFBMTCBpbnB1dCBmcmVxdWVuY3kgKi8KIH07CkBAIC0xMTUsMTUgKzExNCwyNyBAQAogU09DX0VOVU1fU0lOR0xFKE1JQ0JfTVVYLCAwLCAyLCB3bTk3MTNfbWljYl9zZWxlY3QpLCAvKiBtaWMgc2VsZWN0aW9uIDE5ICovCiB9OwogCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0X3RsdiwgLTQ2NTAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobWFpbl90bHYsIC0zNDUwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG1pc2NfdGx2LCAtMTUwMCwgMzAwLCAwKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWljX3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDIpLAorCTAsIDIsIFRMVl9EQl9TQ0FMRV9JVEVNKDEyMDAsIDYwMCwgMCksCisJMywgMywgVExWX0RCX1NDQUxFX0lURU0oMzAwMCwgMCwgMCksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd205NzEzX3NuZF9hYzk3X2NvbnRyb2xzW10gPSB7Ci1TT0NfRE9VQkxFKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSLCA4LCAwLCAzMSwgMSksCitTT0NfRE9VQkxFX1RMVigiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUiwgOCwgMCwgMzEsIDEsIG91dF90bHYpLAogU09DX0RPVUJMRSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X01BU1RFUiwgMTUsIDcsIDEsIDEpLAotU09DX0RPVUJMRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfSEVBRFBIT05FLCA4LCAwLCAzMSwgMSksCitTT0NfRE9VQkxFX1RMVigiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfSEVBRFBIT05FLCA4LCAwLCAzMSwgMSwKKwkgICAgICAgb3V0X3RsdiksCiBTT0NfRE9VQkxFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19IRUFEUEhPTkUsIDE1LCA3LCAxLCAxKSwKLVNPQ19ET1VCTEUoIkxpbmUgSW4gVm9sdW1lIiwgQUM5N19QQ19CRUVQLCA4LCAwLCAzMSwgMSksCi1TT0NfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QSE9ORSwgOCwgMCwgMzEsIDEpLAotU09DX1NJTkdMRSgiTWljIDEgVm9sdW1lIiwgQUM5N19NSUMsIDgsIDMxLCAxKSwKLVNPQ19TSU5HTEUoIk1pYyAyIFZvbHVtZSIsIEFDOTdfTUlDLCAwLCAzMSwgMSksCitTT0NfRE9VQkxFX1RMVigiTGluZSBJbiBWb2x1bWUiLCBBQzk3X1BDX0JFRVAsIDgsIDAsIDMxLCAxLCBtYWluX3RsdiksCitTT0NfRE9VQkxFX1RMVigiUENNIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUEhPTkUsIDgsIDAsIDMxLCAxLCBtYWluX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTWljIDEgVm9sdW1lIiwgQUM5N19NSUMsIDgsIDMxLCAxLCBtYWluX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTWljIDIgVm9sdW1lIiwgQUM5N19NSUMsIDAsIDMxLCAxLCBtYWluX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTWljIDEgUHJlYW1wIFZvbHVtZSIsIEFDOTdfM0RfQ09OVFJPTCwgMTAsIDMsIDAsIG1pY190bHYpLAorU09DX1NJTkdMRV9UTFYoIk1pYyAyIFByZWFtcCBWb2x1bWUiLCBBQzk3XzNEX0NPTlRST0wsIDEyLCAzLCAwLCBtaWNfdGx2KSwKIAogU09DX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikgU3dpdGNoIiwgQUM5N19MSU5FLCA1LCAxLCAwKSwKIFNPQ19TSU5HTEUoIk1pYyBIZWFkcGhvbmUgTWl4ZXIgVm9sdW1lIiwgQUM5N19MSU5FLCAwLCA3LCAxKSwKQEAgLTEzMyw3ICsxNDQsNyBAQAogU09DX0RPVUJMRSgiQ2FwdHVyZSBWb2x1bWUiLCBBQzk3X0NELCA4LCAwLCAzMSwgMCksCiBTT0NfU0lOR0xFKCJDYXB0dXJlIFpDIFN3aXRjaCIsIEFDOTdfQ0QsIDcsIDEsIDApLAogCi1TT0NfU0lOR0xFKCJDYXB0dXJlIHRvIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X1ZJREVPLCAxMSwgNywgMSksCitTT0NfU0lOR0xFX1RMVigiQ2FwdHVyZSB0byBIZWFkcGhvbmUgVm9sdW1lIiwgQUM5N19WSURFTywgMTEsIDcsIDEsIG1pc2NfdGx2KSwKIFNPQ19TSU5HTEUoIkNhcHR1cmUgdG8gTW9ubyBCb29zdCAoKzIwZEIpIFN3aXRjaCIsIEFDOTdfVklERU8sIDgsIDEsIDApLAogU09DX1NJTkdMRSgiQ2FwdHVyZSBBREMgQm9vc3QgKCsyMGRCKSBTd2l0Y2giLCBBQzk3X1ZJREVPLCA2LCAxLCAwKSwKIApAQCAtMTU0LDI4ICsxNjUsNDMgQEAKIAogU09DX1NJTkdMRSgiT3V0NCBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X01BU1RFUl9NT05PLCAxNSwgMSwgMSksCiBTT0NfU0lOR0xFKCJPdXQ0IFBsYXliYWNrIFpDIFN3aXRjaCIsIEFDOTdfTUFTVEVSX01PTk8sIDE0LCAxLCAwKSwKLVNPQ19TSU5HTEUoIk91dDQgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfTU9OTywgOCwgNjMsIDEpLAorU09DX1NJTkdMRV9UTFYoIk91dDQgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfTU9OTywgOCwgMzEsIDEsIG91dF90bHYpLAogCiBTT0NfU0lOR0xFKCJPdXQzIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfTUFTVEVSX01PTk8sIDcsIDEsIDEpLAogU09DX1NJTkdMRSgiT3V0MyBQbGF5YmFjayBaQyBTd2l0Y2giLCBBQzk3X01BU1RFUl9NT05PLCA2LCAxLCAwKSwKLVNPQ19TSU5HTEUoIk91dDMgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfTU9OTywgMCwgNjMsIDEpLAorU09DX1NJTkdMRV9UTFYoIk91dDMgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVJfTU9OTywgMCwgMzEsIDEsIG91dF90bHYpLAogCi1TT0NfU0lOR0xFKCJNb25vIENhcHR1cmUgVm9sdW1lIiwgQUM5N19NQVNURVJfVE9ORSwgOCwgMzEsIDEpLAorU09DX1NJTkdMRV9UTFYoIk1vbm8gQ2FwdHVyZSBWb2x1bWUiLCBBQzk3X01BU1RFUl9UT05FLCA4LCAzMSwgMSwgbWFpbl90bHYpLAogU09DX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X01BU1RFUl9UT05FLCA3LCAxLCAxKSwKIFNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgWkMgU3dpdGNoIiwgQUM5N19NQVNURVJfVE9ORSwgNiwgMSwgMCksCi1TT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSX1RPTkUsIDAsIDMxLCAxKSwKK1NPQ19TSU5HTEVfVExWKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSX1RPTkUsIDAsIDMxLCAxLCBvdXRfdGx2KSwKIAotU09DX1NJTkdMRSgiQmVlcCBQbGF5YmFjayBIZWFkcGhvbmUgVm9sdW1lIiwgQUM5N19BVVgsIDEyLCA3LCAxKSwKLVNPQ19TSU5HTEUoIkJlZXAgUGxheWJhY2sgU3BlYWtlciBWb2x1bWUiLCBBQzk3X0FVWCwgOCwgNywgMSksCi1TT0NfU0lOR0xFKCJCZWVwIFBsYXliYWNrIE1vbm8gVm9sdW1lIiwgQUM5N19BVVgsIDQsIDcsIDEpLAorU09DX1NJTkdMRV9UTFYoIkhlYWRwaG9uZSBNaXhlciBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfQVVYLCAxMiwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorU09DX1NJTkdMRV9UTFYoIlNwZWFrZXIgTWl4ZXIgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0FVWCwgOCwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAorU09DX1NJTkdMRV9UTFYoIk1vbm8gTWl4ZXIgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0FVWCwgNCwgNywgMSwgbWlzY190bHYpLAogCi1TT0NfU0lOR0xFKCJWb2ljZSBQbGF5YmFjayBIZWFkcGhvbmUgVm9sdW1lIiwgQUM5N19QQ00sIDEyLCA3LCAxKSwKK1NPQ19TSU5HTEVfVExWKCJWb2ljZSBQbGF5YmFjayBIZWFkcGhvbmUgVm9sdW1lIiwgQUM5N19QQ00sIDEyLCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCiBTT0NfU0lOR0xFKCJWb2ljZSBQbGF5YmFjayBNYXN0ZXIgVm9sdW1lIiwgQUM5N19QQ00sIDgsIDcsIDEpLAogU09DX1NJTkdMRSgiVm9pY2UgUGxheWJhY2sgTW9ubyBWb2x1bWUiLCBBQzk3X1BDTSwgNCwgNywgMSksCiAKK1NPQ19TSU5HTEVfVExWKCJIZWFkcGhvbmUgTWl4ZXIgQXV4IFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUkVDX1NFTCwgMTIsIDcsIDEsCisJICAgICAgIG1pc2NfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIlNwZWFrZXIgTWl4ZXIgVm9pY2UgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QQ00sIDgsIDcsIDEsCisJICAgICAgIG1pc2NfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJTcGVha2VyIE1peGVyIEF1eCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1JFQ19TRUwsIDgsIDcsIDEsCisJICAgICAgIG1pc2NfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIk1vbm8gTWl4ZXIgVm9pY2UgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19QQ00sIDQsIDcsIDEsCisJICAgICAgIG1pc2NfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNb25vIE1peGVyIEF1eCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1JFQ19TRUwsIDQsIDcsIDEsCisJICAgICAgIG1pc2NfdGx2KSwKKwogU09DX1NJTkdMRSgiQXV4IFBsYXliYWNrIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X1JFQ19TRUwsIDEyLCA3LCAxKSwKIFNPQ19TSU5HTEUoIkF1eCBQbGF5YmFjayBNYXN0ZXIgVm9sdW1lIiwgQUM5N19SRUNfU0VMLCA4LCA3LCAxKSwKLVNPQ19TSU5HTEUoIkF1eCBQbGF5YmFjayBNb25vIFZvbHVtZSIsIEFDOTdfUkVDX1NFTCwgNCwgNywgMSksCiAKIFNPQ19FTlVNKCJCYXNzIENvbnRyb2wiLCB3bTk3MTNfZW51bVsxNl0pLAogU09DX1NJTkdMRSgiQmFzcyBDdXQtb2ZmIFN3aXRjaCIsIEFDOTdfR0VORVJBTF9QVVJQT1NFLCAxMiwgMSwgMSksCkBAIC0xMTg2LDggKzEyMTIsNiBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlpbnQgcmV0ID0gMCwgcmVnOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiV005NzEzL1dNOTcxNCBTb0MgQXVkaW8gQ29kZWMgJXNcbiIsIFdNOTcxM19WRVJTSU9OKTsKLQogCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksCiAJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKHNvY2Rldi0+Y2FyZC0+Y29kZWMgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKaW5kZXggZDczYzMwNS4uMGFkOWY1ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTY4LDI0ICs2OCw3NyBAQAogCWludCBjb3VudCA9IDA7CiAKIAlkZXZfZGJnKGNvZGVjLT5kZXYsICJXYWl0aW5nIGZvciBEQyBzZXJ2by4uLlxuIik7CisKIAlkbyB7CiAJCWNvdW50Kys7CiAJCW1zbGVlcCgxKTsKIAkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fUkVBREJBQ0tfMCk7Ci0JCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvIHN0YXR1czogJXhcbiIsIHJlZyk7Ci0JfSB3aGlsZSAoKHJlZyAmIFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0spCi0JCSAhPSBXTTg5OTNfRENTX0NBTF9DT01QTEVURV9NQVNLICYmIGNvdW50IDwgMTAwMCk7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvOiAleFxuIiwgcmVnKTsKKwl9IHdoaWxlIChyZWcgJiBXTTg5OTNfRENTX0RBVEFQQVRIX0JVU1kpOwogCi0JaWYgKChyZWcgJiBXTTg5OTNfRENTX0NBTF9DT01QTEVURV9NQVNLKQotCSAgICAhPSBXTTg5OTNfRENTX0NBTF9DT01QTEVURV9NQVNLKQorCWlmIChyZWcgJiBXTTg5OTNfRENTX0RBVEFQQVRIX0JVU1kpCiAJCWRldl9lcnIoY29kZWMtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBEQyBTZXJ2b1xuIik7CiB9CiAKIC8qCisgKiBTdGFydHVwIGNhbGlicmF0aW9uIG9mIHRoZSBEQyBzZXJ2bworICovCitzdGF0aWMgdm9pZCBjYWxpYnJhdGVfZGNfc2Vydm8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bV9odWJzX2RhdGEgKmh1YnMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXUxNiByZWcsIGRjc19jZmc7CisKKwkvKiBTZXQgZm9yIDMyIHNlcmllcyB1cGRhdGVzICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0RDX1NFUlZPXzEsCisJCQkgICAgV004OTkzX0RDU19TRVJJRVNfTk9fMDFfTUFTSywKKwkJCSAgICAzMiA8PCBXTTg5OTNfRENTX1NFUklFU19OT18wMV9TSElGVCk7CisKKwkvKiBFbmFibGUgdGhlIERDIHNlcnZvLiAgV3JpdGUgYWxsIGJpdHMgdG8gYXZvaWQgdHJpZ2dlcmluZyBzdGFydHVwCisJICogb3Igd3JpdGUgY2FsaWJyYXRpb24uCisJICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0RDX1NFUlZPXzAsCisJCQkgICAgMHhGRkZGLAorCQkJICAgIFdNODk5M19EQ1NfRU5BX0NIQU5fMCB8CisJCQkgICAgV004OTkzX0RDU19FTkFfQ0hBTl8xIHwKKwkJCSAgICBXTTg5OTNfRENTX1RSSUdfU0VSSUVTXzEgfAorCQkJICAgIFdNODk5M19EQ1NfVFJJR19TRVJJRVNfMCk7CisKKwl3YWl0X2Zvcl9kY19zZXJ2byhjb2RlYyk7CisKKwkvKiBBcHBseSBjb3JyZWN0aW9uIHRvIERDIHNlcnZvIHJlc3VsdCAqLworCWlmIChodWJzLT5kY3NfY29kZXMpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQXBwbHlpbmcgJWQgY29kZSBEQyBzZXJ2byBjb3JyZWN0aW9uXG4iLAorCQkJaHVicy0+ZGNzX2NvZGVzKTsKKworCQkvKiBIUE9VVDFMICovCisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0RDX1NFUlZPX1JFQURCQUNLXzEpICYKKwkJCVdNODk5M19EQ1NfSU5URUdfQ0hBTl8wX01BU0s7OworCQlyZWcgKz0gaHVicy0+ZGNzX2NvZGVzOworCQlkY3NfY2ZnID0gcmVnIDw8IFdNODk5M19EQ1NfREFDX1dSX1ZBTF8xX1NISUZUOworCisJCS8qIEhQT1VUMVIgKi8KKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fUkVBREJBQ0tfMikgJgorCQkJV004OTkzX0RDU19JTlRFR19DSEFOXzFfTUFTSzsKKwkJcmVnICs9IGh1YnMtPmRjc19jb2RlczsKKwkJZGNzX2NmZyB8PSByZWc7CisKKwkJLyogRG8gaXQgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0RDX1NFUlZPXzMsIGRjc19jZmcpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMCwKKwkJCQkgICAgV004OTkzX0RDU19UUklHX0RBQ19XUl8wIHwKKwkJCQkgICAgV004OTkzX0RDU19UUklHX0RBQ19XUl8xLAorCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzAgfAorCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzEpOworCisJCXdhaXRfZm9yX2RjX3NlcnZvKGNvZGVjKTsKKwl9Cit9CisKKy8qCiAgKiBVcGRhdGUgdGhlIERDIHNlcnZvIGNhbGlicmF0aW9uIG9uIGdhaW4gY2hhbmdlcwogICovCiBzdGF0aWMgaW50IHdtODk5M19wdXRfZGNfc2Vydm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IHJldDsKQEAgLTI1MSw2ICszMDQsNDcgQEAKIAkgICAgICAgbGluZV90bHYpLAogfTsKIAorc3RhdGljIGludCBocF9zdXBwbHlfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCB3bV9odWJzX2RhdGEgKmh1YnMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCXN3aXRjaCAoaHVicy0+aHBfc3RhcnR1cF9tb2RlKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQkvKiBFbmFibGUgdGhlIGhlYWRwaG9uZSBhbXAgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9FTkEgfAorCQkJCQkgICAgV004OTkzX0hQT1VUMVJfRU5BLAorCQkJCQkgICAgV004OTkzX0hQT1VUMUxfRU5BIHwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFSX0VOQSk7CisKKwkJCS8qIEVuYWJsZSB0aGUgc2Vjb25kIHN0YWdlICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFMX0RMWSB8CisJCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9ETFksCisJCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9ETFkgfAorCQkJCQkgICAgV004OTkzX0hQT1VUMVJfRExZKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5rbm93biBIUCBzdGFydHVwIG1vZGUgJWRcbiIsCisJCQkJaHVicy0+aHBfc3RhcnR1cF9tb2RlKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQ0hBUkdFX1BVTVBfMSwKKwkJCQkgICAgV004OTkzX0NQX0VOQSwgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGhwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKQEAgLTI3MSwxNCArMzY1LDExIEBACiAJCXJlZyB8PSBXTTg5OTNfSFBPVVQxTF9ETFkgfCBXTTg5OTNfSFBPVVQxUl9ETFk7CiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLCByZWcpOwogCi0JCS8qIFN0YXJ0IHRoZSBEQyBzZXJ2byAqLwotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMCwKLQkJCQkgICAgMHhGRkZGLAotCQkJCSAgICBXTTg5OTNfRENTX0VOQV9DSEFOXzAgfAotCQkJCSAgICBXTTg5OTNfRENTX0VOQV9DSEFOXzEgfAotCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfU1RBUlRVUF8xIHwKLQkJCQkgICAgV004OTkzX0RDU19UUklHX1NUQVJUVVBfMCk7Ci0JCXdhaXRfZm9yX2RjX3NlcnZvKGNvZGVjKTsKKwkJLyogU21hbGxlc3Qgc3VwcG9ydGVkIHVwZGF0ZSBpbnRlcnZhbCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMSwKKwkJCQkgICAgV004OTkzX0RDU19USU1FUl9QRVJJT0RfMDFfTUFTSywgMSk7CisKKwkJY2FsaWJyYXRlX2RjX3NlcnZvKGNvZGVjKTsKIAogCQlyZWcgfD0gV004OTkzX0hQT1VUMVJfT1VUUCB8IFdNODk5M19IUE9VVDFSX1JNVl9TSE9SVCB8CiAJCQlXTTg5OTNfSFBPVVQxTF9PVVRQIHwgV004OTkzX0hQT1VUMUxfUk1WX1NIT1JUOwpAQCAtMjg2LDIzICszNzcsMTkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgotCQlyZWcgJj0gfihXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlQgfAotCQkJIFdNODk5M19IUE9VVDFMX0RMWSB8Ci0JCQkgV004OTkzX0hQT1VUMUxfT1VUUCB8Ci0JCQkgV004OTkzX0hQT1VUMVJfUk1WX1NIT1JUIHwKLQkJCSBXTTg5OTNfSFBPVVQxUl9ETFkgfAotCQkJIFdNODk5M19IUE9VVDFSX09VVFApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCwKKwkJCQkgICAgV004OTkzX0hQT1VUMUxfRExZIHwKKwkJCQkgICAgV004OTkzX0hQT1VUMVJfRExZIHwKKwkJCQkgICAgV004OTkzX0hQT1VUMUxfUk1WX1NIT1JUIHwKKwkJCQkgICAgV004OTkzX0hQT1VUMVJfUk1WX1NIT1JULCAwKTsKIAotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMCwKLQkJCQkgICAgMHhmZmZmLCAwKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FOQUxPR1VFX0hQXzAsCisJCQkJICAgIFdNODk5M19IUE9VVDFMX09VVFAgfAorCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9PVVRQLCAwKTsKIAotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCwgcmVnKTsKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwKIAkJCQkgICAgV004OTkzX0hQT1VUMUxfRU5BIHwgV004OTkzX0hQT1VUMVJfRU5BLAogCQkJCSAgICAwKTsKLQotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQ0hBUkdFX1BVTVBfMSwKLQkJCQkgICAgV004OTkzX0NQX0VOQSwgMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtNDczLDYgKzU2MCw4IEBACiBTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IE91dHB1dCBQR0EiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8zLCA3LCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0EoIlJpZ2h0IE91dHB1dCBQR0EiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8zLCA2LCAwLCBOVUxMLCAwKSwKIAorU05EX1NPQ19EQVBNX1NVUFBMWSgiSGVhZHBob25lIFN1cHBseSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgaHBfc3VwcGx5X2V2ZW50LCAKKwkJICAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAogU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLAogCQkgICBOVUxMLCAwLAogCQkgICBocF9ldmVudCwgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLApAQCAtNjI2LDYgKzcxNSw3IEBACiAJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBNdXgiIH0sCiAJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJSaWdodCBIZWFkcGhvbmUgTXV4IiB9LAogCXsgIkhlYWRwaG9uZSBQR0EiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkhlYWRwaG9uZSBTdXBwbHkiIH0sCiAKIAl7ICJIUE9VVDFMIiwgTlVMTCwgIkhlYWRwaG9uZSBQR0EiIH0sCiAJeyAiSFBPVVQxUiIsIE5VTEwsICJIZWFkcGhvbmUgUEdBIiB9LApAQCAtNzUzLDYgKzg0MywxMiBAQAogCQkJCSAgICBXTTg5OTNfTElORU9VVDJfTU9ERSwKIAkJCQkgICAgV004OTkzX0xJTkVPVVQyX01PREUpOwogCisJLyogSWYgdGhlIGxpbmUgb3V0cHV0cyBhcmUgZGlmZmVyZW50aWFsIHRoZW4gd2UgYXJlbid0IHByZXNlbnRpbmcKKwkgKiBWTUlEIGFzIGFuIG91dHB1dCBhbmQgY2FuIGRpc2FibGUgaXQuCisJICovCisJaWYgKGxpbmVvdXQxX2RpZmYgJiYgbGluZW91dDJfZGlmZikKKwkJY29kZWMtPmlkbGVfYmlhc19vZmYgPSAxOworCiAJaWYgKGxpbmVvdXQxZmIpCiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19BRERJVElPTkFMX0NPTlRST0wsCiAJCQkJICAgIFdNODk5M19MSU5FT1VUMV9GQiwgV004OTkzX0xJTkVPVVQxX0ZCKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5oIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmgKaW5kZXggMzZkM2ZiYS4uNDIwMTA0ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmgKQEAgLTE4LDYgKzE4LDEyIEBACiAKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgd21faHVic19zcGttaXhfdGx2W107CiAKKy8qIFRoaXMgKm11c3QqIGJlIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBjb2RlYy0+cHJpdmF0ZV9kYXRhIHN0cnVjdCAqLworc3RydWN0IHdtX2h1YnNfZGF0YSB7CisJaW50IGRjc19jb2RlczsKKwlpbnQgaHBfc3RhcnR1cF9tb2RlOworfTsKKwogZXh0ZXJuIGludCB3bV9odWJzX2FkZF9hbmFsb2d1ZV9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqKTsKIGV4dGVybiBpbnQgd21faHVic19hZGRfYW5hbG9ndWVfcm91dGVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIGludCwgaW50KTsKIGV4dGVybiBpbnQgd21faHVic19oYW5kbGVfYW5hbG9ndWVfcGRhdGEoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwppbmRleCAwYTMwMmUxLi5hYjY1MThkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCkBAIC03NjcsMTQgKzc2NywyNiBAQAogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoIWRldi0+Y2xrX2FjdGl2ZSkgeworCQkJY2xrX2VuYWJsZShkZXYtPmNsayk7CisJCQlkZXYtPmNsa19hY3RpdmUgPSAxOworCQl9CiAJCWRhdmluY2lfbWNhc3Bfc3RhcnQoZGV2LCBzdWJzdHJlYW0tPnN0cmVhbSk7CiAJCWJyZWFrOwogCi0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwkJZGF2aW5jaV9tY2FzcF9zdG9wKGRldiwgc3Vic3RyZWFtLT5zdHJlYW0pOworCQlpZiAoZGV2LT5jbGtfYWN0aXZlKSB7CisJCQljbGtfZGlzYWJsZShkZXYtPmNsayk7CisJCQlkZXYtPmNsa19hY3RpdmUgPSAwOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgogCQlkYXZpbmNpX21jYXNwX3N0b3AoZGV2LCBzdWJzdHJlYW0tPnN0cmVhbSk7CiAJCWJyZWFrOwpAQCAtODY2LDYgKzg3OCw3IEBACiAJfQogCiAJY2xrX2VuYWJsZShkZXYtPmNsayk7CisJZGV2LT5jbGtfYWN0aXZlID0gMTsKIAogCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKG1lbS0+c3RhcnQpOwogCWRldi0+b3BfbW9kZSA9IHBkYXRhLT5vcF9tb2RlOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCmluZGV4IDU4MmM5MjQuLmU3NTViNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAlpbnQgc2FtcGxlX3JhdGU7CiAJc3RydWN0IGNsayAqY2xrOwogCXVuc2lnbmVkIGludCBjb2RlY19mbXQ7CisJdTggY2xrX2FjdGl2ZTsKIAogCS8qIE1jQVNQIHNwZWNpZmljIGRhdGEgKi8KIAlpbnQJdGRtX3Nsb3RzOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKaW5kZXggYWQ0ZDdmNC4uODBjN2ZkZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCkBAIC00OSw3ICs0OSw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3BsYXliYWNrID0gewogCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAogCQkgU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAotCQkgU05EUlZfUENNX0lORk9fUEFVU0UpLAorCQkgU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUpLAogCS5mb3JtYXRzID0gKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKSwKIAkucmF0ZXMgPSAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHwKIAkJICBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZWZpa2EtYXVkaW8tZmFicmljLmMgYi9zb3VuZC9zb2MvZnNsL2VmaWthLWF1ZGlvLWZhYnJpYy5jCmluZGV4IDMzMjZlMmEuLjFhNWI4ZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZWZpa2EtYXVkaW8tZmFicmljLmMKKysrIGIvc291bmQvc29jL2ZzbC9lZmlrYS1hdWRpby1mYWJyaWMuYwpAQCAtNTUsNyArNTUsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IHJjOwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoImJwbGFuLGVmaWthIikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoImJwbGFuLGVmaWthIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2FyZC5wbGF0Zm9ybSA9ICZtcGM1MjAwX2F1ZGlvX2RtYV9wbGF0Zm9ybTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvcGNtMDMwLWF1ZGlvLWZhYnJpYy5jIGIvc291bmQvc29jL2ZzbC9wY20wMzAtYXVkaW8tZmFicmljLmMKaW5kZXggYjkyOGVmNy4uNjY0NGNiYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9wY20wMzAtYXVkaW8tZmFicmljLmMKKysrIGIvc291bmQvc29jL2ZzbC9wY20wMzAtYXVkaW8tZmFicmljLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCWludCByYzsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJwaHl0ZWMscGNtMDMwIikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInBoeXRlYyxwY20wMzAiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljYXJkLnBsYXRmb3JtID0gJm1wYzUyMDBfYXVkaW9fZG1hX3BsYXRmb3JtOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9LY29uZmlnIGIvc291bmQvc29jL2lteC9LY29uZmlnCmluZGV4IGE3MDA1NjIuLmM3ZDBmZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvaW14L0tjb25maWcKQEAgLTEsMjEgKzEsMTMgQEAKLWNvbmZpZyBTTkRfTVgxX01YMl9TT0MKLQl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciBGcmVlY2FsZSBpLk1YMXggaS5NWDJ4IENQVXMiCi0JZGVwZW5kcyBvbiBBUkNIX01YMiB8fCBBUkNIX01YMQorY29uZmlnIFNORF9JTVhfU09DCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgRnJlZXNjYWxlIGkuTVggQ1BVcyIKKwlkZXBlbmRzIG9uIEFSQ0hfTVhDICYmIEJST0tFTgogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IEZJUQorCXNlbGVjdCBTTkRfU09DX0FDOTdfQlVTCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCi0JICB0aGUgTVgxIG9yIE1YMiBTU0kgaW50ZXJmYWNlLgorCSAgdGhlIGkuTVggU1NJIGludGVyZmFjZS4KIAogY29uZmlnIFNORF9NWENfU09DX1NTSQogCXRyaXN0YXRlCiAKLWNvbmZpZyBTTkRfU09DX01YMjdWSVNfV004OTc0Ci0JdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBNWDI3IC0gV004OTc0IFZpc3N0cmltX3NtMTAgYm9hcmQiCi0JZGVwZW5kcyBvbiBTTkRfTVgxX01YMl9TT0MgJiYgTUFDSF9NWDI3ICYmIE1BQ0hfSU1YMjdfVklTU1RSSU1fTTEwCi0Jc2VsZWN0IFNORF9NWENfU09DX1NTSQotCXNlbGVjdCBTTkRfU09DX1dNODk3NAotCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gVmlzc3RyaW0gU00xMAotCSAgYm9hcmQgd2l0aCBXTTg5NzQuCi0KLQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUKaW5kZXggYzJmZmQyYy4uOWY4YmI5MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvaW14L01ha2VmaWxlCkBAIC0xLDEwICsxLDEyIEBACiAjIGkuTVggUGxhdGZvcm0gU3VwcG9ydAotc25kLXNvYy1teDFfbXgyLW9ianMgOj0gbXgxX214Mi1wY20ubwotc25kLXNvYy1teGMtc3NpLW9ianMgOj0gbXhjLXNzaS5vCitzbmQtc29jLWlteC1vYmpzIDo9IGlteC1zc2kubyBpbXgtcGNtLWZpcS5vCiAKLW9iai0kKENPTkZJR19TTkRfTVgxX01YMl9TT0MpICs9IHNuZC1zb2MtbXgxX214Mi5vCi1vYmotJChDT05GSUdfU05EX01YQ19TT0NfU1NJKSArPSBzbmQtc29jLW14Yy1zc2kubworaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc25kLXNvYy1pbXgtb2JqcyArPSBpbXgtcGNtLWRtYS1teDIubworZW5kaWYKKworb2JqLSQoQ09ORklHX1NORF9JTVhfU09DKSArPSBzbmQtc29jLWlteC5vCiAKICMgaS5NWCBNYWNoaW5lIFN1cHBvcnQKLXNuZC1zb2MtbXgyN3Zpcy13bTg5NzQtb2JqcyA6PSBteDI3dmlzX3dtODk3NC5vCi1vYmotJChDT05GSUdfU05EX1NPQ19NWDI3VklTX1dNODk3NCkgKz0gc25kLXNvYy1teDI3dmlzLXdtODk3NC5vCitzbmQtc29jLXBoeWNvcmUtYWM5Ny1vYmpzIDo9IHBoeWNvcmUtYWM5Ny5vCitvYmotJChDT05GSUdfU05EX1NPQ19QSFlDT1JFX0FDOTcpICs9IHNuZC1zb2MtcGh5Y29yZS1hYzk3Lm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1kbWEtbXgyLmMgYi9zb3VuZC9zb2MvaW14L2lteC1wY20tZG1hLW14Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDUyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L2lteC1wY20tZG1hLW14Mi5jCkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogaW14LXBjbS1kbWEtbXgyLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gY29kZSBjb3B5cmlnaHRlZCBieSBGcmVlc2NhbGUsCisgKiBMaWFtIEdpcmR3b29kLCBKYXZpZXIgTWFydGluIGFuZCBwcm9iYWJseSBvdGhlcnMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxtYWNoL2RtYS1teDEtbXgyLmg+CisKKyNpbmNsdWRlICJpbXgtc3NpLmgiCisKK3N0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSB7CisJaW50IHNnX2NvdW50OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfbGlzdDsKKwlpbnQgcGVyaW9kOworCWludCBwZXJpb2RzOworCXVuc2lnbmVkIGxvbmcgZG1hX2FkZHI7CisJaW50IGRtYTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBwZXJpb2RfY250OworCXZvaWQgKmJ1ZjsKKwlpbnQgcGVyaW9kX3RpbWU7Cit9OworCisvKiBDYWxsZWQgYnkgdGhlIERNQSBmcmFtZXdvcmsgd2hlbiBhIHBlcmlvZCBoYXMgZWxhcHNlZCAqLworc3RhdGljIHZvaWQgaW14X3NzaV9kbWFfcHJvZ3Jlc3Npb24oaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEsCisJCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBkYXRhOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWlmICghc2cpCisJCXJldHVybjsKKworCXJ1bnRpbWUgPSBpcHJ0ZC0+c3Vic3RyZWFtLT5ydW50aW1lOworCisJaXBydGQtPm9mZnNldCA9IHNnLT5kbWFfYWRkcmVzcyAtIHJ1bnRpbWUtPmRtYV9hZGRyOworCisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChpcHJ0ZC0+c3Vic3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQgaW14X3NzaV9kbWFfY2FsbGJhY2soaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEpCit7CisJcHJfZXJyKCIlcyBzaG91bGRuJ3QgYmUgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9pbXhfZG1hX2Vycl9jYWxsYmFjayhpbnQgY2hhbm5lbCwgdm9pZCAqZGF0YSwgaW50IGVycikKK3sKKwlwcl9lcnIoIkRNQSBlcnJvciBjYWxsYmFjayBjYWxsZWRcbiIpOworCisJcHJfZXJyKCJETUEgdGltZW91dCBvbiBjaGFubmVsICVkIC0lcyVzJXMlc1xuIiwKKwkJIGNoYW5uZWwsCisJCSBlcnIgJiBJTVhfRE1BX0VSUl9CVVJTVCA/ICAgICIgYnVyc3QiIDogIiIsCisJCSBlcnIgJiBJTVhfRE1BX0VSUl9SRVFVRVNUID8gICIgcmVxdWVzdCIgOiAiIiwKKwkJIGVyciAmIElNWF9ETUFfRVJSX1RSQU5TRkVSID8gIiB0cmFuc2ZlciIgOiAiIiwKKwkJIGVyciAmIElNWF9ETUFfRVJSX0JVRkZFUiA/ICAgIiBidWZmZXIiIDogIiIpOworfQorCitzdGF0aWMgaW50IGlteF9zc2lfZG1hX2FsbG9jKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaW14X3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0gcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJaXBydGQtPmRtYSA9IGlteF9kbWFfcmVxdWVzdF9ieV9wcmlvKERSVl9OQU1FLCBETUFfUFJJT19ISUdIKTsKKwlpZiAoaXBydGQtPmRtYSA8IDApIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gY2xhaW0gdGhlIGF1ZGlvIERNQVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IGlteF9kbWFfc2V0dXBfaGFuZGxlcnMoaXBydGQtPmRtYSwKKwkJCQlpbXhfc3NpX2RtYV9jYWxsYmFjaywKKwkJCQlzbmRfaW14X2RtYV9lcnJfY2FsbGJhY2ssIHN1YnN0cmVhbSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBpbXhfZG1hX3NldHVwX3Byb2dyZXNzaW9uX2hhbmRsZXIoaXBydGQtPmRtYSwKKwkJCWlteF9zc2lfZG1hX3Byb2dyZXNzaW9uKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiRmFpbGVkIHRvIHNldHVwIHRoZSBETUEgaGFuZGxlclxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGlteF9kbWFfY29uZmlnX2NoYW5uZWwoaXBydGQtPmRtYSwKKwkJCUlNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAorCQkJSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKKwkJCWRtYV9wYXJhbXMtPmRtYSwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCJDYW5ub3QgY29uZmlndXJlIERNQSBjaGFubmVsOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaW14X2RtYV9jb25maWdfYnVyc3RsZW4oaXBydGQtPmRtYSwgZG1hX3BhcmFtcy0+YnVyc3RzaXplICogMik7CisKKwlyZXR1cm4gMDsKK291dDoKKwlpbXhfZG1hX2ZyZWUoaXBydGQtPmRtYSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbmRfaW14X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZG1hX2FkZHI7CisKKwlpbXhfc3NpX2RtYV9hbGxvYyhzdWJzdHJlYW0pOworCisJaXBydGQtPnNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CisJaXBydGQtPnBlcmlvZHMgPSBwYXJhbXNfcGVyaW9kcyhwYXJhbXMpOworCWlwcnRkLT5wZXJpb2QgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcyk7CisJaXBydGQtPm9mZnNldCA9IDA7CisJaXBydGQtPnBlcmlvZF90aW1lID0gSFogLyAocGFyYW1zX3JhdGUocGFyYW1zKSAvCisJCQlwYXJhbXNfcGVyaW9kX3NpemUocGFyYW1zKSk7CisKKwlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sICZzdWJzdHJlYW0tPmRtYV9idWZmZXIpOworCisJaWYgKGlwcnRkLT5zZ19jb3VudCAhPSBpcHJ0ZC0+cGVyaW9kcykgeworCQlrZnJlZShpcHJ0ZC0+c2dfbGlzdCk7CisKKwkJaXBydGQtPnNnX2xpc3QgPSBrY2FsbG9jKGlwcnRkLT5wZXJpb2RzICsgMSwKKwkJCQlzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghaXBydGQtPnNnX2xpc3QpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaXBydGQtPnNnX2NvdW50ID0gaXBydGQtPnBlcmlvZHMgKyAxOworCX0KKworCXNnX2luaXRfdGFibGUoaXBydGQtPnNnX2xpc3QsIGlwcnRkLT5zZ19jb3VudCk7CisJZG1hX2FkZHIgPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZvciAoaSA9IDA7IGkgPCBpcHJ0ZC0+cGVyaW9kczsgaSsrKSB7CisJCWlwcnRkLT5zZ19saXN0W2ldLnBhZ2VfbGluayA9IDA7CisJCWlwcnRkLT5zZ19saXN0W2ldLm9mZnNldCA9IDA7CisJCWlwcnRkLT5zZ19saXN0W2ldLmRtYV9hZGRyZXNzID0gZG1hX2FkZHI7CisJCWlwcnRkLT5zZ19saXN0W2ldLmxlbmd0aCA9IGlwcnRkLT5wZXJpb2Q7CisJCWRtYV9hZGRyICs9IGlwcnRkLT5wZXJpb2Q7CisJfQorCisJLyogY2xvc2UgdGhlIGxvb3AgKi8KKwlpcHJ0ZC0+c2dfbGlzdFtpcHJ0ZC0+c2dfY291bnQgLSAxXS5vZmZzZXQgPSAwOworCWlwcnRkLT5zZ19saXN0W2lwcnRkLT5zZ19jb3VudCAtIDFdLmxlbmd0aCA9IDA7CisJaXBydGQtPnNnX2xpc3RbaXBydGQtPnNnX2NvdW50IC0gMV0ucGFnZV9saW5rID0KKwkJCSgodW5zaWduZWQgbG9uZykgaXBydGQtPnNnX2xpc3QgfCAweDAxKSAmIH4weDAyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9pbXhfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGlwcnRkLT5kbWEgPj0gMCkgeworCQlpbXhfZG1hX2ZyZWUoaXBydGQtPmRtYSk7CisJCWlwcnRkLT5kbWEgPSAtRUlOVkFMOworCX0KKworCWtmcmVlKGlwcnRkLT5zZ19saXN0KTsKKwlpcHJ0ZC0+c2dfbGlzdCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaW14X3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpbXhfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXMgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJaXBydGQtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlpcHJ0ZC0+YnVmID0gKHVuc2lnbmVkIGludCAqKXN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hcmVhOworCWlwcnRkLT5wZXJpb2RfY250ID0gMDsKKworCXByX2RlYnVnKCIlczogYnVmOiAlcCBwZXJpb2Q6ICVkIHBlcmlvZHM6ICVkXG4iLAorCQkJX19mdW5jX18sIGlwcnRkLT5idWYsIGlwcnRkLT5wZXJpb2QsIGlwcnRkLT5wZXJpb2RzKTsKKworCWVyciA9IGlteF9kbWFfc2V0dXBfc2coaXBydGQtPmRtYSwgaXBydGQtPnNnX2xpc3QsIGlwcnRkLT5zZ19jb3VudCwKKwkJCUlNWF9ETUFfTEVOR1RIX0xPT1AsIGRtYV9wYXJhbXMtPmRtYV9hZGRyLAorCQkJc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA/CisJCQlETUFfTU9ERV9XUklURSA6IERNQV9NT0RFX1JFQUQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaW14X3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlteF9kbWFfZW5hYmxlKGlwcnRkLT5kbWEpOworCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWlteF9kbWFfZGlzYWJsZShpcHJ0ZC0+ZG1hKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9pbXhfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIGlwcnRkLT5vZmZzZXQpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2lteF9oYXJkd2FyZSA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJU05EUlZfUENNX0lORk9fUkVTVU1FLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVfbWluID0gODAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IElNWF9TU0lfRE1BQlVGX1NJWkUsCisJLnBlcmlvZF9ieXRlc19taW4gPSAxMjgsCisJLnBlcmlvZF9ieXRlc19tYXggPSAxNiAqIDEwMjQsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyNTUsCisJLmZpZm9fc2l6ZSA9IDAsCit9OworCitzdGF0aWMgaW50IHNuZF9pbXhfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQ7CisJaW50IHJldDsKKworCWlwcnRkID0ga3phbGxvYyhzaXplb2YoKmlwcnRkKSwgR0ZQX0tFUk5FTCk7CisJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gaXBydGQ7CisKKwlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihzdWJzdHJlYW0tPnJ1bnRpbWUsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJnNuZF9pbXhfaGFyZHdhcmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGlteF9wY21fb3BzID0geworCS5vcGVuCQk9IHNuZF9pbXhfb3BlbiwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IHNuZF9pbXhfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHNuZF9pbXhfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBzbmRfaW14X3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gc25kX2lteF9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHNuZF9pbXhfcGNtX3BvaW50ZXIsCisJLm1tYXAJCT0gc25kX2lteF9wY21fbW1hcCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBpbXhfc29jX3BsYXRmb3JtX2RtYSA9IHsKKwkubmFtZQkJPSAiaW14LWF1ZGlvIiwKKwkucGNtX29wcyAJPSAmaW14X3BjbV9vcHMsCisJLnBjbV9uZXcJPSBpbXhfcGNtX25ldywKKwkucGNtX2ZyZWUJPSBpbXhfcGNtX2ZyZWUsCit9OworCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqaW14X3NzaV9kbWFfbXgyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJc3RydWN0IGlteF9zc2kgKnNzaSkKK3sKKwlzc2ktPmRtYV9wYXJhbXNfdHguYnVyc3RzaXplID0gRE1BX1RYRklGT19CVVJTVDsKKwlzc2ktPmRtYV9wYXJhbXNfcnguYnVyc3RzaXplID0gRE1BX1JYRklGT19CVVJTVDsKKworCXJldHVybiAmaW14X3NvY19wbGF0Zm9ybV9kbWE7Cit9CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1maXEuYyBiL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1maXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWNiOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2lteC9pbXgtcGNtLWZpcS5jCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogaW14LXBjbS1maXEuYyAgLS0gIEFMU0EgU29jIEF1ZGlvIExheWVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBjb2RlIGNvcHlyaWdodGVkIGJ5IEZyZWVzY2FsZSwKKyAqIExpYW0gR2lyZHdvb2QsIEphdmllciBNYXJ0aW4gYW5kIHByb2JhYmx5IG90aGVycy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPGFzbS9maXEuaD4KKworI2luY2x1ZGUgPG1hY2gvc3NpLmg+CisKKyNpbmNsdWRlICJpbXgtc3NpLmgiCisKK3N0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSB7CisJaW50IHBlcmlvZDsKKwlpbnQgcGVyaW9kczsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlpbnQgcG9sbF90aW1lOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGlteF9zc2lfc2V0X25leHRfcG9sbChzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkKQoreworCWlwcnRkLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGlwcnRkLT5wb2xsX3RpbWU7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9zc2lfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCXVuc2lnbmVkIGxvbmcgZGVsdGE7CisKKwlnZXRfZmlxX3JlZ3MoJnJlZ3MpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWlwcnRkLT5vZmZzZXQgPSByZWdzLkFSTV9yOCAmIDB4ZmZmZjsKKwllbHNlCisJCWlwcnRkLT5vZmZzZXQgPSByZWdzLkFSTV9yOSAmIDB4ZmZmZjsKKworCS8qIEhvdyBtdWNoIGRhdGEgaGF2ZSB3ZSB0cmFuc2ZlcnJlZCBzaW5jZSB0aGUgbGFzdCBwZXJpb2QgcmVwb3J0PyAqLworCWlmIChpcHJ0ZC0+b2Zmc2V0ID49IGlwcnRkLT5sYXN0X29mZnNldCkKKwkJZGVsdGEgPSBpcHJ0ZC0+b2Zmc2V0IC0gaXBydGQtPmxhc3Rfb2Zmc2V0OworCWVsc2UKKwkJZGVsdGEgPSBydW50aW1lLT5idWZmZXJfc2l6ZSArIGlwcnRkLT5vZmZzZXQKKwkJCS0gaXBydGQtPmxhc3Rfb2Zmc2V0OworCisJLyogSWYgd2UndmUgdHJhbnNmZXJyZWQgYXQgbGVhc3QgYSBwZXJpb2QgdGhlbiByZXBvcnQgaXQgYW5kCisJICogcmVzZXQgb3VyIHBvbGwgdGltZSAqLworCWlmIChkZWx0YSA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisJCWlwcnRkLT5sYXN0X29mZnNldCA9IGlwcnRkLT5vZmZzZXQ7CisKKwkJaW14X3NzaV9zZXRfbmV4dF9wb2xsKGlwcnRkKTsKKwl9CisKKwkvKiBSZXN0YXJ0IHRoZSB0aW1lcjsgaWYgd2UgZGlkbid0IHJlcG9ydCB3ZSdsbCBydW4gb24gdGhlIG5leHQgdGljayAqLworCWFkZF90aW1lcigmaXBydGQtPnRpbWVyKTsKKworfQorCitzdGF0aWMgc3RydWN0IGZpcV9oYW5kbGVyIGZoID0geworCS5uYW1lCQk9IERSVl9OQU1FLAorfTsKKworc3RhdGljIGludCBzbmRfaW14X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaXBydGQtPnNpemUgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CisJaXBydGQtPnBlcmlvZHMgPSBwYXJhbXNfcGVyaW9kcyhwYXJhbXMpOworCWlwcnRkLT5wZXJpb2QgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcykgOworCWlwcnRkLT5vZmZzZXQgPSAwOworCWlwcnRkLT5sYXN0X29mZnNldCA9IDA7CisJaXBydGQtPnBvbGxfdGltZSA9IEhaIC8gKHBhcmFtc19yYXRlKHBhcmFtcykgLyBwYXJhbXNfcGVyaW9kX3NpemUocGFyYW1zKSk7CisKKwlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sICZzdWJzdHJlYW0tPmRtYV9idWZmZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKworCWdldF9maXFfcmVncygmcmVncyk7CisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXJlZ3MuQVJNX3I4ID0gKGlwcnRkLT5wZXJpb2QgKiBpcHJ0ZC0+cGVyaW9kcyAtIDEpIDw8IDE2OworCWVsc2UKKwkJcmVncy5BUk1fcjkgPSAoaXBydGQtPnBlcmlvZCAqIGlwcnRkLT5wZXJpb2RzIC0gMSkgPDwgMTY7CisKKwlzZXRfZmlxX3JlZ3MoJnJlZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlxX2VuYWJsZTsKK3N0YXRpYyBpbnQgaW14X3BjbV9maXE7CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpbXhfc3NpX3NldF9uZXh0X3BvbGwoaXBydGQpOworCQlhZGRfdGltZXIoJmlwcnRkLT50aW1lcik7CisJCWlmICgrK2ZpcV9lbmFibGUgPT0gMSkKKwkJCWVuYWJsZV9maXEoaW14X3BjbV9maXEpOworCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWRlbF90aW1lcigmaXBydGQtPnRpbWVyKTsKKwkJaWYgKC0tZmlxX2VuYWJsZSA9PSAwKQorCQkJZGlzYWJsZV9maXEoaW14X3BjbV9maXEpOworCisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfaW14X3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBpcHJ0ZC0+b2Zmc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9pbXhfaGFyZHdhcmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1JFU1VNRSwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlX21pbiA9IDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSBJTVhfU1NJX0RNQUJVRl9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMTI4LAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTYgKiAxMDI0LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjU1LAorCS5maWZvX3NpemUgPSAwLAorfTsKKworc3RhdGljIGludCBzbmRfaW14X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkOworCWludCByZXQ7CisKKwlpcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKCppcHJ0ZCksIEdGUF9LRVJORUwpOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGlwcnRkOworCisJaW5pdF90aW1lcigmaXBydGQtPnRpbWVyKTsKKwlpcHJ0ZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXN1YnN0cmVhbTsKKwlpcHJ0ZC0+dGltZXIuZnVuY3Rpb24gPSBpbXhfc3NpX3RpbWVyX2NhbGxiYWNrOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIoc3Vic3RyZWFtLT5ydW50aW1lLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZzbmRfaW14X2hhcmR3YXJlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaW14X2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWRlbF90aW1lcl9zeW5jKCZpcHJ0ZC0+dGltZXIpOworCWtmcmVlKGlwcnRkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGlteF9wY21fb3BzID0geworCS5vcGVuCQk9IHNuZF9pbXhfb3BlbiwKKwkuY2xvc2UJCT0gc25kX2lteF9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IHNuZF9pbXhfcGNtX2h3X3BhcmFtcywKKwkucHJlcGFyZQk9IHNuZF9pbXhfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBzbmRfaW14X3BjbV90cmlnZ2VyLAorCS5wb2ludGVyCT0gc25kX2lteF9wY21fcG9pbnRlciwKKwkubW1hcAkJPSBzbmRfaW14X3BjbV9tbWFwLAorfTsKKworc3RhdGljIGludCBpbXhfcGNtX2ZpcV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbXhfcGNtX25ldyhjYXJkLCBkYWksIHBjbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbikgeworCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9CisJCQlwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtOworCQlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7CisKKwkJaW14X3NzaV9maXFfdHhfYnVmZmVyID0gKHVuc2lnbmVkIGxvbmcpYnVmLT5hcmVhOworCX0KKworCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7CisJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0KKwkJCXBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbTsKKwkJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCisJCWlteF9zc2lfZmlxX3J4X2J1ZmZlciA9ICh1bnNpZ25lZCBsb25nKWJ1Zi0+YXJlYTsKKwl9CisKKwlzZXRfZmlxX2hhbmRsZXIoJmlteF9zc2lfZmlxX3N0YXJ0LAorCQkmaW14X3NzaV9maXFfZW5kIC0gJmlteF9zc2lfZmlxX3N0YXJ0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gaW14X3NvY19wbGF0Zm9ybV9maXEgPSB7CisJLnBjbV9vcHMgCT0gJmlteF9wY21fb3BzLAorCS5wY21fbmV3CT0gaW14X3BjbV9maXFfbmV3LAorCS5wY21fZnJlZQk9IGlteF9wY21fZnJlZSwKK307CisKK3N0cnVjdCBzbmRfc29jX3BsYXRmb3JtICppbXhfc3NpX2ZpcV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBpbXhfc3NpICpzc2kpCit7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBjbGFpbV9maXEoJmZoKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjbGFpbSBmaXE6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlteGNfc2V0X2lycV9maXEoc3NpLT5pcnEsIDEpOworCisJaW14X3BjbV9maXEgPSBzc2ktPmlycTsKKworCWlteF9zc2lfZmlxX2Jhc2UgPSAodW5zaWduZWQgbG9uZylzc2ktPmJhc2U7CisKKwlzc2ktPmRtYV9wYXJhbXNfdHguYnVyc3RzaXplID0gNDsKKwlzc2ktPmRtYV9wYXJhbXNfcnguYnVyc3RzaXplID0gNjsKKworCXJldHVybiAmaW14X3NvY19wbGF0Zm9ybV9maXE7Cit9CisKK3ZvaWQgaW14X3NzaV9maXFfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3QgaW14X3NzaSAqc3NpKQoreworCW14Y19zZXRfaXJxX2ZpcShzc2ktPmlycSwgMCk7CisJcmVsZWFzZV9maXEoJmZoKTsKK30KKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9pbXgtc3NpLmMgYi9zb3VuZC9zb2MvaW14L2lteC1zc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmY0NmE3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKQEAgLTAsMCArMSw3NTggQEAKKy8qCisgKiBpbXgtc3NpLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gY29kZSBjb3B5cmlnaHRlZCBieSBGcmVlc2NhbGUsCisgKiBMaWFtIEdpcmR3b29kLCBKYXZpZXIgTWFydGluIGFuZCBwcm9iYWJseSBvdGhlcnMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoKKyAqIFRoZSBpLk1YIFNTSSBjb3JlIGhhcyBzb21lIG5hc3R5IGxpbWl0YXRpb25zIGluIEFDOTcgbW9kZS4gV2hpbGUgbW9zdAorICogc2FuZSBwcm9jZXNzb3IgdmVuZG9ycyBoYXZlIGEgRklGTyBwZXIgQUM5NyBzbG90LCB0aGUgaS5NWCBoYXMgb25seQorICogb25lIEZJRk8gd2hpY2ggY29tYmluZXMgYWxsIHZhbGlkIHJlY2VpdmUgc2xvdHMuIFdlIGNhbm5vdCBldmVuIHNlbGVjdAorICogd2hpY2ggc2xvdHMgd2Ugd2FudCB0byByZWNlaXZlLiBUaGUgV005NzEyIHdpdGggd2hpY2ggdGhpcyBkcml2ZXIKKyAqIHdhcyBkZXZlbG9wcGVkIHdpdGggYWx3YXlzIHNlbmRzIEdQSU8gc3RhdHVzIGRhdGEgaW4gc2xvdCAxMiB3aGljaAorICogd2UgcmVjZWl2ZSBpbiBvdXIgKFBDTS0pIGRhdGEgc3RyZWFtLiBUaGUgb25seSBjaGFuY2Ugd2UgaGF2ZSBpcyB0bworICogbWFudWFsbHkgc2tpcCB0aGlzIGRhdGEgaW4gdGhlIEZJUSBoYW5kbGVyLiBXaXRoIHNhbXBsaW5nIHJhdGVzIGRpZmZlcmVudAorICogZnJvbSA0ODAwMEh6IG5vdCBldmVyeSBmcmFtZSBoYXMgdmFsaWQgcmVjZWl2ZSBkYXRhLCBzbyB0aGUgcmF0aW8KKyAqIGJldHdlZW4gcGNtIGRhdGEgYW5kIEdQSU8gc3RhdHVzIGRhdGEgY2hhbmdlcy4gT3VyIEZJUSBoYW5kbGVyIGlzIG5vdAorICogYWJsZSB0byBoYW5kbGUgdGhpcywgaGVuY2UgdGhpcyBkcml2ZXIgb25seSB3b3JrcyB3aXRoIDQ4MDAwSHogc2FtcGxpbmcKKyAqIHJhdGUuCisgKiBSZWFkaW5nIGFuZCB3cml0aW5nIEFDOTcgcmVnaXN0ZXJzIGlzIGFub3RoZXIgY2hhbGxhbmdlLiBUaGUgY29yZQorICogcHJvdmlkZXMgdXMgc3RhdHVzIGJpdHMgd2hlbiB0aGUgcmVhZCByZWdpc3RlciBpcyB1cGRhdGVkIHdpdGggKmFub3RoZXIqCisgKiB2YWx1ZS4gV2hlbiB3ZSByZWFkIHRoZSBzYW1lIHJlZ2lzdGVyIHR3byB0aW1lcyAoYW5kIHRoZSByZWdpc3RlciBzdGlsbAorICogY29udGFpbnMgdGhlIHNhbWUgdmFsdWUpIHRoZXNlIHN0YXR1cyBiaXRzIGFyZSBub3Qgc2V0LiBXZSB3b3JrCisgKiBhcm91bmQgdGhpcyBieSBub3QgcG9sbGluZyB0aGVzZSBiaXRzIGJ1dCBvbmx5IHdhaXQgYSBmaXhlZCBkZWxheS4KKyAqIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NzaS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgImlteC1zc2kuaCIKKworI2RlZmluZSBTU0lfU0FDTlRfREVGQVVMVCAoU1NJX1NBQ05UX0FDOTdFTiB8IFNTSV9TQUNOVF9GVikKKworLyoKKyAqIFNTSSBOZXR3b3JrIE1vZGUgb3IgVERNIHNsb3RzIGNvbmZpZ3VyYXRpb24uCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCisgKi8KK3N0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwl1bnNpZ25lZCBpbnQgdHhfbWFzaywgdW5zaWduZWQgaW50IHJ4X21hc2ssIGludCBzbG90cywgaW50IHNsb3Rfd2lkdGgpCit7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1MzIgc2NjcjsKKworCXNjY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU1RDQ1IpOworCXNjY3IgJj0gflNTSV9TVENDUl9EQ19NQVNLOworCXNjY3IgfD0gU1NJX1NUQ0NSX0RDKHNsb3RzIC0gMSk7CisJd3JpdGVsKHNjY3IsIHNzaS0+YmFzZSArIFNTSV9TVENDUik7CisKKwlzY2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NSQ0NSKTsKKwlzY2NyICY9IH5TU0lfU1RDQ1JfRENfTUFTSzsKKwlzY2NyIHw9IFNTSV9TVENDUl9EQyhzbG90cyAtIDEpOworCXdyaXRlbChzY2NyLCBzc2ktPmJhc2UgKyBTU0lfU1JDQ1IpOworCisJd3JpdGVsKHR4X21hc2ssIHNzaS0+YmFzZSArIFNTSV9TVE1TSyk7CisJd3JpdGVsKHJ4X21hc2ssIHNzaS0+YmFzZSArIFNTSV9TUk1TSyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNTSSBEQUkgZm9ybWF0IGNvbmZpZ3VyYXRpb24uCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCisgKiBOb3RlOiBXZSBkb24ndCB1c2UgdGhlIEkyUyBtb2RlcyBidXQgaW5zdGVhZCBtYW51YWxseSBjb25maWd1cmUgdGhlCisgKiBTU0kgZm9yIEkyUyBiZWNhdXNlIHRoZSBJMlMgbW9kZSBpcyBvbmx5IGEgcmVnaXN0ZXIgcHJlc2V0LgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBpbXhfc3NpICpzc2kgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJdTMyIHN0cmNyID0gMCwgc2NyOworCisJc2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NDUikgJiB+KFNTSV9TQ1JfU1lOIHwgU1NJX1NDUl9ORVQpOworCisJLyogREFJIG1vZGUgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgbG93IDFjbGsgYmVmb3JlIGRhdGEgKi8KKwkJc3RyY3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RFRlMgfCBTU0lfU1RDUl9UWEJJVDA7CisJCXNjciB8PSBTU0lfU0NSX05FVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgaGlnaCB3aXRoIGRhdGEgKi8KKwkJc3RyY3IgfD0gU1NJX1NUQ1JfVFhCSVQwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggd2l0aCBkYXRhICovCisJCXN0cmNyIHw9IFNTSV9TVENSX1RGU0w7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgaGlnaCAxY2xrIGJlZm9yZSBkYXRhICovCisJCXN0cmNyIHw9IFNTSV9TVENSX1RGU0wgfCBTU0lfU1RDUl9URUZTOworCQlicmVhazsKKwl9CisKKwkvKiBEQUkgY2xvY2sgaW52ZXJzaW9uICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCXN0cmNyIHw9IFNTSV9TVENSX1RGU0k7CisJCXN0cmNyICY9IH5TU0lfU1RDUl9UU0NLUDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJc3RyY3IgJj0gfihTU0lfU1RDUl9UU0NLUCB8IFNTSV9TVENSX1RGU0kpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlzdHJjciB8PSBTU0lfU1RDUl9URlNJIHwgU1NJX1NUQ1JfVFNDS1A7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCXN0cmNyICY9IH5TU0lfU1RDUl9URlNJOworCQlzdHJjciB8PSBTU0lfU1RDUl9UU0NLUDsKKwkJYnJlYWs7CisJfQorCisJLyogREFJIGNsb2NrIG1hc3RlciBtYXNrcyAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE1hc3RlciBtb2RlIG5vdCBpbXBsZW1lbnRlZCwgbmVlZHMgaGFuZGxpbmcgb2YgY2xvY2tzLiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdHJjciB8PSBTU0lfU1RDUl9URkVOMDsKKworCXdyaXRlbChzdHJjciwgc3NpLT5iYXNlICsgU1NJX1NUQ1IpOworCXdyaXRlbChzdHJjciwgc3NpLT5iYXNlICsgU1NJX1NSQ1IpOworCXdyaXRlbChzY3IsIHNzaS0+YmFzZSArIFNTSV9TQ1IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTU0kgc3lzdGVtIGNsb2NrIGNvbmZpZ3VyYXRpb24uCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCisgKi8KK3N0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJCQkJICBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXUzMiBzY3I7CisKKwlzY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU0NSKTsKKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBJTVhfU1NQX1NZU19DTEs6CisJCWlmIChkaXIgPT0gU05EX1NPQ19DTE9DS19PVVQpCisJCQlzY3IgfD0gU1NJX1NDUl9TWVNfQ0xLX0VOOworCQllbHNlCisJCQlzY3IgJj0gflNTSV9TQ1JfU1lTX0NMS19FTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKHNjciwgc3NpLT5iYXNlICsgU1NJX1NDUik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNTSSBDbG9jayBkaXZpZGVycworICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQkJCSAgaW50IGRpdl9pZCwgaW50IGRpdikKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXUzMiBzdGNjciwgc3JjY3I7CisKKwlzdGNjciA9IHJlYWRsKHNzaS0+YmFzZSArIFNTSV9TVENDUik7CisJc3JjY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU1JDQ1IpOworCisJc3dpdGNoIChkaXZfaWQpIHsKKwljYXNlIElNWF9TU0lfVFhfRElWXzI6CisJCXN0Y2NyICY9IH5TU0lfU1RDQ1JfRElWMjsKKwkJc3RjY3IgfD0gZGl2OworCQlicmVhazsKKwljYXNlIElNWF9TU0lfVFhfRElWX1BTUjoKKwkJc3RjY3IgJj0gflNTSV9TVENDUl9QU1I7CisJCXN0Y2NyIHw9IGRpdjsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1RYX0RJVl9QTToKKwkJc3RjY3IgJj0gfjB4ZmY7CisJCXN0Y2NyIHw9IFNTSV9TVENDUl9QTShkaXYpOworCQlicmVhazsKKwljYXNlIElNWF9TU0lfUlhfRElWXzI6CisJCXN0Y2NyICY9IH5TU0lfU1RDQ1JfRElWMjsKKwkJc3RjY3IgfD0gZGl2OworCQlicmVhazsKKwljYXNlIElNWF9TU0lfUlhfRElWX1BTUjoKKwkJc3RjY3IgJj0gflNTSV9TVENDUl9QU1I7CisJCXN0Y2NyIHw9IGRpdjsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1JYX0RJVl9QTToKKwkJc3RjY3IgJj0gfjB4ZmY7CisJCXN0Y2NyIHw9IFNTSV9TVENDUl9QTShkaXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3cml0ZWwoc3RjY3IsIHNzaS0+YmFzZSArIFNTSV9TVENDUik7CisJd3JpdGVsKHNyY2NyLCBzc2ktPmJhc2UgKyBTU0lfU1JDQ1IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCksCisgKiBhbHRob3VnaCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJ5IHVwcGVyIGxheWVycy4KKyAqLworc3RhdGljIGludCBpbXhfc3NpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXUzMiByZWcsIHNjY3I7CisKKwkvKiBUeC9SeCBjb25maWcgKi8KKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlyZWcgPSBTU0lfU1RDQ1I7CisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnNzaS0+ZG1hX3BhcmFtc190eDsKKwl9IGVsc2UgeworCQlyZWcgPSBTU0lfU1JDQ1I7CisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnNzaS0+ZG1hX3BhcmFtc19yeDsKKwl9CisKKwlzY2NyID0gcmVhZGwoc3NpLT5iYXNlICsgcmVnKSAmIH5TU0lfU1RDQ1JfV0xfTUFTSzsKKworCS8qIERBSSBkYXRhICh3b3JkKSBzaXplICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlzY2NyIHw9IFNTSV9TUkNDUl9XTCgxNik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlzY2NyIHw9IFNTSV9TUkNDUl9XTCgyMCk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCXNjY3IgfD0gU1NJX1NSQ0NSX1dMKDI0KTsKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKHNjY3IsIHNzaS0+YmFzZSArIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbXhfc3NpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBzaWVyX2JpdHMsIHNpZXI7CisJdW5zaWduZWQgaW50IHNjcjsKKworCXNjciA9IHJlYWRsKHNzaS0+YmFzZSArIFNTSV9TQ1IpOworCXNpZXIgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU0lFUik7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlpZiAoc3NpLT5mbGFncyAmIElNWF9TU0lfRE1BKQorCQkJc2llcl9iaXRzID0gU1NJX1NJRVJfVERNQUU7CisJCWVsc2UKKwkJCXNpZXJfYml0cyA9IFNTSV9TSUVSX1RJRSB8IFNTSV9TSUVSX1RGRTBfRU47CisJfSBlbHNlIHsKKwkJaWYgKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX0RNQSkKKwkJCXNpZXJfYml0cyA9IFNTSV9TSUVSX1JETUFFOworCQllbHNlCisJCQlzaWVyX2JpdHMgPSBTU0lfU0lFUl9SSUUgfCBTU0lfU0lFUl9SRkYwX0VOOworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJc2NyIHw9IFNTSV9TQ1JfVEU7CisJCWVsc2UKKwkJCXNjciB8PSBTU0lfU0NSX1JFOworCQlzaWVyIHw9IHNpZXJfYml0czsKKworCQlpZiAoKytzc2ktPmVuYWJsZWQgPT0gMSkKKwkJCXNjciB8PSBTU0lfU0NSX1NTSUVOOworCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJc2NyICY9IH5TU0lfU0NSX1RFOworCQllbHNlCisJCQlzY3IgJj0gflNTSV9TQ1JfUkU7CisJCXNpZXIgJj0gfnNpZXJfYml0czsKKworCQlpZiAoLS1zc2ktPmVuYWJsZWQgPT0gMCkKKwkJCXNjciAmPSB+U1NJX1NDUl9TU0lFTjsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIShzc2ktPmZsYWdzICYgSU1YX1NTSV9VU0VfQUM5NykpCisJCS8qIHJ4L3R4IGFyZSBhbHdheXMgZW5hYmxlZCB0byBhY2Nlc3MgYWM5NyByZWdpc3RlcnMgKi8KKwkJd3JpdGVsKHNjciwgc3NpLT5iYXNlICsgU1NJX1NDUik7CisKKwl3cml0ZWwoc2llciwgc3NpLT5iYXNlICsgU1NJX1NJRVIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGlteF9zc2lfcGNtX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGlteF9zc2lfaHdfcGFyYW1zLAorCS5zZXRfZm10CT0gaW14X3NzaV9zZXRfZGFpX2ZtdCwKKwkuc2V0X2Nsa2Rpdgk9IGlteF9zc2lfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9zeXNjbGsJPSBpbXhfc3NpX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfdGRtX3Nsb3QJPSBpbXhfc3NpX3NldF9kYWlfdGRtX3Nsb3QsCisJLnRyaWdnZXIJPSBpbXhfc3NpX3RyaWdnZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfZGFpID0geworCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKK307CisKK2ludCBzbmRfaW14X3BjbV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWludCByZXQ7CisKKwlyZXQgPSBkbWFfbW1hcF9jb2hlcmVudChOVUxMLCB2bWEsIHJ1bnRpbWUtPmRtYV9hcmVhLAorCQkJcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CisKKwlwcl9kZWJ1ZygiJXM6IHJldDogJWQgJXAgMHglMDh4IDB4JTA4eFxuIiwgX19mdW5jX18sIHJldCwKKwkJCXJ1bnRpbWUtPmRtYV9hcmVhLAorCQkJcnVudGltZS0+ZG1hX2FkZHIsCisJCQlydW50aW1lLT5kbWFfYnl0ZXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW14X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCXNpemVfdCBzaXplID0gSU1YX1NTSV9ETUFCVUZfU0laRTsKKworCWJ1Zi0+ZGV2LnR5cGUgPSBTTkRSVl9ETUFfVFlQRV9ERVY7CisJYnVmLT5kZXYuZGV2ID0gcGNtLT5jYXJkLT5kZXY7CisJYnVmLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUocGNtLT5jYXJkLT5kZXYsIHNpemUsCisJCQkJCSAgICZidWYtPmFkZHIsIEdGUF9LRVJORUwpOworCWlmICghYnVmLT5hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlidWYtPmJ5dGVzID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IGlteF9wY21fZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK2ludCBpbXhfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCXN0cnVjdCBzbmRfcGNtICpwY20pCit7CisKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZpbXhfcGNtX2RtYW1hc2s7CisJaWYgKCFjYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrKQorCQljYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwlpZiAoZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKKwkJcmV0ID0gaW14X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKKwkJCVNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKGRhaS0+Y2FwdHVyZS5jaGFubmVsc19taW4pIHsKKwkJcmV0ID0gaW14X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKKwkJCVNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGlteF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmOworCWludCBzdHJlYW07CisKKwlmb3IgKHN0cmVhbSA9IDA7IHN0cmVhbSA8IDI7IHN0cmVhbSsrKSB7CisJCXN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKKwkJaWYgKCFzdWJzdHJlYW0pCisJCQljb250aW51ZTsKKworCQlidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCQlpZiAoIWJ1Zi0+YXJlYSkKKwkJCWNvbnRpbnVlOworCisJCWRtYV9mcmVlX3dyaXRlY29tYmluZShwY20tPmNhcmQtPmRldiwgYnVmLT5ieXRlcywKKwkJCQkgICAgICBidWYtPmFyZWEsIGJ1Zi0+YWRkcik7CisJCWJ1Zi0+YXJlYSA9IE5VTEw7CisJfQorfQorCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBpbXhfc29jX3BsYXRmb3JtID0geworCS5uYW1lCQk9ICJpbXgtYXVkaW8iLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlteF9zb2NfcGxhdGZvcm0pOworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpIGlteF9hYzk3X2RhaSA9IHsKKwkubmFtZSA9ICJBQzk3IiwKKwkuYWM5N19jb250cm9sID0gMSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IFBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKK307CisKK3N0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfdG9fYWM5NyhzdHJ1Y3QgaW14X3NzaSAqaW14X3NzaSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBpbXhfc3NpLT5iYXNlOworCisJd3JpdGVsKDB4MCwgYmFzZSArIFNTSV9TQ1IpOworCXdyaXRlbCgweDAsIGJhc2UgKyBTU0lfU1RDUik7CisJd3JpdGVsKDB4MCwgYmFzZSArIFNTSV9TUkNSKTsKKworCXdyaXRlbChTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVULCBiYXNlICsgU1NJX1NDUik7CisKKwl3cml0ZWwoU1NJX1NGQ1NSX1JGV00wKDgpIHwKKwkJU1NJX1NGQ1NSX1RGV00wKDgpIHwKKwkJU1NJX1NGQ1NSX1JGV00xKDgpIHwKKwkJU1NJX1NGQ1NSX1RGV00xKDgpLCBiYXNlICsgU1NJX1NGQ1NSKTsKKworCXdyaXRlbChTU0lfU1RDQ1JfV0woMTYpIHwgU1NJX1NUQ0NSX0RDKDEyKSwgYmFzZSArIFNTSV9TVENDUik7CisJd3JpdGVsKFNTSV9TVENDUl9XTCgxNikgfCBTU0lfU1RDQ1JfREMoMTIpLCBiYXNlICsgU1NJX1NSQ0NSKTsKKworCXdyaXRlbChTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUIHwgU1NJX1NDUl9TU0lFTiwgYmFzZSArIFNTSV9TQ1IpOworCXdyaXRlbChTU0lfU09SX1dBSVQoMyksIGJhc2UgKyBTU0lfU09SKTsKKworCXdyaXRlbChTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUIHwgU1NJX1NDUl9TU0lFTiB8CisJCQlTU0lfU0NSX1RFIHwgU1NJX1NDUl9SRSwKKwkJCWJhc2UgKyBTU0lfU0NSKTsKKworCXdyaXRlbChTU0lfU0FDTlRfREVGQVVMVCwgYmFzZSArIFNTSV9TQUNOVCk7CisJd3JpdGVsKDB4ZmYsIGJhc2UgKyBTU0lfU0FDQ0RJUyk7CisJd3JpdGVsKDB4MzAwLCBiYXNlICsgU1NJX1NBQ0NFTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14X3NzaSAqYWM5N19zc2k7CisKK3N0YXRpYyB2b2lkIGlteF9zc2lfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJdW5zaWduZWQgc2hvcnQgdmFsKQoreworCXN0cnVjdCBpbXhfc3NpICppbXhfc3NpID0gYWM5N19zc2k7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaW14X3NzaS0+YmFzZTsKKwl1bnNpZ25lZCBpbnQgbHJlZzsKKwl1bnNpZ25lZCBpbnQgbHZhbDsKKworCWlmIChyZWcgPiAweDdmKQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiJXM6IDB4JTAyeCAweCUwNHhcbiIsIF9fZnVuY19fLCByZWcsIHZhbCk7CisKKwlscmVnID0gcmVnIDw8ICAxMjsKKwl3cml0ZWwobHJlZywgYmFzZSArIFNTSV9TQUNBREQpOworCisJbHZhbCA9IHZhbCA8PCA0OworCXdyaXRlbChsdmFsICwgYmFzZSArIFNTSV9TQUNEQVQpOworCisJd3JpdGVsKFNTSV9TQUNOVF9ERUZBVUxUIHwgU1NJX1NBQ05UX1dSLCBiYXNlICsgU1NJX1NBQ05UKTsKKwl1ZGVsYXkoMTAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGlteF9zc2lfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXN0cnVjdCBpbXhfc3NpICppbXhfc3NpID0gYWM5N19zc2k7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaW14X3NzaS0+YmFzZTsKKworCXVuc2lnbmVkIHNob3J0IHZhbCA9IC0xOworCXVuc2lnbmVkIGludCBscmVnOworCisJbHJlZyA9IChyZWcgJiAweDdmKSA8PCAgMTIgOworCXdyaXRlbChscmVnLCBiYXNlICsgU1NJX1NBQ0FERCk7CisJd3JpdGVsKFNTSV9TQUNOVF9ERUZBVUxUIHwgU1NJX1NBQ05UX1JELCBiYXNlICsgU1NJX1NBQ05UKTsKKworCXVkZWxheSgxMDApOworCisJdmFsID0gKHJlYWRsKGJhc2UgKyBTU0lfU0FDREFUKSA+PiA0KSAmIDB4ZmZmZjsKKworCXByX2RlYnVnKCIlczogMHglMDJ4IDB4JTA0eFxuIiwgX19mdW5jX18sIHJlZywgdmFsKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9zc2lfYWM5N19yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJc3RydWN0IGlteF9zc2kgKmlteF9zc2kgPSBhYzk3X3NzaTsKKworCWlmIChpbXhfc3NpLT5hYzk3X3Jlc2V0KQorCQlpbXhfc3NpLT5hYzk3X3Jlc2V0KGFjOTcpOworfQorCitzdGF0aWMgdm9pZCBpbXhfc3NpX2FjOTdfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJc3RydWN0IGlteF9zc2kgKmlteF9zc2kgPSBhYzk3X3NzaTsKKworCWlmIChpbXhfc3NpLT5hYzk3X3dhcm1fcmVzZXQpCisJCWlteF9zc2ktPmFjOTdfd2FybV9yZXNldChhYzk3KTsKK30KKworc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgc29jX2FjOTdfb3BzID0geworCS5yZWFkCQk9IGlteF9zc2lfYWM5N19yZWFkLAorCS53cml0ZQkJPSBpbXhfc3NpX2FjOTdfd3JpdGUsCisJLnJlc2V0CQk9IGlteF9zc2lfYWM5N19yZXNldCwKKwkud2FybV9yZXNldAk9IGlteF9zc2lfYWM5N193YXJtX3Jlc2V0Cit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2FjOTdfb3BzKTsKKworc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfcGNtX2RhaVsyXTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlteF9zc2lfcGNtX2RhaSk7CisKK3N0YXRpYyBpbnQgaW14X3NzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBpbXhfc3NpICpzc2k7CisJc3RydWN0IGlteF9zc2lfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm07CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IHZhbDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9ICZpbXhfc3NpX3BjbV9kYWlbcGRldi0+aWRdOworCisJaWYgKGRhaS0+aWQgPj0gQVJSQVlfU0laRShpbXhfc3NpX3BjbV9kYWkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNzaSA9IGt6YWxsb2Moc2l6ZW9mKCpzc2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNzaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocGRhdGEpIHsKKwkJc3NpLT5hYzk3X3Jlc2V0ID0gcGRhdGEtPmFjOTdfcmVzZXQ7CisJCXNzaS0+YWM5N193YXJtX3Jlc2V0ID0gcGRhdGEtPmFjOTdfd2FybV9yZXNldDsKKwkJc3NpLT5mbGFncyA9IHBkYXRhLT5mbGFnczsKKwl9CisKKwlzc2ktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlzc2ktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihzc2ktPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihzc2ktPmNsayk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgdGhlIGNsb2NrOiAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZmFpbGVkX2NsazsKKwl9CisJY2xrX2VuYWJsZShzc2ktPmNsayk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbGVkX2dldF9yZXNvdXJjZTsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIERSVl9OQU1FKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZhaWxlZF9nZXRfcmVzb3VyY2U7CisJfQorCisJc3NpLT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghc3NpLT5iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsZWRfaW9yZW1hcDsKKwl9CisKKwlpZiAoc3NpLT5mbGFncyAmIElNWF9TU0lfVVNFX0FDOTcpIHsKKwkJaWYgKGFjOTdfc3NpKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIGZhaWxlZF9hYzk3OworCQl9CisJCWFjOTdfc3NpID0gc3NpOworCQlzZXR1cF9jaGFubmVsX3RvX2FjOTcoc3NpKTsKKwkJbWVtY3B5KGRhaSwgJmlteF9hYzk3X2RhaSwgc2l6ZW9mKGlteF9hYzk3X2RhaSkpOworCX0gZWxzZQorCQltZW1jcHkoZGFpLCAmaW14X3NzaV9kYWksIHNpemVvZihpbXhfc3NpX2RhaSkpOworCisJd3JpdGVsKDB4MCwgc3NpLT5iYXNlICsgU1NJX1NJRVIpOworCisJc3NpLT5kbWFfcGFyYW1zX3J4LmRtYV9hZGRyID0gcmVzLT5zdGFydCArIFNTSV9TUlgwOworCXNzaS0+ZG1hX3BhcmFtc190eC5kbWFfYWRkciA9IHJlcy0+c3RhcnQgKyBTU0lfU1RYMDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9ETUEsICJ0eDAiKTsKKwlpZiAocmVzKQorCQlzc2ktPmRtYV9wYXJhbXNfdHguZG1hID0gcmVzLT5zdGFydDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9ETUEsICJyeDAiKTsKKwlpZiAocmVzKQorCQlzc2ktPmRtYV9wYXJhbXNfcnguZG1hID0gcmVzLT5zdGFydDsKKworCWRhaS0+aWQgPSBwZGV2LT5pZDsKKwlkYWktPmRldiA9ICZwZGV2LT5kZXY7CisJZGFpLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJpbXgtc3NpLiVkIiwgcGRldi0+aWQpOworCWRhaS0+cHJpdmF0ZV9kYXRhID0gc3NpOworCisJaWYgKChjcHVfaXNfbXgyNygpIHx8IGNwdV9pc19teDIxKCkpICYmCisJCQkhKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX1VTRV9BQzk3KSkgeworCQlzc2ktPmZsYWdzIHw9IElNWF9TU0lfRE1BOworCQlwbGF0Zm9ybSA9IGlteF9zc2lfZG1hX214Ml9pbml0KHBkZXYsIHNzaSk7CisJfSBlbHNlCisJCXBsYXRmb3JtID0gaW14X3NzaV9maXFfaW5pdChwZGV2LCBzc2kpOworCisJaW14X3NvY19wbGF0Zm9ybS5wY21fb3BzID0gcGxhdGZvcm0tPnBjbV9vcHM7CisJaW14X3NvY19wbGF0Zm9ybS5wY21fbmV3ID0gcGxhdGZvcm0tPnBjbV9uZXc7CisJaW14X3NvY19wbGF0Zm9ybS5wY21fZnJlZSA9IHBsYXRmb3JtLT5wY21fZnJlZTsKKworCXZhbCA9IFNTSV9TRkNTUl9URldNMChzc2ktPmRtYV9wYXJhbXNfdHguYnVyc3RzaXplKSB8CisJCVNTSV9TRkNTUl9SRldNMChzc2ktPmRtYV9wYXJhbXNfcnguYnVyc3RzaXplKTsKKwl3cml0ZWwodmFsLCBzc2ktPmJhc2UgKyBTU0lfU0ZDU1IpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoZGFpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lzdGVyIERBSSBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWxlZF9yZWdpc3RlcjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzc2kpOworCisJcmV0dXJuIDA7CisKK2ZhaWxlZF9yZWdpc3RlcjoKK2ZhaWxlZF9hYzk3OgorCWlvdW5tYXAoc3NpLT5iYXNlKTsKK2ZhaWxlZF9pb3JlbWFwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbGVkX2dldF9yZXNvdXJjZToKKwljbGtfZGlzYWJsZShzc2ktPmNsayk7CisJY2xrX3B1dChzc2ktPmNsayk7CitmYWlsZWRfY2xrOgorCWtmcmVlKHNzaSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBpbXhfc3NpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSAmaW14X3NzaV9wY21fZGFpW3BkZXYtPmlkXTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoZGFpKTsKKworCWlmIChzc2ktPmZsYWdzICYgSU1YX1NTSV9VU0VfQUM5NykKKwkJYWM5N19zc2kgPSBOVUxMOworCisJaWYgKCEoc3NpLT5mbGFncyAmIElNWF9TU0lfRE1BKSkKKwkJaW14X3NzaV9maXFfZXhpdChwZGV2LCBzc2kpOworCisJaW91bm1hcChzc2ktPmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWNsa19kaXNhYmxlKHNzaS0+Y2xrKTsKKwljbGtfcHV0KHNzaS0+Y2xrKTsKKwlrZnJlZShzc2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF9zc2lfZHJpdmVyID0geworCS5wcm9iZSA9IGlteF9zc2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGlteF9zc2lfcmVtb3ZlKSwKKworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbXhfc3NpX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmaW14X3NvY19wbGF0Zm9ybSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBzb2MgcGxhdGZvcm06ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW14X3NzaV9kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZpbXhfc29jX3BsYXRmb3JtKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlteF9zc2lfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpbXhfc3NpX2RyaXZlcik7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZpbXhfc29jX3BsYXRmb3JtKTsKK30KKworbW9kdWxlX2luaXQoaW14X3NzaV9pbml0KTsKK21vZHVsZV9leGl0KGlteF9zc2lfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiaS5NWCBJMlMvYWM5NyBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5oIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmMjZlYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5oCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9JTVhfU1NJX0gKKyNkZWZpbmUgX0lNWF9TU0lfSAorCisjZGVmaW5lIFNTSV9TVFgwCTB4MDAKKyNkZWZpbmUgU1NJX1NUWDEJMHgwNAorI2RlZmluZSBTU0lfU1JYMAkweDA4CisjZGVmaW5lIFNTSV9TUlgxCTB4MGMKKworI2RlZmluZSBTU0lfU0NSCQkweDEwCisjZGVmaW5lIFNTSV9TQ1JfQ0xLX0lTVAkJKDEgPDwgOSkKKyNkZWZpbmUgU1NJX1NDUl9DTEtfSVNUX1NISUZUCTkKKyNkZWZpbmUgU1NJX1NDUl9UQ0hfRU4JCSgxIDw8IDgpCisjZGVmaW5lIFNTSV9TQ1JfU1lTX0NMS19FTgkoMSA8PCA3KQorI2RlZmluZSBTU0lfU0NSX0kyU19NT0RFX05PUk0JKDAgPDwgNSkKKyNkZWZpbmUgU1NJX1NDUl9JMlNfTU9ERV9NU1RSCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TQ1JfSTJTX01PREVfU0xBVkUJKDIgPDwgNSkKKyNkZWZpbmUgU1NJX0kyU19NT0RFX01BU0sJKDMgPDwgNSkKKyNkZWZpbmUgU1NJX1NDUl9TWU4JCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TQ1JfTkVUCQkoMSA8PCAzKQorI2RlZmluZSBTU0lfU0NSX1JFCQkoMSA8PCAyKQorI2RlZmluZSBTU0lfU0NSX1RFCQkoMSA8PCAxKQorI2RlZmluZSBTU0lfU0NSX1NTSUVOCQkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TSVNSCTB4MTQKKyNkZWZpbmUgU1NJX1NJU1JfTUFTSwkJKCgxIDw8IDE5KSAtIDEpCisjZGVmaW5lIFNTSV9TSVNSX0NNREFVCQkoMSA8PCAxOCkKKyNkZWZpbmUgU1NJX1NJU1JfQ01ERFUJCSgxIDw8IDE3KQorI2RlZmluZSBTU0lfU0lTUl9SWFQJCSgxIDw8IDE2KQorI2RlZmluZSBTU0lfU0lTUl9SRFIxCQkoMSA8PCAxNSkKKyNkZWZpbmUgU1NJX1NJU1JfUkRSMAkJKDEgPDwgMTQpCisjZGVmaW5lIFNTSV9TSVNSX1RERTEJCSgxIDw8IDEzKQorI2RlZmluZSBTU0lfU0lTUl9UREUwCQkoMSA8PCAxMikKKyNkZWZpbmUgU1NJX1NJU1JfUk9FMQkJKDEgPDwgMTEpCisjZGVmaW5lIFNTSV9TSVNSX1JPRTAJCSgxIDw8IDEwKQorI2RlZmluZSBTU0lfU0lTUl9UVUUxCQkoMSA8PCA5KQorI2RlZmluZSBTU0lfU0lTUl9UVUUwCQkoMSA8PCA4KQorI2RlZmluZSBTU0lfU0lTUl9URlMJCSgxIDw8IDcpCisjZGVmaW5lIFNTSV9TSVNSX1JGUwkJKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NJU1JfVExTCQkoMSA8PCA1KQorI2RlZmluZSBTU0lfU0lTUl9STFMJCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TSVNSX1JGRjEJCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TSVNSX1JGRjAJCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TSVNSX1RGRTEJCSgxIDw8IDEpCisjZGVmaW5lIFNTSV9TSVNSX1RGRTAJCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NJRVIJMHgxOAorI2RlZmluZSBTU0lfU0lFUl9SRE1BRQkJKDEgPDwgMjIpCisjZGVmaW5lIFNTSV9TSUVSX1JJRQkJKDEgPDwgMjEpCisjZGVmaW5lIFNTSV9TSUVSX1RETUFFCQkoMSA8PCAyMCkKKyNkZWZpbmUgU1NJX1NJRVJfVElFCQkoMSA8PCAxOSkKKyNkZWZpbmUgU1NJX1NJRVJfQ01EQVVfRU4JKDEgPDwgMTgpCisjZGVmaW5lIFNTSV9TSUVSX0NNRERVX0VOCSgxIDw8IDE3KQorI2RlZmluZSBTU0lfU0lFUl9SWFRfRU4JCSgxIDw8IDE2KQorI2RlZmluZSBTU0lfU0lFUl9SRFIxX0VOCSgxIDw8IDE1KQorI2RlZmluZSBTU0lfU0lFUl9SRFIwX0VOCSgxIDw8IDE0KQorI2RlZmluZSBTU0lfU0lFUl9UREUxX0VOCSgxIDw8IDEzKQorI2RlZmluZSBTU0lfU0lFUl9UREUwX0VOCSgxIDw8IDEyKQorI2RlZmluZSBTU0lfU0lFUl9ST0UxX0VOCSgxIDw8IDExKQorI2RlZmluZSBTU0lfU0lFUl9ST0UwX0VOCSgxIDw8IDEwKQorI2RlZmluZSBTU0lfU0lFUl9UVUUxX0VOCSgxIDw8IDkpCisjZGVmaW5lIFNTSV9TSUVSX1RVRTBfRU4JKDEgPDwgOCkKKyNkZWZpbmUgU1NJX1NJRVJfVEZTX0VOCQkoMSA8PCA3KQorI2RlZmluZSBTU0lfU0lFUl9SRlNfRU4JCSgxIDw8IDYpCisjZGVmaW5lIFNTSV9TSUVSX1RMU19FTgkJKDEgPDwgNSkKKyNkZWZpbmUgU1NJX1NJRVJfUkxTX0VOCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU0lFUl9SRkYxX0VOCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TSUVSX1JGRjBfRU4JKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NJRVJfVEZFMV9FTgkoMSA8PCAxKQorI2RlZmluZSBTU0lfU0lFUl9URkUwX0VOCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NUQ1IJMHgxYworI2RlZmluZSBTU0lfU1RDUl9UWEJJVDAJCSgxIDw8IDkpCisjZGVmaW5lIFNTSV9TVENSX1RGRU4xCQkoMSA8PCA4KQorI2RlZmluZSBTU0lfU1RDUl9URkVOMAkJKDEgPDwgNykKKyNkZWZpbmUgU1NJX0ZJRk9fRU5BQkxFXzBfU0hJRlQgNworI2RlZmluZSBTU0lfU1RDUl9URkRJUgkJKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NUQ1JfVFhESVIJCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TVENSX1RTSEZECQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU1RDUl9UU0NLUAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NUQ1JfVEZTSQkJKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NUQ1JfVEZTTAkJKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NUQ1JfVEVGUwkJKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU1JDUgkweDIwCisjZGVmaW5lIFNTSV9TUkNSX1JYQklUMAkJKDEgPDwgOSkKKyNkZWZpbmUgU1NJX1NSQ1JfUkZFTjEJCSgxIDw8IDgpCisjZGVmaW5lIFNTSV9TUkNSX1JGRU4wCQkoMSA8PCA3KQorI2RlZmluZSBTU0lfRklGT19FTkFCTEVfMF9TSElGVCA3CisjZGVmaW5lIFNTSV9TUkNSX1JGRElSCQkoMSA8PCA2KQorI2RlZmluZSBTU0lfU1JDUl9SWERJUgkJKDEgPDwgNSkKKyNkZWZpbmUgU1NJX1NSQ1JfUlNIRkQJCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TUkNSX1JTQ0tQCQkoMSA8PCAzKQorI2RlZmluZSBTU0lfU1JDUl9SRlNJCQkoMSA8PCAyKQorI2RlZmluZSBTU0lfU1JDUl9SRlNMCQkoMSA8PCAxKQorI2RlZmluZSBTU0lfU1JDUl9SRUZTCQkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TUkNDUgkJMHgyOAorI2RlZmluZSBTU0lfU1JDQ1JfRElWMgkJKDEgPDwgMTgpCisjZGVmaW5lIFNTSV9TUkNDUl9QU1IJCSgxIDw8IDE3KQorI2RlZmluZSBTU0lfU1JDQ1JfV0woeCkJCSgoKCh4KSAtIDIpID4+IDEpIDw8IDEzKQorI2RlZmluZSBTU0lfU1JDQ1JfREMoeCkJCSgoKHgpICYgMHgxZikgPDwgOCkKKyNkZWZpbmUgU1NJX1NSQ0NSX1BNKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIFNTSV9TUkNDUl9XTF9NQVNLCSgweGYgPDwgMTMpCisjZGVmaW5lIFNTSV9TUkNDUl9EQ19NQVNLCSgweDFmIDw8IDgpCisjZGVmaW5lIFNTSV9TUkNDUl9QTV9NQVNLCSgweGZmIDw8IDApCisKKyNkZWZpbmUgU1NJX1NUQ0NSCQkweDI0CisjZGVmaW5lIFNTSV9TVENDUl9ESVYyCQkoMSA8PCAxOCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1BTUgkJKDEgPDwgMTcpCisjZGVmaW5lIFNTSV9TVENDUl9XTCh4KQkJKCgoKHgpIC0gMikgPj4gMSkgPDwgMTMpCisjZGVmaW5lIFNTSV9TVENDUl9EQyh4KQkJKCgoeCkgJiAweDFmKSA8PCA4KQorI2RlZmluZSBTU0lfU1RDQ1JfUE0oeCkJCSgoKHgpICYgMHhmZikgPDwgMCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1dMX01BU0sJKDB4ZiA8PCAxMykKKyNkZWZpbmUgU1NJX1NUQ0NSX0RDX01BU0sJKDB4MWYgPDwgOCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1BNX01BU0sJKDB4ZmYgPDwgMCkKKworI2RlZmluZSBTU0lfU0ZDU1IJMHgyYworI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQxKHgpCSgoKHgpICYgMHhmKSA8PCAyOCkKKyNkZWZpbmUgU1NJX1JYX0ZJRk9fMV9DT1VOVF9TSElGVCAyOAorI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQxKHgpCSgoKHgpICYgMHhmKSA8PCAyNCkKKyNkZWZpbmUgU1NJX1RYX0ZJRk9fMV9DT1VOVF9TSElGVCAyNAorI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTEoeCkJKCgoeCkgJiAweGYpIDw8IDIwKQorI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTEoeCkJKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQwKHgpCSgoKHgpICYgMHhmKSA8PCAxMikKKyNkZWZpbmUgU1NJX1JYX0ZJRk9fMF9DT1VOVF9TSElGVCAxMgorI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQwKHgpCSgoKHgpICYgMHhmKSA8PCAgOCkKKyNkZWZpbmUgU1NJX1RYX0ZJRk9fMF9DT1VOVF9TSElGVCA4CisjZGVmaW5lIFNTSV9TRkNTUl9SRldNMCh4KQkoKCh4KSAmIDB4ZikgPDwgIDQpCisjZGVmaW5lIFNTSV9TRkNTUl9URldNMCh4KQkoKCh4KSAmIDB4ZikgPDwgIDApCisjZGVmaW5lIFNTSV9TRkNTUl9SRldNMF9NQVNLCSgweGYgPDwgIDQpCisjZGVmaW5lIFNTSV9TRkNTUl9URldNMF9NQVNLCSgweGYgPDwgIDApCisKKyNkZWZpbmUgU1NJX1NUUgkJMHgzMAorI2RlZmluZSBTU0lfU1RSX1RFU1QJCSgxIDw8IDE1KQorI2RlZmluZSBTU0lfU1RSX1JDSzJUQ0sJCSgxIDw8IDE0KQorI2RlZmluZSBTU0lfU1RSX1JGUzJURlMJCSgxIDw8IDEzKQorI2RlZmluZSBTU0lfU1RSX1JYU1RBVEUoeCkJKCgoeCkgJiAweGYpIDw8IDgpCisjZGVmaW5lIFNTSV9TVFJfVFhEMlJYRAkJKDEgPDwgIDcpCisjZGVmaW5lIFNTSV9TVFJfVENLMlJDSwkJKDEgPDwgIDYpCisjZGVmaW5lIFNTSV9TVFJfVEZTMlJGUwkJKDEgPDwgIDUpCisjZGVmaW5lIFNTSV9TVFJfVFhTVEFURSh4KQkoKCh4KSAmIDB4ZikgPDwgMCkKKworI2RlZmluZSBTU0lfU09SCQkweDM0CisjZGVmaW5lIFNTSV9TT1JfQ0xLT0ZGCQkoMSA8PCA2KQorI2RlZmluZSBTU0lfU09SX1JYX0NMUgkJKDEgPDwgNSkKKyNkZWZpbmUgU1NJX1NPUl9UWF9DTFIJCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TT1JfSU5JVAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NPUl9XQUlUKHgpCQkoKCh4KSAmIDB4MykgPDwgMSkKKyNkZWZpbmUgU1NJX1NPUl9XQUlUX01BU0sJKDB4MyA8PCAxKQorI2RlZmluZSBTU0lfU09SX1NZTlJTVAkJKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU0FDTlQJMHgzOAorI2RlZmluZSBTU0lfU0FDTlRfRlJESVYoeCkJKCgoeCkgJiAweDNmKSA8PCA1KQorI2RlZmluZSBTU0lfU0FDTlRfV1IJCSgxIDw8IDQpCisjZGVmaW5lIFNTSV9TQUNOVF9SRAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NBQ05UX1RJRgkJKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NBQ05UX0ZWCQkoMSA8PCAxKQorI2RlZmluZSBTU0lfU0FDTlRfQUM5N0VOCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NBQ0FERAkweDNjCisjZGVmaW5lIFNTSV9TQUNEQVQJMHg0MAorI2RlZmluZSBTU0lfU0FUQUcJMHg0NAorI2RlZmluZSBTU0lfU1RNU0sJMHg0OAorI2RlZmluZSBTU0lfU1JNU0sJMHg0YworI2RlZmluZSBTU0lfU0FDQ1NUCTB4NTAKKyNkZWZpbmUgU1NJX1NBQ0NFTgkweDU0CisjZGVmaW5lIFNTSV9TQUNDRElTCTB4NTgKKworLyogU1NJIGNsb2NrIHNvdXJjZXMgKi8KKyNkZWZpbmUgSU1YX1NTUF9TWVNfQ0xLCQkwCisKKy8qIFNTSSBhdWRpbyBkaXZpZGVycyAqLworI2RlZmluZSBJTVhfU1NJX1RYX0RJVl8yCTAKKyNkZWZpbmUgSU1YX1NTSV9UWF9ESVZfUFNSCTEKKyNkZWZpbmUgSU1YX1NTSV9UWF9ESVZfUE0JMgorI2RlZmluZSBJTVhfU1NJX1JYX0RJVl8yCTMKKyNkZWZpbmUgSU1YX1NTSV9SWF9ESVZfUFNSCTQKKyNkZWZpbmUgSU1YX1NTSV9SWF9ESVZfUE0JNQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfcGNtX2RhaVsyXTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBpbXhfc29jX3BsYXRmb3JtOworCisjZGVmaW5lIERSVl9OQU1FICJpbXgtc3NpIgorCitzdHJ1Y3QgaW14X3BjbV9kbWFfcGFyYW1zIHsKKwlpbnQgZG1hOworCXVuc2lnbmVkIGxvbmcgZG1hX2FkZHI7CisJaW50IGJ1cnN0c2l6ZTsKK307CisKK3N0cnVjdCBpbXhfc3NpIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphYzk3X2RldjsKKworCXN0cnVjdCBzbmRfc29jX2RldmljZSBpbXhfYWM5NzsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBpcnE7CisJaW50IGZpcV9lbmFibGU7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCXVuc2lnbmVkIGludCBmbGFnczsKKworCXZvaWQgKCphYzk3X3Jlc2V0KSAoc3RydWN0IHNuZF9hYzk3ICphYzk3KTsKKwl2b2lkICgqYWM5N193YXJtX3Jlc2V0KShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpOworCisJc3RydWN0IGlteF9wY21fZG1hX3BhcmFtcwlkbWFfcGFyYW1zX3J4OworCXN0cnVjdCBpbXhfcGNtX2RtYV9wYXJhbXMJZG1hX3BhcmFtc190eDsKKworCWludCBlbmFibGVkOworfTsKKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKmlteF9zc2lfZmlxX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJc3RydWN0IGlteF9zc2kgKnNzaSk7Cit2b2lkIGlteF9zc2lfZmlxX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGlteF9zc2kgKnNzaSk7CitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqaW14X3NzaV9kbWFfbXgyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJc3RydWN0IGlteF9zc2kgKnNzaSk7CisKK2ludCBzbmRfaW14X3BjbV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitpbnQgaW14X3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtKTsKK3ZvaWQgaW14X3BjbV9mcmVlKHN0cnVjdCBzbmRfcGNtICpwY20pOworCisvKgorICogRG8gbm90IGNoYW5nZSB0aGlzIGFzIHRoZSBGSVEgaGFuZGxlciBkZXBlbmRzIG9uIHRoaXMgc2l6ZQorICovCisjZGVmaW5lIElNWF9TU0lfRE1BQlVGX1NJWkUJKDY0ICogMTAyNCkKKworI2RlZmluZSBETUFfUlhGSUZPX0JVUlNUICAgICAgMHg0CisjZGVmaW5lIERNQV9UWEZJRk9fQlVSU1QgICAgICAweDYKKworI2VuZGlmIC8qIF9JTVhfU1NJX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvbXgxX214Mi1wY20uYyBiL3NvdW5kL3NvYy9pbXgvbXgxX214Mi1wY20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmZmZjZC4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214MV9teDItcGNtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODggKzAsMCBAQAotLyoKLSAqIG14MV9teDItcGNtLmMgLS0gQUxTQSBTb0MgaW50ZXJmYWNlIGZvciBGcmVlc2NhbGUgaS5NWDF4LCBpLk1YMnggQ1BVcwotICoKLSAqIENvcHlyaWdodCAyMDA5IFZpc3RhIFNpbGljb24gUy5MLgotICogQXV0aG9yOiBKYXZpZXIgTWFydGluCi0gKiAgICAgICAgIGphdmllci5tYXJ0aW5AdmlzdGEtc2lsaWNvbi5jb20KLSAqCi0gKiBCYXNlZCBvbiBteGMtcGNtLmMgYnkgTGlhbSBHaXJkd29vZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9kbWEtbXgxLW14Mi5oPgotCi0jaW5jbHVkZSAibXgxX214Mi1wY20uaCIKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgbXgxX214Ml9wY21faGFyZHdhcmUgPSB7Ci0JLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX01NQVAgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAotCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCS5idWZmZXJfYnl0ZXNfbWF4CT0gMzIgKiAxMDI0LAotCS5wZXJpb2RfYnl0ZXNfbWluCT0gNjQsCi0JLnBlcmlvZF9ieXRlc19tYXgJPSA4ICogMTAyNCwKLQkucGVyaW9kc19taW4JCT0gMiwKLQkucGVyaW9kc19tYXgJCT0gMjU1LAotCS5maWZvX3NpemUJCT0gMCwKLX07Ci0KLXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSB7Ci0JaW50IGRtYV9jaDsKLQlpbnQgYWN0aXZlOwotCXVuc2lnbmVkIGludCBwZXJpb2Q7Ci0JdW5zaWduZWQgaW50IHBlcmlvZHM7Ci0JaW50IHR4X3NwaW47Ci0Jc3BpbmxvY2tfdCBkbWFfbG9jazsKLQlzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtczsKLX07Ci0KLQotLyoqCi0gICogVGhpcyBmdW5jdGlvbiBzdG9wcyB0aGUgY3VycmVudCBkbWEgdHJhbnNmZXIgZm9yIHBsYXliYWNrCi0gICogYW5kIGNsZWFycyB0aGUgZG1hIHBvaW50ZXJzLgotICAqCi0gICogQHBhcmFtCXN1YnN0cmVhbQlwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgc3RyZWFtLgotICAqCi0gICovCi1zdGF0aWMgaW50IGF1ZGlvX3N0b3BfZG1hKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJ0ZC0+ZG1hX2xvY2ssIGZsYWdzKTsKLQotCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwotCi0JcHJ0ZC0+YWN0aXZlID0gMDsKLQlwcnRkLT5wZXJpb2QgPSAwOwotCXBydGQtPnBlcmlvZHMgPSAwOwotCi0JLyogdGhpcyBzdG9wcyB0aGUgZG1hIGNoYW5uZWwgYW5kIGNsZWFycyB0aGUgYnVmZmVyIHB0cnMgKi8KLQotCWlteF9kbWFfZGlzYWJsZShwcnRkLT5kbWFfY2gpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJ0ZC0+ZG1hX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIG5ldyBhdWRpbyBibG9jayBuZWVkcyB0byBiZQotICAqIHRyYW5zZmVycmVkIHRvIHRoZSBjb2RlYy4gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRoZSBhZGRyZXNzIGFuZCB0aGUgc2l6ZQotICAqIG9mIHRoZSBuZXcgYmxvY2sgYW5kIHN0YXJ0IGEgbmV3IERNQSB0cmFuc2Zlci4KLSAgKgotICAqIEBwYXJhbQlzdWJzdHJlYW0JcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHN0cmVhbS4KLSAgKgotICAqLwotc3RhdGljIGludCBkbWFfbmV3X3BlcmlvZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gIHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IGRtYV9zaXplOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JaW50IHJldCA9IDA7Ci0JZG1hX2FkZHJfdCBtZW1fYWRkcjsKLQl1bnNpZ25lZCBpbnQgZGV2X2FkZHI7Ci0KLQlpZiAocHJ0ZC0+YWN0aXZlKSB7Ci0JCWRtYV9zaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQkJb2Zmc2V0ID0gZG1hX3NpemUgKiBwcnRkLT5wZXJpb2Q7Ci0KLQkJcHJfZGVidWcoIiVzOiBwZXJpb2QgKCVkKSBvdXQgb2YgKCVkKVxuIiwgX19mdW5jX18sCi0JCQlwcnRkLT5wZXJpb2QsCi0JCQlydW50aW1lLT5wZXJpb2RzKTsKLQkJcHJfZGVidWcoInBlcmlvZF9zaXplICVkIGZyYW1lc1xuIG9mZnNldCAlZCBieXRlc1xuIiwKLQkJCSh1bnNpZ25lZCBpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsCi0JCQlvZmZzZXQpOwotCQlwcl9kZWJ1ZygiZG1hX3NpemUgJWQgYnl0ZXNcbiIsIGRtYV9zaXplKTsKLQotCQlzbmRfQlVHX09OKGRtYV9zaXplID4gbXgxX214Ml9wY21faGFyZHdhcmUucGVyaW9kX2J5dGVzX21heCk7Ci0KLQkJbWVtX2FkZHIgPSAoZG1hX2FkZHJfdCkocnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQpOwotCQlkZXZfYWRkciA9IHBydGQtPmRtYV9wYXJhbXMtPnBlcl9hZGRyZXNzOwotCQlwcl9kZWJ1ZygiJXM6IG1lbV9hZGRyIGlzICV4XG4gZGV2X2FkZHIgaXMgJXhcbiIsCi0JCQkJIF9fZnVuY19fLCBtZW1fYWRkciwgZGV2X2FkZHIpOwotCi0JCXJldCA9IGlteF9kbWFfc2V0dXBfc2luZ2xlKHBydGQtPmRtYV9jaCwgbWVtX2FkZHIsCi0JCQkJCWRtYV9zaXplLCBkZXZfYWRkciwKLQkJCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+dHJhbnNmZXJfdHlwZSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVycm9yICVkIGNvbmZpZ3VyaW5nIERNQVxuIiwgcmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJaW14X2RtYV9lbmFibGUocHJ0ZC0+ZG1hX2NoKTsKLQotCQlwcl9kZWJ1ZygiJXM6IHRyYW5zZmVyIGVuYWJsZWRcbm1lbV9hZGRyID0gJXhcbiIsCi0JCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludCkgbWVtX2FkZHIpOwotCQlwcl9kZWJ1ZygiZGV2X2FkZHIgPSAleFxuZG1hX3NpemUgPSAlZFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpIGRldl9hZGRyLCBkbWFfc2l6ZSk7Ci0KLQkJcHJ0ZC0+dHhfc3BpbiA9IDE7IC8qIEZHQSBsaXR0bGUgdHJpY2sgdG8gcmV0cmlldmUgRE1BIHBvcyAqLwotCQlwcnRkLT5wZXJpb2QrKzsKLQkJcHJ0ZC0+cGVyaW9kICU9IHJ1bnRpbWUtPnBlcmlvZHM7Ci0gICAgfQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyoqCi0gICogVGhpcyBpcyBhIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkCi0gICogd2hlbiBhIFRYIHRyYW5zZmVyIGZpbmlzaGVzLiBUaGUgY2FsbCBvY2N1cnMKLSAgKiBpbiBpbnRlcnJ1cHQgY29udGV4dC4KLSAgKgotICAqIEBwYXJhbQlkYXQJcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHN0cmVhbS4KLSAgKgotICAqLwotc3RhdGljIHZvaWQgYXVkaW9fZG1hX2lycShpbnQgY2hhbm5lbCwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZDsKLQl1bnNpZ25lZCBpbnQgZG1hX3NpemU7Ci0JdW5zaWduZWQgaW50IHByZXZpb3VzX3BlcmlvZDsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCi0Jc3Vic3RyZWFtID0gZGF0YTsKLQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0JcHJldmlvdXNfcGVyaW9kICA9IHBydGQtPnBlcmlvZHM7Ci0JZG1hX3NpemUgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOwotCW9mZnNldCA9IGRtYV9zaXplICogcHJldmlvdXNfcGVyaW9kOwotCi0JcHJ0ZC0+dHhfc3BpbiA9IDA7Ci0JcHJ0ZC0+cGVyaW9kcysrOwotCXBydGQtPnBlcmlvZHMgJT0gcnVudGltZS0+cGVyaW9kczsKLQotCXByX2RlYnVnKCIlczogaXJxIHBlciAlZCBvZmZzZXQgJXhcbiIsIF9fZnVuY19fLCBwcnRkLT5wZXJpb2RzLCBvZmZzZXQpOwotCi0JLyoKLQkgICogSWYgd2UgYXJlIGdldHRpbmcgYSBjYWxsYmFjayBmb3IgYW4gYWN0aXZlIHN0cmVhbSB0aGVuIHdlIGluZm9ybQotCSAgKiB0aGUgUENNIG1pZGRsZSBsYXllciB3ZSd2ZSBmaW5pc2hlZCBhIHBlcmlvZAotCSAgKi8KLQlpZiAocHJ0ZC0+YWN0aXZlKQotCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7Ci0KLQkvKgotCSAgKiBUcmlnIG5leHQgRE1BIHRyYW5zZmVyCi0JICAqLwotCWRtYV9uZXdfcGVyaW9kKHN1YnN0cmVhbSk7Ci19Ci0KLS8qKgotICAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgaGFyZHdhcmUgdG8gYWxsb3cgYXVkaW8KLSAgKiBwbGF5YmFjayBvcGVyYXRpb25zLiBJdCBpcyBjYWxsZWQgYnkgQUxTQSBmcmFtZXdvcmsuCi0gICoKLSAgKiBAcGFyYW0Jc3Vic3RyZWFtCXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCBzdHJlYW0uCi0gICoKLSAgKiBAcmV0dXJuICAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KLSAgKi8KLXN0YXRpYyBpbnQKLXNuZF9teDFfbXgyX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9ICBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCi0JcHJ0ZC0+cGVyaW9kID0gMDsKLQlwcnRkLT5wZXJpb2RzID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCWludCByZXQ7Ci0KLQlyZXQgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAotCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGZhaWxlZCB0byBtYWxsb2MgcGNtIHBhZ2VzIFxuIiwKLQkJX19mdW5jX18sIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBzbmRfaW14MV9teDJfYXVkaW9faHdfcGFyYW1zIHJ1bnRpbWUtPmRtYV9hZGRyIDB4KCV4KVxuIiwKLQkJX19mdW5jX18sICh1bnNpZ25lZCBpbnQpcnVudGltZS0+ZG1hX2FkZHIpOwotCXByX2RlYnVnKCIlczogc25kX2lteDFfbXgyX2F1ZGlvX2h3X3BhcmFtcyBydW50aW1lLT5kbWFfYXJlYSAweCgleClcbiIsCi0JCV9fZnVuY19fLCAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmRtYV9hcmVhKTsKLQlwcl9kZWJ1ZygiJXM6IHNuZF9pbXgxX214Ml9hdWRpb19od19wYXJhbXMgcnVudGltZS0+ZG1hX2J5dGVzIDB4KCV4KVxuIiwKLQkJX19mdW5jX18sICh1bnNpZ25lZCBpbnQpcnVudGltZS0+ZG1hX2J5dGVzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQotCWlteF9kbWFfZnJlZShwcnRkLT5kbWFfY2gpOwotCi0Jc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0ID0gMDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQkJcHJ0ZC0+dHhfc3BpbiA9IDA7Ci0JCS8qIHJlcXVlc3RlZCBzdHJlYW0gc3RhcnR1cCAqLwotCQlwcnRkLT5hY3RpdmUgPSAxOwotCQlwcl9kZWJ1ZygiJXM6IHN0YXJ0aW5nIGRtYV9uZXdfcGVyaW9kXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IGRtYV9uZXdfcGVyaW9kKHN1YnN0cmVhbSk7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQkJLyogcmVxdWVzdGVkIHN0cmVhbSBzaHV0ZG93biAqLwotCQlwcl9kZWJ1ZygiJXM6IHN0b3BwaW5nIGRtYSB0cmFuc2ZlclxuIiwgX19mdW5jX18pOwotCQlyZXQgPSBhdWRpb19zdG9wX2RtYShzdWJzdHJlYW0pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKLW14MV9teDJfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IDA7Ci0KLQkvKiB0eF9zcGluIHZhbHVlIGlzIHVzZWQgaGVyZSB0byBjaGVjayBpZiBhIHRyYW5zZmVyIGlzIGFjdGl2ZSAqLwotCWlmIChwcnRkLT50eF9zcGluKSB7Ci0JCW9mZnNldCA9IChydW50aW1lLT5wZXJpb2Rfc2l6ZSAqIChwcnRkLT5wZXJpb2RzKSkgKwotCQkJCQkJKHJ1bnRpbWUtPnBlcmlvZF9zaXplID4+IDEpOwotCQlpZiAob2Zmc2V0ID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQotCQkJb2Zmc2V0ID0gcnVudGltZS0+cGVyaW9kX3NpemUgPj4gMTsKLQl9IGVsc2UgewotCQlvZmZzZXQgPSAocnVudGltZS0+cGVyaW9kX3NpemUgKiAocHJ0ZC0+cGVyaW9kcykpOwotCQlpZiAob2Zmc2V0ID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQotCQkJb2Zmc2V0ID0gMDsKLQl9Ci0JcHJfZGVidWcoIiVzOiBwb2ludGVyIG9mZnNldCAleFxuIiwgX19mdW5jX18sIG9mZnNldCk7Ci0KLQlyZXR1cm4gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQ7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zICpkbWFfZGF0YSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKLQlpbnQgcmV0OwotCi0Jc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZteDFfbXgyX3BjbV9oYXJkd2FyZSk7Ci0KLQlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLAotCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlwcnRkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBydGQgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBwcnRkOwotCi0JaWYgKCFkbWFfZGF0YSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwcnRkLT5kbWFfcGFyYW1zID0gZG1hX2RhdGE7Ci0KLQlwcl9kZWJ1ZygiJXM6IFJlcXVlc3RpbmcgZG1hIGNoYW5uZWwgKCVzKVxuIiwgX19mdW5jX18sCi0JCQkJCQlwcnRkLT5kbWFfcGFyYW1zLT5uYW1lKTsKLQlyZXQgPSBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbyhwcnRkLT5kbWFfcGFyYW1zLT5uYW1lLCBETUFfUFJJT19ISUdIKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yICVkIHJlcXVlc3RpbmcgZG1hIGNoYW5uZWxcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXBydGQtPmRtYV9jaCA9IHJldDsKLQlpbXhfZG1hX2NvbmZpZ19idXJzdGxlbihwcnRkLT5kbWFfY2gsCi0JCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+d2F0ZXJtYXJrX2xldmVsKTsKLQotCXJldCA9IGlteF9kbWFfY29uZmlnX2NoYW5uZWwocHJ0ZC0+ZG1hX2NoLAotCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+cGVyX2NvbmZpZywKLQkJCXBydGQtPmRtYV9wYXJhbXMtPm1lbV9jb25maWcsCi0JCQlwcnRkLT5kbWFfcGFyYW1zLT5ldmVudF9pZCwgMCk7Ci0KLQlpZiAocmV0KSB7Ci0JCXByX2RlYnVnKEtFUk5fRVJSICJFcnJvciAlZCBjb25maWd1cmluZyBkbWEgY2hhbm5lbCAlZFxuIiwKLQkJCXJldCwgcHJ0ZC0+ZG1hX2NoKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlwcl9kZWJ1ZygiJXM6IFNldHRpbmcgdHggZG1hIGNhbGxiYWNrIGZ1bmN0aW9uXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0ID0gaW14X2RtYV9zZXR1cF9oYW5kbGVycyhwcnRkLT5kbWFfY2gsCi0JCQkJYXVkaW9fZG1hX2lycSwgTlVMTCwKLQkJCQkodm9pZCAqKXN1YnN0cmVhbSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCBzZXR0aW5nIGRtYSBjYWxsYmFjayBmdW5jdGlvblxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci0KLSBvdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBteDFfbXgyX3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQotCWtmcmVlKHBydGQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fbW1hcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXJldHVybiBkbWFfbW1hcF93cml0ZWNvbWJpbmUoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldiwgdm1hLAotCQkJCSAgICAgcnVudGltZS0+ZG1hX2FyZWEsCi0JCQkJICAgICBydW50aW1lLT5kbWFfYWRkciwKLQkJCQkgICAgIHJ1bnRpbWUtPmRtYV9ieXRlcyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgbXgxX214Ml9wY21fb3BzID0gewotCS5vcGVuCQk9IG14MV9teDJfcGNtX29wZW4sCi0JLmNsb3NlCQk9IG14MV9teDJfcGNtX2Nsb3NlLAotCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKLQkuaHdfcGFyYW1zCT0gbXgxX214Ml9wY21faHdfcGFyYW1zLAotCS5od19mcmVlCT0gbXgxX214Ml9wY21faHdfZnJlZSwKLQkucHJlcGFyZQk9IHNuZF9teDFfbXgyX3ByZXBhcmUsCi0JLnRyaWdnZXIJPSBteDFfbXgyX3BjbV90cmlnZ2VyLAotCS5wb2ludGVyCT0gbXgxX214Ml9wY21fcG9pbnRlciwKLQkubW1hcAkJPSBteDFfbXgyX3BjbV9tbWFwLAotfTsKLQotc3RhdGljIHU2NCBteDFfbXgyX3BjbV9kbWFtYXNrID0gMHhmZmZmZmZmZjsKLQotc3RhdGljIGludCBteDFfbXgyX3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07Ci0Jc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOwotCXNpemVfdCBzaXplID0gbXgxX214Ml9wY21faGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heDsKLQlidWYtPmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOwotCWJ1Zi0+ZGV2LmRldiA9IHBjbS0+Y2FyZC0+ZGV2OwotCWJ1Zi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQotCS8qIFJlc2VydmUgdW5jYWNoZWQtYnVmZmVyZWQgbWVtb3J5IGFyZWEgZm9yIERNQSAqLwotCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUocGNtLT5jYXJkLT5kZXYsIHNpemUsCi0JCQkJCSAgICZidWYtPmFkZHIsIEdGUF9LRVJORUwpOwotCi0JcHJfZGVidWcoIiVzOiBwcmVhbGxvY2F0ZV9kbWFfYnVmZmVyOiBhcmVhPSVwLCBhZGRyPSVwLCBzaXplPSVkXG4iLAotCQlfX2Z1bmNfXywgKHZvaWQgKikgYnVmLT5hcmVhLCAodm9pZCAqKSBidWYtPmFkZHIsIHNpemUpOwotCi0JaWYgKCFidWYtPmFyZWEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYnVmLT5ieXRlcyA9IHNpemU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MV9teDJfcGNtX2ZyZWVfZG1hX2J1ZmZlcnMoc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKLQlpbnQgc3RyZWFtOwotCi0JZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCAyOyBzdHJlYW0rKykgewotCQlzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07Ci0JCWlmICghc3Vic3RyZWFtKQotCQkJY29udGludWU7Ci0KLQkJYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKLQkJaWYgKCFidWYtPmFyZWEpCi0JCQljb250aW51ZTsKLQotCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUocGNtLT5jYXJkLT5kZXYsIGJ1Zi0+Ynl0ZXMsCi0JCQkJICAgICAgYnVmLT5hcmVhLCBidWYtPmFkZHIpOwotCQlidWYtPmFyZWEgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBteDFfbXgyX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtKQotewotCWludCByZXQgPSAwOwotCi0JaWYgKCFjYXJkLT5kZXYtPmRtYV9tYXNrKQotCQljYXJkLT5kZXYtPmRtYV9tYXNrID0gJm14MV9teDJfcGNtX2RtYW1hc2s7Ci0JaWYgKCFjYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrKQotCQljYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZjsKLQotCWlmIChkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbikgewotCQlyZXQgPSBteDFfbXgyX3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKLQkJCVNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOwotCQlwcl9kZWJ1ZygiJXM6IHByZWFsbG9jYXRlIHBsYXliYWNrIGJ1ZmZlclxuIiwgX19mdW5jX18pOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGRhaS0+Y2FwdHVyZS5jaGFubmVsc19taW4pIHsKLQkJcmV0ID0gbXgxX214Ml9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCi0JCQlTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOwotCQlwcl9kZWJ1ZygiJXM6IHByZWFsbG9jYXRlIGNhcHR1cmUgYnVmZmVyXG4iLCBfX2Z1bmNfXyk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0gb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIG14MV9teDJfc29jX3BsYXRmb3JtID0gewotCS5uYW1lCQk9ICJteDFfbXgyLWF1ZGlvIiwKLQkucGNtX29wcyAJPSAmbXgxX214Ml9wY21fb3BzLAotCS5wY21fbmV3CT0gbXgxX214Ml9wY21fbmV3LAotCS5wY21fZnJlZQk9IG14MV9teDJfcGNtX2ZyZWVfZG1hX2J1ZmZlcnMsCi19OwotRVhQT1JUX1NZTUJPTF9HUEwobXgxX214Ml9zb2NfcGxhdGZvcm0pOwotCi1zdGF0aWMgaW50IF9faW5pdCBteDFfbXgyX3NvY19wbGF0Zm9ybV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJm14MV9teDJfc29jX3BsYXRmb3JtKTsKLX0KLW1vZHVsZV9pbml0KG14MV9teDJfc29jX3BsYXRmb3JtX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbXgxX214Ml9zb2NfcGxhdGZvcm1fZXhpdCh2b2lkKQotewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmbXgxX214Ml9zb2NfcGxhdGZvcm0pOwotfQotbW9kdWxlX2V4aXQobXgxX214Ml9zb2NfcGxhdGZvcm1fZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkphdmllciBNYXJ0aW4sIGphdmllci5tYXJ0aW5AdmlzdGEtc2lsaWNvbi5jb20iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIGkuTVgyeCwgaS5NWDF4IFBDTSBETUEgbW9kdWxlIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214MV9teDItcGNtLmggYi9zb3VuZC9zb2MvaW14L214MV9teDItcGNtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNTI4MTAuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqIG14MV9teDItcGNtLmggOi0gQVNvQyBwbGF0Zm9ybSBoZWFkZXIgZm9yIEZyZWVzY2FsZSBpLk1YMXgsIGkuTVgyeAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfTVgxX01YMl9QQ01fSAotI2RlZmluZSBfTVgxX01YMl9QQ01fSAotCi0vKiBETUEgaW5mb3JtYXRpb24gZm9yIG14MV9teDIgcGxhdGZvcm1zICovCi1zdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyB7Ci0JY2hhciAqbmFtZTsJCQkvKiBzdHJlYW0gaWRlbnRpZmllciAqLwotCXVuc2lnbmVkIGludCB0cmFuc2Zlcl90eXBlOwkvKiBSRUFEIG9yIFdSSVRFIERNQSB0cmFuc2ZlciAqLwotCWRtYV9hZGRyX3QgcGVyX2FkZHJlc3M7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIFNTSSBmaWZvICovCi0JaW50IGV2ZW50X2lkOwkJCS8qIGZpeGVkIERNQSBudW1iZXIgZm9yIFNTSSBmaWZvICovCi0JaW50IHdhdGVybWFya19sZXZlbDsJCS8qIFNTSSBmaWZvIHdhdGVybWFyayBsZXZlbCAqLwotCWludCBwZXJfY29uZmlnOwkJCS8qIERNQSBDb25maWcgZmxhZ3MgZm9yIHBlcmlwaGVyYWwgKi8KLQlpbnQgbWVtX2NvbmZpZzsJCQkvKiBETUEgQ29uZmlnIGZsYWdzIGZvciBSQU0gKi8KLSB9OwotCi0vKiBwbGF0Zm9ybSBkYXRhICovCi1leHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gbXgxX214Ml9zb2NfcGxhdGZvcm07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jIGIvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2QyYTI0Li4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYworKysgL2Rldi9udWxsCkBAIC0xLDMxOCArMCwwIEBACi0vKgotICogbXgyN3Zpc193bTg5NzQuYyAgLS0gIFNvQyBhdWRpbyBmb3IgbXgyN3ZpcwotICoKLSAqIENvcHlyaWdodCAyMDA5IFZpc3RhIFNpbGljb24gUy5MLgotICogQXV0aG9yOiBKYXZpZXIgTWFydGluCi0gKiAgICAgICAgIGphdmllci5tYXJ0aW5AdmlzdGEtc2lsaWNvbi5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+Ci0KLQotI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg5NzQuaCIKLSNpbmNsdWRlICJteDFfbXgyLXBjbS5oIgotI2luY2x1ZGUgIm14Yy1zc2kuaCIKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+Ci0KLSNkZWZpbmUgSUdOT1JFRF9BUkcgMAotCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIG14Mjd2aXM7Ci0KLS8qKgotICAqIFRoaXMgZnVuY3Rpb24gY29ubmVjdHMgU1NJMSAoSFBDUjEpIGFzIHNsYXZlIHRvCi0gICogU1NJMSBleHRlcm5hbCBzaWduYWxzIChQUENSMSkKLSAgKiBBcyBzbGF2ZSwgSFBDUjEgbXVzdCBzZXQgVEZTRElSIGFuZCBUQ0xLRElSIGFzIGlucHV0cyBmcm9tCi0gICogcG9ydCA0Ci0gICovCi12b2lkIGF1ZG11eF9jb25uZWN0XzFfNCh2b2lkKQotewotCXByX2RlYnVnKCJBVURNVVg6IG5vcm1hbCBvcGVyYXRpb24gbW9kZVxuIik7Ci0JLyogUmVzZXQgSFBDUjEgYW5kIFBQQ1IxICovCi0KLQlEQU1fSFBDUjEgPSAweDAwMDAwMDAwOwotCURBTV9QUENSMSA9IDB4MDAwMDAwMDA7Ci0KLQkvKiBzZXQgdG8gc3luY2hyb25vdXMgKi8KLQlEQU1fSFBDUjEgfD0gQVVETVVYX0hQQ1JfU1lOOwotCURBTV9QUENSMSB8PSBBVURNVVhfUFBDUl9TWU47Ci0KLQotCS8qIHNldCBSeCBzb3VyY2VzIDEgPC0tPiA0ICovCi0JREFNX0hQQ1IxIHw9IEFVRE1VWF9IUENSX1JYRFNFTCgzKTsgLyogcG9ydCA0ICovCi0JREFNX1BQQ1IxIHw9IEFVRE1VWF9QUENSX1JYRFNFTCgwKTsgLyogcG9ydCAxICovCi0KLQkvKiBzZXQgVHggZnJhbWUgYW5kIENsb2NrIGRpcmVjdGlvbiBhbmQgc291cmNlICA0IC0tPiAxIG91dHB1dCAqLwotCURBTV9IUENSMSB8PSBBVURNVVhfSFBDUl9URlNESVIgfCBBVURNVVhfSFBDUl9UQ0xLRElSOwotCURBTV9IUENSMSB8PSBBVURNVVhfSFBDUl9URkNTRUwoMyk7IC8qIFR4RFMgYW5kIFR4Q2NsayBmcm9tIHBvcnQgNCAqLwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG14Mjd2aXNfaGlmaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0Jc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQl1bnNpZ25lZCBpbnQgcGxsX291dCA9IDAsIGJjbGsgPSAwLCBmbXQgPSAwLCBtY2xrID0gMDsKLQlpbnQgcmV0ID0gMDsKLQotCS8qCi0JICogVGhlIFdNODk3NCBpcyBiZXR0ZXIgYXQgZ2VuZXJhdGluZyBhY2N1cmF0ZSBhdWRpbyBjbG9ja3MgdGhhbiB0aGUKLQkgKiBNWDI3IFNTSSBjb250cm9sbGVyLCBzbyB3ZSB3aWxsIHVzZSBpdCBhcyBtYXN0ZXIgd2hlbiB3ZSBjYW4uCi0JICovCi0Jc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Ci0JY2FzZSA4MDAwOgotCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOwotCQltY2xrID0gV004OTc0X01DTEtESVZfMTI7Ci0JCXBsbF9vdXQgPSAyNDU3NjAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxNjAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQlicmVhazsKLQljYXNlIDQ4MDAwOgotCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOwotCQliY2xrID0gV004OTc0X0JDTEtESVZfNDsKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQlicmVhazsKLQljYXNlIDk2MDAwOgotCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOwotCQliY2xrID0gV004OTc0X0JDTEtESVZfMjsKLQkJcGxsX291dCA9IDEyMjg4MDAwOwotCQlicmVhazsKLQljYXNlIDExMDI1OgotCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOwotCQliY2xrID0gV004OTc0X0JDTEtESVZfMTY7Ci0JCXBsbF9vdXQgPSAxMTI4OTYwMDsKLQkJYnJlYWs7Ci0JY2FzZSAyMjA1MDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzg7Ci0JCXBsbF9vdXQgPSAxMTI4OTYwMDsKLQkJYnJlYWs7Ci0JY2FzZSA0NDEwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzQ7Ci0JCW1jbGsgPSBXTTg5NzRfTUNMS0RJVl8yOwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCWNhc2UgODgyMDA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl8yOwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCX0KLQotCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfZm10KGNvZGVjX2RhaSwKLQkJU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfSUYgfAotCQlTTkRfU09DX0RBSUZNVF9TWU5DIHwgZm10KTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGZyb20gY29kZWMgREFJIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBjcHVfZGFpLT5vcHMtPnNldF9mbXQoY3B1X2RhaSwKLQkJU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQlTTkRfU09DX0RBSUZNVF9TWU5DIHwgZm10KTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGZyb20gY3B1IERBSSBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBQdXQgREMgZmllbGQgb2YgU1RDQ1IgdG8gMSAobm90IHplcm8pICovCi0JcmV0ID0gY3B1X2RhaS0+b3BzLT5zZXRfdGRtX3Nsb3QoY3B1X2RhaSwgMCwgMik7Ci0KLQkvKiBzZXQgdGhlIFNTSSBzeXN0ZW0gY2xvY2sgYXMgaW5wdXQgKi8KLQlyZXQgPSBjcHVfZGFpLT5vcHMtPnNldF9zeXNjbGsoY3B1X2RhaSwgSU1YX1NTUF9TWVNfQ0xLLCAwLAotCQlTTkRfU09DX0NMT0NLX0lOKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdoZW4gc2V0dGluZyBzeXN0ZW0gU1NJIGNsa1xuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogc2V0IGNvZGVjIEJDTEsgZGl2aXNpb24gZm9yIHNhbXBsZSByYXRlICovCi0JcmV0ID0gY29kZWNfZGFpLT5vcHMtPnNldF9jbGtkaXYoY29kZWNfZGFpLCBXTTg5NzRfQkNMS0RJViwgYmNsayk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3aGVuIHNldHRpbmcgQkNMSyBkaXZpc2lvblxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0KLQkvKiBjb2RlYyBQTEwgaW5wdXQgaXMgMjUgTUh6ICovCi0JcmV0ID0gY29kZWNfZGFpLT5vcHMtPnNldF9wbGwoY29kZWNfZGFpLCBJR05PUkVEX0FSRywgSUdOT1JFRF9BUkcsCi0JCQkJCTI1MDAwMDAwLCBwbGxfb3V0KTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdoZW4gc2V0dGluZyBQTEwgaW5wdXRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qc2V0IGNvZGVjIE1DTEsgZGl2aXNpb24gZm9yIHNhbXBsZSByYXRlICovCi0JcmV0ID0gY29kZWNfZGFpLT5vcHMtPnNldF9jbGtkaXYoY29kZWNfZGFpLCBXTTg5NzRfTUNMS0RJViwgbWNsayk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3aGVuIHNldHRpbmcgTUNMSyBkaXZpc2lvblxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN3Zpc19oaWZpX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKLQotCS8qIGRpc2FibGUgdGhlIFBMTCAqLwotCXJldHVybiBjb2RlY19kYWktPm9wcy0+c2V0X3BsbChjb2RlY19kYWksIElHTk9SRURfQVJHLCBJR05PUkVEX0FSRywKLQkJCQkgICAgICAgMCwgMCk7Ci19Ci0KLS8qCi0gKiBteDI3dmlzIFdNODk3NCBIaUZpIERBSSBvcHNlcmF0aW9ucy4KLSAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBteDI3dmlzX2hpZmlfb3BzID0gewotCS5od19wYXJhbXMgPSBteDI3dmlzX2hpZmlfaHdfcGFyYW1zLAotCS5od19mcmVlID0gbXgyN3Zpc19oaWZpX2h3X2ZyZWUsCi19OwotCi0KLXN0YXRpYyBpbnQgbXgyN3Zpc19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDI3dmlzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14Mjd2aXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IGdldF9zc2lfY2xrKDAsICZwZGV2LT5kZXYpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FudCBnZXQgc3NpIGNsb2NrXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDI3dmlzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXB1dF9zc2lfY2xrKDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgbXgyN3Zpc19kYWlbXSA9IHsKLXsgLyogSGlmaSBQbGF5YmFjayovCi0JLm5hbWUgPSAiV004OTc0IiwKLQkuc3RyZWFtX25hbWUgPSAiV004OTc0IEhpRmkiLAotCS5jcHVfZGFpID0gJmlteF9zc2lfcGNtX2RhaVswXSwKLQkuY29kZWNfZGFpID0gJndtODk3NF9kYWksCi0JLm9wcyA9ICZteDI3dmlzX2hpZmlfb3BzLAotfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIG14Mjd2aXMgPSB7Ci0JLm5hbWUgPSAibXgyN3ZpcyIsCi0JLnBsYXRmb3JtID0gJm14MV9teDJfc29jX3BsYXRmb3JtLAotCS5wcm9iZSA9IG14Mjd2aXNfcHJvYmUsCi0JLnJlbW92ZSA9IG14Mjd2aXNfcmVtb3ZlLAotCS5zdXNwZW5kX3ByZSA9IG14Mjd2aXNfc3VzcGVuZCwKLQkucmVzdW1lX3Bvc3QgPSBteDI3dmlzX3Jlc3VtZSwKLQkuZGFpX2xpbmsgPSBteDI3dmlzX2RhaSwKLQkubnVtX2xpbmtzID0gQVJSQVlfU0laRShteDI3dmlzX2RhaSksCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG14Mjd2aXNfc25kX2RldmRhdGEgPSB7Ci0JLmNhcmQgPSAmbXgyN3ZpcywKLQkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204OTc0LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm14Mjd2aXNfc25kX2RldmljZTsKLQotLyogVGVtcG9yYWwgZGVmaW5pdGlvbiBvZiBib2FyZCBzcGVjaWZpYyBiZWhhdmlvdXIgKi8KLXZvaWQgZ3Bpb19zc2lfYWN0aXZlKGludCBzc2lfbnVtKQotewotCWludCByZXQgPSAwOwotCi0JdW5zaWduZWQgaW50IHNzaTFfcGluc1tdID0gewotCQlQQzIwX1BGX1NTSTFfRlMsCi0JCVBDMjFfUEZfU1NJMV9SWEQsCi0JCVBDMjJfUEZfU1NJMV9UWEQsCi0JCVBDMjNfUEZfU1NJMV9DTEssCi0JfTsKLQl1bnNpZ25lZCBpbnQgc3NpMl9waW5zW10gPSB7Ci0JCVBDMjRfUEZfU1NJMl9GUywKLQkJUEMyNV9QRl9TU0kyX1JYRCwKLQkJUEMyNl9QRl9TU0kyX1RYRCwKLQkJUEMyN19QRl9TU0kyX0NMSywKLQl9OwotCWlmIChzc2lfbnVtID09IDApCi0JCXJldCA9IG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoc3NpMV9waW5zLAotCQkJCUFSUkFZX1NJWkUoc3NpMV9waW5zKSwgIlVTQiBPVEciKTsKLQllbHNlCi0JCXJldCA9IG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoc3NpMl9waW5zLAotCQkJCUFSUkFZX1NJWkUoc3NpMl9waW5zKSwgIlVTQiBPVEciKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlcXVlc3Rpbmcgc3NpICV4IHBpbnNcbiIsIHNzaV9udW0pOwotfQotCi0KLXN0YXRpYyBpbnQgX19pbml0IG14Mjd2aXNfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlteDI3dmlzX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKLQlpZiAoIW14Mjd2aXNfc25kX2RldmljZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShteDI3dmlzX3NuZF9kZXZpY2UsICZteDI3dmlzX3NuZF9kZXZkYXRhKTsKLQlteDI3dmlzX3NuZF9kZXZkYXRhLmRldiA9ICZteDI3dmlzX3NuZF9kZXZpY2UtPmRldjsKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG14Mjd2aXNfc25kX2RldmljZSk7Ci0KLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQVNvQzogUGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChteDI3dmlzX3NuZF9kZXZpY2UpOwotCX0KLQotCS8qIFdNODk3NCB1c2VzIFNTSTEgKEhQQ1IxKSB2aWEgQVVETVVYIHBvcnQgNCBmb3IgYXVkaW8gKFBQQ1IxKSAqLwotCWdwaW9fc3NpX2FjdGl2ZSgwKTsKLQlhdWRtdXhfY29ubmVjdF8xXzQoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBteDI3dmlzX2V4aXQodm9pZCkKLXsKLQkvKiBXZSBzaG91bGQgY2FsbCBzb21lICJzc2lfZ3Bpb19pbmFjdGl2ZSgpIiBwcm9wZXJseSAqLwotfQotCi1tb2R1bGVfaW5pdChteDI3dmlzX2luaXQpOwotbW9kdWxlX2V4aXQobXgyN3Zpc19leGl0KTsKLQotCi1NT0RVTEVfQVVUSE9SKCJKYXZpZXIgTWFydGluLCBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFdNODk3NCBteDI3dmlzIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYyBiL3NvdW5kL3NvYy9pbXgvbXhjLXNzaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2RlZmU2Li4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9pbXgvbXhjLXNzaS5jCisrKyAvZGV2L251bGwKQEAgLTEsODYwICswLDAgQEAKLS8qCi0gKiBteGMtc3NpLmMgIC0tICBTU0kgZHJpdmVyIGZvciBGcmVlc2NhbGUgSU1YCi0gKgotICogQ29weXJpZ2h0IDIwMDYgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQotICoKLSAqICBCYXNlZCBvbiBteGMtYWxzYS1tYzEzNzgzIChDKSAyMDA2IEZyZWVzY2FsZS4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUT0RPOgotICogICBOZWVkIHRvIHJld29yayBTU0kgcmVnaXN0ZXIgZGVmcyB3aGVuIG5ldyBkZWZzIGdvIGludG8gbWFpbmxpbmUuCi0gKiAgIEFkZCBzdXBwb3J0IGZvciBURE0gYW5kIEZJRk8gMS4KLSAqICAgQWRkIHN1cHBvcnQgZm9yIGkubXgzeCBETUEgaW50ZXJmYWNlLgotICoKLSAqLwotCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxtYWNoL2RtYS1teDEtbXgyLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgIm14Yy1zc2kuaCIKLSNpbmNsdWRlICJteDFfbXgyLXBjbS5oIgotCi0jZGVmaW5lIFNTSTFfUE9SVAkwCi0jZGVmaW5lIFNTSTJfUE9SVAkxCi0KLXN0YXRpYyBpbnQgc3NpX2FjdGl2ZVsyXSA9IHswLCAwfTsKLQotLyogRE1BIGluZm9ybWF0aW9uIGZvciBteDFfbXgyIHBsYXRmb3JtcyAqLwotc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kxX3BjbV9zdGVyZW9fb3V0MCA9IHsKLQkubmFtZQkJCT0gIlNTSTEgUENNIFN0ZXJlbyBvdXQgMCIsCi0JLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9XUklURSwKLQkucGVyX2FkZHJlc3MgPSBTU0kxX0JBU0VfQUREUiArIFNUWDAsCi0JLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kxX1RYMCwKLQkud2F0ZXJtYXJrX2xldmVsID0gVFhGSUZPX1dBVEVSTUFSSywKLQkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMV9wY21fc3RlcmVvX291dDEgPSB7Ci0JLm5hbWUJCQk9ICJTU0kxIFBDTSBTdGVyZW8gb3V0IDEiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfV1JJVEUsCi0JLnBlcl9hZGRyZXNzID0gU1NJMV9CQVNFX0FERFIgKyBTVFgxLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMV9UWDEsCi0JLndhdGVybWFya19sZXZlbCA9IFRYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTFfcGNtX3N0ZXJlb19pbjAgPSB7Ci0JLm5hbWUJCQk9ICJTU0kxIFBDTSBTdGVyZW8gaW4gMCIsCi0JLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9SRUFELAotCS5wZXJfYWRkcmVzcyA9IFNTSTFfQkFTRV9BRERSICsgU1JYMCwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTFfUlgwLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBSWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kxX3BjbV9zdGVyZW9faW4xID0gewotCS5uYW1lCQkJPSAiU1NJMSBQQ00gU3RlcmVvIGluIDEiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfUkVBRCwKLQkucGVyX2FkZHJlc3MgPSBTU0kxX0JBU0VfQUREUiArIFNSWDEsCi0JLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kxX1JYMSwKLQkud2F0ZXJtYXJrX2xldmVsID0gUlhGSUZPX1dBVEVSTUFSSywKLQkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMl9wY21fc3RlcmVvX291dDAgPSB7Ci0JLm5hbWUJCQk9ICJTU0kyIFBDTSBTdGVyZW8gb3V0IDAiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfV1JJVEUsCi0JLnBlcl9hZGRyZXNzID0gU1NJMl9CQVNFX0FERFIgKyBTVFgwLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMl9UWDAsCi0JLndhdGVybWFya19sZXZlbCA9IFRYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTJfcGNtX3N0ZXJlb19vdXQxID0gewotCS5uYW1lCQkJPSAiU1NJMiBQQ00gU3RlcmVvIG91dCAxIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1dSSVRFLAotCS5wZXJfYWRkcmVzcyA9IFNTSTJfQkFTRV9BRERSICsgU1RYMSwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTJfVFgxLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBUWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kyX3BjbV9zdGVyZW9faW4wID0gewotCS5uYW1lCQkJPSAiU1NJMiBQQ00gU3RlcmVvIGluIDAiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfUkVBRCwKLQkucGVyX2FkZHJlc3MgPSBTU0kyX0JBU0VfQUREUiArIFNSWDAsCi0JLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kyX1JYMCwKLQkud2F0ZXJtYXJrX2xldmVsID0gUlhGSUZPX1dBVEVSTUFSSywKLQkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMl9wY21fc3RlcmVvX2luMSA9IHsKLQkubmFtZQkJCT0gIlNTSTIgUENNIFN0ZXJlbyBpbiAxIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1JFQUQsCi0JLnBlcl9hZGRyZXNzID0gU1NJMl9CQVNFX0FERFIgKyBTUlgxLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMl9SWDEsCi0JLndhdGVybWFya19sZXZlbCA9IFJYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqc3NpX2NsazAsICpzc2lfY2xrMTsKLQotaW50IGdldF9zc2lfY2xrKGludCBzc2ksIHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzd2l0Y2ggKHNzaSkgewotCWNhc2UgMDoKLQkJc3NpX2NsazAgPSBjbGtfZ2V0KGRldiwgInNzaTEiKTsKLQkJaWYgKElTX0VSUihzc2lfY2xrMCkpCi0JCQlyZXR1cm4gUFRSX0VSUihzc2lfY2xrMCk7Ci0JCXJldHVybiAwOwotCWNhc2UgMToKLQkJc3NpX2NsazEgPSBjbGtfZ2V0KGRldiwgInNzaTIiKTsKLQkJaWYgKElTX0VSUihzc2lfY2xrMSkpCi0JCQlyZXR1cm4gUFRSX0VSUihzc2lfY2xrMSk7Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woZ2V0X3NzaV9jbGspOwotCi12b2lkIHB1dF9zc2lfY2xrKGludCBzc2kpCi17Ci0Jc3dpdGNoIChzc2kpIHsKLQljYXNlIDA6Ci0JCWNsa19wdXQoc3NpX2NsazApOwotCQlzc2lfY2xrMCA9IE5VTEw7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJY2xrX3B1dChzc2lfY2xrMSk7Ci0JCXNzaV9jbGsxID0gTlVMTDsKLQkJYnJlYWs7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChwdXRfc3NpX2Nsayk7Ci0KLS8qCi0gKiBTU0kgc3lzdGVtIGNsb2NrIGNvbmZpZ3VyYXRpb24uCi0gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCi0gKi8KLXN0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCi17Ci0JdTMyIHNjcjsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCXNjciA9IFNTSTFfU0NSOwotCQlwcl9kZWJ1ZygiJXM6IFNDUiBmb3IgU1NJMSBpcyAleFxuIiwgX19mdW5jX18sIHNjcik7Ci0JfSBlbHNlIHsKLQkJc2NyID0gU1NJMl9TQ1I7Ci0JCXByX2RlYnVnKCIlczogU0NSIGZvciBTU0kyIGlzICV4XG4iLCBfX2Z1bmNfXywgc2NyKTsKLQl9Ci0KLQlpZiAoc2NyICYgU1NJX1NDUl9TU0lFTikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzd2l0Y2ggKGNsa19pZCkgewotCWNhc2UgSU1YX1NTUF9TWVNfQ0xLOgotCQlpZiAoZGlyID09IFNORF9TT0NfQ0xPQ0tfT1VUKSB7Ci0JCQlzY3IgfD0gU1NJX1NDUl9TWVNfQ0xLX0VOOwotCQkJcHJfZGVidWcoIiVzOiBjbGsgb2YgaXMgb3V0cHV0XG4iLCBfX2Z1bmNfXyk7Ci0JCX0gZWxzZSB7Ci0JCQlzY3IgJj0gflNTSV9TQ1JfU1lTX0NMS19FTjsKLQkJCXByX2RlYnVnKCIlczogY2xrIG9mIGlzIGlucHV0XG4iLCBfX2Z1bmNfXyk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJcHJfZGVidWcoIiVzOiB3cml0ZWJhY2sgb2YgU1NJMV9TQ1JcbiIsIF9fZnVuY19fKTsKLQkJU1NJMV9TQ1IgPSBzY3I7Ci0JfSBlbHNlIHsKLQkJcHJfZGVidWcoIiVzOiB3cml0ZWJhY2sgb2YgU1NJMl9TQ1JcbiIsIF9fZnVuY19fKTsKLQkJU1NJMl9TQ1IgPSBzY3I7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTU0kgQ2xvY2sgZGl2aWRlcnMKLSAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKS4KLSAqLwotc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKLQlpbnQgZGl2X2lkLCBpbnQgZGl2KQotewotCXUzMiBzdGNjciwgc3JjY3I7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlpZiAoU1NJMV9TQ1IgJiBTU0lfU0NSX1NTSUVOKQotCQkJcmV0dXJuIDA7Ci0JCXNyY2NyID0gU1NJMV9TVENDUjsKLQkJc3RjY3IgPSBTU0kxX1NUQ0NSOwotCX0gZWxzZSB7Ci0JCWlmIChTU0kyX1NDUiAmIFNTSV9TQ1JfU1NJRU4pCi0JCQlyZXR1cm4gMDsKLQkJc3JjY3IgPSBTU0kyX1NUQ0NSOwotCQlzdGNjciA9IFNTSTJfU1RDQ1I7Ci0JfQotCi0Jc3dpdGNoIChkaXZfaWQpIHsKLQljYXNlIElNWF9TU0lfVFhfRElWXzI6Ci0JCXN0Y2NyICY9IH5TU0lfU1RDQ1JfRElWMjsKLQkJc3RjY3IgfD0gZGl2OwotCQlicmVhazsKLQljYXNlIElNWF9TU0lfVFhfRElWX1BTUjoKLQkJc3RjY3IgJj0gflNTSV9TVENDUl9QU1I7Ci0JCXN0Y2NyIHw9IGRpdjsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1RYX0RJVl9QTToKLQkJc3RjY3IgJj0gfjB4ZmY7Ci0JCXN0Y2NyIHw9IFNTSV9TVENDUl9QTShkaXYpOwotCQlicmVhazsKLQljYXNlIElNWF9TU0lfUlhfRElWXzI6Ci0JCXN0Y2NyICY9IH5TU0lfU1RDQ1JfRElWMjsKLQkJc3RjY3IgfD0gZGl2OwotCQlicmVhazsKLQljYXNlIElNWF9TU0lfUlhfRElWX1BTUjoKLQkJc3RjY3IgJj0gflNTSV9TVENDUl9QU1I7Ci0JCXN0Y2NyIHw9IGRpdjsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1JYX0RJVl9QTToKLQkJc3RjY3IgJj0gfjB4ZmY7Ci0JCXN0Y2NyIHw9IFNTSV9TVENDUl9QTShkaXYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlTU0kxX1NUQ0NSID0gc3RjY3I7Ci0JCVNTSTFfU1JDQ1IgPSBzcmNjcjsKLQl9IGVsc2UgewotCQlTU0kyX1NUQ0NSID0gc3RjY3I7Ci0JCVNTSTJfU1JDQ1IgPSBzcmNjcjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTU0kgTmV0d29yayBNb2RlIG9yIFRETSBzbG90cyBjb25maWd1cmF0aW9uLgotICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgotICovCi1zdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JdW5zaWduZWQgaW50IG1hc2ssIGludCBzbG90cykKLXsKLQl1MzIgc3Rtc2ssIHNybXNrLCBzdGNjcjsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCWlmIChTU0kxX1NDUiAmIFNTSV9TQ1JfU1NJRU4pIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlzdGNjciA9IFNTSTFfU1RDQ1I7Ci0JfSBlbHNlIHsKLQkJaWYgKFNTSTJfU0NSICYgU1NJX1NDUl9TU0lFTikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXN0Y2NyID0gU1NJMl9TVENDUjsKLQl9Ci0KLQlzdG1zayA9IHNybXNrID0gbWFzazsKLQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RDX01BU0s7Ci0Jc3RjY3IgfD0gU1NJX1NUQ0NSX0RDKHNsb3RzIC0gMSk7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlTU0kxX1NUTVNLID0gc3Rtc2s7Ci0JCVNTSTFfU1JNU0sgPSBzcm1zazsKLQkJU1NJMV9TUkNDUiA9IFNTSTFfU1RDQ1IgPSBzdGNjcjsKLQl9IGVsc2UgewotCQlTU0kyX1NUTVNLID0gc3Rtc2s7Ci0JCVNTSTJfU1JNU0sgPSBzcm1zazsKLQkJU1NJMl9TUkNDUiA9IFNTSTJfU1RDQ1IgPSBzdGNjcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNTSSBEQUkgZm9ybWF0IGNvbmZpZ3VyYXRpb24uCi0gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCi0gKiBOb3RlOiBXZSBkb24ndCB1c2UgdGhlIEkyUyBtb2RlcyBidXQgaW5zdGVhZCBtYW51YWxseSBjb25maWd1cmUgdGhlCi0gKiBTU0kgZm9yIEkyUy4KLSAqLwotc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKLQkJdW5zaWduZWQgaW50IGZtdCkKLXsKLQl1MzIgc3RjciA9IDAsIHNyY3IgPSAwLCBzY3I7Ci0KLQkvKgotCSAqIFRoaXMgaXMgZG9uZSB0byBhdm9pZCB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeQotCSAqIHByZXZpb3VzIHNldCB2YWx1ZXMgaW4gc3RjcgotCSAqLwotCXN0Y3IgPSBTU0kxX1NUQ1I7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKLQkJc2NyID0gU1NJMV9TQ1IgJiB+KFNTSV9TQ1JfU1lOIHwgU1NJX1NDUl9ORVQpOwotCWVsc2UKLQkJc2NyID0gU1NJMl9TQ1IgJiB+KFNTSV9TQ1JfU1lOIHwgU1NJX1NDUl9ORVQpOwotCi0JaWYgKHNjciAmIFNTSV9TQ1JfU1NJRU4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogREFJIG1vZGUgKi8KLQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgbG93IDFjbGsgYmVmb3JlIGRhdGEgKi8KLQkJc3RjciB8PSBTU0lfU1RDUl9URlNJIHwgU1NJX1NUQ1JfVEVGUyB8IFNTSV9TVENSX1RYQklUMDsKLQkJc3JjciB8PSBTU0lfU1JDUl9SRlNJIHwgU1NJX1NSQ1JfUkVGUyB8IFNTSV9TUkNSX1JYQklUMDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6Ci0JCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgaGlnaCB3aXRoIGRhdGEgKi8KLQkJc3RjciB8PSBTU0lfU1RDUl9UWEJJVDA7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUlhCSVQwOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgotCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggd2l0aCBkYXRhICovCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZTTDsKLQkJc3JjciB8PSBTU0lfU1JDUl9SRlNMOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgotCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggMWNsayBiZWZvcmUgZGF0YSAqLwotCQlzdGNyIHw9IFNTSV9TVENSX1RGU0wgfCBTU0lfU1RDUl9URUZTOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JGU0wgfCBTU0lfU1JDUl9SRUZTOwotCQlicmVhazsKLQl9Ci0KLQkvKiBEQUkgY2xvY2sgaW52ZXJzaW9uICovCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZTSTsKLQkJc3RjciAmPSB+U1NJX1NUQ1JfVFNDS1A7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZTSTsKLQkJc3JjciAmPSB+U1NJX1NSQ1JfUlNDS1A7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6Ci0JCXN0Y3IgJj0gfihTU0lfU1RDUl9UU0NLUCB8IFNTSV9TVENSX1RGU0kpOwotCQlzcmNyICY9IH4oU1NJX1NSQ1JfUlNDS1AgfCBTU0lfU1JDUl9SRlNJKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKLQkJc3RjciB8PSBTU0lfU1RDUl9URlNJIHwgU1NJX1NUQ1JfVFNDS1A7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZTSSB8IFNTSV9TUkNSX1JTQ0tQOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgotCQlzdGNyICY9IH5TU0lfU1RDUl9URlNJOwotCQlzdGNyIHw9IFNTSV9TVENSX1RTQ0tQOwotCQlzcmNyICY9IH5TU0lfU1JDUl9SRlNJOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JTQ0tQOwotCQlicmVhazsKLQl9Ci0KLQkvKiBEQUkgY2xvY2sgbWFzdGVyIG1hc2tzICovCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKLQkJc3RjciB8PSBTU0lfU1RDUl9URkRJUiB8IFNTSV9TVENSX1RYRElSOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JGRElSIHwgU1NJX1NSQ1JfUlhESVI7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKLQkJc3RjciB8PSBTU0lfU1RDUl9URkRJUjsKLQkJc3JjciB8PSBTU0lfU1JDUl9SRkRJUjsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNOgotCQlzdGNyIHw9IFNTSV9TVENSX1RYRElSOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JYRElSOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlTU0kxX1NUQ1IgPSBzdGNyOwotCQlTU0kxX1NSQ1IgPSBzcmNyOwotCQlTU0kxX1NDUiA9IHNjcjsKLQl9IGVsc2UgewotCQlTU0kyX1NUQ1IgPSBzdGNyOwotCQlTU0kyX1NSQ1IgPSBzcmNyOwotCQlTU0kyX1NDUiA9IHNjcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbXhfc3NpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0KLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkvKiBzZXQgdXAgVFggRE1BIHBhcmFtcyAqLwotCQlzd2l0Y2ggKGNwdV9kYWktPmlkKSB7Ci0JCWNhc2UgSU1YX0RBSV9TU0kwOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTFfcGNtX3N0ZXJlb19vdXQwOwotCQkJYnJlYWs7Ci0JCWNhc2UgSU1YX0RBSV9TU0kxOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTFfcGNtX3N0ZXJlb19vdXQxOwotCQkJYnJlYWs7Ci0JCWNhc2UgSU1YX0RBSV9TU0kyOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTJfcGNtX3N0ZXJlb19vdXQwOwotCQkJYnJlYWs7Ci0JCWNhc2UgSU1YX0RBSV9TU0kzOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTJfcGNtX3N0ZXJlb19vdXQxOwotCQl9Ci0JCXByX2RlYnVnKCIlczogKHBsYXliYWNrKVxuIiwgX19mdW5jX18pOwotCX0gZWxzZSB7Ci0JCS8qIHNldCB1cCBSWCBETUEgcGFyYW1zICovCi0JCXN3aXRjaCAoY3B1X2RhaS0+aWQpIHsKLQkJY2FzZSBJTVhfREFJX1NTSTA6Ci0JCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZpbXhfc3NpMV9wY21fc3RlcmVvX2luMDsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMToKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kxX3BjbV9zdGVyZW9faW4xOwotCQkJYnJlYWs7Ci0JCWNhc2UgSU1YX0RBSV9TU0kyOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTJfcGNtX3N0ZXJlb19pbjA7Ci0JCQlicmVhazsKLQkJY2FzZSBJTVhfREFJX1NTSTM6Ci0JCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZpbXhfc3NpMl9wY21fc3RlcmVvX2luMTsKLQkJfQotCQlwcl9kZWJ1ZygiJXM6IChjYXB0dXJlKVxuIiwgX19mdW5jX18pOwotCX0KLQotCS8qCi0JICogd2UgY2FudCByZWFsbHkgY2hhbmdlIGFueSBTU0kgdmFsdWVzIGFmdGVyIFNTSSBpcyBlbmFibGVkCi0JICogbmVlZCB0byBmaXggaW4gc29mdHdhcmUgZm9yIG1heCBmbGV4aWJpbGl0eSAtIGxyZwotCSAqLwotCWlmIChjcHVfZGFpLT5hY3RpdmUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogcmVzZXQgdGhlIFNTSSBwb3J0IC0gU2VjdCA0NS40LjQgKi8KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCi0JCWlmICghc3NpX2NsazApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoc3NpX2FjdGl2ZVtTU0kxX1BPUlRdKyspIHsKLQkJCXByX2RlYnVnKCIlczogZXhpdCBiZWZvcmUgcmVzZXRcbiIsIF9fZnVuY19fKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogU1NJMSBSZXNldCAqLwotCQlTU0kxX1NDUiA9IDA7Ci0KLQkJU1NJMV9TRkNTUiA9IFNTSV9TRkNTUl9SRldNMShSWEZJRk9fV0FURVJNQVJLKSB8Ci0JCQlTU0lfU0ZDU1JfUkZXTTAoUlhGSUZPX1dBVEVSTUFSSykgfAotCQkJU1NJX1NGQ1NSX1RGV00xKFRYRklGT19XQVRFUk1BUkspIHwKLQkJCVNTSV9TRkNTUl9URldNMChUWEZJRk9fV0FURVJNQVJLKTsKLQl9IGVsc2UgewotCi0JCWlmICghc3NpX2NsazEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoc3NpX2FjdGl2ZVtTU0kyX1BPUlRdKyspIHsKLQkJCXByX2RlYnVnKCIlczogZXhpdCBiZWZvcmUgcmVzZXRcbiIsIF9fZnVuY19fKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyogU1NJMiBSZXNldCAqLwotCQlTU0kyX1NDUiA9IDA7Ci0KLQkJU1NJMl9TRkNTUiA9IFNTSV9TRkNTUl9SRldNMShSWEZJRk9fV0FURVJNQVJLKSB8Ci0JCQlTU0lfU0ZDU1JfUkZXTTAoUlhGSUZPX1dBVEVSTUFSSykgfAotCQkJU1NJX1NGQ1NSX1RGV00xKFRYRklGT19XQVRFUk1BUkspIHwKLQkJCVNTSV9TRkNTUl9URldNMChUWEZJRk9fV0FURVJNQVJLKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGlteF9zc2lfaHdfdHhfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQl1MzIgc3RjY3IsIHN0Y3IsIHNpZXI7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCXN0Y2NyID0gU1NJMV9TVENDUiAmIH5TU0lfU1RDQ1JfV0xfTUFTSzsKLQkJc3RjciA9IFNTSTFfU1RDUjsKLQkJc2llciA9IFNTSTFfU0lFUjsKLQl9IGVsc2UgewotCQlzdGNjciA9IFNTSTJfU1RDQ1IgJiB+U1NJX1NUQ0NSX1dMX01BU0s7Ci0JCXN0Y3IgPSBTU0kyX1NUQ1I7Ci0JCXNpZXIgPSBTU0kyX1NJRVI7Ci0JfQotCi0JLyogREFJIGRhdGEgKHdvcmQpIHNpemUgKi8KLQlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6Ci0JCXN0Y2NyIHw9IFNTSV9TVENDUl9XTCgxNik7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgotCQlzdGNjciB8PSBTU0lfU1RDQ1JfV0woMjApOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgotCQlzdGNjciB8PSBTU0lfU1RDQ1JfV0woMjQpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKQotCQlzdGNyIHw9IFNTSV9TVENSX1RGRU4wOwotCWVsc2UKLQkJc3RjciB8PSBTU0lfU1RDUl9URkVOMTsKLQlzaWVyIHw9IFNTSV9TSUVSX1RETUFFOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVENSID0gc3RjcjsKLQkJU1NJMV9TVENDUiA9IHN0Y2NyOwotCQlTU0kxX1NJRVIgPSBzaWVyOwotCX0gZWxzZSB7Ci0JCVNTSTJfU1RDUiA9IHN0Y3I7Ci0JCVNTSTJfU1RDQ1IgPSBzdGNjcjsKLQkJU1NJMl9TSUVSID0gc2llcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGlteF9zc2lfaHdfcnhfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQl1MzIgc3JjY3IsIHNyY3IsIHNpZXI7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCXNyY2NyID0gU1NJMV9TUkNDUiAmIH5TU0lfU1JDQ1JfV0xfTUFTSzsKLQkJc3JjciA9IFNTSTFfU1JDUjsKLQkJc2llciA9IFNTSTFfU0lFUjsKLQl9IGVsc2UgewotCQlzcmNjciA9IFNTSTJfU1JDQ1IgJiB+U1NJX1NSQ0NSX1dMX01BU0s7Ci0JCXNyY3IgPSBTU0kyX1NSQ1I7Ci0JCXNpZXIgPSBTU0kyX1NJRVI7Ci0JfQotCi0JLyogREFJIGRhdGEgKHdvcmQpIHNpemUgKi8KLQlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6Ci0JCXNyY2NyIHw9IFNTSV9TUkNDUl9XTCgxNik7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgotCQlzcmNjciB8PSBTU0lfU1JDQ1JfV0woMjApOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgotCQlzcmNjciB8PSBTU0lfU1JDQ1JfV0woMjQpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKQotCQlzcmNyIHw9IFNTSV9TUkNSX1JGRU4wOwotCWVsc2UKLQkJc3JjciB8PSBTU0lfU1JDUl9SRkVOMTsKLQlzaWVyIHw9IFNTSV9TSUVSX1JETUFFOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TUkNSID0gc3JjcjsKLQkJU1NJMV9TUkNDUiA9IHNyY2NyOwotCQlTU0kxX1NJRVIgPSBzaWVyOwotCX0gZWxzZSB7Ci0JCVNTSTJfU1JDUiA9IHNyY3I7Ci0JCVNTSTJfU1JDQ1IgPSBzcmNjcjsKLQkJU1NJMl9TSUVSID0gc2llcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKSwKLSAqIGFsdGhvdWdoIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgYnkgdXBwZXIgbGF5ZXJzLgotICovCi1pbnQgaW14X3NzaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCi0JaW50IHJldDsKLQotCS8qIGNhbnQgY2hhbmdlIGFueSBwYXJhbWV0ZXJzIHdoZW4gU1NJIGlzIHJ1bm5pbmcgKi8KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlpZiAoU1NJMV9TQ1IgJiBTU0lfU0NSX1NTSUVOKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoU1NJMl9TQ1IgJiBTU0lfU0NSX1NTSUVOKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBib3RoIHR4IGFuZCByeCBwYXJhbXMgd2l0aCB0aGUgc2FtZSBzZXR0aW5ncy4gVGhpcyBpcwotCSAqIHJlYWxseSBhIGhhcndhcmUgcmVzdHJpY3Rpb24gYmVjYXVzZSBTU0kgbXVzdCBiZSBkaXNhYmxlZCB1bnRpbAotCSAqIHdlIGNhbiBjaGFuZ2UgdGhvc2UgdmFsdWVzLiBJZiB0aGVyZSBpcyBhbiBhY3RpdmUgYXVkaW8gc3RyZWFtIGluCi0JICogb25lIGRpcmVjdGlvbiwgZW5hYmxpbmcgdGhlIG90aGVyIGRpcmVjdGlvbiB3aXRoIGRpZmZlcmVudAotCSAqIHNldHRpbmdzIHdvdWxkIG1lYW4gZGlzdHVyYmluZyB0aGUgcnVubmluZyBvbmUuCi0JICovCi0JcmV0ID0gaW14X3NzaV9od190eF9wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldHVybiBpbXhfc3NpX2h3X3J4X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcyk7Ci19Ci0KLWludCBpbXhfc3NpX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JaW50IHJldDsKLQotCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwotCi0JLyogRW5hYmxlIGNsa3MgaGVyZSB0byBmb2xsb3cgU1NJIHJlY29tbWVuZGVkIGluaXQgc2VxdWVuY2UgKi8KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlyZXQgPSBjbGtfZW5hYmxlKHNzaV9jbGswKTsKLQkJaWYgKHJldCA8IDApCi0JCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBlbmFibGUgc3NpX2NsazBcbiIpOwotCX0gZWxzZSB7Ci0JCXJldCA9IGNsa19lbmFibGUoc3NpX2NsazEpOwotCQlpZiAocmV0IDwgMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGVuYWJsZSBzc2lfY2xrMVxuIik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW14X3NzaV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCXUzMiBzY3I7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKLQkJc2NyID0gU1NJMV9TQ1I7Ci0JZWxzZQotCQlzY3IgPSBTU0kyX1NDUjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQkJc2NyIHw9IFNTSV9TQ1JfVEUgfCBTU0lfU0NSX1NTSUVOOwotCQllbHNlCi0JCQlzY3IgfD0gU1NJX1NDUl9SRSB8IFNTSV9TQ1JfU1NJRU47Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJCXNjciAmPSB+U1NJX1NDUl9URTsKLQkJZWxzZQotCQkJc2NyICY9IH5TU0lfU0NSX1JFOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKLQkJU1NJMV9TQ1IgPSBzY3I7Ci0JZWxzZQotCQlTU0kyX1NDUiA9IHNjcjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpbXhfc3NpX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCi0JLyogc2h1dGRvd24gU1NJIGlmIG5laXRoZXIgVHggb3IgUnggaXMgYWN0aXZlICovCi0JaWYgKCFjcHVfZGFpLT5hY3RpdmUpIHsKLQotCQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8Ci0JCQljcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQotCQkJaWYgKC0tc3NpX2FjdGl2ZVtTU0kxX1BPUlRdID4gMSkKLQkJCQlyZXR1cm47Ci0KLQkJCVNTSTFfU0NSID0gMDsKLQkJCWNsa19kaXNhYmxlKHNzaV9jbGswKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgtLXNzaV9hY3RpdmVbU1NJMl9QT1JUXSkKLQkJCQlyZXR1cm47Ci0JCQlTU0kyX1NDUiA9IDA7Ci0JCQljbGtfZGlzYWJsZShzc2lfY2xrMSk7Ci0JCX0KLQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgaW14X3NzaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbXhfc3NpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSBpbXhfc3NpX3N1c3BlbmQJTlVMTAotI2RlZmluZSBpbXhfc3NpX3Jlc3VtZQlOVUxMCi0jZW5kaWYKLQotI2RlZmluZSBJTVhfU1NJX1JBVEVTIFwKLQkoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHwgXAotCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBcCi0JU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKLQlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgXAotCVNORFJWX1BDTV9SQVRFXzk2MDAwKQotCi0jZGVmaW5lIElNWF9TU0lfQklUUyBcCi0JKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAotCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBpbXhfc3NpX3BjbV9kYWlfb3BzID0gewotCS5zdGFydHVwID0gaW14X3NzaV9zdGFydHVwLAotCS5zaHV0ZG93biA9IGlteF9zc2lfc2h1dGRvd24sCi0JLnRyaWdnZXIgPSBpbXhfc3NpX3RyaWdnZXIsCi0JLnByZXBhcmUgPSBpbXhfc3NpX3ByZXBhcmUsCi0JLmh3X3BhcmFtcyA9IGlteF9zc2lfaHdfcGFyYW1zLAotCS5zZXRfc3lzY2xrID0gaW14X3NzaV9zZXRfZGFpX3N5c2NsaywKLQkuc2V0X2Nsa2RpdiA9IGlteF9zc2lfc2V0X2RhaV9jbGtkaXYsCi0JLnNldF9mbXQgPSBpbXhfc3NpX3NldF9kYWlfZm10LAotCS5zZXRfdGRtX3Nsb3QgPSBpbXhfc3NpX3NldF9kYWlfdGRtX3Nsb3QsCi19OwotCi1zdHJ1Y3Qgc25kX3NvY19kYWkgaW14X3NzaV9wY21fZGFpW10gPSB7Ci17Ci0JLm5hbWUgPSAiaW14LWkycy0xLTAiLAotCS5pZCA9IElNWF9EQUlfU1NJMCwKLQkuc3VzcGVuZCA9IGlteF9zc2lfc3VzcGVuZCwKLQkucmVzdW1lID0gaW14X3NzaV9yZXN1bWUsCi0JLnBsYXliYWNrID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCi0JCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKLQkub3BzID0gJmlteF9zc2lfcGNtX2RhaV9vcHMsCi19LAotewotCS5uYW1lID0gImlteC1pMnMtMi0wIiwKLQkuaWQgPSBJTVhfREFJX1NTSTEsCi0JLnBsYXliYWNrID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCi0JCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKLQkub3BzID0gJmlteF9zc2lfcGNtX2RhaV9vcHMsCi19LAotewotCS5uYW1lID0gImlteC1pMnMtMS0xIiwKLQkuaWQgPSBJTVhfREFJX1NTSTIsCi0JLnN1c3BlbmQgPSBpbXhfc3NpX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGlteF9zc2lfcmVzdW1lLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAotfSwKLXsKLQkubmFtZSA9ICJpbXgtaTJzLTItMSIsCi0JLmlkID0gSU1YX0RBSV9TU0kzLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAotfSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpbXhfc3NpX3BjbV9kYWkpOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbXhfc3NpX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKGlteF9zc2lfcGNtX2RhaSwKLQkJCQlBUlJBWV9TSVpFKGlteF9zc2lfcGNtX2RhaSkpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaW14X3NzaV9leGl0KHZvaWQpCi17Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoaW14X3NzaV9wY21fZGFpLAotCQkJCUFSUkFZX1NJWkUoaW14X3NzaV9wY21fZGFpKSk7Ci19Ci0KLW1vZHVsZV9pbml0KGlteF9zc2lfaW5pdCk7Ci1tb2R1bGVfZXhpdChpbXhfc3NpX2V4aXQpOwotTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCwgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oImkuTVggQVNvQyBJMlMgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuaCBiL3NvdW5kL3NvYy9pbXgvbXhjLXNzaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmJiZGM5Li4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9pbXgvbXhjLXNzaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX0lNWF9TU0lfSAotI2RlZmluZSBfSU1YX1NTSV9ICi0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLS8qIFNTSSByZWdzIGRlZmluaXRpb24gLSBNT1ZFIHRvIC9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvIHdoZW4gc3RhYmxlICovCi0jZGVmaW5lIFNTSTFfSU9fQkFTRV9BRERSCUlPX0FERFJFU1MoU1NJMV9CQVNFX0FERFIpCi0jZGVmaW5lIFNTSTJfSU9fQkFTRV9BRERSCUlPX0FERFJFU1MoU1NJMl9CQVNFX0FERFIpCi0KLSNkZWZpbmUgU1RYMCAgIDB4MDAKLSNkZWZpbmUgU1RYMSAgIDB4MDQKLSNkZWZpbmUgU1JYMCAgIDB4MDgKLSNkZWZpbmUgU1JYMSAgIDB4MGMKLSNkZWZpbmUgU0NSICAgIDB4MTAKLSNkZWZpbmUgU0lTUiAgIDB4MTQKLSNkZWZpbmUgU0lFUiAgIDB4MTgKLSNkZWZpbmUgU1RDUiAgIDB4MWMKLSNkZWZpbmUgU1JDUiAgIDB4MjAKLSNkZWZpbmUgU1RDQ1IgIDB4MjQKLSNkZWZpbmUgU1JDQ1IgIDB4MjgKLSNkZWZpbmUgU0ZDU1IgIDB4MmMKLSNkZWZpbmUgU1RSICAgIDB4MzAKLSNkZWZpbmUgU09SICAgIDB4MzQKLSNkZWZpbmUgU0FDTlQgIDB4MzgKLSNkZWZpbmUgU0FDQUREIDB4M2MKLSNkZWZpbmUgU0FDREFUIDB4NDAKLSNkZWZpbmUgU0FUQUcgIDB4NDQKLSNkZWZpbmUgU1RNU0sgIDB4NDgKLSNkZWZpbmUgU1JNU0sgIDB4NGMKLQotI2RlZmluZSBTU0kxX1NUWDAJKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUWDApKSkKLSNkZWZpbmUgU1NJMV9TVFgxICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUWDEpKSkKLSNkZWZpbmUgU1NJMV9TUlgwICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNSWDApKSkKLSNkZWZpbmUgU1NJMV9TUlgxICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNSWDEpKSkKLSNkZWZpbmUgU1NJMV9TQ1IgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNDUikpKQotI2RlZmluZSBTU0kxX1NJU1IgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0lTUikpKQotI2RlZmluZSBTU0kxX1NJRVIgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0lFUikpKQotI2RlZmluZSBTU0kxX1NUQ1IgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1RDUikpKQotI2RlZmluZSBTU0kxX1NSQ1IgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1JDUikpKQotI2RlZmluZSBTU0kxX1NUQ0NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1RDQ1IpKSkKLSNkZWZpbmUgU1NJMV9TUkNDUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNSQ0NSKSkpCi0jZGVmaW5lIFNTSTFfU0ZDU1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTRkNTUikpKQotI2RlZmluZSBTU0kxX1NUUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1RSKSkpCi0jZGVmaW5lIFNTSTFfU09SICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTT1IpKSkKLSNkZWZpbmUgU1NJMV9TQUNOVCAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNBQ05UKSkpCi0jZGVmaW5lIFNTSTFfU0FDQUREICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQUNBREQpKSkKLSNkZWZpbmUgU1NJMV9TQUNEQVQgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNBQ0RBVCkpKQotI2RlZmluZSBTU0kxX1NBVEFHICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0FUQUcpKSkKLSNkZWZpbmUgU1NJMV9TVE1TSyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUTVNLKSkpCi0jZGVmaW5lIFNTSTFfU1JNU0sgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUk1TSykpKQotCi0KLSNkZWZpbmUgU1NJMl9TVFgwCSgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVFgwKSkpCi0jZGVmaW5lIFNTSTJfU1RYMSAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVFgxKSkpCi0jZGVmaW5lIFNTSTJfU1JYMCAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTUlgwKSkpCi0jZGVmaW5lIFNTSTJfU1JYMSAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTUlgxKSkpCi0jZGVmaW5lIFNTSTJfU0NSICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTQ1IpKSkKLSNkZWZpbmUgU1NJMl9TSVNSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNJU1IpKSkKLSNkZWZpbmUgU1NJMl9TSUVSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNJRVIpKSkKLSNkZWZpbmUgU1NJMl9TVENSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNUQ1IpKSkKLSNkZWZpbmUgU1NJMl9TUkNSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNSQ1IpKSkKLSNkZWZpbmUgU1NJMl9TVENDUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNUQ0NSKSkpCi0jZGVmaW5lIFNTSTJfU1JDQ1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTUkNDUikpKQotI2RlZmluZSBTU0kyX1NGQ1NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0ZDU1IpKSkKLSNkZWZpbmUgU1NJMl9TVFIgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNUUikpKQotI2RlZmluZSBTU0kyX1NPUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU09SKSkpCi0jZGVmaW5lIFNTSTJfU0FDTlQgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTQUNOVCkpKQotI2RlZmluZSBTU0kyX1NBQ0FERCAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0FDQUREKSkpCi0jZGVmaW5lIFNTSTJfU0FDREFUICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTQUNEQVQpKSkKLSNkZWZpbmUgU1NJMl9TQVRBRyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNBVEFHKSkpCi0jZGVmaW5lIFNTSTJfU1RNU0sgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVE1TSykpKQotI2RlZmluZSBTU0kyX1NSTVNLICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JNU0spKSkKLQotI2RlZmluZSBTU0lfU0NSX0NMS19JU1QgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIFNTSV9TQ1JfVENIX0VOICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgU1NJX1NDUl9TWVNfQ0xLX0VOICAgICAoMSA8PCA3KQotI2RlZmluZSBTU0lfU0NSX0kyU19NT0RFX05PUk0gICgwIDw8IDUpCi0jZGVmaW5lIFNTSV9TQ1JfSTJTX01PREVfTVNUUiAgKDEgPDwgNSkKLSNkZWZpbmUgU1NJX1NDUl9JMlNfTU9ERV9TTEFWRSAoMiA8PCA1KQotI2RlZmluZSBTU0lfU0NSX1NZTiAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFNTSV9TQ1JfTkVUICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgU1NJX1NDUl9SRSAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBTU0lfU0NSX1RFICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIFNTSV9TQ1JfU1NJRU4gICAgICAgICAgKDEgPDwgMCkKLQotI2RlZmluZSBTU0lfU0lTUl9DTURBVSAgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBTU0lfU0lTUl9DTUREVSAgICAgICAgICgxIDw8IDE3KQotI2RlZmluZSBTU0lfU0lTUl9SWFQgICAgICAgICAgICgxIDw8IDE2KQotI2RlZmluZSBTU0lfU0lTUl9SRFIxICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBTU0lfU0lTUl9SRFIwICAgICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBTU0lfU0lTUl9UREUxICAgICAgICAgICgxIDw8IDEzKQotI2RlZmluZSBTU0lfU0lTUl9UREUwICAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBTU0lfU0lTUl9ST0UxICAgICAgICAgICgxIDw8IDExKQotI2RlZmluZSBTU0lfU0lTUl9ST0UwICAgICAgICAgICgxIDw8IDEwKQotI2RlZmluZSBTU0lfU0lTUl9UVUUxICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIFNTSV9TSVNSX1RVRTAgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgU1NJX1NJU1JfVEZTICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBTU0lfU0lTUl9SRlMgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIFNTSV9TSVNSX1RMUyAgICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgU1NJX1NJU1JfUkxTICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBTU0lfU0lTUl9SRkYxICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIFNTSV9TSVNSX1JGRjAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgU1NJX1NJU1JfVEZFMSAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBTU0lfU0lTUl9URkUwICAgICAgICAgICgxIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NJRVJfUkRNQUUgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgU1NJX1NJRVJfUklFICAgICAgICAgICAoMSA8PCAyMSkKLSNkZWZpbmUgU1NJX1NJRVJfVERNQUUgICAgICAgICAoMSA8PCAyMCkKLSNkZWZpbmUgU1NJX1NJRVJfVElFICAgICAgICAgICAoMSA8PCAxOSkKLSNkZWZpbmUgU1NJX1NJRVJfQ01EQVVfRU4gICAgICAoMSA8PCAxOCkKLSNkZWZpbmUgU1NJX1NJRVJfQ01ERFVfRU4gICAgICAoMSA8PCAxNykKLSNkZWZpbmUgU1NJX1NJRVJfUlhUX0VOICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgU1NJX1NJRVJfUkRSMV9FTiAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgU1NJX1NJRVJfUkRSMF9FTiAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgU1NJX1NJRVJfVERFMV9FTiAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgU1NJX1NJRVJfVERFMF9FTiAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgU1NJX1NJRVJfUk9FMV9FTiAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgU1NJX1NJRVJfUk9FMF9FTiAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgU1NJX1NJRVJfVFVFMV9FTiAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU0lFUl9UVUUwX0VOICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TSUVSX1RGU19FTiAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NJRVJfUkZTX0VOICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU0lFUl9UTFNfRU4gICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TSUVSX1JMU19FTiAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgU1NJX1NJRVJfUkZGMV9FTiAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU0lFUl9SRkYwX0VOICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIFNTSV9TSUVSX1RGRTFfRU4gICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgU1NJX1NJRVJfVEZFMF9FTiAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TVENSX1RYQklUMCAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgU1NJX1NUQ1JfVEZFTjEgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBTU0lfU1RDUl9URkVOMCAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIFNTSV9TVENSX1RGRElSICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgU1NJX1NUQ1JfVFhESVIgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBTU0lfU1RDUl9UU0hGRCAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFNTSV9TVENSX1RTQ0tQICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgU1NJX1NUQ1JfVEZTSSAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBTU0lfU1RDUl9URlNMICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIFNTSV9TVENSX1RFRlMgICAgICAgICAgKDEgPDwgMCkKLQotI2RlZmluZSBTU0lfU1JDUl9SWEJJVDAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIFNTSV9TUkNSX1JGRU4xICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgU1NJX1NSQ1JfUkZFTjAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBTU0lfU1JDUl9SRkRJUiAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIFNTSV9TUkNSX1JYRElSICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgU1NJX1NSQ1JfUlNIRkQgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBTU0lfU1JDUl9SU0NLUCAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIFNTSV9TUkNSX1JGU0kgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgU1NJX1NSQ1JfUkZTTCAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBTU0lfU1JDUl9SRUZTICAgICAgICAgICgxIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NUQ0NSX0RJVjIgICAgICAgICAoMSA8PCAxOCkKLSNkZWZpbmUgU1NJX1NUQ0NSX1BTUiAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgU1NJX1NUQ0NSX1dMKHgpICAgICAgICAoKCgoeCkgLSAyKSA+PiAxKSA8PCAxMykKLSNkZWZpbmUgU1NJX1NUQ0NSX0RDKHgpICAgICAgICAoKCh4KSAmIDB4MWYpIDw8IDgpCi0jZGVmaW5lIFNTSV9TVENDUl9QTSh4KSAgICAgICAgKCgoeCkgJiAweGZmKSA8PCAwKQotI2RlZmluZSBTU0lfU1RDQ1JfV0xfTUFTSyAgICAgICAgKDB4ZiA8PCAxMykKLSNkZWZpbmUgU1NJX1NUQ0NSX0RDX01BU0sgICAgICAgICgweDFmIDw8IDgpCi0jZGVmaW5lIFNTSV9TVENDUl9QTV9NQVNLICAgICAgICAoMHhmZiA8PCAwKQotCi0jZGVmaW5lIFNTSV9TUkNDUl9ESVYyICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIFNTSV9TUkNDUl9QU1IgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIFNTSV9TUkNDUl9XTCh4KSAgICAgICAgKCgoKHgpIC0gMikgPj4gMSkgPDwgMTMpCi0jZGVmaW5lIFNTSV9TUkNDUl9EQyh4KSAgICAgICAgKCgoeCkgJiAweDFmKSA8PCA4KQotI2RlZmluZSBTU0lfU1JDQ1JfUE0oeCkgICAgICAgICgoKHgpICYgMHhmZikgPDwgMCkKLSNkZWZpbmUgU1NJX1NSQ0NSX1dMX01BU0sgICAgICAgICgweGYgPDwgMTMpCi0jZGVmaW5lIFNTSV9TUkNDUl9EQ19NQVNLICAgICAgICAoMHgxZiA8PCA4KQotI2RlZmluZSBTU0lfU1JDQ1JfUE1fTUFTSyAgICAgICAgKDB4ZmYgPDwgMCkKLQotCi0jZGVmaW5lIFNTSV9TRkNTUl9SRkNOVDEoeCkgICAoKCh4KSAmIDB4ZikgPDwgMjgpCi0jZGVmaW5lIFNTSV9TRkNTUl9URkNOVDEoeCkgICAoKCh4KSAmIDB4ZikgPDwgMjQpCi0jZGVmaW5lIFNTSV9TRkNTUl9SRldNMSh4KSAgICAoKCh4KSAmIDB4ZikgPDwgMjApCi0jZGVmaW5lIFNTSV9TRkNTUl9URldNMSh4KSAgICAoKCh4KSAmIDB4ZikgPDwgMTYpCi0jZGVmaW5lIFNTSV9TRkNTUl9SRkNOVDAoeCkgICAoKCh4KSAmIDB4ZikgPDwgMTIpCi0jZGVmaW5lIFNTSV9TRkNTUl9URkNOVDAoeCkgICAoKCh4KSAmIDB4ZikgPDwgIDgpCi0jZGVmaW5lIFNTSV9TRkNTUl9SRldNMCh4KSAgICAoKCh4KSAmIDB4ZikgPDwgIDQpCi0jZGVmaW5lIFNTSV9TRkNTUl9URldNMCh4KSAgICAoKCh4KSAmIDB4ZikgPDwgIDApCi0KLSNkZWZpbmUgU1NJX1NUUl9URVNUICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBTU0lfU1RSX1JDSzJUQ0sgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIFNTSV9TVFJfUkZTMlRGUyAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgU1NJX1NUUl9SWFNUQVRFKHgpICAgICgoKHgpICYgMHhmKSA8PCA4KQotI2RlZmluZSBTU0lfU1RSX1RYRDJSWEQgICAgICAgKDEgPDwgIDcpCi0jZGVmaW5lIFNTSV9TVFJfVENLMlJDSyAgICAgICAoMSA8PCAgNikKLSNkZWZpbmUgU1NJX1NUUl9URlMyUkZTICAgICAgICgxIDw8ICA1KQotI2RlZmluZSBTU0lfU1RSX1RYU1RBVEUoeCkgICAgKCgoeCkgJiAweGYpIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NPUl9DTEtPRkYgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIFNTSV9TT1JfUlhfQ0xSICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBTU0lfU09SX1RYX0NMUiAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgU1NJX1NPUl9JTklUICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIFNTSV9TT1JfV0FJVCh4KSAgICAgICAoKCh4KSAmIDB4MykgPDwgMSkKLSNkZWZpbmUgU1NJX1NPUl9TWU5SU1QgICAgICAgICgxIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NBQ05UX0ZSRElWKHgpICAgICgoKHgpICYgMHgzZikgPDwgNSkKLSNkZWZpbmUgU1NJX1NBQ05UX1dSICAgICAgICAgICh4IDw8IDQpCi0jZGVmaW5lIFNTSV9TQUNOVF9SRCAgICAgICAgICAoeCA8PCAzKQotI2RlZmluZSBTU0lfU0FDTlRfVElGICAgICAgICAgKHggPDwgMikKLSNkZWZpbmUgU1NJX1NBQ05UX0ZWICAgICAgICAgICh4IDw8IDEpCi0jZGVmaW5lIFNTSV9TQUNOVF9BQzk3RU4gICAgICAoeCA8PCAwKQotCi0vKiBXYXRlcm1hcmtzIGZvciBGSUZPJ3MgKi8KLSNkZWZpbmUgVFhGSUZPX1dBVEVSTUFSSwkJCQkweDQKLSNkZWZpbmUgUlhGSUZPX1dBVEVSTUFSSwkJCQkweDQKLQotLyogaS5NWCBEQUkgU1NQIElEJ3MgKi8KLSNkZWZpbmUgSU1YX0RBSV9TU0kwCQkJMCAvKiBTU0kxIEZJRk8gMCAqLwotI2RlZmluZSBJTVhfREFJX1NTSTEJCQkxIC8qIFNTSTEgRklGTyAxICovCi0jZGVmaW5lIElNWF9EQUlfU1NJMgkJCTIgLyogU1NJMiBGSUZPIDAgKi8KLSNkZWZpbmUgSU1YX0RBSV9TU0kzCQkJMyAvKiBTU0kyIEZJRk8gMSAqLwotCi0vKiBTU0kgY2xvY2sgc291cmNlcyAqLwotI2RlZmluZSBJTVhfU1NQX1NZU19DTEsJCTAKLQotLyogU1NJIGF1ZGlvIGRpdmlkZXJzICovCi0jZGVmaW5lIElNWF9TU0lfVFhfRElWXzIJCQkwCi0jZGVmaW5lIElNWF9TU0lfVFhfRElWX1BTUgkJCTEKLSNkZWZpbmUgSU1YX1NTSV9UWF9ESVZfUE0JCQkyCi0jZGVmaW5lIElNWF9TU0lfUlhfRElWXzIJCQkzCi0jZGVmaW5lIElNWF9TU0lfUlhfRElWX1BTUgkJCTQKLSNkZWZpbmUgSU1YX1NTSV9SWF9ESVZfUE0JCQk1Ci0KLQotLyogU1NJIERpdiAyICovCi0jZGVmaW5lIElNWF9TU0lfRElWXzJfT0ZGCQkoflNTSV9TVENDUl9ESVYyKQotI2RlZmluZSBJTVhfU1NJX0RJVl8yX09OCQlTU0lfU1RDQ1JfRElWMgotCi1leHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfcGNtX2RhaVs0XTsKLWV4dGVybiBpbnQgZ2V0X3NzaV9jbGsoaW50IHNzaSwgc3RydWN0IGRldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIHB1dF9zc2lfY2xrKGludCBzc2kpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L3BoeWNvcmUtYWM5Ny5jIGIvc291bmQvc29jL2lteC9waHljb3JlLWFjOTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODMwN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2lteC9waHljb3JlLWFjOTcuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogcGh5Y29yZS1hYzk3LmMgIC0tICBTb0MgYXVkaW8gZm9yIGlteF9waHljb3JlIGluIEFDOTcgbW9kZQorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXggPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEyLmgiCisjaW5jbHVkZSAiaW14LXNzaS5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBpbXhfcGh5Y29yZTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBpbXhfcGh5Y29yZV9oaWZpX29wcyA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBpbXhfcGh5Y29yZV9kYWlfYWM5N1tdID0geworCXsKKwkJLm5hbWUJCT0gIkhpRmkiLAorCQkuc3RyZWFtX25hbWUJPSAiSGlGaSIsCisJCS5jb2RlY19kYWkJPSAmd205NzEyX2RhaVtXTTk3MTJfREFJX0FDOTdfSElGSV0sCisJCS5vcHMJCT0gJmlteF9waHljb3JlX2hpZmlfb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBpbXhfcGh5Y29yZSA9IHsKKwkubmFtZQkJPSAiUGh5Q09SRS1hdWRpbyIsCisJLnBsYXRmb3JtCT0gJmlteF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rCT0gaW14X3BoeWNvcmVfZGFpX2FjOTcsCisJLm51bV9saW5rcwk9IEFSUkFZX1NJWkUoaW14X3BoeWNvcmVfZGFpX2FjOTcpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBpbXhfcGh5Y29yZV9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZAkJPSAmaW14X3BoeWNvcmUsCisJLmNvZGVjX2Rldgk9ICZzb2NfY29kZWNfZGV2X3dtOTcxMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbXhfcGh5Y29yZV9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBpbXhfcGh5Y29yZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19wY20wNDMoKSAmJiAhbWFjaGluZV9pc19wY2ExMDAoKSkKKwkJLyogcmV0dXJuIGhhcHB5LiBXZSBtaWdodCBydW4gb24gYSB0b3RhbGx5IGRpZmZlcmVudCBtYWNoaW5lICovCisJCXJldHVybiAwOworCisJaW14X3BoeWNvcmVfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghaW14X3BoeWNvcmVfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbXhfcGh5Y29yZV9kYWlfYWM5N1swXS5jcHVfZGFpID0gJmlteF9zc2lfcGNtX2RhaVswXTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGlteF9waHljb3JlX3NuZF9kZXZpY2UsICZpbXhfcGh5Y29yZV9zbmRfZGV2ZGF0YSk7CisJaW14X3BoeWNvcmVfc25kX2RldmRhdGEuZGV2ID0gJmlteF9waHljb3JlX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGlteF9waHljb3JlX3NuZF9kZXZpY2UpOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IFBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoaW14X3BoeWNvcmVfc25kX2RldmljZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlteF9waHljb3JlX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihpbXhfcGh5Y29yZV9zbmRfZGV2aWNlKTsKK30KKworbGF0ZV9pbml0Y2FsbChpbXhfcGh5Y29yZV9pbml0KTsKK21vZHVsZV9leGl0KGlteF9waHljb3JlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBoeUNPUkUgQUxTQSBTb0MgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwppbmRleCA2MTk1MmFhLi5mMTE5NjNjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKQEAgLTYsNiArNiw5IEBACiAJdHJpc3RhdGUKIAlzZWxlY3QgT01BUF9NQ0JTUAogCitjb25maWcgU05EX09NQVBfU09DX01DUERNCisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9PTUFQX1NPQ19OODEwCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBOb2tpYSBOODEwIgogCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfTk9LSUFfTjgxMCAmJiBJMkMKQEAgLTk0LDEyICs5NywxNCBAQAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgT01BUDMgUGFuZG9yYS4KIAogY29uZmlnIFNORF9PTUFQX1NPQ19PTUFQM19CRUFHTEUKLQl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIE9NQVAzIEJlYWdsZSIKLQlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRSAmJiBTTkRfT01BUF9TT0MgJiYgTUFDSF9PTUFQM19CRUFHTEUKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIE9NQVAzIEJlYWdsZSBhbmQgRGV2a2l0ODAwMCIKKwlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRSAmJiBTTkRfT01BUF9TT0MKKwlkZXBlbmRzIG9uIChNQUNIX09NQVAzX0JFQUdMRSB8fCBNQUNIX0RFVktJVDgwMDApCiAJc2VsZWN0IFNORF9PTUFQX1NPQ19NQ0JTUAogCXNlbGVjdCBTTkRfU09DX1RXTDQwMzAKIAloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBCZWFnbGVib2FyZC4KKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIEJlYWdsZWJvYXJkIG9yCisJICB0aGUgY2xvbmUgRGV2a2l0ODAwMC4KIAogY29uZmlnIFNORF9PTUFQX1NPQ19aT09NMgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgWm9vbTIiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCmluZGV4IDE5MjgzZTUuLjBiYzAwY2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCkBAIC0xLDkgKzEsMTEgQEAKICMgT01BUCBQbGF0Zm9ybSBTdXBwb3J0CiBzbmQtc29jLW9tYXAtb2JqcyA6PSBvbWFwLXBjbS5vCiBzbmQtc29jLW9tYXAtbWNic3Atb2JqcyA6PSBvbWFwLW1jYnNwLm8KK3NuZC1zb2Mtb21hcC1tY3BkbS1vYmpzIDo9IG9tYXAtbWNwZG0ubyBtY3BkbS5vCiAKIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0MpICs9IHNuZC1zb2Mtb21hcC5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX01DQlNQKSArPSBzbmQtc29jLW9tYXAtbWNic3Aubworb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19NQ1BETSkgKz0gc25kLXNvYy1vbWFwLW1jcGRtLm8KIAogIyBPTUFQIE1hY2hpbmUgU3VwcG9ydAogc25kLXNvYy1uODEwLW9ianMgOj0gbjgxMC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9tY3BkbS5jIGIvc291bmQvc29jL29tYXAvbWNwZG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDhkZjZjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL29tYXAvbWNwZG0uYwpAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAqIG1jcGRtLmMgIC0tICBNY1BETSBpbnRlcmZhY2UgZHJpdmVyCisgKgorICogQXV0aG9yOiBKb3JnZSBFZHVhcmRvIENhbmRlbGFyaWEgPHgwMTA3MjA5QHRpLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpbmNsdWRlICJtY3BkbS5oIgorCitzdGF0aWMgc3RydWN0IG9tYXBfbWNwZG0gKm1jcGRtOworCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9tY3BkbV93cml0ZSh1MTYgcmVnLCB1MzIgdmFsKQoreworICAgICAgIF9fcmF3X3dyaXRlbCh2YWwsIG1jcGRtLT5pb19iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb21hcF9tY3BkbV9yZWFkKHUxNiByZWcpCit7CisgICAgICAgcmV0dXJuIF9fcmF3X3JlYWRsKG1jcGRtLT5pb19iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgb21hcF9tY3BkbV9yZWdfZHVtcCh2b2lkKQoreworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJJUlFTVEFUVVNfUkFXOiAgMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fSVJRU1RBVFVTX1JBVykpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIklSUVNUQVRVUzogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0lSUVNUQVRVUykpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIklSUUVOQUJMRV9TRVQ6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFFTkFCTEVfU0VUKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiSVJRRU5BQkxFX0NMUjogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0lSUUVOQUJMRV9DTFIpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJJUlFXQUtFX0VOOiAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFXQUtFX0VOKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiRE1BRU5BQkxFX1NFVDogMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fRE1BRU5BQkxFX1NFVCkpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkRNQUVOQUJMRV9DTFI6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9ETUFFTkFCTEVfQ0xSKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiRE1BV0FLRUVOOiAgMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fRE1BV0FLRUVOKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiQ1RSTDogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0NUUkwpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJETl9EQVRBOiAgMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fRE5fREFUQSkpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIlVQX0RBVEE6IDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX1VQX0RBVEEpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJGSUZPX0NUUkxfRE46IDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0ZJRk9fQ1RSTF9ETikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkZJRk9fQ1RSTF9VUDogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0ZJRk9fQ1RSTF9VUCkpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkROX09GRlNFVDogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0ROX09GRlNFVCkpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKK30KKworLyoKKyAqIFRha2VzIHRoZSBNY1BETSBtb2R1bGUgaW4gYW5kIG91dCBvZiByZXNldCBzdGF0ZS4KKyAqIFVwbGluayBhbmQgZG93bmxpbmsgY2FuIGJlIHJlc2V0IGluZGl2aWR1YWxseS4KKyAqLworc3RhdGljIHZvaWQgb21hcF9tY3BkbV9yZXNldF9jYXB0dXJlKGludCByZXNldCkKK3sKKyAgICAgICBpbnQgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKworICAgICAgIGlmIChyZXNldCkKKyAgICAgICAgICAgICAgIGN0cmwgfD0gU1dfVVBfUlNUOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGN0cmwgJj0gflNXX1VQX1JTVDsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWNwZG1fcmVzZXRfcGxheWJhY2soaW50IHJlc2V0KQoreworICAgICAgIGludCBjdHJsID0gb21hcF9tY3BkbV9yZWFkKE1DUERNX0NUUkwpOworCisgICAgICAgaWYgKHJlc2V0KQorICAgICAgICAgICAgICAgY3RybCB8PSBTV19ETl9SU1Q7CisgICAgICAgZWxzZQorICAgICAgICAgICAgICAgY3RybCAmPSB+U1dfRE5fUlNUOworCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9DVFJMLCBjdHJsKTsKK30KKworLyoKKyAqIEVuYWJsZXMgdGhlIHRyYW5zZmVyIHRocm91Z2ggdGhlIFBETSBpbnRlcmZhY2UgdG8vZnJvbSB0aGUgUGhvZW5peAorICogY29kZWMgYnkgZW5hYmxpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVVAgb3IgRE4gY2hhbm5lbHMuCisgKi8KK3ZvaWQgb21hcF9tY3BkbV9zdGFydChpbnQgc3RyZWFtKQoreworICAgICAgIGludCBjdHJsID0gb21hcF9tY3BkbV9yZWFkKE1DUERNX0NUUkwpOworCisgICAgICAgaWYgKHN0cmVhbSkKKyAgICAgICAgICAgICAgIGN0cmwgfD0gbWNwZG0tPnVwX2NoYW5uZWxzOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGN0cmwgfD0gbWNwZG0tPmRuX2NoYW5uZWxzOworCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9DVFJMLCBjdHJsKTsKK30KKworLyoKKyAqIERpc2FibGVzIHRoZSB0cmFuc2ZlciB0aHJvdWdoIHRoZSBQRE0gaW50ZXJmYWNlIHRvL2Zyb20gdGhlIFBob2VuaXgKKyAqIGNvZGVjIGJ5IGRpc2FibGluZyB0aGUgY29ycmVzcG9uZGluZyBVUCBvciBETiBjaGFubmVscy4KKyAqLwordm9pZCBvbWFwX21jcGRtX3N0b3AoaW50IHN0cmVhbSkKK3sKKyAgICAgICBpbnQgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKworICAgICAgIGlmIChzdHJlYW0pCisgICAgICAgICAgICAgICBjdHJsICY9IH5tY3BkbS0+dXBfY2hhbm5lbHM7CisgICAgICAgZWxzZQorICAgICAgICAgICAgICAgY3RybCAmPSB+bWNwZG0tPmRuX2NoYW5uZWxzOworCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9DVFJMLCBjdHJsKTsKK30KKworLyoKKyAqIENvbmZpZ3VyZXMgTWNQRE0gdXBsaW5rIGZvciBhdWRpbyByZWNvcmRpbmcuCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9tYXBfbWNwZG1fc3RhcnQuCisgKi8KK2ludCBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICp1cGxpbmspCit7CisgICAgICAgaW50IGlycV9tYXNrID0gMDsKKyAgICAgICBpbnQgY3RybDsKKworICAgICAgIGlmICghdXBsaW5rKQorICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICBtY3BkbS0+dXBsaW5rID0gdXBsaW5rOworCisgICAgICAgLyogRW5hYmxlIGlycSByZXF1ZXN0IGdlbmVyYXRpb24gKi8KKyAgICAgICBpcnFfbWFzayB8PSB1cGxpbmstPmlycV9tYXNrICYgTUNQRE1fVVBMSU5LX0lSUV9NQVNLOworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fSVJRRU5BQkxFX1NFVCwgaXJxX21hc2spOworCisgICAgICAgLyogQ29uZmlndXJlIHVwbGluayB0aHJlc2hvbGQgKi8KKyAgICAgICBpZiAodXBsaW5rLT50aHJlc2hvbGQgPiBVUF9USFJFU19NQVgpCisgICAgICAgICAgICAgICB1cGxpbmstPnRocmVzaG9sZCA9IFVQX1RIUkVTX01BWDsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fRklGT19DVFJMX1VQLCB1cGxpbmstPnRocmVzaG9sZCk7CisKKyAgICAgICAvKiBDb25maWd1cmUgRE1BIGNvbnRyb2xsZXIgKi8KKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0RNQUVOQUJMRV9TRVQsIERNQV9VUF9FTkFCTEUpOworCisgICAgICAgLyogU2V0IHBkbSBvdXQgZm9ybWF0ICovCisgICAgICAgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKyAgICAgICBjdHJsICY9IH5QRE1PVVRGT1JNQVQ7CisgICAgICAgY3RybCB8PSB1cGxpbmstPmZvcm1hdCAmIFBETU9VVEZPUk1BVDsKKworICAgICAgIC8qIFVwbGluayBjaGFubmVscyAqLworICAgICAgIG1jcGRtLT51cF9jaGFubmVscyA9IHVwbGluay0+Y2hhbm5lbHMgJiAoUERNX1VQX01BU0sgfCBQRE1fU1RBVFVTX01BU0spOworCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9DVFJMLCBjdHJsKTsKKworICAgICAgIHJldHVybiAwOworfQorCisvKgorICogQ29uZmlndXJlcyBNY1BETSBkb3dubGluayBmb3IgYXVkaW8gcGxheWJhY2suCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9tYXBfbWNwZG1fc3RhcnQuCisgKi8KK2ludCBvbWFwX21jcGRtX3BsYXliYWNrX29wZW4oc3RydWN0IG9tYXBfbWNwZG1fbGluayAqZG93bmxpbmspCit7CisgICAgICAgaW50IGlycV9tYXNrID0gMDsKKyAgICAgICBpbnQgY3RybDsKKworICAgICAgIGlmICghZG93bmxpbmspCisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgIG1jcGRtLT5kb3dubGluayA9IGRvd25saW5rOworCisgICAgICAgLyogRW5hYmxlIGlycSByZXF1ZXN0IGdlbmVyYXRpb24gKi8KKyAgICAgICBpcnFfbWFzayB8PSBkb3dubGluay0+aXJxX21hc2sgJiBNQ1BETV9ET1dOTElOS19JUlFfTUFTSzsKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0lSUUVOQUJMRV9TRVQsIGlycV9tYXNrKTsKKworICAgICAgIC8qIENvbmZpZ3VyZSB1cGxpbmsgdGhyZXNob2xkICovCisgICAgICAgaWYgKGRvd25saW5rLT50aHJlc2hvbGQgPiBETl9USFJFU19NQVgpCisgICAgICAgICAgICAgICBkb3dubGluay0+dGhyZXNob2xkID0gRE5fVEhSRVNfTUFYOworCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9GSUZPX0NUUkxfRE4sIGRvd25saW5rLT50aHJlc2hvbGQpOworCisgICAgICAgLyogRW5hYmxlIERNQSByZXF1ZXN0IGdlbmVyYXRpb24gKi8KKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0RNQUVOQUJMRV9TRVQsIERNQV9ETl9FTkFCTEUpOworCisgICAgICAgLyogU2V0IHBkbSBvdXQgZm9ybWF0ICovCisgICAgICAgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKyAgICAgICBjdHJsICY9IH5QRE1PVVRGT1JNQVQ7CisgICAgICAgY3RybCB8PSBkb3dubGluay0+Zm9ybWF0ICYgUERNT1VURk9STUFUOworCisgICAgICAgLyogRG93bmxpbmsgY2hhbm5lbHMgKi8KKyAgICAgICBtY3BkbS0+ZG5fY2hhbm5lbHMgPSBkb3dubGluay0+Y2hhbm5lbHMgJiAoUERNX0ROX01BU0sgfCBQRE1fQ01EX01BU0spOworCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9DVFJMLCBjdHJsKTsKKworICAgICAgIHJldHVybiAwOworfQorCisvKgorICogQ2xlYW5zIE1jUERNIHVwbGluayBjb25maWd1cmF0aW9uLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuCisgKi8KK2ludCBvbWFwX21jcGRtX2NhcHR1cmVfY2xvc2Uoc3RydWN0IG9tYXBfbWNwZG1fbGluayAqdXBsaW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisKKyAgICAgICBpZiAoIXVwbGluaykKKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgLyogRGlzYWJsZSBpcnEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgaXJxX21hc2sgfD0gdXBsaW5rLT5pcnFfbWFzayAmIE1DUERNX1VQTElOS19JUlFfTUFTSzsKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0lSUUVOQUJMRV9DTFIsIGlycV9tYXNrKTsKKworICAgICAgIC8qIERpc2FibGUgRE1BIHJlcXVlc3QgZ2VuZXJhdGlvbiAqLworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fRE1BRU5BQkxFX0NMUiwgRE1BX1VQX0VOQUJMRSk7CisKKyAgICAgICAvKiBDbGVhciBEb3dubGluayBjaGFubmVscyAqLworICAgICAgIG1jcGRtLT51cF9jaGFubmVscyA9IDA7CisKKyAgICAgICBtY3BkbS0+dXBsaW5rID0gTlVMTDsKKworICAgICAgIHJldHVybiAwOworfQorCisvKgorICogQ2xlYW5zIE1jUERNIGRvd25saW5rIGNvbmZpZ3VyYXRpb24uCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZC4KKyAqLworaW50IG9tYXBfbWNwZG1fcGxheWJhY2tfY2xvc2Uoc3RydWN0IG9tYXBfbWNwZG1fbGluayAqZG93bmxpbmspCit7CisgICAgICAgaW50IGlycV9tYXNrID0gMDsKKworICAgICAgIGlmICghZG93bmxpbmspCisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgIC8qIERpc2FibGUgaXJxIHJlcXVlc3QgZ2VuZXJhdGlvbiAqLworICAgICAgIGlycV9tYXNrIHw9IGRvd25saW5rLT5pcnFfbWFzayAmIE1DUERNX0RPV05MSU5LX0lSUV9NQVNLOworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fSVJRRU5BQkxFX0NMUiwgaXJxX21hc2spOworCisgICAgICAgLyogRGlzYWJsZSBETUEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETUFFTkFCTEVfQ0xSLCBETUFfRE5fRU5BQkxFKTsKKworICAgICAgIC8qIGNsZWFyIERvd25saW5rIGNoYW5uZWxzICovCisgICAgICAgbWNwZG0tPmRuX2NoYW5uZWxzID0gMDsKKworICAgICAgIG1jcGRtLT5kb3dubGluayA9IE5VTEw7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG9tYXBfbWNwZG1faXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworICAgICAgIHN0cnVjdCBvbWFwX21jcGRtICptY3BkbV9pcnEgPSBkZXZfaWQ7CisgICAgICAgaW50IGlycV9zdGF0dXM7CisKKyAgICAgICBpcnFfc3RhdHVzID0gb21hcF9tY3BkbV9yZWFkKE1DUERNX0lSUVNUQVRVUyk7CisKKyAgICAgICAvKiBBY2tub3dsZWRnZSBpcnEgZXZlbnQgKi8KKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0lSUVNUQVRVUywgaXJxX3N0YXR1cyk7CisKKyAgICAgICBpZiAoaXJxICYgTUNQRE1fRE5fSVJRX0ZVTEwpIHsKKyAgICAgICAgICAgICAgIGRldl9lcnIobWNwZG1faXJxLT5kZXYsICJETiBGSUZPIGVycm9yICV4XG4iLCBpcnFfc3RhdHVzKTsKKyAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVzZXRfcGxheWJhY2soMSk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3BsYXliYWNrX29wZW4obWNwZG1faXJxLT5kb3dubGluayk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKDApOworICAgICAgIH0KKworICAgICAgIGlmIChpcnEgJiBNQ1BETV9ETl9JUlFfRU1QVFkpIHsKKyAgICAgICAgICAgICAgIGRldl9lcnIobWNwZG1faXJxLT5kZXYsICJETiBGSUZPIGVycm9yICV4XG4iLCBpcnFfc3RhdHVzKTsKKyAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVzZXRfcGxheWJhY2soMSk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3BsYXliYWNrX29wZW4obWNwZG1faXJxLT5kb3dubGluayk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKDApOworICAgICAgIH0KKworICAgICAgIGlmIChpcnEgJiBNQ1BETV9ETl9JUlEpIHsKKyAgICAgICAgICAgICAgIGRldl9kYmcobWNwZG1faXJxLT5kZXYsICJETiB3cml0ZSByZXF1ZXN0XG4iKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoaXJxICYgTUNQRE1fVVBfSVJRX0ZVTEwpIHsKKyAgICAgICAgICAgICAgIGRldl9lcnIobWNwZG1faXJxLT5kZXYsICJVUCBGSUZPIGVycm9yICV4XG4iLCBpcnFfc3RhdHVzKTsKKyAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVzZXRfY2FwdHVyZSgxKTsKKyAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fY2FwdHVyZV9vcGVuKG1jcGRtX2lycS0+dXBsaW5rKTsKKyAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVzZXRfY2FwdHVyZSgwKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoaXJxICYgTUNQRE1fVVBfSVJRX0VNUFRZKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiVVAgRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X2NhcHR1cmUoMSk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbihtY3BkbV9pcnEtPnVwbGluayk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X2NhcHR1cmUoMCk7CisgICAgICAgfQorCisgICAgICAgaWYgKGlycSAmIE1DUERNX1VQX0lSUSkgeworICAgICAgICAgICAgICAgZGV2X2RiZyhtY3BkbV9pcnEtPmRldiwgIlVQIHdyaXRlIHJlcXVlc3RcbiIpOworICAgICAgIH0KKworICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IG9tYXBfbWNwZG1fcmVxdWVzdCh2b2lkKQoreworICAgICAgIGludCByZXQ7CisKKyAgICAgICBjbGtfZW5hYmxlKG1jcGRtLT5jbGspOworCisgICAgICAgc3Bpbl9sb2NrKCZtY3BkbS0+bG9jayk7CisKKyAgICAgICBpZiAoIW1jcGRtLT5mcmVlKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtLT5kZXYsICJNY1BETSBpbnRlcmZhY2UgaXMgaW4gdXNlXG4iKTsKKyAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZtY3BkbS0+bG9jayk7CisgICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7CisgICAgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICB9CisgICAgICAgbWNwZG0tPmZyZWUgPSAwOworCisgICAgICAgc3Bpbl91bmxvY2soJm1jcGRtLT5sb2NrKTsKKworICAgICAgIC8qIERpc2FibGUgbGluZXMgd2hpbGUgcmVxdWVzdCBpcyBvbmdvaW5nICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9DVFJMLCAweDAwKTsKKworICAgICAgIHJldCA9IHJlcXVlc3RfaXJxKG1jcGRtLT5pcnEsIG9tYXBfbWNwZG1faXJxX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgIk1jUERNIiwgKHZvaWQgKiltY3BkbSk7CisgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbS0+ZGV2LCAiUmVxdWVzdCBmb3IgTWNQRE0gSVJRIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gMDsKKworZXJyOgorICAgICAgIGNsa19kaXNhYmxlKG1jcGRtLT5jbGspOworICAgICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgb21hcF9tY3BkbV9mcmVlKHZvaWQpCit7CisgICAgICAgc3Bpbl9sb2NrKCZtY3BkbS0+bG9jayk7CisgICAgICAgaWYgKG1jcGRtLT5mcmVlKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtLT5kZXYsICJNY1BETSBpbnRlcmZhY2UgaXMgYWxyZWFkeSBmcmVlXG4iKTsKKyAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZtY3BkbS0+bG9jayk7CisgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgfQorICAgICAgIG1jcGRtLT5mcmVlID0gMTsKKyAgICAgICBzcGluX3VubG9jaygmbWNwZG0tPmxvY2spOworCisgICAgICAgY2xrX2Rpc2FibGUobWNwZG0tPmNsayk7CisKKyAgICAgICBmcmVlX2lycShtY3BkbS0+aXJxLCAodm9pZCAqKW1jcGRtKTsKK30KKworLyogRW5hYmxlL2Rpc2FibGUgREMgb2Zmc2V0IGNhbmNlbGF0aW9uIGZvciB0aGUgYW5hbG9nCisgKiBoZWFkc2V0IHBhdGggKFBETSBjaGFubmVscyAxIGFuZCAyKS4KKyAqLworaW50IG9tYXBfbWNwZG1fc2V0X29mZnNldChpbnQgb2Zmc2V0MSwgaW50IG9mZnNldDIpCit7CisgICAgICAgaW50IG9mZnNldDsKKworICAgICAgIGlmICgob2Zmc2V0MSA+IEROX09GU1RfTUFYKSB8fCAob2Zmc2V0MiA+IEROX09GU1RfTUFYKSkKKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgb2Zmc2V0ID0gKG9mZnNldDEgPDwgRE5fT0ZTVF9SWDEpIHwgKG9mZnNldDIgPDwgRE5fT0ZTVF9SWDIpOworCisgICAgICAgLyogb2Zmc2V0IGNhbmNlbGxhdGlvbiBmb3IgY2hhbm5lbCAxICovCisgICAgICAgaWYgKG9mZnNldDEpCisgICAgICAgICAgICAgICBvZmZzZXQgfD0gRE5fT0ZTVF9SWDFfRU47CisgICAgICAgZWxzZQorICAgICAgICAgICAgICAgb2Zmc2V0ICY9IH5ETl9PRlNUX1JYMV9FTjsKKworICAgICAgIC8qIG9mZnNldCBjYW5jZWxsYXRpb24gZm9yIGNoYW5uZWwgMiAqLworICAgICAgIGlmIChvZmZzZXQyKQorICAgICAgICAgICAgICAgb2Zmc2V0IHw9IEROX09GU1RfUlgyX0VOOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIG9mZnNldCAmPSB+RE5fT0ZTVF9SWDJfRU47CisKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0ROX09GRlNFVCwgb2Zmc2V0KTsKKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwX21jcGRtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisgICAgICAgc3RydWN0IHJlc291cmNlICpyZXM7CisgICAgICAgaW50IHJldCA9IDA7CisKKyAgICAgICBtY3BkbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX21jcGRtKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgaWYgKCFtY3BkbSkgeworICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICB9CisKKyAgICAgICByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworICAgICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcmVzb3VyY2VcbiIpOworICAgICAgICAgICAgICAgZ290byBlcnJfcmVzb3VyY2U7CisgICAgICAgfQorCisgICAgICAgc3Bpbl9sb2NrX2luaXQoJm1jcGRtLT5sb2NrKTsKKyAgICAgICBtY3BkbS0+ZnJlZSA9IDE7CisgICAgICAgbWNwZG0tPmlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisgICAgICAgaWYgKCFtY3BkbS0+aW9fYmFzZSkgeworICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyX3Jlc291cmNlOworICAgICAgIH0KKworICAgICAgIG1jcGRtLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisgICAgICAgbWNwZG0tPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInBkbV9jayIpOworICAgICAgIGlmIChJU19FUlIobWNwZG0tPmNsaykpIHsKKyAgICAgICAgICAgICAgIHJldCA9IFBUUl9FUlIobWNwZG0tPmNsayk7CisgICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IHBkbV9jazogJWRcbiIsIHJldCk7CisgICAgICAgICAgICAgICBnb3RvIGVycl9jbGs7CisgICAgICAgfQorCisgICAgICAgbWNwZG0tPmRldiA9ICZwZGV2LT5kZXY7CisgICAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNwZG0pOworCisgICAgICAgcmV0dXJuIDA7CisKK2Vycl9jbGs6CisgICAgICAgaW91bm1hcChtY3BkbS0+aW9fYmFzZSk7CitlcnJfcmVzb3VyY2U6CisgICAgICAga2ZyZWUobWNwZG0pOworZXhpdDoKKyAgICAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwX21jcGRtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworICAgICAgIHN0cnVjdCBvbWFwX21jcGRtICptY3BkbV9wdHIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisgICAgICAgY2xrX3B1dChtY3BkbV9wdHItPmNsayk7CisKKyAgICAgICBpb3VubWFwKG1jcGRtX3B0ci0+aW9fYmFzZSk7CisKKyAgICAgICBtY3BkbV9wdHItPmNsayA9IE5VTEw7CisgICAgICAgbWNwZG1fcHRyLT5mcmVlID0gMDsKKyAgICAgICBtY3BkbV9wdHItPmRldiA9IE5VTEw7CisKKyAgICAgICBrZnJlZShtY3BkbV9wdHIpOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfbWNwZG1fZHJpdmVyID0geworICAgICAgIC5wcm9iZSA9IG9tYXBfbWNwZG1fcHJvYmUsCisgICAgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG9tYXBfbWNwZG1fcmVtb3ZlKSwKKyAgICAgICAuZHJpdmVyID0geworICAgICAgICAgICAgICAgLm5hbWUgPSAib21hcC1tY3BkbSIsCisgICAgICAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvbWFwX21jcGRtX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9tY3BkbV9pbml0KHZvaWQpCit7CisgICAgICAgcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9tY3BkbV9kcml2ZXIpOworfQorYXJjaF9pbml0Y2FsbChvbWFwX21jcGRtX2luaXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvbWNwZG0uaCBiL3NvdW5kL3NvYy9vbWFwL21jcGRtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiMzI2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL21jcGRtLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBtY3BkbS5oIC0tIERlZmluZXMgZm9yIE1jUERNIGRyaXZlcgorICoKKyAqIEF1dGhvcjogSm9yZ2UgRWR1YXJkbyBDYW5kZWxhcmlhIDx4MDEwNzIwOUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisvKiBNY1BETSByZWdpc3RlcnMgKi8KKworI2RlZmluZSBNQ1BETV9SRVZJU0lPTiAgICAgICAgIDB4MDAKKyNkZWZpbmUgTUNQRE1fU1lTQ09ORklHICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgTUNQRE1fSVJRU1RBVFVTX1JBVyAgICAweDI0CisjZGVmaW5lIE1DUERNX0lSUVNUQVRVUyAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIE1DUERNX0lSUUVOQUJMRV9TRVQgICAgMHgyQworI2RlZmluZSBNQ1BETV9JUlFFTkFCTEVfQ0xSICAgIDB4MzAKKyNkZWZpbmUgTUNQRE1fSVJRV0FLRV9FTiAgICAgICAweDM0CisjZGVmaW5lIE1DUERNX0RNQUVOQUJMRV9TRVQgICAgMHgzOAorI2RlZmluZSBNQ1BETV9ETUFFTkFCTEVfQ0xSICAgIDB4M0MKKyNkZWZpbmUgTUNQRE1fRE1BV0FLRUVOICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgTUNQRE1fQ1RSTCAgICAgICAgICAgICAweDQ0CisjZGVmaW5lIE1DUERNX0ROX0RBVEEgICAgICAgICAgMHg0OAorI2RlZmluZSBNQ1BETV9VUF9EQVRBICAgICAgICAgIDB4NEMKKyNkZWZpbmUgTUNQRE1fRklGT19DVFJMX0ROICAgICAweDUwCisjZGVmaW5lIE1DUERNX0ZJRk9fQ1RSTF9VUCAgICAgMHg1NAorI2RlZmluZSBNQ1BETV9ETl9PRkZTRVQgICAgICAgICAgICAgICAgMHg1OAorCisvKgorICogTUNQRE1fSVJRIGJpdCBmaWVsZHMKKyAqIElSUVNUQVRVU19SQVcsIElSUVNUQVRVUywgSVJRRU5BQkxFX1NFVCwgSVJRRU5BQkxFX0NMUgorICovCisKKyNkZWZpbmUgTUNQRE1fRE5fSVJRICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIE1DUERNX0ROX0lSUV9FTVBUWSAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBNQ1BETV9ETl9JUlFfQUxNU1RfRU1QVFkgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgTUNQRE1fRE5fSVJRX0ZVTEwgICAgICAgICAgICAgICgxIDw8IDMpCisKKyNkZWZpbmUgTUNQRE1fVVBfSVJRICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIE1DUERNX1VQX0lSUV9FTVBUWSAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBNQ1BETV9VUF9JUlFfQUxNU1RfRlVMTCAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgTUNQRE1fVVBfSVJRX0ZVTEwgICAgICAgICAgICAgICgxIDw8IDExKQorCisjZGVmaW5lIE1DUERNX0RPV05MSU5LX0lSUV9NQVNLICAgICAgICAgICAgICAgIDB4MDBGCisjZGVmaW5lIE1DUERNX1VQTElOS19JUlFfTUFTSyAgICAgICAgICAweEYwMAorCisvKgorICogTUNQRE1fRE1BRU5BQkxFIGJpdCBmaWVsZHMKKyAqLworCisjZGVmaW5lIERNQV9ETl9FTkFCTEUgICAgICAgICAgMHgxCisjZGVmaW5lIERNQV9VUF9FTkFCTEUgICAgICAgICAgMHgyCisKKy8qCisgKiBNQ1BETV9DVFJMIGJpdCBmaWVsZHMKKyAqLworCisjZGVmaW5lIFBETV9VUDFfRU4gICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFBETV9VUDJfRU4gICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFBETV9VUDNfRU4gICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFBETV9ETjFfRU4gICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFBETV9ETjJfRU4gICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFBETV9ETjNfRU4gICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFBETV9ETjRfRU4gICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFBETV9ETjVfRU4gICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFBETU9VVEZPUk1BVCAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIENNRF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgU1RBVFVTX0lOVCAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgU1dfVVBfUlNUICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgU1dfRE5fUlNUICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgUERNX1VQX01BU0sgICAgICAgICAgICAweDAwNworI2RlZmluZSBQRE1fRE5fTUFTSyAgICAgICAgICAgIDB4MEY4CisjZGVmaW5lIFBETV9DTURfTUFTSyAgICAgICAgICAgMHgyMDAKKyNkZWZpbmUgUERNX1NUQVRVU19NQVNLICAgICAgICAgICAgICAgIDB4NDAwCisKKworI2RlZmluZSBQRE1PVVRGT1JNQVRfTEpVU1QgICAgICgwIDw8IDgpCisjZGVmaW5lIFBETU9VVEZPUk1BVF9SSlVTVCAgICAgKDEgPDwgOCkKKworLyoKKyAqIE1DUERNX0ZJRk9fQ1RSTCBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBVUF9USFJFU19NQVggICAgICAgICAgIDB4RgorI2RlZmluZSBETl9USFJFU19NQVggICAgICAgICAgIDB4RgorCisvKgorICogTUNQRE1fRE5fT0ZGU0VUIGJpdCBmaWVsZHMKKyAqLworCisjZGVmaW5lIEROX09GU1RfUlgxX0VOICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEROX09GU1RfUlgyX0VOICAgICAgICAgMHgwMTAwCisKKyNkZWZpbmUgRE5fT0ZTVF9SWDEgICAgICAgICAgICAxCisjZGVmaW5lIEROX09GU1RfUlgyICAgICAgICAgICAgOQorI2RlZmluZSBETl9PRlNUX01BWCAgICAgICAgICAgIDB4MUYKKworI2RlZmluZSBNQ1BETV9VUExJTksgICAgICAgICAgIDEKKyNkZWZpbmUgTUNQRE1fRE9XTkxJTksgICAgICAgICAyCisKK3N0cnVjdCBvbWFwX21jcGRtX2xpbmsgeworICAgICAgIGludCBpcnFfbWFzazsKKyAgICAgICBpbnQgdGhyZXNob2xkOworICAgICAgIGludCBmb3JtYXQ7CisgICAgICAgaW50IGNoYW5uZWxzOworfTsKKworc3RydWN0IG9tYXBfbWNwZG1fcGxhdGZvcm1fZGF0YSB7CisgICAgICAgdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CisgICAgICAgdTE2IGlycTsKK307CisKK3N0cnVjdCBvbWFwX21jcGRtIHsKKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7CisgICAgICAgdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CisgICAgICAgdm9pZCBfX2lvbWVtICppb19iYXNlOworICAgICAgIHU4IGZyZWU7CisgICAgICAgaW50IGlycTsKKworICAgICAgIHNwaW5sb2NrX3QgbG9jazsKKyAgICAgICBzdHJ1Y3Qgb21hcF9tY3BkbV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKyAgICAgICBzdHJ1Y3QgY2xrICpjbGs7CisgICAgICAgc3RydWN0IG9tYXBfbWNwZG1fbGluayAqZG93bmxpbms7CisgICAgICAgc3RydWN0IG9tYXBfbWNwZG1fbGluayAqdXBsaW5rOworICAgICAgIHN0cnVjdCBjb21wbGV0aW9uIGlycV9jb21wbGV0aW9uOworCisgICAgICAgaW50IGRuX2NoYW5uZWxzOworICAgICAgIGludCB1cF9jaGFubmVsczsKK307CisKK2V4dGVybiB2b2lkIG9tYXBfbWNwZG1fc3RhcnQoaW50IHN0cmVhbSk7CitleHRlcm4gdm9pZCBvbWFwX21jcGRtX3N0b3AoaW50IHN0cmVhbSk7CitleHRlcm4gaW50IG9tYXBfbWNwZG1fY2FwdHVyZV9vcGVuKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKnVwbGluayk7CitleHRlcm4gaW50IG9tYXBfbWNwZG1fcGxheWJhY2tfb3BlbihzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICpkb3dubGluayk7CitleHRlcm4gaW50IG9tYXBfbWNwZG1fY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICp1cGxpbmspOworZXh0ZXJuIGludCBvbWFwX21jcGRtX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rKTsKK2V4dGVybiBpbnQgb21hcF9tY3BkbV9yZXF1ZXN0KHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcF9tY3BkbV9mcmVlKHZvaWQpOworZXh0ZXJuIGludCBvbWFwX21jcGRtX3NldF9vZmZzZXQoaW50IG9mZnNldDEsIGludCBvZmZzZXQyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwppbmRleCA2YmJiZDJhLi5kMjk3MjU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCkBAIC0yODcsNiArMjg3LDggQEAKIAlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0uZG1hX3JlcSA9IGRtYTsKIAlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0ucG9ydF9hZGRyID0gcG9ydDsKIAlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0uc3luY19tb2RlID0gc3luY19tb2RlOworCW9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXS5kYXRhX3R5cGUgPQorCQkJCQkJCU9NQVBfRE1BX0RBVEFfVFlQRV9TMTY7CiAJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwogCiAJaWYgKG1jYnNwX2RhdGEtPmNvbmZpZ3VyZWQpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWYxOWU0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY3BkbS5jCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogb21hcC1tY3BkbS5jICAtLSAgT01BUCBBTFNBIFNvQyBEQUkgZHJpdmVyIHVzaW5nIE1jUERNIHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBBdXRob3I6IE1pc2FlbCBMb3BleiBDcnV6IDx4MDA1MjcyOUB0aS5jb20+CisgKiBDb250YWN0OiBKb3JnZSBFZHVhcmRvIENhbmRlbGFyaWEgPHgwMTA3MjA5QHRpLmNvbT4KKyAqICAgICAgICAgIE1hcmdhcml0YSBPbGF5YSA8bWFnaS5vbGF5YUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+CisjaW5jbHVkZSA8cGxhdC9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L21jYnNwLmg+CisjaW5jbHVkZSAibWNwZG0uaCIKKyNpbmNsdWRlICJvbWFwLW1jcGRtLmgiCisjaW5jbHVkZSAib21hcC1wY20uaCIKKworc3RydWN0IG9tYXBfbWNwZG1fZGF0YSB7CisJc3RydWN0IG9tYXBfbWNwZG1fbGluayAqbGlua3M7CisJaW50IGFjdGl2ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rIG9tYXBfbWNwZG1fbGlua3NbXSA9IHsKKwkvKiBkb3dubGluayAqLworCXsKKwkJLmlycV9tYXNrID0gTUNQRE1fRE5fSVJRX0VNUFRZIHwgTUNQRE1fRE5fSVJRX0ZVTEwsCisJCS50aHJlc2hvbGQgPSAxLAorCQkuZm9ybWF0ID0gUERNT1VURk9STUFUX0xKVVNULAorCX0sCisJLyogdXBsaW5rICovCisJeworCQkuaXJxX21hc2sgPSBNQ1BETV9VUF9JUlFfRU1QVFkgfCBNQ1BETV9VUF9JUlFfRlVMTCwKKwkJLnRocmVzaG9sZCA9IDEsCisJCS5mb3JtYXQgPSBQRE1PVVRGT1JNQVRfTEpVU1QsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tY3BkbV9kYXRhIG1jcGRtX2RhdGEgPSB7CisJLmxpbmtzID0gb21hcF9tY3BkbV9saW5rcywKKwkuYWN0aXZlID0gMCwKK307CisKKy8qCisgKiBTdHJlYW0gRE1BIHBhcmFtZXRlcnMKKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX3BjbV9kbWFfZGF0YSBvbWFwX21jcGRtX2RhaV9kbWFfcGFyYW1zW10gPSB7CisJeworCQkubmFtZSA9ICJBdWRpbyBwbGF5YmFjayIsCisJCS5kbWFfcmVxID0gT01BUDQ0WFhfRE1BX01DUERNX0RMLAorCQkuZGF0YV90eXBlID0gT01BUF9ETUFfREFUQV9UWVBFX1MzMiwKKwkJLnN5bmNfbW9kZSA9IE9NQVBfRE1BX1NZTkNfUEFDS0VULAorCQkucGFja2V0X3NpemUgPSAxNiwKKwkJLnBvcnRfYWRkciA9IE9NQVA0NFhYX01DUERNX0wzX0JBU0UgKyBNQ1BETV9ETl9EQVRBLAorCX0sCisJeworCQkubmFtZSA9ICJBdWRpbyBjYXB0dXJlIiwKKwkJLmRtYV9yZXEgPSBPTUFQNDRYWF9ETUFfTUNQRE1fVVAsCisJCS5kYXRhX3R5cGUgPSBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkuc3luY19tb2RlID0gT01BUF9ETUFfU1lOQ19QQUNLRVQsCisJCS5wYWNrZXRfc2l6ZSA9IDE2LAorCQkucG9ydF9hZGRyID0gT01BUDQ0WFhfTUNQRE1fTDNfQkFTRSArIE1DUERNX1VQX0RBVEEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgb21hcF9tY3BkbV9kYWlfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlpbnQgZXJyID0gMDsKKworCWlmICghY3B1X2RhaS0+YWN0aXZlKQorCQllcnIgPSBvbWFwX21jcGRtX3JlcXVlc3QoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWNwZG1fZGFpX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisKKwlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKKwkJb21hcF9tY3BkbV9mcmVlKCk7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9tY3BkbV9kYWlfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3Qgb21hcF9tY3BkbV9kYXRhICptY3BkbV9wcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCWludCBzdHJlYW0gPSBzdWJzdHJlYW0tPnN0cmVhbTsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlmICghbWNwZG1fcHJpdi0+YWN0aXZlKyspCisJCQlvbWFwX21jcGRtX3N0YXJ0KHN0cmVhbSk7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWlmICghLS1tY3BkbV9wcml2LT5hY3RpdmUpCisJCQlvbWFwX21jcGRtX3N0b3Aoc3RyZWFtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9tYXBfbWNwZG1fZGFpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3Qgb21hcF9tY3BkbV9kYXRhICptY3BkbV9wcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKm1jcGRtX2xpbmtzID0gbWNwZG1fcHJpdi0+bGlua3M7CisJaW50IHN0cmVhbSA9IHN1YnN0cmVhbS0+c3RyZWFtOworCWludCBjaGFubmVscywgZXJyLCBsaW5rX21hc2sgPSAwOworCisJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmb21hcF9tY3BkbV9kYWlfZG1hX3BhcmFtc1tzdHJlYW1dOworCisJY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKKwlzd2l0Y2ggKGNoYW5uZWxzKSB7CisJY2FzZSA0OgorCQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkKKwkJCS8qIHVwIHRvIDIgY2hhbm5lbHMgZm9yIGNhcHR1cmUgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQlsaW5rX21hc2sgfD0gMSA8PCAzOworCWNhc2UgMzoKKwkJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQkvKiB1cCB0byAyIGNoYW5uZWxzIGZvciBjYXB0dXJlICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGlua19tYXNrIHw9IDEgPDwgMjsKKwljYXNlIDI6CisJCWxpbmtfbWFzayB8PSAxIDw8IDE7CisJY2FzZSAxOgorCQlsaW5rX21hc2sgfD0gMSA8PCAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiB1bnN1cHBvcnRlZCBudW1iZXIgb2YgY2hhbm5lbHMgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCW1jcGRtX2xpbmtzW3N0cmVhbV0uY2hhbm5lbHMgPSBsaW5rX21hc2sgPDwgMzsKKwkJZXJyID0gb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKCZtY3BkbV9saW5rc1tzdHJlYW1dKTsKKwl9IGVsc2UgeworCQltY3BkbV9saW5rc1tzdHJlYW1dLmNoYW5uZWxzID0gbGlua19tYXNrIDw8IDA7CisJCWVyciA9IG9tYXBfbWNwZG1fY2FwdHVyZV9vcGVuKCZtY3BkbV9saW5rc1tzdHJlYW1dKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9tYXBfbWNwZG1fZGFpX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IG9tYXBfbWNwZG1fZGF0YSAqbWNwZG1fcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICptY3BkbV9saW5rcyA9IG1jcGRtX3ByaXYtPmxpbmtzOworCWludCBzdHJlYW0gPSBzdWJzdHJlYW0tPnN0cmVhbTsKKwlpbnQgZXJyOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09ICBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQllcnIgPSBvbWFwX21jcGRtX3BsYXliYWNrX2Nsb3NlKCZtY3BkbV9saW5rc1tzdHJlYW1dKTsKKwllbHNlCisJCWVyciA9IG9tYXBfbWNwZG1fY2FwdHVyZV9jbG9zZSgmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBvbWFwX21jcGRtX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBvbWFwX21jcGRtX2RhaV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IG9tYXBfbWNwZG1fZGFpX3NodXRkb3duLAorCS50cmlnZ2VyCT0gb21hcF9tY3BkbV9kYWlfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gb21hcF9tY3BkbV9kYWlfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gb21hcF9tY3BkbV9kYWlfaHdfZnJlZSwKK307CisKKyNkZWZpbmUgT01BUF9NQ1BETV9SQVRFUwkoU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCkKKyNkZWZpbmUgT01BUF9NQ1BETV9GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RydWN0IHNuZF9zb2NfZGFpIG9tYXBfbWNwZG1fZGFpID0geworCS5uYW1lID0gIm9tYXAtbWNwZG0iLAorCS5pZCA9IC0xLAorCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSA0LAorCQkucmF0ZXMgPSBPTUFQX01DUERNX1JBVEVTLAorCQkuZm9ybWF0cyA9IE9NQVBfTUNQRE1fRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IE9NQVBfTUNQRE1fUkFURVMsCisJCS5mb3JtYXRzID0gT01BUF9NQ1BETV9GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZvbWFwX21jcGRtX2RhaV9vcHMsCisJLnByaXZhdGVfZGF0YSA9ICZtY3BkbV9kYXRhLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfbWNwZG1fZGFpKTsKKworc3RhdGljIGludCBfX2luaXQgc25kX29tYXBfbWNwZG1faW5pdCh2b2lkKQoreworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmb21hcF9tY3BkbV9kYWkpOworfQorbW9kdWxlX2luaXQoc25kX29tYXBfbWNwZG1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbmRfb21hcF9tY3BkbV9leGl0KHZvaWQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmb21hcF9tY3BkbV9kYWkpOworfQorbW9kdWxlX2V4aXQoc25kX29tYXBfbWNwZG1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1pc2FlbCBMb3BleiBDcnV6IDx4MDA1MjcyOUB0aS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk9NQVAgUERNIFNvQyBJbnRlcmZhY2UiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uaCBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2I4MGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY3BkbS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBvbWFwLW1jcGRtLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBDb250YWN0OiBNaXNhZWwgTG9wZXogQ3J1eiA8eDAwNTI3MjlAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX09NQVBfTUNQRE1fSF9fCisjZGVmaW5lIF9fT01BUF9NQ1BETV9IX18KKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBvbWFwX21jcGRtX2RhaTsKKworI2VuZGlmCS8qIEVuZCBvZiBfX09NQVBfTUNQRE1fSF9fICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwppbmRleCA5ZGIyNzcwLi44MjVkYjM4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKQEAgLTM3LDcgKzM3LDggQEAKIAkJCQkgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKIAkJCQkgIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwKIAkJCQkgIFNORFJWX1BDTV9JTkZPX1JFU1VNRSwKLQkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQkJICBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKIAkucGVyaW9kX2J5dGVzX21pbgk9IDMyLAogCS5wZXJpb2RfYnl0ZXNfbWF4CT0gNjQgKiAxMDI0LAogCS5wZXJpb2RzX21pbgkJPSAyLApAQCAtMTQ5LDYgKzE1MCw3IEBACiAJc3RydWN0IG9tYXBfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBvbWFwX3BjbV9kbWFfZGF0YSAqZG1hX2RhdGEgPSBwcnRkLT5kbWFfZGF0YTsKIAlzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgZG1hX3BhcmFtczsKKwlpbnQgYnl0ZXM7CiAKIAkvKiByZXR1cm4gaWYgdGhpcyBpcyBhIGJ1ZmZlcmxlc3MgdHJhbnNmZXIgZS5nLgogCSAqIGNvZGVjIDwtLT4gQlQgY29kZWMgb3IgR1NNIG1vZGVtIC0tIGxnIEZJWE1FICovCkBAIC0xNTYsMTEgKzE1OCw3IEBACiAJCXJldHVybiAwOwogCiAJbWVtc2V0KCZkbWFfcGFyYW1zLCAwLCBzaXplb2YoZG1hX3BhcmFtcykpOwotCS8qCi0JICogTm90ZTogUmVnYXJkbGVzcyBvZiBpbnRlcmZhY2UgZGF0YSBmb3JtYXRzIHN1cHBvcnRlZCBieSBPTUFQIE1jQlNQCi0JICogb3IgRUFDIGJsb2NrcywgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gaXMgYWx3YXlzIGZpeGVkIDE2LWJpdC9zYW1wbGUKLQkgKi8KLQlkbWFfcGFyYW1zLmRhdGFfdHlwZQkJCT0gT01BUF9ETUFfREFUQV9UWVBFX1MxNjsKKwlkbWFfcGFyYW1zLmRhdGFfdHlwZQkJCT0gZG1hX2RhdGEtPmRhdGFfdHlwZTsKIAlkbWFfcGFyYW1zLnRyaWdnZXIJCQk9IGRtYV9kYXRhLT5kbWFfcmVxOwogCWRtYV9wYXJhbXMuc3luY19tb2RlCQkJPSBkbWFfZGF0YS0+c3luY19tb2RlOwogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CkBAIC0xNzAsNiArMTY4LDcgQEAKIAkJZG1hX3BhcmFtcy5zcmNfc3RhcnQJCT0gcnVudGltZS0+ZG1hX2FkZHI7CiAJCWRtYV9wYXJhbXMuZHN0X3N0YXJ0CQk9IGRtYV9kYXRhLT5wb3J0X2FkZHI7CiAJCWRtYV9wYXJhbXMuZHN0X3BvcnQJCT0gT01BUF9ETUFfUE9SVF9NUFVJOworCQlkbWFfcGFyYW1zLmRzdF9maQkJPSBkbWFfZGF0YS0+cGFja2V0X3NpemU7CiAJfSBlbHNlIHsKIAkJZG1hX3BhcmFtcy5zcmNfYW1vZGUJCT0gT01BUF9ETUFfQU1PREVfQ09OU1RBTlQ7CiAJCWRtYV9wYXJhbXMuZHN0X2Ftb2RlCQk9IE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DOwpAQCAtMTc3LDYgKzE3Niw3IEBACiAJCWRtYV9wYXJhbXMuc3JjX3N0YXJ0CQk9IGRtYV9kYXRhLT5wb3J0X2FkZHI7CiAJCWRtYV9wYXJhbXMuZHN0X3N0YXJ0CQk9IHJ1bnRpbWUtPmRtYV9hZGRyOwogCQlkbWFfcGFyYW1zLnNyY19wb3J0CQk9IE9NQVBfRE1BX1BPUlRfTVBVSTsKKwkJZG1hX3BhcmFtcy5zcmNfZmkJCT0gZG1hX2RhdGEtPnBhY2tldF9zaXplOwogCX0KIAkvKgogCSAqIFNldCBETUEgdHJhbnNmZXIgZnJhbWUgc2l6ZSBlcXVhbCB0byBBTFNBIHBlcmlvZCBzaXplIGFuZCBmcmFtZQpAQCAtMTg0LDcgKzE4NCw4IEBACiAJICogd2UgY2FuIHRyYW5zZmVyIHRoZSB3aG9sZSBBTFNBIGJ1ZmZlciB3aXRoIHNpbmdsZSBETUEgdHJhbnNmZXIgYnV0CiAJICogc3RpbGwgY2FuIGdldCBhbiBpbnRlcnJ1cHQgYXQgZWFjaCBwZXJpb2QgYm91bmFyeQogCSAqLwotCWRtYV9wYXJhbXMuZWxlbV9jb3VudAk9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pIC8gMjsKKwlieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCWRtYV9wYXJhbXMuZWxlbV9jb3VudAk9IGJ5dGVzID4+IGRtYV9kYXRhLT5kYXRhX3R5cGU7CiAJZG1hX3BhcmFtcy5mcmFtZV9jb3VudAk9IHJ1bnRpbWUtPnBlcmlvZHM7CiAJb21hcF9zZXRfZG1hX3BhcmFtcyhwcnRkLT5kbWFfY2gsICZkbWFfcGFyYW1zKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uaCBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmgKaW5kZXggMzhhODIxZC4uYjE5OTc1ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uaAorKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5oCkBAIC0yOSw4ICsyOSwxMCBAQAogCWNoYXIJCSpuYW1lOwkJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KIAlpbnQJCWRtYV9yZXE7CS8qIERNQSByZXF1ZXN0IGxpbmUgKi8KIAl1bnNpZ25lZCBsb25nCXBvcnRfYWRkcjsJLyogdHJhbnNtaXQvcmVjZWl2ZSByZWdpc3RlciAqLwotCWludAkJc3luY19tb2RlOwkvKiBETUEgc3luYyBtb2RlICovCiAJdm9pZCAoKnNldF90aHJlc2hvbGQpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKKwlpbnQJCWRhdGFfdHlwZTsJLyogZGF0YSB0eXBlIDgsMTYsMzIgKi8KKwlpbnQJCXN5bmNfbW9kZTsJLyogRE1BIHN5bmMgbW9kZSAqLworCWludAkJcGFja2V0X3NpemU7CS8qIHBhY2tldCBzaXplIG9ubHkgaW4gUEFDS0VUIG1vZGUgKi8KIH07CiAKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBvbWFwX3NvY19wbGF0Zm9ybTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAzYmVhZ2xlLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM2JlYWdsZS5jCmluZGV4IGQ4OGFkNWMuLjI0MGUwOTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzYmVhZ2xlLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcDNiZWFnbGUuYwpAQCAtMTE3LDExICsxMTcsMTEgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFtYWNoaW5lX2lzX29tYXAzX2JlYWdsZSgpKSB7Ci0JCXByX2RlYnVnKCJOb3QgT01BUDMgQmVhZ2xlIVxuIik7CisJaWYgKCEobWFjaGluZV9pc19vbWFwM19iZWFnbGUoKSB8fCBtYWNoaW5lX2lzX2RldmtpdDgwMDAoKSkpIHsKKwkJcHJfZGVidWcoIk5vdCBPTUFQMyBCZWFnbGUgb3IgRGV2a2l0ODAwMCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcHJfaW5mbygiT01BUDMgQmVhZ2xlIFNvQyBpbml0XG4iKTsKKwlwcl9pbmZvKCJPTUFQMyBCZWFnbGUvRGV2a2l0ODAwMCBTb0MgaW5pdFxuIik7CiAKIAlvbWFwM2JlYWdsZV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFvbWFwM2JlYWdsZV9zbmRfZGV2aWNlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCmluZGV4IDY4OTgwYzEuLmRlMTBmNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC00MCw2ICs0MSw4IEBACiAKICNkZWZpbmUgUFJFRklYICJBU29DIG9tYXAzcGFuZG9yYTogIgogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqb21hcDNwYW5kb3JhX2RhY19yZWc7CisKIHN0YXRpYyBpbnQgb21hcDNwYW5kb3JhX2Ntbl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsIHVuc2lnbmVkIGludCBmbXQpCiB7CkBAIC0xMDYsMTcgKzEwOSwzMyBAQAogCQkJCQkgIFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwogfQogCitzdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9kYWNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQoreworCS8qCisJICogVGhlIFBDTTE3NzMgREFDIGRhdGFzaGVldCByZXF1aXJlcyAxbXMgZGVsYXkgYmV0d2VlbiBzd2l0Y2hpbmcKKwkgKiBWQ0MgcG93ZXIgb24vb2ZmIGFuZCAvUEQgcGluIGhpZ2gvbG93CisJICovCisJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpIHsKKwkJcmVndWxhdG9yX2VuYWJsZShvbWFwM3BhbmRvcmFfZGFjX3JlZyk7CisJCW1kZWxheSgxKTsKKwkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfUEFORE9SQV9EQUNfUE9XRVJfR1BJTywgMSk7CisJfSBlbHNlIHsKKwkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfUEFORE9SQV9EQUNfUE9XRVJfR1BJTywgMCk7CisJCW1kZWxheSgxKTsKKwkJcmVndWxhdG9yX2Rpc2FibGUob21hcDNwYW5kb3JhX2RhY19yZWcpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9ocF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCiB7Ci0JaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpIHsKLQkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfUEFORE9SQV9EQUNfUE9XRVJfR1BJTywgMSk7CisJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpCiAJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfQU1QX1BPV0VSX0dQSU8sIDEpOwotCX0gZWxzZSB7CisJZWxzZQogCQlncGlvX3NldF92YWx1ZShPTUFQM19QQU5ET1JBX0FNUF9QT1dFUl9HUElPLCAwKTsKLQkJbWRlbGF5KDEpOwotCQlncGlvX3NldF92YWx1ZShPTUFQM19QQU5ET1JBX0RBQ19QT1dFUl9HUElPLCAwKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMCw3ICsxNDksOSBAQAogICogIHxQfCA8LS0tIFRXTDQwMzAgPC0tLS0tLS0tLSBMaW5lIEluIGFuZCBNSUNzCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBvbWFwM3BhbmRvcmFfb3V0X2RhcG1fd2lkZ2V0c1tdID0gewotCVNORF9TT0NfREFQTV9EQUMoIlBDTSBEQUMiLCAiSGlGaSBQbGF5YmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0RBQ19FKCJQQ00gREFDIiwgIkhpRmkgUGxheWJhY2siLCBTTkRfU09DX05PUE0sCisJCQkgICAwLCAwLCBvbWFwM3BhbmRvcmFfZGFjX2V2ZW50LAorCQkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAogCVNORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIEFtcGxpZmllciIsIFNORF9TT0NfTk9QTSwKIAkJCSAgIDAsIDAsIE5VTEwsIDAsIG9tYXAzcGFuZG9yYV9ocF9ldmVudCwKIAkJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKQEAgLTMwNiw4ICszMjcsMTggQEAKIAkJZ290byBmYWlsMjsKIAl9CiAKKwlvbWFwM3BhbmRvcmFfZGFjX3JlZyA9IHJlZ3VsYXRvcl9nZXQoJm9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlLT5kZXYsICJ2Y2MiKTsKKwlpZiAoSVNfRVJSKG9tYXAzcGFuZG9yYV9kYWNfcmVnKSkgeworCQlwcl9lcnIoUFJFRklYICJGYWlsZWQgdG8gZ2V0IERBQyByZWd1bGF0b3IgZnJvbSAlczogJWxkXG4iLAorCQkJZGV2X25hbWUoJm9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlLT5kZXYpLAorCQkJUFRSX0VSUihvbWFwM3BhbmRvcmFfZGFjX3JlZykpOworCQlnb3RvIGZhaWwzOworCX0KKwogCXJldHVybiAwOwogCitmYWlsMzoKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKG9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlKTsKIGZhaWwyOgogCXBsYXRmb3JtX2RldmljZV9wdXQob21hcDNwYW5kb3JhX3NuZF9kZXZpY2UpOwogZmFpbDE6CkBAIC0zMjAsNiArMzUxLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXAzcGFuZG9yYV9zb2NfZXhpdCh2b2lkKQogeworCXJlZ3VsYXRvcl9wdXQob21hcDNwYW5kb3JhX2RhY19yZWcpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlKTsKIAlncGlvX2ZyZWUoT01BUDNfUEFORE9SQV9BTVBfUE9XRVJfR1BJTyk7CiAJZ3Bpb19mcmVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8pOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwppbmRleCAzYmQ3NzEyLi5lNjkzOTdmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwpAQCAtMTM1LDEwICsxMzUsMTEgQEAKIAlzdHJ1Y3Qgc3NwX3ByaXYgKnByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKLQkJcmV0dXJuIDA7CisJCWNsa19lbmFibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKIAogCXNzcF9zYXZlX3N0YXRlKCZwcml2LT5kZXYsICZwcml2LT5zdGF0ZSk7CiAJY2xrX2Rpc2FibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDYsMTIgKzE0NywxMyBAQAogewogCXN0cnVjdCBzc3BfcHJpdiAqcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKIAotCWlmICghY3B1X2RhaS0+YWN0aXZlKQotCQlyZXR1cm4gMDsKLQogCWNsa19lbmFibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKIAlzc3BfcmVzdG9yZV9zdGF0ZSgmcHJpdi0+ZGV2LCAmcHJpdi0+c3RhdGUpOwotCXNzcF9lbmFibGUoJnByaXYtPmRldik7CisKKwlpZiAoY3B1X2RhaS0+YWN0aXZlKQorCQlzc3BfZW5hYmxlKCZwcml2LT5kZXYpOworCWVsc2UKKwkJY2xrX2Rpc2FibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9yYXVtZmVsZC5jIGIvc291bmQvc29jL3B4YS9yYXVtZmVsZC5jCmluZGV4IGFjZmNlMWMuLjdlM2Y0MTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcmF1bWZlbGQuYworKysgYi9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMKQEAgLTQxLDcgKzQxLDkgQEAKIH07CiAKICNkZWZpbmUgTUFYOTQ4NV9NQ0xLX0ZSRVFfMTEyODk2IDB4MjIKLSNkZWZpbmUJTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwIDB4MjMKKyNkZWZpbmUgTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwIDB4MjMKKyNkZWZpbmUgTUFYOTQ4NV9NQ0xLX0ZSRVFfMjI1NzkyIDB4MzIKKyNkZWZpbmUgTUFYOTQ4NV9NQ0xLX0ZSRVFfMjQ1NzYwIDB4MzMKIAogc3RhdGljIHZvaWQgc2V0X21heDk0ODVfY2xrKGNoYXIgY2xrKQogewpAQCAtNzEsOSArNzMsMTcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCi0Jc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzExMjg5Nik7CisJLyogc2V0IGZyZXEgdG8gMCB0byBlbmFibGUgYWxsIHBvc3NpYmxlIGNvZGVjIHNhbXBsZSByYXRlcyAqLworCXJldHVybiBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgMCwgMCk7Cit9CiAKLQlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIDExMjg5NjAwLCAwKTsKK3N0YXRpYyB2b2lkIHJhdW1mZWxkX2NzNDI3MF9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCisJLyogc2V0IGZyZXEgdG8gMCB0byBlbmFibGUgYWxsIHBvc3NpYmxlIGNvZGVjIHNhbXBsZSByYXRlcyAqLworCXNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCAwLCAwLCAwKTsKIH0KIAogc3RhdGljIGludCByYXVtZmVsZF9jczQyNzBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApAQCAtODYsMjAgKzk2LDI0IEBACiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKLQljYXNlIDgwMDA6Ci0JY2FzZSAxNjAwMDoKLQljYXNlIDQ4MDAwOgotCWNhc2UgOTYwMDA6Ci0JCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMjI4ODApOwotCQljbGsgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxMTAyNToKLQljYXNlIDIyMDUwOgogCWNhc2UgNDQxMDA6Ci0JY2FzZSA4ODIwMDoKIAkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzExMjg5Nik7CiAJCWNsayA9IDExMjg5NjAwOwogCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwKTsKKwkJY2xrID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8yMjU3OTIpOworCQljbGsgPSAyMjU3OTIwMDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzI0NTc2MCk7CisJCWNsayA9IDI0NTc2MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlmbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfApAQCAtMTI4LDcgKzE0Miw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIFBYQV9TU1BfQ0xLX0VYVCwgMCwgMSk7CisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBQWEFfU1NQX0NMS19FWFQsIGNsaywgMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTEzNyw2ICsxNTEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHJhdW1mZWxkX2NzNDI3MF9vcHMgPSB7CiAJLnN0YXJ0dXAgPSByYXVtZmVsZF9jczQyNzBfc3RhcnR1cCwKKwkuc2h1dGRvd24gPSByYXVtZmVsZF9jczQyNzBfc2h1dGRvd24sCiAJLmh3X3BhcmFtcyA9IHJhdW1mZWxkX2NzNDI3MF9od19wYXJhbXMsCiB9OwogCkBAIC0xODEsMjAgKzE5NiwyNCBAQAogCWludCBmbXQsIHJldCA9IDAsIGNsayA9IDA7CiAKIAlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKLQljYXNlIDgwMDA6Ci0JY2FzZSAxNjAwMDoKLQljYXNlIDQ4MDAwOgotCWNhc2UgOTYwMDA6Ci0JCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMjI4ODApOwotCQljbGsgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxMTAyNToKLQljYXNlIDIyMDUwOgogCWNhc2UgNDQxMDA6Ci0JY2FzZSA4ODIwMDoKIAkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzExMjg5Nik7CiAJCWNsayA9IDExMjg5NjAwOwogCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwKTsKKwkJY2xrID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgODgyMDA6CisJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8yMjU3OTIpOworCQljbGsgPSAyMjU3OTIwMDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzI0NTc2MCk7CisJCWNsayA9IDI0NTc2MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlmbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORjsKQEAgLTIxNyw3ICsyMzYsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBQWEFfU1NQX0NMS19FWFQsIDAsIDEpOworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfRVhULCBjbGssIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnIGIvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZwppbmRleCBiNDg5ZjFhLi4xNWZlNTdlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKQEAgLTI3LDEyICsyNywxMCBAQAogY29uZmlnIFNORF9TM0NfU09DX1BDTQogCXRyaXN0YXRlCiAKLWNvbmZpZyBTTkRfUzNDMjQ0M19TT0NfQUM5NworY29uZmlnIFNORF9TM0NfU09DX0FDOTcKIAl0cmlzdGF0ZQotCXNlbGVjdCBTM0MyNDEwX0RNQQotCXNlbGVjdCBBQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQlVTCi0JCisKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTMKIAl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBORU8xOTczIC0gV004NzUzIgogCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfTkVPMTk3M19HVEEwMQpAQCAtNzEsOCArNjksMTAgQEAKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfU01ESzI0NDNfV005NzEwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsyNDQzIC0gV005NzEwIgogCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfU01ESzI0NDMKLQlzZWxlY3QgU05EX1MzQzI0NDNfU09DX0FDOTcKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKwlzZWxlY3QgQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDCisJc2VsZWN0IFNORF9TM0NfU09DX0FDOTcKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHNtZGsyNDQzCiAJICB3aXRoIHRoZSBXTTk3MTAuCkBAIC04MCw4ICs4MCwxMCBAQAogY29uZmlnIFNORF9TM0MyNFhYX1NPQ19MTjI0NDBTQkNfQUxDNjUwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIExOMjQ0MFNCQyAtIEFMQzY1MCIKIAlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBBUkNIX1MzQzI0MTAKLQlzZWxlY3QgU05EX1MzQzI0NDNfU09DX0FDOTcKKwlzZWxlY3QgUzNDMjQxMF9ETUEKKwlzZWxlY3QgQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0NPREVDCisJc2VsZWN0IFNORF9TM0NfU09DX0FDOTcKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIGxuMjQ0MHNiYwogCSAgd2l0aCB0aGUgQUxDNjUwLgpAQCAtMTExLDMgKzExMywxMSBAQAogCXNlbGVjdCBTTkRfUzNDMjRYWF9TT0NfSTJTCiAJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKIAlzZWxlY3QgU05EX1MzQzI0WFhfU09DX1NJTVRFQworCitjb25maWcgU05EX1NPQ19TTURLX1dNOTcxMworCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBTTURLIHdpdGggV005NzEzIgorCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfU01ESzY0MTAKKwlzZWxlY3QgU05EX1NPQ19XTTk3MTMKKwlzZWxlY3QgU05EX1MzQ19TT0NfQUM5NworCWhlbHAKKwkgIFNhdCBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIFNNREsuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCmluZGV4IGI3NDQ2NTcuLmRmMDcxYTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L01ha2VmaWxlCkBAIC0zLDEzICszLDEzIEBACiBzbmQtc29jLXMzYzI0eHgtaTJzLW9ianMgOj0gczNjMjR4eC1pMnMubwogc25kLXNvYy1zM2MyNDEyLWkycy1vYmpzIDo9IHMzYzI0MTItaTJzLm8KIHNuZC1zb2MtczNjNjR4eC1pMnMtb2JqcyA6PSBzM2M2NHh4LWkycy5vCi1zbmQtc29jLXMzYzI0NDMtYWM5Ny1vYmpzIDo9IHMzYzI0NDMtYWM5Ny5vCitzbmQtc29jLXMzYy1hYzk3LW9ianMgOj0gczNjLWFjOTcubwogc25kLXNvYy1zM2MtaTJzLXYyLW9ianMgOj0gczNjLWkycy12Mi5vCiBzbmQtc29jLXMzYy1wY20tb2JqcyA6PSBzM2MtcGNtLm8KIAogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQykgKz0gc25kLXNvYy1zM2MyNHh4Lm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzI0eHgtaTJzLm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjQ0M19TT0NfQUM5NykgKz0gc25kLXNvYy1zM2MyNDQzLWFjOTcubworb2JqLSQoQ09ORklHX1NORF9TM0NfU09DX0FDOTcpICs9IHNuZC1zb2MtczNjLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNDEyX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjMjQxMi1pMnMubwogb2JqLSQoQ09ORklHX1NORF9TM0M2NFhYX1NPQ19JMlMpICs9IHNuZC1zb2MtczNjNjR4eC1pMnMubwogb2JqLSQoQ09ORklHX1NORF9TM0NfSTJTVjJfU09DKSArPSBzbmQtc29jLXMzYy1pMnMtdjIubwpAQCAtMjYsNiArMjYsNyBAQAogc25kLXNvYy1zM2MyNHh4LXNpbXRlYy1oZXJtZXMtb2JqcyA6PSBzM2MyNHh4X3NpbXRlY19oZXJtZXMubwogc25kLXNvYy1zM2MyNHh4LXNpbXRlYy10bHYzMjBhaWMyMy1vYmpzIDo9IHMzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLm8KIHNuZC1zb2Mtc21kazY0eHgtd204NTgwLW9ianMgOj0gc21kazY0eHhfd204NTgwLm8KK3NuZC1zb2Mtc21kay13bTk3MTMtb2JqcyA6PSBzbWRrX3dtOTcxMy5vCiAKIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfSklWRV9XTTg3NTApICs9IHNuZC1zb2Mtaml2ZS13bTg3NTAubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19ORU8xOTczX1dNODc1MykgKz0gc25kLXNvYy1uZW8xOTczLXdtODc1My5vCkBAIC0zNyw0ICszOCw0IEBACiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX1NJTVRFQ19IRVJNRVMpICs9IHNuZC1zb2MtczNjMjR4eC1zaW10ZWMtaGVybWVzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU0lNVEVDX1RMVjMyMEFJQzIzKSArPSBzbmQtc29jLXMzYzI0eHgtc2ltdGVjLXRsdjMyMGFpYzIzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfV004NTgwKSArPSBzbmQtc29jLXNtZGs2NHh4LXdtODU4MC5vCi0KK29iai0kKENPTkZJR19TTkRfU09DX1NNREtfV005NzEzKSArPSBzbmQtc29jLXNtZGstd205NzEzLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L2xuMjQ0MHNiY19hbGM2NTAuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L2xuMjQ0MHNiY19hbGM2NTAuYwppbmRleCBkMDBkMzU5Li5mZmE5NTRmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9sbjI0NDBzYmNfYWxjNjUwLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvbG4yNDQwc2JjX2FsYzY1MC5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICIuLi9jb2RlY3MvYWM5Ny5oIgogI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2MyNHh4LWFjOTcuaCIKKyNpbmNsdWRlICJzM2MtYWM5Ny5oIgogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBsbjI0NDBzYmM7CiAKQEAgLTMzLDcgKzMzLDcgQEAKIHsKIAkubmFtZSA9ICJBQzk3IiwKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKLQkuY3B1X2RhaSA9ICZzM2MyNDQzX2FjOTdfZGFpWzBdLAorCS5jcHVfZGFpID0gJnMzY19hYzk3X2RhaVtTM0NfQUM5N19EQUlfUENNXSwKIAkuY29kZWNfZGFpID0gJmFjOTdfZGFpLAogfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZThlZDlkCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuYwpAQCAtMCwwICsxLDUxOCBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuYworICoKKyAqIEFMU0EgU29DIEF1ZGlvIExheWVyIC0gUzNDIEFDOTcgQ29udHJvbGxlciBkcml2ZXIKKyAqIAlFdm9sdmVkIGZyb20gczNjMjQ0My1hYzk3LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkCisgKiAJQXV0aG9yOiBKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKiAJQ3JlZGl0czogR3JhZW1lIEdyZWdvcnksIFNlYW4gQ2hvaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1hYzk3Lmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CisKKyNpbmNsdWRlICJzM2MtZG1hLmgiCisjaW5jbHVkZSAiczNjLWFjOTcuaCIKKworI2RlZmluZSBBQ19DTURfQUREUih4KSAoeCA8PCAxNikKKyNkZWZpbmUgQUNfQ01EX0RBVEEoeCkgKHggJiAweGZmZmYpCisKK3N0cnVjdCBzM2NfYWM5N19pbmZvIHsKKwl1bnNpZ25lZCAgICAgICAgICAgc3RhdGU7CisJc3RydWN0IGNsayAgICAgICAgICphYzk3X2NsazsKKwl2b2lkIF9faW9tZW0JICAgKnJlZ3M7CisJc3RydWN0IG11dGV4ICAgICAgIGxvY2s7CisJc3RydWN0IGNvbXBsZXRpb24gIGRvbmU7Cit9Oworc3RhdGljIHN0cnVjdCBzM2NfYWM5N19pbmZvIHMzY19hYzk3OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2NfZG1hX2NsaWVudF9vdXQgPSB7CisJLm5hbWUgPSAiQUM5NyBQQ01PdXQiCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2NfZG1hX2NsaWVudF9pbiA9IHsKKwkubmFtZSA9ICJBQzk3IFBDTUluIgorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjX2RtYV9jbGllbnRfbWljaW4gPSB7CisJLm5hbWUgPSAiQUM5NyBNaWNJbiIKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjX2FjOTdfcGNtX291dCA9IHsKKwkuY2xpZW50CQk9ICZzM2NfZG1hX2NsaWVudF9vdXQsCisJLmRtYV9zaXplCT0gNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjX2FjOTdfcGNtX2luID0geworCS5jbGllbnQJCT0gJnMzY19kbWFfY2xpZW50X2luLAorCS5kbWFfc2l6ZQk9IDQsCit9OworCitzdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzY19hYzk3X21pY19pbiA9IHsKKwkuY2xpZW50CQk9ICZzM2NfZG1hX2NsaWVudF9taWNpbiwKKwkuZG1hX3NpemUJPSA0LAorfTsKKworc3RhdGljIHZvaWQgczNjX2FjOTdfYWN0aXZhdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3KQoreworCXUzMiBhY19nbGJjdHJsLCBzdGF0OworCisJc3RhdCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJTVEFUKSAmIDB4NzsKKwlpZiAoc3RhdCA9PSBTM0NfQUM5N19HTEJTVEFUX01BSU5TVEFURV9BQ1RJVkUpCisJCXJldHVybjsgLyogUmV0dXJuIGlmIGFscmVhZHkgYWN0aXZlICovCisKKwlJTklUX0NPTVBMRVRJT04oczNjX2FjOTcuZG9uZSk7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgPSBTM0NfQUM5N19HTEJDVFJMX0FDTElOS09OOworCXdyaXRlbChhY19nbGJjdHJsLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJbXNsZWVwKDEpOworCisJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1RSQU5TRkVSREFUQUVOQUJMRTsKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCW1zbGVlcCgxKTsKKworCWFjX2dsYmN0cmwgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnMzY19hYzk3LmRvbmUsIEhaKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJBQzk3OiBVbmFibGUgdG8gYWN0aXZhdGUhIik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzM2NfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwl1bnNpZ25lZCBzaG9ydCByZWcpCit7CisJdTMyIGFjX2dsYmN0cmwsIGFjX2NvZGVjX2NtZDsKKwl1MzIgc3RhdCwgYWRkciwgZGF0YTsKKworCW11dGV4X2xvY2soJnMzY19hYzk3LmxvY2spOworCisJczNjX2FjOTdfYWN0aXZhdGUoYWM5Nyk7CisKKwlJTklUX0NPTVBMRVRJT04oczNjX2FjOTcuZG9uZSk7CisKKwlhY19jb2RlY19jbWQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKKwlhY19jb2RlY19jbWQgPSBTM0NfQUM5N19DT0RFQ19DTURfUkVBRCB8IEFDX0NNRF9BRERSKHJlZyk7CisJd3JpdGVsKGFjX2NvZGVjX2NtZCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7CisKKwl1ZGVsYXkoNTApOworCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfQ09ERUNSRUFEWUlFOworCXdyaXRlbChhY19nbGJjdHJsLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmczNjX2FjOTcuZG9uZSwgSFopKQorCQlwcmludGsoS0VSTl9FUlIgIkFDOTc6IFVuYWJsZSB0byByZWFkISIpOworCisJc3RhdCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19TVEFUKTsKKwlhZGRyID0gKHN0YXQgPj4gMTYpICYgMHg3ZjsKKwlkYXRhID0gKHN0YXQgJiAweGZmZmYpOworCisJaWYgKGFkZHIgIT0gcmVnKQorCQlwcmludGsoS0VSTl9FUlIgInMzYy1hYzk3OiByZXEgYWRkciA9ICUwMngsIHJlcCBhZGRyID0gJTAyeFxuIiwgcmVnLCBhZGRyKTsKKworCW11dGV4X3VubG9jaygmczNjX2FjOTcubG9jayk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19hYzk3X3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLAorCXVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwl1MzIgYWNfZ2xiY3RybCwgYWNfY29kZWNfY21kOworCisJbXV0ZXhfbG9jaygmczNjX2FjOTcubG9jayk7CisKKwlzM2NfYWM5N19hY3RpdmF0ZShhYzk3KTsKKworCUlOSVRfQ09NUExFVElPTihzM2NfYWM5Ny5kb25lKTsKKworCWFjX2NvZGVjX2NtZCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOworCWFjX2NvZGVjX2NtZCA9IEFDX0NNRF9BRERSKHJlZykgfCBBQ19DTURfREFUQSh2YWwpOworCXdyaXRlbChhY19jb2RlY19jbWQsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOworCisJdWRlbGF5KDUwKTsKKworCWFjX2dsYmN0cmwgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnMzY19hYzk3LmRvbmUsIEhaKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJBQzk3OiBVbmFibGUgdG8gd3JpdGUhIik7CisKKwlhY19jb2RlY19jbWQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKKwlhY19jb2RlY19jbWQgfD0gUzNDX0FDOTdfQ09ERUNfQ01EX1JFQUQ7CisJd3JpdGVsKGFjX2NvZGVjX2NtZCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7CisKKwltdXRleF91bmxvY2soJnMzY19hYzk3LmxvY2spOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWM5N19jb2xkX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwl3cml0ZWwoUzNDX0FDOTdfR0xCQ1RSTF9DT0xEUkVTRVQsCisJCQlzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJbXNsZWVwKDEpOworCisJd3JpdGVsKDAsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwltc2xlZXAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19hYzk3X3dhcm1fcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQoreworCXUzMiBzdGF0OworCisJc3RhdCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJTVEFUKSAmIDB4NzsKKwlpZiAoc3RhdCA9PSBTM0NfQUM5N19HTEJTVEFUX01BSU5TVEFURV9BQ1RJVkUpCisJCXJldHVybjsgLyogUmV0dXJuIGlmIGFscmVhZHkgYWN0aXZlICovCisKKwl3cml0ZWwoUzNDX0FDOTdfR0xCQ1RSTF9XQVJNUkVTRVQsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwltc2xlZXAoMSk7CisKKwl3cml0ZWwoMCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCW1zbGVlcCgxKTsKKworCXMzY19hYzk3X2FjdGl2YXRlKGFjOTcpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgczNjX2FjOTdfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgYWNfZ2xiY3RybCwgYWNfZ2xic3RhdDsKKworCWFjX2dsYnN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCU1RBVCk7CisKKwlpZiAoYWNfZ2xic3RhdCAmIFMzQ19BQzk3X0dMQlNUQVRfQ09ERUNSRUFEWSkgeworCisJCWFjX2dsYmN0cmwgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfQ09ERUNSRUFEWUlFOworCQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCisJCWNvbXBsZXRlKCZzM2NfYWM5Ny5kb25lKTsKKwl9CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgfD0gKDE8PDMwKTsgLyogQ2xlYXIgaW50ZXJydXB0ICovCisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgc29jX2FjOTdfb3BzID0geworCS5yZWFkICAgICAgID0gczNjX2FjOTdfcmVhZCwKKwkud3JpdGUgICAgICA9IHMzY19hYzk3X3dyaXRlLAorCS53YXJtX3Jlc2V0ID0gczNjX2FjOTdfd2FybV9yZXNldCwKKwkucmVzZXQgICAgICA9IHMzY19hYzk3X2NvbGRfcmVzZXQsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2FjOTdfb3BzKTsKKworc3RhdGljIGludCBzM2NfYWM5N19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZzM2NfYWM5N19wY21fb3V0OworCWVsc2UKKwkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjX2FjOTdfcGNtX2luOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjX2FjOTdfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwl1MzIgYWNfZ2xiY3RybDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqKQorCQkgIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSktPmNoYW5uZWw7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfUENNSU5UTV9NQVNLOworCWVsc2UKKwkJYWNfZ2xiY3RybCAmPSB+UzNDX0FDOTdfR0xCQ1RSTF9QQ01PVVRUTV9NQVNLOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkKKwkJCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9QQ01JTlRNX0RNQTsKKwkJZWxzZQorCQkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1BDTU9VVFRNX0RNQTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJYnJlYWs7CisJfQorCisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCXMzYzI0MTBfZG1hX2N0cmwoY2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVEFSVEVEKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19hYzk3X2h3X21pY19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXJldHVybiAtRU5PREVWOworCWVsc2UKKwkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjX2FjOTdfbWljX2luOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjX2FjOTdfbWljX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgIGludCBjbWQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXUzMiBhY19nbGJjdHJsOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgY2hhbm5lbCA9ICgoc3RydWN0IHMzY19kbWFfcGFyYW1zICopCisJCSAgcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhKS0+Y2hhbm5lbDsKKworCWFjX2dsYmN0cmwgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJYWNfZ2xiY3RybCAmPSB+UzNDX0FDOTdfR0xCQ1RSTF9NSUNJTlRNX01BU0s7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfTUlDSU5UTV9ETUE7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWJyZWFrOworCX0KKworCXdyaXRlbChhY19nbGJjdHJsLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisKKwlzM2MyNDEwX2RtYV9jdHJsKGNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfU1RBUlRFRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjX2FjOTdfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gczNjX2FjOTdfaHdfcGFyYW1zLAorCS50cmlnZ2VyCT0gczNjX2FjOTdfdHJpZ2dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzY19hYzk3X21pY19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBzM2NfYWM5N19od19taWNfcGFyYW1zLAorCS50cmlnZ2VyCT0gczNjX2FjOTdfbWljX3RyaWdnZXIsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgczNjX2FjOTdfZGFpW10gPSB7CisJW1MzQ19BQzk3X0RBSV9QQ01dID0geworCQkubmFtZSA9CSJzM2MtYWM5NyIsCisJCS5pZCA9IFMzQ19BQzk3X0RBSV9QQ00sCisJCS5hYzk3X2NvbnRyb2wgPSAxLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAorCQkub3BzID0gJnMzY19hYzk3X2RhaV9vcHMsCisJfSwKKwlbUzNDX0FDOTdfREFJX01JQ10gPSB7CisJCS5uYW1lID0gInMzYy1hYzk3LW1pYyIsCisJCS5pZCA9IFMzQ19BQzk3X0RBSV9NSUMsCisJCS5hYzk3X2NvbnRyb2wgPSAxLAorCQkuY2FwdHVyZSA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IE1pYyBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDEsCisJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAorCQkub3BzID0gJnMzY19hYzk3X21pY19kYWlfb3BzLAorCX0sCit9OworRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FjOTdfZGFpKTsKKworc3RhdGljIF9fZGV2aW5pdCBpbnQgczNjX2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXMsICpkbWF0eF9yZXMsICpkbWFyeF9yZXMsICpkbWFtaWNfcmVzLCAqaXJxX3JlczsKKwlzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhICphYzk3X3BkYXRhOworCWludCByZXQ7CisKKwlhYzk3X3BkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFhYzk3X3BkYXRhIHx8ICFhYzk3X3BkYXRhLT5jZmdfZ3BpbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjZmdfZ3BpbyBjYWxsYmFjayBub3QgcHJvdmlkZWQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgZm9yIGF2YWlsYWJpbGl0eSBvZiBuZWNlc3NhcnkgcmVzb3VyY2UgKi8KKwlkbWF0eF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmICghZG1hdHhfcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgQUM5Ny1UWCBkbWEgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWRtYXJ4X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CisJaWYgKCFkbWFyeF9yZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBBQzk3LVJYIGRtYSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJZG1hbWljX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMik7CisJaWYgKCFkbWFtaWNfcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgQUM5Ny1NSUMgZG1hIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbV9yZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCByZWdpc3RlciByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcnFfcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkFDOTcgSVJRIG5vdCBwcm92aWRlZCFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUobWVtX3JlcyksICJzM2MtYWM5NyIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IHJlZ2lzdGVyIHJlZ2lvblxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJczNjX2FjOTdfcGNtX291dC5jaGFubmVsID0gZG1hdHhfcmVzLT5zdGFydDsKKwlzM2NfYWM5N19wY21fb3V0LmRtYV9hZGRyID0gbWVtX3Jlcy0+c3RhcnQgKyBTM0NfQUM5N19QQ01fREFUQTsKKwlzM2NfYWM5N19wY21faW4uY2hhbm5lbCA9IGRtYXJ4X3Jlcy0+c3RhcnQ7CisJczNjX2FjOTdfcGNtX2luLmRtYV9hZGRyID0gbWVtX3Jlcy0+c3RhcnQgKyBTM0NfQUM5N19QQ01fREFUQTsKKwlzM2NfYWM5N19taWNfaW4uY2hhbm5lbCA9IGRtYW1pY19yZXMtPnN0YXJ0OworCXMzY19hYzk3X21pY19pbi5kbWFfYWRkciA9IG1lbV9yZXMtPnN0YXJ0ICsgUzNDX0FDOTdfTUlDX0RBVEE7CisKKwlpbml0X2NvbXBsZXRpb24oJnMzY19hYzk3LmRvbmUpOworCW11dGV4X2luaXQoJnMzY19hYzk3LmxvY2spOworCisJczNjX2FjOTcucmVncyA9IGlvcmVtYXAobWVtX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtX3JlcykpOworCWlmIChzM2NfYWM5Ny5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGlvcmVtYXAgcmVnaXN0ZXIgcmVnaW9uXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycjE7CisJfQorCisJczNjX2FjOTcuYWM5N19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhYzk3Iik7CisJaWYgKElTX0VSUihzM2NfYWM5Ny5hYzk3X2NsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiczNjLWFjOTcgZmFpbGVkIHRvIGdldCBhYzk3X2Nsb2NrXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnIyOworCX0KKwljbGtfZW5hYmxlKHMzY19hYzk3LmFjOTdfY2xrKTsKKworCWlmIChhYzk3X3BkYXRhLT5jZmdfZ3BpbyhwZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gY29uZmlndXJlIGdwaW9cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjM7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxX3Jlcy0+c3RhcnQsIHMzY19hYzk3X2lycSwKKwkJCQkJSVJRRl9ESVNBQkxFRCwgIkFDOTciLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInMzYy1hYzk3OiBpbnRlcnJ1cHQgcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJZ290byBlcnI0OworCX0KKworCXMzY19hYzk3X2RhaVtTM0NfQUM5N19EQUlfUENNXS5kZXYgPSAmcGRldi0+ZGV2OworCXMzY19hYzk3X2RhaVtTM0NfQUM5N19EQUlfTUlDXS5kZXYgPSAmcGRldi0+ZGV2OworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHMzY19hYzk3X2RhaSwgQVJSQVlfU0laRShzM2NfYWM5N19kYWkpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjU7CisKKwlyZXR1cm4gMDsKKworZXJyNToKKwlmcmVlX2lycShpcnFfcmVzLT5zdGFydCwgTlVMTCk7CitlcnI0OgorZXJyMzoKKwljbGtfZGlzYWJsZShzM2NfYWM5Ny5hYzk3X2Nsayk7CisJY2xrX3B1dChzM2NfYWM5Ny5hYzk3X2Nsayk7CitlcnIyOgorCWlvdW5tYXAoczNjX2FjOTcucmVncyk7CitlcnIxOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19kZXZleGl0IGludCBzM2NfYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXMsICppcnFfcmVzOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoczNjX2FjOTdfZGFpLCBBUlJBWV9TSVpFKHMzY19hYzk3X2RhaSkpOworCisJaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKGlycV9yZXMpCisJCWZyZWVfaXJxKGlycV9yZXMtPnN0YXJ0LCBOVUxMKTsKKworCWNsa19kaXNhYmxlKHMzY19hYzk3LmFjOTdfY2xrKTsKKwljbGtfcHV0KHMzY19hYzk3LmFjOTdfY2xrKTsKKworCWlvdW5tYXAoczNjX2FjOTcucmVncyk7CisKKwltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAobWVtX3JlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NfYWM5N19kcml2ZXIgPSB7CisJLnByb2JlICA9IHMzY19hYzk3X3Byb2JlLAorCS5yZW1vdmUgPSBzM2NfYWM5N19yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiczNjLWFjOTciLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjX2FjOTdfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY19hYzk3X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzM2NfYWM5N19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHMzY19hYzk3X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjX2FjOTdfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHMzY19hYzk3X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2gsIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBQzk3IGRyaXZlciBmb3IgdGhlIFNhbXN1bmcgU29DIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5oIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzgxOTgzCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuaApAQCAtMCwwICsxLDIzIEBACisvKiBzb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5oCisgKgorICogQUxTQSBTb0MgQXVkaW8gTGF5ZXIgLSBTM0MgQUM5NyBDb250cm9sbGVyIGRyaXZlcgorICogCUV2b2x2ZWQgZnJvbSBzM2MyNDQzLWFjOTcuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiBMdGQKKyAqIAlBdXRob3I6IEphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KKyAqIAlDcmVkaXRzOiBHcmFlbWUgR3JlZ29yeSwgU2VhbiBDaG9pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fUzNDX0FDOTdfSF8KKyNkZWZpbmUgX19TM0NfQUM5N19IXworCisjZGVmaW5lIFMzQ19BQzk3X0RBSV9QQ00gMAorI2RlZmluZSBTM0NfQUM5N19EQUlfTUlDIDEKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBzM2NfYWM5N19kYWlbXTsKKworI2VuZGlmIC8qIF9fUzNDX0FDOTdfSF8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uYwppbmRleCA5ZTYxYTdjLi5hOThmNDBjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtcGNtLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjLXBjbS5jCkBAIC0yMjksOCArMjI5LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbS0+bG9jaywgZmxhZ3MpOwogCi0JZGV2X2RiZyhwY20tPmRldiwgIlBDTVNPVVJDRV9DTEstJWx1IFNDTEs9JXVmcyBcCi0JCQkJU0NMS19ESVY9JWQgU1lOQ19ESVY9JWRcbiIsCisJZGV2X2RiZyhwY20tPmRldiwgIlBDTVNPVVJDRV9DTEstJWx1IFNDTEs9JXVmcyBTQ0xLX0RJVj0lZCBTWU5DX0RJVj0lZFxuIiwKIAkJCQljbGtfZ2V0X3JhdGUoY2xrKSwgcGNtLT5zY2xrX3Blcl9mcywKIAkJCQlzY2xrX2Rpdiwgc3luY19kaXYpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTkxZTNhLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMyICswLDAgQEAKLS8qCi0gKiBzM2MyNDQzLWFjOTcuYyAgLS0gIEFMU0EgU29jIEF1ZGlvIExheWVyCi0gKgotICogKGMpIDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEdyYWVtZSBHcmVnb3J5IGdyYWVtZS5ncmVnb3J5QHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIFNlYW4gQ2hvaSA8c2g0MjguY2hvaUBzYW1zdW5nLmNvbT4KLSAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLQotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1hYzk3Lmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9kbWEuaD4KLQotI2luY2x1ZGUgInMzYy1kbWEuaCIKLSNpbmNsdWRlICJzM2MyNHh4LWFjOTcuaCIKLQotc3RydWN0IHMzYzI0eHhfYWM5N19pbmZvIHsKLQl2b2lkIF9faW9tZW0JKnJlZ3M7Ci0Jc3RydWN0IGNsawkqYWM5N19jbGs7Ci19Owotc3RhdGljIHN0cnVjdCBzM2MyNHh4X2FjOTdfaW5mbyBzM2MyNHh4X2FjOTc7Ci0KLXN0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oYWM5N19jb21wbGV0aW9uKTsKLXN0YXRpYyB1MzIgY29kZWNfcmVhZHk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGFjOTdfbXV0ZXgpOwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgczNjMjQ0M19hYzk3X3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LAotCXVuc2lnbmVkIHNob3J0IHJlZykKLXsKLQl1MzIgYWNfZ2xiY3RybDsKLQl1MzIgYWNfY29kZWNfY21kOwotCXUzMiBzdGF0LCBhZGRyLCBkYXRhOwotCi0JbXV0ZXhfbG9jaygmYWM5N19tdXRleCk7Ci0KLQljb2RlY19yZWFkeSA9IFMzQ19BQzk3X0dMQlNUQVRfQ09ERUNSRUFEWTsKLQlhY19jb2RlY19jbWQgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7Ci0JYWNfY29kZWNfY21kID0gUzNDX0FDOTdfQ09ERUNfQ01EX1JFQUQgfCBBQ19DTURfQUREUihyZWcpOwotCXdyaXRlbChhY19jb2RlY19jbWQsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKLQotCXVkZWxheSg1MCk7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfQ09ERUNSRUFEWUlFOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmYWM5N19jb21wbGV0aW9uKTsKLQotCXN0YXQgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X1NUQVQpOwotCWFkZHIgPSAoc3RhdCA+PiAxNikgJiAweDdmOwotCWRhdGEgPSAoc3RhdCAmIDB4ZmZmZik7Ci0KLQlpZiAoYWRkciAhPSByZWcpCi0JCXByaW50ayhLRVJOX0VSUiAiczNjMjR4eC1hYzk3OiByZXEgYWRkciA9ICUwMngsIgotCQkJCSIgcmVwIGFkZHIgPSAlMDJ4XG4iLCByZWcsIGFkZHIpOwotCi0JbXV0ZXhfdW5sb2NrKCZhYzk3X211dGV4KTsKLQotCXJldHVybiAodW5zaWduZWQgc2hvcnQpZGF0YTsKLX0KLQotc3RhdGljIHZvaWQgczNjMjQ0M19hYzk3X3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnLAotCXVuc2lnbmVkIHNob3J0IHZhbCkKLXsKLQl1MzIgYWNfZ2xiY3RybDsKLQl1MzIgYWNfY29kZWNfY21kOwotCi0JbXV0ZXhfbG9jaygmYWM5N19tdXRleCk7Ci0KLQljb2RlY19yZWFkeSA9IFMzQ19BQzk3X0dMQlNUQVRfQ09ERUNSRUFEWTsKLQlhY19jb2RlY19jbWQgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7Ci0JYWNfY29kZWNfY21kID0gQUNfQ01EX0FERFIocmVnKSB8IEFDX0NNRF9EQVRBKHZhbCk7Ci0Jd3JpdGVsKGFjX2NvZGVjX2NtZCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCi0JdWRlbGF5KDUwKTsKLQotCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0KLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhYzk3X2NvbXBsZXRpb24pOwotCi0JYWNfY29kZWNfY21kID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCWFjX2NvZGVjX2NtZCB8PSBTM0NfQUM5N19DT0RFQ19DTURfUkVBRDsKLQl3cml0ZWwoYWNfY29kZWNfY21kLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7Ci0KLQltdXRleF91bmxvY2soJmFjOTdfbXV0ZXgpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0NDNfYWM5N193YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKLXsKLQl1MzIgYWNfZ2xiY3RybDsKLQotCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCWFjX2dsYmN0cmwgPSBTM0NfQUM5N19HTEJDVFJMX1dBUk1SRVNFVDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsID0gMDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0NDNfYWM5N19jb2xkX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKLXsKLQl1MzIgYWNfZ2xiY3RybDsKLQotCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCWFjX2dsYmN0cmwgPSBTM0NfQUM5N19HTEJDVFJMX0NPTERSRVNFVDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsID0gMDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9BQ0xJTktPTjsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfVFJBTlNGRVJEQVRBRU5BQkxFOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCW1zbGVlcCgxKTsKLQotCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9QQ01PVVRUTV9ETUEgfAotCQlTM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fRE1BIHwgUzNDX0FDOTdfR0xCQ1RSTF9NSUNJTlRNX0RNQTsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHMzYzI0NDNfYWM5N19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWludCBzdGF0dXM7Ci0JdTMyIGFjX2dsYmN0cmw7Ci0KLQlzdGF0dXMgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQlNUQVQpICYgY29kZWNfcmVhZHk7Ci0KLQlpZiAoc3RhdHVzKSB7Ci0JCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKLQkJd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JCWNvbXBsZXRlKCZhYzk3X2NvbXBsZXRpb24pOwotCX0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0cnVjdCBzbmRfYWM5N19idXNfb3BzIHNvY19hYzk3X29wcyA9IHsKLQkucmVhZAk9IHMzYzI0NDNfYWM5N19yZWFkLAotCS53cml0ZQk9IHMzYzI0NDNfYWM5N193cml0ZSwKLQkud2FybV9yZXNldAk9IHMzYzI0NDNfYWM5N193YXJtX3Jlc2V0LAotCS5yZXNldAk9IHMzYzI0NDNfYWM5N19jb2xkX3Jlc2V0LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjMjQ0M19kbWFfY2xpZW50X291dCA9IHsKLQkubmFtZSA9ICJBQzk3IFBDTSBTdGVyZW8gb3V0IgotfTsKLQotc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjMjQ0M19kbWFfY2xpZW50X2luID0gewotCS5uYW1lID0gIkFDOTcgUENNIFN0ZXJlbyBpbiIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0NDNfZG1hX2NsaWVudF9taWNpbiA9IHsKLQkubmFtZSA9ICJBQzk3IE1pYyBNb25vIGluIgotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2MyNDQzX2FjOTdfcGNtX3N0ZXJlb19vdXQgPSB7Ci0JLmNsaWVudAkJPSAmczNjMjQ0M19kbWFfY2xpZW50X291dCwKLQkuY2hhbm5lbAk9IERNQUNIX1BDTV9PVVQsCi0JLmRtYV9hZGRyCT0gUzNDMjQ0MF9QQV9BQzk3ICsgUzNDX0FDOTdfUENNX0RBVEEsCi0JLmRtYV9zaXplCT0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9faW4gPSB7Ci0JLmNsaWVudAkJPSAmczNjMjQ0M19kbWFfY2xpZW50X2luLAotCS5jaGFubmVsCT0gRE1BQ0hfUENNX0lOLAotCS5kbWFfYWRkcgk9IFMzQzI0NDBfUEFfQUM5NyArIFMzQ19BQzk3X1BDTV9EQVRBLAotCS5kbWFfc2l6ZQk9IDQsCi19OwotCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzI0NDNfYWM5N19taWNfbW9ub19pbiA9IHsKLQkuY2xpZW50CQk9ICZzM2MyNDQzX2RtYV9jbGllbnRfbWljaW4sCi0JLmNoYW5uZWwJPSBETUFDSF9NSUNfSU4sCi0JLmRtYV9hZGRyCT0gUzNDMjQ0MF9QQV9BQzk3ICsgUzNDX0FDOTdfTUlDX0RBVEEsCi0JLmRtYV9zaXplCT0gNCwKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQ0M19hYzk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlpbnQgcmV0OwotCXUzMiBhY19nbGJjdHJsOwotCi0JczNjMjR4eF9hYzk3LnJlZ3MgPSBpb3JlbWFwKFMzQzI0NDBfUEFfQUM5NywgMHgxMDApOwotCWlmIChzM2MyNHh4X2FjOTcucmVncyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOWElPOwotCi0JczNjMjR4eF9hYzk3LmFjOTdfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiYWM5NyIpOwotCWlmIChzM2MyNHh4X2FjOTcuYWM5N19jbGsgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInMzYzI0NDMtYWM5NyBmYWlsZWQgdG8gZ2V0IGFjOTdfY2xvY2tcbiIpOwotCQlpb3VubWFwKHMzYzI0eHhfYWM5Ny5yZWdzKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWNsa19lbmFibGUoczNjMjR4eF9hYzk3LmFjOTdfY2xrKTsKLQotCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUwLCBTM0MyNDQzX0dQRTBfQUNfblJFU0VUKTsKLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMSwgUzNDMjQ0M19HUEUxX0FDX1NZTkMpOwotCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUyLCBTM0MyNDQzX0dQRTJfQUNfQklUQ0xLKTsKLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMywgUzNDMjQ0M19HUEUzX0FDX1NESSk7Ci0JczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTQsIFMzQzI0NDNfR1BFNF9BQ19TRE8pOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JYWNfZ2xiY3RybCA9IFMzQ19BQzk3X0dMQkNUUkxfQ09MRFJFU0VUOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCW1zbGVlcCgxKTsKLQotCWFjX2dsYmN0cmwgPSAwOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCW1zbGVlcCgxKTsKLQotCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCWFjX2dsYmN0cmwgPSBTM0NfQUM5N19HTEJDVFJMX0FDTElOS09OOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCW1zbGVlcCgxKTsKLQotCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9UUkFOU0ZFUkRBVEFFTkFCTEU7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfUzNDMjQ0eF9BQzk3LCBzM2MyNDQzX2FjOTdfaXJxLAotCQlJUlFGX0RJU0FCTEVELCAiQUM5NyIsIE5VTEwpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiczNjMjR4eC1hYzk3OiBpbnRlcnJ1cHQgcmVxdWVzdCBmYWlsZWQuXG4iKTsKLQkJY2xrX2Rpc2FibGUoczNjMjR4eF9hYzk3LmFjOTdfY2xrKTsKLQkJY2xrX3B1dChzM2MyNHh4X2FjOTcuYWM5N19jbGspOwotCQlpb3VubWFwKHMzYzI0eHhfYWM5Ny5yZWdzKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgczNjMjQ0M19hYzk3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCWZyZWVfaXJxKElSUV9TM0MyNDR4X0FDOTcsIE5VTEwpOwotCWNsa19kaXNhYmxlKHMzYzI0eHhfYWM5Ny5hYzk3X2Nsayk7Ci0JY2xrX3B1dChzM2MyNHh4X2FjOTcuYWM5N19jbGspOwotCWlvdW5tYXAoczNjMjR4eF9hYzk3LnJlZ3MpOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZzM2MyNDQzX2FjOTdfcGNtX3N0ZXJlb19vdXQ7Ci0JZWxzZQotCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZzM2MyNDQzX2FjOTdfcGNtX3N0ZXJlb19pbjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAotCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXUzMiBhY19nbGJjdHJsOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlpbnQgY2hhbm5lbCA9ICgoc3RydWN0IHMzY19kbWFfcGFyYW1zICopCi0JCSAgcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhKS0+Y2hhbm5lbDsKLQotCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCi0JCQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNSU5UTV9ETUE7Ci0JCWVsc2UKLQkJCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9QQ01PVVRUTV9ETUE7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQotCQkJYWNfZ2xiY3RybCAmPSB+UzNDX0FDOTdfR0xCQ1RSTF9QQ01JTlRNX01BU0s7Ci0JCWVsc2UKLQkJCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fTUFTSzsKLQkJYnJlYWs7Ci0JfQotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0JczNjMjQxMF9kbWFfY3RybChjaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJURUQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQ0M19hYzk3X2h3X21pY19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXJldHVybiAtRU5PREVWOwotCWVsc2UKLQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjQ0M19hYzk3X21pY19tb25vX2luOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQ0M19hYzk3X21pY190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgICBpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQl1MzIgYWNfZ2xiY3RybDsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0JaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqKQotCQkgIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSktPmNoYW5uZWw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNSU5UTV9ETUE7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fTUFTSzsKLQl9Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0KLQlzM2MyNDEwX2RtYV9jdHJsKGNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfU1RBUlRFRCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBzM2MyNDQzX0FDOTdfUkFURVMgKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xMTAyNSB8XAotCQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgXAotCQlTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwKQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2MyNDQzX2FjOTdfZGFpX29wcyA9IHsKLQkuaHdfcGFyYW1zCT0gczNjMjQ0M19hYzk3X2h3X3BhcmFtcywKLQkudHJpZ2dlcgk9IHMzYzI0NDNfYWM5N190cmlnZ2VyLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQ0M19hYzk3X21pY19kYWlfb3BzID0gewotCS5od19wYXJhbXMJPSBzM2MyNDQzX2FjOTdfaHdfbWljX3BhcmFtcywKLQkudHJpZ2dlcgk9IHMzYzI0NDNfYWM5N19taWNfdHJpZ2dlciwKLX07Ci0KLXN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDQzX2FjOTdfZGFpW10gPSB7Ci17Ci0JLm5hbWUgPSAiczNjMjQ0My1hYzk3IiwKLQkuaWQgPSAwLAotCS5hYzk3X2NvbnRyb2wgPSAxLAotCS5wcm9iZSA9IHMzYzI0NDNfYWM5N19wcm9iZSwKLQkucmVtb3ZlID0gczNjMjQ0M19hYzk3X3JlbW92ZSwKLQkucGxheWJhY2sgPSB7Ci0JCS5zdHJlYW1fbmFtZSA9ICJBQzk3IFBsYXliYWNrIiwKLQkJLmNoYW5uZWxzX21pbiA9IDIsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBzM2MyNDQzX0FDOTdfUkFURVMsCi0JCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkuY2FwdHVyZSA9IHsKLQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQ2FwdHVyZSIsCi0JCS5jaGFubmVsc19taW4gPSAyLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gczNjMjQ0M19BQzk3X1JBVEVTLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9ICZzM2MyNDQzX2FjOTdfZGFpX29wcywKLX0sCi17Ci0JLm5hbWUgPSAicHhhMnh4LWFjOTctbWljIiwKLQkuaWQgPSAxLAotCS5hYzk3X2NvbnRyb2wgPSAxLAotCS5jYXB0dXJlID0gewotCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBNaWMgQ2FwdHVyZSIsCi0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMSwKLQkJLnJhdGVzID0gczNjMjQ0M19BQzk3X1JBVEVTLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9ICZzM2MyNDQzX2FjOTdfbWljX2RhaV9vcHMsCi19LAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKHMzYzI0NDNfYWM5N19kYWkpOwotRVhQT1JUX1NZTUJPTF9HUEwoc29jX2FjOTdfb3BzKTsKLQotc3RhdGljIGludCBfX2luaXQgczNjMjQ0M19hYzk3X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHMzYzI0NDNfYWM5N19kYWksCi0JCQkJICAgICBBUlJBWV9TSVpFKHMzYzI0NDNfYWM5N19kYWkpKTsKLX0KLW1vZHVsZV9pbml0KHMzYzI0NDNfYWM5N19pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IHMzYzI0NDNfYWM5N19leGl0KHZvaWQpCi17Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoczNjMjQ0M19hYzk3X2RhaSwKLQkJCQlBUlJBWV9TSVpFKHMzYzI0NDNfYWM5N19kYWkpKTsKLX0KLW1vZHVsZV9leGl0KHMzYzI0NDNfYWM5N19leGl0KTsKLQotCi1NT0RVTEVfQVVUSE9SKCJHcmFlbWUgR3JlZ29yeSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBQzk3IGRyaXZlciBmb3IgdGhlIFNhbXN1bmcgczNjMjQ0MyBjaGlwIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWFjOTcuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtYWM5Ny5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTZmOTQxLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtYWM5Ny5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIHMzYzI0eHgtYWM5Ny5jICAtLSAgQUxTQSBTb2MgQXVkaW8gTGF5ZXIKLSAqCi0gKiAoYykgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBHcmFlbWUgR3JlZ29yeQotICogICAgICAgICBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgUmV2aXNpb24gaGlzdG9yeQotICogICAgMTB0aCBOb3YgMjAwNiAgIEluaXRpYWwgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIFMzQzI0WFhBQzk3X0hfCi0jZGVmaW5lIFMzQzI0WFhBQzk3X0hfCi0KLSNkZWZpbmUgQUNfQ01EX0FERFIoeCkgKHggPDwgMTYpCi0jZGVmaW5lIEFDX0NNRF9EQVRBKHgpICh4ICYgMHhmZmZmKQotCi1leHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHMzYzI0NDNfYWM5N19kYWlbXTsKLQotI2VuZGlmIC8qUzNDMjRYWEFDOTdfSF8qLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKaW5kZXggY2M3ZWRiNS4uOTNlZDNhYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCkBAIC0xNSwxNiArMTUsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CkBAIC0zOCw2ICszMiwxMSBAQAogI2luY2x1ZGUgInMzYy1kbWEuaCIKICNpbmNsdWRlICJzM2M2NHh4LWkycy5oIgogCisvKiBUaGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0byBtYXhpbXVtIG9mIHRoZSB0b3RhbCBudW1iZXIKKyAqIG9mIEkyU3YzIGNvbnRyb2xsZXJzIHRoYXQgYW55IHN1cHBvcnRlZCBTb0MgaGFzLgorICovCisjZGVmaW5lIE1BWF9JMlNWMwkyCisKIHN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzY0eHhfZG1hX2NsaWVudF9vdXQgPSB7CiAJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIG91dCIKIH07CkBAIC00NiwzNyArNDUsMTIgQEAKIAkubmFtZQkJPSAiSTJTIFBDTSBTdGVyZW8gaW4iCiB9OwogCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9fb3V0WzJdID0gewotCVswXSA9IHsKLQkJLmNoYW5uZWwJPSBETUFDSF9JMlMwX09VVCwKLQkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X291dCwKLQkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNUWEQsCi0JCS5kbWFfc2l6ZQk9IDQsCi0JfSwKLQlbMV0gPSB7Ci0JCS5jaGFubmVsCT0gRE1BQ0hfSTJTMV9PVVQsCi0JCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQsCi0JCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTVFhELAotCQkuZG1hX3NpemUJPSA0LAotCX0sCi19Oworc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2M2NHh4X2kyc19wY21fc3RlcmVvX291dFtNQVhfSTJTVjNdOworc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2M2NHh4X2kyc19wY21fc3RlcmVvX2luW01BWF9JMlNWM107CitzdGF0aWMgc3RydWN0IHMzY19pMnN2Ml9pbmZvIHMzYzY0eHhfaTJzW01BWF9JMlNWM107CiAKLXN0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pblsyXSA9IHsKLQlbMF0gPSB7Ci0JCS5jaGFubmVsCT0gRE1BQ0hfSTJTMF9JTiwKLQkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X2luLAotCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzAgKyBTM0MyNDEyX0lJU1JYRCwKLQkJLmRtYV9zaXplCT0gNCwKLQl9LAotCVsxXSA9IHsKLQkJLmNoYW5uZWwJPSBETUFDSF9JMlMxX0lOLAotCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfaW4sCi0JCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTUlhELAotCQkuZG1hX3NpemUJPSA0LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHMzY19pMnN2Ml9pbmZvIHMzYzY0eHhfaTJzWzJdOworc3RydWN0IHNuZF9zb2NfZGFpIHMzYzY0eHhfaTJzX2RhaVtNQVhfSTJTVjNdOworRVhQT1JUX1NZTUJPTF9HUEwoczNjNjR4eF9pMnNfZGFpKTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjX2kyc3YyX2luZm8gKnRvX2luZm8oc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQogewpAQCAtMTY5LDU1ICsxNDMsMTMgQEAKIAkuc2V0X3N5c2Nsawk9IHMzYzY0eHhfaTJzX3NldF9zeXNjbGssCQogfTsKIAotc3RydWN0IHNuZF9zb2NfZGFpIHMzYzY0eHhfaTJzX2RhaVtdID0gewotCXsKLQkJLm5hbWUJCT0gInMzYzY0eHgtaTJzIiwKLQkJLmlkCQk9IDAsCi0JCS5wcm9iZQkJPSBzM2M2NHh4X2kyc19wcm9iZSwKLQkJLnBsYXliYWNrID0gewotCQkJLmNoYW5uZWxzX21pbgk9IDIsCi0JCQkuY2hhbm5lbHNfbWF4CT0gMiwKLQkJCS5yYXRlcwkJPSBTM0M2NFhYX0kyU19SQVRFUywKLQkJCS5mb3JtYXRzCT0gUzNDNjRYWF9JMlNfRk1UUywKLQkJfSwKLQkJLmNhcHR1cmUgPSB7Ci0JCQkgLmNoYW5uZWxzX21pbgk9IDIsCi0JCQkgLmNoYW5uZWxzX21heAk9IDIsCi0JCQkgLnJhdGVzCQk9IFMzQzY0WFhfSTJTX1JBVEVTLAotCQkJIC5mb3JtYXRzCT0gUzNDNjRYWF9JMlNfRk1UUywKLQkJIH0sCi0JCS5vcHMgPSAmczNjNjR4eF9pMnNfZGFpX29wcywKLQkJLnN5bW1ldHJpY19yYXRlcyA9IDEsCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJzM2M2NHh4LWkycyIsCi0JCS5pZAkJPSAxLAotCQkucHJvYmUJCT0gczNjNjR4eF9pMnNfcHJvYmUsCi0JCS5wbGF5YmFjayA9IHsKLQkJCS5jaGFubmVsc19taW4JPSAyLAotCQkJLmNoYW5uZWxzX21heAk9IDIsCi0JCQkucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCQkuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCi0JCX0sCi0JCS5jYXB0dXJlID0gewotCQkJIC5jaGFubmVsc19taW4JPSAyLAotCQkJIC5jaGFubmVsc19tYXgJPSAyLAotCQkJIC5yYXRlcwkJPSBTM0M2NFhYX0kyU19SQVRFUywKLQkJCSAuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCi0JCSB9LAotCQkub3BzID0gJnMzYzY0eHhfaTJzX2RhaV9vcHMsCi0JCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAotCX0sCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoczNjNjR4eF9pMnNfZGFpKTsKLQogc3RhdGljIF9fZGV2aW5pdCBpbnQgczNjNjR4eF9paXNfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHMzY19pMnN2Ml9pbmZvICppMnM7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpkYWk7CiAJaW50IHJldDsKIAotCWlmIChwZGV2LT5pZCA+PSBBUlJBWV9TSVpFKHMzYzY0eHhfaTJzKSkgeworCWlmIChwZGV2LT5pZCA+PSBNQVhfSTJTVjMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaWQgJWQgb3V0IG9mIHJhbmdlXG4iLCBwZGV2LT5pZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIyNSwxMCArMTU3LDQwIEBACiAJaTJzID0gJnMzYzY0eHhfaTJzW3BkZXYtPmlkXTsKIAlkYWkgPSAmczNjNjR4eF9pMnNfZGFpW3BkZXYtPmlkXTsKIAlkYWktPmRldiA9ICZwZGV2LT5kZXY7CisJZGFpLT5uYW1lID0gInMzYzY0eHgtaTJzIjsKKwlkYWktPmlkID0gcGRldi0+aWQ7CisJZGFpLT5zeW1tZXRyaWNfcmF0ZXMgPSAxOworCWRhaS0+cGxheWJhY2suY2hhbm5lbHNfbWluID0gMjsKKwlkYWktPnBsYXliYWNrLmNoYW5uZWxzX21heCA9IDI7CisJZGFpLT5wbGF5YmFjay5yYXRlcyA9IFMzQzY0WFhfSTJTX1JBVEVTOworCWRhaS0+cGxheWJhY2suZm9ybWF0cyA9IFMzQzY0WFhfSTJTX0ZNVFM7CisJZGFpLT5jYXB0dXJlLmNoYW5uZWxzX21pbiA9IDI7CisJZGFpLT5jYXB0dXJlLmNoYW5uZWxzX21heCA9IDI7CisJZGFpLT5jYXB0dXJlLnJhdGVzID0gUzNDNjRYWF9JMlNfUkFURVM7CisJZGFpLT5jYXB0dXJlLmZvcm1hdHMgPSBTM0M2NFhYX0kyU19GTVRTOworCWRhaS0+cHJvYmUgPSBzM2M2NHh4X2kyc19wcm9iZTsKKwlkYWktPm9wcyA9ICZzM2M2NHh4X2kyc19kYWlfb3BzOwogCiAJaTJzLT5kbWFfY2FwdHVyZSA9ICZzM2M2NHh4X2kyc19wY21fc3RlcmVvX2luW3BkZXYtPmlkXTsKIAlpMnMtPmRtYV9wbGF5YmFjayA9ICZzM2M2NHh4X2kyc19wY21fc3RlcmVvX291dFtwZGV2LT5pZF07CiAKKwlpZiAocGRldi0+aWQgPT0gMCkgeworCQlpMnMtPmRtYV9jYXB0dXJlLT5jaGFubmVsID0gRE1BQ0hfSTJTMF9JTjsKKwkJaTJzLT5kbWFfY2FwdHVyZS0+ZG1hX2FkZHIgPSBTM0M2NFhYX1BBX0lJUzAgKyBTM0MyNDEyX0lJU1JYRDsKKwkJaTJzLT5kbWFfcGxheWJhY2stPmNoYW5uZWwgPSBETUFDSF9JMlMwX09VVDsKKwkJaTJzLT5kbWFfcGxheWJhY2stPmRtYV9hZGRyID0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNUWEQ7CisJfSBlbHNlIHsKKwkJaTJzLT5kbWFfY2FwdHVyZS0+Y2hhbm5lbCA9IERNQUNIX0kyUzFfSU47CisJCWkycy0+ZG1hX2NhcHR1cmUtPmRtYV9hZGRyID0gUzNDNjRYWF9QQV9JSVMxICsgUzNDMjQxMl9JSVNSWEQ7CisJCWkycy0+ZG1hX3BsYXliYWNrLT5jaGFubmVsID0gRE1BQ0hfSTJTMV9PVVQ7CisJCWkycy0+ZG1hX3BsYXliYWNrLT5kbWFfYWRkciA9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTVFhEOworCX0KKworCWkycy0+ZG1hX2NhcHR1cmUtPmNsaWVudCA9ICZzM2M2NHh4X2RtYV9jbGllbnRfaW47CisJaTJzLT5kbWFfY2FwdHVyZS0+ZG1hX3NpemUgPSA0OworCWkycy0+ZG1hX3BsYXliYWNrLT5jbGllbnQgPSAmczNjNjR4eF9kbWFfY2xpZW50X291dDsKKwlpMnMtPmRtYV9wbGF5YmFjay0+ZG1hX3NpemUgPSA0OworCiAJaTJzLT5paXNfY2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImF1ZGlvLWJ1cyIpOwogCWlmIChJU19FUlIoaTJzLT5paXNfY2NsaykpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBhdWRpby1idXNcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvc21kazI0NDNfd205NzEwLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zbWRrMjQ0M193bTk3MTAuYwppbmRleCAxMmI3ODNiMS4uMzYyMjU4OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvc21kazI0NDNfd205NzEwLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvc21kazI0NDNfd205NzEwLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgIi4uL2NvZGVjcy9hYzk3LmgiCiAjaW5jbHVkZSAiczNjLWRtYS5oIgotI2luY2x1ZGUgInMzYzI0eHgtYWM5Ny5oIgorI2luY2x1ZGUgInMzYy1hYzk3LmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNtZGsyNDQzOwogCkBAIC0yOSw3ICsyOSw3IEBACiB7CiAJLm5hbWUgPSAiQUM5NyIsCiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JLmNwdV9kYWkgPSAmczNjMjQ0M19hYzk3X2RhaVswXSwKKwkuY3B1X2RhaSA9ICZzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX1BDTV0sCiAJLmNvZGVjX2RhaSA9ICZhYzk3X2RhaSwKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvc21ka193bTk3MTMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGtfd205NzEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmZDM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGtfd205NzEzLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIHNtZGtfd205NzEzLmMgIC0tICBTb0MgYXVkaW8gZm9yIFNNREsKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiBMdGQuCisgKiBBdXRob3I6IEphc3dpbmRlciBTaW5naCBCcmFyIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MTMuaCIKKyNpbmNsdWRlICJzM2MtZG1hLmgiCisjaW5jbHVkZSAiczNjLWFjOTcuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc21kazsKKworLyoKKyAqIERlZmF1bHQgQ0ZHIHN3aXRjaCBzZXR0aW5ncyB0byB1c2UgdGhpcyBkcml2ZXI6CisgKgorICogICBTTURLNjQxMDogU2V0IENGRzEgMS0zIE9uLCBDRkcyIDEtNCBPZmYKKyAqLworCisvKgorIFBsYXliYWNrIChIZWFkUGhvbmUpOi0KKwkkIGFtaXhlciBzc2V0ICdIZWFkcGhvbmUnIHVubXV0ZQorCSQgYW1peGVyIHNzZXQgJ1JpZ2h0IEhlYWRwaG9uZSBPdXQgTXV4JyAnSGVhZHBob25lJworCSQgYW1peGVyIHNzZXQgJ0xlZnQgSGVhZHBob25lIE91dCBNdXgnICdIZWFkcGhvbmUnCisJJCBhbWl4ZXIgc3NldCAnUmlnaHQgSFAgTWl4ZXIgUENNJyB1bm11dGUKKwkkIGFtaXhlciBzc2V0ICdMZWZ0IEhQIE1peGVyIFBDTScgdW5tdXRlCisKKyBDYXB0dXJlIChMaW5lSW4pOi0KKwkkIGFtaXhlciBzc2V0ICdSaWdodCBDYXB0dXJlIFNvdXJjZScgJ0xpbmUnCisJJCBhbWl4ZXIgc3NldCAnTGVmdCBDYXB0dXJlIFNvdXJjZScgJ0xpbmUnCisqLworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc21ka19kYWkgPSB7CisJLm5hbWUgPSAiQUM5NyIsCisJLnN0cmVhbV9uYW1lID0gIkFDOTcgUENNIiwKKwkuY3B1X2RhaSA9ICZzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX1BDTV0sCisJLmNvZGVjX2RhaSA9ICZ3bTk3MTNfZGFpW1dNOTcxM19EQUlfQUM5N19ISUZJXSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNtZGsgPSB7CisJLm5hbWUgPSAiU01ESyIsCisJLnBsYXRmb3JtID0gJnMzYzI0eHhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluayA9ICZzbWRrX2RhaSwKKwkubnVtX2xpbmtzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2Ugc21ka19zbmRfYWM5N19kZXZkYXRhID0geworCS5jYXJkID0gJnNtZGssCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtOTcxMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrX3NuZF9hYzk3X2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgc21ka19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXNtZGtfc25kX2FjOTdfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFzbWRrX3NuZF9hYzk3X2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzbWRrX3NuZF9hYzk3X2RldmljZSwKKwkJCSAgICAgJnNtZGtfc25kX2FjOTdfZGV2ZGF0YSk7CisJc21ka19zbmRfYWM5N19kZXZkYXRhLmRldiA9ICZzbWRrX3NuZF9hYzk3X2RldmljZS0+ZGV2OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChzbWRrX3NuZF9hYzk3X2RldmljZSk7CisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChzbWRrX3NuZF9hYzk3X2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc21ka19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc21ka19zbmRfYWM5N19kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChzbWRrX2luaXQpOworbW9kdWxlX2V4aXQoc21ka19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2ggQnJhciwgamFzc2kuYnJhckBzYW1zdW5nLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBTTURLK1dNOTcxMyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL0tjb25maWcgYi9zb3VuZC9zb2Mvc2gvS2NvbmZpZwppbmRleCA5ZTY5NzY1Li4xMDY2NzQ5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvc2gvS2NvbmZpZwpAQCAtMjYsNiArMjYsMTMgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIEZTSSBzb3VuZCBzdXBwb3J0CiAKK2NvbmZpZyBTTkRfU09DX1NINF9TSVUKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gKFNVUEVSSCB8fCBBUkNIX1NITU9CSUxFKSAmJiBIQVZFX0NMSworCXNlbGVjdCBETUFfRU5HSU5FCisJc2VsZWN0IERNQURFVklDRVMKKwlzZWxlY3QgU0hfRE1BRQorCiAjIwogIyMgQm9hcmRzCiAjIwpAQCAtNDcsNCArNTQsMjAgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZ2VuZXJpYyBzb3VuZCBzdXBwb3J0IGZvciB0aGUKIAkgIEZTSSAtIEFLNDY0MiB1bml0CiAKK2NvbmZpZyBTTkRfRlNJX0RBNzIxMAorCWJvb2wgIkZTSS1EQTcyMTAgc291bmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNORF9TT0NfU0g0X0ZTSQorCXNlbGVjdCBTTkRfU09DX0RBNzIxMAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZ2VuZXJpYyBzb3VuZCBzdXBwb3J0IGZvciB0aGUKKwkgIEZTSSAtIERBNzIxMCB1bml0CisKK2NvbmZpZyBTTkRfU0lVX01JR09SCisJdHJpc3RhdGUgIlNJVSBzb3VuZCBzdXBwb3J0IG9uIE1pZ28tUiIKKwlkZXBlbmRzIG9uIFNIX01JR09SCisJc2VsZWN0IFNORF9TT0NfU0g0X1NJVQorCXNlbGVjdCBTTkRfU09DX1dNODk3OAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc291bmQgc3VwcG9ydCBmb3IgdGhlIFNINzcyMiBNaWdvLVIgYm9hcmQKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL01ha2VmaWxlIGIvc291bmQvc29jL3NoL01ha2VmaWxlCmluZGV4IGE2OTk3ODcuLjhhNWExOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvc2gvTWFrZWZpbGUKQEAgLTYsMTMgKzYsMTkgQEAKIHNuZC1zb2MtaGFjLW9ianMJOj0gaGFjLm8KIHNuZC1zb2Mtc3NpLW9ianMJOj0gc3NpLm8KIHNuZC1zb2MtZnNpLW9ianMJOj0gZnNpLm8KK3NuZC1zb2Mtc2l1LW9ianMJOj0gc2l1X3BjbS5vIHNpdV9kYWkubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X0hBQykJKz0gc25kLXNvYy1oYWMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X1NTSSkJKz0gc25kLXNvYy1zc2kubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X0ZTSSkJKz0gc25kLXNvYy1mc2kubworb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X1NJVSkJKz0gc25kLXNvYy1zaXUubwogCiAjIyBib2FyZHMKIHNuZC1zb2Mtc2g3NzYwLWFjOTctb2Jqcwk6PSBzaDc3NjAtYWM5Ny5vCiBzbmQtc29jLWZzaS1hazQ2NDItb2JqcwkJOj0gZnNpLWFrNDY0Mi5vCitzbmQtc29jLWZzaS1kYTcyMTAtb2JqcwkJOj0gZnNpLWRhNzIxMC5vCitzbmQtc29jLW1pZ29yLW9ianMJCTo9IG1pZ29yLm8KIAogb2JqLSQoQ09ORklHX1NORF9TSDc3NjBfQUM5NykJKz0gc25kLXNvYy1zaDc3NjAtYWM5Ny5vCiBvYmotJChDT05GSUdfU05EX0ZTSV9BSzQ2NDIpCSs9IHNuZC1zb2MtZnNpLWFrNDY0Mi5vCitvYmotJChDT05GSUdfU05EX0ZTSV9EQTcyMTApCSs9IHNuZC1zb2MtZnNpLWRhNzIxMC5vCitvYmotJChDT05GSUdfU05EX1NJVV9NSUdPUikJKz0gc25kLXNvYy1taWdvci5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLWRhNzIxMC5jIGIvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2I0ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogZnNpLWRhNzIxMC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCisjaW5jbHVkZSA8c291bmQvc2hfZnNpLmg+CisjaW5jbHVkZSAiLi4vY29kZWNzL2RhNzIxMC5oIgorCitzdGF0aWMgaW50IGZzaV9kYTcyMTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9mbXQoJmRhNzIxMF9kYWksCisJCQkJICAgU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCSAgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZnNpX2RhNzIxMF9kYWkgPSB7CisJLm5hbWUJCT0gIkRBNzIxMCIsCisJLnN0cmVhbV9uYW1lCT0gIkRBNzIxMCIsCisJLmNwdV9kYWkJPSAmZnNpX3NvY19kYWlbMV0sIC8qIEZTSSBCICovCisJLmNvZGVjX2RhaQk9ICZkYTcyMTBfZGFpLAorCS5pbml0CQk9IGZzaV9kYTcyMTBfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGZzaV9zb2NfY2FyZCA9IHsKKwkubmFtZQkJPSAiRlNJIiwKKwkucGxhdGZvcm0JPSAmZnNpX3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsJPSAmZnNpX2RhNzIxMF9kYWksCisJLm51bV9saW5rcwk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGZzaV9kYTcyMTBfc25kX2RldmRhdGEgPSB7CisJLmNhcmQJCT0gJmZzaV9zb2NfY2FyZCwKKwkuY29kZWNfZGV2CT0gJnNvY19jb2RlY19kZXZfZGE3MjEwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZzaV9kYTcyMTBfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgZnNpX2RhNzIxMF9zb3VuZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWZzaV9kYTcyMTBfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghZnNpX2RhNzIxMF9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGZzaV9kYTcyMTBfc25kX2RldmljZSwgJmZzaV9kYTcyMTBfc25kX2RldmRhdGEpOworCWZzaV9kYTcyMTBfc25kX2RldmRhdGEuZGV2ID0gJmZzaV9kYTcyMTBfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZnNpX2RhNzIxMF9zbmRfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGZzaV9kYTcyMTBfc25kX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNpX2RhNzIxMF9zb3VuZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZnNpX2RhNzIxMF9zbmRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZnNpX2RhNzIxMF9zb3VuZF9pbml0KTsKK21vZHVsZV9leGl0KGZzaV9kYTcyMTBfc291bmRfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBGU0kgREEyNzEwIik7CitNT0RVTEVfQVVUSE9SKCJLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKaW5kZXggNDI4MTNiOC4uOTkzYWJiNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9mc2kuYwpAQCAtNjcsNiArNjcsNyBAQAogLyogRE9GRl9TVCAqLwogI2RlZmluZSBFUlJfT1ZFUgkweDAwMDAwMDEwCiAjZGVmaW5lIEVSUl9VTkRFUgkweDAwMDAwMDAxCisjZGVmaW5lIFNUX0VSUgkJKEVSUl9PVkVSIHwgRVJSX1VOREVSKQogCiAvKiBDTEtfUlNUICovCiAjZGVmaW5lIEJfQ0xLCQkweDAwMDAwMDEwCkBAIC05Miw2ICs5Myw3IEBACiBzdHJ1Y3QgZnNpX3ByaXYgewogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyOwogCiAJaW50IGZpZm9fbWF4OwogCWludCBjaGFuOwpAQCAtMTA4LDEwICsxMTAsOSBAQAogCXN0cnVjdCBmc2lfcHJpdiBmc2lhOwogCXN0cnVjdCBmc2lfcHJpdiBmc2liOwogCXN0cnVjdCBzaF9mc2lfcGxhdGZvcm1faW5mbyAqaW5mbzsKKwlzcGlubG9ja190IGxvY2s7CiB9OwogCi1zdGF0aWMgc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcjsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAKQEAgLTExOSwzNSArMTIwLDM1IEBACiAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBfX2ZzaV9yZWdfd3JpdGUodTMyIHJlZywgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBfX2ZzaV9yZWdfd3JpdGUodTMyIHJlZywgdTMyIGRhdGEpCiB7CiAJLyogdmFsaWQgZGF0YSBhcmVhIGlzIDI0Yml0ICovCiAJZGF0YSAmPSAweDAwZmZmZmZmOwogCi0JcmV0dXJuIGN0cmxfb3V0bChkYXRhLCByZWcpOworCV9fcmF3X3dyaXRlbChkYXRhLCByZWcpOwogfQogCiBzdGF0aWMgdTMyIF9fZnNpX3JlZ19yZWFkKHUzMiByZWcpCiB7Ci0JcmV0dXJuIGN0cmxfaW5sKHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQgX19mc2lfcmVnX21hc2tfc2V0KHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIF9fZnNpX3JlZ19tYXNrX3NldCh1MzIgcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCiB7CiAJdTMyIHZhbCA9IF9fZnNpX3JlZ19yZWFkKHJlZyk7CiAKIAl2YWwgJj0gfm1hc2s7CiAJdmFsIHw9IGRhdGEgJiBtYXNrOwogCi0JcmV0dXJuIF9fZnNpX3JlZ193cml0ZShyZWcsIHZhbCk7CisJX19mc2lfcmVnX3dyaXRlKHJlZywgdmFsKTsKIH0KIAotc3RhdGljIGludCBmc2lfcmVnX3dyaXRlKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCB1MzIgcmVnLCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIGZzaV9yZWdfd3JpdGUoc3RydWN0IGZzaV9wcml2ICpmc2ksIHUzMiByZWcsIHUzMiBkYXRhKQogewogCWlmIChyZWcgPiBSRUdfRU5EKQotCQlyZXR1cm4gLTE7CisJCXJldHVybjsKIAotCXJldHVybiBfX2ZzaV9yZWdfd3JpdGUoKHUzMikoZnNpLT5iYXNlICsgcmVnKSwgZGF0YSk7CisJX19mc2lfcmVnX3dyaXRlKCh1MzIpKGZzaS0+YmFzZSArIHJlZyksIGRhdGEpOwogfQogCiBzdGF0aWMgdTMyIGZzaV9yZWdfcmVhZChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZykKQEAgLTE1OCwzOSArMTU5LDU1IEBACiAJcmV0dXJuIF9fZnNpX3JlZ19yZWFkKCh1MzIpKGZzaS0+YmFzZSArIHJlZykpOwogfQogCi1zdGF0aWMgaW50IGZzaV9yZWdfbWFza19zZXQoc3RydWN0IGZzaV9wcml2ICpmc2ksIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIGZzaV9yZWdfbWFza19zZXQoc3RydWN0IGZzaV9wcml2ICpmc2ksIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKIHsKIAlpZiAocmVnID4gUkVHX0VORCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm47CiAKLQlyZXR1cm4gX19mc2lfcmVnX21hc2tfc2V0KCh1MzIpKGZzaS0+YmFzZSArIHJlZyksIG1hc2ssIGRhdGEpOworCV9fZnNpX3JlZ19tYXNrX3NldCgodTMyKShmc2ktPmJhc2UgKyByZWcpLCBtYXNrLCBkYXRhKTsKIH0KIAotc3RhdGljIGludCBmc2lfbWFzdGVyX3dyaXRlKHUzMiByZWcsIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgZnNpX21hc3Rlcl93cml0ZShzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyLCB1MzIgcmVnLCB1MzIgZGF0YSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAogCSAgICAocmVnID4gTVJFR19FTkQpKQotCQlyZXR1cm4gLTE7CisJCXJldHVybjsKIAotCXJldHVybiBfX2ZzaV9yZWdfd3JpdGUoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgZGF0YSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hc3Rlci0+bG9jaywgZmxhZ3MpOworCV9fZnNpX3JlZ193cml0ZSgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpLCBkYXRhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHUzMiBmc2lfbWFzdGVyX3JlYWQodTMyIHJlZykKK3N0YXRpYyB1MzIgZnNpX21hc3Rlcl9yZWFkKHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIsIHUzMiByZWcpCiB7CisJdTMyIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAogCSAgICAocmVnID4gTVJFR19FTkQpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBfX2ZzaV9yZWdfcmVhZCgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gX19mc2lfcmVnX3JlYWQoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGZzaV9tYXN0ZXJfbWFza19zZXQodTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgZnNpX21hc3Rlcl9tYXNrX3NldChzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyLAorCQkJICAgICAgIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAogCSAgICAocmVnID4gTVJFR19FTkQpKQotCQlyZXR1cm4gLTE7CisJCXJldHVybjsKIAotCXJldHVybiBfX2ZzaV9yZWdfbWFza19zZXQoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgbWFzaywgZGF0YSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hc3Rlci0+bG9jaywgZmxhZ3MpOworCV9fZnNpX3JlZ19tYXNrX3NldCgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpLCBtYXNrLCBkYXRhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjAwLDQzICsyMTcsMzUgQEAKIAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IGZzaV9wcml2ICpmc2lfZ2V0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIHN0cnVjdCBmc2lfbWFzdGVyICpmc2lfZ2V0X21hc3RlcihzdHJ1Y3QgZnNpX3ByaXYgKmZzaSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOwotCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gTlVMTDsKLQotCWlmICghc3Vic3RyZWFtIHx8ICFtYXN0ZXIpCi0JCXJldHVybiBOVUxMOwotCi0JcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3dpdGNoIChydGQtPmRhaS0+Y3B1X2RhaS0+aWQpIHsKLQljYXNlIDA6Ci0JCWZzaSA9ICZtYXN0ZXItPmZzaWE7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJZnNpID0gJm1hc3Rlci0+ZnNpYjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGZzaTsKKwlyZXR1cm4gZnNpLT5tYXN0ZXI7CiB9CiAKIHN0YXRpYyBpbnQgZnNpX2lzX3BvcnRfYShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSkKIHsKLQkvKiByZXR1cm4KLQkgKiAxIDogcG9ydCBhCi0JICogMCA6IHBvcnQgYgotCSAqLworCXJldHVybiBmc2ktPm1hc3Rlci0+YmFzZSA9PSBmc2ktPmJhc2U7Cit9CiAKLQlpZiAoZnNpID09ICZtYXN0ZXItPmZzaWEpCi0JCXJldHVybiAxOworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSAqZnNpX2dldF9kYWkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICptYWNoaW5lID0gcnRkLT5kYWk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gIG1hY2hpbmUtPmNwdV9kYWk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNpX3ByaXYgKmZzaV9nZXRfcHJpdihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGZzaV9nZXRfZGFpKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gZGFpLT5wcml2YXRlX2RhdGE7CiB9CiAKIHN0YXRpYyB1MzIgZnNpX2dldF9pbmZvX2ZsYWdzKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQogewogCWludCBpc19wb3J0YSA9IGZzaV9pc19wb3J0X2EoZnNpKTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKIAogCXJldHVybiBpc19wb3J0YSA/IG1hc3Rlci0+aW5mby0+cG9ydGFfZmxhZ3MgOgogCQltYXN0ZXItPmluZm8tPnBvcnRiX2ZsYWdzOwpAQCAtMzE0LDI3ICszMjMsMzAgQEAKIHN0YXRpYyB2b2lkIGZzaV9pcnFfZW5hYmxlKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgaXNfcGxheSkKIHsKIAl1MzIgZGF0YSA9IGZzaV9wb3J0X2FiX2lvX2JpdChmc2ksIGlzX3BsYXkpOworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCi0JZnNpX21hc3Rlcl9tYXNrX3NldChJTVNLLCAgZGF0YSwgZGF0YSk7Ci0JZnNpX21hc3Rlcl9tYXNrX3NldChJRU1TSywgZGF0YSwgZGF0YSk7CisJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIElNU0ssICBkYXRhLCBkYXRhKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgSUVNU0ssIGRhdGEsIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBmc2lfaXJxX2Rpc2FibGUoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBpc19wbGF5KQogewogCXUzMiBkYXRhID0gZnNpX3BvcnRfYWJfaW9fYml0KGZzaSwgaXNfcGxheSk7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7CiAKLQlmc2lfbWFzdGVyX21hc2tfc2V0KElNU0ssICBkYXRhLCAwKTsKLQlmc2lfbWFzdGVyX21hc2tfc2V0KElFTVNLLCBkYXRhLCAwKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgSU1TSywgIGRhdGEsIDApOworCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBJRU1TSywgZGF0YSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZzaV9jbGtfY3RybChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGVuYWJsZSkKIHsKIAl1MzIgdmFsID0gZnNpX2lzX3BvcnRfYShmc2kpID8gKDEgPDwgMCkgOiAoMSA8PCA0KTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKIAogCWlmIChlbmFibGUpCi0JCWZzaV9tYXN0ZXJfbWFza19zZXQoQ0xLX1JTVCwgdmFsLCB2YWwpOworCQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgQ0xLX1JTVCwgdmFsLCB2YWwpOwogCWVsc2UKLQkJZnNpX21hc3Rlcl9tYXNrX3NldChDTEtfUlNULCB2YWwsIDApOworCQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgQ0xLX1JTVCwgdmFsLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgZnNpX2lycV9pbml0KHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgaXNfcGxheSkKQEAgLTM1NSw0MyArMzY3LDQ2IEBACiAJZnNpX3JlZ19tYXNrX3NldChmc2ksIGN0cmwsIEZJRk9fQ0xSLCBGSUZPX0NMUik7CiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgZmFjdG9yICovCi0JZnNpX21hc3Rlcl9tYXNrX3NldChJTlRfU1QsIGRhdGEsIDApOworCWZzaV9tYXN0ZXJfbWFza19zZXQoZnNpX2dldF9tYXN0ZXIoZnNpKSwgSU5UX1NULCBkYXRhLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZnNpX3NvZnRfYWxsX3Jlc2V0KHZvaWQpCitzdGF0aWMgdm9pZCBmc2lfc29mdF9hbGxfcmVzZXQoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcikKIHsKLQl1MzIgc3RhdHVzID0gZnNpX21hc3Rlcl9yZWFkKFNPRlRfUlNUKTsKKwl1MzIgc3RhdHVzID0gZnNpX21hc3Rlcl9yZWFkKG1hc3RlciwgU09GVF9SU1QpOwogCiAJLyogcG9ydCBBQiByZXNldCAqLwogCXN0YXR1cyAmPSAweDAwMDAwMGZmOwotCWZzaV9tYXN0ZXJfd3JpdGUoU09GVF9SU1QsIHN0YXR1cyk7CisJZnNpX21hc3Rlcl93cml0ZShtYXN0ZXIsIFNPRlRfUlNULCBzdGF0dXMpOwogCW1kZWxheSgxMCk7CiAKIAkvKiBzb2Z0IHJlc2V0ICovCiAJc3RhdHVzICY9IDB4MDAwMDAwZjA7Ci0JZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgU09GVF9SU1QsIHN0YXR1cyk7CiAJc3RhdHVzIHw9IDB4MDAwMDAwMDE7Ci0JZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgU09GVF9SU1QsIHN0YXR1cyk7CiAJbWRlbGF5KDEwKTsKIH0KIAogLyogcGxheWJhY2sgaW50ZXJydXB0ICovCi1zdGF0aWMgaW50IGZzaV9kYXRhX3B1c2goc3RydWN0IGZzaV9wcml2ICpmc2kpCitzdGF0aWMgaW50IGZzaV9kYXRhX3B1c2goc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBzdGFydHVwKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBOVUxMOworCXUzMiBzdGF0dXM7CiAJaW50IHNlbmQ7CiAJaW50IGZpZm9fZnJlZTsKIAlpbnQgd2lkdGg7CiAJdTggKnN0YXJ0OwotCWludCBpOworCWludCBpLCBvdmVyX3BlcmlvZDsKIAogCWlmICghZnNpCQkJfHwKIAkgICAgIWZzaS0+c3Vic3RyZWFtCQl8fAogCSAgICAhZnNpLT5zdWJzdHJlYW0tPnJ1bnRpbWUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcnVudGltZSA9IGZzaS0+c3Vic3RyZWFtLT5ydW50aW1lOworCW92ZXJfcGVyaW9kCT0gMDsKKwlzdWJzdHJlYW0JPSBmc2ktPnN1YnN0cmVhbTsKKwlydW50aW1lCQk9IHN1YnN0cmVhbS0+cnVudGltZTsKIAogCS8qIEZTSSBGSUZPIGhhcyBsaW1pdC4KIAkgKiBTbywgdGhpcyBkcml2ZXIgY2FuIG5vdCBzZW5kIHBlcmlvZHMgZGF0YSBhdCBhIHRpbWUKQEAgLTM5OSw3ICs0MTQsNyBAQAogCWlmIChmc2ktPmJ5dGVfb2Zmc2V0ID49CiAJICAgIGZzaS0+cGVyaW9kX2xlbiAqIChmc2ktPnBlcmlvZHMgKyAxKSkgewogCi0JCXN1YnN0cmVhbSA9IGZzaS0+c3Vic3RyZWFtOworCQlvdmVyX3BlcmlvZCA9IDE7CiAJCWZzaS0+cGVyaW9kcyA9IChmc2ktPnBlcmlvZHMgKyAxKSAlIHJ1bnRpbWUtPnBlcmlvZHM7CiAKIAkJaWYgKDAgPT0gZnNpLT5wZXJpb2RzKQpAQCAtNDM4LDMwICs0NTMsNDQgQEAKIAogCWZzaS0+Ynl0ZV9vZmZzZXQgKz0gc2VuZCAqIHdpZHRoOwogCisJc3RhdHVzID0gZnNpX3JlZ19yZWFkKGZzaSwgRE9GRl9TVCk7CisJaWYgKCFzdGFydHVwKSB7CisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gZnNpX2dldF9kYWkoc3Vic3RyZWFtKTsKKworCQlpZiAoc3RhdHVzICYgRVJSX09WRVIpCisJCQlkZXZfZXJyKGRhaS0+ZGV2LCAib3ZlciBydW5cbiIpOworCQlpZiAoc3RhdHVzICYgRVJSX1VOREVSKQorCQkJZGV2X2VycihkYWktPmRldiwgInVuZGVyIHJ1blxuIik7CisJfQorCWZzaV9yZWdfd3JpdGUoZnNpLCBET0ZGX1NULCAwKTsKKwogCWZzaV9pcnFfZW5hYmxlKGZzaSwgMSk7CiAKLQlpZiAoc3Vic3RyZWFtKQorCWlmIChvdmVyX3BlcmlvZCkKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnNpX2RhdGFfcG9wKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQorc3RhdGljIGludCBmc2lfZGF0YV9wb3Aoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBzdGFydHVwKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBOVUxMOworCXUzMiBzdGF0dXM7CiAJaW50IGZyZWU7CiAJaW50IGZpZm9fZmlsbDsKIAlpbnQgd2lkdGg7CiAJdTggKnN0YXJ0OwotCWludCBpOworCWludCBpLCBvdmVyX3BlcmlvZDsKIAogCWlmICghZnNpCQkJfHwKIAkgICAgIWZzaS0+c3Vic3RyZWFtCQl8fAogCSAgICAhZnNpLT5zdWJzdHJlYW0tPnJ1bnRpbWUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcnVudGltZSA9IGZzaS0+c3Vic3RyZWFtLT5ydW50aW1lOworCW92ZXJfcGVyaW9kCT0gMDsKKwlzdWJzdHJlYW0JPSBmc2ktPnN1YnN0cmVhbTsKKwlydW50aW1lCQk9IHN1YnN0cmVhbS0+cnVudGltZTsKIAogCS8qIEZTSSBGSUZPIGhhcyBsaW1pdC4KIAkgKiBTbywgdGhpcyBkcml2ZXIgY2FuIG5vdCBzZW5kIHBlcmlvZHMgZGF0YSBhdCBhIHRpbWUKQEAgLTQ2OSw3ICs0OTgsNyBAQAogCWlmIChmc2ktPmJ5dGVfb2Zmc2V0ID49CiAJICAgIGZzaS0+cGVyaW9kX2xlbiAqIChmc2ktPnBlcmlvZHMgKyAxKSkgewogCi0JCXN1YnN0cmVhbSA9IGZzaS0+c3Vic3RyZWFtOworCQlvdmVyX3BlcmlvZCA9IDE7CiAJCWZzaS0+cGVyaW9kcyA9IChmc2ktPnBlcmlvZHMgKyAxKSAlIHJ1bnRpbWUtPnBlcmlvZHM7CiAKIAkJaWYgKDAgPT0gZnNpLT5wZXJpb2RzKQpAQCAtNTA3LDkgKzUzNiwyMCBAQAogCiAJZnNpLT5ieXRlX29mZnNldCArPSBmaWZvX2ZpbGwgKiB3aWR0aDsKIAorCXN0YXR1cyA9IGZzaV9yZWdfcmVhZChmc2ksIERJRkZfU1QpOworCWlmICghc3RhcnR1cCkgeworCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGZzaV9nZXRfZGFpKHN1YnN0cmVhbSk7CisKKwkJaWYgKHN0YXR1cyAmIEVSUl9PVkVSKQorCQkJZGV2X2VycihkYWktPmRldiwgIm92ZXIgcnVuXG4iKTsKKwkJaWYgKHN0YXR1cyAmIEVSUl9VTkRFUikKKwkJCWRldl9lcnIoZGFpLT5kZXYsICJ1bmRlciBydW5cbiIpOworCX0KKwlmc2lfcmVnX3dyaXRlKGZzaSwgRElGRl9TVCwgMCk7CisKIAlmc2lfaXJxX2VuYWJsZShmc2ksIDApOwogCi0JaWYgKHN1YnN0cmVhbSkKKwlpZiAob3Zlcl9wZXJpb2QpCiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKIAogCXJldHVybiAwOwpAQCAtNTE3LDIzICs1NTcsMjQgQEAKIAogc3RhdGljIGlycXJldHVybl90IGZzaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQl1MzIgc3RhdHVzID0gZnNpX21hc3Rlcl9yZWFkKFNPRlRfUlNUKSAmIH4weDAwMDAwMDEwOwotCXUzMiBpbnRfc3QgPSBmc2lfbWFzdGVyX3JlYWQoSU5UX1NUKTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZGF0YTsKKwl1MzIgc3RhdHVzID0gZnNpX21hc3Rlcl9yZWFkKG1hc3RlciwgU09GVF9SU1QpICYgfjB4MDAwMDAwMTA7CisJdTMyIGludF9zdCA9IGZzaV9tYXN0ZXJfcmVhZChtYXN0ZXIsIElOVF9TVCk7CiAKIAkvKiBjbGVhciBpcnEgc3RhdHVzICovCi0JZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKLQlmc2lfbWFzdGVyX3dyaXRlKFNPRlRfUlNULCBzdGF0dXMgfCAweDAwMDAwMDEwKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgU09GVF9SU1QsIHN0YXR1cyk7CisJZnNpX21hc3Rlcl93cml0ZShtYXN0ZXIsIFNPRlRfUlNULCBzdGF0dXMgfCAweDAwMDAwMDEwKTsKIAogCWlmIChpbnRfc3QgJiBJTlRfQV9PVVQpCi0JCWZzaV9kYXRhX3B1c2goJm1hc3Rlci0+ZnNpYSk7CisJCWZzaV9kYXRhX3B1c2goJm1hc3Rlci0+ZnNpYSwgMCk7CiAJaWYgKGludF9zdCAmIElOVF9CX09VVCkKLQkJZnNpX2RhdGFfcHVzaCgmbWFzdGVyLT5mc2liKTsKKwkJZnNpX2RhdGFfcHVzaCgmbWFzdGVyLT5mc2liLCAwKTsKIAlpZiAoaW50X3N0ICYgSU5UX0FfSU4pCi0JCWZzaV9kYXRhX3BvcCgmbWFzdGVyLT5mc2lhKTsKKwkJZnNpX2RhdGFfcG9wKCZtYXN0ZXItPmZzaWEsIDApOwogCWlmIChpbnRfc3QgJiBJTlRfQl9JTikKLQkJZnNpX2RhdGFfcG9wKCZtYXN0ZXItPmZzaWIpOworCQlmc2lfZGF0YV9wb3AoJm1hc3Rlci0+ZnNpYiwgMCk7CiAKLQlmc2lfbWFzdGVyX3dyaXRlKElOVF9TVCwgMHgwMDAwMDAwKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgSU5UX1NULCAweDAwMDAwMDApOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNTQ4LDcgKzU4OSw3IEBACiBzdGF0aWMgaW50IGZzaV9kYWlfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldChzdWJzdHJlYW0pOworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldF9wcml2KHN1YnN0cmVhbSk7CiAJY29uc3QgY2hhciAqbXNnOwogCXUzMiBmbGFncyA9IGZzaV9nZXRfaW5mb19mbGFncyhmc2kpOwogCXUzMiBmbXQ7CkBAIC02NjcsNyArNzA4LDcgQEAKIHN0YXRpYyB2b2lkIGZzaV9kYWlfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldChzdWJzdHJlYW0pOworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldF9wcml2KHN1YnN0cmVhbSk7CiAJaW50IGlzX3BsYXkgPSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOwogCiAJZnNpX2lycV9kaXNhYmxlKGZzaSwgaXNfcGxheSk7CkBAIC02NzksNyArNzIwLDcgQEAKIHN0YXRpYyBpbnQgZnNpX2RhaV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAogCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0Jc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0KHN1YnN0cmVhbSk7CisJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWludCBpc19wbGF5ID0gc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKIAlpbnQgcmV0ID0gMDsKQEAgLTY4OSw3ICs3MzAsNyBAQAogCQlmc2lfc3RyZWFtX3B1c2goZnNpLCBzdWJzdHJlYW0sCiAJCQkJZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSwKIAkJCQlmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpKTsKLQkJcmV0ID0gaXNfcGxheSA/IGZzaV9kYXRhX3B1c2goZnNpKSA6IGZzaV9kYXRhX3BvcChmc2kpOworCQlyZXQgPSBpc19wbGF5ID8gZnNpX2RhdGFfcHVzaChmc2ksIDEpIDogZnNpX2RhdGFfcG9wKGZzaSwgMSk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAkJZnNpX2lycV9kaXNhYmxlKGZzaSwgaXNfcGxheSk7CkBAIC03NjAsNyArODAxLDcgQEAKIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBmc2lfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldChzdWJzdHJlYW0pOworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldF9wcml2KHN1YnN0cmVhbSk7CiAJbG9uZyBsb2NhdGlvbjsKIAogCWxvY2F0aW9uID0gKGZzaS0+Ynl0ZV9vZmZzZXQgLSAxKTsKQEAgLTg3MCwxMCArOTExLDE2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IGZzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXI7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgcmV0OwogCisJaWYgKDAgIT0gcGRldi0+aWQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY3VycmVudCBmc2kgc3VwcG9ydCBpZCAwIG9ubHkgbm93XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmICghcmVzIHx8IChpbnQpaXJxIDw9IDApIHsKQEAgLTg5OSwxNSArOTQ2LDIwIEBACiAJbWFzdGVyLT5pcnEJCT0gaXJxOwogCW1hc3Rlci0+aW5mbwkJPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAltYXN0ZXItPmZzaWEuYmFzZQk9IG1hc3Rlci0+YmFzZTsKKwltYXN0ZXItPmZzaWEubWFzdGVyCT0gbWFzdGVyOwogCW1hc3Rlci0+ZnNpYi5iYXNlCT0gbWFzdGVyLT5iYXNlICsgMHg0MDsKKwltYXN0ZXItPmZzaWIubWFzdGVyCT0gbWFzdGVyOworCXNwaW5fbG9ja19pbml0KCZtYXN0ZXItPmxvY2spOwogCiAJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9yZXN1bWUoJnBkZXYtPmRldik7CiAKIAlmc2lfc29jX2RhaVswXS5kZXYJCT0gJnBkZXYtPmRldjsKKwlmc2lfc29jX2RhaVswXS5wcml2YXRlX2RhdGEJPSAmbWFzdGVyLT5mc2lhOwogCWZzaV9zb2NfZGFpWzFdLmRldgkJPSAmcGRldi0+ZGV2OworCWZzaV9zb2NfZGFpWzFdLnByaXZhdGVfZGF0YQk9ICZtYXN0ZXItPmZzaWI7CiAKLQlmc2lfc29mdF9hbGxfcmVzZXQoKTsKKwlmc2lfc29mdF9hbGxfcmVzZXQobWFzdGVyKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgJmZzaV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJmc2kiLCBtYXN0ZXIpOwogCWlmIChyZXQpIHsKQEAgLTkzNyw2ICs5ODksMTAgQEAKIAogc3RhdGljIGludCBmc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcjsKKworCW1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaV9zb2NfZGFpWzBdLnByaXZhdGVfZGF0YSk7CisKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyhmc2lfc29jX2RhaSwgQVJSQVlfU0laRShmc2lfc29jX2RhaSkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmZnNpX3NvY19wbGF0Zm9ybSk7CiAKQEAgLTk0Niw3ICsxMDAyLDEyIEBACiAKIAlpb3VubWFwKG1hc3Rlci0+YmFzZSk7CiAJa2ZyZWUobWFzdGVyKTsKLQltYXN0ZXIgPSBOVUxMOworCisJZnNpX3NvY19kYWlbMF0uZGV2CQk9IE5VTEw7CisJZnNpX3NvY19kYWlbMF0ucHJpdmF0ZV9kYXRhCT0gTlVMTDsKKwlmc2lfc29jX2RhaVsxXS5kZXYJCT0gTlVMTDsKKwlmc2lfc29jX2RhaVsxXS5wcml2YXRlX2RhdGEJPSBOVUxMOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9taWdvci5jIGIvc291bmQvc29jL3NoL21pZ29yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyM2E1YwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zaC9taWdvci5jCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQUxTQSBTb0MgZHJpdmVyIGZvciBNaWdvLVIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg5NzguaCIKKyNpbmNsdWRlICJzaXUuaCIKKworLyogRGVmYXVsdCA4MDAwSHogc2FtcGxpbmcgZnJlcXVlbmN5ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2RlY19mcmVxID0gODAwMCAqIDUxMjsKKworc3RhdGljIHVuc2lnbmVkIGludCB1c2VfY291bnQ7CisKKy8qIEV4dGVybmFsIGNsb2NrLCBzb3VyY2VkIGZyb20gdGhlIGNvZGVjIGF0IHRoZSBTSVVNQ0tCIHBpbiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2l1bWNrYl9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjb2RlY19mcmVxOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2l1bWNrYl9jbGtfb3BzID0geworCS5yZWNhbGMgPSBzaXVtY2tiX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNpdW1ja2JfY2xrID0geworCS5uYW1lCQk9ICJzaXVtY2tiX2NsayIsCisJLmlkCQk9IC0xLAorCS5vcHMJCT0gJnNpdW1ja2JfY2xrX29wcywKKwkucmF0ZQkJPSAwLCAvKiBpbml0aWFsaXNlZCBhdCBydW4tdGltZSAqLworfTsKKworc3RhdGljIGludCBtaWdvcl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODk3OF9QTEwsIDEzMDAwMDAwLAorCQkJCSAgICAgU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004OTc4X09QQ0xLUkFURSwgcmF0ZSAqIDUxMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfTkJfSUYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KHJ0ZC0+ZGFpLT5jcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9OQl9JRiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWNvZGVjX2ZyZXEgPSByYXRlICogNTEyOworCS8qCisJICogVGhpcyBwcm9wYWdhdGVzIHRoZSBwYXJlbnQgZnJlcXVlbmN5IGNoYW5nZSB0byBjaGlsZHJlbiBhbmQKKwkgKiByZWNhbGN1bGF0ZXMgdGhlIGZyZXF1ZW5jeSB0YWJsZQorCSAqLworCWNsa19zZXRfcmF0ZSgmc2l1bWNrYl9jbGssIGNvZGVjX2ZyZXEpOworCWRldl9kYmcoY29kZWNfZGFpLT5kZXYsICIlczogY29uZmlndXJlICVsdUh6XG4iLCBfX2Z1bmNfXywgY29kZWNfZnJlcSk7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKHJ0ZC0+ZGFpLT5jcHVfZGFpLCBTSVVfQ0xLQl9FWFQsCisJCQkJICAgICBjb2RlY19mcmVxIC8gMiwgU05EX1NPQ19DTE9DS19JTik7CisKKwlpZiAoIXJldCkKKwkJdXNlX2NvdW50Kys7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1pZ29yX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKworCWlmICh1c2VfY291bnQpIHsKKwkJdXNlX2NvdW50LS07CisKKwkJaWYgKCF1c2VfY291bnQpCisJCQlzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004OTc4X1BMTCwgMCwKKwkJCQkJICAgICAgIFNORF9TT0NfQ0xPQ0tfSU4pOworCX0gZWxzZSB7CisJCWRldl9kYmcoY29kZWNfZGFpLT5kZXYsICJVbmJhbGFuY2VkIGh3X2ZyZWUhXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBtaWdvcl9kYWlfb3BzID0geworCS5od19wYXJhbXMgPSBtaWdvcl9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBtaWdvcl9od19mcmVlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IG1pZ29yX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiT25ib2FyZCBNaWNyb3Bob25lIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiRXh0ZXJuYWwgTWljcm9waG9uZSIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogSGVhZHBob25lIG91dHB1dCBjb25uZWN0ZWQgdG8gTEhQL1JIUCwgZW5hYmxlIE9VVDQgZm9yIFZNSUQgKi8KKwl7ICJIZWFkcGhvbmUiLCBOVUxMLCAgIk9VVDQgVk1JRCIgfSwKKwl7ICJPVVQ0IFZNSUQiLCBOVUxMLCAgIkxIUCIgfSwKKwl7ICJPVVQ0IFZNSUQiLCBOVUxMLCAgIlJIUCIgfSwKKworCS8qIE9uLWJvYXJkIG1pY3JvcGhvbmUgKi8KKwl7ICJSTUlDTiIsIE5VTEwsICJNaWMgQmlhcyIgfSwKKwl7ICJSTUlDUCIsIE5VTEwsICJNaWMgQmlhcyIgfSwKKwl7ICJNaWMgQmlhcyIsIE5VTEwsICJPbmJvYXJkIE1pY3JvcGhvbmUiIH0sCisKKwkvKiBFeHRlcm5hbCBtaWNyb3Bob25lICovCisJeyAiTE1JQ04iLCBOVUxMLCAiTWljIEJpYXMiIH0sCisJeyAiTE1JQ1AiLCBOVUxMLCAiTWljIEJpYXMiIH0sCisJeyAiTWljIEJpYXMiLCBOVUxMLCAiRXh0ZXJuYWwgTWljcm9waG9uZSIgfSwKK307CisKK3N0YXRpYyBpbnQgbWlnb3JfZGFpX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG1pZ29yX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUobWlnb3JfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG1pZ29yIGRpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlIGdsdWUgLSBjb25uZWN0cyBjb2RlYyA8LS0+IENQVSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG1pZ29yX2RhaSA9IHsKKwkubmFtZSA9ICJ3bTg5NzgiLAorCS5zdHJlYW1fbmFtZSA9ICJXTTg5NzgiLAorCS5jcHVfZGFpID0gJnNpdV9pMnNfZGFpLAorCS5jb2RlY19kYWkgPSAmd204OTc4X2RhaSwKKwkub3BzID0gJm1pZ29yX2RhaV9vcHMsCisJLmluaXQgPSBtaWdvcl9kYWlfaW5pdCwKK307CisKKy8qIG1pZ29yIGF1ZGlvIG1hY2hpbmUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX21pZ29yID0geworCS5uYW1lID0gIk1pZ28tUiIsCisJLnBsYXRmb3JtID0gJnNpdV9wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSAmbWlnb3JfZGFpLAorCS5udW1fbGlua3MgPSAxLAorfTsKKworLyogbWlnb3IgYXVkaW8gc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG1pZ29yX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJnNuZF9zb2NfbWlnb3IsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODk3OCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptaWdvcl9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBtaWdvcl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGNsa19yZWdpc3Rlcigmc2l1bWNrYl9jbGspOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogUG9ydCBudW1iZXIgdXNlZCBvbiB0aGlzIG1hY2hpbmU6IHBvcnQgQiAqLworCW1pZ29yX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIDEpOworCWlmICghbWlnb3Jfc25kX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVwZGV2YWxsb2M7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEobWlnb3Jfc25kX2RldmljZSwgJm1pZ29yX3NuZF9kZXZkYXRhKTsKKworCW1pZ29yX3NuZF9kZXZkYXRhLmRldiA9ICZtaWdvcl9zbmRfZGV2aWNlLT5kZXY7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG1pZ29yX3NuZF9kZXZpY2UpOworCWlmIChyZXQpCisJCWdvdG8gZXBkZXZhZGQ7CisKKwlyZXR1cm4gMDsKKworZXBkZXZhZGQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChtaWdvcl9zbmRfZGV2aWNlKTsKK2VwZGV2YWxsb2M6CisJY2xrX3VucmVnaXN0ZXIoJnNpdW1ja2JfY2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWlnb3JfZXhpdCh2b2lkKQoreworCWNsa191bnJlZ2lzdGVyKCZzaXVtY2tiX2Nsayk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWlnb3Jfc25kX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KG1pZ29yX2luaXQpOworbW9kdWxlX2V4aXQobWlnb3JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBNaWdvciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3NpdS5oIGIvc291bmQvc29jL3NoL3NpdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYzA0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2gvc2l1LmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBzaXUuaCAtIEFMU0EgU29DIGRyaXZlciBmb3IgUmVuZXNhcyBTSDczNDMsIFNINzcyMiBTSVUgcGVyaXBoZXJhbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBDYXJsb3MgTXVub3ogPGNhcmxvc0BrZW5hdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgU0lVX0gKKyNkZWZpbmUgU0lVX0gKKworLyogQ29tbW9uIGtlcm5lbCBhbmQgdXNlci1zcGFjZSBmaXJtd2FyZS1idWlsZGluZyBkZWZpbmVzIGFuZCB0eXBlcyAqLworCisjZGVmaW5lIFlSQU0wX1NJWkUJCSgweDAwNDAgLyA0KQkJLyogMTYgKi8KKyNkZWZpbmUgWVJBTTFfU0laRQkJKDB4MDA4MCAvIDQpCQkvKiAzMiAqLworI2RlZmluZSBZUkFNMl9TSVpFCQkoMHgwMDQwIC8gNCkJCS8qIDE2ICovCisjZGVmaW5lIFlSQU0zX1NJWkUJCSgweDAwODAgLyA0KQkJLyogMzIgKi8KKyNkZWZpbmUgWVJBTTRfU0laRQkJKDB4MDA4MCAvIDQpCQkvKiAzMiAqLworI2RlZmluZSBZUkFNX0RFRl9TSVpFCQkoWVJBTTBfU0laRSArIFlSQU0xX1NJWkUgKyBZUkFNMl9TSVpFICsgXAorCQkJCSBZUkFNM19TSVpFICsgWVJBTTRfU0laRSkKKyNkZWZpbmUgWVJBTV9GSVJfU0laRQkJKDB4MDQwMCAvIDQpCQkvKiAyNTYgKi8KKyNkZWZpbmUgWVJBTV9JSVJfU0laRQkJKDB4MDIwMCAvIDQpCQkvKiAxMjggKi8KKworI2RlZmluZSBYUkFNMF9TSVpFCQkoMHgwNDAwIC8gNCkJCS8qIDI1NiAqLworI2RlZmluZSBYUkFNMV9TSVpFCQkoMHgwMjAwIC8gNCkJCS8qIDEyOCAqLworI2RlZmluZSBYUkFNMl9TSVpFCQkoMHgwMjAwIC8gNCkJCS8qIDEyOCAqLworCisvKiBQUkFNIHByb2dyYW0gYXJyYXkgc2l6ZSAqLworI2RlZmluZSBQUkFNMF9TSVpFCQkoMHgwMTAwIC8gNCkJCS8qIDY0ICovCisjZGVmaW5lIFBSQU0xX1NJWkUJCSgoMHgyMDAwIC0gMHgwMTAwKSAvIDQpCS8qIDE5ODQgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBzaXVfc3BiX3BhcmFtIHsKKwlfX3UzMglhYjFhOwkvKiBpbnB1dCBGSUZPIGFkZHJlc3MgKi8KKwlfX3UzMglhYjBhOwkvKiBvdXRwdXQgRklGTyBhZGRyZXNzICovCisJX191MzIJZGlyOwkvKiAwPXRoZSBhdGhlciBleGNlcHQgQ1BVT1VUUFVULCAxPUNQVUlOUFVUICovCisJX191MzIJZXZlbnQ7CS8qIFNQQiBwcm9ncmFtIHN0YXJ0aW5nIGNvbmRpdGlvbnMgKi8KKwlfX3UzMglzdGZpZm87CS8qIFNURklGTyByZWdpc3RlciBzZXR0aW5nIHZhbHVlICovCisJX191MzIJdHJkYXQ7CS8qIFRSREFUIHJlZ2lzdGVyIHNldHRpbmcgdmFsdWUgKi8KK307CisKK3N0cnVjdCBzaXVfZmlybXdhcmUgeworCV9fdTMyCQkJeXJhbV9maXJfY29lZmZbWVJBTV9GSVJfU0laRV07CisJX191MzIJCQlwcmFtMFtQUkFNMF9TSVpFXTsKKwlfX3UzMgkJCXByYW0xW1BSQU0xX1NJWkVdOworCV9fdTMyCQkJeXJhbTBbWVJBTTBfU0laRV07CisJX191MzIJCQl5cmFtMVtZUkFNMV9TSVpFXTsKKwlfX3UzMgkJCXlyYW0yW1lSQU0yX1NJWkVdOworCV9fdTMyCQkJeXJhbTNbWVJBTTNfU0laRV07CisJX191MzIJCQl5cmFtNFtZUkFNNF9TSVpFXTsKKwlfX3UzMgkJCXNwYnBhcl9udW07CisJc3RydWN0IHNpdV9zcGJfcGFyYW0Jc3BicGFyWzMyXTsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KKworI2RlZmluZSBTSVVfUEVSSU9EX0JZVEVTX01BWAk4MTkyCQkvKiBETUEgdHJhbnNmZXIvcGVyaW9kIHNpemUgKi8KKyNkZWZpbmUgU0lVX1BFUklPRF9CWVRFU19NSU4JMjU2CQkvKiBETUEgdHJhbnNmZXIvcGVyaW9kIHNpemUgKi8KKyNkZWZpbmUgU0lVX1BFUklPRFNfTUFYCQk2NAkJLyogTWF4IHBlcmlvZHMgaW4gYnVmZmVyICovCisjZGVmaW5lIFNJVV9QRVJJT0RTX01JTgkJNAkJLyogTWluIHBlcmlvZHMgaW4gYnVmZmVyICovCisjZGVmaW5lIFNJVV9CVUZGRVJfQllURVNfTUFYCShTSVVfUEVSSU9EX0JZVEVTX01BWCAqIFNJVV9QRVJJT0RTX01BWCkKKworLyogU0lVIHBvcnRzOiBvbmx5IG9uZSBjYW4gYmUgdXNlZCBhdCBhIHRpbWUgKi8KK2VudW0geworCVNJVV9QT1JUX0EsCisJU0lVX1BPUlRfQiwKKwlTSVVfUE9SVF9OVU0sCit9OworCisvKiBTSVUgY2xvY2sgY29uZmlndXJhdGlvbiAqLworZW51bSB7CisJU0lVX0NMS0FfUExMLAorCVNJVV9DTEtBX0VYVCwKKwlTSVVfQ0xLQl9QTEwsCisJU0lVX0NMS0JfRVhUCit9OworCitzdHJ1Y3Qgc2l1X2luZm8geworCWludAkJCXBvcnRfaWQ7CisJdTMyIF9faW9tZW0JCSpwcmFtOworCXUzMiBfX2lvbWVtCQkqeHJhbTsKKwl1MzIgX19pb21lbQkJKnlyYW07CisJdTMyIF9faW9tZW0JCSpyZWc7CisJc3RydWN0IHNpdV9maXJtd2FyZQlmdzsKK307CisKK3N0cnVjdCBzaXVfc3RyZWFtIHsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJCXRhc2tsZXQ7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCSpzdWJzdHJlYW07CisJc25kX3BjbV9mb3JtYXRfdAkJZm9ybWF0OworCXNpemVfdAkJCQlidWZfYnl0ZXM7CisJc2l6ZV90CQkJCXBlcmlvZF9ieXRlczsKKwlpbnQJCQkJY3VyX3BlcmlvZDsJLyogUGVyaW9kIGN1cnJlbnRseSBpbiBkbWEgKi8KKwl1MzIJCQkJdm9sdW1lOworCXNuZF9wY21fc2ZyYW1lc190CQl4ZmVyX2NudDsJLyogTnVtYmVyIG9mIGZyYW1lcyAqLworCXU4CQkJCXJ3X2ZsZzsJCS8qIHRyYW5zZmVyIHN0YXR1cyAqLworCS8qIERNQSBzdGF0dXMgKi8KKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqY2hhbjsJCS8qIERNQSBjaGFubmVsICovCisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yCSp0eF9kZXNjOworCWRtYV9jb29raWVfdAkJCWNvb2tpZTsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZQkJcGFyYW07Cit9OworCitzdHJ1Y3Qgc2l1X3BvcnQgeworCXVuc2lnbmVkIGxvbmcJCXBsYXlfY2FwOwkvKiBVc2VkIHRvIHRyYWNrIGZ1bGwgZHVwbGV4ICovCisJc3RydWN0IHNuZF9wY20JCSpwY207CisJc3RydWN0IHNpdV9zdHJlYW0JcGxheWJhY2s7CisJc3RydWN0IHNpdV9zdHJlYW0JY2FwdHVyZTsKKwl1MzIJCQlzdGZpZm87CQkvKiBTVEZJRk8gdmFsdWUgZnJvbSBmaXJtd2FyZSAqLworCXUzMgkJCXRyZGF0OwkJLyogVFJEQVQgdmFsdWUgZnJvbSBmaXJtd2FyZSAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBzaXVfcG9ydCAqc2l1X3BvcnRzW1NJVV9QT1JUX05VTV07CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNpdV9wb3J0ICpzaXVfcG9ydF9pbmZvKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPQorCQl0b19wbGF0Zm9ybV9kZXZpY2Uoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldik7CisJcmV0dXJuIHNpdV9wb3J0c1twZGV2LT5pZF07Cit9CisKKy8qIFJlZ2lzdGVyIGFjY2VzcyAqLworc3RhdGljIGlubGluZSB2b2lkIHNpdV93cml0ZTMyKHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzaXVfcmVhZDMyKHUzMiBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBfX3Jhd19yZWFkbChhZGRyKTsKK30KKworLyogU0lVIHJlZ2lzdGVycyAqLworI2RlZmluZSBTSVVfSUZDVEwJKDB4MDAwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TUkNUTAkoMHgwMDQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NGT1JNCSgweDAwOCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfQ0tDVEwJKDB4MDBjIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9UUkRBVAkoMHgwMTAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NURklGTwkoMHgwMTQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0RQQUsJKDB4MDFjIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9DS1JFVgkoMHgwMjAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0VWTlRDCSgweDAyOCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU0JDVEwJKDB4MDQwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQlBTRVQJKDB4MDQ0IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQkZTVFMJKDB4MDY4IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQkRWQ0EJKDB4MDZjIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQkRWQ0IJKDB4MDcwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQkFDVElWCSgweDA3NCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfRE1BSUEJKDB4MDkwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9ETUFJQgkoMHgwOTQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0RNQU9BCSgweDA5OCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfRE1BT0IJKDB4MDljIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9ETUFNTAkoMHgwYTAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NQU1RTCSgweDBjYyAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU1BDVEwJKDB4MGQwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9CUkdBU0VMCSgweDEwMCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfQlJSQQkoMHgxMDQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0JSR0JTRUwJKDB4MTA4IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9CUlJCCSgweDEwYyAvIHNpemVvZih1MzIpKQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gc2l1X3BsYXRmb3JtOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBzaXVfaTJzX2RhaTsKKworaW50IHNpdV9pbml0X3BvcnQoaW50IHBvcnQsIHN0cnVjdCBzaXVfcG9ydCAqKnBvcnRfaW5mbywgc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKK3ZvaWQgc2l1X2ZyZWVfcG9ydChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogU0lVX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9zaXVfZGFpLmMgYi9zb3VuZC9zb2Mvc2gvc2l1X2RhaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTJkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2gvc2l1X2RhaS5jCkBAIC0wLDAgKzEsODQ3IEBACisvKgorICogc2l1X2RhaS5jIC0gQUxTQSBTb0MgZHJpdmVyIGZvciBSZW5lc2FzIFNINzM0MywgU0g3NzIyIFNJVSBwZXJpcGhlcmFsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA2IENhcmxvcyBNdW5veiA8Y2FybG9zQGtlbmF0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vc2l1Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhaS5oPgorCisjaW5jbHVkZSAic2l1LmgiCisKKy8qIEJvYXJkIHNwZWNpZmljcyAqLworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKKyMgZGVmaW5lIFNJVV9NQVhfVk9MVU1FCQkweDEwMDAKKyNlbHNlCisjIGRlZmluZSBTSVVfTUFYX1ZPTFVNRQkJMHg3ZmZmCisjZW5kaWYKKworI2RlZmluZSBQUkFNX1NJWkUJMHgyMDAwCisjZGVmaW5lIFhSQU1fU0laRQkweDgwMAorI2RlZmluZSBZUkFNX1NJWkUJMHg4MDAKKworI2RlZmluZSBYUkFNX09GRlNFVAkweDQwMDAKKyNkZWZpbmUgWVJBTV9PRkZTRVQJMHg2MDAwCisjZGVmaW5lIFJFR19PRkZTRVQJMHhjMDAwCisKKyNkZWZpbmUgUExBWUJBQ0tfRU5BQkxFRAkxCisjZGVmaW5lIENBUFRVUkVfRU5BQkxFRAkJMgorCisjZGVmaW5lIFZPTFVNRV9DQVBUVVJFCQkwCisjZGVmaW5lIFZPTFVNRV9QTEFZQkFDSwkJMQorI2RlZmluZSBERkxUX1ZPTFVNRV9MRVZFTAkweDA4MDAwODAwCisKKy8qCisgKiBTUERJRiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBwb3J0IEEgYW5kIG9uIHNvbWUgU0lVIGltcGxlbWVudGF0aW9ucyBpdCBpcyBvbmx5CisgKiBhdmFpbGFibGUgZm9yIGlucHV0LiBEdWUgdG8gdGhlIGxhY2sgb2YgaGFyZHdhcmUgdG8gdGVzdCBpdCwgU1BESUYgaXMgbGVmdAorICogZGlzYWJsZWQgaW4gdGhpcyBkcml2ZXIgdmVyc2lvbgorICovCitzdHJ1Y3QgZm9ybWF0X2ZsYWcgeworCXUzMglpMnM7CisJdTMyCXBjbTsKKwl1MzIJc3BkaWY7CisJdTMyCW1hc2s7Cit9OworCitzdHJ1Y3QgcG9ydF9mbGFnIHsKKwlzdHJ1Y3QgZm9ybWF0X2ZsYWcJcGxheWJhY2s7CisJc3RydWN0IGZvcm1hdF9mbGFnCWNhcHR1cmU7Cit9OworCitzdGF0aWMgc3RydWN0IHBvcnRfZmxhZyBzaXVfZmxhZ3NbU0lVX1BPUlRfTlVNXSA9IHsKKwlbU0lVX1BPUlRfQV0gPSB7CisJCS5wbGF5YmFjayA9IHsKKwkJCS5pMnMJPSAweDUwMDAwMDAwLAorCQkJLnBjbQk9IDB4NDAwMDAwMDAsCisJCQkuc3BkaWYJPSAweDgwMDAwMDAwLAkvKiBub3Qgb24gYWxsIFNJVSB2ZXJzaW9ucyAqLworCQkJLm1hc2sJPSAweGQwMDAwMDAwLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCS5pMnMJPSAweDA1MDAwMDAwLAorCQkJLnBjbQk9IDB4MDQwMDAwMDAsCisJCQkuc3BkaWYJPSAweDA4MDAwMDAwLAorCQkJLm1hc2sJPSAweDBkMDAwMDAwLAorCQl9LAorCX0sCisJW1NJVV9QT1JUX0JdID0geworCQkucGxheWJhY2sgPSB7CisJCQkuaTJzCT0gMHgwMDUwMDAwMCwKKwkJCS5wY20JPSAweDAwNDAwMDAwLAorCQkJLnNwZGlmCT0gMCwJCS8qIGltcG9zc2libGUgLSB0dXJuIG9mZiAqLworCQkJLm1hc2sJPSAweDAwNTAwMDAwLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCS5pMnMJPSAweDAwMDUwMDAwLAorCQkJLnBjbQk9IDB4MDAwNDAwMDAsCisJCQkuc3BkaWYJPSAwLAkJLyogaW1wb3NzaWJsZSAtIHR1cm4gb2ZmICovCisJCQkubWFzawk9IDB4MDAwNTAwMDAsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHNpdV9kYWlfc3RhcnQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCisJZGV2X2RiZyhwb3J0X2luZm8tPnBjbS0+Y2FyZC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIFR1cm4gb24gU0lVIGNsb2NrICovCisJcG1fcnVudGltZV9nZXRfc3luYyhzaXVfaTJzX2RhaS5kZXYpOworCisJLyogSXNzdWUgc29mdHdhcmUgcmVzZXQgdG8gc2l1ICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TUkNUTCwgMCk7CisKKwkvKiBXYWl0IGZvciB0aGUgcmVzZXQgdG8gdGFrZSBlZmZlY3QgKi8KKwl1ZGVsYXkoMSk7CisKKwlwb3J0X2luZm8tPnN0ZmlmbyA9IDA7CisJcG9ydF9pbmZvLT50cmRhdCA9IDA7CisKKwkvKiBwb3J0QSwgcG9ydEIsIFNJVSBvcGVyYXRlICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TUkNUTCwgMHgzMDEpOworCisJLyogcG9ydEE9MjU2ZnMsIHBvcnRCPTI1NmZzICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9DS0NUTCwgMHg0MDQwMDAwMCk7CisKKwkvKiBwb3J0QSdzIEJSRyBkb2VzIG5vdCBkaXZpZGUgU0lVQ0tBICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9CUkdBU0VMLCAwKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0JSUkEsIDApOworCisJLyogcG9ydEIncyBCUkcgZGl2aWRlcyBTSVVDS0IgYnkgaGFsZiAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfQlJHQlNFTCwgMSk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9CUlJCLCAwKTsKKworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfSUZDVEwsIDB4NDQ0NDAwMDApOworCisJLyogcG9ydEE6IDMyIGJpdC9mcywgbWFzdGVyOyBwb3J0QjogMzIgYml0L2ZzLCBtYXN0ZXIgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NGT1JNLCAweDBjMGMwMDAwKTsKKworCS8qCisJICogVm9sdW1lIGxldmVsczogbG9va3MgbGlrZSB0aGUgRFNQIGZpcm13YXJlIGltcGxlbWVudHMgdm9sdW1lIGNvbnRyb2xzCisJICogZGlmZmVyZW50bHkgZnJvbSB3aGF0J3MgZGVzY3JpYmVkIGluIHRoZSBkYXRhc2hlZXQKKwkgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCRFZDQSwgcG9ydF9pbmZvLT5wbGF5YmFjay52b2x1bWUpOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JEVkNCLCBwb3J0X2luZm8tPmNhcHR1cmUudm9sdW1lKTsKK30KKworc3RhdGljIHZvaWQgc2l1X2RhaV9zdG9wKHZvaWQpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCisJLyogU0lVIHNvZnR3YXJlIHJlc2V0ICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TUkNUTCwgMCk7CisKKwkvKiBUdXJuIG9mZiBTSVUgY2xvY2sgKi8KKwlwbV9ydW50aW1lX3B1dF9zeW5jKHNpdV9pMnNfZGFpLmRldik7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9kYWlfc3BiQXNlbGVjdChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9maXJtd2FyZSAqZncgPSAmaW5mby0+Znc7CisJdTMyICp5ZGVmID0gZnctPnlyYW0wOworCXUzMiBpZHg7CisKKwkvKiBwYXRoIEEgdXNlICovCisJaWYgKCFpbmZvLT5wb3J0X2lkKQorCQlpZHggPSAxOwkJLyogcG9ydEEgKi8KKwllbHNlCisJCWlkeCA9IDI7CQkvKiBwb3J0QiAqLworCisJeWRlZlswXSA9IChmdy0+c3BicGFyW2lkeF0uYWIxYSA8PCAxNikgfAorCQkoZnctPnNwYnBhcltpZHhdLmFiMGEgPDwgOCkgfAorCQkoZnctPnNwYnBhcltpZHhdLmRpciA8PCA3KSB8IDM7CisJeWRlZlsxXSA9IGZ3LT55cmFtMFsxXTsJLyogMHgwMzAwMDMwMCAqLworCXlkZWZbMl0gPSAoMTYgLyAyKSA8PCAyNDsKKwl5ZGVmWzNdID0gZnctPnlyYW0wWzNdOwkvKiAwICovCisJeWRlZls0XSA9IGZ3LT55cmFtMFs0XTsJLyogMCAqLworCXlkZWZbN10gPSBmdy0+c3BicGFyW2lkeF0uZXZlbnQ7CisJcG9ydF9pbmZvLT5zdGZpZm8gfD0gZnctPnNwYnBhcltpZHhdLnN0ZmlmbzsKKwlwb3J0X2luZm8tPnRyZGF0IHw9IGZ3LT5zcGJwYXJbaWR4XS50cmRhdDsKK30KKworc3RhdGljIHZvaWQgc2l1X2RhaV9zcGJCc2VsZWN0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2l1X2Zpcm13YXJlICpmdyA9ICZpbmZvLT5mdzsKKwl1MzIgKnlkZWYgPSBmdy0+eXJhbTA7CisJdTMyIGlkeDsKKworCS8qIHBhdGggQiB1c2UgKi8KKwlpZiAoIWluZm8tPnBvcnRfaWQpCisJCWlkeCA9IDc7CQkvKiBwb3J0QSAqLworCWVsc2UKKwkJaWR4ID0gODsJCS8qIHBvcnRCICovCisKKwl5ZGVmWzVdID0gKGZ3LT5zcGJwYXJbaWR4XS5hYjFhIDw8IDE2KSB8CisJCShmdy0+c3BicGFyW2lkeF0uYWIwYSA8PCA4KSB8IDE7CisJeWRlZls2XSA9IGZ3LT5zcGJwYXJbaWR4XS5ldmVudDsKKwlwb3J0X2luZm8tPnN0ZmlmbyB8PSBmdy0+c3BicGFyW2lkeF0uc3RmaWZvOworCXBvcnRfaW5mby0+dHJkYXQgfD0gZnctPnNwYnBhcltpZHhdLnRyZGF0OworfQorCitzdGF0aWMgdm9pZCBzaXVfZGFpX29wZW4oc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXUzMiBzcmN0bCwgaWZjdGw7CisKKwlzcmN0bCA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TUkNUTCk7CisJaWZjdGwgPSBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfSUZDVEwpOworCisJc3dpdGNoIChpbmZvLT5wb3J0X2lkKSB7CisJY2FzZSBTSVVfUE9SVF9BOgorCQkvKiBwb3J0QSBvcGVyYXRlcyAqLworCQlzcmN0bCB8PSAweDIwMDsKKwkJaWZjdGwgJj0gfjB4YzI7CisJCWJyZWFrOworCWNhc2UgU0lVX1BPUlRfQjoKKwkJLyogcG9ydEIgb3BlcmF0ZXMgKi8KKwkJc3JjdGwgfD0gMHgxMDA7CisJCWlmY3RsICY9IH4weDMxOworCQlicmVhazsKKwl9CisKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NSQ1RMLCBzcmN0bCk7CisJLyogVW5tdXRlIGFuZCBjb25maWd1cmUgcG9ydEEgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0lGQ1RMLCBpZmN0bCk7Cit9CisKKy8qCisgKiBBdCB0aGUgbW9tZW50IG9ubHkgZml4ZWQgTGVmdC11cHBlciwgTGVmdC1sb3dlciwgUmlnaHQtdXBwZXIsIFJpZ2h0LWxvd2VyCisgKiBwYWNraW5nIGlzIHN1cHBvcnRlZAorICovCitzdGF0aWMgdm9pZCBzaXVfZGFpX3BjbWRhdGFwYWNrKHN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwl1MzIgZHBhazsKKworCWRwYWsgPSBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfRFBBSyk7CisKKwlzd2l0Y2ggKGluZm8tPnBvcnRfaWQpIHsKKwljYXNlIFNJVV9QT1JUX0E6CisJCWRwYWsgJj0gfjB4YzAwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgU0lVX1BPUlRfQjoKKwkJZHBhayAmPSB+MHgwMGMwMDAwMDsKKwkJYnJlYWs7CisJfQorCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9EUEFLLCBkcGFrKTsKK30KKworc3RhdGljIGludCBzaXVfZGFpX3NwYnN0YXJ0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwlzdHJ1Y3Qgc2l1X2Zpcm13YXJlICpmdyA9ICZpbmZvLT5mdzsKKwl1MzIgKnlkZWYgPSBmdy0+eXJhbTA7CisJaW50IGNudDsKKwl1MzIgX19pb21lbSAqYWRkOworCXUzMiAqcHRyOworCisJLyogTG9hZCBTUEIgUHJvZ3JhbSBpbiBQUkFNICovCisJcHRyID0gZnctPnByYW0wOworCWFkZCA9IGluZm8tPnByYW07CisJZm9yIChjbnQgPSAwOyBjbnQgPCBQUkFNMF9TSVpFOyBjbnQrKywgYWRkKyssIHB0cisrKQorCQlzaXVfd3JpdGUzMihhZGQsICpwdHIpOworCisJcHRyID0gZnctPnByYW0xOworCWFkZCA9IGluZm8tPnByYW0gKyAoMHgwMTAwIC8gc2l6ZW9mKHUzMikpOworCWZvciAoY250ID0gMDsgY250IDwgUFJBTTFfU0laRTsgY250KyssIGFkZCsrLCBwdHIrKykKKwkJc2l1X3dyaXRlMzIoYWRkLCAqcHRyKTsKKworCS8qIFhSQU0gaW5pdGlhbGl6YXRpb24gKi8KKwlhZGQgPSBpbmZvLT54cmFtOworCWZvciAoY250ID0gMDsgY250IDwgWFJBTTBfU0laRSArIFhSQU0xX1NJWkUgKyBYUkFNMl9TSVpFOyBjbnQrKywgYWRkKyspCisJCXNpdV93cml0ZTMyKGFkZCwgMCk7CisKKwkvKiBZUkFNIHZhcmlhYmxlIGFyZWEgaW5pdGlhbGl6YXRpb24gKi8KKwlhZGQgPSBpbmZvLT55cmFtOworCWZvciAoY250ID0gMDsgY250IDwgWVJBTV9ERUZfU0laRTsgY250KyssIGFkZCsrKQorCQlzaXVfd3JpdGUzMihhZGQsIHlkZWZbY250XSk7CisKKwkvKiBZUkFNIEZJUiBjb2VmZmljaWVudCBhcmVhIGluaXRpYWxpemF0aW9uICovCisJYWRkID0gaW5mby0+eXJhbSArICgweDAyMDAgLyBzaXplb2YodTMyKSk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBZUkFNX0ZJUl9TSVpFOyBjbnQrKywgYWRkKyspCisJCXNpdV93cml0ZTMyKGFkZCwgZnctPnlyYW1fZmlyX2NvZWZmW2NudF0pOworCisJLyogWVJBTSBJSVIgY29lZmZpY2llbnQgYXJlYSBpbml0aWFsaXphdGlvbiAqLworCWFkZCA9IGluZm8tPnlyYW0gKyAoMHgwNjAwIC8gc2l6ZW9mKHUzMikpOworCWZvciAoY250ID0gMDsgY250IDwgWVJBTV9JSVJfU0laRTsgY250KyssIGFkZCsrKQorCQlzaXVfd3JpdGUzMihhZGQsIDApOworCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9UUkRBVCwgcG9ydF9pbmZvLT50cmRhdCk7CisJcG9ydF9pbmZvLT50cmRhdCA9IDB4MDsKKworCisJLyogU1BCIHN0YXJ0IGNvbmRpdGlvbjogc29mdHdhcmUgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCQUNUSVYsIDApOworCS8qIFN0YXJ0IFNQQiAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JDVEwsIDB4YzAwMDAwMDApOworCS8qIFdhaXQgZm9yIHByb2dyYW0gdG8gaGFsdCAqLworCWNudCA9IDB4MTAwMDA7CisJd2hpbGUgKC0tY250ICYmIHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TQkNUTCkgIT0gMHg4MDAwMDAwMCkKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAoIWNudCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFNQQiBwcm9ncmFtIHN0YXJ0IGFkZHJlc3Mgc2V0dGluZyAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JQU0VULCAweDAwNDAwMDAwKTsKKwkvKiBTUEIgaGFyZHdhcmUgc3RhcnQoRklGT0NUTCBzb3VyY2UpICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkFDVElWLCAweGMwMDAwMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXVfZGFpX3NwYnN0b3Aoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkFDVElWLCAwKTsKKwkvKiBTUEIgc3RvcCAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JDVEwsIDApOworCisJcG9ydF9pbmZvLT5zdGZpZm8gPSAwOworfQorCisvKgkJQVBJIGZ1bmN0aW9ucwkJKi8KKworLyogUGxheWJhY2sgYW5kIGNhcHR1cmUgaGFyZHdhcmUgcHJvcGVydGllcyBhcmUgaWRlbnRpY2FsICovCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc2l1X2RhaV9wY21faHcgPSB7CisJLmluZm8JCQk9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVELAorCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2LAorCS5yYXRlcwkJCT0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4JCT0gODAwMCwKKwkucmF0ZV9tYXgJCT0gNDgwMDAsCisJLmNoYW5uZWxzX21pbgkJPSAyLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IFNJVV9CVUZGRVJfQllURVNfTUFYLAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gU0lVX1BFUklPRF9CWVRFU19NSU4sCisJLnBlcmlvZF9ieXRlc19tYXgJPSBTSVVfUEVSSU9EX0JZVEVTX01BWCwKKwkucGVyaW9kc19taW4JCT0gU0lVX1BFUklPRFNfTUlOLAorCS5wZXJpb2RzX21heAkJPSBTSVVfUEVSSU9EU19NQVgsCit9OworCitzdGF0aWMgaW50IHNpdV9kYWlfaW5mb192b2x1bWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmwsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdHJsKTsKKworCWRldl9kYmcocG9ydF9pbmZvLT5wY20tPmNhcmQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAyOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gU0lVX01BWF9WT0xVTUU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfZGFpX2dldF92b2x1bWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmwsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdHJsKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0X2luZm8tPnBjbS0+Y2FyZC0+ZGV2OworCXUzMiB2b2w7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGtjdHJsLT5wcml2YXRlX3ZhbHVlKSB7CisJY2FzZSBWT0xVTUVfUExBWUJBQ0s6CisJCS8qIFBsYXliYWNrIGlzIGFsd2F5cyBvbiBwb3J0IDAgKi8KKwkJdm9sID0gcG9ydF9pbmZvLT5wbGF5YmFjay52b2x1bWU7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdm9sICYgMHhmZmZmOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IHZvbCA+PiAxNiAmIDB4ZmZmZjsKKwkJYnJlYWs7CisJY2FzZSBWT0xVTUVfQ0FQVFVSRToKKwkJLyogQ2FwdHVyZSBpcyBhbHdheXMgb24gcG9ydCAxICovCisJCXZvbCA9IHBvcnRfaW5mby0+Y2FwdHVyZS52b2x1bWU7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdm9sICYgMHhmZmZmOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IHZvbCA+PiAxNiAmIDB4ZmZmZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlcygpIGludmFsaWQgcHJpdmF0ZV92YWx1ZT0lbGRcbiIsCisJCQlfX2Z1bmNfXywga2N0cmwtPnByaXZhdGVfdmFsdWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfZGFpX3B1dF92b2x1bWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmwsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdHJsKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0X2luZm8tPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwl1MzIgbmV3X3ZvbDsKKwl1MzIgY3VyX3ZvbDsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA8IDAgfHwKKwkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPiBTSVVfTUFYX1ZPTFVNRSB8fAorCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA8IDAgfHwKKwkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPiBTSVVfTUFYX1ZPTFVNRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXdfdm9sID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA8PCAxNjsKKworCS8qIFNlZSBjb21tZW50IGFib3ZlIC0gRFNQIGZpcm13YXJlIGltcGxlbWVudGF0aW9uICovCisJc3dpdGNoIChrY3RybC0+cHJpdmF0ZV92YWx1ZSkgeworCWNhc2UgVk9MVU1FX1BMQVlCQUNLOgorCQkvKiBQbGF5YmFjayBpcyBhbHdheXMgb24gcG9ydCAwICovCisJCWN1cl92b2wgPSBwb3J0X2luZm8tPnBsYXliYWNrLnZvbHVtZTsKKwkJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkRWQ0EsIG5ld192b2wpOworCQlwb3J0X2luZm8tPnBsYXliYWNrLnZvbHVtZSA9IG5ld192b2w7CisJCWJyZWFrOworCWNhc2UgVk9MVU1FX0NBUFRVUkU6CisJCS8qIENhcHR1cmUgaXMgYWx3YXlzIG9uIHBvcnQgMSAqLworCQljdXJfdm9sID0gcG9ydF9pbmZvLT5jYXB0dXJlLnZvbHVtZTsKKwkJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkRWQ0IsIG5ld192b2wpOworCQlwb3J0X2luZm8tPmNhcHR1cmUudm9sdW1lID0gbmV3X3ZvbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlcygpIGludmFsaWQgcHJpdmF0ZV92YWx1ZT0lbGRcbiIsCisJCQlfX2Z1bmNfXywga2N0cmwtPnByaXZhdGVfdmFsdWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY3VyX3ZvbCAhPSBuZXdfdm9sKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcGxheWJhY2tfY29udHJvbHMgPSB7CisJLmlmYWNlCQk9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lCQk9ICJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkuaW5kZXgJCT0gMCwKKwkuaW5mbwkJPSBzaXVfZGFpX2luZm9fdm9sdW1lLAorCS5nZXQJCT0gc2l1X2RhaV9nZXRfdm9sdW1lLAorCS5wdXQJCT0gc2l1X2RhaV9wdXRfdm9sdW1lLAorCS5wcml2YXRlX3ZhbHVlCT0gVk9MVU1FX1BMQVlCQUNLLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNhcHR1cmVfY29udHJvbHMgPSB7CisJLmlmYWNlCQk9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lCQk9ICJQQ00gQ2FwdHVyZSBWb2x1bWUiLAorCS5pbmRleAkJPSAwLAorCS5pbmZvCQk9IHNpdV9kYWlfaW5mb192b2x1bWUsCisJLmdldAkJPSBzaXVfZGFpX2dldF92b2x1bWUsCisJLnB1dAkJPSBzaXVfZGFpX3B1dF92b2x1bWUsCisJLnByaXZhdGVfdmFsdWUJPSBWT0xVTUVfQ0FQVFVSRSwKK307CisKK2ludCBzaXVfaW5pdF9wb3J0KGludCBwb3J0LCBzdHJ1Y3Qgc2l1X3BvcnQgKipwb3J0X2luZm8sIHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjYXJkLT5kZXY7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmw7CisJaW50IHJldDsKKworCSpwb3J0X2luZm8gPSBremFsbG9jKHNpemVvZigqKnBvcnRfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghKnBvcnRfaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZfZGJnKGRldiwgIiVzOiBwb3J0ICMlZEAlcFxuIiwgX19mdW5jX18sIHBvcnQsICpwb3J0X2luZm8pOworCisJKCpwb3J0X2luZm8pLT5wbGF5YmFjay52b2x1bWUgPSBERkxUX1ZPTFVNRV9MRVZFTDsKKwkoKnBvcnRfaW5mbyktPmNhcHR1cmUudm9sdW1lID0gREZMVF9WT0xVTUVfTEVWRUw7CisKKwkvKgorCSAqIEFkZCBtaXhlciBzdXBwb3J0LiBUaGUgU1BCIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSB2b2x1bWUuIEJvdGgKKwkgKiBwb3J0cyB1c2UgdGhlIHNhbWUgU1BCLiBUaGVyZWZvcmUsIHdlIG9ubHkgcmVnaXN0ZXIgb25lCisJICogY29udHJvbCBpbnN0YW5jZSBzaW5jZSBpdCB3aWxsIGJlIHVzZWQgYnkgYm90aCBjaGFubmVscy4KKwkgKiBJbiBlcnJvciBjYXNlIHdlIGNvbnRpbnVlIHdpdGhvdXQgY29udHJvbHMuCisJICovCisJa2N0cmwgPSBzbmRfY3RsX25ldzEoJnBsYXliYWNrX2NvbnRyb2xzLCAqcG9ydF9pbmZvKTsKKwlyZXQgPSBzbmRfY3RsX2FkZChjYXJkLCBrY3RybCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZGV2LAorCQkJImZhaWxlZCB0byBhZGQgcGxheWJhY2sgY29udHJvbHMgJXAgcG9ydD0lZCBlcnI9JWRcbiIsCisJCQlrY3RybCwgcG9ydCwgcmV0KTsKKworCWtjdHJsID0gc25kX2N0bF9uZXcxKCZjYXB0dXJlX2NvbnRyb2xzLCAqcG9ydF9pbmZvKTsKKwlyZXQgPSBzbmRfY3RsX2FkZChjYXJkLCBrY3RybCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZGV2LAorCQkJImZhaWxlZCB0byBhZGQgY2FwdHVyZSBjb250cm9scyAlcCBwb3J0PSVkIGVycj0lZFxuIiwKKwkJCWtjdHJsLCBwb3J0LCByZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2l1X2ZyZWVfcG9ydChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlrZnJlZShwb3J0X2luZm8pOworfQorCitzdGF0aWMgaW50IHNpdV9kYWlfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydCA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc2l1X3BvcnQJKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3Vic3RyZWFtKTsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LCAiJXM6IHBvcnQ9JWRAJXBcbiIsIF9fZnVuY19fLAorCQlpbmZvLT5wb3J0X2lkLCBwb3J0X2luZm8pOworCisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZzaXVfZGFpX3BjbV9odyk7CisKKwlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydCwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkKKwkJcmV0dXJuIHJldDsKKworCXNpdV9kYWlfc3RhcnQocG9ydF9pbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXVfZGFpX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9wb3J0CSpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHN1YnN0cmVhbSk7CisKKwlkZXZfZGJnKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsICIlczogcG9ydD0lZEAlcFxuIiwgX19mdW5jX18sCisJCWluZm8tPnBvcnRfaWQsIHBvcnRfaW5mbyk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJcG9ydF9pbmZvLT5wbGF5X2NhcCAmPSB+UExBWUJBQ0tfRU5BQkxFRDsKKwllbHNlCisJCXBvcnRfaW5mby0+cGxheV9jYXAgJj0gfkNBUFRVUkVfRU5BQkxFRDsKKworCS8qIFN0b3AgdGhlIHNpdSBpZiB0aGUgb3RoZXIgc3RyZWFtIGlzIG5vdCB1c2luZyBpdCAqLworCWlmICghcG9ydF9pbmZvLT5wbGF5X2NhcCkgeworCQkvKiBkdXJpbmcgc3RtcmVhZCBvciBzdG13cml0ZSA/ICovCisJCUJVR19PTihwb3J0X2luZm8tPnBsYXliYWNrLnJ3X2ZsZyB8fCBwb3J0X2luZm8tPmNhcHR1cmUucndfZmxnKTsKKwkJc2l1X2RhaV9zcGJzdG9wKHBvcnRfaW5mbyk7CisJCXNpdV9kYWlfc3RvcCgpOworCX0KK30KKworLyogUENNIHBhcnQgb2Ygc2l1X2RhaV9wbGF5YmFja19wcmVwYXJlKCkgLyBzaXVfZGFpX2NhcHR1cmVfcHJlcGFyZSgpICovCitzdGF0aWMgaW50IHNpdV9kYWlfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydCA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbTsKKwlpbnQgc2VsZiwgcmV0OworCisJZGV2X2RiZyhzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LAorCQkiJXM6IHBvcnQgJWQsIGFjdGl2ZSBzdHJlYW1zICVseCwgJWQgY2hhbm5lbHNcbiIsCisJCV9fZnVuY19fLCBpbmZvLT5wb3J0X2lkLCBwb3J0X2luZm8tPnBsYXlfY2FwLCBydC0+Y2hhbm5lbHMpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJc2VsZiA9IFBMQVlCQUNLX0VOQUJMRUQ7CisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwl9IGVsc2UgeworCQlzZWxmID0gQ0FQVFVSRV9FTkFCTEVEOworCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIHNpdSBpZiBub3QgYWxyZWFkeSBkb25lICovCisJaWYgKCFwb3J0X2luZm8tPnBsYXlfY2FwKSB7CisJCXNpdV9zdHJlYW0tPnJ3X2ZsZyA9IDA7CS8qIHN0cmVhbS1kYXRhIHRyYW5zZmVyIGZsYWcgKi8KKworCQlzaXVfZGFpX3NwYkFzZWxlY3QocG9ydF9pbmZvKTsKKwkJc2l1X2RhaV9zcGJCc2VsZWN0KHBvcnRfaW5mbyk7CisKKwkJc2l1X2RhaV9vcGVuKHNpdV9zdHJlYW0pOworCisJCXNpdV9kYWlfcGNtZGF0YXBhY2soc2l1X3N0cmVhbSk7CisKKwkJcmV0ID0gc2l1X2RhaV9zcGJzdGFydChwb3J0X2luZm8pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlwb3J0X2luZm8tPnBsYXlfY2FwIHw9IHNlbGY7CisKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNJVSBjYW4gc2V0IGJ1cyBmb3JtYXQgdG8gSTJTIC8gUENNIC8gU1BESUYgaW5kZXBlbmRlbnRseSBmb3IgcGxheWJhY2sgYW5kCisgKiBjYXB0dXJlLCBob3dldmVyLCB0aGUgY3VycmVudCBBUEkgc2V0cyB0aGUgYnVzIGZvcm1hdCBnbG9iYWxseSBmb3IgYSBEQUkuCisgKi8KK3N0YXRpYyBpbnQgc2l1X2RhaV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkJICAgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJdTMyIGlmY3RsOworCisJZGV2X2RiZyhkYWktPmRldiwgIiVzOiBmbXQgMHgleCBvbiBwb3J0ICVkXG4iLAorCQlfX2Z1bmNfXywgZm10LCBpbmZvLT5wb3J0X2lkKTsKKworCWlmIChpbmZvLT5wb3J0X2lkIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBIZXJlIHNlbGVjdCBiZXR3ZWVuIEkyUyAvIFBDTSAvIFNQRElGICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpZmN0bCA9IHNpdV9mbGFnc1tpbmZvLT5wb3J0X2lkXS5wbGF5YmFjay5pMnMgfAorCQkJc2l1X2ZsYWdzW2luZm8tPnBvcnRfaWRdLmNhcHR1cmUuaTJzOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaWZjdGwgPSBzaXVfZmxhZ3NbaW5mby0+cG9ydF9pZF0ucGxheWJhY2sucGNtIHwKKwkJCXNpdV9mbGFnc1tpbmZvLT5wb3J0X2lkXS5jYXB0dXJlLnBjbTsKKwkJYnJlYWs7CisJLyogU1BESUYgZGlzYWJsZWQgLSBzZWUgY29tbWVudCBhdCB0aGUgdG9wICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWZjdGwgfD0gfihzaXVfZmxhZ3NbaW5mby0+cG9ydF9pZF0ucGxheWJhY2subWFzayB8CisJCSAgIHNpdV9mbGFnc1tpbmZvLT5wb3J0X2lkXS5jYXB0dXJlLm1hc2spICYKKwkJc2l1X3JlYWQzMihiYXNlICsgU0lVX0lGQ1RMKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0lGQ1RMLCBpZmN0bCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfZGFpX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBjbGtfaWQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3QgY2xrICpzaXVfY2xrLCAqcGFyZW50X2NsazsKKwljaGFyICpzaXVfbmFtZSwgKnBhcmVudF9uYW1lOworCWludCByZXQ7CisKKwlpZiAoZGlyICE9IFNORF9TT0NfQ0xPQ0tfSU4pCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2X2RiZyhkYWktPmRldiwgIiVzOiB1c2luZyBjbG9jayAlZFxuIiwgX19mdW5jX18sIGNsa19pZCk7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgU0lVX0NMS0FfUExMOgorCQlzaXVfbmFtZSA9ICJzaXVhX2NsayI7CisJCXBhcmVudF9uYW1lID0gInBsbF9jbGsiOworCQlicmVhazsKKwljYXNlIFNJVV9DTEtBX0VYVDoKKwkJc2l1X25hbWUgPSAic2l1YV9jbGsiOworCQlwYXJlbnRfbmFtZSA9ICJzaXVtY2thX2NsayI7CisJCWJyZWFrOworCWNhc2UgU0lVX0NMS0JfUExMOgorCQlzaXVfbmFtZSA9ICJzaXViX2NsayI7CisJCXBhcmVudF9uYW1lID0gInBsbF9jbGsiOworCQlicmVhazsKKwljYXNlIFNJVV9DTEtCX0VYVDoKKwkJc2l1X25hbWUgPSAic2l1Yl9jbGsiOworCQlwYXJlbnRfbmFtZSA9ICJzaXVtY2tiX2NsayI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNpdV9jbGsgPSBjbGtfZ2V0KHNpdV9pMnNfZGFpLmRldiwgc2l1X25hbWUpOworCWlmIChJU19FUlIoc2l1X2NsaykpCisJCXJldHVybiBQVFJfRVJSKHNpdV9jbGspOworCisJcGFyZW50X2NsayA9IGNsa19nZXQoc2l1X2kyc19kYWkuZGV2LCBwYXJlbnRfbmFtZSk7CisJaWYgKCFJU19FUlIocGFyZW50X2NsaykpIHsKKwkJcmV0ID0gY2xrX3NldF9wYXJlbnQoc2l1X2NsaywgcGFyZW50X2Nsayk7CisJCWlmICghcmV0KQorCQkJY2xrX3NldF9yYXRlKHNpdV9jbGssIGZyZXEpOworCQljbGtfcHV0KHBhcmVudF9jbGspOworCX0KKworCWNsa19wdXQoc2l1X2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc2l1X2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBzaXVfZGFpX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gc2l1X2RhaV9zaHV0ZG93biwKKwkucHJlcGFyZQk9IHNpdV9kYWlfcHJlcGFyZSwKKwkuc2V0X3N5c2Nsawk9IHNpdV9kYWlfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdAk9IHNpdV9kYWlfc2V0X2ZtdCwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBzaXVfaTJzX2RhaSA9IHsKKwkubmFtZSA9ICJzaC1zaXUiLAorCS5pZCA9IDAsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTYsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2LAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCSB9LAorCS5vcHMgPSAmc2l1X2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc2l1X2kyc19kYWkpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqcmVnaW9uOworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbzsKKwlpbnQgcmV0OworCisJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAic2l1X3NwYi5iaW4iLCAmcGRldi0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVyZXFmdzsKKworCS8qCisJICogTG9hZGVkIGZpcm13YXJlIGlzICJjb25zdCIgLSByZWFkIG9ubHksIGJ1dCB3ZSBoYXZlIHRvIG1vZGlmeSBpdCBpbgorCSAqIHNuZF9zaXVfc2g3MzQzX3NwYkFzZWxlY3QoKSBhbmQgc25kX3NpdV9zaDczNDNfc3BiQnNlbGVjdCgpCisJICovCisJbWVtY3B5KCZpbmZvLT5mdywgZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKKworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVnZXRyZXM7CisJfQorCisJcmVnaW9uID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKKwkJCQkgICAgcGRldi0+bmFtZSk7CisJaWYgKCFyZWdpb24pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiU0lVIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJlcW1lbXJlZzsKKwl9CisKKwlyZXQgPSAtRU5PTUVNOworCWluZm8tPnByYW0gPSBpb3JlbWFwKHJlcy0+c3RhcnQsIFBSQU1fU0laRSk7CisJaWYgKCFpbmZvLT5wcmFtKQorCQlnb3RvIGVtYXBwcmFtOworCWluZm8tPnhyYW0gPSBpb3JlbWFwKHJlcy0+c3RhcnQgKyBYUkFNX09GRlNFVCwgWFJBTV9TSVpFKTsKKwlpZiAoIWluZm8tPnhyYW0pCisJCWdvdG8gZW1hcHhyYW07CisJaW5mby0+eXJhbSA9IGlvcmVtYXAocmVzLT5zdGFydCArIFlSQU1fT0ZGU0VULCBZUkFNX1NJWkUpOworCWlmICghaW5mby0+eXJhbSkKKwkJZ290byBlbWFweXJhbTsKKwlpbmZvLT5yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQgKyBSRUdfT0ZGU0VULCByZXNvdXJjZV9zaXplKHJlcykgLQorCQkJICAgIFJFR19PRkZTRVQpOworCWlmICghaW5mby0+cmVnKQorCQlnb3RvIGVtYXByZWc7CisKKwlzaXVfaTJzX2RhaS5kZXYgPSAmcGRldi0+ZGV2OworCXNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YSA9IGluZm87CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMoJnNpdV9pMnNfZGFpLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlZGFpaW5pdDsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJnNpdV9wbGF0Zm9ybSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXNvY3JlZ3A7CisKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKworCXJldHVybiByZXQ7CisKK2Vzb2NyZWdwOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZzaXVfaTJzX2RhaSwgMSk7CitlZGFpaW5pdDoKKwlpb3VubWFwKGluZm8tPnJlZyk7CitlbWFwcmVnOgorCWlvdW5tYXAoaW5mby0+eXJhbSk7CitlbWFweXJhbToKKwlpb3VubWFwKGluZm8tPnhyYW0pOworZW1hcHhyYW06CisJaW91bm1hcChpbmZvLT5wcmFtKTsKK2VtYXBwcmFtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZXJlcW1lbXJlZzoKK2VnZXRyZXM6CitlcmVxZnc6CisJa2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzaXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZzaXVfcGxhdGZvcm0pOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZzaXVfaTJzX2RhaSwgMSk7CisKKwlpb3VubWFwKGluZm8tPnJlZyk7CisJaW91bm1hcChpbmZvLT55cmFtKTsKKwlpb3VubWFwKGluZm8tPnhyYW0pOworCWlvdW5tYXAoaW5mby0+cHJhbSk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlrZnJlZShpbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaXVfZHJpdmVyID0geworCS5kcml2ZXIgCT0geworCQkubmFtZQk9ICJzaF9zaXUiLAorCX0sCisJLnByb2JlCQk9IHNpdV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNpdV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2l1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaXVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNpdV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNpdV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzaXVfaW5pdCkKK21vZHVsZV9leGl0KHNpdV9leGl0KQorCitNT0RVTEVfQVVUSE9SKCJDYXJsb3MgTXVub3ogPGNhcmxvc0BrZW5hdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBTSDc3MjIgU0lVIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3NpdV9wY20uYyBiL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlZmMzMAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMKQEAgLTAsMCArMSw2MTYgQEAKKy8qCisgKiBzaXVfcGNtLmMgLSBBTFNBIGRyaXZlciBmb3IgUmVuZXNhcyBTSDczNDMsIFNINzcyMiBTSVUgcGVyaXBoZXJhbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBDYXJsb3MgTXVub3ogPGNhcmxvc0BrZW5hdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KKworI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKyNpbmNsdWRlIDxhc20vc2l1Lmg+CisKKyNpbmNsdWRlICJzaXUuaCIKKworI2RlZmluZSBHRVRfTUFYX1BFUklPRFMoYnVmX2J5dGVzLCBwZXJpb2RfYnl0ZXMpIFwKKwkJCQkoKGJ1Zl9ieXRlcykgLyAocGVyaW9kX2J5dGVzKSkKKyNkZWZpbmUgUEVSSU9EX09GRlNFVChidWZfYWRkciwgcGVyaW9kX251bSwgcGVyaW9kX2J5dGVzKSBcCisJCQkJKChidWZfYWRkcikgKyAoKHBlcmlvZF9udW0pICogKHBlcmlvZF9ieXRlcykpKQorCisjZGVmaW5lIFJXRl9TVE1fUkQJCTB4MDEJCS8qIFJlYWQgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgUldGX1NUTV9XVAkJMHgwMgkJLyogV3JpdGUgaW4gcHJvZ3Jlc3MgKi8KKworc3RydWN0IHNpdV9wb3J0ICpzaXVfcG9ydHNbU0lVX1BPUlRfTlVNXTsKKworLyogdHJhbnNmZXJzaXplIGlzIG51bWJlciBvZiB1MzIgZG1hIHRyYW5zZmVycyBwZXIgcGVyaW9kICovCitzdGF0aWMgaW50IHNpdV9wY21fc3Rtd3JpdGVfc3RvcChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwl1MzIgc3RmaWZvOworCisJaWYgKCFzaXVfc3RyZWFtLT5yd19mbGcpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBvdXRwdXQgRklGTyBkaXNhYmxlICovCisJc3RmaWZvID0gc2l1X3JlYWQzMihiYXNlICsgU0lVX1NURklGTyk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TVEZJRk8sIHN0ZmlmbyAmIH4weDBjMTgwYzE4KTsKKwlwcl9kZWJ1ZygiJXM6IFNURklGTyAleCAtPiAleFxuIiwgX19mdW5jX18sCisJCSBzdGZpZm8sIHN0ZmlmbyAmIH4weDBjMTgwYzE4KTsKKworCS8qIGR1cmluZyBzdG13cml0ZSBjbGVhciAqLworCXNpdV9zdHJlYW0tPnJ3X2ZsZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3N0bXdyaXRlX3N0YXJ0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisKKwlpZiAoc2l1X3N0cmVhbS0+cndfZmxnKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogQ3VycmVudCBwZXJpb2QgaW4gYnVmZmVyICovCisJcG9ydF9pbmZvLT5wbGF5YmFjay5jdXJfcGVyaW9kID0gMDsKKworCS8qIGR1cmluZyBzdG13cml0ZSBmbGFnIHNldCAqLworCXNpdV9zdHJlYW0tPnJ3X2ZsZyA9IFJXRl9TVE1fV1Q7CisKKwkvKiBETUEgdHJhbnNmZXIgc3RhcnQgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZzaXVfc3RyZWFtLT50YXNrbGV0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXVfZG1hX3R4X2NvbXBsZXRlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9IGFyZzsKKworCWlmICghc2l1X3N0cmVhbS0+cndfZmxnKQorCQlyZXR1cm47CisKKwkvKiBVcGRhdGUgY29tcGxldGVkIHBlcmlvZCBjb3VudCAqLworCWlmICgrK3NpdV9zdHJlYW0tPmN1cl9wZXJpb2QgPj0KKwkgICAgR0VUX01BWF9QRVJJT0RTKHNpdV9zdHJlYW0tPmJ1Zl9ieXRlcywKKwkJCSAgICBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpKQorCQlzaXVfc3RyZWFtLT5jdXJfcGVyaW9kID0gMDsKKworCXByX2RlYnVnKCIlczogZG9uZSBwZXJpb2QgIyVkICgldS8ldSBieXRlcyksIGNvb2tpZSAlZFxuIiwKKwkJX19mdW5jX18sIHNpdV9zdHJlYW0tPmN1cl9wZXJpb2QsCisJCXNpdV9zdHJlYW0tPmN1cl9wZXJpb2QgKiBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMsCisJCXNpdV9zdHJlYW0tPmJ1Zl9ieXRlcywgc2l1X3N0cmVhbS0+Y29va2llKTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJnNpdV9zdHJlYW0tPnRhc2tsZXQpOworCisJLyogTm90aWZ5IGFsc2E6IGEgcGVyaW9kIGlzIGRvbmUgKi8KKwlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHNpdV9zdHJlYW0tPnN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV93cl9zZXQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8sCisJCQkgIGRtYV9hZGRyX3QgYnVmZiwgdTMyIHNpemUpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBzaXVfc3RyZWFtLT5zdWJzdHJlYW07CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJdTMyIHN0ZmlmbzsKKworCXNnX2luaXRfdGFibGUoJnNnLCAxKTsKKwlzZ19zZXRfcGFnZSgmc2csIHBmbl90b19wYWdlKFBGTl9ET1dOKGJ1ZmYpKSwKKwkJICAgIHNpemUsIG9mZnNldF9pbl9wYWdlKGJ1ZmYpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2cpID0gYnVmZjsKKworCWRlc2MgPSBzaXVfc3RyZWFtLT5jaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKHNpdV9zdHJlYW0tPmNoYW4sCisJCSZzZywgMSwgRE1BX1RPX0RFVklDRSwgRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKKwlpZiAoIWRlc2MpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgYSBkbWEgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRlc2MtPmNhbGxiYWNrID0gc2l1X2RtYV90eF9jb21wbGV0ZTsKKwlkZXNjLT5jYWxsYmFja19wYXJhbSA9IHNpdV9zdHJlYW07CisJY29va2llID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCWlmIChjb29raWUgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHN1Ym1pdCBhIGRtYSB0cmFuc2ZlclxuIik7CisJCXJldHVybiBjb29raWU7CisJfQorCisJc2l1X3N0cmVhbS0+dHhfZGVzYyA9IGRlc2M7CisJc2l1X3N0cmVhbS0+Y29va2llID0gY29va2llOworCisJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoc2l1X3N0cmVhbS0+Y2hhbik7CisKKwkvKiBvbmx5IG91dHB1dCBGSUZPIGVuYWJsZSAqLworCXN0ZmlmbyA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TVEZJRk8pOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1RGSUZPLCBzdGZpZm8gfCAocG9ydF9pbmZvLT5zdGZpZm8gJiAweDBjMTgwYzE4KSk7CisJZGV2X2RiZyhkZXYsICIlczogU1RGSUZPICV4IC0+ICV4XG4iLCBfX2Z1bmNfXywKKwkJc3RmaWZvLCBzdGZpZm8gfCAocG9ydF9pbmZvLT5zdGZpZm8gJiAweDBjMTgwYzE4KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3JkX3NldChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbywKKwkJCSAgZG1hX2FkZHJfdCBidWZmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gc2l1X3N0cmVhbS0+c3Vic3RyZWFtOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjOworCWRtYV9jb29raWVfdCBjb29raWU7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCXUzMiBzdGZpZm87CisKKwlkZXZfZGJnKGRldiwgIiVzOiAldUAlbGx4XG4iLCBfX2Z1bmNfXywgc2l6ZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylidWZmKTsKKworCXNnX2luaXRfdGFibGUoJnNnLCAxKTsKKwlzZ19zZXRfcGFnZSgmc2csIHBmbl90b19wYWdlKFBGTl9ET1dOKGJ1ZmYpKSwKKwkJICAgIHNpemUsIG9mZnNldF9pbl9wYWdlKGJ1ZmYpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2cpID0gYnVmZjsKKworCWRlc2MgPSBzaXVfc3RyZWFtLT5jaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKHNpdV9zdHJlYW0tPmNoYW4sCisJCSZzZywgMSwgRE1BX0ZST01fREVWSUNFLCBETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOworCWlmICghZGVzYykgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRlc2MtPmNhbGxiYWNrID0gc2l1X2RtYV90eF9jb21wbGV0ZTsKKwlkZXNjLT5jYWxsYmFja19wYXJhbSA9IHNpdV9zdHJlYW07CisJY29va2llID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCWlmIChjb29raWUgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHN1Ym1pdCBkbWEgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiBjb29raWU7CisJfQorCisJc2l1X3N0cmVhbS0+dHhfZGVzYyA9IGRlc2M7CisJc2l1X3N0cmVhbS0+Y29va2llID0gY29va2llOworCisJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoc2l1X3N0cmVhbS0+Y2hhbik7CisKKwkvKiBvbmx5IGlucHV0IEZJRk8gZW5hYmxlICovCisJc3RmaWZvID0gc2l1X3JlYWQzMihiYXNlICsgU0lVX1NURklGTyk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TVEZJRk8sIHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TVEZJRk8pIHwKKwkJICAgIChwb3J0X2luZm8tPnN0ZmlmbyAmIDB4MTMwNzEzMDcpKTsKKwlkZXZfZGJnKGRldiwgIiVzOiBTVEZJRk8gJXggLT4gJXhcbiIsIF9fZnVuY19fLAorCQlzdGZpZm8sIHN0ZmlmbyB8IChwb3J0X2luZm8tPnN0ZmlmbyAmIDB4MTMwNzEzMDcpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXVfaW9fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAoc3RydWN0IHNpdV9zdHJlYW0gKilkYXRhOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gc2l1X3N0cmVhbS0+c3Vic3RyZWFtOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnQgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHN1YnN0cmVhbSk7CisKKwlkZXZfZGJnKGRldiwgIiVzOiBmbGFncyAleFxuIiwgX19mdW5jX18sIHNpdV9zdHJlYW0tPnJ3X2ZsZyk7CisKKwlpZiAoIXNpdV9zdHJlYW0tPnJ3X2ZsZykgeworCQlkZXZfZGJnKGRldiwgIiVzOiBzdHJlYW0gaW5hY3RpdmVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpIHsKKwkJZG1hX2FkZHJfdCBidWZmOworCQlzaXplX3QgY291bnQ7CisJCXU4ICp2aXJ0OworCisJCWJ1ZmYgPSAoZG1hX2FkZHJfdClQRVJJT0RfT0ZGU0VUKHJ0LT5kbWFfYWRkciwKKwkJCQkJCXNpdV9zdHJlYW0tPmN1cl9wZXJpb2QsCisJCQkJCQlzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpOworCQl2aXJ0ID0gUEVSSU9EX09GRlNFVChydC0+ZG1hX2FyZWEsCisJCQkJICAgICBzaXVfc3RyZWFtLT5jdXJfcGVyaW9kLAorCQkJCSAgICAgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKTsKKwkJY291bnQgPSBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXM7CisKKwkJLyogRE1BIHRyYW5zZmVyIHN0YXJ0ICovCisJCXNpdV9wY21fcmRfc2V0KHBvcnRfaW5mbywgYnVmZiwgY291bnQpOworCX0gZWxzZSB7CisJCXNpdV9wY21fd3Jfc2V0KHBvcnRfaW5mbywKKwkJCSAgICAgICAoZG1hX2FkZHJfdClQRVJJT0RfT0ZGU0VUKHJ0LT5kbWFfYWRkciwKKwkJCQkJCXNpdV9zdHJlYW0tPmN1cl9wZXJpb2QsCisJCQkJCQlzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpLAorCQkJICAgICAgIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcyk7CisJfQorfQorCisvKiBDYXB0dXJlICovCitzdGF0aWMgaW50IHNpdV9wY21fc3RtcmVhZF9zdGFydChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisKKwlpZiAoc2l1X3N0cmVhbS0+eGZlcl9jbnQgPiAweDEwMDAwMDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzaXVfc3RyZWFtLT5yd19mbGcpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBDdXJyZW50IHBlcmlvZCBpbiBidWZmZXIgKi8KKwlzaXVfc3RyZWFtLT5jdXJfcGVyaW9kID0gMDsKKworCS8qIGR1cmluZyBzdG1yZWFkIGZsYWcgc2V0ICovCisJc2l1X3N0cmVhbS0+cndfZmxnID0gUldGX1NUTV9SRDsKKworCXRhc2tsZXRfc2NoZWR1bGUoJnNpdV9zdHJlYW0tPnRhc2tsZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9zdG1yZWFkX3N0b3Aoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzaXVfc3RyZWFtLT5zdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2OworCXUzMiBzdGZpZm87CisKKwlpZiAoIXNpdV9zdHJlYW0tPnJ3X2ZsZykKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIGlucHV0IEZJRk8gZGlzYWJsZSAqLworCXN0ZmlmbyA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TVEZJRk8pOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1RGSUZPLCBzdGZpZm8gJiB+MHgxMzA3MTMwNyk7CisJZGV2X2RiZyhkZXYsICIlczogU1RGSUZPICV4IC0+ICV4XG4iLCBfX2Z1bmNfXywKKwkJc3RmaWZvLCBzdGZpZm8gJiB+MHgxMzA3MTMwNyk7CisKKwkvKiBkdXJpbmcgc3RtcmVhZCBmbGFnIGNsZWFyICovCisJc2l1X3N0cmVhbS0+cndfZmxnID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MsCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJaW50IHJldDsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQ9JWRcbiIsIF9fZnVuY19fLCBpbmZvLT5wb3J0X2lkKTsKKworCXJldCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzcywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkZXYsICJzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKSBmYWlsZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9wb3J0CSpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW07CisKKwlpZiAoc3MtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJZWxzZQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQ9JWRcbiIsIF9fZnVuY19fLCBpbmZvLT5wb3J0X2lkKTsKKworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHNzKTsKK30KKworc3RhdGljIGJvb2wgZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqc2xhdmUpCit7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtID0gc2xhdmU7CisKKwlwcl9kZWJ1ZygiJXM6IHNsYXZlIElEICVkXG4iLCBfX2Z1bmNfXywgcGFyYW0tPnNsYXZlX2lkKTsKKworCWlmICh1bmxpa2VseShwYXJhbS0+ZG1hX2RldiAhPSBjaGFuLT5kZXZpY2UtPmRldikpCisJCXJldHVybiBmYWxzZTsKKworCWNoYW4tPnByaXZhdGUgPSBwYXJhbTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBzaXVfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwkvKiBQbGF5YmFjayAvIENhcHR1cmUgKi8KKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbTsKKwl1MzIgcG9ydCA9IGluZm8tPnBvcnRfaWQ7CisJc3RydWN0IHNpdV9wbGF0Zm9ybSAqcGRhdGEgPSBzaXVfaTJzX2RhaS5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3MtPnBjbS0+Y2FyZC0+ZGV2OworCWRtYV9jYXBfbWFza190IG1hc2s7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtOworCisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwlkZXZfZGJnKGRldiwgIiVzLCBwb3J0PSVkQCVwXG4iLCBfX2Z1bmNfXywgcG9ydCwgcG9ydF9pbmZvKTsKKworCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCQlwYXJhbSA9ICZzaXVfc3RyZWFtLT5wYXJhbTsKKwkJcGFyYW0tPnNsYXZlX2lkID0gcG9ydCA/IFNIRE1BX1NMQVZFX1NJVUJfVFggOgorCQkJU0hETUFfU0xBVkVfU0lVQV9UWDsKKwl9IGVsc2UgeworCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKwkJcGFyYW0gPSAmc2l1X3N0cmVhbS0+cGFyYW07CisJCXBhcmFtLT5zbGF2ZV9pZCA9IHBvcnQgPyBTSERNQV9TTEFWRV9TSVVCX1JYIDoKKwkJCVNIRE1BX1NMQVZFX1NJVUFfUlg7CisJfQorCisJcGFyYW0tPmRtYV9kZXYgPSBwZGF0YS0+ZG1hX2RldjsKKwkvKiBHZXQgRE1BIGNoYW5uZWwgKi8KKwlzaXVfc3RyZWFtLT5jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIHBhcmFtKTsKKwlpZiAoIXNpdV9zdHJlYW0tPmNoYW4pIHsKKwkJZGV2X2VycihkZXYsICJETUEgY2hhbm5lbCBhbGxvY2F0aW9uIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNpdV9zdHJlYW0tPnN1YnN0cmVhbSA9IHNzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbTsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQ9JWRcbiIsIF9fZnVuY19fLCBpbmZvLT5wb3J0X2lkKTsKKworCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwllbHNlCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCisJZG1hX3JlbGVhc2VfY2hhbm5lbChzaXVfc3RyZWFtLT5jaGFuKTsKKwlzaXVfc3RyZWFtLT5jaGFuID0gTlVMTDsKKworCXNpdV9zdHJlYW0tPnN1YnN0cmVhbSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAJKnJ0ID0gc3MtPnJ1bnRpbWU7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW07CisJc25kX3BjbV9zZnJhbWVzX3QgeGZlcl9jbnQ7CisKKwlpZiAoc3MtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJZWxzZQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKworCXJ0ID0gc2l1X3N0cmVhbS0+c3Vic3RyZWFtLT5ydW50aW1lOworCisJc2l1X3N0cmVhbS0+YnVmX2J5dGVzID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHNzKTsKKwlzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3MpOworCisJZGV2X2RiZyhkZXYsICIlczogcG9ydD0lZCwgJWQgY2hhbm5lbHMsIHBlcmlvZD0ldSBieXRlc1xuIiwgX19mdW5jX18sCisJCWluZm8tPnBvcnRfaWQsIHJ0LT5jaGFubmVscywgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKTsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCBidWZmZXJzIHRoYXQgYXJlIG11bHRpcGxlcyBvZiB0aGUgcGVyaW9kICovCisJaWYgKHNpdV9zdHJlYW0tPmJ1Zl9ieXRlcyAlIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcykgeworCQlkZXZfZXJyKGRldiwgIiVzKCkgLSBidWZmZXI9JWQgbm90IG11bHRpcGxlIG9mIHBlcmlvZD0lZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzaXVfc3RyZWFtLT5idWZfYnl0ZXMsCisJCSAgICAgICBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl4ZmVyX2NudCA9IGJ5dGVzX3RvX2ZyYW1lcyhydCwgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKTsKKwlpZiAoIXhmZXJfY250IHx8IHhmZXJfY250ID4gMHgxMDAwMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpdV9zdHJlYW0tPmZvcm1hdCA9IHJ0LT5mb3JtYXQ7CisJc2l1X3N0cmVhbS0+eGZlcl9jbnQgPSB4ZmVyX2NudDsKKworCWRldl9kYmcoZGV2LCAicG9ydD0lZCBidWY9JWx4IGJ1Zl9ieXRlcz0lZCBwZXJpb2RfYnl0ZXM9JWQgIgorCQkiZm9ybWF0PSVkIGNoYW5uZWxzPSVkIHhmZXJfY250PSVkXG4iLCBpbmZvLT5wb3J0X2lkLAorCQkodW5zaWduZWQgbG9uZylydC0+ZG1hX2FkZHIsIHNpdV9zdHJlYW0tPmJ1Zl9ieXRlcywKKwkJc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzLAorCQlzaXVfc3RyZWFtLT5mb3JtYXQsIHJ0LT5jaGFubmVscywgKGludCl4ZmVyX2NudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcywgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3MtPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzcyk7CisJaW50IHJldDsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQ9JWRAJXAsIGNtZD0lZFxuIiwgX19mdW5jX18sCisJCWluZm8tPnBvcnRfaWQsIHBvcnRfaW5mbywgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKHNzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXJldCA9IHNpdV9wY21fc3Rtd3JpdGVfc3RhcnQocG9ydF9pbmZvKTsKKwkJZWxzZQorCQkJcmV0ID0gc2l1X3BjbV9zdG1yZWFkX3N0YXJ0KHBvcnRfaW5mbyk7CisKKwkJaWYgKHJldCA8IDApCisJCQlkZXZfd2FybihkZXYsICIlczogc3RhcnQgZmFpbGVkIG9uIHBvcnQ9JWRcbiIsCisJCQkJIF9fZnVuY19fLCBpbmZvLT5wb3J0X2lkKTsKKworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQlzaXVfcGNtX3N0bXdyaXRlX3N0b3AocG9ydF9pbmZvKTsKKwkJZWxzZQorCQkJc2l1X3BjbV9zdG1yZWFkX3N0b3AocG9ydF9pbmZvKTsKKwkJcmV0ID0gMDsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIiVzKCkgdW5zdXBwb3J0ZWQgY21kPSVkXG4iLCBfX2Z1bmNfXywgY21kKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU28gZmFyIG9ubHkgcmVzb2x1dGlvbiBvZiBvbmUgcGVyaW9kIGlzIHN1cHBvcnRlZCwgc3ViamVjdCB0byBleHRlbmRpbmcgdGhlCisgKiBkbWFuZ2luZSBBUEkKKyAqLworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNpdV9wY21fcG9pbnRlcl9kbWEoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzcyk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnQgPSBzcy0+cnVudGltZTsKKwlzaXplX3QgcHRyOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtOworCisJaWYgKHNzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCWVsc2UKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisKKwkvKgorCSAqIHB0ciBpcyB0aGUgb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciB3aGVyZSB0aGUgZG1hIGlzIGN1cnJlbnRseSBhdC4gV2UKKwkgKiBjaGVjayBpZiB0aGUgZG1hIGJ1ZmZlciBoYXMganVzdCB3cmFwcGVkLgorCSAqLworCXB0ciA9IFBFUklPRF9PRkZTRVQocnQtPmRtYV9hZGRyLAorCQkJICAgIHNpdV9zdHJlYW0tPmN1cl9wZXJpb2QsCisJCQkgICAgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKSAtIHJ0LT5kbWFfYWRkcjsKKworCWRldl9kYmcoZGV2LAorCQkiJXM6IHBvcnQ9JWQsIGV2ZW50cyAleCwgRlNUUyAleCwgeGZlcnJlZCAldS8ldSwgY29va2llICVkXG4iLAorCQlfX2Z1bmNfXywgaW5mby0+cG9ydF9pZCwgc2l1X3JlYWQzMihiYXNlICsgU0lVX0VWTlRDKSwKKwkJc2l1X3JlYWQzMihiYXNlICsgU0lVX1NCRlNUUyksIHB0ciwgc2l1X3N0cmVhbS0+YnVmX2J5dGVzLAorCQlzaXVfc3RyZWFtLT5jb29raWUpOworCisJaWYgKHB0ciA+PSBzaXVfc3RyZWFtLT5idWZfYnl0ZXMpCisJCXB0ciA9IDA7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHNzLT5ydW50aW1lLCBwdHIpOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCS8qIGNhcmQtPmRldiA9PSBzb2NkZXYtPmRldiwgc2VlIHNuZF9zb2NfbmV3X3BjbXMoKSAqLworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGNhcmQtPmRldik7CisJaW50IHJldDsKKwlpbnQgaTsKKworCS8qIHBkZXYtPmlkIHNlbGVjdHMgYmV0d2VlbiBTSVVBIGFuZCBTSVVCICovCisJaWYgKHBkZXYtPmlkIDwgMCB8fCBwZGV2LT5pZCA+PSBTSVVfUE9SVF9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJaW5mby0+cG9ydF9pZCA9IHBkZXYtPmlkOworCisJLyoKKwkgKiBXaGlsZSB0aGUgc2l1IGhhcyAyIHBvcnRzLCBvbmx5IG9uZSBwb3J0IGNhbiBiZSBvbiBhdCBhIHRpbWUgKG9ubHkgMQorCSAqIFNQQikuIFNvIGZhciBhbGwgdGhlIGJvYXJkcyB1c2luZyB0aGUgc2l1IGhhZCBvbmx5IG9uZSBvZiB0aGUgcG9ydHMKKwkgKiB3aXJlZCB0byBhIGNvZGVjLiBUbyBzaW1wbGlmeSB0aGluZ3MsIHdlIG9ubHkgcmVnaXN0ZXIgb25lIHBvcnQgd2l0aAorCSAqIGFsc2EuIEluIGNhc2UgYm90aCBwb3J0cyBhcmUgbmVlZGVkLCBpdCBzaG91bGQgYmUgY2hhbmdlZCBoZXJlCisJICovCisJZm9yIChpID0gcGRldi0+aWQ7IGkgPCBwZGV2LT5pZCArIDE7IGkrKykgeworCQlzdHJ1Y3Qgc2l1X3BvcnQgKipwb3J0X2luZm8gPSAmc2l1X3BvcnRzW2ldOworCisJCXJldCA9IHNpdV9pbml0X3BvcnQoaSwgcG9ydF9pbmZvLCBjYXJkKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLAorCQkJCVNORFJWX0RNQV9UWVBFX0RFViwgTlVMTCwKKwkJCQlTSVVfQlVGRkVSX0JZVEVTX01BWCwgU0lVX0JVRkZFUl9CWVRFU19NQVgpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjYXJkLT5kZXYsCisJCQkgICAgICAgInNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwoKSBlcnI9JWQiLAorCQkJCXJldCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQkoKnBvcnRfaW5mbyktPnBjbSA9IHBjbTsKKworCQkvKiBJTyB0YXNrbGV0cyAqLworCQl0YXNrbGV0X2luaXQoJigqcG9ydF9pbmZvKS0+cGxheWJhY2sudGFza2xldCwgc2l1X2lvX3Rhc2tsZXQsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSYoKnBvcnRfaW5mbyktPnBsYXliYWNrKTsKKwkJdGFza2xldF9pbml0KCYoKnBvcnRfaW5mbyktPmNhcHR1cmUudGFza2xldCwgc2l1X2lvX3Rhc2tsZXQsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSYoKnBvcnRfaW5mbyktPmNhcHR1cmUpOworCX0KKworCWRldl9pbmZvKGNhcmQtPmRldiwgIlN1cGVySCBTSVUgZHJpdmVyIGluaXRpYWxpemVkLlxuIik7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJc2l1X2ZyZWVfcG9ydChzaXVfcG9ydHNbcGRldi0+aWRdKTsKKwlkZXZfZXJyKGNhcmQtPmRldiwgIlNJVTogZmFpbGVkIHRvIGluaXRpYWxpemUuXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaXVfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKHBjbS0+Y2FyZC0+ZGV2KTsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0c1twZGV2LT5pZF07CisKKwl0YXNrbGV0X2tpbGwoJnBvcnRfaW5mby0+Y2FwdHVyZS50YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJnBvcnRfaW5mby0+cGxheWJhY2sudGFza2xldCk7CisKKwlzaXVfZnJlZV9wb3J0KHBvcnRfaW5mbyk7CisJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHBjbSk7CisKKwlkZXZfZGJnKHBjbS0+Y2FyZC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzaXVfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBzaXVfcGNtX29wZW4sCisJLmNsb3NlCQk9IHNpdV9wY21fY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBzaXVfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHNpdV9wY21faHdfZnJlZSwKKwkucHJlcGFyZQk9IHNpdV9wY21fcHJlcGFyZSwKKwkudHJpZ2dlcgk9IHNpdV9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHNpdV9wY21fcG9pbnRlcl9kbWEsCit9OworCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBzaXVfcGxhdGZvcm0gPSB7CisJLm5hbWUJCT0gInNpdS1hdWRpbyIsCisJLnBjbV9vcHMgCT0gJnNpdV9wY21fb3BzLAorCS5wY21fbmV3CT0gc2l1X3BjbV9uZXcsCisJLnBjbV9mcmVlCT0gc2l1X3BjbV9mcmVlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNpdV9wbGF0Zm9ybSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNhY2hlLmMgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKaW5kZXggZDI1MDVlOC4uNTg2OWRjMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jYWNoZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY2FjaGUuYwpAQCAtMTUsNiArMTUsNzQgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY180XzEyX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBjYWNoZVtyZWddOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfNF8xMl93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwl1OCBkYXRhWzJdOworCWludCByZXQ7CisKKwlCVUdfT04oY29kZWMtPnZvbGF0aWxlX3JlZ2lzdGVyKTsKKworCWRhdGFbMF0gPSAocmVnIDw8IDQpIHwgKCh2YWx1ZSA+PiA4KSAmIDB4MDAwZik7CisJZGF0YVsxXSA9IHZhbHVlICYgMHgwMGZmOworCisJaWYgKHJlZyA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJY2FjaGVbcmVnXSA9IHZhbHVlOworCisJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOworCWlmIChyZXQgPT0gMikKKwkJcmV0dXJuIDA7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCitzdGF0aWMgaW50IHNuZF9zb2NfNF8xMl9zcGlfd3JpdGUodm9pZCAqY29udHJvbF9kYXRhLCBjb25zdCBjaGFyICpkYXRhLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb250cm9sX2RhdGE7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXU4IG1zZ1syXTsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuIDA7CisKKwltc2dbMF0gPSBkYXRhWzFdOworCW1zZ1sxXSA9IGRhdGFbMF07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCisJdC50eF9idWYgPSAmbXNnWzBdOworCXQubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwlzcGlfc3luYyhzcGksICZtKTsKKworCXJldHVybiBsZW47Cit9CisjZWxzZQorI2RlZmluZSBzbmRfc29jXzRfMTJfc3BpX3dyaXRlIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfN185X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKIHsKQEAgLTM4LDYgKzEwNiwxMiBAQAogCiAJaWYgKHJlZyA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKIAkJY2FjaGVbcmVnXSA9IHZhbHVlOworCisJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOwogCWlmIChyZXQgPT0gMikKIAkJcmV0dXJuIDA7CkBAIC05MSw2ICsxNjUsMTEgQEAKIAlpZiAocmVnIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplKQogCQljYWNoZVtyZWddID0gdmFsdWU7CiAKKwlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCiAJCXJldHVybiAwOwogCWVsc2UKQEAgLTExOSw2ICsxOTgsMTEgQEAKIAlpZiAoIXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpCiAJCXJlZ19jYWNoZVtyZWddID0gdmFsdWU7CiAKKwlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDMpID09IDMpCiAJCXJldHVybiAwOwogCWVsc2UKQEAgLTEzMSwxMCArMjE1LDE0IEBACiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKIAlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSB8fAotCSAgICBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpKQorCSAgICBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpKSB7CisJCWlmIChjb2RlYy0+Y2FjaGVfb25seSkKKwkJCXJldHVybiAtRUlOVkFMOworCiAJCXJldHVybiBjb2RlYy0+aHdfcmVhZChjb2RlYywgcmVnKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJcmV0dXJuIGNhY2hlW3JlZ107CisJfQogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQpAQCAtMTcxLDYgKzI1OSwxMTQgQEAKICNkZWZpbmUgc25kX3NvY184XzE2X3JlYWRfaTJjIE5VTEwKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzE2XzhfcmVhZF9pMmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCQkgIHVuc2lnbmVkIGludCByKQoreworCXN0cnVjdCBpMmNfbXNnIHhmZXJbMl07CisJdTE2IHJlZyA9IHI7CisJdTggZGF0YTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCisJLyogV3JpdGUgcmVnaXN0ZXIgKi8KKwl4ZmVyWzBdLmFkZHIgPSBjbGllbnQtPmFkZHI7CisJeGZlclswXS5mbGFncyA9IDA7CisJeGZlclswXS5sZW4gPSAyOworCXhmZXJbMF0uYnVmID0gKHU4ICopJnJlZzsKKworCS8qIFJlYWQgZGF0YSAqLworCXhmZXJbMV0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJeGZlclsxXS5sZW4gPSAxOworCXhmZXJbMV0uYnVmID0gJmRhdGE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCB4ZmVyLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpMmNfdHJhbnNmZXIoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGRhdGE7Cit9CisjZWxzZQorI2RlZmluZSBzbmRfc29jXzE2XzhfcmVhZF9pMmMgTlVMTAorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY18xNl84X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCXJlZyAmPSAweGZmOworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGNhY2hlW3JlZ107Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY18xNl84X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXU4IGRhdGFbM107CisJaW50IHJldDsKKworCUJVR19PTihjb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIpOworCisJZGF0YVswXSA9IChyZWcgPj4gOCkgJiAweGZmOworCWRhdGFbMV0gPSByZWcgJiAweGZmOworCWRhdGFbMl0gPSB2YWx1ZTsKKworCXJlZyAmPSAweGZmOworCWlmIChyZWcgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKworCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgeworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAzKTsKKwlpZiAocmV0ID09IDMpCisJCXJldHVybiAwOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIC1FSU87Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCBzbmRfc29jXzE2Xzhfc3BpX3dyaXRlKHZvaWQgKmNvbnRyb2xfZGF0YSwgY29uc3QgY2hhciAqZGF0YSwKKwkJCQkgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29udHJvbF9kYXRhOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwl1OCBtc2dbM107CisKKwlpZiAobGVuIDw9IDApCisJCXJldHVybiAwOworCisJbXNnWzBdID0gZGF0YVswXTsKKwltc2dbMV0gPSBkYXRhWzFdOworCW1zZ1syXSA9IGRhdGFbMl07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCisJdC50eF9idWYgPSAmbXNnWzBdOworCXQubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwlzcGlfc3luYyhzcGksICZtKTsKKworCXJldHVybiBsZW47Cit9CisjZWxzZQorI2RlZmluZSBzbmRfc29jXzE2Xzhfc3BpX3dyaXRlIE5VTEwKKyNlbmRpZgorCisKIHN0YXRpYyBzdHJ1Y3QgewogCWludCBhZGRyX2JpdHM7CiAJaW50IGRhdGFfYml0czsKQEAgLTE4MCw5ICszNzYsMTQgQEAKIAl1bnNpZ25lZCBpbnQgKCppMmNfcmVhZCkoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgdW5zaWduZWQgaW50KTsKIH0gaW9fdHlwZXNbXSA9IHsKIAl7CisJCS5hZGRyX2JpdHMgPSA0LCAuZGF0YV9iaXRzID0gMTIsCisJCS53cml0ZSA9IHNuZF9zb2NfNF8xMl93cml0ZSwgLnJlYWQgPSBzbmRfc29jXzRfMTJfcmVhZCwKKwkJLnNwaV93cml0ZSA9IHNuZF9zb2NfNF8xMl9zcGlfd3JpdGUsCisJfSwKKwl7CiAJCS5hZGRyX2JpdHMgPSA3LCAuZGF0YV9iaXRzID0gOSwKIAkJLndyaXRlID0gc25kX3NvY183Xzlfd3JpdGUsIC5yZWFkID0gc25kX3NvY183XzlfcmVhZCwKLQkJLnNwaV93cml0ZSA9IHNuZF9zb2NfN185X3NwaV93cml0ZSAKKwkJLnNwaV93cml0ZSA9IHNuZF9zb2NfN185X3NwaV93cml0ZSwKIAl9LAogCXsKIAkJLmFkZHJfYml0cyA9IDgsIC5kYXRhX2JpdHMgPSA4LApAQCAtMTkzLDYgKzM5NCwxMiBAQAogCQkud3JpdGUgPSBzbmRfc29jXzhfMTZfd3JpdGUsIC5yZWFkID0gc25kX3NvY184XzE2X3JlYWQsCiAJCS5pMmNfcmVhZCA9IHNuZF9zb2NfOF8xNl9yZWFkX2kyYywKIAl9LAorCXsKKwkJLmFkZHJfYml0cyA9IDE2LCAuZGF0YV9iaXRzID0gOCwKKwkJLndyaXRlID0gc25kX3NvY18xNl84X3dyaXRlLCAucmVhZCA9IHNuZF9zb2NfMTZfOF9yZWFkLAorCQkuaTJjX3JlYWQgPSBzbmRfc29jXzE2XzhfcmVhZF9pMmMsCisJCS5zcGlfd3JpdGUgPSBzbmRfc29jXzE2Xzhfc3BpX3dyaXRlLAorCX0sCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggMGE2NDQwYy4uYTAzYmFjOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb3JlLmMKKysrIGIvc291bmQvc29jL3NvYy1jb3JlLmMKQEAgLTEzMCw2ICsxMzAsMjkgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGNvZGVjX3JlZywgMDQ0NCwgY29kZWNfcmVnX3Nob3csIE5VTEwpOwogCitzdGF0aWMgc3NpemVfdCBwbWRvd25fdGltZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgY2FyZC0+cG1kb3duX3RpbWUpOworfQorCitzdGF0aWMgc3NpemVfdCBwbWRvd25fdGltZV9zZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKKworCXN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJmNhcmQtPnBtZG93bl90aW1lKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBtZG93bl90aW1lLCAwNjQ0LCBwbWRvd25fdGltZV9zaG93LCBwbWRvd25fdGltZV9zZXQpOworCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiBzdGF0aWMgaW50IGNvZGVjX3JlZ19vcGVuX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC01NDIsNyArNTY1LDcgQEAKIAkJLyogc3RhcnQgZGVsYXllZCBwb3Agd3EgaGVyZSBmb3IgcGxheWJhY2sgc3RyZWFtcyAqLwogCQljb2RlY19kYWktPnBvcF93YWl0ID0gMTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjYXJkLT5kZWxheWVkX3dvcmssCi0JCQltc2Vjc190b19qaWZmaWVzKHBtZG93bl90aW1lKSk7CisJCQltc2Vjc190b19qaWZmaWVzKGNhcmQtPnBtZG93bl90aW1lKSk7CiAJfSBlbHNlIHsKIAkJLyogY2FwdHVyZSBzdHJlYW1zIGNhbiBiZSBwb3dlcmVkIGRvd24gbm93ICovCiAJCXNuZF9zb2NfZGFwbV9zdHJlYW1fZXZlbnQoY29kZWMsCkBAIC05NDAsNiArOTYzLDEyIEBACiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBjYXJkLT5kYWlfbGlua1swXS5jcHVfZGFpOwogCisJLyogSWYgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgc29jIGRldmljZSBmYWlsZWQsIHRoZXJlIGlzIG5vIGNvZGVjCisJICogYXNzb2NpYXRlZCB3aXRoIGl0LiBKdXN0IGJhaWwgb3V0IGluIHRoaXMgY2FzZS4KKwkgKi8KKwlpZiAoIWNhcmQtPmNvZGVjKQorCQlyZXR1cm4gMDsKKwogCS8qIEFDOTcgZGV2aWNlcyBtaWdodCBoYXZlIG90aGVyIGRyaXZlcnMgaGFuZ2luZyBvZmYgdGhlbSBzbwogCSAqIG5lZWQgdG8gcmVzdW1lIGltbWVkaWF0ZWx5LiAgT3RoZXIgZHJpdmVycyBkb24ndCBoYXZlIHRoYXQKIAkgKiBwcm9ibGVtIGFuZCBtYXkgdGFrZSBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiB0aW1lIHRvIHJlc3VtZQpAQCAtMTAzOSw2ICsxMDY4LDggQEAKIAlkZXZfZGJnKGNhcmQtPmRldiwgIkFsbCBjb21wb25lbnRzIHByZXNlbnQsIGluc3RhbnRpYXRpbmdcbiIpOwogCiAJLyogRm91bmQgZXZlcnl0aGluZywgYnJpbmcgaXQgdXAgKi8KKwljYXJkLT5wbWRvd25fdGltZSA9IHBtZG93bl90aW1lOworCiAJaWYgKGNhcmQtPnByb2JlKSB7CiAJCXJldCA9IGNhcmQtPnByb2JlKHBkZXYpOwogCQlpZiAocmV0IDwgMCkKQEAgLTExMjIsNiArMTE1MywxMCBAQAogCWlmIChyZXQgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIGRhcG0gc3lzZnMgZW50cmllc1xuIik7CiAKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoY2FyZC0+c29jZGV2LT5kZXYsICZkZXZfYXR0cl9wbWRvd25fdGltZSk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFzb2M6IGZhaWxlZCB0byBhZGQgcG1kb3duX3RpbWUgc3lzZnNcbiIpOworCiAJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGNhcmQtPnNvY2Rldi0+ZGV2LCAmZGV2X2F0dHJfY29kZWNfcmVnKTsKIAlpZiAocmV0IDwgMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXNvYzogZmFpbGVkIHRvIGFkZCBjb2RlYyBzeXNmcyBmaWxlc1xuIik7CkBAIC0xMjc2LDggKzEzMTEsOCBAQAogCWNvZGVjX2RhaS0+Y29kZWMgPSBjYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIGNsaWVudCBhbmQgaW50ZXJmYWNlIGh3IGNhcGFiaWxpdGllcyAqLwotCXNwcmludGYobmV3X25hbWUsICIlcyAlcy0lZCIsIGRhaV9saW5rLT5zdHJlYW1fbmFtZSwgY29kZWNfZGFpLT5uYW1lLAotCQludW0pOworCXNucHJpbnRmKG5ld19uYW1lLCBzaXplb2YobmV3X25hbWUpLCAiJXMgJXMtJWQiLAorCQkgZGFpX2xpbmstPnN0cmVhbV9uYW1lLCBjb2RlY19kYWktPm5hbWUsIG51bSk7CiAKIAlpZiAoY29kZWNfZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pCiAJCXBsYXliYWNrID0gMTsKQEAgLTEzNjgsNiArMTQwMyw3IEBACiAKIAljb2RlYy0+YWM5Ny0+YnVzLT5vcHMgPSBvcHM7CiAJY29kZWMtPmFjOTctPm51bSA9IG51bTsKKwljb2RlYy0+ZGV2ID0gJmNvZGVjLT5hYzk3LT5kZXY7CiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCXJldHVybiAwOwogfQpAQCAtMTQyNyw5ICsxNDYzLDkgQEAKICAqCiAgKiBSZXR1cm5zIDEgZm9yIGNoYW5nZSBlbHNlIDAuCiAgKi8KLXN0YXRpYyBpbnQgc25kX3NvY191cGRhdGVfYml0c19sb2NrZWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCXVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgaW50IG1hc2ssCi0JCQkJdW5zaWduZWQgaW50IHZhbHVlKQoraW50IHNuZF9zb2NfdXBkYXRlX2JpdHNfbG9ja2VkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlpbnQgY2hhbmdlOwogCkBAIC0xNDM5LDYgKzE0NzUsNyBAQAogCiAJcmV0dXJuIGNoYW5nZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfdXBkYXRlX2JpdHNfbG9ja2VkKTsKIAogLyoqCiAgKiBzbmRfc29jX3Rlc3RfYml0cyAtIHRlc3QgcmVnaXN0ZXIgZm9yIGNoYW5nZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCAwZDI5NGVmLi42YzMzNTEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtNDQsMTMgKzQ0LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIAotLyogZGVidWcgKi8KLSNpZmRlZiBERUJVRwotI2RlZmluZSBkdW1wX2RhcG0oY29kZWMsIGFjdGlvbikgZGJnX2R1bXBfZGFwbShjb2RlYywgYWN0aW9uKQotI2Vsc2UKLSNkZWZpbmUgZHVtcF9kYXBtKGNvZGVjLCBhY3Rpb24pCi0jZW5kaWYKLQogLyogZGFwbSBwb3dlciBzZXF1ZW5jZXMgLSBtYWtlIHRoaXMgcGVyIGNvZGVjIGluIHRoZSBmdXR1cmUgKi8KIHN0YXRpYyBpbnQgZGFwbV91cF9zZXFbXSA9IHsKIAlbc25kX3NvY19kYXBtX3ByZV0gPSAwLApAQCAtNzM5LDYgKzczMiw4IEBACiAJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmIsCiAJCQkgICAgaW50IHNvcnRbXSkKIHsKKwlpZiAoYS0+Y29kZWMgIT0gYi0+Y29kZWMpCisJCXJldHVybiAodW5zaWduZWQgbG9uZylhIC0gKHVuc2lnbmVkIGxvbmcpYjsKIAlpZiAoc29ydFthLT5pZF0gIT0gc29ydFtiLT5pZF0pCiAJCXJldHVybiBzb3J0W2EtPmlkXSAtIHNvcnRbYi0+aWRdOwogCWlmIChhLT5yZWcgIT0gYi0+cmVnKQpAQCAtMTAxNywxMyArMTAxMiwyOCBAQAogCQkJc3lzX3Bvd2VyID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QOgotCQkJc3lzX3Bvd2VyID0gY29kZWMtPmJpYXNfbGV2ZWwgIT0gU05EX1NPQ19CSUFTX1NUQU5EQlk7CisJCQlzd2l0Y2ggKGNvZGVjLT5iaWFzX2xldmVsKSB7CisJCQkJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJCQljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCQkJCXN5c19wb3dlciA9IDA7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXN5c19wb3dlciA9IDE7CisJCQkJCWJyZWFrOworCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQogCX0KIAorCWlmIChzeXNfcG93ZXIgJiYgY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlyZXQgPSBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoc29jZGV2LAorCQkJCQkJICBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXByX2VycigiRmFpbGVkIHRvIHR1cm4gb24gYmlhczogJWRcbiIsIHJldCk7CisJfQorCiAJLyogSWYgd2UncmUgY2hhbmdpbmcgdG8gYWxsIG9uIG9yIGFsbCBvZmYgdGhlbiBwcmVwYXJlICovCiAJaWYgKChzeXNfcG93ZXIgJiYgY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkpIHx8CiAJICAgICghc3lzX3Bvd2VyICYmIGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PTikpIHsKQEAgLTEwNDcsNiArMTA1NywxNCBAQAogCQkJcHJfZXJyKCJGYWlsZWQgdG8gYXBwbHkgc3RhbmRieSBiaWFzOiAlZFxuIiwgcmV0KTsKIAl9CiAKKwkvKiBJZiB3ZSdyZSBpbiBzdGFuZGJ5IGFuZCBjYW4gc3VwcG9ydCBiaWFzIG9mZiB0aGVuIGRvIHRoYXQgKi8KKwlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkgJiYKKwkgICAgY29kZWMtPmlkbGVfYmlhc19vZmYpIHsKKwkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKHNvY2RldiwgU05EX1NPQ19CSUFTX09GRik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXByX2VycigiRmFpbGVkIHRvIHR1cm4gb2ZmIGJpYXM6ICVkXG4iLCByZXQpOworCX0KKwogCS8qIElmIHdlIGp1c3QgcG93ZXJlZCB1cCB0aGVuIG1vdmUgdG8gYWN0aXZlIGJpYXMgKi8KIAlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUgJiYgc3lzX3Bvd2VyKSB7CiAJCXJldCA9IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChzb2NkZXYsCkBAIC0xMDYxLDY2ICsxMDc5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBkYmdfZHVtcF9kYXBtKHN0cnVjdCBzbmRfc29jX2NvZGVjKiBjb2RlYywgY29uc3QgY2hhciAqYWN0aW9uKQotewotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwotCXN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcCA9IE5VTEw7Ci0JaW50IGluLCBvdXQ7Ci0KLQlwcmludGsoIkRBUE0gJXMgJXNcbiIsIGNvZGVjLT5uYW1lLCBhY3Rpb24pOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmRhcG1fd2lkZ2V0cywgbGlzdCkgewotCi0JCS8qIG9ubHkgZGlzcGxheSB3aWRnZXRzIHRoYXQgZWZmZWN0IHJvdXRpbmcgKi8KLQkJc3dpdGNoICh3LT5pZCkgewotCQljYXNlIHNuZF9zb2NfZGFwbV9wcmU6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3Bvc3Q6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3ZtaWQ6Ci0JCQljb250aW51ZTsKLQkJY2FzZSBzbmRfc29jX2RhcG1fbXV4OgotCQljYXNlIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXg6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX291dHB1dDoKLQkJY2FzZSBzbmRfc29jX2RhcG1faW5wdXQ6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3N3aXRjaDoKLQkJY2FzZSBzbmRfc29jX2RhcG1faHA6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX21pYzoKLQkJY2FzZSBzbmRfc29jX2RhcG1fc3BrOgotCQljYXNlIHNuZF9zb2NfZGFwbV9saW5lOgotCQljYXNlIHNuZF9zb2NfZGFwbV9taWNiaWFzOgotCQljYXNlIHNuZF9zb2NfZGFwbV9kYWM6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKLQkJY2FzZSBzbmRfc29jX2RhcG1fcGdhOgotCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKLQkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgotCQljYXNlIHNuZF9zb2NfZGFwbV9zdXBwbHk6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX2FpZl9pbjoKLQkJY2FzZSBzbmRfc29jX2RhcG1fYWlmX291dDoKLQkJCWlmICh3LT5uYW1lKSB7Ci0JCQkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7Ci0JCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCQlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOwotCQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQkJcHJpbnRrKCIlczogJXMgIGluICVkIG91dCAlZFxuIiwgdy0+bmFtZSwKLQkJCQkJdy0+cG93ZXIgPyAiT24iOiJPZmYiLGluLCBvdXQpOwotCi0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdy0+c291cmNlcywgbGlzdF9zaW5rKSB7Ci0JCQkJCWlmIChwLT5jb25uZWN0KQotCQkJCQkJcHJpbnRrKCIgaW4gICVzICVzXG4iLCBwLT5uYW1lID8gcC0+bmFtZSA6ICJzdGF0aWMiLAotCQkJCQkJCXAtPnNvdXJjZS0+bmFtZSk7Ci0JCQkJfQotCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnctPnNpbmtzLCBsaXN0X3NvdXJjZSkgewotCQkJCQlpZiAocC0+Y29ubmVjdCkKLQkJCQkJCXByaW50aygiIG91dCAlcyAlc1xuIiwgcC0+bmFtZSA/IHAtPm5hbWUgOiAic3RhdGljIiwKLQkJCQkJCQlwLT5zaW5rLT5uYW1lKTsKLQkJCQl9Ci0JCQl9Ci0JCWJyZWFrOwotCQl9Ci0JfQotfQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHN0YXRpYyBpbnQgZGFwbV93aWRnZXRfcG93ZXJfb3Blbl9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtMTE0Nyw5ICsxMTA1LDE2IEBACiAJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKIAlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwogCi0JcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlczogJXMgIGluICVkIG91dCAlZFxuIiwKKwlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzOiAlcyAgaW4gJWQgb3V0ICVkIiwKIAkJICAgICAgIHctPm5hbWUsIHctPnBvd2VyID8gIk9uIiA6ICJPZmYiLCBpbiwgb3V0KTsKIAorCWlmICh3LT5yZWcgPj0gMCkKKwkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LAorCQkJCSIgLSBSJWQoMHgleCkgYml0ICVkIiwKKwkJCQl3LT5yZWcsIHctPnJlZywgdy0+c2hpZnQpOworCisJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LCAiXG4iKTsKKwogCWlmICh3LT5zbmFtZSkKIAkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LCAiIHN0cmVhbSAlcyAlc1xuIiwKIAkJCQl3LT5zbmFtZSwKQEAgLTEyNDUsMTggKzEyMTAsMTUgQEAKIAkJCXBhdGgtPmNvbm5lY3QgPSAwOyAvKiBvbGQgY29ubmVjdGlvbiBtdXN0IGJlIHBvd2VyZWQgZG93biAqLwogCX0KIAotCWlmIChmb3VuZCkgeworCWlmIChmb3VuZCkKIAkJZGFwbV9wb3dlcl93aWRnZXRzKHdpZGdldC0+Y29kZWMsIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKLQkJZHVtcF9kYXBtKHdpZGdldC0+Y29kZWMsICJtdXggcG93ZXIgdXBkYXRlIik7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIHRlc3QgYW5kIHVwZGF0ZSB0aGUgcG93ZXIgc3RhdHVzIG9mIGEgbWl4ZXIgb3Igc3dpdGNoIHdpZGdldCAqLwogc3RhdGljIGludCBkYXBtX21peGVyX3VwZGF0ZV9wb3dlcihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0LAotCQkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgcmVnLAotCQkJCSAgIGludCB2YWxfbWFzaywgaW50IHZhbCwgaW50IGludmVydCkKKwkJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGNvbm5lY3QpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoOwogCWludCBmb3VuZCA9IDA7CkBAIC0xMjY2LDkgKzEyMjgsNiBAQAogCSAgICB3aWRnZXQtPmlkICE9IHNuZF9zb2NfZGFwbV9zd2l0Y2gpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIHZhbF9tYXNrLCB2YWwpKQotCQlyZXR1cm4gMDsKLQogCS8qIGZpbmQgZGFwbSB3aWRnZXQgcGF0aCBhc3NvYyB3aXRoIGtjb250cm9sICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXRoLCAmd2lkZ2V0LT5jb2RlYy0+ZGFwbV9wYXRocywgbGlzdCkgewogCQlpZiAocGF0aC0+a2NvbnRyb2wgIT0ga2NvbnRyb2wpCkBAIC0xMjc2LDE5ICsxMjM1LDEyIEBACiAKIAkJLyogZm91bmQsIG5vdyBjaGVjayB0eXBlICovCiAJCWZvdW5kID0gMTsKLQkJaWYgKHZhbCkKLQkJCS8qIG5ldyBjb25uZWN0aW9uICovCi0JCQlwYXRoLT5jb25uZWN0ID0gaW52ZXJ0ID8gMDoxOwotCQllbHNlCi0JCQkvKiBvbGQgY29ubmVjdGlvbiBtdXN0IGJlIHBvd2VyZWQgZG93biAqLwotCQkJcGF0aC0+Y29ubmVjdCA9IGludmVydCA/IDE6MDsKKwkJcGF0aC0+Y29ubmVjdCA9IGNvbm5lY3Q7CiAJCWJyZWFrOwogCX0KIAotCWlmIChmb3VuZCkgeworCWlmIChmb3VuZCkKIAkJZGFwbV9wb3dlcl93aWRnZXRzKHdpZGdldC0+Y29kZWMsIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKLQkJZHVtcF9kYXBtKHdpZGdldC0+Y29kZWMsICJtaXhlciBwb3dlciB1cGRhdGUiKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MDQsOSArMTM1Niw3IEBACiAgKi8KIGludCBzbmRfc29jX2RhcG1fc3luYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IHJldCA9IGRhcG1fcG93ZXJfd2lkZ2V0cyhjb2RlYywgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1ApOwotCWR1bXBfZGFwbShjb2RlYywgInN5bmMiKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBkYXBtX3Bvd2VyX3dpZGdldHMoY29kZWMsIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9zeW5jKTsKIApAQCAtMTY4OCw2ICsxNjM4LDcgQEAKIAl1bnNpZ25lZCBpbnQgbWFzayA9ICgxIDw8IGZscyhtYXgpKSAtIDE7CiAJdW5zaWduZWQgaW50IGludmVydCA9IG1jLT5pbnZlcnQ7CiAJdW5zaWduZWQgaW50IHZhbCwgdmFsMiwgdmFsX21hc2s7CisJaW50IGNvbm5lY3Q7CiAJaW50IHJldDsKIAogCXZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIG1hc2spOwpAQCAtMTcxNCw3ICsxNjY1LDE3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWRhcG1fbWl4ZXJfdXBkYXRlX3Bvd2VyKHdpZGdldCwga2NvbnRyb2wsIHJlZywgdmFsX21hc2ssIHZhbCwgaW52ZXJ0KTsKKwlpZiAoc25kX3NvY190ZXN0X2JpdHMod2lkZ2V0LT5jb2RlYywgcmVnLCB2YWxfbWFzaywgdmFsKSkgeworCQlpZiAodmFsKQorCQkJLyogbmV3IGNvbm5lY3Rpb24gKi8KKwkJCWNvbm5lY3QgPSBpbnZlcnQgPyAwOjE7CisJCWVsc2UKKwkJCS8qIG9sZCBjb25uZWN0aW9uIG11c3QgYmUgcG93ZXJlZCBkb3duICovCisJCQljb25uZWN0ID0gaW52ZXJ0ID8gMTowOworCisJCWRhcG1fbWl4ZXJfdXBkYXRlX3Bvd2VyKHdpZGdldCwga2NvbnRyb2wsIGNvbm5lY3QpOworCX0KKwogCWlmICh3aWRnZXQtPmV2ZW50KSB7CiAJCWlmICh3aWRnZXQtPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9SRUcpIHsKIAkJCXJldCA9IHdpZGdldC0+ZXZlbnQod2lkZ2V0LCBrY29udHJvbCwKQEAgLTIxNTIsNyArMjExMyw2IEBACiAKIAlkYXBtX3Bvd2VyX3dpZGdldHMoY29kZWMsIGV2ZW50KTsKIAltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7Ci0JZHVtcF9kYXBtKGNvZGVjLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9LY29uZmlnIGIvc291bmQvdXNiL0tjb25maWcKaW5kZXggNzM1MjVjMC4uOGMyOTI1OCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL0tjb25maWcKKysrIGIvc291bmQvdXNiL0tjb25maWcKQEAgLTIxLDYgKzIxLDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtdXNiLWF1ZGlvLgogCitjb25maWcgU05EX1VTQl9VQTEwMQorCXRyaXN0YXRlICJFZGlyb2wgVUEtMTAxIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9SQVdNSURJCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBFZGlyb2wgVUEtMTAxIGF1ZGlvL01JREkKKwkgIGludGVyZmFjZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLXVhMTAxLgorCiBjb25maWcgU05EX1VTQl9VU1gyWQogCXRyaXN0YXRlICJUYXNjYW0gVVMtMTIyLCBVUy0yMjQgYW5kIFVTLTQyOCBVU0IgZHJpdmVyIgogCWRlcGVuZHMgb24gWDg2IHx8IFBQQyB8fCBBTFBIQQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL01ha2VmaWxlIGIvc291bmQvdXNiL01ha2VmaWxlCmluZGV4IGFiYjI4OGIuLjViZjY0YWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9NYWtlZmlsZQorKysgYi9zb3VuZC91c2IvTWFrZWZpbGUKQEAgLTQsOSArNCwxMSBAQAogCiBzbmQtdXNiLWF1ZGlvLW9ianMgOj0gdXNiYXVkaW8ubyB1c2JtaXhlci5vCiBzbmQtdXNiLWxpYi1vYmpzIDo9IHVzYm1pZGkubworc25kLXVhMTAxLW9ianMgOj0gdWExMDEubwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CiBvYmotJChDT05GSUdfU05EX1VTQl9BVURJTykgKz0gc25kLXVzYi1hdWRpby5vIHNuZC11c2ItbGliLm8KK29iai0kKENPTkZJR19TTkRfVVNCX1VBMTAxKSArPSBzbmQtdWExMDEubyBzbmQtdXNiLWxpYi5vCiBvYmotJChDT05GSUdfU05EX1VTQl9VU1gyWSkgKz0gc25kLXVzYi1saWIubwogb2JqLSQoQ09ORklHX1NORF9VU0JfVVMxMjJMKSArPSBzbmQtdXNiLWxpYi5vCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91YTEwMS5jIGIvc291bmQvdXNiL3VhMTAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0Y2NkZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi91YTEwMS5jCkBAIC0wLDAgKzEsMTQyMSBAQAorLyoKKyAqIEVkaXJvbCBVQS0xMDEgZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSAidXNiYXVkaW8uaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJFZGlyb2wgVUEtMTAxIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tFZGlyb2wsVUEtMTAxfX0iKTsKKworLyogSSB1c2UgbXkgVUEtMUEgZm9yIHRlc3RpbmcgYmVjYXVzZSBJIGRvbid0IGhhdmUgYSBVQS0xMDEgLi4uICovCisjZGVmaW5lIFVBMUFfSEFDSworCisvKgorICogU2hvdWxkIG5vdCBiZSBsb3dlciB0aGFuIHRoZSBtaW5pbXVtIHNjaGVkdWxpbmcgZGVsYXkgb2YgdGhlIGhvc3QKKyAqIGNvbnRyb2xsZXIuICBTb21lIEludGVsIGNvbnRyb2xsZXJzIG5lZWQgbW9yZSB0aGFuIG9uZSBmcmFtZTsgYXMgbG9uZyBhcworICogdGhhdCBkcml2ZXIgZG9lc24ndCB0ZWxsIHVzIGFib3V0IHRoaXMsIHVzZSAxLjUgZnJhbWVzIGp1c3QgdG8gYmUgc3VyZS4KKyAqLworI2RlZmluZSBNSU5fUVVFVUVfTEVOR1RICTEyCisvKiBTb21ld2hhdCByYW5kb20uICovCisjZGVmaW5lIE1BWF9RVUVVRV9MRU5HVEgJMzAKKy8qCisgKiBUaGlzIG1hZ2ljIHZhbHVlIG9wdGltaXplcyBtZW1vcnkgdXNhZ2UgZWZmaWNpZW5jeSBmb3IgdGhlIFVBLTEwMSdzIHBhY2tldAorICogc2l6ZXMgYXQgYWxsIHNhbXBsZSByYXRlcywgdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3R1cGlkIGNhY2hlIHBvb2wgc2l6ZXMKKyAqIHRoYXQgdXNiX2J1ZmZlcl9hbGxvYygpIHVzZXMuCisgKi8KKyNkZWZpbmUgREVGQVVMVF9RVUVVRV9MRU5HVEgJMjEKKworI2RlZmluZSBNQVhfUEFDS0VUX1NJWkUJCTY3MiAvKiBoYXJkd2FyZSBzcGVjaWZpYyAqLworI2RlZmluZSBNQVhfTUVNT1JZX0JVRkZFUlMJRElWX1JPVU5EX1VQKE1BWF9RVUVVRV9MRU5HVEgsIFwKKwkJCQkJICAgICBQQUdFX1NJWkUgLyBNQVhfUEFDS0VUX1NJWkUpCisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CitzdGF0aWMgdW5zaWduZWQgaW50IHF1ZXVlX2xlbmd0aCA9IDIxOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiY2FyZCBpbmRleCIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKK21vZHVsZV9wYXJhbShxdWV1ZV9sZW5ndGgsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhxdWV1ZV9sZW5ndGgsICJVU0IgcXVldWUgbGVuZ3RoIGluIG1pY3JvZnJhbWVzLCAiCisJCSBfX3N0cmluZ2lmeShNSU5fUVVFVUVfTEVOR1RIKSItIl9fc3RyaW5naWZ5KE1BWF9RVUVVRV9MRU5HVEgpKTsKKworZW51bSB7CisJSU5URl9QTEFZQkFDSywKKwlJTlRGX0NBUFRVUkUsCisJSU5URl9NSURJLAorCisJSU5URl9DT1VOVAorfTsKKworLyogYml0cyBpbiBzdHJ1Y3QgdWExMDE6OnN0YXRlcyAqLworZW51bSB7CisJVVNCX0NBUFRVUkVfUlVOTklORywKKwlVU0JfUExBWUJBQ0tfUlVOTklORywKKwlBTFNBX0NBUFRVUkVfT1BFTiwKKwlBTFNBX1BMQVlCQUNLX09QRU4sCisJQUxTQV9DQVBUVVJFX1JVTk5JTkcsCisJQUxTQV9QTEFZQkFDS19SVU5OSU5HLAorCUNBUFRVUkVfVVJCX0NPTVBMRVRFRCwKKwlQTEFZQkFDS19VUkJfQ09NUExFVEVELAorCURJU0NPTk5FQ1RFRCwKK307CisKK3N0cnVjdCB1YTEwMSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGZbSU5URl9DT1VOVF07CisJaW50IGNhcmRfaW5kZXg7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1pZGlfbGlzdDsKKwl1NjQgZm9ybWF0X2JpdDsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1bnNpZ25lZCBpbnQgcGFja2V0c19wZXJfc2Vjb25kOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJdW5zaWduZWQgbG9uZyBzdGF0ZXM7CisKKwkvKiBGSUZPIHRvIHN5bmNocm9uaXplIHBsYXliYWNrIHJhdGUgdG8gY2FwdHVyZSByYXRlICovCisJdW5zaWduZWQgaW50IHJhdGVfZmVlZGJhY2tfc3RhcnQ7CisJdW5zaWduZWQgaW50IHJhdGVfZmVlZGJhY2tfY291bnQ7CisJdTggcmF0ZV9mZWVkYmFja1tNQVhfUVVFVUVfTEVOR1RIXTsKKworCXN0cnVjdCBsaXN0X2hlYWQgcmVhZHlfcGxheWJhY2tfdXJiczsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcGxheWJhY2tfdGFza2xldDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBhbHNhX2NhcHR1cmVfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCByYXRlX2ZlZWRiYWNrX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgYWxzYV9wbGF5YmFja193YWl0OworCXN0cnVjdCB1YTEwMV9zdHJlYW0geworCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwkJdW5zaWduZWQgaW50IHVzYl9waXBlOworCQl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CisJCXVuc2lnbmVkIGludCBmcmFtZV9ieXRlczsKKwkJdW5zaWduZWQgaW50IG1heF9wYWNrZXRfYnl0ZXM7CisJCXVuc2lnbmVkIGludCBwZXJpb2RfcG9zOworCQl1bnNpZ25lZCBpbnQgYnVmZmVyX3BvczsKKwkJdW5zaWduZWQgaW50IHF1ZXVlX2xlbmd0aDsKKwkJc3RydWN0IHVhMTAxX3VyYiB7CisJCQlzdHJ1Y3QgdXJiIHVyYjsKKwkJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yIGlzb19mcmFtZV9kZXNjWzFdOworCQkJc3RydWN0IGxpc3RfaGVhZCByZWFkeV9saXN0OworCQl9ICp1cmJzW01BWF9RVUVVRV9MRU5HVEhdOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IHNpemU7CisJCQl2b2lkICphZGRyOworCQkJZG1hX2FkZHJfdCBkbWE7CisJCX0gYnVmZmVyc1tNQVhfTUVNT1JZX0JVRkZFUlNdOworCX0gY2FwdHVyZSwgcGxheWJhY2s7CisKKwl1bnNpZ25lZCBpbnQgZnBzWzEwXTsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfY291bnRlcjsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZGV2aWNlc19tdXRleCk7CitzdGF0aWMgdW5zaWduZWQgaW50IGRldmljZXNfdXNlZDsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1YTEwMV9kcml2ZXI7CisKK3N0YXRpYyB2b2lkIGFib3J0X2Fsc2FfcGxheWJhY2soc3RydWN0IHVhMTAxICp1YSk7CitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX2NhcHR1cmUoc3RydWN0IHVhMTAxICp1YSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2JfZXJyb3Jfc3RyaW5nKGludCBlcnIpCit7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1FTk9ERVY6CisJCXJldHVybiAibm8gZGV2aWNlIjsKKwljYXNlIC1FTk9FTlQ6CisJCXJldHVybiAiZW5kcG9pbnQgbm90IGVuYWJsZWQiOworCWNhc2UgLUVQSVBFOgorCQlyZXR1cm4gImVuZHBvaW50IHN0YWxsZWQiOworCWNhc2UgLUVOT1NQQzoKKwkJcmV0dXJuICJub3QgZW5vdWdoIGJhbmR3aWR0aCI7CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm4gImRldmljZSBkaXNhYmxlZCI7CisJY2FzZSAtRUhPU1RVTlJFQUNIOgorCQlyZXR1cm4gImRldmljZSBzdXNwZW5kZWQiOworCWNhc2UgLUVJTlZBTDoKKwljYXNlIC1FQUdBSU46CisJY2FzZSAtRUZCSUc6CisJY2FzZSAtRU1TR1NJWkU6CisJCXJldHVybiAiaW50ZXJuYWwgZXJyb3IiOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biBlcnJvciI7CisJfQorfQorCitzdGF0aWMgdm9pZCBhYm9ydF91c2JfY2FwdHVyZShzdHJ1Y3QgdWExMDEgKnVhKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNCX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKSB7CisJCXdha2VfdXAoJnVhLT5hbHNhX2NhcHR1cmVfd2FpdCk7CisJCXdha2VfdXAoJnVhLT5yYXRlX2ZlZWRiYWNrX3dhaXQpOworCX0KK30KKworc3RhdGljIHZvaWQgYWJvcnRfdXNiX3BsYXliYWNrKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQl3YWtlX3VwKCZ1YS0+YWxzYV9wbGF5YmFja193YWl0KTsKK30KKworc3RhdGljIHZvaWQgcGxheWJhY2tfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVzYl91cmIpCit7CisJc3RydWN0IHVhMTAxX3VyYiAqdXJiID0gKHN0cnVjdCB1YTEwMV91cmIgKil1c2JfdXJiOworCXN0cnVjdCB1YTEwMSAqdWEgPSB1cmItPnVyYi5jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkodXJiLT51cmIuc3RhdHVzID09IC1FTk9FTlQgfHwJLyogdW5saW5rZWQgKi8KKwkJICAgICB1cmItPnVyYi5zdGF0dXMgPT0gLUVOT0RFViB8fAkvKiBkZXZpY2UgcmVtb3ZlZCAqLworCQkgICAgIHVyYi0+dXJiLnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAkvKiB1bmxpbmtlZCAqLworCQkgICAgIHVyYi0+dXJiLnN0YXR1cyA9PSAtRVNIVVRET1dOKSkgewkvKiBkZXZpY2UgZGlzYWJsZWQgKi8KKwkJYWJvcnRfdXNiX3BsYXliYWNrKHVhKTsKKwkJYWJvcnRfYWxzYV9wbGF5YmFjayh1YSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodGVzdF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkgeworCQkvKiBhcHBlbmQgVVJCIHRvIEZJRk8gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVhLT5sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJnVyYi0+cmVhZHlfbGlzdCwgJnVhLT5yZWFkeV9wbGF5YmFja191cmJzKTsKKwkJaWYgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID4gMCkKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnVhLT5wbGF5YmFja190YXNrbGV0KTsKKwkJdWEtPnBsYXliYWNrLnN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgLT0KKwkJCQl1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGggLworCQkJCQkJdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgZmlyc3RfcGxheWJhY2tfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gdXJiLT5jb250ZXh0OworCisJdXJiLT5jb21wbGV0ZSA9IHBsYXliYWNrX3VyYl9jb21wbGV0ZTsKKwlwbGF5YmFja191cmJfY29tcGxldGUodXJiKTsKKworCXNldF9iaXQoUExBWUJBQ0tfVVJCX0NPTVBMRVRFRCwgJnVhLT5zdGF0ZXMpOworCXdha2VfdXAoJnVhLT5hbHNhX3BsYXliYWNrX3dhaXQpOworfQorCisvKiBjb3B5IGRhdGEgZnJvbSB0aGUgQUxTQSByaW5nIGJ1ZmZlciBpbnRvIHRoZSBVUkIgYnVmZmVyICovCitzdGF0aWMgYm9vbCBjb3B5X3BsYXliYWNrX2RhdGEoc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGZyYW1lcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXVuc2lnbmVkIGludCBmcmFtZV9ieXRlcywgZnJhbWVzMTsKKwljb25zdCB1OCAqc291cmNlOworCisJcnVudGltZSA9IHN0cmVhbS0+c3Vic3RyZWFtLT5ydW50aW1lOworCWZyYW1lX2J5dGVzID0gc3RyZWFtLT5mcmFtZV9ieXRlczsKKwlzb3VyY2UgPSBydW50aW1lLT5kbWFfYXJlYSArIHN0cmVhbS0+YnVmZmVyX3BvcyAqIGZyYW1lX2J5dGVzOworCWlmIChzdHJlYW0tPmJ1ZmZlcl9wb3MgKyBmcmFtZXMgPD0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBzb3VyY2UsIGZyYW1lcyAqIGZyYW1lX2J5dGVzKTsKKwl9IGVsc2UgeworCQkvKiB3cmFwIGFyb3VuZCBhdCBlbmQgb2YgcmluZyBidWZmZXIgKi8KKwkJZnJhbWVzMSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc3RyZWFtLT5idWZmZXJfcG9zOworCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIsIHNvdXJjZSwgZnJhbWVzMSAqIGZyYW1lX2J5dGVzKTsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgZnJhbWVzMSAqIGZyYW1lX2J5dGVzLAorCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEsIChmcmFtZXMgLSBmcmFtZXMxKSAqIGZyYW1lX2J5dGVzKTsKKwl9CisKKwlzdHJlYW0tPmJ1ZmZlcl9wb3MgKz0gZnJhbWVzOworCWlmIChzdHJlYW0tPmJ1ZmZlcl9wb3MgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCXN0cmVhbS0+YnVmZmVyX3BvcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlzdHJlYW0tPnBlcmlvZF9wb3MgKz0gZnJhbWVzOworCWlmIChzdHJlYW0tPnBlcmlvZF9wb3MgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJc3RyZWFtLT5wZXJpb2RfcG9zIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3dpdGhfd3JhcGFyb3VuZChzdHJ1Y3QgdWExMDEgKnVhLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgYWRkKQoreworCSp2YWx1ZSArPSBhZGQ7CisJaWYgKCp2YWx1ZSA+PSB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoKQorCQkqdmFsdWUgLT0gdWEtPnBsYXliYWNrLnF1ZXVlX2xlbmd0aDsKK30KKworc3RhdGljIHZvaWQgcGxheWJhY2tfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVhMTAxICp1YSA9ICh2b2lkICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBmcmFtZXM7CisJc3RydWN0IHVhMTAxX3VyYiAqdXJiOworCWJvb2wgZG9fcGVyaW9kX2VsYXBzZWQgPSBmYWxzZTsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTeW5jaHJvbml6aW5nIHRoZSBwbGF5YmFjayByYXRlIHRvIHRoZSBjYXB0dXJlIHJhdGUgaXMgZG9uZSBieSB1c2luZworCSAqIHRoZSBzYW1lIHNlcXVlbmNlIG9mIHBhY2tldCBzaXplcyBmb3IgYm90aCBzdHJlYW1zLgorCSAqIFN1Ym1pdHRpbmcgYSBwbGF5YmFjayBVUkIgdGhlcmVmb3JlIHJlcXVpcmVzIGJvdGggYSByZWFkeSBVUkIgYW5kCisJICogdGhlIHNpemUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FwdHVyZSBwYWNrZXQsIGkuZS4sIGJvdGggcGxheWJhY2sKKwkgKiBhbmQgY2FwdHVyZSBVUkJzIG11c3QgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gIFNpbmNlIHRoZSBVU0IgY29yZSBkb2VzCisJICogbm90IGd1YXJhbnRlZSB0aGF0IHBsYXliYWNrIGFuZCBjYXB0dXJlIGNvbXBsZXRlIGNhbGxiYWNrcyBhcmUKKwkgKiBjYWxsZWQgYWx0ZXJuYXRlbHksIHdlIHVzZSB0d28gRklGT3MgZm9yIHBhY2tldCBzaXplcyBhbmQgcmVhZCBVUkJzOworCSAqIHN1Ym1pdHRpbmcgcGxheWJhY2sgVVJCcyBpcyBwb3NzaWJsZSBhcyBsb25nIGFzIGJvdGggRklGT3MgYXJlCisJICogbm9uZW1wdHkuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVhLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID4gMCAmJgorCSAgICAgICAhbGlzdF9lbXB0eSgmdWEtPnJlYWR5X3BsYXliYWNrX3VyYnMpKSB7CisJCS8qIHRha2UgcGFja2V0IHNpemUgb3V0IG9mIEZJRk8gKi8KKwkJZnJhbWVzID0gdWEtPnJhdGVfZmVlZGJhY2tbdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnRdOworCQlhZGRfd2l0aF93cmFwYXJvdW5kKHVhLCAmdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnQsIDEpOworCQl1YS0+cmF0ZV9mZWVkYmFja19jb3VudC0tOworCisJCS8qIHRha2UgVVJCIG91dCBvZiBGSUZPICovCisJCXVyYiA9IGxpc3RfZmlyc3RfZW50cnkoJnVhLT5yZWFkeV9wbGF5YmFja191cmJzLAorCQkJCSAgICAgICBzdHJ1Y3QgdWExMDFfdXJiLCByZWFkeV9saXN0KTsKKwkJbGlzdF9kZWwoJnVyYi0+cmVhZHlfbGlzdCk7CisKKwkJLyogZmlsbCBwYWNrZXQgd2l0aCBkYXRhIG9yIHNpbGVuY2UgKi8KKwkJdXJiLT51cmIuaXNvX2ZyYW1lX2Rlc2NbMF0ubGVuZ3RoID0KKwkJCWZyYW1lcyAqIHVhLT5wbGF5YmFjay5mcmFtZV9ieXRlczsKKwkJaWYgKHRlc3RfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQkJZG9fcGVyaW9kX2VsYXBzZWQgfD0gY29weV9wbGF5YmFja19kYXRhKCZ1YS0+cGxheWJhY2ssCisJCQkJCQkJCSZ1cmItPnVyYiwKKwkJCQkJCQkJZnJhbWVzKTsKKwkJZWxzZQorCQkJbWVtc2V0KHVyYi0+dXJiLnRyYW5zZmVyX2J1ZmZlciwgMCwKKwkJCSAgICAgICB1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGgpOworCisJCS8qIGFuZCBvZmYgeW91IGdvIC4uLiAqLworCQllcnIgPSB1c2Jfc3VibWl0X3VyYigmdXJiLT51cmIsIEdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhLT5sb2NrLCBmbGFncyk7CisJCQlhYm9ydF91c2JfcGxheWJhY2sodWEpOworCQkJYWJvcnRfYWxzYV9wbGF5YmFjayh1YSk7CisJCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJVU0IgcmVxdWVzdCBlcnJvciAlZDogJXNcbiIsCisJCQkJZXJyLCB1c2JfZXJyb3Jfc3RyaW5nKGVycikpOworCQkJcmV0dXJuOworCQl9CisJCXVhLT5wbGF5YmFjay5zdWJzdHJlYW0tPnJ1bnRpbWUtPmRlbGF5ICs9IGZyYW1lczsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWEtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZG9fcGVyaW9kX2VsYXBzZWQpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQodWEtPnBsYXliYWNrLnN1YnN0cmVhbSk7Cit9CisKKy8qIGNvcHkgZGF0YSBmcm9tIHRoZSBVUkIgYnVmZmVyIGludG8gdGhlIEFMU0EgcmluZyBidWZmZXIgKi8KK3N0YXRpYyBib29sIGNvcHlfY2FwdHVyZV9kYXRhKHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IHVyYiAqdXJiLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZyYW1lcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXVuc2lnbmVkIGludCBmcmFtZV9ieXRlcywgZnJhbWVzMTsKKwl1OCAqZGVzdDsKKworCXJ1bnRpbWUgPSBzdHJlYW0tPnN1YnN0cmVhbS0+cnVudGltZTsKKwlmcmFtZV9ieXRlcyA9IHN0cmVhbS0+ZnJhbWVfYnl0ZXM7CisJZGVzdCA9IHJ1bnRpbWUtPmRtYV9hcmVhICsgc3RyZWFtLT5idWZmZXJfcG9zICogZnJhbWVfYnl0ZXM7CisJaWYgKHN0cmVhbS0+YnVmZmVyX3BvcyArIGZyYW1lcyA8PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQltZW1jcHkoZGVzdCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGZyYW1lcyAqIGZyYW1lX2J5dGVzKTsKKwl9IGVsc2UgeworCQkvKiB3cmFwIGFyb3VuZCBhdCBlbmQgb2YgcmluZyBidWZmZXIgKi8KKwkJZnJhbWVzMSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc3RyZWFtLT5idWZmZXJfcG9zOworCQltZW1jcHkoZGVzdCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGZyYW1lczEgKiBmcmFtZV9ieXRlcyk7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwKKwkJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgZnJhbWVzMSAqIGZyYW1lX2J5dGVzLAorCQkgICAgICAgKGZyYW1lcyAtIGZyYW1lczEpICogZnJhbWVfYnl0ZXMpOworCX0KKworCXN0cmVhbS0+YnVmZmVyX3BvcyArPSBmcmFtZXM7CisJaWYgKHN0cmVhbS0+YnVmZmVyX3BvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJc3RyZWFtLT5idWZmZXJfcG9zIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCXN0cmVhbS0+cGVyaW9kX3BvcyArPSBmcmFtZXM7CisJaWYgKHN0cmVhbS0+cGVyaW9kX3BvcyA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlzdHJlYW0tPnBlcmlvZF9wb3MgLT0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGNhcHR1cmVfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSA9ICZ1YS0+Y2FwdHVyZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBmcmFtZXMsIHdyaXRlX3B0cjsKKwlib29sIGRvX3BlcmlvZF9lbGFwc2VkOworCWludCBlcnI7CisKKwlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAkJLyogdW5saW5rZWQgKi8KKwkJICAgICB1cmItPnN0YXR1cyA9PSAtRU5PREVWIHx8CQkvKiBkZXZpY2UgcmVtb3ZlZCAqLworCQkgICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CS8qIHVubGlua2VkICovCisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpCS8qIGRldmljZSBkaXNhYmxlZCAqLworCQlnb3RvIHN0cmVhbV9zdG9wcGVkOworCisJaWYgKHVyYi0+c3RhdHVzID49IDAgJiYgdXJiLT5pc29fZnJhbWVfZGVzY1swXS5zdGF0dXMgPj0gMCkKKwkJZnJhbWVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1swXS5hY3R1YWxfbGVuZ3RoIC8KKwkJCXN0cmVhbS0+ZnJhbWVfYnl0ZXM7CisJZWxzZQorCQlmcmFtZXMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVhLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZnJhbWVzID4gMCAmJiB0ZXN0X2JpdChBTFNBX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQlkb19wZXJpb2RfZWxhcHNlZCA9IGNvcHlfY2FwdHVyZV9kYXRhKHN0cmVhbSwgdXJiLCBmcmFtZXMpOworCWVsc2UKKwkJZG9fcGVyaW9kX2VsYXBzZWQgPSBmYWxzZTsKKworCWlmICh0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykpIHsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCQkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiVVNCIHJlcXVlc3QgZXJyb3IgJWQ6ICVzXG4iLAorCQkJCWVyciwgdXNiX2Vycm9yX3N0cmluZyhlcnIpKTsKKwkJCWdvdG8gc3RyZWFtX3N0b3BwZWQ7CisJCX0KKworCQkvKiBhcHBlbmQgcGFja2V0IHNpemUgdG8gRklGTyAqLworCQl3cml0ZV9wdHIgPSB1YS0+cmF0ZV9mZWVkYmFja19zdGFydDsKKwkJYWRkX3dpdGhfd3JhcGFyb3VuZCh1YSwgJndyaXRlX3B0ciwgdWEtPnJhdGVfZmVlZGJhY2tfY291bnQpOworCQl1YS0+cmF0ZV9mZWVkYmFja1t3cml0ZV9wdHJdID0gZnJhbWVzOworCQlpZiAodWEtPnJhdGVfZmVlZGJhY2tfY291bnQgPCB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoKSB7CisJCQl1YS0+cmF0ZV9mZWVkYmFja19jb3VudCsrOworCQkJaWYgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID09CisJCQkJCQl1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoKQorCQkJCXdha2VfdXAoJnVhLT5yYXRlX2ZlZWRiYWNrX3dhaXQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFJpbmcgYnVmZmVyIG92ZXJmbG93OyB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgcGxheWJhY2sKKwkJCSAqIHN0cmVhbSBpcyBub3QgcnVubmluZy4gIFRocm93IGF3YXkgdGhlIG9sZGVzdCBlbnRyeSwKKwkJCSAqIHNvIHRoYXQgdGhlIHBsYXliYWNrIHN0cmVhbSwgd2hlbiBpdCBzdGFydHMsIHNlZXMKKwkJCSAqIHRoZSBtb3N0IHJlY2VudCBwYWNrZXQgc2l6ZXMuCisJCQkgKi8KKwkJCWFkZF93aXRoX3dyYXBhcm91bmQodWEsICZ1YS0+cmF0ZV9mZWVkYmFja19zdGFydCwgMSk7CisJCX0KKwkJaWYgKHRlc3RfYml0KFVTQl9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcykgJiYKKwkJICAgICFsaXN0X2VtcHR5KCZ1YS0+cmVhZHlfcGxheWJhY2tfdXJicykpCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZ1YS0+cGxheWJhY2tfdGFza2xldCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWEtPmxvY2ssIGZsYWdzKTsKKworCWlmIChkb19wZXJpb2RfZWxhcHNlZCkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdHJlYW0tPnN1YnN0cmVhbSk7CisKKwkvKiBmb3IgZGVidWdnaW5nOiBtZWFzdXJlIHRoZSBzYW1wbGUgcmF0ZSByZWxhdGl2ZSB0byB0aGUgVVNCIGNsb2NrICovCisJdWEtPmZwc1t1YS0+ZnJhbWVfY291bnRlcisrIC8gdWEtPnBhY2tldHNfcGVyX3NlY29uZF0gKz0gZnJhbWVzOworCWlmICh1YS0+ZnJhbWVfY291bnRlciA+PSBBUlJBWV9TSVpFKHVhLT5mcHMpICogdWEtPnBhY2tldHNfcGVyX3NlY29uZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwdHVyZSByYXRlOiIpOworCQlmb3IgKGZyYW1lcyA9IDA7IGZyYW1lcyA8IEFSUkFZX1NJWkUodWEtPmZwcyk7ICsrZnJhbWVzKQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiICV1IiwgdWEtPmZwc1tmcmFtZXNdKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJbWVtc2V0KHVhLT5mcHMsIDAsIHNpemVvZih1YS0+ZnBzKSk7CisJCXVhLT5mcmFtZV9jb3VudGVyID0gMDsKKwl9CisJcmV0dXJuOworCitzdHJlYW1fc3RvcHBlZDoKKwlhYm9ydF91c2JfcGxheWJhY2sodWEpOworCWFib3J0X3VzYl9jYXB0dXJlKHVhKTsKKwlhYm9ydF9hbHNhX3BsYXliYWNrKHVhKTsKKwlhYm9ydF9hbHNhX2NhcHR1cmUodWEpOworfQorCitzdGF0aWMgdm9pZCBmaXJzdF9jYXB0dXJlX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHVyYi0+Y29udGV4dDsKKworCXVyYi0+Y29tcGxldGUgPSBjYXB0dXJlX3VyYl9jb21wbGV0ZTsKKwljYXB0dXJlX3VyYl9jb21wbGV0ZSh1cmIpOworCisJc2V0X2JpdChDQVBUVVJFX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl3YWtlX3VwKCZ1YS0+YWxzYV9jYXB0dXJlX3dhaXQpOworfQorCitzdGF0aWMgaW50IHN1Ym1pdF9zdHJlYW1fdXJicyhzdHJ1Y3QgdWExMDEgKnVhLCBzdHJ1Y3QgdWExMDFfc3RyZWFtICpzdHJlYW0pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RyZWFtLT5xdWV1ZV9sZW5ndGg7ICsraSkgeworCQlpbnQgZXJyID0gdXNiX3N1Ym1pdF91cmIoJnN0cmVhbS0+dXJic1tpXS0+dXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgIlVTQiByZXF1ZXN0IGVycm9yICVkOiAlc1xuIiwKKwkJCQllcnIsIHVzYl9lcnJvcl9zdHJpbmcoZXJyKSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBraWxsX3N0cmVhbV91cmJzKHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPnF1ZXVlX2xlbmd0aDsgKytpKQorCQl1c2Jfa2lsbF91cmIoJnN0cmVhbS0+dXJic1tpXS0+dXJiKTsKK30KKworc3RhdGljIGludCBlbmFibGVfaXNvX2ludGVyZmFjZShzdHJ1Y3QgdWExMDEgKnVhLCB1bnNpZ25lZCBpbnQgaW50Zl9pbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCisJYWx0cyA9IHVhLT5pbnRmW2ludGZfaW5kZXhdLT5jdXJfYWx0c2V0dGluZzsKKwlpZiAoYWx0cy0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyAhPSAxKSB7CisJCWludCBlcnIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1YS0+ZGV2LAorCQkJCQkgICAgYWx0cy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAxKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwKKwkJCQkiY2Fubm90IGluaXRpYWxpemUgaW50ZXJmYWNlOyBlcnJvciAlZDogJXNcbiIsCisJCQkJZXJyLCB1c2JfZXJyb3Jfc3RyaW5nKGVycikpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9pc29faW50ZXJmYWNlKHN0cnVjdCB1YTEwMSAqdWEsIHVuc2lnbmVkIGludCBpbnRmX2luZGV4KQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CisKKwlhbHRzID0gdWEtPmludGZbaW50Zl9pbmRleF0tPmN1cl9hbHRzZXR0aW5nOworCWlmIChhbHRzLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nICE9IDApIHsKKwkJaW50IGVyciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVhLT5kZXYsCisJCQkJCSAgICBhbHRzLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDApOworCQlpZiAoZXJyIDwgMCAmJiAhdGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpCisJCQlkZXZfd2FybigmdWEtPmRldi0+ZGV2LAorCQkJCSAiaW50ZXJmYWNlIHJlc2V0IGZhaWxlZDsgZXJyb3IgJWQ6ICVzXG4iLAorCQkJCSBlcnIsIHVzYl9lcnJvcl9zdHJpbmcoZXJyKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9wX3VzYl9jYXB0dXJlKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJY2xlYXJfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKworCWtpbGxfc3RyZWFtX3VyYnMoJnVhLT5jYXB0dXJlKTsKKworCWRpc2FibGVfaXNvX2ludGVyZmFjZSh1YSwgSU5URl9DQVBUVVJFKTsKK30KKworc3RhdGljIGludCBzdGFydF91c2JfY2FwdHVyZShzdHJ1Y3QgdWExMDEgKnVhKQoreworCWludCBlcnI7CisKKwlpZiAodGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIDA7CisKKwlraWxsX3N0cmVhbV91cmJzKCZ1YS0+Y2FwdHVyZSk7CisKKwllcnIgPSBlbmFibGVfaXNvX2ludGVyZmFjZSh1YSwgSU5URl9DQVBUVVJFKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWNsZWFyX2JpdChDQVBUVVJFX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl1YS0+Y2FwdHVyZS51cmJzWzBdLT51cmIuY29tcGxldGUgPSBmaXJzdF9jYXB0dXJlX3VyYl9jb21wbGV0ZTsKKwl1YS0+cmF0ZV9mZWVkYmFja19zdGFydCA9IDA7CisJdWEtPnJhdGVfZmVlZGJhY2tfY291bnQgPSAwOworCisJc2V0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcyk7CisJZXJyID0gc3VibWl0X3N0cmVhbV91cmJzKHVhLCAmdWEtPmNhcHR1cmUpOworCWlmIChlcnIgPCAwKQorCQlzdG9wX3VzYl9jYXB0dXJlKHVhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzdG9wX3VzYl9wbGF5YmFjayhzdHJ1Y3QgdWExMDEgKnVhKQoreworCWNsZWFyX2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCisJa2lsbF9zdHJlYW1fdXJicygmdWEtPnBsYXliYWNrKTsKKworCXRhc2tsZXRfa2lsbCgmdWEtPnBsYXliYWNrX3Rhc2tsZXQpOworCisJZGlzYWJsZV9pc29faW50ZXJmYWNlKHVhLCBJTlRGX1BMQVlCQUNLKTsKK30KKworc3RhdGljIGludCBzdGFydF91c2JfcGxheWJhY2soc3RydWN0IHVhMTAxICp1YSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZnJhbWVzOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgZXJyID0gMDsKKworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAodGVzdF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIDA7CisKKwlraWxsX3N0cmVhbV91cmJzKCZ1YS0+cGxheWJhY2spOworCXRhc2tsZXRfa2lsbCgmdWEtPnBsYXliYWNrX3Rhc2tsZXQpOworCisJZXJyID0gZW5hYmxlX2lzb19pbnRlcmZhY2UodWEsIElOVEZfUExBWUJBQ0spOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJY2xlYXJfYml0KFBMQVlCQUNLX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl1YS0+cGxheWJhY2sudXJic1swXS0+dXJiLmNvbXBsZXRlID0KKwkJZmlyc3RfcGxheWJhY2tfdXJiX2NvbXBsZXRlOworCXNwaW5fbG9ja19pcnEoJnVhLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdWEtPnJlYWR5X3BsYXliYWNrX3VyYnMpOworCXNwaW5fdW5sb2NrX2lycSgmdWEtPmxvY2spOworCisJLyoKKwkgKiBXZSBzdWJtaXQgdGhlIGluaXRpYWwgVVJCcyBhbGwgYXQgb25jZSwgc28gd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUKKwkgKiBwYWNrZXQgc2l6ZSBGSUZPIHRvIGJlIGZ1bGwuCisJICovCisJd2FpdF9ldmVudCh1YS0+cmF0ZV9mZWVkYmFja193YWl0LAorCQkgICB1YS0+cmF0ZV9mZWVkYmFja19jb3VudCA+PSB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoIHx8CisJCSAgICF0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykgfHwKKwkJICAgdGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpOworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkgeworCQlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkgeworCQlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoOyArK2kpIHsKKwkJLyogYWxsIGluaXRpYWwgVVJCcyBjb250YWluIHNpbGVuY2UgKi8KKwkJc3Bpbl9sb2NrX2lycSgmdWEtPmxvY2spOworCQlmcmFtZXMgPSB1YS0+cmF0ZV9mZWVkYmFja1t1YS0+cmF0ZV9mZWVkYmFja19zdGFydF07CisJCWFkZF93aXRoX3dyYXBhcm91bmQodWEsICZ1YS0+cmF0ZV9mZWVkYmFja19zdGFydCwgMSk7CisJCXVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50LS07CisJCXNwaW5fdW5sb2NrX2lycSgmdWEtPmxvY2spOworCQl1cmIgPSAmdWEtPnBsYXliYWNrLnVyYnNbaV0tPnVyYjsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGggPQorCQkJZnJhbWVzICogdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzOworCQltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsCisJCSAgICAgICB1cmItPmlzb19mcmFtZV9kZXNjWzBdLmxlbmd0aCk7CisJfQorCisJc2V0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCWVyciA9IHN1Ym1pdF9zdHJlYW1fdXJicyh1YSwgJnVhLT5wbGF5YmFjayk7CisJaWYgKGVyciA8IDApCisJCXN0b3BfdXNiX3BsYXliYWNrKHVhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX2NhcHR1cmUoc3RydWN0IHVhMTAxICp1YSkKK3sKKwlpZiAodGVzdF9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJc25kX3BjbV9zdG9wKHVhLT5jYXB0dXJlLnN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX3BsYXliYWNrKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJaWYgKHRlc3RfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQlzbmRfcGNtX3N0b3AodWEtPnBsYXliYWNrLnN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOworfQorCitzdGF0aWMgaW50IHNldF9zdHJlYW1faHcoc3RydWN0IHVhMTAxICp1YSwgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgdW5zaWduZWQgaW50IGNoYW5uZWxzKQoreworCWludCBlcnI7CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmluZm8gPQorCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX0JBVENIIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX0ZJRk9fSU5fRlJBTUVTOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuZm9ybWF0cyA9IHVhLT5mb3JtYXRfYml0OworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucmF0ZXMgPSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQodWEtPnJhdGUpOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucmF0ZV9taW4gPSB1YS0+cmF0ZTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gdWEtPnJhdGU7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5jaGFubmVsc19taW4gPSBjaGFubmVsczsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IGNoYW5uZWxzOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuYnVmZmVyX2J5dGVzX21heCA9IDQ1MDAwICogMTAyNDsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19taW4gPSAxOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucGVyaW9kX2J5dGVzX21heCA9IFVJTlRfTUFYOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucGVyaW9kc19taW4gPSAyOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucGVyaW9kc19tYXggPSBVSU5UX01BWDsKKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9USU1FLAorCQkJCQkgICAxNTAwMDAwIC8gdWEtPnBhY2tldHNfcGVyX3NlY29uZCwKKwkJCQkJICAgODE5MjAwMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIDMyLCAyNCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJdWEtPmNhcHR1cmUuc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCWVyciA9IHNldF9zdHJlYW1faHcodWEsIHN1YnN0cmVhbSwgdWEtPmNhcHR1cmUuY2hhbm5lbHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuZmlmb19zaXplID0KKwkJRElWX1JPVU5EX0NMT1NFU1QodWEtPnJhdGUsIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmQpOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmZpZm9fc2l6ZTsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCWlmIChlcnIgPj0gMCkKKwkJc2V0X2JpdChBTFNBX0NBUFRVUkVfT1BFTiwgJnVhLT5zdGF0ZXMpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBsYXliYWNrX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJdWEtPnBsYXliYWNrLnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwllcnIgPSBzZXRfc3RyZWFtX2h3KHVhLCBzdWJzdHJlYW0sIHVhLT5wbGF5YmFjay5jaGFubmVscyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5maWZvX3NpemUgPQorCQlESVZfUk9VTkRfQ0xPU0VTVCh1YS0+cmF0ZSAqIHVhLT5wbGF5YmFjay5xdWV1ZV9sZW5ndGgsCisJCQkJICB1YS0+cGFja2V0c19wZXJfc2Vjb25kKTsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCWVyciA9IHN0YXJ0X3VzYl9wbGF5YmFjayh1YSk7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKCF0ZXN0X2JpdChBTFNBX0NBUFRVUkVfT1BFTiwgJnVhLT5zdGF0ZXMpKQorCQkJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJCWdvdG8gZXJyb3I7CisJfQorCXNldF9iaXQoQUxTQV9QTEFZQkFDS19PUEVOLCAmdWEtPnN0YXRlcyk7CitlcnJvcjoKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWNsZWFyX2JpdChBTFNBX0NBUFRVUkVfT1BFTiwgJnVhLT5zdGF0ZXMpOworCWlmICghdGVzdF9iaXQoQUxTQV9QTEFZQkFDS19PUEVOLCAmdWEtPnN0YXRlcykpCisJCXN0b3BfdXNiX2NhcHR1cmUodWEpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJY2xlYXJfYml0KEFMU0FfUExBWUJBQ0tfT1BFTiwgJnVhLT5zdGF0ZXMpOworCWlmICghdGVzdF9iaXQoQUxTQV9DQVBUVVJFX09QRU4sICZ1YS0+c3RhdGVzKSkKKwkJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcHR1cmVfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWVyciA9IHN0YXJ0X3VzYl9jYXB0dXJlKHVhKTsKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtLAorCQkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWVyciA9IHN0YXJ0X3VzYl9jYXB0dXJlKHVhKTsKKwlpZiAoZXJyID49IDApCisJCWVyciA9IHN0YXJ0X3VzYl9wbGF5YmFjayh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKKwkJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgdWExMDFfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwllcnIgPSBzdGFydF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyoKKwkgKiBUaGUgRUhDSSBkcml2ZXIgc2NoZWR1bGVzIHRoZSBmaXJzdCBwYWNrZXQgb2YgYW4gaXNvIHN0cmVhbSBhdCAxMCBtcworCSAqIGluIHRoZSBmdXR1cmUsIGkuZS4sIG5vIGRhdGEgaXMgYWN0dWFsbHkgY2FwdHVyZWQgZm9yIHRoYXQgbG9uZy4KKwkgKiBUYWtlIHRoZSB3YWl0IGhlcmUgc28gdGhhdCB0aGUgc3RyZWFtIGlzIGtub3duIHRvIGJlIGFjdHVhbGx5CisJICogcnVubmluZyB3aGVuIHRoZSBzdGFydCB0cmlnZ2VyIGhhcyBiZWVuIGNhbGxlZC4KKwkgKi8KKwl3YWl0X2V2ZW50KHVhLT5hbHNhX2NhcHR1cmVfd2FpdCwKKwkJICAgdGVzdF9iaXQoQ0FQVFVSRV9VUkJfQ09NUExFVEVELCAmdWEtPnN0YXRlcykgfHwKKwkJICAgIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSk7CisJaWYgKHRlc3RfYml0KERJU0NPTk5FQ1RFRCwgJnVhLT5zdGF0ZXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FSU87CisKKwl1YS0+Y2FwdHVyZS5wZXJpb2RfcG9zID0gMDsKKwl1YS0+Y2FwdHVyZS5idWZmZXJfcG9zID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCWlmIChlcnIgPj0gMCkKKwkJZXJyID0gc3RhcnRfdXNiX3BsYXliYWNrKHVhKTsKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBzZWUgdGhlIGNvbW1lbnQgaW4gY2FwdHVyZV9wY21fcHJlcGFyZSgpICovCisJd2FpdF9ldmVudCh1YS0+YWxzYV9wbGF5YmFja193YWl0LAorCQkgICB0ZXN0X2JpdChQTEFZQkFDS19VUkJfQ09NUExFVEVELCAmdWEtPnN0YXRlcykgfHwKKwkJICAgIXRlc3RfYml0KFVTQl9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcykpOworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQlyZXR1cm4gLUVJTzsKKworCXN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgPSAwOworCXVhLT5wbGF5YmFjay5wZXJpb2RfcG9zID0gMDsKKwl1YS0+cGxheWJhY2suYnVmZmVyX3BvcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FwdHVyZV9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWlmICghdGVzdF9iaXQoVVNCX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQkJcmV0dXJuIC1FSU87CisJCXNldF9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQljbGVhcl9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHBsYXliYWNrX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKCF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQkJcmV0dXJuIC1FSU87CisJCXNldF9iaXQoQUxTQV9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcyk7CisJCXJldHVybiAwOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJY2xlYXJfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc25kX3BjbV91ZnJhbWVzX3QgdWExMDFfcGNtX3BvaW50ZXIoc3RydWN0IHVhMTAxICp1YSwKKwkJCQkJCSAgc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHBvczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1YS0+bG9jaywgZmxhZ3MpOworCXBvcyA9IHN0cmVhbS0+YnVmZmVyX3BvczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBjYXB0dXJlX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vicy0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHVhMTAxX3BjbV9wb2ludGVyKHVhLCAmdWEtPmNhcHR1cmUpOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgcGxheWJhY2tfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gdWExMDFfcGNtX3BvaW50ZXIodWEsICZ1YS0+cGxheWJhY2spOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGNhcHR1cmVfcGNtX29wcyA9IHsKKwkub3BlbiA9IGNhcHR1cmVfcGNtX29wZW4sCisJLmNsb3NlID0gY2FwdHVyZV9wY21fY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IGNhcHR1cmVfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHVhMTAxX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0gY2FwdHVyZV9wY21fcHJlcGFyZSwKKwkudHJpZ2dlciA9IGNhcHR1cmVfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBjYXB0dXJlX3BjbV9wb2ludGVyLAorCS5wYWdlID0gc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9IHNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgcGxheWJhY2tfcGNtX29wcyA9IHsKKwkub3BlbiA9IHBsYXliYWNrX3BjbV9vcGVuLAorCS5jbG9zZSA9IHBsYXliYWNrX3BjbV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gcGxheWJhY2tfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHVhMTAxX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0gcGxheWJhY2tfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIgPSBwbGF5YmFja19wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9IHBsYXliYWNrX3BjbV9wb2ludGVyLAorCS5wYWdlID0gc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9IHNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvciAqCitmaW5kX2Zvcm1hdF9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCXU4ICpleHRyYTsKKwlpbnQgZXh0cmFsZW47CisKKwlpZiAoaW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZyAhPSAyKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiaW52YWxpZCBudW1fYWx0c2V0dGluZ1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWFsdCA9ICZpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF07CisJaWYgKGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDApIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJpbnZhbGlkIGJOdW1FbmRwb2ludHNcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlhbHQgPSAmaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzFdOworCWlmIChhbHQtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiaW52YWxpZCBiTnVtRW5kcG9pbnRzXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXh0cmEgPSBhbHQtPmV4dHJhOworCWV4dHJhbGVuID0gYWx0LT5leHRyYWxlbjsKKwl3aGlsZSAoZXh0cmFsZW4gPj0gc2l6ZW9mKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIpKSB7CisJCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpkZXNjOworCisJCWRlc2MgPSAoc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKilleHRyYTsKKwkJaWYgKGRlc2MtPmJMZW5ndGggPiBleHRyYWxlbikgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJkZXNjcmlwdG9yIG92ZXJmbG93XG4iKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlmIChkZXNjLT5iTGVuZ3RoID09IFVBQ19GT1JNQVRfVFlQRV9JX0RJU0NSRVRFX0RFU0NfU0laRSgxKSAmJgorCQkgICAgZGVzYy0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9DU19JTlRFUkZBQ0UgJiYKKwkJICAgIGRlc2MtPmJEZXNjcmlwdG9yU3VidHlwZSA9PSBVQUNfRk9STUFUX1RZUEUpIHsKKwkJCWlmIChkZXNjLT5iRm9ybWF0VHlwZSAhPSBVQUNfRk9STUFUX1RZUEVfSV9QQ00gfHwKKwkJCSAgICBkZXNjLT5iU2FtRnJlcVR5cGUgIT0gMSkgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJCQkiaW52YWxpZCBmb3JtYXQgdHlwZVxuIik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlyZXR1cm4gZGVzYzsKKwkJfQorCQlleHRyYWxlbiAtPSBkZXNjLT5iTGVuZ3RoOworCQlleHRyYSArPSBkZXNjLT5iTGVuZ3RoOworCX0KKwlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgInNhbXBsZSBmb3JtYXQgZGVzY3JpcHRvciBub3QgZm91bmRcbiIpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRldGVjdF91c2JfZm9ybWF0KHN0cnVjdCB1YTEwMSAqdWEpCit7CisJY29uc3Qgc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKmZtdF9jYXB0dXJlOworCWNvbnN0IHN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXRfcGxheWJhY2s7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQ7CisJdW5zaWduZWQgaW50IHJhdGUyOworCisJZm10X2NhcHR1cmUgPSBmaW5kX2Zvcm1hdF9kZXNjcmlwdG9yKHVhLT5pbnRmW0lOVEZfQ0FQVFVSRV0pOworCWZtdF9wbGF5YmFjayA9IGZpbmRfZm9ybWF0X2Rlc2NyaXB0b3IodWEtPmludGZbSU5URl9QTEFZQkFDS10pOworCWlmICghZm10X2NhcHR1cmUgfHwgIWZtdF9wbGF5YmFjaykKKwkJcmV0dXJuIC1FTlhJTzsKKworCXN3aXRjaCAoZm10X2NhcHR1cmUtPmJTdWJmcmFtZVNpemUpIHsKKwljYXNlIDM6CisJCXVhLT5mb3JtYXRfYml0ID0gU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFOworCQlicmVhazsKKwljYXNlIDQ6CisJCXVhLT5mb3JtYXRfYml0ID0gU05EUlZfUENNX0ZNVEJJVF9TMzJfTEU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgInNhbXBsZSB3aWR0aCBpcyBub3QgMjQgb3IgMzIgYml0c1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCWlmIChmbXRfY2FwdHVyZS0+YlN1YmZyYW1lU2l6ZSAhPSBmbXRfcGxheWJhY2stPmJTdWJmcmFtZVNpemUpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LAorCQkJInBsYXliYWNrL2NhcHR1cmUgc2FtcGxlIHdpZHRocyBkbyBub3QgbWF0Y2hcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlmIChmbXRfY2FwdHVyZS0+YkJpdFJlc29sdXRpb24gIT0gMjQgfHwKKwkgICAgZm10X3BsYXliYWNrLT5iQml0UmVzb2x1dGlvbiAhPSAyNCkgeworCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJzYW1wbGUgd2lkdGggaXMgbm90IDI0IGJpdHNcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXVhLT5yYXRlID0gY29tYmluZV90cmlwbGUoZm10X2NhcHR1cmUtPnRTYW1GcmVxWzBdKTsKKwlyYXRlMiA9IGNvbWJpbmVfdHJpcGxlKGZtdF9wbGF5YmFjay0+dFNhbUZyZXFbMF0pOworCWlmICh1YS0+cmF0ZSAhPSByYXRlMikgeworCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsCisJCQkicGxheWJhY2svY2FwdHVyZSByYXRlcyBkbyBub3QgbWF0Y2g6ICV1LyV1XG4iLAorCQkJcmF0ZTIsIHVhLT5yYXRlKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlzd2l0Y2ggKHVhLT5kZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJdWEtPnBhY2tldHNfcGVyX3NlY29uZCA9IDEwMDA7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXVhLT5wYWNrZXRzX3Blcl9zZWNvbmQgPSA4MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJ1bmtub3duIGRldmljZSBzcGVlZFxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJdWEtPmNhcHR1cmUuY2hhbm5lbHMgPSBmbXRfY2FwdHVyZS0+Yk5yQ2hhbm5lbHM7CisJdWEtPnBsYXliYWNrLmNoYW5uZWxzID0gZm10X3BsYXliYWNrLT5iTnJDaGFubmVsczsKKwl1YS0+Y2FwdHVyZS5mcmFtZV9ieXRlcyA9CisJCWZtdF9jYXB0dXJlLT5iU3ViZnJhbWVTaXplICogdWEtPmNhcHR1cmUuY2hhbm5lbHM7CisJdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzID0KKwkJZm10X3BsYXliYWNrLT5iU3ViZnJhbWVTaXplICogdWEtPnBsYXliYWNrLmNoYW5uZWxzOworCisJZXBkID0gJnVhLT5pbnRmW0lOVEZfQ0FQVFVSRV0tPmFsdHNldHRpbmdbMV0uZW5kcG9pbnRbMF0uZGVzYzsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pc29jX2luKGVwZCkpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiaW52YWxpZCBjYXB0dXJlIGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJdWEtPmNhcHR1cmUudXNiX3BpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWEtPmRldiwgdXNiX2VuZHBvaW50X251bShlcGQpKTsKKwl1YS0+Y2FwdHVyZS5tYXhfcGFja2V0X2J5dGVzID0gbGUxNl90b19jcHUoZXBkLT53TWF4UGFja2V0U2l6ZSk7CisKKwllcGQgPSAmdWEtPmludGZbSU5URl9QTEFZQkFDS10tPmFsdHNldHRpbmdbMV0uZW5kcG9pbnRbMF0uZGVzYzsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pc29jX291dChlcGQpKSB7CisJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludmFsaWQgcGxheWJhY2sgZW5kcG9pbnRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwl1YS0+cGxheWJhY2sudXNiX3BpcGUgPSB1c2Jfc25kaXNvY3BpcGUodWEtPmRldiwgdXNiX2VuZHBvaW50X251bShlcGQpKTsKKwl1YS0+cGxheWJhY2subWF4X3BhY2tldF9ieXRlcyA9IGxlMTZfdG9fY3B1KGVwZC0+d01heFBhY2tldFNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX3N0cmVhbV9idWZmZXJzKHN0cnVjdCB1YTEwMSAqdWEsIHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVtYWluaW5nX3BhY2tldHMsIHBhY2tldHMsIHBhY2tldHNfcGVyX3BhZ2UsIGk7CisJc2l6ZV90IHNpemU7CisKKwlzdHJlYW0tPnF1ZXVlX2xlbmd0aCA9IHF1ZXVlX2xlbmd0aDsKKwlzdHJlYW0tPnF1ZXVlX2xlbmd0aCA9IG1heChzdHJlYW0tPnF1ZXVlX2xlbmd0aCwKKwkJCQkgICAodW5zaWduZWQgaW50KU1JTl9RVUVVRV9MRU5HVEgpOworCXN0cmVhbS0+cXVldWVfbGVuZ3RoID0gbWluKHN0cmVhbS0+cXVldWVfbGVuZ3RoLAorCQkJCSAgICh1bnNpZ25lZCBpbnQpTUFYX1FVRVVFX0xFTkdUSCk7CisKKwkvKgorCSAqIFRoZSBjYWNoZSBwb29sIHNpemVzIHVzZWQgYnkgdXNiX2J1ZmZlcl9hbGxvYygpICgxMjgsIDUxMiwgMjA0OCkgYXJlCisJICogcXVpdGUgYmFkIHdoZW4gdXNlZCB3aXRoIHRoZSBwYWNrZXQgc2l6ZXMgb2YgdGhpcyBkZXZpY2UgKGUuZy4gMjgwLAorCSAqIDUyMCwgNjI0KS4gIFRoZXJlZm9yZSwgd2UgYWxsb2NhdGUgYW5kIHN1YmRpdmlkZSBlbnRpcmUgcGFnZXMsIHVzaW5nCisJICogYSBzbWFsbGVyIGJ1ZmZlciBvbmx5IGZvciB0aGUgbGFzdCBjaHVuay4KKwkgKi8KKwlyZW1haW5pbmdfcGFja2V0cyA9IHN0cmVhbS0+cXVldWVfbGVuZ3RoOworCXBhY2tldHNfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBzdHJlYW0tPm1heF9wYWNrZXRfYnl0ZXM7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RyZWFtLT5idWZmZXJzKTsgKytpKSB7CisJCXBhY2tldHMgPSBtaW4ocmVtYWluaW5nX3BhY2tldHMsIHBhY2tldHNfcGVyX3BhZ2UpOworCQlzaXplID0gcGFja2V0cyAqIHN0cmVhbS0+bWF4X3BhY2tldF9ieXRlczsKKwkJc3RyZWFtLT5idWZmZXJzW2ldLmFkZHIgPQorCQkJdXNiX2J1ZmZlcl9hbGxvYyh1YS0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMLAorCQkJCQkgJnN0cmVhbS0+YnVmZmVyc1tpXS5kbWEpOworCQlpZiAoIXN0cmVhbS0+YnVmZmVyc1tpXS5hZGRyKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXN0cmVhbS0+YnVmZmVyc1tpXS5zaXplID0gc2l6ZTsKKwkJcmVtYWluaW5nX3BhY2tldHMgLT0gcGFja2V0czsKKwkJaWYgKCFyZW1haW5pbmdfcGFja2V0cykKKwkJCWJyZWFrOworCX0KKwlpZiAocmVtYWluaW5nX3BhY2tldHMpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAidG9vIG1hbnkgcGFja2V0c1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3N0cmVhbV9idWZmZXJzKHN0cnVjdCB1YTEwMSAqdWEsIHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0cmVhbS0+YnVmZmVycyk7ICsraSkKKwkJdXNiX2J1ZmZlcl9mcmVlKHVhLT5kZXYsCisJCQkJc3RyZWFtLT5idWZmZXJzW2ldLnNpemUsCisJCQkJc3RyZWFtLT5idWZmZXJzW2ldLmFkZHIsCisJCQkJc3RyZWFtLT5idWZmZXJzW2ldLmRtYSk7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2Nfc3RyZWFtX3VyYnMoc3RydWN0IHVhMTAxICp1YSwgc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtLAorCQkJICAgICB2b2lkICgqdXJiX2NvbXBsZXRlKShzdHJ1Y3QgdXJiICopKQoreworCXVuc2lnbmVkIG1heF9wYWNrZXRfc2l6ZSA9IHN0cmVhbS0+bWF4X3BhY2tldF9ieXRlczsKKwlzdHJ1Y3QgdWExMDFfdXJiICp1cmI7CisJdW5zaWduZWQgaW50IGIsIHUgPSAwOworCisJZm9yIChiID0gMDsgYiA8IEFSUkFZX1NJWkUoc3RyZWFtLT5idWZmZXJzKTsgKytiKSB7CisJCXVuc2lnbmVkIGludCBzaXplID0gc3RyZWFtLT5idWZmZXJzW2JdLnNpemU7CisJCXU4ICphZGRyID0gc3RyZWFtLT5idWZmZXJzW2JdLmFkZHI7CisJCWRtYV9hZGRyX3QgZG1hID0gc3RyZWFtLT5idWZmZXJzW2JdLmRtYTsKKworCQl3aGlsZSAoc2l6ZSA+PSBtYXhfcGFja2V0X3NpemUpIHsKKwkJCWlmICh1ID49IHN0cmVhbS0+cXVldWVfbGVuZ3RoKQorCQkJCWdvdG8gYnVmc2l6ZV9lcnJvcjsKKwkJCXVyYiA9IGttYWxsb2Moc2l6ZW9mKCp1cmIpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdXJiKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJdXNiX2luaXRfdXJiKCZ1cmItPnVyYik7CisJCQl1cmItPnVyYi5kZXYgPSB1YS0+ZGV2OworCQkJdXJiLT51cmIucGlwZSA9IHN0cmVhbS0+dXNiX3BpcGU7CisJCQl1cmItPnVyYi50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8CisJCQkJCVVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQkJdXJiLT51cmIudHJhbnNmZXJfYnVmZmVyID0gYWRkcjsKKwkJCXVyYi0+dXJiLnRyYW5zZmVyX2RtYSA9IGRtYTsKKwkJCXVyYi0+dXJiLnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBtYXhfcGFja2V0X3NpemU7CisJCQl1cmItPnVyYi5udW1iZXJfb2ZfcGFja2V0cyA9IDE7CisJCQl1cmItPnVyYi5pbnRlcnZhbCA9IDE7CisJCQl1cmItPnVyYi5jb250ZXh0ID0gdWE7CisJCQl1cmItPnVyYi5jb21wbGV0ZSA9IHVyYl9jb21wbGV0ZTsKKwkJCXVyYi0+dXJiLmlzb19mcmFtZV9kZXNjWzBdLm9mZnNldCA9IDA7CisJCQl1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGggPSBtYXhfcGFja2V0X3NpemU7CisJCQlzdHJlYW0tPnVyYnNbdSsrXSA9IHVyYjsKKwkJCXNpemUgLT0gbWF4X3BhY2tldF9zaXplOworCQkJYWRkciArPSBtYXhfcGFja2V0X3NpemU7CisJCQlkbWEgKz0gbWF4X3BhY2tldF9zaXplOworCQl9CisJfQorCWlmICh1ID09IHN0cmVhbS0+cXVldWVfbGVuZ3RoKQorCQlyZXR1cm4gMDsKK2J1ZnNpemVfZXJyb3I6CisJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiaW50ZXJuYWwgYnVmZmVyIHNpemUgZXJyb3JcbiIpOworCXJldHVybiAtRU5YSU87Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc3RyZWFtX3VyYnMoc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN0cmVhbS0+cXVldWVfbGVuZ3RoOyArK2kpCisJCWtmcmVlKHN0cmVhbS0+dXJic1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdXNiX3JlbGF0ZWRfcmVzb3VyY2VzKHN0cnVjdCB1YTEwMSAqdWEsCisJCQkJICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmcmVlX3N0cmVhbV91cmJzKCZ1YS0+Y2FwdHVyZSk7CisJZnJlZV9zdHJlYW1fdXJicygmdWEtPnBsYXliYWNrKTsKKwlmcmVlX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPmNhcHR1cmUpOworCWZyZWVfc3RyZWFtX2J1ZmZlcnModWEsICZ1YS0+cGxheWJhY2spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodWEtPmludGYpOyArK2kpCisJCWlmICh1YS0+aW50ZltpXSkgeworCQkJdXNiX3NldF9pbnRmZGF0YSh1YS0+aW50ZltpXSwgTlVMTCk7CisJCQlpZiAodWEtPmludGZbaV0gIT0gaW50ZXJmYWNlKQorCQkJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwKKwkJCQkJCQkgICAgIHVhLT5pbnRmW2ldKTsKKwkJfQorfQorCitzdGF0aWMgdm9pZCB1YTEwMV9jYXJkX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF9kZXN0cm95KCZ1YS0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHVhMTAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2lkKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8gbWlkaV9lcCA9IHsKKwkJLm91dF9jYWJsZXMgPSAweDAwMDEsCisJCS5pbl9jYWJsZXMgPSAweDAwMDEKKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyayBtaWRpX3F1aXJrID0geworCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCisJCS5kYXRhID0gJm1pZGlfZXAKKwl9OworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgdWExMDEgKnVhOworCXVuc2lnbmVkIGludCBjYXJkX2luZGV4LCBpOworCWNoYXIgdXNiX3BhdGhbMzJdOworCWludCBlcnI7CisKKwlpZiAoaW50ZXJmYWNlLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXZpY2VzX211dGV4KTsKKworCWZvciAoY2FyZF9pbmRleCA9IDA7IGNhcmRfaW5kZXggPCBTTkRSVl9DQVJEUzsgKytjYXJkX2luZGV4KQorCQlpZiAoZW5hYmxlW2NhcmRfaW5kZXhdICYmICEoZGV2aWNlc191c2VkICYgKDEgPDwgY2FyZF9pbmRleCkpKQorCQkJYnJlYWs7CisJaWYgKGNhcmRfaW5kZXggPj0gU05EUlZfQ0FSRFMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZpY2VzX211dGV4KTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtjYXJkX2luZGV4XSwgaWRbY2FyZF9pbmRleF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKCp1YSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQltdXRleF91bmxvY2soJmRldmljZXNfbXV0ZXgpOworCQlyZXR1cm4gZXJyOworCX0KKwljYXJkLT5wcml2YXRlX2ZyZWUgPSB1YTEwMV9jYXJkX2ZyZWU7CisJdWEgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJdWEtPmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwl1YS0+Y2FyZCA9IGNhcmQ7CisJdWEtPmNhcmRfaW5kZXggPSBjYXJkX2luZGV4OworCUlOSVRfTElTVF9IRUFEKCZ1YS0+bWlkaV9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmdWEtPmxvY2spOworCW11dGV4X2luaXQoJnVhLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJnVhLT5yZWFkeV9wbGF5YmFja191cmJzKTsKKwl0YXNrbGV0X2luaXQoJnVhLT5wbGF5YmFja190YXNrbGV0LAorCQkgICAgIHBsYXliYWNrX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXVhKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1YS0+YWxzYV9jYXB0dXJlX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVhLT5yYXRlX2ZlZWRiYWNrX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVhLT5hbHNhX3BsYXliYWNrX3dhaXQpOworCisjaWZkZWYgVUExQV9IQUNLCisJaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKKwkJdWEtPmludGZbMl0gPSBpbnRlcmZhY2U7CisJCXVhLT5pbnRmWzBdID0gdXNiX2lmbnVtX3RvX2lmKHVhLT5kZXYsIDEpOworCQl1YS0+aW50ZlsxXSA9IHVzYl9pZm51bV90b19pZih1YS0+ZGV2LCAyKTsKKwkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwgdWEtPmludGZbMF0sIHVhKTsKKwkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwgdWEtPmludGZbMV0sIHVhKTsKKwl9IGVsc2UgeworI2VuZGlmCisJdWEtPmludGZbMF0gPSBpbnRlcmZhY2U7CisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUodWEtPmludGYpOyArK2kpIHsKKwkJdWEtPmludGZbaV0gPSB1c2JfaWZudW1fdG9faWYodWEtPmRldiwgaSk7CisJCWlmICghdWEtPmludGZbaV0pIHsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludGVyZmFjZSAldSBub3QgZm91bmRcbiIsIGkpOworCQkJZXJyID0gLUVOWElPOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQllcnIgPSB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdWExMDFfZHJpdmVyLAorCQkJCQkJIHVhLT5pbnRmW2ldLCB1YSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQl1YS0+aW50ZltpXSA9IE5VTEw7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJfQorI2lmZGVmIFVBMUFfSEFDSworCX0KKyNlbmRpZgorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmaW50ZXJmYWNlLT5kZXYpOworCisjaWZkZWYgVUExQV9IQUNLCisJaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKKwkJdWEtPmZvcm1hdF9iaXQgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRTsKKwkJdWEtPnJhdGUgPSA0NDEwMDsKKwkJdWEtPnBhY2tldHNfcGVyX3NlY29uZCA9IDEwMDA7CisJCXVhLT5jYXB0dXJlLmNoYW5uZWxzID0gMjsKKwkJdWEtPnBsYXliYWNrLmNoYW5uZWxzID0gMjsKKwkJdWEtPmNhcHR1cmUuZnJhbWVfYnl0ZXMgPSA0OworCQl1YS0+cGxheWJhY2suZnJhbWVfYnl0ZXMgPSA0OworCQl1YS0+Y2FwdHVyZS51c2JfcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1YS0+ZGV2LCAyKTsKKwkJdWEtPnBsYXliYWNrLnVzYl9waXBlID0gdXNiX3NuZGlzb2NwaXBlKHVhLT5kZXYsIDEpOworCQl1YS0+Y2FwdHVyZS5tYXhfcGFja2V0X2J5dGVzID0gMTkyOworCQl1YS0+cGxheWJhY2subWF4X3BhY2tldF9ieXRlcyA9IDE5MjsKKwl9IGVsc2UgeworI2VuZGlmCisJZXJyID0gZGV0ZWN0X3VzYl9mb3JtYXQodWEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworI2lmZGVmIFVBMUFfSEFDSworCX0KKyNlbmRpZgorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlVBLTEwMSIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJVQS0xMDEiKTsKKwl1c2JfbWFrZV9wYXRoKHVhLT5kZXYsIHVzYl9wYXRoLCBzaXplb2YodXNiX3BhdGgpKTsKKwlzbnByaW50Zih1YS0+Y2FyZC0+bG9uZ25hbWUsIHNpemVvZih1YS0+Y2FyZC0+bG9uZ25hbWUpLAorCQkgIkVESVJPTCBVQS0xMDEgKHNlcmlhbCAlcyksICV1IEh6IGF0ICVzLCAlcyBzcGVlZCIsCisJCSB1YS0+ZGV2LT5zZXJpYWwgPyB1YS0+ZGV2LT5zZXJpYWwgOiAiPyIsIHVhLT5yYXRlLCB1c2JfcGF0aCwKKwkJIHVhLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIID8gImhpZ2giIDogImZ1bGwiKTsKKworCWVyciA9IGFsbG9jX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPmNhcHR1cmUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworCWVyciA9IGFsbG9jX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPnBsYXliYWNrKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKworCWVyciA9IGFsbG9jX3N0cmVhbV91cmJzKHVhLCAmdWEtPmNhcHR1cmUsIGNhcHR1cmVfdXJiX2NvbXBsZXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKwllcnIgPSBhbGxvY19zdHJlYW1fdXJicyh1YSwgJnVhLT5wbGF5YmFjaywgcGxheWJhY2tfdXJiX2NvbXBsZXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKworCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJVQS0xMDEiLCAwLCAxLCAxLCAmdWEtPnBjbSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gcHJvYmVfZXJyb3I7CisJdWEtPnBjbS0+cHJpdmF0ZV9kYXRhID0gdWE7CisJc3RyY3B5KHVhLT5wY20tPm5hbWUsICJVQS0xMDEiKTsKKwlzbmRfcGNtX3NldF9vcHModWEtPnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnBsYXliYWNrX3BjbV9vcHMpOworCXNuZF9wY21fc2V0X29wcyh1YS0+cGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZjYXB0dXJlX3BjbV9vcHMpOworCisjaWZkZWYgVUExQV9IQUNLCisJaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICE9IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKKyNlbmRpZgorCWVyciA9IHNuZF91c2JtaWRpX2NyZWF0ZShjYXJkLCB1YS0+aW50ZltJTlRGX01JREldLAorCQkJCSAmdWEtPm1pZGlfbGlzdCwgJm1pZGlfcXVpcmspOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworI2lmZGVmIFVBMUFfSEFDSworCX0KKyNlbmRpZgorCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gcHJvYmVfZXJyb3I7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgdWEpOworCWRldmljZXNfdXNlZCB8PSAxIDw8IGNhcmRfaW5kZXg7CisKKwltdXRleF91bmxvY2soJmRldmljZXNfbXV0ZXgpOworCXJldHVybiAwOworCitwcm9iZV9lcnJvcjoKKwlmcmVlX3VzYl9yZWxhdGVkX3Jlc291cmNlcyh1YSwgaW50ZXJmYWNlKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCW11dGV4X3VubG9jaygmZGV2aWNlc19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdWExMDFfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IGxpc3RfaGVhZCAqbWlkaTsKKworCWlmICghdWEpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmRldmljZXNfbXV0ZXgpOworCisJc2V0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKTsKKwl3YWtlX3VwKCZ1YS0+cmF0ZV9mZWVkYmFja193YWl0KTsKKworCS8qIG1ha2Ugc3VyZSB0aGF0IHVzZXJzcGFjZSBjYW5ub3QgY3JlYXRlIG5ldyByZXF1ZXN0cyAqLworCXNuZF9jYXJkX2Rpc2Nvbm5lY3QodWEtPmNhcmQpOworCisJLyogbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgVVNCIHJlcXVlc3RzICovCisJX19saXN0X2Zvcl9lYWNoKG1pZGksICZ1YS0+bWlkaV9saXN0KQorCQlzbmRfdXNibWlkaV9kaXNjb25uZWN0KG1pZGkpOworCWFib3J0X2Fsc2FfcGxheWJhY2sodWEpOworCWFib3J0X2Fsc2FfY2FwdHVyZSh1YSk7CisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCisJZnJlZV91c2JfcmVsYXRlZF9yZXNvdXJjZXModWEsIGludGVyZmFjZSk7CisKKwlkZXZpY2VzX3VzZWQgJj0gfigxIDw8IHVhLT5jYXJkX2luZGV4KTsKKworCXNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQodWEtPmNhcmQpOworCisJbXV0ZXhfdW5sb2NrKCZkZXZpY2VzX211dGV4KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVhMTAxX2lkc1tdID0geworI2lmZGVmIFVBMUFfSEFDSworCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDAxOCkgfSwKKyNlbmRpZgorCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDA3ZCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwOGQpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVhMTAxX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1YTEwMV9kcml2ZXIgPSB7CisJLm5hbWUgPSAic25kLXVhMTAxIiwKKwkuaWRfdGFibGUgPSB1YTEwMV9pZHMsCisJLnByb2JlID0gdWExMDFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB1YTEwMV9kaXNjb25uZWN0LAorI2lmIDAKKwkuc3VzcGVuZCA9IHVhMTAxX3N1c3BlbmQsCisJLnJlc3VtZSA9IHVhMTAxX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX3VhMTAxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ1YTEwMV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX3VhMTAxX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdWExMDFfZHJpdmVyKTsKKwltdXRleF9kZXN0cm95KCZkZXZpY2VzX211dGV4KTsKK30KKworbW9kdWxlX2luaXQoYWxzYV9jYXJkX3VhMTAxX2luaXQpOworbW9kdWxlX2V4aXQoYWxzYV9jYXJkX3VhMTAxX2V4aXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCA5ZWRlZjQ2Li5jNTM5ZjdmIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtNDQsOSArNDQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvYXVkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMTcwLDExICsxNzIsMTIgQEAKIAl1bnNpZ25lZCBpbnQgY3VycGFja3NpemU7CS8qIGN1cnJlbnQgcGFja2V0IHNpemUgaW4gYnl0ZXMgKGZvciBjYXB0dXJlKSAqLwogCXVuc2lnbmVkIGludCBjdXJmcmFtZXNpemU7CS8qIGN1cnJlbnQgcGFja2V0IHNpemUgaW4gZnJhbWVzIChmb3IgY2FwdHVyZSkgKi8KIAl1bnNpZ25lZCBpbnQgZmlsbF9tYXg6IDE7CS8qIGZpbGwgbWF4IHBhY2tldCBzaXplIGFsd2F5cyAqLworCXVuc2lnbmVkIGludCB0eGZyX3F1aXJrOjE7CS8qIGFsbG93IHN1Yi1mcmFtZSBhbGlnbm1lbnQgKi8KIAl1bnNpZ25lZCBpbnQgZm10X3R5cGU7CQkvKiBVU0IgYXVkaW8gZm9ybWF0IHR5cGUgKDEtMykgKi8KIAogCXVuc2lnbmVkIGludCBydW5uaW5nOiAxOwkvKiBydW5uaW5nIHN0YXR1cyAqLwogCi0JdW5zaWduZWQgaW50IGh3cHRyX2RvbmU7CQkJLyogcHJvY2Vzc2VkIGZyYW1lIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgaHdwdHJfZG9uZTsJLyogcHJvY2Vzc2VkIGJ5dGUgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9kb25lOwkJLyogcHJvY2Vzc2VkIGZyYW1lcyBzaW5jZSBsYXN0IHBlcmlvZCB1cGRhdGUgKi8KIAl1bnNpZ25lZCBsb25nIGFjdGl2ZV9tYXNrOwkvKiBiaXRtYXNrIG9mIGFjdGl2ZSB1cmJzICovCiAJdW5zaWduZWQgbG9uZyB1bmxpbmtfbWFzazsJLyogYml0bWFzayBvZiB1bmxpbmtlZCB1cmJzICovCkBAIC0zNDMsNyArMzQ2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgKmNwOwogCWludCBpOwotCXVuc2lnbmVkIGludCBzdHJpZGUsIGxlbiwgb2xkcHRyOworCXVuc2lnbmVkIGludCBzdHJpZGUsIGZyYW1lcywgYnl0ZXMsIG9sZHB0cjsKIAlpbnQgcGVyaW9kX2VsYXBzZWQgPSAwOwogCiAJc3RyaWRlID0gcnVudGltZS0+ZnJhbWVfYml0cyA+PiAzOwpAQCAtMzU0LDI5ICszNTcsMzkgQEAKIAkJCXNuZF9wcmludGQoS0VSTl9FUlIgImZyYW1lICVkIGFjdGl2ZTogJWRcbiIsIGksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKIAkJCS8vIGNvbnRpbnVlOwogCQl9Ci0JCWxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCAvIHN0cmlkZTsKLQkJaWYgKCEgbGVuKQotCQkJY29udGludWU7CisJCWJ5dGVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlmcmFtZXMgPSBieXRlcyAvIHN0cmlkZTsKKwkJaWYgKCFzdWJzLT50eGZyX3F1aXJrKQorCQkJYnl0ZXMgPSBmcmFtZXMgKiBzdHJpZGU7CisJCWlmIChieXRlcyAlIChydW50aW1lLT5zYW1wbGVfYml0cyA+PiAzKSAhPSAwKSB7CisjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCisJCQlpbnQgb2xkYnl0ZXMgPSBieXRlczsKKyNlbmRpZgorCQkJYnl0ZXMgPSBmcmFtZXMgKiBzdHJpZGU7CisJCQlzbmRfcHJpbnRkZChLRVJOX0VSUiAiQ29ycmVjdGVkIHVyYiBkYXRhIGxlbi4gJWQtPiVkXG4iLAorCQkJCQkJCW9sZGJ5dGVzLCBieXRlcyk7CisJCX0KIAkJLyogdXBkYXRlIHRoZSBjdXJyZW50IHBvaW50ZXIgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnMtPmxvY2ssIGZsYWdzKTsKIAkJb2xkcHRyID0gc3Vicy0+aHdwdHJfZG9uZTsKLQkJc3Vicy0+aHdwdHJfZG9uZSArPSBsZW47Ci0JCWlmIChzdWJzLT5od3B0cl9kb25lID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQotCQkJc3Vicy0+aHdwdHJfZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJc3Vicy0+dHJhbnNmZXJfZG9uZSArPSBsZW47CisJCXN1YnMtPmh3cHRyX2RvbmUgKz0gYnl0ZXM7CisJCWlmIChzdWJzLT5od3B0cl9kb25lID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlKQorCQkJc3Vicy0+aHdwdHJfZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZSAqIHN0cmlkZTsKKwkJZnJhbWVzID0gKGJ5dGVzICsgKG9sZHB0ciAlIHN0cmlkZSkpIC8gc3RyaWRlOworCQlzdWJzLT50cmFuc2Zlcl9kb25lICs9IGZyYW1lczsKIAkJaWYgKHN1YnMtPnRyYW5zZmVyX2RvbmUgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKIAkJCXN1YnMtPnRyYW5zZmVyX2RvbmUgLT0gcnVudGltZS0+cGVyaW9kX3NpemU7CiAJCQlwZXJpb2RfZWxhcHNlZCA9IDE7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3Vicy0+bG9jaywgZmxhZ3MpOwogCQkvKiBjb3B5IGEgZGF0YSBjaHVuayAqLwotCQlpZiAob2xkcHRyICsgbGVuID4gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKLQkJCXVuc2lnbmVkIGludCBjbnQgPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIG9sZHB0cjsKLQkJCXVuc2lnbmVkIGludCBibGVuID0gY250ICogc3RyaWRlOwotCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBjcCwgYmxlbik7Ci0JCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEsIGNwICsgYmxlbiwgbGVuICogc3RyaWRlIC0gYmxlbik7CisJCWlmIChvbGRwdHIgKyBieXRlcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlKSB7CisJCQl1bnNpZ25lZCBpbnQgYnl0ZXMxID0KKwkJCQkJcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGUgLSBvbGRwdHI7CisJCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIsIGNwLCBieXRlczEpOworCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhLCBjcCArIGJ5dGVzMSwgYnl0ZXMgLSBieXRlczEpOwogCQl9IGVsc2UgewotCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBjcCwgbGVuICogc3RyaWRlKTsKKwkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciwgY3AsIGJ5dGVzKTsKIAkJfQogCX0KIAlpZiAocGVyaW9kX2VsYXBzZWQpCkBAIC01NjMsMzQgKzU3NiwzNCBAQAogCQkJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsCiAJCQkJc3RydWN0IHVyYiAqdXJiKQogewotCWludCBpLCBzdHJpZGUsIG9mZnM7Ci0JdW5zaWduZWQgaW50IGNvdW50czsKKwlpbnQgaSwgc3RyaWRlOworCXVuc2lnbmVkIGludCBjb3VudHMsIGZyYW1lcywgYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcGVyaW9kX2VsYXBzZWQgPSAwOwogCXN0cnVjdCBzbmRfdXJiX2N0eCAqY3R4ID0gdXJiLT5jb250ZXh0OwogCiAJc3RyaWRlID0gcnVudGltZS0+ZnJhbWVfYml0cyA+PiAzOwogCi0Jb2ZmcyA9IDA7CisJZnJhbWVzID0gMDsKIAl1cmItPmRldiA9IGN0eC0+c3Vicy0+ZGV2OyAvKiB3ZSBuZWVkIHRvIHNldCB0aGlzIGF0IGVhY2ggdGltZSAqLwogCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSAwOwogCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGN0eC0+cGFja2V0czsgaSsrKSB7CiAJCWNvdW50cyA9IHNuZF91c2JfYXVkaW9fbmV4dF9wYWNrZXRfc2l6ZShzdWJzKTsKIAkJLyogc2V0IHVwIGRlc2NyaXB0b3IgKi8KLQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzICogc3RyaWRlOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IGZyYW1lcyAqIHN0cmlkZTsKIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBjb3VudHMgKiBzdHJpZGU7Ci0JCW9mZnMgKz0gY291bnRzOworCQlmcmFtZXMgKz0gY291bnRzOwogCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzKys7CiAJCXN1YnMtPnRyYW5zZmVyX2RvbmUgKz0gY291bnRzOwogCQlpZiAoc3Vicy0+dHJhbnNmZXJfZG9uZSA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgewogCQkJc3Vicy0+dHJhbnNmZXJfZG9uZSAtPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKIAkJCXBlcmlvZF9lbGFwc2VkID0gMTsKLQkJCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVU0JfRk9STUFUX1RZUEVfSUkpIHsKKwkJCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVQUNfRk9STUFUX1RZUEVfSUkpIHsKIAkJCQlpZiAoc3Vicy0+dHJhbnNmZXJfZG9uZSA+IDApIHsKIAkJCQkJLyogRklYTUU6IGZpbGwtbWF4IG1vZGUgaXMgbm90CiAJCQkJCSAqIHN1cHBvcnRlZCB5ZXQgKi8KLQkJCQkJb2ZmcyAtPSBzdWJzLT50cmFuc2Zlcl9kb25lOworCQkJCQlmcmFtZXMgLT0gc3Vicy0+dHJhbnNmZXJfZG9uZTsKIAkJCQkJY291bnRzIC09IHN1YnMtPnRyYW5zZmVyX2RvbmU7CiAJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0KIAkJCQkJCWNvdW50cyAqIHN0cmlkZTsKQEAgLTYwMCw3ICs2MTMsNyBAQAogCQkJCWlmIChpIDwgY3R4LT5wYWNrZXRzKSB7CiAJCQkJCS8qIGFkZCBhIHRyYW5zZmVyIGRlbGltaXRlciAqLwogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9Ci0JCQkJCQlvZmZzICogc3RyaWRlOworCQkJCQkJZnJhbWVzICogc3RyaWRlOwogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IDA7CiAJCQkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMrKzsKIAkJCQl9CkBAIC02MTAsMjYgKzYyMywyNSBAQAogCQlpZiAocGVyaW9kX2VsYXBzZWQpIC8qIGZpbmlzaCBhdCB0aGUgcGVyaW9kIGJvdW5kYXJ5ICovCiAJCQlicmVhazsKIAl9Ci0JaWYgKHN1YnMtPmh3cHRyX2RvbmUgKyBvZmZzID4gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwlieXRlcyA9IGZyYW1lcyAqIHN0cmlkZTsKKwlpZiAoc3Vicy0+aHdwdHJfZG9uZSArIGJ5dGVzID4gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGUpIHsKIAkJLyogZXJyLCB0aGUgdHJhbnNmZXJyZWQgYXJlYSBnb2VzIG92ZXIgYnVmZmVyIGJvdW5kYXJ5LiAqLwotCQl1bnNpZ25lZCBpbnQgbGVuID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBzdWJzLT5od3B0cl9kb25lOworCQl1bnNpZ25lZCBpbnQgYnl0ZXMxID0KKwkJCXJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlIC0gc3Vicy0+aHdwdHJfZG9uZTsKIAkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEgKyBzdWJzLT5od3B0cl9kb25lICogc3RyaWRlLAotCQkgICAgICAgbGVuICogc3RyaWRlKTsKLQkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgbGVuICogc3RyaWRlLAotCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEsCi0JCSAgICAgICAob2ZmcyAtIGxlbikgKiBzdHJpZGUpOworCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEgKyBzdWJzLT5od3B0cl9kb25lLCBieXRlczEpOworCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIgKyBieXRlczEsCisJCSAgICAgICBydW50aW1lLT5kbWFfYXJlYSwgYnl0ZXMgLSBieXRlczEpOwogCX0gZWxzZSB7CiAJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsgc3Vicy0+aHdwdHJfZG9uZSAqIHN0cmlkZSwKLQkJICAgICAgIG9mZnMgKiBzdHJpZGUpOworCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEgKyBzdWJzLT5od3B0cl9kb25lLCBieXRlcyk7CiAJfQotCXN1YnMtPmh3cHRyX2RvbmUgKz0gb2ZmczsKLQlpZiAoc3Vicy0+aHdwdHJfZG9uZSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJc3Vicy0+aHdwdHJfZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQlydW50aW1lLT5kZWxheSArPSBvZmZzOworCXN1YnMtPmh3cHRyX2RvbmUgKz0gYnl0ZXM7CisJaWYgKHN1YnMtPmh3cHRyX2RvbmUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGUpCisJCXN1YnMtPmh3cHRyX2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGU7CisJcnVudGltZS0+ZGVsYXkgKz0gZnJhbWVzOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnMtPmxvY2ssIGZsYWdzKTsKLQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBvZmZzICogc3RyaWRlOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ5dGVzOwogCWlmIChwZXJpb2RfZWxhcHNlZCkKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzLT5wY21fc3Vic3RyZWFtKTsKIAlyZXR1cm4gMDsKQEAgLTczNSw0MSArNzQ3LDYgQEAKIH0KIAogCi0vKiBnZXQgdGhlIHBoeXNpY2FsIHBhZ2UgcG9pbnRlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0ICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci19Ci0KLS8qIGFsbG9jYXRlIHZpcnR1YWwgYnVmZmVyOyBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlICovCi1zdGF0aWMgaW50IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vicy0+cnVudGltZTsKLQlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKLQkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+PSBzaXplKQotCQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgbGFyZ2UgZW5vdWdoICovCi0JCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKLQl9Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jX3VzZXIoc2l6ZSk7Ci0JaWYgKCFydW50aW1lLT5kbWFfYXJlYSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKLQlyZXR1cm4gMDsKLX0KLQotLyogZnJlZSB2aXJ0dWFsIGJ1ZmZlcjsgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSAqLwotc3RhdGljIGludCBzbmRfcGNtX2ZyZWVfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwotCi0JdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCXJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKLQlyZXR1cm4gMDsKLX0KLQotCiAvKgogICogdW5saW5rIGFjdGl2ZSB1cmJzLgogICovCkBAIC05MzcsMTggKzkxNCwxOCBAQAogCiAKIC8qCi0gKiByZXR1cm4gdGhlIGN1cnJlbnQgcGNtIHBvaW50ZXIuICBqdXN0IHJldHVybiB0aGUgaHdwdHJfZG9uZSB2YWx1ZS4KKyAqIHJldHVybiB0aGUgY3VycmVudCBwY20gcG9pbnRlci4gIGp1c3QgYmFzZWQgb24gdGhlIGh3cHRyX2RvbmUgdmFsdWUuCiAgKi8KIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfdXNiX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3ViczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBod3B0cl9kb25lOworCXVuc2lnbmVkIGludCBod3B0cl9kb25lOwogCQogCXN1YnMgPSAoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICopc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJc3Bpbl9sb2NrKCZzdWJzLT5sb2NrKTsKIAlod3B0cl9kb25lID0gc3Vicy0+aHdwdHJfZG9uZTsKIAlzcGluX3VubG9jaygmc3Vicy0+bG9jayk7Ci0JcmV0dXJuIGh3cHRyX2RvbmU7CisJcmV0dXJuIGh3cHRyX2RvbmUgLyAoc3Vic3RyZWFtLT5ydW50aW1lLT5mcmFtZV9iaXRzID4+IDMpOwogfQogCiAKQEAgLTExMzAsNyArMTEwNyw3IEBACiAJCXUtPnBhY2tldHMgPSAoaSArIDEpICogdG90YWxfcGFja3MgLyBzdWJzLT5udXJicwogCQkJLSBpICogdG90YWxfcGFja3MgLyBzdWJzLT5udXJiczsKIAkJdS0+YnVmZmVyX3NpemUgPSBtYXhzaXplICogdS0+cGFja2V0czsKLQkJaWYgKHN1YnMtPmZtdF90eXBlID09IFVTQl9GT1JNQVRfVFlQRV9JSSkKKwkJaWYgKHN1YnMtPmZtdF90eXBlID09IFVBQ19GT1JNQVRfVFlQRV9JSSkKIAkJCXUtPnBhY2tldHMrKzsgLyogZm9yIHRyYW5zZmVyIGRlbGltaXRlciAqLwogCQl1LT51cmIgPSB1c2JfYWxsb2NfdXJiKHUtPnBhY2tldHMsIEdGUF9LRVJORUwpOwogCQlpZiAoIXUtPnVyYikKQEAgLTEyMDYsNyArMTE4Myw3IEBACiAJCQlpZiAoaSA+PSBmcC0+bnJfcmF0ZXMpCiAJCQkJY29udGludWU7CiAJCX0KLQkJYXR0ciA9IGZwLT5lcF9hdHRyICYgRVBfQVRUUl9NQVNLOworCQlhdHRyID0gZnAtPmVwX2F0dHIgJiBVU0JfRU5EUE9JTlRfU1lOQ1RZUEU7CiAJCWlmICghIGZvdW5kKSB7CiAJCQlmb3VuZCA9IGZwOwogCQkJY3VyX2F0dHIgPSBhdHRyOwpAQCAtMTIxOCwxNCArMTE5NSwxNCBAQAogCQkgKiBNLWF1ZGlvIGF1ZGlvcGhpbGUgVVNCLgogCQkgKi8KIAkJaWYgKGF0dHIgIT0gY3VyX2F0dHIpIHsKLQkJCWlmICgoYXR0ciA9PSBFUF9BVFRSX0FTWU5DICYmCisJCQlpZiAoKGF0dHIgPT0gVVNCX0VORFBPSU5UX1NZTkNfQVNZTkMgJiYKIAkJCSAgICAgc3Vicy0+ZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHx8Ci0JCQkgICAgKGF0dHIgPT0gRVBfQVRUUl9BREFQVElWRSAmJgorCQkJICAgIChhdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFICYmCiAJCQkgICAgIHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKChjdXJfYXR0ciA9PSBFUF9BVFRSX0FTWU5DICYmCisJCQlpZiAoKGN1cl9hdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FTWU5DICYmCiAJCQkgICAgIHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB8fAotCQkJICAgIChjdXJfYXR0ciA9PSBFUF9BVFRSX0FEQVBUSVZFICYmCisJCQkgICAgKGN1cl9hdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFICYmCiAJCQkgICAgIHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpKSB7CiAJCQkJZm91bmQgPSBmcDsKIAkJCQljdXJfYXR0ciA9IGF0dHI7CkBAIC0xMjU1LDExICsxMjMyLDExIEBACiAKIAllcCA9IGdldF9lbmRwb2ludChhbHRzLCAwKS0+YkVuZHBvaW50QWRkcmVzczsKIAkvKiBpZiBlbmRwb2ludCBoYXMgcGl0Y2ggY29udHJvbCwgZW5hYmxlIGl0ICovCi0JaWYgKGZtdC0+YXR0cmlidXRlcyAmIEVQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTCkgeworCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBVQUNfRVBfQ1NfQVRUUl9QSVRDSF9DT05UUk9MKSB7CiAJCWRhdGFbMF0gPSAxOwotCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLAorCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBVQUNfU0VUX0NVUiwKIAkJCQkJICAgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULAotCQkJCQkgICBQSVRDSF9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAxLCAxMDAwKSkgPCAwKSB7CisJCQkJCSAgIFVBQ19FUF9DU19BVFRSX1BJVENIX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDEsIDEwMDApKSA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiVkOiVkOiBjYW5ub3Qgc2V0IGVuYWJsZSBQSVRDSFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGVwKTsKIAkJCXJldHVybiBlcnI7CkBAIC0xMjc4LDIxICsxMjU1LDIxIEBACiAKIAllcCA9IGdldF9lbmRwb2ludChhbHRzLCAwKS0+YkVuZHBvaW50QWRkcmVzczsKIAkvKiBpZiBlbmRwb2ludCBoYXMgc2FtcGxpbmcgcmF0ZSBjb250cm9sLCBzZXQgaXQgKi8KLQlpZiAoZm10LT5hdHRyaWJ1dGVzICYgRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSkgeworCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSkgewogCQlpbnQgY3JhdGU7CiAJCWRhdGFbMF0gPSByYXRlOwogCQlkYXRhWzFdID0gcmF0ZSA+PiA4OwogCQlkYXRhWzJdID0gcmF0ZSA+PiAxNjsKLQkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwKKwkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgVUFDX1NFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwKLQkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CisJCQkJCSAgIFVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwICUjeFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGZtdC0+YWx0c2V0dGluZywgcmF0ZSwgZXApOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLAorCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBVQUNfR0VUX0NVUiwKIAkJCQkJICAgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfSU4sCi0JCQkJCSAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgeworCQkJCQkgICBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgewogCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVkOiVkOiVkOiBjYW5ub3QgZ2V0IGZyZXEgYXQgZXAgJSN4XG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZSwgZm10LT5hbHRzZXR0aW5nLCBlcCk7CiAJCQlyZXR1cm4gMDsgLyogc29tZSBkZXZpY2VzIGRvbid0IHN1cHBvcnQgcmVhZGluZyAqLwpAQCAtMTMwNyw2ICsxMjg0LDQ3IEBACiB9CiAKIC8qCisgKiBGb3IgRS1NdSAwNDA0VVNCLzAyMDJVU0IvVHJhY2tlclByZSBzYW1wbGUgcmF0ZSBzaG91bGQgYmUgc2V0IGZvciBkZXZpY2UsCisgKiBub3QgZm9yIGludGVyZmFjZS4KKyAqLworc3RhdGljIHZvaWQgc2V0X2Zvcm1hdF9lbXVfcXVpcmsoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICpzdWJzLAorCQkJCSBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZtdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGVtdV9zYW1wbGVyYXRlX2lkID0gMDsKKworCS8qIFdoZW4gY2FwdHVyZSBpcyBhY3RpdmUKKwkgKiBzYW1wbGUgcmF0ZSBzaG91bGRuJ3QgYmUgY2hhbmdlZAorCSAqIGJ5IHBsYXliYWNrIHN1YnN0cmVhbQorCSAqLworCWlmIChzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlpZiAoc3Vicy0+c3RyZWFtLT5zdWJzdHJlYW1bU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5pbnRlcmZhY2UgIT0gLTEpCisJCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChmbXQtPnJhdGVfbWluKSB7CisJY2FzZSA0ODAwMDoKKwkJZW11X3NhbXBsZXJhdGVfaWQgPSBFTVVfUVVJUktfU1JfNDgwMDBIWjsKKwkJYnJlYWs7CisJY2FzZSA4ODIwMDoKKwkJZW11X3NhbXBsZXJhdGVfaWQgPSBFTVVfUVVJUktfU1JfODgyMDBIWjsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJZW11X3NhbXBsZXJhdGVfaWQgPSBFTVVfUVVJUktfU1JfOTYwMDBIWjsKKwkJYnJlYWs7CisJY2FzZSAxNzY0MDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzE3NjQwMEhaOworCQlicmVhazsKKwljYXNlIDE5MjAwMDoKKwkJZW11X3NhbXBsZXJhdGVfaWQgPSBFTVVfUVVJUktfU1JfMTkyMDAwSFo7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzQ0MTAwSFo7CisJCWJyZWFrOworCX0KKwlzbmRfZW11dXNiX3NldF9zYW1wbGVyYXRlKHN1YnMtPnN0cmVhbS0+Y2hpcCwgZW11X3NhbXBsZXJhdGVfaWQpOworfQorCisvKgogICogZmluZCBhIG1hdGNoaW5nIGZvcm1hdCBhbmQgc2V0IHVwIHRoZSBpbnRlcmZhY2UKICAqLwogc3RhdGljIGludCBzZXRfZm9ybWF0KHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3Vicywgc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQpCkBAIC0xMzY5LDkgKzEzODcsOSBAQAogCSAqIGRlc2NyaXB0b3JzIHdoaWNoIGZvb2wgdXMuICBpZiBpdCBoYXMgb25seSBvbmUgRVAsCiAJICogYXNzdW1lIGl0IGFzIGFkYXB0aXZlLW91dCBvciBzeW5jLWluLgogCSAqLwotCWF0dHIgPSBmbXQtPmVwX2F0dHIgJiBFUF9BVFRSX01BU0s7Ci0JaWYgKCgoaXNfcGxheWJhY2sgJiYgYXR0ciA9PSBFUF9BVFRSX0FTWU5DKSB8fAotCSAgICAgKCEgaXNfcGxheWJhY2sgJiYgYXR0ciA9PSBFUF9BVFRSX0FEQVBUSVZFKSkgJiYKKwlhdHRyID0gZm10LT5lcF9hdHRyICYgVVNCX0VORFBPSU5UX1NZTkNUWVBFOworCWlmICgoKGlzX3BsYXliYWNrICYmIGF0dHIgPT0gVVNCX0VORFBPSU5UX1NZTkNfQVNZTkMpIHx8CisJICAgICAoISBpc19wbGF5YmFjayAmJiBhdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFKSkgJiYKIAkgICAgYWx0c2QtPmJOdW1FbmRwb2ludHMgPj0gMikgewogCQkvKiBjaGVjayBzeW5jLXBpcGUgZW5kcG9pbnQgKi8KIAkJLyogLi4uIGFuZCBjaGVjayBkZXNjcmlwdG9yIHNpemUgYmVmb3JlIGFjY2Vzc2luZyBiU3luY2hBZGRyZXNzCkBAIC0xNDExLDcgKzE0MjksNyBAQAogCX0KIAogCS8qIGFsd2F5cyBmaWxsIG1heCBwYWNrZXQgc2l6ZSAqLwotCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBFUF9DU19BVFRSX0ZJTExfTUFYKQorCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBVQUNfRVBfQ1NfQVRUUl9GSUxMX01BWCkKIAkJc3Vicy0+ZmlsbF9tYXggPSAxOwogCiAJaWYgKChlcnIgPSBpbml0X3VzYl9waXRjaChkZXYsIHN1YnMtPmludGVyZmFjZSwgYWx0cywgZm10KSkgPCAwKQpAQCAtMTQxOSw2ICsxNDM3LDE0IEBACiAKIAlzdWJzLT5jdXJfYXVkaW9mbXQgPSBmbXQ7CiAKKwlzd2l0Y2ggKHN1YnMtPnN0cmVhbS0+Y2hpcC0+dXNiX2lkKSB7CisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMDIpOiAvKiBFLU11IDAyMDIgVVNCICovCisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMDQpOiAvKiBFLU11IDA0MDQgVVNCICovCisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMGEpOiAvKiBFLU11IFRyYWNrZXIgUHJlICovCisJCXNldF9mb3JtYXRfZW11X3F1aXJrKHN1YnMsIGZtdCk7CisJCWJyZWFrOworCX0KKwogI2lmIDAKIAlwcmludGsoS0VSTl9ERUJVRwogCSAgICAgICAic2V0dGluZyBkb25lOiBmb3JtYXQgPSAlZCwgcmF0ZSA9ICVkLi4lZCwgY2hhbm5lbHMgPSAlZFxuIiwKQEAgLTE0NDksOCArMTQ3NSw4IEBACiAJdW5zaWduZWQgaW50IGNoYW5uZWxzLCByYXRlLCBmb3JtYXQ7CiAJaW50IHJldCwgY2hhbmdlZDsKIAotCXJldCA9IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtLAotCQkJCQkgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCXJldCA9IHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKKwkJCQkJICAgICAgIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTE1MDcsNyArMTUzMyw3IEBACiAJc3Vicy0+cGVyaW9kX2J5dGVzID0gMDsKIAlpZiAoIXN1YnMtPnN0cmVhbS0+Y2hpcC0+c2h1dGRvd24pCiAJCXJlbGVhc2Vfc3Vic3RyZWFtX3VyYnMoc3VicywgMCk7Ci0JcmV0dXJuIHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7CiB9CiAKIC8qCkBAIC0xODYxLDcgKzE4ODcsNyBAQAogCQkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWluID0gZnAtPmNoYW5uZWxzOwogCQlpZiAocnVudGltZS0+aHcuY2hhbm5lbHNfbWF4IDwgZnAtPmNoYW5uZWxzKQogCQkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gZnAtPmNoYW5uZWxzOwotCQlpZiAoZnAtPmZtdF90eXBlID09IFVTQl9GT1JNQVRfVFlQRV9JSSAmJiBmcC0+ZnJhbWVfc2l6ZSA+IDApIHsKKwkJaWYgKGZwLT5mbXRfdHlwZSA9PSBVQUNfRk9STUFUX1RZUEVfSUkgJiYgZnAtPmZyYW1lX3NpemUgPiAwKSB7CiAJCQkvKiBGSVhNRTogdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBhdWRpbyBmb3JtYXRzLi4uICovCiAJCQlydW50aW1lLT5ody5wZXJpb2RfYnl0ZXNfbWluID0gcnVudGltZS0+aHcucGVyaW9kX2J5dGVzX21heCA9CiAJCQkJZnAtPmZyYW1lX3NpemU7CkBAIC0xOTczLDcgKzE5OTksOCBAQAogCS5wcmVwYXJlID0Jc25kX3VzYl9wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9CXNuZF91c2JfcGNtX3BsYXliYWNrX3RyaWdnZXIsCiAJLnBvaW50ZXIgPQlzbmRfdXNiX3BjbV9wb2ludGVyLAotCS5wYWdlID0JCXNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZSwKKwkucGFnZSA9CQlzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlLAorCS5tbWFwID0JCXNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3VzYl9jYXB0dXJlX29wcyA9IHsKQEAgLTE5ODUsNyArMjAxMiw4IEBACiAJLnByZXBhcmUgPQlzbmRfdXNiX3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0Jc25kX3VzYl9wY21fY2FwdHVyZV90cmlnZ2VyLAogCS5wb2ludGVyID0Jc25kX3VzYl9wY21fcG9pbnRlciwKLQkucGFnZSA9CQlzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2UsCisJLnBhZ2UgPQkJc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9CQlzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiAKQEAgLTIwOTMsNyArMjEyMSw3IEBACiAjaW5jbHVkZSAidXNicXVpcmtzLmgiCiAgICAgeyAubWF0Y2hfZmxhZ3MgPSAoVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUyksCiAgICAgICAuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotICAgICAgLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MIH0sCisgICAgICAuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCB9LAogICAgIHsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC0yMTMyLDcgKzIxNjAsNyBAQAogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRW5kcG9pbnQ6ICVkICVzICglcylcbiIsCiAJCQkgICAgZnAtPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLLAogCQkJICAgIGZwLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4gPyAiSU4iIDogIk9VVCIsCi0JCQkgICAgc3luY190eXBlc1soZnAtPmVwX2F0dHIgJiBFUF9BVFRSX01BU0spID4+IDJdKTsKKwkJCSAgICBzeW5jX3R5cGVzWyhmcC0+ZXBfYXR0ciAmIFVTQl9FTkRQT0lOVF9TWU5DVFlQRSkgPj4gMl0pOwogCQlpZiAoZnAtPnJhdGVzICYgU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUykgewogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIFJhdGVzOiAlZCAtICVkIChjb250aW51b3VzKVxuIiwKIAkJCQkgICAgZnAtPnJhdGVfbWluLCBmcC0+cmF0ZV9tYXgpOwpAQCAtMjIyNyw2ICsyMjU1LDcgQEAKIAlzdWJzLT5zdHJlYW0gPSBhczsKIAlzdWJzLT5kaXJlY3Rpb24gPSBzdHJlYW07CiAJc3Vicy0+ZGV2ID0gYXMtPmNoaXAtPmRldjsKKwlzdWJzLT50eGZyX3F1aXJrID0gYXMtPmNoaXAtPnR4ZnJfcXVpcms7CiAJaWYgKHNuZF91c2JfZ2V0X3NwZWVkKHN1YnMtPmRldikgPT0gVVNCX1NQRUVEX0ZVTEwpIHsKIAkJc3Vicy0+b3BzID0gYXVkaW9fdXJiX29wc1tzdHJlYW1dOwogCX0gZWxzZSB7CkBAIC0yMzk0LDI5ICsyNDIzLDY4IEBACiAgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRhZyAod0Zvcm1hdFRhZykKICAqIEBmbXQ6IHRoZSBmb3JtYXQgdHlwZSBkZXNjcmlwdG9yCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X2lfdHlwZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKLQkJCQkgICAgIGludCBmb3JtYXQsIHVuc2lnbmVkIGNoYXIgKmZtdCkKK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X2lfdHlwZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCQkgICAgIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJICAgICBpbnQgZm9ybWF0LCB2b2lkICpfZm10LAorCQkJCSAgICAgaW50IHByb3RvY29sKQogewotCWludCBwY21fZm9ybWF0OworCWludCBwY21fZm9ybWF0LCBpOwogCWludCBzYW1wbGVfd2lkdGgsIHNhbXBsZV9ieXRlczsKIAorCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIFVBQ19WRVJTSU9OXzE6IHsKKwkJc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKmZtdCA9IF9mbXQ7CisJCXNhbXBsZV93aWR0aCA9IGZtdC0+YkJpdFJlc29sdXRpb247CisJCXNhbXBsZV9ieXRlcyA9IGZtdC0+YlN1YmZyYW1lU2l6ZTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBVQUNfVkVSU0lPTl8yOiB7CisJCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9leHRfZGVzY3JpcHRvciAqZm10ID0gX2ZtdDsKKwkJc2FtcGxlX3dpZHRoID0gZm10LT5iQml0UmVzb2x1dGlvbjsKKwkJc2FtcGxlX2J5dGVzID0gZm10LT5iU3Vic2xvdFNpemU7CisKKwkJLyoKKwkJICogRklYTUUKKwkJICogVVNCIGF1ZGlvIGNsYXNzIHYyIGRldmljZXMgc3BlY2lmeSBhIGJpdG1hcCBvZiBwb3NzaWJsZQorCQkgKiBhdWRpbyBmb3JtYXRzIHJhdGhlciB0aGFuIG9uZSBmaXggdmFsdWUuIEZvciBub3csIHdlIGp1c3QKKwkJICogcGljayBvbmUgb2YgdGhlbSBhbmQgcmVwb3J0IHRoYXQgYXMgdGhlIG9ubHkgcG9zc2libGUKKwkJICogdmFsdWUgZm9yIHRoaXMgc2V0dGluZy4KKwkJICogVGhlIGJpdCBhbGxvY2F0aW9uIG1hcCBpcyBpbiBmYWN0IGNvbXBhdGlibGUgdG8gdGhlCisJCSAqIHdGb3JtYXRUYWcgb2YgdGhlIHYxIEFTIHN0cmVhbWluZyBkZXNjcmlwdG9ycywgd2hpY2ggaXMgd2h5CisJCSAqIHdlIGNhbiBzaW1wbHkgbWFwIHRoZSBtYXRyaXguCisJCSAqLworCisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCQlpZiAoZm9ybWF0ICYgKDFVTCA8PCBpKSkgeworCQkJCWZvcm1hdCA9IGkgKyAxOworCQkJCWJyZWFrOworCQkJfQorCisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIEZJWE1FOiBjb3JyZWN0IGVuZGlhbmVzcyBhbmQgc2lnbj8gKi8KIAlwY21fZm9ybWF0ID0gLTE7Ci0Jc2FtcGxlX3dpZHRoID0gZm10WzZdOwotCXNhbXBsZV9ieXRlcyA9IGZtdFs1XTsKKwogCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSAwOiAvKiBzb21lIGRldmljZXMgZG9uJ3QgZGVmaW5lIHRoaXMgY29ycmVjdGx5Li4uICovCisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSV9VTkRFRklORUQ6IC8qIHNvbWUgZGV2aWNlcyBkb24ndCBkZWZpbmUgdGhpcyBjb3JyZWN0bHkuLi4gKi8KIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICIlZDoldTolZCA6IGZvcm1hdCB0eXBlIDAgaXMgZGV0ZWN0ZWQsIHByb2Nlc3NlZCBhcyBQQ01cbiIsCiAJCQkgICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcpOwogCQkvKiBmYWxsLXRocm91Z2ggKi8KLQljYXNlIFVTQl9BVURJT19GT1JNQVRfUENNOgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lfUENNOgogCQlpZiAoc2FtcGxlX3dpZHRoID4gc2FtcGxlX2J5dGVzICogOCkgewogCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIiVkOiV1OiVkIDogc2FtcGxlIGJpdHdpZHRoICVkIGluIG92ZXIgc2FtcGxlIGJ5dGVzICVkXG4iLAogCQkJCSAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nLAogCQkJCSAgIHNhbXBsZV93aWR0aCwgc2FtcGxlX2J5dGVzKTsKIAkJfQogCQkvKiBjaGVjayB0aGUgZm9ybWF0IGJ5dGUgc2l6ZSAqLwotCQlzd2l0Y2ggKGZtdFs1XSkgeworCQlwcmludGsoIiBYWFhYWCBTQU1QTEUgQllURVMgJWRcbiIsIHNhbXBsZV9ieXRlcyk7CisJCXN3aXRjaCAoc2FtcGxlX2J5dGVzKSB7CiAJCWNhc2UgMToKIAkJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1M4OwogCQkJYnJlYWs7CkBAIC0yNDM3LDEyICsyNTA1LDEyIEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXNuZF9wcmludGsoS0VSTl9JTkZPICIlZDoldTolZCA6IHVuc3VwcG9ydGVkIHNhbXBsZSBiaXR3aWR0aCAlZCBpbiAlZCBieXRlc1xuIiwKLQkJCQkgICBjaGlwLT5kZXYtPmRldm51bSwgZnAtPmlmYWNlLAotCQkJCSAgIGZwLT5hbHRzZXR0aW5nLCBzYW1wbGVfd2lkdGgsIHNhbXBsZV9ieXRlcyk7CisJCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcsCisJCQkJICAgc2FtcGxlX3dpZHRoLCBzYW1wbGVfYnl0ZXMpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX1BDTTg6CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSV9QQ004OgogCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9VODsKIAogCQkvKiBEYWxsYXMgRFM0MjAxIHdvcmthcm91bmQ6IGl0IGFkdmVydGlzZXMgVTggZm9ybWF0LCBidXQgcmVhbGx5CkBAIC0yNDUwLDEzICsyNTE4LDEzIEBACiAJCWlmIChjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDRmYSwgMHg0MjAxKSkKIAkJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1M4OwogCQlicmVhazsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfSUVFRV9GTE9BVDoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JX0lFRUVfRkxPQVQ6CiAJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFOwogCQlicmVhazsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfQUxBVzoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JX0FMQVc6CiAJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX0FfTEFXOwogCQlicmVhazsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfTVVfTEFXOgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lfTVVMQVc6CiAJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX01VX0xBVzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI0NzAsNyArMjUzOCw3IEBACiAKIC8qCiAgKiBwYXJzZSB0aGUgZm9ybWF0IGRlc2NyaXB0b3IgYW5kIHN0b3JlcyB0aGUgcG9zc2libGUgc2FtcGxlIHJhdGVzCi0gKiBvbiB0aGUgYXVkaW9mb3JtYXQgdGFibGUuCisgKiBvbiB0aGUgYXVkaW9mb3JtYXQgdGFibGUgKGF1ZGlvIGNsYXNzIHYxKS4KICAqCiAgKiBAZGV2OiB1c2IgZGV2aWNlCiAgKiBAZnA6IGF1ZGlvZm9ybWF0IHJlY29yZApAQCAtMjQ3OCwxMyArMjU0NiwxMyBAQAogICogQG9mZnNldDogdGhlIHN0YXJ0IG9mZnNldCBvZiBkZXNjcmlwdG9yIHBvaW50aW5nIHRoZSByYXRlIHR5cGUKICAqICAgICAgICAgICg3IGZvciB0eXBlIEkgYW5kIElJLCA4IGZvciB0eXBlIElJKQogICovCi1zdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlcyhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKLQkJCQkgICAgdW5zaWduZWQgY2hhciAqZm10LCBpbnQgb2Zmc2V0KQorc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjEoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmZtdCwgaW50IG9mZnNldCkKIHsKIAlpbnQgbnJfcmF0ZXMgPSBmbXRbb2Zmc2V0XTsKIAogCWlmIChmbXRbMF0gPCBvZmZzZXQgKyAxICsgMyAqIChucl9yYXRlcyA/IG5yX3JhdGVzIDogMikpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBpbnZhbGlkIEZPUk1BVF9UWVBFIGRlc2NcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBVQUNfRk9STUFUX1RZUEUgZGVzY1xuIiwKIAkJCQkgICBjaGlwLT5kZXYtPmRldm51bSwgZnAtPmlmYWNlLCBmcC0+YWx0c2V0dGluZyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yNTM1LDE0ICsyNjAzLDg3IEBACiB9CiAKIC8qCisgKiBwYXJzZSB0aGUgZm9ybWF0IGRlc2NyaXB0b3IgYW5kIHN0b3JlcyB0aGUgcG9zc2libGUgc2FtcGxlIHJhdGVzCisgKiBvbiB0aGUgYXVkaW9mb3JtYXQgdGFibGUgKGF1ZGlvIGNsYXNzIHYyKS4KKyAqLworc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjIoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJICAgICAgIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJICAgICAgIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBjaGlwLT5kZXY7CisJdW5zaWduZWQgY2hhciB0bXBbMl0sICpkYXRhOworCWludCBpLCBucl9yYXRlcywgZGF0YV9zaXplLCByZXQgPSAwOworCisJLyogZ2V0IHRoZSBudW1iZXIgb2Ygc2FtcGxlIHJhdGVzIGZpcnN0IGJ5IG9ubHkgZmV0Y2hpbmcgMiBieXRlcyAqLworCXJldCA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBVQUMyX0NTX1JBTkdFLAorCQkJICAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfSU4sCisJCQkgICAgICAgMHgwMTAwLCBjaGlwLT5jbG9ja19pZCA8PCA4LCB0bXAsIHNpemVvZih0bXApLCAxMDAwKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXRyaWV2ZSBudW1iZXIgb2Ygc2FtcGxlIHJhdGVzXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJbnJfcmF0ZXMgPSAodG1wWzFdIDw8IDgpIHwgdG1wWzBdOworCWRhdGFfc2l6ZSA9IDIgKyAxMiAqIG5yX3JhdGVzOworCWRhdGEgPSBremFsbG9jKGRhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIG5vdyBnZXQgdGhlIGZ1bGwgaW5mb3JtYXRpb24gKi8KKwlyZXQgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgVUFDMl9DU19SQU5HRSwKKwkJCSAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAorCQkJICAgICAgIDB4MDEwMCwgY2hpcC0+Y2xvY2tfaWQgPDwgOCwgZGF0YSwgZGF0YV9zaXplLCAxMDAwKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXRyaWV2ZSBzYW1wbGUgcmF0ZSByYW5nZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZnAtPnJhdGVfdGFibGUgPSBrbWFsbG9jKHNpemVvZihpbnQpICogbnJfcmF0ZXMsIEdGUF9LRVJORUwpOworCWlmICghZnAtPnJhdGVfdGFibGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlmcC0+bnJfcmF0ZXMgPSAwOworCWZwLT5yYXRlX21pbiA9IGZwLT5yYXRlX21heCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmF0ZXM7IGkrKykgeworCQlpbnQgcmF0ZSA9IGNvbWJpbmVfcXVhZCgmZGF0YVsyICsgMTIgKiBpXSk7CisKKwkJZnAtPnJhdGVfdGFibGVbZnAtPm5yX3JhdGVzXSA9IHJhdGU7CisJCWlmICghZnAtPnJhdGVfbWluIHx8IHJhdGUgPCBmcC0+cmF0ZV9taW4pCisJCQlmcC0+cmF0ZV9taW4gPSByYXRlOworCQlpZiAoIWZwLT5yYXRlX21heCB8fCByYXRlID4gZnAtPnJhdGVfbWF4KQorCQkJZnAtPnJhdGVfbWF4ID0gcmF0ZTsKKwkJZnAtPnJhdGVzIHw9IHNuZF9wY21fcmF0ZV90b19yYXRlX2JpdChyYXRlKTsKKwkJZnAtPm5yX3JhdGVzKys7CisJfQorCitlcnJfZnJlZToKKwlrZnJlZShkYXRhKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogcGFyc2UgdGhlIGZvcm1hdCB0eXBlIEkgYW5kIElJSSBkZXNjcmlwdG9ycwogICovCi1zdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAotCQkJCWludCBmb3JtYXQsIHVuc2lnbmVkIGNoYXIgKmZtdCkKK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X2koc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKKwkJCQlpbnQgZm9ybWF0LCB2b2lkICpfZm10LAorCQkJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlKQogewotCWludCBwY21fZm9ybWF0OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoaWZhY2UpOworCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXQgPSBfZm10OworCWludCBwcm90b2NvbCA9IGFsdHNkLT5iSW50ZXJmYWNlUHJvdG9jb2w7CisJaW50IHBjbV9mb3JtYXQsIHJldDsKIAotCWlmIChmbXRbM10gPT0gVVNCX0ZPUk1BVF9UWVBFX0lJSSkgeworCWlmIChmbXQtPmJGb3JtYXRUeXBlID09IFVBQ19GT1JNQVRfVFlQRV9JSUkpIHsKIAkJLyogRklYTUU6IHRoZSBmb3JtYXQgdHlwZSBpcyByZWFsbHkgSUVDeHh4CiAJCSAqICAgICAgICBidXQgd2UgZ2l2ZSBub3JtYWwgUENNIGZvcm1hdCB0byBnZXQgdGhlIGV4aXN0aW5nCiAJCSAqICAgICAgICBhcHBzIHdvcmtpbmcuLi4KQEAgLTI1NjAsMzQgKzI3MDEsNTcgQEAKIAkJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRTsKIAkJfQogCX0gZWxzZSB7Ci0JCXBjbV9mb3JtYXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfaV90eXBlKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCk7CisJCXBjbV9mb3JtYXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfaV90eXBlKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCwgcHJvdG9jb2wpOwogCQlpZiAocGNtX2Zvcm1hdCA8IDApCiAJCQlyZXR1cm4gLTE7CiAJfQorCiAJZnAtPmZvcm1hdCA9IHBjbV9mb3JtYXQ7Ci0JZnAtPmNoYW5uZWxzID0gZm10WzRdOworCisJLyogZ2F0aGVyIHBvc3NpYmxlIHNhbXBsZSByYXRlcyAqLworCS8qIGF1ZGlvIGNsYXNzIHYxIHJlcG9ydHMgcG9zc2libGUgc2FtcGxlIHJhdGVzIGFzIHBhcnQgb2YgdGhlCisJICogcHJvcHJpZXRhcnkgY2xhc3Mgc3BlY2lmaWMgZGVzY3JpcHRvci4KKwkgKiBhdWRpbyBjbGFzcyB2MiB1c2VzIGNsYXNzIHNwZWNpZmljIEVQMCByYW5nZSByZXF1ZXN0cyBmb3IgdGhhdC4KKwkgKi8KKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBVQUNfVkVSU0lPTl8xOgorCQlmcC0+Y2hhbm5lbHMgPSBmbXQtPmJOckNoYW5uZWxzOworCQlyZXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjEoY2hpcCwgZnAsIF9mbXQsIDcpOworCQlicmVhazsKKwljYXNlIFVBQ19WRVJTSU9OXzI6CisJCS8qIGZwLT5jaGFubmVscyBpcyBhbHJlYWR5IHNldCBpbiB0aGlzIGNhc2UgKi8KKwkJcmV0ID0gcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzX3YyKGNoaXAsIGZwLCBpZmFjZSk7CisJCWJyZWFrOworCX0KKwogCWlmIChmcC0+Y2hhbm5lbHMgPCAxKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBjaGFubmVscyAlZFxuIiwKIAkJCSAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nLCBmcC0+Y2hhbm5lbHMpOwogCQlyZXR1cm4gLTE7CiAJfQotCXJldHVybiBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXMoY2hpcCwgZnAsIGZtdCwgNyk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKgotICogcHJhc2UgdGhlIGZvcm1hdCB0eXBlIElJIGRlc2NyaXB0b3IKKyAqIHBhcnNlIHRoZSBmb3JtYXQgdHlwZSBJSSBkZXNjcmlwdG9yCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X2lpKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAotCQkJCSBpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQpCitzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9paShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCQkgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKKwkJCQkgaW50IGZvcm1hdCwgdm9pZCAqX2ZtdCwKKwkJCQkgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2UpCiB7Ci0JaW50IGJyYXRlLCBmcmFtZXNpemU7CisJaW50IGJyYXRlLCBmcmFtZXNpemUsIHJldDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZCA9IGdldF9pZmFjZV9kZXNjKGlmYWNlKTsKKwlpbnQgcHJvdG9jb2wgPSBhbHRzZC0+YkludGVyZmFjZVByb3RvY29sOworCiAJc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfQUMzOgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lJX0FDMzoKIAkJLyogRklYTUU6IHRoZXJlIGlzIG5vIEFDMyBmb3JtYXQgZGVmaW5lZCB5ZXQgKi8KIAkJLy8gZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfQUMzOwogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9VODsgLyogdGVtcG9yYXJpbHkgaGFjayB0byByZWNlaXZlIGJ5dGUgc3RyZWFtcyAqLwogCQlicmVhazsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfTVBFRzoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JSV9NUEVHOgogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjU5NiwyNiArMjc2MCw0NiBAQAogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKIAl9CisKIAlmcC0+Y2hhbm5lbHMgPSAxOwotCWJyYXRlID0gY29tYmluZV93b3JkKCZmbXRbNF0pOyAJLyogZm10WzQsNV0gOiB3TWF4Qml0UmF0ZSAoaW4ga2JwcykgKi8KLQlmcmFtZXNpemUgPSBjb21iaW5lX3dvcmQoJmZtdFs2XSk7IC8qIGZtdFs2LDddOiB3U2FtcGxlc1BlckZyYW1lICovCi0Jc25kX3ByaW50ZChLRVJOX0lORk8gImZvdW5kIGZvcm1hdCBJSSB3aXRoIG1heC5iaXRyYXRlID0gJWQsIGZyYW1lIHNpemU9JWRcbiIsIGJyYXRlLCBmcmFtZXNpemUpOwotCWZwLT5mcmFtZV9zaXplID0gZnJhbWVzaXplOwotCXJldHVybiBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXMoY2hpcCwgZnAsIGZtdCwgOCk7IC8qIGZtdFs4Li5dIHNhbXBsZSByYXRlcyAqLworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgVUFDX1ZFUlNJT05fMTogeworCQlzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lpX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKmZtdCA9IF9mbXQ7CisJCWJyYXRlID0gbGUxNl90b19jcHUoZm10LT53TWF4Qml0UmF0ZSk7CisJCWZyYW1lc2l6ZSA9IGxlMTZfdG9fY3B1KGZtdC0+d1NhbXBsZXNQZXJGcmFtZSk7CisJCXNuZF9wcmludGQoS0VSTl9JTkZPICJmb3VuZCBmb3JtYXQgSUkgd2l0aCBtYXguYml0cmF0ZSA9ICVkLCBmcmFtZSBzaXplPSVkXG4iLCBicmF0ZSwgZnJhbWVzaXplKTsKKwkJZnAtPmZyYW1lX3NpemUgPSBmcmFtZXNpemU7CisJCXJldCA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlc192MShjaGlwLCBmcCwgX2ZtdCwgOCk7IC8qIGZtdFs4Li5dIHNhbXBsZSByYXRlcyAqLworCQlicmVhazsKKwl9CisJY2FzZSBVQUNfVkVSU0lPTl8yOiB7CisJCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZXh0X2Rlc2NyaXB0b3IgKmZtdCA9IF9mbXQ7CisJCWJyYXRlID0gbGUxNl90b19jcHUoZm10LT53TWF4Qml0UmF0ZSk7CisJCWZyYW1lc2l6ZSA9IGxlMTZfdG9fY3B1KGZtdC0+d1NhbXBsZXNQZXJGcmFtZSk7CisJCXNuZF9wcmludGQoS0VSTl9JTkZPICJmb3VuZCBmb3JtYXQgSUkgd2l0aCBtYXguYml0cmF0ZSA9ICVkLCBmcmFtZSBzaXplPSVkXG4iLCBicmF0ZSwgZnJhbWVzaXplKTsKKwkJZnAtPmZyYW1lX3NpemUgPSBmcmFtZXNpemU7CisJCXJldCA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlc192MihjaGlwLCBmcCwgaWZhY2UpOworCQlicmVhazsKKwl9CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXQoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCi0JCQkgICAgICBpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQsIGludCBzdHJlYW0pCisJCQkgICAgICBpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQsIGludCBzdHJlYW0sCisJCQkgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlpbnQgZXJyOwogCiAJc3dpdGNoIChmbXRbM10pIHsKLQljYXNlIFVTQl9GT1JNQVRfVFlQRV9JOgotCWNhc2UgVVNCX0ZPUk1BVF9UWVBFX0lJSToKLQkJZXJyID0gcGFyc2VfYXVkaW9fZm9ybWF0X2koY2hpcCwgZnAsIGZvcm1hdCwgZm10KTsKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JOgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lJSToKKwkJZXJyID0gcGFyc2VfYXVkaW9fZm9ybWF0X2koY2hpcCwgZnAsIGZvcm1hdCwgZm10LCBpZmFjZSk7CiAJCWJyZWFrOwotCWNhc2UgVVNCX0ZPUk1BVF9UWVBFX0lJOgotCQllcnIgPSBwYXJzZV9hdWRpb19mb3JtYXRfaWkoY2hpcCwgZnAsIGZvcm1hdCwgZm10KTsKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JSToKKwkJZXJyID0gcGFyc2VfYXVkaW9fZm9ybWF0X2lpKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCwgaWZhY2UpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiBmb3JtYXQgdHlwZSAlZCBpcyBub3Qgc3VwcG9ydGVkIHlldFxuIiwKQEAgLTI2MzMsNyArMjgxNyw3IEBACiAJaWYgKGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMDApIHx8CiAJICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMjApIHx8CiAJICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNjEpKSB7Ci0JCWlmIChmbXRbM10gPT0gVVNCX0ZPUk1BVF9UWVBFX0kgJiYKKwkJaWYgKGZtdFszXSA9PSBVQUNfRk9STUFUX1RZUEVfSSAmJgogCQkgICAgZnAtPnJhdGVzICE9IFNORFJWX1BDTV9SQVRFXzQ4MDAwICYmCiAJCSAgICBmcC0+cmF0ZXMgIT0gU05EUlZfUENNX1JBVEVfOTYwMDApCiAJCQlyZXR1cm4gLTE7CkBAIC0yNjYyLDEwICsyODQ2LDEwIEBACiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKIAlpbnQgaSwgYWx0bm8sIGVyciwgc3RyZWFtOwotCWludCBmb3JtYXQ7CisJaW50IGZvcm1hdCA9IDAsIG51bV9jaGFubmVscyA9IDA7CiAJc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqZm10LCAqY3NlcDsKLQlpbnQgbnVtOworCWludCBudW0sIHByb3RvY29sOwogCiAJZGV2ID0gY2hpcC0+ZGV2OwogCkBAIC0yNjg0LDEwICsyODY4LDExIEBACiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAJCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbaV07CiAJCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyk7CisJCXByb3RvY29sID0gYWx0c2QtPmJJbnRlcmZhY2VQcm90b2NvbDsKIAkJLyogc2tpcCBpbnZhbGlkIG9uZSAqLwogCQlpZiAoKGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPICYmCiAJCSAgICAgYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMpIHx8Ci0JCSAgICAoYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfQVVESU9fU1RSRUFNSU5HICYmCisJCSAgICAoYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfQVVESU9TVFJFQU1JTkcgJiYKIAkJICAgICBhbHRzZC0+YkludGVyZmFjZVN1YkNsYXNzICE9IFVTQl9TVUJDTEFTU19WRU5ET1JfU1BFQykgfHwKIAkJICAgIGFsdHNkLT5iTnVtRW5kcG9pbnRzIDwgMSB8fAogCQkgICAgbGUxNl90b19jcHUoZ2V0X2VuZHBvaW50KGFsdHMsIDApLT53TWF4UGFja2V0U2l6ZSkgPT0gMCkKQEAgLTI3MDgsMzAgKzI4OTMsNjUgQEAKIAkJCWNvbnRpbnVlOwogCiAJCS8qIGdldCBhdWRpbyBmb3JtYXRzICovCi0JCWZtdCA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgQVNfR0VORVJBTCk7Ci0JCWlmICghZm10KSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IEFTX0dFTkVSQUwgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsCi0JCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7Ci0JCQljb250aW51ZTsKKwkJc3dpdGNoIChwcm90b2NvbCkgeworCQljYXNlIFVBQ19WRVJTSU9OXzE6IHsKKwkJCXN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjEgKmFzID0KKwkJCQlzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhhbHRzLT5leHRyYSwgYWx0cy0+ZXh0cmFsZW4sIE5VTEwsIFVBQ19BU19HRU5FUkFMKTsKKworCQkJaWYgKCFhcykgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogVUFDX0FTX0dFTkVSQUwgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsCisJCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoYXMtPmJMZW5ndGggPCBzaXplb2YoKmFzKSkgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBVQUNfQVNfR0VORVJBTCBkZXNjXG4iLAorCQkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZm9ybWF0ID0gbGUxNl90b19jcHUoYXMtPndGb3JtYXRUYWcpOyAvKiByZW1lbWJlciB0aGUgZm9ybWF0IHZhbHVlICovCisJCQlicmVhazsKIAkJfQogCi0JCWlmIChmbXRbMF0gPCA3KSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgQVNfR0VORVJBTCBkZXNjXG4iLAotCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOwotCQkJY29udGludWU7CisJCWNhc2UgVUFDX1ZFUlNJT05fMjogeworCQkJc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvcl92MiAqYXMgPQorCQkJCXNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgVUFDX0FTX0dFTkVSQUwpOworCisJCQlpZiAoIWFzKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBVQUNfQVNfR0VORVJBTCBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIiwKKwkJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChhcy0+Ykxlbmd0aCA8IHNpemVvZigqYXMpKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBpbnZhbGlkIFVBQ19BU19HRU5FUkFMIGRlc2NcbiIsCisJCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQludW1fY2hhbm5lbHMgPSBhcy0+Yk5yQ2hhbm5lbHM7CisJCQlmb3JtYXQgPSBsZTMyX3RvX2NwdShhcy0+Ym1Gb3JtYXRzKTsKKworCQkJYnJlYWs7CiAJCX0KIAotCQlmb3JtYXQgPSAoZm10WzZdIDw8IDgpIHwgZm10WzVdOyAvKiByZW1lbWJlciB0aGUgZm9ybWF0IHZhbHVlICovCisJCWRlZmF1bHQ6CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IHVua25vd24gaW50ZXJmYWNlIHByb3RvY29sICUwNHhcbiIsCisJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubywgcHJvdG9jb2wpOworCQkJY29udGludWU7CisJCX0KIAogCQkvKiBnZXQgZm9ybWF0IHR5cGUgKi8KLQkJZm10ID0gc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoYWx0cy0+ZXh0cmEsIGFsdHMtPmV4dHJhbGVuLCBOVUxMLCBGT1JNQVRfVFlQRSk7CisJCWZtdCA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgVUFDX0ZPUk1BVF9UWVBFKTsKIAkJaWYgKCFmbXQpIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogbm8gRk9STUFUX1RZUEUgZGVzY1xuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogbm8gVUFDX0ZPUk1BVF9UWVBFIGRlc2NcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoZm10WzBdIDwgOCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBpbnZhbGlkIEZPUk1BVF9UWVBFIGRlc2NcbiIsCisJCWlmICgoKHByb3RvY29sID09IFVBQ19WRVJTSU9OXzEpICYmIChmbXRbMF0gPCA4KSkgfHwKKwkJICAgICgocHJvdG9jb2wgPT0gVUFDX1ZFUlNJT05fMikgJiYgKGZtdFswXSAhPSA2KSkpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBVQUNfRk9STUFUX1RZUEUgZGVzY1xuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yNzQ0LDYgKzI5NjQsNyBAQAogCQlpZiAoZm10WzRdID09IDEgJiYgZm10WzVdID09IDIgJiYgYWx0bm8gPT0gMiAmJiBudW0gPT0gMyAmJgogCQkgICAgZnAgJiYgZnAtPmFsdHNldHRpbmcgPT0gMSAmJiBmcC0+Y2hhbm5lbHMgPT0gMSAmJgogCQkgICAgZnAtPmZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRSAmJgorCQkgICAgcHJvdG9jb2wgPT0gVUFDX1ZFUlNJT05fMSAmJgogCQkgICAgbGUxNl90b19jcHUoZ2V0X2VuZHBvaW50KGFsdHMsIDApLT53TWF4UGFja2V0U2l6ZSkgPT0KIAkJCQkJCQlmcC0+bWF4cGFja3NpemUgKiAyKQogCQkJY29udGludWU7CkBAIC0yNzUyLDcgKzI5NzMsNyBAQAogCQkvKiBDcmVhbXdhcmUgTm9haCBoYXMgdGhpcyBkZXNjcmlwdG9yIGFmdGVyIHRoZSAybmQgZW5kcG9pbnQgKi8KIAkJaWYgKCFjc2VwICYmIGFsdHNkLT5iTnVtRW5kcG9pbnRzID49IDIpCiAJCQljc2VwID0gc25kX3VzYl9maW5kX2Rlc2MoYWx0cy0+ZW5kcG9pbnRbMV0uZXh0cmEsIGFsdHMtPmVuZHBvaW50WzFdLmV4dHJhbGVuLCBOVUxMLCBVU0JfRFRfQ1NfRU5EUE9JTlQpOwotCQlpZiAoIWNzZXAgfHwgY3NlcFswXSA8IDcgfHwgY3NlcFsyXSAhPSBFUF9HRU5FUkFMKSB7CisJCWlmICghY3NlcCB8fCBjc2VwWzBdIDwgNyB8fCBjc2VwWzJdICE9IFVBQ19FUF9HRU5FUkFMKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWQ6JXU6JWQgOiBubyBvciBpbnZhbGlkIgogCQkJCSAgICIgY2xhc3Mgc3BlY2lmaWMgZW5kcG9pbnQgZGVzY3JpcHRvclxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKQEAgLTI3NzIsNiArMjk5Myw4IEBACiAJCWZwLT5lcF9hdHRyID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5ibUF0dHJpYnV0ZXM7CiAJCWZwLT5kYXRhaW50ZXJ2YWwgPSBwYXJzZV9kYXRhaW50ZXJ2YWwoY2hpcCwgYWx0cyk7CiAJCWZwLT5tYXhwYWNrc2l6ZSA9IGxlMTZfdG9fY3B1KGdldF9lbmRwb2ludChhbHRzLCAwKS0+d01heFBhY2tldFNpemUpOworCQkvKiBudW1fY2hhbm5lbHMgaXMgb25seSBzZXQgZm9yIHYyIGludGVyZmFjZXMgKi8KKwkJZnAtPmNoYW5uZWxzID0gbnVtX2NoYW5uZWxzOwogCQlpZiAoc25kX3VzYl9nZXRfc3BlZWQoZGV2KSA9PSBVU0JfU1BFRURfSElHSCkKIAkJCWZwLT5tYXhwYWNrc2l6ZSA9ICgoKGZwLT5tYXhwYWNrc2l6ZSA+PiAxMSkgJiAzKSArIDEpCiAJCQkJCSogKGZwLT5tYXhwYWNrc2l6ZSAmIDB4N2ZmKTsKQEAgLTI3ODQsMTIgKzMwMDcsMTIgQEAKIAkJCS8qIE9wdG9wbGF5IHNldHMgdGhlIHNhbXBsZSByYXRlIGF0dHJpYnV0ZSBhbHRob3VnaAogCQkJICogaXQgc2VlbXMgbm90IHN1cHBvcnRpbmcgaXQgaW4gZmFjdC4KIAkJCSAqLwotCQkJZnAtPmF0dHJpYnV0ZXMgJj0gfkVQX0NTX0FUVFJfU0FNUExFX1JBVEU7CisJCQlmcC0+YXR0cmlidXRlcyAmPSB+VUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEU7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDMwMjApOiAvKiBDcmVhdGl2ZSBTQiBBdWRpZ3kgMiBOWCAqLwogCQljYXNlIFVTQl9JRCgweDA3NjMsIDB4MjAwMyk6IC8qIE0tQXVkaW8gQXVkaW9waGlsZSBVU0IgKi8KIAkJCS8qIGRvZXNuJ3Qgc2V0IHRoZSBzYW1wbGUgcmF0ZSBhdHRyaWJ1dGUsIGJ1dCBzdXBwb3J0cyBpdCAqLwotCQkJZnAtPmF0dHJpYnV0ZXMgfD0gRVBfQ1NfQVRUUl9TQU1QTEVfUkFURTsKKwkJCWZwLT5hdHRyaWJ1dGVzIHw9IFVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX0lEKDB4MDQ3ZiwgMHgwY2ExKTogLyogcGxhbnRyb25pY3MgaGVhZHNldCAqLwogCQljYXNlIFVTQl9JRCgweDA3N2QsIDB4MDdhZik6IC8qIEdyaWZmaW4gaU1pYyAobm90ZSB0aGF0IHRoZXJlIGlzCkBAIC0yNzk4LDE2ICszMDIxLDE2IEBACiAJCSAqIHBsYW50cm9uaWNzIGhlYWRzZXQgYW5kIEdyaWZmaW4gaU1pYyBoYXZlIHNldCBhZGFwdGl2ZS1pbgogCQkgKiBhbHRob3VnaCBpdCdzIHJlYWxseSBub3QuLi4KIAkJICovCi0JCQlmcC0+ZXBfYXR0ciAmPSB+RVBfQVRUUl9NQVNLOworCQkJZnAtPmVwX2F0dHIgJj0gflVTQl9FTkRQT0lOVF9TWU5DVFlQRTsKIAkJCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJCQlmcC0+ZXBfYXR0ciB8PSBFUF9BVFRSX0FEQVBUSVZFOworCQkJCWZwLT5lcF9hdHRyIHw9IFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFOwogCQkJZWxzZQotCQkJCWZwLT5lcF9hdHRyIHw9IEVQX0FUVFJfU1lOQzsKKwkJCQlmcC0+ZXBfYXR0ciB8PSBVU0JfRU5EUE9JTlRfU1lOQ19TWU5DOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBvaywgbGV0J3MgcGFyc2UgZnVydGhlci4uLiAqLwotCQlpZiAocGFyc2VfYXVkaW9fZm9ybWF0KGNoaXAsIGZwLCBmb3JtYXQsIGZtdCwgc3RyZWFtKSA8IDApIHsKKwkJaWYgKHBhcnNlX2F1ZGlvX2Zvcm1hdChjaGlwLCBmcCwgZm9ybWF0LCBmbXQsIHN0cmVhbSwgYWx0cykgPCAwKSB7CiAJCQlrZnJlZShmcC0+cmF0ZV90YWJsZSk7CiAJCQlrZnJlZShmcCk7CiAJCQljb250aW51ZTsKQEAgLTI4NDksNiArMzA3Miw2NSBAQAogCX0KIH0KIAorc3RhdGljIGludCBzbmRfdXNiX2NyZWF0ZV9zdHJlYW0oc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIGludCBjdHJsaWYsIGludCBpbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGNoaXAtPmRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmFsdHNkOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGludGVyZmFjZSk7CisKKwlpZiAoIWlmYWNlKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogZG9lcyBub3QgZXhpc3RcbiIsCisJCQkgICBkZXYtPmRldm51bSwgY3RybGlmLCBpbnRlcmZhY2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodXNiX2ludGVyZmFjZV9jbGFpbWVkKGlmYWNlKSkgeworCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiVkOiVkOiBza2lwcGluZywgYWxyZWFkeSBjbGFpbWVkXG4iLAorCQkJCQkJZGV2LT5kZXZudW0sIGN0cmxpZiwgaW50ZXJmYWNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1swXTsKKwlhbHRzZCA9IGdldF9pZmFjZV9kZXNjKGFsdHMpOworCWlmICgoYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQVVESU8gfHwKKwkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSAmJgorCSAgICBhbHRzZC0+YkludGVyZmFjZVN1YkNsYXNzID09IFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HKSB7CisJCWludCBlcnIgPSBzbmRfdXNibWlkaV9jcmVhdGUoY2hpcC0+Y2FyZCwgaWZhY2UsCisJCQkJCSAgICAgJmNoaXAtPm1pZGlfbGlzdCwgTlVMTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZDogY2Fubm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGV2aWNlXG4iLAorCQkJCQkJZGV2LT5kZXZudW0sIGN0cmxpZiwgaW50ZXJmYWNlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1c2JfYXVkaW9fZHJpdmVyLCBpZmFjZSwgKHZvaWQgKiktMUwpOworCisJCXJldHVybiAwOworCX0KKworCWlmICgoYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfQVVESU8gJiYKKwkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSB8fAorCSAgICBhbHRzZC0+YkludGVyZmFjZVN1YkNsYXNzICE9IFVTQl9TVUJDTEFTU19BVURJT1NUUkVBTUlORykgeworCQlzbmRfcHJpbnRkZChLRVJOX0VSUiAiJWQ6JXU6JWQ6IHNraXBwaW5nIG5vbi1zdXBwb3J0ZWQgaW50ZXJmYWNlICVkXG4iLAorCQkJCQlkZXYtPmRldm51bSwgY3RybGlmLCBpbnRlcmZhY2UsIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MpOworCQkvKiBza2lwIG5vbi1zdXBwb3J0ZWQgY2xhc3NlcyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc25kX3VzYl9nZXRfc3BlZWQoZGV2KSA9PSBVU0JfU1BFRURfTE9XKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImxvdyBzcGVlZCBhdWRpbyBzdHJlYW1pbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghIHBhcnNlX2F1ZGlvX2VuZHBvaW50cyhjaGlwLCBpbnRlcmZhY2UpKSB7CisJCXVzYl9zZXRfaW50ZXJmYWNlKGRldiwgaW50ZXJmYWNlLCAwKTsgLyogcmVzZXQgdGhlIGN1cnJlbnQgaW50ZXJmYWNlICovCisJCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1c2JfYXVkaW9fZHJpdmVyLCBpZmFjZSwgKHZvaWQgKiktMUwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIHBhcnNlIGF1ZGlvIGNvbnRyb2wgZGVzY3JpcHRvciBhbmQgY3JlYXRlIHBjbS9taWRpIHN0cmVhbXMKICAqLwpAQCAtMjg1Niw2NyArMzEzOCw4MSBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBjaGlwLT5kZXY7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdF9pZmFjZTsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2U7Ci0JdW5zaWduZWQgY2hhciAqcDE7Ci0JaW50IGksIGo7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqYWx0c2Q7CisJdm9pZCAqY29udHJvbF9oZWFkZXI7CisJaW50IGksIHByb3RvY29sOwogCiAJLyogZmluZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICovCiAJaG9zdF9pZmFjZSA9ICZ1c2JfaWZudW1fdG9faWYoZGV2LCBjdHJsaWYpLT5hbHRzZXR0aW5nWzBdOwotCWlmICghKHAxID0gc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoaG9zdF9pZmFjZS0+ZXh0cmEsIGhvc3RfaWZhY2UtPmV4dHJhbGVuLCBOVUxMLCBIRUFERVIpKSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZmluZCBIRUFERVJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKCEgcDFbN10gfHwgcDFbMF0gPCA4ICsgcDFbN10pIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBIRUFERVJcbiIpOworCWNvbnRyb2xfaGVhZGVyID0gc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoaG9zdF9pZmFjZS0+ZXh0cmEsCisJCQkJCQkgaG9zdF9pZmFjZS0+ZXh0cmFsZW4sCisJCQkJCQkgTlVMTCwgVUFDX0hFQURFUik7CisJYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhob3N0X2lmYWNlKTsKKwlwcm90b2NvbCA9IGFsdHNkLT5iSW50ZXJmYWNlUHJvdG9jb2w7CisKKwlpZiAoIWNvbnRyb2xfaGVhZGVyKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBmaW5kIFVBQ19IRUFERVJcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKgotCSAqIHBhcnNlIGFsbCBVU0IgYXVkaW8gc3RyZWFtaW5nIGludGVyZmFjZXMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcDFbN107IGkrKykgewotCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOwotCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKLQkJaiA9IHAxWzggKyBpXTsKLQkJaWZhY2UgPSB1c2JfaWZudW1fdG9faWYoZGV2LCBqKTsKLQkJaWYgKCFpZmFjZSkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBkb2VzIG5vdCBleGlzdFxuIiwKLQkJCQkgICBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKLQkJCWNvbnRpbnVlOworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIFVBQ19WRVJTSU9OXzE6IHsKKwkJc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl92MSAqaDEgPSBjb250cm9sX2hlYWRlcjsKKworCQlpZiAoIWgxLT5iSW5Db2xsZWN0aW9uKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAic2tpcHBpbmcgZW1wdHkgYXVkaW8gaW50ZXJmYWNlICh2MSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHVzYl9pbnRlcmZhY2VfY2xhaW1lZChpZmFjZSkpIHsKLQkJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JWQ6JWQ6IHNraXBwaW5nLCBhbHJlYWR5IGNsYWltZWRcbiIsIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOwotCQkJY29udGludWU7CisKKwkJaWYgKGgxLT5iTGVuZ3RoIDwgc2l6ZW9mKCpoMSkgKyBoMS0+YkluQ29sbGVjdGlvbikgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBVQUNfSEVBREVSICh2MSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1swXTsKLQkJYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhhbHRzKTsKLQkJaWYgKChhbHRzZC0+YkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19BVURJTyB8fAotCQkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSAmJgotCQkgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBVU0JfU1VCQ0xBU1NfTUlESV9TVFJFQU1JTkcpIHsKLQkJCWludCBlcnIgPSBzbmRfdXNibWlkaV9jcmVhdGUoY2hpcC0+Y2FyZCwgaWZhY2UsCi0JCQkJCQkgICAgICZjaGlwLT5taWRpX2xpc3QsIE5VTEwpOwotCQkJaWYgKGVyciA8IDApIHsKLQkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZDogY2Fubm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGV2aWNlXG4iLCBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1c2JfYXVkaW9fZHJpdmVyLCBpZmFjZSwgKHZvaWQgKiktMUwpOwotCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IGgxLT5iSW5Db2xsZWN0aW9uOyBpKyspCisJCQlzbmRfdXNiX2NyZWF0ZV9zdHJlYW0oY2hpcCwgY3RybGlmLCBoMS0+YmFJbnRlcmZhY2VOcltpXSk7CisKKwkJYnJlYWs7CisJfQorCisJY2FzZSBVQUNfVkVSU0lPTl8yOiB7CisJCXN0cnVjdCB1YWNfY2xvY2tfc291cmNlX2Rlc2NyaXB0b3IgKmNzOworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yICphc3NvYyA9CisJCQl1c2JfaWZudW1fdG9faWYoZGV2LCBjdHJsaWYpLT5pbnRmX2Fzc29jOworCisJCWlmICghYXNzb2MpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkF1ZGlvIGNsYXNzIHYyIGludGVyZmFjZXMgbmVlZCBhbiBpbnRlcmZhY2UgYXNzb2NpYXRpb25cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKChhbHRzZC0+YkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19BVURJTyAmJgotCQkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSB8fAotCQkgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfQVVESU9fU1RSRUFNSU5HKSB7Ci0JCQlzbmRfcHJpbnRkZChLRVJOX0VSUiAiJWQ6JXU6JWQ6IHNraXBwaW5nIG5vbi1zdXBwb3J0ZWQgaW50ZXJmYWNlICVkXG4iLCBkZXYtPmRldm51bSwgY3RybGlmLCBqLCBhbHRzZC0+YkludGVyZmFjZUNsYXNzKTsKLQkJCS8qIHNraXAgbm9uLXN1cHBvcnRlZCBjbGFzc2VzICovCi0JCQljb250aW51ZTsKKworCQkvKiBGSVhNRTogZm9yIG5vdywgd2UgZXhwZWN0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjbG9jayBzb3VyY2UKKwkJICogZGVzY3JpcHRvciBhbmQgd2UgYWx3YXlzIHRha2UgdGhlIGZpcnN0IG9uZS4KKwkJICogV2Ugc2hvdWxkIHByb3Blcmx5IHN1cHBvcnQgZGV2aWNlcyB3aXRoIG11bHRpcGxlIGNsb2NrIHNvdXJjZXMsCisJCSAqIGNsb2NrIHNlbGVjdG9ycyBhbmQgc2FtcGxlIHJhdGUgY29udmVyc2lvbiB1bml0cy4gKi8KKworCQljcyA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RfaWZhY2UtPmV4dHJhLCBob3N0X2lmYWNlLT5leHRyYWxlbiwKKwkJCQkJCU5VTEwsIFVBQ19DTE9DS19TT1VSQ0UpOworCisJCWlmICghY3MpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNMT0NLX1NPVVJDRSBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoc25kX3VzYl9nZXRfc3BlZWQoZGV2KSA9PSBVU0JfU1BFRURfTE9XKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJsb3cgc3BlZWQgYXVkaW8gc3RyZWFtaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJY29udGludWU7CisKKwkJY2hpcC0+Y2xvY2tfaWQgPSBjcy0+YkNsb2NrSUQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGFzc29jLT5iSW50ZXJmYWNlQ291bnQ7IGkrKykgeworCQkJaW50IGludGYgPSBhc3NvYy0+YkZpcnN0SW50ZXJmYWNlICsgaTsKKworCQkJaWYgKGludGYgIT0gY3RybGlmKQorCQkJCXNuZF91c2JfY3JlYXRlX3N0cmVhbShjaGlwLCBjdHJsaWYsIGludGYpOwogCQl9Ci0JCWlmICghIHBhcnNlX2F1ZGlvX2VuZHBvaW50cyhjaGlwLCBqKSkgewotCQkJdXNiX3NldF9pbnRlcmZhY2UoZGV2LCBqLCAwKTsgLyogcmVzZXQgdGhlIGN1cnJlbnQgaW50ZXJmYWNlICovCi0JCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTFMKTsKLQkJfQorCisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVua25vd24gcHJvdG9jb2wgdmVyc2lvbiAweCUwMnhcbiIsIHByb3RvY29sKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMDA3LDcgKzMzMDMsNyBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXVkaW9mb3JtYXQgdWFfZm9ybWF0ID0gewogCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMjRfM0xFLAogCQkuY2hhbm5lbHMgPSAyLAotCQkuZm10X3R5cGUgPSBVU0JfRk9STUFUX1RZUEVfSSwKKwkJLmZtdF90eXBlID0gVUFDX0ZPUk1BVF9UWVBFX0ksCiAJCS5hbHRzZXR0aW5nID0gMSwKIAkJLmFsdHNldF9pZHggPSAxLAogCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTLApAQCAtMzA5OSw3ICszMzk1LDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF1ZGlvZm9ybWF0IHVhMTAwMF9mb3JtYXQgPSB7CiAJCS5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSwKLQkJLmZtdF90eXBlID0gVVNCX0ZPUk1BVF9UWVBFX0ksCisJCS5mbXRfdHlwZSA9IFVBQ19GT1JNQVRfVFlQRV9JLAogCQkuYWx0c2V0dGluZyA9IDEsCiAJCS5hbHRzZXRfaWR4ID0gMSwKIAkJLmF0dHJpYnV0ZXMgPSAwLApAQCAtMzE0Miw1OSArMzQzOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBDcmVhdGUgYSBzdHJlYW0gZm9yIGFuIEVkaXJvbCBVQS0xMDEgaW50ZXJmYWNlLgotICogQ29weSwgcGFzdGUgYW5kIG1vZGlmeSBmcm9tIEVkaXJvbCBVQS0xMDAwCi0gKi8KLXN0YXRpYyBpbnQgY3JlYXRlX3VhMTAxX3F1aXJrKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAotCQkJICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyayAqcXVpcmspCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBhdWRpb2Zvcm1hdCB1YTEwMV9mb3JtYXQgPSB7Ci0JCS5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSwKLQkJLmZtdF90eXBlID0gVVNCX0ZPUk1BVF9UWVBFX0ksCi0JCS5hbHRzZXR0aW5nID0gMSwKLQkJLmFsdHNldF9pZHggPSAxLAotCQkuYXR0cmlidXRlcyA9IDAsCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMsCi0JfTsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmFsdHNkOwotCXN0cnVjdCBhdWRpb2Zvcm1hdCAqZnA7Ci0JaW50IHN0cmVhbSwgZXJyOwotCi0JaWYgKGlmYWNlLT5udW1fYWx0c2V0dGluZyAhPSAyKQotCQlyZXR1cm4gLUVOWElPOwotCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbMV07Ci0JYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhhbHRzKTsKLQlpZiAoYWx0cy0+ZXh0cmFsZW4gIT0gMTggfHwgYWx0cy0+ZXh0cmFbMV0gIT0gVVNCX0RUX0NTX0lOVEVSRkFDRSB8fAotCSAgICBhbHRzZC0+Yk51bUVuZHBvaW50cyAhPSAxKQotCQlyZXR1cm4gLUVOWElPOwotCi0JZnAgPSBrbWVtZHVwKCZ1YTEwMV9mb3JtYXQsIHNpemVvZigqZnApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZwLT5jaGFubmVscyA9IGFsdHMtPmV4dHJhWzExXTsKLQlmcC0+aWZhY2UgPSBhbHRzZC0+YkludGVyZmFjZU51bWJlcjsKLQlmcC0+ZW5kcG9pbnQgPSBnZXRfZW5kcG9pbnQoYWx0cywgMCktPmJFbmRwb2ludEFkZHJlc3M7Ci0JZnAtPmVwX2F0dHIgPSBnZXRfZW5kcG9pbnQoYWx0cywgMCktPmJtQXR0cmlidXRlczsKLQlmcC0+ZGF0YWludGVydmFsID0gcGFyc2VfZGF0YWludGVydmFsKGNoaXAsIGFsdHMpOwotCWZwLT5tYXhwYWNrc2l6ZSA9IGxlMTZfdG9fY3B1KGdldF9lbmRwb2ludChhbHRzLCAwKS0+d01heFBhY2tldFNpemUpOwotCWZwLT5yYXRlX21heCA9IGZwLT5yYXRlX21pbiA9IGNvbWJpbmVfdHJpcGxlKCZhbHRzLT5leHRyYVsxNV0pOwotCi0Jc3RyZWFtID0gKGZwLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pCi0JCT8gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFIDogU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQllcnIgPSBhZGRfYXVkaW9fZW5kcG9pbnQoY2hpcCwgc3RyZWFtLCBmcCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJa2ZyZWUoZnApOwotCQlyZXR1cm4gZXJyOwotCX0KLQkvKiBGSVhNRTogcGxheWJhY2sgbXVzdCBiZSBzeW5jaHJvbml6ZWQgdG8gY2FwdHVyZSAqLwotCXVzYl9zZXRfaW50ZXJmYWNlKGNoaXAtPmRldiwgZnAtPmlmYWNlLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzbmRfdXNiX2NyZWF0ZV9xdWlyayhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKIAkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCiAJCQkJY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmsgKnF1aXJrKTsKQEAgLTMyMzIsNiArMzQ3NSwxOCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQWxsb3cgYWxpZ25tZW50IG9uIGF1ZGlvIHN1Yi1zbG90IChjaGFubmVsIHNhbXBsZXMpIHJhdGhlciB0aGFuCisgKiBvbiBhdWRpbyBzbG90cyAoYXVkaW8gZnJhbWVzKQorICovCitzdGF0aWMgaW50IGNyZWF0ZV9hbGlnbl90cmFuc2Zlcl9xdWlyayhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCQkgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrICpxdWlyaykKK3sKKwljaGlwLT50eGZyX3F1aXJrID0gMTsKKwlyZXR1cm4gMTsJLyogQ29udGludWUgd2l0aCBjcmVhdGluZyBzdHJlYW1zIGFuZCBtaXhlciAqLworfQorCiAKIC8qCiAgKiBib290IHF1aXJrcwpAQCAtMzMyNyw2ICszNTgyLDMyIEBACiB9CiAKIC8qCisgKiBUaGlzIGNhbGwgd2lsbCBwdXQgdGhlIHN5bnRoIGluICJVU0Igc2VuZCIgbW9kZSwgaS5lIGl0IHdpbGwgc2VuZCBNSURJCisgKiBtZXNzYWdlcyB0aHJvdWdoIFVTQiAodGhpcyBpcyBkaXNhYmxlZCBhdCBzdGFydHVwKS4gVGhlIHN5bnRoIHdpbGwKKyAqIGFja25vd2xlZGdlIGJ5IHNlbmRpbmcgYSBzeXNleCBvbiBlbmRwb2ludCAweDg1IGFuZCBieSBkaXNwbGF5aW5nIGEgVVNCCisgKiBzaWduIG9uIGl0cyBMQ0QuIFZhbHVlcyBoZXJlIGFyZSBjaG9zZW4gYmFzZWQgb24gc25pZmZpbmcgVVNCIHRyYWZmaWMKKyAqIHVuZGVyIFdpbmRvd3MuCisgKi8KK3N0YXRpYyBpbnQgc25kX3VzYl9hY2Nlc3NtdXNpY19ib290X3F1aXJrKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJaW50IGVyciwgYWN0dWFsX2xlbmd0aDsKKworCS8qICJtaWRpIHNlbmQiIGVuYWJsZSAqLworCXN0YXRpYyBjb25zdCB1OCBzZXFbXSA9IHsgMHg0ZSwgMHg3MywgMHg1MiwgMHgwMSB9OworCisJdm9pZCAqYnVmID0ga21lbWR1cChzZXEsIEFSUkFZX1NJWkUoc2VxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCWVyciA9IHVzYl9pbnRlcnJ1cHRfbXNnKGRldiwgdXNiX3NuZGludHBpcGUoZGV2LCAweDA1KSwgYnVmLAorCQkJQVJSQVlfU0laRShzZXEpLCAmYWN0dWFsX2xlbmd0aCwgMTAwMCk7CisJa2ZyZWUoYnVmKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCisvKgogICogU2V0dXAgcXVpcmtzCiAgKi8KICNkZWZpbmUgQVVESU9QSElMRV9TRVQJCQkweDAxIC8qIGlmIHNldCwgcGFyc2UgZGV2aWNlX3NldHVwICovCkBAIC0zNDA2LDggKzM2ODcsOCBAQAogCQlbUVVJUktfQVVESU9fU1RBTkRBUkRfSU5URVJGQUNFXSA9IGNyZWF0ZV9zdGFuZGFyZF9hdWRpb19xdWlyaywKIAkJW1FVSVJLX0FVRElPX0ZJWEVEX0VORFBPSU5UXSA9IGNyZWF0ZV9maXhlZF9zdHJlYW1fcXVpcmssCiAJCVtRVUlSS19BVURJT19FRElST0xfVUExMDAwXSA9IGNyZWF0ZV91YTEwMDBfcXVpcmssCi0JCVtRVUlSS19BVURJT19FRElST0xfVUExMDFdID0gY3JlYXRlX3VhMTAxX3F1aXJrLAotCQlbUVVJUktfQVVESU9fRURJUk9MX1VBWFhdID0gY3JlYXRlX3VheHhfcXVpcmsKKwkJW1FVSVJLX0FVRElPX0VESVJPTF9VQVhYXSA9IGNyZWF0ZV91YXh4X3F1aXJrLAorCQlbUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVJdID0gY3JlYXRlX2FsaWduX3RyYW5zZmVyX3F1aXJrCiAJfTsKIAogCWlmIChxdWlyay0+dHlwZSA8IFFVSVJLX1RZUEVfQ09VTlQpIHsKQEAgLTM1OTYsNyArMzg3Nyw2IEBACiAJaWZudW0gPSBnZXRfaWZhY2VfZGVzYyhhbHRzKS0+YkludGVyZmFjZU51bWJlcjsKIAlpZCA9IFVTQl9JRChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwotCiAJaWYgKHF1aXJrICYmIHF1aXJrLT5pZm51bSA+PSAwICYmIGlmbnVtICE9IHF1aXJrLT5pZm51bSkKIAkJZ290byBfX2Vycl92YWw7CiAKQEAgLTM2MjQsNiArMzkwNCwxMiBAQAogCQkJZ290byBfX2Vycl92YWw7CiAJfQogCisJLyogQWNjZXNzIE11c2ljIFZpcnVzVEkgRGVza3RvcCAqLworCWlmIChpZCA9PSBVU0JfSUQoMHgxMzNlLCAweDA4MTUpKSB7CisJCWlmIChzbmRfdXNiX2FjY2Vzc211c2ljX2Jvb3RfcXVpcmsoZGV2KSA8IDApCisJCQlnb3RvIF9fZXJyX3ZhbDsKKwl9CisKIAkvKgogCSAqIGZvdW5kIGEgY29uZmlnLiAgbm93IHJlZ2lzdGVyIHRvIEFMU0EKIAkgKi8KQEAgLTM2NjEsNiArMzk0Nyw3IEBACiAJCX0KIAl9CiAKKwljaGlwLT50eGZyX3F1aXJrID0gMDsKIAllcnIgPSAxOyAvKiBjb250aW51ZSAqLwogCWlmIChxdWlyayAmJiBxdWlyay0+aWZudW0gIT0gUVVJUktfTk9fSU5URVJGQUNFKSB7CiAJCS8qIG5lZWQgc29tZSBzcGVjaWFsIGhhbmRsaW5ncyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmggYi9zb3VuZC91c2IvdXNiYXVkaW8uaAppbmRleCA0MGJhODExLi42YjAxNmQ0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uaAorKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uaApAQCAtMjEsOTMgKzIxLDYgQEAKICAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotCi0vKgotICovCi0KLSNkZWZpbmUgVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wJMHgwMQotI2RlZmluZSBVU0JfU1VCQ0xBU1NfQVVESU9fU1RSRUFNSU5HCTB4MDIKLSNkZWZpbmUgVVNCX1NVQkNMQVNTX01JRElfU1RSRUFNSU5HCTB4MDMKLSNkZWZpbmUgVVNCX1NVQkNMQVNTX1ZFTkRPUl9TUEVDCTB4ZmYKLQotI2RlZmluZSBIRUFERVIJCQkJMHgwMQotI2RlZmluZSBJTlBVVF9URVJNSU5BTAkJCTB4MDIKLSNkZWZpbmUgT1VUUFVUX1RFUk1JTkFMCQkJMHgwMwotI2RlZmluZSBNSVhFUl9VTklUCQkJMHgwNAotI2RlZmluZSBTRUxFQ1RPUl9VTklUCQkJMHgwNQotI2RlZmluZSBGRUFUVVJFX1VOSVQJCQkweDA2Ci0jZGVmaW5lIFBST0NFU1NJTkdfVU5JVAkJCTB4MDcKLSNkZWZpbmUgRVhURU5TSU9OX1VOSVQJCQkweDA4Ci0KLSNkZWZpbmUgQVNfR0VORVJBTAkJCTB4MDEKLSNkZWZpbmUgRk9STUFUX1RZUEUJCQkweDAyCi0jZGVmaW5lIEZPUk1BVF9TUEVDSUZJQwkJCTB4MDMKLQotI2RlZmluZSBFUF9HRU5FUkFMCQkJMHgwMQotCi0jZGVmaW5lIE1TX0dFTkVSQUwJCQkweDAxCi0jZGVmaW5lIE1JRElfSU5fSkFDSwkJCTB4MDIKLSNkZWZpbmUgTUlESV9PVVRfSkFDSwkJCTB4MDMKLQotLyogZW5kcG9pbnQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBFUF9BVFRSX01BU0sJCQkweDBjCi0jZGVmaW5lIEVQX0FUVFJfQVNZTkMJCQkweDA0Ci0jZGVmaW5lIEVQX0FUVFJfQURBUFRJVkUJCTB4MDgKLSNkZWZpbmUgRVBfQVRUUl9TWU5DCQkJMHgwYwotCi0vKiBjcyBlbmRwb2ludCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIEVQX0NTX0FUVFJfU0FNUExFX1JBVEUJCTB4MDEKLSNkZWZpbmUgRVBfQ1NfQVRUUl9QSVRDSF9DT05UUk9MCTB4MDIKLSNkZWZpbmUgRVBfQ1NfQVRUUl9GSUxMX01BWAkJMHg4MAotCi0vKiBBdWRpbyBDbGFzcyBzcGVjaWZpYyBSZXF1ZXN0IENvZGVzICovCi0KLSNkZWZpbmUgU0VUX0NVUiAgICAweDAxCi0jZGVmaW5lIEdFVF9DVVIgICAgMHg4MQotI2RlZmluZSBTRVRfTUlOICAgIDB4MDIKLSNkZWZpbmUgR0VUX01JTiAgICAweDgyCi0jZGVmaW5lIFNFVF9NQVggICAgMHgwMwotI2RlZmluZSBHRVRfTUFYICAgIDB4ODMKLSNkZWZpbmUgU0VUX1JFUyAgICAweDA0Ci0jZGVmaW5lIEdFVF9SRVMgICAgMHg4NAotI2RlZmluZSBTRVRfTUVNICAgIDB4MDUKLSNkZWZpbmUgR0VUX01FTSAgICAweDg1Ci0jZGVmaW5lIEdFVF9TVEFUICAgMHhmZgotCi0vKiBUZXJtaW5hbCBDb250cm9sIFNlbGVjdG9ycyAqLwotCi0jZGVmaW5lIENPUFlfUFJPVEVDVF9DT05UUk9MICAgICAgIDB4MDEKLQotLyogRW5kcG9pbnQgQ29udHJvbCBTZWxlY3RvcnMgKi8KLQotI2RlZmluZSBTQU1QTElOR19GUkVRX0NPTlRST0wgICAgICAweDAxCi0jZGVmaW5lIFBJVENIX0NPTlRST0wgICAgICAgICAgICAgIDB4MDIKLQotLyogRm9ybWF0IFR5cGVzICovCi0jZGVmaW5lIFVTQl9GT1JNQVRfVFlQRV9JCTB4MDEKLSNkZWZpbmUgVVNCX0ZPUk1BVF9UWVBFX0lJCTB4MDIKLSNkZWZpbmUgVVNCX0ZPUk1BVF9UWVBFX0lJSQkweDAzCi0KLS8qIHR5cGUgSSAqLwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX1BDTQkweDAxCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfUENNOAkweDAyCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfSUVFRV9GTE9BVAkweDAzCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfQUxBVwkweDA0Ci0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfTVVfTEFXCTB4MDUKLQotLyogdHlwZSBJSSAqLwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX01QRUcJMHgxMDAxCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfQUMzCTB4MTAwMgotCi0vKiB0eXBlIElJSSAqLwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfQUMzCTB4MjAwMQotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzFfTEFZRVIxCTB4MjAwMgotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzJfTk9FWFQJMHgyMDAzCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfSUVDMTkzN19NUEVHMl9FWFQJMHgyMDA0Ci0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfSUVDMTkzN19NUEVHMl9MQVlFUjFfTFMJMHgyMDA1Ci0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfSUVDMTkzN19NUEVHMl9MQVlFUjIzX0xTCTB4MjAwNgotCi0KIC8qIG1heGltdW0gbnVtYmVyIG9mIGVuZHBvaW50cyBwZXIgaW50ZXJmYWNlICovCiAjZGVmaW5lIE1JRElfTUFYX0VORFBPSU5UUyAyCiAKQEAgLTEyNSw5ICszOCwxMyBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAl1MzIgdXNiX2lkOwogCWludCBzaHV0ZG93bjsKKwl1bnNpZ25lZCBpbnQgdHhmcl9xdWlyazoxOyAvKiBTdWJmcmFtZSBib3VuZGFyaWVzIG9uIHRyYW5zZmVycyAqLwogCWludCBudW1faW50ZXJmYWNlczsKIAlpbnQgbnVtX3N1c3BlbmRlZF9pbnRmOwogCisJLyogZm9yIGF1ZGlvIGNsYXNzIHYyICovCisJaW50IGNsb2NrX2lkOworCiAJc3RydWN0IGxpc3RfaGVhZCBwY21fbGlzdDsJLyogbGlzdCBvZiBwY20gc3RyZWFtcyAqLwogCWludCBwY21fZGV2czsKIApAQCAtMTU5LDggKzc2LDggQEAKIAlRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0UsCiAJUVVJUktfQVVESU9fRklYRURfRU5EUE9JTlQsCiAJUVVJUktfQVVESU9fRURJUk9MX1VBMTAwMCwKLQlRVUlSS19BVURJT19FRElST0xfVUExMDEsCiAJUVVJUktfQVVESU9fRURJUk9MX1VBWFgsCisJUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCiAKIAlRVUlSS19UWVBFX0NPVU5UCiB9OwpAQCAtMjA5LDYgKzEyNiwxNiBAQAogLyoKICAqLwogCisvKkUtbXUgVVNCIHNhbXBsZXJhdGUgY29udHJvbCBxdWlyayovCitlbnVtIHsKKwlFTVVfUVVJUktfU1JfNDQxMDBIWiA9IDAsCisJRU1VX1FVSVJLX1NSXzQ4MDAwSFosCisJRU1VX1FVSVJLX1NSXzg4MjAwSFosCisJRU1VX1FVSVJLX1NSXzk2MDAwSFosCisJRU1VX1FVSVJLX1NSXzE3NjQwMEhaLAorCUVNVV9RVUlSS19TUl8xOTIwMDBIWgorfTsKKwogI2RlZmluZSBjb21iaW5lX3dvcmQocykgICAgKCgqKHMpKSB8ICgodW5zaWduZWQgaW50KShzKVsxXSA8PCA4KSkKICNkZWZpbmUgY29tYmluZV90cmlwbGUocykgIChjb21iaW5lX3dvcmQocykgfCAoKHVuc2lnbmVkIGludCkocylbMl0gPDwgMTYpKQogI2RlZmluZSBjb21iaW5lX3F1YWQocykgICAgKGNvbWJpbmVfdHJpcGxlKHMpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzNdIDw8IDI0KSkKQEAgLTIzNCw2ICsxNjEsOSBAQAogdm9pZCBzbmRfdXNibWlkaV9pbnB1dF9zdGFydChzdHJ1Y3QgbGlzdF9oZWFkKiBwKTsKIHZvaWQgc25kX3VzYm1pZGlfZGlzY29ubmVjdChzdHJ1Y3QgbGlzdF9oZWFkICpwKTsKIAordm9pZCBzbmRfZW11dXNiX3NldF9zYW1wbGVyYXRlKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAorCQkJdW5zaWduZWQgY2hhciBzYW1wbGVyYXRlX2lkKTsKKwogLyoKICAqIHJldHJpZXZlIHVzYl9pbnRlcmZhY2UgZGVzY3JpcHRvciBmcm9tIHRoZSBob3N0IGludGVyZmFjZQogICogKGNvbmRpdGlvbmFsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZGVyIEFQSSkKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaWRpLmMgYi9zb3VuZC91c2IvdXNibWlkaS5jCmluZGV4IDZlODliODMuLjJjNTlhZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaWRpLmMKKysrIGIvc291bmQvdXNiL3VzYm1pZGkuYwpAQCAtNDYsNiArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9hdWRpby5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CkBAIC0xMTYyLDEwICsxMTY0LDIyIEBACiAJCXBpcGUgPSB1c2Jfc25kaW50cGlwZSh1bWlkaS0+ZGV2LCBlcF9pbmZvLT5vdXRfZXApOwogCWVsc2UKIAkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1bWlkaS0+ZGV2LCBlcF9pbmZvLT5vdXRfZXApOwotCWlmICh1bWlkaS0+dXNiX2lkID09IFVTQl9JRCgweDBhOTIsIDB4MTAyMCkpIC8qIEVTSSBNNFUgKi8KLQkJZXAtPm1heF90cmFuc2ZlciA9IDQ7Ci0JZWxzZQorCXN3aXRjaCAodW1pZGktPnVzYl9pZCkgeworCWRlZmF1bHQ6CiAJCWVwLT5tYXhfdHJhbnNmZXIgPSB1c2JfbWF4cGFja2V0KHVtaWRpLT5kZXYsIHBpcGUsIDEpOworCQlicmVhazsKKwkJLyoKKwkJICogVmFyaW91cyBjaGlwcyBkZWNsYXJlIGEgcGFja2V0IHNpemUgbGFyZ2VyIHRoYW4gNCBieXRlcywgYnV0CisJCSAqIGRvIG5vdCBhY3R1YWxseSB3b3JrIHdpdGggbGFyZ2VyIHBhY2tldHM6CisJCSAqLworCWNhc2UgVVNCX0lEKDB4MGE5MiwgMHgxMDIwKTogLyogRVNJIE00VSAqLworCWNhc2UgVVNCX0lEKDB4MTQzMCwgMHg0NzRiKTogLyogUmVkT2N0YW5lIEdIIE1JREkgSU5URVJGQUNFICovCisJY2FzZSBVU0JfSUQoMHgxNWNhLCAweDAxMDEpOiAvKiBUZXh0ZWNoIFVTQiBNaWRpIENhYmxlICovCisJY2FzZSBVU0JfSUQoMHgxNWNhLCAweDE4MDYpOiAvKiBUZXh0ZWNoIFVTQiBNaWRpIENhYmxlICovCisJY2FzZSBVU0JfSUQoMHgxYTg2LCAweDc1MmQpOiAvKiBRaW5IZW5nIENIMzQ1ICJVU0IyLjAtTUlESSIgKi8KKwkJZXAtPm1heF90cmFuc2ZlciA9IDQ7CisJCWJyZWFrOworCX0KIAlmb3IgKGkgPSAwOyBpIDwgT1VUUFVUX1VSQlM7ICsraSkgewogCQlidWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKHVtaWRpLT5kZXYsCiAJCQkJCSAgZXAtPm1heF90cmFuc2ZlciwgR0ZQX0tFUk5FTCwKQEAgLTE0MDcsNiArMTQyMSwxMiBAQAogCUVYVEVSTkFMX1BPUlQoMHgwODZhLCAweDAwMDEsIDgsICIlcyBCcm9hZGNhc3QiKSwKIAlFWFRFUk5BTF9QT1JUKDB4MDg2YSwgMHgwMDAyLCA4LCAiJXMgQnJvYWRjYXN0IiksCiAJRVhURVJOQUxfUE9SVCgweDA4NmEsIDB4MDAwMywgNCwgIiVzIEJyb2FkY2FzdCIpLAorCS8qIEFjY2VzcyBNdXNpYyBWaXJ1cyBUSSAqLworCUVYVEVSTkFMX1BPUlQoMHgxMzNlLCAweDA4MTUsIDAsICIlcyBNSURJIiksCisJUE9SVF9JTkZPKDB4MTMzZSwgMHgwODE1LCAxLCAiJXMgU3ludGgiLCAwLAorCQlTTkRSVl9TRVFfUE9SVF9UWVBFX01JRElfR0VORVJJQyB8CisJCVNORFJWX1NFUV9QT1JUX1RZUEVfSEFSRFdBUkUgfAorCQlTTkRSVl9TRVFfUE9SVF9UWVBFX1NZTlRIRVNJWkVSKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcG9ydF9pbmZvICpmaW5kX3BvcnRfaW5mbyhzdHJ1Y3Qgc25kX3VzYl9taWRpKiB1bWlkaSwgaW50IG51bWJlcikKQEAgLTE1MjIsNyArMTU0Miw3IEBACiAJaWYgKGhvc3RpZi0+ZXh0cmFsZW4gPj0gNyAmJgogCSAgICBtc19oZWFkZXItPmJMZW5ndGggPj0gNyAmJgogCSAgICBtc19oZWFkZXItPmJEZXNjcmlwdG9yVHlwZSA9PSBVU0JfRFRfQ1NfSU5URVJGQUNFICYmCi0JICAgIG1zX2hlYWRlci0+YkRlc2NyaXB0b3JTdWJ0eXBlID09IEhFQURFUikKKwkgICAgbXNfaGVhZGVyLT5iRGVzY3JpcHRvclN1YnR5cGUgPT0gVUFDX0hFQURFUikKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJNSURJU3RyZWFtaW5nIHZlcnNpb24gJTAyeC4lMDJ4XG4iLAogCQkJICAgIG1zX2hlYWRlci0+YmNkTVNDWzFdLCBtc19oZWFkZXItPmJjZE1TQ1swXSk7CiAJZWxzZQpAQCAtMTUzOCw3ICsxNTU4LDcgQEAKIAkJaWYgKGhvc3RlcC0+ZXh0cmFsZW4gPCA0IHx8CiAJCSAgICBtc19lcC0+Ykxlbmd0aCA8IDQgfHwKIAkJICAgIG1zX2VwLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0NTX0VORFBPSU5UIHx8Ci0JCSAgICBtc19lcC0+YkRlc2NyaXB0b3JTdWJ0eXBlICE9IE1TX0dFTkVSQUwpCisJCSAgICBtc19lcC0+YkRlc2NyaXB0b3JTdWJ0eXBlICE9IFVBQ19NU19HRU5FUkFMKQogCQkJY29udGludWU7CiAJCWlmICh1c2JfZW5kcG9pbnRfZGlyX291dChlcCkpIHsKIAkJCWlmIChlbmRwb2ludHNbZXBpZHhdLm91dF9lcCkgewpAQCAtMTc1MCw5ICsxNzcwLDkgQEAKIAkgICAgIGNzX2Rlc2MgPCBob3N0aWYtPmV4dHJhICsgaG9zdGlmLT5leHRyYWxlbiAmJiBjc19kZXNjWzBdID49IDI7CiAJICAgICBjc19kZXNjICs9IGNzX2Rlc2NbMF0pIHsKIAkJaWYgKGNzX2Rlc2NbMV0gPT0gVVNCX0RUX0NTX0lOVEVSRkFDRSkgewotCQkJaWYgKGNzX2Rlc2NbMl0gPT0gTUlESV9JTl9KQUNLKQorCQkJaWYgKGNzX2Rlc2NbMl0gPT0gVUFDX01JRElfSU5fSkFDSykKIAkJCQllbmRwb2ludC0+aW5fY2FibGVzID0gKGVuZHBvaW50LT5pbl9jYWJsZXMgPDwgMSkgfCAxOwotCQkJZWxzZSBpZiAoY3NfZGVzY1syXSA9PSBNSURJX09VVF9KQUNLKQorCQkJZWxzZSBpZiAoY3NfZGVzY1syXSA9PSBVQUNfTUlESV9PVVRfSkFDSykKIAkJCQllbmRwb2ludC0+b3V0X2NhYmxlcyA9IChlbmRwb2ludC0+b3V0X2NhYmxlcyA8PCAxKSB8IDE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXIuYyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCmluZGV4IGM5OTgyMjAuLjhlOGY4NzFiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXIuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvYXVkaW8uaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvaHdkZXAuaD4KQEAgLTY5LDEzICs3MSwxNiBAQAogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSwgMiwgMiwgNiwgNiwgIDIsICAweDZlOTEgfSwgLyogVG9zaGliYSBTQjA1MDAgKi8KIH07CiAKKyNkZWZpbmUgTUFYX0lEX0VMRU1TCTI1NgorCiBzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSB7CiAJc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXA7CiAJdW5zaWduZWQgaW50IGN0cmxpZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdW5zaWduZWQgaW50IGlnbm9yZV9jdGxfZXJyb3I7CiAJc3RydWN0IHVyYiAqdXJiOwotCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICoqaWRfZWxlbXM7IC8qIGFycmF5WzI1Nl0sIGluZGV4ZWQgYnkgdW5pdCBpZCAqLworCS8qIGFycmF5W01BWF9JRF9FTEVNU10sIGluZGV4ZWQgYnkgdW5pdCBpZCAqLworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICoqaWRfZWxlbXM7CiAKIAkvKiBTb3VuZCBCbGFzdGVyIHJlbW90ZSBjb250cm9sIHN0dWZmICovCiAJY29uc3Qgc3RydWN0IHJjX2NvbmZpZyAqcmNfY2ZnOwpAQCAtMTA1LDcgKzExMCw3IEBACiAJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgYnVmbGVuOwotCURFQ0xBUkVfQklUTUFQKHVuaXRiaXRtYXAsIDI1Nik7CisJREVDTEFSRV9CSVRNQVAodW5pdGJpdG1hcCwgTUFYX0lEX0VMRU1TKTsKIAlzdHJ1Y3QgdXNiX2F1ZGlvX3Rlcm0gb3Rlcm07CiAJY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqbWFwOwogCWNvbnN0IHN0cnVjdCB1c2JtaXhfc2VsZWN0b3JfbWFwICpzZWxlY3Rvcl9tYXA7CkBAIC0xMjMsNiArMTI4LDcgQEAKIAlpbnQgY2hhbm5lbHM7CiAJaW50IHZhbF90eXBlOwogCWludCBtaW4sIG1heCwgcmVzOworCWludCBkQm1pbiwgZEJtYXg7CiAJaW50IGNhY2hlZDsKIAlpbnQgY2FjaGVfdmFsW01BWF9DSEFOTkVMU107CiAJdTggaW5pdGlhbGl6ZWQ7CkBAIC0xODYsNiArMTkyLDIxIEBACiAJVVNCX1BST0NfRENSX1JFTEVBU0UgPSA2LAogfTsKIAorLypFLW11IDAyMDIoMDQwNCkgZVh0ZW5zaW9uIFVuaXQoWFUpIGNvbnRyb2wqLworZW51bSB7CisJVVNCX1hVX0NMT0NLX1JBVEUgCQk9IDB4ZTMwMSwKKwlVU0JfWFVfQ0xPQ0tfU09VUkNFCQk9IDB4ZTMwMiwKKwlVU0JfWFVfRElHSVRBTF9JT19TVEFUVVMJPSAweGUzMDMsCisJVVNCX1hVX0RFVklDRV9PUFRJT05TCQk9IDB4ZTMwNCwKKwlVU0JfWFVfRElSRUNUX01PTklUT1JJTkcJPSAweGUzMDUsCisJVVNCX1hVX01FVEVSSU5HCQkJPSAweGUzMDYKK307CitlbnVtIHsKKwlVU0JfWFVfQ0xPQ0tfU09VUkNFX1NFTEVDVE9SID0gMHgwMiwJLyogY2xvY2sgc291cmNlKi8KKwlVU0JfWFVfQ0xPQ0tfUkFURV9TRUxFQ1RPUiA9IDB4MDMsCS8qIGNsb2NrIHJhdGUgKi8KKwlVU0JfWFVfRElHSVRBTF9GT1JNQVRfU0VMRUNUT1IgPSAweDAxLAkvKiB0aGUgc3BkaWYgZm9ybWF0ICovCisJVVNCX1hVX1NPRlRfTElNSVRfU0VMRUNUT1IgPSAweDAzCS8qIHNvZnQgbGltaXRlciAqLworfTsKIAogLyoKICAqIG1hbnVhbCBtYXBwaW5nIG9mIG1peGVyIG5hbWVzCkBAIC0xOTQsNDIgKzIxNSw1MCBAQAogICovCiAjaW5jbHVkZSAidXNibWl4ZXJfbWFwcy5jIgogCi0vKiBnZXQgdGhlIG1hcHBlZCBuYW1lIGlmIHRoZSB1bml0IG1hdGNoZXMgKi8KLXN0YXRpYyBpbnQgY2hlY2tfbWFwcGVkX25hbWUoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgaW50IHVuaXRpZCwgaW50IGNvbnRyb2wsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICoKK2ZpbmRfbWFwKHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIGludCBjb250cm9sKQogewotCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnA7CisJY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqcCA9IHN0YXRlLT5tYXA7CiAKLQlpZiAoISBzdGF0ZS0+bWFwKQotCQlyZXR1cm4gMDsKKwlpZiAoIXApCisJCXJldHVybiBOVUxMOwogCiAJZm9yIChwID0gc3RhdGUtPm1hcDsgcC0+aWQ7IHArKykgewotCQlpZiAocC0+aWQgPT0gdW5pdGlkICYmIHAtPm5hbWUgJiYKLQkJICAgICghIGNvbnRyb2wgfHwgISBwLT5jb250cm9sIHx8IGNvbnRyb2wgPT0gcC0+Y29udHJvbCkpIHsKLQkJCWJ1Zmxlbi0tOwotCQkJcmV0dXJuIHN0cmxjcHkoYnVmLCBwLT5uYW1lLCBidWZsZW4pOwotCQl9CisJCWlmIChwLT5pZCA9PSB1bml0aWQgJiYKKwkJICAgICghY29udHJvbCB8fCAhcC0+Y29udHJvbCB8fCBjb250cm9sID09IHAtPmNvbnRyb2wpKQorCQkJcmV0dXJuIHA7CiAJfQotCXJldHVybiAwOworCXJldHVybiBOVUxMOworfQorCisvKiBnZXQgdGhlIG1hcHBlZCBuYW1lIGlmIHRoZSB1bml0IG1hdGNoZXMgKi8KK3N0YXRpYyBpbnQKK2NoZWNrX21hcHBlZF9uYW1lKGNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnAsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlpZiAoIXAgfHwgIXAtPm5hbWUpCisJCXJldHVybiAwOworCisJYnVmbGVuLS07CisJcmV0dXJuIHN0cmxjcHkoYnVmLCBwLT5uYW1lLCBidWZsZW4pOwogfQogCiAvKiBjaGVjayB3aGV0aGVyIHRoZSBjb250cm9sIHNob3VsZCBiZSBpZ25vcmVkICovCi1zdGF0aWMgaW50IGNoZWNrX2lnbm9yZWRfY3RsKHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIGludCBjb250cm9sKQorc3RhdGljIGlubGluZSBpbnQKK2NoZWNrX2lnbm9yZWRfY3RsKGNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnApCiB7Ci0JY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqcDsKLQotCWlmICghIHN0YXRlLT5tYXApCisJaWYgKCFwIHx8IHAtPm5hbWUgfHwgcC0+ZEIpCiAJCXJldHVybiAwOwotCWZvciAocCA9IHN0YXRlLT5tYXA7IHAtPmlkOyBwKyspIHsKLQkJaWYgKHAtPmlkID09IHVuaXRpZCAmJiAhIHAtPm5hbWUgJiYKLQkJICAgICghIGNvbnRyb2wgfHwgISBwLT5jb250cm9sIHx8IGNvbnRyb2wgPT0gcC0+Y29udHJvbCkpIHsKLQkJCS8qCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiaWdub3JlZCBjb250cm9sICVkOiVkXG4iLAotCQkJICAgICAgIHVuaXRpZCwgY29udHJvbCk7Ci0JCQkqLwotCQkJcmV0dXJuIDE7Ci0JCX0KKwlyZXR1cm4gMTsKK30KKworLyogZEIgbWFwcGluZyAqLworc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX21hcHBlZF9kQihjb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICpwLAorCQkJCSAgIHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsKQoreworCWlmIChwICYmIHAtPmRCKSB7CisJCWN2YWwtPmRCbWluID0gcC0+ZEItPm1pbjsKKwkJY3ZhbC0+ZEJtYXggPSBwLT5kQi0+bWF4OwogCX0KLQlyZXR1cm4gMDsKIH0KIAogLyogZ2V0IHRoZSBtYXBwZWQgc2VsZWN0b3Igc291cmNlIG5hbWUgKi8KQEAgLTI1Nyw3ICsyODYsNyBAQAogCXAgPSBOVUxMOwogCXdoaWxlICgocCA9IHNuZF91c2JfZmluZF9kZXNjKHN0YXRlLT5idWZmZXIsIHN0YXRlLT5idWZsZW4sIHAsCiAJCQkJICAgICAgVVNCX0RUX0NTX0lOVEVSRkFDRSkpICE9IE5VTEwpIHsKLQkJaWYgKHBbMF0gPj0gNCAmJiBwWzJdID49IElOUFVUX1RFUk1JTkFMICYmIHBbMl0gPD0gRVhURU5TSU9OX1VOSVQgJiYgcFszXSA9PSB1bml0KQorCQlpZiAocFswXSA+PSA0ICYmIHBbMl0gPj0gVUFDX0lOUFVUX1RFUk1JTkFMICYmIHBbMl0gPD0gVUFDX0VYVEVOU0lPTl9VTklUX1YxICYmIHBbM10gPT0gdW5pdCkKIAkJCXJldHVybiBwOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTM3OCwxNCArNDA3LDE0IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2N1cl9jdGxfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCB2YWxpZHgsIGludCAqdmFsdWUpCiB7Ci0JcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX0NVUiwgdmFsaWR4LCB2YWx1ZSk7CisJcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9DVVIsIHZhbGlkeCwgdmFsdWUpOwogfQogCiAvKiBjaGFubmVsID0gMDogbWFzdGVyLCAxID0gZmlyc3QgY2hhbm5lbCAqLwogc3RhdGljIGlubGluZSBpbnQgZ2V0X2N1cl9taXhfcmF3KHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLAogCQkJCSAgaW50IGNoYW5uZWwsIGludCAqdmFsdWUpCiB7Ci0JcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLCB2YWx1ZSk7CisJcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IGdldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLApAQCAtNDM5LDE0ICs0NjgsMTQgQEAKIAogc3RhdGljIGludCBzZXRfY3VyX2N0bF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IHZhbGlkeCwgaW50IHZhbHVlKQogewotCXJldHVybiBzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9DVVIsIHZhbGlkeCwgdmFsdWUpOworCXJldHVybiBzZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19TRVRfQ1VSLCB2YWxpZHgsIHZhbHVlKTsKIH0KIAogc3RhdGljIGludCBzZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsCiAJCQkgICAgIGludCBpbmRleCwgaW50IHZhbHVlKQogewogCWludCBlcnI7Ci0JZXJyID0gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsCisJZXJyID0gc2V0X2N0bF92YWx1ZShjdmFsLCBVQUNfU0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLAogCQkJICAgIHZhbHVlKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTQ2NiwyMCArNDk1LDggQEAKIAogCWlmIChzaXplIDwgc2l6ZW9mKHNjYWxlKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JLyogVVNCIGRlc2NyaXB0aW9ucyBjb250YWluIHRoZSBkQiBzY2FsZSBpbiAxLzI1NiBkQiB1bml0Ci0JICogd2hpbGUgQUxTQSBUTFYgY29udGFpbnMgaW4gMS8xMDAgZEIgdW5pdAotCSAqLwotCXNjYWxlWzJdID0gKGNvbnZlcnRfc2lnbmVkX3ZhbHVlKGN2YWwsIGN2YWwtPm1pbikgKiAxMDApIC8gMjU2OwotCXNjYWxlWzNdID0gKGNvbnZlcnRfc2lnbmVkX3ZhbHVlKGN2YWwsIGN2YWwtPm1heCkgKiAxMDApIC8gMjU2OwotCWlmIChzY2FsZVszXSA8PSBzY2FsZVsyXSkgewotCQkvKiBzb21ldGhpbmcgaXMgd3Jvbmc7IGFzc3VtZSBpdCdzIGVpdGhlciBmcm9tL3RvIDBkQiAqLwotCQlpZiAoc2NhbGVbMl0gPCAwKQotCQkJc2NhbGVbM10gPSAwOwotCQllbHNlIGlmIChzY2FsZVsyXSA+IDApCi0JCQlzY2FsZVsyXSA9IDA7Ci0JCWVsc2UgLyogdG90YWxseSBjcmFwLCByZXR1cm4gYW4gZXJyb3IgKi8KLQkJCXJldHVybiAtRUlOVkFMOwotCX0KKwlzY2FsZVsyXSA9IGN2YWwtPmRCbWluOworCXNjYWxlWzNdID0gY3ZhbC0+ZEJtYXg7CiAJaWYgKGNvcHlfdG9fdXNlcihfdGx2LCBzY2FsZSwgc2l6ZW9mKHNjYWxlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwpAQCAtNTg4LDEzICs2MDUsMTMgQEAKIAkJaWYgKHRlcm1fb25seSkKIAkJCXJldHVybiAwOwogCQlzd2l0Y2ggKGl0ZXJtLT50eXBlID4+IDE2KSB7Ci0JCWNhc2UgU0VMRUNUT1JfVU5JVDoKKwkJY2FzZSBVQUNfU0VMRUNUT1JfVU5JVDoKIAkJCXN0cmNweShuYW1lLCAiU2VsZWN0b3IiKTsgcmV0dXJuIDg7Ci0JCWNhc2UgUFJPQ0VTU0lOR19VTklUOgorCQljYXNlIFVBQ19QUk9DRVNTSU5HX1VOSVRfVjE6CiAJCQlzdHJjcHkobmFtZSwgIlByb2Nlc3MgVW5pdCIpOyByZXR1cm4gMTI7Ci0JCWNhc2UgRVhURU5TSU9OX1VOSVQ6CisJCWNhc2UgVUFDX0VYVEVOU0lPTl9VTklUX1YxOgogCQkJc3RyY3B5KG5hbWUsICJFeHQgVW5pdCIpOyByZXR1cm4gODsKLQkJY2FzZSBNSVhFUl9VTklUOgorCQljYXNlIFVBQ19NSVhFUl9VTklUOgogCQkJc3RyY3B5KG5hbWUsICJNaXhlciIpOyByZXR1cm4gNTsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiBzcHJpbnRmKG5hbWUsICJVbml0ICVkIiwgaXRlcm0tPmlkKTsKQEAgLTYzMywyMiArNjUwLDIyIEBACiAJd2hpbGUgKChwMSA9IGZpbmRfYXVkaW9fY29udHJvbF91bml0KHN0YXRlLCBpZCkpICE9IE5VTEwpIHsKIAkJdGVybS0+aWQgPSBpZDsKIAkJc3dpdGNoIChwMVsyXSkgewotCQljYXNlIElOUFVUX1RFUk1JTkFMOgorCQljYXNlIFVBQ19JTlBVVF9URVJNSU5BTDoKIAkJCXRlcm0tPnR5cGUgPSBjb21iaW5lX3dvcmQocDEgKyA0KTsKIAkJCXRlcm0tPmNoYW5uZWxzID0gcDFbN107CiAJCQl0ZXJtLT5jaGNvbmZpZyA9IGNvbWJpbmVfd29yZChwMSArIDgpOwogCQkJdGVybS0+bmFtZSA9IHAxWzExXTsKIAkJCXJldHVybiAwOwotCQljYXNlIEZFQVRVUkVfVU5JVDoKKwkJY2FzZSBVQUNfRkVBVFVSRV9VTklUOgogCQkJaWQgPSBwMVs0XTsKIAkJCWJyZWFrOyAvKiBjb250aW51ZSB0byBwYXJzZSAqLwotCQljYXNlIE1JWEVSX1VOSVQ6CisJCWNhc2UgVUFDX01JWEVSX1VOSVQ6CiAJCQl0ZXJtLT50eXBlID0gcDFbMl0gPDwgMTY7IC8qIHZpcnR1YWwgdHlwZSAqLwogCQkJdGVybS0+Y2hhbm5lbHMgPSBwMVs1ICsgcDFbNF1dOwogCQkJdGVybS0+Y2hjb25maWcgPSBjb21iaW5lX3dvcmQocDEgKyA2ICsgcDFbNF0pOwogCQkJdGVybS0+bmFtZSA9IHAxW3AxWzBdIC0gMV07CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSBTRUxFQ1RPUl9VTklUOgorCQljYXNlIFVBQ19TRUxFQ1RPUl9VTklUOgogCQkJLyogY2FsbCByZWN1cnNpdmVseSB0byByZXRyaWV2ZSB0aGUgY2hhbm5lbCBpbmZvICovCiAJCQlpZiAoY2hlY2tfaW5wdXRfdGVybShzdGF0ZSwgcDFbNV0sIHRlcm0pIDwgMCkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTY1Niw4ICs2NzMsOCBAQAogCQkJdGVybS0+aWQgPSBpZDsKIAkJCXRlcm0tPm5hbWUgPSBwMVs5ICsgcDFbMF0gLSAxXTsKIAkJCXJldHVybiAwOwotCQljYXNlIFBST0NFU1NJTkdfVU5JVDoKLQkJY2FzZSBFWFRFTlNJT05fVU5JVDoKKwkJY2FzZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxOgorCQljYXNlIFVBQ19FWFRFTlNJT05fVU5JVF9WMToKIAkJCWlmIChwMVs2XSA9PSAxKSB7CiAJCQkJaWQgPSBwMVs3XTsKIAkJCQlicmVhazsgLyogY29udGludWUgdG8gcGFyc2UgKi8KQEAgLTcyMCw2ICs3MzcsNyBAQAogCWN2YWwtPm1pbiA9IGRlZmF1bHRfbWluOwogCWN2YWwtPm1heCA9IGN2YWwtPm1pbiArIDE7CiAJY3ZhbC0+cmVzID0gMTsKKwljdmFsLT5kQm1pbiA9IGN2YWwtPmRCbWF4ID0gMDsKIAogCWlmIChjdmFsLT52YWxfdHlwZSA9PSBVU0JfTUlYRVJfQk9PTEVBTiB8fAogCSAgICBjdmFsLT52YWxfdHlwZSA9PSBVU0JfTUlYRVJfSU5WX0JPT0xFQU4pIHsKQEAgLTczNCwyMyArNzUyLDIzIEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJfQotCQlpZiAoZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfTUFYLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1heCkgPCAwIHx8Ci0JCSAgICBnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9NSU4sIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+bWluKSA8IDApIHsKKwkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9NQVgsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+bWF4KSA8IDAgfHwKKwkJICAgIGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9NSU4sIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+bWluKSA8IDApIHsKIAkJCXNuZF9wcmludGQoS0VSTl9FUlIgIiVkOiVkOiBjYW5ub3QgZ2V0IG1pbi9tYXggdmFsdWVzIGZvciBjb250cm9sICVkIChpZCAlZClcbiIsCiAJCQkJICAgY3ZhbC0+aWQsIGN2YWwtPm1peGVyLT5jdHJsaWYsIGN2YWwtPmNvbnRyb2wsIGN2YWwtPmlkKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+cmVzKSA8IDApIHsKKwkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+cmVzKSA8IDApIHsKIAkJCWN2YWwtPnJlcyA9IDE7CiAJCX0gZWxzZSB7CiAJCQlpbnQgbGFzdF92YWxpZF9yZXMgPSBjdmFsLT5yZXM7CiAKIAkJCXdoaWxlIChjdmFsLT5yZXMgPiAxKSB7Ci0JCQkJaWYgKHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX1JFUywgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBtaW5jaG4sIGN2YWwtPnJlcyAvIDIpIDwgMCkKKwkJCQlpZiAoc2V0X2N0bF92YWx1ZShjdmFsLCBVQUNfU0VUX1JFUywgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBtaW5jaG4sIGN2YWwtPnJlcyAvIDIpIDwgMCkKIAkJCQkJYnJlYWs7CiAJCQkJY3ZhbC0+cmVzIC89IDI7CiAJCQl9Ci0JCQlpZiAoZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfUkVTLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPnJlcykgPCAwKQorCQkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+cmVzKSA8IDApCiAJCQkJY3ZhbC0+cmVzID0gbGFzdF92YWxpZF9yZXM7CiAJCX0KIAkJaWYgKGN2YWwtPnJlcyA9PSAwKQpAQCAtNzg3LDYgKzgwNSwyNCBAQAogCiAJCWN2YWwtPmluaXRpYWxpemVkID0gMTsKIAl9CisKKwkvKiBVU0IgZGVzY3JpcHRpb25zIGNvbnRhaW4gdGhlIGRCIHNjYWxlIGluIDEvMjU2IGRCIHVuaXQKKwkgKiB3aGlsZSBBTFNBIFRMViBjb250YWlucyBpbiAxLzEwMCBkQiB1bml0CisJICovCisJY3ZhbC0+ZEJtaW4gPSAoY29udmVydF9zaWduZWRfdmFsdWUoY3ZhbCwgY3ZhbC0+bWluKSAqIDEwMCkgLyAyNTY7CisJY3ZhbC0+ZEJtYXggPSAoY29udmVydF9zaWduZWRfdmFsdWUoY3ZhbCwgY3ZhbC0+bWF4KSAqIDEwMCkgLyAyNTY7CisJaWYgKGN2YWwtPmRCbWluID4gY3ZhbC0+ZEJtYXgpIHsKKwkJLyogc29tZXRoaW5nIGlzIHdyb25nOyBhc3N1bWUgaXQncyBlaXRoZXIgZnJvbS90byAwZEIgKi8KKwkJaWYgKGN2YWwtPmRCbWluIDwgMCkKKwkJCWN2YWwtPmRCbWF4ID0gMDsKKwkJZWxzZSBpZiAoY3ZhbC0+ZEJtaW4gPiAwKQorCQkJY3ZhbC0+ZEJtaW4gPSAwOworCQlpZiAoY3ZhbC0+ZEJtaW4gPiBjdmFsLT5kQm1heCkgeworCQkJLyogdG90YWxseSBjcmFwLCByZXR1cm4gYW4gZXJyb3IgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxMiw2ICs5NDgsNyBAQAogCWludCBuYW1laWQgPSBkZXNjW2Rlc2NbMF0gLSAxXTsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwogCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsOworCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKm1hcDsKIAogCWNvbnRyb2wrKzsgLyogY2hhbmdlIGZyb20gemVyby1iYXNlZCB0byAxLWJhc2VkIHZhbHVlICovCiAKQEAgLTkyMCw3ICs5NTcsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGNoZWNrX2lnbm9yZWRfY3RsKHN0YXRlLCB1bml0aWQsIGNvbnRyb2wpKQorCW1hcCA9IGZpbmRfbWFwKHN0YXRlLCB1bml0aWQsIGNvbnRyb2wpOworCWlmIChjaGVja19pZ25vcmVkX2N0bChtYXApKQogCQlyZXR1cm47CiAKIAljdmFsID0ga3phbGxvYyhzaXplb2YoKmN2YWwpLCBHRlBfS0VSTkVMKTsKQEAgLTk1NCwxMCArOTkyLDExIEBACiAJfQogCWtjdGwtPnByaXZhdGVfZnJlZSA9IHVzYl9taXhlcl9lbGVtX2ZyZWU7CiAKLQlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShzdGF0ZSwgdW5pdGlkLCBjb250cm9sLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCWxlbiA9IGNoZWNrX21hcHBlZF9uYW1lKG1hcCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAltYXBwZWRfbmFtZSA9IGxlbiAhPSAwOwogCWlmICghIGxlbiAmJiBuYW1laWQpCi0JCWxlbiA9IHNuZF91c2JfY29weV9zdHJpbmdfZGVzYyhzdGF0ZSwgbmFtZWlkLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQlsZW4gPSBzbmRfdXNiX2NvcHlfc3RyaW5nX2Rlc2Moc3RhdGUsIG5hbWVpZCwKKwkJCQlrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCiAJc3dpdGNoIChjb250cm9sKSB7CiAJY2FzZSBVU0JfRkVBVFVSRV9NVVRFOgpAQCAtOTk1LDYgKzEwMzQsNyBAQAogCQkJa2N0bC0+dmRbMF0uYWNjZXNzIHw9IAogCQkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8CiAJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSzsKKwkJCWNoZWNrX21hcHBlZF9kQihtYXAsIGN2YWwpOwogCQl9CiAJCWJyZWFrOwogCkBAIC0xMDQ4LDI5ICsxMDg4LDMwIEBACiAgKgogICogbW9zdCBvZiBjb250cm9sbHMgYXJlIGRlZmluZWQgaGVyZS4KICAqLwotc3RhdGljIGludCBwYXJzZV9hdWRpb19mZWF0dXJlX3VuaXQoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgaW50IHVuaXRpZCwgdW5zaWduZWQgY2hhciAqZnRyKQorc3RhdGljIGludCBwYXJzZV9hdWRpb19mZWF0dXJlX3VuaXQoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgaW50IHVuaXRpZCwgdm9pZCAqX2Z0cikKIHsKIAlpbnQgY2hhbm5lbHMsIGksIGo7CiAJc3RydWN0IHVzYl9hdWRpb190ZXJtIGl0ZXJtOwogCXVuc2lnbmVkIGludCBtYXN0ZXJfYml0cywgZmlyc3RfY2hfYml0czsKIAlpbnQgZXJyLCBjc2l6ZTsKKwlzdHJ1Y3QgdWFjX2ZlYXR1cmVfdW5pdF9kZXNjcmlwdG9yICpmdHIgPSBfZnRyOwogCi0JaWYgKGZ0clswXSA8IDcgfHwgISAoY3NpemUgPSBmdHJbNV0pIHx8IGZ0clswXSA8IDcgKyBjc2l6ZSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogaW52YWxpZCBGRUFUVVJFX1VOSVQgZGVzY3JpcHRvclxuIiwgdW5pdGlkKTsKKwlpZiAoZnRyLT5iTGVuZ3RoIDwgNyB8fCAhIChjc2l6ZSA9IGZ0ci0+YkNvbnRyb2xTaXplKSB8fCBmdHItPmJMZW5ndGggPCA3ICsgY3NpemUpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgVUFDX0ZFQVRVUkVfVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBwYXJzZSB0aGUgc291cmNlIHVuaXQgKi8KLQlpZiAoKGVyciA9IHBhcnNlX2F1ZGlvX3VuaXQoc3RhdGUsIGZ0cls0XSkpIDwgMCkKKwlpZiAoKGVyciA9IHBhcnNlX2F1ZGlvX3VuaXQoc3RhdGUsIGZ0ci0+YlNvdXJjZUlEKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJLyogZGV0ZXJtaW5lIHRoZSBpbnB1dCBzb3VyY2UgdHlwZSBhbmQgbmFtZSAqLwotCWlmIChjaGVja19pbnB1dF90ZXJtKHN0YXRlLCBmdHJbNF0sICZpdGVybSkgPCAwKQorCWlmIChjaGVja19pbnB1dF90ZXJtKHN0YXRlLCBmdHItPmJTb3VyY2VJRCwgJml0ZXJtKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY2hhbm5lbHMgPSAoZnRyWzBdIC0gNykgLyBjc2l6ZSAtIDE7CisJY2hhbm5lbHMgPSAoZnRyLT5iTGVuZ3RoIC0gNykgLyBjc2l6ZSAtIDE7CiAKLQltYXN0ZXJfYml0cyA9IHNuZF91c2JfY29tYmluZV9ieXRlcyhmdHIgKyA2LCBjc2l6ZSk7CisJbWFzdGVyX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyLT5jb250cm9scywgY3NpemUpOwogCS8qIG1hc3RlciBjb25maWd1cmF0aW9uIHF1aXJrcyAqLwogCXN3aXRjaCAoc3RhdGUtPmNoaXAtPnVzYl9pZCkgewogCWNhc2UgVVNCX0lEKDB4MDhiYiwgMHgyNzAyKToKQEAgLTEwODEsMjEgKzExMjIsMjEgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChjaGFubmVscyA+IDApCi0JCWZpcnN0X2NoX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyICsgNiArIGNzaXplLCBjc2l6ZSk7CisJCWZpcnN0X2NoX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyLT5jb250cm9scyArIGNzaXplLCBjc2l6ZSk7CiAJZWxzZQogCQlmaXJzdF9jaF9iaXRzID0gMDsKIAkvKiBjaGVjayBhbGwgY29udHJvbCB0eXBlcyAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBjaF9iaXRzID0gMDsKIAkJZm9yIChqID0gMDsgaiA8IGNoYW5uZWxzOyBqKyspIHsKLQkJCXVuc2lnbmVkIGludCBtYXNrID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ciArIDYgKyBjc2l6ZSAqIChqKzEpLCBjc2l6ZSk7CisJCQl1bnNpZ25lZCBpbnQgbWFzayA9IHNuZF91c2JfY29tYmluZV9ieXRlcyhmdHItPmNvbnRyb2xzICsgY3NpemUgKiAoaisxKSwgY3NpemUpOwogCQkJaWYgKG1hc2sgJiAoMSA8PCBpKSkKIAkJCQljaF9iaXRzIHw9ICgxIDw8IGopOwogCQl9CiAJCWlmIChjaF9iaXRzICYgMSkgLyogdGhlIGZpcnN0IGNoYW5uZWwgbXVzdCBiZSBzZXQgKGZvciBlYXNlIG9mIHByb2dyYW1taW5nKSAqLwotCQkJYnVpbGRfZmVhdHVyZV9jdGwoc3RhdGUsIGZ0ciwgY2hfYml0cywgaSwgJml0ZXJtLCB1bml0aWQpOworCQkJYnVpbGRfZmVhdHVyZV9jdGwoc3RhdGUsIF9mdHIsIGNoX2JpdHMsIGksICZpdGVybSwgdW5pdGlkKTsKIAkJaWYgKG1hc3Rlcl9iaXRzICYgKDEgPDwgaSkpCi0JCQlidWlsZF9mZWF0dXJlX2N0bChzdGF0ZSwgZnRyLCAwLCBpLCAmaXRlcm0sIHVuaXRpZCk7CisJCQlidWlsZF9mZWF0dXJlX2N0bChzdGF0ZSwgX2Z0ciwgMCwgaSwgJml0ZXJtLCB1bml0aWQpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTEyMiw4ICsxMTYzLDEwIEBACiAJdW5zaWduZWQgaW50IG51bV9vdXRzID0gZGVzY1s1ICsgaW5wdXRfcGluc107CiAJdW5zaWduZWQgaW50IGksIGxlbjsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKm1hcDsKIAotCWlmIChjaGVja19pZ25vcmVkX2N0bChzdGF0ZSwgdW5pdGlkLCAwKSkKKwltYXAgPSBmaW5kX21hcChzdGF0ZSwgdW5pdGlkLCAwKTsKKwlpZiAoY2hlY2tfaWdub3JlZF9jdGwobWFwKSkKIAkJcmV0dXJuOwogCiAJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTUyLDcgKzExOTUsNyBAQAogCX0KIAlrY3RsLT5wcml2YXRlX2ZyZWUgPSB1c2JfbWl4ZXJfZWxlbV9mcmVlOwogCi0JbGVuID0gY2hlY2tfbWFwcGVkX25hbWUoc3RhdGUsIHVuaXRpZCwgMCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShtYXAsIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CiAJaWYgKCEgbGVuKQogCQlsZW4gPSBnZXRfdGVybV9uYW1lKHN0YXRlLCBpdGVybSwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpLCAwKTsKIAlpZiAoISBsZW4pCkBAIC0xMzMwLDcgKzEzNzMsMzIgQEAKIAl7IFVTQl9QUk9DX0RDUiwgIkRDUiIsIGRjcl9wcm9jX2luZm8gfSwKIAl7IDAgfSwKIH07Ci0KKy8qCisgKiBwcmVkZWZpbmVkIGRhdGEgZm9yIGV4dGVuc2lvbiB1bml0cworICovCitzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gY2xvY2tfcmF0ZV94dV9pbmZvW10gPSB7CisgICAgICAgeyBVU0JfWFVfQ0xPQ0tfUkFURV9TRUxFQ1RPUiwgIlNlbGVjdG9yIiwgVVNCX01JWEVSX1U4LCAwIH0sCisgICAgICAgeyAwIH0KK307CitzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gY2xvY2tfc291cmNlX3h1X2luZm9bXSA9IHsKKwl7IFVTQl9YVV9DTE9DS19TT1VSQ0VfU0VMRUNUT1IsICJFeHRlcm5hbCIsIFVTQl9NSVhFUl9CT09MRUFOIH0sCisJeyAwIH0KK307CitzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gc3BkaWZfZm9ybWF0X3h1X2luZm9bXSA9IHsKKwl7IFVTQl9YVV9ESUdJVEFMX0ZPUk1BVF9TRUxFQ1RPUiwgIlNQRElGL0FDMyIsIFVTQl9NSVhFUl9CT09MRUFOIH0sCisJeyAwIH0KK307CitzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gc29mdF9saW1pdF94dV9pbmZvW10gPSB7CisJeyBVU0JfWFVfU09GVF9MSU1JVF9TRUxFQ1RPUiwgIiAiLCBVU0JfTUlYRVJfQk9PTEVBTiB9LAorCXsgMCB9Cit9Oworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF9pbmZvIGV4dHVuaXRzW10gPSB7CisJeyBVU0JfWFVfQ0xPQ0tfUkFURSwgIkNsb2NrIHJhdGUiLCBjbG9ja19yYXRlX3h1X2luZm8gfSwKKwl7IFVTQl9YVV9DTE9DS19TT1VSQ0UsICJEaWdpdGFsSW4gQ0xLIHNvdXJjZSIsIGNsb2NrX3NvdXJjZV94dV9pbmZvIH0sCisJeyBVU0JfWFVfRElHSVRBTF9JT19TVEFUVVMsICJEaWdpdGFsT3V0IGZvcm1hdDoiLCBzcGRpZl9mb3JtYXRfeHVfaW5mbyB9LAorCXsgVVNCX1hVX0RFVklDRV9PUFRJT05TLCAiQW5hbG9ndWVJbiBTb2Z0IExpbWl0Iiwgc29mdF9saW1pdF94dV9pbmZvIH0sCisJeyAwIH0KK307CiAvKgogICogYnVpbGQgYSBwcm9jZXNzaW5nL2V4dGVuc2lvbiB1bml0CiAgKi8KQEAgLTEzNDIsNiArMTQxMCw3IEBACiAJaW50IGksIGVyciwgbmFtZWlkLCB0eXBlLCBsZW47CiAJc3RydWN0IHByb2N1bml0X2luZm8gKmluZm87CiAJc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gKnZhbGluZm87CisJY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqbWFwOwogCXN0YXRpYyBzdHJ1Y3QgcHJvY3VuaXRfdmFsdWVfaW5mbyBkZWZhdWx0X3ZhbHVlX2luZm9bXSA9IHsKIAkJeyAweDAxLCAiU3dpdGNoIiwgVVNCX01JWEVSX0JPT0xFQU4gfSwKIAkJeyAwIH0KQEAgLTEzNzEsNyArMTQ0MCw4IEBACiAJCS8qIEZJWE1FOiBiaXRtYXAgbWlnaHQgYmUgbG9uZ2VyIHRoYW4gOGJpdCAqLwogCQlpZiAoISAoZHNjWzEyICsgbnVtX2luc10gJiAoMSA8PCAodmFsaW5mby0+Y29udHJvbCAtIDEpKSkpCiAJCQljb250aW51ZTsKLQkJaWYgKGNoZWNrX2lnbm9yZWRfY3RsKHN0YXRlLCB1bml0aWQsIHZhbGluZm8tPmNvbnRyb2wpKQorCQltYXAgPSBmaW5kX21hcChzdGF0ZSwgdW5pdGlkLCB2YWxpbmZvLT5jb250cm9sKTsKKwkJaWYgKGNoZWNrX2lnbm9yZWRfY3RsKG1hcCkpCiAJCQljb250aW51ZTsKIAkJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghIGN2YWwpIHsKQEAgLTEzOTEsOCArMTQ2MSwxOCBAQAogCQkJY3ZhbC0+bWF4ID0gZHNjWzE1XTsKIAkJCWN2YWwtPnJlcyA9IDE7CiAJCQljdmFsLT5pbml0aWFsaXplZCA9IDE7Ci0JCX0gZWxzZQotCQkJZ2V0X21pbl9tYXgoY3ZhbCwgdmFsaW5mby0+bWluX3ZhbHVlKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0eXBlID09IFVTQl9YVV9DTE9DS19SQVRFKSB7CisJCQkJLyogRS1NdSBVU0IgMDQwNC8wMjAyL1RyYWNrZXJQcmUKKwkJCQkgKiBzYW1wbGVyYXRlIGNvbnRyb2wgcXVpcmsKKwkJCQkgKi8KKwkJCQljdmFsLT5taW4gPSAwOworCQkJCWN2YWwtPm1heCA9IDU7CisJCQkJY3ZhbC0+cmVzID0gMTsKKwkJCQljdmFsLT5pbml0aWFsaXplZCA9IDE7CisJCQl9IGVsc2UKKwkJCQlnZXRfbWluX21heChjdmFsLCB2YWxpbmZvLT5taW5fdmFsdWUpOworCQl9CiAKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MSgmbWl4ZXJfcHJvY3VuaXRfY3RsLCBjdmFsKTsKIAkJaWYgKCEga2N0bCkgewpAQCAtMTQwMiw4ICsxNDgyLDkgQEAKIAkJfQogCQlrY3RsLT5wcml2YXRlX2ZyZWUgPSB1c2JfbWl4ZXJfZWxlbV9mcmVlOwogCi0JCWlmIChjaGVja19tYXBwZWRfbmFtZShzdGF0ZSwgdW5pdGlkLCBjdmFsLT5jb250cm9sLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpKQotCQkJOworCQlpZiAoY2hlY2tfbWFwcGVkX25hbWUobWFwLCBrY3RsLT5pZC5uYW1lLAorCQkJCQkJc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKSkKKwkJCS8qIG5vdGhpbmcgKi8gOwogCQllbHNlIGlmIChpbmZvLT5uYW1lKQogCQkJc3RybGNweShrY3RsLT5pZC5uYW1lLCBpbmZvLT5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCQllbHNlIHsKQEAgLTE0MzMsNyArMTUxNCw3IEBACiAKIHN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZXh0ZW5zaW9uX3VuaXQoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgaW50IHVuaXRpZCwgdW5zaWduZWQgY2hhciAqZGVzYykKIHsKLQlyZXR1cm4gYnVpbGRfYXVkaW9fcHJvY3VuaXQoc3RhdGUsIHVuaXRpZCwgZGVzYywgTlVMTCwgIkV4dGVuc2lvbiBVbml0Iik7CisJcmV0dXJuIGJ1aWxkX2F1ZGlvX3Byb2N1bml0KHN0YXRlLCB1bml0aWQsIGRlc2MsIGV4dHVuaXRzLCAiRXh0ZW5zaW9uIFVuaXQiKTsKIH0KIAogCkBAIC0xNTQyLDYgKzE2MjMsNyBAQAogCWludCBlcnI7CiAJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwljb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICptYXA7CiAJY2hhciAqKm5hbWVsaXN0OwogCiAJaWYgKCEgbnVtX2lucyB8fCBkZXNjWzBdIDwgNSArIG51bV9pbnMpIHsKQEAgLTE1NTcsNyArMTYzOSw4IEBACiAJaWYgKG51bV9pbnMgPT0gMSkgLyogb25seSBvbmUgPyBub25zZW5zZSEgKi8KIAkJcmV0dXJuIDA7CiAKLQlpZiAoY2hlY2tfaWdub3JlZF9jdGwoc3RhdGUsIHVuaXRpZCwgMCkpCisJbWFwID0gZmluZF9tYXAoc3RhdGUsIHVuaXRpZCwgMCk7CisJaWYgKGNoZWNrX2lnbm9yZWRfY3RsKG1hcCkpCiAJCXJldHVybiAwOwogCiAJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CkBAIC0xNjEyLDcgKzE2OTUsNyBAQAogCWtjdGwtPnByaXZhdGVfZnJlZSA9IHVzYl9taXhlcl9zZWxlY3Rvcl9lbGVtX2ZyZWU7CiAKIAluYW1laWQgPSBkZXNjW2Rlc2NbMF0gLSAxXTsKLQlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShzdGF0ZSwgdW5pdGlkLCAwLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCWxlbiA9IGNoZWNrX21hcHBlZF9uYW1lKG1hcCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAlpZiAobGVuKQogCQk7CiAJZWxzZSBpZiAobmFtZWlkKQpAQCAtMTY1NiwxNyArMTczOSwxNyBAQAogCX0KIAogCXN3aXRjaCAocDFbMl0pIHsKLQljYXNlIElOUFVUX1RFUk1JTkFMOgorCWNhc2UgVUFDX0lOUFVUX1RFUk1JTkFMOgogCQlyZXR1cm4gMDsgLyogTk9QICovCi0JY2FzZSBNSVhFUl9VTklUOgorCWNhc2UgVUFDX01JWEVSX1VOSVQ6CiAJCXJldHVybiBwYXJzZV9hdWRpb19taXhlcl91bml0KHN0YXRlLCB1bml0aWQsIHAxKTsKLQljYXNlIFNFTEVDVE9SX1VOSVQ6CisJY2FzZSBVQUNfU0VMRUNUT1JfVU5JVDoKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX3NlbGVjdG9yX3VuaXQoc3RhdGUsIHVuaXRpZCwgcDEpOwotCWNhc2UgRkVBVFVSRV9VTklUOgorCWNhc2UgVUFDX0ZFQVRVUkVfVU5JVDoKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX2ZlYXR1cmVfdW5pdChzdGF0ZSwgdW5pdGlkLCBwMSk7Ci0JY2FzZSBQUk9DRVNTSU5HX1VOSVQ6CisJY2FzZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxOgogCQlyZXR1cm4gcGFyc2VfYXVkaW9fcHJvY2Vzc2luZ191bml0KHN0YXRlLCB1bml0aWQsIHAxKTsKLQljYXNlIEVYVEVOU0lPTl9VTklUOgorCWNhc2UgVUFDX0VYVEVOU0lPTl9VTklUX1YxOgogCQlyZXR1cm4gcGFyc2VfYXVkaW9fZXh0ZW5zaW9uX3VuaXQoc3RhdGUsIHVuaXRpZCwgcDEpOwogCWRlZmF1bHQ6CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiB1bmV4cGVjdGVkIHR5cGUgMHglMDJ4XG4iLCB1bml0aWQsIHAxWzJdKTsKQEAgLTE2OTYsMTEgKzE3NzksMTEgQEAKIC8qCiAgKiBjcmVhdGUgbWl4ZXIgY29udHJvbHMKICAqCi0gKiB3YWxrIHRocm91Z2ggYWxsIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycyB0byBzZWFyY2ggZm9yIG1peGVycworICogd2FsayB0aHJvdWdoIGFsbCBVQUNfT1VUUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3JzIHRvIHNlYXJjaCBmb3IgbWl4ZXJzCiAgKi8KIHN0YXRpYyBpbnQgc25kX3VzYl9taXhlcl9jb250cm9scyhzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCiB7Ci0JdW5zaWduZWQgY2hhciAqZGVzYzsKKwlzdHJ1Y3QgdWFjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yX3YxICpkZXNjOwogCXN0cnVjdCBtaXhlcl9idWlsZCBzdGF0ZTsKIAlpbnQgZXJyOwogCWNvbnN0IHN0cnVjdCB1c2JtaXhfY3RsX21hcCAqbWFwOwpAQCAtMTcyNCwxNCArMTgwNywxNCBAQAogCX0KIAogCWRlc2MgPSBOVUxMOwotCXdoaWxlICgoZGVzYyA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RpZi0+ZXh0cmEsIGhvc3RpZi0+ZXh0cmFsZW4sIGRlc2MsIE9VVFBVVF9URVJNSU5BTCkpICE9IE5VTEwpIHsKLQkJaWYgKGRlc2NbMF0gPCA5KQorCXdoaWxlICgoZGVzYyA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RpZi0+ZXh0cmEsIGhvc3RpZi0+ZXh0cmFsZW4sIGRlc2MsIFVBQ19PVVRQVVRfVEVSTUlOQUwpKSAhPSBOVUxMKSB7CisJCWlmIChkZXNjLT5iTGVuZ3RoIDwgOSkKIAkJCWNvbnRpbnVlOyAvKiBpbnZhbGlkIGRlc2NyaXB0b3I/ICovCi0JCXNldF9iaXQoZGVzY1szXSwgc3RhdGUudW5pdGJpdG1hcCk7ICAvKiBtYXJrIHRlcm1pbmFsIElEIGFzIHZpc2l0ZWQgKi8KLQkJc3RhdGUub3Rlcm0uaWQgPSBkZXNjWzNdOwotCQlzdGF0ZS5vdGVybS50eXBlID0gY29tYmluZV93b3JkKCZkZXNjWzRdKTsKLQkJc3RhdGUub3Rlcm0ubmFtZSA9IGRlc2NbOF07Ci0JCWVyciA9IHBhcnNlX2F1ZGlvX3VuaXQoJnN0YXRlLCBkZXNjWzddKTsKKwkJc2V0X2JpdChkZXNjLT5iVGVybWluYWxJRCwgc3RhdGUudW5pdGJpdG1hcCk7ICAvKiBtYXJrIHRlcm1pbmFsIElEIGFzIHZpc2l0ZWQgKi8KKwkJc3RhdGUub3Rlcm0uaWQgPSBkZXNjLT5iVGVybWluYWxJRDsKKwkJc3RhdGUub3Rlcm0udHlwZSA9IGxlMTZfdG9fY3B1KGRlc2MtPndUZXJtaW5hbFR5cGUpOworCQlzdGF0ZS5vdGVybS5uYW1lID0gZGVzYy0+aVRlcm1pbmFsOworCQllcnIgPSBwYXJzZV9hdWRpb191bml0KCZzdGF0ZSwgZGVzYy0+YlNvdXJjZUlEKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTE3NDgsNiArMTgzMSw0NiBAQAogCQkJICAgICAgIGluZm8tPmVsZW1faWQpOwogfQogCitzdGF0aWMgdm9pZCBzbmRfdXNiX21peGVyX2R1bXBfY3ZhbChzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCisJCQkJICAgIGludCB1bml0aWQsCisJCQkJICAgIHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsKQoreworCXN0YXRpYyBjaGFyICp2YWxfdHlwZXNbXSA9IHsiQk9PTEVBTiIsICJJTlZfQk9PTEVBTiIsCisJCQkJICAgICJTOCIsICJVOCIsICJTMTYiLCAiVTE2In07CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBVbml0OiAlaVxuIiwgdW5pdGlkKTsKKwlpZiAoY3ZhbC0+ZWxlbV9pZCkKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIENvbnRyb2w6IG5hbWU9XCIlc1wiLCBpbmRleD0laVxuIiwKKwkJCQljdmFsLT5lbGVtX2lkLT5uYW1lLCBjdmFsLT5lbGVtX2lkLT5pbmRleCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEluZm86IGlkPSVpLCBjb250cm9sPSVpLCBjbWFzaz0weCV4LCAiCisJCQkgICAgImNoYW5uZWxzPSVpLCB0eXBlPVwiJXNcIlxuIiwgY3ZhbC0+aWQsCisJCQkgICAgY3ZhbC0+Y29udHJvbCwgY3ZhbC0+Y21hc2ssIGN2YWwtPmNoYW5uZWxzLAorCQkJICAgIHZhbF90eXBlc1tjdmFsLT52YWxfdHlwZV0pOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBWb2x1bWU6IG1pbj0laSwgbWF4PSVpLCBkQm1pbj0laSwgZEJtYXg9JWlcbiIsCisJCQkgICAgY3ZhbC0+bWluLCBjdmFsLT5tYXgsIGN2YWwtPmRCbWluLCBjdmFsLT5kQm1heCk7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF91c2JfbWl4ZXJfcHJvY19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkJICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsOworCWludCB1bml0aWQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1peGVyLCAmY2hpcC0+bWl4ZXJfbGlzdCwgbGlzdCkgeworCQlzbmRfaXByaW50ZihidWZmZXIsCisJCQkiVVNCIE1peGVyOiB1c2JfaWQ9MHglMDh4LCBjdHJsaWY9JWksIGN0bGVycj0laVxuIiwKKwkJCQljaGlwLT51c2JfaWQsIG1peGVyLT5jdHJsaWYsCisJCQkJbWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpOworCQlzbmRfaXByaW50ZihidWZmZXIsICJDYXJkOiAlc1xuIiwgY2hpcC0+Y2FyZC0+bG9uZ25hbWUpOworCQlmb3IgKHVuaXRpZCA9IDA7IHVuaXRpZCA8IE1BWF9JRF9FTEVNUzsgdW5pdGlkKyspIHsKKwkJCWZvciAoY3ZhbCA9IG1peGVyLT5pZF9lbGVtc1t1bml0aWRdOyBjdmFsOworCQkJCQkJY3ZhbCA9IGN2YWwtPm5leHRfaWRfZWxlbSkKKwkJCQlzbmRfdXNiX21peGVyX2R1bXBfY3ZhbChidWZmZXIsIHVuaXRpZCwgY3ZhbCk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIHNuZF91c2JfbWl4ZXJfbWVtb3J5X2NoYW5nZShzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIsCiAJCQkJCWludCB1bml0aWQpCiB7CkBAIC0xOTI0LDcgKzIwNDcsNyBAQAogCX0KIAltaXhlci0+cmNfc2V0dXBfcGFja2V0LT5iUmVxdWVzdFR5cGUgPQogCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFOwotCW1peGVyLT5yY19zZXR1cF9wYWNrZXQtPmJSZXF1ZXN0ID0gR0VUX01FTTsKKwltaXhlci0+cmNfc2V0dXBfcGFja2V0LT5iUmVxdWVzdCA9IFVBQ19HRVRfTUVNOwogCW1peGVyLT5yY19zZXR1cF9wYWNrZXQtPndWYWx1ZSA9IGNwdV90b19sZTE2KDApOwogCW1peGVyLT5yY19zZXR1cF9wYWNrZXQtPndJbmRleCA9IGNwdV90b19sZTE2KDApOwogCW1peGVyLT5yY19zZXR1cF9wYWNrZXQtPndMZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOwpAQCAtMjA0Nyw3ICsyMTcwLDcgQEAKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiJXM6ICIsIGphY2tzW2ldLm5hbWUpOwogCQllcnIgPSBzbmRfdXNiX2N0bF9tc2cobWl4ZXItPmNoaXAtPmRldiwKIAkJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUobWl4ZXItPmNoaXAtPmRldiwgMCksCi0JCQkJICAgICAgR0VUX01FTSwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwKKwkJCQkgICAgICBVQUNfR0VUX01FTSwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwKIAkJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAwLAogCQkJCSAgICAgIGphY2tzW2ldLnVuaXRpZCA8PCA4LCBidWYsIDMsIDEwMCk7CiAJCWlmIChlcnIgPT0gMyAmJiAoYnVmWzBdID09IDMgfHwgYnVmWzBdID09IDYpKQpAQCAtMjEwOSw2ICsyMjMyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgc25kX2VtdXVzYl9zZXRfc2FtcGxlcmF0ZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHNhbXBsZXJhdGVfaWQpCit7CisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsOworCWludCB1bml0aWQgPSAxMjsgLyogU2FtbGVSYXRlIEV4dGVuc2lvblVuaXQgSUQgKi8KKworCWxpc3RfZm9yX2VhY2hfZW50cnkobWl4ZXIsICZjaGlwLT5taXhlcl9saXN0LCBsaXN0KSB7CisJCWN2YWwgPSBtaXhlci0+aWRfZWxlbXNbdW5pdGlkXTsKKwkJaWYgKGN2YWwpIHsKKwkJCXNldF9jdXJfY3RsX3ZhbHVlKGN2YWwsIGN2YWwtPmNvbnRyb2wgPDwgOCwKKwkJCQkJICBzYW1wbGVyYXRlX2lkKTsKKwkJCXNuZF91c2JfbWl4ZXJfbm90aWZ5X2lkKG1peGVyLCB1bml0aWQpOworCQl9CisJCWJyZWFrOworCX0KK30KKwogaW50IHNuZF91c2JfY3JlYXRlX21peGVyKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBpbnQgY3RybGlmLAogCQkJIGludCBpZ25vcmVfZXJyb3IpCiB7CkBAIC0yMTE2LDcgKzIyNTcsOSBAQAogCQkuZGV2X2ZyZWUgPSBzbmRfdXNiX21peGVyX2Rldl9mcmVlCiAJfTsKIAlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXI7Ci0JaW50IGVycjsKKwlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RfaWZhY2U7CisJaW50IGVyciwgcHJvdG9jb2w7CiAKIAlzdHJjcHkoY2hpcC0+Y2FyZC0+bWl4ZXJuYW1lLCAiVVNCIE1peGVyIik7CiAKQEAgLTIxMjYsMTIgKzIyNjksMjMgQEAKIAltaXhlci0+Y2hpcCA9IGNoaXA7CiAJbWl4ZXItPmN0cmxpZiA9IGN0cmxpZjsKIAltaXhlci0+aWdub3JlX2N0bF9lcnJvciA9IGlnbm9yZV9lcnJvcjsKLQltaXhlci0+aWRfZWxlbXMgPSBrY2FsbG9jKDI1Niwgc2l6ZW9mKCptaXhlci0+aWRfZWxlbXMpLCBHRlBfS0VSTkVMKTsKKwltaXhlci0+aWRfZWxlbXMgPSBrY2FsbG9jKE1BWF9JRF9FTEVNUywgc2l6ZW9mKCptaXhlci0+aWRfZWxlbXMpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtaXhlci0+aWRfZWxlbXMpIHsKIAkJa2ZyZWUobWl4ZXIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlob3N0X2lmYWNlID0gJnVzYl9pZm51bV90b19pZihjaGlwLT5kZXYsIGN0cmxpZiktPmFsdHNldHRpbmdbMF07CisJcHJvdG9jb2wgPSBob3N0X2lmYWNlLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbDsKKworCS8qIEZJWE1FISAqLworCWlmIChwcm90b2NvbCAhPSBVQUNfVkVSU0lPTl8xKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJtaXhlciBpbnRlcmZhY2UgcHJvdG9jb2wgMHglMDJ4IG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCQkJCQlwcm90b2NvbCk7CisJCXJldHVybiAwOworCX0KKwogCWlmICgoZXJyID0gc25kX3VzYl9taXhlcl9jb250cm9scyhtaXhlcikpIDwgMCB8fAogCSAgICAoZXJyID0gc25kX3VzYl9taXhlcl9zdGF0dXNfY3JlYXRlKG1peGVyKSkgPCAwKQogCQlnb3RvIF9lcnJvcjsKQEAgLTIxNDIsOCArMjI5Niw2IEBACiAJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSB8fAogCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKIAkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKSB7Ci0JCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7Ci0KIAkJaWYgKChlcnIgPSBzbmRfYXVkaWd5Mm54X2NvbnRyb2xzX2NyZWF0ZShtaXhlcikpIDwgMCkKIAkJCWdvdG8gX2Vycm9yOwogCQlpZiAoIXNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJhdWRpZ3kybngiLCAmZW50cnkpKQpAQCAtMjE2MSw2ICsyMzEzLDExIEBACiAJZXJyID0gc25kX2RldmljZV9uZXcoY2hpcC0+Y2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBtaXhlciwgJmRldl9vcHMpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIF9lcnJvcjsKKworCWlmIChsaXN0X2VtcHR5KCZjaGlwLT5taXhlcl9saXN0KSAmJgorCSAgICAhc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgInVzYm1peGVyIiwgJmVudHJ5KSkKKwkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBzbmRfdXNiX21peGVyX3Byb2NfcmVhZCk7CisKIAlsaXN0X2FkZCgmbWl4ZXItPmxpc3QsICZjaGlwLT5taXhlcl9saXN0KTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYyBiL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKaW5kZXggNzdjMzU4OC4uNzllOTAzYSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCkBAIC0xOSwxMSArMTksMTYgQEAKICAqCiAgKi8KIAorc3RydWN0IHVzYm1peF9kQl9tYXAgeworCXUzMiBtaW47CisJdTMyIG1heDsKK307CiAKIHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgewogCWludCBpZDsKIAljb25zdCBjaGFyICpuYW1lOwogCWludCBjb250cm9sOworCXN0cnVjdCB1c2JtaXhfZEJfbWFwICpkQjsKIH07CiAKIHN0cnVjdCB1c2JtaXhfc2VsZWN0b3JfbWFwIHsKQEAgLTcyLDcgKzc3LDcgQEAKIAl7IDgsICJMaW5lIFBsYXliYWNrIiB9LCAvKiBGVSAqLwogCS8qIDk6IElUIG1pYyAqLwogCXsgMTAsICJNaWMgUGxheWJhY2siIH0sIC8qIEZVICovCi0JeyAxMSwgIkNhcHR1cmUgSW5wdXQgU291cmNlIiB9LCAvKiBTVSAqLworCXsgMTEsICJDYXB0dXJlIFNvdXJjZSIgfSwgLyogU1UgKi8KIAl7IDEyLCAiQ2FwdHVyZSIgfSwgLyogRlUgKi8KIAkvKiAxMzogT1QgcGNtIGNhcHR1cmUgKi8KIAkvKiAxNDogTVUgKHcvbyBjb250cm9scykgKi8KQEAgLTEwMiw2ICsxMDcsOSBAQAogICogZS5nLiBubyBNYXN0ZXIgYW5kIGZha2UgUENNIHZvbHVtZQogICoJCQlQYXZlbCBNaWhheWxvdiA8YmluQGJhc2guaW5mbz4KICAqLworc3RhdGljIHN0cnVjdCB1c2JtaXhfZEJfbWFwIG1wM3BsdXNfZEJfMSA9IHstNDc4MSwgMH07CS8qIGp1c3QgZ3Vlc3MgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNibWl4X2RCX21hcCBtcDNwbHVzX2RCXzIgPSB7LTE3ODEsIDYxOH07IC8qIGp1c3QgZ3Vlc3MgKi8KKwogc3RhdGljIHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgbXAzcGx1c19tYXBbXSA9IHsKIAkvKiAxOiBJVCBwY20gKi8KIAkvKiAyOiBJVCBtaWMgKi8KQEAgLTExMCwxNiArMTE4LDE5IEBACiAJLyogNTogT1QgZGlnaXRhbCBvdXQgKi8KIAkvKiA2OiBPVCBzcGVha2VyICovCiAJLyogNzogT1QgcGNtIGNhcHR1cmUgKi8KLQl7IDgsICJDYXB0dXJlIElucHV0IFNvdXJjZSIgfSwgLyogRlUsIGRlZmF1bHQgUENNIENhcHR1cmUgU291cmNlICovCisJeyA4LCAiQ2FwdHVyZSBTb3VyY2UiIH0sIC8qIEZVLCBkZWZhdWx0IFBDTSBDYXB0dXJlIFNvdXJjZSAqLwogCQkvKiAoTWljLCBJbnB1dCAxID0gTGluZSBpbnB1dCwgSW5wdXQgMiA9IE9wdGljYWwgaW5wdXQpICovCiAJeyA5LCAiTWFzdGVyIFBsYXliYWNrIiB9LCAvKiBGVSwgZGVmYXVsdCBTcGVha2VyIDEgKi8KIAkvKiB7IDEwLCAiTWljIENhcHR1cmUiLCAxIH0sICovIC8qIEZVLCBNaWMgQ2FwdHVyZSAqLwotCS8qIHsgMTAsICJNaWMgQ2FwdHVyZSIsIDIgfSwgKi8gLyogRlUsIE1pYyBDYXB0dXJlICovCisJeyAxMCwgLyogIk1pYyBDYXB0dXJlIiwgKi8gTlVMTCwgMiwgLmRCID0gJm1wM3BsdXNfZEJfMiB9LAorCQkvKiBGVSwgTWljIENhcHR1cmUgKi8KIAl7IDEwLCAiTWljIEJvb3N0IiwgNyB9LCAvKiBGVSwgZGVmYXVsdCBBdXRvIEdhaW4gSW5wdXQgKi8KLQl7IDExLCAiTGluZSBDYXB0dXJlIiB9LCAvKiBGVSwgZGVmYXVsdCBQQ00gQ2FwdHVyZSAqLworCXsgMTEsICJMaW5lIENhcHR1cmUiLCAuZEIgPSAmbXAzcGx1c19kQl8yIH0sCisJCS8qIEZVLCBkZWZhdWx0IFBDTSBDYXB0dXJlICovCiAJeyAxMiwgIkRpZ2l0YWwgSW4gUGxheWJhY2siIH0sIC8qIEZVLCBkZWZhdWx0IFBDTSAxICovCi0JLyogeyAxMywgIk1pYyBQbGF5YmFjayIgfSwgKi8gLyogRlUsIGRlZmF1bHQgTWljIFBsYXliYWNrICovCi0JeyAxNCwgIkxpbmUgUGxheWJhY2siIH0sIC8qIEZVLCBkZWZhdWx0IFNwZWFrZXIgKi8KKwl7IDEzLCAvKiAiTWljIFBsYXliYWNrIiwgKi8gLmRCID0gJm1wM3BsdXNfZEJfMSB9LAorCQkvKiBGVSwgZGVmYXVsdCBNaWMgUGxheWJhY2sgKi8KKwl7IDE0LCAiTGluZSBQbGF5YmFjayIsIC5kQiA9ICZtcDNwbHVzX2RCXzEgfSwgLyogRlUsIGRlZmF1bHQgU3BlYWtlciAqLwogCS8qIDE1OiBNVSAqLwogCXsgMCB9IC8qIHRlcm1pbmF0b3IgKi8KIH07CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNicXVpcmtzLmggYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKaW5kZXggYTg5MmJkYS4uZjA2ZmFmNyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYnF1aXJrcy5oCisrKyBiL3NvdW5kL3VzYi91c2JxdWlya3MuaApAQCAtOTEsNyArOTEsNyBAQAogCS5pZFZlbmRvciA9IDB4MDQ2ZCwKIAkuaWRQcm9kdWN0ID0gMHgwODUwLAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wKIH0sCiB7CiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfApAQCAtMTAwLDcgKzEwMCw3IEBACiAJLmlkVmVuZG9yID0gMHgwNDZkLAogCS5pZFByb2R1Y3QgPSAweDA4YWUsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTAogfSwKIHsKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CkBAIC0xMDksNyArMTA5LDcgQEAKIAkuaWRWZW5kb3IgPSAweDA0NmQsCiAJLmlkUHJvZHVjdCA9IDB4MDhjNiwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MCiB9LAogewogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKQEAgLTExOCw3ICsxMTgsNyBAQAogCS5pZFZlbmRvciA9IDB4MDQ2ZCwKIAkuaWRQcm9kdWN0ID0gMHgwOGYwLAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wKIH0sCiB7CiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfApAQCAtMTI3LDcgKzEyNyw3IEBACiAJLmlkVmVuZG9yID0gMHgwNDZkLAogCS5pZFByb2R1Y3QgPSAweDA4ZjUsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTAogfSwKIHsKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CkBAIC0xMzYsNyArMTM2LDcgQEAKIAkuaWRWZW5kb3IgPSAweDA0NmQsCiAJLmlkUHJvZHVjdCA9IDB4MDhmNiwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MCiB9LAogewogCVVTQl9ERVZJQ0UoMHgwNDZkLCAweDA5OTApLApAQCAtMzAxLDcgKzMwMSw3IEBACiAJCQkJCS5pZmFjZSA9IDEsCiAJCQkJCS5hbHRzZXR0aW5nID0gMSwKIAkJCQkJLmFsdHNldF9pZHggPSAxLAotCQkJCQkuYXR0cmlidXRlcyA9IEVQX0NTX0FUVFJfRklMTF9NQVgsCisJCQkJCS5hdHRyaWJ1dGVzID0gVUFDX0VQX0NTX0FUVFJfRklMTF9NQVgsCiAJCQkJCS5lbmRwb2ludCA9IDB4ODEsCiAJCQkJCS5lcF9hdHRyID0gMHgwNSwKIAkJCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUywKQEAgLTEyNjYsMzcgKzEyNjYsNiBAQAogCQl9CiAJfQogfSwKLS8qIFJvbGFuZCBVQS0xMDEgaW4gSGlnaC1TcGVlZCBNb2RlIG9ubHkgKi8KLXsKLQlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDdkKSwKLQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKLQkJLnZlbmRvcl9uYW1lID0gIlJvbGFuZCIsCi0JCS5wcm9kdWN0X25hbWUgPSAiVUEtMTAxIiwKLQkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKLQkJLnR5cGUgPSBRVUlSS19DT01QT1NJVEUsCi0JCS5kYXRhID0gKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrW10pIHsKLQkJCXsKLQkJCQkuaWZudW0gPSAwLAotCQkJCS50eXBlID0gUVVJUktfQVVESU9fRURJUk9MX1VBMTAxCi0JCQl9LAotCQkJewotCQkJCS5pZm51bSA9IDEsCi0JCQkJLnR5cGUgPSBRVUlSS19BVURJT19FRElST0xfVUExMDEKLQkJCX0sCi0JCQl7Ci0JCQkJLmlmbnVtID0gMiwKLQkJCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCi0JCQkJLmRhdGEgPSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8pIHsKLQkJCQkJLm91dF9jYWJsZXMgPSAweDAwMDEsCi0JCQkJCS5pbl9jYWJsZXMgID0gMHgwMDAxCi0JCQkJfQotCQkJfSwKLQkJCXsKLQkJCQkuaWZudW0gPSAtMQotCQkJfQotCQl9Ci0JfQotfSwKIHsKIAkvKiBoYXMgSUQgMHgwMDgxIHdoZW4gbm90IGluICJBZHZhbmNlZCBEcml2ZXIiIG1vZGUgKi8KIAlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDgwKSwKQEAgLTIwNzMsNiArMjA0MiwzMyBAQAogCX0KIH0sCiAKKy8qIEFjY2VzcyBNdXNpYyBkZXZpY2VzICovCit7CisJLyogVmlydXNUSSBEZXNrdG9wICovCisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDEzM2UsIDB4MDgxNSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19DT01QT1NJVEUsCisJCS5kYXRhID0gJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKSB7CisJCQl7CisJCQkJLmlmbnVtID0gMywKKwkJCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCisJCQkJLmRhdGEgPSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX21pZGlfZW5kcG9pbnRfaW5mbykgeworCQkJCQkub3V0X2NhYmxlcyA9IDB4MDAwMywKKwkJCQkJLmluX2NhYmxlcyAgPSAweDAwMDMKKwkJCQl9CisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IDQsCisJCQkJLnR5cGUgPSBRVUlSS19JR05PUkVfSU5URVJGQUNFCisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IC0xCisJCQl9CisJCX0KKwl9Cit9LAorCiAvKiAqLwogewogCS8qIGFrYS4gU2VyYXRvIFNjcmF0Y2ggTGl2ZSBESiBCb3ggKi8KQEAgLTIxMDUsNiArMjEwMSwxNjUgQEAKIAl9CiB9LAogCisvKiBIYXVwcGF1Z2UgSFZSLTk1MFEgYW5kIEhWUi04NTAgKi8KK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjAwKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDEpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIwMiksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjAzKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDQpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIwNSksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjUwKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMzApLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTg1MCIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKKworLyogRGlnaWRlc2lnbiBNYm94ICovCit7CisJLyogVGhhbmtzIHRvIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiAqLworCVVTQl9ERVZJQ0UoMHgwZGJhLCAweDEwMDApLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJEaWdpZGVzaWduIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJNQm94IiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19DT01QT1NJVEUsCisJCS5kYXRhID0gKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrW10peworCQkJeworCQkJCS5pZm51bSA9IDAsCisJCQkJLnR5cGUgPSBRVUlSS19JR05PUkVfSU5URVJGQUNFLAorCQkJfSwKKwkJCXsKKwkJCQkuaWZudW0gPSAxLAorCQkJCS50eXBlID0gUVVJUktfQVVESU9fRklYRURfRU5EUE9JTlQsCisJCQkJLmRhdGEgPSAmKGNvbnN0IHN0cnVjdCBhdWRpb2Zvcm1hdCkgeworCQkJCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMjRfM0JFLAorCQkJCQkuY2hhbm5lbHMgPSAyLAorCQkJCQkuaWZhY2UgPSAxLAorCQkJCQkuYWx0c2V0dGluZyA9IDEsCisJCQkJCS5hbHRzZXRfaWR4ID0gMSwKKwkJCQkJLmF0dHJpYnV0ZXMgPSBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSwKKwkJCQkJLmVuZHBvaW50ID0gMHgwMiwKKwkJCQkJLmVwX2F0dHIgPSAweDAxLAorCQkJCQkubWF4cGFja3NpemUgPSAweDEzMCwKKwkJCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCQkJCQkucmF0ZV9taW4gPSA0NDEwMCwKKwkJCQkJLnJhdGVfbWF4ID0gNDgwMDAsCisJCQkJCS5ucl9yYXRlcyA9IDIsCisJCQkJCS5yYXRlX3RhYmxlID0gKHVuc2lnbmVkIGludFtdKSB7CisJCQkJCQk0NDEwMCwgNDgwMDAKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCQl7CisJCQkJLmlmbnVtID0gLTEKKwkJCX0KKwkJfQorCisJfQorfSwKKwogewogCS8qCiAJICogU29tZSBVU0IgTUlESSBkZXZpY2VzIGRvbid0IGhhdmUgYW4gYXVkaW8gY29udHJvbCBpbnRlcmZhY2UsCkBAIC0yMTEzLDcgKzIyNjgsNyBAQAogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKIAkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19NSURJX1NUUkVBTUlORywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcsCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CiAJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCiAJCS50eXBlID0gUVVJUktfTUlESV9TVEFOREFSRF9JTlRFUkZBQ0UKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwppbmRleCA5MWJiMjk2Li40NGRlYjIxIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCkBAIC0xNiw2ICsxNiw4IEBACiAgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2h3ZGVwLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0zMTUsOSArMzE3LDkgQEAKIAlkYXRhWzBdID0gcmF0ZTsKIAlkYXRhWzFdID0gcmF0ZSA+PiA4OwogCWRhdGFbMl0gPSByYXRlID4+IDE2OwotCWVyciA9IHVzMTIybF9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsCisJZXJyID0gdXMxMjJsX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgVUFDX1NFVF9DVVIsCiAJCQkgICAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwKLQkJCSAgICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKTsKKwkJCSAgICAgVUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEUgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApOwogCWlmIChlcnIgPCAwKQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwIDB4JXhcbiIsCiAJCQkgICBkZXYtPmRldm51bSwgcmF0ZSwgZXApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCmluZGV4IDEyNDc2MGIuLmUxZDYwZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQorKysgYi90b29scy9wZXJmLy5naXRpZ25vcmUKQEAgLTE0LDYgKzE0LDcgQEAKIGNvbW1vbi1jbWRzLmgKIHBlcmYuZGF0YQogcGVyZi5kYXRhLm9sZAorcGVyZi1hcmNoaXZlCiB0YWdzCiBUQUdTCiBjc2NvcGUqCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hcmNoaXZlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWFyY2hpdmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTE3NGQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hcmNoaXZlLnR4dApAQCAtMCwwICsxLDIyIEBACitwZXJmLWFyY2hpdmUoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitwZXJmLWFyY2hpdmUgLSBDcmVhdGUgYXJjaGl2ZSB3aXRoIG9iamVjdCBmaWxlcyB3aXRoIGJ1aWxkLWlkcyBmb3VuZCBpbiBwZXJmLmRhdGEgZmlsZQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIGFyY2hpdmUnIFtmaWxlXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCBydW5zIHJ1bnMgcGVyZi1idWlsZGlkLWxpc3QgLS13aXRoLWhpdHMsIGFuZCBjb2xsZWN0cyB0aGUgZmlsZXMKK3dpdGggdGhlIGJ1aWxkaWRzIGZvdW5kIHNvIHRoYXQgYW5hbGlzeXMgb2YgcGVyZi5kYXRhIGNvbnRlbnRzIGNhbiBiZSBwb3NzaWJsZQorb24gYW5vdGhlciBtYWNoaW5lLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0sIGxpbmtwZXJmOnBlcmYtYnVpbGRpZC1saXN0WzFdLCBsaW5rcGVyZjpwZXJmLXJlcG9ydFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1idWlsZGlkLWNhY2hlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJjM2I1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQKQEAgLTAsMCArMSwzMyBAQAorcGVyZi1idWlsZGlkLWNhY2hlKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1idWlsZGlkLWNhY2hlIC0gTWFuYWdlIGJ1aWxkLWlkIGNhY2hlLgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIGJ1aWxkaWQtbGlzdCA8b3B0aW9ucz4nCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIG1hbmFnZXMgdGhlIGJ1aWxkLWlkIGNhY2hlLiBJdCBjYW4gYWRkIGFuZCByZW1vdmUgZmlsZXMgdG8gdGhlCitjYWNoZS4gSW4gdGhlIGZ1dHVyZSBpdCBzaG91bGQgYXMgd2VsbCBwdXJnZSBvbGRlciBlbnRyaWVzLCBzZXQgdXBwZXIgbGltaXRzCitmb3IgdGhlIHNwYWNlIHVzZWQgYnkgdGhlIGNhY2hlLCBldGMuCisKK09QVElPTlMKKy0tLS0tLS0KKy1hOjoKKy0tYWRkPTo6CisgICAgICAgIEFkZCBzcGVjaWZpZWQgZmlsZSB0byB0aGUgY2FjaGUuCistcjo6CistLXJlbW92ZT06OgorICAgICAgICBSZW1vdmUgc3BlY2lmaWVkIGZpbGUgdG8gdGhlIGNhY2hlLgorLXY6OgorLS12ZXJib3NlOjoKKwlCZSBtb3JlIHZlcmJvc2UuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0sIGxpbmtwZXJmOnBlcmYtcmVwb3J0WzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKaW5kZXggMjUwZTM5MS4uMmRlMzQwNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dApAQCAtMTUsNiArMTUsOCBAQAogJ3BlcmYgcHJvYmUnIFtvcHRpb25zXSAtLWRlbD0nW0dST1VQOl1FVkVOVCcgWy4uLl0KIG9yCiAncGVyZiBwcm9iZScgLS1saXN0CitvcgorJ3BlcmYgcHJvYmUnIC0tbGluZT0nRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdJwogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTQ1LDYgKzQ3LDExIEBACiAtLWxpc3Q6OgogCUxpc3QgdXAgY3VycmVudCBwcm9iZSBldmVudHMuCiAKKy1MOjoKKy0tbGluZT06OgorCVNob3cgc291cmNlIGNvZGUgbGluZXMgd2hpY2ggY2FuIGJlIHByb2JlZC4gVGhpcyBuZWVkcyBhbiBhcmd1bWVudAorCXdoaWNoIHNwZWNpZmllcyBhIHJhbmdlIG9mIHRoZSBzb3VyY2UgY29kZS4KKwogUFJPQkUgU1lOVEFYCiAtLS0tLS0tLS0tLS0KIFByb2JlIHBvaW50cyBhcmUgZGVmaW5lZCBieSBmb2xsb3dpbmcgc3ludGF4LgpAQCAtNTYsNiArNjMsMTkgQEAKIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhIHByb2JlIHBvaW50IGJ5IHRoZSBzb3VyY2UgbGluZSBudW1iZXIgYnkgdXNpbmcgJ1NSQzpBTE4nIHN5bnRheCwgd2hlcmUgJ1NSQycgaXMgdGhlIHNvdXJjZSBmaWxlIHBhdGggYW5kICdBTE4nIGlzIHRoZSBsaW5lIG51bWJlci4KICdBUkcnIHNwZWNpZmllcyB0aGUgYXJndW1lbnRzIG9mIHRoaXMgcHJvYmUgcG9pbnQuIFlvdSBjYW4gdXNlIHRoZSBuYW1lIG9mIGxvY2FsIHZhcmlhYmxlLCBvciBrcHJvYmUtdHJhY2VyIGFyZ3VtZW50IGZvcm1hdCAoZS5nLiAkcmV0dmFsLCAlYXgsIGV0YykuCiAKK0xJTkUgU1lOVEFYCistLS0tLS0tLS0tLQorTGluZSByYW5nZSBpcyBkZXNjcmlwdGVkIGJ5IGZvbGxvd2luZyBzeW50YXguCisKKyAiRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdIgorCitGVU5DIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24gbmFtZSBvZiBzaG93aW5nIGxpbmVzLiAnUkxOJyBpcyB0aGUgc3RhcnQgbGluZQorbnVtYmVyIGZyb20gZnVuY3Rpb24gZW50cnkgbGluZSwgYW5kICdSTE4yJyBpcyB0aGUgZW5kIGxpbmUgbnVtYmVyLiBBcyBzYW1lIGFzCitwcm9iZSBzeW50YXgsICdTUkMnIG1lYW5zIHRoZSBzb3VyY2UgZmlsZSBwYXRoLCAnQUxOJyBpcyBzdGFydCBsaW5lIG51bWJlciwKK2FuZCAnQUxOMicgaXMgZW5kIGxpbmUgbnVtYmVyIGluIHRoZSBmaWxlLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgaG93CittYW55IGxpbmVzIHRvIHNob3cgYnkgdXNpbmcgJ05VTScuCitTbywgInNvdXJjZS5jOjEwMC0xMjAiIHNob3dzIGxpbmVzIGJldHdlZW4gMTAwdGggdG8gbDIwdGggaW4gc291cmNlLmMgZmlsZS4gQW5kICJmdW5jOjEwKzIwIiBzaG93cyAyMCBsaW5lcyBmcm9tIDEwdGggbGluZSBvZiBmdW5jIGZ1bmN0aW9uLgorCiBTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtwZXJmOnBlcmYtdHJhY2VbMV0sIGxpbmtwZXJmOnBlcmYtcmVjb3JkWzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dAppbmRleCA0YTdkNTU4Li43ODViOWZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQKQEAgLTc0LDcgKzc0LDcgQEAKIAogLXMgPHN5bWJvbD46OgogLS1zeW0tYW5ub3RhdGU9PHN5bWJvbD46OgotICAgICAgICBBbm5vdGF0ZSB0aGlzIHN5bWJvbC4gIFJlcXVpcmVzIC1rIG9wdGlvbi4KKyAgICAgICAgQW5ub3RhdGUgdGhpcyBzeW1ib2wuCiAKIC12OjoKIC0tdmVyYm9zZTo6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CmluZGV4IGM1ZjU1ZjQuLmQ3MjljZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CkBAIC04LDcgKzgsNyBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0ncGVyZiB0cmFjZScgWy1zIFtsYW5nXTpzY3JpcHRbLmV4dF0gXQorJ3BlcmYgdHJhY2UnIFstcyBbUGVybF06c2NyaXB0Wy5wbF0gXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXB5dGhvbi50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1weXRob24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNDFhY2EKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1weXRob24udHh0CkBAIC0wLDAgKzEsNjI1IEBACitwZXJmLXRyYWNlLXB5dGhvbigxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtdHJhY2UtcHl0aG9uIC0gUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggYSBQeXRob24gc2NyaXB0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgdHJhY2UnIFstcyBbUHl0aG9uXTpzY3JpcHRbLnB5XSBdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIHBlcmYgdHJhY2Ugb3B0aW9uIGlzIHVzZWQgdG8gcHJvY2VzcyBwZXJmIHRyYWNlIGRhdGEgdXNpbmcgcGVyZidzCitidWlsdC1pbiBQeXRob24gaW50ZXJwcmV0ZXIuICBJdCByZWFkcyBhbmQgcHJvY2Vzc2VzIHRoZSBpbnB1dCBmaWxlIGFuZAorZGlzcGxheXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRyYWNlIGFuYWx5c2lzIGltcGxlbWVudGVkIGluIHRoZSBnaXZlbgorUHl0aG9uIHNjcmlwdCwgaWYgYW55LgorCitBIFFVSUNLIEVYQU1QTEUKKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gc2hvd3MgdGhlIHByb2Nlc3MsIHN0YXJ0IHRvIGZpbmlzaCwgb2YgY3JlYXRpbmcgYSB3b3JraW5nCitQeXRob24gc2NyaXB0IHRoYXQgYWdncmVnYXRlcyBhbmQgZXh0cmFjdHMgdXNlZnVsIGluZm9ybWF0aW9uIGZyb20gYQorcmF3IHBlcmYgdHJhY2Ugc3RyZWFtLiAgWW91IGNhbiBhdm9pZCByZWFkaW5nIHRoZSByZXN0IG9mIHRoaXMKK2RvY3VtZW50IGlmIGFuIGV4YW1wbGUgaXMgZW5vdWdoIGZvciB5b3U7IHRoZSByZXN0IG9mIHRoZSBkb2N1bWVudAorcHJvdmlkZXMgbW9yZSBkZXRhaWxzIG9uIGVhY2ggc3RlcCBhbmQgbGlzdHMgdGhlIGxpYnJhcnkgZnVuY3Rpb25zCithdmFpbGFibGUgdG8gc2NyaXB0IHdyaXRlcnMuCisKK1RoaXMgZXhhbXBsZSBhY3R1YWxseSBkZXRhaWxzIHRoZSBzdGVwcyB0aGF0IHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlCisnc3lzY2FsbC1jb3VudHMnIHNjcmlwdCB5b3Ugc2VlIHdoZW4geW91IGxpc3QgdGhlIGF2YWlsYWJsZSBwZXJmIHRyYWNlCitzY3JpcHRzIHZpYSAncGVyZiB0cmFjZSAtbCcuICBBcyBzdWNoLCB0aGlzIHNjcmlwdCBhbHNvIHNob3dzIGhvdyB0bworaW50ZWdyYXRlIHlvdXIgc2NyaXB0IGludG8gdGhlIGxpc3Qgb2YgZ2VuZXJhbC1wdXJwb3NlICdwZXJmIHRyYWNlJworc2NyaXB0cyBsaXN0ZWQgYnkgdGhhdCBjb21tYW5kLgorCitUaGUgc3lzY2FsbC1jb3VudHMgc2NyaXB0IGlzIGEgc2ltcGxlIHNjcmlwdCwgYnV0IGRlbW9uc3RyYXRlcyBhbGwgdGhlCitiYXNpYyBpZGVhcyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgdXNlZnVsIHNjcmlwdC4gIEhlcmUncyBhbiBleGFtcGxlCitvZiBpdHMgb3V0cHV0IChzeXNjYWxsIG5hbWVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCwgdGhleSB3aWxsIGFwcGVhcgorYXMgbnVtYmVycyk6CisKKy0tLS0KK3N5c2NhbGwgZXZlbnRzOgorCitldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLQorc3lzX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1NTA2Nworc3lzX2dldGRlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA3Mgorc3lzX2Nsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAzNworc3lzX3N3YXBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc2OQorc3lzX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkyMworc3lzX3NjaGVkX3NldHBhcmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgyNgorc3lzX29wZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzMQorc3lzX25ld2ZzdGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyNgorc3lzX21tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNworc3lzX211bm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNgorc3lzX2Z1dGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MQorc3lzX3NlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMgorc3lzX3BvbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NAorc3lzX3NldGl0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorc3lzX3dyaXRldiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorc3lzX2xzZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworc3lzX3J0X3NpZ3Byb2NtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorc3lzX3dhaXQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworc3lzX2lvY3RsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworc3lzX3NldF9yb2J1c3RfbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorc3lzX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorc3lzX2FjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorLS0tLQorCitCYXNpY2FsbHkgb3VyIHRhc2sgaXMgdG8ga2VlcCBhIHBlci1zeXNjYWxsIHRhbGx5IHRoYXQgZ2V0cyB1cGRhdGVkCitldmVyeSB0aW1lIGEgc3lzdGVtIGNhbGwgb2NjdXJzIGluIHRoZSBzeXN0ZW0uICBPdXIgc2NyaXB0IHdpbGwgZG8KK3RoYXQsIGJ1dCBmaXJzdCB3ZSBuZWVkIHRvIHJlY29yZCB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIGJ5Cit0aGF0IHNjcmlwdC4gIFRoZW9yZXRpY2FsbHksIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiB3YXlzIHdlIGNvdWxkIGRvCit0aGF0OgorCistIHdlIGNvdWxkIGVuYWJsZSBldmVyeSBldmVudCB1bmRlciB0aGUgdHJhY2luZy9ldmVudHMvc3lzY2FsbHMKKyAgZGlyZWN0b3J5LCBidXQgdGhpcyBpcyBvdmVyIDYwMCBzeXNjYWxscywgd2VsbCBiZXlvbmQgdGhlIG51bWJlcgorICBhbGxvd2FibGUgYnkgcGVyZi4gIFRoZXNlIGluZGl2aWR1YWwgc3lzY2FsbCBldmVudHMgd2lsbCBob3dldmVyIGJlCisgIHVzZWZ1bCBpZiB3ZSB3YW50IHRvIGxhdGVyIHVzZSB0aGUgZ3VpZGFuY2Ugd2UgZ2V0IGZyb20gdGhlCisgIGdlbmVyYWwtcHVycG9zZSBzY3JpcHRzIHRvIGRyaWxsIGRvd24gYW5kIGdldCBtb3JlIGRldGFpbCBhYm91dAorICBpbmRpdmlkdWFsIHN5c2NhbGxzIG9mIGludGVyZXN0LgorCistIHdlIGNhbiBlbmFibGUgdGhlIHN5c19lbnRlciBhbmQvb3Igc3lzX2V4aXQgc3lzY2FsbHMgZm91bmQgdW5kZXIKKyAgdHJhY2luZy9ldmVudHMvcmF3X3N5c2NhbGxzLiAgVGhlc2UgYXJlIGNhbGxlZCBmb3IgYWxsIHN5c2NhbGxzOyB0aGUKKyAgJ2lkJyBmaWVsZCBjYW4gYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGluZGl2aWR1YWwgc3lzY2FsbAorICBudW1iZXJzLgorCitGb3IgdGhpcyBzY3JpcHQsIHdlIG9ubHkgbmVlZCB0byBrbm93IHRoYXQgYSBzeXNjYWxsIHdhcyBlbnRlcmVkOyB3ZQorZG9uJ3QgY2FyZSBob3cgaXQgZXhpdGVkLCBzbyB3ZSdsbCB1c2UgJ3BlcmYgcmVjb3JkJyB0byByZWNvcmQgb25seQordGhlIHN5c19lbnRlciBldmVudHM6CisKKy0tLS0KKyMgcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCisKK15DWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMSB0aW1lcyB0byB3cml0ZSBkYXRhIF0KK1sgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSA1Ni41NDUgTUIgcGVyZi5kYXRhICh+MjQ3MDUwMyBzYW1wbGVzKSBdCistLS0tCisKK1RoZSBvcHRpb25zIGJhc2ljYWxseSBzYXkgdG8gY29sbGVjdCBkYXRhIGZvciBldmVyeSBzeXNjYWxsIGV2ZW50CitzeXN0ZW0td2lkZSBhbmQgbXVsdGlwbGV4IHRoZSBwZXItY3B1IG91dHB1dCBpbnRvIGEgc2luZ2xlIHN0cmVhbS4KK1RoYXQgc2luZ2xlIHN0cmVhbSB3aWxsIGJlIHJlY29yZGVkIGluIGEgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKK2NhbGxlZCBwZXJmLmRhdGEuCisKK09uY2Ugd2UgaGF2ZSBhIHBlcmYuZGF0YSBmaWxlIGNvbnRhaW5pbmcgb3VyIGRhdGEsIHdlIGNhbiB1c2UgdGhlIC1nCisncGVyZiB0cmFjZScgb3B0aW9uIHRvIGdlbmVyYXRlIGEgUHl0aG9uIHNjcmlwdCB0aGF0IHdpbGwgY29udGFpbiBhCitjYWxsYmFjayBoYW5kbGVyIGZvciBlYWNoIGV2ZW50IHR5cGUgZm91bmQgaW4gdGhlIHBlcmYuZGF0YSB0cmFjZQorc3RyZWFtIChmb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIFNUQVJURVIgU0NSSVBUUyBzZWN0aW9uKS4KKworLS0tLQorIyBwZXJmIHRyYWNlIC1nIHB5dGhvbgorZ2VuZXJhdGVkIFB5dGhvbiBzY3JpcHQ6IHBlcmYtdHJhY2UucHkKKworVGhlIG91dHB1dCBmaWxlIGNyZWF0ZWQgYWxzbyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgbmFtZWQKK3BlcmYtdHJhY2UucHkuICBIZXJlJ3MgdGhlIGZpbGUgaW4gaXRzIGVudGlyZXR5OgorCisjIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsIGdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHB5dGhvbgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKworIyBUaGUgY29tbW9uXyogZXZlbnQgaGFuZGxlciBmaWVsZHMgYXJlIHRoZSBtb3N0IHVzZWZ1bCBmaWVsZHMgY29tbW9uIHRvCisjIGFsbCBldmVudHMuICBUaGV5IGRvbid0IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gdGhlICdjb21tb25fKicgZmllbGRzCisjIGluIHRoZSBmb3JtYXQgZmlsZXMuICBUaG9zZSBmaWVsZHMgbm90IGF2YWlsYWJsZSBhcyBoYW5kbGVyIHBhcmFtcyBjYW4KKyMgYmUgcmV0cmlldmVkIHVzaW5nIFB5dGhvbiBmdW5jdGlvbnMgb2YgdGhlIGZvcm0gY29tbW9uXyooY29udGV4dCkuCisjIFNlZSB0aGUgcGVyZi10cmFjZS1weXRob24gRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKK2Zyb20gQ29yZSBpbXBvcnQgKgorCitkZWYgdHJhY2VfYmVnaW4oKToKKwlwcmludCAiaW4gdHJhY2VfYmVnaW4iCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludCAiaW4gdHJhY2VfZW5kIgorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CisJCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKwkJcHJpbnQgImlkPSVkLCBhcmdzPSVzXG4iICUgXAorCQkoaWQsIGFyZ3MpLAorCitkZWYgdHJhY2VfdW5oYW5kbGVkKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKToKKwkJcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCitkZWYgcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSk6CisJcHJpbnQgIiUtMjBzICU1dSAlMDV1LiUwOXUgJTh1ICUtMjBzICIgJSBcCisJKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSksCistLS0tCisKK0F0IHRoZSB0b3AgaXMgYSBjb21tZW50IGJsb2NrIGZvbGxvd2VkIGJ5IHNvbWUgaW1wb3J0IHN0YXRlbWVudHMgYW5kIGEKK3BhdGggYXBwZW5kIHdoaWNoIGV2ZXJ5IHBlcmYgdHJhY2Ugc2NyaXB0IHNob3VsZCBpbmNsdWRlLgorCitGb2xsb3dpbmcgdGhhdCBhcmUgYSBjb3VwbGUgZ2VuZXJhdGVkIGZ1bmN0aW9ucywgdHJhY2VfYmVnaW4oKSBhbmQKK3RyYWNlX2VuZCgpLCB3aGljaCBhcmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgdGhlCitzY3JpcHQgcmVzcGVjdGl2ZWx5IChmb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIFNDUklQVF9MQVlPVVQgc2VjdGlvbgorYmVsb3cpLgorCitGb2xsb3dpbmcgdGhvc2UgYXJlIHRoZSAnZXZlbnQgaGFuZGxlcicgZnVuY3Rpb25zIGdlbmVyYXRlZCBvbmUgZm9yCitldmVyeSBldmVudCBpbiB0aGUgJ3BlcmYgcmVjb3JkJyBvdXRwdXQuICBUaGUgaGFuZGxlciBmdW5jdGlvbnMgdGFrZQordGhlIGZvcm0gc3Vic3lzdGVtX19ldmVudF9uYW1lLCBhbmQgY29udGFpbiBuYW1lZCBwYXJhbWV0ZXJzLCBvbmUgZm9yCitlYWNoIGZpZWxkIGluIHRoZSBldmVudDsgaW4gdGhpcyBjYXNlLCB0aGVyZSdzIG9ubHkgb25lIGV2ZW50LAorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoKS4gIChzZWUgdGhlIEVWRU5UIEhBTkRMRVJTIHNlY3Rpb24gYmVsb3cgZm9yCittb3JlIGluZm8gb24gZXZlbnQgaGFuZGxlcnMpLgorCitUaGUgZmluYWwgY291cGxlIG9mIGZ1bmN0aW9ucyBhcmUsIGxpa2UgdGhlIGJlZ2luIGFuZCBlbmQgZnVuY3Rpb25zLAorZ2VuZXJhdGVkIGZvciBldmVyeSBzY3JpcHQuICBUaGUgZmlyc3QsIHRyYWNlX3VuaGFuZGxlZCgpLCBpcyBjYWxsZWQKK2V2ZXJ5IHRpbWUgdGhlIHNjcmlwdCBmaW5kcyBhbiBldmVudCBpbiB0aGUgcGVyZi5kYXRhIGZpbGUgdGhhdAorZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBldmVudCBoYW5kbGVyIGluIHRoZSBzY3JpcHQuICBUaGlzIGNvdWxkCittZWFuIGVpdGhlciB0aGF0IHRoZSByZWNvcmQgc3RlcCByZWNvcmRlZCBldmVudCB0eXBlcyB0aGF0IGl0IHdhc24ndAorcmVhbGx5IGludGVyZXN0ZWQgaW4sIG9yIHRoZSBzY3JpcHQgd2FzIHJ1biBhZ2FpbnN0IGEgdHJhY2UgZmlsZSB0aGF0Citkb2Vzbid0IGNvcnJlc3BvbmQgdG8gdGhlIHNjcmlwdC4KKworVGhlIHNjcmlwdCBnZW5lcmF0ZWQgYnkgLWcgb3B0aW9uIG9wdGlvbiBzaW1wbHkgcHJpbnRzIGEgbGluZSBmb3IgZWFjaAorZXZlbnQgZm91bmQgaW4gdGhlIHRyYWNlIHN0cmVhbSBpLmUuIGl0IGJhc2ljYWxseSBqdXN0IGR1bXBzIHRoZSBldmVudAorYW5kIGl0cyBwYXJhbWV0ZXIgdmFsdWVzIHRvIHN0ZG91dC4gIFRoZSBwcmludF9oZWFkZXIoKSBmdW5jdGlvbiBpcworc2ltcGx5IGEgdXRpbGl0eSBmdW5jdGlvbiB1c2VkIGZvciB0aGF0IHB1cnBvc2UuICBMZXQncyByZW5hbWUgdGhlCitzY3JpcHQgYW5kIHJ1biBpdCB0byBzZWUgdGhlIGRlZmF1bHQgb3V0cHV0OgorCistLS0tCisjIG12IHBlcmYtdHJhY2UucHkgc3lzY2FsbC1jb3VudHMucHkKKyMgcGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy5weQorCityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc1ODIwODMgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc1OTU3NjQgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc2MjA4NjAgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3MTA0NzggICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTc4LCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzE5MjA0ICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0xNDIsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3NTU0NDUgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3NzU2MDEgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3ODE4MjAgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CisuCisuCisuCistLS0tCisKK09mIGNvdXJzZSwgZm9yIHRoaXMgc2NyaXB0LCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBwcmludGluZyBldmVyeQordHJhY2UgZXZlbnQsIGJ1dCByYXRoZXIgYWdncmVnYXRpbmcgaXQgaW4gYSB1c2VmdWwgd2F5LiAgU28gd2UnbGwgZ2V0CityaWQgb2YgZXZlcnl0aGluZyB0byBkbyB3aXRoIHByaW50aW5nIGFzIHdlbGwgYXMgdGhlIHRyYWNlX2JlZ2luKCkgYW5kCit0cmFjZV91bmhhbmRsZWQoKSBmdW5jdGlvbnMsIHdoaWNoIHdlIHdvbid0IGJlIHVzaW5nLiAgVGhhdCBsZWF2ZXMgdXMKK3dpdGggdGhpcyBtaW5pbWFsaXN0aWMgc2tlbGV0b246CisKKy0tLS0KK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50ICJpbiB0cmFjZV9lbmQiCisKK2RlZiByYXdfc3lzY2FsbHNfX3N5c19lbnRlcihldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWlkLCBhcmdzKToKKy0tLS0KKworSW4gdHJhY2VfZW5kKCksIHdlJ2xsIHNpbXBseSBwcmludCB0aGUgcmVzdWx0cywgYnV0IGZpcnN0IHdlIG5lZWQgdG8KK2dlbmVyYXRlIHNvbWUgcmVzdWx0cyB0byBwcmludC4gIFRvIGRvIHRoYXQgd2UgbmVlZCB0byBoYXZlIG91cgorc3lzX2VudGVyKCkgaGFuZGxlciBkbyB0aGUgbmVjZXNzYXJ5IHRhbGx5aW5nIHVudGlsIGFsbCBldmVudHMgaGF2ZQorYmVlbiBjb3VudGVkLiAgQSBoYXNoIHRhYmxlIGluZGV4ZWQgYnkgc3lzY2FsbCBpZCBpcyBhIGdvb2Qgd2F5IHRvCitzdG9yZSB0aGF0IGluZm9ybWF0aW9uOyBldmVyeSB0aW1lIHRoZSBzeXNfZW50ZXIoKSBoYW5kbGVyIGlzIGNhbGxlZCwKK3dlIHNpbXBseSBpbmNyZW1lbnQgYSBjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhhdCBoYXNoIGVudHJ5IGluZGV4ZWQgYnkKK3RoYXQgc3lzY2FsbCBpZDoKKworLS0tLQorICBzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworICB0cnk6CisgICAgc3lzY2FsbHNbaWRdICs9IDEKKyAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICBzeXNjYWxsc1tpZF0gPSAxCistLS0tCisKK1RoZSBzeXNjYWxscyAnYXV0b2RpY3QnIG9iamVjdCBpcyBhIHNwZWNpYWwga2luZCBvZiBQeXRob24gZGljdGlvbmFyeQorKGltcGxlbWVudGVkIGluIENvcmUucHkpIHRoYXQgaW1wbGVtZW50cyBQZXJsJ3MgJ2F1dG92aXZpZnlpbmcnIGhhc2hlcworaW4gUHl0aG9uIGkuZS4gd2l0aCBhdXRvdml2aWZ5aW5nIGhhc2hlcywgeW91IGNhbiBhc3NpZ24gbmVzdGVkIGhhc2gKK3ZhbHVlcyB3aXRob3V0IGhhdmluZyB0byBnbyB0byB0aGUgdHJvdWJsZSBvZiBjcmVhdGluZyBpbnRlcm1lZGlhdGUKK2xldmVscyBpZiB0aGV5IGRvbid0IGV4aXN0IGUuZyBzeXNjYWxsc1tjb21tXVtwaWRdW2lkXSA9IDEgd2lsbCBjcmVhdGUKK3RoZSBpbnRlcm1lZGlhdGUgaGFzaCBsZXZlbHMgYW5kIGZpbmFsbHkgYXNzaWduIHRoZSB2YWx1ZSAxIHRvIHRoZQoraGFzaCBlbnRyeSBmb3IgJ2lkJyAoYmVjYXVzZSB0aGUgdmFsdWUgYmVpbmcgYXNzaWduZWQgaXNuJ3QgYSBoYXNoCitvYmplY3QgaXRzZWxmLCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBhc3NpZ25lZCBpbiB0aGUgVHlwZUVycm9yCitleGNlcHRpb24uICBXZWxsLCB0aGVyZSBtYXkgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgaW4gUHl0aG9uIGJ1dAordGhhdCdzIHdoYXQgd29ya3MgZm9yIG5vdykuCisKK1B1dHRpbmcgdGhhdCBjb2RlIGludG8gdGhlIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKCkgaGFuZGxlciwgd2UKK2VmZmVjdGl2ZWx5IGVuZCB1cCB3aXRoIGEgc2luZ2xlLWxldmVsIGRpY3Rpb25hcnkga2V5ZWQgb24gc3lzY2FsbCBpZAorYW5kIGhhdmluZyB0aGUgY291bnRzIHdlJ3ZlIHRhbGxpZWQgYXMgdmFsdWVzLgorCitUaGUgcHJpbnRfc3lzY2FsbF90b3RhbHMoKSBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSBlbnRyaWVzIGluIHRoZQorZGljdGlvbmFyeSBhbmQgZGlzcGxheXMgYSBsaW5lIGZvciBlYWNoIGVudHJ5IGNvbnRhaW5pbmcgdGhlIHN5c2NhbGwKK25hbWUgKHRoZSBkaWN0b25hcnkga2V5cyBjb250YWluIHRoZSBzeXNjYWxsIGlkcywgd2hpY2ggYXJlIHBhc3NlZCB0bwordGhlIFV0aWwgZnVuY3Rpb24gc3lzY2FsbF9uYW1lKCksIHdoaWNoIHRyYW5zbGF0ZXMgdGhlIHJhdyBzeXNjYWxsCitudW1iZXJzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN5c2NhbGwgbmFtZSBzdHJpbmdzKS4gIFRoZSBvdXRwdXQgaXMKK2Rpc3BsYXllZCBhZnRlciBhbGwgdGhlIGV2ZW50cyBpbiB0aGUgdHJhY2UgaGF2ZSBiZWVuIHByb2Nlc3NlZCwgYnkKK2NhbGxpbmcgdGhlIHByaW50X3N5c2NhbGxfdG90YWxzKCkgZnVuY3Rpb24gZnJvbSB0aGUgdHJhY2VfZW5kKCkKK2hhbmRsZXIgY2FsbGVkIGF0IHRoZSBlbmQgb2Ygc2NyaXB0IHByb2Nlc3NpbmcuCisKK1RoZSBmaW5hbCBzY3JpcHQgcHJvZHVjaW5nIHRoZSBvdXRwdXQgc2hvd24gYWJvdmUgaXMgc2hvd24gaW4gaXRzCitlbnRpcmV0eSBiZWxvdyAoc3lzY2FsbF9uYW1lKCkgaGVscGVyIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLCB5b3UgY2FuCitvbmx5IGRlYWwgd2l0aCBpZCdzIGZvciBub3cpOgorCistLS0tCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgorZnJvbSBDb3JlIGltcG9ydCAqCitmcm9tIFV0aWwgaW1wb3J0ICoKKworc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludF9zeXNjYWxsX3RvdGFscygpCisKK2RlZiByYXdfc3lzY2FsbHNfX3N5c19lbnRlcihldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWlkLCBhcmdzKToKKwl0cnk6CisJCXN5c2NhbGxzW2lkXSArPSAxCisJZXhjZXB0IFR5cGVFcnJvcjoKKwkJc3lzY2FsbHNbaWRdID0gMQorCitkZWYgcHJpbnRfc3lzY2FsbF90b3RhbHMoKToKKyAgICBpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHMgZm9yICVzOlxuXG4iICUgKGZvcl9jb21tKSwKKyAgICBlbHNlOgorCSAgICBwcmludCAiXG5zeXNjYWxsIGV2ZW50czpcblxuIiwKKworICAgIHByaW50ICIlLTQwcyAgJTEwc1xuIiAlICgiZXZlbnQiLCAiY291bnQiKSwKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0iKSwKKworICAgIGZvciBpZCwgdmFsIGluIHNvcnRlZChzeXNjYWxscy5pdGVyaXRlbXMoKSwga2V5ID0gbGFtYmRhKGssIHYpOiAodiwgayksIFwKKwkJCQkgIHJldmVyc2UgPSBUcnVlKToKKwkgICAgcHJpbnQgIiUtNDBzICAlMTBkXG4iICUgKHN5c2NhbGxfbmFtZShpZCksIHZhbCksCistLS0tCisKK1RoZSBzY3JpcHQgY2FuIGJlIHJ1biBqdXN0IGFzIGJlZm9yZToKKworICAjIHBlcmYgdHJhY2UgLXMgc3lzY2FsbC1jb3VudHMucHkKKworU28gdGhvc2UgYXJlIHRoZSBlc3NlbnRpYWwgc3RlcHMgaW4gd3JpdGluZyBhbmQgcnVubmluZyBhIHNjcmlwdC4gIFRoZQorcHJvY2VzcyBjYW4gYmUgZ2VuZXJhbGl6ZWQgdG8gYW55IHRyYWNlcG9pbnQgb3Igc2V0IG9mIHRyYWNlcG9pbnRzCit5b3UncmUgaW50ZXJlc3RlZCBpbiAtIGJhc2ljYWxseSBmaW5kIHRoZSB0cmFjZXBvaW50KHMpIHlvdSdyZQoraW50ZXJlc3RlZCBpbiBieSBsb29raW5nIGF0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBldmVudHMgc2hvd24gYnkKKydwZXJmIGxpc3QnIGFuZC9vciBsb29rIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgZXZlbnRzIGZvcgorZGV0YWlsZWQgZXZlbnQgYW5kIGZpZWxkIGluZm8sIHJlY29yZCB0aGUgY29ycmVzcG9uZGluZyB0cmFjZSBkYXRhCit1c2luZyAncGVyZiByZWNvcmQnLCBwYXNzaW5nIGl0IHRoZSBsaXN0IG9mIGludGVyZXN0aW5nIGV2ZW50cywKK2dlbmVyYXRlIGEgc2tlbGV0b24gc2NyaXB0IHVzaW5nICdwZXJmIHRyYWNlIC1nIHB5dGhvbicgYW5kIG1vZGlmeSB0aGUKK2NvZGUgdG8gYWdncmVnYXRlIGFuZCBkaXNwbGF5IGl0IGZvciB5b3VyIHBhcnRpY3VsYXIgbmVlZHMuCisKK0FmdGVyIHlvdSd2ZSBkb25lIHRoYXQgeW91IG1heSBlbmQgdXAgd2l0aCBhIGdlbmVyYWwtcHVycG9zZSBzY3JpcHQKK3RoYXQgeW91IHdhbnQgdG8ga2VlcCBhcm91bmQgYW5kIGhhdmUgYXZhaWxhYmxlIGZvciBmdXR1cmUgdXNlLiAgQnkKK3dyaXRpbmcgYSBjb3VwbGUgb2YgdmVyeSBzaW1wbGUgc2hlbGwgc2NyaXB0cyBhbmQgcHV0dGluZyB0aGVtIGluIHRoZQorcmlnaHQgcGxhY2UsIHlvdSBjYW4gaGF2ZSB5b3VyIHNjcmlwdCBsaXN0ZWQgYWxvbmdzaWRlIHRoZSBvdGhlcgorc2NyaXB0cyBsaXN0ZWQgYnkgdGhlICdwZXJmIHRyYWNlIC1sJyBjb21tYW5kIGUuZy46CisKKy0tLS0KK3Jvb3RAdHJvcGljYW5hOn4jIHBlcmYgdHJhY2UgLWwKK0xpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHM6CisgIHdvcmtxdWV1ZS1zdGF0cyAgICAgICAgICAgICAgICAgICAgICB3b3JrcXVldWUgc3RhdHMgKGlucy9leGUvY3JlYXRlL2Rlc3Ryb3kpCisgIHdha2V1cC1sYXRlbmN5ICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBtaW4vbWF4L2F2ZyB3YWtldXAgbGF0ZW5jeQorICBydy1ieS1maWxlIDxjb21tPiAgICAgICAgICAgICAgICAgICAgci93IGFjdGl2aXR5IGZvciBhIHByb2dyYW0sIGJ5IGZpbGUKKyAgcnctYnktcGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHIvdyBhY3Rpdml0eQorLS0tLQorCitBIG5pY2Ugc2lkZSBlZmZlY3Qgb2YgZG9pbmcgdGhpcyBpcyB0aGF0IHlvdSBhbHNvIHRoZW4gY2FwdHVyZSB0aGUKK3Byb2JhYmx5IGxlbmd0aHkgJ3BlcmYgcmVjb3JkJyBjb21tYW5kIG5lZWRlZCB0byByZWNvcmQgdGhlIGV2ZW50cyBmb3IKK3RoZSBzY3JpcHQuCisKK1RvIGhhdmUgdGhlIHNjcmlwdCBhcHBlYXIgYXMgYSAnYnVpbHQtaW4nIHNjcmlwdCwgeW91IHdyaXRlIHR3byBzaW1wbGUKK3NjcmlwdHMsIG9uZSBmb3IgcmVjb3JkaW5nIGFuZCBvbmUgZm9yICdyZXBvcnRpbmcnLgorCitUaGUgJ3JlY29yZCcgc2NyaXB0IGlzIGEgc2hlbGwgc2NyaXB0IHdpdGggdGhlIHNhbWUgYmFzZSBuYW1lIGFzIHlvdXIKK3NjcmlwdCwgYnV0IHdpdGggLXJlY29yZCBhcHBlbmRlZC4gIFRoZSBzaGVsbCBzY3JpcHQgc2hvdWxkIGJlIHB1dAoraW50byB0aGUgcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4gZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuCitJbiB0aGF0IHNjcmlwdCwgeW91IHdyaXRlIHRoZSAncGVyZiByZWNvcmQnIGNvbW1hbmQtbGluZSBuZWVkZWQgZm9yCit5b3VyIHNjcmlwdDoKKworLS0tLQorIyBjYXQga2VybmVsLXNvdXJjZS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZWNvcmQKKworIyEvYmluL2Jhc2gKK3BlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUgcmF3X3N5c2NhbGxzOnN5c19lbnRlcgorLS0tLQorCitUaGUgJ3JlcG9ydCcgc2NyaXB0IGlzIGFsc28gYSBzaGVsbCBzY3JpcHQgd2l0aCB0aGUgc2FtZSBiYXNlIG5hbWUgYXMKK3lvdXIgc2NyaXB0LCBidXQgd2l0aCAtcmVwb3J0IGFwcGVuZGVkLiAgSXQgc2hvdWxkIGFsc28gYmUgbG9jYXRlZCBpbgordGhlIHBlcmYvc2NyaXB0cy9weXRob24vYmluIGRpcmVjdG9yeS4gIEluIHRoYXQgc2NyaXB0LCB5b3Ugd3JpdGUgdGhlCisncGVyZiB0cmFjZSAtcycgY29tbWFuZC1saW5lIG5lZWRlZCBmb3IgcnVubmluZyB5b3VyIHNjcmlwdDoKKworLS0tLQorIyBjYXQga2VybmVsLXNvdXJjZS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKKworIyEvYmluL2Jhc2gKKyMgZGVzY3JpcHRpb246IHN5c3RlbS13aWRlIHN5c2NhbGwgY291bnRzCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkKKy0tLS0KKworTm90ZSB0aGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgUHl0aG9uIHNjcmlwdCBnaXZlbiBpbiB0aGUgc2hlbGwgc2NyaXB0CitpcyBpbiB0aGUgbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24gZGlyZWN0b3J5IC0gdGhpcyBpcyB3aGVyZQordGhlIHNjcmlwdCB3aWxsIGJlIGNvcGllZCBieSAnbWFrZSBpbnN0YWxsJyB3aGVuIHlvdSBpbnN0YWxsIHBlcmYuCitGb3IgdGhlIGluc3RhbGxhdGlvbiB0byBpbnN0YWxsIHlvdXIgc2NyaXB0IHRoZXJlLCB5b3VyIHNjcmlwdCBuZWVkcwordG8gYmUgbG9jYXRlZCBpbiB0aGUgcGVyZi9zY3JpcHRzL3B5dGhvbiBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbAorc291cmNlIHRyZWU6CisKKy0tLS0KKyMgbHMgLWFsIGtlcm5lbC1zb3VyY2UvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbgorCityb290QHRyb3BpY2FuYTovaG9tZS90cnovc3JjL3RpcCMgbHMgLWFsIHRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24KK3RvdGFsIDMyCitkcnd4ci14ci14IDQgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MzAgLgorZHJ3eHIteHIteCA0IHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjI5IC4uCitkcnd4ci14ci14IDIgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MjkgYmluCistcnctci0tci0tIDEgdHJ6IHRyeiAyNTQ4IDIwMTAtMDEtMjYgMjI6MjkgY2hlY2stcGVyZi10cmFjZS5weQorZHJ3eHIteHIteCAzIHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjQ5IFBlcmYtVHJhY2UtVXRpbAorLXJ3LXItLXItLSAxIHRyeiB0cnogMTQ2MiAyMDEwLTAxLTI2IDIyOjMwIHN5c2NhbGwtY291bnRzLnB5CistLS0tCisKK09uY2UgeW91J3ZlIGRvbmUgdGhhdCAoZG9uJ3QgZm9yZ2V0IHRvIGRvIGEgbmV3ICdtYWtlIGluc3RhbGwnLAorb3RoZXJ3aXNlIHlvdXIgc2NyaXB0IHdvbid0IHNob3cgdXAgYXQgcnVuLXRpbWUpLCAncGVyZiB0cmFjZSAtbCcKK3Nob3VsZCBzaG93IGEgbmV3IGVudHJ5IGZvciB5b3VyIHNjcmlwdDoKKworLS0tLQorcm9vdEB0cm9waWNhbmE6fiMgcGVyZiB0cmFjZSAtbAorTGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0czoKKyAgd29ya3F1ZXVlLXN0YXRzICAgICAgICAgICAgICAgICAgICAgIHdvcmtxdWV1ZSBzdGF0cyAoaW5zL2V4ZS9jcmVhdGUvZGVzdHJveSkKKyAgd2FrZXVwLWxhdGVuY3kgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIG1pbi9tYXgvYXZnIHdha2V1cCBsYXRlbmN5CisgIHJ3LWJ5LWZpbGUgPGNvbW0+ICAgICAgICAgICAgICAgICAgICByL3cgYWN0aXZpdHkgZm9yIGEgcHJvZ3JhbSwgYnkgZmlsZQorICBydy1ieS1waWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgci93IGFjdGl2aXR5CisgIHN5c2NhbGwtY291bnRzICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBzeXNjYWxsIGNvdW50cworLS0tLQorCitZb3UgY2FuIG5vdyBwZXJmb3JtIHRoZSByZWNvcmQgc3RlcCB2aWEgJ3BlcmYgdHJhY2UgcmVjb3JkJzoKKworICAjIHBlcmYgdHJhY2UgcmVjb3JkIHN5c2NhbGwtY291bnRzCisKK2FuZCBkaXNwbGF5IHRoZSBvdXRwdXQgdXNpbmcgJ3BlcmYgdHJhY2UgcmVwb3J0JzoKKworICAjIHBlcmYgdHJhY2UgcmVwb3J0IHN5c2NhbGwtY291bnRzCisKK1NUQVJURVIgU0NSSVBUUworLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gcXVpY2tseSBnZXQgc3RhcnRlZCB3cml0aW5nIGEgc2NyaXB0IGZvciBhIHBhcnRpY3VsYXIgc2V0IG9mCit0cmFjZSBkYXRhIGJ5IGdlbmVyYXRpbmcgYSBza2VsZXRvbiBzY3JpcHQgdXNpbmcgJ3BlcmYgdHJhY2UgLWcKK3B5dGhvbicgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGFuIGV4aXN0aW5nIHBlcmYuZGF0YSB0cmFjZSBmaWxlLgorVGhhdCB3aWxsIGdlbmVyYXRlIGEgc3RhcnRlciBzY3JpcHQgY29udGFpbmluZyBhIGhhbmRsZXIgZm9yIGVhY2ggb2YKK3RoZSBldmVudCB0eXBlcyBpbiB0aGUgdHJhY2UgZmlsZTsgaXQgc2ltcGx5IHByaW50cyBldmVyeSBhdmFpbGFibGUKK2ZpZWxkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZSBmaWxlLgorCitZb3UgY2FuIGFsc28gbG9vayBhdCB0aGUgZXhpc3Rpbmcgc2NyaXB0cyBpbgorfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3B5dGhvbiBmb3IgdHlwaWNhbCBleGFtcGxlcyBzaG93aW5nIGhvdyB0bworZG8gYmFzaWMgdGhpbmdzIGxpa2UgYWdncmVnYXRlIGV2ZW50IGRhdGEsIHByaW50IHJlc3VsdHMsIGV0Yy4gIEFsc28sCit0aGUgY2hlY2stcGVyZi10cmFjZS5weSBzY3JpcHQsIHdoaWxlIG5vdCBpbnRlcmVzdGluZyBmb3IgaXRzIHJlc3VsdHMsCithdHRlbXB0cyB0byBleGVyY2lzZSBhbGwgb2YgdGhlIG1haW4gc2NyaXB0aW5nIGZlYXR1cmVzLgorCitFVkVOVCBIQU5ETEVSUworLS0tLS0tLS0tLS0tLS0KKworV2hlbiBwZXJmIHRyYWNlIGlzIGludm9rZWQgdXNpbmcgYSB0cmFjZSBzY3JpcHQsIGEgdXNlci1kZWZpbmVkCisnaGFuZGxlciBmdW5jdGlvbicgaXMgY2FsbGVkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZS4gIElmIHRoZXJlJ3MKK25vIGhhbmRsZXIgZnVuY3Rpb24gZGVmaW5lZCBmb3IgYSBnaXZlbiBldmVudCB0eXBlLCB0aGUgZXZlbnQgaXMKK2lnbm9yZWQgKG9yIHBhc3NlZCB0byBhICd0cmFjZV9oYW5kbGVkJyBmdW5jdGlvbiwgc2VlIGJlbG93KSBhbmQgdGhlCituZXh0IGV2ZW50IGlzIHByb2Nlc3NlZC4KKworTW9zdCBvZiB0aGUgZXZlbnQncyBmaWVsZCB2YWx1ZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlCitoYW5kbGVyIGZ1bmN0aW9uOyBzb21lIG9mIHRoZSBsZXNzIGNvbW1vbiBvbmVzIGFyZW4ndCAtIHRob3NlIGFyZQorYXZhaWxhYmxlIGFzIGNhbGxzIGJhY2sgaW50byB0aGUgcGVyZiBleGVjdXRhYmxlIChzZWUgYmVsb3cpLgorCitBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHBlcmYgcmVjb3JkIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcmVjb3JkCithbGwgc2NoZWRfd2FrZXVwIGV2ZW50cyBpbiB0aGUgc3lzdGVtOgorCisgIyBwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHNjaGVkOnNjaGVkX3dha2V1cAorCitUcmFjZXMgbWVhbnQgdG8gYmUgcHJvY2Vzc2VkIHVzaW5nIGEgc2NyaXB0IHNob3VsZCBiZSByZWNvcmRlZCB3aXRoCit0aGUgYWJvdmUgb3B0aW9uczogLWMgMSBzYXlzIHRvIHNhbXBsZSBldmVyeSBldmVudCwgLWEgdG8gZW5hYmxlCitzeXN0ZW0td2lkZSBjb2xsZWN0aW9uLCAtTSB0byBtdWx0aXBsZXggdGhlIG91dHB1dCwgYW5kIC1SIHRvIGNvbGxlY3QKK3JhdyBzYW1wbGVzLgorCitUaGUgZm9ybWF0IGZpbGUgZm9yIHRoZSBzY2hlZF93YWtlcCBldmVudCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZmllbGRzCisoc2VlIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NjaGVkL3NjaGVkX3dha2V1cC9mb3JtYXQpOgorCistLS0tCisgZm9ybWF0OgorICAgICAgICBmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7CisgICAgICAgIGZpZWxkOmludCBjb21tb25fcGlkOworICAgICAgICBmaWVsZDppbnQgY29tbW9uX2xvY2tfZGVwdGg7CisKKyAgICAgICAgZmllbGQ6Y2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworICAgICAgICBmaWVsZDpwaWRfdCBwaWQ7CisgICAgICAgIGZpZWxkOmludCBwcmlvOworICAgICAgICBmaWVsZDppbnQgc3VjY2VzczsKKyAgICAgICAgZmllbGQ6aW50IHRhcmdldF9jcHU7CistLS0tCisKK1RoZSBoYW5kbGVyIGZ1bmN0aW9uIGZvciB0aGlzIGV2ZW50IHdvdWxkIGJlIGRlZmluZWQgYXM6CisKKy0tLS0KK2RlZiBzY2hlZF9fc2NoZWRfd2FrZXVwKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLAorICAgICAgIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisgICAgICAgY29tbSwgcGlkLCBwcmlvLCBzdWNjZXNzLCB0YXJnZXRfY3B1KToKKyAgICAgICBwYXNzCistLS0tCisKK1RoZSBoYW5kbGVyIGZ1bmN0aW9uIHRha2VzIHRoZSBmb3JtIHN1YnN5c3RlbV9fZXZlbnRfbmFtZS4KKworVGhlIGNvbW1vbl8qIGFyZ3VtZW50cyBpbiB0aGUgaGFuZGxlcidzIGFyZ3VtZW50IGxpc3QgYXJlIHRoZSBzZXQgb2YKK2FyZ3VtZW50cyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzOyBzb21lIG9mIHRoZSBmaWVsZHMgY29ycmVzcG9uZAordG8gdGhlIGNvbW1vbl8qIGZpZWxkcyBpbiB0aGUgZm9ybWF0IGZpbGUsIGJ1dCBzb21lIGFyZSBzeW50aGVzaXplZCwKK2FuZCBzb21lIG9mIHRoZSBjb21tb25fKiBmaWVsZHMgYXJlbid0IGNvbW1vbiBlbm91Z2ggdG8gdG8gYmUgcGFzc2VkCit0byBldmVyeSBldmVudCBhcyBhcmd1bWVudHMgYnV0IGFyZSBhdmFpbGFibGUgYXMgbGlicmFyeSBmdW5jdGlvbnMuCisKK0hlcmUncyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggb2YgdGhlIGludmFyaWFudCBldmVudCBhcmdzOgorCisgZXZlbnRfbmFtZSAJICAJICAgIHRoZSBuYW1lIG9mIHRoZSBldmVudCBhcyB0ZXh0CisgY29udGV4dAkJICAgIGFuIG9wYXF1ZSAnY29va2llJyB1c2VkIGluIGNhbGxzIGJhY2sgaW50byBwZXJmCisgY29tbW9uX2NwdQkJICAgIHRoZSBjcHUgdGhlIGV2ZW50IG9jY3VycmVkIG9uCisgY29tbW9uX3NlY3MJCSAgICB0aGUgc2VjcyBwb3J0aW9uIG9mIHRoZSBldmVudCB0aW1lc3RhbXAKKyBjb21tb25fbnNlY3MJCSAgICB0aGUgbnNlY3MgcG9ydGlvbiBvZiB0aGUgZXZlbnQgdGltZXN0YW1wCisgY29tbW9uX3BpZAkJICAgIHRoZSBwaWQgb2YgdGhlIGN1cnJlbnQgdGFzaworIGNvbW1vbl9jb21tCQkgICAgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcworCitBbGwgb2YgdGhlIHJlbWFpbmluZyBmaWVsZHMgaW4gdGhlIGV2ZW50J3MgZm9ybWF0IGZpbGUgaGF2ZQorY291bnRlcnBhcnRzIGFzIGhhbmRsZXIgZnVuY3Rpb24gYXJndW1lbnRzIG9mIHRoZSBzYW1lIG5hbWUsIGFzIGNhbiBiZQorc2VlbiBpbiB0aGUgZXhhbXBsZSBhYm92ZS4KKworVGhlIGFib3ZlIHByb3ZpZGVzIHRoZSBiYXNpY3MgbmVlZGVkIHRvIGRpcmVjdGx5IGFjY2VzcyBldmVyeSBmaWVsZCBvZgorZXZlcnkgZXZlbnQgaW4gYSB0cmFjZSwgd2hpY2ggY292ZXJzIDkwJSBvZiB3aGF0IHlvdSBuZWVkIHRvIGtub3cgdG8KK3dyaXRlIGEgdXNlZnVsIHRyYWNlIHNjcmlwdC4gIFRoZSBzZWN0aW9ucyBiZWxvdyBjb3ZlciB0aGUgcmVzdC4KKworU0NSSVBUIExBWU9VVAorLS0tLS0tLS0tLS0tLQorCitFdmVyeSBwZXJmIHRyYWNlIFB5dGhvbiBzY3JpcHQgc2hvdWxkIHN0YXJ0IGJ5IHNldHRpbmcgdXAgYSBQeXRob24KK21vZHVsZSBzZWFyY2ggcGF0aCBhbmQgJ2ltcG9ydCdpbmcgYSBmZXcgc3VwcG9ydCBtb2R1bGVzIChzZWUgbW9kdWxlCitkZXNjcmlwdGlvbnMgYmVsb3cpOgorCistLS0tCisgaW1wb3J0IG9zCisgaW1wb3J0IHN5cworCisgc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJICAgICAgJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCisgZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKKyBmcm9tIENvcmUgaW1wb3J0ICoKKy0tLS0KKworVGhlIHJlc3Qgb2YgdGhlIHNjcmlwdCBjYW4gY29udGFpbiBoYW5kbGVyIGZ1bmN0aW9ucyBhbmQgc3VwcG9ydAorZnVuY3Rpb25zIGluIGFueSBvcmRlci4KKworQXNpZGUgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgZGlzY3Vzc2VkIGFib3ZlLCBldmVyeSBzY3JpcHQKK2NhbiBpbXBsZW1lbnQgYSBzZXQgb2Ygb3B0aW9uYWwgZnVuY3Rpb25zOgorCisqdHJhY2VfYmVnaW4qLCBpZiBkZWZpbmVkLCBpcyBjYWxsZWQgYmVmb3JlIGFueSBldmVudCBpcyBwcm9jZXNzZWQgYW5kCitnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIHNldHVwIHRhc2tzOgorCistLS0tCitkZWYgdHJhY2VfYmVnaW46CisgICAgcGFzcworLS0tLQorCisqdHJhY2VfZW5kKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGFsbCBldmVudHMgaGF2ZSBiZWVuCisgcHJvY2Vzc2VkIGFuZCBnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIGVuZC1vZi1zY3JpcHQgdGFza3MsIHN1Y2gKKyBhcyBkaXNwbGF5IHJlc3VsdHM6CisKKy0tLS0KK2RlZiB0cmFjZV9lbmQ6CisgICAgcGFzcworLS0tLQorCisqdHJhY2VfdW5oYW5kbGVkKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGZvciBhbnkgZXZlbnQgdGhhdAorIGRvZXNuJ3QgaGF2ZSBhIGhhbmRsZXIgZXhwbGljaXRseSBkZWZpbmVkIGZvciBpdC4gIFRoZSBzdGFuZGFyZCBzZXQKKyBvZiBjb21tb24gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW50byBpdDoKKworLS0tLQorZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywKKyAgICAgICAgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSk6CisgICAgcGFzcworLS0tLQorCitUaGUgcmVtYWluaW5nIHNlY3Rpb25zIHByb3ZpZGUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb2YgdGhlIGF2YWlsYWJsZQorYnVpbHQtaW4gcGVyZiB0cmFjZSBQeXRob24gbW9kdWxlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMuCisKK0FWQUlMQUJMRSBNT0RVTEVTIEFORCBGVU5DVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgYXZhaWxhYmxlCit2aWEgdGhlIHZhcmlvdXMgcGVyZiB0cmFjZSBQeXRob24gbW9kdWxlcy4gIFRvIHVzZSB0aGUgZnVuY3Rpb25zIGFuZAordmFyaWFibGVzIGZyb20gdGhlIGdpdmVuIG1vZHVsZSwgYWRkIHRoZSBjb3JyZXNwb25kaW5nICdmcm9tIFhYWFgKK2ltcG9ydCcgbGluZSB0byB5b3VyIHBlcmYgdHJhY2Ugc2NyaXB0LgorCitDb3JlLnB5IE1vZHVsZQorfn5+fn5+fn5+fn5+fn4KKworVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgc29tZSBlc3NlbnRpYWwgZnVuY3Rpb25zIHRvIHVzZXIgc2NyaXB0cy4KKworVGhlICpmbGFnX3N0ciogYW5kICpzeW1ib2xfc3RyKiBmdW5jdGlvbnMgcHJvdmlkZSBodW1hbi1yZWFkYWJsZQorc3RyaW5ncyBmb3IgZmxhZyBhbmQgc3ltYm9saWMgZmllbGRzLiAgVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgc3RyaW5ncworYW5kIHZhbHVlcyBwYXJzZWQgZnJvbSB0aGUgJ3ByaW50IGZtdCcgZmllbGRzIG9mIHRoZSBldmVudCBmb3JtYXQKK2ZpbGVzOgorCisgIGZsYWdfc3RyKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkX3ZhbHVlKSAtIHJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpb24gY29ycmVzcG9uZGluZyB0byBmaWVsZF92YWx1ZSBmb3IgdGhlIGZsYWcgZmllbGQgZmllbGRfbmFtZSBvZiBldmVudCBldmVudF9uYW1lCisgIHN5bWJvbF9zdHIoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgZmllbGRfdmFsdWUpIC0gcmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGlvbiBjb3JyZXNwb25kaW5nIHRvIGZpZWxkX3ZhbHVlIGZvciB0aGUgc3ltYm9saWMgZmllbGQgZmllbGRfbmFtZSBvZiBldmVudCBldmVudF9uYW1lCisKK1RoZSAqYXV0b2RpY3QqIGZ1bmN0aW9uIHJldHVybnMgYSBzcGVjaWFsIHNwZWNpYWwga2luZCBvZiBQeXRob24KK2RpY3Rpb25hcnkgdGhhdCBpbXBsZW1lbnRzIFBlcmwncyAnYXV0b3ZpdmlmeWluZycgaGFzaGVzIGluIFB5dGhvbgoraS5lLiB3aXRoIGF1dG92aXZpZnlpbmcgaGFzaGVzLCB5b3UgY2FuIGFzc2lnbiBuZXN0ZWQgaGFzaCB2YWx1ZXMKK3dpdGhvdXQgaGF2aW5nIHRvIGdvIHRvIHRoZSB0cm91YmxlIG9mIGNyZWF0aW5nIGludGVybWVkaWF0ZSBsZXZlbHMgaWYKK3RoZXkgZG9uJ3QgZXhpc3QuCisKKyAgYXV0b2RpY3QoKSAtIHJldHVybnMgYW4gYXV0b3ZpdmlmeWluZyBkaWN0aW9uYXJ5IGluc3RhbmNlCisKKworcGVyZl90cmFjZV9jb250ZXh0IE1vZHVsZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTb21lIG9mIHRoZSAnY29tbW9uJyBmaWVsZHMgaW4gdGhlIGV2ZW50IGZvcm1hdCBmaWxlIGFyZW4ndCBhbGwgdGhhdAorY29tbW9uLCBidXQgbmVlZCB0byBiZSBtYWRlIGFjY2Vzc2libGUgdG8gdXNlciBzY3JpcHRzIG5vbmV0aGVsZXNzLgorCitwZXJmX3RyYWNlX2NvbnRleHQgZGVmaW5lcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0bworYWNjZXNzIHRoaXMgZGF0YSBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBldmVudC4gIEVhY2ggb2YgdGhlc2UKK2Z1bmN0aW9ucyBleHBlY3RzIGEgY29udGV4dCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlCitjb250ZXh0IHZhcmlhYmxlIHBhc3NlZCBpbnRvIGV2ZXJ5IGV2ZW50IGhhbmRsZXIgYXMgdGhlIHNlY29uZAorYXJndW1lbnQuCisKKyBjb21tb25fcGMoY29udGV4dCkgLSByZXR1cm5zIGNvbW1vbl9wcmVlbXB0IGNvdW50IGZvciB0aGUgY3VycmVudCBldmVudAorIGNvbW1vbl9mbGFncyhjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX2ZsYWdzIGZvciB0aGUgY3VycmVudCBldmVudAorIGNvbW1vbl9sb2NrX2RlcHRoKGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fbG9ja19kZXB0aCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKworVXRpbC5weSBNb2R1bGUKK35+fn5+fn5+fn5+fn5+CisKK1ZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHBlcmYgdHJhY2U6CisKKyAgbnNlY3Moc2VjcywgbnNlY3MpIC0gcmV0dXJucyB0b3RhbCBuc2VjcyBnaXZlbiBzZWNzL25zZWNzIHBhaXIKKyAgbnNlY3Nfc2Vjcyhuc2VjcykgLSByZXR1cm5zIHdob2xlIHNlY3MgcG9ydGlvbiBnaXZlbiBuc2VjcworICBuc2Vjc19uc2Vjcyhuc2VjcykgLSByZXR1cm5zIG5zZWNzIHJlbWFpbmRlciBnaXZlbiBuc2VjcworICBuc2Vjc19zdHIobnNlY3MpIC0gcmV0dXJucyBwcmludGFibGUgc3RyaW5nIGluIHRoZSBmb3JtIHNlY3MubnNlY3MKKyAgYXZnKHRvdGFsLCBuKSAtIHJldHVybnMgYXZlcmFnZSBnaXZlbiBhIHN1bSBhbmQgYSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi10cmFjZVsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0CmluZGV4IDYwZTU5MDAuLjg4NzkyOTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS50eHQKQEAgLTE5LDYgKzE5LDExIEBACiAgICdwZXJmIHRyYWNlJyB0byBzZWUgYSBkZXRhaWxlZCB0cmFjZSBvZiB0aGUgd29ya2xvYWQgdGhhdCB3YXMKICAgcmVjb3JkZWQuCiAKKyAgWW91IGNhbiBhbHNvIHJ1biBhIHNldCBvZiBwcmUtY2FubmVkIHNjcmlwdHMgdGhhdCBhZ2dyZWdhdGUgYW5kCisgIHN1bW1hcml6ZSB0aGUgcmF3IHRyYWNlIGRhdGEgaW4gdmFyaW91cyB3YXlzICh0aGUgbGlzdCBvZiBzY3JpcHRzIGlzCisgIGF2YWlsYWJsZSB2aWEgJ3BlcmYgdHJhY2UgLWwnKS4gIFRoZSBmb2xsb3dpbmcgdmFyaWFudHMgYWxsb3cgeW91IHRvCisgIHJlY29yZCBhbmQgcnVuIHRob3NlIHNjcmlwdHM6CisKICAgJ3BlcmYgdHJhY2UgcmVjb3JkIDxzY3JpcHQ+JyB0byByZWNvcmQgdGhlIGV2ZW50cyByZXF1aXJlZCBmb3IgJ3BlcmYKICAgdHJhY2UgcmVwb3J0Jy4gIDxzY3JpcHQ+IGlzIHRoZSBuYW1lIGRpc3BsYXllZCBpbiB0aGUgb3V0cHV0IG9mCiAgICdwZXJmIHRyYWNlIC0tbGlzdCcgaS5lLiB0aGUgYWN0dWFsIHNjcmlwdCBuYW1lIG1pbnVzIGFueSBsYW5ndWFnZQpAQCAtMzEsNiArMzYsOSBAQAogICByZWNvcmQgPHNjcmlwdD4nIGlzIHVzZWQgYW5kIHNob3VsZCBiZSBwcmVzZW50IGZvciB0aGlzIGNvbW1hbmQgdG8KICAgc3VjY2VlZC4KIAorICBTZWUgdGhlICdTRUUgQUxTTycgc2VjdGlvbiBmb3IgbGlua3MgdG8gbGFuZ3VhZ2Utc3BlY2lmaWMKKyAgaW5mb3JtYXRpb24gb24gaG93IHRvIHdyaXRlIGFuZCBydW4geW91ciBvd24gdHJhY2Ugc2NyaXB0cy4KKwogT1BUSU9OUwogLS0tLS0tLQogLUQ6OgpAQCAtNDUsOSArNTMsMTEgQEAKIC0tbGlzdD06OgogICAgICAgICBEaXNwbGF5IGEgbGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0cy4KIAotLXM6OgorLXMgWydsYW5nJ106OgogLS1zY3JpcHQ9OjoKICAgICAgICAgUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggdGhlIGdpdmVuIHNjcmlwdCAoW2xhbmddOnNjcmlwdFsuZXh0XSkuCisJSWYgdGhlIHN0cmluZyAnbGFuZycgaXMgc3BlY2lmaWVkIGluIHBsYWNlIG9mIGEgc2NyaXB0IG5hbWUsIGEKKyAgICAgICAgbGlzdCBvZiBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIHdpbGwgYmUgZGlzcGxheWVkIGluc3RlYWQuCiAKIC1nOjoKIC0tZ2VuLXNjcmlwdD06OgpAQCAtNTYsNCArNjYsNSBAQAogCiBTRUUgQUxTTwogLS0tLS0tLS0KLWxpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXRyYWNlLXBlcmxbMV0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXRyYWNlLXBlcmxbMV0sCitsaW5rcGVyZjpwZXJmLXRyYWNlLXB5dGhvblsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYudHh0CmluZGV4IDY5YzgzMjUuLjBlZWIyNDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi50eHQKQEAgLTEyLDcgKzEyLDcgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1QZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggYXJlIGFyZSBhIG5ldyBrZXJuZWwtYmFzZWQgc3Vic3lzdGVtCitQZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggYXJlIGEgbmV3IGtlcm5lbC1iYXNlZCBzdWJzeXN0ZW0KIHRoYXQgcHJvdmlkZSBhIGZyYW1ld29yayBmb3IgYWxsIHRoaW5ncyBwZXJmb3JtYW5jZSBhbmFseXNpcy4gSXQKIGNvdmVycyBoYXJkd2FyZSBsZXZlbCAoQ1BVL1BNVSwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0KSBmZWF0dXJlcwogYW5kIHNvZnR3YXJlIGZlYXR1cmVzIChzb2Z0d2FyZSBjb3VudGVycywgdHJhY2Vwb2ludHMpIGFzIHdlbGwuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCAyZTdmYTNhLi41NGE1YjUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTI4NiwxMSArMjg2LDcgQEAKIFNDUklQVF9TSCA9CiBURVNUX1BST0dSQU1TID0KIAotIwotIyBObyBzY3JpcHRzIHJpZ2h0IG5vdzoKLSMKLQotIyBTQ1JJUFRfU0ggKz0gcGVyZi1hbS5zaAorU0NSSVBUX1NIICs9IHBlcmYtYXJjaGl2ZS5zaAogCiAjCiAjIE5vIFBlcmwgc2NyaXB0cyByaWdodCBub3c6CkBAIC0zMTUsOSArMzExLDYgQEAKICMgTGlzdCBidWlsdC1pbiBjb21tYW5kICRDIHdob3NlIGltcGxlbWVudGF0aW9uIGNtZF8kQygpIGlzIG5vdCBpbgogIyBidWlsdGluLSRDLm8gYnV0IGlzIGxpbmtlZCBpbiBhcyBwYXJ0IG9mIHNvbWUgb3RoZXIgY29tbWFuZC4KICMKLSMgTm9uZSByaWdodCBub3c6Ci0jCi0jIEJVSUxUX0lOUyArPSBwZXJmLWluaXQgJFgKIAogIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYW5kICdpbnN0YWxsJyB3aWxsIGluc3RhbGwsIGluIHBlcmZleGVjZGlyCiBBTExfUFJPR1JBTVMgPSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCkBAIC0zNDAsNiArMzMzLDcgQEAKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L2xpc3QuaAorTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9oYXNoLmgKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvc3RyaW5naWZ5LmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0zNjMsMTIgKzM1NywxNCBAQAogTElCX0ggKz0gcGVyZi5oCiBMSUJfSCArPSB1dGlsL2NhY2hlLmgKIExJQl9IICs9IHV0aWwvY2FsbGNoYWluLmgKK0xJQl9IICs9IHV0aWwvYnVpbGQtaWQuaAogTElCX0ggKz0gdXRpbC9kZWJ1Zy5oCiBMSUJfSCArPSB1dGlsL2RlYnVnZnMuaAogTElCX0ggKz0gdXRpbC9ldmVudC5oCiBMSUJfSCArPSB1dGlsL2V4ZWNfY21kLmgKIExJQl9IICs9IHV0aWwvdHlwZXMuaAogTElCX0ggKz0gdXRpbC9sZXZlbnNodGVpbi5oCitMSUJfSCArPSB1dGlsL21hcC5oCiBMSUJfSCArPSB1dGlsL3BhcnNlLW9wdGlvbnMuaAogTElCX0ggKz0gdXRpbC9wYXJzZS1ldmVudHMuaAogTElCX0ggKz0gdXRpbC9xdW90ZS5oCkBAIC0zODksMTIgKzM4NSwxMiBAQAogTElCX0ggKz0gdXRpbC9oaXN0LmgKIExJQl9IICs9IHV0aWwvdGhyZWFkLmgKIExJQl9IICs9IHV0aWwvdHJhY2UtZXZlbnQuaAotTElCX0ggKz0gdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKIExJQl9IICs9IHV0aWwvcHJvYmUtZmluZGVyLmgKIExJQl9IICs9IHV0aWwvcHJvYmUtZXZlbnQuaAogCiBMSUJfT0JKUyArPSB1dGlsL2Fic3BhdGgubwogTElCX09CSlMgKz0gdXRpbC9hbGlhcy5vCitMSUJfT0JKUyArPSB1dGlsL2J1aWxkLWlkLm8KIExJQl9PQkpTICs9IHV0aWwvY29uZmlnLm8KIExJQl9PQkpTICs9IHV0aWwvY3R5cGUubwogTElCX09CSlMgKz0gdXRpbC9kZWJ1Z2ZzLm8KQEAgLTQzMSwxMiArNDI3LDEyIEBACiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXBhcnNlLm8KIExJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtcmVhZC5vCiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LWluZm8ubwotTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1wZXJsLm8KK0xJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLm8KIExJQl9PQkpTICs9IHV0aWwvc3ZnaGVscGVyLm8KIExJQl9PQkpTICs9IHV0aWwvc29ydC5vCiBMSUJfT0JKUyArPSB1dGlsL2hpc3QubwotTElCX09CSlMgKz0gdXRpbC9kYXRhX21hcC5vCiBMSUJfT0JKUyArPSB1dGlsL3Byb2JlLWV2ZW50Lm8KK0xJQl9PQkpTICs9IHV0aWwvdXRpbC5vCiAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWFubm90YXRlLm8KIApAQCAtNDUxLDYgKzQ0Nyw3IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1oZWxwLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXNjaGVkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWJ1aWxkaWQtbGlzdC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1idWlsZGlkLWNhY2hlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWxpc3QubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcmVjb3JkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlcG9ydC5vCkBAIC00NjAsNiArNDU3LDcgQEAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXRyYWNlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXByb2JlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWttZW0ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbG9jay5vCiAKIFBFUkZMSUJTID0gJChMSUJfRklMRSkKIApAQCAtNTIwLDkgKzUxOCwyMyBAQAogCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBFUkwKIGVsc2UKIAlBTExfTERGTEFHUyArPSAkKFBFUkxfRU1CRURfTERPUFRTKQorCUxJQl9PQkpTICs9IHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5vCiAJTElCX09CSlMgKz0gc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8KIGVuZGlmCiAKK2lmbmRlZiBOT19MSUJQWVRIT04KK1BZVEhPTl9FTUJFRF9MRE9QVFMgPSBgcHl0aG9uLWNvbmZpZyAtLWxkZmxhZ3MgMj4vZGV2L251bGxgCitQWVRIT05fRU1CRURfQ0NPUFRTID0gYHB5dGhvbi1jb25maWcgLS1jZmxhZ3MgMj4vZGV2L251bGxgCitlbmRpZgorCitpZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8UHl0aG9uLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBQeV9Jbml0aWFsaXplKCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChQWVRIT05fRU1CRURfQ0NPUFRTKSAtbyAvZGV2L251bGwgJChQWVRIT05fRU1CRURfTERPUFRTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBZVEhPTgorZWxzZQorCUFMTF9MREZMQUdTICs9ICQoUFlUSE9OX0VNQkVEX0xET1BUUykKKwlMSUJfT0JKUyArPSB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5vCisJTElCX09CSlMgKz0gc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQubworZW5kaWYKKwogaWZkZWYgTk9fREVNQU5HTEUKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19ERU1BTkdMRQogZWxzZQpAQCAtODk0LDEyICs5MDYsMTggQEAKIHV0aWwvZmluZF9uZXh0X2JpdC5vOiAuLi8uLi9saWIvZmluZF9uZXh0X2JpdC5jIFBFUkYtQ0ZMQUdTCiAJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL2ZpbmRfbmV4dF9iaXQubyAtYyAkKEFMTF9DRkxBR1MpIC1ERVRDX1BFUkZDT05GSUc9JyIkKEVUQ19QRVJGQ09ORklHX1NRKSInICQ8CiAKLXV0aWwvdHJhY2UtZXZlbnQtcGVybC5vOiB1dGlsL3RyYWNlLWV2ZW50LXBlcmwuYyBQRVJGLUNGTEFHUwotCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC90cmFjZS1ldmVudC1wZXJsLm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXNoYWRvdyAkPAordXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLm86IHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwubyAtYyAkKEFMTF9DRkxBR1MpICQoUEVSTF9FTUJFRF9DQ09QVFMpIC1Xbm8tcmVkdW5kYW50LWRlY2xzIC1Xbm8tc3RyaWN0LXByb3RvdHlwZXMgLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2hhZG93ICQ8CiAKIHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vOiBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYyBQRVJGLUNGTEFHUwogCSQoUVVJRVRfQ0MpJChDQykgLW8gc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW5lc3RlZC1leHRlcm5zICQ8CiAKK3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLm86IHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMgUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vIHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBZVEhPTl9FTUJFRF9DQ09QVFMpIC1Xbm8tcmVkdW5kYW50LWRlY2xzIC1Xbm8tc3RyaWN0LXByb3RvdHlwZXMgLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2hhZG93ICQ8CisKK3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm86IHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vIHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBZVEhPTl9FTUJFRF9DQ09QVFMpIC1Xbm8tcmVkdW5kYW50LWRlY2xzIC1Xbm8tc3RyaWN0LXByb3RvdHlwZXMgLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tbmVzdGVkLWV4dGVybnMgJDwKKwogcGVyZi0lJFg6ICUubyAkKFBFUkZMSUJTKQogCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChMSUJTKQogCkBAIC0xMDA5LDkgKzEwMjcsMTYgQEAKIAkkKElOU1RBTEwpIHBlcmYkWCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScKIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL2JpbicKKwkkKElOU1RBTEwpIHBlcmYtYXJjaGl2ZSAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCiAJJChJTlNUQUxMKSBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlLyogLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCiAJJChJTlNUQUxMKSBzY3JpcHRzL3BlcmwvKi5wbCAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsJwogCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsL2Jpbi8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3BlcmwvYmluJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcHl0aG9uL2JpbicKKwkkKElOU1RBTEwpIHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCisJJChJTlNUQUxMKSBzY3JpcHRzL3B5dGhvbi8qLnB5IC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbicKKwkkKElOU1RBTEwpIHNjcmlwdHMvcHl0aG9uL2Jpbi8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9iaW4nCisKIGlmZGVmIEJVSUxUX0lOUwogCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKScKIAkkKElOU1RBTEwpICQoQlVJTFRfSU5TKSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCmluZGV4IDU5M2ZmMjUuLjVlYzVkZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCkBAIC01MywzMiArNTMsMjAgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN5bV9oaXN0X2ZpbHRlcjsKIAotc3RhdGljIGludCBzeW1ib2xfZmlsdGVyKHN0cnVjdCBtYXAgKm1hcCBfX3VzZWQsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3N0YXRpYyBpbnQgc3ltX19hbGxvY19oaXN0KHN0cnVjdCBzeW1ib2wgKnNlbGYpCiB7Ci0JaWYgKHN5bV9oaXN0X2ZpbHRlciA9PSBOVUxMIHx8Ci0JICAgIHN0cmNtcChzeW0tPm5hbWUsIHN5bV9oaXN0X2ZpbHRlcikgPT0gMCkgewotCQlzdHJ1Y3Qgc3ltX3ByaXYgKnByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKLQkJY29uc3QgaW50IHNpemUgPSAoc2l6ZW9mKCpwcml2LT5oaXN0KSArCi0JCQkJICAoc3ltLT5lbmQgLSBzeW0tPnN0YXJ0KSAqIHNpemVvZih1NjQpKTsKKwlzdHJ1Y3Qgc3ltX3ByaXYgKnByaXYgPSBzeW1ib2xfX3ByaXYoc2VsZik7CisJY29uc3QgaW50IHNpemUgPSAoc2l6ZW9mKCpwcml2LT5oaXN0KSArCisJCQkgIChzZWxmLT5lbmQgLSBzZWxmLT5zdGFydCkgKiBzaXplb2YodTY0KSk7CiAKLQkJcHJpdi0+aGlzdCA9IG1hbGxvYyhzaXplKTsKLQkJaWYgKHByaXYtPmhpc3QpCi0JCQltZW1zZXQocHJpdi0+aGlzdCwgMCwgc2l6ZSk7Ci0JCXJldHVybiAwOwotCX0KLQkvKgotCSAqIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGZpbHRlciBpdCBvdXQsIGFzIHdlIGRvbid0IHdhbnQgdG8gZ28gdGhydSBzeW1ib2xzCi0JICogd2UncmUgbm90IGludGVyZXN0ZWQsIGFuZCBpZiBhIERTTyBlbmRzIHVwIHdpdGggbm8gc3ltYm9scywgZGVsZXRlIGl0IHRvbywKLQkgKiBidXQgcmlnaHQgbm93IHRoZSBrZXJuZWwgbG9hZGluZyByb3V0aW5lcyBpbiBzeW1ib2wuYyBiYWlsIG91dCBpZiBubyBzeW1ib2xzCi0JICogYXJlIGZvdW5kLCBmaXggaXQgbGF0ZXIuCi0JICovCi0JcmV0dXJuIDA7CisJcHJpdi0+aGlzdCA9IHphbGxvYyhzaXplKTsKKwlyZXR1cm4gcHJpdi0+aGlzdCA9PSBOVUxMID8gLTEgOiAwOwogfQogCiAvKgogICogY29sbGVjdCBoaXN0b2dyYW0gY291bnRzCiAgKi8KLXN0YXRpYyB2b2lkIGhpc3RfaGl0KHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgdTY0IGlwKQorc3RhdGljIGludCBhbm5vdGF0ZV9faGlzdF9oaXQoc3RydWN0IGhpc3RfZW50cnkgKmhlLCB1NjQgaXApCiB7CiAJdW5zaWduZWQgaW50IHN5bV9zaXplLCBvZmZzZXQ7CiAJc3RydWN0IHN5bWJvbCAqc3ltID0gaGUtPnN5bTsKQEAgLTg4LDgzICs3NiwxMjcgQEAKIAloZS0+Y291bnQrKzsKIAogCWlmICghc3ltIHx8ICFoZS0+bWFwKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJcHJpdiA9IHN5bWJvbF9fcHJpdihzeW0pOwotCWlmICghcHJpdi0+aGlzdCkKLQkJcmV0dXJuOworCWlmIChwcml2LT5oaXN0ID09IE5VTEwgJiYgc3ltX19hbGxvY19oaXN0KHN5bSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXN5bV9zaXplID0gc3ltLT5lbmQgLSBzeW0tPnN0YXJ0OwogCW9mZnNldCA9IGlwIC0gc3ltLT5zdGFydDsKIAotCWlmICh2ZXJib3NlKQotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBpcD0lTHhcbiIsIF9fZnVuY19fLAotCQkJaGUtPm1hcC0+dW5tYXBfaXAoaGUtPm1hcCwgaXApKTsKKwlwcl9kZWJ1ZzMoIiVzOiBpcD0lI0x4XG4iLCBfX2Z1bmNfXywgaGUtPm1hcC0+dW5tYXBfaXAoaGUtPm1hcCwgaXApKTsKIAogCWlmIChvZmZzZXQgPj0gc3ltX3NpemUpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAloID0gcHJpdi0+aGlzdDsKIAloLT5zdW0rKzsKIAloLT5pcFtvZmZzZXRdKys7CiAKLQlpZiAodmVyYm9zZSA+PSAzKQotCQlwcmludGYoIiVwICVzOiBjb3VudCsrIFtpcDogJXAsICUwOEx4XSA9PiAlTGRcbiIsCi0JCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWhlLT5zeW0tPnN0YXJ0LAotCQkJaGUtPnN5bS0+bmFtZSwKLQkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpaXAsIGlwIC0gaGUtPnN5bS0+c3RhcnQsCi0JCQloLT5pcFtvZmZzZXRdKTsKKwlwcl9kZWJ1ZzMoIiUjTHggJXM6IGNvdW50KysgW2lwOiAlI0x4LCAlI0x4XSA9PiAlTGRcbiIsIGhlLT5zeW0tPnN0YXJ0LAorCQkgIGhlLT5zeW0tPm5hbWUsIGlwLCBpcCAtIGhlLT5zeW0tPnN0YXJ0LCBoLT5pcFtvZmZzZXRdKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCiAJCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwgdTY0IGNvdW50KQogewogCWJvb2wgaGl0OwotCXN0cnVjdCBoaXN0X2VudHJ5ICpoZSA9IF9fcGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzZWxmLCBhbCwgTlVMTCwKLQkJCQkJCQkgICAgICAgY291bnQsICZoaXQpOworCXN0cnVjdCBoaXN0X2VudHJ5ICpoZTsKKworCWlmIChzeW1faGlzdF9maWx0ZXIgIT0gTlVMTCAmJgorCSAgICAoYWwtPnN5bSA9PSBOVUxMIHx8IHN0cmNtcChzeW1faGlzdF9maWx0ZXIsIGFsLT5zeW0tPm5hbWUpICE9IDApKSB7CisJCS8qIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBhIHN5bWJvbCBuYW1lZCBzeW1faGlzdF9maWx0ZXIgKi8KKwkJaWYgKGFsLT5zeW0gIT0gTlVMTCkgeworCQkJcmJfZXJhc2UoJmFsLT5zeW0tPnJiX25vZGUsCisJCQkJICZhbC0+bWFwLT5kc28tPnN5bWJvbHNbYWwtPm1hcC0+dHlwZV0pOworCQkJc3ltYm9sX19kZWxldGUoYWwtPnN5bSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaGUgPSBfX3BlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2VsZiwgYWwsIE5VTEwsIGNvdW50LCAmaGl0KTsKIAlpZiAoaGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaGlzdF9oaXQoaGUsIGFsLT5hZGRyKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiBhbm5vdGF0ZV9faGlzdF9oaXQoaGUsIGFsLT5hZGRyKTsKIH0KIAogc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICVwXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCi0JCSAgICBldmVudC0+aXAucGlkLCAodm9pZCAqKShsb25nKWV2ZW50LT5pcC5pcCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZDogJSNMeFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLmlwKTsKIAotCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgc3ltYm9sX2ZpbHRlcikgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCi0JCQlldmVudC0+aGVhZGVyLnR5cGUpOworCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgTlVMTCkgPCAwKSB7CisJCXByX3dhcm5pbmcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJICAgZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWlmICghYWwuZmlsdGVyZWQgJiYgcGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzZXNzaW9uLCAmYWwsIDEpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCAiCi0JCQkJInNraXBwaW5nIGV2ZW50XG4iKTsKKwkJcHJfd2FybmluZygicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCAiCisJCQkgICAic2tpcHBpbmcgZXZlbnRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfbGluZShGSUxFICpmaWxlLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBsZW4pCitzdHJ1Y3Qgb2JqZHVtcF9saW5lIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJczY0CQkgb2Zmc2V0OworCWNoYXIJCSAqbGluZTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZHVtcF9saW5lICpvYmpkdW1wX2xpbmVfX25ldyhzNjQgb2Zmc2V0LCBjaGFyICpsaW5lKQoreworCXN0cnVjdCBvYmpkdW1wX2xpbmUgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CisKKwlpZiAoc2VsZiAhPSBOVUxMKSB7CisJCXNlbGYtPm9mZnNldCA9IG9mZnNldDsKKwkJc2VsZi0+bGluZSA9IGxpbmU7CisJfQorCisJcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyB2b2lkIG9iamR1bXBfbGluZV9fZnJlZShzdHJ1Y3Qgb2JqZHVtcF9saW5lICpzZWxmKQoreworCWZyZWUoc2VsZi0+bGluZSk7CisJZnJlZShzZWxmKTsKK30KKworc3RhdGljIHZvaWQgb2JqZHVtcF9fYWRkX2xpbmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IG9iamR1bXBfbGluZSAqbGluZSkKK3sKKwlsaXN0X2FkZF90YWlsKCZsaW5lLT5ub2RlLCBoZWFkKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmpkdW1wX2xpbmUgKm9iamR1bXBfX2dldF9uZXh0X2lwX2xpbmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJCSAgICAgIHN0cnVjdCBvYmpkdW1wX2xpbmUgKnBvcykKK3sKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHBvcywgaGVhZCwgbm9kZSkKKwkJaWYgKHBvcy0+b2Zmc2V0ID49IDApCisJCQlyZXR1cm4gcG9zOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbGluZShGSUxFICpmaWxlLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsCisJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltID0gaGUtPnN5bTsKKwlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpvYmpkdW1wX2xpbmU7CiAJY2hhciAqbGluZSA9IE5VTEwsICp0bXAsICp0bXAyOwotCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2xpbmU7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKnByZXZfY29sb3I7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKIAlzaXplX3QgbGluZV9sZW47Ci0JdTY0IHN0YXJ0OwotCXM2NCBsaW5lX2lwOwotCWludCByZXQ7CisJczY0IGxpbmVfaXAsIG9mZnNldCA9IC0xOwogCWNoYXIgKmM7CiAKIAlpZiAoZ2V0bGluZSgmbGluZSwgJmxpbmVfbGVuLCBmaWxlKSA8IDApCiAJCXJldHVybiAtMTsKKwogCWlmICghbGluZSkKIAkJcmV0dXJuIC0xOwogCkBAIC0xNzMsOCArMjA1LDYgQEAKIAkJKmMgPSAwOwogCiAJbGluZV9pcCA9IC0xOwotCW9mZnNldCA9IDA7Ci0JcmV0ID0gLTI7CiAKIAkvKgogCSAqIFN0cmlwIGxlYWRpbmcgc3BhY2VzOgpAQCAtMTk1LDkgKzIyNSwzMCBAQAogCQkJbGluZV9pcCA9IC0xOwogCX0KIAotCXN0YXJ0ID0gaGUtPm1hcC0+dW5tYXBfaXAoaGUtPm1hcCwgc3ltLT5zdGFydCk7Ci0KIAlpZiAobGluZV9pcCAhPSAtMSkgeworCQl1NjQgc3RhcnQgPSBtYXBfX3JpcF8yb2JqZHVtcChoZS0+bWFwLCBzeW0tPnN0YXJ0KTsKKwkJb2Zmc2V0ID0gbGluZV9pcCAtIHN0YXJ0OworCX0KKworCW9iamR1bXBfbGluZSA9IG9iamR1bXBfbGluZV9fbmV3KG9mZnNldCwgbGluZSk7CisJaWYgKG9iamR1bXBfbGluZSA9PSBOVUxMKSB7CisJCWZyZWUobGluZSk7CisJCXJldHVybiAtMTsKKwl9CisJb2JqZHVtcF9fYWRkX2xpbmUoaGVhZCwgb2JqZHVtcF9saW5lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9iamR1bXBfbGluZV9fcHJpbnQoc3RydWN0IG9iamR1bXBfbGluZSAqc2VsZiwKKwkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJICAgICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgdTY0IGxlbikKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBoZS0+c3ltOworCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2xpbmU7CisJc3RhdGljIGNvbnN0IGNoYXIgKnByZXZfY29sb3I7CisKKwlpZiAoc2VsZi0+b2Zmc2V0ICE9IC0xKSB7CiAJCWNvbnN0IGNoYXIgKnBhdGggPSBOVUxMOwogCQl1bnNpZ25lZCBpbnQgaGl0cyA9IDA7CiAJCWRvdWJsZSBwZXJjZW50ID0gMC4wOwpAQCAtMjA1LDE1ICsyNTYsMjIgQEAKIAkJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHN5bSk7CiAJCXN0cnVjdCBzeW1fZXh0ICpzeW1fZXh0ID0gcHJpdi0+ZXh0OwogCQlzdHJ1Y3Qgc3ltX2hpc3QgKmggPSBwcml2LT5oaXN0OworCQlzNjQgb2Zmc2V0ID0gc2VsZi0+b2Zmc2V0OworCQlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpuZXh0ID0gb2JqZHVtcF9fZ2V0X25leHRfaXBfbGluZShoZWFkLCBzZWxmKTsKIAotCQlvZmZzZXQgPSBsaW5lX2lwIC0gc3RhcnQ7Ci0JCWlmIChvZmZzZXQgPCBsZW4pCi0JCQloaXRzID0gaC0+aXBbb2Zmc2V0XTsKKwkJd2hpbGUgKG9mZnNldCA8IChzNjQpbGVuICYmCisJCSAgICAgICAobmV4dCA9PSBOVUxMIHx8IG9mZnNldCA8IG5leHQtPm9mZnNldCkpIHsKKwkJCWlmIChzeW1fZXh0KSB7CisJCQkJaWYgKHBhdGggPT0gTlVMTCkKKwkJCQkJcGF0aCA9IHN5bV9leHRbb2Zmc2V0XS5wYXRoOworCQkJCXBlcmNlbnQgKz0gc3ltX2V4dFtvZmZzZXRdLnBlcmNlbnQ7CisJCQl9IGVsc2UKKwkJCQloaXRzICs9IGgtPmlwW29mZnNldF07CiAKLQkJaWYgKG9mZnNldCA8IGxlbiAmJiBzeW1fZXh0KSB7Ci0JCQlwYXRoID0gc3ltX2V4dFtvZmZzZXRdLnBhdGg7Ci0JCQlwZXJjZW50ID0gc3ltX2V4dFtvZmZzZXRdLnBlcmNlbnQ7Ci0JCX0gZWxzZSBpZiAoaC0+c3VtKQorCQkJKytvZmZzZXQ7CisJCX0KKworCQlpZiAoc3ltX2V4dCA9PSBOVUxMICYmIGgtPnN1bSkKIAkJCXBlcmNlbnQgPSAxMDAuMCAqIGhpdHMgLyBoLT5zdW07CiAKIAkJY29sb3IgPSBnZXRfcGVyY2VudF9jb2xvcihwZXJjZW50KTsKQEAgLTIzNCwxMiArMjkyLDEyIEBACiAKIAkJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiICU3LjJmIiwgcGVyY2VudCk7CiAJCXByaW50ZigiIDoJIik7Ci0JCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBQRVJGX0NPTE9SX0JMVUUsICIlc1xuIiwgbGluZSk7CisJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBQRVJGX0NPTE9SX0JMVUUsICIlc1xuIiwgc2VsZi0+bGluZSk7CiAJfSBlbHNlIHsKLQkJaWYgKCEqbGluZSkKKwkJaWYgKCEqc2VsZi0+bGluZSkKIAkJCXByaW50ZigiICAgICAgICAgOlxuIik7CiAJCWVsc2UKLQkJCXByaW50ZigiICAgICAgICAgOgklc1xuIiwgbGluZSk7CisJCQlwcmludGYoIiAgICAgICAgIDoJJXNcbiIsIHNlbGYtPmxpbmUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzY1LDYgKzQyMywyMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgaGlzdF9lbnRyeV9fcHJpbnRfaGl0cyhzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZikKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzZWxmLT5zeW07CisJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHN5bSk7CisJc3RydWN0IHN5bV9oaXN0ICpoID0gcHJpdi0+aGlzdDsKKwl1NjQgbGVuID0gc3ltLT5lbmQgLSBzeW0tPnN0YXJ0LCBvZmZzZXQ7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGxlbjsgKytvZmZzZXQpCisJCWlmIChoLT5pcFtvZmZzZXRdICE9IDApCisJCQlwcmludGYoIiUqTHg6ICVMdVxuIiwgQklUU19QRVJfTE9ORyAvIDIsCisJCQkgICAgICAgc3ltLT5zdGFydCArIG9mZnNldCwgaC0+aXBbb2Zmc2V0XSk7CisJcHJpbnRmKCIlKnM6ICVMdVxuIiwgQklUU19QRVJfTE9ORyAvIDIsICJoLT5zdW0iLCBoLT5zdW0pOworfQorCiBzdGF0aWMgdm9pZCBhbm5vdGF0ZV9zeW0oc3RydWN0IGhpc3RfZW50cnkgKmhlKQogewogCXN0cnVjdCBtYXAgKm1hcCA9IGhlLT5tYXA7CkBAIC0zNzQsMTUgKzQ0NiwxNSBAQAogCXU2NCBsZW47CiAJY2hhciBjb21tYW5kW1BBVEhfTUFYKjJdOwogCUZJTEUgKmZpbGU7CisJTElTVF9IRUFEKGhlYWQpOworCXN0cnVjdCBvYmpkdW1wX2xpbmUgKnBvcywgKm47CiAKIAlpZiAoIWZpbGVuYW1lKQogCQlyZXR1cm47CiAKLQlpZiAodmVyYm9zZSkKLQkJZnByaW50ZihzdGRlcnIsICIlczogZmlsZW5hbWU9JXMsIHN5bT0lcywgc3RhcnQ9JUx4LCBlbmQ9JUx4XG4iLAotCQkJX19mdW5jX18sIGZpbGVuYW1lLCBzeW0tPm5hbWUsCi0JCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksCi0JCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpKTsKKwlwcl9kZWJ1ZygiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSUjTHgsIGVuZD0lI0x4XG4iLCBfX2Z1bmNfXywKKwkJIGZpbGVuYW1lLCBzeW0tPm5hbWUsIG1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPnN0YXJ0KSwKKwkJIG1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPmVuZCkpOwogCiAJaWYgKGZ1bGxfcGF0aHMpCiAJCWRfZmlsZW5hbWUgPSBmaWxlbmFtZTsKQEAgLTQwNSw3ICs0NzcsOCBAQAogCQkgICAgICAgZHNvLCBkc28tPmxvbmdfbmFtZSwgc3ltLCBzeW0tPm5hbWUpOwogCiAJc3ByaW50Zihjb21tYW5kLCAib2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9MHglMDE2THggLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzfGdyZXAgLXYgJXMiLAotCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksIG1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPmVuZCksCisJCW1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5zdGFydCksCisJCW1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLAogCQlmaWxlbmFtZSwgZmlsZW5hbWUpOwogCiAJaWYgKHZlcmJvc2UgPj0gMykKQEAgLTQxNiwxMSArNDg5LDIxIEBACiAJCXJldHVybjsKIAogCXdoaWxlICghZmVvZihmaWxlKSkgewotCQlpZiAocGFyc2VfbGluZShmaWxlLCBoZSwgbGVuKSA8IDApCisJCWlmIChwYXJzZV9saW5lKGZpbGUsIGhlLCAmaGVhZCkgPCAwKQogCQkJYnJlYWs7CiAJfQogCiAJcGNsb3NlKGZpbGUpOworCisJaWYgKHZlcmJvc2UpCisJCWhpc3RfZW50cnlfX3ByaW50X2hpdHMoaGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgJmhlYWQsIG5vZGUpIHsKKwkJb2JqZHVtcF9saW5lX19wcmludChwb3MsICZoZWFkLCBoZSwgbGVuKTsKKwkJbGlzdF9kZWwoJnBvcy0+bm9kZSk7CisJCW9iamR1bXBfbGluZV9fZnJlZShwb3MpOworCX0KKwogCWlmIChwcmludF9saW5lKQogCQlmcmVlX3NvdXJjZV9saW5lKGhlLCBsZW4pOwogfQpAQCAtNDUxLDEwICs1MzQsMTAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7Ci0JLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCi0JLnByb2Nlc3NfbW1hcF9ldmVudAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCi0JLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCi0JLnByb2Nlc3NfZm9ya19ldmVudAk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCisJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5tbWFwCT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLmZvcmsJPSBldmVudF9fcHJvY2Vzc190YXNrLAogfTsKIAogc3RhdGljIGludCBfX2NtZF9hbm5vdGF0ZSh2b2lkKQpAQCAtNTQyLDkgKzYyNSw4IEBACiAJc2V0dXBfcGFnZXIoKTsKIAogCWlmIChmaWVsZF9zZXAgJiYgKmZpZWxkX3NlcCA9PSAnLicpIHsKLQkJZnB1dHMoIicuJyBpcyB0aGUgb25seSBub24gdmFsaWQgLS1maWVsZC1zZXBhcmF0b3IgYXJndW1lbnRcbiIsCi0JCQkJc3RkZXJyKTsKLQkJZXhpdCgxMjkpOworCQlwcl9lcnIoIicuJyBpcyB0aGUgb25seSBub24gdmFsaWQgLS1maWVsZC1zZXBhcmF0b3IgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIF9fY21kX2Fubm90YXRlKCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1jYWNoZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGEwNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIGJ1aWx0aW4tYnVpbGRpZC1jYWNoZS5jCisgKgorICogQnVpbHRpbiBidWlsZGlkLWNhY2hlIGNvbW1hbmQ6IE1hbmFnZXMgYnVpbGQtaWQgY2FjaGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAcmVkaGF0LmNvbT4KKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwZXJmLmgiCisjaW5jbHVkZSAidXRpbC9jYWNoZS5oIgorI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgorI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInV0aWwvc3RybGlzdC5oIgorI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICphZGRfbmFtZV9saXN0X3N0ciwgKnJlbW92ZV9uYW1lX2xpc3Rfc3RyOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWxkaWRfY2FjaGVfdXNhZ2VbXSA9IHsKKwkicGVyZiBidWlsZGlkLWNhY2hlIFs8b3B0aW9ucz5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBidWlsZGlkX2NhY2hlX29wdGlvbnNbXSA9IHsKKwlPUFRfU1RSSU5HKCdhJywgImFkZCIsICZhZGRfbmFtZV9saXN0X3N0ciwKKwkJICAgImZpbGUgbGlzdCIsICJmaWxlKHMpIHRvIGFkZCIpLAorCU9QVF9TVFJJTkcoJ3InLCAicmVtb3ZlIiwgJnJlbW92ZV9uYW1lX2xpc3Rfc3RyLCAiZmlsZSBsaXN0IiwKKwkJICAgICJmaWxlKHMpIHRvIHJlbW92ZSIpLAorCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwgImJlIG1vcmUgdmVyYm9zZSIpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGludCBidWlsZF9pZF9jYWNoZV9fYWRkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisJaW50IGVycjsKKworCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChmaWxlbmFtZSwgJmJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpKSA8IDApIHsKKwkJcHJfZGVidWcoIkNvdWxkbid0IHJlYWQgYSBidWlsZC1pZCBpbiAlc1xuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksIHNidWlsZF9pZCk7CisJZXJyID0gYnVpbGRfaWRfY2FjaGVfX2FkZF9zKHNidWlsZF9pZCwgZGVidWdkaXIsIGZpbGVuYW1lLCBmYWxzZSk7CisJaWYgKHZlcmJvc2UpCisJCXByX2luZm8oIkFkZGluZyAlcyAlczogJXNcbiIsIHNidWlsZF9pZCwgZmlsZW5hbWUsCisJCQllcnIgPyAiRkFJTCIgOiAiT2siKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSBfX3VzZWQsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmRlYnVnZGlyIF9fdXNlZCkKK3sKKwl1OCBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKKwljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJaW50IGVycjsKKworCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChmaWxlbmFtZSwgJmJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpKSA8IDApIHsKKwkJcHJfZGVidWcoIkNvdWxkbid0IHJlYWQgYSBidWlsZC1pZCBpbiAlc1xuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksIHNidWlsZF9pZCk7CisJZXJyID0gYnVpbGRfaWRfY2FjaGVfX3JlbW92ZV9zKHNidWlsZF9pZCwgZGVidWdkaXIpOworCWlmICh2ZXJib3NlKQorCQlwcl9pbmZvKCJSZW1vdmluZyAlcyAlczogJXNcbiIsIHNidWlsZF9pZCwgZmlsZW5hbWUsCisJCQllcnIgPyAiRkFJTCIgOiAiT2siKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19jbWRfYnVpbGRpZF9jYWNoZSh2b2lkKQoreworCXN0cnVjdCBzdHJsaXN0ICpsaXN0OworCXN0cnVjdCBzdHJfbm9kZSAqcG9zOworCWNoYXIgZGVidWdkaXJbUEFUSF9NQVhdOworCisJc25wcmludGYoZGVidWdkaXIsIHNpemVvZihkZWJ1Z2RpciksICIlcy8lcyIsIGdldGVudigiSE9NRSIpLAorCQkgREVCVUdfQ0FDSEVfRElSKTsKKworCWlmIChhZGRfbmFtZV9saXN0X3N0cikgeworCQlsaXN0ID0gc3RybGlzdF9fbmV3KHRydWUsIGFkZF9uYW1lX2xpc3Rfc3RyKTsKKwkJaWYgKGxpc3QpIHsKKwkJCXN0cmxpc3RfX2Zvcl9lYWNoKHBvcywgbGlzdCkKKwkJCQlpZiAoYnVpbGRfaWRfY2FjaGVfX2FkZF9maWxlKHBvcy0+cywgZGVidWdkaXIpKSB7CisJCQkJCWlmIChlcnJubyA9PSBFRVhJU1QpIHsKKwkJCQkJCXByX2RlYnVnKCIlcyBhbHJlYWR5IGluIHRoZSBjYWNoZVxuIiwKKwkJCQkJCQkgcG9zLT5zKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXByX3dhcm5pbmcoIkNvdWxkbid0IGFkZCAlczogJXNcbiIsCisJCQkJCQkgICBwb3MtPnMsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJfQorCisJCQlzdHJsaXN0X19kZWxldGUobGlzdCk7CisJCX0KKwl9CisKKwlpZiAocmVtb3ZlX25hbWVfbGlzdF9zdHIpIHsKKwkJbGlzdCA9IHN0cmxpc3RfX25ldyh0cnVlLCByZW1vdmVfbmFtZV9saXN0X3N0cik7CisJCWlmIChsaXN0KSB7CisJCQlzdHJsaXN0X19mb3JfZWFjaChwb3MsIGxpc3QpCisJCQkJaWYgKGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfZmlsZShwb3MtPnMsIGRlYnVnZGlyKSkgeworCQkJCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJCQkJCQlwcl9kZWJ1ZygiJXMgd2Fzbid0IGluIHRoZSBjYWNoZVxuIiwKKwkJCQkJCQkgcG9zLT5zKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXByX3dhcm5pbmcoIkNvdWxkbid0IHJlbW92ZSAlczogJXNcbiIsCisJCQkJCQkgICBwb3MtPnMsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJfQorCisJCQlzdHJsaXN0X19kZWxldGUobGlzdCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9idWlsZGlkX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsZGlkX2NhY2hlX29wdGlvbnMsCisJCQkgICAgIGJ1aWxkaWRfY2FjaGVfdXNhZ2UsIDApOworCisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc2V0dXBfcGFnZXIoKTsKKwlyZXR1cm4gX19jbWRfYnVpbGRpZF9jYWNoZSgpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCmluZGV4IDFlOTlhYzguLmQwNjc1YzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKQEAgLTgsNiArOCw3IEBACiAgKi8KICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvYnVpbGQtaWQuaCIKICNpbmNsdWRlICJ1dGlsL2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgpAQCAtMTYsNiArMTcsNyBAQAogCiBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOwogc3RhdGljIGludCBmb3JjZTsKK3N0YXRpYyBib29sIHdpdGhfaGl0czsKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsZGlkX2xpc3RfdXNhZ2VbXSA9IHsKIAkicGVyZiBidWlsZGlkLWxpc3QgWzxvcHRpb25zPl0iLApAQCAtMjMsNiArMjUsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCU9QVF9CT09MRUFOKCdIJywgIndpdGgtaGl0cyIsICZ3aXRoX2hpdHMsICJTaG93IG9ubHkgRFNPcyB3aXRoIGhpdHMiKSwKIAlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKIAkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLApAQCAtMzEsMjYgKzM0LDYgQEAKIAlPUFRfRU5EKCkKIH07CiAKLXN0YXRpYyBpbnQgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3NfYnVpbGRpZHMoc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWxmLAotCQkJCQkgICAgICAgaW50IGZlYXQsIGludCBmZCkKLXsKLQlpZiAoZmVhdCAhPSBIRUFERVJfQlVJTERfSUQpCi0JCXJldHVybiAwOwotCi0JaWYgKGxzZWVrKGZkLCBzZWxmLT5vZmZzZXQsIFNFRUtfU0VUKSA8IDApIHsKLQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGxzZWVrIHRvICVMZCBvZmZzZXQgZm9yIGJ1aWxkaWRzIVxuIiwKLQkJCSAgIHNlbGYtPm9mZnNldCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAocGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGZkLCBzZWxmLT5vZmZzZXQsIHNlbGYtPnNpemUpKSB7Ci0JCXByX3dhcm5pbmcoIkZhaWxlZCB0byByZWFkIGJ1aWxkaWRzIVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2NtZF9idWlsZGlkX2xpc3Qodm9pZCkKIHsKIAlpbnQgZXJyID0gLTE7CkBAIC02MCwxMCArNDMsMTAgQEAKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKLQllcnIgPSBwZXJmX2hlYWRlcl9fcHJvY2Vzc19zZWN0aW9ucygmc2Vzc2lvbi0+aGVhZGVyLCBzZXNzaW9uLT5mZCwKLQkJCQkgICAgICAgICBwZXJmX2ZpbGVfc2VjdGlvbl9fcHJvY2Vzc19idWlsZGlkcyk7Ci0JaWYgKGVyciA+PSAwKQotCQlkc29zX19mcHJpbnRmX2J1aWxkaWQoc3Rkb3V0KTsKKwlpZiAod2l0aF9oaXRzKQorCQlwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZidWlsZF9pZF9fbWFya19kc29faGl0X29wcyk7CisKKwlkc29zX19mcHJpbnRmX2J1aWxkaWQoc3Rkb3V0LCB3aXRoX2hpdHMpOwogCiAJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMgYi90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCmluZGV4IGJkNzFiOGMuLjE4YjNmNTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwpAQCAtNDIsOCArNDIsOCBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhID0geyAucGVyaW9kID0gMSwgfTsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICVwXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCi0JCSAgICBldmVudC0+aXAucGlkLCAodm9pZCAqKShsb25nKWV2ZW50LT5pcC5pcCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZDogJSNMeFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLmlwKTsKIAogCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgTlVMTCkgPCAwKSB7CiAJCXByX3dhcm5pbmcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLApAQCAtNTEsMTIgKzUxLDEyIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoYWwuZmlsdGVyZWQpCisJaWYgKGFsLmZpbHRlcmVkIHx8IGFsLnN5bSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlpZiAoYWwuc3ltICYmIHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCBkYXRhLnBlcmlvZCkpIHsKKwlpZiAocGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzZXNzaW9uLCAmYWwsIGRhdGEucGVyaW9kKSkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIGluY3JlbWVudGluZyBzeW1ib2wgY291bnQsIHNraXBwaW5nIGV2ZW50XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTY2LDEyICs2NiwxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQgPSBkaWZmX19wcm9jZXNzX3NhbXBsZV9ldmVudCwKLQkucHJvY2Vzc19tbWFwX2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc19tbWFwLAotCS5wcm9jZXNzX2NvbW1fZXZlbnQgICA9IGV2ZW50X19wcm9jZXNzX2NvbW0sCi0JLnByb2Nlc3NfZXhpdF9ldmVudCAgID0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKLQkucHJvY2Vzc19mb3JrX2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc190YXNrLAotCS5wcm9jZXNzX2xvc3RfZXZlbnQgICA9IGV2ZW50X19wcm9jZXNzX2xvc3QsCisJLnNhbXBsZQk9IGRpZmZfX3Byb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5tbWFwCT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLmV4aXQJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkubG9zdAk9IGV2ZW50X19wcm9jZXNzX2xvc3QsCiB9OwogCiBzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX2luc2VydF9oaXN0X2VudHJ5X2J5X25hbWUoc3RydWN0IHJiX3Jvb3QgKnJvb3QsCkBAIC04MiwyOSArODIsMTkgQEAKIAlzdHJ1Y3QgaGlzdF9lbnRyeSAqaXRlcjsKIAogCXdoaWxlICgqcCAhPSBOVUxMKSB7Ci0JCWludCBjbXA7CiAJCXBhcmVudCA9ICpwOwogCQlpdGVyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7Ci0KLQkJY21wID0gc3RyY21wKGhlLT5tYXAtPmRzby0+bmFtZSwgaXRlci0+bWFwLT5kc28tPm5hbWUpOwotCQlpZiAoY21wID4gMCkKKwkJaWYgKGhpc3RfZW50cnlfX2NtcChoZSwgaXRlcikgPCAwKQogCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwotCQllbHNlIGlmIChjbXAgPCAwKQorCQllbHNlCiAJCQlwID0gJigqcCktPnJiX3JpZ2h0OwotCQllbHNlIHsKLQkJCWNtcCA9IHN0cmNtcChoZS0+c3ltLT5uYW1lLCBpdGVyLT5zeW0tPm5hbWUpOwotCQkJaWYgKGNtcCA+IDApCi0JCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwotCQkJZWxzZQotCQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JCX0KIAl9CiAKIAlyYl9saW5rX25vZGUoJmhlLT5yYl9ub2RlLCBwYXJlbnQsIHApOwogCXJiX2luc2VydF9jb2xvcigmaGUtPnJiX25vZGUsIHJvb3QpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX3Jlc29ydF9ieV9uYW1lKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX3Jlc29ydF9oaXN0X2VudHJpZXMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKIHsKIAl1bnNpZ25lZCBsb25nIHBvc2l0aW9uID0gMTsKIAlzdHJ1Y3QgcmJfcm9vdCB0bXAgPSBSQl9ST09UOwpAQCAtMTIyLDI5ICsxMTIsMjggQEAKIAlzZWxmLT5oaXN0cyA9IHRtcDsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19zZXRfaGlzdF9lbnRyaWVzX3Bvc2l0aW9ucyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoreworCXBlcmZfc2Vzc2lvbl9fb3V0cHV0X3Jlc29ydChzZWxmLCBzZWxmLT5ldmVudHNfc3RhdHMudG90YWwpOworCXBlcmZfc2Vzc2lvbl9fcmVzb3J0X2hpc3RfZW50cmllcyhzZWxmKTsKK30KKwogc3RhdGljIHN0cnVjdCBoaXN0X2VudHJ5ICoKLXBlcmZfc2Vzc2lvbl9fZmluZF9oaXN0X2VudHJ5X2J5X25hbWUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKLQkJCQkgICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCitwZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhlKQogewogCXN0cnVjdCByYl9ub2RlICpuID0gc2VsZi0+aGlzdHMucmJfbm9kZTsKIAogCXdoaWxlIChuKSB7CiAJCXN0cnVjdCBoaXN0X2VudHJ5ICppdGVyID0gcmJfZW50cnkobiwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCQlpbnQgY21wID0gc3RyY21wKGhlLT5tYXAtPmRzby0+bmFtZSwgaXRlci0+bWFwLT5kc28tPm5hbWUpOworCQlpbnQ2NF90IGNtcCA9IGhpc3RfZW50cnlfX2NtcChoZSwgaXRlcik7CiAKLQkJaWYgKGNtcCA+IDApCisJCWlmIChjbXAgPCAwKQogCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKGNtcCA8IDApCisJCWVsc2UgaWYgKGNtcCA+IDApCiAJCQluID0gbi0+cmJfcmlnaHQ7Ci0JCWVsc2UgewotCQkJY21wID0gc3RyY21wKGhlLT5zeW0tPm5hbWUsIGl0ZXItPnN5bS0+bmFtZSk7Ci0JCQlpZiAoY21wID4gMCkKLQkJCQluID0gbi0+cmJfbGVmdDsKLQkJCWVsc2UgaWYgKGNtcCA8IDApCi0JCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQkJZWxzZQotCQkJCXJldHVybiBpdGVyOwotCQl9CisJCWVsc2UgCisJCQlyZXR1cm4gaXRlcjsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTE1NSwxMSArMTQ0LDkgQEAKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAKLQlwZXJmX3Nlc3Npb25fX3Jlc29ydF9ieV9uYW1lKG9sZF9zZXNzaW9uKTsKLQogCWZvciAobmQgPSByYl9maXJzdCgmbmV3X3Nlc3Npb24tPmhpc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IGhpc3RfZW50cnkgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7Ci0JCXBvcy0+cGFpciA9IHBlcmZfc2Vzc2lvbl9fZmluZF9oaXN0X2VudHJ5X2J5X25hbWUob2xkX3Nlc3Npb24sIHBvcyk7CisJCXBvcy0+cGFpciA9IHBlcmZfc2Vzc2lvbl9fZmluZF9oaXN0X2VudHJ5KG9sZF9zZXNzaW9uLCBwb3MpOwogCX0KIH0KIApAQCAtMTc3LDkgKzE2NCwxMiBAQAogCQlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb25baV0sICZldmVudF9vcHMpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXRfZGVsZXRlOwotCQlwZXJmX3Nlc3Npb25fX291dHB1dF9yZXNvcnQoc2Vzc2lvbltpXSwgc2Vzc2lvbltpXS0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKIAl9CiAKKwlwZXJmX3Nlc3Npb25fX291dHB1dF9yZXNvcnQoc2Vzc2lvblsxXSwgc2Vzc2lvblsxXS0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKKwlpZiAoc2hvd19kaXNwbGFjZW1lbnQpCisJCXBlcmZfc2Vzc2lvbl9fc2V0X2hpc3RfZW50cmllc19wb3NpdGlvbnMoc2Vzc2lvblswXSk7CisKIAlwZXJmX3Nlc3Npb25fX21hdGNoX2hpc3RzKHNlc3Npb25bMF0sIHNlc3Npb25bMV0pOwogCXBlcmZfc2Vzc2lvbl9fZnByaW50Zl9oaXN0cyhzZXNzaW9uWzFdLCBzZXNzaW9uWzBdLAogCQkJCSAgICBzaG93X2Rpc3BsYWNlbWVudCwgc3Rkb3V0KTsKQEAgLTIwNCw3ICsxOTQsNyBAQAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlLCAiZG9uJ3QgY29tcGxhaW4sIGRvIGl0IiksCiAJT1BUX0JPT0xFQU4oJ20nLCAibW9kdWxlcyIsICZzeW1ib2xfY29uZi51c2VfbW9kdWxlcywKIAkJICAgICJsb2FkIG1vZHVsZSBzeW1ib2xzIC0gV0FSTklORzogdXNlIG9ubHkgd2l0aCAtayBhbmQgTElWRSBrZXJuZWwiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJmV2ZW50X29wcy5mdWxsX3BhdGhzLAorCU9QVF9CT09MRUFOKCdQJywgImZ1bGwtcGF0aHMiLCAmc3ltYm9sX2NvbmYuZnVsbF9wYXRocywKIAkJICAgICJEb24ndCBzaG9ydGVuIHRoZSBwYXRobmFtZXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3dkIiksCiAJT1BUX1NUUklORygnZCcsICJkc29zIiwgJnN5bWJvbF9jb25mLmRzb19saXN0X3N0ciwgImRzb1ssZHNvLi4uXSIsCiAJCSAgICJvbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgZHNvcyIpLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMKaW5kZXggOWY4MTBiMS4uMjE1YjU4NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4taGVscC5jCkBAIC0yODYsOCArMjg2LDcgQEAKIAogCXB1dHMoIiBUaGUgbW9zdCBjb21tb25seSB1c2VkIHBlcmYgY29tbWFuZHMgYXJlOiIpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1vbl9jbWRzKTsgaSsrKSB7Ci0JCXByaW50ZigiICAgJXMgICAiLCBjb21tb25fY21kc1tpXS5uYW1lKTsKLQkJbXB1dF9jaGFyKCcgJywgbG9uZ2VzdCAtIHN0cmxlbihjb21tb25fY21kc1tpXS5uYW1lKSk7CisJCXByaW50ZigiICAgJS0qcyAgICIsIGxvbmdlc3QsIGNvbW1vbl9jbWRzW2ldLm5hbWUpOwogCQlwdXRzKGNvbW1vbl9jbWRzW2ldLmhlbHApOwogCX0KIH0KQEAgLTMxNCw4ICszMTMsNiBAQAogCQlyZXR1cm4gInBlcmYiOwogCWVsc2UgaWYgKCFwcmVmaXhjbXAocGVyZl9jbWQsICJwZXJmIikpCiAJCXJldHVybiBwZXJmX2NtZDsKLQllbHNlIGlmIChpc19wZXJmX2NvbW1hbmQocGVyZl9jbWQpKQotCQlyZXR1cm4gcHJlcGVuZCgicGVyZi0iLCBwZXJmX2NtZCk7CiAJZWxzZQogCQlyZXR1cm4gcHJlcGVuZCgicGVyZi0iLCBwZXJmX2NtZCk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwppbmRleCA5M2M2N2JmLi45MjRhOTUxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKQEAgLTkyLDIzICs5MiwxOCBAQAogCWlmICghZGlyMSkKIAkJcmV0dXJuOwogCi0Jd2hpbGUgKHRydWUpIHsKLQkJZGVudDEgPSByZWFkZGlyKGRpcjEpOwotCQlpZiAoIWRlbnQxKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHNzY2FuZihkZW50MS0+ZF9uYW1lLCAibm9kZSV1IiwgJm1lbSkgPCAxKQorCXdoaWxlICgoZGVudDEgPSByZWFkZGlyKGRpcjEpKSAhPSBOVUxMKSB7CisJCWlmIChkZW50MS0+ZF90eXBlICE9IERUX0RJUiB8fAorCQkgICAgc3NjYW5mKGRlbnQxLT5kX25hbWUsICJub2RlJXUiLCAmbWVtKSA8IDEpCiAJCQljb250aW51ZTsKIAogCQlzbnByaW50ZihidWYsIFBBVEhfTUFYLCAiJXMvJXMiLCBQQVRIX1NZU19OT0RFLCBkZW50MS0+ZF9uYW1lKTsKIAkJZGlyMiA9IG9wZW5kaXIoYnVmKTsKIAkJaWYgKCFkaXIyKQogCQkJY29udGludWU7Ci0JCXdoaWxlICh0cnVlKSB7Ci0JCQlkZW50MiA9IHJlYWRkaXIoZGlyMik7Ci0JCQlpZiAoIWRlbnQyKQotCQkJCWJyZWFrOwotCQkJaWYgKHNzY2FuZihkZW50Mi0+ZF9uYW1lLCAiY3B1JXUiLCAmY3B1KSA8IDEpCisJCXdoaWxlICgoZGVudDIgPSByZWFkZGlyKGRpcjIpKSAhPSBOVUxMKSB7CisJCQlpZiAoZGVudDItPmRfdHlwZSAhPSBEVF9MTksgfHwKKwkJCSAgICBzc2NhbmYoZGVudDItPmRfbmFtZSwgImNwdSV1IiwgJmNwdSkgPCAxKQogCQkJCWNvbnRpbnVlOwogCQkJY3B1bm9kZV9tYXBbY3B1XSA9IG1lbTsKIAkJfQpAQCAtMzIxLDExICszMTYsOCBAQAogCiAJZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgc2Vzc2lvbi0+c2FtcGxlX3R5cGUsICZkYXRhKTsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAotCQlldmVudC0+aGVhZGVyLm1pc2MsCi0JCWRhdGEucGlkLCBkYXRhLnRpZCwKLQkJKHZvaWQgKikobG9uZylkYXRhLmlwLAotCQkobG9uZyBsb25nKWRhdGEucGVyaW9kKTsKKwlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlI0x4IHBlcmlvZDogJUxkXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCisJCSAgICBkYXRhLnBpZCwgZGF0YS50aWQsIGRhdGEuaXAsIGRhdGEucGVyaW9kKTsKIAogCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBldmVudC0+aXAucGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKQEAgLTM0MiwyMiArMzM0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQotewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKLQkJCSJ3aXRob3V0IC1SPyIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5zYW1wbGVfdHlwZV9jaGVjawk9IHNhbXBsZV90eXBlX2NoZWNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCiB9OwogCiBzdGF0aWMgZG91YmxlIGZyYWdtZW50YXRpb24odW5zaWduZWQgbG9uZyBuX3JlcSwgdW5zaWduZWQgbG9uZyBuX2FsbG9jKQpAQCAtMzkwLDcgKzM2OSw3IEBACiAJCWlmIChpc19jYWxsZXIpIHsKIAkJCWFkZHIgPSBkYXRhLT5jYWxsX3NpdGU7CiAJCQlpZiAoIXJhd19pcCkKLQkJCQlzeW0gPSBtYXBfZ3JvdXBzX19maW5kX2Z1bmN0aW9uKCZzZXNzaW9uLT5rbWFwcywgc2Vzc2lvbiwgYWRkciwgTlVMTCk7CisJCQkJc3ltID0gbWFwX2dyb3Vwc19fZmluZF9mdW5jdGlvbigmc2Vzc2lvbi0+a21hcHMsIGFkZHIsIE5VTEwpOwogCQl9IGVsc2UKIAkJCWFkZHIgPSBkYXRhLT5wdHI7CiAKQEAgLTUwNCwxMSArNDgzLDE0IEBACiAKIHN0YXRpYyBpbnQgX19jbWRfa21lbSh2b2lkKQogewotCWludCBlcnI7CisJaW50IGVyciA9IC1FSU5WQUw7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWlmICghcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHNlc3Npb24sICJrbWVtIHJlY29yZCIpKQorCQlnb3RvIG91dF9kZWxldGU7CisKIAlzZXR1cF9wYWdlcigpOwogCWVyciA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CiAJaWYgKGVyciAhPSAwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5YWIyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKQEAgLTAsMCArMSw2NzggQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGVyZi5oIgorCisjaW5jbHVkZSAidXRpbC91dGlsLmgiCisjaW5jbHVkZSAidXRpbC9jYWNoZS5oIgorI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCisjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgorCisjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXRpbC90cmFjZS1ldmVudC5oIgorCisjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvc2Vzc2lvbi5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisKKy8qIGJhc2VkIG9uIGtlcm5lbC9sb2NrZGVwLmMgKi8KKyNkZWZpbmUgTE9DS0hBU0hfQklUUwkJMTIKKyNkZWZpbmUgTE9DS0hBU0hfU0laRQkJKDFVTCA8PCBMT0NLSEFTSF9CSVRTKQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBsb2NraGFzaF90YWJsZVtMT0NLSEFTSF9TSVpFXTsKKworI2RlZmluZSBfX2xvY2toYXNoZm4oa2V5KQloYXNoX2xvbmcoKHVuc2lnbmVkIGxvbmcpa2V5LCBMT0NLSEFTSF9CSVRTKQorI2RlZmluZSBsb2NraGFzaGVudHJ5KGtleSkJKGxvY2toYXNoX3RhYmxlICsgX19sb2NraGFzaGZuKChrZXkpKSkKKworI2RlZmluZSBMT0NLX1NUQVRFX1VOTE9DS0VECTAJICAgICAgIC8qIGluaXRpYWwgc3RhdGUgKi8KKyNkZWZpbmUgTE9DS19TVEFURV9MT0NLRUQJMQorCitzdHJ1Y3QgbG9ja19zdGF0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWhhc2hfZW50cnk7CisJc3RydWN0IHJiX25vZGUJCXJiOwkJLyogdXNlZCBmb3Igc29ydGluZyAqLworCisJLyoKKwkgKiBGSVhNRTogcmF3X2ZpZWxkX3ZhbHVlKCkgcmV0dXJucyB1bnNpZ25lZCBsb25nIGxvbmcsCisJICogc28gYWRkcmVzcyBvZiBsb2NrZGVwX21hcCBzaG91bGQgYmUgZGVhbGVkIGFzIDY0Yml0LgorCSAqIElzIHRoZXJlIG1vcmUgYmV0dGVyIHNvbHV0aW9uPworCSAqLworCXZvaWQJCQkqYWRkcjsJCS8qIGFkZHJlc3Mgb2YgbG9ja2RlcF9tYXAsIHVzZWQgYXMgSUQgKi8KKwljaGFyCQkJKm5hbWU7CQkvKiBmb3Igc3RyY3B5KCksIHdlIGNhbm5vdCB1c2UgY29uc3QgKi8KKworCWludAkJCXN0YXRlOworCXU2NAkJCXByZXZfZXZlbnRfdGltZTsgLyogdGltZXN0YW1wIG9mIHByZXZpb3VzIGV2ZW50ICovCisKKwl1bnNpZ25lZCBpbnQJCW5yX2FjcXVpcmVkOworCXVuc2lnbmVkIGludAkJbnJfYWNxdWlyZTsKKwl1bnNpZ25lZCBpbnQJCW5yX2NvbnRlbmRlZDsKKwl1bnNpZ25lZCBpbnQJCW5yX3JlbGVhc2U7CisKKwkvKiB0aGVzZSB0aW1lcyBhcmUgaW4gbmFubyBzZWMuICovCisJdTY0CQkJd2FpdF90aW1lX3RvdGFsOworCXU2NAkJCXdhaXRfdGltZV9taW47CisJdTY0CQkJd2FpdF90aW1lX21heDsKK307CisKKy8qIGJ1aWxkIHNpbXBsZSBrZXkgZnVuY3Rpb24gb25lIGlzIGJpZ2dlciB0aGFuIHR3byAqLworI2RlZmluZSBTSU5HTEVfS0VZKG1lbWJlcikJCQkJCQlcCisJc3RhdGljIGludCBsb2NrX3N0YXRfa2V5XyAjIyBtZW1iZXIoc3RydWN0IGxvY2tfc3RhdCAqb25lLAlcCisJCQkJCSBzdHJ1Y3QgbG9ja19zdGF0ICp0d28pCQlcCisJewkJCQkJCQkJXAorCQlyZXR1cm4gb25lLT5tZW1iZXIgPiB0d28tPm1lbWJlcjsJCQlcCisJfQorCitTSU5HTEVfS0VZKG5yX2FjcXVpcmVkKQorU0lOR0xFX0tFWShucl9jb250ZW5kZWQpCitTSU5HTEVfS0VZKHdhaXRfdGltZV90b3RhbCkKK1NJTkdMRV9LRVkod2FpdF90aW1lX21pbikKK1NJTkdMRV9LRVkod2FpdF90aW1lX21heCkKKworc3RydWN0IGxvY2tfa2V5IHsKKwkvKgorCSAqIG5hbWU6IHRoZSB2YWx1ZSBmb3Igc3BlY2lmeSBieSB1c2VyCisJICogdGhpcyBzaG91bGQgYmUgc2ltcGxlciB0aGFuIHJhdyBuYW1lIG9mIG1lbWJlcgorCSAqIGUuZy4gbnJfYWNxdWlyZWQgLT4gYWNxdWlyZWQsIHdhaXRfdGltZV90b3RhbCAtPiB3YWl0X3RvdGFsCisJICovCisJY29uc3QgY2hhcgkJKm5hbWU7CisJaW50CQkJKCprZXkpKHN0cnVjdCBsb2NrX3N0YXQqLCBzdHJ1Y3QgbG9ja19zdGF0Kik7Cit9OworCitzdGF0aWMgY29uc3QgY2hhcgkJKnNvcnRfa2V5ID0gImFjcXVpcmVkIjsKKworc3RhdGljIGludAkJCSgqY29tcGFyZSkoc3RydWN0IGxvY2tfc3RhdCAqLCBzdHJ1Y3QgbG9ja19zdGF0ICopOworCitzdGF0aWMgc3RydWN0IHJiX3Jvb3QJCXJlc3VsdDsJLyogcGxhY2UgdG8gc3RvcmUgc29ydGVkIGRhdGEgKi8KKworI2RlZmluZSBERUZfS0VZX0xPQ0sobmFtZSwgZm5fc3VmZml4KQlcCisJeyAjbmFtZSwgbG9ja19zdGF0X2tleV8gIyMgZm5fc3VmZml4IH0KK3N0cnVjdCBsb2NrX2tleSBrZXlzW10gPSB7CisJREVGX0tFWV9MT0NLKGFjcXVpcmVkLCBucl9hY3F1aXJlZCksCisJREVGX0tFWV9MT0NLKGNvbnRlbmRlZCwgbnJfY29udGVuZGVkKSwKKwlERUZfS0VZX0xPQ0sod2FpdF90b3RhbCwgd2FpdF90aW1lX3RvdGFsKSwKKwlERUZfS0VZX0xPQ0sod2FpdF9taW4sIHdhaXRfdGltZV9taW4pLAorCURFRl9LRVlfTE9DSyh3YWl0X21heCwgd2FpdF90aW1lX21heCksCisKKwkvKiBleHRyYSBjb21wYXJpc29ucyBtdWNoIGNvbXBsaWNhdGVkIHNob3VsZCBiZSBoZXJlICovCisKKwl7IE5VTEwsIE5VTEwgfQorfTsKKworc3RhdGljIHZvaWQgc2VsZWN0X2tleSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsga2V5c1tpXS5uYW1lOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoa2V5c1tpXS5uYW1lLCBzb3J0X2tleSkpIHsKKwkJCWNvbXBhcmUgPSBrZXlzW2ldLmtleTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWRpZSgiVW5rbm93biBjb21wYXJlIGtleTolc1xuIiwgc29ydF9rZXkpOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfdG9fcmVzdWx0KHN0cnVjdCBsb2NrX3N0YXQgKnN0LAorCQkJICAgICBpbnQgKCpiaWdnZXIpKHN0cnVjdCBsb2NrX3N0YXQgKiwgc3RydWN0IGxvY2tfc3RhdCAqKSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnJiID0gJnJlc3VsdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBsb2NrX3N0YXQgKnA7CisKKwl3aGlsZSAoKnJiKSB7CisJCXAgPSBjb250YWluZXJfb2YoKnJiLCBzdHJ1Y3QgbG9ja19zdGF0LCByYik7CisJCXBhcmVudCA9ICpyYjsKKworCQlpZiAoYmlnZ2VyKHN0LCBwKSkKKwkJCXJiID0gJigqcmIpLT5yYl9sZWZ0OworCQllbHNlCisJCQlyYiA9ICYoKnJiKS0+cmJfcmlnaHQ7CisJfQorCisJcmJfbGlua19ub2RlKCZzdC0+cmIsIHBhcmVudCwgcmIpOworCXJiX2luc2VydF9jb2xvcigmc3QtPnJiLCAmcmVzdWx0KTsKK30KKworLyogcmV0dXJucyBsZWZ0IG1vc3QgZWxlbWVudCBvZiByZXN1bHQsIGFuZCBlcmFzZSBpdCAqLworc3RhdGljIHN0cnVjdCBsb2NrX3N0YXQgKnBvcF9mcm9tX3Jlc3VsdCh2b2lkKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlID0gcmVzdWx0LnJiX25vZGU7CisKKwlpZiAoIW5vZGUpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKG5vZGUtPnJiX2xlZnQpCisJCW5vZGUgPSBub2RlLT5yYl9sZWZ0OworCisJcmJfZXJhc2Uobm9kZSwgJnJlc3VsdCk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgbG9ja19zdGF0LCByYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19zdGF0ICpsb2NrX3N0YXRfZmluZG5ldyh2b2lkICphZGRyLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gbG9ja2hhc2hlbnRyeShhZGRyKTsKKwlzdHJ1Y3QgbG9ja19zdGF0ICpyZXQsICpuZXc7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJldCwgZW50cnksIGhhc2hfZW50cnkpIHsKKwkJaWYgKHJldC0+YWRkciA9PSBhZGRyKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwluZXcgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NrX3N0YXQpKTsKKwlpZiAoIW5ldykKKwkJZ290byBhbGxvY19mYWlsZWQ7CisKKwluZXctPmFkZHIgPSBhZGRyOworCW5ldy0+bmFtZSA9IHphbGxvYyhzaXplb2YoY2hhcikgKiBzdHJsZW4obmFtZSkgKyAxKTsKKwlpZiAoIW5ldy0+bmFtZSkKKwkJZ290byBhbGxvY19mYWlsZWQ7CisJc3RyY3B5KG5ldy0+bmFtZSwgbmFtZSk7CisKKwkvKiBMT0NLX1NUQVRFX1VOTE9DS0VEID09IDAgaXNuJ3QgZ3VhcmFudGVlZCBmb3JldmVyICovCisJbmV3LT5zdGF0ZSA9IExPQ0tfU1RBVEVfVU5MT0NLRUQ7CisJbmV3LT53YWl0X3RpbWVfbWluID0gVUxMT05HX01BWDsKKworCWxpc3RfYWRkKCZuZXctPmhhc2hfZW50cnksIGVudHJ5KTsKKwlyZXR1cm4gbmV3OworCithbGxvY19mYWlsZWQ6CisJZGllKCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworfQorCitzdGF0aWMgY2hhcgkJCWNvbnN0ICppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CisKK3N0YXRpYyBpbnQJCQlwcm9maWxlX2NwdSA9IC0xOworCitzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSB7CisJdTMyCQkJc2l6ZTsKKwljaGFyCQkJZGF0YVswXTsKK307CisKK3N0cnVjdCB0cmFjZV9hY3F1aXJlX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfYWNxdWlyZWRfZXZlbnQgeworCXZvaWQJCQkqYWRkcjsKKwljb25zdCBjaGFyCQkqbmFtZTsKK307CisKK3N0cnVjdCB0cmFjZV9jb250ZW5kZWRfZXZlbnQgeworCXZvaWQJCQkqYWRkcjsKKwljb25zdCBjaGFyCQkqbmFtZTsKK307CisKK3N0cnVjdCB0cmFjZV9yZWxlYXNlX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfbG9ja19oYW5kbGVyIHsKKwl2b2lkICgqYWNxdWlyZV9ldmVudCkoc3RydWN0IHRyYWNlX2FjcXVpcmVfZXZlbnQgKiwKKwkJCSAgICAgIHN0cnVjdCBldmVudCAqLAorCQkJICAgICAgaW50IGNwdSwKKwkJCSAgICAgIHU2NCB0aW1lc3RhbXAsCisJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworCisJdm9pZCAoKmFjcXVpcmVkX2V2ZW50KShzdHJ1Y3QgdHJhY2VfYWNxdWlyZWRfZXZlbnQgKiwKKwkJCSAgICAgICBzdHJ1Y3QgZXZlbnQgKiwKKwkJCSAgICAgICBpbnQgY3B1LAorCQkJICAgICAgIHU2NCB0aW1lc3RhbXAsCisJCQkgICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworCXZvaWQgKCpjb250ZW5kZWRfZXZlbnQpKHN0cnVjdCB0cmFjZV9jb250ZW5kZWRfZXZlbnQgKiwKKwkJCQlzdHJ1Y3QgZXZlbnQgKiwKKwkJCQlpbnQgY3B1LAorCQkJCXU2NCB0aW1lc3RhbXAsCisJCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworCXZvaWQgKCpyZWxlYXNlX2V2ZW50KShzdHJ1Y3QgdHJhY2VfcmVsZWFzZV9ldmVudCAqLAorCQkJICAgICAgc3RydWN0IGV2ZW50ICosCisJCQkgICAgICBpbnQgY3B1LAorCQkJICAgICAgdTY0IHRpbWVzdGFtcCwKKwkJCSAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7Cit9OworCitzdGF0aWMgdm9pZAorcmVwb3J0X2xvY2tfYWNxdWlyZV9ldmVudChzdHJ1Y3QgdHJhY2VfYWNxdWlyZV9ldmVudCAqYWNxdWlyZV9ldmVudCwKKwkJCXN0cnVjdCBldmVudCAqX19ldmVudCBfX3VzZWQsCisJCQlpbnQgY3B1IF9fdXNlZCwKKwkJCXU2NCB0aW1lc3RhbXAsCisJCQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJc3QgPSBsb2NrX3N0YXRfZmluZG5ldyhhY3F1aXJlX2V2ZW50LT5hZGRyLCBhY3F1aXJlX2V2ZW50LT5uYW1lKTsKKworCXN3aXRjaCAoc3QtPnN0YXRlKSB7CisJY2FzZSBMT0NLX1NUQVRFX1VOTE9DS0VEOgorCQlicmVhazsKKwljYXNlIExPQ0tfU1RBVEVfTE9DS0VEOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUdfT04oMSk7CisJCWJyZWFrOworCX0KKworCXN0LT5wcmV2X2V2ZW50X3RpbWUgPSB0aW1lc3RhbXA7Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRfbG9ja19hY3F1aXJlZF9ldmVudChzdHJ1Y3QgdHJhY2VfYWNxdWlyZWRfZXZlbnQgKmFjcXVpcmVkX2V2ZW50LAorCQkJIHN0cnVjdCBldmVudCAqX19ldmVudCBfX3VzZWQsCisJCQkgaW50IGNwdSBfX3VzZWQsCisJCQkgdTY0IHRpbWVzdGFtcCwKKwkJCSBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJc3QgPSBsb2NrX3N0YXRfZmluZG5ldyhhY3F1aXJlZF9ldmVudC0+YWRkciwgYWNxdWlyZWRfZXZlbnQtPm5hbWUpOworCisJc3dpdGNoIChzdC0+c3RhdGUpIHsKKwljYXNlIExPQ0tfU1RBVEVfVU5MT0NLRUQ6CisJCXN0LT5zdGF0ZSA9IExPQ0tfU1RBVEVfTE9DS0VEOworCQlzdC0+bnJfYWNxdWlyZWQrKzsKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCQlicmVhazsKKwl9CisKKwlzdC0+cHJldl9ldmVudF90aW1lID0gdGltZXN0YW1wOworfQorCitzdGF0aWMgdm9pZAorcmVwb3J0X2xvY2tfY29udGVuZGVkX2V2ZW50KHN0cnVjdCB0cmFjZV9jb250ZW5kZWRfZXZlbnQgKmNvbnRlbmRlZF9ldmVudCwKKwkJCSAgc3RydWN0IGV2ZW50ICpfX2V2ZW50IF9fdXNlZCwKKwkJCSAgaW50IGNwdSBfX3VzZWQsCisJCQkgIHU2NCB0aW1lc3RhbXAsCisJCQkgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisKKwlzdCA9IGxvY2tfc3RhdF9maW5kbmV3KGNvbnRlbmRlZF9ldmVudC0+YWRkciwgY29udGVuZGVkX2V2ZW50LT5uYW1lKTsKKworCXN3aXRjaCAoc3QtPnN0YXRlKSB7CisJY2FzZSBMT0NLX1NUQVRFX1VOTE9DS0VEOgorCQlicmVhazsKKwljYXNlIExPQ0tfU1RBVEVfTE9DS0VEOgorCQlzdC0+bnJfY29udGVuZGVkKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQorCisJc3QtPnByZXZfZXZlbnRfdGltZSA9IHRpbWVzdGFtcDsKK30KKworc3RhdGljIHZvaWQKK3JlcG9ydF9sb2NrX3JlbGVhc2VfZXZlbnQoc3RydWN0IHRyYWNlX3JlbGVhc2VfZXZlbnQgKnJlbGVhc2VfZXZlbnQsCisJCQlzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkJaW50IGNwdSBfX3VzZWQsCisJCQl1NjQgdGltZXN0YW1wLAorCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKwl1NjQgaG9sZF90aW1lOworCisJc3QgPSBsb2NrX3N0YXRfZmluZG5ldyhyZWxlYXNlX2V2ZW50LT5hZGRyLCByZWxlYXNlX2V2ZW50LT5uYW1lKTsKKworCXN3aXRjaCAoc3QtPnN0YXRlKSB7CisJY2FzZSBMT0NLX1NUQVRFX1VOTE9DS0VEOgorCQlicmVhazsKKwljYXNlIExPQ0tfU1RBVEVfTE9DS0VEOgorCQlzdC0+c3RhdGUgPSBMT0NLX1NUQVRFX1VOTE9DS0VEOworCQlob2xkX3RpbWUgPSB0aW1lc3RhbXAgLSBzdC0+cHJldl9ldmVudF90aW1lOworCisJCWlmICh0aW1lc3RhbXAgPCBzdC0+cHJldl9ldmVudF90aW1lKSB7CisJCQkvKiB0ZXJyaWJseSwgdGhpcyBjYW4gaGFwcGVuLi4uICovCisJCQlnb3RvIGVuZDsKKwkJfQorCisJCWlmIChzdC0+d2FpdF90aW1lX21pbiA+IGhvbGRfdGltZSkKKwkJCXN0LT53YWl0X3RpbWVfbWluID0gaG9sZF90aW1lOworCQlpZiAoc3QtPndhaXRfdGltZV9tYXggPCBob2xkX3RpbWUpCisJCQlzdC0+d2FpdF90aW1lX21heCA9IGhvbGRfdGltZTsKKwkJc3QtPndhaXRfdGltZV90b3RhbCArPSBob2xkX3RpbWU7CisKKwkJc3QtPm5yX3JlbGVhc2UrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCQlicmVhazsKKwl9CisKK2VuZDoKKwlzdC0+cHJldl9ldmVudF90aW1lID0gdGltZXN0YW1wOworfQorCisvKiBsb2NrIG9yaWVudGVkIGhhbmRsZXJzICovCisvKiBUT0RPOiBoYW5kbGVycyBmb3IgQ1BVIG9yaWVudGVkLCB0aHJlYWQgb3JpZW50ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfbG9ja19oYW5kbGVyIHJlcG9ydF9sb2NrX29wcyAgPSB7CisJLmFjcXVpcmVfZXZlbnQJCT0gcmVwb3J0X2xvY2tfYWNxdWlyZV9ldmVudCwKKwkuYWNxdWlyZWRfZXZlbnQJCT0gcmVwb3J0X2xvY2tfYWNxdWlyZWRfZXZlbnQsCisJLmNvbnRlbmRlZF9ldmVudAk9IHJlcG9ydF9sb2NrX2NvbnRlbmRlZF9ldmVudCwKKwkucmVsZWFzZV9ldmVudAkJPSByZXBvcnRfbG9ja19yZWxlYXNlX2V2ZW50LAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZV9sb2NrX2hhbmRsZXIgKnRyYWNlX2hhbmRsZXI7CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2xvY2tfYWNxdWlyZV9ldmVudCh2b2lkICpkYXRhLAorCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgIHU2NCB0aW1lc3RhbXAgX191c2VkLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfYWNxdWlyZV9ldmVudCBhY3F1aXJlX2V2ZW50OworCXU2NCB0bXA7CQkvKiB0aGlzIGlzIHJlcXVpcmVkIGZvciBjYXN0aW5nLi4uICovCisKKwl0bXAgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJsb2NrZGVwX2FkZHIiLCBkYXRhKTsKKwltZW1jcHkoJmFjcXVpcmVfZXZlbnQuYWRkciwgJnRtcCwgc2l6ZW9mKHZvaWQgKikpOworCWFjcXVpcmVfZXZlbnQubmFtZSA9IChjaGFyICopcmF3X2ZpZWxkX3B0cihldmVudCwgIm5hbWUiLCBkYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KCZhY3F1aXJlX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2xvY2tfYWNxdWlyZWRfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50IF9fdXNlZCwKKwkJCSAgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB0cmFjZV9hY3F1aXJlZF9ldmVudCBhY3F1aXJlZF9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZhY3F1aXJlZF9ldmVudC5hZGRyLCAmdG1wLCBzaXplb2Yodm9pZCAqKSk7CisJYWNxdWlyZWRfZXZlbnQubmFtZSA9IChjaGFyICopcmF3X2ZpZWxkX3B0cihldmVudCwgIm5hbWUiLCBkYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5hY3F1aXJlZF9ldmVudCgmYWNxdWlyZWRfZXZlbnQsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3NfbG9ja19jb250ZW5kZWRfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICAgIGludCBjcHUgX191c2VkLAorCQkJICAgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50IGNvbnRlbmRlZF9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZjb250ZW5kZWRfZXZlbnQuYWRkciwgJnRtcCwgc2l6ZW9mKHZvaWQgKikpOworCWNvbnRlbmRlZF9ldmVudC5uYW1lID0gKGNoYXIgKilyYXdfZmllbGRfcHRyKGV2ZW50LCAibmFtZSIsIGRhdGEpOworCisJaWYgKHRyYWNlX2hhbmRsZXItPmFjcXVpcmVfZXZlbnQpCisJCXRyYWNlX2hhbmRsZXItPmNvbnRlbmRlZF9ldmVudCgmY29udGVuZGVkX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2xvY2tfcmVsZWFzZV9ldmVudCh2b2lkICpkYXRhLAorCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgIHU2NCB0aW1lc3RhbXAgX191c2VkLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcmVsZWFzZV9ldmVudCByZWxlYXNlX2V2ZW50OworCXU2NCB0bXA7CQkvKiB0aGlzIGlzIHJlcXVpcmVkIGZvciBjYXN0aW5nLi4uICovCisKKwl0bXAgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJsb2NrZGVwX2FkZHIiLCBkYXRhKTsKKwltZW1jcHkoJnJlbGVhc2VfZXZlbnQuYWRkciwgJnRtcCwgc2l6ZW9mKHZvaWQgKikpOworCXJlbGVhc2VfZXZlbnQubmFtZSA9IChjaGFyICopcmF3X2ZpZWxkX3B0cihldmVudCwgIm5hbWUiLCBkYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5yZWxlYXNlX2V2ZW50KCZyZWxlYXNlX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX3Jhd19ldmVudCh2b2lkICpkYXRhLCBpbnQgY3B1LAorCQkgIHU2NCB0aW1lc3RhbXAsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCWludCB0eXBlOworCisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKGRhdGEpOworCWV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKKworCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAibG9ja19hY3F1aXJlIikpCisJCXByb2Nlc3NfbG9ja19hY3F1aXJlX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfYWNxdWlyZWQiKSkKKwkJcHJvY2Vzc19sb2NrX2FjcXVpcmVkX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfY29udGVuZGVkIikpCisJCXByb2Nlc3NfbG9ja19jb250ZW5kZWRfZXZlbnQoZGF0YSwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAibG9ja19yZWxlYXNlIikpCisJCXByb2Nlc3NfbG9ja19yZWxlYXNlX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGE7CisKKwliemVybygmZGF0YSwgc2l6ZW9mKHN0cnVjdCBzYW1wbGVfZGF0YSkpOworCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CisJdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIGRhdGEucGlkKTsKKworCWlmICh0aHJlYWQgPT0gTlVMTCkgeworCQlwcl9kZWJ1ZygicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCisJCQkgZXZlbnQtPmhlYWRlci50eXBlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWR1bXBfcHJpbnRmKCIgLi4uIHRocmVhZDogJXM6JWRcbiIsIHRocmVhZC0+Y29tbSwgdGhyZWFkLT5waWQpOworCisJaWYgKHByb2ZpbGVfY3B1ICE9IC0xICYmIHByb2ZpbGVfY3B1ICE9IChpbnQpIGRhdGEuY3B1KQorCQlyZXR1cm4gMDsKKworCXByb2Nlc3NfcmF3X2V2ZW50KGRhdGEucmF3X2RhdGEsIGRhdGEuY3B1LCBkYXRhLnRpbWUsIHRocmVhZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVE9ETzogdmFyaW91cyB3YXkgdG8gcHJpbnQsIGNvbG9yaW5nLCBuYW5vIG9yIG1pbGxpIHNlYyAqLworc3RhdGljIHZvaWQgcHJpbnRfcmVzdWx0KHZvaWQpCit7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisJY2hhciBjdXRfbmFtZVsyMF07CisKKwlwcmludGYoIiUxOHMgIiwgIklEIik7CisJcHJpbnRmKCIlMjBzICIsICJOYW1lIik7CisJcHJpbnRmKCIlMTBzICIsICJhY3F1aXJlZCIpOworCXByaW50ZigiJTEwcyAiLCAiY29udGVuZGVkIik7CisKKwlwcmludGYoIiUxNXMgIiwgInRvdGFsIHdhaXQgKG5zKSIpOworCXByaW50ZigiJTE1cyAiLCAibWF4IHdhaXQgKG5zKSIpOworCXByaW50ZigiJTE1cyAiLCAibWluIHdhaXQgKG5zKSIpOworCisJcHJpbnRmKCJcblxuIik7CisKKwl3aGlsZSAoKHN0ID0gcG9wX2Zyb21fcmVzdWx0KCkpKSB7CisJCWJ6ZXJvKGN1dF9uYW1lLCAyMCk7CisKKwkJcHJpbnRmKCIlcCAiLCBzdC0+YWRkcik7CisKKwkJaWYgKHN0cmxlbihzdC0+bmFtZSkgPCAxNikgeworCQkJLyogb3V0cHV0IHJhdyBuYW1lICovCisJCQlwcmludGYoIiUyMHMgIiwgc3QtPm5hbWUpOworCQl9IGVsc2UgeworCQkJc3RybmNweShjdXRfbmFtZSwgc3QtPm5hbWUsIDE2KTsKKwkJCWN1dF9uYW1lWzE2XSA9ICcuJzsKKwkJCWN1dF9uYW1lWzE3XSA9ICcuJzsKKwkJCWN1dF9uYW1lWzE4XSA9ICcuJzsKKwkJCWN1dF9uYW1lWzE5XSA9ICdcMCc7CisJCQkvKiBjdXQgb2ZmIG5hbWUgZm9yIHNhdmluZyBvdXRwdXQgc3R5bGUgKi8KKwkJCXByaW50ZigiJTIwcyAiLCBjdXRfbmFtZSk7CisJCX0KKworCQlwcmludGYoIiUxMHUgIiwgc3QtPm5yX2FjcXVpcmVkKTsKKwkJcHJpbnRmKCIlMTB1ICIsIHN0LT5ucl9jb250ZW5kZWQpOworCisJCXByaW50ZigiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfdG90YWwpOworCQlwcmludGYoIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX21heCk7CisJCXByaW50ZigiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfbWluID09IFVMTE9OR19NQVggPworCQkgICAgICAgMCA6IHN0LT53YWl0X3RpbWVfbWluKTsKKwkJcHJpbnRmKCJcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9tYXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKworCWZvciAoaSA9IDA7IGkgPCBMT0NLSEFTSF9TSVpFOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdCwgJmxvY2toYXNoX3RhYmxlW2ldLCBoYXNoX2VudHJ5KSB7CisJCQlwcmludGYoIiVwOiAlc1xuIiwgc3QtPmFkZHIsIHN0LT5uYW1lKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBlb3BzID0geworCS5zYW1wbGUJCQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5jb21tCQkJPSBldmVudF9fcHJvY2Vzc19jb21tLAorfTsKKworc3RhdGljIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb247CisKK3N0YXRpYyBpbnQgcmVhZF9ldmVudHModm9pZCkKK3sKKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIDApOworCWlmICghc2Vzc2lvbikKKwkJZGllKCJJbml0aWFsaXppbmcgcGVyZiBzZXNzaW9uIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmZW9wcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNvcnRfcmVzdWx0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgTE9DS0hBU0hfU0laRTsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3QsICZsb2NraGFzaF90YWJsZVtpXSwgaGFzaF9lbnRyeSkgeworCQkJaW5zZXJ0X3RvX3Jlc3VsdChzdCwgY29tcGFyZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fY21kX3JlcG9ydCh2b2lkKQoreworCXNldHVwX3BhZ2VyKCk7CisJc2VsZWN0X2tleSgpOworCXJlYWRfZXZlbnRzKCk7CisJc29ydF9yZXN1bHQoKTsKKwlwcmludF9yZXN1bHQoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXBvcnRfdXNhZ2VbXSA9IHsKKwkicGVyZiBsb2NrIHJlcG9ydCBbPG9wdGlvbnM+XSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gcmVwb3J0X29wdGlvbnNbXSA9IHsKKwlPUFRfU1RSSU5HKCdrJywgImtleSIsICZzb3J0X2tleSwgImFjcXVpcmVkIiwKKwkJICAgICJrZXkgZm9yIHNvcnRpbmciKSwKKwkvKiBUT0RPOiB0eXBlICovCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxvY2tfdXNhZ2VbXSA9IHsKKwkicGVyZiBsb2NrIFs8b3B0aW9ucz5dIHtyZWNvcmR8dHJhY2V8cmVwb3J0fSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9ja19vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygnaScsICJpbnB1dCIsICZpbnB1dF9uYW1lLCAiZmlsZSIsICJpbnB1dCBmaWxlIG5hbWUiKSwKKwlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykiKSwKKwlPUFRfQk9PTEVBTignRCcsICJkdW1wLXJhdy10cmFjZSIsICZkdW1wX3RyYWNlLCAiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkiKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWNvcmRfYXJnc1tdID0geworCSJyZWNvcmQiLAorCSItYSIsCisJIi1SIiwKKwkiLU0iLAorCSItZiIsCisJIi1tIiwgIjEwMjQiLAorCSItYyIsICIxIiwKKwkiLWUiLCAibG9jazpsb2NrX2FjcXVpcmU6ciIsCisJIi1lIiwgImxvY2s6bG9ja19hY3F1aXJlZDpyIiwKKwkiLWUiLCAibG9jazpsb2NrX2NvbnRlbmRlZDpyIiwKKwkiLWUiLCAibG9jazpsb2NrX3JlbGVhc2U6ciIsCit9OworCitzdGF0aWMgaW50IF9fY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IHJlY19hcmdjLCBpLCBqOworCWNvbnN0IGNoYXIgKipyZWNfYXJndjsKKworCXJlY19hcmdjID0gQVJSQVlfU0laRShyZWNvcmRfYXJncykgKyBhcmdjIC0gMTsKKwlyZWNfYXJndiA9IGNhbGxvYyhyZWNfYXJnYyArIDEsIHNpemVvZihjaGFyICopKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlY29yZF9hcmdzKTsgaSsrKQorCQlyZWNfYXJndltpXSA9IHN0cmR1cChyZWNvcmRfYXJnc1tpXSk7CisKKwlmb3IgKGogPSAxOyBqIDwgKHVuc2lnbmVkIGludClhcmdjOyBqKyssIGkrKykKKwkJcmVjX2FyZ3ZbaV0gPSBhcmd2W2pdOworCisJQlVHX09OKGkgIT0gcmVjX2FyZ2MpOworCisJcmV0dXJuIGNtZF9yZWNvcmQoaSwgcmVjX2FyZ3YsIE5VTEwpOworfQorCitpbnQgY21kX2xvY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQoreworCXVuc2lnbmVkIGludCBpOworCisJc3ltYm9sX19pbml0KCk7CisJZm9yIChpID0gMDsgaSA8IExPQ0tIQVNIX1NJWkU7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQobG9ja2hhc2hfdGFibGUgKyBpKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGxvY2tfb3B0aW9ucywgbG9ja191c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJaWYgKCFhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMobG9ja191c2FnZSwgbG9ja19vcHRpb25zKTsKKworCWlmICghc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpIHsKKwkJcmV0dXJuIF9fY21kX3JlY29yZChhcmdjLCBhcmd2KTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKGFyZ3ZbMF0sICJyZXBvcnQiLCA2KSkgeworCQl0cmFjZV9oYW5kbGVyID0gJnJlcG9ydF9sb2NrX29wczsKKwkJaWYgKGFyZ2MpIHsKKwkJCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsCisJCQkJCSAgICAgcmVwb3J0X29wdGlvbnMsIHJlcG9ydF91c2FnZSwgMCk7CisJCQlpZiAoYXJnYykKKwkJCQl1c2FnZV93aXRoX29wdGlvbnMocmVwb3J0X3VzYWdlLCByZXBvcnRfb3B0aW9ucyk7CisJCX0KKwkJX19jbWRfcmVwb3J0KCk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ0cmFjZSIpKSB7CisJCS8qIEFsaWFzZWQgdG8gJ3BlcmYgdHJhY2UnICovCisJCXJldHVybiBjbWRfdHJhY2UoYXJnYywgYXJndiwgcHJlZml4KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgIm1hcCIpKSB7CisJCS8qIHJlY3ljbGluZyByZXBvcnRfbG9ja19vcHMgKi8KKwkJdHJhY2VfaGFuZGxlciA9ICZyZXBvcnRfbG9ja19vcHM7CisJCXNldHVwX3BhZ2VyKCk7CisJCXJlYWRfZXZlbnRzKCk7CisJCWR1bXBfbWFwKCk7CisJfSBlbHNlIHsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxvY2tfdXNhZ2UsIGxvY2tfb3B0aW9ucyk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IGMxZTY3NzQuLmFkNDdiZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSAidXRpbC9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKICNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgotI2luY2x1ZGUgInV0aWwvc2Vzc2lvbi5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCS8qIEZvciBkZWJ1Z2ZzX3BhdGggKi8KICNpbmNsdWRlICJ1dGlsL3Byb2JlLWZpbmRlci5oIgpAQCAtNTUsMTEgKzU0LDEzIEBACiAJYm9vbCBuZWVkX2R3YXJmOwogCWJvb2wgbGlzdF9ldmVudHM7CiAJYm9vbCBmb3JjZV9hZGQ7CisJYm9vbCBzaG93X2xpbmVzOwogCWludCBucl9wcm9iZTsKIAlzdHJ1Y3QgcHJvYmVfcG9pbnQgcHJvYmVzW01BWF9QUk9CRVNdOwogCXN0cnVjdCBzdHJsaXN0ICpkZWxsaXN0OwotCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnBzZXNzaW9uOwotCXN0cnVjdCBtYXAgKmttYXA7CisJc3RydWN0IG1hcF9ncm91cHMga21hcF9ncm91cHM7CisJc3RydWN0IG1hcCAqa21hcHNbTUFQX19OUl9UWVBFU107CisJc3RydWN0IGxpbmVfcmFuZ2UgbGluZV9yYW5nZTsKIH0gc2Vzc2lvbjsKIAogCkBAIC0xMjAsOCArMTIxLDggQEAKIHN0YXRpYyB2b2lkIGV2YWx1YXRlX3Byb2JlX3BvaW50KHN0cnVjdCBwcm9iZV9wb2ludCAqcHApCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwotCXN5bSA9IG1hcF9fZmluZF9zeW1ib2xfYnlfbmFtZShzZXNzaW9uLmttYXAsIHBwLT5mdW5jdGlvbiwKLQkJCQkgICAgICAgc2Vzc2lvbi5wc2Vzc2lvbiwgTlVMTCk7CisJc3ltID0gbWFwX19maW5kX3N5bWJvbF9ieV9uYW1lKHNlc3Npb24ua21hcHNbTUFQX19GVU5DVElPTl0sCisJCQkJICAgICAgIHBwLT5mdW5jdGlvbiwgTlVMTCk7CiAJaWYgKCFzeW0pCiAJCWRpZSgiS2VybmVsIHN5bWJvbCBcJyVzXCcgbm90IGZvdW5kIC0gcHJvYmUgbm90IGFkZGVkLiIsCiAJCSAgICBwcC0+ZnVuY3Rpb24pOwpAQCAtMTMwLDEyICsxMzEsMjMgQEAKICNpZm5kZWYgTk9fTElCRFdBUkYKIHN0YXRpYyBpbnQgb3Blbl92bWxpbnV4KHZvaWQpCiB7Ci0JaWYgKG1hcF9fbG9hZChzZXNzaW9uLmttYXAsIHNlc3Npb24ucHNlc3Npb24sIE5VTEwpIDwgMCkgeworCWlmIChtYXBfX2xvYWQoc2Vzc2lvbi5rbWFwc1tNQVBfX0ZVTkNUSU9OXSwgTlVMTCkgPCAwKSB7CiAJCXByX2RlYnVnKCJGYWlsZWQgdG8gbG9hZCBrZXJuZWwgbWFwLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwcl9kZWJ1ZygiVHJ5IHRvIG9wZW4gJXNcbiIsIHNlc3Npb24ua21hcC0+ZHNvLT5sb25nX25hbWUpOwotCXJldHVybiBvcGVuKHNlc3Npb24ua21hcC0+ZHNvLT5sb25nX25hbWUsIE9fUkRPTkxZKTsKKwlwcl9kZWJ1ZygiVHJ5IHRvIG9wZW4gJXNcbiIsCisJCSBzZXNzaW9uLmttYXBzW01BUF9fRlVOQ1RJT05dLT5kc28tPmxvbmdfbmFtZSk7CisJcmV0dXJuIG9wZW4oc2Vzc2lvbi5rbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZHNvLT5sb25nX25hbWUsIE9fUkRPTkxZKTsKK30KKworc3RhdGljIGludCBvcHRfc2hvd19saW5lcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLAorCQkJICBjb25zdCBjaGFyICpzdHIsIGludCB1bnNldCBfX3VzZWQpCit7CisJaWYgKHN0cikKKwkJcGFyc2VfbGluZV9yYW5nZV9kZXNjKHN0ciwgJnNlc3Npb24ubGluZV9yYW5nZSk7CisJSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24ubGluZV9yYW5nZS5saW5lX2xpc3QpOworCXNlc3Npb24uc2hvd19saW5lcyA9IHRydWU7CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIApAQCAtMTQ0LDYgKzE1Niw3IEBACiAJInBlcmYgcHJvYmUgWzxvcHRpb25zPl0gLS1hZGQgJ1BST0JFREVGJyBbLS1hZGQgJ1BST0JFREVGJyAuLi5dIiwKIAkicGVyZiBwcm9iZSBbPG9wdGlvbnM+XSAtLWRlbCAnW0dST1VQOl1FVkVOVCcgLi4uIiwKIAkicGVyZiBwcm9iZSAtLWxpc3QiLAorCSJwZXJmIHByb2JlIC0tbGluZSAnTElORURFU0MnIiwKIAlOVUxMCiB9OwogCkBAIC0xODIsOSArMTk1LDMxIEBACiAJCW9wdF9hZGRfcHJvYmVfZXZlbnQpLAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJnNlc3Npb24uZm9yY2VfYWRkLCAiZm9yY2libHkgYWRkIGV2ZW50cyIKIAkJICAgICIgd2l0aCBleGlzdGluZyBuYW1lIiksCisjaWZuZGVmIE5PX0xJQkRXQVJGCisJT1BUX0NBTExCQUNLKCdMJywgImxpbmUiLCBOVUxMLAorCQkgICAgICJGVU5DWzpSTE5bK05VTXw6UkxOMl1dfFNSQzpBTE5bK05VTXw6QUxOMl0iLAorCQkgICAgICJTaG93IHNvdXJjZSBjb2RlIGxpbmVzLiIsIG9wdF9zaG93X2xpbmVzKSwKKyNlbmRpZgogCU9QVF9FTkQoKQogfTsKIAorLyogSW5pdGlhbGl6ZSBzeW1ib2wgbWFwcyBmb3Igdm1saW51eCAqLworc3RhdGljIHZvaWQgaW5pdF92bWxpbnV4KHZvaWQpCit7CisJc3ltYm9sX2NvbmYuc29ydF9ieV9uYW1lID0gdHJ1ZTsKKwlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpCisJCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlOworCWVsc2UKKwkJcHJfZGVidWcoIlVzZSB2bWxpbnV4OiAlc1xuIiwgc3ltYm9sX2NvbmYudm1saW51eF9uYW1lKTsKKwlpZiAoc3ltYm9sX19pbml0KCkgPCAwKQorCQlkaWUoIkZhaWxlZCB0byBpbml0IHN5bWJvbCBtYXAuIik7CisKKwltYXBfZ3JvdXBzX19pbml0KCZzZXNzaW9uLmttYXBfZ3JvdXBzKTsKKwlpZiAobWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKCZzZXNzaW9uLmttYXBfZ3JvdXBzLAorCQkJCQkgICBzZXNzaW9uLmttYXBzKSA8IDApCisJCWRpZSgiRmFpbGVkIHRvIGNyZWF0ZSBrZXJuZWwgbWFwcy4iKTsKK30KKwogaW50IGNtZF9wcm9iZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7CiAJaW50IGksIHJldDsKQEAgLTIwMyw3ICsyMzgsOCBAQAogCQlwYXJzZV9wcm9iZV9ldmVudF9hcmd2KGFyZ2MsIGFyZ3YpOwogCX0KIAotCWlmICgoIXNlc3Npb24ubnJfcHJvYmUgJiYgIXNlc3Npb24uZGVsbGlzdCAmJiAhc2Vzc2lvbi5saXN0X2V2ZW50cykpCisJaWYgKCghc2Vzc2lvbi5ucl9wcm9iZSAmJiAhc2Vzc2lvbi5kZWxsaXN0ICYmICFzZXNzaW9uLmxpc3RfZXZlbnRzICYmCisJICAgICAhc2Vzc2lvbi5zaG93X2xpbmVzKSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKIAogCWlmIChkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoZGVidWdmc19wYXRoKSA8IDApCkBAIC0yMTUsMTAgKzI1MSwzNCBAQAogCQkJCSAgICIgLS1hZGQvLS1kZWwuXG4iKTsKIAkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CiAJCX0KKwkJaWYgKHNlc3Npb24uc2hvd19saW5lcykgeworCQkJcHJfd2FybmluZygiICBFcnJvcjogRG9uJ3QgdXNlIC0tbGlzdCB3aXRoIC0tbGluZS5cbiIpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKKwkJfQogCQlzaG93X3BlcmZfcHJvYmVfZXZlbnRzKCk7CiAJCXJldHVybiAwOwogCX0KIAorI2lmbmRlZiBOT19MSUJEV0FSRgorCWlmIChzZXNzaW9uLnNob3dfbGluZXMpIHsKKwkJaWYgKHNlc3Npb24ubnJfcHJvYmUgIT0gMCB8fCBzZXNzaW9uLmRlbGxpc3QpIHsKKwkJCXByX3dhcm5pbmcoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpbmUgd2l0aCIKKwkJCQkgICAiIC0tYWRkLy0tZGVsLlxuIik7CisJCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOworCQl9CisJCWluaXRfdm1saW51eCgpOworCQlmZCA9IG9wZW5fdm1saW51eCgpOworCQlpZiAoZmQgPCAwKQorCQkJZGllKCJDb3VsZCBub3Qgb3BlbiBkZWJ1Z2luZm8gZmlsZS4iKTsKKwkJcmV0ID0gZmluZF9saW5lX3JhbmdlKGZkLCAmc2Vzc2lvbi5saW5lX3JhbmdlKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJZGllKCJTb3VyY2UgbGluZSBpcyBub3QgZm91bmQuXG4iKTsKKwkJY2xvc2UoZmQpOworCQlzaG93X2xpbmVfcmFuZ2UoJnNlc3Npb24ubGluZV9yYW5nZSk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCiAJaWYgKHNlc3Npb24uZGVsbGlzdCkgewogCQlkZWxfdHJhY2Vfa3Byb2JlX2V2ZW50cyhzZXNzaW9uLmRlbGxpc3QpOwogCQlzdHJsaXN0X19kZWxldGUoc2Vzc2lvbi5kZWxsaXN0KTsKQEAgLTIyNiwyMCArMjg2LDggQEAKIAkJCXJldHVybiAwOwogCX0KIAotCS8qIEluaXRpYWxpemUgc3ltYm9sIG1hcHMgZm9yIHZtbGludXggKi8KLQlzeW1ib2xfY29uZi5zb3J0X2J5X25hbWUgPSB0cnVlOwotCWlmIChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgPT0gTlVMTCkKLQkJc3ltYm9sX2NvbmYudHJ5X3ZtbGludXhfcGF0aCA9IHRydWU7Ci0JaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKLQkJZGllKCJGYWlsZWQgdG8gaW5pdCBzeW1ib2wgbWFwLiIpOwotCXNlc3Npb24ucHNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhOVUxMLCBPX1dST05MWSwgZmFsc2UpOwotCWlmIChzZXNzaW9uLnBzZXNzaW9uID09IE5VTEwpCi0JCWRpZSgiRmFpbGVkIHRvIGluaXQgcGVyZl9zZXNzaW9uLiIpOwotCXNlc3Npb24ua21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZSgmc2Vzc2lvbi5wc2Vzc2lvbi0+a21hcHMsCi0JCQkJCQlNQVBfX0ZVTkNUSU9OLAotCQkJCQkJIltrZXJuZWwua2FsbHN5bXNdIik7Ci0JaWYgKCFzZXNzaW9uLmttYXApCi0JCWRpZSgiQ291bGQgbm90IGZpbmQga2VybmVsIG1hcC5cbiIpOworCS8qIEFkZCBwcm9iZXMgKi8KKwlpbml0X3ZtbGludXgoKTsKIAogCWlmIChzZXNzaW9uLm5lZWRfZHdhcmYpCiAjaWZkZWYgTk9fTElCRFdBUkYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCAyNjU0MjUzLi43NzE1MzNjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCkBAIC01LDEwICs1LDEzIEBACiAgKiAob3IgYSBDUFUsIG9yIGEgUElEKSBpbnRvIHRoZSBwZXJmLmRhdGEgb3V0cHV0IGZpbGUgLSBmb3IKICAqIGxhdGVyIGFuYWx5c2lzIHZpYSBwZXJmIHJlcG9ydC4KICAqLworI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogCiAjaW5jbHVkZSAicGVyZi5oIgogCisjaW5jbHVkZSAidXRpbC9idWlsZC1pZC5oIgogI2luY2x1ZGUgInV0aWwvdXRpbC5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCkBAIC02Miw2ICs2NSw3IEBACiBzdGF0aWMgaW50CQkJbnJfY3B1CQkJCT0gICAgICAwOwogCiBzdGF0aWMgaW50CQkJZmlsZV9uZXcJCQk9ICAgICAgMTsKK3N0YXRpYyBvZmZfdAkJCXBvc3RfcHJvY2Vzc2luZ19vZmZzZXQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9zZXNzaW9uCSpzZXNzaW9uOwogCkBAIC0xMTEsMjIgKzExNSwxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgd3JpdGVfZXZlbnQoZXZlbnRfdCAqYnVmLCBzaXplX3Qgc2l6ZSkKLXsKLQkvKgotCSogQWRkIGl0IHRvIHRoZSBsaXN0IG9mIERTT3MsIHNvIHRoYXQgd2hlbiB3ZSBmaW5pc2ggdGhpcwotCSAqIHJlY29yZCBzZXNzaW9uIHdlIGNhbiBwaWNrIHRoZSBhdmFpbGFibGUgYnVpbGQtaWRzLgotCSAqLwotCWlmIChidWYtPmhlYWRlci50eXBlID09IFBFUkZfUkVDT1JEX01NQVApCi0JCWRzb3NfX2ZpbmRuZXcoYnVmLT5tbWFwLmZpbGVuYW1lKTsKLQotCXdyaXRlX291dHB1dChidWYsIHNpemUpOwotfQotCiBzdGF0aWMgaW50IHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQoZXZlbnRfdCAqZXZlbnQsCiAJCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmIF9fdXNlZCkKIHsKLQl3cml0ZV9ldmVudChldmVudCwgZXZlbnQtPmhlYWRlci5zaXplKTsKKwl3cml0ZV9vdXRwdXQoZXZlbnQsIGV2ZW50LT5oZWFkZXIuc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3OCwxNCArMTcwLDE0IEBACiAJCXNpemUgPSBtZC0+bWFzayArIDEgLSAob2xkICYgbWQtPm1hc2spOwogCQlvbGQgKz0gc2l6ZTsKIAotCQl3cml0ZV9ldmVudChidWYsIHNpemUpOworCQl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKIAl9CiAKIAlidWYgPSAmZGF0YVtvbGQgJiBtZC0+bWFza107CiAJc2l6ZSA9IGhlYWQgLSBvbGQ7CiAJb2xkICs9IHNpemU7CiAKLQl3cml0ZV9ldmVudChidWYsIHNpemUpOworCXdyaXRlX291dHB1dChidWYsIHNpemUpOwogCiAJbWQtPnByZXYgPSBvbGQ7CiAJbW1hcF93cml0ZV90YWlsKG1kLCBvbGQpOwpAQCAtMzk1LDEwICszODcsMjEgQEAKIAlucl9jcHUrKzsKIH0KIAorc3RhdGljIGludCBwcm9jZXNzX2J1aWxkaWRzKHZvaWQpCit7CisJdTY0IHNpemUgPSBsc2VlayhvdXRwdXQsIDAsIFNFRUtfQ1VSKTsKKworCXNlc3Npb24tPmZkID0gb3V0cHV0OworCXJldHVybiBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgcG9zdF9wcm9jZXNzaW5nX29mZnNldCwKKwkJCQkJICAgICAgc2l6ZSAtIHBvc3RfcHJvY2Vzc2luZ19vZmZzZXQsCisJCQkJCSAgICAgIHNpemUsICZidWlsZF9pZF9fbWFya19kc29faGl0X29wcyk7Cit9CisKIHN0YXRpYyB2b2lkIGF0ZXhpdF9oZWFkZXIodm9pZCkKIHsKIAlzZXNzaW9uLT5oZWFkZXIuZGF0YV9zaXplICs9IGJ5dGVzX3dyaXR0ZW47CiAKKwlwcm9jZXNzX2J1aWxkaWRzKCk7CiAJcGVyZl9oZWFkZXJfX3dyaXRlKCZzZXNzaW9uLT5oZWFkZXIsIG91dHB1dCwgdHJ1ZSk7CiB9CiAKQEAgLTU1MSw4ICs1NTQsMjMgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJcG9zdF9wcm9jZXNzaW5nX29mZnNldCA9IGxzZWVrKG91dHB1dCwgMCwgU0VFS19DVVIpOworCisJZXJyID0gZXZlbnRfX3N5bnRoZXNpemVfa2VybmVsX21tYXAocHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKKwkJCQkJICAgIHNlc3Npb24sICJfdGV4dCIpOworCWlmIChlcnIgPCAwKSB7CisJCXByX2VycigiQ291bGRuJ3QgcmVjb3JkIGtlcm5lbCByZWZlcmVuY2UgcmVsb2NhdGlvbiBzeW1ib2wuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBldmVudF9fc3ludGhlc2l6ZV9tb2R1bGVzKHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsIHNlc3Npb24pOworCWlmIChlcnIgPCAwKSB7CisJCXByX2VycigiQ291bGRuJ3QgcmVjb3JkIGtlcm5lbCByZWZlcmVuY2UgcmVsb2NhdGlvbiBzeW1ib2wuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoIXN5c3RlbV93aWRlICYmIHByb2ZpbGVfY3B1ID09IC0xKQotCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkLCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LAorCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQodGFyZ2V0X3BpZCwgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKIAkJCQkJIHNlc3Npb24pOwogCWVsc2UKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LCBzZXNzaW9uKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCA4NjBmMWVlLi5jZmM2NTVkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0zNCw2ICszNCw4IEBACiBzdGF0aWMgY2hhcgkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIAogc3RhdGljIGludAkJZm9yY2U7CitzdGF0aWMgYm9vbAkJaGlkZV91bnJlc29sdmVkOworc3RhdGljIGJvb2wJCWRvbnRfdXNlX2NhbGxjaGFpbnM7CiAKIHN0YXRpYyBpbnQJCXNob3dfdGhyZWFkczsKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9yZWFkX3ZhbHVlcwlzaG93X3RocmVhZHNfdmFsdWVzOwpAQCAtOTEsMTEgKzkzLDggQEAKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlkYXRhLnBpZCwgZGF0YS50aWQsCi0JCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKLQkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7CiAKIAlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pIHsKIAkJdW5zaWduZWQgaW50IGk7CkBAIC0xMjEsNyArMTIwLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChhbC5maWx0ZXJlZCkKKwlpZiAoYWwuZmlsdGVyZWQgfHwgKGhpZGVfdW5yZXNvbHZlZCAmJiBhbC5zeW0gPT0gTlVMTCkpCiAJCXJldHVybiAwOwogCiAJaWYgKHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCBkYXRhLmNhbGxjaGFpbiwgZGF0YS5wZXJpb2QpKSB7CkBAIC0xNTYsMTQgKzE1NSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fc2V0dXBfc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKIHsKLQlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikpIHsKKwlpZiAoIShzZWxmLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikpIHsKIAkJaWYgKHNvcnRfX2hhc19wYXJlbnQpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAic2VsZWN0ZWQgLS1zb3J0IHBhcmVudCwgYnV0IG5vIgogCQkJCQkiIGNhbGxjaGFpbiBkYXRhLiBEaWQgeW91IGNhbGwiCiAJCQkJCSIgcGVyZiByZWNvcmQgd2l0aG91dCAtZz9cbiIpOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKIAkJCWZwcmludGYoc3RkZXJyLCAic2VsZWN0ZWQgLWcgYnV0IG5vIGNhbGxjaGFpbiBkYXRhLiIKQEAgLTE3MSwxMiArMTcwLDEzIEBACiAJCQkJCSIgLWc/XG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCX0gZWxzZSBpZiAoY2FsbGNoYWluX3BhcmFtLm1vZGUgIT0gQ0hBSU5fTk9ORSAmJiAhc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgeworCX0gZWxzZSBpZiAoIWRvbnRfdXNlX2NhbGxjaGFpbnMgJiYgY2FsbGNoYWluX3BhcmFtLm1vZGUgIT0gQ0hBSU5fTk9ORSAmJgorCQkgICAhc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgewogCQkJc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA9IHRydWU7CiAJCQlpZiAocmVnaXN0ZXJfY2FsbGNoYWluX3BhcmFtKCZjYWxsY2hhaW5fcGFyYW0pIDwgMCkgewogCQkJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcmVnaXN0ZXIgY2FsbGNoYWluIgogCQkJCQkJIiBwYXJhbXNcbiIpOwotCQkJCXJldHVybiAtMTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAl9CiAKQEAgLTE4NCwyMCArMTg0LDE4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX21tYXBfZXZlbnQJPSBldmVudF9fcHJvY2Vzc19tbWFwLAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2V4aXRfZXZlbnQJPSBldmVudF9fcHJvY2Vzc190YXNrLAotCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBldmVudF9fcHJvY2Vzc190YXNrLAotCS5wcm9jZXNzX2xvc3RfZXZlbnQJPSBldmVudF9fcHJvY2Vzc19sb3N0LAotCS5wcm9jZXNzX3JlYWRfZXZlbnQJPSBwcm9jZXNzX3JlYWRfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5tbWFwCT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLmV4aXQJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkubG9zdAk9IGV2ZW50X19wcm9jZXNzX2xvc3QsCisJLnJlYWQJPSBwcm9jZXNzX3JlYWRfZXZlbnQsCiB9OwogCi0KIHN0YXRpYyBpbnQgX19jbWRfcmVwb3J0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uOwogCiAJc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCBmb3JjZSk7CkBAIC0yMDcsNiArMjA1LDEwIEBACiAJaWYgKHNob3dfdGhyZWFkcykKIAkJcGVyZl9yZWFkX3ZhbHVlc19pbml0KCZzaG93X3RocmVhZHNfdmFsdWVzKTsKIAorCXJldCA9IHBlcmZfc2Vzc2lvbl9fc2V0dXBfc2FtcGxlX3R5cGUoc2Vzc2lvbik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZGVsZXRlOworCiAJcmV0ID0gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmZXZlbnRfb3BzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9kZWxldGU7CkBAIC0yNDMsMTEgKzI0NSwxOSBAQAogCiBzdGF0aWMgaW50CiBwYXJzZV9jYWxsY2hhaW5fb3B0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsIGNvbnN0IGNoYXIgKmFyZywKLQkJICAgIGludCB1bnNldCBfX3VzZWQpCisJCSAgICBpbnQgdW5zZXQpCiB7CiAJY2hhciAqdG9rOwogCWNoYXIgKmVuZHB0cjsKIAorCS8qCisJICogLS1uby1jYWxsLWdyYXBoCisJICovCisJaWYgKHVuc2V0KSB7CisJCWRvbnRfdXNlX2NhbGxjaGFpbnMgPSB0cnVlOworCQlyZXR1cm4gMDsKKwl9CisKIAlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gdHJ1ZTsKIAogCWlmICghYXJnKQpAQCAtMzE5LDcgKzMyOSw3IEBACiAJCSAgICJwcmV0dHkgcHJpbnRpbmcgc3R5bGUga2V5OiBub3JtYWwgcmF3IiksCiAJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKIAkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJmV2ZW50X29wcy5mdWxsX3BhdGhzLAorCU9QVF9CT09MRUFOKCdQJywgImZ1bGwtcGF0aHMiLCAmc3ltYm9sX2NvbmYuZnVsbF9wYXRocywKIAkJICAgICJEb24ndCBzaG9ydGVuIHRoZSBwYXRobmFtZXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3dkIiksCiAJT1BUX1NUUklORygncCcsICJwYXJlbnQiLCAmcGFyZW50X3BhdHRlcm4sICJyZWdleCIsCiAJCSAgICJyZWdleCBmaWx0ZXIgdG8gaWRlbnRpZnkgcGFyZW50LCBzZWU6ICctLXNvcnQgcGFyZW50JyIpLApAQCAtMzQwLDYgKzM1MCw4IEBACiAJT1BUX1NUUklORygndCcsICJmaWVsZC1zZXBhcmF0b3IiLCAmc3ltYm9sX2NvbmYuZmllbGRfc2VwLCAic2VwYXJhdG9yIiwKIAkJICAgInNlcGFyYXRvciBmb3IgY29sdW1ucywgbm8gc3BhY2VzIHdpbGwgYmUgYWRkZWQgYmV0d2VlbiAiCiAJCSAgICJjb2x1bW5zICcuJyBpcyByZXNlcnZlZC4iKSwKKwlPUFRfQk9PTEVBTignVScsICJoaWRlLXVucmVzb2x2ZWQiLCAmaGlkZV91bnJlc29sdmVkLAorCQkgICAgIk9ubHkgZGlzcGxheSBlbnRyaWVzIHJlc29sdmVkIHRvIGEgc3ltYm9sIiksCiAJT1BUX0VORCgpCiB9OwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCmluZGV4IDgwMjA5ZGYuLjRmNWEwM2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCkBAIC0xNjIxLDExICsxNjIxLDggQEAKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlkYXRhLnBpZCwgZGF0YS50aWQsCi0JCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKLQkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7CiAKIAl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZGF0YS5waWQpOwogCWlmICh0aHJlYWQgPT0gTlVMTCkgewpAQCAtMTY1MywzMyArMTY1MCwyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQotewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKLQkJCSJ3aXRob3V0IC1SPyIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2xvc3RfZXZlbnQJPSBwcm9jZXNzX2xvc3RfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5jb21tCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKKwkubG9zdAk9IHByb2Nlc3NfbG9zdF9ldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgcmVhZF9ldmVudHModm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCWlmIChwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQorCQllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCiAJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IGM3MGQ3MjAuLmU4Yzg1ZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAidXRpbC9ldmVudC5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogCiAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNzksNiArODAsOCBAQAogCiBzdGF0aWMgaW50CQkJZXZlbnRfc2NhbGVkW01BWF9DT1VOVEVSU107CiAKK3N0YXRpYyB2b2xhdGlsZSBpbnQgZG9uZSA9IDA7CisKIHN0cnVjdCBzdGF0cwogewogCWRvdWJsZSBuLCBtZWFuLCBNMjsKQEAgLTI0Nyw2MSArMjUwLDY0IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHQwLCB0MTsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgY291bnRlcjsKLQlpbnQgcGlkOworCWludCBwaWQgPSB0YXJnZXRfcGlkOwogCWludCBjaGlsZF9yZWFkeV9waXBlWzJdLCBnb19waXBlWzJdOworCWNvbnN0IGJvb2wgZm9ya3MgPSAodGFyZ2V0X3BpZCA9PSAtMSAmJiBhcmdjID4gMCk7CiAJY2hhciBidWY7CiAKIAlpZiAoIXN5c3RlbV93aWRlKQogCQlucl9jcHVzID0gMTsKIAotCWlmIChwaXBlKGNoaWxkX3JlYWR5X3BpcGUpIDwgMCB8fCBwaXBlKGdvX3BpcGUpIDwgMCkgeworCWlmIChmb3JrcyAmJiAocGlwZShjaGlsZF9yZWFkeV9waXBlKSA8IDAgfHwgcGlwZShnb19waXBlKSA8IDApKSB7CiAJCXBlcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBwaXBlcyIpOwogCQlleGl0KDEpOwogCX0KIAotCWlmICgocGlkID0gZm9yaygpKSA8IDApCi0JCXBlcnJvcigiZmFpbGVkIHRvIGZvcmsiKTsKKwlpZiAoZm9ya3MpIHsKKwkJaWYgKChwaWQgPSBmb3JrKCkpIDwgMCkKKwkJCXBlcnJvcigiZmFpbGVkIHRvIGZvcmsiKTsKIAotCWlmICghcGlkKSB7Ci0JCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMF0pOwotCQljbG9zZShnb19waXBlWzFdKTsKLQkJZmNudGwoZ29fcGlwZVswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisJCWlmICghcGlkKSB7CisJCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKKwkJCWNsb3NlKGdvX3BpcGVbMV0pOworCQkJZmNudGwoZ29fcGlwZVswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisKKwkJCS8qCisJCQkgKiBEbyBhIGR1bW15IGV4ZWN2cCB0byBnZXQgdGhlIFBMVCBlbnRyeSByZXNvbHZlZCwKKwkJCSAqIHNvIHdlIGF2b2lkIHRoZSByZXNvbHZlciBvdmVyaGVhZCBvbiB0aGUgcmVhbAorCQkJICogZXhlY3ZwIGNhbGwuCisJCQkgKi8KKwkJCWV4ZWN2cCgiIiwgKGNoYXIgKiopYXJndik7CisKKwkJCS8qCisJCQkgKiBUZWxsIHRoZSBwYXJlbnQgd2UncmUgcmVhZHkgdG8gZ28KKwkJCSAqLworCQkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVsxXSk7CisKKwkJCS8qCisJCQkgKiBXYWl0IHVudGlsIHRoZSBwYXJlbnQgdGVsbHMgdXMgdG8gZ28uCisJCQkgKi8KKwkJCWlmIChyZWFkKGdvX3BpcGVbMF0sICZidWYsIDEpID09IC0xKQorCQkJCXBlcnJvcigidW5hYmxlIHRvIHJlYWQgcGlwZSIpOworCisJCQlleGVjdnAoYXJndlswXSwgKGNoYXIgKiopYXJndik7CisKKwkJCXBlcnJvcihhcmd2WzBdKTsKKwkJCWV4aXQoLTEpOworCQl9CisKKwkJY2hpbGRfcGlkID0gcGlkOwogCiAJCS8qCi0JCSAqIERvIGEgZHVtbXkgZXhlY3ZwIHRvIGdldCB0aGUgUExUIGVudHJ5IHJlc29sdmVkLAotCQkgKiBzbyB3ZSBhdm9pZCB0aGUgcmVzb2x2ZXIgb3ZlcmhlYWQgb24gdGhlIHJlYWwKLQkJICogZXhlY3ZwIGNhbGwuCi0JCSAqLwotCQlleGVjdnAoIiIsIChjaGFyICoqKWFyZ3YpOwotCi0JCS8qCi0JCSAqIFRlbGwgdGhlIHBhcmVudCB3ZSdyZSByZWFkeSB0byBnbworCQkgKiBXYWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgcmVhZHkgdG8gZXhlYy4KIAkJICovCiAJCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMV0pOwotCi0JCS8qCi0JCSAqIFdhaXQgdW50aWwgdGhlIHBhcmVudCB0ZWxscyB1cyB0byBnby4KLQkJICovCi0JCWlmIChyZWFkKGdvX3BpcGVbMF0sICZidWYsIDEpID09IC0xKQorCQljbG9zZShnb19waXBlWzBdKTsKKwkJaWYgKHJlYWQoY2hpbGRfcmVhZHlfcGlwZVswXSwgJmJ1ZiwgMSkgPT0gLTEpCiAJCQlwZXJyb3IoInVuYWJsZSB0byByZWFkIHBpcGUiKTsKLQotCQlleGVjdnAoYXJndlswXSwgKGNoYXIgKiopYXJndik7Ci0KLQkJcGVycm9yKGFyZ3ZbMF0pOwotCQlleGl0KC0xKTsKKwkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7CiAJfQogCi0JY2hpbGRfcGlkID0gcGlkOwotCi0JLyoKLQkgKiBXYWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgcmVhZHkgdG8gZXhlYy4KLQkgKi8KLQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzFdKTsKLQljbG9zZShnb19waXBlWzBdKTsKLQlpZiAocmVhZChjaGlsZF9yZWFkeV9waXBlWzBdLCAmYnVmLCAxKSA9PSAtMSkKLQkJcGVycm9yKCJ1bmFibGUgdG8gcmVhZCBwaXBlIik7Ci0JY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7Ci0KIAlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnJfY291bnRlcnM7IGNvdW50ZXIrKykKIAkJY3JlYXRlX3BlcmZfc3RhdF9jb3VudGVyKGNvdW50ZXIsIHBpZCk7CiAKQEAgLTMxMCw4ICszMTYsMTIgQEAKIAkgKi8KIAl0MCA9IHJkY2xvY2soKTsKIAotCWNsb3NlKGdvX3BpcGVbMV0pOwotCXdhaXQoJnN0YXR1cyk7CisJaWYgKGZvcmtzKSB7CisJCWNsb3NlKGdvX3BpcGVbMV0pOworCQl3YWl0KCZzdGF0dXMpOworCX0gZWxzZSB7CisJCXdoaWxlKCFkb25lKTsKKwl9CiAKIAl0MSA9IHJkY2xvY2soKTsKIApAQCAtNDE3LDEwICs0MjcsMTMgQEAKIAlmZmx1c2goc3Rkb3V0KTsKIAogCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwgIiBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciBcJyVzIiwgYXJndlswXSk7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOworCWZwcmludGYoc3RkZXJyLCAiIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICIpOworCWlmKHRhcmdldF9waWQgPT0gLTEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJcJyVzIiwgYXJndlswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOworCX1lbHNlCisJCWZwcmludGYoc3RkZXJyLCAidGFzayBwaWQgXCclZCIsIHRhcmdldF9waWQpOwogCiAJZnByaW50ZihzdGRlcnIsICJcJyIpOwogCWlmIChydW5fY291bnQgPiAxKQpAQCAtNDQ1LDYgKzQ1OCw5IEBACiAKIHN0YXRpYyB2b2lkIHNraXBfc2lnbmFsKGludCBzaWdubykKIHsKKwlpZih0YXJnZXRfcGlkICE9IC0xKQorCQlkb25lID0gMTsKKwogCXNpZ25yID0gc2lnbm87CiB9CiAKQEAgLTQ2MSw3ICs0NzcsNyBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN0YXRfdXNhZ2VbXSA9IHsKLQkicGVyZiBzdGF0IFs8b3B0aW9ucz5dIDxjb21tYW5kPiIsCisJInBlcmYgc3RhdCBbPG9wdGlvbnM+XSBbPGNvbW1hbmQ+XSIsCiAJTlVMTAogfTsKIApAQCAtNDkyLDcgKzUwOCw3IEBACiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBzdGF0X3VzYWdlLAogCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKLQlpZiAoIWFyZ2MpCisJaWYgKCFhcmdjICYmIHRhcmdldF9waWQgPT0gLTEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKIAlpZiAocnVuX2NvdW50IDw9IDApCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCAzZjhiYmNmLi4wZDRkOGZmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCkBAIC0xMDI5LDMzICsxMDI5LDI0IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0JaWYgKCEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiTm8gdHJhY2Ugc2FtcGxlcyBmb3VuZCBpbiB0aGUgZmlsZS5cbiIKLQkJCQkiSGF2ZSB5b3UgdXNlZCAncGVyZiB0aW1lY2hhcnQgcmVjb3JkJyB0byByZWNvcmQgaXQ/XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19jb21tX2V2ZW50CT0gcHJvY2Vzc19jb21tX2V2ZW50LAotCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBwcm9jZXNzX2ZvcmtfZXZlbnQsCi0JLnByb2Nlc3NfZXhpdF9ldmVudAk9IHByb2Nlc3NfZXhpdF9ldmVudCwKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBxdWV1ZV9zYW1wbGVfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLmNvbW0JPSBwcm9jZXNzX2NvbW1fZXZlbnQsCisJLmZvcmsJPSBwcm9jZXNzX2ZvcmtfZXZlbnQsCisJLmV4aXQJPSBwcm9jZXNzX2V4aXRfZXZlbnQsCisJLnNhbXBsZQk9IHF1ZXVlX3NhbXBsZV9ldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgX19jbWRfdGltZWNoYXJ0KHZvaWQpCiB7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIXBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzZXNzaW9uLCAidGltZWNoYXJ0IHJlY29yZCIpKQorCQlnb3RvIG91dF9kZWxldGU7CisKIAlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2RlbGV0ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCA0YjkxZDhjLi4zMWYyZTU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC05NCw2ICs5NCw3IEBACiAKIHN0YXRpYyBjaGFyCQkJKnN5bV9maWx0ZXIJCQk9ICAgTlVMTDsKIHN0cnVjdCBzeW1fZW50cnkJCSpzeW1fZmlsdGVyX2VudHJ5CQk9ICAgTlVMTDsKK3N0cnVjdCBzeW1fZW50cnkJCSpzeW1fZmlsdGVyX2VudHJ5X3NjaGVkCQk9ICAgTlVMTDsKIHN0YXRpYyBpbnQJCQlzeW1fcGNudF9maWx0ZXIJCQk9ICAgICAgNTsKIHN0YXRpYyBpbnQJCQlzeW1fY291bnRlcgkJCT0gICAgICAwOwogc3RhdGljIGludAkJCWRpc3BsYXlfd2VpZ2h0ZWQJCT0gICAgIC0xOwpAQCAtMjAxLDEwICsyMDIsOSBAQAogCWxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAogCXNwcmludGYoY29tbWFuZCwKLQkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4ICIKLQkJCSAiLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzIiwKLQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAotCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKKwkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPSUjMCpMeCAtLXN0b3AtYWRkcmVzcz0lIzAqTHggLWRTICVzIiwKKwkJQklUU19QRVJfTE9ORyAvIDQsIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5zdGFydCksCisJCUJJVFNfUEVSX0xPTkcgLyA0LCBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+ZW5kKSwgcGF0aCk7CiAKIAlmaWxlID0gcG9wZW4oY29tbWFuZCwgInIiKTsKIAlpZiAoIWZpbGUpCkBAIC0yMTUsNyArMjE1LDcgQEAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKIAkJc3RydWN0IHNvdXJjZV9saW5lICpzcmM7CiAJCXNpemVfdCBkdW1teSA9IDA7Ci0JCWNoYXIgKmM7CisJCWNoYXIgKmMsICpzZXA7CiAKIAkJc3JjID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc291cmNlX2xpbmUpKTsKIAkJYXNzZXJ0KHNyYyAhPSBOVUxMKTsKQEAgLTIzNCwxNCArMjM0LDExIEBACiAJCSpzb3VyY2UtPmxpbmVzX3RhaWwgPSBzcmM7CiAJCXNvdXJjZS0+bGluZXNfdGFpbCA9ICZzcmMtPm5leHQ7CiAKLQkJaWYgKHN0cmxlbihzcmMtPmxpbmUpPjggJiYgc3JjLT5saW5lWzhdID09ICc6JykgewotCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKLQkJfQotCQlpZiAoc3RybGVuKHNyYy0+bGluZSk+OCAmJiBzcmMtPmxpbmVbMTZdID09ICc6JykgewotCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKLQkJfQorCQlzcmMtPmVpcCA9IHN0cnRvdWxsKHNyYy0+bGluZSwgJnNlcCwgMTYpOworCQlpZiAoKnNlcCA9PSAnOicpCisJCQlzcmMtPmVpcCA9IG1hcF9fb2JqZHVtcF8yaXAobWFwLCBzcmMtPmVpcCk7CisJCWVsc2UgLyogdGhpcyBsaW5lIGhhcyBubyBpcCBpbmZvIChlLmcuIHNvdXJjZSBsaW5lKSAqLworCQkJc3JjLT5laXAgPSAwOwogCX0KIAlwY2xvc2UoZmlsZSk7CiBvdXRfYXNzaWduOgpAQCAtMjc2LDYgKzI3Myw5IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWZvciAobGluZSA9IHN5bWUtPnNyYy0+bGluZXM7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KSB7CisJCS8qIHNraXAgbGluZXMgd2l0aG91dCBJUCBpbmZvICovCisJCWlmIChsaW5lLT5laXAgPT0gMCkKKwkJCWNvbnRpbnVlOwogCQlpZiAobGluZS0+ZWlwID09IGlwKSB7CiAJCQlsaW5lLT5jb3VudFtjb3VudGVyXSsrOwogCQkJYnJlYWs7CkBAIC0yODcsMTcgKzI4NywyMCBAQAogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zcmMtPmxvY2spOwogfQogCisjZGVmaW5lIFBBVFRFUk5fTEVOCQkoQklUU19QRVJfTE9ORyAvIDQgKyAyKQorCiBzdGF0aWMgdm9pZCBsb29rdXBfc3ltX3NvdXJjZShzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bWUpOwogCXN0cnVjdCBzb3VyY2VfbGluZSAqbGluZTsKLQljaGFyIHBhdHRlcm5bUEFUSF9NQVhdOworCWNoYXIgcGF0dGVybltQQVRURVJOX0xFTiArIDFdOwogCi0Jc3ByaW50ZihwYXR0ZXJuLCAiPCVzPjoiLCBzeW1ib2wtPm5hbWUpOworCXNwcmludGYocGF0dGVybiwgIiUwKkx4IDwiLCBCSVRTX1BFUl9MT05HIC8gNCwKKwkJbWFwX19yaXBfMm9iamR1bXAoc3ltZS0+bWFwLCBzeW1ib2wtPnN0YXJ0KSk7CiAKIAlwdGhyZWFkX211dGV4X2xvY2soJnN5bWUtPnNyYy0+bG9jayk7CiAJZm9yIChsaW5lID0gc3ltZS0+c3JjLT5saW5lczsgbGluZTsgbGluZSA9IGxpbmUtPm5leHQpIHsKLQkJaWYgKHN0cnN0cihsaW5lLT5saW5lLCBwYXR0ZXJuKSkgeworCQlpZiAobWVtY21wKGxpbmUtPmxpbmUsIHBhdHRlcm4sIFBBVFRFUk5fTEVOKSA9PSAwKSB7CiAJCQlzeW1lLT5zcmMtPnNvdXJjZSA9IGxpbmU7CiAJCQlicmVhazsKIAkJfQpAQCAtNjY3LDcgKzY3MCw3IEBACiAJfQogCiAJaWYgKCFmb3VuZCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIlNvcnJ5LCAlcyBpcyBub3QgYWN0aXZlLlxuIiwgc3ltX2ZpbHRlcik7CisJCWZwcmludGYoc3RkZXJyLCAiU29ycnksICVzIGlzIG5vdCBhY3RpdmUuXG4iLCBidWYpOwogCQlzbGVlcCgxKTsKIAkJcmV0dXJuOwogCX0gZWxzZQpAQCAtNjk1LDExICs2OTgsOSBAQAogCiAJZnByaW50ZihzdGRvdXQsICJcdFtmXSAgICAgcHJvZmlsZSBkaXNwbGF5IGZpbHRlciAoY291bnQpLiAgICBcdCglZClcbiIsIGNvdW50X2ZpbHRlcik7CiAKLQlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lKSB7Ci0JCWZwcmludGYoc3Rkb3V0LCAiXHRbRl0gICAgIGFubm90YXRlIGRpc3BsYXkgZmlsdGVyIChwZXJjZW50KS4gXHQoJWQlJSlcbiIsIHN5bV9wY250X2ZpbHRlcik7Ci0JCWZwcmludGYoc3Rkb3V0LCAiXHRbc10gICAgIGFubm90YXRlIHN5bWJvbC4gICAgICAgICAgICAgICAgICAgXHQoJXMpXG4iLCBuYW1lPzogIk5VTEwiKTsKLQkJZnByaW50ZihzdGRvdXQsICJcdFtTXSAgICAgc3RvcCBhbm5vdGF0aW9uLlxuIik7Ci0JfQorCWZwcmludGYoc3Rkb3V0LCAiXHRbRl0gICAgIGFubm90YXRlIGRpc3BsYXkgZmlsdGVyIChwZXJjZW50KS4gXHQoJWQlJSlcbiIsIHN5bV9wY250X2ZpbHRlcik7CisJZnByaW50ZihzdGRvdXQsICJcdFtzXSAgICAgYW5ub3RhdGUgc3ltYm9sLiAgICAgICAgICAgICAgICAgICBcdCglcylcbiIsIG5hbWU/OiAiTlVMTCIpOworCWZwcmludGYoc3Rkb3V0LCAiXHRbU10gICAgIHN0b3AgYW5ub3RhdGlvbi5cbiIpOwogCiAJaWYgKG5yX2NvdW50ZXJzID4gMSkKIAkJZnByaW50ZihzdGRvdXQsICJcdFt3XSAgICAgdG9nZ2xlIGRpc3BsYXkgd2VpZ2h0ZWQvY291bnRbRV1yLiBcdCglZClcbiIsIGRpc3BsYXlfd2VpZ2h0ZWQgPyAxIDogMCk7CkBAIC03MjUsMTQgKzcyNiwxMyBAQAogCQljYXNlICdRJzoKIAkJY2FzZSAnSyc6CiAJCWNhc2UgJ1UnOgorCQljYXNlICdGJzoKKwkJY2FzZSAncyc6CisJCWNhc2UgJ1MnOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgJ0UnOgogCQljYXNlICd3JzoKIAkJCXJldHVybiBucl9jb3VudGVycyA+IDEgPyAxIDogMDsKLQkJY2FzZSAnRic6Ci0JCWNhc2UgJ3MnOgotCQljYXNlICdTJzoKLQkJCXJldHVybiBzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgPyAxIDogMDsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCX0KQEAgLTkxMCw4ICs5MTAsMTIgQEAKIAlzeW1lID0gc3ltYm9sX19wcml2KHN5bSk7CiAJc3ltZS0+bWFwID0gbWFwOwogCXN5bWUtPnNyYyA9IE5VTEw7Ci0JaWYgKCFzeW1fZmlsdGVyX2VudHJ5ICYmIHN5bV9maWx0ZXIgJiYgIXN0cmNtcChuYW1lLCBzeW1fZmlsdGVyKSkKLQkJc3ltX2ZpbHRlcl9lbnRyeSA9IHN5bWU7CisKKwlpZiAoIXN5bV9maWx0ZXJfZW50cnkgJiYgc3ltX2ZpbHRlciAmJiAhc3RyY21wKG5hbWUsIHN5bV9maWx0ZXIpKSB7CisJCS8qIHNjaGVkdWxlIGluaXRpYWwgc3ltX2ZpbHRlcl9lbnRyeSBzZXR1cCAqLworCQlzeW1fZmlsdGVyX2VudHJ5X3NjaGVkID0gc3ltZTsKKwkJc3ltX2ZpbHRlciA9IE5VTEw7CisJfQogCiAJZm9yIChpID0gMDsgc2tpcF9zeW1ib2xzW2ldOyBpKyspIHsKIAkJaWYgKCFzdHJjbXAoc2tpcF9zeW1ib2xzW2ldLCBuYW1lKSkgewpAQCAtOTM0LDggKzkzOCwxMSBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXU4IG9yaWdpbiA9IHNlbGYtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAKKwkrK3NhbXBsZXM7CisKIAlzd2l0Y2ggKG9yaWdpbikgewogCWNhc2UgUEVSRl9SRUNPUkRfTUlTQ19VU0VSOgorCQkrK3VzZXJzcGFjZV9zYW1wbGVzOwogCQlpZiAoaGlkZV91c2VyX3N5bWJvbHMpCiAJCQlyZXR1cm47CiAJCWJyZWFrOwpAQCAtOTQ4LDkgKzk1NSwzOCBAQAogCX0KIAogCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoc2VsZiwgc2Vzc2lvbiwgJmFsLCBzeW1ib2xfZmlsdGVyKSA8IDAgfHwKLQkgICAgYWwuc3ltID09IE5VTEwgfHwgYWwuZmlsdGVyZWQpCisJICAgIGFsLmZpbHRlcmVkKQogCQlyZXR1cm47CiAKKwlpZiAoYWwuc3ltID09IE5VTEwpIHsKKwkJLyoKKwkJICogQXMgd2UgZG8gbGF6eSBsb2FkaW5nIG9mIHN5bXRhYnMgd2Ugb25seSB3aWxsIGtub3cgaWYgdGhlCisJCSAqIHNwZWNpZmllZCB2bWxpbnV4IGZpbGUgaXMgaW52YWxpZCB3aGVuIHdlIGFjdHVhbGx5IGhhdmUgYQorCQkgKiBoaXQgaW4ga2VybmVsIHNwYWNlIGFuZCB0aGVuIHRyeSB0byBsb2FkIGl0LiBTbyBpZiB3ZSBnZXQKKwkJICogaGVyZSBhbmQgdGhlcmUgYXJlIF9ub18gc3ltYm9scyBpbiB0aGUgRFNPIGJhY2tpbmcgdGhlCisJCSAqIGtlcm5lbCBtYXAsIGJhaWwgb3V0LgorCQkgKgorCQkgKiBXZSBtYXkgbmV2ZXIgZ2V0IGhlcmUsIGZvciBpbnN0YW5jZSwgaWYgd2UgdXNlIC1LLworCQkgKiAtLWhpZGUta2VybmVsLXN5bWJvbHMsIGV2ZW4gaWYgdGhlIHVzZXIgc3BlY2lmaWVzIGFuCisJCSAqIGludmFsaWQgLS12bWxpbnV4IDstKQorCQkgKi8KKwkJaWYgKGFsLm1hcCA9PSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0gJiYKKwkJICAgIFJCX0VNUFRZX1JPT1QoJmFsLm1hcC0+ZHNvLT5zeW1ib2xzW01BUF9fRlVOQ1RJT05dKSkgeworCQkJcHJfZXJyKCJUaGUgJXMgZmlsZSBjYW4ndCBiZSB1c2VkXG4iLAorCQkJICAgICAgIHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisKKwkJcmV0dXJuOworCX0KKworCS8qIGxldCdzIHNlZSwgd2hldGhlciB3ZSBuZWVkIHRvIGluc3RhbGwgaW5pdGlhbCBzeW1fZmlsdGVyX2VudHJ5ICovCisJaWYgKHN5bV9maWx0ZXJfZW50cnlfc2NoZWQpIHsKKwkJc3ltX2ZpbHRlcl9lbnRyeSA9IHN5bV9maWx0ZXJfZW50cnlfc2NoZWQ7CisJCXN5bV9maWx0ZXJfZW50cnlfc2NoZWQgPSBOVUxMOworCQlwYXJzZV9zb3VyY2Uoc3ltX2ZpbHRlcl9lbnRyeSk7CisJfQorCiAJc3ltZSA9IHN5bWJvbF9fcHJpdihhbC5zeW0pOwogCWlmICghc3ltZS0+c2tpcCkgewogCQlzeW1lLT5jb3VudFtjb3VudGVyXSsrOwpAQCAtOTYwLDkgKzk5Niw2IEBACiAJCWlmIChsaXN0X2VtcHR5KCZzeW1lLT5ub2RlKSB8fCAhc3ltZS0+bm9kZS5uZXh0KQogCQkJX19saXN0X2luc2VydF9hY3RpdmVfc3ltKHN5bWUpOwogCQlwdGhyZWFkX211dGV4X3VubG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7Ci0JCWlmIChvcmlnaW4gPT0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSKQotCQkJKyt1c2Vyc3BhY2Vfc2FtcGxlczsKLQkJKytzYW1wbGVzOwogCX0KIH0KIApAQCAtOTc1LDYgKzEwMDgsMTAgQEAKIAljYXNlIFBFUkZfUkVDT1JEX01NQVA6CiAJCWV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnQsIHNlc3Npb24pOwogCQlicmVhazsKKwljYXNlIFBFUkZfUkVDT1JEX0ZPUks6CisJY2FzZSBQRVJGX1JFQ09SRF9FWElUOgorCQlldmVudF9fcHJvY2Vzc190YXNrKGV2ZW50LCBzZXNzaW9uKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTI0NCw3ICsxMjgxLDcgQEAKIAlPUFRfQk9PTEVBTignaScsICJpbmhlcml0IiwgJmluaGVyaXQsCiAJCSAgICAiY2hpbGQgdGFza3MgaW5oZXJpdCBjb3VudGVycyIpLAogCU9QVF9TVFJJTkcoJ3MnLCAic3ltLWFubm90YXRlIiwgJnN5bV9maWx0ZXIsICJzeW1ib2wgbmFtZSIsCi0JCSAgICAic3ltYm9sIHRvIGFubm90YXRlIC0gcmVxdWlyZXMgLWsgb3B0aW9uIiksCisJCSAgICAic3ltYm9sIHRvIGFubm90YXRlIiksCiAJT1BUX0JPT0xFQU4oJ3onLCAiemVybyIsICZ6ZXJvLAogCQkgICAgInplcm8gaGlzdG9yeSBhY3Jvc3MgdXBkYXRlcyIpLAogCU9QVF9JTlRFR0VSKCdGJywgImZyZXEiLCAmZnJlcSwKQEAgLTEyODAsMTYgKzEzMTcsMTQgQEAKIAogCXN5bWJvbF9jb25mLnByaXZfc2l6ZSA9IChzaXplb2Yoc3RydWN0IHN5bV9lbnRyeSkgKwogCQkJCSAobnJfY291bnRlcnMgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA9PSBOVUxMKQotCQlzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoID0gdHJ1ZTsKKworCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpOwogCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWlmIChkZWxheV9zZWNzIDwgMSkKIAkJZGVsYXlfc2VjcyA9IDE7CiAKLQlwYXJzZV9zb3VyY2Uoc3ltX2ZpbHRlcl9lbnRyeSk7Ci0KIAkvKgogCSAqIFVzZXIgc3BlY2lmaWVkIGNvdW50IG92ZXJyaWRlcyBkZWZhdWx0IGZyZXF1ZW5jeS4KIAkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKaW5kZXggNTc0YTIxNS4uNWRiNjg3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIAlwZXJmX3NldF9hcmd2X2V4ZWNfcGF0aChwZXJmX2V4ZWNfcGF0aCgpKTsKIAogCXNldHVwX3Blcmxfc2NyaXB0aW5nKCk7CisJc2V0dXBfcHl0aG9uX3NjcmlwdGluZygpOwogCiAJc2NyaXB0aW5nX29wcyA9ICZkZWZhdWx0X3NjcmlwdGluZ19vcHM7CiB9CkBAIC03NSwxMSArNzYsOCBAQAogCiAJZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgc2Vzc2lvbi0+c2FtcGxlX3R5cGUsICZkYXRhKTsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAotCQlldmVudC0+aGVhZGVyLm1pc2MsCi0JCWRhdGEucGlkLCBkYXRhLnRpZCwKLQkJKHZvaWQgKikobG9uZylkYXRhLmlwLAotCQkobG9uZyBsb25nKWRhdGEucGVyaW9kKTsKKwlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlI0x4IHBlcmlvZDogJUxkXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCisJCSAgICBkYXRhLnBpZCwgZGF0YS50aWQsIGRhdGEuaXAsIGRhdGEucGVyaW9kKTsKIAogCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBldmVudC0+aXAucGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKQEAgLTEwMywyMiArMTAxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQotewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKLQkJCSJ3aXRob3V0IC1SPyIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5zYW1wbGVfdHlwZV9jaGVjawk9IHNhbXBsZV90eXBlX2NoZWNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCiB9OwogCiBzdGF0aWMgaW50IF9fY21kX3RyYWNlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCkBAIC0yMzUsOSArMjIwLDkgQEAKIAljb25zdCBjaGFyICpzY3JpcHQsICpleHQ7CiAJaW50IGxlbjsKIAotCWlmIChzdHJjbXAoc3RyLCAibGlzdCIpID09IDApIHsKKwlpZiAoc3RyY21wKHN0ciwgImxhbmciKSA9PSAwKSB7CiAJCWxpc3RfYXZhaWxhYmxlX2xhbmd1YWdlcygpOwotCQlyZXR1cm4gMDsKKwkJZXhpdCgwKTsKIAl9CiAKIAlzY3JpcHQgPSBzdHJjaHIoc3RyLCAnOicpOwpAQCAtNTMxLDYgKzUxNiw4IEBACiAJCSAgICAgcGFyc2Vfc2NyaXB0bmFtZSksCiAJT1BUX1NUUklORygnZycsICJnZW4tc2NyaXB0IiwgJmdlbmVyYXRlX3NjcmlwdF9sYW5nLCAibGFuZyIsCiAJCSAgICJnZW5lcmF0ZSBwZXJmLXRyYWNlLnh4IHNjcmlwdCBpbiBzcGVjaWZpZWQgbGFuZ3VhZ2UiKSwKKwlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKKwkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKIAogCU9QVF9FTkQoKQogfTsKQEAgLTU5Miw2ICs1NzksOSBAQAogCWlmIChzZXNzaW9uID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWYgKCFwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChnZW5lcmF0ZV9zY3JpcHRfbGFuZykgewogCQlzdHJ1Y3Qgc3RhdCBwZXJmX3N0YXQ7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi5oIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKaW5kZXggMTgwMzViMS4uMTBmZTQ5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLmgKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogZXh0ZXJuIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfYmVuY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYnVpbGRpZF9jYWNoZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9idWlsZGlkX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfZGlmZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKQEAgLTMwLDUgKzMxLDYgQEAKIGV4dGVybiBpbnQgY21kX3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfa21lbShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9sb2NrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQgYi90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKaW5kZXggNzFkYzdjMy4uOWFmY2ZmMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CisrKyBiL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dApAQCAtMyw3ICszLDkgQEAKICMgY29tbWFuZCBuYW1lCQkJY2F0ZWdvcnkgW2RlcHJlY2F0ZWRdIFtjb21tb25dCiAjCiBwZXJmLWFubm90YXRlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KK3BlcmYtYXJjaGl2ZQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWJlbmNoCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KK3BlcmYtYnVpbGRpZC1jYWNoZQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtYnVpbGRpZC1saXN0CQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi1kaWZmCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtbGlzdAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2Rlc2lnbi50eHQgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKaW5kZXggOGQwZGU1MS4uYmQwYmIxYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0CisrKyBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dApAQCAtMTAxLDEwICsxMDEsMTAgQEAKIAkgKi8KIAlQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMJCT0gMCwKIAlQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUwkJPSAxLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFUwk9IDIsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTCQk9IDIsCiAJUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJCT0gMywKIAlQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMJPSA0LAotCVBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUwk9IDUsCisJUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTCQk9IDUsCiAJUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTCQk9IDYsCiB9OwogCkBAIC0xMzEsOCArMTMxLDggQEAKICAqLwogZW51bSBzd19ldmVudF9pZHMgewogCVBFUkZfQ09VTlRfU1dfQ1BVX0NMT0NLCQk9IDAsCi0JUEVSRl9DT1VOVF9TV19UQVNLX0NMT0NLCQk9IDEsCi0JUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUwkJPSAyLAorCVBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSwk9IDEsCisJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUwk9IDIsCiAJUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTCT0gMywKIAlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCT0gNCwKIAlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTgk9IDUsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaCBiL3Rvb2xzL3BlcmYvcGVyZi1hcmNoaXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZmJlMmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vYmFzaAorIyBwZXJmIGFyY2hpdmUKKyMgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CisKK1BFUkZfREFUQT1wZXJmLmRhdGEKK2lmIFsgJCMgLW5lIDAgXSA7IHRoZW4KKwlQRVJGX0RBVEE9JDEKK2ZpCisKK0RFQlVHRElSPX4vLmRlYnVnLworQlVJTERJRFM9JChta3RlbXAgL3RtcC9wZXJmLWFyY2hpdmUtYnVpbGRpZHMuWFhYWFhYKQorCitwZXJmIGJ1aWxkaWQtbGlzdCAtaSAkUEVSRl9EQVRBIC0td2l0aC1oaXRzID4gJEJVSUxESURTCitpZiBbICEgLXMgJEJVSUxESURTIF0gOyB0aGVuCisJZWNobyAicGVyZiBhcmNoaXZlOiBubyBidWlsZC1pZHMgZm91bmQiCisJcm0gLWYgJEJVSUxESURTCisJZXhpdCAxCitmaQorCitNQU5JRkVTVD0kKG1rdGVtcCAvdG1wL3BlcmYtYXJjaGl2ZS1tYW5pZmVzdC5YWFhYWFgpCisKK2N1dCAtZCAnICcgLWYgMSAkQlVJTERJRFMgfCBcCit3aGlsZSByZWFkIGJ1aWxkX2lkIDsgZG8KKwlsaW5rbmFtZT0kREVCVUdESVIuYnVpbGQtaWQvJHtidWlsZF9pZDowOjJ9LyR7YnVpbGRfaWQ6Mn0KKwlmaWxlbmFtZT0kKHJlYWRsaW5rIC1mICRsaW5rbmFtZSkKKwllY2hvICR7bGlua25hbWUjJERFQlVHRElSfSA+PiAkTUFOSUZFU1QKKwllY2hvICR7ZmlsZW5hbWUjJERFQlVHRElSfSA+PiAkTUFOSUZFU1QKK2RvbmUKKwordGFyIGNmaiAkUEVSRl9EQVRBLnRhci5iejIgLUMgJERFQlVHRElSIC1UICRNQU5JRkVTVAorcm0gLWYgJE1BTklGRVNUICRCVUlMRElEUworZXhpdCAwCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYuYyBiL3Rvb2xzL3BlcmYvcGVyZi5jCmluZGV4IDg3M2U1NWYuLjU3Y2IxMDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvcGVyZi5jCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi5jCkBAIC00OCw3ICs0OCw4IEBACiAJcmV0dXJuIGMudmFsOwogfQogCi1zdGF0aWMgdm9pZCBjb21taXRfcGFnZXJfY2hvaWNlKHZvaWQpIHsKK3N0YXRpYyB2b2lkIGNvbW1pdF9wYWdlcl9jaG9pY2Uodm9pZCkKK3sKIAlzd2l0Y2ggKHVzZV9wYWdlcikgewogCWNhc2UgMDoKIAkJc2V0ZW52KCJQRVJGX1BBR0VSIiwgImNhdCIsIDEpOwpAQCAtNzAsNyArNzEsNyBAQAogCQkgInRyYWNpbmcvZXZlbnRzIik7CiB9CiAKLXN0YXRpYyBpbnQgaGFuZGxlX29wdGlvbnMoY29uc3QgY2hhcioqKiBhcmd2LCBpbnQqIGFyZ2MsIGludCogZW52Y2hhbmdlZCkKK3N0YXRpYyBpbnQgaGFuZGxlX29wdGlvbnMoY29uc3QgY2hhciAqKiphcmd2LCBpbnQgKmFyZ2MsIGludCAqZW52Y2hhbmdlZCkKIHsKIAlpbnQgaGFuZGxlZCA9IDA7CiAKQEAgLTEwOSw3ICsxMTAsNyBAQAogCQkJCSplbnZjaGFuZ2VkID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tcGVyZi1kaXIiKSkgewogCQkJaWYgKCphcmdjIDwgMikgewotCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXBlcmYtZGlyLlxuIiApOworCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXBlcmYtZGlyLlxuIik7CiAJCQkJdXNhZ2UocGVyZl91c2FnZV9zdHJpbmcpOwogCQkJfQogCQkJc2V0ZW52KFBFUkZfRElSX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKQEAgLTEyNCw3ICsxMjUsNyBAQAogCQkJCSplbnZjaGFuZ2VkID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0td29yay10cmVlIikpIHsKIAkJCWlmICgqYXJnYyA8IDIpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWUuXG4iICk7CisJCQkJZnByaW50ZihzdGRlcnIsICJObyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlLlxuIik7CiAJCQkJdXNhZ2UocGVyZl91c2FnZV9zdHJpbmcpOwogCQkJfQogCQkJc2V0ZW52KFBFUkZfV09SS19UUkVFX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKQEAgLTE2OCw3ICsxNjksNyBAQAogewogCWludCBlbnZjaGFuZ2VkID0gMCwgcmV0ID0gMCwgc2F2ZWRfZXJybm8gPSBlcnJubzsKIAlpbnQgY291bnQsIG9wdGlvbl9jb3VudDsKLQljb25zdCBjaGFyKiogbmV3X2FyZ3Y7CisJY29uc3QgY2hhciAqKm5ld19hcmd2OwogCWNvbnN0IGNoYXIgKmFsaWFzX2NvbW1hbmQ7CiAJY2hhciAqYWxpYXNfc3RyaW5nOwogCkBAIC0yMTAsMTEgKzIxMSwxMSBAQAogCQlpZiAoIXN0cmNtcChhbGlhc19jb21tYW5kLCBuZXdfYXJndlswXSkpCiAJCQlkaWUoInJlY3Vyc2l2ZSBhbGlhczogJXMiLCBhbGlhc19jb21tYW5kKTsKIAotCQluZXdfYXJndiA9IHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyKikgKgorCQluZXdfYXJndiA9IHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyICopICoKIAkJCQkgICAgKGNvdW50ICsgKmFyZ2NwICsgMSkpOwogCQkvKiBpbnNlcnQgYWZ0ZXIgY29tbWFuZCBuYW1lICovCi0JCW1lbWNweShuZXdfYXJndiArIGNvdW50LCAqYXJndiArIDEsIHNpemVvZihjaGFyKikgKiAqYXJnY3ApOwotCQluZXdfYXJndltjb3VudCsqYXJnY3BdID0gTlVMTDsKKwkJbWVtY3B5KG5ld19hcmd2ICsgY291bnQsICphcmd2ICsgMSwgc2l6ZW9mKGNoYXIgKikgKiAqYXJnY3ApOworCQluZXdfYXJndltjb3VudCArICphcmdjcF0gPSBOVUxMOwogCiAJCSphcmd2ID0gbmV3X2FyZ3Y7CiAJCSphcmdjcCArPSBjb3VudCAtIDE7CkBAIC0yODUsNiArMjg2LDcgQEAKIHsKIAljb25zdCBjaGFyICpjbWQgPSBhcmd2WzBdOwogCXN0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1tdID0geworCQl7ICJidWlsZGlkLWNhY2hlIiwgY21kX2J1aWxkaWRfY2FjaGUsIDAgfSwKIAkJeyAiYnVpbGRpZC1saXN0IiwgY21kX2J1aWxkaWRfbGlzdCwgMCB9LAogCQl7ICJkaWZmIiwJY21kX2RpZmYsCTAgfSwKIAkJeyAiaGVscCIsCWNtZF9oZWxwLAkwIH0sCkBAIC0zMDEsNiArMzAzLDcgQEAKIAkJeyAic2NoZWQiLAljbWRfc2NoZWQsCTAgfSwKIAkJeyAicHJvYmUiLAljbWRfcHJvYmUsCTAgfSwKIAkJeyAia21lbSIsCWNtZF9rbWVtLAkwIH0sCisJCXsgImxvY2siLAljbWRfbG9jaywJMCB9LAogCX07CiAJdW5zaWduZWQgaW50IGk7CiAJc3RhdGljIGNvbnN0IGNoYXIgZXh0W10gPSBTVFJJUF9FWFRFTlNJT047CkBAIC0zODgsNyArMzkxLDcgQEAKIC8qIG1pbmkgL3Byb2MvbW91bnRzIHBhcnNlcjogc2VhcmNoaW5nIGZvciAiXmJsYWggL21vdW50L3BvaW50IGRlYnVnZnMiICovCiBzdGF0aWMgdm9pZCBnZXRfZGVidWdmc19tbnRwdCh2b2lkKQogewotCWNvbnN0IGNoYXIgKnBhdGggPSBkZWJ1Z2ZzX2ZpbmRfbW91bnRwb2ludCgpOworCWNvbnN0IGNoYXIgKnBhdGggPSBkZWJ1Z2ZzX21vdW50KE5VTEwpOwogCiAJaWYgKHBhdGgpCiAJCXN0cm5jcHkoZGVidWdmc19tbnRwdCwgcGF0aCwgc2l6ZW9mKGRlYnVnZnNfbW50cHQpKTsKQEAgLTQ0OSw4ICs0NTIsOCBAQAogCXNldHVwX3BhdGgoKTsKIAogCXdoaWxlICgxKSB7Ci0JCXN0YXRpYyBpbnQgZG9uZV9oZWxwID0gMDsKLQkJc3RhdGljIGludCB3YXNfYWxpYXMgPSAwOworCQlzdGF0aWMgaW50IGRvbmVfaGVscDsKKwkJc3RhdGljIGludCB3YXNfYWxpYXM7CiAKIAkJd2FzX2FsaWFzID0gcnVuX2FyZ3YoJmFyZ2MsICZhcmd2KTsKIAkJaWYgKGVycm5vICE9IEVOT0VOVCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jCmluZGV4IGFmNzhkOWEuLjAxYTY0YWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYwpAQCAtMzEsMTMgKzMxLDE0IEBACiAjaW5jbHVkZSAiRVhURVJOLmgiCiAjaW5jbHVkZSAicGVybC5oIgogI2luY2x1ZGUgIlhTVUIuaCIKLSNpbmNsdWRlICIuLi8uLi8uLi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vdXRpbC90cmFjZS1ldmVudC5oIgogCiAjaWZuZGVmIFBFUkxfVU5VU0VEX1ZBUgogIyAgZGVmaW5lIFBFUkxfVU5VU0VEX1ZBUih2YXIpIGlmICgwKSB2YXIgPSB2YXIKICNlbmRpZgogCi0jbGluZSA0MSAiQ29udGV4dC5jIgorI2xpbmUgNDIgIkNvbnRleHQuYyIKIAogWFMoWFNfUGVyZl9fVHJhY2VfX0NvbnRleHRfY29tbW9uX3BjKTsgLyogcHJvdG90eXBlIHRvIHBhc3MgLVdtaXNzaW5nLXByb3RvdHlwZXMgKi8KIFhTKFhTX1BlcmZfX1RyYWNlX19Db250ZXh0X2NvbW1vbl9wYykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LnhzIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKaW5kZXggZmI3ODAwNi4uNTQ5Y2YwNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKQEAgLTIyLDcgKzIyLDggQEAKICNpbmNsdWRlICJFWFRFUk4uaCIKICNpbmNsdWRlICJwZXJsLmgiCiAjaW5jbHVkZSAiWFNVQi5oIgotI2luY2x1ZGUgIi4uLy4uLy4uL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL3BlcmYuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi91dGlsL3RyYWNlLWV2ZW50LmgiCiAKIE1PRFVMRSA9IFBlcmY6OlRyYWNlOjpDb250ZXh0CQlQQUNLQUdFID0gUGVyZjo6VHJhY2U6OkNvbnRleHQKIFBST1RPVFlQRVM6IEVOQUJMRQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucG0gYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQppbmRleCAwNTJmMTMyLi5mODY5YzQ4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQpAQCAtNDQsNyArNDQsNyBAQAogc3ViIG5zZWNzX25zZWNzIHsKICAgICBteSAoJG5zZWNzKSA9IEBfOwogCi0gICAgcmV0dXJuICRuc2VjcyAtIG5zZWNzX3NlY3MoJG5zZWNzKTsKKyAgICByZXR1cm4gJG5zZWNzICUgJE5TRUNTX1BFUl9TRUM7CiB9CiAKIHN1YiBuc2Vjc19zdHIgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVjb3JkCmluZGV4IGM3ZWM1ZGUuLmU2Y2IxNDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9jaGVjay1wZXJmLXRyYWNlLXJlY29yZAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZWNvcmQKQEAgLTEsNyArMSwyIEBACiAjIS9iaW4vYmFzaAotcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSBrbWVtOmttYWxsb2MgLWUgaXJxOnNvZnRpcnFfZW50cnkKLQotCi0KLQotCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIGttZW06a21hbGxvYyAtZSBpcnE6c29mdGlycV9lbnRyeSAtZSBrbWVtOmtmcmVlCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzRhMDMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVwb3J0CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBkZXNjcmlwdGlvbjogdXNlbGVzcyBidXQgZXhoYXVzdGl2ZSB0ZXN0IHNjcmlwdAotcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC9jaGVjay1wZXJmLXRyYWNlLnBsCi0KLQotCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9mYWlsZWQtc3lzY2FsbHMtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODg1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlY29yZApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHJhd19zeXNjYWxsczpzeXNfZXhpdApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2ZhaWxlZC1zeXNjYWxscy1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmZjNjYwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2ZhaWxlZC1zeXNjYWxscy1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgZmFpbGVkIHN5c2NhbGxzCisjIGFyZ3M6IFtjb21tXQorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC9mYWlsZWQtc3lzY2FsbHMucGwgJDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2ZhaWxlZC1zeXNjYWxscy5wbCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2ZhaWxlZC1zeXNjYWxscy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThlN2UyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvZmFpbGVkLXN5c2NhbGxzLnBsCkBAIC0wLDAgKzEsMzggQEAKKyMgZmFpbGVkIHN5c3RlbSBjYWxsIGNvdW50cworIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIGZhaWxlZCBzeXN0ZW0gY2FsbCB0b3RhbHMKKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK3VzZSBsaWIgIiRFTlZ7J1BFUkZfRVhFQ19QQVRIJ30vc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIiOwordXNlIGxpYiAiLi9QZXJmLVRyYWNlLVV0aWwvbGliIjsKK3VzZSBQZXJmOjpUcmFjZTo6Q29yZTsKK3VzZSBQZXJmOjpUcmFjZTo6Q29udGV4dDsKK3VzZSBQZXJmOjpUcmFjZTo6VXRpbDsKKworbXkgJWZhaWxlZF9zeXNjYWxsczsKKworc3ViIHJhd19zeXNjYWxsczo6c3lzX2V4aXQKK3sKKwlteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCSAgICAkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorCSAgICAkaWQsICRyZXQpID0gQF87CisKKwlpZiAoJHJldCA8IDApIHsKKwkgICAgJGZhaWxlZF9zeXNjYWxsc3skY29tbW9uX2NvbW19Kys7CisJfQorfQorCitzdWIgdHJhY2VfZW5kCit7CisgICAgcHJpbnRmKCJcbmZhaWxlZCBzeXNjYWxscyBieSBjb21tOlxuXG4iKTsKKworICAgIHByaW50ZigiJS0yMHMgICUxMHNcbiIsICJjb21tIiwgIiMgZXJyb3JzIik7CisgICAgcHJpbnRmKCIlLTIwcyAgJTZzICAlMTBzXG4iLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLSIpOworCisgICAgZm9yZWFjaCBteSAkY29tbSAoc29ydCB7JGZhaWxlZF9zeXNjYWxsc3skYn0gPD0+ICRmYWlsZWRfc3lzY2FsbHN7JGF9fQorCQkgICAgICBrZXlzICVmYWlsZWRfc3lzY2FsbHMpIHsKKwkgICAgcHJpbnRmKCIlLTIwcyAgJTEwc1xuIiwgJGNvbW0sICRmYWlsZWRfc3lzY2FsbHN7JGNvbW19KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3MDg1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29udGV4dC5jLiAgUHl0aG9uIGludGVyZmFjZXMgZm9yIHBlcmYgdHJhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxQeXRob24uaD4KKyNpbmNsdWRlICIuLi8uLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vdXRpbC90cmFjZS1ldmVudC5oIgorCitQeU1PRElOSVRfRlVOQyBpbml0cGVyZl90cmFjZV9jb250ZXh0KHZvaWQpOworCitzdGF0aWMgUHlPYmplY3QgKnBlcmZfdHJhY2VfY29udGV4dF9jb21tb25fcGMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCVB5T2JqZWN0ICpjb250ZXh0OworCWludCByZXR2YWw7CisKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY29udGV4dCkpCisJCXJldHVybiBOVUxMOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBQeUNPYmplY3RfQXNWb2lkUHRyKGNvbnRleHQpOworCXJldHZhbCA9IGNvbW1vbl9wYyhzY3JpcHRpbmdfY29udGV4dCk7CisKKwlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIHJldHZhbCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9mbGFncyhQeU9iamVjdCAqc2VsZiwKKwkJCQkJCSBQeU9iamVjdCAqYXJncykKK3sKKwlzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKKwlQeU9iamVjdCAqY29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJmNvbnRleHQpKQorCQlyZXR1cm4gTlVMTDsKKworCXNjcmlwdGluZ19jb250ZXh0ID0gUHlDT2JqZWN0X0FzVm9pZFB0cihjb250ZXh0KTsKKwlyZXR2YWwgPSBjb21tb25fZmxhZ3Moc2NyaXB0aW5nX2NvbnRleHQpOworCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCByZXR2YWwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKnBlcmZfdHJhY2VfY29udGV4dF9jb21tb25fbG9ja19kZXB0aChQeU9iamVjdCAqc2VsZiwKKwkJCQkJCSAgICAgIFB5T2JqZWN0ICphcmdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCVB5T2JqZWN0ICpjb250ZXh0OworCWludCByZXR2YWw7CisKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY29udGV4dCkpCisJCXJldHVybiBOVUxMOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBQeUNPYmplY3RfQXNWb2lkUHRyKGNvbnRleHQpOworCXJldHZhbCA9IGNvbW1vbl9sb2NrX2RlcHRoKHNjcmlwdGluZ19jb250ZXh0KTsKKworCXJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgcmV0dmFsKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIENvbnRleHRNZXRob2RzW10gPSB7CisJeyAiY29tbW9uX3BjIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9wYywgTUVUSF9WQVJBUkdTLAorCSAgIkdldCB0aGUgY29tbW9uIHByZWVtcHQgY291bnQgZXZlbnQgZmllbGQgdmFsdWUuIn0sCisJeyAiY29tbW9uX2ZsYWdzIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9mbGFncywgTUVUSF9WQVJBUkdTLAorCSAgIkdldCB0aGUgY29tbW9uIGZsYWdzIGV2ZW50IGZpZWxkIHZhbHVlLiJ9LAorCXsgImNvbW1vbl9sb2NrX2RlcHRoIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9sb2NrX2RlcHRoLAorCSAgTUVUSF9WQVJBUkdTLAkiR2V0IHRoZSBjb21tb24gbG9jayBkZXB0aCBldmVudCBmaWVsZCB2YWx1ZS4ifSwKKwl7IE5VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCitQeU1PRElOSVRfRlVOQyBpbml0cGVyZl90cmFjZV9jb250ZXh0KHZvaWQpCit7CisJKHZvaWQpIFB5X0luaXRNb2R1bGUoInBlcmZfdHJhY2VfY29udGV4dCIsIENvbnRleHRNZXRob2RzKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzQ2NGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyMgQ29yZS5weSAtIFB5dGhvbiBleHRlbnNpb24gZm9yIHBlcmYgdHJhY2UsIGNvcmUgZnVuY3Rpb25zCisjCisjIENvcHlyaWdodCAoQykgMjAxMCBieSBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitkZWYgYXV0b2RpY3QoKToKKyAgICByZXR1cm4gZGVmYXVsdGRpY3QoYXV0b2RpY3QpCisKK2ZsYWdfZmllbGRzID0gYXV0b2RpY3QoKQorc3ltYm9saWNfZmllbGRzID0gYXV0b2RpY3QoKQorCitkZWYgZGVmaW5lX2ZsYWdfZmllbGQoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgZGVsaW0pOgorICAgIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWydkZWxpbSddID0gZGVsaW0KKworZGVmIGRlZmluZV9mbGFnX3ZhbHVlKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIHZhbHVlLCBmaWVsZF9zdHIpOgorICAgIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVt2YWx1ZV0gPSBmaWVsZF9zdHIKKworZGVmIGRlZmluZV9zeW1ib2xpY19maWVsZChldmVudF9uYW1lLCBmaWVsZF9uYW1lKToKKyAgICAjIG5vdGhpbmcgdG8gZG8sIHJlYWxseQorICAgIHBhc3MKKworZGVmIGRlZmluZV9zeW1ib2xpY192YWx1ZShldmVudF9uYW1lLCBmaWVsZF9uYW1lLCB2YWx1ZSwgZmllbGRfc3RyKToKKyAgICBzeW1ib2xpY19maWVsZHNbZXZlbnRfbmFtZV1bZmllbGRfbmFtZV1bJ3ZhbHVlcyddW3ZhbHVlXSA9IGZpZWxkX3N0cgorCitkZWYgZmxhZ19zdHIoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgdmFsdWUpOgorICAgIHN0cmluZyA9ICIiCisKKyAgICBpZiBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXToKKwlwcmludF9kZWxpbSA9IDAKKyAgICAgICAga2V5cyA9IGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXS5rZXlzKCkKKyAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgZm9yIGlkeCBpbiBrZXlzOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlIGFuZCBub3QgaWR4OgorICAgICAgICAgICAgICAgIHN0cmluZyArPSBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ11baWR4XQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpZHggYW5kICh2YWx1ZSAmIGlkeCkgPT0gaWR4OgorICAgICAgICAgICAgICAgIGlmIHByaW50X2RlbGltIGFuZCBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsnZGVsaW0nXToKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgIiArIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWydkZWxpbSddICsgIiAiCisgICAgICAgICAgICAgICAgc3RyaW5nICs9IGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVtpZHhdCisgICAgICAgICAgICAgICAgcHJpbnRfZGVsaW0gPSAxCisgICAgICAgICAgICAgICAgdmFsdWUgJj0gfmlkeAorCisgICAgcmV0dXJuIHN0cmluZworCitkZWYgc3ltYm9sX3N0cihldmVudF9uYW1lLCBmaWVsZF9uYW1lLCB2YWx1ZSk6CisgICAgc3RyaW5nID0gIiIKKworICAgIGlmIHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXToKKyAgICAgICAga2V5cyA9IHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ10ua2V5cygpCisgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgIGZvciBpZHggaW4ga2V5czoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSBhbmQgbm90IGlkeDoKKwkJc3RyaW5nID0gc3ltYm9saWNfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVtpZHhdCisgICAgICAgICAgICAgICAgYnJlYWsKKwkgICAgaWYgKHZhbHVlID09IGlkeCk6CisJCXN0cmluZyA9IHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ11baWR4XQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICByZXR1cm4gc3RyaW5nCisKK3RyYWNlX2ZsYWdzID0geyAweDAwOiAiTk9ORSIsIFwKKyAgICAgICAgICAgICAgICAgICAgMHgwMTogIklSUVNfT0ZGIiwgXAorICAgICAgICAgICAgICAgICAgICAweDAyOiAiSVJRU19OT1NVUFBPUlQiLCBcCisgICAgICAgICAgICAgICAgICAgIDB4MDQ6ICJORUVEX1JFU0NIRUQiLCBcCisgICAgICAgICAgICAgICAgICAgIDB4MDg6ICJIQVJESVJRIiwgXAorICAgICAgICAgICAgICAgICAgICAweDEwOiAiU09GVElSUSIgfQorCitkZWYgdHJhY2VfZmxhZ19zdHIodmFsdWUpOgorICAgIHN0cmluZyA9ICIiCisgICAgcHJpbnRfZGVsaW0gPSAwCisKKyAgICBrZXlzID0gdHJhY2VfZmxhZ3Mua2V5cygpCisKKyAgICBmb3IgaWR4IGluIGtleXM6CisJaWYgbm90IHZhbHVlIGFuZCBub3QgaWR4OgorCSAgICBzdHJpbmcgKz0gIk5PTkUiCisJICAgIGJyZWFrCisKKwlpZiBpZHggYW5kICh2YWx1ZSAmIGlkeCkgPT0gaWR4OgorCSAgICBpZiBwcmludF9kZWxpbToKKwkJc3RyaW5nICs9ICIgfCAiOworCSAgICBzdHJpbmcgKz0gdHJhY2VfZmxhZ3NbaWR4XQorCSAgICBwcmludF9kZWxpbSA9IDEKKwkgICAgdmFsdWUgJj0gfmlkeAorCisgICAgcmV0dXJuIHN0cmluZwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlOTE0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucHkKQEAgLTAsMCArMSwyNSBAQAorIyBVdGlsLnB5IC0gUHl0aG9uIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZSwgbWlzY2VsbGFuZW91cyB1dGlsaXR5IGNvZGUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIGJ5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24uCisKK05TRUNTX1BFUl9TRUMgICAgPSAxMDAwMDAwMDAwCisKK2RlZiBhdmcodG90YWwsIG4pOgorICAgIHJldHVybiB0b3RhbCAvIG4KKworZGVmIG5zZWNzKHNlY3MsIG5zZWNzKToKKyAgICByZXR1cm4gc2VjcyAqIE5TRUNTX1BFUl9TRUMgKyBuc2VjcworCitkZWYgbnNlY3Nfc2Vjcyhuc2Vjcyk6CisgICAgcmV0dXJuIG5zZWNzIC8gTlNFQ1NfUEVSX1NFQworCitkZWYgbnNlY3NfbnNlY3MobnNlY3MpOgorICAgIHJldHVybiBuc2VjcyAlIE5TRUNTX1BFUl9TRUMKKworZGVmIG5zZWNzX3N0cihuc2Vjcyk6CisgICAgc3RyID0gIiU1dS4lMDl1IiAlIChuc2Vjc19zZWNzKG5zZWNzKSwgbnNlY3NfbnNlY3MobnNlY3MpKSwKKyAgICByZXR1cm4gc3RyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODg1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlY29yZApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHJhd19zeXNjYWxsczpzeXNfZXhpdApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBjMGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgZmFpbGVkIHN5c2NhbGxzLCBieSBwaWQKKyMgYXJnczogW2NvbW1dCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weSAkMQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZWNvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhOGM1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZWNvcmQKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1ieS1waWQtcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODA0NGQxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlcG9ydApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9iYXNoCisjIGRlc2NyaXB0aW9uOiBzeXN0ZW0td2lkZSBzeXNjYWxsIGNvdW50cywgYnkgcGlkCisjIGFyZ3M6IFtjb21tXQorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLWJ5LXBpZC5weSAkMQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YThjNTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZWNvcmQKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2NmFhNjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgc3lzY2FsbCBjb3VudHMKKyMgYXJnczogW2NvbW1dCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkgJDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vY2hlY2stcGVyZi10cmFjZS5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vY2hlY2stcGVyZi10cmFjZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjRkOTM0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9jaGVjay1wZXJmLXRyYWNlLnB5CkBAIC0wLDAgKzEsODMgQEAKKyMgcGVyZiB0cmFjZSBldmVudCBoYW5kbGVycywgZ2VuZXJhdGVkIGJ5IHBlcmYgdHJhY2UgLWcgcHl0aG9uCisjIChjKSAyMDEwLCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKyMKKyMgVGhpcyBzY3JpcHQgdGVzdHMgYmFzaWMgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGZsYWcgYW5kIHN5bWJvbAorIyBzdHJpbmdzLCBjb21tb25feHh4KCkgY2FsbHMgYmFjayBpbnRvIHBlcmYsIGJlZ2luLCBlbmQsIHVuaGFuZGxlZAorIyBldmVudHMsIGV0Yy4gIEJhc2ljYWxseSwgaWYgdGhpcyBzY3JpcHQgcnVucyBzdWNjZXNzZnVsbHkgYW5kCisjIGRpc3BsYXlzIGV4cGVjdGVkIHJlc3VsdHMsIFB5dGhvbiBzY3JpcHRpbmcgc3VwcG9ydCBzaG91bGQgYmUgb2suCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gQ29yZSBpbXBvcnQgKgorZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKKwordW5oYW5kbGVkID0gYXV0b2RpY3QoKQorCitkZWYgdHJhY2VfYmVnaW4oKToKKwlwcmludCAidHJhY2VfYmVnaW4iCisJcGFzcworCitkZWYgdHJhY2VfZW5kKCk6CisgICAgICAgIHByaW50X3VuaGFuZGxlZCgpCisKK2RlZiBpcnFfX3NvZnRpcnFfZW50cnkoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwl2ZWMpOgorCQlwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCisgICAgICAgICAgICAgICAgcHJpbnRfdW5jb21tb24oY29udGV4dCkKKworCQlwcmludCAidmVjPSVzXG4iICUgXAorCQkoc3ltYm9sX3N0cigiaXJxX19zb2Z0aXJxX2VudHJ5IiwgInZlYyIsIHZlYykpLAorCitkZWYga21lbV9fa21hbGxvYyhldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNhbGxfc2l0ZSwgcHRyLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jLAorCWdmcF9mbGFncyk6CisJCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKyAgICAgICAgICAgICAgICBwcmludF91bmNvbW1vbihjb250ZXh0KQorCisJCXByaW50ICJjYWxsX3NpdGU9JXUsIHB0cj0ldSwgYnl0ZXNfcmVxPSV1LCAiIFwKKwkJImJ5dGVzX2FsbG9jPSV1LCBnZnBfZmxhZ3M9JXNcbiIgJSBcCisJCShjYWxsX3NpdGUsIHB0ciwgYnl0ZXNfcmVxLCBieXRlc19hbGxvYywKKworCQlmbGFnX3N0cigia21lbV9fa21hbGxvYyIsICJnZnBfZmxhZ3MiLCBnZnBfZmxhZ3MpKSwKKworZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSk6CisgICAgdHJ5OgorICAgICAgICB1bmhhbmRsZWRbZXZlbnRfbmFtZV0gKz0gMQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHVuaGFuZGxlZFtldmVudF9uYW1lXSA9IDEKKworZGVmIHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pOgorCXByaW50ICIlLTIwcyAlNXUgJTA1dS4lMDl1ICU4dSAlLTIwcyAiICUgXAorCShldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pLAorCisjIHByaW50IHRyYWNlIGZpZWxkcyBub3QgaW5jbHVkZWQgaW4gaGFuZGxlciBhcmdzCitkZWYgcHJpbnRfdW5jb21tb24oY29udGV4dCk6CisgICAgcHJpbnQgImNvbW1vbl9wcmVlbXB0X2NvdW50PSVkLCBjb21tb25fZmxhZ3M9JXMsIGNvbW1vbl9sb2NrX2RlcHRoPSVkLCAiIFwKKyAgICAgICAgJSAoY29tbW9uX3BjKGNvbnRleHQpLCB0cmFjZV9mbGFnX3N0cihjb21tb25fZmxhZ3MoY29udGV4dCkpLCBcCisgICAgICAgICAgICAgICBjb21tb25fbG9ja19kZXB0aChjb250ZXh0KSkKKworZGVmIHByaW50X3VuaGFuZGxlZCgpOgorICAgIGtleXMgPSB1bmhhbmRsZWQua2V5cygpCisgICAgaWYgbm90IGtleXM6CisgICAgICAgIHJldHVybgorCisgICAgcHJpbnQgIlxudW5oYW5kbGVkIGV2ZW50czpcblxuIiwKKworICAgIHByaW50ICIlLTQwcyAgJTEwc1xuIiAlICgiZXZlbnQiLCAiY291bnQiKSwKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0iKSwKKworICAgIGZvciBldmVudF9uYW1lIGluIGtleXM6CisJcHJpbnQgIiUtNDBzICAlMTBkXG4iICUgKGV2ZW50X25hbWUsIHVuaGFuZGxlZFtldmVudF9uYW1lXSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2EwMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLnB5CkBAIC0wLDAgKzEsNjggQEAKKyMgZmFpbGVkIHN5c3RlbSBjYWxsIGNvdW50cywgYnkgcGlkCisjIChjKSAyMDEwLCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKyMKKyMgRGlzcGxheXMgc3lzdGVtLXdpZGUgZmFpbGVkIHN5c3RlbSBjYWxsIHRvdGFscywgYnJva2VuIGRvd24gYnkgcGlkLgorIyBJZiBhIFtjb21tXSBhcmcgaXMgc3BlY2lmaWVkLCBvbmx5IHN5c2NhbGxzIGNhbGxlZCBieSBbY29tbV0gYXJlIGRpc3BsYXllZC4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKK2Zyb20gQ29yZSBpbXBvcnQgKgorCit1c2FnZSA9ICJwZXJmIHRyYWNlIC1zIHN5c2NhbGwtY291bnRzLWJ5LXBpZC5weSBbY29tbV1cbiI7CisKK2Zvcl9jb21tID0gTm9uZQorCitpZiBsZW4oc3lzLmFyZ3YpID4gMjoKKwlzeXMuZXhpdCh1c2FnZSkKKworaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisJZm9yX2NvbW0gPSBzeXMuYXJndlsxXQorCitzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcGFzcworCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnRfZXJyb3JfdG90YWxzKCkKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2V4aXQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgcmV0KToKKwlpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkJaWYgY29tbW9uX2NvbW0gIT0gZm9yX2NvbW06CisJCQlyZXR1cm4KKworCWlmIHJldCA8IDA6CisJCXRyeToKKwkJCXN5c2NhbGxzW2NvbW1vbl9jb21tXVtjb21tb25fcGlkXVtpZF1bcmV0XSArPSAxCisJCWV4Y2VwdCBUeXBlRXJyb3I6CisJCQlzeXNjYWxsc1tjb21tb25fY29tbV1bY29tbW9uX3BpZF1baWRdW3JldF0gPSAxCisKK2RlZiBwcmludF9lcnJvcl90b3RhbHMoKToKKyAgICBpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBlcnJvcnMgZm9yICVzOlxuXG4iICUgKGZvcl9jb21tKSwKKyAgICBlbHNlOgorCSAgICBwcmludCAiXG5zeXNjYWxsIGVycm9yczpcblxuIiwKKworICAgIHByaW50ICIlLTMwcyAgJTEwc1xuIiAlICgiY29tbSBbcGlkXSIsICJjb3VudCIpLAorICAgIHByaW50ICIlLTMwcyAgJTEwc1xuIiAlICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0iKSwKKworICAgIGNvbW1fa2V5cyA9IHN5c2NhbGxzLmtleXMoKQorICAgIGZvciBjb21tIGluIGNvbW1fa2V5czoKKwkgICAgcGlkX2tleXMgPSBzeXNjYWxsc1tjb21tXS5rZXlzKCkKKwkgICAgZm9yIHBpZCBpbiBwaWRfa2V5czoKKwkJICAgIHByaW50ICJcbiVzIFslZF1cbiIgJSAoY29tbSwgcGlkKSwKKwkJICAgIGlkX2tleXMgPSBzeXNjYWxsc1tjb21tXVtwaWRdLmtleXMoKQorCQkgICAgZm9yIGlkIGluIGlkX2tleXM6CisJCQkgICAgcHJpbnQgIiAgc3lzY2FsbDogJS0xNmRcbiIgJSAoaWQpLAorCQkJICAgIHJldF9rZXlzID0gc3lzY2FsbHNbY29tbV1bcGlkXVtpZF0ua2V5cygpCisJCQkgICAgZm9yIHJldCwgdmFsIGluIHNvcnRlZChzeXNjYWxsc1tjb21tXVtwaWRdW2lkXS5pdGVyaXRlbXMoKSwga2V5ID0gbGFtYmRhKGssIHYpOiAodiwgayksICByZXZlcnNlID0gVHJ1ZSk6CisJCQkJICAgIHByaW50ICIgICAgZXJyID0gJS0yMGQgICUxMGRcbiIgJSAocmV0LCB2YWwpLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLWJ5LXBpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjcyMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkKQEAgLTAsMCArMSw2NCBAQAorIyBzeXN0ZW0gY2FsbCBjb3VudHMsIGJ5IHBpZAorIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIHN5c3RlbSBjYWxsIHRvdGFscywgYnJva2VuIGRvd24gYnkgc3lzY2FsbC4KKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKwordXNhZ2UgPSAicGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy1ieS1waWQucHkgW2NvbW1dXG4iOworCitmb3JfY29tbSA9IE5vbmUKKworaWYgbGVuKHN5cy5hcmd2KSA+IDI6CisJc3lzLmV4aXQodXNhZ2UpCisKK2lmIGxlbihzeXMuYXJndikgPiAxOgorCWZvcl9jb21tID0gc3lzLmFyZ3ZbMV0KKworc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKK2RlZiB0cmFjZV9iZWdpbigpOgorCXBhc3MKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50X3N5c2NhbGxfdG90YWxzKCkKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJaWQsIGFyZ3MpOgorCWlmIGZvcl9jb21tIGlzIG5vdCBOb25lOgorCQlpZiBjb21tb25fY29tbSAhPSBmb3JfY29tbToKKwkJCXJldHVybgorCXRyeToKKwkJc3lzY2FsbHNbY29tbW9uX2NvbW1dW2NvbW1vbl9waWRdW2lkXSArPSAxCisJZXhjZXB0IFR5cGVFcnJvcjoKKwkJc3lzY2FsbHNbY29tbW9uX2NvbW1dW2NvbW1vbl9waWRdW2lkXSA9IDEKKworZGVmIHByaW50X3N5c2NhbGxfdG90YWxzKCk6CisgICAgaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzIGZvciAlczpcblxuIiAlIChmb3JfY29tbSksCisgICAgZWxzZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHMgYnkgY29tbS9waWQ6XG5cbiIsCisKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoImNvbW0gW3BpZF0vc3lzY2FsbHMiLCAiY291bnQiKSwKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLSIpLAorCisgICAgY29tbV9rZXlzID0gc3lzY2FsbHMua2V5cygpCisgICAgZm9yIGNvbW0gaW4gY29tbV9rZXlzOgorCSAgICBwaWRfa2V5cyA9IHN5c2NhbGxzW2NvbW1dLmtleXMoKQorCSAgICBmb3IgcGlkIGluIHBpZF9rZXlzOgorCQkgICAgcHJpbnQgIlxuJXMgWyVkXVxuIiAlIChjb21tLCBwaWQpLAorCQkgICAgaWRfa2V5cyA9IHN5c2NhbGxzW2NvbW1dW3BpZF0ua2V5cygpCisJCSAgICBmb3IgaWQsIHZhbCBpbiBzb3J0ZWQoc3lzY2FsbHNbY29tbV1bcGlkXS5pdGVyaXRlbXMoKSwgXAorCQkJCSAga2V5ID0gbGFtYmRhKGssIHYpOiAodiwgayksICByZXZlcnNlID0gVHJ1ZSk6CisJCQkgICAgcHJpbnQgIiAgJS0zOGQgICUxMGRcbiIgJSAoaWQsIHZhbCksCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLnB5IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTc3ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weQpAQCAtMCwwICsxLDU4IEBACisjIHN5c3RlbSBjYWxsIGNvdW50cworIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIHN5c3RlbSBjYWxsIHRvdGFscywgYnJva2VuIGRvd24gYnkgc3lzY2FsbC4KKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKwordXNhZ2UgPSAicGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy5weSBbY29tbV1cbiI7CisKK2Zvcl9jb21tID0gTm9uZQorCitpZiBsZW4oc3lzLmFyZ3YpID4gMjoKKwlzeXMuZXhpdCh1c2FnZSkKKworaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisJZm9yX2NvbW0gPSBzeXMuYXJndlsxXQorCitzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcGFzcworCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnRfc3lzY2FsbF90b3RhbHMoKQorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CisJaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJCWlmIGNvbW1vbl9jb21tICE9IGZvcl9jb21tOgorCQkJcmV0dXJuCisJdHJ5OgorCQlzeXNjYWxsc1tpZF0gKz0gMQorCWV4Y2VwdCBUeXBlRXJyb3I6CisJCXN5c2NhbGxzW2lkXSA9IDEKKworZGVmIHByaW50X3N5c2NhbGxfdG90YWxzKCk6CisgICAgaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzIGZvciAlczpcblxuIiAlIChmb3JfY29tbSksCisgICAgZWxzZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHM6XG5cbiIsCisKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoImV2ZW50IiwgImNvdW50IiksCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tIiksCisKKyAgICBmb3IgaWQsIHZhbCBpbiBzb3J0ZWQoc3lzY2FsbHMuaXRlcml0ZW1zKCksIGtleSA9IGxhbWJkYShrLCB2KTogKHYsIGspLCBcCisJCQkJICByZXZlcnNlID0gVHJ1ZSk6CisJICAgIHByaW50ICIlLTQwZCAgJTEwZFxuIiAlIChpZCwgdmFsKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5MDRiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBidWlsZC1pZC5jCisgKgorICogYnVpbGQtaWQgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAcmVkaGF0LmNvbT4KKyAqLworI2luY2x1ZGUgImJ1aWxkLWlkLmgiCisjaW5jbHVkZSAiZXZlbnQuaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RhdGljIGludCBidWlsZF9pZF9fbWFya19kc29faGl0KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOworCXU4IGNwdW1vZGUgPSBldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwpIHsKKwkJcHJfZXJyKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBzZXNzaW9uLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAorCQkJICAgICAgZXZlbnQtPmlwLmlwLCAmYWwpOworCisJaWYgKGFsLm1hcCAhPSBOVUxMKQorCQlhbC5tYXAtPmRzby0+aGl0ID0gMTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMgPSB7CisJLnNhbXBsZQk9IGJ1aWxkX2lkX19tYXJrX2Rzb19oaXQsCisJLm1tYXAJPSBldmVudF9fcHJvY2Vzc19tbWFwLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKK307CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTgxZDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgUEVSRl9CVUlMRF9JRF9IXworI2RlZmluZSBQRVJGX0JVSUxEX0lEX0hfIDEKKworI2luY2x1ZGUgInNlc3Npb24uaCIKKworZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBidWlsZF9pZF9fbWFya19kc29faGl0X29wczsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kYXRhX21hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTU3YjgzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kYXRhX21hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLSNpbmNsdWRlICJzeW1ib2wuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJ0aHJlYWQuaCIKLSNpbmNsdWRlICJzZXNzaW9uLmgiCi0KLXN0YXRpYyBpbnQgcHJvY2Vzc19ldmVudF9zdHViKGV2ZW50X3QgKmV2ZW50IF9fdXNlZCwKLQkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQotewotCWR1bXBfcHJpbnRmKCI6IHVuaGFuZGxlZCFcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX2V2ZW50X29wc19fZmlsbF9kZWZhdWx0cyhzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKmhhbmRsZXIpCi17Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX3NhbXBsZV9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19zYW1wbGVfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX21tYXBfZXZlbnQpCi0JCWhhbmRsZXItPnByb2Nlc3NfbW1hcF9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQlpZiAoIWhhbmRsZXItPnByb2Nlc3NfY29tbV9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19jb21tX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc19mb3JrX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX2ZvcmtfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX2V4aXRfZXZlbnQpCi0JCWhhbmRsZXItPnByb2Nlc3NfZXhpdF9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQlpZiAoIWhhbmRsZXItPnByb2Nlc3NfbG9zdF9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19sb3N0X2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc19yZWFkX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX3JlYWRfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX3Rocm90dGxlX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX3Rocm90dGxlX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc191bnRocm90dGxlX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpldmVudF9fbmFtZVtdID0gewotCVswXQkJCSA9ICJUT1RBTCIsCi0JW1BFUkZfUkVDT1JEX01NQVBdCSA9ICJNTUFQIiwKLQlbUEVSRl9SRUNPUkRfTE9TVF0JID0gIkxPU1QiLAotCVtQRVJGX1JFQ09SRF9DT01NXQkgPSAiQ09NTSIsCi0JW1BFUkZfUkVDT1JEX0VYSVRdCSA9ICJFWElUIiwKLQlbUEVSRl9SRUNPUkRfVEhST1RUTEVdCSA9ICJUSFJPVFRMRSIsCi0JW1BFUkZfUkVDT1JEX1VOVEhST1RUTEVdID0gIlVOVEhST1RUTEUiLAotCVtQRVJGX1JFQ09SRF9GT1JLXQkgPSAiRk9SSyIsCi0JW1BFUkZfUkVDT1JEX1JFQURdCSA9ICJSRUFEIiwKLQlbUEVSRl9SRUNPUkRfU0FNUExFXQkgPSAiU0FNUExFIiwKLX07Ci0KLXVuc2lnbmVkIGxvbmcgZXZlbnRfX3RvdGFsW1BFUkZfUkVDT1JEX01BWF07Ci0KLXZvaWQgZXZlbnRfX3ByaW50X3RvdGFscyh2b2lkKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBQRVJGX1JFQ09SRF9NQVg7ICsraSkKLQkJcHJfaW5mbygiJTEwcyBldmVudHM6ICUxMGxkXG4iLAotCQkJZXZlbnRfX25hbWVbaV0sIGV2ZW50X190b3RhbFtpXSk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJvY2Vzc19ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCSBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcywKLQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQotewotCXRyYWNlX2V2ZW50KGV2ZW50KTsKLQotCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPCBQRVJGX1JFQ09SRF9NQVgpIHsKLQkJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEXyVzIiwKLQkJCSAgICAodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKLQkJCSAgICAodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQkJICAgIGV2ZW50X19uYW1lW2V2ZW50LT5oZWFkZXIudHlwZV0pOwotCQkrK2V2ZW50X190b3RhbFswXTsKLQkJKytldmVudF9fdG90YWxbZXZlbnQtPmhlYWRlci50eXBlXTsKLQl9Ci0KLQlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgewotCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX21tYXBfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKLQljYXNlIFBFUkZfUkVDT1JEX0ZPUks6Ci0JCXJldHVybiBvcHMtPnByb2Nlc3NfZm9ya19ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9FWElUOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX2V4aXRfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfTE9TVDoKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKLQljYXNlIFBFUkZfUkVDT1JEX1JFQUQ6Ci0JCXJldHVybiBvcHMtPnByb2Nlc3NfcmVhZF9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc190aHJvdHRsZV9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9VTlRIUk9UVExFOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWRlZmF1bHQ6Ci0JCW9wcy0+dG90YWxfdW5rbm93bisrOwotCQlyZXR1cm4gLTE7Ci0JfQotfQotCi1pbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGludCBpbnB1dCwgdTY0IG9mZnNldCwgdTY0IHNpemUpCi17Ci0Jc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGJldjsKLQljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLQl1NjQgbGltaXQgPSBvZmZzZXQgKyBzaXplOwotCWludCBlcnIgPSAtMTsKLQotCXdoaWxlIChvZmZzZXQgPCBsaW1pdCkgewotCQlzdHJ1Y3QgZHNvICpkc287Ci0JCXNzaXplX3QgbGVuOwotCi0JCWlmIChyZWFkKGlucHV0LCAmYmV2LCBzaXplb2YoYmV2KSkgIT0gc2l6ZW9mKGJldikpCi0JCQlnb3RvIG91dDsKLQotCQlsZW4gPSBiZXYuaGVhZGVyLnNpemUgLSBzaXplb2YoYmV2KTsKLQkJaWYgKHJlYWQoaW5wdXQsIGZpbGVuYW1lLCBsZW4pICE9IGxlbikKLQkJCWdvdG8gb3V0OwotCi0JCWRzbyA9IGRzb3NfX2ZpbmRuZXcoZmlsZW5hbWUpOwotCQlpZiAoZHNvICE9IE5VTEwpCi0JCQlkc29fX3NldF9idWlsZF9pZChkc28sICZiZXYuYnVpbGRfaWQpOwotCi0JCW9mZnNldCArPSBiZXYuaGVhZGVyLnNpemU7Ci0JfQotCWVyciA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHN0cnVjdCB0aHJlYWQgKnBlcmZfc2Vzc2lvbl9fcmVnaXN0ZXJfaWRsZV90aHJlYWQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKLXsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2VsZiwgMCk7Ci0KLQlpZiAoIXRocmVhZCB8fCB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgInN3YXBwZXIiKSkgewotCQlwcl9lcnIoInByb2JsZW0gaW5zZXJ0aW5nIGlkbGUgdGFzay5cbiIpOwotCQl0aHJlYWQgPSBOVUxMOwotCX0KLQotCXJldHVybiB0aHJlYWQ7Ci19Ci0KLWludCBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCi0JCQkJIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQotewotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBoZWFkLCBzaGlmdDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7Ci0Jc2l6ZV90CXBhZ2Vfc2l6ZTsKLQlldmVudF90ICpldmVudDsKLQl1aW50MzJfdCBzaXplOwotCWNoYXIgKmJ1ZjsKLQotCWlmIChwZXJmX3Nlc3Npb25fX3JlZ2lzdGVyX2lkbGVfdGhyZWFkKHNlbGYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGVyZl9ldmVudF9vcHNfX2ZpbGxfZGVmYXVsdHMob3BzKTsKLQotCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0KLQloZWFkID0gc2VsZi0+aGVhZGVyLmRhdGFfb2Zmc2V0OwotCXNlbGYtPnNhbXBsZV90eXBlID0gcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKCZzZWxmLT5oZWFkZXIpOwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAob3BzLT5zYW1wbGVfdHlwZV9jaGVjayAmJiBvcHMtPnNhbXBsZV90eXBlX2NoZWNrKHNlbGYpIDwgMCkKLQkJZ290byBvdXRfZXJyOwotCi0JaWYgKCFvcHMtPmZ1bGxfcGF0aHMpIHsKLQkJY2hhciBiZltQQVRIX01BWF07Ci0KLQkJaWYgKGdldGN3ZChiZiwgc2l6ZW9mKGJmKSkgPT0gTlVMTCkgewotCQkJZXJyID0gLWVycm5vOwotb3V0X2dldGN3ZF9lcnI6Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKLQkJCWdvdG8gb3V0X2VycjsKLQkJfQotCQlzZWxmLT5jd2QgPSBzdHJkdXAoYmYpOwotCQlpZiAoc2VsZi0+Y3dkID09IE5VTEwpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9nZXRjd2RfZXJyOwotCQl9Ci0JCXNlbGYtPmN3ZGxlbiA9IHN0cmxlbihzZWxmLT5jd2QpOwotCX0KLQotCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwotCW9mZnNldCArPSBzaGlmdDsKLQloZWFkIC09IHNoaWZ0OwotCi1yZW1hcDoKLQlidWYgPSBtbWFwKE5VTEwsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93LCBQUk9UX1JFQUQsCi0JCSAgIE1BUF9TSEFSRUQsIHNlbGYtPmZkLCBvZmZzZXQpOwotCWlmIChidWYgPT0gTUFQX0ZBSUxFRCkgewotCQlwcl9lcnIoImZhaWxlZCB0byBtbWFwIGZpbGVcbiIpOwotCQllcnIgPSAtZXJybm87Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0KLW1vcmU6Ci0JZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKLQotCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7Ci0JaWYgKCFzaXplKQotCQlzaXplID0gODsKLQotCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID49IHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93KSB7Ci0JCWludCBtdW5tYXBfcmV0OwotCi0JCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwotCi0JCW11bm1hcF9yZXQgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBzZWxmLT5tbWFwX3dpbmRvdyk7Ci0JCWFzc2VydChtdW5tYXBfcmV0ID09IDApOwotCi0JCW9mZnNldCArPSBzaGlmdDsKLQkJaGVhZCAtPSBzaGlmdDsKLQkJZ290byByZW1hcDsKLQl9Ci0KLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCi0JZHVtcF9wcmludGYoIlxuJXAgWyVwXTogZXZlbnQ6ICVkXG4iLAotCQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCQkodm9pZCAqKShsb25nKWV2ZW50LT5oZWFkZXIuc2l6ZSwKLQkJCWV2ZW50LT5oZWFkZXIudHlwZSk7Ci0KLQlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgc2VsZiwgb3BzLCBvZmZzZXQsIGhlYWQpIDwgMCkgewotCi0JCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKLQkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKLQkJCWV2ZW50LT5oZWFkZXIudHlwZSk7Ci0KLQkJLyoKLQkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKLQkJICogaW5jcmVtZW50IGEgc2luZ2xlIHU2NCBpbiB0aGUgaG9wZSB0byBjYXRjaCBvbiBhZ2FpbiAnc29vbicuCi0JCSAqLwotCi0JCWlmICh1bmxpa2VseShoZWFkICYgNykpCi0JCQloZWFkICY9IH43VUxMOwotCi0JCXNpemUgPSA4OwotCX0KLQotCWhlYWQgKz0gc2l6ZTsKLQotCWlmIChvZmZzZXQgKyBoZWFkID49IHNlbGYtPmhlYWRlci5kYXRhX29mZnNldCArIHNlbGYtPmhlYWRlci5kYXRhX3NpemUpCi0JCWdvdG8gZG9uZTsKLQotCWlmIChvZmZzZXQgKyBoZWFkIDwgc2VsZi0+c2l6ZSkKLQkJZ290byBtb3JlOwotCi1kb25lOgotCWVyciA9IDA7Ci1vdXRfZXJyOgotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGVidWcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCmluZGV4IDI4ZDUyMGQuLjA5MDU2MDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiZXZlbnQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwuaCIKIAogaW50IHZlcmJvc2UgPSAwOwogaW50IGR1bXBfdHJhY2UgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmMKaW5kZXggMDZiNzNlZS4uYTg4ZmVmYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYworKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5jCkBAIC0xMDYsMTYgKzEwNiwxNCBAQAogCXJldHVybiAwOwogfQogCi0vKiBtb3VudCB0aGUgZGVidWdmcyBzb21ld2hlcmUgKi8KKy8qIG1vdW50IHRoZSBkZWJ1Z2ZzIHNvbWV3aGVyZSBpZiBpdCdzIG5vdCBtb3VudGVkICovCiAKLWludCBkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpCitjaGFyICpkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpCiB7Ci0JY2hhciBtb3VudGNtZFsxMjhdOwotCiAJLyogc2VlIGlmIGl0J3MgYWxyZWFkeSBtb3VudGVkICovCiAJaWYgKGRlYnVnZnNfZmluZF9tb3VudHBvaW50KCkpIHsKIAkJZGVidWdmc19wcmVtb3VudGVkID0gMTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7CiAJfQogCiAJLyogaWYgbm90IG1vdW50ZWQgYW5kIG5vIGFyZ3VtZW50ICovCkBAIC0xMjcsMTMgKzEyNSwxNCBAQAogCQkJbW91bnRwb2ludCA9ICIvc3lzL2tlcm5lbC9kZWJ1ZyI7CiAJfQogCisJaWYgKG1vdW50KE5VTEwsIG1vdW50cG9pbnQsICJkZWJ1Z2ZzIiwgMCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qIHNhdmUgdGhlIG1vdW50cG9pbnQgKi8KIAlzdHJuY3B5KGRlYnVnZnNfbW91bnRwb2ludCwgbW91bnRwb2ludCwgc2l6ZW9mKGRlYnVnZnNfbW91bnRwb2ludCkpOworCWRlYnVnZnNfZm91bmQgPSAxOwogCi0JLyogbW91bnQgaXQgKi8KLQlzbnByaW50Zihtb3VudGNtZCwgc2l6ZW9mKG1vdW50Y21kKSwKLQkJICIvYmluL21vdW50IC10IGRlYnVnZnMgZGVidWdmcyAlcyIsIG1vdW50cG9pbnQpOwotCXJldHVybiBzeXN0ZW0obW91bnRjbWQpOworCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7CiB9CiAKIC8qIHVtb3VudCB0aGUgZGVidWdmcyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmgKaW5kZXggM2NkMTRmOS4uODNhMDI4NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaAorKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5oCkBAIC0xNSw3ICsxNSw3IEBACiBleHRlcm4gY29uc3QgY2hhciAqZGVidWdmc19maW5kX21vdW50cG9pbnQodm9pZCk7CiBleHRlcm4gaW50IGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChjb25zdCBjaGFyICpkZWJ1Z2ZzKTsKIGV4dGVybiBpbnQgZGVidWdmc192YWxpZF9lbnRyeShjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgZGVidWdmc19tb3VudChjb25zdCBjaGFyICptb3VudHBvaW50KTsKK2V4dGVybiBjaGFyICpkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpOwogZXh0ZXJuIGludCBkZWJ1Z2ZzX3Vtb3VudCh2b2lkKTsKIGV4dGVybiBpbnQgZGVidWdmc193cml0ZShjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqdmFsdWUpOwogZXh0ZXJuIGludCBkZWJ1Z2ZzX3JlYWQoY29uc3QgY2hhciAqZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCA4YTllNmJhLi43MDVlYzYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtOCw4ICs4LDcgQEAKICNpbmNsdWRlICJ0aHJlYWQuaCIKIAogc3RhdGljIHBpZF90IGV2ZW50X19zeW50aGVzaXplX2NvbW0ocGlkX3QgcGlkLCBpbnQgZnVsbCwKLQkJCQkgICAgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCi0JCQkJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKKwkJCQkgICAgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWV2ZW50X3QgZXY7CkBAIC05MSw4ICs5MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkX3QgcGlkLCBwaWRfdCB0Z2lkLAotCQkJCQkgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCi0JCQkJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCisJCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwpAQCAtMTEyLDcgKzExMCwxMCBAQAogCXdoaWxlICgxKSB7CiAJCWNoYXIgYmZbQlVGU0laXSwgKnBiZiA9IGJmOwogCQlldmVudF90IGV2ID0gewotCQkJLmhlYWRlciA9IHsgLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQIH0sCisJCQkuaGVhZGVyID0geworCQkJCS50eXBlID0gUEVSRl9SRUNPUkRfTU1BUCwKKwkJCQkubWlzYyA9IDAsIC8qIEp1c3QgbGlrZSB0aGUga2VybmVsLCBzZWUga2VybmVsL3BlcmZfZXZlbnQuYyBfX3BlcmZfZXZlbnRfbW1hcCAqLworCQkJIH0sCiAJCX07CiAJCWludCBuOwogCQlzaXplX3Qgc2l6ZTsKQEAgLTE1Niw5ICsxNTcsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsCi0JCQkgICAgIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+a21hcHMubWFwc1tNQVBfX0ZVTkNUSU9OXSk7CisJICAgICBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlldmVudF90IGV2OworCQlzaXplX3Qgc2l6ZTsKKwkJc3RydWN0IG1hcCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCisJCWlmIChwb3MtPmRzby0+a2VybmVsKQorCQkJY29udGludWU7CisKKwkJc2l6ZSA9IEFMSUdOKHBvcy0+ZHNvLT5sb25nX25hbWVfbGVuICsgMSwgc2l6ZW9mKHU2NCkpOworCQltZW1zZXQoJmV2LCAwLCBzaXplb2YoZXYpKTsKKwkJZXYubW1hcC5oZWFkZXIubWlzYyA9IDE7IC8qIGtlcm5lbCB1c2VzIDAgZm9yIHVzZXIgc3BhY2UgbWFwcywgc2VlIGtlcm5lbC9wZXJmX2V2ZW50LmMgX19wZXJmX2V2ZW50X21tYXAgKi8KKwkJZXYubW1hcC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX01NQVA7CisJCWV2Lm1tYXAuaGVhZGVyLnNpemUgPSAoc2l6ZW9mKGV2Lm1tYXApIC0KKwkJCQkgICAgICAgIChzaXplb2YoZXYubW1hcC5maWxlbmFtZSkgLSBzaXplKSk7CisJCWV2Lm1tYXAuc3RhcnQgPSBwb3MtPnN0YXJ0OworCQlldi5tbWFwLmxlbiAgID0gcG9zLT5lbmQgLSBwb3MtPnN0YXJ0OworCisJCW1lbWNweShldi5tbWFwLmZpbGVuYW1lLCBwb3MtPmRzby0+bG9uZ19uYW1lLAorCQkgICAgICAgcG9zLT5kc28tPmxvbmdfbmFtZV9sZW4gKyAxKTsKKwkJcHJvY2VzcygmZXYsIHNlc3Npb24pOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXBpZF90IHRnaWQgPSBldmVudF9fc3ludGhlc2l6ZV9jb21tKHBpZCwgMSwgcHJvY2Vzcywgc2Vzc2lvbik7CkBAIC0xNjcsOCArMTk3LDcgQEAKIAlyZXR1cm4gZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkLCB0Z2lkLCBwcm9jZXNzLCBzZXNzaW9uKTsKIH0KIAotdm9pZCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKK3ZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlESVIgKnByb2M7CkBAIC0xODksNiArMjE4LDU5IEBACiAJY2xvc2VkaXIocHJvYyk7CiB9CiAKK3N0cnVjdCBwcm9jZXNzX3N5bWJvbF9hcmdzIHsKKwljb25zdCBjaGFyICpuYW1lOworCXU2NAkgICBzdGFydDsKK307CisKK3N0YXRpYyBpbnQgZmluZF9zeW1ib2xfY2Iodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyIHR5cGUsIHU2NCBzdGFydCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19zeW1ib2xfYXJncyAqYXJncyA9IGFyZzsKKworCS8qCisJICogTXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGF0IGxlYXN0IGFuIGFsaWFzLCBhcyBpbiBQQVJJU0M2NCwgd2hlcmUgIl90ZXh0IiBpcworCSAqIGFuICdBJyB0byB0aGUgc2FtZSBhZGRyZXNzIGFzICJfc3RleHQiLgorCSAqLworCWlmICghKHN5bWJvbF90eXBlX19pc19hKHR5cGUsIE1BUF9fRlVOQ1RJT04pIHx8CisJICAgICAgdHlwZSA9PSAnQScpIHx8IHN0cmNtcChuYW1lLCBhcmdzLT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlhcmdzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiAxOworfQorCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfa2VybmVsX21tYXAoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAorCQkJCSAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgIGNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lKQoreworCXNpemVfdCBzaXplOworCWV2ZW50X3QgZXYgPSB7CisJCS5oZWFkZXIgPSB7CisJCQkudHlwZSA9IFBFUkZfUkVDT1JEX01NQVAsCisJCQkubWlzYyA9IDEsIC8qIGtlcm5lbCB1c2VzIDAgZm9yIHVzZXIgc3BhY2UgbWFwcywgc2VlIGtlcm5lbC9wZXJmX2V2ZW50LmMgX19wZXJmX2V2ZW50X21tYXAgKi8KKwkJfSwKKwl9OworCS8qCisJICogV2Ugc2hvdWxkIGdldCB0aGlzIGZyb20gL3N5cy9rZXJuZWwvc2VjdGlvbnMvLnRleHQsIGJ1dCB0aWxsIHRoYXQgaXMKKwkgKiBhdmFpbGFibGUgdXNlIHRoaXMsIGFuZCBhZnRlciBpdCBpcyB1c2UgdGhpcyBhcyBhIGZhbGxiYWNrIGZvciBvbGRlcgorCSAqIGtlcm5lbHMuCisJICovCisJc3RydWN0IHByb2Nlc3Nfc3ltYm9sX2FyZ3MgYXJncyA9IHsgLm5hbWUgPSBzeW1ib2xfbmFtZSwgfTsKKworCWlmIChrYWxsc3ltc19fcGFyc2UoIi9wcm9jL2thbGxzeW1zIiwgJmFyZ3MsIGZpbmRfc3ltYm9sX2NiKSA8PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXNpemUgPSBzbnByaW50Zihldi5tbWFwLmZpbGVuYW1lLCBzaXplb2YoZXYubW1hcC5maWxlbmFtZSksCisJCQkiW2tlcm5lbC5rYWxsc3ltcy4lc10iLCBzeW1ib2xfbmFtZSkgKyAxOworCXNpemUgPSBBTElHTihzaXplLCBzaXplb2YodTY0KSk7CisJZXYubW1hcC5oZWFkZXIuc2l6ZSA9IChzaXplb2YoZXYubW1hcCkgLSAoc2l6ZW9mKGV2Lm1tYXAuZmlsZW5hbWUpIC0gc2l6ZSkpOworCWV2Lm1tYXAucGdvZmYgPSBhcmdzLnN0YXJ0OworCWV2Lm1tYXAuc3RhcnQgPSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPnN0YXJ0OworCWV2Lm1tYXAubGVuICAgPSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmVuZCAtIGV2Lm1tYXAuc3RhcnQgOworCisJcmV0dXJuIHByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKK30KKwogc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmKQogewogCWNoYXIgKmNvbW0gPSBzZWxmLT5jb21tOwpAQCAtMjQwLDIyICszMjIsODggQEAKIAogaW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+bW1hcC5waWQpOwotCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9fbmV3KCZzZWxmLT5tbWFwLCBNQVBfX0ZVTkNUSU9OLAotCQkJCSAgIHNlc3Npb24tPmN3ZCwgc2Vzc2lvbi0+Y3dkbGVuKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJc3RydWN0IG1hcCAqbWFwOwogCi0JZHVtcF9wcmludGYoIiAlZC8lZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCi0JCSAgICBzZWxmLT5tbWFwLnBpZCwgc2VsZi0+bW1hcC50aWQsCi0JCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAuc3RhcnQsCi0JCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAubGVuLAotCQkgICAgKHZvaWQgKikobG9uZylzZWxmLT5tbWFwLnBnb2ZmLAotCQkgICAgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisJZHVtcF9wcmludGYoIiAlZC8lZDogWyUjTHgoJSNMeCkgQCAlI0x4XTogJXNcbiIsCisJCSAgICBzZWxmLT5tbWFwLnBpZCwgc2VsZi0+bW1hcC50aWQsIHNlbGYtPm1tYXAuc3RhcnQsCisJCSAgICBzZWxmLT5tbWFwLmxlbiwgc2VsZi0+bW1hcC5wZ29mZiwgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisKKwlpZiAoc2VsZi0+bW1hcC5waWQgPT0gMCkgeworCQlzdGF0aWMgY29uc3QgY2hhciBrbW1hcF9wcmVmaXhbXSA9ICJba2VybmVsLmthbGxzeW1zLiI7CisKKwkJaWYgKHNlbGYtPm1tYXAuZmlsZW5hbWVbMF0gPT0gJy8nKSB7CisJCQljaGFyIHNob3J0X21vZHVsZV9uYW1lWzEwMjRdOworCQkJY2hhciAqbmFtZSA9IHN0cnJjaHIoc2VsZi0+bW1hcC5maWxlbmFtZSwgJy8nKSwgKmRvdDsKKworCQkJaWYgKG5hbWUgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOworCisJCQkrK25hbWU7IC8qIHNraXAgLyAqLworCQkJZG90ID0gc3RycmNocihuYW1lLCAnLicpOworCQkJaWYgKGRvdCA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X3Byb2JsZW07CisKKwkJCXNucHJpbnRmKHNob3J0X21vZHVsZV9uYW1lLCBzaXplb2Yoc2hvcnRfbW9kdWxlX25hbWUpLAorCQkJCSAiWyUuKnNdIiwgKGludCkoZG90IC0gbmFtZSksIG5hbWUpOworCQkJc3RyeGZyY2hhcihzaG9ydF9tb2R1bGVfbmFtZSwgJy0nLCAnXycpOworCisJCQltYXAgPSBwZXJmX3Nlc3Npb25fX25ld19tb2R1bGVfbWFwKHNlc3Npb24sCisJCQkJCQkJICAgc2VsZi0+bW1hcC5zdGFydCwKKwkJCQkJCQkgICBzZWxmLT5tbWFwLmZpbGVuYW1lKTsKKwkJCWlmIChtYXAgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOworCisJCQluYW1lID0gc3RyZHVwKHNob3J0X21vZHVsZV9uYW1lKTsKKwkJCWlmIChuYW1lID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJbWFwLT5kc28tPnNob3J0X25hbWUgPSBuYW1lOworCQkJbWFwLT5lbmQgPSBtYXAtPnN0YXJ0ICsgc2VsZi0+bW1hcC5sZW47CisJCX0gZWxzZSBpZiAobWVtY21wKHNlbGYtPm1tYXAuZmlsZW5hbWUsIGttbWFwX3ByZWZpeCwKKwkJCQlzaXplb2Yoa21tYXBfcHJlZml4KSAtIDEpID09IDApIHsKKwkJCWNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lID0gKHNlbGYtPm1tYXAuZmlsZW5hbWUgKworCQkJCQkJICAgc2l6ZW9mKGttbWFwX3ByZWZpeCkgLSAxKTsKKwkJCS8qCisJCQkgKiBTaG91bGQgYmUgdGhlcmUgYWxyZWFkeSwgZnJvbSB0aGUgYnVpbGQtaWQgdGFibGUgaW4KKwkJCSAqIHRoZSBoZWFkZXIuCisJCQkgKi8KKwkJCXN0cnVjdCBkc28gKmtlcm5lbCA9IF9fZHNvc19fZmluZG5ldygmZHNvc19fa2VybmVsLAorCQkJCQkJCSAgICAgIltrZXJuZWwua2FsbHN5bXNdIik7CisJCQlpZiAoa2VybmVsID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJa2VybmVsLT5rZXJuZWwgPSAxOworCQkJaWYgKF9fcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc2Vzc2lvbiwga2VybmVsKSA8IDApCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5zdGFydCA9IHNlbGYtPm1tYXAuc3RhcnQ7CisJCQlzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmVuZCAgID0gc2VsZi0+bW1hcC5zdGFydCArIHNlbGYtPm1tYXAubGVuOworCQkJLyoKKwkJCSAqIEJlIGEgYml0IHBhcmFub2lkIGhlcmUsIHNvbWUgcGVyZi5kYXRhIGZpbGUgY2FtZSB3aXRoCisJCQkgKiBhIHplcm8gc2l6ZWQgc3ludGhlc2l6ZWQgTU1BUCBldmVudCBmb3IgdGhlIGtlcm5lbC4KKwkJCSAqLworCQkJaWYgKHNlc3Npb24tPnZtbGludXhfbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZW5kID09IDApCisJCQkJc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5lbmQgPSB+MFVMOworCisJCQlwZXJmX3Nlc3Npb25fX3NldF9rYWxsc3ltc19yZWZfcmVsb2Nfc3ltKHNlc3Npb24sIHN5bWJvbF9uYW1lLAorCQkJCQkJCQkgc2VsZi0+bW1hcC5wZ29mZik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPm1tYXAucGlkKTsKKwltYXAgPSBtYXBfX25ldygmc2VsZi0+bW1hcCwgTUFQX19GVU5DVElPTiwKKwkJICAgICAgIHNlc3Npb24tPmN3ZCwgc2Vzc2lvbi0+Y3dkbGVuKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fCBtYXAgPT0gTlVMTCkKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9NTUFQLCBza2lwcGluZyBldmVudC5cbiIpOwotCWVsc2UKLQkJdGhyZWFkX19pbnNlcnRfbWFwKHRocmVhZCwgbWFwKTsKKwkJZ290byBvdXRfcHJvYmxlbTsKIAorCXRocmVhZF9faW5zZXJ0X21hcCh0aHJlYWQsIG1hcCk7CisJcmV0dXJuIDA7CisKK291dF9wcm9ibGVtOgorCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg0LDExICs0MzIsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICpzZWxmLAotCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU4IGNwdW1vZGUsCi0JCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKLQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCi0JCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAorCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKIAlzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcgPSAmc2VsZi0+bWc7CiAKQEAgLTMwMyw3ICs0NTAsNiBAQAogCWVsc2UgewogCQlhbC0+bGV2ZWwgPSAnSCc7CiAJCWFsLT5tYXAgPSBOVUxMOwotCQlhbC0+c3ltID0gTlVMTDsKIAkJcmV0dXJuOwogCX0KIHRyeV9hZ2FpbjoKQEAgLTMyMiwxMSArNDY4LDIxIEBACiAJCQltZyA9ICZzZXNzaW9uLT5rbWFwczsKIAkJCWdvdG8gdHJ5X2FnYWluOwogCQl9Ci0JCWFsLT5zeW0gPSBOVUxMOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCWFsLT5hZGRyID0gYWwtPm1hcC0+bWFwX2lwKGFsLT5tYXAsIGFsLT5hZGRyKTsKLQkJYWwtPnN5bSA9IG1hcF9fZmluZF9zeW1ib2woYWwtPm1hcCwgc2Vzc2lvbiwgYWwtPmFkZHIsIGZpbHRlcik7Ci0JfQorfQorCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY3B1bW9kZSwKKwkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAorCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKKwkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCXRocmVhZF9fZmluZF9hZGRyX21hcChzZWxmLCBzZXNzaW9uLCBjcHVtb2RlLCB0eXBlLCBhZGRyLCBhbCk7CisJaWYgKGFsLT5tYXAgIT0gTlVMTCkKKwkJYWwtPnN5bSA9IG1hcF9fZmluZF9zeW1ib2woYWwtPm1hcCwgYWwtPmFkZHIsIGZpbHRlcik7CisJZWxzZQorCQlhbC0+c3ltID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZHNvX19jYWxjX2NvbF93aWR0aChzdHJ1Y3QgZHNvICpzZWxmKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCA2OTBhOTZkLi41MGE3MTMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMSwxMCArMSwxMCBAQAogI2lmbmRlZiBfX1BFUkZfUkVDT1JEX0gKICNkZWZpbmUgX19QRVJGX1JFQ09SRF9ICiAKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgIm1hcC5oIgogCiAvKgogICogUEVSRl9TQU1QTEVfSVAgfCBQRVJGX1NBTVBMRV9USUQgfCAqCkBAIC0xMDEsNzQgKzEwMSwxOSBAQAogCiB2b2lkIGV2ZW50X19wcmludF90b3RhbHModm9pZCk7CiAKLWVudW0gbWFwX3R5cGUgewotCU1BUF9fRlVOQ1RJT04gPSAwLAotCU1BUF9fVkFSSUFCTEUsCi19OwotCi0jZGVmaW5lIE1BUF9fTlJfVFlQRVMgKE1BUF9fVkFSSUFCTEUgKyAxKQotCi1zdHJ1Y3QgbWFwIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCByYl9ub2RlCXJiX25vZGU7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQl9OwotCXU2NAkJCXN0YXJ0OwotCXU2NAkJCWVuZDsKLQllbnVtIG1hcF90eXBlCQl0eXBlOwotCXU2NAkJCXBnb2ZmOwotCXU2NAkJCSgqbWFwX2lwKShzdHJ1Y3QgbWFwICosIHU2NCk7Ci0JdTY0CQkJKCp1bm1hcF9pcCkoc3RydWN0IG1hcCAqLCB1NjQpOwotCXN0cnVjdCBkc28JCSpkc287Ci19OwotCi1zdGF0aWMgaW5saW5lIHU2NCBtYXBfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKLXsKLQlyZXR1cm4gaXAgLSBtYXAtPnN0YXJ0ICsgbWFwLT5wZ29mZjsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgbWFwX191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKLXsKLQlyZXR1cm4gaXAgKyBtYXAtPnN0YXJ0IC0gbWFwLT5wZ29mZjsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgaWRlbnRpdHlfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAgX191c2VkLCB1NjQgaXApCi17Ci0JcmV0dXJuIGlwOwotfQotCi1zdHJ1Y3Qgc3ltYm9sOwotCi10eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwotCi12b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCi0JICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHBnb2ZmLCBzdHJ1Y3QgZHNvICpkc28pOwotc3RydWN0IG1hcCAqbWFwX19uZXcoc3RydWN0IG1tYXBfZXZlbnQgKmV2ZW50LCBlbnVtIG1hcF90eXBlLAotCQkgICAgIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7Ci12b2lkIG1hcF9fZGVsZXRlKHN0cnVjdCBtYXAgKnNlbGYpOwotc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKTsKLWludCBtYXBfX292ZXJsYXAoc3RydWN0IG1hcCAqbCwgc3RydWN0IG1hcCAqcik7Ci1zaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKTsKLQogc3RydWN0IHBlcmZfc2Vzc2lvbjsKIAotaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCXU2NCBhZGRyLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLXN0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgbWFwICpzZWxmLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLXZvaWQgbWFwX19maXh1cF9zdGFydChzdHJ1Y3QgbWFwICpzZWxmKTsKLXZvaWQgbWFwX19maXh1cF9lbmQoc3RydWN0IG1hcCAqc2VsZik7Cit0eXBlZGVmIGludCAoKmV2ZW50X19oYW5kbGVyX3QpKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsCi0JCQkgICAgIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKLXZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCwKLQkJCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCit2b2lkIGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworaW50IGV2ZW50X19zeW50aGVzaXplX2tlcm5lbF9tbWFwKGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKKwkJCQkgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICBjb25zdCBjaGFyICpzeW1ib2xfbmFtZSk7CitpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAogaW50IGV2ZW50X19wcm9jZXNzX2NvbW0oZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA4YTBiY2E1Li42YzlhYTE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC0xLDggKzEsMTIgQEAKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiaGVhZGVyLmgiCkBAIC0xMDUsMjQgKzEwOSwyOCBAQAogc3RhdGljIGludCBldmVudF9jb3VudDsKIHN0YXRpYyBzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlICpldmVudHM7CiAKLXZvaWQgcGVyZl9oZWFkZXJfX3B1c2hfZXZlbnQodTY0IGlkLCBjb25zdCBjaGFyICpuYW1lKQoraW50IHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpZiAoc3RybGVuKG5hbWUpID4gTUFYX0VWRU5UX05BTUUpCiAJCXByX3dhcm5pbmcoIkV2ZW50ICVzIHdpbGwgYmUgdHJ1bmNhdGVkXG4iLCBuYW1lKTsKIAogCWlmICghZXZlbnRzKSB7CiAJCWV2ZW50cyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOwotCQlpZiAoIWV2ZW50cykKLQkJCWRpZSgibm9tZW0iKTsKKwkJaWYgKGV2ZW50cyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlIHsKLQkJZXZlbnRzID0gcmVhbGxvYyhldmVudHMsIChldmVudF9jb3VudCArIDEpICogc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpKTsKLQkJaWYgKCFldmVudHMpCi0JCQlkaWUoIm5vbWVtIik7CisJCXN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUgKm5ldmVudHM7CisKKwkJbmV2ZW50cyA9IHJlYWxsb2MoZXZlbnRzLCAoZXZlbnRfY291bnQgKyAxKSAqIHNpemVvZigqZXZlbnRzKSk7CisJCWlmIChuZXZlbnRzID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXZlbnRzID0gbmV2ZW50czsKIAl9CiAJbWVtc2V0KCZldmVudHNbZXZlbnRfY291bnRdLCAwLCBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOwogCWV2ZW50c1tldmVudF9jb3VudF0uZXZlbnRfaWQgPSBpZDsKIAlzdHJuY3B5KGV2ZW50c1tldmVudF9jb3VudF0ubmFtZSwgbmFtZSwgTUFYX0VWRU5UX05BTUUgLSAxKTsKIAlldmVudF9jb3VudCsrOworCXJldHVybiAwOwogfQogCiBjaGFyICpwZXJmX2hlYWRlcl9fZmluZF9ldmVudCh1NjQgaWQpCkBAIC0xNjksMzEgKzE3Nyw0OCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBpbnQgZmQpCi17Ci0jZGVmaW5lIE5BTUVfQUxJR04JNjQKLQlzdHJ1Y3QgZHNvICpwb3M7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgemVyb19idWZbTkFNRV9BTElHTl07CisjZGVmaW5lIE5BTUVfQUxJR04gNjQKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKSB7CitzdGF0aWMgaW50IHdyaXRlX3BhZGRlZChpbnQgZmQsIGNvbnN0IHZvaWQgKmJmLCBzaXplX3QgY291bnQsCisJCQlzaXplX3QgY291bnRfYWxpZ25lZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB6ZXJvX2J1ZltOQU1FX0FMSUdOXTsKKwlpbnQgZXJyID0gZG9fd3JpdGUoZmQsIGJmLCBjb3VudCk7CisKKwlpZiAoIWVycikKKwkJZXJyID0gZG9fd3JpdGUoZmQsIHplcm9fYnVmLCBjb3VudF9hbGlnbmVkIC0gY291bnQpOworCisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBkc29zX19mb3JfZWFjaF93aXRoX2J1aWxkX2lkKHBvcywgaGVhZCkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQlcCisJCWlmICghcG9zLT5oYXNfYnVpbGRfaWQpCQlcCisJCQljb250aW51ZTsJCVwKKwkJZWxzZQorCitzdGF0aWMgaW50IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB1MTYgbWlzYywgaW50IGZkKQoreworCXN0cnVjdCBkc28gKnBvczsKKworCWRzb3NfX2Zvcl9lYWNoX3dpdGhfYnVpbGRfaWQocG9zLCBoZWFkKSB7CiAJCWludCBlcnI7CiAJCXN0cnVjdCBidWlsZF9pZF9ldmVudCBiOwogCQlzaXplX3QgbGVuOwogCi0JCWlmICghcG9zLT5oYXNfYnVpbGRfaWQpCisJCWlmICghcG9zLT5oaXQpCiAJCQljb250aW51ZTsKIAkJbGVuID0gcG9zLT5sb25nX25hbWVfbGVuICsgMTsKIAkJbGVuID0gQUxJR04obGVuLCBOQU1FX0FMSUdOKTsKIAkJbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOwogCQltZW1jcHkoJmIuYnVpbGRfaWQsIHBvcy0+YnVpbGRfaWQsIHNpemVvZihwb3MtPmJ1aWxkX2lkKSk7CisJCWIuaGVhZGVyLm1pc2MgPSBtaXNjOwogCQliLmhlYWRlci5zaXplID0gc2l6ZW9mKGIpICsgbGVuOwogCQllcnIgPSBkb193cml0ZShmZCwgJmIsIHNpemVvZihiKSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gZG9fd3JpdGUoZmQsIHBvcy0+bG9uZ19uYW1lLCBwb3MtPmxvbmdfbmFtZV9sZW4gKyAxKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQllcnIgPSBkb193cml0ZShmZCwgemVyb19idWYsIGxlbiAtIHBvcy0+bG9uZ19uYW1lX2xlbiAtIDEpOworCQllcnIgPSB3cml0ZV9wYWRkZWQoZmQsIHBvcy0+bG9uZ19uYW1lLAorCQkJCSAgIHBvcy0+bG9uZ19uYW1lX2xlbiArIDEsIGxlbik7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0yMDMsMTIgKzIyOCwxNDMgQEAKIAogc3RhdGljIGludCBkc29zX193cml0ZV9idWlsZGlkX3RhYmxlKGludCBmZCkKIHsKLQlpbnQgZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX19rZXJuZWwsIGZkKTsKKwlpbnQgZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX19rZXJuZWwsCisJCQkJCSAgICAgIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMLCBmZCk7CiAJaWYgKGVyciA9PSAwKQotCQllcnIgPSBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoJmRzb3NfX3VzZXIsIGZkKTsKKwkJZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX191c2VyLAorCQkJCQkJICBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsIGZkKTsKIAlyZXR1cm4gZXJyOwogfQogCitpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfa2FsbHN5bXMpCit7CisJY29uc3Qgc2l6ZV90IHNpemUgPSBQQVRIX01BWDsKKwljaGFyICpmaWxlbmFtZSA9IG1hbGxvYyhzaXplKSwKKwkgICAgICpsaW5rbmFtZSA9IG1hbGxvYyhzaXplKSwgKnRhcmdldG5hbWU7CisJaW50IGxlbiwgZXJyID0gLTE7CisKKwlpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5rbmFtZSA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlOworCisJbGVuID0gc25wcmludGYoZmlsZW5hbWUsIHNpemUsICIlcyVzJXMiLAorCQkgICAgICAgZGVidWdkaXIsIGlzX2thbGxzeW1zID8gIi8iIDogIiIsIG5hbWUpOworCWlmIChta2Rpcl9wKGZpbGVuYW1lLCAwNzU1KSkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGZpbGVuYW1lICsgbGVuLCBzaXplb2YoZmlsZW5hbWUpIC0gbGVuLCAiLyVzIiwgc2J1aWxkX2lkKTsKKworCWlmIChhY2Nlc3MoZmlsZW5hbWUsIEZfT0spKSB7CisJCWlmIChpc19rYWxsc3ltcykgeworCQkJIGlmIChjb3B5ZmlsZSgiL3Byb2Mva2FsbHN5bXMiLCBmaWxlbmFtZSkpCisJCQkJZ290byBvdXRfZnJlZTsKKwkJfSBlbHNlIGlmIChsaW5rKG5hbWUsIGZpbGVuYW1lKSAmJiBjb3B5ZmlsZShuYW1lLCBmaWxlbmFtZSkpCisJCQlnb3RvIG91dF9mcmVlOworCX0KKworCWxlbiA9IHNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMiLAorCQkgICAgICAgZGVidWdkaXIsIHNidWlsZF9pZCk7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBYX09LKSAmJiBta2Rpcl9wKGxpbmtuYW1lLCAwNzU1KSkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lICsgbGVuLCBzaXplIC0gbGVuLCAiLyVzIiwgc2J1aWxkX2lkICsgMik7CisJdGFyZ2V0bmFtZSA9IGZpbGVuYW1lICsgc3RybGVuKGRlYnVnZGlyKSAtIDU7CisJbWVtY3B5KHRhcmdldG5hbWUsICIuLi8uLiIsIDUpOworCisJaWYgKHN5bWxpbmsodGFyZ2V0bmFtZSwgbGlua25hbWUpID09IDApCisJCWVyciA9IDA7CitvdXRfZnJlZToKKwlmcmVlKGZpbGVuYW1lKTsKKwlmcmVlKGxpbmtuYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfYihjb25zdCB1OCAqYnVpbGRfaWQsIHNpemVfdCBidWlsZF9pZF9zaXplLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKKwkJCQkgYm9vbCBpc19rYWxsc3ltcykKK3sKKwljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIGJ1aWxkX2lkX3NpemUsIHNidWlsZF9pZCk7CisKKwlyZXR1cm4gYnVpbGRfaWRfY2FjaGVfX2FkZF9zKHNidWlsZF9pZCwgZGVidWdkaXIsIG5hbWUsIGlzX2thbGxzeW1zKTsKK30KKworaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWNvbnN0IHNpemVfdCBzaXplID0gUEFUSF9NQVg7CisJY2hhciAqZmlsZW5hbWUgPSBtYWxsb2Moc2l6ZSksCisJICAgICAqbGlua25hbWUgPSBtYWxsb2Moc2l6ZSk7CisJaW50IGVyciA9IC0xOworCisJaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGlua25hbWUgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkgZGVidWdkaXIsIHNidWlsZF9pZCwgc2J1aWxkX2lkICsgMik7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBGX09LKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmIChyZWFkbGluayhsaW5rbmFtZSwgZmlsZW5hbWUsIHNpemUpIDwgMCkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmICh1bmxpbmsobGlua25hbWUpKQorCQlnb3RvIG91dF9mcmVlOworCisJLyoKKwkgKiBTaW5jZSB0aGUgbGluayBpcyByZWxhdGl2ZSwgd2UgbXVzdCBtYWtlIGl0IGFic29sdXRlOgorCSAqLworCXNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkgZGVidWdkaXIsIHNidWlsZF9pZCwgZmlsZW5hbWUpOworCisJaWYgKHVubGluayhsaW5rbmFtZSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwllcnIgPSAwOworb3V0X2ZyZWU6CisJZnJlZShmaWxlbmFtZSk7CisJZnJlZShsaW5rbmFtZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkc29fX2NhY2hlX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWJvb2wgaXNfa2FsbHN5bXMgPSBzZWxmLT5rZXJuZWwgJiYgc2VsZi0+bG9uZ19uYW1lWzBdICE9ICcvJzsKKworCXJldHVybiBidWlsZF9pZF9jYWNoZV9fYWRkX2Ioc2VsZi0+YnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQkJICAgICBzZWxmLT5sb25nX25hbWUsIGRlYnVnZGlyLCBpc19rYWxsc3ltcyk7Cit9CisKK3N0YXRpYyBpbnQgX19kc29zX19jYWNoZV9idWlsZF9pZHMoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3QgY2hhciAqZGVidWdkaXIpCit7CisJc3RydWN0IGRzbyAqcG9zOworCWludCBlcnIgPSAwOworCisJZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpCisJCWlmIChkc29fX2NhY2hlX2J1aWxkX2lkKHBvcywgZGVidWdkaXIpKQorCQkJZXJyID0gLTE7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRzb3NfX2NhY2hlX2J1aWxkX2lkcyh2b2lkKQoreworCWludCBlcnJfa2VybmVsLCBlcnJfdXNlcjsKKwljaGFyIGRlYnVnZGlyW1BBVEhfTUFYXTsKKworCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMvJXMiLCBnZXRlbnYoIkhPTUUiKSwKKwkJIERFQlVHX0NBQ0hFX0RJUik7CisKKwlpZiAobWtkaXIoZGVidWdkaXIsIDA3NTUpICE9IDAgJiYgZXJybm8gIT0gRUVYSVNUKQorCQlyZXR1cm4gLTE7CisKKwllcnJfa2VybmVsID0gX19kc29zX19jYWNoZV9idWlsZF9pZHMoJmRzb3NfX2tlcm5lbCwgZGVidWdkaXIpOworCWVycl91c2VyICAgPSBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcygmZHNvc19fdXNlciwgZGVidWdkaXIpOworCXJldHVybiBlcnJfa2VybmVsIHx8IGVycl91c2VyID8gLTEgOiAwOworfQorCiBzdGF0aWMgaW50IHBlcmZfaGVhZGVyX19hZGRzX3dyaXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkKQogewogCWludCBucl9zZWN0aW9uczsKQEAgLTIxNyw3ICszNzMsNyBAQAogCXU2NCBzZWNfc3RhcnQ7CiAJaW50IGlkeCA9IDAsIGVycjsKIAotCWlmIChkc29zX19yZWFkX2J1aWxkX2lkcygpKQorCWlmIChkc29zX19yZWFkX2J1aWxkX2lkcyh0cnVlKSkKIAkJcGVyZl9oZWFkZXJfX3NldF9mZWF0KHNlbGYsIEhFQURFUl9CVUlMRF9JRCk7CiAKIAlucl9zZWN0aW9ucyA9IGJpdG1hcF93ZWlnaHQoc2VsZi0+YWRkc19mZWF0dXJlcywgSEVBREVSX0ZFQVRfQklUUyk7CkBAIC0yNTcsNyArNDEzLDkgQEAKIAkJCXByX2RlYnVnKCJmYWlsZWQgdG8gd3JpdGUgYnVpbGRpZCB0YWJsZVxuIik7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9Ci0JCWJ1aWxkaWRfc2VjLT5zaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKSAtIGJ1aWxkaWRfc2VjLT5vZmZzZXQ7CisJCWJ1aWxkaWRfc2VjLT5zaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKSAtCisJCQkJCSAgYnVpbGRpZF9zZWMtPm9mZnNldDsKKwkJZHNvc19fY2FjaGVfYnVpbGRfaWRzKCk7CiAJfQogCiAJbHNlZWsoZmQsIHNlY19zdGFydCwgU0VFS19TRVQpOwpAQCAtMzYwLDMwICs1MTgsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZG9fcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW50IGRvX3JlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBzaXplKQogewogCXdoaWxlIChzaXplKSB7CiAJCWludCByZXQgPSByZWFkKGZkLCBidWYsIHNpemUpOwogCi0JCWlmIChyZXQgPCAwKQotCQkJZGllKCJmYWlsZWQgdG8gcmVhZCIpOwotCQlpZiAocmV0ID09IDApCi0JCQlkaWUoImZhaWxlZCB0byByZWFkOiBtaXNzaW5nIGRhdGEiKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJcmV0dXJuIC0xOwogCiAJCXNpemUgLT0gcmV0OwogCQlidWYgKz0gcmV0OwogCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBlcmZfaGVhZGVyX19nZXRidWZmZXI2NChzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsCisJCQkJICAgIGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoZG9fcmVhZChmZCwgYnVmLCBzaXplKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHNlbGYtPm5lZWRzX3N3YXApCisJCW1lbV9ic3dhcF82NChidWYsIHNpemUpOworCisJcmV0dXJuIDA7CiB9CiAKIGludCBwZXJmX2hlYWRlcl9fcHJvY2Vzc19zZWN0aW9ucyhzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCwKIAkJCQkgIGludCAoKnByb2Nlc3MpKHN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VsZiwKKwkJCQkJCSBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBoLAogCQkJCQkJIGludCBmZWF0LCBpbnQgZmQpKQogewogCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqZmVhdF9zZWM7CiAJaW50IG5yX3NlY3Rpb25zOwogCWludCBzZWNfc2l6ZTsKIAlpbnQgaWR4ID0gMDsKLQlpbnQgZXJyID0gMCwgZmVhdCA9IDE7CisJaW50IGVyciA9IC0xLCBmZWF0ID0gMTsKIAogCW5yX3NlY3Rpb25zID0gYml0bWFwX3dlaWdodChzZWxmLT5hZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKIAlpZiAoIW5yX3NlY3Rpb25zKQpAQCAtMzk3LDMzICs1NjgsNDUgQEAKIAogCWxzZWVrKGZkLCBzZWxmLT5kYXRhX29mZnNldCArIHNlbGYtPmRhdGFfc2l6ZSwgU0VFS19TRVQpOwogCi0JZG9fcmVhZChmZCwgZmVhdF9zZWMsIHNlY19zaXplKTsKKwlpZiAocGVyZl9oZWFkZXJfX2dldGJ1ZmZlcjY0KHNlbGYsIGZkLCBmZWF0X3NlYywgc2VjX3NpemUpKQorCQlnb3RvIG91dF9mcmVlOwogCisJZXJyID0gMDsKIAl3aGlsZSAoaWR4IDwgbnJfc2VjdGlvbnMgJiYgZmVhdCA8IEhFQURFUl9MQVNUX0ZFQVRVUkUpIHsKIAkJaWYgKHBlcmZfaGVhZGVyX19oYXNfZmVhdChzZWxmLCBmZWF0KSkgewogCQkJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWMgPSAmZmVhdF9zZWNbaWR4KytdOwogCi0JCQllcnIgPSBwcm9jZXNzKHNlYywgZmVhdCwgZmQpOworCQkJZXJyID0gcHJvY2VzcyhzZWMsIHNlbGYsIGZlYXQsIGZkKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJCSsrZmVhdDsKIAl9Ci0KK291dF9mcmVlOgogCWZyZWUoZmVhdF9zZWMpOwogCXJldHVybiBlcnI7Ci19OworfQogCiBpbnQgcGVyZl9maWxlX2hlYWRlcl9fcmVhZChzdHJ1Y3QgcGVyZl9maWxlX2hlYWRlciAqc2VsZiwKIAkJCSAgIHN0cnVjdCBwZXJmX2hlYWRlciAqcGgsIGludCBmZCkKIHsKIAlsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCWRvX3JlYWQoZmQsIHNlbGYsIHNpemVvZigqc2VsZikpOwogCi0JaWYgKHNlbGYtPm1hZ2ljICAgICAhPSBQRVJGX01BR0lDIHx8Ci0JICAgIHNlbGYtPmF0dHJfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHBlcmZfZmlsZV9hdHRyKSkKKwlpZiAoZG9fcmVhZChmZCwgc2VsZiwgc2l6ZW9mKCpzZWxmKSkgfHwKKwkgICAgbWVtY21wKCZzZWxmLT5tYWdpYywgX19wZXJmX21hZ2ljLCBzaXplb2Yoc2VsZi0+bWFnaWMpKSkKIAkJcmV0dXJuIC0xOwogCisJaWYgKHNlbGYtPmF0dHJfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHBlcmZfZmlsZV9hdHRyKSkgeworCQl1NjQgYXR0cl9zaXplID0gYnN3YXBfNjQoc2VsZi0+YXR0cl9zaXplKTsKKworCQlpZiAoYXR0cl9zaXplICE9IHNpemVvZihzdHJ1Y3QgcGVyZl9maWxlX2F0dHIpKQorCQkJcmV0dXJuIC0xOworCisJCW1lbV9ic3dhcF82NChzZWxmLCBvZmZzZXRvZihzdHJ1Y3QgcGVyZl9maWxlX2hlYWRlciwKKwkJCQkJICAgIGFkZHNfZmVhdHVyZXMpKTsKKwkJcGgtPm5lZWRzX3N3YXAgPSB0cnVlOworCX0KKwogCWlmIChzZWxmLT5zaXplICE9IHNpemVvZigqc2VsZikpIHsKIAkJLyogU3VwcG9ydCB0aGUgcHJldmlvdXMgZm9ybWF0ICovCiAJCWlmIChzZWxmLT5zaXplID09IG9mZnNldG9mKHR5cGVvZigqc2VsZiksIGFkZHNfZmVhdHVyZXMpKQpAQCAtNDMzLDE5ICs2MTYsMzEgQEAKIAl9CiAKIAltZW1jcHkoJnBoLT5hZGRzX2ZlYXR1cmVzLCAmc2VsZi0+YWRkc19mZWF0dXJlcywKLQkgICAgICAgc2l6ZW9mKHNlbGYtPmFkZHNfZmVhdHVyZXMpKTsKKwkgICAgICAgc2l6ZW9mKHBoLT5hZGRzX2ZlYXR1cmVzKSk7CisJLyoKKwkgKiBGSVhNRTogaGFjayB0aGF0IGFzc3VtZXMgdGhhdCBpZiB3ZSBuZWVkIHN3YXAgdGhlIHBlcmYuZGF0YSBmaWxlCisJICogbWF5IGJlIGNvbWluZyBmcm9tIGFuIGFyY2ggd2l0aCBhIGRpZmZlcmVudCB3b3JkLXNpemUsIGVyZ28gZGlmZmVyZW50CisJICogREVGSU5FX0JJVE1BUCBmb3JtYXQsIGludmVzdGlnYXRlIG1vcmUgbGF0ZXIsIGJ1dCBmb3Igbm93IGl0cyBtb3N0bHkKKwkgKiBzYWZlIHRvIGFzc3VtZSB0aGF0IHdlIGhhdmUgYSBidWlsZC1pZCBzZWN0aW9uLiBUcmFjZSBmaWxlcyBwcm9iYWJseQorCSAqIGhhdmUgc2V2ZXJhbCBvdGhlciBpc3N1ZXMgaW4gdGhpcyByZWFsbSBhbnl3YXkuLi4KKwkgKi8KKwlpZiAocGgtPm5lZWRzX3N3YXApIHsKKwkJbWVtc2V0KCZwaC0+YWRkc19mZWF0dXJlcywgMCwgc2l6ZW9mKHBoLT5hZGRzX2ZlYXR1cmVzKSk7CisJCXBlcmZfaGVhZGVyX19zZXRfZmVhdChwaCwgSEVBREVSX0JVSUxEX0lEKTsKKwl9CiAKIAlwaC0+ZXZlbnRfb2Zmc2V0ID0gc2VsZi0+ZXZlbnRfdHlwZXMub2Zmc2V0OwotCXBoLT5ldmVudF9zaXplCSA9IHNlbGYtPmV2ZW50X3R5cGVzLnNpemU7Ci0JcGgtPmRhdGFfb2Zmc2V0CSA9IHNlbGYtPmRhdGEub2Zmc2V0OworCXBoLT5ldmVudF9zaXplICAgPSBzZWxmLT5ldmVudF90eXBlcy5zaXplOworCXBoLT5kYXRhX29mZnNldCAgPSBzZWxmLT5kYXRhLm9mZnNldDsKIAlwaC0+ZGF0YV9zaXplCSA9IHNlbGYtPmRhdGEuc2l6ZTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwZXJmX2ZpbGVfc2VjdGlvbl9fcHJvY2VzcyhzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnNlbGYsCisJCQkJICAgICAgc3RydWN0IHBlcmZfaGVhZGVyICpwaCwKIAkJCQkgICAgICBpbnQgZmVhdCwgaW50IGZkKQogewotCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPCAwKSB7CisJaWYgKGxzZWVrKGZkLCBzZWxmLT5vZmZzZXQsIFNFRUtfU0VUKSA9PSAob2ZmX3QpLTEpIHsKIAkJcHJfZGVidWcoIkZhaWxlZCB0byBsc2VlayB0byAlTGQgb2Zmc2V0IGZvciBmZWF0dXJlICVkLCAiCiAJCQkgImNvbnRpbnVpbmcuLi5cbiIsIHNlbGYtPm9mZnNldCwgZmVhdCk7CiAJCXJldHVybiAwOwpAQCAtNDU3LDcgKzY1Miw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBIRUFERVJfQlVJTERfSUQ6Ci0JCWlmIChwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoZmQsIHNlbGYtPm9mZnNldCwgc2VsZi0+c2l6ZSkpCisJCWlmIChwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMocGgsIGZkLCBzZWxmLT5vZmZzZXQsIHNlbGYtPnNpemUpKQogCQkJcHJfZGVidWcoIkZhaWxlZCB0byByZWFkIGJ1aWxkaWRzLCBjb250aW51aW5nLi4uXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTQ2OSw3ICs2NjQsNyBAQAogCiBpbnQgcGVyZl9oZWFkZXJfX3JlYWQoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQpCiB7Ci0Jc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgZl9oZWFkZXI7CisJc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIJZl9oZWFkZXI7CiAJc3RydWN0IHBlcmZfZmlsZV9hdHRyCWZfYXR0cjsKIAl1NjQJCQlmX2lkOwogCWludCBucl9hdHRycywgbnJfaWRzLCBpLCBqOwpAQCAtNDg2LDcgKzY4MSw5IEBACiAJCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyOwogCQlvZmZfdCB0bXA7CiAKLQkJZG9fcmVhZChmZCwgJmZfYXR0ciwgc2l6ZW9mKGZfYXR0cikpOworCQlpZiAocGVyZl9oZWFkZXJfX2dldGJ1ZmZlcjY0KHNlbGYsIGZkLCAmZl9hdHRyLCBzaXplb2YoZl9hdHRyKSkpCisJCQlnb3RvIG91dF9lcnJubzsKKwogCQl0bXAgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOwogCiAJCWF0dHIgPSBwZXJmX2hlYWRlcl9hdHRyX19uZXcoJmZfYXR0ci5hdHRyKTsKQEAgLTQ5Nyw3ICs2OTQsOCBAQAogCQlsc2VlayhmZCwgZl9hdHRyLmlkcy5vZmZzZXQsIFNFRUtfU0VUKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgbnJfaWRzOyBqKyspIHsKLQkJCWRvX3JlYWQoZmQsICZmX2lkLCBzaXplb2YoZl9pZCkpOworCQkJaWYgKHBlcmZfaGVhZGVyX19nZXRidWZmZXI2NChzZWxmLCBmZCwgJmZfaWQsIHNpemVvZihmX2lkKSkpCisJCQkJZ290byBvdXRfZXJybm87CiAKIAkJCWlmIChwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoYXR0ciwgZl9pZCkgPCAwKSB7CiAJCQkJcGVyZl9oZWFkZXJfYXR0cl9fZGVsZXRlKGF0dHIpOwpAQCAtNTE3LDcgKzcxNSw5IEBACiAJCWV2ZW50cyA9IG1hbGxvYyhmX2hlYWRlci5ldmVudF90eXBlcy5zaXplKTsKIAkJaWYgKGV2ZW50cyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWRvX3JlYWQoZmQsIGV2ZW50cywgZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSk7CisJCWlmIChwZXJmX2hlYWRlcl9fZ2V0YnVmZmVyNjQoc2VsZiwgZmQsIGV2ZW50cywKKwkJCQkJICAgICBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplKSkKKwkJCWdvdG8gb3V0X2Vycm5vOwogCQlldmVudF9jb3VudCA9ICBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplIC8gc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpOwogCX0KIApAQCAtNTI3LDYgKzcyNyw4IEBACiAKIAlzZWxmLT5mcm96ZW4gPSAxOwogCXJldHVybiAwOworb3V0X2Vycm5vOgorCXJldHVybiAtZXJybm87CiB9CiAKIHU2NCBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmggYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKaW5kZXggZDExOGQwNS4uODJhNmFmNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJldmVudC5oIgogCiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAKQEAgLTUyLDYgKzUzLDcgQEAKIAl1NjQJCQlkYXRhX3NpemU7CiAJdTY0CQkJZXZlbnRfb2Zmc2V0OwogCXU2NAkJCWV2ZW50X3NpemU7CisJYm9vbAkJCW5lZWRzX3N3YXA7CiAJREVDTEFSRV9CSVRNQVAoYWRkc19mZWF0dXJlcywgSEVBREVSX0ZFQVRfQklUUyk7CiB9OwogCkBAIC02NCw3ICs2Niw3IEBACiBpbnQgcGVyZl9oZWFkZXJfX2FkZF9hdHRyKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKIAkJCSAgc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmF0dHIpOwogCi12b2lkIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgcGVyZl9oZWFkZXJfX3B1c2hfZXZlbnQodTY0IGlkLCBjb25zdCBjaGFyICpuYW1lKTsKIGNoYXIgKnBlcmZfaGVhZGVyX19maW5kX2V2ZW50KHU2NCBpZCk7CiAKIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpwZXJmX2hlYWRlcl9hdHRyX19uZXcoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cik7CkBAIC04MCw2ICs4MiwxMSBAQAogCiBpbnQgcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQsCiAJCQkJICBpbnQgKCpwcm9jZXNzKShzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnNlbGYsCisJCQkJCQkgc3RydWN0IHBlcmZfaGVhZGVyICpwaCwKIAkJCQkJCSBpbnQgZmVhdCwgaW50IGZkKSk7CiAKK2ludCBidWlsZF9pZF9jYWNoZV9fYWRkX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKKwkJCSAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBpc19rYWxsc3ltcyk7CitpbnQgYnVpbGRfaWRfY2FjaGVfX3JlbW92ZV9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIpOworCiAjZW5kaWYgLyogX19QRVJGX0hFQURFUl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9oYXNoLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxZjU3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2hhc2guaApAQCAtMCwwICsxLDUgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2hhc2guaCIKKworI2lmbmRlZiBQRVJGX0hBU0hfSAorI2RlZmluZSBQRVJGX0hBU0hfSAorI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDIxYzAyNzQuLmYyNjExNjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xMDEsNSArMTAxLDYgQEAKIAllcHJpbnRmKG4sIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBwcl9kZWJ1ZzIoZm10LCAuLi4pIHByX2RlYnVnTigyLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcHJfZGVidWczKGZtdCwgLi4uKSBwcl9kZWJ1Z04oMywgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX2RlYnVnNChmbXQsIC4uLikgcHJfZGVidWdOKDQsIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwppbmRleCBjNGQ1NWEwLi5lNTA5Y2Q1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCkBAIC01LDYgKzUsMTEgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK2NvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdID0geworCVtNQVBfX0ZVTkNUSU9OXSA9ICJGdW5jdGlvbnMiLAorCVtNQVBfX1ZBUklBQkxFXSA9ICJWYXJpYWJsZXMiLAorfTsKKwogc3RhdGljIGlubGluZSBpbnQgaXNfYW5vbl9tZW1vcnkoY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJcmV0dXJuIHN0cmNtcChmaWxlbmFtZSwgIi8vYW5vbiIpID09IDA7CkBAIC02OCw4ICs3MywxMyBAQAogCQltYXBfX2luaXQoc2VsZiwgdHlwZSwgZXZlbnQtPnN0YXJ0LCBldmVudC0+c3RhcnQgKyBldmVudC0+bGVuLAogCQkJICBldmVudC0+cGdvZmYsIGRzbyk7CiAKLQkJaWYgKHNlbGYtPmRzbyA9PSB2ZHNvIHx8IGFub24pCisJCWlmIChhbm9uKSB7CitzZXRfaWRlbnRpdHk6CiAJCQlzZWxmLT5tYXBfaXAgPSBzZWxmLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CisJCX0gZWxzZSBpZiAoc3RyY21wKGZpbGVuYW1lLCAiW3Zkc29dIikgPT0gMCkgeworCQkJZHNvX19zZXRfbG9hZGVkKGRzbywgc2VsZi0+dHlwZSk7CisJCQlnb3RvIHNldF9pZGVudGl0eTsKKwkJfQogCX0KIAlyZXR1cm4gc2VsZjsKIG91dF9kZWxldGU6CkBAIC0xMDQsOCArMTE0LDcgQEAKIAogI2RlZmluZSBEU09fX0RFTEVURUQgIihkZWxldGVkKSIKIAotaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgbWFwX19sb2FkKHN0cnVjdCBtYXAgKnNlbGYsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJY29uc3QgY2hhciAqbmFtZSA9IHNlbGYtPmRzby0+bG9uZ19uYW1lOwogCWludCBucjsKQEAgLTExMyw3ICsxMjIsNyBAQAogCWlmIChkc29fX2xvYWRlZChzZWxmLT5kc28sIHNlbGYtPnR5cGUpKQogCQlyZXR1cm4gMDsKIAotCW5yID0gZHNvX19sb2FkKHNlbGYtPmRzbywgc2VsZiwgc2Vzc2lvbiwgZmlsdGVyKTsKKwluciA9IGRzb19fbG9hZChzZWxmLT5kc28sIHNlbGYsIGZpbHRlcik7CiAJaWYgKG5yIDwgMCkgewogCQlpZiAoc2VsZi0+ZHNvLT5oYXNfYnVpbGRfaWQpIHsKIAkJCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CkBAIC0xNDQsMjQgKzE1MywyOSBAQAogCiAJCXJldHVybiAtMTsKIAl9CisJLyoKKwkgKiBPbmx5IGFwcGxpZXMgdG8gdGhlIGtlcm5lbCwgYXMgaXRzIHN5bXRhYnMgYXJlbid0IHJlbGF0aXZlIGxpa2UgdGhlCisJICogbW9kdWxlIG9uZXMuCisJICovCisJaWYgKHNlbGYtPmRzby0+a2VybmVsKQorCQltYXBfX3JlbG9jX3ZtbGludXgoc2VsZik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCXU2NCBhZGRyLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCB1NjQgYWRkciwKKwkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCWlmIChtYXBfX2xvYWQoc2VsZiwgc2Vzc2lvbiwgZmlsdGVyKSA8IDApCisJaWYgKG1hcF9fbG9hZChzZWxmLCBmaWx0ZXIpIDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gZHNvX19maW5kX3N5bWJvbChzZWxmLT5kc28sIHNlbGYtPnR5cGUsIGFkZHIpOwogfQogCiBzdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IG1hcCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlpZiAobWFwX19sb2FkKHNlbGYsIHNlc3Npb24sIGZpbHRlcikgPCAwKQorCWlmIChtYXBfX2xvYWQoc2VsZiwgZmlsdGVyKSA8IDApCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKCFkc29fX3NvcnRlZF9ieV9uYW1lKHNlbGYtPmRzbywgc2VsZi0+dHlwZSkpCkBAIC0yMDEsMyArMjE1LDIzIEBACiAJcmV0dXJuIGZwcmludGYoZnAsICIgJUx4LSVMeCAlTHggJXNcbiIsCiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5wZ29mZiwgc2VsZi0+ZHNvLT5uYW1lKTsKIH0KKworLyoKKyAqIG9iamR1bXAgd2FudHMvcmVwb3J0cyBhYnNvbHV0ZSBJUHMgZm9yIEVUX0VYRUMsIGFuZCBSSVBzIGZvciBFVF9EWU4uCisgKiBtYXAtPmRzby0+YWRqdXN0X3N5bWJvbHM9PTEgZm9yIEVUX0VYRUMtbGlrZSBjYXNlcy4KKyAqLwordTY0IG1hcF9fcmlwXzJvYmpkdW1wKHN0cnVjdCBtYXAgKm1hcCwgdTY0IHJpcCkKK3sKKwl1NjQgYWRkciA9IG1hcC0+ZHNvLT5hZGp1c3Rfc3ltYm9scyA/CisJCQltYXAtPnVubWFwX2lwKG1hcCwgcmlwKSA6CS8qIFJJUCAtPiBJUCAqLworCQkJcmlwOworCXJldHVybiBhZGRyOworfQorCit1NjQgbWFwX19vYmpkdW1wXzJpcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBhZGRyKQoreworCXU2NCBpcCA9IG1hcC0+ZHNvLT5hZGp1c3Rfc3ltYm9scyA/CisJCQlhZGRyIDoKKwkJCW1hcC0+dW5tYXBfaXAobWFwLCBhZGRyKTsJLyogUklQIC0+IElQICovCisJcmV0dXJuIGlwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5oIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTYzNjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmgKQEAgLTAsMCArMSw5NCBAQAorI2lmbmRlZiBfX1BFUkZfTUFQX0gKKyNkZWZpbmUgX19QRVJGX01BUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIG1hcF90eXBlIHsKKwlNQVBfX0ZVTkNUSU9OID0gMCwKKwlNQVBfX1ZBUklBQkxFLAorfTsKKworI2RlZmluZSBNQVBfX05SX1RZUEVTIChNQVBfX1ZBUklBQkxFICsgMSkKKworZXh0ZXJuIGNvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdOworCitzdHJ1Y3QgZHNvOworc3RydWN0IHJlZl9yZWxvY19zeW07CitzdHJ1Y3QgbWFwX2dyb3VwczsKKworc3RydWN0IG1hcCB7CisJdW5pb24geworCQlzdHJ1Y3QgcmJfbm9kZQlyYl9ub2RlOworCQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJfTsKKwl1NjQJCQlzdGFydDsKKwl1NjQJCQllbmQ7CisJZW51bSBtYXBfdHlwZQkJdHlwZTsKKwl1NjQJCQlwZ29mZjsKKworCS8qIGlwIC0+IGRzbyByaXAgKi8KKwl1NjQJCQkoKm1hcF9pcCkoc3RydWN0IG1hcCAqLCB1NjQpOworCS8qIGRzbyByaXAgLT4gaXAgKi8KKwl1NjQJCQkoKnVubWFwX2lwKShzdHJ1Y3QgbWFwICosIHU2NCk7CisKKwlzdHJ1Y3QgZHNvCQkqZHNvOworfTsKKworc3RydWN0IGttYXAgeworCXN0cnVjdCByZWZfcmVsb2Nfc3ltCSpyZWZfcmVsb2Nfc3ltOworCXN0cnVjdCBtYXBfZ3JvdXBzCSprbWFwczsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGttYXAgKm1hcF9fa21hcChzdHJ1Y3QgbWFwICpzZWxmKQoreworCXJldHVybiAoc3RydWN0IGttYXAgKikoc2VsZiArIDEpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBtYXBfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgLSBtYXAtPnN0YXJ0ICsgbWFwLT5wZ29mZjsKK30KKworc3RhdGljIGlubGluZSB1NjQgbWFwX191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgKyBtYXAtPnN0YXJ0IC0gbWFwLT5wZ29mZjsKK30KKworc3RhdGljIGlubGluZSB1NjQgaWRlbnRpdHlfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAgX191c2VkLCB1NjQgaXApCit7CisJcmV0dXJuIGlwOworfQorCisKKy8qIHJpcC9pcCA8LT4gYWRkciBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBgb2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9YCAqLwordTY0IG1hcF9fcmlwXzJvYmpkdW1wKHN0cnVjdCBtYXAgKm1hcCwgdTY0IHJpcCk7Cit1NjQgbWFwX19vYmpkdW1wXzJpcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBhZGRyKTsKKworc3RydWN0IHN5bWJvbDsKK3N0cnVjdCBtbWFwX2V2ZW50OworCit0eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworCit2b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCisJICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHBnb2ZmLCBzdHJ1Y3QgZHNvICpkc28pOworc3RydWN0IG1hcCAqbWFwX19uZXcoc3RydWN0IG1tYXBfZXZlbnQgKmV2ZW50LCBlbnVtIG1hcF90eXBlLAorCQkgICAgIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7Cit2b2lkIG1hcF9fZGVsZXRlKHN0cnVjdCBtYXAgKnNlbGYpOworc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKTsKK2ludCBtYXBfX292ZXJsYXAoc3RydWN0IG1hcCAqbCwgc3RydWN0IG1hcCAqcik7CitzaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKTsKKworaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKK3N0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2woc3RydWN0IG1hcCAqc2VsZiwKKwkJCQl1NjQgYWRkciwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitzdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IG1hcCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Cit2b2lkIG1hcF9fZml4dXBfc3RhcnQoc3RydWN0IG1hcCAqc2VsZik7Cit2b2lkIG1hcF9fZml4dXBfZW5kKHN0cnVjdCBtYXAgKnNlbGYpOworCit2b2lkIG1hcF9fcmVsb2Nfdm1saW51eChzdHJ1Y3QgbWFwICpzZWxmKTsKKworI2VuZGlmIC8qIF9fUEVSRl9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IGU1YmMwZmIuLjA1ZDBjNWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTQ1MCw3ICs0NTAsOCBAQAogLyogc3lzICsgJzonICsgZXZlbnQgKyAnOicgKyBmbGFncyovCiAjZGVmaW5lIE1BWF9FVk9QVF9MRU4JKE1BWF9FVkVOVF9MRU5HVEggKiAyICsgMiArIDEyOCkKIHN0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAotcGFyc2Vfc3Vic3lzdGVtX3RyYWNlcG9pbnRfZXZlbnQoY2hhciAqc3lzX25hbWUsIGNoYXIgKmZsYWdzKQorcGFyc2VfbXVsdGlwbGVfdHJhY2Vwb2ludF9ldmVudChjaGFyICpzeXNfbmFtZSwgY29uc3QgY2hhciAqZXZ0X2V4cCwKKwkJCQljaGFyICpmbGFncykKIHsKIAljaGFyIGV2dF9wYXRoW01BWFBBVEhMRU5dOwogCXN0cnVjdCBkaXJlbnQgKmV2dF9lbnQ7CkBAIC00NzQsNiArNDc1LDkgQEAKIAkJICAgIHx8ICFzdHJjbXAoZXZ0X2VudC0+ZF9uYW1lLCAiZmlsdGVyIikpCiAJCQljb250aW51ZTsKIAorCQlpZiAoIXN0cmdsb2JtYXRjaChldnRfZW50LT5kX25hbWUsIGV2dF9leHApKQorCQkJY29udGludWU7CisKIAkJbGVuID0gc25wcmludGYoZXZlbnRfb3B0LCBNQVhfRVZPUFRfTEVOLCAiJXM6JXMlcyVzIiwgc3lzX25hbWUsCiAJCQkgICAgICAgZXZ0X2VudC0+ZF9uYW1lLCBmbGFncyA/ICI6IiA6ICIiLAogCQkJICAgICAgIGZsYWdzID86ICIiKTsKQEAgLTUyMiw5ICs1MjYsMTAgQEAKIAlpZiAoZXZ0X2xlbmd0aCA+PSBNQVhfRVZFTlRfTEVOR1RIKQogCQlyZXR1cm4gRVZUX0ZBSUxFRDsKIAotCWlmICghc3RyY21wKGV2dF9uYW1lLCAiKiIpKSB7CisJaWYgKHN0cnBicmsoZXZ0X25hbWUsICIqPyIpKSB7CiAJCSpzdHJwID0gZXZ0X25hbWUgKyBldnRfbGVuZ3RoOwotCQlyZXR1cm4gcGFyc2Vfc3Vic3lzdGVtX3RyYWNlcG9pbnRfZXZlbnQoc3lzX25hbWUsIGZsYWdzKTsKKwkJcmV0dXJuIHBhcnNlX211bHRpcGxlX3RyYWNlcG9pbnRfZXZlbnQoc3lzX25hbWUsIGV2dF9uYW1lLAorCQkJCQkJICAgICAgIGZsYWdzKTsKIAl9IGVsc2UKIAkJcmV0dXJuIHBhcnNlX3NpbmdsZV90cmFjZXBvaW50X2V2ZW50KHN5c19uYW1lLCBldnRfbmFtZSwKIAkJCQkJCSAgICAgZXZ0X2xlbmd0aCwgZmxhZ3MsCkBAIC03NTMsMTEgKzc1OCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3JlX2V2ZW50X3R5cGUoY29uc3QgY2hhciAqb3JnbmFtZSkKK3N0YXRpYyBpbnQgc3RvcmVfZXZlbnRfdHlwZShjb25zdCBjaGFyICpvcmduYW1lKQogewogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdLCAqYzsKIAlGSUxFICpmaWxlOwotCWludCBpZDsKKwlpbnQgaWQsIG47CiAKIAlzcHJpbnRmKGZpbGVuYW1lLCAiJXMvIiwgZGVidWdmc19wYXRoKTsKIAlzdHJuY2F0KGZpbGVuYW1lLCBvcmduYW1lLCBzdHJsZW4ob3JnbmFtZSkpOwpAQCAtNzY5LDExICs3NzQsMTQgQEAKIAogCWZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKIAlpZiAoIWZpbGUpCi0JCXJldHVybjsKLQlpZiAoZnNjYW5mKGZpbGUsICIlaSIsICZpZCkgPCAxKQotCQlkaWUoImNhbm5vdCBzdG9yZSBldmVudCBJRCIpOworCQlyZXR1cm4gMDsKKwluID0gZnNjYW5mKGZpbGUsICIlaSIsICZpZCk7CiAJZmNsb3NlKGZpbGUpOwotCXBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KGlkLCBvcmduYW1lKTsKKwlpZiAobiA8IDEpIHsKKwkJcHJfZXJyKCJjYW5ub3Qgc3RvcmUgZXZlbnQgSURcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KGlkLCBvcmduYW1lKTsKIH0KIAogaW50IHBhcnNlX2V2ZW50cyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLCBjb25zdCBjaGFyICpzdHIsIGludCB1bnNldCBfX3VzZWQpCkBAIC03ODIsNyArNzkwLDggQEAKIAllbnVtIGV2ZW50X3Jlc3VsdCByZXQ7CiAKIAlpZiAoc3RyY2hyKHN0ciwgJzonKSkKLQkJc3RvcmVfZXZlbnRfdHlwZShzdHIpOworCQlpZiAoc3RvcmVfZXZlbnRfdHlwZShzdHIpIDwgMCkKKwkJCXJldHVybiAtMTsKIAogCWZvciAoOzspIHsKIAkJaWYgKG5yX2NvdW50ZXJzID09IE1BWF9DT1VOVEVSUykKQEAgLTgzNSwxMSArODQ0LDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tdID0gewotCSIiLAogCSJIYXJkd2FyZSBldmVudCIsCiAJIlNvZnR3YXJlIGV2ZW50IiwKIAkiVHJhY2Vwb2ludCBldmVudCIsCiAJIkhhcmR3YXJlIGNhY2hlIGV2ZW50IiwKKwkiUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3IiLAorCSJIYXJkd2FyZSBicmVha3BvaW50IiwKIH07CiAKIC8qCkBAIC04NzIsNyArODgyLDcgQEAKIAkJCXNucHJpbnRmKGV2dF9wYXRoLCBNQVhQQVRITEVOLCAiJXM6JXMiLAogCQkJCSBzeXNfZGlyZW50LmRfbmFtZSwgZXZ0X2RpcmVudC5kX25hbWUpOwogCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsIGV2dF9wYXRoLAotCQkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX1RSQUNFUE9JTlQrMV0pOworCQkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX1RSQUNFUE9JTlRdKTsKIAkJfQogCQljbG9zZWRpcihldnRfZGlyKTsKIAl9CkBAIC04OTIsOSArOTAyLDcgQEAKIAlwcmludGYoIkxpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKTpcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXZlbnRfc3ltYm9scyk7IGkrKywgc3ltcysrKSB7Ci0JCXR5cGUgPSBzeW1zLT50eXBlICsgMTsKLQkJaWYgKHR5cGUgPj0gQVJSQVlfU0laRShldmVudF90eXBlX2Rlc2NyaXB0b3JzKSkKLQkJCXR5cGUgPSAwOworCQl0eXBlID0gc3ltcy0+dHlwZTsKIAogCQlpZiAodHlwZSAhPSBwcmV2X3R5cGUpCiAJCQlwcmludGYoIlxuIik7CkBAIC05MTksMTcgKzkyNywxOSBAQAogCQkJZm9yIChpID0gMDsgaSA8IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWDsgaSsrKSB7CiAJCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsCiAJCQkJCWV2ZW50X2NhY2hlX25hbWUodHlwZSwgb3AsIGkpLAotCQkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzWzRdKTsKKwkJCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfSFdfQ0FDSEVdKTsKIAkJCX0KIAkJfQogCX0KIAogCXByaW50ZigiXG4iKTsKLQlwcmludGYoIiAgJS00MnMgW3JhdyBoYXJkd2FyZSBldmVudCBkZXNjcmlwdG9yXVxuIiwKLQkJInJOTk4iKTsKKwlwcmludGYoIiAgJS00MnMgWyVzXVxuIiwKKwkJInJOTk4iLCBldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9SQVddKTsKIAlwcmludGYoIlxuIik7CiAKLQlwcmludGYoIiAgJS00MnMgW2hhcmR3YXJlIGJyZWFrcG9pbnRdXG4iLCAibWVtOjxhZGRyPls6YWNjZXNzXSIpOworCXByaW50ZigiICAlLTQycyBbJXNdXG4iLAorCQkJIm1lbTo8YWRkcj5bOmFjY2Vzc10iLAorCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfQlJFQUtQT0lOVF0pOwogCXByaW50ZigiXG4iKTsKIAogCXByaW50X3RyYWNlcG9pbnRfZXZlbnRzKCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IGZkZTE3YjAuLjhmMDU2ODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAic3RybGlzdC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgogI2luY2x1ZGUgInBhcnNlLWV2ZW50cy5oIiAgLyogRm9yIGRlYnVnZnNfcGF0aCAqLwogI2luY2x1ZGUgInByb2JlLWV2ZW50LmgiCiAKQEAgLTYyLDYgKzY0LDQyIEBACiAJcmV0dXJuIHJldDsKIH0KIAordm9pZCBwYXJzZV9saW5lX3JhbmdlX2Rlc2MoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpCit7CisJY29uc3QgY2hhciAqcHRyOworCWNoYXIgKnRtcDsKKwkvKgorCSAqIDxTeW50YXg+CisJICogU1JDOlNMTlsrTlVNfC1FTE5dCisJICogRlVOQ1s6U0xOWytOVU18LUVMTl1dCisJICovCisJcHRyID0gc3RyY2hyKGFyZywgJzonKTsKKwlpZiAocHRyKSB7CisJCWxyLT5zdGFydCA9ICh1bnNpZ25lZCBpbnQpc3RydG91bChwdHIgKyAxLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXAgPT0gJysnKQorCQkJbHItPmVuZCA9IGxyLT5zdGFydCArICh1bnNpZ25lZCBpbnQpc3RydG91bCh0bXAgKyAxLAorCQkJCQkJCQkgICAgJnRtcCwgMCk7CisJCWVsc2UgaWYgKCp0bXAgPT0gJy0nKQorCQkJbHItPmVuZCA9ICh1bnNpZ25lZCBpbnQpc3RydG91bCh0bXAgKyAxLCAmdG1wLCAwKTsKKwkJZWxzZQorCQkJbHItPmVuZCA9IDA7CisJCXByX2RlYnVnKCJMaW5lIHJhbmdlIGlzICV1IHRvICV1XG4iLCBsci0+c3RhcnQsIGxyLT5lbmQpOworCQlpZiAobHItPmVuZCAmJiBsci0+c3RhcnQgPiBsci0+ZW5kKQorCQkJc2VtYW50aWNfZXJyb3IoIlN0YXJ0IGxpbmUgbXVzdCBiZSBzbWFsbGVyIgorCQkJCSAgICAgICAiIHRoYW4gZW5kIGxpbmUuIik7CisJCWlmICgqdG1wICE9ICdcMCcpCisJCQlzZW1hbnRpY19lcnJvcigiVGFpbGluZyB3aXRoIGludmFsaWQgY2hhcmFjdGVyICclZCcuIiwKKwkJCQkgICAgICAgKnRtcCk7CisJCXRtcCA9IHN0cm5kdXAoYXJnLCAocHRyIC0gYXJnKSk7CisJfSBlbHNlCisJCXRtcCA9IHN0cmR1cChhcmcpOworCisJaWYgKHN0cmNocih0bXAsICcuJykpCisJCWxyLT5maWxlID0gdG1wOworCWVsc2UKKwkJbHItPmZ1bmN0aW9uID0gdG1wOworfQorCiAvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLwogc3RhdGljIGJvb2wgY2hlY2tfZXZlbnRfbmFtZShjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMzcwLDcgKzQwOCw3IEBACiAJaWYgKHJldCA8IDApIHsKIAkJaWYgKGVycm5vID09IEVOT0VOVCkKIAkJCWRpZSgia3Byb2JlX2V2ZW50cyBmaWxlIGRvZXMgbm90IGV4aXN0IC0iCi0JCQkgICAgIiBwbGVhc2UgcmVidWlsZCB3aXRoIENPTkZJR19LUFJPQkVfVFJBQ0VSLiIpOworCQkJICAgICIgcGxlYXNlIHJlYnVpbGQgd2l0aCBDT05GSUdfS1BST0JFX0VWRU5ULiIpOwogCQllbHNlCiAJCQlkaWUoIkNvdWxkIG5vdCBvcGVuIGtwcm9iZV9ldmVudHMgZmlsZTogJXMiLAogCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CkBAIC00NTcsNiArNDk1LDggQEAKIAlzdHJ1Y3Qgc3RybGlzdCAqcmF3bGlzdDsKIAlzdHJ1Y3Qgc3RyX25vZGUgKmVudDsKIAorCXNldHVwX3BhZ2VyKCk7CisKIAltZW1zZXQoJnBwLCAwLCBzaXplb2YocHApKTsKIAlmZCA9IG9wZW5fa3Byb2JlX2V2ZW50cyhPX1JET05MWSwgMCk7CiAJcmF3bGlzdCA9IGdldF90cmFjZV9rcHJvYmVfZXZlbnRfcmF3bGlzdChmZCk7CkBAIC02NzgsMyArNzE4LDY2IEBACiAJY2xvc2UoZmQpOwogfQogCisjZGVmaW5lIExJTkVCVUZfU0laRSAyNTYKKworc3RhdGljIHZvaWQgc2hvd19vbmVfbGluZShGSUxFICpmcCwgdW5zaWduZWQgaW50IGwsIGJvb2wgc2tpcCwgYm9vbCBzaG93X251bSkKK3sKKwljaGFyIGJ1ZltMSU5FQlVGX1NJWkVdOworCWNvbnN0IGNoYXIgKmNvbG9yID0gUEVSRl9DT0xPUl9CTFVFOworCisJaWYgKGZnZXRzKGJ1ZiwgTElORUJVRl9TSVpFLCBmcCkgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKwlpZiAoIXNraXApIHsKKwkJaWYgKHNob3dfbnVtKQorCQkJZnByaW50ZihzdGRvdXQsICIlN3UgICVzIiwgbCwgYnVmKTsKKwkJZWxzZQorCQkJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiICAgICAgICAgJXMiLCBidWYpOworCX0KKworCXdoaWxlIChzdHJsZW4oYnVmKSA9PSBMSU5FQlVGX1NJWkUgLSAxICYmCisJICAgICAgIGJ1ZltMSU5FQlVGX1NJWkUgLSAyXSAhPSAnXG4nKSB7CisJCWlmIChmZ2V0cyhidWYsIExJTkVCVUZfU0laRSwgZnApID09IE5VTEwpCisJCQlnb3RvIGVycm9yOworCQlpZiAoIXNraXApIHsKKwkJCWlmIChzaG93X251bSkKKwkJCQlmcHJpbnRmKHN0ZG91dCwgIiVzIiwgYnVmKTsKKwkJCWVsc2UKKwkJCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgY29sb3IsICIlcyIsIGJ1Zik7CisJCX0KKwl9CisJcmV0dXJuOworZXJyb3I6CisJaWYgKGZlb2YoZnApKQorCQlkaWUoIlNvdXJjZSBmaWxlIGlzIHNob3J0ZXIgdGhhbiBleHBlY3RlZC4iKTsKKwllbHNlCisJCWRpZSgiRmlsZSByZWFkIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3ZvaWQgc2hvd19saW5lX3JhbmdlKHN0cnVjdCBsaW5lX3JhbmdlICpscikKK3sKKwl1bnNpZ25lZCBpbnQgbCA9IDE7CisJc3RydWN0IGxpbmVfbm9kZSAqbG47CisJRklMRSAqZnA7CisKKwlzZXR1cF9wYWdlcigpOworCisJaWYgKGxyLT5mdW5jdGlvbikKKwkJZnByaW50ZihzdGRvdXQsICI8JXM6JWQ+XG4iLCBsci0+ZnVuY3Rpb24sCisJCQlsci0+c3RhcnQgLSBsci0+b2Zmc2V0KTsKKwllbHNlCisJCWZwcmludGYoc3Rkb3V0LCAiPCVzOiVkPlxuIiwgbHItPmZpbGUsIGxyLT5zdGFydCk7CisKKwlmcCA9IGZvcGVuKGxyLT5wYXRoLCAiciIpOworCWlmIChmcCA9PSBOVUxMKQorCQlkaWUoIkZhaWxlZCB0byBvcGVuICVzOiAlcyIsIGxyLT5wYXRoLCBzdHJlcnJvcihlcnJubykpOworCS8qIFNraXAgdG8gc3RhcnRpbmcgbGluZSBudW1iZXIgKi8KKwl3aGlsZSAobCA8IGxyLT5zdGFydCkKKwkJc2hvd19vbmVfbGluZShmcCwgbCsrLCB0cnVlLCBmYWxzZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxuLCAmbHItPmxpbmVfbGlzdCwgbGlzdCkgeworCQl3aGlsZSAobG4tPmxpbmUgPiBsKQorCQkJc2hvd19vbmVfbGluZShmcCwgKGwrKykgLSBsci0+b2Zmc2V0LCBmYWxzZSwgZmFsc2UpOworCQlzaG93X29uZV9saW5lKGZwLCAobCsrKSAtIGxyLT5vZmZzZXQsIGZhbHNlLCB0cnVlKTsKKwl9CisJZmNsb3NlKGZwKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKaW5kZXggN2YxZDQ5OS4uNzExMjg3ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAicHJvYmUtZmluZGVyLmgiCiAjaW5jbHVkZSAic3RybGlzdC5oIgogCitleHRlcm4gdm9pZCBwYXJzZV9saW5lX3JhbmdlX2Rlc2MoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpOwogZXh0ZXJuIHZvaWQgcGFyc2VfcGVyZl9wcm9iZV9ldmVudChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHAsCiAJCQkJICAgYm9vbCAqbmVlZF9kd2FyZik7CiBleHRlcm4gaW50IHN5bnRoZXNpemVfcGVyZl9wcm9iZV9wb2ludChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKTsKQEAgLTE1LDYgKzE2LDcgQEAKIAkJCQkgICAgYm9vbCBmb3JjZV9hZGQpOwogZXh0ZXJuIHZvaWQgZGVsX3RyYWNlX2twcm9iZV9ldmVudHMoc3RydWN0IHN0cmxpc3QgKmRlbGxpc3QpOwogZXh0ZXJuIHZvaWQgc2hvd19wZXJmX3Byb2JlX2V2ZW50cyh2b2lkKTsKK2V4dGVybiB2b2lkIHNob3dfbGluZV9yYW5nZShzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpOwogCiAvKiBNYXhpbXVtIGluZGV4IG51bWJlciBvZiBldmVudC1uYW1lIHBvc3RmaXggKi8KICNkZWZpbmUgTUFYX0VWRU5UX0lOREVYCTEwMjQKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwppbmRleCA0Yjg1MmMwLi4xYjIxMjRkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCkBAIC0xNDAsNiArMTQwLDMxIEBACiAJcmV0dXJuIGZvdW5kOwogfQogCitzdGF0aWMgaW50IGN1X2dldF9maWxlbmFtZShEd2FyZl9EaWUgY3VfZGllLCBEd2FyZl9VbnNpZ25lZCBmbm8sIGNoYXIgKipidWYpCit7CisJRHdhcmZfU2lnbmVkIGNudCwgaTsKKwljaGFyICoqc3JjczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghYnVmIHx8ICFmbm8pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZHdhcmZfc3JjZmlsZXMoY3VfZGllLCAmc3JjcywgJmNudCwgJl9fZHdfZXJyb3IpOworCWlmIChyZXQgPT0gRFdfRExWX09LKSB7CisJCWlmICgoRHdhcmZfVW5zaWduZWQpY250ID4gZm5vIC0gMSkgeworCQkJKmJ1ZiA9IHN0cmR1cChzcmNzW2ZubyAtIDFdKTsKKwkJCXJldCA9IDA7CisJCQlwcl9kZWJ1ZygiZm91bmQgZmlsZW5hbWU6ICVzXG4iLCAqYnVmKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAtRU5PRU5UOworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCisJCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3NbaV0sIERXX0RMQV9TVFJJTkcpOworCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3MsIERXX0RMQV9MSVNUKTsKKwl9IGVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBDb21wYXJlIGRpZW5hbWUgYW5kIHRuYW1lICovCiBzdGF0aWMgaW50IGRpZV9jb21wYXJlX25hbWUoRHdhcmZfRGllIGR3X2RpZSwgY29uc3QgY2hhciAqdG5hbWUpCiB7CkBAIC00MDIsMTEgKzQyNywxMSBAQAogCX0gZWxzZSBpZiAob3AgPT0gRFdfT1BfcmVneCkgewogCQlyZWduID0gbG9jLT5scl9udW1iZXI7CiAJfSBlbHNlCi0JCWRpZSgiRHdhcmZfT1AgJWQgaXMgbm90IHN1cHBvcnRlZC5cbiIsIG9wKTsKKwkJZGllKCJEd2FyZl9PUCAlZCBpcyBub3Qgc3VwcG9ydGVkLiIsIG9wKTsKIAogCXJlZ3MgPSBnZXRfYXJjaF9yZWdzdHIocmVnbik7CiAJaWYgKCFyZWdzKQotCQlkaWUoIiVsbGQgZXhjZWVkcyBtYXggcmVnaXN0ZXIgbnVtYmVyLlxuIiwgcmVnbik7CisJCWRpZSgiJWxsZCBleGNlZWRzIG1heCByZWdpc3RlciBudW1iZXIuIiwgcmVnbik7CiAKIAlpZiAoZGVyZWYpCiAJCXJldCA9IHNucHJpbnRmKHBmLT5idWYsIHBmLT5sZW4sCkBAIC00MzgsNyArNDYzLDcgQEAKIAlyZXR1cm4gOwogZXJyb3I6CiAJZGllKCJGYWlsZWQgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgJXMgYXQgdGhpcyBhZGRyZXNzLlxuIgotCSAgICAiIFBlcmhhcHMsIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuXG4iLCBwZi0+dmFyKTsKKwkgICAgIiBQZXJoYXBzLCBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LiIsIHBmLT52YXIpOwogfQogCiBzdGF0aWMgaW50IHZhcmlhYmxlX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCkBAIC00NzYsNyArNTAxLDcgQEAKIAkvKiBTZWFyY2ggY2hpbGQgZGllIGZvciBsb2NhbCB2YXJpYWJsZXMgYW5kIHBhcmFtZXRlcnMuICovCiAJcmV0ID0gc2VhcmNoX2RpZV9mcm9tX2NoaWxkcmVuKHNwX2RpZSwgdmFyaWFibGVfY2FsbGJhY2ssIHBmKTsKIAlpZiAoIXJldCkKLQkJZGllKCJGYWlsZWQgdG8gZmluZCAnJXMnIGluIHRoaXMgZnVuY3Rpb24uXG4iLCBwZi0+dmFyKTsKKwkJZGllKCJGYWlsZWQgdG8gZmluZCAnJXMnIGluIHRoaXMgZnVuY3Rpb24uIiwgcGYtPnZhcik7CiB9CiAKIC8qIEdldCBhIGZyYW1lIGJhc2Ugb24gdGhlIGFkZHJlc3MgKi8KQEAgLTU2Nyw3ICs1OTIsNyBAQAogfQogCiAvKiBGaW5kIHByb2JlIHBvaW50IGZyb20gaXRzIGxpbmUgbnVtYmVyICovCi1zdGF0aWMgdm9pZCBmaW5kX2J5X2xpbmUoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCitzdGF0aWMgdm9pZCBmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7CiAJRHdhcmZfU2lnbmVkIGNudCwgaSwgY2xtOwogCUR3YXJmX0xpbmUgKmxpbmVzOwpAQCAtNjAyLDcgKzYyNyw3IEBACiAJCXJldCA9IHNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihwZi0+Y3VfZGllLAogCQkJCQkgICAgICAgcHJvYmVhZGRyX2NhbGxiYWNrLCBwZik7CiAJCWlmIChyZXQgPT0gMCkKLQkJCWRpZSgiUHJvYmUgcG9pbnQgaXMgbm90IGZvdW5kIGluIHN1YnByb2dyYW1zLlxuIik7CisJCQlkaWUoIlByb2JlIHBvaW50IGlzIG5vdCBmb3VuZCBpbiBzdWJwcm9ncmFtcy4iKTsKIAkJLyogQ29udGludWluZywgYmVjYXVzZSB0YXJnZXQgbGluZSBtaWdodCBiZSBpbmxpbmVkLiAqLwogCX0KIAlkd2FyZl9zcmNsaW5lc19kZWFsbG9jKF9fZHdfZGVidWcsIGxpbmVzLCBjbnQpOwpAQCAtNjI2LDcgKzY1MSw3IEBACiAJCQkJcGYtPmZubyA9IGRpZV9nZXRfZGVjbF9maWxlKGRsaW5rLT5kaWUpOwogCQkJCXBmLT5sbm8gPSBkaWVfZ2V0X2RlY2xfbGluZShkbGluay0+ZGllKQogCQkJCQkgKyBwcC0+bGluZTsKLQkJCQlmaW5kX2J5X2xpbmUocGYpOworCQkJCWZpbmRfcHJvYmVfcG9pbnRfYnlfbGluZShwZik7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlpZiAoZGllX2lubGluZWRfc3VicHJvZ3JhbShkbGluay0+ZGllKSkgewpAQCAtNjYxLDcgKzY4Niw3IEBACiAJCQkJICAgICFkaWVfaW5saW5lZF9zdWJwcm9ncmFtKGxrLT5kaWUpKQogCQkJCQlnb3RvIGZvdW5kOwogCQkJfQotCQkJZGllKCJGYWlsZWQgdG8gZmluZCByZWFsIHN1YnByb2dyYW0uXG4iKTsKKwkJCWRpZSgiRmFpbGVkIHRvIGZpbmQgcmVhbCBzdWJwcm9ncmFtLiIpOwogZm91bmQ6CiAJCQkvKiBHZXQgb2Zmc2V0IGZyb20gc3VicHJvZ3JhbSAqLwogCQkJcmV0ID0gZGllX3dpdGhpbl9zdWJwcm9ncmFtKGxrLT5kaWUsIHBmLT5hZGRyLCAmb2Zmcyk7CkBAIC02NzMsNyArNjk4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZmluZF9ieV9mdW5jKHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQorc3RhdGljIHZvaWQgZmluZF9wcm9iZV9wb2ludF9ieV9mdW5jKHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewogCXNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihwZi0+Y3VfZGllLCBwcm9iZWZ1bmNfY2FsbGJhY2ssIHBmKTsKIH0KQEAgLTcxNCwxMCArNzM5LDEwIEBACiAJCQlpZiAocmV0ID09IERXX0RMVl9OT19FTlRSWSkKIAkJCQlwZi5jdV9iYXNlID0gMDsKIAkJCWlmIChwcC0+ZnVuY3Rpb24pCi0JCQkJZmluZF9ieV9mdW5jKCZwZik7CisJCQkJZmluZF9wcm9iZV9wb2ludF9ieV9mdW5jKCZwZik7CiAJCQllbHNlIHsKIAkJCQlwZi5sbm8gPSBwcC0+bGluZTsKLQkJCQlmaW5kX2J5X2xpbmUoJnBmKTsKKwkJCQlmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUoJnBmKTsKIAkJCX0KIAkJfQogCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHBmLmN1X2RpZSwgRFdfRExBX0RJRSk7CkBAIC03MjgsMyArNzUzLDE1OSBAQAogCXJldHVybiBwcC0+Zm91bmQ7CiB9CiAKKworc3RhdGljIHZvaWQgbGluZV9yYW5nZV9hZGRfbGluZShzdHJ1Y3QgbGluZV9yYW5nZSAqbHIsIHVuc2lnbmVkIGludCBsaW5lKQoreworCXN0cnVjdCBsaW5lX25vZGUgKmxuOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwkvKiBSZXZlcnNlIHNlYXJjaCwgYmVjYXVzZSBuZXcgbGluZSB3aWxsIGJlIHRoZSBsYXN0IG9uZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShsbiwgJmxyLT5saW5lX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGxuLT5saW5lIDwgbGluZSkgeworCQkJcCA9ICZsbi0+bGlzdDsKKwkJCWdvdG8gZm91bmQ7CisJCX0gZWxzZSBpZiAobG4tPmxpbmUgPT0gbGluZSkJLyogQWxyZWFkeSBleGlzdCAqLworCQkJcmV0dXJuIDsKKwl9CisJLyogTGlzdCBpcyBlbXB0eSwgb3IgdGhlIHNtYWxsZXN0IGVudHJ5ICovCisJcCA9ICZsci0+bGluZV9saXN0OworZm91bmQ6CisJcHJfZGVidWcoIkRlYnVnOiBhZGQgYSBsaW5lICV1XG4iLCBsaW5lKTsKKwlsbiA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGxpbmVfbm9kZSkpOworCURJRV9JRihsbiA9PSBOVUxMKTsKKwlsbi0+bGluZSA9IGxpbmU7CisJSU5JVF9MSVNUX0hFQUQoJmxuLT5saXN0KTsKKwlsaXN0X2FkZCgmbG4tPmxpc3QsIHApOworfQorCisvKiBGaW5kIGxpbmUgcmFuZ2UgZnJvbSBpdHMgbGluZSBudW1iZXIgKi8KK3N0YXRpYyB2b2lkIGZpbmRfbGluZV9yYW5nZV9ieV9saW5lKHN0cnVjdCBsaW5lX2ZpbmRlciAqbGYpCit7CisJRHdhcmZfU2lnbmVkIGNudCwgaTsKKwlEd2FyZl9MaW5lICpsaW5lczsKKwlEd2FyZl9VbnNpZ25lZCBsaW5lbm8gPSAwOworCUR3YXJmX1Vuc2lnbmVkIGZubzsKKwlEd2FyZl9BZGRyIGFkZHI7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX3NyY2xpbmVzKGxmLT5jdV9kaWUsICZsaW5lcywgJmNudCwgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlyZXQgPSBkd2FyZl9saW5lX3NyY2ZpbGVubyhsaW5lc1tpXSwgJmZubywgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCWlmIChmbm8gIT0gbGYtPmZubykKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGR3YXJmX2xpbmVubyhsaW5lc1tpXSwgJmxpbmVubywgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCWlmIChsZi0+bG5vX3MgPiBsaW5lbm8gfHwgbGYtPmxub19lIDwgbGluZW5vKQorCQkJY29udGludWU7CisKKwkJLyogRmlsdGVyIGxpbmUgaW4gdGhlIGZ1bmN0aW9uIGFkZHJlc3MgcmFuZ2UgKi8KKwkJaWYgKGxmLT5hZGRyX3MgJiYgbGYtPmFkZHJfZSkgeworCQkJcmV0ID0gZHdhcmZfbGluZWFkZHIobGluZXNbaV0sICZhZGRyLCAmX19kd19lcnJvcik7CisJCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCQlpZiAobGYtPmFkZHJfcyA+IGFkZHIgfHwgbGYtPmFkZHJfZSA8PSBhZGRyKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWxpbmVfcmFuZ2VfYWRkX2xpbmUobGYtPmxyLCAodW5zaWduZWQgaW50KWxpbmVubyk7CisJfQorCWR3YXJmX3NyY2xpbmVzX2RlYWxsb2MoX19kd19kZWJ1ZywgbGluZXMsIGNudCk7CisJaWYgKCFsaXN0X2VtcHR5KCZsZi0+bHItPmxpbmVfbGlzdCkpCisJCWxmLT5mb3VuZCA9IDE7Cit9CisKKy8qIFNlYXJjaCBmdW5jdGlvbiBmcm9tIGZ1bmN0aW9uIG5hbWUgKi8KK3N0YXRpYyBpbnQgbGluZWZ1bmNfY2FsbGJhY2soc3RydWN0IGRpZV9saW5rICpkbGluaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbGluZV9maW5kZXIgKmxmID0gKHN0cnVjdCBsaW5lX2ZpbmRlciAqKWRhdGE7CisJc3RydWN0IGxpbmVfcmFuZ2UgKmxyID0gbGYtPmxyOworCUR3YXJmX0hhbGYgdGFnOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl90YWcoZGxpbmstPmRpZSwgJnRhZywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwlpZiAodGFnID09IERXX1RBR19zdWJwcm9ncmFtICYmCisJICAgIGRpZV9jb21wYXJlX25hbWUoZGxpbmstPmRpZSwgbHItPmZ1bmN0aW9uKSA9PSAwKSB7CisJCS8qIEdldCB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGlzIGZ1bmN0aW9uICovCisJCXJldCA9IGR3YXJmX2hpZ2hwYyhkbGluay0+ZGllLCAmbGYtPmFkZHJfZSwgJl9fZHdfZXJyb3IpOworCQlpZiAocmV0ID09IERXX0RMVl9PSykKKwkJCXJldCA9IGR3YXJmX2xvd3BjKGRsaW5rLT5kaWUsICZsZi0+YWRkcl9zLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpIHsKKwkJCWxmLT5hZGRyX3MgPSAwOworCQkJbGYtPmFkZHJfZSA9IDA7CisJCX0KKworCQlsZi0+Zm5vID0gZGllX2dldF9kZWNsX2ZpbGUoZGxpbmstPmRpZSk7CisJCWxyLT5vZmZzZXQgPSBkaWVfZ2V0X2RlY2xfbGluZShkbGluay0+ZGllKTs7CisJCWxmLT5sbm9fcyA9IGxyLT5vZmZzZXQgKyBsci0+c3RhcnQ7CisJCWlmICghbHItPmVuZCkKKwkJCWxmLT5sbm9fZSA9IChEd2FyZl9VbnNpZ25lZCktMTsKKwkJZWxzZQorCQkJbGYtPmxub19lID0gbHItPm9mZnNldCArIGxyLT5lbmQ7CisJCWxyLT5zdGFydCA9IGxmLT5sbm9fczsKKwkJbHItPmVuZCA9IGxmLT5sbm9fZTsKKwkJZmluZF9saW5lX3JhbmdlX2J5X2xpbmUobGYpOworCQkvKiBJZiB3ZSBmaW5kIGEgdGFyZ2V0IGZ1bmN0aW9uLCB0aGlzIHNob3VsZCBiZSBlbmQuICovCisJCWxmLT5mb3VuZCA9IDE7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmluZF9saW5lX3JhbmdlX2J5X2Z1bmMoc3RydWN0IGxpbmVfZmluZGVyICpsZikKK3sKKwlzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4obGYtPmN1X2RpZSwgbGluZWZ1bmNfY2FsbGJhY2ssIGxmKTsKK30KKworaW50IGZpbmRfbGluZV9yYW5nZShpbnQgZmQsIHN0cnVjdCBsaW5lX3JhbmdlICpscikKK3sKKwlEd2FyZl9IYWxmIGFkZHJfc2l6ZSA9IDA7CisJRHdhcmZfVW5zaWduZWQgbmV4dF9jdWggPSAwOworCWludCByZXQ7CisJc3RydWN0IGxpbmVfZmluZGVyIGxmID0gey5sciA9IGxyfTsKKworCXJldCA9IGR3YXJmX2luaXQoZmQsIERXX0RMQ19SRUFELCAwLCAwLCAmX19kd19kZWJ1ZywgJl9fZHdfZXJyb3IpOworCWlmIChyZXQgIT0gRFdfRExWX09LKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXdoaWxlICghbGYuZm91bmQpIHsKKwkJLyogU2VhcmNoIENVIChDb21waWxhdGlvbiBVbml0KSAqLworCQlyZXQgPSBkd2FyZl9uZXh0X2N1X2hlYWRlcihfX2R3X2RlYnVnLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJJmFkZHJfc2l6ZSwgJm5leHRfY3VoLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpCisJCQlicmVhazsKKworCQkvKiBHZXQgdGhlIERJRShEZWJ1Z2dpbmcgSW5mb3JtYXRpb24gRW50cnkpIG9mIHRoaXMgQ1UgKi8KKwkJcmV0ID0gZHdhcmZfc2libGluZ29mKF9fZHdfZGVidWcsIDAsICZsZi5jdV9kaWUsICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCisJCS8qIENoZWNrIGlmIHRhcmdldCBmaWxlIGlzIGluY2x1ZGVkLiAqLworCQlpZiAobHItPmZpbGUpCisJCQlsZi5mbm8gPSBjdV9maW5kX2ZpbGVubyhsZi5jdV9kaWUsIGxyLT5maWxlKTsKKworCQlpZiAoIWxyLT5maWxlIHx8IGxmLmZubykgeworCQkJaWYgKGxyLT5mdW5jdGlvbikKKwkJCQlmaW5kX2xpbmVfcmFuZ2VfYnlfZnVuYygmbGYpOworCQkJZWxzZSB7CisJCQkJbGYubG5vX3MgPSBsci0+c3RhcnQ7CisJCQkJaWYgKCFsci0+ZW5kKQorCQkJCQlsZi5sbm9fZSA9IChEd2FyZl9VbnNpZ25lZCktMTsKKwkJCQllbHNlCisJCQkJCWxmLmxub19lID0gbHItPmVuZDsKKwkJCQlmaW5kX2xpbmVfcmFuZ2VfYnlfbGluZSgmbGYpOworCQkJfQorCQkJLyogR2V0IHRoZSByZWFsIGZpbGUgcGF0aCAqLworCQkJaWYgKGxmLmZvdW5kKQorCQkJCWN1X2dldF9maWxlbmFtZShsZi5jdV9kaWUsIGxmLmZubywgJmxyLT5wYXRoKTsKKwkJfQorCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGxmLmN1X2RpZSwgRFdfRExBX0RJRSk7CisJfQorCXJldCA9IGR3YXJmX2ZpbmlzaChfX2R3X2RlYnVnLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCXJldHVybiBsZi5mb3VuZDsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCmluZGV4IGE0MDg2YWFkLi45NzJiMzg2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfUFJPQkVfRklOREVSX0gKICNkZWZpbmUgX1BST0JFX0ZJTkRFUl9ICiAKKyNpbmNsdWRlICJ1dGlsLmgiCisKICNkZWZpbmUgTUFYX1BBVEhfTEVOCQkgMjU2CiAjZGVmaW5lIE1BWF9QUk9CRV9CVUZGRVIJMTAyNAogI2RlZmluZSBNQVhfUFJPQkVTCQkgMTI4CkBAIC0zMiw4ICszNCwyNiBAQAogCWNoYXIJCQkqcHJvYmVzW01BWF9QUk9CRVNdOwkvKiBPdXRwdXQgYnVmZmVycyAod2lsbCBiZSBhbGxvY2F0ZWQpKi8KIH07CiAKKy8qIExpbmUgbnVtYmVyIGNvbnRhaW5lciAqLworc3RydWN0IGxpbmVfbm9kZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXVuc2lnbmVkIGludAkJbGluZTsKK307CisKKy8qIExpbmUgcmFuZ2UgKi8KK3N0cnVjdCBsaW5lX3JhbmdlIHsKKwljaGFyCQkJKmZpbGU7CQkJLyogRmlsZSBuYW1lICovCisJY2hhcgkJCSpmdW5jdGlvbjsJCS8qIEZ1bmN0aW9uIG5hbWUgKi8KKwl1bnNpZ25lZCBpbnQJCXN0YXJ0OwkJCS8qIFN0YXJ0IGxpbmUgbnVtYmVyICovCisJdW5zaWduZWQgaW50CQllbmQ7CQkJLyogRW5kIGxpbmUgbnVtYmVyICovCisJdW5zaWduZWQgaW50CQlvZmZzZXQ7CQkJLyogU3RhcnQgbGluZSBvZmZzZXQgKi8KKwljaGFyCQkJKnBhdGg7CQkJLyogUmVhbCBwYXRoIG5hbWUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbmVfbGlzdDsJCS8qIFZpc2libGUgbGluZXMgKi8KK307CisKICNpZm5kZWYgTk9fTElCRFdBUkYKIGV4dGVybiBpbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CitleHRlcm4gaW50IGZpbmRfbGluZV9yYW5nZShpbnQgZmQsIHN0cnVjdCBsaW5lX3JhbmdlICpscik7CiAKIC8qIFdvcmthcm91bmQgZm9yIHVuZGVmaW5lZCBfTUlQU19TWkxPTkcgYnVnIGluIGxpYmR3YXJmLmg6ICovCiAjaWZuZGVmIF9NSVBTX1NaTE9ORwpAQCAtNjAsNiArODAsMTkgQEAKIAljaGFyCQkJKmJ1ZjsJCQkvKiBDdXJyZW50IG91dHB1dCBidWZmZXIgKi8KIAlpbnQJCQlsZW47CQkJLyogTGVuZ3RoIG9mIG91dHB1dCBidWZmZXIgKi8KIH07CisKK3N0cnVjdCBsaW5lX2ZpbmRlciB7CisJc3RydWN0IGxpbmVfcmFuZ2UJKmxyOwkJCS8qIFRhcmdldCBsaW5lIHJhbmdlICovCisKKwlEd2FyZl9VbnNpZ25lZAkJZm5vOwkJCS8qIEZpbGUgbnVtYmVyICovCisJRHdhcmZfVW5zaWduZWQJCWxub19zOwkJCS8qIFN0YXJ0IGxpbmUgbnVtYmVyICovCisJRHdhcmZfVW5zaWduZWQJCWxub19lOwkJCS8qIEVuZCBsaW5lIG51bWJlciAqLworCUR3YXJmX0FkZHIJCWFkZHJfczsJCQkvKiBTdGFydCBhZGRyZXNzICovCisJRHdhcmZfQWRkcgkJYWRkcl9lOwkJCS8qIEVuZCBhZGRyZXNzICovCisJRHdhcmZfRGllCQljdV9kaWU7CQkJLyogQ3VycmVudCBDVSAqLworCWludAkJCWZvdW5kOworfTsKKwogI2VuZGlmIC8qIE5PX0xJQkRXQVJGICovCiAKICNlbmRpZiAvKl9QUk9CRV9GSU5ERVJfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuYwpyZW5hbWUgdG8gdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYwppbmRleCA2ZDZkNzZiLi41Mzc2Mzc4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKQEAgLTI1LDEwICsyNSwxNiBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KIAotI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKLSNpbmNsdWRlICJ0cmFjZS1ldmVudC1wZXJsLmgiCisjaW5jbHVkZSAiLi4vLi4vcGVyZi5oIgorI2luY2x1ZGUgIi4uL3V0aWwuaCIKKyNpbmNsdWRlICIuLi90cmFjZS1ldmVudC5oIgorCisjaW5jbHVkZSA8RVhURVJOLmg+CisjaW5jbHVkZSA8cGVybC5oPgorCit2b2lkIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQocFRIWF8gQ1YgKmN2KTsKK3ZvaWQgYm9vdF9EeW5hTG9hZGVyKHBUSFhfIENWICpjdik7Cit0eXBlZGVmIFBlcmxJbnRlcnByZXRlciAqIElOVEVSUDsKIAogdm9pZCB4c19pbml0KHBUSFgpOwogCkBAIC00OSw3ICs1NSw3IEBACiAKIHN0cnVjdCBldmVudCAqZXZlbnRzW0ZUUkFDRV9NQVhfRVZFTlRdOwogCi1zdGF0aWMgc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKK2V4dGVybiBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OwogCiBzdGF0aWMgY2hhciAqY3VyX2ZpZWxkX25hbWU7CiBzdGF0aWMgaW50IHplcm9fZmxhZ19hdG9tOwpAQCAtMjM5LDMzICsyNDUsNiBAQAogCXJldHVybiBldmVudDsKIH0KIAotaW50IGNvbW1vbl9wYyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCi17Ci0JaW50IHBjOwotCi0JcGMgPSBwYXJzZV9jb21tb25fcGMoY29udGV4dC0+ZXZlbnRfZGF0YSk7Ci0KLQlyZXR1cm4gcGM7Ci19Ci0KLWludCBjb21tb25fZmxhZ3Moc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQotewotCWludCBmbGFnczsKLQotCWZsYWdzID0gcGFyc2VfY29tbW9uX2ZsYWdzKGNvbnRleHQtPmV2ZW50X2RhdGEpOwotCi0JcmV0dXJuIGZsYWdzOwotfQotCi1pbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQotewotCWludCBsb2NrX2RlcHRoOwotCi0JbG9ja19kZXB0aCA9IHBhcnNlX2NvbW1vbl9sb2NrX2RlcHRoKGNvbnRleHQtPmV2ZW50X2RhdGEpOwotCi0JcmV0dXJuIGxvY2tfZGVwdGg7Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmxfcHJvY2Vzc19ldmVudChpbnQgY3B1LCB2b2lkICpkYXRhLAogCQkJICAgICAgIGludCBzaXplIF9fdW51c2VkLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywgY2hhciAqY29tbSkKQEAgLTU4Nyw3NSArNTY2LDMgQEAKIAkucHJvY2Vzc19ldmVudCA9IHBlcmxfcHJvY2Vzc19ldmVudCwKIAkuZ2VuZXJhdGVfc2NyaXB0ID0gcGVybF9nZW5lcmF0ZV9zY3JpcHQsCiB9OwotCi1zdGF0aWMgdm9pZCBwcmludF91bnN1cHBvcnRlZF9tc2codm9pZCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIlBlcmwgc2NyaXB0aW5nIG5vdCBzdXBwb3J0ZWQuIgotCQkiICBJbnN0YWxsIGxpYnBlcmwgYW5kIHJlYnVpbGQgcGVyZiB0byBlbmFibGUgaXQuXG4iCi0JCSJGb3IgZXhhbXBsZTpcbiAgIyBhcHQtZ2V0IGluc3RhbGwgbGlicGVybC1kZXYgKHVidW50dSkiCi0JCSJcbiAgIyB5dW0gaW5zdGFsbCBwZXJsLUV4dFV0aWxzLUVtYmVkIChGZWRvcmEpIgotCQkiXG4gIGV0Yy5cbiIpOwotfQotCi1zdGF0aWMgaW50IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKLQkJCQkJIGludCBhcmdjIF9fdW51c2VkLAotCQkJCQkgY29uc3QgY2hhciAqKmFyZ3YgX191bnVzZWQpCi17Ci0JcHJpbnRfdW5zdXBwb3J0ZWRfbXNnKCk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgcGVybF9zdG9wX3NjcmlwdF91bnN1cHBvcnRlZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwZXJsX3Byb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQoaW50IGNwdSBfX3VudXNlZCwKLQkJCQkJICAgdm9pZCAqZGF0YSBfX3VudXNlZCwKLQkJCQkJICAgaW50IHNpemUgX191bnVzZWQsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcyBfX3VudXNlZCwKLQkJCQkJICAgY2hhciAqY29tbSBfX3VudXNlZCkKLXsKLX0KLQotc3RhdGljIGludCBwZXJsX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpvdXRmaWxlIF9fdW51c2VkKQotewotCXByaW50X3Vuc3VwcG9ydGVkX21zZygpOwotCi0JcmV0dXJuIC0xOwotfQotCi1zdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMgPSB7Ci0JLm5hbWUgPSAiUGVybCIsCi0JLnN0YXJ0X3NjcmlwdCA9IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkLAotCS5zdG9wX3NjcmlwdCA9IHBlcmxfc3RvcF9zY3JpcHRfdW5zdXBwb3J0ZWQsCi0JLnByb2Nlc3NfZXZlbnQgPSBwZXJsX3Byb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQsCi0JLmdlbmVyYXRlX3NjcmlwdCA9IHBlcmxfZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdGluZ19vcHMpCi17Ci0JaW50IGVycjsKLQllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUGVybCIsIHNjcmlwdGluZ19vcHMpOwotCWlmIChlcnIpCi0JCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgUGVybCBzY3JpcHQgZXh0ZW5zaW9uIik7Ci0KLQllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicGwiLCBzY3JpcHRpbmdfb3BzKTsKLQlpZiAoZXJyKQotCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHBsIHNjcmlwdCBleHRlbnNpb24iKTsKLQotCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKLX0KLQotI2lmZGVmIE5PX0xJQlBFUkwKLXZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKLXsKLQlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzKTsKLX0KLSNlbHNlCi12b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpCi17Ci0JcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoJnBlcmxfc2NyaXB0aW5nX29wcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E0MTRiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jCkBAIC0wLDAgKzEsNTczIEBACisvKgorICogdHJhY2UtZXZlbnQtcHl0aG9uLiAgRmVlZCB0cmFjZSBldmVudHMgdG8gYW4gZW1iZWRkZWQgUHl0aG9uIGludGVycHJldGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8UHl0aG9uLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIi4uLy4uL3BlcmYuaCIKKyNpbmNsdWRlICIuLi91dGlsLmgiCisjaW5jbHVkZSAiLi4vdHJhY2UtZXZlbnQuaCIKKworUHlNT0RJTklUX0ZVTkMgaW5pdHBlcmZfdHJhY2VfY29udGV4dCh2b2lkKTsKKworI2RlZmluZSBGVFJBQ0VfTUFYX0VWRU5UCQkJCVwKKwkoKDEgPDwgKHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4KSkgLSAxKQorCitzdHJ1Y3QgZXZlbnQgKmV2ZW50c1tGVFJBQ0VfTUFYX0VWRU5UXTsKKworI2RlZmluZSBNQVhfRklFTERTCTY0CisjZGVmaW5lIE5fQ09NTU9OX0ZJRUxEUwk3CisKK2V4dGVybiBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCitzdGF0aWMgY2hhciAqY3VyX2ZpZWxkX25hbWU7CitzdGF0aWMgaW50IHplcm9fZmxhZ19hdG9tOworCitzdGF0aWMgUHlPYmplY3QgKm1haW5fbW9kdWxlLCAqbWFpbl9kaWN0OworCitzdGF0aWMgdm9pZCBoYW5kbGVyX2NhbGxfZGllKGNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSkKK3sKKwlQeUVycl9QcmludCgpOworCVB5X0ZhdGFsRXJyb3IoInByb2JsZW0gaW4gUHl0aG9uIHRyYWNlIGV2ZW50IGhhbmRsZXIiKTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX3ZhbHVlKGVudW0gcHJpbnRfYXJnX3R5cGUgZmllbGRfdHlwZSwKKwkJCSBjb25zdCBjaGFyICpldl9uYW1lLAorCQkJIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsCisJCQkgY29uc3QgY2hhciAqZmllbGRfdmFsdWUsCisJCQkgY29uc3QgY2hhciAqZmllbGRfc3RyKQoreworCWNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSA9ICJkZWZpbmVfZmxhZ192YWx1ZSI7CisJUHlPYmplY3QgKmhhbmRsZXIsICp0LCAqcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsKKwl1bnNpZ25lZCBuID0gMDsKKworCWlmIChmaWVsZF90eXBlID09IFBSSU5UX1NZTUJPTCkKKwkJaGFuZGxlcl9uYW1lID0gImRlZmluZV9zeW1ib2xpY192YWx1ZSI7CisKKwl0ID0gUHlUdXBsZV9OZXcoNCk7CisJaWYgKCF0KQorCQlQeV9GYXRhbEVycm9yKCJjb3VsZG4ndCBjcmVhdGUgUHl0aG9uIHR1cGxlIik7CisKKwl2YWx1ZSA9IGV2YWxfZmxhZyhmaWVsZF92YWx1ZSk7CisKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGV2X25hbWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpZWxkX25hbWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyh2YWx1ZSkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoZmllbGRfc3RyKSk7CisKKwloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCBoYW5kbGVyX25hbWUpOworCWlmIChoYW5kbGVyICYmIFB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpIHsKKwkJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCB0KTsKKwkJaWYgKHJldHZhbCA9PSBOVUxMKQorCQkJaGFuZGxlcl9jYWxsX2RpZShoYW5kbGVyX25hbWUpOworCX0KKworCVB5X0RFQ1JFRih0KTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX3ZhbHVlcyhlbnVtIHByaW50X2FyZ190eXBlIGZpZWxkX3R5cGUsCisJCQkgIHN0cnVjdCBwcmludF9mbGFnX3N5bSAqZmllbGQsCisJCQkgIGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUpCit7CisJZGVmaW5lX3ZhbHVlKGZpZWxkX3R5cGUsIGV2X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkLT52YWx1ZSwKKwkJICAgICBmaWVsZC0+c3RyKTsKKworCWlmIChmaWVsZC0+bmV4dCkKKwkJZGVmaW5lX3ZhbHVlcyhmaWVsZF90eXBlLCBmaWVsZC0+bmV4dCwgZXZfbmFtZSwgZmllbGRfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV9maWVsZChlbnVtIHByaW50X2FyZ190eXBlIGZpZWxkX3R5cGUsCisJCQkgY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCSBjb25zdCBjaGFyICpmaWVsZF9uYW1lLAorCQkJIGNvbnN0IGNoYXIgKmRlbGltKQoreworCWNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSA9ICJkZWZpbmVfZmxhZ19maWVsZCI7CisJUHlPYmplY3QgKmhhbmRsZXIsICp0LCAqcmV0dmFsOworCXVuc2lnbmVkIG4gPSAwOworCisJaWYgKGZpZWxkX3R5cGUgPT0gUFJJTlRfU1lNQk9MKQorCQloYW5kbGVyX25hbWUgPSAiZGVmaW5lX3N5bWJvbGljX2ZpZWxkIjsKKworCWlmIChmaWVsZF90eXBlID09IFBSSU5UX0ZMQUdTKQorCQl0ID0gUHlUdXBsZV9OZXcoMyk7CisJZWxzZQorCQl0ID0gUHlUdXBsZV9OZXcoMik7CisJaWYgKCF0KQorCQlQeV9GYXRhbEVycm9yKCJjb3VsZG4ndCBjcmVhdGUgUHl0aG9uIHR1cGxlIik7CisKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGV2X25hbWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpZWxkX25hbWUpKTsKKwlpZiAoZmllbGRfdHlwZSA9PSBQUklOVF9GTEFHUykKKwkJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhkZWxpbSkpOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgaGFuZGxlcl9uYW1lKTsKKwlpZiAoaGFuZGxlciAmJiBQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKSB7CisJCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgdCk7CisJCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJCWhhbmRsZXJfY2FsbF9kaWUoaGFuZGxlcl9uYW1lKTsKKwl9CisKKwlQeV9ERUNSRUYodCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV9ldmVudF9zeW1ib2xzKHN0cnVjdCBldmVudCAqZXZlbnQsCisJCQkJIGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkJIHN0cnVjdCBwcmludF9hcmcgKmFyZ3MpCit7CisJc3dpdGNoIChhcmdzLT50eXBlKSB7CisJY2FzZSBQUklOVF9OVUxMOgorCQlicmVhazsKKwljYXNlIFBSSU5UX0FUT006CisJCWRlZmluZV92YWx1ZShQUklOVF9GTEFHUywgZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUsICIwIiwKKwkJCSAgICAgYXJncy0+YXRvbS5hdG9tKTsKKwkJemVyb19mbGFnX2F0b20gPSAwOworCQlicmVhazsKKwljYXNlIFBSSU5UX0ZJRUxEOgorCQlpZiAoY3VyX2ZpZWxkX25hbWUpCisJCQlmcmVlKGN1cl9maWVsZF9uYW1lKTsKKwkJY3VyX2ZpZWxkX25hbWUgPSBzdHJkdXAoYXJncy0+ZmllbGQubmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfRkxBR1M6CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5mbGFncy5maWVsZCk7CisJCWRlZmluZV9maWVsZChQUklOVF9GTEFHUywgZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUsCisJCQkgICAgIGFyZ3MtPmZsYWdzLmRlbGltKTsKKwkJZGVmaW5lX3ZhbHVlcyhQUklOVF9GTEFHUywgYXJncy0+ZmxhZ3MuZmxhZ3MsIGV2X25hbWUsCisJCQkgICAgICBjdXJfZmllbGRfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfU1lNQk9MOgorCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+c3ltYm9sLmZpZWxkKTsKKwkJZGVmaW5lX2ZpZWxkKFBSSU5UX1NZTUJPTCwgZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUsIE5VTEwpOworCQlkZWZpbmVfdmFsdWVzKFBSSU5UX1NZTUJPTCwgYXJncy0+c3ltYm9sLnN5bWJvbHMsIGV2X25hbWUsCisJCQkgICAgICBjdXJfZmllbGRfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfU1RSSU5HOgorCQlicmVhazsKKwljYXNlIFBSSU5UX1RZUEU6CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT50eXBlY2FzdC5pdGVtKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9PUDoKKwkJaWYgKHN0cmNtcChhcmdzLT5vcC5vcCwgIjoiKSA9PSAwKQorCQkJemVyb19mbGFnX2F0b20gPSAxOworCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+b3AubGVmdCk7CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5vcC5yaWdodCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHdlIHNob3VsZCB3YXJuLi4uICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoYXJncy0+bmV4dCkKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPm5leHQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBldmVudCAqZmluZF9jYWNoZV9ldmVudChpbnQgdHlwZSkKK3sKKwlzdGF0aWMgY2hhciBldl9uYW1lWzI1Nl07CisJc3RydWN0IGV2ZW50ICpldmVudDsKKworCWlmIChldmVudHNbdHlwZV0pCisJCXJldHVybiBldmVudHNbdHlwZV07CisKKwlldmVudHNbdHlwZV0gPSBldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcHJpbnRmKGV2X25hbWUsICIlc19fJXMiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CisKKwlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgZXZlbnQtPnByaW50X2ZtdC5hcmdzKTsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHZvaWQgcHl0aG9uX3Byb2Nlc3NfZXZlbnQoaW50IGNwdSwgdm9pZCAqZGF0YSwKKwkJCQkgaW50IHNpemUgX191bnVzZWQsCisJCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywgY2hhciAqY29tbSkKK3sKKwlQeU9iamVjdCAqaGFuZGxlciwgKnJldHZhbCwgKmNvbnRleHQsICp0OworCXN0YXRpYyBjaGFyIGhhbmRsZXJfbmFtZVsyNTZdOworCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBzLCBuczsKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIG4gPSAwOworCWludCB0eXBlOworCWludCBwaWQ7CisKKwl0ID0gUHlUdXBsZV9OZXcoTUFYX0ZJRUxEUyk7CisJaWYgKCF0KQorCQlQeV9GYXRhbEVycm9yKCJjb3VsZG4ndCBjcmVhdGUgUHl0aG9uIHR1cGxlIik7CisKKwl0eXBlID0gdHJhY2VfcGFyc2VfY29tbW9uX3R5cGUoZGF0YSk7CisKKwlldmVudCA9IGZpbmRfY2FjaGVfZXZlbnQodHlwZSk7CisJaWYgKCFldmVudCkKKwkJZGllKCJ1ZyEgbm8gZXZlbnQgZm91bmQgZm9yIHR5cGUgJWQiLCB0eXBlKTsKKworCXBpZCA9IHRyYWNlX3BhcnNlX2NvbW1vbl9waWQoZGF0YSk7CisKKwlzcHJpbnRmKGhhbmRsZXJfbmFtZSwgIiVzX18lcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKKworCXMgPSBuc2VjcyAvIE5TRUNTX1BFUl9TRUM7CisJbnMgPSBuc2VjcyAtIHMgKiBOU0VDU19QRVJfU0VDOworCisJc2NyaXB0aW5nX2NvbnRleHQtPmV2ZW50X2RhdGEgPSBkYXRhOworCisJY29udGV4dCA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cihzY3JpcHRpbmdfY29udGV4dCwgTlVMTCk7CisKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGhhbmRsZXJfbmFtZSkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssCisJCQlQeUNPYmplY3RfRnJvbVZvaWRQdHIoc2NyaXB0aW5nX2NvbnRleHQsIE5VTEwpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyhjcHUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyhzKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcobnMpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyhwaWQpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGNvbW0pKTsKKworCWZvciAoZmllbGQgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZmllbGQ7IGZpZWxkID0gZmllbGQtPm5leHQpIHsKKwkJaWYgKGZpZWxkLT5mbGFncyAmIEZJRUxEX0lTX1NUUklORykgeworCQkJaW50IG9mZnNldDsKKwkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19EWU5BTUlDKSB7CisJCQkJb2Zmc2V0ID0gKihpbnQgKikoZGF0YSArIGZpZWxkLT5vZmZzZXQpOworCQkJCW9mZnNldCAmPSAweGZmZmY7CisJCQl9IGVsc2UKKwkJCQlvZmZzZXQgPSBmaWVsZC0+b2Zmc2V0OworCQkJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywKKwkJCQlQeVN0cmluZ19Gcm9tU3RyaW5nKChjaGFyICopZGF0YSArIG9mZnNldCkpOworCQl9IGVsc2UgeyAvKiBGSUVMRF9JU19OVU1FUklDICovCisJCQl2YWwgPSByZWFkX3NpemUoZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKwkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19TSUdORUQpIHsKKwkJCQlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyh2YWwpKTsKKwkJCX0gZWxzZSB7CisJCQkJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcodmFsKSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoX1B5VHVwbGVfUmVzaXplKCZ0LCBuKSA9PSAtMSkKKwkJUHlfRmF0YWxFcnJvcigiZXJyb3IgcmVzaXppbmcgUHl0aG9uIHR1cGxlIik7CisKKwloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCBoYW5kbGVyX25hbWUpOworCWlmIChoYW5kbGVyICYmIFB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpIHsKKwkJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCB0KTsKKwkJaWYgKHJldHZhbCA9PSBOVUxMKQorCQkJaGFuZGxlcl9jYWxsX2RpZShoYW5kbGVyX25hbWUpOworCX0gZWxzZSB7CisJCWhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtYWluX2RpY3QsICJ0cmFjZV91bmhhbmRsZWQiKTsKKwkJaWYgKGhhbmRsZXIgJiYgUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkgeworCQkJaWYgKF9QeVR1cGxlX1Jlc2l6ZSgmdCwgTl9DT01NT05fRklFTERTKSA9PSAtMSkKKwkJCQlQeV9GYXRhbEVycm9yKCJlcnJvciByZXNpemluZyBQeXRob24gdHVwbGUiKTsKKworCQkJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCB0KTsKKwkJCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJCQloYW5kbGVyX2NhbGxfZGllKCJ0cmFjZV91bmhhbmRsZWQiKTsKKwkJfQorCX0KKworCVB5X0RFQ1JFRih0KTsKK30KKworc3RhdGljIGludCBydW5fc3RhcnRfc3ViKHZvaWQpCit7CisJUHlPYmplY3QgKmhhbmRsZXIsICpyZXR2YWw7CisJaW50IGVyciA9IDA7CisKKwltYWluX21vZHVsZSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgiX19tYWluX18iKTsKKwlpZiAobWFpbl9tb2R1bGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCVB5X0lOQ1JFRihtYWluX21vZHVsZSk7CisKKwltYWluX2RpY3QgPSBQeU1vZHVsZV9HZXREaWN0KG1haW5fbW9kdWxlKTsKKwlpZiAobWFpbl9kaWN0ID09IE5VTEwpIHsKKwkJZXJyID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCVB5X0lOQ1JFRihtYWluX2RpY3QpOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgInRyYWNlX2JlZ2luIik7CisJaWYgKGhhbmRsZXIgPT0gTlVMTCB8fCAhUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkKKwkJZ290byBvdXQ7CisKKwlyZXR2YWwgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhhbmRsZXIsIE5VTEwpOworCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJaGFuZGxlcl9jYWxsX2RpZSgidHJhY2VfYmVnaW4iKTsKKworCVB5X0RFQ1JFRihyZXR2YWwpOworCXJldHVybiBlcnI7CitlcnJvcjoKKwlQeV9YREVDUkVGKG1haW5fZGljdCk7CisJUHlfWERFQ1JFRihtYWluX21vZHVsZSk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFN0YXJ0IHRyYWNlIHNjcmlwdAorICovCitzdGF0aWMgaW50IHB5dGhvbl9zdGFydF9zY3JpcHQoY29uc3QgY2hhciAqc2NyaXB0LCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqKmNvbW1hbmRfbGluZTsKKwljaGFyIGJ1ZltQQVRIX01BWF07CisJaW50IGksIGVyciA9IDA7CisJRklMRSAqZnA7CisKKwljb21tYW5kX2xpbmUgPSBtYWxsb2MoKGFyZ2MgKyAxKSAqIHNpemVvZihjb25zdCBjaGFyICopKTsKKwljb21tYW5kX2xpbmVbMF0gPSBzY3JpcHQ7CisJZm9yIChpID0gMTsgaSA8IGFyZ2MgKyAxOyBpKyspCisJCWNvbW1hbmRfbGluZVtpXSA9IGFyZ3ZbaSAtIDFdOworCisJUHlfSW5pdGlhbGl6ZSgpOworCisJaW5pdHBlcmZfdHJhY2VfY29udGV4dCgpOworCisJUHlTeXNfU2V0QXJndihhcmdjICsgMSwgKGNoYXIgKiopY29tbWFuZF9saW5lKTsKKworCWZwID0gZm9wZW4oc2NyaXB0LCAiciIpOworCWlmICghZnApIHsKKwkJc3ByaW50ZihidWYsICJDYW4ndCBvcGVuIHB5dGhvbiBzY3JpcHQgXCIlc1wiIiwgc2NyaXB0KTsKKwkJcGVycm9yKGJ1Zik7CisJCWVyciA9IC0xOworCQlnb3RvIGVycm9yOworCX0KKworCWVyciA9IFB5UnVuX1NpbXBsZUZpbGUoZnAsIHNjcmlwdCk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHJ1bm5pbmcgcHl0aG9uIHNjcmlwdCAlc1xuIiwgc2NyaXB0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBydW5fc3RhcnRfc3ViKCk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHN0YXJ0aW5nIHB5dGhvbiBzY3JpcHQgJXNcbiIsIHNjcmlwdCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZnJlZShjb21tYW5kX2xpbmUpOworCWZwcmludGYoc3RkZXJyLCAicGVyZiB0cmFjZSBzdGFydGVkIHdpdGggUHl0aG9uIHNjcmlwdCAlc1xuXG4iLAorCQlzY3JpcHQpOworCisJcmV0dXJuIGVycjsKK2Vycm9yOgorCVB5X0ZpbmFsaXplKCk7CisJZnJlZShjb21tYW5kX2xpbmUpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFN0b3AgdHJhY2Ugc2NyaXB0CisgKi8KK3N0YXRpYyBpbnQgcHl0aG9uX3N0b3Bfc2NyaXB0KHZvaWQpCit7CisJUHlPYmplY3QgKmhhbmRsZXIsICpyZXR2YWw7CisJaW50IGVyciA9IDA7CisKKwloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCAidHJhY2VfZW5kIik7CisJaWYgKGhhbmRsZXIgPT0gTlVMTCB8fCAhUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkKKwkJZ290byBvdXQ7CisKKwlyZXR2YWwgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhhbmRsZXIsIE5VTEwpOworCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJaGFuZGxlcl9jYWxsX2RpZSgidHJhY2VfZW5kIik7CisJZWxzZQorCQlQeV9ERUNSRUYocmV0dmFsKTsKK291dDoKKwlQeV9YREVDUkVGKG1haW5fZGljdCk7CisJUHlfWERFQ1JFRihtYWluX21vZHVsZSk7CisJUHlfRmluYWxpemUoKTsKKworCWZwcmludGYoc3RkZXJyLCAiXG5wZXJmIHRyYWNlIFB5dGhvbiBzY3JpcHQgc3RvcHBlZFxuIik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9nZW5lcmF0ZV9zY3JpcHQoY29uc3QgY2hhciAqb3V0ZmlsZSkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50ID0gTlVMTDsKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmOworCWNoYXIgZm5hbWVbUEFUSF9NQVhdOworCWludCBub3RfZmlyc3QsIGNvdW50OworCUZJTEUgKm9mcDsKKworCXNwcmludGYoZm5hbWUsICIlcy5weSIsIG91dGZpbGUpOworCW9mcCA9IGZvcGVuKGZuYW1lLCAidyIpOworCWlmIChvZnAgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkbid0IG9wZW4gJXNcbiIsIGZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmcHJpbnRmKG9mcCwgIiMgcGVyZiB0cmFjZSBldmVudCBoYW5kbGVycywgIgorCQkiZ2VuZXJhdGVkIGJ5IHBlcmYgdHJhY2UgLWcgcHl0aG9uXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwiCisJCSIgTGljZW5zZSB2ZXJzaW9uIDJcblxuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgVGhlIGNvbW1vbl8qIGV2ZW50IGhhbmRsZXIgZmllbGRzIGFyZSB0aGUgbW9zdCB1c2VmdWwgIgorCQkiZmllbGRzIGNvbW1vbiB0b1xuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgYWxsIGV2ZW50cy4gIFRoZXkgZG9uJ3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byAiCisJCSJ0aGUgJ2NvbW1vbl8qJyBmaWVsZHNcbiIpOworCisJZnByaW50ZihvZnAsICIjIGluIHRoZSBmb3JtYXQgZmlsZXMuICBUaG9zZSBmaWVsZHMgbm90IGF2YWlsYWJsZSBhcyAiCisJCSJoYW5kbGVyIHBhcmFtcyBjYW5cbiIpOworCisJZnByaW50ZihvZnAsICIjIGJlIHJldHJpZXZlZCB1c2luZyBQeXRob24gZnVuY3Rpb25zIG9mIHRoZSBmb3JtICIKKwkJImNvbW1vbl8qKGNvbnRleHQpLlxuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgU2VlIHRoZSBwZXJmLXRyYWNlLXB5dGhvbiBEb2N1bWVudGF0aW9uIGZvciB0aGUgbGlzdCAiCisJCSJvZiBhdmFpbGFibGUgZnVuY3Rpb25zLlxuXG4iKTsKKworCWZwcmludGYob2ZwLCAiaW1wb3J0IG9zXG4iKTsKKwlmcHJpbnRmKG9mcCwgImltcG9ydCBzeXNcblxuIik7CisKKwlmcHJpbnRmKG9mcCwgInN5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXFxcbiIpOworCWZwcmludGYob2ZwLCAiXHQnL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpXG4iKTsKKwlmcHJpbnRmKG9mcCwgIlxuZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICpcbiIpOworCWZwcmludGYob2ZwLCAiZnJvbSBDb3JlIGltcG9ydCAqXG5cblxuIik7CisKKwlmcHJpbnRmKG9mcCwgImRlZiB0cmFjZV9iZWdpbigpOlxuIik7CisJZnByaW50ZihvZnAsICJcdHByaW50IFwiaW4gdHJhY2VfYmVnaW5cIlxuXG4iKTsKKworCWZwcmludGYob2ZwLCAiZGVmIHRyYWNlX2VuZCgpOlxuIik7CisJZnByaW50ZihvZnAsICJcdHByaW50IFwiaW4gdHJhY2VfZW5kXCJcblxuIik7CisKKwl3aGlsZSAoKGV2ZW50ID0gdHJhY2VfZmluZF9uZXh0X2V2ZW50KGV2ZW50KSkpIHsKKwkJZnByaW50ZihvZnAsICJkZWYgJXNfXyVzKCIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKKwkJZnByaW50ZihvZnAsICJldmVudF9uYW1lLCAiKTsKKwkJZnByaW50ZihvZnAsICJjb250ZXh0LCAiKTsKKwkJZnByaW50ZihvZnAsICJjb21tb25fY3B1LFxuIik7CisJCWZwcmludGYob2ZwLCAiXHRjb21tb25fc2VjcywgIik7CisJCWZwcmludGYob2ZwLCAiY29tbW9uX25zZWNzLCAiKTsKKwkJZnByaW50ZihvZnAsICJjb21tb25fcGlkLCAiKTsKKwkJZnByaW50ZihvZnAsICJjb21tb25fY29tbSxcblx0Iik7CisKKwkJbm90X2ZpcnN0ID0gMDsKKwkJY291bnQgPSAwOworCisJCWZvciAoZiA9IGV2ZW50LT5mb3JtYXQuZmllbGRzOyBmOyBmID0gZi0+bmV4dCkgeworCQkJaWYgKG5vdF9maXJzdCsrKQorCQkJCWZwcmludGYob2ZwLCAiLCAiKTsKKwkJCWlmICgrK2NvdW50ICUgNSA9PSAwKQorCQkJCWZwcmludGYob2ZwLCAiXG5cdCIpOworCisJCQlmcHJpbnRmKG9mcCwgIiVzIiwgZi0+bmFtZSk7CisJCX0KKwkJZnByaW50ZihvZnAsICIpOlxuIik7CisKKwkJZnByaW50ZihvZnAsICJcdFx0cHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsICIKKwkJCSJjb21tb25fc2VjcywgY29tbW9uX25zZWNzLFxuXHRcdFx0IgorCQkJImNvbW1vbl9waWQsIGNvbW1vbl9jb21tKVxuXG4iKTsKKworCQlmcHJpbnRmKG9mcCwgIlx0XHRwcmludCBcIiIpOworCisJCW5vdF9maXJzdCA9IDA7CisJCWNvdW50ID0gMDsKKworCQlmb3IgKGYgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZjsgZiA9IGYtPm5leHQpIHsKKwkJCWlmIChub3RfZmlyc3QrKykKKwkJCQlmcHJpbnRmKG9mcCwgIiwgIik7CisJCQlpZiAoY291bnQgJiYgY291bnQgJSAzID09IDApIHsKKwkJCQlmcHJpbnRmKG9mcCwgIlwiIFxcXG5cdFx0XCIiKTsKKwkJCX0KKwkJCWNvdW50Kys7CisKKwkJCWZwcmludGYob2ZwLCAiJXM9IiwgZi0+bmFtZSk7CisJCQlpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19TVFJJTkcgfHwKKwkJCSAgICBmLT5mbGFncyAmIEZJRUxEX0lTX0ZMQUcgfHwKKwkJCSAgICBmLT5mbGFncyAmIEZJRUxEX0lTX1NZTUJPTElDKQorCQkJCWZwcmludGYob2ZwLCAiJSVzIik7CisJCQllbHNlIGlmIChmLT5mbGFncyAmIEZJRUxEX0lTX1NJR05FRCkKKwkJCQlmcHJpbnRmKG9mcCwgIiUlZCIpOworCQkJZWxzZQorCQkJCWZwcmludGYob2ZwLCAiJSV1Iik7CisJCX0KKworCQlmcHJpbnRmKG9mcCwgIlxcblwiICUlIFxcXG5cdFx0KCIpOworCisJCW5vdF9maXJzdCA9IDA7CisJCWNvdW50ID0gMDsKKworCQlmb3IgKGYgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZjsgZiA9IGYtPm5leHQpIHsKKwkJCWlmIChub3RfZmlyc3QrKykKKwkJCQlmcHJpbnRmKG9mcCwgIiwgIik7CisKKwkJCWlmICgrK2NvdW50ICUgNSA9PSAwKQorCQkJCWZwcmludGYob2ZwLCAiXG5cdFx0Iik7CisKKwkJCWlmIChmLT5mbGFncyAmIEZJRUxEX0lTX0ZMQUcpIHsKKwkJCQlpZiAoKGNvdW50IC0gMSkgJSA1ICE9IDApIHsKKwkJCQkJZnByaW50ZihvZnAsICJcblx0XHQiKTsKKwkJCQkJY291bnQgPSA0OworCQkJCX0KKwkJCQlmcHJpbnRmKG9mcCwgImZsYWdfc3RyKFwiIik7CisJCQkJZnByaW50ZihvZnAsICIlc19fJXNcIiwgIiwgZXZlbnQtPnN5c3RlbSwKKwkJCQkJZXZlbnQtPm5hbWUpOworCQkJCWZwcmludGYob2ZwLCAiXCIlc1wiLCAlcykiLCBmLT5uYW1lLAorCQkJCQlmLT5uYW1lKTsKKwkJCX0gZWxzZSBpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19TWU1CT0xJQykgeworCQkJCWlmICgoY291bnQgLSAxKSAlIDUgIT0gMCkgeworCQkJCQlmcHJpbnRmKG9mcCwgIlxuXHRcdCIpOworCQkJCQljb3VudCA9IDQ7CisJCQkJfQorCQkJCWZwcmludGYob2ZwLCAic3ltYm9sX3N0cihcIiIpOworCQkJCWZwcmludGYob2ZwLCAiJXNfXyVzXCIsICIsIGV2ZW50LT5zeXN0ZW0sCisJCQkJCWV2ZW50LT5uYW1lKTsKKwkJCQlmcHJpbnRmKG9mcCwgIlwiJXNcIiwgJXMpIiwgZi0+bmFtZSwKKwkJCQkJZi0+bmFtZSk7CisJCQl9IGVsc2UKKwkJCQlmcHJpbnRmKG9mcCwgIiVzIiwgZi0+bmFtZSk7CisJCX0KKworCQlmcHJpbnRmKG9mcCwgIiksXG5cbiIpOworCX0KKworCWZwcmludGYob2ZwLCAiZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCAiCisJCSJjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLFxuXHRcdCIKKwkJImNvbW1vbl9waWQsIGNvbW1vbl9jb21tKTpcbiIpOworCisJZnByaW50ZihvZnAsICJcdFx0cHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsICIKKwkJImNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsXG5cdFx0Y29tbW9uX3BpZCwgIgorCQkiY29tbW9uX2NvbW0pXG5cbiIpOworCisJZnByaW50ZihvZnAsICJkZWYgcHJpbnRfaGVhZGVyKCIKKwkJImV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSk6XG4iCisJCSJcdHByaW50IFwiJSUtMjBzICUlNXUgJSUwNXUuJSUwOXUgJSU4dSAlJS0yMHMgXCIgJSUgXFxcblx0IgorCQkiKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSksXG4iKTsKKworCWZjbG9zZShvZnApOworCisJZnByaW50ZihzdGRlcnIsICJnZW5lcmF0ZWQgUHl0aG9uIHNjcmlwdDogJXNcbiIsIGZuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBweXRob25fc2NyaXB0aW5nX29wcyA9IHsKKwkubmFtZSA9ICJQeXRob24iLAorCS5zdGFydF9zY3JpcHQgPSBweXRob25fc3RhcnRfc2NyaXB0LAorCS5zdG9wX3NjcmlwdCA9IHB5dGhvbl9zdG9wX3NjcmlwdCwKKwkucHJvY2Vzc19ldmVudCA9IHB5dGhvbl9wcm9jZXNzX2V2ZW50LAorCS5nZW5lcmF0ZV9zY3JpcHQgPSBweXRob25fZ2VuZXJhdGVfc2NyaXB0LAorfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IGNlM2E2YzguLjBkZTcyNTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtMSw1ICsxLDggQEAKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCisjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIApAQCAtNDksNiArNTIsMTEgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCit7CisJcmV0dXJuIG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcygmc2VsZi0+a21hcHMsIHNlbGYtPnZtbGludXhfbWFwcyk7Cit9CisKIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnBlcmZfc2Vzc2lvbl9fbmV3KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwgYm9vbCBmb3JjZSkKIHsKIAlzaXplX3QgbGVuID0gZmlsZW5hbWUgPyBzdHJsZW4oZmlsZW5hbWUpICsgMSA6IDA7CkBAIC02NiwxMyArNzQsMjIgQEAKIAlzZWxmLT5tbWFwX3dpbmRvdyA9IDMyOwogCXNlbGYtPmN3ZCA9IE5VTEw7CiAJc2VsZi0+Y3dkbGVuID0gMDsKKwlzZWxmLT51bmtub3duX2V2ZW50cyA9IDA7CiAJbWFwX2dyb3Vwc19faW5pdCgmc2VsZi0+a21hcHMpOwogCi0JaWYgKHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHNlbGYpIDwgMCkKLQkJZ290byBvdXRfZGVsZXRlOworCWlmIChtb2RlID09IE9fUkRPTkxZKSB7CisJCWlmIChwZXJmX3Nlc3Npb25fX29wZW4oc2VsZiwgZm9yY2UpIDwgMCkKKwkJCWdvdG8gb3V0X2RlbGV0ZTsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gT19XUk9OTFkpIHsKKwkJLyoKKwkJICogSW4gT19SRE9OTFkgbW9kZSB0aGlzIHdpbGwgYmUgcGVyZm9ybWVkIHdoZW4gcmVhZGluZyB0aGUKKwkJICoga2VybmVsIE1NQVAgZXZlbnQsIGluIGV2ZW50X19wcm9jZXNzX21tYXAoKS4KKwkJICovCisJCWlmIChwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmKSA8IDApCisJCQlnb3RvIG91dF9kZWxldGU7CisJfQogCi0JaWYgKG1vZGUgPT0gT19SRE9OTFkgJiYgcGVyZl9zZXNzaW9uX19vcGVuKHNlbGYsIGZvcmNlKSA8IDApCi0JCWdvdG8gb3V0X2RlbGV0ZTsKKwlzZWxmLT5zYW1wbGVfdHlwZSA9IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZSgmc2VsZi0+aGVhZGVyKTsKIG91dDoKIAlyZXR1cm4gc2VsZjsKIG91dF9mcmVlOgpAQCAtMTQ4LDMgKzE2NSw0MDkgQEAKIAogCXJldHVybiBzeW1zOwogfQorCitzdGF0aWMgaW50IHByb2Nlc3NfZXZlbnRfc3R1YihldmVudF90ICpldmVudCBfX3VzZWQsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKK3sKKwlkdW1wX3ByaW50ZigiOiB1bmhhbmRsZWQhXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9vcHNfX2ZpbGxfZGVmYXVsdHMoc3RydWN0IHBlcmZfZXZlbnRfb3BzICpoYW5kbGVyKQoreworCWlmIChoYW5kbGVyLT5zYW1wbGUgPT0gTlVMTCkKKwkJaGFuZGxlci0+c2FtcGxlID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5tbWFwID09IE5VTEwpCisJCWhhbmRsZXItPm1tYXAgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPmNvbW0gPT0gTlVMTCkKKwkJaGFuZGxlci0+Y29tbSA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+Zm9yayA9PSBOVUxMKQorCQloYW5kbGVyLT5mb3JrID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5leGl0ID09IE5VTEwpCisJCWhhbmRsZXItPmV4aXQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPmxvc3QgPT0gTlVMTCkKKwkJaGFuZGxlci0+bG9zdCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+cmVhZCA9PSBOVUxMKQorCQloYW5kbGVyLT5yZWFkID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT50aHJvdHRsZSA9PSBOVUxMKQorCQloYW5kbGVyLT50aHJvdHRsZSA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+dW50aHJvdHRsZSA9PSBOVUxMKQorCQloYW5kbGVyLT51bnRocm90dGxlID0gcHJvY2Vzc19ldmVudF9zdHViOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZXZlbnRfX25hbWVbXSA9IHsKKwlbMF0JCQkgPSAiVE9UQUwiLAorCVtQRVJGX1JFQ09SRF9NTUFQXQkgPSAiTU1BUCIsCisJW1BFUkZfUkVDT1JEX0xPU1RdCSA9ICJMT1NUIiwKKwlbUEVSRl9SRUNPUkRfQ09NTV0JID0gIkNPTU0iLAorCVtQRVJGX1JFQ09SRF9FWElUXQkgPSAiRVhJVCIsCisJW1BFUkZfUkVDT1JEX1RIUk9UVExFXQkgPSAiVEhST1RUTEUiLAorCVtQRVJGX1JFQ09SRF9VTlRIUk9UVExFXSA9ICJVTlRIUk9UVExFIiwKKwlbUEVSRl9SRUNPUkRfRk9SS10JID0gIkZPUksiLAorCVtQRVJGX1JFQ09SRF9SRUFEXQkgPSAiUkVBRCIsCisJW1BFUkZfUkVDT1JEX1NBTVBMRV0JID0gIlNBTVBMRSIsCit9OworCit1bnNpZ25lZCBsb25nIGV2ZW50X190b3RhbFtQRVJGX1JFQ09SRF9NQVhdOworCit2b2lkIGV2ZW50X19wcmludF90b3RhbHModm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgUEVSRl9SRUNPUkRfTUFYOyArK2kpCisJCXByX2luZm8oIiUxMHMgZXZlbnRzOiAlMTBsZFxuIiwKKwkJCWV2ZW50X19uYW1lW2ldLCBldmVudF9fdG90YWxbaV0pOworfQorCit2b2lkIG1lbV9ic3dhcF82NCh2b2lkICpzcmMsIGludCBieXRlX3NpemUpCit7CisJdTY0ICptID0gc3JjOworCisJd2hpbGUgKGJ5dGVfc2l6ZSA+IDApIHsKKwkJKm0gPSBic3dhcF82NCgqbSk7CisJCWJ5dGVfc2l6ZSAtPSBzaXplb2YodTY0KTsKKwkJKyttOworCX0KK30KKworc3RhdGljIHZvaWQgZXZlbnRfX2FsbDY0X3N3YXAoZXZlbnRfdCAqc2VsZikKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmhkciA9ICZzZWxmLT5oZWFkZXI7CisJbWVtX2Jzd2FwXzY0KGhkciArIDEsIHNlbGYtPmhlYWRlci5zaXplIC0gc2l6ZW9mKCpoZHIpKTsKK30KKworc3RhdGljIHZvaWQgZXZlbnRfX2NvbW1fc3dhcChldmVudF90ICpzZWxmKQoreworCXNlbGYtPmNvbW0ucGlkID0gYnN3YXBfMzIoc2VsZi0+Y29tbS5waWQpOworCXNlbGYtPmNvbW0udGlkID0gYnN3YXBfMzIoc2VsZi0+Y29tbS50aWQpOworfQorCitzdGF0aWMgdm9pZCBldmVudF9fbW1hcF9zd2FwKGV2ZW50X3QgKnNlbGYpCit7CisJc2VsZi0+bW1hcC5waWQJID0gYnN3YXBfMzIoc2VsZi0+bW1hcC5waWQpOworCXNlbGYtPm1tYXAudGlkCSA9IGJzd2FwXzMyKHNlbGYtPm1tYXAudGlkKTsKKwlzZWxmLT5tbWFwLnN0YXJ0ID0gYnN3YXBfNjQoc2VsZi0+bW1hcC5zdGFydCk7CisJc2VsZi0+bW1hcC5sZW4JID0gYnN3YXBfNjQoc2VsZi0+bW1hcC5sZW4pOworCXNlbGYtPm1tYXAucGdvZmYgPSBic3dhcF82NChzZWxmLT5tbWFwLnBnb2ZmKTsKK30KKworc3RhdGljIHZvaWQgZXZlbnRfX3Rhc2tfc3dhcChldmVudF90ICpzZWxmKQoreworCXNlbGYtPmZvcmsucGlkCT0gYnN3YXBfMzIoc2VsZi0+Zm9yay5waWQpOworCXNlbGYtPmZvcmsudGlkCT0gYnN3YXBfMzIoc2VsZi0+Zm9yay50aWQpOworCXNlbGYtPmZvcmsucHBpZAk9IGJzd2FwXzMyKHNlbGYtPmZvcmsucHBpZCk7CisJc2VsZi0+Zm9yay5wdGlkCT0gYnN3YXBfMzIoc2VsZi0+Zm9yay5wdGlkKTsKKwlzZWxmLT5mb3JrLnRpbWUJPSBic3dhcF82NChzZWxmLT5mb3JrLnRpbWUpOworfQorCitzdGF0aWMgdm9pZCBldmVudF9fcmVhZF9zd2FwKGV2ZW50X3QgKnNlbGYpCit7CisJc2VsZi0+cmVhZC5waWQJCT0gYnN3YXBfMzIoc2VsZi0+cmVhZC5waWQpOworCXNlbGYtPnJlYWQudGlkCQk9IGJzd2FwXzMyKHNlbGYtPnJlYWQudGlkKTsKKwlzZWxmLT5yZWFkLnZhbHVlCT0gYnN3YXBfNjQoc2VsZi0+cmVhZC52YWx1ZSk7CisJc2VsZi0+cmVhZC50aW1lX2VuYWJsZWQJPSBic3dhcF82NChzZWxmLT5yZWFkLnRpbWVfZW5hYmxlZCk7CisJc2VsZi0+cmVhZC50aW1lX3J1bm5pbmcJPSBic3dhcF82NChzZWxmLT5yZWFkLnRpbWVfcnVubmluZyk7CisJc2VsZi0+cmVhZC5pZAkJPSBic3dhcF82NChzZWxmLT5yZWFkLmlkKTsKK30KKwordHlwZWRlZiB2b2lkICgqZXZlbnRfX3N3YXBfb3ApKGV2ZW50X3QgKnNlbGYpOworCitzdGF0aWMgZXZlbnRfX3N3YXBfb3AgZXZlbnRfX3N3YXBfb3BzW10gPSB7CisJW1BFUkZfUkVDT1JEX01NQVBdICAgPSBldmVudF9fbW1hcF9zd2FwLAorCVtQRVJGX1JFQ09SRF9DT01NXSAgID0gZXZlbnRfX2NvbW1fc3dhcCwKKwlbUEVSRl9SRUNPUkRfRk9SS10gICA9IGV2ZW50X190YXNrX3N3YXAsCisJW1BFUkZfUkVDT1JEX0VYSVRdICAgPSBldmVudF9fdGFza19zd2FwLAorCVtQRVJGX1JFQ09SRF9MT1NUXSAgID0gZXZlbnRfX2FsbDY0X3N3YXAsCisJW1BFUkZfUkVDT1JEX1JFQURdICAgPSBldmVudF9fcmVhZF9zd2FwLAorCVtQRVJGX1JFQ09SRF9TQU1QTEVdID0gZXZlbnRfX2FsbDY0X3N3YXAsCisJW1BFUkZfUkVDT1JEX01BWF0gICAgPSBOVUxMLAorfTsKKworc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgICAgICAgZXZlbnRfdCAqZXZlbnQsCisJCQkJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzLAorCQkJCSAgICAgICB1NjQgb2Zmc2V0LCB1NjQgaGVhZCkKK3sKKwl0cmFjZV9ldmVudChldmVudCk7CisKKwlpZiAoZXZlbnQtPmhlYWRlci50eXBlIDwgUEVSRl9SRUNPUkRfTUFYKSB7CisJCWR1bXBfcHJpbnRmKCIlI0x4IFslI3hdOiBQRVJGX1JFQ09SRF8lcyIsCisJCQkgICAgb2Zmc2V0ICsgaGVhZCwgZXZlbnQtPmhlYWRlci5zaXplLAorCQkJICAgIGV2ZW50X19uYW1lW2V2ZW50LT5oZWFkZXIudHlwZV0pOworCQkrK2V2ZW50X190b3RhbFswXTsKKwkJKytldmVudF9fdG90YWxbZXZlbnQtPmhlYWRlci50eXBlXTsKKwl9CisKKwlpZiAoc2VsZi0+aGVhZGVyLm5lZWRzX3N3YXAgJiYgZXZlbnRfX3N3YXBfb3BzW2V2ZW50LT5oZWFkZXIudHlwZV0pCisJCWV2ZW50X19zd2FwX29wc1tldmVudC0+aGVhZGVyLnR5cGVdKGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7CisJY2FzZSBQRVJGX1JFQ09SRF9TQU1QTEU6CisJCXJldHVybiBvcHMtPnNhbXBsZShldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgorCQlyZXR1cm4gb3BzLT5tbWFwKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX0NPTU06CisJCXJldHVybiBvcHMtPmNvbW0oZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfRk9SSzoKKwkJcmV0dXJuIG9wcy0+Zm9yayhldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9FWElUOgorCQlyZXR1cm4gb3BzLT5leGl0KGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX0xPU1Q6CisJCXJldHVybiBvcHMtPmxvc3QoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfUkVBRDoKKwkJcmV0dXJuIG9wcy0+cmVhZChldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKKwkJcmV0dXJuIG9wcy0+dGhyb3R0bGUoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfVU5USFJPVFRMRToKKwkJcmV0dXJuIG9wcy0+dW50aHJvdHRsZShldmVudCwgc2VsZik7CisJZGVmYXVsdDoKKwkJc2VsZi0+dW5rbm93bl9ldmVudHMrKzsKKwkJcmV0dXJuIC0xOworCX0KK30KKwordm9pZCBwZXJmX2V2ZW50X2hlYWRlcl9fYnN3YXAoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpzZWxmKQoreworCXNlbGYtPnR5cGUgPSBic3dhcF8zMihzZWxmLT50eXBlKTsKKwlzZWxmLT5taXNjID0gYnN3YXBfMTYoc2VsZi0+bWlzYyk7CisJc2VsZi0+c2l6ZSA9IGJzd2FwXzE2KHNlbGYtPnNpemUpOworfQorCitpbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKKwkJCQlpbnQgaW5wdXQsIHU2NCBvZmZzZXQsIHU2NCBzaXplKQoreworCXN0cnVjdCBidWlsZF9pZF9ldmVudCBiZXY7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisJdTY0IGxpbWl0ID0gb2Zmc2V0ICsgc2l6ZTsKKwlpbnQgZXJyID0gLTE7CisKKwl3aGlsZSAob2Zmc2V0IDwgbGltaXQpIHsKKwkJc3RydWN0IGRzbyAqZHNvOworCQlzc2l6ZV90IGxlbjsKKwkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZkc29zX191c2VyOworCisJCWlmIChyZWFkKGlucHV0LCAmYmV2LCBzaXplb2YoYmV2KSkgIT0gc2l6ZW9mKGJldikpCisJCQlnb3RvIG91dDsKKworCQlpZiAoc2VsZi0+bmVlZHNfc3dhcCkKKwkJCXBlcmZfZXZlbnRfaGVhZGVyX19ic3dhcCgmYmV2LmhlYWRlcik7CisKKwkJbGVuID0gYmV2LmhlYWRlci5zaXplIC0gc2l6ZW9mKGJldik7CisJCWlmIChyZWFkKGlucHV0LCBmaWxlbmFtZSwgbGVuKSAhPSBsZW4pCisJCQlnb3RvIG91dDsKKworCQlpZiAoYmV2LmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpCisJCQloZWFkID0gJmRzb3NfX2tlcm5lbDsKKworCQlkc28gPSBfX2Rzb3NfX2ZpbmRuZXcoaGVhZCwgZmlsZW5hbWUpOworCQlpZiAoZHNvICE9IE5VTEwpIHsKKwkJCWRzb19fc2V0X2J1aWxkX2lkKGRzbywgJmJldi5idWlsZF9pZCk7CisJCQlpZiAoaGVhZCA9PSAmZHNvc19fa2VybmVsICYmIGZpbGVuYW1lWzBdID09ICdbJykKKwkJCQlkc28tPmtlcm5lbCA9IDE7CisJCX0KKworCQlvZmZzZXQgKz0gYmV2LmhlYWRlci5zaXplOworCX0KKwllcnIgPSAwOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkICpwZXJmX3Nlc3Npb25fX3JlZ2lzdGVyX2lkbGVfdGhyZWFkKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCit7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlbGYsIDApOworCisJaWYgKHRocmVhZCA9PSBOVUxMIHx8IHRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCAic3dhcHBlciIpKSB7CisJCXByX2VycigicHJvYmxlbSBpbnNlcnRpbmcgaWRsZSB0YXNrLlxuIik7CisJCXRocmVhZCA9IE5VTEw7CisJfQorCisJcmV0dXJuIHRocmVhZDsKK30KKworaW50IF9fcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSAgIHU2NCBkYXRhX29mZnNldCwgdTY0IGRhdGFfc2l6ZSwKKwkJCQkgICB1NjQgZmlsZV9zaXplLCBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcykKK3sKKwlpbnQgZXJyLCBtbWFwX3Byb3QsIG1tYXBfZmxhZ3M7CisJdTY0IGhlYWQsIHNoaWZ0OworCXU2NCBvZmZzZXQgPSAwOworCXNpemVfdAlwYWdlX3NpemU7CisJZXZlbnRfdCAqZXZlbnQ7CisJdWludDMyX3Qgc2l6ZTsKKwljaGFyICpidWY7CisKKwlwZXJmX2V2ZW50X29wc19fZmlsbF9kZWZhdWx0cyhvcHMpOworCisJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworCisJaGVhZCA9IGRhdGFfb2Zmc2V0OworCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOworCW9mZnNldCArPSBzaGlmdDsKKwloZWFkIC09IHNoaWZ0OworCisJbW1hcF9wcm90ICA9IFBST1RfUkVBRDsKKwltbWFwX2ZsYWdzID0gTUFQX1NIQVJFRDsKKworCWlmIChzZWxmLT5oZWFkZXIubmVlZHNfc3dhcCkgeworCQltbWFwX3Byb3QgIHw9IFBST1RfV1JJVEU7CisJCW1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURTsKKwl9CityZW1hcDoKKwlidWYgPSBtbWFwKE5VTEwsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93LCBtbWFwX3Byb3QsCisJCSAgIG1tYXBfZmxhZ3MsIHNlbGYtPmZkLCBvZmZzZXQpOworCWlmIChidWYgPT0gTUFQX0ZBSUxFRCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBtbWFwIGZpbGVcbiIpOworCQllcnIgPSAtZXJybm87CisJCWdvdG8gb3V0X2VycjsKKwl9CisKK21vcmU6CisJZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKKworCWlmIChzZWxmLT5oZWFkZXIubmVlZHNfc3dhcCkKKwkJcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKCZldmVudC0+aGVhZGVyKTsKKwlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOworCWlmIChzaXplID09IDApCisJCXNpemUgPSA4OworCisJaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3cpIHsKKwkJaW50IG11bm1hcF9yZXQ7CisKKwkJc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7CisKKwkJbXVubWFwX3JldCA9IG11bm1hcChidWYsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93KTsKKwkJYXNzZXJ0KG11bm1hcF9yZXQgPT0gMCk7CisKKwkJb2Zmc2V0ICs9IHNoaWZ0OworCQloZWFkIC09IHNoaWZ0OworCQlnb3RvIHJlbWFwOworCX0KKworCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CisKKwlkdW1wX3ByaW50ZigiXG4lI0x4IFslI3hdOiBldmVudDogJWRcbiIsCisJCSAgICBvZmZzZXQgKyBoZWFkLCBldmVudC0+aGVhZGVyLnNpemUsIGV2ZW50LT5oZWFkZXIudHlwZSk7CisKKwlpZiAoc2l6ZSA9PSAwIHx8CisJICAgIHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzZWxmLCBldmVudCwgb3BzLCBvZmZzZXQsIGhlYWQpIDwgMCkgeworCQlkdW1wX3ByaW50ZigiJSNMeCBbJSN4XTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCQkgICAgb2Zmc2V0ICsgaGVhZCwgZXZlbnQtPmhlYWRlci5zaXplLAorCQkJICAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CisJCS8qCisJCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCisJCSAqIGluY3JlbWVudCBhIHNpbmdsZSB1NjQgaW4gdGhlIGhvcGUgdG8gY2F0Y2ggb24gYWdhaW4gJ3Nvb24nLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KGhlYWQgJiA3KSkKKwkJCWhlYWQgJj0gfjdVTEw7CisKKwkJc2l6ZSA9IDg7CisJfQorCisJaGVhZCArPSBzaXplOworCisJaWYgKG9mZnNldCArIGhlYWQgPj0gZGF0YV9vZmZzZXQgKyBkYXRhX3NpemUpCisJCWdvdG8gZG9uZTsKKworCWlmIChvZmZzZXQgKyBoZWFkIDwgZmlsZV9zaXplKQorCQlnb3RvIG1vcmU7Citkb25lOgorCWVyciA9IDA7CitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKK2ludCBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQoreworCWludCBlcnI7CisKKwlpZiAocGVyZl9zZXNzaW9uX19yZWdpc3Rlcl9pZGxlX3RocmVhZChzZWxmKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghc3ltYm9sX2NvbmYuZnVsbF9wYXRocykgeworCQljaGFyIGJmW1BBVEhfTUFYXTsKKworCQlpZiAoZ2V0Y3dkKGJmLCBzaXplb2YoYmYpKSA9PSBOVUxMKSB7CisJCQllcnIgPSAtZXJybm87CitvdXRfZ2V0Y3dkX2VycjoKKwkJCXByX2VycigiZmFpbGVkIHRvIGdldCB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiIpOworCQkJZ290byBvdXRfZXJyOworCQl9CisJCXNlbGYtPmN3ZCA9IHN0cmR1cChiZik7CisJCWlmIChzZWxmLT5jd2QgPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2dldGN3ZF9lcnI7CisJCX0KKwkJc2VsZi0+Y3dkbGVuID0gc3RybGVuKHNlbGYtPmN3ZCk7CisJfQorCisJZXJyID0gX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIHNlbGYtPmhlYWRlci5kYXRhX29mZnNldCwKKwkJCQkJICAgICBzZWxmLT5oZWFkZXIuZGF0YV9zaXplLAorCQkJCQkgICAgIHNlbGYtPnNpemUsIG9wcyk7CitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKK2Jvb2wgcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpZiAoIShzZWxmLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKKwkJcHJfZXJyKCJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsICdwZXJmICVzJz9cbiIsIG1zZyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworaW50IHBlcmZfc2Vzc2lvbl9fc2V0X2thbGxzeW1zX3JlZl9yZWxvY19zeW0oc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkJICAgICBjb25zdCBjaGFyICpzeW1ib2xfbmFtZSwKKwkJCQkJICAgICB1NjQgYWRkcikKK3sKKwljaGFyICpicmFja2V0OworCWVudW0gbWFwX3R5cGUgaTsKKworCXNlbGYtPnJlZl9yZWxvY19zeW0ubmFtZSA9IHN0cmR1cChzeW1ib2xfbmFtZSk7CisJaWYgKHNlbGYtPnJlZl9yZWxvY19zeW0ubmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJyYWNrZXQgPSBzdHJjaHIoc2VsZi0+cmVmX3JlbG9jX3N5bS5uYW1lLCAnXScpOworCWlmIChicmFja2V0KQorCQkqYnJhY2tldCA9ICdcMCc7CisKKwlzZWxmLT5yZWZfcmVsb2Nfc3ltLmFkZHIgPSBhZGRyOworCisJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkgeworCQlzdHJ1Y3Qga21hcCAqa21hcCA9IG1hcF9fa21hcChzZWxmLT52bWxpbnV4X21hcHNbaV0pOworCQlrbWFwLT5yZWZfcmVsb2Nfc3ltID0gJnNlbGYtPnJlZl9yZWxvY19zeW07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgbWFwX19yZWxvY19tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCit7CisJcmV0dXJuIGlwICsgKHM2NCltYXAtPnBnb2ZmOworfQorCitzdGF0aWMgdTY0IG1hcF9fcmVsb2NfdW5tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCit7CisJcmV0dXJuIGlwIC0gKHM2NCltYXAtPnBnb2ZmOworfQorCit2b2lkIG1hcF9fcmVsb2Nfdm1saW51eChzdHJ1Y3QgbWFwICpzZWxmKQoreworCXN0cnVjdCBrbWFwICprbWFwID0gbWFwX19rbWFwKHNlbGYpOworCXM2NCByZWxvYzsKKworCWlmICgha21hcC0+cmVmX3JlbG9jX3N5bSB8fCAha21hcC0+cmVmX3JlbG9jX3N5bS0+dW5yZWxvY2F0ZWRfYWRkcikKKwkJcmV0dXJuOworCisJcmVsb2MgPSAoa21hcC0+cmVmX3JlbG9jX3N5bS0+dW5yZWxvY2F0ZWRfYWRkciAtCisJCSBrbWFwLT5yZWZfcmVsb2Nfc3ltLT5hZGRyKTsKKworCWlmICghcmVsb2MpCisJCXJldHVybjsKKworCXNlbGYtPm1hcF9pcCAgID0gbWFwX19yZWxvY19tYXBfaXA7CisJc2VsZi0+dW5tYXBfaXAgPSBtYXBfX3JlbG9jX3VubWFwX2lwOworCXNlbGYtPnBnb2ZmICAgID0gcmVsb2M7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAppbmRleCAzMmVhYTFiLi4zMTk1MGZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKQEAgLTMsMTMgKzMsMTMgQEAKIAogI2luY2x1ZGUgImV2ZW50LmgiCiAjaW5jbHVkZSAiaGVhZGVyLmgiCisjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSAidGhyZWFkLmgiCiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgiCiAKIHN0cnVjdCBpcF9jYWxsY2hhaW47CiBzdHJ1Y3QgdGhyZWFkOwotc3RydWN0IHN5bWJvbDsKIAogc3RydWN0IHBlcmZfc2Vzc2lvbiB7CiAJc3RydWN0IHBlcmZfaGVhZGVyCWhlYWRlcjsKQEAgLTE4LDEwICsxOCwxMyBAQAogCXN0cnVjdCBtYXBfZ3JvdXBzCWttYXBzOwogCXN0cnVjdCByYl9yb290CQl0aHJlYWRzOwogCXN0cnVjdCB0aHJlYWQJCSpsYXN0X21hdGNoOworCXN0cnVjdCBtYXAJCSp2bWxpbnV4X21hcHNbTUFQX19OUl9UWVBFU107CiAJc3RydWN0IGV2ZW50c19zdGF0cwlldmVudHNfc3RhdHM7CiAJdW5zaWduZWQgbG9uZwkJZXZlbnRfdG90YWxbUEVSRl9SRUNPUkRfTUFYXTsKKwl1bnNpZ25lZCBsb25nCQl1bmtub3duX2V2ZW50czsKIAlzdHJ1Y3QgcmJfcm9vdAkJaGlzdHM7CiAJdTY0CQkJc2FtcGxlX3R5cGU7CisJc3RydWN0IHJlZl9yZWxvY19zeW0JcmVmX3JlbG9jX3N5bTsKIAlpbnQJCQlmZDsKIAlpbnQJCQljd2RsZW47CiAJY2hhcgkJCSpjd2Q7CkBAIC0zMSwyMyArMzQsMjUgQEAKIHR5cGVkZWYgaW50ICgqZXZlbnRfb3ApKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogCiBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgewotCWV2ZW50X29wCXByb2Nlc3Nfc2FtcGxlX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfbW1hcF9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX2NvbW1fZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19mb3JrX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfZXhpdF9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX2xvc3RfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19yZWFkX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfdGhyb3R0bGVfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc191bnRocm90dGxlX2V2ZW50OwotCWludAkJKCpzYW1wbGVfdHlwZV9jaGVjaykoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7Ci0JdW5zaWduZWQgbG9uZwl0b3RhbF91bmtub3duOwotCWJvb2wJCWZ1bGxfcGF0aHM7CisJZXZlbnRfb3Agc2FtcGxlLAorCQkgbW1hcCwKKwkJIGNvbW0sCisJCSBmb3JrLAorCQkgZXhpdCwKKwkJIGxvc3QsCisJCSByZWFkLAorCQkgdGhyb3R0bGUsCisJCSB1bnRocm90dGxlOwogfTsKIAogc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGVyZl9zZXNzaW9uX19uZXcoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlLCBib29sIGZvcmNlKTsKIHZvaWQgcGVyZl9zZXNzaW9uX19kZWxldGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZik7CiAKK3ZvaWQgcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqc2VsZik7CisKK2ludCBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgICB1NjQgZGF0YV9vZmZzZXQsIHU2NCBkYXRhX3NpemUsIHU2NCBzaXplLAorCQkJCSAgIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKTsKIGludCBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCiAJCQkJIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqZXZlbnRfb3BzKTsKIApAQCAtNTYsNiArNjEsMjggQEAKIAkJCQkJCXN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLAogCQkJCQkJc3RydWN0IHN5bWJvbCAqKnBhcmVudCk7CiAKLWludCBwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoaW50IGlucHV0LCB1NjQgb2Zmc2V0LCB1NjQgZmlsZV9zaXplKTsKK2Jvb2wgcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIGNvbnN0IGNoYXIgKm1zZyk7CiAKK2ludCBwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgaW5wdXQsCisJCQkJdTY0IG9mZnNldCwgdTY0IGZpbGVfc2l6ZSk7CisKK2ludCBwZXJmX3Nlc3Npb25fX3NldF9rYWxsc3ltc19yZWZfcmVsb2Nfc3ltKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCSAgICAgY29uc3QgY2hhciAqc3ltYm9sX25hbWUsCisJCQkJCSAgICAgdTY0IGFkZHIpOworCit2b2lkIG1lbV9ic3dhcF82NCh2b2lkICpzcmMsIGludCBieXRlX3NpemUpOworCitzdGF0aWMgaW5saW5lIGludCBfX3BlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCQlzdHJ1Y3QgZHNvICprZXJuZWwpCit7CisJcmV0dXJuIF9fbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKCZzZWxmLT5rbWFwcywKKwkJCQkJCXNlbGYtPnZtbGludXhfbWFwcywga2VybmVsKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwICoKKwlwZXJmX3Nlc3Npb25fX25ld19tb2R1bGVfbWFwKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJICAgICB1NjQgc3RhcnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXJldHVybiBtYXBfZ3JvdXBzX19uZXdfbW9kdWxlKCZzZWxmLT5rbWFwcywgc3RhcnQsIGZpbGVuYW1lKTsKK30KICNlbmRpZiAvKiBfX1BFUkZfU0VTU0lPTl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMgYi90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKaW5kZXggNTM1MmQ3ZC4uYzM5N2Q0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwpAQCAtMjI3LDE2ICsyMjcsNzMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogR2xvYiBleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcgKi8KKy8qIENoYXJhY3RlciBjbGFzcyBtYXRjaGluZyAqLworc3RhdGljIGJvb2wgX19tYXRjaF9jaGFyY2xhc3MoY29uc3QgY2hhciAqcGF0LCBjaGFyIGMsIGNvbnN0IGNoYXIgKipucGF0KQoreworCWJvb2wgY29tcGxlbWVudCA9IGZhbHNlLCByZXQgPSB0cnVlOworCisJaWYgKCpwYXQgPT0gJyEnKSB7CisJCWNvbXBsZW1lbnQgPSB0cnVlOworCQlwYXQrKzsKKwl9CisJaWYgKCpwYXQrKyA9PSBjKQkvKiBGaXJzdCBjaGFyYWN0ZXIgaXMgc3BlY2lhbCAqLworCQlnb3RvIGVuZDsKKworCXdoaWxlICgqcGF0ICYmICpwYXQgIT0gJ10nKSB7CS8qIE1hdGNoaW5nICovCisJCWlmICgqcGF0ID09ICctJyAmJiAqKHBhdCArIDEpICE9ICddJykgewkvKiBSYW5nZSAqLworCQkJaWYgKCoocGF0IC0gMSkgPD0gYyAmJiBjIDw9ICoocGF0ICsgMSkpCisJCQkJZ290byBlbmQ7CisJCQlpZiAoKihwYXQgLSAxKSA+ICoocGF0ICsgMSkpCisJCQkJZ290byBlcnJvcjsKKwkJCXBhdCArPSAyOworCQl9IGVsc2UgaWYgKCpwYXQrKyA9PSBjKQorCQkJZ290byBlbmQ7CisJfQorCWlmICghKnBhdCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBmYWxzZTsKKworZW5kOgorCXdoaWxlICgqcGF0ICYmICpwYXQgIT0gJ10nKQkvKiBTZWFyY2hpbmcgY2xvc2luZyAqLworCQlwYXQrKzsKKwlpZiAoISpwYXQpCisJCWdvdG8gZXJyb3I7CisJKm5wYXQgPSBwYXQgKyAxOworCXJldHVybiBjb21wbGVtZW50ID8gIXJldCA6IHJldDsKKworZXJyb3I6CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHN0cmdsb2JtYXRjaCAtIGdsb2IgZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nCisgKiBAc3RyOiB0aGUgdGFyZ2V0IHN0cmluZyB0byBtYXRjaAorICogQHBhdDogdGhlIHBhdHRlcm4gc3RyaW5nIHRvIG1hdGNoCisgKgorICogVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIEBzdHIgbWF0Y2hlcyBAcGF0LiBAcGF0IGNhbiBpbmNsdWRlcyB3aWxkY2FyZHMKKyAqICgnKicsJz8nKSBhbmQgY2hhcmFjdGVyIGNsYXNzZXMgKFtDSEFSU10sIGNvbXBsZW1lbnRhdGlvbiBhbmQgcmFuZ2VzIGFyZQorICogYWxzbyBzdXBwb3J0ZWQpLiBBbHNvLCB0aGlzIHN1cHBvcnRzIGVzY2FwZSBjaGFyYWN0ZXIgKCdcJykgdG8gdXNlIHNwZWNpYWwKKyAqIGNoYXJhY3RlcnMgYXMgbm9ybWFsIGNoYXJhY3Rlci4KKyAqCisgKiBOb3RlOiBpZiBAcGF0IHN5bnRheCBpcyBicm9rZW4sIHRoaXMgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgKi8KIGJvb2wgc3RyZ2xvYm1hdGNoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQogewogCXdoaWxlICgqc3RyICYmICpwYXQgJiYgKnBhdCAhPSAnKicpIHsKLQkJaWYgKCpwYXQgPT0gJz8nKSB7CisJCWlmICgqcGF0ID09ICc/JykgewkvKiBNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyICovCiAJCQlzdHIrKzsKIAkJCXBhdCsrOwotCQl9IGVsc2UKLQkJCWlmICgqc3RyKysgIT0gKnBhdCsrKQorCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoKnBhdCA9PSAnWycpCS8qIENoYXJhY3RlciBjbGFzc2VzL1JhbmdlcyAqLworCQkJaWYgKF9fbWF0Y2hfY2hhcmNsYXNzKHBhdCArIDEsICpzdHIsICZwYXQpKSB7CisJCQkJc3RyKys7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UKIAkJCQlyZXR1cm4gZmFsc2U7CisJCWVsc2UgaWYgKCpwYXQgPT0gJ1xcJykgLyogRXNjYXBlZCBjaGFyIG1hdGNoIGFzIG5vcm1hbCBjaGFyICovCisJCQlwYXQrKzsKKwkJaWYgKCpzdHIrKyAhPSAqcGF0KyspCisJCQlyZXR1cm4gZmFsc2U7CiAJfQogCS8qIENoZWNrIHdpbGQgY2FyZCAqLwogCWlmICgqcGF0ID09ICcqJykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IGFiOTI3NjMuLjMyM2MwYWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTEsNiArMSw1IEBACiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJzZXNzaW9uLmgiCiAjaW5jbHVkZSAic29ydC5oIgogI2luY2x1ZGUgInN0cmluZy5oIgogI2luY2x1ZGUgInN5bWJvbC5oIgpAQCAtMjIsNiArMjEsNyBAQAogZW51bSBkc29fb3JpZ2luIHsKIAlEU09fX09SSUdfS0VSTkVMID0gMCwKIAlEU09fX09SSUdfSkFWQV9KSVQsCisJRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFLAogCURTT19fT1JJR19GRURPUkEsCiAJRFNPX19PUklHX1VCVU5UVSwKIAlEU09fX09SSUdfQlVJTERJRCwKQEAgLTMzLDcgKzMzLDcgQEAKIHN0YXRpYyB2b2lkIGRzb3NfX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgZHNvICpkc28pOwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKTsKIHN0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwogc3RhdGljIGludCB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7CiBzdGF0aWMgY2hhciAqKnZtbGludXhfcGF0aDsKIApAQCAtNTMsMTcgKzUzLDEyIEBACiAJcmV0dXJuIHNlbGYtPnNvcnRlZF9ieV9uYW1lICYgKDEgPDwgdHlwZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzb19fc2V0X2xvYWRlZChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCi17Ci0Jc2VsZi0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOwotfQotCiBzdGF0aWMgdm9pZCBkc29fX3NldF9zb3J0ZWRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCiB7CiAJc2VsZi0+c29ydGVkX2J5X25hbWUgfD0gKDEgPDwgdHlwZSk7CiB9CiAKLXN0YXRpYyBib29sIHN5bWJvbF90eXBlX19pc19hKGNoYXIgc3ltYm9sX3R5cGUsIGVudW0gbWFwX3R5cGUgbWFwX3R5cGUpCitib29sIHN5bWJvbF90eXBlX19pc19hKGNoYXIgc3ltYm9sX3R5cGUsIGVudW0gbWFwX3R5cGUgbWFwX3R5cGUpCiB7CiAJc3dpdGNoIChtYXBfdHlwZSkgewogCWNhc2UgTUFQX19GVU5DVElPTjoKQEAgLTE0MiwxNCArMTM3LDE0IEBACiAJc2VsZi0+c3RhcnQgPSBzdGFydDsKIAlzZWxmLT5lbmQgICA9IGxlbiA/IHN0YXJ0ICsgbGVuIC0gMSA6IHN0YXJ0OwogCi0JcHJfZGVidWczKCIlczogJXMgJSNMeC0lI0x4XG4iLCBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHNlbGYtPmVuZCk7CisJcHJfZGVidWc0KCIlczogJXMgJSNMeC0lI0x4XG4iLCBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHNlbGYtPmVuZCk7CiAKIAltZW1jcHkoc2VsZi0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CiAKIAlyZXR1cm4gc2VsZjsKIH0KIAotc3RhdGljIHZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc2VsZikKK3ZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc2VsZikKIHsKIAlmcmVlKCgodm9pZCAqKXNlbGYpIC0gc3ltYm9sX2NvbmYucHJpdl9zaXplKTsKIH0KQEAgLTE2MCw3ICsxNTUsNyBAQAogCQkgICAgICAgc2VsZi0+c3RhcnQsIHNlbGYtPmVuZCwgc2VsZi0+bmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzb19fc2V0X2xvbmdfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBjaGFyICpuYW1lKQordm9pZCBkc29fX3NldF9sb25nX25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqbmFtZSkKIHsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xNzUsNyArMTcwLDcgQEAKIAogc3RydWN0IGRzbyAqZHNvX19uZXcoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikgKyBzdHJsZW4obmFtZSkgKyAxKTsKKwlzdHJ1Y3QgZHNvICpzZWxmID0gemFsbG9jKHNpemVvZigqc2VsZikgKyBzdHJsZW4obmFtZSkgKyAxKTsKIAogCWlmIChzZWxmICE9IE5VTEwpIHsKIAkJaW50IGk7CkBAIC0zNDQsMTAgKzMzOSwxMCBAQAogCQkJCSAgICAgJnNlbGYtPnN5bWJvbHNbdHlwZV0pOwogfQogCi1pbnQgYnVpbGRfaWRfX3NwcmludGYodTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKQoraW50IGJ1aWxkX2lkX19zcHJpbnRmKGNvbnN0IHU4ICpzZWxmLCBpbnQgbGVuLCBjaGFyICpiZikKIHsKIAljaGFyICpiaWQgPSBiZjsKLQl1OCAqcmF3ID0gc2VsZjsKKwljb25zdCB1OCAqcmF3ID0gc2VsZjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewpAQCAtMzcyLDYgKzM2NywxMCBAQAogCXN0cnVjdCByYl9ub2RlICpuZDsKIAlzaXplX3QgcmV0ID0gZnByaW50ZihmcCwgImRzbzogJXMgKCIsIHNlbGYtPnNob3J0X25hbWUpOwogCisJaWYgKHNlbGYtPnNob3J0X25hbWUgIT0gc2VsZi0+bG9uZ19uYW1lKQorCQlyZXQgKz0gZnByaW50ZihmcCwgIiVzLCAiLCBzZWxmLT5sb25nX25hbWUpOworCXJldCArPSBmcHJpbnRmKGZwLCAiJXMsICVzbG9hZGVkLCAiLCBtYXBfdHlwZV9fbmFtZVt0eXBlXSwKKwkJICAgICAgIHNlbGYtPmxvYWRlZCA/ICIiIDogIk5PVCAiKTsKIAlyZXQgKz0gZHNvX19mcHJpbnRmX2J1aWxkaWQoc2VsZiwgZnApOwogCXJldCArPSBmcHJpbnRmKGZwLCAiKVxuIik7CiAJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZWxmLT5zeW1ib2xzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKQEAgLTM4MiwyNCArMzgxLDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIExvYWRzIHRoZSBmdW5jdGlvbiBlbnRyaWVzIGluIC9wcm9jL2thbGxzeW1zIGludG8ga2VybmVsX21hcC0+ZHNvLAotICogc28gdGhhdCB3ZSBjYW4gaW4gdGhlIG5leHQgc3RlcCBzZXQgdGhlIHN5bWJvbCAtPmVuZCBhZGRyZXNzIGFuZCB0aGVuCi0gKiBjYWxsIGtlcm5lbF9tYXBzX19zcGxpdF9rYWxsc3ltcy4KLSAqLwotc3RhdGljIGludCBkc29fX2xvYWRfYWxsX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCkKK2ludCBrYWxsc3ltc19fcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmFyZywKKwkJICAgIGludCAoKnByb2Nlc3Nfc3ltYm9sKSh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkgICAgIGNoYXIgdHlwZSwgdTY0IHN0YXJ0KSkKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlzaXplX3QgbjsKLQlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV07Ci0JRklMRSAqZmlsZSA9IGZvcGVuKCIvcHJvYy9rYWxsc3ltcyIsICJyIik7CisJaW50IGVyciA9IDA7CisJRklMRSAqZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwogCiAJaWYgKGZpbGUgPT0gTlVMTCkKIAkJZ290byBvdXRfZmFpbHVyZTsKIAogCXdoaWxlICghZmVvZihmaWxlKSkgewogCQl1NjQgc3RhcnQ7Ci0JCXN0cnVjdCBzeW1ib2wgKnN5bTsKIAkJaW50IGxpbmVfbGVuLCBsZW47CiAJCWNoYXIgc3ltYm9sX3R5cGU7CiAJCWNoYXIgKnN5bWJvbF9uYW1lOwpAQCAtNDIwLDQzICs0MTUsNzIgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXN5bWJvbF90eXBlID0gdG91cHBlcihsaW5lW2xlbl0pOwotCQlpZiAoIXN5bWJvbF90eXBlX19pc19hKHN5bWJvbF90eXBlLCBtYXAtPnR5cGUpKQotCQkJY29udGludWU7Ci0KIAkJc3ltYm9sX25hbWUgPSBsaW5lICsgbGVuICsgMjsKLQkJLyoKLQkJICogV2lsbCBmaXggdXAgdGhlIGVuZCBsYXRlciwgd2hlbiB3ZSBoYXZlIGFsbCBzeW1ib2xzIHNvcnRlZC4KLQkJICovCi0JCXN5bSA9IHN5bWJvbF9fbmV3KHN0YXJ0LCAwLCBzeW1ib2xfbmFtZSk7CiAKLQkJaWYgKHN5bSA9PSBOVUxMKQotCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0JCS8qCi0JCSAqIFdlIHdpbGwgcGFzcyB0aGUgc3ltYm9scyB0byB0aGUgZmlsdGVyIGxhdGVyLCBpbgotCQkgKiBtYXBfX3NwbGl0X2thbGxzeW1zLCB3aGVuIHdlIGhhdmUgc3BsaXQgdGhlIG1hcHMgcGVyIG1vZHVsZQotCQkgKi8KLQkJc3ltYm9sc19faW5zZXJ0KHJvb3QsIHN5bSk7CisJCWVyciA9IHByb2Nlc3Nfc3ltYm9sKGFyZywgc3ltYm9sX25hbWUsIHN5bWJvbF90eXBlLCBzdGFydCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKIAl9CiAKIAlmcmVlKGxpbmUpOwogCWZjbG9zZShmaWxlKTsKKwlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7Ci0KLW91dF9kZWxldGVfbGluZToKLQlmcmVlKGxpbmUpOwogb3V0X2ZhaWx1cmU6CiAJcmV0dXJuIC0xOwogfQogCitzdHJ1Y3QgcHJvY2Vzc19rYWxsc3ltc19hcmdzIHsKKwlzdHJ1Y3QgbWFwICptYXA7CisJc3RydWN0IGRzbyAqZHNvOworfTsKKworc3RhdGljIGludCBtYXBfX3Byb2Nlc3Nfa2FsbHN5bV9zeW1ib2wodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgICBjaGFyIHR5cGUsIHU2NCBzdGFydCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb2Nlc3Nfa2FsbHN5bXNfYXJncyAqYSA9IGFyZzsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZhLT5kc28tPnN5bWJvbHNbYS0+bWFwLT50eXBlXTsKKworCWlmICghc3ltYm9sX3R5cGVfX2lzX2EodHlwZSwgYS0+bWFwLT50eXBlKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdpbGwgZml4IHVwIHRoZSBlbmQgbGF0ZXIsIHdoZW4gd2UgaGF2ZSBhbGwgc3ltYm9scyBzb3J0ZWQuCisJICovCisJc3ltID0gc3ltYm9sX19uZXcoc3RhcnQsIDAsIG5hbWUpOworCisJaWYgKHN5bSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKgorCSAqIFdlIHdpbGwgcGFzcyB0aGUgc3ltYm9scyB0byB0aGUgZmlsdGVyIGxhdGVyLCBpbgorCSAqIG1hcF9fc3BsaXRfa2FsbHN5bXMsIHdoZW4gd2UgaGF2ZSBzcGxpdCB0aGUgbWFwcyBwZXIgbW9kdWxlCisJICovCisJc3ltYm9sc19faW5zZXJ0KHJvb3QsIHN5bSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2FkcyB0aGUgZnVuY3Rpb24gZW50cmllcyBpbiAvcHJvYy9rYWxsc3ltcyBpbnRvIGtlcm5lbF9tYXAtPmRzbywKKyAqIHNvIHRoYXQgd2UgY2FuIGluIHRoZSBuZXh0IHN0ZXAgc2V0IHRoZSBzeW1ib2wgLT5lbmQgYWRkcmVzcyBhbmQgdGhlbgorICogY2FsbCBrZXJuZWxfbWFwc19fc3BsaXRfa2FsbHN5bXMuCisgKi8KK3N0YXRpYyBpbnQgZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgIHN0cnVjdCBtYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19rYWxsc3ltc19hcmdzIGFyZ3MgPSB7IC5tYXAgPSBtYXAsIC5kc28gPSBzZWxmLCB9OworCXJldHVybiBrYWxsc3ltc19fcGFyc2UoZmlsZW5hbWUsICZhcmdzLCBtYXBfX3Byb2Nlc3Nfa2FsbHN5bV9zeW1ib2wpOworfQorCiAvKgogICogU3BsaXQgdGhlIHN5bWJvbHMgaW50byBtYXBzLCBtYWtpbmcgc3VyZSB0aGVyZSBhcmUgbm8gb3ZlcmxhcHMsIGkuZS4gdGhlCiAgKiBrZXJuZWwgcmFuZ2UgaXMgYnJva2VuIGluIHNldmVyYWwgbWFwcywgbmFtZWQgW2tlcm5lbF0uTiwgYXMgd2UgZG9uJ3QgaGF2ZQogICogdGhlIG9yaWdpbmFsIEVMRiBzZWN0aW9uIG5hbWVzIHZtbGludXggaGF2ZS4KICAqLwogc3RhdGljIGludCBkc29fX3NwbGl0X2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorCQkJICAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CisJc3RydWN0IG1hcF9ncm91cHMgKmttYXBzID0gbWFwX19rbWFwKG1hcCktPmttYXBzOwogCXN0cnVjdCBtYXAgKmN1cnJfbWFwID0gbWFwOwogCXN0cnVjdCBzeW1ib2wgKnBvczsKIAlpbnQgY291bnQgPSAwOwpAQCAtNDc3LDEzICs1MDEsMTcgQEAKIAogCQkJKm1vZHVsZSsrID0gJ1wwJzsKIAotCQkJaWYgKHN0cmNtcChzZWxmLT5uYW1lLCBtb2R1bGUpKSB7Ci0JCQkJY3Vycl9tYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoJnNlc3Npb24tPmttYXBzLCBtYXAtPnR5cGUsIG1vZHVsZSk7CisJCQlpZiAoc3RyY21wKGN1cnJfbWFwLT5kc28tPnNob3J0X25hbWUsIG1vZHVsZSkpIHsKKwkJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZShrbWFwcywgbWFwLT50eXBlLCBtb2R1bGUpOwogCQkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CiAJCQkJCXByX2RlYnVnKCIvcHJvYy97a2FsbHN5bXMsbW9kdWxlc30gIgotCQkJCQkgICAgICAgICAiaW5jb25zaXN0ZW5jeSFcbiIpOworCQkJCQkgICAgICAgICAiaW5jb25zaXN0ZW5jeSB3aGlsZSBsb29raW5nICIKKwkJCQkJCSAiZm9yIFwiJXNcIiBtb2R1bGUhXG4iLCBtb2R1bGUpOwogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQorCisJCQkJaWYgKGN1cnJfbWFwLT5kc28tPmxvYWRlZCkKKwkJCQkJZ290byBkaXNjYXJkX3N5bWJvbDsKIAkJCX0KIAkJCS8qCiAJCQkgKiBTbyB0aGF0IHdlIGxvb2sganVzdCBsaWtlIHdlIGdldCBmcm9tIC5rbyBmaWxlcywKQEAgLTUwMywxMyArNTMxLDEzIEBACiAJCQkJcmV0dXJuIC0xOwogCiAJCQljdXJyX21hcCA9IG1hcF9fbmV3Mihwb3MtPnN0YXJ0LCBkc28sIG1hcC0+dHlwZSk7Ci0JCQlpZiAobWFwID09IE5VTEwpIHsKKwkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CiAJCQkJZHNvX19kZWxldGUoZHNvKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKIAkJCWN1cnJfbWFwLT5tYXBfaXAgPSBjdXJyX21hcC0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwotCQkJbWFwX2dyb3Vwc19faW5zZXJ0KCZzZXNzaW9uLT5rbWFwcywgY3Vycl9tYXApOworCQkJbWFwX2dyb3Vwc19faW5zZXJ0KGttYXBzLCBjdXJyX21hcCk7CiAJCQkrK2tlcm5lbF9yYW5nZTsKIAkJfQogCkBAIC01MjgsMTcgKzU1NiwxNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotCi1zdGF0aWMgaW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoraW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJICAgICAgIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlpZiAoZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhzZWxmLCBtYXApIDwgMCkKKwlpZiAoZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhzZWxmLCBmaWxlbmFtZSwgbWFwKSA8IDApCiAJCXJldHVybiAtMTsKIAogCXN5bWJvbHNfX2ZpeHVwX2VuZCgmc2VsZi0+c3ltYm9sc1ttYXAtPnR5cGVdKTsKIAlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfS0VSTkVMOwogCi0JcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoc2VsZiwgbWFwLCBzZXNzaW9uLCBmaWx0ZXIpOworCXJldHVybiBkc29fX3NwbGl0X2thbGxzeW1zKHNlbGYsIG1hcCwgZmlsdGVyKTsKIH0KIAogc3RhdGljIGludCBkc29fX2xvYWRfcGVyZl9tYXAoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLApAQCAtODY0LDEwICs4OTEsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZHNvX19sb2FkX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGZkLAotCQkJIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCBrZXJuZWwsIGludCBrbW9kdWxlKQorc3RhdGljIGludCBkc29fX2xvYWRfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBpbnQgZmQsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCBrbW9kdWxlKQogeworCXN0cnVjdCBrbWFwICprbWFwID0gc2VsZi0+a2VybmVsID8gbWFwX19rbWFwKG1hcCkgOiBOVUxMOwogCXN0cnVjdCBtYXAgKmN1cnJfbWFwID0gbWFwOwogCXN0cnVjdCBkc28gKmN1cnJfZHNvID0gc2VsZjsKIAlzaXplX3QgZHNvX25hbWVfbGVuID0gc3RybGVuKHNlbGYtPnNob3J0X25hbWUpOwpAQCAtOTI0LDcgKzk1MSw3IEBACiAJbnJfc3ltcyA9IHNoZHIuc2hfc2l6ZSAvIHNoZHIuc2hfZW50c2l6ZTsKIAogCW1lbXNldCgmc3ltLCAwLCBzaXplb2Yoc3ltKSk7Ci0JaWYgKCFrZXJuZWwpIHsKKwlpZiAoIXNlbGYtPmtlcm5lbCkgewogCQlzZWxmLT5hZGp1c3Rfc3ltYm9scyA9IChlaGRyLmVfdHlwZSA9PSBFVF9FWEVDIHx8CiAJCQkJZWxmX3NlY3Rpb25fYnlfbmFtZShlbGYsICZlaGRyLCAmc2hkciwKIAkJCQkJCSAgICAgIi5nbnUucHJlbGlua191bmRvIiwKQEAgLTkzMywxMSArOTYwLDE1IEBACiAKIAllbGZfc3ltdGFiX19mb3JfZWFjaF9zeW1ib2woc3ltcywgbnJfc3ltcywgaWR4LCBzeW0pIHsKIAkJc3RydWN0IHN5bWJvbCAqZjsKLQkJY29uc3QgY2hhciAqZWxmX25hbWU7CisJCWNvbnN0IGNoYXIgKmVsZl9uYW1lID0gZWxmX3N5bV9fbmFtZSgmc3ltLCBzeW1zdHJzKTsKIAkJY2hhciAqZGVtYW5nbGVkID0gTlVMTDsKIAkJaW50IGlzX2xhYmVsID0gZWxmX3N5bV9faXNfbGFiZWwoJnN5bSk7CiAJCWNvbnN0IGNoYXIgKnNlY3Rpb25fbmFtZTsKIAorCQlpZiAoa21hcCAmJiBrbWFwLT5yZWZfcmVsb2Nfc3ltICYmIGttYXAtPnJlZl9yZWxvY19zeW0tPm5hbWUgJiYKKwkJICAgIHN0cmNtcChlbGZfbmFtZSwga21hcC0+cmVmX3JlbG9jX3N5bS0+bmFtZSkgPT0gMCkKKwkJCWttYXAtPnJlZl9yZWxvY19zeW0tPnVucmVsb2NhdGVkX2FkZHIgPSBzeW0uc3RfdmFsdWU7CisKIAkJaWYgKCFpc19sYWJlbCAmJiAhZWxmX3N5bV9faXNfYSgmc3ltLCBtYXAtPnR5cGUpKQogCQkJY29udGludWU7CiAKQEAgLTk1MCwxMCArOTgxLDkgQEAKIAkJaWYgKGlzX2xhYmVsICYmICFlbGZfc2VjX19pc19hKCZzaGRyLCBzZWNzdHJzLCBtYXAtPnR5cGUpKQogCQkJY29udGludWU7CiAKLQkJZWxmX25hbWUgPSBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpOwogCQlzZWN0aW9uX25hbWUgPSBlbGZfc2VjX19uYW1lKCZzaGRyLCBzZWNzdHJzKTsKIAotCQlpZiAoa2VybmVsIHx8IGttb2R1bGUpIHsKKwkJaWYgKHNlbGYtPmtlcm5lbCB8fCBrbW9kdWxlKSB7CiAJCQljaGFyIGRzb19uYW1lW1BBVEhfTUFYXTsKIAogCQkJaWYgKHN0cmNtcChzZWN0aW9uX25hbWUsCkBAIC05NjksNyArOTk5LDcgQEAKIAkJCXNucHJpbnRmKGRzb19uYW1lLCBzaXplb2YoZHNvX25hbWUpLAogCQkJCSAiJXMlcyIsIHNlbGYtPnNob3J0X25hbWUsIHNlY3Rpb25fbmFtZSk7CiAKLQkJCWN1cnJfbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKCZzZXNzaW9uLT5rbWFwcywgbWFwLT50eXBlLCBkc29fbmFtZSk7CisJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZShrbWFwLT5rbWFwcywgbWFwLT50eXBlLCBkc29fbmFtZSk7CiAJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgewogCQkJCXU2NCBzdGFydCA9IHN5bS5zdF92YWx1ZTsKIApAQCAtOTgwLDcgKzEwMTAsNyBAQAogCQkJCWlmIChjdXJyX2RzbyA9PSBOVUxMKQogCQkJCQlnb3RvIG91dF9lbGZfZW5kOwogCQkJCWN1cnJfbWFwID0gbWFwX19uZXcyKHN0YXJ0LCBjdXJyX2RzbywKLQkJCQkJCSAgICAgTUFQX19GVU5DVElPTik7CisJCQkJCQkgICAgIG1hcC0+dHlwZSk7CiAJCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKIAkJCQkJZHNvX19kZWxldGUoY3Vycl9kc28pOwogCQkJCQlnb3RvIG91dF9lbGZfZW5kOwpAQCAtOTg4LDggKzEwMTgsOSBAQAogCQkJCWN1cnJfbWFwLT5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwogCQkJCWN1cnJfbWFwLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CiAJCQkJY3Vycl9kc28tPm9yaWdpbiA9IERTT19fT1JJR19LRVJORUw7Ci0JCQkJbWFwX2dyb3Vwc19faW5zZXJ0KCZzZXNzaW9uLT5rbWFwcywgY3Vycl9tYXApOworCQkJCW1hcF9ncm91cHNfX2luc2VydChrbWFwLT5rbWFwcywgY3Vycl9tYXApOwogCQkJCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBjdXJyX2Rzbyk7CisJCQkJZHNvX19zZXRfbG9hZGVkKGN1cnJfZHNvLCBtYXAtPnR5cGUpOwogCQkJfSBlbHNlCiAJCQkJY3Vycl9kc28gPSBjdXJyX21hcC0+ZHNvOwogCkBAIC05OTcsOSArMTAyOCwxMCBAQAogCQl9CiAKIAkJaWYgKGN1cnJfZHNvLT5hZGp1c3Rfc3ltYm9scykgewotCQkJcHJfZGVidWcyKCJhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJUx4IHNoX2FkZHI6ICIKLQkJCQkgICIlTHggc2hfb2Zmc2V0OiAlTHhcbiIsICh1NjQpc3ltLnN0X3ZhbHVlLAotCQkJCSAgKHU2NClzaGRyLnNoX2FkZHIsICh1NjQpc2hkci5zaF9vZmZzZXQpOworCQkJcHJfZGVidWc0KCIlczogYWRqdXN0aW5nIHN5bWJvbDogc3RfdmFsdWU6ICUjTHggIgorCQkJCSAgInNoX2FkZHI6ICUjTHggc2hfb2Zmc2V0OiAlI0x4XG4iLCBfX2Z1bmNfXywKKwkJCQkgICh1NjQpc3ltLnN0X3ZhbHVlLCAodTY0KXNoZHIuc2hfYWRkciwKKwkJCQkgICh1NjQpc2hkci5zaF9vZmZzZXQpOwogCQkJc3ltLnN0X3ZhbHVlIC09IHNoZHIuc2hfYWRkciAtIHNoZHIuc2hfb2Zmc2V0OwogCQl9CiAJCS8qCkBAIC0xMDI3LDggKzEwNTksMTYgQEAKIAkvKgogCSAqIEZvciBtaXNhbm5vdGF0ZWQsIHplcm9lZCwgQVNNIGZ1bmN0aW9uIHNpemVzLgogCSAqLwotCWlmIChuciA+IDApCisJaWYgKG5yID4gMCkgewogCQlzeW1ib2xzX19maXh1cF9lbmQoJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXSk7CisJCWlmIChrbWFwKSB7CisJCQkvKgorCQkJICogV2UgbmVlZCB0byBmaXh1cCB0aGlzIGhlcmUgdG9vIGJlY2F1c2Ugd2UgY3JlYXRlIG5ldworCQkJICogbWFwcyBoZXJlLCBmb3IgdGhpbmdzIGxpa2UgdnN5c2NhbGwgc2VjdGlvbnMuCisJCQkgKi8KKwkJCV9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKGttYXAtPmttYXBzLCBtYXAtPnR5cGUpOworCQl9CisJfQogCWVyciA9IG5yOwogb3V0X2VsZl9lbmQ6CiAJZWxmX2VuZChlbGYpOwpAQCAtMTA0MSwyNSArMTA4MSwyOCBAQAogCXJldHVybiBtZW1jbXAoc2VsZi0+YnVpbGRfaWQsIGJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpKSA9PSAwOwogfQogCi1zdGF0aWMgYm9vbCBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCitzdGF0aWMgYm9vbCBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgd2l0aF9oaXRzKQogewogCWJvb2wgaGF2ZV9idWlsZF9pZCA9IGZhbHNlOwogCXN0cnVjdCBkc28gKnBvczsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKSB7CisJCWlmICh3aXRoX2hpdHMgJiYgIXBvcy0+aGl0KQorCQkJY29udGludWU7CiAJCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChwb3MtPmxvbmdfbmFtZSwgcG9zLT5idWlsZF9pZCwKIAkJCQkJICAgIHNpemVvZihwb3MtPmJ1aWxkX2lkKSkgPiAwKSB7CiAJCQloYXZlX2J1aWxkX2lkCSAgPSB0cnVlOwogCQkJcG9zLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwogCQl9CisJfQogCiAJcmV0dXJuIGhhdmVfYnVpbGRfaWQ7CiB9CiAKLWJvb2wgZHNvc19fcmVhZF9idWlsZF9pZHModm9pZCkKK2Jvb2wgZHNvc19fcmVhZF9idWlsZF9pZHMoYm9vbCB3aXRoX2hpdHMpCiB7Ci0JYm9vbCBrYnVpbGRpZHMgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZkc29zX19rZXJuZWwpLAotCSAgICAgdWJ1aWxkaWRzID0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmZHNvc19fdXNlcik7CisJYm9vbCBrYnVpbGRpZHMgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZkc29zX19rZXJuZWwsIHdpdGhfaGl0cyksCisJICAgICB1YnVpbGRpZHMgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZkc29zX191c2VyLCB3aXRoX2hpdHMpOwogCXJldHVybiBrYnVpbGRpZHMgfHwgdWJ1aWxkaWRzOwogfQogCkBAIC0xMTkxLDYgKzEyMzQsNyBAQAogCXN0YXRpYyBjb25zdCBjaGFyIG9yaWdpbltdID0gewogCQlbRFNPX19PUklHX0tFUk5FTF0gPSAgICdrJywKIAkJW0RTT19fT1JJR19KQVZBX0pJVF0gPSAnaicsCisJCVtEU09fX09SSUdfQlVJTERfSURfQ0FDSEVdID0gJ0InLAogCQlbRFNPX19PUklHX0ZFRE9SQV0gPSAgICdmJywKIAkJW0RTT19fT1JJR19VQlVOVFVdID0gICAndScsCiAJCVtEU09fX09SSUdfQlVJTERJRF0gPSAgJ2InLApAQCAtMTIwMywxOSArMTI0NywxOSBAQAogCXJldHVybiBvcmlnaW5bc2VsZi0+b3JpZ2luXTsKIH0KIAotaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCi0JICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK2ludCBkc29fX2xvYWQoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBzaXplID0gUEFUSF9NQVg7CiAJY2hhciAqbmFtZTsKIAl1OCBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKKwljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwogCWludCByZXQgPSAtMTsKIAlpbnQgZmQ7CiAKIAlkc29fX3NldF9sb2FkZWQoc2VsZiwgbWFwLT50eXBlKTsKIAogCWlmIChzZWxmLT5rZXJuZWwpCi0JCXJldHVybiBkc29fX2xvYWRfa2VybmVsX3N5bShzZWxmLCBtYXAsIHNlc3Npb24sIGZpbHRlcik7CisJCXJldHVybiBkc29fX2xvYWRfa2VybmVsX3N5bShzZWxmLCBtYXAsIGZpbHRlcik7CiAKIAluYW1lID0gbWFsbG9jKHNpemUpOwogCWlmICghbmFtZSkKQEAgLTEyMzAsOCArMTI3NCwxNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXNlbGYtPm9yaWdpbiA9IERTT19fT1JJR19GRURPUkEgLSAxOworCXNlbGYtPm9yaWdpbiA9IERTT19fT1JJR19CVUlMRF9JRF9DQUNIRTsKIAorCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKKwkJYnVpbGRfaWRfX3NwcmludGYoc2VsZi0+YnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQkJICBidWlsZF9pZF9oZXgpOworCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMvJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkJIGdldGVudigiSE9NRSIpLCBERUJVR19DQUNIRV9ESVIsCisJCQkgYnVpbGRfaWRfaGV4LCBidWlsZF9pZF9oZXggKyAyKTsKKwkJZ290byBvcGVuX2ZpbGU7CisJfQogbW9yZToKIAlkbyB7CiAJCXNlbGYtPm9yaWdpbisrOwpAQCAtMTI0Nyw4ICsxMjk5LDYgQEAKIAkJY2FzZSBEU09fX09SSUdfQlVJTERJRDoKIAkJCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChzZWxmLT5sb25nX25hbWUsIGJ1aWxkX2lkLAogCQkJCQkJICAgIHNpemVvZihidWlsZF9pZCkpKSB7Ci0JCQkJY2hhciBidWlsZF9pZF9oZXhbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKLQogCQkJCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpLAogCQkJCQkJICBidWlsZF9pZF9oZXgpOwogCQkJCXNucHJpbnRmKG5hbWUsIHNpemUsCkBAIC0xMjc2LDExICsxMzI2LDExIEBACiAJCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwgYnVpbGRfaWQpKQogCQkJCWdvdG8gbW9yZTsKIAkJfQotCitvcGVuX2ZpbGU6CiAJCWZkID0gb3BlbihuYW1lLCBPX1JET05MWSk7CiAJfSB3aGlsZSAoZmQgPCAwKTsKIAotCXJldCA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBOVUxMLCBuYW1lLCBmZCwgZmlsdGVyLCAwLCAwKTsKKwlyZXQgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgbmFtZSwgZmQsIGZpbHRlciwgMCk7CiAJY2xvc2UoZmQpOwogCiAJLyoKQEAgLTEzMDksMTQgKzEzNTksMzQgQEAKIAlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPm1hcHNbdHlwZV0pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgbWFwICptYXAgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hcCwgcmJfbm9kZSk7CiAKLQkJaWYgKG1hcC0+ZHNvICYmIHN0cmNtcChtYXAtPmRzby0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJaWYgKG1hcC0+ZHNvICYmIHN0cmNtcChtYXAtPmRzby0+c2hvcnRfbmFtZSwgbmFtZSkgPT0gMCkKIAkJCXJldHVybiBtYXA7CiAJfQogCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoX2RpcihzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBjaGFyICpkaXJuYW1lKQorc3RhdGljIGludCBkc29fX2tlcm5lbF9tb2R1bGVfZ2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYpCit7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisJLyoKKwkgKiBrZXJuZWwgbW9kdWxlIHNob3J0IG5hbWVzIGFyZSBvZiB0aGUgZm9ybSAiW21vZHVsZV0iIGFuZAorCSAqIHdlIG5lZWQganVzdCAibW9kdWxlIiBoZXJlLgorCSAqLworCWNvbnN0IGNoYXIgKm5hbWUgPSBzZWxmLT5zaG9ydF9uYW1lICsgMTsKKworCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLAorCQkgIi9zeXMvbW9kdWxlLyUuKnMvbm90ZXMvLm5vdGUuZ251LmJ1aWxkLWlkIiwKKwkJIChpbnQpc3RybGVuKG5hbWUgLSAxKSwgbmFtZSk7CisKKwlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsIHNlbGYtPmJ1aWxkX2lkLAorCQkJCSBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpKSA9PSAwKQorCQlzZWxmLT5oYXNfYnVpbGRfaWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIGNoYXIgKmRpcm5hbWUpCiB7CiAJc3RydWN0IGRpcmVudCAqZGVudDsKIAlESVIgKmRpciA9IG9wZW5kaXIoZGlybmFtZSk7CkBAIC0xMzM2LDcgKzE0MDYsNyBAQAogCiAJCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsCiAJCQkJIGRpcm5hbWUsIGRlbnQtPmRfbmFtZSk7Ci0JCQlpZiAocGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBwYXRoKSA8IDApCisJCQlpZiAobWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIoc2VsZiwgcGF0aCkgPCAwKQogCQkJCWdvdG8gZmFpbHVyZTsKIAkJfSBlbHNlIHsKIAkJCWNoYXIgKmRvdCA9IHN0cnJjaHIoZGVudC0+ZF9uYW1lLCAnLicpLApAQCAtMTM1MCw3ICsxNDIwLDcgQEAKIAkJCQkgKGludCkoZG90IC0gZGVudC0+ZF9uYW1lKSwgZGVudC0+ZF9uYW1lKTsKIAogCQkJc3RyeGZyY2hhcihkc29fbmFtZSwgJy0nLCAnXycpOwotCQkJbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKCZzZWxmLT5rbWFwcywgTUFQX19GVU5DVElPTiwgZHNvX25hbWUpOworCQkJbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKHNlbGYsIE1BUF9fRlVOQ1RJT04sIGRzb19uYW1lKTsKIAkJCWlmIChtYXAgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIApAQCAtMTM2MSw2ICsxNDMxLDcgQEAKIAkJCWlmIChsb25nX25hbWUgPT0gTlVMTCkKIAkJCQlnb3RvIGZhaWx1cmU7CiAJCQlkc29fX3NldF9sb25nX25hbWUobWFwLT5kc28sIGxvbmdfbmFtZSk7CisJCQlkc29fX2tlcm5lbF9tb2R1bGVfZ2V0X2J1aWxkX2lkKG1hcC0+ZHNvKTsKIAkJfQogCX0KIApAQCAtMTM3MCw3ICsxNDQxLDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCitzdGF0aWMgaW50IG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGgoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYpCiB7CiAJc3RydWN0IHV0c25hbWUgdXRzOwogCWNoYXIgbW9kdWxlc19wYXRoW1BBVEhfTUFYXTsKQEAgLTEzODEsNyArMTQ1Miw3IEBACiAJc25wcmludGYobW9kdWxlc19wYXRoLCBzaXplb2YobW9kdWxlc19wYXRoKSwgIi9saWIvbW9kdWxlcy8lcy9rZXJuZWwiLAogCQkgdXRzLnJlbGVhc2UpOwogCi0JcmV0dXJuIHBlcmZfc2Vzc2lvbl9fc2V0X21vZHVsZXNfcGF0aF9kaXIoc2VsZiwgbW9kdWxlc19wYXRoKTsKKwlyZXR1cm4gbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIoc2VsZiwgbW9kdWxlc19wYXRoKTsKIH0KIAogLyoKQEAgLTEzOTEsOCArMTQ2Miw4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwICptYXBfX25ldzIodTY0IHN0YXJ0LCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKLQlzdHJ1Y3QgbWFwICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOwotCisJc3RydWN0IG1hcCAqc2VsZiA9IHphbGxvYyhzaXplb2YoKnNlbGYpICsKKwkJCQkgIChkc28tPmtlcm5lbCA/IHNpemVvZihzdHJ1Y3Qga21hcCkgOiAwKSk7CiAJaWYgKHNlbGYgIT0gTlVMTCkgewogCQkvKgogCQkgKiAtPmVuZCB3aWxsIGJlIGZpbGxlZCBhZnRlciB3ZSBsb2FkIGFsbCB0aGUgc3ltYm9scwpAQCAtMTQwMyw3ICsxNDc0LDI1IEBACiAJcmV0dXJuIHNlbGY7CiB9CiAKLXN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19jcmVhdGVfbW9kdWxlX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3N0cnVjdCBtYXAgKm1hcF9ncm91cHNfX25ld19tb2R1bGUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIHU2NCBzdGFydCwKKwkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgbWFwICptYXA7CisJc3RydWN0IGRzbyAqZHNvID0gX19kc29zX19maW5kbmV3KCZkc29zX19rZXJuZWwsIGZpbGVuYW1lKTsKKworCWlmIChkc28gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwltYXAgPSBtYXBfX25ldzIoc3RhcnQsIGRzbywgTUFQX19GVU5DVElPTik7CisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWRzby0+b3JpZ2luID0gRFNPX19PUklHX0tNT0RVTEU7CisJbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIG1hcCk7CisJcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGludCBtYXBfZ3JvdXBzX19jcmVhdGVfbW9kdWxlcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlzaXplX3QgbjsKQEAgLTE0MTYsNyArMTUwNSw2IEBACiAJd2hpbGUgKCFmZW9mKGZpbGUpKSB7CiAJCWNoYXIgbmFtZVtQQVRIX01BWF07CiAJCXU2NCBzdGFydDsKLQkJc3RydWN0IGRzbyAqZHNvOwogCQljaGFyICpzZXA7CiAJCWludCBsaW5lX2xlbjsKIApAQCAtMTQ0MiwzMiArMTUzMCwxNiBAQAogCQkqc2VwID0gJ1wwJzsKIAogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJbJXNdIiwgbGluZSk7Ci0JCWRzbyA9IGRzb19fbmV3KG5hbWUpOwotCi0JCWlmIChkc28gPT0gTlVMTCkKKwkJbWFwID0gbWFwX2dyb3Vwc19fbmV3X21vZHVsZShzZWxmLCBzdGFydCwgbmFtZSk7CisJCWlmIChtYXAgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X2RlbGV0ZV9saW5lOwotCi0JCW1hcCA9IG1hcF9fbmV3MihzdGFydCwgZHNvLCBNQVBfX0ZVTkNUSU9OKTsKLQkJaWYgKG1hcCA9PSBOVUxMKSB7Ci0JCQlkc29fX2RlbGV0ZShkc28pOwotCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0JCX0KLQotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCQkgIi9zeXMvbW9kdWxlLyVzL25vdGVzLy5ub3RlLmdudS5idWlsZC1pZCIsIGxpbmUpOwotCQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQobmFtZSwgZHNvLT5idWlsZF9pZCwKLQkJCQkJIHNpemVvZihkc28tPmJ1aWxkX2lkKSkgPT0gMCkKLQkJCWRzby0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKLQotCQlkc28tPm9yaWdpbiA9IERTT19fT1JJR19LTU9EVUxFOwotCQltYXBfZ3JvdXBzX19pbnNlcnQoJnNlbGYtPmttYXBzLCBtYXApOwotCQlkc29zX19hZGQoJmRzb3NfX2tlcm5lbCwgZHNvKTsKKwkJZHNvX19rZXJuZWxfbW9kdWxlX2dldF9idWlsZF9pZChtYXAtPmRzbyk7CiAJfQogCiAJZnJlZShsaW5lKTsKIAlmY2xvc2UoZmlsZSk7CiAKLQlyZXR1cm4gcGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoKHNlbGYpOworCXJldHVybiBtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoKHNlbGYpOwogCiBvdXRfZGVsZXRlX2xpbmU6CiAJZnJlZShsaW5lKTsKQEAgLTE0NzYsNyArMTU0OCw2IEBACiB9CiAKIHN0YXRpYyBpbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJICAgICBjb25zdCBjaGFyICp2bWxpbnV4LCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBlcnIgPSAtMSwgZmQ7CkBAIC0xNTEwLDUxICsxNTgxLDEyNCBAQAogCQlyZXR1cm4gLTE7CiAKIAlkc29fX3NldF9sb2FkZWQoc2VsZiwgbWFwLT50eXBlKTsKLQllcnIgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgc2Vzc2lvbiwgc2VsZi0+bG9uZ19uYW1lLCBmZCwgZmlsdGVyLCAxLCAwKTsKKwllcnIgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgdm1saW51eCwgZmQsIGZpbHRlciwgMCk7CiAJY2xvc2UoZmQpOwogCisJaWYgKGVyciA+IDApCisJCXByX2RlYnVnKCJVc2luZyAlcyBmb3Igc3ltYm9sc1xuIiwgdm1saW51eCk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZHNvX19sb2FkX3ZtbGludXhfcGF0aChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCisJCQkgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCWludCBpLCBlcnIgPSAwOworCisJcHJfZGVidWcoIkxvb2tpbmcgYXQgdGhlIHZtbGludXhfcGF0aCAoJWQgZW50cmllcyBsb25nKVxuIiwKKwkJIHZtbGludXhfcGF0aF9fbnJfZW50cmllcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzOyArK2kpIHsKKwkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgbWFwLCB2bWxpbnV4X3BhdGhbaV0sIGZpbHRlcik7CisJCWlmIChlcnIgPiAwKSB7CisJCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwgc3RyZHVwKHZtbGludXhfcGF0aFtpXSkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGRzb19fbG9hZF9rZXJuZWxfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IGVycjsKLQlib29sIGlzX2thbGxzeW1zOworCWNvbnN0IGNoYXIgKmthbGxzeW1zX2ZpbGVuYW1lID0gTlVMTDsKKwljaGFyICprYWxsc3ltc19hbGxvY2F0ZWRfZmlsZW5hbWUgPSBOVUxMOworCS8qCisJICogU3RlcCAxOiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSB2bWxpbnV4IGZpbGVuYW1lLCB1c2UgaXQgYW5kIG9ubHkKKwkgKiBpdCwgcmVwb3J0aW5nIGVycm9ycyB0byB0aGUgdXNlciBpZiBpdCBjYW5ub3QgYmUgdXNlZC4KKwkgKgorCSAqIEZvciBpbnN0YW5jZSwgdHJ5IHRvIGFuYWx5c2UgYW4gQVJNIHBlcmYuZGF0YSBmaWxlIF93aXRob3V0XyBhCisJICogYnVpbGQtaWQsIG9yIGlmIHRoZSB1c2VyIHNwZWNpZmllcyB0aGUgd3JvbmcgcGF0aCB0byB0aGUgcmlnaHQKKwkgKiB2bWxpbnV4IGZpbGUsIG9idmlvdXNseSB3ZSBjYW4ndCBmYWxsYmFjayB0byBhbm90aGVyIHZtbGludXggKGEKKwkgKiB4ODZfODYgb25lLCBvbiB0aGUgbWFjaGluZSB3aGVyZSBhbmFseXNpcyBpcyBiZWluZyBwZXJmb3JtZWQsIHNheSksCisJICogb3Igd29yc2UsIC9wcm9jL2thbGxzeW1zLgorCSAqCisJICogSWYgdGhlIHNwZWNpZmllZCBmaWxlIF9oYXNfIGEgYnVpbGQtaWQgYW5kIHRoZXJlIGlzIGEgYnVpbGQtaWQKKwkgKiBzZWN0aW9uIGluIHRoZSBwZXJmLmRhdGEgZmlsZSwgd2Ugd2lsbCBzdGlsbCBkbyB0aGUgZXhwZWN0ZWQKKwkgKiB2YWxpZGF0aW9uIGluIGRzb19fbG9hZF92bWxpbnV4IGFuZCB3aWxsIGJhaWwgb3V0IGlmIHRoZXkgZG9uJ3QKKwkgKiBtYXRjaC4KKwkgKi8KKwlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lICE9IE5VTEwpIHsKKwkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgbWFwLAorCQkJCQlzeW1ib2xfY29uZi52bWxpbnV4X25hbWUsIGZpbHRlcik7CisJCWdvdG8gb3V0X3RyeV9maXh1cDsKKwl9CiAKIAlpZiAodm1saW51eF9wYXRoICE9IE5VTEwpIHsKLQkJaW50IGk7Ci0JCXByX2RlYnVnKCJMb29raW5nIGF0IHRoZSB2bWxpbnV4X3BhdGggKCVkIGVudHJpZXMgbG9uZylcbiIsCi0JCQkgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzKTsKLQkJZm9yIChpID0gMDsgaSA8IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsgKytpKSB7Ci0JCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIHNlc3Npb24sCi0JCQkJCQl2bWxpbnV4X3BhdGhbaV0sIGZpbHRlcik7Ci0JCQlpZiAoZXJyID4gMCkgewotCQkJCXByX2RlYnVnKCJVc2luZyAlcyBmb3Igc3ltYm9sc1xuIiwKLQkJCQkJIHZtbGludXhfcGF0aFtpXSk7Ci0JCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsCi0JCQkJCQkgICBzdHJkdXAodm1saW51eF9wYXRoW2ldKSk7Ci0JCQkJZ290byBvdXRfZml4dXA7CisJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc2VsZiwgbWFwLCBmaWx0ZXIpOworCQlpZiAoZXJyID4gMCkKKwkJCWdvdG8gb3V0X2ZpeHVwOworCX0KKworCS8qCisJICogU2F5IHRoZSBrZXJuZWwgRFNPIHdhcyBjcmVhdGVkIHdoZW4gcHJvY2Vzc2luZyB0aGUgYnVpbGQtaWQgaGVhZGVyIHRhYmxlLAorCSAqIHdlIGhhdmUgYSBidWlsZC1pZCwgc28gY2hlY2sgaWYgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIHJ1bm5pbmcga2VybmVsLAorCSAqIHVzaW5nIGl0IGlmIGl0IGlzLgorCSAqLworCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKKwkJdTgga2FsbHN5bXNfYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisJCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisKKwkJaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKCIvc3lzL2tlcm5lbC9ub3RlcyIsIGthbGxzeW1zX2J1aWxkX2lkLAorCQkJCQkgc2l6ZW9mKGthbGxzeW1zX2J1aWxkX2lkKSkgPT0gMCkgeworCQkJaWYgKGRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwga2FsbHN5bXNfYnVpbGRfaWQpKSB7CisJCQkJa2FsbHN5bXNfZmlsZW5hbWUgPSAiL3Byb2Mva2FsbHN5bXMiOworCQkJCWdvdG8gZG9fa2FsbHN5bXM7CiAJCQl9CiAJCX0KKwkJLyoKKwkJICogTm93IGxvb2sgaWYgd2UgaGF2ZSBpdCBvbiB0aGUgYnVpbGQtaWQgY2FjaGUgaW4KKwkJICogJEhPTUUvLmRlYnVnL1trZXJuZWwua2FsbHN5bXNdLgorCQkgKi8KKwkJYnVpbGRfaWRfX3NwcmludGYoc2VsZi0+YnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQkJICBzYnVpbGRfaWQpOworCisJCWlmIChhc3ByaW50Zigma2FsbHN5bXNfYWxsb2NhdGVkX2ZpbGVuYW1lLAorCQkJICAgICAiJXMvLmRlYnVnL1trZXJuZWwua2FsbHN5bXNdLyVzIiwKKwkJCSAgICAgZ2V0ZW52KCJIT01FIiksIHNidWlsZF9pZCkgPT0gLTEpIHsKKwkJCXByX2VycigiTm90IGVub3VnaCBtZW1vcnkgZm9yIGthbGxzeW1zIGZpbGUgbG9va3VwXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWthbGxzeW1zX2ZpbGVuYW1lID0ga2FsbHN5bXNfYWxsb2NhdGVkX2ZpbGVuYW1lOworCisJCWlmIChhY2Nlc3Moa2FsbHN5bXNfZmlsZW5hbWUsIEZfT0spKSB7CisJCQlwcl9lcnIoIk5vIGthbGxzeW1zIG9yIHZtbGludXggd2l0aCBidWlsZC1pZCAlcyAiCisJCQkgICAgICAgIndhcyBmb3VuZFxuIiwgc2J1aWxkX2lkKTsKKwkJCWZyZWUoa2FsbHN5bXNfYWxsb2NhdGVkX2ZpbGVuYW1lKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIExhc3QgcmVzb3J0LCBpZiB3ZSBkb24ndCBoYXZlIGEgYnVpbGQtaWQgYW5kIGNvdWxkbid0IGZpbmQKKwkJICogYW55IHZtbGludXggZmlsZSwgdHJ5IHRoZSBydW5uaW5nIGtlcm5lbCBrYWxsc3ltcyB0YWJsZS4KKwkJICovCisJCWthbGxzeW1zX2ZpbGVuYW1lID0gIi9wcm9jL2thbGxzeW1zIjsKIAl9CiAKLQlpc19rYWxsc3ltcyA9IHNlbGYtPmxvbmdfbmFtZVswXSA9PSAnWyc7Ci0JaWYgKGlzX2thbGxzeW1zKQotCQlnb3RvIGRvX2thbGxzeW1zOwotCi0JZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgbWFwLCBzZXNzaW9uLCBzZWxmLT5sb25nX25hbWUsIGZpbHRlcik7Ci0JaWYgKGVyciA8PSAwKSB7Ci0JCXByX2luZm8oIlRoZSBmaWxlICVzIGNhbm5vdCBiZSB1c2VkLCAiCi0JCQkidHJ5aW5nIHRvIHVzZSAvcHJvYy9rYWxsc3ltcy4uLiIsIHNlbGYtPmxvbmdfbmFtZSk7CiBkb19rYWxsc3ltczoKLQkJZXJyID0gZHNvX19sb2FkX2thbGxzeW1zKHNlbGYsIG1hcCwgc2Vzc2lvbiwgZmlsdGVyKTsKLQkJaWYgKGVyciA+IDAgJiYgIWlzX2thbGxzeW1zKQotICAgICAgICAgICAgICAgICAgICAgICAgZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cCgiW2tlcm5lbC5rYWxsc3ltc10iKSk7Ci0JfQorCWVyciA9IGRzb19fbG9hZF9rYWxsc3ltcyhzZWxmLCBrYWxsc3ltc19maWxlbmFtZSwgbWFwLCBmaWx0ZXIpOworCWlmIChlcnIgPiAwKQorCQlwcl9kZWJ1ZygiVXNpbmcgJXMgZm9yIHN5bWJvbHNcbiIsIGthbGxzeW1zX2ZpbGVuYW1lKTsKKwlmcmVlKGthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSk7CiAKK291dF90cnlfZml4dXA6CiAJaWYgKGVyciA+IDApIHsKIG91dF9maXh1cDoKKwkJaWYgKGthbGxzeW1zX2ZpbGVuYW1lICE9IE5VTEwpCisJCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwgc3RyZHVwKCJba2VybmVsLmthbGxzeW1zXSIpKTsKIAkJbWFwX19maXh1cF9zdGFydChtYXApOwogCQltYXBfX2ZpeHVwX2VuZChtYXApOwogCX0KQEAgLTE1NjQsNyArMTcwOCw2IEBACiAKIExJU1RfSEVBRChkc29zX191c2VyKTsKIExJU1RfSEVBRChkc29zX19rZXJuZWwpOwotc3RydWN0IGRzbyAqdmRzbzsKIAogc3RhdGljIHZvaWQgZHNvc19fYWRkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBkc28gKmRzbykKIHsKQEAgLTE1NzYsMTkgKzE3MTksMTkgQEAKIAlzdHJ1Y3QgZHNvICpwb3M7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkKLQkJaWYgKHN0cmNtcChwb3MtPm5hbWUsIG5hbWUpID09IDApCisJCWlmIChzdHJjbXAocG9zLT5sb25nX25hbWUsIG5hbWUpID09IDApCiAJCQlyZXR1cm4gcG9zOwogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgZHNvICpkc29zX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpCitzdHJ1Y3QgZHNvICpfX2Rzb3NfX2ZpbmRuZXcoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICpkc28gPSBkc29zX19maW5kKCZkc29zX191c2VyLCBuYW1lKTsKKwlzdHJ1Y3QgZHNvICpkc28gPSBkc29zX19maW5kKGhlYWQsIG5hbWUpOwogCiAJaWYgKCFkc28pIHsKIAkJZHNvID0gZHNvX19uZXcobmFtZSk7CiAJCWlmIChkc28gIT0gTlVMTCkgewotCQkJZHNvc19fYWRkKCZkc29zX191c2VyLCBkc28pOworCQkJZHNvc19fYWRkKGhlYWQsIGRzbyk7CiAJCQlkc29fX3NldF9iYXNlbmFtZShkc28pOwogCQl9CiAJfQpAQCAtMTYxMyw3NSArMTc1Niw3OCBAQAogCV9fZHNvc19fZnByaW50ZigmZHNvc19fdXNlciwgZnApOwogfQogCi1zdGF0aWMgc2l6ZV90IF9fZHNvc19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIEZJTEUgKmZwKQorc3RhdGljIHNpemVfdCBfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBGSUxFICpmcCwKKwkJCQkgICAgICBib29sIHdpdGhfaGl0cykKIHsKIAlzdHJ1Y3QgZHNvICpwb3M7CiAJc2l6ZV90IHJldCA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkgeworCQlpZiAod2l0aF9oaXRzICYmICFwb3MtPmhpdCkKKwkJCWNvbnRpbnVlOwogCQlyZXQgKz0gZHNvX19mcHJpbnRmX2J1aWxkaWQocG9zLCBmcCk7CiAJCXJldCArPSBmcHJpbnRmKGZwLCAiICVzXG4iLCBwb3MtPmxvbmdfbmFtZSk7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKLXNpemVfdCBkc29zX19mcHJpbnRmX2J1aWxkaWQoRklMRSAqZnApCitzaXplX3QgZHNvc19fZnByaW50Zl9idWlsZGlkKEZJTEUgKmZwLCBib29sIHdpdGhfaGl0cykKIHsKLQlyZXR1cm4gKF9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZkc29zX19rZXJuZWwsIGZwKSArCi0JCV9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZkc29zX191c2VyLCBmcCkpOworCXJldHVybiAoX19kc29zX19mcHJpbnRmX2J1aWxkaWQoJmRzb3NfX2tlcm5lbCwgZnAsIHdpdGhfaGl0cykgKworCQlfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmZHNvc19fdXNlciwgZnAsIHdpdGhfaGl0cykpOwogfQogCi1zdGF0aWMgc3RydWN0IGRzbyAqZHNvc19fY3JlYXRlX2tlcm5lbCggY29uc3QgY2hhciAqdm1saW51eCkKK3N0cnVjdCBkc28gKmRzb19fbmV3X2tlcm5lbChjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBkc28gKmtlcm5lbCA9IGRzb19fbmV3KHZtbGludXggPzogIltrZXJuZWwua2FsbHN5bXNdIik7CisJc3RydWN0IGRzbyAqc2VsZiA9IGRzb19fbmV3KG5hbWUgPzogIltrZXJuZWwua2FsbHN5bXNdIik7CiAKLQlpZiAoa2VybmVsID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0Ja2VybmVsLT5zaG9ydF9uYW1lID0gIltrZXJuZWxdIjsKLQlrZXJuZWwtPmtlcm5lbAkgICA9IDE7Ci0KLQl2ZHNvID0gZHNvX19uZXcoIlt2ZHNvXSIpOwotCWlmICh2ZHNvID09IE5VTEwpCi0JCWdvdG8gb3V0X2RlbGV0ZV9rZXJuZWxfZHNvOwotCWRzb19fc2V0X2xvYWRlZCh2ZHNvLCBNQVBfX0ZVTkNUSU9OKTsKLQotCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZCgiL3N5cy9rZXJuZWwvbm90ZXMiLCBrZXJuZWwtPmJ1aWxkX2lkLAotCQkJCSBzaXplb2Yoa2VybmVsLT5idWlsZF9pZCkpID09IDApCi0JCWtlcm5lbC0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKLQotCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBrZXJuZWwpOwotCWRzb3NfX2FkZCgmZHNvc19fdXNlciwgdmRzbyk7Ci0KLQlyZXR1cm4ga2VybmVsOwotCi1vdXRfZGVsZXRlX2tlcm5lbF9kc286Ci0JZHNvX19kZWxldGUoa2VybmVsKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIGNvbnN0IGNoYXIgKnZtbGludXgpCi17Ci0Jc3RydWN0IG1hcCAqZnVuY3Rpb25zLCAqdmFyaWFibGVzOwotCXN0cnVjdCBkc28gKmtlcm5lbCA9IGRzb3NfX2NyZWF0ZV9rZXJuZWwodm1saW51eCk7Ci0KLQlpZiAoa2VybmVsID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCWZ1bmN0aW9ucyA9IG1hcF9fbmV3MigwLCBrZXJuZWwsIE1BUF9fRlVOQ1RJT04pOwotCWlmIChmdW5jdGlvbnMgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JdmFyaWFibGVzID0gbWFwX19uZXcyKDAsIGtlcm5lbCwgTUFQX19WQVJJQUJMRSk7Ci0JaWYgKHZhcmlhYmxlcyA9PSBOVUxMKSB7Ci0JCW1hcF9fZGVsZXRlKGZ1bmN0aW9ucyk7Ci0JCXJldHVybiAtMTsKKwlpZiAoc2VsZiAhPSBOVUxMKSB7CisJCXNlbGYtPnNob3J0X25hbWUgPSAiW2tlcm5lbF0iOworCQlzZWxmLT5rZXJuZWwJID0gMTsKIAl9CiAKLQlmdW5jdGlvbnMtPm1hcF9pcCA9IGZ1bmN0aW9ucy0+dW5tYXBfaXAgPQotCQl2YXJpYWJsZXMtPm1hcF9pcCA9IHZhcmlhYmxlcy0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwotCW1hcF9ncm91cHNfX2luc2VydChzZWxmLCBmdW5jdGlvbnMpOwotCW1hcF9ncm91cHNfX2luc2VydChzZWxmLCB2YXJpYWJsZXMpOworCXJldHVybiBzZWxmOworfQorCit2b2lkIGRzb19fcmVhZF9ydW5uaW5nX2tlcm5lbF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmKQoreworCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZCgiL3N5cy9rZXJuZWwvbm90ZXMiLCBzZWxmLT5idWlsZF9pZCwKKwkJCQkgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSkgPT0gMCkKKwkJc2VsZi0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBkc28gKmRzb3NfX2NyZWF0ZV9rZXJuZWwoY29uc3QgY2hhciAqdm1saW51eCkKK3sKKwlzdHJ1Y3QgZHNvICprZXJuZWwgPSBkc29fX25ld19rZXJuZWwodm1saW51eCk7CisKKwlpZiAoa2VybmVsICE9IE5VTEwpIHsKKwkJZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKGtlcm5lbCk7CisJCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBrZXJuZWwpOworCX0KKworCXJldHVybiBrZXJuZWw7Cit9CisKK2ludCBfX21hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkgICAgIHN0cnVjdCBtYXAgKnZtbGludXhfbWFwc1tNQVBfX05SX1RZUEVTXSwKKwkJCQkgICAgIHN0cnVjdCBkc28gKmtlcm5lbCkKK3sKKwllbnVtIG1hcF90eXBlIHR5cGU7CisKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgTUFQX19OUl9UWVBFUzsgKyt0eXBlKSB7CisJCXN0cnVjdCBrbWFwICprbWFwOworCisJCXZtbGludXhfbWFwc1t0eXBlXSA9IG1hcF9fbmV3MigwLCBrZXJuZWwsIHR5cGUpOworCQlpZiAodm1saW51eF9tYXBzW3R5cGVdID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisKKwkJdm1saW51eF9tYXBzW3R5cGVdLT5tYXBfaXAgPQorCQkJdm1saW51eF9tYXBzW3R5cGVdLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CisKKwkJa21hcCA9IG1hcF9fa21hcCh2bWxpbnV4X21hcHNbdHlwZV0pOworCQlrbWFwLT5rbWFwcyA9IHNlbGY7CisJCW1hcF9ncm91cHNfX2luc2VydChzZWxmLCB2bWxpbnV4X21hcHNbdHlwZV0pOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTc5MSwxOSArMTkzNywyMiBAQAogCXJldHVybiAtMTsKIH0KIAotaW50IHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCitpbnQgbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCSAgIHN0cnVjdCBtYXAgKnZtbGludXhfbWFwc1tNQVBfX05SX1RZUEVTXSkKIHsKLQlpZiAobWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKCZzZWxmLT5rbWFwcywKLQkJCQkJICAgc3ltYm9sX2NvbmYudm1saW51eF9uYW1lKSA8IDApCisJc3RydWN0IGRzbyAqa2VybmVsID0gZHNvc19fY3JlYXRlX2tlcm5lbChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUpOworCisJaWYgKGtlcm5lbCA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoc3ltYm9sX2NvbmYudXNlX21vZHVsZXMgJiYKLQkgICAgcGVyZl9zZXNzaW9uX19jcmVhdGVfbW9kdWxlX21hcHMoc2VsZikgPCAwKQotCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxvYWQgbGlzdCBvZiBtb2R1bGVzIGZvciBzZXNzaW9uICVzLCAiCi0JCQkgImNvbnRpbnVpbmcuLi5cbiIsIHNlbGYtPmZpbGVuYW1lKTsKKwlpZiAoX19tYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc2VsZiwgdm1saW51eF9tYXBzLCBrZXJuZWwpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHN5bWJvbF9jb25mLnVzZV9tb2R1bGVzICYmIG1hcF9ncm91cHNfX2NyZWF0ZV9tb2R1bGVzKHNlbGYpIDwgMCkKKwkJcHJfZGVidWcoIlByb2JsZW1zIGNyZWF0aW5nIG1vZHVsZSBtYXBzLCBjb250aW51aW5nIGFueXdheS4uLlxuIik7CiAJLyoKIAkgKiBOb3cgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgbWFwcyBjcmVhdGVkLCBqdXN0IHNldCB0aGUgLT5lbmQgb2YgdGhlbToKIAkgKi8KLQltYXBfZ3JvdXBzX19maXh1cF9lbmQoJnNlbGYtPmttYXBzKTsKKwltYXBfZ3JvdXBzX19maXh1cF9lbmQoc2VsZik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggOGFkZWQyMy4uMjgwZGFkZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlICJldmVudC5oIgogCisjZGVmaW5lIERFQlVHX0NBQ0hFX0RJUiAiLmRlYnVnIgorCiAjaWZkZWYgSEFWRV9DUExVU19ERU1BTkdMRQogZXh0ZXJuIGNoYXIgKmNwbHVzX2RlbWFuZ2xlKGNvbnN0IGNoYXIgKiwgaW50KTsKIApAQCAtNDksNiArNTEsOCBAQAogCWNoYXIJCW5hbWVbMF07CiB9OwogCit2b2lkIHN5bWJvbF9fZGVsZXRlKHN0cnVjdCBzeW1ib2wgKnNlbGYpOworCiBzdHJ1Y3Qgc3RybGlzdDsKIAogc3RydWN0IHN5bWJvbF9jb25mIHsKQEAgLTU4LDcgKzYyLDggQEAKIAkJCXNvcnRfYnlfbmFtZSwKIAkJCXNob3dfbnJfc2FtcGxlcywKIAkJCXVzZV9jYWxsY2hhaW4sCi0JCQlleGNsdWRlX290aGVyOworCQkJZXhjbHVkZV9vdGhlciwKKwkJCWZ1bGxfcGF0aHM7CiAJY29uc3QgY2hhcgkqdm1saW51eF9uYW1lLAogCQkJKmZpZWxkX3NlcDsKIAljaGFyICAgICAgICAgICAgKmRzb19saXN0X3N0ciwKQEAgLTc3LDYgKzgyLDEyIEBACiAJcmV0dXJuICgodm9pZCAqKXNlbGYpIC0gc3ltYm9sX2NvbmYucHJpdl9zaXplOwogfQogCitzdHJ1Y3QgcmVmX3JlbG9jX3N5bSB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1NjQJCWFkZHI7CisJdTY0CQl1bnJlbG9jYXRlZF9hZGRyOworfTsKKwogc3RydWN0IGFkZHJfbG9jYXRpb24gewogCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKIAlzdHJ1Y3QgbWFwICAgICptYXA7CkBAIC05NCw2ICsxMDUsNyBAQAogCXU4CQkgc2xlbl9jYWxjdWxhdGVkOjE7CiAJdTgJCSBoYXNfYnVpbGRfaWQ6MTsKIAl1OAkJIGtlcm5lbDoxOworCXU4CQkgaGl0OjE7CiAJdW5zaWduZWQgY2hhcgkgb3JpZ2luOwogCXU4CQkgc29ydGVkX2J5X25hbWU7CiAJdTgJCSBsb2FkZWQ7CkBAIC0xMDUsMzcgKzExNyw1NSBAQAogfTsKIAogc3RydWN0IGRzbyAqZHNvX19uZXcoY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgZHNvICpkc29fX25ld19rZXJuZWwoY29uc3QgY2hhciAqbmFtZSk7CiB2b2lkIGRzb19fZGVsZXRlKHN0cnVjdCBkc28gKnNlbGYpOwogCiBib29sIGRzb19fbG9hZGVkKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSk7CiBib29sIGRzb19fc29ydGVkX2J5X25hbWUoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKIAorc3RhdGljIGlubGluZSB2b2lkIGRzb19fc2V0X2xvYWRlZChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCit7CisJc2VsZi0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOworfQorCiB2b2lkIGRzb19fc29ydF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSk7CiAKLXN0cnVjdCBwZXJmX3Nlc3Npb247CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBkc29zX191c2VyLCBkc29zX19rZXJuZWw7CiAKLXN0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSk7Ci1pbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKK3N0cnVjdCBkc28gKl9fZHNvc19fZmluZG5ldyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHNvICpkc29zX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIF9fZHNvc19fZmluZG5ldygmZHNvc19fdXNlciwgbmFtZSk7Cit9CisKK2ludCBkc29fX2xvYWQoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKK2ludCBkc29fX2xvYWRfdm1saW51eF9wYXRoKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKKwkJCSAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworaW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IG1hcCAqbWFwLAorCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiB2b2lkIGRzb3NfX2ZwcmludGYoRklMRSAqZnApOwotc2l6ZV90IGRzb3NfX2ZwcmludGZfYnVpbGRpZChGSUxFICpmcCk7CitzaXplX3QgZHNvc19fZnByaW50Zl9idWlsZGlkKEZJTEUgKmZwLCBib29sIHdpdGhfaGl0cyk7CiAKIHNpemVfdCBkc29fX2ZwcmludGZfYnVpbGRpZChzdHJ1Y3QgZHNvICpzZWxmLCBGSUxFICpmcCk7CiBzaXplX3QgZHNvX19mcHJpbnRmKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApOwogY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZik7Cit2b2lkIGRzb19fc2V0X2xvbmdfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBjaGFyICpuYW1lKTsKIHZvaWQgZHNvX19zZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZiwgdm9pZCAqYnVpbGRfaWQpOwordm9pZCBkc29fX3JlYWRfcnVubmluZ19rZXJuZWxfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZik7CiBzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIpOwogc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSk7CiAKIGludCBmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKIGludCBzeXNmc19fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKLWJvb2wgZHNvc19fcmVhZF9idWlsZF9pZHModm9pZCk7Ci1pbnQgYnVpbGRfaWRfX3NwcmludGYodTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKTsKK2Jvb2wgZHNvc19fcmVhZF9idWlsZF9pZHMoYm9vbCB3aXRoX2hpdHMpOworaW50IGJ1aWxkX2lkX19zcHJpbnRmKGNvbnN0IHU4ICpzZWxmLCBpbnQgbGVuLCBjaGFyICpiZik7CitpbnQga2FsbHN5bXNfX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICphcmcsCisJCSAgICBpbnQgKCpwcm9jZXNzX3N5bWJvbCkodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgIGNoYXIgdHlwZSwgdTY0IHN0YXJ0KSk7CiAKIGludCBzeW1ib2xfX2luaXQodm9pZCk7Ci1pbnQgcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZik7Citib29sIHN5bWJvbF90eXBlX19pc19hKGNoYXIgc3ltYm9sX3R5cGUsIGVudW0gbWFwX3R5cGUgbWFwX3R5cGUpOwogCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBkc29zX191c2VyLCBkc29zX19rZXJuZWw7Ci1leHRlcm4gc3RydWN0IGRzbyAqdmRzbzsKICNlbmRpZiAvKiBfX1BFUkZfU1lNQk9MICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKaW5kZXggNGEwOGRjZi4uMjFiOTIxNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwpAQCAtMzEsMTIgKzMxLDQxIEBACiAJcmV0dXJuIHNlbGY7CiB9CiAKK3N0YXRpYyB2b2lkIG1hcF9ncm91cHNfX2ZsdXNoKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmKQoreworCWludCB0eXBlOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IE1BUF9fTlJfVFlQRVM7IHR5cGUrKykgeworCQlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzZWxmLT5tYXBzW3R5cGVdOworCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHJvb3QpOworCisJCXdoaWxlIChuZXh0KSB7CisJCQlzdHJ1Y3QgbWFwICpwb3MgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKKwkJCW5leHQgPSByYl9uZXh0KCZwb3MtPnJiX25vZGUpOworCQkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgcm9vdCk7CisJCQkvKgorCQkJICogV2UgbWF5IGhhdmUgcmVmZXJlbmNlcyB0byB0aGlzIG1hcCwgZm9yCisJCQkgKiBpbnN0YW5jZSBpbiBzb21lIGhpc3RfZW50cnkgaW5zdGFuY2VzLCBzbworCQkJICoganVzdCBtb3ZlIHRoZW0gdG8gYSBzZXBhcmF0ZSBsaXN0LgorCQkJICovCisJCQlsaXN0X2FkZF90YWlsKCZwb3MtPm5vZGUsICZzZWxmLT5yZW1vdmVkX21hcHNbcG9zLT50eXBlXSk7CisJCX0KKwl9Cit9CisKIGludCB0aHJlYWRfX3NldF9jb21tKHN0cnVjdCB0aHJlYWQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbW0pCiB7CisJaW50IGVycjsKKwogCWlmIChzZWxmLT5jb21tKQogCQlmcmVlKHNlbGYtPmNvbW0pOwogCXNlbGYtPmNvbW0gPSBzdHJkdXAoY29tbSk7Ci0JcmV0dXJuIHNlbGYtPmNvbW0gPyAwIDogLUVOT01FTTsKKwllcnIgPSBzZWxmLT5jb21tID09IE5VTEwgPyAtRU5PTUVNIDogMDsKKwlpZiAoIWVycikgeworCQlzZWxmLT5jb21tX3NldCA9IHRydWU7CisJCW1hcF9ncm91cHNfX2ZsdXNoKCZzZWxmLT5tZyk7CisJfQorCXJldHVybiBlcnI7CiB9CiAKIGludCB0aHJlYWRfX2NvbW1fbGVuKHN0cnVjdCB0aHJlYWQgKnNlbGYpCkBAIC01MCwxMSArNzksNiBAQAogCXJldHVybiBzZWxmLT5jb21tX2xlbjsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdID0gewotCVtNQVBfX0ZVTkNUSU9OXSA9ICJGdW5jdGlvbnMiLAotCVtNQVBfX1ZBUklBQkxFXSA9ICJWYXJpYWJsZXMiLAotfTsKLQogc3RhdGljIHNpemVfdCBfX21hcF9ncm91cHNfX2ZwcmludGZfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKIAkJCQkJIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApCiB7CkBAIC0yNTUsMTEgKzI3OSwxNCBAQAogewogCWludCBpOwogCi0JaWYgKHNlbGYtPmNvbW0pCi0JCWZyZWUoc2VsZi0+Y29tbSk7Ci0Jc2VsZi0+Y29tbSA9IHN0cmR1cChwYXJlbnQtPmNvbW0pOwotCWlmICghc2VsZi0+Y29tbSkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHBhcmVudC0+Y29tbV9zZXQpIHsKKwkJaWYgKHNlbGYtPmNvbW0pCisJCQlmcmVlKHNlbGYtPmNvbW0pOworCQlzZWxmLT5jb21tID0gc3RyZHVwKHBhcmVudC0+Y29tbSk7CisJCWlmICghc2VsZi0+Y29tbSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzZWxmLT5jb21tX3NldCA9IHRydWU7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKIAkJaWYgKG1hcF9ncm91cHNfX2Nsb25lKCZzZWxmLT5tZywgJnBhcmVudC0+bWcsIGkpIDwgMCkKQEAgLTI4MiwxNCArMzA5LDEzIEBACiB9CiAKIHN0cnVjdCBzeW1ib2wgKm1hcF9ncm91cHNfX2ZpbmRfc3ltYm9sKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAotCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJCSAgICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9ncm91cHNfX2ZpbmQoc2VsZiwgdHlwZSwgYWRkcik7CiAKIAlpZiAobWFwICE9IE5VTEwpCi0JCXJldHVybiBtYXBfX2ZpbmRfc3ltYm9sKG1hcCwgc2Vzc2lvbiwgbWFwLT5tYXBfaXAobWFwLCBhZGRyKSwgZmlsdGVyKTsKKwkJcmV0dXJuIG1hcF9fZmluZF9zeW1ib2wobWFwLCBtYXAtPm1hcF9pcChtYXAsIGFkZHIpLCBmaWx0ZXIpOwogCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmggYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKaW5kZXggYzIwNmY3Mi4uMGEyOGYzOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaApAQCAtMTUsNiArMTUsNyBAQAogCXN0cnVjdCBtYXBfZ3JvdXBzCW1nOwogCXBpZF90CQkJcGlkOwogCWNoYXIJCQlzaG9ydG5hbWVbM107CisJYm9vbAkJCWNvbW1fc2V0OwogCWNoYXIJCQkqY29tbTsKIAlpbnQJCQljb21tX2xlbjsKIH07CkBAIC00OCwyMyArNDksMzYgQEAKIAlyZXR1cm4gc2VsZiA/IG1hcF9ncm91cHNfX2ZpbmQoJnNlbGYtPm1nLCB0eXBlLCBhZGRyKSA6IE5VTEw7CiB9CiAKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAorCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CisKIHZvaWQgdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oc3RydWN0IHRocmVhZCAqc2VsZiwKIAkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAogCQkJCWVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAogCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwogc3RydWN0IHN5bWJvbCAqbWFwX2dyb3Vwc19fZmluZF9zeW1ib2woc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCi0JCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkJICAgICAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJICAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1ib2wgKgotbWFwX2dyb3Vwc19fZmluZF9mdW5jdGlvbihzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCSAgdTY0IGFkZHIsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1ib2wgKm1hcF9ncm91cHNfX2ZpbmRfZnVuY3Rpb24oc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJCQkgICAgICAgdTY0IGFkZHIsCisJCQkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlyZXR1cm4gbWFwX2dyb3Vwc19fZmluZF9zeW1ib2woc2VsZiwgc2Vzc2lvbiwgTUFQX19GVU5DVElPTiwgYWRkciwgZmlsdGVyKTsKKwlyZXR1cm4gbWFwX2dyb3Vwc19fZmluZF9zeW1ib2woc2VsZiwgTUFQX19GVU5DVElPTiwgYWRkciwgZmlsdGVyKTsKIH0KIAogc3RydWN0IG1hcCAqbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAogCQkJCSAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lKTsKKworaW50IF9fbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCSAgICAgc3RydWN0IG1hcCAqdm1saW51eF9tYXBzW01BUF9fTlJfVFlQRVNdLAorCQkJCSAgICAgc3RydWN0IGRzbyAqa2VybmVsKTsKK2ludCBtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJICAgc3RydWN0IG1hcCAqdm1saW51eF9tYXBzW01BUF9fTlJfVFlQRVNdKTsKKworc3RydWN0IG1hcCAqbWFwX2dyb3Vwc19fbmV3X21vZHVsZShzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgdTY0IHN0YXJ0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKICNlbmRpZgkvKiBfX1BFUkZfVEhSRUFEX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jCmluZGV4IGNhY2UzNTUuLjVlYTg5NzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYwpAQCAtMjAsNiArMjAsNyBAQAogICovCiAjZGVmaW5lIF9HTlVfU09VUkNFCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8bW50ZW50Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTM3LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgorI2luY2x1ZGUgImRlYnVnZnMuaCIKIAogI2RlZmluZSBWRVJTSU9OICIwLjUiCiAKQEAgLTEwMSwzMiArMTAzLDEyIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpmaW5kX2RlYnVnZnModm9pZCkKIHsKLQlzdGF0aWMgY2hhciBkZWJ1Z2ZzW01BWF9QQVRIKzFdOwotCXN0YXRpYyBpbnQgZGVidWdmc19mb3VuZDsKLQljaGFyIHR5cGVbMTAwXTsKLQlGSUxFICpmcDsKKwljb25zdCBjaGFyICpwYXRoID0gZGVidWdmc19tb3VudChOVUxMKTsKIAotCWlmIChkZWJ1Z2ZzX2ZvdW5kKQotCQlyZXR1cm4gZGVidWdmczsKKwlpZiAoIXBhdGgpCisJCWRpZSgiWW91ciBrZXJuZWwgbm90IHN1cHBvcnQgZGVidWdmcyBmaWxlc3lzdGVtIik7CiAKLQlpZiAoKGZwID0gZm9wZW4oIi9wcm9jL21vdW50cyIsInIiKSkgPT0gTlVMTCkKLQkJZGllKCJDYW4ndCBvcGVuIC9wcm9jL21vdW50cyBmb3IgcmVhZCIpOwotCi0Jd2hpbGUgKGZzY2FuZihmcCwgIiUqcyAlIgotCQkgICAgICBTVFIoTUFYX1BBVEgpCi0JCSAgICAgICJzICU5OXMgJSpzICUqZCAlKmRcbiIsCi0JCSAgICAgIGRlYnVnZnMsIHR5cGUpID09IDIpIHsKLQkJaWYgKHN0cmNtcCh0eXBlLCAiZGVidWdmcyIpID09IDApCi0JCQlicmVhazsKLQl9Ci0JZmNsb3NlKGZwKTsKLQotCWlmIChzdHJjbXAodHlwZSwgImRlYnVnZnMiKSAhPSAwKQotCQlkaWUoImRlYnVnZnMgbm90IG1vdW50ZWQsIHBsZWFzZSBtb3VudCIpOwotCi0JZGVidWdmc19mb3VuZCA9IDE7Ci0KLQlyZXR1cm4gZGVidWdmczsKKwlyZXR1cm4gcGF0aDsKIH0KIAogLyoKQEAgLTI3MSw2ICsyNTMsOCBAQAogCXdyaXRlX29yX2RpZSgiaGVhZGVyX3BhZ2UiLCAxMik7CiAJd3JpdGVfb3JfZGllKCZzaXplLCA4KTsKIAljaGVja19zaXplID0gY29weV9maWxlX2ZkKGZkKTsKKwljbG9zZShmZCk7CisKIAlpZiAoc2l6ZSAhPSBjaGVja19zaXplKQogCQlkaWUoIndyb25nIHNpemUgZm9yICclcycgc2l6ZT0lbGxkIHJlYWQ9JWxsZCIsCiAJCSAgICBwYXRoLCBzaXplLCBjaGVja19zaXplKTsKQEAgLTI4OSw2ICsyNzMsNyBAQAogCWlmIChzaXplICE9IGNoZWNrX3NpemUpCiAJCWRpZSgid3Jvbmcgc2l6ZSBmb3IgJyVzJyIsIHBhdGgpOwogCXB1dF90cmFjaW5nX2ZpbGUocGF0aCk7CisJY2xvc2UoZmQpOwogfQogCiBzdGF0aWMgYm9vbCBuYW1lX2luX3RwX2xpc3QoY2hhciAqc3lzLCBzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cHMpCkBAIC0zMTcsNyArMzAyLDggQEAKIAkJZGllKCJjYW4ndCByZWFkIGRpcmVjdG9yeSAnJXMnIiwgc3lzKTsKIAogCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkpIHsKLQkJaWYgKHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAorCQlpZiAoZGVudC0+ZF90eXBlICE9IERUX0RJUiB8fAorCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSA9PSAwIHx8CiAJCSAgICAhbmFtZV9pbl90cF9saXN0KGRlbnQtPmRfbmFtZSwgdHBzKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzM0LDcgKzMyMCw4IEBACiAKIAlyZXdpbmRkaXIoZGlyKTsKIAl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpKSB7Ci0JCWlmIChzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikgPT0gMCB8fAogCQkgICAgIW5hbWVfaW5fdHBfbGlzdChkZW50LT5kX25hbWUsIHRwcykpCiAJCQljb250aW51ZTsKQEAgLTM1Myw2ICszNDAsNyBAQAogCiAJCWZyZWUoZm9ybWF0KTsKIAl9CisJY2xvc2VkaXIoZGlyKTsKIH0KIAogc3RhdGljIHZvaWQgcmVhZF9mdHJhY2VfZmlsZXMoc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHBzKQpAQCAtMzk0LDI2ICszODIsMjEgQEAKIAkJZGllKCJjYW4ndCByZWFkIGRpcmVjdG9yeSAnJXMnIiwgcGF0aCk7CiAKIAl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpKSB7Ci0JCWlmIChzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgImZ0cmFjZSIpID09IDAgfHwKIAkJICAgICFzeXN0ZW1faW5fdHBfbGlzdChkZW50LT5kX25hbWUsIHRwcykpCiAJCQljb250aW51ZTsKLQkJc3lzID0gbWFsbG9jX29yX2RpZShzdHJsZW4ocGF0aCkgKyBzdHJsZW4oZGVudC0+ZF9uYW1lKSArIDIpOwotCQlzcHJpbnRmKHN5cywgIiVzLyVzIiwgcGF0aCwgZGVudC0+ZF9uYW1lKTsKLQkJcmV0ID0gc3RhdChzeXMsICZzdCk7Ci0JCWZyZWUoc3lzKTsKLQkJaWYgKHJldCA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCi0JCQljb3VudCsrOworCQljb3VudCsrOwogCX0KIAogCXdyaXRlX29yX2RpZSgmY291bnQsIDQpOwogCiAJcmV3aW5kZGlyKGRpcik7CiAJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXIpKSkgewotCQlpZiAoc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CisJCWlmIChkZW50LT5kX3R5cGUgIT0gRFRfRElSIHx8CisJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKIAkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpID09IDAgfHwKIAkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICJmdHJhY2UiKSA9PSAwIHx8CiAJCSAgICAhc3lzdGVtX2luX3RwX2xpc3QoZGVudC0+ZF9uYW1lLCB0cHMpKQpAQCAtNDIyLDE0ICs0MDUsMTMgQEAKIAkJc3ByaW50ZihzeXMsICIlcy8lcyIsIHBhdGgsIGRlbnQtPmRfbmFtZSk7CiAJCXJldCA9IHN0YXQoc3lzLCAmc3QpOwogCQlpZiAocmV0ID49IDApIHsKLQkJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7Ci0JCQkJd3JpdGVfb3JfZGllKGRlbnQtPmRfbmFtZSwgc3RybGVuKGRlbnQtPmRfbmFtZSkgKyAxKTsKLQkJCQljb3B5X2V2ZW50X3N5c3RlbShzeXMsIHRwcyk7Ci0JCQl9CisJCQl3cml0ZV9vcl9kaWUoZGVudC0+ZF9uYW1lLCBzdHJsZW4oZGVudC0+ZF9uYW1lKSArIDEpOworCQkJY29weV9ldmVudF9zeXN0ZW0oc3lzLCB0cHMpOwogCQl9CiAJCWZyZWUoc3lzKTsKIAl9CiAKKwljbG9zZWRpcihkaXIpOwogCXB1dF90cmFjaW5nX2ZpbGUocGF0aCk7CiB9CiAKQEAgLTUzMyw3ICs1MTUsNyBAQAogCXdyaXRlX29yX2RpZShidWYsIDEpOwogCiAJLyogc2F2ZSBwYWdlX3NpemUgKi8KLQlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKIAl3cml0ZV9vcl9kaWUoJnBhZ2Vfc2l6ZSwgNCk7CiAKIAlyZWFkX2hlYWRlcl9maWxlcygpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwppbmRleCBjNWMzMmJlLi45YjNjMjBmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwpAQCAtMTkyNSw2ICsxOTI1LDE1IEBACiAJaWYgKCFmaWVsZCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfU1RSSU5HKSB7CisJCWludCBvZmZzZXQ7CisKKwkJb2Zmc2V0ID0gKihpbnQgKikoZGF0YSArIGZpZWxkLT5vZmZzZXQpOworCQlvZmZzZXQgJj0gMHhmZmZmOworCisJCXJldHVybiBkYXRhICsgb2Zmc2V0OworCX0KKwogCXJldHVybiBkYXRhICsgZmllbGQtPm9mZnNldDsKIH0KIApAQCAtMzI3NywzICszMjg2LDE4IEBACiAJY3B1cyA9IG5yX2NwdXM7CiAJbG9uZ19zaXplID0gbG9uZ19zejsKIH0KKworaW50IGNvbW1vbl9wYyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJcmV0dXJuIHBhcnNlX2NvbW1vbl9wYyhjb250ZXh0LT5ldmVudF9kYXRhKTsKK30KKworaW50IGNvbW1vbl9mbGFncyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJcmV0dXJuIHBhcnNlX2NvbW1vbl9mbGFncyhjb250ZXh0LT5ldmVudF9kYXRhKTsKK30KKworaW50IGNvbW1vbl9sb2NrX2RlcHRoKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gcGFyc2VfY29tbW9uX2xvY2tfZGVwdGgoY29udGV4dC0+ZXZlbnRfZGF0YSk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg4ZmIyNi4uMDAwMDAwMAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2lmbmRlZiBfX1BFUkZfVFJBQ0VfRVZFTlRfUEVSTF9ICi0jZGVmaW5lIF9fUEVSRl9UUkFDRV9FVkVOVF9QRVJMX0gKLSNpZmRlZiBOT19MSUJQRVJMCi10eXBlZGVmIGludCBJTlRFUlA7Ci0jZGVmaW5lIGRTUAotI2RlZmluZSBFTlRFUgotI2RlZmluZSBTQVZFVE1QUwotI2RlZmluZSBQVVRCQUNLCi0jZGVmaW5lIFNQQUdBSU4KLSNkZWZpbmUgRlJFRVRNUFMKLSNkZWZpbmUgTEVBVkUKLSNkZWZpbmUgU1AKLSNkZWZpbmUgRVJSU1YKLSNkZWZpbmUgR19TQ0FMQVIJCSgwKQotI2RlZmluZSBHX0RJU0NBUkQJCSgwKQotI2RlZmluZSBHX05PQVJHUwkJKDApCi0jZGVmaW5lIFBVU0hNQVJLKGEpCi0jZGVmaW5lIFN2VFJVRShhKQkJKDApCi0jZGVmaW5lIFhQVVNIcyhzKQotI2RlZmluZSBzdl8ybW9ydGFsKGEpCi0jZGVmaW5lIG5ld1NWcHYoYSxiKQotI2RlZmluZSBuZXdTVnV2KGEpCi0jZGVmaW5lIG5ld1NWaXYoYSkKLSNkZWZpbmUgZ2V0X2N2KGEsYikJCSgwKQotI2RlZmluZSBjYWxsX3B2KGEsYikJCSgwKQotI2RlZmluZSBwZXJsX2FsbG9jKCkJCSgwKQotI2RlZmluZSBwZXJsX2NvbnN0cnVjdChhKQkoMCkKLSNkZWZpbmUgcGVybF9wYXJzZShhLGIsYyxkLGUpCSgwKQotI2RlZmluZSBwZXJsX3J1bihhKQkJKDApCi0jZGVmaW5lIHBlcmxfZGVzdHJ1Y3QoYSkJKDApCi0jZGVmaW5lIHBlcmxfZnJlZShhKQkJKDApCi0jZGVmaW5lIHBUSFgJCQl2b2lkCi0jZGVmaW5lIENWCQkJdm9pZAotI2RlZmluZSBkWFNVQl9TWVMKLSNkZWZpbmUgcFRIWF8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXdYUyhjb25zdCBjaGFyICphLCB2b2lkICpiLCBjb25zdCBjaGFyICpjKSB7fQotc3RhdGljIHZvaWQgYm9vdF9QZXJmX19UcmFjZV9fQ29udGV4dChwVEhYXyBDViAqY3YpIHt9Ci1zdGF0aWMgdm9pZCBib290X0R5bmFMb2FkZXIocFRIWF8gQ1YgKmN2KSB7fQotI2Vsc2UKLSNpbmNsdWRlIDxFWFRFUk4uaD4KLSNpbmNsdWRlIDxwZXJsLmg+Ci12b2lkIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQocFRIWF8gQ1YgKmN2KTsKLXZvaWQgYm9vdF9EeW5hTG9hZGVyKHBUSFhfIENWICpjdik7Ci10eXBlZGVmIFBlcmxJbnRlcnByZXRlciAqIElOVEVSUDsKLSNlbmRpZgotCi1zdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgewotCXZvaWQgKmV2ZW50X2RhdGE7Ci19OwotCi1pbnQgY29tbW9uX3BjKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7Ci1pbnQgY29tbW9uX2ZsYWdzKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7Ci1pbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKLQotI2VuZGlmIC8qIF9fUEVSRl9UUkFDRV9FVkVOVF9QRVJMX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jCmluZGV4IDE3NDQ0MjIuLjdjZDExOTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYwpAQCAtMTgsNyArMTgsNyBAQAogICoKICAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAgKi8KLSNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAogCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTgzLDcgKzgzLDcgQEAKIAljaGFyICpzdHIgPSBOVUxMOwogCWludCBzaXplID0gMDsKIAlpbnQgaTsKLQlpbnQgcjsKKwlvZmZfdCByOwogCiAJZm9yICg7OykgewogCQlyID0gcmVhZChpbnB1dF9mZCwgYnVmLCBCVUZTSVopOwpAQCAtMTE4LDcgKzExOCw3IEBACiAKIAkvKiBtb3ZlIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCiAJciA9IGxzZWVrKGlucHV0X2ZkLCAtKHIgLSBpKSwgU0VFS19DVVIpOwotCWlmIChyIDwgMCkKKwlpZiAociA9PSAob2ZmX3QpLTEpCiAJCWRpZSgibHNlZWsiKTsKIAogCWlmIChzdHIpIHsKQEAgLTI4Miw4ICsyODIsOCBAQAogCiBzdGF0aWMgdm9pZCBnZXRfbmV4dF9wYWdlKGludCBjcHUpCiB7Ci0Jb2ZmNjRfdCBzYXZlX3NlZWs7Ci0Jb2ZmNjRfdCByZXQ7CisJb2ZmX3Qgc2F2ZV9zZWVrOworCW9mZl90IHJldDsKIAogCWlmICghY3B1X2RhdGFbY3B1XS5wYWdlKQogCQlyZXR1cm47CkBAIC0yOTgsMTcgKzI5OCwxNyBAQAogCQl1cGRhdGVfY3B1X2RhdGFfaW5kZXgoY3B1KTsKIAogCQkvKiBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSBtYXkgZXhwZWN0IHRoZSBwb2ludGVyIHRvIG5vdCBtb3ZlICovCi0JCXNhdmVfc2VlayA9IGxzZWVrNjQoaW5wdXRfZmQsIDAsIFNFRUtfQ1VSKTsKKwkJc2F2ZV9zZWVrID0gbHNlZWsoaW5wdXRfZmQsIDAsIFNFRUtfQ1VSKTsKIAotCQlyZXQgPSBsc2VlazY0KGlucHV0X2ZkLCBjcHVfZGF0YVtjcHVdLm9mZnNldCwgU0VFS19TRVQpOwotCQlpZiAocmV0IDwgMCkKKwkJcmV0ID0gbHNlZWsoaW5wdXRfZmQsIGNwdV9kYXRhW2NwdV0ub2Zmc2V0LCBTRUVLX1NFVCk7CisJCWlmIChyZXQgPT0gKG9mZl90KS0xKQogCQkJZGllKCJmYWlsZWQgdG8gbHNlZWsiKTsKIAkJcmV0ID0gcmVhZChpbnB1dF9mZCwgY3B1X2RhdGFbY3B1XS5wYWdlLCBwYWdlX3NpemUpOwogCQlpZiAocmV0IDwgMCkKIAkJCWRpZSgiZmFpbGVkIHRvIHJlYWQgcGFnZSIpOwogCiAJCS8qIHJlc2V0IHRoZSBmaWxlIHBvaW50ZXIgYmFjayAqLwotCQlsc2VlazY0KGlucHV0X2ZkLCBzYXZlX3NlZWssIFNFRUtfU0VUKTsKKwkJbHNlZWsoaW5wdXRfZmQsIHNhdmVfc2VlaywgU0VFS19TRVQpOwogCiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VhOTgzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1zY3JpcHRpbmcuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIHRyYWNlLWV2ZW50LXNjcmlwdGluZy4gIFNjcmlwdGluZyBlbmdpbmUgY29tbW9uIGFuZCBpbml0aWFsaXphdGlvbiBjb2RlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIi4uL3BlcmYuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKKworc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKKworc3RhdGljIGludCBzdG9wX3NjcmlwdF91bnN1cHBvcnRlZCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2V2ZW50X3Vuc3VwcG9ydGVkKGludCBjcHUgX191bnVzZWQsCisJCQkJICAgICAgdm9pZCAqZGF0YSBfX3VudXNlZCwKKwkJCQkgICAgICBpbnQgc2l6ZSBfX3VudXNlZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MgX191bnVzZWQsCisJCQkJICAgICAgY2hhciAqY29tbSBfX3VudXNlZCkKK3sKK30KKworc3RhdGljIHZvaWQgcHJpbnRfcHl0aG9uX3Vuc3VwcG9ydGVkX21zZyh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCAiUHl0aG9uIHNjcmlwdGluZyBub3Qgc3VwcG9ydGVkLiIKKwkJIiAgSW5zdGFsbCBsaWJweXRob24gYW5kIHJlYnVpbGQgcGVyZiB0byBlbmFibGUgaXQuXG4iCisJCSJGb3IgZXhhbXBsZTpcbiAgIyBhcHQtZ2V0IGluc3RhbGwgcHl0aG9uLWRldiAodWJ1bnR1KSIKKwkJIlxuICAjIHl1bSBpbnN0YWxsIHB5dGhvbi1kZXZlbCAoRmVkb3JhKSIKKwkJIlxuICBldGMuXG4iKTsKK30KKworc3RhdGljIGludCBweXRob25fc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKKwkJCQkJICAgaW50IGFyZ2MgX191bnVzZWQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKiphcmd2IF9fdW51c2VkKQoreworCXByaW50X3B5dGhvbl91bnN1cHBvcnRlZF9tc2coKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBweXRob25fZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm91dGZpbGUgX191bnVzZWQpCit7CisJcHJpbnRfcHl0aG9uX3Vuc3VwcG9ydGVkX21zZygpOworCisJcmV0dXJuIC0xOworfQorCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBweXRob25fc2NyaXB0aW5nX3Vuc3VwcG9ydGVkX29wcyA9IHsKKwkubmFtZSA9ICJQeXRob24iLAorCS5zdGFydF9zY3JpcHQgPSBweXRob25fc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkLAorCS5zdG9wX3NjcmlwdCA9IHN0b3Bfc2NyaXB0X3Vuc3VwcG9ydGVkLAorCS5wcm9jZXNzX2V2ZW50ID0gcHJvY2Vzc19ldmVudF91bnN1cHBvcnRlZCwKKwkuZ2VuZXJhdGVfc2NyaXB0ID0gcHl0aG9uX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZCwKK307CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3B5dGhvbl9zY3JpcHRpbmcoc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdGluZ19vcHMpCit7CisJaW50IGVycjsKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUHl0aG9uIiwgc2NyaXB0aW5nX29wcyk7CisJaWYgKGVycikKKwkJZGllKCJlcnJvciByZWdpc3RlcmluZyBQeXRob24gc2NyaXB0IGV4dGVuc2lvbiIpOworCisJZXJyID0gc2NyaXB0X3NwZWNfcmVnaXN0ZXIoInB5Iiwgc2NyaXB0aW5nX29wcyk7CisJaWYgKGVycikKKwkJZGllKCJlcnJvciByZWdpc3RlcmluZyBweSBzY3JpcHQgZXh0ZW5zaW9uIik7CisKKwlzY3JpcHRpbmdfY29udGV4dCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0KSk7Cit9CisKKyNpZmRlZiBOT19MSUJQWVRIT04KK3ZvaWQgc2V0dXBfcHl0aG9uX3NjcmlwdGluZyh2b2lkKQoreworCXJlZ2lzdGVyX3B5dGhvbl9zY3JpcHRpbmcoJnB5dGhvbl9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzKTsKK30KKyNlbHNlCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBweXRob25fc2NyaXB0aW5nX29wczsKKwordm9pZCBzZXR1cF9weXRob25fc2NyaXB0aW5nKHZvaWQpCit7CisJcmVnaXN0ZXJfcHl0aG9uX3NjcmlwdGluZygmcHl0aG9uX3NjcmlwdGluZ19vcHMpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHByaW50X3BlcmxfdW5zdXBwb3J0ZWRfbXNnKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJQZXJsIHNjcmlwdGluZyBub3Qgc3VwcG9ydGVkLiIKKwkJIiAgSW5zdGFsbCBsaWJwZXJsIGFuZCByZWJ1aWxkIHBlcmYgdG8gZW5hYmxlIGl0LlxuIgorCQkiRm9yIGV4YW1wbGU6XG4gICMgYXB0LWdldCBpbnN0YWxsIGxpYnBlcmwtZGV2ICh1YnVudHUpIgorCQkiXG4gICMgeXVtIGluc3RhbGwgJ3BlcmwoRXh0VXRpbHM6OkVtYmVkKScgKEZlZG9yYSkiCisJCSJcbiAgZXRjLlxuIik7Cit9CisKK3N0YXRpYyBpbnQgcGVybF9zdGFydF9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqc2NyaXB0IF9fdW51c2VkLAorCQkJCQkgaW50IGFyZ2MgX191bnVzZWQsCisJCQkJCSBjb25zdCBjaGFyICoqYXJndiBfX3VudXNlZCkKK3sKKwlwcmludF9wZXJsX3Vuc3VwcG9ydGVkX21zZygpOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHBlcmxfZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm91dGZpbGUgX191bnVzZWQpCit7CisJcHJpbnRfcGVybF91bnN1cHBvcnRlZF9tc2coKTsKKworCXJldHVybiAtMTsKK30KKworc3RydWN0IHNjcmlwdGluZ19vcHMgcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzID0geworCS5uYW1lID0gIlBlcmwiLAorCS5zdGFydF9zY3JpcHQgPSBwZXJsX3N0YXJ0X3NjcmlwdF91bnN1cHBvcnRlZCwKKwkuc3RvcF9zY3JpcHQgPSBzdG9wX3NjcmlwdF91bnN1cHBvcnRlZCwKKwkucHJvY2Vzc19ldmVudCA9IHByb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQsCisJLmdlbmVyYXRlX3NjcmlwdCA9IHBlcmxfZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkLAorfTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdGluZ19vcHMpCit7CisJaW50IGVycjsKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUGVybCIsIHNjcmlwdGluZ19vcHMpOworCWlmIChlcnIpCisJCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgUGVybCBzY3JpcHQgZXh0ZW5zaW9uIik7CisKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicGwiLCBzY3JpcHRpbmdfb3BzKTsKKwlpZiAoZXJyKQorCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHBsIHNjcmlwdCBleHRlbnNpb24iKTsKKworCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKK30KKworI2lmZGVmIE5PX0xJQlBFUkwKK3ZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKK3sKKwlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzKTsKK30KKyNlbHNlCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ19vcHM7CisKK3ZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKK3sKKwlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfb3BzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmggYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaAppbmRleCA2YWQ0MDU2Li5jMzI2OWI5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaApAQCAtMjc5LDcgKzI3OSwxNSBAQAogCiBpbnQgc2NyaXB0X3NwZWNfcmVnaXN0ZXIoY29uc3QgY2hhciAqc3BlYywgc3RydWN0IHNjcmlwdGluZ19vcHMgKm9wcyk7CiAKLWV4dGVybiBzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ19vcHM7CiB2b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpOwordm9pZCBzZXR1cF9weXRob25fc2NyaXB0aW5nKHZvaWQpOworCitzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgeworCXZvaWQgKmV2ZW50X2RhdGE7Cit9OworCitpbnQgY29tbW9uX3BjKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7CitpbnQgY29tbW9uX2ZsYWdzKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7CitpbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKIAogI2VuZGlmIC8qIF9fUEVSRl9UUkFDRV9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuYyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliODkwZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmMKQEAgLTAsMCArMSw5NCBAQAorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCitpbnQgbWtkaXJfcChjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgZXJyOworCWNoYXIgKmQgPSBwYXRoOworCisJaWYgKCpkICE9ICcvJykKKwkJcmV0dXJuIC0xOworCisJaWYgKHN0YXQocGF0aCwgJnN0KSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgqKytkID09ICcvJyk7CisKKwl3aGlsZSAoKGQgPSBzdHJjaHIoZCwgJy8nKSkpIHsKKwkJKmQgPSAnXDAnOworCQllcnIgPSBzdGF0KHBhdGgsICZzdCkgJiYgbWtkaXIocGF0aCwgbW9kZSk7CisJCSpkKysgPSAnLyc7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisJCXdoaWxlICgqZCA9PSAnLycpCisJCQkrK2Q7CisJfQorCXJldHVybiAoc3RhdChwYXRoLCAmc3QpICYmIG1rZGlyKHBhdGgsIG1vZGUpKSA/IC0xIDogMDsKK30KKworc3RhdGljIGludCBzbG93X2NvcHlmaWxlKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKQoreworCWludCBlcnIgPSAwOworCWNoYXIgKmxpbmUgPSBOVUxMOworCXNpemVfdCBuOworCUZJTEUgKmZyb21fZnAgPSBmb3Blbihmcm9tLCAiciIpLCAqdG9fZnA7CisKKwlpZiAoZnJvbV9mcCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXRvX2ZwID0gZm9wZW4odG8sICJ3Iik7CisJaWYgKHRvX2ZwID09IE5VTEwpCisJCWdvdG8gb3V0X2ZjbG9zZV9mcm9tOworCisJd2hpbGUgKGdldGxpbmUoJmxpbmUsICZuLCBmcm9tX2ZwKSA+IDApCisJCWlmIChmcHV0cyhsaW5lLCB0b19mcCkgPT0gRU9GKQorCQkJZ290byBvdXRfZmNsb3NlX3RvOworCWVyciA9IDA7CitvdXRfZmNsb3NlX3RvOgorCWZjbG9zZSh0b19mcCk7CisJZnJlZShsaW5lKTsKK291dF9mY2xvc2VfZnJvbToKKwlmY2xvc2UoZnJvbV9mcCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IGNvcHlmaWxlKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKQoreworCWludCBmcm9tZmQsIHRvZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisJdm9pZCAqYWRkcjsKKwlpbnQgZXJyID0gLTE7CisKKwlpZiAoc3RhdChmcm9tLCAmc3QpKQorCQlnb3RvIG91dDsKKworCWlmIChzdC5zdF9zaXplID09IDApIC8qIC9wcm9jPyBkbyBpdCBzbG93bHkuLi4gKi8KKwkJcmV0dXJuIHNsb3dfY29weWZpbGUoZnJvbSwgdG8pOworCisJZnJvbWZkID0gb3Blbihmcm9tLCBPX1JET05MWSk7CisJaWYgKGZyb21mZCA8IDApCisJCWdvdG8gb3V0OworCisJdG9mZCA9IGNyZWF0KHRvLCAwNzU1KTsKKwlpZiAodG9mZCA8IDApCisJCWdvdG8gb3V0X2Nsb3NlX2Zyb207CisKKwlhZGRyID0gbW1hcChOVUxMLCBzdC5zdF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmcm9tZmQsIDApOworCWlmIChhZGRyID09IE1BUF9GQUlMRUQpCisJCWdvdG8gb3V0X2Nsb3NlX3RvOworCisJaWYgKHdyaXRlKHRvZmQsIGFkZHIsIHN0LnN0X3NpemUpID09IHN0LnN0X3NpemUpCisJCWVyciA9IDA7CisKKwltdW5tYXAoYWRkciwgc3Quc3Rfc2l6ZSk7CitvdXRfY2xvc2VfdG86CisJY2xvc2UodG9mZCk7CisJaWYgKGVycikKKwkJdW5saW5rKHRvKTsKK291dF9jbG9zZV9mcm9tOgorCWNsb3NlKGZyb21mZCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmggYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCmluZGV4IGM2NzNkODguLjBmNWIyYTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaApAQCAtNDAzLDQgKzQwMyw3IEBACiAjZW5kaWYKICNlbmRpZgogCitpbnQgbWtkaXJfcChjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSk7CitpbnQgY29weWZpbGUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYyBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYwppbmRleCAxYzE1ZTM5Li5jZmE1NWQ2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCkBAIC0xNjksNiArMTY5LDcgQEAKIAkJCQljb3VudGVyd2lkdGhbal0sIHZhbHVlcy0+dmFsdWVbaV1bal0pOwogCQlmcHJpbnRmKGZwLCAiXG4iKTsKIAl9CisJZnJlZShjb3VudGVyd2lkdGgpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX3JlYWRfdmFsdWVzX19kaXNwbGF5X3JhdyhGSUxFICpmcCwK